Built motion from commit (unavailable).|2.4.3 2.4.3
authorAndrea Bianco <andrea.bianco@xcally.com>
Thu, 16 Jan 2020 14:15:23 +0000 (15:15 +0100)
committerAndrea Bianco <andrea.bianco@xcally.com>
Thu, 16 Jan 2020 14:15:23 +0000 (15:15 +0100)
1132 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/app/toolbar/i18n/fi.json
public/app/toolbar/i18n/pt-PT.json
public/app/toolbar/i18n/ru.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/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 8bac007..2d13452 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-12T16:00:26.502Z",\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-16T14:09:10.726Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r});
index 7fe8089..5da069c 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-12T16:00:26.502Z",\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-16T14:09:10.726Z",\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..294f69d 100644 (file)
@@ -63,8 +63,8 @@
             "CUSTOM_DASHBOARDS_PERMISSIONS": "تتم إدارة أذونات Dashboards المخصصة في وحدة الأدوات",
             "APIKEY": "يرجى استخدام زر \"API key manager\" على شريط الأدوات لإدارة هذا المفتاح",
             "ENABLEAUTOMATICSCREENRECORDING": "تتوفر الوظيفة للقناة الصوتية فقط",
-            "BLOCKED": "قم بالتبديل إلى حظر / إلغاء حظر المستخدم مؤقتًا",
-            "DISABLED": "التبديل إلى تعطيل / تنشيط المستخدم بشكل دائم"
+            "BLOCKED": "قفل / فتح الوصول",
+            "DISABLED": "حدد لإلغاء تنشيط / إلغاء تحديد لإعادة تنشيط"
         },
         "ADD_AGENT": "إضافة ممثل خدمة",
         "ADD_USER": "إضافة المستخدم",
         "ENABLEAUTOMATICSCREENRECORDING": "تمكين تسجيل الشاشة التلقائي",
         "ENABLESCREENRECORDINGBYAGENT": "تمكين تسجيل الشاشة بواسطة وكيل",
         "ENABLEVIDEOECORDING": "تمكين تسجيل الفيديو",
-        "BLOCKED": "مسدود",
-        "DISABLED": "معاق"
+        "BLOCKED": "مقفل",
+        "DISABLED": "المعطلة"
     }
 }
\ No newline at end of file
index 617a3b3..bf53f8b 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": "Lås / lås op adgang",
+            "DISABLED": "vælg for at deaktivere / fjerne markering for at genaktivere"
         },
         "NEW_PASSWORD": "Ny adgangskode",
         "CONFIRM_PASSWORD": "Bekræft adgangskode",
         "ENABLEAUTOMATICSCREENRECORDING": "Aktivér automatisk skærmoptagelse",
         "ENABLESCREENRECORDINGBYAGENT": "Aktivér skærmoptagelse af agent",
         "ENABLEVIDEOECORDING": "Aktivér videooptagelse",
-        "BLOCKED": "blokeret",
-        "DISABLED": "handicappet"
+        "BLOCKED": "Låst",
+        "DISABLED": "Deaktiveret"
     }
 }
\ No newline at end of file
index 661f051..a5ffc0a 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": "Zugriff sperren / entsperren",
+            "DISABLED": "Zum Deaktivieren auswählen / Zum Reaktivieren deaktivieren"
         },
         "NEW_PASSWORD": "Neues Kennwort",
         "CONFIRM_PASSWORD": "Passwort bestätigen",
         "ENABLEAUTOMATICSCREENRECORDING": "Aktivieren Sie die automatische Bildschirmaufnahme",
         "ENABLESCREENRECORDINGBYAGENT": "Aktivieren Sie die Bildschirmaufzeichnung nach Agent",
         "ENABLEVIDEOECORDING": "Videoaufnahme aktivieren",
-        "BLOCKED": "verstopft",
+        "BLOCKED": "Gesperrt",
         "DISABLED": "Deaktiviert"
     }
 }
\ No newline at end of file
index 6d083ba..5d50ff4 100644 (file)
         "INTERNAL": "Internal",
         "TRANSPORT": "Transport",
         "ALLOWCODECS": "Allowed Codecs",
-        "DISABLED": "Disabled",
-        "BLOCKED": "Blocked",
+        "DISABLED": "Deactivated",
+        "BLOCKED": "Locked",
         "HELP": {
-            "DISABLED": "Switch to permanently disable / activate user",
-            "BLOCKED": "Switch to temporarily block / unblock user",
+            "DISABLED": "select to deactivate / unselect to reactivate",
+            "BLOCKED": "Lock / Unlock access",
             "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..d60f67d 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",
         "ENABLEAUTOMATICSCREENRECORDING": "Habilitar grabación automática de pantalla",
         "ENABLESCREENRECORDINGBYAGENT": "Habilitar grabación de pantalla por agente",
         "ENABLEVIDEOECORDING": "Habilitar grabación de video",
-        "BLOCKED": "Obstruido",
-        "DISABLED": "Discapacitado"
+        "BLOCKED": "Bloqueado",
+        "DISABLED": "Deshabilitado"
     }
 }
\ No newline at end of file
index 3ea64ab..87ef079 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "مجوزهای داشبوردهای سفارشی در ماژول Tools مدیریت می شوند",
             "APIKEY": "لطفاً برای مدیریت این کلید از دکمه \"مدیر کلید API\" در نوار ابزار استفاده کنید",
             "ENABLEAUTOMATICSCREENRECORDING": "این عملکرد فقط برای کانال صوتی در دسترس است",
-            "BLOCKED": "به کاربر موقتاً مسدود / انسداد تغییر دهید",
-            "DISABLED": "به کاربر غیرفعال یا فعال کردن دائمی تغییر دهید"
+            "BLOCKED": "دسترسی را قفل / باز کنید",
+            "DISABLED": "غیرفعال کردن / انتخاب مجدد برای فعال کردن مجدد را انتخاب کنید"
         },
         "NEW_PASSWORD": "اسم رمز جدید",
         "CONFIRM_PASSWORD": "تأیید رمز ورود",
         "ENABLEAUTOMATICSCREENRECORDING": "ضبط خودکار صفحه نمایش را فعال کنید",
         "ENABLESCREENRECORDINGBYAGENT": "ضبط صفحه توسط نماینده را فعال کنید",
         "ENABLEVIDEOECORDING": "ضبط ویدیو را فعال کنید",
-        "BLOCKED": "مسدود",
-        "DISABLED": "معلول"
+        "BLOCKED": "قفل شده",
+        "DISABLED": "غیرفعال شده است"
     }
 }
\ No newline at end of file
index 5d99aee..fd05d2a 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": "Lukitse / avaa pääsy",
+            "DISABLED": "valitse, jos haluat poistaa käytöstä tai poistaa valinnan uudelleen aktivoidaksesi"
         },
         "NEW_PASSWORD": "Uusi salasana",
         "CONFIRM_PASSWORD": "Vahvista salasana",
         "ENABLEAUTOMATICSCREENRECORDING": "Ota automaattinen näytön tallennus käyttöön",
         "ENABLESCREENRECORDINGBYAGENT": "Ota näytön tallennus käyttöön agentin toimesta",
         "ENABLEVIDEOECORDING": "Ota videotallennus käyttöön",
-        "BLOCKED": "Tukossa",
-        "DISABLED": "Liikuntarajoitteinen"
+        "BLOCKED": "kiinni",
+        "DISABLED": "deaktivoitu"
     }
 }
\ No newline at end of file
index 6c6f1ec..ad4edd4 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": "Verrouiller / Déverrouiller l'accès",
+            "DISABLED": "sélectionner pour désactiver / désélectionner pour réactiver"
         },
         "NEW_PASSWORD": "Nouveau mot de passe",
         "CONFIRM_PASSWORD": "Confirmer le mot de passe",
         "ENABLEAUTOMATICSCREENRECORDING": "Activer l'enregistrement d'écran automatique",
         "ENABLESCREENRECORDINGBYAGENT": "Activer l'enregistrement d'écran par l'agent",
         "ENABLEVIDEOECORDING": "Activer l'enregistrement vidéo",
-        "BLOCKED": "Bloqué",
-        "DISABLED": "désactivé"
+        "BLOCKED": "Fermé à clé",
+        "DISABLED": "Désactivée"
     }
 }
\ No newline at end of file
index 551a9dc..25f20fb 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "הרשאות לוח המחוונים המותאמות אישית מנוהלות במודול הכלים",
             "APIKEY": "אנא השתמש בכפתור 'מנהל מקש API' בסרגל הכלים כדי לנהל מפתח זה",
             "ENABLEAUTOMATICSCREENRECORDING": "הפונקציונליות זמינה רק לערוץ קולי",
-            "BLOCKED": "עבור לחסימה / ביטול חסימה של משתמש באופן זמני",
-            "DISABLED": "עבור להשבית / הפעלה של משתמש לצמיתות"
+            "BLOCKED": "נעילה / ביטול נעילת גישה",
+            "DISABLED": "בחר לבטל / לבטל את הבחירה להפעלה מחדש"
         },
         "NEW_PASSWORD": "סיסמה חדשה",
         "CONFIRM_PASSWORD": "אשר סיסמה",
         "ENABLEAUTOMATICSCREENRECORDING": "אפשר הקלטת מסך אוטומטית",
         "ENABLESCREENRECORDINGBYAGENT": "אפשר הקלטת מסך על ידי סוכן",
         "ENABLEVIDEOECORDING": "אפשר הקלטת וידאו",
-        "BLOCKED": "חסום",
-        "DISABLED": "נכים"
+        "BLOCKED": "נעול",
+        "DISABLED": "מבוטל"
     }
 }
\ No newline at end of file
index 734c6c6..21805e2 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "कस्टम डैशबोर्ड अनुमतियाँ टूल मॉड्यूल में प्रबंधित की जाती हैं",
             "APIKEY": "कृपया इस कुंजी को प्रबंधित करने के लिए टूलबार पर 'एपीआई कुंजी प्रबंधक' बटन का उपयोग करें",
             "ENABLEAUTOMATICSCREENRECORDING": "कार्यक्षमता केवल वॉयस चैनल के लिए उपलब्ध है",
-            "BLOCKED": "उपयोगकर्ता को अस्थायी रूप से ब्लॉक / अनब्लॉक करने के लिए स्विच करें",
-            "DISABLED": "उपयोगकर्ता को स्थायी रूप से अक्षम / सक्रिय करने के लिए स्विच करें"
+            "BLOCKED": "लॉक / अनलॉक का उपयोग",
+            "DISABLED": "पुनः सक्रिय करने के लिए निष्क्रिय / अचयनित करने का चयन करें"
         },
         "NEW_PASSWORD": "नया पासवर्ड",
         "CONFIRM_PASSWORD": "पासवर्ड की पुष्टि करें:",
         "ENABLEAUTOMATICSCREENRECORDING": "स्वचालित स्क्रीन रिकॉर्डिंग सक्षम करें",
         "ENABLESCREENRECORDINGBYAGENT": "एजेंट द्वारा स्क्रीन रिकॉर्डिंग सक्षम करें",
         "ENABLEVIDEOECORDING": "वीडियो रिकॉर्डिंग सक्षम करें",
-        "BLOCKED": "अवरोधित",
-        "DISABLED": "विकलांग"
+        "BLOCKED": "बंद",
+        "DISABLED": "निष्क्रिय"
     }
 }
\ No newline at end of file
index 02dfea5..ce60415 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": "Kunci / Buka kunci akses",
+            "DISABLED": "pilih untuk menonaktifkan / membatalkan pilihan untuk mengaktifkan kembali"
         },
         "ACCOUNT": "Rekening",
         "ACCOUNTNAME": "Nama akun",
         "ENABLEAUTOMATICSCREENRECORDING": "Aktifkan Perekaman Layar Otomatis",
         "ENABLESCREENRECORDINGBYAGENT": "Aktifkan Perekaman Layar oleh Agen",
         "ENABLEVIDEOECORDING": "Aktifkan Perekaman Video",
-        "BLOCKED": "Dicekal",
-        "DISABLED": "Dengan disabilitas"
+        "BLOCKED": "Terkunci",
+        "DISABLED": "Dinonaktifkan"
     }
 }
\ No newline at end of file
index 5a009c7..fef8c0f 100644 (file)
         "INTERNAL": "Interno",
         "TRANSPORT": "Protocollo",
         "ALLOWCODECS": "Codecs Abilitati",
-        "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": "Blocca / sblocca l'accesso",
+            "DISABLED": "selezionare per disattivare / deselezionare per riattivare"
         },
         "NEW_PASSWORD": "Nuova Password",
         "CONFIRM_PASSWORD": "Conferma Password",
         "GENERATE": "(Ri)Generare",
         "MANAGE_API_KEY": "Gestore API Key",
         "REMOVE": "Rimuovere",
-        "ENABLEVIDEOECORDING": "Abilita registrazione video"
+        "ENABLEVIDEOECORDING": "Abilita registrazione video",
+        "BLOCKED": "Bloccato",
+        "DISABLED": "Disattivato"
     }
 }
\ No newline at end of file
index 4b64292..86576d1 100644 (file)
@@ -63,8 +63,8 @@
             "CUSTOM_DASHBOARDS_PERMISSIONS": "カスタムダッシュボードの権限は、ツールモジュールで管理されます",
             "APIKEY": "このキーを管理するには、ツールバーの「APIキーマネージャー」ボタンを使用してください",
             "ENABLEAUTOMATICSCREENRECORDING": "この機能は音声チャンネルでのみ利用可能です",
-            "BLOCKED": "ユーザーを一時的にブロック/ブロック解除する切り替え",
-            "DISABLED": "ユーザーを永続的に無効化/有効化するスイッチ"
+            "BLOCKED": "アクセスのロック/ロック解除",
+            "DISABLED": "非アクティブ化を選択/再アクティブ化を選択解除"
         },
         "ACCOUNT": "アカウント",
         "ACCOUNTNAME": "アカウント名",
         "ENABLEAUTOMATICSCREENRECORDING": "自動画面記録を有効にする",
         "ENABLESCREENRECORDINGBYAGENT": "エージェントによる画面記録を有効にする",
         "ENABLEVIDEOECORDING": "ビデオ録画を有効にする",
-        "BLOCKED": "ブロックされました",
-        "DISABLED": "無効"
+        "BLOCKED": "ロック済み",
+        "DISABLED": "無効化"
     }
 }
\ No newline at end of file
index 9fd43b7..0e75ee2 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "사용자 정의 대시 보드 권한은 도구 모듈에서 관리됩니다.",
             "APIKEY": "이 키를 관리하려면 툴바의 'API 키 관리자'버튼을 사용하십시오",
             "ENABLEAUTOMATICSCREENRECORDING": "이 기능은 음성 채널에만 사용할 수 있습니다",
-            "BLOCKED": "사용자를 일시적으로 차단 / 차단 해제로 전환",
-            "DISABLED": "사용자를 영구적으로 비활성화 / 활성화로 전환"
+            "BLOCKED": "액세스 잠금 / 잠금 해제",
+            "DISABLED": "비활성화하려면 선택 / 비활성화하려면 선택 취소"
         },
         "NEW_PASSWORD": "신규 비밀번호",
         "CONFIRM_PASSWORD": "비밀번호 확인",
         "ENABLEAUTOMATICSCREENRECORDING": "자동 화면 녹화 사용",
         "ENABLESCREENRECORDINGBYAGENT": "에이전트 별 화면 녹화 활성화",
         "ENABLEVIDEOECORDING": "비디오 녹화 활성화",
-        "BLOCKED": "막힌",
+        "BLOCKED": "잠김",
         "DISABLED": "비활성화"
     }
 }
\ No newline at end of file
index 26801ff..b6b16e5 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": "Bloķēt / atbloķēt piekļuvi",
+            "DISABLED": "atlasiet, lai deaktivizētu / noņemtu atlasi, lai atkārtoti aktivizētu"
         },
         "NO_PASSWORD_CHANGE": "Nav paroles maiņas",
         "SECURITY_SUITE": "Drošības komplekts",
         "ENABLEAUTOMATICSCREENRECORDING": "Iespējot automātisko ekrāna ierakstīšanu",
         "ENABLESCREENRECORDINGBYAGENT": "Iespējot ekrāna ierakstīšanu ar aģenta palīdzību",
         "ENABLEVIDEOECORDING": "Iespējot video ierakstīšanu",
-        "BLOCKED": "Bloķēts",
-        "DISABLED": "Invalīds"
+        "BLOCKED": "Slēgts",
+        "DISABLED": "Deaktivizēts"
     }
 }
\ No newline at end of file
index 71e4c09..0c744f6 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": "Toegang vergrendelen / ontgrendelen",
+            "DISABLED": "selecteer om te deactiveren / deselecteer om te reactiveren"
         },
         "NEW_PASSWORD": "Nieuw wachtwoord",
         "CONFIRM_PASSWORD": "Wachtwoord bevestigen",
         "ENABLEAUTOMATICSCREENRECORDING": "Schakel Automatische schermopname in",
         "ENABLESCREENRECORDINGBYAGENT": "Schermopname per agent inschakelen",
         "ENABLEVIDEOECORDING": "Schakel video-opname in",
-        "BLOCKED": "geblokkeerd",
-        "DISABLED": "Gehandicapt"
+        "BLOCKED": "Op slot",
+        "DISABLED": "Gedeactiveerd"
     }
 }
\ No newline at end of file
index 06da81a..5e245b2 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": "Lås / lås opp tilgangen",
+            "DISABLED": "Velg for å deaktivere / fjerne merket for å aktivere på nytt"
         },
         "NEW_PASSWORD": "Nytt passord",
         "CONFIRM_PASSWORD": "Bekreft passord",
         "ENABLEAUTOMATICSCREENRECORDING": "Aktiver automatisk skjermopptak",
         "ENABLESCREENRECORDINGBYAGENT": "Aktiver skjermopptak av agent",
         "ENABLEVIDEOECORDING": "Aktiver videoopptak",
-        "BLOCKED": "blokkert",
-        "DISABLED": "Funksjonshemmet"
+        "BLOCKED": "Låst",
+        "DISABLED": "Deaktivert"
     }
 }
\ No newline at end of file
index 6951e99..77cfa22 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": "Zablokuj / odblokuj dostęp",
+            "DISABLED": "wybierz, aby dezaktywować / odznaczyć, aby reaktywować"
         },
         "NEW_PASSWORD": "Nowe hasło",
         "CONFIRM_PASSWORD": "Potwierdź hasło",
         "ENABLESCREENRECORDINGBYAGENT": "Włącz nagrywanie ekranu przez agenta",
         "ENABLEVIDEOECORDING": "Włącz nagrywanie wideo",
         "BLOCKED": "Zablokowany",
-        "DISABLED": "Niepełnosprawny"
+        "DISABLED": "Dezaktywowano"
     }
 }
\ No newline at end of file
index 2de20ee..9f94e85 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": "Bloquear / desbloquear acesso",
+            "DISABLED": "selecione para desativar / desmarcar para reativar"
         },
         "NEW_PASSWORD": "Nova Senha",
         "CONFIRM_PASSWORD": "Confirmar a Senha",
index b8cfd32..477bb12 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": "Bloquear / desbloquear acesso",
+            "DISABLED": "selecione para desativar / desmarcar para reativar"
         },
         "NEW_PASSWORD": "Nova Senha",
         "CONFIRM_PASSWORD": "Confirmar Senha",
index 0a75959..474c14c 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Пользовательские разрешения Dashboards управляются в модуле Инструменты",
             "APIKEY": "Пожалуйста, используйте кнопку «API key manager» на панели инструментов для управления этим ключом",
             "ENABLEAUTOMATICSCREENRECORDING": "Функциональность доступна только для голосового канала",
-            "BLOCKED": "Переключиться на временную блокировку / разблокировку пользователя",
-            "DISABLED": "Переключить на постоянное отключение / активацию пользователя"
+            "BLOCKED": "Блокировка / разблокировка доступа",
+            "DISABLED": "выберите, чтобы деактивировать / отменить выбор, чтобы активировать"
         },
         "NEW_PASSWORD": "Новый пароль",
         "CONFIRM_PASSWORD": "Подтвердите пароль",
         "ENABLEAUTOMATICSCREENRECORDING": "Включить автоматическую запись экрана",
         "ENABLESCREENRECORDINGBYAGENT": "Включить запись экрана агентом",
         "ENABLEVIDEOECORDING": "Включить запись видео",
-        "BLOCKED": "блокированный",
-        "DISABLED": "Отключено"
+        "BLOCKED": "запертый",
+        "DISABLED": "ММГ"
     }
 }
\ No newline at end of file
index 815d2a6..85fd04c 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": "Lås / lås upp åtkomst",
+            "DISABLED": "välj för att inaktivera / avmarkera för att återaktivera"
         },
         "NEW_PASSWORD": "Nytt lösenord",
         "CONFIRM_PASSWORD": "Bekräfta lösenord",
         "ENABLEAUTOMATICSCREENRECORDING": "Aktivera automatisk skärminspelning",
         "ENABLESCREENRECORDINGBYAGENT": "Aktivera skärminspelning av agent",
         "ENABLEVIDEOECORDING": "Aktivera videoinspelning",
-        "BLOCKED": "Blockerad",
+        "BLOCKED": "låst",
         "DISABLED": "Inaktiverad"
     }
 }
\ No newline at end of file
index 6f8cb1b..43d0435 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": "Erişimi kilitleme / kilidi açma",
+            "DISABLED": "devre dışı bırakmak için seçin / yeniden etkinleştirmek için seçimi kaldırın"
         },
         "NEW_PASSWORD": "Yeni Parola",
         "CONFIRM_PASSWORD": "Parolayı Onayla",
         "ENABLEAUTOMATICSCREENRECORDING": "Otomatik Ekran Kaydını Etkinleştir",
         "ENABLESCREENRECORDINGBYAGENT": "Aracıya Göre Ekran Kaydını Etkinleştir",
         "ENABLEVIDEOECORDING": "Video Kaydını Etkinleştir",
-        "BLOCKED": "tıkalı",
-        "DISABLED": "engelli"
+        "BLOCKED": "Kilitli",
+        "DISABLED": "Devre dışı"
     }
 }
\ No newline at end of file
index dde3182..3f36833 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "自定义仪表板权限在“工具”模块中进行管理",
             "APIKEY": "请使用工具栏上的“API密钥管理器”按钮来管理此密钥",
             "ENABLEAUTOMATICSCREENRECORDING": "该功能仅适用于语音通道",
-            "BLOCKED": "切换为临时阻止/取消阻止用户",
-            "DISABLED": "切换为永久禁用/激活用户"
+            "BLOCKED": "锁定/解锁访问",
+            "DISABLED": "选择禁用/取消选择重新激活"
         },
         "NEW_PASSWORD": "新的密码。",
         "CONFIRM_PASSWORD": "确认密码",
         "ENABLEAUTOMATICSCREENRECORDING": "启用自动屏幕记录",
         "ENABLESCREENRECORDINGBYAGENT": "按代理启用屏幕记录",
         "ENABLEVIDEOECORDING": "启用视频录制",
-        "BLOCKED": "受阻",
-        "DISABLED": "残障人士"
+        "BLOCKED": "已锁定",
+        "DISABLED": "已停用"
     }
 }
\ No newline at end of file
index 6f43bba..e92699c 100644 (file)
             "CUSTOM_DASHBOARDS_PERMISSIONS": "自定義儀表板權限在“工具”模塊中進行管理",
             "APIKEY": "請使用工具欄上的“API密鑰管理器”按鈕來管理此密鑰",
             "ENABLEAUTOMATICSCREENRECORDING": "該功能僅適用於語音通道",
-            "BLOCKED": "切換為臨時阻止/取消阻止用戶",
-            "DISABLED": "切換為永久禁用/激活用戶"
+            "BLOCKED": "鎖定/解鎖訪問",
+            "DISABLED": "選擇禁用/取消選擇重新激活"
         },
         "NEW_PASSWORD": "新密碼",
         "CONFIRM_PASSWORD": "確認密碼",
         "ENABLEAUTOMATICSCREENRECORDING": "啟用自動屏幕記錄",
         "ENABLESCREENRECORDINGBYAGENT": "按代理啟用屏幕記錄",
         "ENABLEVIDEOECORDING": "啟用視頻錄製",
-        "BLOCKED": "受阻",
-        "DISABLED": "殘障人士"
+        "BLOCKED": "已鎖定",
+        "DISABLED": "已停用"
     }
 }
\ No newline at end of file
index 2403dd6..a79b273 100644 (file)
@@ -23,7 +23,7 @@
         "PORTUGUESE": "Portugalin",
         "NORWEGIAN": "Norja",
         "HINDI": "Hindin",
-        "TURKISH": "Turkin",
+        "TURKISH": "Turkki",
         "PERSIAN": "Persialais",
         "LOGIN_TIME": "Kirjaudu aika",
         "PAUSE_TIME": "Tauon pituus",
index 237625b..ee91e44 100644 (file)
@@ -23,7 +23,7 @@
         "PORTUGUESE": "Português",
         "NORWEGIAN": "Norueguês",
         "HINDI": "O Hindi",
-        "TURKISH": "Banho turco",
+        "TURKISH": "Turco",
         "PERSIAN": "Persa",
         "LOGIN_TIME": "O tempo de início de sessão",
         "PAUSE_TIME": "Tempo de pausa",
index 17873d0..486ba3a 100644 (file)
@@ -23,7 +23,7 @@
         "PORTUGUESE": "Португальский",
         "NORWEGIAN": "Норвежский",
         "HINDI": "Хинди",
-        "TURKISH": "Турецкий",
+        "TURKISH": "турецкий язык",
         "PERSIAN": "Персидский",
         "LOGIN_TIME": "Время входа",
         "PAUSE_TIME": "Время паузы",
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 897c548..e698548 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-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(_0x335344,_0x4aba0c){var _0x2f609a=function(_0x4f2126){while(--_0x4f2126){_0x335344['push'](_0x335344['shift']());}};_0x2f609a(++_0x4aba0c);}(_0x34e8,0x12c));var _0x834e=function(_0x5e8a39,_0x432d5b){_0x5e8a39=_0x5e8a39-0x0;var _0x44840e=_0x34e8[_0x5e8a39];return _0x44840e;};'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
+var _0x9c44=['script','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]','VIRTUAL','getDataValue','action','STRING','contactManager','jscripty','browser','bot'];(function(_0x101015,_0x5ab03c){var _0x42237c=function(_0x4f37e8){while(--_0x4f37e8){_0x101015['push'](_0x101015['shift']());}};_0x42237c(++_0x5ab03c);}(_0x9c44,0x178));var _0x49c4=function(_0x4d613c,_0x55f220){_0x4d613c=_0x4d613c-0x0;var _0x301fe3=_0x9c44[_0x4d613c];return _0x301fe3;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0x49c4('0x0')],'get':function(_0x18bf2d){return this[_0x49c4('0x1')](_0x49c4('0x2'));}},'action':{'type':Sequelize[_0x49c4('0x3')],'allowNull':![],'validate':{'isIn':{'args':[[_0x49c4('0x4'),'integration','motionbar',_0x49c4('0x5'),'urlForward',_0x49c4('0x6'),_0x49c4('0x7'),_0x49c4('0x8')]],'msg':_0x49c4('0x9')}},'comment':_0x49c4('0x9')},'data1':{'type':Sequelize['STRING'](0x1000),'comment':_0x49c4('0xa')},'data2':{'type':Sequelize[_0x49c4('0x3')](0x1000),'comment':_0x49c4('0xb')},'data3':{'type':Sequelize[_0x49c4('0x3')](0x1000),'comment':'motionbar[NULL,NULL,WinAppArguments]'},'data4':{'type':Sequelize['STRING'](0x1000)},'data5':{'type':Sequelize[_0x49c4('0x3')](0x1000)},'data6':{'type':Sequelize[_0x49c4('0x3')]},'data7':{'type':Sequelize['TEXT']}};
\ No newline at end of file
index a691106..ac58d4a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd234=['body','Action','find','params','catch','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','lodash','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','sendStatus','stack','name','send'];(function(_0x15f3c0,_0x165a64){var _0x1adfe0=function(_0x212cfc){while(--_0x212cfc){_0x15f3c0['push'](_0x15f3c0['shift']());}};_0x1adfe0(++_0x165a64);}(_0xd234,0x1db));var _0x4d23=function(_0x3c87c8,_0x626998){_0x3c87c8=_0x3c87c8-0x0;var _0x37c0e8=_0xd234[_0x3c87c8];return _0x37c0e8;};'use strict';var pdf=require(_0x4d23('0x0'));var emlformat=require(_0x4d23('0x1'));var rimraf=require(_0x4d23('0x2'));var zipdir=require(_0x4d23('0x3'));var jsonpatch=require(_0x4d23('0x4'));var rp=require(_0x4d23('0x5'));var moment=require(_0x4d23('0x6'));var BPromise=require(_0x4d23('0x7'));var Mustache=require(_0x4d23('0x8'));var util=require(_0x4d23('0x9'));var path=require(_0x4d23('0xa'));var sox=require(_0x4d23('0xb'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x4d23('0xc'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x4d23('0xd'));var deskjs=require(_0x4d23('0xe'));var toCsv=require(_0x4d23('0xf'));var querystring=require(_0x4d23('0x10'));var Papa=require(_0x4d23('0x11'));var Redis=require(_0x4d23('0x12'));var authService=require('../../components/auth/service');var qs=require(_0x4d23('0x13'));var hardwareService=require(_0x4d23('0x14'));var logger=require(_0x4d23('0x15'))(_0x4d23('0x16'));var utils=require(_0x4d23('0x17'));var config=require(_0x4d23('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3a5135,_0x2cda79){_0x2cda79=_0x2cda79||0xcc;return function(_0x3a0453){if(_0x3a0453){return _0x3a5135['sendStatus'](_0x2cda79);}return _0x3a5135[_0x4d23('0x19')](_0x2cda79)[_0x4d23('0x1a')]();};}function respondWithResult(_0x22eb25,_0x60e72b){_0x60e72b=_0x60e72b||0xc8;return function(_0xdcf9d0){if(_0xdcf9d0){return _0x22eb25[_0x4d23('0x19')](_0x60e72b)[_0x4d23('0x1b')](_0xdcf9d0);}};}function respondWithFilteredResult(_0x26de25,_0x4bd4f3){return function(_0x4af61d){if(_0x4af61d){var _0x407be0=_0x4af61d['count'],_0x516b83=_0x4bd4f3[_0x4d23('0x1c')],_0x320fb9=_0x4bd4f3['offset']+_0x4bd4f3[_0x4d23('0x1d')],_0x40e50b;if(_0x320fb9>=_0x407be0){_0x320fb9=_0x407be0;_0x40e50b=0xc8;}else{_0x40e50b=0xce;}_0x26de25['status'](_0x40e50b);return _0x26de25[_0x4d23('0x1e')](_0x4d23('0x1f'),_0x516b83+'-'+_0x320fb9+'/'+_0x407be0)[_0x4d23('0x1b')](_0x4af61d);}return null;};}function patchUpdates(_0xb0d7e8){return function(_0x53219f){try{jsonpatch[_0x4d23('0x20')](_0x53219f,_0xb0d7e8,!![]);}catch(_0x4d4f36){return BPromise[_0x4d23('0x21')](_0x4d4f36);}return _0x53219f[_0x4d23('0x22')]();};}function saveUpdates(_0x2a68c9,_0x31d469){return function(_0x491de5){if(_0x491de5){return _0x491de5[_0x4d23('0x23')](_0x2a68c9)[_0x4d23('0x24')](function(_0x3f3baf){return _0x3f3baf;});}return null;};}function removeEntity(_0x78c089,_0x19c2e5){return function(_0x13c6cd){if(_0x13c6cd){return _0x13c6cd[_0x4d23('0x25')]()[_0x4d23('0x24')](function(){_0x78c089[_0x4d23('0x19')](0xcc)[_0x4d23('0x1a')]();});}};}function handleEntityNotFound(_0x4707c0,_0xc8e9a0){return function(_0x2e2034){if(!_0x2e2034){_0x4707c0[_0x4d23('0x26')](0x194);}return _0x2e2034;};}function handleError(_0x3e0f95,_0x7f2e7){_0x7f2e7=_0x7f2e7||0x1f4;return function(_0x51d6c0){logger['error'](_0x51d6c0[_0x4d23('0x27')]);if(_0x51d6c0[_0x4d23('0x28')]){delete _0x51d6c0[_0x4d23('0x28')];}_0x3e0f95['status'](_0x7f2e7)[_0x4d23('0x29')](_0x51d6c0);};}exports['update']=function(_0x21867e,_0x1794e7){if(_0x21867e[_0x4d23('0x2a')]['id']){delete _0x21867e[_0x4d23('0x2a')]['id'];}return db[_0x4d23('0x2b')][_0x4d23('0x2c')]({'where':{'id':_0x21867e[_0x4d23('0x2d')]['id']}})[_0x4d23('0x24')](handleEntityNotFound(_0x1794e7,null))[_0x4d23('0x24')](saveUpdates(_0x21867e[_0x4d23('0x2a')],null))[_0x4d23('0x24')](respondWithResult(_0x1794e7,null))[_0x4d23('0x2e')](handleError(_0x1794e7,null));};exports['destroy']=function(_0x1f9eed,_0x284a78){return db[_0x4d23('0x2b')]['find']({'where':{'id':_0x1f9eed[_0x4d23('0x2d')]['id']}})[_0x4d23('0x24')](handleEntityNotFound(_0x284a78,null))[_0x4d23('0x24')](removeEntity(_0x284a78,null))[_0x4d23('0x2e')](handleError(_0x284a78,null));};
\ No newline at end of file
+var _0x0d69=['../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','set','Content-Range','apply','reject','update','destroy','stack','name','send','body','Action','params','then','catch','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','papaparse','../../components/parsers/qs'];(function(_0x3b0d6e,_0x15e568){var _0x231e12=function(_0x1ba9d4){while(--_0x1ba9d4){_0x3b0d6e['push'](_0x3b0d6e['shift']());}};_0x231e12(++_0x15e568);}(_0x0d69,0x15c));var _0x90d6=function(_0x20feea,_0x2b040e){_0x20feea=_0x20feea-0x0;var _0x1a9765=_0x0d69[_0x20feea];return _0x1a9765;};'use strict';var pdf=require(_0x90d6('0x0'));var emlformat=require(_0x90d6('0x1'));var rimraf=require(_0x90d6('0x2'));var zipdir=require(_0x90d6('0x3'));var jsonpatch=require(_0x90d6('0x4'));var rp=require(_0x90d6('0x5'));var moment=require(_0x90d6('0x6'));var BPromise=require(_0x90d6('0x7'));var Mustache=require(_0x90d6('0x8'));var util=require(_0x90d6('0x9'));var path=require(_0x90d6('0xa'));var sox=require(_0x90d6('0xb'));var csv=require(_0x90d6('0xc'));var ejs=require(_0x90d6('0xd'));var fs=require('fs');var _=require(_0x90d6('0xe'));var squel=require(_0x90d6('0xf'));var crypto=require(_0x90d6('0x10'));var jsforce=require(_0x90d6('0x11'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x90d6('0x12'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x90d6('0x13'));var hardwareService=require(_0x90d6('0x14'));var logger=require(_0x90d6('0x15'))(_0x90d6('0x16'));var utils=require(_0x90d6('0x17'));var config=require(_0x90d6('0x18'));var db=require(_0x90d6('0x19'))['db'];function respondWithStatusCode(_0x400eed,_0x2c81b8){_0x2c81b8=_0x2c81b8||0xcc;return function(_0x2ddb09){if(_0x2ddb09){return _0x400eed[_0x90d6('0x1a')](_0x2c81b8);}return _0x400eed['status'](_0x2c81b8)[_0x90d6('0x1b')]();};}function respondWithResult(_0x1adae5,_0x56d44d){_0x56d44d=_0x56d44d||0xc8;return function(_0x5b3fcc){if(_0x5b3fcc){return _0x1adae5[_0x90d6('0x1c')](_0x56d44d)[_0x90d6('0x1d')](_0x5b3fcc);}};}function respondWithFilteredResult(_0x51c84b,_0x1b5b32){return function(_0x522b8e){if(_0x522b8e){var _0x52592f=_0x522b8e[_0x90d6('0x1e')],_0x327579=_0x1b5b32['offset'],_0x4198b5=_0x1b5b32[_0x90d6('0x1f')]+_0x1b5b32['limit'],_0xe80f5c;if(_0x4198b5>=_0x52592f){_0x4198b5=_0x52592f;_0xe80f5c=0xc8;}else{_0xe80f5c=0xce;}_0x51c84b['status'](_0xe80f5c);return _0x51c84b[_0x90d6('0x20')](_0x90d6('0x21'),_0x327579+'-'+_0x4198b5+'/'+_0x52592f)[_0x90d6('0x1d')](_0x522b8e);}return null;};}function patchUpdates(_0x64fdaa){return function(_0x1e0038){try{jsonpatch[_0x90d6('0x22')](_0x1e0038,_0x64fdaa,!![]);}catch(_0x5ca5e2){return BPromise[_0x90d6('0x23')](_0x5ca5e2);}return _0x1e0038['save']();};}function saveUpdates(_0x3a62aa,_0x4772f8){return function(_0x179f29){if(_0x179f29){return _0x179f29[_0x90d6('0x24')](_0x3a62aa)['then'](function(_0x2f7827){return _0x2f7827;});}return null;};}function removeEntity(_0x1336c,_0x4deb69){return function(_0x3ad30d){if(_0x3ad30d){return _0x3ad30d[_0x90d6('0x25')]()['then'](function(){_0x1336c[_0x90d6('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x352ca5,_0x5c5132){return function(_0x2ddbbd){if(!_0x2ddbbd){_0x352ca5[_0x90d6('0x1a')](0x194);}return _0x2ddbbd;};}function handleError(_0x2cdbdc,_0x249a98){_0x249a98=_0x249a98||0x1f4;return function(_0x26d1f3){logger['error'](_0x26d1f3[_0x90d6('0x26')]);if(_0x26d1f3['name']){delete _0x26d1f3[_0x90d6('0x27')];}_0x2cdbdc['status'](_0x249a98)[_0x90d6('0x28')](_0x26d1f3);};}exports['update']=function(_0xbb9018,_0x57502a){if(_0xbb9018[_0x90d6('0x29')]['id']){delete _0xbb9018[_0x90d6('0x29')]['id'];}return db[_0x90d6('0x2a')]['find']({'where':{'id':_0xbb9018[_0x90d6('0x2b')]['id']}})[_0x90d6('0x2c')](handleEntityNotFound(_0x57502a,null))[_0x90d6('0x2c')](saveUpdates(_0xbb9018['body'],null))[_0x90d6('0x2c')](respondWithResult(_0x57502a,null))[_0x90d6('0x2d')](handleError(_0x57502a,null));};exports[_0x90d6('0x25')]=function(_0x340e66,_0x397ac2){return db[_0x90d6('0x2a')]['find']({'where':{'id':_0x340e66['params']['id']}})[_0x90d6('0x2c')](handleEntityNotFound(_0x397ac2,null))[_0x90d6('0x2c')](removeEntity(_0x397ac2,null))[_0x90d6('0x2d')](handleError(_0x397ac2,null));};
\ No newline at end of file
index 6c00df5..f612f42 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4dd8=['moment','bluebird','../../config/environment','./action.attributes','exports','define','Action','tools_actions','lodash','util','../../config/logger','api'];(function(_0x235602,_0x1eeca1){var _0x22959c=function(_0xd2978b){while(--_0xd2978b){_0x235602['push'](_0x235602['shift']());}};_0x22959c(++_0x1eeca1);}(_0x4dd8,0x128));var _0x84dd=function(_0x202e17,_0x44a589){_0x202e17=_0x202e17-0x0;var _0x4e46f1=_0x4dd8[_0x202e17];return _0x4e46f1;};'use strict';var _=require(_0x84dd('0x0'));var util=require(_0x84dd('0x1'));var logger=require(_0x84dd('0x2'))(_0x84dd('0x3'));var moment=require(_0x84dd('0x4'));var BPromise=require(_0x84dd('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x84dd('0x6'));var attributes=require(_0x84dd('0x7'));module[_0x84dd('0x8')]=function(_0x44b848,_0x33bff2){return _0x44b848[_0x84dd('0x9')](_0x84dd('0xa'),attributes,{'tableName':_0x84dd('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9cbf=['define','Action','tools_actions','util','../../config/logger','moment','request-promise','path','rimraf','../../config/environment'];(function(_0x47aa64,_0xfb8a07){var _0x549c7a=function(_0x266165){while(--_0x266165){_0x47aa64['push'](_0x47aa64['shift']());}};_0x549c7a(++_0xfb8a07);}(_0x9cbf,0x1a7));var _0xf9cb=function(_0x172ebc,_0x580503){_0x172ebc=_0x172ebc-0x0;var _0x4a5c1a=_0x9cbf[_0x172ebc];return _0x4a5c1a;};'use strict';var _=require('lodash');var util=require(_0xf9cb('0x0'));var logger=require(_0xf9cb('0x1'))('api');var moment=require(_0xf9cb('0x2'));var BPromise=require('bluebird');var rp=require(_0xf9cb('0x3'));var fs=require('fs');var path=require(_0xf9cb('0x4'));var rimraf=require(_0xf9cb('0x5'));var config=require(_0xf9cb('0x6'));var attributes=require('./action.attributes');module['exports']=function(_0x13b674,_0x585efa){return _0x13b674[_0xf9cb('0x7')](_0xf9cb('0x8'),attributes,{'tableName':_0xf9cb('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 286c508..4abea40 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf120=['Action,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','Action,\x20%s,\x20%s','message','result','catch','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','then','info','debug'];(function(_0x5b955c,_0x1b03c0){var _0x28028a=function(_0xd7775d){while(--_0xd7775d){_0x5b955c['push'](_0x5b955c['shift']());}};_0x28028a(++_0x1b03c0);}(_0xf120,0x179));var _0x0f12=function(_0x27094a,_0x2362ba){_0x27094a=_0x27094a-0x0;var _0x53b3c0=_0xf120[_0x27094a];return _0x53b3c0;};'use strict';var _=require('lodash');var util=require(_0x0f12('0x0'));var moment=require(_0x0f12('0x1'));var BPromise=require(_0x0f12('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0f12('0x3'));var db=require(_0x0f12('0x4'))['db'];var utils=require(_0x0f12('0x5'));var logger=require('../../config/logger')(_0x0f12('0x6'));var config=require(_0x0f12('0x7'));var jayson=require(_0x0f12('0x8'));var client=jayson[_0x0f12('0x9')][_0x0f12('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x341516,_0x1f32b7,_0x457122){return new BPromise(function(_0x5bb901,_0x3e240d){return client['request'](_0x341516,_0x457122)[_0x0f12('0xb')](function(_0x147f3b){logger[_0x0f12('0xc')]('Action,\x20%s,\x20%s',_0x1f32b7,'request\x20sent');logger[_0x0f12('0xd')](_0x0f12('0xe'),_0x1f32b7,_0x0f12('0xf'),JSON[_0x0f12('0x10')](_0x147f3b));if(_0x147f3b[_0x0f12('0x11')]){if(_0x147f3b[_0x0f12('0x11')][_0x0f12('0x12')]===0x1f4){logger['error'](_0x0f12('0x13'),_0x1f32b7,_0x147f3b[_0x0f12('0x11')][_0x0f12('0x14')]);return _0x3e240d(_0x147f3b[_0x0f12('0x11')][_0x0f12('0x14')]);}logger[_0x0f12('0x11')](_0x0f12('0x13'),_0x1f32b7,_0x147f3b[_0x0f12('0x11')][_0x0f12('0x14')]);return _0x5bb901(_0x147f3b[_0x0f12('0x11')][_0x0f12('0x14')]);}else{logger[_0x0f12('0xc')](_0x0f12('0x13'),_0x1f32b7,_0x0f12('0xf'));_0x5bb901(_0x147f3b[_0x0f12('0x15')]['message']);}})[_0x0f12('0x16')](function(_0x4d9613){logger[_0x0f12('0x11')](_0x0f12('0x13'),_0x1f32b7,_0x4d9613);_0x3e240d(_0x4d9613);});});}
\ No newline at end of file
+var _0x63b6=['debug','Action,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','util','moment','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','client','request','then','Action,\x20%s,\x20%s','request\x20sent'];(function(_0x29aea3,_0x3658a9){var _0x2d3414=function(_0x3459df){while(--_0x3459df){_0x29aea3['push'](_0x29aea3['shift']());}};_0x2d3414(++_0x3658a9);}(_0x63b6,0x127));var _0x663b=function(_0x4d65a6,_0x32bede){_0x4d65a6=_0x4d65a6-0x0;var _0xa80900=_0x63b6[_0x4d65a6];return _0xa80900;};'use strict';var _=require(_0x663b('0x0'));var util=require(_0x663b('0x1'));var moment=require(_0x663b('0x2'));var BPromise=require('bluebird');var rs=require(_0x663b('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x663b('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x663b('0x5'))(_0x663b('0x6'));var config=require(_0x663b('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x663b('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x210eb1,_0x53f5cf,_0x414dc2){return new BPromise(function(_0x2976ff,_0xf8f3ff){return client[_0x663b('0x9')](_0x210eb1,_0x414dc2)[_0x663b('0xa')](function(_0x1e1698){logger['info'](_0x663b('0xb'),_0x53f5cf,_0x663b('0xc'));logger[_0x663b('0xd')](_0x663b('0xe'),_0x53f5cf,_0x663b('0xc'),JSON[_0x663b('0xf')](_0x1e1698));if(_0x1e1698[_0x663b('0x10')]){if(_0x1e1698[_0x663b('0x10')][_0x663b('0x11')]===0x1f4){logger[_0x663b('0x10')]('Action,\x20%s,\x20%s',_0x53f5cf,_0x1e1698['error'][_0x663b('0x12')]);return _0xf8f3ff(_0x1e1698[_0x663b('0x10')][_0x663b('0x12')]);}logger[_0x663b('0x10')](_0x663b('0xb'),_0x53f5cf,_0x1e1698[_0x663b('0x10')]['message']);return _0x2976ff(_0x1e1698[_0x663b('0x10')][_0x663b('0x12')]);}else{logger[_0x663b('0x13')](_0x663b('0xb'),_0x53f5cf,_0x663b('0xc'));_0x2976ff(_0x1e1698[_0x663b('0x14')][_0x663b('0x12')]);}})[_0x663b('0x15')](function(_0x63443b){logger[_0x663b('0x10')](_0x663b('0xb'),_0x53f5cf,_0x63443b);_0xf8f3ff(_0x63443b);});});}
\ No newline at end of file
index fa0a200..4276c3c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2c54=['destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./action.controller','/:id','delete','isAuthenticated'];(function(_0x4cb3ea,_0x12f0a2){var _0x399d64=function(_0x289bc5){while(--_0x289bc5){_0x4cb3ea['push'](_0x4cb3ea['shift']());}};_0x399d64(++_0x12f0a2);}(_0x2c54,0x136));var _0x42c5=function(_0x456904,_0x4cb25c){_0x456904=_0x456904-0x0;var _0x4b0063=_0x2c54[_0x456904];return _0x4b0063;};'use strict';var multer=require(_0x42c5('0x0'));var util=require(_0x42c5('0x1'));var path=require(_0x42c5('0x2'));var timeout=require('connect-timeout');var express=require(_0x42c5('0x3'));var router=express[_0x42c5('0x4')]();var auth=require(_0x42c5('0x5'));var interaction=require(_0x42c5('0x6'));var config=require(_0x42c5('0x7'));var controller=require(_0x42c5('0x8'));router['put'](_0x42c5('0x9'),auth['isAuthenticated'](),controller['update']);router[_0x42c5('0xa')](_0x42c5('0x9'),auth[_0x42c5('0xb')](),controller[_0x42c5('0xc')]);module[_0x42c5('0xd')]=router;
\ No newline at end of file
+var _0xe511=['delete','destroy','exports','multer','util','connect-timeout','Router','../../components/auth/service','../../config/environment','./action.controller','put','/:id','update'];(function(_0xf9476f,_0x236df5){var _0x5554f7=function(_0x82eaad){while(--_0x82eaad){_0xf9476f['push'](_0xf9476f['shift']());}};_0x5554f7(++_0x236df5);}(_0xe511,0x16f));var _0x1e51=function(_0x1b2b6a,_0x1ca7c7){_0x1b2b6a=_0x1b2b6a-0x0;var _0x122ea7=_0xe511[_0x1b2b6a];return _0x122ea7;};'use strict';var multer=require(_0x1e51('0x0'));var util=require(_0x1e51('0x1'));var path=require('path');var timeout=require(_0x1e51('0x2'));var express=require('express');var router=express[_0x1e51('0x3')]();var auth=require(_0x1e51('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x1e51('0x5'));var controller=require(_0x1e51('0x6'));router[_0x1e51('0x7')](_0x1e51('0x8'),auth['isAuthenticated'](),controller[_0x1e51('0x9')]);router[_0x1e51('0xa')]('/:id',auth['isAuthenticated'](),controller[_0x1e51('0xb')]);module[_0x1e51('0xc')]=router;
\ No newline at end of file
index 5e5d469..579b5c1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe2e3=['STRING','exports'];(function(_0x4fe759,_0x45d287){var _0x109e7a=function(_0x4dc2a1){while(--_0x4dc2a1){_0x4fe759['push'](_0x4fe759['shift']());}};_0x109e7a(++_0x45d287);}(_0xe2e3,0xe1));var _0x3e2e=function(_0x2f3848,_0x48564d){_0x2f3848=_0x2f3848-0x0;var _0x102668=_0xe2e3[_0x2f3848];return _0x102668;};'use strict';var Sequelize=require('sequelize');module[_0x3e2e('0x0')]={'name':{'type':Sequelize[_0x3e2e('0x1')],'allowNull':![]},'description':{'type':Sequelize['STRING']},'parent':{'type':Sequelize[_0x3e2e('0x1')]},'table':{'type':Sequelize[_0x3e2e('0x1')]},'conditions':{'type':Sequelize['TEXT']},'joins':{'type':Sequelize['TEXT']}};
\ No newline at end of file
+var _0x8dad=['exports','STRING','TEXT'];(function(_0x587ba2,_0x42eb40){var _0x50ec73=function(_0x2f32e3){while(--_0x2f32e3){_0x587ba2['push'](_0x587ba2['shift']());}};_0x50ec73(++_0x42eb40);}(_0x8dad,0xa5));var _0xd8da=function(_0x26e8eb,_0x55f4ac){_0x26e8eb=_0x26e8eb-0x0;var _0x25873a=_0x8dad[_0x26e8eb];return _0x25873a;};'use strict';var Sequelize=require('sequelize');module[_0xd8da('0x0')]={'name':{'type':Sequelize[_0xd8da('0x1')],'allowNull':![]},'description':{'type':Sequelize[_0xd8da('0x1')]},'parent':{'type':Sequelize[_0xd8da('0x1')]},'table':{'type':Sequelize[_0xd8da('0x1')]},'conditions':{'type':Sequelize[_0xd8da('0x2')]},'joins':{'type':Sequelize[_0xd8da('0x2')]}};
\ No newline at end of file
index e630af9..9201fc1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfcfb=['../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','set','Content-Range','apply','reject','update','then','destroy','get','CustomReports','UserProfileResource','error','stack','name','index','AnalyticCustomReport','query','keys','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','rawAttributes','length','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','Reports','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','preview','left_join','right_join','cross_join','SUM(%s)','COUNT(%s)','COUNT(DISTINCT\x20%s)','MAX(%s)','AVG(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','DATE(%s)','HOUR(%s)','ROUND(%s)','UNIX_TIMESTAMP(%s)','IS\x20NOT\x20NULL','rules','operator','group','condition','getFields','Sequelize','ValidationErrorItem','Please\x20insert\x20at\x20least\x20one\x20field','AnalyticMetric','keyBy','from','table','MetricId','replace','function','format','groupBy','orderBy','alias','joins','includes','foreignKey','%s.%s\x20=\x20%s.%s','conditions','parse','clone','Limited\x20Query:','toString','sequelize','QueryTypes','join','GROUP_CONCAT(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','IS\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','value','select','metric','foreignTable','parentKey','debug','No\x20available\x20data','output','fullPath','randomstring','generate','csv','custom','AnalyticExtractedReport','cdr','.calldate\x20BETWEEN\x20?\x20AND\x20?','startDate','endDate','fork','../../components/export/','../../files/reports','countTable','COUNT(*)','SELECT','run','runReport','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service'];(function(_0x2d67fc,_0x27c69b){var _0x1f4ea8=function(_0x567382){while(--_0x567382){_0x2d67fc['push'](_0x2d67fc['shift']());}};_0x1f4ea8(++_0x27c69b);}(_0xfcfb,0x1d4));var _0xbfcf=function(_0x1188a8,_0xc1498d){_0x1188a8=_0x1188a8-0x0;var _0x50c1c1=_0xfcfb[_0x1188a8];return _0x50c1c1;};'use strict';var pdf=require(_0xbfcf('0x0'));var emlformat=require(_0xbfcf('0x1'));var rimraf=require(_0xbfcf('0x2'));var zipdir=require(_0xbfcf('0x3'));var jsonpatch=require(_0xbfcf('0x4'));var rp=require(_0xbfcf('0x5'));var moment=require('moment');var BPromise=require(_0xbfcf('0x6'));var Mustache=require('mustache');var util=require(_0xbfcf('0x7'));var path=require(_0xbfcf('0x8'));var sox=require(_0xbfcf('0x9'));var csv=require(_0xbfcf('0xa'));var ejs=require(_0xbfcf('0xb'));var fs=require('fs');var _=require(_0xbfcf('0xc'));var squel=require(_0xbfcf('0xd'));var crypto=require(_0xbfcf('0xe'));var jsforce=require(_0xbfcf('0xf'));var deskjs=require(_0xbfcf('0x10'));var toCsv=require(_0xbfcf('0xa'));var querystring=require(_0xbfcf('0x11'));var Papa=require(_0xbfcf('0x12'));var Redis=require(_0xbfcf('0x13'));var authService=require(_0xbfcf('0x14'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xbfcf('0x15'))(_0xbfcf('0x16'));var utils=require(_0xbfcf('0x17'));var config=require(_0xbfcf('0x18'));var db=require(_0xbfcf('0x19'))['db'];function respondWithStatusCode(_0x573a0d,_0x1dfe57){_0x1dfe57=_0x1dfe57||0xcc;return function(_0x455aaf){if(_0x455aaf){return _0x573a0d[_0xbfcf('0x1a')](_0x1dfe57);}return _0x573a0d[_0xbfcf('0x1b')](_0x1dfe57)[_0xbfcf('0x1c')]();};}function respondWithResult(_0x4f6afb,_0x4776d7){_0x4776d7=_0x4776d7||0xc8;return function(_0x41efd7){if(_0x41efd7){return _0x4f6afb[_0xbfcf('0x1b')](_0x4776d7)['json'](_0x41efd7);}};}function respondWithFilteredResult(_0x24f09e,_0xb61f2e){return function(_0x37627d){if(_0x37627d){var _0x17873a=_0x37627d[_0xbfcf('0x1d')],_0x44cb8d=_0xb61f2e[_0xbfcf('0x1e')],_0x56de68=_0xb61f2e[_0xbfcf('0x1e')]+_0xb61f2e['limit'],_0x1670b9;if(_0x56de68>=_0x17873a){_0x56de68=_0x17873a;_0x1670b9=0xc8;}else{_0x1670b9=0xce;}_0x24f09e[_0xbfcf('0x1b')](_0x1670b9);return _0x24f09e[_0xbfcf('0x1f')](_0xbfcf('0x20'),_0x44cb8d+'-'+_0x56de68+'/'+_0x17873a)['json'](_0x37627d);}return null;};}function patchUpdates(_0x1765b9){return function(_0x7bc583){try{jsonpatch[_0xbfcf('0x21')](_0x7bc583,_0x1765b9,!![]);}catch(_0x5b5b95){return BPromise[_0xbfcf('0x22')](_0x5b5b95);}return _0x7bc583['save']();};}function saveUpdates(_0x681c24,_0x5a65bf){return function(_0xc2c8fd){if(_0xc2c8fd){return _0xc2c8fd[_0xbfcf('0x23')](_0x681c24)[_0xbfcf('0x24')](function(_0x539797){return _0x539797;});}return null;};}function removeEntity(_0x436ee9,_0x12af5c){return function(_0x18757c){if(_0x18757c){return _0x18757c[_0xbfcf('0x25')]()[_0xbfcf('0x24')](function(){var _0x606653=_0x18757c[_0xbfcf('0x26')]({'plain':!![]});var _0x1cc1e8=_0xbfcf('0x27');return db[_0xbfcf('0x28')]['destroy']({'where':{'type':_0x1cc1e8,'resourceId':_0x606653['id']}})[_0xbfcf('0x24')](function(){return _0x18757c;});})[_0xbfcf('0x24')](function(){_0x436ee9[_0xbfcf('0x1b')](0xcc)[_0xbfcf('0x1c')]();});}};}function handleEntityNotFound(_0x7a4a3b,_0x25e03b){return function(_0x36d830){if(!_0x36d830){_0x7a4a3b['sendStatus'](0x194);}return _0x36d830;};}function handleError(_0x50f89c,_0x56190b){_0x56190b=_0x56190b||0x1f4;return function(_0x4436d7){logger[_0xbfcf('0x29')](_0x4436d7[_0xbfcf('0x2a')]);if(_0x4436d7[_0xbfcf('0x2b')]){delete _0x4436d7[_0xbfcf('0x2b')];}_0x50f89c[_0xbfcf('0x1b')](_0x56190b)['send'](_0x4436d7);};}exports[_0xbfcf('0x2c')]=function(_0x2e1fb7,_0x5d49b7){var _0x2f78db={},_0x501e98={},_0x27f4c5={'count':0x0,'rows':[]};var _0x4b761e=db[_0xbfcf('0x2d')]['rawAttributes'];_0x501e98['model']=_['keys'](_0x4b761e);_0x501e98[_0xbfcf('0x2e')]=_[_0xbfcf('0x2f')](_0x2e1fb7[_0xbfcf('0x2e')]);_0x501e98[_0xbfcf('0x30')]=_[_0xbfcf('0x31')](_0x501e98[_0xbfcf('0x32')],_0x501e98[_0xbfcf('0x2e')]);_0x2f78db[_0xbfcf('0x33')]=_[_0xbfcf('0x31')](_0x501e98[_0xbfcf('0x32')],qs[_0xbfcf('0x34')](_0x2e1fb7[_0xbfcf('0x2e')][_0xbfcf('0x34')]));_0x2f78db[_0xbfcf('0x33')]=_0x2f78db[_0xbfcf('0x33')]['length']?_0x2f78db[_0xbfcf('0x33')]:_0x501e98[_0xbfcf('0x32')];if(!_0x2e1fb7[_0xbfcf('0x2e')][_0xbfcf('0x35')](_0xbfcf('0x36'))){_0x2f78db[_0xbfcf('0x37')]=qs['limit'](_0x2e1fb7[_0xbfcf('0x2e')][_0xbfcf('0x37')]);_0x2f78db['offset']=qs[_0xbfcf('0x1e')](_0x2e1fb7[_0xbfcf('0x2e')][_0xbfcf('0x1e')]);}_0x2f78db[_0xbfcf('0x38')]=qs[_0xbfcf('0x39')](_0x2e1fb7[_0xbfcf('0x2e')][_0xbfcf('0x39')]);_0x2f78db['where']=qs['filters'](_[_0xbfcf('0x3a')](_0x2e1fb7[_0xbfcf('0x2e')],_0x501e98[_0xbfcf('0x30')]));if(_0x2e1fb7[_0xbfcf('0x2e')][_0xbfcf('0x3b')]){_0x2f78db[_0xbfcf('0x3c')]=_[_0xbfcf('0x3d')](_0x2f78db[_0xbfcf('0x3c')],{'$or':_[_0xbfcf('0x3e')](_0x4b761e,function(_0x5a9e21){if(_0x5a9e21[_0xbfcf('0x3f')][_0xbfcf('0x40')]!==_0xbfcf('0x41')){var _0x21e7e4={};_0x21e7e4[_0x5a9e21[_0xbfcf('0x42')]]={'$like':'%'+_0x2e1fb7[_0xbfcf('0x2e')][_0xbfcf('0x3b')]+'%'};return _0x21e7e4;}})});}_0x2f78db=_[_0xbfcf('0x3d')]({},_0x2f78db,_0x2e1fb7[_0xbfcf('0x43')]);var _0x59b6bd={'where':_0x2f78db[_0xbfcf('0x3c')]};return db[_0xbfcf('0x2d')][_0xbfcf('0x1d')](_0x59b6bd)[_0xbfcf('0x24')](function(_0x20acf3){_0x27f4c5['count']=_0x20acf3;if(_0x2e1fb7[_0xbfcf('0x2e')][_0xbfcf('0x44')]){_0x2f78db[_0xbfcf('0x45')]=[{'all':!![]}];}return db[_0xbfcf('0x2d')][_0xbfcf('0x46')](_0x2f78db);})[_0xbfcf('0x24')](function(_0x3eea78){_0x27f4c5[_0xbfcf('0x47')]=_0x3eea78;return _0x27f4c5;})[_0xbfcf('0x24')](respondWithFilteredResult(_0x5d49b7,_0x2f78db))[_0xbfcf('0x48')](handleError(_0x5d49b7,null));};exports[_0xbfcf('0x49')]=function(_0x3bdd66,_0x41eb6d){var _0x144011={'raw':![],'where':{'id':_0x3bdd66[_0xbfcf('0x4a')]['id']}},_0x23d595={};_0x23d595[_0xbfcf('0x32')]=_[_0xbfcf('0x2f')](db[_0xbfcf('0x2d')][_0xbfcf('0x4b')]);_0x23d595[_0xbfcf('0x2e')]=_[_0xbfcf('0x2f')](_0x3bdd66[_0xbfcf('0x2e')]);_0x23d595[_0xbfcf('0x30')]=_[_0xbfcf('0x31')](_0x23d595[_0xbfcf('0x32')],_0x23d595[_0xbfcf('0x2e')]);_0x144011[_0xbfcf('0x33')]=_[_0xbfcf('0x31')](_0x23d595[_0xbfcf('0x32')],qs[_0xbfcf('0x34')](_0x3bdd66['query']['fields']));_0x144011[_0xbfcf('0x33')]=_0x144011[_0xbfcf('0x33')][_0xbfcf('0x4c')]?_0x144011['attributes']:_0x23d595[_0xbfcf('0x32')];if(_0x3bdd66[_0xbfcf('0x2e')][_0xbfcf('0x44')]){_0x144011['include']=[{'all':!![]}];}_0x144011=_[_0xbfcf('0x3d')]({},_0x144011,_0x3bdd66['options']);return db[_0xbfcf('0x2d')][_0xbfcf('0x4d')](_0x144011)['then'](handleEntityNotFound(_0x41eb6d,null))[_0xbfcf('0x24')](respondWithResult(_0x41eb6d,null))[_0xbfcf('0x48')](handleError(_0x41eb6d,null));};exports[_0xbfcf('0x4e')]=function(_0x41aad5,_0x9be491){return db[_0xbfcf('0x2d')][_0xbfcf('0x4e')](_0x41aad5[_0xbfcf('0x4f')],{})[_0xbfcf('0x24')](function(_0x395212){var _0x35b9a4=_0x41aad5[_0xbfcf('0x50')]['get']({'plain':!![]});if(!_0x35b9a4)throw new Error(_0xbfcf('0x51'));if(_0x35b9a4['role']==='user'){var _0x6479dc=_0x395212[_0xbfcf('0x26')]({'plain':!![]});var _0x549032=_0xbfcf('0x52');return db[_0xbfcf('0x53')]['find']({'where':{'name':_0x549032,'userProfileId':_0x35b9a4['userProfileId']},'raw':!![]})['then'](function(_0x484bf4){if(_0x484bf4&&_0x484bf4[_0xbfcf('0x54')]===0x0){return db[_0xbfcf('0x28')]['create']({'name':_0x6479dc[_0xbfcf('0x2b')],'resourceId':_0x6479dc['id'],'type':_0xbfcf('0x27'),'sectionId':_0x484bf4['id']},{})[_0xbfcf('0x24')](function(){return _0x395212;});}else{return _0x395212;}})['catch'](function(_0xabbae2){logger[_0xbfcf('0x29')](_0xbfcf('0x55'),_0xabbae2);throw _0xabbae2;});}return _0x395212;})[_0xbfcf('0x24')](respondWithResult(_0x9be491,0xc9))['catch'](handleError(_0x9be491,null));};exports[_0xbfcf('0x23')]=function(_0x303b2e,_0x72c11){if(_0x303b2e[_0xbfcf('0x4f')]['id']){delete _0x303b2e[_0xbfcf('0x4f')]['id'];}return db[_0xbfcf('0x2d')][_0xbfcf('0x4d')]({'where':{'id':_0x303b2e['params']['id']}})[_0xbfcf('0x24')](handleEntityNotFound(_0x72c11,null))[_0xbfcf('0x24')](saveUpdates(_0x303b2e[_0xbfcf('0x4f')],null))[_0xbfcf('0x24')](respondWithResult(_0x72c11,null))[_0xbfcf('0x48')](handleError(_0x72c11,null));};exports[_0xbfcf('0x25')]=function(_0x447458,_0x394c2a){return db[_0xbfcf('0x2d')]['find']({'where':{'id':_0x447458['params']['id']}})['then'](handleEntityNotFound(_0x394c2a,null))[_0xbfcf('0x24')](removeEntity(_0x394c2a,null))[_0xbfcf('0x48')](handleError(_0x394c2a,null));};exports[_0xbfcf('0x56')]=function(_0x398a55,_0x121b0e){var _0x2ac38d=0xa;var _0x175f61=['join',_0xbfcf('0x57'),_0xbfcf('0x58'),_0xbfcf('0x59')];var _0x5fb66a={'SUM':_0xbfcf('0x5a'),'COUNT':_0xbfcf('0x5b'),'COUNT DISTINCT':_0xbfcf('0x5c'),'MAX':_0xbfcf('0x5d'),'MIN':'MIN(%s)','AVG':_0xbfcf('0x5e'),'GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':_0xbfcf('0x5f'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x5405d4={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0xbfcf('0x60'),'HOUR':_0xbfcf('0x61'),'ROUND':_0xbfcf('0x62'),'UNIX_TIMESTAMP':_0xbfcf('0x63')};var _0x3aee60=function(_0x11b879){return!_['includes'](['IS\x20NULL',_0xbfcf('0x64'),'IS\x20EMPTY','IS\x20NOT\x20EMPTY'],_0x11b879);};var _0x1f129b=function(_0x17d040){if(!_0x17d040||!_0x17d040[_0xbfcf('0x65')]['length']){return'';}for(var _0x5da7a1='(',_0x39efb4=0x0;_0x39efb4<_0x17d040[_0xbfcf('0x65')][_0xbfcf('0x4c')];_0x39efb4+=0x1){_0x39efb4>0x0&&(_0x5da7a1+='\x20'+_0x17d040[_0xbfcf('0x66')]+'\x20');_0x5da7a1+=_0x17d040[_0xbfcf('0x65')][_0x39efb4][_0xbfcf('0x67')]?_0x1f129b(_0x17d040[_0xbfcf('0x65')][_0x39efb4]['group']):_0x17d040[_0xbfcf('0x65')][_0x39efb4][_0xbfcf('0x42')]+'\x20'+_0x17d040[_0xbfcf('0x65')][_0x39efb4]['condition']+(_0x3aee60(_0x17d040[_0xbfcf('0x65')][_0x39efb4][_0xbfcf('0x68')])?'\x20'+_0x17d040[_0xbfcf('0x65')][_0x39efb4]['value']:'');}return _0x5da7a1+')';};var _0x52867f={'where':{'id':_0x398a55[_0xbfcf('0x4a')]['id']}},_0x1f5259,_0x40e663,_0x3342e0,_0x4cf61c,_0x22f120;_0x52867f=_[_0xbfcf('0x3d')]({},_0x52867f,_0x398a55[_0xbfcf('0x43')]);return db[_0xbfcf('0x2d')]['find'](_0x52867f)[_0xbfcf('0x24')](function(_0x221b2b){if(_0x221b2b){_0x1f5259=_0x221b2b;return _0x221b2b[_0xbfcf('0x69')]();}return null;})['then'](function(_0x8f4d3c){if(_0x8f4d3c){if(!_0x8f4d3c[_0xbfcf('0x4c')]){throw new db[(_0xbfcf('0x6a'))][(_0xbfcf('0x6b'))](_0xbfcf('0x6c'),0x193);}_0x40e663=_0x8f4d3c;return db[_0xbfcf('0x6d')][_0xbfcf('0x46')]({'raw':!![]});}return null;})['then'](function(_0x4b751e){if(_0x4b751e){_0x3342e0=_[_0xbfcf('0x6e')](_0x4b751e,'id');var _0x294b85;var _0x283e1e=squel['select']();_0x283e1e[_0xbfcf('0x6f')](_0x1f5259[_0xbfcf('0x70')]);for(var _0x2a6e21=0x0;_0x2a6e21<_0x40e663[_0xbfcf('0x4c')];_0x2a6e21+=0x1){_0x294b85=_0x40e663[_0x2a6e21][_0xbfcf('0x71')]?_0x3342e0[_0x40e663[_0x2a6e21]['MetricId']]['metric']:_0x40e663[_0x2a6e21][_0xbfcf('0x42')];_0x294b85=_0x40e663[_0x2a6e21]['function']?_[_0xbfcf('0x72')](_0x5fb66a[_0x40e663[_0x2a6e21][_0xbfcf('0x73')]],'%s',_0x294b85):_0x294b85;_0x294b85=_0x40e663[_0x2a6e21][_0xbfcf('0x74')]?_[_0xbfcf('0x72')](_0x5405d4[_0x40e663[_0x2a6e21][_0xbfcf('0x74')]],'%s',_0x294b85):_0x294b85;if(_0x40e663[_0x2a6e21][_0xbfcf('0x75')]){_0x283e1e[_0xbfcf('0x67')](_0x294b85);}_0x40e663[_0x2a6e21][_0xbfcf('0x76')]&&_0x283e1e[_0xbfcf('0x38')](_0x294b85,_0x40e663[_0x2a6e21]['orderBy']==='DESC'?![]:!![]);_0x283e1e[_0xbfcf('0x42')](_0x294b85,_0x40e663[_0x2a6e21][_0xbfcf('0x77')]||_0x294b85);}if(_0x1f5259[_0xbfcf('0x78')]){_0x1f5259[_0xbfcf('0x78')]=JSON['parse'](_0x1f5259['joins']);for(var _0x33b62d=0x0;_0x33b62d<_0x1f5259[_0xbfcf('0x78')]['length'];_0x33b62d+=0x1){if(_0x1f5259[_0xbfcf('0x78')][_0x33b62d][_0xbfcf('0x3f')]&&_[_0xbfcf('0x79')](_0x175f61,_0x1f5259[_0xbfcf('0x78')][_0x33b62d][_0xbfcf('0x3f')])&&_0x1f5259['joins'][_0x33b62d]['parentKey']&&_0x1f5259[_0xbfcf('0x78')][_0x33b62d]['foreignTable']&&_0x1f5259[_0xbfcf('0x78')][_0x33b62d][_0xbfcf('0x7a')]){_0x283e1e[_0x1f5259['joins'][_0x33b62d][_0xbfcf('0x3f')]](_0x1f5259[_0xbfcf('0x78')][_0x33b62d]['foreignTable'],null,util[_0xbfcf('0x74')](_0xbfcf('0x7b'),_0x1f5259[_0xbfcf('0x70')],_0x1f5259[_0xbfcf('0x78')][_0x33b62d]['parentKey'],_0x1f5259[_0xbfcf('0x78')][_0x33b62d]['foreignTable'],_0x1f5259['joins'][_0x33b62d][_0xbfcf('0x7a')]));}}}if(_0x1f5259[_0xbfcf('0x7c')]){_0x1f5259[_0xbfcf('0x7c')]=JSON[_0xbfcf('0x7d')](_0x1f5259[_0xbfcf('0x7c')]);_0x283e1e[_0xbfcf('0x3c')](_0x1f129b(_0x1f5259[_0xbfcf('0x7c')][_0xbfcf('0x67')]));}_0x22f120=_0x283e1e[_0xbfcf('0x7e')]();_0x283e1e[_0xbfcf('0x37')](_0x2ac38d);_0x283e1e[_0xbfcf('0x1e')](0x0);logger['debug'](_0xbfcf('0x7f'),_0x283e1e[_0xbfcf('0x80')]());return db[_0xbfcf('0x81')][_0xbfcf('0x2e')](_0x283e1e['toString'](),{'type':db[_0xbfcf('0x81')][_0xbfcf('0x82')]['SELECT']});}})[_0xbfcf('0x24')](respondWithResult(_0x121b0e,null))['catch'](handleError(_0x121b0e,null));};function runReport(_0x41adfa,_0xe0a7a7,_0x273843){var _0x1306e5=_0xe0a7a7[_0xbfcf('0x2b')];var _0x1f27e5=0xa;var _0xa9a0a0=[_0xbfcf('0x83'),_0xbfcf('0x57'),_0xbfcf('0x58'),_0xbfcf('0x59')];var _0x2a4967={'SUM':_0xbfcf('0x5a'),'COUNT':'COUNT(%s)','COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0xbfcf('0x5d'),'MIN':'MIN(%s)','AVG':_0xbfcf('0x5e'),'GROUP_CONCAT':_0xbfcf('0x84'),'GROUP_CONCAT ASC':_0xbfcf('0x5f'),'GROUP_CONCAT DESC':_0xbfcf('0x85')};var _0x25f039={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0xbfcf('0x60'),'HOUR':'HOUR(%s)','ROUND':_0xbfcf('0x62'),'UNIX_TIMESTAMP':_0xbfcf('0x63')};var _0x3ecca2=function(_0x3a1313){return!_[_0xbfcf('0x79')]([_0xbfcf('0x86'),_0xbfcf('0x64'),_0xbfcf('0x87'),_0xbfcf('0x88')],_0x3a1313);};var _0x4a600b=function(_0x281070){if(!_0x281070||!_0x281070[_0xbfcf('0x65')][_0xbfcf('0x4c')]){return'';}for(var _0x3d214e='(',_0x1305bf=0x0;_0x1305bf<_0x281070['rules'][_0xbfcf('0x4c')];_0x1305bf+=0x1){_0x1305bf>0x0&&(_0x3d214e+='\x20'+_0x281070[_0xbfcf('0x66')]+'\x20');_0x3d214e+=_0x281070[_0xbfcf('0x65')][_0x1305bf][_0xbfcf('0x67')]?_0x4a600b(_0x281070[_0xbfcf('0x65')][_0x1305bf][_0xbfcf('0x67')]):_0x281070[_0xbfcf('0x65')][_0x1305bf][_0xbfcf('0x42')]+'\x20'+_0x281070[_0xbfcf('0x65')][_0x1305bf][_0xbfcf('0x68')]+(_0x3ecca2(_0x281070[_0xbfcf('0x65')][_0x1305bf][_0xbfcf('0x68')])?'\x20'+_0x281070['rules'][_0x1305bf][_0xbfcf('0x89')]:'');}return _0x3d214e+')';};var _0x2a85af={'where':{'id':_0x41adfa['id']}},_0x2dea1c,_0x5010b1,_0x3e9188,_0x2e4325,_0x515126;_0x2a85af=_[_0xbfcf('0x3d')]({},_0x2a85af,_0x273843);return db[_0xbfcf('0x2d')][_0xbfcf('0x4d')](_0x2a85af)[_0xbfcf('0x24')](function(_0x4270c5){if(_0x4270c5){_0x2dea1c=_0x4270c5;return _0x4270c5[_0xbfcf('0x69')]();}return null;})[_0xbfcf('0x24')](function(_0x1dee0b){if(_0x1dee0b){if(!_0x1dee0b[_0xbfcf('0x4c')]){throw new db['Sequelize'][(_0xbfcf('0x6b'))](_0xbfcf('0x6c'),0x193);}_0x5010b1=_0x1dee0b;return db[_0xbfcf('0x6d')][_0xbfcf('0x46')]({'raw':!![]});}return null;})[_0xbfcf('0x24')](function(_0x54e885){if(_0x54e885){_0x3e9188=_[_0xbfcf('0x6e')](_0x54e885,'id');var _0xc060ac;var _0x56f746=squel[_0xbfcf('0x8a')]();_0x56f746[_0xbfcf('0x6f')](_0x2dea1c[_0xbfcf('0x70')]);for(var _0x588f91=0x0;_0x588f91<_0x5010b1['length'];_0x588f91+=0x1){_0xc060ac=_0x5010b1[_0x588f91][_0xbfcf('0x71')]?_0x3e9188[_0x5010b1[_0x588f91][_0xbfcf('0x71')]][_0xbfcf('0x8b')]:_0x5010b1[_0x588f91][_0xbfcf('0x42')];_0xc060ac=_0x5010b1[_0x588f91][_0xbfcf('0x73')]?_[_0xbfcf('0x72')](_0x2a4967[_0x5010b1[_0x588f91]['function']],'%s',_0xc060ac):_0xc060ac;_0xc060ac=_0x5010b1[_0x588f91][_0xbfcf('0x74')]?_[_0xbfcf('0x72')](_0x25f039[_0x5010b1[_0x588f91]['format']],'%s',_0xc060ac):_0xc060ac;if(_0x5010b1[_0x588f91][_0xbfcf('0x75')]){_0x56f746[_0xbfcf('0x67')](_0xc060ac);}_0x5010b1[_0x588f91][_0xbfcf('0x76')]&&_0x56f746[_0xbfcf('0x38')](_0xc060ac,_0x5010b1[_0x588f91][_0xbfcf('0x76')]==='DESC'?![]:!![]);_0x56f746[_0xbfcf('0x42')](_0xc060ac,_0x5010b1[_0x588f91][_0xbfcf('0x77')]||_0xc060ac);}if(_0x2dea1c[_0xbfcf('0x78')]){_0x2dea1c['joins']=JSON[_0xbfcf('0x7d')](_0x2dea1c['joins']);for(var _0x37e106=0x0;_0x37e106<_0x2dea1c['joins'][_0xbfcf('0x4c')];_0x37e106+=0x1){if(_0x2dea1c[_0xbfcf('0x78')][_0x37e106]['type']&&_['includes'](_0xa9a0a0,_0x2dea1c['joins'][_0x37e106][_0xbfcf('0x3f')])&&_0x2dea1c[_0xbfcf('0x78')][_0x37e106]['parentKey']&&_0x2dea1c['joins'][_0x37e106][_0xbfcf('0x8c')]&&_0x2dea1c[_0xbfcf('0x78')][_0x37e106][_0xbfcf('0x7a')]){_0x56f746[_0x2dea1c[_0xbfcf('0x78')][_0x37e106][_0xbfcf('0x3f')]](_0x2dea1c[_0xbfcf('0x78')][_0x37e106][_0xbfcf('0x8c')],null,util[_0xbfcf('0x74')](_0xbfcf('0x7b'),_0x2dea1c['table'],_0x2dea1c[_0xbfcf('0x78')][_0x37e106][_0xbfcf('0x8d')],_0x2dea1c['joins'][_0x37e106][_0xbfcf('0x8c')],_0x2dea1c[_0xbfcf('0x78')][_0x37e106]['foreignKey']));}}}if(_0x2dea1c[_0xbfcf('0x7c')]){_0x2dea1c[_0xbfcf('0x7c')]=JSON['parse'](_0x2dea1c['conditions']);_0x56f746[_0xbfcf('0x3c')](_0x4a600b(_0x2dea1c[_0xbfcf('0x7c')]['group']));}_0x515126=_0x56f746['clone']();_0x56f746[_0xbfcf('0x37')](_0x1f27e5);_0x56f746[_0xbfcf('0x1e')](0x0);logger[_0xbfcf('0x8e')](_0xbfcf('0x7f'),_0x56f746['toString']());return db[_0xbfcf('0x81')][_0xbfcf('0x2e')](_0x56f746[_0xbfcf('0x80')](),{'type':db['sequelize']['QueryTypes']['SELECT']});}})[_0xbfcf('0x24')](function(_0x731db4){if(!_0x731db4[_0xbfcf('0x4c')]){throw new db[(_0xbfcf('0x6a'))]['ValidationErrorItem'](_0xbfcf('0x8f'),0xcc);}if(_0xe0a7a7[_0xbfcf('0x90')]==='web'){return null;}var _0x36c4aa=_[_0xbfcf('0x3d')](_0xe0a7a7,{'name':_0xe0a7a7[_0xbfcf('0x91')]||_0xe0a7a7[_0xbfcf('0x2b')]||_0x2dea1c['name'],'basename':_0x1306e5,'savename':util[_0xbfcf('0x74')]('%s-%s.%s',_0xe0a7a7[_0xbfcf('0x2b')]||_0x2dea1c[_0xbfcf('0x2b')],require(_0xbfcf('0x92'))[_0xbfcf('0x93')](0x4),_0xe0a7a7[_0xbfcf('0x90')]||_0xbfcf('0x94')),'reportId':_0x2dea1c['id'],'reportType':_0xbfcf('0x95')});return db[_0xbfcf('0x96')][_0xbfcf('0x4e')](_0x36c4aa,{'raw':!![]});})['then'](function(_0x240593){if(_0x2dea1c[_0xbfcf('0x70')]===_0xbfcf('0x97')){_0x515126[_0xbfcf('0x3c')](_0x2dea1c[_0xbfcf('0x70')]+_0xbfcf('0x98'),_0xe0a7a7[_0xbfcf('0x99')],_0xe0a7a7[_0xbfcf('0x9a')]);}else{_0x515126['where'](_0x2dea1c[_0xbfcf('0x70')]+'.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0xe0a7a7['startDate'],_0xe0a7a7[_0xbfcf('0x9a')]);}if(_0x240593){logger['info']('Run\x20Query:',_0x515126[_0xbfcf('0x80')]());require('child_process')[_0xbfcf('0x9b')](path['join'](__dirname,_0xbfcf('0x9c'),_0x240593[_0xbfcf('0x90')]),[_0x240593['id'],_0x515126[_0xbfcf('0x80')](),path[_0xbfcf('0x83')](__dirname,_0xbfcf('0x9d'),_0x240593['savename']),_0x1306e5]);return _0x240593;}else{var _0x3c9d9e=squel[_0xbfcf('0x8a')]();_0x3c9d9e[_0xbfcf('0x6f')]('('+_0x515126[_0xbfcf('0x80')]()+')',_0xbfcf('0x9e'));_0x3c9d9e[_0xbfcf('0x42')](_0xbfcf('0x9f'),_0xbfcf('0x1d'));_0x515126['limit'](_0xe0a7a7['limit']||_0x1f27e5);_0x515126['offset'](_0xe0a7a7[_0xbfcf('0x1e')]||0x0);return db[_0xbfcf('0x81')][_0xbfcf('0x2e')](_0x3c9d9e[_0xbfcf('0x80')](),{'type':db['sequelize'][_0xbfcf('0x82')][_0xbfcf('0xa0')]})[_0xbfcf('0x24')](function(_0x17d34){if(!_0x17d34['length']){_0x2e4325=0x0;}else{_0x2e4325=_0x17d34[0x0][_0xbfcf('0x1d')]||0x0;}return db[_0xbfcf('0x81')][_0xbfcf('0x2e')](_0x515126[_0xbfcf('0x80')](),{'type':db[_0xbfcf('0x81')][_0xbfcf('0x82')]['SELECT']});})['then'](function(_0x30cab0){return{'rows':_0x30cab0||[],'count':_0x2e4325};});}});}exports[_0xbfcf('0xa1')]=function(_0x127a98,_0x31065c){return runReport(_0x127a98['params'],_0x127a98[_0xbfcf('0x2e')],_0x127a98[_0xbfcf('0x43')])[_0xbfcf('0x24')](respondWithResult(_0x31065c,null))[_0xbfcf('0x48')](handleError(_0x31065c,null));};exports[_0xbfcf('0xa2')]=runReport;exports['query']=function(_0xcfa7b0,_0x45af3d){var _0x4efc16=0xa;var _0x267959=[_0xbfcf('0x83'),'left_join','right_join',_0xbfcf('0x59')];var _0xa21194={'SUM':_0xbfcf('0x5a'),'COUNT':_0xbfcf('0x5b'),'COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0xbfcf('0x5d'),'MIN':'MIN(%s)','AVG':_0xbfcf('0x5e'),'GROUP_CONCAT':_0xbfcf('0x84'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0xbfcf('0x85')};var _0xfb82dd={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0xbfcf('0x60'),'HOUR':_0xbfcf('0x61'),'ROUND':_0xbfcf('0x62'),'UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x5d3738=function(_0x150d85){return!_[_0xbfcf('0x79')]([_0xbfcf('0x86'),'IS\x20NOT\x20NULL',_0xbfcf('0x87'),'IS\x20NOT\x20EMPTY'],_0x150d85);};var _0x1d2036=function(_0x33f160){if(!_0x33f160||!_0x33f160['rules']['length']){return'';}for(var _0x4d6a80='(',_0x4d181b=0x0;_0x4d181b<_0x33f160[_0xbfcf('0x65')][_0xbfcf('0x4c')];_0x4d181b+=0x1){_0x4d181b>0x0&&(_0x4d6a80+='\x20'+_0x33f160[_0xbfcf('0x66')]+'\x20');_0x4d6a80+=_0x33f160[_0xbfcf('0x65')][_0x4d181b][_0xbfcf('0x67')]?_0x1d2036(_0x33f160[_0xbfcf('0x65')][_0x4d181b][_0xbfcf('0x67')]):_0x33f160['rules'][_0x4d181b][_0xbfcf('0x42')]+'\x20'+_0x33f160[_0xbfcf('0x65')][_0x4d181b][_0xbfcf('0x68')]+(_0x5d3738(_0x33f160[_0xbfcf('0x65')][_0x4d181b][_0xbfcf('0x68')])?'\x20'+_0x33f160[_0xbfcf('0x65')][_0x4d181b][_0xbfcf('0x89')]:'');}return _0x4d6a80+')';};var _0x148095={'where':{'id':_0xcfa7b0[_0xbfcf('0x4a')]['id']}},_0xe2fd82,_0x3403b3,_0x5006e0,_0x506e78,_0x1fa994;_0x148095=_[_0xbfcf('0x3d')]({},_0x148095,_0xcfa7b0[_0xbfcf('0x43')]);return db[_0xbfcf('0x2d')][_0xbfcf('0x4d')](_0x148095)[_0xbfcf('0x24')](function(_0x52c1b6){if(_0x52c1b6){_0xe2fd82=_0x52c1b6;return _0x52c1b6[_0xbfcf('0x69')]();}return null;})['then'](function(_0x351a94){if(_0x351a94){if(!_0x351a94['length']){throw new db[(_0xbfcf('0x6a'))][(_0xbfcf('0x6b'))](_0xbfcf('0x6c'),0x193);}_0x3403b3=_0x351a94;return db[_0xbfcf('0x6d')]['findAll']({'raw':!![]});}return null;})[_0xbfcf('0x24')](function(_0x5d75e4){if(_0x5d75e4){_0x5006e0=_['keyBy'](_0x5d75e4,'id');var _0x575ee4;var _0x4572f5=squel['select']();_0x4572f5['from'](_0xe2fd82['table']);for(var _0x4170b9=0x0;_0x4170b9<_0x3403b3[_0xbfcf('0x4c')];_0x4170b9+=0x1){_0x575ee4=_0x3403b3[_0x4170b9][_0xbfcf('0x71')]?_0x5006e0[_0x3403b3[_0x4170b9][_0xbfcf('0x71')]][_0xbfcf('0x8b')]:_0x3403b3[_0x4170b9][_0xbfcf('0x42')];_0x575ee4=_0x3403b3[_0x4170b9]['function']?_[_0xbfcf('0x72')](_0xa21194[_0x3403b3[_0x4170b9]['function']],'%s',_0x575ee4):_0x575ee4;_0x575ee4=_0x3403b3[_0x4170b9][_0xbfcf('0x74')]?_[_0xbfcf('0x72')](_0xfb82dd[_0x3403b3[_0x4170b9]['format']],'%s',_0x575ee4):_0x575ee4;if(_0x3403b3[_0x4170b9][_0xbfcf('0x75')]){_0x4572f5[_0xbfcf('0x67')](_0x575ee4);}_0x3403b3[_0x4170b9][_0xbfcf('0x76')]&&_0x4572f5['order'](_0x575ee4,_0x3403b3[_0x4170b9][_0xbfcf('0x76')]==='DESC'?![]:!![]);_0x4572f5[_0xbfcf('0x42')](_0x575ee4,_0x3403b3[_0x4170b9][_0xbfcf('0x77')]||_0x575ee4);}if(_0xe2fd82[_0xbfcf('0x78')]){_0xe2fd82[_0xbfcf('0x78')]=JSON['parse'](_0xe2fd82[_0xbfcf('0x78')]);for(var _0x534033=0x0;_0x534033<_0xe2fd82[_0xbfcf('0x78')][_0xbfcf('0x4c')];_0x534033+=0x1){if(_0xe2fd82[_0xbfcf('0x78')][_0x534033][_0xbfcf('0x3f')]&&_[_0xbfcf('0x79')](_0x267959,_0xe2fd82['joins'][_0x534033][_0xbfcf('0x3f')])&&_0xe2fd82[_0xbfcf('0x78')][_0x534033][_0xbfcf('0x8d')]&&_0xe2fd82['joins'][_0x534033][_0xbfcf('0x8c')]&&_0xe2fd82[_0xbfcf('0x78')][_0x534033][_0xbfcf('0x7a')]){_0x4572f5[_0xe2fd82[_0xbfcf('0x78')][_0x534033]['type']](_0xe2fd82[_0xbfcf('0x78')][_0x534033][_0xbfcf('0x8c')],null,util['format']('%s.%s\x20=\x20%s.%s',_0xe2fd82[_0xbfcf('0x70')],_0xe2fd82[_0xbfcf('0x78')][_0x534033]['parentKey'],_0xe2fd82[_0xbfcf('0x78')][_0x534033][_0xbfcf('0x8c')],_0xe2fd82[_0xbfcf('0x78')][_0x534033][_0xbfcf('0x7a')]));}}}if(_0xe2fd82[_0xbfcf('0x7c')]){_0xe2fd82[_0xbfcf('0x7c')]=JSON['parse'](_0xe2fd82[_0xbfcf('0x7c')]);_0x4572f5[_0xbfcf('0x3c')](_0x1d2036(_0xe2fd82[_0xbfcf('0x7c')][_0xbfcf('0x67')]));}_0x1fa994=_0x4572f5[_0xbfcf('0x7e')]();_0x4572f5[_0xbfcf('0x37')](_0x4efc16);_0x4572f5['offset'](0x0);logger[_0xbfcf('0x8e')](_0xbfcf('0x7f'),_0x4572f5[_0xbfcf('0x80')]());return db[_0xbfcf('0x81')][_0xbfcf('0x2e')](_0x4572f5[_0xbfcf('0x80')](),{'type':db[_0xbfcf('0x81')]['QueryTypes'][_0xbfcf('0xa0')]});}})[_0xbfcf('0x24')](function(){return{'sql':_0x1fa994[_0xbfcf('0x80')]()};})[_0xbfcf('0x24')](respondWithResult(_0x45af3d,null))[_0xbfcf('0x48')](handleError(_0x45af3d,null));};
\ No newline at end of file
+var _0x60b4=['IS\x20NOT\x20NULL','SELECT','No\x20available\x20data','output','fullPath','%s-%s.%s','randomstring','generate','csv','.calldate\x20BETWEEN\x20?\x20AND\x20?','startDate','endDate','.createdAt\x20BETWEEN\x20?\x20AND\x20?','Run\x20Query:','child_process','fork','../../components/export/','savename','countTable','COUNT(*)','run','runReport','AnalyticMetric','order','DESC','html-pdf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','jsforce','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','sendStatus','status','end','count','offset','Content-Range','apply','reject','save','update','then','get','CustomReports','UserProfileResource','error','name','send','rawAttributes','keys','query','filters','intersection','attributes','fields','length','nolimit','limit','sort','where','pick','filter','map','type','VIRTUAL','merge','options','includeAll','include','findAll','show','AnalyticCustomReport','model','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','Reports','UserProfileSection','find','userProfileId','autoAssociation','params','destroy','preview','join','left_join','right_join','cross_join','SUM(%s)','COUNT(%s)','COUNT(DISTINCT\x20%s)','MAX(%s)','AVG(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','SEC_TO_TIME(%s)','DATE(%s)','HOUR(%s)','ROUND(%s)','UNIX_TIMESTAMP(%s)','IS\x20NOT\x20EMPTY','rules','operator','group','field','condition','value','getFields','Sequelize','ValidationErrorItem','Please\x20insert\x20at\x20least\x20one\x20field','select','from','table','MetricId','metric','function','replace','format','groupBy','orderBy','alias','joins','parse','includes','parentKey','foreignTable','foreignKey','%s.%s\x20=\x20%s.%s','conditions','clone','debug','Limited\x20Query:','toString','sequelize','QueryTypes','MIN(%s)','GROUP_CONCAT(%s)','IS\x20NULL'];(function(_0x1b22c7,_0x39ffdb){var _0xcf9ba8=function(_0x19704c){while(--_0x19704c){_0x1b22c7['push'](_0x1b22c7['shift']());}};_0xcf9ba8(++_0x39ffdb);}(_0x60b4,0xb5));var _0x460b=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x60b4[_0x20a584];return _0x4b41a8;};'use strict';var pdf=require(_0x460b('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x460b('0x1'));var jsonpatch=require(_0x460b('0x2'));var rp=require(_0x460b('0x3'));var moment=require(_0x460b('0x4'));var BPromise=require(_0x460b('0x5'));var Mustache=require(_0x460b('0x6'));var util=require(_0x460b('0x7'));var path=require(_0x460b('0x8'));var sox=require('sox');var csv=require(_0x460b('0x9'));var ejs=require(_0x460b('0xa'));var fs=require('fs');var _=require(_0x460b('0xb'));var squel=require(_0x460b('0xc'));var crypto=require('crypto');var jsforce=require(_0x460b('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x460b('0x9'));var querystring=require('querystring');var Papa=require(_0x460b('0xe'));var Redis=require(_0x460b('0xf'));var authService=require(_0x460b('0x10'));var qs=require(_0x460b('0x11'));var hardwareService=require(_0x460b('0x12'));var logger=require(_0x460b('0x13'))('api');var utils=require(_0x460b('0x14'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x6e1d6d,_0xfc6d1f){_0xfc6d1f=_0xfc6d1f||0xcc;return function(_0x18c5ef){if(_0x18c5ef){return _0x6e1d6d[_0x460b('0x15')](_0xfc6d1f);}return _0x6e1d6d[_0x460b('0x16')](_0xfc6d1f)[_0x460b('0x17')]();};}function respondWithResult(_0x187aac,_0x29fd94){_0x29fd94=_0x29fd94||0xc8;return function(_0x6c69f7){if(_0x6c69f7){return _0x187aac[_0x460b('0x16')](_0x29fd94)['json'](_0x6c69f7);}};}function respondWithFilteredResult(_0xaaa72e,_0x50b7fd){return function(_0x18cdb3){if(_0x18cdb3){var _0x374caa=_0x18cdb3[_0x460b('0x18')],_0x5c48ac=_0x50b7fd['offset'],_0xb80b02=_0x50b7fd[_0x460b('0x19')]+_0x50b7fd['limit'],_0x4b7354;if(_0xb80b02>=_0x374caa){_0xb80b02=_0x374caa;_0x4b7354=0xc8;}else{_0x4b7354=0xce;}_0xaaa72e['status'](_0x4b7354);return _0xaaa72e['set'](_0x460b('0x1a'),_0x5c48ac+'-'+_0xb80b02+'/'+_0x374caa)['json'](_0x18cdb3);}return null;};}function patchUpdates(_0x534c25){return function(_0x58192f){try{jsonpatch[_0x460b('0x1b')](_0x58192f,_0x534c25,!![]);}catch(_0x256715){return BPromise[_0x460b('0x1c')](_0x256715);}return _0x58192f[_0x460b('0x1d')]();};}function saveUpdates(_0x2e1af2,_0x594c84){return function(_0x4206c1){if(_0x4206c1){return _0x4206c1[_0x460b('0x1e')](_0x2e1af2)[_0x460b('0x1f')](function(_0x3b3e38){return _0x3b3e38;});}return null;};}function removeEntity(_0x28a771,_0x36a710){return function(_0x5859f0){if(_0x5859f0){return _0x5859f0['destroy']()[_0x460b('0x1f')](function(){var _0x50d631=_0x5859f0[_0x460b('0x20')]({'plain':!![]});var _0x1463fe=_0x460b('0x21');return db[_0x460b('0x22')]['destroy']({'where':{'type':_0x1463fe,'resourceId':_0x50d631['id']}})[_0x460b('0x1f')](function(){return _0x5859f0;});})[_0x460b('0x1f')](function(){_0x28a771[_0x460b('0x16')](0xcc)[_0x460b('0x17')]();});}};}function handleEntityNotFound(_0x24b7e8,_0x3c8f66){return function(_0x3e7e6f){if(!_0x3e7e6f){_0x24b7e8[_0x460b('0x15')](0x194);}return _0x3e7e6f;};}function handleError(_0x15d4ed,_0xef0b4e){_0xef0b4e=_0xef0b4e||0x1f4;return function(_0x393b0e){logger[_0x460b('0x23')](_0x393b0e['stack']);if(_0x393b0e['name']){delete _0x393b0e[_0x460b('0x24')];}_0x15d4ed[_0x460b('0x16')](_0xef0b4e)[_0x460b('0x25')](_0x393b0e);};}exports['index']=function(_0x5503e1,_0x45852b){var _0x45f2c4={},_0x53f726={},_0x16445c={'count':0x0,'rows':[]};var _0x2f6cc6=db['AnalyticCustomReport'][_0x460b('0x26')];_0x53f726['model']=_[_0x460b('0x27')](_0x2f6cc6);_0x53f726['query']=_[_0x460b('0x27')](_0x5503e1[_0x460b('0x28')]);_0x53f726[_0x460b('0x29')]=_[_0x460b('0x2a')](_0x53f726['model'],_0x53f726['query']);_0x45f2c4[_0x460b('0x2b')]=_['intersection'](_0x53f726['model'],qs[_0x460b('0x2c')](_0x5503e1[_0x460b('0x28')][_0x460b('0x2c')]));_0x45f2c4[_0x460b('0x2b')]=_0x45f2c4['attributes'][_0x460b('0x2d')]?_0x45f2c4[_0x460b('0x2b')]:_0x53f726['model'];if(!_0x5503e1[_0x460b('0x28')]['hasOwnProperty'](_0x460b('0x2e'))){_0x45f2c4['limit']=qs[_0x460b('0x2f')](_0x5503e1['query']['limit']);_0x45f2c4[_0x460b('0x19')]=qs[_0x460b('0x19')](_0x5503e1[_0x460b('0x28')][_0x460b('0x19')]);}_0x45f2c4['order']=qs[_0x460b('0x30')](_0x5503e1[_0x460b('0x28')][_0x460b('0x30')]);_0x45f2c4[_0x460b('0x31')]=qs[_0x460b('0x29')](_[_0x460b('0x32')](_0x5503e1['query'],_0x53f726[_0x460b('0x29')]));if(_0x5503e1[_0x460b('0x28')][_0x460b('0x33')]){_0x45f2c4[_0x460b('0x31')]=_['merge'](_0x45f2c4[_0x460b('0x31')],{'$or':_[_0x460b('0x34')](_0x2f6cc6,function(_0x190d4d){if(_0x190d4d[_0x460b('0x35')]['key']!==_0x460b('0x36')){var _0x20a0db={};_0x20a0db[_0x190d4d['field']]={'$like':'%'+_0x5503e1[_0x460b('0x28')][_0x460b('0x33')]+'%'};return _0x20a0db;}})});}_0x45f2c4=_[_0x460b('0x37')]({},_0x45f2c4,_0x5503e1[_0x460b('0x38')]);var _0x51613e={'where':_0x45f2c4[_0x460b('0x31')]};return db['AnalyticCustomReport'][_0x460b('0x18')](_0x51613e)[_0x460b('0x1f')](function(_0x3cac64){_0x16445c['count']=_0x3cac64;if(_0x5503e1[_0x460b('0x28')][_0x460b('0x39')]){_0x45f2c4[_0x460b('0x3a')]=[{'all':!![]}];}return db['AnalyticCustomReport'][_0x460b('0x3b')](_0x45f2c4);})[_0x460b('0x1f')](function(_0x301ae2){_0x16445c['rows']=_0x301ae2;return _0x16445c;})['then'](respondWithFilteredResult(_0x45852b,_0x45f2c4))['catch'](handleError(_0x45852b,null));};exports[_0x460b('0x3c')]=function(_0x312143,_0x10908a){var _0x41ab15={'raw':![],'where':{'id':_0x312143['params']['id']}},_0x3c2f4a={};_0x3c2f4a['model']=_[_0x460b('0x27')](db[_0x460b('0x3d')][_0x460b('0x26')]);_0x3c2f4a[_0x460b('0x28')]=_[_0x460b('0x27')](_0x312143[_0x460b('0x28')]);_0x3c2f4a[_0x460b('0x29')]=_[_0x460b('0x2a')](_0x3c2f4a[_0x460b('0x3e')],_0x3c2f4a[_0x460b('0x28')]);_0x41ab15[_0x460b('0x2b')]=_[_0x460b('0x2a')](_0x3c2f4a[_0x460b('0x3e')],qs[_0x460b('0x2c')](_0x312143[_0x460b('0x28')][_0x460b('0x2c')]));_0x41ab15[_0x460b('0x2b')]=_0x41ab15[_0x460b('0x2b')]['length']?_0x41ab15[_0x460b('0x2b')]:_0x3c2f4a[_0x460b('0x3e')];if(_0x312143[_0x460b('0x28')][_0x460b('0x39')]){_0x41ab15[_0x460b('0x3a')]=[{'all':!![]}];}_0x41ab15=_[_0x460b('0x37')]({},_0x41ab15,_0x312143['options']);return db[_0x460b('0x3d')]['find'](_0x41ab15)['then'](handleEntityNotFound(_0x10908a,null))[_0x460b('0x1f')](respondWithResult(_0x10908a,null))[_0x460b('0x3f')](handleError(_0x10908a,null));};exports[_0x460b('0x40')]=function(_0x60328d,_0x527941){return db[_0x460b('0x3d')][_0x460b('0x40')](_0x60328d[_0x460b('0x41')],{})['then'](function(_0xa959a2){var _0x3339da=_0x60328d[_0x460b('0x42')]['get']({'plain':!![]});if(!_0x3339da)throw new Error(_0x460b('0x43'));if(_0x3339da['role']==='user'){var _0x42fbe2=_0xa959a2[_0x460b('0x20')]({'plain':!![]});var _0x544876=_0x460b('0x44');return db[_0x460b('0x45')][_0x460b('0x46')]({'where':{'name':_0x544876,'userProfileId':_0x3339da[_0x460b('0x47')]},'raw':!![]})['then'](function(_0x1d049c){if(_0x1d049c&&_0x1d049c[_0x460b('0x48')]===0x0){return db[_0x460b('0x22')][_0x460b('0x40')]({'name':_0x42fbe2[_0x460b('0x24')],'resourceId':_0x42fbe2['id'],'type':_0x460b('0x21'),'sectionId':_0x1d049c['id']},{})['then'](function(){return _0xa959a2;});}else{return _0xa959a2;}})['catch'](function(_0x484d2f){logger[_0x460b('0x23')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x484d2f);throw _0x484d2f;});}return _0xa959a2;})['then'](respondWithResult(_0x527941,0xc9))[_0x460b('0x3f')](handleError(_0x527941,null));};exports[_0x460b('0x1e')]=function(_0x58e604,_0x1fb439){if(_0x58e604[_0x460b('0x41')]['id']){delete _0x58e604[_0x460b('0x41')]['id'];}return db[_0x460b('0x3d')][_0x460b('0x46')]({'where':{'id':_0x58e604[_0x460b('0x49')]['id']}})[_0x460b('0x1f')](handleEntityNotFound(_0x1fb439,null))[_0x460b('0x1f')](saveUpdates(_0x58e604[_0x460b('0x41')],null))[_0x460b('0x1f')](respondWithResult(_0x1fb439,null))[_0x460b('0x3f')](handleError(_0x1fb439,null));};exports[_0x460b('0x4a')]=function(_0x21d8e7,_0x1fb4f6){return db[_0x460b('0x3d')][_0x460b('0x46')]({'where':{'id':_0x21d8e7['params']['id']}})[_0x460b('0x1f')](handleEntityNotFound(_0x1fb4f6,null))[_0x460b('0x1f')](removeEntity(_0x1fb4f6,null))['catch'](handleError(_0x1fb4f6,null));};exports[_0x460b('0x4b')]=function(_0x202314,_0x1c4a28){var _0x4ebce9=0xa;var _0x2ea53e=[_0x460b('0x4c'),_0x460b('0x4d'),_0x460b('0x4e'),_0x460b('0x4f')];var _0x263375={'SUM':_0x460b('0x50'),'COUNT':_0x460b('0x51'),'COUNT DISTINCT':_0x460b('0x52'),'MAX':_0x460b('0x53'),'MIN':'MIN(%s)','AVG':_0x460b('0x54'),'GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':_0x460b('0x55'),'GROUP_CONCAT DESC':_0x460b('0x56')};var _0x4e58ee={'SEC_TO_TIME':_0x460b('0x57'),'DATE':_0x460b('0x58'),'HOUR':_0x460b('0x59'),'ROUND':_0x460b('0x5a'),'UNIX_TIMESTAMP':_0x460b('0x5b')};var _0x28430=function(_0xee170f){return!_['includes'](['IS\x20NULL','IS\x20NOT\x20NULL','IS\x20EMPTY',_0x460b('0x5c')],_0xee170f);};var _0x1a1eba=function(_0x536926){if(!_0x536926||!_0x536926[_0x460b('0x5d')][_0x460b('0x2d')]){return'';}for(var _0x1a507c='(',_0x5650d4=0x0;_0x5650d4<_0x536926[_0x460b('0x5d')][_0x460b('0x2d')];_0x5650d4+=0x1){_0x5650d4>0x0&&(_0x1a507c+='\x20'+_0x536926[_0x460b('0x5e')]+'\x20');_0x1a507c+=_0x536926['rules'][_0x5650d4]['group']?_0x1a1eba(_0x536926[_0x460b('0x5d')][_0x5650d4][_0x460b('0x5f')]):_0x536926[_0x460b('0x5d')][_0x5650d4][_0x460b('0x60')]+'\x20'+_0x536926[_0x460b('0x5d')][_0x5650d4][_0x460b('0x61')]+(_0x28430(_0x536926['rules'][_0x5650d4]['condition'])?'\x20'+_0x536926[_0x460b('0x5d')][_0x5650d4][_0x460b('0x62')]:'');}return _0x1a507c+')';};var _0x2fd5d9={'where':{'id':_0x202314[_0x460b('0x49')]['id']}},_0x4c905f,_0x34814f,_0x2299c8,_0x9e0d9f,_0x286024;_0x2fd5d9=_[_0x460b('0x37')]({},_0x2fd5d9,_0x202314['options']);return db['AnalyticCustomReport']['find'](_0x2fd5d9)[_0x460b('0x1f')](function(_0x2e5ec4){if(_0x2e5ec4){_0x4c905f=_0x2e5ec4;return _0x2e5ec4[_0x460b('0x63')]();}return null;})[_0x460b('0x1f')](function(_0x275402){if(_0x275402){if(!_0x275402[_0x460b('0x2d')]){throw new db[(_0x460b('0x64'))][(_0x460b('0x65'))](_0x460b('0x66'),0x193);}_0x34814f=_0x275402;return db['AnalyticMetric'][_0x460b('0x3b')]({'raw':!![]});}return null;})[_0x460b('0x1f')](function(_0x5c2a24){if(_0x5c2a24){_0x2299c8=_['keyBy'](_0x5c2a24,'id');var _0x4bfb13;var _0x51dc09=squel[_0x460b('0x67')]();_0x51dc09[_0x460b('0x68')](_0x4c905f[_0x460b('0x69')]);for(var _0x479574=0x0;_0x479574<_0x34814f[_0x460b('0x2d')];_0x479574+=0x1){_0x4bfb13=_0x34814f[_0x479574][_0x460b('0x6a')]?_0x2299c8[_0x34814f[_0x479574][_0x460b('0x6a')]][_0x460b('0x6b')]:_0x34814f[_0x479574][_0x460b('0x60')];_0x4bfb13=_0x34814f[_0x479574][_0x460b('0x6c')]?_[_0x460b('0x6d')](_0x263375[_0x34814f[_0x479574][_0x460b('0x6c')]],'%s',_0x4bfb13):_0x4bfb13;_0x4bfb13=_0x34814f[_0x479574][_0x460b('0x6e')]?_[_0x460b('0x6d')](_0x4e58ee[_0x34814f[_0x479574][_0x460b('0x6e')]],'%s',_0x4bfb13):_0x4bfb13;if(_0x34814f[_0x479574][_0x460b('0x6f')]){_0x51dc09[_0x460b('0x5f')](_0x4bfb13);}_0x34814f[_0x479574][_0x460b('0x70')]&&_0x51dc09['order'](_0x4bfb13,_0x34814f[_0x479574][_0x460b('0x70')]==='DESC'?![]:!![]);_0x51dc09[_0x460b('0x60')](_0x4bfb13,_0x34814f[_0x479574][_0x460b('0x71')]||_0x4bfb13);}if(_0x4c905f['joins']){_0x4c905f[_0x460b('0x72')]=JSON[_0x460b('0x73')](_0x4c905f[_0x460b('0x72')]);for(var _0x3e3002=0x0;_0x3e3002<_0x4c905f[_0x460b('0x72')][_0x460b('0x2d')];_0x3e3002+=0x1){if(_0x4c905f['joins'][_0x3e3002][_0x460b('0x35')]&&_[_0x460b('0x74')](_0x2ea53e,_0x4c905f[_0x460b('0x72')][_0x3e3002][_0x460b('0x35')])&&_0x4c905f[_0x460b('0x72')][_0x3e3002][_0x460b('0x75')]&&_0x4c905f[_0x460b('0x72')][_0x3e3002][_0x460b('0x76')]&&_0x4c905f['joins'][_0x3e3002][_0x460b('0x77')]){_0x51dc09[_0x4c905f[_0x460b('0x72')][_0x3e3002][_0x460b('0x35')]](_0x4c905f[_0x460b('0x72')][_0x3e3002][_0x460b('0x76')],null,util[_0x460b('0x6e')](_0x460b('0x78'),_0x4c905f[_0x460b('0x69')],_0x4c905f['joins'][_0x3e3002][_0x460b('0x75')],_0x4c905f[_0x460b('0x72')][_0x3e3002]['foreignTable'],_0x4c905f[_0x460b('0x72')][_0x3e3002]['foreignKey']));}}}if(_0x4c905f[_0x460b('0x79')]){_0x4c905f['conditions']=JSON[_0x460b('0x73')](_0x4c905f[_0x460b('0x79')]);_0x51dc09['where'](_0x1a1eba(_0x4c905f[_0x460b('0x79')][_0x460b('0x5f')]));}_0x286024=_0x51dc09[_0x460b('0x7a')]();_0x51dc09[_0x460b('0x2f')](_0x4ebce9);_0x51dc09[_0x460b('0x19')](0x0);logger[_0x460b('0x7b')](_0x460b('0x7c'),_0x51dc09[_0x460b('0x7d')]());return db[_0x460b('0x7e')][_0x460b('0x28')](_0x51dc09['toString'](),{'type':db['sequelize'][_0x460b('0x7f')]['SELECT']});}})['then'](respondWithResult(_0x1c4a28,null))[_0x460b('0x3f')](handleError(_0x1c4a28,null));};function runReport(_0x15aff2,_0x41c4e8,_0x1fe7c5){var _0x12a129=_0x41c4e8[_0x460b('0x24')];var _0x66306b=0xa;var _0x3fa9ed=[_0x460b('0x4c'),'left_join',_0x460b('0x4e'),_0x460b('0x4f')];var _0xfda810={'SUM':_0x460b('0x50'),'COUNT':_0x460b('0x51'),'COUNT DISTINCT':_0x460b('0x52'),'MAX':_0x460b('0x53'),'MIN':_0x460b('0x80'),'AVG':_0x460b('0x54'),'GROUP_CONCAT':_0x460b('0x81'),'GROUP_CONCAT ASC':_0x460b('0x55'),'GROUP_CONCAT DESC':_0x460b('0x56')};var _0x335b65={'SEC_TO_TIME':_0x460b('0x57'),'DATE':'DATE(%s)','HOUR':_0x460b('0x59'),'ROUND':_0x460b('0x5a'),'UNIX_TIMESTAMP':_0x460b('0x5b')};var _0x366ae9=function(_0x3c182b){return!_['includes']([_0x460b('0x82'),_0x460b('0x83'),'IS\x20EMPTY',_0x460b('0x5c')],_0x3c182b);};var _0x5dbe6c=function(_0x3e22d4){if(!_0x3e22d4||!_0x3e22d4[_0x460b('0x5d')][_0x460b('0x2d')]){return'';}for(var _0x2038f0='(',_0x15f11d=0x0;_0x15f11d<_0x3e22d4[_0x460b('0x5d')][_0x460b('0x2d')];_0x15f11d+=0x1){_0x15f11d>0x0&&(_0x2038f0+='\x20'+_0x3e22d4['operator']+'\x20');_0x2038f0+=_0x3e22d4[_0x460b('0x5d')][_0x15f11d][_0x460b('0x5f')]?_0x5dbe6c(_0x3e22d4['rules'][_0x15f11d][_0x460b('0x5f')]):_0x3e22d4[_0x460b('0x5d')][_0x15f11d][_0x460b('0x60')]+'\x20'+_0x3e22d4[_0x460b('0x5d')][_0x15f11d]['condition']+(_0x366ae9(_0x3e22d4['rules'][_0x15f11d][_0x460b('0x61')])?'\x20'+_0x3e22d4[_0x460b('0x5d')][_0x15f11d][_0x460b('0x62')]:'');}return _0x2038f0+')';};var _0x120756={'where':{'id':_0x15aff2['id']}},_0x43ce25,_0x6cda63,_0x2f4111,_0x57b8a3,_0x4173c8;_0x120756=_[_0x460b('0x37')]({},_0x120756,_0x1fe7c5);return db['AnalyticCustomReport'][_0x460b('0x46')](_0x120756)[_0x460b('0x1f')](function(_0x79fba9){if(_0x79fba9){_0x43ce25=_0x79fba9;return _0x79fba9['getFields']();}return null;})[_0x460b('0x1f')](function(_0x6aef92){if(_0x6aef92){if(!_0x6aef92[_0x460b('0x2d')]){throw new db[(_0x460b('0x64'))]['ValidationErrorItem']('Please\x20insert\x20at\x20least\x20one\x20field',0x193);}_0x6cda63=_0x6aef92;return db['AnalyticMetric'][_0x460b('0x3b')]({'raw':!![]});}return null;})['then'](function(_0x19463c){if(_0x19463c){_0x2f4111=_['keyBy'](_0x19463c,'id');var _0x39eaab;var _0x8ba32f=squel[_0x460b('0x67')]();_0x8ba32f[_0x460b('0x68')](_0x43ce25[_0x460b('0x69')]);for(var _0x4b7b3a=0x0;_0x4b7b3a<_0x6cda63[_0x460b('0x2d')];_0x4b7b3a+=0x1){_0x39eaab=_0x6cda63[_0x4b7b3a][_0x460b('0x6a')]?_0x2f4111[_0x6cda63[_0x4b7b3a][_0x460b('0x6a')]][_0x460b('0x6b')]:_0x6cda63[_0x4b7b3a][_0x460b('0x60')];_0x39eaab=_0x6cda63[_0x4b7b3a][_0x460b('0x6c')]?_[_0x460b('0x6d')](_0xfda810[_0x6cda63[_0x4b7b3a][_0x460b('0x6c')]],'%s',_0x39eaab):_0x39eaab;_0x39eaab=_0x6cda63[_0x4b7b3a]['format']?_['replace'](_0x335b65[_0x6cda63[_0x4b7b3a]['format']],'%s',_0x39eaab):_0x39eaab;if(_0x6cda63[_0x4b7b3a]['groupBy']){_0x8ba32f[_0x460b('0x5f')](_0x39eaab);}_0x6cda63[_0x4b7b3a]['orderBy']&&_0x8ba32f['order'](_0x39eaab,_0x6cda63[_0x4b7b3a][_0x460b('0x70')]==='DESC'?![]:!![]);_0x8ba32f[_0x460b('0x60')](_0x39eaab,_0x6cda63[_0x4b7b3a][_0x460b('0x71')]||_0x39eaab);}if(_0x43ce25[_0x460b('0x72')]){_0x43ce25[_0x460b('0x72')]=JSON[_0x460b('0x73')](_0x43ce25[_0x460b('0x72')]);for(var _0x2bec14=0x0;_0x2bec14<_0x43ce25[_0x460b('0x72')]['length'];_0x2bec14+=0x1){if(_0x43ce25[_0x460b('0x72')][_0x2bec14][_0x460b('0x35')]&&_[_0x460b('0x74')](_0x3fa9ed,_0x43ce25[_0x460b('0x72')][_0x2bec14][_0x460b('0x35')])&&_0x43ce25[_0x460b('0x72')][_0x2bec14][_0x460b('0x75')]&&_0x43ce25['joins'][_0x2bec14]['foreignTable']&&_0x43ce25[_0x460b('0x72')][_0x2bec14][_0x460b('0x77')]){_0x8ba32f[_0x43ce25[_0x460b('0x72')][_0x2bec14]['type']](_0x43ce25[_0x460b('0x72')][_0x2bec14][_0x460b('0x76')],null,util[_0x460b('0x6e')](_0x460b('0x78'),_0x43ce25[_0x460b('0x69')],_0x43ce25[_0x460b('0x72')][_0x2bec14]['parentKey'],_0x43ce25[_0x460b('0x72')][_0x2bec14][_0x460b('0x76')],_0x43ce25['joins'][_0x2bec14][_0x460b('0x77')]));}}}if(_0x43ce25[_0x460b('0x79')]){_0x43ce25[_0x460b('0x79')]=JSON[_0x460b('0x73')](_0x43ce25[_0x460b('0x79')]);_0x8ba32f['where'](_0x5dbe6c(_0x43ce25[_0x460b('0x79')][_0x460b('0x5f')]));}_0x4173c8=_0x8ba32f['clone']();_0x8ba32f['limit'](_0x66306b);_0x8ba32f[_0x460b('0x19')](0x0);logger[_0x460b('0x7b')](_0x460b('0x7c'),_0x8ba32f['toString']());return db['sequelize'][_0x460b('0x28')](_0x8ba32f[_0x460b('0x7d')](),{'type':db['sequelize'][_0x460b('0x7f')][_0x460b('0x84')]});}})['then'](function(_0x13a44c){if(!_0x13a44c[_0x460b('0x2d')]){throw new db['Sequelize'][(_0x460b('0x65'))](_0x460b('0x85'),0xcc);}if(_0x41c4e8[_0x460b('0x86')]==='web'){return null;}var _0x168709=_[_0x460b('0x37')](_0x41c4e8,{'name':_0x41c4e8[_0x460b('0x87')]||_0x41c4e8[_0x460b('0x24')]||_0x43ce25[_0x460b('0x24')],'basename':_0x12a129,'savename':util['format'](_0x460b('0x88'),_0x41c4e8[_0x460b('0x24')]||_0x43ce25[_0x460b('0x24')],require(_0x460b('0x89'))[_0x460b('0x8a')](0x4),_0x41c4e8[_0x460b('0x86')]||_0x460b('0x8b')),'reportId':_0x43ce25['id'],'reportType':'custom'});return db['AnalyticExtractedReport'][_0x460b('0x40')](_0x168709,{'raw':!![]});})[_0x460b('0x1f')](function(_0xcaf0c1){if(_0x43ce25[_0x460b('0x69')]==='cdr'){_0x4173c8[_0x460b('0x31')](_0x43ce25[_0x460b('0x69')]+_0x460b('0x8c'),_0x41c4e8[_0x460b('0x8d')],_0x41c4e8[_0x460b('0x8e')]);}else{_0x4173c8[_0x460b('0x31')](_0x43ce25[_0x460b('0x69')]+_0x460b('0x8f'),_0x41c4e8['startDate'],_0x41c4e8[_0x460b('0x8e')]);}if(_0xcaf0c1){logger['info'](_0x460b('0x90'),_0x4173c8['toString']());require(_0x460b('0x91'))[_0x460b('0x92')](path[_0x460b('0x4c')](__dirname,_0x460b('0x93'),_0xcaf0c1[_0x460b('0x86')]),[_0xcaf0c1['id'],_0x4173c8['toString'](),path[_0x460b('0x4c')](__dirname,'../../files/reports',_0xcaf0c1[_0x460b('0x94')]),_0x12a129]);return _0xcaf0c1;}else{var _0x513992=squel[_0x460b('0x67')]();_0x513992[_0x460b('0x68')]('('+_0x4173c8[_0x460b('0x7d')]()+')',_0x460b('0x95'));_0x513992['field'](_0x460b('0x96'),_0x460b('0x18'));_0x4173c8['limit'](_0x41c4e8[_0x460b('0x2f')]||_0x66306b);_0x4173c8['offset'](_0x41c4e8[_0x460b('0x19')]||0x0);return db[_0x460b('0x7e')][_0x460b('0x28')](_0x513992[_0x460b('0x7d')](),{'type':db[_0x460b('0x7e')][_0x460b('0x7f')][_0x460b('0x84')]})[_0x460b('0x1f')](function(_0x19682d){if(!_0x19682d[_0x460b('0x2d')]){_0x57b8a3=0x0;}else{_0x57b8a3=_0x19682d[0x0]['count']||0x0;}return db[_0x460b('0x7e')][_0x460b('0x28')](_0x4173c8['toString'](),{'type':db[_0x460b('0x7e')]['QueryTypes'][_0x460b('0x84')]});})[_0x460b('0x1f')](function(_0x5bf401){return{'rows':_0x5bf401||[],'count':_0x57b8a3};});}});}exports[_0x460b('0x97')]=function(_0x5e384c,_0x353ed3){return runReport(_0x5e384c[_0x460b('0x49')],_0x5e384c[_0x460b('0x28')],_0x5e384c[_0x460b('0x38')])[_0x460b('0x1f')](respondWithResult(_0x353ed3,null))[_0x460b('0x3f')](handleError(_0x353ed3,null));};exports[_0x460b('0x98')]=runReport;exports['query']=function(_0x4353b6,_0x2b85b0){var _0x264da3=0xa;var _0x2076ce=[_0x460b('0x4c'),_0x460b('0x4d'),'right_join','cross_join'];var _0x460e44={'SUM':_0x460b('0x50'),'COUNT':_0x460b('0x51'),'COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0x460b('0x53'),'MIN':_0x460b('0x80'),'AVG':'AVG(%s)','GROUP_CONCAT':_0x460b('0x81'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0x460b('0x56')};var _0xfbddbd={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0x460b('0x58'),'HOUR':_0x460b('0x59'),'ROUND':_0x460b('0x5a'),'UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x499564=function(_0x471fea){return!_[_0x460b('0x74')]([_0x460b('0x82'),_0x460b('0x83'),'IS\x20EMPTY',_0x460b('0x5c')],_0x471fea);};var _0x304ac0=function(_0x5e7b0a){if(!_0x5e7b0a||!_0x5e7b0a[_0x460b('0x5d')]['length']){return'';}for(var _0x18ce3c='(',_0x3fb152=0x0;_0x3fb152<_0x5e7b0a['rules'][_0x460b('0x2d')];_0x3fb152+=0x1){_0x3fb152>0x0&&(_0x18ce3c+='\x20'+_0x5e7b0a[_0x460b('0x5e')]+'\x20');_0x18ce3c+=_0x5e7b0a[_0x460b('0x5d')][_0x3fb152]['group']?_0x304ac0(_0x5e7b0a['rules'][_0x3fb152][_0x460b('0x5f')]):_0x5e7b0a[_0x460b('0x5d')][_0x3fb152][_0x460b('0x60')]+'\x20'+_0x5e7b0a['rules'][_0x3fb152]['condition']+(_0x499564(_0x5e7b0a[_0x460b('0x5d')][_0x3fb152][_0x460b('0x61')])?'\x20'+_0x5e7b0a[_0x460b('0x5d')][_0x3fb152]['value']:'');}return _0x18ce3c+')';};var _0x3b70fc={'where':{'id':_0x4353b6['params']['id']}},_0x1a7216,_0x45560a,_0x475b7f,_0x2e3536,_0x3195a5;_0x3b70fc=_[_0x460b('0x37')]({},_0x3b70fc,_0x4353b6[_0x460b('0x38')]);return db['AnalyticCustomReport']['find'](_0x3b70fc)['then'](function(_0x5ba06b){if(_0x5ba06b){_0x1a7216=_0x5ba06b;return _0x5ba06b['getFields']();}return null;})['then'](function(_0x350f58){if(_0x350f58){if(!_0x350f58[_0x460b('0x2d')]){throw new db['Sequelize']['ValidationErrorItem']('Please\x20insert\x20at\x20least\x20one\x20field',0x193);}_0x45560a=_0x350f58;return db[_0x460b('0x99')][_0x460b('0x3b')]({'raw':!![]});}return null;})[_0x460b('0x1f')](function(_0x37d9d3){if(_0x37d9d3){_0x475b7f=_['keyBy'](_0x37d9d3,'id');var _0x53f2ed;var _0x4a0774=squel['select']();_0x4a0774['from'](_0x1a7216[_0x460b('0x69')]);for(var _0x2f58db=0x0;_0x2f58db<_0x45560a[_0x460b('0x2d')];_0x2f58db+=0x1){_0x53f2ed=_0x45560a[_0x2f58db][_0x460b('0x6a')]?_0x475b7f[_0x45560a[_0x2f58db][_0x460b('0x6a')]][_0x460b('0x6b')]:_0x45560a[_0x2f58db]['field'];_0x53f2ed=_0x45560a[_0x2f58db]['function']?_[_0x460b('0x6d')](_0x460e44[_0x45560a[_0x2f58db]['function']],'%s',_0x53f2ed):_0x53f2ed;_0x53f2ed=_0x45560a[_0x2f58db][_0x460b('0x6e')]?_[_0x460b('0x6d')](_0xfbddbd[_0x45560a[_0x2f58db][_0x460b('0x6e')]],'%s',_0x53f2ed):_0x53f2ed;if(_0x45560a[_0x2f58db][_0x460b('0x6f')]){_0x4a0774[_0x460b('0x5f')](_0x53f2ed);}_0x45560a[_0x2f58db]['orderBy']&&_0x4a0774[_0x460b('0x9a')](_0x53f2ed,_0x45560a[_0x2f58db][_0x460b('0x70')]===_0x460b('0x9b')?![]:!![]);_0x4a0774[_0x460b('0x60')](_0x53f2ed,_0x45560a[_0x2f58db][_0x460b('0x71')]||_0x53f2ed);}if(_0x1a7216[_0x460b('0x72')]){_0x1a7216['joins']=JSON[_0x460b('0x73')](_0x1a7216[_0x460b('0x72')]);for(var _0x100134=0x0;_0x100134<_0x1a7216[_0x460b('0x72')][_0x460b('0x2d')];_0x100134+=0x1){if(_0x1a7216[_0x460b('0x72')][_0x100134][_0x460b('0x35')]&&_['includes'](_0x2076ce,_0x1a7216[_0x460b('0x72')][_0x100134]['type'])&&_0x1a7216[_0x460b('0x72')][_0x100134][_0x460b('0x75')]&&_0x1a7216[_0x460b('0x72')][_0x100134][_0x460b('0x76')]&&_0x1a7216['joins'][_0x100134][_0x460b('0x77')]){_0x4a0774[_0x1a7216[_0x460b('0x72')][_0x100134][_0x460b('0x35')]](_0x1a7216[_0x460b('0x72')][_0x100134][_0x460b('0x76')],null,util['format']('%s.%s\x20=\x20%s.%s',_0x1a7216[_0x460b('0x69')],_0x1a7216[_0x460b('0x72')][_0x100134]['parentKey'],_0x1a7216[_0x460b('0x72')][_0x100134][_0x460b('0x76')],_0x1a7216['joins'][_0x100134][_0x460b('0x77')]));}}}if(_0x1a7216[_0x460b('0x79')]){_0x1a7216['conditions']=JSON[_0x460b('0x73')](_0x1a7216[_0x460b('0x79')]);_0x4a0774[_0x460b('0x31')](_0x304ac0(_0x1a7216[_0x460b('0x79')]['group']));}_0x3195a5=_0x4a0774['clone']();_0x4a0774[_0x460b('0x2f')](_0x264da3);_0x4a0774[_0x460b('0x19')](0x0);logger[_0x460b('0x7b')](_0x460b('0x7c'),_0x4a0774[_0x460b('0x7d')]());return db[_0x460b('0x7e')][_0x460b('0x28')](_0x4a0774[_0x460b('0x7d')](),{'type':db['sequelize']['QueryTypes']['SELECT']});}})[_0x460b('0x1f')](function(){return{'sql':_0x3195a5[_0x460b('0x7d')]()};})[_0x460b('0x1f')](respondWithResult(_0x2b85b0,null))[_0x460b('0x3f')](handleError(_0x2b85b0,null));};
\ No newline at end of file
index b5270d9..89dacc9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x74fb=['exports','AnalyticCustomReport','analytics_custom_reports','lodash','util','../../config/logger','api','moment','bluebird','request-promise','rimraf','./analyticCustomReport.attributes'];(function(_0x525790,_0x1064af){var _0x3e82db=function(_0x214308){while(--_0x214308){_0x525790['push'](_0x525790['shift']());}};_0x3e82db(++_0x1064af);}(_0x74fb,0x1cb));var _0xb74f=function(_0x452af7,_0x993b24){_0x452af7=_0x452af7-0x0;var _0x16a885=_0x74fb[_0x452af7];return _0x16a885;};'use strict';var _=require(_0xb74f('0x0'));var util=require(_0xb74f('0x1'));var logger=require(_0xb74f('0x2'))(_0xb74f('0x3'));var moment=require(_0xb74f('0x4'));var BPromise=require(_0xb74f('0x5'));var rp=require(_0xb74f('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0xb74f('0x7'));var config=require('../../config/environment');var attributes=require(_0xb74f('0x8'));module[_0xb74f('0x9')]=function(_0x560aa5,_0x426a2e){return _0x560aa5['define'](_0xb74f('0xa'),attributes,{'tableName':_0xb74f('0xb'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0860=['path','rimraf','../../config/environment','exports','define','analytics_custom_reports','lodash','util','api'];(function(_0x28c46c,_0x1d7a1f){var _0x5c3efa=function(_0x46f59c){while(--_0x46f59c){_0x28c46c['push'](_0x28c46c['shift']());}};_0x5c3efa(++_0x1d7a1f);}(_0x0860,0x180));var _0x0086=function(_0x2b98a3,_0x4cbf5a){_0x2b98a3=_0x2b98a3-0x0;var _0x316efd=_0x0860[_0x2b98a3];return _0x316efd;};'use strict';var _=require(_0x0086('0x0'));var util=require(_0x0086('0x1'));var logger=require('../../config/logger')(_0x0086('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x0086('0x3'));var rimraf=require(_0x0086('0x4'));var config=require(_0x0086('0x5'));var attributes=require('./analyticCustomReport.attributes');module[_0x0086('0x6')]=function(_0x534335,_0x455d84){return _0x534335[_0x0086('0x7')]('AnalyticCustomReport',attributes,{'tableName':_0x0086('0x8'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 705b0a3..1025e41 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then','info','AnalyticCustomReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticCustomReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','ioredis'];(function(_0x156e99,_0x2bf27e){var _0x18870e=function(_0x3e6c3b){while(--_0x3e6c3b){_0x156e99['push'](_0x156e99['shift']());}};_0x18870e(++_0x2bf27e);}(_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);});});}
\ No newline at end of file
+var _0xd8b0=['../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then','info','AnalyticCustomReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticCustomReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','ioredis'];(function(_0x293fa4,_0x3ee6cc){var _0x58d190=function(_0x7aea40){while(--_0x7aea40){_0x293fa4['push'](_0x293fa4['shift']());}};_0x58d190(++_0x3ee6cc);}(_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);});});}
\ No newline at end of file
index 423bfaf..8099802 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb44a=['/:id/preview','preview','query','post','create','put','delete','exports','path','express','../../components/interaction/service','./analyticCustomReport.controller','get','isAuthenticated','index','/:id','show'];(function(_0x3cb2e3,_0x1e3fbc){var _0x390650=function(_0x119154){while(--_0x119154){_0x3cb2e3['push'](_0x3cb2e3['shift']());}};_0x390650(++_0x1e3fbc);}(_0xb44a,0x1c2));var _0xab44=function(_0x340c13,_0x595d66){_0x340c13=_0x340c13-0x0;var _0x5a7d96=_0xb44a[_0x340c13];return _0x5a7d96;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xab44('0x0'));var timeout=require('connect-timeout');var express=require(_0xab44('0x1'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xab44('0x2'));var config=require('../../config/environment');var controller=require(_0xab44('0x3'));router[_0xab44('0x4')]('/',auth[_0xab44('0x5')](),controller[_0xab44('0x6')]);router[_0xab44('0x4')](_0xab44('0x7'),auth[_0xab44('0x5')](),controller[_0xab44('0x8')]);router[_0xab44('0x4')](_0xab44('0x9'),auth[_0xab44('0x5')](),controller[_0xab44('0xa')]);router[_0xab44('0x4')]('/:id/run',auth[_0xab44('0x5')](),controller['run']);router[_0xab44('0x4')]('/:id/query',auth['isAuthenticated'](),controller[_0xab44('0xb')]);router[_0xab44('0xc')]('/',auth[_0xab44('0x5')](),controller[_0xab44('0xd')]);router[_0xab44('0xe')](_0xab44('0x7'),auth['isAuthenticated'](),controller['update']);router[_0xab44('0xf')]('/:id',auth[_0xab44('0x5')](),controller['destroy']);module[_0xab44('0x10')]=router;
\ No newline at end of file
+var _0x4213=['util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','get','isAuthenticated','index','show','/:id/preview','run','/:id/query','query','post','create','put','update','delete','/:id','destroy','exports','multer'];(function(_0x21790f,_0x1eea53){var _0x5e34c3=function(_0x3fef0c){while(--_0x3fef0c){_0x21790f['push'](_0x21790f['shift']());}};_0x5e34c3(++_0x1eea53);}(_0x4213,0x77));var _0x3421=function(_0x4362c1,_0x32be76){_0x4362c1=_0x4362c1-0x0;var _0x5bf01c=_0x4213[_0x4362c1];return _0x5bf01c;};'use strict';var multer=require(_0x3421('0x0'));var util=require(_0x3421('0x1'));var path=require(_0x3421('0x2'));var timeout=require(_0x3421('0x3'));var express=require(_0x3421('0x4'));var router=express[_0x3421('0x5')]();var auth=require(_0x3421('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x3421('0x7'));var controller=require('./analyticCustomReport.controller');router[_0x3421('0x8')]('/',auth[_0x3421('0x9')](),controller[_0x3421('0xa')]);router[_0x3421('0x8')]('/:id',auth[_0x3421('0x9')](),controller[_0x3421('0xb')]);router[_0x3421('0x8')](_0x3421('0xc'),auth[_0x3421('0x9')](),controller['preview']);router[_0x3421('0x8')]('/:id/run',auth['isAuthenticated'](),controller[_0x3421('0xd')]);router['get'](_0x3421('0xe'),auth[_0x3421('0x9')](),controller[_0x3421('0xf')]);router[_0x3421('0x10')]('/',auth[_0x3421('0x9')](),controller[_0x3421('0x11')]);router[_0x3421('0x12')]('/:id',auth[_0x3421('0x9')](),controller[_0x3421('0x13')]);router[_0x3421('0x14')](_0x3421('0x15'),auth[_0x3421('0x9')](),controller[_0x3421('0x16')]);module[_0x3421('0x17')]=router;
\ No newline at end of file
index 8d69e14..15be048 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x525d=['TEXT','exports','STRING'];(function(_0xf36a76,_0x3967b3){var _0x414aa5=function(_0x84dc89){while(--_0x84dc89){_0xf36a76['push'](_0xf36a76['shift']());}};_0x414aa5(++_0x3967b3);}(_0x525d,0xc1));var _0xd525=function(_0x412f54,_0x452c96){_0x412f54=_0x412f54-0x0;var _0x3e9b9f=_0x525d[_0x412f54];return _0x3e9b9f;};'use strict';var Sequelize=require('sequelize');module[_0xd525('0x0')]={'name':{'type':Sequelize[_0xd525('0x1')],'allowNull':![]},'description':{'type':Sequelize[_0xd525('0x1')]},'parent':{'type':Sequelize[_0xd525('0x1')]},'table':{'type':Sequelize['STRING']},'conditions':{'type':Sequelize[_0xd525('0x2')]},'joins':{'type':Sequelize[_0xd525('0x2')]}};
\ No newline at end of file
+var _0x41b6=['STRING','TEXT','sequelize','exports'];(function(_0x333714,_0x3370ac){var _0x4c211e=function(_0x34219b){while(--_0x34219b){_0x333714['push'](_0x333714['shift']());}};_0x4c211e(++_0x3370ac);}(_0x41b6,0x10e));var _0x641b=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0x41b6[_0x2641f9];return _0x585741;};'use strict';var Sequelize=require(_0x641b('0x0'));module[_0x641b('0x1')]={'name':{'type':Sequelize[_0x641b('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x641b('0x2')]},'parent':{'type':Sequelize[_0x641b('0x2')]},'table':{'type':Sequelize[_0x641b('0x2')]},'conditions':{'type':Sequelize['TEXT']},'joins':{'type':Sequelize[_0x641b('0x3')]}};
\ No newline at end of file
index 2d91e6d..e67c31a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa3cb=['key','VIRTUAL','field','options','count','includeAll','include','findAll','rows','catch','params','length','create','body','role','user','Reports','UserProfileSection','find','userProfileId','autoAssociation','join','left_join','right_join','SUM(%s)','COUNT(%s)','MAX(%s)','AVG(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','SEC_TO_TIME(%s)','DATE(%s)','HOUR(%s)','ROUND(%s)','IS\x20NULL','IS\x20NOT\x20NULL','IS\x20EMPTY','rules','operator','group','condition','Sequelize','ValidationErrorItem','Please\x20insert\x20at\x20least\x20one\x20field','AnalyticMetric','keyBy','select','from','table','MetricId','metric','function','format','replace','groupBy','orderBy','alias','joins','parse','includes','foreignTable','foreignKey','%s.%s\x20=\x20%s.%s','conditions','clone','debug','Limited\x20Query:','toString','sequelize','QueryTypes','cross_join','COUNT(DISTINCT\x20%s)','GROUP_CONCAT(%s)','UNIX_TIMESTAMP(%s)','IS\x20NOT\x20EMPTY','value','getFields','DESC','parentKey','No\x20available\x20data','output','web','fullPath','%s-%s.%s','generate','csv','default','AnalyticExtractedReport','cdr','startDate','endDate','info','child_process','fork','../../components/export/','savename','countTable','SELECT','run','runReport','MIN(%s)','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','offset','limit','set','apply','reject','save','update','then','destroy','get','DefaultReports','UserProfileResource','error','stack','name','index','AnalyticDefaultReport','rawAttributes','model','query','keys','filters','intersection','attributes','fields','hasOwnProperty','order','sort','where','pick','filter','merge','type'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0xa3cb,0x65));var _0xba3c=function(_0x7e2eb0,_0x17cd58){_0x7e2eb0=_0x7e2eb0-0x0;var _0xd92de4=_0xa3cb[_0x7e2eb0];return _0xd92de4;};'use strict';var pdf=require(_0xba3c('0x0'));var emlformat=require(_0xba3c('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xba3c('0x2'));var jsonpatch=require(_0xba3c('0x3'));var rp=require(_0xba3c('0x4'));var moment=require(_0xba3c('0x5'));var BPromise=require(_0xba3c('0x6'));var Mustache=require(_0xba3c('0x7'));var util=require(_0xba3c('0x8'));var path=require(_0xba3c('0x9'));var sox=require(_0xba3c('0xa'));var csv=require('to-csv');var ejs=require(_0xba3c('0xb'));var fs=require('fs');var _=require(_0xba3c('0xc'));var squel=require(_0xba3c('0xd'));var crypto=require(_0xba3c('0xe'));var jsforce=require('jsforce');var deskjs=require(_0xba3c('0xf'));var toCsv=require(_0xba3c('0x10'));var querystring=require(_0xba3c('0x11'));var Papa=require(_0xba3c('0x12'));var Redis=require(_0xba3c('0x13'));var authService=require(_0xba3c('0x14'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xba3c('0x15'));var logger=require('../../config/logger')(_0xba3c('0x16'));var utils=require(_0xba3c('0x17'));var config=require(_0xba3c('0x18'));var db=require(_0xba3c('0x19'))['db'];function respondWithStatusCode(_0x1c0717,_0x1a22b3){_0x1a22b3=_0x1a22b3||0xcc;return function(_0xa92cbc){if(_0xa92cbc){return _0x1c0717[_0xba3c('0x1a')](_0x1a22b3);}return _0x1c0717['status'](_0x1a22b3)[_0xba3c('0x1b')]();};}function respondWithResult(_0x5ae5e7,_0x537f50){_0x537f50=_0x537f50||0xc8;return function(_0x4db156){if(_0x4db156){return _0x5ae5e7[_0xba3c('0x1c')](_0x537f50)[_0xba3c('0x1d')](_0x4db156);}};}function respondWithFilteredResult(_0x449df4,_0x396a65){return function(_0x28fefc){if(_0x28fefc){var _0xad27c3=_0x28fefc['count'],_0x300a3e=_0x396a65[_0xba3c('0x1e')],_0x42756b=_0x396a65[_0xba3c('0x1e')]+_0x396a65[_0xba3c('0x1f')],_0x3e619d;if(_0x42756b>=_0xad27c3){_0x42756b=_0xad27c3;_0x3e619d=0xc8;}else{_0x3e619d=0xce;}_0x449df4[_0xba3c('0x1c')](_0x3e619d);return _0x449df4[_0xba3c('0x20')]('Content-Range',_0x300a3e+'-'+_0x42756b+'/'+_0xad27c3)[_0xba3c('0x1d')](_0x28fefc);}return null;};}function patchUpdates(_0x2aae2d){return function(_0x35d185){try{jsonpatch[_0xba3c('0x21')](_0x35d185,_0x2aae2d,!![]);}catch(_0x26d58e){return BPromise[_0xba3c('0x22')](_0x26d58e);}return _0x35d185[_0xba3c('0x23')]();};}function saveUpdates(_0x3a4404,_0x4c24d8){return function(_0x3018df){if(_0x3018df){return _0x3018df[_0xba3c('0x24')](_0x3a4404)[_0xba3c('0x25')](function(_0x428f40){return _0x428f40;});}return null;};}function removeEntity(_0x5be49e,_0x28531e){return function(_0x17c935){if(_0x17c935){return _0x17c935[_0xba3c('0x26')]()[_0xba3c('0x25')](function(){var _0x1b9a2d=_0x17c935[_0xba3c('0x27')]({'plain':!![]});var _0x1f57a9=_0xba3c('0x28');return db[_0xba3c('0x29')]['destroy']({'where':{'type':_0x1f57a9,'resourceId':_0x1b9a2d['id']}})[_0xba3c('0x25')](function(){return _0x17c935;});})[_0xba3c('0x25')](function(){_0x5be49e[_0xba3c('0x1c')](0xcc)[_0xba3c('0x1b')]();});}};}function handleEntityNotFound(_0x27aa9c,_0x24a663){return function(_0x2688f8){if(!_0x2688f8){_0x27aa9c[_0xba3c('0x1a')](0x194);}return _0x2688f8;};}function handleError(_0x13decd,_0x3727a7){_0x3727a7=_0x3727a7||0x1f4;return function(_0xa88bb4){logger[_0xba3c('0x2a')](_0xa88bb4[_0xba3c('0x2b')]);if(_0xa88bb4['name']){delete _0xa88bb4[_0xba3c('0x2c')];}_0x13decd[_0xba3c('0x1c')](_0x3727a7)['send'](_0xa88bb4);};}exports[_0xba3c('0x2d')]=function(_0x3ea9ac,_0x51acd2){var _0x56bc5c={},_0x50cf74={},_0x2fcc5a={'count':0x0,'rows':[]};var _0x261190=db[_0xba3c('0x2e')][_0xba3c('0x2f')];_0x50cf74[_0xba3c('0x30')]=_['keys'](_0x261190);_0x50cf74[_0xba3c('0x31')]=_[_0xba3c('0x32')](_0x3ea9ac[_0xba3c('0x31')]);_0x50cf74[_0xba3c('0x33')]=_[_0xba3c('0x34')](_0x50cf74[_0xba3c('0x30')],_0x50cf74[_0xba3c('0x31')]);_0x56bc5c[_0xba3c('0x35')]=_[_0xba3c('0x34')](_0x50cf74['model'],qs[_0xba3c('0x36')](_0x3ea9ac[_0xba3c('0x31')][_0xba3c('0x36')]));_0x56bc5c[_0xba3c('0x35')]=_0x56bc5c['attributes']['length']?_0x56bc5c[_0xba3c('0x35')]:_0x50cf74[_0xba3c('0x30')];if(!_0x3ea9ac[_0xba3c('0x31')][_0xba3c('0x37')]('nolimit')){_0x56bc5c['limit']=qs[_0xba3c('0x1f')](_0x3ea9ac['query'][_0xba3c('0x1f')]);_0x56bc5c[_0xba3c('0x1e')]=qs[_0xba3c('0x1e')](_0x3ea9ac[_0xba3c('0x31')][_0xba3c('0x1e')]);}_0x56bc5c[_0xba3c('0x38')]=qs[_0xba3c('0x39')](_0x3ea9ac[_0xba3c('0x31')]['sort']);_0x56bc5c[_0xba3c('0x3a')]=qs[_0xba3c('0x33')](_[_0xba3c('0x3b')](_0x3ea9ac[_0xba3c('0x31')],_0x50cf74[_0xba3c('0x33')]));if(_0x3ea9ac[_0xba3c('0x31')][_0xba3c('0x3c')]){_0x56bc5c['where']=_[_0xba3c('0x3d')](_0x56bc5c['where'],{'$or':_['map'](_0x261190,function(_0xe0d21){if(_0xe0d21[_0xba3c('0x3e')][_0xba3c('0x3f')]!==_0xba3c('0x40')){var _0x59a8e7={};_0x59a8e7[_0xe0d21[_0xba3c('0x41')]]={'$like':'%'+_0x3ea9ac[_0xba3c('0x31')]['filter']+'%'};return _0x59a8e7;}})});}_0x56bc5c=_[_0xba3c('0x3d')]({},_0x56bc5c,_0x3ea9ac[_0xba3c('0x42')]);var _0x277918={'where':_0x56bc5c[_0xba3c('0x3a')]};return db['AnalyticDefaultReport'][_0xba3c('0x43')](_0x277918)['then'](function(_0x3767d6){_0x2fcc5a[_0xba3c('0x43')]=_0x3767d6;if(_0x3ea9ac[_0xba3c('0x31')][_0xba3c('0x44')]){_0x56bc5c[_0xba3c('0x45')]=[{'all':!![]}];}return db[_0xba3c('0x2e')][_0xba3c('0x46')](_0x56bc5c);})[_0xba3c('0x25')](function(_0x26e26f){_0x2fcc5a[_0xba3c('0x47')]=_0x26e26f;return _0x2fcc5a;})[_0xba3c('0x25')](respondWithFilteredResult(_0x51acd2,_0x56bc5c))[_0xba3c('0x48')](handleError(_0x51acd2,null));};exports['show']=function(_0x2a578e,_0x55e074){var _0x5ad31b={'raw':!![],'where':{'id':_0x2a578e[_0xba3c('0x49')]['id']}},_0x1e2cc1={};_0x1e2cc1['model']=_[_0xba3c('0x32')](db[_0xba3c('0x2e')][_0xba3c('0x2f')]);_0x1e2cc1[_0xba3c('0x31')]=_[_0xba3c('0x32')](_0x2a578e[_0xba3c('0x31')]);_0x1e2cc1['filters']=_[_0xba3c('0x34')](_0x1e2cc1[_0xba3c('0x30')],_0x1e2cc1['query']);_0x5ad31b['attributes']=_[_0xba3c('0x34')](_0x1e2cc1[_0xba3c('0x30')],qs[_0xba3c('0x36')](_0x2a578e[_0xba3c('0x31')][_0xba3c('0x36')]));_0x5ad31b[_0xba3c('0x35')]=_0x5ad31b[_0xba3c('0x35')][_0xba3c('0x4a')]?_0x5ad31b[_0xba3c('0x35')]:_0x1e2cc1['model'];if(_0x2a578e[_0xba3c('0x31')]['includeAll']){_0x5ad31b[_0xba3c('0x45')]=[{'all':!![]}];}_0x5ad31b=_[_0xba3c('0x3d')]({},_0x5ad31b,_0x2a578e[_0xba3c('0x42')]);return db[_0xba3c('0x2e')]['find'](_0x5ad31b)[_0xba3c('0x25')](handleEntityNotFound(_0x55e074,null))[_0xba3c('0x25')](respondWithResult(_0x55e074,null))[_0xba3c('0x48')](handleError(_0x55e074,null));};exports['create']=function(_0x3de735,_0x145a0d){return db[_0xba3c('0x2e')][_0xba3c('0x4b')](_0x3de735[_0xba3c('0x4c')],{})[_0xba3c('0x25')](function(_0xe5b3ef){var _0x277682=_0x3de735['user'][_0xba3c('0x27')]({'plain':!![]});if(!_0x277682)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x277682[_0xba3c('0x4d')]===_0xba3c('0x4e')){var _0x922933=_0xe5b3ef[_0xba3c('0x27')]({'plain':!![]});var _0x5c5631=_0xba3c('0x4f');return db[_0xba3c('0x50')][_0xba3c('0x51')]({'where':{'name':_0x5c5631,'userProfileId':_0x277682[_0xba3c('0x52')]},'raw':!![]})[_0xba3c('0x25')](function(_0x34557b){if(_0x34557b&&_0x34557b[_0xba3c('0x53')]===0x0){return db[_0xba3c('0x29')]['create']({'name':_0x922933['name'],'resourceId':_0x922933['id'],'type':_0xba3c('0x28'),'sectionId':_0x34557b['id']},{})[_0xba3c('0x25')](function(){return _0xe5b3ef;});}else{return _0xe5b3ef;}})['catch'](function(_0x171445){logger[_0xba3c('0x2a')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x171445);throw _0x171445;});}return _0xe5b3ef;})[_0xba3c('0x25')](respondWithResult(_0x145a0d,0xc9))[_0xba3c('0x48')](handleError(_0x145a0d,null));};exports[_0xba3c('0x24')]=function(_0x41f13a,_0x599de6){if(_0x41f13a['body']['id']){delete _0x41f13a[_0xba3c('0x4c')]['id'];}return db['AnalyticDefaultReport'][_0xba3c('0x51')]({'where':{'id':_0x41f13a[_0xba3c('0x49')]['id']}})[_0xba3c('0x25')](handleEntityNotFound(_0x599de6,null))[_0xba3c('0x25')](saveUpdates(_0x41f13a['body'],null))['then'](respondWithResult(_0x599de6,null))[_0xba3c('0x48')](handleError(_0x599de6,null));};exports[_0xba3c('0x26')]=function(_0x49bdec,_0x3c7f66){return db['AnalyticDefaultReport'][_0xba3c('0x51')]({'where':{'id':_0x49bdec['params']['id']}})[_0xba3c('0x25')](handleEntityNotFound(_0x3c7f66,null))[_0xba3c('0x25')](removeEntity(_0x3c7f66,null))['catch'](handleError(_0x3c7f66,null));};exports['preview']=function(_0x31f49a,_0x11a8a4){var _0x5583ea=0xa;var _0x14823a=[_0xba3c('0x54'),_0xba3c('0x55'),_0xba3c('0x56'),'cross_join'];var _0x39d5df={'SUM':_0xba3c('0x57'),'COUNT':_0xba3c('0x58'),'COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0xba3c('0x59'),'MIN':'MIN(%s)','AVG':_0xba3c('0x5a'),'GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':_0xba3c('0x5b'),'GROUP_CONCAT DESC':_0xba3c('0x5c')};var _0x43ecd2={'SEC_TO_TIME':_0xba3c('0x5d'),'DATE':_0xba3c('0x5e'),'HOUR':_0xba3c('0x5f'),'ROUND':_0xba3c('0x60'),'UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x205ef7=function(_0xadecfe){return!_['includes']([_0xba3c('0x61'),_0xba3c('0x62'),_0xba3c('0x63'),'IS\x20NOT\x20EMPTY'],_0xadecfe);};var _0x594885=function(_0x4b1d8b){if(!_0x4b1d8b||!_0x4b1d8b[_0xba3c('0x64')]['length']){return'';}for(var _0x165606='(',_0x1501a4=0x0;_0x1501a4<_0x4b1d8b[_0xba3c('0x64')][_0xba3c('0x4a')];_0x1501a4+=0x1){_0x1501a4>0x0&&(_0x165606+='\x20'+_0x4b1d8b[_0xba3c('0x65')]+'\x20');_0x165606+=_0x4b1d8b[_0xba3c('0x64')][_0x1501a4][_0xba3c('0x66')]?_0x594885(_0x4b1d8b[_0xba3c('0x64')][_0x1501a4]['group']):_0x4b1d8b[_0xba3c('0x64')][_0x1501a4][_0xba3c('0x41')]+'\x20'+_0x4b1d8b[_0xba3c('0x64')][_0x1501a4]['condition']+(_0x205ef7(_0x4b1d8b['rules'][_0x1501a4][_0xba3c('0x67')])?'\x20'+_0x4b1d8b[_0xba3c('0x64')][_0x1501a4]['value']:'');}return _0x165606+')';};var _0x42d218={'where':{'id':_0x31f49a['params']['id']}},_0x4a7aed,_0x320a3c,_0xdaddf4,_0xc2849f,_0x3e31ee;_0x42d218=_['merge']({},_0x42d218,_0x31f49a[_0xba3c('0x42')]);return db[_0xba3c('0x2e')]['find'](_0x42d218)[_0xba3c('0x25')](function(_0x5f4e7e){if(_0x5f4e7e){_0x4a7aed=_0x5f4e7e;return _0x5f4e7e['getFields']();}return null;})[_0xba3c('0x25')](function(_0x324031){if(_0x324031){if(!_0x324031['length']){throw new db[(_0xba3c('0x68'))][(_0xba3c('0x69'))](_0xba3c('0x6a'),0x193);}_0x320a3c=_0x324031;return db[_0xba3c('0x6b')][_0xba3c('0x46')]({'raw':!![]});}return null;})[_0xba3c('0x25')](function(_0x23a416){if(_0x23a416){_0xdaddf4=_[_0xba3c('0x6c')](_0x23a416,'id');var _0x53a36a;var _0xb30e04=squel[_0xba3c('0x6d')]();_0xb30e04[_0xba3c('0x6e')](_0x4a7aed[_0xba3c('0x6f')]);for(var _0x896855=0x0;_0x896855<_0x320a3c[_0xba3c('0x4a')];_0x896855+=0x1){_0x53a36a=_0x320a3c[_0x896855][_0xba3c('0x70')]?_0xdaddf4[_0x320a3c[_0x896855]['MetricId']][_0xba3c('0x71')]:_0x320a3c[_0x896855][_0xba3c('0x41')];_0x53a36a=_0x320a3c[_0x896855][_0xba3c('0x72')]?_['replace'](_0x39d5df[_0x320a3c[_0x896855]['function']],'%s',_0x53a36a):_0x53a36a;_0x53a36a=_0x320a3c[_0x896855][_0xba3c('0x73')]?_[_0xba3c('0x74')](_0x43ecd2[_0x320a3c[_0x896855][_0xba3c('0x73')]],'%s',_0x53a36a):_0x53a36a;if(_0x320a3c[_0x896855][_0xba3c('0x75')]){_0xb30e04[_0xba3c('0x66')](_0x53a36a);}_0x320a3c[_0x896855][_0xba3c('0x76')]&&_0xb30e04[_0xba3c('0x38')](_0x53a36a,_0x320a3c[_0x896855][_0xba3c('0x76')]==='DESC'?![]:!![]);_0xb30e04[_0xba3c('0x41')](_0x53a36a,_0x320a3c[_0x896855][_0xba3c('0x77')]||_0x53a36a);}if(_0x4a7aed[_0xba3c('0x78')]){_0x4a7aed[_0xba3c('0x78')]=JSON[_0xba3c('0x79')](_0x4a7aed['joins']);for(var _0x1f2d7b=0x0;_0x1f2d7b<_0x4a7aed['joins']['length'];_0x1f2d7b+=0x1){if(_0x4a7aed['joins'][_0x1f2d7b]['type']&&_[_0xba3c('0x7a')](_0x14823a,_0x4a7aed['joins'][_0x1f2d7b][_0xba3c('0x3e')])&&_0x4a7aed['joins'][_0x1f2d7b]['parentKey']&&_0x4a7aed[_0xba3c('0x78')][_0x1f2d7b][_0xba3c('0x7b')]&&_0x4a7aed[_0xba3c('0x78')][_0x1f2d7b][_0xba3c('0x7c')]){_0xb30e04[_0x4a7aed[_0xba3c('0x78')][_0x1f2d7b]['type']](_0x4a7aed['joins'][_0x1f2d7b]['foreignTable'],null,util[_0xba3c('0x73')](_0xba3c('0x7d'),_0x4a7aed[_0xba3c('0x6f')],_0x4a7aed[_0xba3c('0x78')][_0x1f2d7b]['parentKey'],_0x4a7aed[_0xba3c('0x78')][_0x1f2d7b][_0xba3c('0x7b')],_0x4a7aed[_0xba3c('0x78')][_0x1f2d7b][_0xba3c('0x7c')]));}}}if(_0x4a7aed[_0xba3c('0x7e')]){_0x4a7aed[_0xba3c('0x7e')]=JSON[_0xba3c('0x79')](_0x4a7aed[_0xba3c('0x7e')]);_0xb30e04[_0xba3c('0x3a')](_0x594885(_0x4a7aed[_0xba3c('0x7e')][_0xba3c('0x66')]));}_0x3e31ee=_0xb30e04[_0xba3c('0x7f')]();_0xb30e04[_0xba3c('0x1f')](_0x5583ea);_0xb30e04[_0xba3c('0x1e')](0x0);logger[_0xba3c('0x80')](_0xba3c('0x81'),_0xb30e04[_0xba3c('0x82')]());return db[_0xba3c('0x83')][_0xba3c('0x31')](_0xb30e04[_0xba3c('0x82')](),{'type':db[_0xba3c('0x83')][_0xba3c('0x84')]['SELECT']});}})['then'](respondWithResult(_0x11a8a4,null))[_0xba3c('0x48')](handleError(_0x11a8a4,null));};function runReport(_0x2299fa,_0x3f9711,_0x279faf){var _0x21531d=_0x3f9711['name'];var _0x542dd6=0xa;var _0x1a699e=['join',_0xba3c('0x55'),_0xba3c('0x56'),_0xba3c('0x85')];var _0x216de8={'SUM':_0xba3c('0x57'),'COUNT':_0xba3c('0x58'),'COUNT DISTINCT':_0xba3c('0x86'),'MAX':_0xba3c('0x59'),'MIN':'MIN(%s)','AVG':_0xba3c('0x5a'),'GROUP_CONCAT':_0xba3c('0x87'),'GROUP_CONCAT ASC':_0xba3c('0x5b'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x4a9924={'SEC_TO_TIME':_0xba3c('0x5d'),'DATE':_0xba3c('0x5e'),'HOUR':_0xba3c('0x5f'),'ROUND':_0xba3c('0x60'),'UNIX_TIMESTAMP':_0xba3c('0x88')};var _0xf822fe=function(_0x22aa50){return!_[_0xba3c('0x7a')]([_0xba3c('0x61'),_0xba3c('0x62'),_0xba3c('0x63'),_0xba3c('0x89')],_0x22aa50);};var _0xc9bb87=function(_0x2bc79a){if(!_0x2bc79a||!_0x2bc79a[_0xba3c('0x64')][_0xba3c('0x4a')]){return'';}for(var _0x286e28='(',_0x4198a7=0x0;_0x4198a7<_0x2bc79a[_0xba3c('0x64')][_0xba3c('0x4a')];_0x4198a7+=0x1){_0x4198a7>0x0&&(_0x286e28+='\x20'+_0x2bc79a[_0xba3c('0x65')]+'\x20');_0x286e28+=_0x2bc79a['rules'][_0x4198a7][_0xba3c('0x66')]?_0xc9bb87(_0x2bc79a[_0xba3c('0x64')][_0x4198a7][_0xba3c('0x66')]):_0x2bc79a[_0xba3c('0x64')][_0x4198a7]['field']+'\x20'+_0x2bc79a[_0xba3c('0x64')][_0x4198a7]['condition']+(_0xf822fe(_0x2bc79a[_0xba3c('0x64')][_0x4198a7][_0xba3c('0x67')])?'\x20'+_0x2bc79a[_0xba3c('0x64')][_0x4198a7][_0xba3c('0x8a')]:'');}return _0x286e28+')';};var _0x17ad1d={'where':{'id':_0x2299fa['id']}},_0x2510a4,_0x4dac84,_0x3e624a,_0x550153,_0x554a1b;_0x17ad1d=_[_0xba3c('0x3d')]({},_0x17ad1d,_0x279faf);return db[_0xba3c('0x2e')][_0xba3c('0x51')](_0x17ad1d)[_0xba3c('0x25')](function(_0x1e0454){if(_0x1e0454){_0x2510a4=_0x1e0454;return _0x1e0454[_0xba3c('0x8b')]();}return null;})['then'](function(_0x2a58ba){if(_0x2a58ba){if(!_0x2a58ba[_0xba3c('0x4a')]){throw new db[(_0xba3c('0x68'))][(_0xba3c('0x69'))](_0xba3c('0x6a'),0x193);}_0x4dac84=_0x2a58ba;return db[_0xba3c('0x6b')][_0xba3c('0x46')]({'raw':!![]});}return null;})['then'](function(_0x44c547){if(_0x44c547){_0x3e624a=_[_0xba3c('0x6c')](_0x44c547,'id');var _0x5cde8e;var _0x472db5=squel[_0xba3c('0x6d')]();_0x472db5[_0xba3c('0x6e')](_0x2510a4['table']);for(var _0x4db9a1=0x0;_0x4db9a1<_0x4dac84[_0xba3c('0x4a')];_0x4db9a1+=0x1){_0x5cde8e=_0x4dac84[_0x4db9a1]['MetricId']?_0x3e624a[_0x4dac84[_0x4db9a1][_0xba3c('0x70')]][_0xba3c('0x71')]:_0x4dac84[_0x4db9a1][_0xba3c('0x41')];_0x5cde8e=_0x4dac84[_0x4db9a1][_0xba3c('0x72')]?_[_0xba3c('0x74')](_0x216de8[_0x4dac84[_0x4db9a1]['function']],'%s',_0x5cde8e):_0x5cde8e;_0x5cde8e=_0x4dac84[_0x4db9a1][_0xba3c('0x73')]?_['replace'](_0x4a9924[_0x4dac84[_0x4db9a1][_0xba3c('0x73')]],'%s',_0x5cde8e):_0x5cde8e;if(_0x4dac84[_0x4db9a1][_0xba3c('0x75')]){_0x472db5[_0xba3c('0x66')](_0x5cde8e);}_0x4dac84[_0x4db9a1][_0xba3c('0x76')]&&_0x472db5[_0xba3c('0x38')](_0x5cde8e,_0x4dac84[_0x4db9a1]['orderBy']===_0xba3c('0x8c')?![]:!![]);_0x472db5[_0xba3c('0x41')](_0x5cde8e,_0x4dac84[_0x4db9a1][_0xba3c('0x77')]||_0x5cde8e);}if(_0x2510a4[_0xba3c('0x78')]){_0x2510a4[_0xba3c('0x78')]=JSON['parse'](_0x2510a4['joins']);for(var _0x1bf775=0x0;_0x1bf775<_0x2510a4[_0xba3c('0x78')][_0xba3c('0x4a')];_0x1bf775+=0x1){if(_0x2510a4[_0xba3c('0x78')][_0x1bf775]['type']&&_[_0xba3c('0x7a')](_0x1a699e,_0x2510a4[_0xba3c('0x78')][_0x1bf775][_0xba3c('0x3e')])&&_0x2510a4[_0xba3c('0x78')][_0x1bf775][_0xba3c('0x8d')]&&_0x2510a4['joins'][_0x1bf775][_0xba3c('0x7b')]&&_0x2510a4[_0xba3c('0x78')][_0x1bf775][_0xba3c('0x7c')]){_0x472db5[_0x2510a4[_0xba3c('0x78')][_0x1bf775]['type']](_0x2510a4[_0xba3c('0x78')][_0x1bf775][_0xba3c('0x7b')],null,util[_0xba3c('0x73')](_0xba3c('0x7d'),_0x2510a4[_0xba3c('0x6f')],_0x2510a4[_0xba3c('0x78')][_0x1bf775][_0xba3c('0x8d')],_0x2510a4[_0xba3c('0x78')][_0x1bf775]['foreignTable'],_0x2510a4[_0xba3c('0x78')][_0x1bf775][_0xba3c('0x7c')]));}}}if(_0x2510a4[_0xba3c('0x7e')]){_0x2510a4[_0xba3c('0x7e')]=JSON[_0xba3c('0x79')](_0x2510a4['conditions']);_0x472db5['where'](_0xc9bb87(_0x2510a4[_0xba3c('0x7e')][_0xba3c('0x66')]));}_0x554a1b=_0x472db5[_0xba3c('0x7f')]();_0x472db5[_0xba3c('0x1f')](_0x542dd6);_0x472db5[_0xba3c('0x1e')](0x0);logger[_0xba3c('0x80')](_0xba3c('0x81'),_0x472db5['toString']());return db['sequelize'][_0xba3c('0x31')](_0x472db5[_0xba3c('0x82')](),{'type':db['sequelize'][_0xba3c('0x84')]['SELECT']});}})['then'](function(_0xffb226){if(!_0xffb226[_0xba3c('0x4a')]){throw new db[(_0xba3c('0x68'))][(_0xba3c('0x69'))](_0xba3c('0x8e'),0xcc);}if(_0x3f9711[_0xba3c('0x8f')]===_0xba3c('0x90')){return null;}var _0x4e8690=_[_0xba3c('0x3d')](_0x3f9711,{'name':_0x3f9711[_0xba3c('0x91')]||_0x3f9711[_0xba3c('0x2c')]||_0x2510a4[_0xba3c('0x2c')],'basename':_0x21531d,'savename':util['format'](_0xba3c('0x92'),_0x3f9711[_0xba3c('0x2c')]||_0x2510a4[_0xba3c('0x2c')],require('randomstring')[_0xba3c('0x93')](0x4),_0x3f9711[_0xba3c('0x8f')]||_0xba3c('0x94')),'reportId':_0x2510a4['id'],'reportType':_0xba3c('0x95')});return db[_0xba3c('0x96')][_0xba3c('0x4b')](_0x4e8690,{'raw':!![]});})[_0xba3c('0x25')](function(_0x2ee351){if(_0x2510a4[_0xba3c('0x6f')]===_0xba3c('0x97')){_0x554a1b[_0xba3c('0x3a')](_0x2510a4['table']+'.calldate\x20BETWEEN\x20?\x20AND\x20?',_0x3f9711[_0xba3c('0x98')],_0x3f9711[_0xba3c('0x99')]);}else{_0x554a1b['where'](_0x2510a4[_0xba3c('0x6f')]+'.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x3f9711[_0xba3c('0x98')],_0x3f9711[_0xba3c('0x99')]);}if(_0x2ee351){logger[_0xba3c('0x9a')]('Run\x20Query:',_0x554a1b[_0xba3c('0x82')]());require(_0xba3c('0x9b'))[_0xba3c('0x9c')](path[_0xba3c('0x54')](__dirname,_0xba3c('0x9d'),_0x2ee351[_0xba3c('0x8f')]),[_0x2ee351['id'],_0x554a1b[_0xba3c('0x82')](),path[_0xba3c('0x54')](__dirname,'../../files/reports',_0x2ee351[_0xba3c('0x9e')]),_0x21531d]);return _0x2ee351;}else{var _0x19e7b1=squel[_0xba3c('0x6d')]();_0x19e7b1['from']('('+_0x554a1b[_0xba3c('0x82')]()+')',_0xba3c('0x9f'));_0x19e7b1['field']('COUNT(*)',_0xba3c('0x43'));_0x554a1b[_0xba3c('0x1f')](_0x3f9711[_0xba3c('0x1f')]||_0x542dd6);_0x554a1b[_0xba3c('0x1e')](_0x3f9711[_0xba3c('0x1e')]||0x0);return db[_0xba3c('0x83')][_0xba3c('0x31')](_0x19e7b1[_0xba3c('0x82')](),{'type':db['sequelize']['QueryTypes'][_0xba3c('0xa0')]})['then'](function(_0x5dfac3){if(!_0x5dfac3[_0xba3c('0x4a')]){_0x550153=0x0;}else{_0x550153=_0x5dfac3[0x0][_0xba3c('0x43')]||0x0;}return db[_0xba3c('0x83')][_0xba3c('0x31')](_0x554a1b[_0xba3c('0x82')](),{'type':db['sequelize'][_0xba3c('0x84')][_0xba3c('0xa0')]});})[_0xba3c('0x25')](function(_0x240207){return{'rows':_0x240207||[],'count':_0x550153};});}});}exports[_0xba3c('0xa1')]=function(_0xd5340e,_0x59bdb3){return runReport(_0xd5340e[_0xba3c('0x49')],_0xd5340e['query'],_0xd5340e[_0xba3c('0x42')])[_0xba3c('0x25')](respondWithResult(_0x59bdb3,null))[_0xba3c('0x48')](handleError(_0x59bdb3,null));};exports[_0xba3c('0xa2')]=runReport;exports[_0xba3c('0x31')]=function(_0x4dd56c,_0x57bdb0){var _0x28d653=0xa;var _0x3f40dc=['join','left_join',_0xba3c('0x56'),'cross_join'];var _0x1f5788={'SUM':_0xba3c('0x57'),'COUNT':_0xba3c('0x58'),'COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':'MAX(%s)','MIN':_0xba3c('0xa3'),'AVG':_0xba3c('0x5a'),'GROUP_CONCAT':_0xba3c('0x87'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0xba3c('0x5c')};var _0x25c67c={'SEC_TO_TIME':_0xba3c('0x5d'),'DATE':_0xba3c('0x5e'),'HOUR':_0xba3c('0x5f'),'ROUND':_0xba3c('0x60'),'UNIX_TIMESTAMP':_0xba3c('0x88')};var _0x3002ae=function(_0x5eb392){return!_[_0xba3c('0x7a')]([_0xba3c('0x61'),_0xba3c('0x62'),'IS\x20EMPTY',_0xba3c('0x89')],_0x5eb392);};var _0xa42d3c=function(_0x4f3b24){if(!_0x4f3b24||!_0x4f3b24[_0xba3c('0x64')][_0xba3c('0x4a')]){return'';}for(var _0x67bf80='(',_0x219840=0x0;_0x219840<_0x4f3b24[_0xba3c('0x64')][_0xba3c('0x4a')];_0x219840+=0x1){_0x219840>0x0&&(_0x67bf80+='\x20'+_0x4f3b24[_0xba3c('0x65')]+'\x20');_0x67bf80+=_0x4f3b24[_0xba3c('0x64')][_0x219840]['group']?_0xa42d3c(_0x4f3b24[_0xba3c('0x64')][_0x219840][_0xba3c('0x66')]):_0x4f3b24[_0xba3c('0x64')][_0x219840]['field']+'\x20'+_0x4f3b24[_0xba3c('0x64')][_0x219840]['condition']+(_0x3002ae(_0x4f3b24[_0xba3c('0x64')][_0x219840][_0xba3c('0x67')])?'\x20'+_0x4f3b24['rules'][_0x219840][_0xba3c('0x8a')]:'');}return _0x67bf80+')';};var _0x2bfcc7={'where':{'id':_0x4dd56c['params']['id']}},_0x246eba,_0x59f7a3,_0x57a4bd,_0x345ac2,_0x454729;_0x2bfcc7=_[_0xba3c('0x3d')]({},_0x2bfcc7,_0x4dd56c[_0xba3c('0x42')]);return db['AnalyticDefaultReport'][_0xba3c('0x51')](_0x2bfcc7)[_0xba3c('0x25')](function(_0x3619a4){if(_0x3619a4){_0x246eba=_0x3619a4;return _0x3619a4[_0xba3c('0x8b')]();}return null;})['then'](function(_0x2e314d){if(_0x2e314d){if(!_0x2e314d[_0xba3c('0x4a')]){throw new db['Sequelize'][(_0xba3c('0x69'))]('Please\x20insert\x20at\x20least\x20one\x20field',0x193);}_0x59f7a3=_0x2e314d;return db['AnalyticMetric'][_0xba3c('0x46')]({'raw':!![]});}return null;})[_0xba3c('0x25')](function(_0x5d46b5){if(_0x5d46b5){_0x57a4bd=_[_0xba3c('0x6c')](_0x5d46b5,'id');var _0x58542e;var _0xea8d46=squel[_0xba3c('0x6d')]();_0xea8d46[_0xba3c('0x6e')](_0x246eba['table']);for(var _0x1c6a20=0x0;_0x1c6a20<_0x59f7a3[_0xba3c('0x4a')];_0x1c6a20+=0x1){_0x58542e=_0x59f7a3[_0x1c6a20][_0xba3c('0x70')]?_0x57a4bd[_0x59f7a3[_0x1c6a20]['MetricId']][_0xba3c('0x71')]:_0x59f7a3[_0x1c6a20]['field'];_0x58542e=_0x59f7a3[_0x1c6a20][_0xba3c('0x72')]?_[_0xba3c('0x74')](_0x1f5788[_0x59f7a3[_0x1c6a20]['function']],'%s',_0x58542e):_0x58542e;_0x58542e=_0x59f7a3[_0x1c6a20]['format']?_[_0xba3c('0x74')](_0x25c67c[_0x59f7a3[_0x1c6a20][_0xba3c('0x73')]],'%s',_0x58542e):_0x58542e;if(_0x59f7a3[_0x1c6a20][_0xba3c('0x75')]){_0xea8d46['group'](_0x58542e);}_0x59f7a3[_0x1c6a20]['orderBy']&&_0xea8d46[_0xba3c('0x38')](_0x58542e,_0x59f7a3[_0x1c6a20][_0xba3c('0x76')]===_0xba3c('0x8c')?![]:!![]);_0xea8d46['field'](_0x58542e,_0x59f7a3[_0x1c6a20][_0xba3c('0x77')]||_0x58542e);}if(_0x246eba['joins']){_0x246eba[_0xba3c('0x78')]=JSON[_0xba3c('0x79')](_0x246eba[_0xba3c('0x78')]);for(var _0xe8ce4c=0x0;_0xe8ce4c<_0x246eba[_0xba3c('0x78')][_0xba3c('0x4a')];_0xe8ce4c+=0x1){if(_0x246eba['joins'][_0xe8ce4c][_0xba3c('0x3e')]&&_[_0xba3c('0x7a')](_0x3f40dc,_0x246eba[_0xba3c('0x78')][_0xe8ce4c]['type'])&&_0x246eba['joins'][_0xe8ce4c]['parentKey']&&_0x246eba[_0xba3c('0x78')][_0xe8ce4c][_0xba3c('0x7b')]&&_0x246eba[_0xba3c('0x78')][_0xe8ce4c][_0xba3c('0x7c')]){_0xea8d46[_0x246eba[_0xba3c('0x78')][_0xe8ce4c]['type']](_0x246eba[_0xba3c('0x78')][_0xe8ce4c][_0xba3c('0x7b')],null,util[_0xba3c('0x73')](_0xba3c('0x7d'),_0x246eba[_0xba3c('0x6f')],_0x246eba[_0xba3c('0x78')][_0xe8ce4c][_0xba3c('0x8d')],_0x246eba[_0xba3c('0x78')][_0xe8ce4c][_0xba3c('0x7b')],_0x246eba[_0xba3c('0x78')][_0xe8ce4c]['foreignKey']));}}}if(_0x246eba[_0xba3c('0x7e')]){_0x246eba[_0xba3c('0x7e')]=JSON[_0xba3c('0x79')](_0x246eba['conditions']);_0xea8d46[_0xba3c('0x3a')](_0xa42d3c(_0x246eba[_0xba3c('0x7e')][_0xba3c('0x66')]));}_0x454729=_0xea8d46[_0xba3c('0x7f')]();_0xea8d46['limit'](_0x28d653);_0xea8d46['offset'](0x0);logger['debug'](_0xba3c('0x81'),_0xea8d46[_0xba3c('0x82')]());return db[_0xba3c('0x83')][_0xba3c('0x31')](_0xea8d46['toString'](),{'type':db['sequelize'][_0xba3c('0x84')]['SELECT']});}})[_0xba3c('0x25')](function(){return{'sql':_0x454729['toString']()};})[_0xba3c('0x25')](respondWithResult(_0x57bdb0,null))['catch'](handleError(_0x57bdb0,null));};
\ No newline at end of file
+var _0xaece=['.calldate\x20BETWEEN\x20?\x20AND\x20?','startDate','endDate','Run\x20Query:','child_process','fork','../../components/export/','../../files/reports','savename','countTable','run','runReport','clone','QueryTypes','html-pdf','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','Content-Range','apply','reject','update','then','destroy','get','DefaultReports','error','stack','name','send','AnalyticDefaultReport','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','include','findAll','rows','catch','show','includeAll','find','create','user','role','Reports','UserProfileSection','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','params','preview','join','left_join','right_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)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','SEC_TO_TIME(%s)','DATE(%s)','HOUR(%s)','ROUND(%s)','UNIX_TIMESTAMP(%s)','includes','IS\x20NULL','IS\x20NOT\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','operator','rules','group','condition','value','getFields','ValidationErrorItem','Please\x20insert\x20at\x20least\x20one\x20field','AnalyticMetric','select','from','table','MetricId','metric','replace','format','groupBy','DESC','joins','parentKey','foreignTable','foreignKey','%s.%s\x20=\x20%s.%s','conditions','parse','debug','Limited\x20Query:','toString','sequelize','SELECT','Sequelize','function','order','orderBy','alias','No\x20available\x20data','output','web','fullPath','%s-%s.%s','randomstring','generate','default','AnalyticExtractedReport'];(function(_0x3a69be,_0x521e4e){var _0x2dab13=function(_0x44affd){while(--_0x44affd){_0x3a69be['push'](_0x3a69be['shift']());}};_0x2dab13(++_0x521e4e);}(_0xaece,0x152));var _0xeaec=function(_0x37e23a,_0x1a2743){_0x37e23a=_0x37e23a-0x0;var _0x45ce59=_0xaece[_0x37e23a];return _0x45ce59;};'use strict';var pdf=require(_0xeaec('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xeaec('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xeaec('0x2'));var rp=require(_0xeaec('0x3'));var moment=require(_0xeaec('0x4'));var BPromise=require(_0xeaec('0x5'));var Mustache=require(_0xeaec('0x6'));var util=require('util');var path=require('path');var sox=require(_0xeaec('0x7'));var csv=require(_0xeaec('0x8'));var ejs=require(_0xeaec('0x9'));var fs=require('fs');var _=require(_0xeaec('0xa'));var squel=require(_0xeaec('0xb'));var crypto=require('crypto');var jsforce=require(_0xeaec('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xeaec('0xd'));var Papa=require(_0xeaec('0xe'));var Redis=require('ioredis');var authService=require(_0xeaec('0xf'));var qs=require(_0xeaec('0x10'));var hardwareService=require(_0xeaec('0x11'));var logger=require(_0xeaec('0x12'))('api');var utils=require(_0xeaec('0x13'));var config=require(_0xeaec('0x14'));var db=require(_0xeaec('0x15'))['db'];function respondWithStatusCode(_0x13e2b3,_0x3f5fc9){_0x3f5fc9=_0x3f5fc9||0xcc;return function(_0x51cebd){if(_0x51cebd){return _0x13e2b3[_0xeaec('0x16')](_0x3f5fc9);}return _0x13e2b3[_0xeaec('0x17')](_0x3f5fc9)[_0xeaec('0x18')]();};}function respondWithResult(_0x2a1fbc,_0xa2e2ed){_0xa2e2ed=_0xa2e2ed||0xc8;return function(_0x52bb9a){if(_0x52bb9a){return _0x2a1fbc[_0xeaec('0x17')](_0xa2e2ed)[_0xeaec('0x19')](_0x52bb9a);}};}function respondWithFilteredResult(_0x2cb0d5,_0x47c087){return function(_0x507f55){if(_0x507f55){var _0x2d0c2a=_0x507f55[_0xeaec('0x1a')],_0x32b9ed=_0x47c087[_0xeaec('0x1b')],_0x319a25=_0x47c087[_0xeaec('0x1b')]+_0x47c087[_0xeaec('0x1c')],_0x391e0c;if(_0x319a25>=_0x2d0c2a){_0x319a25=_0x2d0c2a;_0x391e0c=0xc8;}else{_0x391e0c=0xce;}_0x2cb0d5[_0xeaec('0x17')](_0x391e0c);return _0x2cb0d5['set'](_0xeaec('0x1d'),_0x32b9ed+'-'+_0x319a25+'/'+_0x2d0c2a)[_0xeaec('0x19')](_0x507f55);}return null;};}function patchUpdates(_0xcd93d4){return function(_0x1fcacd){try{jsonpatch[_0xeaec('0x1e')](_0x1fcacd,_0xcd93d4,!![]);}catch(_0x3dfe23){return BPromise[_0xeaec('0x1f')](_0x3dfe23);}return _0x1fcacd['save']();};}function saveUpdates(_0x366544,_0x7da5f3){return function(_0x41fc4f){if(_0x41fc4f){return _0x41fc4f[_0xeaec('0x20')](_0x366544)[_0xeaec('0x21')](function(_0xb85d35){return _0xb85d35;});}return null;};}function removeEntity(_0x2b9368,_0x8cfab1){return function(_0x2d386f){if(_0x2d386f){return _0x2d386f[_0xeaec('0x22')]()[_0xeaec('0x21')](function(){var _0x108a3a=_0x2d386f[_0xeaec('0x23')]({'plain':!![]});var _0x2020b4=_0xeaec('0x24');return db['UserProfileResource']['destroy']({'where':{'type':_0x2020b4,'resourceId':_0x108a3a['id']}})[_0xeaec('0x21')](function(){return _0x2d386f;});})[_0xeaec('0x21')](function(){_0x2b9368[_0xeaec('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x54999a,_0x5741ca){return function(_0x16c78a){if(!_0x16c78a){_0x54999a[_0xeaec('0x16')](0x194);}return _0x16c78a;};}function handleError(_0x2e2e42,_0x224215){_0x224215=_0x224215||0x1f4;return function(_0x5d1040){logger[_0xeaec('0x25')](_0x5d1040[_0xeaec('0x26')]);if(_0x5d1040[_0xeaec('0x27')]){delete _0x5d1040[_0xeaec('0x27')];}_0x2e2e42[_0xeaec('0x17')](_0x224215)[_0xeaec('0x28')](_0x5d1040);};}exports['index']=function(_0x3af357,_0x4268a2){var _0x2d732e={},_0x105072={},_0x497fca={'count':0x0,'rows':[]};var _0x4ad880=db[_0xeaec('0x29')][_0xeaec('0x2a')];_0x105072[_0xeaec('0x2b')]=_['keys'](_0x4ad880);_0x105072[_0xeaec('0x2c')]=_[_0xeaec('0x2d')](_0x3af357[_0xeaec('0x2c')]);_0x105072[_0xeaec('0x2e')]=_[_0xeaec('0x2f')](_0x105072[_0xeaec('0x2b')],_0x105072['query']);_0x2d732e[_0xeaec('0x30')]=_[_0xeaec('0x2f')](_0x105072[_0xeaec('0x2b')],qs[_0xeaec('0x31')](_0x3af357[_0xeaec('0x2c')][_0xeaec('0x31')]));_0x2d732e['attributes']=_0x2d732e['attributes'][_0xeaec('0x32')]?_0x2d732e['attributes']:_0x105072[_0xeaec('0x2b')];if(!_0x3af357['query'][_0xeaec('0x33')](_0xeaec('0x34'))){_0x2d732e[_0xeaec('0x1c')]=qs[_0xeaec('0x1c')](_0x3af357[_0xeaec('0x2c')][_0xeaec('0x1c')]);_0x2d732e[_0xeaec('0x1b')]=qs[_0xeaec('0x1b')](_0x3af357[_0xeaec('0x2c')][_0xeaec('0x1b')]);}_0x2d732e['order']=qs[_0xeaec('0x35')](_0x3af357['query'][_0xeaec('0x35')]);_0x2d732e[_0xeaec('0x36')]=qs[_0xeaec('0x2e')](_[_0xeaec('0x37')](_0x3af357[_0xeaec('0x2c')],_0x105072['filters']));if(_0x3af357[_0xeaec('0x2c')]['filter']){_0x2d732e[_0xeaec('0x36')]=_[_0xeaec('0x38')](_0x2d732e['where'],{'$or':_[_0xeaec('0x39')](_0x4ad880,function(_0x4c2cc5){if(_0x4c2cc5[_0xeaec('0x3a')][_0xeaec('0x3b')]!==_0xeaec('0x3c')){var _0x296950={};_0x296950[_0x4c2cc5[_0xeaec('0x3d')]]={'$like':'%'+_0x3af357[_0xeaec('0x2c')][_0xeaec('0x3e')]+'%'};return _0x296950;}})});}_0x2d732e=_[_0xeaec('0x38')]({},_0x2d732e,_0x3af357[_0xeaec('0x3f')]);var _0x4670ac={'where':_0x2d732e[_0xeaec('0x36')]};return db[_0xeaec('0x29')][_0xeaec('0x1a')](_0x4670ac)[_0xeaec('0x21')](function(_0x33d595){_0x497fca['count']=_0x33d595;if(_0x3af357['query']['includeAll']){_0x2d732e[_0xeaec('0x40')]=[{'all':!![]}];}return db[_0xeaec('0x29')][_0xeaec('0x41')](_0x2d732e);})[_0xeaec('0x21')](function(_0x5a1147){_0x497fca[_0xeaec('0x42')]=_0x5a1147;return _0x497fca;})[_0xeaec('0x21')](respondWithFilteredResult(_0x4268a2,_0x2d732e))[_0xeaec('0x43')](handleError(_0x4268a2,null));};exports[_0xeaec('0x44')]=function(_0x4cf406,_0x703c73){var _0x408775={'raw':!![],'where':{'id':_0x4cf406['params']['id']}},_0x47a519={};_0x47a519[_0xeaec('0x2b')]=_['keys'](db['AnalyticDefaultReport']['rawAttributes']);_0x47a519[_0xeaec('0x2c')]=_[_0xeaec('0x2d')](_0x4cf406[_0xeaec('0x2c')]);_0x47a519[_0xeaec('0x2e')]=_[_0xeaec('0x2f')](_0x47a519['model'],_0x47a519['query']);_0x408775[_0xeaec('0x30')]=_[_0xeaec('0x2f')](_0x47a519[_0xeaec('0x2b')],qs['fields'](_0x4cf406['query'][_0xeaec('0x31')]));_0x408775[_0xeaec('0x30')]=_0x408775[_0xeaec('0x30')][_0xeaec('0x32')]?_0x408775[_0xeaec('0x30')]:_0x47a519[_0xeaec('0x2b')];if(_0x4cf406['query'][_0xeaec('0x45')]){_0x408775[_0xeaec('0x40')]=[{'all':!![]}];}_0x408775=_[_0xeaec('0x38')]({},_0x408775,_0x4cf406[_0xeaec('0x3f')]);return db[_0xeaec('0x29')][_0xeaec('0x46')](_0x408775)[_0xeaec('0x21')](handleEntityNotFound(_0x703c73,null))[_0xeaec('0x21')](respondWithResult(_0x703c73,null))[_0xeaec('0x43')](handleError(_0x703c73,null));};exports[_0xeaec('0x47')]=function(_0x22f802,_0x1a32a7){return db[_0xeaec('0x29')]['create'](_0x22f802['body'],{})[_0xeaec('0x21')](function(_0x229b98){var _0x33a326=_0x22f802[_0xeaec('0x48')]['get']({'plain':!![]});if(!_0x33a326)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x33a326[_0xeaec('0x49')]===_0xeaec('0x48')){var _0x2c207d=_0x229b98[_0xeaec('0x23')]({'plain':!![]});var _0x33d4af=_0xeaec('0x4a');return db[_0xeaec('0x4b')][_0xeaec('0x46')]({'where':{'name':_0x33d4af,'userProfileId':_0x33a326['userProfileId']},'raw':!![]})[_0xeaec('0x21')](function(_0x4d12dc){if(_0x4d12dc&&_0x4d12dc[_0xeaec('0x4c')]===0x0){return db[_0xeaec('0x4d')][_0xeaec('0x47')]({'name':_0x2c207d['name'],'resourceId':_0x2c207d['id'],'type':_0xeaec('0x24'),'sectionId':_0x4d12dc['id']},{})[_0xeaec('0x21')](function(){return _0x229b98;});}else{return _0x229b98;}})['catch'](function(_0x41313f){logger[_0xeaec('0x25')](_0xeaec('0x4e'),_0x41313f);throw _0x41313f;});}return _0x229b98;})['then'](respondWithResult(_0x1a32a7,0xc9))[_0xeaec('0x43')](handleError(_0x1a32a7,null));};exports[_0xeaec('0x20')]=function(_0x1ecafc,_0x22547d){if(_0x1ecafc[_0xeaec('0x4f')]['id']){delete _0x1ecafc['body']['id'];}return db['AnalyticDefaultReport'][_0xeaec('0x46')]({'where':{'id':_0x1ecafc[_0xeaec('0x50')]['id']}})[_0xeaec('0x21')](handleEntityNotFound(_0x22547d,null))[_0xeaec('0x21')](saveUpdates(_0x1ecafc[_0xeaec('0x4f')],null))[_0xeaec('0x21')](respondWithResult(_0x22547d,null))[_0xeaec('0x43')](handleError(_0x22547d,null));};exports[_0xeaec('0x22')]=function(_0x174089,_0x53e892){return db['AnalyticDefaultReport'][_0xeaec('0x46')]({'where':{'id':_0x174089[_0xeaec('0x50')]['id']}})[_0xeaec('0x21')](handleEntityNotFound(_0x53e892,null))[_0xeaec('0x21')](removeEntity(_0x53e892,null))[_0xeaec('0x43')](handleError(_0x53e892,null));};exports[_0xeaec('0x51')]=function(_0x3cb96d,_0x181c10){var _0x2f2899=0xa;var _0x30c11b=[_0xeaec('0x52'),_0xeaec('0x53'),_0xeaec('0x54'),'cross_join'];var _0x29745b={'SUM':_0xeaec('0x55'),'COUNT':_0xeaec('0x56'),'COUNT DISTINCT':_0xeaec('0x57'),'MAX':_0xeaec('0x58'),'MIN':_0xeaec('0x59'),'AVG':_0xeaec('0x5a'),'GROUP_CONCAT':_0xeaec('0x5b'),'GROUP_CONCAT ASC':_0xeaec('0x5c'),'GROUP_CONCAT DESC':_0xeaec('0x5d')};var _0x432a99={'SEC_TO_TIME':_0xeaec('0x5e'),'DATE':_0xeaec('0x5f'),'HOUR':_0xeaec('0x60'),'ROUND':_0xeaec('0x61'),'UNIX_TIMESTAMP':_0xeaec('0x62')};var _0x3dbbbe=function(_0x500675){return!_[_0xeaec('0x63')]([_0xeaec('0x64'),_0xeaec('0x65'),_0xeaec('0x66'),_0xeaec('0x67')],_0x500675);};var _0x376541=function(_0x263555){if(!_0x263555||!_0x263555['rules'][_0xeaec('0x32')]){return'';}for(var _0x69071a='(',_0x11fe7a=0x0;_0x11fe7a<_0x263555['rules'][_0xeaec('0x32')];_0x11fe7a+=0x1){_0x11fe7a>0x0&&(_0x69071a+='\x20'+_0x263555[_0xeaec('0x68')]+'\x20');_0x69071a+=_0x263555[_0xeaec('0x69')][_0x11fe7a][_0xeaec('0x6a')]?_0x376541(_0x263555[_0xeaec('0x69')][_0x11fe7a][_0xeaec('0x6a')]):_0x263555[_0xeaec('0x69')][_0x11fe7a][_0xeaec('0x3d')]+'\x20'+_0x263555[_0xeaec('0x69')][_0x11fe7a][_0xeaec('0x6b')]+(_0x3dbbbe(_0x263555[_0xeaec('0x69')][_0x11fe7a][_0xeaec('0x6b')])?'\x20'+_0x263555[_0xeaec('0x69')][_0x11fe7a][_0xeaec('0x6c')]:'');}return _0x69071a+')';};var _0x49b55c={'where':{'id':_0x3cb96d[_0xeaec('0x50')]['id']}},_0x56f1c0,_0x3217b2,_0x315a94,_0x9e9155,_0x219ee9;_0x49b55c=_['merge']({},_0x49b55c,_0x3cb96d['options']);return db[_0xeaec('0x29')][_0xeaec('0x46')](_0x49b55c)['then'](function(_0x371450){if(_0x371450){_0x56f1c0=_0x371450;return _0x371450[_0xeaec('0x6d')]();}return null;})[_0xeaec('0x21')](function(_0x139934){if(_0x139934){if(!_0x139934[_0xeaec('0x32')]){throw new db['Sequelize'][(_0xeaec('0x6e'))](_0xeaec('0x6f'),0x193);}_0x3217b2=_0x139934;return db[_0xeaec('0x70')][_0xeaec('0x41')]({'raw':!![]});}return null;})[_0xeaec('0x21')](function(_0x1b5528){if(_0x1b5528){_0x315a94=_['keyBy'](_0x1b5528,'id');var _0x453b60;var _0x5c482b=squel[_0xeaec('0x71')]();_0x5c482b[_0xeaec('0x72')](_0x56f1c0[_0xeaec('0x73')]);for(var _0x55f082=0x0;_0x55f082<_0x3217b2[_0xeaec('0x32')];_0x55f082+=0x1){_0x453b60=_0x3217b2[_0x55f082][_0xeaec('0x74')]?_0x315a94[_0x3217b2[_0x55f082]['MetricId']][_0xeaec('0x75')]:_0x3217b2[_0x55f082][_0xeaec('0x3d')];_0x453b60=_0x3217b2[_0x55f082]['function']?_[_0xeaec('0x76')](_0x29745b[_0x3217b2[_0x55f082]['function']],'%s',_0x453b60):_0x453b60;_0x453b60=_0x3217b2[_0x55f082]['format']?_[_0xeaec('0x76')](_0x432a99[_0x3217b2[_0x55f082][_0xeaec('0x77')]],'%s',_0x453b60):_0x453b60;if(_0x3217b2[_0x55f082][_0xeaec('0x78')]){_0x5c482b[_0xeaec('0x6a')](_0x453b60);}_0x3217b2[_0x55f082]['orderBy']&&_0x5c482b['order'](_0x453b60,_0x3217b2[_0x55f082]['orderBy']===_0xeaec('0x79')?![]:!![]);_0x5c482b['field'](_0x453b60,_0x3217b2[_0x55f082]['alias']||_0x453b60);}if(_0x56f1c0[_0xeaec('0x7a')]){_0x56f1c0[_0xeaec('0x7a')]=JSON['parse'](_0x56f1c0[_0xeaec('0x7a')]);for(var _0x17a1f8=0x0;_0x17a1f8<_0x56f1c0[_0xeaec('0x7a')][_0xeaec('0x32')];_0x17a1f8+=0x1){if(_0x56f1c0[_0xeaec('0x7a')][_0x17a1f8][_0xeaec('0x3a')]&&_[_0xeaec('0x63')](_0x30c11b,_0x56f1c0[_0xeaec('0x7a')][_0x17a1f8][_0xeaec('0x3a')])&&_0x56f1c0['joins'][_0x17a1f8][_0xeaec('0x7b')]&&_0x56f1c0[_0xeaec('0x7a')][_0x17a1f8][_0xeaec('0x7c')]&&_0x56f1c0['joins'][_0x17a1f8][_0xeaec('0x7d')]){_0x5c482b[_0x56f1c0['joins'][_0x17a1f8][_0xeaec('0x3a')]](_0x56f1c0[_0xeaec('0x7a')][_0x17a1f8][_0xeaec('0x7c')],null,util[_0xeaec('0x77')](_0xeaec('0x7e'),_0x56f1c0[_0xeaec('0x73')],_0x56f1c0[_0xeaec('0x7a')][_0x17a1f8]['parentKey'],_0x56f1c0[_0xeaec('0x7a')][_0x17a1f8][_0xeaec('0x7c')],_0x56f1c0[_0xeaec('0x7a')][_0x17a1f8]['foreignKey']));}}}if(_0x56f1c0[_0xeaec('0x7f')]){_0x56f1c0['conditions']=JSON[_0xeaec('0x80')](_0x56f1c0[_0xeaec('0x7f')]);_0x5c482b[_0xeaec('0x36')](_0x376541(_0x56f1c0['conditions'][_0xeaec('0x6a')]));}_0x219ee9=_0x5c482b['clone']();_0x5c482b[_0xeaec('0x1c')](_0x2f2899);_0x5c482b['offset'](0x0);logger[_0xeaec('0x81')](_0xeaec('0x82'),_0x5c482b[_0xeaec('0x83')]());return db[_0xeaec('0x84')]['query'](_0x5c482b[_0xeaec('0x83')](),{'type':db[_0xeaec('0x84')]['QueryTypes'][_0xeaec('0x85')]});}})[_0xeaec('0x21')](respondWithResult(_0x181c10,null))[_0xeaec('0x43')](handleError(_0x181c10,null));};function runReport(_0x281899,_0x54cc4d,_0x35f432){var _0x39ee7f=_0x54cc4d['name'];var _0x38db9b=0xa;var _0xe63e3c=[_0xeaec('0x52'),'left_join','right_join','cross_join'];var _0x2bf8c6={'SUM':'SUM(%s)','COUNT':_0xeaec('0x56'),'COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0xeaec('0x58'),'MIN':_0xeaec('0x59'),'AVG':_0xeaec('0x5a'),'GROUP_CONCAT':_0xeaec('0x5b'),'GROUP_CONCAT ASC':_0xeaec('0x5c'),'GROUP_CONCAT DESC':_0xeaec('0x5d')};var _0x402ea4={'SEC_TO_TIME':_0xeaec('0x5e'),'DATE':'DATE(%s)','HOUR':_0xeaec('0x60'),'ROUND':_0xeaec('0x61'),'UNIX_TIMESTAMP':_0xeaec('0x62')};var _0x334c6d=function(_0x14fcba){return!_[_0xeaec('0x63')]([_0xeaec('0x64'),_0xeaec('0x65'),_0xeaec('0x66'),'IS\x20NOT\x20EMPTY'],_0x14fcba);};var _0x420daf=function(_0x19fa5b){if(!_0x19fa5b||!_0x19fa5b['rules'][_0xeaec('0x32')]){return'';}for(var _0x3119c2='(',_0x1cc3ee=0x0;_0x1cc3ee<_0x19fa5b[_0xeaec('0x69')]['length'];_0x1cc3ee+=0x1){_0x1cc3ee>0x0&&(_0x3119c2+='\x20'+_0x19fa5b['operator']+'\x20');_0x3119c2+=_0x19fa5b[_0xeaec('0x69')][_0x1cc3ee]['group']?_0x420daf(_0x19fa5b['rules'][_0x1cc3ee]['group']):_0x19fa5b[_0xeaec('0x69')][_0x1cc3ee][_0xeaec('0x3d')]+'\x20'+_0x19fa5b['rules'][_0x1cc3ee][_0xeaec('0x6b')]+(_0x334c6d(_0x19fa5b[_0xeaec('0x69')][_0x1cc3ee][_0xeaec('0x6b')])?'\x20'+_0x19fa5b[_0xeaec('0x69')][_0x1cc3ee][_0xeaec('0x6c')]:'');}return _0x3119c2+')';};var _0x41c761={'where':{'id':_0x281899['id']}},_0x25d976,_0x31373d,_0x310f39,_0x5c8b6a,_0x3733e4;_0x41c761=_['merge']({},_0x41c761,_0x35f432);return db[_0xeaec('0x29')][_0xeaec('0x46')](_0x41c761)['then'](function(_0x19f2a6){if(_0x19f2a6){_0x25d976=_0x19f2a6;return _0x19f2a6[_0xeaec('0x6d')]();}return null;})[_0xeaec('0x21')](function(_0x394a57){if(_0x394a57){if(!_0x394a57[_0xeaec('0x32')]){throw new db[(_0xeaec('0x86'))][(_0xeaec('0x6e'))](_0xeaec('0x6f'),0x193);}_0x31373d=_0x394a57;return db['AnalyticMetric']['findAll']({'raw':!![]});}return null;})[_0xeaec('0x21')](function(_0x19b524){if(_0x19b524){_0x310f39=_['keyBy'](_0x19b524,'id');var _0x3e8ea0;var _0x7b7df=squel['select']();_0x7b7df[_0xeaec('0x72')](_0x25d976[_0xeaec('0x73')]);for(var _0x48c21c=0x0;_0x48c21c<_0x31373d['length'];_0x48c21c+=0x1){_0x3e8ea0=_0x31373d[_0x48c21c][_0xeaec('0x74')]?_0x310f39[_0x31373d[_0x48c21c][_0xeaec('0x74')]][_0xeaec('0x75')]:_0x31373d[_0x48c21c][_0xeaec('0x3d')];_0x3e8ea0=_0x31373d[_0x48c21c][_0xeaec('0x87')]?_['replace'](_0x2bf8c6[_0x31373d[_0x48c21c][_0xeaec('0x87')]],'%s',_0x3e8ea0):_0x3e8ea0;_0x3e8ea0=_0x31373d[_0x48c21c][_0xeaec('0x77')]?_['replace'](_0x402ea4[_0x31373d[_0x48c21c][_0xeaec('0x77')]],'%s',_0x3e8ea0):_0x3e8ea0;if(_0x31373d[_0x48c21c][_0xeaec('0x78')]){_0x7b7df[_0xeaec('0x6a')](_0x3e8ea0);}_0x31373d[_0x48c21c]['orderBy']&&_0x7b7df[_0xeaec('0x88')](_0x3e8ea0,_0x31373d[_0x48c21c][_0xeaec('0x89')]==='DESC'?![]:!![]);_0x7b7df[_0xeaec('0x3d')](_0x3e8ea0,_0x31373d[_0x48c21c][_0xeaec('0x8a')]||_0x3e8ea0);}if(_0x25d976[_0xeaec('0x7a')]){_0x25d976[_0xeaec('0x7a')]=JSON[_0xeaec('0x80')](_0x25d976['joins']);for(var _0x45d647=0x0;_0x45d647<_0x25d976[_0xeaec('0x7a')][_0xeaec('0x32')];_0x45d647+=0x1){if(_0x25d976[_0xeaec('0x7a')][_0x45d647]['type']&&_[_0xeaec('0x63')](_0xe63e3c,_0x25d976[_0xeaec('0x7a')][_0x45d647]['type'])&&_0x25d976[_0xeaec('0x7a')][_0x45d647][_0xeaec('0x7b')]&&_0x25d976[_0xeaec('0x7a')][_0x45d647]['foreignTable']&&_0x25d976[_0xeaec('0x7a')][_0x45d647][_0xeaec('0x7d')]){_0x7b7df[_0x25d976['joins'][_0x45d647][_0xeaec('0x3a')]](_0x25d976[_0xeaec('0x7a')][_0x45d647][_0xeaec('0x7c')],null,util['format'](_0xeaec('0x7e'),_0x25d976[_0xeaec('0x73')],_0x25d976['joins'][_0x45d647]['parentKey'],_0x25d976['joins'][_0x45d647][_0xeaec('0x7c')],_0x25d976['joins'][_0x45d647]['foreignKey']));}}}if(_0x25d976['conditions']){_0x25d976[_0xeaec('0x7f')]=JSON[_0xeaec('0x80')](_0x25d976[_0xeaec('0x7f')]);_0x7b7df['where'](_0x420daf(_0x25d976['conditions'][_0xeaec('0x6a')]));}_0x3733e4=_0x7b7df['clone']();_0x7b7df[_0xeaec('0x1c')](_0x38db9b);_0x7b7df[_0xeaec('0x1b')](0x0);logger[_0xeaec('0x81')](_0xeaec('0x82'),_0x7b7df[_0xeaec('0x83')]());return db[_0xeaec('0x84')]['query'](_0x7b7df[_0xeaec('0x83')](),{'type':db[_0xeaec('0x84')]['QueryTypes'][_0xeaec('0x85')]});}})['then'](function(_0xcd91dd){if(!_0xcd91dd['length']){throw new db[(_0xeaec('0x86'))]['ValidationErrorItem'](_0xeaec('0x8b'),0xcc);}if(_0x54cc4d[_0xeaec('0x8c')]===_0xeaec('0x8d')){return null;}var _0x4bfd96=_['merge'](_0x54cc4d,{'name':_0x54cc4d[_0xeaec('0x8e')]||_0x54cc4d[_0xeaec('0x27')]||_0x25d976[_0xeaec('0x27')],'basename':_0x39ee7f,'savename':util[_0xeaec('0x77')](_0xeaec('0x8f'),_0x54cc4d[_0xeaec('0x27')]||_0x25d976[_0xeaec('0x27')],require(_0xeaec('0x90'))[_0xeaec('0x91')](0x4),_0x54cc4d['output']||'csv'),'reportId':_0x25d976['id'],'reportType':_0xeaec('0x92')});return db[_0xeaec('0x93')][_0xeaec('0x47')](_0x4bfd96,{'raw':!![]});})[_0xeaec('0x21')](function(_0x2107bc){if(_0x25d976[_0xeaec('0x73')]==='cdr'){_0x3733e4[_0xeaec('0x36')](_0x25d976['table']+_0xeaec('0x94'),_0x54cc4d[_0xeaec('0x95')],_0x54cc4d['endDate']);}else{_0x3733e4[_0xeaec('0x36')](_0x25d976['table']+'.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x54cc4d['startDate'],_0x54cc4d[_0xeaec('0x96')]);}if(_0x2107bc){logger['info'](_0xeaec('0x97'),_0x3733e4[_0xeaec('0x83')]());require(_0xeaec('0x98'))[_0xeaec('0x99')](path[_0xeaec('0x52')](__dirname,_0xeaec('0x9a'),_0x2107bc[_0xeaec('0x8c')]),[_0x2107bc['id'],_0x3733e4['toString'](),path[_0xeaec('0x52')](__dirname,_0xeaec('0x9b'),_0x2107bc[_0xeaec('0x9c')]),_0x39ee7f]);return _0x2107bc;}else{var _0x57c778=squel[_0xeaec('0x71')]();_0x57c778[_0xeaec('0x72')]('('+_0x3733e4[_0xeaec('0x83')]()+')',_0xeaec('0x9d'));_0x57c778[_0xeaec('0x3d')]('COUNT(*)',_0xeaec('0x1a'));_0x3733e4[_0xeaec('0x1c')](_0x54cc4d['limit']||_0x38db9b);_0x3733e4[_0xeaec('0x1b')](_0x54cc4d['offset']||0x0);return db[_0xeaec('0x84')][_0xeaec('0x2c')](_0x57c778[_0xeaec('0x83')](),{'type':db[_0xeaec('0x84')]['QueryTypes']['SELECT']})[_0xeaec('0x21')](function(_0x21c021){if(!_0x21c021['length']){_0x5c8b6a=0x0;}else{_0x5c8b6a=_0x21c021[0x0][_0xeaec('0x1a')]||0x0;}return db['sequelize'][_0xeaec('0x2c')](_0x3733e4[_0xeaec('0x83')](),{'type':db[_0xeaec('0x84')]['QueryTypes'][_0xeaec('0x85')]});})[_0xeaec('0x21')](function(_0x339f88){return{'rows':_0x339f88||[],'count':_0x5c8b6a};});}});}exports[_0xeaec('0x9e')]=function(_0x1a3cde,_0x24061d){return runReport(_0x1a3cde[_0xeaec('0x50')],_0x1a3cde[_0xeaec('0x2c')],_0x1a3cde[_0xeaec('0x3f')])['then'](respondWithResult(_0x24061d,null))[_0xeaec('0x43')](handleError(_0x24061d,null));};exports[_0xeaec('0x9f')]=runReport;exports[_0xeaec('0x2c')]=function(_0x202a70,_0x473fa5){var _0x41048c=0xa;var _0x153c48=[_0xeaec('0x52'),_0xeaec('0x53'),_0xeaec('0x54'),'cross_join'];var _0x3f913a={'SUM':'SUM(%s)','COUNT':_0xeaec('0x56'),'COUNT DISTINCT':_0xeaec('0x57'),'MAX':_0xeaec('0x58'),'MIN':_0xeaec('0x59'),'AVG':'AVG(%s)','GROUP_CONCAT':_0xeaec('0x5b'),'GROUP_CONCAT ASC':_0xeaec('0x5c'),'GROUP_CONCAT DESC':_0xeaec('0x5d')};var _0x17cc25={'SEC_TO_TIME':_0xeaec('0x5e'),'DATE':_0xeaec('0x5f'),'HOUR':_0xeaec('0x60'),'ROUND':_0xeaec('0x61'),'UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x49a8a4=function(_0x659c00){return!_[_0xeaec('0x63')](['IS\x20NULL','IS\x20NOT\x20NULL','IS\x20EMPTY',_0xeaec('0x67')],_0x659c00);};var _0xdeb573=function(_0x16395c){if(!_0x16395c||!_0x16395c[_0xeaec('0x69')][_0xeaec('0x32')]){return'';}for(var _0x3d209f='(',_0x5807bd=0x0;_0x5807bd<_0x16395c[_0xeaec('0x69')][_0xeaec('0x32')];_0x5807bd+=0x1){_0x5807bd>0x0&&(_0x3d209f+='\x20'+_0x16395c['operator']+'\x20');_0x3d209f+=_0x16395c['rules'][_0x5807bd]['group']?_0xdeb573(_0x16395c['rules'][_0x5807bd][_0xeaec('0x6a')]):_0x16395c[_0xeaec('0x69')][_0x5807bd][_0xeaec('0x3d')]+'\x20'+_0x16395c[_0xeaec('0x69')][_0x5807bd][_0xeaec('0x6b')]+(_0x49a8a4(_0x16395c['rules'][_0x5807bd]['condition'])?'\x20'+_0x16395c[_0xeaec('0x69')][_0x5807bd]['value']:'');}return _0x3d209f+')';};var _0x474214={'where':{'id':_0x202a70[_0xeaec('0x50')]['id']}},_0x112d9b,_0x5cbb28,_0x5e19f9,_0x25197d,_0x178e63;_0x474214=_[_0xeaec('0x38')]({},_0x474214,_0x202a70[_0xeaec('0x3f')]);return db[_0xeaec('0x29')][_0xeaec('0x46')](_0x474214)[_0xeaec('0x21')](function(_0x55b11d){if(_0x55b11d){_0x112d9b=_0x55b11d;return _0x55b11d['getFields']();}return null;})['then'](function(_0x2747f9){if(_0x2747f9){if(!_0x2747f9['length']){throw new db[(_0xeaec('0x86'))][(_0xeaec('0x6e'))](_0xeaec('0x6f'),0x193);}_0x5cbb28=_0x2747f9;return db[_0xeaec('0x70')]['findAll']({'raw':!![]});}return null;})[_0xeaec('0x21')](function(_0x55d208){if(_0x55d208){_0x5e19f9=_['keyBy'](_0x55d208,'id');var _0x111514;var _0x544d4c=squel[_0xeaec('0x71')]();_0x544d4c[_0xeaec('0x72')](_0x112d9b[_0xeaec('0x73')]);for(var _0x45acf1=0x0;_0x45acf1<_0x5cbb28[_0xeaec('0x32')];_0x45acf1+=0x1){_0x111514=_0x5cbb28[_0x45acf1]['MetricId']?_0x5e19f9[_0x5cbb28[_0x45acf1][_0xeaec('0x74')]][_0xeaec('0x75')]:_0x5cbb28[_0x45acf1][_0xeaec('0x3d')];_0x111514=_0x5cbb28[_0x45acf1]['function']?_[_0xeaec('0x76')](_0x3f913a[_0x5cbb28[_0x45acf1][_0xeaec('0x87')]],'%s',_0x111514):_0x111514;_0x111514=_0x5cbb28[_0x45acf1][_0xeaec('0x77')]?_[_0xeaec('0x76')](_0x17cc25[_0x5cbb28[_0x45acf1][_0xeaec('0x77')]],'%s',_0x111514):_0x111514;if(_0x5cbb28[_0x45acf1][_0xeaec('0x78')]){_0x544d4c['group'](_0x111514);}_0x5cbb28[_0x45acf1][_0xeaec('0x89')]&&_0x544d4c[_0xeaec('0x88')](_0x111514,_0x5cbb28[_0x45acf1][_0xeaec('0x89')]===_0xeaec('0x79')?![]:!![]);_0x544d4c['field'](_0x111514,_0x5cbb28[_0x45acf1]['alias']||_0x111514);}if(_0x112d9b['joins']){_0x112d9b[_0xeaec('0x7a')]=JSON[_0xeaec('0x80')](_0x112d9b['joins']);for(var _0x484596=0x0;_0x484596<_0x112d9b[_0xeaec('0x7a')][_0xeaec('0x32')];_0x484596+=0x1){if(_0x112d9b[_0xeaec('0x7a')][_0x484596]['type']&&_[_0xeaec('0x63')](_0x153c48,_0x112d9b[_0xeaec('0x7a')][_0x484596][_0xeaec('0x3a')])&&_0x112d9b[_0xeaec('0x7a')][_0x484596]['parentKey']&&_0x112d9b[_0xeaec('0x7a')][_0x484596][_0xeaec('0x7c')]&&_0x112d9b[_0xeaec('0x7a')][_0x484596][_0xeaec('0x7d')]){_0x544d4c[_0x112d9b[_0xeaec('0x7a')][_0x484596][_0xeaec('0x3a')]](_0x112d9b[_0xeaec('0x7a')][_0x484596]['foreignTable'],null,util[_0xeaec('0x77')](_0xeaec('0x7e'),_0x112d9b[_0xeaec('0x73')],_0x112d9b[_0xeaec('0x7a')][_0x484596][_0xeaec('0x7b')],_0x112d9b[_0xeaec('0x7a')][_0x484596]['foreignTable'],_0x112d9b[_0xeaec('0x7a')][_0x484596][_0xeaec('0x7d')]));}}}if(_0x112d9b[_0xeaec('0x7f')]){_0x112d9b[_0xeaec('0x7f')]=JSON[_0xeaec('0x80')](_0x112d9b[_0xeaec('0x7f')]);_0x544d4c['where'](_0xdeb573(_0x112d9b['conditions'][_0xeaec('0x6a')]));}_0x178e63=_0x544d4c[_0xeaec('0xa0')]();_0x544d4c[_0xeaec('0x1c')](_0x41048c);_0x544d4c[_0xeaec('0x1b')](0x0);logger['debug'](_0xeaec('0x82'),_0x544d4c[_0xeaec('0x83')]());return db['sequelize'][_0xeaec('0x2c')](_0x544d4c[_0xeaec('0x83')](),{'type':db[_0xeaec('0x84')][_0xeaec('0xa1')][_0xeaec('0x85')]});}})['then'](function(){return{'sql':_0x178e63[_0xeaec('0x83')]()};})['then'](respondWithResult(_0x473fa5,null))['catch'](handleError(_0x473fa5,null));};
\ No newline at end of file
index d31da74..56ed3dc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x971a=['rimraf','../../config/environment','./analyticDefaultReport.attributes','define','AnalyticDefaultReport','analytics_default_reports','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path'];(function(_0x340c13,_0x595d66){var _0x5a7d96=function(_0x250118){while(--_0x250118){_0x340c13['push'](_0x340c13['shift']());}};_0x5a7d96(++_0x595d66);}(_0x971a,0x172));var _0xa971=function(_0x135573,_0x479526){_0x135573=_0x135573-0x0;var _0x13ea56=_0x971a[_0x135573];return _0x13ea56;};'use strict';var _=require(_0xa971('0x0'));var util=require(_0xa971('0x1'));var logger=require(_0xa971('0x2'))(_0xa971('0x3'));var moment=require(_0xa971('0x4'));var BPromise=require(_0xa971('0x5'));var rp=require(_0xa971('0x6'));var fs=require('fs');var path=require(_0xa971('0x7'));var rimraf=require(_0xa971('0x8'));var config=require(_0xa971('0x9'));var attributes=require(_0xa971('0xa'));module['exports']=function(_0x30f855,_0x38c0c3){return _0x30f855[_0xa971('0xb')](_0xa971('0xc'),attributes,{'tableName':_0xa971('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x81c7=['path','rimraf','./analyticDefaultReport.attributes','AnalyticDefaultReport','analytics_default_reports','util','../../config/logger'];(function(_0x239465,_0x17fff1){var _0x2c2cc5=function(_0x33cd11){while(--_0x33cd11){_0x239465['push'](_0x239465['shift']());}};_0x2c2cc5(++_0x17fff1);}(_0x81c7,0x1c5));var _0x781c=function(_0x585ec3,_0x39cc8f){_0x585ec3=_0x585ec3-0x0;var _0x5c5ce0=_0x81c7[_0x585ec3];return _0x5c5ce0;};'use strict';var _=require('lodash');var util=require(_0x781c('0x0'));var logger=require(_0x781c('0x1'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x781c('0x2'));var rimraf=require(_0x781c('0x3'));var config=require('../../config/environment');var attributes=require(_0x781c('0x4'));module['exports']=function(_0x237550,_0x5ec2c6){return _0x237550['define'](_0x781c('0x5'),attributes,{'tableName':_0x781c('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ee3e460..56c2628 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xedd9=['moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','stringify','error','code','AnalyticDefaultReport,\x20%s,\x20%s','message','catch','util'];(function(_0x49826c,_0x4c4e3b){var _0x2ba354=function(_0x18a180){while(--_0x18a180){_0x49826c['push'](_0x49826c['shift']());}};_0x2ba354(++_0x4c4e3b);}(_0xedd9,0xfc));var _0x9edd=function(_0xb3f7a5,_0xb2a175){_0xb3f7a5=_0xb3f7a5-0x0;var _0x357045=_0xedd9[_0xb3f7a5];return _0x357045;};'use strict';var _=require('lodash');var util=require(_0x9edd('0x0'));var moment=require(_0x9edd('0x1'));var BPromise=require(_0x9edd('0x2'));var rs=require(_0x9edd('0x3'));var fs=require('fs');var Redis=require(_0x9edd('0x4'));var db=require(_0x9edd('0x5'))['db'];var utils=require(_0x9edd('0x6'));var logger=require(_0x9edd('0x7'))('rpc');var config=require(_0x9edd('0x8'));var jayson=require(_0x9edd('0x9'));var client=jayson[_0x9edd('0xa')][_0x9edd('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5319f7,_0xf0b2d8,_0x571af9){return new BPromise(function(_0x172522,_0x190185){return client[_0x9edd('0xc')](_0x5319f7,_0x571af9)[_0x9edd('0xd')](function(_0x49d5e3){logger[_0x9edd('0xe')]('AnalyticDefaultReport,\x20%s,\x20%s',_0xf0b2d8,_0x9edd('0xf'));logger[_0x9edd('0x10')]('AnalyticDefaultReport,\x20%s,\x20%s,\x20%s',_0xf0b2d8,_0x9edd('0xf'),JSON[_0x9edd('0x11')](_0x49d5e3));if(_0x49d5e3['error']){if(_0x49d5e3[_0x9edd('0x12')][_0x9edd('0x13')]===0x1f4){logger[_0x9edd('0x12')](_0x9edd('0x14'),_0xf0b2d8,_0x49d5e3[_0x9edd('0x12')][_0x9edd('0x15')]);return _0x190185(_0x49d5e3[_0x9edd('0x12')][_0x9edd('0x15')]);}logger['error'](_0x9edd('0x14'),_0xf0b2d8,_0x49d5e3[_0x9edd('0x12')][_0x9edd('0x15')]);return _0x172522(_0x49d5e3[_0x9edd('0x12')][_0x9edd('0x15')]);}else{logger[_0x9edd('0xe')](_0x9edd('0x14'),_0xf0b2d8,_0x9edd('0xf'));_0x172522(_0x49d5e3['result'][_0x9edd('0x15')]);}})[_0x9edd('0x16')](function(_0x449cee){logger['error'](_0x9edd('0x14'),_0xf0b2d8,_0x449cee);_0x190185(_0x449cee);});});}
\ No newline at end of file
+var _0x54ef=['result','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','request','then','info','AnalyticDefaultReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message'];(function(_0x4d6253,_0x267353){var _0x104fc6=function(_0x2adaba){while(--_0x2adaba){_0x4d6253['push'](_0x4d6253['shift']());}};_0x104fc6(++_0x267353);}(_0x54ef,0x112));var _0xf54e=function(_0x102fc8,_0x115173){_0x102fc8=_0x102fc8-0x0;var _0x5a082b=_0x54ef[_0x102fc8];return _0x5a082b;};'use strict';var _=require(_0xf54e('0x0'));var util=require(_0xf54e('0x1'));var moment=require(_0xf54e('0x2'));var BPromise=require('bluebird');var rs=require(_0xf54e('0x3'));var fs=require('fs');var Redis=require(_0xf54e('0x4'));var db=require(_0xf54e('0x5'))['db'];var utils=require(_0xf54e('0x6'));var logger=require(_0xf54e('0x7'))(_0xf54e('0x8'));var config=require(_0xf54e('0x9'));var jayson=require('jayson/promise');var client=jayson['client'][_0xf54e('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x99cf9,_0x2464ae,_0x561870){return new BPromise(function(_0x27e69b,_0x57a1ce){return client[_0xf54e('0xb')](_0x99cf9,_0x561870)[_0xf54e('0xc')](function(_0x47c5e1){logger[_0xf54e('0xd')](_0xf54e('0xe'),_0x2464ae,_0xf54e('0xf'));logger[_0xf54e('0x10')]('AnalyticDefaultReport,\x20%s,\x20%s,\x20%s',_0x2464ae,_0xf54e('0xf'),JSON[_0xf54e('0x11')](_0x47c5e1));if(_0x47c5e1[_0xf54e('0x12')]){if(_0x47c5e1[_0xf54e('0x12')]['code']===0x1f4){logger[_0xf54e('0x12')]('AnalyticDefaultReport,\x20%s,\x20%s',_0x2464ae,_0x47c5e1['error'][_0xf54e('0x13')]);return _0x57a1ce(_0x47c5e1[_0xf54e('0x12')][_0xf54e('0x13')]);}logger[_0xf54e('0x12')]('AnalyticDefaultReport,\x20%s,\x20%s',_0x2464ae,_0x47c5e1[_0xf54e('0x12')][_0xf54e('0x13')]);return _0x27e69b(_0x47c5e1[_0xf54e('0x12')][_0xf54e('0x13')]);}else{logger['info'](_0xf54e('0xe'),_0x2464ae,_0xf54e('0xf'));_0x27e69b(_0x47c5e1[_0xf54e('0x14')]['message']);}})['catch'](function(_0xd87020){logger[_0xf54e('0x12')](_0xf54e('0xe'),_0x2464ae,_0xd87020);_0x57a1ce(_0xd87020);});});}
\ No newline at end of file
index 8591488..a2196b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6fd4=['update','delete','exports','multer','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./analyticDefaultReport.controller','get','index','/:id','isAuthenticated','show','/:id/run','query','post'];(function(_0x58174e,_0x2db28e){var _0x479dd8=function(_0x1c97c2){while(--_0x1c97c2){_0x58174e['push'](_0x58174e['shift']());}};_0x479dd8(++_0x2db28e);}(_0x6fd4,0x81));var _0x46fd=function(_0x33a6bd,_0x564362){_0x33a6bd=_0x33a6bd-0x0;var _0x339aff=_0x6fd4[_0x33a6bd];return _0x339aff;};'use strict';var multer=require(_0x46fd('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x46fd('0x1'));var express=require(_0x46fd('0x2'));var router=express[_0x46fd('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x46fd('0x4'));var config=require(_0x46fd('0x5'));var controller=require(_0x46fd('0x6'));router[_0x46fd('0x7')]('/',auth['isAuthenticated'](),controller[_0x46fd('0x8')]);router[_0x46fd('0x7')](_0x46fd('0x9'),auth[_0x46fd('0xa')](),controller[_0x46fd('0xb')]);router[_0x46fd('0x7')]('/:id/preview',auth[_0x46fd('0xa')](),controller['preview']);router[_0x46fd('0x7')](_0x46fd('0xc'),auth['isAuthenticated'](),controller['run']);router[_0x46fd('0x7')]('/:id/query',auth[_0x46fd('0xa')](),controller[_0x46fd('0xd')]);router[_0x46fd('0xe')]('/',auth[_0x46fd('0xa')](),controller['create']);router['put'](_0x46fd('0x9'),auth['isAuthenticated'](),controller[_0x46fd('0xf')]);router[_0x46fd('0x10')](_0x46fd('0x9'),auth[_0x46fd('0xa')](),controller['destroy']);module[_0x46fd('0x11')]=router;
\ No newline at end of file
+var _0x152a=['create','update','delete','destroy','exports','multer','path','connect-timeout','express','../../components/auth/service','../../config/environment','./analyticDefaultReport.controller','get','isAuthenticated','index','/:id','show','/:id/preview','preview','/:id/run','run','/:id/query','query','post'];(function(_0x5de532,_0x2941c4){var _0x4e9192=function(_0x548a81){while(--_0x548a81){_0x5de532['push'](_0x5de532['shift']());}};_0x4e9192(++_0x2941c4);}(_0x152a,0x19d));var _0xa152=function(_0x386525,_0xefae6){_0x386525=_0x386525-0x0;var _0x14d015=_0x152a[_0x386525];return _0x14d015;};'use strict';var multer=require(_0xa152('0x0'));var util=require('util');var path=require(_0xa152('0x1'));var timeout=require(_0xa152('0x2'));var express=require(_0xa152('0x3'));var router=express['Router']();var auth=require(_0xa152('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xa152('0x5'));var controller=require(_0xa152('0x6'));router[_0xa152('0x7')]('/',auth[_0xa152('0x8')](),controller[_0xa152('0x9')]);router[_0xa152('0x7')](_0xa152('0xa'),auth['isAuthenticated'](),controller[_0xa152('0xb')]);router[_0xa152('0x7')](_0xa152('0xc'),auth[_0xa152('0x8')](),controller[_0xa152('0xd')]);router['get'](_0xa152('0xe'),auth[_0xa152('0x8')](),controller[_0xa152('0xf')]);router['get'](_0xa152('0x10'),auth[_0xa152('0x8')](),controller[_0xa152('0x11')]);router[_0xa152('0x12')]('/',auth[_0xa152('0x8')](),controller[_0xa152('0x13')]);router['put'](_0xa152('0xa'),auth['isAuthenticated'](),controller[_0xa152('0x14')]);router[_0xa152('0x15')](_0xa152('0xa'),auth[_0xa152('0x8')](),controller[_0xa152('0x16')]);module[_0xa152('0x17')]=router;
\ No newline at end of file
index 725c975..070db46 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb5e4=['manual','scheduled','INTEGER','UNSIGNED','sequelize','moment','exports','STRING','ENUM','csv','pdf','xlsx','DATE'];(function(_0x3a9815,_0x47eb16){var _0x188653=function(_0x203e84){while(--_0x203e84){_0x3a9815['push'](_0x3a9815['shift']());}};_0x188653(++_0x47eb16);}(_0xb5e4,0x163));var _0x4b5e=function(_0x494db6,_0x46d02e){_0x494db6=_0x494db6-0x0;var _0x30858b=_0xb5e4[_0x494db6];return _0x30858b;};'use strict';var Sequelize=require(_0x4b5e('0x0'));var moment=require(_0x4b5e('0x1'));module[_0x4b5e('0x2')]={'name':{'type':Sequelize[_0x4b5e('0x3')],'allowNull':![]},'basename':{'type':Sequelize[_0x4b5e('0x3')],'allowNull':![]},'output':{'type':Sequelize[_0x4b5e('0x4')](_0x4b5e('0x5'),_0x4b5e('0x6'),_0x4b5e('0x7')),'allowNull':![],'defaultValue':_0x4b5e('0x5')},'savename':{'type':Sequelize[_0x4b5e('0x3')],'allowNull':![]},'startDate':{'type':Sequelize['DATE']},'endDate':{'type':Sequelize[_0x4b5e('0x8')]},'status':{'type':Sequelize[_0x4b5e('0x3')],'defaultValue':'Loading'},'type':{'type':Sequelize[_0x4b5e('0x4')](_0x4b5e('0x9'),_0x4b5e('0xa')),'allowNull':![],'defaultValue':_0x4b5e('0x9')},'reportId':{'type':Sequelize[_0x4b5e('0xb')](0xb)[_0x4b5e('0xc')]},'reportType':{'type':Sequelize[_0x4b5e('0x3')]}};
\ No newline at end of file
+var _0x52d1=['DATE','Loading','ENUM','manual','INTEGER','UNSIGNED','sequelize','exports','STRING','pdf','xlsx','csv'];(function(_0x262ea8,_0x376a78){var _0x358fad=function(_0x5a987f){while(--_0x5a987f){_0x262ea8['push'](_0x262ea8['shift']());}};_0x358fad(++_0x376a78);}(_0x52d1,0x1ce));var _0x152d=function(_0x15c644,_0x1ff20b){_0x15c644=_0x15c644-0x0;var _0x24ca40=_0x52d1[_0x15c644];return _0x24ca40;};'use strict';var Sequelize=require(_0x152d('0x0'));var moment=require('moment');module[_0x152d('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'basename':{'type':Sequelize[_0x152d('0x2')],'allowNull':![]},'output':{'type':Sequelize['ENUM']('csv',_0x152d('0x3'),_0x152d('0x4')),'allowNull':![],'defaultValue':_0x152d('0x5')},'savename':{'type':Sequelize['STRING'],'allowNull':![]},'startDate':{'type':Sequelize[_0x152d('0x6')]},'endDate':{'type':Sequelize[_0x152d('0x6')]},'status':{'type':Sequelize[_0x152d('0x2')],'defaultValue':_0x152d('0x7')},'type':{'type':Sequelize[_0x152d('0x8')](_0x152d('0x9'),'scheduled'),'allowNull':![],'defaultValue':_0x152d('0x9')},'reportId':{'type':Sequelize[_0x152d('0xa')](0xb)[_0x152d('0xb')]},'reportType':{'type':Sequelize[_0x152d('0x2')]}};
\ No newline at end of file
index 9675729..c864609 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x236c=['status','count','set','Content-Range','reject','save','update','then','destroy','get','ExtractedReports','UserProfileResource','stack','name','send','AnalyticExtractedReport','rawAttributes','query','intersection','model','fields','attributes','length','nolimit','limit','offset','order','sort','where','filters','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','user','UserProfileSection','userProfileId','autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','download','savename','output','existsSync','join','server/files/reports','Sequelize','ValidationError','exists','root','format','basename','toLowerCase','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','squel','crypto','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','sendStatus'];(function(_0x3d8a5f,_0x4f72b2){var _0x34ff36=function(_0x80ba3b){while(--_0x80ba3b){_0x3d8a5f['push'](_0x3d8a5f['shift']());}};_0x34ff36(++_0x4f72b2);}(_0x236c,0x155));var _0xc236=function(_0x226b94,_0x2afa35){_0x226b94=_0x226b94-0x0;var _0x35a680=_0x236c[_0x226b94];return _0x35a680;};'use strict';var pdf=require(_0xc236('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xc236('0x1'));var zipdir=require(_0xc236('0x2'));var jsonpatch=require(_0xc236('0x3'));var rp=require(_0xc236('0x4'));var moment=require(_0xc236('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xc236('0x6'));var util=require(_0xc236('0x7'));var path=require(_0xc236('0x8'));var sox=require(_0xc236('0x9'));var csv=require(_0xc236('0xa'));var ejs=require(_0xc236('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0xc236('0xc'));var crypto=require(_0xc236('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xc236('0xe'));var Papa=require('papaparse');var Redis=require(_0xc236('0xf'));var authService=require(_0xc236('0x10'));var qs=require(_0xc236('0x11'));var hardwareService=require(_0xc236('0x12'));var logger=require(_0xc236('0x13'))('api');var utils=require(_0xc236('0x14'));var config=require(_0xc236('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xcfe854,_0x1bc39f){_0x1bc39f=_0x1bc39f||0xcc;return function(_0x5ee3a5){if(_0x5ee3a5){return _0xcfe854[_0xc236('0x16')](_0x1bc39f);}return _0xcfe854['status'](_0x1bc39f)['end']();};}function respondWithResult(_0x6db6b9,_0x442095){_0x442095=_0x442095||0xc8;return function(_0x2184c9){if(_0x2184c9){return _0x6db6b9[_0xc236('0x17')](_0x442095)['json'](_0x2184c9);}};}function respondWithFilteredResult(_0x13a42b,_0x55b188){return function(_0x5221bf){if(_0x5221bf){var _0x9a65e8=_0x5221bf[_0xc236('0x18')],_0x32f2fd=_0x55b188['offset'],_0x443a46=_0x55b188['offset']+_0x55b188['limit'],_0x1aeafc;if(_0x443a46>=_0x9a65e8){_0x443a46=_0x9a65e8;_0x1aeafc=0xc8;}else{_0x1aeafc=0xce;}_0x13a42b[_0xc236('0x17')](_0x1aeafc);return _0x13a42b[_0xc236('0x19')](_0xc236('0x1a'),_0x32f2fd+'-'+_0x443a46+'/'+_0x9a65e8)['json'](_0x5221bf);}return null;};}function patchUpdates(_0x13b432){return function(_0x506974){try{jsonpatch['apply'](_0x506974,_0x13b432,!![]);}catch(_0x1eafba){return BPromise[_0xc236('0x1b')](_0x1eafba);}return _0x506974[_0xc236('0x1c')]();};}function saveUpdates(_0x46bc69,_0x2b6d3f){return function(_0x27c6ab){if(_0x27c6ab){return _0x27c6ab[_0xc236('0x1d')](_0x46bc69)[_0xc236('0x1e')](function(_0x54ffac){return _0x54ffac;});}return null;};}function removeEntity(_0x32876d,_0x28d186){return function(_0x4a9006){if(_0x4a9006){return _0x4a9006[_0xc236('0x1f')]()[_0xc236('0x1e')](function(){var _0x3bd41b=_0x4a9006[_0xc236('0x20')]({'plain':!![]});var _0x27afba=_0xc236('0x21');return db[_0xc236('0x22')][_0xc236('0x1f')]({'where':{'type':_0x27afba,'resourceId':_0x3bd41b['id']}})[_0xc236('0x1e')](function(){return _0x4a9006;});})[_0xc236('0x1e')](function(){_0x32876d[_0xc236('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x308cd6,_0x21d78f){return function(_0x356042){if(!_0x356042){_0x308cd6[_0xc236('0x16')](0x194);}return _0x356042;};}function handleError(_0x561da1,_0x42f248){_0x42f248=_0x42f248||0x1f4;return function(_0x5da4b2){logger['error'](_0x5da4b2[_0xc236('0x23')]);if(_0x5da4b2['name']){delete _0x5da4b2[_0xc236('0x24')];}_0x561da1['status'](_0x42f248)[_0xc236('0x25')](_0x5da4b2);};}exports['index']=function(_0x423842,_0x1d144b){var _0x4f5175={},_0x5a61b5={},_0x265c8d={'count':0x0,'rows':[]};var _0x1fd31d=db[_0xc236('0x26')][_0xc236('0x27')];_0x5a61b5['model']=_['keys'](_0x1fd31d);_0x5a61b5[_0xc236('0x28')]=_['keys'](_0x423842[_0xc236('0x28')]);_0x5a61b5['filters']=_[_0xc236('0x29')](_0x5a61b5[_0xc236('0x2a')],_0x5a61b5['query']);_0x4f5175['attributes']=_[_0xc236('0x29')](_0x5a61b5[_0xc236('0x2a')],qs[_0xc236('0x2b')](_0x423842[_0xc236('0x28')][_0xc236('0x2b')]));_0x4f5175[_0xc236('0x2c')]=_0x4f5175[_0xc236('0x2c')][_0xc236('0x2d')]?_0x4f5175[_0xc236('0x2c')]:_0x5a61b5['model'];if(!_0x423842['query']['hasOwnProperty'](_0xc236('0x2e'))){_0x4f5175[_0xc236('0x2f')]=qs[_0xc236('0x2f')](_0x423842[_0xc236('0x28')][_0xc236('0x2f')]);_0x4f5175[_0xc236('0x30')]=qs[_0xc236('0x30')](_0x423842['query'][_0xc236('0x30')]);}_0x4f5175[_0xc236('0x31')]=qs[_0xc236('0x32')](_0x423842['query'][_0xc236('0x32')]);_0x4f5175[_0xc236('0x33')]=qs[_0xc236('0x34')](_[_0xc236('0x35')](_0x423842['query'],_0x5a61b5[_0xc236('0x34')]));if(_0x423842[_0xc236('0x28')][_0xc236('0x36')]){_0x4f5175[_0xc236('0x33')]=_[_0xc236('0x37')](_0x4f5175[_0xc236('0x33')],{'$or':_[_0xc236('0x38')](_0x1fd31d,function(_0x11ca1c){if(_0x11ca1c[_0xc236('0x39')][_0xc236('0x3a')]!==_0xc236('0x3b')){var _0x6aa23b={};_0x6aa23b[_0x11ca1c[_0xc236('0x3c')]]={'$like':'%'+_0x423842[_0xc236('0x28')][_0xc236('0x36')]+'%'};return _0x6aa23b;}})});}_0x4f5175=_[_0xc236('0x37')]({},_0x4f5175,_0x423842[_0xc236('0x3d')]);var _0x4f5490={'where':_0x4f5175['where']};return db['AnalyticExtractedReport']['count'](_0x4f5490)[_0xc236('0x1e')](function(_0x5c4739){_0x265c8d[_0xc236('0x18')]=_0x5c4739;if(_0x423842[_0xc236('0x28')][_0xc236('0x3e')]){_0x4f5175[_0xc236('0x3f')]=[{'all':!![]}];}return db[_0xc236('0x26')][_0xc236('0x40')](_0x4f5175);})[_0xc236('0x1e')](function(_0x201ba3){_0x265c8d[_0xc236('0x41')]=_0x201ba3;return _0x265c8d;})[_0xc236('0x1e')](respondWithFilteredResult(_0x1d144b,_0x4f5175))[_0xc236('0x42')](handleError(_0x1d144b,null));};exports[_0xc236('0x43')]=function(_0x3b2f2f,_0x3df25e){var _0x105c71={'raw':!![],'where':{'id':_0x3b2f2f[_0xc236('0x44')]['id']}},_0x594ffc={};_0x594ffc[_0xc236('0x2a')]=_['keys'](db[_0xc236('0x26')]['rawAttributes']);_0x594ffc[_0xc236('0x28')]=_['keys'](_0x3b2f2f[_0xc236('0x28')]);_0x594ffc[_0xc236('0x34')]=_[_0xc236('0x29')](_0x594ffc['model'],_0x594ffc[_0xc236('0x28')]);_0x105c71[_0xc236('0x2c')]=_[_0xc236('0x29')](_0x594ffc['model'],qs[_0xc236('0x2b')](_0x3b2f2f[_0xc236('0x28')][_0xc236('0x2b')]));_0x105c71[_0xc236('0x2c')]=_0x105c71[_0xc236('0x2c')][_0xc236('0x2d')]?_0x105c71['attributes']:_0x594ffc[_0xc236('0x2a')];if(_0x3b2f2f['query'][_0xc236('0x3e')]){_0x105c71[_0xc236('0x3f')]=[{'all':!![]}];}_0x105c71=_[_0xc236('0x37')]({},_0x105c71,_0x3b2f2f[_0xc236('0x3d')]);return db[_0xc236('0x26')][_0xc236('0x45')](_0x105c71)[_0xc236('0x1e')](handleEntityNotFound(_0x3df25e,null))['then'](respondWithResult(_0x3df25e,null))[_0xc236('0x42')](handleError(_0x3df25e,null));};exports['create']=function(_0x4674fe,_0x2f52b9){return db['AnalyticExtractedReport'][_0xc236('0x46')](_0x4674fe[_0xc236('0x47')],{})[_0xc236('0x1e')](function(_0x161890){var _0x181dd6=_0x4674fe[_0xc236('0x48')][_0xc236('0x20')]({'plain':!![]});if(!_0x181dd6)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x181dd6['role']===_0xc236('0x48')){var _0x2afed2=_0x161890['get']({'plain':!![]});var _0xcfaa44=_0xc236('0x21');return db[_0xc236('0x49')][_0xc236('0x45')]({'where':{'name':_0xcfaa44,'userProfileId':_0x181dd6[_0xc236('0x4a')]},'raw':!![]})[_0xc236('0x1e')](function(_0x300523){if(_0x300523&&_0x300523[_0xc236('0x4b')]===0x0){return db[_0xc236('0x22')]['create']({'name':_0x2afed2[_0xc236('0x24')],'resourceId':_0x2afed2['id'],'type':_0x300523[_0xc236('0x24')],'sectionId':_0x300523['id']},{})[_0xc236('0x1e')](function(){return _0x161890;});}else{return _0x161890;}})[_0xc236('0x42')](function(_0x172e66){logger[_0xc236('0x4c')](_0xc236('0x4d'),_0x172e66);throw _0x172e66;});}return _0x161890;})['then'](respondWithResult(_0x2f52b9,0xc9))[_0xc236('0x42')](handleError(_0x2f52b9,null));};exports[_0xc236('0x1d')]=function(_0x17c86b,_0x16ff63){if(_0x17c86b['body']['id']){delete _0x17c86b[_0xc236('0x47')]['id'];}return db[_0xc236('0x26')][_0xc236('0x45')]({'where':{'id':_0x17c86b[_0xc236('0x44')]['id']}})[_0xc236('0x1e')](handleEntityNotFound(_0x16ff63,null))['then'](saveUpdates(_0x17c86b[_0xc236('0x47')],null))['then'](respondWithResult(_0x16ff63,null))[_0xc236('0x42')](handleError(_0x16ff63,null));};exports[_0xc236('0x1f')]=function(_0x3f9e85,_0x15defc){return db[_0xc236('0x26')]['find']({'where':{'id':_0x3f9e85['params']['id']}})[_0xc236('0x1e')](handleEntityNotFound(_0x15defc,null))[_0xc236('0x1e')](removeEntity(_0x15defc,null))[_0xc236('0x42')](handleError(_0x15defc,null));};exports[_0xc236('0x4e')]=function(_0x3c4256,_0x22b929,_0x3fd22b){return db[_0xc236('0x26')][_0xc236('0x45')]({'where':{'id':_0x3c4256[_0xc236('0x44')]['id']},'attributes':['name','basename',_0xc236('0x4f'),_0xc236('0x50')],'raw':!![]})[_0xc236('0x1e')](handleEntityNotFound(_0x22b929,null))[_0xc236('0x1e')](function(_0x52d686){if(_0x52d686){if(!fs[_0xc236('0x51')](path[_0xc236('0x52')](config['root'],_0xc236('0x53'),_0x52d686[_0xc236('0x4f')]))){throw new db[(_0xc236('0x54'))][(_0xc236('0x55'))]('Report\x20not\x20found\x20or\x20empty');}if(_0x3c4256[_0xc236('0x28')][_0xc236('0x56')]){return _0x22b929[_0xc236('0x16')](0xc8);}return _0x22b929[_0xc236('0x4e')](path[_0xc236('0x52')](config[_0xc236('0x57')],_0xc236('0x53'),_0x52d686['savename']),util[_0xc236('0x58')]('%s.%s',_0x52d686[_0xc236('0x59')]||_0x52d686[_0xc236('0x24')],_0x52d686[_0xc236('0x50')][_0xc236('0x5a')]()));}})['catch'](handleError(_0x22b929,null));};
\ No newline at end of file
+var _0x4639=['server/files/reports','format','%s.%s','output','html-pdf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','squel','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','offset','limit','Content-Range','json','apply','reject','save','then','destroy','get','ExtractedReports','UserProfileResource','error','stack','name','index','AnalyticExtractedReport','rawAttributes','query','keys','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','key','VIRTUAL','field','options','count','includeAll','include','findAll','rows','catch','params','merge','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','download','basename','savename','existsSync','ValidationError','Report\x20not\x20found\x20or\x20empty','root'];(function(_0x3110ff,_0x2398b7){var _0x205ad4=function(_0x532204){while(--_0x532204){_0x3110ff['push'](_0x3110ff['shift']());}};_0x205ad4(++_0x2398b7);}(_0x4639,0x115));var _0x9463=function(_0x621bee,_0x58f8c0){_0x621bee=_0x621bee-0x0;var _0x3076c8=_0x4639[_0x621bee];return _0x3076c8;};'use strict';var pdf=require(_0x9463('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x9463('0x1'));var jsonpatch=require(_0x9463('0x2'));var rp=require(_0x9463('0x3'));var moment=require(_0x9463('0x4'));var BPromise=require(_0x9463('0x5'));var Mustache=require(_0x9463('0x6'));var util=require(_0x9463('0x7'));var path=require('path');var sox=require(_0x9463('0x8'));var csv=require(_0x9463('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x9463('0xa'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x9463('0xb'));var toCsv=require(_0x9463('0x9'));var querystring=require(_0x9463('0xc'));var Papa=require('papaparse');var Redis=require(_0x9463('0xd'));var authService=require(_0x9463('0xe'));var qs=require(_0x9463('0xf'));var hardwareService=require(_0x9463('0x10'));var logger=require(_0x9463('0x11'))(_0x9463('0x12'));var utils=require(_0x9463('0x13'));var config=require(_0x9463('0x14'));var db=require(_0x9463('0x15'))['db'];function respondWithStatusCode(_0x10025f,_0x32f16b){_0x32f16b=_0x32f16b||0xcc;return function(_0x3b9c65){if(_0x3b9c65){return _0x10025f[_0x9463('0x16')](_0x32f16b);}return _0x10025f[_0x9463('0x17')](_0x32f16b)[_0x9463('0x18')]();};}function respondWithResult(_0x40670a,_0x3a1a98){_0x3a1a98=_0x3a1a98||0xc8;return function(_0x24b1ec){if(_0x24b1ec){return _0x40670a[_0x9463('0x17')](_0x3a1a98)['json'](_0x24b1ec);}};}function respondWithFilteredResult(_0xe8cd93,_0x4a34a0){return function(_0x19259c){if(_0x19259c){var _0x281237=_0x19259c['count'],_0x1915e5=_0x4a34a0[_0x9463('0x19')],_0x2054a3=_0x4a34a0[_0x9463('0x19')]+_0x4a34a0[_0x9463('0x1a')],_0x20c285;if(_0x2054a3>=_0x281237){_0x2054a3=_0x281237;_0x20c285=0xc8;}else{_0x20c285=0xce;}_0xe8cd93['status'](_0x20c285);return _0xe8cd93['set'](_0x9463('0x1b'),_0x1915e5+'-'+_0x2054a3+'/'+_0x281237)[_0x9463('0x1c')](_0x19259c);}return null;};}function patchUpdates(_0x396277){return function(_0x3ba487){try{jsonpatch[_0x9463('0x1d')](_0x3ba487,_0x396277,!![]);}catch(_0x3a6ac2){return BPromise[_0x9463('0x1e')](_0x3a6ac2);}return _0x3ba487[_0x9463('0x1f')]();};}function saveUpdates(_0xf2289,_0x39608b){return function(_0x3d26e4){if(_0x3d26e4){return _0x3d26e4['update'](_0xf2289)[_0x9463('0x20')](function(_0x15e1fd){return _0x15e1fd;});}return null;};}function removeEntity(_0x6fb71d,_0x3aa225){return function(_0x545c48){if(_0x545c48){return _0x545c48[_0x9463('0x21')]()[_0x9463('0x20')](function(){var _0x2d2ef3=_0x545c48[_0x9463('0x22')]({'plain':!![]});var _0x6f0db1=_0x9463('0x23');return db[_0x9463('0x24')][_0x9463('0x21')]({'where':{'type':_0x6f0db1,'resourceId':_0x2d2ef3['id']}})[_0x9463('0x20')](function(){return _0x545c48;});})[_0x9463('0x20')](function(){_0x6fb71d[_0x9463('0x17')](0xcc)[_0x9463('0x18')]();});}};}function handleEntityNotFound(_0x447b1a,_0xff7501){return function(_0x62286d){if(!_0x62286d){_0x447b1a[_0x9463('0x16')](0x194);}return _0x62286d;};}function handleError(_0x41716a,_0x12e967){_0x12e967=_0x12e967||0x1f4;return function(_0x505207){logger[_0x9463('0x25')](_0x505207[_0x9463('0x26')]);if(_0x505207[_0x9463('0x27')]){delete _0x505207[_0x9463('0x27')];}_0x41716a[_0x9463('0x17')](_0x12e967)['send'](_0x505207);};}exports[_0x9463('0x28')]=function(_0x508128,_0x22d768){var _0x18723a={},_0x1777f7={},_0xb39a03={'count':0x0,'rows':[]};var _0x196c0b=db[_0x9463('0x29')][_0x9463('0x2a')];_0x1777f7['model']=_['keys'](_0x196c0b);_0x1777f7[_0x9463('0x2b')]=_[_0x9463('0x2c')](_0x508128[_0x9463('0x2b')]);_0x1777f7['filters']=_[_0x9463('0x2d')](_0x1777f7[_0x9463('0x2e')],_0x1777f7[_0x9463('0x2b')]);_0x18723a[_0x9463('0x2f')]=_[_0x9463('0x2d')](_0x1777f7[_0x9463('0x2e')],qs[_0x9463('0x30')](_0x508128[_0x9463('0x2b')][_0x9463('0x30')]));_0x18723a[_0x9463('0x2f')]=_0x18723a[_0x9463('0x2f')][_0x9463('0x31')]?_0x18723a[_0x9463('0x2f')]:_0x1777f7[_0x9463('0x2e')];if(!_0x508128[_0x9463('0x2b')][_0x9463('0x32')](_0x9463('0x33'))){_0x18723a[_0x9463('0x1a')]=qs[_0x9463('0x1a')](_0x508128[_0x9463('0x2b')][_0x9463('0x1a')]);_0x18723a['offset']=qs['offset'](_0x508128['query'][_0x9463('0x19')]);}_0x18723a[_0x9463('0x34')]=qs[_0x9463('0x35')](_0x508128[_0x9463('0x2b')][_0x9463('0x35')]);_0x18723a[_0x9463('0x36')]=qs[_0x9463('0x37')](_[_0x9463('0x38')](_0x508128[_0x9463('0x2b')],_0x1777f7[_0x9463('0x37')]));if(_0x508128[_0x9463('0x2b')][_0x9463('0x39')]){_0x18723a[_0x9463('0x36')]=_['merge'](_0x18723a[_0x9463('0x36')],{'$or':_['map'](_0x196c0b,function(_0x3d79e5){if(_0x3d79e5['type'][_0x9463('0x3a')]!==_0x9463('0x3b')){var _0x4237e8={};_0x4237e8[_0x3d79e5[_0x9463('0x3c')]]={'$like':'%'+_0x508128[_0x9463('0x2b')][_0x9463('0x39')]+'%'};return _0x4237e8;}})});}_0x18723a=_['merge']({},_0x18723a,_0x508128[_0x9463('0x3d')]);var _0x41d5df={'where':_0x18723a[_0x9463('0x36')]};return db[_0x9463('0x29')][_0x9463('0x3e')](_0x41d5df)[_0x9463('0x20')](function(_0x3698f8){_0xb39a03[_0x9463('0x3e')]=_0x3698f8;if(_0x508128[_0x9463('0x2b')][_0x9463('0x3f')]){_0x18723a[_0x9463('0x40')]=[{'all':!![]}];}return db[_0x9463('0x29')][_0x9463('0x41')](_0x18723a);})[_0x9463('0x20')](function(_0x2ca73f){_0xb39a03[_0x9463('0x42')]=_0x2ca73f;return _0xb39a03;})[_0x9463('0x20')](respondWithFilteredResult(_0x22d768,_0x18723a))[_0x9463('0x43')](handleError(_0x22d768,null));};exports['show']=function(_0x4c391b,_0xf656e5){var _0x193958={'raw':!![],'where':{'id':_0x4c391b[_0x9463('0x44')]['id']}},_0x372b6a={};_0x372b6a['model']=_[_0x9463('0x2c')](db['AnalyticExtractedReport'][_0x9463('0x2a')]);_0x372b6a['query']=_[_0x9463('0x2c')](_0x4c391b[_0x9463('0x2b')]);_0x372b6a['filters']=_[_0x9463('0x2d')](_0x372b6a[_0x9463('0x2e')],_0x372b6a['query']);_0x193958[_0x9463('0x2f')]=_[_0x9463('0x2d')](_0x372b6a[_0x9463('0x2e')],qs[_0x9463('0x30')](_0x4c391b[_0x9463('0x2b')][_0x9463('0x30')]));_0x193958[_0x9463('0x2f')]=_0x193958[_0x9463('0x2f')][_0x9463('0x31')]?_0x193958[_0x9463('0x2f')]:_0x372b6a[_0x9463('0x2e')];if(_0x4c391b[_0x9463('0x2b')][_0x9463('0x3f')]){_0x193958['include']=[{'all':!![]}];}_0x193958=_[_0x9463('0x45')]({},_0x193958,_0x4c391b['options']);return db[_0x9463('0x29')][_0x9463('0x46')](_0x193958)['then'](handleEntityNotFound(_0xf656e5,null))['then'](respondWithResult(_0xf656e5,null))['catch'](handleError(_0xf656e5,null));};exports[_0x9463('0x47')]=function(_0x585709,_0x52f83a){return db[_0x9463('0x29')][_0x9463('0x47')](_0x585709[_0x9463('0x48')],{})[_0x9463('0x20')](function(_0x491eb7){var _0x4b375f=_0x585709[_0x9463('0x49')][_0x9463('0x22')]({'plain':!![]});if(!_0x4b375f)throw new Error(_0x9463('0x4a'));if(_0x4b375f[_0x9463('0x4b')]===_0x9463('0x49')){var _0x2b6277=_0x491eb7[_0x9463('0x22')]({'plain':!![]});var _0x2648f3=_0x9463('0x23');return db[_0x9463('0x4c')]['find']({'where':{'name':_0x2648f3,'userProfileId':_0x4b375f[_0x9463('0x4d')]},'raw':!![]})[_0x9463('0x20')](function(_0x4b8478){if(_0x4b8478&&_0x4b8478[_0x9463('0x4e')]===0x0){return db[_0x9463('0x24')][_0x9463('0x47')]({'name':_0x2b6277['name'],'resourceId':_0x2b6277['id'],'type':_0x4b8478[_0x9463('0x27')],'sectionId':_0x4b8478['id']},{})[_0x9463('0x20')](function(){return _0x491eb7;});}else{return _0x491eb7;}})[_0x9463('0x43')](function(_0x47ed44){logger[_0x9463('0x25')](_0x9463('0x4f'),_0x47ed44);throw _0x47ed44;});}return _0x491eb7;})[_0x9463('0x20')](respondWithResult(_0x52f83a,0xc9))[_0x9463('0x43')](handleError(_0x52f83a,null));};exports['update']=function(_0x3e7ef9,_0x1f84f3){if(_0x3e7ef9[_0x9463('0x48')]['id']){delete _0x3e7ef9[_0x9463('0x48')]['id'];}return db[_0x9463('0x29')]['find']({'where':{'id':_0x3e7ef9[_0x9463('0x44')]['id']}})[_0x9463('0x20')](handleEntityNotFound(_0x1f84f3,null))[_0x9463('0x20')](saveUpdates(_0x3e7ef9['body'],null))[_0x9463('0x20')](respondWithResult(_0x1f84f3,null))['catch'](handleError(_0x1f84f3,null));};exports['destroy']=function(_0x457f1f,_0x240059){return db['AnalyticExtractedReport'][_0x9463('0x46')]({'where':{'id':_0x457f1f[_0x9463('0x44')]['id']}})[_0x9463('0x20')](handleEntityNotFound(_0x240059,null))[_0x9463('0x20')](removeEntity(_0x240059,null))['catch'](handleError(_0x240059,null));};exports[_0x9463('0x50')]=function(_0x19727d,_0x300b38,_0x32bb49){return db[_0x9463('0x29')][_0x9463('0x46')]({'where':{'id':_0x19727d['params']['id']},'attributes':[_0x9463('0x27'),_0x9463('0x51'),_0x9463('0x52'),'output'],'raw':!![]})[_0x9463('0x20')](handleEntityNotFound(_0x300b38,null))[_0x9463('0x20')](function(_0x2486cf){if(_0x2486cf){if(!fs[_0x9463('0x53')](path['join'](config['root'],'server/files/reports',_0x2486cf[_0x9463('0x52')]))){throw new db['Sequelize'][(_0x9463('0x54'))](_0x9463('0x55'));}if(_0x19727d[_0x9463('0x2b')]['exists']){return _0x300b38[_0x9463('0x16')](0xc8);}return _0x300b38[_0x9463('0x50')](path['join'](config[_0x9463('0x56')],_0x9463('0x57'),_0x2486cf[_0x9463('0x52')]),util[_0x9463('0x58')](_0x9463('0x59'),_0x2486cf[_0x9463('0x51')]||_0x2486cf[_0x9463('0x27')],_0x2486cf[_0x9463('0x5a')]['toLowerCase']()));}})[_0x9463('0x43')](handleError(_0x300b38,null));};
\ No newline at end of file
index cc59485..4a056ac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd50=['util','../../config/logger','moment','bluebird','request-promise','path','rimraf','define','AnalyticExtractedReport','analytics_extracted_reports','lodash'];(function(_0x40174f,_0x3a6751){var _0x40717c=function(_0x5ae03d){while(--_0x5ae03d){_0x40174f['push'](_0x40174f['shift']());}};_0x40717c(++_0x3a6751);}(_0xbd50,0x196));var _0x0bd5=function(_0x27d701,_0x28905d){_0x27d701=_0x27d701-0x0;var _0x1746a2=_0xbd50[_0x27d701];return _0x1746a2;};'use strict';var _=require(_0x0bd5('0x0'));var util=require(_0x0bd5('0x1'));var logger=require(_0x0bd5('0x2'))('api');var moment=require(_0x0bd5('0x3'));var BPromise=require(_0x0bd5('0x4'));var rp=require(_0x0bd5('0x5'));var fs=require('fs');var path=require(_0x0bd5('0x6'));var rimraf=require(_0x0bd5('0x7'));var config=require('../../config/environment');var attributes=require('./analyticExtractedReport.attributes');module['exports']=function(_0x376024,_0x2ef1d0){return _0x376024[_0x0bd5('0x8')](_0x0bd5('0x9'),attributes,{'tableName':_0x0bd5('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x55ca=['./analyticExtractedReport.attributes','exports','define','analytics_extracted_reports','lodash','util','bluebird','request-promise','rimraf','../../config/environment'];(function(_0x4605dc,_0x3f7ae5){var _0x5d3e81=function(_0x1d0375){while(--_0x1d0375){_0x4605dc['push'](_0x4605dc['shift']());}};_0x5d3e81(++_0x3f7ae5);}(_0x55ca,0x126));var _0xa55c=function(_0x34ecea,_0x3d11ce){_0x34ecea=_0x34ecea-0x0;var _0x44b6a8=_0x55ca[_0x34ecea];return _0x44b6a8;};'use strict';var _=require(_0xa55c('0x0'));var util=require(_0xa55c('0x1'));var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0xa55c('0x2'));var rp=require(_0xa55c('0x3'));var fs=require('fs');var path=require('path');var rimraf=require(_0xa55c('0x4'));var config=require(_0xa55c('0x5'));var attributes=require(_0xa55c('0x6'));module[_0xa55c('0x7')]=function(_0x3c97c8,_0x279caa){return _0x3c97c8[_0xa55c('0x8')]('AnalyticExtractedReport',attributes,{'tableName':_0xa55c('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 66e5594..2628b5d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a2d=['stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','AnalyticExtractedReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticExtractedReport,\x20%s,\x20%s,\x20%s'];(function(_0x3e2fcf,_0x579110){var _0x497db7=function(_0x2f713d){while(--_0x2f713d){_0x3e2fcf['push'](_0x3e2fcf['shift']());}};_0x497db7(++_0x579110);}(_0x0a2d,0x132));var _0xd0a2=function(_0x412cca,_0x3f3fa2){_0x412cca=_0x412cca-0x0;var _0x19279e=_0x0a2d[_0x412cca];return _0x19279e;};'use strict';var _=require(_0xd0a2('0x0'));var util=require(_0xd0a2('0x1'));var moment=require(_0xd0a2('0x2'));var BPromise=require(_0xd0a2('0x3'));var rs=require(_0xd0a2('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xd0a2('0x5'))['db'];var utils=require(_0xd0a2('0x6'));var logger=require(_0xd0a2('0x7'))('rpc');var config=require(_0xd0a2('0x8'));var jayson=require(_0xd0a2('0x9'));var client=jayson[_0xd0a2('0xa')][_0xd0a2('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5e5c0a,_0x42fcf9,_0x2c6579){return new BPromise(function(_0x43b679,_0x3b4565){return client[_0xd0a2('0xc')](_0x5e5c0a,_0x2c6579)[_0xd0a2('0xd')](function(_0x206c67){logger[_0xd0a2('0xe')](_0xd0a2('0xf'),_0x42fcf9,_0xd0a2('0x10'));logger[_0xd0a2('0x11')](_0xd0a2('0x12'),_0x42fcf9,_0xd0a2('0x10'),JSON[_0xd0a2('0x13')](_0x206c67));if(_0x206c67['error']){if(_0x206c67[_0xd0a2('0x14')][_0xd0a2('0x15')]===0x1f4){logger['error'](_0xd0a2('0xf'),_0x42fcf9,_0x206c67[_0xd0a2('0x14')][_0xd0a2('0x16')]);return _0x3b4565(_0x206c67['error'][_0xd0a2('0x16')]);}logger['error'](_0xd0a2('0xf'),_0x42fcf9,_0x206c67[_0xd0a2('0x14')][_0xd0a2('0x16')]);return _0x43b679(_0x206c67['error']['message']);}else{logger[_0xd0a2('0xe')](_0xd0a2('0xf'),_0x42fcf9,_0xd0a2('0x10'));_0x43b679(_0x206c67[_0xd0a2('0x17')][_0xd0a2('0x16')]);}})[_0xd0a2('0x18')](function(_0x3ac14a){logger['error'](_0xd0a2('0xf'),_0x42fcf9,_0x3ac14a);_0x3b4565(_0x3ac14a);});});}
\ No newline at end of file
+var _0x19d2=['util','bluebird','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','then','request\x20sent','debug','AnalyticExtractedReport,\x20%s,\x20%s,\x20%s','stringify','error','code','AnalyticExtractedReport,\x20%s,\x20%s','message','info','result','catch','lodash'];(function(_0x551b1c,_0x3584f9){var _0x131273=function(_0x553185){while(--_0x553185){_0x551b1c['push'](_0x551b1c['shift']());}};_0x131273(++_0x3584f9);}(_0x19d2,0x110));var _0x219d=function(_0x455a19,_0xdd621d){_0x455a19=_0x455a19-0x0;var _0x1eae79=_0x19d2[_0x455a19];return _0x1eae79;};'use strict';var _=require(_0x219d('0x0'));var util=require(_0x219d('0x1'));var moment=require('moment');var BPromise=require(_0x219d('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x219d('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x219d('0x4'));var logger=require(_0x219d('0x5'))('rpc');var config=require(_0x219d('0x6'));var jayson=require(_0x219d('0x7'));var client=jayson[_0x219d('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0xf1730c,_0x464581,_0x18ebdb){return new BPromise(function(_0x417891,_0x387588){return client['request'](_0xf1730c,_0x18ebdb)[_0x219d('0x9')](function(_0x29336d){logger['info']('AnalyticExtractedReport,\x20%s,\x20%s',_0x464581,_0x219d('0xa'));logger[_0x219d('0xb')](_0x219d('0xc'),_0x464581,'request\x20sent',JSON[_0x219d('0xd')](_0x29336d));if(_0x29336d[_0x219d('0xe')]){if(_0x29336d[_0x219d('0xe')][_0x219d('0xf')]===0x1f4){logger['error'](_0x219d('0x10'),_0x464581,_0x29336d['error'][_0x219d('0x11')]);return _0x387588(_0x29336d[_0x219d('0xe')][_0x219d('0x11')]);}logger[_0x219d('0xe')](_0x219d('0x10'),_0x464581,_0x29336d[_0x219d('0xe')][_0x219d('0x11')]);return _0x417891(_0x29336d[_0x219d('0xe')][_0x219d('0x11')]);}else{logger[_0x219d('0x12')](_0x219d('0x10'),_0x464581,_0x219d('0xa'));_0x417891(_0x29336d[_0x219d('0x13')][_0x219d('0x11')]);}})[_0x219d('0x14')](function(_0xb74748){logger[_0x219d('0xe')](_0x219d('0x10'),_0x464581,_0xb74748);_0x387588(_0xb74748);});});}
\ No newline at end of file
index 648bc69..e01813d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd04e=['create','put','/:id','update','delete','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','index','get','show','/:id/download','isAuthenticated','post'];(function(_0x13228c,_0x57df23){var _0x282fde=function(_0xa6b7f4){while(--_0xa6b7f4){_0x13228c['push'](_0x13228c['shift']());}};_0x282fde(++_0x57df23);}(_0xd04e,0x157));var _0xed04=function(_0x36884e,_0x48008f){_0x36884e=_0x36884e-0x0;var _0x1cc367=_0xd04e[_0x36884e];return _0x1cc367;};'use strict';var multer=require(_0xed04('0x0'));var util=require(_0xed04('0x1'));var path=require(_0xed04('0x2'));var timeout=require(_0xed04('0x3'));var express=require('express');var router=express[_0xed04('0x4')]();var auth=require(_0xed04('0x5'));var interaction=require(_0xed04('0x6'));var config=require(_0xed04('0x7'));var controller=require('./analyticExtractedReport.controller');router['get']('/',auth['isAuthenticated'](),controller[_0xed04('0x8')]);router[_0xed04('0x9')]('/:id',auth['isAuthenticated'](),controller[_0xed04('0xa')]);router[_0xed04('0x9')](_0xed04('0xb'),auth[_0xed04('0xc')](),controller['download']);router[_0xed04('0xd')]('/',auth[_0xed04('0xc')](),controller[_0xed04('0xe')]);router[_0xed04('0xf')](_0xed04('0x10'),auth[_0xed04('0xc')](),controller[_0xed04('0x11')]);router[_0xed04('0x12')]('/:id',auth[_0xed04('0xc')](),controller[_0xed04('0x13')]);module[_0xed04('0x14')]=router;
\ No newline at end of file
+var _0x80eb=['connect-timeout','express','Router','../../components/auth/service','../../config/environment','./analyticExtractedReport.controller','get','isAuthenticated','index','/:id/download','download','post','create','put','/:id','update','delete','destroy','exports','multer','util','path'];(function(_0x27af45,_0x1b57aa){var _0x18df21=function(_0x4b7679){while(--_0x4b7679){_0x27af45['push'](_0x27af45['shift']());}};_0x18df21(++_0x1b57aa);}(_0x80eb,0xad));var _0xb80e=function(_0x50e497,_0x4abf66){_0x50e497=_0x50e497-0x0;var _0x50b29e=_0x80eb[_0x50e497];return _0x50b29e;};'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[_0xb80e('0x5')]();var auth=require(_0xb80e('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0xb80e('0x7'));var controller=require(_0xb80e('0x8'));router[_0xb80e('0x9')]('/',auth[_0xb80e('0xa')](),controller[_0xb80e('0xb')]);router['get']('/:id',auth['isAuthenticated'](),controller['show']);router['get'](_0xb80e('0xc'),auth['isAuthenticated'](),controller[_0xb80e('0xd')]);router[_0xb80e('0xe')]('/',auth[_0xb80e('0xa')](),controller[_0xb80e('0xf')]);router[_0xb80e('0x10')](_0xb80e('0x11'),auth[_0xb80e('0xa')](),controller[_0xb80e('0x12')]);router[_0xb80e('0x13')]('/:id',auth['isAuthenticated'](),controller[_0xb80e('0x14')]);module[_0xb80e('0x15')]=router;
\ No newline at end of file
index f8a1053..443de7b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9d81=['sequelize','exports','TEXT','STRING','BOOLEAN'];(function(_0x449f33,_0x31bd68){var _0x1064fa=function(_0xcb2797){while(--_0xcb2797){_0x449f33['push'](_0x449f33['shift']());}};_0x1064fa(++_0x31bd68);}(_0x9d81,0x1d6));var _0x19d8=function(_0x21a9d9,_0x4d5ac8){_0x21a9d9=_0x21a9d9-0x0;var _0x46adce=_0x9d81[_0x21a9d9];return _0x46adce;};'use strict';var Sequelize=require(_0x19d8('0x0'));module[_0x19d8('0x1')]={'field':{'type':Sequelize[_0x19d8('0x2')]},'alias':{'type':Sequelize['STRING']},'function':{'type':Sequelize[_0x19d8('0x3')]},'format':{'type':Sequelize[_0x19d8('0x3')]},'groupBy':{'type':Sequelize[_0x19d8('0x4')],'defaultValue':![]},'orderBy':{'type':Sequelize[_0x19d8('0x3')]},'custom':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
+var _0xc352=['STRING','sequelize','exports','TEXT'];(function(_0xa77b43,_0xd3ad7d){var _0x5b584c=function(_0x1c483b){while(--_0x1c483b){_0xa77b43['push'](_0xa77b43['shift']());}};_0x5b584c(++_0xd3ad7d);}(_0xc352,0x89));var _0x2c35=function(_0x5d2803,_0xf375bd){_0x5d2803=_0x5d2803-0x0;var _0xdcad2c=_0xc352[_0x5d2803];return _0xdcad2c;};'use strict';var Sequelize=require(_0x2c35('0x0'));module[_0x2c35('0x1')]={'field':{'type':Sequelize[_0x2c35('0x2')]},'alias':{'type':Sequelize[_0x2c35('0x3')]},'function':{'type':Sequelize[_0x2c35('0x3')]},'format':{'type':Sequelize['STRING']},'groupBy':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'orderBy':{'type':Sequelize[_0x2c35('0x3')]},'custom':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
index 3a52f49..2dbc0f0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa990=['length','attributes','hasOwnProperty','nolimit','offset','order','sort','where','merge','map','type','key','VIRTUAL','field','filter','includeAll','include','rows','catch','show','rawAttributes','options','create','body','bulkCreate','find','params','ids','addFields','AnalyticCustomReport','findOne','sequelize','transaction','CustomReportId','findAll','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','limit','set','Content-Range','apply','reject','update','destroy','then','error','name','send','index','AnalyticFieldReport','query','keys','filters','intersection','model','fields'];(function(_0x52bb4c,_0x59a46c){var _0x164c90=function(_0x286fbc){while(--_0x286fbc){_0x52bb4c['push'](_0x52bb4c['shift']());}};_0x164c90(++_0x59a46c);}(_0xa990,0xc9));var _0x0a99=function(_0x17303c,_0x40e3d7){_0x17303c=_0x17303c-0x0;var _0x29aaeb=_0xa990[_0x17303c];return _0x29aaeb;};'use strict';var pdf=require(_0x0a99('0x0'));var emlformat=require(_0x0a99('0x1'));var rimraf=require(_0x0a99('0x2'));var zipdir=require(_0x0a99('0x3'));var jsonpatch=require(_0x0a99('0x4'));var rp=require(_0x0a99('0x5'));var moment=require(_0x0a99('0x6'));var BPromise=require(_0x0a99('0x7'));var Mustache=require('mustache');var util=require('util');var path=require(_0x0a99('0x8'));var sox=require(_0x0a99('0x9'));var csv=require(_0x0a99('0xa'));var ejs=require(_0x0a99('0xb'));var fs=require('fs');var _=require(_0x0a99('0xc'));var squel=require(_0x0a99('0xd'));var crypto=require(_0x0a99('0xe'));var jsforce=require(_0x0a99('0xf'));var deskjs=require(_0x0a99('0x10'));var toCsv=require(_0x0a99('0xa'));var querystring=require(_0x0a99('0x11'));var Papa=require('papaparse');var Redis=require(_0x0a99('0x12'));var authService=require(_0x0a99('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0x0a99('0x14'))(_0x0a99('0x15'));var utils=require(_0x0a99('0x16'));var config=require(_0x0a99('0x17'));var db=require(_0x0a99('0x18'))['db'];function respondWithStatusCode(_0x515c6b,_0xbb3980){_0xbb3980=_0xbb3980||0xcc;return function(_0x3aaaad){if(_0x3aaaad){return _0x515c6b['sendStatus'](_0xbb3980);}return _0x515c6b[_0x0a99('0x19')](_0xbb3980)[_0x0a99('0x1a')]();};}function respondWithResult(_0x11d15f,_0x2bbf1a){_0x2bbf1a=_0x2bbf1a||0xc8;return function(_0x346061){if(_0x346061){return _0x11d15f[_0x0a99('0x19')](_0x2bbf1a)[_0x0a99('0x1b')](_0x346061);}};}function respondWithFilteredResult(_0x2ff68d,_0x4b6946){return function(_0x5a17e1){if(_0x5a17e1){var _0x2c40db=_0x5a17e1[_0x0a99('0x1c')],_0x3ac17e=_0x4b6946['offset'],_0xb7356c=_0x4b6946['offset']+_0x4b6946[_0x0a99('0x1d')],_0x49653c;if(_0xb7356c>=_0x2c40db){_0xb7356c=_0x2c40db;_0x49653c=0xc8;}else{_0x49653c=0xce;}_0x2ff68d[_0x0a99('0x19')](_0x49653c);return _0x2ff68d[_0x0a99('0x1e')](_0x0a99('0x1f'),_0x3ac17e+'-'+_0xb7356c+'/'+_0x2c40db)['json'](_0x5a17e1);}return null;};}function patchUpdates(_0x564ae9){return function(_0x27a14f){try{jsonpatch[_0x0a99('0x20')](_0x27a14f,_0x564ae9,!![]);}catch(_0xbe23f3){return BPromise[_0x0a99('0x21')](_0xbe23f3);}return _0x27a14f['save']();};}function saveUpdates(_0x58c86d,_0x1b0279){return function(_0x4d0c78){if(_0x4d0c78){return _0x4d0c78[_0x0a99('0x22')](_0x58c86d)['then'](function(_0x191ee4){return _0x191ee4;});}return null;};}function removeEntity(_0x59da66,_0x1b8324){return function(_0x356681){if(_0x356681){return _0x356681[_0x0a99('0x23')]()[_0x0a99('0x24')](function(){_0x59da66[_0x0a99('0x19')](0xcc)[_0x0a99('0x1a')]();});}};}function handleEntityNotFound(_0x19c870,_0x1d803c){return function(_0x398dd2){if(!_0x398dd2){_0x19c870['sendStatus'](0x194);}return _0x398dd2;};}function handleError(_0x5258b9,_0x463e02){_0x463e02=_0x463e02||0x1f4;return function(_0xcd088){logger[_0x0a99('0x25')](_0xcd088['stack']);if(_0xcd088['name']){delete _0xcd088[_0x0a99('0x26')];}_0x5258b9[_0x0a99('0x19')](_0x463e02)[_0x0a99('0x27')](_0xcd088);};}exports[_0x0a99('0x28')]=function(_0x10e70f,_0x3fd406){var _0x25b4c0={},_0x2f104a={},_0x163031={'count':0x0,'rows':[]};var _0x5722f9=db[_0x0a99('0x29')]['rawAttributes'];_0x2f104a['model']=_['keys'](_0x5722f9);_0x2f104a[_0x0a99('0x2a')]=_[_0x0a99('0x2b')](_0x10e70f[_0x0a99('0x2a')]);_0x2f104a[_0x0a99('0x2c')]=_[_0x0a99('0x2d')](_0x2f104a[_0x0a99('0x2e')],_0x2f104a[_0x0a99('0x2a')]);_0x25b4c0['attributes']=_[_0x0a99('0x2d')](_0x2f104a[_0x0a99('0x2e')],qs[_0x0a99('0x2f')](_0x10e70f[_0x0a99('0x2a')]['fields']));_0x25b4c0['attributes']=_0x25b4c0['attributes'][_0x0a99('0x30')]?_0x25b4c0[_0x0a99('0x31')]:_0x2f104a[_0x0a99('0x2e')];if(!_0x10e70f['query'][_0x0a99('0x32')](_0x0a99('0x33'))){_0x25b4c0[_0x0a99('0x1d')]=qs[_0x0a99('0x1d')](_0x10e70f[_0x0a99('0x2a')][_0x0a99('0x1d')]);_0x25b4c0[_0x0a99('0x34')]=qs['offset'](_0x10e70f[_0x0a99('0x2a')][_0x0a99('0x34')]);}_0x25b4c0[_0x0a99('0x35')]=qs[_0x0a99('0x36')](_0x10e70f[_0x0a99('0x2a')]['sort']);_0x25b4c0[_0x0a99('0x37')]=qs['filters'](_['pick'](_0x10e70f['query'],_0x2f104a['filters']));if(_0x10e70f[_0x0a99('0x2a')]['filter']){_0x25b4c0[_0x0a99('0x37')]=_[_0x0a99('0x38')](_0x25b4c0[_0x0a99('0x37')],{'$or':_[_0x0a99('0x39')](_0x5722f9,function(_0x414a0f){if(_0x414a0f[_0x0a99('0x3a')][_0x0a99('0x3b')]!==_0x0a99('0x3c')){var _0x17bb43={};_0x17bb43[_0x414a0f[_0x0a99('0x3d')]]={'$like':'%'+_0x10e70f[_0x0a99('0x2a')][_0x0a99('0x3e')]+'%'};return _0x17bb43;}})});}_0x25b4c0=_[_0x0a99('0x38')]({},_0x25b4c0,_0x10e70f['options']);var _0x34f122={'where':_0x25b4c0[_0x0a99('0x37')]};return db['AnalyticFieldReport'][_0x0a99('0x1c')](_0x34f122)['then'](function(_0x16a8a7){_0x163031['count']=_0x16a8a7;if(_0x10e70f[_0x0a99('0x2a')][_0x0a99('0x3f')]){_0x25b4c0[_0x0a99('0x40')]=[{'all':!![]}];}return db[_0x0a99('0x29')]['findAll'](_0x25b4c0);})[_0x0a99('0x24')](function(_0x11e046){_0x163031[_0x0a99('0x41')]=_0x11e046;return _0x163031;})['then'](respondWithFilteredResult(_0x3fd406,_0x25b4c0))[_0x0a99('0x42')](handleError(_0x3fd406,null));};exports[_0x0a99('0x43')]=function(_0x23e4b9,_0x1abeb0){var _0x5acfbc={'raw':![],'where':{'id':_0x23e4b9['params']['id']}},_0x46e690={};_0x46e690['model']=_[_0x0a99('0x2b')](db['AnalyticFieldReport'][_0x0a99('0x44')]);_0x46e690['query']=_[_0x0a99('0x2b')](_0x23e4b9[_0x0a99('0x2a')]);_0x46e690[_0x0a99('0x2c')]=_[_0x0a99('0x2d')](_0x46e690['model'],_0x46e690[_0x0a99('0x2a')]);_0x5acfbc[_0x0a99('0x31')]=_[_0x0a99('0x2d')](_0x46e690[_0x0a99('0x2e')],qs['fields'](_0x23e4b9['query']['fields']));_0x5acfbc[_0x0a99('0x31')]=_0x5acfbc['attributes'][_0x0a99('0x30')]?_0x5acfbc['attributes']:_0x46e690['model'];if(_0x23e4b9['query']['includeAll']){_0x5acfbc[_0x0a99('0x40')]=[{'all':!![]}];}_0x5acfbc=_['merge']({},_0x5acfbc,_0x23e4b9[_0x0a99('0x45')]);return db[_0x0a99('0x29')]['find'](_0x5acfbc)[_0x0a99('0x24')](handleEntityNotFound(_0x1abeb0,null))[_0x0a99('0x24')](respondWithResult(_0x1abeb0,null))['catch'](handleError(_0x1abeb0,null));};exports[_0x0a99('0x46')]=function(_0x582eaf,_0x3107bc){return db[_0x0a99('0x29')]['create'](_0x582eaf[_0x0a99('0x47')],{})['then'](respondWithResult(_0x3107bc,0xc9))['catch'](handleError(_0x3107bc,null));};exports[_0x0a99('0x48')]=function(_0x32adca,_0xf91e54){return db[_0x0a99('0x29')][_0x0a99('0x48')](_0x32adca['body'],{'raw':![],'individualHooks':!![]})[_0x0a99('0x24')](respondWithResult(_0xf91e54,0xc9))[_0x0a99('0x42')](handleError(_0xf91e54,null));};exports[_0x0a99('0x22')]=function(_0x1800a5,_0x3d13e2){if(_0x1800a5[_0x0a99('0x47')]['id']){delete _0x1800a5[_0x0a99('0x47')]['id'];}return db[_0x0a99('0x29')][_0x0a99('0x49')]({'where':{'id':_0x1800a5[_0x0a99('0x4a')]['id']}})['then'](handleEntityNotFound(_0x3d13e2,null))['then'](saveUpdates(_0x1800a5[_0x0a99('0x47')],null))[_0x0a99('0x24')](respondWithResult(_0x3d13e2,null))[_0x0a99('0x42')](handleError(_0x3d13e2,null));};exports[_0x0a99('0x23')]=function(_0x6839ac,_0x3bfe1b){return db['AnalyticFieldReport'][_0x0a99('0x49')]({'where':{'id':_0x6839ac[_0x0a99('0x4a')]['id']}})['then'](handleEntityNotFound(_0x3bfe1b,null))[_0x0a99('0x24')](removeEntity(_0x3bfe1b,null))[_0x0a99('0x42')](handleError(_0x3bfe1b,null));};exports['bulkDestroy']=function(_0x32d7f1,_0x33af4){return db[_0x0a99('0x29')][_0x0a99('0x23')]({'where':{'id':_0x32d7f1[_0x0a99('0x2a')][_0x0a99('0x4b')]||[]},'raw':![],'individualHooks':!![]})[_0x0a99('0x24')](respondWithResult(_0x33af4,0xcc))['catch'](handleError(_0x33af4,null));};exports[_0x0a99('0x4c')]=function(_0x1b6873,_0x1e9e9d,_0x5a6762){return db[_0x0a99('0x4d')][_0x0a99('0x4e')]({'where':{'id':_0x1b6873[_0x0a99('0x4a')]['id']}})['then'](handleEntityNotFound(_0x1e9e9d,null))[_0x0a99('0x24')](function(_0x39b55f){if(_0x39b55f){return db[_0x0a99('0x4f')][_0x0a99('0x50')](function(_0xf25280){return db[_0x0a99('0x29')]['destroy']({'where':{'CustomReportId':_0x1b6873[_0x0a99('0x4a')]['id']},'transaction':_0xf25280})['then'](function(_0x2d8bae){var _0x72e64f=_[_0x0a99('0x39')](_0x1b6873[_0x0a99('0x47')],function(_0x5d1505){delete _0x5d1505['id'];_0x5d1505[_0x0a99('0x51')]=_0x1b6873['params']['id'];return _0x5d1505;});return db[_0x0a99('0x29')][_0x0a99('0x48')](_0x72e64f,{'transaction':_0xf25280});});})[_0x0a99('0x24')](function(){return db[_0x0a99('0x29')][_0x0a99('0x52')]({'where':{'CustomReportId':_0x1b6873[_0x0a99('0x4a')]['id']}});});}})[_0x0a99('0x24')](respondWithResult(_0x1e9e9d,null))[_0x0a99('0x42')](handleError(_0x1e9e9d,null));};
\ No newline at end of file
+var _0x0add=['index','AnalyticFieldReport','rawAttributes','keys','query','filters','model','attributes','intersection','fields','length','hasOwnProperty','order','sort','where','filter','map','type','key','field','merge','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','bulkCreate','bulkDestroy','ids','addFields','AnalyticCustomReport','findOne','sequelize','transaction','CustomReportId','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','end','count','offset','limit','set','json','apply','reject','save','update','destroy','then','sendStatus','error','stack','name','send'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x0add,0x122));var _0xd0ad=function(_0x680821,_0x23e67f){_0x680821=_0x680821-0x0;var _0x3f132c=_0x0add[_0x680821];return _0x3f132c;};'use strict';var pdf=require(_0xd0ad('0x0'));var emlformat=require(_0xd0ad('0x1'));var rimraf=require(_0xd0ad('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xd0ad('0x3'));var rp=require(_0xd0ad('0x4'));var moment=require(_0xd0ad('0x5'));var BPromise=require(_0xd0ad('0x6'));var Mustache=require(_0xd0ad('0x7'));var util=require(_0xd0ad('0x8'));var path=require('path');var sox=require(_0xd0ad('0x9'));var csv=require(_0xd0ad('0xa'));var ejs=require(_0xd0ad('0xb'));var fs=require('fs');var _=require(_0xd0ad('0xc'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xd0ad('0xd'));var deskjs=require(_0xd0ad('0xe'));var toCsv=require(_0xd0ad('0xa'));var querystring=require(_0xd0ad('0xf'));var Papa=require(_0xd0ad('0x10'));var Redis=require('ioredis');var authService=require(_0xd0ad('0x11'));var qs=require(_0xd0ad('0x12'));var hardwareService=require(_0xd0ad('0x13'));var logger=require(_0xd0ad('0x14'))('api');var utils=require(_0xd0ad('0x15'));var config=require(_0xd0ad('0x16'));var db=require(_0xd0ad('0x17'))['db'];function respondWithStatusCode(_0x34df75,_0x192156){_0x192156=_0x192156||0xcc;return function(_0x1c167b){if(_0x1c167b){return _0x34df75['sendStatus'](_0x192156);}return _0x34df75[_0xd0ad('0x18')](_0x192156)[_0xd0ad('0x19')]();};}function respondWithResult(_0x6b90c8,_0x561cda){_0x561cda=_0x561cda||0xc8;return function(_0xdffaf7){if(_0xdffaf7){return _0x6b90c8['status'](_0x561cda)['json'](_0xdffaf7);}};}function respondWithFilteredResult(_0x23aa58,_0x59ef54){return function(_0x56df01){if(_0x56df01){var _0x259516=_0x56df01[_0xd0ad('0x1a')],_0x5250ac=_0x59ef54[_0xd0ad('0x1b')],_0x24fcd7=_0x59ef54[_0xd0ad('0x1b')]+_0x59ef54[_0xd0ad('0x1c')],_0x28bf33;if(_0x24fcd7>=_0x259516){_0x24fcd7=_0x259516;_0x28bf33=0xc8;}else{_0x28bf33=0xce;}_0x23aa58[_0xd0ad('0x18')](_0x28bf33);return _0x23aa58[_0xd0ad('0x1d')]('Content-Range',_0x5250ac+'-'+_0x24fcd7+'/'+_0x259516)[_0xd0ad('0x1e')](_0x56df01);}return null;};}function patchUpdates(_0x3db005){return function(_0x22c794){try{jsonpatch[_0xd0ad('0x1f')](_0x22c794,_0x3db005,!![]);}catch(_0x44f1fb){return BPromise[_0xd0ad('0x20')](_0x44f1fb);}return _0x22c794[_0xd0ad('0x21')]();};}function saveUpdates(_0x4fd067,_0x562326){return function(_0xe2aaf2){if(_0xe2aaf2){return _0xe2aaf2[_0xd0ad('0x22')](_0x4fd067)['then'](function(_0x1cd318){return _0x1cd318;});}return null;};}function removeEntity(_0x503581,_0x4133ec){return function(_0x4e7c42){if(_0x4e7c42){return _0x4e7c42[_0xd0ad('0x23')]()[_0xd0ad('0x24')](function(){_0x503581['status'](0xcc)[_0xd0ad('0x19')]();});}};}function handleEntityNotFound(_0x135828,_0x2fee25){return function(_0x54e91c){if(!_0x54e91c){_0x135828[_0xd0ad('0x25')](0x194);}return _0x54e91c;};}function handleError(_0x14ad89,_0x817b51){_0x817b51=_0x817b51||0x1f4;return function(_0x3dbd76){logger[_0xd0ad('0x26')](_0x3dbd76[_0xd0ad('0x27')]);if(_0x3dbd76[_0xd0ad('0x28')]){delete _0x3dbd76[_0xd0ad('0x28')];}_0x14ad89[_0xd0ad('0x18')](_0x817b51)[_0xd0ad('0x29')](_0x3dbd76);};}exports[_0xd0ad('0x2a')]=function(_0x4ac3eb,_0x1f20d9){var _0x23df2e={},_0xec7318={},_0x28a385={'count':0x0,'rows':[]};var _0x253a73=db[_0xd0ad('0x2b')][_0xd0ad('0x2c')];_0xec7318['model']=_[_0xd0ad('0x2d')](_0x253a73);_0xec7318[_0xd0ad('0x2e')]=_[_0xd0ad('0x2d')](_0x4ac3eb[_0xd0ad('0x2e')]);_0xec7318[_0xd0ad('0x2f')]=_['intersection'](_0xec7318[_0xd0ad('0x30')],_0xec7318[_0xd0ad('0x2e')]);_0x23df2e[_0xd0ad('0x31')]=_[_0xd0ad('0x32')](_0xec7318[_0xd0ad('0x30')],qs[_0xd0ad('0x33')](_0x4ac3eb[_0xd0ad('0x2e')]['fields']));_0x23df2e[_0xd0ad('0x31')]=_0x23df2e[_0xd0ad('0x31')][_0xd0ad('0x34')]?_0x23df2e['attributes']:_0xec7318['model'];if(!_0x4ac3eb[_0xd0ad('0x2e')][_0xd0ad('0x35')]('nolimit')){_0x23df2e['limit']=qs[_0xd0ad('0x1c')](_0x4ac3eb[_0xd0ad('0x2e')][_0xd0ad('0x1c')]);_0x23df2e['offset']=qs[_0xd0ad('0x1b')](_0x4ac3eb[_0xd0ad('0x2e')][_0xd0ad('0x1b')]);}_0x23df2e[_0xd0ad('0x36')]=qs[_0xd0ad('0x37')](_0x4ac3eb['query'][_0xd0ad('0x37')]);_0x23df2e[_0xd0ad('0x38')]=qs['filters'](_['pick'](_0x4ac3eb['query'],_0xec7318[_0xd0ad('0x2f')]));if(_0x4ac3eb['query'][_0xd0ad('0x39')]){_0x23df2e[_0xd0ad('0x38')]=_['merge'](_0x23df2e[_0xd0ad('0x38')],{'$or':_[_0xd0ad('0x3a')](_0x253a73,function(_0x3bc47d){if(_0x3bc47d[_0xd0ad('0x3b')][_0xd0ad('0x3c')]!=='VIRTUAL'){var _0x4aa0c6={};_0x4aa0c6[_0x3bc47d[_0xd0ad('0x3d')]]={'$like':'%'+_0x4ac3eb[_0xd0ad('0x2e')][_0xd0ad('0x39')]+'%'};return _0x4aa0c6;}})});}_0x23df2e=_[_0xd0ad('0x3e')]({},_0x23df2e,_0x4ac3eb[_0xd0ad('0x3f')]);var _0x344ad5={'where':_0x23df2e[_0xd0ad('0x38')]};return db[_0xd0ad('0x2b')]['count'](_0x344ad5)[_0xd0ad('0x24')](function(_0x1db811){_0x28a385['count']=_0x1db811;if(_0x4ac3eb['query'][_0xd0ad('0x40')]){_0x23df2e[_0xd0ad('0x41')]=[{'all':!![]}];}return db[_0xd0ad('0x2b')][_0xd0ad('0x42')](_0x23df2e);})[_0xd0ad('0x24')](function(_0x586b50){_0x28a385[_0xd0ad('0x43')]=_0x586b50;return _0x28a385;})['then'](respondWithFilteredResult(_0x1f20d9,_0x23df2e))[_0xd0ad('0x44')](handleError(_0x1f20d9,null));};exports[_0xd0ad('0x45')]=function(_0x54c99c,_0x341024){var _0x5dce32={'raw':![],'where':{'id':_0x54c99c[_0xd0ad('0x46')]['id']}},_0x4170d4={};_0x4170d4[_0xd0ad('0x30')]=_[_0xd0ad('0x2d')](db[_0xd0ad('0x2b')]['rawAttributes']);_0x4170d4[_0xd0ad('0x2e')]=_[_0xd0ad('0x2d')](_0x54c99c[_0xd0ad('0x2e')]);_0x4170d4[_0xd0ad('0x2f')]=_['intersection'](_0x4170d4['model'],_0x4170d4[_0xd0ad('0x2e')]);_0x5dce32[_0xd0ad('0x31')]=_[_0xd0ad('0x32')](_0x4170d4[_0xd0ad('0x30')],qs[_0xd0ad('0x33')](_0x54c99c[_0xd0ad('0x2e')]['fields']));_0x5dce32[_0xd0ad('0x31')]=_0x5dce32['attributes'][_0xd0ad('0x34')]?_0x5dce32[_0xd0ad('0x31')]:_0x4170d4[_0xd0ad('0x30')];if(_0x54c99c[_0xd0ad('0x2e')]['includeAll']){_0x5dce32[_0xd0ad('0x41')]=[{'all':!![]}];}_0x5dce32=_['merge']({},_0x5dce32,_0x54c99c[_0xd0ad('0x3f')]);return db[_0xd0ad('0x2b')][_0xd0ad('0x47')](_0x5dce32)[_0xd0ad('0x24')](handleEntityNotFound(_0x341024,null))[_0xd0ad('0x24')](respondWithResult(_0x341024,null))[_0xd0ad('0x44')](handleError(_0x341024,null));};exports[_0xd0ad('0x48')]=function(_0x4d0a22,_0x1962c7){return db[_0xd0ad('0x2b')]['create'](_0x4d0a22[_0xd0ad('0x49')],{})[_0xd0ad('0x24')](respondWithResult(_0x1962c7,0xc9))[_0xd0ad('0x44')](handleError(_0x1962c7,null));};exports['bulkCreate']=function(_0x1b3ae2,_0x1a2d6e){return db[_0xd0ad('0x2b')][_0xd0ad('0x4a')](_0x1b3ae2[_0xd0ad('0x49')],{'raw':![],'individualHooks':!![]})[_0xd0ad('0x24')](respondWithResult(_0x1a2d6e,0xc9))[_0xd0ad('0x44')](handleError(_0x1a2d6e,null));};exports[_0xd0ad('0x22')]=function(_0x34edfa,_0x1bf41b){if(_0x34edfa[_0xd0ad('0x49')]['id']){delete _0x34edfa[_0xd0ad('0x49')]['id'];}return db[_0xd0ad('0x2b')][_0xd0ad('0x47')]({'where':{'id':_0x34edfa[_0xd0ad('0x46')]['id']}})[_0xd0ad('0x24')](handleEntityNotFound(_0x1bf41b,null))[_0xd0ad('0x24')](saveUpdates(_0x34edfa[_0xd0ad('0x49')],null))[_0xd0ad('0x24')](respondWithResult(_0x1bf41b,null))[_0xd0ad('0x44')](handleError(_0x1bf41b,null));};exports['destroy']=function(_0x3214d9,_0x2889b2){return db[_0xd0ad('0x2b')][_0xd0ad('0x47')]({'where':{'id':_0x3214d9[_0xd0ad('0x46')]['id']}})[_0xd0ad('0x24')](handleEntityNotFound(_0x2889b2,null))[_0xd0ad('0x24')](removeEntity(_0x2889b2,null))[_0xd0ad('0x44')](handleError(_0x2889b2,null));};exports[_0xd0ad('0x4b')]=function(_0x5ce3b0,_0x52ee79){return db[_0xd0ad('0x2b')]['destroy']({'where':{'id':_0x5ce3b0['query'][_0xd0ad('0x4c')]||[]},'raw':![],'individualHooks':!![]})['then'](respondWithResult(_0x52ee79,0xcc))['catch'](handleError(_0x52ee79,null));};exports[_0xd0ad('0x4d')]=function(_0x49d2a1,_0xbf66dd,_0x1a02fd){return db[_0xd0ad('0x4e')][_0xd0ad('0x4f')]({'where':{'id':_0x49d2a1[_0xd0ad('0x46')]['id']}})[_0xd0ad('0x24')](handleEntityNotFound(_0xbf66dd,null))['then'](function(_0x1b74a2){if(_0x1b74a2){return db[_0xd0ad('0x50')][_0xd0ad('0x51')](function(_0xd995d3){return db[_0xd0ad('0x2b')][_0xd0ad('0x23')]({'where':{'CustomReportId':_0x49d2a1[_0xd0ad('0x46')]['id']},'transaction':_0xd995d3})[_0xd0ad('0x24')](function(_0x16f303){var _0x4654cd=_['map'](_0x49d2a1[_0xd0ad('0x49')],function(_0x59bd79){delete _0x59bd79['id'];_0x59bd79[_0xd0ad('0x52')]=_0x49d2a1[_0xd0ad('0x46')]['id'];return _0x59bd79;});return db[_0xd0ad('0x2b')][_0xd0ad('0x4a')](_0x4654cd,{'transaction':_0xd995d3});});})[_0xd0ad('0x24')](function(){return db[_0xd0ad('0x2b')][_0xd0ad('0x42')]({'where':{'CustomReportId':_0x49d2a1[_0xd0ad('0x46')]['id']}});});}})['then'](respondWithResult(_0xbf66dd,null))[_0xd0ad('0x44')](handleError(_0xbf66dd,null));};
\ No newline at end of file
index 27dbb7d..dc353ee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x59ae=['../../config/logger','api','moment','bluebird','request-promise','path','rimraf','define','AnalyticFieldReport','analytics_report_fields','util'];(function(_0x55822d,_0x58b6ea){var _0x39eb7d=function(_0x2c0408){while(--_0x2c0408){_0x55822d['push'](_0x55822d['shift']());}};_0x39eb7d(++_0x58b6ea);}(_0x59ae,0xa4));var _0xe59a=function(_0x235cae,_0x4d508c){_0x235cae=_0x235cae-0x0;var _0x1133a5=_0x59ae[_0x235cae];return _0x1133a5;};'use strict';var _=require('lodash');var util=require(_0xe59a('0x0'));var logger=require(_0xe59a('0x1'))(_0xe59a('0x2'));var moment=require(_0xe59a('0x3'));var BPromise=require(_0xe59a('0x4'));var rp=require(_0xe59a('0x5'));var fs=require('fs');var path=require(_0xe59a('0x6'));var rimraf=require(_0xe59a('0x7'));var config=require('../../config/environment');var attributes=require('./analyticFieldReport.attributes');module['exports']=function(_0x35090c,_0x3b5046){return _0x35090c[_0xe59a('0x8')](_0xe59a('0x9'),attributes,{'tableName':_0xe59a('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4655=['util','../../config/logger','api','moment','bluebird','request-promise','rimraf','../../config/environment','./analyticFieldReport.attributes','define','AnalyticFieldReport'];(function(_0x42f472,_0x428ddd){var _0x31e060=function(_0xb3f283){while(--_0xb3f283){_0x42f472['push'](_0x42f472['shift']());}};_0x31e060(++_0x428ddd);}(_0x4655,0x11e));var _0x5465=function(_0x561520,_0x226be2){_0x561520=_0x561520-0x0;var _0x58383c=_0x4655[_0x561520];return _0x58383c;};'use strict';var _=require('lodash');var util=require(_0x5465('0x0'));var logger=require(_0x5465('0x1'))(_0x5465('0x2'));var moment=require(_0x5465('0x3'));var BPromise=require(_0x5465('0x4'));var rp=require(_0x5465('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x5465('0x6'));var config=require(_0x5465('0x7'));var attributes=require(_0x5465('0x8'));module['exports']=function(_0x23687e,_0x11d95f){return _0x23687e[_0x5465('0x9')](_0x5465('0xa'),attributes,{'tableName':'analytics_report_fields','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ca5926c..d9dc1ea 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc838=['debug','AnalyticFieldReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','AnalyticFieldReport,\x20%s,\x20%s','request\x20sent'];(function(_0x43355d,_0x5909e3){var _0x263e7c=function(_0x3a5efe){while(--_0x3a5efe){_0x43355d['push'](_0x43355d['shift']());}};_0x263e7c(++_0x5909e3);}(_0xc838,0xbd));var _0x8c83=function(_0x6aaa17,_0x34ed1c){_0x6aaa17=_0x6aaa17-0x0;var _0x2366a2=_0xc838[_0x6aaa17];return _0x2366a2;};'use strict';var _=require(_0x8c83('0x0'));var util=require(_0x8c83('0x1'));var moment=require(_0x8c83('0x2'));var BPromise=require(_0x8c83('0x3'));var rs=require(_0x8c83('0x4'));var fs=require('fs');var Redis=require(_0x8c83('0x5'));var db=require(_0x8c83('0x6'))['db'];var utils=require(_0x8c83('0x7'));var logger=require(_0x8c83('0x8'))(_0x8c83('0x9'));var config=require(_0x8c83('0xa'));var jayson=require(_0x8c83('0xb'));var client=jayson[_0x8c83('0xc')][_0x8c83('0xd')]({'port':0x232a});function respondWithRpcPromise(_0x34979d,_0x5a1baa,_0x5d54cd){return new BPromise(function(_0x210607,_0x4c2f04){return client[_0x8c83('0xe')](_0x34979d,_0x5d54cd)[_0x8c83('0xf')](function(_0x39ffb1){logger[_0x8c83('0x10')](_0x8c83('0x11'),_0x5a1baa,_0x8c83('0x12'));logger[_0x8c83('0x13')](_0x8c83('0x14'),_0x5a1baa,_0x8c83('0x12'),JSON[_0x8c83('0x15')](_0x39ffb1));if(_0x39ffb1[_0x8c83('0x16')]){if(_0x39ffb1['error'][_0x8c83('0x17')]===0x1f4){logger['error']('AnalyticFieldReport,\x20%s,\x20%s',_0x5a1baa,_0x39ffb1[_0x8c83('0x16')]['message']);return _0x4c2f04(_0x39ffb1[_0x8c83('0x16')][_0x8c83('0x18')]);}logger[_0x8c83('0x16')](_0x8c83('0x11'),_0x5a1baa,_0x39ffb1[_0x8c83('0x16')][_0x8c83('0x18')]);return _0x210607(_0x39ffb1[_0x8c83('0x16')][_0x8c83('0x18')]);}else{logger[_0x8c83('0x10')](_0x8c83('0x11'),_0x5a1baa,'request\x20sent');_0x210607(_0x39ffb1[_0x8c83('0x19')][_0x8c83('0x18')]);}})['catch'](function(_0x593c97){logger[_0x8c83('0x16')]('AnalyticFieldReport,\x20%s,\x20%s',_0x5a1baa,_0x593c97);_0x4c2f04(_0x593c97);});});}
\ No newline at end of file
+var _0xbd10=['../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','AnalyticFieldReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticFieldReport,\x20%s,\x20%s,\x20%s','error','code','message','result','lodash','util','moment','randomstring','ioredis'];(function(_0x21b583,_0x2329fe){var _0x1bcb49=function(_0x3980f6){while(--_0x3980f6){_0x21b583['push'](_0x21b583['shift']());}};_0x1bcb49(++_0x2329fe);}(_0xbd10,0x85));var _0x0bd1=function(_0x2daaa1,_0xa1d005){_0x2daaa1=_0x2daaa1-0x0;var _0x3cefea=_0xbd10[_0x2daaa1];return _0x3cefea;};'use strict';var _=require(_0x0bd1('0x0'));var util=require(_0x0bd1('0x1'));var moment=require(_0x0bd1('0x2'));var BPromise=require('bluebird');var rs=require(_0x0bd1('0x3'));var fs=require('fs');var Redis=require(_0x0bd1('0x4'));var db=require(_0x0bd1('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x0bd1('0x6'))(_0x0bd1('0x7'));var config=require(_0x0bd1('0x8'));var jayson=require(_0x0bd1('0x9'));var client=jayson[_0x0bd1('0xa')][_0x0bd1('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x4c129c,_0x143a85,_0x4dbb43){return new BPromise(function(_0x639350,_0x32a37b){return client[_0x0bd1('0xc')](_0x4c129c,_0x4dbb43)[_0x0bd1('0xd')](function(_0x540a32){logger[_0x0bd1('0xe')](_0x0bd1('0xf'),_0x143a85,_0x0bd1('0x10'));logger[_0x0bd1('0x11')](_0x0bd1('0x12'),_0x143a85,_0x0bd1('0x10'),JSON['stringify'](_0x540a32));if(_0x540a32[_0x0bd1('0x13')]){if(_0x540a32[_0x0bd1('0x13')][_0x0bd1('0x14')]===0x1f4){logger[_0x0bd1('0x13')](_0x0bd1('0xf'),_0x143a85,_0x540a32[_0x0bd1('0x13')]['message']);return _0x32a37b(_0x540a32[_0x0bd1('0x13')][_0x0bd1('0x15')]);}logger[_0x0bd1('0x13')]('AnalyticFieldReport,\x20%s,\x20%s',_0x143a85,_0x540a32['error'][_0x0bd1('0x15')]);return _0x639350(_0x540a32[_0x0bd1('0x13')][_0x0bd1('0x15')]);}else{logger['info']('AnalyticFieldReport,\x20%s,\x20%s',_0x143a85,_0x0bd1('0x10'));_0x639350(_0x540a32[_0x0bd1('0x16')][_0x0bd1('0x15')]);}})['catch'](function(_0x1876fb){logger[_0x0bd1('0x13')](_0x0bd1('0xf'),_0x143a85,_0x1876fb);_0x32a37b(_0x1876fb);});});}
\ No newline at end of file
index c4669f4..79bc328 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6e6c=['express','../../components/interaction/service','./analyticFieldReport.controller','isAuthenticated','index','/:id','post','bulkCreate','/:id/create_many','addFields','put','delete','bulkDestroy','destroy','exports','multer','util','connect-timeout'];(function(_0x2966de,_0xc756d5){var _0x4e75a2=function(_0x15b554){while(--_0x15b554){_0x2966de['push'](_0x2966de['shift']());}};_0x4e75a2(++_0xc756d5);}(_0x6e6c,0xc3));var _0xc6e6=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x6e6c[_0x2dafbe];return _0x58a45a;};'use strict';var multer=require(_0xc6e6('0x0'));var util=require(_0xc6e6('0x1'));var path=require('path');var timeout=require(_0xc6e6('0x2'));var express=require(_0xc6e6('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xc6e6('0x4'));var config=require('../../config/environment');var controller=require(_0xc6e6('0x5'));router['get']('/',auth[_0xc6e6('0x6')](),controller[_0xc6e6('0x7')]);router['get'](_0xc6e6('0x8'),auth[_0xc6e6('0x6')](),controller['show']);router[_0xc6e6('0x9')]('/',auth[_0xc6e6('0x6')](),controller['create']);router[_0xc6e6('0x9')]('/create_many',auth[_0xc6e6('0x6')](),controller[_0xc6e6('0xa')]);router[_0xc6e6('0x9')](_0xc6e6('0xb'),auth[_0xc6e6('0x6')](),controller[_0xc6e6('0xc')]);router[_0xc6e6('0xd')](_0xc6e6('0x8'),auth[_0xc6e6('0x6')](),controller['update']);router[_0xc6e6('0xe')]('/destroy_many',auth[_0xc6e6('0x6')](),controller[_0xc6e6('0xf')]);router[_0xc6e6('0xe')](_0xc6e6('0x8'),auth['isAuthenticated'](),controller[_0xc6e6('0x10')]);module[_0xc6e6('0x11')]=router;
\ No newline at end of file
+var _0x9354=['../../components/auth/service','../../components/interaction/service','./analyticFieldReport.controller','get','isAuthenticated','index','/:id','show','post','create','/create_many','bulkCreate','/:id/create_many','delete','/destroy_many','bulkDestroy','destroy','exports','util','path','express','Router'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x9354,0x96));var _0x4935=function(_0xd1d19a,_0x1933f0){_0xd1d19a=_0xd1d19a-0x0;var _0x52a79d=_0x9354[_0xd1d19a];return _0x52a79d;};'use strict';var multer=require('multer');var util=require(_0x4935('0x0'));var path=require(_0x4935('0x1'));var timeout=require('connect-timeout');var express=require(_0x4935('0x2'));var router=express[_0x4935('0x3')]();var auth=require(_0x4935('0x4'));var interaction=require(_0x4935('0x5'));var config=require('../../config/environment');var controller=require(_0x4935('0x6'));router[_0x4935('0x7')]('/',auth[_0x4935('0x8')](),controller[_0x4935('0x9')]);router[_0x4935('0x7')](_0x4935('0xa'),auth[_0x4935('0x8')](),controller[_0x4935('0xb')]);router[_0x4935('0xc')]('/',auth['isAuthenticated'](),controller[_0x4935('0xd')]);router['post'](_0x4935('0xe'),auth[_0x4935('0x8')](),controller[_0x4935('0xf')]);router[_0x4935('0xc')](_0x4935('0x10'),auth[_0x4935('0x8')](),controller['addFields']);router['put'](_0x4935('0xa'),auth['isAuthenticated'](),controller['update']);router[_0x4935('0x11')](_0x4935('0x12'),auth[_0x4935('0x8')](),controller[_0x4935('0x13')]);router[_0x4935('0x11')](_0x4935('0xa'),auth[_0x4935('0x8')](),controller[_0x4935('0x14')]);module[_0x4935('0x15')]=router;
\ No newline at end of file
index 6568457..894b848 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd884=['sequelize','STRING','name','TEXT'];(function(_0x2790b7,_0x4cc23b){var _0x526e4b=function(_0x48cb3d){while(--_0x48cb3d){_0x2790b7['push'](_0x2790b7['shift']());}};_0x526e4b(++_0x4cc23b);}(_0xd884,0xdc));var _0x4d88=function(_0x120175,_0x336a1c){_0x120175=_0x120175-0x0;var _0xe3db11=_0xd884[_0x120175];return _0xe3db11;};'use strict';var Sequelize=require(_0x4d88('0x0'));module['exports']={'name':{'type':Sequelize[_0x4d88('0x1')],'allowNull':![],'unique':_0x4d88('0x2')},'table':{'type':Sequelize['STRING']},'metric':{'type':Sequelize[_0x4d88('0x3')]},'description':{'type':Sequelize[_0x4d88('0x1')]}};
\ No newline at end of file
+var _0xb439=['TEXT','exports','STRING','name'];(function(_0x6f1a87,_0x5d5bcf){var _0x2495c7=function(_0x1c6733){while(--_0x1c6733){_0x6f1a87['push'](_0x6f1a87['shift']());}};_0x2495c7(++_0x5d5bcf);}(_0xb439,0x159));var _0x9b43=function(_0x565c49,_0x54acd0){_0x565c49=_0x565c49-0x0;var _0x20ca34=_0xb439[_0x565c49];return _0x20ca34;};'use strict';var Sequelize=require('sequelize');module[_0x9b43('0x0')]={'name':{'type':Sequelize[_0x9b43('0x1')],'allowNull':![],'unique':_0x9b43('0x2')},'table':{'type':Sequelize[_0x9b43('0x1')]},'metric':{'type':Sequelize[_0x9b43('0x3')]},'description':{'type':Sequelize[_0x9b43('0x1')]}};
\ No newline at end of file
index a428b45..0fad953 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x009b=['reject','save','update','then','get','Metrics','UserProfileResource','destroy','error','stack','name','send','AnalyticMetric','model','keys','query','filters','attributes','intersection','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','key','merge','options','includeAll','include','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','body','eml-format','rimraf','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','crypto','jsforce','desk.js','querystring','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply'];(function(_0xec482a,_0x5c4e9e){var _0x2eaf2d=function(_0x511039){while(--_0x511039){_0xec482a['push'](_0xec482a['shift']());}};_0x2eaf2d(++_0x5c4e9e);}(_0x009b,0x170));var _0xb009=function(_0x2d1de7,_0x595726){_0x2d1de7=_0x2d1de7-0x0;var _0x2e2918=_0x009b[_0x2d1de7];return _0x2e2918;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xb009('0x0'));var rimraf=require(_0xb009('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xb009('0x2'));var moment=require(_0xb009('0x3'));var BPromise=require(_0xb009('0x4'));var Mustache=require(_0xb009('0x5'));var util=require(_0xb009('0x6'));var path=require(_0xb009('0x7'));var sox=require(_0xb009('0x8'));var csv=require(_0xb009('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xb009('0xa'));var squel=require('squel');var crypto=require(_0xb009('0xb'));var jsforce=require(_0xb009('0xc'));var deskjs=require(_0xb009('0xd'));var toCsv=require(_0xb009('0x9'));var querystring=require(_0xb009('0xe'));var Papa=require('papaparse');var Redis=require(_0xb009('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xb009('0x10'));var hardwareService=require(_0xb009('0x11'));var logger=require(_0xb009('0x12'))(_0xb009('0x13'));var utils=require(_0xb009('0x14'));var config=require(_0xb009('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3f88fe,_0x5547c6){_0x5547c6=_0x5547c6||0xcc;return function(_0x4cf1eb){if(_0x4cf1eb){return _0x3f88fe[_0xb009('0x16')](_0x5547c6);}return _0x3f88fe['status'](_0x5547c6)[_0xb009('0x17')]();};}function respondWithResult(_0x5b6e3a,_0x50bcaa){_0x50bcaa=_0x50bcaa||0xc8;return function(_0x2a8670){if(_0x2a8670){return _0x5b6e3a[_0xb009('0x18')](_0x50bcaa)[_0xb009('0x19')](_0x2a8670);}};}function respondWithFilteredResult(_0x2db692,_0xa33279){return function(_0x40cca1){if(_0x40cca1){var _0x4ba1c5=_0x40cca1[_0xb009('0x1a')],_0x1b73c2=_0xa33279['offset'],_0x545660=_0xa33279[_0xb009('0x1b')]+_0xa33279[_0xb009('0x1c')],_0x540265;if(_0x545660>=_0x4ba1c5){_0x545660=_0x4ba1c5;_0x540265=0xc8;}else{_0x540265=0xce;}_0x2db692[_0xb009('0x18')](_0x540265);return _0x2db692[_0xb009('0x1d')](_0xb009('0x1e'),_0x1b73c2+'-'+_0x545660+'/'+_0x4ba1c5)[_0xb009('0x19')](_0x40cca1);}return null;};}function patchUpdates(_0x14c3a4){return function(_0x3c9972){try{jsonpatch[_0xb009('0x1f')](_0x3c9972,_0x14c3a4,!![]);}catch(_0x1a8ac0){return BPromise[_0xb009('0x20')](_0x1a8ac0);}return _0x3c9972[_0xb009('0x21')]();};}function saveUpdates(_0x3b1e90,_0x48b229){return function(_0x1b3168){if(_0x1b3168){return _0x1b3168[_0xb009('0x22')](_0x3b1e90)[_0xb009('0x23')](function(_0x2c0d8e){return _0x2c0d8e;});}return null;};}function removeEntity(_0x24ac81,_0x56cfa4){return function(_0x4b1ec3){if(_0x4b1ec3){return _0x4b1ec3['destroy']()['then'](function(){var _0x2d0ea9=_0x4b1ec3[_0xb009('0x24')]({'plain':!![]});var _0x3c681c=_0xb009('0x25');return db[_0xb009('0x26')][_0xb009('0x27')]({'where':{'type':_0x3c681c,'resourceId':_0x2d0ea9['id']}})[_0xb009('0x23')](function(){return _0x4b1ec3;});})['then'](function(){_0x24ac81[_0xb009('0x18')](0xcc)[_0xb009('0x17')]();});}};}function handleEntityNotFound(_0xa65383,_0x58c7ca){return function(_0x411a42){if(!_0x411a42){_0xa65383[_0xb009('0x16')](0x194);}return _0x411a42;};}function handleError(_0xe6e2a9,_0x51eff5){_0x51eff5=_0x51eff5||0x1f4;return function(_0x32d174){logger[_0xb009('0x28')](_0x32d174[_0xb009('0x29')]);if(_0x32d174[_0xb009('0x2a')]){delete _0x32d174[_0xb009('0x2a')];}_0xe6e2a9[_0xb009('0x18')](_0x51eff5)[_0xb009('0x2b')](_0x32d174);};}exports['index']=function(_0x3ae625,_0x4a6f4b){var _0x817d1a={},_0x5c2df5={},_0x4d1003={'count':0x0,'rows':[]};var _0x6c9cc5=db[_0xb009('0x2c')]['rawAttributes'];_0x5c2df5[_0xb009('0x2d')]=_[_0xb009('0x2e')](_0x6c9cc5);_0x5c2df5[_0xb009('0x2f')]=_[_0xb009('0x2e')](_0x3ae625[_0xb009('0x2f')]);_0x5c2df5[_0xb009('0x30')]=_['intersection'](_0x5c2df5[_0xb009('0x2d')],_0x5c2df5[_0xb009('0x2f')]);_0x817d1a[_0xb009('0x31')]=_[_0xb009('0x32')](_0x5c2df5['model'],qs[_0xb009('0x33')](_0x3ae625[_0xb009('0x2f')][_0xb009('0x33')]));_0x817d1a['attributes']=_0x817d1a[_0xb009('0x31')]['length']?_0x817d1a[_0xb009('0x31')]:_0x5c2df5['model'];if(!_0x3ae625[_0xb009('0x2f')][_0xb009('0x34')](_0xb009('0x35'))){_0x817d1a[_0xb009('0x1c')]=qs[_0xb009('0x1c')](_0x3ae625['query'][_0xb009('0x1c')]);_0x817d1a[_0xb009('0x1b')]=qs[_0xb009('0x1b')](_0x3ae625[_0xb009('0x2f')][_0xb009('0x1b')]);}_0x817d1a[_0xb009('0x36')]=qs[_0xb009('0x37')](_0x3ae625[_0xb009('0x2f')][_0xb009('0x37')]);_0x817d1a[_0xb009('0x38')]=qs[_0xb009('0x30')](_[_0xb009('0x39')](_0x3ae625[_0xb009('0x2f')],_0x5c2df5[_0xb009('0x30')]));if(_0x3ae625[_0xb009('0x2f')][_0xb009('0x3a')]){_0x817d1a[_0xb009('0x38')]=_['merge'](_0x817d1a['where'],{'$or':_[_0xb009('0x3b')](_0x6c9cc5,function(_0x22a8f1){if(_0x22a8f1[_0xb009('0x3c')][_0xb009('0x3d')]!=='VIRTUAL'){var _0x37b067={};_0x37b067[_0x22a8f1['field']]={'$like':'%'+_0x3ae625[_0xb009('0x2f')][_0xb009('0x3a')]+'%'};return _0x37b067;}})});}_0x817d1a=_[_0xb009('0x3e')]({},_0x817d1a,_0x3ae625[_0xb009('0x3f')]);var _0x4cb84d={'where':_0x817d1a[_0xb009('0x38')]};return db[_0xb009('0x2c')]['count'](_0x4cb84d)['then'](function(_0x5bc901){_0x4d1003[_0xb009('0x1a')]=_0x5bc901;if(_0x3ae625[_0xb009('0x2f')][_0xb009('0x40')]){_0x817d1a[_0xb009('0x41')]=[{'all':!![]}];}return db[_0xb009('0x2c')]['findAll'](_0x817d1a);})[_0xb009('0x23')](function(_0xce4ab7){_0x4d1003['rows']=_0xce4ab7;return _0x4d1003;})[_0xb009('0x23')](respondWithFilteredResult(_0x4a6f4b,_0x817d1a))[_0xb009('0x42')](handleError(_0x4a6f4b,null));};exports[_0xb009('0x43')]=function(_0x700a2,_0x4e5447){var _0x461c52={'raw':!![],'where':{'id':_0x700a2[_0xb009('0x44')]['id']}},_0x16c833={};_0x16c833[_0xb009('0x2d')]=_[_0xb009('0x2e')](db[_0xb009('0x2c')]['rawAttributes']);_0x16c833[_0xb009('0x2f')]=_[_0xb009('0x2e')](_0x700a2['query']);_0x16c833[_0xb009('0x30')]=_['intersection'](_0x16c833[_0xb009('0x2d')],_0x16c833[_0xb009('0x2f')]);_0x461c52['attributes']=_[_0xb009('0x32')](_0x16c833[_0xb009('0x2d')],qs[_0xb009('0x33')](_0x700a2['query'][_0xb009('0x33')]));_0x461c52[_0xb009('0x31')]=_0x461c52[_0xb009('0x31')][_0xb009('0x45')]?_0x461c52[_0xb009('0x31')]:_0x16c833[_0xb009('0x2d')];if(_0x700a2['query'][_0xb009('0x40')]){_0x461c52[_0xb009('0x41')]=[{'all':!![]}];}_0x461c52=_[_0xb009('0x3e')]({},_0x461c52,_0x700a2['options']);return db[_0xb009('0x2c')][_0xb009('0x46')](_0x461c52)[_0xb009('0x23')](handleEntityNotFound(_0x4e5447,null))[_0xb009('0x23')](respondWithResult(_0x4e5447,null))[_0xb009('0x42')](handleError(_0x4e5447,null));};exports[_0xb009('0x47')]=function(_0x1f96bb,_0x1d3257){return db[_0xb009('0x2c')][_0xb009('0x47')](_0x1f96bb['body'],{})['then'](function(_0x2a3607){var _0x1722e5=_0x1f96bb[_0xb009('0x48')]['get']({'plain':!![]});if(!_0x1722e5)throw new Error(_0xb009('0x49'));if(_0x1722e5[_0xb009('0x4a')]===_0xb009('0x48')){var _0x3fb2e4=_0x2a3607[_0xb009('0x24')]({'plain':!![]});var _0x3a1a8a=_0xb009('0x25');return db[_0xb009('0x4b')][_0xb009('0x46')]({'where':{'name':_0x3a1a8a,'userProfileId':_0x1722e5[_0xb009('0x4c')]},'raw':!![]})[_0xb009('0x23')](function(_0x509b94){if(_0x509b94&&_0x509b94[_0xb009('0x4d')]===0x0){return db['UserProfileResource'][_0xb009('0x47')]({'name':_0x3fb2e4[_0xb009('0x2a')],'resourceId':_0x3fb2e4['id'],'type':_0x509b94[_0xb009('0x2a')],'sectionId':_0x509b94['id']},{})[_0xb009('0x23')](function(){return _0x2a3607;});}else{return _0x2a3607;}})[_0xb009('0x42')](function(_0x26067f){logger[_0xb009('0x28')](_0xb009('0x4e'),_0x26067f);throw _0x26067f;});}return _0x2a3607;})[_0xb009('0x23')](respondWithResult(_0x1d3257,0xc9))[_0xb009('0x42')](handleError(_0x1d3257,null));};exports[_0xb009('0x22')]=function(_0x13723b,_0x2a05e4){if(_0x13723b[_0xb009('0x4f')]['id']){delete _0x13723b[_0xb009('0x4f')]['id'];}return db[_0xb009('0x2c')][_0xb009('0x46')]({'where':{'id':_0x13723b[_0xb009('0x44')]['id']}})[_0xb009('0x23')](handleEntityNotFound(_0x2a05e4,null))['then'](saveUpdates(_0x13723b[_0xb009('0x4f')],null))[_0xb009('0x23')](respondWithResult(_0x2a05e4,null))['catch'](handleError(_0x2a05e4,null));};exports['destroy']=function(_0x29fa3a,_0x4abe71){return db['AnalyticMetric']['find']({'where':{'id':_0x29fa3a['params']['id']}})[_0xb009('0x23')](handleEntityNotFound(_0x4abe71,null))[_0xb009('0x23')](removeEntity(_0x4abe71,null))['catch'](handleError(_0x4abe71,null));};
\ No newline at end of file
+var _0xfe9a=['Unable\x20to\x20retrieve\x20the\x20current\x20user','user','UserProfileSection','autoAssociation','UserProfileResource','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','util','to-csv','ejs','lodash','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','count','offset','limit','set','Content-Range','json','apply','reject','save','update','destroy','then','get','Metrics','error','stack','name','send','index','AnalyticMetric','rawAttributes','keys','query','filters','model','attributes','intersection','fields','length','hasOwnProperty','order','sort','pick','where','merge','map','type','key','VIRTUAL','field','filter','includeAll','include','findAll','rows','catch','show','params','options','find','create','body'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0xfe9a,0x15e));var _0xafe9=function(_0xbabce1,_0x36f0ca){_0xbabce1=_0xbabce1-0x0;var _0x438df0=_0xfe9a[_0xbabce1];return _0x438df0;};'use strict';var pdf=require(_0xafe9('0x0'));var emlformat=require(_0xafe9('0x1'));var rimraf=require(_0xafe9('0x2'));var zipdir=require(_0xafe9('0x3'));var jsonpatch=require(_0xafe9('0x4'));var rp=require(_0xafe9('0x5'));var moment=require(_0xafe9('0x6'));var BPromise=require(_0xafe9('0x7'));var Mustache=require('mustache');var util=require(_0xafe9('0x8'));var path=require('path');var sox=require('sox');var csv=require(_0xafe9('0x9'));var ejs=require(_0xafe9('0xa'));var fs=require('fs');var _=require(_0xafe9('0xb'));var squel=require(_0xafe9('0xc'));var crypto=require('crypto');var jsforce=require(_0xafe9('0xd'));var deskjs=require(_0xafe9('0xe'));var toCsv=require(_0xafe9('0x9'));var querystring=require(_0xafe9('0xf'));var Papa=require(_0xafe9('0x10'));var Redis=require(_0xafe9('0x11'));var authService=require(_0xafe9('0x12'));var qs=require(_0xafe9('0x13'));var hardwareService=require(_0xafe9('0x14'));var logger=require('../../config/logger')(_0xafe9('0x15'));var utils=require(_0xafe9('0x16'));var config=require(_0xafe9('0x17'));var db=require(_0xafe9('0x18'))['db'];function respondWithStatusCode(_0x4cc05c,_0x6c9437){_0x6c9437=_0x6c9437||0xcc;return function(_0xfd044e){if(_0xfd044e){return _0x4cc05c[_0xafe9('0x19')](_0x6c9437);}return _0x4cc05c['status'](_0x6c9437)[_0xafe9('0x1a')]();};}function respondWithResult(_0x14ed4a,_0x30d8d7){_0x30d8d7=_0x30d8d7||0xc8;return function(_0x49060a){if(_0x49060a){return _0x14ed4a[_0xafe9('0x1b')](_0x30d8d7)['json'](_0x49060a);}};}function respondWithFilteredResult(_0x48c130,_0x1b3f36){return function(_0x280148){if(_0x280148){var _0x142571=_0x280148[_0xafe9('0x1c')],_0x3fc949=_0x1b3f36[_0xafe9('0x1d')],_0x489569=_0x1b3f36[_0xafe9('0x1d')]+_0x1b3f36[_0xafe9('0x1e')],_0x481069;if(_0x489569>=_0x142571){_0x489569=_0x142571;_0x481069=0xc8;}else{_0x481069=0xce;}_0x48c130[_0xafe9('0x1b')](_0x481069);return _0x48c130[_0xafe9('0x1f')](_0xafe9('0x20'),_0x3fc949+'-'+_0x489569+'/'+_0x142571)[_0xafe9('0x21')](_0x280148);}return null;};}function patchUpdates(_0x29f49b){return function(_0x16b532){try{jsonpatch[_0xafe9('0x22')](_0x16b532,_0x29f49b,!![]);}catch(_0x5ec8b6){return BPromise[_0xafe9('0x23')](_0x5ec8b6);}return _0x16b532[_0xafe9('0x24')]();};}function saveUpdates(_0xa674fd,_0x39182c){return function(_0x30882f){if(_0x30882f){return _0x30882f[_0xafe9('0x25')](_0xa674fd)['then'](function(_0x34aafe){return _0x34aafe;});}return null;};}function removeEntity(_0x38ed0a,_0x587fc3){return function(_0x54be3d){if(_0x54be3d){return _0x54be3d[_0xafe9('0x26')]()[_0xafe9('0x27')](function(){var _0xd925a=_0x54be3d[_0xafe9('0x28')]({'plain':!![]});var _0x1cfd2b=_0xafe9('0x29');return db['UserProfileResource'][_0xafe9('0x26')]({'where':{'type':_0x1cfd2b,'resourceId':_0xd925a['id']}})[_0xafe9('0x27')](function(){return _0x54be3d;});})[_0xafe9('0x27')](function(){_0x38ed0a[_0xafe9('0x1b')](0xcc)[_0xafe9('0x1a')]();});}};}function handleEntityNotFound(_0x3e498d,_0x1d3599){return function(_0x2f805d){if(!_0x2f805d){_0x3e498d['sendStatus'](0x194);}return _0x2f805d;};}function handleError(_0x3e71fe,_0x3beff5){_0x3beff5=_0x3beff5||0x1f4;return function(_0x4db487){logger[_0xafe9('0x2a')](_0x4db487[_0xafe9('0x2b')]);if(_0x4db487[_0xafe9('0x2c')]){delete _0x4db487['name'];}_0x3e71fe['status'](_0x3beff5)[_0xafe9('0x2d')](_0x4db487);};}exports[_0xafe9('0x2e')]=function(_0x3954fd,_0x3b8f89){var _0x2f45ba={},_0x4dddec={},_0x3d9d57={'count':0x0,'rows':[]};var _0x2b9004=db[_0xafe9('0x2f')][_0xafe9('0x30')];_0x4dddec['model']=_[_0xafe9('0x31')](_0x2b9004);_0x4dddec[_0xafe9('0x32')]=_[_0xafe9('0x31')](_0x3954fd['query']);_0x4dddec[_0xafe9('0x33')]=_['intersection'](_0x4dddec[_0xafe9('0x34')],_0x4dddec['query']);_0x2f45ba[_0xafe9('0x35')]=_[_0xafe9('0x36')](_0x4dddec[_0xafe9('0x34')],qs[_0xafe9('0x37')](_0x3954fd['query'][_0xafe9('0x37')]));_0x2f45ba[_0xafe9('0x35')]=_0x2f45ba[_0xafe9('0x35')][_0xafe9('0x38')]?_0x2f45ba[_0xafe9('0x35')]:_0x4dddec[_0xafe9('0x34')];if(!_0x3954fd[_0xafe9('0x32')][_0xafe9('0x39')]('nolimit')){_0x2f45ba[_0xafe9('0x1e')]=qs[_0xafe9('0x1e')](_0x3954fd[_0xafe9('0x32')][_0xafe9('0x1e')]);_0x2f45ba[_0xafe9('0x1d')]=qs[_0xafe9('0x1d')](_0x3954fd[_0xafe9('0x32')][_0xafe9('0x1d')]);}_0x2f45ba[_0xafe9('0x3a')]=qs[_0xafe9('0x3b')](_0x3954fd[_0xafe9('0x32')][_0xafe9('0x3b')]);_0x2f45ba['where']=qs[_0xafe9('0x33')](_[_0xafe9('0x3c')](_0x3954fd[_0xafe9('0x32')],_0x4dddec[_0xafe9('0x33')]));if(_0x3954fd[_0xafe9('0x32')]['filter']){_0x2f45ba[_0xafe9('0x3d')]=_[_0xafe9('0x3e')](_0x2f45ba[_0xafe9('0x3d')],{'$or':_[_0xafe9('0x3f')](_0x2b9004,function(_0x1d3d13){if(_0x1d3d13[_0xafe9('0x40')][_0xafe9('0x41')]!==_0xafe9('0x42')){var _0x56e044={};_0x56e044[_0x1d3d13[_0xafe9('0x43')]]={'$like':'%'+_0x3954fd[_0xafe9('0x32')][_0xafe9('0x44')]+'%'};return _0x56e044;}})});}_0x2f45ba=_['merge']({},_0x2f45ba,_0x3954fd['options']);var _0x55efcc={'where':_0x2f45ba['where']};return db[_0xafe9('0x2f')]['count'](_0x55efcc)['then'](function(_0x4347fe){_0x3d9d57[_0xafe9('0x1c')]=_0x4347fe;if(_0x3954fd['query'][_0xafe9('0x45')]){_0x2f45ba[_0xafe9('0x46')]=[{'all':!![]}];}return db[_0xafe9('0x2f')][_0xafe9('0x47')](_0x2f45ba);})[_0xafe9('0x27')](function(_0x5b4f80){_0x3d9d57[_0xafe9('0x48')]=_0x5b4f80;return _0x3d9d57;})[_0xafe9('0x27')](respondWithFilteredResult(_0x3b8f89,_0x2f45ba))[_0xafe9('0x49')](handleError(_0x3b8f89,null));};exports[_0xafe9('0x4a')]=function(_0x459441,_0x497b0d){var _0x138362={'raw':!![],'where':{'id':_0x459441[_0xafe9('0x4b')]['id']}},_0x4ffe5c={};_0x4ffe5c[_0xafe9('0x34')]=_['keys'](db[_0xafe9('0x2f')]['rawAttributes']);_0x4ffe5c[_0xafe9('0x32')]=_[_0xafe9('0x31')](_0x459441[_0xafe9('0x32')]);_0x4ffe5c[_0xafe9('0x33')]=_[_0xafe9('0x36')](_0x4ffe5c['model'],_0x4ffe5c[_0xafe9('0x32')]);_0x138362[_0xafe9('0x35')]=_[_0xafe9('0x36')](_0x4ffe5c[_0xafe9('0x34')],qs[_0xafe9('0x37')](_0x459441['query'][_0xafe9('0x37')]));_0x138362[_0xafe9('0x35')]=_0x138362[_0xafe9('0x35')][_0xafe9('0x38')]?_0x138362[_0xafe9('0x35')]:_0x4ffe5c['model'];if(_0x459441[_0xafe9('0x32')][_0xafe9('0x45')]){_0x138362[_0xafe9('0x46')]=[{'all':!![]}];}_0x138362=_[_0xafe9('0x3e')]({},_0x138362,_0x459441[_0xafe9('0x4c')]);return db['AnalyticMetric'][_0xafe9('0x4d')](_0x138362)[_0xafe9('0x27')](handleEntityNotFound(_0x497b0d,null))[_0xafe9('0x27')](respondWithResult(_0x497b0d,null))['catch'](handleError(_0x497b0d,null));};exports['create']=function(_0x339bc6,_0xa281db){return db[_0xafe9('0x2f')][_0xafe9('0x4e')](_0x339bc6[_0xafe9('0x4f')],{})['then'](function(_0x5ef66a){var _0x1f9e9e=_0x339bc6['user']['get']({'plain':!![]});if(!_0x1f9e9e)throw new Error(_0xafe9('0x50'));if(_0x1f9e9e['role']===_0xafe9('0x51')){var _0x58dc75=_0x5ef66a['get']({'plain':!![]});var _0x2e7c45=_0xafe9('0x29');return db[_0xafe9('0x52')]['find']({'where':{'name':_0x2e7c45,'userProfileId':_0x1f9e9e['userProfileId']},'raw':!![]})[_0xafe9('0x27')](function(_0x23a84d){if(_0x23a84d&&_0x23a84d[_0xafe9('0x53')]===0x0){return db[_0xafe9('0x54')]['create']({'name':_0x58dc75[_0xafe9('0x2c')],'resourceId':_0x58dc75['id'],'type':_0x23a84d[_0xafe9('0x2c')],'sectionId':_0x23a84d['id']},{})[_0xafe9('0x27')](function(){return _0x5ef66a;});}else{return _0x5ef66a;}})['catch'](function(_0x304e88){logger['error'](_0xafe9('0x55'),_0x304e88);throw _0x304e88;});}return _0x5ef66a;})[_0xafe9('0x27')](respondWithResult(_0xa281db,0xc9))[_0xafe9('0x49')](handleError(_0xa281db,null));};exports[_0xafe9('0x25')]=function(_0xd56fe4,_0xa74cc4){if(_0xd56fe4[_0xafe9('0x4f')]['id']){delete _0xd56fe4[_0xafe9('0x4f')]['id'];}return db[_0xafe9('0x2f')][_0xafe9('0x4d')]({'where':{'id':_0xd56fe4[_0xafe9('0x4b')]['id']}})[_0xafe9('0x27')](handleEntityNotFound(_0xa74cc4,null))[_0xafe9('0x27')](saveUpdates(_0xd56fe4[_0xafe9('0x4f')],null))[_0xafe9('0x27')](respondWithResult(_0xa74cc4,null))[_0xafe9('0x49')](handleError(_0xa74cc4,null));};exports['destroy']=function(_0x43e01b,_0x1deec7){return db[_0xafe9('0x2f')][_0xafe9('0x4d')]({'where':{'id':_0x43e01b[_0xafe9('0x4b')]['id']}})['then'](handleEntityNotFound(_0x1deec7,null))[_0xafe9('0x27')](removeEntity(_0x1deec7,null))[_0xafe9('0x49')](handleError(_0x1deec7,null));};
\ No newline at end of file
index 10b2b9e..1a5d08d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4bdc=['bluebird','request-promise','rimraf','define','lodash','util','api','moment'];(function(_0x132dc8,_0x299c11){var _0x272384=function(_0x59b7a6){while(--_0x59b7a6){_0x132dc8['push'](_0x132dc8['shift']());}};_0x272384(++_0x299c11);}(_0x4bdc,0x18c));var _0xc4bd=function(_0x286951,_0x209689){_0x286951=_0x286951-0x0;var _0x226cf9=_0x4bdc[_0x286951];return _0x226cf9;};'use strict';var _=require(_0xc4bd('0x0'));var util=require(_0xc4bd('0x1'));var logger=require('../../config/logger')(_0xc4bd('0x2'));var moment=require(_0xc4bd('0x3'));var BPromise=require(_0xc4bd('0x4'));var rp=require(_0xc4bd('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0xc4bd('0x6'));var config=require('../../config/environment');var attributes=require('./analyticMetric.attributes');module['exports']=function(_0x29f8c6,_0x2cc957){return _0x29f8c6[_0xc4bd('0x7')]('AnalyticMetric',attributes,{'tableName':'analytics_metrics','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1c90=['define','AnalyticMetric','analytics_metrics','../../config/logger','api','bluebird','path','rimraf','../../config/environment'];(function(_0xfde771,_0x462d95){var _0x3a8321=function(_0x5e0d73){while(--_0x5e0d73){_0xfde771['push'](_0xfde771['shift']());}};_0x3a8321(++_0x462d95);}(_0x1c90,0x135));var _0x01c9=function(_0x4a6b0c,_0x4a563c){_0x4a6b0c=_0x4a6b0c-0x0;var _0x4e10fb=_0x1c90[_0x4a6b0c];return _0x4e10fb;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x01c9('0x0'))(_0x01c9('0x1'));var moment=require('moment');var BPromise=require(_0x01c9('0x2'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x01c9('0x3'));var rimraf=require(_0x01c9('0x4'));var config=require(_0x01c9('0x5'));var attributes=require('./analyticMetric.attributes');module['exports']=function(_0x41087f,_0x50a2a8){return _0x41087f[_0x01c9('0x6')](_0x01c9('0x7'),attributes,{'tableName':_0x01c9('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a345d59..16329a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4be6=['randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','info','request\x20sent','debug','AnalyticMetric,\x20%s,\x20%s,\x20%s','error','code','AnalyticMetric,\x20%s,\x20%s','message','result','catch','util','moment','bluebird'];(function(_0x389f2f,_0x5d6d59){var _0x4f0673=function(_0x3daf09){while(--_0x3daf09){_0x389f2f['push'](_0x389f2f['shift']());}};_0x4f0673(++_0x5d6d59);}(_0x4be6,0xb5));var _0x64be=function(_0x31f770,_0x406a8f){_0x31f770=_0x31f770-0x0;var _0x9bafb7=_0x4be6[_0x31f770];return _0x9bafb7;};'use strict';var _=require('lodash');var util=require(_0x64be('0x0'));var moment=require(_0x64be('0x1'));var BPromise=require(_0x64be('0x2'));var rs=require(_0x64be('0x3'));var fs=require('fs');var Redis=require(_0x64be('0x4'));var db=require(_0x64be('0x5'))['db'];var utils=require(_0x64be('0x6'));var logger=require(_0x64be('0x7'))(_0x64be('0x8'));var config=require(_0x64be('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x64be('0xa')][_0x64be('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x3e8639,_0x5b00b4,_0x19bdb3){return new BPromise(function(_0x21fcb7,_0x50d57f){return client[_0x64be('0xc')](_0x3e8639,_0x19bdb3)['then'](function(_0x44895b){logger[_0x64be('0xd')]('AnalyticMetric,\x20%s,\x20%s',_0x5b00b4,_0x64be('0xe'));logger[_0x64be('0xf')](_0x64be('0x10'),_0x5b00b4,_0x64be('0xe'),JSON['stringify'](_0x44895b));if(_0x44895b[_0x64be('0x11')]){if(_0x44895b['error'][_0x64be('0x12')]===0x1f4){logger[_0x64be('0x11')](_0x64be('0x13'),_0x5b00b4,_0x44895b[_0x64be('0x11')][_0x64be('0x14')]);return _0x50d57f(_0x44895b['error'][_0x64be('0x14')]);}logger['error'](_0x64be('0x13'),_0x5b00b4,_0x44895b[_0x64be('0x11')][_0x64be('0x14')]);return _0x21fcb7(_0x44895b[_0x64be('0x11')][_0x64be('0x14')]);}else{logger['info']('AnalyticMetric,\x20%s,\x20%s',_0x5b00b4,_0x64be('0xe'));_0x21fcb7(_0x44895b[_0x64be('0x15')][_0x64be('0x14')]);}})[_0x64be('0x16')](function(_0x5035bd){logger['error'](_0x64be('0x13'),_0x5b00b4,_0x5035bd);_0x50d57f(_0x5035bd);});});}
\ No newline at end of file
+var _0xf2cf=['bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','AnalyticMetric,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','util','moment'];(function(_0x4c1066,_0x5e3e20){var _0x1d2519=function(_0x483ca9){while(--_0x483ca9){_0x4c1066['push'](_0x4c1066['shift']());}};_0x1d2519(++_0x5e3e20);}(_0xf2cf,0xf5));var _0xff2c=function(_0x146481,_0x307f24){_0x146481=_0x146481-0x0;var _0x5fc6b2=_0xf2cf[_0x146481];return _0x5fc6b2;};'use strict';var _=require('lodash');var util=require(_0xff2c('0x0'));var moment=require(_0xff2c('0x1'));var BPromise=require(_0xff2c('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xff2c('0x3'));var db=require(_0xff2c('0x4'))['db'];var utils=require(_0xff2c('0x5'));var logger=require(_0xff2c('0x6'))(_0xff2c('0x7'));var config=require(_0xff2c('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xff2c('0x9')][_0xff2c('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x57ba3d,_0x21c5a5,_0x223a86){return new BPromise(function(_0x105f4d,_0x7ba107){return client[_0xff2c('0xb')](_0x57ba3d,_0x223a86)[_0xff2c('0xc')](function(_0x133ee9){logger['info'](_0xff2c('0xd'),_0x21c5a5,_0xff2c('0xe'));logger[_0xff2c('0xf')]('AnalyticMetric,\x20%s,\x20%s,\x20%s',_0x21c5a5,_0xff2c('0xe'),JSON[_0xff2c('0x10')](_0x133ee9));if(_0x133ee9[_0xff2c('0x11')]){if(_0x133ee9['error']['code']===0x1f4){logger[_0xff2c('0x11')](_0xff2c('0xd'),_0x21c5a5,_0x133ee9['error'][_0xff2c('0x12')]);return _0x7ba107(_0x133ee9['error']['message']);}logger[_0xff2c('0x11')](_0xff2c('0xd'),_0x21c5a5,_0x133ee9[_0xff2c('0x11')][_0xff2c('0x12')]);return _0x105f4d(_0x133ee9['error'][_0xff2c('0x12')]);}else{logger['info'](_0xff2c('0xd'),_0x21c5a5,_0xff2c('0xe'));_0x105f4d(_0x133ee9['result']['message']);}})['catch'](function(_0x31cec8){logger[_0xff2c('0x11')](_0xff2c('0xd'),_0x21c5a5,_0x31cec8);_0x7ba107(_0x31cec8);});});}
\ No newline at end of file
index ec6ff56..0b2e795 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x02ce=['isAuthenticated','index','/:id','post','create','put','update','delete','destroy','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticMetric.controller','get'];(function(_0x4bb66f,_0x3cd682){var _0xf2772f=function(_0x2e3698){while(--_0x2e3698){_0x4bb66f['push'](_0x4bb66f['shift']());}};_0xf2772f(++_0x3cd682);}(_0x02ce,0x1ac));var _0xe02c=function(_0x440560,_0x5e40d9){_0x440560=_0x440560-0x0;var _0x29adc7=_0x02ce[_0x440560];return _0x29adc7;};'use strict';var multer=require(_0xe02c('0x0'));var util=require(_0xe02c('0x1'));var path=require(_0xe02c('0x2'));var timeout=require('connect-timeout');var express=require(_0xe02c('0x3'));var router=express['Router']();var auth=require(_0xe02c('0x4'));var interaction=require(_0xe02c('0x5'));var config=require(_0xe02c('0x6'));var controller=require(_0xe02c('0x7'));router[_0xe02c('0x8')]('/',auth[_0xe02c('0x9')](),controller[_0xe02c('0xa')]);router[_0xe02c('0x8')](_0xe02c('0xb'),auth['isAuthenticated'](),controller['show']);router[_0xe02c('0xc')]('/',auth[_0xe02c('0x9')](),controller[_0xe02c('0xd')]);router[_0xe02c('0xe')](_0xe02c('0xb'),auth[_0xe02c('0x9')](),controller[_0xe02c('0xf')]);router[_0xe02c('0x10')](_0xe02c('0xb'),auth[_0xe02c('0x9')](),controller[_0xe02c('0x11')]);module[_0xe02c('0x12')]=router;
\ No newline at end of file
+var _0x49f8=['update','delete','destroy','multer','connect-timeout','express','../../components/auth/service','../../config/environment','get','index','/:id','isAuthenticated','show','post'];(function(_0x593564,_0x43583f){var _0x211a89=function(_0x40afd6){while(--_0x40afd6){_0x593564['push'](_0x593564['shift']());}};_0x211a89(++_0x43583f);}(_0x49f8,0xff));var _0x849f=function(_0x4b3444,_0x223723){_0x4b3444=_0x4b3444-0x0;var _0x333126=_0x49f8[_0x4b3444];return _0x333126;};'use strict';var multer=require(_0x849f('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x849f('0x1'));var express=require(_0x849f('0x2'));var router=express['Router']();var auth=require(_0x849f('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x849f('0x4'));var controller=require('./analyticMetric.controller');router[_0x849f('0x5')]('/',auth['isAuthenticated'](),controller[_0x849f('0x6')]);router[_0x849f('0x5')](_0x849f('0x7'),auth[_0x849f('0x8')](),controller[_0x849f('0x9')]);router[_0x849f('0xa')]('/',auth['isAuthenticated'](),controller['create']);router['put'](_0x849f('0x7'),auth[_0x849f('0x8')](),controller[_0x849f('0xb')]);router[_0x849f('0xc')](_0x849f('0x7'),auth[_0x849f('0x8')](),controller[_0x849f('0xd')]);module['exports']=router;
\ No newline at end of file
index df2ba1f..4020c2b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd204=['TEXT'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0xd204,0xd4));var _0x4d20=function(_0x14c888,_0x4b35e2){_0x14c888=_0x14c888-0x0;var _0x25e721=_0xd204[_0x14c888];return _0x25e721;};'use strict';var Sequelize=require('sequelize');module['exports']={'tree':{'type':Sequelize[_0x4d20('0x0')],'allowNull':![]}};
\ No newline at end of file
+var _0x6bb8=['sequelize','exports'];(function(_0x5b12e2,_0x587477){var _0x23448b=function(_0x172361){while(--_0x172361){_0x5b12e2['push'](_0x5b12e2['shift']());}};_0x23448b(++_0x587477);}(_0x6bb8,0x13a));var _0x86bb=function(_0x47df54,_0x1aeb61){_0x47df54=_0x47df54-0x0;var _0x261b87=_0x6bb8[_0x47df54];return _0x261b87;};'use strict';var Sequelize=require(_0x86bb('0x0'));module[_0x86bb('0x1')]={'tree':{'type':Sequelize['TEXT'],'allowNull':![]}};
\ No newline at end of file
index fb16d08..a56c79a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x378d=['Content-Range','apply','reject','update','then','destroy','error','stack','name','index','AnalyticTreeReport','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','filter','where','merge','map','type','key','VIRTUAL','options','count','includeAll','include','findAll','rows','catch','rawAttributes','find','create','body','params','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x378d,0x152));var _0xd378=function(_0x415a8a,_0x22cd25){_0x415a8a=_0x415a8a-0x0;var _0x2c9351=_0x378d[_0x415a8a];return _0x2c9351;};'use strict';var pdf=require(_0xd378('0x0'));var emlformat=require(_0xd378('0x1'));var rimraf=require(_0xd378('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xd378('0x3'));var moment=require(_0xd378('0x4'));var BPromise=require(_0xd378('0x5'));var Mustache=require(_0xd378('0x6'));var util=require(_0xd378('0x7'));var path=require(_0xd378('0x8'));var sox=require('sox');var csv=require(_0xd378('0x9'));var ejs=require(_0xd378('0xa'));var fs=require('fs');var _=require(_0xd378('0xb'));var squel=require(_0xd378('0xc'));var crypto=require(_0xd378('0xd'));var jsforce=require(_0xd378('0xe'));var deskjs=require(_0xd378('0xf'));var toCsv=require(_0xd378('0x9'));var querystring=require('querystring');var Papa=require(_0xd378('0x10'));var Redis=require(_0xd378('0x11'));var authService=require(_0xd378('0x12'));var qs=require(_0xd378('0x13'));var hardwareService=require(_0xd378('0x14'));var logger=require(_0xd378('0x15'))(_0xd378('0x16'));var utils=require(_0xd378('0x17'));var config=require(_0xd378('0x18'));var db=require(_0xd378('0x19'))['db'];function respondWithStatusCode(_0x1fd814,_0x5e53ac){_0x5e53ac=_0x5e53ac||0xcc;return function(_0x436596){if(_0x436596){return _0x1fd814[_0xd378('0x1a')](_0x5e53ac);}return _0x1fd814[_0xd378('0x1b')](_0x5e53ac)[_0xd378('0x1c')]();};}function respondWithResult(_0x2a1f3e,_0x224964){_0x224964=_0x224964||0xc8;return function(_0x518632){if(_0x518632){return _0x2a1f3e['status'](_0x224964)[_0xd378('0x1d')](_0x518632);}};}function respondWithFilteredResult(_0x5364fd,_0x293d6b){return function(_0x4a4d9e){if(_0x4a4d9e){var _0x5d5778=_0x4a4d9e['count'],_0x17ca1f=_0x293d6b[_0xd378('0x1e')],_0x1371c5=_0x293d6b[_0xd378('0x1e')]+_0x293d6b[_0xd378('0x1f')],_0x217dd1;if(_0x1371c5>=_0x5d5778){_0x1371c5=_0x5d5778;_0x217dd1=0xc8;}else{_0x217dd1=0xce;}_0x5364fd[_0xd378('0x1b')](_0x217dd1);return _0x5364fd['set'](_0xd378('0x20'),_0x17ca1f+'-'+_0x1371c5+'/'+_0x5d5778)['json'](_0x4a4d9e);}return null;};}function patchUpdates(_0x16253e){return function(_0x19efb7){try{jsonpatch[_0xd378('0x21')](_0x19efb7,_0x16253e,!![]);}catch(_0x30e9fe){return BPromise[_0xd378('0x22')](_0x30e9fe);}return _0x19efb7['save']();};}function saveUpdates(_0x3acc0d,_0x45015e){return function(_0x46c333){if(_0x46c333){return _0x46c333[_0xd378('0x23')](_0x3acc0d)[_0xd378('0x24')](function(_0x1e378a){return _0x1e378a;});}return null;};}function removeEntity(_0x2abff4,_0x5bcb81){return function(_0x156749){if(_0x156749){return _0x156749[_0xd378('0x25')]()[_0xd378('0x24')](function(){_0x2abff4[_0xd378('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x197ab1,_0x153e4f){return function(_0x175ecc){if(!_0x175ecc){_0x197ab1[_0xd378('0x1a')](0x194);}return _0x175ecc;};}function handleError(_0x492f67,_0x46c387){_0x46c387=_0x46c387||0x1f4;return function(_0x3ebabd){logger[_0xd378('0x26')](_0x3ebabd[_0xd378('0x27')]);if(_0x3ebabd[_0xd378('0x28')]){delete _0x3ebabd[_0xd378('0x28')];}_0x492f67[_0xd378('0x1b')](_0x46c387)['send'](_0x3ebabd);};}exports[_0xd378('0x29')]=function(_0x3e752f,_0xdc4a9d){var _0x584172={},_0x317d56={},_0x39d842={'count':0x0,'rows':[]};var _0x5752df=db[_0xd378('0x2a')]['rawAttributes'];_0x317d56[_0xd378('0x2b')]=_[_0xd378('0x2c')](_0x5752df);_0x317d56['query']=_[_0xd378('0x2c')](_0x3e752f[_0xd378('0x2d')]);_0x317d56[_0xd378('0x2e')]=_[_0xd378('0x2f')](_0x317d56['model'],_0x317d56[_0xd378('0x2d')]);_0x584172['attributes']=_['intersection'](_0x317d56[_0xd378('0x2b')],qs[_0xd378('0x30')](_0x3e752f[_0xd378('0x2d')][_0xd378('0x30')]));_0x584172[_0xd378('0x31')]=_0x584172[_0xd378('0x31')][_0xd378('0x32')]?_0x584172['attributes']:_0x317d56[_0xd378('0x2b')];if(!_0x3e752f[_0xd378('0x2d')][_0xd378('0x33')](_0xd378('0x34'))){_0x584172[_0xd378('0x1f')]=qs['limit'](_0x3e752f[_0xd378('0x2d')]['limit']);_0x584172[_0xd378('0x1e')]=qs['offset'](_0x3e752f[_0xd378('0x2d')][_0xd378('0x1e')]);}_0x584172[_0xd378('0x35')]=qs[_0xd378('0x36')](_0x3e752f['query'][_0xd378('0x36')]);_0x584172['where']=qs['filters'](_['pick'](_0x3e752f[_0xd378('0x2d')],_0x317d56[_0xd378('0x2e')]));if(_0x3e752f[_0xd378('0x2d')][_0xd378('0x37')]){_0x584172[_0xd378('0x38')]=_[_0xd378('0x39')](_0x584172[_0xd378('0x38')],{'$or':_[_0xd378('0x3a')](_0x5752df,function(_0x275a88){if(_0x275a88[_0xd378('0x3b')][_0xd378('0x3c')]!==_0xd378('0x3d')){var _0x19ff9d={};_0x19ff9d[_0x275a88['field']]={'$like':'%'+_0x3e752f[_0xd378('0x2d')][_0xd378('0x37')]+'%'};return _0x19ff9d;}})});}_0x584172=_[_0xd378('0x39')]({},_0x584172,_0x3e752f[_0xd378('0x3e')]);var _0x21d8f5={'where':_0x584172[_0xd378('0x38')]};return db['AnalyticTreeReport'][_0xd378('0x3f')](_0x21d8f5)[_0xd378('0x24')](function(_0x4cae70){_0x39d842['count']=_0x4cae70;if(_0x3e752f[_0xd378('0x2d')][_0xd378('0x40')]){_0x584172[_0xd378('0x41')]=[{'all':!![]}];}return db[_0xd378('0x2a')][_0xd378('0x42')](_0x584172);})['then'](function(_0x32ded9){_0x39d842[_0xd378('0x43')]=_0x32ded9;return _0x39d842;})[_0xd378('0x24')](respondWithFilteredResult(_0xdc4a9d,_0x584172))[_0xd378('0x44')](handleError(_0xdc4a9d,null));};exports['show']=function(_0x17bf2b,_0x2d42b6){var _0x31258e={'raw':!![],'where':{'id':_0x17bf2b['params']['id']}},_0xbc5f60={};_0xbc5f60[_0xd378('0x2b')]=_[_0xd378('0x2c')](db[_0xd378('0x2a')][_0xd378('0x45')]);_0xbc5f60[_0xd378('0x2d')]=_[_0xd378('0x2c')](_0x17bf2b[_0xd378('0x2d')]);_0xbc5f60[_0xd378('0x2e')]=_[_0xd378('0x2f')](_0xbc5f60[_0xd378('0x2b')],_0xbc5f60['query']);_0x31258e[_0xd378('0x31')]=_[_0xd378('0x2f')](_0xbc5f60[_0xd378('0x2b')],qs['fields'](_0x17bf2b[_0xd378('0x2d')][_0xd378('0x30')]));_0x31258e['attributes']=_0x31258e['attributes'][_0xd378('0x32')]?_0x31258e[_0xd378('0x31')]:_0xbc5f60['model'];if(_0x17bf2b['query']['includeAll']){_0x31258e['include']=[{'all':!![]}];}_0x31258e=_[_0xd378('0x39')]({},_0x31258e,_0x17bf2b[_0xd378('0x3e')]);return db[_0xd378('0x2a')][_0xd378('0x46')](_0x31258e)[_0xd378('0x24')](handleEntityNotFound(_0x2d42b6,null))[_0xd378('0x24')](respondWithResult(_0x2d42b6,null))['catch'](handleError(_0x2d42b6,null));};exports[_0xd378('0x47')]=function(_0x31c28b,_0x28e802){return db[_0xd378('0x2a')][_0xd378('0x47')](_0x31c28b[_0xd378('0x48')],{})[_0xd378('0x24')](respondWithResult(_0x28e802,0xc9))[_0xd378('0x44')](handleError(_0x28e802,null));};exports[_0xd378('0x23')]=function(_0xa94ddd,_0x34875b){if(_0xa94ddd[_0xd378('0x48')]['id']){delete _0xa94ddd[_0xd378('0x48')]['id'];}return db[_0xd378('0x2a')][_0xd378('0x46')]({'where':{'id':_0xa94ddd['params']['id']}})['then'](handleEntityNotFound(_0x34875b,null))[_0xd378('0x24')](saveUpdates(_0xa94ddd[_0xd378('0x48')],null))[_0xd378('0x24')](respondWithResult(_0x34875b,null))[_0xd378('0x44')](handleError(_0x34875b,null));};exports[_0xd378('0x25')]=function(_0x3f073b,_0x505a5a){return db[_0xd378('0x2a')][_0xd378('0x46')]({'where':{'id':_0x3f073b[_0xd378('0x49')]['id']}})[_0xd378('0x24')](handleEntityNotFound(_0x505a5a,null))[_0xd378('0x24')](removeEntity(_0x505a5a,null))[_0xd378('0x44')](handleError(_0x505a5a,null));};
\ No newline at end of file
+var _0x903d=['html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','sendStatus','error','stack','name','send','index','AnalyticTreeReport','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','limit','sort','where','pick','filter','type','key','VIRTUAL','merge','options','includeAll','include','rows','catch','show','params','find','create','body'];(function(_0x4765a7,_0x2e2248){var _0xd05e90=function(_0x2bda7c){while(--_0x2bda7c){_0x4765a7['push'](_0x4765a7['shift']());}};_0xd05e90(++_0x2e2248);}(_0x903d,0x17c));var _0xd903=function(_0x674742,_0x172214){_0x674742=_0x674742-0x0;var _0x1cb500=_0x903d[_0x674742];return _0x1cb500;};'use strict';var pdf=require(_0xd903('0x0'));var emlformat=require(_0xd903('0x1'));var rimraf=require(_0xd903('0x2'));var zipdir=require(_0xd903('0x3'));var jsonpatch=require(_0xd903('0x4'));var rp=require(_0xd903('0x5'));var moment=require('moment');var BPromise=require(_0xd903('0x6'));var Mustache=require(_0xd903('0x7'));var util=require(_0xd903('0x8'));var path=require(_0xd903('0x9'));var sox=require(_0xd903('0xa'));var csv=require(_0xd903('0xb'));var ejs=require(_0xd903('0xc'));var fs=require('fs');var _=require(_0xd903('0xd'));var squel=require(_0xd903('0xe'));var crypto=require(_0xd903('0xf'));var jsforce=require(_0xd903('0x10'));var deskjs=require(_0xd903('0x11'));var toCsv=require('to-csv');var querystring=require(_0xd903('0x12'));var Papa=require(_0xd903('0x13'));var Redis=require(_0xd903('0x14'));var authService=require(_0xd903('0x15'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xd903('0x16'))(_0xd903('0x17'));var utils=require(_0xd903('0x18'));var config=require(_0xd903('0x19'));var db=require(_0xd903('0x1a'))['db'];function respondWithStatusCode(_0x396dec,_0x4f741c){_0x4f741c=_0x4f741c||0xcc;return function(_0x359089){if(_0x359089){return _0x396dec['sendStatus'](_0x4f741c);}return _0x396dec[_0xd903('0x1b')](_0x4f741c)[_0xd903('0x1c')]();};}function respondWithResult(_0x472fc1,_0x5878fc){_0x5878fc=_0x5878fc||0xc8;return function(_0x1afcf9){if(_0x1afcf9){return _0x472fc1[_0xd903('0x1b')](_0x5878fc)[_0xd903('0x1d')](_0x1afcf9);}};}function respondWithFilteredResult(_0xefc07b,_0x1633dd){return function(_0x598d20){if(_0x598d20){var _0x2ecdf9=_0x598d20[_0xd903('0x1e')],_0x12f349=_0x1633dd[_0xd903('0x1f')],_0x14c158=_0x1633dd[_0xd903('0x1f')]+_0x1633dd['limit'],_0x5022be;if(_0x14c158>=_0x2ecdf9){_0x14c158=_0x2ecdf9;_0x5022be=0xc8;}else{_0x5022be=0xce;}_0xefc07b['status'](_0x5022be);return _0xefc07b[_0xd903('0x20')](_0xd903('0x21'),_0x12f349+'-'+_0x14c158+'/'+_0x2ecdf9)[_0xd903('0x1d')](_0x598d20);}return null;};}function patchUpdates(_0x39e37d){return function(_0x417e11){try{jsonpatch[_0xd903('0x22')](_0x417e11,_0x39e37d,!![]);}catch(_0x551a45){return BPromise[_0xd903('0x23')](_0x551a45);}return _0x417e11[_0xd903('0x24')]();};}function saveUpdates(_0x5e989d,_0x1b4d5b){return function(_0x233a5a){if(_0x233a5a){return _0x233a5a[_0xd903('0x25')](_0x5e989d)[_0xd903('0x26')](function(_0x351dd7){return _0x351dd7;});}return null;};}function removeEntity(_0x16630c,_0x2256af){return function(_0x82e506){if(_0x82e506){return _0x82e506[_0xd903('0x27')]()['then'](function(){_0x16630c[_0xd903('0x1b')](0xcc)[_0xd903('0x1c')]();});}};}function handleEntityNotFound(_0x2f3398,_0x4b16f1){return function(_0x195374){if(!_0x195374){_0x2f3398[_0xd903('0x28')](0x194);}return _0x195374;};}function handleError(_0x4cf837,_0x533979){_0x533979=_0x533979||0x1f4;return function(_0x31d5e3){logger[_0xd903('0x29')](_0x31d5e3[_0xd903('0x2a')]);if(_0x31d5e3['name']){delete _0x31d5e3[_0xd903('0x2b')];}_0x4cf837[_0xd903('0x1b')](_0x533979)[_0xd903('0x2c')](_0x31d5e3);};}exports[_0xd903('0x2d')]=function(_0x3a2b6c,_0x123e26){var _0x4d6e1b={},_0x5c66d0={},_0x4b8a08={'count':0x0,'rows':[]};var _0x2ba20b=db[_0xd903('0x2e')][_0xd903('0x2f')];_0x5c66d0[_0xd903('0x30')]=_[_0xd903('0x31')](_0x2ba20b);_0x5c66d0[_0xd903('0x32')]=_['keys'](_0x3a2b6c[_0xd903('0x32')]);_0x5c66d0[_0xd903('0x33')]=_[_0xd903('0x34')](_0x5c66d0[_0xd903('0x30')],_0x5c66d0[_0xd903('0x32')]);_0x4d6e1b['attributes']=_[_0xd903('0x34')](_0x5c66d0[_0xd903('0x30')],qs[_0xd903('0x35')](_0x3a2b6c[_0xd903('0x32')][_0xd903('0x35')]));_0x4d6e1b['attributes']=_0x4d6e1b[_0xd903('0x36')][_0xd903('0x37')]?_0x4d6e1b[_0xd903('0x36')]:_0x5c66d0[_0xd903('0x30')];if(!_0x3a2b6c[_0xd903('0x32')][_0xd903('0x38')]('nolimit')){_0x4d6e1b[_0xd903('0x39')]=qs['limit'](_0x3a2b6c['query'][_0xd903('0x39')]);_0x4d6e1b['offset']=qs['offset'](_0x3a2b6c[_0xd903('0x32')][_0xd903('0x1f')]);}_0x4d6e1b['order']=qs[_0xd903('0x3a')](_0x3a2b6c[_0xd903('0x32')][_0xd903('0x3a')]);_0x4d6e1b[_0xd903('0x3b')]=qs['filters'](_[_0xd903('0x3c')](_0x3a2b6c[_0xd903('0x32')],_0x5c66d0[_0xd903('0x33')]));if(_0x3a2b6c['query'][_0xd903('0x3d')]){_0x4d6e1b[_0xd903('0x3b')]=_['merge'](_0x4d6e1b[_0xd903('0x3b')],{'$or':_['map'](_0x2ba20b,function(_0x2d4585){if(_0x2d4585[_0xd903('0x3e')][_0xd903('0x3f')]!==_0xd903('0x40')){var _0x3e4a27={};_0x3e4a27[_0x2d4585['field']]={'$like':'%'+_0x3a2b6c['query'][_0xd903('0x3d')]+'%'};return _0x3e4a27;}})});}_0x4d6e1b=_[_0xd903('0x41')]({},_0x4d6e1b,_0x3a2b6c[_0xd903('0x42')]);var _0x16a926={'where':_0x4d6e1b[_0xd903('0x3b')]};return db[_0xd903('0x2e')][_0xd903('0x1e')](_0x16a926)[_0xd903('0x26')](function(_0x3f40b6){_0x4b8a08[_0xd903('0x1e')]=_0x3f40b6;if(_0x3a2b6c[_0xd903('0x32')][_0xd903('0x43')]){_0x4d6e1b[_0xd903('0x44')]=[{'all':!![]}];}return db['AnalyticTreeReport']['findAll'](_0x4d6e1b);})['then'](function(_0x25413c){_0x4b8a08[_0xd903('0x45')]=_0x25413c;return _0x4b8a08;})[_0xd903('0x26')](respondWithFilteredResult(_0x123e26,_0x4d6e1b))[_0xd903('0x46')](handleError(_0x123e26,null));};exports[_0xd903('0x47')]=function(_0x57d6af,_0x27143f){var _0x5e45be={'raw':!![],'where':{'id':_0x57d6af[_0xd903('0x48')]['id']}},_0x12a821={};_0x12a821[_0xd903('0x30')]=_[_0xd903('0x31')](db['AnalyticTreeReport'][_0xd903('0x2f')]);_0x12a821[_0xd903('0x32')]=_[_0xd903('0x31')](_0x57d6af['query']);_0x12a821[_0xd903('0x33')]=_[_0xd903('0x34')](_0x12a821[_0xd903('0x30')],_0x12a821[_0xd903('0x32')]);_0x5e45be[_0xd903('0x36')]=_['intersection'](_0x12a821[_0xd903('0x30')],qs[_0xd903('0x35')](_0x57d6af['query'][_0xd903('0x35')]));_0x5e45be['attributes']=_0x5e45be[_0xd903('0x36')][_0xd903('0x37')]?_0x5e45be[_0xd903('0x36')]:_0x12a821['model'];if(_0x57d6af[_0xd903('0x32')][_0xd903('0x43')]){_0x5e45be['include']=[{'all':!![]}];}_0x5e45be=_[_0xd903('0x41')]({},_0x5e45be,_0x57d6af[_0xd903('0x42')]);return db['AnalyticTreeReport'][_0xd903('0x49')](_0x5e45be)[_0xd903('0x26')](handleEntityNotFound(_0x27143f,null))[_0xd903('0x26')](respondWithResult(_0x27143f,null))[_0xd903('0x46')](handleError(_0x27143f,null));};exports[_0xd903('0x4a')]=function(_0x4b2daf,_0x24819b){return db[_0xd903('0x2e')][_0xd903('0x4a')](_0x4b2daf[_0xd903('0x4b')],{})[_0xd903('0x26')](respondWithResult(_0x24819b,0xc9))['catch'](handleError(_0x24819b,null));};exports[_0xd903('0x25')]=function(_0x290e70,_0x3cffde){if(_0x290e70[_0xd903('0x4b')]['id']){delete _0x290e70[_0xd903('0x4b')]['id'];}return db[_0xd903('0x2e')][_0xd903('0x49')]({'where':{'id':_0x290e70[_0xd903('0x48')]['id']}})['then'](handleEntityNotFound(_0x3cffde,null))[_0xd903('0x26')](saveUpdates(_0x290e70[_0xd903('0x4b')],null))['then'](respondWithResult(_0x3cffde,null))[_0xd903('0x46')](handleError(_0x3cffde,null));};exports[_0xd903('0x27')]=function(_0x4253e7,_0x469009){return db[_0xd903('0x2e')][_0xd903('0x49')]({'where':{'id':_0x4253e7[_0xd903('0x48')]['id']}})[_0xd903('0x26')](handleEntityNotFound(_0x469009,null))[_0xd903('0x26')](removeEntity(_0x469009,null))['catch'](handleError(_0x469009,null));};
\ No newline at end of file
index 5844f42..112c079 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b8d=['define','AnalyticTreeReport','util','api','rimraf','../../config/environment','exports'];(function(_0x1ec6b3,_0x4d613c){var _0x7f842c=function(_0x3e1c27){while(--_0x3e1c27){_0x1ec6b3['push'](_0x1ec6b3['shift']());}};_0x7f842c(++_0x4d613c);}(_0x4b8d,0x1d7));var _0xd4b8=function(_0x261b8a,_0x553ec4){_0x261b8a=_0x261b8a-0x0;var _0x3455e8=_0x4b8d[_0x261b8a];return _0x3455e8;};'use strict';var _=require('lodash');var util=require(_0xd4b8('0x0'));var logger=require('../../config/logger')(_0xd4b8('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xd4b8('0x2'));var config=require(_0xd4b8('0x3'));var attributes=require('./analyticTreeReport.attributes');module[_0xd4b8('0x4')]=function(_0x2d8678,_0x499d13){return _0x2d8678[_0xd4b8('0x5')](_0xd4b8('0x6'),attributes,{'tableName':'analytics_report_trees','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xc1af=['lodash','util','api','request-promise','path','rimraf','../../config/environment','define','AnalyticTreeReport','analytics_report_trees'];(function(_0x2fd249,_0xd0fdd6){var _0xfa0151=function(_0x144542){while(--_0x144542){_0x2fd249['push'](_0x2fd249['shift']());}};_0xfa0151(++_0xd0fdd6);}(_0xc1af,0x1b8));var _0xfc1a=function(_0x506884,_0x2ca01c){_0x506884=_0x506884-0x0;var _0x5e72bc=_0xc1af[_0x506884];return _0x5e72bc;};'use strict';var _=require(_0xfc1a('0x0'));var util=require(_0xfc1a('0x1'));var logger=require('../../config/logger')(_0xfc1a('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xfc1a('0x3'));var fs=require('fs');var path=require(_0xfc1a('0x4'));var rimraf=require(_0xfc1a('0x5'));var config=require(_0xfc1a('0x6'));var attributes=require('./analyticTreeReport.attributes');module['exports']=function(_0x70730f,_0x3d5d7c){return _0x70730f[_0xfc1a('0x7')](_0xfc1a('0x8'),attributes,{'tableName':_0xfc1a('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 66df682..2d6fe37 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb5ca=['request\x20sent','stringify','error','code','message','result','catch','util','bluebird','randomstring','ioredis','../../config/utils','rpc','jayson/promise','client','http','request','then','info','AnalyticTreeReport,\x20%s,\x20%s'];(function(_0x12dca7,_0x58bdc3){var _0x299476=function(_0x26226e){while(--_0x26226e){_0x12dca7['push'](_0x12dca7['shift']());}};_0x299476(++_0x58bdc3);}(_0xb5ca,0xf7));var _0xab5c=function(_0x27e4b7,_0x4fe02d){_0x27e4b7=_0x27e4b7-0x0;var _0x47483e=_0xb5ca[_0x27e4b7];return _0x47483e;};'use strict';var _=require('lodash');var util=require(_0xab5c('0x0'));var moment=require('moment');var BPromise=require(_0xab5c('0x1'));var rs=require(_0xab5c('0x2'));var fs=require('fs');var Redis=require(_0xab5c('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xab5c('0x4'));var logger=require('../../config/logger')(_0xab5c('0x5'));var config=require('../../config/environment');var jayson=require(_0xab5c('0x6'));var client=jayson[_0xab5c('0x7')][_0xab5c('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x34ef87,_0x1ffe55,_0x35394a){return new BPromise(function(_0x20ac13,_0x2ffe25){return client[_0xab5c('0x9')](_0x34ef87,_0x35394a)[_0xab5c('0xa')](function(_0x13c52a){logger[_0xab5c('0xb')](_0xab5c('0xc'),_0x1ffe55,'request\x20sent');logger['debug']('AnalyticTreeReport,\x20%s,\x20%s,\x20%s',_0x1ffe55,_0xab5c('0xd'),JSON[_0xab5c('0xe')](_0x13c52a));if(_0x13c52a[_0xab5c('0xf')]){if(_0x13c52a[_0xab5c('0xf')][_0xab5c('0x10')]===0x1f4){logger['error']('AnalyticTreeReport,\x20%s,\x20%s',_0x1ffe55,_0x13c52a['error']['message']);return _0x2ffe25(_0x13c52a[_0xab5c('0xf')][_0xab5c('0x11')]);}logger[_0xab5c('0xf')](_0xab5c('0xc'),_0x1ffe55,_0x13c52a[_0xab5c('0xf')]['message']);return _0x20ac13(_0x13c52a[_0xab5c('0xf')][_0xab5c('0x11')]);}else{logger[_0xab5c('0xb')](_0xab5c('0xc'),_0x1ffe55,_0xab5c('0xd'));_0x20ac13(_0x13c52a[_0xab5c('0x12')][_0xab5c('0x11')]);}})[_0xab5c('0x13')](function(_0x2137c6){logger['error'](_0xab5c('0xc'),_0x1ffe55,_0x2137c6);_0x2ffe25(_0x2137c6);});});}
\ No newline at end of file
+var _0xb4cb=['moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','http','request','then','AnalyticTreeReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticTreeReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','util'];(function(_0x18ab2a,_0x4debcd){var _0x16dcee=function(_0x10107a){while(--_0x10107a){_0x18ab2a['push'](_0x18ab2a['shift']());}};_0x16dcee(++_0x4debcd);}(_0xb4cb,0xb6));var _0xbb4c=function(_0x3a01f6,_0x2e8fcd){_0x3a01f6=_0x3a01f6-0x0;var _0x5054ab=_0xb4cb[_0x3a01f6];return _0x5054ab;};'use strict';var _=require(_0xbb4c('0x0'));var util=require(_0xbb4c('0x1'));var moment=require(_0xbb4c('0x2'));var BPromise=require(_0xbb4c('0x3'));var rs=require(_0xbb4c('0x4'));var fs=require('fs');var Redis=require(_0xbb4c('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xbb4c('0x6'));var logger=require(_0xbb4c('0x7'))(_0xbb4c('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client'][_0xbb4c('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3ff7af,_0x137520,_0xf0e84d){return new BPromise(function(_0x45f133,_0x225f94){return client[_0xbb4c('0xa')](_0x3ff7af,_0xf0e84d)[_0xbb4c('0xb')](function(_0x2cfd57){logger['info'](_0xbb4c('0xc'),_0x137520,_0xbb4c('0xd'));logger[_0xbb4c('0xe')](_0xbb4c('0xf'),_0x137520,'request\x20sent',JSON[_0xbb4c('0x10')](_0x2cfd57));if(_0x2cfd57[_0xbb4c('0x11')]){if(_0x2cfd57[_0xbb4c('0x11')][_0xbb4c('0x12')]===0x1f4){logger[_0xbb4c('0x11')]('AnalyticTreeReport,\x20%s,\x20%s',_0x137520,_0x2cfd57['error']['message']);return _0x225f94(_0x2cfd57[_0xbb4c('0x11')][_0xbb4c('0x13')]);}logger['error'](_0xbb4c('0xc'),_0x137520,_0x2cfd57[_0xbb4c('0x11')][_0xbb4c('0x13')]);return _0x45f133(_0x2cfd57[_0xbb4c('0x11')]['message']);}else{logger[_0xbb4c('0x14')](_0xbb4c('0xc'),_0x137520,_0xbb4c('0xd'));_0x45f133(_0x2cfd57[_0xbb4c('0x15')][_0xbb4c('0x13')]);}})[_0xbb4c('0x16')](function(_0x1658c1){logger['error'](_0xbb4c('0xc'),_0x137520,_0x1658c1);_0x225f94(_0x1658c1);});});}
\ No newline at end of file
index bbb0fda..e3e86a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2643=['express','../../components/interaction/service','../../config/environment','get','isAuthenticated','post','put','/:id','update','destroy','exports','multer','util','path'];(function(_0x4687df,_0x12099c){var _0x32eaef=function(_0x2387db){while(--_0x2387db){_0x4687df['push'](_0x4687df['shift']());}};_0x32eaef(++_0x12099c);}(_0x2643,0x115));var _0x3264=function(_0x152fb4,_0x26965a){_0x152fb4=_0x152fb4-0x0;var _0x28cafa=_0x2643[_0x152fb4];return _0x28cafa;};'use strict';var multer=require(_0x3264('0x0'));var util=require(_0x3264('0x1'));var path=require(_0x3264('0x2'));var timeout=require('connect-timeout');var express=require(_0x3264('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x3264('0x4'));var config=require(_0x3264('0x5'));var controller=require('./analyticTreeReport.controller');router[_0x3264('0x6')]('/',auth[_0x3264('0x7')](),controller['index']);router[_0x3264('0x6')]('/:id',auth['isAuthenticated'](),controller['show']);router[_0x3264('0x8')]('/',auth[_0x3264('0x7')](),controller['create']);router[_0x3264('0x9')](_0x3264('0xa'),auth['isAuthenticated'](),controller[_0x3264('0xb')]);router['delete']('/:id',auth['isAuthenticated'](),controller[_0x3264('0xc')]);module[_0x3264('0xd')]=router;
\ No newline at end of file
+var _0x64c5=['put','/:id','update','delete','destroy','exports','multer','util','path','connect-timeout','../../components/interaction/service','../../config/environment','./analyticTreeReport.controller','get','isAuthenticated','index','show','post','create'];(function(_0x24a9f8,_0x1849fc){var _0x41dd61=function(_0x236eda){while(--_0x236eda){_0x24a9f8['push'](_0x24a9f8['shift']());}};_0x41dd61(++_0x1849fc);}(_0x64c5,0x149));var _0x564c=function(_0xf0fe51,_0x586a2e){_0xf0fe51=_0xf0fe51-0x0;var _0x3a82f3=_0x64c5[_0xf0fe51];return _0x3a82f3;};'use strict';var multer=require(_0x564c('0x0'));var util=require(_0x564c('0x1'));var path=require(_0x564c('0x2'));var timeout=require(_0x564c('0x3'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x564c('0x4'));var config=require(_0x564c('0x5'));var controller=require(_0x564c('0x6'));router[_0x564c('0x7')]('/',auth[_0x564c('0x8')](),controller[_0x564c('0x9')]);router[_0x564c('0x7')]('/:id',auth[_0x564c('0x8')](),controller[_0x564c('0xa')]);router[_0x564c('0xb')]('/',auth[_0x564c('0x8')](),controller[_0x564c('0xc')]);router[_0x564c('0xd')](_0x564c('0xe'),auth[_0x564c('0x8')](),controller[_0x564c('0xf')]);router[_0x564c('0x10')](_0x564c('0xe'),auth['isAuthenticated'](),controller[_0x564c('0x11')]);module[_0x564c('0x12')]=router;
\ No newline at end of file
index 011acb0..abc7ff4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b83=['exports','STRING','sequelize'];(function(_0x42245d,_0x51758f){var _0x4b211a=function(_0x2634e){while(--_0x2634e){_0x42245d['push'](_0x42245d['shift']());}};_0x4b211a(++_0x51758f);}(_0x0b83,0x1c7));var _0x30b8=function(_0x3108e8,_0x35b08c){_0x3108e8=_0x3108e8-0x0;var _0x476b3f=_0x0b83[_0x3108e8];return _0x476b3f;};'use strict';var Sequelize=require(_0x30b8('0x0'));module[_0x30b8('0x1')]={'name':{'type':Sequelize['STRING']},'basename':{'type':Sequelize[_0x30b8('0x2')]},'type':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x2bcf=['STRING','sequelize','exports'];(function(_0x1d560f,_0x1e5977){var _0x5e6b5d=function(_0x4d1138){while(--_0x4d1138){_0x1d560f['push'](_0x1d560f['shift']());}};_0x5e6b5d(++_0x1e5977);}(_0x2bcf,0xe5));var _0xf2bc=function(_0x20d9f0,_0x453415){_0x20d9f0=_0x20d9f0-0x0;var _0x195dda=_0x2bcf[_0x20d9f0];return _0x195dda;};'use strict';var Sequelize=require(_0xf2bc('0x0'));module[_0xf2bc('0x1')]={'name':{'type':Sequelize['STRING']},'basename':{'type':Sequelize[_0xf2bc('0x2')]},'type':{'type':Sequelize['STRING']}};
\ No newline at end of file
index f80582b..a1ca68c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd965=['error','name','index','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','filters','filter','where','map','key','VIRTUAL','merge','options','Attachment','includeAll','include','findAll','catch','show','params','rawAttributes','find','body','create','file','originalname','basename','filename','type','mimetype','download','findOne','join','root','server/files/attachments/','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy'];(function(_0x1541c3,_0x2c6f07){var _0x3f9028=function(_0x75d32b){while(--_0x75d32b){_0x1541c3['push'](_0x1541c3['shift']());}};_0x3f9028(++_0x2c6f07);}(_0xd965,0x128));var _0x5d96=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xd965[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0x5d96('0x0'));var emlformat=require(_0x5d96('0x1'));var rimraf=require(_0x5d96('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x5d96('0x3'));var rp=require(_0x5d96('0x4'));var moment=require(_0x5d96('0x5'));var BPromise=require(_0x5d96('0x6'));var Mustache=require(_0x5d96('0x7'));var util=require(_0x5d96('0x8'));var path=require(_0x5d96('0x9'));var sox=require(_0x5d96('0xa'));var csv=require(_0x5d96('0xb'));var ejs=require(_0x5d96('0xc'));var fs=require('fs');var _=require(_0x5d96('0xd'));var squel=require(_0x5d96('0xe'));var crypto=require('crypto');var jsforce=require(_0x5d96('0xf'));var deskjs=require(_0x5d96('0x10'));var toCsv=require(_0x5d96('0xb'));var querystring=require(_0x5d96('0x11'));var Papa=require('papaparse');var Redis=require(_0x5d96('0x12'));var authService=require(_0x5d96('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x5d96('0x14'));var logger=require(_0x5d96('0x15'))(_0x5d96('0x16'));var utils=require('../../config/utils');var config=require(_0x5d96('0x17'));var db=require(_0x5d96('0x18'))['db'];function respondWithStatusCode(_0x151fd8,_0x58c98c){_0x58c98c=_0x58c98c||0xcc;return function(_0x476964){if(_0x476964){return _0x151fd8[_0x5d96('0x19')](_0x58c98c);}return _0x151fd8[_0x5d96('0x1a')](_0x58c98c)[_0x5d96('0x1b')]();};}function respondWithResult(_0x7bdf87,_0x1a298b){_0x1a298b=_0x1a298b||0xc8;return function(_0x19f5c7){if(_0x19f5c7){return _0x7bdf87[_0x5d96('0x1a')](_0x1a298b)[_0x5d96('0x1c')](_0x19f5c7);}};}function respondWithFilteredResult(_0x44d28b,_0x295d1c){return function(_0x2243e6){if(_0x2243e6){var _0x4700b5=_0x2243e6[_0x5d96('0x1d')],_0x29ad22=_0x295d1c['offset'],_0x4056f6=_0x295d1c[_0x5d96('0x1e')]+_0x295d1c[_0x5d96('0x1f')],_0x50706f;if(_0x4056f6>=_0x4700b5){_0x4056f6=_0x4700b5;_0x50706f=0xc8;}else{_0x50706f=0xce;}_0x44d28b[_0x5d96('0x1a')](_0x50706f);return _0x44d28b[_0x5d96('0x20')](_0x5d96('0x21'),_0x29ad22+'-'+_0x4056f6+'/'+_0x4700b5)[_0x5d96('0x1c')](_0x2243e6);}return null;};}function patchUpdates(_0x50a2b0){return function(_0x364e79){try{jsonpatch[_0x5d96('0x22')](_0x364e79,_0x50a2b0,!![]);}catch(_0x1cb4be){return BPromise[_0x5d96('0x23')](_0x1cb4be);}return _0x364e79[_0x5d96('0x24')]();};}function saveUpdates(_0x5f5bc4,_0xc16d48){return function(_0x597df7){if(_0x597df7){return _0x597df7[_0x5d96('0x25')](_0x5f5bc4)[_0x5d96('0x26')](function(_0x1a7bfb){return _0x1a7bfb;});}return null;};}function removeEntity(_0x1df66b,_0x55f256){return function(_0x35b044){if(_0x35b044){return _0x35b044[_0x5d96('0x27')]()[_0x5d96('0x26')](function(){_0x1df66b[_0x5d96('0x1a')](0xcc)[_0x5d96('0x1b')]();});}};}function handleEntityNotFound(_0x2ee612,_0x16890d){return function(_0x4a8a32){if(!_0x4a8a32){_0x2ee612[_0x5d96('0x19')](0x194);}return _0x4a8a32;};}function handleError(_0x54b4be,_0x5a3d1e){_0x5a3d1e=_0x5a3d1e||0x1f4;return function(_0x3d6891){logger[_0x5d96('0x28')](_0x3d6891['stack']);if(_0x3d6891[_0x5d96('0x29')]){delete _0x3d6891[_0x5d96('0x29')];}_0x54b4be[_0x5d96('0x1a')](_0x5a3d1e)['send'](_0x3d6891);};}exports[_0x5d96('0x2a')]=function(_0x4fb3be,_0x450dbe){var _0x491be7={},_0x2e49f9={},_0x28f715={'count':0x0,'rows':[]};var _0x40a725=db['Attachment']['rawAttributes'];_0x2e49f9[_0x5d96('0x2b')]=_[_0x5d96('0x2c')](_0x40a725);_0x2e49f9[_0x5d96('0x2d')]=_[_0x5d96('0x2c')](_0x4fb3be[_0x5d96('0x2d')]);_0x2e49f9['filters']=_[_0x5d96('0x2e')](_0x2e49f9[_0x5d96('0x2b')],_0x2e49f9[_0x5d96('0x2d')]);_0x491be7[_0x5d96('0x2f')]=_[_0x5d96('0x2e')](_0x2e49f9[_0x5d96('0x2b')],qs['fields'](_0x4fb3be['query'][_0x5d96('0x30')]));_0x491be7[_0x5d96('0x2f')]=_0x491be7[_0x5d96('0x2f')][_0x5d96('0x31')]?_0x491be7['attributes']:_0x2e49f9[_0x5d96('0x2b')];if(!_0x4fb3be['query'][_0x5d96('0x32')](_0x5d96('0x33'))){_0x491be7[_0x5d96('0x1f')]=qs[_0x5d96('0x1f')](_0x4fb3be[_0x5d96('0x2d')][_0x5d96('0x1f')]);_0x491be7[_0x5d96('0x1e')]=qs[_0x5d96('0x1e')](_0x4fb3be['query'][_0x5d96('0x1e')]);}_0x491be7[_0x5d96('0x34')]=qs[_0x5d96('0x35')](_0x4fb3be[_0x5d96('0x2d')][_0x5d96('0x35')]);_0x491be7['where']=qs[_0x5d96('0x36')](_['pick'](_0x4fb3be['query'],_0x2e49f9[_0x5d96('0x36')]));if(_0x4fb3be[_0x5d96('0x2d')][_0x5d96('0x37')]){_0x491be7[_0x5d96('0x38')]=_['merge'](_0x491be7[_0x5d96('0x38')],{'$or':_[_0x5d96('0x39')](_0x40a725,function(_0x24ee09){if(_0x24ee09['type'][_0x5d96('0x3a')]!==_0x5d96('0x3b')){var _0x5cad3e={};_0x5cad3e[_0x24ee09['field']]={'$like':'%'+_0x4fb3be['query'][_0x5d96('0x37')]+'%'};return _0x5cad3e;}})});}_0x491be7=_[_0x5d96('0x3c')]({},_0x491be7,_0x4fb3be[_0x5d96('0x3d')]);var _0x442c27={'where':_0x491be7[_0x5d96('0x38')]};return db[_0x5d96('0x3e')][_0x5d96('0x1d')](_0x442c27)[_0x5d96('0x26')](function(_0x196974){_0x28f715[_0x5d96('0x1d')]=_0x196974;if(_0x4fb3be[_0x5d96('0x2d')][_0x5d96('0x3f')]){_0x491be7[_0x5d96('0x40')]=[{'all':!![]}];}return db[_0x5d96('0x3e')][_0x5d96('0x41')](_0x491be7);})[_0x5d96('0x26')](function(_0x87c63f){_0x28f715['rows']=_0x87c63f;return _0x28f715;})['then'](respondWithFilteredResult(_0x450dbe,_0x491be7))[_0x5d96('0x42')](handleError(_0x450dbe,null));};exports[_0x5d96('0x43')]=function(_0x5664cb,_0x558a26){var _0x71941f={'raw':!![],'where':{'id':_0x5664cb[_0x5d96('0x44')]['id']}},_0x303cd8={};_0x303cd8[_0x5d96('0x2b')]=_[_0x5d96('0x2c')](db['Attachment'][_0x5d96('0x45')]);_0x303cd8[_0x5d96('0x2d')]=_[_0x5d96('0x2c')](_0x5664cb['query']);_0x303cd8['filters']=_[_0x5d96('0x2e')](_0x303cd8[_0x5d96('0x2b')],_0x303cd8['query']);_0x71941f[_0x5d96('0x2f')]=_[_0x5d96('0x2e')](_0x303cd8[_0x5d96('0x2b')],qs['fields'](_0x5664cb[_0x5d96('0x2d')][_0x5d96('0x30')]));_0x71941f[_0x5d96('0x2f')]=_0x71941f['attributes'][_0x5d96('0x31')]?_0x71941f[_0x5d96('0x2f')]:_0x303cd8[_0x5d96('0x2b')];if(_0x5664cb[_0x5d96('0x2d')]['includeAll']){_0x71941f['include']=[{'all':!![]}];}_0x71941f=_[_0x5d96('0x3c')]({},_0x71941f,_0x5664cb['options']);return db[_0x5d96('0x3e')][_0x5d96('0x46')](_0x71941f)[_0x5d96('0x26')](handleEntityNotFound(_0x558a26,null))['then'](respondWithResult(_0x558a26,null))['catch'](handleError(_0x558a26,null));};exports[_0x5d96('0x25')]=function(_0x44275c,_0x3df93b){if(_0x44275c[_0x5d96('0x47')]['id']){delete _0x44275c[_0x5d96('0x47')]['id'];}return db[_0x5d96('0x3e')][_0x5d96('0x46')]({'where':{'id':_0x44275c[_0x5d96('0x44')]['id']}})[_0x5d96('0x26')](handleEntityNotFound(_0x3df93b,null))[_0x5d96('0x26')](saveUpdates(_0x44275c[_0x5d96('0x47')],null))['then'](respondWithResult(_0x3df93b,null))[_0x5d96('0x42')](handleError(_0x3df93b,null));};exports[_0x5d96('0x27')]=function(_0x3b8a56,_0x3aa93e){return db[_0x5d96('0x3e')][_0x5d96('0x46')]({'where':{'id':_0x3b8a56['params']['id']}})[_0x5d96('0x26')](handleEntityNotFound(_0x3aa93e,null))['then'](removeEntity(_0x3aa93e,null))['catch'](handleError(_0x3aa93e,null));};exports[_0x5d96('0x48')]=function(_0x2f5908,_0x2ea850,_0x69f70b){_0x2f5908[_0x5d96('0x47')][_0x5d96('0x29')]=_0x2f5908[_0x5d96('0x49')][_0x5d96('0x4a')];_0x2f5908[_0x5d96('0x47')][_0x5d96('0x4b')]=_0x2f5908[_0x5d96('0x49')][_0x5d96('0x4c')];_0x2f5908[_0x5d96('0x47')][_0x5d96('0x4d')]=_0x2f5908[_0x5d96('0x49')][_0x5d96('0x4e')];return db['Attachment']['create'](_0x2f5908[_0x5d96('0x47')])[_0x5d96('0x26')](respondWithResult(_0x2ea850,0xc9))[_0x5d96('0x42')](handleError(_0x2ea850,null));};exports[_0x5d96('0x4f')]=function(_0x2a7588,_0xab0569,_0x1e9f39){return db[_0x5d96('0x3e')][_0x5d96('0x50')]({'where':{'id':_0x2a7588[_0x5d96('0x44')]['id']},'raw':!![]})[_0x5d96('0x26')](handleEntityNotFound(_0xab0569,null))['then'](function(_0x2cfd72){if(_0x2cfd72){return _0xab0569[_0x5d96('0x4f')](path[_0x5d96('0x51')](config[_0x5d96('0x52')],_0x5d96('0x53'),_0x2cfd72[_0x5d96('0x4b')]));}})[_0x5d96('0x42')](handleError(_0xab0569,null));};
\ No newline at end of file
+var _0x54aa=['create','file','originalname','basename','download','findOne','join','server/files/attachments/','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','util','path','sox','ejs','lodash','squel','crypto','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/utils','sendStatus','status','count','offset','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','end','error','name','send','Attachment','model','keys','query','attributes','intersection','fields','length','nolimit','order','sort','where','filters','pick','filter','merge','map','key','options','includeAll','include','findAll','rows','show','params','find','catch','body'];(function(_0x3585db,_0x134f75){var _0x25e8cd=function(_0x18437d){while(--_0x18437d){_0x3585db['push'](_0x3585db['shift']());}};_0x25e8cd(++_0x134f75);}(_0x54aa,0x1c4));var _0xa54a=function(_0x10dc7b,_0x117152){_0x10dc7b=_0x10dc7b-0x0;var _0x13619b=_0x54aa[_0x10dc7b];return _0x13619b;};'use strict';var pdf=require(_0xa54a('0x0'));var emlformat=require(_0xa54a('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xa54a('0x2'));var jsonpatch=require(_0xa54a('0x3'));var rp=require(_0xa54a('0x4'));var moment=require('moment');var BPromise=require(_0xa54a('0x5'));var Mustache=require('mustache');var util=require(_0xa54a('0x6'));var path=require(_0xa54a('0x7'));var sox=require(_0xa54a('0x8'));var csv=require('to-csv');var ejs=require(_0xa54a('0x9'));var fs=require('fs');var _=require(_0xa54a('0xa'));var squel=require(_0xa54a('0xb'));var crypto=require(_0xa54a('0xc'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xa54a('0xd'));var querystring=require(_0xa54a('0xe'));var Papa=require(_0xa54a('0xf'));var Redis=require('ioredis');var authService=require(_0xa54a('0x10'));var qs=require(_0xa54a('0x11'));var hardwareService=require(_0xa54a('0x12'));var logger=require('../../config/logger')('api');var utils=require(_0xa54a('0x13'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3d94c4,_0x5ceec4){_0x5ceec4=_0x5ceec4||0xcc;return function(_0x10882b){if(_0x10882b){return _0x3d94c4[_0xa54a('0x14')](_0x5ceec4);}return _0x3d94c4[_0xa54a('0x15')](_0x5ceec4)['end']();};}function respondWithResult(_0x353804,_0x36f919){_0x36f919=_0x36f919||0xc8;return function(_0x350902){if(_0x350902){return _0x353804[_0xa54a('0x15')](_0x36f919)['json'](_0x350902);}};}function respondWithFilteredResult(_0x232bce,_0x3abadc){return function(_0x50b832){if(_0x50b832){var _0x1cf7c0=_0x50b832[_0xa54a('0x16')],_0x3155e9=_0x3abadc[_0xa54a('0x17')],_0x4f247d=_0x3abadc[_0xa54a('0x17')]+_0x3abadc[_0xa54a('0x18')],_0x5ce7f5;if(_0x4f247d>=_0x1cf7c0){_0x4f247d=_0x1cf7c0;_0x5ce7f5=0xc8;}else{_0x5ce7f5=0xce;}_0x232bce[_0xa54a('0x15')](_0x5ce7f5);return _0x232bce[_0xa54a('0x19')](_0xa54a('0x1a'),_0x3155e9+'-'+_0x4f247d+'/'+_0x1cf7c0)[_0xa54a('0x1b')](_0x50b832);}return null;};}function patchUpdates(_0x28eeab){return function(_0x5b9e3d){try{jsonpatch[_0xa54a('0x1c')](_0x5b9e3d,_0x28eeab,!![]);}catch(_0x323ccb){return BPromise[_0xa54a('0x1d')](_0x323ccb);}return _0x5b9e3d[_0xa54a('0x1e')]();};}function saveUpdates(_0x76a726,_0x747b6b){return function(_0x3481fb){if(_0x3481fb){return _0x3481fb[_0xa54a('0x1f')](_0x76a726)[_0xa54a('0x20')](function(_0x5be7f9){return _0x5be7f9;});}return null;};}function removeEntity(_0x432eea,_0x5638ad){return function(_0x2b8b63){if(_0x2b8b63){return _0x2b8b63[_0xa54a('0x21')]()[_0xa54a('0x20')](function(){_0x432eea[_0xa54a('0x15')](0xcc)[_0xa54a('0x22')]();});}};}function handleEntityNotFound(_0x59f4da,_0x10403e){return function(_0x405e35){if(!_0x405e35){_0x59f4da['sendStatus'](0x194);}return _0x405e35;};}function handleError(_0x56a2c5,_0x3c0efd){_0x3c0efd=_0x3c0efd||0x1f4;return function(_0x53c068){logger[_0xa54a('0x23')](_0x53c068['stack']);if(_0x53c068[_0xa54a('0x24')]){delete _0x53c068['name'];}_0x56a2c5[_0xa54a('0x15')](_0x3c0efd)[_0xa54a('0x25')](_0x53c068);};}exports['index']=function(_0x3d5383,_0x30082d){var _0x45de94={},_0x50cfe6={},_0x2a48c1={'count':0x0,'rows':[]};var _0x44a4d6=db[_0xa54a('0x26')]['rawAttributes'];_0x50cfe6[_0xa54a('0x27')]=_[_0xa54a('0x28')](_0x44a4d6);_0x50cfe6[_0xa54a('0x29')]=_[_0xa54a('0x28')](_0x3d5383['query']);_0x50cfe6['filters']=_['intersection'](_0x50cfe6[_0xa54a('0x27')],_0x50cfe6['query']);_0x45de94[_0xa54a('0x2a')]=_[_0xa54a('0x2b')](_0x50cfe6[_0xa54a('0x27')],qs[_0xa54a('0x2c')](_0x3d5383[_0xa54a('0x29')][_0xa54a('0x2c')]));_0x45de94['attributes']=_0x45de94[_0xa54a('0x2a')][_0xa54a('0x2d')]?_0x45de94['attributes']:_0x50cfe6[_0xa54a('0x27')];if(!_0x3d5383[_0xa54a('0x29')]['hasOwnProperty'](_0xa54a('0x2e'))){_0x45de94[_0xa54a('0x18')]=qs[_0xa54a('0x18')](_0x3d5383[_0xa54a('0x29')]['limit']);_0x45de94[_0xa54a('0x17')]=qs['offset'](_0x3d5383[_0xa54a('0x29')]['offset']);}_0x45de94[_0xa54a('0x2f')]=qs['sort'](_0x3d5383[_0xa54a('0x29')][_0xa54a('0x30')]);_0x45de94[_0xa54a('0x31')]=qs[_0xa54a('0x32')](_[_0xa54a('0x33')](_0x3d5383[_0xa54a('0x29')],_0x50cfe6['filters']));if(_0x3d5383[_0xa54a('0x29')][_0xa54a('0x34')]){_0x45de94['where']=_[_0xa54a('0x35')](_0x45de94[_0xa54a('0x31')],{'$or':_[_0xa54a('0x36')](_0x44a4d6,function(_0x1e2d95){if(_0x1e2d95['type'][_0xa54a('0x37')]!=='VIRTUAL'){var _0x53b84e={};_0x53b84e[_0x1e2d95['field']]={'$like':'%'+_0x3d5383[_0xa54a('0x29')]['filter']+'%'};return _0x53b84e;}})});}_0x45de94=_[_0xa54a('0x35')]({},_0x45de94,_0x3d5383[_0xa54a('0x38')]);var _0xaf37e6={'where':_0x45de94['where']};return db[_0xa54a('0x26')][_0xa54a('0x16')](_0xaf37e6)[_0xa54a('0x20')](function(_0x4e0011){_0x2a48c1[_0xa54a('0x16')]=_0x4e0011;if(_0x3d5383[_0xa54a('0x29')][_0xa54a('0x39')]){_0x45de94[_0xa54a('0x3a')]=[{'all':!![]}];}return db[_0xa54a('0x26')][_0xa54a('0x3b')](_0x45de94);})[_0xa54a('0x20')](function(_0x27bddd){_0x2a48c1[_0xa54a('0x3c')]=_0x27bddd;return _0x2a48c1;})['then'](respondWithFilteredResult(_0x30082d,_0x45de94))['catch'](handleError(_0x30082d,null));};exports[_0xa54a('0x3d')]=function(_0x528afa,_0x477420){var _0x533895={'raw':!![],'where':{'id':_0x528afa[_0xa54a('0x3e')]['id']}},_0x2cbba4={};_0x2cbba4[_0xa54a('0x27')]=_[_0xa54a('0x28')](db[_0xa54a('0x26')]['rawAttributes']);_0x2cbba4[_0xa54a('0x29')]=_[_0xa54a('0x28')](_0x528afa[_0xa54a('0x29')]);_0x2cbba4[_0xa54a('0x32')]=_[_0xa54a('0x2b')](_0x2cbba4[_0xa54a('0x27')],_0x2cbba4[_0xa54a('0x29')]);_0x533895[_0xa54a('0x2a')]=_[_0xa54a('0x2b')](_0x2cbba4[_0xa54a('0x27')],qs[_0xa54a('0x2c')](_0x528afa['query'][_0xa54a('0x2c')]));_0x533895[_0xa54a('0x2a')]=_0x533895['attributes']['length']?_0x533895['attributes']:_0x2cbba4[_0xa54a('0x27')];if(_0x528afa[_0xa54a('0x29')][_0xa54a('0x39')]){_0x533895[_0xa54a('0x3a')]=[{'all':!![]}];}_0x533895=_[_0xa54a('0x35')]({},_0x533895,_0x528afa['options']);return db[_0xa54a('0x26')][_0xa54a('0x3f')](_0x533895)['then'](handleEntityNotFound(_0x477420,null))[_0xa54a('0x20')](respondWithResult(_0x477420,null))[_0xa54a('0x40')](handleError(_0x477420,null));};exports[_0xa54a('0x1f')]=function(_0x2733a9,_0x5dd4c6){if(_0x2733a9[_0xa54a('0x41')]['id']){delete _0x2733a9[_0xa54a('0x41')]['id'];}return db[_0xa54a('0x26')][_0xa54a('0x3f')]({'where':{'id':_0x2733a9[_0xa54a('0x3e')]['id']}})[_0xa54a('0x20')](handleEntityNotFound(_0x5dd4c6,null))[_0xa54a('0x20')](saveUpdates(_0x2733a9['body'],null))[_0xa54a('0x20')](respondWithResult(_0x5dd4c6,null))[_0xa54a('0x40')](handleError(_0x5dd4c6,null));};exports[_0xa54a('0x21')]=function(_0x2a625d,_0x5e73d6){return db[_0xa54a('0x26')][_0xa54a('0x3f')]({'where':{'id':_0x2a625d['params']['id']}})[_0xa54a('0x20')](handleEntityNotFound(_0x5e73d6,null))['then'](removeEntity(_0x5e73d6,null))[_0xa54a('0x40')](handleError(_0x5e73d6,null));};exports[_0xa54a('0x42')]=function(_0x5965c2,_0x4bdc75,_0xfcd977){_0x5965c2[_0xa54a('0x41')][_0xa54a('0x24')]=_0x5965c2[_0xa54a('0x43')][_0xa54a('0x44')];_0x5965c2[_0xa54a('0x41')][_0xa54a('0x45')]=_0x5965c2[_0xa54a('0x43')]['filename'];_0x5965c2[_0xa54a('0x41')]['type']=_0x5965c2[_0xa54a('0x43')]['mimetype'];return db[_0xa54a('0x26')]['create'](_0x5965c2[_0xa54a('0x41')])[_0xa54a('0x20')](respondWithResult(_0x4bdc75,0xc9))['catch'](handleError(_0x4bdc75,null));};exports[_0xa54a('0x46')]=function(_0x29b261,_0x55e2ef,_0x331be4){return db['Attachment'][_0xa54a('0x47')]({'where':{'id':_0x29b261['params']['id']},'raw':!![]})['then'](handleEntityNotFound(_0x55e2ef,null))[_0xa54a('0x20')](function(_0x2d0b9c){if(_0x2d0b9c){return _0x55e2ef[_0xa54a('0x46')](path[_0xa54a('0x48')](config['root'],_0xa54a('0x49'),_0x2d0b9c[_0xa54a('0x45')]));}})[_0xa54a('0x40')](handleError(_0x55e2ef,null));};
\ No newline at end of file
index 55d13f4..49793c1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2208=['util','api','bluebird','request-promise','path','rimraf','../../config/environment','./attachment.attributes','define','Attachment','attachments'];(function(_0x470289,_0x42dee1){var _0x21fc96=function(_0x34522c){while(--_0x34522c){_0x470289['push'](_0x470289['shift']());}};_0x21fc96(++_0x42dee1);}(_0x2208,0x11e));var _0x8220=function(_0x5ba5ed,_0x40a28a){_0x5ba5ed=_0x5ba5ed-0x0;var _0x394ad3=_0x2208[_0x5ba5ed];return _0x394ad3;};'use strict';var _=require('lodash');var util=require(_0x8220('0x0'));var logger=require('../../config/logger')(_0x8220('0x1'));var moment=require('moment');var BPromise=require(_0x8220('0x2'));var rp=require(_0x8220('0x3'));var fs=require('fs');var path=require(_0x8220('0x4'));var rimraf=require(_0x8220('0x5'));var config=require(_0x8220('0x6'));var attributes=require(_0x8220('0x7'));module['exports']=function(_0x31a112,_0x4dd1a0){return _0x31a112[_0x8220('0x8')](_0x8220('0x9'),attributes,{'tableName':_0x8220('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb332=['define','lodash','../../config/logger','api','bluebird','path','../../config/environment','exports'];(function(_0x23fe8f,_0x2a9f4a){var _0x4757cf=function(_0x3ee10f){while(--_0x3ee10f){_0x23fe8f['push'](_0x23fe8f['shift']());}};_0x4757cf(++_0x2a9f4a);}(_0xb332,0xd9));var _0x2b33=function(_0x15dbca,_0x1d7c3c){_0x15dbca=_0x15dbca-0x0;var _0x326533=_0xb332[_0x15dbca];return _0x326533;};'use strict';var _=require(_0x2b33('0x0'));var util=require('util');var logger=require(_0x2b33('0x1'))(_0x2b33('0x2'));var moment=require('moment');var BPromise=require(_0x2b33('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x2b33('0x4'));var rimraf=require('rimraf');var config=require(_0x2b33('0x5'));var attributes=require('./attachment.attributes');module[_0x2b33('0x6')]=function(_0x22d66,_0x478214){return _0x22d66[_0x2b33('0x7')]('Attachment',attributes,{'tableName':'attachments','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 812caf2..39dcf20 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x57e9=['stringify','error','message','request\x20sent','result','catch','CreateAttachment','Attachment','options','raw','debug','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http','then','info','Attachment,\x20%s,\x20%s','Attachment,\x20%s,\x20%s,\x20%s'];(function(_0x5da8fc,_0x2fc2d6){var _0x4387ff=function(_0x220f93){while(--_0x220f93){_0x5da8fc['push'](_0x5da8fc['shift']());}};_0x4387ff(++_0x2fc2d6);}(_0x57e9,0x150));var _0x957e=function(_0x1110a2,_0x198395){_0x1110a2=_0x1110a2-0x0;var _0x3ca655=_0x57e9[_0x1110a2];return _0x3ca655;};'use strict';var _=require('lodash');var util=require(_0x957e('0x0'));var moment=require(_0x957e('0x1'));var BPromise=require('bluebird');var rs=require(_0x957e('0x2'));var fs=require('fs');var Redis=require(_0x957e('0x3'));var db=require(_0x957e('0x4'))['db'];var utils=require(_0x957e('0x5'));var logger=require('../../config/logger')(_0x957e('0x6'));var config=require(_0x957e('0x7'));var jayson=require(_0x957e('0x8'));var client=jayson['client'][_0x957e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x159a3c,_0x3ffbfb,_0x8ebcc2){return new BPromise(function(_0x370fba,_0x55a0a8){return client['request'](_0x159a3c,_0x8ebcc2)[_0x957e('0xa')](function(_0x415e66){logger[_0x957e('0xb')](_0x957e('0xc'),_0x3ffbfb,'request\x20sent');logger['debug'](_0x957e('0xd'),_0x3ffbfb,'request\x20sent',JSON[_0x957e('0xe')](_0x415e66));if(_0x415e66[_0x957e('0xf')]){if(_0x415e66[_0x957e('0xf')]['code']===0x1f4){logger[_0x957e('0xf')](_0x957e('0xc'),_0x3ffbfb,_0x415e66[_0x957e('0xf')][_0x957e('0x10')]);return _0x55a0a8(_0x415e66[_0x957e('0xf')][_0x957e('0x10')]);}logger[_0x957e('0xf')](_0x957e('0xc'),_0x3ffbfb,_0x415e66[_0x957e('0xf')][_0x957e('0x10')]);return _0x370fba(_0x415e66[_0x957e('0xf')][_0x957e('0x10')]);}else{logger[_0x957e('0xb')]('Attachment,\x20%s,\x20%s',_0x3ffbfb,_0x957e('0x11'));_0x370fba(_0x415e66[_0x957e('0x12')][_0x957e('0x10')]);}})[_0x957e('0x13')](function(_0x11ce32){logger['error'](_0x957e('0xc'),_0x3ffbfb,_0x11ce32);_0x55a0a8(_0x11ce32);});});}exports[_0x957e('0x14')]=function(_0x139d29){var _0x20f385=this;return new Promise(function(_0x4e60c7,_0x1327ca){return db[_0x957e('0x15')]['create'](_0x139d29['body'],{'raw':_0x139d29[_0x957e('0x16')]?_0x139d29[_0x957e('0x16')][_0x957e('0x17')]===undefined?!![]:![]:!![]})[_0x957e('0xa')](function(_0x1f21c5){logger[_0x957e('0xb')](_0x957e('0x14'),_0x139d29);logger[_0x957e('0x18')](_0x957e('0x14'),_0x139d29,JSON[_0x957e('0xe')](_0x1f21c5));_0x4e60c7(_0x1f21c5);})[_0x957e('0x13')](function(_0x379e58){logger[_0x957e('0xf')](_0x957e('0x14'),_0x379e58[_0x957e('0x10')],_0x139d29);_0x1327ca(_0x20f385[_0x957e('0xf')](0x1f4,_0x379e58[_0x957e('0x10')]));});});};
\ No newline at end of file
+var _0xa737=['catch','CreateAttachment','body','options','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','Attachment,\x20%s,\x20%s','request\x20sent','debug','Attachment,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result'];(function(_0x1ec78f,_0x53f04b){var _0x197363=function(_0x42532f){while(--_0x42532f){_0x1ec78f['push'](_0x1ec78f['shift']());}};_0x197363(++_0x53f04b);}(_0xa737,0x154));var _0x7a73=function(_0x56916d,_0x37b935){_0x56916d=_0x56916d-0x0;var _0x2b7f1f=_0xa737[_0x56916d];return _0x2b7f1f;};'use strict';var _=require(_0x7a73('0x0'));var util=require(_0x7a73('0x1'));var moment=require(_0x7a73('0x2'));var BPromise=require(_0x7a73('0x3'));var rs=require(_0x7a73('0x4'));var fs=require('fs');var Redis=require(_0x7a73('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x7a73('0x6'));var logger=require('../../config/logger')(_0x7a73('0x7'));var config=require(_0x7a73('0x8'));var jayson=require(_0x7a73('0x9'));var client=jayson[_0x7a73('0xa')][_0x7a73('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xcffeb9,_0x5d66f4,_0x186e8b){return new BPromise(function(_0x5d9bff,_0x45afe4){return client[_0x7a73('0xc')](_0xcffeb9,_0x186e8b)[_0x7a73('0xd')](function(_0x3c51de){logger['info'](_0x7a73('0xe'),_0x5d66f4,_0x7a73('0xf'));logger[_0x7a73('0x10')](_0x7a73('0x11'),_0x5d66f4,_0x7a73('0xf'),JSON[_0x7a73('0x12')](_0x3c51de));if(_0x3c51de[_0x7a73('0x13')]){if(_0x3c51de[_0x7a73('0x13')][_0x7a73('0x14')]===0x1f4){logger[_0x7a73('0x13')]('Attachment,\x20%s,\x20%s',_0x5d66f4,_0x3c51de[_0x7a73('0x13')]['message']);return _0x45afe4(_0x3c51de[_0x7a73('0x13')][_0x7a73('0x15')]);}logger[_0x7a73('0x13')](_0x7a73('0xe'),_0x5d66f4,_0x3c51de['error'][_0x7a73('0x15')]);return _0x5d9bff(_0x3c51de[_0x7a73('0x13')][_0x7a73('0x15')]);}else{logger[_0x7a73('0x16')](_0x7a73('0xe'),_0x5d66f4,_0x7a73('0xf'));_0x5d9bff(_0x3c51de[_0x7a73('0x17')]['message']);}})[_0x7a73('0x18')](function(_0x524d98){logger[_0x7a73('0x13')]('Attachment,\x20%s,\x20%s',_0x5d66f4,_0x524d98);_0x45afe4(_0x524d98);});});}exports[_0x7a73('0x19')]=function(_0x59d99a){var _0x3c3c64=this;return new Promise(function(_0x5f111a,_0x110981){return db['Attachment']['create'](_0x59d99a[_0x7a73('0x1a')],{'raw':_0x59d99a[_0x7a73('0x1b')]?_0x59d99a[_0x7a73('0x1b')]['raw']===undefined?!![]:![]:!![]})[_0x7a73('0xd')](function(_0x383b6c){logger[_0x7a73('0x16')]('CreateAttachment',_0x59d99a);logger[_0x7a73('0x10')](_0x7a73('0x19'),_0x59d99a,JSON[_0x7a73('0x12')](_0x383b6c));_0x5f111a(_0x383b6c);})[_0x7a73('0x18')](function(_0x33f651){logger[_0x7a73('0x13')](_0x7a73('0x19'),_0x33f651[_0x7a73('0x15')],_0x59d99a);_0x110981(_0x3c3c64[_0x7a73('0x13')](0x1f4,_0x33f651[_0x7a73('0x15')]));});});};
\ No newline at end of file
index 19d50fa..543b089 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0506=['../../components/interaction/service','./attachment.controller','index','get','/:id','isAuthenticated','show','/:id/download','diskStorage','join','root','server/files/attachments/','format','%s-%s','originalname','post','single','file','create','update','delete','destroy','exports','multer','util','path'];(function(_0x2eab34,_0x2be12f){var _0x4dc7a9=function(_0x3ffec0){while(--_0x3ffec0){_0x2eab34['push'](_0x2eab34['shift']());}};_0x4dc7a9(++_0x2be12f);}(_0x0506,0x1d1));var _0x6050=function(_0x508c23,_0x3ccfd2){_0x508c23=_0x508c23-0x0;var _0x40b5b6=_0x0506[_0x508c23];return _0x40b5b6;};'use strict';var multer=require(_0x6050('0x0'));var util=require(_0x6050('0x1'));var path=require(_0x6050('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x6050('0x3'));var config=require('../../config/environment');var controller=require(_0x6050('0x4'));router['get']('/',auth['isAuthenticated'](),controller[_0x6050('0x5')]);router[_0x6050('0x6')](_0x6050('0x7'),auth[_0x6050('0x8')](),controller[_0x6050('0x9')]);router[_0x6050('0x6')](_0x6050('0xa'),auth[_0x6050('0x8')](),controller['download']);var upload=multer({'storage':multer[_0x6050('0xb')]({'destination':function(_0x4f149a,_0x15ad99,_0x1b0140){_0x1b0140(null,path[_0x6050('0xc')](config[_0x6050('0xd')],_0x6050('0xe')));},'filename':function(_0x1b8d24,_0x105915,_0x17af7f){_0x17af7f(null,util[_0x6050('0xf')](_0x6050('0x10'),Date['now'](),_0x105915[_0x6050('0x11')]['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x6050('0x12')]('/',upload[_0x6050('0x13')](_0x6050('0x14')),controller[_0x6050('0x15')]);router['put'](_0x6050('0x7'),auth['isAuthenticated'](),controller[_0x6050('0x16')]);router[_0x6050('0x17')](_0x6050('0x7'),auth[_0x6050('0x8')](),controller[_0x6050('0x18')]);module[_0x6050('0x19')]=router;
\ No newline at end of file
+var _0x05b0=['exports','path','connect-timeout','Router','../../components/auth/service','../../config/environment','./attachment.controller','isAuthenticated','index','get','/:id','show','download','server/files/attachments/','format','%s-%s','now','originalname','replace','post','put','delete','destroy'];(function(_0x4b0e2d,_0x5e06b9){var _0x2703c2=function(_0x5b2bef){while(--_0x5b2bef){_0x4b0e2d['push'](_0x4b0e2d['shift']());}};_0x2703c2(++_0x5e06b9);}(_0x05b0,0x188));var _0x005b=function(_0x51729b,_0x3a3162){_0x51729b=_0x51729b-0x0;var _0x4f0035=_0x05b0[_0x51729b];return _0x4f0035;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x005b('0x0'));var timeout=require(_0x005b('0x1'));var express=require('express');var router=express[_0x005b('0x2')]();var auth=require(_0x005b('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x005b('0x4'));var controller=require(_0x005b('0x5'));router['get']('/',auth[_0x005b('0x6')](),controller[_0x005b('0x7')]);router[_0x005b('0x8')](_0x005b('0x9'),auth[_0x005b('0x6')](),controller[_0x005b('0xa')]);router[_0x005b('0x8')]('/:id/download',auth[_0x005b('0x6')](),controller[_0x005b('0xb')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x53fff4,_0x451641,_0x4d41b8){_0x4d41b8(null,path['join'](config['root'],_0x005b('0xc')));},'filename':function(_0x42d7ed,_0x5b37a9,_0x25aeab){_0x25aeab(null,util[_0x005b('0xd')](_0x005b('0xe'),Date[_0x005b('0xf')](),_0x5b37a9[_0x005b('0x10')][_0x005b('0x11')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x005b('0x12')]('/',upload['single']('file'),controller['create']);router[_0x005b('0x13')]('/:id',auth[_0x005b('0x6')](),controller['update']);router[_0x005b('0x14')](_0x005b('0x9'),auth[_0x005b('0x6')](),controller[_0x005b('0x15')]);module[_0x005b('0x16')]=router;
\ No newline at end of file
index c9ca733..fe83a0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x044a=['catch','lodash','passport','passport-google-oauth20','Strategy','moment','../../mysqldb','../../config/environment','../../components/auth/service','signToken','../../config/utils','authenticate','google','/login','profile','callback','clientID','clientSecret','secret','callbackURL','Setting','findOne','allowedLoginAttempts','then','User','find','map','emails','value','agent','disabled','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','blockDuration','blocked','minutes','clearBlockUser','getLicense'];(function(_0x463a6e,_0x1b47b5){var _0x51d8c6=function(_0x21f507){while(--_0x21f507){_0x463a6e['push'](_0x463a6e['shift']());}};_0x51d8c6(++_0x1b47b5);}(_0x044a,0x173));var _0xa044=function(_0x59d196,_0x396f5e){_0x59d196=_0x59d196-0x0;var _0x484ff0=_0x044a[_0x59d196];return _0x484ff0;};'use strict';var _=require(_0xa044('0x0'));var passport=require(_0xa044('0x1'));var GoogleStrategy=require(_0xa044('0x2'))[_0xa044('0x3')];var moment=require(_0xa044('0x4'));var db=require(_0xa044('0x5'))['db'];var config=require(_0xa044('0x6'));var signToken=require(_0xa044('0x7'))[_0xa044('0x8')];var utils=require(_0xa044('0x9'));exports['login']=passport[_0xa044('0xa')](_0xa044('0xb'),{'failureRedirect':_0xa044('0xc'),'scope':[_0xa044('0xd'),'email'],'session':![]});exports[_0xa044('0xe')]=passport[_0xa044('0xa')](_0xa044('0xb'),{'failureRedirect':_0xa044('0xc'),'session':![]});passport['use'](new GoogleStrategy({'clientID':config[_0xa044('0xb')]?config[_0xa044('0xb')][_0xa044('0xf')]:'id','clientSecret':config['google']?config[_0xa044('0xb')][_0xa044('0x10')]:_0xa044('0x11'),'callbackURL':config[_0xa044('0xb')]?config['google'][_0xa044('0x12')]:''},function(_0x51957a,_0x4cbae2,_0x1ee43,_0x3e05cf){var _0x2b73a1,_0x344c7d;return db[_0xa044('0x13')][_0xa044('0x14')]({'where':{'id':0x1},'attributes':[_0xa044('0x15'),'blockDuration'],'raw':!![]})[_0xa044('0x16')](function(_0x56c7c2){_0x2b73a1=_0x56c7c2;return db[_0xa044('0x17')][_0xa044('0x18')]({'where':{'email':_[_0xa044('0x19')](_0x1ee43[_0xa044('0x1a')],_0xa044('0x1b')),'role':{'$or':['admin','user',_0xa044('0x1c')]}}});})['then'](function(_0x3ca144){_0x344c7d=_0x3ca144;if(_0x344c7d){if(_0x344c7d[_0xa044('0x1d')]){return _0x3e05cf(_0xa044('0x1e'));}else if(_0x2b73a1[_0xa044('0x1f')]>0x0){if(_0x344c7d[_0xa044('0x20')]){if(moment(_0x344c7d['blockedAt'])['add'](_0x2b73a1['blockDuration'],_0xa044('0x21'))>moment()){return _0x3e05cf(_0xa044('0x1e'));}else{return utils[_0xa044('0x22')](_0x344c7d,0x0,![],null)['then'](function(){return utils[_0xa044('0x23')](_0x344c7d);})[_0xa044('0x16')](function(){return _0x3e05cf(null,_0x344c7d);});}}else{return utils['getLicense'](_0x344c7d)[_0xa044('0x16')](function(){return _0x3e05cf(null,_0x344c7d);});}}else{return utils[_0xa044('0x23')](_0x344c7d)[_0xa044('0x16')](function(){return _0x3e05cf(null,_0x344c7d);});}}return _0x3e05cf('Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.');})[_0xa044('0x24')](function(_0x966548){_0x3e05cf(_0x966548);});}));
\ No newline at end of file
+var _0x8a28=['../../config/environment','../../components/auth/service','../../config/utils','login','authenticate','google','/login','email','use','clientID','callbackURL','Setting','allowedLoginAttempts','blockDuration','then','User','find','map','emails','value','admin','user','agent','disabled','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','blocked','blockedAt','add','minutes','clearBlockUser','getLicense','lodash','passport','passport-google-oauth20','Strategy','moment','../../mysqldb'];(function(_0x4f236f,_0xa7cddb){var _0x382543=function(_0x2357a0){while(--_0x2357a0){_0x4f236f['push'](_0x4f236f['shift']());}};_0x382543(++_0xa7cddb);}(_0x8a28,0xfd));var _0x88a2=function(_0xbca1b1,_0x33f0ce){_0xbca1b1=_0xbca1b1-0x0;var _0x4e1686=_0x8a28[_0xbca1b1];return _0x4e1686;};'use strict';var _=require(_0x88a2('0x0'));var passport=require(_0x88a2('0x1'));var GoogleStrategy=require(_0x88a2('0x2'))[_0x88a2('0x3')];var moment=require(_0x88a2('0x4'));var db=require(_0x88a2('0x5'))['db'];var config=require(_0x88a2('0x6'));var signToken=require(_0x88a2('0x7'))['signToken'];var utils=require(_0x88a2('0x8'));exports[_0x88a2('0x9')]=passport[_0x88a2('0xa')](_0x88a2('0xb'),{'failureRedirect':_0x88a2('0xc'),'scope':['profile',_0x88a2('0xd')],'session':![]});exports['callback']=passport[_0x88a2('0xa')](_0x88a2('0xb'),{'failureRedirect':_0x88a2('0xc'),'session':![]});passport[_0x88a2('0xe')](new GoogleStrategy({'clientID':config[_0x88a2('0xb')]?config[_0x88a2('0xb')][_0x88a2('0xf')]:'id','clientSecret':config[_0x88a2('0xb')]?config[_0x88a2('0xb')]['clientSecret']:'secret','callbackURL':config[_0x88a2('0xb')]?config[_0x88a2('0xb')][_0x88a2('0x10')]:''},function(_0xae0676,_0x18d477,_0x4887fc,_0x210a52){var _0x1a4056,_0x367a7d;return db[_0x88a2('0x11')]['findOne']({'where':{'id':0x1},'attributes':[_0x88a2('0x12'),_0x88a2('0x13')],'raw':!![]})[_0x88a2('0x14')](function(_0x59801e){_0x1a4056=_0x59801e;return db[_0x88a2('0x15')][_0x88a2('0x16')]({'where':{'email':_[_0x88a2('0x17')](_0x4887fc[_0x88a2('0x18')],_0x88a2('0x19')),'role':{'$or':[_0x88a2('0x1a'),_0x88a2('0x1b'),_0x88a2('0x1c')]}}});})[_0x88a2('0x14')](function(_0x417bf8){_0x367a7d=_0x417bf8;if(_0x367a7d){if(_0x367a7d[_0x88a2('0x1d')]){return _0x210a52(_0x88a2('0x1e'));}else if(_0x1a4056[_0x88a2('0x13')]>0x0){if(_0x367a7d[_0x88a2('0x1f')]){if(moment(_0x367a7d[_0x88a2('0x20')])[_0x88a2('0x21')](_0x1a4056[_0x88a2('0x13')],_0x88a2('0x22'))>moment()){return _0x210a52('Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.');}else{return utils[_0x88a2('0x23')](_0x367a7d,0x0,![],null)[_0x88a2('0x14')](function(){return utils['getLicense'](_0x367a7d);})['then'](function(){return _0x210a52(null,_0x367a7d);});}}else{return utils[_0x88a2('0x24')](_0x367a7d)[_0x88a2('0x14')](function(){return _0x210a52(null,_0x367a7d);});}}else{return utils[_0x88a2('0x24')](_0x367a7d)[_0x88a2('0x14')](function(){return _0x210a52(null,_0x367a7d);});}}return _0x210a52(_0x88a2('0x1e'));})['catch'](function(_0x3b6401){_0x210a52(_0x3b6401);});}));
\ No newline at end of file
index 90ee691..6773a7d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa42e=['express','Router','./authGoogle.controller','../user/user.controller.js','../../components/auth/service','get','login','/callback','callback','isMiddleware','setTokenCookie'];(function(_0x187ee1,_0x3fd1e6){var _0x388160=function(_0x542dd2){while(--_0x542dd2){_0x187ee1['push'](_0x187ee1['shift']());}};_0x388160(++_0x3fd1e6);}(_0xa42e,0xe7));var _0xea42=function(_0x14a54f,_0x252c00){_0x14a54f=_0x14a54f-0x0;var _0x244535=_0xa42e[_0x14a54f];return _0x244535;};'use strict';var express=require(_0xea42('0x0'));var passport=require('passport');var router=express[_0xea42('0x1')]();var controller=require(_0xea42('0x2'));var userController=require(_0xea42('0x3'));var authService=require(_0xea42('0x4'));router[_0xea42('0x5')]('/',controller[_0xea42('0x6')]);router[_0xea42('0x5')](_0xea42('0x7'),controller[_0xea42('0x8')],authService[_0xea42('0x9')],userController['login'],authService[_0xea42('0xa')]);module['exports']=router;
\ No newline at end of file
+var _0xcf09=['express','./authGoogle.controller','../user/user.controller.js','../../components/auth/service','get','login','/callback','isMiddleware','setTokenCookie','exports'];(function(_0x1adffd,_0x144960){var _0x538879=function(_0x9756d4){while(--_0x9756d4){_0x1adffd['push'](_0x1adffd['shift']());}};_0x538879(++_0x144960);}(_0xcf09,0x1f4));var _0x9cf0=function(_0x17a97a,_0x274773){_0x17a97a=_0x17a97a-0x0;var _0x341e6e=_0xcf09[_0x17a97a];return _0x341e6e;};'use strict';var express=require(_0x9cf0('0x0'));var passport=require('passport');var router=express['Router']();var controller=require(_0x9cf0('0x1'));var userController=require(_0x9cf0('0x2'));var authService=require(_0x9cf0('0x3'));router[_0x9cf0('0x4')]('/',controller[_0x9cf0('0x5')]);router[_0x9cf0('0x4')](_0x9cf0('0x6'),controller['callback'],authService[_0x9cf0('0x7')],userController['login'],authService[_0x9cf0('0x8')]);module[_0x9cf0('0x9')]=router;
\ No newline at end of file
index 6abc84a..4fe8317 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd3db=['login','local','Something\x20went\x20wrong,\x20please\x20try\x20again.','json','online','forgot','body','generate','trim','toLowerCase','User','This\x20email\x20is\x20not\x20registered.','The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.','resetPasswordToken','resetPasswordExpires','now','save','xCally\x20Motion\x20Password\x20Reset','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','/reset/','If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a','Reset\x20Email\x20sent!','reset','token','securePassword','Password\x20reset!','use','util','passport','passport-local','Strategy','jayson/promise','lodash','randomstring','../../mysqldb','../../components/auth/service','signToken','../../config/utils','client','Setting','findOne','allowedLoginAttempts','blockDuration','then','password','role','blocked','blockedAt','loginAttempts','admin','agent','name','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','disabled','add','clearBlockUser','minutes','getLicense','catch','MailAccount','find','email','MailServerOut','Smtp','service','host','port','secure','authentication','user','pass','merge','format','\x22%s\x22\x20<%s>','request','SendMail','SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!','error','message','status','send','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~!@#$%^&-_=+[{]}.'];(function(_0x274638,_0x578968){var _0x5755df=function(_0x3227d5){while(--_0x3227d5){_0x274638['push'](_0x274638['shift']());}};_0x5755df(++_0x578968);}(_0xd3db,0x176));var _0xbd3d=function(_0x4b59e8,_0x3fb0c4){_0x4b59e8=_0x4b59e8-0x0;var _0x235b4b=_0xd3db[_0x4b59e8];return _0x235b4b;};'use strict';var util=require(_0xbd3d('0x0'));var passport=require(_0xbd3d('0x1'));var LocalStrategy=require(_0xbd3d('0x2'))[_0xbd3d('0x3')];var jayson=require(_0xbd3d('0x4'));var _=require(_0xbd3d('0x5'));var rs=require(_0xbd3d('0x6'));var moment=require('moment');var db=require(_0xbd3d('0x7'))['db'];var signToken=require(_0xbd3d('0x8'))[_0xbd3d('0x9')];var utils=require(_0xbd3d('0xa'));var client=jayson[_0xbd3d('0xb')]['http']({'port':0x232b});function localAuthenticate(_0x48dc6c,_0x79805b,_0x1e8b59,_0xf243e7){var _0x3f823e,_0x1fb4e9;return db[_0xbd3d('0xc')][_0xbd3d('0xd')]({'where':{'id':0x1},'attributes':[_0xbd3d('0xe'),_0xbd3d('0xf')],'raw':!![]})[_0xbd3d('0x10')](function(_0xfcd731){_0x3f823e=_0xfcd731;return _0x48dc6c['findOne']({'attributes':['id','name',_0xbd3d('0x11'),'salt',_0xbd3d('0x12'),'disabled',_0xbd3d('0x13'),_0xbd3d('0x14'),_0xbd3d('0x15')],'where':{'name':_0x79805b,'role':{'$or':[_0xbd3d('0x16'),'user',_0xbd3d('0x17')]}}});})[_0xbd3d('0x10')](function(_0x487bf5){if(!_0x487bf5||_0x487bf5&&_0x487bf5[_0xbd3d('0x18')]!==_0x79805b){throw new Error(_0xbd3d('0x19'));}else{_0x1fb4e9=_0x487bf5;return _0x1fb4e9;}})[_0xbd3d('0x10')](function(){_0x1fb4e9['authenticate'](_0x1e8b59,function(_0x5e80c9,_0x5c8463){var _0x4d4017=_0x1fb4e9['loginAttempts']+0x1;if(_0x5e80c9){return _0xf243e7(_0x5e80c9);}else if(!_0x5c8463){if(_0x1fb4e9[_0xbd3d('0x1a')]){return _0xf243e7(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else if(_0x3f823e[_0xbd3d('0xe')]>0x0){if(_0x1fb4e9[_0xbd3d('0x13')]){if(_0x3f823e[_0xbd3d('0xf')]>0x0){if(moment(_0x1fb4e9[_0xbd3d('0x14')])[_0xbd3d('0x1b')](_0x3f823e['blockDuration'],'minutes')>moment()){return _0xf243e7(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else{return utils[_0xbd3d('0x1c')](_0x1fb4e9,_0x4d4017,![],null)[_0xbd3d('0x10')](function(){return _0xf243e7(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});});}}else{return _0xf243e7(null,![],{'message':_0xbd3d('0x19')});}}else{if(_0x4d4017>=_0x3f823e['allowedLoginAttempts']){return utils[_0xbd3d('0x1c')](_0x1fb4e9,0x0,!![],moment())[_0xbd3d('0x10')](function(){return _0xf243e7(null,![],{'message':_0xbd3d('0x19')});});}else{return utils[_0xbd3d('0x1c')](_0x1fb4e9,_0x4d4017,![],null)[_0xbd3d('0x10')](function(){return _0xf243e7(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});});}}}else{return _0xf243e7(null,![],{'message':_0xbd3d('0x19')});}}else{if(_0x1fb4e9[_0xbd3d('0x1a')]){return _0xf243e7(null,![],{'message':_0xbd3d('0x19')});}else if(_0x3f823e[_0xbd3d('0xe')]>0x0){if(_0x1fb4e9['blocked']){if(_0x3f823e['blockDuration']>0x0){if(moment(_0x1fb4e9['blockedAt'])[_0xbd3d('0x1b')](_0x3f823e['blockDuration'],_0xbd3d('0x1d'))>moment()){return _0xf243e7(null,![],{'message':_0xbd3d('0x19')});}else{return utils['clearBlockUser'](_0x1fb4e9,0x0,![],null)[_0xbd3d('0x10')](function(){return utils['getLicense'](_0x1fb4e9);})['then'](function(){return _0xf243e7(null,_0x1fb4e9);});}}else{return _0xf243e7(null,![],{'message':_0xbd3d('0x19')});}}else{return utils[_0xbd3d('0x1c')](_0x1fb4e9,0x0,![],null)[_0xbd3d('0x10')](function(){return utils[_0xbd3d('0x1e')](_0x1fb4e9);})[_0xbd3d('0x10')](function(){return _0xf243e7(null,_0x1fb4e9);})[_0xbd3d('0x1f')](function(_0x2971e9){return _0xf243e7(null,![],_0x2971e9);});}}else{if(_0x1fb4e9['blocked']){return _0xf243e7(null,![],{'message':_0xbd3d('0x19')});}else{return utils[_0xbd3d('0x1e')](_0x1fb4e9)[_0xbd3d('0x10')](function(){return _0xf243e7(null,_0x1fb4e9);});}}}});})[_0xbd3d('0x1f')](function(_0x577db9){return _0xf243e7(null,![],_0x577db9);});}function sendServiceMail(_0x4edfd1){return db[_0xbd3d('0x20')][_0xbd3d('0x21')]({'where':{'service':!![]},'attributes':['id',_0xbd3d('0x18'),_0xbd3d('0x22')],'include':[{'model':db[_0xbd3d('0x23')],'as':_0xbd3d('0x24')}]})[_0xbd3d('0x10')](function(_0x32ee8c){if(!_0x32ee8c){throw new Error('Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!');}var _0x37e745={'tls':{'rejectUnauthorized':![]}};if(_0x32ee8c[_0xbd3d('0x24')][_0xbd3d('0x25')]){_0x37e745['service']=_0x32ee8c[_0xbd3d('0x24')][_0xbd3d('0x25')];}else{_0x37e745[_0xbd3d('0x26')]=_0x32ee8c[_0xbd3d('0x24')][_0xbd3d('0x26')];_0x37e745[_0xbd3d('0x27')]=_0x32ee8c[_0xbd3d('0x24')][_0xbd3d('0x27')];_0x37e745[_0xbd3d('0x28')]=_0x32ee8c[_0xbd3d('0x24')][_0xbd3d('0x28')];}if(_0x32ee8c[_0xbd3d('0x24')][_0xbd3d('0x29')]){_0x37e745['auth']={'user':_0x32ee8c['Smtp'][_0xbd3d('0x2a')],'pass':_0x32ee8c[_0xbd3d('0x24')][_0xbd3d('0x2b')]};}var _0x19ff59={'account':_0x37e745,'message':_[_0xbd3d('0x2c')]({'from':util[_0xbd3d('0x2d')](_0xbd3d('0x2e'),_0x32ee8c[_0xbd3d('0x18')],_0x32ee8c['email']||_0x32ee8c[_0xbd3d('0x24')][_0xbd3d('0x2a')])},_0x4edfd1)};return client[_0xbd3d('0x2f')](_0xbd3d('0x30'),_0x19ff59);})['then'](function(_0x4ac1b9){if(_0x4ac1b9['error']){throw new Error(util[_0xbd3d('0x2d')](_0xbd3d('0x31'),_0x4ac1b9[_0xbd3d('0x32')][_0xbd3d('0x33')]||JSON['stringify'](_0x4ac1b9[_0xbd3d('0x32')])));}return!![];});}function handleError(_0x176c62,_0x57bef9,_0x4cac88){return _0x176c62[_0xbd3d('0x34')](_0x57bef9||0x1f4)[_0xbd3d('0x35')]({'message':_0x4cac88?_0x4cac88[_0xbd3d('0x33')]||_0x4cac88:''});}function checkPasswordPattern(_0x15c5ab,_0x1def4e,_0x36dfe9){if(_0x36dfe9){var _0xa35a22=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0xa35a22[_0xbd3d('0x36')](_0x1def4e)){return _0x15c5ab;}else{throw new Error(_0xbd3d('0x37'));}}else{return _0x15c5ab;}}exports[_0xbd3d('0x38')]=function(_0x15eb3d,_0x3d49ba,_0x23965b){passport['authenticate'](_0xbd3d('0x39'),function(_0x1dc049,_0x2a0c1e,_0x981e41){var _0xdf59da=_0x1dc049||_0x981e41;if(_0xdf59da){return handleError(_0x3d49ba,0x191,_0xdf59da);}if(!_0x2a0c1e){return handleError(_0x3d49ba,0x194,{'message':_0xbd3d('0x3a')});}else{var _0x2fbb56=signToken(_0x2a0c1e['id'],_0x2a0c1e[_0xbd3d('0x12')]);_0x3d49ba[_0xbd3d('0x3b')]({'id':_0x2a0c1e['id'],'token':_0x2fbb56,'statusCall':'','isAlreadyLogged':_0x2a0c1e[_0xbd3d('0x3c')]});}})(_0x15eb3d,_0x3d49ba,_0x23965b);};exports[_0xbd3d('0x3d')]=function(_0x5c5140,_0x4587fc,_0x4d35e0){if(!_0x5c5140[_0xbd3d('0x3e')][_0xbd3d('0x22')]){return handleError(_0x4587fc,0x1f4,{'message':'Email\x20parameter\x20is\x20missing'});}var _0x59ac70=rs[_0xbd3d('0x3f')]();_0x5c5140[_0xbd3d('0x3e')][_0xbd3d('0x22')]=_0x5c5140['body'][_0xbd3d('0x22')][_0xbd3d('0x40')]()[_0xbd3d('0x41')]();var _0xc44137;return db[_0xbd3d('0xc')][_0xbd3d('0xd')]({'where':{'id':0x1},'attributes':[_0xbd3d('0xe'),_0xbd3d('0xf')],'raw':!![]})['then'](function(_0x6856f){_0xc44137=_0x6856f;return db[_0xbd3d('0x42')]['find']({'where':{'email':_0x5c5140[_0xbd3d('0x3e')][_0xbd3d('0x22')]}});})[_0xbd3d('0x10')](function(_0x44ab05){if(!_0x44ab05){throw new Error(_0xbd3d('0x43'));}if(_0x44ab05['disabled']){throw new Error('The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.');}if(_0x44ab05[_0xbd3d('0x13')]){if(moment(_0x44ab05[_0xbd3d('0x14')])[_0xbd3d('0x1b')](_0xc44137[_0xbd3d('0xf')],'minutes')>moment()){throw new Error(_0xbd3d('0x44'));}else{_0x44ab05[_0xbd3d('0x13')]=![];_0x44ab05['blockedAt']=null;}}_0x44ab05[_0xbd3d('0x45')]=_0x59ac70;_0x44ab05[_0xbd3d('0x46')]=Date[_0xbd3d('0x47')]()+0x36ee80;return _0x44ab05[_0xbd3d('0x48')]();})[_0xbd3d('0x10')](function(){return sendServiceMail({'to':_0x5c5140[_0xbd3d('0x3e')][_0xbd3d('0x22')],'subject':_0xbd3d('0x49'),'text':_0xbd3d('0x4a')+_0xbd3d('0x4b')+_0xbd3d('0x4c')+_0x5c5140[_0xbd3d('0x4d')][_0xbd3d('0x26')]+_0xbd3d('0x4e')+_0x59ac70+'\x0a\x0a'+_0xbd3d('0x4f')});})[_0xbd3d('0x10')](function(){_0x4587fc['status'](0xc8)[_0xbd3d('0x35')]({'message':_0xbd3d('0x50')});})[_0xbd3d('0x1f')](function(_0x4adf61){return handleError(_0x4587fc,0x1f4,_0x4adf61);});};exports[_0xbd3d('0x51')]=function(_0x32539e,_0x297532,_0x5ef3f0){var _0x1d3066;return db[_0xbd3d('0x42')][_0xbd3d('0x21')]({'where':{'resetPasswordToken':_0x32539e['params'][_0xbd3d('0x52')],'resetPasswordExpires':{'$gt':Date['now']()}}})['then'](function(_0x1a0fc1){_0x1d3066=_0x1a0fc1;if(!_0x1d3066){throw new Error('Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.');}return db[_0xbd3d('0xc')][_0xbd3d('0xd')]({'attributes':['id',_0xbd3d('0x53')]});})[_0xbd3d('0x10')](function(_0x159eac){return checkPasswordPattern(_0x159eac,_0x32539e[_0xbd3d('0x3e')][_0xbd3d('0x11')],_0x159eac['securePassword']);})[_0xbd3d('0x10')](function(){_0x1d3066[_0xbd3d('0x11')]=_0x32539e[_0xbd3d('0x3e')][_0xbd3d('0x11')];_0x1d3066['resetPasswordToken']=null;_0x1d3066[_0xbd3d('0x46')]=null;return _0x1d3066['save']();})[_0xbd3d('0x10')](function(){_0x297532[_0xbd3d('0x34')](0xc8)[_0xbd3d('0x35')]({'message':_0xbd3d('0x54')});})[_0xbd3d('0x1f')](function(_0x4862db){return handleError(_0x297532,0x1f4,_0x4862db);});};passport[_0xbd3d('0x55')](new LocalStrategy({'usernameField':'name','passwordField':'password'},function(_0x104ad4,_0xf0caf4,_0x313f47){return localAuthenticate(db[_0xbd3d('0x42')],_0x104ad4,_0xf0caf4,_0x313f47);}));
\ No newline at end of file
+var _0x3477=['passport','passport-local','Strategy','jayson/promise','lodash','moment','../../mysqldb','../../components/auth/service','../../config/utils','client','findOne','allowedLoginAttempts','blockDuration','then','name','password','salt','blocked','blockedAt','loginAttempts','admin','user','agent','authenticate','disabled','add','Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.','clearBlockUser','minutes','getLicense','catch','MailServerOut','Smtp','service','host','port','secure','authentication','auth','pass','merge','format','\x22%s\x22\x20<%s>','email','SendMail','error','SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!','message','stringify','status','send','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.','role','json','online','forgot','body','Email\x20parameter\x20is\x20missing','generate','trim','toLowerCase','Setting','User','find','This\x20email\x20is\x20not\x20registered.','The\x20user\x20is\x20disabled.\x20Please\x20contact\x20the\x20administrator.','The\x20user\x20is\x20blocked.\x20Please\x20contact\x20the\x20administrator.','resetPasswordToken','resetPasswordExpires','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://','If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a','Reset\x20Email\x20sent!','reset','params','token','Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.','use','util'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x3477,0xab));var _0x7347=function(_0x1d8318,_0x4e0d51){_0x1d8318=_0x1d8318-0x0;var _0x5d792c=_0x3477[_0x1d8318];return _0x5d792c;};'use strict';var util=require(_0x7347('0x0'));var passport=require(_0x7347('0x1'));var LocalStrategy=require(_0x7347('0x2'))[_0x7347('0x3')];var jayson=require(_0x7347('0x4'));var _=require(_0x7347('0x5'));var rs=require('randomstring');var moment=require(_0x7347('0x6'));var db=require(_0x7347('0x7'))['db'];var signToken=require(_0x7347('0x8'))['signToken'];var utils=require(_0x7347('0x9'));var client=jayson[_0x7347('0xa')]['http']({'port':0x232b});function localAuthenticate(_0x267621,_0x1a8c29,_0x50565b,_0x123da6){var _0x40d042,_0x4bffb2;return db['Setting'][_0x7347('0xb')]({'where':{'id':0x1},'attributes':[_0x7347('0xc'),_0x7347('0xd')],'raw':!![]})[_0x7347('0xe')](function(_0x12d9b8){_0x40d042=_0x12d9b8;return _0x267621['findOne']({'attributes':['id',_0x7347('0xf'),_0x7347('0x10'),_0x7347('0x11'),'role','disabled',_0x7347('0x12'),_0x7347('0x13'),_0x7347('0x14')],'where':{'name':_0x1a8c29,'role':{'$or':[_0x7347('0x15'),_0x7347('0x16'),_0x7347('0x17')]}}});})[_0x7347('0xe')](function(_0xedff4e){if(!_0xedff4e||_0xedff4e&&_0xedff4e[_0x7347('0xf')]!==_0x1a8c29){throw new Error('Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.');}else{_0x4bffb2=_0xedff4e;return _0x4bffb2;}})['then'](function(){_0x4bffb2[_0x7347('0x18')](_0x50565b,function(_0x303793,_0x30a1d4){var _0x5c50ed=_0x4bffb2['loginAttempts']+0x1;if(_0x303793){return _0x123da6(_0x303793);}else if(!_0x30a1d4){if(_0x4bffb2[_0x7347('0x19')]){return _0x123da6(null,![],{'message':'Incorrect\x20username\x20and/or\x20password.\x20Please\x20retry\x20again\x20or\x20contact\x20the\x20administrator.'});}else if(_0x40d042[_0x7347('0xc')]>0x0){if(_0x4bffb2[_0x7347('0x12')]){if(_0x40d042['blockDuration']>0x0){if(moment(_0x4bffb2[_0x7347('0x13')])[_0x7347('0x1a')](_0x40d042[_0x7347('0xd')],'minutes')>moment()){return _0x123da6(null,![],{'message':_0x7347('0x1b')});}else{return utils[_0x7347('0x1c')](_0x4bffb2,_0x5c50ed,![],null)[_0x7347('0xe')](function(){return _0x123da6(null,![],{'message':_0x7347('0x1b')});});}}else{return _0x123da6(null,![],{'message':_0x7347('0x1b')});}}else{if(_0x5c50ed>=_0x40d042['allowedLoginAttempts']){return utils['clearBlockUser'](_0x4bffb2,0x0,!![],moment())[_0x7347('0xe')](function(){return _0x123da6(null,![],{'message':_0x7347('0x1b')});});}else{return utils['clearBlockUser'](_0x4bffb2,_0x5c50ed,![],null)[_0x7347('0xe')](function(){return _0x123da6(null,![],{'message':_0x7347('0x1b')});});}}}else{return _0x123da6(null,![],{'message':_0x7347('0x1b')});}}else{if(_0x4bffb2['disabled']){return _0x123da6(null,![],{'message':_0x7347('0x1b')});}else if(_0x40d042['allowedLoginAttempts']>0x0){if(_0x4bffb2[_0x7347('0x12')]){if(_0x40d042[_0x7347('0xd')]>0x0){if(moment(_0x4bffb2['blockedAt'])[_0x7347('0x1a')](_0x40d042[_0x7347('0xd')],_0x7347('0x1d'))>moment()){return _0x123da6(null,![],{'message':_0x7347('0x1b')});}else{return utils[_0x7347('0x1c')](_0x4bffb2,0x0,![],null)[_0x7347('0xe')](function(){return utils['getLicense'](_0x4bffb2);})[_0x7347('0xe')](function(){return _0x123da6(null,_0x4bffb2);});}}else{return _0x123da6(null,![],{'message':_0x7347('0x1b')});}}else{return utils[_0x7347('0x1c')](_0x4bffb2,0x0,![],null)[_0x7347('0xe')](function(){return utils[_0x7347('0x1e')](_0x4bffb2);})[_0x7347('0xe')](function(){return _0x123da6(null,_0x4bffb2);})['catch'](function(_0x1dd017){return _0x123da6(null,![],_0x1dd017);});}}else{if(_0x4bffb2[_0x7347('0x12')]){return _0x123da6(null,![],{'message':_0x7347('0x1b')});}else{return utils[_0x7347('0x1e')](_0x4bffb2)[_0x7347('0xe')](function(){return _0x123da6(null,_0x4bffb2);});}}}});})[_0x7347('0x1f')](function(_0xaf458a){return _0x123da6(null,![],_0xaf458a);});}function sendServiceMail(_0x3c43ae){return db['MailAccount']['find']({'where':{'service':!![]},'attributes':['id',_0x7347('0xf'),'email'],'include':[{'model':db[_0x7347('0x20')],'as':_0x7347('0x21')}]})['then'](function(_0x5424fd){if(!_0x5424fd){throw new Error('Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!');}var _0x3307ac={'tls':{'rejectUnauthorized':![]}};if(_0x5424fd[_0x7347('0x21')][_0x7347('0x22')]){_0x3307ac[_0x7347('0x22')]=_0x5424fd[_0x7347('0x21')]['service'];}else{_0x3307ac[_0x7347('0x23')]=_0x5424fd[_0x7347('0x21')][_0x7347('0x23')];_0x3307ac['port']=_0x5424fd['Smtp'][_0x7347('0x24')];_0x3307ac[_0x7347('0x25')]=_0x5424fd[_0x7347('0x21')][_0x7347('0x25')];}if(_0x5424fd[_0x7347('0x21')][_0x7347('0x26')]){_0x3307ac[_0x7347('0x27')]={'user':_0x5424fd['Smtp'][_0x7347('0x16')],'pass':_0x5424fd[_0x7347('0x21')][_0x7347('0x28')]};}var _0x4e44a5={'account':_0x3307ac,'message':_[_0x7347('0x29')]({'from':util[_0x7347('0x2a')](_0x7347('0x2b'),_0x5424fd[_0x7347('0xf')],_0x5424fd[_0x7347('0x2c')]||_0x5424fd[_0x7347('0x21')][_0x7347('0x16')])},_0x3c43ae)};return client['request'](_0x7347('0x2d'),_0x4e44a5);})[_0x7347('0xe')](function(_0x4ed7eb){if(_0x4ed7eb[_0x7347('0x2e')]){throw new Error(util[_0x7347('0x2a')](_0x7347('0x2f'),_0x4ed7eb[_0x7347('0x2e')][_0x7347('0x30')]||JSON[_0x7347('0x31')](_0x4ed7eb[_0x7347('0x2e')])));}return!![];});}function handleError(_0x334a81,_0x2b5531,_0x4eaeb5){return _0x334a81[_0x7347('0x32')](_0x2b5531||0x1f4)[_0x7347('0x33')]({'message':_0x4eaeb5?_0x4eaeb5[_0x7347('0x30')]||_0x4eaeb5:''});}function checkPasswordPattern(_0x8855b5,_0x565319,_0x4890f8){if(_0x4890f8){var _0xfe4cff=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0xfe4cff[_0x7347('0x34')](_0x565319)){return _0x8855b5;}else{throw new Error(_0x7347('0x35'));}}else{return _0x8855b5;}}exports[_0x7347('0x36')]=function(_0x33aa5b,_0x1fb635,_0x2ddbef){passport[_0x7347('0x18')](_0x7347('0x37'),function(_0x24c6e4,_0xba5abe,_0x3f999d){var _0x45e5d8=_0x24c6e4||_0x3f999d;if(_0x45e5d8){return handleError(_0x1fb635,0x191,_0x45e5d8);}if(!_0xba5abe){return handleError(_0x1fb635,0x194,{'message':_0x7347('0x38')});}else{var _0x229019=signToken(_0xba5abe['id'],_0xba5abe[_0x7347('0x39')]);_0x1fb635[_0x7347('0x3a')]({'id':_0xba5abe['id'],'token':_0x229019,'statusCall':'','isAlreadyLogged':_0xba5abe[_0x7347('0x3b')]});}})(_0x33aa5b,_0x1fb635,_0x2ddbef);};exports[_0x7347('0x3c')]=function(_0x708b1,_0x101953,_0x29a758){if(!_0x708b1[_0x7347('0x3d')][_0x7347('0x2c')]){return handleError(_0x101953,0x1f4,{'message':_0x7347('0x3e')});}var _0x1ae9ad=rs[_0x7347('0x3f')]();_0x708b1['body'][_0x7347('0x2c')]=_0x708b1[_0x7347('0x3d')][_0x7347('0x2c')][_0x7347('0x40')]()[_0x7347('0x41')]();var _0x59a23a;return db[_0x7347('0x42')][_0x7347('0xb')]({'where':{'id':0x1},'attributes':[_0x7347('0xc'),'blockDuration'],'raw':!![]})['then'](function(_0x1fdf31){_0x59a23a=_0x1fdf31;return db[_0x7347('0x43')][_0x7347('0x44')]({'where':{'email':_0x708b1['body'][_0x7347('0x2c')]}});})['then'](function(_0x52b029){if(!_0x52b029){throw new Error(_0x7347('0x45'));}if(_0x52b029[_0x7347('0x19')]){throw new Error(_0x7347('0x46'));}if(_0x52b029[_0x7347('0x12')]){if(moment(_0x52b029[_0x7347('0x13')])[_0x7347('0x1a')](_0x59a23a['blockDuration'],_0x7347('0x1d'))>moment()){throw new Error(_0x7347('0x47'));}else{_0x52b029['blocked']=![];_0x52b029['blockedAt']=null;}}_0x52b029[_0x7347('0x48')]=_0x1ae9ad;_0x52b029[_0x7347('0x49')]=Date[_0x7347('0x4a')]()+0x36ee80;return _0x52b029[_0x7347('0x4b')]();})['then'](function(){return sendServiceMail({'to':_0x708b1[_0x7347('0x3d')][_0x7347('0x2c')],'subject':'xCally\x20Motion\x20Password\x20Reset','text':_0x7347('0x4c')+_0x7347('0x4d')+_0x7347('0x4e')+_0x708b1['headers'][_0x7347('0x23')]+'/reset/'+_0x1ae9ad+'\x0a\x0a'+_0x7347('0x4f')});})['then'](function(){_0x101953['status'](0xc8)[_0x7347('0x33')]({'message':_0x7347('0x50')});})[_0x7347('0x1f')](function(_0x40b018){return handleError(_0x101953,0x1f4,_0x40b018);});};exports[_0x7347('0x51')]=function(_0x17f97b,_0x52b9bc,_0x1ed7f7){var _0x140243;return db[_0x7347('0x43')][_0x7347('0x44')]({'where':{'resetPasswordToken':_0x17f97b[_0x7347('0x52')][_0x7347('0x53')],'resetPasswordExpires':{'$gt':Date[_0x7347('0x4a')]()}}})[_0x7347('0xe')](function(_0x1d8bdb){_0x140243=_0x1d8bdb;if(!_0x140243){throw new Error(_0x7347('0x54'));}return db[_0x7347('0x42')][_0x7347('0xb')]({'attributes':['id','securePassword']});})['then'](function(_0xf1ea6a){return checkPasswordPattern(_0xf1ea6a,_0x17f97b[_0x7347('0x3d')][_0x7347('0x10')],_0xf1ea6a['securePassword']);})[_0x7347('0xe')](function(){_0x140243[_0x7347('0x10')]=_0x17f97b['body'][_0x7347('0x10')];_0x140243[_0x7347('0x48')]=null;_0x140243[_0x7347('0x49')]=null;return _0x140243[_0x7347('0x4b')]();})['then'](function(){_0x52b9bc[_0x7347('0x32')](0xc8)[_0x7347('0x33')]({'message':'Password\x20reset!'});})[_0x7347('0x1f')](function(_0x992ebe){return handleError(_0x52b9bc,0x1f4,_0x992ebe);});};passport[_0x7347('0x55')](new LocalStrategy({'usernameField':'name','passwordField':_0x7347('0x10')},function(_0x240204,_0x2233fd,_0x281e6f){return localAuthenticate(db[_0x7347('0x43')],_0x240204,_0x2233fd,_0x281e6f);}));
\ No newline at end of file
index a9369f6..dae2886 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1fe3=['post','/forgot','forgot','/reset/:token','Router','./authLocal.controller'];(function(_0x45c7fb,_0x44bc39){var _0x2f7d99=function(_0x2113ac){while(--_0x2113ac){_0x45c7fb['push'](_0x45c7fb['shift']());}};_0x2f7d99(++_0x44bc39);}(_0x1fe3,0x1e4));var _0x31fe=function(_0x43aef3,_0x1f1d05){_0x43aef3=_0x43aef3-0x0;var _0x3a0cc2=_0x1fe3[_0x43aef3];return _0x3a0cc2;};'use strict';var express=require('express');var router=express[_0x31fe('0x0')]();var controller=require(_0x31fe('0x1'));router['post']('/',controller['login']);router[_0x31fe('0x2')](_0x31fe('0x3'),controller[_0x31fe('0x4')]);router[_0x31fe('0x2')](_0x31fe('0x5'),controller['reset']);module['exports']=router;
\ No newline at end of file
+var _0xc5fa=['reset','exports','express','Router','./authLocal.controller','post','/forgot','forgot','/reset/:token'];(function(_0x3071a4,_0xefbd47){var _0x3abcb3=function(_0x25357b){while(--_0x25357b){_0x3071a4['push'](_0x3071a4['shift']());}};_0x3abcb3(++_0xefbd47);}(_0xc5fa,0x1e8));var _0xac5f=function(_0x5ad71d,_0x2d74a2){_0x5ad71d=_0x5ad71d-0x0;var _0x5ec4b7=_0xc5fa[_0x5ad71d];return _0x5ec4b7;};'use strict';var express=require(_0xac5f('0x0'));var router=express[_0xac5f('0x1')]();var controller=require(_0xac5f('0x2'));router[_0xac5f('0x3')]('/',controller['login']);router[_0xac5f('0x3')](_0xac5f('0x4'),controller[_0xac5f('0x5')]);router['post'](_0xac5f('0x6'),controller[_0xac5f('0x7')]);module[_0xac5f('0x8')]=router;
\ No newline at end of file
index 676dd53..edee67a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d08=['BOOLEAN','sequelize','exports','STRING'];(function(_0x234b81,_0x2d85d0){var _0x41111d=function(_0x2977d9){while(--_0x2977d9){_0x234b81['push'](_0x234b81['shift']());}};_0x41111d(++_0x2d85d0);}(_0x2d08,0x129));var _0x82d0=function(_0x5b2865,_0x3b814b){_0x5b2865=_0x5b2865-0x0;var _0x3cb4c6=_0x2d08[_0x5b2865];return _0x3cb4c6;};'use strict';var Sequelize=require(_0x82d0('0x0'));module[_0x82d0('0x1')]={'name':{'type':Sequelize[_0x82d0('0x2')],'allowNull':![]},'channel':{'type':Sequelize[_0x82d0('0x2')]},'description':{'type':Sequelize[_0x82d0('0x2')]},'status':{'type':Sequelize[_0x82d0('0x3')],'defaultValue':![]},'timeout':{'type':Sequelize['INTEGER'],'defaultValue':0xa}};
\ No newline at end of file
+var _0xf15d=['STRING','BOOLEAN','INTEGER','sequelize'];(function(_0x1afbb0,_0x30c8a3){var _0x327735=function(_0x2c252d){while(--_0x2c252d){_0x1afbb0['push'](_0x1afbb0['shift']());}};_0x327735(++_0x30c8a3);}(_0xf15d,0x113));var _0xdf15=function(_0x4d086a,_0x4fbc58){_0x4d086a=_0x4d086a-0x0;var _0x2decae=_0xf15d[_0x4d086a];return _0x2decae;};'use strict';var Sequelize=require(_0xdf15('0x0'));module['exports']={'name':{'type':Sequelize[_0xdf15('0x1')],'allowNull':![]},'channel':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']},'status':{'type':Sequelize[_0xdf15('0x2')],'defaultValue':![]},'timeout':{'type':Sequelize[_0xdf15('0x3')],'defaultValue':0xa}};
\ No newline at end of file
index 8c38b55..522453a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8835=['moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','reject','save','update','then','stack','name','send','index','Automation','rawAttributes','keys','query','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filters','filter','merge','map','type','key','VIRTUAL','field','includeAll','include','findAll','rows','show','params','length','options','find','catch','create','body','destroy','addConditions','Condition','ids','omit','getConditions','findOne','pick','Action','addActions','getActions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise'];(function(_0x565ed7,_0x398228){var _0x183ad7=function(_0x5a43d7){while(--_0x5a43d7){_0x565ed7['push'](_0x565ed7['shift']());}};_0x183ad7(++_0x398228);}(_0x8835,0x105));var _0x5883=function(_0x11514e,_0x4295dd){_0x11514e=_0x11514e-0x0;var _0x2fb3a9=_0x8835[_0x11514e];return _0x2fb3a9;};'use strict';var pdf=require(_0x5883('0x0'));var emlformat=require(_0x5883('0x1'));var rimraf=require(_0x5883('0x2'));var zipdir=require(_0x5883('0x3'));var jsonpatch=require(_0x5883('0x4'));var rp=require(_0x5883('0x5'));var moment=require(_0x5883('0x6'));var BPromise=require(_0x5883('0x7'));var Mustache=require(_0x5883('0x8'));var util=require(_0x5883('0x9'));var path=require(_0x5883('0xa'));var sox=require(_0x5883('0xb'));var csv=require(_0x5883('0xc'));var ejs=require(_0x5883('0xd'));var fs=require('fs');var _=require(_0x5883('0xe'));var squel=require(_0x5883('0xf'));var crypto=require(_0x5883('0x10'));var jsforce=require(_0x5883('0x11'));var deskjs=require(_0x5883('0x12'));var toCsv=require('to-csv');var querystring=require(_0x5883('0x13'));var Papa=require(_0x5883('0x14'));var Redis=require(_0x5883('0x15'));var authService=require(_0x5883('0x16'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x5883('0x17'));var logger=require('../../config/logger')(_0x5883('0x18'));var utils=require(_0x5883('0x19'));var config=require(_0x5883('0x1a'));var db=require(_0x5883('0x1b'))['db'];function respondWithStatusCode(_0x1a93b7,_0xcdc4a1){_0xcdc4a1=_0xcdc4a1||0xcc;return function(_0x47e723){if(_0x47e723){return _0x1a93b7[_0x5883('0x1c')](_0xcdc4a1);}return _0x1a93b7['status'](_0xcdc4a1)[_0x5883('0x1d')]();};}function respondWithResult(_0x3ae6de,_0x263540){_0x263540=_0x263540||0xc8;return function(_0x574c60){if(_0x574c60){return _0x3ae6de[_0x5883('0x1e')](_0x263540)[_0x5883('0x1f')](_0x574c60);}};}function respondWithFilteredResult(_0x20e01d,_0x54d30d){return function(_0x2debcb){if(_0x2debcb){var _0x3f0276=_0x2debcb[_0x5883('0x20')],_0xc41fd8=_0x54d30d[_0x5883('0x21')],_0x4f435a=_0x54d30d['offset']+_0x54d30d[_0x5883('0x22')],_0x26c815;if(_0x4f435a>=_0x3f0276){_0x4f435a=_0x3f0276;_0x26c815=0xc8;}else{_0x26c815=0xce;}_0x20e01d[_0x5883('0x1e')](_0x26c815);return _0x20e01d[_0x5883('0x23')](_0x5883('0x24'),_0xc41fd8+'-'+_0x4f435a+'/'+_0x3f0276)[_0x5883('0x1f')](_0x2debcb);}return null;};}function patchUpdates(_0x3fb7dd){return function(_0x5c1dcd){try{jsonpatch['apply'](_0x5c1dcd,_0x3fb7dd,!![]);}catch(_0x4faa6d){return BPromise[_0x5883('0x25')](_0x4faa6d);}return _0x5c1dcd[_0x5883('0x26')]();};}function saveUpdates(_0x5a222b,_0x49fa6b){return function(_0x43c842){if(_0x43c842){return _0x43c842[_0x5883('0x27')](_0x5a222b)[_0x5883('0x28')](function(_0x230ccb){return _0x230ccb;});}return null;};}function removeEntity(_0xfa1d58,_0x319c04){return function(_0x5a5b2a){if(_0x5a5b2a){return _0x5a5b2a['destroy']()[_0x5883('0x28')](function(){_0xfa1d58[_0x5883('0x1e')](0xcc)[_0x5883('0x1d')]();});}};}function handleEntityNotFound(_0x58f316,_0x4b183d){return function(_0x5a7de0){if(!_0x5a7de0){_0x58f316[_0x5883('0x1c')](0x194);}return _0x5a7de0;};}function handleError(_0x3d92c1,_0x31d286){_0x31d286=_0x31d286||0x1f4;return function(_0x13ac62){logger['error'](_0x13ac62[_0x5883('0x29')]);if(_0x13ac62['name']){delete _0x13ac62[_0x5883('0x2a')];}_0x3d92c1[_0x5883('0x1e')](_0x31d286)[_0x5883('0x2b')](_0x13ac62);};}exports[_0x5883('0x2c')]=function(_0x3da3bb,_0x2decd2){var _0x4786a8={},_0x12fc91={},_0x1304bc={'count':0x0,'rows':[]};var _0x389887=db[_0x5883('0x2d')][_0x5883('0x2e')];_0x12fc91['model']=_[_0x5883('0x2f')](_0x389887);_0x12fc91[_0x5883('0x30')]=_[_0x5883('0x2f')](_0x3da3bb[_0x5883('0x30')]);_0x12fc91['filters']=_[_0x5883('0x31')](_0x12fc91[_0x5883('0x32')],_0x12fc91['query']);_0x4786a8[_0x5883('0x33')]=_[_0x5883('0x31')](_0x12fc91[_0x5883('0x32')],qs[_0x5883('0x34')](_0x3da3bb[_0x5883('0x30')][_0x5883('0x34')]));_0x4786a8[_0x5883('0x33')]=_0x4786a8[_0x5883('0x33')]['length']?_0x4786a8[_0x5883('0x33')]:_0x12fc91['model'];if(!_0x3da3bb['query'][_0x5883('0x35')](_0x5883('0x36'))){_0x4786a8[_0x5883('0x22')]=qs[_0x5883('0x22')](_0x3da3bb[_0x5883('0x30')][_0x5883('0x22')]);_0x4786a8['offset']=qs[_0x5883('0x21')](_0x3da3bb[_0x5883('0x30')][_0x5883('0x21')]);}_0x4786a8[_0x5883('0x37')]=qs[_0x5883('0x38')](_0x3da3bb[_0x5883('0x30')]['sort']);_0x4786a8[_0x5883('0x39')]=qs[_0x5883('0x3a')](_['pick'](_0x3da3bb['query'],_0x12fc91[_0x5883('0x3a')]));if(_0x3da3bb['query'][_0x5883('0x3b')]){_0x4786a8[_0x5883('0x39')]=_[_0x5883('0x3c')](_0x4786a8[_0x5883('0x39')],{'$or':_[_0x5883('0x3d')](_0x389887,function(_0x5590ca){if(_0x5590ca[_0x5883('0x3e')][_0x5883('0x3f')]!==_0x5883('0x40')){var _0xc16399={};_0xc16399[_0x5590ca[_0x5883('0x41')]]={'$like':'%'+_0x3da3bb['query'][_0x5883('0x3b')]+'%'};return _0xc16399;}})});}_0x4786a8=_['merge']({},_0x4786a8,_0x3da3bb['options']);var _0x960326={'where':_0x4786a8[_0x5883('0x39')]};return db[_0x5883('0x2d')][_0x5883('0x20')](_0x960326)[_0x5883('0x28')](function(_0x6fc362){_0x1304bc['count']=_0x6fc362;if(_0x3da3bb[_0x5883('0x30')][_0x5883('0x42')]){_0x4786a8[_0x5883('0x43')]=[{'all':!![]}];}return db[_0x5883('0x2d')][_0x5883('0x44')](_0x4786a8);})['then'](function(_0x2ec4b0){_0x1304bc[_0x5883('0x45')]=_0x2ec4b0;return _0x1304bc;})[_0x5883('0x28')](respondWithFilteredResult(_0x2decd2,_0x4786a8))['catch'](handleError(_0x2decd2,null));};exports[_0x5883('0x46')]=function(_0x5c2fd0,_0x141e1a){var _0x39bc79={'raw':![],'where':{'id':_0x5c2fd0[_0x5883('0x47')]['id']}},_0x3be790={};_0x3be790[_0x5883('0x32')]=_[_0x5883('0x2f')](db[_0x5883('0x2d')][_0x5883('0x2e')]);_0x3be790[_0x5883('0x30')]=_[_0x5883('0x2f')](_0x5c2fd0['query']);_0x3be790[_0x5883('0x3a')]=_['intersection'](_0x3be790[_0x5883('0x32')],_0x3be790['query']);_0x39bc79[_0x5883('0x33')]=_[_0x5883('0x31')](_0x3be790[_0x5883('0x32')],qs[_0x5883('0x34')](_0x5c2fd0[_0x5883('0x30')][_0x5883('0x34')]));_0x39bc79[_0x5883('0x33')]=_0x39bc79[_0x5883('0x33')][_0x5883('0x48')]?_0x39bc79['attributes']:_0x3be790[_0x5883('0x32')];if(_0x5c2fd0['query'][_0x5883('0x42')]){_0x39bc79[_0x5883('0x43')]=[{'all':!![]}];}_0x39bc79=_[_0x5883('0x3c')]({},_0x39bc79,_0x5c2fd0[_0x5883('0x49')]);return db[_0x5883('0x2d')][_0x5883('0x4a')](_0x39bc79)['then'](handleEntityNotFound(_0x141e1a,null))[_0x5883('0x28')](respondWithResult(_0x141e1a,null))[_0x5883('0x4b')](handleError(_0x141e1a,null));};exports['create']=function(_0x1e0a31,_0x468a7a){return db['Automation'][_0x5883('0x4c')](_0x1e0a31[_0x5883('0x4d')],{})[_0x5883('0x28')](respondWithResult(_0x468a7a,0xc9))[_0x5883('0x4b')](handleError(_0x468a7a,null));};exports[_0x5883('0x27')]=function(_0x5be23b,_0x9b3878){if(_0x5be23b[_0x5883('0x4d')]['id']){delete _0x5be23b[_0x5883('0x4d')]['id'];}return db[_0x5883('0x2d')][_0x5883('0x4a')]({'where':{'id':_0x5be23b[_0x5883('0x47')]['id']}})[_0x5883('0x28')](handleEntityNotFound(_0x9b3878,null))[_0x5883('0x28')](saveUpdates(_0x5be23b[_0x5883('0x4d')],null))[_0x5883('0x28')](respondWithResult(_0x9b3878,null))[_0x5883('0x4b')](handleError(_0x9b3878,null));};exports[_0x5883('0x4e')]=function(_0x1296a2,_0x4a54d8){return db[_0x5883('0x2d')]['find']({'where':{'id':_0x1296a2[_0x5883('0x47')]['id']}})[_0x5883('0x28')](handleEntityNotFound(_0x4a54d8,null))[_0x5883('0x28')](removeEntity(_0x4a54d8,null))[_0x5883('0x4b')](handleError(_0x4a54d8,null));};exports[_0x5883('0x4f')]=function(_0x924fbf,_0x3b0930,_0x28c73f){return db[_0x5883('0x50')][_0x5883('0x4a')]({'where':{'id':_0x924fbf[_0x5883('0x47')]['id']}})['then'](handleEntityNotFound(_0x3b0930,null))['then'](function(_0x57fe97){if(_0x57fe97){return _0x57fe97['addConditions'](_0x924fbf[_0x5883('0x4d')][_0x5883('0x51')],_[_0x5883('0x52')](_0x924fbf[_0x5883('0x4d')],[_0x5883('0x51'),'id'])||{});}})[_0x5883('0x28')](respondWithResult(_0x3b0930,null))[_0x5883('0x4b')](handleError(_0x3b0930,null));};exports[_0x5883('0x53')]=function(_0x4abdee,_0x3bc98c,_0x5db227){var _0x36d3ed={};var _0x27cf6b={};var _0x329cb3;var _0x59454f;return db[_0x5883('0x2d')][_0x5883('0x54')]({'where':{'id':_0x4abdee[_0x5883('0x47')]['id']}})[_0x5883('0x28')](handleEntityNotFound(_0x3bc98c,null))[_0x5883('0x28')](function(_0x25b6ff){if(_0x25b6ff){_0x329cb3=_0x25b6ff;_0x27cf6b['model']=_[_0x5883('0x2f')](db['Condition'][_0x5883('0x2e')]);_0x27cf6b[_0x5883('0x30')]=_[_0x5883('0x2f')](_0x4abdee[_0x5883('0x30')]);_0x27cf6b['filters']=_[_0x5883('0x31')](_0x27cf6b[_0x5883('0x32')],_0x27cf6b['query']);_0x36d3ed[_0x5883('0x33')]=_[_0x5883('0x31')](_0x27cf6b[_0x5883('0x32')],qs[_0x5883('0x34')](_0x4abdee[_0x5883('0x30')][_0x5883('0x34')]));_0x36d3ed[_0x5883('0x33')]=_0x36d3ed[_0x5883('0x33')]['length']?_0x36d3ed[_0x5883('0x33')]:_0x27cf6b[_0x5883('0x32')];_0x36d3ed['order']=qs[_0x5883('0x38')](_0x4abdee[_0x5883('0x30')][_0x5883('0x38')]);_0x36d3ed['where']=qs[_0x5883('0x3a')](_[_0x5883('0x55')](_0x4abdee[_0x5883('0x30')],_0x27cf6b['filters']));if(_0x4abdee['query'][_0x5883('0x3b')]){_0x36d3ed[_0x5883('0x39')]=_[_0x5883('0x3c')](_0x36d3ed[_0x5883('0x39')],{'$or':_[_0x5883('0x3d')](_0x36d3ed['attributes'],function(_0x38ada2){var _0x409b42={};_0x409b42[_0x38ada2]={'$like':'%'+_0x4abdee[_0x5883('0x30')][_0x5883('0x3b')]+'%'};return _0x409b42;})});}_0x36d3ed=_[_0x5883('0x3c')]({},_0x36d3ed,_0x4abdee['options']);return _0x329cb3[_0x5883('0x53')](_0x36d3ed);}})[_0x5883('0x28')](function(_0x2df8f1){if(_0x2df8f1){_0x59454f=_0x2df8f1[_0x5883('0x48')];if(!_0x4abdee[_0x5883('0x30')][_0x5883('0x35')](_0x5883('0x36'))){_0x36d3ed[_0x5883('0x22')]=qs['limit'](_0x4abdee[_0x5883('0x30')][_0x5883('0x22')]);_0x36d3ed['offset']=qs[_0x5883('0x21')](_0x4abdee[_0x5883('0x30')][_0x5883('0x21')]);}return _0x329cb3['getConditions'](_0x36d3ed);}})[_0x5883('0x28')](function(_0x45f2fa){if(_0x45f2fa){return _0x45f2fa?{'count':_0x59454f,'rows':_0x45f2fa}:null;}})['then'](respondWithResult(_0x3bc98c,null))['catch'](handleError(_0x3bc98c,null));};exports['addActions']=function(_0x231ceb,_0x5415cc,_0x54054a){return db[_0x5883('0x56')]['find']({'where':{'id':_0x231ceb['params']['id']}})[_0x5883('0x28')](handleEntityNotFound(_0x5415cc,null))[_0x5883('0x28')](function(_0xa7490f){if(_0xa7490f){return _0xa7490f[_0x5883('0x57')](_0x231ceb[_0x5883('0x4d')][_0x5883('0x51')],_['omit'](_0x231ceb['body'],[_0x5883('0x51'),'id'])||{});}})[_0x5883('0x28')](respondWithResult(_0x5415cc,null))[_0x5883('0x4b')](handleError(_0x5415cc,null));};exports['getActions']=function(_0x3d0b54,_0x1c23a7,_0x563db3){var _0x36f94c={};var _0x52871a={};var _0xebda95;var _0x5cb5fa;return db[_0x5883('0x2d')][_0x5883('0x54')]({'where':{'id':_0x3d0b54[_0x5883('0x47')]['id']}})['then'](handleEntityNotFound(_0x1c23a7,null))[_0x5883('0x28')](function(_0x9734b3){if(_0x9734b3){_0xebda95=_0x9734b3;_0x52871a[_0x5883('0x32')]=_[_0x5883('0x2f')](db[_0x5883('0x56')][_0x5883('0x2e')]);_0x52871a[_0x5883('0x30')]=_[_0x5883('0x2f')](_0x3d0b54[_0x5883('0x30')]);_0x52871a[_0x5883('0x3a')]=_[_0x5883('0x31')](_0x52871a[_0x5883('0x32')],_0x52871a[_0x5883('0x30')]);_0x36f94c[_0x5883('0x33')]=_[_0x5883('0x31')](_0x52871a[_0x5883('0x32')],qs[_0x5883('0x34')](_0x3d0b54[_0x5883('0x30')]['fields']));_0x36f94c[_0x5883('0x33')]=_0x36f94c[_0x5883('0x33')][_0x5883('0x48')]?_0x36f94c[_0x5883('0x33')]:_0x52871a[_0x5883('0x32')];_0x36f94c[_0x5883('0x37')]=qs[_0x5883('0x38')](_0x3d0b54[_0x5883('0x30')][_0x5883('0x38')]);_0x36f94c['where']=qs[_0x5883('0x3a')](_[_0x5883('0x55')](_0x3d0b54[_0x5883('0x30')],_0x52871a[_0x5883('0x3a')]));if(_0x3d0b54[_0x5883('0x30')]['filter']){_0x36f94c[_0x5883('0x39')]=_[_0x5883('0x3c')](_0x36f94c['where'],{'$or':_[_0x5883('0x3d')](_0x36f94c['attributes'],function(_0x13f236){var _0x1f0521={};_0x1f0521[_0x13f236]={'$like':'%'+_0x3d0b54[_0x5883('0x30')][_0x5883('0x3b')]+'%'};return _0x1f0521;})});}_0x36f94c=_[_0x5883('0x3c')]({},_0x36f94c,_0x3d0b54[_0x5883('0x49')]);return _0xebda95[_0x5883('0x58')](_0x36f94c);}})[_0x5883('0x28')](function(_0x1e1fc6){if(_0x1e1fc6){_0x5cb5fa=_0x1e1fc6[_0x5883('0x48')];if(!_0x3d0b54['query'][_0x5883('0x35')](_0x5883('0x36'))){_0x36f94c[_0x5883('0x22')]=qs[_0x5883('0x22')](_0x3d0b54[_0x5883('0x30')][_0x5883('0x22')]);_0x36f94c[_0x5883('0x21')]=qs[_0x5883('0x21')](_0x3d0b54['query'][_0x5883('0x21')]);}return _0xebda95[_0x5883('0x58')](_0x36f94c);}})['then'](function(_0xf2d7f7){if(_0xf2d7f7){return _0xf2d7f7?{'count':_0x5cb5fa,'rows':_0xf2d7f7}:null;}})[_0x5883('0x28')](respondWithResult(_0x1c23a7,null))['catch'](handleError(_0x1c23a7,null));};
\ No newline at end of file
+var _0x482b=['then','error','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','Automation','includeAll','include','findAll','rows','catch','show','length','find','create','body','params','destroy','addConditions','omit','Condition','getConditions','addActions','ids','Action','getActions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/environment','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','update'];(function(_0xda3b4f,_0x4f9ead){var _0x4cce76=function(_0x126e42){while(--_0x126e42){_0xda3b4f['push'](_0xda3b4f['shift']());}};_0x4cce76(++_0x4f9ead);}(_0x482b,0x83));var _0xb482=function(_0x146250,_0x751d92){_0x146250=_0x146250-0x0;var _0x5da34b=_0x482b[_0x146250];return _0x5da34b;};'use strict';var pdf=require(_0xb482('0x0'));var emlformat=require(_0xb482('0x1'));var rimraf=require(_0xb482('0x2'));var zipdir=require(_0xb482('0x3'));var jsonpatch=require(_0xb482('0x4'));var rp=require('request-promise');var moment=require(_0xb482('0x5'));var BPromise=require(_0xb482('0x6'));var Mustache=require(_0xb482('0x7'));var util=require('util');var path=require(_0xb482('0x8'));var sox=require('sox');var csv=require(_0xb482('0x9'));var ejs=require(_0xb482('0xa'));var fs=require('fs');var _=require(_0xb482('0xb'));var squel=require(_0xb482('0xc'));var crypto=require(_0xb482('0xd'));var jsforce=require(_0xb482('0xe'));var deskjs=require(_0xb482('0xf'));var toCsv=require(_0xb482('0x9'));var querystring=require(_0xb482('0x10'));var Papa=require(_0xb482('0x11'));var Redis=require('ioredis');var authService=require(_0xb482('0x12'));var qs=require(_0xb482('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xb482('0x14'))(_0xb482('0x15'));var utils=require('../../config/utils');var config=require(_0xb482('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5d8672,_0x1c6e17){_0x1c6e17=_0x1c6e17||0xcc;return function(_0x2f7294){if(_0x2f7294){return _0x5d8672[_0xb482('0x17')](_0x1c6e17);}return _0x5d8672['status'](_0x1c6e17)[_0xb482('0x18')]();};}function respondWithResult(_0x1da365,_0x110a79){_0x110a79=_0x110a79||0xc8;return function(_0x4e3a77){if(_0x4e3a77){return _0x1da365[_0xb482('0x19')](_0x110a79)[_0xb482('0x1a')](_0x4e3a77);}};}function respondWithFilteredResult(_0x5a64af,_0x348e1e){return function(_0x4aa5a8){if(_0x4aa5a8){var _0x14325c=_0x4aa5a8[_0xb482('0x1b')],_0x81268c=_0x348e1e[_0xb482('0x1c')],_0x59df76=_0x348e1e[_0xb482('0x1c')]+_0x348e1e[_0xb482('0x1d')],_0x2be744;if(_0x59df76>=_0x14325c){_0x59df76=_0x14325c;_0x2be744=0xc8;}else{_0x2be744=0xce;}_0x5a64af[_0xb482('0x19')](_0x2be744);return _0x5a64af[_0xb482('0x1e')](_0xb482('0x1f'),_0x81268c+'-'+_0x59df76+'/'+_0x14325c)[_0xb482('0x1a')](_0x4aa5a8);}return null;};}function patchUpdates(_0x1b2658){return function(_0x420875){try{jsonpatch[_0xb482('0x20')](_0x420875,_0x1b2658,!![]);}catch(_0x5ec704){return BPromise[_0xb482('0x21')](_0x5ec704);}return _0x420875['save']();};}function saveUpdates(_0x4a0d60,_0x5470d0){return function(_0x1c7c8d){if(_0x1c7c8d){return _0x1c7c8d[_0xb482('0x22')](_0x4a0d60)['then'](function(_0x2d7802){return _0x2d7802;});}return null;};}function removeEntity(_0xc2888f,_0x3d1658){return function(_0x2f907e){if(_0x2f907e){return _0x2f907e['destroy']()[_0xb482('0x23')](function(){_0xc2888f[_0xb482('0x19')](0xcc)[_0xb482('0x18')]();});}};}function handleEntityNotFound(_0x47bdf4,_0x389392){return function(_0x298640){if(!_0x298640){_0x47bdf4[_0xb482('0x17')](0x194);}return _0x298640;};}function handleError(_0x425ef4,_0x42e779){_0x42e779=_0x42e779||0x1f4;return function(_0xfded93){logger[_0xb482('0x24')](_0xfded93['stack']);if(_0xfded93[_0xb482('0x25')]){delete _0xfded93[_0xb482('0x25')];}_0x425ef4[_0xb482('0x19')](_0x42e779)[_0xb482('0x26')](_0xfded93);};}exports[_0xb482('0x27')]=function(_0x530c4e,_0x322375){var _0x879137={},_0x17b0a1={},_0x586d36={'count':0x0,'rows':[]};var _0x48a4d6=db['Automation'][_0xb482('0x28')];_0x17b0a1[_0xb482('0x29')]=_['keys'](_0x48a4d6);_0x17b0a1['query']=_[_0xb482('0x2a')](_0x530c4e[_0xb482('0x2b')]);_0x17b0a1[_0xb482('0x2c')]=_[_0xb482('0x2d')](_0x17b0a1[_0xb482('0x29')],_0x17b0a1['query']);_0x879137[_0xb482('0x2e')]=_[_0xb482('0x2d')](_0x17b0a1['model'],qs[_0xb482('0x2f')](_0x530c4e['query'][_0xb482('0x2f')]));_0x879137['attributes']=_0x879137[_0xb482('0x2e')]['length']?_0x879137[_0xb482('0x2e')]:_0x17b0a1['model'];if(!_0x530c4e[_0xb482('0x2b')][_0xb482('0x30')](_0xb482('0x31'))){_0x879137[_0xb482('0x1d')]=qs['limit'](_0x530c4e[_0xb482('0x2b')][_0xb482('0x1d')]);_0x879137[_0xb482('0x1c')]=qs['offset'](_0x530c4e[_0xb482('0x2b')][_0xb482('0x1c')]);}_0x879137[_0xb482('0x32')]=qs[_0xb482('0x33')](_0x530c4e[_0xb482('0x2b')][_0xb482('0x33')]);_0x879137[_0xb482('0x34')]=qs[_0xb482('0x2c')](_[_0xb482('0x35')](_0x530c4e[_0xb482('0x2b')],_0x17b0a1[_0xb482('0x2c')]));if(_0x530c4e[_0xb482('0x2b')][_0xb482('0x36')]){_0x879137[_0xb482('0x34')]=_[_0xb482('0x37')](_0x879137[_0xb482('0x34')],{'$or':_[_0xb482('0x38')](_0x48a4d6,function(_0x51e7b1){if(_0x51e7b1[_0xb482('0x39')][_0xb482('0x3a')]!==_0xb482('0x3b')){var _0xfd00ea={};_0xfd00ea[_0x51e7b1[_0xb482('0x3c')]]={'$like':'%'+_0x530c4e[_0xb482('0x2b')][_0xb482('0x36')]+'%'};return _0xfd00ea;}})});}_0x879137=_[_0xb482('0x37')]({},_0x879137,_0x530c4e[_0xb482('0x3d')]);var _0x1c42f7={'where':_0x879137['where']};return db[_0xb482('0x3e')][_0xb482('0x1b')](_0x1c42f7)[_0xb482('0x23')](function(_0x5f34e5){_0x586d36[_0xb482('0x1b')]=_0x5f34e5;if(_0x530c4e[_0xb482('0x2b')][_0xb482('0x3f')]){_0x879137[_0xb482('0x40')]=[{'all':!![]}];}return db[_0xb482('0x3e')][_0xb482('0x41')](_0x879137);})[_0xb482('0x23')](function(_0x1a0ec0){_0x586d36[_0xb482('0x42')]=_0x1a0ec0;return _0x586d36;})['then'](respondWithFilteredResult(_0x322375,_0x879137))[_0xb482('0x43')](handleError(_0x322375,null));};exports[_0xb482('0x44')]=function(_0x1933e8,_0x13b3b3){var _0x2ad863={'raw':![],'where':{'id':_0x1933e8['params']['id']}},_0x52411a={};_0x52411a['model']=_[_0xb482('0x2a')](db[_0xb482('0x3e')][_0xb482('0x28')]);_0x52411a[_0xb482('0x2b')]=_[_0xb482('0x2a')](_0x1933e8[_0xb482('0x2b')]);_0x52411a[_0xb482('0x2c')]=_[_0xb482('0x2d')](_0x52411a[_0xb482('0x29')],_0x52411a[_0xb482('0x2b')]);_0x2ad863['attributes']=_[_0xb482('0x2d')](_0x52411a[_0xb482('0x29')],qs[_0xb482('0x2f')](_0x1933e8[_0xb482('0x2b')][_0xb482('0x2f')]));_0x2ad863['attributes']=_0x2ad863[_0xb482('0x2e')][_0xb482('0x45')]?_0x2ad863[_0xb482('0x2e')]:_0x52411a[_0xb482('0x29')];if(_0x1933e8[_0xb482('0x2b')]['includeAll']){_0x2ad863[_0xb482('0x40')]=[{'all':!![]}];}_0x2ad863=_[_0xb482('0x37')]({},_0x2ad863,_0x1933e8[_0xb482('0x3d')]);return db[_0xb482('0x3e')][_0xb482('0x46')](_0x2ad863)[_0xb482('0x23')](handleEntityNotFound(_0x13b3b3,null))[_0xb482('0x23')](respondWithResult(_0x13b3b3,null))[_0xb482('0x43')](handleError(_0x13b3b3,null));};exports[_0xb482('0x47')]=function(_0x55f287,_0x31d74c){return db[_0xb482('0x3e')][_0xb482('0x47')](_0x55f287[_0xb482('0x48')],{})['then'](respondWithResult(_0x31d74c,0xc9))[_0xb482('0x43')](handleError(_0x31d74c,null));};exports['update']=function(_0x35d7cb,_0x1b3e6a){if(_0x35d7cb[_0xb482('0x48')]['id']){delete _0x35d7cb['body']['id'];}return db[_0xb482('0x3e')][_0xb482('0x46')]({'where':{'id':_0x35d7cb[_0xb482('0x49')]['id']}})[_0xb482('0x23')](handleEntityNotFound(_0x1b3e6a,null))[_0xb482('0x23')](saveUpdates(_0x35d7cb[_0xb482('0x48')],null))[_0xb482('0x23')](respondWithResult(_0x1b3e6a,null))[_0xb482('0x43')](handleError(_0x1b3e6a,null));};exports[_0xb482('0x4a')]=function(_0x3ef478,_0x4e37df){return db[_0xb482('0x3e')][_0xb482('0x46')]({'where':{'id':_0x3ef478[_0xb482('0x49')]['id']}})[_0xb482('0x23')](handleEntityNotFound(_0x4e37df,null))[_0xb482('0x23')](removeEntity(_0x4e37df,null))[_0xb482('0x43')](handleError(_0x4e37df,null));};exports['addConditions']=function(_0x4353d6,_0x2a862f,_0x2c4d8e){return db['Condition'][_0xb482('0x46')]({'where':{'id':_0x4353d6['params']['id']}})[_0xb482('0x23')](handleEntityNotFound(_0x2a862f,null))['then'](function(_0x37575d){if(_0x37575d){return _0x37575d[_0xb482('0x4b')](_0x4353d6[_0xb482('0x48')]['ids'],_[_0xb482('0x4c')](_0x4353d6['body'],['ids','id'])||{});}})['then'](respondWithResult(_0x2a862f,null))[_0xb482('0x43')](handleError(_0x2a862f,null));};exports['getConditions']=function(_0xdacf08,_0x1fb0e6,_0x427fd9){var _0x50c29c={};var _0x9e6041={};var _0x4b9342;var _0xd023e9;return db[_0xb482('0x3e')]['findOne']({'where':{'id':_0xdacf08[_0xb482('0x49')]['id']}})[_0xb482('0x23')](handleEntityNotFound(_0x1fb0e6,null))[_0xb482('0x23')](function(_0x233965){if(_0x233965){_0x4b9342=_0x233965;_0x9e6041[_0xb482('0x29')]=_[_0xb482('0x2a')](db[_0xb482('0x4d')][_0xb482('0x28')]);_0x9e6041[_0xb482('0x2b')]=_['keys'](_0xdacf08[_0xb482('0x2b')]);_0x9e6041['filters']=_[_0xb482('0x2d')](_0x9e6041[_0xb482('0x29')],_0x9e6041[_0xb482('0x2b')]);_0x50c29c['attributes']=_[_0xb482('0x2d')](_0x9e6041[_0xb482('0x29')],qs['fields'](_0xdacf08[_0xb482('0x2b')]['fields']));_0x50c29c[_0xb482('0x2e')]=_0x50c29c[_0xb482('0x2e')][_0xb482('0x45')]?_0x50c29c['attributes']:_0x9e6041[_0xb482('0x29')];_0x50c29c[_0xb482('0x32')]=qs[_0xb482('0x33')](_0xdacf08['query'][_0xb482('0x33')]);_0x50c29c[_0xb482('0x34')]=qs[_0xb482('0x2c')](_[_0xb482('0x35')](_0xdacf08[_0xb482('0x2b')],_0x9e6041[_0xb482('0x2c')]));if(_0xdacf08[_0xb482('0x2b')][_0xb482('0x36')]){_0x50c29c['where']=_[_0xb482('0x37')](_0x50c29c[_0xb482('0x34')],{'$or':_['map'](_0x50c29c[_0xb482('0x2e')],function(_0x490773){var _0x28424d={};_0x28424d[_0x490773]={'$like':'%'+_0xdacf08[_0xb482('0x2b')][_0xb482('0x36')]+'%'};return _0x28424d;})});}_0x50c29c=_['merge']({},_0x50c29c,_0xdacf08[_0xb482('0x3d')]);return _0x4b9342[_0xb482('0x4e')](_0x50c29c);}})[_0xb482('0x23')](function(_0x5c9b60){if(_0x5c9b60){_0xd023e9=_0x5c9b60[_0xb482('0x45')];if(!_0xdacf08['query']['hasOwnProperty']('nolimit')){_0x50c29c[_0xb482('0x1d')]=qs[_0xb482('0x1d')](_0xdacf08[_0xb482('0x2b')][_0xb482('0x1d')]);_0x50c29c[_0xb482('0x1c')]=qs[_0xb482('0x1c')](_0xdacf08[_0xb482('0x2b')][_0xb482('0x1c')]);}return _0x4b9342[_0xb482('0x4e')](_0x50c29c);}})[_0xb482('0x23')](function(_0x17cd9a){if(_0x17cd9a){return _0x17cd9a?{'count':_0xd023e9,'rows':_0x17cd9a}:null;}})[_0xb482('0x23')](respondWithResult(_0x1fb0e6,null))['catch'](handleError(_0x1fb0e6,null));};exports[_0xb482('0x4f')]=function(_0x24d787,_0x1d8835,_0x22b938){return db['Action']['find']({'where':{'id':_0x24d787['params']['id']}})[_0xb482('0x23')](handleEntityNotFound(_0x1d8835,null))[_0xb482('0x23')](function(_0x472419){if(_0x472419){return _0x472419[_0xb482('0x4f')](_0x24d787[_0xb482('0x48')][_0xb482('0x50')],_[_0xb482('0x4c')](_0x24d787[_0xb482('0x48')],['ids','id'])||{});}})[_0xb482('0x23')](respondWithResult(_0x1d8835,null))[_0xb482('0x43')](handleError(_0x1d8835,null));};exports['getActions']=function(_0x1ae5b2,_0x27e35f,_0x15af4b){var _0x1736fc={};var _0x376b50={};var _0x760159;var _0x5c0e48;return db[_0xb482('0x3e')]['findOne']({'where':{'id':_0x1ae5b2[_0xb482('0x49')]['id']}})[_0xb482('0x23')](handleEntityNotFound(_0x27e35f,null))[_0xb482('0x23')](function(_0x490f53){if(_0x490f53){_0x760159=_0x490f53;_0x376b50[_0xb482('0x29')]=_['keys'](db[_0xb482('0x51')][_0xb482('0x28')]);_0x376b50[_0xb482('0x2b')]=_['keys'](_0x1ae5b2[_0xb482('0x2b')]);_0x376b50[_0xb482('0x2c')]=_['intersection'](_0x376b50[_0xb482('0x29')],_0x376b50[_0xb482('0x2b')]);_0x1736fc[_0xb482('0x2e')]=_[_0xb482('0x2d')](_0x376b50[_0xb482('0x29')],qs[_0xb482('0x2f')](_0x1ae5b2[_0xb482('0x2b')][_0xb482('0x2f')]));_0x1736fc['attributes']=_0x1736fc[_0xb482('0x2e')]['length']?_0x1736fc[_0xb482('0x2e')]:_0x376b50[_0xb482('0x29')];_0x1736fc[_0xb482('0x32')]=qs['sort'](_0x1ae5b2[_0xb482('0x2b')]['sort']);_0x1736fc[_0xb482('0x34')]=qs['filters'](_['pick'](_0x1ae5b2[_0xb482('0x2b')],_0x376b50[_0xb482('0x2c')]));if(_0x1ae5b2['query'][_0xb482('0x36')]){_0x1736fc[_0xb482('0x34')]=_[_0xb482('0x37')](_0x1736fc[_0xb482('0x34')],{'$or':_[_0xb482('0x38')](_0x1736fc[_0xb482('0x2e')],function(_0x1e480c){var _0x1d45b6={};_0x1d45b6[_0x1e480c]={'$like':'%'+_0x1ae5b2[_0xb482('0x2b')][_0xb482('0x36')]+'%'};return _0x1d45b6;})});}_0x1736fc=_[_0xb482('0x37')]({},_0x1736fc,_0x1ae5b2[_0xb482('0x3d')]);return _0x760159[_0xb482('0x52')](_0x1736fc);}})[_0xb482('0x23')](function(_0x4cf1c3){if(_0x4cf1c3){_0x5c0e48=_0x4cf1c3[_0xb482('0x45')];if(!_0x1ae5b2['query'][_0xb482('0x30')](_0xb482('0x31'))){_0x1736fc[_0xb482('0x1d')]=qs[_0xb482('0x1d')](_0x1ae5b2[_0xb482('0x2b')]['limit']);_0x1736fc[_0xb482('0x1c')]=qs[_0xb482('0x1c')](_0x1ae5b2[_0xb482('0x2b')][_0xb482('0x1c')]);}return _0x760159[_0xb482('0x52')](_0x1736fc);}})[_0xb482('0x23')](function(_0x2303fd){if(_0x2303fd){return _0x2303fd?{'count':_0x5c0e48,'rows':_0x2303fd}:null;}})[_0xb482('0x23')](respondWithResult(_0x27e35f,null))[_0xb482('0x43')](handleError(_0x27e35f,null));};
\ No newline at end of file
index 00c462c..c74595a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2930=['rimraf','exports','define','Automation','tools_automations','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path'];(function(_0x175401,_0x281048){var _0x4d7689=function(_0x48349d){while(--_0x48349d){_0x175401['push'](_0x175401['shift']());}};_0x4d7689(++_0x281048);}(_0x2930,0x1cc));var _0x0293=function(_0x19ce71,_0x3a3cb9){_0x19ce71=_0x19ce71-0x0;var _0x32944a=_0x2930[_0x19ce71];return _0x32944a;};'use strict';var _=require(_0x0293('0x0'));var util=require(_0x0293('0x1'));var logger=require(_0x0293('0x2'))(_0x0293('0x3'));var moment=require(_0x0293('0x4'));var BPromise=require(_0x0293('0x5'));var rp=require(_0x0293('0x6'));var fs=require('fs');var path=require(_0x0293('0x7'));var rimraf=require(_0x0293('0x8'));var config=require('../../config/environment');var attributes=require('./automation.attributes');module[_0x0293('0x9')]=function(_0x2aac08,_0xf645bb){return _0x2aac08[_0x0293('0xa')](_0x0293('0xb'),attributes,{'tableName':_0x0293('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9a77=['exports','define','Automation','util','../../config/logger','moment','bluebird','request-promise','path','../../config/environment','./automation.attributes'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0x9a77,0xd4));var _0x79a7=function(_0x7b3ecf,_0x58d440){_0x7b3ecf=_0x7b3ecf-0x0;var _0x24c292=_0x9a77[_0x7b3ecf];return _0x24c292;};'use strict';var _=require('lodash');var util=require(_0x79a7('0x0'));var logger=require(_0x79a7('0x1'))('api');var moment=require(_0x79a7('0x2'));var BPromise=require(_0x79a7('0x3'));var rp=require(_0x79a7('0x4'));var fs=require('fs');var path=require(_0x79a7('0x5'));var rimraf=require('rimraf');var config=require(_0x79a7('0x6'));var attributes=require(_0x79a7('0x7'));module[_0x79a7('0x8')]=function(_0x5e33c3,_0x5bcca3){return _0x5e33c3[_0x79a7('0x9')](_0x79a7('0xa'),attributes,{'tableName':'tools_automations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d5b3ff3..41ad34e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c9d=['../../config/environment','jayson/promise','client','request','info','Automation,\x20%s,\x20%s','error','code','message','result','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x4edf4a,_0x5c0819){var _0x38131c=function(_0x49a387){while(--_0x49a387){_0x4edf4a['push'](_0x4edf4a['shift']());}};_0x38131c(++_0x5c0819);}(_0x4c9d,0x7c));var _0xd4c9=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x4c9d[_0x3ab51d];return _0x29a04e;};'use strict';var _=require(_0xd4c9('0x0'));var util=require(_0xd4c9('0x1'));var moment=require(_0xd4c9('0x2'));var BPromise=require('bluebird');var rs=require(_0xd4c9('0x3'));var fs=require('fs');var Redis=require(_0xd4c9('0x4'));var db=require(_0xd4c9('0x5'))['db'];var utils=require(_0xd4c9('0x6'));var logger=require(_0xd4c9('0x7'))(_0xd4c9('0x8'));var config=require(_0xd4c9('0x9'));var jayson=require(_0xd4c9('0xa'));var client=jayson[_0xd4c9('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x48b511,_0x13c314,_0x37b94e){return new BPromise(function(_0x3f9d50,_0x8ecc5a){return client[_0xd4c9('0xc')](_0x48b511,_0x37b94e)['then'](function(_0x18419f){logger[_0xd4c9('0xd')](_0xd4c9('0xe'),_0x13c314,'request\x20sent');logger['debug']('Automation,\x20%s,\x20%s,\x20%s',_0x13c314,'request\x20sent',JSON['stringify'](_0x18419f));if(_0x18419f[_0xd4c9('0xf')]){if(_0x18419f['error'][_0xd4c9('0x10')]===0x1f4){logger[_0xd4c9('0xf')](_0xd4c9('0xe'),_0x13c314,_0x18419f['error'][_0xd4c9('0x11')]);return _0x8ecc5a(_0x18419f[_0xd4c9('0xf')][_0xd4c9('0x11')]);}logger[_0xd4c9('0xf')](_0xd4c9('0xe'),_0x13c314,_0x18419f[_0xd4c9('0xf')][_0xd4c9('0x11')]);return _0x3f9d50(_0x18419f[_0xd4c9('0xf')][_0xd4c9('0x11')]);}else{logger[_0xd4c9('0xd')](_0xd4c9('0xe'),_0x13c314,'request\x20sent');_0x3f9d50(_0x18419f[_0xd4c9('0x12')][_0xd4c9('0x11')]);}})['catch'](function(_0x5cec88){logger[_0xd4c9('0xf')]('Automation,\x20%s,\x20%s',_0x13c314,_0x5cec88);_0x8ecc5a(_0x5cec88);});});}
\ No newline at end of file
+var _0x1b64=['http','request','then','info','request\x20sent','debug','Automation,\x20%s,\x20%s,\x20%s','stringify','error','code','Automation,\x20%s,\x20%s','message','result','lodash','util','bluebird','../../config/utils','../../config/logger','rpc','../../config/environment','client'];(function(_0x2e7228,_0x38ff03){var _0x587ee9=function(_0x17ace6){while(--_0x17ace6){_0x2e7228['push'](_0x2e7228['shift']());}};_0x587ee9(++_0x38ff03);}(_0x1b64,0x76));var _0x41b6=function(_0x3efed1,_0x317d01){_0x3efed1=_0x3efed1-0x0;var _0x41c061=_0x1b64[_0x3efed1];return _0x41c061;};'use strict';var _=require(_0x41b6('0x0'));var util=require(_0x41b6('0x1'));var moment=require('moment');var BPromise=require(_0x41b6('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x41b6('0x3'));var logger=require(_0x41b6('0x4'))(_0x41b6('0x5'));var config=require(_0x41b6('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x41b6('0x7')][_0x41b6('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x5775c8,_0x56bd45,_0x4bb579){return new BPromise(function(_0x7763c3,_0x3cc6f8){return client[_0x41b6('0x9')](_0x5775c8,_0x4bb579)[_0x41b6('0xa')](function(_0x477e12){logger[_0x41b6('0xb')]('Automation,\x20%s,\x20%s',_0x56bd45,_0x41b6('0xc'));logger[_0x41b6('0xd')](_0x41b6('0xe'),_0x56bd45,_0x41b6('0xc'),JSON[_0x41b6('0xf')](_0x477e12));if(_0x477e12[_0x41b6('0x10')]){if(_0x477e12[_0x41b6('0x10')][_0x41b6('0x11')]===0x1f4){logger[_0x41b6('0x10')](_0x41b6('0x12'),_0x56bd45,_0x477e12[_0x41b6('0x10')][_0x41b6('0x13')]);return _0x3cc6f8(_0x477e12['error'][_0x41b6('0x13')]);}logger[_0x41b6('0x10')](_0x41b6('0x12'),_0x56bd45,_0x477e12[_0x41b6('0x10')]['message']);return _0x7763c3(_0x477e12[_0x41b6('0x10')][_0x41b6('0x13')]);}else{logger[_0x41b6('0xb')](_0x41b6('0x12'),_0x56bd45,_0x41b6('0xc'));_0x7763c3(_0x477e12[_0x41b6('0x14')][_0x41b6('0x13')]);}})['catch'](function(_0x13ce57){logger[_0x41b6('0x10')](_0x41b6('0x12'),_0x56bd45,_0x13ce57);_0x3cc6f8(_0x13ce57);});});}
\ No newline at end of file
index a6ac327..5e610a8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed74=['getActions','post','create','/:id/conditions','addActions','put','update','delete','destroy','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./automation.controller','get','/:id','isAuthenticated','show','getConditions','/:id/actions'];(function(_0x4a4ea1,_0x20caef){var _0x2d358a=function(_0x2219f5){while(--_0x2219f5){_0x4a4ea1['push'](_0x4a4ea1['shift']());}};_0x2d358a(++_0x20caef);}(_0xed74,0x142));var _0x4ed7=function(_0x402718,_0x22529c){_0x402718=_0x402718-0x0;var _0x3e6afb=_0xed74[_0x402718];return _0x3e6afb;};'use strict';var multer=require(_0x4ed7('0x0'));var util=require('util');var path=require(_0x4ed7('0x1'));var timeout=require(_0x4ed7('0x2'));var express=require(_0x4ed7('0x3'));var router=express[_0x4ed7('0x4')]();var auth=require(_0x4ed7('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x4ed7('0x6'));var controller=require(_0x4ed7('0x7'));router[_0x4ed7('0x8')]('/',auth['isAuthenticated'](),controller['index']);router['get'](_0x4ed7('0x9'),auth[_0x4ed7('0xa')](),controller[_0x4ed7('0xb')]);router[_0x4ed7('0x8')]('/:id/conditions',auth[_0x4ed7('0xa')](),controller[_0x4ed7('0xc')]);router['get'](_0x4ed7('0xd'),auth[_0x4ed7('0xa')](),controller[_0x4ed7('0xe')]);router[_0x4ed7('0xf')]('/',auth[_0x4ed7('0xa')](),controller[_0x4ed7('0x10')]);router[_0x4ed7('0xf')](_0x4ed7('0x11'),auth['isAuthenticated'](),controller['addConditions']);router[_0x4ed7('0xf')](_0x4ed7('0xd'),auth['isAuthenticated'](),controller[_0x4ed7('0x12')]);router[_0x4ed7('0x13')](_0x4ed7('0x9'),auth[_0x4ed7('0xa')](),controller[_0x4ed7('0x14')]);router[_0x4ed7('0x15')](_0x4ed7('0x9'),auth[_0x4ed7('0xa')](),controller[_0x4ed7('0x16')]);module[_0x4ed7('0x17')]=router;
\ No newline at end of file
+var _0x7394=['../../components/interaction/service','./automation.controller','isAuthenticated','get','show','/:id/actions','getActions','post','/:id/conditions','addConditions','addActions','put','update','delete','/:id','destroy','exports','multer','util','path','connect-timeout','express','Router'];(function(_0x19e645,_0x1168fd){var _0xa98584=function(_0x1c03e9){while(--_0x1c03e9){_0x19e645['push'](_0x19e645['shift']());}};_0xa98584(++_0x1168fd);}(_0x7394,0x1f4));var _0x4739=function(_0x25f39a,_0x59e6d7){_0x25f39a=_0x25f39a-0x0;var _0x1b85d8=_0x7394[_0x25f39a];return _0x1b85d8;};'use strict';var multer=require(_0x4739('0x0'));var util=require(_0x4739('0x1'));var path=require(_0x4739('0x2'));var timeout=require(_0x4739('0x3'));var express=require(_0x4739('0x4'));var router=express[_0x4739('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x4739('0x6'));var config=require('../../config/environment');var controller=require(_0x4739('0x7'));router['get']('/',auth[_0x4739('0x8')](),controller['index']);router[_0x4739('0x9')]('/:id',auth[_0x4739('0x8')](),controller[_0x4739('0xa')]);router[_0x4739('0x9')]('/:id/conditions',auth[_0x4739('0x8')](),controller['getConditions']);router[_0x4739('0x9')](_0x4739('0xb'),auth[_0x4739('0x8')](),controller[_0x4739('0xc')]);router[_0x4739('0xd')]('/',auth[_0x4739('0x8')](),controller['create']);router['post'](_0x4739('0xe'),auth[_0x4739('0x8')](),controller[_0x4739('0xf')]);router[_0x4739('0xd')]('/:id/actions',auth[_0x4739('0x8')](),controller[_0x4739('0x10')]);router[_0x4739('0x11')]('/:id',auth[_0x4739('0x8')](),controller[_0x4739('0x12')]);router[_0x4739('0x13')](_0x4739('0x14'),auth['isAuthenticated'](),controller[_0x4739('0x15')]);module[_0x4739('0x16')]=router;
\ No newline at end of file
index b32e6c5..2a702b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe739=['UNSIGNED','INTEGER','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\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','07:00-22:00,*,*,*','always','onlyIfOpen','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#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','ASC','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','Cut\x20Digit\x20(min:1,\x20max:15)','STRING','ENUM','ivr','BOOLEAN','Active/Disactive\x20Campaign'];(function(_0x255a34,_0xff4141){var _0x7d0717=function(_0x5a2d62){while(--_0x5a2d62){_0x255a34['push'](_0x255a34['shift']());}};_0x7d0717(++_0xff4141);}(_0xe739,0x1f3));var _0x9e73=function(_0x2c69c9,_0x4283de){_0x2c69c9=_0x2c69c9-0x0;var _0x3246f9=_0xe739[_0x2c69c9];return _0x3246f9;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0x9e73('0x0')],'unique':'name','allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'type':{'type':Sequelize[_0x9e73('0x1')]('ivr'),'allowNull':![],'defaultValue':_0x9e73('0x2')},'description':{'type':Sequelize['STRING']},'active':{'type':Sequelize[_0x9e73('0x3')],'defaultValue':0x0,'comment':_0x9e73('0x4')},'limitCalls':{'type':Sequelize['INTEGER'](0x4)[_0x9e73('0x5')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0xc8},'comment':'Max\x20200\x20calls.'},'dialOriginateCallerIdName':{'type':Sequelize[_0x9e73('0x0')]},'dialOriginateCallerIdNumber':{'type':Sequelize[_0x9e73('0x0')]},'dialOriginateTimeout':{'type':Sequelize[_0x9e73('0x6')](0x3)[_0x9e73('0x5')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0x9e73('0x7')},'dialCongestionMaxRetry':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x9e73('0x8')},'dialCongestionRetryFrequency':{'type':Sequelize['INTEGER'](0x5)[_0x9e73('0x5')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x9e73('0x9')},'dialBusyMaxRetry':{'type':Sequelize[_0x9e73('0x6')](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'#Busy\x20Retry\x20(min:1,\x20max:999)'},'dialBusyRetryFrequency':{'type':Sequelize[_0x9e73('0x6')](0x5)[_0x9e73('0x5')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x9e73('0xa')},'dialNoAnswerMaxRetry':{'type':Sequelize[_0x9e73('0x6')](0x3)[_0x9e73('0x5')],'defaultValue':0x3,'comment':_0x9e73('0xb')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0x9e73('0x6')](0x5)[_0x9e73('0x5')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x9e73('0xc')},'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[_0x9e73('0x0')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0x9e73('0x0')],'defaultValue':_0x9e73('0xd')},'dialCheckDuplicateType':{'type':Sequelize[_0x9e73('0x1')](_0x9e73('0xe'),'never',_0x9e73('0xf')),'defaultValue':_0x9e73('0xe')},'dialAMDActive':{'type':Sequelize[_0x9e73('0x3')],'defaultValue':0x0,'comment':'Active/Disactive\x20AMD'},'dialAMDInitialSilence':{'type':Sequelize[_0x9e73('0x6')](0x9)[_0x9e73('0x5')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0x9e73('0x10')},'dialAMDGreeting':{'type':Sequelize['INTEGER'](0x9)[_0x9e73('0x5')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0x9e73('0x11')},'dialAMDAfterGreetingSilence':{'type':Sequelize['INTEGER'](0x9)[_0x9e73('0x5')],'defaultValue':0x320,'validate':{'min':0x0},'comment':'#AMD\x20After\x20Greeting\x20Silence'},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0x9e73('0x6')](0x9)['UNSIGNED'],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x9e73('0x12')},'dialAMDMinWordLength':{'type':Sequelize['INTEGER'](0x9)[_0x9e73('0x5')],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0x9e73('0x13')},'dialAMDBetweenWordsSilence':{'type':Sequelize['INTEGER'](0x9)[_0x9e73('0x5')],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0x9e73('0x14')},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0x9e73('0x6')](0x9)[_0x9e73('0x5')],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0x9e73('0x15')},'dialAMDSilenceThreshold':{'type':Sequelize[_0x9e73('0x6')](0x5)[_0x9e73('0x5')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0x9e73('0x16')},'dialAMDMaximumWordLength':{'type':Sequelize[_0x9e73('0x6')](0x9)[_0x9e73('0x5')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x9e73('0x17')},'dialOrderByScheduledAt':{'type':Sequelize[_0x9e73('0x1')](_0x9e73('0x18'),_0x9e73('0x19')),'defaultValue':'DESC'},'dialPrefix':{'type':Sequelize['STRING'],'defaultValue':null},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0x9e73('0x6')](0x3)[_0x9e73('0x5')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x9e73('0x1a')},'dialCutDigit':{'type':Sequelize[_0x9e73('0x6')](0x3)[_0x9e73('0x5')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x9e73('0x1b')}};
\ No newline at end of file
+var _0x12f5=['07:00-22:00,*,*,*','always','never','onlyIfOpen','Active/Disactive\x20AMD','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#AMD\x20After\x20Greeting\x20Silence','#AMD\x20Total\x20Analysis\x20Time','#AMD\x20Min\x20Word\x20Length','#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','name','ENUM','ivr','STRING','BOOLEAN','INTEGER','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)','UNSIGNED','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)'];(function(_0x233314,_0x4b442d){var _0x505325=function(_0x4f0a0c){while(--_0x4f0a0c){_0x233314['push'](_0x233314['shift']());}};_0x505325(++_0x4b442d);}(_0x12f5,0x71));var _0x512f=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x12f5[_0x3ab51d];return _0x29a04e;};'use strict';var Sequelize=require(_0x512f('0x0'));module['exports']={'name':{'type':Sequelize['STRING'],'unique':_0x512f('0x1'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'type':{'type':Sequelize[_0x512f('0x2')](_0x512f('0x3')),'allowNull':![],'defaultValue':_0x512f('0x3')},'description':{'type':Sequelize[_0x512f('0x4')]},'active':{'type':Sequelize[_0x512f('0x5')],'defaultValue':0x0,'comment':'Active/Disactive\x20Campaign'},'limitCalls':{'type':Sequelize[_0x512f('0x6')](0x4)['UNSIGNED'],'defaultValue':0x1e,'validate':{'min':0x1,'max':0xc8},'comment':'Max\x20200\x20calls.'},'dialOriginateCallerIdName':{'type':Sequelize[_0x512f('0x4')]},'dialOriginateCallerIdNumber':{'type':Sequelize[_0x512f('0x4')]},'dialOriginateTimeout':{'type':Sequelize[_0x512f('0x6')](0x3)['UNSIGNED'],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0x512f('0x7')},'dialCongestionMaxRetry':{'type':Sequelize[_0x512f('0x6')](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x512f('0x8')},'dialCongestionRetryFrequency':{'type':Sequelize[_0x512f('0x6')](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x512f('0x9')},'dialBusyMaxRetry':{'type':Sequelize[_0x512f('0x6')](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x512f('0xa')},'dialBusyRetryFrequency':{'type':Sequelize['INTEGER'](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x512f('0xb')},'dialNoAnswerMaxRetry':{'type':Sequelize[_0x512f('0x6')](0x3)[_0x512f('0xc')],'defaultValue':0x3,'comment':_0x512f('0xd')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0x512f('0x6')](0x5)[_0x512f('0xc')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialGlobalMaxRetry':{'type':Sequelize[_0x512f('0x6')](0x3)[_0x512f('0xc')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0x512f('0xe')},'dialTimezone':{'type':Sequelize[_0x512f('0x4')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize['STRING'],'defaultValue':_0x512f('0xf')},'dialCheckDuplicateType':{'type':Sequelize[_0x512f('0x2')](_0x512f('0x10'),_0x512f('0x11'),_0x512f('0x12')),'defaultValue':_0x512f('0x10')},'dialAMDActive':{'type':Sequelize[_0x512f('0x5')],'defaultValue':0x0,'comment':_0x512f('0x13')},'dialAMDInitialSilence':{'type':Sequelize['INTEGER'](0x9)[_0x512f('0xc')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0x512f('0x14')},'dialAMDGreeting':{'type':Sequelize['INTEGER'](0x9)[_0x512f('0xc')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0x512f('0x15')},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0x512f('0x6')](0x9)[_0x512f('0xc')],'defaultValue':0x320,'validate':{'min':0x0},'comment':_0x512f('0x16')},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0x512f('0x6')](0x9)[_0x512f('0xc')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x512f('0x17')},'dialAMDMinWordLength':{'type':Sequelize[_0x512f('0x6')](0x9)[_0x512f('0xc')],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0x512f('0x18')},'dialAMDBetweenWordsSilence':{'type':Sequelize[_0x512f('0x6')](0x9)['UNSIGNED'],'defaultValue':0x32,'validate':{'min':0x0},'comment':'#AMD\x20Between\x20Words\x20Silence'},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0x512f('0x6')](0x9)[_0x512f('0xc')],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0x512f('0x19')},'dialAMDSilenceThreshold':{'type':Sequelize[_0x512f('0x6')](0x5)[_0x512f('0xc')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0x512f('0x1a')},'dialAMDMaximumWordLength':{'type':Sequelize[_0x512f('0x6')](0x9)[_0x512f('0xc')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x512f('0x1b')},'dialOrderByScheduledAt':{'type':Sequelize[_0x512f('0x2')](_0x512f('0x1c'),_0x512f('0x1d')),'defaultValue':_0x512f('0x1c')},'dialPrefix':{'type':Sequelize[_0x512f('0x4')],'defaultValue':null},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize['INTEGER'](0x3)[_0x512f('0xc')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x512f('0x1e')},'dialCutDigit':{'type':Sequelize[_0x512f('0x6')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x512f('0x1f')}};
\ No newline at end of file
index f0d87ab..407d5f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa957=['nolimit','order','where','pick','merge','map','VIRTUAL','field','filter','options','findAll','rows','catch','show','params','include','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','name','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','includeAll','omit','updatedAt','getHoppers','CmHopper','sort','CampaignId','findOne','CmHopperHistory','getHopperFinals','CmHopperFinal','getHopperBlacks','CmHopperBlack','getLists','addLists','ids','dialCheckDuplicateType','always','insert','into','cm_hopper','scheduledAt','ContactId','ListId','createdAt','select','phone','NOW()','CmListId','toString','from','cm_contacts','deletedAt\x20IS\x20NULL','phone\x20NOT\x20IN\x20(?)','COALESCE(calleridnum,\x27\x27)','cm_hopper_final','CampaignId\x20=\x20?','COALESCE(phone,\x27\x27)','onlyIfOpen','fromQuery','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','push','sequelize','all','removeLists','getBlackLists','CmList','addBlackLists','spread','cm_hopper_black','removeBlackLists','html-pdf','rimraf','fast-json-patch','request-promise','moment','mustache','util','path','sox','ejs','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','IvrCampaigns','UserProfileResource','error','stack','send','Campaign','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty'];(function(_0x303194,_0x1f20ed){var _0x5916fa=function(_0x4a5fec){while(--_0x4a5fec){_0x303194['push'](_0x303194['shift']());}};_0x5916fa(++_0x1f20ed);}(_0xa957,0x157));var _0x7a95=function(_0x5b6e5d,_0x245c62){_0x5b6e5d=_0x5b6e5d-0x0;var _0x269048=_0xa957[_0x5b6e5d];return _0x269048;};'use strict';var pdf=require(_0x7a95('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x7a95('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x7a95('0x2'));var rp=require(_0x7a95('0x3'));var moment=require(_0x7a95('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x7a95('0x5'));var util=require(_0x7a95('0x6'));var path=require(_0x7a95('0x7'));var sox=require(_0x7a95('0x8'));var csv=require('to-csv');var ejs=require(_0x7a95('0x9'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x7a95('0xa'));var jsforce=require(_0x7a95('0xb'));var deskjs=require(_0x7a95('0xc'));var toCsv=require(_0x7a95('0xd'));var querystring=require(_0x7a95('0xe'));var Papa=require(_0x7a95('0xf'));var Redis=require(_0x7a95('0x10'));var authService=require(_0x7a95('0x11'));var qs=require(_0x7a95('0x12'));var hardwareService=require(_0x7a95('0x13'));var logger=require('../../config/logger')(_0x7a95('0x14'));var utils=require(_0x7a95('0x15'));var config=require(_0x7a95('0x16'));var db=require(_0x7a95('0x17'))['db'];function respondWithStatusCode(_0x4c6528,_0x4bdbd2){_0x4bdbd2=_0x4bdbd2||0xcc;return function(_0x235619){if(_0x235619){return _0x4c6528[_0x7a95('0x18')](_0x4bdbd2);}return _0x4c6528[_0x7a95('0x19')](_0x4bdbd2)[_0x7a95('0x1a')]();};}function respondWithResult(_0xb4d9cb,_0x3706b2){_0x3706b2=_0x3706b2||0xc8;return function(_0x3aa719){if(_0x3aa719){return _0xb4d9cb['status'](_0x3706b2)['json'](_0x3aa719);}};}function respondWithFilteredResult(_0x16033e,_0x15315c){return function(_0x2f5842){if(_0x2f5842){var _0x48c397=_0x2f5842[_0x7a95('0x1b')],_0x4609d5=_0x15315c['offset'],_0x20300d=_0x15315c[_0x7a95('0x1c')]+_0x15315c[_0x7a95('0x1d')],_0x53f848;if(_0x20300d>=_0x48c397){_0x20300d=_0x48c397;_0x53f848=0xc8;}else{_0x53f848=0xce;}_0x16033e[_0x7a95('0x19')](_0x53f848);return _0x16033e[_0x7a95('0x1e')](_0x7a95('0x1f'),_0x4609d5+'-'+_0x20300d+'/'+_0x48c397)['json'](_0x2f5842);}return null;};}function patchUpdates(_0x32ce12){return function(_0x596f32){try{jsonpatch[_0x7a95('0x20')](_0x596f32,_0x32ce12,!![]);}catch(_0x58208d){return BPromise[_0x7a95('0x21')](_0x58208d);}return _0x596f32['save']();};}function saveUpdates(_0x19982f,_0x42bf3a){return function(_0x2c597b){if(_0x2c597b){return _0x2c597b[_0x7a95('0x22')](_0x19982f)[_0x7a95('0x23')](function(_0x25b2fd){return _0x25b2fd;});}return null;};}function removeEntity(_0x2b2c67,_0x16dc9b){return function(_0x10bb90){if(_0x10bb90){return _0x10bb90[_0x7a95('0x24')]()[_0x7a95('0x23')](function(){var _0x44ecd9=_0x10bb90['get']({'plain':!![]});var _0x4032c0=_0x7a95('0x25');return db[_0x7a95('0x26')][_0x7a95('0x24')]({'where':{'type':_0x4032c0,'resourceId':_0x44ecd9['id']}})['then'](function(){return _0x10bb90;});})[_0x7a95('0x23')](function(){_0x2b2c67['status'](0xcc)[_0x7a95('0x1a')]();});}};}function handleEntityNotFound(_0x2058a3,_0x3cd91c){return function(_0x340ef3){if(!_0x340ef3){_0x2058a3['sendStatus'](0x194);}return _0x340ef3;};}function handleError(_0x4debe6,_0x2c0e3d){_0x2c0e3d=_0x2c0e3d||0x1f4;return function(_0x12dbb4){logger[_0x7a95('0x27')](_0x12dbb4[_0x7a95('0x28')]);if(_0x12dbb4['name']){delete _0x12dbb4['name'];}_0x4debe6[_0x7a95('0x19')](_0x2c0e3d)[_0x7a95('0x29')](_0x12dbb4);};}exports['index']=function(_0x3bc79a,_0x16e0b8){var _0x2e14d5={},_0x15489a={},_0x4978e8={'count':0x0,'rows':[]};var _0x2431cf=db[_0x7a95('0x2a')][_0x7a95('0x2b')];_0x15489a[_0x7a95('0x2c')]=_[_0x7a95('0x2d')](_0x2431cf);_0x15489a[_0x7a95('0x2e')]=_[_0x7a95('0x2d')](_0x3bc79a[_0x7a95('0x2e')]);_0x15489a[_0x7a95('0x2f')]=_[_0x7a95('0x30')](_0x15489a[_0x7a95('0x2c')],_0x15489a[_0x7a95('0x2e')]);_0x2e14d5[_0x7a95('0x31')]=_[_0x7a95('0x30')](_0x15489a[_0x7a95('0x2c')],qs[_0x7a95('0x32')](_0x3bc79a[_0x7a95('0x2e')][_0x7a95('0x32')]));_0x2e14d5[_0x7a95('0x31')]=_0x2e14d5[_0x7a95('0x31')][_0x7a95('0x33')]?_0x2e14d5['attributes']:_0x15489a[_0x7a95('0x2c')];if(!_0x3bc79a['query'][_0x7a95('0x34')](_0x7a95('0x35'))){_0x2e14d5[_0x7a95('0x1d')]=qs[_0x7a95('0x1d')](_0x3bc79a['query'][_0x7a95('0x1d')]);_0x2e14d5[_0x7a95('0x1c')]=qs[_0x7a95('0x1c')](_0x3bc79a[_0x7a95('0x2e')]['offset']);}_0x2e14d5[_0x7a95('0x36')]=qs['sort'](_0x3bc79a[_0x7a95('0x2e')]['sort']);_0x2e14d5[_0x7a95('0x37')]=qs[_0x7a95('0x2f')](_[_0x7a95('0x38')](_0x3bc79a[_0x7a95('0x2e')],_0x15489a[_0x7a95('0x2f')]));if(_0x3bc79a[_0x7a95('0x2e')]['filter']){_0x2e14d5[_0x7a95('0x37')]=_[_0x7a95('0x39')](_0x2e14d5[_0x7a95('0x37')],{'$or':_[_0x7a95('0x3a')](_0x2431cf,function(_0x1ad57d){if(_0x1ad57d['type']['key']!==_0x7a95('0x3b')){var _0x1ff2b6={};_0x1ff2b6[_0x1ad57d[_0x7a95('0x3c')]]={'$like':'%'+_0x3bc79a[_0x7a95('0x2e')][_0x7a95('0x3d')]+'%'};return _0x1ff2b6;}})});}_0x2e14d5=_[_0x7a95('0x39')]({},_0x2e14d5,_0x3bc79a[_0x7a95('0x3e')]);var _0x4ac470={'where':_0x2e14d5[_0x7a95('0x37')]};return db[_0x7a95('0x2a')][_0x7a95('0x1b')](_0x4ac470)['then'](function(_0x2b67cb){_0x4978e8['count']=_0x2b67cb;if(_0x3bc79a['query']['includeAll']){_0x2e14d5['include']=[{'all':!![]}];}return db[_0x7a95('0x2a')][_0x7a95('0x3f')](_0x2e14d5);})['then'](function(_0x12dba9){_0x4978e8[_0x7a95('0x40')]=_0x12dba9;return _0x4978e8;})[_0x7a95('0x23')](respondWithFilteredResult(_0x16e0b8,_0x2e14d5))[_0x7a95('0x41')](handleError(_0x16e0b8,null));};exports[_0x7a95('0x42')]=function(_0x2aa7df,_0x39b6ce){var _0x149771={'raw':![],'where':{'id':_0x2aa7df[_0x7a95('0x43')]['id']}},_0x3f515c={};_0x3f515c[_0x7a95('0x2c')]=_['keys'](db[_0x7a95('0x2a')][_0x7a95('0x2b')]);_0x3f515c['query']=_[_0x7a95('0x2d')](_0x2aa7df[_0x7a95('0x2e')]);_0x3f515c['filters']=_[_0x7a95('0x30')](_0x3f515c[_0x7a95('0x2c')],_0x3f515c[_0x7a95('0x2e')]);_0x149771['attributes']=_['intersection'](_0x3f515c[_0x7a95('0x2c')],qs[_0x7a95('0x32')](_0x2aa7df[_0x7a95('0x2e')][_0x7a95('0x32')]));_0x149771['attributes']=_0x149771[_0x7a95('0x31')]['length']?_0x149771['attributes']:_0x3f515c[_0x7a95('0x2c')];if(_0x2aa7df[_0x7a95('0x2e')]['includeAll']){_0x149771[_0x7a95('0x44')]=[{'all':!![]}];}_0x149771=_['merge']({},_0x149771,_0x2aa7df[_0x7a95('0x3e')]);return db['Campaign'][_0x7a95('0x45')](_0x149771)[_0x7a95('0x23')](handleEntityNotFound(_0x39b6ce,null))['then'](respondWithResult(_0x39b6ce,null))[_0x7a95('0x41')](handleError(_0x39b6ce,null));};exports[_0x7a95('0x46')]=function(_0x4ab2b1,_0x2e1091){return db[_0x7a95('0x2a')][_0x7a95('0x46')](_0x4ab2b1[_0x7a95('0x47')],{})[_0x7a95('0x23')](function(_0x433a13){var _0x4843e8=_0x4ab2b1[_0x7a95('0x48')][_0x7a95('0x49')]({'plain':!![]});if(!_0x4843e8)throw new Error(_0x7a95('0x4a'));if(_0x4843e8['role']===_0x7a95('0x48')){var _0x522779=_0x433a13[_0x7a95('0x49')]({'plain':!![]});var _0x425dd8=_0x7a95('0x25');return db[_0x7a95('0x4b')][_0x7a95('0x45')]({'where':{'name':_0x425dd8,'userProfileId':_0x4843e8[_0x7a95('0x4c')]},'raw':!![]})[_0x7a95('0x23')](function(_0x1afcbb){if(_0x1afcbb&&_0x1afcbb['autoAssociation']===0x0){return db[_0x7a95('0x26')][_0x7a95('0x46')]({'name':_0x522779[_0x7a95('0x4d')],'resourceId':_0x522779['id'],'type':_0x1afcbb[_0x7a95('0x4d')],'sectionId':_0x1afcbb['id']},{})[_0x7a95('0x23')](function(){return _0x433a13;});}else{return _0x433a13;}})[_0x7a95('0x41')](function(_0x36e709){logger[_0x7a95('0x27')](_0x7a95('0x4e'),_0x36e709);throw _0x36e709;});}return _0x433a13;})['then'](respondWithResult(_0x2e1091,0xc9))[_0x7a95('0x41')](handleError(_0x2e1091,null));};exports[_0x7a95('0x4f')]=function(_0x533988,_0x22bd22){var _0x26fc80={'raw':![],'where':{'id':_0x533988[_0x7a95('0x43')]['id']}},_0x2105c4={};_0x2105c4[_0x7a95('0x2c')]=_[_0x7a95('0x2d')](db[_0x7a95('0x2a')][_0x7a95('0x2b')]);_0x26fc80[_0x7a95('0x31')]=_[_0x7a95('0x30')](_0x2105c4['model'],qs[_0x7a95('0x32')](_0x533988[_0x7a95('0x2e')][_0x7a95('0x32')]));_0x26fc80[_0x7a95('0x31')]=_0x26fc80['attributes'][_0x7a95('0x33')]?_0x26fc80[_0x7a95('0x31')]:_0x2105c4[_0x7a95('0x2c')];if(_0x533988[_0x7a95('0x2e')][_0x7a95('0x50')]){_0x26fc80[_0x7a95('0x44')]=[{'all':!![]}];}_0x26fc80=_[_0x7a95('0x39')]({},_0x26fc80,_0x533988[_0x7a95('0x3e')]);return db[_0x7a95('0x2a')][_0x7a95('0x45')](_0x26fc80)[_0x7a95('0x23')](handleEntityNotFound(_0x22bd22,null))['then'](function(_0x280594){if(_0x280594){var _0x3cc2de=_0x280594[_0x7a95('0x49')]({'plain':!![]});_0x3cc2de=qs[_0x7a95('0x51')](_0x3cc2de,['id','createdAt',_0x7a95('0x52')]);_0x533988[_0x7a95('0x47')]=_[_0x7a95('0x51')](_0x533988['body'],['id','createdAt',_0x7a95('0x52')]);return db[_0x7a95('0x2a')][_0x7a95('0x46')](_[_0x7a95('0x39')](_0x3cc2de,_0x533988[_0x7a95('0x47')]),{'include':_0x533988[_0x7a95('0x2e')]['includeAll']?[{'all':!![]}]:undefined})[_0x7a95('0x23')](function(_0x4a551f){var _0x18f2b5=_0x533988[_0x7a95('0x48')][_0x7a95('0x49')]({'plain':!![]});if(!_0x18f2b5)throw new Error(_0x7a95('0x4a'));if(_0x18f2b5['role']===_0x7a95('0x48')){var _0x40f92d=_0x4a551f[_0x7a95('0x49')]({'plain':!![]});var _0x4b922a=_0x7a95('0x25');return db['UserProfileSection'][_0x7a95('0x45')]({'where':{'name':_0x4b922a,'userProfileId':_0x18f2b5[_0x7a95('0x4c')]},'raw':!![]})[_0x7a95('0x23')](function(_0x26c723){if(_0x26c723&&_0x26c723['autoAssociation']===0x0){return db[_0x7a95('0x26')][_0x7a95('0x46')]({'name':_0x40f92d[_0x7a95('0x4d')],'resourceId':_0x40f92d['id'],'type':_0x26c723[_0x7a95('0x4d')],'sectionId':_0x26c723['id']},{})['then'](function(){return _0x4a551f;});}else{return _0x4a551f;}})[_0x7a95('0x41')](function(_0x172bb1){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x172bb1);throw _0x172bb1;});}return _0x4a551f;});}})[_0x7a95('0x23')](respondWithResult(_0x22bd22,0xc9))[_0x7a95('0x41')](handleError(_0x22bd22,null));};exports[_0x7a95('0x22')]=function(_0x522503,_0x17c2fe){if(_0x522503[_0x7a95('0x47')]['id']){delete _0x522503[_0x7a95('0x47')]['id'];}return db[_0x7a95('0x2a')]['find']({'where':{'id':_0x522503[_0x7a95('0x43')]['id']}})[_0x7a95('0x23')](handleEntityNotFound(_0x17c2fe,null))['then'](saveUpdates(_0x522503[_0x7a95('0x47')],null))['then'](respondWithResult(_0x17c2fe,null))['catch'](handleError(_0x17c2fe,null));};exports['destroy']=function(_0xbda66e,_0x51db84){return db['Campaign'][_0x7a95('0x45')]({'where':{'id':_0xbda66e[_0x7a95('0x43')]['id']}})[_0x7a95('0x23')](handleEntityNotFound(_0x51db84,null))[_0x7a95('0x23')](removeEntity(_0x51db84,null))[_0x7a95('0x41')](handleError(_0x51db84,null));};exports[_0x7a95('0x53')]=function(_0x1b892e,_0x57823d,_0x5f332a){var _0x4052b6={'raw':!![],'where':{}};var _0x2a71e0={};var _0x53f9fc={'count':0x0,'rows':[]};return db[_0x7a95('0x2a')]['findOne']({'where':{'id':_0x1b892e['params']['id']}})['then'](handleEntityNotFound(_0x57823d,null))[_0x7a95('0x23')](function(_0x50f67a){if(_0x50f67a){_0x2a71e0[_0x7a95('0x2c')]=_[_0x7a95('0x2d')](db[_0x7a95('0x54')][_0x7a95('0x2b')]);_0x2a71e0[_0x7a95('0x2e')]=_[_0x7a95('0x2d')](_0x1b892e['query']);_0x2a71e0['filters']=_[_0x7a95('0x30')](_0x2a71e0['model'],_0x2a71e0['query']);_0x4052b6[_0x7a95('0x31')]=_[_0x7a95('0x30')](_0x2a71e0[_0x7a95('0x2c')],qs['fields'](_0x1b892e['query'][_0x7a95('0x32')]));_0x4052b6[_0x7a95('0x31')]=_0x4052b6[_0x7a95('0x31')][_0x7a95('0x33')]?_0x4052b6[_0x7a95('0x31')]:_0x2a71e0['model'];if(!_0x1b892e[_0x7a95('0x2e')][_0x7a95('0x34')](_0x7a95('0x35'))){_0x4052b6[_0x7a95('0x1d')]=qs[_0x7a95('0x1d')](_0x1b892e[_0x7a95('0x2e')]['limit']);_0x4052b6[_0x7a95('0x1c')]=qs['offset'](_0x1b892e[_0x7a95('0x2e')]['offset']);}_0x4052b6[_0x7a95('0x36')]=qs[_0x7a95('0x55')](_0x1b892e[_0x7a95('0x2e')][_0x7a95('0x55')]);_0x4052b6['where']=qs['filters'](_[_0x7a95('0x38')](_0x1b892e[_0x7a95('0x2e')],_0x2a71e0['filters']));_0x4052b6[_0x7a95('0x37')][_0x7a95('0x56')]=_0x50f67a['id'];if(_0x1b892e[_0x7a95('0x2e')][_0x7a95('0x3d')]){_0x4052b6['where']=_[_0x7a95('0x39')](_0x4052b6['where'],{'$or':_[_0x7a95('0x3a')](_0x4052b6['attributes'],function(_0x4642a8){var _0x3746ce={};_0x3746ce[_0x4642a8]={'$like':'%'+_0x1b892e[_0x7a95('0x2e')]['filter']+'%'};return _0x3746ce;})});}_0x4052b6=_[_0x7a95('0x39')]({},_0x4052b6,_0x1b892e[_0x7a95('0x3e')]);return db[_0x7a95('0x54')][_0x7a95('0x1b')]({'where':_0x4052b6[_0x7a95('0x37')]})['then'](function(_0x2d9531){_0x53f9fc[_0x7a95('0x1b')]=_0x2d9531;if(_0x1b892e[_0x7a95('0x2e')][_0x7a95('0x50')]){_0x4052b6['include']=[{'all':!![]}];}return db[_0x7a95('0x54')][_0x7a95('0x3f')](_0x4052b6);})[_0x7a95('0x23')](function(_0x19a45b){_0x53f9fc['rows']=_0x19a45b;return _0x53f9fc;});}})[_0x7a95('0x23')](respondWithFilteredResult(_0x57823d,_0x4052b6))['catch'](handleError(_0x57823d,null));};exports['getHopperHistories']=function(_0x50af4f,_0x4b223c,_0x33b0cb){var _0x49001a={'raw':!![],'where':{}};var _0x401a11={};var _0x346175={'count':0x0,'rows':[]};return db[_0x7a95('0x2a')][_0x7a95('0x57')]({'where':{'id':_0x50af4f['params']['id']}})[_0x7a95('0x23')](handleEntityNotFound(_0x4b223c,null))['then'](function(_0x18560d){if(_0x18560d){_0x401a11[_0x7a95('0x2c')]=_[_0x7a95('0x2d')](db['CmHopperHistory']['rawAttributes']);_0x401a11[_0x7a95('0x2e')]=_[_0x7a95('0x2d')](_0x50af4f[_0x7a95('0x2e')]);_0x401a11[_0x7a95('0x2f')]=_['intersection'](_0x401a11[_0x7a95('0x2c')],_0x401a11[_0x7a95('0x2e')]);_0x49001a[_0x7a95('0x31')]=_[_0x7a95('0x30')](_0x401a11[_0x7a95('0x2c')],qs['fields'](_0x50af4f[_0x7a95('0x2e')][_0x7a95('0x32')]));_0x49001a[_0x7a95('0x31')]=_0x49001a['attributes'][_0x7a95('0x33')]?_0x49001a['attributes']:_0x401a11[_0x7a95('0x2c')];if(!_0x50af4f[_0x7a95('0x2e')]['hasOwnProperty'](_0x7a95('0x35'))){_0x49001a[_0x7a95('0x1d')]=qs[_0x7a95('0x1d')](_0x50af4f[_0x7a95('0x2e')]['limit']);_0x49001a[_0x7a95('0x1c')]=qs[_0x7a95('0x1c')](_0x50af4f[_0x7a95('0x2e')][_0x7a95('0x1c')]);}_0x49001a[_0x7a95('0x36')]=qs[_0x7a95('0x55')](_0x50af4f[_0x7a95('0x2e')][_0x7a95('0x55')]);_0x49001a[_0x7a95('0x37')]=qs[_0x7a95('0x2f')](_[_0x7a95('0x38')](_0x50af4f[_0x7a95('0x2e')],_0x401a11[_0x7a95('0x2f')]));_0x49001a[_0x7a95('0x37')][_0x7a95('0x56')]=_0x18560d['id'];if(_0x50af4f[_0x7a95('0x2e')][_0x7a95('0x3d')]){_0x49001a['where']=_[_0x7a95('0x39')](_0x49001a[_0x7a95('0x37')],{'$or':_[_0x7a95('0x3a')](_0x49001a[_0x7a95('0x31')],function(_0x5cf294){var _0x2e62d5={};_0x2e62d5[_0x5cf294]={'$like':'%'+_0x50af4f[_0x7a95('0x2e')]['filter']+'%'};return _0x2e62d5;})});}_0x49001a=_[_0x7a95('0x39')]({},_0x49001a,_0x50af4f[_0x7a95('0x3e')]);return db[_0x7a95('0x58')][_0x7a95('0x1b')]({'where':_0x49001a[_0x7a95('0x37')]})[_0x7a95('0x23')](function(_0x4f3354){_0x346175[_0x7a95('0x1b')]=_0x4f3354;if(_0x50af4f[_0x7a95('0x2e')][_0x7a95('0x50')]){_0x49001a[_0x7a95('0x44')]=[{'all':!![]}];}return db[_0x7a95('0x58')][_0x7a95('0x3f')](_0x49001a);})[_0x7a95('0x23')](function(_0x3ae21e){_0x346175['rows']=_0x3ae21e;return _0x346175;});}})[_0x7a95('0x23')](respondWithFilteredResult(_0x4b223c,_0x49001a))[_0x7a95('0x41')](handleError(_0x4b223c,null));};exports[_0x7a95('0x59')]=function(_0x5325e1,_0x48c930,_0x4084a8){var _0x311e6e={'raw':!![],'where':{}};var _0x1841eb={};var _0x306850={'count':0x0,'rows':[]};return db[_0x7a95('0x2a')][_0x7a95('0x57')]({'where':{'id':_0x5325e1[_0x7a95('0x43')]['id']}})['then'](handleEntityNotFound(_0x48c930,null))[_0x7a95('0x23')](function(_0x50fc28){if(_0x50fc28){_0x1841eb[_0x7a95('0x2c')]=_[_0x7a95('0x2d')](db[_0x7a95('0x5a')][_0x7a95('0x2b')]);_0x1841eb['query']=_[_0x7a95('0x2d')](_0x5325e1['query']);_0x1841eb[_0x7a95('0x2f')]=_[_0x7a95('0x30')](_0x1841eb[_0x7a95('0x2c')],_0x1841eb[_0x7a95('0x2e')]);_0x311e6e[_0x7a95('0x31')]=_[_0x7a95('0x30')](_0x1841eb[_0x7a95('0x2c')],qs[_0x7a95('0x32')](_0x5325e1[_0x7a95('0x2e')][_0x7a95('0x32')]));_0x311e6e[_0x7a95('0x31')]=_0x311e6e['attributes'][_0x7a95('0x33')]?_0x311e6e[_0x7a95('0x31')]:_0x1841eb[_0x7a95('0x2c')];if(!_0x5325e1['query'][_0x7a95('0x34')](_0x7a95('0x35'))){_0x311e6e[_0x7a95('0x1d')]=qs[_0x7a95('0x1d')](_0x5325e1['query'][_0x7a95('0x1d')]);_0x311e6e[_0x7a95('0x1c')]=qs[_0x7a95('0x1c')](_0x5325e1[_0x7a95('0x2e')][_0x7a95('0x1c')]);}_0x311e6e[_0x7a95('0x36')]=qs['sort'](_0x5325e1['query'][_0x7a95('0x55')]);_0x311e6e['where']=qs[_0x7a95('0x2f')](_[_0x7a95('0x38')](_0x5325e1['query'],_0x1841eb[_0x7a95('0x2f')]));_0x311e6e[_0x7a95('0x37')][_0x7a95('0x56')]=_0x50fc28['id'];if(_0x5325e1['query']['filter']){_0x311e6e[_0x7a95('0x37')]=_[_0x7a95('0x39')](_0x311e6e[_0x7a95('0x37')],{'$or':_[_0x7a95('0x3a')](_0x311e6e[_0x7a95('0x31')],function(_0x546c0c){var _0x1ce890={};_0x1ce890[_0x546c0c]={'$like':'%'+_0x5325e1[_0x7a95('0x2e')]['filter']+'%'};return _0x1ce890;})});}_0x311e6e=_[_0x7a95('0x39')]({},_0x311e6e,_0x5325e1[_0x7a95('0x3e')]);return db[_0x7a95('0x5a')]['count']({'where':_0x311e6e[_0x7a95('0x37')]})[_0x7a95('0x23')](function(_0x3abd1c){_0x306850[_0x7a95('0x1b')]=_0x3abd1c;if(_0x5325e1[_0x7a95('0x2e')][_0x7a95('0x50')]){_0x311e6e[_0x7a95('0x44')]=[{'all':!![]}];}return db[_0x7a95('0x5a')][_0x7a95('0x3f')](_0x311e6e);})[_0x7a95('0x23')](function(_0x3adada){_0x306850[_0x7a95('0x40')]=_0x3adada;return _0x306850;});}})[_0x7a95('0x23')](respondWithFilteredResult(_0x48c930,_0x311e6e))[_0x7a95('0x41')](handleError(_0x48c930,null));};exports[_0x7a95('0x5b')]=function(_0x5a46f3,_0x12afc3,_0x3fdeab){var _0x1e0e1b={'raw':!![],'where':{}};var _0x540046={};var _0x528bc6={'count':0x0,'rows':[]};return db[_0x7a95('0x2a')][_0x7a95('0x57')]({'where':{'id':_0x5a46f3[_0x7a95('0x43')]['id']}})[_0x7a95('0x23')](handleEntityNotFound(_0x12afc3,null))[_0x7a95('0x23')](function(_0x393d08){if(_0x393d08){_0x540046[_0x7a95('0x2c')]=_['keys'](db[_0x7a95('0x5c')][_0x7a95('0x2b')]);_0x540046[_0x7a95('0x2e')]=_['keys'](_0x5a46f3['query']);_0x540046['filters']=_['intersection'](_0x540046['model'],_0x540046[_0x7a95('0x2e')]);_0x1e0e1b[_0x7a95('0x31')]=_[_0x7a95('0x30')](_0x540046[_0x7a95('0x2c')],qs['fields'](_0x5a46f3[_0x7a95('0x2e')][_0x7a95('0x32')]));_0x1e0e1b[_0x7a95('0x31')]=_0x1e0e1b['attributes']['length']?_0x1e0e1b['attributes']:_0x540046[_0x7a95('0x2c')];if(!_0x5a46f3[_0x7a95('0x2e')]['hasOwnProperty']('nolimit')){_0x1e0e1b[_0x7a95('0x1d')]=qs['limit'](_0x5a46f3['query'][_0x7a95('0x1d')]);_0x1e0e1b[_0x7a95('0x1c')]=qs[_0x7a95('0x1c')](_0x5a46f3[_0x7a95('0x2e')][_0x7a95('0x1c')]);}_0x1e0e1b[_0x7a95('0x36')]=qs[_0x7a95('0x55')](_0x5a46f3[_0x7a95('0x2e')][_0x7a95('0x55')]);_0x1e0e1b['where']=qs['filters'](_[_0x7a95('0x38')](_0x5a46f3[_0x7a95('0x2e')],_0x540046[_0x7a95('0x2f')]));_0x1e0e1b[_0x7a95('0x37')][_0x7a95('0x56')]=_0x393d08['id'];if(_0x5a46f3[_0x7a95('0x2e')]['filter']){_0x1e0e1b[_0x7a95('0x37')]=_[_0x7a95('0x39')](_0x1e0e1b[_0x7a95('0x37')],{'$or':_[_0x7a95('0x3a')](_0x1e0e1b[_0x7a95('0x31')],function(_0x325b3e){var _0x4732db={};_0x4732db[_0x325b3e]={'$like':'%'+_0x5a46f3[_0x7a95('0x2e')]['filter']+'%'};return _0x4732db;})});}_0x1e0e1b=_['merge']({},_0x1e0e1b,_0x5a46f3[_0x7a95('0x3e')]);return db['CmHopperBlack'][_0x7a95('0x1b')]({'where':_0x1e0e1b['where']})[_0x7a95('0x23')](function(_0x41407e){_0x528bc6[_0x7a95('0x1b')]=_0x41407e;if(_0x5a46f3[_0x7a95('0x2e')][_0x7a95('0x50')]){_0x1e0e1b[_0x7a95('0x44')]=[{'all':!![]}];}return db[_0x7a95('0x5c')][_0x7a95('0x3f')](_0x1e0e1b);})['then'](function(_0x1b7c95){_0x528bc6[_0x7a95('0x40')]=_0x1b7c95;return _0x528bc6;});}})[_0x7a95('0x23')](respondWithFilteredResult(_0x12afc3,_0x1e0e1b))[_0x7a95('0x41')](handleError(_0x12afc3,null));};exports[_0x7a95('0x5d')]=function(_0x3c86d8,_0x1d6d61,_0x272923){var _0x17b365={};var _0x290a4e={};var _0x38f9fc;var _0x3e5d86;return db['Campaign'][_0x7a95('0x57')]({'where':{'id':_0x3c86d8['params']['id']}})[_0x7a95('0x23')](handleEntityNotFound(_0x1d6d61,null))['then'](function(_0x6592f0){if(_0x6592f0){_0x38f9fc=_0x6592f0;_0x290a4e[_0x7a95('0x2c')]=_[_0x7a95('0x2d')](db['CmList'][_0x7a95('0x2b')]);_0x290a4e[_0x7a95('0x2e')]=_['keys'](_0x3c86d8['query']);_0x290a4e[_0x7a95('0x2f')]=_[_0x7a95('0x30')](_0x290a4e[_0x7a95('0x2c')],_0x290a4e[_0x7a95('0x2e')]);_0x17b365[_0x7a95('0x31')]=_['intersection'](_0x290a4e[_0x7a95('0x2c')],qs['fields'](_0x3c86d8['query'][_0x7a95('0x32')]));_0x17b365[_0x7a95('0x31')]=_0x17b365[_0x7a95('0x31')][_0x7a95('0x33')]?_0x17b365[_0x7a95('0x31')]:_0x290a4e[_0x7a95('0x2c')];_0x17b365[_0x7a95('0x36')]=qs[_0x7a95('0x55')](_0x3c86d8[_0x7a95('0x2e')][_0x7a95('0x55')]);_0x17b365[_0x7a95('0x37')]=qs[_0x7a95('0x2f')](_[_0x7a95('0x38')](_0x3c86d8[_0x7a95('0x2e')],_0x290a4e['filters']));if(_0x3c86d8[_0x7a95('0x2e')][_0x7a95('0x3d')]){_0x17b365[_0x7a95('0x37')]=_[_0x7a95('0x39')](_0x17b365['where'],{'$or':_[_0x7a95('0x3a')](_0x17b365[_0x7a95('0x31')],function(_0x19d56a){var _0x45d06b={};_0x45d06b[_0x19d56a]={'$like':'%'+_0x3c86d8[_0x7a95('0x2e')][_0x7a95('0x3d')]+'%'};return _0x45d06b;})});}_0x17b365=_[_0x7a95('0x39')]({},_0x17b365,_0x3c86d8['options']);return _0x38f9fc['getLists'](_0x17b365);}})[_0x7a95('0x23')](function(_0x25fe28){if(_0x25fe28){_0x3e5d86=_0x25fe28['length'];if(!_0x3c86d8['query']['hasOwnProperty'](_0x7a95('0x35'))){_0x17b365[_0x7a95('0x1d')]=qs[_0x7a95('0x1d')](_0x3c86d8[_0x7a95('0x2e')][_0x7a95('0x1d')]);_0x17b365['offset']=qs['offset'](_0x3c86d8[_0x7a95('0x2e')]['offset']);}return _0x38f9fc[_0x7a95('0x5d')](_0x17b365);}})[_0x7a95('0x23')](function(_0x3cf888){if(_0x3cf888){return _0x3cf888?{'count':_0x3e5d86,'rows':_0x3cf888}:null;}})[_0x7a95('0x23')](respondWithResult(_0x1d6d61,null))[_0x7a95('0x41')](handleError(_0x1d6d61,null));};exports[_0x7a95('0x5e')]=function(_0x5ed637,_0x2484c3,_0x3a08d2){var _0x379201,_0x3c9627;return db['Campaign']['find']({'where':{'id':_0x5ed637[_0x7a95('0x43')]['id']}})[_0x7a95('0x23')](handleEntityNotFound(_0x2484c3,null))['then'](function(_0xcee615){if(_0xcee615){_0x3c9627=_0xcee615;return _0xcee615[_0x7a95('0x5e')](_0x5ed637[_0x7a95('0x47')][_0x7a95('0x5f')],_['omit'](_0x5ed637[_0x7a95('0x47')],[_0x7a95('0x5f'),'id'])||{});}return null;})['spread'](function(_0x2d2bb5){var _0x465b18;_0x379201=_0x2d2bb5||[];var _0x3ad786=[];if(_0x2d2bb5){for(var _0x3fd3b1=0x0;_0x3fd3b1<_0x2d2bb5[_0x7a95('0x33')];_0x3fd3b1+=0x1){var _0x32c363=_0x2d2bb5[_0x3fd3b1][_0x7a95('0x49')]({'plain':!![]});_0x3c9627[_0x7a95('0x60')]=_0x5ed637['body'][_0x7a95('0x60')]?_0x5ed637[_0x7a95('0x47')][_0x7a95('0x60')]:_0x3c9627['dialCheckDuplicateType'];switch(_0x3c9627[_0x7a95('0x60')]){case _0x7a95('0x61'):_0x465b18=squel[_0x7a95('0x62')]()[_0x7a95('0x63')](_0x7a95('0x64'))['fromQuery'](['phone',_0x7a95('0x65'),_0x7a95('0x66'),_0x7a95('0x67'),_0x7a95('0x56'),_0x7a95('0x68'),_0x7a95('0x52')],squel[_0x7a95('0x69')]()[_0x7a95('0x3c')](_0x7a95('0x6a'),_0x7a95('0x6a'))[_0x7a95('0x3c')](_0x7a95('0x6b'),'scheduledAt')['field']('id','ContactId')[_0x7a95('0x3c')](_0x32c363[_0x7a95('0x6c')][_0x7a95('0x6d')](),_0x7a95('0x67'))['field'](_0x5ed637['params']['id'][_0x7a95('0x6d')](),_0x7a95('0x56'))[_0x7a95('0x3c')](_0x7a95('0x6b'),_0x7a95('0x68'))[_0x7a95('0x3c')](_0x7a95('0x6b'),_0x7a95('0x52'))[_0x7a95('0x6e')](_0x7a95('0x6f'))[_0x7a95('0x37')](_0x7a95('0x70'))[_0x7a95('0x37')]('ListId\x20=\x20?',_0x32c363[_0x7a95('0x6c')][_0x7a95('0x6d')]())[_0x7a95('0x37')]('phone\x20IS\x20NOT\x20NULL')[_0x7a95('0x37')](_0x7a95('0x71'),squel[_0x7a95('0x69')]()[_0x7a95('0x3c')](_0x7a95('0x72'))['from'](_0x7a95('0x73'))['where'](_0x7a95('0x74'),_0x5ed637['params']['id'][_0x7a95('0x6d')]()))[_0x7a95('0x37')](_0x7a95('0x71'),squel[_0x7a95('0x69')]()[_0x7a95('0x3c')](_0x7a95('0x75'))[_0x7a95('0x6e')](_0x7a95('0x64'))[_0x7a95('0x37')](_0x7a95('0x74'),_0x5ed637[_0x7a95('0x43')]['id'][_0x7a95('0x6d')]())))[_0x7a95('0x6d')]();break;case _0x7a95('0x76'):_0x465b18=squel['insert']()[_0x7a95('0x63')](_0x7a95('0x64'))[_0x7a95('0x77')]([_0x7a95('0x6a'),_0x7a95('0x65'),_0x7a95('0x66'),_0x7a95('0x67'),_0x7a95('0x56'),_0x7a95('0x68'),'updatedAt'],squel[_0x7a95('0x69')]()[_0x7a95('0x3c')](_0x7a95('0x6a'),_0x7a95('0x6a'))[_0x7a95('0x3c')](_0x7a95('0x6b'),'scheduledAt')['field']('id',_0x7a95('0x66'))[_0x7a95('0x3c')](_0x32c363['CmListId'][_0x7a95('0x6d')](),_0x7a95('0x67'))[_0x7a95('0x3c')](_0x5ed637[_0x7a95('0x43')]['id'][_0x7a95('0x6d')](),'CampaignId')[_0x7a95('0x3c')](_0x7a95('0x6b'),_0x7a95('0x68'))[_0x7a95('0x3c')](_0x7a95('0x6b'),_0x7a95('0x52'))[_0x7a95('0x6e')](_0x7a95('0x6f'))[_0x7a95('0x37')](_0x7a95('0x70'))['where'](_0x7a95('0x78'),_0x32c363[_0x7a95('0x6c')][_0x7a95('0x6d')]())[_0x7a95('0x37')]('phone\x20IS\x20NOT\x20NULL')[_0x7a95('0x37')](_0x7a95('0x71'),squel[_0x7a95('0x69')]()['field'](_0x7a95('0x75'))[_0x7a95('0x6e')]('cm_hopper')[_0x7a95('0x37')]('CampaignId\x20=\x20?',_0x5ed637['params']['id'][_0x7a95('0x6d')]())))['toString']();break;default:_0x465b18=squel[_0x7a95('0x62')]()[_0x7a95('0x63')](_0x7a95('0x64'))[_0x7a95('0x77')]([_0x7a95('0x6a'),_0x7a95('0x65'),_0x7a95('0x66'),_0x7a95('0x67'),'CampaignId',_0x7a95('0x68'),_0x7a95('0x52')],squel['select']()[_0x7a95('0x3c')]('phone',_0x7a95('0x6a'))['field']('NOW()',_0x7a95('0x65'))[_0x7a95('0x3c')]('id',_0x7a95('0x66'))[_0x7a95('0x3c')](_0x32c363[_0x7a95('0x6c')][_0x7a95('0x6d')](),_0x7a95('0x67'))[_0x7a95('0x3c')](_0x5ed637[_0x7a95('0x43')]['id'][_0x7a95('0x6d')](),_0x7a95('0x56'))[_0x7a95('0x3c')]('NOW()',_0x7a95('0x68'))[_0x7a95('0x3c')](_0x7a95('0x6b'),_0x7a95('0x52'))[_0x7a95('0x6e')](_0x7a95('0x6f'))['where'](_0x7a95('0x70'))['where'](_0x7a95('0x78'),_0x32c363[_0x7a95('0x6c')][_0x7a95('0x6d')]())[_0x7a95('0x37')](_0x7a95('0x79')))[_0x7a95('0x6d')]();}_0x3ad786[_0x7a95('0x7a')](db[_0x7a95('0x7b')][_0x7a95('0x2e')](_0x465b18));}return BPromise[_0x7a95('0x7c')](_0x3ad786);}})['then'](function(){return _0x379201;})[_0x7a95('0x23')](respondWithResult(_0x2484c3,null))[_0x7a95('0x41')](handleError(_0x2484c3,null));};exports[_0x7a95('0x7d')]=function(_0x1228ad,_0x251676,_0x502dcb){return db['Campaign'][_0x7a95('0x45')]({'where':{'id':_0x1228ad[_0x7a95('0x43')]['id']}})['then'](handleEntityNotFound(_0x251676,null))[_0x7a95('0x23')](function(_0x3d2f07){if(_0x3d2f07){return _0x3d2f07[_0x7a95('0x7d')](_0x1228ad[_0x7a95('0x2e')][_0x7a95('0x5f')]);}})[_0x7a95('0x23')](function(_0x9e0e2e){if(_0x9e0e2e){return db[_0x7a95('0x54')][_0x7a95('0x24')]({'where':{'ListId':_0x1228ad['query']['ids'],'CampaignId':_0x1228ad[_0x7a95('0x43')]['id']}})[_0x7a95('0x23')](function(){return _0x9e0e2e;});}})[_0x7a95('0x23')](respondWithStatusCode(_0x251676,null))[_0x7a95('0x41')](handleError(_0x251676,null));};exports[_0x7a95('0x7e')]=function(_0x2ecfb0,_0x3db9b7,_0x316b8d){var _0x3db041={'raw':!![],'where':{}};var _0x5db8ff={};var _0x44f25f={'count':0x0,'rows':[]};return db[_0x7a95('0x2a')][_0x7a95('0x57')]({'where':{'id':_0x2ecfb0[_0x7a95('0x43')]['id']}})[_0x7a95('0x23')](handleEntityNotFound(_0x3db9b7,null))[_0x7a95('0x23')](function(_0xdcf0ff){if(_0xdcf0ff){_0x5db8ff[_0x7a95('0x2c')]=_[_0x7a95('0x2d')](db[_0x7a95('0x7f')][_0x7a95('0x2b')]);_0x5db8ff[_0x7a95('0x2e')]=_[_0x7a95('0x2d')](_0x2ecfb0['query']);_0x5db8ff[_0x7a95('0x2f')]=_[_0x7a95('0x30')](_0x5db8ff[_0x7a95('0x2c')],_0x5db8ff[_0x7a95('0x2e')]);_0x3db041[_0x7a95('0x31')]=_[_0x7a95('0x30')](_0x5db8ff[_0x7a95('0x2c')],qs['fields'](_0x2ecfb0[_0x7a95('0x2e')][_0x7a95('0x32')]));_0x3db041[_0x7a95('0x31')]=_0x3db041[_0x7a95('0x31')][_0x7a95('0x33')]?_0x3db041[_0x7a95('0x31')]:_0x5db8ff[_0x7a95('0x2c')];if(!_0x2ecfb0[_0x7a95('0x2e')][_0x7a95('0x34')]('nolimit')){_0x3db041[_0x7a95('0x1d')]=qs[_0x7a95('0x1d')](_0x2ecfb0['query'][_0x7a95('0x1d')]);_0x3db041[_0x7a95('0x1c')]=qs[_0x7a95('0x1c')](_0x2ecfb0['query'][_0x7a95('0x1c')]);}_0x3db041[_0x7a95('0x36')]=qs[_0x7a95('0x55')](_0x2ecfb0[_0x7a95('0x2e')]['sort']);_0x3db041[_0x7a95('0x37')]=qs[_0x7a95('0x2f')](_[_0x7a95('0x38')](_0x2ecfb0['query'],_0x5db8ff[_0x7a95('0x2f')]));_0x3db041[_0x7a95('0x37')][_0x7a95('0x56')]=_0xdcf0ff['id'];if(_0x2ecfb0[_0x7a95('0x2e')]['filter']){_0x3db041['where']=_[_0x7a95('0x39')](_0x3db041[_0x7a95('0x37')],{'$or':_[_0x7a95('0x3a')](_0x3db041[_0x7a95('0x31')],function(_0x496566){var _0x46d8a7={};_0x46d8a7[_0x496566]={'$like':'%'+_0x2ecfb0['query'][_0x7a95('0x3d')]+'%'};return _0x46d8a7;})});}_0x3db041=_['merge']({},_0x3db041,_0x2ecfb0[_0x7a95('0x3e')]);return db['CmList'][_0x7a95('0x1b')]({'where':_0x3db041[_0x7a95('0x37')]})[_0x7a95('0x23')](function(_0x38174f){_0x44f25f[_0x7a95('0x1b')]=_0x38174f;if(_0x2ecfb0[_0x7a95('0x2e')][_0x7a95('0x50')]){_0x3db041[_0x7a95('0x44')]=[{'all':!![]}];}return db[_0x7a95('0x7f')]['findAll'](_0x3db041);})[_0x7a95('0x23')](function(_0x4061da){_0x44f25f['rows']=_0x4061da;return _0x44f25f;});}})['then'](respondWithFilteredResult(_0x3db9b7,_0x3db041))[_0x7a95('0x41')](handleError(_0x3db9b7,null));};exports[_0x7a95('0x80')]=function(_0x46a9f4,_0xfa52a1,_0x4aa06b){var _0xb67534,_0x27c2a2;return db[_0x7a95('0x2a')][_0x7a95('0x45')]({'where':{'id':_0x46a9f4['params']['id']}})[_0x7a95('0x23')](handleEntityNotFound(_0xfa52a1,null))[_0x7a95('0x23')](function(_0x5b7b6c){if(_0x5b7b6c){_0x27c2a2=_0x5b7b6c;return _0x5b7b6c[_0x7a95('0x80')](_0x46a9f4[_0x7a95('0x47')]['ids'],_[_0x7a95('0x51')](_0x46a9f4[_0x7a95('0x47')],['ids','id'])||{});}return null;})[_0x7a95('0x81')](function(_0x2a88b2){var _0x5116a1;_0xb67534=_0x2a88b2||[];var _0x428e6f=[];if(_0x2a88b2){for(var _0x3d0a66=0x0;_0x3d0a66<_0x2a88b2['length'];_0x3d0a66+=0x1){var _0x5cf40b=_0x2a88b2[_0x3d0a66][_0x7a95('0x49')]({'plain':!![]});_0x5116a1=squel[_0x7a95('0x62')]()[_0x7a95('0x63')](_0x7a95('0x82'))[_0x7a95('0x77')](['phone','ContactId',_0x7a95('0x67'),_0x7a95('0x56'),'createdAt',_0x7a95('0x52')],squel[_0x7a95('0x69')]()[_0x7a95('0x3c')](_0x7a95('0x6a'),_0x7a95('0x6a'))[_0x7a95('0x3c')]('id','ContactId')[_0x7a95('0x3c')](_0x5cf40b[_0x7a95('0x6c')][_0x7a95('0x6d')](),_0x7a95('0x67'))[_0x7a95('0x3c')](_0x46a9f4['params']['id'][_0x7a95('0x6d')](),_0x7a95('0x56'))[_0x7a95('0x3c')](_0x7a95('0x6b'),_0x7a95('0x68'))['field'](_0x7a95('0x6b'),'updatedAt')['from'](_0x7a95('0x6f'))[_0x7a95('0x37')]('deletedAt\x20IS\x20NULL')[_0x7a95('0x37')](_0x7a95('0x78'),_0x5cf40b['CmListId']['toString']())[_0x7a95('0x37')](_0x7a95('0x79')))['toString']();_0x428e6f[_0x7a95('0x7a')](db[_0x7a95('0x7b')]['query'](_0x5116a1));}return BPromise[_0x7a95('0x7c')](_0x428e6f);}})[_0x7a95('0x23')](function(){return _0xb67534;})[_0x7a95('0x23')](respondWithResult(_0xfa52a1,null))[_0x7a95('0x41')](handleError(_0xfa52a1,null));};exports[_0x7a95('0x83')]=function(_0x5b1524,_0x10867b,_0x3e7637){return db['Campaign'][_0x7a95('0x45')]({'where':{'id':_0x5b1524[_0x7a95('0x43')]['id']}})[_0x7a95('0x23')](handleEntityNotFound(_0x10867b,null))[_0x7a95('0x23')](function(_0x7b6218){if(_0x7b6218){return _0x7b6218[_0x7a95('0x83')](_0x5b1524[_0x7a95('0x2e')]['ids']);}})['then'](function(_0x5f463a){if(_0x5f463a){return db[_0x7a95('0x5c')][_0x7a95('0x24')]({'where':{'ListId':_0x5b1524[_0x7a95('0x2e')]['ids'],'CampaignId':_0x5b1524[_0x7a95('0x43')]['id']}})[_0x7a95('0x23')](function(){return _0x5f463a;});}})[_0x7a95('0x23')](respondWithStatusCode(_0x10867b,null))[_0x7a95('0x41')](handleError(_0x10867b,null));};
\ No newline at end of file
+var _0x38c5=['update','then','destroy','get','IvrCampaigns','end','error','stack','send','rawAttributes','keys','query','filters','model','intersection','fields','attributes','hasOwnProperty','sort','filter','where','map','VIRTUAL','field','options','Campaign','includeAll','include','findAll','catch','params','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','autoAssociation','name','clone','length','omit','createdAt','updatedAt','merge','UserProfileSection','userProfileId','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getHoppers','findOne','CmHopper','order','pick','CampaignId','rows','getHopperHistories','CmHopperHistory','getHopperFinals','CmHopperFinal','nolimit','CmHopperBlack','CmList','getLists','addLists','ids','spread','dialCheckDuplicateType','always','insert','into','cm_hopper','fromQuery','ContactId','select','phone','NOW()','scheduledAt','CmListId','toString','ListId','from','cm_contacts','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','COALESCE(calleridnum,\x27\x27)','cm_hopper_final','CampaignId\x20=\x20?','onlyIfOpen','COALESCE(phone,\x27\x27)','sequelize','all','removeLists','addBlackLists','cm_hopper_black','push','removeBlackLists','html-pdf','eml-format','rimraf','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/environment','../../mysqldb','sendStatus','status','count','offset','limit','set','Content-Range','apply','reject'];(function(_0x528e8a,_0xc5b462){var _0x253eba=function(_0x277c5c){while(--_0x277c5c){_0x528e8a['push'](_0x528e8a['shift']());}};_0x253eba(++_0xc5b462);}(_0x38c5,0xe7));var _0x538c=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x38c5[_0x14add3];return _0x4a174f;};'use strict';var pdf=require(_0x538c('0x0'));var emlformat=require(_0x538c('0x1'));var rimraf=require(_0x538c('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x538c('0x3'));var BPromise=require(_0x538c('0x4'));var Mustache=require(_0x538c('0x5'));var util=require(_0x538c('0x6'));var path=require(_0x538c('0x7'));var sox=require(_0x538c('0x8'));var csv=require(_0x538c('0x9'));var ejs=require(_0x538c('0xa'));var fs=require('fs');var _=require(_0x538c('0xb'));var squel=require(_0x538c('0xc'));var crypto=require(_0x538c('0xd'));var jsforce=require(_0x538c('0xe'));var deskjs=require(_0x538c('0xf'));var toCsv=require('to-csv');var querystring=require(_0x538c('0x10'));var Papa=require(_0x538c('0x11'));var Redis=require(_0x538c('0x12'));var authService=require(_0x538c('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x538c('0x14'));var logger=require(_0x538c('0x15'))('api');var utils=require('../../config/utils');var config=require(_0x538c('0x16'));var db=require(_0x538c('0x17'))['db'];function respondWithStatusCode(_0x13dca9,_0x4a68a2){_0x4a68a2=_0x4a68a2||0xcc;return function(_0x4cb82c){if(_0x4cb82c){return _0x13dca9[_0x538c('0x18')](_0x4a68a2);}return _0x13dca9[_0x538c('0x19')](_0x4a68a2)['end']();};}function respondWithResult(_0x30f35c,_0x44a9cf){_0x44a9cf=_0x44a9cf||0xc8;return function(_0x2674bd){if(_0x2674bd){return _0x30f35c[_0x538c('0x19')](_0x44a9cf)['json'](_0x2674bd);}};}function respondWithFilteredResult(_0x4ba9c6,_0x43bc03){return function(_0x48e31f){if(_0x48e31f){var _0x434384=_0x48e31f[_0x538c('0x1a')],_0x3d539a=_0x43bc03['offset'],_0x116d42=_0x43bc03[_0x538c('0x1b')]+_0x43bc03[_0x538c('0x1c')],_0x3c10ff;if(_0x116d42>=_0x434384){_0x116d42=_0x434384;_0x3c10ff=0xc8;}else{_0x3c10ff=0xce;}_0x4ba9c6[_0x538c('0x19')](_0x3c10ff);return _0x4ba9c6[_0x538c('0x1d')](_0x538c('0x1e'),_0x3d539a+'-'+_0x116d42+'/'+_0x434384)['json'](_0x48e31f);}return null;};}function patchUpdates(_0xf70051){return function(_0xdb460){try{jsonpatch[_0x538c('0x1f')](_0xdb460,_0xf70051,!![]);}catch(_0x5ce039){return BPromise[_0x538c('0x20')](_0x5ce039);}return _0xdb460['save']();};}function saveUpdates(_0x4427de,_0x43eff8){return function(_0x291ae4){if(_0x291ae4){return _0x291ae4[_0x538c('0x21')](_0x4427de)[_0x538c('0x22')](function(_0x13182f){return _0x13182f;});}return null;};}function removeEntity(_0x324456,_0x5962c8){return function(_0x4c53e5){if(_0x4c53e5){return _0x4c53e5[_0x538c('0x23')]()['then'](function(){var _0x21364b=_0x4c53e5[_0x538c('0x24')]({'plain':!![]});var _0x193de9=_0x538c('0x25');return db['UserProfileResource'][_0x538c('0x23')]({'where':{'type':_0x193de9,'resourceId':_0x21364b['id']}})[_0x538c('0x22')](function(){return _0x4c53e5;});})[_0x538c('0x22')](function(){_0x324456[_0x538c('0x19')](0xcc)[_0x538c('0x26')]();});}};}function handleEntityNotFound(_0x504826,_0x47ffa0){return function(_0x19ac9a){if(!_0x19ac9a){_0x504826['sendStatus'](0x194);}return _0x19ac9a;};}function handleError(_0x3721de,_0x691f1d){_0x691f1d=_0x691f1d||0x1f4;return function(_0x5f408c){logger[_0x538c('0x27')](_0x5f408c[_0x538c('0x28')]);if(_0x5f408c['name']){delete _0x5f408c['name'];}_0x3721de[_0x538c('0x19')](_0x691f1d)[_0x538c('0x29')](_0x5f408c);};}exports['index']=function(_0x10a7e7,_0x7ddf46){var _0x12dd38={},_0xb4f949={},_0x40df3b={'count':0x0,'rows':[]};var _0x5e33cc=db['Campaign'][_0x538c('0x2a')];_0xb4f949['model']=_[_0x538c('0x2b')](_0x5e33cc);_0xb4f949['query']=_['keys'](_0x10a7e7[_0x538c('0x2c')]);_0xb4f949[_0x538c('0x2d')]=_['intersection'](_0xb4f949[_0x538c('0x2e')],_0xb4f949['query']);_0x12dd38['attributes']=_[_0x538c('0x2f')](_0xb4f949['model'],qs[_0x538c('0x30')](_0x10a7e7[_0x538c('0x2c')][_0x538c('0x30')]));_0x12dd38[_0x538c('0x31')]=_0x12dd38[_0x538c('0x31')]['length']?_0x12dd38[_0x538c('0x31')]:_0xb4f949['model'];if(!_0x10a7e7[_0x538c('0x2c')][_0x538c('0x32')]('nolimit')){_0x12dd38[_0x538c('0x1c')]=qs[_0x538c('0x1c')](_0x10a7e7[_0x538c('0x2c')][_0x538c('0x1c')]);_0x12dd38[_0x538c('0x1b')]=qs[_0x538c('0x1b')](_0x10a7e7[_0x538c('0x2c')]['offset']);}_0x12dd38['order']=qs[_0x538c('0x33')](_0x10a7e7[_0x538c('0x2c')][_0x538c('0x33')]);_0x12dd38['where']=qs['filters'](_['pick'](_0x10a7e7[_0x538c('0x2c')],_0xb4f949[_0x538c('0x2d')]));if(_0x10a7e7['query'][_0x538c('0x34')]){_0x12dd38[_0x538c('0x35')]=_['merge'](_0x12dd38[_0x538c('0x35')],{'$or':_[_0x538c('0x36')](_0x5e33cc,function(_0x518e25){if(_0x518e25['type']['key']!==_0x538c('0x37')){var _0x14ee55={};_0x14ee55[_0x518e25[_0x538c('0x38')]]={'$like':'%'+_0x10a7e7[_0x538c('0x2c')][_0x538c('0x34')]+'%'};return _0x14ee55;}})});}_0x12dd38=_['merge']({},_0x12dd38,_0x10a7e7[_0x538c('0x39')]);var _0x4dcebd={'where':_0x12dd38[_0x538c('0x35')]};return db[_0x538c('0x3a')]['count'](_0x4dcebd)[_0x538c('0x22')](function(_0x2c6d36){_0x40df3b[_0x538c('0x1a')]=_0x2c6d36;if(_0x10a7e7[_0x538c('0x2c')][_0x538c('0x3b')]){_0x12dd38[_0x538c('0x3c')]=[{'all':!![]}];}return db[_0x538c('0x3a')][_0x538c('0x3d')](_0x12dd38);})['then'](function(_0x294319){_0x40df3b['rows']=_0x294319;return _0x40df3b;})[_0x538c('0x22')](respondWithFilteredResult(_0x7ddf46,_0x12dd38))[_0x538c('0x3e')](handleError(_0x7ddf46,null));};exports['show']=function(_0x36f0cb,_0x26c562){var _0x5db46c={'raw':![],'where':{'id':_0x36f0cb[_0x538c('0x3f')]['id']}},_0x4b34a5={};_0x4b34a5['model']=_[_0x538c('0x2b')](db['Campaign']['rawAttributes']);_0x4b34a5[_0x538c('0x2c')]=_[_0x538c('0x2b')](_0x36f0cb[_0x538c('0x2c')]);_0x4b34a5[_0x538c('0x2d')]=_[_0x538c('0x2f')](_0x4b34a5[_0x538c('0x2e')],_0x4b34a5[_0x538c('0x2c')]);_0x5db46c['attributes']=_[_0x538c('0x2f')](_0x4b34a5[_0x538c('0x2e')],qs['fields'](_0x36f0cb['query']['fields']));_0x5db46c[_0x538c('0x31')]=_0x5db46c['attributes']['length']?_0x5db46c[_0x538c('0x31')]:_0x4b34a5[_0x538c('0x2e')];if(_0x36f0cb[_0x538c('0x2c')][_0x538c('0x3b')]){_0x5db46c[_0x538c('0x3c')]=[{'all':!![]}];}_0x5db46c=_['merge']({},_0x5db46c,_0x36f0cb[_0x538c('0x39')]);return db[_0x538c('0x3a')][_0x538c('0x40')](_0x5db46c)[_0x538c('0x22')](handleEntityNotFound(_0x26c562,null))[_0x538c('0x22')](respondWithResult(_0x26c562,null))[_0x538c('0x3e')](handleError(_0x26c562,null));};exports[_0x538c('0x41')]=function(_0x294a92,_0x484320){return db[_0x538c('0x3a')][_0x538c('0x41')](_0x294a92[_0x538c('0x42')],{})[_0x538c('0x22')](function(_0x47fdfb){var _0x1606d6=_0x294a92[_0x538c('0x43')][_0x538c('0x24')]({'plain':!![]});if(!_0x1606d6)throw new Error(_0x538c('0x44'));if(_0x1606d6[_0x538c('0x45')]===_0x538c('0x43')){var _0x1708b7=_0x47fdfb[_0x538c('0x24')]({'plain':!![]});var _0x4c5bb0=_0x538c('0x25');return db['UserProfileSection'][_0x538c('0x40')]({'where':{'name':_0x4c5bb0,'userProfileId':_0x1606d6['userProfileId']},'raw':!![]})[_0x538c('0x22')](function(_0x45db5e){if(_0x45db5e&&_0x45db5e[_0x538c('0x46')]===0x0){return db['UserProfileResource']['create']({'name':_0x1708b7[_0x538c('0x47')],'resourceId':_0x1708b7['id'],'type':_0x45db5e[_0x538c('0x47')],'sectionId':_0x45db5e['id']},{})[_0x538c('0x22')](function(){return _0x47fdfb;});}else{return _0x47fdfb;}})['catch'](function(_0x3a46de){logger[_0x538c('0x27')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x3a46de);throw _0x3a46de;});}return _0x47fdfb;})[_0x538c('0x22')](respondWithResult(_0x484320,0xc9))[_0x538c('0x3e')](handleError(_0x484320,null));};exports[_0x538c('0x48')]=function(_0x3ed027,_0x560d89){var _0x23d106={'raw':![],'where':{'id':_0x3ed027[_0x538c('0x3f')]['id']}},_0x302871={};_0x302871[_0x538c('0x2e')]=_[_0x538c('0x2b')](db[_0x538c('0x3a')]['rawAttributes']);_0x23d106[_0x538c('0x31')]=_['intersection'](_0x302871[_0x538c('0x2e')],qs['fields'](_0x3ed027[_0x538c('0x2c')][_0x538c('0x30')]));_0x23d106['attributes']=_0x23d106[_0x538c('0x31')][_0x538c('0x49')]?_0x23d106[_0x538c('0x31')]:_0x302871[_0x538c('0x2e')];if(_0x3ed027[_0x538c('0x2c')][_0x538c('0x3b')]){_0x23d106[_0x538c('0x3c')]=[{'all':!![]}];}_0x23d106=_['merge']({},_0x23d106,_0x3ed027[_0x538c('0x39')]);return db[_0x538c('0x3a')][_0x538c('0x40')](_0x23d106)[_0x538c('0x22')](handleEntityNotFound(_0x560d89,null))[_0x538c('0x22')](function(_0x35e6af){if(_0x35e6af){var _0x52428b=_0x35e6af[_0x538c('0x24')]({'plain':!![]});_0x52428b=qs[_0x538c('0x4a')](_0x52428b,['id',_0x538c('0x4b'),_0x538c('0x4c')]);_0x3ed027[_0x538c('0x42')]=_['omit'](_0x3ed027[_0x538c('0x42')],['id',_0x538c('0x4b'),'updatedAt']);return db[_0x538c('0x3a')][_0x538c('0x41')](_[_0x538c('0x4d')](_0x52428b,_0x3ed027[_0x538c('0x42')]),{'include':_0x3ed027[_0x538c('0x2c')]['includeAll']?[{'all':!![]}]:undefined})[_0x538c('0x22')](function(_0x21b334){var _0x2c96b4=_0x3ed027[_0x538c('0x43')][_0x538c('0x24')]({'plain':!![]});if(!_0x2c96b4)throw new Error(_0x538c('0x44'));if(_0x2c96b4[_0x538c('0x45')]===_0x538c('0x43')){var _0x2aac78=_0x21b334[_0x538c('0x24')]({'plain':!![]});var _0x30f5b3=_0x538c('0x25');return db[_0x538c('0x4e')]['find']({'where':{'name':_0x30f5b3,'userProfileId':_0x2c96b4[_0x538c('0x4f')]},'raw':!![]})[_0x538c('0x22')](function(_0x4e1441){if(_0x4e1441&&_0x4e1441[_0x538c('0x46')]===0x0){return db[_0x538c('0x50')][_0x538c('0x41')]({'name':_0x2aac78['name'],'resourceId':_0x2aac78['id'],'type':_0x4e1441[_0x538c('0x47')],'sectionId':_0x4e1441['id']},{})[_0x538c('0x22')](function(){return _0x21b334;});}else{return _0x21b334;}})['catch'](function(_0x4fbd05){logger[_0x538c('0x27')](_0x538c('0x51'),_0x4fbd05);throw _0x4fbd05;});}return _0x21b334;});}})['then'](respondWithResult(_0x560d89,0xc9))[_0x538c('0x3e')](handleError(_0x560d89,null));};exports['update']=function(_0x718100,_0x2c6ad6){if(_0x718100[_0x538c('0x42')]['id']){delete _0x718100['body']['id'];}return db[_0x538c('0x3a')][_0x538c('0x40')]({'where':{'id':_0x718100[_0x538c('0x3f')]['id']}})[_0x538c('0x22')](handleEntityNotFound(_0x2c6ad6,null))[_0x538c('0x22')](saveUpdates(_0x718100[_0x538c('0x42')],null))[_0x538c('0x22')](respondWithResult(_0x2c6ad6,null))['catch'](handleError(_0x2c6ad6,null));};exports[_0x538c('0x23')]=function(_0x4a9916,_0x4e81f9){return db[_0x538c('0x3a')][_0x538c('0x40')]({'where':{'id':_0x4a9916[_0x538c('0x3f')]['id']}})['then'](handleEntityNotFound(_0x4e81f9,null))[_0x538c('0x22')](removeEntity(_0x4e81f9,null))[_0x538c('0x3e')](handleError(_0x4e81f9,null));};exports[_0x538c('0x52')]=function(_0x4f2c85,_0x5744ed,_0x426b57){var _0x37fb46={'raw':!![],'where':{}};var _0x404a30={};var _0x5e9845={'count':0x0,'rows':[]};return db[_0x538c('0x3a')][_0x538c('0x53')]({'where':{'id':_0x4f2c85[_0x538c('0x3f')]['id']}})[_0x538c('0x22')](handleEntityNotFound(_0x5744ed,null))[_0x538c('0x22')](function(_0x561639){if(_0x561639){_0x404a30[_0x538c('0x2e')]=_[_0x538c('0x2b')](db[_0x538c('0x54')][_0x538c('0x2a')]);_0x404a30[_0x538c('0x2c')]=_['keys'](_0x4f2c85[_0x538c('0x2c')]);_0x404a30[_0x538c('0x2d')]=_[_0x538c('0x2f')](_0x404a30[_0x538c('0x2e')],_0x404a30[_0x538c('0x2c')]);_0x37fb46[_0x538c('0x31')]=_[_0x538c('0x2f')](_0x404a30[_0x538c('0x2e')],qs['fields'](_0x4f2c85['query']['fields']));_0x37fb46[_0x538c('0x31')]=_0x37fb46[_0x538c('0x31')]['length']?_0x37fb46[_0x538c('0x31')]:_0x404a30[_0x538c('0x2e')];if(!_0x4f2c85[_0x538c('0x2c')][_0x538c('0x32')]('nolimit')){_0x37fb46[_0x538c('0x1c')]=qs[_0x538c('0x1c')](_0x4f2c85[_0x538c('0x2c')]['limit']);_0x37fb46[_0x538c('0x1b')]=qs['offset'](_0x4f2c85[_0x538c('0x2c')][_0x538c('0x1b')]);}_0x37fb46[_0x538c('0x55')]=qs[_0x538c('0x33')](_0x4f2c85[_0x538c('0x2c')][_0x538c('0x33')]);_0x37fb46[_0x538c('0x35')]=qs[_0x538c('0x2d')](_[_0x538c('0x56')](_0x4f2c85[_0x538c('0x2c')],_0x404a30[_0x538c('0x2d')]));_0x37fb46[_0x538c('0x35')][_0x538c('0x57')]=_0x561639['id'];if(_0x4f2c85[_0x538c('0x2c')][_0x538c('0x34')]){_0x37fb46[_0x538c('0x35')]=_[_0x538c('0x4d')](_0x37fb46[_0x538c('0x35')],{'$or':_[_0x538c('0x36')](_0x37fb46[_0x538c('0x31')],function(_0x51b0fa){var _0x5dbd17={};_0x5dbd17[_0x51b0fa]={'$like':'%'+_0x4f2c85[_0x538c('0x2c')]['filter']+'%'};return _0x5dbd17;})});}_0x37fb46=_[_0x538c('0x4d')]({},_0x37fb46,_0x4f2c85['options']);return db['CmHopper'][_0x538c('0x1a')]({'where':_0x37fb46['where']})[_0x538c('0x22')](function(_0x382703){_0x5e9845[_0x538c('0x1a')]=_0x382703;if(_0x4f2c85[_0x538c('0x2c')][_0x538c('0x3b')]){_0x37fb46['include']=[{'all':!![]}];}return db[_0x538c('0x54')]['findAll'](_0x37fb46);})[_0x538c('0x22')](function(_0xd1c1fc){_0x5e9845[_0x538c('0x58')]=_0xd1c1fc;return _0x5e9845;});}})[_0x538c('0x22')](respondWithFilteredResult(_0x5744ed,_0x37fb46))[_0x538c('0x3e')](handleError(_0x5744ed,null));};exports[_0x538c('0x59')]=function(_0x1f8d3c,_0x2dae37,_0x3db0e5){var _0x2ec98b={'raw':!![],'where':{}};var _0x41e533={};var _0x3350c7={'count':0x0,'rows':[]};return db['Campaign'][_0x538c('0x53')]({'where':{'id':_0x1f8d3c[_0x538c('0x3f')]['id']}})[_0x538c('0x22')](handleEntityNotFound(_0x2dae37,null))[_0x538c('0x22')](function(_0x41078d){if(_0x41078d){_0x41e533[_0x538c('0x2e')]=_[_0x538c('0x2b')](db[_0x538c('0x5a')]['rawAttributes']);_0x41e533[_0x538c('0x2c')]=_['keys'](_0x1f8d3c['query']);_0x41e533[_0x538c('0x2d')]=_[_0x538c('0x2f')](_0x41e533['model'],_0x41e533[_0x538c('0x2c')]);_0x2ec98b[_0x538c('0x31')]=_['intersection'](_0x41e533[_0x538c('0x2e')],qs[_0x538c('0x30')](_0x1f8d3c[_0x538c('0x2c')][_0x538c('0x30')]));_0x2ec98b[_0x538c('0x31')]=_0x2ec98b[_0x538c('0x31')][_0x538c('0x49')]?_0x2ec98b[_0x538c('0x31')]:_0x41e533[_0x538c('0x2e')];if(!_0x1f8d3c[_0x538c('0x2c')][_0x538c('0x32')]('nolimit')){_0x2ec98b[_0x538c('0x1c')]=qs[_0x538c('0x1c')](_0x1f8d3c[_0x538c('0x2c')]['limit']);_0x2ec98b[_0x538c('0x1b')]=qs[_0x538c('0x1b')](_0x1f8d3c[_0x538c('0x2c')][_0x538c('0x1b')]);}_0x2ec98b[_0x538c('0x55')]=qs[_0x538c('0x33')](_0x1f8d3c[_0x538c('0x2c')]['sort']);_0x2ec98b[_0x538c('0x35')]=qs[_0x538c('0x2d')](_[_0x538c('0x56')](_0x1f8d3c[_0x538c('0x2c')],_0x41e533[_0x538c('0x2d')]));_0x2ec98b[_0x538c('0x35')]['CampaignId']=_0x41078d['id'];if(_0x1f8d3c['query'][_0x538c('0x34')]){_0x2ec98b[_0x538c('0x35')]=_[_0x538c('0x4d')](_0x2ec98b[_0x538c('0x35')],{'$or':_['map'](_0x2ec98b[_0x538c('0x31')],function(_0x3a0758){var _0x5ed1c3={};_0x5ed1c3[_0x3a0758]={'$like':'%'+_0x1f8d3c[_0x538c('0x2c')]['filter']+'%'};return _0x5ed1c3;})});}_0x2ec98b=_[_0x538c('0x4d')]({},_0x2ec98b,_0x1f8d3c[_0x538c('0x39')]);return db[_0x538c('0x5a')]['count']({'where':_0x2ec98b[_0x538c('0x35')]})[_0x538c('0x22')](function(_0x1726ce){_0x3350c7['count']=_0x1726ce;if(_0x1f8d3c[_0x538c('0x2c')]['includeAll']){_0x2ec98b[_0x538c('0x3c')]=[{'all':!![]}];}return db[_0x538c('0x5a')]['findAll'](_0x2ec98b);})[_0x538c('0x22')](function(_0x118064){_0x3350c7['rows']=_0x118064;return _0x3350c7;});}})[_0x538c('0x22')](respondWithFilteredResult(_0x2dae37,_0x2ec98b))[_0x538c('0x3e')](handleError(_0x2dae37,null));};exports[_0x538c('0x5b')]=function(_0x4990af,_0x2fe3fb,_0x3faabf){var _0x5adc1e={'raw':!![],'where':{}};var _0x126734={};var _0x554bd7={'count':0x0,'rows':[]};return db['Campaign']['findOne']({'where':{'id':_0x4990af[_0x538c('0x3f')]['id']}})[_0x538c('0x22')](handleEntityNotFound(_0x2fe3fb,null))[_0x538c('0x22')](function(_0x55725b){if(_0x55725b){_0x126734[_0x538c('0x2e')]=_[_0x538c('0x2b')](db[_0x538c('0x5c')]['rawAttributes']);_0x126734[_0x538c('0x2c')]=_[_0x538c('0x2b')](_0x4990af[_0x538c('0x2c')]);_0x126734[_0x538c('0x2d')]=_[_0x538c('0x2f')](_0x126734['model'],_0x126734[_0x538c('0x2c')]);_0x5adc1e[_0x538c('0x31')]=_['intersection'](_0x126734[_0x538c('0x2e')],qs['fields'](_0x4990af[_0x538c('0x2c')][_0x538c('0x30')]));_0x5adc1e[_0x538c('0x31')]=_0x5adc1e[_0x538c('0x31')][_0x538c('0x49')]?_0x5adc1e['attributes']:_0x126734[_0x538c('0x2e')];if(!_0x4990af[_0x538c('0x2c')][_0x538c('0x32')](_0x538c('0x5d'))){_0x5adc1e[_0x538c('0x1c')]=qs[_0x538c('0x1c')](_0x4990af[_0x538c('0x2c')]['limit']);_0x5adc1e[_0x538c('0x1b')]=qs[_0x538c('0x1b')](_0x4990af[_0x538c('0x2c')][_0x538c('0x1b')]);}_0x5adc1e[_0x538c('0x55')]=qs['sort'](_0x4990af[_0x538c('0x2c')][_0x538c('0x33')]);_0x5adc1e['where']=qs[_0x538c('0x2d')](_['pick'](_0x4990af[_0x538c('0x2c')],_0x126734[_0x538c('0x2d')]));_0x5adc1e[_0x538c('0x35')][_0x538c('0x57')]=_0x55725b['id'];if(_0x4990af[_0x538c('0x2c')]['filter']){_0x5adc1e[_0x538c('0x35')]=_[_0x538c('0x4d')](_0x5adc1e[_0x538c('0x35')],{'$or':_['map'](_0x5adc1e['attributes'],function(_0x2ada0f){var _0xad4259={};_0xad4259[_0x2ada0f]={'$like':'%'+_0x4990af[_0x538c('0x2c')][_0x538c('0x34')]+'%'};return _0xad4259;})});}_0x5adc1e=_[_0x538c('0x4d')]({},_0x5adc1e,_0x4990af[_0x538c('0x39')]);return db[_0x538c('0x5c')]['count']({'where':_0x5adc1e[_0x538c('0x35')]})[_0x538c('0x22')](function(_0x309951){_0x554bd7['count']=_0x309951;if(_0x4990af[_0x538c('0x2c')][_0x538c('0x3b')]){_0x5adc1e['include']=[{'all':!![]}];}return db[_0x538c('0x5c')]['findAll'](_0x5adc1e);})[_0x538c('0x22')](function(_0xd57fb6){_0x554bd7[_0x538c('0x58')]=_0xd57fb6;return _0x554bd7;});}})[_0x538c('0x22')](respondWithFilteredResult(_0x2fe3fb,_0x5adc1e))[_0x538c('0x3e')](handleError(_0x2fe3fb,null));};exports['getHopperBlacks']=function(_0x11c468,_0x15d70d,_0x3df5d0){var _0x582bd7={'raw':!![],'where':{}};var _0x5850db={};var _0xc23871={'count':0x0,'rows':[]};return db[_0x538c('0x3a')][_0x538c('0x53')]({'where':{'id':_0x11c468['params']['id']}})[_0x538c('0x22')](handleEntityNotFound(_0x15d70d,null))['then'](function(_0x174377){if(_0x174377){_0x5850db['model']=_['keys'](db[_0x538c('0x5e')][_0x538c('0x2a')]);_0x5850db[_0x538c('0x2c')]=_[_0x538c('0x2b')](_0x11c468[_0x538c('0x2c')]);_0x5850db['filters']=_[_0x538c('0x2f')](_0x5850db[_0x538c('0x2e')],_0x5850db['query']);_0x582bd7[_0x538c('0x31')]=_[_0x538c('0x2f')](_0x5850db[_0x538c('0x2e')],qs['fields'](_0x11c468[_0x538c('0x2c')]['fields']));_0x582bd7[_0x538c('0x31')]=_0x582bd7[_0x538c('0x31')][_0x538c('0x49')]?_0x582bd7[_0x538c('0x31')]:_0x5850db[_0x538c('0x2e')];if(!_0x11c468[_0x538c('0x2c')][_0x538c('0x32')](_0x538c('0x5d'))){_0x582bd7[_0x538c('0x1c')]=qs[_0x538c('0x1c')](_0x11c468[_0x538c('0x2c')]['limit']);_0x582bd7[_0x538c('0x1b')]=qs[_0x538c('0x1b')](_0x11c468[_0x538c('0x2c')][_0x538c('0x1b')]);}_0x582bd7[_0x538c('0x55')]=qs[_0x538c('0x33')](_0x11c468[_0x538c('0x2c')][_0x538c('0x33')]);_0x582bd7[_0x538c('0x35')]=qs['filters'](_[_0x538c('0x56')](_0x11c468[_0x538c('0x2c')],_0x5850db[_0x538c('0x2d')]));_0x582bd7[_0x538c('0x35')]['CampaignId']=_0x174377['id'];if(_0x11c468[_0x538c('0x2c')][_0x538c('0x34')]){_0x582bd7[_0x538c('0x35')]=_['merge'](_0x582bd7[_0x538c('0x35')],{'$or':_[_0x538c('0x36')](_0x582bd7[_0x538c('0x31')],function(_0x5467cc){var _0x401c5f={};_0x401c5f[_0x5467cc]={'$like':'%'+_0x11c468[_0x538c('0x2c')][_0x538c('0x34')]+'%'};return _0x401c5f;})});}_0x582bd7=_[_0x538c('0x4d')]({},_0x582bd7,_0x11c468[_0x538c('0x39')]);return db[_0x538c('0x5e')][_0x538c('0x1a')]({'where':_0x582bd7[_0x538c('0x35')]})[_0x538c('0x22')](function(_0xe1b561){_0xc23871[_0x538c('0x1a')]=_0xe1b561;if(_0x11c468[_0x538c('0x2c')][_0x538c('0x3b')]){_0x582bd7[_0x538c('0x3c')]=[{'all':!![]}];}return db[_0x538c('0x5e')]['findAll'](_0x582bd7);})[_0x538c('0x22')](function(_0x3b2972){_0xc23871[_0x538c('0x58')]=_0x3b2972;return _0xc23871;});}})[_0x538c('0x22')](respondWithFilteredResult(_0x15d70d,_0x582bd7))[_0x538c('0x3e')](handleError(_0x15d70d,null));};exports['getLists']=function(_0x3d0da3,_0x1b9e7a,_0xac2dc4){var _0x320210={};var _0x3451e6={};var _0x2ce66f;var _0x2a5df2;return db[_0x538c('0x3a')]['findOne']({'where':{'id':_0x3d0da3[_0x538c('0x3f')]['id']}})[_0x538c('0x22')](handleEntityNotFound(_0x1b9e7a,null))[_0x538c('0x22')](function(_0x375b34){if(_0x375b34){_0x2ce66f=_0x375b34;_0x3451e6[_0x538c('0x2e')]=_['keys'](db[_0x538c('0x5f')]['rawAttributes']);_0x3451e6[_0x538c('0x2c')]=_[_0x538c('0x2b')](_0x3d0da3[_0x538c('0x2c')]);_0x3451e6[_0x538c('0x2d')]=_[_0x538c('0x2f')](_0x3451e6['model'],_0x3451e6['query']);_0x320210[_0x538c('0x31')]=_[_0x538c('0x2f')](_0x3451e6[_0x538c('0x2e')],qs[_0x538c('0x30')](_0x3d0da3[_0x538c('0x2c')][_0x538c('0x30')]));_0x320210['attributes']=_0x320210[_0x538c('0x31')]['length']?_0x320210['attributes']:_0x3451e6['model'];_0x320210[_0x538c('0x55')]=qs[_0x538c('0x33')](_0x3d0da3['query'][_0x538c('0x33')]);_0x320210['where']=qs[_0x538c('0x2d')](_['pick'](_0x3d0da3[_0x538c('0x2c')],_0x3451e6[_0x538c('0x2d')]));if(_0x3d0da3[_0x538c('0x2c')][_0x538c('0x34')]){_0x320210[_0x538c('0x35')]=_[_0x538c('0x4d')](_0x320210['where'],{'$or':_[_0x538c('0x36')](_0x320210['attributes'],function(_0x3593ee){var _0x2c9e64={};_0x2c9e64[_0x3593ee]={'$like':'%'+_0x3d0da3[_0x538c('0x2c')][_0x538c('0x34')]+'%'};return _0x2c9e64;})});}_0x320210=_[_0x538c('0x4d')]({},_0x320210,_0x3d0da3['options']);return _0x2ce66f[_0x538c('0x60')](_0x320210);}})[_0x538c('0x22')](function(_0x4e5c55){if(_0x4e5c55){_0x2a5df2=_0x4e5c55[_0x538c('0x49')];if(!_0x3d0da3[_0x538c('0x2c')][_0x538c('0x32')]('nolimit')){_0x320210[_0x538c('0x1c')]=qs[_0x538c('0x1c')](_0x3d0da3['query'][_0x538c('0x1c')]);_0x320210[_0x538c('0x1b')]=qs[_0x538c('0x1b')](_0x3d0da3[_0x538c('0x2c')]['offset']);}return _0x2ce66f[_0x538c('0x60')](_0x320210);}})[_0x538c('0x22')](function(_0x173cc9){if(_0x173cc9){return _0x173cc9?{'count':_0x2a5df2,'rows':_0x173cc9}:null;}})['then'](respondWithResult(_0x1b9e7a,null))['catch'](handleError(_0x1b9e7a,null));};exports['addLists']=function(_0x5ec2d9,_0x4bb1f1,_0x400832){var _0x534172,_0x31fc60;return db[_0x538c('0x3a')][_0x538c('0x40')]({'where':{'id':_0x5ec2d9[_0x538c('0x3f')]['id']}})[_0x538c('0x22')](handleEntityNotFound(_0x4bb1f1,null))[_0x538c('0x22')](function(_0xeb95d9){if(_0xeb95d9){_0x31fc60=_0xeb95d9;return _0xeb95d9[_0x538c('0x61')](_0x5ec2d9['body'][_0x538c('0x62')],_[_0x538c('0x4a')](_0x5ec2d9[_0x538c('0x42')],[_0x538c('0x62'),'id'])||{});}return null;})[_0x538c('0x63')](function(_0x1775fc){var _0x198af5;_0x534172=_0x1775fc||[];var _0xe5c971=[];if(_0x1775fc){for(var _0x252cf5=0x0;_0x252cf5<_0x1775fc[_0x538c('0x49')];_0x252cf5+=0x1){var _0x5c1485=_0x1775fc[_0x252cf5][_0x538c('0x24')]({'plain':!![]});_0x31fc60['dialCheckDuplicateType']=_0x5ec2d9[_0x538c('0x42')]['dialCheckDuplicateType']?_0x5ec2d9[_0x538c('0x42')]['dialCheckDuplicateType']:_0x31fc60[_0x538c('0x64')];switch(_0x31fc60[_0x538c('0x64')]){case _0x538c('0x65'):_0x198af5=squel[_0x538c('0x66')]()[_0x538c('0x67')](_0x538c('0x68'))[_0x538c('0x69')](['phone','scheduledAt',_0x538c('0x6a'),'ListId',_0x538c('0x57'),_0x538c('0x4b'),_0x538c('0x4c')],squel[_0x538c('0x6b')]()[_0x538c('0x38')](_0x538c('0x6c'),_0x538c('0x6c'))['field'](_0x538c('0x6d'),_0x538c('0x6e'))[_0x538c('0x38')]('id',_0x538c('0x6a'))[_0x538c('0x38')](_0x5c1485[_0x538c('0x6f')][_0x538c('0x70')](),_0x538c('0x71'))[_0x538c('0x38')](_0x5ec2d9[_0x538c('0x3f')]['id'][_0x538c('0x70')](),'CampaignId')[_0x538c('0x38')](_0x538c('0x6d'),_0x538c('0x4b'))[_0x538c('0x38')](_0x538c('0x6d'),_0x538c('0x4c'))[_0x538c('0x72')](_0x538c('0x73'))[_0x538c('0x35')](_0x538c('0x74'))[_0x538c('0x35')](_0x538c('0x75'),_0x5c1485[_0x538c('0x6f')][_0x538c('0x70')]())[_0x538c('0x35')](_0x538c('0x76'))[_0x538c('0x35')](_0x538c('0x77'),squel[_0x538c('0x6b')]()[_0x538c('0x38')](_0x538c('0x78'))['from'](_0x538c('0x79'))[_0x538c('0x35')](_0x538c('0x7a'),_0x5ec2d9['params']['id']['toString']()))[_0x538c('0x35')](_0x538c('0x77'),squel['select']()['field']('COALESCE(phone,\x27\x27)')['from'](_0x538c('0x68'))[_0x538c('0x35')](_0x538c('0x7a'),_0x5ec2d9[_0x538c('0x3f')]['id'][_0x538c('0x70')]())))[_0x538c('0x70')]();break;case _0x538c('0x7b'):_0x198af5=squel[_0x538c('0x66')]()[_0x538c('0x67')](_0x538c('0x68'))[_0x538c('0x69')]([_0x538c('0x6c'),_0x538c('0x6e'),'ContactId','ListId','CampaignId',_0x538c('0x4b'),_0x538c('0x4c')],squel[_0x538c('0x6b')]()[_0x538c('0x38')]('phone',_0x538c('0x6c'))[_0x538c('0x38')](_0x538c('0x6d'),_0x538c('0x6e'))[_0x538c('0x38')]('id',_0x538c('0x6a'))[_0x538c('0x38')](_0x5c1485[_0x538c('0x6f')]['toString'](),_0x538c('0x71'))['field'](_0x5ec2d9['params']['id'][_0x538c('0x70')](),_0x538c('0x57'))[_0x538c('0x38')]('NOW()',_0x538c('0x4b'))['field'](_0x538c('0x6d'),_0x538c('0x4c'))['from'](_0x538c('0x73'))[_0x538c('0x35')](_0x538c('0x74'))[_0x538c('0x35')](_0x538c('0x75'),_0x5c1485[_0x538c('0x6f')]['toString']())[_0x538c('0x35')](_0x538c('0x76'))['where']('phone\x20NOT\x20IN\x20(?)',squel[_0x538c('0x6b')]()[_0x538c('0x38')](_0x538c('0x7c'))['from'](_0x538c('0x68'))[_0x538c('0x35')](_0x538c('0x7a'),_0x5ec2d9[_0x538c('0x3f')]['id'][_0x538c('0x70')]())))[_0x538c('0x70')]();break;default:_0x198af5=squel[_0x538c('0x66')]()[_0x538c('0x67')](_0x538c('0x68'))['fromQuery']([_0x538c('0x6c'),'scheduledAt',_0x538c('0x6a'),_0x538c('0x71'),_0x538c('0x57'),'createdAt','updatedAt'],squel['select']()[_0x538c('0x38')](_0x538c('0x6c'),_0x538c('0x6c'))['field'](_0x538c('0x6d'),_0x538c('0x6e'))[_0x538c('0x38')]('id',_0x538c('0x6a'))[_0x538c('0x38')](_0x5c1485[_0x538c('0x6f')][_0x538c('0x70')](),'ListId')[_0x538c('0x38')](_0x5ec2d9[_0x538c('0x3f')]['id'][_0x538c('0x70')](),_0x538c('0x57'))[_0x538c('0x38')]('NOW()','createdAt')[_0x538c('0x38')](_0x538c('0x6d'),_0x538c('0x4c'))[_0x538c('0x72')]('cm_contacts')[_0x538c('0x35')](_0x538c('0x74'))['where'](_0x538c('0x75'),_0x5c1485[_0x538c('0x6f')][_0x538c('0x70')]())[_0x538c('0x35')]('phone\x20IS\x20NOT\x20NULL'))[_0x538c('0x70')]();}_0xe5c971['push'](db[_0x538c('0x7d')][_0x538c('0x2c')](_0x198af5));}return BPromise[_0x538c('0x7e')](_0xe5c971);}})[_0x538c('0x22')](function(){return _0x534172;})[_0x538c('0x22')](respondWithResult(_0x4bb1f1,null))[_0x538c('0x3e')](handleError(_0x4bb1f1,null));};exports[_0x538c('0x7f')]=function(_0x58a407,_0x4b5b5c,_0x4a9111){return db[_0x538c('0x3a')][_0x538c('0x40')]({'where':{'id':_0x58a407['params']['id']}})[_0x538c('0x22')](handleEntityNotFound(_0x4b5b5c,null))['then'](function(_0x2e7091){if(_0x2e7091){return _0x2e7091['removeLists'](_0x58a407[_0x538c('0x2c')][_0x538c('0x62')]);}})[_0x538c('0x22')](function(_0x3f6267){if(_0x3f6267){return db[_0x538c('0x54')]['destroy']({'where':{'ListId':_0x58a407[_0x538c('0x2c')][_0x538c('0x62')],'CampaignId':_0x58a407[_0x538c('0x3f')]['id']}})[_0x538c('0x22')](function(){return _0x3f6267;});}})[_0x538c('0x22')](respondWithStatusCode(_0x4b5b5c,null))[_0x538c('0x3e')](handleError(_0x4b5b5c,null));};exports['getBlackLists']=function(_0x4b433e,_0x5d07ec,_0x2f731c){var _0x1b97ba={'raw':!![],'where':{}};var _0x49c82a={};var _0x35646f={'count':0x0,'rows':[]};return db[_0x538c('0x3a')]['findOne']({'where':{'id':_0x4b433e['params']['id']}})[_0x538c('0x22')](handleEntityNotFound(_0x5d07ec,null))[_0x538c('0x22')](function(_0x307eae){if(_0x307eae){_0x49c82a['model']=_[_0x538c('0x2b')](db['CmList']['rawAttributes']);_0x49c82a['query']=_[_0x538c('0x2b')](_0x4b433e['query']);_0x49c82a[_0x538c('0x2d')]=_[_0x538c('0x2f')](_0x49c82a[_0x538c('0x2e')],_0x49c82a[_0x538c('0x2c')]);_0x1b97ba[_0x538c('0x31')]=_[_0x538c('0x2f')](_0x49c82a[_0x538c('0x2e')],qs[_0x538c('0x30')](_0x4b433e[_0x538c('0x2c')][_0x538c('0x30')]));_0x1b97ba[_0x538c('0x31')]=_0x1b97ba[_0x538c('0x31')][_0x538c('0x49')]?_0x1b97ba[_0x538c('0x31')]:_0x49c82a[_0x538c('0x2e')];if(!_0x4b433e[_0x538c('0x2c')][_0x538c('0x32')](_0x538c('0x5d'))){_0x1b97ba['limit']=qs['limit'](_0x4b433e[_0x538c('0x2c')][_0x538c('0x1c')]);_0x1b97ba[_0x538c('0x1b')]=qs[_0x538c('0x1b')](_0x4b433e[_0x538c('0x2c')][_0x538c('0x1b')]);}_0x1b97ba[_0x538c('0x55')]=qs[_0x538c('0x33')](_0x4b433e[_0x538c('0x2c')][_0x538c('0x33')]);_0x1b97ba[_0x538c('0x35')]=qs[_0x538c('0x2d')](_[_0x538c('0x56')](_0x4b433e[_0x538c('0x2c')],_0x49c82a['filters']));_0x1b97ba[_0x538c('0x35')][_0x538c('0x57')]=_0x307eae['id'];if(_0x4b433e[_0x538c('0x2c')]['filter']){_0x1b97ba[_0x538c('0x35')]=_[_0x538c('0x4d')](_0x1b97ba[_0x538c('0x35')],{'$or':_[_0x538c('0x36')](_0x1b97ba[_0x538c('0x31')],function(_0x104ca0){var _0x54637d={};_0x54637d[_0x104ca0]={'$like':'%'+_0x4b433e[_0x538c('0x2c')][_0x538c('0x34')]+'%'};return _0x54637d;})});}_0x1b97ba=_['merge']({},_0x1b97ba,_0x4b433e['options']);return db[_0x538c('0x5f')][_0x538c('0x1a')]({'where':_0x1b97ba[_0x538c('0x35')]})[_0x538c('0x22')](function(_0x429ac2){_0x35646f[_0x538c('0x1a')]=_0x429ac2;if(_0x4b433e[_0x538c('0x2c')][_0x538c('0x3b')]){_0x1b97ba['include']=[{'all':!![]}];}return db[_0x538c('0x5f')]['findAll'](_0x1b97ba);})[_0x538c('0x22')](function(_0x1683a8){_0x35646f[_0x538c('0x58')]=_0x1683a8;return _0x35646f;});}})[_0x538c('0x22')](respondWithFilteredResult(_0x5d07ec,_0x1b97ba))[_0x538c('0x3e')](handleError(_0x5d07ec,null));};exports[_0x538c('0x80')]=function(_0x3062fa,_0x1344be,_0x537a92){var _0x1cf03b,_0x48b4dd;return db[_0x538c('0x3a')]['find']({'where':{'id':_0x3062fa[_0x538c('0x3f')]['id']}})[_0x538c('0x22')](handleEntityNotFound(_0x1344be,null))[_0x538c('0x22')](function(_0x380008){if(_0x380008){_0x48b4dd=_0x380008;return _0x380008[_0x538c('0x80')](_0x3062fa[_0x538c('0x42')][_0x538c('0x62')],_[_0x538c('0x4a')](_0x3062fa[_0x538c('0x42')],[_0x538c('0x62'),'id'])||{});}return null;})[_0x538c('0x63')](function(_0x356d47){var _0x308614;_0x1cf03b=_0x356d47||[];var _0x1be668=[];if(_0x356d47){for(var _0x370c4d=0x0;_0x370c4d<_0x356d47[_0x538c('0x49')];_0x370c4d+=0x1){var _0x365e36=_0x356d47[_0x370c4d][_0x538c('0x24')]({'plain':!![]});_0x308614=squel[_0x538c('0x66')]()[_0x538c('0x67')](_0x538c('0x81'))['fromQuery']([_0x538c('0x6c'),_0x538c('0x6a'),_0x538c('0x71'),_0x538c('0x57'),_0x538c('0x4b'),_0x538c('0x4c')],squel[_0x538c('0x6b')]()['field']('phone',_0x538c('0x6c'))[_0x538c('0x38')]('id',_0x538c('0x6a'))['field'](_0x365e36[_0x538c('0x6f')]['toString'](),_0x538c('0x71'))[_0x538c('0x38')](_0x3062fa[_0x538c('0x3f')]['id'][_0x538c('0x70')](),'CampaignId')[_0x538c('0x38')](_0x538c('0x6d'),_0x538c('0x4b'))[_0x538c('0x38')](_0x538c('0x6d'),_0x538c('0x4c'))[_0x538c('0x72')](_0x538c('0x73'))[_0x538c('0x35')]('deletedAt\x20IS\x20NULL')[_0x538c('0x35')](_0x538c('0x75'),_0x365e36[_0x538c('0x6f')][_0x538c('0x70')]())['where'](_0x538c('0x76')))['toString']();_0x1be668[_0x538c('0x82')](db[_0x538c('0x7d')][_0x538c('0x2c')](_0x308614));}return BPromise[_0x538c('0x7e')](_0x1be668);}})[_0x538c('0x22')](function(){return _0x1cf03b;})[_0x538c('0x22')](respondWithResult(_0x1344be,null))[_0x538c('0x3e')](handleError(_0x1344be,null));};exports[_0x538c('0x83')]=function(_0x186317,_0x46541d,_0x19f2a3){return db[_0x538c('0x3a')][_0x538c('0x40')]({'where':{'id':_0x186317[_0x538c('0x3f')]['id']}})['then'](handleEntityNotFound(_0x46541d,null))[_0x538c('0x22')](function(_0x236bf1){if(_0x236bf1){return _0x236bf1[_0x538c('0x83')](_0x186317[_0x538c('0x2c')][_0x538c('0x62')]);}})[_0x538c('0x22')](function(_0x52ee59){if(_0x52ee59){return db['CmHopperBlack']['destroy']({'where':{'ListId':_0x186317[_0x538c('0x2c')][_0x538c('0x62')],'CampaignId':_0x186317['params']['id']}})['then'](function(){return _0x52ee59;});}})['then'](respondWithStatusCode(_0x46541d,null))[_0x538c('0x3e')](handleError(_0x46541d,null));};
\ No newline at end of file
index 85b20a6..42a6efd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x41aa=['api','moment','request-promise','path','rimraf','../../config/environment','./campaign.attributes','exports','Campaign','campaigns','lodash','../../config/logger'];(function(_0x21d0c3,_0x16c71c){var _0x4df18e=function(_0x576bfe){while(--_0x576bfe){_0x21d0c3['push'](_0x21d0c3['shift']());}};_0x4df18e(++_0x16c71c);}(_0x41aa,0xb2));var _0xa41a=function(_0x5b6cf1,_0x32fdcd){_0x5b6cf1=_0x5b6cf1-0x0;var _0x46278c=_0x41aa[_0x5b6cf1];return _0x46278c;};'use strict';var _=require(_0xa41a('0x0'));var util=require('util');var logger=require(_0xa41a('0x1'))(_0xa41a('0x2'));var moment=require(_0xa41a('0x3'));var BPromise=require('bluebird');var rp=require(_0xa41a('0x4'));var fs=require('fs');var path=require(_0xa41a('0x5'));var rimraf=require(_0xa41a('0x6'));var config=require(_0xa41a('0x7'));var attributes=require(_0xa41a('0x8'));module[_0xa41a('0x9')]=function(_0x5333b8,_0x21bf20){return _0x5333b8['define'](_0xa41a('0xa'),attributes,{'tableName':_0xa41a('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1d06=['../../config/environment','define','Campaign','lodash','../../config/logger','api','bluebird','rimraf'];(function(_0x4cc77f,_0x2b0388){var _0x22a282=function(_0x301b7b){while(--_0x301b7b){_0x4cc77f['push'](_0x4cc77f['shift']());}};_0x22a282(++_0x2b0388);}(_0x1d06,0x19b));var _0x61d0=function(_0x4d613c,_0x55f220){_0x4d613c=_0x4d613c-0x0;var _0x301fe3=_0x1d06[_0x4d613c];return _0x301fe3;};'use strict';var _=require(_0x61d0('0x0'));var util=require('util');var logger=require(_0x61d0('0x1'))(_0x61d0('0x2'));var moment=require('moment');var BPromise=require(_0x61d0('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x61d0('0x4'));var config=require(_0x61d0('0x5'));var attributes=require('./campaign.attributes');module['exports']=function(_0x1a06bd,_0x26a24c){return _0x1a06bd[_0x61d0('0x6')](_0x61d0('0x7'),attributes,{'tableName':'campaigns','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 5a89f33..b31b54a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x222a=['Campaign,\x20%s,\x20%s,\x20%s','stringify','error','message','request\x20sent','result','GetCampaign','findAll','options','raw','include','map','model','attributes','then','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','request','info','Campaign,\x20%s,\x20%s','debug'];(function(_0x102a3b,_0x2d4c7f){var _0x25391c=function(_0x1a81a1){while(--_0x1a81a1){_0x102a3b['push'](_0x102a3b['shift']());}};_0x25391c(++_0x2d4c7f);}(_0x222a,0x67));var _0xa222=function(_0x302379,_0x3cf459){_0x302379=_0x302379-0x0;var _0x44716e=_0x222a[_0x302379];return _0x44716e;};'use strict';var _=require(_0xa222('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xa222('0x1'));var rs=require(_0xa222('0x2'));var fs=require('fs');var Redis=require(_0xa222('0x3'));var db=require(_0xa222('0x4'))['db'];var utils=require(_0xa222('0x5'));var logger=require(_0xa222('0x6'))(_0xa222('0x7'));var config=require('../../config/environment');var jayson=require(_0xa222('0x8'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x1359a6,_0x3a35a2,_0x45b828){return new BPromise(function(_0x3b1298,_0x1446ec){return client[_0xa222('0x9')](_0x1359a6,_0x45b828)['then'](function(_0x1cd19d){logger[_0xa222('0xa')](_0xa222('0xb'),_0x3a35a2,'request\x20sent');logger[_0xa222('0xc')](_0xa222('0xd'),_0x3a35a2,'request\x20sent',JSON[_0xa222('0xe')](_0x1cd19d));if(_0x1cd19d[_0xa222('0xf')]){if(_0x1cd19d[_0xa222('0xf')]['code']===0x1f4){logger[_0xa222('0xf')](_0xa222('0xb'),_0x3a35a2,_0x1cd19d[_0xa222('0xf')][_0xa222('0x10')]);return _0x1446ec(_0x1cd19d[_0xa222('0xf')][_0xa222('0x10')]);}logger[_0xa222('0xf')]('Campaign,\x20%s,\x20%s',_0x3a35a2,_0x1cd19d['error']['message']);return _0x3b1298(_0x1cd19d[_0xa222('0xf')][_0xa222('0x10')]);}else{logger[_0xa222('0xa')](_0xa222('0xb'),_0x3a35a2,_0xa222('0x11'));_0x3b1298(_0x1cd19d[_0xa222('0x12')]['message']);}})['catch'](function(_0x39eafa){logger[_0xa222('0xf')](_0xa222('0xb'),_0x3a35a2,_0x39eafa);_0x1446ec(_0x39eafa);});});}exports[_0xa222('0x13')]=function(_0x10c40b){var _0x26f413=this;return new Promise(function(_0x3f2bab,_0x50c9c9){return db['Campaign'][_0xa222('0x14')]({'raw':_0x10c40b[_0xa222('0x15')]?_0x10c40b[_0xa222('0x15')][_0xa222('0x16')]===undefined?!![]:![]:!![],'where':_0x10c40b['options']?_0x10c40b['options']['where']||null:null,'attributes':_0x10c40b['options']?_0x10c40b['options']['attributes']||null:null,'limit':_0x10c40b['options']?_0x10c40b[_0xa222('0x15')]['limit']||null:null,'include':_0x10c40b[_0xa222('0x15')]?_0x10c40b['options'][_0xa222('0x17')]?_[_0xa222('0x18')](_0x10c40b[_0xa222('0x15')][_0xa222('0x17')],function(_0x24edb0){return{'model':db[_0x24edb0[_0xa222('0x19')]],'as':_0x24edb0['as'],'attributes':_0x24edb0[_0xa222('0x1a')],'include':_0x24edb0[_0xa222('0x17')]?_[_0xa222('0x18')](_0x24edb0['include'],function(_0x581f54){return{'model':db[_0x581f54[_0xa222('0x19')]],'as':_0x581f54['as'],'attributes':_0x581f54['attributes'],'include':_0x581f54[_0xa222('0x17')]?_[_0xa222('0x18')](_0x581f54[_0xa222('0x17')],function(_0x573f5b){return{'model':db[_0x573f5b['model']],'as':_0x573f5b['as'],'attributes':_0x573f5b['attributes']};}):[]};}):[]};}):[]:[]})[_0xa222('0x1b')](function(_0x4805ea){logger[_0xa222('0xa')]('GetCampaign',_0x10c40b);logger[_0xa222('0xc')](_0xa222('0x13'),_0x10c40b,JSON[_0xa222('0xe')](_0x4805ea));_0x3f2bab(_0x4805ea);})[_0xa222('0x1c')](function(_0x224c46){logger['error'](_0xa222('0x13'),_0x224c46['message'],_0x10c40b);_0x50c9c9(_0x26f413[_0xa222('0xf')](0x1f4,_0x224c46['message']));});});};
\ No newline at end of file
+var _0xcf04=['jayson/promise','client','http','info','Campaign,\x20%s,\x20%s','request\x20sent','error','message','result','Campaign','findAll','options','raw','attributes','limit','include','map','GetCampaign','debug','stringify','catch','moment','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment'];(function(_0x29b279,_0x4a305c){var _0x5ab324=function(_0x89c098){while(--_0x89c098){_0x29b279['push'](_0x29b279['shift']());}};_0x5ab324(++_0x4a305c);}(_0xcf04,0x1f1));var _0x4cf0=function(_0xa0d5df,_0x19588c){_0xa0d5df=_0xa0d5df-0x0;var _0x5089dd=_0xcf04[_0xa0d5df];return _0x5089dd;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x4cf0('0x0'));var BPromise=require('bluebird');var rs=require(_0x4cf0('0x1'));var fs=require('fs');var Redis=require(_0x4cf0('0x2'));var db=require(_0x4cf0('0x3'))['db'];var utils=require(_0x4cf0('0x4'));var logger=require('../../config/logger')(_0x4cf0('0x5'));var config=require(_0x4cf0('0x6'));var jayson=require(_0x4cf0('0x7'));var client=jayson[_0x4cf0('0x8')][_0x4cf0('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x7f527c,_0x5f32ef,_0x4341ce){return new BPromise(function(_0x240086,_0x5090ed){return client['request'](_0x7f527c,_0x4341ce)['then'](function(_0x468f5b){logger[_0x4cf0('0xa')](_0x4cf0('0xb'),_0x5f32ef,_0x4cf0('0xc'));logger['debug']('Campaign,\x20%s,\x20%s,\x20%s',_0x5f32ef,_0x4cf0('0xc'),JSON['stringify'](_0x468f5b));if(_0x468f5b[_0x4cf0('0xd')]){if(_0x468f5b['error']['code']===0x1f4){logger[_0x4cf0('0xd')](_0x4cf0('0xb'),_0x5f32ef,_0x468f5b[_0x4cf0('0xd')][_0x4cf0('0xe')]);return _0x5090ed(_0x468f5b[_0x4cf0('0xd')][_0x4cf0('0xe')]);}logger[_0x4cf0('0xd')](_0x4cf0('0xb'),_0x5f32ef,_0x468f5b['error'][_0x4cf0('0xe')]);return _0x240086(_0x468f5b['error'][_0x4cf0('0xe')]);}else{logger[_0x4cf0('0xa')]('Campaign,\x20%s,\x20%s',_0x5f32ef,_0x4cf0('0xc'));_0x240086(_0x468f5b[_0x4cf0('0xf')][_0x4cf0('0xe')]);}})['catch'](function(_0x4bba9d){logger[_0x4cf0('0xd')](_0x4cf0('0xb'),_0x5f32ef,_0x4bba9d);_0x5090ed(_0x4bba9d);});});}exports['GetCampaign']=function(_0x40a5ec){var _0x2916e9=this;return new Promise(function(_0x46d6a6,_0x256dc8){return db[_0x4cf0('0x10')][_0x4cf0('0x11')]({'raw':_0x40a5ec[_0x4cf0('0x12')]?_0x40a5ec['options'][_0x4cf0('0x13')]===undefined?!![]:![]:!![],'where':_0x40a5ec[_0x4cf0('0x12')]?_0x40a5ec[_0x4cf0('0x12')]['where']||null:null,'attributes':_0x40a5ec[_0x4cf0('0x12')]?_0x40a5ec[_0x4cf0('0x12')][_0x4cf0('0x14')]||null:null,'limit':_0x40a5ec[_0x4cf0('0x12')]?_0x40a5ec[_0x4cf0('0x12')][_0x4cf0('0x15')]||null:null,'include':_0x40a5ec[_0x4cf0('0x12')]?_0x40a5ec[_0x4cf0('0x12')][_0x4cf0('0x16')]?_['map'](_0x40a5ec['options'][_0x4cf0('0x16')],function(_0x3e6178){return{'model':db[_0x3e6178['model']],'as':_0x3e6178['as'],'attributes':_0x3e6178['attributes'],'include':_0x3e6178[_0x4cf0('0x16')]?_[_0x4cf0('0x17')](_0x3e6178[_0x4cf0('0x16')],function(_0x32f461){return{'model':db[_0x32f461['model']],'as':_0x32f461['as'],'attributes':_0x32f461[_0x4cf0('0x14')],'include':_0x32f461['include']?_['map'](_0x32f461['include'],function(_0x5e14c9){return{'model':db[_0x5e14c9['model']],'as':_0x5e14c9['as'],'attributes':_0x5e14c9[_0x4cf0('0x14')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x300196){logger[_0x4cf0('0xa')](_0x4cf0('0x18'),_0x40a5ec);logger[_0x4cf0('0x19')](_0x4cf0('0x18'),_0x40a5ec,JSON[_0x4cf0('0x1a')](_0x300196));_0x46d6a6(_0x300196);})[_0x4cf0('0x1b')](function(_0x135040){logger[_0x4cf0('0xd')](_0x4cf0('0x18'),_0x135040[_0x4cf0('0xe')],_0x40a5ec);_0x256dc8(_0x2916e9['error'](0x1f4,_0x135040[_0x4cf0('0xe')]));});});};
\ No newline at end of file
index 854e140..a5f3260 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa1b4=['../../components/interaction/service','./campaign.controller','get','isAuthenticated','index','/:id/hoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','getHopperFinals','/:id/hopper_black','getHopperBlacks','getLists','/:id/blacklists','create','post','/:id/lists','addBlackLists','update','delete','/:id','destroy','exports','path','connect-timeout','Router','../../components/auth/service'];(function(_0x3054be,_0x1bdc8b){var _0x3df150=function(_0x56cfbf){while(--_0x56cfbf){_0x3054be['push'](_0x3054be['shift']());}};_0x3df150(++_0x1bdc8b);}(_0xa1b4,0x1ac));var _0x4a1b=function(_0xdbb6cb,_0x3b8fda){_0xdbb6cb=_0xdbb6cb-0x0;var _0x476b50=_0xa1b4[_0xdbb6cb];return _0x476b50;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x4a1b('0x0'));var timeout=require(_0x4a1b('0x1'));var express=require('express');var router=express[_0x4a1b('0x2')]();var auth=require(_0x4a1b('0x3'));var interaction=require(_0x4a1b('0x4'));var config=require('../../config/environment');var controller=require(_0x4a1b('0x5'));router[_0x4a1b('0x6')]('/',auth[_0x4a1b('0x7')](),controller[_0x4a1b('0x8')]);router['get']('/:id',auth[_0x4a1b('0x7')](),controller['show']);router[_0x4a1b('0x6')](_0x4a1b('0x9'),auth[_0x4a1b('0x7')](),controller['getHoppers']);router[_0x4a1b('0x6')](_0x4a1b('0xa'),auth['isAuthenticated'](),controller[_0x4a1b('0xb')]);router[_0x4a1b('0x6')](_0x4a1b('0xc'),auth[_0x4a1b('0x7')](),controller[_0x4a1b('0xd')]);router[_0x4a1b('0x6')](_0x4a1b('0xe'),auth['isAuthenticated'](),controller[_0x4a1b('0xf')]);router[_0x4a1b('0x6')]('/:id/lists',auth['isAuthenticated'](),controller[_0x4a1b('0x10')]);router[_0x4a1b('0x6')](_0x4a1b('0x11'),auth['isAuthenticated'](),controller['getBlackLists']);router['post']('/',auth[_0x4a1b('0x7')](),controller[_0x4a1b('0x12')]);router[_0x4a1b('0x13')]('/:id/clone',auth[_0x4a1b('0x7')](),controller['clone']);router[_0x4a1b('0x13')](_0x4a1b('0x14'),auth[_0x4a1b('0x7')](),controller['addLists']);router[_0x4a1b('0x13')]('/:id/blacklists',auth['isAuthenticated'](),controller[_0x4a1b('0x15')]);router['put']('/:id',auth[_0x4a1b('0x7')](),controller[_0x4a1b('0x16')]);router[_0x4a1b('0x17')](_0x4a1b('0x18'),auth[_0x4a1b('0x7')](),controller[_0x4a1b('0x19')]);router['delete'](_0x4a1b('0x14'),auth[_0x4a1b('0x7')](),controller['removeLists']);router[_0x4a1b('0x17')](_0x4a1b('0x11'),auth[_0x4a1b('0x7')](),controller['removeBlackLists']);module[_0x4a1b('0x1a')]=router;
\ No newline at end of file
+var _0xcc8c=['../../components/interaction/service','../../config/environment','./campaign.controller','get','isAuthenticated','index','/:id','show','/:id/hoppers','getHoppers','/:id/hopper_histories','getHopperHistories','getHopperFinals','/:id/hopper_black','getHopperBlacks','/:id/lists','/:id/blacklists','getBlackLists','post','create','clone','addLists','addBlackLists','put','update','delete','removeLists','removeBlackLists','exports','path','express','Router','../../components/auth/service'];(function(_0xa65ffb,_0x53dd5b){var _0x491769=function(_0x237134){while(--_0x237134){_0xa65ffb['push'](_0xa65ffb['shift']());}};_0x491769(++_0x53dd5b);}(_0xcc8c,0x104));var _0xccc8=function(_0x14b74f,_0xf24abd){_0x14b74f=_0x14b74f-0x0;var _0x11f35e=_0xcc8c[_0x14b74f];return _0x11f35e;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xccc8('0x0'));var timeout=require('connect-timeout');var express=require(_0xccc8('0x1'));var router=express[_0xccc8('0x2')]();var auth=require(_0xccc8('0x3'));var interaction=require(_0xccc8('0x4'));var config=require(_0xccc8('0x5'));var controller=require(_0xccc8('0x6'));router[_0xccc8('0x7')]('/',auth[_0xccc8('0x8')](),controller[_0xccc8('0x9')]);router[_0xccc8('0x7')](_0xccc8('0xa'),auth[_0xccc8('0x8')](),controller[_0xccc8('0xb')]);router['get'](_0xccc8('0xc'),auth[_0xccc8('0x8')](),controller[_0xccc8('0xd')]);router[_0xccc8('0x7')](_0xccc8('0xe'),auth[_0xccc8('0x8')](),controller[_0xccc8('0xf')]);router[_0xccc8('0x7')]('/:id/hopper_finals',auth[_0xccc8('0x8')](),controller[_0xccc8('0x10')]);router[_0xccc8('0x7')](_0xccc8('0x11'),auth[_0xccc8('0x8')](),controller[_0xccc8('0x12')]);router['get'](_0xccc8('0x13'),auth[_0xccc8('0x8')](),controller['getLists']);router[_0xccc8('0x7')](_0xccc8('0x14'),auth[_0xccc8('0x8')](),controller[_0xccc8('0x15')]);router[_0xccc8('0x16')]('/',auth[_0xccc8('0x8')](),controller[_0xccc8('0x17')]);router[_0xccc8('0x16')]('/:id/clone',auth[_0xccc8('0x8')](),controller[_0xccc8('0x18')]);router['post']('/:id/lists',auth[_0xccc8('0x8')](),controller[_0xccc8('0x19')]);router[_0xccc8('0x16')](_0xccc8('0x14'),auth[_0xccc8('0x8')](),controller[_0xccc8('0x1a')]);router[_0xccc8('0x1b')](_0xccc8('0xa'),auth[_0xccc8('0x8')](),controller[_0xccc8('0x1c')]);router[_0xccc8('0x1d')]('/:id',auth[_0xccc8('0x8')](),controller['destroy']);router['delete'](_0xccc8('0x13'),auth[_0xccc8('0x8')](),controller[_0xccc8('0x1e')]);router['delete'](_0xccc8('0x14'),auth['isAuthenticated'](),controller[_0xccc8('0x1f')]);module[_0xccc8('0x20')]=router;
\ No newline at end of file
index 6cc708a..dd2f7cd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xec3c=['exports','STRING','key','sequelize'];(function(_0x12b170,_0x13d9ac){var _0x1dbf59=function(_0x56c7bd){while(--_0x56c7bd){_0x12b170['push'](_0x12b170['shift']());}};_0x1dbf59(++_0x13d9ac);}(_0xec3c,0xef));var _0xcec3=function(_0x44c583,_0xdc4d48){_0x44c583=_0x44c583-0x0;var _0x396a41=_0xec3c[_0x44c583];return _0x396a41;};'use strict';var Sequelize=require(_0xcec3('0x0'));module[_0xcec3('0x1')]={'key':{'type':Sequelize[_0xcec3('0x2')],'allowNull':![]},'value':{'type':Sequelize['TEXT'],'allowNull':![]},'description':{'type':Sequelize[_0xcec3('0x2')]},'name':{'type':Sequelize['VIRTUAL'],'get':function(){return this['getDataValue'](_0xcec3('0x3'));}}};
\ No newline at end of file
+var _0x0e51=['VIRTUAL','getDataValue','sequelize','STRING','TEXT'];(function(_0x2db84f,_0x2ed16e){var _0x42b02b=function(_0x3a67f0){while(--_0x3a67f0){_0x2db84f['push'](_0x2db84f['shift']());}};_0x42b02b(++_0x2ed16e);}(_0x0e51,0x66));var _0x10e5=function(_0x1c43ca,_0x18fdee){_0x1c43ca=_0x1c43ca-0x0;var _0x38ee19=_0x0e51[_0x1c43ca];return _0x38ee19;};'use strict';var Sequelize=require(_0x10e5('0x0'));module['exports']={'key':{'type':Sequelize[_0x10e5('0x1')],'allowNull':![]},'value':{'type':Sequelize[_0x10e5('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x10e5('0x1')]},'name':{'type':Sequelize[_0x10e5('0x3')],'get':function(){return this[_0x10e5('0x4')]('key');}}};
\ No newline at end of file
index c95c394..04c1c49 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7eb4=['fields','attributes','length','nolimit','sort','where','filters','merge','VIRTUAL','field','filter','count','includeAll','include','findAll','rows','catch','show','params','options','find','body','create','key','MailAccountId','SmsAccountId','OpenchannelAccountId','ChatWebsiteId','Sequelize','ValidationError','The\x20inserted\x20key\x20already\x20exists.','user','role','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','util','to-csv','ejs','lodash','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','set','apply','reject','save','update','then','destroy','get','CannedAnswers','error','stack','name','send','index','CannedAnswer','rawAttributes','model','keys','query','intersection'];(function(_0x42d680,_0x56d699){var _0x27e698=function(_0x489725){while(--_0x489725){_0x42d680['push'](_0x42d680['shift']());}};_0x27e698(++_0x56d699);}(_0x7eb4,0x125));var _0x47eb=function(_0x301c79,_0x54b457){_0x301c79=_0x301c79-0x0;var _0x21062c=_0x7eb4[_0x301c79];return _0x21062c;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x47eb('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x47eb('0x1'));var jsonpatch=require(_0x47eb('0x2'));var rp=require('request-promise');var moment=require(_0x47eb('0x3'));var BPromise=require(_0x47eb('0x4'));var Mustache=require(_0x47eb('0x5'));var util=require(_0x47eb('0x6'));var path=require('path');var sox=require('sox');var csv=require(_0x47eb('0x7'));var ejs=require(_0x47eb('0x8'));var fs=require('fs');var _=require(_0x47eb('0x9'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x47eb('0xa'));var deskjs=require(_0x47eb('0xb'));var toCsv=require(_0x47eb('0x7'));var querystring=require('querystring');var Papa=require(_0x47eb('0xc'));var Redis=require(_0x47eb('0xd'));var authService=require(_0x47eb('0xe'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x47eb('0xf'));var logger=require(_0x47eb('0x10'))(_0x47eb('0x11'));var utils=require(_0x47eb('0x12'));var config=require(_0x47eb('0x13'));var db=require(_0x47eb('0x14'))['db'];function respondWithStatusCode(_0x2a5f24,_0x1ce5f8){_0x1ce5f8=_0x1ce5f8||0xcc;return function(_0x30e9a2){if(_0x30e9a2){return _0x2a5f24[_0x47eb('0x15')](_0x1ce5f8);}return _0x2a5f24[_0x47eb('0x16')](_0x1ce5f8)[_0x47eb('0x17')]();};}function respondWithResult(_0x4ffdc6,_0x364f0a){_0x364f0a=_0x364f0a||0xc8;return function(_0x2863d3){if(_0x2863d3){return _0x4ffdc6['status'](_0x364f0a)[_0x47eb('0x18')](_0x2863d3);}};}function respondWithFilteredResult(_0x290d0a,_0x9a50f7){return function(_0x27de39){if(_0x27de39){var _0x186ea6=_0x27de39['count'],_0x5c21e8=_0x9a50f7[_0x47eb('0x19')],_0x24bede=_0x9a50f7[_0x47eb('0x19')]+_0x9a50f7[_0x47eb('0x1a')],_0x1d19ea;if(_0x24bede>=_0x186ea6){_0x24bede=_0x186ea6;_0x1d19ea=0xc8;}else{_0x1d19ea=0xce;}_0x290d0a[_0x47eb('0x16')](_0x1d19ea);return _0x290d0a[_0x47eb('0x1b')]('Content-Range',_0x5c21e8+'-'+_0x24bede+'/'+_0x186ea6)[_0x47eb('0x18')](_0x27de39);}return null;};}function patchUpdates(_0x3f5673){return function(_0xa9e854){try{jsonpatch[_0x47eb('0x1c')](_0xa9e854,_0x3f5673,!![]);}catch(_0x561486){return BPromise[_0x47eb('0x1d')](_0x561486);}return _0xa9e854[_0x47eb('0x1e')]();};}function saveUpdates(_0x73a94a,_0x3c98a2){return function(_0x2304ba){if(_0x2304ba){return _0x2304ba[_0x47eb('0x1f')](_0x73a94a)[_0x47eb('0x20')](function(_0x90c584){return _0x90c584;});}return null;};}function removeEntity(_0x2c3ddd,_0x321bbc){return function(_0x33d266){if(_0x33d266){return _0x33d266[_0x47eb('0x21')]()[_0x47eb('0x20')](function(){var _0xf29457=_0x33d266[_0x47eb('0x22')]({'plain':!![]});var _0x15e6f0=_0x47eb('0x23');return db['UserProfileResource'][_0x47eb('0x21')]({'where':{'type':_0x15e6f0,'resourceId':_0xf29457['id']}})[_0x47eb('0x20')](function(){return _0x33d266;});})[_0x47eb('0x20')](function(){_0x2c3ddd['status'](0xcc)[_0x47eb('0x17')]();});}};}function handleEntityNotFound(_0x3fe762,_0x361e42){return function(_0x3f2ce7){if(!_0x3f2ce7){_0x3fe762[_0x47eb('0x15')](0x194);}return _0x3f2ce7;};}function handleError(_0x14920b,_0x143660){_0x143660=_0x143660||0x1f4;return function(_0x16cb50){logger[_0x47eb('0x24')](_0x16cb50[_0x47eb('0x25')]);if(_0x16cb50[_0x47eb('0x26')]){delete _0x16cb50[_0x47eb('0x26')];}_0x14920b[_0x47eb('0x16')](_0x143660)[_0x47eb('0x27')](_0x16cb50);};}exports[_0x47eb('0x28')]=function(_0x18ab18,_0x359c1d){var _0x10580e={},_0x3e172a={},_0x21f5ff={'count':0x0,'rows':[]};var _0x16afd9=db[_0x47eb('0x29')][_0x47eb('0x2a')];_0x3e172a[_0x47eb('0x2b')]=_[_0x47eb('0x2c')](_0x16afd9);_0x3e172a['query']=_['keys'](_0x18ab18[_0x47eb('0x2d')]);_0x3e172a['filters']=_[_0x47eb('0x2e')](_0x3e172a[_0x47eb('0x2b')],_0x3e172a[_0x47eb('0x2d')]);_0x10580e['attributes']=_[_0x47eb('0x2e')](_0x3e172a[_0x47eb('0x2b')],qs['fields'](_0x18ab18[_0x47eb('0x2d')][_0x47eb('0x2f')]));_0x10580e[_0x47eb('0x30')]=_0x10580e[_0x47eb('0x30')][_0x47eb('0x31')]?_0x10580e[_0x47eb('0x30')]:_0x3e172a[_0x47eb('0x2b')];if(!_0x18ab18[_0x47eb('0x2d')]['hasOwnProperty'](_0x47eb('0x32'))){_0x10580e[_0x47eb('0x1a')]=qs[_0x47eb('0x1a')](_0x18ab18[_0x47eb('0x2d')][_0x47eb('0x1a')]);_0x10580e[_0x47eb('0x19')]=qs[_0x47eb('0x19')](_0x18ab18[_0x47eb('0x2d')]['offset']);}_0x10580e['order']=qs[_0x47eb('0x33')](_0x18ab18['query'][_0x47eb('0x33')]);_0x10580e[_0x47eb('0x34')]=qs[_0x47eb('0x35')](_['pick'](_0x18ab18[_0x47eb('0x2d')],_0x3e172a[_0x47eb('0x35')]));if(_0x18ab18['query']['filter']){_0x10580e[_0x47eb('0x34')]=_[_0x47eb('0x36')](_0x10580e[_0x47eb('0x34')],{'$or':_['map'](_0x16afd9,function(_0x8de13e){if(_0x8de13e['type']['key']!==_0x47eb('0x37')){var _0x1a1bfb={};_0x1a1bfb[_0x8de13e[_0x47eb('0x38')]]={'$like':'%'+_0x18ab18[_0x47eb('0x2d')][_0x47eb('0x39')]+'%'};return _0x1a1bfb;}})});}_0x10580e=_['merge']({},_0x10580e,_0x18ab18['options']);var _0x164214={'where':_0x10580e[_0x47eb('0x34')]};return db[_0x47eb('0x29')]['count'](_0x164214)['then'](function(_0x20fef9){_0x21f5ff[_0x47eb('0x3a')]=_0x20fef9;if(_0x18ab18['query'][_0x47eb('0x3b')]){_0x10580e[_0x47eb('0x3c')]=[{'all':!![]}];}return db[_0x47eb('0x29')][_0x47eb('0x3d')](_0x10580e);})[_0x47eb('0x20')](function(_0x4c3e8d){_0x21f5ff[_0x47eb('0x3e')]=_0x4c3e8d;return _0x21f5ff;})[_0x47eb('0x20')](respondWithFilteredResult(_0x359c1d,_0x10580e))[_0x47eb('0x3f')](handleError(_0x359c1d,null));};exports[_0x47eb('0x40')]=function(_0x80ef45,_0x41e77f){var _0x8de08e={'raw':!![],'where':{'id':_0x80ef45[_0x47eb('0x41')]['id']}},_0x47fb04={};_0x47fb04['model']=_[_0x47eb('0x2c')](db[_0x47eb('0x29')][_0x47eb('0x2a')]);_0x47fb04[_0x47eb('0x2d')]=_['keys'](_0x80ef45['query']);_0x47fb04[_0x47eb('0x35')]=_['intersection'](_0x47fb04[_0x47eb('0x2b')],_0x47fb04[_0x47eb('0x2d')]);_0x8de08e[_0x47eb('0x30')]=_[_0x47eb('0x2e')](_0x47fb04['model'],qs[_0x47eb('0x2f')](_0x80ef45[_0x47eb('0x2d')][_0x47eb('0x2f')]));_0x8de08e[_0x47eb('0x30')]=_0x8de08e[_0x47eb('0x30')][_0x47eb('0x31')]?_0x8de08e['attributes']:_0x47fb04[_0x47eb('0x2b')];if(_0x80ef45[_0x47eb('0x2d')][_0x47eb('0x3b')]){_0x8de08e[_0x47eb('0x3c')]=[{'all':!![]}];}_0x8de08e=_[_0x47eb('0x36')]({},_0x8de08e,_0x80ef45[_0x47eb('0x42')]);return db['CannedAnswer'][_0x47eb('0x43')](_0x8de08e)[_0x47eb('0x20')](handleEntityNotFound(_0x41e77f,null))[_0x47eb('0x20')](respondWithResult(_0x41e77f,null))[_0x47eb('0x3f')](handleError(_0x41e77f,null));};exports[_0x47eb('0x1f')]=function(_0x3b12d8,_0x605d4d){if(_0x3b12d8[_0x47eb('0x44')]['id']){delete _0x3b12d8[_0x47eb('0x44')]['id'];}return db[_0x47eb('0x29')][_0x47eb('0x43')]({'where':{'id':_0x3b12d8[_0x47eb('0x41')]['id']}})[_0x47eb('0x20')](handleEntityNotFound(_0x605d4d,null))[_0x47eb('0x20')](saveUpdates(_0x3b12d8['body'],null))[_0x47eb('0x20')](respondWithResult(_0x605d4d,null))[_0x47eb('0x3f')](handleError(_0x605d4d,null));};exports['destroy']=function(_0x2e757f,_0x463470){return db[_0x47eb('0x29')][_0x47eb('0x43')]({'where':{'id':_0x2e757f[_0x47eb('0x41')]['id']}})[_0x47eb('0x20')](handleEntityNotFound(_0x463470,null))[_0x47eb('0x20')](removeEntity(_0x463470,null))[_0x47eb('0x3f')](handleError(_0x463470,null));};exports[_0x47eb('0x45')]=function(_0x40aa5a,_0x2fd1fb){var _0x2cdd60={'key':_0x40aa5a[_0x47eb('0x44')][_0x47eb('0x46')]};if(_0x40aa5a[_0x47eb('0x44')][_0x47eb('0x47')]){_0x2cdd60['MailAccountId']=_0x40aa5a['body']['MailAccountId'];}else if(_0x40aa5a[_0x47eb('0x44')][_0x47eb('0x48')]){_0x2cdd60[_0x47eb('0x48')]=_0x40aa5a['body']['SmsAccountId'];}else if(_0x40aa5a[_0x47eb('0x44')][_0x47eb('0x49')]){_0x2cdd60['OpenchannelAccountId']=_0x40aa5a[_0x47eb('0x44')][_0x47eb('0x49')];}else if(_0x40aa5a[_0x47eb('0x44')][_0x47eb('0x4a')]){_0x2cdd60[_0x47eb('0x4a')]=_0x40aa5a[_0x47eb('0x44')][_0x47eb('0x4a')];}return db['CannedAnswer'][_0x47eb('0x43')]({'where':_0x2cdd60})[_0x47eb('0x20')](function(_0x3d45e9){if(_0x3d45e9){throw new db[(_0x47eb('0x4b'))][(_0x47eb('0x4c'))](_0x47eb('0x4d'));}return db['CannedAnswer'][_0x47eb('0x45')](_0x40aa5a[_0x47eb('0x44')]);})['then'](function(_0x501bec){var _0x48a0b8=_0x40aa5a[_0x47eb('0x4e')]['get']({'plain':!![]});if(!_0x48a0b8)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x48a0b8[_0x47eb('0x4f')]===_0x47eb('0x4e')){var _0x4878a7=_0x501bec[_0x47eb('0x22')]({'plain':!![]});return db[_0x47eb('0x50')][_0x47eb('0x43')]({'where':{'name':_0x47eb('0x23'),'userProfileId':_0x48a0b8[_0x47eb('0x51')]},'raw':!![]})['then'](function(_0x2f5c01){if(_0x2f5c01&&_0x2f5c01[_0x47eb('0x52')]===0x0){return db[_0x47eb('0x53')][_0x47eb('0x45')]({'name':_0x4878a7[_0x47eb('0x26')],'resourceId':_0x4878a7['id'],'type':_0x2f5c01['name'],'sectionId':_0x2f5c01['id']},{})[_0x47eb('0x20')](function(){return _0x501bec;});}else{return _0x501bec;}})[_0x47eb('0x3f')](function(_0xdd49e7){logger[_0x47eb('0x24')](_0x47eb('0x54'),_0xdd49e7);throw _0xdd49e7;});}return _0x501bec;})[_0x47eb('0x20')](respondWithResult(_0x2fd1fb,0xc9))['catch'](handleError(_0x2fd1fb,null));};
\ No newline at end of file
+var _0x353b=['SmsAccountId','OpenchannelAccountId','ChatWebsiteId','Sequelize','ValidationError','create','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','CannedAnswers','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','zip-dir','fast-json-patch','request-promise','moment','util','path','sox','ejs','lodash','squel','jsforce','desk.js','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','set','apply','reject','save','update','then','destroy','UserProfileResource','error','stack','name','index','CannedAnswer','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','options','count','includeAll','findAll','rows','catch','params','include','body','find','MailAccountId'];(function(_0x393e1d,_0x448d28){var _0x446442=function(_0x813ccd){while(--_0x813ccd){_0x393e1d['push'](_0x393e1d['shift']());}};_0x446442(++_0x448d28);}(_0x353b,0xb7));var _0xb353=function(_0x39d18b,_0x497c48){_0x39d18b=_0x39d18b-0x0;var _0x3dbf1e=_0x353b[_0x39d18b];return _0x3dbf1e;};'use strict';var pdf=require(_0xb353('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xb353('0x1'));var jsonpatch=require(_0xb353('0x2'));var rp=require(_0xb353('0x3'));var moment=require(_0xb353('0x4'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xb353('0x5'));var path=require(_0xb353('0x6'));var sox=require(_0xb353('0x7'));var csv=require('to-csv');var ejs=require(_0xb353('0x8'));var fs=require('fs');var _=require(_0xb353('0x9'));var squel=require(_0xb353('0xa'));var crypto=require('crypto');var jsforce=require(_0xb353('0xb'));var deskjs=require(_0xb353('0xc'));var toCsv=require('to-csv');var querystring=require(_0xb353('0xd'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xb353('0xe'));var qs=require(_0xb353('0xf'));var hardwareService=require(_0xb353('0x10'));var logger=require(_0xb353('0x11'))('api');var utils=require(_0xb353('0x12'));var config=require(_0xb353('0x13'));var db=require(_0xb353('0x14'))['db'];function respondWithStatusCode(_0x5982a2,_0x2916c2){_0x2916c2=_0x2916c2||0xcc;return function(_0x43a83b){if(_0x43a83b){return _0x5982a2[_0xb353('0x15')](_0x2916c2);}return _0x5982a2[_0xb353('0x16')](_0x2916c2)[_0xb353('0x17')]();};}function respondWithResult(_0x4ad380,_0x188c10){_0x188c10=_0x188c10||0xc8;return function(_0x33e98c){if(_0x33e98c){return _0x4ad380[_0xb353('0x16')](_0x188c10)[_0xb353('0x18')](_0x33e98c);}};}function respondWithFilteredResult(_0x3f4d6e,_0x23c646){return function(_0x1bc873){if(_0x1bc873){var _0x225918=_0x1bc873['count'],_0x115060=_0x23c646[_0xb353('0x19')],_0x497445=_0x23c646[_0xb353('0x19')]+_0x23c646[_0xb353('0x1a')],_0x1f5c36;if(_0x497445>=_0x225918){_0x497445=_0x225918;_0x1f5c36=0xc8;}else{_0x1f5c36=0xce;}_0x3f4d6e[_0xb353('0x16')](_0x1f5c36);return _0x3f4d6e[_0xb353('0x1b')]('Content-Range',_0x115060+'-'+_0x497445+'/'+_0x225918)[_0xb353('0x18')](_0x1bc873);}return null;};}function patchUpdates(_0x23fc36){return function(_0x25d725){try{jsonpatch[_0xb353('0x1c')](_0x25d725,_0x23fc36,!![]);}catch(_0x57e90d){return BPromise[_0xb353('0x1d')](_0x57e90d);}return _0x25d725[_0xb353('0x1e')]();};}function saveUpdates(_0x4c3d51,_0x575568){return function(_0x57f3c3){if(_0x57f3c3){return _0x57f3c3[_0xb353('0x1f')](_0x4c3d51)[_0xb353('0x20')](function(_0x1a9d68){return _0x1a9d68;});}return null;};}function removeEntity(_0x71056e,_0x51ca73){return function(_0x46598d){if(_0x46598d){return _0x46598d[_0xb353('0x21')]()[_0xb353('0x20')](function(){var _0x5321c1=_0x46598d['get']({'plain':!![]});var _0x3a4086='CannedAnswers';return db[_0xb353('0x22')]['destroy']({'where':{'type':_0x3a4086,'resourceId':_0x5321c1['id']}})[_0xb353('0x20')](function(){return _0x46598d;});})[_0xb353('0x20')](function(){_0x71056e[_0xb353('0x16')](0xcc)[_0xb353('0x17')]();});}};}function handleEntityNotFound(_0x418d99,_0x3a08ae){return function(_0x471430){if(!_0x471430){_0x418d99[_0xb353('0x15')](0x194);}return _0x471430;};}function handleError(_0x309035,_0x2baede){_0x2baede=_0x2baede||0x1f4;return function(_0x5381e1){logger[_0xb353('0x23')](_0x5381e1[_0xb353('0x24')]);if(_0x5381e1[_0xb353('0x25')]){delete _0x5381e1[_0xb353('0x25')];}_0x309035[_0xb353('0x16')](_0x2baede)['send'](_0x5381e1);};}exports[_0xb353('0x26')]=function(_0x1a1241,_0x47e1ed){var _0x2dec7c={},_0x47cd82={},_0x269daa={'count':0x0,'rows':[]};var _0x5142ce=db[_0xb353('0x27')][_0xb353('0x28')];_0x47cd82[_0xb353('0x29')]=_[_0xb353('0x2a')](_0x5142ce);_0x47cd82['query']=_[_0xb353('0x2a')](_0x1a1241[_0xb353('0x2b')]);_0x47cd82[_0xb353('0x2c')]=_[_0xb353('0x2d')](_0x47cd82[_0xb353('0x29')],_0x47cd82['query']);_0x2dec7c[_0xb353('0x2e')]=_[_0xb353('0x2d')](_0x47cd82['model'],qs['fields'](_0x1a1241[_0xb353('0x2b')][_0xb353('0x2f')]));_0x2dec7c[_0xb353('0x2e')]=_0x2dec7c[_0xb353('0x2e')][_0xb353('0x30')]?_0x2dec7c['attributes']:_0x47cd82[_0xb353('0x29')];if(!_0x1a1241[_0xb353('0x2b')][_0xb353('0x31')]('nolimit')){_0x2dec7c[_0xb353('0x1a')]=qs[_0xb353('0x1a')](_0x1a1241[_0xb353('0x2b')]['limit']);_0x2dec7c[_0xb353('0x19')]=qs[_0xb353('0x19')](_0x1a1241[_0xb353('0x2b')][_0xb353('0x19')]);}_0x2dec7c[_0xb353('0x32')]=qs[_0xb353('0x33')](_0x1a1241[_0xb353('0x2b')][_0xb353('0x33')]);_0x2dec7c[_0xb353('0x34')]=qs[_0xb353('0x2c')](_[_0xb353('0x35')](_0x1a1241[_0xb353('0x2b')],_0x47cd82['filters']));if(_0x1a1241[_0xb353('0x2b')][_0xb353('0x36')]){_0x2dec7c[_0xb353('0x34')]=_['merge'](_0x2dec7c[_0xb353('0x34')],{'$or':_[_0xb353('0x37')](_0x5142ce,function(_0x394c12){if(_0x394c12[_0xb353('0x38')][_0xb353('0x39')]!==_0xb353('0x3a')){var _0x22cc55={};_0x22cc55[_0x394c12[_0xb353('0x3b')]]={'$like':'%'+_0x1a1241[_0xb353('0x2b')][_0xb353('0x36')]+'%'};return _0x22cc55;}})});}_0x2dec7c=_[_0xb353('0x3c')]({},_0x2dec7c,_0x1a1241[_0xb353('0x3d')]);var _0x538d11={'where':_0x2dec7c['where']};return db[_0xb353('0x27')][_0xb353('0x3e')](_0x538d11)[_0xb353('0x20')](function(_0x1407c8){_0x269daa[_0xb353('0x3e')]=_0x1407c8;if(_0x1a1241['query'][_0xb353('0x3f')]){_0x2dec7c['include']=[{'all':!![]}];}return db[_0xb353('0x27')][_0xb353('0x40')](_0x2dec7c);})[_0xb353('0x20')](function(_0xa47609){_0x269daa[_0xb353('0x41')]=_0xa47609;return _0x269daa;})[_0xb353('0x20')](respondWithFilteredResult(_0x47e1ed,_0x2dec7c))[_0xb353('0x42')](handleError(_0x47e1ed,null));};exports['show']=function(_0x2175d4,_0x310227){var _0x2102dd={'raw':!![],'where':{'id':_0x2175d4[_0xb353('0x43')]['id']}},_0x465cbe={};_0x465cbe[_0xb353('0x29')]=_['keys'](db[_0xb353('0x27')][_0xb353('0x28')]);_0x465cbe[_0xb353('0x2b')]=_['keys'](_0x2175d4[_0xb353('0x2b')]);_0x465cbe[_0xb353('0x2c')]=_[_0xb353('0x2d')](_0x465cbe[_0xb353('0x29')],_0x465cbe[_0xb353('0x2b')]);_0x2102dd['attributes']=_['intersection'](_0x465cbe[_0xb353('0x29')],qs[_0xb353('0x2f')](_0x2175d4['query'][_0xb353('0x2f')]));_0x2102dd[_0xb353('0x2e')]=_0x2102dd[_0xb353('0x2e')][_0xb353('0x30')]?_0x2102dd[_0xb353('0x2e')]:_0x465cbe[_0xb353('0x29')];if(_0x2175d4[_0xb353('0x2b')]['includeAll']){_0x2102dd[_0xb353('0x44')]=[{'all':!![]}];}_0x2102dd=_[_0xb353('0x3c')]({},_0x2102dd,_0x2175d4['options']);return db[_0xb353('0x27')]['find'](_0x2102dd)[_0xb353('0x20')](handleEntityNotFound(_0x310227,null))[_0xb353('0x20')](respondWithResult(_0x310227,null))[_0xb353('0x42')](handleError(_0x310227,null));};exports[_0xb353('0x1f')]=function(_0x1e385c,_0x3b5c94){if(_0x1e385c[_0xb353('0x45')]['id']){delete _0x1e385c[_0xb353('0x45')]['id'];}return db[_0xb353('0x27')][_0xb353('0x46')]({'where':{'id':_0x1e385c[_0xb353('0x43')]['id']}})[_0xb353('0x20')](handleEntityNotFound(_0x3b5c94,null))['then'](saveUpdates(_0x1e385c[_0xb353('0x45')],null))[_0xb353('0x20')](respondWithResult(_0x3b5c94,null))['catch'](handleError(_0x3b5c94,null));};exports['destroy']=function(_0x1735fc,_0x3528c0){return db[_0xb353('0x27')][_0xb353('0x46')]({'where':{'id':_0x1735fc[_0xb353('0x43')]['id']}})[_0xb353('0x20')](handleEntityNotFound(_0x3528c0,null))['then'](removeEntity(_0x3528c0,null))[_0xb353('0x42')](handleError(_0x3528c0,null));};exports['create']=function(_0x595265,_0x484fb6){var _0x4c3234={'key':_0x595265[_0xb353('0x45')][_0xb353('0x39')]};if(_0x595265['body'][_0xb353('0x47')]){_0x4c3234[_0xb353('0x47')]=_0x595265[_0xb353('0x45')][_0xb353('0x47')];}else if(_0x595265[_0xb353('0x45')][_0xb353('0x48')]){_0x4c3234['SmsAccountId']=_0x595265[_0xb353('0x45')][_0xb353('0x48')];}else if(_0x595265['body'][_0xb353('0x49')]){_0x4c3234['OpenchannelAccountId']=_0x595265[_0xb353('0x45')]['OpenchannelAccountId'];}else if(_0x595265[_0xb353('0x45')]['ChatWebsiteId']){_0x4c3234[_0xb353('0x4a')]=_0x595265[_0xb353('0x45')][_0xb353('0x4a')];}return db['CannedAnswer'][_0xb353('0x46')]({'where':_0x4c3234})[_0xb353('0x20')](function(_0x3370dd){if(_0x3370dd){throw new db[(_0xb353('0x4b'))][(_0xb353('0x4c'))]('The\x20inserted\x20key\x20already\x20exists.');}return db[_0xb353('0x27')][_0xb353('0x4d')](_0x595265[_0xb353('0x45')]);})['then'](function(_0x4b6bca){var _0x4389c3=_0x595265['user'][_0xb353('0x4e')]({'plain':!![]});if(!_0x4389c3)throw new Error(_0xb353('0x4f'));if(_0x4389c3[_0xb353('0x50')]===_0xb353('0x51')){var _0x47052f=_0x4b6bca[_0xb353('0x4e')]({'plain':!![]});return db[_0xb353('0x52')]['find']({'where':{'name':_0xb353('0x53'),'userProfileId':_0x4389c3['userProfileId']},'raw':!![]})[_0xb353('0x20')](function(_0x497e1f){if(_0x497e1f&&_0x497e1f['autoAssociation']===0x0){return db[_0xb353('0x22')][_0xb353('0x4d')]({'name':_0x47052f[_0xb353('0x25')],'resourceId':_0x47052f['id'],'type':_0x497e1f[_0xb353('0x25')],'sectionId':_0x497e1f['id']},{})['then'](function(){return _0x4b6bca;});}else{return _0x4b6bca;}})['catch'](function(_0x4027f9){logger[_0xb353('0x23')](_0xb353('0x54'),_0x4027f9);throw _0x4027f9;});}return _0x4b6bca;})['then'](respondWithResult(_0x484fb6,0xc9))[_0xb353('0x42')](handleError(_0x484fb6,null));};
\ No newline at end of file
index 5bd44d8..8c2afda 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x94a7=['define','CannedAnswer','tools_canned_answers','lodash','util','../../config/logger','api','request-promise','rimraf','../../config/environment','./cannedAnswer.attributes','exports'];(function(_0x5addf7,_0x50785e){var _0xb0746a=function(_0x2ee32b){while(--_0x2ee32b){_0x5addf7['push'](_0x5addf7['shift']());}};_0xb0746a(++_0x50785e);}(_0x94a7,0x147));var _0x794a=function(_0x277541,_0x4d8a9b){_0x277541=_0x277541-0x0;var _0x4b975b=_0x94a7[_0x277541];return _0x4b975b;};'use strict';var _=require(_0x794a('0x0'));var util=require(_0x794a('0x1'));var logger=require(_0x794a('0x2'))(_0x794a('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x794a('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x794a('0x5'));var config=require(_0x794a('0x6'));var attributes=require(_0x794a('0x7'));module[_0x794a('0x8')]=function(_0x2c171d,_0x1e2339){return _0x2c171d[_0x794a('0x9')](_0x794a('0xa'),attributes,{'tableName':_0x794a('0xb'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0x8ea0=['../../config/environment','./cannedAnswer.attributes','exports','define','utf8mb4','utf8mb4_unicode_ci','lodash','moment','bluebird','request-promise','path','rimraf'];(function(_0x509d9e,_0x2d1197){var _0x56b488=function(_0x1e98d0){while(--_0x1e98d0){_0x509d9e['push'](_0x509d9e['shift']());}};_0x56b488(++_0x2d1197);}(_0x8ea0,0x1e6));var _0x08ea=function(_0x5b9065,_0x5883bc){_0x5b9065=_0x5b9065-0x0;var _0x3609d4=_0x8ea0[_0x5b9065];return _0x3609d4;};'use strict';var _=require(_0x08ea('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0x08ea('0x1'));var BPromise=require(_0x08ea('0x2'));var rp=require(_0x08ea('0x3'));var fs=require('fs');var path=require(_0x08ea('0x4'));var rimraf=require(_0x08ea('0x5'));var config=require(_0x08ea('0x6'));var attributes=require(_0x08ea('0x7'));module[_0x08ea('0x8')]=function(_0x4f4a6f,_0x211938){return _0x4f4a6f[_0x08ea('0x9')]('CannedAnswer',attributes,{'tableName':'tools_canned_answers','paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x08ea('0xa'),'collate':_0x08ea('0xb')});};
\ No newline at end of file
index 6bef078..5a3c7eb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf347=['../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','CannedAnswer,\x20%s,\x20%s','request\x20sent','CannedAnswer,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring'];(function(_0x424368,_0x5c247c){var _0x15ac16=function(_0x547736){while(--_0x547736){_0x424368['push'](_0x424368['shift']());}};_0x15ac16(++_0x5c247c);}(_0xf347,0x154));var _0x7f34=function(_0x2023b3,_0x27bf69){_0x2023b3=_0x2023b3-0x0;var _0x17a5df=_0xf347[_0x2023b3];return _0x17a5df;};'use strict';var _=require(_0x7f34('0x0'));var util=require(_0x7f34('0x1'));var moment=require(_0x7f34('0x2'));var BPromise=require(_0x7f34('0x3'));var rs=require(_0x7f34('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x7f34('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x7f34('0x6'))(_0x7f34('0x7'));var config=require(_0x7f34('0x8'));var jayson=require(_0x7f34('0x9'));var client=jayson[_0x7f34('0xa')][_0x7f34('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x8eab8d,_0x3db234,_0x385131){return new BPromise(function(_0x15a2bc,_0x28cf52){return client[_0x7f34('0xc')](_0x8eab8d,_0x385131)[_0x7f34('0xd')](function(_0x52792d){logger[_0x7f34('0xe')](_0x7f34('0xf'),_0x3db234,_0x7f34('0x10'));logger['debug'](_0x7f34('0x11'),_0x3db234,_0x7f34('0x10'),JSON[_0x7f34('0x12')](_0x52792d));if(_0x52792d[_0x7f34('0x13')]){if(_0x52792d[_0x7f34('0x13')]['code']===0x1f4){logger[_0x7f34('0x13')](_0x7f34('0xf'),_0x3db234,_0x52792d['error'][_0x7f34('0x14')]);return _0x28cf52(_0x52792d[_0x7f34('0x13')][_0x7f34('0x14')]);}logger[_0x7f34('0x13')](_0x7f34('0xf'),_0x3db234,_0x52792d[_0x7f34('0x13')]['message']);return _0x15a2bc(_0x52792d['error'][_0x7f34('0x14')]);}else{logger['info']('CannedAnswer,\x20%s,\x20%s',_0x3db234,_0x7f34('0x10'));_0x15a2bc(_0x52792d[_0x7f34('0x15')]['message']);}})[_0x7f34('0x16')](function(_0x313504){logger[_0x7f34('0x13')](_0x7f34('0xf'),_0x3db234,_0x313504);_0x28cf52(_0x313504);});});}
\ No newline at end of file
+var _0x72b9=['moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','request','then','CannedAnswer,\x20%s,\x20%s','debug','CannedAnswer,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','catch','lodash','util'];(function(_0x1b349a,_0x22222c){var _0x5d1f7c=function(_0x368d7c){while(--_0x368d7c){_0x1b349a['push'](_0x1b349a['shift']());}};_0x5d1f7c(++_0x22222c);}(_0x72b9,0xae));var _0x972b=function(_0x5756f8,_0x22b6d5){_0x5756f8=_0x5756f8-0x0;var _0x3bb749=_0x72b9[_0x5756f8];return _0x3bb749;};'use strict';var _=require(_0x972b('0x0'));var util=require(_0x972b('0x1'));var moment=require(_0x972b('0x2'));var BPromise=require(_0x972b('0x3'));var rs=require(_0x972b('0x4'));var fs=require('fs');var Redis=require(_0x972b('0x5'));var db=require(_0x972b('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0x972b('0x7'))(_0x972b('0x8'));var config=require(_0x972b('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x972b('0xa')][_0x972b('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x4f91fa,_0x538793,_0x7368ae){return new BPromise(function(_0x40affc,_0x130cf7){return client[_0x972b('0xc')](_0x4f91fa,_0x7368ae)[_0x972b('0xd')](function(_0x3ccefe){logger['info'](_0x972b('0xe'),_0x538793,'request\x20sent');logger[_0x972b('0xf')](_0x972b('0x10'),_0x538793,_0x972b('0x11'),JSON['stringify'](_0x3ccefe));if(_0x3ccefe['error']){if(_0x3ccefe[_0x972b('0x12')][_0x972b('0x13')]===0x1f4){logger[_0x972b('0x12')](_0x972b('0xe'),_0x538793,_0x3ccefe['error']['message']);return _0x130cf7(_0x3ccefe[_0x972b('0x12')]['message']);}logger[_0x972b('0x12')](_0x972b('0xe'),_0x538793,_0x3ccefe['error'][_0x972b('0x14')]);return _0x40affc(_0x3ccefe['error'][_0x972b('0x14')]);}else{logger['info'](_0x972b('0xe'),_0x538793,_0x972b('0x11'));_0x40affc(_0x3ccefe['result'][_0x972b('0x14')]);}})[_0x972b('0x15')](function(_0x27c73d){logger[_0x972b('0x12')](_0x972b('0xe'),_0x538793,_0x27c73d);_0x130cf7(_0x27c73d);});});}
\ No newline at end of file
index b049311..701ce28 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b84=['connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/:id','isAuthenticated','show','post','create','put','delete','destroy','exports','multer','util','path'];(function(_0x23e7c1,_0x35110c){var _0x1add43=function(_0x238918){while(--_0x238918){_0x23e7c1['push'](_0x23e7c1['shift']());}};_0x1add43(++_0x35110c);}(_0x4b84,0x166));var _0x44b8=function(_0x4191af,_0x5783da){_0x4191af=_0x4191af-0x0;var _0x27bebf=_0x4b84[_0x4191af];return _0x27bebf;};'use strict';var multer=require(_0x44b8('0x0'));var util=require(_0x44b8('0x1'));var path=require(_0x44b8('0x2'));var timeout=require(_0x44b8('0x3'));var express=require(_0x44b8('0x4'));var router=express['Router']();var auth=require(_0x44b8('0x5'));var interaction=require(_0x44b8('0x6'));var config=require(_0x44b8('0x7'));var controller=require('./cannedAnswer.controller');router[_0x44b8('0x8')]('/',auth['isAuthenticated'](),controller[_0x44b8('0x9')]);router[_0x44b8('0x8')](_0x44b8('0xa'),auth[_0x44b8('0xb')](),controller[_0x44b8('0xc')]);router[_0x44b8('0xd')]('/',auth[_0x44b8('0xb')](),controller[_0x44b8('0xe')]);router[_0x44b8('0xf')]('/:id',auth[_0x44b8('0xb')](),controller['update']);router[_0x44b8('0x10')]('/:id',auth[_0x44b8('0xb')](),controller[_0x44b8('0x11')]);module[_0x44b8('0x12')]=router;
\ No newline at end of file
+var _0x978d=['util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./cannedAnswer.controller','isAuthenticated','get','/:id','show','post','create','put','update','delete','destroy','multer'];(function(_0x5aad12,_0x3abd48){var _0x38a701=function(_0x23be39){while(--_0x23be39){_0x5aad12['push'](_0x5aad12['shift']());}};_0x38a701(++_0x3abd48);}(_0x978d,0x142));var _0xd978=function(_0x502ac2,_0x1915ec){_0x502ac2=_0x502ac2-0x0;var _0x55eeb0=_0x978d[_0x502ac2];return _0x55eeb0;};'use strict';var multer=require(_0xd978('0x0'));var util=require(_0xd978('0x1'));var path=require(_0xd978('0x2'));var timeout=require(_0xd978('0x3'));var express=require(_0xd978('0x4'));var router=express[_0xd978('0x5')]();var auth=require(_0xd978('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0xd978('0x7'));var controller=require(_0xd978('0x8'));router['get']('/',auth[_0xd978('0x9')](),controller['index']);router[_0xd978('0xa')](_0xd978('0xb'),auth[_0xd978('0x9')](),controller[_0xd978('0xc')]);router[_0xd978('0xd')]('/',auth[_0xd978('0x9')](),controller[_0xd978('0xe')]);router[_0xd978('0xf')](_0xd978('0xb'),auth[_0xd978('0x9')](),controller[_0xd978('0x10')]);router[_0xd978('0x11')]('/:id',auth[_0xd978('0x9')](),controller[_0xd978('0x12')]);module['exports']=router;
\ No newline at end of file
index fa19355..79f32f5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2178=['exports','DATE','1970-01-01\x2000:00:01','STRING','INTEGER','sequelize'];(function(_0x4345b6,_0x407b47){var _0x1e7def=function(_0x497ad7){while(--_0x497ad7){_0x4345b6['push'](_0x4345b6['shift']());}};_0x1e7def(++_0x407b47);}(_0x2178,0x13d));var _0x8217=function(_0x529a0f,_0x328763){_0x529a0f=_0x529a0f-0x0;var _0x187a88=_0x2178[_0x529a0f];return _0x187a88;};'use strict';var Sequelize=require(_0x8217('0x0'));module[_0x8217('0x1')]={'calldate':{'type':Sequelize[_0x8217('0x2')],'allowNull':![],'defaultValue':_0x8217('0x3')},'clid':{'type':Sequelize['STRING']},'src':{'type':Sequelize['STRING']},'dst':{'type':Sequelize[_0x8217('0x4')]},'dcontext':{'type':Sequelize[_0x8217('0x4')]},'channel':{'type':Sequelize[_0x8217('0x4')]},'dstchannel':{'type':Sequelize[_0x8217('0x4')]},'lastapp':{'type':Sequelize[_0x8217('0x4')]},'lastdata':{'type':Sequelize[_0x8217('0x4')]},'duration':{'type':Sequelize[_0x8217('0x5')],'allowNull':![],'defaultValue':0x0},'billsec':{'type':Sequelize[_0x8217('0x5')],'allowNull':![],'defaultValue':0x0},'disposition':{'type':Sequelize[_0x8217('0x4')]},'amaflags':{'type':Sequelize[_0x8217('0x5')],'allowNull':![],'defaultValue':0x0},'accountcode':{'type':Sequelize[_0x8217('0x4')]},'userfield':{'type':Sequelize[_0x8217('0x4')]},'uniqueid':{'type':Sequelize[_0x8217('0x4')]},'linkedid':{'type':Sequelize[_0x8217('0x4')]},'sequence':{'type':Sequelize[_0x8217('0x4')]},'peeraccount':{'type':Sequelize['STRING']},'type':{'type':Sequelize['STRING']},'tag':{'type':Sequelize[_0x8217('0x4')]}};
\ No newline at end of file
+var _0x1ffc=['DATE','1970-01-01\x2000:00:01','STRING','INTEGER','sequelize','exports'];(function(_0x41a1f5,_0x11b2b0){var _0x3c088c=function(_0x3741f1){while(--_0x3741f1){_0x41a1f5['push'](_0x41a1f5['shift']());}};_0x3c088c(++_0x11b2b0);}(_0x1ffc,0xbe));var _0xc1ff=function(_0x361b60,_0x129eed){_0x361b60=_0x361b60-0x0;var _0x3126ca=_0x1ffc[_0x361b60];return _0x3126ca;};'use strict';var Sequelize=require(_0xc1ff('0x0'));module[_0xc1ff('0x1')]={'calldate':{'type':Sequelize[_0xc1ff('0x2')],'allowNull':![],'defaultValue':_0xc1ff('0x3')},'clid':{'type':Sequelize['STRING']},'src':{'type':Sequelize[_0xc1ff('0x4')]},'dst':{'type':Sequelize[_0xc1ff('0x4')]},'dcontext':{'type':Sequelize[_0xc1ff('0x4')]},'channel':{'type':Sequelize[_0xc1ff('0x4')]},'dstchannel':{'type':Sequelize[_0xc1ff('0x4')]},'lastapp':{'type':Sequelize['STRING']},'lastdata':{'type':Sequelize['STRING']},'duration':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x0},'billsec':{'type':Sequelize[_0xc1ff('0x5')],'allowNull':![],'defaultValue':0x0},'disposition':{'type':Sequelize[_0xc1ff('0x4')]},'amaflags':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x0},'accountcode':{'type':Sequelize[_0xc1ff('0x4')]},'userfield':{'type':Sequelize[_0xc1ff('0x4')]},'uniqueid':{'type':Sequelize[_0xc1ff('0x4')]},'linkedid':{'type':Sequelize['STRING']},'sequence':{'type':Sequelize[_0xc1ff('0x4')]},'peeraccount':{'type':Sequelize[_0xc1ff('0x4')]},'type':{'type':Sequelize[_0xc1ff('0x4')]},'tag':{'type':Sequelize[_0xc1ff('0x4')]}};
\ No newline at end of file
index 286ba94..644c184 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbfdf=['model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','filters','pick','filter','where','merge','map','key','VIRTUAL','field','includeAll','include','findAll','show','find','catch','body','params','describe','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../mysqldb','sendStatus','status','json','count','offset','Content-Range','apply','reject','update','then','destroy','end','stack','name','send','Cdr','rawAttributes'];(function(_0x3b4a83,_0x166e6e){var _0x44b80f=function(_0x364227){while(--_0x364227){_0x3b4a83['push'](_0x3b4a83['shift']());}};_0x44b80f(++_0x166e6e);}(_0xbfdf,0x136));var _0xfbfd=function(_0x1c2a36,_0x7dd639){_0x1c2a36=_0x1c2a36-0x0;var _0x8b46bd=_0xbfdf[_0x1c2a36];return _0x8b46bd;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xfbfd('0x0'));var zipdir=require(_0xfbfd('0x1'));var jsonpatch=require(_0xfbfd('0x2'));var rp=require(_0xfbfd('0x3'));var moment=require(_0xfbfd('0x4'));var BPromise=require(_0xfbfd('0x5'));var Mustache=require(_0xfbfd('0x6'));var util=require(_0xfbfd('0x7'));var path=require(_0xfbfd('0x8'));var sox=require(_0xfbfd('0x9'));var csv=require(_0xfbfd('0xa'));var ejs=require(_0xfbfd('0xb'));var fs=require('fs');var _=require(_0xfbfd('0xc'));var squel=require(_0xfbfd('0xd'));var crypto=require(_0xfbfd('0xe'));var jsforce=require(_0xfbfd('0xf'));var deskjs=require('desk.js');var toCsv=require(_0xfbfd('0xa'));var querystring=require('querystring');var Papa=require(_0xfbfd('0x10'));var Redis=require(_0xfbfd('0x11'));var authService=require(_0xfbfd('0x12'));var qs=require(_0xfbfd('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xfbfd('0x14'))(_0xfbfd('0x15'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xfbfd('0x16'))['db'];function respondWithStatusCode(_0x19f744,_0x5aed90){_0x5aed90=_0x5aed90||0xcc;return function(_0x35e34b){if(_0x35e34b){return _0x19f744[_0xfbfd('0x17')](_0x5aed90);}return _0x19f744[_0xfbfd('0x18')](_0x5aed90)['end']();};}function respondWithResult(_0x305d74,_0x564d9b){_0x564d9b=_0x564d9b||0xc8;return function(_0x1b3e7b){if(_0x1b3e7b){return _0x305d74[_0xfbfd('0x18')](_0x564d9b)[_0xfbfd('0x19')](_0x1b3e7b);}};}function respondWithFilteredResult(_0x5bb804,_0x26eb1e){return function(_0x2d924f){if(_0x2d924f){var _0x107e54=_0x2d924f[_0xfbfd('0x1a')],_0x4be7cf=_0x26eb1e[_0xfbfd('0x1b')],_0x27fd41=_0x26eb1e[_0xfbfd('0x1b')]+_0x26eb1e['limit'],_0x4d7276;if(_0x27fd41>=_0x107e54){_0x27fd41=_0x107e54;_0x4d7276=0xc8;}else{_0x4d7276=0xce;}_0x5bb804[_0xfbfd('0x18')](_0x4d7276);return _0x5bb804['set'](_0xfbfd('0x1c'),_0x4be7cf+'-'+_0x27fd41+'/'+_0x107e54)[_0xfbfd('0x19')](_0x2d924f);}return null;};}function patchUpdates(_0x4bf65c){return function(_0xcec795){try{jsonpatch[_0xfbfd('0x1d')](_0xcec795,_0x4bf65c,!![]);}catch(_0x491741){return BPromise[_0xfbfd('0x1e')](_0x491741);}return _0xcec795['save']();};}function saveUpdates(_0x5d37e1,_0x167733){return function(_0x2a6856){if(_0x2a6856){return _0x2a6856[_0xfbfd('0x1f')](_0x5d37e1)[_0xfbfd('0x20')](function(_0x133fc5){return _0x133fc5;});}return null;};}function removeEntity(_0x3d2798,_0x28734d){return function(_0x3fbd5a){if(_0x3fbd5a){return _0x3fbd5a[_0xfbfd('0x21')]()[_0xfbfd('0x20')](function(){_0x3d2798[_0xfbfd('0x18')](0xcc)[_0xfbfd('0x22')]();});}};}function handleEntityNotFound(_0x57980c,_0xa60f1c){return function(_0x142942){if(!_0x142942){_0x57980c[_0xfbfd('0x17')](0x194);}return _0x142942;};}function handleError(_0x488d9e,_0x23ef2c){_0x23ef2c=_0x23ef2c||0x1f4;return function(_0x359cd5){logger['error'](_0x359cd5[_0xfbfd('0x23')]);if(_0x359cd5[_0xfbfd('0x24')]){delete _0x359cd5[_0xfbfd('0x24')];}_0x488d9e[_0xfbfd('0x18')](_0x23ef2c)[_0xfbfd('0x25')](_0x359cd5);};}exports['index']=function(_0x4040f1,_0xc04e41){var _0x4610ef={},_0xda301d={},_0x394b27={'count':0x0,'rows':[]};var _0x5d0f9e=db[_0xfbfd('0x26')][_0xfbfd('0x27')];_0xda301d[_0xfbfd('0x28')]=_[_0xfbfd('0x29')](_0x5d0f9e);_0xda301d[_0xfbfd('0x2a')]=_[_0xfbfd('0x29')](_0x4040f1[_0xfbfd('0x2a')]);_0xda301d['filters']=_[_0xfbfd('0x2b')](_0xda301d[_0xfbfd('0x28')],_0xda301d['query']);_0x4610ef[_0xfbfd('0x2c')]=_[_0xfbfd('0x2b')](_0xda301d[_0xfbfd('0x28')],qs[_0xfbfd('0x2d')](_0x4040f1['query'][_0xfbfd('0x2d')]));_0x4610ef[_0xfbfd('0x2c')]=_0x4610ef[_0xfbfd('0x2c')][_0xfbfd('0x2e')]?_0x4610ef['attributes']:_0xda301d[_0xfbfd('0x28')];if(!_0x4040f1['query'][_0xfbfd('0x2f')](_0xfbfd('0x30'))){_0x4610ef['limit']=qs[_0xfbfd('0x31')](_0x4040f1[_0xfbfd('0x2a')][_0xfbfd('0x31')]);_0x4610ef[_0xfbfd('0x1b')]=qs[_0xfbfd('0x1b')](_0x4040f1['query'][_0xfbfd('0x1b')]);}_0x4610ef[_0xfbfd('0x32')]=qs['sort'](_0x4040f1[_0xfbfd('0x2a')][_0xfbfd('0x33')]);_0x4610ef['where']=qs[_0xfbfd('0x34')](_[_0xfbfd('0x35')](_0x4040f1[_0xfbfd('0x2a')],_0xda301d[_0xfbfd('0x34')]));if(_0x4040f1['query'][_0xfbfd('0x36')]){_0x4610ef[_0xfbfd('0x37')]=_[_0xfbfd('0x38')](_0x4610ef[_0xfbfd('0x37')],{'$or':_[_0xfbfd('0x39')](_0x5d0f9e,function(_0x493c25){if(_0x493c25['type'][_0xfbfd('0x3a')]!==_0xfbfd('0x3b')){var _0x4bbe79={};_0x4bbe79[_0x493c25[_0xfbfd('0x3c')]]={'$like':'%'+_0x4040f1[_0xfbfd('0x2a')]['filter']+'%'};return _0x4bbe79;}})});}_0x4610ef=_[_0xfbfd('0x38')]({},_0x4610ef,_0x4040f1['options']);var _0x258fd8={'where':_0x4610ef[_0xfbfd('0x37')]};return db[_0xfbfd('0x26')][_0xfbfd('0x1a')](_0x258fd8)['then'](function(_0x755f69){_0x394b27[_0xfbfd('0x1a')]=_0x755f69;if(_0x4040f1['query'][_0xfbfd('0x3d')]){_0x4610ef[_0xfbfd('0x3e')]=[{'all':!![]}];}return db[_0xfbfd('0x26')][_0xfbfd('0x3f')](_0x4610ef);})[_0xfbfd('0x20')](function(_0x5d4782){_0x394b27['rows']=_0x5d4782;return _0x394b27;})[_0xfbfd('0x20')](respondWithFilteredResult(_0xc04e41,_0x4610ef))['catch'](handleError(_0xc04e41,null));};exports[_0xfbfd('0x40')]=function(_0x19ec74,_0x7e2a36){var _0x1e6240={'raw':!![],'where':{'id':_0x19ec74['params']['id']}},_0x51950b={};_0x51950b[_0xfbfd('0x28')]=_[_0xfbfd('0x29')](db[_0xfbfd('0x26')][_0xfbfd('0x27')]);_0x51950b[_0xfbfd('0x2a')]=_[_0xfbfd('0x29')](_0x19ec74['query']);_0x51950b[_0xfbfd('0x34')]=_[_0xfbfd('0x2b')](_0x51950b[_0xfbfd('0x28')],_0x51950b['query']);_0x1e6240['attributes']=_[_0xfbfd('0x2b')](_0x51950b['model'],qs[_0xfbfd('0x2d')](_0x19ec74[_0xfbfd('0x2a')][_0xfbfd('0x2d')]));_0x1e6240[_0xfbfd('0x2c')]=_0x1e6240[_0xfbfd('0x2c')][_0xfbfd('0x2e')]?_0x1e6240[_0xfbfd('0x2c')]:_0x51950b[_0xfbfd('0x28')];if(_0x19ec74[_0xfbfd('0x2a')][_0xfbfd('0x3d')]){_0x1e6240['include']=[{'all':!![]}];}_0x1e6240=_[_0xfbfd('0x38')]({},_0x1e6240,_0x19ec74['options']);return db['Cdr'][_0xfbfd('0x41')](_0x1e6240)[_0xfbfd('0x20')](handleEntityNotFound(_0x7e2a36,null))[_0xfbfd('0x20')](respondWithResult(_0x7e2a36,null))[_0xfbfd('0x42')](handleError(_0x7e2a36,null));};exports['create']=function(_0x5b192f,_0x55e76c){return db['Cdr']['create'](_0x5b192f['body'],{})[_0xfbfd('0x20')](respondWithResult(_0x55e76c,0xc9))[_0xfbfd('0x42')](handleError(_0x55e76c,null));};exports[_0xfbfd('0x1f')]=function(_0x14224a,_0x579c73){if(_0x14224a[_0xfbfd('0x43')]['id']){delete _0x14224a[_0xfbfd('0x43')]['id'];}return db['Cdr'][_0xfbfd('0x41')]({'where':{'id':_0x14224a['params']['id']}})[_0xfbfd('0x20')](handleEntityNotFound(_0x579c73,null))[_0xfbfd('0x20')](saveUpdates(_0x14224a[_0xfbfd('0x43')],null))[_0xfbfd('0x20')](respondWithResult(_0x579c73,null))['catch'](handleError(_0x579c73,null));};exports[_0xfbfd('0x21')]=function(_0x1f3b3d,_0x280d22){return db[_0xfbfd('0x26')]['find']({'where':{'id':_0x1f3b3d[_0xfbfd('0x44')]['id']}})[_0xfbfd('0x20')](handleEntityNotFound(_0x280d22,null))[_0xfbfd('0x20')](removeEntity(_0x280d22,null))['catch'](handleError(_0x280d22,null));};exports[_0xfbfd('0x45')]=function(_0x10d719,_0x47d134){return db[_0xfbfd('0x26')][_0xfbfd('0x45')]()[_0xfbfd('0x20')](respondWithResult(_0x47d134,null))[_0xfbfd('0x42')](handleError(_0x47d134,null));};
\ No newline at end of file
+var _0xb65c=['../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','end','stack','name','Cdr','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','filter','type','key','VIRTUAL','field','merge','includeAll','include','findAll','rows','catch','show','params','options','find','create','body','describe','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api'];(function(_0x3afe28,_0x17b9f4){var _0x3f5319=function(_0x37ceac){while(--_0x37ceac){_0x3afe28['push'](_0x3afe28['shift']());}};_0x3f5319(++_0x17b9f4);}(_0xb65c,0x152));var _0xcb65=function(_0x2935b2,_0x2aa718){_0x2935b2=_0x2935b2-0x0;var _0x58e217=_0xb65c[_0x2935b2];return _0x58e217;};'use strict';var pdf=require(_0xcb65('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xcb65('0x1'));var zipdir=require(_0xcb65('0x2'));var jsonpatch=require(_0xcb65('0x3'));var rp=require(_0xcb65('0x4'));var moment=require('moment');var BPromise=require(_0xcb65('0x5'));var Mustache=require(_0xcb65('0x6'));var util=require(_0xcb65('0x7'));var path=require(_0xcb65('0x8'));var sox=require(_0xcb65('0x9'));var csv=require(_0xcb65('0xa'));var ejs=require(_0xcb65('0xb'));var fs=require('fs');var _=require(_0xcb65('0xc'));var squel=require('squel');var crypto=require(_0xcb65('0xd'));var jsforce=require(_0xcb65('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xcb65('0xa'));var querystring=require(_0xcb65('0xf'));var Papa=require(_0xcb65('0x10'));var Redis=require(_0xcb65('0x11'));var authService=require(_0xcb65('0x12'));var qs=require(_0xcb65('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xcb65('0x14'))(_0xcb65('0x15'));var utils=require('../../config/utils');var config=require(_0xcb65('0x16'));var db=require(_0xcb65('0x17'))['db'];function respondWithStatusCode(_0x246f7e,_0x51ca93){_0x51ca93=_0x51ca93||0xcc;return function(_0x2f1393){if(_0x2f1393){return _0x246f7e[_0xcb65('0x18')](_0x51ca93);}return _0x246f7e[_0xcb65('0x19')](_0x51ca93)['end']();};}function respondWithResult(_0x3aca19,_0x1432d3){_0x1432d3=_0x1432d3||0xc8;return function(_0x9f25bc){if(_0x9f25bc){return _0x3aca19[_0xcb65('0x19')](_0x1432d3)[_0xcb65('0x1a')](_0x9f25bc);}};}function respondWithFilteredResult(_0x280758,_0x5514c9){return function(_0x2f1c7e){if(_0x2f1c7e){var _0x2fd601=_0x2f1c7e[_0xcb65('0x1b')],_0x35307b=_0x5514c9[_0xcb65('0x1c')],_0x555a66=_0x5514c9[_0xcb65('0x1c')]+_0x5514c9[_0xcb65('0x1d')],_0x52fd91;if(_0x555a66>=_0x2fd601){_0x555a66=_0x2fd601;_0x52fd91=0xc8;}else{_0x52fd91=0xce;}_0x280758[_0xcb65('0x19')](_0x52fd91);return _0x280758[_0xcb65('0x1e')](_0xcb65('0x1f'),_0x35307b+'-'+_0x555a66+'/'+_0x2fd601)['json'](_0x2f1c7e);}return null;};}function patchUpdates(_0x1aea95){return function(_0x4fd3e7){try{jsonpatch[_0xcb65('0x20')](_0x4fd3e7,_0x1aea95,!![]);}catch(_0x3644a8){return BPromise[_0xcb65('0x21')](_0x3644a8);}return _0x4fd3e7['save']();};}function saveUpdates(_0x317e25,_0x217411){return function(_0x555e0c){if(_0x555e0c){return _0x555e0c[_0xcb65('0x22')](_0x317e25)[_0xcb65('0x23')](function(_0x197bdf){return _0x197bdf;});}return null;};}function removeEntity(_0x477b54,_0x4b2224){return function(_0x372242){if(_0x372242){return _0x372242[_0xcb65('0x24')]()[_0xcb65('0x23')](function(){_0x477b54[_0xcb65('0x19')](0xcc)[_0xcb65('0x25')]();});}};}function handleEntityNotFound(_0xc0541c,_0xd835d6){return function(_0x4e1645){if(!_0x4e1645){_0xc0541c[_0xcb65('0x18')](0x194);}return _0x4e1645;};}function handleError(_0x2d835f,_0x50a514){_0x50a514=_0x50a514||0x1f4;return function(_0x2f553d){logger['error'](_0x2f553d[_0xcb65('0x26')]);if(_0x2f553d[_0xcb65('0x27')]){delete _0x2f553d[_0xcb65('0x27')];}_0x2d835f[_0xcb65('0x19')](_0x50a514)['send'](_0x2f553d);};}exports['index']=function(_0x1e69b9,_0x58e7ab){var _0x55c04c={},_0x94ff3c={},_0x4d2186={'count':0x0,'rows':[]};var _0x29bc01=db[_0xcb65('0x28')][_0xcb65('0x29')];_0x94ff3c[_0xcb65('0x2a')]=_[_0xcb65('0x2b')](_0x29bc01);_0x94ff3c[_0xcb65('0x2c')]=_[_0xcb65('0x2b')](_0x1e69b9[_0xcb65('0x2c')]);_0x94ff3c[_0xcb65('0x2d')]=_[_0xcb65('0x2e')](_0x94ff3c[_0xcb65('0x2a')],_0x94ff3c[_0xcb65('0x2c')]);_0x55c04c[_0xcb65('0x2f')]=_[_0xcb65('0x2e')](_0x94ff3c[_0xcb65('0x2a')],qs[_0xcb65('0x30')](_0x1e69b9[_0xcb65('0x2c')][_0xcb65('0x30')]));_0x55c04c['attributes']=_0x55c04c[_0xcb65('0x2f')][_0xcb65('0x31')]?_0x55c04c['attributes']:_0x94ff3c[_0xcb65('0x2a')];if(!_0x1e69b9[_0xcb65('0x2c')][_0xcb65('0x32')](_0xcb65('0x33'))){_0x55c04c[_0xcb65('0x1d')]=qs[_0xcb65('0x1d')](_0x1e69b9[_0xcb65('0x2c')][_0xcb65('0x1d')]);_0x55c04c['offset']=qs[_0xcb65('0x1c')](_0x1e69b9[_0xcb65('0x2c')]['offset']);}_0x55c04c['order']=qs[_0xcb65('0x34')](_0x1e69b9[_0xcb65('0x2c')][_0xcb65('0x34')]);_0x55c04c[_0xcb65('0x35')]=qs[_0xcb65('0x2d')](_['pick'](_0x1e69b9[_0xcb65('0x2c')],_0x94ff3c['filters']));if(_0x1e69b9['query'][_0xcb65('0x36')]){_0x55c04c['where']=_['merge'](_0x55c04c['where'],{'$or':_['map'](_0x29bc01,function(_0x157e38){if(_0x157e38[_0xcb65('0x37')][_0xcb65('0x38')]!==_0xcb65('0x39')){var _0x4b32d1={};_0x4b32d1[_0x157e38[_0xcb65('0x3a')]]={'$like':'%'+_0x1e69b9[_0xcb65('0x2c')][_0xcb65('0x36')]+'%'};return _0x4b32d1;}})});}_0x55c04c=_[_0xcb65('0x3b')]({},_0x55c04c,_0x1e69b9['options']);var _0x3b9ce5={'where':_0x55c04c[_0xcb65('0x35')]};return db['Cdr']['count'](_0x3b9ce5)[_0xcb65('0x23')](function(_0x1ecb9b){_0x4d2186[_0xcb65('0x1b')]=_0x1ecb9b;if(_0x1e69b9[_0xcb65('0x2c')][_0xcb65('0x3c')]){_0x55c04c[_0xcb65('0x3d')]=[{'all':!![]}];}return db[_0xcb65('0x28')][_0xcb65('0x3e')](_0x55c04c);})[_0xcb65('0x23')](function(_0x5ad4e8){_0x4d2186[_0xcb65('0x3f')]=_0x5ad4e8;return _0x4d2186;})['then'](respondWithFilteredResult(_0x58e7ab,_0x55c04c))[_0xcb65('0x40')](handleError(_0x58e7ab,null));};exports[_0xcb65('0x41')]=function(_0x1c0132,_0x55e790){var _0x3529bf={'raw':!![],'where':{'id':_0x1c0132[_0xcb65('0x42')]['id']}},_0x3d15d0={};_0x3d15d0[_0xcb65('0x2a')]=_[_0xcb65('0x2b')](db['Cdr']['rawAttributes']);_0x3d15d0['query']=_[_0xcb65('0x2b')](_0x1c0132[_0xcb65('0x2c')]);_0x3d15d0[_0xcb65('0x2d')]=_[_0xcb65('0x2e')](_0x3d15d0['model'],_0x3d15d0[_0xcb65('0x2c')]);_0x3529bf[_0xcb65('0x2f')]=_[_0xcb65('0x2e')](_0x3d15d0[_0xcb65('0x2a')],qs['fields'](_0x1c0132['query'][_0xcb65('0x30')]));_0x3529bf[_0xcb65('0x2f')]=_0x3529bf['attributes'][_0xcb65('0x31')]?_0x3529bf[_0xcb65('0x2f')]:_0x3d15d0[_0xcb65('0x2a')];if(_0x1c0132[_0xcb65('0x2c')][_0xcb65('0x3c')]){_0x3529bf[_0xcb65('0x3d')]=[{'all':!![]}];}_0x3529bf=_[_0xcb65('0x3b')]({},_0x3529bf,_0x1c0132[_0xcb65('0x43')]);return db[_0xcb65('0x28')][_0xcb65('0x44')](_0x3529bf)[_0xcb65('0x23')](handleEntityNotFound(_0x55e790,null))[_0xcb65('0x23')](respondWithResult(_0x55e790,null))[_0xcb65('0x40')](handleError(_0x55e790,null));};exports[_0xcb65('0x45')]=function(_0x131c24,_0x586a30){return db[_0xcb65('0x28')][_0xcb65('0x45')](_0x131c24[_0xcb65('0x46')],{})[_0xcb65('0x23')](respondWithResult(_0x586a30,0xc9))[_0xcb65('0x40')](handleError(_0x586a30,null));};exports[_0xcb65('0x22')]=function(_0x3eb304,_0x54d833){if(_0x3eb304[_0xcb65('0x46')]['id']){delete _0x3eb304[_0xcb65('0x46')]['id'];}return db[_0xcb65('0x28')]['find']({'where':{'id':_0x3eb304[_0xcb65('0x42')]['id']}})['then'](handleEntityNotFound(_0x54d833,null))[_0xcb65('0x23')](saveUpdates(_0x3eb304[_0xcb65('0x46')],null))[_0xcb65('0x23')](respondWithResult(_0x54d833,null))[_0xcb65('0x40')](handleError(_0x54d833,null));};exports[_0xcb65('0x24')]=function(_0xf06b13,_0x119388){return db[_0xcb65('0x28')][_0xcb65('0x44')]({'where':{'id':_0xf06b13[_0xcb65('0x42')]['id']}})[_0xcb65('0x23')](handleEntityNotFound(_0x119388,null))[_0xcb65('0x23')](removeEntity(_0x119388,null))['catch'](handleError(_0x119388,null));};exports[_0xcb65('0x47')]=function(_0x14967b,_0x2a2563){return db[_0xcb65('0x28')][_0xcb65('0x47')]()[_0xcb65('0x23')](respondWithResult(_0x2a2563,null))[_0xcb65('0x40')](handleError(_0x2a2563,null));};
\ No newline at end of file
index d56febc..4281cff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b1b=['api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./cdr.attributes','exports','define','cdr','accountcode','calldate','dst','src','uniqueid','lodash','../../config/logger'];(function(_0x3edab5,_0x4fd0bd){var _0x386707=function(_0x131eaa){while(--_0x131eaa){_0x3edab5['push'](_0x3edab5['shift']());}};_0x386707(++_0x4fd0bd);}(_0x8b1b,0x1ae));var _0xb8b1=function(_0x2dea24,_0x2fc021){_0x2dea24=_0x2dea24-0x0;var _0x309d58=_0x8b1b[_0x2dea24];return _0x309d58;};'use strict';var _=require(_0xb8b1('0x0'));var util=require('util');var logger=require(_0xb8b1('0x1'))(_0xb8b1('0x2'));var moment=require(_0xb8b1('0x3'));var BPromise=require(_0xb8b1('0x4'));var rp=require(_0xb8b1('0x5'));var fs=require('fs');var path=require(_0xb8b1('0x6'));var rimraf=require(_0xb8b1('0x7'));var config=require(_0xb8b1('0x8'));var attributes=require(_0xb8b1('0x9'));module[_0xb8b1('0xa')]=function(_0x326166,_0x633c92){return _0x326166[_0xb8b1('0xb')]('Cdr',attributes,{'tableName':_0xb8b1('0xc'),'paranoid':![],'indexes':[{'name':_0xb8b1('0xd'),'fields':[_0xb8b1('0xd')]},{'name':'calldate','fields':[_0xb8b1('0xe')]},{'name':'disposition','fields':['disposition']},{'name':'dst','fields':[_0xb8b1('0xf')]},{'name':_0xb8b1('0x10'),'fields':['src']},{'name':_0xb8b1('0x11'),'fields':[_0xb8b1('0x11')]}],'timestamps':![]});};
\ No newline at end of file
+var _0x54d5=['api','moment','path','../../config/environment','./cdr.attributes','exports','define','Cdr','accountcode','calldate','disposition','src','uniqueid','lodash','../../config/logger'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x54d5,0x148));var _0x554d=function(_0xdeb776,_0x40a245){_0xdeb776=_0xdeb776-0x0;var _0x50e950=_0x54d5[_0xdeb776];return _0x50e950;};'use strict';var _=require(_0x554d('0x0'));var util=require('util');var logger=require(_0x554d('0x1'))(_0x554d('0x2'));var moment=require(_0x554d('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x554d('0x4'));var rimraf=require('rimraf');var config=require(_0x554d('0x5'));var attributes=require(_0x554d('0x6'));module[_0x554d('0x7')]=function(_0x59700d,_0x14d00e){return _0x59700d[_0x554d('0x8')](_0x554d('0x9'),attributes,{'tableName':'cdr','paranoid':![],'indexes':[{'name':_0x554d('0xa'),'fields':[_0x554d('0xa')]},{'name':_0x554d('0xb'),'fields':[_0x554d('0xb')]},{'name':_0x554d('0xc'),'fields':[_0x554d('0xc')]},{'name':'dst','fields':['dst']},{'name':_0x554d('0xd'),'fields':[_0x554d('0xd')]},{'name':_0x554d('0xe'),'fields':[_0x554d('0xe')]}],'timestamps':![]});};
\ No newline at end of file
index 0fadea7..baca5a2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeb6a=['jayson/promise','client','request','then','Cdr,\x20%s,\x20%s','request\x20sent','Cdr,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x5a19fc,_0x58f9f4){var _0x34b413=function(_0x344feb){while(--_0x344feb){_0x5a19fc['push'](_0x5a19fc['shift']());}};_0x34b413(++_0x58f9f4);}(_0xeb6a,0x10a));var _0xaeb6=function(_0x420a8a,_0x3f9abb){_0x420a8a=_0x420a8a-0x0;var _0x1a2f41=_0xeb6a[_0x420a8a];return _0x1a2f41;};'use strict';var _=require(_0xaeb6('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xaeb6('0x1'));var rs=require(_0xaeb6('0x2'));var fs=require('fs');var Redis=require(_0xaeb6('0x3'));var db=require(_0xaeb6('0x4'))['db'];var utils=require(_0xaeb6('0x5'));var logger=require(_0xaeb6('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0xaeb6('0x7'));var client=jayson[_0xaeb6('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x32ebe3,_0x5733f0,_0x207981){return new BPromise(function(_0x489020,_0x7bde1){return client[_0xaeb6('0x9')](_0x32ebe3,_0x207981)[_0xaeb6('0xa')](function(_0x2bed42){logger['info'](_0xaeb6('0xb'),_0x5733f0,_0xaeb6('0xc'));logger['debug'](_0xaeb6('0xd'),_0x5733f0,_0xaeb6('0xc'),JSON[_0xaeb6('0xe')](_0x2bed42));if(_0x2bed42[_0xaeb6('0xf')]){if(_0x2bed42[_0xaeb6('0xf')][_0xaeb6('0x10')]===0x1f4){logger[_0xaeb6('0xf')](_0xaeb6('0xb'),_0x5733f0,_0x2bed42[_0xaeb6('0xf')][_0xaeb6('0x11')]);return _0x7bde1(_0x2bed42[_0xaeb6('0xf')]['message']);}logger[_0xaeb6('0xf')]('Cdr,\x20%s,\x20%s',_0x5733f0,_0x2bed42['error'][_0xaeb6('0x11')]);return _0x489020(_0x2bed42[_0xaeb6('0xf')][_0xaeb6('0x11')]);}else{logger[_0xaeb6('0x12')](_0xaeb6('0xb'),_0x5733f0,'request\x20sent');_0x489020(_0x2bed42[_0xaeb6('0x13')]['message']);}})[_0xaeb6('0x14')](function(_0xbc225e){logger[_0xaeb6('0xf')]('Cdr,\x20%s,\x20%s',_0x5733f0,_0xbc225e);_0x7bde1(_0xbc225e);});});}
\ No newline at end of file
+var _0x19a0=['../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','info','Cdr,\x20%s,\x20%s','request\x20sent','debug','Cdr,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','bluebird','ioredis'];(function(_0x40f7a1,_0x3b2559){var _0x5637a3=function(_0x110d64){while(--_0x110d64){_0x40f7a1['push'](_0x40f7a1['shift']());}};_0x5637a3(++_0x3b2559);}(_0x19a0,0xa4));var _0x019a=function(_0x13973d,_0x516b45){_0x13973d=_0x13973d-0x0;var _0x9d8a38=_0x19a0[_0x13973d];return _0x9d8a38;};'use strict';var _=require(_0x019a('0x0'));var util=require(_0x019a('0x1'));var moment=require('moment');var BPromise=require(_0x019a('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x019a('0x3'));var db=require(_0x019a('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x019a('0x5'))(_0x019a('0x6'));var config=require(_0x019a('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x019a('0x8')][_0x019a('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x49ac03,_0x3f7cd2,_0x5cf255){return new BPromise(function(_0x328541,_0x142371){return client['request'](_0x49ac03,_0x5cf255)['then'](function(_0x4d361e){logger[_0x019a('0xa')](_0x019a('0xb'),_0x3f7cd2,_0x019a('0xc'));logger[_0x019a('0xd')](_0x019a('0xe'),_0x3f7cd2,'request\x20sent',JSON[_0x019a('0xf')](_0x4d361e));if(_0x4d361e[_0x019a('0x10')]){if(_0x4d361e[_0x019a('0x10')][_0x019a('0x11')]===0x1f4){logger[_0x019a('0x10')]('Cdr,\x20%s,\x20%s',_0x3f7cd2,_0x4d361e[_0x019a('0x10')][_0x019a('0x12')]);return _0x142371(_0x4d361e[_0x019a('0x10')][_0x019a('0x12')]);}logger[_0x019a('0x10')](_0x019a('0xb'),_0x3f7cd2,_0x4d361e['error'][_0x019a('0x12')]);return _0x328541(_0x4d361e['error'][_0x019a('0x12')]);}else{logger['info'](_0x019a('0xb'),_0x3f7cd2,_0x019a('0xc'));_0x328541(_0x4d361e[_0x019a('0x13')][_0x019a('0x12')]);}})[_0x019a('0x14')](function(_0x16310d){logger[_0x019a('0x10')]('Cdr,\x20%s,\x20%s',_0x3f7cd2,_0x16310d);_0x142371(_0x16310d);});});}
\ No newline at end of file
index f92dbbd..ce908e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5bf2=['update','destroy','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','/describe','/:id','show','post','put'];(function(_0x1911ed,_0x4e8c73){var _0x11edaa=function(_0x216008){while(--_0x216008){_0x1911ed['push'](_0x1911ed['shift']());}};_0x11edaa(++_0x4e8c73);}(_0x5bf2,0x157));var _0x25bf=function(_0x478568,_0xf3ec83){_0x478568=_0x478568-0x0;var _0x43ec4e=_0x5bf2[_0x478568];return _0x43ec4e;};'use strict';var multer=require(_0x25bf('0x0'));var util=require('util');var path=require(_0x25bf('0x1'));var timeout=require('connect-timeout');var express=require(_0x25bf('0x2'));var router=express[_0x25bf('0x3')]();var auth=require(_0x25bf('0x4'));var interaction=require(_0x25bf('0x5'));var config=require(_0x25bf('0x6'));var controller=require('./cdr.controller');router[_0x25bf('0x7')]('/',auth[_0x25bf('0x8')](),controller['index']);router[_0x25bf('0x7')](_0x25bf('0x9'),auth[_0x25bf('0x8')](),controller['describe']);router[_0x25bf('0x7')](_0x25bf('0xa'),auth[_0x25bf('0x8')](),controller[_0x25bf('0xb')]);router[_0x25bf('0xc')]('/',auth[_0x25bf('0x8')](),controller['create']);router[_0x25bf('0xd')](_0x25bf('0xa'),auth['isAuthenticated'](),controller[_0x25bf('0xe')]);router['delete']('/:id',auth[_0x25bf('0x8')](),controller[_0x25bf('0xf')]);module[_0x25bf('0x10')]=router;
\ No newline at end of file
+var _0x386f=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/describe','isAuthenticated','describe','show','post','create','put','/:id','delete','destroy','exports','multer','util','path','connect-timeout'];(function(_0x2b8347,_0x14e3f2){var _0x15e93e=function(_0x2b046b){while(--_0x2b046b){_0x2b8347['push'](_0x2b8347['shift']());}};_0x15e93e(++_0x14e3f2);}(_0x386f,0x11a));var _0xf386=function(_0x55ce77,_0x4d26ea){_0x55ce77=_0x55ce77-0x0;var _0x3cdca4=_0x386f[_0x55ce77];return _0x3cdca4;};'use strict';var multer=require(_0xf386('0x0'));var util=require(_0xf386('0x1'));var path=require(_0xf386('0x2'));var timeout=require(_0xf386('0x3'));var express=require(_0xf386('0x4'));var router=express[_0xf386('0x5')]();var auth=require(_0xf386('0x6'));var interaction=require(_0xf386('0x7'));var config=require(_0xf386('0x8'));var controller=require('./cdr.controller');router[_0xf386('0x9')]('/',auth['isAuthenticated'](),controller[_0xf386('0xa')]);router[_0xf386('0x9')](_0xf386('0xb'),auth[_0xf386('0xc')](),controller[_0xf386('0xd')]);router[_0xf386('0x9')]('/:id',auth[_0xf386('0xc')](),controller[_0xf386('0xe')]);router[_0xf386('0xf')]('/',auth[_0xf386('0xc')](),controller[_0xf386('0x10')]);router[_0xf386('0x11')](_0xf386('0x12'),auth[_0xf386('0xc')](),controller['update']);router[_0xf386('0x13')](_0xf386('0x12'),auth['isAuthenticated'](),controller[_0xf386('0x14')]);module[_0xf386('0x15')]=router;
\ No newline at end of file
index aa7c518..afc0be0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x084b=['TEXT','STRING','*,*,*,*','sequelize','noop'];(function(_0x557fd2,_0x2c0a7a){var _0x1b54a2=function(_0x2e439b){while(--_0x2e439b){_0x557fd2['push'](_0x557fd2['shift']());}};_0x1b54a2(++_0x2c0a7a);}(_0x084b,0xd5));var _0xb084=function(_0x46b2c7,_0x3b5804){_0x46b2c7=_0x46b2c7-0x0;var _0x599def=_0x084b[_0x46b2c7];return _0x599def;};'use strict';var Sequelize=require(_0xb084('0x0'));module['exports']={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xb084('0x1')},'appdata':{'type':Sequelize[_0xb084('0x2')]()},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize[_0xb084('0x3')],'defaultValue':_0xb084('0x4')}};
\ No newline at end of file
+var _0xc9c3=['INTEGER','noop','TEXT','STRING','*,*,*,*'];(function(_0x521557,_0x2420f0){var _0xb56f03=function(_0x3162a1){while(--_0x3162a1){_0x521557['push'](_0x521557['shift']());}};_0xb56f03(++_0x2420f0);}(_0xc9c3,0x96));var _0x3c9c=function(_0x586470,_0xbd543d){_0x586470=_0x586470-0x0;var _0x561135=_0xc9c3[_0x586470];return _0x561135;};'use strict';var Sequelize=require('sequelize');module['exports']={'priority':{'type':Sequelize[_0x3c9c('0x0')],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x3c9c('0x1')},'appdata':{'type':Sequelize[_0x3c9c('0x2')]()},'description':{'type':Sequelize[_0x3c9c('0x3')]},'interval':{'type':Sequelize[_0x3c9c('0x3')],'defaultValue':_0x3c9c('0x4')}};
\ No newline at end of file
index 1fbdb07..7699418 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe09a=['name','show','model','keys','ChatApplication','query','filters','attributes','fields','includeAll','include','find','catch','body','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','lodash','squel','crypto','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','end','json','count','offset','limit','set','Content-Range','apply','save','update','destroy','then','status','error','stack'];(function(_0x4f3b2d,_0x3bbf46){var _0x3dddfa=function(_0xb8179a){while(--_0xb8179a){_0x4f3b2d['push'](_0x4f3b2d['shift']());}};_0x3dddfa(++_0x3bbf46);}(_0xe09a,0x153));var _0xae09=function(_0x367a3d,_0x452717){_0x367a3d=_0x367a3d-0x0;var _0x460539=_0xe09a[_0x367a3d];return _0x460539;};'use strict';var pdf=require(_0xae09('0x0'));var emlformat=require(_0xae09('0x1'));var rimraf=require(_0xae09('0x2'));var zipdir=require(_0xae09('0x3'));var jsonpatch=require(_0xae09('0x4'));var rp=require(_0xae09('0x5'));var moment=require(_0xae09('0x6'));var BPromise=require(_0xae09('0x7'));var Mustache=require('mustache');var util=require(_0xae09('0x8'));var path=require(_0xae09('0x9'));var sox=require(_0xae09('0xa'));var csv=require(_0xae09('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xae09('0xc'));var squel=require(_0xae09('0xd'));var crypto=require(_0xae09('0xe'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xae09('0xb'));var querystring=require('querystring');var Papa=require(_0xae09('0xf'));var Redis=require(_0xae09('0x10'));var authService=require(_0xae09('0x11'));var qs=require(_0xae09('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xae09('0x13'))(_0xae09('0x14'));var utils=require(_0xae09('0x15'));var config=require('../../config/environment');var db=require(_0xae09('0x16'))['db'];function respondWithStatusCode(_0x3d7133,_0x29bb9a){_0x29bb9a=_0x29bb9a||0xcc;return function(_0x3e20dd){if(_0x3e20dd){return _0x3d7133[_0xae09('0x17')](_0x29bb9a);}return _0x3d7133['status'](_0x29bb9a)[_0xae09('0x18')]();};}function respondWithResult(_0x521bd0,_0x42ced3){_0x42ced3=_0x42ced3||0xc8;return function(_0x5b09e0){if(_0x5b09e0){return _0x521bd0['status'](_0x42ced3)[_0xae09('0x19')](_0x5b09e0);}};}function respondWithFilteredResult(_0x3090f8,_0x40a4b3){return function(_0xad4bb9){if(_0xad4bb9){var _0x2774ec=_0xad4bb9[_0xae09('0x1a')],_0xb914c9=_0x40a4b3[_0xae09('0x1b')],_0x32f6b8=_0x40a4b3[_0xae09('0x1b')]+_0x40a4b3[_0xae09('0x1c')],_0x4263ff;if(_0x32f6b8>=_0x2774ec){_0x32f6b8=_0x2774ec;_0x4263ff=0xc8;}else{_0x4263ff=0xce;}_0x3090f8['status'](_0x4263ff);return _0x3090f8[_0xae09('0x1d')](_0xae09('0x1e'),_0xb914c9+'-'+_0x32f6b8+'/'+_0x2774ec)[_0xae09('0x19')](_0xad4bb9);}return null;};}function patchUpdates(_0x596f6b){return function(_0x408408){try{jsonpatch[_0xae09('0x1f')](_0x408408,_0x596f6b,!![]);}catch(_0x4ee144){return BPromise['reject'](_0x4ee144);}return _0x408408[_0xae09('0x20')]();};}function saveUpdates(_0x3c0821,_0x5134d4){return function(_0x1dcadc){if(_0x1dcadc){return _0x1dcadc[_0xae09('0x21')](_0x3c0821)['then'](function(_0x55d443){return _0x55d443;});}return null;};}function removeEntity(_0x1ef16d,_0x2c129f){return function(_0x172edb){if(_0x172edb){return _0x172edb[_0xae09('0x22')]()[_0xae09('0x23')](function(){_0x1ef16d[_0xae09('0x24')](0xcc)['end']();});}};}function handleEntityNotFound(_0x201bbd,_0x58b903){return function(_0x50bb27){if(!_0x50bb27){_0x201bbd[_0xae09('0x17')](0x194);}return _0x50bb27;};}function handleError(_0x5ebbb7,_0x2b6b02){_0x2b6b02=_0x2b6b02||0x1f4;return function(_0x228ccb){logger[_0xae09('0x25')](_0x228ccb[_0xae09('0x26')]);if(_0x228ccb[_0xae09('0x27')]){delete _0x228ccb[_0xae09('0x27')];}_0x5ebbb7[_0xae09('0x24')](_0x2b6b02)['send'](_0x228ccb);};}exports[_0xae09('0x28')]=function(_0xe0ad5f,_0x35f72c){var _0x3ba549={'raw':!![],'where':{'id':_0xe0ad5f['params']['id']}},_0x35de4e={};_0x35de4e[_0xae09('0x29')]=_[_0xae09('0x2a')](db[_0xae09('0x2b')]['rawAttributes']);_0x35de4e[_0xae09('0x2c')]=_[_0xae09('0x2a')](_0xe0ad5f[_0xae09('0x2c')]);_0x35de4e[_0xae09('0x2d')]=_['intersection'](_0x35de4e[_0xae09('0x29')],_0x35de4e[_0xae09('0x2c')]);_0x3ba549[_0xae09('0x2e')]=_['intersection'](_0x35de4e[_0xae09('0x29')],qs['fields'](_0xe0ad5f[_0xae09('0x2c')][_0xae09('0x2f')]));_0x3ba549[_0xae09('0x2e')]=_0x3ba549[_0xae09('0x2e')]['length']?_0x3ba549[_0xae09('0x2e')]:_0x35de4e[_0xae09('0x29')];if(_0xe0ad5f[_0xae09('0x2c')][_0xae09('0x30')]){_0x3ba549[_0xae09('0x31')]=[{'all':!![]}];}_0x3ba549=_['merge']({},_0x3ba549,_0xe0ad5f['options']);return db[_0xae09('0x2b')][_0xae09('0x32')](_0x3ba549)[_0xae09('0x23')](handleEntityNotFound(_0x35f72c,null))[_0xae09('0x23')](respondWithResult(_0x35f72c,null))[_0xae09('0x33')](handleError(_0x35f72c,null));};exports['update']=function(_0x34e4b6,_0x15c8c5){if(_0x34e4b6['body']['id']){delete _0x34e4b6[_0xae09('0x34')]['id'];}return db['ChatApplication'][_0xae09('0x32')]({'where':{'id':_0x34e4b6[_0xae09('0x35')]['id']}})[_0xae09('0x23')](handleEntityNotFound(_0x15c8c5,null))['then'](saveUpdates(_0x34e4b6['body'],null))[_0xae09('0x23')](respondWithResult(_0x15c8c5,null))[_0xae09('0x33')](handleError(_0x15c8c5,null));};exports['destroy']=function(_0xad6c5b,_0x2fafbf){return db[_0xae09('0x2b')][_0xae09('0x32')]({'where':{'id':_0xad6c5b[_0xae09('0x35')]['id']}})['then'](handleEntityNotFound(_0x2fafbf,null))[_0xae09('0x23')](removeEntity(_0x2fafbf,null))[_0xae09('0x33')](handleError(_0x2fafbf,null));};
\ No newline at end of file
+var _0xa8ea=['reject','update','then','destroy','sendStatus','error','name','send','show','params','model','ChatApplication','rawAttributes','query','keys','filters','intersection','fields','attributes','length','includeAll','include','merge','find','body','catch','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','lodash','squel','crypto','jsforce','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','status','end','json','count','offset','apply'];(function(_0xb8cfbe,_0x2e81b6){var _0x227d51=function(_0x5cb1ff){while(--_0x5cb1ff){_0xb8cfbe['push'](_0xb8cfbe['shift']());}};_0x227d51(++_0x2e81b6);}(_0xa8ea,0x12d));var _0xaa8e=function(_0x1d59a5,_0x892324){_0x1d59a5=_0x1d59a5-0x0;var _0x5bed47=_0xa8ea[_0x1d59a5];return _0x5bed47;};'use strict';var pdf=require(_0xaa8e('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xaa8e('0x1'));var zipdir=require(_0xaa8e('0x2'));var jsonpatch=require(_0xaa8e('0x3'));var rp=require(_0xaa8e('0x4'));var moment=require(_0xaa8e('0x5'));var BPromise=require(_0xaa8e('0x6'));var Mustache=require(_0xaa8e('0x7'));var util=require('util');var path=require(_0xaa8e('0x8'));var sox=require(_0xaa8e('0x9'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xaa8e('0xa'));var squel=require(_0xaa8e('0xb'));var crypto=require(_0xaa8e('0xc'));var jsforce=require(_0xaa8e('0xd'));var deskjs=require('desk.js');var toCsv=require(_0xaa8e('0xe'));var querystring=require(_0xaa8e('0xf'));var Papa=require(_0xaa8e('0x10'));var Redis=require('ioredis');var authService=require(_0xaa8e('0x11'));var qs=require(_0xaa8e('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xaa8e('0x13'))(_0xaa8e('0x14'));var utils=require(_0xaa8e('0x15'));var config=require('../../config/environment');var db=require(_0xaa8e('0x16'))['db'];function respondWithStatusCode(_0xa084ff,_0x55d354){_0x55d354=_0x55d354||0xcc;return function(_0x919755){if(_0x919755){return _0xa084ff['sendStatus'](_0x55d354);}return _0xa084ff[_0xaa8e('0x17')](_0x55d354)[_0xaa8e('0x18')]();};}function respondWithResult(_0x56db5d,_0x16de02){_0x16de02=_0x16de02||0xc8;return function(_0x3aa039){if(_0x3aa039){return _0x56db5d[_0xaa8e('0x17')](_0x16de02)[_0xaa8e('0x19')](_0x3aa039);}};}function respondWithFilteredResult(_0x33ffd4,_0x3809f0){return function(_0x3c6b79){if(_0x3c6b79){var _0x5a48d0=_0x3c6b79[_0xaa8e('0x1a')],_0xa0430=_0x3809f0[_0xaa8e('0x1b')],_0x47379e=_0x3809f0['offset']+_0x3809f0['limit'],_0x560487;if(_0x47379e>=_0x5a48d0){_0x47379e=_0x5a48d0;_0x560487=0xc8;}else{_0x560487=0xce;}_0x33ffd4[_0xaa8e('0x17')](_0x560487);return _0x33ffd4['set']('Content-Range',_0xa0430+'-'+_0x47379e+'/'+_0x5a48d0)['json'](_0x3c6b79);}return null;};}function patchUpdates(_0x9feb94){return function(_0x24f6b1){try{jsonpatch[_0xaa8e('0x1c')](_0x24f6b1,_0x9feb94,!![]);}catch(_0x20a1bc){return BPromise[_0xaa8e('0x1d')](_0x20a1bc);}return _0x24f6b1['save']();};}function saveUpdates(_0x29e245,_0xfc28df){return function(_0x74bf53){if(_0x74bf53){return _0x74bf53[_0xaa8e('0x1e')](_0x29e245)[_0xaa8e('0x1f')](function(_0x3dea6e){return _0x3dea6e;});}return null;};}function removeEntity(_0x3933ab,_0x186458){return function(_0x183ae1){if(_0x183ae1){return _0x183ae1[_0xaa8e('0x20')]()['then'](function(){_0x3933ab[_0xaa8e('0x17')](0xcc)[_0xaa8e('0x18')]();});}};}function handleEntityNotFound(_0x16f780,_0x50ac72){return function(_0x3b5668){if(!_0x3b5668){_0x16f780[_0xaa8e('0x21')](0x194);}return _0x3b5668;};}function handleError(_0x28befd,_0x2b7b9d){_0x2b7b9d=_0x2b7b9d||0x1f4;return function(_0x1fb123){logger[_0xaa8e('0x22')](_0x1fb123['stack']);if(_0x1fb123[_0xaa8e('0x23')]){delete _0x1fb123[_0xaa8e('0x23')];}_0x28befd[_0xaa8e('0x17')](_0x2b7b9d)[_0xaa8e('0x24')](_0x1fb123);};}exports[_0xaa8e('0x25')]=function(_0x35cf28,_0x4819de){var _0x5bdeb4={'raw':!![],'where':{'id':_0x35cf28[_0xaa8e('0x26')]['id']}},_0x28fbe2={};_0x28fbe2[_0xaa8e('0x27')]=_['keys'](db[_0xaa8e('0x28')][_0xaa8e('0x29')]);_0x28fbe2[_0xaa8e('0x2a')]=_[_0xaa8e('0x2b')](_0x35cf28[_0xaa8e('0x2a')]);_0x28fbe2[_0xaa8e('0x2c')]=_[_0xaa8e('0x2d')](_0x28fbe2[_0xaa8e('0x27')],_0x28fbe2[_0xaa8e('0x2a')]);_0x5bdeb4['attributes']=_[_0xaa8e('0x2d')](_0x28fbe2[_0xaa8e('0x27')],qs[_0xaa8e('0x2e')](_0x35cf28[_0xaa8e('0x2a')]['fields']));_0x5bdeb4[_0xaa8e('0x2f')]=_0x5bdeb4['attributes'][_0xaa8e('0x30')]?_0x5bdeb4[_0xaa8e('0x2f')]:_0x28fbe2[_0xaa8e('0x27')];if(_0x35cf28[_0xaa8e('0x2a')][_0xaa8e('0x31')]){_0x5bdeb4[_0xaa8e('0x32')]=[{'all':!![]}];}_0x5bdeb4=_[_0xaa8e('0x33')]({},_0x5bdeb4,_0x35cf28['options']);return db[_0xaa8e('0x28')][_0xaa8e('0x34')](_0x5bdeb4)[_0xaa8e('0x1f')](handleEntityNotFound(_0x4819de,null))[_0xaa8e('0x1f')](respondWithResult(_0x4819de,null))['catch'](handleError(_0x4819de,null));};exports['update']=function(_0x4a5b23,_0x3013a8){if(_0x4a5b23['body']['id']){delete _0x4a5b23['body']['id'];}return db[_0xaa8e('0x28')][_0xaa8e('0x34')]({'where':{'id':_0x4a5b23['params']['id']}})[_0xaa8e('0x1f')](handleEntityNotFound(_0x3013a8,null))[_0xaa8e('0x1f')](saveUpdates(_0x4a5b23[_0xaa8e('0x35')],null))['then'](respondWithResult(_0x3013a8,null))[_0xaa8e('0x36')](handleError(_0x3013a8,null));};exports['destroy']=function(_0x23fdea,_0x4a861c){return db[_0xaa8e('0x28')][_0xaa8e('0x34')]({'where':{'id':_0x23fdea[_0xaa8e('0x26')]['id']}})[_0xaa8e('0x1f')](handleEntityNotFound(_0x4a861c,null))[_0xaa8e('0x1f')](removeEntity(_0x4a861c,null))[_0xaa8e('0x36')](handleError(_0x4a861c,null));};
\ No newline at end of file
index bff1b4a..9b33d54 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6481=['rimraf','../../config/environment','./chatApplication.attributes','define','chat_applications','lodash','util','api','moment','bluebird'];(function(_0xdfe8b5,_0x17dfbf){var _0x1a6543=function(_0x9d51fc){while(--_0x9d51fc){_0xdfe8b5['push'](_0xdfe8b5['shift']());}};_0x1a6543(++_0x17dfbf);}(_0x6481,0xe1));var _0x1648=function(_0x3b1fe5,_0x18d3ba){_0x3b1fe5=_0x3b1fe5-0x0;var _0x4949cd=_0x6481[_0x3b1fe5];return _0x4949cd;};'use strict';var _=require(_0x1648('0x0'));var util=require(_0x1648('0x1'));var logger=require('../../config/logger')(_0x1648('0x2'));var moment=require(_0x1648('0x3'));var BPromise=require(_0x1648('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x1648('0x5'));var config=require(_0x1648('0x6'));var attributes=require(_0x1648('0x7'));module['exports']=function(_0x1259cf,_0x5228d7){return _0x1259cf[_0x1648('0x8')]('ChatApplication',attributes,{'tableName':_0x1648('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0x7d93=['rimraf','../../config/environment','define','ChatApplication','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','bluebird','request-promise','path'];(function(_0x130705,_0x2d266b){var _0x1fa991=function(_0x395639){while(--_0x395639){_0x130705['push'](_0x130705['shift']());}};_0x1fa991(++_0x2d266b);}(_0x7d93,0x1b5));var _0x37d9=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7d93[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x37d9('0x0'));var util=require(_0x37d9('0x1'));var logger=require(_0x37d9('0x2'))(_0x37d9('0x3'));var moment=require('moment');var BPromise=require(_0x37d9('0x4'));var rp=require(_0x37d9('0x5'));var fs=require('fs');var path=require(_0x37d9('0x6'));var rimraf=require(_0x37d9('0x7'));var config=require(_0x37d9('0x8'));var attributes=require('./chatApplication.attributes');module['exports']=function(_0x3fe819,_0x188a32){return _0x3fe819[_0x37d9('0x9')](_0x37d9('0xa'),attributes,{'tableName':'chat_applications','paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':_0x37d9('0xb')});};
\ No newline at end of file
index 81f1f1f..ca4cc6c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3333=['util','moment','ioredis','../../mysqldb','rpc','jayson/promise','client','http','then','info','ChatApplication,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch'];(function(_0x62c958,_0x2bfdbc){var _0x57ec61=function(_0x5c0094){while(--_0x5c0094){_0x62c958['push'](_0x62c958['shift']());}};_0x57ec61(++_0x2bfdbc);}(_0x3333,0xf7));var _0x3333=function(_0x39d544,_0x35c14f){_0x39d544=_0x39d544-0x0;var _0x5a5ff2=_0x3333[_0x39d544];return _0x5a5ff2;};'use strict';var _=require('lodash');var util=require(_0x3333('0x0'));var moment=require(_0x3333('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x3333('0x2'));var db=require(_0x3333('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x3333('0x4'));var config=require('../../config/environment');var jayson=require(_0x3333('0x5'));var client=jayson[_0x3333('0x6')][_0x3333('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x1ad487,_0x47f370,_0x4c1c12){return new BPromise(function(_0x36a725,_0xfc6003){return client['request'](_0x1ad487,_0x4c1c12)[_0x3333('0x8')](function(_0x5eea2b){logger[_0x3333('0x9')](_0x3333('0xa'),_0x47f370,_0x3333('0xb'));logger[_0x3333('0xc')]('ChatApplication,\x20%s,\x20%s,\x20%s',_0x47f370,_0x3333('0xb'),JSON[_0x3333('0xd')](_0x5eea2b));if(_0x5eea2b[_0x3333('0xe')]){if(_0x5eea2b['error'][_0x3333('0xf')]===0x1f4){logger[_0x3333('0xe')](_0x3333('0xa'),_0x47f370,_0x5eea2b[_0x3333('0xe')][_0x3333('0x10')]);return _0xfc6003(_0x5eea2b[_0x3333('0xe')]['message']);}logger[_0x3333('0xe')](_0x3333('0xa'),_0x47f370,_0x5eea2b['error'][_0x3333('0x10')]);return _0x36a725(_0x5eea2b[_0x3333('0xe')][_0x3333('0x10')]);}else{logger[_0x3333('0x9')](_0x3333('0xa'),_0x47f370,_0x3333('0xb'));_0x36a725(_0x5eea2b[_0x3333('0x11')]['message']);}})[_0x3333('0x12')](function(_0x4406b4){logger[_0x3333('0xe')]('ChatApplication,\x20%s,\x20%s',_0x47f370,_0x4406b4);_0xfc6003(_0x4406b4);});});}
\ No newline at end of file
+var _0xf093=['lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','ChatApplication,\x20%s,\x20%s','request\x20sent','debug','ChatApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch'];(function(_0x369151,_0x179f72){var _0x4292d5=function(_0x330422){while(--_0x330422){_0x369151['push'](_0x369151['shift']());}};_0x4292d5(++_0x179f72);}(_0xf093,0x1f4));var _0x3f09=function(_0x11accf,_0x10087e){_0x11accf=_0x11accf-0x0;var _0x16de81=_0xf093[_0x11accf];return _0x16de81;};'use strict';var _=require(_0x3f09('0x0'));var util=require(_0x3f09('0x1'));var moment=require(_0x3f09('0x2'));var BPromise=require(_0x3f09('0x3'));var rs=require(_0x3f09('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x3f09('0x5'));var logger=require(_0x3f09('0x6'))(_0x3f09('0x7'));var config=require(_0x3f09('0x8'));var jayson=require(_0x3f09('0x9'));var client=jayson[_0x3f09('0xa')][_0x3f09('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5c65e,_0x26a549,_0x281e91){return new BPromise(function(_0x2a2309,_0x208854){return client[_0x3f09('0xc')](_0x5c65e,_0x281e91)[_0x3f09('0xd')](function(_0x59a2e8){logger[_0x3f09('0xe')](_0x3f09('0xf'),_0x26a549,_0x3f09('0x10'));logger[_0x3f09('0x11')](_0x3f09('0x12'),_0x26a549,_0x3f09('0x10'),JSON[_0x3f09('0x13')](_0x59a2e8));if(_0x59a2e8['error']){if(_0x59a2e8[_0x3f09('0x14')][_0x3f09('0x15')]===0x1f4){logger[_0x3f09('0x14')](_0x3f09('0xf'),_0x26a549,_0x59a2e8[_0x3f09('0x14')][_0x3f09('0x16')]);return _0x208854(_0x59a2e8[_0x3f09('0x14')][_0x3f09('0x16')]);}logger[_0x3f09('0x14')](_0x3f09('0xf'),_0x26a549,_0x59a2e8['error'][_0x3f09('0x16')]);return _0x2a2309(_0x59a2e8['error'][_0x3f09('0x16')]);}else{logger[_0x3f09('0xe')]('ChatApplication,\x20%s,\x20%s',_0x26a549,'request\x20sent');_0x2a2309(_0x59a2e8[_0x3f09('0x17')][_0x3f09('0x16')]);}})[_0x3f09('0x18')](function(_0x145154){logger['error'](_0x3f09('0xf'),_0x26a549,_0x145154);_0x208854(_0x145154);});});}
\ No newline at end of file
index af7a2d0..046b924 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb9b0=['show','isAuthenticated','update','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','./chatApplication.controller','get','/:id'];(function(_0x5417b8,_0x416240){var _0x357b7c=function(_0x1d3733){while(--_0x1d3733){_0x5417b8['push'](_0x5417b8['shift']());}};_0x357b7c(++_0x416240);}(_0xb9b0,0x16d));var _0x0b9b=function(_0x54c2ea,_0xccde6d){_0x54c2ea=_0x54c2ea-0x0;var _0x4e4321=_0xb9b0[_0x54c2ea];return _0x4e4321;};'use strict';var multer=require(_0x0b9b('0x0'));var util=require(_0x0b9b('0x1'));var path=require(_0x0b9b('0x2'));var timeout=require(_0x0b9b('0x3'));var express=require(_0x0b9b('0x4'));var router=express[_0x0b9b('0x5')]();var auth=require(_0x0b9b('0x6'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x0b9b('0x7'));router[_0x0b9b('0x8')](_0x0b9b('0x9'),auth['isAuthenticated'](),controller[_0x0b9b('0xa')]);router['put'](_0x0b9b('0x9'),auth[_0x0b9b('0xb')](),controller[_0x0b9b('0xc')]);router['delete'](_0x0b9b('0x9'),auth[_0x0b9b('0xb')](),controller[_0x0b9b('0xd')]);module[_0x0b9b('0xe')]=router;
\ No newline at end of file
+var _0x7ad6=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','/:id','isAuthenticated','show','put','update','delete','destroy','exports','util','path','connect-timeout'];(function(_0x1e1fcc,_0x537a1c){var _0x23948e=function(_0x3176cc){while(--_0x3176cc){_0x1e1fcc['push'](_0x1e1fcc['shift']());}};_0x23948e(++_0x537a1c);}(_0x7ad6,0x140));var _0x67ad=function(_0x4154a6,_0x2c0b8e){_0x4154a6=_0x4154a6-0x0;var _0x3b2786=_0x7ad6[_0x4154a6];return _0x3b2786;};'use strict';var multer=require('multer');var util=require(_0x67ad('0x0'));var path=require(_0x67ad('0x1'));var timeout=require(_0x67ad('0x2'));var express=require(_0x67ad('0x3'));var router=express[_0x67ad('0x4')]();var auth=require(_0x67ad('0x5'));var interaction=require(_0x67ad('0x6'));var config=require(_0x67ad('0x7'));var controller=require('./chatApplication.controller');router[_0x67ad('0x8')](_0x67ad('0x9'),auth[_0x67ad('0xa')](),controller[_0x67ad('0xb')]);router[_0x67ad('0xc')](_0x67ad('0x9'),auth['isAuthenticated'](),controller[_0x67ad('0xd')]);router[_0x67ad('0xe')]('/:id',auth[_0x67ad('0xa')](),controller[_0x67ad('0xf')]);module[_0x67ad('0x10')]=router;
\ No newline at end of file
index aeeda8e..f5f7275 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd7a3=['BOOLEAN','sequelize','STRING'];(function(_0x8a654b,_0x4be2f9){var _0x94bfbb=function(_0x29efa4){while(--_0x29efa4){_0x8a654b['push'](_0x8a654b['shift']());}};_0x94bfbb(++_0x4be2f9);}(_0xd7a3,0xf4));var _0x3d7a=function(_0x256b72,_0x340985){_0x256b72=_0x256b72-0x0;var _0x2183e3=_0xd7a3[_0x256b72];return _0x2183e3;};'use strict';var Sequelize=require(_0x3d7a('0x0'));module['exports']={'name':{'type':Sequelize['STRING'],'allowNull':![]},'description':{'type':Sequelize[_0x3d7a('0x1')]},'write':{'type':Sequelize[_0x3d7a('0x2')],'defaultValue':!![]}};
\ No newline at end of file
+var _0x433e=['exports','STRING','BOOLEAN'];(function(_0x449b78,_0x2d1271){var _0x20f292=function(_0x1de82e){while(--_0x1de82e){_0x449b78['push'](_0x449b78['shift']());}};_0x20f292(++_0x2d1271);}(_0x433e,0xa2));var _0xe433=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x433e[_0x321bb2];return _0x9c12ed;};'use strict';var Sequelize=require('sequelize');module[_0xe433('0x0')]={'name':{'type':Sequelize[_0xe433('0x1')],'allowNull':![]},'description':{'type':Sequelize[_0xe433('0x1')]},'write':{'type':Sequelize[_0xe433('0x2')],'defaultValue':!![]}};
\ No newline at end of file
index a772d02..e36362e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x01c0=['user','toInteger','addMembers','ids','omit','findOne','User','options','getMembers','removeMembers','find','addMessage','ChatGroupId','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./chatGroup.socket','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','ChatGroup,\x20%s,\x20%s','debug','ChatGroup,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','status','end','json','count','offset','limit','apply','reject','save','update','destroy','sendStatus','stack','send','index','ChatGroup','rawAttributes','model','keys','query','filters','attributes','intersection','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','includeAll','findAll','rows','show','params','length','include','create','body','getUnread','ChatInternalMessage'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0x01c0,0x1d1));var _0x001c=function(_0x5627e1,_0x1b2dbf){_0x5627e1=_0x5627e1-0x0;var _0x2f013f=_0x01c0[_0x5627e1];return _0x2f013f;};'use strict';var pdf=require(_0x001c('0x0'));var emlformat=require(_0x001c('0x1'));var rimraf=require(_0x001c('0x2'));var zipdir=require(_0x001c('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x001c('0x4'));var moment=require(_0x001c('0x5'));var BPromise=require(_0x001c('0x6'));var Mustache=require(_0x001c('0x7'));var util=require(_0x001c('0x8'));var path=require(_0x001c('0x9'));var sox=require(_0x001c('0xa'));var csv=require('to-csv');var ejs=require(_0x001c('0xb'));var fs=require('fs');var _=require(_0x001c('0xc'));var squel=require(_0x001c('0xd'));var crypto=require(_0x001c('0xe'));var jsforce=require(_0x001c('0xf'));var deskjs=require(_0x001c('0x10'));var toCsv=require(_0x001c('0x11'));var querystring=require('querystring');var Papa=require(_0x001c('0x12'));var Redis=require(_0x001c('0x13'));var authService=require(_0x001c('0x14'));var qs=require(_0x001c('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x001c('0x16'))('api');var utils=require(_0x001c('0x17'));var config=require(_0x001c('0x18'));var db=require(_0x001c('0x19'))['db'];config['redis']=_[_0x001c('0x1a')](config[_0x001c('0x1b')],{'host':_0x001c('0x1c'),'port':0x18eb});var socket=require(_0x001c('0x1d'))(new Redis(config['redis']));require(_0x001c('0x1e'))['register'](socket);var jayson=require('jayson/promise');var client=jayson[_0x001c('0x1f')][_0x001c('0x20')]({'port':0x232a});function checkPasswordPattern(_0x3f34ef,_0x265953,_0x5caade){if(_0x5caade){var _0x3a3473=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3a3473[_0x001c('0x21')](_0x265953)){return _0x3f34ef;}else{throw new Error(_0x001c('0x22'));}}else{return _0x3f34ef;}}function respondWithRpcPromise(_0x45c237,_0x2c1d68,_0x491a27,_0x5c323b){return new BPromise(function(_0x5cfa7a,_0x5aab85){var _0x444f8f=_0x5c323b||client;return _0x444f8f['request'](_0x45c237,_0x491a27)[_0x001c('0x23')](function(_0x11643b){logger[_0x001c('0x24')](_0x001c('0x25'),_0x2c1d68,'request\x20sent');logger[_0x001c('0x26')](_0x001c('0x27'),_0x2c1d68,_0x001c('0x28'),JSON[_0x001c('0x29')](_0x11643b));if(_0x11643b[_0x001c('0x2a')]){if(_0x11643b[_0x001c('0x2a')][_0x001c('0x2b')]===0x1f4){logger[_0x001c('0x2a')](_0x001c('0x25'),_0x2c1d68,_0x11643b[_0x001c('0x2a')][_0x001c('0x2c')]);return _0x5aab85(_0x11643b['error']['message']);}logger[_0x001c('0x2a')](_0x001c('0x25'),_0x2c1d68,_0x11643b[_0x001c('0x2a')]['message']);return _0x5cfa7a(_0x11643b[_0x001c('0x2a')][_0x001c('0x2c')]);}else{logger[_0x001c('0x24')]('ChatGroup,\x20%s,\x20%s',_0x2c1d68,'request\x20sent');_0x5cfa7a(_0x11643b[_0x001c('0x2d')][_0x001c('0x2c')]);}})[_0x001c('0x2e')](function(_0x15e5a5){logger[_0x001c('0x2a')]('ChatGroup,\x20%s,\x20%s',_0x2c1d68,_0x15e5a5);_0x5aab85(_0x15e5a5);});});}function respondWithStatusCode(_0x2f816c,_0x12066f){_0x12066f=_0x12066f||0xcc;return function(_0x29851a){if(_0x29851a){return _0x2f816c['sendStatus'](_0x12066f);}return _0x2f816c[_0x001c('0x2f')](_0x12066f)[_0x001c('0x30')]();};}function respondWithResult(_0x1f560b,_0x334dcc){_0x334dcc=_0x334dcc||0xc8;return function(_0x359639){if(_0x359639){return _0x1f560b[_0x001c('0x2f')](_0x334dcc)[_0x001c('0x31')](_0x359639);}};}function respondWithFilteredResult(_0x567f90,_0x42171b){return function(_0x5a3418){if(_0x5a3418){var _0xe05e60=_0x5a3418[_0x001c('0x32')],_0x22ccaf=_0x42171b['offset'],_0xc30e3b=_0x42171b[_0x001c('0x33')]+_0x42171b[_0x001c('0x34')],_0x27804a;if(_0xc30e3b>=_0xe05e60){_0xc30e3b=_0xe05e60;_0x27804a=0xc8;}else{_0x27804a=0xce;}_0x567f90[_0x001c('0x2f')](_0x27804a);return _0x567f90['set']('Content-Range',_0x22ccaf+'-'+_0xc30e3b+'/'+_0xe05e60)[_0x001c('0x31')](_0x5a3418);}return null;};}function patchUpdates(_0x30313a){return function(_0x7f74bb){try{jsonpatch[_0x001c('0x35')](_0x7f74bb,_0x30313a,!![]);}catch(_0x3bfe1d){return BPromise[_0x001c('0x36')](_0x3bfe1d);}return _0x7f74bb[_0x001c('0x37')]();};}function saveUpdates(_0x20d63f,_0x1814e3){return function(_0x5c4d43){if(_0x5c4d43){return _0x5c4d43[_0x001c('0x38')](_0x20d63f)['then'](function(_0x3a2f83){return _0x3a2f83;});}return null;};}function removeEntity(_0x2a516e,_0x10be4b){return function(_0x306d63){if(_0x306d63){return _0x306d63[_0x001c('0x39')]()[_0x001c('0x23')](function(){_0x2a516e['status'](0xcc)[_0x001c('0x30')]();});}};}function handleEntityNotFound(_0x474bfd,_0x5be8dd){return function(_0x25a02){if(!_0x25a02){_0x474bfd[_0x001c('0x3a')](0x194);}return _0x25a02;};}function handleError(_0xc8e5f0,_0x53bec0){_0x53bec0=_0x53bec0||0x1f4;return function(_0x54090e){logger[_0x001c('0x2a')](_0x54090e[_0x001c('0x3b')]);if(_0x54090e['name']){delete _0x54090e['name'];}_0xc8e5f0['status'](_0x53bec0)[_0x001c('0x3c')](_0x54090e);};}exports[_0x001c('0x3d')]=function(_0x2d06f6,_0xbb1604){var _0x576aa5={},_0x5203fe={},_0x22c908={'count':0x0,'rows':[]};var _0x309801=db[_0x001c('0x3e')][_0x001c('0x3f')];_0x5203fe[_0x001c('0x40')]=_[_0x001c('0x41')](_0x309801);_0x5203fe['query']=_[_0x001c('0x41')](_0x2d06f6[_0x001c('0x42')]);_0x5203fe[_0x001c('0x43')]=_['intersection'](_0x5203fe[_0x001c('0x40')],_0x5203fe[_0x001c('0x42')]);_0x576aa5[_0x001c('0x44')]=_[_0x001c('0x45')](_0x5203fe[_0x001c('0x40')],qs[_0x001c('0x46')](_0x2d06f6['query'][_0x001c('0x46')]));_0x576aa5[_0x001c('0x44')]=_0x576aa5['attributes']['length']?_0x576aa5[_0x001c('0x44')]:_0x5203fe[_0x001c('0x40')];if(!_0x2d06f6[_0x001c('0x42')][_0x001c('0x47')](_0x001c('0x48'))){_0x576aa5[_0x001c('0x34')]=qs[_0x001c('0x34')](_0x2d06f6['query'][_0x001c('0x34')]);_0x576aa5[_0x001c('0x33')]=qs[_0x001c('0x33')](_0x2d06f6['query'][_0x001c('0x33')]);}_0x576aa5[_0x001c('0x49')]=qs[_0x001c('0x4a')](_0x2d06f6[_0x001c('0x42')]['sort']);_0x576aa5[_0x001c('0x4b')]=qs['filters'](_[_0x001c('0x4c')](_0x2d06f6[_0x001c('0x42')],_0x5203fe[_0x001c('0x43')]));if(_0x2d06f6['query'][_0x001c('0x4d')]){_0x576aa5[_0x001c('0x4b')]=_['merge'](_0x576aa5['where'],{'$or':_[_0x001c('0x4e')](_0x309801,function(_0x1ab28c){if(_0x1ab28c[_0x001c('0x4f')][_0x001c('0x50')]!==_0x001c('0x51')){var _0x163970={};_0x163970[_0x1ab28c[_0x001c('0x52')]]={'$like':'%'+_0x2d06f6[_0x001c('0x42')][_0x001c('0x4d')]+'%'};return _0x163970;}})});}_0x576aa5=_[_0x001c('0x53')]({},_0x576aa5,_0x2d06f6['options']);var _0x171190={'where':_0x576aa5['where']};return db[_0x001c('0x3e')][_0x001c('0x32')](_0x171190)[_0x001c('0x23')](function(_0xc027b2){_0x22c908['count']=_0xc027b2;if(_0x2d06f6['query'][_0x001c('0x54')]){_0x576aa5['include']=[{'all':!![]}];}return db[_0x001c('0x3e')][_0x001c('0x55')](_0x576aa5);})[_0x001c('0x23')](function(_0x505a35){_0x22c908[_0x001c('0x56')]=_0x505a35;return _0x22c908;})[_0x001c('0x23')](respondWithFilteredResult(_0xbb1604,_0x576aa5))[_0x001c('0x2e')](handleError(_0xbb1604,null));};exports[_0x001c('0x57')]=function(_0x4b569f,_0x44af01){var _0x40fe4e={'raw':!![],'where':{'id':_0x4b569f[_0x001c('0x58')]['id']}},_0x15c4c3={};_0x15c4c3[_0x001c('0x40')]=_[_0x001c('0x41')](db[_0x001c('0x3e')][_0x001c('0x3f')]);_0x15c4c3[_0x001c('0x42')]=_[_0x001c('0x41')](_0x4b569f[_0x001c('0x42')]);_0x15c4c3[_0x001c('0x43')]=_[_0x001c('0x45')](_0x15c4c3[_0x001c('0x40')],_0x15c4c3[_0x001c('0x42')]);_0x40fe4e[_0x001c('0x44')]=_[_0x001c('0x45')](_0x15c4c3[_0x001c('0x40')],qs[_0x001c('0x46')](_0x4b569f[_0x001c('0x42')][_0x001c('0x46')]));_0x40fe4e[_0x001c('0x44')]=_0x40fe4e[_0x001c('0x44')][_0x001c('0x59')]?_0x40fe4e[_0x001c('0x44')]:_0x15c4c3[_0x001c('0x40')];if(_0x4b569f[_0x001c('0x42')][_0x001c('0x54')]){_0x40fe4e[_0x001c('0x5a')]=[{'all':!![]}];}_0x40fe4e=_[_0x001c('0x53')]({},_0x40fe4e,_0x4b569f['options']);return db[_0x001c('0x3e')]['find'](_0x40fe4e)[_0x001c('0x23')](handleEntityNotFound(_0x44af01,null))[_0x001c('0x23')](respondWithResult(_0x44af01,null))[_0x001c('0x2e')](handleError(_0x44af01,null));};exports[_0x001c('0x5b')]=function(_0x1d0ad9,_0x572a8f){return db['ChatGroup'][_0x001c('0x5b')](_0x1d0ad9[_0x001c('0x5c')],{})[_0x001c('0x23')](respondWithResult(_0x572a8f,0xc9))[_0x001c('0x2e')](handleError(_0x572a8f,null));};exports[_0x001c('0x38')]=function(_0x4f7cfe,_0xf8b766){if(_0x4f7cfe[_0x001c('0x5c')]['id']){delete _0x4f7cfe[_0x001c('0x5c')]['id'];}return db[_0x001c('0x3e')]['find']({'where':{'id':_0x4f7cfe[_0x001c('0x58')]['id']}})[_0x001c('0x23')](handleEntityNotFound(_0xf8b766,null))[_0x001c('0x23')](saveUpdates(_0x4f7cfe['body'],null))[_0x001c('0x23')](respondWithResult(_0xf8b766,null))[_0x001c('0x2e')](handleError(_0xf8b766,null));};exports[_0x001c('0x39')]=function(_0xfce530,_0x345588){return db[_0x001c('0x3e')]['find']({'where':{'id':_0xfce530[_0x001c('0x58')]['id']}})['then'](handleEntityNotFound(_0x345588,null))[_0x001c('0x23')](removeEntity(_0x345588,null))['catch'](handleError(_0x345588,null));};exports['describe']=function(_0x2eae80,_0x181d09){return db[_0x001c('0x3e')]['describe']()[_0x001c('0x23')](respondWithResult(_0x181d09,null))[_0x001c('0x2e')](handleError(_0x181d09,null));};exports[_0x001c('0x5d')]=function(_0x35afef,_0x2ad54e,_0x47b9d7){return db[_0x001c('0x5e')][_0x001c('0x32')]({'where':{'ChatGroupId':_0x35afef[_0x001c('0x58')]['id'],'ToId':_0x35afef[_0x001c('0x5f')]['id'],'read':![]}})['then'](function(_0x24d602){return{'id':_[_0x001c('0x60')](_0x35afef[_0x001c('0x58')]['id']),'count':_0x24d602};})[_0x001c('0x23')](respondWithResult(_0x2ad54e,null))[_0x001c('0x2e')](handleError(_0x2ad54e,null));};exports['addMembers']=function(_0x3e12d4,_0x4e404b,_0x60fbec){return db[_0x001c('0x3e')]['find']({'where':{'id':_0x3e12d4['params']['id']}})['then'](handleEntityNotFound(_0x4e404b,null))[_0x001c('0x23')](function(_0x1c15a8){if(_0x1c15a8){return _0x1c15a8[_0x001c('0x61')](_0x3e12d4[_0x001c('0x5c')][_0x001c('0x62')],_[_0x001c('0x63')](_0x3e12d4['body'],[_0x001c('0x62'),'id'])||{});}})['then'](respondWithResult(_0x4e404b,null))[_0x001c('0x2e')](handleError(_0x4e404b,null));};exports['getMembers']=function(_0x18a225,_0x1dc753,_0x303c23){var _0xecff9d={};var _0x221b47={};var _0x16883b;var _0x1f5a7b;return db['ChatGroup'][_0x001c('0x64')]({'where':{'id':_0x18a225['params']['id']}})[_0x001c('0x23')](handleEntityNotFound(_0x1dc753,null))[_0x001c('0x23')](function(_0x38a3aa){if(_0x38a3aa){_0x16883b=_0x38a3aa;_0x221b47[_0x001c('0x40')]=_[_0x001c('0x41')](db[_0x001c('0x65')]['rawAttributes']);_0x221b47[_0x001c('0x42')]=_['keys'](_0x18a225[_0x001c('0x42')]);_0x221b47[_0x001c('0x43')]=_[_0x001c('0x45')](_0x221b47[_0x001c('0x40')],_0x221b47['query']);_0xecff9d[_0x001c('0x44')]=_[_0x001c('0x45')](_0x221b47[_0x001c('0x40')],qs['fields'](_0x18a225['query'][_0x001c('0x46')]));_0xecff9d[_0x001c('0x44')]=_0xecff9d['attributes']['length']?_0xecff9d[_0x001c('0x44')]:_0x221b47[_0x001c('0x40')];_0xecff9d[_0x001c('0x49')]=qs[_0x001c('0x4a')](_0x18a225[_0x001c('0x42')][_0x001c('0x4a')]);_0xecff9d['where']=qs['filters'](_[_0x001c('0x4c')](_0x18a225[_0x001c('0x42')],_0x221b47[_0x001c('0x43')]));if(_0x18a225[_0x001c('0x42')][_0x001c('0x4d')]){_0xecff9d[_0x001c('0x4b')]=_[_0x001c('0x53')](_0xecff9d[_0x001c('0x4b')],{'$or':_[_0x001c('0x4e')](_0xecff9d['attributes'],function(_0x1035e9){var _0x2bdfe0={};_0x2bdfe0[_0x1035e9]={'$like':'%'+_0x18a225[_0x001c('0x42')][_0x001c('0x4d')]+'%'};return _0x2bdfe0;})});}_0xecff9d=_['merge']({},_0xecff9d,_0x18a225[_0x001c('0x66')]);return _0x16883b['getMembers'](_0xecff9d);}})['then'](function(_0x5139ed){if(_0x5139ed){_0x1f5a7b=_0x5139ed[_0x001c('0x59')];if(!_0x18a225['query'][_0x001c('0x47')](_0x001c('0x48'))){_0xecff9d[_0x001c('0x34')]=qs[_0x001c('0x34')](_0x18a225[_0x001c('0x42')][_0x001c('0x34')]);_0xecff9d['offset']=qs[_0x001c('0x33')](_0x18a225[_0x001c('0x42')][_0x001c('0x33')]);}return _0x16883b[_0x001c('0x67')](_0xecff9d);}})[_0x001c('0x23')](function(_0x180e64){if(_0x180e64){return _0x180e64?{'count':_0x1f5a7b,'rows':_0x180e64}:null;}})[_0x001c('0x23')](respondWithResult(_0x1dc753,null))[_0x001c('0x2e')](handleError(_0x1dc753,null));};exports[_0x001c('0x68')]=function(_0x574f61,_0x5112b7,_0x56c218){return db[_0x001c('0x3e')][_0x001c('0x69')]({'where':{'id':_0x574f61[_0x001c('0x58')]['id']}})[_0x001c('0x23')](handleEntityNotFound(_0x5112b7,null))['then'](function(_0x3b1ce2){if(_0x3b1ce2){return _0x3b1ce2[_0x001c('0x68')](_0x574f61[_0x001c('0x42')][_0x001c('0x62')]);}})[_0x001c('0x23')](respondWithStatusCode(_0x5112b7,null))[_0x001c('0x2e')](handleError(_0x5112b7,null));};exports[_0x001c('0x6a')]=function(_0x27186d,_0x4a74,_0x1ed9fb){if(_0x27186d[_0x001c('0x5c')]['id']){delete _0x27186d[_0x001c('0x5c')]['id'];}return db['ChatGroup'][_0x001c('0x69')]({'where':{'id':_0x27186d[_0x001c('0x58')]['id']}})[_0x001c('0x23')](handleEntityNotFound(_0x4a74,null))['then'](function(_0x1a1a8f){if(_0x1a1a8f){_0x27186d[_0x001c('0x5c')][_0x001c('0x6b')]=_0x1a1a8f['id'];return db[_0x001c('0x5e')][_0x001c('0x5b')](_0x27186d[_0x001c('0x5c')]);}})[_0x001c('0x23')](respondWithResult(_0x4a74,null))['catch'](handleError(_0x4a74,null));};exports['getMessages']=function(_0x362e93,_0x64f92d,_0x3aa81e){var _0x25273b={};var _0x2886bc={};var _0x116d62;var _0x321501;return db['ChatGroup'][_0x001c('0x64')]({'where':{'id':_0x362e93[_0x001c('0x58')]['id']}})[_0x001c('0x23')](handleEntityNotFound(_0x64f92d,null))['then'](function(_0x1e5398){if(_0x1e5398){_0x116d62=_0x1e5398;_0x2886bc[_0x001c('0x40')]=_[_0x001c('0x41')](db['ChatInternalMessage']['rawAttributes']);_0x2886bc['query']=_[_0x001c('0x41')](_0x362e93['query']);_0x2886bc[_0x001c('0x43')]=_[_0x001c('0x45')](_0x2886bc[_0x001c('0x40')],_0x2886bc['query']);_0x25273b[_0x001c('0x44')]=_[_0x001c('0x45')](_0x2886bc[_0x001c('0x40')],qs[_0x001c('0x46')](_0x362e93[_0x001c('0x42')][_0x001c('0x46')]));_0x25273b[_0x001c('0x44')]=_0x25273b[_0x001c('0x44')]['length']?_0x25273b[_0x001c('0x44')]:_0x2886bc['model'];_0x25273b['order']=qs[_0x001c('0x4a')](_0x362e93['query'][_0x001c('0x4a')]);_0x25273b[_0x001c('0x4b')]=qs[_0x001c('0x43')](_['pick'](_0x362e93[_0x001c('0x42')],_0x2886bc[_0x001c('0x43')]));if(_0x362e93[_0x001c('0x42')][_0x001c('0x4d')]){_0x25273b[_0x001c('0x4b')]=_[_0x001c('0x53')](_0x25273b[_0x001c('0x4b')],{'$or':_[_0x001c('0x4e')](_0x25273b[_0x001c('0x44')],function(_0x21b7a4){var _0x190ce3={};_0x190ce3[_0x21b7a4]={'$like':'%'+_0x362e93[_0x001c('0x42')][_0x001c('0x4d')]+'%'};return _0x190ce3;})});}if(_0x362e93[_0x001c('0x42')][_0x001c('0x6c')]){var _0x18ba25=_0x362e93['query'][_0x001c('0x6c')][_0x001c('0x6d')](',');var _0x4e164d={};_0x4e164d[_0x18ba25[0x0]]={'$gte':moment(_0x18ba25[0x1])[_0x001c('0x6e')](_0x001c('0x6f'))};_0x25273b[_0x001c('0x4b')]=_[_0x001c('0x53')](_0x25273b['where'],_0x4e164d);}_0x25273b=_[_0x001c('0x53')]({},_0x25273b,_0x362e93[_0x001c('0x66')]);return _0x116d62['getMessages'](_0x25273b);}})[_0x001c('0x23')](function(_0x42b8c3){if(_0x42b8c3){_0x321501=_0x42b8c3['length'];if(!_0x362e93[_0x001c('0x42')][_0x001c('0x47')]('nolimit')){_0x25273b[_0x001c('0x34')]=qs[_0x001c('0x34')](_0x362e93[_0x001c('0x42')][_0x001c('0x34')]);_0x25273b[_0x001c('0x33')]=qs['offset'](_0x362e93[_0x001c('0x42')][_0x001c('0x33')]);}return _0x116d62['getMessages'](_0x25273b);}})[_0x001c('0x23')](function(_0x59250e){if(_0x59250e){return _0x59250e?{'count':_0x321501,'rows':_0x59250e}:null;}})[_0x001c('0x23')](respondWithResult(_0x64f92d,null))['catch'](handleError(_0x64f92d,null));};
\ No newline at end of file
+var _0xd599=['info','ChatGroup,\x20%s,\x20%s','request\x20sent','debug','ChatGroup,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','json','offset','apply','reject','save','update','destroy','then','end','stack','name','index','ChatGroup','rawAttributes','model','keys','filters','attributes','intersection','query','length','hasOwnProperty','limit','order','sort','where','pick','map','type','field','filter','options','includeAll','include','findAll','show','fields','merge','find','create','body','params','getUnread','ChatInternalMessage','user','toInteger','addMembers','omit','findOne','User','getMembers','nolimit','removeMembers','addMessage','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','getMessages','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./chatGroup.socket','register','jayson/promise','client','http','test','request'];(function(_0x2f8530,_0x5cbd67){var _0x5e814e=function(_0x490b29){while(--_0x490b29){_0x2f8530['push'](_0x2f8530['shift']());}};_0x5e814e(++_0x5cbd67);}(_0xd599,0x18c));var _0x9d59=function(_0x5be3ce,_0x3dbb20){_0x5be3ce=_0x5be3ce-0x0;var _0xa2dab2=_0xd599[_0x5be3ce];return _0xa2dab2;};'use strict';var pdf=require(_0x9d59('0x0'));var emlformat=require(_0x9d59('0x1'));var rimraf=require(_0x9d59('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x9d59('0x3'));var rp=require(_0x9d59('0x4'));var moment=require('moment');var BPromise=require(_0x9d59('0x5'));var Mustache=require(_0x9d59('0x6'));var util=require(_0x9d59('0x7'));var path=require(_0x9d59('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x9d59('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x9d59('0xa'));var crypto=require(_0x9d59('0xb'));var jsforce=require(_0x9d59('0xc'));var deskjs=require(_0x9d59('0xd'));var toCsv=require(_0x9d59('0xe'));var querystring=require(_0x9d59('0xf'));var Papa=require(_0x9d59('0x10'));var Redis=require(_0x9d59('0x11'));var authService=require(_0x9d59('0x12'));var qs=require(_0x9d59('0x13'));var hardwareService=require(_0x9d59('0x14'));var logger=require('../../config/logger')(_0x9d59('0x15'));var utils=require(_0x9d59('0x16'));var config=require(_0x9d59('0x17'));var db=require(_0x9d59('0x18'))['db'];config[_0x9d59('0x19')]=_[_0x9d59('0x1a')](config[_0x9d59('0x19')],{'host':_0x9d59('0x1b'),'port':0x18eb});var socket=require(_0x9d59('0x1c'))(new Redis(config[_0x9d59('0x19')]));require(_0x9d59('0x1d'))[_0x9d59('0x1e')](socket);var jayson=require(_0x9d59('0x1f'));var client=jayson[_0x9d59('0x20')][_0x9d59('0x21')]({'port':0x232a});function checkPasswordPattern(_0x4cfafe,_0x5ea981,_0x2d255b){if(_0x2d255b){var _0x8551d0=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x8551d0[_0x9d59('0x22')](_0x5ea981)){return _0x4cfafe;}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 _0x4cfafe;}}function respondWithRpcPromise(_0x4709b8,_0xf2e4fc,_0x520707,_0x16818c){return new BPromise(function(_0x59ee13,_0x27a8dd){var _0x3364dd=_0x16818c||client;return _0x3364dd[_0x9d59('0x23')](_0x4709b8,_0x520707)['then'](function(_0x2fa97b){logger[_0x9d59('0x24')](_0x9d59('0x25'),_0xf2e4fc,_0x9d59('0x26'));logger[_0x9d59('0x27')](_0x9d59('0x28'),_0xf2e4fc,_0x9d59('0x26'),JSON[_0x9d59('0x29')](_0x2fa97b));if(_0x2fa97b[_0x9d59('0x2a')]){if(_0x2fa97b[_0x9d59('0x2a')][_0x9d59('0x2b')]===0x1f4){logger[_0x9d59('0x2a')]('ChatGroup,\x20%s,\x20%s',_0xf2e4fc,_0x2fa97b['error'][_0x9d59('0x2c')]);return _0x27a8dd(_0x2fa97b['error'][_0x9d59('0x2c')]);}logger[_0x9d59('0x2a')]('ChatGroup,\x20%s,\x20%s',_0xf2e4fc,_0x2fa97b[_0x9d59('0x2a')][_0x9d59('0x2c')]);return _0x59ee13(_0x2fa97b[_0x9d59('0x2a')]['message']);}else{logger['info'](_0x9d59('0x25'),_0xf2e4fc,_0x9d59('0x26'));_0x59ee13(_0x2fa97b[_0x9d59('0x2d')][_0x9d59('0x2c')]);}})[_0x9d59('0x2e')](function(_0x4e3b7e){logger[_0x9d59('0x2a')]('ChatGroup,\x20%s,\x20%s',_0xf2e4fc,_0x4e3b7e);_0x27a8dd(_0x4e3b7e);});});}function respondWithStatusCode(_0x15657a,_0x4a69b1){_0x4a69b1=_0x4a69b1||0xcc;return function(_0x2daf32){if(_0x2daf32){return _0x15657a[_0x9d59('0x2f')](_0x4a69b1);}return _0x15657a['status'](_0x4a69b1)['end']();};}function respondWithResult(_0x2eb7c9,_0x158890){_0x158890=_0x158890||0xc8;return function(_0x14065b){if(_0x14065b){return _0x2eb7c9[_0x9d59('0x30')](_0x158890)[_0x9d59('0x31')](_0x14065b);}};}function respondWithFilteredResult(_0x5f5039,_0x3a33a2){return function(_0x2b1ac9){if(_0x2b1ac9){var _0x492610=_0x2b1ac9['count'],_0x14607b=_0x3a33a2[_0x9d59('0x32')],_0x1e4413=_0x3a33a2[_0x9d59('0x32')]+_0x3a33a2['limit'],_0x420360;if(_0x1e4413>=_0x492610){_0x1e4413=_0x492610;_0x420360=0xc8;}else{_0x420360=0xce;}_0x5f5039['status'](_0x420360);return _0x5f5039['set']('Content-Range',_0x14607b+'-'+_0x1e4413+'/'+_0x492610)[_0x9d59('0x31')](_0x2b1ac9);}return null;};}function patchUpdates(_0x5afd8d){return function(_0x23bd5f){try{jsonpatch[_0x9d59('0x33')](_0x23bd5f,_0x5afd8d,!![]);}catch(_0xe700bd){return BPromise[_0x9d59('0x34')](_0xe700bd);}return _0x23bd5f[_0x9d59('0x35')]();};}function saveUpdates(_0x2578e9,_0x681e99){return function(_0x4af106){if(_0x4af106){return _0x4af106[_0x9d59('0x36')](_0x2578e9)['then'](function(_0x54d599){return _0x54d599;});}return null;};}function removeEntity(_0x2eb966,_0x3d3193){return function(_0x3e999e){if(_0x3e999e){return _0x3e999e[_0x9d59('0x37')]()[_0x9d59('0x38')](function(){_0x2eb966[_0x9d59('0x30')](0xcc)[_0x9d59('0x39')]();});}};}function handleEntityNotFound(_0x28a250,_0x114769){return function(_0x5d3c0f){if(!_0x5d3c0f){_0x28a250[_0x9d59('0x2f')](0x194);}return _0x5d3c0f;};}function handleError(_0x3ac71d,_0x4850da){_0x4850da=_0x4850da||0x1f4;return function(_0x3f5b89){logger[_0x9d59('0x2a')](_0x3f5b89[_0x9d59('0x3a')]);if(_0x3f5b89[_0x9d59('0x3b')]){delete _0x3f5b89[_0x9d59('0x3b')];}_0x3ac71d[_0x9d59('0x30')](_0x4850da)['send'](_0x3f5b89);};}exports[_0x9d59('0x3c')]=function(_0x55e95d,_0x1e47ac){var _0x198544={},_0x35a5ea={},_0x5aa951={'count':0x0,'rows':[]};var _0x2d0dff=db[_0x9d59('0x3d')][_0x9d59('0x3e')];_0x35a5ea[_0x9d59('0x3f')]=_[_0x9d59('0x40')](_0x2d0dff);_0x35a5ea['query']=_[_0x9d59('0x40')](_0x55e95d['query']);_0x35a5ea[_0x9d59('0x41')]=_['intersection'](_0x35a5ea[_0x9d59('0x3f')],_0x35a5ea['query']);_0x198544[_0x9d59('0x42')]=_[_0x9d59('0x43')](_0x35a5ea[_0x9d59('0x3f')],qs['fields'](_0x55e95d[_0x9d59('0x44')]['fields']));_0x198544['attributes']=_0x198544['attributes'][_0x9d59('0x45')]?_0x198544[_0x9d59('0x42')]:_0x35a5ea[_0x9d59('0x3f')];if(!_0x55e95d[_0x9d59('0x44')][_0x9d59('0x46')]('nolimit')){_0x198544[_0x9d59('0x47')]=qs[_0x9d59('0x47')](_0x55e95d[_0x9d59('0x44')][_0x9d59('0x47')]);_0x198544[_0x9d59('0x32')]=qs[_0x9d59('0x32')](_0x55e95d[_0x9d59('0x44')][_0x9d59('0x32')]);}_0x198544[_0x9d59('0x48')]=qs[_0x9d59('0x49')](_0x55e95d[_0x9d59('0x44')][_0x9d59('0x49')]);_0x198544[_0x9d59('0x4a')]=qs[_0x9d59('0x41')](_[_0x9d59('0x4b')](_0x55e95d[_0x9d59('0x44')],_0x35a5ea[_0x9d59('0x41')]));if(_0x55e95d[_0x9d59('0x44')]['filter']){_0x198544['where']=_['merge'](_0x198544[_0x9d59('0x4a')],{'$or':_[_0x9d59('0x4c')](_0x2d0dff,function(_0x7a82e){if(_0x7a82e[_0x9d59('0x4d')]['key']!=='VIRTUAL'){var _0x3253d8={};_0x3253d8[_0x7a82e[_0x9d59('0x4e')]]={'$like':'%'+_0x55e95d['query'][_0x9d59('0x4f')]+'%'};return _0x3253d8;}})});}_0x198544=_['merge']({},_0x198544,_0x55e95d[_0x9d59('0x50')]);var _0x5e9aa7={'where':_0x198544[_0x9d59('0x4a')]};return db['ChatGroup']['count'](_0x5e9aa7)[_0x9d59('0x38')](function(_0x510add){_0x5aa951['count']=_0x510add;if(_0x55e95d[_0x9d59('0x44')][_0x9d59('0x51')]){_0x198544[_0x9d59('0x52')]=[{'all':!![]}];}return db[_0x9d59('0x3d')][_0x9d59('0x53')](_0x198544);})[_0x9d59('0x38')](function(_0xc52cb6){_0x5aa951['rows']=_0xc52cb6;return _0x5aa951;})[_0x9d59('0x38')](respondWithFilteredResult(_0x1e47ac,_0x198544))[_0x9d59('0x2e')](handleError(_0x1e47ac,null));};exports[_0x9d59('0x54')]=function(_0x4ec925,_0x4e1167){var _0x2503c7={'raw':!![],'where':{'id':_0x4ec925['params']['id']}},_0x52ae8={};_0x52ae8[_0x9d59('0x3f')]=_[_0x9d59('0x40')](db['ChatGroup'][_0x9d59('0x3e')]);_0x52ae8[_0x9d59('0x44')]=_[_0x9d59('0x40')](_0x4ec925[_0x9d59('0x44')]);_0x52ae8[_0x9d59('0x41')]=_[_0x9d59('0x43')](_0x52ae8[_0x9d59('0x3f')],_0x52ae8['query']);_0x2503c7[_0x9d59('0x42')]=_['intersection'](_0x52ae8[_0x9d59('0x3f')],qs['fields'](_0x4ec925['query'][_0x9d59('0x55')]));_0x2503c7['attributes']=_0x2503c7[_0x9d59('0x42')][_0x9d59('0x45')]?_0x2503c7['attributes']:_0x52ae8[_0x9d59('0x3f')];if(_0x4ec925[_0x9d59('0x44')][_0x9d59('0x51')]){_0x2503c7[_0x9d59('0x52')]=[{'all':!![]}];}_0x2503c7=_[_0x9d59('0x56')]({},_0x2503c7,_0x4ec925[_0x9d59('0x50')]);return db[_0x9d59('0x3d')][_0x9d59('0x57')](_0x2503c7)[_0x9d59('0x38')](handleEntityNotFound(_0x4e1167,null))[_0x9d59('0x38')](respondWithResult(_0x4e1167,null))[_0x9d59('0x2e')](handleError(_0x4e1167,null));};exports['create']=function(_0x52185a,_0x3eb49a){return db[_0x9d59('0x3d')][_0x9d59('0x58')](_0x52185a[_0x9d59('0x59')],{})['then'](respondWithResult(_0x3eb49a,0xc9))[_0x9d59('0x2e')](handleError(_0x3eb49a,null));};exports['update']=function(_0x505bc4,_0x5e5863){if(_0x505bc4['body']['id']){delete _0x505bc4[_0x9d59('0x59')]['id'];}return db[_0x9d59('0x3d')][_0x9d59('0x57')]({'where':{'id':_0x505bc4[_0x9d59('0x5a')]['id']}})[_0x9d59('0x38')](handleEntityNotFound(_0x5e5863,null))['then'](saveUpdates(_0x505bc4[_0x9d59('0x59')],null))[_0x9d59('0x38')](respondWithResult(_0x5e5863,null))[_0x9d59('0x2e')](handleError(_0x5e5863,null));};exports['destroy']=function(_0x5952c2,_0x1dc71e){return db[_0x9d59('0x3d')][_0x9d59('0x57')]({'where':{'id':_0x5952c2[_0x9d59('0x5a')]['id']}})[_0x9d59('0x38')](handleEntityNotFound(_0x1dc71e,null))[_0x9d59('0x38')](removeEntity(_0x1dc71e,null))['catch'](handleError(_0x1dc71e,null));};exports['describe']=function(_0x366270,_0x4259e8){return db[_0x9d59('0x3d')]['describe']()['then'](respondWithResult(_0x4259e8,null))[_0x9d59('0x2e')](handleError(_0x4259e8,null));};exports[_0x9d59('0x5b')]=function(_0x4d0ec4,_0x1d5493,_0x568e9c){return db[_0x9d59('0x5c')]['count']({'where':{'ChatGroupId':_0x4d0ec4[_0x9d59('0x5a')]['id'],'ToId':_0x4d0ec4[_0x9d59('0x5d')]['id'],'read':![]}})[_0x9d59('0x38')](function(_0x5d7100){return{'id':_[_0x9d59('0x5e')](_0x4d0ec4[_0x9d59('0x5a')]['id']),'count':_0x5d7100};})[_0x9d59('0x38')](respondWithResult(_0x1d5493,null))['catch'](handleError(_0x1d5493,null));};exports[_0x9d59('0x5f')]=function(_0x2d35da,_0x6bdf79,_0x305d00){return db['ChatGroup'][_0x9d59('0x57')]({'where':{'id':_0x2d35da[_0x9d59('0x5a')]['id']}})[_0x9d59('0x38')](handleEntityNotFound(_0x6bdf79,null))[_0x9d59('0x38')](function(_0x535b66){if(_0x535b66){return _0x535b66[_0x9d59('0x5f')](_0x2d35da[_0x9d59('0x59')]['ids'],_[_0x9d59('0x60')](_0x2d35da[_0x9d59('0x59')],['ids','id'])||{});}})[_0x9d59('0x38')](respondWithResult(_0x6bdf79,null))['catch'](handleError(_0x6bdf79,null));};exports['getMembers']=function(_0x491992,_0x1ea468,_0x110879){var _0x3043f4={};var _0x2737ed={};var _0xc4eb47;var _0x307e25;return db[_0x9d59('0x3d')][_0x9d59('0x61')]({'where':{'id':_0x491992[_0x9d59('0x5a')]['id']}})[_0x9d59('0x38')](handleEntityNotFound(_0x1ea468,null))[_0x9d59('0x38')](function(_0x3ea0ec){if(_0x3ea0ec){_0xc4eb47=_0x3ea0ec;_0x2737ed[_0x9d59('0x3f')]=_[_0x9d59('0x40')](db[_0x9d59('0x62')]['rawAttributes']);_0x2737ed[_0x9d59('0x44')]=_[_0x9d59('0x40')](_0x491992[_0x9d59('0x44')]);_0x2737ed[_0x9d59('0x41')]=_[_0x9d59('0x43')](_0x2737ed['model'],_0x2737ed[_0x9d59('0x44')]);_0x3043f4[_0x9d59('0x42')]=_['intersection'](_0x2737ed[_0x9d59('0x3f')],qs[_0x9d59('0x55')](_0x491992['query'][_0x9d59('0x55')]));_0x3043f4[_0x9d59('0x42')]=_0x3043f4[_0x9d59('0x42')][_0x9d59('0x45')]?_0x3043f4[_0x9d59('0x42')]:_0x2737ed[_0x9d59('0x3f')];_0x3043f4['order']=qs[_0x9d59('0x49')](_0x491992['query'][_0x9d59('0x49')]);_0x3043f4['where']=qs[_0x9d59('0x41')](_['pick'](_0x491992[_0x9d59('0x44')],_0x2737ed[_0x9d59('0x41')]));if(_0x491992[_0x9d59('0x44')][_0x9d59('0x4f')]){_0x3043f4[_0x9d59('0x4a')]=_[_0x9d59('0x56')](_0x3043f4[_0x9d59('0x4a')],{'$or':_[_0x9d59('0x4c')](_0x3043f4['attributes'],function(_0x111236){var _0x3f4b2f={};_0x3f4b2f[_0x111236]={'$like':'%'+_0x491992['query'][_0x9d59('0x4f')]+'%'};return _0x3f4b2f;})});}_0x3043f4=_[_0x9d59('0x56')]({},_0x3043f4,_0x491992[_0x9d59('0x50')]);return _0xc4eb47[_0x9d59('0x63')](_0x3043f4);}})[_0x9d59('0x38')](function(_0x32d57f){if(_0x32d57f){_0x307e25=_0x32d57f['length'];if(!_0x491992[_0x9d59('0x44')][_0x9d59('0x46')](_0x9d59('0x64'))){_0x3043f4['limit']=qs[_0x9d59('0x47')](_0x491992[_0x9d59('0x44')][_0x9d59('0x47')]);_0x3043f4['offset']=qs['offset'](_0x491992[_0x9d59('0x44')][_0x9d59('0x32')]);}return _0xc4eb47['getMembers'](_0x3043f4);}})[_0x9d59('0x38')](function(_0x549ca2){if(_0x549ca2){return _0x549ca2?{'count':_0x307e25,'rows':_0x549ca2}:null;}})[_0x9d59('0x38')](respondWithResult(_0x1ea468,null))[_0x9d59('0x2e')](handleError(_0x1ea468,null));};exports[_0x9d59('0x65')]=function(_0x4988a8,_0x20f89e,_0x22f199){return db['ChatGroup'][_0x9d59('0x57')]({'where':{'id':_0x4988a8['params']['id']}})['then'](handleEntityNotFound(_0x20f89e,null))['then'](function(_0x361c8e){if(_0x361c8e){return _0x361c8e[_0x9d59('0x65')](_0x4988a8[_0x9d59('0x44')]['ids']);}})['then'](respondWithStatusCode(_0x20f89e,null))[_0x9d59('0x2e')](handleError(_0x20f89e,null));};exports[_0x9d59('0x66')]=function(_0x269c66,_0xd29e3a,_0x3415cc){if(_0x269c66[_0x9d59('0x59')]['id']){delete _0x269c66[_0x9d59('0x59')]['id'];}return db[_0x9d59('0x3d')][_0x9d59('0x57')]({'where':{'id':_0x269c66[_0x9d59('0x5a')]['id']}})[_0x9d59('0x38')](handleEntityNotFound(_0xd29e3a,null))['then'](function(_0x184574){if(_0x184574){_0x269c66[_0x9d59('0x59')]['ChatGroupId']=_0x184574['id'];return db['ChatInternalMessage'][_0x9d59('0x58')](_0x269c66[_0x9d59('0x59')]);}})[_0x9d59('0x38')](respondWithResult(_0xd29e3a,null))[_0x9d59('0x2e')](handleError(_0xd29e3a,null));};exports['getMessages']=function(_0x3cb248,_0x4b7def,_0x355c52){var _0x261c7c={};var _0x3913cc={};var _0x39fe6f;var _0x375094;return db[_0x9d59('0x3d')][_0x9d59('0x61')]({'where':{'id':_0x3cb248['params']['id']}})['then'](handleEntityNotFound(_0x4b7def,null))['then'](function(_0x185ebd){if(_0x185ebd){_0x39fe6f=_0x185ebd;_0x3913cc['model']=_['keys'](db[_0x9d59('0x5c')][_0x9d59('0x3e')]);_0x3913cc[_0x9d59('0x44')]=_[_0x9d59('0x40')](_0x3cb248['query']);_0x3913cc[_0x9d59('0x41')]=_['intersection'](_0x3913cc[_0x9d59('0x3f')],_0x3913cc[_0x9d59('0x44')]);_0x261c7c[_0x9d59('0x42')]=_['intersection'](_0x3913cc[_0x9d59('0x3f')],qs[_0x9d59('0x55')](_0x3cb248['query'][_0x9d59('0x55')]));_0x261c7c[_0x9d59('0x42')]=_0x261c7c['attributes'][_0x9d59('0x45')]?_0x261c7c['attributes']:_0x3913cc[_0x9d59('0x3f')];_0x261c7c['order']=qs['sort'](_0x3cb248[_0x9d59('0x44')]['sort']);_0x261c7c[_0x9d59('0x4a')]=qs[_0x9d59('0x41')](_[_0x9d59('0x4b')](_0x3cb248[_0x9d59('0x44')],_0x3913cc[_0x9d59('0x41')]));if(_0x3cb248[_0x9d59('0x44')][_0x9d59('0x4f')]){_0x261c7c['where']=_[_0x9d59('0x56')](_0x261c7c[_0x9d59('0x4a')],{'$or':_[_0x9d59('0x4c')](_0x261c7c['attributes'],function(_0x427364){var _0x4544ab={};_0x4544ab[_0x427364]={'$like':'%'+_0x3cb248[_0x9d59('0x44')][_0x9d59('0x4f')]+'%'};return _0x4544ab;})});}if(_0x3cb248[_0x9d59('0x44')][_0x9d59('0x67')]){var _0x7ea708=_0x3cb248['query'][_0x9d59('0x67')][_0x9d59('0x68')](',');var _0x75fb37={};_0x75fb37[_0x7ea708[0x0]]={'$gte':moment(_0x7ea708[0x1])[_0x9d59('0x69')](_0x9d59('0x6a'))};_0x261c7c['where']=_[_0x9d59('0x56')](_0x261c7c[_0x9d59('0x4a')],_0x75fb37);}_0x261c7c=_[_0x9d59('0x56')]({},_0x261c7c,_0x3cb248[_0x9d59('0x50')]);return _0x39fe6f[_0x9d59('0x6b')](_0x261c7c);}})['then'](function(_0x23e8f1){if(_0x23e8f1){_0x375094=_0x23e8f1['length'];if(!_0x3cb248[_0x9d59('0x44')][_0x9d59('0x46')](_0x9d59('0x64'))){_0x261c7c[_0x9d59('0x47')]=qs[_0x9d59('0x47')](_0x3cb248[_0x9d59('0x44')][_0x9d59('0x47')]);_0x261c7c['offset']=qs[_0x9d59('0x32')](_0x3cb248['query'][_0x9d59('0x32')]);}return _0x39fe6f[_0x9d59('0x6b')](_0x261c7c);}})['then'](function(_0x56b6bb){if(_0x56b6bb){return _0x56b6bb?{'count':_0x375094,'rows':_0x56b6bb}:null;}})['then'](respondWithResult(_0x4b7def,null))[_0x9d59('0x2e')](handleError(_0x4b7def,null));};
\ No newline at end of file
index 88c6c94..b9d5365 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd078=['events','ChatGroup','setMaxListeners','save','update','remove','emit','hasOwnProperty','hook','exports'];(function(_0x1af592,_0xcb6dcf){var _0x1b54eb=function(_0x205529){while(--_0x205529){_0x1af592['push'](_0x1af592['shift']());}};_0x1b54eb(++_0xcb6dcf);}(_0xd078,0x1e0));var _0x8d07=function(_0x26913d,_0x306f60){_0x26913d=_0x26913d-0x0;var _0x242cec=_0xd078[_0x26913d];return _0x242cec;};'use strict';var EventEmitter=require(_0x8d07('0x0'));var ChatGroup=require('../../mysqldb')['db'][_0x8d07('0x1')];var ChatGroupEvents=new EventEmitter();ChatGroupEvents[_0x8d07('0x2')](0x0);var events={'afterCreate':_0x8d07('0x3'),'afterUpdate':_0x8d07('0x4'),'afterDestroy':_0x8d07('0x5')};function emitEvent(_0x1e096e){return function(_0x3b8327,_0x196a96,_0x2b8d59){ChatGroupEvents[_0x8d07('0x6')](_0x1e096e+':'+_0x3b8327['id'],_0x3b8327);ChatGroupEvents['emit'](_0x1e096e,_0x3b8327);_0x2b8d59(null);};}for(var e in events){if(events[_0x8d07('0x7')](e)){var event=events[e];ChatGroup[_0x8d07('0x8')](e,emitEvent(event));}}module[_0x8d07('0x9')]=ChatGroupEvents;
\ No newline at end of file
+var _0x1a4a=['hook','exports','events','../../mysqldb','ChatGroup','setMaxListeners','save','update','emit','hasOwnProperty'];(function(_0x248b3a,_0x3303ec){var _0x26c4e1=function(_0x112313){while(--_0x112313){_0x248b3a['push'](_0x248b3a['shift']());}};_0x26c4e1(++_0x3303ec);}(_0x1a4a,0x11a));var _0xa1a4=function(_0x2f8013,_0x4cafe8){_0x2f8013=_0x2f8013-0x0;var _0x3f13ab=_0x1a4a[_0x2f8013];return _0x3f13ab;};'use strict';var EventEmitter=require(_0xa1a4('0x0'));var ChatGroup=require(_0xa1a4('0x1'))['db'][_0xa1a4('0x2')];var ChatGroupEvents=new EventEmitter();ChatGroupEvents[_0xa1a4('0x3')](0x0);var events={'afterCreate':_0xa1a4('0x4'),'afterUpdate':_0xa1a4('0x5'),'afterDestroy':'remove'};function emitEvent(_0x23cb40){return function(_0xf4c934,_0x2528ff,_0xe88f3e){ChatGroupEvents['emit'](_0x23cb40+':'+_0xf4c934['id'],_0xf4c934);ChatGroupEvents[_0xa1a4('0x6')](_0x23cb40,_0xf4c934);_0xe88f3e(null);};}for(var e in events){if(events[_0xa1a4('0x7')](e)){var event=events[e];ChatGroup[_0xa1a4('0x8')](e,emitEvent(event));}}module[_0xa1a4('0x9')]=ChatGroupEvents;
\ No newline at end of file
index abe7bba..9620c2d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x75c0=['request-promise','path','rimraf','./chatGroup.attributes','exports','define','chat_groups','lodash','util','api','moment','bluebird'];(function(_0x3b7459,_0x1c0266){var _0x17dffa=function(_0xdc832e){while(--_0xdc832e){_0x3b7459['push'](_0x3b7459['shift']());}};_0x17dffa(++_0x1c0266);}(_0x75c0,0x16f));var _0x075c=function(_0x32565f,_0x24510b){_0x32565f=_0x32565f-0x0;var _0x23a966=_0x75c0[_0x32565f];return _0x23a966;};'use strict';var _=require(_0x075c('0x0'));var util=require(_0x075c('0x1'));var logger=require('../../config/logger')(_0x075c('0x2'));var moment=require(_0x075c('0x3'));var BPromise=require(_0x075c('0x4'));var rp=require(_0x075c('0x5'));var fs=require('fs');var path=require(_0x075c('0x6'));var rimraf=require(_0x075c('0x7'));var config=require('../../config/environment');var attributes=require(_0x075c('0x8'));module[_0x075c('0x9')]=function(_0x2899e1,_0x395ec7){return _0x2899e1[_0x075c('0xa')]('ChatGroup',attributes,{'tableName':_0x075c('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5c6a=['rimraf','../../config/environment','./chatGroup.attributes','define','ChatGroup','chat_groups','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path'];(function(_0x3e8c02,_0x33c700){var _0x4dc712=function(_0x286b79){while(--_0x286b79){_0x3e8c02['push'](_0x3e8c02['shift']());}};_0x4dc712(++_0x33c700);}(_0x5c6a,0x1f0));var _0xa5c6=function(_0x1247ab,_0xd7754d){_0x1247ab=_0x1247ab-0x0;var _0x43e4a9=_0x5c6a[_0x1247ab];return _0x43e4a9;};'use strict';var _=require(_0xa5c6('0x0'));var util=require(_0xa5c6('0x1'));var logger=require(_0xa5c6('0x2'))(_0xa5c6('0x3'));var moment=require(_0xa5c6('0x4'));var BPromise=require(_0xa5c6('0x5'));var rp=require(_0xa5c6('0x6'));var fs=require('fs');var path=require(_0xa5c6('0x7'));var rimraf=require(_0xa5c6('0x8'));var config=require(_0xa5c6('0x9'));var attributes=require(_0xa5c6('0xa'));module['exports']=function(_0x4b9107,_0x3cade4){return _0x4b9107[_0xa5c6('0xb')](_0xa5c6('0xc'),attributes,{'tableName':_0xa5c6('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bb07d11..44982d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6aa7=['client','redis','defaults','socket.io-emitter','./chatGroup.socket','request','then','info','ChatGroup,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','lodash','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc'];(function(_0x3e5277,_0x393614){var _0xdbf576=function(_0x3c5faf){while(--_0x3c5faf){_0x3e5277['push'](_0x3e5277['shift']());}};_0xdbf576(++_0x393614);}(_0x6aa7,0x178));var _0x76aa=function(_0x331c47,_0x241b51){_0x331c47=_0x331c47-0x0;var _0x722a36=_0x6aa7[_0x331c47];return _0x722a36;};'use strict';var _=require(_0x76aa('0x0'));var util=require('util');var moment=require(_0x76aa('0x1'));var BPromise=require(_0x76aa('0x2'));var rs=require(_0x76aa('0x3'));var fs=require('fs');var Redis=require(_0x76aa('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x76aa('0x5'));var logger=require(_0x76aa('0x6'))(_0x76aa('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x76aa('0x8')]['http']({'port':0x232a});config[_0x76aa('0x9')]=_[_0x76aa('0xa')](config[_0x76aa('0x9')],{'host':'localhost','port':0x18eb});var socket=require(_0x76aa('0xb'))(new Redis(config[_0x76aa('0x9')]));require(_0x76aa('0xc'))['register'](socket);function respondWithRpcPromise(_0xcd99aa,_0x25856d,_0x41643a){return new BPromise(function(_0x16cb50,_0x37f1ab){return client[_0x76aa('0xd')](_0xcd99aa,_0x41643a)[_0x76aa('0xe')](function(_0x8dc35c){logger[_0x76aa('0xf')](_0x76aa('0x10'),_0x25856d,'request\x20sent');logger[_0x76aa('0x11')]('ChatGroup,\x20%s,\x20%s,\x20%s',_0x25856d,_0x76aa('0x12'),JSON[_0x76aa('0x13')](_0x8dc35c));if(_0x8dc35c[_0x76aa('0x14')]){if(_0x8dc35c[_0x76aa('0x14')][_0x76aa('0x15')]===0x1f4){logger['error']('ChatGroup,\x20%s,\x20%s',_0x25856d,_0x8dc35c[_0x76aa('0x14')]['message']);return _0x37f1ab(_0x8dc35c[_0x76aa('0x14')][_0x76aa('0x16')]);}logger['error'](_0x76aa('0x10'),_0x25856d,_0x8dc35c['error'][_0x76aa('0x16')]);return _0x16cb50(_0x8dc35c['error'][_0x76aa('0x16')]);}else{logger[_0x76aa('0xf')](_0x76aa('0x10'),_0x25856d,_0x76aa('0x12'));_0x16cb50(_0x8dc35c[_0x76aa('0x17')][_0x76aa('0x16')]);}})['catch'](function(_0x5d6202){logger[_0x76aa('0x14')](_0x76aa('0x10'),_0x25856d,_0x5d6202);_0x37f1ab(_0x5d6202);});});}
\ No newline at end of file
+var _0x5089=['catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','jayson/promise','client','http','defaults','redis','socket.io-emitter','register','request','then','info','request\x20sent','debug','stringify','error','ChatGroup,\x20%s,\x20%s','message','result'];(function(_0x3580bc,_0x755679){var _0x4d4a0b=function(_0x478ea9){while(--_0x478ea9){_0x3580bc['push'](_0x3580bc['shift']());}};_0x4d4a0b(++_0x755679);}(_0x5089,0x1bb));var _0x9508=function(_0x1d3fdc,_0x2b5c54){_0x1d3fdc=_0x1d3fdc-0x0;var _0x128bb0=_0x5089[_0x1d3fdc];return _0x128bb0;};'use strict';var _=require(_0x9508('0x0'));var util=require(_0x9508('0x1'));var moment=require('moment');var BPromise=require(_0x9508('0x2'));var rs=require(_0x9508('0x3'));var fs=require('fs');var Redis=require(_0x9508('0x4'));var db=require(_0x9508('0x5'))['db'];var utils=require(_0x9508('0x6'));var logger=require('../../config/logger')(_0x9508('0x7'));var config=require('../../config/environment');var jayson=require(_0x9508('0x8'));var client=jayson[_0x9508('0x9')][_0x9508('0xa')]({'port':0x232a});config['redis']=_[_0x9508('0xb')](config[_0x9508('0xc')],{'host':'localhost','port':0x18eb});var socket=require(_0x9508('0xd'))(new Redis(config[_0x9508('0xc')]));require('./chatGroup.socket')[_0x9508('0xe')](socket);function respondWithRpcPromise(_0x5c9dc9,_0x424e6a,_0x26cc8a){return new BPromise(function(_0x852feb,_0x21f8c1){return client[_0x9508('0xf')](_0x5c9dc9,_0x26cc8a)[_0x9508('0x10')](function(_0x4bb70e){logger[_0x9508('0x11')]('ChatGroup,\x20%s,\x20%s',_0x424e6a,_0x9508('0x12'));logger[_0x9508('0x13')]('ChatGroup,\x20%s,\x20%s,\x20%s',_0x424e6a,_0x9508('0x12'),JSON[_0x9508('0x14')](_0x4bb70e));if(_0x4bb70e[_0x9508('0x15')]){if(_0x4bb70e[_0x9508('0x15')]['code']===0x1f4){logger[_0x9508('0x15')](_0x9508('0x16'),_0x424e6a,_0x4bb70e['error'][_0x9508('0x17')]);return _0x21f8c1(_0x4bb70e['error'][_0x9508('0x17')]);}logger[_0x9508('0x15')](_0x9508('0x16'),_0x424e6a,_0x4bb70e[_0x9508('0x15')][_0x9508('0x17')]);return _0x852feb(_0x4bb70e[_0x9508('0x15')][_0x9508('0x17')]);}else{logger[_0x9508('0x11')]('ChatGroup,\x20%s,\x20%s',_0x424e6a,_0x9508('0x12'));_0x852feb(_0x4bb70e[_0x9508('0x18')][_0x9508('0x17')]);}})[_0x9508('0x19')](function(_0x23c30e){logger[_0x9508('0x15')]('ChatGroup,\x20%s,\x20%s',_0x424e6a,_0x23c30e);_0x21f8c1(_0x23c30e);});});}
\ No newline at end of file
index c890884..c6ee4ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x843b=['emit','removeListener','register','length','chatGroup:','./chatGroup.events','save','remove'];(function(_0x2e1a8b,_0x5ef641){var _0x36bec1=function(_0xf8e21d){while(--_0xf8e21d){_0x2e1a8b['push'](_0x2e1a8b['shift']());}};_0x36bec1(++_0x5ef641);}(_0x843b,0xc5));var _0xb843=function(_0xe8054f,_0x1fa468){_0xe8054f=_0xe8054f-0x0;var _0x48e8f0=_0x843b[_0xe8054f];return _0x48e8f0;};'use strict';var ChatGroupEvents=require(_0xb843('0x0'));var events=[_0xb843('0x1'),_0xb843('0x2'),'update'];function createListener(_0x3889be,_0x370d4b){return function(_0x45210b){_0x370d4b[_0xb843('0x3')](_0x3889be,_0x45210b);};}function removeListener(_0x2954c4,_0x397cd2){return function(){ChatGroupEvents[_0xb843('0x4')](_0x2954c4,_0x397cd2);};}exports[_0xb843('0x5')]=function(_0x2ad5f3){for(var _0x3987db=0x0,_0x6e3fa3=events[_0xb843('0x6')];_0x3987db<_0x6e3fa3;_0x3987db++){var _0x29aa59=events[_0x3987db];var _0x15cbdd=createListener(_0xb843('0x7')+_0x29aa59,_0x2ad5f3);ChatGroupEvents['on'](_0x29aa59,_0x15cbdd);}};
\ No newline at end of file
+var _0xc39c=['length','chatGroup:','save','remove','update','emit','removeListener','register'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0xc39c,0xd2));var _0xcc39=function(_0x112f5e,_0x46092e){_0x112f5e=_0x112f5e-0x0;var _0xa323f5=_0xc39c[_0x112f5e];return _0xa323f5;};'use strict';var ChatGroupEvents=require('./chatGroup.events');var events=[_0xcc39('0x0'),_0xcc39('0x1'),_0xcc39('0x2')];function createListener(_0x5d885b,_0x6c204c){return function(_0x29b2e2){_0x6c204c[_0xcc39('0x3')](_0x5d885b,_0x29b2e2);};}function removeListener(_0x5bc333,_0x29c6c2){return function(){ChatGroupEvents[_0xcc39('0x4')](_0x5bc333,_0x29c6c2);};}exports[_0xcc39('0x5')]=function(_0x3118f8){for(var _0x592ad7=0x0,_0x32cf84=events[_0xcc39('0x6')];_0x592ad7<_0x32cf84;_0x592ad7++){var _0x12361a=events[_0x592ad7];var _0x46bb71=createListener(_0xcc39('0x7')+_0x12361a,_0x3118f8);ChatGroupEvents['on'](_0x12361a,_0x46bb71);}};
\ No newline at end of file
index 6f0fc8a..f0da486 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfdcc=['addMessage','put','/:id','update','delete','destroy','removeMembers','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatGroup.controller','get','index','/describe','isAuthenticated','show','getMembers','/:id/messages','getMessages','post','create','/:id/members','addMembers'];(function(_0x24a972,_0x5079b5){var _0x2d4871=function(_0xa273b2){while(--_0xa273b2){_0x24a972['push'](_0x24a972['shift']());}};_0x2d4871(++_0x5079b5);}(_0xfdcc,0x157));var _0xcfdc=function(_0x55d8c5,_0x10287a){_0x55d8c5=_0x55d8c5-0x0;var _0x225ae5=_0xfdcc[_0x55d8c5];return _0x225ae5;};'use strict';var multer=require(_0xcfdc('0x0'));var util=require(_0xcfdc('0x1'));var path=require(_0xcfdc('0x2'));var timeout=require('connect-timeout');var express=require(_0xcfdc('0x3'));var router=express[_0xcfdc('0x4')]();var auth=require(_0xcfdc('0x5'));var interaction=require(_0xcfdc('0x6'));var config=require(_0xcfdc('0x7'));var controller=require(_0xcfdc('0x8'));router[_0xcfdc('0x9')]('/',auth['isAuthenticated'](),controller[_0xcfdc('0xa')]);router['get'](_0xcfdc('0xb'),auth[_0xcfdc('0xc')](),controller['describe']);router[_0xcfdc('0x9')]('/:id',auth[_0xcfdc('0xc')](),controller[_0xcfdc('0xd')]);router[_0xcfdc('0x9')]('/:id/unread',auth['isAuthenticated'](),controller['getUnread']);router[_0xcfdc('0x9')]('/:id/members',auth[_0xcfdc('0xc')](),controller[_0xcfdc('0xe')]);router[_0xcfdc('0x9')](_0xcfdc('0xf'),auth['isAuthenticated'](),controller[_0xcfdc('0x10')]);router[_0xcfdc('0x11')]('/',auth['isAuthenticated'](),controller[_0xcfdc('0x12')]);router[_0xcfdc('0x11')](_0xcfdc('0x13'),auth['isAuthenticated'](),controller[_0xcfdc('0x14')]);router[_0xcfdc('0x11')]('/:id/messages',auth['isAuthenticated'](),controller[_0xcfdc('0x15')]);router[_0xcfdc('0x16')](_0xcfdc('0x17'),auth[_0xcfdc('0xc')](),controller[_0xcfdc('0x18')]);router[_0xcfdc('0x19')](_0xcfdc('0x17'),auth['isAuthenticated'](),controller[_0xcfdc('0x1a')]);router['delete'](_0xcfdc('0x13'),auth[_0xcfdc('0xc')](),controller[_0xcfdc('0x1b')]);module['exports']=router;
\ No newline at end of file
+var _0xa76b=['../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','describe','/:id/unread','getMembers','/:id/messages','getMessages','post','create','/:id/members','addMembers','addMessage','/:id','update','destroy','delete','removeMembers','exports','multer','util','connect-timeout','express','Router'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0xa76b,0x113));var _0xba76=function(_0x21d03a,_0x19b20b){_0x21d03a=_0x21d03a-0x0;var _0x2bbb22=_0xa76b[_0x21d03a];return _0x2bbb22;};'use strict';var multer=require(_0xba76('0x0'));var util=require(_0xba76('0x1'));var path=require('path');var timeout=require(_0xba76('0x2'));var express=require(_0xba76('0x3'));var router=express[_0xba76('0x4')]();var auth=require(_0xba76('0x5'));var interaction=require(_0xba76('0x6'));var config=require(_0xba76('0x7'));var controller=require('./chatGroup.controller');router[_0xba76('0x8')]('/',auth[_0xba76('0x9')](),controller[_0xba76('0xa')]);router[_0xba76('0x8')](_0xba76('0xb'),auth[_0xba76('0x9')](),controller[_0xba76('0xc')]);router[_0xba76('0x8')]('/:id',auth[_0xba76('0x9')](),controller['show']);router[_0xba76('0x8')](_0xba76('0xd'),auth[_0xba76('0x9')](),controller['getUnread']);router[_0xba76('0x8')]('/:id/members',auth['isAuthenticated'](),controller[_0xba76('0xe')]);router[_0xba76('0x8')](_0xba76('0xf'),auth[_0xba76('0x9')](),controller[_0xba76('0x10')]);router[_0xba76('0x11')]('/',auth[_0xba76('0x9')](),controller[_0xba76('0x12')]);router[_0xba76('0x11')](_0xba76('0x13'),auth[_0xba76('0x9')](),controller[_0xba76('0x14')]);router[_0xba76('0x11')](_0xba76('0xf'),auth[_0xba76('0x9')](),controller[_0xba76('0x15')]);router['put'](_0xba76('0x16'),auth[_0xba76('0x9')](),controller[_0xba76('0x17')]);router['delete'](_0xba76('0x16'),auth[_0xba76('0x9')](),controller[_0xba76('0x18')]);router[_0xba76('0x19')](_0xba76('0x13'),auth[_0xba76('0x9')](),controller[_0xba76('0x1a')]);module[_0xba76('0x1b')]=router;
\ No newline at end of file
index 73f6aa3..cad5c1c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9ffd=['sequelize','exports','BOOLEAN','ENUM','star','thumb','TEXT','STRING','DATE','out'];(function(_0x1d9aa0,_0x272488){var _0x226868=function(_0x17127c){while(--_0x17127c){_0x1d9aa0['push'](_0x1d9aa0['shift']());}};_0x226868(++_0x272488);}(_0x9ffd,0xaa));var _0xd9ff=function(_0x5aa2af,_0x5bdf96){_0x5aa2af=_0x5aa2af-0x0;var _0x3c7d61=_0x9ffd[_0x5aa2af];return _0x3c7d61;};'use strict';var Sequelize=require(_0xd9ff('0x0'));module[_0xd9ff('0x1')]={'closed':{'type':Sequelize[_0xd9ff('0x2')],'defaultValue':![]},'ratingValue':{'type':Sequelize['INTEGER']},'ratingType':{'type':Sequelize[_0xd9ff('0x3')](_0xd9ff('0x4'),_0xd9ff('0x5')),'defaultValue':_0xd9ff('0x4')},'ratingMessage':{'type':Sequelize['TEXT']},'pathTranscript':{'type':Sequelize[_0xd9ff('0x6')]},'mailTranscript':{'type':Sequelize[_0xd9ff('0x7')],'validate':{'isEmail':!![]}},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize[_0xd9ff('0x7')]},'note':{'type':Sequelize[_0xd9ff('0x7')]},'browserName':{'type':Sequelize[_0xd9ff('0x7')]},'browserVersion':{'type':Sequelize[_0xd9ff('0x7')]},'osName':{'type':Sequelize[_0xd9ff('0x7')]},'osVersion':{'type':Sequelize[_0xd9ff('0x7')]},'deviceModel':{'type':Sequelize[_0xd9ff('0x7')]},'deviceVendor':{'type':Sequelize[_0xd9ff('0x7')]},'deviceType':{'type':Sequelize[_0xd9ff('0x7')]},'referer':{'type':Sequelize['STRING']},'customerIp':{'type':Sequelize['STRING']},'formData':{'type':Sequelize['TEXT']('long')},'read1stAt':{'type':Sequelize[_0xd9ff('0x8')]},'lastMsgAt':{'type':Sequelize[_0xd9ff('0x8')]},'lastMsgDirection':{'type':Sequelize[_0xd9ff('0x3')]('in',_0xd9ff('0x9')),'defaultValue':'in','allowNull':![]},'closeReason':{'type':Sequelize[_0xd9ff('0x7')]}};
\ No newline at end of file
+var _0x087b=['long','out','sequelize','exports','ENUM','thumb','star','TEXT','STRING','DATE'];(function(_0x58c591,_0x30045e){var _0x21d63c=function(_0x1191f6){while(--_0x1191f6){_0x58c591['push'](_0x58c591['shift']());}};_0x21d63c(++_0x30045e);}(_0x087b,0x11a));var _0xb087=function(_0x59d89e,_0x55edf5){_0x59d89e=_0x59d89e-0x0;var _0x554e93=_0x087b[_0x59d89e];return _0x554e93;};'use strict';var Sequelize=require(_0xb087('0x0'));module[_0xb087('0x1')]={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'ratingValue':{'type':Sequelize['INTEGER']},'ratingType':{'type':Sequelize[_0xb087('0x2')]('star',_0xb087('0x3')),'defaultValue':_0xb087('0x4')},'ratingMessage':{'type':Sequelize[_0xb087('0x5')]},'pathTranscript':{'type':Sequelize[_0xb087('0x5')]},'mailTranscript':{'type':Sequelize[_0xb087('0x6')],'validate':{'isEmail':!![]}},'closedAt':{'type':Sequelize[_0xb087('0x7')]},'disposition':{'type':Sequelize[_0xb087('0x6')]},'note':{'type':Sequelize[_0xb087('0x6')]},'browserName':{'type':Sequelize[_0xb087('0x6')]},'browserVersion':{'type':Sequelize[_0xb087('0x6')]},'osName':{'type':Sequelize[_0xb087('0x6')]},'osVersion':{'type':Sequelize[_0xb087('0x6')]},'deviceModel':{'type':Sequelize[_0xb087('0x6')]},'deviceVendor':{'type':Sequelize[_0xb087('0x6')]},'deviceType':{'type':Sequelize[_0xb087('0x6')]},'referer':{'type':Sequelize[_0xb087('0x6')]},'customerIp':{'type':Sequelize[_0xb087('0x6')]},'formData':{'type':Sequelize['TEXT'](_0xb087('0x8'))},'read1stAt':{'type':Sequelize[_0xb087('0x7')]},'lastMsgAt':{'type':Sequelize[_0xb087('0x7')]},'lastMsgDirection':{'type':Sequelize[_0xb087('0x2')]('in',_0xb087('0x9')),'defaultValue':'in','allowNull':![]},'closeReason':{'type':Sequelize[_0xb087('0x6')]}};
\ No newline at end of file
index 419c2c9..9808842 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x887e=['server/files/chat/upload/','transcript-%s.txt','pathTranscript','User','ChatWebsite','CmContact','Messages','%s%d','agentAlias','customer','System','agent_alias','alias','fullname','[%s]\x20%s:\x20%s\x0a','secret','appendFileSync','MailAccount','MailServerOut','Smtp','service','host','port','authentication','auth','pass','SendMail','sendMail','\x22%s\x22\x20<%s>','email','mailTranscript','Mail\x20Transcript','addMessage','ChatMessage','omit','getMessages','pick','$gte','findAll','getMyMessages','includeAgent','addTags','ids','spread','emit','removeTags','unix','root','server','files','tmp','transcript-%d-%s.zip','direction','lastName','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','<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>','Chat','mkdirSync','Owner','N.A.','closedAt','YYYY-MM-DD\x20HH:mm:ss','osName','referer','customerIp','tail','existsSync','createReadStream','pipe','createWriteStream','out','Contact','renderFile','views','downloadInteraction.html','toFile','transcript-','log','unlinkSync','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./chatInteraction.socket','register','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','info','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','ChatInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','status','json','offset','limit','set','apply','update','destroy','end','sendStatus','stack','name','send','closed','unreadMessages','count','Users','map','TagIds','Tags','split','forEach','push','index','ChatInteraction','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','select','field','color','from','tools_tags','COUNT(*)','chat_messages','me.ChatInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','user_has_chat_interactions','left_join','users','cm_contacts','o.id\x20=\x20i.UserId','a.id\x20=\x20i.ChatWebsiteId','expr','advancedFilter','parse','value','dateStart','day','utc','format','endOf','and','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','isArray','condition','Messages.count','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','ContactId','c.firstName','\x20LIKE\x20?','c.email','\x20<\x20?','TagId','c.lastName','\x20>\x20?','filter','isNil','ChatWebsiteId','i.ChatWebsiteId\x20IN\x20?','concat','createdAt','$lte','null','\x20IS\x20NULL','replace','\x27\x27\x27\x27','isNumeric','i.id\x20LIKE\x20?','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','clone','read','toString','having','`Messages.count`\x20=\x200','%s\x20>\x200','`Messages.count`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','chat_interaction_has_tags','it.ChatInteractionId\x20=\x20i.id','t.id\x20IN\x20?','%s\x20=\x200','sequelize','keyBy','merge','Account.key','Contact.firstName','Contact.lastName','Contact.email','c.phone','Contact.phone','Contact.mobile','c.fax','Contact.fax','t.id\x20=\x20it.TagId','groupBy','ChatInteractionId','all','rows','show','params','includeAll','include','options','find','create','body','describe','customUpdate','abandonInteraction,\x20%s,\x20%s,\x20%s','entity\x20not\x20found','UserId','ValidationError','Interaction\x20already\x20assigned','disposition','AbandonInteraction','abandon','attachmentUpload','file','originalname','basename','filename','Attachment','findOne','Unauthorized','attachId','download','server/files/attachments/'];(function(_0x16d2b3,_0x79e08d){var _0x58c0b8=function(_0x2113c6){while(--_0x2113c6){_0x16d2b3['push'](_0x16d2b3['shift']());}};_0x58c0b8(++_0x79e08d);}(_0x887e,0x174));var _0xe887=function(_0x4513d5,_0x326d19){_0x4513d5=_0x4513d5-0x0;var _0x4f46bb=_0x887e[_0x4513d5];return _0x4f46bb;};'use strict';var pdf=require(_0xe887('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xe887('0x1'));var zipdir=require(_0xe887('0x2'));var jsonpatch=require(_0xe887('0x3'));var rp=require(_0xe887('0x4'));var moment=require(_0xe887('0x5'));var BPromise=require(_0xe887('0x6'));var Mustache=require(_0xe887('0x7'));var util=require(_0xe887('0x8'));var path=require(_0xe887('0x9'));var sox=require(_0xe887('0xa'));var csv=require(_0xe887('0xb'));var ejs=require(_0xe887('0xc'));var fs=require('fs');var _=require(_0xe887('0xd'));var squel=require(_0xe887('0xe'));var crypto=require('crypto');var jsforce=require(_0xe887('0xf'));var deskjs=require(_0xe887('0x10'));var toCsv=require('to-csv');var querystring=require(_0xe887('0x11'));var Papa=require(_0xe887('0x12'));var Redis=require('ioredis');var authService=require(_0xe887('0x13'));var qs=require(_0xe887('0x14'));var hardwareService=require(_0xe887('0x15'));var logger=require(_0xe887('0x16'))('api');var utils=require(_0xe887('0x17'));var config=require(_0xe887('0x18'));var db=require(_0xe887('0x19'))['db'];config['redis']=_[_0xe887('0x1a')](config[_0xe887('0x1b')],{'host':_0xe887('0x1c'),'port':0x18eb});var socket=require(_0xe887('0x1d'))(new Redis(config[_0xe887('0x1b')]));require(_0xe887('0x1e'))[_0xe887('0x1f')](socket);var jayson=require(_0xe887('0x20'));var client=jayson['client']['http']({'port':0x232b});var client9004=jayson[_0xe887('0x21')][_0xe887('0x22')]({'port':0x232c});function checkPasswordPattern(_0x3a95b4,_0x4f07c1,_0x2e1ff7){if(_0x2e1ff7){var _0x2cb3ab=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2cb3ab['test'](_0x4f07c1)){return _0x3a95b4;}else{throw new Error(_0xe887('0x23'));}}else{return _0x3a95b4;}}function respondWithRpcPromise(_0x2565f4,_0x3595f1,_0x1f72f7,_0x387b70){return new BPromise(function(_0x171d1c,_0x79795a){var _0x3696ec=_0x387b70||client;return _0x3696ec['request'](_0x2565f4,_0x1f72f7)[_0xe887('0x24')](function(_0x31bd26){logger[_0xe887('0x25')](_0xe887('0x26'),_0x3595f1,_0xe887('0x27'));logger[_0xe887('0x28')](_0xe887('0x29'),_0x3595f1,_0xe887('0x27'),JSON[_0xe887('0x2a')](_0x31bd26));if(_0x31bd26[_0xe887('0x2b')]){if(_0x31bd26['error'][_0xe887('0x2c')]===0x1f4){logger[_0xe887('0x2b')](_0xe887('0x26'),_0x3595f1,_0x31bd26[_0xe887('0x2b')][_0xe887('0x2d')]);return _0x79795a(_0x31bd26[_0xe887('0x2b')][_0xe887('0x2d')]);}logger[_0xe887('0x2b')]('ChatInteraction,\x20%s,\x20%s',_0x3595f1,_0x31bd26[_0xe887('0x2b')]['message']);return _0x171d1c(_0x31bd26[_0xe887('0x2b')]['message']);}else{logger[_0xe887('0x25')](_0xe887('0x26'),_0x3595f1,_0xe887('0x27'));_0x171d1c(_0x31bd26[_0xe887('0x2e')][_0xe887('0x2d')]);}})[_0xe887('0x2f')](function(_0x22d097){logger[_0xe887('0x2b')](_0xe887('0x26'),_0x3595f1,_0x22d097);_0x79795a(_0x22d097);});});}function respondWithStatusCode(_0x38626e,_0x56f485){_0x56f485=_0x56f485||0xcc;return function(_0x3a4624){if(_0x3a4624){return _0x38626e['sendStatus'](_0x56f485);}return _0x38626e[_0xe887('0x30')](_0x56f485)['end']();};}function respondWithResult(_0x384515,_0x4f0111){_0x4f0111=_0x4f0111||0xc8;return function(_0x289e45){if(_0x289e45){return _0x384515[_0xe887('0x30')](_0x4f0111)[_0xe887('0x31')](_0x289e45);}};}function respondWithFilteredResult(_0x5e1939,_0x10f8f6){return function(_0x11670b){if(_0x11670b){var _0x403ab1=_0x11670b['count'],_0x1fc957=_0x10f8f6[_0xe887('0x32')],_0x1f2f42=_0x10f8f6['offset']+_0x10f8f6[_0xe887('0x33')],_0x61dcd8;if(_0x1f2f42>=_0x403ab1){_0x1f2f42=_0x403ab1;_0x61dcd8=0xc8;}else{_0x61dcd8=0xce;}_0x5e1939[_0xe887('0x30')](_0x61dcd8);return _0x5e1939[_0xe887('0x34')]('Content-Range',_0x1fc957+'-'+_0x1f2f42+'/'+_0x403ab1)['json'](_0x11670b);}return null;};}function patchUpdates(_0x31696a){return function(_0x155d2c){try{jsonpatch[_0xe887('0x35')](_0x155d2c,_0x31696a,!![]);}catch(_0x5bfe06){return BPromise['reject'](_0x5bfe06);}return _0x155d2c['save']();};}function saveUpdates(_0x4128b5,_0x43a124){return function(_0xb02e32){if(_0xb02e32){return _0xb02e32[_0xe887('0x36')](_0x4128b5)[_0xe887('0x24')](function(_0x2007a0){return _0x2007a0;});}return null;};}function removeEntity(_0x49ee01,_0x4dd216){return function(_0x4716d3){if(_0x4716d3){return _0x4716d3[_0xe887('0x37')]()[_0xe887('0x24')](function(){_0x49ee01[_0xe887('0x30')](0xcc)[_0xe887('0x38')]();});}};}function handleEntityNotFound(_0x5b6d8b,_0x1c1027){return function(_0x885ea1){if(!_0x885ea1){_0x5b6d8b[_0xe887('0x39')](0x194);}return _0x885ea1;};}function handleError(_0x5751c8,_0x5b118d){_0x5b118d=_0x5b118d||0x1f4;return function(_0x25b06b){logger[_0xe887('0x2b')](_0x25b06b[_0xe887('0x3a')]);if(_0x25b06b[_0xe887('0x3b')]){delete _0x25b06b[_0xe887('0x3b')];}_0x5751c8[_0xe887('0x30')](_0x5b118d)[_0xe887('0x3c')](_0x25b06b);};}function getInteractionUnreadMessages(_0x265777){return new BPromise(function(_0x38b93e,_0x20b6f1){try{if(_0x265777[_0xe887('0x3d')]){_0x265777[_0xe887('0x3e')]=0x0;_0x38b93e(_0x265777);}else{return db['ChatMessage'][_0xe887('0x3f')]({'where':{'ChatInteractionId':_0x265777['id'],'direction':'in','read':![]}})['then'](function(_0x4f42ec){_0x265777[_0xe887('0x3e')]=_0x4f42ec;_0x38b93e(_0x265777);});}}catch(_0x58681b){_0x20b6f1(_0x58681b);}});}function getInteractionUsers(_0x34ca10,_0x590aa5){return new BPromise(function(_0x4139ff,_0x4b9e7d){try{if(_0x590aa5[_0x34ca10['id']]){_0x34ca10[_0xe887('0x40')]=_[_0xe887('0x41')](_0x590aa5[_0x34ca10['id']],function(_0x26c091){return{'id':_0x26c091['id']};});}}catch(_0x391c98){_0x4b9e7d(_0x391c98);}_0x4139ff(_0x34ca10);});}function getInteractionTags(_0x33ba17,_0x23af1f){return new BPromise(function(_0x760e3e,_0x391cdb){try{if(_0x33ba17[_0xe887('0x42')]){_0x33ba17[_0xe887('0x43')]=[];_0x33ba17[_0xe887('0x42')][_0xe887('0x44')](',')[_0xe887('0x45')](function(_0x9cc050){_0x33ba17[_0xe887('0x43')][_0xe887('0x46')](_0x23af1f[_0x9cc050]);});}delete _0x33ba17['TagIds'];}catch(_0x3b3d87){_0x391cdb(_0x3b3d87);}_0x760e3e(_0x33ba17);});}function updateChatInteraction(_0x10356e,_0x5139b6,_0x20ebe5){return new BPromise(function(_0xd63eee,_0x94b6f8){return getInteractionUnreadMessages(_0x10356e)[_0xe887('0x24')](function(_0x717449){return getInteractionUsers(_0x717449,_0x20ebe5);})['then'](function(_0x45bc4d){return getInteractionTags(_0x45bc4d,_0x5139b6);})[_0xe887('0x24')](function(_0x5ad51b){_0xd63eee(_0x5ad51b);})[_0xe887('0x2f')](function(_0x1c15a9){_0x94b6f8(_0x1c15a9);});});}exports[_0xe887('0x47')]=function(_0x2b252a,_0x41f488){var _0x157dae={},_0x5bddbf={},_0x1e84fb={'count':0x0,'rows':[]};var _0x1546e5=db[_0xe887('0x48')][_0xe887('0x49')];_0x5bddbf[_0xe887('0x4a')]=_[_0xe887('0x4b')](_0x1546e5);_0x5bddbf[_0xe887('0x4c')]=_[_0xe887('0x4b')](_0x2b252a['query']);_0x5bddbf[_0xe887('0x4d')]=_[_0xe887('0x4e')](_0x5bddbf[_0xe887('0x4a')],_0x5bddbf[_0xe887('0x4c')]);_0x157dae[_0xe887('0x4f')]=_[_0xe887('0x4e')](_0x5bddbf[_0xe887('0x4a')],qs[_0xe887('0x50')](_0x2b252a[_0xe887('0x4c')]['fields']));_0x157dae[_0xe887('0x4f')]=_0x157dae[_0xe887('0x4f')][_0xe887('0x51')]?_0x157dae[_0xe887('0x4f')]:_0x5bddbf[_0xe887('0x4a')];if(!_0x2b252a[_0xe887('0x4c')][_0xe887('0x52')](_0xe887('0x53'))){_0x157dae[_0xe887('0x33')]=qs[_0xe887('0x33')](_0x2b252a[_0xe887('0x4c')][_0xe887('0x33')]);_0x157dae[_0xe887('0x32')]=qs[_0xe887('0x32')](_0x2b252a[_0xe887('0x4c')][_0xe887('0x32')]);}_0x157dae[_0xe887('0x54')]=qs[_0xe887('0x55')](_0x2b252a['query'][_0xe887('0x55')]);_0x157dae[_0xe887('0x56')]=qs['filters'](_['pick'](_0x2b252a[_0xe887('0x4c')],_0x5bddbf[_0xe887('0x4d')]));var _0x263251=[];var _0x143639=squel[_0xe887('0x57')]()['field']('id')[_0xe887('0x58')](_0xe887('0x3b'))[_0xe887('0x58')](_0xe887('0x59'))[_0xe887('0x5a')](_0xe887('0x5b'));var _0x5b6efa=squel[_0xe887('0x57')]()[_0xe887('0x58')](_0xe887('0x5c'))[_0xe887('0x5a')](_0xe887('0x5d'),'me')['where'](_0xe887('0x5e'))[_0xe887('0x56')](_0xe887('0x5f'))[_0xe887('0x56')]('me.read\x20=\x20false');var _0x259252=squel[_0xe887('0x57')]()[_0xe887('0x58')]('u.id')[_0xe887('0x58')]('ui.ChatInteractionId')[_0xe887('0x5a')](_0xe887('0x60'),'ui')[_0xe887('0x61')](_0xe887('0x62'),'u','u.id\x20=\x20ui.UserId');var _0x14fcfb=squel[_0xe887('0x57')]()['from']('chat_interactions','i')[_0xe887('0x61')](_0xe887('0x63'),'c','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL')[_0xe887('0x61')](_0xe887('0x62'),'o',_0xe887('0x64'))[_0xe887('0x61')]('chat_websites','a',_0xe887('0x65'))[_0xe887('0x61')](_0xe887('0x5d'),'me',_0xe887('0x5e'));var _0x39952e=squel[_0xe887('0x66')]();if(_0x2b252a[_0xe887('0x4c')][_0xe887('0x67')]){var _0x5a92e9=JSON[_0xe887('0x68')](_0x2b252a['query'][_0xe887('0x67')]);_[_0xe887('0x4b')](_0x5a92e9)['forEach'](function(_0x3d3eaf){var _0x3ad077=_0x5a92e9[_0x3d3eaf];if(_0x3d3eaf==='createdAt'){var _0x3d815c=moment(_0x3ad077[_0xe887('0x69')][_0xe887('0x6a')])['startOf'](_0xe887('0x6b'))[_0xe887('0x6c')]()[_0xe887('0x6d')]();var _0x132ae9=moment(_0x132ae9)[_0xe887('0x6c')]()[_0xe887('0x6e')]('day')[_0xe887('0x6d')]();_0x39952e[_0xe887('0x6f')](_0xe887('0x70'),_0x3d815c,_0x132ae9);}else{if(_[_0xe887('0x71')](_0x3ad077[_0xe887('0x72')])){_0x3ad077[_0xe887('0x72')][_0xe887('0x45')](function(_0x47c779){switch(_0x3ad077[_0xe887('0x72')][_0xe887('0x69')]){case'IS':if(_0x3d3eaf!=='TagId'&&_0x3d3eaf!==_0xe887('0x73')){if(_[_0xe887('0x71')](_0x3ad077[_0xe887('0x69')])&&_0x3ad077[_0xe887('0x69')][_0xe887('0x51')]>0x1){_0x39952e[_0xe887('0x6f')](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+_0xe887('0x75'),_0x3ad077[_0xe887('0x69')]);}else{_0x39952e[_0xe887('0x6f')](_0x3ad077['tableAlias']+'.'+_0x3d3eaf+'\x20=\x20?',_0x3ad077[_0xe887('0x69')][0x0]);}}break;case'=':_0x39952e['and'](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+_0xe887('0x76'),_0x3ad077[_0xe887('0x69')]);break;case _0xe887('0x77'):if(_0x3d3eaf===_0xe887('0x78')){_0x39952e[_0xe887('0x6f')](_0xe887('0x79')+_0xe887('0x7a'),'%'+_0x3ad077[_0xe887('0x69')]+'%');_0x39952e['or']('c.lastName'+_0xe887('0x7a'),'%'+_0x3ad077['value']+'%');_0x39952e['or'](_0xe887('0x7b')+_0xe887('0x7a'),'%'+_0x3ad077[_0xe887('0x69')]+'%');}else{_0x39952e[_0xe887('0x6f')](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+_0xe887('0x7a'),'%'+_0x3ad077[_0xe887('0x69')]+'%');}break;case'>':_0x39952e[_0xe887('0x6f')](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+'\x20>\x20?',_0x3ad077[_0xe887('0x69')]);break;case'<':_0x39952e['and'](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+_0xe887('0x7c'),_0x3ad077['value']);break;}});}else{switch(_0x3ad077[_0xe887('0x72')][_0xe887('0x69')]){case'IS':if(_0x3d3eaf!==_0xe887('0x7d')&&_0x3d3eaf!==_0xe887('0x73')){if(_[_0xe887('0x71')](_0x3ad077[_0xe887('0x69')])&&_0x3ad077[_0xe887('0x69')][_0xe887('0x51')]>0x1){_0x39952e['and'](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+'\x20IN\x20?',_0x3ad077['value']);}else{_0x39952e[_0xe887('0x6f')](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+'\x20=\x20?',_0x3ad077[_0xe887('0x69')][0x0]);}}break;case'=':_0x39952e[_0xe887('0x6f')](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+_0xe887('0x76'),_0x3ad077[_0xe887('0x69')]);break;case _0xe887('0x77'):if(_0x3d3eaf===_0xe887('0x78')){_0x39952e[_0xe887('0x6f')]('c.firstName'+'\x20LIKE\x20?','%'+_0x3ad077[_0xe887('0x69')]+'%');_0x39952e['or'](_0xe887('0x7e')+'\x20LIKE\x20?','%'+_0x3ad077['value']+'%');_0x39952e['or'](_0xe887('0x7b')+_0xe887('0x7a'),'%'+_0x3ad077[_0xe887('0x69')]+'%');}else{_0x39952e['and'](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+_0xe887('0x7a'),'%'+_0x3ad077['value']+'%');}break;case'>':_0x39952e[_0xe887('0x6f')](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+_0xe887('0x7f'),_0x3ad077[_0xe887('0x69')]);break;case'<':_0x39952e['and'](_0x3ad077[_0xe887('0x74')]+'.'+_0x3d3eaf+_0xe887('0x7c'),_0x3ad077[_0xe887('0x69')]);break;}}}});}else{var _0x4718de=_(Object[_0xe887('0x4b')](_0x2b252a[_0xe887('0x4c')]))[_0xe887('0x41')](function(_0x3b5c0c){return _0x1546e5[_0xe887('0x52')](_0x3b5c0c)?_0x3b5c0c:undefined;})[_0xe887('0x80')](function(_0x2db3d0){return!_[_0xe887('0x81')](_0x2db3d0);})[_0xe887('0x69')]();if(!_['isEmpty'](_0x4718de)){_0x4718de[_0xe887('0x45')](function(_0xb521be){if(_0xb521be===_0xe887('0x82')){_0x14fcfb[_0xe887('0x56')](_0xe887('0x83'),[][_0xe887('0x84')](_0x2b252a[_0xe887('0x4c')][_0xb521be]));}else if(_0xb521be===_0xe887('0x85')){var _0x5a328c=JSON['parse'](_0x2b252a['query'][_0xb521be])['$gte'];var _0x374f8f=JSON['parse'](_0x2b252a[_0xe887('0x4c')][_0xb521be])[_0xe887('0x86')];_0x14fcfb[_0xe887('0x56')](_0xe887('0x70'),_0x5a328c,_0x374f8f);}else{if(_0x2b252a[_0xe887('0x4c')][_0xb521be]===_0xe887('0x87')){_0x14fcfb[_0xe887('0x56')]('i.'+_0xb521be+_0xe887('0x88'));}else{_0x14fcfb['where']('i.'+_0xb521be+_0xe887('0x76'),_0x2b252a[_0xe887('0x4c')][_0xb521be]);}}});}if(_0x2b252a['query'][_0xe887('0x80')]){var _0x389022=_0x2b252a[_0xe887('0x4c')][_0xe887('0x80')][_0xe887('0x89')]('\x5c','\x5c\x5c')[_0xe887('0x89')]('\x27\x27',_0xe887('0x8a'));if(qs[_0xe887('0x8b')](_0x389022)){_0x39952e['or'](_0xe887('0x8c'),_0x389022+'%');}else{var _0x2939d8=[];_0x389022[_0xe887('0x44')]('\x20')[_0xe887('0x45')](function(_0x52cebe){_0x2939d8[_0xe887('0x46')]('+'+_0x52cebe['toString']());});var _0x5162c0=_0x2939d8[_0xe887('0x8d')]('\x20');_0x39952e['or'](_0xe887('0x8e'),_0x5162c0)['or'](_0xe887('0x8f'),_0x389022+'%');}}}_0x14fcfb[_0xe887('0x56')](_0x39952e);if(_0x157dae['order']){_0x157dae['order'][_0xe887('0x45')](function(_0x2b9dc6){_0x14fcfb[_0xe887('0x54')]('i.'+_0x2b9dc6[0x0],_0x2b9dc6[0x1]===_0xe887('0x90')?![]:!![]);});}_0x14fcfb[_0xe887('0x91')]('i.id');var _0x4e04ed={'type':db[_0xe887('0x92')][_0xe887('0x93')][_0xe887('0x94')],'raw':!![]};var _0x582d07=_0x14fcfb[_0xe887('0x95')]()['field']('COUNT(*)');if(!_0x2b252a[_0xe887('0x4c')][_0xe887('0x67')]){if(_0x2b252a[_0xe887('0x4c')]['read']){if(_0x2b252a[_0xe887('0x4c')][_0xe887('0x96')]==0x1){_0x582d07[_0xe887('0x56')](util[_0xe887('0x6d')]('%s\x20=\x200',_0x5b6efa[_0xe887('0x97')]()));_0x14fcfb[_0xe887('0x98')](_0xe887('0x99'));}else{_0x582d07[_0xe887('0x56')](util[_0xe887('0x6d')](_0xe887('0x9a'),_0x5b6efa[_0xe887('0x97')]()));_0x14fcfb[_0xe887('0x98')](_0xe887('0x9b'));}}if(_0x2b252a['query'][_0xe887('0x9c')]){var _0x27d0a1=_[_0xe887('0x71')](_0x2b252a[_0xe887('0x4c')][_0xe887('0x9c')])?_0x2b252a[_0xe887('0x4c')][_0xe887('0x9c')]:new Array(_0x2b252a['query'][_0xe887('0x9c')]);var _0x53aaec=squel[_0xe887('0x66')]();_0x27d0a1[_0xe887('0x45')](function(_0x15f2bc){_0x53aaec['or'](_0xe887('0x9d'),'%,'+_0x15f2bc+',%');});_0x14fcfb[_0xe887('0x98')](_0x53aaec);_0x582d07[_0xe887('0x61')](_0xe887('0x9e'),'it',_0xe887('0x9f'));_0x582d07[_0xe887('0x61')](_0xe887('0x5b'),'t','t.id\x20=\x20it.TagId');_0x582d07[_0xe887('0x56')](_0xe887('0xa0'),_0x27d0a1);}}else{var _0x5a92e9=JSON[_0xe887('0x68')](_0x2b252a[_0xe887('0x4c')][_0xe887('0x67')]);_[_0xe887('0x4b')](_0x5a92e9)[_0xe887('0x45')](function(_0x5e0e68){var _0x3da047=_0x5a92e9[_0x5e0e68];if(_0x5e0e68===_0xe887('0x7d')){var _0x306bb9=_0x3da047[_0xe887('0x69')];var _0x16d175=squel['expr']();_0x306bb9[_0xe887('0x45')](function(_0x45db65){_0x16d175['or'](_0xe887('0x9d'),'%,'+_0x45db65+',%');});_0x14fcfb[_0xe887('0x98')](_0x16d175);_0x582d07[_0xe887('0x61')]('mail_interaction_has_tags','it','it.MailInteractionId\x20=\x20i.id');_0x582d07[_0xe887('0x61')]('tools_tags','t','t.id\x20=\x20it.TagId');_0x582d07[_0xe887('0x56')](_0xe887('0xa0'),_0x306bb9);}else if(_0x5e0e68===_0xe887('0x73')){if(_0x3da047[_0xe887('0x69')]['length']===0x1){if(_0x3da047[_0xe887('0x69')][0x0]===0x1){_0x582d07[_0xe887('0x56')](util['format'](_0xe887('0xa1'),_0x5b6efa[_0xe887('0x97')]()));_0x14fcfb[_0xe887('0x98')](_0xe887('0x99'));}else{_0x582d07['where'](util[_0xe887('0x6d')](_0xe887('0x9a'),_0x5b6efa['toString']()));_0x14fcfb['having']('`Messages.count`\x20>\x200');}}}});}db[_0xe887('0xa2')][_0xe887('0x4c')](_0x582d07[_0xe887('0x97')](),_0x4e04ed)['then'](function(_0x372929){_0x1e84fb[_0xe887('0x3f')]=_0x372929[_0xe887('0x51')];if(_0x1e84fb[_0xe887('0x3f')]===0x0)return[];return db[_0xe887('0xa2')][_0xe887('0x4c')](_0x143639[_0xe887('0x97')](),_0x4e04ed)[_0xe887('0x24')](function(_0x26414a){_0x263251=_[_0xe887('0xa3')](_0x26414a,'id');_0x4e04ed=_[_0xe887('0xa4')](_0x4e04ed,{'model':db[_0xe887('0x48')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x14fcfb[_0xe887('0x58')]('a.key',_0xe887('0xa5'));_0x14fcfb[_0xe887('0x58')]('i.*');_0x14fcfb[_0xe887('0x58')](_0xe887('0x79'),_0xe887('0xa6'));_0x14fcfb[_0xe887('0x58')](_0xe887('0x7e'),_0xe887('0xa7'));_0x14fcfb['field']('c.email',_0xe887('0xa8'));_0x14fcfb[_0xe887('0x58')](_0xe887('0xa9'),_0xe887('0xaa'));_0x14fcfb[_0xe887('0x58')]('c.mobile',_0xe887('0xab'));_0x14fcfb['field'](_0xe887('0xac'),_0xe887('0xad'));_0x14fcfb[_0xe887('0x58')]('GROUP_CONCAT(DISTINCT\x20t.id)',_0xe887('0x42'));_0x14fcfb[_0xe887('0x61')](_0xe887('0x9e'),'it',_0xe887('0x9f'));_0x14fcfb[_0xe887('0x61')](_0xe887('0x5b'),'t',_0xe887('0xae'));_0x14fcfb[_0xe887('0x33')](_0x157dae['limit']);_0x14fcfb[_0xe887('0x32')](_0x157dae[_0xe887('0x32')]);return db[_0xe887('0xa2')][_0xe887('0x4c')](_0x14fcfb['toString'](),_0x4e04ed);})[_0xe887('0x24')](function(_0x44350d){_0x259252[_0xe887('0x56')]('ui.ChatInteractionId\x20IN\x20?',_['map'](_0x44350d,'id'));return db['sequelize'][_0xe887('0x4c')](_0x259252['toString'](),_0x4e04ed)[_0xe887('0x24')](function(_0x5130bd){var _0x5d57be=_[_0xe887('0xaf')](_0x5130bd,_0xe887('0xb0'));var _0x363233=[];_0x44350d['forEach'](function(_0x3a9fb6){_0x363233[_0xe887('0x46')](updateChatInteraction(_0x3a9fb6,_0x263251,_0x5d57be));});return BPromise[_0xe887('0xb1')](_0x363233);});});})[_0xe887('0x24')](function(_0x4e0e09){_0x1e84fb[_0xe887('0xb2')]=_0x4e0e09;return _0x1e84fb;})[_0xe887('0x24')](respondWithFilteredResult(_0x41f488,_0x157dae))['catch'](handleError(_0x41f488,null));};exports[_0xe887('0xb3')]=function(_0x418133,_0x1ca2c0){var _0x3624f6={'raw':![],'where':{'id':_0x418133[_0xe887('0xb4')]['id']}},_0x2330d9={};_0x2330d9[_0xe887('0x4a')]=_['keys'](db[_0xe887('0x48')][_0xe887('0x49')]);_0x2330d9['query']=_[_0xe887('0x4b')](_0x418133[_0xe887('0x4c')]);_0x2330d9[_0xe887('0x4d')]=_[_0xe887('0x4e')](_0x2330d9['model'],_0x2330d9[_0xe887('0x4c')]);_0x3624f6['attributes']=_[_0xe887('0x4e')](_0x2330d9[_0xe887('0x4a')],qs[_0xe887('0x50')](_0x418133['query'][_0xe887('0x50')]));_0x3624f6[_0xe887('0x4f')]=_0x3624f6[_0xe887('0x4f')]['length']?_0x3624f6[_0xe887('0x4f')]:_0x2330d9['model'];if(_0x418133['query'][_0xe887('0xb5')]){_0x3624f6[_0xe887('0xb6')]=[{'all':!![]}];}_0x3624f6=_['merge']({},_0x3624f6,_0x418133[_0xe887('0xb7')]);return db[_0xe887('0x48')][_0xe887('0xb8')](_0x3624f6)['then'](handleEntityNotFound(_0x1ca2c0,null))[_0xe887('0x24')](respondWithResult(_0x1ca2c0,null))[_0xe887('0x2f')](handleError(_0x1ca2c0,null));};exports['create']=function(_0x18a4df,_0x2baa02){return db[_0xe887('0x48')][_0xe887('0xb9')](_0x18a4df['body'],{})[_0xe887('0x24')](respondWithResult(_0x2baa02,0xc9))[_0xe887('0x2f')](handleError(_0x2baa02,null));};exports[_0xe887('0x36')]=function(_0x58e5f8,_0x5856ec){if(_0x58e5f8['body']['id']){delete _0x58e5f8[_0xe887('0xba')]['id'];}return db['ChatInteraction'][_0xe887('0xb8')]({'where':{'id':_0x58e5f8['params']['id']}})[_0xe887('0x24')](handleEntityNotFound(_0x5856ec,null))[_0xe887('0x24')](saveUpdates(_0x58e5f8[_0xe887('0xba')],null))[_0xe887('0x24')](respondWithResult(_0x5856ec,null))['catch'](handleError(_0x5856ec,null));};exports[_0xe887('0x37')]=function(_0x3591e1,_0x409a74){return db[_0xe887('0x48')][_0xe887('0xb8')]({'where':{'id':_0x3591e1[_0xe887('0xb4')]['id']}})[_0xe887('0x24')](handleEntityNotFound(_0x409a74,null))[_0xe887('0x24')](removeEntity(_0x409a74,null))['catch'](handleError(_0x409a74,null));};exports[_0xe887('0xbb')]=function(_0x417e86,_0x59ebcd){return db[_0xe887('0x48')][_0xe887('0xbb')]()['then'](respondWithResult(_0x59ebcd,null))[_0xe887('0x2f')](handleError(_0x59ebcd,null));};exports[_0xe887('0xbc')]=function(_0x18747a,_0x806aa4){if(_0x18747a[_0xe887('0xba')]['id']){delete _0x18747a[_0xe887('0xba')]['id'];}return db['ChatInteraction']['find']({'where':{'id':_0x18747a[_0xe887('0xb4')]['id']}})['then'](handleEntityNotFound(_0x806aa4,null))[_0xe887('0x24')](saveUpdates(_0x18747a[_0xe887('0xba')],null))['then'](respondWithResult(_0x806aa4,null))[_0xe887('0x2f')](handleError(_0x806aa4,null));};exports['abandon']=function(_0x449619,_0x46169c,_0x51c82b){if(_0x449619[_0xe887('0xba')]['id']){delete _0x449619[_0xe887('0xba')]['id'];}return db[_0xe887('0x48')][_0xe887('0xb8')]({'where':{'id':_0x449619['params']['id']}})[_0xe887('0x24')](function(_0x793238){if(!_0x793238){logger[_0xe887('0x2b')](_0xe887('0xbd'),'abandon',0x194,_0xe887('0xbe'));_0x46169c[_0xe887('0x39')](0x194);}else{if(_0x793238[_0xe887('0xbf')]){throw new db[(_0xe887('0x92'))][(_0xe887('0xc0'))](_0xe887('0xc1'));}}return _0x793238;})[_0xe887('0x24')](function(_0x56c10e){if(_0x56c10e){return _0x56c10e[_0xe887('0x36')]({'closed':_0x449619[_0xe887('0xba')][_0xe887('0x3d')],'disposition':_0x449619[_0xe887('0xba')][_0xe887('0xc2')]})['then'](function(_0x37cf4b){return _0x37cf4b;});}})[_0xe887('0x24')](function(_0x45d24f){return respondWithRpcPromise(_0xe887('0xc3'),_0xe887('0xc4'),_0x449619[_0xe887('0xba')],client9004);})[_0xe887('0x24')](respondWithResult(_0x46169c,null))[_0xe887('0x2f')](handleError(_0x46169c,null));};exports[_0xe887('0xc5')]=function(_0x37962c,_0x40edb7,_0x4bfa36){_0x37962c[_0xe887('0xba')]['name']=_0x37962c[_0xe887('0xc6')][_0xe887('0xc7')];_0x37962c[_0xe887('0xba')][_0xe887('0xc8')]=_0x37962c[_0xe887('0xc6')][_0xe887('0xc9')];_0x37962c['body']['type']=_0x37962c[_0xe887('0xc6')]['mimetype'];return db[_0xe887('0xca')][_0xe887('0xb9')](_0x37962c[_0xe887('0xba')])[_0xe887('0x24')](respondWithResult(_0x40edb7,0xc9))['catch'](handleError(_0x40edb7,null));};exports['attachmentDownload']=function(_0xae9166,_0x417783,_0x252d67){return db[_0xe887('0x48')][_0xe887('0xcb')]({'where':{'id':_0xae9166[_0xe887('0xb4')]['id']},'raw':!![]})[_0xe887('0x24')](handleEntityNotFound(_0x417783,null))[_0xe887('0x24')](function(_0x314d20){if(_0x314d20){if(_0x314d20[_0xe887('0x3d')]){return _0x417783[_0xe887('0x30')](0x193)[_0xe887('0x31')]({'status':0x193,'message':_0xe887('0xcc')});}return db[_0xe887('0xca')][_0xe887('0xcb')]({'where':{'id':_0xae9166['query'][_0xe887('0xcd')]},'raw':!![]})[_0xe887('0x24')](handleEntityNotFound(_0x417783,null));}})[_0xe887('0x24')](function(_0x1ab658){if(_0x1ab658){return _0x417783[_0xe887('0xce')](path['join'](config['root'],_0xe887('0xcf'),_0x1ab658['basename']));}})[_0xe887('0x2f')](handleError(_0x417783,null));};exports['close']=function(_0x2c232d,_0x36eb1d){var _0x314e88=null;var _0x26ced0=null;var _0x599528=null;var _0xd491fa=null;if(_0x2c232d[_0xe887('0xba')]['id']){delete _0x2c232d[_0xe887('0xba')]['id'];}if(_0x2c232d[_0xe887('0xba')]['mailTranscript']){_0xd491fa=path[_0xe887('0x8d')](config['root'],_0xe887('0xd0'),util['format'](_0xe887('0xd1'),Date['now']()));_0x2c232d[_0xe887('0xba')][_0xe887('0xd2')]=_0xd491fa;}return db[_0xe887('0x48')][_0xe887('0xb8')]({'where':{'id':_0x2c232d[_0xe887('0xb4')]['id']},'include':[{'model':db['ChatMessage'],'as':'Messages','include':[{'model':db[_0xe887('0xd3')],'as':'User'}]}]})[_0xe887('0x24')](handleEntityNotFound(_0x36eb1d,null))[_0xe887('0x24')](saveUpdates(_0x2c232d[_0xe887('0xba')],null))['then'](function(_0x1b255f){if(_0x1b255f){_0x314e88=_0x1b255f;return db[_0xe887('0xd4')]['find']({'where':{'id':_0x314e88['ChatWebsiteId']}});}})[_0xe887('0x24')](function(_0x1dcba8){if(_0x1dcba8){_0x599528=_0x1dcba8;return db[_0xe887('0xd5')][_0xe887('0xb8')]({'where':{'id':_0x314e88[_0xe887('0x78')]}});}})[_0xe887('0x24')](function(_0x31530a){if(_0x31530a){_0x26ced0=_0x31530a;if(_0xd491fa){var _0x27712f=null;for(var _0x29d6ce=0x1;_0x29d6ce<_0x314e88[_0xe887('0xd6')][_0xe887('0x51')];++_0x29d6ce){_0x27712f=_0x314e88['Messages'][_0x29d6ce];var _0x19a6bc=_0x27712f['UserId']?util[_0xe887('0x6d')](_0xe887('0xd7'),_0x599528[_0xe887('0xd8')],_0x27712f[_0xe887('0xbf')]):'System';var _0x43a9f6=_0x2c232d[_0xe887('0xba')][_0xe887('0xd9')]||util[_0xe887('0x6d')](_0xe887('0xd7'),'Visitor',_0x27712f[_0xe887('0x78')]);switch(_0x599528['agentIdentifier']){case'website_alias':_0x19a6bc=_0x27712f[_0xe887('0xbf')]?util[_0xe887('0x6d')]('%s%d',_0x599528[_0xe887('0xd8')],_0x27712f[_0xe887('0xbf')]):_0xe887('0xda');break;case _0xe887('0xdb'):_0x19a6bc=_0x27712f[_0xe887('0xbf')]?_0x27712f['User'][_0xe887('0xdc')]||_0x27712f[_0xe887('0xd3')]['fullname']:_0xe887('0xda');break;case'agent_fullname':_0x19a6bc=_0x27712f[_0xe887('0xbf')]?_0x27712f['User'][_0xe887('0xdd')]:_0xe887('0xda');break;default:_0x19a6bc=_0x27712f[_0xe887('0xbf')]?util[_0xe887('0x6d')](_0xe887('0xd7'),_0x599528['agentAlias'],_0x27712f['UserId']):_0xe887('0xda');}var _0x2ed18e=util[_0xe887('0x6d')](_0xe887('0xde'),moment(_0x27712f[_0xe887('0x85')])['format']('MM/DD/YYYY\x20HH:mm:ss'),_0x27712f['direction']==='in'?_0x43a9f6:_0x19a6bc,_0x27712f[_0xe887('0xba')]);if(!_0x27712f[_0xe887('0xdf')]){fs[_0xe887('0xe0')](_0xd491fa,_0x2ed18e);}}return db[_0xe887('0xe1')][_0xe887('0xcb')]({'where':{'service':!![]},'include':[{'model':db[_0xe887('0xe2')],'as':_0xe887('0xe3'),'raw':!![]}]});}}})[_0xe887('0x24')](function(_0x3f7196){if(_0x3f7196&&_0x3f7196[_0xe887('0xe3')]&&_0x2c232d[_0xe887('0xba')]){var _0x414c12={'tls':{'rejectUnauthorized':![]}};if(_0x3f7196[_0xe887('0xe3')][_0xe887('0xe4')]){_0x414c12[_0xe887('0xe4')]=_0x3f7196['Smtp'][_0xe887('0xe4')];}else{_0x414c12[_0xe887('0xe5')]=_0x3f7196[_0xe887('0xe3')][_0xe887('0xe5')];_0x414c12[_0xe887('0xe6')]=_0x3f7196[_0xe887('0xe3')][_0xe887('0xe6')];_0x414c12['secure']=_0x3f7196[_0xe887('0xe3')]['secure'];}if(_0x3f7196[_0xe887('0xe3')][_0xe887('0xe7')]){_0x414c12[_0xe887('0xe8')]={'user':_0x3f7196['Smtp']['user'],'pass':_0x3f7196[_0xe887('0xe3')][_0xe887('0xe9')]};}return respondWithRpcPromise(_0xe887('0xea'),_0xe887('0xeb'),{'account':_0x414c12,'message':{'from':util[_0xe887('0x6d')](_0xe887('0xec'),_0x3f7196[_0xe887('0x3b')],_0x3f7196[_0xe887('0xed')]||_0x3f7196[_0xe887('0xe3')]['user']),'to':_0x2c232d[_0xe887('0xba')][_0xe887('0xee')],'subject':_0xe887('0xef'),'text':util[_0xe887('0x6d')]('Hi\x20%s,\x20attached\x20you\x20can\x20find\x20your\x20transcript\x20file.\x20\x0a\x0aRegards.\x20\x0a\x0a',_0x2c232d[_0xe887('0xba')][_0xe887('0xee')]),'attachments':[{'path':_0xd491fa}]}})[_0xe887('0x24')](function(){return _0x314e88;})[_0xe887('0x2f')](function(_0x1b927c){console['error'](_0x1b927c);});}else{return _0x314e88;}})[_0xe887('0x24')](respondWithStatusCode(_0x36eb1d,0xc8))[_0xe887('0x2f')](handleError(_0x36eb1d,null));};exports[_0xe887('0xf0')]=function(_0x45b504,_0xbe2f5,_0x4a8dcd){return db[_0xe887('0xf1')]['find']({'where':{'id':_0x45b504[_0xe887('0xb4')]['id']}})[_0xe887('0x24')](handleEntityNotFound(_0xbe2f5,null))[_0xe887('0x24')](function(_0x91c6a3){if(_0x91c6a3){return _0x91c6a3[_0xe887('0xf0')](_0x45b504[_0xe887('0xba')]['ids'],_[_0xe887('0xf2')](_0x45b504['body'],['ids','id'])||{});}})[_0xe887('0x24')](respondWithResult(_0xbe2f5,null))[_0xe887('0x2f')](handleError(_0xbe2f5,null));};exports[_0xe887('0xf3')]=function(_0x369eea,_0x5c7060,_0x42e19d){var _0x40d2e1={'raw':![],'where':{}};var _0x582a30={};var _0x4e3bc6={'count':0x0,'rows':[]};return db[_0xe887('0x48')][_0xe887('0xcb')]({'where':{'id':_0x369eea[_0xe887('0xb4')]['id']}})[_0xe887('0x24')](handleEntityNotFound(_0x5c7060,null))['then'](function(_0x26c2bd){if(_0x26c2bd){_0x582a30['model']=_[_0xe887('0x4b')](db[_0xe887('0xf1')][_0xe887('0x49')]);_0x582a30[_0xe887('0x4c')]=_[_0xe887('0x4b')](_0x369eea['query']);_0x582a30[_0xe887('0x4d')]=_[_0xe887('0x4e')](_0x582a30['model'],_0x582a30[_0xe887('0x4c')]);_0x40d2e1['attributes']=_[_0xe887('0x4e')](_0x582a30['model'],qs[_0xe887('0x50')](_0x369eea[_0xe887('0x4c')]['fields']));_0x40d2e1['attributes']=_0x40d2e1[_0xe887('0x4f')][_0xe887('0x51')]?_0x40d2e1[_0xe887('0x4f')]:_0x582a30[_0xe887('0x4a')];if(!_0x369eea[_0xe887('0x4c')][_0xe887('0x52')](_0xe887('0x53'))){_0x40d2e1[_0xe887('0x33')]=qs[_0xe887('0x33')](_0x369eea[_0xe887('0x4c')][_0xe887('0x33')]);_0x40d2e1[_0xe887('0x32')]=qs[_0xe887('0x32')](_0x369eea[_0xe887('0x4c')][_0xe887('0x32')]);}_0x40d2e1[_0xe887('0x54')]=qs['sort'](_0x369eea['query'][_0xe887('0x55')]);_0x40d2e1[_0xe887('0x56')]=qs['filters'](_[_0xe887('0xf4')](_0x369eea['query'],_0x582a30[_0xe887('0x4d')]));_0x40d2e1[_0xe887('0x56')][_0xe887('0xb0')]=_0x26c2bd['id'];if(_0x369eea[_0xe887('0x4c')][_0xe887('0x80')]){_0x40d2e1[_0xe887('0x56')]=_['merge'](_0x40d2e1[_0xe887('0x56')],{'$or':_['map'](_0x40d2e1[_0xe887('0x4f')],function(_0x3244ed){var _0x2d4120={};_0x2d4120[_0x3244ed]={'$like':'%'+_0x369eea[_0xe887('0x4c')][_0xe887('0x80')]+'%'};return _0x2d4120;})});}if(_0x369eea[_0xe887('0x4c')][_0xe887('0xf5')]){var _0x26e086=_0x369eea[_0xe887('0x4c')][_0xe887('0xf5')]['split'](',');var _0x3b0d18={};_0x3b0d18[_0x26e086[0x0]]={'$gte':moment(_0x26e086[0x1])[_0xe887('0x6d')]('YYYY-MM-DD\x20HH:mm:ss')};_0x40d2e1[_0xe887('0x56')]=_[_0xe887('0xa4')](_0x40d2e1[_0xe887('0x56')],_0x3b0d18);}_0x40d2e1=_[_0xe887('0xa4')]({},_0x40d2e1,_0x369eea[_0xe887('0xb7')]);return db[_0xe887('0xf1')]['count']({'where':_0x40d2e1[_0xe887('0x56')]})[_0xe887('0x24')](function(_0x427994){_0x4e3bc6[_0xe887('0x3f')]=_0x427994;if(_0x369eea[_0xe887('0x4c')][_0xe887('0xb5')]){_0x40d2e1[_0xe887('0xb6')]=[{'all':!![]}];}return db['ChatMessage'][_0xe887('0xf6')](_0x40d2e1);})[_0xe887('0x24')](function(_0x2eb0c2){_0x4e3bc6['rows']=_0x2eb0c2;return _0x4e3bc6;});}})[_0xe887('0x24')](respondWithFilteredResult(_0x5c7060,_0x40d2e1))['catch'](handleError(_0x5c7060,null));};exports[_0xe887('0xf7')]=function(_0x263cd4,_0x2804df,_0xb3ee80){var _0x2da841={'where':{}},_0x4997d3={},_0x143579={'count':0x0,'rows':[]};return db['ChatInteraction']['findOne']({'where':{'id':_0x263cd4['params']['id']}})[_0xe887('0x24')](handleEntityNotFound(_0x2804df,null))[_0xe887('0x24')](function(_0x8c46af){if(_0x8c46af){_0x4997d3[_0xe887('0x4a')]=_[_0xe887('0x4b')](db[_0xe887('0xf1')][_0xe887('0x49')]);_0x4997d3[_0xe887('0x4c')]=_[_0xe887('0x4b')](_0x263cd4[_0xe887('0x4c')]);_0x4997d3[_0xe887('0x4d')]=_[_0xe887('0x4e')](_0x4997d3[_0xe887('0x4a')],_0x4997d3[_0xe887('0x4c')]);_0x2da841['attributes']=_['intersection'](_0x4997d3[_0xe887('0x4a')],qs[_0xe887('0x50')](_0x263cd4['query'][_0xe887('0x50')]));_0x2da841[_0xe887('0x4f')]=_0x2da841[_0xe887('0x4f')][_0xe887('0x51')]?_0x2da841['attributes']:_0x4997d3[_0xe887('0x4a')];if(!_0x263cd4[_0xe887('0x4c')][_0xe887('0x52')](_0xe887('0x53'))){_0x2da841[_0xe887('0x33')]=qs['limit'](_0x263cd4[_0xe887('0x4c')][_0xe887('0x33')]);_0x2da841[_0xe887('0x32')]=qs[_0xe887('0x32')](_0x263cd4[_0xe887('0x4c')][_0xe887('0x32')]);}_0x2da841['order']=qs[_0xe887('0x55')](_0x263cd4['query'][_0xe887('0x55')]);_0x2da841[_0xe887('0x56')]=qs[_0xe887('0x4d')](_[_0xe887('0xf4')](_0x263cd4['query'],_0x4997d3[_0xe887('0x4d')]));_0x2da841[_0xe887('0x56')][_0xe887('0xb0')]=_0x8c46af['id'];if(_0x263cd4[_0xe887('0x4c')][_0xe887('0x80')]){_0x2da841[_0xe887('0x56')]=_[_0xe887('0xa4')](_0x2da841[_0xe887('0x56')],{'$or':_[_0xe887('0x41')](_0x2da841[_0xe887('0x4f')],function(_0x22d6ce){var _0x45818d={};_0x45818d[_0x22d6ce]={'$like':'%'+_0x263cd4[_0xe887('0x4c')][_0xe887('0x80')]+'%'};return _0x45818d;})});}_0x2da841['where'][_0xe887('0xdf')]=![];if(_0x263cd4[_0xe887('0x4c')]['id']){_0x2da841['where']['id']={'$gt':_0x263cd4[_0xe887('0x4c')]['id']};}_0x2da841=_['merge']({},_0x2da841,_0x263cd4[_0xe887('0xb7')]);return db['ChatMessage'][_0xe887('0x3f')]({'where':_0x2da841[_0xe887('0x56')]})[_0xe887('0x24')](function(_0x5cad63){_0x143579['count']=_0x5cad63;_0x2da841[_0xe887('0xb6')]=[];if(_0x263cd4['query'][_0xe887('0xf8')]){_0x2da841[_0xe887('0xb6')]['push']({'model':db[_0xe887('0xd3')],'as':_0xe887('0xd3'),'attributes':['id',_0xe887('0xdd'),_0xe887('0xdc')]});}if(_0x263cd4[_0xe887('0x4c')]['includeAll']){_0x2da841[_0xe887('0xb6')]=[{'all':!![]}];}return db[_0xe887('0xf1')][_0xe887('0xf6')](_0x2da841);})['then'](function(_0x10a191){_0x143579[_0xe887('0xb2')]=_0x10a191;return _0x143579;});}})[_0xe887('0x24')](respondWithFilteredResult(_0x2804df,_0x2da841))['catch'](handleError(_0x2804df,null));};exports[_0xe887('0xf9')]=function(_0x2c2fc0,_0x38d883,_0x27f5b6){return db['ChatInteraction'][_0xe887('0xb8')]({'where':{'id':_0x2c2fc0[_0xe887('0xb4')]['id']}})[_0xe887('0x24')](handleEntityNotFound(_0x38d883,null))['then'](function(_0x57c4d3){if(_0x57c4d3){return _0x57c4d3['setTags'](_0x2c2fc0['body'][_0xe887('0xfa')],_[_0xe887('0xf2')](_0x2c2fc0[_0xe887('0xba')],['ids','id'])||{})[_0xe887('0xfb')](function(){return db['Tag'][_0xe887('0xf6')]({'attributes':['id',_0xe887('0x3b'),_0xe887('0x59')],'where':{'id':_0x2c2fc0[_0xe887('0xba')][_0xe887('0xfa')]}});})[_0xe887('0x24')](function(_0x8e2b7d){socket[_0xe887('0xfc')]('chatInteractionTags:save',{'id':Number(_0x2c2fc0[_0xe887('0xb4')]['id']),'tags':_0x8e2b7d||[]});return{'id':Number(_0x2c2fc0[_0xe887('0xb4')]['id']),'tags':_0x8e2b7d||[]};});}})[_0xe887('0x24')](respondWithResult(_0x38d883,null))['catch'](handleError(_0x38d883,null));};exports[_0xe887('0xfd')]=function(_0x412bb1,_0x52eac6,_0x1e328b){return db['ChatInteraction'][_0xe887('0xb8')]({'where':{'id':_0x412bb1[_0xe887('0xb4')]['id']}})[_0xe887('0x24')](handleEntityNotFound(_0x52eac6,null))[_0xe887('0x24')](function(_0x436290){if(_0x436290){return _0x436290['removeTags'](_0x412bb1[_0xe887('0x4c')][_0xe887('0xfa')]);}})[_0xe887('0x24')](respondWithStatusCode(_0x52eac6,null))[_0xe887('0x2f')](handleError(_0x52eac6,null));};exports[_0xe887('0xce')]=function(_0xb1b1db,_0x217d32){var _0x537309=moment()[_0xe887('0xfe')]()[_0xe887('0x97')]();var _0x15b048=path['join'](config[_0xe887('0xff')],_0xe887('0x100'),_0xe887('0x101'),_0xe887('0x102'));var _0x380c7b=path[_0xe887('0x8d')](config[_0xe887('0xff')],'server',_0xe887('0x101'),'attachments');var _0x4be0bf=path[_0xe887('0x8d')](_0x15b048,_0x537309);var _0x599d59=util[_0xe887('0x6d')](_0xe887('0x103'),_0xb1b1db[_0xe887('0xb4')]['id'],_0x537309);var _0x37eb4d=path[_0xe887('0x8d')](_0x15b048,_0x599d59);var _0x343eb8=![];return db['ChatInteraction']['find']({'where':{'id':_0xb1b1db[_0xe887('0xb4')]['id']},'include':[{'model':db[_0xe887('0xf1')],'as':'Messages','attributes':['id',_0xe887('0xba'),_0xe887('0x85'),_0xe887('0x104'),_0xe887('0xdf')],'include':[{'model':db['User'],'as':'User','attributes':['id',_0xe887('0xdd')],'raw':!![]},{'model':db[_0xe887('0xd5')],'as':'Contact','attributes':['id','firstName',_0xe887('0x105')],'raw':!![]},{'model':db['Attachment'],'as':_0xe887('0xca'),'raw':!![]}]},{'model':db[_0xe887('0xd4')],'as':'Account','attributes':['id',_0xe887('0x3b')]},{'model':db[_0xe887('0xd3')],'as':'Owner','attributes':['id','fullname']}]})['then'](handleEntityNotFound(_0x217d32,null))[_0xe887('0x24')](function(_0xbf093a){if(_0xbf093a){var _0x53fa2a=_0xbf093a['get']({'plain':!![]});_0x343eb8=!![];var _0x483889={'format':'A4','border':_0xe887('0x106'),'header':{'height':_0xe887('0x107'),'contents':{'first':_0xe887('0x108')}},'footer':{'height':_0xe887('0x109'),'contents':{'default':util[_0xe887('0x6d')](_0xe887('0x10a'),util[_0xe887('0x6d')]('%s\x20#%d',_0xe887('0x10b'),_0x53fa2a['id']),moment()[_0xe887('0x6d')]('YYYY-MM-DD')[_0xe887('0x97')]())}}};fs[_0xe887('0x10c')](_0x4be0bf);var _0x51d37e={'channel':_0xe887('0x10b'),'account':_0x53fa2a['Account'][_0xe887('0x3b')],'agent':_0x53fa2a[_0xe887('0x10d')]?_0x53fa2a['Owner'][_0xe887('0xdd')]:_0xe887('0x10e'),'createdAt':moment(_0x53fa2a[_0xe887('0x85')])['format']('YYYY-MM-DD\x20HH:mm:ss')[_0xe887('0x97')](),'closedAt':_0x53fa2a['closed']?moment(_0x53fa2a[_0xe887('0x10f')])['format'](_0xe887('0x110'))[_0xe887('0x97')]():'','disposition':_0x53fa2a[_0xe887('0xc2')],'chatInfo':{'browser':_0x53fa2a['browserName'],'os':_0x53fa2a[_0xe887('0x111')],'referer':_0x53fa2a[_0xe887('0x112')],'customerIp':_0x53fa2a[_0xe887('0x113')]},'messages':_(_0x53fa2a[_0xe887('0xd6')])[_0xe887('0x114')]()['filter']({'secret':![]})[_0xe887('0x41')](function(_0x1cb736){if(_0x1cb736[_0xe887('0xca')]){var _0x11ab69=path[_0xe887('0x8d')](_0x380c7b,_0x1cb736[_0xe887('0xca')]['basename']);if(fs[_0xe887('0x115')](_0x11ab69)){fs[_0xe887('0x116')](_0x11ab69)[_0xe887('0x117')](fs[_0xe887('0x118')](path[_0xe887('0x8d')](_0x4be0bf,_0x1cb736['Attachment'][_0xe887('0xc8')])));}}return{'date':moment(_0x1cb736[_0xe887('0x85')])[_0xe887('0x6d')](_0xe887('0x110'))['toString'](),'sender':_0x1cb736[_0xe887('0x104')]===_0xe887('0x119')?_0x1cb736[_0xe887('0xd3')]?_0x1cb736[_0xe887('0xd3')][_0xe887('0xdd')]:_0xe887('0xda'):_0x1cb736[_0xe887('0x11a')]['firstName']+(_0x1cb736[_0xe887('0x11a')][_0xe887('0x105')]?'\x20'+_0x1cb736[_0xe887('0x11a')]['lastName']:''),'body':_0x1cb736[_0xe887('0xca')]?_0x1cb736[_0xe887('0xca')][_0xe887('0xc8')]:_0x1cb736['body'],'direction':_0x1cb736[_0xe887('0x104')]===_0xe887('0x119')?'A':'C','secret':_0x1cb736[_0xe887('0xdf')],'attachment':_0x1cb736[_0xe887('0xca')]};})[_0xe887('0x69')]()};return ejs[_0xe887('0x11b')](path[_0xe887('0x8d')](config[_0xe887('0xff')],_0xe887('0x100'),_0xe887('0x11c'),_0xe887('0x11d')),{'interaction':_0x51d37e})[_0xe887('0x24')](function(_0x410b47){return new BPromise(function(_0x118abc,_0x19791f){pdf['create'](_0x410b47,_0x483889)[_0xe887('0x11e')](path[_0xe887('0x8d')](_0x4be0bf,_0xe887('0x11f')+_0x53fa2a['id']+'-'+_0x537309+'.pdf'),function(_0x28687a,_0x1a471e){if(_0x28687a)return _0x19791f(_0x28687a);_0x118abc(_0x1a471e);});});});}})[_0xe887('0x24')](function(){if(_0x343eb8){return new BPromise(function(_0x383e60,_0x39f5f2){zipdir(_0x4be0bf,{'saveTo':_0x37eb4d},function(_0x1fe00e,_0x5eca6d){if(_0x1fe00e)return _0x39f5f2(_0x1fe00e);return _0x383e60(_0x5eca6d);});})['then'](function(){return new BPromise(function(_0x4e75b9,_0x1e5911){rimraf(_0x4be0bf,function(_0x2f5bd6){if(_0x2f5bd6)_0x1e5911(_0x2f5bd6);return _0x4e75b9();});});})[_0xe887('0x24')](function(){return _0x217d32['download'](_0x37eb4d,_0x599d59,function(_0x37b443){if(_0x37b443){console[_0xe887('0x120')]('err',_0x37b443);}else{fs[_0xe887('0x121')](_0x37eb4d);}});});}else{return _0x217d32[_0xe887('0x39')](0xc8);}})[_0xe887('0x2f')](handleError(_0x217d32,null));};
\ No newline at end of file
+var _0x7a54=['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','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','catch','sendStatus','status','end','json','count','offset','limit','set','reject','save','update','destroy','stack','name','send','Users','map','TagIds','split','push','index','ChatInteraction','keys','filters','intersection','model','attributes','query','length','hasOwnProperty','nolimit','sort','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','left_join','u.id\x20=\x20ui.UserId','chat_interactions','cm_contacts','users','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','advancedFilter','startOf','day','format','and','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','condition','forEach','TagId','unreadMessages','isArray','value','tableAlias','\x20=\x20?','LIKE','ContactId','\x20LIKE\x20?','c.lastName','c.email','\x20>\x20?','\x20<\x20?','\x20IN\x20?','c.firstName','filter','isNil','ChatWebsiteId','i.ChatWebsiteId\x20IN\x20?','concat','createdAt','parse','$gte','$lte','\x20IS\x20NULL','replace','\x27\x27\x27\x27','isNumeric','i.id\x20LIKE\x20?','toString','join','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','order','DESC','group','Sequelize','SELECT','clone','read','`unreadMessages`\x20=\x200','having','`unreadMessages`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','mail_interaction_has_tags','sequelize','keyBy','merge','COUNT(me.id)','a.key','Account.key','i.*','Contact.firstName','Contact.email','Contact.phone','Contact.mobile','Contact.fax','GROUP_CONCAT(DISTINCT\x20t.id)','chat_interaction_has_tags','groupBy','ChatInteractionId','all','rows','show','params','rawAttributes','fields','include','find','create','body','describe','customUpdate','abandon','entity\x20not\x20found','UserId','ValidationError','Interaction\x20already\x20assigned','disposition','originalname','basename','file','filename','type','mimetype','Attachment','attachmentDownload','findOne','Unauthorized','attachId','download','root','server/files/attachments/','mailTranscript','server/files/chat/upload/','transcript-%s.txt','pathTranscript','ChatMessage','User','ChatWebsite','%s%d','agentAlias','customer','Visitor','website_alias','System','agent_alias','alias','fullname','agent_fullname','[%s]\x20%s:\x20%s\x0a','MM/DD/YYYY\x20HH:mm:ss','secret','appendFileSync','MailAccount','MailServerOut','Smtp','service','host','port','secure','authentication','user','SendMail','sendMail','\x22%s\x22\x20<%s>','email','Mail\x20Transcript','Hi\x20%s,\x20attached\x20you\x20can\x20find\x20your\x20transcript\x20file.\x20\x0a\x0aRegards.\x20\x0a\x0a','addMessage','omit','ids','getMessages','YYYY-MM-DD\x20HH:mm:ss','options','includeAll','findAll','getMyMessages','pick','includeAgent','setTags','spread','Tag','emit','chatInteractionTags:save','removeTags','unix','server','files','tmp','transcript-%d-%s.zip','Messages','direction','CmContact','Contact','firstName','lastName','Account','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>','30px','%s\x20#%d','Chat','YYYY-MM-DD','mkdirSync','N.A.','closed','osName','customerIp','tail','existsSync','pipe','createWriteStream','out','renderFile','views','toFile','log','err','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','redis','defaults','localhost','./chatInteraction.socket'];(function(_0x483102,_0x54e93d){var _0x5cc885=function(_0x54931c){while(--_0x54931c){_0x483102['push'](_0x483102['shift']());}};_0x5cc885(++_0x54e93d);}(_0x7a54,0x106));var _0x47a5=function(_0x472f2e,_0x4f1056){_0x472f2e=_0x472f2e-0x0;var _0x21588b=_0x7a54[_0x472f2e];return _0x21588b;};'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'];config[_0x47a5('0x14')]=_[_0x47a5('0x15')](config[_0x47a5('0x14')],{'host':_0x47a5('0x16'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x47a5('0x14')]));require(_0x47a5('0x17'))[_0x47a5('0x18')](socket);var jayson=require(_0x47a5('0x19'));var client=jayson[_0x47a5('0x1a')][_0x47a5('0x1b')]({'port':0x232b});var client9004=jayson[_0x47a5('0x1a')][_0x47a5('0x1b')]({'port':0x232c});function checkPasswordPattern(_0x4e99a8,_0x362359,_0x11faf5){if(_0x11faf5){var _0x3b001e=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3b001e[_0x47a5('0x1c')](_0x362359)){return _0x4e99a8;}else{throw new Error(_0x47a5('0x1d'));}}else{return _0x4e99a8;}}function respondWithRpcPromise(_0x574af6,_0x549de3,_0x138bc0,_0x4b966e){return new BPromise(function(_0x5247fd,_0x423a81){var _0xaf70a6=_0x4b966e||client;return _0xaf70a6[_0x47a5('0x1e')](_0x574af6,_0x138bc0)[_0x47a5('0x1f')](function(_0x477b1d){logger[_0x47a5('0x20')](_0x47a5('0x21'),_0x549de3,_0x47a5('0x22'));logger[_0x47a5('0x23')]('ChatInteraction,\x20%s,\x20%s,\x20%s',_0x549de3,_0x47a5('0x22'),JSON[_0x47a5('0x24')](_0x477b1d));if(_0x477b1d['error']){if(_0x477b1d[_0x47a5('0x25')][_0x47a5('0x26')]===0x1f4){logger[_0x47a5('0x25')]('ChatInteraction,\x20%s,\x20%s',_0x549de3,_0x477b1d[_0x47a5('0x25')][_0x47a5('0x27')]);return _0x423a81(_0x477b1d[_0x47a5('0x25')][_0x47a5('0x27')]);}logger['error'](_0x47a5('0x21'),_0x549de3,_0x477b1d[_0x47a5('0x25')]['message']);return _0x5247fd(_0x477b1d[_0x47a5('0x25')][_0x47a5('0x27')]);}else{logger[_0x47a5('0x20')](_0x47a5('0x21'),_0x549de3,_0x47a5('0x22'));_0x5247fd(_0x477b1d['result']['message']);}})[_0x47a5('0x28')](function(_0x5686db){logger[_0x47a5('0x25')]('ChatInteraction,\x20%s,\x20%s',_0x549de3,_0x5686db);_0x423a81(_0x5686db);});});}function respondWithStatusCode(_0x23cb77,_0x378208){_0x378208=_0x378208||0xcc;return function(_0x36ad34){if(_0x36ad34){return _0x23cb77[_0x47a5('0x29')](_0x378208);}return _0x23cb77[_0x47a5('0x2a')](_0x378208)[_0x47a5('0x2b')]();};}function respondWithResult(_0x24b162,_0x136b14){_0x136b14=_0x136b14||0xc8;return function(_0x16631f){if(_0x16631f){return _0x24b162[_0x47a5('0x2a')](_0x136b14)[_0x47a5('0x2c')](_0x16631f);}};}function respondWithFilteredResult(_0x11a4fa,_0x3ad507){return function(_0x528582){if(_0x528582){var _0x243210=_0x528582[_0x47a5('0x2d')],_0x51833b=_0x3ad507['offset'],_0x2ef875=_0x3ad507[_0x47a5('0x2e')]+_0x3ad507[_0x47a5('0x2f')],_0x9ac908;if(_0x2ef875>=_0x243210){_0x2ef875=_0x243210;_0x9ac908=0xc8;}else{_0x9ac908=0xce;}_0x11a4fa[_0x47a5('0x2a')](_0x9ac908);return _0x11a4fa[_0x47a5('0x30')]('Content-Range',_0x51833b+'-'+_0x2ef875+'/'+_0x243210)['json'](_0x528582);}return null;};}function patchUpdates(_0x6f9a12){return function(_0xfb5ddb){try{jsonpatch['apply'](_0xfb5ddb,_0x6f9a12,!![]);}catch(_0x4e1006){return BPromise[_0x47a5('0x31')](_0x4e1006);}return _0xfb5ddb[_0x47a5('0x32')]();};}function saveUpdates(_0x57bff6,_0x42f70c){return function(_0x53119b){if(_0x53119b){return _0x53119b[_0x47a5('0x33')](_0x57bff6)[_0x47a5('0x1f')](function(_0x5c5162){return _0x5c5162;});}return null;};}function removeEntity(_0x4843c0,_0x274e34){return function(_0x5910bb){if(_0x5910bb){return _0x5910bb[_0x47a5('0x34')]()[_0x47a5('0x1f')](function(){_0x4843c0[_0x47a5('0x2a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x18f7e9,_0x50c086){return function(_0x53c754){if(!_0x53c754){_0x18f7e9[_0x47a5('0x29')](0x194);}return _0x53c754;};}function handleError(_0x5a8a7c,_0x25cce0){_0x25cce0=_0x25cce0||0x1f4;return function(_0x5ef577){logger[_0x47a5('0x25')](_0x5ef577[_0x47a5('0x35')]);if(_0x5ef577[_0x47a5('0x36')]){delete _0x5ef577[_0x47a5('0x36')];}_0x5a8a7c[_0x47a5('0x2a')](_0x25cce0)[_0x47a5('0x37')](_0x5ef577);};}function getInteractionUsers(_0xee582c,_0x452be5){return new BPromise(function(_0x1a0d23,_0x4caed5){try{if(_0x452be5[_0xee582c['id']]){_0xee582c[_0x47a5('0x38')]=_[_0x47a5('0x39')](_0x452be5[_0xee582c['id']],function(_0x511c06){return{'id':_0x511c06['id']};});}}catch(_0x2c50d6){_0x4caed5(_0x2c50d6);}_0x1a0d23(_0xee582c);});}function getInteractionTags(_0x2bf53d,_0x1d4348){return new BPromise(function(_0x49c4b5,_0x101f70){try{if(_0x2bf53d[_0x47a5('0x3a')]){_0x2bf53d['Tags']=[];_0x2bf53d[_0x47a5('0x3a')][_0x47a5('0x3b')](',')['forEach'](function(_0x55c5eb){_0x2bf53d['Tags'][_0x47a5('0x3c')](_0x1d4348[_0x55c5eb]);});}delete _0x2bf53d['TagIds'];}catch(_0x9b5eaf){_0x101f70(_0x9b5eaf);}_0x49c4b5(_0x2bf53d);});}function updateChatInteraction(_0x1f9631,_0x301a85,_0x111f0d){return new BPromise(function(_0x1b2c80,_0xcb5243){return getInteractionUsers(_0x1f9631,_0x111f0d)[_0x47a5('0x1f')](function(_0x1f3d01){return getInteractionTags(_0x1f3d01,_0x301a85);})[_0x47a5('0x1f')](function(_0x36a24e){_0x1b2c80(_0x36a24e);})[_0x47a5('0x28')](function(_0x1658e8){_0xcb5243(_0x1658e8);});});}exports[_0x47a5('0x3d')]=function(_0x56dbbd,_0x1fbece){var _0x1c36fa={},_0x331474={},_0x23bd8d={'count':0x0,'rows':[]};var _0x586f4f=db[_0x47a5('0x3e')]['rawAttributes'];_0x331474['model']=_['keys'](_0x586f4f);_0x331474['query']=_[_0x47a5('0x3f')](_0x56dbbd['query']);_0x331474[_0x47a5('0x40')]=_[_0x47a5('0x41')](_0x331474[_0x47a5('0x42')],_0x331474['query']);_0x1c36fa[_0x47a5('0x43')]=_[_0x47a5('0x41')](_0x331474['model'],qs['fields'](_0x56dbbd[_0x47a5('0x44')]['fields']));_0x1c36fa[_0x47a5('0x43')]=_0x1c36fa[_0x47a5('0x43')][_0x47a5('0x45')]?_0x1c36fa[_0x47a5('0x43')]:_0x331474[_0x47a5('0x42')];if(!_0x56dbbd[_0x47a5('0x44')][_0x47a5('0x46')](_0x47a5('0x47'))){_0x1c36fa[_0x47a5('0x2f')]=qs[_0x47a5('0x2f')](_0x56dbbd[_0x47a5('0x44')][_0x47a5('0x2f')]);_0x1c36fa[_0x47a5('0x2e')]=qs[_0x47a5('0x2e')](_0x56dbbd[_0x47a5('0x44')][_0x47a5('0x2e')]);}_0x1c36fa['order']=qs[_0x47a5('0x48')](_0x56dbbd[_0x47a5('0x44')]['sort']);_0x1c36fa['where']=qs[_0x47a5('0x40')](_['pick'](_0x56dbbd[_0x47a5('0x44')],_0x331474[_0x47a5('0x40')]));var _0x54c35f=[];var _0x4f62d3=squel[_0x47a5('0x49')]()['field']('id')[_0x47a5('0x4a')](_0x47a5('0x36'))[_0x47a5('0x4a')](_0x47a5('0x4b'))[_0x47a5('0x4c')](_0x47a5('0x4d'));var _0x238ebb=squel['select']()['field'](_0x47a5('0x4e'))[_0x47a5('0x4c')](_0x47a5('0x4f'),'me')[_0x47a5('0x50')](_0x47a5('0x51'))[_0x47a5('0x50')](_0x47a5('0x52'))['where'](_0x47a5('0x53'));var _0x1c9a62=squel[_0x47a5('0x49')]()['field'](_0x47a5('0x54'))['field'](_0x47a5('0x55'))[_0x47a5('0x4c')](_0x47a5('0x56'),'ui')[_0x47a5('0x57')]('users','u',_0x47a5('0x58'));var _0x1e6de3=squel[_0x47a5('0x49')]()[_0x47a5('0x4c')](_0x47a5('0x59'),'i')[_0x47a5('0x57')](_0x47a5('0x5a'),'c','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL')[_0x47a5('0x57')](_0x47a5('0x5b'),'o',_0x47a5('0x5c'))[_0x47a5('0x57')](_0x47a5('0x5d'),'a',_0x47a5('0x5e'))['left_join'](_0x47a5('0x4f'),'me',_0x47a5('0x5f'));var _0x1aa581=squel['expr']();if(_0x56dbbd[_0x47a5('0x44')][_0x47a5('0x60')]){var _0x5018e9=JSON['parse'](_0x56dbbd['query'][_0x47a5('0x60')]);_[_0x47a5('0x3f')](_0x5018e9)['forEach'](function(_0x4cf792){var _0x6d6b2b=_0x5018e9[_0x4cf792];if(_0x4cf792==='createdAt'){var _0x16bb8a=moment(_0x6d6b2b['value']['dateStart'])[_0x47a5('0x61')](_0x47a5('0x62'))['utc']()[_0x47a5('0x63')]();var _0x72fe=moment(_0x72fe)['utc']()['endOf'](_0x47a5('0x62'))[_0x47a5('0x63')]();_0x1aa581[_0x47a5('0x64')](_0x47a5('0x65'),_0x16bb8a,_0x72fe);}else{if(_['isArray'](_0x6d6b2b[_0x47a5('0x66')])){_0x6d6b2b[_0x47a5('0x66')][_0x47a5('0x67')](function(_0x5a33b8){switch(_0x6d6b2b[_0x47a5('0x66')]['value']){case'IS':if(_0x4cf792!==_0x47a5('0x68')&&_0x4cf792!==_0x47a5('0x69')){if(_[_0x47a5('0x6a')](_0x6d6b2b[_0x47a5('0x6b')])&&_0x6d6b2b[_0x47a5('0x6b')]['length']>0x1){_0x1aa581[_0x47a5('0x64')](_0x6d6b2b['tableAlias']+'.'+_0x4cf792+'\x20IN\x20?',_0x6d6b2b['value']);}else{_0x1aa581['and'](_0x6d6b2b[_0x47a5('0x6c')]+'.'+_0x4cf792+_0x47a5('0x6d'),_0x6d6b2b[_0x47a5('0x6b')][0x0]);}}break;case'=':_0x1aa581['and'](_0x6d6b2b['tableAlias']+'.'+_0x4cf792+_0x47a5('0x6d'),_0x6d6b2b[_0x47a5('0x6b')]);break;case _0x47a5('0x6e'):if(_0x4cf792===_0x47a5('0x6f')){_0x1aa581[_0x47a5('0x64')]('c.firstName'+_0x47a5('0x70'),'%'+_0x6d6b2b['value']+'%');_0x1aa581['or'](_0x47a5('0x71')+_0x47a5('0x70'),'%'+_0x6d6b2b['value']+'%');_0x1aa581['or'](_0x47a5('0x72')+_0x47a5('0x70'),'%'+_0x6d6b2b[_0x47a5('0x6b')]+'%');}else{_0x1aa581[_0x47a5('0x64')](_0x6d6b2b[_0x47a5('0x6c')]+'.'+_0x4cf792+_0x47a5('0x70'),'%'+_0x6d6b2b[_0x47a5('0x6b')]+'%');}break;case'>':_0x1aa581[_0x47a5('0x64')](_0x6d6b2b['tableAlias']+'.'+_0x4cf792+_0x47a5('0x73'),_0x6d6b2b[_0x47a5('0x6b')]);break;case'<':_0x1aa581[_0x47a5('0x64')](_0x6d6b2b[_0x47a5('0x6c')]+'.'+_0x4cf792+_0x47a5('0x74'),_0x6d6b2b['value']);break;}});}else{switch(_0x6d6b2b[_0x47a5('0x66')][_0x47a5('0x6b')]){case'IS':if(_0x4cf792!==_0x47a5('0x68')&&_0x4cf792!==_0x47a5('0x69')){if(_[_0x47a5('0x6a')](_0x6d6b2b[_0x47a5('0x6b')])&&_0x6d6b2b[_0x47a5('0x6b')][_0x47a5('0x45')]>0x1){_0x1aa581[_0x47a5('0x64')](_0x6d6b2b[_0x47a5('0x6c')]+'.'+_0x4cf792+_0x47a5('0x75'),_0x6d6b2b[_0x47a5('0x6b')]);}else{_0x1aa581[_0x47a5('0x64')](_0x6d6b2b[_0x47a5('0x6c')]+'.'+_0x4cf792+_0x47a5('0x6d'),_0x6d6b2b['value'][0x0]);}}break;case'=':_0x1aa581[_0x47a5('0x64')](_0x6d6b2b[_0x47a5('0x6c')]+'.'+_0x4cf792+_0x47a5('0x6d'),_0x6d6b2b['value']);break;case _0x47a5('0x6e'):if(_0x4cf792===_0x47a5('0x6f')){_0x1aa581[_0x47a5('0x64')](_0x47a5('0x76')+'\x20LIKE\x20?','%'+_0x6d6b2b[_0x47a5('0x6b')]+'%');_0x1aa581['or']('c.lastName'+_0x47a5('0x70'),'%'+_0x6d6b2b['value']+'%');_0x1aa581['or'](_0x47a5('0x72')+'\x20LIKE\x20?','%'+_0x6d6b2b[_0x47a5('0x6b')]+'%');}else{_0x1aa581[_0x47a5('0x64')](_0x6d6b2b[_0x47a5('0x6c')]+'.'+_0x4cf792+'\x20LIKE\x20?','%'+_0x6d6b2b['value']+'%');}break;case'>':_0x1aa581['and'](_0x6d6b2b[_0x47a5('0x6c')]+'.'+_0x4cf792+_0x47a5('0x73'),_0x6d6b2b[_0x47a5('0x6b')]);break;case'<':_0x1aa581[_0x47a5('0x64')](_0x6d6b2b['tableAlias']+'.'+_0x4cf792+_0x47a5('0x74'),_0x6d6b2b[_0x47a5('0x6b')]);break;}}}});}else{var _0x390bc0=_(Object[_0x47a5('0x3f')](_0x56dbbd[_0x47a5('0x44')]))[_0x47a5('0x39')](function(_0x1155f6){return _0x586f4f[_0x47a5('0x46')](_0x1155f6)?_0x1155f6:undefined;})[_0x47a5('0x77')](function(_0xc69a68){return!_[_0x47a5('0x78')](_0xc69a68);})[_0x47a5('0x6b')]();if(!_['isEmpty'](_0x390bc0)){_0x390bc0[_0x47a5('0x67')](function(_0x4833be){if(_0x4833be===_0x47a5('0x79')){_0x1e6de3[_0x47a5('0x50')](_0x47a5('0x7a'),[][_0x47a5('0x7b')](_0x56dbbd[_0x47a5('0x44')][_0x4833be]));}else if(_0x4833be===_0x47a5('0x7c')){var _0x12025a=JSON[_0x47a5('0x7d')](_0x56dbbd[_0x47a5('0x44')][_0x4833be])[_0x47a5('0x7e')];var _0x1cfb37=JSON[_0x47a5('0x7d')](_0x56dbbd[_0x47a5('0x44')][_0x4833be])[_0x47a5('0x7f')];_0x1e6de3[_0x47a5('0x50')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x12025a,_0x1cfb37);}else{if(_0x56dbbd['query'][_0x4833be]==='null'){_0x1e6de3['where']('i.'+_0x4833be+_0x47a5('0x80'));}else{_0x1e6de3[_0x47a5('0x50')]('i.'+_0x4833be+'\x20=\x20?',_0x56dbbd[_0x47a5('0x44')][_0x4833be]);}}});}if(_0x56dbbd[_0x47a5('0x44')][_0x47a5('0x77')]){var _0x396102=_0x56dbbd[_0x47a5('0x44')][_0x47a5('0x77')][_0x47a5('0x81')]('\x5c','\x5c\x5c')[_0x47a5('0x81')]('\x27\x27',_0x47a5('0x82'));if(qs[_0x47a5('0x83')](_0x396102)){_0x1aa581['or'](_0x47a5('0x84'),_0x396102+'%');}else{var _0x5e5f16=[];_0x396102[_0x47a5('0x3b')]('\x20')[_0x47a5('0x67')](function(_0x420671){_0x5e5f16['push']('+'+_0x420671[_0x47a5('0x85')]());});var _0x32f393=_0x5e5f16[_0x47a5('0x86')]('\x20');_0x1aa581['or']('MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)',_0x32f393)['or'](_0x47a5('0x87'),_0x396102+'%');}}}_0x1e6de3['where'](_0x1aa581);if(_0x1c36fa['order']){_0x1c36fa[_0x47a5('0x88')][_0x47a5('0x67')](function(_0x277486){_0x1e6de3[_0x47a5('0x88')]('i.'+_0x277486[0x0],_0x277486[0x1]===_0x47a5('0x89')?![]:!![]);});}_0x1e6de3[_0x47a5('0x8a')]('i.id');var _0x592322={'type':db[_0x47a5('0x8b')]['QueryTypes'][_0x47a5('0x8c')],'raw':!![]};var _0x3fffd1=_0x1e6de3[_0x47a5('0x8d')]()[_0x47a5('0x4a')]('COUNT(*)')[_0x47a5('0x4a')]('COUNT(me.id)','unreadMessages');if(!_0x56dbbd[_0x47a5('0x44')][_0x47a5('0x60')]){if(_0x56dbbd['query'][_0x47a5('0x8e')]){if(_0x56dbbd[_0x47a5('0x44')][_0x47a5('0x8e')]==0x1){_0x3fffd1['having'](_0x47a5('0x8f'));_0x1e6de3['having'](_0x47a5('0x8f'));}else{_0x3fffd1[_0x47a5('0x90')](_0x47a5('0x91'));_0x1e6de3['having'](_0x47a5('0x91'));}}if(_0x56dbbd[_0x47a5('0x44')][_0x47a5('0x92')]){var _0x4b3fef=_[_0x47a5('0x6a')](_0x56dbbd['query'][_0x47a5('0x92')])?_0x56dbbd['query'][_0x47a5('0x92')]:new Array(_0x56dbbd[_0x47a5('0x44')][_0x47a5('0x92')]);var _0x211fbf=squel['expr']();_0x4b3fef[_0x47a5('0x67')](function(_0x2ae130){_0x211fbf['or'](_0x47a5('0x93'),'%,'+_0x2ae130+',%');});_0x1e6de3[_0x47a5('0x90')](_0x211fbf);_0x3fffd1[_0x47a5('0x57')]('chat_interaction_has_tags','it','it.ChatInteractionId\x20=\x20i.id');_0x3fffd1[_0x47a5('0x57')]('tools_tags','t',_0x47a5('0x94'));_0x3fffd1[_0x47a5('0x50')](_0x47a5('0x95'),_0x4b3fef);}}else{var _0x5018e9=JSON[_0x47a5('0x7d')](_0x56dbbd[_0x47a5('0x44')]['advancedFilter']);_[_0x47a5('0x3f')](_0x5018e9)[_0x47a5('0x67')](function(_0x19acfa){var _0x113beb=_0x5018e9[_0x19acfa];if(_0x19acfa==='TagId'){var _0x4b5353=_0x113beb[_0x47a5('0x6b')];var _0x263046=squel['expr']();_0x4b5353[_0x47a5('0x67')](function(_0x23f055){_0x263046['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x23f055+',%');});_0x1e6de3[_0x47a5('0x90')](_0x263046);_0x3fffd1[_0x47a5('0x57')](_0x47a5('0x96'),'it','it.MailInteractionId\x20=\x20i.id');_0x3fffd1[_0x47a5('0x57')]('tools_tags','t',_0x47a5('0x94'));_0x3fffd1['where'](_0x47a5('0x95'),_0x4b5353);}else if(_0x19acfa===_0x47a5('0x69')){if(_0x113beb['value'][_0x47a5('0x45')]===0x1){if(_0x113beb['value'][0x0]===0x1){_0x3fffd1[_0x47a5('0x90')](_0x47a5('0x8f'));_0x1e6de3[_0x47a5('0x90')](_0x47a5('0x8f'));}else{_0x3fffd1['having'](_0x47a5('0x91'));_0x1e6de3['having']('`unreadMessages`\x20>\x200');}}}});}db[_0x47a5('0x97')][_0x47a5('0x44')](_0x3fffd1[_0x47a5('0x85')](),_0x592322)[_0x47a5('0x1f')](function(_0x380c8b){_0x23bd8d['count']=_0x380c8b[_0x47a5('0x45')];if(_0x23bd8d[_0x47a5('0x2d')]===0x0)return[];return db[_0x47a5('0x97')][_0x47a5('0x44')](_0x4f62d3['toString'](),_0x592322)[_0x47a5('0x1f')](function(_0x4af162){_0x54c35f=_[_0x47a5('0x98')](_0x4af162,'id');_0x592322=_[_0x47a5('0x99')](_0x592322,{'model':db[_0x47a5('0x3e')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x1e6de3[_0x47a5('0x4a')](_0x47a5('0x9a'),_0x47a5('0x69'));_0x1e6de3[_0x47a5('0x4a')](_0x47a5('0x9b'),_0x47a5('0x9c'));_0x1e6de3['field'](_0x47a5('0x9d'));_0x1e6de3[_0x47a5('0x4a')]('c.firstName',_0x47a5('0x9e'));_0x1e6de3[_0x47a5('0x4a')](_0x47a5('0x71'),'Contact.lastName');_0x1e6de3['field'](_0x47a5('0x72'),_0x47a5('0x9f'));_0x1e6de3['field']('c.phone',_0x47a5('0xa0'));_0x1e6de3[_0x47a5('0x4a')]('c.mobile',_0x47a5('0xa1'));_0x1e6de3[_0x47a5('0x4a')]('c.fax',_0x47a5('0xa2'));_0x1e6de3[_0x47a5('0x4a')](_0x47a5('0xa3'),_0x47a5('0x3a'));_0x1e6de3[_0x47a5('0x57')](_0x47a5('0xa4'),'it','it.ChatInteractionId\x20=\x20i.id');_0x1e6de3['left_join']('tools_tags','t',_0x47a5('0x94'));_0x1e6de3[_0x47a5('0x2f')](_0x1c36fa['limit']);_0x1e6de3[_0x47a5('0x2e')](_0x1c36fa[_0x47a5('0x2e')]);return db[_0x47a5('0x97')][_0x47a5('0x44')](_0x1e6de3[_0x47a5('0x85')](),_0x592322);})['then'](function(_0x3e7750){_0x1c9a62['where']('ui.ChatInteractionId\x20IN\x20?',_['map'](_0x3e7750,'id'));return db[_0x47a5('0x97')]['query'](_0x1c9a62[_0x47a5('0x85')](),_0x592322)[_0x47a5('0x1f')](function(_0x5a316e){var _0x49f791=_[_0x47a5('0xa5')](_0x5a316e,_0x47a5('0xa6'));var _0x35bf37=[];_0x3e7750[_0x47a5('0x67')](function(_0x392ad7){_0x35bf37['push'](updateChatInteraction(_0x392ad7,_0x54c35f,_0x49f791));});return BPromise[_0x47a5('0xa7')](_0x35bf37);});});})[_0x47a5('0x1f')](function(_0x519f0a){_0x23bd8d[_0x47a5('0xa8')]=_0x519f0a;return _0x23bd8d;})[_0x47a5('0x1f')](respondWithFilteredResult(_0x1fbece,_0x1c36fa))[_0x47a5('0x28')](handleError(_0x1fbece,null));};exports[_0x47a5('0xa9')]=function(_0x3c117a,_0x186aad){var _0x5112d7={'raw':![],'where':{'id':_0x3c117a[_0x47a5('0xaa')]['id']}},_0x6a8174={};_0x6a8174['model']=_[_0x47a5('0x3f')](db[_0x47a5('0x3e')][_0x47a5('0xab')]);_0x6a8174[_0x47a5('0x44')]=_['keys'](_0x3c117a['query']);_0x6a8174['filters']=_['intersection'](_0x6a8174[_0x47a5('0x42')],_0x6a8174[_0x47a5('0x44')]);_0x5112d7[_0x47a5('0x43')]=_[_0x47a5('0x41')](_0x6a8174[_0x47a5('0x42')],qs[_0x47a5('0xac')](_0x3c117a[_0x47a5('0x44')][_0x47a5('0xac')]));_0x5112d7['attributes']=_0x5112d7[_0x47a5('0x43')][_0x47a5('0x45')]?_0x5112d7[_0x47a5('0x43')]:_0x6a8174[_0x47a5('0x42')];if(_0x3c117a['query']['includeAll']){_0x5112d7[_0x47a5('0xad')]=[{'all':!![]}];}_0x5112d7=_['merge']({},_0x5112d7,_0x3c117a['options']);return db[_0x47a5('0x3e')][_0x47a5('0xae')](_0x5112d7)['then'](handleEntityNotFound(_0x186aad,null))[_0x47a5('0x1f')](respondWithResult(_0x186aad,null))[_0x47a5('0x28')](handleError(_0x186aad,null));};exports[_0x47a5('0xaf')]=function(_0x48835f,_0x740bdf){return db[_0x47a5('0x3e')]['create'](_0x48835f[_0x47a5('0xb0')],{})[_0x47a5('0x1f')](respondWithResult(_0x740bdf,0xc9))[_0x47a5('0x28')](handleError(_0x740bdf,null));};exports[_0x47a5('0x33')]=function(_0x12a56a,_0x475114){if(_0x12a56a['body']['id']){delete _0x12a56a[_0x47a5('0xb0')]['id'];}return db['ChatInteraction'][_0x47a5('0xae')]({'where':{'id':_0x12a56a[_0x47a5('0xaa')]['id']}})[_0x47a5('0x1f')](handleEntityNotFound(_0x475114,null))[_0x47a5('0x1f')](saveUpdates(_0x12a56a['body'],null))[_0x47a5('0x1f')](respondWithResult(_0x475114,null))[_0x47a5('0x28')](handleError(_0x475114,null));};exports[_0x47a5('0x34')]=function(_0x27baad,_0x34b7c9){return db[_0x47a5('0x3e')][_0x47a5('0xae')]({'where':{'id':_0x27baad[_0x47a5('0xaa')]['id']}})[_0x47a5('0x1f')](handleEntityNotFound(_0x34b7c9,null))[_0x47a5('0x1f')](removeEntity(_0x34b7c9,null))[_0x47a5('0x28')](handleError(_0x34b7c9,null));};exports[_0x47a5('0xb1')]=function(_0x52a2be,_0x4218fd){return db[_0x47a5('0x3e')]['describe']()[_0x47a5('0x1f')](respondWithResult(_0x4218fd,null))[_0x47a5('0x28')](handleError(_0x4218fd,null));};exports[_0x47a5('0xb2')]=function(_0x2ccf21,_0x2ff467){if(_0x2ccf21['body']['id']){delete _0x2ccf21[_0x47a5('0xb0')]['id'];}return db[_0x47a5('0x3e')][_0x47a5('0xae')]({'where':{'id':_0x2ccf21[_0x47a5('0xaa')]['id']}})[_0x47a5('0x1f')](handleEntityNotFound(_0x2ff467,null))[_0x47a5('0x1f')](saveUpdates(_0x2ccf21[_0x47a5('0xb0')],null))['then'](respondWithResult(_0x2ff467,null))['catch'](handleError(_0x2ff467,null));};exports[_0x47a5('0xb3')]=function(_0x580ce8,_0xf105b8,_0x5544a2){if(_0x580ce8[_0x47a5('0xb0')]['id']){delete _0x580ce8[_0x47a5('0xb0')]['id'];}return db[_0x47a5('0x3e')][_0x47a5('0xae')]({'where':{'id':_0x580ce8['params']['id']}})[_0x47a5('0x1f')](function(_0x11f07b){if(!_0x11f07b){logger[_0x47a5('0x25')]('abandonInteraction,\x20%s,\x20%s,\x20%s','abandon',0x194,_0x47a5('0xb4'));_0xf105b8[_0x47a5('0x29')](0x194);}else{if(_0x11f07b[_0x47a5('0xb5')]){throw new db[(_0x47a5('0x8b'))][(_0x47a5('0xb6'))](_0x47a5('0xb7'));}}return _0x11f07b;})[_0x47a5('0x1f')](function(_0xe662d7){if(_0xe662d7){return _0xe662d7['update']({'closed':_0x580ce8[_0x47a5('0xb0')]['closed'],'disposition':_0x580ce8[_0x47a5('0xb0')][_0x47a5('0xb8')]})['then'](function(_0x48d4cf){return _0x48d4cf;});}})[_0x47a5('0x1f')](function(_0x41d2da){return respondWithRpcPromise('AbandonInteraction',_0x47a5('0xb3'),_0x580ce8[_0x47a5('0xb0')],client9004);})[_0x47a5('0x1f')](respondWithResult(_0xf105b8,null))[_0x47a5('0x28')](handleError(_0xf105b8,null));};exports['attachmentUpload']=function(_0x142012,_0x490947,_0x56d81e){_0x142012['body'][_0x47a5('0x36')]=_0x142012['file'][_0x47a5('0xb9')];_0x142012[_0x47a5('0xb0')][_0x47a5('0xba')]=_0x142012[_0x47a5('0xbb')][_0x47a5('0xbc')];_0x142012[_0x47a5('0xb0')][_0x47a5('0xbd')]=_0x142012[_0x47a5('0xbb')][_0x47a5('0xbe')];return db[_0x47a5('0xbf')][_0x47a5('0xaf')](_0x142012[_0x47a5('0xb0')])[_0x47a5('0x1f')](respondWithResult(_0x490947,0xc9))[_0x47a5('0x28')](handleError(_0x490947,null));};exports[_0x47a5('0xc0')]=function(_0x5e17cb,_0xdd95c8,_0x40aee5){return db[_0x47a5('0x3e')][_0x47a5('0xc1')]({'where':{'id':_0x5e17cb['params']['id']},'raw':!![]})[_0x47a5('0x1f')](handleEntityNotFound(_0xdd95c8,null))['then'](function(_0x4476b5){if(_0x4476b5){if(_0x4476b5['closed']){return _0xdd95c8[_0x47a5('0x2a')](0x193)[_0x47a5('0x2c')]({'status':0x193,'message':_0x47a5('0xc2')});}return db['Attachment'][_0x47a5('0xc1')]({'where':{'id':_0x5e17cb[_0x47a5('0x44')][_0x47a5('0xc3')]},'raw':!![]})['then'](handleEntityNotFound(_0xdd95c8,null));}})['then'](function(_0x20f320){if(_0x20f320){return _0xdd95c8[_0x47a5('0xc4')](path[_0x47a5('0x86')](config[_0x47a5('0xc5')],_0x47a5('0xc6'),_0x20f320['basename']));}})[_0x47a5('0x28')](handleError(_0xdd95c8,null));};exports['close']=function(_0xbcd492,_0xdeaf4e){var _0x46647f=null;var _0x2d6ae7=null;var _0x5b18a2=null;var _0x4dc67c=null;if(_0xbcd492[_0x47a5('0xb0')]['id']){delete _0xbcd492[_0x47a5('0xb0')]['id'];}if(_0xbcd492[_0x47a5('0xb0')][_0x47a5('0xc7')]){_0x4dc67c=path[_0x47a5('0x86')](config[_0x47a5('0xc5')],_0x47a5('0xc8'),util[_0x47a5('0x63')](_0x47a5('0xc9'),Date['now']()));_0xbcd492['body'][_0x47a5('0xca')]=_0x4dc67c;}return db['ChatInteraction'][_0x47a5('0xae')]({'where':{'id':_0xbcd492[_0x47a5('0xaa')]['id']},'include':[{'model':db[_0x47a5('0xcb')],'as':'Messages','include':[{'model':db[_0x47a5('0xcc')],'as':_0x47a5('0xcc')}]}]})['then'](handleEntityNotFound(_0xdeaf4e,null))[_0x47a5('0x1f')](saveUpdates(_0xbcd492['body'],null))[_0x47a5('0x1f')](function(_0x3900d8){if(_0x3900d8){_0x46647f=_0x3900d8;return db[_0x47a5('0xcd')]['find']({'where':{'id':_0x46647f['ChatWebsiteId']}});}})['then'](function(_0x4de478){if(_0x4de478){_0x5b18a2=_0x4de478;return db['CmContact'][_0x47a5('0xae')]({'where':{'id':_0x46647f['ContactId']}});}})[_0x47a5('0x1f')](function(_0x2287b0){if(_0x2287b0){_0x2d6ae7=_0x2287b0;if(_0x4dc67c){var _0x530e98=null;for(var _0x49da2a=0x1;_0x49da2a<_0x46647f['Messages'][_0x47a5('0x45')];++_0x49da2a){_0x530e98=_0x46647f['Messages'][_0x49da2a];var _0x4ec4a8=_0x530e98['UserId']?util[_0x47a5('0x63')](_0x47a5('0xce'),_0x5b18a2[_0x47a5('0xcf')],_0x530e98[_0x47a5('0xb5')]):'System';var _0xdda046=_0xbcd492['body'][_0x47a5('0xd0')]||util['format'](_0x47a5('0xce'),_0x47a5('0xd1'),_0x530e98[_0x47a5('0x6f')]);switch(_0x5b18a2['agentIdentifier']){case _0x47a5('0xd2'):_0x4ec4a8=_0x530e98[_0x47a5('0xb5')]?util[_0x47a5('0x63')](_0x47a5('0xce'),_0x5b18a2['agentAlias'],_0x530e98[_0x47a5('0xb5')]):_0x47a5('0xd3');break;case _0x47a5('0xd4'):_0x4ec4a8=_0x530e98[_0x47a5('0xb5')]?_0x530e98[_0x47a5('0xcc')][_0x47a5('0xd5')]||_0x530e98['User'][_0x47a5('0xd6')]:_0x47a5('0xd3');break;case _0x47a5('0xd7'):_0x4ec4a8=_0x530e98[_0x47a5('0xb5')]?_0x530e98[_0x47a5('0xcc')][_0x47a5('0xd6')]:_0x47a5('0xd3');break;default:_0x4ec4a8=_0x530e98[_0x47a5('0xb5')]?util[_0x47a5('0x63')](_0x47a5('0xce'),_0x5b18a2[_0x47a5('0xcf')],_0x530e98[_0x47a5('0xb5')]):_0x47a5('0xd3');}var _0x106b70=util[_0x47a5('0x63')](_0x47a5('0xd8'),moment(_0x530e98[_0x47a5('0x7c')])['format'](_0x47a5('0xd9')),_0x530e98['direction']==='in'?_0xdda046:_0x4ec4a8,_0x530e98['body']);if(!_0x530e98[_0x47a5('0xda')]){fs[_0x47a5('0xdb')](_0x4dc67c,_0x106b70);}}return db[_0x47a5('0xdc')]['findOne']({'where':{'service':!![]},'include':[{'model':db[_0x47a5('0xdd')],'as':_0x47a5('0xde'),'raw':!![]}]});}}})[_0x47a5('0x1f')](function(_0x3e8fce){if(_0x3e8fce&&_0x3e8fce[_0x47a5('0xde')]&&_0xbcd492[_0x47a5('0xb0')]){var _0x1b1f86={'tls':{'rejectUnauthorized':![]}};if(_0x3e8fce[_0x47a5('0xde')][_0x47a5('0xdf')]){_0x1b1f86[_0x47a5('0xdf')]=_0x3e8fce[_0x47a5('0xde')][_0x47a5('0xdf')];}else{_0x1b1f86[_0x47a5('0xe0')]=_0x3e8fce['Smtp']['host'];_0x1b1f86[_0x47a5('0xe1')]=_0x3e8fce['Smtp'][_0x47a5('0xe1')];_0x1b1f86[_0x47a5('0xe2')]=_0x3e8fce[_0x47a5('0xde')][_0x47a5('0xe2')];}if(_0x3e8fce[_0x47a5('0xde')][_0x47a5('0xe3')]){_0x1b1f86['auth']={'user':_0x3e8fce[_0x47a5('0xde')][_0x47a5('0xe4')],'pass':_0x3e8fce[_0x47a5('0xde')]['pass']};}return respondWithRpcPromise(_0x47a5('0xe5'),_0x47a5('0xe6'),{'account':_0x1b1f86,'message':{'from':util[_0x47a5('0x63')](_0x47a5('0xe7'),_0x3e8fce[_0x47a5('0x36')],_0x3e8fce[_0x47a5('0xe8')]||_0x3e8fce[_0x47a5('0xde')][_0x47a5('0xe4')]),'to':_0xbcd492[_0x47a5('0xb0')][_0x47a5('0xc7')],'subject':_0x47a5('0xe9'),'text':util[_0x47a5('0x63')](_0x47a5('0xea'),_0xbcd492[_0x47a5('0xb0')][_0x47a5('0xc7')]),'attachments':[{'path':_0x4dc67c}]}})[_0x47a5('0x1f')](function(){return _0x46647f;})[_0x47a5('0x28')](function(_0x150cff){console[_0x47a5('0x25')](_0x150cff);});}else{return _0x46647f;}})[_0x47a5('0x1f')](respondWithStatusCode(_0xdeaf4e,0xc8))[_0x47a5('0x28')](handleError(_0xdeaf4e,null));};exports[_0x47a5('0xeb')]=function(_0x49692d,_0x185104,_0x55972a){return db[_0x47a5('0xcb')][_0x47a5('0xae')]({'where':{'id':_0x49692d[_0x47a5('0xaa')]['id']}})[_0x47a5('0x1f')](handleEntityNotFound(_0x185104,null))[_0x47a5('0x1f')](function(_0x9c376a){if(_0x9c376a){return _0x9c376a[_0x47a5('0xeb')](_0x49692d[_0x47a5('0xb0')]['ids'],_[_0x47a5('0xec')](_0x49692d[_0x47a5('0xb0')],[_0x47a5('0xed'),'id'])||{});}})['then'](respondWithResult(_0x185104,null))[_0x47a5('0x28')](handleError(_0x185104,null));};exports[_0x47a5('0xee')]=function(_0x3d4e23,_0x2687f9,_0x5c6e18){var _0x3c8204={'raw':![],'where':{}};var _0x4469d1={};var _0x1ea792={'count':0x0,'rows':[]};return db[_0x47a5('0x3e')]['findOne']({'where':{'id':_0x3d4e23[_0x47a5('0xaa')]['id']}})['then'](handleEntityNotFound(_0x2687f9,null))['then'](function(_0x37f07c){if(_0x37f07c){_0x4469d1[_0x47a5('0x42')]=_[_0x47a5('0x3f')](db[_0x47a5('0xcb')]['rawAttributes']);_0x4469d1[_0x47a5('0x44')]=_[_0x47a5('0x3f')](_0x3d4e23[_0x47a5('0x44')]);_0x4469d1[_0x47a5('0x40')]=_[_0x47a5('0x41')](_0x4469d1[_0x47a5('0x42')],_0x4469d1['query']);_0x3c8204[_0x47a5('0x43')]=_[_0x47a5('0x41')](_0x4469d1[_0x47a5('0x42')],qs[_0x47a5('0xac')](_0x3d4e23[_0x47a5('0x44')]['fields']));_0x3c8204[_0x47a5('0x43')]=_0x3c8204['attributes'][_0x47a5('0x45')]?_0x3c8204['attributes']:_0x4469d1[_0x47a5('0x42')];if(!_0x3d4e23['query']['hasOwnProperty'](_0x47a5('0x47'))){_0x3c8204[_0x47a5('0x2f')]=qs['limit'](_0x3d4e23[_0x47a5('0x44')][_0x47a5('0x2f')]);_0x3c8204['offset']=qs[_0x47a5('0x2e')](_0x3d4e23[_0x47a5('0x44')][_0x47a5('0x2e')]);}_0x3c8204['order']=qs[_0x47a5('0x48')](_0x3d4e23[_0x47a5('0x44')][_0x47a5('0x48')]);_0x3c8204[_0x47a5('0x50')]=qs[_0x47a5('0x40')](_['pick'](_0x3d4e23['query'],_0x4469d1[_0x47a5('0x40')]));_0x3c8204['where'][_0x47a5('0xa6')]=_0x37f07c['id'];if(_0x3d4e23[_0x47a5('0x44')]['filter']){_0x3c8204['where']=_[_0x47a5('0x99')](_0x3c8204['where'],{'$or':_[_0x47a5('0x39')](_0x3c8204[_0x47a5('0x43')],function(_0x2b34c6){var _0x87f207={};_0x87f207[_0x2b34c6]={'$like':'%'+_0x3d4e23[_0x47a5('0x44')][_0x47a5('0x77')]+'%'};return _0x87f207;})});}if(_0x3d4e23[_0x47a5('0x44')]['$gte']){var _0x467db6=_0x3d4e23['query'][_0x47a5('0x7e')][_0x47a5('0x3b')](',');var _0x1840c5={};_0x1840c5[_0x467db6[0x0]]={'$gte':moment(_0x467db6[0x1])[_0x47a5('0x63')](_0x47a5('0xef'))};_0x3c8204[_0x47a5('0x50')]=_[_0x47a5('0x99')](_0x3c8204[_0x47a5('0x50')],_0x1840c5);}_0x3c8204=_[_0x47a5('0x99')]({},_0x3c8204,_0x3d4e23[_0x47a5('0xf0')]);return db[_0x47a5('0xcb')][_0x47a5('0x2d')]({'where':_0x3c8204['where']})[_0x47a5('0x1f')](function(_0x2a34d8){_0x1ea792[_0x47a5('0x2d')]=_0x2a34d8;if(_0x3d4e23['query'][_0x47a5('0xf1')]){_0x3c8204[_0x47a5('0xad')]=[{'all':!![]}];}return db[_0x47a5('0xcb')][_0x47a5('0xf2')](_0x3c8204);})[_0x47a5('0x1f')](function(_0x3a8e77){_0x1ea792['rows']=_0x3a8e77;return _0x1ea792;});}})[_0x47a5('0x1f')](respondWithFilteredResult(_0x2687f9,_0x3c8204))[_0x47a5('0x28')](handleError(_0x2687f9,null));};exports[_0x47a5('0xf3')]=function(_0x3f7286,_0x30dcbf,_0x3c80d7){var _0x42a384={'where':{}},_0x188bdf={},_0x355c4b={'count':0x0,'rows':[]};return db[_0x47a5('0x3e')]['findOne']({'where':{'id':_0x3f7286['params']['id']}})[_0x47a5('0x1f')](handleEntityNotFound(_0x30dcbf,null))[_0x47a5('0x1f')](function(_0x3f1d5a){if(_0x3f1d5a){_0x188bdf['model']=_[_0x47a5('0x3f')](db['ChatMessage']['rawAttributes']);_0x188bdf[_0x47a5('0x44')]=_[_0x47a5('0x3f')](_0x3f7286[_0x47a5('0x44')]);_0x188bdf[_0x47a5('0x40')]=_['intersection'](_0x188bdf[_0x47a5('0x42')],_0x188bdf[_0x47a5('0x44')]);_0x42a384['attributes']=_['intersection'](_0x188bdf['model'],qs[_0x47a5('0xac')](_0x3f7286[_0x47a5('0x44')][_0x47a5('0xac')]));_0x42a384[_0x47a5('0x43')]=_0x42a384[_0x47a5('0x43')]['length']?_0x42a384['attributes']:_0x188bdf[_0x47a5('0x42')];if(!_0x3f7286[_0x47a5('0x44')][_0x47a5('0x46')](_0x47a5('0x47'))){_0x42a384['limit']=qs[_0x47a5('0x2f')](_0x3f7286[_0x47a5('0x44')][_0x47a5('0x2f')]);_0x42a384[_0x47a5('0x2e')]=qs['offset'](_0x3f7286['query']['offset']);}_0x42a384[_0x47a5('0x88')]=qs[_0x47a5('0x48')](_0x3f7286[_0x47a5('0x44')][_0x47a5('0x48')]);_0x42a384[_0x47a5('0x50')]=qs[_0x47a5('0x40')](_[_0x47a5('0xf4')](_0x3f7286[_0x47a5('0x44')],_0x188bdf[_0x47a5('0x40')]));_0x42a384['where'][_0x47a5('0xa6')]=_0x3f1d5a['id'];if(_0x3f7286[_0x47a5('0x44')]['filter']){_0x42a384[_0x47a5('0x50')]=_[_0x47a5('0x99')](_0x42a384[_0x47a5('0x50')],{'$or':_[_0x47a5('0x39')](_0x42a384['attributes'],function(_0xbf131c){var _0xd3a9ae={};_0xd3a9ae[_0xbf131c]={'$like':'%'+_0x3f7286[_0x47a5('0x44')]['filter']+'%'};return _0xd3a9ae;})});}_0x42a384['where'][_0x47a5('0xda')]=![];if(_0x3f7286['query']['id']){_0x42a384[_0x47a5('0x50')]['id']={'$gt':_0x3f7286['query']['id']};}_0x42a384=_[_0x47a5('0x99')]({},_0x42a384,_0x3f7286[_0x47a5('0xf0')]);return db[_0x47a5('0xcb')][_0x47a5('0x2d')]({'where':_0x42a384[_0x47a5('0x50')]})['then'](function(_0x4c7102){_0x355c4b[_0x47a5('0x2d')]=_0x4c7102;_0x42a384[_0x47a5('0xad')]=[];if(_0x3f7286[_0x47a5('0x44')][_0x47a5('0xf5')]){_0x42a384['include']['push']({'model':db[_0x47a5('0xcc')],'as':'User','attributes':['id',_0x47a5('0xd6'),'alias']});}if(_0x3f7286[_0x47a5('0x44')]['includeAll']){_0x42a384[_0x47a5('0xad')]=[{'all':!![]}];}return db[_0x47a5('0xcb')][_0x47a5('0xf2')](_0x42a384);})[_0x47a5('0x1f')](function(_0x45c38b){_0x355c4b[_0x47a5('0xa8')]=_0x45c38b;return _0x355c4b;});}})[_0x47a5('0x1f')](respondWithFilteredResult(_0x30dcbf,_0x42a384))[_0x47a5('0x28')](handleError(_0x30dcbf,null));};exports['addTags']=function(_0x3b16f5,_0x4394f0,_0x54c565){return db[_0x47a5('0x3e')][_0x47a5('0xae')]({'where':{'id':_0x3b16f5['params']['id']}})['then'](handleEntityNotFound(_0x4394f0,null))[_0x47a5('0x1f')](function(_0x55c4ae){if(_0x55c4ae){return _0x55c4ae[_0x47a5('0xf6')](_0x3b16f5[_0x47a5('0xb0')][_0x47a5('0xed')],_['omit'](_0x3b16f5[_0x47a5('0xb0')],[_0x47a5('0xed'),'id'])||{})[_0x47a5('0xf7')](function(){return db[_0x47a5('0xf8')][_0x47a5('0xf2')]({'attributes':['id',_0x47a5('0x36'),_0x47a5('0x4b')],'where':{'id':_0x3b16f5['body'][_0x47a5('0xed')]}});})[_0x47a5('0x1f')](function(_0x29320b){socket[_0x47a5('0xf9')](_0x47a5('0xfa'),{'id':Number(_0x3b16f5[_0x47a5('0xaa')]['id']),'tags':_0x29320b||[]});return{'id':Number(_0x3b16f5[_0x47a5('0xaa')]['id']),'tags':_0x29320b||[]};});}})['then'](respondWithResult(_0x4394f0,null))['catch'](handleError(_0x4394f0,null));};exports[_0x47a5('0xfb')]=function(_0x3dbcc7,_0x2d0c51,_0x4bbc94){return db['ChatInteraction'][_0x47a5('0xae')]({'where':{'id':_0x3dbcc7[_0x47a5('0xaa')]['id']}})[_0x47a5('0x1f')](handleEntityNotFound(_0x2d0c51,null))[_0x47a5('0x1f')](function(_0x452008){if(_0x452008){return _0x452008[_0x47a5('0xfb')](_0x3dbcc7[_0x47a5('0x44')]['ids']);}})[_0x47a5('0x1f')](respondWithStatusCode(_0x2d0c51,null))[_0x47a5('0x28')](handleError(_0x2d0c51,null));};exports[_0x47a5('0xc4')]=function(_0x540d7f,_0xc5f4a6){var _0x611b40=moment()[_0x47a5('0xfc')]()[_0x47a5('0x85')]();var _0x38aab1=path[_0x47a5('0x86')](config[_0x47a5('0xc5')],_0x47a5('0xfd'),_0x47a5('0xfe'),_0x47a5('0xff'));var _0xd4f6ce=path[_0x47a5('0x86')](config[_0x47a5('0xc5')],'server',_0x47a5('0xfe'),'attachments');var _0x2e6477=path['join'](_0x38aab1,_0x611b40);var _0x1c5cf0=util[_0x47a5('0x63')](_0x47a5('0x100'),_0x540d7f['params']['id'],_0x611b40);var _0xd72a22=path['join'](_0x38aab1,_0x1c5cf0);var _0x23667e=![];return db[_0x47a5('0x3e')][_0x47a5('0xae')]({'where':{'id':_0x540d7f[_0x47a5('0xaa')]['id']},'include':[{'model':db['ChatMessage'],'as':_0x47a5('0x101'),'attributes':['id','body','createdAt',_0x47a5('0x102'),_0x47a5('0xda')],'include':[{'model':db[_0x47a5('0xcc')],'as':_0x47a5('0xcc'),'attributes':['id',_0x47a5('0xd6')],'raw':!![]},{'model':db[_0x47a5('0x103')],'as':_0x47a5('0x104'),'attributes':['id',_0x47a5('0x105'),_0x47a5('0x106')],'raw':!![]},{'model':db['Attachment'],'as':'Attachment','raw':!![]}]},{'model':db[_0x47a5('0xcd')],'as':_0x47a5('0x107'),'attributes':['id',_0x47a5('0x36')]},{'model':db[_0x47a5('0xcc')],'as':_0x47a5('0x108'),'attributes':['id','fullname']}]})[_0x47a5('0x1f')](handleEntityNotFound(_0xc5f4a6,null))[_0x47a5('0x1f')](function(_0x16bcec){if(_0x16bcec){var _0x50ff41=_0x16bcec['get']({'plain':!![]});_0x23667e=!![];var _0x3bb31f={'format':'A4','border':_0x47a5('0x109'),'header':{'height':'40px','contents':{'first':_0x47a5('0x10a')}},'footer':{'height':_0x47a5('0x10b'),'contents':{'default':util[_0x47a5('0x63')]('<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[_0x47a5('0x63')](_0x47a5('0x10c'),_0x47a5('0x10d'),_0x50ff41['id']),moment()[_0x47a5('0x63')](_0x47a5('0x10e'))['toString']())}}};fs[_0x47a5('0x10f')](_0x2e6477);var _0x38accb={'channel':_0x47a5('0x10d'),'account':_0x50ff41[_0x47a5('0x107')]['name'],'agent':_0x50ff41['Owner']?_0x50ff41[_0x47a5('0x108')]['fullname']:_0x47a5('0x110'),'createdAt':moment(_0x50ff41[_0x47a5('0x7c')])[_0x47a5('0x63')](_0x47a5('0xef'))[_0x47a5('0x85')](),'closedAt':_0x50ff41[_0x47a5('0x111')]?moment(_0x50ff41['closedAt'])[_0x47a5('0x63')](_0x47a5('0xef'))[_0x47a5('0x85')]():'','disposition':_0x50ff41['disposition'],'chatInfo':{'browser':_0x50ff41['browserName'],'os':_0x50ff41[_0x47a5('0x112')],'referer':_0x50ff41['referer'],'customerIp':_0x50ff41[_0x47a5('0x113')]},'messages':_(_0x50ff41[_0x47a5('0x101')])[_0x47a5('0x114')]()[_0x47a5('0x77')]({'secret':![]})[_0x47a5('0x39')](function(_0x5ae128){if(_0x5ae128['Attachment']){var _0xdc60f8=path[_0x47a5('0x86')](_0xd4f6ce,_0x5ae128[_0x47a5('0xbf')][_0x47a5('0xba')]);if(fs[_0x47a5('0x115')](_0xdc60f8)){fs['createReadStream'](_0xdc60f8)[_0x47a5('0x116')](fs[_0x47a5('0x117')](path[_0x47a5('0x86')](_0x2e6477,_0x5ae128[_0x47a5('0xbf')][_0x47a5('0xba')])));}}return{'date':moment(_0x5ae128['createdAt'])[_0x47a5('0x63')](_0x47a5('0xef'))[_0x47a5('0x85')](),'sender':_0x5ae128[_0x47a5('0x102')]===_0x47a5('0x118')?_0x5ae128[_0x47a5('0xcc')]?_0x5ae128[_0x47a5('0xcc')][_0x47a5('0xd6')]:_0x47a5('0xd3'):_0x5ae128[_0x47a5('0x104')][_0x47a5('0x105')]+(_0x5ae128['Contact'][_0x47a5('0x106')]?'\x20'+_0x5ae128[_0x47a5('0x104')][_0x47a5('0x106')]:''),'body':_0x5ae128[_0x47a5('0xbf')]?_0x5ae128['Attachment']['basename']:_0x5ae128['body'],'direction':_0x5ae128[_0x47a5('0x102')]==='out'?'A':'C','secret':_0x5ae128[_0x47a5('0xda')],'attachment':_0x5ae128[_0x47a5('0xbf')]};})['value']()};return ejs[_0x47a5('0x119')](path[_0x47a5('0x86')](config[_0x47a5('0xc5')],'server',_0x47a5('0x11a'),'downloadInteraction.html'),{'interaction':_0x38accb})[_0x47a5('0x1f')](function(_0x18c0b6){return new BPromise(function(_0x460d52,_0x3c4c48){pdf[_0x47a5('0xaf')](_0x18c0b6,_0x3bb31f)[_0x47a5('0x11b')](path['join'](_0x2e6477,'transcript-'+_0x50ff41['id']+'-'+_0x611b40+'.pdf'),function(_0x2647c3,_0x2da818){if(_0x2647c3)return _0x3c4c48(_0x2647c3);_0x460d52(_0x2da818);});});});}})[_0x47a5('0x1f')](function(){if(_0x23667e){return new BPromise(function(_0x9d1a3b,_0x28bf10){zipdir(_0x2e6477,{'saveTo':_0xd72a22},function(_0x28b865,_0x338c9d){if(_0x28b865)return _0x28bf10(_0x28b865);return _0x9d1a3b(_0x338c9d);});})[_0x47a5('0x1f')](function(){return new BPromise(function(_0x232c36,_0x25954e){rimraf(_0x2e6477,function(_0x277061){if(_0x277061)_0x25954e(_0x277061);return _0x232c36();});});})[_0x47a5('0x1f')](function(){return _0xc5f4a6[_0x47a5('0xc4')](_0xd72a22,_0x1c5cf0,function(_0x22469b){if(_0x22469b){console[_0x47a5('0x11c')](_0x47a5('0x11d'),_0x22469b);}else{fs['unlinkSync'](_0xd72a22);}});});}else{return _0xc5f4a6[_0x47a5('0x29')](0xc8);}})[_0x47a5('0x28')](handleError(_0xc5f4a6,null));};
\ No newline at end of file
index 97fba13..e559e65 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe119=['update','remove','then','setDataValue','Users','map','unreadMessages','length','emit','hasOwnProperty','hook','exports','../../mysqldb'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0xe119,0x74));var _0x9e11=function(_0x153faa,_0x75f2a){_0x153faa=_0x153faa-0x0;var _0x43c32a=_0xe119[_0x153faa];return _0x43c32a;};'use strict';var EventEmitter=require('events');var ChatInteraction=require(_0x9e11('0x0'))['db']['ChatInteraction'];var ChatMessage=require(_0x9e11('0x0'))['db']['ChatMessage'];var ChatInteractionEvents=new EventEmitter();ChatInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0x9e11('0x1'),'afterDestroy':_0x9e11('0x2')};function emitEvent(_0x3707df){return function(_0xca070b,_0x27925b,_0x34c0ea){_0xca070b['getUsers']({'attributes':['id'],'raw':!![]})[_0x9e11('0x3')](function(_0x2f9acf){_0xca070b[_0x9e11('0x4')](_0x9e11('0x5'),_0x2f9acf[_0x9e11('0x6')](function(_0x2f8c2e){return{'id':_0x2f8c2e['id']};}));return ChatMessage['findAll']({'where':{'ChatInteractionId':_0xca070b['id'],'direction':'in','read':![]},'raw':!![]});})['then'](function(_0x3d1dc1){_0xca070b[_0x9e11('0x4')](_0x9e11('0x7'),_0x3d1dc1[_0x9e11('0x8')]);ChatInteractionEvents[_0x9e11('0x9')](_0x3707df+':'+_0xca070b['id'],_0xca070b);ChatInteractionEvents[_0x9e11('0x9')](_0x3707df,_0xca070b);_0x34c0ea(null);})['catch'](_0x34c0ea(null));};}for(var e in events){if(events[_0x9e11('0xa')](e)){var event=events[e];ChatInteraction[_0x9e11('0xb')](e,emitEvent(event));}}module[_0x9e11('0xc')]=ChatInteractionEvents;
\ No newline at end of file
+var _0x34fc=['map','findAll','then','unreadMessages','length','emit','hasOwnProperty','exports','events','ChatInteraction','../../mysqldb','ChatMessage','setMaxListeners','remove','setDataValue','Users'];(function(_0x40b74c,_0x42ed7){var _0x289a1a=function(_0x40c6e9){while(--_0x40c6e9){_0x40b74c['push'](_0x40b74c['shift']());}};_0x289a1a(++_0x42ed7);}(_0x34fc,0x1c8));var _0xc34f=function(_0x4abc91,_0x48816b){_0x4abc91=_0x4abc91-0x0;var _0xe4f632=_0x34fc[_0x4abc91];return _0xe4f632;};'use strict';var EventEmitter=require(_0xc34f('0x0'));var ChatInteraction=require('../../mysqldb')['db'][_0xc34f('0x1')];var ChatMessage=require(_0xc34f('0x2'))['db'][_0xc34f('0x3')];var ChatInteractionEvents=new EventEmitter();ChatInteractionEvents[_0xc34f('0x4')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0xc34f('0x5')};function emitEvent(_0x143455){return function(_0x32bc9d,_0x35b45a,_0x8c482a){_0x32bc9d['getUsers']({'attributes':['id'],'raw':!![]})['then'](function(_0x15488a){_0x32bc9d[_0xc34f('0x6')](_0xc34f('0x7'),_0x15488a[_0xc34f('0x8')](function(_0x4f83cb){return{'id':_0x4f83cb['id']};}));return ChatMessage[_0xc34f('0x9')]({'where':{'ChatInteractionId':_0x32bc9d['id'],'direction':'in','read':![]},'raw':!![]});})[_0xc34f('0xa')](function(_0x374a54){_0x32bc9d[_0xc34f('0x6')](_0xc34f('0xb'),_0x374a54[_0xc34f('0xc')]);ChatInteractionEvents['emit'](_0x143455+':'+_0x32bc9d['id'],_0x32bc9d);ChatInteractionEvents[_0xc34f('0xd')](_0x143455,_0x32bc9d);_0x8c482a(null);})['catch'](_0x8c482a(null));};}for(var e in events){if(events[_0xc34f('0xe')](e)){var event=events[e];ChatInteraction['hook'](e,emitEvent(event));}}module[_0xc34f('0xf')]=ChatInteractionEvents;
\ No newline at end of file
index 611716f..ba4c7e1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8603=['rimraf','./chatInteraction.attributes','define','ChatInteraction','chat_interactions','changed','closed','format','YYYY-MM-DD\x20HH:mm:ss','utf8mb4_unicode_ci','util','../../config/logger','api','request-promise','path'];(function(_0x51aff3,_0x23e1b6){var _0x1840c8=function(_0x1a1c15){while(--_0x1a1c15){_0x51aff3['push'](_0x51aff3['shift']());}};_0x1840c8(++_0x23e1b6);}(_0x8603,0x190));var _0x3860=function(_0x1e9483,_0x1a4949){_0x1e9483=_0x1e9483-0x0;var _0x4b7e09=_0x8603[_0x1e9483];return _0x4b7e09;};'use strict';var _=require('lodash');var util=require(_0x3860('0x0'));var logger=require(_0x3860('0x1'))(_0x3860('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x3860('0x3'));var fs=require('fs');var path=require(_0x3860('0x4'));var rimraf=require(_0x3860('0x5'));var config=require('../../config/environment');var attributes=require(_0x3860('0x6'));module['exports']=function(_0xb0fc24,_0x40739b){return _0xb0fc24[_0x3860('0x7')](_0x3860('0x8'),attributes,{'tableName':_0x3860('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x4aba10,_0x5c7350,_0x5b1ac8){if(_0x4aba10[_0x3860('0xa')](_0x3860('0xb'))){_0x4aba10['closedAt']=moment()[_0x3860('0xc')](_0x3860('0xd'));}_0x5b1ac8(null,_0x4aba10);}},'charset':'utf8mb4','collate':_0x3860('0xe')});};
\ No newline at end of file
+var _0xda3f=['../../config/environment','exports','ChatInteraction','chat_interactions','changed','closed','closedAt','format','YYYY-MM-DD\x20HH:mm:ss','utf8mb4','utf8mb4_unicode_ci','util','../../config/logger','request-promise','rimraf'];(function(_0x315617,_0x5e6da5){var _0xdfbbb7=function(_0x1ff905){while(--_0x1ff905){_0x315617['push'](_0x315617['shift']());}};_0xdfbbb7(++_0x5e6da5);}(_0xda3f,0xec));var _0xfda3=function(_0x5f4e18,_0x1408f9){_0x5f4e18=_0x5f4e18-0x0;var _0x5e9dc3=_0xda3f[_0x5f4e18];return _0x5e9dc3;};'use strict';var _=require('lodash');var util=require(_0xfda3('0x0'));var logger=require(_0xfda3('0x1'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xfda3('0x2'));var fs=require('fs');var path=require('path');var rimraf=require(_0xfda3('0x3'));var config=require(_0xfda3('0x4'));var attributes=require('./chatInteraction.attributes');module[_0xfda3('0x5')]=function(_0x43a010,_0x47e7e2){return _0x43a010['define'](_0xfda3('0x6'),attributes,{'tableName':_0xfda3('0x7'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x125e2a,_0x4018c0,_0x7bb490){if(_0x125e2a[_0xfda3('0x8')](_0xfda3('0x9'))){_0x125e2a[_0xfda3('0xa')]=moment()[_0xfda3('0xb')](_0xfda3('0xc'));}_0x7bb490(null,_0x125e2a);}},'charset':_0xfda3('0xd'),'collate':_0xfda3('0xe')});};
\ No newline at end of file
index b875250..e222c78 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d22=['request\x20sent','ChatInteraction,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','ChatInteraction','update','body','options','raw','where','attributes','limit','UpdateChatInteraction','debug','AddTagsToChatInteraction','addTags','ids','AddTags','lodash','util','moment','bluebird','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','localhost','socket.io-emitter','./chatInteraction.socket','request','then','info','ChatInteraction,\x20%s,\x20%s'];(function(_0x1b0ac7,_0x3ee345){var _0x4eed4b=function(_0x53a76a){while(--_0x53a76a){_0x1b0ac7['push'](_0x1b0ac7['shift']());}};_0x4eed4b(++_0x3ee345);}(_0x5d22,0x1e4));var _0x25d2=function(_0x2938d1,_0x5ddd9b){_0x2938d1=_0x2938d1-0x0;var _0x34eca2=_0x5d22[_0x2938d1];return _0x34eca2;};'use strict';var _=require(_0x25d2('0x0'));var util=require(_0x25d2('0x1'));var moment=require(_0x25d2('0x2'));var BPromise=require(_0x25d2('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x25d2('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x25d2('0x5'));var logger=require(_0x25d2('0x6'))(_0x25d2('0x7'));var config=require(_0x25d2('0x8'));var jayson=require(_0x25d2('0x9'));var client=jayson[_0x25d2('0xa')][_0x25d2('0xb')]({'port':0x232a});config['redis']=_['defaults'](config[_0x25d2('0xc')],{'host':_0x25d2('0xd'),'port':0x18eb});var socket=require(_0x25d2('0xe'))(new Redis(config[_0x25d2('0xc')]));require(_0x25d2('0xf'))['register'](socket);function respondWithRpcPromise(_0x49f527,_0x5d519b,_0x4a1467){return new BPromise(function(_0x289192,_0x3d94a4){return client[_0x25d2('0x10')](_0x49f527,_0x4a1467)[_0x25d2('0x11')](function(_0x5d894b){logger[_0x25d2('0x12')](_0x25d2('0x13'),_0x5d519b,_0x25d2('0x14'));logger['debug'](_0x25d2('0x15'),_0x5d519b,_0x25d2('0x14'),JSON[_0x25d2('0x16')](_0x5d894b));if(_0x5d894b['error']){if(_0x5d894b['error'][_0x25d2('0x17')]===0x1f4){logger['error'](_0x25d2('0x13'),_0x5d519b,_0x5d894b[_0x25d2('0x18')][_0x25d2('0x19')]);return _0x3d94a4(_0x5d894b[_0x25d2('0x18')]['message']);}logger[_0x25d2('0x18')]('ChatInteraction,\x20%s,\x20%s',_0x5d519b,_0x5d894b[_0x25d2('0x18')][_0x25d2('0x19')]);return _0x289192(_0x5d894b['error'][_0x25d2('0x19')]);}else{logger[_0x25d2('0x12')](_0x25d2('0x13'),_0x5d519b,_0x25d2('0x14'));_0x289192(_0x5d894b[_0x25d2('0x1a')][_0x25d2('0x19')]);}})[_0x25d2('0x1b')](function(_0xf7f974){logger[_0x25d2('0x18')](_0x25d2('0x13'),_0x5d519b,_0xf7f974);_0x3d94a4(_0xf7f974);});});}exports['UpdateChatInteraction']=function(_0x5cbc44){var _0x466153=this;return new Promise(function(_0x5f29e0,_0x15af3e){return db[_0x25d2('0x1c')][_0x25d2('0x1d')](_0x5cbc44[_0x25d2('0x1e')],{'raw':_0x5cbc44[_0x25d2('0x1f')]?_0x5cbc44[_0x25d2('0x1f')][_0x25d2('0x20')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5cbc44[_0x25d2('0x1f')]?_0x5cbc44[_0x25d2('0x1f')][_0x25d2('0x21')]||null:null,'attributes':_0x5cbc44['options']?_0x5cbc44[_0x25d2('0x1f')][_0x25d2('0x22')]||null:null,'limit':_0x5cbc44[_0x25d2('0x1f')]?_0x5cbc44['options'][_0x25d2('0x23')]||null:null})[_0x25d2('0x11')](function(_0x568548){logger['info'](_0x25d2('0x24'),_0x5cbc44);logger[_0x25d2('0x25')]('UpdateChatInteraction',_0x5cbc44,JSON['stringify'](_0x568548));_0x5f29e0(_0x568548);})['catch'](function(_0x3ea453){logger[_0x25d2('0x18')](_0x25d2('0x24'),_0x3ea453['message'],_0x5cbc44);_0x15af3e(_0x466153[_0x25d2('0x18')](0x1f4,_0x3ea453[_0x25d2('0x19')]));});});};exports[_0x25d2('0x26')]=function(_0x1ef80f){return new Promise(function(_0x3f4cb1,_0x2dd172){return db[_0x25d2('0x1c')]['find']({'where':_0x1ef80f[_0x25d2('0x1f')]?_0x1ef80f[_0x25d2('0x1f')]['where']||null:null})[_0x25d2('0x11')](function(_0x3f0a59){if(_0x3f0a59){return _0x3f0a59[_0x25d2('0x27')](_0x1ef80f[_0x25d2('0x1e')]['ids'],_['omit'](_0x1ef80f[_0x25d2('0x1e')],[_0x25d2('0x28'),'id'])||{});}})['spread'](function(_0xaa188f){logger['info'](_0x25d2('0x29'),_0x1ef80f);logger[_0x25d2('0x25')](_0x25d2('0x29'),_0x1ef80f,JSON[_0x25d2('0x16')](_0xaa188f));_0x3f4cb1(_0xaa188f);})[_0x25d2('0x1b')](function(_0x4e7385){logger['error'](_0x25d2('0x29'),_0x4e7385[_0x25d2('0x19')],_0x1ef80f);_0x2dd172(_this[_0x25d2('0x18')](0x1f4,_0x4e7385[_0x25d2('0x19')]));});});};
\ No newline at end of file
+var _0xafa2=['client','http','redis','defaults','localhost','./chatInteraction.socket','register','request','then','info','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','ChatInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','UpdateChatInteraction','options','where','limit','AddTagsToChatInteraction','ChatInteraction','find','addTags','body','ids','omit','spread','AddTags','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','../../config/environment','jayson/promise'];(function(_0x245253,_0x17f832){var _0x2869f3=function(_0x320845){while(--_0x320845){_0x245253['push'](_0x245253['shift']());}};_0x2869f3(++_0x17f832);}(_0xafa2,0x9f));var _0x2afa=function(_0x48c546,_0x5d3304){_0x48c546=_0x48c546-0x0;var _0x39fd5e=_0xafa2[_0x48c546];return _0x39fd5e;};'use strict';var _=require('lodash');var util=require(_0x2afa('0x0'));var moment=require(_0x2afa('0x1'));var BPromise=require(_0x2afa('0x2'));var rs=require(_0x2afa('0x3'));var fs=require('fs');var Redis=require(_0x2afa('0x4'));var db=require(_0x2afa('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x2afa('0x6'))('rpc');var config=require(_0x2afa('0x7'));var jayson=require(_0x2afa('0x8'));var client=jayson[_0x2afa('0x9')][_0x2afa('0xa')]({'port':0x232a});config[_0x2afa('0xb')]=_[_0x2afa('0xc')](config[_0x2afa('0xb')],{'host':_0x2afa('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x2afa('0xb')]));require(_0x2afa('0xe'))[_0x2afa('0xf')](socket);function respondWithRpcPromise(_0x430aad,_0x1ef741,_0x42d16f){return new BPromise(function(_0x2e4a37,_0x6e381f){return client[_0x2afa('0x10')](_0x430aad,_0x42d16f)[_0x2afa('0x11')](function(_0x552846){logger[_0x2afa('0x12')](_0x2afa('0x13'),_0x1ef741,_0x2afa('0x14'));logger[_0x2afa('0x15')](_0x2afa('0x16'),_0x1ef741,_0x2afa('0x14'),JSON[_0x2afa('0x17')](_0x552846));if(_0x552846[_0x2afa('0x18')]){if(_0x552846[_0x2afa('0x18')][_0x2afa('0x19')]===0x1f4){logger[_0x2afa('0x18')]('ChatInteraction,\x20%s,\x20%s',_0x1ef741,_0x552846['error'][_0x2afa('0x1a')]);return _0x6e381f(_0x552846[_0x2afa('0x18')][_0x2afa('0x1a')]);}logger[_0x2afa('0x18')](_0x2afa('0x13'),_0x1ef741,_0x552846[_0x2afa('0x18')]['message']);return _0x2e4a37(_0x552846[_0x2afa('0x18')][_0x2afa('0x1a')]);}else{logger[_0x2afa('0x12')](_0x2afa('0x13'),_0x1ef741,_0x2afa('0x14'));_0x2e4a37(_0x552846[_0x2afa('0x1b')][_0x2afa('0x1a')]);}})[_0x2afa('0x1c')](function(_0x49112d){logger[_0x2afa('0x18')](_0x2afa('0x13'),_0x1ef741,_0x49112d);_0x6e381f(_0x49112d);});});}exports[_0x2afa('0x1d')]=function(_0x271694){var _0x4e07f4=this;return new Promise(function(_0x130301,_0xbdcf6b){return db['ChatInteraction']['update'](_0x271694['body'],{'raw':_0x271694[_0x2afa('0x1e')]?_0x271694['options']['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x271694['options']?_0x271694[_0x2afa('0x1e')][_0x2afa('0x1f')]||null:null,'attributes':_0x271694[_0x2afa('0x1e')]?_0x271694[_0x2afa('0x1e')]['attributes']||null:null,'limit':_0x271694[_0x2afa('0x1e')]?_0x271694['options'][_0x2afa('0x20')]||null:null})[_0x2afa('0x11')](function(_0x3d9665){logger[_0x2afa('0x12')](_0x2afa('0x1d'),_0x271694);logger['debug'](_0x2afa('0x1d'),_0x271694,JSON[_0x2afa('0x17')](_0x3d9665));_0x130301(_0x3d9665);})[_0x2afa('0x1c')](function(_0x4c82f1){logger[_0x2afa('0x18')](_0x2afa('0x1d'),_0x4c82f1[_0x2afa('0x1a')],_0x271694);_0xbdcf6b(_0x4e07f4[_0x2afa('0x18')](0x1f4,_0x4c82f1['message']));});});};exports[_0x2afa('0x21')]=function(_0x47bee0){return new Promise(function(_0x574d39,_0xd59ab3){return db[_0x2afa('0x22')][_0x2afa('0x23')]({'where':_0x47bee0[_0x2afa('0x1e')]?_0x47bee0[_0x2afa('0x1e')]['where']||null:null})['then'](function(_0xc28d1d){if(_0xc28d1d){return _0xc28d1d[_0x2afa('0x24')](_0x47bee0[_0x2afa('0x25')][_0x2afa('0x26')],_[_0x2afa('0x27')](_0x47bee0[_0x2afa('0x25')],[_0x2afa('0x26'),'id'])||{});}})[_0x2afa('0x28')](function(_0x3048b3){logger['info'](_0x2afa('0x29'),_0x47bee0);logger[_0x2afa('0x15')]('AddTags',_0x47bee0,JSON['stringify'](_0x3048b3));_0x574d39(_0x3048b3);})['catch'](function(_0x54451b){logger[_0x2afa('0x18')](_0x2afa('0x29'),_0x54451b[_0x2afa('0x1a')],_0x47bee0);_0xd59ab3(_this[_0x2afa('0x18')](0x1f4,_0x54451b[_0x2afa('0x1a')]));});});};
\ No newline at end of file
index 9bbde37..b38bd10 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x98eb=['emit','removeListener','length','remove'];(function(_0x11c573,_0x9e7c6e){var _0x6b72de=function(_0x2e8a61){while(--_0x2e8a61){_0x11c573['push'](_0x11c573['shift']());}};_0x6b72de(++_0x9e7c6e);}(_0x98eb,0x183));var _0xb98e=function(_0x525c7b,_0x488fcc){_0x525c7b=_0x525c7b-0x0;var _0x27b33e=_0x98eb[_0x525c7b];return _0x27b33e;};'use strict';var ChatInteractionEvents=require('./chatInteraction.events');var events=['save',_0xb98e('0x0'),'update'];function createListener(_0x2c995d,_0x219b25){return function(_0x44265e){_0x219b25[_0xb98e('0x1')](_0x2c995d,_0x44265e);};}function removeListener(_0x5ace8b,_0x58d6f6){return function(){ChatInteractionEvents[_0xb98e('0x2')](_0x5ace8b,_0x58d6f6);};}exports['register']=function(_0x2549ac){for(var _0x3bbf25=0x0,_0x1b4d96=events[_0xb98e('0x3')];_0x3bbf25<_0x1b4d96;_0x3bbf25++){var _0x43a0fd=events[_0x3bbf25];var _0x17667d=createListener('chatInteraction:'+_0x43a0fd,_0x2549ac);ChatInteractionEvents['on'](_0x43a0fd,_0x17667d);}};
\ No newline at end of file
+var _0xd09d=['removeListener','register','length','chatInteraction:','save','remove','update'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xd09d,0x6d));var _0xdd09=function(_0x3411a6,_0x45dd3c){_0x3411a6=_0x3411a6-0x0;var _0x9e8747=_0xd09d[_0x3411a6];return _0x9e8747;};'use strict';var ChatInteractionEvents=require('./chatInteraction.events');var events=[_0xdd09('0x0'),_0xdd09('0x1'),_0xdd09('0x2')];function createListener(_0x1da481,_0x25e9b7){return function(_0x4e99b1){_0x25e9b7['emit'](_0x1da481,_0x4e99b1);};}function removeListener(_0x34f6d6,_0x377daf){return function(){ChatInteractionEvents[_0xdd09('0x3')](_0x34f6d6,_0x377daf);};}exports[_0xdd09('0x4')]=function(_0x7bcac6){for(var _0x55b3e0=0x0,_0x2980ae=events[_0xdd09('0x5')];_0x55b3e0<_0x2980ae;_0x55b3e0++){var _0x442a44=events[_0x55b3e0];var _0x3d67fd=createListener(_0xdd09('0x6')+_0x442a44,_0x7bcac6);ChatInteractionEvents['on'](_0x442a44,_0x3d67fd);}};
\ No newline at end of file
index 54e7d35..ce1d1bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7e7=['root','format','%s-%s','now','originalname','replace','post','/:id/attachment_upload','single','file','attachmentUpload','addMessage','tracked','chat','addTags','put','chatinteraction:update','update','/:id/abandon','close','delete','chatinteraction:destroy','destroy','removeTags','exports','multer','path','express','../../components/auth/service','../../config/environment','./chatInteraction.controller','get','/describe','isAuthenticated','/:id','isChatInteractionAuthorized','show','/:id/attachment_download','/:id/messages','getMessages','/:id/my_messages','getMyMessages','download','join'];(function(_0x550117,_0x36b9f5){var _0x430e18=function(_0x511957){while(--_0x511957){_0x550117['push'](_0x550117['shift']());}};_0x430e18(++_0x36b9f5);}(_0xb7e7,0x121));var _0x7b7e=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0xb7e7[_0x3947c9];return _0x2e7871;};'use strict';var multer=require(_0x7b7e('0x0'));var util=require('util');var path=require(_0x7b7e('0x1'));var timeout=require('connect-timeout');var express=require(_0x7b7e('0x2'));var router=express['Router']();var auth=require(_0x7b7e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x7b7e('0x4'));var controller=require(_0x7b7e('0x5'));router[_0x7b7e('0x6')]('/',auth['isAuthenticated'](),controller['index']);router[_0x7b7e('0x6')](_0x7b7e('0x7'),auth[_0x7b7e('0x8')](),controller['describe']);router[_0x7b7e('0x6')](_0x7b7e('0x9'),auth[_0x7b7e('0xa')](),controller[_0x7b7e('0xb')]);router[_0x7b7e('0x6')](_0x7b7e('0xc'),auth[_0x7b7e('0xa')](),controller['attachmentDownload']);router[_0x7b7e('0x6')](_0x7b7e('0xd'),auth[_0x7b7e('0x8')](),controller[_0x7b7e('0xe')]);router[_0x7b7e('0x6')](_0x7b7e('0xf'),auth[_0x7b7e('0xa')](),controller[_0x7b7e('0x10')]);router[_0x7b7e('0x6')]('/:id/download',auth[_0x7b7e('0x8')](),controller[_0x7b7e('0x11')]);router['post']('/',auth[_0x7b7e('0x8')](),controller['create']);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x2889ed,_0xd304f5,_0xf067da){_0xf067da(null,path[_0x7b7e('0x12')](config[_0x7b7e('0x13')],'server/files/attachments/'));},'filename':function(_0x51baf6,_0xc7f087,_0x36444d){_0x36444d(null,util[_0x7b7e('0x14')](_0x7b7e('0x15'),Date[_0x7b7e('0x16')](),_0xc7f087[_0x7b7e('0x17')][_0x7b7e('0x18')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x7b7e('0x19')](_0x7b7e('0x1a'),upload[_0x7b7e('0x1b')](_0x7b7e('0x1c')),controller[_0x7b7e('0x1d')]);router[_0x7b7e('0x19')](_0x7b7e('0xd'),auth[_0x7b7e('0xa')](),controller[_0x7b7e('0x1e')]);router[_0x7b7e('0x19')]('/:id/tags',auth[_0x7b7e('0x8')](),interaction[_0x7b7e('0x1f')](_0x7b7e('0x20'),'chatinteraction:addtags'),controller[_0x7b7e('0x21')]);router[_0x7b7e('0x22')](_0x7b7e('0x9'),auth[_0x7b7e('0x8')](),interaction[_0x7b7e('0x1f')](_0x7b7e('0x20'),_0x7b7e('0x23')),controller[_0x7b7e('0x24')]);router['put']('/:id/custom_update',controller['customUpdate']);router[_0x7b7e('0x22')](_0x7b7e('0x25'),auth[_0x7b7e('0xa')](),controller['abandon']);router['put']('/:id/close',controller[_0x7b7e('0x26')]);router[_0x7b7e('0x27')](_0x7b7e('0x9'),auth[_0x7b7e('0x8')](),interaction[_0x7b7e('0x1f')]('chat',_0x7b7e('0x28')),controller[_0x7b7e('0x29')]);router['delete']('/:id/tags',auth['isAuthenticated'](),controller[_0x7b7e('0x2a')]);module[_0x7b7e('0x2b')]=router;
\ No newline at end of file
+var _0x4e81=['chatinteraction:addtags','addTags','put','chat','update','/:id/abandon','abandon','/:id/close','delete','chatinteraction:destroy','destroy','removeTags','multer','util','path','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatInteraction.controller','get','isAuthenticated','/describe','describe','/:id','isChatInteractionAuthorized','show','/:id/attachment_download','attachmentDownload','/:id/messages','getMessages','/:id/my_messages','download','post','create','join','root','server/files/attachments/','format','%s-%s','now','originalname','replace','single','file','attachmentUpload','addMessage','/:id/tags','tracked'];(function(_0x4ff2f3,_0x4f1330){var _0x46cd4d=function(_0x3d20b3){while(--_0x3d20b3){_0x4ff2f3['push'](_0x4ff2f3['shift']());}};_0x46cd4d(++_0x4f1330);}(_0x4e81,0x1bc));var _0x14e8=function(_0x2adbeb,_0x5581be){_0x2adbeb=_0x2adbeb-0x0;var _0x5e18a6=_0x4e81[_0x2adbeb];return _0x5e18a6;};'use strict';var multer=require(_0x14e8('0x0'));var util=require(_0x14e8('0x1'));var path=require(_0x14e8('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require(_0x14e8('0x3'));var interaction=require(_0x14e8('0x4'));var config=require(_0x14e8('0x5'));var controller=require(_0x14e8('0x6'));router[_0x14e8('0x7')]('/',auth[_0x14e8('0x8')](),controller['index']);router['get'](_0x14e8('0x9'),auth[_0x14e8('0x8')](),controller[_0x14e8('0xa')]);router[_0x14e8('0x7')](_0x14e8('0xb'),auth[_0x14e8('0xc')](),controller[_0x14e8('0xd')]);router[_0x14e8('0x7')](_0x14e8('0xe'),auth['isChatInteractionAuthorized'](),controller[_0x14e8('0xf')]);router[_0x14e8('0x7')](_0x14e8('0x10'),auth[_0x14e8('0x8')](),controller[_0x14e8('0x11')]);router[_0x14e8('0x7')](_0x14e8('0x12'),auth[_0x14e8('0xc')](),controller['getMyMessages']);router[_0x14e8('0x7')]('/:id/download',auth[_0x14e8('0x8')](),controller[_0x14e8('0x13')]);router[_0x14e8('0x14')]('/',auth['isAuthenticated'](),controller[_0x14e8('0x15')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x458e4a,_0x58d26e,_0x347216){_0x347216(null,path[_0x14e8('0x16')](config[_0x14e8('0x17')],_0x14e8('0x18')));},'filename':function(_0x52e64f,_0x10c4a9,_0x3793a0){_0x3793a0(null,util[_0x14e8('0x19')](_0x14e8('0x1a'),Date[_0x14e8('0x1b')](),_0x10c4a9[_0x14e8('0x1c')][_0x14e8('0x1d')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x14e8('0x14')]('/:id/attachment_upload',upload[_0x14e8('0x1e')](_0x14e8('0x1f')),controller[_0x14e8('0x20')]);router[_0x14e8('0x14')](_0x14e8('0x10'),auth['isChatInteractionAuthorized'](),controller[_0x14e8('0x21')]);router[_0x14e8('0x14')](_0x14e8('0x22'),auth['isAuthenticated'](),interaction[_0x14e8('0x23')]('chat',_0x14e8('0x24')),controller[_0x14e8('0x25')]);router[_0x14e8('0x26')](_0x14e8('0xb'),auth[_0x14e8('0x8')](),interaction['tracked'](_0x14e8('0x27'),'chatinteraction:update'),controller[_0x14e8('0x28')]);router[_0x14e8('0x26')]('/:id/custom_update',controller['customUpdate']);router['put'](_0x14e8('0x29'),auth[_0x14e8('0xc')](),controller[_0x14e8('0x2a')]);router[_0x14e8('0x26')](_0x14e8('0x2b'),controller['close']);router[_0x14e8('0x2c')](_0x14e8('0xb'),auth[_0x14e8('0x8')](),interaction[_0x14e8('0x23')](_0x14e8('0x27'),_0x14e8('0x2d')),controller[_0x14e8('0x2e')]);router['delete'](_0x14e8('0x22'),auth[_0x14e8('0x8')](),controller[_0x14e8('0x2f')]);module['exports']=router;
\ No newline at end of file
index 1bed049..cea0e19 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd9eb=['TEXT','medium','BOOLEAN','INTEGER','sequelize','exports'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xd9eb,0xca));var _0xbd9e=function(_0x3550b4,_0x59b309){_0x3550b4=_0x3550b4-0x0;var _0x237bca=_0xd9eb[_0x3550b4];return _0x237bca;};'use strict';var Sequelize=require(_0xbd9e('0x0'));module[_0xbd9e('0x1')]={'body':{'type':Sequelize[_0xbd9e('0x2')](_0xbd9e('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0xbd9e('0x4')],'defaultValue':![]},'ChatInternalMessageId':{'type':Sequelize[_0xbd9e('0x5')]}};
\ No newline at end of file
+var _0xfcf0=['BOOLEAN','INTEGER','sequelize','exports','medium'];(function(_0x5b3829,_0x594aad){var _0x46baf2=function(_0x395e5b){while(--_0x395e5b){_0x5b3829['push'](_0x5b3829['shift']());}};_0x46baf2(++_0x594aad);}(_0xfcf0,0x138));var _0x0fcf=function(_0x23ec06,_0x561142){_0x23ec06=_0x23ec06-0x0;var _0x2831d4=_0xfcf0[_0x23ec06];return _0x2831d4;};'use strict';var Sequelize=require(_0x0fcf('0x0'));module[_0x0fcf('0x1')]={'body':{'type':Sequelize['TEXT'](_0x0fcf('0x2')),'allowNull':![]},'read':{'type':Sequelize[_0x0fcf('0x3')],'defaultValue':![]},'ChatInternalMessageId':{'type':Sequelize[_0x0fcf('0x4')]}};
\ No newline at end of file
index 78725e8..4a4c8d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfde8=['sort','pick','filter','merge','where','map','VIRTUAL','field','options','include','rows','catch','show','params','keys','rawAttributes','length','includeAll','find','create','body','describe','get','lastMessageAt','createdAt','lastMessage','YYYY-MM-DD\x20HH:mm:ss','getUsers','User','findAll','agent','admin','user','fullname','role','userpic','internal','online','showWebBar','-online','VoiceQueue','VoiceQueues','type','Unable\x20to\x20retrieve\x20the\x20current\x20user','Agents','userProfileId','UserProfileResource','isEmpty','resourceId','push','messages','FromId','ToId','read','-createdAt','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/environment','redis','defaults','localhost','socket.io-emitter','status','end','json','count','offset','limit','set','apply','reject','save','update','then','destroy','sendStatus','error','stack','name','send','index','ChatInternalMessage','model','query','filters','attributes','intersection','fields','nolimit','order'];(function(_0x1eda20,_0x1149f4){var _0x31b953=function(_0x25f0d8){while(--_0x25f0d8){_0x1eda20['push'](_0x1eda20['shift']());}};_0x31b953(++_0x1149f4);}(_0xfde8,0x111));var _0x8fde=function(_0x390b75,_0x3572b2){_0x390b75=_0x390b75-0x0;var _0x141d11=_0xfde8[_0x390b75];return _0x141d11;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x8fde('0x0'));var rimraf=require(_0x8fde('0x1'));var zipdir=require(_0x8fde('0x2'));var jsonpatch=require(_0x8fde('0x3'));var rp=require(_0x8fde('0x4'));var moment=require(_0x8fde('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x8fde('0x6'));var util=require(_0x8fde('0x7'));var path=require(_0x8fde('0x8'));var sox=require(_0x8fde('0x9'));var csv=require(_0x8fde('0xa'));var ejs=require(_0x8fde('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x8fde('0xc'));var crypto=require(_0x8fde('0xd'));var jsforce=require(_0x8fde('0xe'));var deskjs=require(_0x8fde('0xf'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x8fde('0x10'));var Redis=require(_0x8fde('0x11'));var authService=require(_0x8fde('0x12'));var qs=require(_0x8fde('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x8fde('0x14'))('api');var utils=require('../../config/utils');var config=require(_0x8fde('0x15'));var db=require('../../mysqldb')['db'];config[_0x8fde('0x16')]=_[_0x8fde('0x17')](config['redis'],{'host':_0x8fde('0x18'),'port':0x18eb});var socket=require(_0x8fde('0x19'))(new Redis(config[_0x8fde('0x16')]));require('./chatInternalMessage.socket')['register'](socket);function respondWithStatusCode(_0x471782,_0x4f8ea9){_0x4f8ea9=_0x4f8ea9||0xcc;return function(_0x47ce6c){if(_0x47ce6c){return _0x471782['sendStatus'](_0x4f8ea9);}return _0x471782[_0x8fde('0x1a')](_0x4f8ea9)[_0x8fde('0x1b')]();};}function respondWithResult(_0x5b43eb,_0x5e493a){_0x5e493a=_0x5e493a||0xc8;return function(_0x519267){if(_0x519267){return _0x5b43eb[_0x8fde('0x1a')](_0x5e493a)[_0x8fde('0x1c')](_0x519267);}};}function respondWithFilteredResult(_0x33398b,_0xf615a0){return function(_0x32cd23){if(_0x32cd23){var _0x5299bf=_0x32cd23[_0x8fde('0x1d')],_0x56ff62=_0xf615a0['offset'],_0x3c21c0=_0xf615a0[_0x8fde('0x1e')]+_0xf615a0[_0x8fde('0x1f')],_0x444367;if(_0x3c21c0>=_0x5299bf){_0x3c21c0=_0x5299bf;_0x444367=0xc8;}else{_0x444367=0xce;}_0x33398b[_0x8fde('0x1a')](_0x444367);return _0x33398b[_0x8fde('0x20')]('Content-Range',_0x56ff62+'-'+_0x3c21c0+'/'+_0x5299bf)[_0x8fde('0x1c')](_0x32cd23);}return null;};}function patchUpdates(_0x593fea){return function(_0x3bd789){try{jsonpatch[_0x8fde('0x21')](_0x3bd789,_0x593fea,!![]);}catch(_0x31dae2){return BPromise[_0x8fde('0x22')](_0x31dae2);}return _0x3bd789[_0x8fde('0x23')]();};}function saveUpdates(_0x1d505c,_0x31f678){return function(_0x2745c2){if(_0x2745c2){return _0x2745c2[_0x8fde('0x24')](_0x1d505c)[_0x8fde('0x25')](function(_0x2054c2){return _0x2054c2;});}return null;};}function removeEntity(_0x2519ab,_0x287a62){return function(_0x247bb7){if(_0x247bb7){return _0x247bb7[_0x8fde('0x26')]()[_0x8fde('0x25')](function(){_0x2519ab[_0x8fde('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x47b3ce,_0x4b8cec){return function(_0x52a092){if(!_0x52a092){_0x47b3ce[_0x8fde('0x27')](0x194);}return _0x52a092;};}function handleError(_0x23ca31,_0x3ffb16){_0x3ffb16=_0x3ffb16||0x1f4;return function(_0x5789bc){logger[_0x8fde('0x28')](_0x5789bc[_0x8fde('0x29')]);if(_0x5789bc['name']){delete _0x5789bc[_0x8fde('0x2a')];}_0x23ca31[_0x8fde('0x1a')](_0x3ffb16)[_0x8fde('0x2b')](_0x5789bc);};}exports[_0x8fde('0x2c')]=function(_0x2c02fe,_0x168c6f){var _0x49c534={},_0x1bcb1a={},_0x330c27={'count':0x0,'rows':[]};var _0xa603ab=db[_0x8fde('0x2d')]['rawAttributes'];_0x1bcb1a[_0x8fde('0x2e')]=_['keys'](_0xa603ab);_0x1bcb1a[_0x8fde('0x2f')]=_['keys'](_0x2c02fe[_0x8fde('0x2f')]);_0x1bcb1a[_0x8fde('0x30')]=_['intersection'](_0x1bcb1a[_0x8fde('0x2e')],_0x1bcb1a['query']);_0x49c534[_0x8fde('0x31')]=_[_0x8fde('0x32')](_0x1bcb1a['model'],qs[_0x8fde('0x33')](_0x2c02fe[_0x8fde('0x2f')]['fields']));_0x49c534[_0x8fde('0x31')]=_0x49c534[_0x8fde('0x31')]['length']?_0x49c534[_0x8fde('0x31')]:_0x1bcb1a[_0x8fde('0x2e')];if(!_0x2c02fe[_0x8fde('0x2f')]['hasOwnProperty'](_0x8fde('0x34'))){_0x49c534[_0x8fde('0x1f')]=qs[_0x8fde('0x1f')](_0x2c02fe['query'][_0x8fde('0x1f')]);_0x49c534['offset']=qs[_0x8fde('0x1e')](_0x2c02fe[_0x8fde('0x2f')][_0x8fde('0x1e')]);}_0x49c534[_0x8fde('0x35')]=qs[_0x8fde('0x36')](_0x2c02fe['query'][_0x8fde('0x36')]);_0x49c534['where']=qs[_0x8fde('0x30')](_[_0x8fde('0x37')](_0x2c02fe[_0x8fde('0x2f')],_0x1bcb1a[_0x8fde('0x30')]));if(_0x2c02fe[_0x8fde('0x2f')][_0x8fde('0x38')]){_0x49c534['where']=_[_0x8fde('0x39')](_0x49c534[_0x8fde('0x3a')],{'$or':_[_0x8fde('0x3b')](_0xa603ab,function(_0x4378e0){if(_0x4378e0['type']['key']!==_0x8fde('0x3c')){var _0x33dd14={};_0x33dd14[_0x4378e0[_0x8fde('0x3d')]]={'$like':'%'+_0x2c02fe[_0x8fde('0x2f')][_0x8fde('0x38')]+'%'};return _0x33dd14;}})});}_0x49c534=_[_0x8fde('0x39')]({},_0x49c534,_0x2c02fe[_0x8fde('0x3e')]);var _0x15dd60={'where':_0x49c534[_0x8fde('0x3a')]};return db['ChatInternalMessage'][_0x8fde('0x1d')](_0x15dd60)[_0x8fde('0x25')](function(_0x9bd938){_0x330c27['count']=_0x9bd938;if(_0x2c02fe[_0x8fde('0x2f')]['includeAll']){_0x49c534[_0x8fde('0x3f')]=[{'all':!![]}];}return db['ChatInternalMessage']['findAll'](_0x49c534);})[_0x8fde('0x25')](function(_0x5a7761){_0x330c27[_0x8fde('0x40')]=_0x5a7761;return _0x330c27;})[_0x8fde('0x25')](respondWithFilteredResult(_0x168c6f,_0x49c534))[_0x8fde('0x41')](handleError(_0x168c6f,null));};exports[_0x8fde('0x42')]=function(_0x18d815,_0x2e4d06){var _0x539cc2={'raw':!![],'where':{'id':_0x18d815[_0x8fde('0x43')]['id']}},_0x4c74e9={};_0x4c74e9[_0x8fde('0x2e')]=_[_0x8fde('0x44')](db['ChatInternalMessage'][_0x8fde('0x45')]);_0x4c74e9[_0x8fde('0x2f')]=_[_0x8fde('0x44')](_0x18d815['query']);_0x4c74e9['filters']=_[_0x8fde('0x32')](_0x4c74e9[_0x8fde('0x2e')],_0x4c74e9[_0x8fde('0x2f')]);_0x539cc2[_0x8fde('0x31')]=_['intersection'](_0x4c74e9[_0x8fde('0x2e')],qs['fields'](_0x18d815['query']['fields']));_0x539cc2[_0x8fde('0x31')]=_0x539cc2[_0x8fde('0x31')][_0x8fde('0x46')]?_0x539cc2[_0x8fde('0x31')]:_0x4c74e9[_0x8fde('0x2e')];if(_0x18d815[_0x8fde('0x2f')][_0x8fde('0x47')]){_0x539cc2['include']=[{'all':!![]}];}_0x539cc2=_['merge']({},_0x539cc2,_0x18d815[_0x8fde('0x3e')]);return db[_0x8fde('0x2d')][_0x8fde('0x48')](_0x539cc2)[_0x8fde('0x25')](handleEntityNotFound(_0x2e4d06,null))[_0x8fde('0x25')](respondWithResult(_0x2e4d06,null))[_0x8fde('0x41')](handleError(_0x2e4d06,null));};exports[_0x8fde('0x49')]=function(_0x3e8794,_0xbb35b2){return db[_0x8fde('0x2d')][_0x8fde('0x49')](_0x3e8794[_0x8fde('0x4a')],{})['then'](respondWithResult(_0xbb35b2,0xc9))['catch'](handleError(_0xbb35b2,null));};exports[_0x8fde('0x24')]=function(_0x1bf978,_0x553f52){if(_0x1bf978[_0x8fde('0x4a')]['id']){delete _0x1bf978['body']['id'];}return db[_0x8fde('0x2d')][_0x8fde('0x48')]({'where':{'id':_0x1bf978[_0x8fde('0x43')]['id']}})[_0x8fde('0x25')](handleEntityNotFound(_0x553f52,null))[_0x8fde('0x25')](saveUpdates(_0x1bf978[_0x8fde('0x4a')],null))['then'](respondWithResult(_0x553f52,null))['catch'](handleError(_0x553f52,null));};exports[_0x8fde('0x26')]=function(_0x4f77b5,_0x52e1e6){return db[_0x8fde('0x2d')][_0x8fde('0x48')]({'where':{'id':_0x4f77b5['params']['id']}})[_0x8fde('0x25')](handleEntityNotFound(_0x52e1e6,null))['then'](removeEntity(_0x52e1e6,null))[_0x8fde('0x41')](handleError(_0x52e1e6,null));};exports[_0x8fde('0x4b')]=function(_0x47ee4e,_0x1f69a4){return db[_0x8fde('0x2d')][_0x8fde('0x4b')]()[_0x8fde('0x25')](respondWithResult(_0x1f69a4,null))[_0x8fde('0x41')](handleError(_0x1f69a4,null));};function wrapUser(_0x50d101){return function(_0x4aafef){var _0x1b6a51=_0x50d101[_0x8fde('0x4c')]({'plain':!![]});_0x1b6a51['messages']=[];if(_0x4aafef){_0x1b6a51[_0x8fde('0x4d')]=_0x4aafef[_0x8fde('0x4e')];_0x1b6a51[_0x8fde('0x4f')]=_0x4aafef;}else{_0x1b6a51[_0x8fde('0x4d')]=moment(0x0)['format'](_0x8fde('0x50'));_0x1b6a51[_0x8fde('0x4f')]={};}return _0x1b6a51;};}exports[_0x8fde('0x51')]=function(_0x466b60,_0x2b922f,_0x1f115c){var _0x32477e=[];return db[_0x8fde('0x52')][_0x8fde('0x53')]({'where':{'role':[_0x8fde('0x54'),_0x8fde('0x55'),_0x8fde('0x56')]},'attributes':['id',_0x8fde('0x57'),'name',_0x8fde('0x58'),_0x8fde('0x59'),_0x8fde('0x5a'),_0x8fde('0x5b'),'lastLoginAt','allowmessenger',_0x8fde('0x5c')],'order':qs[_0x8fde('0x36')](_0x8fde('0x5d')),'include':[{'model':db[_0x8fde('0x5e')],'as':_0x8fde('0x5f'),'attributes':['id',_0x8fde('0x2a'),_0x8fde('0x60')],'through':{'attributes':[]}}]})[_0x8fde('0x25')](function(_0x16e73a){if(_0x16e73a){var _0x2983e7=_0x466b60[_0x8fde('0x56')]['get']({'plain':!![]});if(!_0x2983e7)throw new Error(_0x8fde('0x61'));if(_0x2983e7['role']===_0x8fde('0x56')){return db['UserProfileSection'][_0x8fde('0x48')]({'where':{'name':_0x8fde('0x62'),'userProfileId':_0x2983e7[_0x8fde('0x63')]},'raw':!![]})[_0x8fde('0x25')](function(_0x374763){if(_0x374763){if(_0x374763['autoAssociation']===0x0){return db[_0x8fde('0x64')][_0x8fde('0x53')]({'where':{'sectionId':_0x374763['id']},'raw':!![]})[_0x8fde('0x25')](function(_0x568bb2){var _0x1b14ad=[];if(_[_0x8fde('0x65')](_0x568bb2)){_0x1b14ad=_[_0x8fde('0x38')](_0x16e73a,function(_0x5c0f1d){if(_0x5c0f1d[_0x8fde('0x58')]!==_0x8fde('0x54')){return _0x5c0f1d;}});return _0x1b14ad;}else{for(var _0x2bd0b6=0x0;_0x2bd0b6<_0x16e73a['length'];_0x2bd0b6++){var _0x5704fb=_0x16e73a[_0x2bd0b6];if(_0x5704fb[_0x8fde('0x58')]===_0x8fde('0x54')){var _0x41403d=_[_0x8fde('0x48')](_0x568bb2,function(_0xd2cc23){return _0xd2cc23[_0x8fde('0x66')]===_0x5704fb['id'];});if(_0x41403d)_0x1b14ad['push'](_0x5704fb);}else{_0x1b14ad[_0x8fde('0x67')](_0x5704fb);}}return _0x1b14ad;}});}else{return _0x16e73a;}}else{var _0x5555fc=_['filter'](_0x16e73a,function(_0x7cbf57){if(_0x7cbf57[_0x8fde('0x58')]!==_0x8fde('0x54')){return _0x7cbf57;}});return _0x5555fc;}});}else{return _0x16e73a;}}})[_0x8fde('0x25')](function(_0x560247){var _0x2412f4=[];if(_0x560247){_0x32477e=_0x560247;for(var _0xfe17a9=0x0;_0xfe17a9<_0x560247[_0x8fde('0x46')];_0xfe17a9+=0x1){_0x32477e[_0xfe17a9][_0x8fde('0x68')]=[];_0x2412f4[_0x8fde('0x67')](db[_0x8fde('0x2d')][_0x8fde('0x48')]({'where':{'FromId':[_0x466b60['user']['id'],_0x560247[_0xfe17a9]['id']],'ToId':[_0x466b60['user']['id'],_0x560247[_0xfe17a9]['id']],'ChatGroupId':null},'attributes':['id',_0x8fde('0x4e'),_0x8fde('0x69'),_0x8fde('0x6a'),_0x8fde('0x6b'),'body'],'order':qs[_0x8fde('0x36')](_0x8fde('0x6c')),'limit':0x1,'offset':0x0,'raw':!![]})[_0x8fde('0x25')](wrapUser(_0x560247[_0xfe17a9])));}return BPromise['all'](_0x2412f4);}return[];})['then'](function(_0x1b0493){return{'rows':_0x1b0493,'count':_0x1b0493[_0x8fde('0x46')]};})[_0x8fde('0x25')](respondWithResult(_0x2b922f,null))[_0x8fde('0x41')](handleError(_0x2b922f,null));};
\ No newline at end of file
+var _0xd1cd=['../../config/utils','../../config/environment','redis','defaults','localhost','socket.io-emitter','register','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','then','error','stack','name','send','index','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','type','key','VIRTUAL','field','filter','options','ChatInternalMessage','includeAll','include','findAll','rows','show','rawAttributes','find','catch','body','update','params','destroy','describe','get','messages','createdAt','lastMessage','YYYY-MM-DD\x20HH:mm:ss','getUsers','User','agent','admin','fullname','role','userpic','online','lastLoginAt','showWebBar','-online','VoiceQueue','VoiceQueues','Agents','autoAssociation','UserProfileResource','isEmpty','resourceId','push','ToId','read','-createdAt','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../config/logger','api'];(function(_0x5519a9,_0x1c5147){var _0x32f2cc=function(_0x52ed58){while(--_0x52ed58){_0x5519a9['push'](_0x5519a9['shift']());}};_0x32f2cc(++_0x1c5147);}(_0xd1cd,0x127));var _0xdd1c=function(_0x363578,_0x2384dd){_0x363578=_0x363578-0x0;var _0x541de5=_0xd1cd[_0x363578];return _0x541de5;};'use strict';var pdf=require(_0xdd1c('0x0'));var emlformat=require(_0xdd1c('0x1'));var rimraf=require(_0xdd1c('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xdd1c('0x3'));var moment=require(_0xdd1c('0x4'));var BPromise=require(_0xdd1c('0x5'));var Mustache=require(_0xdd1c('0x6'));var util=require(_0xdd1c('0x7'));var path=require(_0xdd1c('0x8'));var sox=require(_0xdd1c('0x9'));var csv=require(_0xdd1c('0xa'));var ejs=require(_0xdd1c('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0xdd1c('0xc'));var crypto=require(_0xdd1c('0xd'));var jsforce=require(_0xdd1c('0xe'));var deskjs=require(_0xdd1c('0xf'));var toCsv=require(_0xdd1c('0xa'));var querystring=require(_0xdd1c('0x10'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0xdd1c('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xdd1c('0x12'))(_0xdd1c('0x13'));var utils=require(_0xdd1c('0x14'));var config=require(_0xdd1c('0x15'));var db=require('../../mysqldb')['db'];config[_0xdd1c('0x16')]=_[_0xdd1c('0x17')](config['redis'],{'host':_0xdd1c('0x18'),'port':0x18eb});var socket=require(_0xdd1c('0x19'))(new Redis(config['redis']));require('./chatInternalMessage.socket')[_0xdd1c('0x1a')](socket);function respondWithStatusCode(_0x168791,_0x48debc){_0x48debc=_0x48debc||0xcc;return function(_0x1bbb7d){if(_0x1bbb7d){return _0x168791[_0xdd1c('0x1b')](_0x48debc);}return _0x168791[_0xdd1c('0x1c')](_0x48debc)['end']();};}function respondWithResult(_0x29dcc9,_0x2b2f87){_0x2b2f87=_0x2b2f87||0xc8;return function(_0x3a2a50){if(_0x3a2a50){return _0x29dcc9[_0xdd1c('0x1c')](_0x2b2f87)[_0xdd1c('0x1d')](_0x3a2a50);}};}function respondWithFilteredResult(_0x1a3c77,_0x5de65f){return function(_0x3005b8){if(_0x3005b8){var _0x313637=_0x3005b8[_0xdd1c('0x1e')],_0x499bba=_0x5de65f[_0xdd1c('0x1f')],_0x338175=_0x5de65f[_0xdd1c('0x1f')]+_0x5de65f[_0xdd1c('0x20')],_0x433360;if(_0x338175>=_0x313637){_0x338175=_0x313637;_0x433360=0xc8;}else{_0x433360=0xce;}_0x1a3c77[_0xdd1c('0x1c')](_0x433360);return _0x1a3c77[_0xdd1c('0x21')](_0xdd1c('0x22'),_0x499bba+'-'+_0x338175+'/'+_0x313637)[_0xdd1c('0x1d')](_0x3005b8);}return null;};}function patchUpdates(_0xb38f40){return function(_0x1bff98){try{jsonpatch[_0xdd1c('0x23')](_0x1bff98,_0xb38f40,!![]);}catch(_0x9cada7){return BPromise[_0xdd1c('0x24')](_0x9cada7);}return _0x1bff98['save']();};}function saveUpdates(_0x2e91d4,_0x557977){return function(_0xe30abd){if(_0xe30abd){return _0xe30abd['update'](_0x2e91d4)['then'](function(_0x9fef8){return _0x9fef8;});}return null;};}function removeEntity(_0x1ab740,_0x23d459){return function(_0x25abc8){if(_0x25abc8){return _0x25abc8['destroy']()[_0xdd1c('0x25')](function(){_0x1ab740[_0xdd1c('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x43bcc4,_0x3d481f){return function(_0x2c866a){if(!_0x2c866a){_0x43bcc4[_0xdd1c('0x1b')](0x194);}return _0x2c866a;};}function handleError(_0x1a1bdf,_0x765e62){_0x765e62=_0x765e62||0x1f4;return function(_0x141737){logger[_0xdd1c('0x26')](_0x141737[_0xdd1c('0x27')]);if(_0x141737['name']){delete _0x141737[_0xdd1c('0x28')];}_0x1a1bdf[_0xdd1c('0x1c')](_0x765e62)[_0xdd1c('0x29')](_0x141737);};}exports[_0xdd1c('0x2a')]=function(_0x44c852,_0x4b4175){var _0x3838a6={},_0x27f5e3={},_0xa775a={'count':0x0,'rows':[]};var _0x3d1009=db['ChatInternalMessage']['rawAttributes'];_0x27f5e3['model']=_[_0xdd1c('0x2b')](_0x3d1009);_0x27f5e3['query']=_[_0xdd1c('0x2b')](_0x44c852[_0xdd1c('0x2c')]);_0x27f5e3[_0xdd1c('0x2d')]=_[_0xdd1c('0x2e')](_0x27f5e3[_0xdd1c('0x2f')],_0x27f5e3[_0xdd1c('0x2c')]);_0x3838a6[_0xdd1c('0x30')]=_['intersection'](_0x27f5e3['model'],qs['fields'](_0x44c852['query'][_0xdd1c('0x31')]));_0x3838a6['attributes']=_0x3838a6[_0xdd1c('0x30')][_0xdd1c('0x32')]?_0x3838a6['attributes']:_0x27f5e3[_0xdd1c('0x2f')];if(!_0x44c852[_0xdd1c('0x2c')][_0xdd1c('0x33')](_0xdd1c('0x34'))){_0x3838a6[_0xdd1c('0x20')]=qs[_0xdd1c('0x20')](_0x44c852['query']['limit']);_0x3838a6[_0xdd1c('0x1f')]=qs[_0xdd1c('0x1f')](_0x44c852[_0xdd1c('0x2c')][_0xdd1c('0x1f')]);}_0x3838a6[_0xdd1c('0x35')]=qs[_0xdd1c('0x36')](_0x44c852[_0xdd1c('0x2c')]['sort']);_0x3838a6[_0xdd1c('0x37')]=qs[_0xdd1c('0x2d')](_[_0xdd1c('0x38')](_0x44c852['query'],_0x27f5e3[_0xdd1c('0x2d')]));if(_0x44c852['query']['filter']){_0x3838a6['where']=_[_0xdd1c('0x39')](_0x3838a6[_0xdd1c('0x37')],{'$or':_['map'](_0x3d1009,function(_0x93ea2e){if(_0x93ea2e[_0xdd1c('0x3a')][_0xdd1c('0x3b')]!==_0xdd1c('0x3c')){var _0x2d1625={};_0x2d1625[_0x93ea2e[_0xdd1c('0x3d')]]={'$like':'%'+_0x44c852[_0xdd1c('0x2c')][_0xdd1c('0x3e')]+'%'};return _0x2d1625;}})});}_0x3838a6=_[_0xdd1c('0x39')]({},_0x3838a6,_0x44c852[_0xdd1c('0x3f')]);var _0x4dcfc6={'where':_0x3838a6[_0xdd1c('0x37')]};return db[_0xdd1c('0x40')][_0xdd1c('0x1e')](_0x4dcfc6)[_0xdd1c('0x25')](function(_0x234ed0){_0xa775a[_0xdd1c('0x1e')]=_0x234ed0;if(_0x44c852[_0xdd1c('0x2c')][_0xdd1c('0x41')]){_0x3838a6[_0xdd1c('0x42')]=[{'all':!![]}];}return db[_0xdd1c('0x40')][_0xdd1c('0x43')](_0x3838a6);})[_0xdd1c('0x25')](function(_0x220b10){_0xa775a[_0xdd1c('0x44')]=_0x220b10;return _0xa775a;})[_0xdd1c('0x25')](respondWithFilteredResult(_0x4b4175,_0x3838a6))['catch'](handleError(_0x4b4175,null));};exports[_0xdd1c('0x45')]=function(_0x478cfc,_0x12433c){var _0x59636b={'raw':!![],'where':{'id':_0x478cfc['params']['id']}},_0x395800={};_0x395800[_0xdd1c('0x2f')]=_['keys'](db['ChatInternalMessage'][_0xdd1c('0x46')]);_0x395800[_0xdd1c('0x2c')]=_[_0xdd1c('0x2b')](_0x478cfc['query']);_0x395800['filters']=_[_0xdd1c('0x2e')](_0x395800[_0xdd1c('0x2f')],_0x395800[_0xdd1c('0x2c')]);_0x59636b['attributes']=_[_0xdd1c('0x2e')](_0x395800['model'],qs[_0xdd1c('0x31')](_0x478cfc[_0xdd1c('0x2c')][_0xdd1c('0x31')]));_0x59636b[_0xdd1c('0x30')]=_0x59636b[_0xdd1c('0x30')][_0xdd1c('0x32')]?_0x59636b[_0xdd1c('0x30')]:_0x395800[_0xdd1c('0x2f')];if(_0x478cfc[_0xdd1c('0x2c')][_0xdd1c('0x41')]){_0x59636b['include']=[{'all':!![]}];}_0x59636b=_[_0xdd1c('0x39')]({},_0x59636b,_0x478cfc[_0xdd1c('0x3f')]);return db[_0xdd1c('0x40')][_0xdd1c('0x47')](_0x59636b)[_0xdd1c('0x25')](handleEntityNotFound(_0x12433c,null))[_0xdd1c('0x25')](respondWithResult(_0x12433c,null))[_0xdd1c('0x48')](handleError(_0x12433c,null));};exports['create']=function(_0x2cd3a0,_0x1bc661){return db[_0xdd1c('0x40')]['create'](_0x2cd3a0[_0xdd1c('0x49')],{})[_0xdd1c('0x25')](respondWithResult(_0x1bc661,0xc9))['catch'](handleError(_0x1bc661,null));};exports[_0xdd1c('0x4a')]=function(_0x2b1978,_0x2a9ec0){if(_0x2b1978[_0xdd1c('0x49')]['id']){delete _0x2b1978[_0xdd1c('0x49')]['id'];}return db[_0xdd1c('0x40')][_0xdd1c('0x47')]({'where':{'id':_0x2b1978[_0xdd1c('0x4b')]['id']}})['then'](handleEntityNotFound(_0x2a9ec0,null))['then'](saveUpdates(_0x2b1978[_0xdd1c('0x49')],null))['then'](respondWithResult(_0x2a9ec0,null))[_0xdd1c('0x48')](handleError(_0x2a9ec0,null));};exports[_0xdd1c('0x4c')]=function(_0x58a88b,_0x218d34){return db[_0xdd1c('0x40')][_0xdd1c('0x47')]({'where':{'id':_0x58a88b[_0xdd1c('0x4b')]['id']}})[_0xdd1c('0x25')](handleEntityNotFound(_0x218d34,null))[_0xdd1c('0x25')](removeEntity(_0x218d34,null))[_0xdd1c('0x48')](handleError(_0x218d34,null));};exports[_0xdd1c('0x4d')]=function(_0x361952,_0x19a8fe){return db[_0xdd1c('0x40')]['describe']()['then'](respondWithResult(_0x19a8fe,null))[_0xdd1c('0x48')](handleError(_0x19a8fe,null));};function wrapUser(_0x2b6993){return function(_0x266b8a){var _0x2d05fe=_0x2b6993[_0xdd1c('0x4e')]({'plain':!![]});_0x2d05fe[_0xdd1c('0x4f')]=[];if(_0x266b8a){_0x2d05fe['lastMessageAt']=_0x266b8a[_0xdd1c('0x50')];_0x2d05fe[_0xdd1c('0x51')]=_0x266b8a;}else{_0x2d05fe['lastMessageAt']=moment(0x0)['format'](_0xdd1c('0x52'));_0x2d05fe[_0xdd1c('0x51')]={};}return _0x2d05fe;};}exports[_0xdd1c('0x53')]=function(_0x295574,_0x2b7ac2,_0x24f1ae){var _0xaee645=[];return db[_0xdd1c('0x54')][_0xdd1c('0x43')]({'where':{'role':[_0xdd1c('0x55'),_0xdd1c('0x56'),'user']},'attributes':['id',_0xdd1c('0x57'),'name',_0xdd1c('0x58'),_0xdd1c('0x59'),'internal',_0xdd1c('0x5a'),_0xdd1c('0x5b'),'allowmessenger',_0xdd1c('0x5c')],'order':qs['sort'](_0xdd1c('0x5d')),'include':[{'model':db[_0xdd1c('0x5e')],'as':_0xdd1c('0x5f'),'attributes':['id',_0xdd1c('0x28'),_0xdd1c('0x3a')],'through':{'attributes':[]}}]})[_0xdd1c('0x25')](function(_0x281c1e){if(_0x281c1e){var _0x3ec302=_0x295574['user'][_0xdd1c('0x4e')]({'plain':!![]});if(!_0x3ec302)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x3ec302[_0xdd1c('0x58')]==='user'){return db['UserProfileSection'][_0xdd1c('0x47')]({'where':{'name':_0xdd1c('0x60'),'userProfileId':_0x3ec302['userProfileId']},'raw':!![]})['then'](function(_0x53a8ad){if(_0x53a8ad){if(_0x53a8ad[_0xdd1c('0x61')]===0x0){return db[_0xdd1c('0x62')][_0xdd1c('0x43')]({'where':{'sectionId':_0x53a8ad['id']},'raw':!![]})['then'](function(_0x1bf222){var _0x1fc0a0=[];if(_[_0xdd1c('0x63')](_0x1bf222)){_0x1fc0a0=_[_0xdd1c('0x3e')](_0x281c1e,function(_0x5158a7){if(_0x5158a7['role']!==_0xdd1c('0x55')){return _0x5158a7;}});return _0x1fc0a0;}else{for(var _0x16a49f=0x0;_0x16a49f<_0x281c1e[_0xdd1c('0x32')];_0x16a49f++){var _0x323b6d=_0x281c1e[_0x16a49f];if(_0x323b6d[_0xdd1c('0x58')]===_0xdd1c('0x55')){var _0xb51a6c=_[_0xdd1c('0x47')](_0x1bf222,function(_0x45c57e){return _0x45c57e[_0xdd1c('0x64')]===_0x323b6d['id'];});if(_0xb51a6c)_0x1fc0a0[_0xdd1c('0x65')](_0x323b6d);}else{_0x1fc0a0[_0xdd1c('0x65')](_0x323b6d);}}return _0x1fc0a0;}});}else{return _0x281c1e;}}else{var _0x4101c6=_['filter'](_0x281c1e,function(_0x4e878b){if(_0x4e878b[_0xdd1c('0x58')]!==_0xdd1c('0x55')){return _0x4e878b;}});return _0x4101c6;}});}else{return _0x281c1e;}}})[_0xdd1c('0x25')](function(_0x4a6534){var _0x557e5c=[];if(_0x4a6534){_0xaee645=_0x4a6534;for(var _0x99685f=0x0;_0x99685f<_0x4a6534[_0xdd1c('0x32')];_0x99685f+=0x1){_0xaee645[_0x99685f][_0xdd1c('0x4f')]=[];_0x557e5c[_0xdd1c('0x65')](db[_0xdd1c('0x40')][_0xdd1c('0x47')]({'where':{'FromId':[_0x295574['user']['id'],_0x4a6534[_0x99685f]['id']],'ToId':[_0x295574['user']['id'],_0x4a6534[_0x99685f]['id']],'ChatGroupId':null},'attributes':['id',_0xdd1c('0x50'),'FromId',_0xdd1c('0x66'),_0xdd1c('0x67'),_0xdd1c('0x49')],'order':qs[_0xdd1c('0x36')](_0xdd1c('0x68')),'limit':0x1,'offset':0x0,'raw':!![]})[_0xdd1c('0x25')](wrapUser(_0x4a6534[_0x99685f])));}return BPromise['all'](_0x557e5c);}return[];})[_0xdd1c('0x25')](function(_0x3c964a){return{'rows':_0x3c964a,'count':_0x3c964a[_0xdd1c('0x32')]};})['then'](respondWithResult(_0x2b7ac2,null))[_0xdd1c('0x48')](handleError(_0x2b7ac2,null));};
\ No newline at end of file
index 13047bf..23a6b99 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x684c=['remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','setMaxListeners','save','update'];(function(_0x54e913,_0x4626d7){var _0x15357e=function(_0x502b06){while(--_0x502b06){_0x54e913['push'](_0x54e913['shift']());}};_0x15357e(++_0x4626d7);}(_0x684c,0x1b3));var _0xc684=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x684c[_0x3dd15e];return _0x231fd0;};'use strict';var EventEmitter=require(_0xc684('0x0'));var ChatInternalMessage=require(_0xc684('0x1'))['db']['ChatInternalMessage'];var ChatInternalMessageEvents=new EventEmitter();ChatInternalMessageEvents[_0xc684('0x2')](0x0);var events={'afterCreate':_0xc684('0x3'),'afterUpdate':_0xc684('0x4'),'afterDestroy':_0xc684('0x5')};function emitEvent(_0x2c50cf){return function(_0x4a3536,_0x3519e8,_0x239760){ChatInternalMessageEvents[_0xc684('0x6')](_0x2c50cf+':'+_0x4a3536['id'],_0x4a3536);ChatInternalMessageEvents[_0xc684('0x6')](_0x2c50cf,_0x4a3536);_0x239760(null);};}for(var e in events){if(events[_0xc684('0x7')](e)){var event=events[e];ChatInternalMessage[_0xc684('0x8')](e,emitEvent(event));}}module[_0xc684('0x9')]=ChatInternalMessageEvents;
\ No newline at end of file
+var _0x4058=['events','../../mysqldb','ChatInternalMessage','setMaxListeners','save','update','remove','emit','hasOwnProperty','hook','exports'];(function(_0x3f3f75,_0x5e215f){var _0x322635=function(_0x1ff524){while(--_0x1ff524){_0x3f3f75['push'](_0x3f3f75['shift']());}};_0x322635(++_0x5e215f);}(_0x4058,0x129));var _0x8405=function(_0x2c4fca,_0x206643){_0x2c4fca=_0x2c4fca-0x0;var _0x1d5b0d=_0x4058[_0x2c4fca];return _0x1d5b0d;};'use strict';var EventEmitter=require(_0x8405('0x0'));var ChatInternalMessage=require(_0x8405('0x1'))['db'][_0x8405('0x2')];var ChatInternalMessageEvents=new EventEmitter();ChatInternalMessageEvents[_0x8405('0x3')](0x0);var events={'afterCreate':_0x8405('0x4'),'afterUpdate':_0x8405('0x5'),'afterDestroy':_0x8405('0x6')};function emitEvent(_0x1f6e6e){return function(_0xf8c24c,_0x4948b2,_0x5ebf0e){ChatInternalMessageEvents['emit'](_0x1f6e6e+':'+_0xf8c24c['id'],_0xf8c24c);ChatInternalMessageEvents[_0x8405('0x7')](_0x1f6e6e,_0xf8c24c);_0x5ebf0e(null);};}for(var e in events){if(events[_0x8405('0x8')](e)){var event=events[e];ChatInternalMessage[_0x8405('0x9')](e,emitEvent(event));}}module[_0x8405('0xa')]=ChatInternalMessageEvents;
\ No newline at end of file
index 8d3515c..61be29d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x49ea=['request-promise','path','rimraf','../../config/environment','./chatInternalMessage.attributes','exports','define','ChatInternalMessage','utf8mb4_unicode_ci','lodash','moment','bluebird'];(function(_0x46698a,_0x8de1e4){var _0x356db0=function(_0x19e83c){while(--_0x19e83c){_0x46698a['push'](_0x46698a['shift']());}};_0x356db0(++_0x8de1e4);}(_0x49ea,0x189));var _0xa49e=function(_0x1c6813,_0x594841){_0x1c6813=_0x1c6813-0x0;var _0x25424a=_0x49ea[_0x1c6813];return _0x25424a;};'use strict';var _=require(_0xa49e('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0xa49e('0x1'));var BPromise=require(_0xa49e('0x2'));var rp=require(_0xa49e('0x3'));var fs=require('fs');var path=require(_0xa49e('0x4'));var rimraf=require(_0xa49e('0x5'));var config=require(_0xa49e('0x6'));var attributes=require(_0xa49e('0x7'));module[_0xa49e('0x8')]=function(_0x669305,_0x30386e){return _0x669305[_0xa49e('0x9')](_0xa49e('0xa'),attributes,{'tableName':'chat_internal_messages','paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':_0xa49e('0xb')});};
\ No newline at end of file
+var _0x8535=['chat_internal_messages','utf8mb4','utf8mb4_unicode_ci','util','api','moment','bluebird','path','rimraf','./chatInternalMessage.attributes','ChatInternalMessage'];(function(_0xa70179,_0x25ba66){var _0x9f1769=function(_0x3a25f3){while(--_0x3a25f3){_0xa70179['push'](_0xa70179['shift']());}};_0x9f1769(++_0x25ba66);}(_0x8535,0x66));var _0x5853=function(_0x1b679a,_0x5938e0){_0x1b679a=_0x1b679a-0x0;var _0x4ebf86=_0x8535[_0x1b679a];return _0x4ebf86;};'use strict';var _=require('lodash');var util=require(_0x5853('0x0'));var logger=require('../../config/logger')(_0x5853('0x1'));var moment=require(_0x5853('0x2'));var BPromise=require(_0x5853('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x5853('0x4'));var rimraf=require(_0x5853('0x5'));var config=require('../../config/environment');var attributes=require(_0x5853('0x6'));module['exports']=function(_0x3a1f4b,_0x2dd66d){return _0x3a1f4b['define'](_0x5853('0x7'),attributes,{'tableName':_0x5853('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x5853('0x9'),'collate':_0x5853('0xa')});};
\ No newline at end of file
index 884ea0f..ba951e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x74c7=['randomstring','ioredis','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','defaults','redis','localhost','socket.io-emitter','./chatInternalMessage.socket','register','request','then','ChatInternalMessage,\x20%s,\x20%s','debug','ChatInternalMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','util','moment'];(function(_0xef2a14,_0x4c359a){var _0x242a4d=function(_0x3227c9){while(--_0x3227c9){_0xef2a14['push'](_0xef2a14['shift']());}};_0x242a4d(++_0x4c359a);}(_0x74c7,0x194));var _0x774c=function(_0x13d1f6,_0x5a8fc2){_0x13d1f6=_0x13d1f6-0x0;var _0x134200=_0x74c7[_0x13d1f6];return _0x134200;};'use strict';var _=require('lodash');var util=require(_0x774c('0x0'));var moment=require(_0x774c('0x1'));var BPromise=require('bluebird');var rs=require(_0x774c('0x2'));var fs=require('fs');var Redis=require(_0x774c('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x774c('0x4'));var logger=require(_0x774c('0x5'))(_0x774c('0x6'));var config=require('../../config/environment');var jayson=require(_0x774c('0x7'));var client=jayson[_0x774c('0x8')][_0x774c('0x9')]({'port':0x232a});config['redis']=_[_0x774c('0xa')](config[_0x774c('0xb')],{'host':_0x774c('0xc'),'port':0x18eb});var socket=require(_0x774c('0xd'))(new Redis(config[_0x774c('0xb')]));require(_0x774c('0xe'))[_0x774c('0xf')](socket);function respondWithRpcPromise(_0x1bcd8d,_0x41d212,_0x3a50b3){return new BPromise(function(_0x40dd85,_0x421b5f){return client[_0x774c('0x10')](_0x1bcd8d,_0x3a50b3)[_0x774c('0x11')](function(_0x3d3dda){logger['info'](_0x774c('0x12'),_0x41d212,'request\x20sent');logger[_0x774c('0x13')](_0x774c('0x14'),_0x41d212,_0x774c('0x15'),JSON[_0x774c('0x16')](_0x3d3dda));if(_0x3d3dda[_0x774c('0x17')]){if(_0x3d3dda[_0x774c('0x17')][_0x774c('0x18')]===0x1f4){logger['error'](_0x774c('0x12'),_0x41d212,_0x3d3dda['error'][_0x774c('0x19')]);return _0x421b5f(_0x3d3dda[_0x774c('0x17')][_0x774c('0x19')]);}logger['error'](_0x774c('0x12'),_0x41d212,_0x3d3dda[_0x774c('0x17')][_0x774c('0x19')]);return _0x40dd85(_0x3d3dda[_0x774c('0x17')][_0x774c('0x19')]);}else{logger[_0x774c('0x1a')](_0x774c('0x12'),_0x41d212,_0x774c('0x15'));_0x40dd85(_0x3d3dda[_0x774c('0x1b')][_0x774c('0x19')]);}})[_0x774c('0x1c')](function(_0x3e1919){logger[_0x774c('0x17')]('ChatInternalMessage,\x20%s,\x20%s',_0x41d212,_0x3e1919);_0x421b5f(_0x3e1919);});});}
\ No newline at end of file
+var _0xa0c9=['redis','defaults','localhost','socket.io-emitter','./chatInternalMessage.socket','then','info','ChatInternalMessage,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/environment','jayson/promise','client','http'];(function(_0x103e36,_0x3be8f0){var _0x2a7c31=function(_0x286e90){while(--_0x286e90){_0x103e36['push'](_0x103e36['shift']());}};_0x2a7c31(++_0x3be8f0);}(_0xa0c9,0xf0));var _0x9a0c=function(_0x269a18,_0x1a2dd0){_0x269a18=_0x269a18-0x0;var _0x3d3bb7=_0xa0c9[_0x269a18];return _0x3d3bb7;};'use strict';var _=require(_0x9a0c('0x0'));var util=require(_0x9a0c('0x1'));var moment=require('moment');var BPromise=require(_0x9a0c('0x2'));var rs=require(_0x9a0c('0x3'));var fs=require('fs');var Redis=require(_0x9a0c('0x4'));var db=require(_0x9a0c('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require(_0x9a0c('0x6'));var jayson=require(_0x9a0c('0x7'));var client=jayson[_0x9a0c('0x8')][_0x9a0c('0x9')]({'port':0x232a});config[_0x9a0c('0xa')]=_[_0x9a0c('0xb')](config[_0x9a0c('0xa')],{'host':_0x9a0c('0xc'),'port':0x18eb});var socket=require(_0x9a0c('0xd'))(new Redis(config[_0x9a0c('0xa')]));require(_0x9a0c('0xe'))['register'](socket);function respondWithRpcPromise(_0xcaee47,_0x2e9451,_0x5ba599){return new BPromise(function(_0x2201de,_0x595444){return client['request'](_0xcaee47,_0x5ba599)[_0x9a0c('0xf')](function(_0x5e7280){logger[_0x9a0c('0x10')](_0x9a0c('0x11'),_0x2e9451,_0x9a0c('0x12'));logger[_0x9a0c('0x13')]('ChatInternalMessage,\x20%s,\x20%s,\x20%s',_0x2e9451,_0x9a0c('0x12'),JSON[_0x9a0c('0x14')](_0x5e7280));if(_0x5e7280[_0x9a0c('0x15')]){if(_0x5e7280[_0x9a0c('0x15')][_0x9a0c('0x16')]===0x1f4){logger[_0x9a0c('0x15')](_0x9a0c('0x11'),_0x2e9451,_0x5e7280[_0x9a0c('0x15')][_0x9a0c('0x17')]);return _0x595444(_0x5e7280[_0x9a0c('0x15')]['message']);}logger[_0x9a0c('0x15')](_0x9a0c('0x11'),_0x2e9451,_0x5e7280[_0x9a0c('0x15')][_0x9a0c('0x17')]);return _0x2201de(_0x5e7280[_0x9a0c('0x15')][_0x9a0c('0x17')]);}else{logger['info'](_0x9a0c('0x11'),_0x2e9451,_0x9a0c('0x12'));_0x2201de(_0x5e7280[_0x9a0c('0x18')][_0x9a0c('0x17')]);}})['catch'](function(_0x1cc22f){logger[_0x9a0c('0x15')](_0x9a0c('0x11'),_0x2e9451,_0x1cc22f);_0x595444(_0x1cc22f);});});}
\ No newline at end of file
index 83a85ca..3de7999 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x59e9=['save','removeListener','register','length','chatInternalMessage:','./chatInternalMessage.events'];(function(_0x3a7257,_0x30b139){var _0x467d25=function(_0x25f9d1){while(--_0x25f9d1){_0x3a7257['push'](_0x3a7257['shift']());}};_0x467d25(++_0x30b139);}(_0x59e9,0x17f));var _0x959e=function(_0x4d1b96,_0x9739a3){_0x4d1b96=_0x4d1b96-0x0;var _0x5bf6c7=_0x59e9[_0x4d1b96];return _0x5bf6c7;};'use strict';var ChatInternalMessageEvents=require(_0x959e('0x0'));var events=[_0x959e('0x1'),'remove','update'];function createListener(_0x82bda6,_0x5735b5){return function(_0x579eb0){_0x5735b5['emit'](_0x82bda6,_0x579eb0);};}function removeListener(_0xc4362b,_0x4a9f9f){return function(){ChatInternalMessageEvents[_0x959e('0x2')](_0xc4362b,_0x4a9f9f);};}exports[_0x959e('0x3')]=function(_0x5f322b){for(var _0x5a566a=0x0,_0x1551f9=events[_0x959e('0x4')];_0x5a566a<_0x1551f9;_0x5a566a++){var _0x388b10=events[_0x5a566a];var _0x392c1b=createListener(_0x959e('0x5')+_0x388b10,_0x5f322b);ChatInternalMessageEvents['on'](_0x388b10,_0x392c1b);}};
\ No newline at end of file
+var _0x5e53=['chatInternalMessage:','save','remove','update','emit','removeListener','register'];(function(_0xc7348b,_0x145880){var _0x307cec=function(_0x4f1554){while(--_0x4f1554){_0xc7348b['push'](_0xc7348b['shift']());}};_0x307cec(++_0x145880);}(_0x5e53,0xb0));var _0x35e5=function(_0x324d61,_0x16492a){_0x324d61=_0x324d61-0x0;var _0x2767e6=_0x5e53[_0x324d61];return _0x2767e6;};'use strict';var ChatInternalMessageEvents=require('./chatInternalMessage.events');var events=[_0x35e5('0x0'),_0x35e5('0x1'),_0x35e5('0x2')];function createListener(_0x455d99,_0x473147){return function(_0x4de9fb){_0x473147[_0x35e5('0x3')](_0x455d99,_0x4de9fb);};}function removeListener(_0x139e87,_0x572dc0){return function(){ChatInternalMessageEvents[_0x35e5('0x4')](_0x139e87,_0x572dc0);};}exports[_0x35e5('0x5')]=function(_0x2c7382){for(var _0x315276=0x0,_0x473304=events['length'];_0x315276<_0x473304;_0x315276++){var _0x1574b7=events[_0x315276];var _0x2aae92=createListener(_0x35e5('0x6')+_0x1574b7,_0x2c7382);ChatInternalMessageEvents['on'](_0x1574b7,_0x2aae92);}};
\ No newline at end of file
index 46389f5..12398b0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3912=['getUsers','/:id','post','create','put','update','delete','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatInternalMessage.controller','get','isAuthenticated','index','/describe','describe','/users'];(function(_0x5673e2,_0x53ac9e){var _0x76611a=function(_0x2a17af){while(--_0x2a17af){_0x5673e2['push'](_0x5673e2['shift']());}};_0x76611a(++_0x53ac9e);}(_0x3912,0xa9));var _0x2391=function(_0x3800c3,_0x3a5c6f){_0x3800c3=_0x3800c3-0x0;var _0x590af4=_0x3912[_0x3800c3];return _0x590af4;};'use strict';var multer=require(_0x2391('0x0'));var util=require(_0x2391('0x1'));var path=require('path');var timeout=require(_0x2391('0x2'));var express=require(_0x2391('0x3'));var router=express[_0x2391('0x4')]();var auth=require(_0x2391('0x5'));var interaction=require(_0x2391('0x6'));var config=require(_0x2391('0x7'));var controller=require(_0x2391('0x8'));router[_0x2391('0x9')]('/',auth[_0x2391('0xa')](),controller[_0x2391('0xb')]);router[_0x2391('0x9')](_0x2391('0xc'),auth[_0x2391('0xa')](),controller[_0x2391('0xd')]);router[_0x2391('0x9')](_0x2391('0xe'),auth[_0x2391('0xa')](),controller[_0x2391('0xf')]);router[_0x2391('0x9')](_0x2391('0x10'),auth[_0x2391('0xa')](),controller['show']);router[_0x2391('0x11')]('/',auth[_0x2391('0xa')](),controller[_0x2391('0x12')]);router[_0x2391('0x13')](_0x2391('0x10'),controller[_0x2391('0x14')]);router[_0x2391('0x15')](_0x2391('0x10'),auth[_0x2391('0xa')](),controller['destroy']);module[_0x2391('0x16')]=router;
\ No newline at end of file
+var _0xc69b=['Router','../../components/auth/service','../../config/environment','isAuthenticated','index','/describe','describe','/users','getUsers','get','/:id','show','post','create','put','update','delete','exports','multer','path','express'];(function(_0x33cab0,_0x4dc044){var _0x4fbfb7=function(_0x4afd02){while(--_0x4afd02){_0x33cab0['push'](_0x33cab0['shift']());}};_0x4fbfb7(++_0x4dc044);}(_0xc69b,0xcf));var _0xbc69=function(_0x3dc68d,_0x1c1951){_0x3dc68d=_0x3dc68d-0x0;var _0xdf7f94=_0xc69b[_0x3dc68d];return _0xdf7f94;};'use strict';var multer=require(_0xbc69('0x0'));var util=require('util');var path=require(_0xbc69('0x1'));var timeout=require('connect-timeout');var express=require(_0xbc69('0x2'));var router=express[_0xbc69('0x3')]();var auth=require(_0xbc69('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xbc69('0x5'));var controller=require('./chatInternalMessage.controller');router['get']('/',auth[_0xbc69('0x6')](),controller[_0xbc69('0x7')]);router['get'](_0xbc69('0x8'),auth[_0xbc69('0x6')](),controller[_0xbc69('0x9')]);router['get'](_0xbc69('0xa'),auth[_0xbc69('0x6')](),controller[_0xbc69('0xb')]);router[_0xbc69('0xc')](_0xbc69('0xd'),auth['isAuthenticated'](),controller[_0xbc69('0xe')]);router[_0xbc69('0xf')]('/',auth[_0xbc69('0x6')](),controller[_0xbc69('0x10')]);router[_0xbc69('0x11')]('/:id',controller[_0xbc69('0x12')]);router[_0xbc69('0x13')](_0xbc69('0xd'),auth[_0xbc69('0x6')](),controller['destroy']);module[_0xbc69('0x14')]=router;
\ No newline at end of file
index 1462e53..cb0e034 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9308=['medium','BOOLEAN','ENUM','out','sequelize','exports','TEXT'];(function(_0x372d65,_0x4b7d3a){var _0x13a97f=function(_0x5c27a7){while(--_0x5c27a7){_0x372d65['push'](_0x372d65['shift']());}};_0x13a97f(++_0x4b7d3a);}(_0x9308,0x1a8));var _0x8930=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0x9308[_0x3bf83f];return _0x22c4a9;};'use strict';var Sequelize=require(_0x8930('0x0'));module[_0x8930('0x1')]={'body':{'type':Sequelize[_0x8930('0x2')](_0x8930('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0x8930('0x4')],'defaultValue':![]},'secret':{'type':Sequelize[_0x8930('0x4')],'defaultValue':![]},'direction':{'type':Sequelize[_0x8930('0x5')]('in',_0x8930('0x6')),'defaultValue':_0x8930('0x6'),'allowNull':![]},'readAt':{'type':Sequelize['DATE']}};
\ No newline at end of file
+var _0x8a45=['BOOLEAN','out','sequelize','TEXT','medium'];(function(_0x13b6a4,_0x48d6d9){var _0x49ac59=function(_0x177f8c){while(--_0x177f8c){_0x13b6a4['push'](_0x13b6a4['shift']());}};_0x49ac59(++_0x48d6d9);}(_0x8a45,0xc0));var _0x58a4=function(_0x35383e,_0x501f9a){_0x35383e=_0x35383e-0x0;var _0x17b8cd=_0x8a45[_0x35383e];return _0x17b8cd;};'use strict';var Sequelize=require(_0x58a4('0x0'));module['exports']={'body':{'type':Sequelize[_0x58a4('0x1')](_0x58a4('0x2')),'allowNull':![]},'read':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'secret':{'type':Sequelize[_0x58a4('0x3')],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in',_0x58a4('0x4')),'defaultValue':_0x58a4('0x4'),'allowNull':![]},'readAt':{'type':Sequelize['DATE']}};
\ No newline at end of file
index 3325870..537b4ef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfed8=['../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','defaults','localhost','socket.io-emitter','./chatMessage.socket','register','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','info','debug','ChatMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','ChatMessage,\x20%s,\x20%s','result','catch','sendStatus','status','end','offset','limit','set','Content-Range','apply','reject','save','destroy','stack','name','index','ChatMessage','model','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','VIRTUAL','options','count','include','findAll','show','params','keys','includeAll','find','create','body','update','describe','accept','chat','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','Contact','get','ChatInteraction','ChatInteractionId','read1stAt','interaction','[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','AcceptMessage','manual','interface','SIP/%s','channel','event','EventManager','acceptmessage','parse','formData','chat-interactions','agent','[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','null','rejectMessage','rejectmessage','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','mustache','util','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../components/parsers/qs'];(function(_0x1f7e4b,_0x5569cf){var _0x56a6d3=function(_0x505122){while(--_0x505122){_0x1f7e4b['push'](_0x1f7e4b['shift']());}};_0x56a6d3(++_0x5569cf);}(_0xfed8,0x1cf));var _0x8fed=function(_0x54fc4c,_0x329c69){_0x54fc4c=_0x54fc4c-0x0;var _0x1445ff=_0xfed8[_0x54fc4c];return _0x1445ff;};'use strict';var pdf=require(_0x8fed('0x0'));var emlformat=require(_0x8fed('0x1'));var rimraf=require(_0x8fed('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x8fed('0x3'));var moment=require(_0x8fed('0x4'));var BPromise=require(_0x8fed('0x5'));var Mustache=require(_0x8fed('0x6'));var util=require(_0x8fed('0x7'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x8fed('0x8'));var fs=require('fs');var _=require(_0x8fed('0x9'));var squel=require(_0x8fed('0xa'));var crypto=require(_0x8fed('0xb'));var jsforce=require(_0x8fed('0xc'));var deskjs=require(_0x8fed('0xd'));var toCsv=require('to-csv');var querystring=require(_0x8fed('0xe'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x8fed('0xf'));var qs=require(_0x8fed('0x10'));var hardwareService=require(_0x8fed('0x11'));var logger=require(_0x8fed('0x12'))('api');var utils=require(_0x8fed('0x13'));var config=require(_0x8fed('0x14'));var db=require(_0x8fed('0x15'))['db'];config['redis']=_[_0x8fed('0x16')](config['redis'],{'host':_0x8fed('0x17'),'port':0x18eb});var socket=require(_0x8fed('0x18'))(new Redis(config['redis']));require(_0x8fed('0x19'))[_0x8fed('0x1a')](socket);var jayson=require('jayson/promise');var client=jayson[_0x8fed('0x1b')][_0x8fed('0x1c')]({'port':0x232c});var client9002=jayson[_0x8fed('0x1b')][_0x8fed('0x1c')]({'port':0x232a});function checkPasswordPattern(_0x2a55b0,_0x5669c9,_0x5ab4e2){if(_0x5ab4e2){var _0x2a36e7=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2a36e7['test'](_0x5669c9)){return _0x2a55b0;}else{throw new Error(_0x8fed('0x1d'));}}else{return _0x2a55b0;}}function respondWithRpcPromise(_0x58b083,_0x3ddaf0,_0x56a1bc,_0x558dd7){return new BPromise(function(_0x414a95,_0x1a80db){var _0x3047e6=_0x558dd7||client;return _0x3047e6['request'](_0x58b083,_0x56a1bc)[_0x8fed('0x1e')](function(_0x3d7826){logger[_0x8fed('0x1f')]('ChatMessage,\x20%s,\x20%s',_0x3ddaf0,'request\x20sent');logger[_0x8fed('0x20')](_0x8fed('0x21'),_0x3ddaf0,_0x8fed('0x22'),JSON[_0x8fed('0x23')](_0x3d7826));if(_0x3d7826[_0x8fed('0x24')]){if(_0x3d7826[_0x8fed('0x24')][_0x8fed('0x25')]===0x1f4){logger['error']('ChatMessage,\x20%s,\x20%s',_0x3ddaf0,_0x3d7826['error'][_0x8fed('0x26')]);return _0x1a80db(_0x3d7826[_0x8fed('0x24')][_0x8fed('0x26')]);}logger['error'](_0x8fed('0x27'),_0x3ddaf0,_0x3d7826[_0x8fed('0x24')][_0x8fed('0x26')]);return _0x414a95(_0x3d7826[_0x8fed('0x24')][_0x8fed('0x26')]);}else{logger['info'](_0x8fed('0x27'),_0x3ddaf0,_0x8fed('0x22'));_0x414a95(_0x3d7826[_0x8fed('0x28')][_0x8fed('0x26')]);}})[_0x8fed('0x29')](function(_0x43638b){logger[_0x8fed('0x24')](_0x8fed('0x27'),_0x3ddaf0,_0x43638b);_0x1a80db(_0x43638b);});});}function respondWithStatusCode(_0x5bd8d8,_0x50162e){_0x50162e=_0x50162e||0xcc;return function(_0x2b0810){if(_0x2b0810){return _0x5bd8d8[_0x8fed('0x2a')](_0x50162e);}return _0x5bd8d8[_0x8fed('0x2b')](_0x50162e)[_0x8fed('0x2c')]();};}function respondWithResult(_0x306fda,_0x160130){_0x160130=_0x160130||0xc8;return function(_0x1ea922){if(_0x1ea922){return _0x306fda[_0x8fed('0x2b')](_0x160130)['json'](_0x1ea922);}};}function respondWithFilteredResult(_0x569805,_0x323fae){return function(_0xeb7a32){if(_0xeb7a32){var _0x176916=_0xeb7a32['count'],_0x37714f=_0x323fae[_0x8fed('0x2d')],_0x50371d=_0x323fae[_0x8fed('0x2d')]+_0x323fae[_0x8fed('0x2e')],_0x53fe81;if(_0x50371d>=_0x176916){_0x50371d=_0x176916;_0x53fe81=0xc8;}else{_0x53fe81=0xce;}_0x569805['status'](_0x53fe81);return _0x569805[_0x8fed('0x2f')](_0x8fed('0x30'),_0x37714f+'-'+_0x50371d+'/'+_0x176916)['json'](_0xeb7a32);}return null;};}function patchUpdates(_0x561d42){return function(_0x1d3ef5){try{jsonpatch[_0x8fed('0x31')](_0x1d3ef5,_0x561d42,!![]);}catch(_0x4f6abd){return BPromise[_0x8fed('0x32')](_0x4f6abd);}return _0x1d3ef5[_0x8fed('0x33')]();};}function saveUpdates(_0x4c8618,_0x9c069c){return function(_0x19c3d6){if(_0x19c3d6){return _0x19c3d6['update'](_0x4c8618)[_0x8fed('0x1e')](function(_0x3f9013){return _0x3f9013;});}return null;};}function removeEntity(_0x496878,_0x25ed09){return function(_0xb135d8){if(_0xb135d8){return _0xb135d8[_0x8fed('0x34')]()['then'](function(){_0x496878[_0x8fed('0x2b')](0xcc)[_0x8fed('0x2c')]();});}};}function handleEntityNotFound(_0x25e738,_0x417022){return function(_0x4335e8){if(!_0x4335e8){_0x25e738[_0x8fed('0x2a')](0x194);}return _0x4335e8;};}function handleError(_0x3846d2,_0x265713){_0x265713=_0x265713||0x1f4;return function(_0x44e158){logger[_0x8fed('0x24')](_0x44e158[_0x8fed('0x35')]);if(_0x44e158[_0x8fed('0x36')]){delete _0x44e158['name'];}_0x3846d2[_0x8fed('0x2b')](_0x265713)['send'](_0x44e158);};}exports[_0x8fed('0x37')]=function(_0x1732e9,_0x90c418){var _0xe173d6={},_0x4c72cb={},_0x1a53df={'count':0x0,'rows':[]};var _0x532c8d=db[_0x8fed('0x38')]['rawAttributes'];_0x4c72cb[_0x8fed('0x39')]=_['keys'](_0x532c8d);_0x4c72cb[_0x8fed('0x3a')]=_['keys'](_0x1732e9[_0x8fed('0x3a')]);_0x4c72cb[_0x8fed('0x3b')]=_[_0x8fed('0x3c')](_0x4c72cb['model'],_0x4c72cb[_0x8fed('0x3a')]);_0xe173d6[_0x8fed('0x3d')]=_[_0x8fed('0x3c')](_0x4c72cb[_0x8fed('0x39')],qs['fields'](_0x1732e9[_0x8fed('0x3a')][_0x8fed('0x3e')]));_0xe173d6[_0x8fed('0x3d')]=_0xe173d6[_0x8fed('0x3d')][_0x8fed('0x3f')]?_0xe173d6[_0x8fed('0x3d')]:_0x4c72cb[_0x8fed('0x39')];if(!_0x1732e9[_0x8fed('0x3a')][_0x8fed('0x40')](_0x8fed('0x41'))){_0xe173d6[_0x8fed('0x2e')]=qs[_0x8fed('0x2e')](_0x1732e9[_0x8fed('0x3a')][_0x8fed('0x2e')]);_0xe173d6[_0x8fed('0x2d')]=qs[_0x8fed('0x2d')](_0x1732e9[_0x8fed('0x3a')][_0x8fed('0x2d')]);}_0xe173d6[_0x8fed('0x42')]=qs[_0x8fed('0x43')](_0x1732e9[_0x8fed('0x3a')]['sort']);_0xe173d6[_0x8fed('0x44')]=qs[_0x8fed('0x3b')](_[_0x8fed('0x45')](_0x1732e9[_0x8fed('0x3a')],_0x4c72cb['filters']));if(_0x1732e9[_0x8fed('0x3a')][_0x8fed('0x46')]){_0xe173d6[_0x8fed('0x44')]=_[_0x8fed('0x47')](_0xe173d6[_0x8fed('0x44')],{'$or':_[_0x8fed('0x48')](_0x532c8d,function(_0x57e515){if(_0x57e515[_0x8fed('0x49')]['key']!==_0x8fed('0x4a')){var _0x1ae30d={};_0x1ae30d[_0x57e515['field']]={'$like':'%'+_0x1732e9[_0x8fed('0x3a')][_0x8fed('0x46')]+'%'};return _0x1ae30d;}})});}_0xe173d6=_[_0x8fed('0x47')]({},_0xe173d6,_0x1732e9[_0x8fed('0x4b')]);var _0x17b5d1={'where':_0xe173d6[_0x8fed('0x44')]};return db[_0x8fed('0x38')][_0x8fed('0x4c')](_0x17b5d1)[_0x8fed('0x1e')](function(_0x3b9aca){_0x1a53df[_0x8fed('0x4c')]=_0x3b9aca;if(_0x1732e9[_0x8fed('0x3a')]['includeAll']){_0xe173d6[_0x8fed('0x4d')]=[{'all':!![]}];}return db['ChatMessage'][_0x8fed('0x4e')](_0xe173d6);})[_0x8fed('0x1e')](function(_0x502404){_0x1a53df['rows']=_0x502404;return _0x1a53df;})[_0x8fed('0x1e')](respondWithFilteredResult(_0x90c418,_0xe173d6))[_0x8fed('0x29')](handleError(_0x90c418,null));};exports[_0x8fed('0x4f')]=function(_0x375081,_0xcf052d){var _0x2759be={'raw':!![],'where':{'id':_0x375081[_0x8fed('0x50')]['id']}},_0x19d180={};_0x19d180['model']=_[_0x8fed('0x51')](db[_0x8fed('0x38')]['rawAttributes']);_0x19d180[_0x8fed('0x3a')]=_['keys'](_0x375081[_0x8fed('0x3a')]);_0x19d180[_0x8fed('0x3b')]=_[_0x8fed('0x3c')](_0x19d180[_0x8fed('0x39')],_0x19d180[_0x8fed('0x3a')]);_0x2759be[_0x8fed('0x3d')]=_[_0x8fed('0x3c')](_0x19d180[_0x8fed('0x39')],qs[_0x8fed('0x3e')](_0x375081[_0x8fed('0x3a')]['fields']));_0x2759be[_0x8fed('0x3d')]=_0x2759be[_0x8fed('0x3d')][_0x8fed('0x3f')]?_0x2759be[_0x8fed('0x3d')]:_0x19d180[_0x8fed('0x39')];if(_0x375081[_0x8fed('0x3a')][_0x8fed('0x52')]){_0x2759be[_0x8fed('0x4d')]=[{'all':!![]}];}_0x2759be=_[_0x8fed('0x47')]({},_0x2759be,_0x375081[_0x8fed('0x4b')]);return db[_0x8fed('0x38')][_0x8fed('0x53')](_0x2759be)[_0x8fed('0x1e')](handleEntityNotFound(_0xcf052d,null))['then'](respondWithResult(_0xcf052d,null))[_0x8fed('0x29')](handleError(_0xcf052d,null));};exports['create']=function(_0x3bc6d4,_0x1729a1){return db['ChatMessage'][_0x8fed('0x54')](_0x3bc6d4[_0x8fed('0x55')],{})['then'](respondWithResult(_0x1729a1,0xc9))[_0x8fed('0x29')](handleError(_0x1729a1,null));};exports[_0x8fed('0x56')]=function(_0x2fc0cd,_0x5327da){if(_0x2fc0cd[_0x8fed('0x55')]['id']){delete _0x2fc0cd[_0x8fed('0x55')]['id'];}return db[_0x8fed('0x38')]['find']({'where':{'id':_0x2fc0cd[_0x8fed('0x50')]['id']}})[_0x8fed('0x1e')](handleEntityNotFound(_0x5327da,null))[_0x8fed('0x1e')](saveUpdates(_0x2fc0cd[_0x8fed('0x55')],null))[_0x8fed('0x1e')](respondWithResult(_0x5327da,null))[_0x8fed('0x29')](handleError(_0x5327da,null));};exports['destroy']=function(_0x432de3,_0x12dfd8){return db[_0x8fed('0x38')][_0x8fed('0x53')]({'where':{'id':_0x432de3[_0x8fed('0x50')]['id']}})[_0x8fed('0x1e')](handleEntityNotFound(_0x12dfd8,null))['then'](removeEntity(_0x12dfd8,null))[_0x8fed('0x29')](handleError(_0x12dfd8,null));};exports['describe']=function(_0x11ad71,_0x161bb8){return db[_0x8fed('0x38')][_0x8fed('0x57')]()[_0x8fed('0x1e')](respondWithResult(_0x161bb8,null))[_0x8fed('0x29')](handleError(_0x161bb8,null));};var interaction_log=require(_0x8fed('0x12'))('chat-interactions');exports[_0x8fed('0x58')]=function(_0x26ef54,_0x283880,_0x13cda0){var _0x4566ad={'channel':_0x8fed('0x59')};if(_0x26ef54[_0x8fed('0x55')]['id']){delete _0x26ef54[_0x8fed('0x55')]['id'];}_0x26ef54['body'][_0x8fed('0x5a')]=!![];_0x26ef54[_0x8fed('0x55')][_0x8fed('0x5b')]=moment()[_0x8fed('0x5c')](_0x8fed('0x5d'));_0x26ef54[_0x8fed('0x55')][_0x8fed('0x5e')]=_0x26ef54['body'][_0x8fed('0x5e')]||_0x26ef54[_0x8fed('0x5f')]['id'];return db[_0x8fed('0x38')][_0x8fed('0x53')]({'where':{'id':_0x26ef54['params']['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0x8fed('0x60')}]})[_0x8fed('0x1e')](handleEntityNotFound(_0x283880,null))[_0x8fed('0x1e')](saveUpdates(_0x26ef54[_0x8fed('0x55')],null))[_0x8fed('0x1e')](function(_0x4c3909){if(_0x4c3909){_0x4566ad[_0x8fed('0x26')]=_0x4c3909[_0x8fed('0x61')]({'plain':!![]});return db[_0x8fed('0x62')]['find']({'where':{'id':_0x4c3909[_0x8fed('0x63')]}});}return null;})[_0x8fed('0x1e')](handleEntityNotFound(_0x283880,null))[_0x8fed('0x1e')](function(_0x380369){if(_0x380369){return _0x380369['update']({'UserId':_0x26ef54[_0x8fed('0x55')]['UserId'],'read1stAt':_['isNil'](_0x380369[_0x8fed('0x64')])?moment()[_0x8fed('0x5c')](_0x8fed('0x5d')):undefined});}return null;})[_0x8fed('0x1e')](function(_0x1b8379){if(_0x1b8379){_0x4566ad[_0x8fed('0x65')]=_0x1b8379[_0x8fed('0x61')]({'plain':!![]});interaction_log['info'](_0x8fed('0x66'),_0x26ef54[_0x8fed('0x5f')]['id'],_0x26ef54[_0x8fed('0x5f')][_0x8fed('0x36')],_0x26ef54['user'][_0x8fed('0x67')],_0x4566ad[_0x8fed('0x65')]['id'],_0x26ef54['body']?JSON[_0x8fed('0x23')](_0x26ef54[_0x8fed('0x55')]):'null');return respondWithRpcPromise(_0x8fed('0x68'),'acceptMessage',_0x4566ad);}return null;})['then'](function(_0x414375){if(_0x414375){if(_0x26ef54[_0x8fed('0x55')][_0x8fed('0x69')]){_0x4566ad['message'][_0x8fed('0x6a')]=util[_0x8fed('0x5c')](_0x8fed('0x6b'),_0x26ef54[_0x8fed('0x5f')][_0x8fed('0x36')]);_0x4566ad['message'][_0x8fed('0x6c')]=_0x4566ad[_0x8fed('0x6c')];_0x4566ad['message'][_0x8fed('0x6d')]=_0x8fed('0x58');return respondWithRpcPromise(_0x8fed('0x6e'),'EventManager',{'event':_0x8fed('0x6f'),'message':_['merge'](_0x4566ad[_0x8fed('0x26')],JSON[_0x8fed('0x70')](_0x4566ad[_0x8fed('0x65')][_0x8fed('0x71')]))},client9002)[_0x8fed('0x1e')](function(){return _0x4566ad;});}return _0x4566ad;}return null;})[_0x8fed('0x1e')](respondWithResult(_0x283880,null))['catch'](handleError(_0x283880,null));};var interaction_log=require(_0x8fed('0x12'))(_0x8fed('0x72'));exports[_0x8fed('0x32')]=function(_0x3fd939,_0xd9dd7e,_0x2c9a7b){var _0x1b0e83={'agent':{},'channel':'chat'};if(_0x3fd939['body']['id']){delete _0x3fd939[_0x8fed('0x55')]['id'];}_0x3fd939[_0x8fed('0x55')]['UserId']=_0x3fd939[_0x8fed('0x55')]['UserId']||_0x3fd939[_0x8fed('0x5f')]['id'];_0x1b0e83[_0x8fed('0x73')]['id']=_0x3fd939['body'][_0x8fed('0x5e')];return db[_0x8fed('0x38')][_0x8fed('0x53')]({'where':{'id':_0x3fd939[_0x8fed('0x50')]['id'],'UserId':null}})[_0x8fed('0x1e')](handleEntityNotFound(_0xd9dd7e,null))['then'](function(_0x512073){if(_0x512073){_0x1b0e83[_0x8fed('0x26')]=_0x512073[_0x8fed('0x61')]({'plain':!![]});return db['ChatInteraction'][_0x8fed('0x53')]({'where':{'id':_0x512073['ChatInteractionId']}});}return null;})[_0x8fed('0x1e')](handleEntityNotFound(_0xd9dd7e,null))['then'](function(_0x423163){if(_0x423163){_0x1b0e83[_0x8fed('0x65')]=_0x423163['get']({'plain':!![]});interaction_log[_0x8fed('0x1f')](_0x8fed('0x74'),_0x3fd939['user']['id'],_0x3fd939['user'][_0x8fed('0x36')],_0x3fd939[_0x8fed('0x5f')][_0x8fed('0x67')],_0x1b0e83[_0x8fed('0x65')]['id'],_0x3fd939[_0x8fed('0x55')]?JSON[_0x8fed('0x23')](_0x3fd939[_0x8fed('0x55')]):_0x8fed('0x75'));return respondWithRpcPromise('RejectMessage',_0x8fed('0x76'),_0x1b0e83);}return null;})[_0x8fed('0x1e')](function(_0x46813b){if(_0x46813b){_0x46813b[_0x8fed('0x26')]['interface']=util[_0x8fed('0x5c')](_0x8fed('0x6b'),_0x3fd939[_0x8fed('0x5f')][_0x8fed('0x36')]);_0x46813b[_0x8fed('0x26')][_0x8fed('0x6c')]=_0x1b0e83[_0x8fed('0x6c')];_0x46813b['message'][_0x8fed('0x6d')]='reject';respondWithRpcPromise(_0x8fed('0x6e'),_0x8fed('0x6e'),{'event':_0x8fed('0x77'),'message':_0x46813b['message']},client9002);return _0x1b0e83;}return null;})[_0x8fed('0x1e')](respondWithResult(_0xd9dd7e,null))[_0x8fed('0x29')](handleError(_0xd9dd7e,null));};
\ No newline at end of file
+var _0xd828=['params','rawAttributes','include','find','body','describe','../../config/logger','chat-interactions','chat','readAt','UserId','user','CmContact','Contact','get','ChatInteraction','ChatInteractionId','isNil','format','YYYY-MM-DD\x20HH:mm:ss','interaction','[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','null','AcceptMessage','acceptMessage','manual','interface','channel','accept','EventManager','acceptmessage','formData','[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','rejectMessage','SIP/%s','rejectmessage','html-pdf','eml-format','zip-dir','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','desk.js','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','redis','defaults','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~!@#$%^&-_=+[{]}.','request','then','info','ChatMessage,\x20%s,\x20%s','request\x20sent','debug','ChatMessage,\x20%s,\x20%s,\x20%s','error','code','message','catch','sendStatus','end','json','count','offset','limit','set','Content-Range','apply','reject','update','destroy','status','stack','name','send','index','model','keys','query','intersection','attributes','fields','length','nolimit','order','sort','where','filters','pick','filter','merge','map','type','key','VIRTUAL','options','ChatMessage','findAll','rows'];(function(_0x1fdd09,_0x188de4){var _0x52c681=function(_0x2ac787){while(--_0x2ac787){_0x1fdd09['push'](_0x1fdd09['shift']());}};_0x52c681(++_0x188de4);}(_0xd828,0x116));var _0x8d82=function(_0x5ddfc6,_0x4b8b01){_0x5ddfc6=_0x5ddfc6-0x0;var _0x2bf779=_0xd828[_0x5ddfc6];return _0x2bf779;};'use strict';var pdf=require(_0x8d82('0x0'));var emlformat=require(_0x8d82('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x8d82('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x8d82('0x3'));var BPromise=require(_0x8d82('0x4'));var Mustache=require(_0x8d82('0x5'));var util=require(_0x8d82('0x6'));var path=require(_0x8d82('0x7'));var sox=require('sox');var csv=require(_0x8d82('0x8'));var ejs=require(_0x8d82('0x9'));var fs=require('fs');var _=require(_0x8d82('0xa'));var squel=require(_0x8d82('0xb'));var crypto=require(_0x8d82('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x8d82('0xd'));var toCsv=require(_0x8d82('0x8'));var querystring=require('querystring');var Papa=require(_0x8d82('0xe'));var Redis=require(_0x8d82('0xf'));var authService=require(_0x8d82('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x8d82('0x11'));var logger=require('../../config/logger')(_0x8d82('0x12'));var utils=require(_0x8d82('0x13'));var config=require(_0x8d82('0x14'));var db=require('../../mysqldb')['db'];config[_0x8d82('0x15')]=_[_0x8d82('0x16')](config[_0x8d82('0x15')],{'host':'localhost','port':0x18eb});var socket=require(_0x8d82('0x17'))(new Redis(config['redis']));require(_0x8d82('0x18'))[_0x8d82('0x19')](socket);var jayson=require(_0x8d82('0x1a'));var client=jayson[_0x8d82('0x1b')][_0x8d82('0x1c')]({'port':0x232c});var client9002=jayson['client'][_0x8d82('0x1c')]({'port':0x232a});function checkPasswordPattern(_0x6b9f7b,_0x172462,_0x15da45){if(_0x15da45){var _0x1dbbb3=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1dbbb3[_0x8d82('0x1d')](_0x172462)){return _0x6b9f7b;}else{throw new Error(_0x8d82('0x1e'));}}else{return _0x6b9f7b;}}function respondWithRpcPromise(_0x3805db,_0x511660,_0x1b305a,_0x5a4714){return new BPromise(function(_0x847388,_0x3033d4){var _0xe01991=_0x5a4714||client;return _0xe01991[_0x8d82('0x1f')](_0x3805db,_0x1b305a)[_0x8d82('0x20')](function(_0x18af96){logger[_0x8d82('0x21')](_0x8d82('0x22'),_0x511660,_0x8d82('0x23'));logger[_0x8d82('0x24')](_0x8d82('0x25'),_0x511660,_0x8d82('0x23'),JSON['stringify'](_0x18af96));if(_0x18af96[_0x8d82('0x26')]){if(_0x18af96[_0x8d82('0x26')][_0x8d82('0x27')]===0x1f4){logger[_0x8d82('0x26')](_0x8d82('0x22'),_0x511660,_0x18af96[_0x8d82('0x26')][_0x8d82('0x28')]);return _0x3033d4(_0x18af96[_0x8d82('0x26')]['message']);}logger[_0x8d82('0x26')]('ChatMessage,\x20%s,\x20%s',_0x511660,_0x18af96['error'][_0x8d82('0x28')]);return _0x847388(_0x18af96[_0x8d82('0x26')][_0x8d82('0x28')]);}else{logger[_0x8d82('0x21')](_0x8d82('0x22'),_0x511660,_0x8d82('0x23'));_0x847388(_0x18af96['result'][_0x8d82('0x28')]);}})[_0x8d82('0x29')](function(_0x51acb4){logger[_0x8d82('0x26')](_0x8d82('0x22'),_0x511660,_0x51acb4);_0x3033d4(_0x51acb4);});});}function respondWithStatusCode(_0x269428,_0x2d0ce9){_0x2d0ce9=_0x2d0ce9||0xcc;return function(_0x26ceb0){if(_0x26ceb0){return _0x269428[_0x8d82('0x2a')](_0x2d0ce9);}return _0x269428['status'](_0x2d0ce9)[_0x8d82('0x2b')]();};}function respondWithResult(_0x583875,_0x5ba348){_0x5ba348=_0x5ba348||0xc8;return function(_0x1612a3){if(_0x1612a3){return _0x583875['status'](_0x5ba348)[_0x8d82('0x2c')](_0x1612a3);}};}function respondWithFilteredResult(_0x295d6b,_0x4da160){return function(_0x4dfe27){if(_0x4dfe27){var _0x1a91c6=_0x4dfe27[_0x8d82('0x2d')],_0x46f2cb=_0x4da160[_0x8d82('0x2e')],_0xa9a493=_0x4da160[_0x8d82('0x2e')]+_0x4da160[_0x8d82('0x2f')],_0x797ed8;if(_0xa9a493>=_0x1a91c6){_0xa9a493=_0x1a91c6;_0x797ed8=0xc8;}else{_0x797ed8=0xce;}_0x295d6b['status'](_0x797ed8);return _0x295d6b[_0x8d82('0x30')](_0x8d82('0x31'),_0x46f2cb+'-'+_0xa9a493+'/'+_0x1a91c6)[_0x8d82('0x2c')](_0x4dfe27);}return null;};}function patchUpdates(_0xfb1479){return function(_0x309d97){try{jsonpatch[_0x8d82('0x32')](_0x309d97,_0xfb1479,!![]);}catch(_0x500679){return BPromise[_0x8d82('0x33')](_0x500679);}return _0x309d97['save']();};}function saveUpdates(_0xad1fc5,_0x42f1cc){return function(_0x496b91){if(_0x496b91){return _0x496b91[_0x8d82('0x34')](_0xad1fc5)['then'](function(_0xe3a543){return _0xe3a543;});}return null;};}function removeEntity(_0x27a275,_0x22f76e){return function(_0x3876e5){if(_0x3876e5){return _0x3876e5[_0x8d82('0x35')]()[_0x8d82('0x20')](function(){_0x27a275[_0x8d82('0x36')](0xcc)[_0x8d82('0x2b')]();});}};}function handleEntityNotFound(_0xf98d5d,_0x28d0bb){return function(_0xd2e5f2){if(!_0xd2e5f2){_0xf98d5d[_0x8d82('0x2a')](0x194);}return _0xd2e5f2;};}function handleError(_0x375bb9,_0x244113){_0x244113=_0x244113||0x1f4;return function(_0x2b8131){logger[_0x8d82('0x26')](_0x2b8131[_0x8d82('0x37')]);if(_0x2b8131[_0x8d82('0x38')]){delete _0x2b8131[_0x8d82('0x38')];}_0x375bb9[_0x8d82('0x36')](_0x244113)[_0x8d82('0x39')](_0x2b8131);};}exports[_0x8d82('0x3a')]=function(_0x13b213,_0x24739e){var _0x1db252={},_0x5c32bd={},_0x25c750={'count':0x0,'rows':[]};var _0x5228dd=db['ChatMessage']['rawAttributes'];_0x5c32bd[_0x8d82('0x3b')]=_[_0x8d82('0x3c')](_0x5228dd);_0x5c32bd['query']=_['keys'](_0x13b213[_0x8d82('0x3d')]);_0x5c32bd['filters']=_[_0x8d82('0x3e')](_0x5c32bd[_0x8d82('0x3b')],_0x5c32bd['query']);_0x1db252[_0x8d82('0x3f')]=_['intersection'](_0x5c32bd[_0x8d82('0x3b')],qs[_0x8d82('0x40')](_0x13b213[_0x8d82('0x3d')][_0x8d82('0x40')]));_0x1db252['attributes']=_0x1db252[_0x8d82('0x3f')][_0x8d82('0x41')]?_0x1db252[_0x8d82('0x3f')]:_0x5c32bd['model'];if(!_0x13b213[_0x8d82('0x3d')]['hasOwnProperty'](_0x8d82('0x42'))){_0x1db252['limit']=qs[_0x8d82('0x2f')](_0x13b213[_0x8d82('0x3d')][_0x8d82('0x2f')]);_0x1db252['offset']=qs['offset'](_0x13b213[_0x8d82('0x3d')][_0x8d82('0x2e')]);}_0x1db252[_0x8d82('0x43')]=qs[_0x8d82('0x44')](_0x13b213[_0x8d82('0x3d')][_0x8d82('0x44')]);_0x1db252[_0x8d82('0x45')]=qs[_0x8d82('0x46')](_[_0x8d82('0x47')](_0x13b213[_0x8d82('0x3d')],_0x5c32bd[_0x8d82('0x46')]));if(_0x13b213['query'][_0x8d82('0x48')]){_0x1db252[_0x8d82('0x45')]=_[_0x8d82('0x49')](_0x1db252['where'],{'$or':_[_0x8d82('0x4a')](_0x5228dd,function(_0x19cac8){if(_0x19cac8[_0x8d82('0x4b')][_0x8d82('0x4c')]!==_0x8d82('0x4d')){var _0x52cb19={};_0x52cb19[_0x19cac8['field']]={'$like':'%'+_0x13b213[_0x8d82('0x3d')][_0x8d82('0x48')]+'%'};return _0x52cb19;}})});}_0x1db252=_[_0x8d82('0x49')]({},_0x1db252,_0x13b213[_0x8d82('0x4e')]);var _0x47b72c={'where':_0x1db252[_0x8d82('0x45')]};return db['ChatMessage'][_0x8d82('0x2d')](_0x47b72c)['then'](function(_0x314ea4){_0x25c750[_0x8d82('0x2d')]=_0x314ea4;if(_0x13b213[_0x8d82('0x3d')]['includeAll']){_0x1db252['include']=[{'all':!![]}];}return db[_0x8d82('0x4f')][_0x8d82('0x50')](_0x1db252);})[_0x8d82('0x20')](function(_0x1facf1){_0x25c750[_0x8d82('0x51')]=_0x1facf1;return _0x25c750;})[_0x8d82('0x20')](respondWithFilteredResult(_0x24739e,_0x1db252))['catch'](handleError(_0x24739e,null));};exports['show']=function(_0x1d9752,_0x192745){var _0x3bc9ae={'raw':!![],'where':{'id':_0x1d9752[_0x8d82('0x52')]['id']}},_0x307274={};_0x307274[_0x8d82('0x3b')]=_[_0x8d82('0x3c')](db[_0x8d82('0x4f')][_0x8d82('0x53')]);_0x307274[_0x8d82('0x3d')]=_['keys'](_0x1d9752[_0x8d82('0x3d')]);_0x307274[_0x8d82('0x46')]=_[_0x8d82('0x3e')](_0x307274[_0x8d82('0x3b')],_0x307274[_0x8d82('0x3d')]);_0x3bc9ae[_0x8d82('0x3f')]=_[_0x8d82('0x3e')](_0x307274[_0x8d82('0x3b')],qs['fields'](_0x1d9752[_0x8d82('0x3d')][_0x8d82('0x40')]));_0x3bc9ae[_0x8d82('0x3f')]=_0x3bc9ae[_0x8d82('0x3f')]['length']?_0x3bc9ae[_0x8d82('0x3f')]:_0x307274[_0x8d82('0x3b')];if(_0x1d9752[_0x8d82('0x3d')]['includeAll']){_0x3bc9ae[_0x8d82('0x54')]=[{'all':!![]}];}_0x3bc9ae=_['merge']({},_0x3bc9ae,_0x1d9752['options']);return db['ChatMessage'][_0x8d82('0x55')](_0x3bc9ae)[_0x8d82('0x20')](handleEntityNotFound(_0x192745,null))[_0x8d82('0x20')](respondWithResult(_0x192745,null))[_0x8d82('0x29')](handleError(_0x192745,null));};exports['create']=function(_0xccc452,_0x3018b2){return db['ChatMessage']['create'](_0xccc452[_0x8d82('0x56')],{})[_0x8d82('0x20')](respondWithResult(_0x3018b2,0xc9))['catch'](handleError(_0x3018b2,null));};exports[_0x8d82('0x34')]=function(_0x416275,_0x2efe13){if(_0x416275['body']['id']){delete _0x416275['body']['id'];}return db[_0x8d82('0x4f')][_0x8d82('0x55')]({'where':{'id':_0x416275[_0x8d82('0x52')]['id']}})[_0x8d82('0x20')](handleEntityNotFound(_0x2efe13,null))[_0x8d82('0x20')](saveUpdates(_0x416275[_0x8d82('0x56')],null))[_0x8d82('0x20')](respondWithResult(_0x2efe13,null))[_0x8d82('0x29')](handleError(_0x2efe13,null));};exports[_0x8d82('0x35')]=function(_0x34c3f3,_0x3bc787){return db[_0x8d82('0x4f')][_0x8d82('0x55')]({'where':{'id':_0x34c3f3[_0x8d82('0x52')]['id']}})[_0x8d82('0x20')](handleEntityNotFound(_0x3bc787,null))[_0x8d82('0x20')](removeEntity(_0x3bc787,null))[_0x8d82('0x29')](handleError(_0x3bc787,null));};exports[_0x8d82('0x57')]=function(_0x3cfd2f,_0x4d0366){return db[_0x8d82('0x4f')][_0x8d82('0x57')]()[_0x8d82('0x20')](respondWithResult(_0x4d0366,null))[_0x8d82('0x29')](handleError(_0x4d0366,null));};var interaction_log=require(_0x8d82('0x58'))(_0x8d82('0x59'));exports['accept']=function(_0x460ea7,_0x13204d,_0x529cde){var _0x5a4776={'channel':_0x8d82('0x5a')};if(_0x460ea7[_0x8d82('0x56')]['id']){delete _0x460ea7[_0x8d82('0x56')]['id'];}_0x460ea7['body']['read']=!![];_0x460ea7[_0x8d82('0x56')][_0x8d82('0x5b')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');_0x460ea7[_0x8d82('0x56')][_0x8d82('0x5c')]=_0x460ea7[_0x8d82('0x56')][_0x8d82('0x5c')]||_0x460ea7[_0x8d82('0x5d')]['id'];return db[_0x8d82('0x4f')][_0x8d82('0x55')]({'where':{'id':_0x460ea7[_0x8d82('0x52')]['id'],'UserId':null},'include':[{'model':db[_0x8d82('0x5e')],'as':_0x8d82('0x5f')}]})[_0x8d82('0x20')](handleEntityNotFound(_0x13204d,null))[_0x8d82('0x20')](saveUpdates(_0x460ea7[_0x8d82('0x56')],null))[_0x8d82('0x20')](function(_0x52450d){if(_0x52450d){_0x5a4776[_0x8d82('0x28')]=_0x52450d[_0x8d82('0x60')]({'plain':!![]});return db[_0x8d82('0x61')][_0x8d82('0x55')]({'where':{'id':_0x52450d[_0x8d82('0x62')]}});}return null;})[_0x8d82('0x20')](handleEntityNotFound(_0x13204d,null))[_0x8d82('0x20')](function(_0xcb8bb3){if(_0xcb8bb3){return _0xcb8bb3['update']({'UserId':_0x460ea7[_0x8d82('0x56')]['UserId'],'read1stAt':_[_0x8d82('0x63')](_0xcb8bb3['read1stAt'])?moment()[_0x8d82('0x64')](_0x8d82('0x65')):undefined});}return null;})[_0x8d82('0x20')](function(_0x52f81c){if(_0x52f81c){_0x5a4776[_0x8d82('0x66')]=_0x52f81c[_0x8d82('0x60')]({'plain':!![]});interaction_log[_0x8d82('0x21')](_0x8d82('0x67'),_0x460ea7['user']['id'],_0x460ea7[_0x8d82('0x5d')][_0x8d82('0x38')],_0x460ea7[_0x8d82('0x5d')][_0x8d82('0x68')],_0x5a4776[_0x8d82('0x66')]['id'],_0x460ea7[_0x8d82('0x56')]?JSON['stringify'](_0x460ea7[_0x8d82('0x56')]):_0x8d82('0x69'));return respondWithRpcPromise(_0x8d82('0x6a'),_0x8d82('0x6b'),_0x5a4776);}return null;})[_0x8d82('0x20')](function(_0x48355b){if(_0x48355b){if(_0x460ea7['body'][_0x8d82('0x6c')]){_0x5a4776['message'][_0x8d82('0x6d')]=util[_0x8d82('0x64')]('SIP/%s',_0x460ea7[_0x8d82('0x5d')][_0x8d82('0x38')]);_0x5a4776[_0x8d82('0x28')][_0x8d82('0x6e')]=_0x5a4776[_0x8d82('0x6e')];_0x5a4776[_0x8d82('0x28')]['event']=_0x8d82('0x6f');return respondWithRpcPromise(_0x8d82('0x70'),_0x8d82('0x70'),{'event':_0x8d82('0x71'),'message':_['merge'](_0x5a4776[_0x8d82('0x28')],JSON['parse'](_0x5a4776['interaction'][_0x8d82('0x72')]))},client9002)[_0x8d82('0x20')](function(){return _0x5a4776;});}return _0x5a4776;}return null;})[_0x8d82('0x20')](respondWithResult(_0x13204d,null))[_0x8d82('0x29')](handleError(_0x13204d,null));};var interaction_log=require(_0x8d82('0x58'))(_0x8d82('0x59'));exports[_0x8d82('0x33')]=function(_0x281496,_0x459cec,_0x350720){var _0x265dd1={'agent':{},'channel':_0x8d82('0x5a')};if(_0x281496[_0x8d82('0x56')]['id']){delete _0x281496[_0x8d82('0x56')]['id'];}_0x281496['body'][_0x8d82('0x5c')]=_0x281496[_0x8d82('0x56')][_0x8d82('0x5c')]||_0x281496[_0x8d82('0x5d')]['id'];_0x265dd1['agent']['id']=_0x281496[_0x8d82('0x56')][_0x8d82('0x5c')];return db['ChatMessage'][_0x8d82('0x55')]({'where':{'id':_0x281496['params']['id'],'UserId':null}})[_0x8d82('0x20')](handleEntityNotFound(_0x459cec,null))[_0x8d82('0x20')](function(_0x14c0dc){if(_0x14c0dc){_0x265dd1[_0x8d82('0x28')]=_0x14c0dc[_0x8d82('0x60')]({'plain':!![]});return db[_0x8d82('0x61')][_0x8d82('0x55')]({'where':{'id':_0x14c0dc[_0x8d82('0x62')]}});}return null;})[_0x8d82('0x20')](handleEntityNotFound(_0x459cec,null))[_0x8d82('0x20')](function(_0x3e8189){if(_0x3e8189){_0x265dd1['interaction']=_0x3e8189[_0x8d82('0x60')]({'plain':!![]});interaction_log[_0x8d82('0x21')](_0x8d82('0x73'),_0x281496[_0x8d82('0x5d')]['id'],_0x281496[_0x8d82('0x5d')][_0x8d82('0x38')],_0x281496[_0x8d82('0x5d')]['role'],_0x265dd1['interaction']['id'],_0x281496[_0x8d82('0x56')]?JSON['stringify'](_0x281496[_0x8d82('0x56')]):_0x8d82('0x69'));return respondWithRpcPromise(_0x8d82('0x74'),_0x8d82('0x75'),_0x265dd1);}return null;})[_0x8d82('0x20')](function(_0x58af81){if(_0x58af81){_0x58af81[_0x8d82('0x28')][_0x8d82('0x6d')]=util[_0x8d82('0x64')](_0x8d82('0x76'),_0x281496['user'][_0x8d82('0x38')]);_0x58af81[_0x8d82('0x28')][_0x8d82('0x6e')]=_0x265dd1[_0x8d82('0x6e')];_0x58af81[_0x8d82('0x28')]['event']=_0x8d82('0x33');respondWithRpcPromise(_0x8d82('0x70'),_0x8d82('0x70'),{'event':_0x8d82('0x77'),'message':_0x58af81[_0x8d82('0x28')]},client9002);return _0x265dd1;}return null;})['then'](respondWithResult(_0x459cec,null))[_0x8d82('0x29')](handleError(_0x459cec,null));};
\ No newline at end of file
index 82f7281..01923e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbcff=['update','remove','emit','hasOwnProperty','exports','events','../../mysqldb','ChatMessage','save'];(function(_0x81dcac,_0x8ff7db){var _0xc7803b=function(_0x499b29){while(--_0x499b29){_0x81dcac['push'](_0x81dcac['shift']());}};_0xc7803b(++_0x8ff7db);}(_0xbcff,0x12e));var _0xfbcf=function(_0x226d61,_0x840bc5){_0x226d61=_0x226d61-0x0;var _0x596ac4=_0xbcff[_0x226d61];return _0x596ac4;};'use strict';var EventEmitter=require(_0xfbcf('0x0'));var ChatMessage=require(_0xfbcf('0x1'))['db'][_0xfbcf('0x2')];var ChatMessageEvents=new EventEmitter();ChatMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xfbcf('0x3'),'afterUpdate':_0xfbcf('0x4'),'afterDestroy':_0xfbcf('0x5')};function emitEvent(_0x59bc8b){return function(_0xec50b1,_0x24bf8a,_0x51d140){ChatMessageEvents['emit'](_0x59bc8b+':'+_0xec50b1['id'],_0xec50b1);ChatMessageEvents[_0xfbcf('0x6')](_0x59bc8b,_0xec50b1);_0x51d140(null);};}for(var e in events){if(events[_0xfbcf('0x7')](e)){var event=events[e];ChatMessage['hook'](e,emitEvent(event));}}module[_0xfbcf('0x8')]=ChatMessageEvents;
\ No newline at end of file
+var _0x4c50=['save','update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','ChatMessage','setMaxListeners'];(function(_0x5bc76d,_0x3e2d1a){var _0x5dccab=function(_0x235fb3){while(--_0x235fb3){_0x5bc76d['push'](_0x5bc76d['shift']());}};_0x5dccab(++_0x3e2d1a);}(_0x4c50,0x10f));var _0x04c5=function(_0x57a442,_0x3f95a7){_0x57a442=_0x57a442-0x0;var _0x182abd=_0x4c50[_0x57a442];return _0x182abd;};'use strict';var EventEmitter=require(_0x04c5('0x0'));var ChatMessage=require(_0x04c5('0x1'))['db'][_0x04c5('0x2')];var ChatMessageEvents=new EventEmitter();ChatMessageEvents[_0x04c5('0x3')](0x0);var events={'afterCreate':_0x04c5('0x4'),'afterUpdate':_0x04c5('0x5'),'afterDestroy':_0x04c5('0x6')};function emitEvent(_0x5a0501){return function(_0x4fd529,_0x1ae103,_0x1d623d){ChatMessageEvents['emit'](_0x5a0501+':'+_0x4fd529['id'],_0x4fd529);ChatMessageEvents[_0x04c5('0x7')](_0x5a0501,_0x4fd529);_0x1d623d(null);};}for(var e in events){if(events[_0x04c5('0x8')](e)){var event=events[e];ChatMessage[_0x04c5('0x9')](e,emitEvent(event));}}module[_0x04c5('0xa')]=ChatMessageEvents;
\ No newline at end of file
index 3049d1c..07c1b30 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x28de=['then','update','createdAt','catch','error','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','./chatMessage.attributes','exports','define','chat_messages','fti_chat_messages','FULLTEXT','models','direction','toLowerCase','out','secret','UserId','findOne','ChatInteractionId'];(function(_0x233dc0,_0x2866ad){var _0x1fc160=function(_0x51e38b){while(--_0x51e38b){_0x233dc0['push'](_0x233dc0['shift']());}};_0x1fc160(++_0x2866ad);}(_0x28de,0x11d));var _0xe28d=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x28de[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0xe28d('0x0'));var util=require(_0xe28d('0x1'));var logger=require(_0xe28d('0x2'))(_0xe28d('0x3'));var moment=require(_0xe28d('0x4'));var BPromise=require(_0xe28d('0x5'));var rp=require(_0xe28d('0x6'));var fs=require('fs');var path=require(_0xe28d('0x7'));var rimraf=require(_0xe28d('0x8'));var config=require('../../config/environment');var attributes=require(_0xe28d('0x9'));module[_0xe28d('0xa')]=function(_0x4c3d7b,_0x506631){return _0x4c3d7b[_0xe28d('0xb')]('ChatMessage',attributes,{'tableName':_0xe28d('0xc'),'paranoid':![],'indexes':[{'name':_0xe28d('0xd'),'fields':['body'],'type':_0xe28d('0xe')}],'timestamps':!![],'hooks':{'afterCreate':function(_0x2cbf38,_0x39d21b,_0x2be8a3){var _0x4b1b48=_0x4c3d7b[_0xe28d('0xf')];var _0x55415e=_0x2cbf38['get']({'plain':!![]});if(_0x55415e[_0xe28d('0x10')][_0xe28d('0x11')]()==='in'||_0x55415e['direction'][_0xe28d('0x11')]()===_0xe28d('0x12')&&!_0x55415e[_0xe28d('0x13')]&&!_['isNil'](_0x55415e[_0xe28d('0x14')])){_0x4b1b48['ChatInteraction'][_0xe28d('0x15')]({'where':{'id':_0x55415e[_0xe28d('0x16')]}})[_0xe28d('0x17')](function(_0xfdab17){if(_0xfdab17){_0xfdab17[_0xe28d('0x18')]({'lastMsgAt':_0x55415e[_0xe28d('0x19')],'lastMsgDirection':_0x55415e['direction']['toLowerCase']()});}})[_0xe28d('0x1a')](function(_0x44fb47){console[_0xe28d('0x1b')](_0x44fb47);});}_0x2be8a3();}},'charset':'utf8mb4','collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0x0ceb=['UserId','findOne','createdAt','catch','error','utf8mb4_unicode_ci','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./chatMessage.attributes','exports','ChatMessage','chat_messages','body','FULLTEXT','models','toLowerCase','direction','out','secret','isNil'];(function(_0x457aaa,_0x3dff36){var _0x4cc6d8=function(_0x3e689e){while(--_0x3e689e){_0x457aaa['push'](_0x457aaa['shift']());}};_0x4cc6d8(++_0x3dff36);}(_0x0ceb,0x1c8));var _0xb0ce=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0x0ceb[_0x4b369d];return _0x571a98;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xb0ce('0x0'))(_0xb0ce('0x1'));var moment=require('moment');var BPromise=require(_0xb0ce('0x2'));var rp=require(_0xb0ce('0x3'));var fs=require('fs');var path=require(_0xb0ce('0x4'));var rimraf=require(_0xb0ce('0x5'));var config=require(_0xb0ce('0x6'));var attributes=require(_0xb0ce('0x7'));module[_0xb0ce('0x8')]=function(_0x76f2b4,_0x10b341){return _0x76f2b4['define'](_0xb0ce('0x9'),attributes,{'tableName':_0xb0ce('0xa'),'paranoid':![],'indexes':[{'name':'fti_chat_messages','fields':[_0xb0ce('0xb')],'type':_0xb0ce('0xc')}],'timestamps':!![],'hooks':{'afterCreate':function(_0x2e3650,_0x425a5e,_0x5dbc91){var _0xf0aba2=_0x76f2b4[_0xb0ce('0xd')];var _0x3ffebe=_0x2e3650['get']({'plain':!![]});if(_0x3ffebe['direction'][_0xb0ce('0xe')]()==='in'||_0x3ffebe[_0xb0ce('0xf')]['toLowerCase']()===_0xb0ce('0x10')&&!_0x3ffebe[_0xb0ce('0x11')]&&!_[_0xb0ce('0x12')](_0x3ffebe[_0xb0ce('0x13')])){_0xf0aba2['ChatInteraction'][_0xb0ce('0x14')]({'where':{'id':_0x3ffebe['ChatInteractionId']}})['then'](function(_0x1da253){if(_0x1da253){_0x1da253['update']({'lastMsgAt':_0x3ffebe[_0xb0ce('0x15')],'lastMsgDirection':_0x3ffebe[_0xb0ce('0xf')][_0xb0ce('0xe')]()});}})[_0xb0ce('0x16')](function(_0x2570c7){console[_0xb0ce('0x17')](_0x2570c7);});}_0x5dbc91();}},'charset':'utf8mb4','collate':_0xb0ce('0x18')});};
\ No newline at end of file
index ec0e377..bcf6c1d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xab0e=['defaults','localhost','socket.io-emitter','./chatMessage.socket','then','info','ChatMessage,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','CreateChatMessage','create','body','options','raw','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis'];(function(_0x1f1074,_0xf7500f){var _0x5db936=function(_0xba1215){while(--_0xba1215){_0x1f1074['push'](_0x1f1074['shift']());}};_0x5db936(++_0xf7500f);}(_0xab0e,0xfa));var _0xeab0=function(_0x160c73,_0x2ee678){_0x160c73=_0x160c73-0x0;var _0xd9302=_0xab0e[_0x160c73];return _0xd9302;};'use strict';var _=require('lodash');var util=require(_0xeab0('0x0'));var moment=require(_0xeab0('0x1'));var BPromise=require(_0xeab0('0x2'));var rs=require(_0xeab0('0x3'));var fs=require('fs');var Redis=require(_0xeab0('0x4'));var db=require(_0xeab0('0x5'))['db'];var utils=require(_0xeab0('0x6'));var logger=require(_0xeab0('0x7'))(_0xeab0('0x8'));var config=require(_0xeab0('0x9'));var jayson=require(_0xeab0('0xa'));var client=jayson[_0xeab0('0xb')][_0xeab0('0xc')]({'port':0x232a});config[_0xeab0('0xd')]=_[_0xeab0('0xe')](config[_0xeab0('0xd')],{'host':_0xeab0('0xf'),'port':0x18eb});var socket=require(_0xeab0('0x10'))(new Redis(config[_0xeab0('0xd')]));require(_0xeab0('0x11'))['register'](socket);function respondWithRpcPromise(_0x3d376d,_0x47451e,_0x15672b){return new BPromise(function(_0x2d9073,_0x4058ed){return client['request'](_0x3d376d,_0x15672b)[_0xeab0('0x12')](function(_0x5f01b5){logger[_0xeab0('0x13')](_0xeab0('0x14'),_0x47451e,_0xeab0('0x15'));logger[_0xeab0('0x16')]('ChatMessage,\x20%s,\x20%s,\x20%s',_0x47451e,'request\x20sent',JSON['stringify'](_0x5f01b5));if(_0x5f01b5[_0xeab0('0x17')]){if(_0x5f01b5[_0xeab0('0x17')][_0xeab0('0x18')]===0x1f4){logger[_0xeab0('0x17')](_0xeab0('0x14'),_0x47451e,_0x5f01b5[_0xeab0('0x17')][_0xeab0('0x19')]);return _0x4058ed(_0x5f01b5[_0xeab0('0x17')][_0xeab0('0x19')]);}logger[_0xeab0('0x17')](_0xeab0('0x14'),_0x47451e,_0x5f01b5[_0xeab0('0x17')][_0xeab0('0x19')]);return _0x2d9073(_0x5f01b5[_0xeab0('0x17')][_0xeab0('0x19')]);}else{logger['info']('ChatMessage,\x20%s,\x20%s',_0x47451e,_0xeab0('0x15'));_0x2d9073(_0x5f01b5[_0xeab0('0x1a')][_0xeab0('0x19')]);}})[_0xeab0('0x1b')](function(_0x3569f4){logger['error'](_0xeab0('0x14'),_0x47451e,_0x3569f4);_0x4058ed(_0x3569f4);});});}exports[_0xeab0('0x1c')]=function(_0x529190){var _0x1af401=this;return new Promise(function(_0x207296,_0x221516){return db['ChatMessage'][_0xeab0('0x1d')](_0x529190[_0xeab0('0x1e')],{'raw':_0x529190['options']?_0x529190[_0xeab0('0x1f')][_0xeab0('0x20')]===undefined?!![]:![]:!![]})[_0xeab0('0x12')](function(_0x2c6571){logger[_0xeab0('0x13')](_0xeab0('0x1c'),_0x529190);logger['debug']('CreateChatMessage',_0x529190,JSON['stringify'](_0x2c6571));_0x207296(_0x2c6571);})[_0xeab0('0x1b')](function(_0x9bc90){logger[_0xeab0('0x17')](_0xeab0('0x1c'),_0x9bc90[_0xeab0('0x19')],_0x529190);_0x221516(_0x1af401[_0xeab0('0x17')](0x1f4,_0x9bc90[_0xeab0('0x19')]));});});};
\ No newline at end of file
+var _0x59e1=['redis','defaults','localhost','socket.io-emitter','./chatMessage.socket','request','then','ChatMessage,\x20%s,\x20%s','request\x20sent','debug','ChatMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','ChatMessage','create','body','options','info','CreateChatMessage','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http'];(function(_0x518c4b,_0x144ff4){var _0x4a3b8a=function(_0x305fcb){while(--_0x305fcb){_0x518c4b['push'](_0x518c4b['shift']());}};_0x4a3b8a(++_0x144ff4);}(_0x59e1,0x136));var _0x159e=function(_0x4390a1,_0x775b5e){_0x4390a1=_0x4390a1-0x0;var _0x5b811d=_0x59e1[_0x4390a1];return _0x5b811d;};'use strict';var _=require(_0x159e('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x159e('0x1'));var rs=require(_0x159e('0x2'));var fs=require('fs');var Redis=require(_0x159e('0x3'));var db=require(_0x159e('0x4'))['db'];var utils=require(_0x159e('0x5'));var logger=require('../../config/logger')(_0x159e('0x6'));var config=require(_0x159e('0x7'));var jayson=require(_0x159e('0x8'));var client=jayson['client'][_0x159e('0x9')]({'port':0x232a});config[_0x159e('0xa')]=_[_0x159e('0xb')](config[_0x159e('0xa')],{'host':_0x159e('0xc'),'port':0x18eb});var socket=require(_0x159e('0xd'))(new Redis(config['redis']));require(_0x159e('0xe'))['register'](socket);function respondWithRpcPromise(_0x448ac8,_0x40c223,_0x3adddb){return new BPromise(function(_0x522a45,_0x4320fb){return client[_0x159e('0xf')](_0x448ac8,_0x3adddb)[_0x159e('0x10')](function(_0x3f39eb){logger['info'](_0x159e('0x11'),_0x40c223,_0x159e('0x12'));logger[_0x159e('0x13')](_0x159e('0x14'),_0x40c223,'request\x20sent',JSON[_0x159e('0x15')](_0x3f39eb));if(_0x3f39eb[_0x159e('0x16')]){if(_0x3f39eb['error'][_0x159e('0x17')]===0x1f4){logger[_0x159e('0x16')](_0x159e('0x11'),_0x40c223,_0x3f39eb[_0x159e('0x16')]['message']);return _0x4320fb(_0x3f39eb[_0x159e('0x16')][_0x159e('0x18')]);}logger[_0x159e('0x16')](_0x159e('0x11'),_0x40c223,_0x3f39eb['error'][_0x159e('0x18')]);return _0x522a45(_0x3f39eb[_0x159e('0x16')][_0x159e('0x18')]);}else{logger['info']('ChatMessage,\x20%s,\x20%s',_0x40c223,_0x159e('0x12'));_0x522a45(_0x3f39eb['result'][_0x159e('0x18')]);}})['catch'](function(_0x4cff68){logger[_0x159e('0x16')](_0x159e('0x11'),_0x40c223,_0x4cff68);_0x4320fb(_0x4cff68);});});}exports['CreateChatMessage']=function(_0x50dd4a){var _0x5617a1=this;return new Promise(function(_0x485f54,_0x2c2ea5){return db[_0x159e('0x19')][_0x159e('0x1a')](_0x50dd4a[_0x159e('0x1b')],{'raw':_0x50dd4a[_0x159e('0x1c')]?_0x50dd4a['options']['raw']===undefined?!![]:![]:!![]})[_0x159e('0x10')](function(_0xb5af30){logger[_0x159e('0x1d')](_0x159e('0x1e'),_0x50dd4a);logger[_0x159e('0x13')](_0x159e('0x1e'),_0x50dd4a,JSON[_0x159e('0x15')](_0xb5af30));_0x485f54(_0xb5af30);})[_0x159e('0x1f')](function(_0x357407){logger[_0x159e('0x16')]('CreateChatMessage',_0x357407[_0x159e('0x18')],_0x50dd4a);_0x2c2ea5(_0x5617a1[_0x159e('0x16')](0x1f4,_0x357407['message']));});});};
\ No newline at end of file
index e23662d..c262078 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x70e0=['chatMessage:','./chatMessage.events','save','remove','emit','removeListener'];(function(_0x20eca4,_0x1a7d8b){var _0x272812=function(_0x3208b4){while(--_0x3208b4){_0x20eca4['push'](_0x20eca4['shift']());}};_0x272812(++_0x1a7d8b);}(_0x70e0,0x17b));var _0x070e=function(_0x2b4ff6,_0x266f85){_0x2b4ff6=_0x2b4ff6-0x0;var _0x310932=_0x70e0[_0x2b4ff6];return _0x310932;};'use strict';var ChatMessageEvents=require(_0x070e('0x0'));var events=[_0x070e('0x1'),_0x070e('0x2'),'update'];function createListener(_0x579b83,_0x16e651){return function(_0xee173){_0x16e651[_0x070e('0x3')](_0x579b83,_0xee173);};}function removeListener(_0x2593e5,_0x5c90fc){return function(){ChatMessageEvents[_0x070e('0x4')](_0x2593e5,_0x5c90fc);};}exports['register']=function(_0x46fe68){for(var _0x4b041d=0x0,_0x56e420=events['length'];_0x4b041d<_0x56e420;_0x4b041d++){var _0x35ab0c=events[_0x4b041d];var _0x1e11f0=createListener(_0x070e('0x5')+_0x35ab0c,_0x46fe68);ChatMessageEvents['on'](_0x35ab0c,_0x1e11f0);}};
\ No newline at end of file
+var _0x008c=['./chatMessage.events','save','remove','update','emit','removeListener','register','chatMessage:'];(function(_0x4f8926,_0x416a28){var _0x56d9f8=function(_0x5aa809){while(--_0x5aa809){_0x4f8926['push'](_0x4f8926['shift']());}};_0x56d9f8(++_0x416a28);}(_0x008c,0x188));var _0xc008=function(_0x4b2251,_0x393f10){_0x4b2251=_0x4b2251-0x0;var _0x5d22fb=_0x008c[_0x4b2251];return _0x5d22fb;};'use strict';var ChatMessageEvents=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(){ChatMessageEvents[_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);ChatMessageEvents['on'](_0x428fa9,_0x5aa09b);}};
\ No newline at end of file
index eb3c5a3..a191d3a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4975=['/:id/accept','reject','delete','multer','path','connect-timeout','express','../../config/environment','./chatMessage.controller','get','/describe','describe','/:id','isAuthenticated','post','tracked','chat','chatmessage:create','create','put','update'];(function(_0x32be15,_0x5e4e3c){var _0x209b34=function(_0x3e096d){while(--_0x3e096d){_0x32be15['push'](_0x32be15['shift']());}};_0x209b34(++_0x5e4e3c);}(_0x4975,0x1d1));var _0x5497=function(_0x31fcb5,_0x525c07){_0x31fcb5=_0x31fcb5-0x0;var _0xde912f=_0x4975[_0x31fcb5];return _0xde912f;};'use strict';var multer=require(_0x5497('0x0'));var util=require('util');var path=require(_0x5497('0x1'));var timeout=require(_0x5497('0x2'));var express=require(_0x5497('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x5497('0x4'));var controller=require(_0x5497('0x5'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x5497('0x6')](_0x5497('0x7'),auth['isAuthenticated'](),controller[_0x5497('0x8')]);router['get'](_0x5497('0x9'),auth[_0x5497('0xa')](),controller['show']);router[_0x5497('0xb')]('/',auth[_0x5497('0xa')](),interaction[_0x5497('0xc')](_0x5497('0xd'),_0x5497('0xe')),controller[_0x5497('0xf')]);router[_0x5497('0x10')](_0x5497('0x9'),controller[_0x5497('0x11')]);router[_0x5497('0x10')](_0x5497('0x12'),auth[_0x5497('0xa')](),controller['accept']);router[_0x5497('0x10')]('/:id/reject',auth[_0x5497('0xa')](),controller[_0x5497('0x13')]);router[_0x5497('0x14')](_0x5497('0x9'),auth[_0x5497('0xa')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x7a76=['put','update','/:id/accept','accept','reject','util','connect-timeout','express','Router','../../components/auth/service','../../config/environment','get','index','/describe','isAuthenticated','describe','/:id','tracked','chat','chatmessage:create'];(function(_0x4e676e,_0x2a7c6d){var _0x336a3c=function(_0x4767c4){while(--_0x4767c4){_0x4e676e['push'](_0x4e676e['shift']());}};_0x336a3c(++_0x2a7c6d);}(_0x7a76,0x69));var _0x67a7=function(_0x31cb77,_0x348021){_0x31cb77=_0x31cb77-0x0;var _0x710374=_0x7a76[_0x31cb77];return _0x710374;};'use strict';var multer=require('multer');var util=require(_0x67a7('0x0'));var path=require('path');var timeout=require(_0x67a7('0x1'));var express=require(_0x67a7('0x2'));var router=express[_0x67a7('0x3')]();var auth=require(_0x67a7('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x67a7('0x5'));var controller=require('./chatMessage.controller');router[_0x67a7('0x6')]('/',auth['isAuthenticated'](),controller[_0x67a7('0x7')]);router[_0x67a7('0x6')](_0x67a7('0x8'),auth[_0x67a7('0x9')](),controller[_0x67a7('0xa')]);router[_0x67a7('0x6')](_0x67a7('0xb'),auth['isAuthenticated'](),controller['show']);router['post']('/',auth[_0x67a7('0x9')](),interaction[_0x67a7('0xc')](_0x67a7('0xd'),_0x67a7('0xe')),controller['create']);router[_0x67a7('0xf')]('/:id',controller[_0x67a7('0x10')]);router['put'](_0x67a7('0x11'),auth[_0x67a7('0x9')](),controller[_0x67a7('0x12')]);router['put']('/:id/reject',auth[_0x67a7('0x9')](),controller[_0x67a7('0x13')]);router['delete'](_0x67a7('0xb'),auth[_0x67a7('0x9')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 1026325..2a81966 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb29f=['TEXT','medium','exports'];(function(_0x46698a,_0x8de1e4){var _0x356db0=function(_0x19e83c){while(--_0x19e83c){_0x46698a['push'](_0x46698a['shift']());}};_0x356db0(++_0x8de1e4);}(_0xb29f,0x9e));var _0xfb29=function(_0x4211e9,_0x149c77){_0x4211e9=_0x4211e9-0x0;var _0x2b348a=_0xb29f[_0x4211e9];return _0x2b348a;};'use strict';var Sequelize=require('sequelize');module[_0xfb29('0x0')]={'body':{'type':Sequelize[_0xfb29('0x1')](_0xfb29('0x2')),'allowNull':![]}};
\ No newline at end of file
+var _0xb1fb=['exports','TEXT','sequelize'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0xb1fb,0xd4));var _0xbb1f=function(_0x2e5718,_0x409990){_0x2e5718=_0x2e5718-0x0;var _0x54e852=_0xb1fb[_0x2e5718];return _0x54e852;};'use strict';var Sequelize=require(_0xbb1f('0x0'));module[_0xbb1f('0x1')]={'body':{'type':Sequelize[_0xbb1f('0x2')]('medium'),'allowNull':![]}};
\ No newline at end of file
index f26c3e9..197b103 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe130=['filter','options','include','findAll','rows','catch','params','rawAttributes','length','includeAll','find','create','update','body','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','lodash','desk.js','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','reject','save','destroy','then','sendStatus','error','stack','name','send','index','ChatOfflineMessage','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','sort','where','pick','merge','map','type','key','VIRTUAL','field'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xe130,0x127));var _0x0e13=function(_0x11c20a,_0x507d6e){_0x11c20a=_0x11c20a-0x0;var _0x50bc71=_0xe130[_0x11c20a];return _0x50bc71;};'use strict';var pdf=require(_0x0e13('0x0'));var emlformat=require(_0x0e13('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x0e13('0x2'));var jsonpatch=require(_0x0e13('0x3'));var rp=require(_0x0e13('0x4'));var moment=require(_0x0e13('0x5'));var BPromise=require(_0x0e13('0x6'));var Mustache=require('mustache');var util=require(_0x0e13('0x7'));var path=require(_0x0e13('0x8'));var sox=require(_0x0e13('0x9'));var csv=require(_0x0e13('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x0e13('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0e13('0xc'));var toCsv=require(_0x0e13('0xa'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0x0e13('0xd'));var authService=require(_0x0e13('0xe'));var qs=require(_0x0e13('0xf'));var hardwareService=require(_0x0e13('0x10'));var logger=require('../../config/logger')('api');var utils=require(_0x0e13('0x11'));var config=require(_0x0e13('0x12'));var db=require(_0x0e13('0x13'))['db'];function respondWithStatusCode(_0x463643,_0x485d72){_0x485d72=_0x485d72||0xcc;return function(_0x1b4391){if(_0x1b4391){return _0x463643['sendStatus'](_0x485d72);}return _0x463643[_0x0e13('0x14')](_0x485d72)[_0x0e13('0x15')]();};}function respondWithResult(_0x15fa3d,_0x1f933e){_0x1f933e=_0x1f933e||0xc8;return function(_0x2f0d82){if(_0x2f0d82){return _0x15fa3d[_0x0e13('0x14')](_0x1f933e)[_0x0e13('0x16')](_0x2f0d82);}};}function respondWithFilteredResult(_0x36b81d,_0x11c5cd){return function(_0x530f82){if(_0x530f82){var _0x302763=_0x530f82[_0x0e13('0x17')],_0xbc1617=_0x11c5cd[_0x0e13('0x18')],_0x2057fe=_0x11c5cd['offset']+_0x11c5cd[_0x0e13('0x19')],_0x433965;if(_0x2057fe>=_0x302763){_0x2057fe=_0x302763;_0x433965=0xc8;}else{_0x433965=0xce;}_0x36b81d[_0x0e13('0x14')](_0x433965);return _0x36b81d['set']('Content-Range',_0xbc1617+'-'+_0x2057fe+'/'+_0x302763)[_0x0e13('0x16')](_0x530f82);}return null;};}function patchUpdates(_0x5001aa){return function(_0x2063ca){try{jsonpatch['apply'](_0x2063ca,_0x5001aa,!![]);}catch(_0x294aea){return BPromise[_0x0e13('0x1a')](_0x294aea);}return _0x2063ca[_0x0e13('0x1b')]();};}function saveUpdates(_0x408216,_0x1845d8){return function(_0x5ef062){if(_0x5ef062){return _0x5ef062['update'](_0x408216)['then'](function(_0x2dddef){return _0x2dddef;});}return null;};}function removeEntity(_0x141c84,_0x505d53){return function(_0x515222){if(_0x515222){return _0x515222[_0x0e13('0x1c')]()[_0x0e13('0x1d')](function(){_0x141c84[_0x0e13('0x14')](0xcc)['end']();});}};}function handleEntityNotFound(_0x400e87,_0x70c3db){return function(_0x22cc15){if(!_0x22cc15){_0x400e87[_0x0e13('0x1e')](0x194);}return _0x22cc15;};}function handleError(_0x402e9b,_0x4117e5){_0x4117e5=_0x4117e5||0x1f4;return function(_0x4240e7){logger[_0x0e13('0x1f')](_0x4240e7[_0x0e13('0x20')]);if(_0x4240e7[_0x0e13('0x21')]){delete _0x4240e7[_0x0e13('0x21')];}_0x402e9b[_0x0e13('0x14')](_0x4117e5)[_0x0e13('0x22')](_0x4240e7);};}exports[_0x0e13('0x23')]=function(_0xfd19ed,_0x22daca){var _0x1edc48={},_0x59ae33={},_0x37fe42={'count':0x0,'rows':[]};var _0x3e8c13=db[_0x0e13('0x24')]['rawAttributes'];_0x59ae33[_0x0e13('0x25')]=_[_0x0e13('0x26')](_0x3e8c13);_0x59ae33[_0x0e13('0x27')]=_[_0x0e13('0x26')](_0xfd19ed['query']);_0x59ae33[_0x0e13('0x28')]=_[_0x0e13('0x29')](_0x59ae33[_0x0e13('0x25')],_0x59ae33[_0x0e13('0x27')]);_0x1edc48[_0x0e13('0x2a')]=_[_0x0e13('0x29')](_0x59ae33[_0x0e13('0x25')],qs[_0x0e13('0x2b')](_0xfd19ed['query'][_0x0e13('0x2b')]));_0x1edc48[_0x0e13('0x2a')]=_0x1edc48[_0x0e13('0x2a')]['length']?_0x1edc48[_0x0e13('0x2a')]:_0x59ae33[_0x0e13('0x25')];if(!_0xfd19ed[_0x0e13('0x27')][_0x0e13('0x2c')](_0x0e13('0x2d'))){_0x1edc48[_0x0e13('0x19')]=qs[_0x0e13('0x19')](_0xfd19ed[_0x0e13('0x27')][_0x0e13('0x19')]);_0x1edc48['offset']=qs[_0x0e13('0x18')](_0xfd19ed[_0x0e13('0x27')][_0x0e13('0x18')]);}_0x1edc48['order']=qs[_0x0e13('0x2e')](_0xfd19ed['query'][_0x0e13('0x2e')]);_0x1edc48[_0x0e13('0x2f')]=qs[_0x0e13('0x28')](_[_0x0e13('0x30')](_0xfd19ed[_0x0e13('0x27')],_0x59ae33[_0x0e13('0x28')]));if(_0xfd19ed[_0x0e13('0x27')]['filter']){_0x1edc48['where']=_[_0x0e13('0x31')](_0x1edc48[_0x0e13('0x2f')],{'$or':_[_0x0e13('0x32')](_0x3e8c13,function(_0x3eaa69){if(_0x3eaa69[_0x0e13('0x33')][_0x0e13('0x34')]!==_0x0e13('0x35')){var _0x54f08a={};_0x54f08a[_0x3eaa69[_0x0e13('0x36')]]={'$like':'%'+_0xfd19ed[_0x0e13('0x27')][_0x0e13('0x37')]+'%'};return _0x54f08a;}})});}_0x1edc48=_[_0x0e13('0x31')]({},_0x1edc48,_0xfd19ed[_0x0e13('0x38')]);var _0x50bb52={'where':_0x1edc48[_0x0e13('0x2f')]};return db[_0x0e13('0x24')][_0x0e13('0x17')](_0x50bb52)['then'](function(_0x409b5a){_0x37fe42['count']=_0x409b5a;if(_0xfd19ed[_0x0e13('0x27')]['includeAll']){_0x1edc48[_0x0e13('0x39')]=[{'all':!![]}];}return db['ChatOfflineMessage'][_0x0e13('0x3a')](_0x1edc48);})[_0x0e13('0x1d')](function(_0x3cdc25){_0x37fe42[_0x0e13('0x3b')]=_0x3cdc25;return _0x37fe42;})[_0x0e13('0x1d')](respondWithFilteredResult(_0x22daca,_0x1edc48))[_0x0e13('0x3c')](handleError(_0x22daca,null));};exports['show']=function(_0x445949,_0x38b09f){var _0x217516={'raw':!![],'where':{'id':_0x445949[_0x0e13('0x3d')]['id']}},_0xa7d7b7={};_0xa7d7b7[_0x0e13('0x25')]=_[_0x0e13('0x26')](db['ChatOfflineMessage'][_0x0e13('0x3e')]);_0xa7d7b7['query']=_['keys'](_0x445949['query']);_0xa7d7b7[_0x0e13('0x28')]=_[_0x0e13('0x29')](_0xa7d7b7[_0x0e13('0x25')],_0xa7d7b7[_0x0e13('0x27')]);_0x217516[_0x0e13('0x2a')]=_[_0x0e13('0x29')](_0xa7d7b7[_0x0e13('0x25')],qs['fields'](_0x445949[_0x0e13('0x27')]['fields']));_0x217516['attributes']=_0x217516[_0x0e13('0x2a')][_0x0e13('0x3f')]?_0x217516[_0x0e13('0x2a')]:_0xa7d7b7[_0x0e13('0x25')];if(_0x445949['query'][_0x0e13('0x40')]){_0x217516[_0x0e13('0x39')]=[{'all':!![]}];}_0x217516=_['merge']({},_0x217516,_0x445949[_0x0e13('0x38')]);return db[_0x0e13('0x24')][_0x0e13('0x41')](_0x217516)[_0x0e13('0x1d')](handleEntityNotFound(_0x38b09f,null))[_0x0e13('0x1d')](respondWithResult(_0x38b09f,null))[_0x0e13('0x3c')](handleError(_0x38b09f,null));};exports[_0x0e13('0x42')]=function(_0x2d8e1c,_0x2cd0de){return db[_0x0e13('0x24')]['create'](_0x2d8e1c['body'],{})[_0x0e13('0x1d')](respondWithResult(_0x2cd0de,0xc9))[_0x0e13('0x3c')](handleError(_0x2cd0de,null));};exports[_0x0e13('0x43')]=function(_0x18bc94,_0xe2e335){if(_0x18bc94['body']['id']){delete _0x18bc94[_0x0e13('0x44')]['id'];}return db[_0x0e13('0x24')][_0x0e13('0x41')]({'where':{'id':_0x18bc94['params']['id']}})[_0x0e13('0x1d')](handleEntityNotFound(_0xe2e335,null))['then'](saveUpdates(_0x18bc94[_0x0e13('0x44')],null))[_0x0e13('0x1d')](respondWithResult(_0xe2e335,null))[_0x0e13('0x3c')](handleError(_0xe2e335,null));};exports[_0x0e13('0x1c')]=function(_0x35249c,_0x47e5b8){return db[_0x0e13('0x24')]['find']({'where':{'id':_0x35249c[_0x0e13('0x3d')]['id']}})[_0x0e13('0x1d')](handleEntityNotFound(_0x47e5b8,null))['then'](removeEntity(_0x47e5b8,null))[_0x0e13('0x3c')](handleError(_0x47e5b8,null));};exports[_0x0e13('0x45')]=function(_0xb7e6e7,_0x2052b4){return db['ChatOfflineMessage'][_0x0e13('0x45')]()[_0x0e13('0x1d')](respondWithResult(_0x2052b4,null))['catch'](handleError(_0x2052b4,null));};
\ No newline at end of file
+var _0x7334=['field','filter','options','count','include','rows','catch','show','keys','rawAttributes','length','includeAll','find','create','body','update','destroy','params','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','sendStatus','status','end','json','offset','set','Content-Range','apply','save','then','error','stack','name','send','index','ChatOfflineMessage','model','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','limit','sort','where','merge','map','type','key','VIRTUAL'];(function(_0x49b207,_0x408ade){var _0x2dc8fa=function(_0x150975){while(--_0x150975){_0x49b207['push'](_0x49b207['shift']());}};_0x2dc8fa(++_0x408ade);}(_0x7334,0x184));var _0x4733=function(_0x3c2ae5,_0x490768){_0x3c2ae5=_0x3c2ae5-0x0;var _0x179c3d=_0x7334[_0x3c2ae5];return _0x179c3d;};'use strict';var pdf=require(_0x4733('0x0'));var emlformat=require(_0x4733('0x1'));var rimraf=require(_0x4733('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x4733('0x3'));var moment=require('moment');var BPromise=require(_0x4733('0x4'));var Mustache=require(_0x4733('0x5'));var util=require(_0x4733('0x6'));var path=require(_0x4733('0x7'));var sox=require(_0x4733('0x8'));var csv=require(_0x4733('0x9'));var ejs=require(_0x4733('0xa'));var fs=require('fs');var _=require(_0x4733('0xb'));var squel=require(_0x4733('0xc'));var crypto=require(_0x4733('0xd'));var jsforce=require(_0x4733('0xe'));var deskjs=require(_0x4733('0xf'));var toCsv=require(_0x4733('0x9'));var querystring=require(_0x4733('0x10'));var Papa=require(_0x4733('0x11'));var Redis=require(_0x4733('0x12'));var authService=require(_0x4733('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x4733('0x14'));var logger=require(_0x4733('0x15'))('api');var utils=require(_0x4733('0x16'));var config=require('../../config/environment');var db=require(_0x4733('0x17'))['db'];function respondWithStatusCode(_0x380b2e,_0x44cb92){_0x44cb92=_0x44cb92||0xcc;return function(_0x461f74){if(_0x461f74){return _0x380b2e[_0x4733('0x18')](_0x44cb92);}return _0x380b2e[_0x4733('0x19')](_0x44cb92)[_0x4733('0x1a')]();};}function respondWithResult(_0x5e4b06,_0x57e554){_0x57e554=_0x57e554||0xc8;return function(_0x543caf){if(_0x543caf){return _0x5e4b06[_0x4733('0x19')](_0x57e554)[_0x4733('0x1b')](_0x543caf);}};}function respondWithFilteredResult(_0x2e5b1b,_0x22283e){return function(_0x3813df){if(_0x3813df){var _0x167016=_0x3813df['count'],_0x12f111=_0x22283e[_0x4733('0x1c')],_0x9fff=_0x22283e[_0x4733('0x1c')]+_0x22283e['limit'],_0x1920ce;if(_0x9fff>=_0x167016){_0x9fff=_0x167016;_0x1920ce=0xc8;}else{_0x1920ce=0xce;}_0x2e5b1b[_0x4733('0x19')](_0x1920ce);return _0x2e5b1b[_0x4733('0x1d')](_0x4733('0x1e'),_0x12f111+'-'+_0x9fff+'/'+_0x167016)[_0x4733('0x1b')](_0x3813df);}return null;};}function patchUpdates(_0x579f67){return function(_0x517fbc){try{jsonpatch[_0x4733('0x1f')](_0x517fbc,_0x579f67,!![]);}catch(_0x3b730a){return BPromise['reject'](_0x3b730a);}return _0x517fbc[_0x4733('0x20')]();};}function saveUpdates(_0x1943bc,_0x15339c){return function(_0x7a4e0){if(_0x7a4e0){return _0x7a4e0['update'](_0x1943bc)[_0x4733('0x21')](function(_0xb45e1){return _0xb45e1;});}return null;};}function removeEntity(_0x5d058d,_0x2aa2f4){return function(_0x18da47){if(_0x18da47){return _0x18da47['destroy']()[_0x4733('0x21')](function(){_0x5d058d[_0x4733('0x19')](0xcc)[_0x4733('0x1a')]();});}};}function handleEntityNotFound(_0x1a0643,_0x3a2542){return function(_0x24db74){if(!_0x24db74){_0x1a0643[_0x4733('0x18')](0x194);}return _0x24db74;};}function handleError(_0x2bb78f,_0x523697){_0x523697=_0x523697||0x1f4;return function(_0x3e6976){logger[_0x4733('0x22')](_0x3e6976[_0x4733('0x23')]);if(_0x3e6976[_0x4733('0x24')]){delete _0x3e6976[_0x4733('0x24')];}_0x2bb78f[_0x4733('0x19')](_0x523697)[_0x4733('0x25')](_0x3e6976);};}exports[_0x4733('0x26')]=function(_0x13bc12,_0x23fe6c){var _0x521855={},_0x3aeb57={},_0x4c91bc={'count':0x0,'rows':[]};var _0x5b6fc0=db[_0x4733('0x27')]['rawAttributes'];_0x3aeb57[_0x4733('0x28')]=_['keys'](_0x5b6fc0);_0x3aeb57['query']=_['keys'](_0x13bc12[_0x4733('0x29')]);_0x3aeb57[_0x4733('0x2a')]=_[_0x4733('0x2b')](_0x3aeb57[_0x4733('0x28')],_0x3aeb57['query']);_0x521855['attributes']=_['intersection'](_0x3aeb57[_0x4733('0x28')],qs['fields'](_0x13bc12['query'][_0x4733('0x2c')]));_0x521855[_0x4733('0x2d')]=_0x521855[_0x4733('0x2d')]['length']?_0x521855['attributes']:_0x3aeb57[_0x4733('0x28')];if(!_0x13bc12[_0x4733('0x29')][_0x4733('0x2e')](_0x4733('0x2f'))){_0x521855[_0x4733('0x30')]=qs['limit'](_0x13bc12[_0x4733('0x29')][_0x4733('0x30')]);_0x521855[_0x4733('0x1c')]=qs[_0x4733('0x1c')](_0x13bc12[_0x4733('0x29')]['offset']);}_0x521855['order']=qs[_0x4733('0x31')](_0x13bc12[_0x4733('0x29')][_0x4733('0x31')]);_0x521855[_0x4733('0x32')]=qs[_0x4733('0x2a')](_['pick'](_0x13bc12[_0x4733('0x29')],_0x3aeb57[_0x4733('0x2a')]));if(_0x13bc12[_0x4733('0x29')]['filter']){_0x521855[_0x4733('0x32')]=_[_0x4733('0x33')](_0x521855[_0x4733('0x32')],{'$or':_[_0x4733('0x34')](_0x5b6fc0,function(_0x463976){if(_0x463976[_0x4733('0x35')][_0x4733('0x36')]!==_0x4733('0x37')){var _0x4f70bf={};_0x4f70bf[_0x463976[_0x4733('0x38')]]={'$like':'%'+_0x13bc12['query'][_0x4733('0x39')]+'%'};return _0x4f70bf;}})});}_0x521855=_[_0x4733('0x33')]({},_0x521855,_0x13bc12[_0x4733('0x3a')]);var _0x1654d4={'where':_0x521855[_0x4733('0x32')]};return db[_0x4733('0x27')][_0x4733('0x3b')](_0x1654d4)[_0x4733('0x21')](function(_0x592fc2){_0x4c91bc[_0x4733('0x3b')]=_0x592fc2;if(_0x13bc12[_0x4733('0x29')]['includeAll']){_0x521855[_0x4733('0x3c')]=[{'all':!![]}];}return db[_0x4733('0x27')]['findAll'](_0x521855);})[_0x4733('0x21')](function(_0x50849a){_0x4c91bc[_0x4733('0x3d')]=_0x50849a;return _0x4c91bc;})['then'](respondWithFilteredResult(_0x23fe6c,_0x521855))[_0x4733('0x3e')](handleError(_0x23fe6c,null));};exports[_0x4733('0x3f')]=function(_0x5d4b95,_0x515720){var _0x3a766b={'raw':!![],'where':{'id':_0x5d4b95['params']['id']}},_0x1d7112={};_0x1d7112[_0x4733('0x28')]=_[_0x4733('0x40')](db[_0x4733('0x27')][_0x4733('0x41')]);_0x1d7112[_0x4733('0x29')]=_[_0x4733('0x40')](_0x5d4b95[_0x4733('0x29')]);_0x1d7112[_0x4733('0x2a')]=_[_0x4733('0x2b')](_0x1d7112[_0x4733('0x28')],_0x1d7112[_0x4733('0x29')]);_0x3a766b[_0x4733('0x2d')]=_[_0x4733('0x2b')](_0x1d7112[_0x4733('0x28')],qs[_0x4733('0x2c')](_0x5d4b95[_0x4733('0x29')][_0x4733('0x2c')]));_0x3a766b[_0x4733('0x2d')]=_0x3a766b['attributes'][_0x4733('0x42')]?_0x3a766b[_0x4733('0x2d')]:_0x1d7112[_0x4733('0x28')];if(_0x5d4b95[_0x4733('0x29')][_0x4733('0x43')]){_0x3a766b[_0x4733('0x3c')]=[{'all':!![]}];}_0x3a766b=_[_0x4733('0x33')]({},_0x3a766b,_0x5d4b95[_0x4733('0x3a')]);return db[_0x4733('0x27')][_0x4733('0x44')](_0x3a766b)[_0x4733('0x21')](handleEntityNotFound(_0x515720,null))[_0x4733('0x21')](respondWithResult(_0x515720,null))[_0x4733('0x3e')](handleError(_0x515720,null));};exports[_0x4733('0x45')]=function(_0x561377,_0x555d00){return db[_0x4733('0x27')][_0x4733('0x45')](_0x561377[_0x4733('0x46')],{})[_0x4733('0x21')](respondWithResult(_0x555d00,0xc9))[_0x4733('0x3e')](handleError(_0x555d00,null));};exports[_0x4733('0x47')]=function(_0x23ffaf,_0x297edb){if(_0x23ffaf[_0x4733('0x46')]['id']){delete _0x23ffaf[_0x4733('0x46')]['id'];}return db['ChatOfflineMessage']['find']({'where':{'id':_0x23ffaf['params']['id']}})['then'](handleEntityNotFound(_0x297edb,null))[_0x4733('0x21')](saveUpdates(_0x23ffaf[_0x4733('0x46')],null))[_0x4733('0x21')](respondWithResult(_0x297edb,null))[_0x4733('0x3e')](handleError(_0x297edb,null));};exports[_0x4733('0x48')]=function(_0x45b9cf,_0x1c6abf){return db[_0x4733('0x27')][_0x4733('0x44')]({'where':{'id':_0x45b9cf[_0x4733('0x49')]['id']}})['then'](handleEntityNotFound(_0x1c6abf,null))['then'](removeEntity(_0x1c6abf,null))[_0x4733('0x3e')](handleError(_0x1c6abf,null));};exports['describe']=function(_0x2882ed,_0x17e686){return db[_0x4733('0x27')]['describe']()[_0x4733('0x21')](respondWithResult(_0x17e686,null))[_0x4733('0x3e')](handleError(_0x17e686,null));};
\ No newline at end of file
index 8459a82..4064cb0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9dee=['api','moment','path','rimraf','../../config/environment','./chatOfflineMessage.attributes','exports','ChatOfflineMessage','lodash','util','../../config/logger'];(function(_0x1c1dec,_0x4ebe02){var _0x4ea112=function(_0x1d320f){while(--_0x1d320f){_0x1c1dec['push'](_0x1c1dec['shift']());}};_0x4ea112(++_0x4ebe02);}(_0x9dee,0x1cb));var _0xe9de=function(_0x35ef6b,_0x202c42){_0x35ef6b=_0x35ef6b-0x0;var _0x3ad145=_0x9dee[_0x35ef6b];return _0x3ad145;};'use strict';var _=require(_0xe9de('0x0'));var util=require(_0xe9de('0x1'));var logger=require(_0xe9de('0x2'))(_0xe9de('0x3'));var moment=require(_0xe9de('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0xe9de('0x5'));var rimraf=require(_0xe9de('0x6'));var config=require(_0xe9de('0x7'));var attributes=require(_0xe9de('0x8'));module[_0xe9de('0x9')]=function(_0x184fa9,_0x19a2c6){return _0x184fa9['define'](_0xe9de('0xa'),attributes,{'tableName':'chat_offline_messages','paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0x1a71=['utf8mb4_unicode_ci','util','../../config/logger','api','moment','path','rimraf','../../config/environment','./chatOfflineMessage.attributes','exports','define','ChatOfflineMessage','chat_offline_messages','utf8mb4'];(function(_0x59c2cb,_0x671ebb){var _0x4d2910=function(_0x50c769){while(--_0x50c769){_0x59c2cb['push'](_0x59c2cb['shift']());}};_0x4d2910(++_0x671ebb);}(_0x1a71,0x1eb));var _0x11a7=function(_0x38c908,_0x5b07c4){_0x38c908=_0x38c908-0x0;var _0x4f6ffd=_0x1a71[_0x38c908];return _0x4f6ffd;};'use strict';var _=require('lodash');var util=require(_0x11a7('0x0'));var logger=require(_0x11a7('0x1'))(_0x11a7('0x2'));var moment=require(_0x11a7('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x11a7('0x4'));var rimraf=require(_0x11a7('0x5'));var config=require(_0x11a7('0x6'));var attributes=require(_0x11a7('0x7'));module[_0x11a7('0x8')]=function(_0x5276e8,_0x19e1b7){return _0x5276e8[_0x11a7('0x9')](_0x11a7('0xa'),attributes,{'tableName':_0x11a7('0xb'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x11a7('0xc'),'collate':_0x11a7('0xd')});};
\ No newline at end of file
index b5c50f8..6f41f42 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9bec=['then','info','ChatOfflineMessage,\x20%s,\x20%s','debug','ChatOfflineMessage,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','request'];(function(_0xed1289,_0x1246d7){var _0x3bf5d5=function(_0x447ecb){while(--_0x447ecb){_0xed1289['push'](_0xed1289['shift']());}};_0x3bf5d5(++_0x1246d7);}(_0x9bec,0x136));var _0xc9be=function(_0xbd08b4,_0x4790ed){_0xbd08b4=_0xbd08b4-0x0;var _0x314f1e=_0x9bec[_0xbd08b4];return _0x314f1e;};'use strict';var _=require(_0xc9be('0x0'));var util=require(_0xc9be('0x1'));var moment=require(_0xc9be('0x2'));var BPromise=require('bluebird');var rs=require(_0xc9be('0x3'));var fs=require('fs');var Redis=require(_0xc9be('0x4'));var db=require(_0xc9be('0x5'))['db'];var utils=require(_0xc9be('0x6'));var logger=require(_0xc9be('0x7'))(_0xc9be('0x8'));var config=require('../../config/environment');var jayson=require(_0xc9be('0x9'));var client=jayson[_0xc9be('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0xf81d5a,_0xc66f3f,_0x5b0a08){return new BPromise(function(_0x2dfb48,_0x46db45){return client[_0xc9be('0xb')](_0xf81d5a,_0x5b0a08)[_0xc9be('0xc')](function(_0x344b6f){logger[_0xc9be('0xd')](_0xc9be('0xe'),_0xc66f3f,'request\x20sent');logger[_0xc9be('0xf')](_0xc9be('0x10'),_0xc66f3f,_0xc9be('0x11'),JSON['stringify'](_0x344b6f));if(_0x344b6f[_0xc9be('0x12')]){if(_0x344b6f[_0xc9be('0x12')][_0xc9be('0x13')]===0x1f4){logger[_0xc9be('0x12')](_0xc9be('0xe'),_0xc66f3f,_0x344b6f[_0xc9be('0x12')]['message']);return _0x46db45(_0x344b6f['error'][_0xc9be('0x14')]);}logger[_0xc9be('0x12')](_0xc9be('0xe'),_0xc66f3f,_0x344b6f[_0xc9be('0x12')][_0xc9be('0x14')]);return _0x2dfb48(_0x344b6f[_0xc9be('0x12')][_0xc9be('0x14')]);}else{logger[_0xc9be('0xd')](_0xc9be('0xe'),_0xc66f3f,_0xc9be('0x11'));_0x2dfb48(_0x344b6f[_0xc9be('0x15')][_0xc9be('0x14')]);}})[_0xc9be('0x16')](function(_0x4e5d9d){logger[_0xc9be('0x12')](_0xc9be('0xe'),_0xc66f3f,_0x4e5d9d);_0x46db45(_0x4e5d9d);});});}
\ No newline at end of file
+var _0xac10=['ChatOfflineMessage,\x20%s,\x20%s','message','result','catch','util','moment','randomstring','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','ChatOfflineMessage,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x2fd326,_0x263295){var _0x24ac11=function(_0x568c72){while(--_0x568c72){_0x2fd326['push'](_0x2fd326['shift']());}};_0x24ac11(++_0x263295);}(_0xac10,0x1a6));var _0x0ac1=function(_0x487f15,_0x1cf5fb){_0x487f15=_0x487f15-0x0;var _0x32c8a1=_0xac10[_0x487f15];return _0x32c8a1;};'use strict';var _=require('lodash');var util=require(_0x0ac1('0x0'));var moment=require(_0x0ac1('0x1'));var BPromise=require('bluebird');var rs=require(_0x0ac1('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x0ac1('0x3'));var logger=require('../../config/logger')(_0x0ac1('0x4'));var config=require(_0x0ac1('0x5'));var jayson=require(_0x0ac1('0x6'));var client=jayson[_0x0ac1('0x7')][_0x0ac1('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x1caacf,_0x34366a,_0x2c958c){return new BPromise(function(_0x1488cb,_0xbaa5d1){return client[_0x0ac1('0x9')](_0x1caacf,_0x2c958c)[_0x0ac1('0xa')](function(_0x3ea70c){logger[_0x0ac1('0xb')]('ChatOfflineMessage,\x20%s,\x20%s',_0x34366a,_0x0ac1('0xc'));logger[_0x0ac1('0xd')](_0x0ac1('0xe'),_0x34366a,_0x0ac1('0xc'),JSON[_0x0ac1('0xf')](_0x3ea70c));if(_0x3ea70c[_0x0ac1('0x10')]){if(_0x3ea70c[_0x0ac1('0x10')][_0x0ac1('0x11')]===0x1f4){logger[_0x0ac1('0x10')](_0x0ac1('0x12'),_0x34366a,_0x3ea70c[_0x0ac1('0x10')][_0x0ac1('0x13')]);return _0xbaa5d1(_0x3ea70c[_0x0ac1('0x10')][_0x0ac1('0x13')]);}logger[_0x0ac1('0x10')]('ChatOfflineMessage,\x20%s,\x20%s',_0x34366a,_0x3ea70c[_0x0ac1('0x10')][_0x0ac1('0x13')]);return _0x1488cb(_0x3ea70c[_0x0ac1('0x10')][_0x0ac1('0x13')]);}else{logger[_0x0ac1('0xb')](_0x0ac1('0x12'),_0x34366a,_0x0ac1('0xc'));_0x1488cb(_0x3ea70c[_0x0ac1('0x14')][_0x0ac1('0x13')]);}})[_0x0ac1('0x15')](function(_0x346cf9){logger['error'](_0x0ac1('0x12'),_0x34366a,_0x346cf9);_0xbaa5d1(_0x346cf9);});});}
\ No newline at end of file
index d504810..f150987 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe799=['/:id','show','post','create','put','delete','destroy','exports','multer','path','express','Router','../../components/interaction/service','../../config/environment','./chatOfflineMessage.controller','isAuthenticated','get','/describe'];(function(_0x174a72,_0x46034c){var _0x32cecd=function(_0x188a47){while(--_0x188a47){_0x174a72['push'](_0x174a72['shift']());}};_0x32cecd(++_0x46034c);}(_0xe799,0x170));var _0x9e79=function(_0x108af2,_0x1c1f73){_0x108af2=_0x108af2-0x0;var _0x44fb3a=_0xe799[_0x108af2];return _0x44fb3a;};'use strict';var multer=require(_0x9e79('0x0'));var util=require('util');var path=require(_0x9e79('0x1'));var timeout=require('connect-timeout');var express=require(_0x9e79('0x2'));var router=express[_0x9e79('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x9e79('0x4'));var config=require(_0x9e79('0x5'));var controller=require(_0x9e79('0x6'));router['get']('/',auth[_0x9e79('0x7')](),controller['index']);router[_0x9e79('0x8')](_0x9e79('0x9'),auth[_0x9e79('0x7')](),controller['describe']);router[_0x9e79('0x8')](_0x9e79('0xa'),auth['isAuthenticated'](),controller[_0x9e79('0xb')]);router[_0x9e79('0xc')]('/',auth[_0x9e79('0x7')](),controller[_0x9e79('0xd')]);router[_0x9e79('0xe')](_0x9e79('0xa'),auth[_0x9e79('0x7')](),controller['update']);router[_0x9e79('0xf')](_0x9e79('0xa'),auth[_0x9e79('0x7')](),controller[_0x9e79('0x10')]);module[_0x9e79('0x11')]=router;
\ No newline at end of file
+var _0xf725=['put','update','delete','/:id','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatOfflineMessage.controller','isAuthenticated','index','get','/describe','describe','show','post','create'];(function(_0x164eca,_0x555e28){var _0x2ce562=function(_0x148ca6){while(--_0x148ca6){_0x164eca['push'](_0x164eca['shift']());}};_0x2ce562(++_0x555e28);}(_0xf725,0x7e));var _0x5f72=function(_0x5633b0,_0xa92737){_0x5633b0=_0x5633b0-0x0;var _0x2fef2d=_0xf725[_0x5633b0];return _0x2fef2d;};'use strict';var multer=require(_0x5f72('0x0'));var util=require(_0x5f72('0x1'));var path=require(_0x5f72('0x2'));var timeout=require(_0x5f72('0x3'));var express=require(_0x5f72('0x4'));var router=express[_0x5f72('0x5')]();var auth=require(_0x5f72('0x6'));var interaction=require(_0x5f72('0x7'));var config=require(_0x5f72('0x8'));var controller=require(_0x5f72('0x9'));router['get']('/',auth[_0x5f72('0xa')](),controller[_0x5f72('0xb')]);router[_0x5f72('0xc')](_0x5f72('0xd'),auth[_0x5f72('0xa')](),controller[_0x5f72('0xe')]);router[_0x5f72('0xc')]('/:id',auth['isAuthenticated'](),controller[_0x5f72('0xf')]);router[_0x5f72('0x10')]('/',auth['isAuthenticated'](),controller[_0x5f72('0x11')]);router[_0x5f72('0x12')]('/:id',auth[_0x5f72('0xa')](),controller[_0x5f72('0x13')]);router[_0x5f72('0x14')](_0x5f72('0x15'),auth[_0x5f72('0xa')](),controller[_0x5f72('0x16')]);module[_0x5f72('0x17')]=router;
\ No newline at end of file
index 3b8961b..a12e31f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ac5=['timeout','INTEGER','sequelize','exports','STRING','ENUM','mouseOver'];(function(_0x5d8018,_0x588592){var _0x151ac4=function(_0x548679){while(--_0x548679){_0x5d8018['push'](_0x5d8018['shift']());}};_0x151ac4(++_0x588592);}(_0x8ac5,0x105));var _0x58ac=function(_0x374bce,_0x543040){_0x374bce=_0x374bce-0x0;var _0x1f8609=_0x8ac5[_0x374bce];return _0x1f8609;};'use strict';var Sequelize=require(_0x58ac('0x0'));module[_0x58ac('0x1')]={'name':{'type':Sequelize[_0x58ac('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0x58ac('0x3')](_0x58ac('0x4'),_0x58ac('0x5')),'defaultValue':_0x58ac('0x4')},'selector':{'type':Sequelize[_0x58ac('0x2')]},'timeout':{'type':Sequelize[_0x58ac('0x6')]}};
\ No newline at end of file
+var _0xdd7e=['STRING','ENUM','mouseOver','timeout','INTEGER','sequelize','exports'];(function(_0x2d08bb,_0x19442d){var _0x13aaf8=function(_0x139588){while(--_0x139588){_0x2d08bb['push'](_0x2d08bb['shift']());}};_0x13aaf8(++_0x19442d);}(_0xdd7e,0x124));var _0xedd7=function(_0x5a3137,_0x23709f){_0x5a3137=_0x5a3137-0x0;var _0x1af665=_0xdd7e[_0x5a3137];return _0x1af665;};'use strict';var Sequelize=require(_0xedd7('0x0'));module[_0xedd7('0x1')]={'name':{'type':Sequelize[_0xedd7('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0xedd7('0x3')](_0xedd7('0x4'),_0xedd7('0x5')),'defaultValue':_0xedd7('0x4')},'selector':{'type':Sequelize[_0xedd7('0x2')]},'timeout':{'type':Sequelize[_0xedd7('0x6')]}};
\ No newline at end of file
index 9ca094d..6d629c7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9089=['show','params','model','keys','ChatProactiveAction','query','filters','intersection','attributes','fields','include','merge','create','catch','body','find','destroy','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','path','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','ioredis','../../config/license/hardware','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','set','apply','reject','update','then','error','stack','name','send'];(function(_0x406ec4,_0x2a4850){var _0x5222c2=function(_0x3ad452){while(--_0x3ad452){_0x406ec4['push'](_0x406ec4['shift']());}};_0x5222c2(++_0x2a4850);}(_0x9089,0x149));var _0x9908=function(_0x385c76,_0xb97335){_0x385c76=_0x385c76-0x0;var _0x5c8367=_0x9089[_0x385c76];return _0x5c8367;};'use strict';var pdf=require(_0x9908('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x9908('0x1'));var zipdir=require(_0x9908('0x2'));var jsonpatch=require(_0x9908('0x3'));var rp=require(_0x9908('0x4'));var moment=require('moment');var BPromise=require(_0x9908('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0x9908('0x6'));var sox=require(_0x9908('0x7'));var csv=require(_0x9908('0x8'));var ejs=require(_0x9908('0x9'));var fs=require('fs');var _=require(_0x9908('0xa'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x9908('0xb'));var deskjs=require(_0x9908('0xc'));var toCsv=require('to-csv');var querystring=require(_0x9908('0xd'));var Papa=require(_0x9908('0xe'));var Redis=require(_0x9908('0xf'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x9908('0x10'));var logger=require('../../config/logger')(_0x9908('0x11'));var utils=require(_0x9908('0x12'));var config=require('../../config/environment');var db=require(_0x9908('0x13'))['db'];function respondWithStatusCode(_0x11b5d7,_0x35be77){_0x35be77=_0x35be77||0xcc;return function(_0x273c92){if(_0x273c92){return _0x11b5d7[_0x9908('0x14')](_0x35be77);}return _0x11b5d7[_0x9908('0x15')](_0x35be77)[_0x9908('0x16')]();};}function respondWithResult(_0x990156,_0x2df601){_0x2df601=_0x2df601||0xc8;return function(_0x405dcc){if(_0x405dcc){return _0x990156['status'](_0x2df601)[_0x9908('0x17')](_0x405dcc);}};}function respondWithFilteredResult(_0xfc7083,_0x52637a){return function(_0x35b895){if(_0x35b895){var _0x3c099f=_0x35b895[_0x9908('0x18')],_0x31c2be=_0x52637a[_0x9908('0x19')],_0x2c3f57=_0x52637a[_0x9908('0x19')]+_0x52637a['limit'],_0x57c7f7;if(_0x2c3f57>=_0x3c099f){_0x2c3f57=_0x3c099f;_0x57c7f7=0xc8;}else{_0x57c7f7=0xce;}_0xfc7083[_0x9908('0x15')](_0x57c7f7);return _0xfc7083[_0x9908('0x1a')]('Content-Range',_0x31c2be+'-'+_0x2c3f57+'/'+_0x3c099f)[_0x9908('0x17')](_0x35b895);}return null;};}function patchUpdates(_0xb04578){return function(_0x528d17){try{jsonpatch[_0x9908('0x1b')](_0x528d17,_0xb04578,!![]);}catch(_0x518aba){return BPromise[_0x9908('0x1c')](_0x518aba);}return _0x528d17['save']();};}function saveUpdates(_0x19040c,_0x195a8e){return function(_0x5a9b21){if(_0x5a9b21){return _0x5a9b21[_0x9908('0x1d')](_0x19040c)['then'](function(_0x2d8408){return _0x2d8408;});}return null;};}function removeEntity(_0xd67eb7,_0x1ccdce){return function(_0x31c15e){if(_0x31c15e){return _0x31c15e['destroy']()[_0x9908('0x1e')](function(){_0xd67eb7[_0x9908('0x15')](0xcc)[_0x9908('0x16')]();});}};}function handleEntityNotFound(_0x1a01be,_0x21e5f1){return function(_0x566069){if(!_0x566069){_0x1a01be['sendStatus'](0x194);}return _0x566069;};}function handleError(_0x2e4f02,_0x2b42aa){_0x2b42aa=_0x2b42aa||0x1f4;return function(_0x354d22){logger[_0x9908('0x1f')](_0x354d22[_0x9908('0x20')]);if(_0x354d22[_0x9908('0x21')]){delete _0x354d22[_0x9908('0x21')];}_0x2e4f02[_0x9908('0x15')](_0x2b42aa)[_0x9908('0x22')](_0x354d22);};}exports[_0x9908('0x23')]=function(_0x52fb55,_0xa6511e){var _0x1225ca={'raw':!![],'where':{'id':_0x52fb55[_0x9908('0x24')]['id']}},_0x3f87f4={};_0x3f87f4[_0x9908('0x25')]=_[_0x9908('0x26')](db[_0x9908('0x27')]['rawAttributes']);_0x3f87f4[_0x9908('0x28')]=_[_0x9908('0x26')](_0x52fb55[_0x9908('0x28')]);_0x3f87f4[_0x9908('0x29')]=_[_0x9908('0x2a')](_0x3f87f4[_0x9908('0x25')],_0x3f87f4['query']);_0x1225ca[_0x9908('0x2b')]=_[_0x9908('0x2a')](_0x3f87f4[_0x9908('0x25')],qs[_0x9908('0x2c')](_0x52fb55[_0x9908('0x28')]['fields']));_0x1225ca[_0x9908('0x2b')]=_0x1225ca[_0x9908('0x2b')]['length']?_0x1225ca[_0x9908('0x2b')]:_0x3f87f4['model'];if(_0x52fb55[_0x9908('0x28')]['includeAll']){_0x1225ca[_0x9908('0x2d')]=[{'all':!![]}];}_0x1225ca=_[_0x9908('0x2e')]({},_0x1225ca,_0x52fb55['options']);return db[_0x9908('0x27')]['find'](_0x1225ca)['then'](handleEntityNotFound(_0xa6511e,null))[_0x9908('0x1e')](respondWithResult(_0xa6511e,null))['catch'](handleError(_0xa6511e,null));};exports[_0x9908('0x2f')]=function(_0x101399,_0x762d35){return db[_0x9908('0x27')][_0x9908('0x2f')](_0x101399['body'],{})[_0x9908('0x1e')](respondWithResult(_0x762d35,0xc9))[_0x9908('0x30')](handleError(_0x762d35,null));};exports[_0x9908('0x1d')]=function(_0x79d31c,_0x1f4d43){if(_0x79d31c[_0x9908('0x31')]['id']){delete _0x79d31c[_0x9908('0x31')]['id'];}return db[_0x9908('0x27')][_0x9908('0x32')]({'where':{'id':_0x79d31c['params']['id']}})[_0x9908('0x1e')](handleEntityNotFound(_0x1f4d43,null))[_0x9908('0x1e')](saveUpdates(_0x79d31c['body'],null))['then'](respondWithResult(_0x1f4d43,null))[_0x9908('0x30')](handleError(_0x1f4d43,null));};exports[_0x9908('0x33')]=function(_0x332a44,_0x3674b2){return db[_0x9908('0x27')]['find']({'where':{'id':_0x332a44[_0x9908('0x24')]['id']}})['then'](handleEntityNotFound(_0x3674b2,null))['then'](removeEntity(_0x3674b2,null))['catch'](handleError(_0x3674b2,null));};
\ No newline at end of file
+var _0xac79=['then','error','stack','name','show','params','model','keys','ChatProactiveAction','rawAttributes','query','intersection','attributes','fields','length','includeAll','include','merge','options','find','catch','create','body','update','rimraf','zip-dir','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','set','Content-Range','apply','reject','destroy'];(function(_0x742abb,_0x4469a3){var _0x6be07d=function(_0x22da8d){while(--_0x22da8d){_0x742abb['push'](_0x742abb['shift']());}};_0x6be07d(++_0x4469a3);}(_0xac79,0xc0));var _0x9ac7=function(_0x32448a,_0x4a478c){_0x32448a=_0x32448a-0x0;var _0x14f71a=_0xac79[_0x32448a];return _0x14f71a;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x9ac7('0x0'));var zipdir=require(_0x9ac7('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0x9ac7('0x2'));var moment=require(_0x9ac7('0x3'));var BPromise=require('bluebird');var Mustache=require(_0x9ac7('0x4'));var util=require(_0x9ac7('0x5'));var path=require(_0x9ac7('0x6'));var sox=require(_0x9ac7('0x7'));var csv=require(_0x9ac7('0x8'));var ejs=require(_0x9ac7('0x9'));var fs=require('fs');var _=require(_0x9ac7('0xa'));var squel=require('squel');var crypto=require(_0x9ac7('0xb'));var jsforce=require(_0x9ac7('0xc'));var deskjs=require(_0x9ac7('0xd'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0x9ac7('0xe'));var authService=require(_0x9ac7('0xf'));var qs=require(_0x9ac7('0x10'));var hardwareService=require(_0x9ac7('0x11'));var logger=require(_0x9ac7('0x12'))(_0x9ac7('0x13'));var utils=require('../../config/utils');var config=require(_0x9ac7('0x14'));var db=require(_0x9ac7('0x15'))['db'];function respondWithStatusCode(_0x41dae4,_0x371fe4){_0x371fe4=_0x371fe4||0xcc;return function(_0x5495b5){if(_0x5495b5){return _0x41dae4[_0x9ac7('0x16')](_0x371fe4);}return _0x41dae4[_0x9ac7('0x17')](_0x371fe4)[_0x9ac7('0x18')]();};}function respondWithResult(_0x514c80,_0x426293){_0x426293=_0x426293||0xc8;return function(_0x349dd6){if(_0x349dd6){return _0x514c80['status'](_0x426293)[_0x9ac7('0x19')](_0x349dd6);}};}function respondWithFilteredResult(_0x10e74b,_0x492593){return function(_0x48d803){if(_0x48d803){var _0x56e685=_0x48d803['count'],_0xfaad9d=_0x492593[_0x9ac7('0x1a')],_0x7d6593=_0x492593[_0x9ac7('0x1a')]+_0x492593['limit'],_0x221a1a;if(_0x7d6593>=_0x56e685){_0x7d6593=_0x56e685;_0x221a1a=0xc8;}else{_0x221a1a=0xce;}_0x10e74b[_0x9ac7('0x17')](_0x221a1a);return _0x10e74b[_0x9ac7('0x1b')](_0x9ac7('0x1c'),_0xfaad9d+'-'+_0x7d6593+'/'+_0x56e685)[_0x9ac7('0x19')](_0x48d803);}return null;};}function patchUpdates(_0x280b83){return function(_0x796d2){try{jsonpatch[_0x9ac7('0x1d')](_0x796d2,_0x280b83,!![]);}catch(_0x19e8ec){return BPromise[_0x9ac7('0x1e')](_0x19e8ec);}return _0x796d2['save']();};}function saveUpdates(_0x2d56de,_0x5c68c4){return function(_0x163b90){if(_0x163b90){return _0x163b90['update'](_0x2d56de)['then'](function(_0x4daf5d){return _0x4daf5d;});}return null;};}function removeEntity(_0x5c48df,_0x2e5dfd){return function(_0x5a4564){if(_0x5a4564){return _0x5a4564[_0x9ac7('0x1f')]()[_0x9ac7('0x20')](function(){_0x5c48df['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x5912e6,_0x35ad6d){return function(_0x2dad4a){if(!_0x2dad4a){_0x5912e6[_0x9ac7('0x16')](0x194);}return _0x2dad4a;};}function handleError(_0x15ac95,_0x50612b){_0x50612b=_0x50612b||0x1f4;return function(_0x57e91e){logger[_0x9ac7('0x21')](_0x57e91e[_0x9ac7('0x22')]);if(_0x57e91e[_0x9ac7('0x23')]){delete _0x57e91e[_0x9ac7('0x23')];}_0x15ac95[_0x9ac7('0x17')](_0x50612b)['send'](_0x57e91e);};}exports[_0x9ac7('0x24')]=function(_0x5e3963,_0x242e06){var _0x37595a={'raw':!![],'where':{'id':_0x5e3963[_0x9ac7('0x25')]['id']}},_0x268b2f={};_0x268b2f[_0x9ac7('0x26')]=_[_0x9ac7('0x27')](db[_0x9ac7('0x28')][_0x9ac7('0x29')]);_0x268b2f[_0x9ac7('0x2a')]=_[_0x9ac7('0x27')](_0x5e3963[_0x9ac7('0x2a')]);_0x268b2f['filters']=_[_0x9ac7('0x2b')](_0x268b2f[_0x9ac7('0x26')],_0x268b2f[_0x9ac7('0x2a')]);_0x37595a[_0x9ac7('0x2c')]=_[_0x9ac7('0x2b')](_0x268b2f[_0x9ac7('0x26')],qs[_0x9ac7('0x2d')](_0x5e3963[_0x9ac7('0x2a')][_0x9ac7('0x2d')]));_0x37595a[_0x9ac7('0x2c')]=_0x37595a[_0x9ac7('0x2c')][_0x9ac7('0x2e')]?_0x37595a[_0x9ac7('0x2c')]:_0x268b2f[_0x9ac7('0x26')];if(_0x5e3963['query'][_0x9ac7('0x2f')]){_0x37595a[_0x9ac7('0x30')]=[{'all':!![]}];}_0x37595a=_[_0x9ac7('0x31')]({},_0x37595a,_0x5e3963[_0x9ac7('0x32')]);return db[_0x9ac7('0x28')][_0x9ac7('0x33')](_0x37595a)[_0x9ac7('0x20')](handleEntityNotFound(_0x242e06,null))['then'](respondWithResult(_0x242e06,null))[_0x9ac7('0x34')](handleError(_0x242e06,null));};exports[_0x9ac7('0x35')]=function(_0x157d64,_0x1b8650){return db['ChatProactiveAction'][_0x9ac7('0x35')](_0x157d64[_0x9ac7('0x36')],{})['then'](respondWithResult(_0x1b8650,0xc9))['catch'](handleError(_0x1b8650,null));};exports[_0x9ac7('0x37')]=function(_0x2e4984,_0x3bdf73){if(_0x2e4984['body']['id']){delete _0x2e4984[_0x9ac7('0x36')]['id'];}return db[_0x9ac7('0x28')][_0x9ac7('0x33')]({'where':{'id':_0x2e4984[_0x9ac7('0x25')]['id']}})['then'](handleEntityNotFound(_0x3bdf73,null))['then'](saveUpdates(_0x2e4984[_0x9ac7('0x36')],null))['then'](respondWithResult(_0x3bdf73,null))['catch'](handleError(_0x3bdf73,null));};exports[_0x9ac7('0x1f')]=function(_0xe34b4d,_0x3daf89){return db[_0x9ac7('0x28')][_0x9ac7('0x33')]({'where':{'id':_0xe34b4d['params']['id']}})[_0x9ac7('0x20')](handleEntityNotFound(_0x3daf89,null))[_0x9ac7('0x20')](removeEntity(_0x3daf89,null))[_0x9ac7('0x34')](handleError(_0x3daf89,null));};
\ No newline at end of file
index 86b28cc..99e7532 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfc78=['util','../../config/logger','api','moment','request-promise','path','../../config/environment','./chatProactiveAction.attributes','exports','define','ChatProactiveAction','chat_proactive_actions','lodash'];(function(_0x1bfc47,_0x339839){var _0x229ca7=function(_0x5b8868){while(--_0x5b8868){_0x1bfc47['push'](_0x1bfc47['shift']());}};_0x229ca7(++_0x339839);}(_0xfc78,0x192));var _0x8fc7=function(_0x38eb23,_0x196e8b){_0x38eb23=_0x38eb23-0x0;var _0x48506a=_0xfc78[_0x38eb23];return _0x48506a;};'use strict';var _=require(_0x8fc7('0x0'));var util=require(_0x8fc7('0x1'));var logger=require(_0x8fc7('0x2'))(_0x8fc7('0x3'));var moment=require(_0x8fc7('0x4'));var BPromise=require('bluebird');var rp=require(_0x8fc7('0x5'));var fs=require('fs');var path=require(_0x8fc7('0x6'));var rimraf=require('rimraf');var config=require(_0x8fc7('0x7'));var attributes=require(_0x8fc7('0x8'));module[_0x8fc7('0x9')]=function(_0x3f1d78,_0x503f08){return _0x3f1d78[_0x8fc7('0xa')](_0x8fc7('0xb'),attributes,{'tableName':_0x8fc7('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x026e=['lodash','util','../../config/logger','api','moment','request-promise','path','rimraf','../../config/environment','./chatProactiveAction.attributes','exports','define','ChatProactiveAction','chat_proactive_actions'];(function(_0x461d0b,_0x30ed83){var _0x61e04c=function(_0x5114fb){while(--_0x5114fb){_0x461d0b['push'](_0x461d0b['shift']());}};_0x61e04c(++_0x30ed83);}(_0x026e,0x1a4));var _0xe026=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x026e[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0xe026('0x0'));var util=require(_0xe026('0x1'));var logger=require(_0xe026('0x2'))(_0xe026('0x3'));var moment=require(_0xe026('0x4'));var BPromise=require('bluebird');var rp=require(_0xe026('0x5'));var fs=require('fs');var path=require(_0xe026('0x6'));var rimraf=require(_0xe026('0x7'));var config=require(_0xe026('0x8'));var attributes=require(_0xe026('0x9'));module[_0xe026('0xa')]=function(_0x5931f2,_0x12001e){return _0x5931f2[_0xe026('0xb')](_0xe026('0xc'),attributes,{'tableName':_0xe026('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4158f75..a6bc098 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','ChatProactiveAction,\x20%s,\x20%s','request\x20sent','debug','ChatProactiveAction,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x4c50c2,_0x18ce90){var _0xa4e682=function(_0x328bcd){while(--_0x328bcd){_0x4c50c2['push'](_0x4c50c2['shift']());}};_0xa4e682(++_0x18ce90);}(_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']('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
+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(_0x1d5958,_0x45b850){var _0x4db1df=function(_0x2c4bed){while(--_0x2c4bed){_0x1d5958['push'](_0x1d5958['shift']());}};_0x4db1df(++_0x45b850);}(_0xa9e0,0x123));var _0x0a9e=function(_0x47e7cb,_0x4c1b8d){_0x47e7cb=_0x47e7cb-0x0;var _0x2a8874=_0xa9e0[_0x47e7cb];return _0x2a8874;};'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 723d92e..1514e7d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf7d9=['../../components/auth/service','../../config/environment','./chatProactiveAction.controller','get','/:id','isAuthenticated','create','put','update','exports','multer','util','path','connect-timeout'];(function(_0x127726,_0x351c95){var _0x34673d=function(_0x14306a){while(--_0x14306a){_0x127726['push'](_0x127726['shift']());}};_0x34673d(++_0x351c95);}(_0xf7d9,0x122));var _0x9f7d=function(_0xc5f6c4,_0x51df8d){_0xc5f6c4=_0xc5f6c4-0x0;var _0x4b89ec=_0xf7d9[_0xc5f6c4];return _0x4b89ec;};'use strict';var multer=require(_0x9f7d('0x0'));var util=require(_0x9f7d('0x1'));var path=require(_0x9f7d('0x2'));var timeout=require(_0x9f7d('0x3'));var express=require('express');var router=express['Router']();var auth=require(_0x9f7d('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x9f7d('0x5'));var controller=require(_0x9f7d('0x6'));router[_0x9f7d('0x7')](_0x9f7d('0x8'),auth[_0x9f7d('0x9')](),controller['show']);router['post']('/',auth[_0x9f7d('0x9')](),controller[_0x9f7d('0xa')]);router[_0x9f7d('0xb')](_0x9f7d('0x8'),auth[_0x9f7d('0x9')](),controller[_0x9f7d('0xc')]);router['delete'](_0x9f7d('0x8'),auth[_0x9f7d('0x9')](),controller['destroy']);module[_0x9f7d('0xd')]=router;
\ No newline at end of file
+var _0x6a95=['Router','../../components/auth/service','./chatProactiveAction.controller','get','/:id','isAuthenticated','show','post','delete','destroy','exports','multer','util','path','connect-timeout','express'];(function(_0x3797ae,_0x257d56){var _0x43c669=function(_0x51bbc6){while(--_0x51bbc6){_0x3797ae['push'](_0x3797ae['shift']());}};_0x43c669(++_0x257d56);}(_0x6a95,0x1db));var _0x56a9=function(_0xbe200f,_0x4b50eb){_0xbe200f=_0xbe200f-0x0;var _0x192597=_0x6a95[_0xbe200f];return _0x192597;};'use strict';var multer=require(_0x56a9('0x0'));var util=require(_0x56a9('0x1'));var path=require(_0x56a9('0x2'));var timeout=require(_0x56a9('0x3'));var express=require(_0x56a9('0x4'));var router=express[_0x56a9('0x5')]();var auth=require(_0x56a9('0x6'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x56a9('0x7'));router[_0x56a9('0x8')](_0x56a9('0x9'),auth[_0x56a9('0xa')](),controller[_0x56a9('0xb')]);router[_0x56a9('0xc')]('/',auth[_0x56a9('0xa')](),controller['create']);router['put'](_0x56a9('0x9'),auth[_0x56a9('0xa')](),controller['update']);router[_0x56a9('0xd')](_0x56a9('0x9'),auth[_0x56a9('0xa')](),controller[_0x56a9('0xe')]);module[_0x56a9('0xf')]=router;
\ No newline at end of file
index 75b802f..d565d36 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd6b5=['rrmemory','STRING','name','ENUM'];(function(_0x400678,_0x5a4531){var _0x4be88e=function(_0x4b8c62){while(--_0x4b8c62){_0x400678['push'](_0x400678['shift']());}};_0x4be88e(++_0x5a4531);}(_0xd6b5,0x105));var _0x5d6b=function(_0x54ed8c,_0x98ae0b){_0x54ed8c=_0x54ed8c-0x0;var _0x467c41=_0xd6b5[_0x54ed8c];return _0x467c41;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0x5d6b('0x0')],'unique':_0x5d6b('0x1'),'allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x5d6b('0x0')]},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x5d6b('0x2')](_0x5d6b('0x3'),'beepall','roundrobin')}};
\ No newline at end of file
+var _0x6809=['INTEGER','ENUM','beepall','roundrobin','name','STRING'];(function(_0x2b9b7f,_0x4d47df){var _0x4ed19a=function(_0x72b5ff){while(--_0x72b5ff){_0x2b9b7f['push'](_0x2b9b7f['shift']());}};_0x4ed19a(++_0x4d47df);}(_0x6809,0x1de));var _0x9680=function(_0x4dab14,_0x164ea0){_0x4dab14=_0x4dab14-0x0;var _0xf41aa=_0x6809[_0x4dab14];return _0xf41aa;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize['STRING'],'unique':_0x9680('0x0'),'allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x9680('0x1')]},'timeout':{'type':Sequelize[_0x9680('0x2')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x9680('0x3')]('rrmemory',_0x9680('0x4'),_0x9680('0x5'))}};
\ No newline at end of file
index cc590e7..a225699 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffa2=['where','pick','merge','map','type','VIRTUAL','options','findAll','rows','show','params','length','includeAll','include','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','catch','update','describe','getMembers','findOne','UserChatQueue','ChatQueueId','filter','UserId','chatPause','updatedAt','createdAt','format','%s/%s','Team','getTeams','addTeams','teams','User','Agents','voicePause','interface','flatMap','transaction','each','findOrCreate','forEach','emit','removeTeams','ids','select','field','tq.TeamId','team_has_chat_queues','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','ChatQueueId\x20=\x20?','ut.UserId\x20=\x20?','push','sequelize','toString','SELECT','every','all','union','compact','isEmpty','removeAgents','addAgents','userChatQueue:save','isArray','userChatQueue:remove','getAgents','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','redis','defaults','localhost','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','info','ChatQueue,\x20%s,\x20%s','request\x20sent','debug','ChatQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','sendStatus','status','json','count','offset','limit','Content-Range','apply','destroy','get','ChatQueues','end','name','send','index','ChatQueue','rawAttributes','keys','query','filters','intersection','fields','attributes','model','hasOwnProperty','nolimit','order','sort'];(function(_0x4e7dd7,_0x3e7134){var _0x4f4461=function(_0x17aabb){while(--_0x17aabb){_0x4e7dd7['push'](_0x4e7dd7['shift']());}};_0x4f4461(++_0x3e7134);}(_0xffa2,0xe0));var _0x2ffa=function(_0x2599a2,_0x2d46a7){_0x2599a2=_0x2599a2-0x0;var _0x4069c2=_0xffa2[_0x2599a2];return _0x4069c2;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x2ffa('0x0'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x2ffa('0x1'));var rp=require(_0x2ffa('0x2'));var moment=require(_0x2ffa('0x3'));var BPromise=require(_0x2ffa('0x4'));var Mustache=require(_0x2ffa('0x5'));var util=require(_0x2ffa('0x6'));var path=require('path');var sox=require(_0x2ffa('0x7'));var csv=require(_0x2ffa('0x8'));var ejs=require(_0x2ffa('0x9'));var fs=require('fs');var _=require(_0x2ffa('0xa'));var squel=require('squel');var crypto=require(_0x2ffa('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x2ffa('0xc'));var toCsv=require(_0x2ffa('0x8'));var querystring=require(_0x2ffa('0xd'));var Papa=require(_0x2ffa('0xe'));var Redis=require(_0x2ffa('0xf'));var authService=require(_0x2ffa('0x10'));var qs=require(_0x2ffa('0x11'));var hardwareService=require(_0x2ffa('0x12'));var logger=require(_0x2ffa('0x13'))(_0x2ffa('0x14'));var utils=require(_0x2ffa('0x15'));var config=require(_0x2ffa('0x16'));var db=require('../../mysqldb')['db'];config[_0x2ffa('0x17')]=_[_0x2ffa('0x18')](config['redis'],{'host':_0x2ffa('0x19'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x2ffa('0x17')]));require('./chatQueue.socket')[_0x2ffa('0x1a')](socket);var jayson=require(_0x2ffa('0x1b'));var client=jayson['client'][_0x2ffa('0x1c')]({'port':0x232a});function checkPasswordPattern(_0x4b251f,_0x35a289,_0x408a51){if(_0x408a51){var _0x4603e1=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4603e1[_0x2ffa('0x1d')](_0x35a289)){return _0x4b251f;}else{throw new Error(_0x2ffa('0x1e'));}}else{return _0x4b251f;}}function respondWithRpcPromise(_0x4a37c6,_0x273b36,_0x1d6be2,_0x21d8a9){return new BPromise(function(_0x4bbb87,_0x22374a){var _0x3f6c07=_0x21d8a9||client;return _0x3f6c07[_0x2ffa('0x1f')](_0x4a37c6,_0x1d6be2)[_0x2ffa('0x20')](function(_0x1dd8da){logger[_0x2ffa('0x21')](_0x2ffa('0x22'),_0x273b36,_0x2ffa('0x23'));logger[_0x2ffa('0x24')](_0x2ffa('0x25'),_0x273b36,'request\x20sent',JSON[_0x2ffa('0x26')](_0x1dd8da));if(_0x1dd8da['error']){if(_0x1dd8da[_0x2ffa('0x27')][_0x2ffa('0x28')]===0x1f4){logger[_0x2ffa('0x27')](_0x2ffa('0x22'),_0x273b36,_0x1dd8da[_0x2ffa('0x27')][_0x2ffa('0x29')]);return _0x22374a(_0x1dd8da[_0x2ffa('0x27')]['message']);}logger['error'](_0x2ffa('0x22'),_0x273b36,_0x1dd8da[_0x2ffa('0x27')][_0x2ffa('0x29')]);return _0x4bbb87(_0x1dd8da[_0x2ffa('0x27')]['message']);}else{logger[_0x2ffa('0x21')]('ChatQueue,\x20%s,\x20%s',_0x273b36,_0x2ffa('0x23'));_0x4bbb87(_0x1dd8da['result'][_0x2ffa('0x29')]);}})['catch'](function(_0x5ed2d0){logger['error'](_0x2ffa('0x22'),_0x273b36,_0x5ed2d0);_0x22374a(_0x5ed2d0);});});}function respondWithStatusCode(_0x281505,_0xa08cc4){_0xa08cc4=_0xa08cc4||0xcc;return function(_0x170ce9){if(_0x170ce9){return _0x281505[_0x2ffa('0x2a')](_0xa08cc4);}return _0x281505[_0x2ffa('0x2b')](_0xa08cc4)['end']();};}function respondWithResult(_0x108d25,_0x5418ec){_0x5418ec=_0x5418ec||0xc8;return function(_0x12a0bf){if(_0x12a0bf){return _0x108d25[_0x2ffa('0x2b')](_0x5418ec)[_0x2ffa('0x2c')](_0x12a0bf);}};}function respondWithFilteredResult(_0x519e7a,_0x5a189c){return function(_0x22276a){if(_0x22276a){var _0x553c41=_0x22276a[_0x2ffa('0x2d')],_0x3ea4ce=_0x5a189c[_0x2ffa('0x2e')],_0x1c512f=_0x5a189c['offset']+_0x5a189c[_0x2ffa('0x2f')],_0x117b02;if(_0x1c512f>=_0x553c41){_0x1c512f=_0x553c41;_0x117b02=0xc8;}else{_0x117b02=0xce;}_0x519e7a['status'](_0x117b02);return _0x519e7a['set'](_0x2ffa('0x30'),_0x3ea4ce+'-'+_0x1c512f+'/'+_0x553c41)[_0x2ffa('0x2c')](_0x22276a);}return null;};}function patchUpdates(_0xb4822b){return function(_0x51c0a4){try{jsonpatch[_0x2ffa('0x31')](_0x51c0a4,_0xb4822b,!![]);}catch(_0x226a99){return BPromise['reject'](_0x226a99);}return _0x51c0a4['save']();};}function saveUpdates(_0x2a1ae1,_0x2c8eb2){return function(_0x5e6d9e){if(_0x5e6d9e){return _0x5e6d9e['update'](_0x2a1ae1)[_0x2ffa('0x20')](function(_0x3826ee){return _0x3826ee;});}return null;};}function removeEntity(_0x7b6800,_0x21c718){return function(_0x40beff){if(_0x40beff){return _0x40beff[_0x2ffa('0x32')]()[_0x2ffa('0x20')](function(){var _0x9e0c4f=_0x40beff[_0x2ffa('0x33')]({'plain':!![]});var _0x20c8bc=_0x2ffa('0x34');return db['UserProfileResource']['destroy']({'where':{'type':_0x20c8bc,'resourceId':_0x9e0c4f['id']}})[_0x2ffa('0x20')](function(){return _0x40beff;});})[_0x2ffa('0x20')](function(){_0x7b6800['status'](0xcc)[_0x2ffa('0x35')]();});}};}function handleEntityNotFound(_0xc09ba8,_0x1d8ee6){return function(_0x41cd6c){if(!_0x41cd6c){_0xc09ba8[_0x2ffa('0x2a')](0x194);}return _0x41cd6c;};}function handleError(_0x436766,_0x3f40dd){_0x3f40dd=_0x3f40dd||0x1f4;return function(_0x37b567){logger[_0x2ffa('0x27')](_0x37b567['stack']);if(_0x37b567[_0x2ffa('0x36')]){delete _0x37b567['name'];}_0x436766[_0x2ffa('0x2b')](_0x3f40dd)[_0x2ffa('0x37')](_0x37b567);};}exports[_0x2ffa('0x38')]=function(_0x1d032e,_0x493344){var _0x4b337e={},_0x26b896={},_0x9473b4={'count':0x0,'rows':[]};var _0x534fe0=db[_0x2ffa('0x39')][_0x2ffa('0x3a')];_0x26b896['model']=_[_0x2ffa('0x3b')](_0x534fe0);_0x26b896[_0x2ffa('0x3c')]=_[_0x2ffa('0x3b')](_0x1d032e['query']);_0x26b896[_0x2ffa('0x3d')]=_[_0x2ffa('0x3e')](_0x26b896['model'],_0x26b896['query']);_0x4b337e['attributes']=_[_0x2ffa('0x3e')](_0x26b896['model'],qs[_0x2ffa('0x3f')](_0x1d032e[_0x2ffa('0x3c')][_0x2ffa('0x3f')]));_0x4b337e[_0x2ffa('0x40')]=_0x4b337e[_0x2ffa('0x40')]['length']?_0x4b337e[_0x2ffa('0x40')]:_0x26b896[_0x2ffa('0x41')];if(!_0x1d032e['query'][_0x2ffa('0x42')](_0x2ffa('0x43'))){_0x4b337e[_0x2ffa('0x2f')]=qs[_0x2ffa('0x2f')](_0x1d032e[_0x2ffa('0x3c')][_0x2ffa('0x2f')]);_0x4b337e[_0x2ffa('0x2e')]=qs[_0x2ffa('0x2e')](_0x1d032e[_0x2ffa('0x3c')]['offset']);}_0x4b337e[_0x2ffa('0x44')]=qs[_0x2ffa('0x45')](_0x1d032e[_0x2ffa('0x3c')][_0x2ffa('0x45')]);_0x4b337e[_0x2ffa('0x46')]=qs[_0x2ffa('0x3d')](_[_0x2ffa('0x47')](_0x1d032e[_0x2ffa('0x3c')],_0x26b896['filters']));if(_0x1d032e[_0x2ffa('0x3c')]['filter']){_0x4b337e['where']=_[_0x2ffa('0x48')](_0x4b337e[_0x2ffa('0x46')],{'$or':_[_0x2ffa('0x49')](_0x534fe0,function(_0x22ac4e){if(_0x22ac4e[_0x2ffa('0x4a')]['key']!==_0x2ffa('0x4b')){var _0x23e91c={};_0x23e91c[_0x22ac4e['field']]={'$like':'%'+_0x1d032e[_0x2ffa('0x3c')]['filter']+'%'};return _0x23e91c;}})});}_0x4b337e=_['merge']({},_0x4b337e,_0x1d032e[_0x2ffa('0x4c')]);var _0x5d266a={'where':_0x4b337e[_0x2ffa('0x46')]};return db[_0x2ffa('0x39')][_0x2ffa('0x2d')](_0x5d266a)[_0x2ffa('0x20')](function(_0x32cad3){_0x9473b4[_0x2ffa('0x2d')]=_0x32cad3;if(_0x1d032e[_0x2ffa('0x3c')]['includeAll']){_0x4b337e['include']=[{'all':!![]}];}return db[_0x2ffa('0x39')][_0x2ffa('0x4d')](_0x4b337e);})[_0x2ffa('0x20')](function(_0x5f0b39){_0x9473b4[_0x2ffa('0x4e')]=_0x5f0b39;return _0x9473b4;})['then'](respondWithFilteredResult(_0x493344,_0x4b337e))['catch'](handleError(_0x493344,null));};exports[_0x2ffa('0x4f')]=function(_0x34f801,_0x89b96c){var _0x57770c={'raw':!![],'where':{'id':_0x34f801[_0x2ffa('0x50')]['id']}},_0x3d9d05={};_0x3d9d05[_0x2ffa('0x41')]=_['keys'](db[_0x2ffa('0x39')][_0x2ffa('0x3a')]);_0x3d9d05[_0x2ffa('0x3c')]=_[_0x2ffa('0x3b')](_0x34f801[_0x2ffa('0x3c')]);_0x3d9d05[_0x2ffa('0x3d')]=_['intersection'](_0x3d9d05['model'],_0x3d9d05[_0x2ffa('0x3c')]);_0x57770c['attributes']=_[_0x2ffa('0x3e')](_0x3d9d05['model'],qs[_0x2ffa('0x3f')](_0x34f801['query']['fields']));_0x57770c[_0x2ffa('0x40')]=_0x57770c[_0x2ffa('0x40')][_0x2ffa('0x51')]?_0x57770c[_0x2ffa('0x40')]:_0x3d9d05[_0x2ffa('0x41')];if(_0x34f801['query'][_0x2ffa('0x52')]){_0x57770c[_0x2ffa('0x53')]=[{'all':!![]}];}_0x57770c=_[_0x2ffa('0x48')]({},_0x57770c,_0x34f801[_0x2ffa('0x4c')]);return db['ChatQueue'][_0x2ffa('0x54')](_0x57770c)['then'](handleEntityNotFound(_0x89b96c,null))[_0x2ffa('0x20')](respondWithResult(_0x89b96c,null))['catch'](handleError(_0x89b96c,null));};exports[_0x2ffa('0x55')]=function(_0x3132b5,_0x588a41){return db[_0x2ffa('0x39')][_0x2ffa('0x55')](_0x3132b5[_0x2ffa('0x56')],{})[_0x2ffa('0x20')](function(_0x3ee615){var _0x35df17=_0x3132b5[_0x2ffa('0x57')]['get']({'plain':!![]});if(!_0x35df17)throw new Error(_0x2ffa('0x58'));if(_0x35df17[_0x2ffa('0x59')]===_0x2ffa('0x57')){var _0x51147b=_0x3ee615[_0x2ffa('0x33')]({'plain':!![]});var _0x2c4877=_0x2ffa('0x34');return db[_0x2ffa('0x5a')]['find']({'where':{'name':_0x2c4877,'userProfileId':_0x35df17[_0x2ffa('0x5b')]},'raw':!![]})[_0x2ffa('0x20')](function(_0x57f335){if(_0x57f335&&_0x57f335[_0x2ffa('0x5c')]===0x0){return db[_0x2ffa('0x5d')][_0x2ffa('0x55')]({'name':_0x51147b[_0x2ffa('0x36')],'resourceId':_0x51147b['id'],'type':_0x57f335['name'],'sectionId':_0x57f335['id']},{})[_0x2ffa('0x20')](function(){return _0x3ee615;});}else{return _0x3ee615;}})[_0x2ffa('0x5e')](function(_0x8b2955){logger[_0x2ffa('0x27')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x8b2955);throw _0x8b2955;});}return _0x3ee615;})[_0x2ffa('0x20')](respondWithResult(_0x588a41,0xc9))[_0x2ffa('0x5e')](handleError(_0x588a41,null));};exports[_0x2ffa('0x5f')]=function(_0xd43a1,_0x45a15b){if(_0xd43a1['body']['id']){delete _0xd43a1[_0x2ffa('0x56')]['id'];}return db[_0x2ffa('0x39')][_0x2ffa('0x54')]({'where':{'id':_0xd43a1[_0x2ffa('0x50')]['id']}})[_0x2ffa('0x20')](handleEntityNotFound(_0x45a15b,null))[_0x2ffa('0x20')](saveUpdates(_0xd43a1['body'],null))[_0x2ffa('0x20')](respondWithResult(_0x45a15b,null))['catch'](handleError(_0x45a15b,null));};exports[_0x2ffa('0x32')]=function(_0xc20064,_0x40d770){return db['ChatQueue'][_0x2ffa('0x54')]({'where':{'id':_0xc20064['params']['id']}})[_0x2ffa('0x20')](handleEntityNotFound(_0x40d770,null))[_0x2ffa('0x20')](removeEntity(_0x40d770,null))[_0x2ffa('0x5e')](handleError(_0x40d770,null));};exports[_0x2ffa('0x60')]=function(_0x3fdd42,_0x499c1f){return db[_0x2ffa('0x39')]['describe']()[_0x2ffa('0x20')](respondWithResult(_0x499c1f,null))['catch'](handleError(_0x499c1f,null));};exports[_0x2ffa('0x61')]=function(_0x14c282,_0x17c82f,_0x2be88d){var _0xfe4cc2={'raw':!![],'where':{}},_0x5ea10f={},_0x29d7fb;return db[_0x2ffa('0x39')][_0x2ffa('0x62')]({'where':{'id':_0x14c282['params']['id']}})[_0x2ffa('0x20')](handleEntityNotFound(_0x17c82f,null))['then'](function(_0x59e3ca){if(_0x59e3ca){_0x29d7fb=_0x59e3ca[_0x2ffa('0x33')]({'plain':!![]});_0x5ea10f[_0x2ffa('0x41')]=_[_0x2ffa('0x3b')](db[_0x2ffa('0x63')]['rawAttributes']);_0x5ea10f['query']=_[_0x2ffa('0x3b')](_0x14c282[_0x2ffa('0x3c')]);_0x5ea10f[_0x2ffa('0x3d')]=_[_0x2ffa('0x3e')](_0x5ea10f['model'],_0x5ea10f['query']);_0xfe4cc2[_0x2ffa('0x40')]=_['intersection'](_0x5ea10f[_0x2ffa('0x41')],qs[_0x2ffa('0x3f')](_0x14c282['query'][_0x2ffa('0x3f')]));_0xfe4cc2[_0x2ffa('0x40')]=_0xfe4cc2[_0x2ffa('0x40')][_0x2ffa('0x51')]?_0xfe4cc2[_0x2ffa('0x40')]:_0x5ea10f[_0x2ffa('0x41')];if(!_0x14c282[_0x2ffa('0x3c')][_0x2ffa('0x42')](_0x2ffa('0x43'))){_0xfe4cc2[_0x2ffa('0x2f')]=qs[_0x2ffa('0x2f')](_0x14c282['query'][_0x2ffa('0x2f')]);_0xfe4cc2['offset']=qs[_0x2ffa('0x2e')](_0x14c282[_0x2ffa('0x3c')][_0x2ffa('0x2e')]);}_0xfe4cc2[_0x2ffa('0x44')]=qs[_0x2ffa('0x45')](_0x14c282[_0x2ffa('0x3c')][_0x2ffa('0x45')]);_0xfe4cc2[_0x2ffa('0x46')]=qs[_0x2ffa('0x3d')](_[_0x2ffa('0x47')](_0x14c282[_0x2ffa('0x3c')],_0x5ea10f[_0x2ffa('0x3d')]));_0xfe4cc2[_0x2ffa('0x46')][_0x2ffa('0x64')]=_0x59e3ca['id'];if(_0x14c282[_0x2ffa('0x3c')][_0x2ffa('0x65')]){_0xfe4cc2[_0x2ffa('0x46')]=_[_0x2ffa('0x48')](_0xfe4cc2[_0x2ffa('0x46')],{'$or':_[_0x2ffa('0x49')](_0xfe4cc2[_0x2ffa('0x40')],function(_0x42ca02){var _0x189f40={};_0x189f40[_0x42ca02]={'$like':'%'+_0x14c282[_0x2ffa('0x3c')][_0x2ffa('0x65')]+'%'};return _0x189f40;})});}_0xfe4cc2=_[_0x2ffa('0x48')]({},_0xfe4cc2,_0x14c282['options']);return db[_0x2ffa('0x63')][_0x2ffa('0x4d')](_0xfe4cc2);}})[_0x2ffa('0x20')](function(_0x1203ab){if(_0x1203ab){return db['User']['findAndCountAll']({'where':{'id':_[_0x2ffa('0x49')](_0x1203ab,_0x2ffa('0x66')),'role':'agent'},'attributes':['id','name',_0x2ffa('0x67'),_0x2ffa('0x68'),_0x2ffa('0x69')]});}})[_0x2ffa('0x20')](function(_0x58a442){if(_0x58a442){return{'count':_0x58a442[_0x2ffa('0x2d')],'rows':_['map'](_0x58a442[_0x2ffa('0x4e')],function(_0x4f1730){return{'membername':_0x4f1730['name'],'UserId':_0x4f1730['id'],'queue_name':_0x29d7fb[_0x2ffa('0x36')],'ChatQueueId':_0x29d7fb['id'],'interface':util[_0x2ffa('0x6a')](_0x2ffa('0x6b'),'SIP',_0x4f1730['name']),'penalty':0x0,'paused':_0x4f1730[_0x2ffa('0x67')],'createdAt':_0x4f1730[_0x2ffa('0x69')],'updatedAt':_0x4f1730['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})[_0x2ffa('0x20')](respondWithFilteredResult(_0x17c82f,_0xfe4cc2))[_0x2ffa('0x5e')](handleError(_0x17c82f,null));};exports['getTeams']=function(_0x22159b,_0xadcf83,_0x5e593c){var _0x278efe={};var _0x3bf392={};var _0x2d7694;var _0x346179;return db['ChatQueue']['findOne']({'where':{'id':_0x22159b[_0x2ffa('0x50')]['id']}})[_0x2ffa('0x20')](handleEntityNotFound(_0xadcf83,null))[_0x2ffa('0x20')](function(_0x2d8fd5){if(_0x2d8fd5){_0x2d7694=_0x2d8fd5;_0x3bf392[_0x2ffa('0x41')]=_[_0x2ffa('0x3b')](db[_0x2ffa('0x6c')][_0x2ffa('0x3a')]);_0x3bf392['query']=_[_0x2ffa('0x3b')](_0x22159b[_0x2ffa('0x3c')]);_0x3bf392[_0x2ffa('0x3d')]=_['intersection'](_0x3bf392[_0x2ffa('0x41')],_0x3bf392[_0x2ffa('0x3c')]);_0x278efe[_0x2ffa('0x40')]=_[_0x2ffa('0x3e')](_0x3bf392[_0x2ffa('0x41')],qs[_0x2ffa('0x3f')](_0x22159b[_0x2ffa('0x3c')][_0x2ffa('0x3f')]));_0x278efe[_0x2ffa('0x40')]=_0x278efe[_0x2ffa('0x40')][_0x2ffa('0x51')]?_0x278efe[_0x2ffa('0x40')]:_0x3bf392[_0x2ffa('0x41')];_0x278efe[_0x2ffa('0x44')]=qs[_0x2ffa('0x45')](_0x22159b[_0x2ffa('0x3c')][_0x2ffa('0x45')]);_0x278efe[_0x2ffa('0x46')]=qs[_0x2ffa('0x3d')](_['pick'](_0x22159b['query'],_0x3bf392[_0x2ffa('0x3d')]));if(_0x22159b[_0x2ffa('0x3c')]['filter']){_0x278efe[_0x2ffa('0x46')]=_[_0x2ffa('0x48')](_0x278efe[_0x2ffa('0x46')],{'$or':_[_0x2ffa('0x49')](_0x278efe[_0x2ffa('0x40')],function(_0x54c639){var _0x27fd2d={};_0x27fd2d[_0x54c639]={'$like':'%'+_0x22159b['query']['filter']+'%'};return _0x27fd2d;})});}_0x278efe=_[_0x2ffa('0x48')]({},_0x278efe,_0x22159b[_0x2ffa('0x4c')]);return _0x2d7694[_0x2ffa('0x6d')](_0x278efe);}})['then'](function(_0x41be1b){if(_0x41be1b){_0x346179=_0x41be1b['length'];if(!_0x22159b[_0x2ffa('0x3c')]['hasOwnProperty'](_0x2ffa('0x43'))){_0x278efe[_0x2ffa('0x2f')]=qs[_0x2ffa('0x2f')](_0x22159b[_0x2ffa('0x3c')][_0x2ffa('0x2f')]);_0x278efe[_0x2ffa('0x2e')]=qs[_0x2ffa('0x2e')](_0x22159b[_0x2ffa('0x3c')][_0x2ffa('0x2e')]);}return _0x2d7694[_0x2ffa('0x6d')](_0x278efe);}})[_0x2ffa('0x20')](function(_0x3a1df9){if(_0x3a1df9){return _0x3a1df9?{'count':_0x346179,'rows':_0x3a1df9}:null;}})[_0x2ffa('0x20')](respondWithResult(_0xadcf83,null))[_0x2ffa('0x5e')](handleError(_0xadcf83,null));};exports[_0x2ffa('0x6e')]=function(_0x2ca0d3,_0x40e065,_0x478717){var _0x419419=_0x2ca0d3[_0x2ffa('0x56')][_0x2ffa('0x6f')];return db[_0x2ffa('0x6c')][_0x2ffa('0x4d')]({'where':{'id':_['map'](_0x419419,'id')},'attributes':['id'],'include':[{'model':db[_0x2ffa('0x70')],'as':_0x2ffa('0x71'),'attributes':['id','name','online',_0x2ffa('0x72'),_0x2ffa('0x73')],'raw':!![]}]})['then'](function(_0x58f863){if(_0x58f863){var _0x472a50=_[_0x2ffa('0x74')](_0x58f863,function(_0x316afc){var _0x1b5386=_0x316afc[_0x2ffa('0x33')]({'plain':!![]});return _0x1b5386['Agents'];});return db[_0x2ffa('0x39')]['find']({'where':{'id':_0x2ca0d3[_0x2ffa('0x50')]['id']}})[_0x2ffa('0x20')](function(_0x20c028){return db['sequelize'][_0x2ffa('0x75')](function(_0x17b68b){return _0x20c028['addTeams'](_[_0x2ffa('0x49')](_0x419419,'id'),{'transaction':_0x17b68b})[_0x2ffa('0x20')](function(){return BPromise[_0x2ffa('0x76')](_0x472a50,function(_0x212432){return db['UserChatQueue'][_0x2ffa('0x77')]({'where':{'UserId':_0x212432['id'],'ChatQueueId':_0x2ca0d3[_0x2ffa('0x50')]['id']},'transaction':_0x17b68b});});})[_0x2ffa('0x20')](function(){_0x472a50[_0x2ffa('0x78')](function(_0x3ad161){socket[_0x2ffa('0x79')]('userChatQueue:save',{'UserId':_0x3ad161['id'],'ChatQueueId':_0x20c028['id']});});});});});}})['then'](respondWithStatusCode(_0x40e065,null))[_0x2ffa('0x5e')](handleError(_0x40e065,null));};exports[_0x2ffa('0x7a')]=function(_0x40aa10,_0x559c5a,_0x2bf6d5){return db[_0x2ffa('0x6c')][_0x2ffa('0x4d')]({'where':{'id':_0x40aa10[_0x2ffa('0x3c')][_0x2ffa('0x7b')]},'attributes':['id'],'include':[{'model':db[_0x2ffa('0x70')],'as':_0x2ffa('0x71'),'attributes':['id'],'raw':!![]}]})[_0x2ffa('0x20')](handleEntityNotFound(_0x559c5a,null))[_0x2ffa('0x20')](function(_0x33ab7e){var _0x17a1d2=_[_0x2ffa('0x49')](_0x33ab7e,'id');var _0x3e9f20=[];var _0x35d8df=[];var _0x4b8bfd=squel[_0x2ffa('0x7c')]();_0x4b8bfd[_0x2ffa('0x7d')](_0x2ffa('0x7e'))['from'](_0x2ffa('0x7f'),'tq')['join'](_0x2ffa('0x80'),'ut',_0x2ffa('0x81'))[_0x2ffa('0x46')](_0x2ffa('0x82'),_0x40aa10[_0x2ffa('0x50')]['id']);for(var _0x258487=0x0;_0x258487<_0x33ab7e['length'];_0x258487+=0x1){let _0x148002=_0x33ab7e[_0x258487];for(var _0x4b6629=0x0;_0x4b6629<_0x148002[_0x2ffa('0x71')][_0x2ffa('0x51')];_0x4b6629+=0x1){let _0x341210=_0x148002['Agents'][_0x4b6629];var _0x3a955c=_0x4b8bfd['clone']();_0x3a955c[_0x2ffa('0x46')](_0x2ffa('0x83'),_0x341210['id']);_0x35d8df[_0x2ffa('0x84')](db[_0x2ffa('0x85')][_0x2ffa('0x3c')](_0x3a955c[_0x2ffa('0x86')](),{'type':db[_0x2ffa('0x85')]['QueryTypes'][_0x2ffa('0x87')]})[_0x2ffa('0x20')](function(_0x2288a6){if(_0x2288a6[_0x2ffa('0x51')]===0x1){return _0x341210['id'];}else{var _0x47d0f3=_[_0x2ffa('0x88')](_[_0x2ffa('0x49')](_0x2288a6,'TeamId'),function(_0x10ecd5){return _['includes'](_0x17a1d2,_0x10ecd5);});if(_0x47d0f3){return _0x341210['id'];}}}));}}return BPromise[_0x2ffa('0x89')](_0x35d8df)[_0x2ffa('0x20')](function(_0x5a3ca9){_0x3e9f20=_(_0x3e9f20)[_0x2ffa('0x8a')](_0x5a3ca9)[_0x2ffa('0x8b')]()['value']();return db[_0x2ffa('0x39')][_0x2ffa('0x54')]({'where':{'id':_0x40aa10['params']['id']}})[_0x2ffa('0x20')](function(_0x23bf63){return db[_0x2ffa('0x85')][_0x2ffa('0x75')](function(_0x54c634){return _0x23bf63[_0x2ffa('0x7a')](_0x40aa10['query'][_0x2ffa('0x7b')],{'transaction':_0x54c634})[_0x2ffa('0x20')](function(){if(!_[_0x2ffa('0x8c')](_0x3e9f20)){return _0x23bf63[_0x2ffa('0x8d')](_0x3e9f20,{'transaction':_0x54c634});}})[_0x2ffa('0x20')](function(){_0x3e9f20[_0x2ffa('0x78')](function(_0x3608f5){socket[_0x2ffa('0x79')]('userChatQueue:remove',{'UserId':_0x3608f5,'ChatQueueId':_0x23bf63['id']});});});});});});})['then'](respondWithStatusCode(_0x559c5a,null))[_0x2ffa('0x5e')](handleError(_0x559c5a,null));};exports[_0x2ffa('0x8e')]=function(_0x17d136,_0x5ee7e1,_0x240478){return db[_0x2ffa('0x39')][_0x2ffa('0x54')]({'where':{'id':_0x17d136[_0x2ffa('0x50')]['id']}})['then'](handleEntityNotFound(_0x5ee7e1,null))[_0x2ffa('0x20')](function(_0x531994){if(_0x531994){return _0x531994[_0x2ffa('0x8e')](_0x17d136[_0x2ffa('0x56')]['ids'],_['omit'](_0x17d136['body'],[_0x2ffa('0x7b'),'id'])||{})['spread'](function(_0x272b07){for(var _0x1edafb=0x0;_0x1edafb<_0x17d136['body'][_0x2ffa('0x7b')][_0x2ffa('0x51')];_0x1edafb+=0x1){socket[_0x2ffa('0x79')](_0x2ffa('0x8f'),{'UserId':_0x17d136[_0x2ffa('0x56')]['ids'][_0x1edafb],'ChatQueueId':_0x17d136[_0x2ffa('0x50')]['id']});}return _0x272b07;});}})[_0x2ffa('0x20')](respondWithResult(_0x5ee7e1,null))[_0x2ffa('0x5e')](handleError(_0x5ee7e1,null));};exports[_0x2ffa('0x8d')]=function(_0x5d9156,_0x53fd65,_0x45413e){return db[_0x2ffa('0x39')][_0x2ffa('0x54')]({'where':{'id':_0x5d9156[_0x2ffa('0x50')]['id']}})[_0x2ffa('0x20')](handleEntityNotFound(_0x53fd65,null))[_0x2ffa('0x20')](function(_0x51ca80){if(_0x51ca80){return _0x51ca80[_0x2ffa('0x8d')](_0x5d9156[_0x2ffa('0x3c')]['ids'])[_0x2ffa('0x20')](function(){if(_[_0x2ffa('0x90')](_0x5d9156['query']['ids'])){for(var _0x35dec1=0x0;_0x35dec1<_0x5d9156[_0x2ffa('0x3c')][_0x2ffa('0x7b')]['length'];_0x35dec1+=0x1){socket[_0x2ffa('0x79')](_0x2ffa('0x91'),{'UserId':Number(_0x5d9156[_0x2ffa('0x3c')][_0x2ffa('0x7b')][_0x35dec1]),'ChatQueueId':Number(_0x5d9156[_0x2ffa('0x50')]['id'])});}}else{socket['emit']('userChatQueue:remove',{'UserId':Number(_0x5d9156[_0x2ffa('0x3c')][_0x2ffa('0x7b')]),'ChatQueueId':Number(_0x5d9156[_0x2ffa('0x50')]['id'])});}});}})[_0x2ffa('0x20')](respondWithStatusCode(_0x53fd65,null))[_0x2ffa('0x5e')](handleError(_0x53fd65,null));};exports[_0x2ffa('0x92')]=function(_0x3f70b2,_0x146b5b,_0x1e402f){var _0x38fd24={};var _0x2bd79c={};var _0x54ab22;var _0x2ed5c;return db[_0x2ffa('0x39')]['findOne']({'where':{'id':_0x3f70b2[_0x2ffa('0x50')]['id']}})['then'](handleEntityNotFound(_0x146b5b,null))['then'](function(_0x344e29){if(_0x344e29){_0x54ab22=_0x344e29;_0x2bd79c['model']=_[_0x2ffa('0x3b')](db[_0x2ffa('0x70')][_0x2ffa('0x3a')]);_0x2bd79c['query']=_['keys'](_0x3f70b2[_0x2ffa('0x3c')]);_0x2bd79c[_0x2ffa('0x3d')]=_[_0x2ffa('0x3e')](_0x2bd79c[_0x2ffa('0x41')],_0x2bd79c[_0x2ffa('0x3c')]);_0x38fd24['attributes']=_[_0x2ffa('0x3e')](_0x2bd79c['model'],qs[_0x2ffa('0x3f')](_0x3f70b2[_0x2ffa('0x3c')][_0x2ffa('0x3f')]));_0x38fd24['attributes']=_0x38fd24[_0x2ffa('0x40')]['length']?_0x38fd24[_0x2ffa('0x40')]:_0x2bd79c[_0x2ffa('0x41')];_0x38fd24[_0x2ffa('0x44')]=qs['sort'](_0x3f70b2['query'][_0x2ffa('0x45')]);_0x38fd24['where']=qs[_0x2ffa('0x3d')](_[_0x2ffa('0x47')](_0x3f70b2[_0x2ffa('0x3c')],_0x2bd79c['filters']));if(_0x3f70b2['query'][_0x2ffa('0x65')]){_0x38fd24[_0x2ffa('0x46')]=_[_0x2ffa('0x48')](_0x38fd24[_0x2ffa('0x46')],{'$or':_[_0x2ffa('0x49')](_0x38fd24['attributes'],function(_0x19cfb3){var _0x3bd0e6={};_0x3bd0e6[_0x19cfb3]={'$like':'%'+_0x3f70b2[_0x2ffa('0x3c')][_0x2ffa('0x65')]+'%'};return _0x3bd0e6;})});}_0x38fd24=_[_0x2ffa('0x48')]({},_0x38fd24,_0x3f70b2['options']);return _0x54ab22[_0x2ffa('0x92')](_0x38fd24);}})['then'](function(_0x4fd05e){if(_0x4fd05e){_0x2ed5c=_0x4fd05e[_0x2ffa('0x51')];if(!_0x3f70b2[_0x2ffa('0x3c')][_0x2ffa('0x42')]('nolimit')){_0x38fd24[_0x2ffa('0x2f')]=qs[_0x2ffa('0x2f')](_0x3f70b2[_0x2ffa('0x3c')][_0x2ffa('0x2f')]);_0x38fd24[_0x2ffa('0x2e')]=qs[_0x2ffa('0x2e')](_0x3f70b2['query']['offset']);}return _0x54ab22['getAgents'](_0x38fd24);}})[_0x2ffa('0x20')](function(_0x1e8a25){if(_0x1e8a25){return _0x1e8a25?{'count':_0x2ed5c,'rows':_0x1e8a25}:null;}})['then'](respondWithResult(_0x146b5b,null))['catch'](handleError(_0x146b5b,null));};
\ No newline at end of file
+var _0xc56d=['sequelize','transaction','each','forEach','emit','removeTeams','Team','ids','field','tq.TeamId','from','team_has_chat_queues','join','ut.TeamId\x20=\x20tq.TeamId','ChatQueueId\x20=\x20?','clone','ut.UserId\x20=\x20?','push','toString','QueryTypes','SELECT','TeamId','includes','all','union','compact','isEmpty','removeAgents','addAgents','omit','userChatQueue:save','isArray','userChatQueue:remove','getAgents','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','defaults','redis','socket.io-emitter','./chatQueue.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','then','info','debug','error','code','ChatQueue,\x20%s,\x20%s','message','request\x20sent','result','catch','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','get','ChatQueues','UserProfileResource','destroy','sendStatus','stack','name','send','index','ChatQueue','rawAttributes','model','keys','filters','intersection','attributes','fields','query','length','hasOwnProperty','order','sort','where','pick','filter','merge','map','key','VIRTUAL','options','includeAll','include','findAll','rows','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','find','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','describe','UserChatQueue','nolimit','ChatQueueId','User','UserId','agent','chatPause','updatedAt','createdAt','%s/%s','SIP','getTeams','findOne','addTeams','teams','Agents','online','voicePause','interface','flatMap'];(function(_0x33d832,_0x1a7375){var _0x43a6d6=function(_0xe5e2cd){while(--_0xe5e2cd){_0x33d832['push'](_0x33d832['shift']());}};_0x43a6d6(++_0x1a7375);}(_0xc56d,0xc0));var _0xdc56=function(_0x293de7,_0x5e3188){_0x293de7=_0x293de7-0x0;var _0x4d29de=_0xc56d[_0x293de7];return _0x4d29de;};'use strict';var pdf=require(_0xdc56('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xdc56('0x1'));var zipdir=require(_0xdc56('0x2'));var jsonpatch=require(_0xdc56('0x3'));var rp=require(_0xdc56('0x4'));var moment=require(_0xdc56('0x5'));var BPromise=require(_0xdc56('0x6'));var Mustache=require(_0xdc56('0x7'));var util=require(_0xdc56('0x8'));var path=require(_0xdc56('0x9'));var sox=require(_0xdc56('0xa'));var csv=require(_0xdc56('0xb'));var ejs=require(_0xdc56('0xc'));var fs=require('fs');var _=require(_0xdc56('0xd'));var squel=require(_0xdc56('0xe'));var crypto=require('crypto');var jsforce=require(_0xdc56('0xf'));var deskjs=require(_0xdc56('0x10'));var toCsv=require(_0xdc56('0xb'));var querystring=require(_0xdc56('0x11'));var Papa=require(_0xdc56('0x12'));var Redis=require(_0xdc56('0x13'));var authService=require(_0xdc56('0x14'));var qs=require(_0xdc56('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xdc56('0x16'));var utils=require(_0xdc56('0x17'));var config=require(_0xdc56('0x18'));var db=require(_0xdc56('0x19'))['db'];config['redis']=_[_0xdc56('0x1a')](config[_0xdc56('0x1b')],{'host':'localhost','port':0x18eb});var socket=require(_0xdc56('0x1c'))(new Redis(config[_0xdc56('0x1b')]));require(_0xdc56('0x1d'))[_0xdc56('0x1e')](socket);var jayson=require(_0xdc56('0x1f'));var client=jayson[_0xdc56('0x20')][_0xdc56('0x21')]({'port':0x232a});function checkPasswordPattern(_0x4eb528,_0x3d980e,_0x15695a){if(_0x15695a){var _0x59804b=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x59804b[_0xdc56('0x22')](_0x3d980e)){return _0x4eb528;}else{throw new Error(_0xdc56('0x23'));}}else{return _0x4eb528;}}function respondWithRpcPromise(_0xb82a80,_0x541f5f,_0x5411f8,_0x171e99){return new BPromise(function(_0x17ff63,_0x48d754){var _0x59433a=_0x171e99||client;return _0x59433a[_0xdc56('0x24')](_0xb82a80,_0x5411f8)[_0xdc56('0x25')](function(_0x1a3d7f){logger[_0xdc56('0x26')]('ChatQueue,\x20%s,\x20%s',_0x541f5f,'request\x20sent');logger[_0xdc56('0x27')]('ChatQueue,\x20%s,\x20%s,\x20%s',_0x541f5f,'request\x20sent',JSON['stringify'](_0x1a3d7f));if(_0x1a3d7f[_0xdc56('0x28')]){if(_0x1a3d7f[_0xdc56('0x28')][_0xdc56('0x29')]===0x1f4){logger[_0xdc56('0x28')](_0xdc56('0x2a'),_0x541f5f,_0x1a3d7f['error'][_0xdc56('0x2b')]);return _0x48d754(_0x1a3d7f[_0xdc56('0x28')]['message']);}logger[_0xdc56('0x28')](_0xdc56('0x2a'),_0x541f5f,_0x1a3d7f['error'][_0xdc56('0x2b')]);return _0x17ff63(_0x1a3d7f[_0xdc56('0x28')][_0xdc56('0x2b')]);}else{logger[_0xdc56('0x26')](_0xdc56('0x2a'),_0x541f5f,_0xdc56('0x2c'));_0x17ff63(_0x1a3d7f[_0xdc56('0x2d')][_0xdc56('0x2b')]);}})[_0xdc56('0x2e')](function(_0x50737d){logger['error'](_0xdc56('0x2a'),_0x541f5f,_0x50737d);_0x48d754(_0x50737d);});});}function respondWithStatusCode(_0x4e74c4,_0x458b31){_0x458b31=_0x458b31||0xcc;return function(_0x593a68){if(_0x593a68){return _0x4e74c4['sendStatus'](_0x458b31);}return _0x4e74c4['status'](_0x458b31)[_0xdc56('0x2f')]();};}function respondWithResult(_0x232b14,_0x30096f){_0x30096f=_0x30096f||0xc8;return function(_0x19217b){if(_0x19217b){return _0x232b14[_0xdc56('0x30')](_0x30096f)[_0xdc56('0x31')](_0x19217b);}};}function respondWithFilteredResult(_0x638ead,_0x59e815){return function(_0xd08607){if(_0xd08607){var _0x42a39b=_0xd08607[_0xdc56('0x32')],_0x2c54ac=_0x59e815[_0xdc56('0x33')],_0x130eaf=_0x59e815[_0xdc56('0x33')]+_0x59e815[_0xdc56('0x34')],_0x4dbb7a;if(_0x130eaf>=_0x42a39b){_0x130eaf=_0x42a39b;_0x4dbb7a=0xc8;}else{_0x4dbb7a=0xce;}_0x638ead[_0xdc56('0x30')](_0x4dbb7a);return _0x638ead[_0xdc56('0x35')](_0xdc56('0x36'),_0x2c54ac+'-'+_0x130eaf+'/'+_0x42a39b)[_0xdc56('0x31')](_0xd08607);}return null;};}function patchUpdates(_0x2cf299){return function(_0x27d2f8){try{jsonpatch[_0xdc56('0x37')](_0x27d2f8,_0x2cf299,!![]);}catch(_0x4b3b2b){return BPromise[_0xdc56('0x38')](_0x4b3b2b);}return _0x27d2f8[_0xdc56('0x39')]();};}function saveUpdates(_0x586dee,_0x24a724){return function(_0x46b56b){if(_0x46b56b){return _0x46b56b[_0xdc56('0x3a')](_0x586dee)['then'](function(_0x5a3be4){return _0x5a3be4;});}return null;};}function removeEntity(_0xb149ba,_0x4965b5){return function(_0x5a197a){if(_0x5a197a){return _0x5a197a['destroy']()[_0xdc56('0x25')](function(){var _0x1e82f7=_0x5a197a[_0xdc56('0x3b')]({'plain':!![]});var _0x4cd760=_0xdc56('0x3c');return db[_0xdc56('0x3d')][_0xdc56('0x3e')]({'where':{'type':_0x4cd760,'resourceId':_0x1e82f7['id']}})['then'](function(){return _0x5a197a;});})[_0xdc56('0x25')](function(){_0xb149ba[_0xdc56('0x30')](0xcc)[_0xdc56('0x2f')]();});}};}function handleEntityNotFound(_0x22f8b3,_0x4c0c93){return function(_0x2da8ec){if(!_0x2da8ec){_0x22f8b3[_0xdc56('0x3f')](0x194);}return _0x2da8ec;};}function handleError(_0x1c5bd0,_0x5d2c5d){_0x5d2c5d=_0x5d2c5d||0x1f4;return function(_0x972f1b){logger[_0xdc56('0x28')](_0x972f1b[_0xdc56('0x40')]);if(_0x972f1b[_0xdc56('0x41')]){delete _0x972f1b[_0xdc56('0x41')];}_0x1c5bd0[_0xdc56('0x30')](_0x5d2c5d)[_0xdc56('0x42')](_0x972f1b);};}exports[_0xdc56('0x43')]=function(_0xcfa8a9,_0x3c2694){var _0x1ac62f={},_0x4f1628={},_0x26a355={'count':0x0,'rows':[]};var _0x4e8350=db[_0xdc56('0x44')][_0xdc56('0x45')];_0x4f1628[_0xdc56('0x46')]=_[_0xdc56('0x47')](_0x4e8350);_0x4f1628['query']=_[_0xdc56('0x47')](_0xcfa8a9['query']);_0x4f1628[_0xdc56('0x48')]=_[_0xdc56('0x49')](_0x4f1628['model'],_0x4f1628['query']);_0x1ac62f[_0xdc56('0x4a')]=_[_0xdc56('0x49')](_0x4f1628['model'],qs[_0xdc56('0x4b')](_0xcfa8a9[_0xdc56('0x4c')][_0xdc56('0x4b')]));_0x1ac62f[_0xdc56('0x4a')]=_0x1ac62f[_0xdc56('0x4a')][_0xdc56('0x4d')]?_0x1ac62f[_0xdc56('0x4a')]:_0x4f1628[_0xdc56('0x46')];if(!_0xcfa8a9['query'][_0xdc56('0x4e')]('nolimit')){_0x1ac62f[_0xdc56('0x34')]=qs[_0xdc56('0x34')](_0xcfa8a9[_0xdc56('0x4c')][_0xdc56('0x34')]);_0x1ac62f[_0xdc56('0x33')]=qs[_0xdc56('0x33')](_0xcfa8a9[_0xdc56('0x4c')][_0xdc56('0x33')]);}_0x1ac62f[_0xdc56('0x4f')]=qs['sort'](_0xcfa8a9[_0xdc56('0x4c')][_0xdc56('0x50')]);_0x1ac62f[_0xdc56('0x51')]=qs[_0xdc56('0x48')](_[_0xdc56('0x52')](_0xcfa8a9[_0xdc56('0x4c')],_0x4f1628['filters']));if(_0xcfa8a9[_0xdc56('0x4c')][_0xdc56('0x53')]){_0x1ac62f[_0xdc56('0x51')]=_[_0xdc56('0x54')](_0x1ac62f[_0xdc56('0x51')],{'$or':_[_0xdc56('0x55')](_0x4e8350,function(_0x4415e3){if(_0x4415e3['type'][_0xdc56('0x56')]!==_0xdc56('0x57')){var _0x33cfe0={};_0x33cfe0[_0x4415e3['field']]={'$like':'%'+_0xcfa8a9[_0xdc56('0x4c')]['filter']+'%'};return _0x33cfe0;}})});}_0x1ac62f=_[_0xdc56('0x54')]({},_0x1ac62f,_0xcfa8a9[_0xdc56('0x58')]);var _0x3da826={'where':_0x1ac62f[_0xdc56('0x51')]};return db[_0xdc56('0x44')][_0xdc56('0x32')](_0x3da826)['then'](function(_0x44c25f){_0x26a355[_0xdc56('0x32')]=_0x44c25f;if(_0xcfa8a9[_0xdc56('0x4c')][_0xdc56('0x59')]){_0x1ac62f[_0xdc56('0x5a')]=[{'all':!![]}];}return db[_0xdc56('0x44')][_0xdc56('0x5b')](_0x1ac62f);})['then'](function(_0x4da7a5){_0x26a355[_0xdc56('0x5c')]=_0x4da7a5;return _0x26a355;})[_0xdc56('0x25')](respondWithFilteredResult(_0x3c2694,_0x1ac62f))[_0xdc56('0x2e')](handleError(_0x3c2694,null));};exports['show']=function(_0x4033dd,_0x51ca53){var _0x9974e2={'raw':!![],'where':{'id':_0x4033dd['params']['id']}},_0x2e583d={};_0x2e583d[_0xdc56('0x46')]=_['keys'](db[_0xdc56('0x44')][_0xdc56('0x45')]);_0x2e583d[_0xdc56('0x4c')]=_[_0xdc56('0x47')](_0x4033dd[_0xdc56('0x4c')]);_0x2e583d[_0xdc56('0x48')]=_[_0xdc56('0x49')](_0x2e583d[_0xdc56('0x46')],_0x2e583d[_0xdc56('0x4c')]);_0x9974e2[_0xdc56('0x4a')]=_[_0xdc56('0x49')](_0x2e583d[_0xdc56('0x46')],qs[_0xdc56('0x4b')](_0x4033dd[_0xdc56('0x4c')][_0xdc56('0x4b')]));_0x9974e2[_0xdc56('0x4a')]=_0x9974e2['attributes'][_0xdc56('0x4d')]?_0x9974e2[_0xdc56('0x4a')]:_0x2e583d[_0xdc56('0x46')];if(_0x4033dd['query']['includeAll']){_0x9974e2[_0xdc56('0x5a')]=[{'all':!![]}];}_0x9974e2=_[_0xdc56('0x54')]({},_0x9974e2,_0x4033dd[_0xdc56('0x58')]);return db[_0xdc56('0x44')]['find'](_0x9974e2)['then'](handleEntityNotFound(_0x51ca53,null))[_0xdc56('0x25')](respondWithResult(_0x51ca53,null))[_0xdc56('0x2e')](handleError(_0x51ca53,null));};exports[_0xdc56('0x5d')]=function(_0x41c99a,_0x3a1809){return db[_0xdc56('0x44')]['create'](_0x41c99a[_0xdc56('0x5e')],{})[_0xdc56('0x25')](function(_0xcde62c){var _0x1e9761=_0x41c99a[_0xdc56('0x5f')][_0xdc56('0x3b')]({'plain':!![]});if(!_0x1e9761)throw new Error(_0xdc56('0x60'));if(_0x1e9761[_0xdc56('0x61')]===_0xdc56('0x5f')){var _0x1223f4=_0xcde62c[_0xdc56('0x3b')]({'plain':!![]});var _0x3ff207=_0xdc56('0x3c');return db[_0xdc56('0x62')][_0xdc56('0x63')]({'where':{'name':_0x3ff207,'userProfileId':_0x1e9761[_0xdc56('0x64')]},'raw':!![]})[_0xdc56('0x25')](function(_0x448790){if(_0x448790&&_0x448790['autoAssociation']===0x0){return db[_0xdc56('0x3d')][_0xdc56('0x5d')]({'name':_0x1223f4[_0xdc56('0x41')],'resourceId':_0x1223f4['id'],'type':_0x448790[_0xdc56('0x41')],'sectionId':_0x448790['id']},{})['then'](function(){return _0xcde62c;});}else{return _0xcde62c;}})[_0xdc56('0x2e')](function(_0x239464){logger[_0xdc56('0x28')](_0xdc56('0x65'),_0x239464);throw _0x239464;});}return _0xcde62c;})[_0xdc56('0x25')](respondWithResult(_0x3a1809,0xc9))[_0xdc56('0x2e')](handleError(_0x3a1809,null));};exports[_0xdc56('0x3a')]=function(_0x782bf5,_0x206466){if(_0x782bf5[_0xdc56('0x5e')]['id']){delete _0x782bf5[_0xdc56('0x5e')]['id'];}return db['ChatQueue'][_0xdc56('0x63')]({'where':{'id':_0x782bf5[_0xdc56('0x66')]['id']}})[_0xdc56('0x25')](handleEntityNotFound(_0x206466,null))[_0xdc56('0x25')](saveUpdates(_0x782bf5[_0xdc56('0x5e')],null))['then'](respondWithResult(_0x206466,null))[_0xdc56('0x2e')](handleError(_0x206466,null));};exports[_0xdc56('0x3e')]=function(_0x3ad1c7,_0x36d825){return db[_0xdc56('0x44')][_0xdc56('0x63')]({'where':{'id':_0x3ad1c7[_0xdc56('0x66')]['id']}})[_0xdc56('0x25')](handleEntityNotFound(_0x36d825,null))[_0xdc56('0x25')](removeEntity(_0x36d825,null))['catch'](handleError(_0x36d825,null));};exports[_0xdc56('0x67')]=function(_0x13ffff,_0x2bcb3c){return db[_0xdc56('0x44')][_0xdc56('0x67')]()[_0xdc56('0x25')](respondWithResult(_0x2bcb3c,null))[_0xdc56('0x2e')](handleError(_0x2bcb3c,null));};exports['getMembers']=function(_0x303a11,_0x2e976e,_0x50da9b){var _0x2c66b7={'raw':!![],'where':{}},_0x2a00c3={},_0x4ee6cc;return db[_0xdc56('0x44')]['findOne']({'where':{'id':_0x303a11[_0xdc56('0x66')]['id']}})['then'](handleEntityNotFound(_0x2e976e,null))['then'](function(_0x36adc0){if(_0x36adc0){_0x4ee6cc=_0x36adc0[_0xdc56('0x3b')]({'plain':!![]});_0x2a00c3[_0xdc56('0x46')]=_[_0xdc56('0x47')](db[_0xdc56('0x68')]['rawAttributes']);_0x2a00c3[_0xdc56('0x4c')]=_[_0xdc56('0x47')](_0x303a11[_0xdc56('0x4c')]);_0x2a00c3[_0xdc56('0x48')]=_[_0xdc56('0x49')](_0x2a00c3['model'],_0x2a00c3[_0xdc56('0x4c')]);_0x2c66b7[_0xdc56('0x4a')]=_[_0xdc56('0x49')](_0x2a00c3['model'],qs[_0xdc56('0x4b')](_0x303a11[_0xdc56('0x4c')]['fields']));_0x2c66b7[_0xdc56('0x4a')]=_0x2c66b7[_0xdc56('0x4a')]['length']?_0x2c66b7['attributes']:_0x2a00c3[_0xdc56('0x46')];if(!_0x303a11['query']['hasOwnProperty'](_0xdc56('0x69'))){_0x2c66b7[_0xdc56('0x34')]=qs[_0xdc56('0x34')](_0x303a11[_0xdc56('0x4c')][_0xdc56('0x34')]);_0x2c66b7[_0xdc56('0x33')]=qs['offset'](_0x303a11['query']['offset']);}_0x2c66b7[_0xdc56('0x4f')]=qs[_0xdc56('0x50')](_0x303a11[_0xdc56('0x4c')][_0xdc56('0x50')]);_0x2c66b7[_0xdc56('0x51')]=qs[_0xdc56('0x48')](_[_0xdc56('0x52')](_0x303a11[_0xdc56('0x4c')],_0x2a00c3[_0xdc56('0x48')]));_0x2c66b7[_0xdc56('0x51')][_0xdc56('0x6a')]=_0x36adc0['id'];if(_0x303a11[_0xdc56('0x4c')][_0xdc56('0x53')]){_0x2c66b7[_0xdc56('0x51')]=_[_0xdc56('0x54')](_0x2c66b7['where'],{'$or':_[_0xdc56('0x55')](_0x2c66b7[_0xdc56('0x4a')],function(_0x5ddc3a){var _0x2d7c70={};_0x2d7c70[_0x5ddc3a]={'$like':'%'+_0x303a11[_0xdc56('0x4c')][_0xdc56('0x53')]+'%'};return _0x2d7c70;})});}_0x2c66b7=_[_0xdc56('0x54')]({},_0x2c66b7,_0x303a11[_0xdc56('0x58')]);return db[_0xdc56('0x68')][_0xdc56('0x5b')](_0x2c66b7);}})['then'](function(_0x302d38){if(_0x302d38){return db[_0xdc56('0x6b')]['findAndCountAll']({'where':{'id':_[_0xdc56('0x55')](_0x302d38,_0xdc56('0x6c')),'role':_0xdc56('0x6d')},'attributes':['id',_0xdc56('0x41'),_0xdc56('0x6e'),_0xdc56('0x6f'),_0xdc56('0x70')]});}})[_0xdc56('0x25')](function(_0x2376cb){if(_0x2376cb){return{'count':_0x2376cb[_0xdc56('0x32')],'rows':_[_0xdc56('0x55')](_0x2376cb[_0xdc56('0x5c')],function(_0x22d5df){return{'membername':_0x22d5df['name'],'UserId':_0x22d5df['id'],'queue_name':_0x4ee6cc['name'],'ChatQueueId':_0x4ee6cc['id'],'interface':util['format'](_0xdc56('0x71'),_0xdc56('0x72'),_0x22d5df[_0xdc56('0x41')]),'penalty':0x0,'paused':_0x22d5df[_0xdc56('0x6e')],'createdAt':_0x22d5df[_0xdc56('0x70')],'updatedAt':_0x22d5df[_0xdc56('0x6f')]};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x2e976e,_0x2c66b7))[_0xdc56('0x2e')](handleError(_0x2e976e,null));};exports[_0xdc56('0x73')]=function(_0x1ae4b5,_0x1783d5,_0x4bc039){var _0x12c26c={};var _0x5a7a4d={};var _0x12eadc;var _0x24ddaa;return db[_0xdc56('0x44')][_0xdc56('0x74')]({'where':{'id':_0x1ae4b5[_0xdc56('0x66')]['id']}})[_0xdc56('0x25')](handleEntityNotFound(_0x1783d5,null))[_0xdc56('0x25')](function(_0x166564){if(_0x166564){_0x12eadc=_0x166564;_0x5a7a4d[_0xdc56('0x46')]=_[_0xdc56('0x47')](db['Team'][_0xdc56('0x45')]);_0x5a7a4d[_0xdc56('0x4c')]=_[_0xdc56('0x47')](_0x1ae4b5[_0xdc56('0x4c')]);_0x5a7a4d[_0xdc56('0x48')]=_['intersection'](_0x5a7a4d[_0xdc56('0x46')],_0x5a7a4d['query']);_0x12c26c[_0xdc56('0x4a')]=_['intersection'](_0x5a7a4d['model'],qs[_0xdc56('0x4b')](_0x1ae4b5[_0xdc56('0x4c')][_0xdc56('0x4b')]));_0x12c26c[_0xdc56('0x4a')]=_0x12c26c[_0xdc56('0x4a')][_0xdc56('0x4d')]?_0x12c26c[_0xdc56('0x4a')]:_0x5a7a4d[_0xdc56('0x46')];_0x12c26c['order']=qs[_0xdc56('0x50')](_0x1ae4b5[_0xdc56('0x4c')][_0xdc56('0x50')]);_0x12c26c[_0xdc56('0x51')]=qs[_0xdc56('0x48')](_['pick'](_0x1ae4b5[_0xdc56('0x4c')],_0x5a7a4d[_0xdc56('0x48')]));if(_0x1ae4b5[_0xdc56('0x4c')][_0xdc56('0x53')]){_0x12c26c[_0xdc56('0x51')]=_[_0xdc56('0x54')](_0x12c26c[_0xdc56('0x51')],{'$or':_[_0xdc56('0x55')](_0x12c26c[_0xdc56('0x4a')],function(_0x305f4e){var _0x3e01c4={};_0x3e01c4[_0x305f4e]={'$like':'%'+_0x1ae4b5[_0xdc56('0x4c')]['filter']+'%'};return _0x3e01c4;})});}_0x12c26c=_[_0xdc56('0x54')]({},_0x12c26c,_0x1ae4b5[_0xdc56('0x58')]);return _0x12eadc[_0xdc56('0x73')](_0x12c26c);}})[_0xdc56('0x25')](function(_0x38b7a9){if(_0x38b7a9){_0x24ddaa=_0x38b7a9[_0xdc56('0x4d')];if(!_0x1ae4b5['query'][_0xdc56('0x4e')](_0xdc56('0x69'))){_0x12c26c[_0xdc56('0x34')]=qs['limit'](_0x1ae4b5[_0xdc56('0x4c')][_0xdc56('0x34')]);_0x12c26c[_0xdc56('0x33')]=qs[_0xdc56('0x33')](_0x1ae4b5[_0xdc56('0x4c')][_0xdc56('0x33')]);}return _0x12eadc[_0xdc56('0x73')](_0x12c26c);}})[_0xdc56('0x25')](function(_0x55b512){if(_0x55b512){return _0x55b512?{'count':_0x24ddaa,'rows':_0x55b512}:null;}})[_0xdc56('0x25')](respondWithResult(_0x1783d5,null))[_0xdc56('0x2e')](handleError(_0x1783d5,null));};exports[_0xdc56('0x75')]=function(_0x57d614,_0x35dbf9,_0x35f789){var _0x2e78b0=_0x57d614[_0xdc56('0x5e')][_0xdc56('0x76')];return db['Team'][_0xdc56('0x5b')]({'where':{'id':_[_0xdc56('0x55')](_0x2e78b0,'id')},'attributes':['id'],'include':[{'model':db[_0xdc56('0x6b')],'as':_0xdc56('0x77'),'attributes':['id',_0xdc56('0x41'),_0xdc56('0x78'),_0xdc56('0x79'),_0xdc56('0x7a')],'raw':!![]}]})[_0xdc56('0x25')](function(_0x1875f6){if(_0x1875f6){var _0x11622e=_[_0xdc56('0x7b')](_0x1875f6,function(_0x15b360){var _0x582c6d=_0x15b360[_0xdc56('0x3b')]({'plain':!![]});return _0x582c6d[_0xdc56('0x77')];});return db['ChatQueue'][_0xdc56('0x63')]({'where':{'id':_0x57d614['params']['id']}})[_0xdc56('0x25')](function(_0x41e035){return db[_0xdc56('0x7c')][_0xdc56('0x7d')](function(_0x491696){return _0x41e035['addTeams'](_[_0xdc56('0x55')](_0x2e78b0,'id'),{'transaction':_0x491696})[_0xdc56('0x25')](function(){return BPromise[_0xdc56('0x7e')](_0x11622e,function(_0x1e0952){return db[_0xdc56('0x68')]['findOrCreate']({'where':{'UserId':_0x1e0952['id'],'ChatQueueId':_0x57d614[_0xdc56('0x66')]['id']},'transaction':_0x491696});});})[_0xdc56('0x25')](function(){_0x11622e[_0xdc56('0x7f')](function(_0x853f66){socket[_0xdc56('0x80')]('userChatQueue:save',{'UserId':_0x853f66['id'],'ChatQueueId':_0x41e035['id']});});});});});}})[_0xdc56('0x25')](respondWithStatusCode(_0x35dbf9,null))[_0xdc56('0x2e')](handleError(_0x35dbf9,null));};exports[_0xdc56('0x81')]=function(_0x30d751,_0x24fa19,_0x4f4dea){return db[_0xdc56('0x82')][_0xdc56('0x5b')]({'where':{'id':_0x30d751[_0xdc56('0x4c')][_0xdc56('0x83')]},'attributes':['id'],'include':[{'model':db[_0xdc56('0x6b')],'as':_0xdc56('0x77'),'attributes':['id'],'raw':!![]}]})[_0xdc56('0x25')](handleEntityNotFound(_0x24fa19,null))['then'](function(_0xe3f1b8){var _0x56f325=_[_0xdc56('0x55')](_0xe3f1b8,'id');var _0x2d8384=[];var _0x12d245=[];var _0x37956b=squel['select']();_0x37956b[_0xdc56('0x84')](_0xdc56('0x85'))[_0xdc56('0x86')](_0xdc56('0x87'),'tq')[_0xdc56('0x88')]('user_has_teams','ut',_0xdc56('0x89'))[_0xdc56('0x51')](_0xdc56('0x8a'),_0x30d751[_0xdc56('0x66')]['id']);for(var _0x3f2fce=0x0;_0x3f2fce<_0xe3f1b8[_0xdc56('0x4d')];_0x3f2fce+=0x1){let _0x397fd5=_0xe3f1b8[_0x3f2fce];for(var _0x472e0f=0x0;_0x472e0f<_0x397fd5[_0xdc56('0x77')][_0xdc56('0x4d')];_0x472e0f+=0x1){let _0x2ee4a8=_0x397fd5[_0xdc56('0x77')][_0x472e0f];var _0xb7e8ca=_0x37956b[_0xdc56('0x8b')]();_0xb7e8ca[_0xdc56('0x51')](_0xdc56('0x8c'),_0x2ee4a8['id']);_0x12d245[_0xdc56('0x8d')](db['sequelize'][_0xdc56('0x4c')](_0xb7e8ca[_0xdc56('0x8e')](),{'type':db['sequelize'][_0xdc56('0x8f')][_0xdc56('0x90')]})['then'](function(_0x5ca4f5){if(_0x5ca4f5[_0xdc56('0x4d')]===0x1){return _0x2ee4a8['id'];}else{var _0x19c049=_['every'](_[_0xdc56('0x55')](_0x5ca4f5,_0xdc56('0x91')),function(_0x45fdff){return _[_0xdc56('0x92')](_0x56f325,_0x45fdff);});if(_0x19c049){return _0x2ee4a8['id'];}}}));}}return BPromise[_0xdc56('0x93')](_0x12d245)['then'](function(_0x334d7a){_0x2d8384=_(_0x2d8384)[_0xdc56('0x94')](_0x334d7a)[_0xdc56('0x95')]()['value']();return db[_0xdc56('0x44')][_0xdc56('0x63')]({'where':{'id':_0x30d751[_0xdc56('0x66')]['id']}})[_0xdc56('0x25')](function(_0x48b373){return db[_0xdc56('0x7c')][_0xdc56('0x7d')](function(_0x15ae41){return _0x48b373[_0xdc56('0x81')](_0x30d751[_0xdc56('0x4c')][_0xdc56('0x83')],{'transaction':_0x15ae41})[_0xdc56('0x25')](function(){if(!_[_0xdc56('0x96')](_0x2d8384)){return _0x48b373[_0xdc56('0x97')](_0x2d8384,{'transaction':_0x15ae41});}})['then'](function(){_0x2d8384['forEach'](function(_0x105aac){socket['emit']('userChatQueue:remove',{'UserId':_0x105aac,'ChatQueueId':_0x48b373['id']});});});});});});})[_0xdc56('0x25')](respondWithStatusCode(_0x24fa19,null))[_0xdc56('0x2e')](handleError(_0x24fa19,null));};exports[_0xdc56('0x98')]=function(_0x149793,_0x345310,_0x2079f2){return db[_0xdc56('0x44')][_0xdc56('0x63')]({'where':{'id':_0x149793[_0xdc56('0x66')]['id']}})[_0xdc56('0x25')](handleEntityNotFound(_0x345310,null))[_0xdc56('0x25')](function(_0x52b784){if(_0x52b784){return _0x52b784[_0xdc56('0x98')](_0x149793[_0xdc56('0x5e')][_0xdc56('0x83')],_[_0xdc56('0x99')](_0x149793[_0xdc56('0x5e')],[_0xdc56('0x83'),'id'])||{})['spread'](function(_0x4fce71){for(var _0x49eee2=0x0;_0x49eee2<_0x149793[_0xdc56('0x5e')][_0xdc56('0x83')][_0xdc56('0x4d')];_0x49eee2+=0x1){socket[_0xdc56('0x80')](_0xdc56('0x9a'),{'UserId':_0x149793[_0xdc56('0x5e')]['ids'][_0x49eee2],'ChatQueueId':_0x149793['params']['id']});}return _0x4fce71;});}})['then'](respondWithResult(_0x345310,null))[_0xdc56('0x2e')](handleError(_0x345310,null));};exports[_0xdc56('0x97')]=function(_0x5538bc,_0x377b9c,_0x39e7a4){return db[_0xdc56('0x44')][_0xdc56('0x63')]({'where':{'id':_0x5538bc[_0xdc56('0x66')]['id']}})[_0xdc56('0x25')](handleEntityNotFound(_0x377b9c,null))[_0xdc56('0x25')](function(_0x3f79c9){if(_0x3f79c9){return _0x3f79c9[_0xdc56('0x97')](_0x5538bc[_0xdc56('0x4c')][_0xdc56('0x83')])['then'](function(){if(_[_0xdc56('0x9b')](_0x5538bc['query'][_0xdc56('0x83')])){for(var _0x2160d4=0x0;_0x2160d4<_0x5538bc[_0xdc56('0x4c')][_0xdc56('0x83')][_0xdc56('0x4d')];_0x2160d4+=0x1){socket[_0xdc56('0x80')](_0xdc56('0x9c'),{'UserId':Number(_0x5538bc[_0xdc56('0x4c')][_0xdc56('0x83')][_0x2160d4]),'ChatQueueId':Number(_0x5538bc[_0xdc56('0x66')]['id'])});}}else{socket[_0xdc56('0x80')]('userChatQueue:remove',{'UserId':Number(_0x5538bc['query'][_0xdc56('0x83')]),'ChatQueueId':Number(_0x5538bc[_0xdc56('0x66')]['id'])});}});}})['then'](respondWithStatusCode(_0x377b9c,null))[_0xdc56('0x2e')](handleError(_0x377b9c,null));};exports[_0xdc56('0x9d')]=function(_0x2b4712,_0x4d3430,_0x1bf1c1){var _0x9a172b={};var _0x47d04e={};var _0x2c1681;var _0x1dd20b;return db['ChatQueue'][_0xdc56('0x74')]({'where':{'id':_0x2b4712[_0xdc56('0x66')]['id']}})['then'](handleEntityNotFound(_0x4d3430,null))[_0xdc56('0x25')](function(_0x5759c6){if(_0x5759c6){_0x2c1681=_0x5759c6;_0x47d04e[_0xdc56('0x46')]=_[_0xdc56('0x47')](db[_0xdc56('0x6b')][_0xdc56('0x45')]);_0x47d04e['query']=_[_0xdc56('0x47')](_0x2b4712[_0xdc56('0x4c')]);_0x47d04e[_0xdc56('0x48')]=_['intersection'](_0x47d04e[_0xdc56('0x46')],_0x47d04e[_0xdc56('0x4c')]);_0x9a172b[_0xdc56('0x4a')]=_[_0xdc56('0x49')](_0x47d04e[_0xdc56('0x46')],qs[_0xdc56('0x4b')](_0x2b4712['query'][_0xdc56('0x4b')]));_0x9a172b[_0xdc56('0x4a')]=_0x9a172b['attributes'][_0xdc56('0x4d')]?_0x9a172b[_0xdc56('0x4a')]:_0x47d04e[_0xdc56('0x46')];_0x9a172b[_0xdc56('0x4f')]=qs[_0xdc56('0x50')](_0x2b4712[_0xdc56('0x4c')][_0xdc56('0x50')]);_0x9a172b[_0xdc56('0x51')]=qs[_0xdc56('0x48')](_[_0xdc56('0x52')](_0x2b4712['query'],_0x47d04e[_0xdc56('0x48')]));if(_0x2b4712[_0xdc56('0x4c')][_0xdc56('0x53')]){_0x9a172b[_0xdc56('0x51')]=_['merge'](_0x9a172b[_0xdc56('0x51')],{'$or':_['map'](_0x9a172b[_0xdc56('0x4a')],function(_0x3747ca){var _0x7d2f73={};_0x7d2f73[_0x3747ca]={'$like':'%'+_0x2b4712[_0xdc56('0x4c')][_0xdc56('0x53')]+'%'};return _0x7d2f73;})});}_0x9a172b=_['merge']({},_0x9a172b,_0x2b4712['options']);return _0x2c1681[_0xdc56('0x9d')](_0x9a172b);}})['then'](function(_0x5a190f){if(_0x5a190f){_0x1dd20b=_0x5a190f[_0xdc56('0x4d')];if(!_0x2b4712[_0xdc56('0x4c')][_0xdc56('0x4e')](_0xdc56('0x69'))){_0x9a172b[_0xdc56('0x34')]=qs['limit'](_0x2b4712['query'][_0xdc56('0x34')]);_0x9a172b[_0xdc56('0x33')]=qs[_0xdc56('0x33')](_0x2b4712[_0xdc56('0x4c')][_0xdc56('0x33')]);}return _0x2c1681[_0xdc56('0x9d')](_0x9a172b);}})[_0xdc56('0x25')](function(_0x35e5b8){if(_0x35e5b8){return _0x35e5b8?{'count':_0x1dd20b,'rows':_0x35e5b8}:null;}})[_0xdc56('0x25')](respondWithResult(_0x4d3430,null))[_0xdc56('0x2e')](handleError(_0x4d3430,null));};
\ No newline at end of file
index 259a4f5..6e2fff9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9d5b=['save','update','emit','hasOwnProperty','exports','../../mysqldb','ChatQueue','setMaxListeners'];(function(_0xa802b6,_0x10e516){var _0x2cca6b=function(_0x559461){while(--_0x559461){_0xa802b6['push'](_0xa802b6['shift']());}};_0x2cca6b(++_0x10e516);}(_0x9d5b,0x14d));var _0xb9d5=function(_0x46b0e9,_0x1ad7b3){_0x46b0e9=_0x46b0e9-0x0;var _0x371b3d=_0x9d5b[_0x46b0e9];return _0x371b3d;};'use strict';var EventEmitter=require('events');var ChatQueue=require(_0xb9d5('0x0'))['db'][_0xb9d5('0x1')];var ChatQueueEvents=new EventEmitter();ChatQueueEvents[_0xb9d5('0x2')](0x0);var events={'afterCreate':_0xb9d5('0x3'),'afterUpdate':_0xb9d5('0x4'),'afterDestroy':'remove'};function emitEvent(_0x6871c3){return function(_0x54423a,_0x36b546,_0xbf85ca){ChatQueueEvents[_0xb9d5('0x5')](_0x6871c3+':'+_0x54423a['id'],_0x54423a);ChatQueueEvents[_0xb9d5('0x5')](_0x6871c3,_0x54423a);_0xbf85ca(null);};}for(var e in events){if(events[_0xb9d5('0x6')](e)){var event=events[e];ChatQueue['hook'](e,emitEvent(event));}}module[_0xb9d5('0x7')]=ChatQueueEvents;
\ No newline at end of file
+var _0x777d=['emit','hook','../../mysqldb','ChatQueue','setMaxListeners','update','remove'];(function(_0x182dc8,_0x707905){var _0x4ed154=function(_0x1b8655){while(--_0x1b8655){_0x182dc8['push'](_0x182dc8['shift']());}};_0x4ed154(++_0x707905);}(_0x777d,0xe9));var _0xd777=function(_0x5161fc,_0x37c5f6){_0x5161fc=_0x5161fc-0x0;var _0x38490b=_0x777d[_0x5161fc];return _0x38490b;};'use strict';var EventEmitter=require('events');var ChatQueue=require(_0xd777('0x0'))['db'][_0xd777('0x1')];var ChatQueueEvents=new EventEmitter();ChatQueueEvents[_0xd777('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0xd777('0x3'),'afterDestroy':_0xd777('0x4')};function emitEvent(_0x54bbb5){return function(_0x5e0f79,_0x514817,_0x40b685){ChatQueueEvents['emit'](_0x54bbb5+':'+_0x5e0f79['id'],_0x5e0f79);ChatQueueEvents[_0xd777('0x5')](_0x54bbb5,_0x5e0f79);_0x40b685(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];ChatQueue[_0xd777('0x6')](e,emitEvent(event));}}module['exports']=ChatQueueEvents;
\ No newline at end of file
index a06b185..f8a1903 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3176=['moment','bluebird','request-promise','path','rimraf','../../config/environment','./chatQueue.attributes','exports','define','ChatQueue','lodash','util','../../config/logger','api'];(function(_0x10c975,_0x2e588a){var _0x4cfc7f=function(_0x466a21){while(--_0x466a21){_0x10c975['push'](_0x10c975['shift']());}};_0x4cfc7f(++_0x2e588a);}(_0x3176,0x1d8));var _0x6317=function(_0x191ee3,_0x87079a){_0x191ee3=_0x191ee3-0x0;var _0x2b74cb=_0x3176[_0x191ee3];return _0x2b74cb;};'use strict';var _=require(_0x6317('0x0'));var util=require(_0x6317('0x1'));var logger=require(_0x6317('0x2'))(_0x6317('0x3'));var moment=require(_0x6317('0x4'));var BPromise=require(_0x6317('0x5'));var rp=require(_0x6317('0x6'));var fs=require('fs');var path=require(_0x6317('0x7'));var rimraf=require(_0x6317('0x8'));var config=require(_0x6317('0x9'));var attributes=require(_0x6317('0xa'));module[_0x6317('0xb')]=function(_0x46f4c9,_0x354521){return _0x46f4c9[_0x6317('0xc')](_0x6317('0xd'),attributes,{'tableName':'chat_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xaa1b=['exports','define','chat_queues','lodash','util','../../config/logger','moment','request-promise','path'];(function(_0x1b62fc,_0x2433d8){var _0x131109=function(_0x3514e3){while(--_0x3514e3){_0x1b62fc['push'](_0x1b62fc['shift']());}};_0x131109(++_0x2433d8);}(_0xaa1b,0x123));var _0xbaa1=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xaa1b[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0xbaa1('0x0'));var util=require(_0xbaa1('0x1'));var logger=require(_0xbaa1('0x2'))('api');var moment=require(_0xbaa1('0x3'));var BPromise=require('bluebird');var rp=require(_0xbaa1('0x4'));var fs=require('fs');var path=require(_0xbaa1('0x5'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require('./chatQueue.attributes');module[_0xbaa1('0x6')]=function(_0x27b99c,_0x4a5735){return _0x27b99c[_0xbaa1('0x7')]('ChatQueue',attributes,{'tableName':_0xbaa1('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1b3286c..817eff5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x57c4=['error','code','message','catch','GetChatQueue','ChatQueue','findAll','options','raw','where','limit','include','map','model','attributes','ShowChatQueue','find','lodash','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','redis','localhost','socket.io-emitter','register','request','then','info','ChatQueue,\x20%s,\x20%s','request\x20sent','debug','stringify'];(function(_0x2c91e9,_0x2fb965){var _0x13f0ff=function(_0xb39edf){while(--_0xb39edf){_0x2c91e9['push'](_0x2c91e9['shift']());}};_0x13f0ff(++_0x2fb965);}(_0x57c4,0x1f2));var _0x457c=function(_0x15912e,_0x3f7f4b){_0x15912e=_0x15912e-0x0;var _0x52cc91=_0x57c4[_0x15912e];return _0x52cc91;};'use strict';var _=require(_0x457c('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x457c('0x1'));var rs=require(_0x457c('0x2'));var fs=require('fs');var Redis=require(_0x457c('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x457c('0x4'));var logger=require(_0x457c('0x5'))('rpc');var config=require(_0x457c('0x6'));var jayson=require(_0x457c('0x7'));var client=jayson['client'][_0x457c('0x8')]({'port':0x232a});config[_0x457c('0x9')]=_['defaults'](config[_0x457c('0x9')],{'host':_0x457c('0xa'),'port':0x18eb});var socket=require(_0x457c('0xb'))(new Redis(config[_0x457c('0x9')]));require('./chatQueue.socket')[_0x457c('0xc')](socket);function respondWithRpcPromise(_0x23b2c9,_0x7b9d4,_0x36de36){return new BPromise(function(_0x11ccd0,_0x4e65ac){return client[_0x457c('0xd')](_0x23b2c9,_0x36de36)[_0x457c('0xe')](function(_0x24ebf1){logger[_0x457c('0xf')](_0x457c('0x10'),_0x7b9d4,_0x457c('0x11'));logger[_0x457c('0x12')]('ChatQueue,\x20%s,\x20%s,\x20%s',_0x7b9d4,'request\x20sent',JSON[_0x457c('0x13')](_0x24ebf1));if(_0x24ebf1[_0x457c('0x14')]){if(_0x24ebf1[_0x457c('0x14')][_0x457c('0x15')]===0x1f4){logger[_0x457c('0x14')](_0x457c('0x10'),_0x7b9d4,_0x24ebf1[_0x457c('0x14')]['message']);return _0x4e65ac(_0x24ebf1['error']['message']);}logger[_0x457c('0x14')](_0x457c('0x10'),_0x7b9d4,_0x24ebf1[_0x457c('0x14')]['message']);return _0x11ccd0(_0x24ebf1[_0x457c('0x14')][_0x457c('0x16')]);}else{logger['info'](_0x457c('0x10'),_0x7b9d4,'request\x20sent');_0x11ccd0(_0x24ebf1['result'][_0x457c('0x16')]);}})[_0x457c('0x17')](function(_0x4072ef){logger[_0x457c('0x14')]('ChatQueue,\x20%s,\x20%s',_0x7b9d4,_0x4072ef);_0x4e65ac(_0x4072ef);});});}exports[_0x457c('0x18')]=function(_0x4a98d6){var _0x4a82cc=this;return new Promise(function(_0x1846ce,_0x183db6){return db[_0x457c('0x19')][_0x457c('0x1a')]({'raw':_0x4a98d6[_0x457c('0x1b')]?_0x4a98d6[_0x457c('0x1b')][_0x457c('0x1c')]===undefined?!![]:![]:!![],'where':_0x4a98d6[_0x457c('0x1b')]?_0x4a98d6[_0x457c('0x1b')][_0x457c('0x1d')]||null:null,'attributes':_0x4a98d6[_0x457c('0x1b')]?_0x4a98d6[_0x457c('0x1b')]['attributes']||null:null,'limit':_0x4a98d6[_0x457c('0x1b')]?_0x4a98d6[_0x457c('0x1b')][_0x457c('0x1e')]||null:null,'include':_0x4a98d6[_0x457c('0x1b')]?_0x4a98d6['options'][_0x457c('0x1f')]?_[_0x457c('0x20')](_0x4a98d6[_0x457c('0x1b')][_0x457c('0x1f')],function(_0x5067d4){return{'model':db[_0x5067d4[_0x457c('0x21')]],'as':_0x5067d4['as'],'attributes':_0x5067d4['attributes'],'include':_0x5067d4['include']?_[_0x457c('0x20')](_0x5067d4[_0x457c('0x1f')],function(_0x10aa77){return{'model':db[_0x10aa77['model']],'as':_0x10aa77['as'],'attributes':_0x10aa77[_0x457c('0x22')],'include':_0x10aa77['include']?_[_0x457c('0x20')](_0x10aa77[_0x457c('0x1f')],function(_0x1adda7){return{'model':db[_0x1adda7[_0x457c('0x21')]],'as':_0x1adda7['as'],'attributes':_0x1adda7[_0x457c('0x22')]};}):[]};}):[]};}):[]:[]})[_0x457c('0xe')](function(_0xef2283){logger[_0x457c('0xf')](_0x457c('0x18'),_0x4a98d6);logger[_0x457c('0x12')](_0x457c('0x18'),_0x4a98d6,JSON[_0x457c('0x13')](_0xef2283));_0x1846ce(_0xef2283);})['catch'](function(_0x5cd9c0){logger[_0x457c('0x14')](_0x457c('0x18'),_0x5cd9c0['message'],_0x4a98d6);_0x183db6(_0x4a82cc[_0x457c('0x14')](0x1f4,_0x5cd9c0[_0x457c('0x16')]));});});};exports[_0x457c('0x23')]=function(_0x8c5340){var _0x5cb5fe=this;return new Promise(function(_0x1e5b7c,_0x2b97e5){return db[_0x457c('0x19')][_0x457c('0x24')]({'raw':_0x8c5340['options']?_0x8c5340[_0x457c('0x1b')][_0x457c('0x1c')]===undefined?!![]:![]:!![],'where':_0x8c5340[_0x457c('0x1b')]?_0x8c5340[_0x457c('0x1b')]['where']||null:null,'attributes':_0x8c5340[_0x457c('0x1b')]?_0x8c5340['options'][_0x457c('0x22')]||null:null,'include':_0x8c5340[_0x457c('0x1b')]?_0x8c5340[_0x457c('0x1b')][_0x457c('0x1f')]?_[_0x457c('0x20')](_0x8c5340[_0x457c('0x1b')]['include'],function(_0x163d31){return{'model':db[_0x163d31['model']],'as':_0x163d31['as'],'attributes':_0x163d31[_0x457c('0x22')],'include':_0x163d31[_0x457c('0x1f')]?_['map'](_0x163d31[_0x457c('0x1f')],function(_0x4e644a){return{'model':db[_0x4e644a[_0x457c('0x21')]],'as':_0x4e644a['as'],'attributes':_0x4e644a[_0x457c('0x22')],'include':_0x4e644a[_0x457c('0x1f')]?_[_0x457c('0x20')](_0x4e644a[_0x457c('0x1f')],function(_0x494b78){return{'model':db[_0x494b78['model']],'as':_0x494b78['as'],'attributes':_0x494b78[_0x457c('0x22')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x2cd3b8){logger['info']('ShowChatQueue',_0x8c5340);logger[_0x457c('0x12')](_0x457c('0x23'),_0x8c5340,JSON[_0x457c('0x13')](_0x2cd3b8));_0x1e5b7c(_0x2cd3b8);})[_0x457c('0x17')](function(_0x4a03f2){logger[_0x457c('0x14')](_0x457c('0x23'),_0x4a03f2[_0x457c('0x16')],_0x8c5340);_0x2b97e5(_0x5cb5fe[_0x457c('0x14')](0x1f4,_0x4a03f2[_0x457c('0x16')]));});});};
\ No newline at end of file
+var _0x649e=['then','info','ChatQueue,\x20%s,\x20%s','request\x20sent','debug','ChatQueue,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','GetChatQueue','ChatQueue','options','raw','limit','include','map','model','attributes','ShowChatQueue','find','where','lodash','util','moment','bluebird','randomstring','ioredis','../../config/logger','rpc','client','http','redis','defaults','localhost','socket.io-emitter','register','request'];(function(_0x70841e,_0x1e002d){var _0x4f15a8=function(_0x3cc940){while(--_0x3cc940){_0x70841e['push'](_0x70841e['shift']());}};_0x4f15a8(++_0x1e002d);}(_0x649e,0x8c));var _0xe649=function(_0x553596,_0xb76835){_0x553596=_0x553596-0x0;var _0x42be2d=_0x649e[_0x553596];return _0x42be2d;};'use strict';var _=require(_0xe649('0x0'));var util=require(_0xe649('0x1'));var moment=require(_0xe649('0x2'));var BPromise=require(_0xe649('0x3'));var rs=require(_0xe649('0x4'));var fs=require('fs');var Redis=require(_0xe649('0x5'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xe649('0x6'))(_0xe649('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xe649('0x8')][_0xe649('0x9')]({'port':0x232a});config[_0xe649('0xa')]=_[_0xe649('0xb')](config[_0xe649('0xa')],{'host':_0xe649('0xc'),'port':0x18eb});var socket=require(_0xe649('0xd'))(new Redis(config['redis']));require('./chatQueue.socket')[_0xe649('0xe')](socket);function respondWithRpcPromise(_0x2c3ea8,_0x4ebb44,_0x56c87a){return new BPromise(function(_0x3ccc34,_0x201ce7){return client[_0xe649('0xf')](_0x2c3ea8,_0x56c87a)[_0xe649('0x10')](function(_0x1acb39){logger[_0xe649('0x11')](_0xe649('0x12'),_0x4ebb44,_0xe649('0x13'));logger[_0xe649('0x14')](_0xe649('0x15'),_0x4ebb44,'request\x20sent',JSON['stringify'](_0x1acb39));if(_0x1acb39[_0xe649('0x16')]){if(_0x1acb39['error'][_0xe649('0x17')]===0x1f4){logger[_0xe649('0x16')](_0xe649('0x12'),_0x4ebb44,_0x1acb39[_0xe649('0x16')][_0xe649('0x18')]);return _0x201ce7(_0x1acb39[_0xe649('0x16')][_0xe649('0x18')]);}logger[_0xe649('0x16')]('ChatQueue,\x20%s,\x20%s',_0x4ebb44,_0x1acb39['error'][_0xe649('0x18')]);return _0x3ccc34(_0x1acb39[_0xe649('0x16')][_0xe649('0x18')]);}else{logger[_0xe649('0x11')](_0xe649('0x12'),_0x4ebb44,_0xe649('0x13'));_0x3ccc34(_0x1acb39[_0xe649('0x19')]['message']);}})[_0xe649('0x1a')](function(_0x4a0156){logger[_0xe649('0x16')]('ChatQueue,\x20%s,\x20%s',_0x4ebb44,_0x4a0156);_0x201ce7(_0x4a0156);});});}exports[_0xe649('0x1b')]=function(_0x54a07d){var _0x28979f=this;return new Promise(function(_0x2beeb7,_0x28e875){return db[_0xe649('0x1c')]['findAll']({'raw':_0x54a07d[_0xe649('0x1d')]?_0x54a07d[_0xe649('0x1d')][_0xe649('0x1e')]===undefined?!![]:![]:!![],'where':_0x54a07d[_0xe649('0x1d')]?_0x54a07d[_0xe649('0x1d')]['where']||null:null,'attributes':_0x54a07d[_0xe649('0x1d')]?_0x54a07d[_0xe649('0x1d')]['attributes']||null:null,'limit':_0x54a07d[_0xe649('0x1d')]?_0x54a07d[_0xe649('0x1d')][_0xe649('0x1f')]||null:null,'include':_0x54a07d[_0xe649('0x1d')]?_0x54a07d['options'][_0xe649('0x20')]?_[_0xe649('0x21')](_0x54a07d[_0xe649('0x1d')]['include'],function(_0x3df717){return{'model':db[_0x3df717[_0xe649('0x22')]],'as':_0x3df717['as'],'attributes':_0x3df717[_0xe649('0x23')],'include':_0x3df717['include']?_[_0xe649('0x21')](_0x3df717[_0xe649('0x20')],function(_0x24b047){return{'model':db[_0x24b047[_0xe649('0x22')]],'as':_0x24b047['as'],'attributes':_0x24b047[_0xe649('0x23')],'include':_0x24b047[_0xe649('0x20')]?_[_0xe649('0x21')](_0x24b047['include'],function(_0x45c94e){return{'model':db[_0x45c94e['model']],'as':_0x45c94e['as'],'attributes':_0x45c94e[_0xe649('0x23')]};}):[]};}):[]};}):[]:[]})[_0xe649('0x10')](function(_0x1e3415){logger[_0xe649('0x11')](_0xe649('0x1b'),_0x54a07d);logger['debug'](_0xe649('0x1b'),_0x54a07d,JSON['stringify'](_0x1e3415));_0x2beeb7(_0x1e3415);})[_0xe649('0x1a')](function(_0x3842b4){logger[_0xe649('0x16')](_0xe649('0x1b'),_0x3842b4[_0xe649('0x18')],_0x54a07d);_0x28e875(_0x28979f[_0xe649('0x16')](0x1f4,_0x3842b4[_0xe649('0x18')]));});});};exports[_0xe649('0x24')]=function(_0x31ca9b){var _0x57e8ea=this;return new Promise(function(_0x1d1996,_0x3caf6a){return db[_0xe649('0x1c')][_0xe649('0x25')]({'raw':_0x31ca9b[_0xe649('0x1d')]?_0x31ca9b[_0xe649('0x1d')]['raw']===undefined?!![]:![]:!![],'where':_0x31ca9b[_0xe649('0x1d')]?_0x31ca9b[_0xe649('0x1d')][_0xe649('0x26')]||null:null,'attributes':_0x31ca9b[_0xe649('0x1d')]?_0x31ca9b[_0xe649('0x1d')]['attributes']||null:null,'include':_0x31ca9b['options']?_0x31ca9b['options'][_0xe649('0x20')]?_[_0xe649('0x21')](_0x31ca9b['options'][_0xe649('0x20')],function(_0x48b062){return{'model':db[_0x48b062[_0xe649('0x22')]],'as':_0x48b062['as'],'attributes':_0x48b062[_0xe649('0x23')],'include':_0x48b062['include']?_['map'](_0x48b062[_0xe649('0x20')],function(_0x10e941){return{'model':db[_0x10e941[_0xe649('0x22')]],'as':_0x10e941['as'],'attributes':_0x10e941[_0xe649('0x23')],'include':_0x10e941[_0xe649('0x20')]?_[_0xe649('0x21')](_0x10e941[_0xe649('0x20')],function(_0x5d0ee9){return{'model':db[_0x5d0ee9['model']],'as':_0x5d0ee9['as'],'attributes':_0x5d0ee9[_0xe649('0x23')]};}):[]};}):[]};}):[]:[]})[_0xe649('0x10')](function(_0x2c4554){logger[_0xe649('0x11')](_0xe649('0x24'),_0x31ca9b);logger[_0xe649('0x14')]('ShowChatQueue',_0x31ca9b,JSON['stringify'](_0x2c4554));_0x1d1996(_0x2c4554);})[_0xe649('0x1a')](function(_0x4e81e3){logger[_0xe649('0x16')]('ShowChatQueue',_0x4e81e3[_0xe649('0x18')],_0x31ca9b);_0x3caf6a(_0x57e8ea['error'](0x1f4,_0x4e81e3[_0xe649('0x18')]));});});};
\ No newline at end of file
index 36863f0..ec622ed 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(_0x19950b,_0x53d0d7){var _0x3c6b41=function(_0x3924ad){while(--_0x3924ad){_0x19950b['push'](_0x19950b['shift']());}};_0x3c6b41(++_0x53d0d7);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5783f4,_0x4a9e0a){_0x5783f4=_0x5783f4-0x0;var _0x28e380=_0xa9e0[_0x5783f4];return _0x28e380;};'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(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0xa9e0,0x123));var _0x0a9e=function(_0x56482c,_0x16118d){_0x56482c=_0x56482c-0x0;var _0x5aae7a=_0xa9e0[_0x56482c];return _0x5aae7a;};'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 15f5c55..004e86f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2f3c=['get','isAuthenticated','index','/describe','describe','show','/:id/members','getMembers','/:id/teams','getTeams','/:id/users','getAgents','post','create','addTeams','addAgents','put','/:id','update','delete','destroy','removeAgents','exports','util','connect-timeout','express','../../components/auth/service','../../config/environment','./chatQueue.controller'];(function(_0x977912,_0x8db098){var _0x5e3194=function(_0x17e8b9){while(--_0x17e8b9){_0x977912['push'](_0x977912['shift']());}};_0x5e3194(++_0x8db098);}(_0x2f3c,0x1e7));var _0xc2f3=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x2f3c[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require('multer');var util=require(_0xc2f3('0x0'));var path=require('path');var timeout=require(_0xc2f3('0x1'));var express=require(_0xc2f3('0x2'));var router=express['Router']();var auth=require(_0xc2f3('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xc2f3('0x4'));var controller=require(_0xc2f3('0x5'));router[_0xc2f3('0x6')]('/',auth[_0xc2f3('0x7')](),controller[_0xc2f3('0x8')]);router[_0xc2f3('0x6')](_0xc2f3('0x9'),auth[_0xc2f3('0x7')](),controller[_0xc2f3('0xa')]);router[_0xc2f3('0x6')]('/:id',auth[_0xc2f3('0x7')](),controller[_0xc2f3('0xb')]);router[_0xc2f3('0x6')](_0xc2f3('0xc'),auth['isAuthenticated'](),controller[_0xc2f3('0xd')]);router[_0xc2f3('0x6')](_0xc2f3('0xe'),auth[_0xc2f3('0x7')](),controller[_0xc2f3('0xf')]);router[_0xc2f3('0x6')](_0xc2f3('0x10'),auth['isAuthenticated'](),controller[_0xc2f3('0x11')]);router[_0xc2f3('0x12')]('/',auth[_0xc2f3('0x7')](),controller[_0xc2f3('0x13')]);router[_0xc2f3('0x12')]('/:id/teams',auth['isAuthenticated'](),controller[_0xc2f3('0x14')]);router[_0xc2f3('0x12')]('/:id/users',auth[_0xc2f3('0x7')](),controller[_0xc2f3('0x15')]);router[_0xc2f3('0x16')](_0xc2f3('0x17'),auth[_0xc2f3('0x7')](),controller[_0xc2f3('0x18')]);router[_0xc2f3('0x19')](_0xc2f3('0x17'),auth[_0xc2f3('0x7')](),controller[_0xc2f3('0x1a')]);router[_0xc2f3('0x19')](_0xc2f3('0xe'),auth['isAuthenticated'](),controller['removeTeams']);router['delete'](_0xc2f3('0x10'),auth[_0xc2f3('0x7')](),controller[_0xc2f3('0x1b')]);module[_0xc2f3('0x1c')]=router;
\ No newline at end of file
+var _0x9c7a=['/:id/users','update','destroy','delete','removeAgents','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatQueue.controller','get','index','/describe','describe','/:id','isAuthenticated','show','/:id/members','/:id/teams','getAgents','post','create','addTeams'];(function(_0xbb4f66,_0xac0822){var _0x5709ed=function(_0x1e75ed){while(--_0x1e75ed){_0xbb4f66['push'](_0xbb4f66['shift']());}};_0x5709ed(++_0xac0822);}(_0x9c7a,0x128));var _0xa9c7=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x9c7a[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0xa9c7('0x0'));var util=require(_0xa9c7('0x1'));var path=require(_0xa9c7('0x2'));var timeout=require(_0xa9c7('0x3'));var express=require(_0xa9c7('0x4'));var router=express[_0xa9c7('0x5')]();var auth=require(_0xa9c7('0x6'));var interaction=require(_0xa9c7('0x7'));var config=require(_0xa9c7('0x8'));var controller=require(_0xa9c7('0x9'));router[_0xa9c7('0xa')]('/',auth['isAuthenticated'](),controller[_0xa9c7('0xb')]);router[_0xa9c7('0xa')](_0xa9c7('0xc'),auth['isAuthenticated'](),controller[_0xa9c7('0xd')]);router['get'](_0xa9c7('0xe'),auth[_0xa9c7('0xf')](),controller[_0xa9c7('0x10')]);router[_0xa9c7('0xa')](_0xa9c7('0x11'),auth[_0xa9c7('0xf')](),controller['getMembers']);router[_0xa9c7('0xa')](_0xa9c7('0x12'),auth['isAuthenticated'](),controller['getTeams']);router[_0xa9c7('0xa')]('/:id/users',auth['isAuthenticated'](),controller[_0xa9c7('0x13')]);router[_0xa9c7('0x14')]('/',auth['isAuthenticated'](),controller[_0xa9c7('0x15')]);router[_0xa9c7('0x14')]('/:id/teams',auth[_0xa9c7('0xf')](),controller[_0xa9c7('0x16')]);router[_0xa9c7('0x14')](_0xa9c7('0x17'),auth[_0xa9c7('0xf')](),controller['addAgents']);router['put'](_0xa9c7('0xe'),auth[_0xa9c7('0xf')](),controller[_0xa9c7('0x18')]);router['delete'](_0xa9c7('0xe'),auth[_0xa9c7('0xf')](),controller[_0xa9c7('0x19')]);router[_0xa9c7('0x1a')]('/:id/teams',auth[_0xa9c7('0xf')](),controller['removeTeams']);router['delete']('/:id/users',auth['isAuthenticated'](),controller[_0xa9c7('0x1b')]);module[_0xa9c7('0x1c')]=router;
\ No newline at end of file
index ed7fd9e..a333ea9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5e8d=['DATE','moment','sequelize','STRING'];(function(_0x114d1f,_0x55548e){var _0x5b91d4=function(_0x358415){while(--_0x358415){_0x114d1f['push'](_0x114d1f['shift']());}};_0x5b91d4(++_0x55548e);}(_0x5e8d,0x14d));var _0xd5e8=function(_0xcff9de,_0x193e71){_0xcff9de=_0xcff9de-0x0;var _0x10fbcc=_0x5e8d[_0xcff9de];return _0x10fbcc;};'use strict';var moment=require(_0xd5e8('0x0'));var Sequelize=require(_0xd5e8('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0xd5e8('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0xd5e8('0x2')]},'joinAt':{'type':Sequelize[_0xd5e8('0x3')]},'leaveAt':{'type':Sequelize[_0xd5e8('0x3')]},'acceptAt':{'type':Sequelize[_0xd5e8('0x3')]},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xda3a=['DATE','STRING'];(function(_0x2236dc,_0x43c7f9){var _0x20583f=function(_0x293e36){while(--_0x293e36){_0x2236dc['push'](_0x2236dc['shift']());}};_0x20583f(++_0x43c7f9);}(_0xda3a,0xeb));var _0xada3=function(_0x1dc73a,_0x4d084e){_0x1dc73a=_0x1dc73a-0x0;var _0x2b3bf2=_0xda3a[_0x1dc73a];return _0x2b3bf2;};'use strict';var moment=require('moment');var Sequelize=require('sequelize');module['exports']={'uniqueid':{'type':Sequelize[_0xada3('0x0')],'allowNull':![]},'from':{'type':Sequelize[_0xada3('0x0')]},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize[_0xada3('0x1')]},'acceptAt':{'type':Sequelize[_0xada3('0x1')]},'exitAt':{'type':Sequelize[_0xada3('0x1')]},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 7456c0e..629bab7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b37=['end','stack','name','send','index','ChatQueueReport','rawAttributes','model','keys','query','filters','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','merge','map','type','key','VIRTUAL','field','options','includeAll','findAll','rows','show','params','intersection','include','find','create','body','catch','update','describe','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','json','offset','limit','set','Content-Range','then','destroy'];(function(_0x36ed48,_0x1ee0d4){var _0x51c63a=function(_0x2d0a40){while(--_0x2d0a40){_0x36ed48['push'](_0x36ed48['shift']());}};_0x51c63a(++_0x1ee0d4);}(_0x0b37,0x1d7));var _0x70b3=function(_0x103311,_0x13ba19){_0x103311=_0x103311-0x0;var _0x28778f=_0x0b37[_0x103311];return _0x28778f;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x70b3('0x0'));var rimraf=require(_0x70b3('0x1'));var zipdir=require(_0x70b3('0x2'));var jsonpatch=require(_0x70b3('0x3'));var rp=require('request-promise');var moment=require(_0x70b3('0x4'));var BPromise=require(_0x70b3('0x5'));var Mustache=require(_0x70b3('0x6'));var util=require(_0x70b3('0x7'));var path=require(_0x70b3('0x8'));var sox=require(_0x70b3('0x9'));var csv=require('to-csv');var ejs=require(_0x70b3('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x70b3('0xb'));var crypto=require(_0x70b3('0xc'));var jsforce=require(_0x70b3('0xd'));var deskjs=require(_0x70b3('0xe'));var toCsv=require(_0x70b3('0xf'));var querystring=require('querystring');var Papa=require(_0x70b3('0x10'));var Redis=require('ioredis');var authService=require(_0x70b3('0x11'));var qs=require(_0x70b3('0x12'));var hardwareService=require(_0x70b3('0x13'));var logger=require(_0x70b3('0x14'))(_0x70b3('0x15'));var utils=require('../../config/utils');var config=require(_0x70b3('0x16'));var db=require(_0x70b3('0x17'))['db'];function respondWithStatusCode(_0x6f171a,_0x4102d8){_0x4102d8=_0x4102d8||0xcc;return function(_0x419c0b){if(_0x419c0b){return _0x6f171a[_0x70b3('0x18')](_0x4102d8);}return _0x6f171a[_0x70b3('0x19')](_0x4102d8)['end']();};}function respondWithResult(_0x5a1b9f,_0x987a13){_0x987a13=_0x987a13||0xc8;return function(_0x5b9c4a){if(_0x5b9c4a){return _0x5a1b9f[_0x70b3('0x19')](_0x987a13)[_0x70b3('0x1a')](_0x5b9c4a);}};}function respondWithFilteredResult(_0xcd6e38,_0x28d356){return function(_0x357a7a){if(_0x357a7a){var _0x42bcd2=_0x357a7a['count'],_0x182819=_0x28d356[_0x70b3('0x1b')],_0x33acbd=_0x28d356[_0x70b3('0x1b')]+_0x28d356[_0x70b3('0x1c')],_0x363007;if(_0x33acbd>=_0x42bcd2){_0x33acbd=_0x42bcd2;_0x363007=0xc8;}else{_0x363007=0xce;}_0xcd6e38['status'](_0x363007);return _0xcd6e38[_0x70b3('0x1d')](_0x70b3('0x1e'),_0x182819+'-'+_0x33acbd+'/'+_0x42bcd2)[_0x70b3('0x1a')](_0x357a7a);}return null;};}function patchUpdates(_0x5175cc){return function(_0x4cedc3){try{jsonpatch['apply'](_0x4cedc3,_0x5175cc,!![]);}catch(_0x339407){return BPromise['reject'](_0x339407);}return _0x4cedc3['save']();};}function saveUpdates(_0xf65d5c,_0x38fbba){return function(_0x22db68){if(_0x22db68){return _0x22db68['update'](_0xf65d5c)[_0x70b3('0x1f')](function(_0x4764a0){return _0x4764a0;});}return null;};}function removeEntity(_0x29cfcf,_0x23c7f6){return function(_0x37ee57){if(_0x37ee57){return _0x37ee57[_0x70b3('0x20')]()['then'](function(){_0x29cfcf[_0x70b3('0x19')](0xcc)[_0x70b3('0x21')]();});}};}function handleEntityNotFound(_0x5e18c9,_0x54e284){return function(_0x336d7d){if(!_0x336d7d){_0x5e18c9[_0x70b3('0x18')](0x194);}return _0x336d7d;};}function handleError(_0x1b7c6c,_0x1f0227){_0x1f0227=_0x1f0227||0x1f4;return function(_0x4f15d3){logger['error'](_0x4f15d3[_0x70b3('0x22')]);if(_0x4f15d3[_0x70b3('0x23')]){delete _0x4f15d3[_0x70b3('0x23')];}_0x1b7c6c['status'](_0x1f0227)[_0x70b3('0x24')](_0x4f15d3);};}exports[_0x70b3('0x25')]=function(_0x455e4,_0x10f83f){var _0x26b2b3={},_0x44a25f={},_0x1c1fc0={'count':0x0,'rows':[]};var _0x4ed57b=db[_0x70b3('0x26')][_0x70b3('0x27')];_0x44a25f[_0x70b3('0x28')]=_[_0x70b3('0x29')](_0x4ed57b);_0x44a25f['query']=_[_0x70b3('0x29')](_0x455e4[_0x70b3('0x2a')]);_0x44a25f[_0x70b3('0x2b')]=_['intersection'](_0x44a25f[_0x70b3('0x28')],_0x44a25f['query']);_0x26b2b3[_0x70b3('0x2c')]=_['intersection'](_0x44a25f[_0x70b3('0x28')],qs[_0x70b3('0x2d')](_0x455e4[_0x70b3('0x2a')][_0x70b3('0x2d')]));_0x26b2b3['attributes']=_0x26b2b3['attributes'][_0x70b3('0x2e')]?_0x26b2b3[_0x70b3('0x2c')]:_0x44a25f['model'];if(!_0x455e4[_0x70b3('0x2a')][_0x70b3('0x2f')](_0x70b3('0x30'))){_0x26b2b3[_0x70b3('0x1c')]=qs[_0x70b3('0x1c')](_0x455e4[_0x70b3('0x2a')][_0x70b3('0x1c')]);_0x26b2b3[_0x70b3('0x1b')]=qs[_0x70b3('0x1b')](_0x455e4['query']['offset']);}_0x26b2b3['order']=qs['sort'](_0x455e4[_0x70b3('0x2a')][_0x70b3('0x31')]);_0x26b2b3[_0x70b3('0x32')]=qs[_0x70b3('0x2b')](_[_0x70b3('0x33')](_0x455e4[_0x70b3('0x2a')],_0x44a25f[_0x70b3('0x2b')]));if(_0x455e4['query']['filter']){_0x26b2b3[_0x70b3('0x32')]=_[_0x70b3('0x34')](_0x26b2b3['where'],{'$or':_[_0x70b3('0x35')](_0x4ed57b,function(_0x1ec101){if(_0x1ec101[_0x70b3('0x36')][_0x70b3('0x37')]!==_0x70b3('0x38')){var _0x4d1a01={};_0x4d1a01[_0x1ec101[_0x70b3('0x39')]]={'$like':'%'+_0x455e4[_0x70b3('0x2a')]['filter']+'%'};return _0x4d1a01;}})});}_0x26b2b3=_[_0x70b3('0x34')]({},_0x26b2b3,_0x455e4[_0x70b3('0x3a')]);var _0x49e1d6={'where':_0x26b2b3[_0x70b3('0x32')]};return db[_0x70b3('0x26')]['count'](_0x49e1d6)[_0x70b3('0x1f')](function(_0x42a0aa){_0x1c1fc0['count']=_0x42a0aa;if(_0x455e4[_0x70b3('0x2a')][_0x70b3('0x3b')]){_0x26b2b3['include']=[{'all':!![]}];}return db['ChatQueueReport'][_0x70b3('0x3c')](_0x26b2b3);})[_0x70b3('0x1f')](function(_0x4399a1){_0x1c1fc0[_0x70b3('0x3d')]=_0x4399a1;return _0x1c1fc0;})[_0x70b3('0x1f')](respondWithFilteredResult(_0x10f83f,_0x26b2b3))['catch'](handleError(_0x10f83f,null));};exports[_0x70b3('0x3e')]=function(_0xb08c20,_0x2351fb){var _0x454de6={'raw':!![],'where':{'id':_0xb08c20[_0x70b3('0x3f')]['id']}},_0x37218c={};_0x37218c['model']=_[_0x70b3('0x29')](db['ChatQueueReport']['rawAttributes']);_0x37218c['query']=_[_0x70b3('0x29')](_0xb08c20[_0x70b3('0x2a')]);_0x37218c['filters']=_[_0x70b3('0x40')](_0x37218c[_0x70b3('0x28')],_0x37218c[_0x70b3('0x2a')]);_0x454de6['attributes']=_[_0x70b3('0x40')](_0x37218c['model'],qs['fields'](_0xb08c20[_0x70b3('0x2a')][_0x70b3('0x2d')]));_0x454de6[_0x70b3('0x2c')]=_0x454de6['attributes'][_0x70b3('0x2e')]?_0x454de6[_0x70b3('0x2c')]:_0x37218c[_0x70b3('0x28')];if(_0xb08c20[_0x70b3('0x2a')]['includeAll']){_0x454de6[_0x70b3('0x41')]=[{'all':!![]}];}_0x454de6=_[_0x70b3('0x34')]({},_0x454de6,_0xb08c20[_0x70b3('0x3a')]);return db[_0x70b3('0x26')][_0x70b3('0x42')](_0x454de6)['then'](handleEntityNotFound(_0x2351fb,null))[_0x70b3('0x1f')](respondWithResult(_0x2351fb,null))['catch'](handleError(_0x2351fb,null));};exports[_0x70b3('0x43')]=function(_0x3b88fd,_0x529487){return db[_0x70b3('0x26')]['create'](_0x3b88fd[_0x70b3('0x44')],{})[_0x70b3('0x1f')](respondWithResult(_0x529487,0xc9))[_0x70b3('0x45')](handleError(_0x529487,null));};exports[_0x70b3('0x46')]=function(_0x2ed44a,_0x53e2ba){if(_0x2ed44a[_0x70b3('0x44')]['id']){delete _0x2ed44a[_0x70b3('0x44')]['id'];}return db[_0x70b3('0x26')][_0x70b3('0x42')]({'where':{'id':_0x2ed44a[_0x70b3('0x3f')]['id']}})[_0x70b3('0x1f')](handleEntityNotFound(_0x53e2ba,null))[_0x70b3('0x1f')](saveUpdates(_0x2ed44a[_0x70b3('0x44')],null))[_0x70b3('0x1f')](respondWithResult(_0x53e2ba,null))[_0x70b3('0x45')](handleError(_0x53e2ba,null));};exports[_0x70b3('0x20')]=function(_0x32eaab,_0x3013fb){return db[_0x70b3('0x26')][_0x70b3('0x42')]({'where':{'id':_0x32eaab[_0x70b3('0x3f')]['id']}})['then'](handleEntityNotFound(_0x3013fb,null))[_0x70b3('0x1f')](removeEntity(_0x3013fb,null))[_0x70b3('0x45')](handleError(_0x3013fb,null));};exports[_0x70b3('0x47')]=function(_0x21e3b0,_0x312fa5){return db[_0x70b3('0x26')][_0x70b3('0x47')]()[_0x70b3('0x1f')](respondWithResult(_0x312fa5,null))[_0x70b3('0x45')](handleError(_0x312fa5,null));};
\ No newline at end of file
+var _0x3351=['rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','to-csv','ejs','squel','jsforce','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','destroy','then','error','stack','name','send','index','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','where','pick','filter','merge','map','key','VIRTUAL','ChatQueueReport','includeAll','include','findAll','rows','show','rawAttributes','options','catch','create','body','find','params','describe','html-pdf','eml-format'];(function(_0x52b7d8,_0x3c26d5){var _0x222b1d=function(_0xb6c902){while(--_0xb6c902){_0x52b7d8['push'](_0x52b7d8['shift']());}};_0x222b1d(++_0x3c26d5);}(_0x3351,0x116));var _0x1335=function(_0x21aec3,_0x5c97e9){_0x21aec3=_0x21aec3-0x0;var _0x288bbc=_0x3351[_0x21aec3];return _0x288bbc;};'use strict';var pdf=require(_0x1335('0x0'));var emlformat=require(_0x1335('0x1'));var rimraf=require(_0x1335('0x2'));var zipdir=require(_0x1335('0x3'));var jsonpatch=require(_0x1335('0x4'));var rp=require(_0x1335('0x5'));var moment=require(_0x1335('0x6'));var BPromise=require('bluebird');var Mustache=require(_0x1335('0x7'));var util=require(_0x1335('0x8'));var path=require(_0x1335('0x9'));var sox=require('sox');var csv=require(_0x1335('0xa'));var ejs=require(_0x1335('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x1335('0xc'));var crypto=require('crypto');var jsforce=require(_0x1335('0xd'));var deskjs=require(_0x1335('0xe'));var toCsv=require(_0x1335('0xa'));var querystring=require('querystring');var Papa=require(_0x1335('0xf'));var Redis=require('ioredis');var authService=require(_0x1335('0x10'));var qs=require(_0x1335('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x1335('0x12'));var utils=require(_0x1335('0x13'));var config=require('../../config/environment');var db=require(_0x1335('0x14'))['db'];function respondWithStatusCode(_0x1a97b1,_0x1e8f2b){_0x1e8f2b=_0x1e8f2b||0xcc;return function(_0x11c7e2){if(_0x11c7e2){return _0x1a97b1[_0x1335('0x15')](_0x1e8f2b);}return _0x1a97b1[_0x1335('0x16')](_0x1e8f2b)[_0x1335('0x17')]();};}function respondWithResult(_0x46c204,_0x58874b){_0x58874b=_0x58874b||0xc8;return function(_0x3a377a){if(_0x3a377a){return _0x46c204[_0x1335('0x16')](_0x58874b)[_0x1335('0x18')](_0x3a377a);}};}function respondWithFilteredResult(_0x454eb1,_0x18df8d){return function(_0x18b1a7){if(_0x18b1a7){var _0x575ce7=_0x18b1a7[_0x1335('0x19')],_0x249c9f=_0x18df8d[_0x1335('0x1a')],_0xf00a55=_0x18df8d['offset']+_0x18df8d[_0x1335('0x1b')],_0x4dd6f4;if(_0xf00a55>=_0x575ce7){_0xf00a55=_0x575ce7;_0x4dd6f4=0xc8;}else{_0x4dd6f4=0xce;}_0x454eb1[_0x1335('0x16')](_0x4dd6f4);return _0x454eb1[_0x1335('0x1c')](_0x1335('0x1d'),_0x249c9f+'-'+_0xf00a55+'/'+_0x575ce7)[_0x1335('0x18')](_0x18b1a7);}return null;};}function patchUpdates(_0x54eef3){return function(_0x40916c){try{jsonpatch[_0x1335('0x1e')](_0x40916c,_0x54eef3,!![]);}catch(_0x48f22d){return BPromise['reject'](_0x48f22d);}return _0x40916c[_0x1335('0x1f')]();};}function saveUpdates(_0x36afe4,_0x270077){return function(_0x12c502){if(_0x12c502){return _0x12c502['update'](_0x36afe4)['then'](function(_0x56231a){return _0x56231a;});}return null;};}function removeEntity(_0x272252,_0x50a5b9){return function(_0x2d4dcb){if(_0x2d4dcb){return _0x2d4dcb[_0x1335('0x20')]()[_0x1335('0x21')](function(){_0x272252['status'](0xcc)[_0x1335('0x17')]();});}};}function handleEntityNotFound(_0x5ac93d,_0x5b19c1){return function(_0x36c7cf){if(!_0x36c7cf){_0x5ac93d[_0x1335('0x15')](0x194);}return _0x36c7cf;};}function handleError(_0x5601a2,_0x480403){_0x480403=_0x480403||0x1f4;return function(_0x58202c){logger[_0x1335('0x22')](_0x58202c[_0x1335('0x23')]);if(_0x58202c[_0x1335('0x24')]){delete _0x58202c[_0x1335('0x24')];}_0x5601a2[_0x1335('0x16')](_0x480403)[_0x1335('0x25')](_0x58202c);};}exports[_0x1335('0x26')]=function(_0x23b4e5,_0x5ea19b){var _0x1636ab={},_0x4b4ad1={},_0x435894={'count':0x0,'rows':[]};var _0x5d8dc1=db['ChatQueueReport']['rawAttributes'];_0x4b4ad1[_0x1335('0x27')]=_[_0x1335('0x28')](_0x5d8dc1);_0x4b4ad1['query']=_[_0x1335('0x28')](_0x23b4e5[_0x1335('0x29')]);_0x4b4ad1[_0x1335('0x2a')]=_[_0x1335('0x2b')](_0x4b4ad1[_0x1335('0x27')],_0x4b4ad1[_0x1335('0x29')]);_0x1636ab[_0x1335('0x2c')]=_[_0x1335('0x2b')](_0x4b4ad1['model'],qs[_0x1335('0x2d')](_0x23b4e5[_0x1335('0x29')][_0x1335('0x2d')]));_0x1636ab[_0x1335('0x2c')]=_0x1636ab[_0x1335('0x2c')][_0x1335('0x2e')]?_0x1636ab[_0x1335('0x2c')]:_0x4b4ad1['model'];if(!_0x23b4e5['query'][_0x1335('0x2f')]('nolimit')){_0x1636ab[_0x1335('0x1b')]=qs[_0x1335('0x1b')](_0x23b4e5[_0x1335('0x29')][_0x1335('0x1b')]);_0x1636ab[_0x1335('0x1a')]=qs[_0x1335('0x1a')](_0x23b4e5[_0x1335('0x29')]['offset']);}_0x1636ab[_0x1335('0x30')]=qs['sort'](_0x23b4e5['query']['sort']);_0x1636ab[_0x1335('0x31')]=qs[_0x1335('0x2a')](_[_0x1335('0x32')](_0x23b4e5[_0x1335('0x29')],_0x4b4ad1[_0x1335('0x2a')]));if(_0x23b4e5[_0x1335('0x29')][_0x1335('0x33')]){_0x1636ab[_0x1335('0x31')]=_[_0x1335('0x34')](_0x1636ab[_0x1335('0x31')],{'$or':_[_0x1335('0x35')](_0x5d8dc1,function(_0x576bd1){if(_0x576bd1['type'][_0x1335('0x36')]!==_0x1335('0x37')){var _0xc781f8={};_0xc781f8[_0x576bd1['field']]={'$like':'%'+_0x23b4e5['query']['filter']+'%'};return _0xc781f8;}})});}_0x1636ab=_['merge']({},_0x1636ab,_0x23b4e5['options']);var _0x5e0bdb={'where':_0x1636ab[_0x1335('0x31')]};return db[_0x1335('0x38')]['count'](_0x5e0bdb)[_0x1335('0x21')](function(_0x3988e8){_0x435894[_0x1335('0x19')]=_0x3988e8;if(_0x23b4e5[_0x1335('0x29')][_0x1335('0x39')]){_0x1636ab[_0x1335('0x3a')]=[{'all':!![]}];}return db[_0x1335('0x38')][_0x1335('0x3b')](_0x1636ab);})[_0x1335('0x21')](function(_0x1ce32f){_0x435894[_0x1335('0x3c')]=_0x1ce32f;return _0x435894;})[_0x1335('0x21')](respondWithFilteredResult(_0x5ea19b,_0x1636ab))['catch'](handleError(_0x5ea19b,null));};exports[_0x1335('0x3d')]=function(_0x53295b,_0x569355){var _0x254de7={'raw':!![],'where':{'id':_0x53295b['params']['id']}},_0x3a7625={};_0x3a7625[_0x1335('0x27')]=_[_0x1335('0x28')](db[_0x1335('0x38')][_0x1335('0x3e')]);_0x3a7625[_0x1335('0x29')]=_['keys'](_0x53295b[_0x1335('0x29')]);_0x3a7625['filters']=_[_0x1335('0x2b')](_0x3a7625['model'],_0x3a7625[_0x1335('0x29')]);_0x254de7[_0x1335('0x2c')]=_[_0x1335('0x2b')](_0x3a7625[_0x1335('0x27')],qs[_0x1335('0x2d')](_0x53295b[_0x1335('0x29')][_0x1335('0x2d')]));_0x254de7['attributes']=_0x254de7[_0x1335('0x2c')]['length']?_0x254de7[_0x1335('0x2c')]:_0x3a7625[_0x1335('0x27')];if(_0x53295b[_0x1335('0x29')][_0x1335('0x39')]){_0x254de7[_0x1335('0x3a')]=[{'all':!![]}];}_0x254de7=_[_0x1335('0x34')]({},_0x254de7,_0x53295b[_0x1335('0x3f')]);return db[_0x1335('0x38')]['find'](_0x254de7)[_0x1335('0x21')](handleEntityNotFound(_0x569355,null))[_0x1335('0x21')](respondWithResult(_0x569355,null))[_0x1335('0x40')](handleError(_0x569355,null));};exports[_0x1335('0x41')]=function(_0x56cc52,_0x2b3836){return db['ChatQueueReport'][_0x1335('0x41')](_0x56cc52['body'],{})[_0x1335('0x21')](respondWithResult(_0x2b3836,0xc9))['catch'](handleError(_0x2b3836,null));};exports['update']=function(_0x5e47df,_0x4b42d4){if(_0x5e47df['body']['id']){delete _0x5e47df[_0x1335('0x42')]['id'];}return db['ChatQueueReport'][_0x1335('0x43')]({'where':{'id':_0x5e47df[_0x1335('0x44')]['id']}})[_0x1335('0x21')](handleEntityNotFound(_0x4b42d4,null))[_0x1335('0x21')](saveUpdates(_0x5e47df[_0x1335('0x42')],null))[_0x1335('0x21')](respondWithResult(_0x4b42d4,null))[_0x1335('0x40')](handleError(_0x4b42d4,null));};exports[_0x1335('0x20')]=function(_0x1177ac,_0x1c855e){return db[_0x1335('0x38')][_0x1335('0x43')]({'where':{'id':_0x1177ac[_0x1335('0x44')]['id']}})[_0x1335('0x21')](handleEntityNotFound(_0x1c855e,null))[_0x1335('0x21')](removeEntity(_0x1c855e,null))[_0x1335('0x40')](handleError(_0x1c855e,null));};exports[_0x1335('0x45')]=function(_0x4a56d9,_0x50c9bb){return db[_0x1335('0x38')][_0x1335('0x45')]()[_0x1335('0x21')](respondWithResult(_0x50c9bb,null))[_0x1335('0x40')](handleError(_0x50c9bb,null));};
\ No newline at end of file
index d13efb0..462cd80 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8774=['bluebird','path','../../config/environment','./chatQueueReport.attributes','exports','define','uniqueid','lodash','../../config/logger','api','moment'];(function(_0x311c35,_0x534915){var _0x5cc50c=function(_0x3ad680){while(--_0x3ad680){_0x311c35['push'](_0x311c35['shift']());}};_0x5cc50c(++_0x534915);}(_0x8774,0xac));var _0x4877=function(_0x5b2ca9,_0x3b3410){_0x5b2ca9=_0x5b2ca9-0x0;var _0x531dbd=_0x8774[_0x5b2ca9];return _0x531dbd;};'use strict';var _=require(_0x4877('0x0'));var util=require('util');var logger=require(_0x4877('0x1'))(_0x4877('0x2'));var moment=require(_0x4877('0x3'));var BPromise=require(_0x4877('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x4877('0x5'));var rimraf=require('rimraf');var config=require(_0x4877('0x6'));var attributes=require(_0x4877('0x7'));module[_0x4877('0x8')]=function(_0x553de4,_0x553127){return _0x553de4[_0x4877('0x9')]('ChatQueueReport',attributes,{'tableName':'report_chat_queue','paranoid':![],'indexes':[{'name':_0x4877('0xa'),'fields':[_0x4877('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x84c9=['ChatQueueReport','uniqueid','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','exports'];(function(_0xbfc9b,_0x1a9cf2){var _0x4cbacd=function(_0x21ea27){while(--_0x21ea27){_0xbfc9b['push'](_0xbfc9b['shift']());}};_0x4cbacd(++_0x1a9cf2);}(_0x84c9,0x14c));var _0x984c=function(_0x5f3598,_0xe8b84e){_0x5f3598=_0x5f3598-0x0;var _0x293243=_0x84c9[_0x5f3598];return _0x293243;};'use strict';var _=require('lodash');var util=require(_0x984c('0x0'));var logger=require(_0x984c('0x1'))(_0x984c('0x2'));var moment=require(_0x984c('0x3'));var BPromise=require(_0x984c('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x984c('0x5'));var rimraf=require(_0x984c('0x6'));var config=require(_0x984c('0x7'));var attributes=require('./chatQueueReport.attributes');module[_0x984c('0x8')]=function(_0x1dbac3,_0xfe5d93){return _0x1dbac3['define'](_0x984c('0x9'),attributes,{'tableName':'report_chat_queue','paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x984c('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index 6e711a7..1a6e921 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd202=['limit','UpdateChatQueueReport','lodash','util','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','then','info','debug','ChatQueueReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','ChatQueueReport,\x20%s,\x20%s','message','result','CreateChatQueueReport','ChatQueueReport','create','body','options','raw','catch','update','where','attributes'];(function(_0x2470e6,_0xb6abc7){var _0x33dce0=function(_0x2c2514){while(--_0x2c2514){_0x2470e6['push'](_0x2470e6['shift']());}};_0x33dce0(++_0xb6abc7);}(_0xd202,0xf0));var _0x2d20=function(_0x465028,_0x4570ac){_0x465028=_0x465028-0x0;var _0xb783d4=_0xd202[_0x465028];return _0xb783d4;};'use strict';var _=require(_0x2d20('0x0'));var util=require(_0x2d20('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x2d20('0x2'));var fs=require('fs');var Redis=require(_0x2d20('0x3'));var db=require(_0x2d20('0x4'))['db'];var utils=require(_0x2d20('0x5'));var logger=require(_0x2d20('0x6'))(_0x2d20('0x7'));var config=require(_0x2d20('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x2d20('0x9')][_0x2d20('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4e6bee,_0x2696f1,_0x225156){return new BPromise(function(_0x53026b,_0x3eba1b){return client['request'](_0x4e6bee,_0x225156)[_0x2d20('0xb')](function(_0x485410){logger[_0x2d20('0xc')]('ChatQueueReport,\x20%s,\x20%s',_0x2696f1,'request\x20sent');logger[_0x2d20('0xd')](_0x2d20('0xe'),_0x2696f1,_0x2d20('0xf'),JSON[_0x2d20('0x10')](_0x485410));if(_0x485410[_0x2d20('0x11')]){if(_0x485410[_0x2d20('0x11')][_0x2d20('0x12')]===0x1f4){logger[_0x2d20('0x11')](_0x2d20('0x13'),_0x2696f1,_0x485410[_0x2d20('0x11')]['message']);return _0x3eba1b(_0x485410['error'][_0x2d20('0x14')]);}logger['error'](_0x2d20('0x13'),_0x2696f1,_0x485410['error'][_0x2d20('0x14')]);return _0x53026b(_0x485410[_0x2d20('0x11')][_0x2d20('0x14')]);}else{logger[_0x2d20('0xc')](_0x2d20('0x13'),_0x2696f1,_0x2d20('0xf'));_0x53026b(_0x485410[_0x2d20('0x15')][_0x2d20('0x14')]);}})['catch'](function(_0x172132){logger[_0x2d20('0x11')]('ChatQueueReport,\x20%s,\x20%s',_0x2696f1,_0x172132);_0x3eba1b(_0x172132);});});}exports[_0x2d20('0x16')]=function(_0x675427){var _0x452d16=this;return new Promise(function(_0x3f2b32,_0x475c8e){return db[_0x2d20('0x17')][_0x2d20('0x18')](_0x675427[_0x2d20('0x19')],{'raw':_0x675427['options']?_0x675427[_0x2d20('0x1a')][_0x2d20('0x1b')]===undefined?!![]:![]:!![]})[_0x2d20('0xb')](function(_0xa441d1){logger[_0x2d20('0xc')]('CreateChatQueueReport',_0x675427);logger[_0x2d20('0xd')](_0x2d20('0x16'),_0x675427,JSON[_0x2d20('0x10')](_0xa441d1));_0x3f2b32(_0xa441d1);})[_0x2d20('0x1c')](function(_0x41b6a0){logger['error'](_0x2d20('0x16'),_0x41b6a0[_0x2d20('0x14')],_0x675427);_0x475c8e(_0x452d16[_0x2d20('0x11')](0x1f4,_0x41b6a0[_0x2d20('0x14')]));});});};exports['UpdateChatQueueReport']=function(_0x1723fe){var _0x6e2c1=this;return new Promise(function(_0x305dd9,_0x257622){return db['ChatQueueReport'][_0x2d20('0x1d')](_0x1723fe['body'],{'raw':_0x1723fe[_0x2d20('0x1a')]?_0x1723fe[_0x2d20('0x1a')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1723fe[_0x2d20('0x1a')]?_0x1723fe[_0x2d20('0x1a')][_0x2d20('0x1e')]||null:null,'attributes':_0x1723fe[_0x2d20('0x1a')]?_0x1723fe[_0x2d20('0x1a')][_0x2d20('0x1f')]||null:null,'limit':_0x1723fe[_0x2d20('0x1a')]?_0x1723fe[_0x2d20('0x1a')][_0x2d20('0x20')]||null:null})[_0x2d20('0xb')](function(_0x1b2206){logger[_0x2d20('0xc')](_0x2d20('0x21'),_0x1723fe);logger[_0x2d20('0xd')](_0x2d20('0x21'),_0x1723fe,JSON[_0x2d20('0x10')](_0x1b2206));_0x305dd9(_0x1b2206);})['catch'](function(_0x205f56){logger[_0x2d20('0x11')](_0x2d20('0x21'),_0x205f56['message'],_0x1723fe);_0x257622(_0x6e2c1[_0x2d20('0x11')](0x1f4,_0x205f56[_0x2d20('0x14')]));});});};
\ No newline at end of file
+var _0x2295=['create','body','raw','debug','UpdateChatQueueReport','ChatQueueReport','update','options','where','attributes','limit','catch','util','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','ChatQueueReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','code','error','ChatQueueReport,\x20%s,\x20%s','message','info','result'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x2295,0xac));var _0x5229=function(_0x57b825,_0x18027d){_0x57b825=_0x57b825-0x0;var _0x2a02ad=_0x2295[_0x57b825];return _0x2a02ad;};'use strict';var _=require('lodash');var util=require(_0x5229('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x5229('0x1'));var fs=require('fs');var Redis=require(_0x5229('0x2'));var db=require(_0x5229('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x5229('0x4'))(_0x5229('0x5'));var config=require(_0x5229('0x6'));var jayson=require(_0x5229('0x7'));var client=jayson[_0x5229('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1fdefa,_0x11267f,_0x37a59c){return new BPromise(function(_0x324d23,_0x5d8344){return client[_0x5229('0x9')](_0x1fdefa,_0x37a59c)[_0x5229('0xa')](function(_0x1def10){logger['info']('ChatQueueReport,\x20%s,\x20%s',_0x11267f,'request\x20sent');logger['debug'](_0x5229('0xb'),_0x11267f,_0x5229('0xc'),JSON[_0x5229('0xd')](_0x1def10));if(_0x1def10['error']){if(_0x1def10['error'][_0x5229('0xe')]===0x1f4){logger[_0x5229('0xf')](_0x5229('0x10'),_0x11267f,_0x1def10[_0x5229('0xf')][_0x5229('0x11')]);return _0x5d8344(_0x1def10[_0x5229('0xf')][_0x5229('0x11')]);}logger[_0x5229('0xf')](_0x5229('0x10'),_0x11267f,_0x1def10[_0x5229('0xf')][_0x5229('0x11')]);return _0x324d23(_0x1def10[_0x5229('0xf')][_0x5229('0x11')]);}else{logger[_0x5229('0x12')](_0x5229('0x10'),_0x11267f,_0x5229('0xc'));_0x324d23(_0x1def10[_0x5229('0x13')][_0x5229('0x11')]);}})['catch'](function(_0x531c9b){logger[_0x5229('0xf')]('ChatQueueReport,\x20%s,\x20%s',_0x11267f,_0x531c9b);_0x5d8344(_0x531c9b);});});}exports['CreateChatQueueReport']=function(_0x335de6){var _0x295a0f=this;return new Promise(function(_0x186b90,_0x5d9251){return db['ChatQueueReport'][_0x5229('0x14')](_0x335de6[_0x5229('0x15')],{'raw':_0x335de6['options']?_0x335de6['options'][_0x5229('0x16')]===undefined?!![]:![]:!![]})[_0x5229('0xa')](function(_0x42c943){logger[_0x5229('0x12')]('CreateChatQueueReport',_0x335de6);logger[_0x5229('0x17')]('CreateChatQueueReport',_0x335de6,JSON[_0x5229('0xd')](_0x42c943));_0x186b90(_0x42c943);})['catch'](function(_0x3d2352){logger['error']('CreateChatQueueReport',_0x3d2352[_0x5229('0x11')],_0x335de6);_0x5d9251(_0x295a0f[_0x5229('0xf')](0x1f4,_0x3d2352[_0x5229('0x11')]));});});};exports[_0x5229('0x18')]=function(_0x1dcf87){var _0x336f81=this;return new Promise(function(_0x2df677,_0x10747a){return db[_0x5229('0x19')][_0x5229('0x1a')](_0x1dcf87[_0x5229('0x15')],{'raw':_0x1dcf87[_0x5229('0x1b')]?_0x1dcf87[_0x5229('0x1b')][_0x5229('0x16')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1dcf87[_0x5229('0x1b')]?_0x1dcf87['options'][_0x5229('0x1c')]||null:null,'attributes':_0x1dcf87[_0x5229('0x1b')]?_0x1dcf87[_0x5229('0x1b')][_0x5229('0x1d')]||null:null,'limit':_0x1dcf87['options']?_0x1dcf87[_0x5229('0x1b')][_0x5229('0x1e')]||null:null})[_0x5229('0xa')](function(_0x5eda5e){logger['info'](_0x5229('0x18'),_0x1dcf87);logger['debug'](_0x5229('0x18'),_0x1dcf87,JSON[_0x5229('0xd')](_0x5eda5e));_0x2df677(_0x5eda5e);})[_0x5229('0x1f')](function(_0x4487e2){logger['error'](_0x5229('0x18'),_0x4487e2[_0x5229('0x11')],_0x1dcf87);_0x10747a(_0x336f81[_0x5229('0xf')](0x1f4,_0x4487e2[_0x5229('0x11')]));});});};
\ No newline at end of file
index 62c4f50..31d7fc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6715=['util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./chatQueueReport.controller','get','isAuthenticated','/describe','/:id','create','put','update','multer'];(function(_0x1f5a63,_0x511504){var _0x30bb7a=function(_0x476310){while(--_0x476310){_0x1f5a63['push'](_0x1f5a63['shift']());}};_0x30bb7a(++_0x511504);}(_0x6715,0x16f));var _0x5671=function(_0x107b64,_0x498ccc){_0x107b64=_0x107b64-0x0;var _0x525813=_0x6715[_0x107b64];return _0x525813;};'use strict';var multer=require(_0x5671('0x0'));var util=require(_0x5671('0x1'));var path=require(_0x5671('0x2'));var timeout=require(_0x5671('0x3'));var express=require(_0x5671('0x4'));var router=express[_0x5671('0x5')]();var auth=require(_0x5671('0x6'));var interaction=require(_0x5671('0x7'));var config=require('../../config/environment');var controller=require(_0x5671('0x8'));router[_0x5671('0x9')]('/',auth[_0x5671('0xa')](),controller['index']);router[_0x5671('0x9')](_0x5671('0xb'),auth[_0x5671('0xa')](),controller['describe']);router[_0x5671('0x9')](_0x5671('0xc'),auth[_0x5671('0xa')](),controller['show']);router['post']('/',auth[_0x5671('0xa')](),controller[_0x5671('0xd')]);router[_0x5671('0xe')](_0x5671('0xc'),auth['isAuthenticated'](),controller[_0x5671('0xf')]);router['delete'](_0x5671('0xc'),auth[_0x5671('0xa')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0xa174=['isAuthenticated','describe','get','create','put','/:id','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment'];(function(_0x19f502,_0x595f06){var _0x206167=function(_0x36289e){while(--_0x36289e){_0x19f502['push'](_0x19f502['shift']());}};_0x206167(++_0x595f06);}(_0xa174,0x172));var _0x4a17=function(_0x3ad430,_0x16e660){_0x3ad430=_0x3ad430-0x0;var _0x15e7d2=_0xa174[_0x3ad430];return _0x15e7d2;};'use strict';var multer=require(_0x4a17('0x0'));var util=require(_0x4a17('0x1'));var path=require(_0x4a17('0x2'));var timeout=require(_0x4a17('0x3'));var express=require(_0x4a17('0x4'));var router=express[_0x4a17('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x4a17('0x6'));var config=require(_0x4a17('0x7'));var controller=require('./chatQueueReport.controller');router['get']('/',auth['isAuthenticated'](),controller['index']);router['get']('/describe',auth[_0x4a17('0x8')](),controller[_0x4a17('0x9')]);router[_0x4a17('0xa')]('/:id',auth[_0x4a17('0x8')](),controller['show']);router['post']('/',auth[_0x4a17('0x8')](),controller[_0x4a17('0xb')]);router[_0x4a17('0xc')](_0x4a17('0xd'),auth[_0x4a17('0x8')](),controller[_0x4a17('0xe')]);router[_0x4a17('0xf')](_0x4a17('0xd'),auth[_0x4a17('0x8')](),controller[_0x4a17('0x10')]);module[_0x4a17('0x11')]=router;
\ No newline at end of file
index 45b1623..cb944ac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3af6=['DATE','NOW','moment','sequelize','exports','STRING','account','agent','queue'];(function(_0x3318c3,_0x35066){var _0x15c002=function(_0xd82271){while(--_0xd82271){_0x3318c3['push'](_0x3318c3['shift']());}};_0x15c002(++_0x35066);}(_0x3af6,0x65));var _0x63af=function(_0x126558,_0x143c9a){_0x126558=_0x126558-0x0;var _0x1f6d14=_0x3af6[_0x126558];return _0x1f6d14;};'use strict';var moment=require(_0x63af('0x0'));var Sequelize=require(_0x63af('0x1'));module[_0x63af('0x2')]={'uniqueid':{'type':Sequelize[_0x63af('0x3')],'allowNull':![]},'type':{'type':Sequelize['ENUM'](_0x63af('0x4'),_0x63af('0x5'),_0x63af('0x6')),'allowNull':![],'defaultValue':_0x63af('0x6')},'transferredAt':{'type':Sequelize[_0x63af('0x7')],'allowNull':![],'defaultValue':Sequelize[_0x63af('0x8')]}};
\ No newline at end of file
+var _0x7601=['sequelize','exports','STRING','ENUM','account','agent','queue','DATE','NOW','moment'];(function(_0x4b7895,_0x3c4f5d){var _0x264180=function(_0xe0e861){while(--_0xe0e861){_0x4b7895['push'](_0x4b7895['shift']());}};_0x264180(++_0x3c4f5d);}(_0x7601,0x1d5));var _0x1760=function(_0x5bc8d1,_0x5800fe){_0x5bc8d1=_0x5bc8d1-0x0;var _0x5db7d0=_0x7601[_0x5bc8d1];return _0x5db7d0;};'use strict';var moment=require(_0x1760('0x0'));var Sequelize=require(_0x1760('0x1'));module[_0x1760('0x2')]={'uniqueid':{'type':Sequelize[_0x1760('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x1760('0x4')](_0x1760('0x5'),_0x1760('0x6'),_0x1760('0x7')),'allowNull':![],'defaultValue':'queue'},'transferredAt':{'type':Sequelize[_0x1760('0x8')],'allowNull':![],'defaultValue':Sequelize[_0x1760('0x9')]}};
\ No newline at end of file
index 0350c90..712441a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6a4=['length','order','sort','where','pick','merge','type','key','VIRTUAL','field','options','count','ChatTransferReport','findAll','catch','show','params','includeAll','create','body','find','destroy','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','jsforce','querystring','ioredis','../../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','update','then','stack','name','send','rawAttributes','model','keys','query','filters','intersection','attributes','fields'];(function(_0x40ac5e,_0x2de228){var _0x2839d6=function(_0x123d47){while(--_0x123d47){_0x40ac5e['push'](_0x40ac5e['shift']());}};_0x2839d6(++_0x2de228);}(_0xa6a4,0xe9));var _0x4a6a=function(_0x5f29ff,_0x4346a8){_0x5f29ff=_0x5f29ff-0x0;var _0x422f89=_0xa6a4[_0x5f29ff];return _0x422f89;};'use strict';var pdf=require(_0x4a6a('0x0'));var emlformat=require(_0x4a6a('0x1'));var rimraf=require(_0x4a6a('0x2'));var zipdir=require(_0x4a6a('0x3'));var jsonpatch=require(_0x4a6a('0x4'));var rp=require(_0x4a6a('0x5'));var moment=require(_0x4a6a('0x6'));var BPromise=require(_0x4a6a('0x7'));var Mustache=require('mustache');var util=require(_0x4a6a('0x8'));var path=require(_0x4a6a('0x9'));var sox=require(_0x4a6a('0xa'));var csv=require(_0x4a6a('0xb'));var ejs=require(_0x4a6a('0xc'));var fs=require('fs');var _=require(_0x4a6a('0xd'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x4a6a('0xe'));var deskjs=require('desk.js');var toCsv=require(_0x4a6a('0xb'));var querystring=require(_0x4a6a('0xf'));var Papa=require('papaparse');var Redis=require(_0x4a6a('0x10'));var authService=require(_0x4a6a('0x11'));var qs=require(_0x4a6a('0x12'));var hardwareService=require(_0x4a6a('0x13'));var logger=require(_0x4a6a('0x14'))(_0x4a6a('0x15'));var utils=require(_0x4a6a('0x16'));var config=require(_0x4a6a('0x17'));var db=require(_0x4a6a('0x18'))['db'];function respondWithStatusCode(_0x5b2c6e,_0x1c5d00){_0x1c5d00=_0x1c5d00||0xcc;return function(_0x4cfd8a){if(_0x4cfd8a){return _0x5b2c6e[_0x4a6a('0x19')](_0x1c5d00);}return _0x5b2c6e[_0x4a6a('0x1a')](_0x1c5d00)['end']();};}function respondWithResult(_0x4414a5,_0x868a32){_0x868a32=_0x868a32||0xc8;return function(_0x51e275){if(_0x51e275){return _0x4414a5['status'](_0x868a32)[_0x4a6a('0x1b')](_0x51e275);}};}function respondWithFilteredResult(_0x981bd7,_0x2cbf63){return function(_0x491879){if(_0x491879){var _0x379e03=_0x491879['count'],_0x20421a=_0x2cbf63[_0x4a6a('0x1c')],_0x16decd=_0x2cbf63[_0x4a6a('0x1c')]+_0x2cbf63[_0x4a6a('0x1d')],_0x24b9f3;if(_0x16decd>=_0x379e03){_0x16decd=_0x379e03;_0x24b9f3=0xc8;}else{_0x24b9f3=0xce;}_0x981bd7[_0x4a6a('0x1a')](_0x24b9f3);return _0x981bd7[_0x4a6a('0x1e')](_0x4a6a('0x1f'),_0x20421a+'-'+_0x16decd+'/'+_0x379e03)[_0x4a6a('0x1b')](_0x491879);}return null;};}function patchUpdates(_0x5322f6){return function(_0x48792e){try{jsonpatch[_0x4a6a('0x20')](_0x48792e,_0x5322f6,!![]);}catch(_0x50409b){return BPromise[_0x4a6a('0x21')](_0x50409b);}return _0x48792e['save']();};}function saveUpdates(_0x140fca,_0xb064a0){return function(_0x460fdf){if(_0x460fdf){return _0x460fdf[_0x4a6a('0x22')](_0x140fca)[_0x4a6a('0x23')](function(_0x44c54f){return _0x44c54f;});}return null;};}function removeEntity(_0x4acae6,_0x5cbcd4){return function(_0x53eed3){if(_0x53eed3){return _0x53eed3['destroy']()[_0x4a6a('0x23')](function(){_0x4acae6[_0x4a6a('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1d853b,_0x516e42){return function(_0x28ef17){if(!_0x28ef17){_0x1d853b[_0x4a6a('0x19')](0x194);}return _0x28ef17;};}function handleError(_0x55dd2e,_0x32174a){_0x32174a=_0x32174a||0x1f4;return function(_0x1953c4){logger['error'](_0x1953c4[_0x4a6a('0x24')]);if(_0x1953c4[_0x4a6a('0x25')]){delete _0x1953c4[_0x4a6a('0x25')];}_0x55dd2e[_0x4a6a('0x1a')](_0x32174a)[_0x4a6a('0x26')](_0x1953c4);};}exports['index']=function(_0x4b661b,_0x3d5ab6){var _0x4e8af5={},_0x500fa7={},_0x11d1e1={'count':0x0,'rows':[]};var _0x1de019=db['ChatTransferReport'][_0x4a6a('0x27')];_0x500fa7[_0x4a6a('0x28')]=_[_0x4a6a('0x29')](_0x1de019);_0x500fa7['query']=_[_0x4a6a('0x29')](_0x4b661b[_0x4a6a('0x2a')]);_0x500fa7[_0x4a6a('0x2b')]=_[_0x4a6a('0x2c')](_0x500fa7[_0x4a6a('0x28')],_0x500fa7[_0x4a6a('0x2a')]);_0x4e8af5[_0x4a6a('0x2d')]=_['intersection'](_0x500fa7[_0x4a6a('0x28')],qs['fields'](_0x4b661b[_0x4a6a('0x2a')][_0x4a6a('0x2e')]));_0x4e8af5[_0x4a6a('0x2d')]=_0x4e8af5[_0x4a6a('0x2d')][_0x4a6a('0x2f')]?_0x4e8af5['attributes']:_0x500fa7['model'];if(!_0x4b661b[_0x4a6a('0x2a')]['hasOwnProperty']('nolimit')){_0x4e8af5[_0x4a6a('0x1d')]=qs[_0x4a6a('0x1d')](_0x4b661b[_0x4a6a('0x2a')][_0x4a6a('0x1d')]);_0x4e8af5[_0x4a6a('0x1c')]=qs[_0x4a6a('0x1c')](_0x4b661b[_0x4a6a('0x2a')][_0x4a6a('0x1c')]);}_0x4e8af5[_0x4a6a('0x30')]=qs['sort'](_0x4b661b[_0x4a6a('0x2a')][_0x4a6a('0x31')]);_0x4e8af5[_0x4a6a('0x32')]=qs[_0x4a6a('0x2b')](_[_0x4a6a('0x33')](_0x4b661b[_0x4a6a('0x2a')],_0x500fa7['filters']));if(_0x4b661b[_0x4a6a('0x2a')]['filter']){_0x4e8af5['where']=_[_0x4a6a('0x34')](_0x4e8af5['where'],{'$or':_['map'](_0x1de019,function(_0x58c859){if(_0x58c859[_0x4a6a('0x35')][_0x4a6a('0x36')]!==_0x4a6a('0x37')){var _0x5a36c5={};_0x5a36c5[_0x58c859[_0x4a6a('0x38')]]={'$like':'%'+_0x4b661b['query']['filter']+'%'};return _0x5a36c5;}})});}_0x4e8af5=_[_0x4a6a('0x34')]({},_0x4e8af5,_0x4b661b[_0x4a6a('0x39')]);var _0x2ebb6b={'where':_0x4e8af5[_0x4a6a('0x32')]};return db['ChatTransferReport'][_0x4a6a('0x3a')](_0x2ebb6b)['then'](function(_0x1188d2){_0x11d1e1[_0x4a6a('0x3a')]=_0x1188d2;if(_0x4b661b[_0x4a6a('0x2a')]['includeAll']){_0x4e8af5['include']=[{'all':!![]}];}return db[_0x4a6a('0x3b')][_0x4a6a('0x3c')](_0x4e8af5);})[_0x4a6a('0x23')](function(_0x26a781){_0x11d1e1['rows']=_0x26a781;return _0x11d1e1;})[_0x4a6a('0x23')](respondWithFilteredResult(_0x3d5ab6,_0x4e8af5))[_0x4a6a('0x3d')](handleError(_0x3d5ab6,null));};exports[_0x4a6a('0x3e')]=function(_0x3e4fb7,_0x555f77){var _0x28a483={'raw':!![],'where':{'id':_0x3e4fb7[_0x4a6a('0x3f')]['id']}},_0x567af4={};_0x567af4[_0x4a6a('0x28')]=_[_0x4a6a('0x29')](db['ChatTransferReport'][_0x4a6a('0x27')]);_0x567af4[_0x4a6a('0x2a')]=_['keys'](_0x3e4fb7[_0x4a6a('0x2a')]);_0x567af4[_0x4a6a('0x2b')]=_[_0x4a6a('0x2c')](_0x567af4[_0x4a6a('0x28')],_0x567af4[_0x4a6a('0x2a')]);_0x28a483['attributes']=_[_0x4a6a('0x2c')](_0x567af4[_0x4a6a('0x28')],qs[_0x4a6a('0x2e')](_0x3e4fb7['query'][_0x4a6a('0x2e')]));_0x28a483['attributes']=_0x28a483[_0x4a6a('0x2d')]['length']?_0x28a483['attributes']:_0x567af4[_0x4a6a('0x28')];if(_0x3e4fb7['query'][_0x4a6a('0x40')]){_0x28a483['include']=[{'all':!![]}];}_0x28a483=_[_0x4a6a('0x34')]({},_0x28a483,_0x3e4fb7['options']);return db[_0x4a6a('0x3b')]['find'](_0x28a483)['then'](handleEntityNotFound(_0x555f77,null))['then'](respondWithResult(_0x555f77,null))[_0x4a6a('0x3d')](handleError(_0x555f77,null));};exports[_0x4a6a('0x41')]=function(_0x398d5a,_0x41c101){return db['ChatTransferReport']['create'](_0x398d5a['body'],{})['then'](respondWithResult(_0x41c101,0xc9))[_0x4a6a('0x3d')](handleError(_0x41c101,null));};exports[_0x4a6a('0x22')]=function(_0x1a4c47,_0x2fd9fa){if(_0x1a4c47[_0x4a6a('0x42')]['id']){delete _0x1a4c47[_0x4a6a('0x42')]['id'];}return db['ChatTransferReport'][_0x4a6a('0x43')]({'where':{'id':_0x1a4c47[_0x4a6a('0x3f')]['id']}})[_0x4a6a('0x23')](handleEntityNotFound(_0x2fd9fa,null))['then'](saveUpdates(_0x1a4c47[_0x4a6a('0x42')],null))[_0x4a6a('0x23')](respondWithResult(_0x2fd9fa,null))[_0x4a6a('0x3d')](handleError(_0x2fd9fa,null));};exports[_0x4a6a('0x44')]=function(_0x309e3f,_0x8c2371){return db[_0x4a6a('0x3b')][_0x4a6a('0x43')]({'where':{'id':_0x309e3f[_0x4a6a('0x3f')]['id']}})['then'](handleEntityNotFound(_0x8c2371,null))['then'](removeEntity(_0x8c2371,null))[_0x4a6a('0x3d')](handleError(_0x8c2371,null));};exports[_0x4a6a('0x45')]=function(_0x3685aa,_0x1f38e7){return db[_0x4a6a('0x3b')][_0x4a6a('0x45')]()[_0x4a6a('0x23')](respondWithResult(_0x1f38e7,null))[_0x4a6a('0x3d')](handleError(_0x1f38e7,null));};
\ No newline at end of file
+var _0x7762=['squel','jsforce','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','error','name','keys','query','filters','model','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','map','key','VIRTUAL','field','filter','merge','options','include','ChatTransferReport','findAll','rows','catch','show','params','rawAttributes','includeAll','find','create','body','describe','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash'];(function(_0x56d609,_0x2dc4f9){var _0x107b48=function(_0x572c31){while(--_0x572c31){_0x56d609['push'](_0x56d609['shift']());}};_0x107b48(++_0x2dc4f9);}(_0x7762,0x117));var _0x2776=function(_0x29e670,_0x51eb63){_0x29e670=_0x29e670-0x0;var _0x431615=_0x7762[_0x29e670];return _0x431615;};'use strict';var pdf=require(_0x2776('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x2776('0x1'));var zipdir=require(_0x2776('0x2'));var jsonpatch=require(_0x2776('0x3'));var rp=require('request-promise');var moment=require(_0x2776('0x4'));var BPromise=require(_0x2776('0x5'));var Mustache=require(_0x2776('0x6'));var util=require(_0x2776('0x7'));var path=require(_0x2776('0x8'));var sox=require(_0x2776('0x9'));var csv=require(_0x2776('0xa'));var ejs=require(_0x2776('0xb'));var fs=require('fs');var _=require(_0x2776('0xc'));var squel=require(_0x2776('0xd'));var crypto=require('crypto');var jsforce=require(_0x2776('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x2776('0xf'));var Papa=require(_0x2776('0x10'));var Redis=require(_0x2776('0x11'));var authService=require('../../components/auth/service');var qs=require(_0x2776('0x12'));var hardwareService=require(_0x2776('0x13'));var logger=require(_0x2776('0x14'))(_0x2776('0x15'));var utils=require('../../config/utils');var config=require(_0x2776('0x16'));var db=require(_0x2776('0x17'))['db'];function respondWithStatusCode(_0x3818f6,_0x15d9d1){_0x15d9d1=_0x15d9d1||0xcc;return function(_0x2b7716){if(_0x2b7716){return _0x3818f6[_0x2776('0x18')](_0x15d9d1);}return _0x3818f6[_0x2776('0x19')](_0x15d9d1)[_0x2776('0x1a')]();};}function respondWithResult(_0x5de7e0,_0x60d336){_0x60d336=_0x60d336||0xc8;return function(_0x49bc3a){if(_0x49bc3a){return _0x5de7e0['status'](_0x60d336)[_0x2776('0x1b')](_0x49bc3a);}};}function respondWithFilteredResult(_0x589c54,_0x2d66b3){return function(_0x4f89d1){if(_0x4f89d1){var _0x187351=_0x4f89d1[_0x2776('0x1c')],_0x4fe92c=_0x2d66b3[_0x2776('0x1d')],_0x56f595=_0x2d66b3[_0x2776('0x1d')]+_0x2d66b3[_0x2776('0x1e')],_0x475479;if(_0x56f595>=_0x187351){_0x56f595=_0x187351;_0x475479=0xc8;}else{_0x475479=0xce;}_0x589c54['status'](_0x475479);return _0x589c54[_0x2776('0x1f')](_0x2776('0x20'),_0x4fe92c+'-'+_0x56f595+'/'+_0x187351)['json'](_0x4f89d1);}return null;};}function patchUpdates(_0xb4f2c){return function(_0x519b82){try{jsonpatch[_0x2776('0x21')](_0x519b82,_0xb4f2c,!![]);}catch(_0x37ed47){return BPromise[_0x2776('0x22')](_0x37ed47);}return _0x519b82['save']();};}function saveUpdates(_0x56ba4a,_0x533a31){return function(_0x190aef){if(_0x190aef){return _0x190aef[_0x2776('0x23')](_0x56ba4a)[_0x2776('0x24')](function(_0x4bd4b9){return _0x4bd4b9;});}return null;};}function removeEntity(_0x4924f0,_0x1cb3c4){return function(_0x9a0994){if(_0x9a0994){return _0x9a0994['destroy']()[_0x2776('0x24')](function(){_0x4924f0[_0x2776('0x19')](0xcc)[_0x2776('0x1a')]();});}};}function handleEntityNotFound(_0x47769d,_0x36d499){return function(_0x48a557){if(!_0x48a557){_0x47769d[_0x2776('0x18')](0x194);}return _0x48a557;};}function handleError(_0x95352f,_0x4d5486){_0x4d5486=_0x4d5486||0x1f4;return function(_0x2f5a8c){logger[_0x2776('0x25')](_0x2f5a8c['stack']);if(_0x2f5a8c['name']){delete _0x2f5a8c[_0x2776('0x26')];}_0x95352f[_0x2776('0x19')](_0x4d5486)['send'](_0x2f5a8c);};}exports['index']=function(_0x55eed4,_0x236edf){var _0x58ac0f={},_0x530cf1={},_0x406075={'count':0x0,'rows':[]};var _0x2642d2=db['ChatTransferReport']['rawAttributes'];_0x530cf1['model']=_[_0x2776('0x27')](_0x2642d2);_0x530cf1[_0x2776('0x28')]=_['keys'](_0x55eed4['query']);_0x530cf1[_0x2776('0x29')]=_['intersection'](_0x530cf1[_0x2776('0x2a')],_0x530cf1['query']);_0x58ac0f[_0x2776('0x2b')]=_[_0x2776('0x2c')](_0x530cf1[_0x2776('0x2a')],qs[_0x2776('0x2d')](_0x55eed4['query']['fields']));_0x58ac0f['attributes']=_0x58ac0f['attributes'][_0x2776('0x2e')]?_0x58ac0f[_0x2776('0x2b')]:_0x530cf1[_0x2776('0x2a')];if(!_0x55eed4[_0x2776('0x28')][_0x2776('0x2f')](_0x2776('0x30'))){_0x58ac0f[_0x2776('0x1e')]=qs['limit'](_0x55eed4[_0x2776('0x28')][_0x2776('0x1e')]);_0x58ac0f[_0x2776('0x1d')]=qs['offset'](_0x55eed4[_0x2776('0x28')][_0x2776('0x1d')]);}_0x58ac0f[_0x2776('0x31')]=qs[_0x2776('0x32')](_0x55eed4[_0x2776('0x28')][_0x2776('0x32')]);_0x58ac0f[_0x2776('0x33')]=qs[_0x2776('0x29')](_[_0x2776('0x34')](_0x55eed4[_0x2776('0x28')],_0x530cf1[_0x2776('0x29')]));if(_0x55eed4[_0x2776('0x28')]['filter']){_0x58ac0f[_0x2776('0x33')]=_['merge'](_0x58ac0f['where'],{'$or':_[_0x2776('0x35')](_0x2642d2,function(_0xfc2c9f){if(_0xfc2c9f['type'][_0x2776('0x36')]!==_0x2776('0x37')){var _0x1df300={};_0x1df300[_0xfc2c9f[_0x2776('0x38')]]={'$like':'%'+_0x55eed4[_0x2776('0x28')][_0x2776('0x39')]+'%'};return _0x1df300;}})});}_0x58ac0f=_[_0x2776('0x3a')]({},_0x58ac0f,_0x55eed4[_0x2776('0x3b')]);var _0xaabaea={'where':_0x58ac0f[_0x2776('0x33')]};return db['ChatTransferReport'][_0x2776('0x1c')](_0xaabaea)[_0x2776('0x24')](function(_0x56eff2){_0x406075['count']=_0x56eff2;if(_0x55eed4[_0x2776('0x28')]['includeAll']){_0x58ac0f[_0x2776('0x3c')]=[{'all':!![]}];}return db[_0x2776('0x3d')][_0x2776('0x3e')](_0x58ac0f);})[_0x2776('0x24')](function(_0x32c060){_0x406075[_0x2776('0x3f')]=_0x32c060;return _0x406075;})[_0x2776('0x24')](respondWithFilteredResult(_0x236edf,_0x58ac0f))[_0x2776('0x40')](handleError(_0x236edf,null));};exports[_0x2776('0x41')]=function(_0x593bb4,_0x217d4c){var _0x2e7c31={'raw':!![],'where':{'id':_0x593bb4[_0x2776('0x42')]['id']}},_0xace77c={};_0xace77c['model']=_[_0x2776('0x27')](db['ChatTransferReport'][_0x2776('0x43')]);_0xace77c[_0x2776('0x28')]=_[_0x2776('0x27')](_0x593bb4['query']);_0xace77c[_0x2776('0x29')]=_[_0x2776('0x2c')](_0xace77c[_0x2776('0x2a')],_0xace77c[_0x2776('0x28')]);_0x2e7c31['attributes']=_[_0x2776('0x2c')](_0xace77c[_0x2776('0x2a')],qs[_0x2776('0x2d')](_0x593bb4[_0x2776('0x28')][_0x2776('0x2d')]));_0x2e7c31[_0x2776('0x2b')]=_0x2e7c31['attributes'][_0x2776('0x2e')]?_0x2e7c31['attributes']:_0xace77c[_0x2776('0x2a')];if(_0x593bb4[_0x2776('0x28')][_0x2776('0x44')]){_0x2e7c31[_0x2776('0x3c')]=[{'all':!![]}];}_0x2e7c31=_['merge']({},_0x2e7c31,_0x593bb4['options']);return db[_0x2776('0x3d')][_0x2776('0x45')](_0x2e7c31)[_0x2776('0x24')](handleEntityNotFound(_0x217d4c,null))[_0x2776('0x24')](respondWithResult(_0x217d4c,null))['catch'](handleError(_0x217d4c,null));};exports[_0x2776('0x46')]=function(_0x137a3a,_0x46e70d){return db[_0x2776('0x3d')][_0x2776('0x46')](_0x137a3a[_0x2776('0x47')],{})[_0x2776('0x24')](respondWithResult(_0x46e70d,0xc9))[_0x2776('0x40')](handleError(_0x46e70d,null));};exports['update']=function(_0x4b6863,_0x2a0012){if(_0x4b6863[_0x2776('0x47')]['id']){delete _0x4b6863[_0x2776('0x47')]['id'];}return db[_0x2776('0x3d')][_0x2776('0x45')]({'where':{'id':_0x4b6863[_0x2776('0x42')]['id']}})[_0x2776('0x24')](handleEntityNotFound(_0x2a0012,null))[_0x2776('0x24')](saveUpdates(_0x4b6863[_0x2776('0x47')],null))[_0x2776('0x24')](respondWithResult(_0x2a0012,null))[_0x2776('0x40')](handleError(_0x2a0012,null));};exports['destroy']=function(_0x1ac8df,_0x59792b){return db[_0x2776('0x3d')][_0x2776('0x45')]({'where':{'id':_0x1ac8df[_0x2776('0x42')]['id']}})[_0x2776('0x24')](handleEntityNotFound(_0x59792b,null))[_0x2776('0x24')](removeEntity(_0x59792b,null))['catch'](handleError(_0x59792b,null));};exports['describe']=function(_0x52480b,_0xb6ca77){return db[_0x2776('0x3d')][_0x2776('0x48')]()[_0x2776('0x24')](respondWithResult(_0xb6ca77,null))[_0x2776('0x40')](handleError(_0xb6ca77,null));};
\ No newline at end of file
index b44daec..f59d921 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c92=['report_chat_transfer','uniqueid','util','api','bluebird','request-promise','rimraf','../../config/environment','define','ChatTransferReport'];(function(_0x3230ed,_0x39d1b9){var _0x126b76=function(_0x51d743){while(--_0x51d743){_0x3230ed['push'](_0x3230ed['shift']());}};_0x126b76(++_0x39d1b9);}(_0x1c92,0xac));var _0x21c9=function(_0x15a34f,_0x1378ba){_0x15a34f=_0x15a34f-0x0;var _0x2e7b6b=_0x1c92[_0x15a34f];return _0x2e7b6b;};'use strict';var _=require('lodash');var util=require(_0x21c9('0x0'));var logger=require('../../config/logger')(_0x21c9('0x1'));var moment=require('moment');var BPromise=require(_0x21c9('0x2'));var rp=require(_0x21c9('0x3'));var fs=require('fs');var path=require('path');var rimraf=require(_0x21c9('0x4'));var config=require(_0x21c9('0x5'));var attributes=require('./chatTransferReport.attributes');module['exports']=function(_0x2399f5,_0x5117ce){return _0x2399f5[_0x21c9('0x6')](_0x21c9('0x7'),attributes,{'tableName':_0x21c9('0x8'),'paranoid':![],'indexes':[{'name':_0x21c9('0x9'),'fields':[_0x21c9('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xc2dc=['uniqueid','lodash','util','api','moment','path','rimraf','exports','report_chat_transfer'];(function(_0x54fea7,_0x33e39c){var _0x502ed1=function(_0x2980ed){while(--_0x2980ed){_0x54fea7['push'](_0x54fea7['shift']());}};_0x502ed1(++_0x33e39c);}(_0xc2dc,0x106));var _0xcc2d=function(_0x2c4ca7,_0x5abe87){_0x2c4ca7=_0x2c4ca7-0x0;var _0xc82d75=_0xc2dc[_0x2c4ca7];return _0xc82d75;};'use strict';var _=require(_0xcc2d('0x0'));var util=require(_0xcc2d('0x1'));var logger=require('../../config/logger')(_0xcc2d('0x2'));var moment=require(_0xcc2d('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0xcc2d('0x4'));var rimraf=require(_0xcc2d('0x5'));var config=require('../../config/environment');var attributes=require('./chatTransferReport.attributes');module[_0xcc2d('0x6')]=function(_0x32e794,_0x4733eb){return _0x32e794['define']('ChatTransferReport',attributes,{'tableName':_0xcc2d('0x7'),'paranoid':![],'indexes':[{'name':_0xcc2d('0x8'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index 5585f2b..80f5272 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b04=['../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','stringify','error','code','ChatTransferReport,\x20%s,\x20%s','message','result','catch','lodash','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x54f2a9,_0x38b3dd){var _0x18847e=function(_0x3d9499){while(--_0x3d9499){_0x54f2a9['push'](_0x54f2a9['shift']());}};_0x18847e(++_0x38b3dd);}(_0x8b04,0x130));var _0x48b0=function(_0x26589c,_0x141ea7){_0x26589c=_0x26589c-0x0;var _0x400e35=_0x8b04[_0x26589c];return _0x400e35;};'use strict';var _=require(_0x48b0('0x0'));var util=require(_0x48b0('0x1'));var moment=require('moment');var BPromise=require(_0x48b0('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x48b0('0x3'));var db=require(_0x48b0('0x4'))['db'];var utils=require(_0x48b0('0x5'));var logger=require(_0x48b0('0x6'))(_0x48b0('0x7'));var config=require(_0x48b0('0x8'));var jayson=require(_0x48b0('0x9'));var client=jayson[_0x48b0('0xa')][_0x48b0('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x86b615,_0x47bc9c,_0xe04bbe){return new BPromise(function(_0x2fe681,_0x38d496){return client[_0x48b0('0xc')](_0x86b615,_0xe04bbe)[_0x48b0('0xd')](function(_0x3baa46){logger[_0x48b0('0xe')]('ChatTransferReport,\x20%s,\x20%s',_0x47bc9c,_0x48b0('0xf'));logger[_0x48b0('0x10')]('ChatTransferReport,\x20%s,\x20%s,\x20%s',_0x47bc9c,_0x48b0('0xf'),JSON[_0x48b0('0x11')](_0x3baa46));if(_0x3baa46['error']){if(_0x3baa46[_0x48b0('0x12')][_0x48b0('0x13')]===0x1f4){logger[_0x48b0('0x12')](_0x48b0('0x14'),_0x47bc9c,_0x3baa46[_0x48b0('0x12')][_0x48b0('0x15')]);return _0x38d496(_0x3baa46[_0x48b0('0x12')]['message']);}logger[_0x48b0('0x12')]('ChatTransferReport,\x20%s,\x20%s',_0x47bc9c,_0x3baa46[_0x48b0('0x12')]['message']);return _0x2fe681(_0x3baa46[_0x48b0('0x12')][_0x48b0('0x15')]);}else{logger[_0x48b0('0xe')](_0x48b0('0x14'),_0x47bc9c,'request\x20sent');_0x2fe681(_0x3baa46[_0x48b0('0x16')][_0x48b0('0x15')]);}})[_0x48b0('0x17')](function(_0x4ccc45){logger[_0x48b0('0x12')]('ChatTransferReport,\x20%s,\x20%s',_0x47bc9c,_0x4ccc45);_0x38d496(_0x4ccc45);});});}
\ No newline at end of file
+var _0x6e5f=['message','catch','lodash','util','bluebird','ioredis','../../config/utils','rpc','jayson/promise','http','request','info','ChatTransferReport,\x20%s,\x20%s','request\x20sent','debug','error','code'];(function(_0x1a070b,_0x46d2c8){var _0x20b48d=function(_0x4e8510){while(--_0x4e8510){_0x1a070b['push'](_0x1a070b['shift']());}};_0x20b48d(++_0x46d2c8);}(_0x6e5f,0x1bc));var _0xf6e5=function(_0x284910,_0x1861a2){_0x284910=_0x284910-0x0;var _0x48e1f0=_0x6e5f[_0x284910];return _0x48e1f0;};'use strict';var _=require(_0xf6e5('0x0'));var util=require(_0xf6e5('0x1'));var moment=require('moment');var BPromise=require(_0xf6e5('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xf6e5('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xf6e5('0x4'));var logger=require('../../config/logger')(_0xf6e5('0x5'));var config=require('../../config/environment');var jayson=require(_0xf6e5('0x6'));var client=jayson['client'][_0xf6e5('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x72c274,_0x2c85e2,_0x4e2b2b){return new BPromise(function(_0x51aea6,_0x9dc22a){return client[_0xf6e5('0x8')](_0x72c274,_0x4e2b2b)['then'](function(_0x5cdc93){logger[_0xf6e5('0x9')](_0xf6e5('0xa'),_0x2c85e2,_0xf6e5('0xb'));logger[_0xf6e5('0xc')]('ChatTransferReport,\x20%s,\x20%s,\x20%s',_0x2c85e2,_0xf6e5('0xb'),JSON['stringify'](_0x5cdc93));if(_0x5cdc93[_0xf6e5('0xd')]){if(_0x5cdc93[_0xf6e5('0xd')][_0xf6e5('0xe')]===0x1f4){logger[_0xf6e5('0xd')](_0xf6e5('0xa'),_0x2c85e2,_0x5cdc93['error'][_0xf6e5('0xf')]);return _0x9dc22a(_0x5cdc93[_0xf6e5('0xd')][_0xf6e5('0xf')]);}logger['error'](_0xf6e5('0xa'),_0x2c85e2,_0x5cdc93['error']['message']);return _0x51aea6(_0x5cdc93['error'][_0xf6e5('0xf')]);}else{logger[_0xf6e5('0x9')](_0xf6e5('0xa'),_0x2c85e2,_0xf6e5('0xb'));_0x51aea6(_0x5cdc93['result'][_0xf6e5('0xf')]);}})[_0xf6e5('0x10')](function(_0x50fbbc){logger[_0xf6e5('0xd')]('ChatTransferReport,\x20%s,\x20%s',_0x2c85e2,_0x50fbbc);_0x9dc22a(_0x50fbbc);});});}
\ No newline at end of file
index a2c1981..83d759a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5586=['../../components/interaction/service','./chatTransferReport.controller','get','index','/describe','isAuthenticated','describe','/:id','show','post','create','put','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0x21b74b,_0x543c76){var _0x518cc6=function(_0x5b3010){while(--_0x5b3010){_0x21b74b['push'](_0x21b74b['shift']());}};_0x518cc6(++_0x543c76);}(_0x5586,0xfd));var _0x6558=function(_0x413feb,_0x10477f){_0x413feb=_0x413feb-0x0;var _0x40ee88=_0x5586[_0x413feb];return _0x40ee88;};'use strict';var multer=require(_0x6558('0x0'));var util=require(_0x6558('0x1'));var path=require(_0x6558('0x2'));var timeout=require(_0x6558('0x3'));var express=require(_0x6558('0x4'));var router=express[_0x6558('0x5')]();var auth=require(_0x6558('0x6'));var interaction=require(_0x6558('0x7'));var config=require('../../config/environment');var controller=require(_0x6558('0x8'));router[_0x6558('0x9')]('/',auth['isAuthenticated'](),controller[_0x6558('0xa')]);router[_0x6558('0x9')](_0x6558('0xb'),auth[_0x6558('0xc')](),controller[_0x6558('0xd')]);router['get'](_0x6558('0xe'),auth[_0x6558('0xc')](),controller[_0x6558('0xf')]);router[_0x6558('0x10')]('/',auth[_0x6558('0xc')](),controller[_0x6558('0x11')]);router[_0x6558('0x12')]('/:id',auth['isAuthenticated'](),controller['update']);router['delete']('/:id',auth[_0x6558('0xc')](),controller['destroy']);module[_0x6558('0x13')]=router;
\ No newline at end of file
+var _0x67ce=['delete','destroy','exports','multer','util','path','../../components/auth/service','../../config/environment','./chatTransferReport.controller','get','isAuthenticated','index','/describe','/:id','show','create','put'];(function(_0x40f5c2,_0x16dec2){var _0x1a382e=function(_0x24a059){while(--_0x24a059){_0x40f5c2['push'](_0x40f5c2['shift']());}};_0x1a382e(++_0x16dec2);}(_0x67ce,0x69));var _0xe67c=function(_0x22fdc6,_0x4bcea0){_0x22fdc6=_0x22fdc6-0x0;var _0x3f8989=_0x67ce[_0x22fdc6];return _0x3f8989;};'use strict';var multer=require(_0xe67c('0x0'));var util=require(_0xe67c('0x1'));var path=require(_0xe67c('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require(_0xe67c('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xe67c('0x4'));var controller=require(_0xe67c('0x5'));router[_0xe67c('0x6')]('/',auth[_0xe67c('0x7')](),controller[_0xe67c('0x8')]);router[_0xe67c('0x6')](_0xe67c('0x9'),auth[_0xe67c('0x7')](),controller['describe']);router['get'](_0xe67c('0xa'),auth[_0xe67c('0x7')](),controller[_0xe67c('0xb')]);router['post']('/',auth['isAuthenticated'](),controller[_0xe67c('0xc')]);router[_0xe67c('0xd')](_0xe67c('0xa'),auth[_0xe67c('0x7')](),controller['update']);router[_0xe67c('0xe')](_0xe67c('0xa'),auth[_0xe67c('0x7')](),controller[_0xe67c('0xf')]);module[_0xe67c('0x10')]=router;
\ No newline at end of file
index c0d917f..f46b6ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa29a=['onlineForm','parse','setDataValue','textarea','Comments','Leave\x20your\x20comments','offlineForm','generate','Please\x20hold\x20and\x20we\x20will\x20answer\x20your\x20request\x20as\x20soon\x20as\x20possible.','New\x20offline\x20message\x20from\x20websiteName','website_alias','bottom_right','alternate','#fafafa','System','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','mandatoryDispositionPauseId','mandatoryDisposition','sequelize','randomstring','STRING','address','email','Agent','#9f946a','BOOLEAN','ENUM','rounded','We\x20are\x20here!','Chat','Contact\x20us','INTEGER','Powered\x20by\x20xCALLY','Do\x20you\x20want\x20to\x20close\x20the\x20interaction?','Form\x20properly\x20submitted','Form\x20submission\x20error','Note','Send','Skip','star','thumb','TEXT','stringify','input','name','text','getDataValue'];(function(_0x49f8c2,_0x5166b7){var _0x3e63ec=function(_0x575c26){while(--_0x575c26){_0x49f8c2['push'](_0x49f8c2['shift']());}};_0x3e63ec(++_0x5166b7);}(_0xa29a,0x12c));var _0xaa29=function(_0x587259,_0x38f634){_0x587259=_0x587259-0x0;var _0x5983ec=_0xa29a[_0x587259];return _0x5983ec;};'use strict';var Sequelize=require(_0xaa29('0x0'));var rs=require(_0xaa29('0x1'));module['exports']={'name':{'type':Sequelize[_0xaa29('0x2')],'allowNull':![]},'address':{'type':Sequelize[_0xaa29('0x2')],'allowNull':![],'unique':_0xaa29('0x3')},'description':{'type':Sequelize[_0xaa29('0x2')]},'mapKey':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0x4')},'mapKeyOffline':{'type':Sequelize['STRING'],'defaultValue':_0xaa29('0x4')},'key':{'type':Sequelize[_0xaa29('0x2')],'allowNull':![]},'agentAlias':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0x5')},'customerAlias':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':'Me'},'color':{'type':Sequelize[_0xaa29('0x2')],'allowNull':![],'defaultValue':_0xaa29('0x6'),'validate':{'notEmpty':!![]}},'color_button':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'#9f946a','validate':{'notEmpty':!![]}},'textColor':{'type':Sequelize[_0xaa29('0x2')],'allowNull':![],'defaultValue':'#ffffff','validate':{'notEmpty':!![]}},'fontSize':{'type':Sequelize['INTEGER'],'defaultValue':0xf},'remote':{'type':Sequelize[_0xaa29('0x2')]},'animation':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':!![]},'header_shape':{'type':Sequelize[_0xaa29('0x8')](_0xaa29('0x9'),'squared'),'defaultValue':'rounded'},'header_online':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0xa')},'start_chat_button':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0xb')},'offline_chat_button':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':'Send'},'header_offline':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0xc')},'download_transcript':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'timeout':{'type':Sequelize[_0xaa29('0xd')],'defaultValue':0x0},'whiteLabel':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0xe')},'defaultWhiteLabel':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':!![]},'sitepic':{'type':Sequelize['TEXT']},'closingQuestion':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0xf')},'formSubmitSuccessMessage':{'type':Sequelize['STRING'],'defaultValue':_0xaa29('0x10')},'formSubmitFailureMessage':{'type':Sequelize['STRING'],'defaultValue':_0xaa29('0x11')},'noteTitle':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0x12')},'placeholderMessage':{'type':Sequelize['STRING'],'defaultValue':'Type\x20a\x20message'},'closingMessage':{'type':Sequelize['STRING'],'defaultValue':'Thanks\x20you\x20for\x20your\x20time!'},'closingMessageButton':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0x13')},'skipMessageButton':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0x14')},'conditionAgreement':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'enableRating':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'enableFeedback':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'ratingType':{'type':Sequelize[_0xaa29('0x8')](_0xaa29('0x15'),_0xaa29('0x16')),'defaultValue':'star'},'ratingStarsNumber':{'type':Sequelize['INTEGER'],'defaultValue':0x5},'onlineForm':{'type':Sequelize[_0xaa29('0x17')],'defaultValue':function(){return JSON[_0xaa29('0x18')]({'items':[{'type':_0xaa29('0x19'),'variable':null,'config':{'placeholder':_0xaa29('0x1a'),'type':_0xaa29('0x1b'),'required':!![]},'props':{'title':'name','helpText':''}},{'type':_0xaa29('0x19'),'props':{'title':_0xaa29('0x4'),'helpText':''},'config':{'required':!![],'placeholder':_0xaa29('0x4'),'type':_0xaa29('0x4')},'variable':null}],'fromKey':0x1});},'get':function(){return this[_0xaa29('0x1c')](_0xaa29('0x1d'))?JSON[_0xaa29('0x1e')](this[_0xaa29('0x1c')]('onlineForm')):{};},'set':function(_0x4b016f){return this[_0xaa29('0x1f')](_0xaa29('0x1d'),JSON[_0xaa29('0x18')](_0x4b016f));}},'offlineForm':{'type':Sequelize[_0xaa29('0x17')],'defaultValue':function(){return JSON[_0xaa29('0x18')]({'items':[{'type':_0xaa29('0x19'),'props':{'title':_0xaa29('0x4'),'helpText':''},'config':{'required':!![],'placeholder':_0xaa29('0x4'),'type':_0xaa29('0x4')},'variable':null},{'type':_0xaa29('0x20'),'config':{'placeholder':'Comments'},'props':{'title':_0xaa29('0x21'),'helpText':_0xaa29('0x22')}}],'fromKey':0x0});},'get':function(){return this['getDataValue'](_0xaa29('0x23'))?JSON[_0xaa29('0x1e')](this[_0xaa29('0x1c')](_0xaa29('0x23'))):{};},'set':function(_0x295a55){return this[_0xaa29('0x1f')]('offlineForm',JSON['stringify'](_0x295a55));}},'token':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':function(){return rs[_0xaa29('0x24')]();}},'autoclose':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':!![]},'enableCustomerWriting':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'forwardTranscript':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'forwardTranscriptMessage':{'type':Sequelize[_0xaa29('0x2')]},'forwardOffline':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'forwardOfflineAddress':{'type':Sequelize[_0xaa29('0x2')]},'waitingTitle':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':'All\x20of\x20our\x20agents\x20are\x20busy\x20at\x20this\x20time.\x20Your\x20chat\x20is\x20very\x20important\x20to\x20us.'},'waitingMessage':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0x25')},'offlineMessageSubject':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0x26')},'offlineMessageBody':{'type':Sequelize['STRING'],'defaultValue':'You\x20received\x20a\x20new\x20offline\x20message\x20from\x20websiteName.\x20Here\x20you\x20can\x20find\x20the\x20details\x20of\x20the\x20request:'},'enableUnmanagedNote':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':!![]},'unmanagedMessage':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':'Your\x20request\x20has\x20not\x20been\x20processed.'},'skipUnmanaged':{'type':Sequelize['STRING'],'defaultValue':'Skip'},'sendUnmanaged':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':'Send'},'enableCustomerAttachment':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'enableCustomerCheckmarks':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'agentAvatar':{'type':Sequelize['TEXT']},'showAgentAvatar':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'timezone':{'type':Sequelize[_0xaa29('0x2')]},'notificationTemplate':{'type':Sequelize['TEXT'],'defaultValue':function(){return'Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}';}},'notificationSound':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'hideWhenOffline':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'agentIdentifier':{'type':Sequelize['STRING'],'defaultValue':_0xaa29('0x27')},'waitForTheAssignedAgent':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'alignment':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0x28')},'verticalAlignment':{'type':Sequelize[_0xaa29('0xd')],'defaultValue':0x1e},'messagesAlignment':{'type':Sequelize[_0xaa29('0x2')],'defaultValue':_0xaa29('0x29')},'defaultTitle':{'type':Sequelize[_0xaa29('0x2')]},'customerAvatar':{'type':Sequelize[_0xaa29('0x17')]},'showCustomerAvatar':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'messageFontSize':{'type':Sequelize[_0xaa29('0xd')],'defaultValue':0xc},'backgroundColor':{'type':Sequelize[_0xaa29('0x2')],'allowNull':![],'defaultValue':_0xaa29('0x2a'),'validate':{'notEmpty':!![]}},'queueTransfer':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xaa29('0xd')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xaa29('0xd')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'systemAlias':{'type':Sequelize['STRING'],'defaultValue':_0xaa29('0x2b')},'systemAvatar':{'type':Sequelize[_0xaa29('0x17')]},'mandatoryDispositionPauseId':{'type':Sequelize[_0xaa29('0xd')],'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize[_0xaa29('0x7')],'defaultValue':![],'comment':_0xaa29('0x2c'),'set':function(_0x47136c){if(!_0x47136c)this['setDataValue'](_0xaa29('0x2d'),null);this[_0xaa29('0x1f')](_0xaa29('0x2e'),_0x47136c);}}};
\ No newline at end of file
+var _0xe5fd=['New\x20offline\x20message\x20from\x20websiteName','Your\x20request\x20has\x20not\x20been\x20processed.','Skip','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','website_alias','bottom_right','#fafafa','System','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','mandatoryDispositionPauseId','sequelize','randomstring','exports','address','STRING','email','Agent','#9f946a','#ffffff','INTEGER','BOOLEAN','ENUM','rounded','squared','We\x20are\x20here!','Chat','Contact\x20us','Powered\x20by\x20xCALLY','TEXT','Form\x20properly\x20submitted','Form\x20submission\x20error','Note','Type\x20a\x20message','Thanks\x20you\x20for\x20your\x20time!','Send','star','stringify','input','name','text','getDataValue','onlineForm','parse','setDataValue','textarea','Comments','offlineForm','generate','All\x20of\x20our\x20agents\x20are\x20busy\x20at\x20this\x20time.\x20Your\x20chat\x20is\x20very\x20important\x20to\x20us.'];(function(_0x215f9b,_0x2896ae){var _0x1b2944=function(_0x507660){while(--_0x507660){_0x215f9b['push'](_0x215f9b['shift']());}};_0x1b2944(++_0x2896ae);}(_0xe5fd,0x192));var _0xde5f=function(_0xe3b872,_0x158213){_0xe3b872=_0xe3b872-0x0;var _0x46a1f7=_0xe5fd[_0xe3b872];return _0x46a1f7;};'use strict';var Sequelize=require(_0xde5f('0x0'));var rs=require(_0xde5f('0x1'));module[_0xde5f('0x2')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'address':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0xde5f('0x3')},'description':{'type':Sequelize[_0xde5f('0x4')]},'mapKey':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x5')},'mapKeyOffline':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x5')},'key':{'type':Sequelize[_0xde5f('0x4')],'allowNull':![]},'agentAlias':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x6')},'customerAlias':{'type':Sequelize['STRING'],'defaultValue':'Me'},'color':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xde5f('0x7'),'validate':{'notEmpty':!![]}},'color_button':{'type':Sequelize[_0xde5f('0x4')],'allowNull':![],'defaultValue':_0xde5f('0x7'),'validate':{'notEmpty':!![]}},'textColor':{'type':Sequelize[_0xde5f('0x4')],'allowNull':![],'defaultValue':_0xde5f('0x8'),'validate':{'notEmpty':!![]}},'fontSize':{'type':Sequelize[_0xde5f('0x9')],'defaultValue':0xf},'remote':{'type':Sequelize['STRING']},'animation':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':!![]},'header_shape':{'type':Sequelize[_0xde5f('0xb')](_0xde5f('0xc'),_0xde5f('0xd')),'defaultValue':_0xde5f('0xc')},'header_online':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0xe')},'start_chat_button':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0xf')},'offline_chat_button':{'type':Sequelize['STRING'],'defaultValue':'Send'},'header_offline':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x10')},'download_transcript':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':!![]},'timeout':{'type':Sequelize[_0xde5f('0x9')],'defaultValue':0x0},'whiteLabel':{'type':Sequelize['STRING'],'defaultValue':_0xde5f('0x11')},'defaultWhiteLabel':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'sitepic':{'type':Sequelize[_0xde5f('0x12')]},'closingQuestion':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':'Do\x20you\x20want\x20to\x20close\x20the\x20interaction?'},'formSubmitSuccessMessage':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x13')},'formSubmitFailureMessage':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x14')},'noteTitle':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x15')},'placeholderMessage':{'type':Sequelize['STRING'],'defaultValue':_0xde5f('0x16')},'closingMessage':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x17')},'closingMessageButton':{'type':Sequelize['STRING'],'defaultValue':_0xde5f('0x18')},'skipMessageButton':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':'Skip'},'conditionAgreement':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'enableRating':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'enableFeedback':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'ratingType':{'type':Sequelize[_0xde5f('0xb')](_0xde5f('0x19'),'thumb'),'defaultValue':_0xde5f('0x19')},'ratingStarsNumber':{'type':Sequelize[_0xde5f('0x9')],'defaultValue':0x5},'onlineForm':{'type':Sequelize[_0xde5f('0x12')],'defaultValue':function(){return JSON[_0xde5f('0x1a')]({'items':[{'type':_0xde5f('0x1b'),'variable':null,'config':{'placeholder':_0xde5f('0x1c'),'type':_0xde5f('0x1d'),'required':!![]},'props':{'title':_0xde5f('0x1c'),'helpText':''}},{'type':_0xde5f('0x1b'),'props':{'title':_0xde5f('0x5'),'helpText':''},'config':{'required':!![],'placeholder':'email','type':_0xde5f('0x5')},'variable':null}],'fromKey':0x1});},'get':function(){return this[_0xde5f('0x1e')](_0xde5f('0x1f'))?JSON[_0xde5f('0x20')](this[_0xde5f('0x1e')](_0xde5f('0x1f'))):{};},'set':function(_0x3b6c27){return this[_0xde5f('0x21')](_0xde5f('0x1f'),JSON[_0xde5f('0x1a')](_0x3b6c27));}},'offlineForm':{'type':Sequelize['TEXT'],'defaultValue':function(){return JSON['stringify']({'items':[{'type':_0xde5f('0x1b'),'props':{'title':'email','helpText':''},'config':{'required':!![],'placeholder':_0xde5f('0x5'),'type':_0xde5f('0x5')},'variable':null},{'type':_0xde5f('0x22'),'config':{'placeholder':_0xde5f('0x23')},'props':{'title':_0xde5f('0x23'),'helpText':'Leave\x20your\x20comments'}}],'fromKey':0x0});},'get':function(){return this['getDataValue'](_0xde5f('0x24'))?JSON['parse'](this[_0xde5f('0x1e')](_0xde5f('0x24'))):{};},'set':function(_0x3942fd){return this[_0xde5f('0x21')](_0xde5f('0x24'),JSON['stringify'](_0x3942fd));}},'token':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':function(){return rs[_0xde5f('0x25')]();}},'autoclose':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':!![]},'enableCustomerWriting':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'forwardTranscript':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'forwardTranscriptMessage':{'type':Sequelize[_0xde5f('0x4')]},'forwardOffline':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'forwardOfflineAddress':{'type':Sequelize['STRING']},'waitingTitle':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x26')},'waitingMessage':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':'Please\x20hold\x20and\x20we\x20will\x20answer\x20your\x20request\x20as\x20soon\x20as\x20possible.'},'offlineMessageSubject':{'type':Sequelize['STRING'],'defaultValue':_0xde5f('0x27')},'offlineMessageBody':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':'You\x20received\x20a\x20new\x20offline\x20message\x20from\x20websiteName.\x20Here\x20you\x20can\x20find\x20the\x20details\x20of\x20the\x20request:'},'enableUnmanagedNote':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':!![]},'unmanagedMessage':{'type':Sequelize['STRING'],'defaultValue':_0xde5f('0x28')},'skipUnmanaged':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x29')},'sendUnmanaged':{'type':Sequelize['STRING'],'defaultValue':_0xde5f('0x18')},'enableCustomerAttachment':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'enableCustomerCheckmarks':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'agentAvatar':{'type':Sequelize['TEXT']},'showAgentAvatar':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'timezone':{'type':Sequelize['STRING']},'notificationTemplate':{'type':Sequelize[_0xde5f('0x12')],'defaultValue':function(){return _0xde5f('0x2a');}},'notificationSound':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'hideWhenOffline':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentIdentifier':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x2b')},'waitForTheAssignedAgent':{'type':Sequelize[_0xde5f('0x9')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'alignment':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x2c')},'verticalAlignment':{'type':Sequelize[_0xde5f('0x9')],'defaultValue':0x1e},'messagesAlignment':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':'alternate'},'defaultTitle':{'type':Sequelize[_0xde5f('0x4')]},'customerAvatar':{'type':Sequelize[_0xde5f('0x12')]},'showCustomerAvatar':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'messageFontSize':{'type':Sequelize['INTEGER'],'defaultValue':0xc},'backgroundColor':{'type':Sequelize[_0xde5f('0x4')],'allowNull':![],'defaultValue':_0xde5f('0x2d'),'validate':{'notEmpty':!![]}},'queueTransfer':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xde5f('0x9')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'systemAlias':{'type':Sequelize[_0xde5f('0x4')],'defaultValue':_0xde5f('0x2e')},'systemAvatar':{'type':Sequelize['TEXT']},'mandatoryDispositionPauseId':{'type':Sequelize[_0xde5f('0x9')],'comment':_0xde5f('0x2f')},'mandatoryDisposition':{'type':Sequelize[_0xde5f('0xa')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x101ec0){if(!_0x101ec0)this[_0xde5f('0x21')](_0xde5f('0x30'),null);this[_0xde5f('0x21')]('mandatoryDisposition',_0x101ec0);}}};
\ No newline at end of file
index cf22a4c..1e7baf7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe2d1=['host','port','secure','authentication','SendMail','sendMail','\x22%s\x22\x20<%s>','email','offlineMessageSubject','addInteraction','getInteractions','User','Owner','fullname','internal','Tag','Tags','tag','Command','getSnippet','timezone','iftime\x20%s,%s','interval','iftime\x20%s','indexOf','true','[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)','OFFLINE','No\x20timezone','inspect','Interval','Intervals','getProactiveActions','getLicense','virtual','custom','License','increment','chatLicenseExceeded','all','readFileSync','server/files/chat/iframe.js','utf8','remote','headers','x-forwarded-for','connection','remoteAddress','alignment','sequelize','transaction','priority','getApplications','addProactiveActions','omit','getFields','online','false','offlineForm','onlineForm','items','fromKey','addAgents','emit','removeAgents','userChatWebsite:remove','getAgents','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','./chatWebsite.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','ChatWebsite,\x20%s,\x20%s','request\x20sent','ChatWebsite,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','sendStatus','status','end','json','count','offset','limit','set','reject','save','update','then','get','ChatWebsites','destroy','stack','name','send','index','Pause','mandatoryDispositionPause','ChatWebsite','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','options','includeAll','findAll','rows','catch','show','include','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','find','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','describe','addDisposition','Disposition','getDispositions','findOne','hasOwnProperty','ChatWebsiteId','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','removeAnswers','addLogo','sitepic','file','filename','agentAvatar','addCustomerAvatar','addSystemAvatar','systemAvatar','getLogo','join','root','server/files/images/logos/default_logo.png','../../config/license/util','isNil','server/files/images/logos/','download','getAvatar','server/files/images/avatars/default_avatar.png','server/files/images/avatars/','getCustomerAvatar','server/files/images/avatars/customer_avatar.png','customerAvatar','showCustomerAvatar','getSystemAvatar','server/files/images/avatars/system_avatar.png','existsSync','notify','user-agent-parser','setUA','user-agent','chat','ValidationError','no\x20available\x20attributes','difference','createdAt','updatedAt','CompanyId','from','Sequelize','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','CmContact','Contacts','DESC','ChatApplication','Applications','account','applications','orderBy','asc','contact','firstName','lastName','referer','browser','version','format','%s\x20%s','unknown','device','vendor','%s\x20%s\x20%s','threadId','externalUrl','ContactId','interaction','ChatInteraction','spread','messageId','created','autoclose','push','close','unmanaged','AttachmentId','UserId','unshift','agent','*,*,*,*','forcedOwnership','Start','startRouting','EventManager','offline','ListId','mapKeyOffline','mapKeyOffline\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','mapKeyOffline\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','findOrCreate','server/files/templates/chatOfflineMessage.ejs','render','toPairs','offlineMessageBody','ChatOfflineMessage','MailAccount','Smtp','forwardOfflineAddress','service'];(function(_0x4a4dba,_0x163858){var _0x465620=function(_0x5554e3){while(--_0x5554e3){_0x4a4dba['push'](_0x4a4dba['shift']());}};_0x465620(++_0x163858);}(_0xe2d1,0x162));var _0x1e2d=function(_0x541ab5,_0x5805b8){_0x541ab5=_0x541ab5-0x0;var _0x180f74=_0xe2d1[_0x541ab5];return _0x180f74;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x1e2d('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x1e2d('0x1'));var jsonpatch=require(_0x1e2d('0x2'));var rp=require(_0x1e2d('0x3'));var moment=require(_0x1e2d('0x4'));var BPromise=require(_0x1e2d('0x5'));var Mustache=require(_0x1e2d('0x6'));var util=require('util');var path=require(_0x1e2d('0x7'));var sox=require(_0x1e2d('0x8'));var csv=require(_0x1e2d('0x9'));var ejs=require(_0x1e2d('0xa'));var fs=require('fs');var _=require(_0x1e2d('0xb'));var squel=require(_0x1e2d('0xc'));var crypto=require(_0x1e2d('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x1e2d('0xe'));var toCsv=require(_0x1e2d('0x9'));var querystring=require(_0x1e2d('0xf'));var Papa=require(_0x1e2d('0x10'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x1e2d('0x11'));var hardwareService=require(_0x1e2d('0x12'));var logger=require(_0x1e2d('0x13'))(_0x1e2d('0x14'));var utils=require(_0x1e2d('0x15'));var config=require(_0x1e2d('0x16'));var db=require(_0x1e2d('0x17'))['db'];config[_0x1e2d('0x18')]=_[_0x1e2d('0x19')](config[_0x1e2d('0x18')],{'host':_0x1e2d('0x1a'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x1e2d('0x18')]));require(_0x1e2d('0x1b'))[_0x1e2d('0x1c')](socket);var jayson=require(_0x1e2d('0x1d'));var client=jayson['client'][_0x1e2d('0x1e')]({'port':0x232c});var client9002=jayson['client'][_0x1e2d('0x1e')]({'port':0x232a});var client9003=jayson[_0x1e2d('0x1f')]['http']({'port':0x232b});function checkPasswordPattern(_0x3ce3ee,_0xf3bac0,_0xdaf2ab){if(_0xdaf2ab){var _0x2e6a40=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2e6a40[_0x1e2d('0x20')](_0xf3bac0)){return _0x3ce3ee;}else{throw new Error(_0x1e2d('0x21'));}}else{return _0x3ce3ee;}}function respondWithRpcPromise(_0x5118a6,_0x4eb847,_0x387629,_0x3aae33){return new BPromise(function(_0x9e33d3,_0x24319d){var _0x3ff267=_0x3aae33||client;return _0x3ff267[_0x1e2d('0x22')](_0x5118a6,_0x387629)['then'](function(_0x5349bd){logger['info'](_0x1e2d('0x23'),_0x4eb847,_0x1e2d('0x24'));logger['debug'](_0x1e2d('0x25'),_0x4eb847,_0x1e2d('0x24'),JSON[_0x1e2d('0x26')](_0x5349bd));if(_0x5349bd[_0x1e2d('0x27')]){if(_0x5349bd['error'][_0x1e2d('0x28')]===0x1f4){logger[_0x1e2d('0x27')](_0x1e2d('0x23'),_0x4eb847,_0x5349bd[_0x1e2d('0x27')][_0x1e2d('0x29')]);return _0x24319d(_0x5349bd[_0x1e2d('0x27')]['message']);}logger[_0x1e2d('0x27')]('ChatWebsite,\x20%s,\x20%s',_0x4eb847,_0x5349bd[_0x1e2d('0x27')]['message']);return _0x9e33d3(_0x5349bd[_0x1e2d('0x27')][_0x1e2d('0x29')]);}else{logger[_0x1e2d('0x2a')](_0x1e2d('0x23'),_0x4eb847,'request\x20sent');_0x9e33d3(_0x5349bd[_0x1e2d('0x2b')][_0x1e2d('0x29')]);}})['catch'](function(_0x51445d){logger[_0x1e2d('0x27')]('ChatWebsite,\x20%s,\x20%s',_0x4eb847,_0x51445d);_0x24319d(_0x51445d);});});}function respondWithStatusCode(_0x41f1f5,_0x51d490){_0x51d490=_0x51d490||0xcc;return function(_0x5943a4){if(_0x5943a4){return _0x41f1f5[_0x1e2d('0x2c')](_0x51d490);}return _0x41f1f5[_0x1e2d('0x2d')](_0x51d490)[_0x1e2d('0x2e')]();};}function respondWithResult(_0x4196d1,_0x450107){_0x450107=_0x450107||0xc8;return function(_0xc1db03){if(_0xc1db03){return _0x4196d1['status'](_0x450107)[_0x1e2d('0x2f')](_0xc1db03);}};}function respondWithFilteredResult(_0x5e47fc,_0x18e721){return function(_0x1fe12b){if(_0x1fe12b){var _0x4db635=_0x1fe12b[_0x1e2d('0x30')],_0x39f6c4=_0x18e721[_0x1e2d('0x31')],_0x1292de=_0x18e721[_0x1e2d('0x31')]+_0x18e721[_0x1e2d('0x32')],_0x511e77;if(_0x1292de>=_0x4db635){_0x1292de=_0x4db635;_0x511e77=0xc8;}else{_0x511e77=0xce;}_0x5e47fc[_0x1e2d('0x2d')](_0x511e77);return _0x5e47fc[_0x1e2d('0x33')]('Content-Range',_0x39f6c4+'-'+_0x1292de+'/'+_0x4db635)[_0x1e2d('0x2f')](_0x1fe12b);}return null;};}function patchUpdates(_0x4e8704){return function(_0xb1cd0b){try{jsonpatch['apply'](_0xb1cd0b,_0x4e8704,!![]);}catch(_0x400574){return BPromise[_0x1e2d('0x34')](_0x400574);}return _0xb1cd0b[_0x1e2d('0x35')]();};}function saveUpdates(_0x350780,_0x38afc7){return function(_0x213bf2){if(_0x213bf2){return _0x213bf2[_0x1e2d('0x36')](_0x350780)[_0x1e2d('0x37')](function(_0x25c5ad){return _0x25c5ad;});}return null;};}function removeEntity(_0x5d2c0e,_0x119e43){return function(_0x20988f){if(_0x20988f){return _0x20988f['destroy']()[_0x1e2d('0x37')](function(){var _0x52ae7b=_0x20988f[_0x1e2d('0x38')]({'plain':!![]});var _0x174329=_0x1e2d('0x39');return db['UserProfileResource'][_0x1e2d('0x3a')]({'where':{'type':_0x174329,'resourceId':_0x52ae7b['id']}})[_0x1e2d('0x37')](function(){return _0x20988f;});})[_0x1e2d('0x37')](function(){_0x5d2c0e[_0x1e2d('0x2d')](0xcc)['end']();});}};}function handleEntityNotFound(_0x27de49,_0x3fa2f5){return function(_0x326ca9){if(!_0x326ca9){_0x27de49[_0x1e2d('0x2c')](0x194);}return _0x326ca9;};}function handleError(_0x53df02,_0x2f6b71){_0x2f6b71=_0x2f6b71||0x1f4;return function(_0x349fcb){logger[_0x1e2d('0x27')](_0x349fcb[_0x1e2d('0x3b')]);if(_0x349fcb[_0x1e2d('0x3c')]){delete _0x349fcb['name'];}_0x53df02[_0x1e2d('0x2d')](_0x2f6b71)[_0x1e2d('0x3d')](_0x349fcb);};}exports[_0x1e2d('0x3e')]=function(_0x20bcc5,_0x1584f6){var _0x4da245={'include':[{'model':db[_0x1e2d('0x3f')],'as':_0x1e2d('0x40')}]},_0x41729c={},_0x1f2b48={'count':0x0,'rows':[]};var _0xf9bcda=db[_0x1e2d('0x41')][_0x1e2d('0x42')];_0x41729c[_0x1e2d('0x43')]=_[_0x1e2d('0x44')](_0xf9bcda);_0x41729c[_0x1e2d('0x45')]=_[_0x1e2d('0x44')](_0x20bcc5[_0x1e2d('0x45')]);_0x41729c[_0x1e2d('0x46')]=_[_0x1e2d('0x47')](_0x41729c[_0x1e2d('0x43')],_0x41729c['query']);_0x4da245['attributes']=_['intersection'](_0x41729c[_0x1e2d('0x43')],qs['fields'](_0x20bcc5['query'][_0x1e2d('0x48')]));_0x4da245[_0x1e2d('0x49')]=_0x4da245['attributes'][_0x1e2d('0x4a')]?_0x4da245[_0x1e2d('0x49')]:_0x41729c['model'];if(!_0x20bcc5[_0x1e2d('0x45')]['hasOwnProperty'](_0x1e2d('0x4b'))){_0x4da245[_0x1e2d('0x32')]=qs['limit'](_0x20bcc5[_0x1e2d('0x45')][_0x1e2d('0x32')]);_0x4da245[_0x1e2d('0x31')]=qs[_0x1e2d('0x31')](_0x20bcc5[_0x1e2d('0x45')][_0x1e2d('0x31')]);}_0x4da245[_0x1e2d('0x4c')]=qs[_0x1e2d('0x4d')](_0x20bcc5[_0x1e2d('0x45')][_0x1e2d('0x4d')]);_0x4da245[_0x1e2d('0x4e')]=qs[_0x1e2d('0x46')](_[_0x1e2d('0x4f')](_0x20bcc5[_0x1e2d('0x45')],_0x41729c['filters']));if(_0x20bcc5['query'][_0x1e2d('0x50')]){_0x4da245[_0x1e2d('0x4e')]=_[_0x1e2d('0x51')](_0x4da245['where'],{'$or':_[_0x1e2d('0x52')](_0xf9bcda,function(_0x563122){if(_0x563122[_0x1e2d('0x53')][_0x1e2d('0x54')]!=='VIRTUAL'){var _0x7ba2da={};_0x7ba2da[_0x563122[_0x1e2d('0x55')]]={'$like':'%'+_0x20bcc5[_0x1e2d('0x45')][_0x1e2d('0x50')]+'%'};return _0x7ba2da;}})});}_0x4da245=_[_0x1e2d('0x51')]({},_0x4da245,_0x20bcc5[_0x1e2d('0x56')]);var _0x1d90de={'where':_0x4da245['where']};return db[_0x1e2d('0x41')][_0x1e2d('0x30')](_0x1d90de)['then'](function(_0x2beb65){_0x1f2b48[_0x1e2d('0x30')]=_0x2beb65;if(_0x20bcc5[_0x1e2d('0x45')][_0x1e2d('0x57')]){_0x4da245['include']=[{'all':!![]}];}return db['ChatWebsite'][_0x1e2d('0x58')](_0x4da245);})[_0x1e2d('0x37')](function(_0x123f3a){_0x1f2b48[_0x1e2d('0x59')]=_0x123f3a;return _0x1f2b48;})[_0x1e2d('0x37')](respondWithFilteredResult(_0x1584f6,_0x4da245))[_0x1e2d('0x5a')](handleError(_0x1584f6,null));};exports[_0x1e2d('0x5b')]=function(_0x2585f2,_0x27f45d){var _0x14f34d={'raw':![],'where':{'id':_0x2585f2['params']['id']},'include':[{'model':db[_0x1e2d('0x3f')],'as':_0x1e2d('0x40')}]},_0x2033b5={};_0x2033b5[_0x1e2d('0x43')]=_[_0x1e2d('0x44')](db[_0x1e2d('0x41')]['rawAttributes']);_0x2033b5[_0x1e2d('0x45')]=_[_0x1e2d('0x44')](_0x2585f2[_0x1e2d('0x45')]);_0x2033b5['filters']=_['intersection'](_0x2033b5[_0x1e2d('0x43')],_0x2033b5[_0x1e2d('0x45')]);_0x14f34d[_0x1e2d('0x49')]=_['intersection'](_0x2033b5[_0x1e2d('0x43')],qs[_0x1e2d('0x48')](_0x2585f2[_0x1e2d('0x45')][_0x1e2d('0x48')]));_0x14f34d['attributes']=_0x14f34d[_0x1e2d('0x49')][_0x1e2d('0x4a')]?_0x14f34d[_0x1e2d('0x49')]:_0x2033b5[_0x1e2d('0x43')];if(_0x2585f2[_0x1e2d('0x45')]['includeAll']){_0x14f34d[_0x1e2d('0x5c')]=[{'all':!![]}];}_0x14f34d=_[_0x1e2d('0x51')]({},_0x14f34d,_0x2585f2[_0x1e2d('0x56')]);return db[_0x1e2d('0x41')]['find'](_0x14f34d)[_0x1e2d('0x37')](handleEntityNotFound(_0x27f45d,null))[_0x1e2d('0x37')](respondWithResult(_0x27f45d,null))[_0x1e2d('0x5a')](handleError(_0x27f45d,null));};exports[_0x1e2d('0x5d')]=function(_0x10efba,_0x141b36){return db[_0x1e2d('0x41')][_0x1e2d('0x5d')](_0x10efba[_0x1e2d('0x5e')],{})[_0x1e2d('0x37')](function(_0x482f14){var _0x138fbd=_0x10efba[_0x1e2d('0x5f')][_0x1e2d('0x38')]({'plain':!![]});if(!_0x138fbd)throw new Error(_0x1e2d('0x60'));if(_0x138fbd[_0x1e2d('0x61')]===_0x1e2d('0x5f')){var _0x365fb7=_0x482f14[_0x1e2d('0x38')]({'plain':!![]});var _0x2e1713=_0x1e2d('0x39');return db[_0x1e2d('0x62')][_0x1e2d('0x63')]({'where':{'name':_0x2e1713,'userProfileId':_0x138fbd['userProfileId']},'raw':!![]})[_0x1e2d('0x37')](function(_0x4e1024){if(_0x4e1024&&_0x4e1024[_0x1e2d('0x64')]===0x0){return db['UserProfileResource'][_0x1e2d('0x5d')]({'name':_0x365fb7[_0x1e2d('0x3c')],'resourceId':_0x365fb7['id'],'type':_0x4e1024[_0x1e2d('0x3c')],'sectionId':_0x4e1024['id']},{})[_0x1e2d('0x37')](function(){return _0x482f14;});}else{return _0x482f14;}})[_0x1e2d('0x5a')](function(_0x10b68d){logger[_0x1e2d('0x27')](_0x1e2d('0x65'),_0x10b68d);throw _0x10b68d;});}return _0x482f14;})[_0x1e2d('0x37')](respondWithResult(_0x141b36,0xc9))[_0x1e2d('0x5a')](handleError(_0x141b36,null));};exports['update']=function(_0x3ae612,_0x38bd93){if(_0x3ae612[_0x1e2d('0x5e')]['id']){delete _0x3ae612['body']['id'];}return db[_0x1e2d('0x41')]['find']({'where':{'id':_0x3ae612['params']['id']},'include':[{'model':db[_0x1e2d('0x3f')],'as':'mandatoryDispositionPause'}]})[_0x1e2d('0x37')](handleEntityNotFound(_0x38bd93,null))[_0x1e2d('0x37')](saveUpdates(_0x3ae612[_0x1e2d('0x5e')],null))[_0x1e2d('0x37')](respondWithResult(_0x38bd93,null))['catch'](handleError(_0x38bd93,null));};exports['destroy']=function(_0x4e22d1,_0x414a36){return db[_0x1e2d('0x41')][_0x1e2d('0x63')]({'where':{'id':_0x4e22d1[_0x1e2d('0x66')]['id']}})['then'](handleEntityNotFound(_0x414a36,null))[_0x1e2d('0x37')](removeEntity(_0x414a36,null))[_0x1e2d('0x5a')](handleError(_0x414a36,null));};exports[_0x1e2d('0x67')]=function(_0x4a564d,_0x4b6b36){return db[_0x1e2d('0x41')][_0x1e2d('0x67')]()['then'](respondWithResult(_0x4b6b36,null))[_0x1e2d('0x5a')](handleError(_0x4b6b36,null));};exports[_0x1e2d('0x68')]=function(_0x2c7007,_0x5b881e,_0x51cccd){if(_0x2c7007[_0x1e2d('0x5e')]['id']){delete _0x2c7007[_0x1e2d('0x5e')]['id'];}return db[_0x1e2d('0x41')][_0x1e2d('0x63')]({'where':{'id':_0x2c7007[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x5b881e,null))[_0x1e2d('0x37')](function(_0x5e7a7c){if(_0x5e7a7c){_0x2c7007[_0x1e2d('0x5e')]['ChatWebsiteId']=_0x5e7a7c['id'];return db[_0x1e2d('0x69')][_0x1e2d('0x5d')](_0x2c7007[_0x1e2d('0x5e')]);}})[_0x1e2d('0x37')](respondWithResult(_0x5b881e,null))['catch'](handleError(_0x5b881e,null));};exports[_0x1e2d('0x6a')]=function(_0x40be88,_0x24c689,_0x173f5b){var _0x39370d={'raw':![],'where':{}};var _0x2cfd04={};var _0xeef1ee={'count':0x0,'rows':[]};return db[_0x1e2d('0x41')][_0x1e2d('0x6b')]({'where':{'id':_0x40be88[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x24c689,null))[_0x1e2d('0x37')](function(_0x3bf19f){if(_0x3bf19f){_0x2cfd04[_0x1e2d('0x43')]=_[_0x1e2d('0x44')](db[_0x1e2d('0x69')][_0x1e2d('0x42')]);_0x2cfd04['query']=_[_0x1e2d('0x44')](_0x40be88['query']);_0x2cfd04[_0x1e2d('0x46')]=_[_0x1e2d('0x47')](_0x2cfd04[_0x1e2d('0x43')],_0x2cfd04[_0x1e2d('0x45')]);_0x39370d['attributes']=_[_0x1e2d('0x47')](_0x2cfd04[_0x1e2d('0x43')],qs['fields'](_0x40be88[_0x1e2d('0x45')][_0x1e2d('0x48')]));_0x39370d['attributes']=_0x39370d[_0x1e2d('0x49')][_0x1e2d('0x4a')]?_0x39370d[_0x1e2d('0x49')]:_0x2cfd04[_0x1e2d('0x43')];if(!_0x40be88['query'][_0x1e2d('0x6c')](_0x1e2d('0x4b'))){_0x39370d[_0x1e2d('0x32')]=qs[_0x1e2d('0x32')](_0x40be88[_0x1e2d('0x45')][_0x1e2d('0x32')]);_0x39370d[_0x1e2d('0x31')]=qs[_0x1e2d('0x31')](_0x40be88[_0x1e2d('0x45')][_0x1e2d('0x31')]);}_0x39370d[_0x1e2d('0x4c')]=qs[_0x1e2d('0x4d')](_0x40be88['query']['sort']);_0x39370d['where']=qs[_0x1e2d('0x46')](_['pick'](_0x40be88[_0x1e2d('0x45')],_0x2cfd04['filters']));_0x39370d[_0x1e2d('0x4e')][_0x1e2d('0x6d')]=_0x3bf19f['id'];if(_0x40be88[_0x1e2d('0x45')][_0x1e2d('0x50')]){_0x39370d['where']=_['merge'](_0x39370d['where'],{'$or':_[_0x1e2d('0x52')](_0x39370d[_0x1e2d('0x49')],function(_0x8f2779){var _0x32a3f8={};_0x32a3f8[_0x8f2779]={'$like':'%'+_0x40be88[_0x1e2d('0x45')]['filter']+'%'};return _0x32a3f8;})});}_0x39370d=_['merge']({},_0x39370d,_0x40be88['options']);return db[_0x1e2d('0x69')][_0x1e2d('0x30')]({'where':_0x39370d['where']})[_0x1e2d('0x37')](function(_0x1c98bf){_0xeef1ee[_0x1e2d('0x30')]=_0x1c98bf;if(_0x40be88[_0x1e2d('0x45')][_0x1e2d('0x57')]){_0x39370d[_0x1e2d('0x5c')]=[{'all':!![]}];}return db[_0x1e2d('0x69')][_0x1e2d('0x58')](_0x39370d);})['then'](function(_0x3d0d48){_0xeef1ee[_0x1e2d('0x59')]=_0x3d0d48;return _0xeef1ee;});}})['then'](respondWithFilteredResult(_0x24c689,_0x39370d))['catch'](handleError(_0x24c689,null));};exports[_0x1e2d('0x6e')]=function(_0x15dd65,_0x825faf,_0x4f40a8){return db[_0x1e2d('0x41')][_0x1e2d('0x63')]({'where':{'id':_0x15dd65[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x825faf,null))[_0x1e2d('0x37')](function(_0x219fb4){if(_0x219fb4){return _0x219fb4[_0x1e2d('0x6e')](_0x15dd65[_0x1e2d('0x45')][_0x1e2d('0x6f')]);}})[_0x1e2d('0x37')](respondWithStatusCode(_0x825faf,null))[_0x1e2d('0x5a')](handleError(_0x825faf,null));};exports[_0x1e2d('0x70')]=function(_0x55fede,_0x2f37f2,_0x2fa8b2){if(_0x55fede['body']['id']){delete _0x55fede['body']['id'];}return db['ChatWebsite'][_0x1e2d('0x63')]({'where':{'id':_0x55fede[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x2f37f2,null))[_0x1e2d('0x37')](function(_0x45b7a8){if(_0x45b7a8){_0x55fede['body']['ChatWebsiteId']=_0x45b7a8['id'];return db[_0x1e2d('0x71')][_0x1e2d('0x5d')](_0x55fede[_0x1e2d('0x5e')]);}})[_0x1e2d('0x37')](respondWithResult(_0x2f37f2,null))[_0x1e2d('0x5a')](handleError(_0x2f37f2,null));};exports[_0x1e2d('0x72')]=function(_0x5aee35,_0x23556d,_0x5ae205){var _0x20904d={'raw':![],'where':{}};var _0x544d43={};var _0x207750={'count':0x0,'rows':[]};return db[_0x1e2d('0x41')][_0x1e2d('0x6b')]({'where':{'id':_0x5aee35['params']['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x23556d,null))[_0x1e2d('0x37')](function(_0x16674f){if(_0x16674f){_0x544d43[_0x1e2d('0x43')]=_[_0x1e2d('0x44')](db['CannedAnswer'][_0x1e2d('0x42')]);_0x544d43['query']=_['keys'](_0x5aee35[_0x1e2d('0x45')]);_0x544d43['filters']=_[_0x1e2d('0x47')](_0x544d43[_0x1e2d('0x43')],_0x544d43[_0x1e2d('0x45')]);_0x20904d[_0x1e2d('0x49')]=_[_0x1e2d('0x47')](_0x544d43[_0x1e2d('0x43')],qs[_0x1e2d('0x48')](_0x5aee35[_0x1e2d('0x45')]['fields']));_0x20904d[_0x1e2d('0x49')]=_0x20904d[_0x1e2d('0x49')][_0x1e2d('0x4a')]?_0x20904d['attributes']:_0x544d43[_0x1e2d('0x43')];if(!_0x5aee35[_0x1e2d('0x45')]['hasOwnProperty'](_0x1e2d('0x4b'))){_0x20904d[_0x1e2d('0x32')]=qs[_0x1e2d('0x32')](_0x5aee35['query'][_0x1e2d('0x32')]);_0x20904d[_0x1e2d('0x31')]=qs[_0x1e2d('0x31')](_0x5aee35[_0x1e2d('0x45')]['offset']);}_0x20904d[_0x1e2d('0x4c')]=qs['sort'](_0x5aee35['query']['sort']);_0x20904d[_0x1e2d('0x4e')]=qs[_0x1e2d('0x46')](_['pick'](_0x5aee35[_0x1e2d('0x45')],_0x544d43['filters']));_0x20904d[_0x1e2d('0x4e')][_0x1e2d('0x6d')]=_0x16674f['id'];if(_0x5aee35[_0x1e2d('0x45')][_0x1e2d('0x50')]){_0x20904d[_0x1e2d('0x4e')]=_[_0x1e2d('0x51')](_0x20904d[_0x1e2d('0x4e')],{'$or':_[_0x1e2d('0x52')](_0x20904d[_0x1e2d('0x49')],function(_0x21d83f){var _0x969f46={};_0x969f46[_0x21d83f]={'$like':'%'+_0x5aee35[_0x1e2d('0x45')][_0x1e2d('0x50')]+'%'};return _0x969f46;})});}_0x20904d=_[_0x1e2d('0x51')]({},_0x20904d,_0x5aee35[_0x1e2d('0x56')]);return db[_0x1e2d('0x71')]['count']({'where':_0x20904d['where']})[_0x1e2d('0x37')](function(_0x159580){_0x207750[_0x1e2d('0x30')]=_0x159580;if(_0x5aee35[_0x1e2d('0x45')][_0x1e2d('0x57')]){_0x20904d[_0x1e2d('0x5c')]=[{'all':!![]}];}return db[_0x1e2d('0x71')]['findAll'](_0x20904d);})[_0x1e2d('0x37')](function(_0x15de26){_0x207750[_0x1e2d('0x59')]=_0x15de26;return _0x207750;});}})[_0x1e2d('0x37')](respondWithFilteredResult(_0x23556d,_0x20904d))[_0x1e2d('0x5a')](handleError(_0x23556d,null));};exports['removeAnswers']=function(_0x1b4e3f,_0x3495aa,_0x5c106d){return db[_0x1e2d('0x41')]['find']({'where':{'id':_0x1b4e3f[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x3495aa,null))[_0x1e2d('0x37')](function(_0x27d594){if(_0x27d594){return _0x27d594[_0x1e2d('0x73')](_0x1b4e3f['query'][_0x1e2d('0x6f')]);}})['then'](respondWithStatusCode(_0x3495aa,null))[_0x1e2d('0x5a')](handleError(_0x3495aa,null));};exports[_0x1e2d('0x74')]=function(_0x3db0a6,_0x390764,_0x1f9c8a){_0x3db0a6[_0x1e2d('0x5e')][_0x1e2d('0x75')]=_0x3db0a6[_0x1e2d('0x76')][_0x1e2d('0x77')];return db[_0x1e2d('0x41')]['find']({'where':{'id':_0x3db0a6[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x390764,null))['then'](saveUpdates(_0x3db0a6[_0x1e2d('0x5e')],null))['then'](respondWithResult(_0x390764,null))['catch'](handleError(_0x390764,null));};exports['addAvatar']=function(_0x592913,_0x63c111,_0x4859ea){_0x592913[_0x1e2d('0x5e')][_0x1e2d('0x78')]=_0x592913[_0x1e2d('0x76')]['filename'];return db[_0x1e2d('0x41')][_0x1e2d('0x63')]({'where':{'id':_0x592913[_0x1e2d('0x66')]['id']}})['then'](handleEntityNotFound(_0x63c111,null))[_0x1e2d('0x37')](saveUpdates(_0x592913[_0x1e2d('0x5e')],null))['then'](respondWithResult(_0x63c111,null))['catch'](handleError(_0x63c111,null));};exports[_0x1e2d('0x79')]=function(_0x32503e,_0x429492,_0x4ba0ca){_0x32503e[_0x1e2d('0x5e')]['customerAvatar']=_0x32503e['file'][_0x1e2d('0x77')];return db[_0x1e2d('0x41')]['find']({'where':{'id':_0x32503e[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x429492,null))[_0x1e2d('0x37')](saveUpdates(_0x32503e[_0x1e2d('0x5e')],null))['then'](respondWithResult(_0x429492,null))['catch'](handleError(_0x429492,null));};exports[_0x1e2d('0x7a')]=function(_0xa1cedb,_0x8e8d8d,_0x39a206){_0xa1cedb[_0x1e2d('0x5e')][_0x1e2d('0x7b')]=_0xa1cedb[_0x1e2d('0x76')][_0x1e2d('0x77')];return db[_0x1e2d('0x41')][_0x1e2d('0x63')]({'where':{'id':_0xa1cedb[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x8e8d8d,null))[_0x1e2d('0x37')](saveUpdates(_0xa1cedb['body'],null))[_0x1e2d('0x37')](respondWithResult(_0x8e8d8d,null))['catch'](handleError(_0x8e8d8d,null));};exports[_0x1e2d('0x7c')]=function(_0x416173,_0xd70ee5,_0x2014d4){var _0x10d3a5=path[_0x1e2d('0x7d')](config[_0x1e2d('0x7e')],_0x1e2d('0x7f'));var _0x8878dc={'where':{'id':_0x416173[_0x1e2d('0x66')]['id']},'attributes':['id',_0x1e2d('0x75')],'raw':!![]};var _0x22b59b=![];return require(_0x1e2d('0x80'))['getLicense']()[_0x1e2d('0x37')](function(_0x33d6f1){if(_0x33d6f1){_0x22b59b=_0x33d6f1['custom'];}})[_0x1e2d('0x37')](function(){return db[_0x1e2d('0x41')][_0x1e2d('0x63')](_0x8878dc);})[_0x1e2d('0x37')](handleEntityNotFound(_0xd70ee5,null))['then'](function(_0x82f57){if(_0x82f57){if(!_[_0x1e2d('0x81')](_0x82f57[_0x1e2d('0x75')])){if(fs['existsSync'](path[_0x1e2d('0x7d')](config[_0x1e2d('0x7e')],_0x1e2d('0x82'),_0x82f57['sitepic']))&&_0x22b59b){_0x10d3a5=path[_0x1e2d('0x7d')](config[_0x1e2d('0x7e')],_0x1e2d('0x82'),_0x82f57[_0x1e2d('0x75')]);}}return _0xd70ee5[_0x1e2d('0x83')](_0x10d3a5);}})[_0x1e2d('0x5a')](handleError(_0xd70ee5,null));};exports[_0x1e2d('0x84')]=function(_0x48f7ec,_0x1bf3aa,_0x278eb3){var _0x360985=path[_0x1e2d('0x7d')](config[_0x1e2d('0x7e')],_0x1e2d('0x85'));var _0x5dd66a={'where':{'id':_0x48f7ec[_0x1e2d('0x66')]['id']},'attributes':['id','agentAvatar'],'raw':!![]};return db['ChatWebsite'][_0x1e2d('0x63')](_0x5dd66a)['then'](handleEntityNotFound(_0x1bf3aa,null))[_0x1e2d('0x37')](function(_0x33f293){if(_0x33f293){if(!_[_0x1e2d('0x81')](_0x33f293[_0x1e2d('0x78')])){if(fs['existsSync'](path[_0x1e2d('0x7d')](config['root'],_0x1e2d('0x86'),_0x33f293[_0x1e2d('0x78')]))){_0x360985=path[_0x1e2d('0x7d')](config[_0x1e2d('0x7e')],_0x1e2d('0x86'),_0x33f293[_0x1e2d('0x78')]);}}return _0x1bf3aa[_0x1e2d('0x83')](_0x360985);}})[_0x1e2d('0x5a')](handleError(_0x1bf3aa,null));};exports[_0x1e2d('0x87')]=function(_0x5126ad,_0x580cfc,_0x3d6b5c){var _0x3da1b3=path[_0x1e2d('0x7d')](config['root'],_0x1e2d('0x88'));var _0x5f2731={'where':{'id':_0x5126ad[_0x1e2d('0x66')]['id']},'attributes':['id',_0x1e2d('0x89'),_0x1e2d('0x8a')],'raw':!![]};return db[_0x1e2d('0x41')][_0x1e2d('0x63')](_0x5f2731)[_0x1e2d('0x37')](handleEntityNotFound(_0x580cfc,null))[_0x1e2d('0x37')](function(_0x270fab){if(_0x270fab){if(!_[_0x1e2d('0x81')](_0x270fab['customerAvatar'])){if(fs['existsSync'](path[_0x1e2d('0x7d')](config[_0x1e2d('0x7e')],_0x1e2d('0x86'),_0x270fab[_0x1e2d('0x89')]))&&_0x270fab['showCustomerAvatar']){_0x3da1b3=path[_0x1e2d('0x7d')](config['root'],'server/files/images/avatars/',_0x270fab['customerAvatar']);}}return _0x580cfc[_0x1e2d('0x83')](_0x3da1b3);}})[_0x1e2d('0x5a')](handleError(_0x580cfc,null));};exports[_0x1e2d('0x8b')]=function(_0x12d6a2,_0x1f0fd3,_0x4ba75b){var _0x452328=path[_0x1e2d('0x7d')](config[_0x1e2d('0x7e')],_0x1e2d('0x8c'));var _0x59d0eb={'where':{'id':_0x12d6a2['params']['id']},'attributes':['id',_0x1e2d('0x7b')],'raw':!![]};return db['ChatWebsite'][_0x1e2d('0x63')](_0x59d0eb)[_0x1e2d('0x37')](handleEntityNotFound(_0x1f0fd3,null))['then'](function(_0x2be91e){if(_0x2be91e){if(!_[_0x1e2d('0x81')](_0x2be91e[_0x1e2d('0x7b')])){if(fs[_0x1e2d('0x8d')](path['join'](config[_0x1e2d('0x7e')],'server/files/images/avatars/',_0x2be91e[_0x1e2d('0x7b')]))){_0x452328=path[_0x1e2d('0x7d')](config[_0x1e2d('0x7e')],_0x1e2d('0x86'),_0x2be91e[_0x1e2d('0x7b')]);}}return _0x1f0fd3['download'](_0x452328);}})['catch'](handleError(_0x1f0fd3,null));};exports[_0x1e2d('0x8e')]=function(_0x47b5fe,_0x2eb48e,_0x4c48e3){var _0x418461=require(_0x1e2d('0x8f'));var _0x368f65=new _0x418461();var _0x28921c=_0x368f65[_0x1e2d('0x90')](_0x47b5fe['headers'][_0x1e2d('0x91')])['getResult']();var _0x444624={'body':_0x47b5fe[_0x1e2d('0x5e')],'channel':_0x1e2d('0x92')};var _0x250ec2=[];var _0x5a1c39=[];var _0x136ae2={};var _0x54fcec=![];return db['CmContact'][_0x1e2d('0x67')]()[_0x1e2d('0x37')](function(_0x29188a){if(!_0x29188a){throw new db['Sequelize'][(_0x1e2d('0x93'))](_0x1e2d('0x94'));}_0x250ec2=_[_0x1e2d('0x95')](_[_0x1e2d('0x44')](_0x29188a),[_0x1e2d('0x96'),'updatedAt']);_0x5a1c39=_['difference'](_[_0x1e2d('0x44')](_0x29188a),['createdAt',_0x1e2d('0x97'),_0x1e2d('0x98'),'ListId']);if(_0x47b5fe[_0x1e2d('0x5e')]['id']){delete _0x47b5fe[_0x1e2d('0x5e')]['id'];}if(_[_0x1e2d('0x81')](_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0x99')])){throw new db[(_0x1e2d('0x9a'))]['ValidationError'](_0x1e2d('0x9b'));}if(_[_0x1e2d('0x81')](_0x47b5fe[_0x1e2d('0x5e')]['body'])||_0x47b5fe[_0x1e2d('0x5e')]['body']===''){throw new db[(_0x1e2d('0x9a'))][(_0x1e2d('0x93'))](_0x1e2d('0x9c'));}if(_[_0x1e2d('0x81')](_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0x9d')])){throw new db['Sequelize']['ValidationError'](_0x1e2d('0x9e')+_0x5a1c39);}if(!_[_0x1e2d('0x9f')](_0x5a1c39,_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0x9d')])){throw new db[(_0x1e2d('0x9a'))][(_0x1e2d('0x93'))](_0x1e2d('0xa0')+_0x5a1c39);}_0x136ae2[_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0x9d')]]=_0x47b5fe['body'][_0x1e2d('0x99')];})['then'](function(){return db[_0x1e2d('0x41')][_0x1e2d('0x63')]({'where':{'id':_0x47b5fe['params']['id']},'include':[{'model':db[_0x1e2d('0xa1')],'as':_0x1e2d('0xa2'),'include':[{'model':db[_0x1e2d('0xa3')],'as':_0x1e2d('0xa4'),'where':_0x136ae2,'limit':0x1,'order':[[_0x1e2d('0x97'),_0x1e2d('0xa5')]]}]},{'model':db[_0x1e2d('0xa6')],'as':_0x1e2d('0xa7')}]});})['then'](handleEntityNotFound(_0x2eb48e,null))[_0x1e2d('0x37')](function(_0x350820){if(_0x350820&&_0x350820['List']){_0x444624[_0x1e2d('0xa8')]=_0x350820;_0x444624['applications']=_0x350820[_0x1e2d('0xa7')];_0x444624['list']=_0x350820['List'];_0x444624[_0x1e2d('0xa9')]=_[_0x1e2d('0xaa')](_0x444624[_0x1e2d('0xa9')],['priority'],[_0x1e2d('0xab')]);if(_0x444624[_0x1e2d('0xa8')]['Applications']){delete _0x444624['account'][_0x1e2d('0xa7')];}if(_0x444624[_0x1e2d('0xa8')][_0x1e2d('0xa2')]&&_0x444624[_0x1e2d('0xa8')][_0x1e2d('0xa2')]['Contacts'][_0x1e2d('0x4a')]){return _0x444624['account'][_0x1e2d('0xa2')][_0x1e2d('0xa4')][0x0];}var _0xc78c37=_[_0x1e2d('0x19')](_0x47b5fe[_0x1e2d('0x5e')],{'firstName':_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0x99')],'ListId':_0x350820['ListId']});_0xc78c37[_0x47b5fe[_0x1e2d('0x5e')]['mapKey']]=_0x47b5fe[_0x1e2d('0x5e')]['from'];return db[_0x1e2d('0xa3')][_0x1e2d('0x5d')](_0xc78c37,{'fields':_0x250ec2,'raw':!![]});}})['then'](handleEntityNotFound(_0x2eb48e,null))[_0x1e2d('0x37')](function(_0x2c72e8){_0x444624[_0x1e2d('0xac')]=_0x2c72e8;if(_0x2c72e8){var _0x4c2c15={'ContactId':_0x2c72e8['id'],'ChatWebsiteId':_0x47b5fe[_0x1e2d('0x66')]['id'],'from':(_0x2c72e8[_0x1e2d('0xad')]||'')+'\x20'+(_0x2c72e8[_0x1e2d('0xae')]||''),'customerIp':_0x47b5fe[_0x1e2d('0x5e')]['customerIp'],'referer':_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0xaf')],'browserName':_0x28921c[_0x1e2d('0xb0')][_0x1e2d('0x3c')]&&_0x28921c[_0x1e2d('0xb0')][_0x1e2d('0xb1')]?util[_0x1e2d('0xb2')](_0x1e2d('0xb3'),_0x28921c[_0x1e2d('0xb0')][_0x1e2d('0x3c')],_0x28921c['browser'][_0x1e2d('0xb1')]):_0x1e2d('0xb4'),'browserVersion':_0x28921c[_0x1e2d('0xb0')]['version']||'unknown','osName':util[_0x1e2d('0xb2')]('%s\x20%s',_0x28921c['os'][_0x1e2d('0x3c')],_0x28921c['os'][_0x1e2d('0xb1')]),'osVersion':_0x28921c['os']['version'],'deviceModel':_0x28921c['device']['model']&&_0x28921c[_0x1e2d('0xb5')][_0x1e2d('0xb6')]?util[_0x1e2d('0xb2')](_0x1e2d('0xb7'),_0x28921c[_0x1e2d('0xb5')][_0x1e2d('0x43')],_0x28921c[_0x1e2d('0xb5')][_0x1e2d('0xb6')],_0x28921c['device'][_0x1e2d('0x53')]):null,'deviceVendor':_0x28921c[_0x1e2d('0xb5')][_0x1e2d('0xb6')],'deviceType':_0x28921c[_0x1e2d('0xb5')][_0x1e2d('0x53')],'formData':JSON[_0x1e2d('0x26')](_0x47b5fe[_0x1e2d('0x5e')])};var _0x4d5f1d={'ChatWebsiteId':_0x47b5fe[_0x1e2d('0x66')]['id'],'closed':![]};if(_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0xb8')]){_0x4d5f1d[_0x1e2d('0xb8')]=_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0xb8')];return db['ChatInteraction'][_0x1e2d('0x63')]({'where':_0x4d5f1d})[_0x1e2d('0x37')](function(_0x40c734){if(_0x40c734){return[_0x40c734,![]];}_0x4c2c15[_0x1e2d('0xb8')]=_0x47b5fe[_0x1e2d('0x5e')]['threadId'];_0x4c2c15[_0x1e2d('0xb9')]=_0x47b5fe[_0x1e2d('0x5e')]['externalUrl'];return db['ChatInteraction'][_0x1e2d('0x5d')](_0x4c2c15)[_0x1e2d('0x37')](function(_0x3f2ead){return[_0x3f2ead,!![]];});});}_0x4d5f1d[_0x1e2d('0xba')]=_0x2c72e8['id'];if(_0x47b5fe['body'][_0x1e2d('0xbb')]&&_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0xbb')]['id']){_0x4d5f1d['id']=_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0xbb')]['id'];return db[_0x1e2d('0xbc')]['find']({'where':_0x4d5f1d})[_0x1e2d('0x37')](function(_0x3c7986){if(_0x3c7986){return[_0x3c7986,![]];}return db[_0x1e2d('0xbc')][_0x1e2d('0x5d')](_0x4c2c15)[_0x1e2d('0x37')](function(_0xb93597){return[_0xb93597,!![]];});});}return db[_0x1e2d('0xbc')][_0x1e2d('0x5d')](_0x4c2c15)[_0x1e2d('0x37')](function(_0x43084a){return[_0x43084a,!![]];});}})[_0x1e2d('0xbd')](function(_0x3367b3,_0x4dd10f){if(_0x3367b3){_0x54fcec=_0x4dd10f;if(!_0x4dd10f){var _0x2880dc={'from':(_0x444624[_0x1e2d('0xac')][_0x1e2d('0xad')]||'')+'\x20'+(_0x444624[_0x1e2d('0xac')]['lastName']||'')};if(_0x47b5fe['body'][_0x1e2d('0xb8')]&&_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0xbe')]&&_0x47b5fe['body']['threadId']!=_0x47b5fe['body'][_0x1e2d('0xbe')]){_0x2880dc['threadId']=_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0xbe')];}return _0x3367b3[_0x1e2d('0x36')](_0x2880dc);}else{return _0x3367b3;}}})[_0x1e2d('0x37')](function(_0x412f83){_0x444624[_0x1e2d('0xbb')]=_0x412f83['get']({'plain':!![]});_0x444624[_0x1e2d('0xbb')][_0x1e2d('0xbf')]=_0x54fcec;if(_0x444624[_0x1e2d('0xbb')][_0x1e2d('0xbf')]){if(_0x444624[_0x1e2d('0xa8')][_0x1e2d('0xc0')]){_0x444624['applications'][_0x1e2d('0xc1')]({'id':0x0,'priority':_0x444624[_0x1e2d('0xa9')]['length']+0x1,'app':_0x1e2d('0xc2'),'appdata':_0x1e2d('0xc3'),'interval':'*,*,*,*'});}}return db['ChatMessage'][_0x1e2d('0x5d')]({'body':_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0x5e')],'ChatWebsiteId':_0x47b5fe[_0x1e2d('0x66')]['id'],'ChatInteractionId':_0x412f83['id'],'direction':'in','ContactId':_0x444624['contact']['id'],'AttachmentId':_0x47b5fe[_0x1e2d('0x5e')][_0x1e2d('0xc4')]});})['then'](function(_0x1befee){_0x444624[_0x1e2d('0x29')]=_0x1befee;if(_0x444624[_0x1e2d('0xbb')][_0x1e2d('0xc5')]){return db['User'][_0x1e2d('0x63')]({'attributes':['id','name'],'where':{'id':_0x444624[_0x1e2d('0xbb')]['UserId']}})[_0x1e2d('0x37')](function(_0x4bcd63){if(_0x4bcd63){_0x444624[_0x1e2d('0xa9')][_0x1e2d('0xc6')]({'id':0x0,'priority':0x0,'app':_0x1e2d('0xc7'),'appdata':_0x4bcd63[_0x1e2d('0x3c')]+','+(_0x444624['account']['waitForTheAssignedAgent']||0xa),'interval':_0x1e2d('0xc8')});_0x444624[_0x1e2d('0xc9')]=!![];}return respondWithRpcPromise(_0x1e2d('0xca'),_0x1e2d('0xcb'),_0x444624);});}return respondWithRpcPromise(_0x1e2d('0xca'),_0x1e2d('0xcb'),_0x444624);})[_0x1e2d('0x37')](function(_0x190e78){respondWithRpcPromise(_0x1e2d('0xcc'),_0x1e2d('0xcc'),{'event':_0x1e2d('0x8e'),'message':_0x190e78},client9002);return _0x190e78;})[_0x1e2d('0x37')](respondWithResult(_0x2eb48e,null))[_0x1e2d('0x5a')](handleError(_0x2eb48e,null));};exports[_0x1e2d('0xcd')]=function(_0x582441,_0x30c1b1,_0x5507cc){var _0x18079a,_0x26c1db,_0x222d33;var _0x5d68f3=[];var _0x2198d7=[];var _0x4b2daf={};return db[_0x1e2d('0xa3')][_0x1e2d('0x67')]()['then'](function(_0x1799c1){if(!_0x1799c1){throw new db[(_0x1e2d('0x9a'))][(_0x1e2d('0x93'))](_0x1e2d('0x94'));}_0x2198d7=_['difference'](_[_0x1e2d('0x44')](_0x1799c1),[_0x1e2d('0x96'),_0x1e2d('0x97')]);_0x5d68f3=_[_0x1e2d('0x95')](_[_0x1e2d('0x44')](_0x1799c1),[_0x1e2d('0x96'),_0x1e2d('0x97'),_0x1e2d('0x98'),_0x1e2d('0xce')]);if(_0x582441['body']['id']){delete _0x582441['body']['id'];}if(_[_0x1e2d('0x81')](_0x582441[_0x1e2d('0x5e')]['from'])){throw _0x30c1b1['status'](0x1f4)[_0x1e2d('0x3d')](new db[(_0x1e2d('0x9a'))]['ValidationError'](_0x1e2d('0x9b')));}if(_[_0x1e2d('0x81')](_0x582441[_0x1e2d('0x5e')][_0x1e2d('0x5e')])||_0x582441[_0x1e2d('0x5e')][_0x1e2d('0x5e')]===''){throw _0x30c1b1[_0x1e2d('0x2d')](0x1f4)[_0x1e2d('0x3d')](new db[(_0x1e2d('0x9a'))]['ValidationError'](_0x1e2d('0x9c')));}if(_[_0x1e2d('0x81')](_0x582441[_0x1e2d('0x5e')][_0x1e2d('0xcf')])){throw _0x30c1b1['status'](0x1f4)[_0x1e2d('0x3d')](new db[(_0x1e2d('0x9a'))][(_0x1e2d('0x93'))](_0x1e2d('0xd0')+_0x5d68f3));}if(!_[_0x1e2d('0x9f')](_0x5d68f3,_0x582441[_0x1e2d('0x5e')][_0x1e2d('0xcf')])){throw _0x30c1b1[_0x1e2d('0x2d')](0x1f4)[_0x1e2d('0x3d')](new db[(_0x1e2d('0x9a'))][(_0x1e2d('0x93'))](_0x1e2d('0xd1')+_0x5d68f3));}_0x4b2daf[_0x582441[_0x1e2d('0x5e')]['mapKeyOffline']]=_0x582441[_0x1e2d('0x5e')]['from'];})[_0x1e2d('0x37')](function(){return db[_0x1e2d('0x41')][_0x1e2d('0x63')]({'where':{'id':_0x582441[_0x1e2d('0x66')]['id']},'include':[{'model':db[_0x1e2d('0xa1')],'as':'List'}]});})[_0x1e2d('0x37')](handleEntityNotFound(_0x30c1b1,null))['then'](function(_0x7ceb83){if(_0x7ceb83&&_0x7ceb83[_0x1e2d('0xa2')]){_0x26c1db=_0x7ceb83;var _0x567b3e=_[_0x1e2d('0x19')](_0x582441['body'],{'firstName':_0x582441[_0x1e2d('0x5e')][_0x1e2d('0x99')],'phone':_0x582441['body'][_0x1e2d('0x99')],'ListId':_0x7ceb83[_0x1e2d('0xce')]});_0x567b3e[_0x582441['body'][_0x1e2d('0xcf')]]=_0x582441['body'][_0x1e2d('0x99')];return db[_0x1e2d('0xa3')][_0x1e2d('0xd2')]({'where':_0x4b2daf,'defaults':_0x567b3e});}})['spread'](function(_0x34aec8){if(_0x34aec8){_0x222d33=_0x34aec8;var _0x1dd2ed=fs['readFileSync'](path[_0x1e2d('0x7d')](config[_0x1e2d('0x7e')],_0x1e2d('0xd3')),'utf8');var _0x3d8da8=ejs[_0x1e2d('0xd4')](_0x1dd2ed,{'body':_[_0x1e2d('0xd5')](_0x582441[_0x1e2d('0x5e')][_0x1e2d('0x5e')]),'bodyTitle':_0x26c1db[_0x1e2d('0xd6')]});return db[_0x1e2d('0xd7')][_0x1e2d('0x5d')]({'body':_0x3d8da8,'ContactId':_0x34aec8['id'],'ChatWebsiteId':_0x26c1db['id']});}})[_0x1e2d('0x37')](function(_0x3feff6){if(_0x3feff6){_0x18079a=_0x3feff6;return db[_0x1e2d('0xd8')]['findOne']({'where':{'service':!![]},'include':[{'model':db['MailServerOut'],'as':_0x1e2d('0xd9'),'raw':!![]}]});}})[_0x1e2d('0x37')](function(_0x1c4175){if(_0x1c4175&&_0x1c4175[_0x1e2d('0xd9')]&&_0x26c1db[_0x1e2d('0xda')]){var _0xbb3e50={'tls':{'rejectUnauthorized':![]}};if(_0x1c4175[_0x1e2d('0xd9')][_0x1e2d('0xdb')]){_0xbb3e50[_0x1e2d('0xdb')]=_0x1c4175[_0x1e2d('0xd9')]['service'];}else{_0xbb3e50['host']=_0x1c4175[_0x1e2d('0xd9')][_0x1e2d('0xdc')];_0xbb3e50[_0x1e2d('0xdd')]=_0x1c4175[_0x1e2d('0xd9')][_0x1e2d('0xdd')];_0xbb3e50['secure']=_0x1c4175[_0x1e2d('0xd9')][_0x1e2d('0xde')];}if(_0x1c4175[_0x1e2d('0xd9')][_0x1e2d('0xdf')]){_0xbb3e50['auth']={'user':_0x1c4175[_0x1e2d('0xd9')][_0x1e2d('0x5f')],'pass':_0x1c4175[_0x1e2d('0xd9')]['pass']};}return respondWithRpcPromise(_0x1e2d('0xe0'),_0x1e2d('0xe1'),{'account':_0xbb3e50,'message':{'from':util[_0x1e2d('0xb2')](_0x1e2d('0xe2'),_0x1c4175[_0x1e2d('0x3c')],_0x1c4175[_0x1e2d('0xe3')]||_0x1c4175[_0x1e2d('0xd9')][_0x1e2d('0x5f')]),'to':_0x26c1db[_0x1e2d('0xda')],'subject':_0x26c1db[_0x1e2d('0xe4')],'text':_0x18079a['body']}},client9003)['then'](function(){return _0x18079a;})['catch'](function(_0x34c0d8){console['error'](_0x34c0d8);});}})['then'](function(){if(_0x18079a){return _0x18079a;}})['then'](respondWithResult(_0x30c1b1,null))['catch'](handleError(_0x30c1b1,null));};exports[_0x1e2d('0xe5')]=function(_0x5101ca,_0x2eb3c2,_0x20a68b){return db[_0x1e2d('0xbc')][_0x1e2d('0x63')]({'where':{'id':_0x5101ca[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x2eb3c2,null))[_0x1e2d('0x37')](function(_0x5f2fff){if(_0x5f2fff){return _0x5f2fff[_0x1e2d('0xe5')](_0x5101ca[_0x1e2d('0x5e')][_0x1e2d('0x6f')],_['omit'](_0x5101ca[_0x1e2d('0x5e')],['ids','id'])||{});}})[_0x1e2d('0x37')](respondWithResult(_0x2eb3c2,null))[_0x1e2d('0x5a')](handleError(_0x2eb3c2,null));};exports[_0x1e2d('0xe6')]=function(_0x534884,_0x4613a0,_0x5c3229){var _0x521af4={'raw':![],'where':{}};var _0x5922da={};var _0x1fbbd0={'count':0x0,'rows':[]};return db[_0x1e2d('0x41')][_0x1e2d('0x6b')]({'where':{'id':_0x534884[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x4613a0,null))[_0x1e2d('0x37')](function(_0x5b8a2a){if(_0x5b8a2a){_0x5922da[_0x1e2d('0x43')]=_[_0x1e2d('0x44')](db[_0x1e2d('0xbc')][_0x1e2d('0x42')]);_0x5922da[_0x1e2d('0x45')]=_[_0x1e2d('0x44')](_0x534884[_0x1e2d('0x45')]);_0x5922da[_0x1e2d('0x46')]=_[_0x1e2d('0x47')](_0x5922da[_0x1e2d('0x43')],_0x5922da[_0x1e2d('0x45')]);_0x521af4[_0x1e2d('0x49')]=_['intersection'](_0x5922da[_0x1e2d('0x43')],qs[_0x1e2d('0x48')](_0x534884[_0x1e2d('0x45')]['fields']));_0x521af4[_0x1e2d('0x49')]=_0x521af4['attributes'][_0x1e2d('0x4a')]?_0x521af4[_0x1e2d('0x49')]:_0x5922da['model'];if(!_0x534884[_0x1e2d('0x45')][_0x1e2d('0x6c')](_0x1e2d('0x4b'))){_0x521af4[_0x1e2d('0x32')]=qs['limit'](_0x534884[_0x1e2d('0x45')]['limit']);_0x521af4[_0x1e2d('0x31')]=qs['offset'](_0x534884['query']['offset']);}_0x521af4[_0x1e2d('0x4c')]=qs[_0x1e2d('0x4d')](_0x534884['query']['sort']);_0x521af4[_0x1e2d('0x4e')]=qs[_0x1e2d('0x46')](_['pick'](_0x534884[_0x1e2d('0x45')],_0x5922da['filters']));_0x521af4['where'][_0x1e2d('0x6d')]=_0x5b8a2a['id'];if(_0x534884['query']['filter']){_0x521af4[_0x1e2d('0x4e')]=_[_0x1e2d('0x51')](_0x521af4['where'],{'$or':_[_0x1e2d('0x52')](_0x521af4[_0x1e2d('0x49')],function(_0x1db921){var _0x1cb508={};_0x1cb508[_0x1db921]={'$like':'%'+_0x534884['query'][_0x1e2d('0x50')]+'%'};return _0x1cb508;})});}_0x521af4=_['merge']({},_0x521af4,_0x534884[_0x1e2d('0x56')]);return db[_0x1e2d('0xbc')][_0x1e2d('0x30')]({'where':_0x521af4[_0x1e2d('0x4e')]})[_0x1e2d('0x37')](function(_0x45158c){_0x1fbbd0['count']=_0x45158c;if(_0x534884[_0x1e2d('0x45')]['includeAll']){_0x521af4[_0x1e2d('0x5c')]=[{'model':db[_0x1e2d('0xa3')],'as':'Contact','required':![]},{'model':db[_0x1e2d('0xe7')],'as':_0x1e2d('0xe8'),'attributes':[_0x1e2d('0x3c'),_0x1e2d('0xe9'),_0x1e2d('0xea')],'required':![]},{'model':db[_0x1e2d('0xeb')],'as':_0x1e2d('0xec'),'attributes':['id','name','color'],'where':_0x534884[_0x1e2d('0x45')]['tag']?{'id':_0x534884[_0x1e2d('0x45')][_0x1e2d('0xed')]}:undefined,'required':_0x534884[_0x1e2d('0x45')][_0x1e2d('0xed')]?!![]:![]}];}return db[_0x1e2d('0xbc')][_0x1e2d('0x58')](_0x521af4);})[_0x1e2d('0x37')](function(_0x3ace88){_0x1fbbd0[_0x1e2d('0x59')]=_0x3ace88;return _0x1fbbd0;});}})['then'](respondWithFilteredResult(_0x4613a0,_0x521af4))[_0x1e2d('0x5a')](handleError(_0x4613a0,null));};function iftimePromise(_0xfd2f35,_0x1ac0bc){return respondWithRpcPromise(_0x1e2d('0xee'),_0x1e2d('0xef'),{'command':_0x1ac0bc[_0x1e2d('0xf0')]?util[_0x1e2d('0xb2')](_0x1e2d('0xf1'),_0xfd2f35[_0x1e2d('0xf2')],_0x1ac0bc[_0x1e2d('0xf0')]):util[_0x1e2d('0xb2')](_0x1e2d('0xf3'),_0xfd2f35['interval'])},client9002)[_0x1e2d('0x37')](function(_0x7cadda){var _0x529d28=_0x7cadda&&_0x7cadda[_0x1e2d('0xf4')](_0x1e2d('0xf5'))>=0x0?!![]:![];logger[_0x1e2d('0x2a')](_0x1e2d('0xf6'),_0x1ac0bc['id'],_0xfd2f35['id'],_0xfd2f35['interval'],_0x529d28?'ONLINE':_0x1e2d('0xf7'),_0x1ac0bc[_0x1e2d('0xf0')]?_0x1ac0bc[_0x1e2d('0xf0')]:_0x1e2d('0xf8'));return _0x529d28;})[_0x1e2d('0x5a')](function(_0x2bf082){logger[_0x1e2d('0x27')](_0x1e2d('0xf6'),_0x1ac0bc['id'],_0xfd2f35['id'],_0xfd2f35[_0x1e2d('0xf2')],util[_0x1e2d('0xf9')](_0x2bf082,{'showHidden':![],'depth':null}),_0x1ac0bc[_0x1e2d('0xf0')]?_0x1ac0bc[_0x1e2d('0xf0')]:_0x1e2d('0xf8'));return![];});}exports['getSnippet']=function(_0x4d6fcd,_0x4ec900,_0x5ee4ae){var _0x4313df=0x0;var _0x15e9ae=0x0;var _0x97fdf=![];var _0x55aa30;var _0x229f04;return db[_0x1e2d('0x41')][_0x1e2d('0x63')]({'where':{'id':_0x4d6fcd['params']['id']},'include':[{'model':db[_0x1e2d('0xfa')],'as':'Interval','include':[{'model':db[_0x1e2d('0xfa')],'as':_0x1e2d('0xfb'),'attributes':['id',_0x1e2d('0xf2')],'raw':!![]}]}]})[_0x1e2d('0x37')](handleEntityNotFound(_0x4ec900,null))[_0x1e2d('0x37')](function(_0x1ce5db){if(_0x1ce5db){_0x55aa30=_0x1ce5db;return _0x1ce5db[_0x1e2d('0xfc')]({'raw':!![]});}})[_0x1e2d('0x37')](function(_0x37237d){if(_0x55aa30){if(_0x37237d){_0x229f04=_0x37237d;}}return require(_0x1e2d('0x80'))[_0x1e2d('0xfd')]();})[_0x1e2d('0x37')](function(_0x4a8f28){if(_0x4a8f28){_0x15e9ae=_0x4a8f28[_0x1e2d('0xfe')];_0x97fdf=_0x4a8f28[_0x1e2d('0xff')];}})[_0x1e2d('0x37')](function(){return db[_0x1e2d('0xbc')]['count']({'where':{'closed':![]}});})[_0x1e2d('0x37')](function(_0x17f483){_0x4313df=_0x17f483;if(_0x15e9ae&&_0x17f483>_0x15e9ae){return db[_0x1e2d('0x100')][_0x1e2d('0x6b')]({'where':{'id':0x1}})[_0x1e2d('0x37')](function(_0x31d579){if(_0x31d579){_0x31d579[_0x1e2d('0x101')](_0x1e2d('0x102'));}});}})['then'](function(){if(_0x55aa30[_0x1e2d('0xfa')]&&_0x55aa30['Interval'][_0x1e2d('0xfb')]){var _0x2e5414=[];for(var _0x17a96f=0x0;_0x17a96f<_0x55aa30[_0x1e2d('0xfa')][_0x1e2d('0xfb')]['length'];_0x17a96f++){var _0x329ce7=_0x55aa30[_0x1e2d('0xfa')][_0x1e2d('0xfb')][_0x17a96f]['get']({'plain':!![]});_0x2e5414[_0x1e2d('0xc1')](iftimePromise(_0x329ce7,_0x55aa30));}return BPromise[_0x1e2d('0x103')](_0x2e5414)['then'](function(_0x31ab17){return _['some'](_0x31ab17);});}else{return!![];}})[_0x1e2d('0x37')](function(_0x2b96a2){var _0x9952ff=fs[_0x1e2d('0x104')](path[_0x1e2d('0x7d')](config['root'],_0x1e2d('0x105')),_0x1e2d('0x106'));var _0x1c5234={'remote':_0x55aa30[_0x1e2d('0x107')],'query':querystring['stringify'](_[_0x1e2d('0x51')](_0x55aa30['get']({'plain':!![]}),{'customerIp':_0x4d6fcd[_0x1e2d('0x108')][_0x1e2d('0x109')]||_0x4d6fcd[_0x1e2d('0x108')]['x-real-ip']||_0x4d6fcd[_0x1e2d('0x10a')][_0x1e2d('0x10b')]||_0x4d6fcd['ip'],'referer':_0x4d6fcd[_0x1e2d('0x108')][_0x1e2d('0xaf')],'openedInteractions':_0x4313df,'maxInteractions':_0x15e9ae,'virtual':_0x97fdf['virtual'],'online':_0x2b96a2,'custom':_0x97fdf}))['replace'](/'/g,'\x5c\x27')};_0x4ec900[_0x1e2d('0x3d')](ejs[_0x1e2d('0xd4')](Mustache[_0x1e2d('0xd4')](_0x9952ff,_0x1c5234),{'proactiveActions':_0x229f04,'alignment':_0x55aa30[_0x1e2d('0x10c')],'verticalAlignment':_0x55aa30['verticalAlignment']}));})[_0x1e2d('0x5a')](handleError(_0x4ec900,null));};exports['addApplications']=function(_0x1039ba,_0x580dd5,_0x3cbcb2){return db['ChatWebsite'][_0x1e2d('0x6b')]({'where':{'id':_0x1039ba[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x580dd5,null))[_0x1e2d('0x37')](function(_0x107e1c){if(_0x107e1c){return db[_0x1e2d('0x10d')][_0x1e2d('0x10e')](function(_0x19a212){return db[_0x1e2d('0xa6')][_0x1e2d('0x3a')]({'where':{'ChatWebsiteId':_0x1039ba['params']['id']},'transaction':_0x19a212})[_0x1e2d('0x37')](function(_0x5cfd19){var _0x35bbdd=_[_0x1e2d('0x52')](_0x1039ba[_0x1e2d('0x5e')],function(_0x53c01a){_0x53c01a['ChatWebsiteId']=_0x1039ba[_0x1e2d('0x66')]['id'];return _0x53c01a;});return db[_0x1e2d('0xa6')]['bulkCreate'](_0x35bbdd,{'transaction':_0x19a212});});})[_0x1e2d('0x37')](function(){return db[_0x1e2d('0xa6')]['findAndCountAll']({'where':{'ChatWebsiteId':_0x1039ba[_0x1e2d('0x66')]['id']},'order':_0x1e2d('0x10f')});});}})[_0x1e2d('0x37')](respondWithResult(_0x580dd5,null))[_0x1e2d('0x5a')](handleError(_0x580dd5,null));};exports['getApplications']=function(_0x25e035,_0x4b7f62,_0x4af912){var _0x2bbc5a={};var _0x411774={};var _0x3cfaef;var _0x3d7aeb;return db[_0x1e2d('0x41')]['findOne']({'where':{'id':_0x25e035[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x4b7f62,null))[_0x1e2d('0x37')](function(_0x3df6a7){if(_0x3df6a7){_0x3cfaef=_0x3df6a7;_0x411774['model']=_[_0x1e2d('0x44')](db[_0x1e2d('0xa6')][_0x1e2d('0x42')]);_0x411774[_0x1e2d('0x45')]=_[_0x1e2d('0x44')](_0x25e035[_0x1e2d('0x45')]);_0x411774[_0x1e2d('0x46')]=_[_0x1e2d('0x47')](_0x411774[_0x1e2d('0x43')],_0x411774[_0x1e2d('0x45')]);_0x2bbc5a['attributes']=_[_0x1e2d('0x47')](_0x411774[_0x1e2d('0x43')],qs[_0x1e2d('0x48')](_0x25e035[_0x1e2d('0x45')]['fields']));_0x2bbc5a[_0x1e2d('0x49')]=_0x2bbc5a[_0x1e2d('0x49')][_0x1e2d('0x4a')]?_0x2bbc5a[_0x1e2d('0x49')]:_0x411774[_0x1e2d('0x43')];_0x2bbc5a['order']=qs[_0x1e2d('0x4d')](_0x25e035[_0x1e2d('0x45')][_0x1e2d('0x4d')]);_0x2bbc5a['where']=qs[_0x1e2d('0x46')](_['pick'](_0x25e035['query'],_0x411774[_0x1e2d('0x46')]));if(_0x25e035[_0x1e2d('0x45')][_0x1e2d('0x50')]){_0x2bbc5a['where']=_['merge'](_0x2bbc5a['where'],{'$or':_[_0x1e2d('0x52')](_0x2bbc5a[_0x1e2d('0x49')],function(_0x19adfb){var _0x56f852={};_0x56f852[_0x19adfb]={'$like':'%'+_0x25e035['query'][_0x1e2d('0x50')]+'%'};return _0x56f852;})});}_0x2bbc5a=_[_0x1e2d('0x51')]({},_0x2bbc5a,_0x25e035[_0x1e2d('0x56')]);return _0x3cfaef[_0x1e2d('0x110')](_0x2bbc5a);}})['then'](function(_0x5d4863){if(_0x5d4863){_0x3d7aeb=_0x5d4863[_0x1e2d('0x4a')];if(!_0x25e035[_0x1e2d('0x45')]['hasOwnProperty'](_0x1e2d('0x4b'))){_0x2bbc5a[_0x1e2d('0x32')]=qs[_0x1e2d('0x32')](_0x25e035[_0x1e2d('0x45')][_0x1e2d('0x32')]);_0x2bbc5a[_0x1e2d('0x31')]=qs['offset'](_0x25e035[_0x1e2d('0x45')]['offset']);}return _0x3cfaef[_0x1e2d('0x110')](_0x2bbc5a);}})['then'](function(_0x2dd5dd){if(_0x2dd5dd){return _0x2dd5dd?{'count':_0x3d7aeb,'rows':_0x2dd5dd}:null;}})[_0x1e2d('0x37')](respondWithResult(_0x4b7f62,null))[_0x1e2d('0x5a')](handleError(_0x4b7f62,null));};exports['addProactiveActions']=function(_0xef0ae5,_0x4e2878,_0x91a438){return db['chatProactiveAction'][_0x1e2d('0x63')]({'where':{'id':_0xef0ae5[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x4e2878,null))[_0x1e2d('0x37')](function(_0x299ecd){if(_0x299ecd){return _0x299ecd[_0x1e2d('0x111')](_0xef0ae5[_0x1e2d('0x5e')][_0x1e2d('0x6f')],_[_0x1e2d('0x112')](_0xef0ae5[_0x1e2d('0x5e')],['ids','id'])||{});}})[_0x1e2d('0x37')](respondWithResult(_0x4e2878,null))[_0x1e2d('0x5a')](handleError(_0x4e2878,null));};exports['getProactiveActions']=function(_0x39f6d9,_0x1d5266,_0x4097f7){var _0x3ffcf9={};var _0x4e4d53={};var _0x30dabc;var _0x3e74ce;return db['ChatWebsite'][_0x1e2d('0x6b')]({'where':{'id':_0x39f6d9[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x1d5266,null))[_0x1e2d('0x37')](function(_0x1fbdb9){if(_0x1fbdb9){_0x30dabc=_0x1fbdb9;_0x4e4d53[_0x1e2d('0x43')]=_[_0x1e2d('0x44')](db['ChatProactiveAction']['rawAttributes']);_0x4e4d53[_0x1e2d('0x45')]=_[_0x1e2d('0x44')](_0x39f6d9[_0x1e2d('0x45')]);_0x4e4d53['filters']=_['intersection'](_0x4e4d53[_0x1e2d('0x43')],_0x4e4d53['query']);_0x3ffcf9[_0x1e2d('0x49')]=_[_0x1e2d('0x47')](_0x4e4d53[_0x1e2d('0x43')],qs[_0x1e2d('0x48')](_0x39f6d9[_0x1e2d('0x45')][_0x1e2d('0x48')]));_0x3ffcf9[_0x1e2d('0x49')]=_0x3ffcf9[_0x1e2d('0x49')][_0x1e2d('0x4a')]?_0x3ffcf9['attributes']:_0x4e4d53[_0x1e2d('0x43')];_0x3ffcf9[_0x1e2d('0x4c')]=qs[_0x1e2d('0x4d')](_0x39f6d9[_0x1e2d('0x45')][_0x1e2d('0x4d')]);_0x3ffcf9[_0x1e2d('0x4e')]=qs['filters'](_[_0x1e2d('0x4f')](_0x39f6d9[_0x1e2d('0x45')],_0x4e4d53['filters']));if(_0x39f6d9[_0x1e2d('0x45')]['filter']){_0x3ffcf9[_0x1e2d('0x4e')]=_['merge'](_0x3ffcf9[_0x1e2d('0x4e')],{'$or':_[_0x1e2d('0x52')](_0x3ffcf9['attributes'],function(_0x187147){var _0x2bc52f={};_0x2bc52f[_0x187147]={'$like':'%'+_0x39f6d9['query'][_0x1e2d('0x50')]+'%'};return _0x2bc52f;})});}_0x3ffcf9=_['merge']({},_0x3ffcf9,_0x39f6d9[_0x1e2d('0x56')]);return _0x30dabc[_0x1e2d('0xfc')](_0x3ffcf9);}})[_0x1e2d('0x37')](function(_0x34b2f5){if(_0x34b2f5){_0x3e74ce=_0x34b2f5[_0x1e2d('0x4a')];if(!_0x39f6d9['query'][_0x1e2d('0x6c')]('nolimit')){_0x3ffcf9[_0x1e2d('0x32')]=qs[_0x1e2d('0x32')](_0x39f6d9[_0x1e2d('0x45')][_0x1e2d('0x32')]);_0x3ffcf9['offset']=qs[_0x1e2d('0x31')](_0x39f6d9[_0x1e2d('0x45')]['offset']);}return _0x30dabc[_0x1e2d('0xfc')](_0x3ffcf9);}})['then'](function(_0x281c5d){if(_0x281c5d){return _0x281c5d?{'count':_0x3e74ce,'rows':_0x281c5d}:null;}})[_0x1e2d('0x37')](respondWithResult(_0x1d5266,null))[_0x1e2d('0x5a')](handleError(_0x1d5266,null));};exports[_0x1e2d('0x113')]=function(_0x4f62b3,_0x5cbb6d,_0x73e0bd){var _0x144cb5=_0x4f62b3[_0x1e2d('0x45')][_0x1e2d('0x114')]===_0x1e2d('0x115')?_0x1e2d('0x116'):_0x1e2d('0x117');return db['ChatWebsite'][_0x1e2d('0x63')]({'attributes':['id',_0x144cb5],'where':{'id':_0x4f62b3[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x5cbb6d,null))[_0x1e2d('0x37')](function(_0xec6c01){if(_0xec6c01){var _0x510f8b=_0xec6c01[_0x144cb5];var _0x313d3a=_0x510f8b&&_0x510f8b[_0x1e2d('0x118')]?_0x510f8b[_0x1e2d('0x118')]:[];_0x5cbb6d[_0x1e2d('0x3d')]({'fromKey':_[_0x1e2d('0x81')](_0x510f8b['fromKey'])?undefined:_0x510f8b[_0x1e2d('0x119')],'count':_0x313d3a[_0x1e2d('0x4a')],'rows':_0x313d3a});}})['catch'](handleError(_0x5cbb6d,null));};exports['getOfflineMessages']=function(_0x5cd771,_0x168724,_0x5dec3d){var _0x108c7e={'raw':!![],'where':{}};var _0x4b8d3f={};var _0x2ef158={'count':0x0,'rows':[]};return db['ChatWebsite'][_0x1e2d('0x6b')]({'where':{'id':_0x5cd771['params']['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x168724,null))[_0x1e2d('0x37')](function(_0x52a1ff){if(_0x52a1ff){_0x4b8d3f['model']=_[_0x1e2d('0x44')](db['ChatOfflineMessage']['rawAttributes']);_0x4b8d3f[_0x1e2d('0x45')]=_['keys'](_0x5cd771[_0x1e2d('0x45')]);_0x4b8d3f[_0x1e2d('0x46')]=_[_0x1e2d('0x47')](_0x4b8d3f[_0x1e2d('0x43')],_0x4b8d3f[_0x1e2d('0x45')]);_0x108c7e[_0x1e2d('0x49')]=_[_0x1e2d('0x47')](_0x4b8d3f[_0x1e2d('0x43')],qs[_0x1e2d('0x48')](_0x5cd771['query'][_0x1e2d('0x48')]));_0x108c7e[_0x1e2d('0x49')]=_0x108c7e[_0x1e2d('0x49')][_0x1e2d('0x4a')]?_0x108c7e[_0x1e2d('0x49')]:_0x4b8d3f[_0x1e2d('0x43')];if(!_0x5cd771['query'][_0x1e2d('0x6c')]('nolimit')){_0x108c7e[_0x1e2d('0x32')]=qs[_0x1e2d('0x32')](_0x5cd771[_0x1e2d('0x45')][_0x1e2d('0x32')]);_0x108c7e['offset']=qs[_0x1e2d('0x31')](_0x5cd771['query'][_0x1e2d('0x31')]);}_0x108c7e['order']=qs[_0x1e2d('0x4d')](_0x5cd771['query'][_0x1e2d('0x4d')]);_0x108c7e[_0x1e2d('0x4e')]=qs[_0x1e2d('0x46')](_[_0x1e2d('0x4f')](_0x5cd771[_0x1e2d('0x45')],_0x4b8d3f[_0x1e2d('0x46')]));_0x108c7e[_0x1e2d('0x4e')]['ChatWebsiteId']=_0x52a1ff['id'];if(_0x5cd771[_0x1e2d('0x45')][_0x1e2d('0x50')]){_0x108c7e[_0x1e2d('0x4e')]=_[_0x1e2d('0x51')](_0x108c7e[_0x1e2d('0x4e')],{'$or':_['map'](_0x108c7e['attributes'],function(_0x2f06a4){var _0x3f9305={};_0x3f9305[_0x2f06a4]={'$like':'%'+_0x5cd771[_0x1e2d('0x45')][_0x1e2d('0x50')]+'%'};return _0x3f9305;})});}_0x108c7e=_[_0x1e2d('0x51')]({},_0x108c7e,_0x5cd771['options']);return db[_0x1e2d('0xd7')][_0x1e2d('0x30')]({'where':_0x108c7e[_0x1e2d('0x4e')]})['then'](function(_0x19c218){_0x2ef158[_0x1e2d('0x30')]=_0x19c218;if(_0x5cd771['query'][_0x1e2d('0x57')]){_0x108c7e['include']=[{'all':!![]}];}return db['ChatOfflineMessage'][_0x1e2d('0x58')](_0x108c7e);})[_0x1e2d('0x37')](function(_0x48aa11){_0x2ef158[_0x1e2d('0x59')]=_0x48aa11;return _0x2ef158;});}})[_0x1e2d('0x37')](respondWithFilteredResult(_0x168724,_0x108c7e))[_0x1e2d('0x5a')](handleError(_0x168724,null));};exports[_0x1e2d('0x11a')]=function(_0x23cafb,_0x4d5842,_0x11e0b6){return db[_0x1e2d('0x41')][_0x1e2d('0x63')]({'where':{'id':_0x23cafb[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x4d5842,null))['then'](function(_0x3e2fd5){if(_0x3e2fd5){return _0x3e2fd5[_0x1e2d('0x11a')](_0x23cafb['body'][_0x1e2d('0x6f')],_[_0x1e2d('0x112')](_0x23cafb[_0x1e2d('0x5e')],[_0x1e2d('0x6f'),'id'])||{})[_0x1e2d('0xbd')](function(_0x338b75){for(var _0x18a56c=0x0;_0x18a56c<_0x23cafb['body'][_0x1e2d('0x6f')][_0x1e2d('0x4a')];_0x18a56c+=0x1){socket[_0x1e2d('0x11b')]('userChatWebsite:save',{'UserId':_0x23cafb['body'][_0x1e2d('0x6f')][_0x18a56c],'ChatWebsiteId':_0x23cafb['params']['id']});}return _0x338b75;});}})['then'](respondWithResult(_0x4d5842,null))[_0x1e2d('0x5a')](handleError(_0x4d5842,null));};exports[_0x1e2d('0x11c')]=function(_0x3e8829,_0x36334e,_0x15a727){return db[_0x1e2d('0x41')][_0x1e2d('0x63')]({'where':{'id':_0x3e8829[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x36334e,null))[_0x1e2d('0x37')](function(_0x543bc5){if(_0x543bc5){return _0x543bc5[_0x1e2d('0x11c')](_0x3e8829[_0x1e2d('0x45')][_0x1e2d('0x6f')])['then'](function(){if(_['isArray'](_0x3e8829[_0x1e2d('0x45')][_0x1e2d('0x6f')])){for(var _0x2ba2b2=0x0;_0x2ba2b2<_0x3e8829[_0x1e2d('0x45')][_0x1e2d('0x6f')][_0x1e2d('0x4a')];_0x2ba2b2+=0x1){socket[_0x1e2d('0x11b')](_0x1e2d('0x11d'),{'UserId':Number(_0x3e8829[_0x1e2d('0x45')]['ids'][_0x2ba2b2]),'ChatWebsiteId':Number(_0x3e8829['params']['id'])});}}else{socket['emit'](_0x1e2d('0x11d'),{'UserId':Number(_0x3e8829[_0x1e2d('0x45')][_0x1e2d('0x6f')]),'ChatWebsiteId':Number(_0x3e8829['params']['id'])});}});}})[_0x1e2d('0x37')](respondWithStatusCode(_0x36334e,null))[_0x1e2d('0x5a')](handleError(_0x36334e,null));};exports[_0x1e2d('0x11e')]=function(_0x7e5908,_0x5cbbe2,_0x20882f){var _0x2094ee={};var _0x2bf486={};var _0xeecb90;var _0x5c94de;return db[_0x1e2d('0x41')][_0x1e2d('0x6b')]({'where':{'id':_0x7e5908[_0x1e2d('0x66')]['id']}})[_0x1e2d('0x37')](handleEntityNotFound(_0x5cbbe2,null))[_0x1e2d('0x37')](function(_0x2eafd5){if(_0x2eafd5){_0xeecb90=_0x2eafd5;_0x2bf486[_0x1e2d('0x43')]=_[_0x1e2d('0x44')](db[_0x1e2d('0xe7')][_0x1e2d('0x42')]);_0x2bf486[_0x1e2d('0x45')]=_['keys'](_0x7e5908['query']);_0x2bf486[_0x1e2d('0x46')]=_['intersection'](_0x2bf486[_0x1e2d('0x43')],_0x2bf486[_0x1e2d('0x45')]);_0x2094ee[_0x1e2d('0x49')]=_[_0x1e2d('0x47')](_0x2bf486['model'],qs[_0x1e2d('0x48')](_0x7e5908[_0x1e2d('0x45')][_0x1e2d('0x48')]));_0x2094ee[_0x1e2d('0x49')]=_0x2094ee['attributes'][_0x1e2d('0x4a')]?_0x2094ee[_0x1e2d('0x49')]:_0x2bf486[_0x1e2d('0x43')];_0x2094ee[_0x1e2d('0x4c')]=qs['sort'](_0x7e5908[_0x1e2d('0x45')]['sort']);_0x2094ee[_0x1e2d('0x4e')]=qs[_0x1e2d('0x46')](_[_0x1e2d('0x4f')](_0x7e5908[_0x1e2d('0x45')],_0x2bf486[_0x1e2d('0x46')]));if(_0x7e5908[_0x1e2d('0x45')]['filter']){_0x2094ee['where']=_['merge'](_0x2094ee[_0x1e2d('0x4e')],{'$or':_[_0x1e2d('0x52')](_0x2094ee[_0x1e2d('0x49')],function(_0x4e225d){var _0x2c89a8={};_0x2c89a8[_0x4e225d]={'$like':'%'+_0x7e5908[_0x1e2d('0x45')]['filter']+'%'};return _0x2c89a8;})});}_0x2094ee=_['merge']({},_0x2094ee,_0x7e5908[_0x1e2d('0x56')]);return _0xeecb90['getAgents'](_0x2094ee);}})['then'](function(_0x5249ff){if(_0x5249ff){_0x5c94de=_0x5249ff[_0x1e2d('0x4a')];if(!_0x7e5908[_0x1e2d('0x45')][_0x1e2d('0x6c')](_0x1e2d('0x4b'))){_0x2094ee[_0x1e2d('0x32')]=qs[_0x1e2d('0x32')](_0x7e5908[_0x1e2d('0x45')][_0x1e2d('0x32')]);_0x2094ee[_0x1e2d('0x31')]=qs['offset'](_0x7e5908[_0x1e2d('0x45')][_0x1e2d('0x31')]);}return _0xeecb90['getAgents'](_0x2094ee);}})[_0x1e2d('0x37')](function(_0x100c69){if(_0x100c69){return _0x100c69?{'count':_0x5c94de,'rows':_0x100c69}:null;}})[_0x1e2d('0x37')](respondWithResult(_0x5cbbe2,null))['catch'](handleError(_0x5cbbe2,null));};
\ No newline at end of file
+var _0xe9eb=['Command','getSnippet','timezone','iftime\x20%s,%s','interval','iftime\x20%s','indexOf','true','[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)','ONLINE','OFFLINE','No\x20timezone','inspect','Interval','Intervals','getProactiveActions','../../config/license/util','virtual','custom','License','increment','all','some','server/files/chat/iframe.js','remote','x-forwarded-for','x-real-ip','connection','remoteAddress','replace','alignment','sequelize','transaction','bulkCreate','findAndCountAll','getApplications','addProactiveActions','chatProactiveAction','ChatProactiveAction','online','false','offlineForm','items','fromKey','getOfflineMessages','ChatOfflineMessage','addAgents','userChatWebsite:save','removeAgents','isArray','userChatWebsite:remove','emit','getAgents','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./chatWebsite.socket','register','client','http','test','request','then','info','request\x20sent','stringify','error','code','ChatWebsite,\x20%s,\x20%s','message','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','UserProfileResource','stack','name','send','Pause','mandatoryDispositionPause','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','map','key','VIRTUAL','field','merge','options','includeAll','include','ChatWebsite','findAll','catch','show','find','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','get','ChatWebsites','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','describe','addDisposition','Disposition','create','findOne','pick','ChatWebsiteId','rows','removeDispositions','addAnswer','CannedAnswer','getAnswers','removeAnswers','ids','addLogo','sitepic','file','filename','addAvatar','agentAvatar','addCustomerAvatar','customerAvatar','join','server/files/images/logos/default_logo.png','getLicense','isNil','existsSync','root','server/files/images/logos/','download','getAvatar','server/files/images/avatars/default_avatar.png','server/files/images/avatars/','getCustomerAvatar','server/files/images/avatars/customer_avatar.png','showCustomerAvatar','getSystemAvatar','server/files/images/avatars/system_avatar.png','systemAvatar','notify','user-agent-parser','setUA','headers','user-agent','getResult','chat','CmContact','Sequelize','ValidationError','no\x20available\x20attributes','difference','createdAt','updatedAt','CompanyId','from\x20is\x20mandatory','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','List','Contacts','DESC','ChatApplication','Applications','account','applications','list','orderBy','priority','asc','ListId','contact','lastName','customerIp','referer','browser','version','unknown','format','%s\x20%s','device','vendor','%s\x20%s\x20%s','type','threadId','externalUrl','ChatInteraction','interaction','spread','firstName','messageId','created','autoclose','close','unmanaged','*,*,*,*','AttachmentId','UserId','User','unshift','agent','waitForTheAssignedAgent','Start','EventManager','offline','from','mapKeyOffline\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','mapKeyOffline','mapKeyOffline\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','findOrCreate','readFileSync','server/files/templates/chatOfflineMessage.ejs','utf8','render','toPairs','offlineMessageBody','MailServerOut','Smtp','service','host','port','secure','authentication','auth','SendMail','sendMail','\x22%s\x22\x20<%s>','forwardOfflineAddress','addInteraction','omit','Contact','fullname','internal','Tag','Tags','color','tag'];(function(_0x2fed93,_0x221aec){var _0x2deaa1=function(_0x249431){while(--_0x249431){_0x2fed93['push'](_0x2fed93['shift']());}};_0x2deaa1(++_0x221aec);}(_0xe9eb,0x155));var _0xbe9e=function(_0x100bc0,_0x30c318){_0x100bc0=_0x100bc0-0x0;var _0x401d5e=_0xe9eb[_0x100bc0];return _0x401d5e;};'use strict';var pdf=require(_0xbe9e('0x0'));var emlformat=require(_0xbe9e('0x1'));var rimraf=require(_0xbe9e('0x2'));var zipdir=require(_0xbe9e('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xbe9e('0x4'));var moment=require(_0xbe9e('0x5'));var BPromise=require(_0xbe9e('0x6'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0xbe9e('0x7'));var csv=require(_0xbe9e('0x8'));var ejs=require(_0xbe9e('0x9'));var fs=require('fs');var _=require(_0xbe9e('0xa'));var squel=require(_0xbe9e('0xb'));var crypto=require(_0xbe9e('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xbe9e('0xd'));var toCsv=require(_0xbe9e('0x8'));var querystring=require(_0xbe9e('0xe'));var Papa=require(_0xbe9e('0xf'));var Redis=require(_0xbe9e('0x10'));var authService=require('../../components/auth/service');var qs=require(_0xbe9e('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')('api');var utils=require(_0xbe9e('0x12'));var config=require(_0xbe9e('0x13'));var db=require(_0xbe9e('0x14'))['db'];config[_0xbe9e('0x15')]=_[_0xbe9e('0x16')](config[_0xbe9e('0x15')],{'host':_0xbe9e('0x17'),'port':0x18eb});var socket=require(_0xbe9e('0x18'))(new Redis(config[_0xbe9e('0x15')]));require(_0xbe9e('0x19'))[_0xbe9e('0x1a')](socket);var jayson=require('jayson/promise');var client=jayson[_0xbe9e('0x1b')][_0xbe9e('0x1c')]({'port':0x232c});var client9002=jayson['client'][_0xbe9e('0x1c')]({'port':0x232a});var client9003=jayson[_0xbe9e('0x1b')]['http']({'port':0x232b});function checkPasswordPattern(_0xe77519,_0x1b2daf,_0x8c1d5c){if(_0x8c1d5c){var _0x1985df=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1985df[_0xbe9e('0x1d')](_0x1b2daf)){return _0xe77519;}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 _0xe77519;}}function respondWithRpcPromise(_0x3bcead,_0x3216ab,_0x2b57a8,_0xc72328){return new BPromise(function(_0x42ce25,_0x381fb0){var _0x2dd042=_0xc72328||client;return _0x2dd042[_0xbe9e('0x1e')](_0x3bcead,_0x2b57a8)[_0xbe9e('0x1f')](function(_0x311b00){logger[_0xbe9e('0x20')]('ChatWebsite,\x20%s,\x20%s',_0x3216ab,_0xbe9e('0x21'));logger['debug']('ChatWebsite,\x20%s,\x20%s,\x20%s',_0x3216ab,_0xbe9e('0x21'),JSON[_0xbe9e('0x22')](_0x311b00));if(_0x311b00[_0xbe9e('0x23')]){if(_0x311b00['error'][_0xbe9e('0x24')]===0x1f4){logger[_0xbe9e('0x23')](_0xbe9e('0x25'),_0x3216ab,_0x311b00['error']['message']);return _0x381fb0(_0x311b00[_0xbe9e('0x23')]['message']);}logger[_0xbe9e('0x23')](_0xbe9e('0x25'),_0x3216ab,_0x311b00['error'][_0xbe9e('0x26')]);return _0x42ce25(_0x311b00[_0xbe9e('0x23')][_0xbe9e('0x26')]);}else{logger['info']('ChatWebsite,\x20%s,\x20%s',_0x3216ab,_0xbe9e('0x21'));_0x42ce25(_0x311b00['result']['message']);}})['catch'](function(_0x2732ed){logger[_0xbe9e('0x23')](_0xbe9e('0x25'),_0x3216ab,_0x2732ed);_0x381fb0(_0x2732ed);});});}function respondWithStatusCode(_0x9751e4,_0x139f78){_0x139f78=_0x139f78||0xcc;return function(_0xe4f411){if(_0xe4f411){return _0x9751e4[_0xbe9e('0x27')](_0x139f78);}return _0x9751e4['status'](_0x139f78)['end']();};}function respondWithResult(_0xa7e3c3,_0x7648e0){_0x7648e0=_0x7648e0||0xc8;return function(_0x56734a){if(_0x56734a){return _0xa7e3c3[_0xbe9e('0x28')](_0x7648e0)[_0xbe9e('0x29')](_0x56734a);}};}function respondWithFilteredResult(_0x107f3c,_0x26e27a){return function(_0x1e75b0){if(_0x1e75b0){var _0x581238=_0x1e75b0[_0xbe9e('0x2a')],_0x2e463d=_0x26e27a[_0xbe9e('0x2b')],_0xc53ab2=_0x26e27a[_0xbe9e('0x2b')]+_0x26e27a[_0xbe9e('0x2c')],_0x5c8a5c;if(_0xc53ab2>=_0x581238){_0xc53ab2=_0x581238;_0x5c8a5c=0xc8;}else{_0x5c8a5c=0xce;}_0x107f3c[_0xbe9e('0x28')](_0x5c8a5c);return _0x107f3c[_0xbe9e('0x2d')](_0xbe9e('0x2e'),_0x2e463d+'-'+_0xc53ab2+'/'+_0x581238)[_0xbe9e('0x29')](_0x1e75b0);}return null;};}function patchUpdates(_0x4e6478){return function(_0x411be7){try{jsonpatch[_0xbe9e('0x2f')](_0x411be7,_0x4e6478,!![]);}catch(_0xd211d4){return BPromise[_0xbe9e('0x30')](_0xd211d4);}return _0x411be7[_0xbe9e('0x31')]();};}function saveUpdates(_0x3635a9,_0x7c9bc8){return function(_0x56d49d){if(_0x56d49d){return _0x56d49d[_0xbe9e('0x32')](_0x3635a9)[_0xbe9e('0x1f')](function(_0x495fa3){return _0x495fa3;});}return null;};}function removeEntity(_0x5f58e2,_0x3254fa){return function(_0x44fc74){if(_0x44fc74){return _0x44fc74[_0xbe9e('0x33')]()[_0xbe9e('0x1f')](function(){var _0x2f89cc=_0x44fc74['get']({'plain':!![]});var _0x4c657c='ChatWebsites';return db[_0xbe9e('0x34')][_0xbe9e('0x33')]({'where':{'type':_0x4c657c,'resourceId':_0x2f89cc['id']}})[_0xbe9e('0x1f')](function(){return _0x44fc74;});})['then'](function(){_0x5f58e2[_0xbe9e('0x28')](0xcc)['end']();});}};}function handleEntityNotFound(_0x79dc7c,_0x116db7){return function(_0x2edb4e){if(!_0x2edb4e){_0x79dc7c[_0xbe9e('0x27')](0x194);}return _0x2edb4e;};}function handleError(_0x3bfc61,_0xff917a){_0xff917a=_0xff917a||0x1f4;return function(_0xb8f09b){logger[_0xbe9e('0x23')](_0xb8f09b[_0xbe9e('0x35')]);if(_0xb8f09b[_0xbe9e('0x36')]){delete _0xb8f09b[_0xbe9e('0x36')];}_0x3bfc61[_0xbe9e('0x28')](_0xff917a)[_0xbe9e('0x37')](_0xb8f09b);};}exports['index']=function(_0x1175ff,_0x285174){var _0x40de41={'include':[{'model':db[_0xbe9e('0x38')],'as':_0xbe9e('0x39')}]},_0x470266={},_0x8bca22={'count':0x0,'rows':[]};var _0x370ead=db['ChatWebsite'][_0xbe9e('0x3a')];_0x470266[_0xbe9e('0x3b')]=_[_0xbe9e('0x3c')](_0x370ead);_0x470266[_0xbe9e('0x3d')]=_[_0xbe9e('0x3c')](_0x1175ff[_0xbe9e('0x3d')]);_0x470266[_0xbe9e('0x3e')]=_['intersection'](_0x470266['model'],_0x470266[_0xbe9e('0x3d')]);_0x40de41[_0xbe9e('0x3f')]=_[_0xbe9e('0x40')](_0x470266[_0xbe9e('0x3b')],qs[_0xbe9e('0x41')](_0x1175ff['query'][_0xbe9e('0x41')]));_0x40de41['attributes']=_0x40de41[_0xbe9e('0x3f')][_0xbe9e('0x42')]?_0x40de41[_0xbe9e('0x3f')]:_0x470266[_0xbe9e('0x3b')];if(!_0x1175ff[_0xbe9e('0x3d')][_0xbe9e('0x43')](_0xbe9e('0x44'))){_0x40de41[_0xbe9e('0x2c')]=qs[_0xbe9e('0x2c')](_0x1175ff[_0xbe9e('0x3d')][_0xbe9e('0x2c')]);_0x40de41['offset']=qs[_0xbe9e('0x2b')](_0x1175ff[_0xbe9e('0x3d')][_0xbe9e('0x2b')]);}_0x40de41[_0xbe9e('0x45')]=qs['sort'](_0x1175ff[_0xbe9e('0x3d')][_0xbe9e('0x46')]);_0x40de41[_0xbe9e('0x47')]=qs[_0xbe9e('0x3e')](_['pick'](_0x1175ff[_0xbe9e('0x3d')],_0x470266['filters']));if(_0x1175ff[_0xbe9e('0x3d')][_0xbe9e('0x48')]){_0x40de41[_0xbe9e('0x47')]=_['merge'](_0x40de41[_0xbe9e('0x47')],{'$or':_[_0xbe9e('0x49')](_0x370ead,function(_0xc90dc3){if(_0xc90dc3['type'][_0xbe9e('0x4a')]!==_0xbe9e('0x4b')){var _0x36660f={};_0x36660f[_0xc90dc3[_0xbe9e('0x4c')]]={'$like':'%'+_0x1175ff[_0xbe9e('0x3d')][_0xbe9e('0x48')]+'%'};return _0x36660f;}})});}_0x40de41=_[_0xbe9e('0x4d')]({},_0x40de41,_0x1175ff[_0xbe9e('0x4e')]);var _0x54e700={'where':_0x40de41[_0xbe9e('0x47')]};return db['ChatWebsite'][_0xbe9e('0x2a')](_0x54e700)[_0xbe9e('0x1f')](function(_0x345156){_0x8bca22[_0xbe9e('0x2a')]=_0x345156;if(_0x1175ff[_0xbe9e('0x3d')][_0xbe9e('0x4f')]){_0x40de41[_0xbe9e('0x50')]=[{'all':!![]}];}return db[_0xbe9e('0x51')][_0xbe9e('0x52')](_0x40de41);})[_0xbe9e('0x1f')](function(_0xbffd25){_0x8bca22['rows']=_0xbffd25;return _0x8bca22;})['then'](respondWithFilteredResult(_0x285174,_0x40de41))[_0xbe9e('0x53')](handleError(_0x285174,null));};exports[_0xbe9e('0x54')]=function(_0xfd112a,_0x42a36c){var _0x27478d={'raw':![],'where':{'id':_0xfd112a['params']['id']},'include':[{'model':db[_0xbe9e('0x38')],'as':_0xbe9e('0x39')}]},_0x451043={};_0x451043[_0xbe9e('0x3b')]=_['keys'](db[_0xbe9e('0x51')][_0xbe9e('0x3a')]);_0x451043['query']=_['keys'](_0xfd112a[_0xbe9e('0x3d')]);_0x451043[_0xbe9e('0x3e')]=_[_0xbe9e('0x40')](_0x451043['model'],_0x451043[_0xbe9e('0x3d')]);_0x27478d['attributes']=_[_0xbe9e('0x40')](_0x451043[_0xbe9e('0x3b')],qs['fields'](_0xfd112a[_0xbe9e('0x3d')]['fields']));_0x27478d[_0xbe9e('0x3f')]=_0x27478d[_0xbe9e('0x3f')][_0xbe9e('0x42')]?_0x27478d[_0xbe9e('0x3f')]:_0x451043[_0xbe9e('0x3b')];if(_0xfd112a[_0xbe9e('0x3d')]['includeAll']){_0x27478d[_0xbe9e('0x50')]=[{'all':!![]}];}_0x27478d=_[_0xbe9e('0x4d')]({},_0x27478d,_0xfd112a[_0xbe9e('0x4e')]);return db[_0xbe9e('0x51')][_0xbe9e('0x55')](_0x27478d)['then'](handleEntityNotFound(_0x42a36c,null))[_0xbe9e('0x1f')](respondWithResult(_0x42a36c,null))[_0xbe9e('0x53')](handleError(_0x42a36c,null));};exports['create']=function(_0x3bb479,_0x5e19fb){return db[_0xbe9e('0x51')]['create'](_0x3bb479[_0xbe9e('0x56')],{})[_0xbe9e('0x1f')](function(_0x2c4779){var _0x5cf9a0=_0x3bb479[_0xbe9e('0x57')]['get']({'plain':!![]});if(!_0x5cf9a0)throw new Error(_0xbe9e('0x58'));if(_0x5cf9a0['role']===_0xbe9e('0x57')){var _0x360283=_0x2c4779[_0xbe9e('0x59')]({'plain':!![]});var _0x4014db=_0xbe9e('0x5a');return db[_0xbe9e('0x5b')][_0xbe9e('0x55')]({'where':{'name':_0x4014db,'userProfileId':_0x5cf9a0[_0xbe9e('0x5c')]},'raw':!![]})[_0xbe9e('0x1f')](function(_0x352494){if(_0x352494&&_0x352494[_0xbe9e('0x5d')]===0x0){return db[_0xbe9e('0x34')]['create']({'name':_0x360283[_0xbe9e('0x36')],'resourceId':_0x360283['id'],'type':_0x352494[_0xbe9e('0x36')],'sectionId':_0x352494['id']},{})[_0xbe9e('0x1f')](function(){return _0x2c4779;});}else{return _0x2c4779;}})[_0xbe9e('0x53')](function(_0x53bf1d){logger[_0xbe9e('0x23')](_0xbe9e('0x5e'),_0x53bf1d);throw _0x53bf1d;});}return _0x2c4779;})['then'](respondWithResult(_0x5e19fb,0xc9))[_0xbe9e('0x53')](handleError(_0x5e19fb,null));};exports['update']=function(_0x52873c,_0x2078b7){if(_0x52873c['body']['id']){delete _0x52873c[_0xbe9e('0x56')]['id'];}return db['ChatWebsite'][_0xbe9e('0x55')]({'where':{'id':_0x52873c[_0xbe9e('0x5f')]['id']},'include':[{'model':db[_0xbe9e('0x38')],'as':'mandatoryDispositionPause'}]})[_0xbe9e('0x1f')](handleEntityNotFound(_0x2078b7,null))[_0xbe9e('0x1f')](saveUpdates(_0x52873c[_0xbe9e('0x56')],null))['then'](respondWithResult(_0x2078b7,null))[_0xbe9e('0x53')](handleError(_0x2078b7,null));};exports[_0xbe9e('0x33')]=function(_0x19525d,_0x4bb0ce){return db[_0xbe9e('0x51')][_0xbe9e('0x55')]({'where':{'id':_0x19525d[_0xbe9e('0x5f')]['id']}})['then'](handleEntityNotFound(_0x4bb0ce,null))[_0xbe9e('0x1f')](removeEntity(_0x4bb0ce,null))[_0xbe9e('0x53')](handleError(_0x4bb0ce,null));};exports['describe']=function(_0x3b8f15,_0x19251c){return db[_0xbe9e('0x51')][_0xbe9e('0x60')]()[_0xbe9e('0x1f')](respondWithResult(_0x19251c,null))['catch'](handleError(_0x19251c,null));};exports[_0xbe9e('0x61')]=function(_0x2a3269,_0x5c333e,_0x2f192e){if(_0x2a3269[_0xbe9e('0x56')]['id']){delete _0x2a3269['body']['id'];}return db['ChatWebsite']['find']({'where':{'id':_0x2a3269['params']['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x5c333e,null))['then'](function(_0x36a031){if(_0x36a031){_0x2a3269[_0xbe9e('0x56')]['ChatWebsiteId']=_0x36a031['id'];return db[_0xbe9e('0x62')][_0xbe9e('0x63')](_0x2a3269[_0xbe9e('0x56')]);}})[_0xbe9e('0x1f')](respondWithResult(_0x5c333e,null))['catch'](handleError(_0x5c333e,null));};exports['getDispositions']=function(_0x1a741c,_0x32e4dc,_0x2a9afe){var _0x4d85c8={'raw':![],'where':{}};var _0x5a239b={};var _0x59357c={'count':0x0,'rows':[]};return db[_0xbe9e('0x51')][_0xbe9e('0x64')]({'where':{'id':_0x1a741c[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x32e4dc,null))[_0xbe9e('0x1f')](function(_0x26e44c){if(_0x26e44c){_0x5a239b['model']=_[_0xbe9e('0x3c')](db['Disposition'][_0xbe9e('0x3a')]);_0x5a239b['query']=_[_0xbe9e('0x3c')](_0x1a741c[_0xbe9e('0x3d')]);_0x5a239b[_0xbe9e('0x3e')]=_[_0xbe9e('0x40')](_0x5a239b[_0xbe9e('0x3b')],_0x5a239b[_0xbe9e('0x3d')]);_0x4d85c8[_0xbe9e('0x3f')]=_['intersection'](_0x5a239b[_0xbe9e('0x3b')],qs[_0xbe9e('0x41')](_0x1a741c[_0xbe9e('0x3d')][_0xbe9e('0x41')]));_0x4d85c8[_0xbe9e('0x3f')]=_0x4d85c8[_0xbe9e('0x3f')][_0xbe9e('0x42')]?_0x4d85c8[_0xbe9e('0x3f')]:_0x5a239b[_0xbe9e('0x3b')];if(!_0x1a741c['query'][_0xbe9e('0x43')](_0xbe9e('0x44'))){_0x4d85c8['limit']=qs['limit'](_0x1a741c['query'][_0xbe9e('0x2c')]);_0x4d85c8[_0xbe9e('0x2b')]=qs[_0xbe9e('0x2b')](_0x1a741c[_0xbe9e('0x3d')][_0xbe9e('0x2b')]);}_0x4d85c8[_0xbe9e('0x45')]=qs[_0xbe9e('0x46')](_0x1a741c[_0xbe9e('0x3d')][_0xbe9e('0x46')]);_0x4d85c8['where']=qs[_0xbe9e('0x3e')](_[_0xbe9e('0x65')](_0x1a741c[_0xbe9e('0x3d')],_0x5a239b['filters']));_0x4d85c8[_0xbe9e('0x47')][_0xbe9e('0x66')]=_0x26e44c['id'];if(_0x1a741c[_0xbe9e('0x3d')][_0xbe9e('0x48')]){_0x4d85c8[_0xbe9e('0x47')]=_[_0xbe9e('0x4d')](_0x4d85c8[_0xbe9e('0x47')],{'$or':_[_0xbe9e('0x49')](_0x4d85c8['attributes'],function(_0xf6cbb9){var _0x3b801c={};_0x3b801c[_0xf6cbb9]={'$like':'%'+_0x1a741c[_0xbe9e('0x3d')][_0xbe9e('0x48')]+'%'};return _0x3b801c;})});}_0x4d85c8=_[_0xbe9e('0x4d')]({},_0x4d85c8,_0x1a741c['options']);return db[_0xbe9e('0x62')][_0xbe9e('0x2a')]({'where':_0x4d85c8['where']})[_0xbe9e('0x1f')](function(_0x1fd1e7){_0x59357c[_0xbe9e('0x2a')]=_0x1fd1e7;if(_0x1a741c[_0xbe9e('0x3d')][_0xbe9e('0x4f')]){_0x4d85c8[_0xbe9e('0x50')]=[{'all':!![]}];}return db[_0xbe9e('0x62')]['findAll'](_0x4d85c8);})[_0xbe9e('0x1f')](function(_0x5624a0){_0x59357c[_0xbe9e('0x67')]=_0x5624a0;return _0x59357c;});}})['then'](respondWithFilteredResult(_0x32e4dc,_0x4d85c8))[_0xbe9e('0x53')](handleError(_0x32e4dc,null));};exports[_0xbe9e('0x68')]=function(_0x28f028,_0x2fadc5,_0x587cc8){return db[_0xbe9e('0x51')][_0xbe9e('0x55')]({'where':{'id':_0x28f028[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x2fadc5,null))[_0xbe9e('0x1f')](function(_0x4dd0c1){if(_0x4dd0c1){return _0x4dd0c1['removeDispositions'](_0x28f028[_0xbe9e('0x3d')]['ids']);}})[_0xbe9e('0x1f')](respondWithStatusCode(_0x2fadc5,null))['catch'](handleError(_0x2fadc5,null));};exports[_0xbe9e('0x69')]=function(_0x14db6c,_0xd8ea57,_0x9fff7c){if(_0x14db6c['body']['id']){delete _0x14db6c[_0xbe9e('0x56')]['id'];}return db[_0xbe9e('0x51')]['find']({'where':{'id':_0x14db6c[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0xd8ea57,null))[_0xbe9e('0x1f')](function(_0x145cf1){if(_0x145cf1){_0x14db6c[_0xbe9e('0x56')][_0xbe9e('0x66')]=_0x145cf1['id'];return db[_0xbe9e('0x6a')][_0xbe9e('0x63')](_0x14db6c[_0xbe9e('0x56')]);}})['then'](respondWithResult(_0xd8ea57,null))[_0xbe9e('0x53')](handleError(_0xd8ea57,null));};exports[_0xbe9e('0x6b')]=function(_0x3d52a2,_0x633608,_0xcee642){var _0x2a8d81={'raw':![],'where':{}};var _0x2f1310={};var _0x28b969={'count':0x0,'rows':[]};return db[_0xbe9e('0x51')]['findOne']({'where':{'id':_0x3d52a2[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x633608,null))[_0xbe9e('0x1f')](function(_0x534653){if(_0x534653){_0x2f1310[_0xbe9e('0x3b')]=_['keys'](db['CannedAnswer']['rawAttributes']);_0x2f1310[_0xbe9e('0x3d')]=_[_0xbe9e('0x3c')](_0x3d52a2[_0xbe9e('0x3d')]);_0x2f1310[_0xbe9e('0x3e')]=_[_0xbe9e('0x40')](_0x2f1310['model'],_0x2f1310['query']);_0x2a8d81[_0xbe9e('0x3f')]=_[_0xbe9e('0x40')](_0x2f1310[_0xbe9e('0x3b')],qs[_0xbe9e('0x41')](_0x3d52a2[_0xbe9e('0x3d')][_0xbe9e('0x41')]));_0x2a8d81['attributes']=_0x2a8d81['attributes'][_0xbe9e('0x42')]?_0x2a8d81['attributes']:_0x2f1310[_0xbe9e('0x3b')];if(!_0x3d52a2[_0xbe9e('0x3d')][_0xbe9e('0x43')](_0xbe9e('0x44'))){_0x2a8d81[_0xbe9e('0x2c')]=qs[_0xbe9e('0x2c')](_0x3d52a2['query'][_0xbe9e('0x2c')]);_0x2a8d81['offset']=qs[_0xbe9e('0x2b')](_0x3d52a2[_0xbe9e('0x3d')][_0xbe9e('0x2b')]);}_0x2a8d81[_0xbe9e('0x45')]=qs[_0xbe9e('0x46')](_0x3d52a2[_0xbe9e('0x3d')][_0xbe9e('0x46')]);_0x2a8d81[_0xbe9e('0x47')]=qs[_0xbe9e('0x3e')](_[_0xbe9e('0x65')](_0x3d52a2['query'],_0x2f1310[_0xbe9e('0x3e')]));_0x2a8d81[_0xbe9e('0x47')][_0xbe9e('0x66')]=_0x534653['id'];if(_0x3d52a2['query'][_0xbe9e('0x48')]){_0x2a8d81[_0xbe9e('0x47')]=_['merge'](_0x2a8d81[_0xbe9e('0x47')],{'$or':_[_0xbe9e('0x49')](_0x2a8d81[_0xbe9e('0x3f')],function(_0x2355ee){var _0x25f638={};_0x25f638[_0x2355ee]={'$like':'%'+_0x3d52a2[_0xbe9e('0x3d')][_0xbe9e('0x48')]+'%'};return _0x25f638;})});}_0x2a8d81=_[_0xbe9e('0x4d')]({},_0x2a8d81,_0x3d52a2[_0xbe9e('0x4e')]);return db[_0xbe9e('0x6a')][_0xbe9e('0x2a')]({'where':_0x2a8d81[_0xbe9e('0x47')]})[_0xbe9e('0x1f')](function(_0x50aa4d){_0x28b969[_0xbe9e('0x2a')]=_0x50aa4d;if(_0x3d52a2[_0xbe9e('0x3d')][_0xbe9e('0x4f')]){_0x2a8d81[_0xbe9e('0x50')]=[{'all':!![]}];}return db['CannedAnswer'][_0xbe9e('0x52')](_0x2a8d81);})[_0xbe9e('0x1f')](function(_0x271580){_0x28b969['rows']=_0x271580;return _0x28b969;});}})[_0xbe9e('0x1f')](respondWithFilteredResult(_0x633608,_0x2a8d81))[_0xbe9e('0x53')](handleError(_0x633608,null));};exports[_0xbe9e('0x6c')]=function(_0x52d385,_0x1eab2e,_0x5ba07c){return db[_0xbe9e('0x51')][_0xbe9e('0x55')]({'where':{'id':_0x52d385['params']['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x1eab2e,null))[_0xbe9e('0x1f')](function(_0x419e6e){if(_0x419e6e){return _0x419e6e[_0xbe9e('0x6c')](_0x52d385[_0xbe9e('0x3d')][_0xbe9e('0x6d')]);}})[_0xbe9e('0x1f')](respondWithStatusCode(_0x1eab2e,null))[_0xbe9e('0x53')](handleError(_0x1eab2e,null));};exports[_0xbe9e('0x6e')]=function(_0x854289,_0x59ef94,_0x1ecf8c){_0x854289[_0xbe9e('0x56')][_0xbe9e('0x6f')]=_0x854289[_0xbe9e('0x70')][_0xbe9e('0x71')];return db[_0xbe9e('0x51')][_0xbe9e('0x55')]({'where':{'id':_0x854289[_0xbe9e('0x5f')]['id']}})['then'](handleEntityNotFound(_0x59ef94,null))[_0xbe9e('0x1f')](saveUpdates(_0x854289[_0xbe9e('0x56')],null))[_0xbe9e('0x1f')](respondWithResult(_0x59ef94,null))[_0xbe9e('0x53')](handleError(_0x59ef94,null));};exports[_0xbe9e('0x72')]=function(_0x3e9203,_0x283379,_0x21d2f5){_0x3e9203[_0xbe9e('0x56')][_0xbe9e('0x73')]=_0x3e9203[_0xbe9e('0x70')][_0xbe9e('0x71')];return db['ChatWebsite']['find']({'where':{'id':_0x3e9203[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x283379,null))[_0xbe9e('0x1f')](saveUpdates(_0x3e9203[_0xbe9e('0x56')],null))[_0xbe9e('0x1f')](respondWithResult(_0x283379,null))[_0xbe9e('0x53')](handleError(_0x283379,null));};exports[_0xbe9e('0x74')]=function(_0x16870b,_0x589be6,_0x31f8e4){_0x16870b['body'][_0xbe9e('0x75')]=_0x16870b[_0xbe9e('0x70')]['filename'];return db['ChatWebsite'][_0xbe9e('0x55')]({'where':{'id':_0x16870b[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x589be6,null))[_0xbe9e('0x1f')](saveUpdates(_0x16870b[_0xbe9e('0x56')],null))[_0xbe9e('0x1f')](respondWithResult(_0x589be6,null))['catch'](handleError(_0x589be6,null));};exports['addSystemAvatar']=function(_0x33d12e,_0x388ed9,_0x865ae6){_0x33d12e['body']['systemAvatar']=_0x33d12e['file']['filename'];return db[_0xbe9e('0x51')][_0xbe9e('0x55')]({'where':{'id':_0x33d12e['params']['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x388ed9,null))[_0xbe9e('0x1f')](saveUpdates(_0x33d12e[_0xbe9e('0x56')],null))[_0xbe9e('0x1f')](respondWithResult(_0x388ed9,null))[_0xbe9e('0x53')](handleError(_0x388ed9,null));};exports['getLogo']=function(_0x235304,_0x178966,_0x33421f){var _0xbafa0c=path[_0xbe9e('0x76')](config['root'],_0xbe9e('0x77'));var _0x4888bf={'where':{'id':_0x235304[_0xbe9e('0x5f')]['id']},'attributes':['id',_0xbe9e('0x6f')],'raw':!![]};var _0x4c6ce0=![];return require('../../config/license/util')[_0xbe9e('0x78')]()[_0xbe9e('0x1f')](function(_0x16d3e1){if(_0x16d3e1){_0x4c6ce0=_0x16d3e1['custom'];}})['then'](function(){return db['ChatWebsite']['find'](_0x4888bf);})[_0xbe9e('0x1f')](handleEntityNotFound(_0x178966,null))['then'](function(_0x50a1f9){if(_0x50a1f9){if(!_[_0xbe9e('0x79')](_0x50a1f9[_0xbe9e('0x6f')])){if(fs[_0xbe9e('0x7a')](path[_0xbe9e('0x76')](config[_0xbe9e('0x7b')],'server/files/images/logos/',_0x50a1f9[_0xbe9e('0x6f')]))&&_0x4c6ce0){_0xbafa0c=path[_0xbe9e('0x76')](config[_0xbe9e('0x7b')],_0xbe9e('0x7c'),_0x50a1f9[_0xbe9e('0x6f')]);}}return _0x178966[_0xbe9e('0x7d')](_0xbafa0c);}})[_0xbe9e('0x53')](handleError(_0x178966,null));};exports[_0xbe9e('0x7e')]=function(_0x21d643,_0x35964a,_0x537504){var _0x5873f7=path[_0xbe9e('0x76')](config[_0xbe9e('0x7b')],_0xbe9e('0x7f'));var _0x3a7187={'where':{'id':_0x21d643['params']['id']},'attributes':['id','agentAvatar'],'raw':!![]};return db[_0xbe9e('0x51')][_0xbe9e('0x55')](_0x3a7187)[_0xbe9e('0x1f')](handleEntityNotFound(_0x35964a,null))[_0xbe9e('0x1f')](function(_0x4ff35e){if(_0x4ff35e){if(!_[_0xbe9e('0x79')](_0x4ff35e[_0xbe9e('0x73')])){if(fs[_0xbe9e('0x7a')](path['join'](config[_0xbe9e('0x7b')],_0xbe9e('0x80'),_0x4ff35e[_0xbe9e('0x73')]))){_0x5873f7=path[_0xbe9e('0x76')](config['root'],_0xbe9e('0x80'),_0x4ff35e['agentAvatar']);}}return _0x35964a[_0xbe9e('0x7d')](_0x5873f7);}})[_0xbe9e('0x53')](handleError(_0x35964a,null));};exports[_0xbe9e('0x81')]=function(_0xd1bc1,_0xe47eba,_0x733847){var _0x380b5e=path[_0xbe9e('0x76')](config[_0xbe9e('0x7b')],_0xbe9e('0x82'));var _0x21a5f5={'where':{'id':_0xd1bc1[_0xbe9e('0x5f')]['id']},'attributes':['id',_0xbe9e('0x75'),'showCustomerAvatar'],'raw':!![]};return db[_0xbe9e('0x51')][_0xbe9e('0x55')](_0x21a5f5)['then'](handleEntityNotFound(_0xe47eba,null))[_0xbe9e('0x1f')](function(_0x264abc){if(_0x264abc){if(!_[_0xbe9e('0x79')](_0x264abc[_0xbe9e('0x75')])){if(fs[_0xbe9e('0x7a')](path[_0xbe9e('0x76')](config[_0xbe9e('0x7b')],'server/files/images/avatars/',_0x264abc[_0xbe9e('0x75')]))&&_0x264abc[_0xbe9e('0x83')]){_0x380b5e=path[_0xbe9e('0x76')](config[_0xbe9e('0x7b')],'server/files/images/avatars/',_0x264abc[_0xbe9e('0x75')]);}}return _0xe47eba[_0xbe9e('0x7d')](_0x380b5e);}})[_0xbe9e('0x53')](handleError(_0xe47eba,null));};exports[_0xbe9e('0x84')]=function(_0x24d612,_0x133af0,_0x3d169a){var _0x557a91=path[_0xbe9e('0x76')](config[_0xbe9e('0x7b')],_0xbe9e('0x85'));var _0x42777c={'where':{'id':_0x24d612[_0xbe9e('0x5f')]['id']},'attributes':['id',_0xbe9e('0x86')],'raw':!![]};return db[_0xbe9e('0x51')]['find'](_0x42777c)[_0xbe9e('0x1f')](handleEntityNotFound(_0x133af0,null))[_0xbe9e('0x1f')](function(_0x29823a){if(_0x29823a){if(!_[_0xbe9e('0x79')](_0x29823a[_0xbe9e('0x86')])){if(fs['existsSync'](path[_0xbe9e('0x76')](config['root'],_0xbe9e('0x80'),_0x29823a[_0xbe9e('0x86')]))){_0x557a91=path[_0xbe9e('0x76')](config[_0xbe9e('0x7b')],'server/files/images/avatars/',_0x29823a[_0xbe9e('0x86')]);}}return _0x133af0['download'](_0x557a91);}})['catch'](handleError(_0x133af0,null));};exports[_0xbe9e('0x87')]=function(_0x1afc6d,_0x2950b6,_0x3baaee){var _0x160451=require(_0xbe9e('0x88'));var _0x28ce76=new _0x160451();var _0x1398e7=_0x28ce76[_0xbe9e('0x89')](_0x1afc6d[_0xbe9e('0x8a')][_0xbe9e('0x8b')])[_0xbe9e('0x8c')]();var _0x33ae53={'body':_0x1afc6d['body'],'channel':_0xbe9e('0x8d')};var _0x3abe63=[];var _0x3afef3=[];var _0x588a96={};var _0x451b8f=![];return db[_0xbe9e('0x8e')][_0xbe9e('0x60')]()[_0xbe9e('0x1f')](function(_0x5dd5f1){if(!_0x5dd5f1){throw new db[(_0xbe9e('0x8f'))][(_0xbe9e('0x90'))](_0xbe9e('0x91'));}_0x3abe63=_[_0xbe9e('0x92')](_[_0xbe9e('0x3c')](_0x5dd5f1),[_0xbe9e('0x93'),_0xbe9e('0x94')]);_0x3afef3=_['difference'](_[_0xbe9e('0x3c')](_0x5dd5f1),['createdAt','updatedAt',_0xbe9e('0x95'),'ListId']);if(_0x1afc6d[_0xbe9e('0x56')]['id']){delete _0x1afc6d[_0xbe9e('0x56')]['id'];}if(_[_0xbe9e('0x79')](_0x1afc6d[_0xbe9e('0x56')]['from'])){throw new db[(_0xbe9e('0x8f'))][(_0xbe9e('0x90'))](_0xbe9e('0x96'));}if(_[_0xbe9e('0x79')](_0x1afc6d['body'][_0xbe9e('0x56')])||_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0x56')]===''){throw new db[(_0xbe9e('0x8f'))][(_0xbe9e('0x90'))](_0xbe9e('0x97'));}if(_[_0xbe9e('0x79')](_0x1afc6d[_0xbe9e('0x56')]['mapKey'])){throw new db[(_0xbe9e('0x8f'))][(_0xbe9e('0x90'))](_0xbe9e('0x98')+_0x3afef3);}if(!_[_0xbe9e('0x99')](_0x3afef3,_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0x9a')])){throw new db['Sequelize']['ValidationError'](_0xbe9e('0x9b')+_0x3afef3);}_0x588a96[_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0x9a')]]=_0x1afc6d[_0xbe9e('0x56')]['from'];})[_0xbe9e('0x1f')](function(){return db[_0xbe9e('0x51')][_0xbe9e('0x55')]({'where':{'id':_0x1afc6d[_0xbe9e('0x5f')]['id']},'include':[{'model':db[_0xbe9e('0x9c')],'as':_0xbe9e('0x9d'),'include':[{'model':db[_0xbe9e('0x8e')],'as':_0xbe9e('0x9e'),'where':_0x588a96,'limit':0x1,'order':[[_0xbe9e('0x94'),_0xbe9e('0x9f')]]}]},{'model':db[_0xbe9e('0xa0')],'as':_0xbe9e('0xa1')}]});})[_0xbe9e('0x1f')](handleEntityNotFound(_0x2950b6,null))[_0xbe9e('0x1f')](function(_0x52d74c){if(_0x52d74c&&_0x52d74c[_0xbe9e('0x9d')]){_0x33ae53[_0xbe9e('0xa2')]=_0x52d74c;_0x33ae53[_0xbe9e('0xa3')]=_0x52d74c[_0xbe9e('0xa1')];_0x33ae53[_0xbe9e('0xa4')]=_0x52d74c[_0xbe9e('0x9d')];_0x33ae53[_0xbe9e('0xa3')]=_[_0xbe9e('0xa5')](_0x33ae53[_0xbe9e('0xa3')],[_0xbe9e('0xa6')],[_0xbe9e('0xa7')]);if(_0x33ae53[_0xbe9e('0xa2')][_0xbe9e('0xa1')]){delete _0x33ae53['account'][_0xbe9e('0xa1')];}if(_0x33ae53[_0xbe9e('0xa2')][_0xbe9e('0x9d')]&&_0x33ae53[_0xbe9e('0xa2')][_0xbe9e('0x9d')][_0xbe9e('0x9e')]['length']){return _0x33ae53['account'][_0xbe9e('0x9d')][_0xbe9e('0x9e')][0x0];}var _0x55672a=_[_0xbe9e('0x16')](_0x1afc6d[_0xbe9e('0x56')],{'firstName':_0x1afc6d['body']['from'],'ListId':_0x52d74c[_0xbe9e('0xa8')]});_0x55672a[_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0x9a')]]=_0x1afc6d['body']['from'];return db[_0xbe9e('0x8e')][_0xbe9e('0x63')](_0x55672a,{'fields':_0x3abe63,'raw':!![]});}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x2950b6,null))[_0xbe9e('0x1f')](function(_0x1168cc){_0x33ae53[_0xbe9e('0xa9')]=_0x1168cc;if(_0x1168cc){var _0x187443={'ContactId':_0x1168cc['id'],'ChatWebsiteId':_0x1afc6d[_0xbe9e('0x5f')]['id'],'from':(_0x1168cc['firstName']||'')+'\x20'+(_0x1168cc[_0xbe9e('0xaa')]||''),'customerIp':_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xab')],'referer':_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xac')],'browserName':_0x1398e7[_0xbe9e('0xad')][_0xbe9e('0x36')]&&_0x1398e7[_0xbe9e('0xad')][_0xbe9e('0xae')]?util['format']('%s\x20%s',_0x1398e7[_0xbe9e('0xad')][_0xbe9e('0x36')],_0x1398e7[_0xbe9e('0xad')][_0xbe9e('0xae')]):'unknown','browserVersion':_0x1398e7[_0xbe9e('0xad')][_0xbe9e('0xae')]||_0xbe9e('0xaf'),'osName':util[_0xbe9e('0xb0')](_0xbe9e('0xb1'),_0x1398e7['os'][_0xbe9e('0x36')],_0x1398e7['os'][_0xbe9e('0xae')]),'osVersion':_0x1398e7['os'][_0xbe9e('0xae')],'deviceModel':_0x1398e7[_0xbe9e('0xb2')][_0xbe9e('0x3b')]&&_0x1398e7['device'][_0xbe9e('0xb3')]?util[_0xbe9e('0xb0')](_0xbe9e('0xb4'),_0x1398e7[_0xbe9e('0xb2')][_0xbe9e('0x3b')],_0x1398e7['device'][_0xbe9e('0xb3')],_0x1398e7['device'][_0xbe9e('0xb5')]):null,'deviceVendor':_0x1398e7['device'][_0xbe9e('0xb3')],'deviceType':_0x1398e7['device'][_0xbe9e('0xb5')],'formData':JSON[_0xbe9e('0x22')](_0x1afc6d[_0xbe9e('0x56')])};var _0xa7077d={'ChatWebsiteId':_0x1afc6d[_0xbe9e('0x5f')]['id'],'closed':![]};if(_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xb6')]){_0xa7077d['threadId']=_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xb6')];return db['ChatInteraction']['find']({'where':_0xa7077d})[_0xbe9e('0x1f')](function(_0x146b71){if(_0x146b71){return[_0x146b71,![]];}_0x187443[_0xbe9e('0xb6')]=_0x1afc6d['body'][_0xbe9e('0xb6')];_0x187443[_0xbe9e('0xb7')]=_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xb7')];return db[_0xbe9e('0xb8')][_0xbe9e('0x63')](_0x187443)[_0xbe9e('0x1f')](function(_0x5597dd){return[_0x5597dd,!![]];});});}_0xa7077d['ContactId']=_0x1168cc['id'];if(_0x1afc6d['body'][_0xbe9e('0xb9')]&&_0x1afc6d['body'][_0xbe9e('0xb9')]['id']){_0xa7077d['id']=_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xb9')]['id'];return db[_0xbe9e('0xb8')]['find']({'where':_0xa7077d})[_0xbe9e('0x1f')](function(_0x3ba9e7){if(_0x3ba9e7){return[_0x3ba9e7,![]];}return db[_0xbe9e('0xb8')][_0xbe9e('0x63')](_0x187443)[_0xbe9e('0x1f')](function(_0x1cd2b2){return[_0x1cd2b2,!![]];});});}return db[_0xbe9e('0xb8')][_0xbe9e('0x63')](_0x187443)[_0xbe9e('0x1f')](function(_0x111f06){return[_0x111f06,!![]];});}})[_0xbe9e('0xba')](function(_0x54b006,_0x1cccad){if(_0x54b006){_0x451b8f=_0x1cccad;if(!_0x1cccad){var _0x34baed={'from':(_0x33ae53[_0xbe9e('0xa9')][_0xbe9e('0xbb')]||'')+'\x20'+(_0x33ae53[_0xbe9e('0xa9')]['lastName']||'')};if(_0x1afc6d[_0xbe9e('0x56')]['threadId']&&_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xbc')]&&_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xb6')]!=_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xbc')]){_0x34baed[_0xbe9e('0xb6')]=_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xbc')];}return _0x54b006[_0xbe9e('0x32')](_0x34baed);}else{return _0x54b006;}}})[_0xbe9e('0x1f')](function(_0x477687){_0x33ae53[_0xbe9e('0xb9')]=_0x477687['get']({'plain':!![]});_0x33ae53['interaction'][_0xbe9e('0xbd')]=_0x451b8f;if(_0x33ae53[_0xbe9e('0xb9')][_0xbe9e('0xbd')]){if(_0x33ae53[_0xbe9e('0xa2')][_0xbe9e('0xbe')]){_0x33ae53[_0xbe9e('0xa3')]['push']({'id':0x0,'priority':_0x33ae53[_0xbe9e('0xa3')]['length']+0x1,'app':_0xbe9e('0xbf'),'appdata':_0xbe9e('0xc0'),'interval':_0xbe9e('0xc1')});}}return db['ChatMessage'][_0xbe9e('0x63')]({'body':_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0x56')],'ChatWebsiteId':_0x1afc6d[_0xbe9e('0x5f')]['id'],'ChatInteractionId':_0x477687['id'],'direction':'in','ContactId':_0x33ae53['contact']['id'],'AttachmentId':_0x1afc6d[_0xbe9e('0x56')][_0xbe9e('0xc2')]});})[_0xbe9e('0x1f')](function(_0xd168fd){_0x33ae53['message']=_0xd168fd;if(_0x33ae53['interaction'][_0xbe9e('0xc3')]){return db[_0xbe9e('0xc4')]['find']({'attributes':['id',_0xbe9e('0x36')],'where':{'id':_0x33ae53[_0xbe9e('0xb9')][_0xbe9e('0xc3')]}})[_0xbe9e('0x1f')](function(_0x3c15f8){if(_0x3c15f8){_0x33ae53[_0xbe9e('0xa3')][_0xbe9e('0xc5')]({'id':0x0,'priority':0x0,'app':_0xbe9e('0xc6'),'appdata':_0x3c15f8[_0xbe9e('0x36')]+','+(_0x33ae53['account'][_0xbe9e('0xc7')]||0xa),'interval':_0xbe9e('0xc1')});_0x33ae53['forcedOwnership']=!![];}return respondWithRpcPromise(_0xbe9e('0xc8'),'startRouting',_0x33ae53);});}return respondWithRpcPromise('Start','startRouting',_0x33ae53);})[_0xbe9e('0x1f')](function(_0x39c0f0){respondWithRpcPromise('EventManager',_0xbe9e('0xc9'),{'event':_0xbe9e('0x87'),'message':_0x39c0f0},client9002);return _0x39c0f0;})[_0xbe9e('0x1f')](respondWithResult(_0x2950b6,null))[_0xbe9e('0x53')](handleError(_0x2950b6,null));};exports[_0xbe9e('0xca')]=function(_0x5c74b3,_0x58f2b9,_0x57c78f){var _0x27f5f3,_0x4ed567,_0x2d1930;var _0x6f6161=[];var _0x1d7e32=[];var _0x4be694={};return db['CmContact']['describe']()[_0xbe9e('0x1f')](function(_0x505cb2){if(!_0x505cb2){throw new db[(_0xbe9e('0x8f'))][(_0xbe9e('0x90'))](_0xbe9e('0x91'));}_0x1d7e32=_['difference'](_['keys'](_0x505cb2),[_0xbe9e('0x93'),_0xbe9e('0x94')]);_0x6f6161=_[_0xbe9e('0x92')](_[_0xbe9e('0x3c')](_0x505cb2),[_0xbe9e('0x93'),_0xbe9e('0x94'),_0xbe9e('0x95'),_0xbe9e('0xa8')]);if(_0x5c74b3[_0xbe9e('0x56')]['id']){delete _0x5c74b3[_0xbe9e('0x56')]['id'];}if(_[_0xbe9e('0x79')](_0x5c74b3[_0xbe9e('0x56')][_0xbe9e('0xcb')])){throw _0x58f2b9[_0xbe9e('0x28')](0x1f4)[_0xbe9e('0x37')](new db['Sequelize'][(_0xbe9e('0x90'))](_0xbe9e('0x96')));}if(_['isNil'](_0x5c74b3[_0xbe9e('0x56')][_0xbe9e('0x56')])||_0x5c74b3[_0xbe9e('0x56')]['body']===''){throw _0x58f2b9['status'](0x1f4)[_0xbe9e('0x37')](new db['Sequelize'][(_0xbe9e('0x90'))](_0xbe9e('0x97')));}if(_[_0xbe9e('0x79')](_0x5c74b3[_0xbe9e('0x56')]['mapKeyOffline'])){throw _0x58f2b9[_0xbe9e('0x28')](0x1f4)[_0xbe9e('0x37')](new db[(_0xbe9e('0x8f'))][(_0xbe9e('0x90'))](_0xbe9e('0xcc')+_0x6f6161));}if(!_[_0xbe9e('0x99')](_0x6f6161,_0x5c74b3[_0xbe9e('0x56')][_0xbe9e('0xcd')])){throw _0x58f2b9[_0xbe9e('0x28')](0x1f4)[_0xbe9e('0x37')](new db['Sequelize'][(_0xbe9e('0x90'))](_0xbe9e('0xce')+_0x6f6161));}_0x4be694[_0x5c74b3[_0xbe9e('0x56')][_0xbe9e('0xcd')]]=_0x5c74b3[_0xbe9e('0x56')][_0xbe9e('0xcb')];})['then'](function(){return db['ChatWebsite'][_0xbe9e('0x55')]({'where':{'id':_0x5c74b3[_0xbe9e('0x5f')]['id']},'include':[{'model':db['CmList'],'as':_0xbe9e('0x9d')}]});})[_0xbe9e('0x1f')](handleEntityNotFound(_0x58f2b9,null))[_0xbe9e('0x1f')](function(_0x345413){if(_0x345413&&_0x345413[_0xbe9e('0x9d')]){_0x4ed567=_0x345413;var _0x5cbc25=_['defaults'](_0x5c74b3[_0xbe9e('0x56')],{'firstName':_0x5c74b3[_0xbe9e('0x56')][_0xbe9e('0xcb')],'phone':_0x5c74b3[_0xbe9e('0x56')]['from'],'ListId':_0x345413[_0xbe9e('0xa8')]});_0x5cbc25[_0x5c74b3[_0xbe9e('0x56')]['mapKeyOffline']]=_0x5c74b3['body'][_0xbe9e('0xcb')];return db['CmContact'][_0xbe9e('0xcf')]({'where':_0x4be694,'defaults':_0x5cbc25});}})[_0xbe9e('0xba')](function(_0x5a64bb){if(_0x5a64bb){_0x2d1930=_0x5a64bb;var _0x311e59=fs[_0xbe9e('0xd0')](path[_0xbe9e('0x76')](config['root'],_0xbe9e('0xd1')),_0xbe9e('0xd2'));var _0x3b64e9=ejs[_0xbe9e('0xd3')](_0x311e59,{'body':_[_0xbe9e('0xd4')](_0x5c74b3[_0xbe9e('0x56')][_0xbe9e('0x56')]),'bodyTitle':_0x4ed567[_0xbe9e('0xd5')]});return db['ChatOfflineMessage'][_0xbe9e('0x63')]({'body':_0x3b64e9,'ContactId':_0x5a64bb['id'],'ChatWebsiteId':_0x4ed567['id']});}})[_0xbe9e('0x1f')](function(_0x557171){if(_0x557171){_0x27f5f3=_0x557171;return db['MailAccount'][_0xbe9e('0x64')]({'where':{'service':!![]},'include':[{'model':db[_0xbe9e('0xd6')],'as':_0xbe9e('0xd7'),'raw':!![]}]});}})[_0xbe9e('0x1f')](function(_0xc7c877){if(_0xc7c877&&_0xc7c877[_0xbe9e('0xd7')]&&_0x4ed567['forwardOfflineAddress']){var _0x1d2db2={'tls':{'rejectUnauthorized':![]}};if(_0xc7c877[_0xbe9e('0xd7')]['service']){_0x1d2db2['service']=_0xc7c877[_0xbe9e('0xd7')][_0xbe9e('0xd8')];}else{_0x1d2db2[_0xbe9e('0xd9')]=_0xc7c877[_0xbe9e('0xd7')][_0xbe9e('0xd9')];_0x1d2db2[_0xbe9e('0xda')]=_0xc7c877[_0xbe9e('0xd7')][_0xbe9e('0xda')];_0x1d2db2[_0xbe9e('0xdb')]=_0xc7c877['Smtp'][_0xbe9e('0xdb')];}if(_0xc7c877[_0xbe9e('0xd7')][_0xbe9e('0xdc')]){_0x1d2db2[_0xbe9e('0xdd')]={'user':_0xc7c877[_0xbe9e('0xd7')][_0xbe9e('0x57')],'pass':_0xc7c877[_0xbe9e('0xd7')]['pass']};}return respondWithRpcPromise(_0xbe9e('0xde'),_0xbe9e('0xdf'),{'account':_0x1d2db2,'message':{'from':util[_0xbe9e('0xb0')](_0xbe9e('0xe0'),_0xc7c877[_0xbe9e('0x36')],_0xc7c877['email']||_0xc7c877[_0xbe9e('0xd7')]['user']),'to':_0x4ed567[_0xbe9e('0xe1')],'subject':_0x4ed567['offlineMessageSubject'],'text':_0x27f5f3['body']}},client9003)[_0xbe9e('0x1f')](function(){return _0x27f5f3;})['catch'](function(_0x3b9030){console[_0xbe9e('0x23')](_0x3b9030);});}})['then'](function(){if(_0x27f5f3){return _0x27f5f3;}})[_0xbe9e('0x1f')](respondWithResult(_0x58f2b9,null))[_0xbe9e('0x53')](handleError(_0x58f2b9,null));};exports[_0xbe9e('0xe2')]=function(_0x5a3cf4,_0xcc90e3,_0x11ffb5){return db[_0xbe9e('0xb8')][_0xbe9e('0x55')]({'where':{'id':_0x5a3cf4[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0xcc90e3,null))[_0xbe9e('0x1f')](function(_0x22151d){if(_0x22151d){return _0x22151d[_0xbe9e('0xe2')](_0x5a3cf4['body']['ids'],_[_0xbe9e('0xe3')](_0x5a3cf4[_0xbe9e('0x56')],[_0xbe9e('0x6d'),'id'])||{});}})[_0xbe9e('0x1f')](respondWithResult(_0xcc90e3,null))['catch'](handleError(_0xcc90e3,null));};exports['getInteractions']=function(_0x480cc3,_0x28911f,_0x33883c){var _0x4f3c49={'raw':![],'where':{}};var _0x14d697={};var _0x30622a={'count':0x0,'rows':[]};return db[_0xbe9e('0x51')]['findOne']({'where':{'id':_0x480cc3[_0xbe9e('0x5f')]['id']}})['then'](handleEntityNotFound(_0x28911f,null))[_0xbe9e('0x1f')](function(_0x50e703){if(_0x50e703){_0x14d697['model']=_[_0xbe9e('0x3c')](db['ChatInteraction'][_0xbe9e('0x3a')]);_0x14d697['query']=_[_0xbe9e('0x3c')](_0x480cc3['query']);_0x14d697[_0xbe9e('0x3e')]=_[_0xbe9e('0x40')](_0x14d697['model'],_0x14d697['query']);_0x4f3c49['attributes']=_[_0xbe9e('0x40')](_0x14d697[_0xbe9e('0x3b')],qs[_0xbe9e('0x41')](_0x480cc3[_0xbe9e('0x3d')][_0xbe9e('0x41')]));_0x4f3c49[_0xbe9e('0x3f')]=_0x4f3c49[_0xbe9e('0x3f')]['length']?_0x4f3c49[_0xbe9e('0x3f')]:_0x14d697['model'];if(!_0x480cc3['query']['hasOwnProperty']('nolimit')){_0x4f3c49['limit']=qs[_0xbe9e('0x2c')](_0x480cc3[_0xbe9e('0x3d')]['limit']);_0x4f3c49[_0xbe9e('0x2b')]=qs[_0xbe9e('0x2b')](_0x480cc3['query']['offset']);}_0x4f3c49[_0xbe9e('0x45')]=qs[_0xbe9e('0x46')](_0x480cc3[_0xbe9e('0x3d')][_0xbe9e('0x46')]);_0x4f3c49[_0xbe9e('0x47')]=qs['filters'](_[_0xbe9e('0x65')](_0x480cc3[_0xbe9e('0x3d')],_0x14d697[_0xbe9e('0x3e')]));_0x4f3c49[_0xbe9e('0x47')][_0xbe9e('0x66')]=_0x50e703['id'];if(_0x480cc3[_0xbe9e('0x3d')][_0xbe9e('0x48')]){_0x4f3c49['where']=_[_0xbe9e('0x4d')](_0x4f3c49[_0xbe9e('0x47')],{'$or':_[_0xbe9e('0x49')](_0x4f3c49[_0xbe9e('0x3f')],function(_0x3641a2){var _0x4cad95={};_0x4cad95[_0x3641a2]={'$like':'%'+_0x480cc3[_0xbe9e('0x3d')][_0xbe9e('0x48')]+'%'};return _0x4cad95;})});}_0x4f3c49=_[_0xbe9e('0x4d')]({},_0x4f3c49,_0x480cc3[_0xbe9e('0x4e')]);return db[_0xbe9e('0xb8')][_0xbe9e('0x2a')]({'where':_0x4f3c49[_0xbe9e('0x47')]})[_0xbe9e('0x1f')](function(_0x1694d8){_0x30622a[_0xbe9e('0x2a')]=_0x1694d8;if(_0x480cc3[_0xbe9e('0x3d')][_0xbe9e('0x4f')]){_0x4f3c49[_0xbe9e('0x50')]=[{'model':db[_0xbe9e('0x8e')],'as':_0xbe9e('0xe4'),'required':![]},{'model':db['User'],'as':'Owner','attributes':['name',_0xbe9e('0xe5'),_0xbe9e('0xe6')],'required':![]},{'model':db[_0xbe9e('0xe7')],'as':_0xbe9e('0xe8'),'attributes':['id','name',_0xbe9e('0xe9')],'where':_0x480cc3[_0xbe9e('0x3d')][_0xbe9e('0xea')]?{'id':_0x480cc3[_0xbe9e('0x3d')][_0xbe9e('0xea')]}:undefined,'required':_0x480cc3[_0xbe9e('0x3d')][_0xbe9e('0xea')]?!![]:![]}];}return db[_0xbe9e('0xb8')]['findAll'](_0x4f3c49);})[_0xbe9e('0x1f')](function(_0x579b85){_0x30622a[_0xbe9e('0x67')]=_0x579b85;return _0x30622a;});}})[_0xbe9e('0x1f')](respondWithFilteredResult(_0x28911f,_0x4f3c49))[_0xbe9e('0x53')](handleError(_0x28911f,null));};function iftimePromise(_0x27dc78,_0x39bdf4){return respondWithRpcPromise(_0xbe9e('0xeb'),_0xbe9e('0xec'),{'command':_0x39bdf4[_0xbe9e('0xed')]?util[_0xbe9e('0xb0')](_0xbe9e('0xee'),_0x27dc78[_0xbe9e('0xef')],_0x39bdf4['timezone']):util[_0xbe9e('0xb0')](_0xbe9e('0xf0'),_0x27dc78[_0xbe9e('0xef')])},client9002)[_0xbe9e('0x1f')](function(_0x33e33e){var _0x27570c=_0x33e33e&&_0x33e33e[_0xbe9e('0xf1')](_0xbe9e('0xf2'))>=0x0?!![]:![];logger['info'](_0xbe9e('0xf3'),_0x39bdf4['id'],_0x27dc78['id'],_0x27dc78['interval'],_0x27570c?_0xbe9e('0xf4'):_0xbe9e('0xf5'),_0x39bdf4[_0xbe9e('0xed')]?_0x39bdf4[_0xbe9e('0xed')]:_0xbe9e('0xf6'));return _0x27570c;})[_0xbe9e('0x53')](function(_0x303ed4){logger[_0xbe9e('0x23')](_0xbe9e('0xf3'),_0x39bdf4['id'],_0x27dc78['id'],_0x27dc78[_0xbe9e('0xef')],util[_0xbe9e('0xf7')](_0x303ed4,{'showHidden':![],'depth':null}),_0x39bdf4[_0xbe9e('0xed')]?_0x39bdf4[_0xbe9e('0xed')]:_0xbe9e('0xf6'));return![];});}exports[_0xbe9e('0xec')]=function(_0x3849c3,_0x1b9f6f,_0x537d56){var _0x11c7f0=0x0;var _0x4423b9=0x0;var _0x4e23b8=![];var _0x107087;var _0x5236bf;return db[_0xbe9e('0x51')][_0xbe9e('0x55')]({'where':{'id':_0x3849c3['params']['id']},'include':[{'model':db['Interval'],'as':'Interval','include':[{'model':db[_0xbe9e('0xf8')],'as':_0xbe9e('0xf9'),'attributes':['id',_0xbe9e('0xef')],'raw':!![]}]}]})[_0xbe9e('0x1f')](handleEntityNotFound(_0x1b9f6f,null))[_0xbe9e('0x1f')](function(_0x2352d0){if(_0x2352d0){_0x107087=_0x2352d0;return _0x2352d0[_0xbe9e('0xfa')]({'raw':!![]});}})[_0xbe9e('0x1f')](function(_0x3df54b){if(_0x107087){if(_0x3df54b){_0x5236bf=_0x3df54b;}}return require(_0xbe9e('0xfb'))[_0xbe9e('0x78')]();})['then'](function(_0x33cf16){if(_0x33cf16){_0x4423b9=_0x33cf16[_0xbe9e('0xfc')];_0x4e23b8=_0x33cf16[_0xbe9e('0xfd')];}})['then'](function(){return db[_0xbe9e('0xb8')][_0xbe9e('0x2a')]({'where':{'closed':![]}});})[_0xbe9e('0x1f')](function(_0x4f2a12){_0x11c7f0=_0x4f2a12;if(_0x4423b9&&_0x4f2a12>_0x4423b9){return db[_0xbe9e('0xfe')][_0xbe9e('0x64')]({'where':{'id':0x1}})[_0xbe9e('0x1f')](function(_0x345201){if(_0x345201){_0x345201[_0xbe9e('0xff')]('chatLicenseExceeded');}});}})[_0xbe9e('0x1f')](function(){if(_0x107087[_0xbe9e('0xf8')]&&_0x107087[_0xbe9e('0xf8')][_0xbe9e('0xf9')]){var _0x56872a=[];for(var _0x45d47c=0x0;_0x45d47c<_0x107087['Interval']['Intervals'][_0xbe9e('0x42')];_0x45d47c++){var _0x3820e0=_0x107087[_0xbe9e('0xf8')]['Intervals'][_0x45d47c][_0xbe9e('0x59')]({'plain':!![]});_0x56872a['push'](iftimePromise(_0x3820e0,_0x107087));}return BPromise[_0xbe9e('0x100')](_0x56872a)['then'](function(_0x2f5a37){return _[_0xbe9e('0x101')](_0x2f5a37);});}else{return!![];}})[_0xbe9e('0x1f')](function(_0x52426a){var _0xf6dda4=fs[_0xbe9e('0xd0')](path[_0xbe9e('0x76')](config[_0xbe9e('0x7b')],_0xbe9e('0x102')),_0xbe9e('0xd2'));var _0x3e56b0={'remote':_0x107087[_0xbe9e('0x103')],'query':querystring[_0xbe9e('0x22')](_[_0xbe9e('0x4d')](_0x107087['get']({'plain':!![]}),{'customerIp':_0x3849c3['headers'][_0xbe9e('0x104')]||_0x3849c3[_0xbe9e('0x8a')][_0xbe9e('0x105')]||_0x3849c3[_0xbe9e('0x106')][_0xbe9e('0x107')]||_0x3849c3['ip'],'referer':_0x3849c3[_0xbe9e('0x8a')][_0xbe9e('0xac')],'openedInteractions':_0x11c7f0,'maxInteractions':_0x4423b9,'virtual':_0x4e23b8['virtual'],'online':_0x52426a,'custom':_0x4e23b8}))[_0xbe9e('0x108')](/'/g,'\x5c\x27')};_0x1b9f6f[_0xbe9e('0x37')](ejs['render'](Mustache[_0xbe9e('0xd3')](_0xf6dda4,_0x3e56b0),{'proactiveActions':_0x5236bf,'alignment':_0x107087[_0xbe9e('0x109')],'verticalAlignment':_0x107087['verticalAlignment']}));})[_0xbe9e('0x53')](handleError(_0x1b9f6f,null));};exports['addApplications']=function(_0x4c59f9,_0x5accd1,_0x5a4a22){return db['ChatWebsite'][_0xbe9e('0x64')]({'where':{'id':_0x4c59f9[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x5accd1,null))[_0xbe9e('0x1f')](function(_0x35fc76){if(_0x35fc76){return db[_0xbe9e('0x10a')][_0xbe9e('0x10b')](function(_0x1bc110){return db[_0xbe9e('0xa0')][_0xbe9e('0x33')]({'where':{'ChatWebsiteId':_0x4c59f9[_0xbe9e('0x5f')]['id']},'transaction':_0x1bc110})[_0xbe9e('0x1f')](function(_0x41e180){var _0x35aa98=_[_0xbe9e('0x49')](_0x4c59f9[_0xbe9e('0x56')],function(_0x5714b3){_0x5714b3['ChatWebsiteId']=_0x4c59f9[_0xbe9e('0x5f')]['id'];return _0x5714b3;});return db['ChatApplication'][_0xbe9e('0x10c')](_0x35aa98,{'transaction':_0x1bc110});});})[_0xbe9e('0x1f')](function(){return db[_0xbe9e('0xa0')][_0xbe9e('0x10d')]({'where':{'ChatWebsiteId':_0x4c59f9[_0xbe9e('0x5f')]['id']},'order':_0xbe9e('0xa6')});});}})['then'](respondWithResult(_0x5accd1,null))[_0xbe9e('0x53')](handleError(_0x5accd1,null));};exports['getApplications']=function(_0x1a7f9e,_0x5a078a,_0x465a2e){var _0x3d8c55={};var _0xbb6d3a={};var _0x1bb607;var _0x5f01ae;return db[_0xbe9e('0x51')]['findOne']({'where':{'id':_0x1a7f9e[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x5a078a,null))['then'](function(_0x2ad92e){if(_0x2ad92e){_0x1bb607=_0x2ad92e;_0xbb6d3a['model']=_[_0xbe9e('0x3c')](db[_0xbe9e('0xa0')][_0xbe9e('0x3a')]);_0xbb6d3a[_0xbe9e('0x3d')]=_[_0xbe9e('0x3c')](_0x1a7f9e[_0xbe9e('0x3d')]);_0xbb6d3a[_0xbe9e('0x3e')]=_[_0xbe9e('0x40')](_0xbb6d3a['model'],_0xbb6d3a[_0xbe9e('0x3d')]);_0x3d8c55['attributes']=_['intersection'](_0xbb6d3a['model'],qs[_0xbe9e('0x41')](_0x1a7f9e[_0xbe9e('0x3d')][_0xbe9e('0x41')]));_0x3d8c55[_0xbe9e('0x3f')]=_0x3d8c55[_0xbe9e('0x3f')][_0xbe9e('0x42')]?_0x3d8c55[_0xbe9e('0x3f')]:_0xbb6d3a[_0xbe9e('0x3b')];_0x3d8c55[_0xbe9e('0x45')]=qs[_0xbe9e('0x46')](_0x1a7f9e['query'][_0xbe9e('0x46')]);_0x3d8c55[_0xbe9e('0x47')]=qs[_0xbe9e('0x3e')](_[_0xbe9e('0x65')](_0x1a7f9e[_0xbe9e('0x3d')],_0xbb6d3a[_0xbe9e('0x3e')]));if(_0x1a7f9e[_0xbe9e('0x3d')][_0xbe9e('0x48')]){_0x3d8c55['where']=_[_0xbe9e('0x4d')](_0x3d8c55[_0xbe9e('0x47')],{'$or':_[_0xbe9e('0x49')](_0x3d8c55['attributes'],function(_0x441aff){var _0x3d7f05={};_0x3d7f05[_0x441aff]={'$like':'%'+_0x1a7f9e[_0xbe9e('0x3d')][_0xbe9e('0x48')]+'%'};return _0x3d7f05;})});}_0x3d8c55=_[_0xbe9e('0x4d')]({},_0x3d8c55,_0x1a7f9e[_0xbe9e('0x4e')]);return _0x1bb607[_0xbe9e('0x10e')](_0x3d8c55);}})[_0xbe9e('0x1f')](function(_0x399c3e){if(_0x399c3e){_0x5f01ae=_0x399c3e[_0xbe9e('0x42')];if(!_0x1a7f9e[_0xbe9e('0x3d')][_0xbe9e('0x43')](_0xbe9e('0x44'))){_0x3d8c55[_0xbe9e('0x2c')]=qs[_0xbe9e('0x2c')](_0x1a7f9e[_0xbe9e('0x3d')][_0xbe9e('0x2c')]);_0x3d8c55[_0xbe9e('0x2b')]=qs[_0xbe9e('0x2b')](_0x1a7f9e[_0xbe9e('0x3d')][_0xbe9e('0x2b')]);}return _0x1bb607['getApplications'](_0x3d8c55);}})[_0xbe9e('0x1f')](function(_0x302129){if(_0x302129){return _0x302129?{'count':_0x5f01ae,'rows':_0x302129}:null;}})[_0xbe9e('0x1f')](respondWithResult(_0x5a078a,null))[_0xbe9e('0x53')](handleError(_0x5a078a,null));};exports[_0xbe9e('0x10f')]=function(_0x12a06b,_0x4c142a,_0x58d3e9){return db[_0xbe9e('0x110')][_0xbe9e('0x55')]({'where':{'id':_0x12a06b[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x4c142a,null))[_0xbe9e('0x1f')](function(_0x3f4107){if(_0x3f4107){return _0x3f4107[_0xbe9e('0x10f')](_0x12a06b[_0xbe9e('0x56')][_0xbe9e('0x6d')],_[_0xbe9e('0xe3')](_0x12a06b[_0xbe9e('0x56')],[_0xbe9e('0x6d'),'id'])||{});}})['then'](respondWithResult(_0x4c142a,null))[_0xbe9e('0x53')](handleError(_0x4c142a,null));};exports[_0xbe9e('0xfa')]=function(_0x2d9ee7,_0x4c98dd,_0xbb96f3){var _0x49189d={};var _0x3e868d={};var _0x2d16d4;var _0x35f17a;return db[_0xbe9e('0x51')][_0xbe9e('0x64')]({'where':{'id':_0x2d9ee7[_0xbe9e('0x5f')]['id']}})['then'](handleEntityNotFound(_0x4c98dd,null))[_0xbe9e('0x1f')](function(_0x3ef8e3){if(_0x3ef8e3){_0x2d16d4=_0x3ef8e3;_0x3e868d[_0xbe9e('0x3b')]=_[_0xbe9e('0x3c')](db[_0xbe9e('0x111')][_0xbe9e('0x3a')]);_0x3e868d[_0xbe9e('0x3d')]=_[_0xbe9e('0x3c')](_0x2d9ee7['query']);_0x3e868d[_0xbe9e('0x3e')]=_[_0xbe9e('0x40')](_0x3e868d[_0xbe9e('0x3b')],_0x3e868d[_0xbe9e('0x3d')]);_0x49189d[_0xbe9e('0x3f')]=_[_0xbe9e('0x40')](_0x3e868d[_0xbe9e('0x3b')],qs[_0xbe9e('0x41')](_0x2d9ee7[_0xbe9e('0x3d')][_0xbe9e('0x41')]));_0x49189d[_0xbe9e('0x3f')]=_0x49189d['attributes']['length']?_0x49189d[_0xbe9e('0x3f')]:_0x3e868d[_0xbe9e('0x3b')];_0x49189d[_0xbe9e('0x45')]=qs[_0xbe9e('0x46')](_0x2d9ee7[_0xbe9e('0x3d')][_0xbe9e('0x46')]);_0x49189d[_0xbe9e('0x47')]=qs[_0xbe9e('0x3e')](_['pick'](_0x2d9ee7[_0xbe9e('0x3d')],_0x3e868d[_0xbe9e('0x3e')]));if(_0x2d9ee7[_0xbe9e('0x3d')][_0xbe9e('0x48')]){_0x49189d[_0xbe9e('0x47')]=_[_0xbe9e('0x4d')](_0x49189d[_0xbe9e('0x47')],{'$or':_[_0xbe9e('0x49')](_0x49189d[_0xbe9e('0x3f')],function(_0x2a429a){var _0x42c9d9={};_0x42c9d9[_0x2a429a]={'$like':'%'+_0x2d9ee7['query'][_0xbe9e('0x48')]+'%'};return _0x42c9d9;})});}_0x49189d=_[_0xbe9e('0x4d')]({},_0x49189d,_0x2d9ee7[_0xbe9e('0x4e')]);return _0x2d16d4[_0xbe9e('0xfa')](_0x49189d);}})['then'](function(_0x2b7cbb){if(_0x2b7cbb){_0x35f17a=_0x2b7cbb['length'];if(!_0x2d9ee7[_0xbe9e('0x3d')][_0xbe9e('0x43')](_0xbe9e('0x44'))){_0x49189d['limit']=qs['limit'](_0x2d9ee7[_0xbe9e('0x3d')][_0xbe9e('0x2c')]);_0x49189d[_0xbe9e('0x2b')]=qs[_0xbe9e('0x2b')](_0x2d9ee7[_0xbe9e('0x3d')][_0xbe9e('0x2b')]);}return _0x2d16d4[_0xbe9e('0xfa')](_0x49189d);}})[_0xbe9e('0x1f')](function(_0x3ec3f0){if(_0x3ec3f0){return _0x3ec3f0?{'count':_0x35f17a,'rows':_0x3ec3f0}:null;}})['then'](respondWithResult(_0x4c98dd,null))[_0xbe9e('0x53')](handleError(_0x4c98dd,null));};exports['getFields']=function(_0x27e196,_0x31ae1b,_0x1d03a6){var _0x1f3cca=_0x27e196[_0xbe9e('0x3d')][_0xbe9e('0x112')]===_0xbe9e('0x113')?_0xbe9e('0x114'):'onlineForm';return db[_0xbe9e('0x51')]['find']({'attributes':['id',_0x1f3cca],'where':{'id':_0x27e196[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x31ae1b,null))[_0xbe9e('0x1f')](function(_0x43e088){if(_0x43e088){var _0x4dd748=_0x43e088[_0x1f3cca];var _0x4abd49=_0x4dd748&&_0x4dd748[_0xbe9e('0x115')]?_0x4dd748[_0xbe9e('0x115')]:[];_0x31ae1b[_0xbe9e('0x37')]({'fromKey':_['isNil'](_0x4dd748[_0xbe9e('0x116')])?undefined:_0x4dd748['fromKey'],'count':_0x4abd49[_0xbe9e('0x42')],'rows':_0x4abd49});}})[_0xbe9e('0x53')](handleError(_0x31ae1b,null));};exports[_0xbe9e('0x117')]=function(_0x35eb7b,_0x59de04,_0x2885ac){var _0x22f89c={'raw':!![],'where':{}};var _0x20ed4d={};var _0xb6316d={'count':0x0,'rows':[]};return db['ChatWebsite'][_0xbe9e('0x64')]({'where':{'id':_0x35eb7b[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x59de04,null))[_0xbe9e('0x1f')](function(_0x2d8d6d){if(_0x2d8d6d){_0x20ed4d['model']=_['keys'](db['ChatOfflineMessage'][_0xbe9e('0x3a')]);_0x20ed4d[_0xbe9e('0x3d')]=_[_0xbe9e('0x3c')](_0x35eb7b[_0xbe9e('0x3d')]);_0x20ed4d[_0xbe9e('0x3e')]=_[_0xbe9e('0x40')](_0x20ed4d['model'],_0x20ed4d[_0xbe9e('0x3d')]);_0x22f89c[_0xbe9e('0x3f')]=_[_0xbe9e('0x40')](_0x20ed4d['model'],qs['fields'](_0x35eb7b[_0xbe9e('0x3d')][_0xbe9e('0x41')]));_0x22f89c[_0xbe9e('0x3f')]=_0x22f89c[_0xbe9e('0x3f')][_0xbe9e('0x42')]?_0x22f89c['attributes']:_0x20ed4d[_0xbe9e('0x3b')];if(!_0x35eb7b[_0xbe9e('0x3d')][_0xbe9e('0x43')](_0xbe9e('0x44'))){_0x22f89c[_0xbe9e('0x2c')]=qs['limit'](_0x35eb7b[_0xbe9e('0x3d')][_0xbe9e('0x2c')]);_0x22f89c['offset']=qs[_0xbe9e('0x2b')](_0x35eb7b[_0xbe9e('0x3d')][_0xbe9e('0x2b')]);}_0x22f89c['order']=qs[_0xbe9e('0x46')](_0x35eb7b[_0xbe9e('0x3d')][_0xbe9e('0x46')]);_0x22f89c[_0xbe9e('0x47')]=qs[_0xbe9e('0x3e')](_[_0xbe9e('0x65')](_0x35eb7b['query'],_0x20ed4d[_0xbe9e('0x3e')]));_0x22f89c[_0xbe9e('0x47')][_0xbe9e('0x66')]=_0x2d8d6d['id'];if(_0x35eb7b['query'][_0xbe9e('0x48')]){_0x22f89c[_0xbe9e('0x47')]=_[_0xbe9e('0x4d')](_0x22f89c[_0xbe9e('0x47')],{'$or':_[_0xbe9e('0x49')](_0x22f89c[_0xbe9e('0x3f')],function(_0x3abec0){var _0x64781b={};_0x64781b[_0x3abec0]={'$like':'%'+_0x35eb7b[_0xbe9e('0x3d')][_0xbe9e('0x48')]+'%'};return _0x64781b;})});}_0x22f89c=_[_0xbe9e('0x4d')]({},_0x22f89c,_0x35eb7b['options']);return db[_0xbe9e('0x118')][_0xbe9e('0x2a')]({'where':_0x22f89c[_0xbe9e('0x47')]})['then'](function(_0x1d88ad){_0xb6316d[_0xbe9e('0x2a')]=_0x1d88ad;if(_0x35eb7b['query'][_0xbe9e('0x4f')]){_0x22f89c[_0xbe9e('0x50')]=[{'all':!![]}];}return db[_0xbe9e('0x118')]['findAll'](_0x22f89c);})[_0xbe9e('0x1f')](function(_0x1dec74){_0xb6316d[_0xbe9e('0x67')]=_0x1dec74;return _0xb6316d;});}})[_0xbe9e('0x1f')](respondWithFilteredResult(_0x59de04,_0x22f89c))[_0xbe9e('0x53')](handleError(_0x59de04,null));};exports['addAgents']=function(_0x1e6518,_0x9a6232,_0x5c7cf9){return db['ChatWebsite'][_0xbe9e('0x55')]({'where':{'id':_0x1e6518[_0xbe9e('0x5f')]['id']}})['then'](handleEntityNotFound(_0x9a6232,null))[_0xbe9e('0x1f')](function(_0x34a372){if(_0x34a372){return _0x34a372[_0xbe9e('0x119')](_0x1e6518[_0xbe9e('0x56')][_0xbe9e('0x6d')],_[_0xbe9e('0xe3')](_0x1e6518[_0xbe9e('0x56')],[_0xbe9e('0x6d'),'id'])||{})[_0xbe9e('0xba')](function(_0x1571cf){for(var _0x345b9d=0x0;_0x345b9d<_0x1e6518[_0xbe9e('0x56')][_0xbe9e('0x6d')][_0xbe9e('0x42')];_0x345b9d+=0x1){socket['emit'](_0xbe9e('0x11a'),{'UserId':_0x1e6518[_0xbe9e('0x56')][_0xbe9e('0x6d')][_0x345b9d],'ChatWebsiteId':_0x1e6518['params']['id']});}return _0x1571cf;});}})[_0xbe9e('0x1f')](respondWithResult(_0x9a6232,null))[_0xbe9e('0x53')](handleError(_0x9a6232,null));};exports[_0xbe9e('0x11b')]=function(_0xa36ea0,_0x458449,_0x3ca79e){return db[_0xbe9e('0x51')][_0xbe9e('0x55')]({'where':{'id':_0xa36ea0['params']['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0x458449,null))[_0xbe9e('0x1f')](function(_0x4764c2){if(_0x4764c2){return _0x4764c2['removeAgents'](_0xa36ea0[_0xbe9e('0x3d')]['ids'])['then'](function(){if(_[_0xbe9e('0x11c')](_0xa36ea0[_0xbe9e('0x3d')][_0xbe9e('0x6d')])){for(var _0x1f64c9=0x0;_0x1f64c9<_0xa36ea0[_0xbe9e('0x3d')]['ids'][_0xbe9e('0x42')];_0x1f64c9+=0x1){socket['emit'](_0xbe9e('0x11d'),{'UserId':Number(_0xa36ea0[_0xbe9e('0x3d')][_0xbe9e('0x6d')][_0x1f64c9]),'ChatWebsiteId':Number(_0xa36ea0['params']['id'])});}}else{socket[_0xbe9e('0x11e')](_0xbe9e('0x11d'),{'UserId':Number(_0xa36ea0[_0xbe9e('0x3d')][_0xbe9e('0x6d')]),'ChatWebsiteId':Number(_0xa36ea0[_0xbe9e('0x5f')]['id'])});}});}})[_0xbe9e('0x1f')](respondWithStatusCode(_0x458449,null))['catch'](handleError(_0x458449,null));};exports[_0xbe9e('0x11f')]=function(_0x229f1e,_0xe7bc28,_0xf21e28){var _0x1f033c={};var _0x2e2e3a={};var _0x26cbd0;var _0x49d6a8;return db[_0xbe9e('0x51')][_0xbe9e('0x64')]({'where':{'id':_0x229f1e[_0xbe9e('0x5f')]['id']}})[_0xbe9e('0x1f')](handleEntityNotFound(_0xe7bc28,null))[_0xbe9e('0x1f')](function(_0x479e96){if(_0x479e96){_0x26cbd0=_0x479e96;_0x2e2e3a['model']=_[_0xbe9e('0x3c')](db[_0xbe9e('0xc4')][_0xbe9e('0x3a')]);_0x2e2e3a[_0xbe9e('0x3d')]=_[_0xbe9e('0x3c')](_0x229f1e['query']);_0x2e2e3a['filters']=_[_0xbe9e('0x40')](_0x2e2e3a[_0xbe9e('0x3b')],_0x2e2e3a[_0xbe9e('0x3d')]);_0x1f033c[_0xbe9e('0x3f')]=_['intersection'](_0x2e2e3a[_0xbe9e('0x3b')],qs['fields'](_0x229f1e[_0xbe9e('0x3d')][_0xbe9e('0x41')]));_0x1f033c['attributes']=_0x1f033c[_0xbe9e('0x3f')][_0xbe9e('0x42')]?_0x1f033c['attributes']:_0x2e2e3a[_0xbe9e('0x3b')];_0x1f033c['order']=qs[_0xbe9e('0x46')](_0x229f1e[_0xbe9e('0x3d')][_0xbe9e('0x46')]);_0x1f033c[_0xbe9e('0x47')]=qs['filters'](_['pick'](_0x229f1e[_0xbe9e('0x3d')],_0x2e2e3a['filters']));if(_0x229f1e['query'][_0xbe9e('0x48')]){_0x1f033c[_0xbe9e('0x47')]=_['merge'](_0x1f033c[_0xbe9e('0x47')],{'$or':_[_0xbe9e('0x49')](_0x1f033c['attributes'],function(_0x56abac){var _0x29a9d4={};_0x29a9d4[_0x56abac]={'$like':'%'+_0x229f1e[_0xbe9e('0x3d')][_0xbe9e('0x48')]+'%'};return _0x29a9d4;})});}_0x1f033c=_[_0xbe9e('0x4d')]({},_0x1f033c,_0x229f1e[_0xbe9e('0x4e')]);return _0x26cbd0[_0xbe9e('0x11f')](_0x1f033c);}})[_0xbe9e('0x1f')](function(_0x353c5d){if(_0x353c5d){_0x49d6a8=_0x353c5d[_0xbe9e('0x42')];if(!_0x229f1e['query'][_0xbe9e('0x43')]('nolimit')){_0x1f033c[_0xbe9e('0x2c')]=qs[_0xbe9e('0x2c')](_0x229f1e['query'][_0xbe9e('0x2c')]);_0x1f033c[_0xbe9e('0x2b')]=qs[_0xbe9e('0x2b')](_0x229f1e[_0xbe9e('0x3d')][_0xbe9e('0x2b')]);}return _0x26cbd0['getAgents'](_0x1f033c);}})[_0xbe9e('0x1f')](function(_0x5d44ac){if(_0x5d44ac){return _0x5d44ac?{'count':_0x49d6a8,'rows':_0x5d44ac}:null;}})['then'](respondWithResult(_0xe7bc28,null))[_0xbe9e('0x53')](handleError(_0xe7bc28,null));};
\ No newline at end of file
index a94eff3..a32bab2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6190=['events','../../mysqldb','ChatWebsite','setMaxListeners','save','remove','emit','hasOwnProperty','hook','exports'];(function(_0x373dee,_0x1a8c45){var _0x46798f=function(_0xc389f0){while(--_0xc389f0){_0x373dee['push'](_0x373dee['shift']());}};_0x46798f(++_0x1a8c45);}(_0x6190,0xd2));var _0x0619=function(_0x3b427b,_0x1ae258){_0x3b427b=_0x3b427b-0x0;var _0x42148c=_0x6190[_0x3b427b];return _0x42148c;};'use strict';var EventEmitter=require(_0x0619('0x0'));var ChatWebsite=require(_0x0619('0x1'))['db'][_0x0619('0x2')];var ChatWebsiteEvents=new EventEmitter();ChatWebsiteEvents[_0x0619('0x3')](0x0);var events={'afterCreate':_0x0619('0x4'),'afterUpdate':'update','afterDestroy':_0x0619('0x5')};function emitEvent(_0xd57209){return function(_0x586d54,_0xf51c97,_0x3882ee){ChatWebsiteEvents['emit'](_0xd57209+':'+_0x586d54['id'],_0x586d54);ChatWebsiteEvents[_0x0619('0x6')](_0xd57209,_0x586d54);_0x3882ee(null);};}for(var e in events){if(events[_0x0619('0x7')](e)){var event=events[e];ChatWebsite[_0x0619('0x8')](e,emitEvent(event));}}module[_0x0619('0x9')]=ChatWebsiteEvents;
\ No newline at end of file
+var _0x5aaa=['update','remove','emit','hasOwnProperty','hook','exports','../../mysqldb','ChatWebsite','setMaxListeners','save'];(function(_0x3300b8,_0x58002d){var _0x439827=function(_0x1b8449){while(--_0x1b8449){_0x3300b8['push'](_0x3300b8['shift']());}};_0x439827(++_0x58002d);}(_0x5aaa,0x11e));var _0xa5aa=function(_0xd2bc4e,_0xe62043){_0xd2bc4e=_0xd2bc4e-0x0;var _0x5a5225=_0x5aaa[_0xd2bc4e];return _0x5a5225;};'use strict';var EventEmitter=require('events');var ChatWebsite=require(_0xa5aa('0x0'))['db'][_0xa5aa('0x1')];var ChatWebsiteEvents=new EventEmitter();ChatWebsiteEvents[_0xa5aa('0x2')](0x0);var events={'afterCreate':_0xa5aa('0x3'),'afterUpdate':_0xa5aa('0x4'),'afterDestroy':_0xa5aa('0x5')};function emitEvent(_0x3a1d49){return function(_0x18def0,_0x288e6f,_0x3beeae){ChatWebsiteEvents['emit'](_0x3a1d49+':'+_0x18def0['id'],_0x18def0);ChatWebsiteEvents[_0xa5aa('0x6')](_0x3a1d49,_0x18def0);_0x3beeae(null);};}for(var e in events){if(events[_0xa5aa('0x7')](e)){var event=events[e];ChatWebsite[_0xa5aa('0x8')](e,emitEvent(event));}}module[_0xa5aa('0x9')]=ChatWebsiteEvents;
\ No newline at end of file
index 39c4014..d4a9175 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x56b3=['request-promise','rimraf','exports','define','lodash','../../config/logger','api','moment'];(function(_0x204652,_0x1992b5){var _0x43939c=function(_0x3ed4f7){while(--_0x3ed4f7){_0x204652['push'](_0x204652['shift']());}};_0x43939c(++_0x1992b5);}(_0x56b3,0x144));var _0x356b=function(_0x440917,_0x20ea7b){_0x440917=_0x440917-0x0;var _0x5e906b=_0x56b3[_0x440917];return _0x5e906b;};'use strict';var _=require(_0x356b('0x0'));var util=require('util');var logger=require(_0x356b('0x1'))(_0x356b('0x2'));var moment=require(_0x356b('0x3'));var BPromise=require('bluebird');var rp=require(_0x356b('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x356b('0x5'));var config=require('../../config/environment');var attributes=require('./chatWebsite.attributes');module[_0x356b('0x6')]=function(_0x40f252,_0x4a8c6e){return _0x40f252[_0x356b('0x7')]('ChatWebsite',attributes,{'tableName':'chat_websites','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf962=['rimraf','../../config/environment','./chatWebsite.attributes','exports','ChatWebsite','chat_websites','lodash','../../config/logger','api','moment','bluebird','request-promise','path'];(function(_0x618414,_0x1a7a60){var _0x21c19a=function(_0x507b17){while(--_0x507b17){_0x618414['push'](_0x618414['shift']());}};_0x21c19a(++_0x1a7a60);}(_0xf962,0xf0));var _0x2f96=function(_0x5dccab,_0x10f80a){_0x5dccab=_0x5dccab-0x0;var _0x11bb88=_0xf962[_0x5dccab];return _0x11bb88;};'use strict';var _=require(_0x2f96('0x0'));var util=require('util');var logger=require(_0x2f96('0x1'))(_0x2f96('0x2'));var moment=require(_0x2f96('0x3'));var BPromise=require(_0x2f96('0x4'));var rp=require(_0x2f96('0x5'));var fs=require('fs');var path=require(_0x2f96('0x6'));var rimraf=require(_0x2f96('0x7'));var config=require(_0x2f96('0x8'));var attributes=require(_0x2f96('0x9'));module[_0x2f96('0xa')]=function(_0x3e3e27,_0x5bb90c){return _0x3e3e27['define'](_0x2f96('0xb'),attributes,{'tableName':_0x2f96('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d04fe7d..92936fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x19d3=['../../config/environment','jayson/promise','client','redis','defaults','socket.io-emitter','./chatWebsite.socket','request','then','info','ChatWebsite,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','catch','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc'];(function(_0x3e9662,_0x5af3b6){var _0x3d4e44=function(_0x1fdcb5){while(--_0x1fdcb5){_0x3e9662['push'](_0x3e9662['shift']());}};_0x3d4e44(++_0x5af3b6);}(_0x19d3,0xeb));var _0x319d=function(_0x17ede9,_0x27d731){_0x17ede9=_0x17ede9-0x0;var _0x35b71d=_0x19d3[_0x17ede9];return _0x35b71d;};'use strict';var _=require('lodash');var util=require(_0x319d('0x0'));var moment=require(_0x319d('0x1'));var BPromise=require(_0x319d('0x2'));var rs=require(_0x319d('0x3'));var fs=require('fs');var Redis=require(_0x319d('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x319d('0x5'));var logger=require(_0x319d('0x6'))(_0x319d('0x7'));var config=require(_0x319d('0x8'));var jayson=require(_0x319d('0x9'));var client=jayson[_0x319d('0xa')]['http']({'port':0x232a});config[_0x319d('0xb')]=_[_0x319d('0xc')](config[_0x319d('0xb')],{'host':'localhost','port':0x18eb});var socket=require(_0x319d('0xd'))(new Redis(config[_0x319d('0xb')]));require(_0x319d('0xe'))['register'](socket);function respondWithRpcPromise(_0x2dcd9f,_0x5d2fb0,_0x5014a7){return new BPromise(function(_0x52a832,_0x4365d0){return client[_0x319d('0xf')](_0x2dcd9f,_0x5014a7)[_0x319d('0x10')](function(_0x3cafbc){logger[_0x319d('0x11')](_0x319d('0x12'),_0x5d2fb0,'request\x20sent');logger[_0x319d('0x13')]('ChatWebsite,\x20%s,\x20%s,\x20%s',_0x5d2fb0,_0x319d('0x14'),JSON[_0x319d('0x15')](_0x3cafbc));if(_0x3cafbc[_0x319d('0x16')]){if(_0x3cafbc[_0x319d('0x16')][_0x319d('0x17')]===0x1f4){logger['error'](_0x319d('0x12'),_0x5d2fb0,_0x3cafbc[_0x319d('0x16')][_0x319d('0x18')]);return _0x4365d0(_0x3cafbc[_0x319d('0x16')]['message']);}logger['error'](_0x319d('0x12'),_0x5d2fb0,_0x3cafbc[_0x319d('0x16')][_0x319d('0x18')]);return _0x52a832(_0x3cafbc[_0x319d('0x16')][_0x319d('0x18')]);}else{logger[_0x319d('0x11')](_0x319d('0x12'),_0x5d2fb0,_0x319d('0x14'));_0x52a832(_0x3cafbc[_0x319d('0x19')]['message']);}})[_0x319d('0x1a')](function(_0x1965c8){logger[_0x319d('0x16')](_0x319d('0x12'),_0x5d2fb0,_0x1965c8);_0x4365d0(_0x1965c8);});});}
\ No newline at end of file
+var _0x7540=['redis','defaults','localhost','socket.io-emitter','./chatWebsite.socket','request','then','info','ChatWebsite,\x20%s,\x20%s','request\x20sent','debug','ChatWebsite,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http'];(function(_0x1f3aec,_0x24c18e){var _0x409f0d=function(_0x52b818){while(--_0x52b818){_0x1f3aec['push'](_0x1f3aec['shift']());}};_0x409f0d(++_0x24c18e);}(_0x7540,0x1d3));var _0x0754=function(_0x835cb7,_0x1e574d){_0x835cb7=_0x835cb7-0x0;var _0x3ef599=_0x7540[_0x835cb7];return _0x3ef599;};'use strict';var _=require(_0x0754('0x0'));var util=require(_0x0754('0x1'));var moment=require(_0x0754('0x2'));var BPromise=require(_0x0754('0x3'));var rs=require(_0x0754('0x4'));var fs=require('fs');var Redis=require(_0x0754('0x5'));var db=require(_0x0754('0x6'))['db'];var utils=require(_0x0754('0x7'));var logger=require(_0x0754('0x8'))(_0x0754('0x9'));var config=require(_0x0754('0xa'));var jayson=require('jayson/promise');var client=jayson[_0x0754('0xb')][_0x0754('0xc')]({'port':0x232a});config[_0x0754('0xd')]=_[_0x0754('0xe')](config[_0x0754('0xd')],{'host':_0x0754('0xf'),'port':0x18eb});var socket=require(_0x0754('0x10'))(new Redis(config[_0x0754('0xd')]));require(_0x0754('0x11'))['register'](socket);function respondWithRpcPromise(_0x164a93,_0x5ef586,_0x5a424c){return new BPromise(function(_0x4ecaee,_0x3ecad4){return client[_0x0754('0x12')](_0x164a93,_0x5a424c)[_0x0754('0x13')](function(_0x56a367){logger[_0x0754('0x14')](_0x0754('0x15'),_0x5ef586,_0x0754('0x16'));logger[_0x0754('0x17')](_0x0754('0x18'),_0x5ef586,_0x0754('0x16'),JSON['stringify'](_0x56a367));if(_0x56a367[_0x0754('0x19')]){if(_0x56a367[_0x0754('0x19')][_0x0754('0x1a')]===0x1f4){logger['error'](_0x0754('0x15'),_0x5ef586,_0x56a367[_0x0754('0x19')][_0x0754('0x1b')]);return _0x3ecad4(_0x56a367[_0x0754('0x19')][_0x0754('0x1b')]);}logger[_0x0754('0x19')]('ChatWebsite,\x20%s,\x20%s',_0x5ef586,_0x56a367['error'][_0x0754('0x1b')]);return _0x4ecaee(_0x56a367[_0x0754('0x19')][_0x0754('0x1b')]);}else{logger['info']('ChatWebsite,\x20%s,\x20%s',_0x5ef586,_0x0754('0x16'));_0x4ecaee(_0x56a367[_0x0754('0x1c')][_0x0754('0x1b')]);}})[_0x0754('0x1d')](function(_0x1b9f42){logger[_0x0754('0x19')](_0x0754('0x15'),_0x5ef586,_0x1b9f42);_0x3ecad4(_0x1b9f42);});});}
\ No newline at end of file
index dd46c07..9f1b163 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x91ed=['register','length','chatWebsite:','remove','update','emit'];(function(_0x4c6177,_0x1e2c60){var _0x468d5f=function(_0x4c1560){while(--_0x4c1560){_0x4c6177['push'](_0x4c6177['shift']());}};_0x468d5f(++_0x1e2c60);}(_0x91ed,0x99));var _0xd91e=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x91ed[_0x42cae2];return _0x5f256f;};'use strict';var ChatWebsiteEvents=require('./chatWebsite.events');var events=['save',_0xd91e('0x0'),_0xd91e('0x1')];function createListener(_0x4846b8,_0x26d121){return function(_0x1e28e2){_0x26d121[_0xd91e('0x2')](_0x4846b8,_0x1e28e2);};}function removeListener(_0x5a32d1,_0x21476f){return function(){ChatWebsiteEvents['removeListener'](_0x5a32d1,_0x21476f);};}exports[_0xd91e('0x3')]=function(_0x35c75f){for(var _0x334ed1=0x0,_0x51509a=events[_0xd91e('0x4')];_0x334ed1<_0x51509a;_0x334ed1++){var _0x464dd0=events[_0x334ed1];var _0x2586bb=createListener(_0xd91e('0x5')+_0x464dd0,_0x35c75f);ChatWebsiteEvents['on'](_0x464dd0,_0x2586bb);}};
\ No newline at end of file
+var _0xd958=['remove','update','emit','removeListener','register','length'];(function(_0x55ba9e,_0x22e4e9){var _0xe89fd=function(_0x3a5c0b){while(--_0x3a5c0b){_0x55ba9e['push'](_0x55ba9e['shift']());}};_0xe89fd(++_0x22e4e9);}(_0xd958,0x1aa));var _0x8d95=function(_0x4e676e,_0x2a7c6d){_0x4e676e=_0x4e676e-0x0;var _0x336a3c=_0xd958[_0x4e676e];return _0x336a3c;};'use strict';var ChatWebsiteEvents=require('./chatWebsite.events');var events=['save',_0x8d95('0x0'),_0x8d95('0x1')];function createListener(_0x1ba6db,_0x24e9ba){return function(_0x138f86){_0x24e9ba[_0x8d95('0x2')](_0x1ba6db,_0x138f86);};}function removeListener(_0xbccd79,_0x3665f7){return function(){ChatWebsiteEvents[_0x8d95('0x3')](_0xbccd79,_0x3665f7);};}exports[_0x8d95('0x4')]=function(_0x277ccb){for(var _0x2c1a1c=0x0,_0x105ffb=events[_0x8d95('0x5')];_0x2c1a1c<_0x105ffb;_0x2c1a1c++){var _0x46b8ac=events[_0x2c1a1c];var _0x1a950d=createListener('chatWebsite:'+_0x46b8ac,_0x277ccb);ChatWebsiteEvents['on'](_0x46b8ac,_0x1a950d);}};
\ No newline at end of file
index bb69908..d1e59f0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x26c2=['getInteractions','getSnippet','/:id/applications','getApplications','getProactiveActions','/:id/fields','getFields','/:id/offline_messages','getOfflineMessages','/:id/users','post','create','/:id/dispositions','/:id/canned_answers','diskStorage','join','server/files/images/logos/','format','%s-%s','now','single','addLogo','root','server/files/images/avatars/','originalname','addAvatar','file','addCustomerAvatar','addSystemAvatar','/:id/notify','notify','/:id/offline','offline','addInteraction','addApplications','addProactiveActions','addAgents','put','update','delete','destroy','removeAnswers','removeAgents','exports','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./chatWebsite.controller','isAuthenticated','index','get','/describe','/:id','show','getDispositions','getAnswers','/:id/logo','getLogo','/:id/avatar','/:id/customer_avatar','getCustomerAvatar','/:id/system_avatar','/:id/interactions'];(function(_0x1db831,_0x42b7b5){var _0x39ba56=function(_0x2c2dd3){while(--_0x2c2dd3){_0x1db831['push'](_0x1db831['shift']());}};_0x39ba56(++_0x42b7b5);}(_0x26c2,0x130));var _0x226c=function(_0x568205,_0x53b09e){_0x568205=_0x568205-0x0;var _0x3babe4=_0x26c2[_0x568205];return _0x3babe4;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var timeout=require(_0x226c('0x0'));var express=require(_0x226c('0x1'));var router=express[_0x226c('0x2')]();var auth=require(_0x226c('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x226c('0x4'));var controller=require(_0x226c('0x5'));router['get']('/',auth[_0x226c('0x6')](),controller[_0x226c('0x7')]);router[_0x226c('0x8')](_0x226c('0x9'),auth[_0x226c('0x6')](),controller['describe']);router[_0x226c('0x8')](_0x226c('0xa'),auth[_0x226c('0x6')](),controller[_0x226c('0xb')]);router[_0x226c('0x8')]('/:id/dispositions',auth[_0x226c('0x6')](),controller[_0x226c('0xc')]);router['get']('/:id/canned_answers',auth[_0x226c('0x6')](),controller[_0x226c('0xd')]);router[_0x226c('0x8')](_0x226c('0xe'),controller[_0x226c('0xf')]);router[_0x226c('0x8')](_0x226c('0x10'),controller['getAvatar']);router['get'](_0x226c('0x11'),controller[_0x226c('0x12')]);router[_0x226c('0x8')](_0x226c('0x13'),controller['getSystemAvatar']);router['get'](_0x226c('0x14'),auth[_0x226c('0x6')](),controller[_0x226c('0x15')]);router['get']('/:id/snippet',controller[_0x226c('0x16')]);router[_0x226c('0x8')](_0x226c('0x17'),auth[_0x226c('0x6')](),controller[_0x226c('0x18')]);router['get']('/:id/proactive_actions',auth['isAuthenticated'](),controller[_0x226c('0x19')]);router[_0x226c('0x8')](_0x226c('0x1a'),controller[_0x226c('0x1b')]);router['get'](_0x226c('0x1c'),auth[_0x226c('0x6')](),controller[_0x226c('0x1d')]);router[_0x226c('0x8')](_0x226c('0x1e'),auth[_0x226c('0x6')](),controller['getAgents']);router[_0x226c('0x1f')]('/',auth[_0x226c('0x6')](),controller[_0x226c('0x20')]);router[_0x226c('0x1f')](_0x226c('0x21'),auth['isAuthenticated'](),controller['addDisposition']);router['post'](_0x226c('0x22'),auth[_0x226c('0x6')](),controller['addAnswer']);var upload=multer({'storage':multer[_0x226c('0x23')]({'destination':function(_0x5b3919,_0x3a862c,_0x1d6e13){_0x1d6e13(null,path[_0x226c('0x24')](config['root'],_0x226c('0x25')));},'filename':function(_0x590ad6,_0x14d6ec,_0x522431){_0x522431(null,util[_0x226c('0x26')](_0x226c('0x27'),Date[_0x226c('0x28')](),_0x14d6ec['originalname']));}})});router[_0x226c('0x1f')]('/:id/logo',upload[_0x226c('0x29')]('file'),controller[_0x226c('0x2a')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x40a095,_0x1de6bb,_0x5ef37f){_0x5ef37f(null,path['join'](config[_0x226c('0x2b')],_0x226c('0x2c')));},'filename':function(_0x10b66b,_0x4221e1,_0x1e78f5){_0x1e78f5(null,util[_0x226c('0x26')](_0x226c('0x27'),Date[_0x226c('0x28')](),_0x4221e1[_0x226c('0x2d')]));}})});router[_0x226c('0x1f')](_0x226c('0x10'),upload[_0x226c('0x29')]('file'),controller[_0x226c('0x2e')]);var upload=multer({'storage':multer[_0x226c('0x23')]({'destination':function(_0x1ce65c,_0xe2da62,_0x2399a7){_0x2399a7(null,path['join'](config[_0x226c('0x2b')],_0x226c('0x2c')));},'filename':function(_0x36fb87,_0x5878ca,_0x29a196){_0x29a196(null,util['format'](_0x226c('0x27'),Date[_0x226c('0x28')](),_0x5878ca[_0x226c('0x2d')]));}})});router[_0x226c('0x1f')](_0x226c('0x11'),upload[_0x226c('0x29')](_0x226c('0x2f')),controller[_0x226c('0x30')]);var upload=multer({'storage':multer[_0x226c('0x23')]({'destination':function(_0x430360,_0x390dc6,_0x3062d7){_0x3062d7(null,path[_0x226c('0x24')](config[_0x226c('0x2b')],'server/files/images/avatars/'));},'filename':function(_0x27fd75,_0x358660,_0x17fe45){_0x17fe45(null,util[_0x226c('0x26')](_0x226c('0x27'),Date[_0x226c('0x28')](),_0x358660[_0x226c('0x2d')]));}})});router[_0x226c('0x1f')](_0x226c('0x13'),upload['single']('file'),controller[_0x226c('0x31')]);router[_0x226c('0x1f')](_0x226c('0x32'),controller[_0x226c('0x33')]);router[_0x226c('0x1f')](_0x226c('0x34'),controller[_0x226c('0x35')]);router[_0x226c('0x1f')](_0x226c('0x14'),auth['isAuthenticated'](),controller[_0x226c('0x36')]);router['post'](_0x226c('0x17'),auth[_0x226c('0x6')](),controller[_0x226c('0x37')]);router['post']('/:id/proactive_actions',auth[_0x226c('0x6')](),controller[_0x226c('0x38')]);router['post'](_0x226c('0x1e'),auth[_0x226c('0x6')](),controller[_0x226c('0x39')]);router[_0x226c('0x3a')]('/:id',auth[_0x226c('0x6')](),controller[_0x226c('0x3b')]);router[_0x226c('0x3c')]('/:id',auth[_0x226c('0x6')](),controller[_0x226c('0x3d')]);router[_0x226c('0x3c')](_0x226c('0x21'),auth[_0x226c('0x6')](),controller['removeDispositions']);router['delete']('/:id/canned_answers',auth[_0x226c('0x6')](),controller[_0x226c('0x3e')]);router[_0x226c('0x3c')](_0x226c('0x1e'),auth[_0x226c('0x6')](),controller[_0x226c('0x3f')]);module[_0x226c('0x40')]=router;
\ No newline at end of file
+var _0x3cfb=['/:id/notify','/:id/offline','offline','addInteraction','addProactiveActions','addAgents','put','/:id','update','delete','removeAnswers','removeAgents','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./chatWebsite.controller','get','isAuthenticated','/describe','show','/:id/dispositions','getDispositions','/:id/canned_answers','getAnswers','/:id/logo','getLogo','/:id/avatar','getAvatar','getCustomerAvatar','getSystemAvatar','getInteractions','getSnippet','/:id/applications','getApplications','/:id/proactive_actions','getProactiveActions','getFields','/:id/offline_messages','/:id/users','getAgents','post','create','addAnswer','diskStorage','join','root','now','originalname','single','file','server/files/images/avatars/','%s-%s','addAvatar','format','addSystemAvatar'];(function(_0x4aa874,_0x205177){var _0x4e7d09=function(_0x54ea98){while(--_0x54ea98){_0x4aa874['push'](_0x4aa874['shift']());}};_0x4e7d09(++_0x205177);}(_0x3cfb,0x1b8));var _0xb3cf=function(_0x67bdd,_0x2c25e6){_0x67bdd=_0x67bdd-0x0;var _0xb49a04=_0x3cfb[_0x67bdd];return _0xb49a04;};'use strict';var multer=require(_0xb3cf('0x0'));var util=require(_0xb3cf('0x1'));var path=require(_0xb3cf('0x2'));var timeout=require(_0xb3cf('0x3'));var express=require(_0xb3cf('0x4'));var router=express[_0xb3cf('0x5')]();var auth=require(_0xb3cf('0x6'));var interaction=require(_0xb3cf('0x7'));var config=require('../../config/environment');var controller=require(_0xb3cf('0x8'));router[_0xb3cf('0x9')]('/',auth[_0xb3cf('0xa')](),controller['index']);router[_0xb3cf('0x9')](_0xb3cf('0xb'),auth[_0xb3cf('0xa')](),controller['describe']);router[_0xb3cf('0x9')]('/:id',auth['isAuthenticated'](),controller[_0xb3cf('0xc')]);router[_0xb3cf('0x9')](_0xb3cf('0xd'),auth[_0xb3cf('0xa')](),controller[_0xb3cf('0xe')]);router[_0xb3cf('0x9')](_0xb3cf('0xf'),auth[_0xb3cf('0xa')](),controller[_0xb3cf('0x10')]);router[_0xb3cf('0x9')](_0xb3cf('0x11'),controller[_0xb3cf('0x12')]);router[_0xb3cf('0x9')](_0xb3cf('0x13'),controller[_0xb3cf('0x14')]);router['get']('/:id/customer_avatar',controller[_0xb3cf('0x15')]);router[_0xb3cf('0x9')]('/:id/system_avatar',controller[_0xb3cf('0x16')]);router['get']('/:id/interactions',auth[_0xb3cf('0xa')](),controller[_0xb3cf('0x17')]);router[_0xb3cf('0x9')]('/:id/snippet',controller[_0xb3cf('0x18')]);router[_0xb3cf('0x9')](_0xb3cf('0x19'),auth[_0xb3cf('0xa')](),controller[_0xb3cf('0x1a')]);router[_0xb3cf('0x9')](_0xb3cf('0x1b'),auth[_0xb3cf('0xa')](),controller[_0xb3cf('0x1c')]);router[_0xb3cf('0x9')]('/:id/fields',controller[_0xb3cf('0x1d')]);router[_0xb3cf('0x9')](_0xb3cf('0x1e'),auth[_0xb3cf('0xa')](),controller['getOfflineMessages']);router[_0xb3cf('0x9')](_0xb3cf('0x1f'),auth[_0xb3cf('0xa')](),controller[_0xb3cf('0x20')]);router[_0xb3cf('0x21')]('/',auth[_0xb3cf('0xa')](),controller[_0xb3cf('0x22')]);router[_0xb3cf('0x21')](_0xb3cf('0xd'),auth[_0xb3cf('0xa')](),controller['addDisposition']);router[_0xb3cf('0x21')](_0xb3cf('0xf'),auth[_0xb3cf('0xa')](),controller[_0xb3cf('0x23')]);var upload=multer({'storage':multer[_0xb3cf('0x24')]({'destination':function(_0x402d3e,_0x13b0b1,_0x2266db){_0x2266db(null,path[_0xb3cf('0x25')](config[_0xb3cf('0x26')],'server/files/images/logos/'));},'filename':function(_0x89f345,_0x3b8c91,_0x1662e5){_0x1662e5(null,util['format']('%s-%s',Date[_0xb3cf('0x27')](),_0x3b8c91[_0xb3cf('0x28')]));}})});router['post']('/:id/logo',upload[_0xb3cf('0x29')](_0xb3cf('0x2a')),controller['addLogo']);var upload=multer({'storage':multer[_0xb3cf('0x24')]({'destination':function(_0x42b1fc,_0x20c6f5,_0x376f73){_0x376f73(null,path[_0xb3cf('0x25')](config[_0xb3cf('0x26')],_0xb3cf('0x2b')));},'filename':function(_0x11efb3,_0x501402,_0x2fc46b){_0x2fc46b(null,util['format'](_0xb3cf('0x2c'),Date['now'](),_0x501402['originalname']));}})});router['post'](_0xb3cf('0x13'),upload[_0xb3cf('0x29')]('file'),controller[_0xb3cf('0x2d')]);var upload=multer({'storage':multer[_0xb3cf('0x24')]({'destination':function(_0x3299e0,_0x432e9e,_0x288c3f){_0x288c3f(null,path[_0xb3cf('0x25')](config['root'],_0xb3cf('0x2b')));},'filename':function(_0x5753b0,_0xdd84aa,_0x1c03bc){_0x1c03bc(null,util[_0xb3cf('0x2e')](_0xb3cf('0x2c'),Date[_0xb3cf('0x27')](),_0xdd84aa[_0xb3cf('0x28')]));}})});router['post']('/:id/customer_avatar',upload[_0xb3cf('0x29')]('file'),controller['addCustomerAvatar']);var upload=multer({'storage':multer[_0xb3cf('0x24')]({'destination':function(_0x4d7ea4,_0x1c088c,_0x18e925){_0x18e925(null,path[_0xb3cf('0x25')](config[_0xb3cf('0x26')],_0xb3cf('0x2b')));},'filename':function(_0x2f9eec,_0x5b31e8,_0x152286){_0x152286(null,util[_0xb3cf('0x2e')](_0xb3cf('0x2c'),Date[_0xb3cf('0x27')](),_0x5b31e8['originalname']));}})});router[_0xb3cf('0x21')]('/:id/system_avatar',upload[_0xb3cf('0x29')]('file'),controller[_0xb3cf('0x2f')]);router[_0xb3cf('0x21')](_0xb3cf('0x30'),controller['notify']);router['post'](_0xb3cf('0x31'),controller[_0xb3cf('0x32')]);router['post']('/:id/interactions',auth['isAuthenticated'](),controller[_0xb3cf('0x33')]);router[_0xb3cf('0x21')]('/:id/applications',auth['isAuthenticated'](),controller['addApplications']);router[_0xb3cf('0x21')](_0xb3cf('0x1b'),auth[_0xb3cf('0xa')](),controller[_0xb3cf('0x34')]);router['post']('/:id/users',auth[_0xb3cf('0xa')](),controller[_0xb3cf('0x35')]);router[_0xb3cf('0x36')](_0xb3cf('0x37'),auth['isAuthenticated'](),controller[_0xb3cf('0x38')]);router[_0xb3cf('0x39')](_0xb3cf('0x37'),auth[_0xb3cf('0xa')](),controller['destroy']);router[_0xb3cf('0x39')](_0xb3cf('0xd'),auth[_0xb3cf('0xa')](),controller['removeDispositions']);router[_0xb3cf('0x39')]('/:id/canned_answers',auth['isAuthenticated'](),controller[_0xb3cf('0x3a')]);router[_0xb3cf('0x39')]('/:id/users',auth['isAuthenticated'](),controller[_0xb3cf('0x3b')]);module[_0xb3cf('0x3c')]=router;
\ No newline at end of file
index 4a62b93..ba5ff0e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fbb=['exports','STRING','sequelize'];(function(_0x149083,_0x4047b6){var _0x4dc74e=function(_0x1211f9){while(--_0x1211f9){_0x149083['push'](_0x149083['shift']());}};_0x4dc74e(++_0x4047b6);}(_0x3fbb,0x89));var _0xb3fb=function(_0x47c772,_0x53d135){_0x47c772=_0x47c772-0x0;var _0x341eb1=_0x3fbb[_0x47c772];return _0x341eb1;};'use strict';var Sequelize=require(_0xb3fb('0x0'));module[_0xb3fb('0x1')]={'name':{'type':Sequelize[_0xb3fb('0x2')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![]}},'vat':{'type':Sequelize[_0xb3fb('0x2')]},'companyId':{'type':Sequelize['STRING']},'website':{'type':Sequelize[_0xb3fb('0x2')]},'phone':{'type':Sequelize['STRING']},'fax':{'type':Sequelize[_0xb3fb('0x2')]},'type':{'type':Sequelize['STRING']},'street':{'type':Sequelize[_0xb3fb('0x2')]},'postalCode':{'type':Sequelize[_0xb3fb('0x2')]},'city':{'type':Sequelize['STRING']},'country':{'type':Sequelize[_0xb3fb('0x2')]},'email':{'type':Sequelize['STRING'],'validate':{'isEmail':!![]}},'emailDomain':{'type':Sequelize['STRING']},'sStreet':{'type':Sequelize[_0xb3fb('0x2')]},'sPostalCode':{'type':Sequelize[_0xb3fb('0x2')]},'sCity':{'type':Sequelize[_0xb3fb('0x2')]},'sCountry':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xb3fb('0x2')]}};
\ No newline at end of file
+var _0xa66b=['exports','STRING','name','sequelize'];(function(_0x3c6c0d,_0x15666f){var _0x403c02=function(_0x5c982a){while(--_0x5c982a){_0x3c6c0d['push'](_0x3c6c0d['shift']());}};_0x403c02(++_0x15666f);}(_0xa66b,0x7f));var _0xba66=function(_0x161f03,_0x5d141b){_0x161f03=_0x161f03-0x0;var _0x2f396f=_0xa66b[_0x161f03];return _0x2f396f;};'use strict';var Sequelize=require(_0xba66('0x0'));module[_0xba66('0x1')]={'name':{'type':Sequelize[_0xba66('0x2')],'unique':_0xba66('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'vat':{'type':Sequelize[_0xba66('0x2')]},'companyId':{'type':Sequelize[_0xba66('0x2')]},'website':{'type':Sequelize['STRING']},'phone':{'type':Sequelize['STRING']},'fax':{'type':Sequelize[_0xba66('0x2')]},'type':{'type':Sequelize['STRING']},'street':{'type':Sequelize[_0xba66('0x2')]},'postalCode':{'type':Sequelize['STRING']},'city':{'type':Sequelize[_0xba66('0x2')]},'country':{'type':Sequelize['STRING']},'email':{'type':Sequelize[_0xba66('0x2')],'validate':{'isEmail':!![]}},'emailDomain':{'type':Sequelize[_0xba66('0x2')]},'sStreet':{'type':Sequelize[_0xba66('0x2')]},'sPostalCode':{'type':Sequelize[_0xba66('0x2')]},'sCity':{'type':Sequelize['STRING']},'sCountry':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 85da531..85d391c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3eda=['fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','field','options','CmCompany','count','rows','show','includeAll','include','find','catch','create','user','role','Companies','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','params','addContacts','CmContact','ids','getContacts','findOne','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','path','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','save','update','destroy','get','UserProfileResource','then','error','stack','name','index','rawAttributes','model','keys','query','filters','intersection','attributes'];(function(_0x19524e,_0x3bb3cd){var _0x10c246=function(_0x484c4c){while(--_0x484c4c){_0x19524e['push'](_0x19524e['shift']());}};_0x10c246(++_0x3bb3cd);}(_0x3eda,0xcc));var _0xa3ed=function(_0x535f5f,_0x32fb6d){_0x535f5f=_0x535f5f-0x0;var _0x25010e=_0x3eda[_0x535f5f];return _0x25010e;};'use strict';var pdf=require(_0xa3ed('0x0'));var emlformat=require(_0xa3ed('0x1'));var rimraf=require(_0xa3ed('0x2'));var zipdir=require(_0xa3ed('0x3'));var jsonpatch=require(_0xa3ed('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xa3ed('0x5'));var Mustache=require(_0xa3ed('0x6'));var util=require(_0xa3ed('0x7'));var path=require(_0xa3ed('0x8'));var sox=require('sox');var csv=require(_0xa3ed('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xa3ed('0xa'));var squel=require(_0xa3ed('0xb'));var crypto=require(_0xa3ed('0xc'));var jsforce=require(_0xa3ed('0xd'));var deskjs=require(_0xa3ed('0xe'));var toCsv=require(_0xa3ed('0x9'));var querystring=require(_0xa3ed('0xf'));var Papa=require(_0xa3ed('0x10'));var Redis=require('ioredis');var authService=require(_0xa3ed('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xa3ed('0x12'));var logger=require('../../config/logger')(_0xa3ed('0x13'));var utils=require('../../config/utils');var config=require(_0xa3ed('0x14'));var db=require(_0xa3ed('0x15'))['db'];function respondWithStatusCode(_0x2961da,_0x56e772){_0x56e772=_0x56e772||0xcc;return function(_0x183f51){if(_0x183f51){return _0x2961da[_0xa3ed('0x16')](_0x56e772);}return _0x2961da[_0xa3ed('0x17')](_0x56e772)[_0xa3ed('0x18')]();};}function respondWithResult(_0x29e981,_0xff98f6){_0xff98f6=_0xff98f6||0xc8;return function(_0x239178){if(_0x239178){return _0x29e981[_0xa3ed('0x17')](_0xff98f6)[_0xa3ed('0x19')](_0x239178);}};}function respondWithFilteredResult(_0x53ed53,_0x270d61){return function(_0x26ad47){if(_0x26ad47){var _0x2b0cc9=_0x26ad47['count'],_0x261053=_0x270d61[_0xa3ed('0x1a')],_0x513d6f=_0x270d61[_0xa3ed('0x1a')]+_0x270d61[_0xa3ed('0x1b')],_0x1ed07d;if(_0x513d6f>=_0x2b0cc9){_0x513d6f=_0x2b0cc9;_0x1ed07d=0xc8;}else{_0x1ed07d=0xce;}_0x53ed53[_0xa3ed('0x17')](_0x1ed07d);return _0x53ed53[_0xa3ed('0x1c')](_0xa3ed('0x1d'),_0x261053+'-'+_0x513d6f+'/'+_0x2b0cc9)['json'](_0x26ad47);}return null;};}function patchUpdates(_0xd6e2ad){return function(_0x4fbf2d){try{jsonpatch[_0xa3ed('0x1e')](_0x4fbf2d,_0xd6e2ad,!![]);}catch(_0x4cb60d){return BPromise['reject'](_0x4cb60d);}return _0x4fbf2d[_0xa3ed('0x1f')]();};}function saveUpdates(_0x1725be,_0x434c2c){return function(_0x53f2d2){if(_0x53f2d2){return _0x53f2d2[_0xa3ed('0x20')](_0x1725be)['then'](function(_0x175652){return _0x175652;});}return null;};}function removeEntity(_0x1368ab,_0x11ee58){return function(_0x49c9b7){if(_0x49c9b7){return _0x49c9b7[_0xa3ed('0x21')]()['then'](function(){var _0x403f66=_0x49c9b7[_0xa3ed('0x22')]({'plain':!![]});var _0x10a65b='Companies';return db[_0xa3ed('0x23')]['destroy']({'where':{'type':_0x10a65b,'resourceId':_0x403f66['id']}})[_0xa3ed('0x24')](function(){return _0x49c9b7;});})['then'](function(){_0x1368ab[_0xa3ed('0x17')](0xcc)[_0xa3ed('0x18')]();});}};}function handleEntityNotFound(_0x3f3601,_0x4b1b5c){return function(_0x356d81){if(!_0x356d81){_0x3f3601[_0xa3ed('0x16')](0x194);}return _0x356d81;};}function handleError(_0xa733d7,_0xdb89eb){_0xdb89eb=_0xdb89eb||0x1f4;return function(_0x30fe40){logger[_0xa3ed('0x25')](_0x30fe40[_0xa3ed('0x26')]);if(_0x30fe40[_0xa3ed('0x27')]){delete _0x30fe40[_0xa3ed('0x27')];}_0xa733d7[_0xa3ed('0x17')](_0xdb89eb)['send'](_0x30fe40);};}exports[_0xa3ed('0x28')]=function(_0x4785f4,_0x581e26){var _0x1a424b={},_0x1d00a6={},_0xcdb548={'count':0x0,'rows':[]};var _0x44c68b=db['CmCompany'][_0xa3ed('0x29')];_0x1d00a6[_0xa3ed('0x2a')]=_[_0xa3ed('0x2b')](_0x44c68b);_0x1d00a6['query']=_[_0xa3ed('0x2b')](_0x4785f4[_0xa3ed('0x2c')]);_0x1d00a6[_0xa3ed('0x2d')]=_[_0xa3ed('0x2e')](_0x1d00a6[_0xa3ed('0x2a')],_0x1d00a6['query']);_0x1a424b[_0xa3ed('0x2f')]=_[_0xa3ed('0x2e')](_0x1d00a6[_0xa3ed('0x2a')],qs[_0xa3ed('0x30')](_0x4785f4['query'][_0xa3ed('0x30')]));_0x1a424b[_0xa3ed('0x2f')]=_0x1a424b[_0xa3ed('0x2f')][_0xa3ed('0x31')]?_0x1a424b[_0xa3ed('0x2f')]:_0x1d00a6[_0xa3ed('0x2a')];if(!_0x4785f4[_0xa3ed('0x2c')][_0xa3ed('0x32')](_0xa3ed('0x33'))){_0x1a424b[_0xa3ed('0x1b')]=qs[_0xa3ed('0x1b')](_0x4785f4['query'][_0xa3ed('0x1b')]);_0x1a424b[_0xa3ed('0x1a')]=qs['offset'](_0x4785f4['query'][_0xa3ed('0x1a')]);}_0x1a424b[_0xa3ed('0x34')]=qs[_0xa3ed('0x35')](_0x4785f4[_0xa3ed('0x2c')][_0xa3ed('0x35')]);_0x1a424b[_0xa3ed('0x36')]=qs[_0xa3ed('0x2d')](_[_0xa3ed('0x37')](_0x4785f4[_0xa3ed('0x2c')],_0x1d00a6[_0xa3ed('0x2d')]));if(_0x4785f4[_0xa3ed('0x2c')][_0xa3ed('0x38')]){_0x1a424b[_0xa3ed('0x36')]=_[_0xa3ed('0x39')](_0x1a424b['where'],{'$or':_[_0xa3ed('0x3a')](_0x44c68b,function(_0x149436){if(_0x149436[_0xa3ed('0x3b')]['key']!=='VIRTUAL'){var _0x67463d={};_0x67463d[_0x149436[_0xa3ed('0x3c')]]={'$like':'%'+_0x4785f4[_0xa3ed('0x2c')]['filter']+'%'};return _0x67463d;}})});}_0x1a424b=_[_0xa3ed('0x39')]({},_0x1a424b,_0x4785f4[_0xa3ed('0x3d')]);var _0x20b9d5={'where':_0x1a424b[_0xa3ed('0x36')]};return db[_0xa3ed('0x3e')][_0xa3ed('0x3f')](_0x20b9d5)[_0xa3ed('0x24')](function(_0x13cb25){_0xcdb548['count']=_0x13cb25;if(_0x4785f4[_0xa3ed('0x2c')]['includeAll']){_0x1a424b['include']=[{'all':!![]}];}return db[_0xa3ed('0x3e')]['findAll'](_0x1a424b);})[_0xa3ed('0x24')](function(_0x1bcd28){_0xcdb548[_0xa3ed('0x40')]=_0x1bcd28;return _0xcdb548;})[_0xa3ed('0x24')](respondWithFilteredResult(_0x581e26,_0x1a424b))['catch'](handleError(_0x581e26,null));};exports[_0xa3ed('0x41')]=function(_0x1a7650,_0x34f72d){var _0x24d6e6={'raw':![],'where':{'id':_0x1a7650['params']['id']}},_0x519bfa={};_0x519bfa[_0xa3ed('0x2a')]=_[_0xa3ed('0x2b')](db['CmCompany'][_0xa3ed('0x29')]);_0x519bfa['query']=_[_0xa3ed('0x2b')](_0x1a7650[_0xa3ed('0x2c')]);_0x519bfa[_0xa3ed('0x2d')]=_['intersection'](_0x519bfa['model'],_0x519bfa['query']);_0x24d6e6['attributes']=_[_0xa3ed('0x2e')](_0x519bfa['model'],qs[_0xa3ed('0x30')](_0x1a7650[_0xa3ed('0x2c')]['fields']));_0x24d6e6[_0xa3ed('0x2f')]=_0x24d6e6[_0xa3ed('0x2f')][_0xa3ed('0x31')]?_0x24d6e6[_0xa3ed('0x2f')]:_0x519bfa[_0xa3ed('0x2a')];if(_0x1a7650[_0xa3ed('0x2c')][_0xa3ed('0x42')]){_0x24d6e6[_0xa3ed('0x43')]=[{'all':!![]}];}_0x24d6e6=_[_0xa3ed('0x39')]({},_0x24d6e6,_0x1a7650[_0xa3ed('0x3d')]);return db[_0xa3ed('0x3e')][_0xa3ed('0x44')](_0x24d6e6)[_0xa3ed('0x24')](handleEntityNotFound(_0x34f72d,null))['then'](respondWithResult(_0x34f72d,null))[_0xa3ed('0x45')](handleError(_0x34f72d,null));};exports[_0xa3ed('0x46')]=function(_0x4d7b9b,_0x566cad){return db['CmCompany']['create'](_0x4d7b9b['body'],{})[_0xa3ed('0x24')](function(_0x5eaedb){var _0x2f82ab=_0x4d7b9b[_0xa3ed('0x47')][_0xa3ed('0x22')]({'plain':!![]});if(!_0x2f82ab)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x2f82ab[_0xa3ed('0x48')]===_0xa3ed('0x47')){var _0x4101be=_0x5eaedb[_0xa3ed('0x22')]({'plain':!![]});var _0x2b9613=_0xa3ed('0x49');return db[_0xa3ed('0x4a')][_0xa3ed('0x44')]({'where':{'name':_0x2b9613,'userProfileId':_0x2f82ab[_0xa3ed('0x4b')]},'raw':!![]})['then'](function(_0xb9e1f2){if(_0xb9e1f2&&_0xb9e1f2['autoAssociation']===0x0){return db[_0xa3ed('0x23')][_0xa3ed('0x46')]({'name':_0x4101be[_0xa3ed('0x27')],'resourceId':_0x4101be['id'],'type':_0xb9e1f2[_0xa3ed('0x27')],'sectionId':_0xb9e1f2['id']},{})[_0xa3ed('0x24')](function(){return _0x5eaedb;});}else{return _0x5eaedb;}})[_0xa3ed('0x45')](function(_0xbfefa8){logger['error'](_0xa3ed('0x4c'),_0xbfefa8);throw _0xbfefa8;});}return _0x5eaedb;})[_0xa3ed('0x24')](respondWithResult(_0x566cad,0xc9))[_0xa3ed('0x45')](handleError(_0x566cad,null));};exports['update']=function(_0x7eeccc,_0x265a8a){if(_0x7eeccc[_0xa3ed('0x4d')]['id']){delete _0x7eeccc[_0xa3ed('0x4d')]['id'];}return db[_0xa3ed('0x3e')][_0xa3ed('0x44')]({'where':{'id':_0x7eeccc[_0xa3ed('0x4e')]['id']}})[_0xa3ed('0x24')](handleEntityNotFound(_0x265a8a,null))[_0xa3ed('0x24')](saveUpdates(_0x7eeccc[_0xa3ed('0x4d')],null))['then'](respondWithResult(_0x265a8a,null))[_0xa3ed('0x45')](handleError(_0x265a8a,null));};exports[_0xa3ed('0x21')]=function(_0x11555d,_0x2a7ffa){return db[_0xa3ed('0x3e')]['find']({'where':{'id':_0x11555d[_0xa3ed('0x4e')]['id']}})[_0xa3ed('0x24')](handleEntityNotFound(_0x2a7ffa,null))['then'](removeEntity(_0x2a7ffa,null))['catch'](handleError(_0x2a7ffa,null));};exports[_0xa3ed('0x4f')]=function(_0x1388ed,_0x58a475,_0x491f46){return db[_0xa3ed('0x50')][_0xa3ed('0x44')]({'where':{'id':_0x1388ed[_0xa3ed('0x4e')]['id']}})['then'](handleEntityNotFound(_0x58a475,null))[_0xa3ed('0x24')](function(_0x223c4a){if(_0x223c4a){return _0x223c4a[_0xa3ed('0x4f')](_0x1388ed[_0xa3ed('0x4d')][_0xa3ed('0x51')],_['omit'](_0x1388ed[_0xa3ed('0x4d')],[_0xa3ed('0x51'),'id'])||{});}})[_0xa3ed('0x24')](respondWithResult(_0x58a475,null))[_0xa3ed('0x45')](handleError(_0x58a475,null));};exports[_0xa3ed('0x52')]=function(_0x5d33bc,_0x3c7cf5,_0x1fe7e7){var _0xac9c75={};var _0x375bff={};var _0x25493a;var _0x4e3ac9;return db[_0xa3ed('0x3e')][_0xa3ed('0x53')]({'where':{'id':_0x5d33bc[_0xa3ed('0x4e')]['id']}})[_0xa3ed('0x24')](handleEntityNotFound(_0x3c7cf5,null))[_0xa3ed('0x24')](function(_0x1e4304){if(_0x1e4304){_0x25493a=_0x1e4304;_0x375bff[_0xa3ed('0x2a')]=_[_0xa3ed('0x2b')](db[_0xa3ed('0x50')][_0xa3ed('0x29')]);_0x375bff[_0xa3ed('0x2c')]=_[_0xa3ed('0x2b')](_0x5d33bc['query']);_0x375bff['filters']=_[_0xa3ed('0x2e')](_0x375bff['model'],_0x375bff['query']);_0xac9c75[_0xa3ed('0x2f')]=_[_0xa3ed('0x2e')](_0x375bff[_0xa3ed('0x2a')],qs[_0xa3ed('0x30')](_0x5d33bc[_0xa3ed('0x2c')]['fields']));_0xac9c75[_0xa3ed('0x2f')]=_0xac9c75[_0xa3ed('0x2f')][_0xa3ed('0x31')]?_0xac9c75[_0xa3ed('0x2f')]:_0x375bff[_0xa3ed('0x2a')];_0xac9c75[_0xa3ed('0x34')]=qs[_0xa3ed('0x35')](_0x5d33bc[_0xa3ed('0x2c')][_0xa3ed('0x35')]);_0xac9c75[_0xa3ed('0x36')]=qs['filters'](_[_0xa3ed('0x37')](_0x5d33bc[_0xa3ed('0x2c')],_0x375bff[_0xa3ed('0x2d')]));if(_0x5d33bc['query'][_0xa3ed('0x38')]){_0xac9c75[_0xa3ed('0x36')]=_[_0xa3ed('0x39')](_0xac9c75[_0xa3ed('0x36')],{'$or':_[_0xa3ed('0x3a')](_0xac9c75[_0xa3ed('0x2f')],function(_0x5c701c){var _0x16e155={};_0x16e155[_0x5c701c]={'$like':'%'+_0x5d33bc[_0xa3ed('0x2c')][_0xa3ed('0x38')]+'%'};return _0x16e155;})});}_0xac9c75=_[_0xa3ed('0x39')]({},_0xac9c75,_0x5d33bc[_0xa3ed('0x3d')]);return _0x25493a[_0xa3ed('0x52')](_0xac9c75);}})[_0xa3ed('0x24')](function(_0x2d031d){if(_0x2d031d){_0x4e3ac9=_0x2d031d['length'];if(!_0x5d33bc['query'][_0xa3ed('0x32')](_0xa3ed('0x33'))){_0xac9c75['limit']=qs[_0xa3ed('0x1b')](_0x5d33bc['query'][_0xa3ed('0x1b')]);_0xac9c75[_0xa3ed('0x1a')]=qs[_0xa3ed('0x1a')](_0x5d33bc[_0xa3ed('0x2c')]['offset']);}return _0x25493a[_0xa3ed('0x52')](_0xac9c75);}})[_0xa3ed('0x24')](function(_0x56989f){if(_0x56989f){return _0x56989f?{'count':_0x4e3ac9,'rows':_0x56989f}:null;}})[_0xa3ed('0x24')](respondWithResult(_0x3c7cf5,null))['catch'](handleError(_0x3c7cf5,null));};
\ No newline at end of file
+var _0x1f96=['../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','get','Companies','UserProfileResource','error','stack','name','index','CmCompany','rawAttributes','model','keys','query','intersection','fields','attributes','length','order','sort','where','pick','filter','merge','map','type','key','field','options','includeAll','include','findAll','rows','catch','show','params','filters','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','find','CmContact','ids','getContacts','findOne','hasOwnProperty','nolimit','html-pdf','eml-format','zip-dir','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','desk.js','querystring','papaparse','ioredis','../../config/logger','api','../../config/utils','../../config/environment'];(function(_0x22ee3b,_0x2bfb74){var _0xd0bde8=function(_0x54e252){while(--_0x54e252){_0x22ee3b['push'](_0x22ee3b['shift']());}};_0xd0bde8(++_0x2bfb74);}(_0x1f96,0x96));var _0x61f9=function(_0x1db6a6,_0x1e1679){_0x1db6a6=_0x1db6a6-0x0;var _0x2caaaa=_0x1f96[_0x1db6a6];return _0x2caaaa;};'use strict';var pdf=require(_0x61f9('0x0'));var emlformat=require(_0x61f9('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x61f9('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x61f9('0x3'));var Mustache=require(_0x61f9('0x4'));var util=require(_0x61f9('0x5'));var path=require(_0x61f9('0x6'));var sox=require(_0x61f9('0x7'));var csv=require(_0x61f9('0x8'));var ejs=require(_0x61f9('0x9'));var fs=require('fs');var _=require(_0x61f9('0xa'));var squel=require(_0x61f9('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x61f9('0xc'));var toCsv=require('to-csv');var querystring=require(_0x61f9('0xd'));var Papa=require(_0x61f9('0xe'));var Redis=require(_0x61f9('0xf'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0x61f9('0x10'))(_0x61f9('0x11'));var utils=require(_0x61f9('0x12'));var config=require(_0x61f9('0x13'));var db=require(_0x61f9('0x14'))['db'];function respondWithStatusCode(_0x15bdb7,_0x28da78){_0x28da78=_0x28da78||0xcc;return function(_0x54183c){if(_0x54183c){return _0x15bdb7[_0x61f9('0x15')](_0x28da78);}return _0x15bdb7[_0x61f9('0x16')](_0x28da78)[_0x61f9('0x17')]();};}function respondWithResult(_0x1d2ca7,_0x360fef){_0x360fef=_0x360fef||0xc8;return function(_0x22fa08){if(_0x22fa08){return _0x1d2ca7[_0x61f9('0x16')](_0x360fef)[_0x61f9('0x18')](_0x22fa08);}};}function respondWithFilteredResult(_0xeac198,_0x3b70){return function(_0x318e60){if(_0x318e60){var _0x57680c=_0x318e60[_0x61f9('0x19')],_0x41ba22=_0x3b70['offset'],_0x7de1e4=_0x3b70[_0x61f9('0x1a')]+_0x3b70[_0x61f9('0x1b')],_0x14330e;if(_0x7de1e4>=_0x57680c){_0x7de1e4=_0x57680c;_0x14330e=0xc8;}else{_0x14330e=0xce;}_0xeac198['status'](_0x14330e);return _0xeac198[_0x61f9('0x1c')](_0x61f9('0x1d'),_0x41ba22+'-'+_0x7de1e4+'/'+_0x57680c)[_0x61f9('0x18')](_0x318e60);}return null;};}function patchUpdates(_0x1ebc58){return function(_0xce96d7){try{jsonpatch[_0x61f9('0x1e')](_0xce96d7,_0x1ebc58,!![]);}catch(_0x4d392f){return BPromise['reject'](_0x4d392f);}return _0xce96d7[_0x61f9('0x1f')]();};}function saveUpdates(_0x367cd0,_0xf3f247){return function(_0x42663f){if(_0x42663f){return _0x42663f[_0x61f9('0x20')](_0x367cd0)[_0x61f9('0x21')](function(_0x30a93f){return _0x30a93f;});}return null;};}function removeEntity(_0x80ae4f,_0xe4bae9){return function(_0x5137aa){if(_0x5137aa){return _0x5137aa[_0x61f9('0x22')]()[_0x61f9('0x21')](function(){var _0x10d9c9=_0x5137aa[_0x61f9('0x23')]({'plain':!![]});var _0x1b9dc8=_0x61f9('0x24');return db[_0x61f9('0x25')][_0x61f9('0x22')]({'where':{'type':_0x1b9dc8,'resourceId':_0x10d9c9['id']}})[_0x61f9('0x21')](function(){return _0x5137aa;});})[_0x61f9('0x21')](function(){_0x80ae4f[_0x61f9('0x16')](0xcc)[_0x61f9('0x17')]();});}};}function handleEntityNotFound(_0x4c9821,_0x1325a3){return function(_0x13dd31){if(!_0x13dd31){_0x4c9821[_0x61f9('0x15')](0x194);}return _0x13dd31;};}function handleError(_0xf1af9d,_0x52e62a){_0x52e62a=_0x52e62a||0x1f4;return function(_0x555ced){logger[_0x61f9('0x26')](_0x555ced[_0x61f9('0x27')]);if(_0x555ced[_0x61f9('0x28')]){delete _0x555ced[_0x61f9('0x28')];}_0xf1af9d['status'](_0x52e62a)['send'](_0x555ced);};}exports[_0x61f9('0x29')]=function(_0x700adb,_0x3f94a0){var _0x18f075={},_0x50d80d={},_0x3de487={'count':0x0,'rows':[]};var _0x51bd28=db[_0x61f9('0x2a')][_0x61f9('0x2b')];_0x50d80d[_0x61f9('0x2c')]=_[_0x61f9('0x2d')](_0x51bd28);_0x50d80d[_0x61f9('0x2e')]=_[_0x61f9('0x2d')](_0x700adb[_0x61f9('0x2e')]);_0x50d80d['filters']=_['intersection'](_0x50d80d['model'],_0x50d80d[_0x61f9('0x2e')]);_0x18f075['attributes']=_[_0x61f9('0x2f')](_0x50d80d['model'],qs[_0x61f9('0x30')](_0x700adb[_0x61f9('0x2e')][_0x61f9('0x30')]));_0x18f075[_0x61f9('0x31')]=_0x18f075[_0x61f9('0x31')][_0x61f9('0x32')]?_0x18f075['attributes']:_0x50d80d['model'];if(!_0x700adb[_0x61f9('0x2e')]['hasOwnProperty']('nolimit')){_0x18f075[_0x61f9('0x1b')]=qs[_0x61f9('0x1b')](_0x700adb[_0x61f9('0x2e')][_0x61f9('0x1b')]);_0x18f075[_0x61f9('0x1a')]=qs['offset'](_0x700adb['query'][_0x61f9('0x1a')]);}_0x18f075[_0x61f9('0x33')]=qs[_0x61f9('0x34')](_0x700adb[_0x61f9('0x2e')][_0x61f9('0x34')]);_0x18f075[_0x61f9('0x35')]=qs['filters'](_[_0x61f9('0x36')](_0x700adb[_0x61f9('0x2e')],_0x50d80d['filters']));if(_0x700adb[_0x61f9('0x2e')][_0x61f9('0x37')]){_0x18f075[_0x61f9('0x35')]=_[_0x61f9('0x38')](_0x18f075[_0x61f9('0x35')],{'$or':_[_0x61f9('0x39')](_0x51bd28,function(_0x428b7b){if(_0x428b7b[_0x61f9('0x3a')][_0x61f9('0x3b')]!=='VIRTUAL'){var _0x2c4e73={};_0x2c4e73[_0x428b7b[_0x61f9('0x3c')]]={'$like':'%'+_0x700adb[_0x61f9('0x2e')]['filter']+'%'};return _0x2c4e73;}})});}_0x18f075=_[_0x61f9('0x38')]({},_0x18f075,_0x700adb[_0x61f9('0x3d')]);var _0x3233f5={'where':_0x18f075[_0x61f9('0x35')]};return db[_0x61f9('0x2a')][_0x61f9('0x19')](_0x3233f5)[_0x61f9('0x21')](function(_0x1a4970){_0x3de487[_0x61f9('0x19')]=_0x1a4970;if(_0x700adb[_0x61f9('0x2e')][_0x61f9('0x3e')]){_0x18f075[_0x61f9('0x3f')]=[{'all':!![]}];}return db['CmCompany'][_0x61f9('0x40')](_0x18f075);})[_0x61f9('0x21')](function(_0x4d255c){_0x3de487[_0x61f9('0x41')]=_0x4d255c;return _0x3de487;})['then'](respondWithFilteredResult(_0x3f94a0,_0x18f075))[_0x61f9('0x42')](handleError(_0x3f94a0,null));};exports[_0x61f9('0x43')]=function(_0x965242,_0x177249){var _0x333d60={'raw':![],'where':{'id':_0x965242[_0x61f9('0x44')]['id']}},_0x36c830={};_0x36c830['model']=_[_0x61f9('0x2d')](db['CmCompany'][_0x61f9('0x2b')]);_0x36c830[_0x61f9('0x2e')]=_[_0x61f9('0x2d')](_0x965242[_0x61f9('0x2e')]);_0x36c830[_0x61f9('0x45')]=_['intersection'](_0x36c830['model'],_0x36c830[_0x61f9('0x2e')]);_0x333d60['attributes']=_[_0x61f9('0x2f')](_0x36c830[_0x61f9('0x2c')],qs[_0x61f9('0x30')](_0x965242[_0x61f9('0x2e')][_0x61f9('0x30')]));_0x333d60[_0x61f9('0x31')]=_0x333d60[_0x61f9('0x31')]['length']?_0x333d60['attributes']:_0x36c830[_0x61f9('0x2c')];if(_0x965242[_0x61f9('0x2e')][_0x61f9('0x3e')]){_0x333d60[_0x61f9('0x3f')]=[{'all':!![]}];}_0x333d60=_[_0x61f9('0x38')]({},_0x333d60,_0x965242[_0x61f9('0x3d')]);return db[_0x61f9('0x2a')]['find'](_0x333d60)[_0x61f9('0x21')](handleEntityNotFound(_0x177249,null))['then'](respondWithResult(_0x177249,null))[_0x61f9('0x42')](handleError(_0x177249,null));};exports[_0x61f9('0x46')]=function(_0x38941f,_0x1dc9c6){return db[_0x61f9('0x2a')][_0x61f9('0x46')](_0x38941f[_0x61f9('0x47')],{})[_0x61f9('0x21')](function(_0x38d9ff){var _0xb9e809=_0x38941f[_0x61f9('0x48')][_0x61f9('0x23')]({'plain':!![]});if(!_0xb9e809)throw new Error(_0x61f9('0x49'));if(_0xb9e809[_0x61f9('0x4a')]===_0x61f9('0x48')){var _0x196db8=_0x38d9ff[_0x61f9('0x23')]({'plain':!![]});var _0x231765=_0x61f9('0x24');return db[_0x61f9('0x4b')]['find']({'where':{'name':_0x231765,'userProfileId':_0xb9e809[_0x61f9('0x4c')]},'raw':!![]})[_0x61f9('0x21')](function(_0x552dc8){if(_0x552dc8&&_0x552dc8[_0x61f9('0x4d')]===0x0){return db[_0x61f9('0x25')][_0x61f9('0x46')]({'name':_0x196db8[_0x61f9('0x28')],'resourceId':_0x196db8['id'],'type':_0x552dc8[_0x61f9('0x28')],'sectionId':_0x552dc8['id']},{})[_0x61f9('0x21')](function(){return _0x38d9ff;});}else{return _0x38d9ff;}})[_0x61f9('0x42')](function(_0x550c6b){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x550c6b);throw _0x550c6b;});}return _0x38d9ff;})[_0x61f9('0x21')](respondWithResult(_0x1dc9c6,0xc9))[_0x61f9('0x42')](handleError(_0x1dc9c6,null));};exports[_0x61f9('0x20')]=function(_0x3723ae,_0x860051){if(_0x3723ae[_0x61f9('0x47')]['id']){delete _0x3723ae['body']['id'];}return db[_0x61f9('0x2a')]['find']({'where':{'id':_0x3723ae['params']['id']}})[_0x61f9('0x21')](handleEntityNotFound(_0x860051,null))['then'](saveUpdates(_0x3723ae[_0x61f9('0x47')],null))[_0x61f9('0x21')](respondWithResult(_0x860051,null))[_0x61f9('0x42')](handleError(_0x860051,null));};exports[_0x61f9('0x22')]=function(_0x254c0f,_0x5ae260){return db[_0x61f9('0x2a')][_0x61f9('0x4e')]({'where':{'id':_0x254c0f[_0x61f9('0x44')]['id']}})[_0x61f9('0x21')](handleEntityNotFound(_0x5ae260,null))['then'](removeEntity(_0x5ae260,null))['catch'](handleError(_0x5ae260,null));};exports['addContacts']=function(_0x2c18c7,_0x383752,_0x4525fb){return db[_0x61f9('0x4f')][_0x61f9('0x4e')]({'where':{'id':_0x2c18c7['params']['id']}})[_0x61f9('0x21')](handleEntityNotFound(_0x383752,null))[_0x61f9('0x21')](function(_0x8e00d1){if(_0x8e00d1){return _0x8e00d1['addContacts'](_0x2c18c7['body'][_0x61f9('0x50')],_['omit'](_0x2c18c7[_0x61f9('0x47')],[_0x61f9('0x50'),'id'])||{});}})[_0x61f9('0x21')](respondWithResult(_0x383752,null))['catch'](handleError(_0x383752,null));};exports[_0x61f9('0x51')]=function(_0x47ab00,_0x2f5d21,_0x3576e1){var _0x5d7dba={};var _0x2d8f11={};var _0x645bd8;var _0x3a8a34;return db['CmCompany'][_0x61f9('0x52')]({'where':{'id':_0x47ab00[_0x61f9('0x44')]['id']}})[_0x61f9('0x21')](handleEntityNotFound(_0x2f5d21,null))[_0x61f9('0x21')](function(_0x4bca74){if(_0x4bca74){_0x645bd8=_0x4bca74;_0x2d8f11[_0x61f9('0x2c')]=_[_0x61f9('0x2d')](db[_0x61f9('0x4f')]['rawAttributes']);_0x2d8f11[_0x61f9('0x2e')]=_[_0x61f9('0x2d')](_0x47ab00[_0x61f9('0x2e')]);_0x2d8f11[_0x61f9('0x45')]=_['intersection'](_0x2d8f11['model'],_0x2d8f11[_0x61f9('0x2e')]);_0x5d7dba[_0x61f9('0x31')]=_['intersection'](_0x2d8f11[_0x61f9('0x2c')],qs[_0x61f9('0x30')](_0x47ab00[_0x61f9('0x2e')][_0x61f9('0x30')]));_0x5d7dba[_0x61f9('0x31')]=_0x5d7dba['attributes'][_0x61f9('0x32')]?_0x5d7dba[_0x61f9('0x31')]:_0x2d8f11[_0x61f9('0x2c')];_0x5d7dba[_0x61f9('0x33')]=qs['sort'](_0x47ab00[_0x61f9('0x2e')][_0x61f9('0x34')]);_0x5d7dba['where']=qs['filters'](_['pick'](_0x47ab00[_0x61f9('0x2e')],_0x2d8f11[_0x61f9('0x45')]));if(_0x47ab00[_0x61f9('0x2e')][_0x61f9('0x37')]){_0x5d7dba[_0x61f9('0x35')]=_['merge'](_0x5d7dba[_0x61f9('0x35')],{'$or':_[_0x61f9('0x39')](_0x5d7dba[_0x61f9('0x31')],function(_0x11fdae){var _0x131231={};_0x131231[_0x11fdae]={'$like':'%'+_0x47ab00[_0x61f9('0x2e')][_0x61f9('0x37')]+'%'};return _0x131231;})});}_0x5d7dba=_['merge']({},_0x5d7dba,_0x47ab00[_0x61f9('0x3d')]);return _0x645bd8[_0x61f9('0x51')](_0x5d7dba);}})[_0x61f9('0x21')](function(_0x4ac6ab){if(_0x4ac6ab){_0x3a8a34=_0x4ac6ab['length'];if(!_0x47ab00[_0x61f9('0x2e')][_0x61f9('0x53')](_0x61f9('0x54'))){_0x5d7dba[_0x61f9('0x1b')]=qs['limit'](_0x47ab00[_0x61f9('0x2e')]['limit']);_0x5d7dba[_0x61f9('0x1a')]=qs[_0x61f9('0x1a')](_0x47ab00[_0x61f9('0x2e')][_0x61f9('0x1a')]);}return _0x645bd8['getContacts'](_0x5d7dba);}})[_0x61f9('0x21')](function(_0x3da9f6){if(_0x3da9f6){return _0x3da9f6?{'count':_0x3a8a34,'rows':_0x3da9f6}:null;}})[_0x61f9('0x21')](respondWithResult(_0x2f5d21,null))[_0x61f9('0x42')](handleError(_0x2f5d21,null));};
\ No newline at end of file
index f602c26..b529b57 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x32f4=['./cmCompany.attributes','exports','CmCompany','cm_companies','lodash','util','../../config/logger','api','bluebird','request-promise','rimraf','../../config/environment'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x32f4,0x154));var _0x432f=function(_0x43543b,_0x32233b){_0x43543b=_0x43543b-0x0;var _0x46828f=_0x32f4[_0x43543b];return _0x46828f;};'use strict';var _=require(_0x432f('0x0'));var util=require(_0x432f('0x1'));var logger=require(_0x432f('0x2'))(_0x432f('0x3'));var moment=require('moment');var BPromise=require(_0x432f('0x4'));var rp=require(_0x432f('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x432f('0x6'));var config=require(_0x432f('0x7'));var attributes=require(_0x432f('0x8'));module[_0x432f('0x9')]=function(_0x2f5f03,_0x5d8cc0){return _0x2f5f03['define'](_0x432f('0xa'),attributes,{'tableName':_0x432f('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x93e9=['moment','bluebird','request-promise','../../config/environment','./cmCompany.attributes','exports','define','CmCompany','cm_companies','lodash','util','../../config/logger','api'];(function(_0x1ecb5a,_0x28951a){var _0x19833b=function(_0x37f6f0){while(--_0x37f6f0){_0x1ecb5a['push'](_0x1ecb5a['shift']());}};_0x19833b(++_0x28951a);}(_0x93e9,0xcc));var _0x993e=function(_0x21b0ef,_0x2bec64){_0x21b0ef=_0x21b0ef-0x0;var _0x135500=_0x93e9[_0x21b0ef];return _0x135500;};'use strict';var _=require(_0x993e('0x0'));var util=require(_0x993e('0x1'));var logger=require(_0x993e('0x2'))(_0x993e('0x3'));var moment=require(_0x993e('0x4'));var BPromise=require(_0x993e('0x5'));var rp=require(_0x993e('0x6'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x993e('0x7'));var attributes=require(_0x993e('0x8'));module[_0x993e('0x9')]=function(_0x45f52e,_0x1da414){return _0x45f52e[_0x993e('0xa')](_0x993e('0xb'),attributes,{'tableName':_0x993e('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index e4faaee..0c325ea 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf9fd=['randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http','then','CmCompany,\x20%s,\x20%s','request\x20sent','CmCompany,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','lodash','util','moment'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xf9fd,0xa5));var _0xdf9f=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xf9fd[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0xdf9f('0x0'));var util=require(_0xdf9f('0x1'));var moment=require(_0xdf9f('0x2'));var BPromise=require('bluebird');var rs=require(_0xdf9f('0x3'));var fs=require('fs');var Redis=require(_0xdf9f('0x4'));var db=require(_0xdf9f('0x5'))['db'];var utils=require(_0xdf9f('0x6'));var logger=require('../../config/logger')(_0xdf9f('0x7'));var config=require(_0xdf9f('0x8'));var jayson=require(_0xdf9f('0x9'));var client=jayson['client'][_0xdf9f('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2dd05e,_0x6b5d46,_0x210b28){return new BPromise(function(_0x4bd4f9,_0x1c6fbd){return client['request'](_0x2dd05e,_0x210b28)[_0xdf9f('0xb')](function(_0x141af6){logger['info'](_0xdf9f('0xc'),_0x6b5d46,_0xdf9f('0xd'));logger['debug'](_0xdf9f('0xe'),_0x6b5d46,_0xdf9f('0xd'),JSON[_0xdf9f('0xf')](_0x141af6));if(_0x141af6['error']){if(_0x141af6[_0xdf9f('0x10')][_0xdf9f('0x11')]===0x1f4){logger[_0xdf9f('0x10')](_0xdf9f('0xc'),_0x6b5d46,_0x141af6[_0xdf9f('0x10')][_0xdf9f('0x12')]);return _0x1c6fbd(_0x141af6[_0xdf9f('0x10')]['message']);}logger['error'](_0xdf9f('0xc'),_0x6b5d46,_0x141af6[_0xdf9f('0x10')][_0xdf9f('0x12')]);return _0x4bd4f9(_0x141af6[_0xdf9f('0x10')][_0xdf9f('0x12')]);}else{logger[_0xdf9f('0x13')](_0xdf9f('0xc'),_0x6b5d46,'request\x20sent');_0x4bd4f9(_0x141af6['result']['message']);}})[_0xdf9f('0x14')](function(_0x4607c1){logger[_0xdf9f('0x10')](_0xdf9f('0xc'),_0x6b5d46,_0x4607c1);_0x1c6fbd(_0x4607c1);});});}
\ No newline at end of file
+var _0xb775=['CmCompany,\x20%s,\x20%s','request\x20sent','CmCompany,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info'];(function(_0x37965d,_0x63002f){var _0x5791de=function(_0x2d4ccd){while(--_0x2d4ccd){_0x37965d['push'](_0x37965d['shift']());}};_0x5791de(++_0x63002f);}(_0xb775,0x68));var _0x5b77=function(_0xfc1c9a,_0xec967b){_0xfc1c9a=_0xfc1c9a-0x0;var _0x54191e=_0xb775[_0xfc1c9a];return _0x54191e;};'use strict';var _=require(_0x5b77('0x0'));var util=require(_0x5b77('0x1'));var moment=require(_0x5b77('0x2'));var BPromise=require('bluebird');var rs=require(_0x5b77('0x3'));var fs=require('fs');var Redis=require(_0x5b77('0x4'));var db=require(_0x5b77('0x5'))['db'];var utils=require(_0x5b77('0x6'));var logger=require(_0x5b77('0x7'))(_0x5b77('0x8'));var config=require(_0x5b77('0x9'));var jayson=require(_0x5b77('0xa'));var client=jayson[_0x5b77('0xb')][_0x5b77('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x2acc10,_0x24f871,_0x465489){return new BPromise(function(_0x5e7cba,_0x2b9531){return client[_0x5b77('0xd')](_0x2acc10,_0x465489)[_0x5b77('0xe')](function(_0xb93708){logger[_0x5b77('0xf')](_0x5b77('0x10'),_0x24f871,_0x5b77('0x11'));logger['debug'](_0x5b77('0x12'),_0x24f871,_0x5b77('0x11'),JSON[_0x5b77('0x13')](_0xb93708));if(_0xb93708[_0x5b77('0x14')]){if(_0xb93708[_0x5b77('0x14')][_0x5b77('0x15')]===0x1f4){logger[_0x5b77('0x14')](_0x5b77('0x10'),_0x24f871,_0xb93708['error']['message']);return _0x2b9531(_0xb93708['error']['message']);}logger['error'](_0x5b77('0x10'),_0x24f871,_0xb93708[_0x5b77('0x14')][_0x5b77('0x16')]);return _0x5e7cba(_0xb93708[_0x5b77('0x14')][_0x5b77('0x16')]);}else{logger['info'](_0x5b77('0x10'),_0x24f871,_0x5b77('0x11'));_0x5e7cba(_0xb93708[_0x5b77('0x17')][_0x5b77('0x16')]);}})['catch'](function(_0x2401e7){logger[_0x5b77('0x14')]('CmCompany,\x20%s,\x20%s',_0x24f871,_0x2401e7);_0x2b9531(_0x2401e7);});});}
\ No newline at end of file
index de7b562..b415832 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x20d8=['index','get','show','post','addContacts','put','update','/:id','destroy','exports','multer','util','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmCompany.controller','isAuthenticated'];(function(_0x303ee3,_0x140838){var _0x2d47ab=function(_0x437c7e){while(--_0x437c7e){_0x303ee3['push'](_0x303ee3['shift']());}};_0x2d47ab(++_0x140838);}(_0x20d8,0xee));var _0x820d=function(_0x374c4a,_0x5afa32){_0x374c4a=_0x374c4a-0x0;var _0x103f4a=_0x20d8[_0x374c4a];return _0x103f4a;};'use strict';var multer=require(_0x820d('0x0'));var util=require(_0x820d('0x1'));var path=require(_0x820d('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x820d('0x3')]();var auth=require(_0x820d('0x4'));var interaction=require(_0x820d('0x5'));var config=require(_0x820d('0x6'));var controller=require(_0x820d('0x7'));router['get']('/',auth[_0x820d('0x8')](),controller[_0x820d('0x9')]);router[_0x820d('0xa')]('/:id',auth[_0x820d('0x8')](),controller[_0x820d('0xb')]);router[_0x820d('0xa')]('/:id/contacts',auth[_0x820d('0x8')](),controller['getContacts']);router[_0x820d('0xc')]('/',auth['isAuthenticated'](),controller['create']);router[_0x820d('0xc')]('/:id/contacts',auth[_0x820d('0x8')](),controller[_0x820d('0xd')]);router[_0x820d('0xe')]('/:id',auth[_0x820d('0x8')](),controller[_0x820d('0xf')]);router['delete'](_0x820d('0x10'),auth['isAuthenticated'](),controller[_0x820d('0x11')]);module[_0x820d('0x12')]=router;
\ No newline at end of file
+var _0xf0c7=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmCompany.controller','get','isAuthenticated','index','/:id','show','/:id/contacts','getContacts','create','post','addContacts','put','update','delete','multer','path','express'];(function(_0x43316a,_0x6bc807){var _0x52c80f=function(_0xe1df3d){while(--_0xe1df3d){_0x43316a['push'](_0x43316a['shift']());}};_0x52c80f(++_0x6bc807);}(_0xf0c7,0x1a1));var _0x7f0c=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xf0c7[_0x14add3];return _0x4a174f;};'use strict';var multer=require(_0x7f0c('0x0'));var util=require('util');var path=require(_0x7f0c('0x1'));var timeout=require('connect-timeout');var express=require(_0x7f0c('0x2'));var router=express[_0x7f0c('0x3')]();var auth=require(_0x7f0c('0x4'));var interaction=require(_0x7f0c('0x5'));var config=require(_0x7f0c('0x6'));var controller=require(_0x7f0c('0x7'));router[_0x7f0c('0x8')]('/',auth[_0x7f0c('0x9')](),controller[_0x7f0c('0xa')]);router[_0x7f0c('0x8')](_0x7f0c('0xb'),auth[_0x7f0c('0x9')](),controller[_0x7f0c('0xc')]);router[_0x7f0c('0x8')](_0x7f0c('0xd'),auth['isAuthenticated'](),controller[_0x7f0c('0xe')]);router['post']('/',auth[_0x7f0c('0x9')](),controller[_0x7f0c('0xf')]);router[_0x7f0c('0x10')]('/:id/contacts',auth['isAuthenticated'](),controller[_0x7f0c('0x11')]);router[_0x7f0c('0x12')](_0x7f0c('0xb'),auth['isAuthenticated'](),controller[_0x7f0c('0x13')]);router[_0x7f0c('0x14')]('/:id',auth[_0x7f0c('0x9')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 6a60705..507abf5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7e6e=['NOW','lodash','sequelize','exports','STRING','TEXT','INTEGER','UNSIGNED','DATE'];(function(_0x2085f3,_0x50105b){var _0x384e3c=function(_0x235fa0){while(--_0x235fa0){_0x2085f3['push'](_0x2085f3['shift']());}};_0x384e3c(++_0x50105b);}(_0x7e6e,0x133));var _0xe7e6=function(_0x117968,_0x3f603b){_0x117968=_0x117968-0x0;var _0x4b13be=_0x7e6e[_0x117968];return _0x4b13be;};'use strict';var _=require(_0xe7e6('0x0'));var Sequelize=require(_0xe7e6('0x1'));module[_0xe7e6('0x2')]={'firstName':{'type':Sequelize[_0xe7e6('0x3')],'allowNull':![]},'lastName':{'type':Sequelize[_0xe7e6('0x3')]},'street':{'type':Sequelize[_0xe7e6('0x3')]},'postalCode':{'type':Sequelize['STRING']},'city':{'type':Sequelize['STRING']},'country':{'type':Sequelize[_0xe7e6('0x3')]},'dateOfBirth':{'type':Sequelize[_0xe7e6('0x3')]},'description':{'type':Sequelize[_0xe7e6('0x4')]},'phone':{'type':Sequelize[_0xe7e6('0x3')]},'mobile':{'type':Sequelize[_0xe7e6('0x3')]},'fax':{'type':Sequelize['STRING']},'email':{'type':Sequelize['STRING']},'url':{'type':Sequelize[_0xe7e6('0x3')]},'facebook':{'type':Sequelize[_0xe7e6('0x3')]},'fb_data':{'type':Sequelize[_0xe7e6('0x3')]},'twitter':{'type':Sequelize['STRING']},'skype':{'type':Sequelize[_0xe7e6('0x3')]},'teams':{'type':Sequelize[_0xe7e6('0x3')]},'viber':{'type':Sequelize['STRING']},'line':{'type':Sequelize[_0xe7e6('0x3')]},'wechat':{'type':Sequelize[_0xe7e6('0x3')]},'telegram':{'type':Sequelize[_0xe7e6('0x3')]},'UserId':{'type':Sequelize[_0xe7e6('0x5')]},'priority':{'type':Sequelize[_0xe7e6('0x5')](0x2)[_0xe7e6('0x6')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'scheduledat':{'type':Sequelize[_0xe7e6('0x7')],'defaultValue':Sequelize[_0xe7e6('0x8')]}};
\ No newline at end of file
+var _0xb117=['DATE','NOW','lodash','sequelize','STRING','INTEGER','UNSIGNED'];(function(_0x10df63,_0x130bbc){var _0x1811db=function(_0x236908){while(--_0x236908){_0x10df63['push'](_0x10df63['shift']());}};_0x1811db(++_0x130bbc);}(_0xb117,0xc6));var _0x7b11=function(_0x5828dd,_0x5469ef){_0x5828dd=_0x5828dd-0x0;var _0x5600b1=_0xb117[_0x5828dd];return _0x5600b1;};'use strict';var _=require(_0x7b11('0x0'));var Sequelize=require(_0x7b11('0x1'));module['exports']={'firstName':{'type':Sequelize['STRING'],'allowNull':![]},'lastName':{'type':Sequelize[_0x7b11('0x2')]},'street':{'type':Sequelize[_0x7b11('0x2')]},'postalCode':{'type':Sequelize['STRING']},'city':{'type':Sequelize[_0x7b11('0x2')]},'country':{'type':Sequelize[_0x7b11('0x2')]},'dateOfBirth':{'type':Sequelize[_0x7b11('0x2')]},'description':{'type':Sequelize['TEXT']},'phone':{'type':Sequelize[_0x7b11('0x2')]},'mobile':{'type':Sequelize[_0x7b11('0x2')]},'fax':{'type':Sequelize['STRING']},'email':{'type':Sequelize[_0x7b11('0x2')]},'url':{'type':Sequelize[_0x7b11('0x2')]},'facebook':{'type':Sequelize[_0x7b11('0x2')]},'fb_data':{'type':Sequelize[_0x7b11('0x2')]},'twitter':{'type':Sequelize[_0x7b11('0x2')]},'skype':{'type':Sequelize[_0x7b11('0x2')]},'teams':{'type':Sequelize[_0x7b11('0x2')]},'viber':{'type':Sequelize['STRING']},'line':{'type':Sequelize[_0x7b11('0x2')]},'wechat':{'type':Sequelize[_0x7b11('0x2')]},'telegram':{'type':Sequelize[_0x7b11('0x2')]},'UserId':{'type':Sequelize[_0x7b11('0x3')]},'priority':{'type':Sequelize['INTEGER'](0x2)[_0x7b11('0x4')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'scheduledat':{'type':Sequelize[_0x7b11('0x5')],'defaultValue':Sequelize[_0x7b11('0x6')]}};
\ No newline at end of file
index 0b8a8ca..3d26308 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e86=['show','get','map','format','cf_%d','omit','pickBy','startsWith','isEmpty','table','cm_contacts','id\x20=\x20?','text','phone','CmHopper','findOne','Tag','rawAttributes','options','getTags','setTags','ids','getHoppers','includeAll','include','ContactId','getJscriptySessions','JscriptySessionReport','uploadCsv','binding_keys','No\x20association\x20keys\x20specified!','binding_values','socket_timestamp','Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed','Incorrect\x20binding\x20parameters\x20passed!','zipObject','firstName','No\x20firstName\x20column\x20specified','root','server/files/tmp','file','chmodSync','child_process','fork','../../components/import/cm/csv','File\x20uploaded\x20correctly!','upload','createReadStream','path','meta','import','User','agent','No\x20ListId\x20specified','binding','No\x20phone\x20column\x20specified','../../components/import/cm/csv2','stringify','message','start\x20child\x20process\x20correctly!','pid','exit','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','redis','localhost','socket.io-emitter','./cmContact.socket','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','then','destroy','error','stack','name','send','CmContact','describe','model','keys','query','intersection','fields','attributes','length','nolimit','order','sort','where','filters','pick','select','field','color','from','tools_tags','expr','advancedFilter','forEach','value','and','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','\x20LIKE\x20?','\x20>\x20?','hasOwnProperty','filter','isNil','ListId','c.ListId\x20IN\x20?','replace','\x27\x27\x27\x27','isNumeric','c.phone\x20LIKE\x20?','isEmail','c.email\x20LIKE\x20?','c.firstName\x20LIKE\x20?','DESC','Sequelize','QueryTypes','clone','isArray','tag','left_join','t.id\x20=\x20ct.TagId','t.id\x20IN\x20?','toString','keyBy','merge','c.*','TagIds','cm_contact_has_tags','ct.CmContactId\x20=\x20c.id','sequelize','split','Tags','push','rows','catch','find','params','cf_','columnName','displayName','CmCustomField','findAll','alias','custom','values','body','tags','join','info','[CmContact][merge]\x20to\x20%s\x20from\x20%s','[CmContact][merge][destroy][CmHopper],\x20%s','CmHopperBlack','[CmContact][merge][destroy][CmHopperBlack],\x20%s','create','ChatInteraction','update','ChatMessage','ChatOfflineMessage','MailInteraction','MailMessage','FaxInteraction','FaxMessage','OpenchannelInteraction','OpenchannelMessage','CmHopperFinal','CmHopperHistory','ReportAgentPreview','VoiceCallReport','ChatQueueReport','FaxQueueReport','OpenchannelQueueReport','SmsQueueReport','bulkCreate','each','duplicates','findOrCreate','spread'];(function(_0x4b369d,_0x265eb8){var _0x571a98=function(_0x56341a){while(--_0x56341a){_0x4b369d['push'](_0x4b369d['shift']());}};_0x571a98(++_0x265eb8);}(_0x4e86,0x111));var _0x64e8=function(_0x3b3291,_0x238db4){_0x3b3291=_0x3b3291-0x0;var _0x8c3b72=_0x4e86[_0x3b3291];return _0x8c3b72;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x64e8('0x0'));var zipdir=require(_0x64e8('0x1'));var jsonpatch=require(_0x64e8('0x2'));var rp=require(_0x64e8('0x3'));var moment=require(_0x64e8('0x4'));var BPromise=require(_0x64e8('0x5'));var Mustache=require(_0x64e8('0x6'));var util=require(_0x64e8('0x7'));var path=require('path');var sox=require(_0x64e8('0x8'));var csv=require(_0x64e8('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x64e8('0xa'));var squel=require('squel');var crypto=require(_0x64e8('0xb'));var jsforce=require(_0x64e8('0xc'));var deskjs=require(_0x64e8('0xd'));var toCsv=require(_0x64e8('0x9'));var querystring=require(_0x64e8('0xe'));var Papa=require(_0x64e8('0xf'));var Redis=require(_0x64e8('0x10'));var authService=require(_0x64e8('0x11'));var qs=require(_0x64e8('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x64e8('0x13'))(_0x64e8('0x14'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0x64e8('0x15')]=_['defaults'](config[_0x64e8('0x15')],{'host':_0x64e8('0x16'),'port':0x18eb});var socket=require(_0x64e8('0x17'))(new Redis(config[_0x64e8('0x15')]));require(_0x64e8('0x18'))['register'](socket);function respondWithStatusCode(_0x328991,_0x27da8a){_0x27da8a=_0x27da8a||0xcc;return function(_0x5d8af3){if(_0x5d8af3){return _0x328991[_0x64e8('0x19')](_0x27da8a);}return _0x328991[_0x64e8('0x1a')](_0x27da8a)[_0x64e8('0x1b')]();};}function respondWithResult(_0x1dc12e,_0x5542c4){_0x5542c4=_0x5542c4||0xc8;return function(_0x595ba2){if(_0x595ba2){return _0x1dc12e['status'](_0x5542c4)[_0x64e8('0x1c')](_0x595ba2);}};}function respondWithFilteredResult(_0x54036e,_0x1c942e){return function(_0x2ac476){if(_0x2ac476){var _0x4203cd=_0x2ac476[_0x64e8('0x1d')],_0x2c23d6=_0x1c942e[_0x64e8('0x1e')],_0x27603e=_0x1c942e['offset']+_0x1c942e[_0x64e8('0x1f')],_0x133ed2;if(_0x27603e>=_0x4203cd){_0x27603e=_0x4203cd;_0x133ed2=0xc8;}else{_0x133ed2=0xce;}_0x54036e['status'](_0x133ed2);return _0x54036e[_0x64e8('0x20')](_0x64e8('0x21'),_0x2c23d6+'-'+_0x27603e+'/'+_0x4203cd)['json'](_0x2ac476);}return null;};}function patchUpdates(_0x1e8bbb){return function(_0x35ae72){try{jsonpatch[_0x64e8('0x22')](_0x35ae72,_0x1e8bbb,!![]);}catch(_0x3a3d41){return BPromise[_0x64e8('0x23')](_0x3a3d41);}return _0x35ae72['save']();};}function saveUpdates(_0x100e0b,_0x269f0b){return function(_0xe410e7){if(_0xe410e7){return _0xe410e7['update'](_0x100e0b)[_0x64e8('0x24')](function(_0x61c65e){return _0x61c65e;});}return null;};}function removeEntity(_0x28090a,_0x3c07ee){return function(_0x368cdc){if(_0x368cdc){return _0x368cdc[_0x64e8('0x25')]()[_0x64e8('0x24')](function(){_0x28090a[_0x64e8('0x1a')](0xcc)[_0x64e8('0x1b')]();});}};}function handleEntityNotFound(_0x509d46,_0x208441){return function(_0x57242a){if(!_0x57242a){_0x509d46['sendStatus'](0x194);}return _0x57242a;};}function handleError(_0x4a7ff9,_0x50ee0f){_0x50ee0f=_0x50ee0f||0x1f4;return function(_0x1df4bf){logger[_0x64e8('0x26')](_0x1df4bf[_0x64e8('0x27')]);if(_0x1df4bf[_0x64e8('0x28')]){delete _0x1df4bf[_0x64e8('0x28')];}_0x4a7ff9[_0x64e8('0x1a')](_0x50ee0f)[_0x64e8('0x29')](_0x1df4bf);};}exports['index']=function(_0x19b21c,_0x405a96){var _0x3c42d2={},_0x3a21d8={},_0x468615={'count':0x0,'rows':[]};return db[_0x64e8('0x2a')][_0x64e8('0x2b')]()[_0x64e8('0x24')](function(_0x3150ea){_0x3a21d8[_0x64e8('0x2c')]=_[_0x64e8('0x2d')](_0x3150ea);_0x3a21d8[_0x64e8('0x2e')]=_['keys'](_0x19b21c[_0x64e8('0x2e')]);_0x3a21d8['filters']=_[_0x64e8('0x2f')](_0x3a21d8[_0x64e8('0x2c')],_0x3a21d8[_0x64e8('0x2e')]);_0x3c42d2['attributes']=_['intersection'](_0x3a21d8[_0x64e8('0x2c')],qs[_0x64e8('0x30')](_0x19b21c[_0x64e8('0x2e')][_0x64e8('0x30')]));_0x3c42d2[_0x64e8('0x31')]=_0x3c42d2[_0x64e8('0x31')][_0x64e8('0x32')]?_0x3c42d2['attributes']:_0x3a21d8['model'];if(!_0x19b21c[_0x64e8('0x2e')]['hasOwnProperty'](_0x64e8('0x33'))){_0x3c42d2[_0x64e8('0x1f')]=qs[_0x64e8('0x1f')](_0x19b21c[_0x64e8('0x2e')][_0x64e8('0x1f')]);_0x3c42d2['offset']=qs[_0x64e8('0x1e')](_0x19b21c[_0x64e8('0x2e')][_0x64e8('0x1e')]);}_0x3c42d2[_0x64e8('0x34')]=qs['sort'](_0x19b21c[_0x64e8('0x2e')][_0x64e8('0x35')]);_0x3c42d2[_0x64e8('0x36')]=qs[_0x64e8('0x37')](_[_0x64e8('0x38')](_0x19b21c[_0x64e8('0x2e')],_0x3a21d8[_0x64e8('0x37')]));var _0x431307=[];var _0x54be51=squel[_0x64e8('0x39')]()[_0x64e8('0x3a')]('id')[_0x64e8('0x3a')](_0x64e8('0x28'))[_0x64e8('0x3a')](_0x64e8('0x3b'))[_0x64e8('0x3c')](_0x64e8('0x3d'));var _0x147e1e=squel[_0x64e8('0x39')]()[_0x64e8('0x3c')]('cm_contacts','c')['where']('c.deletedAt\x20IS\x20NULL');var _0x45b45c=squel[_0x64e8('0x3e')]();if(_0x19b21c[_0x64e8('0x2e')][_0x64e8('0x3f')]){var _0x1e4449=JSON['parse'](_0x19b21c[_0x64e8('0x2e')][_0x64e8('0x3f')]);_[_0x64e8('0x2d')](_0x1e4449)[_0x64e8('0x40')](function(_0x2bd455){var _0x189973=_0x1e4449[_0x2bd455];switch(_0x189973['condition']){case'IS':if(_['isArray'](_0x189973['value'])&&_0x189973[_0x64e8('0x41')]['length']>0x1){_0x45b45c[_0x64e8('0x42')](_0x189973[_0x64e8('0x43')]+'.'+_0x2bd455+_0x64e8('0x44'),_0x189973[_0x64e8('0x41')]);}else{_0x45b45c[_0x64e8('0x42')](_0x189973['tableAlias']+'.'+_0x2bd455+_0x64e8('0x45'),_0x189973['value'][0x0]);}break;case'=':_0x45b45c[_0x64e8('0x42')](_0x189973[_0x64e8('0x43')]+'.'+_0x2bd455+_0x64e8('0x45'),_0x189973['value']);break;case _0x64e8('0x46'):_0x45b45c[_0x64e8('0x42')](_0x189973[_0x64e8('0x43')]+'.'+_0x2bd455+_0x64e8('0x47'),'%'+_0x189973[_0x64e8('0x41')]+'%');break;case'>':_0x45b45c[_0x64e8('0x42')](_0x189973[_0x64e8('0x43')]+'.'+_0x2bd455+_0x64e8('0x48'),_0x189973['value']);break;case'<':_0x45b45c['and'](_0x189973[_0x64e8('0x43')]+'.'+_0x2bd455+'\x20<\x20?',_0x189973[_0x64e8('0x41')]);break;}});}else{var _0x96b7b5=_(Object[_0x64e8('0x2d')](_0x19b21c['query']))['map'](function(_0xd9a00a){return _0x3150ea[_0x64e8('0x49')](_0xd9a00a)?_0xd9a00a:undefined;})[_0x64e8('0x4a')](function(_0xd8b973){return!_[_0x64e8('0x4b')](_0xd8b973);})[_0x64e8('0x41')]();if(!_['isEmpty'](_0x96b7b5)){_0x96b7b5[_0x64e8('0x40')](function(_0x81c97a){if(_0x81c97a===_0x64e8('0x4c')){_0x147e1e[_0x64e8('0x36')](_0x64e8('0x4d'),[]['concat'](_0x19b21c[_0x64e8('0x2e')][_0x81c97a]));}else{_0x147e1e[_0x64e8('0x36')]('c.'+_0x81c97a+_0x64e8('0x45'),_0x19b21c[_0x64e8('0x2e')][_0x81c97a]);}});}if(_0x19b21c['query']['filter']){var _0x2244ac=_0x19b21c['query'][_0x64e8('0x4a')][_0x64e8('0x4e')]('\x5c','\x5c\x5c')[_0x64e8('0x4e')]('\x27\x27',_0x64e8('0x4f'));if(qs[_0x64e8('0x50')](_0x2244ac)){_0x45b45c['or']('c.id\x20LIKE\x20?',_0x2244ac+'%');_0x45b45c['or'](_0x64e8('0x51'),_0x2244ac+'%');_0x45b45c['or']('c.mobile\x20LIKE\x20?',_0x2244ac+'%');_0x45b45c['or']('c.fax\x20LIKE\x20?',_0x2244ac+'%');}else if(qs[_0x64e8('0x52')](_0x2244ac)){_0x45b45c['or'](_0x64e8('0x53'),_0x2244ac+'%');}else{_0x45b45c['or']('c.email\x20LIKE\x20?',_0x2244ac+'%');_0x45b45c['or'](_0x64e8('0x54'),_0x2244ac+'%');_0x45b45c['or']('c.lastName\x20LIKE\x20?',_0x2244ac+'%');}}}_0x147e1e[_0x64e8('0x36')](_0x45b45c);if(_0x3c42d2[_0x64e8('0x34')]){_0x3c42d2[_0x64e8('0x34')][_0x64e8('0x40')](function(_0x1ca834){_0x147e1e[_0x64e8('0x34')]('c.'+_0x1ca834[0x0],_0x1ca834[0x1]===_0x64e8('0x55')?![]:!![]);});}_0x147e1e['group']('c.id');var _0x45a42e={'type':db[_0x64e8('0x56')][_0x64e8('0x57')]['SELECT'],'raw':!![]};var _0x2f8524=_0x147e1e[_0x64e8('0x58')]()['field']('COUNT(*)');if(!_0x19b21c[_0x64e8('0x2e')][_0x64e8('0x3f')]){if(_0x19b21c[_0x64e8('0x2e')]['tag']){var _0xf16586=_[_0x64e8('0x59')](_0x19b21c[_0x64e8('0x2e')][_0x64e8('0x5a')])?_0x19b21c[_0x64e8('0x2e')][_0x64e8('0x5a')]:new Array(_0x19b21c['query']['tag']);var _0x8867be=squel['expr']();_0xf16586[_0x64e8('0x40')](function(_0x494545){_0x8867be['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x494545+',%');});_0x147e1e['having'](_0x8867be);_0x2f8524[_0x64e8('0x5b')]('cm_contact_has_tags','ct','ct.CmContactId\x20=\x20c.id');_0x2f8524[_0x64e8('0x5b')](_0x64e8('0x3d'),'t',_0x64e8('0x5c'));_0x2f8524['where'](_0x64e8('0x5d'),_0xf16586);}}db['sequelize'][_0x64e8('0x2e')](_0x54be51[_0x64e8('0x5e')](),_0x45a42e)['then'](function(_0x2f598c){_0x431307=_[_0x64e8('0x5f')](_0x2f598c,'id');return db['sequelize'][_0x64e8('0x2e')](_0x2f8524[_0x64e8('0x5e')](),_0x45a42e);})[_0x64e8('0x24')](function(_0x4bcdaa){_0x468615[_0x64e8('0x1d')]=_0x4bcdaa[_0x64e8('0x32')];_0x45a42e=_[_0x64e8('0x60')](_0x45a42e,{'model':db[_0x64e8('0x2a')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x147e1e['field'](_0x64e8('0x61'));_0x147e1e['field']('GROUP_CONCAT(DISTINCT\x20t.id)',_0x64e8('0x62'));_0x147e1e['left_join'](_0x64e8('0x63'),'ct',_0x64e8('0x64'));_0x147e1e[_0x64e8('0x5b')](_0x64e8('0x3d'),'t',_0x64e8('0x5c'));if(_0x3c42d2[_0x64e8('0x1f')]){_0x147e1e[_0x64e8('0x1f')](_0x3c42d2['limit']);}if(_0x3c42d2[_0x64e8('0x1e')]){_0x147e1e[_0x64e8('0x1e')](_0x3c42d2[_0x64e8('0x1e')]);}db[_0x64e8('0x65')][_0x64e8('0x2e')](_0x147e1e['toString'](),_0x45a42e)[_0x64e8('0x24')](function(_0x2edec1){_0x2edec1[_0x64e8('0x40')](function(_0x53eb56){if(_0x53eb56[_0x64e8('0x62')]){_0x53eb56['Tags']=[];_0x53eb56[_0x64e8('0x62')][_0x64e8('0x66')](',')[_0x64e8('0x40')](function(_0x15af29){_0x53eb56[_0x64e8('0x67')][_0x64e8('0x68')](_0x431307[_0x15af29]);});}delete _0x53eb56[_0x64e8('0x62')];});_0x468615[_0x64e8('0x69')]=_0x2edec1;return _0x468615;})[_0x64e8('0x24')](respondWithFilteredResult(_0x405a96,_0x3c42d2))[_0x64e8('0x6a')](handleError(_0x405a96,null));});});};exports[_0x64e8('0x25')]=function(_0x2036e5,_0x5139ce){return db['CmContact'][_0x64e8('0x6b')]({'where':{'id':_0x2036e5[_0x64e8('0x6c')]['id']}})[_0x64e8('0x24')](handleEntityNotFound(_0x5139ce,null))['then'](removeEntity(_0x5139ce,null))[_0x64e8('0x6a')](handleError(_0x5139ce,null));};exports[_0x64e8('0x2b')]=function(_0x29d479,_0x2c29df){return db['CmContact'][_0x64e8('0x2b')]()[_0x64e8('0x24')](function(_0x30c01f){for(var _0x33662a=0x0;_0x33662a<Object[_0x64e8('0x2d')](_0x30c01f)['length'];_0x33662a++){var _0x49fd85=Object[_0x64e8('0x2d')](_0x30c01f)[_0x33662a];if(!_['startsWith'](_0x49fd85,_0x64e8('0x6d'))){_0x30c01f[_0x49fd85][_0x64e8('0x6e')]=_0x49fd85;_0x30c01f[_0x49fd85][_0x64e8('0x6f')]=_0x49fd85;}}return _0x30c01f;})['then'](function(_0x187af0){var _0x581e5a={'where':{'$or':[{'ListId':_0x29d479[_0x64e8('0x2e')]['id']},{'ListId':null}]},'raw':!![]};return db[_0x64e8('0x70')][_0x64e8('0x71')](_0x581e5a)[_0x64e8('0x24')](function(_0x303931){for(var _0x4f81b4=0x0;_0x4f81b4<_0x303931[_0x64e8('0x32')];_0x4f81b4++){var _0x219367='cf_'+_0x303931[_0x4f81b4]['id'];_0x187af0[_0x219367][_0x64e8('0x6e')]=_0x219367;_0x187af0[_0x219367][_0x64e8('0x6f')]=_0x303931[_0x4f81b4][_0x64e8('0x72')];_0x187af0[_0x219367][_0x64e8('0x73')]={'type':_0x303931[_0x4f81b4]['type'],'values':_0x303931[_0x4f81b4][_0x64e8('0x74')]};}Object['keys'](_0x187af0)[_0x64e8('0x40')](function(_0x88faa8){if(!_0x187af0[_0x88faa8][_0x64e8('0x49')]('columnName')){delete _0x187af0[_0x88faa8];}});return _0x187af0;});})[_0x64e8('0x24')](respondWithResult(_0x2c29df,null))[_0x64e8('0x6a')](handleError(_0x2c29df,null));};exports[_0x64e8('0x60')]=function(_0x27d737,_0x21030f){var _0x90c7b3;var _0x17fa79;var _0x4e314a;if(_0x27d737[_0x64e8('0x75')]['id']){delete _0x27d737[_0x64e8('0x75')]['id'];}return db['CmContact'][_0x64e8('0x71')]({'where':{'id':[_0x27d737[_0x64e8('0x75')]['to'],_0x27d737[_0x64e8('0x75')][_0x64e8('0x3c')]]}})['then'](function(_0x426529){if(_0x426529){if(_0x426529[_0x64e8('0x32')]!==0x2){return null;}_0x426529[0x0]=_0x426529[0x0]['get']({'plain':!![]});_0x426529[0x1]=_0x426529[0x1]['get']({'plain':!![]});delete _0x426529[0x0]['id'];delete _0x426529[0x1]['id'];return _['mergeWith'](_0x426529[0x0],_0x426529[0x1],function(_0x2d1b66,_0x4053dc){if(Array[_0x64e8('0x59')](_0x4053dc)&&!_0x4053dc[_0x64e8('0x32')]){return _0x2d1b66;}else if(!_0x4053dc){return _0x2d1b66;}});}})['then'](handleEntityNotFound(_0x21030f,null))[_0x64e8('0x24')](function(_0x4ab5a7){if(_0x4ab5a7){if(_0x4ab5a7['tags']&&_[_0x64e8('0x59')](_0x4ab5a7[_0x64e8('0x76')])){_0x4ab5a7[_0x64e8('0x76')]=_0x4ab5a7[_0x64e8('0x76')][_0x64e8('0x77')]();}logger[_0x64e8('0x78')](_0x64e8('0x79'),_0x27d737[_0x64e8('0x75')]['to'],_0x27d737[_0x64e8('0x75')][_0x64e8('0x3c')]);return db['CmHopper'][_0x64e8('0x25')]({'where':{'ContactId':[_0x27d737[_0x64e8('0x75')]['to'],_0x27d737[_0x64e8('0x75')]['from']]}})[_0x64e8('0x24')](function(_0x12511d){logger['info'](_0x64e8('0x7a'),_0x12511d);return db[_0x64e8('0x7b')][_0x64e8('0x25')]({'where':{'ContactId':[_0x27d737['body']['to'],_0x27d737[_0x64e8('0x75')][_0x64e8('0x3c')]]}})[_0x64e8('0x24')](function(_0x497ccf){logger[_0x64e8('0x78')](_0x64e8('0x7c'),_0x497ccf);return db[_0x64e8('0x2a')][_0x64e8('0x7d')](_0x4ab5a7);});});}})[_0x64e8('0x24')](function(_0x31c0cf){if(_0x31c0cf){_0x90c7b3=_0x31c0cf;_0x17fa79={'ContactId':_0x90c7b3['id']};_0x4e314a={'where':{'ContactId':[_0x27d737[_0x64e8('0x75')]['to'],_0x27d737['body'][_0x64e8('0x3c')]]}};return db[_0x64e8('0x7e')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x80')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x81')]['update'](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x82')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x83')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x82')]['update'](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x83')]['update'](_0x17fa79,_0x4e314a);}})['then'](function(){if(_0x90c7b3){return db['SmsInteraction']['update'](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db['SmsMessage']['update'](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x84')]['update'](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x85')]['update'](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x86')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x87')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x88')]['update'](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x89')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x8a')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x8b')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})['then'](function(){if(_0x90c7b3){return db[_0x64e8('0x8c')]['update'](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x8d')]['update'](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db['MailQueueReport'][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x8e')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db[_0x64e8('0x8f')][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db['JscriptySessionReport'][_0x64e8('0x7f')](_0x17fa79,_0x4e314a);}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return db['CmContact'][_0x64e8('0x25')]({'where':{'id':[_0x27d737[_0x64e8('0x75')]['to'],_0x27d737[_0x64e8('0x75')][_0x64e8('0x3c')]]}});}})[_0x64e8('0x24')](function(){if(_0x90c7b3){return _0x90c7b3;}})[_0x64e8('0x24')](respondWithResult(_0x21030f,null))[_0x64e8('0x6a')](handleError(_0x21030f,null));};exports[_0x64e8('0x7d')]=function(_0x549f6e,_0x543aeb){return db[_0x64e8('0x2a')]['describe']()[_0x64e8('0x24')](function(_0x3d049e){if(_0x549f6e[_0x64e8('0x75')][_0x64e8('0x76')]&&_[_0x64e8('0x59')](_0x549f6e[_0x64e8('0x75')]['tags'])){if(_0x549f6e[_0x64e8('0x75')][_0x64e8('0x76')][_0x64e8('0x32')]){_0x549f6e['body'][_0x64e8('0x76')]=_0x549f6e[_0x64e8('0x75')][_0x64e8('0x76')][_0x64e8('0x77')](';')+';';}else{_0x549f6e[_0x64e8('0x75')][_0x64e8('0x76')]=null;}}else{_0x549f6e[_0x64e8('0x75')][_0x64e8('0x76')]=null;}return db[_0x64e8('0x2a')][_0x64e8('0x7d')](_0x549f6e[_0x64e8('0x75')],{'fields':_[_0x64e8('0x2d')](_0x3d049e),'raw':!![]});})[_0x64e8('0x24')](respondWithResult(_0x543aeb,0xc9))['catch'](handleError(_0x543aeb,null));};exports[_0x64e8('0x90')]=function(_0x267d4a,_0x274ae4){var _0xab746d=[];var _0x528a03=0x0;var _0x583f78=0x0;var _0x1208aa=0x0;return db[_0x64e8('0x2a')][_0x64e8('0x2b')]()[_0x64e8('0x24')](function(_0x4628be){return BPromise[_0x64e8('0x91')](_0x267d4a[_0x64e8('0x75')],function(_0x348e16){var _0x2396c6={'where':{'$or':[]},'defaults':_0x348e16,'fields':_['keys'](_0x4628be),'raw':!![]};if(_0x348e16[_0x64e8('0x92')]){for(var _0x332f4e=0x0;_0x332f4e<_0x348e16[_0x64e8('0x92')][_0x64e8('0x32')];_0x332f4e++){var _0xffaab4={};_0xffaab4[_0x348e16[_0x64e8('0x92')][_0x332f4e]]=_0x348e16[_0x348e16['duplicates'][_0x332f4e]];_0x2396c6[_0x64e8('0x36')]['$or'][_0x64e8('0x68')](_0xffaab4);}_0x2396c6[_0x64e8('0x36')][_0x64e8('0x4c')]=_0x348e16[_0x64e8('0x4c')];}return db[_0x64e8('0x2a')][_0x64e8('0x93')](_0x2396c6)[_0x64e8('0x94')](function(_0x2358b6,_0x1fa36f){if(_0x1fa36f){_0x528a03++;}else{_0x1208aa++;}})['catch'](function(_0x178d03){console['error'](_0x178d03);_0x583f78++;});});})[_0x64e8('0x24')](function(_0xdbaba9){if(_0xdbaba9){return{'success':_0x528a03,'failure':_0x583f78,'duplicates':_0x1208aa};}})[_0x64e8('0x24')](respondWithResult(_0x274ae4,0xc9))[_0x64e8('0x6a')](handleError(_0x274ae4,null));};exports[_0x64e8('0x95')]=function(_0x24287d,_0x4d9f90,_0x3eba7d){var _0x160ab6;return db[_0x64e8('0x2a')]['describe']()[_0x64e8('0x24')](function(_0x457f93){return db[_0x64e8('0x2a')]['find']({'where':{'id':_0x24287d[_0x64e8('0x6c')]['id']},'include':[{'model':db['Tag'],'as':_0x64e8('0x67'),'attributes':['id',_0x64e8('0x28'),'color'],'required':_0x24287d[_0x64e8('0x2e')]['tag']?!![]:![]}],'attributes':_[_0x64e8('0x2d')](_0x457f93)});})['then'](function(_0x598250){_0x160ab6=_0x598250[_0x64e8('0x96')]({'plain':!![]});var _0x5532f2={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x598250&&_0x598250['ListId']){if(_0x598250[_0x64e8('0x4c')]){_0x5532f2['where']['$and'][_0x64e8('0x68')]({'ListId':{'$ne':_0x598250[_0x64e8('0x4c')]}});}}return db[_0x64e8('0x70')][_0x64e8('0x71')](_0x5532f2);})[_0x64e8('0x24')](function(_0xdf29cb){return _['omit'](_0x160ab6,_[_0x64e8('0x97')](_0xdf29cb,function(_0x4fd30e){return util[_0x64e8('0x98')](_0x64e8('0x99'),_0x4fd30e['id']);}));})[_0x64e8('0x24')](handleEntityNotFound(_0x4d9f90,null))[_0x64e8('0x24')](respondWithResult(_0x4d9f90,null))['catch'](handleError(_0x4d9f90,null));};exports['update']=function(_0xbf85c6,_0x455672){var _0x325446;if(_0xbf85c6[_0x64e8('0x75')]['id']){delete _0xbf85c6[_0x64e8('0x75')]['id'];}return db[_0x64e8('0x2a')][_0x64e8('0x6b')]({'where':{'id':_0xbf85c6[_0x64e8('0x6c')]['id']}})['then'](handleEntityNotFound(_0x455672,null))['then'](saveUpdates(_0xbf85c6['body'],null))[_0x64e8('0x24')](function(_0x1bbdf1){_0x325446=_0x1bbdf1;var _0x4f7184={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x1bbdf1&&_0x1bbdf1[_0x64e8('0x4c')]){if(_0x1bbdf1[_0x64e8('0x4c')]){_0x4f7184[_0x64e8('0x36')]['$and'][_0x64e8('0x68')]({'ListId':{'$ne':_0x1bbdf1[_0x64e8('0x4c')]}});}}return db[_0x64e8('0x70')]['findAll'](_0x4f7184);})[_0x64e8('0x24')](function(_0x52917e){if(_0x52917e){return _[_0x64e8('0x9a')](_[_0x64e8('0x9b')](_0xbf85c6['body'],function(_0x3f277d,_0x28faba){return _[_0x64e8('0x9c')](_0x28faba,_0x64e8('0x6d'));}),_['map'](_0x52917e,function(_0x3bf89f){return util[_0x64e8('0x98')]('cf_%d',_0x3bf89f['id']);}));}})[_0x64e8('0x24')](function(_0x146dfc){if(_0x146dfc&&!_[_0x64e8('0x9d')](_0x146dfc)){var _0x45e206=squel[_0x64e8('0x7f')]()[_0x64e8('0x9e')](_0x64e8('0x9f'))['setFields'](_0x146dfc)[_0x64e8('0x36')](_0x64e8('0xa0'),_0xbf85c6[_0x64e8('0x6c')]['id'])['toParam']();return db[_0x64e8('0x65')][_0x64e8('0x2e')](_0x45e206[_0x64e8('0xa1')],{'replacements':_0x45e206[_0x64e8('0x74')]});}})['then'](function(){if(_0xbf85c6['body'][_0x64e8('0xa2')]&&_0x325446){return db[_0x64e8('0xa3')]['update']({'phone':_0xbf85c6[_0x64e8('0x75')]['phone']},{'where':{'ContactId':_0x325446['id']}});}})[_0x64e8('0x24')](function(){return _0x325446;})[_0x64e8('0x24')](respondWithResult(_0x455672,null))['catch'](handleError(_0x455672,null));};exports['getTags']=function(_0x16b7fd,_0x57ad75,_0x5013e3){var _0x42153f={};var _0x47b78e={};var _0x9d4002;var _0x314437;return db[_0x64e8('0x2a')][_0x64e8('0xa4')]({'where':{'id':_0x16b7fd[_0x64e8('0x6c')]['id']}})['then'](handleEntityNotFound(_0x57ad75,null))[_0x64e8('0x24')](function(_0x5dc975){if(_0x5dc975){_0x9d4002=_0x5dc975;_0x47b78e['model']=_[_0x64e8('0x2d')](db[_0x64e8('0xa5')][_0x64e8('0xa6')]);_0x47b78e[_0x64e8('0x2e')]=_['keys'](_0x16b7fd[_0x64e8('0x2e')]);_0x47b78e[_0x64e8('0x37')]=_[_0x64e8('0x2f')](_0x47b78e[_0x64e8('0x2c')],_0x47b78e[_0x64e8('0x2e')]);_0x42153f['attributes']=_[_0x64e8('0x2f')](_0x47b78e[_0x64e8('0x2c')],qs[_0x64e8('0x30')](_0x16b7fd[_0x64e8('0x2e')][_0x64e8('0x30')]));_0x42153f[_0x64e8('0x31')]=_0x42153f[_0x64e8('0x31')][_0x64e8('0x32')]?_0x42153f[_0x64e8('0x31')]:_0x47b78e[_0x64e8('0x2c')];_0x42153f['order']=qs[_0x64e8('0x35')](_0x16b7fd[_0x64e8('0x2e')][_0x64e8('0x35')]);_0x42153f[_0x64e8('0x36')]=qs[_0x64e8('0x37')](_[_0x64e8('0x38')](_0x16b7fd[_0x64e8('0x2e')],_0x47b78e[_0x64e8('0x37')]));if(_0x16b7fd[_0x64e8('0x2e')][_0x64e8('0x4a')]){_0x42153f[_0x64e8('0x36')]=_[_0x64e8('0x60')](_0x42153f[_0x64e8('0x36')],{'$or':_[_0x64e8('0x97')](_0x42153f[_0x64e8('0x31')],function(_0x43f8f5){var _0x354bd0={};_0x354bd0[_0x43f8f5]={'$like':'%'+_0x16b7fd[_0x64e8('0x2e')][_0x64e8('0x4a')]+'%'};return _0x354bd0;})});}_0x42153f=_[_0x64e8('0x60')]({},_0x42153f,_0x16b7fd[_0x64e8('0xa7')]);return _0x9d4002['getTags'](_0x42153f);}})['then'](function(_0x3def19){if(_0x3def19){_0x314437=_0x3def19[_0x64e8('0x32')];if(!_0x16b7fd[_0x64e8('0x2e')][_0x64e8('0x49')](_0x64e8('0x33'))){_0x42153f['limit']=qs['limit'](_0x16b7fd[_0x64e8('0x2e')]['limit']);_0x42153f[_0x64e8('0x1e')]=qs['offset'](_0x16b7fd[_0x64e8('0x2e')][_0x64e8('0x1e')]);}return _0x9d4002[_0x64e8('0xa8')](_0x42153f);}})[_0x64e8('0x24')](function(_0x4e762e){if(_0x4e762e){return _0x4e762e?{'count':_0x314437,'rows':_0x4e762e}:null;}})[_0x64e8('0x24')](respondWithResult(_0x57ad75,null))[_0x64e8('0x6a')](handleError(_0x57ad75,null));};exports[_0x64e8('0xa9')]=function(_0x53b240,_0x28946b,_0x39da7b){if(_0x53b240[_0x64e8('0x75')]['id']){delete _0x53b240[_0x64e8('0x75')]['id'];}return db[_0x64e8('0x2a')][_0x64e8('0xa4')]({'where':{'id':_0x53b240[_0x64e8('0x6c')]['id']}})[_0x64e8('0x24')](handleEntityNotFound(_0x28946b,null))['then'](function(_0x521bb9){if(_0x521bb9){return _0x521bb9['setTags'](_0x53b240[_0x64e8('0x75')][_0x64e8('0xaa')]||[]);}return null;})[_0x64e8('0x24')](respondWithResult(_0x28946b,null))[_0x64e8('0x6a')](handleError(_0x28946b,null));};exports[_0x64e8('0xab')]=function(_0x3b1258,_0x3d5068,_0x4f063f){var _0x174d62={'raw':![],'where':{}};var _0x12ce81={};var _0x443e20={'count':0x0,'rows':[]};return db[_0x64e8('0x2a')][_0x64e8('0xa4')]({'where':{'id':_0x3b1258[_0x64e8('0x6c')]['id']}})[_0x64e8('0x24')](handleEntityNotFound(_0x3d5068,null))['then'](function(_0x4bb484){if(_0x4bb484){_0x12ce81[_0x64e8('0x2c')]=_[_0x64e8('0x2d')](db[_0x64e8('0xa3')][_0x64e8('0xa6')]);_0x12ce81[_0x64e8('0x2e')]=_['keys'](_0x3b1258[_0x64e8('0x2e')]);_0x12ce81['filters']=_[_0x64e8('0x2f')](_0x12ce81[_0x64e8('0x2c')],_0x12ce81['query']);_0x174d62[_0x64e8('0x31')]=_[_0x64e8('0x2f')](_0x12ce81[_0x64e8('0x2c')],qs['fields'](_0x3b1258[_0x64e8('0x2e')]['fields']));_0x174d62[_0x64e8('0x31')]=_0x174d62[_0x64e8('0x31')][_0x64e8('0x32')]?_0x174d62[_0x64e8('0x31')]:_0x12ce81[_0x64e8('0x2c')];if(!_0x3b1258[_0x64e8('0x2e')][_0x64e8('0x49')](_0x64e8('0x33'))){_0x174d62['limit']=qs['limit'](_0x3b1258['query']['limit']);_0x174d62[_0x64e8('0x1e')]=qs[_0x64e8('0x1e')](_0x3b1258[_0x64e8('0x2e')][_0x64e8('0x1e')]);}_0x174d62[_0x64e8('0x34')]=qs[_0x64e8('0x35')](_0x3b1258[_0x64e8('0x2e')][_0x64e8('0x35')]);_0x174d62[_0x64e8('0x36')]=qs[_0x64e8('0x37')](_[_0x64e8('0x38')](_0x3b1258[_0x64e8('0x2e')],_0x12ce81[_0x64e8('0x37')]));_0x174d62[_0x64e8('0x36')]['ContactId']=_0x4bb484['id'];if(_0x3b1258[_0x64e8('0x2e')][_0x64e8('0x4a')]){_0x174d62[_0x64e8('0x36')]=_[_0x64e8('0x60')](_0x174d62[_0x64e8('0x36')],{'$or':_[_0x64e8('0x97')](_0x174d62[_0x64e8('0x31')],function(_0x3a9fd0){var _0x5ba82a={};_0x5ba82a[_0x3a9fd0]={'$like':'%'+_0x3b1258[_0x64e8('0x2e')][_0x64e8('0x4a')]+'%'};return _0x5ba82a;})});}_0x174d62=_[_0x64e8('0x60')]({},_0x174d62,_0x3b1258[_0x64e8('0xa7')]);return db[_0x64e8('0xa3')][_0x64e8('0x1d')]({'where':_0x174d62[_0x64e8('0x36')]})[_0x64e8('0x24')](function(_0x2aefe9){_0x443e20[_0x64e8('0x1d')]=_0x2aefe9;if(_0x3b1258[_0x64e8('0x2e')][_0x64e8('0xac')]){_0x174d62[_0x64e8('0xad')]=[{'all':!![]}];}return db['CmHopper']['findAll'](_0x174d62);})[_0x64e8('0x24')](function(_0x4b39a2){_0x443e20['rows']=_0x4b39a2;return _0x443e20;});}})['then'](respondWithFilteredResult(_0x3d5068,_0x174d62))['catch'](handleError(_0x3d5068,null));};exports['getHopperHistories']=function(_0x19358e,_0x3219b1,_0xb8f6e8){var _0x3566fc={'raw':!![],'where':{}};var _0x102f4c={};var _0x1c2ec4={'count':0x0,'rows':[]};return db[_0x64e8('0x2a')]['findOne']({'where':{'id':_0x19358e[_0x64e8('0x6c')]['id']}})[_0x64e8('0x24')](handleEntityNotFound(_0x3219b1,null))[_0x64e8('0x24')](function(_0x3c894e){if(_0x3c894e){_0x102f4c[_0x64e8('0x2c')]=_[_0x64e8('0x2d')](db['CmHopperHistory'][_0x64e8('0xa6')]);_0x102f4c[_0x64e8('0x2e')]=_['keys'](_0x19358e[_0x64e8('0x2e')]);_0x102f4c[_0x64e8('0x37')]=_[_0x64e8('0x2f')](_0x102f4c[_0x64e8('0x2c')],_0x102f4c['query']);_0x3566fc[_0x64e8('0x31')]=_['intersection'](_0x102f4c[_0x64e8('0x2c')],qs[_0x64e8('0x30')](_0x19358e[_0x64e8('0x2e')][_0x64e8('0x30')]));_0x3566fc[_0x64e8('0x31')]=_0x3566fc[_0x64e8('0x31')][_0x64e8('0x32')]?_0x3566fc[_0x64e8('0x31')]:_0x102f4c['model'];if(!_0x19358e[_0x64e8('0x2e')]['hasOwnProperty'](_0x64e8('0x33'))){_0x3566fc['limit']=qs[_0x64e8('0x1f')](_0x19358e[_0x64e8('0x2e')][_0x64e8('0x1f')]);_0x3566fc[_0x64e8('0x1e')]=qs[_0x64e8('0x1e')](_0x19358e['query'][_0x64e8('0x1e')]);}_0x3566fc[_0x64e8('0x34')]=qs[_0x64e8('0x35')](_0x19358e[_0x64e8('0x2e')][_0x64e8('0x35')]);_0x3566fc[_0x64e8('0x36')]=qs[_0x64e8('0x37')](_[_0x64e8('0x38')](_0x19358e['query'],_0x102f4c['filters']));_0x3566fc[_0x64e8('0x36')]['ContactId']=_0x3c894e['id'];if(_0x19358e[_0x64e8('0x2e')][_0x64e8('0x4a')]){_0x3566fc['where']=_['merge'](_0x3566fc['where'],{'$or':_[_0x64e8('0x97')](_0x3566fc[_0x64e8('0x31')],function(_0x48b6be){var _0x23f610={};_0x23f610[_0x48b6be]={'$like':'%'+_0x19358e['query'][_0x64e8('0x4a')]+'%'};return _0x23f610;})});}_0x3566fc=_['merge']({},_0x3566fc,_0x19358e[_0x64e8('0xa7')]);return db[_0x64e8('0x89')]['count']({'where':_0x3566fc['where']})['then'](function(_0x303e08){_0x1c2ec4[_0x64e8('0x1d')]=_0x303e08;if(_0x19358e[_0x64e8('0x2e')][_0x64e8('0xac')]){_0x3566fc[_0x64e8('0xad')]=[{'all':!![]}];}return db[_0x64e8('0x89')][_0x64e8('0x71')](_0x3566fc);})[_0x64e8('0x24')](function(_0x4d328c){_0x1c2ec4[_0x64e8('0x69')]=_0x4d328c;return _0x1c2ec4;});}})['then'](respondWithFilteredResult(_0x3219b1,_0x3566fc))['catch'](handleError(_0x3219b1,null));};exports['getHopperFinals']=function(_0x3ca545,_0x37c89f,_0x1d2855){var _0x4cd241={'raw':!![],'where':{}};var _0x4cff63={};var _0x7ae707={'count':0x0,'rows':[]};return db[_0x64e8('0x2a')][_0x64e8('0xa4')]({'where':{'id':_0x3ca545[_0x64e8('0x6c')]['id']}})[_0x64e8('0x24')](handleEntityNotFound(_0x37c89f,null))[_0x64e8('0x24')](function(_0x2313a9){if(_0x2313a9){_0x4cff63[_0x64e8('0x2c')]=_[_0x64e8('0x2d')](db[_0x64e8('0x88')][_0x64e8('0xa6')]);_0x4cff63[_0x64e8('0x2e')]=_[_0x64e8('0x2d')](_0x3ca545[_0x64e8('0x2e')]);_0x4cff63['filters']=_[_0x64e8('0x2f')](_0x4cff63[_0x64e8('0x2c')],_0x4cff63[_0x64e8('0x2e')]);_0x4cd241[_0x64e8('0x31')]=_[_0x64e8('0x2f')](_0x4cff63[_0x64e8('0x2c')],qs[_0x64e8('0x30')](_0x3ca545[_0x64e8('0x2e')][_0x64e8('0x30')]));_0x4cd241[_0x64e8('0x31')]=_0x4cd241[_0x64e8('0x31')]['length']?_0x4cd241['attributes']:_0x4cff63[_0x64e8('0x2c')];if(!_0x3ca545[_0x64e8('0x2e')][_0x64e8('0x49')]('nolimit')){_0x4cd241[_0x64e8('0x1f')]=qs[_0x64e8('0x1f')](_0x3ca545['query'][_0x64e8('0x1f')]);_0x4cd241[_0x64e8('0x1e')]=qs[_0x64e8('0x1e')](_0x3ca545[_0x64e8('0x2e')][_0x64e8('0x1e')]);}_0x4cd241[_0x64e8('0x34')]=qs[_0x64e8('0x35')](_0x3ca545['query'][_0x64e8('0x35')]);_0x4cd241[_0x64e8('0x36')]=qs[_0x64e8('0x37')](_[_0x64e8('0x38')](_0x3ca545[_0x64e8('0x2e')],_0x4cff63[_0x64e8('0x37')]));_0x4cd241['where'][_0x64e8('0xae')]=_0x2313a9['id'];if(_0x3ca545['query'][_0x64e8('0x4a')]){_0x4cd241[_0x64e8('0x36')]=_[_0x64e8('0x60')](_0x4cd241['where'],{'$or':_['map'](_0x4cd241[_0x64e8('0x31')],function(_0x350042){var _0xad5503={};_0xad5503[_0x350042]={'$like':'%'+_0x3ca545['query'][_0x64e8('0x4a')]+'%'};return _0xad5503;})});}_0x4cd241=_[_0x64e8('0x60')]({},_0x4cd241,_0x3ca545['options']);return db[_0x64e8('0x88')]['count']({'where':_0x4cd241[_0x64e8('0x36')]})[_0x64e8('0x24')](function(_0x4cefdb){_0x7ae707[_0x64e8('0x1d')]=_0x4cefdb;if(_0x3ca545[_0x64e8('0x2e')][_0x64e8('0xac')]){_0x4cd241[_0x64e8('0xad')]=[{'all':!![]}];}return db[_0x64e8('0x88')][_0x64e8('0x71')](_0x4cd241);})[_0x64e8('0x24')](function(_0x1f9d57){_0x7ae707[_0x64e8('0x69')]=_0x1f9d57;return _0x7ae707;});}})[_0x64e8('0x24')](respondWithFilteredResult(_0x37c89f,_0x4cd241))['catch'](handleError(_0x37c89f,null));};exports[_0x64e8('0xaf')]=function(_0x2f779b,_0x468bcb,_0x473e15){var _0xe4a7ab={'raw':!![],'where':{}};var _0x459fa5={};var _0x5ade7e={'count':0x0,'rows':[]};return db[_0x64e8('0x2a')][_0x64e8('0xa4')]({'where':{'id':_0x2f779b['params']['id']}})['then'](handleEntityNotFound(_0x468bcb,null))[_0x64e8('0x24')](function(_0x26ef11){if(_0x26ef11){_0x459fa5[_0x64e8('0x2c')]=_[_0x64e8('0x2d')](db[_0x64e8('0xb0')]['rawAttributes']);_0x459fa5[_0x64e8('0x2e')]=_[_0x64e8('0x2d')](_0x2f779b[_0x64e8('0x2e')]);_0x459fa5[_0x64e8('0x37')]=_[_0x64e8('0x2f')](_0x459fa5[_0x64e8('0x2c')],_0x459fa5[_0x64e8('0x2e')]);_0xe4a7ab[_0x64e8('0x31')]=_[_0x64e8('0x2f')](_0x459fa5[_0x64e8('0x2c')],qs[_0x64e8('0x30')](_0x2f779b[_0x64e8('0x2e')][_0x64e8('0x30')]));_0xe4a7ab['attributes']=_0xe4a7ab[_0x64e8('0x31')][_0x64e8('0x32')]?_0xe4a7ab[_0x64e8('0x31')]:_0x459fa5['model'];if(!_0x2f779b['query'][_0x64e8('0x49')](_0x64e8('0x33'))){_0xe4a7ab['limit']=qs['limit'](_0x2f779b[_0x64e8('0x2e')][_0x64e8('0x1f')]);_0xe4a7ab[_0x64e8('0x1e')]=qs[_0x64e8('0x1e')](_0x2f779b[_0x64e8('0x2e')][_0x64e8('0x1e')]);}_0xe4a7ab[_0x64e8('0x34')]=qs[_0x64e8('0x35')](_0x2f779b[_0x64e8('0x2e')][_0x64e8('0x35')]);_0xe4a7ab['where']=qs['filters'](_['pick'](_0x2f779b['query'],_0x459fa5[_0x64e8('0x37')]));_0xe4a7ab[_0x64e8('0x36')][_0x64e8('0xae')]=_0x26ef11['id'];if(_0x2f779b[_0x64e8('0x2e')]['filter']){_0xe4a7ab['where']=_[_0x64e8('0x60')](_0xe4a7ab[_0x64e8('0x36')],{'$or':_[_0x64e8('0x97')](_0xe4a7ab[_0x64e8('0x31')],function(_0x41d0a5){var _0x344215={};_0x344215[_0x41d0a5]={'$like':'%'+_0x2f779b[_0x64e8('0x2e')][_0x64e8('0x4a')]+'%'};return _0x344215;})});}_0xe4a7ab=_[_0x64e8('0x60')]({},_0xe4a7ab,_0x2f779b[_0x64e8('0xa7')]);return db[_0x64e8('0xb0')][_0x64e8('0x1d')]({'where':_0xe4a7ab[_0x64e8('0x36')]})['then'](function(_0x2aff38){_0x5ade7e[_0x64e8('0x1d')]=_0x2aff38;if(_0x2f779b[_0x64e8('0x2e')][_0x64e8('0xac')]){_0xe4a7ab[_0x64e8('0xad')]=[{'all':!![]}];}return db[_0x64e8('0xb0')][_0x64e8('0x71')](_0xe4a7ab);})[_0x64e8('0x24')](function(_0x311f76){_0x5ade7e[_0x64e8('0x69')]=_0x311f76;return _0x5ade7e;});}})[_0x64e8('0x24')](respondWithFilteredResult(_0x468bcb,_0xe4a7ab))[_0x64e8('0x6a')](handleError(_0x468bcb,null));};exports[_0x64e8('0xb1')]=function(_0x3f2e77,_0x3e5a44,_0x38dbe0){try{if(!_0x3f2e77[_0x64e8('0x75')]['ListId']){throw new Error('No\x20ListId\x20specified');}if(!_0x3f2e77['body'][_0x64e8('0xb2')]){throw new Error(_0x64e8('0xb3'));}if(!_0x3f2e77[_0x64e8('0x75')][_0x64e8('0xb4')]){throw new Error('No\x20association\x20values\x20specified!');}if(!_0x3f2e77[_0x64e8('0x75')][_0x64e8('0xb5')]){throw new Error(_0x64e8('0xb6'));}var _0x72b5de=_0x3f2e77[_0x64e8('0x75')]['binding_keys'][_0x64e8('0x66')](',');var _0x4b6c4e=_0x3f2e77[_0x64e8('0x75')]['binding_values'][_0x64e8('0x66')](',');if(!_0x72b5de['length']||!_0x4b6c4e[_0x64e8('0x32')]||_0x72b5de[_0x64e8('0x32')]!==_0x4b6c4e[_0x64e8('0x32')]){throw new Error(_0x64e8('0xb7'));}_0x3f2e77[_0x64e8('0x75')][_0x64e8('0x30')]=_[_0x64e8('0xb8')](_0x72b5de,_0x4b6c4e);if(!_0x3f2e77[_0x64e8('0x75')][_0x64e8('0x30')][_0x64e8('0xa2')]){throw new Error('No\x20phone\x20column\x20specified');}if(!_0x3f2e77['body'][_0x64e8('0x30')][_0x64e8('0xb9')]){throw new Error(_0x64e8('0xba'));}var _0x8c4c45=path['join'](config[_0x64e8('0xbb')],_0x64e8('0xbc'),_0x3f2e77[_0x64e8('0xbd')]['filename']);fs[_0x64e8('0xbe')](_0x8c4c45,parseInt('0777',0x8));var _0xa2ef2c=require(_0x64e8('0xbf'))[_0x64e8('0xc0')](path['join'](__dirname,_0x64e8('0xc1')),[_0x8c4c45,_0x3f2e77[_0x64e8('0x75')][_0x64e8('0xb2')],_0x3f2e77['body'][_0x64e8('0xb4')],_0x3f2e77[_0x64e8('0x75')][_0x64e8('0x4c')],_0x3f2e77[_0x64e8('0x75')]['CompanyId'],_0x3f2e77['body']['duplicates'],_0x3f2e77[_0x64e8('0x75')][_0x64e8('0xb5')]]);return _0x3e5a44[_0x64e8('0x1a')](0xc8)[_0x64e8('0x1c')]({'message':_0x64e8('0xc2'),'pid':_0xa2ef2c['pid']});}catch(_0x111dd6){return _0x3e5a44[_0x64e8('0x1a')](0x1f4)['send'](_0x111dd6);}};exports[_0x64e8('0xc3')]=function(_0x57492b,_0x18818c,_0x463ff0){var _0x2985b0=fs[_0x64e8('0xc4')](_0x57492b[_0x64e8('0xbd')][_0x64e8('0xc5')]);Papa['parse'](_0x2985b0,{'header':!![],'skipEmptyLines':!![],'preview':0x1,'complete':function(_0x11444d){return _0x18818c['status'](0xc8)[_0x64e8('0x1c')]({'file':_0x57492b[_0x64e8('0xbd')],'fields':_0x11444d[_0x64e8('0xc6')]['fields']});}});};exports[_0x64e8('0xc7')]=function(_0x117115,_0x45a3e5,_0x1d5a34){return db[_0x64e8('0xc8')][_0x64e8('0x71')]({'raw':!![],'attributes':['id'],'where':{'role':_0x64e8('0xc9')}})[_0x64e8('0x24')](function(_0x2dc70b){var _0x2d9b48=![];if(!_0x117115[_0x64e8('0x75')]['ListId']){throw new Error(_0x64e8('0xca'));}if(!_0x117115[_0x64e8('0x75')][_0x64e8('0xcb')]['phone']){throw new Error(_0x64e8('0xcc'));}if(!_0x117115[_0x64e8('0x75')][_0x64e8('0xcb')][_0x64e8('0xb9')]){throw new Error(_0x64e8('0xba'));}if(!_0x117115[_0x64e8('0x75')][_0x64e8('0xb5')]){throw new Error('Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed');}var _0x580f78=require(_0x64e8('0xbf'))[_0x64e8('0xc0')](path[_0x64e8('0x77')](__dirname,_0x64e8('0xcd')),[_0x117115[_0x64e8('0x6c')]['id'],JSON[_0x64e8('0xce')](_0x117115['body']),JSON[_0x64e8('0xce')](_0x2dc70b)]);_0x580f78['on'](_0x64e8('0xcf'),function(_0x5ae400){_0x2d9b48=!![];return _0x45a3e5[_0x64e8('0x1a')](0xc8)[_0x64e8('0x1c')]({'message':_0x64e8('0xd0'),'pid':_0x580f78[_0x64e8('0xd1')]});});_0x580f78['on'](_0x64e8('0xd2'),function(_0x232820){if(_0x232820&&!_0x2d9b48){return _0x45a3e5[_0x64e8('0x1a')](0x1f4)[_0x64e8('0x1c')]({'message':'error\x20child\x20process','pid':_0x580f78[_0x64e8('0xd1')]});}});})[_0x64e8('0x6a')](handleError(_0x45a3e5,null));};
\ No newline at end of file
+var _0x8f1a=['request-promise','moment','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./cmContact.socket','end','status','json','count','offset','Content-Range','reject','save','then','destroy','sendStatus','error','name','send','index','CmContact','describe','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','select','field','color','tools_tags','from','c.deletedAt\x20IS\x20NULL','expr','advancedFilter','parse','forEach','condition','isArray','value','and','tableAlias','\x20IN\x20?','\x20=\x20?','\x20LIKE\x20?','\x20>\x20?','isNil','isEmpty','ListId','c.ListId\x20IN\x20?','concat','filter','replace','\x27\x27\x27\x27','isNumeric','c.id\x20LIKE\x20?','c.phone\x20LIKE\x20?','c.mobile\x20LIKE\x20?','c.fax\x20LIKE\x20?','isEmail','c.email\x20LIKE\x20?','c.lastName\x20LIKE\x20?','Sequelize','QueryTypes','SELECT','COUNT(*)','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','ct.CmContactId\x20=\x20c.id','left_join','t.id\x20=\x20ct.TagId','t.id\x20IN\x20?','sequelize','toString','keyBy','c.*','cm_contact_has_tags','TagIds','Tags','catch','params','displayName','CmCustomField','findAll','cf_','alias','type','merge','body','get','mergeWith','tags','join','info','[CmContact][merge]\x20to\x20%s\x20from\x20%s','CmHopper','[CmContact][merge][destroy][CmHopper],\x20%s','CmHopperBlack','create','update','ChatMessage','ChatOfflineMessage','MailMessage','SmsInteraction','FaxMessage','OpenchannelInteraction','OpenchannelMessage','CmHopperHistory','VoiceCallReport','FaxQueueReport','MailQueueReport','OpenchannelQueueReport','JscriptySessionReport','each','duplicates','show','find','Tag','push','omit','format','startsWith','map','cf_%d','cm_contacts','setFields','id\x20=\x20?','values','phone','findOne','rawAttributes','options','getTags','setTags','getHoppers','includeAll','include','rows','getHopperHistories','getHopperFinals','CmHopperFinal','ContactId','getJscriptySessions','uploadCsv','No\x20ListId\x20specified','binding_keys','binding_values','socket_timestamp','Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed','split','Incorrect\x20binding\x20parameters\x20passed!','zipObject','firstName','No\x20firstName\x20column\x20specified','root','server/files/tmp','file','filename','fork','../../components/import/cm/csv','File\x20uploaded\x20correctly!','pid','upload','createReadStream','meta','User','agent','binding','No\x20phone\x20column\x20specified','child_process','../../components/import/cm/csv2','stringify','start\x20child\x20process\x20correctly!','exit','error\x20child\x20process','html-pdf','eml-format','fast-json-patch'];(function(_0x1beef3,_0x57c4b8){var _0x5af964=function(_0x36f463){while(--_0x36f463){_0x1beef3['push'](_0x1beef3['shift']());}};_0x5af964(++_0x57c4b8);}(_0x8f1a,0x19d));var _0xa8f1=function(_0x5f5272,_0x17432f){_0x5f5272=_0x5f5272-0x0;var _0x36fd3f=_0x8f1a[_0x5f5272];return _0x36fd3f;};'use strict';var pdf=require(_0xa8f1('0x0'));var emlformat=require(_0xa8f1('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xa8f1('0x2'));var rp=require(_0xa8f1('0x3'));var moment=require(_0xa8f1('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xa8f1('0x5'));var util=require(_0xa8f1('0x6'));var path=require(_0xa8f1('0x7'));var sox=require(_0xa8f1('0x8'));var csv=require(_0xa8f1('0x9'));var ejs=require(_0xa8f1('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0xa8f1('0xb'));var crypto=require(_0xa8f1('0xc'));var jsforce=require(_0xa8f1('0xd'));var deskjs=require('desk.js');var toCsv=require(_0xa8f1('0x9'));var querystring=require(_0xa8f1('0xe'));var Papa=require('papaparse');var Redis=require(_0xa8f1('0xf'));var authService=require(_0xa8f1('0x10'));var qs=require(_0xa8f1('0x11'));var hardwareService=require(_0xa8f1('0x12'));var logger=require(_0xa8f1('0x13'))('api');var utils=require(_0xa8f1('0x14'));var config=require(_0xa8f1('0x15'));var db=require(_0xa8f1('0x16'))['db'];config[_0xa8f1('0x17')]=_[_0xa8f1('0x18')](config['redis'],{'host':_0xa8f1('0x19'),'port':0x18eb});var socket=require(_0xa8f1('0x1a'))(new Redis(config[_0xa8f1('0x17')]));require(_0xa8f1('0x1b'))['register'](socket);function respondWithStatusCode(_0x2218e8,_0x5bc55d){_0x5bc55d=_0x5bc55d||0xcc;return function(_0x2f9fb0){if(_0x2f9fb0){return _0x2218e8['sendStatus'](_0x5bc55d);}return _0x2218e8['status'](_0x5bc55d)[_0xa8f1('0x1c')]();};}function respondWithResult(_0x3fb42f,_0x467659){_0x467659=_0x467659||0xc8;return function(_0x2982fd){if(_0x2982fd){return _0x3fb42f[_0xa8f1('0x1d')](_0x467659)[_0xa8f1('0x1e')](_0x2982fd);}};}function respondWithFilteredResult(_0x4e4535,_0x23bdc7){return function(_0x45adc6){if(_0x45adc6){var _0x11d136=_0x45adc6[_0xa8f1('0x1f')],_0x3b3b9a=_0x23bdc7[_0xa8f1('0x20')],_0x4dfbfc=_0x23bdc7['offset']+_0x23bdc7['limit'],_0x24a884;if(_0x4dfbfc>=_0x11d136){_0x4dfbfc=_0x11d136;_0x24a884=0xc8;}else{_0x24a884=0xce;}_0x4e4535[_0xa8f1('0x1d')](_0x24a884);return _0x4e4535['set'](_0xa8f1('0x21'),_0x3b3b9a+'-'+_0x4dfbfc+'/'+_0x11d136)['json'](_0x45adc6);}return null;};}function patchUpdates(_0x2badf1){return function(_0x28c95c){try{jsonpatch['apply'](_0x28c95c,_0x2badf1,!![]);}catch(_0x45fd02){return BPromise[_0xa8f1('0x22')](_0x45fd02);}return _0x28c95c[_0xa8f1('0x23')]();};}function saveUpdates(_0x5d1de,_0x1c3279){return function(_0x15bf8e){if(_0x15bf8e){return _0x15bf8e['update'](_0x5d1de)[_0xa8f1('0x24')](function(_0xee2580){return _0xee2580;});}return null;};}function removeEntity(_0x1fbb08,_0x41a51e){return function(_0x172c72){if(_0x172c72){return _0x172c72[_0xa8f1('0x25')]()[_0xa8f1('0x24')](function(){_0x1fbb08[_0xa8f1('0x1d')](0xcc)[_0xa8f1('0x1c')]();});}};}function handleEntityNotFound(_0x5bd349,_0x39ce95){return function(_0x1bfb4c){if(!_0x1bfb4c){_0x5bd349[_0xa8f1('0x26')](0x194);}return _0x1bfb4c;};}function handleError(_0x5b8519,_0x3f9a8a){_0x3f9a8a=_0x3f9a8a||0x1f4;return function(_0x83ca7a){logger[_0xa8f1('0x27')](_0x83ca7a['stack']);if(_0x83ca7a['name']){delete _0x83ca7a[_0xa8f1('0x28')];}_0x5b8519[_0xa8f1('0x1d')](_0x3f9a8a)[_0xa8f1('0x29')](_0x83ca7a);};}exports[_0xa8f1('0x2a')]=function(_0x1af3de,_0x42046a){var _0x1be227={},_0x423110={},_0x584167={'count':0x0,'rows':[]};return db[_0xa8f1('0x2b')][_0xa8f1('0x2c')]()[_0xa8f1('0x24')](function(_0x124c49){_0x423110[_0xa8f1('0x2d')]=_[_0xa8f1('0x2e')](_0x124c49);_0x423110[_0xa8f1('0x2f')]=_[_0xa8f1('0x2e')](_0x1af3de[_0xa8f1('0x2f')]);_0x423110[_0xa8f1('0x30')]=_[_0xa8f1('0x31')](_0x423110[_0xa8f1('0x2d')],_0x423110[_0xa8f1('0x2f')]);_0x1be227['attributes']=_[_0xa8f1('0x31')](_0x423110[_0xa8f1('0x2d')],qs[_0xa8f1('0x32')](_0x1af3de['query'][_0xa8f1('0x32')]));_0x1be227[_0xa8f1('0x33')]=_0x1be227['attributes'][_0xa8f1('0x34')]?_0x1be227[_0xa8f1('0x33')]:_0x423110[_0xa8f1('0x2d')];if(!_0x1af3de[_0xa8f1('0x2f')][_0xa8f1('0x35')](_0xa8f1('0x36'))){_0x1be227[_0xa8f1('0x37')]=qs[_0xa8f1('0x37')](_0x1af3de[_0xa8f1('0x2f')][_0xa8f1('0x37')]);_0x1be227[_0xa8f1('0x20')]=qs[_0xa8f1('0x20')](_0x1af3de[_0xa8f1('0x2f')]['offset']);}_0x1be227[_0xa8f1('0x38')]=qs['sort'](_0x1af3de[_0xa8f1('0x2f')][_0xa8f1('0x39')]);_0x1be227[_0xa8f1('0x3a')]=qs[_0xa8f1('0x30')](_[_0xa8f1('0x3b')](_0x1af3de['query'],_0x423110[_0xa8f1('0x30')]));var _0xf95e0e=[];var _0x24cf9d=squel[_0xa8f1('0x3c')]()[_0xa8f1('0x3d')]('id')[_0xa8f1('0x3d')](_0xa8f1('0x28'))[_0xa8f1('0x3d')](_0xa8f1('0x3e'))['from'](_0xa8f1('0x3f'));var _0x475c30=squel[_0xa8f1('0x3c')]()[_0xa8f1('0x40')]('cm_contacts','c')['where'](_0xa8f1('0x41'));var _0x21787=squel[_0xa8f1('0x42')]();if(_0x1af3de['query'][_0xa8f1('0x43')]){var _0x2f9158=JSON[_0xa8f1('0x44')](_0x1af3de[_0xa8f1('0x2f')]['advancedFilter']);_['keys'](_0x2f9158)[_0xa8f1('0x45')](function(_0x49b772){var _0xcec681=_0x2f9158[_0x49b772];switch(_0xcec681[_0xa8f1('0x46')]){case'IS':if(_[_0xa8f1('0x47')](_0xcec681['value'])&&_0xcec681[_0xa8f1('0x48')][_0xa8f1('0x34')]>0x1){_0x21787[_0xa8f1('0x49')](_0xcec681[_0xa8f1('0x4a')]+'.'+_0x49b772+_0xa8f1('0x4b'),_0xcec681[_0xa8f1('0x48')]);}else{_0x21787[_0xa8f1('0x49')](_0xcec681['tableAlias']+'.'+_0x49b772+_0xa8f1('0x4c'),_0xcec681[_0xa8f1('0x48')][0x0]);}break;case'=':_0x21787[_0xa8f1('0x49')](_0xcec681['tableAlias']+'.'+_0x49b772+_0xa8f1('0x4c'),_0xcec681['value']);break;case'LIKE':_0x21787[_0xa8f1('0x49')](_0xcec681[_0xa8f1('0x4a')]+'.'+_0x49b772+_0xa8f1('0x4d'),'%'+_0xcec681[_0xa8f1('0x48')]+'%');break;case'>':_0x21787['and'](_0xcec681['tableAlias']+'.'+_0x49b772+_0xa8f1('0x4e'),_0xcec681[_0xa8f1('0x48')]);break;case'<':_0x21787[_0xa8f1('0x49')](_0xcec681['tableAlias']+'.'+_0x49b772+'\x20<\x20?',_0xcec681[_0xa8f1('0x48')]);break;}});}else{var _0x365283=_(Object[_0xa8f1('0x2e')](_0x1af3de['query']))['map'](function(_0x2e7526){return _0x124c49[_0xa8f1('0x35')](_0x2e7526)?_0x2e7526:undefined;})['filter'](function(_0x211a12){return!_[_0xa8f1('0x4f')](_0x211a12);})['value']();if(!_[_0xa8f1('0x50')](_0x365283)){_0x365283[_0xa8f1('0x45')](function(_0x262863){if(_0x262863===_0xa8f1('0x51')){_0x475c30['where'](_0xa8f1('0x52'),[][_0xa8f1('0x53')](_0x1af3de[_0xa8f1('0x2f')][_0x262863]));}else{_0x475c30[_0xa8f1('0x3a')]('c.'+_0x262863+_0xa8f1('0x4c'),_0x1af3de[_0xa8f1('0x2f')][_0x262863]);}});}if(_0x1af3de[_0xa8f1('0x2f')][_0xa8f1('0x54')]){var _0x14eaa6=_0x1af3de[_0xa8f1('0x2f')][_0xa8f1('0x54')][_0xa8f1('0x55')]('\x5c','\x5c\x5c')[_0xa8f1('0x55')]('\x27\x27',_0xa8f1('0x56'));if(qs[_0xa8f1('0x57')](_0x14eaa6)){_0x21787['or'](_0xa8f1('0x58'),_0x14eaa6+'%');_0x21787['or'](_0xa8f1('0x59'),_0x14eaa6+'%');_0x21787['or'](_0xa8f1('0x5a'),_0x14eaa6+'%');_0x21787['or'](_0xa8f1('0x5b'),_0x14eaa6+'%');}else if(qs[_0xa8f1('0x5c')](_0x14eaa6)){_0x21787['or'](_0xa8f1('0x5d'),_0x14eaa6+'%');}else{_0x21787['or']('c.email\x20LIKE\x20?',_0x14eaa6+'%');_0x21787['or']('c.firstName\x20LIKE\x20?',_0x14eaa6+'%');_0x21787['or'](_0xa8f1('0x5e'),_0x14eaa6+'%');}}}_0x475c30['where'](_0x21787);if(_0x1be227[_0xa8f1('0x38')]){_0x1be227[_0xa8f1('0x38')]['forEach'](function(_0x3ded10){_0x475c30[_0xa8f1('0x38')]('c.'+_0x3ded10[0x0],_0x3ded10[0x1]==='DESC'?![]:!![]);});}_0x475c30['group']('c.id');var _0x4514d6={'type':db[_0xa8f1('0x5f')][_0xa8f1('0x60')][_0xa8f1('0x61')],'raw':!![]};var _0xe1cc6a=_0x475c30['clone']()[_0xa8f1('0x3d')](_0xa8f1('0x62'));if(!_0x1af3de[_0xa8f1('0x2f')][_0xa8f1('0x43')]){if(_0x1af3de[_0xa8f1('0x2f')][_0xa8f1('0x63')]){var _0x2e001c=_['isArray'](_0x1af3de['query'][_0xa8f1('0x63')])?_0x1af3de[_0xa8f1('0x2f')][_0xa8f1('0x63')]:new Array(_0x1af3de[_0xa8f1('0x2f')][_0xa8f1('0x63')]);var _0x1afe21=squel[_0xa8f1('0x42')]();_0x2e001c[_0xa8f1('0x45')](function(_0x26f48b){_0x1afe21['or'](_0xa8f1('0x64'),'%,'+_0x26f48b+',%');});_0x475c30['having'](_0x1afe21);_0xe1cc6a['left_join']('cm_contact_has_tags','ct',_0xa8f1('0x65'));_0xe1cc6a[_0xa8f1('0x66')](_0xa8f1('0x3f'),'t',_0xa8f1('0x67'));_0xe1cc6a[_0xa8f1('0x3a')](_0xa8f1('0x68'),_0x2e001c);}}db[_0xa8f1('0x69')][_0xa8f1('0x2f')](_0x24cf9d[_0xa8f1('0x6a')](),_0x4514d6)[_0xa8f1('0x24')](function(_0x1d6a85){_0xf95e0e=_[_0xa8f1('0x6b')](_0x1d6a85,'id');return db[_0xa8f1('0x69')][_0xa8f1('0x2f')](_0xe1cc6a[_0xa8f1('0x6a')](),_0x4514d6);})[_0xa8f1('0x24')](function(_0x1b8157){_0x584167[_0xa8f1('0x1f')]=_0x1b8157[_0xa8f1('0x34')];_0x4514d6=_['merge'](_0x4514d6,{'model':db[_0xa8f1('0x2b')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x475c30[_0xa8f1('0x3d')](_0xa8f1('0x6c'));_0x475c30[_0xa8f1('0x3d')]('GROUP_CONCAT(DISTINCT\x20t.id)','TagIds');_0x475c30[_0xa8f1('0x66')](_0xa8f1('0x6d'),'ct',_0xa8f1('0x65'));_0x475c30[_0xa8f1('0x66')](_0xa8f1('0x3f'),'t',_0xa8f1('0x67'));if(_0x1be227[_0xa8f1('0x37')]){_0x475c30[_0xa8f1('0x37')](_0x1be227[_0xa8f1('0x37')]);}if(_0x1be227[_0xa8f1('0x20')]){_0x475c30[_0xa8f1('0x20')](_0x1be227['offset']);}db[_0xa8f1('0x69')][_0xa8f1('0x2f')](_0x475c30[_0xa8f1('0x6a')](),_0x4514d6)[_0xa8f1('0x24')](function(_0x39ed0d){_0x39ed0d[_0xa8f1('0x45')](function(_0x50f611){if(_0x50f611[_0xa8f1('0x6e')]){_0x50f611[_0xa8f1('0x6f')]=[];_0x50f611[_0xa8f1('0x6e')]['split'](',')[_0xa8f1('0x45')](function(_0x26d417){_0x50f611['Tags']['push'](_0xf95e0e[_0x26d417]);});}delete _0x50f611[_0xa8f1('0x6e')];});_0x584167['rows']=_0x39ed0d;return _0x584167;})[_0xa8f1('0x24')](respondWithFilteredResult(_0x42046a,_0x1be227))[_0xa8f1('0x70')](handleError(_0x42046a,null));});});};exports['destroy']=function(_0x460976,_0x19fb88){return db[_0xa8f1('0x2b')]['find']({'where':{'id':_0x460976[_0xa8f1('0x71')]['id']}})[_0xa8f1('0x24')](handleEntityNotFound(_0x19fb88,null))['then'](removeEntity(_0x19fb88,null))[_0xa8f1('0x70')](handleError(_0x19fb88,null));};exports['describe']=function(_0x4a5d58,_0x54d74e){return db[_0xa8f1('0x2b')][_0xa8f1('0x2c')]()[_0xa8f1('0x24')](function(_0x2c2c70){for(var _0x55b435=0x0;_0x55b435<Object[_0xa8f1('0x2e')](_0x2c2c70)['length'];_0x55b435++){var _0x537026=Object[_0xa8f1('0x2e')](_0x2c2c70)[_0x55b435];if(!_['startsWith'](_0x537026,'cf_')){_0x2c2c70[_0x537026]['columnName']=_0x537026;_0x2c2c70[_0x537026][_0xa8f1('0x72')]=_0x537026;}}return _0x2c2c70;})[_0xa8f1('0x24')](function(_0x46d5dd){var _0x5ab032={'where':{'$or':[{'ListId':_0x4a5d58[_0xa8f1('0x2f')]['id']},{'ListId':null}]},'raw':!![]};return db[_0xa8f1('0x73')][_0xa8f1('0x74')](_0x5ab032)['then'](function(_0x5f135f){for(var _0x2b52b2=0x0;_0x2b52b2<_0x5f135f[_0xa8f1('0x34')];_0x2b52b2++){var _0x361793=_0xa8f1('0x75')+_0x5f135f[_0x2b52b2]['id'];_0x46d5dd[_0x361793]['columnName']=_0x361793;_0x46d5dd[_0x361793][_0xa8f1('0x72')]=_0x5f135f[_0x2b52b2][_0xa8f1('0x76')];_0x46d5dd[_0x361793]['custom']={'type':_0x5f135f[_0x2b52b2][_0xa8f1('0x77')],'values':_0x5f135f[_0x2b52b2]['values']};}Object[_0xa8f1('0x2e')](_0x46d5dd)[_0xa8f1('0x45')](function(_0x3e82c9){if(!_0x46d5dd[_0x3e82c9][_0xa8f1('0x35')]('columnName')){delete _0x46d5dd[_0x3e82c9];}});return _0x46d5dd;});})[_0xa8f1('0x24')](respondWithResult(_0x54d74e,null))[_0xa8f1('0x70')](handleError(_0x54d74e,null));};exports[_0xa8f1('0x78')]=function(_0x11a328,_0x432611){var _0x26c29a;var _0x4bbba1;var _0x3a43d9;if(_0x11a328[_0xa8f1('0x79')]['id']){delete _0x11a328[_0xa8f1('0x79')]['id'];}return db['CmContact'][_0xa8f1('0x74')]({'where':{'id':[_0x11a328['body']['to'],_0x11a328[_0xa8f1('0x79')][_0xa8f1('0x40')]]}})[_0xa8f1('0x24')](function(_0x1fde2b){if(_0x1fde2b){if(_0x1fde2b[_0xa8f1('0x34')]!==0x2){return null;}_0x1fde2b[0x0]=_0x1fde2b[0x0]['get']({'plain':!![]});_0x1fde2b[0x1]=_0x1fde2b[0x1][_0xa8f1('0x7a')]({'plain':!![]});delete _0x1fde2b[0x0]['id'];delete _0x1fde2b[0x1]['id'];return _[_0xa8f1('0x7b')](_0x1fde2b[0x0],_0x1fde2b[0x1],function(_0x5c01c7,_0x40ce4f){if(Array[_0xa8f1('0x47')](_0x40ce4f)&&!_0x40ce4f[_0xa8f1('0x34')]){return _0x5c01c7;}else if(!_0x40ce4f){return _0x5c01c7;}});}})['then'](handleEntityNotFound(_0x432611,null))[_0xa8f1('0x24')](function(_0x1d33c8){if(_0x1d33c8){if(_0x1d33c8[_0xa8f1('0x7c')]&&_[_0xa8f1('0x47')](_0x1d33c8[_0xa8f1('0x7c')])){_0x1d33c8[_0xa8f1('0x7c')]=_0x1d33c8[_0xa8f1('0x7c')][_0xa8f1('0x7d')]();}logger[_0xa8f1('0x7e')](_0xa8f1('0x7f'),_0x11a328[_0xa8f1('0x79')]['to'],_0x11a328[_0xa8f1('0x79')]['from']);return db[_0xa8f1('0x80')][_0xa8f1('0x25')]({'where':{'ContactId':[_0x11a328[_0xa8f1('0x79')]['to'],_0x11a328[_0xa8f1('0x79')][_0xa8f1('0x40')]]}})['then'](function(_0x15af33){logger[_0xa8f1('0x7e')](_0xa8f1('0x81'),_0x15af33);return db[_0xa8f1('0x82')][_0xa8f1('0x25')]({'where':{'ContactId':[_0x11a328[_0xa8f1('0x79')]['to'],_0x11a328[_0xa8f1('0x79')]['from']]}})['then'](function(_0x4174c9){logger[_0xa8f1('0x7e')]('[CmContact][merge][destroy][CmHopperBlack],\x20%s',_0x4174c9);return db['CmContact'][_0xa8f1('0x83')](_0x1d33c8);});});}})[_0xa8f1('0x24')](function(_0x11a256){if(_0x11a256){_0x26c29a=_0x11a256;_0x4bbba1={'ContactId':_0x26c29a['id']};_0x3a43d9={'where':{'ContactId':[_0x11a328[_0xa8f1('0x79')]['to'],_0x11a328[_0xa8f1('0x79')]['from']]}};return db['ChatInteraction'][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})['then'](function(){if(_0x26c29a){return db[_0xa8f1('0x85')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x86')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})['then'](function(){if(_0x26c29a){return db['MailInteraction']['update'](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x87')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db['MailInteraction']['update'](_0x4bbba1,_0x3a43d9);}})['then'](function(){if(_0x26c29a){return db[_0xa8f1('0x87')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})['then'](function(){if(_0x26c29a){return db[_0xa8f1('0x88')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db['SmsMessage'][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db['FaxInteraction']['update'](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x89')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x8a')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x8b')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db['CmHopperFinal'][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x8c')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db['ReportAgentPreview'][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x8d')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db['ChatQueueReport'][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x8e')]['update'](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x8f')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x90')]['update'](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db['SmsQueueReport']['update'](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db[_0xa8f1('0x91')][_0xa8f1('0x84')](_0x4bbba1,_0x3a43d9);}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return db['CmContact'][_0xa8f1('0x25')]({'where':{'id':[_0x11a328[_0xa8f1('0x79')]['to'],_0x11a328[_0xa8f1('0x79')][_0xa8f1('0x40')]]}});}})[_0xa8f1('0x24')](function(){if(_0x26c29a){return _0x26c29a;}})[_0xa8f1('0x24')](respondWithResult(_0x432611,null))['catch'](handleError(_0x432611,null));};exports[_0xa8f1('0x83')]=function(_0x1814b2,_0x223d64){return db[_0xa8f1('0x2b')][_0xa8f1('0x2c')]()['then'](function(_0x22fa31){if(_0x1814b2[_0xa8f1('0x79')][_0xa8f1('0x7c')]&&_[_0xa8f1('0x47')](_0x1814b2[_0xa8f1('0x79')]['tags'])){if(_0x1814b2['body']['tags'][_0xa8f1('0x34')]){_0x1814b2[_0xa8f1('0x79')]['tags']=_0x1814b2['body']['tags'][_0xa8f1('0x7d')](';')+';';}else{_0x1814b2['body'][_0xa8f1('0x7c')]=null;}}else{_0x1814b2[_0xa8f1('0x79')][_0xa8f1('0x7c')]=null;}return db[_0xa8f1('0x2b')][_0xa8f1('0x83')](_0x1814b2[_0xa8f1('0x79')],{'fields':_[_0xa8f1('0x2e')](_0x22fa31),'raw':!![]});})[_0xa8f1('0x24')](respondWithResult(_0x223d64,0xc9))[_0xa8f1('0x70')](handleError(_0x223d64,null));};exports['bulkCreate']=function(_0x1542e2,_0x13439c){var _0x5b38b6=[];var _0x22a7d2=0x0;var _0x439342=0x0;var _0x6c4404=0x0;return db[_0xa8f1('0x2b')]['describe']()[_0xa8f1('0x24')](function(_0xf8868b){return BPromise[_0xa8f1('0x92')](_0x1542e2[_0xa8f1('0x79')],function(_0x1e21be){var _0x51d3c3={'where':{'$or':[]},'defaults':_0x1e21be,'fields':_[_0xa8f1('0x2e')](_0xf8868b),'raw':!![]};if(_0x1e21be[_0xa8f1('0x93')]){for(var _0x3604ba=0x0;_0x3604ba<_0x1e21be['duplicates'][_0xa8f1('0x34')];_0x3604ba++){var _0x4f590e={};_0x4f590e[_0x1e21be[_0xa8f1('0x93')][_0x3604ba]]=_0x1e21be[_0x1e21be[_0xa8f1('0x93')][_0x3604ba]];_0x51d3c3[_0xa8f1('0x3a')]['$or']['push'](_0x4f590e);}_0x51d3c3[_0xa8f1('0x3a')][_0xa8f1('0x51')]=_0x1e21be['ListId'];}return db[_0xa8f1('0x2b')]['findOrCreate'](_0x51d3c3)['spread'](function(_0x54176e,_0x1c5483){if(_0x1c5483){_0x22a7d2++;}else{_0x6c4404++;}})[_0xa8f1('0x70')](function(_0x353a59){console['error'](_0x353a59);_0x439342++;});});})[_0xa8f1('0x24')](function(_0x2d0e77){if(_0x2d0e77){return{'success':_0x22a7d2,'failure':_0x439342,'duplicates':_0x6c4404};}})[_0xa8f1('0x24')](respondWithResult(_0x13439c,0xc9))[_0xa8f1('0x70')](handleError(_0x13439c,null));};exports[_0xa8f1('0x94')]=function(_0x5286a4,_0x4fdf83,_0x26597d){var _0x3a6b73;return db[_0xa8f1('0x2b')][_0xa8f1('0x2c')]()[_0xa8f1('0x24')](function(_0x566488){return db['CmContact'][_0xa8f1('0x95')]({'where':{'id':_0x5286a4[_0xa8f1('0x71')]['id']},'include':[{'model':db[_0xa8f1('0x96')],'as':_0xa8f1('0x6f'),'attributes':['id',_0xa8f1('0x28'),_0xa8f1('0x3e')],'required':_0x5286a4['query'][_0xa8f1('0x63')]?!![]:![]}],'attributes':_[_0xa8f1('0x2e')](_0x566488)});})[_0xa8f1('0x24')](function(_0x321a97){_0x3a6b73=_0x321a97['get']({'plain':!![]});var _0x29a8d6={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x321a97&&_0x321a97[_0xa8f1('0x51')]){if(_0x321a97[_0xa8f1('0x51')]){_0x29a8d6[_0xa8f1('0x3a')]['$and'][_0xa8f1('0x97')]({'ListId':{'$ne':_0x321a97[_0xa8f1('0x51')]}});}}return db[_0xa8f1('0x73')][_0xa8f1('0x74')](_0x29a8d6);})[_0xa8f1('0x24')](function(_0x208ca1){return _[_0xa8f1('0x98')](_0x3a6b73,_['map'](_0x208ca1,function(_0x4300c6){return util[_0xa8f1('0x99')]('cf_%d',_0x4300c6['id']);}));})[_0xa8f1('0x24')](handleEntityNotFound(_0x4fdf83,null))[_0xa8f1('0x24')](respondWithResult(_0x4fdf83,null))['catch'](handleError(_0x4fdf83,null));};exports[_0xa8f1('0x84')]=function(_0xd31c47,_0x4fa9d9){var _0x4b0fc0;if(_0xd31c47[_0xa8f1('0x79')]['id']){delete _0xd31c47[_0xa8f1('0x79')]['id'];}return db[_0xa8f1('0x2b')][_0xa8f1('0x95')]({'where':{'id':_0xd31c47[_0xa8f1('0x71')]['id']}})[_0xa8f1('0x24')](handleEntityNotFound(_0x4fa9d9,null))[_0xa8f1('0x24')](saveUpdates(_0xd31c47[_0xa8f1('0x79')],null))['then'](function(_0x3a6704){_0x4b0fc0=_0x3a6704;var _0x19cc97={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x3a6704&&_0x3a6704['ListId']){if(_0x3a6704[_0xa8f1('0x51')]){_0x19cc97['where']['$and']['push']({'ListId':{'$ne':_0x3a6704[_0xa8f1('0x51')]}});}}return db['CmCustomField'][_0xa8f1('0x74')](_0x19cc97);})[_0xa8f1('0x24')](function(_0x8cad1){if(_0x8cad1){return _['omit'](_['pickBy'](_0xd31c47['body'],function(_0x1cf557,_0x176aa6){return _[_0xa8f1('0x9a')](_0x176aa6,_0xa8f1('0x75'));}),_[_0xa8f1('0x9b')](_0x8cad1,function(_0x39b8fe){return util['format'](_0xa8f1('0x9c'),_0x39b8fe['id']);}));}})[_0xa8f1('0x24')](function(_0x2746b9){if(_0x2746b9&&!_[_0xa8f1('0x50')](_0x2746b9)){var _0x59de93=squel['update']()['table'](_0xa8f1('0x9d'))[_0xa8f1('0x9e')](_0x2746b9)[_0xa8f1('0x3a')](_0xa8f1('0x9f'),_0xd31c47[_0xa8f1('0x71')]['id'])['toParam']();return db[_0xa8f1('0x69')]['query'](_0x59de93['text'],{'replacements':_0x59de93[_0xa8f1('0xa0')]});}})[_0xa8f1('0x24')](function(){if(_0xd31c47['body']['phone']&&_0x4b0fc0){return db[_0xa8f1('0x80')]['update']({'phone':_0xd31c47[_0xa8f1('0x79')][_0xa8f1('0xa1')]},{'where':{'ContactId':_0x4b0fc0['id']}});}})[_0xa8f1('0x24')](function(){return _0x4b0fc0;})[_0xa8f1('0x24')](respondWithResult(_0x4fa9d9,null))[_0xa8f1('0x70')](handleError(_0x4fa9d9,null));};exports['getTags']=function(_0x473fcd,_0x2587a9,_0x18ec3d){var _0x7580={};var _0x453d98={};var _0x49850f;var _0x5b2692;return db[_0xa8f1('0x2b')][_0xa8f1('0xa2')]({'where':{'id':_0x473fcd[_0xa8f1('0x71')]['id']}})[_0xa8f1('0x24')](handleEntityNotFound(_0x2587a9,null))[_0xa8f1('0x24')](function(_0x328360){if(_0x328360){_0x49850f=_0x328360;_0x453d98['model']=_[_0xa8f1('0x2e')](db['Tag'][_0xa8f1('0xa3')]);_0x453d98[_0xa8f1('0x2f')]=_[_0xa8f1('0x2e')](_0x473fcd[_0xa8f1('0x2f')]);_0x453d98[_0xa8f1('0x30')]=_[_0xa8f1('0x31')](_0x453d98[_0xa8f1('0x2d')],_0x453d98[_0xa8f1('0x2f')]);_0x7580[_0xa8f1('0x33')]=_[_0xa8f1('0x31')](_0x453d98[_0xa8f1('0x2d')],qs[_0xa8f1('0x32')](_0x473fcd[_0xa8f1('0x2f')][_0xa8f1('0x32')]));_0x7580[_0xa8f1('0x33')]=_0x7580[_0xa8f1('0x33')][_0xa8f1('0x34')]?_0x7580[_0xa8f1('0x33')]:_0x453d98['model'];_0x7580[_0xa8f1('0x38')]=qs[_0xa8f1('0x39')](_0x473fcd[_0xa8f1('0x2f')][_0xa8f1('0x39')]);_0x7580[_0xa8f1('0x3a')]=qs[_0xa8f1('0x30')](_[_0xa8f1('0x3b')](_0x473fcd[_0xa8f1('0x2f')],_0x453d98[_0xa8f1('0x30')]));if(_0x473fcd[_0xa8f1('0x2f')][_0xa8f1('0x54')]){_0x7580[_0xa8f1('0x3a')]=_['merge'](_0x7580['where'],{'$or':_['map'](_0x7580['attributes'],function(_0x3badd3){var _0x1f2caf={};_0x1f2caf[_0x3badd3]={'$like':'%'+_0x473fcd[_0xa8f1('0x2f')]['filter']+'%'};return _0x1f2caf;})});}_0x7580=_[_0xa8f1('0x78')]({},_0x7580,_0x473fcd[_0xa8f1('0xa4')]);return _0x49850f[_0xa8f1('0xa5')](_0x7580);}})[_0xa8f1('0x24')](function(_0x13a699){if(_0x13a699){_0x5b2692=_0x13a699[_0xa8f1('0x34')];if(!_0x473fcd[_0xa8f1('0x2f')][_0xa8f1('0x35')](_0xa8f1('0x36'))){_0x7580[_0xa8f1('0x37')]=qs[_0xa8f1('0x37')](_0x473fcd[_0xa8f1('0x2f')][_0xa8f1('0x37')]);_0x7580[_0xa8f1('0x20')]=qs['offset'](_0x473fcd['query'][_0xa8f1('0x20')]);}return _0x49850f[_0xa8f1('0xa5')](_0x7580);}})[_0xa8f1('0x24')](function(_0xc7bf9c){if(_0xc7bf9c){return _0xc7bf9c?{'count':_0x5b2692,'rows':_0xc7bf9c}:null;}})[_0xa8f1('0x24')](respondWithResult(_0x2587a9,null))[_0xa8f1('0x70')](handleError(_0x2587a9,null));};exports['setTags']=function(_0x28aa2e,_0x561ebb,_0x424443){if(_0x28aa2e[_0xa8f1('0x79')]['id']){delete _0x28aa2e[_0xa8f1('0x79')]['id'];}return db[_0xa8f1('0x2b')]['findOne']({'where':{'id':_0x28aa2e['params']['id']}})[_0xa8f1('0x24')](handleEntityNotFound(_0x561ebb,null))[_0xa8f1('0x24')](function(_0x44a23e){if(_0x44a23e){return _0x44a23e[_0xa8f1('0xa6')](_0x28aa2e[_0xa8f1('0x79')]['ids']||[]);}return null;})[_0xa8f1('0x24')](respondWithResult(_0x561ebb,null))[_0xa8f1('0x70')](handleError(_0x561ebb,null));};exports[_0xa8f1('0xa7')]=function(_0x3ce147,_0x182339,_0x3f66ce){var _0x5a32b2={'raw':![],'where':{}};var _0x2fd490={};var _0x255b65={'count':0x0,'rows':[]};return db[_0xa8f1('0x2b')]['findOne']({'where':{'id':_0x3ce147[_0xa8f1('0x71')]['id']}})[_0xa8f1('0x24')](handleEntityNotFound(_0x182339,null))[_0xa8f1('0x24')](function(_0x516e50){if(_0x516e50){_0x2fd490[_0xa8f1('0x2d')]=_[_0xa8f1('0x2e')](db['CmHopper']['rawAttributes']);_0x2fd490['query']=_[_0xa8f1('0x2e')](_0x3ce147[_0xa8f1('0x2f')]);_0x2fd490[_0xa8f1('0x30')]=_[_0xa8f1('0x31')](_0x2fd490[_0xa8f1('0x2d')],_0x2fd490[_0xa8f1('0x2f')]);_0x5a32b2['attributes']=_['intersection'](_0x2fd490['model'],qs['fields'](_0x3ce147[_0xa8f1('0x2f')]['fields']));_0x5a32b2[_0xa8f1('0x33')]=_0x5a32b2[_0xa8f1('0x33')]['length']?_0x5a32b2['attributes']:_0x2fd490[_0xa8f1('0x2d')];if(!_0x3ce147['query'][_0xa8f1('0x35')](_0xa8f1('0x36'))){_0x5a32b2[_0xa8f1('0x37')]=qs[_0xa8f1('0x37')](_0x3ce147[_0xa8f1('0x2f')][_0xa8f1('0x37')]);_0x5a32b2[_0xa8f1('0x20')]=qs[_0xa8f1('0x20')](_0x3ce147[_0xa8f1('0x2f')][_0xa8f1('0x20')]);}_0x5a32b2['order']=qs[_0xa8f1('0x39')](_0x3ce147[_0xa8f1('0x2f')][_0xa8f1('0x39')]);_0x5a32b2[_0xa8f1('0x3a')]=qs[_0xa8f1('0x30')](_[_0xa8f1('0x3b')](_0x3ce147[_0xa8f1('0x2f')],_0x2fd490[_0xa8f1('0x30')]));_0x5a32b2[_0xa8f1('0x3a')]['ContactId']=_0x516e50['id'];if(_0x3ce147[_0xa8f1('0x2f')]['filter']){_0x5a32b2[_0xa8f1('0x3a')]=_['merge'](_0x5a32b2[_0xa8f1('0x3a')],{'$or':_[_0xa8f1('0x9b')](_0x5a32b2[_0xa8f1('0x33')],function(_0x26ce6f){var _0x4c8ac5={};_0x4c8ac5[_0x26ce6f]={'$like':'%'+_0x3ce147['query'][_0xa8f1('0x54')]+'%'};return _0x4c8ac5;})});}_0x5a32b2=_[_0xa8f1('0x78')]({},_0x5a32b2,_0x3ce147['options']);return db[_0xa8f1('0x80')][_0xa8f1('0x1f')]({'where':_0x5a32b2['where']})[_0xa8f1('0x24')](function(_0x630f9d){_0x255b65[_0xa8f1('0x1f')]=_0x630f9d;if(_0x3ce147['query'][_0xa8f1('0xa8')]){_0x5a32b2[_0xa8f1('0xa9')]=[{'all':!![]}];}return db[_0xa8f1('0x80')]['findAll'](_0x5a32b2);})[_0xa8f1('0x24')](function(_0x39b163){_0x255b65[_0xa8f1('0xaa')]=_0x39b163;return _0x255b65;});}})['then'](respondWithFilteredResult(_0x182339,_0x5a32b2))['catch'](handleError(_0x182339,null));};exports[_0xa8f1('0xab')]=function(_0x1b898f,_0x803d5c,_0x4b4bdf){var _0xf29b58={'raw':!![],'where':{}};var _0x1319d8={};var _0x53461e={'count':0x0,'rows':[]};return db[_0xa8f1('0x2b')][_0xa8f1('0xa2')]({'where':{'id':_0x1b898f[_0xa8f1('0x71')]['id']}})['then'](handleEntityNotFound(_0x803d5c,null))[_0xa8f1('0x24')](function(_0x3b12b4){if(_0x3b12b4){_0x1319d8[_0xa8f1('0x2d')]=_['keys'](db[_0xa8f1('0x8c')][_0xa8f1('0xa3')]);_0x1319d8[_0xa8f1('0x2f')]=_[_0xa8f1('0x2e')](_0x1b898f['query']);_0x1319d8[_0xa8f1('0x30')]=_[_0xa8f1('0x31')](_0x1319d8['model'],_0x1319d8[_0xa8f1('0x2f')]);_0xf29b58['attributes']=_['intersection'](_0x1319d8[_0xa8f1('0x2d')],qs[_0xa8f1('0x32')](_0x1b898f[_0xa8f1('0x2f')][_0xa8f1('0x32')]));_0xf29b58[_0xa8f1('0x33')]=_0xf29b58[_0xa8f1('0x33')][_0xa8f1('0x34')]?_0xf29b58['attributes']:_0x1319d8[_0xa8f1('0x2d')];if(!_0x1b898f['query'][_0xa8f1('0x35')]('nolimit')){_0xf29b58[_0xa8f1('0x37')]=qs[_0xa8f1('0x37')](_0x1b898f[_0xa8f1('0x2f')][_0xa8f1('0x37')]);_0xf29b58[_0xa8f1('0x20')]=qs[_0xa8f1('0x20')](_0x1b898f[_0xa8f1('0x2f')][_0xa8f1('0x20')]);}_0xf29b58[_0xa8f1('0x38')]=qs[_0xa8f1('0x39')](_0x1b898f['query'][_0xa8f1('0x39')]);_0xf29b58['where']=qs[_0xa8f1('0x30')](_[_0xa8f1('0x3b')](_0x1b898f[_0xa8f1('0x2f')],_0x1319d8[_0xa8f1('0x30')]));_0xf29b58[_0xa8f1('0x3a')]['ContactId']=_0x3b12b4['id'];if(_0x1b898f[_0xa8f1('0x2f')]['filter']){_0xf29b58[_0xa8f1('0x3a')]=_[_0xa8f1('0x78')](_0xf29b58[_0xa8f1('0x3a')],{'$or':_[_0xa8f1('0x9b')](_0xf29b58[_0xa8f1('0x33')],function(_0x2de459){var _0x4f42f8={};_0x4f42f8[_0x2de459]={'$like':'%'+_0x1b898f[_0xa8f1('0x2f')][_0xa8f1('0x54')]+'%'};return _0x4f42f8;})});}_0xf29b58=_['merge']({},_0xf29b58,_0x1b898f[_0xa8f1('0xa4')]);return db[_0xa8f1('0x8c')][_0xa8f1('0x1f')]({'where':_0xf29b58[_0xa8f1('0x3a')]})[_0xa8f1('0x24')](function(_0x3c3d88){_0x53461e[_0xa8f1('0x1f')]=_0x3c3d88;if(_0x1b898f['query'][_0xa8f1('0xa8')]){_0xf29b58[_0xa8f1('0xa9')]=[{'all':!![]}];}return db[_0xa8f1('0x8c')][_0xa8f1('0x74')](_0xf29b58);})[_0xa8f1('0x24')](function(_0x5d26a5){_0x53461e[_0xa8f1('0xaa')]=_0x5d26a5;return _0x53461e;});}})[_0xa8f1('0x24')](respondWithFilteredResult(_0x803d5c,_0xf29b58))['catch'](handleError(_0x803d5c,null));};exports[_0xa8f1('0xac')]=function(_0x17b4e3,_0x475b27,_0x10294c){var _0x459f83={'raw':!![],'where':{}};var _0x211463={};var _0x1491e0={'count':0x0,'rows':[]};return db[_0xa8f1('0x2b')][_0xa8f1('0xa2')]({'where':{'id':_0x17b4e3[_0xa8f1('0x71')]['id']}})[_0xa8f1('0x24')](handleEntityNotFound(_0x475b27,null))[_0xa8f1('0x24')](function(_0x3a9b41){if(_0x3a9b41){_0x211463[_0xa8f1('0x2d')]=_[_0xa8f1('0x2e')](db[_0xa8f1('0xad')]['rawAttributes']);_0x211463[_0xa8f1('0x2f')]=_[_0xa8f1('0x2e')](_0x17b4e3[_0xa8f1('0x2f')]);_0x211463[_0xa8f1('0x30')]=_[_0xa8f1('0x31')](_0x211463[_0xa8f1('0x2d')],_0x211463[_0xa8f1('0x2f')]);_0x459f83['attributes']=_[_0xa8f1('0x31')](_0x211463['model'],qs[_0xa8f1('0x32')](_0x17b4e3[_0xa8f1('0x2f')]['fields']));_0x459f83[_0xa8f1('0x33')]=_0x459f83[_0xa8f1('0x33')][_0xa8f1('0x34')]?_0x459f83[_0xa8f1('0x33')]:_0x211463['model'];if(!_0x17b4e3[_0xa8f1('0x2f')][_0xa8f1('0x35')](_0xa8f1('0x36'))){_0x459f83[_0xa8f1('0x37')]=qs[_0xa8f1('0x37')](_0x17b4e3[_0xa8f1('0x2f')][_0xa8f1('0x37')]);_0x459f83['offset']=qs[_0xa8f1('0x20')](_0x17b4e3[_0xa8f1('0x2f')][_0xa8f1('0x20')]);}_0x459f83['order']=qs[_0xa8f1('0x39')](_0x17b4e3[_0xa8f1('0x2f')][_0xa8f1('0x39')]);_0x459f83['where']=qs['filters'](_[_0xa8f1('0x3b')](_0x17b4e3[_0xa8f1('0x2f')],_0x211463[_0xa8f1('0x30')]));_0x459f83[_0xa8f1('0x3a')][_0xa8f1('0xae')]=_0x3a9b41['id'];if(_0x17b4e3[_0xa8f1('0x2f')][_0xa8f1('0x54')]){_0x459f83[_0xa8f1('0x3a')]=_[_0xa8f1('0x78')](_0x459f83['where'],{'$or':_[_0xa8f1('0x9b')](_0x459f83[_0xa8f1('0x33')],function(_0x1f8788){var _0x1bc96e={};_0x1bc96e[_0x1f8788]={'$like':'%'+_0x17b4e3['query'][_0xa8f1('0x54')]+'%'};return _0x1bc96e;})});}_0x459f83=_[_0xa8f1('0x78')]({},_0x459f83,_0x17b4e3[_0xa8f1('0xa4')]);return db[_0xa8f1('0xad')]['count']({'where':_0x459f83[_0xa8f1('0x3a')]})[_0xa8f1('0x24')](function(_0x5099b0){_0x1491e0[_0xa8f1('0x1f')]=_0x5099b0;if(_0x17b4e3[_0xa8f1('0x2f')][_0xa8f1('0xa8')]){_0x459f83[_0xa8f1('0xa9')]=[{'all':!![]}];}return db[_0xa8f1('0xad')][_0xa8f1('0x74')](_0x459f83);})[_0xa8f1('0x24')](function(_0x4f18e3){_0x1491e0[_0xa8f1('0xaa')]=_0x4f18e3;return _0x1491e0;});}})['then'](respondWithFilteredResult(_0x475b27,_0x459f83))[_0xa8f1('0x70')](handleError(_0x475b27,null));};exports[_0xa8f1('0xaf')]=function(_0x5d612e,_0x52b74f,_0x4266fc){var _0x129172={'raw':!![],'where':{}};var _0x27e775={};var _0x2c2287={'count':0x0,'rows':[]};return db[_0xa8f1('0x2b')]['findOne']({'where':{'id':_0x5d612e[_0xa8f1('0x71')]['id']}})[_0xa8f1('0x24')](handleEntityNotFound(_0x52b74f,null))[_0xa8f1('0x24')](function(_0x55be3b){if(_0x55be3b){_0x27e775[_0xa8f1('0x2d')]=_[_0xa8f1('0x2e')](db[_0xa8f1('0x91')][_0xa8f1('0xa3')]);_0x27e775[_0xa8f1('0x2f')]=_[_0xa8f1('0x2e')](_0x5d612e[_0xa8f1('0x2f')]);_0x27e775[_0xa8f1('0x30')]=_[_0xa8f1('0x31')](_0x27e775['model'],_0x27e775[_0xa8f1('0x2f')]);_0x129172['attributes']=_[_0xa8f1('0x31')](_0x27e775[_0xa8f1('0x2d')],qs[_0xa8f1('0x32')](_0x5d612e['query'][_0xa8f1('0x32')]));_0x129172[_0xa8f1('0x33')]=_0x129172[_0xa8f1('0x33')][_0xa8f1('0x34')]?_0x129172[_0xa8f1('0x33')]:_0x27e775['model'];if(!_0x5d612e['query'][_0xa8f1('0x35')](_0xa8f1('0x36'))){_0x129172[_0xa8f1('0x37')]=qs[_0xa8f1('0x37')](_0x5d612e[_0xa8f1('0x2f')][_0xa8f1('0x37')]);_0x129172[_0xa8f1('0x20')]=qs[_0xa8f1('0x20')](_0x5d612e[_0xa8f1('0x2f')][_0xa8f1('0x20')]);}_0x129172[_0xa8f1('0x38')]=qs[_0xa8f1('0x39')](_0x5d612e[_0xa8f1('0x2f')][_0xa8f1('0x39')]);_0x129172['where']=qs[_0xa8f1('0x30')](_[_0xa8f1('0x3b')](_0x5d612e[_0xa8f1('0x2f')],_0x27e775[_0xa8f1('0x30')]));_0x129172['where'][_0xa8f1('0xae')]=_0x55be3b['id'];if(_0x5d612e[_0xa8f1('0x2f')][_0xa8f1('0x54')]){_0x129172['where']=_[_0xa8f1('0x78')](_0x129172[_0xa8f1('0x3a')],{'$or':_[_0xa8f1('0x9b')](_0x129172[_0xa8f1('0x33')],function(_0x1830c6){var _0xb07847={};_0xb07847[_0x1830c6]={'$like':'%'+_0x5d612e[_0xa8f1('0x2f')][_0xa8f1('0x54')]+'%'};return _0xb07847;})});}_0x129172=_['merge']({},_0x129172,_0x5d612e['options']);return db[_0xa8f1('0x91')][_0xa8f1('0x1f')]({'where':_0x129172[_0xa8f1('0x3a')]})[_0xa8f1('0x24')](function(_0x3cf0bf){_0x2c2287['count']=_0x3cf0bf;if(_0x5d612e[_0xa8f1('0x2f')]['includeAll']){_0x129172[_0xa8f1('0xa9')]=[{'all':!![]}];}return db[_0xa8f1('0x91')][_0xa8f1('0x74')](_0x129172);})['then'](function(_0x524f29){_0x2c2287[_0xa8f1('0xaa')]=_0x524f29;return _0x2c2287;});}})[_0xa8f1('0x24')](respondWithFilteredResult(_0x52b74f,_0x129172))[_0xa8f1('0x70')](handleError(_0x52b74f,null));};exports[_0xa8f1('0xb0')]=function(_0xa5fe40,_0x779a6b,_0x431a46){try{if(!_0xa5fe40[_0xa8f1('0x79')][_0xa8f1('0x51')]){throw new Error(_0xa8f1('0xb1'));}if(!_0xa5fe40[_0xa8f1('0x79')][_0xa8f1('0xb2')]){throw new Error('No\x20association\x20keys\x20specified!');}if(!_0xa5fe40['body'][_0xa8f1('0xb3')]){throw new Error('No\x20association\x20values\x20specified!');}if(!_0xa5fe40['body'][_0xa8f1('0xb4')]){throw new Error(_0xa8f1('0xb5'));}var _0x1f1776=_0xa5fe40[_0xa8f1('0x79')][_0xa8f1('0xb2')]['split'](',');var _0x57f8de=_0xa5fe40[_0xa8f1('0x79')][_0xa8f1('0xb3')][_0xa8f1('0xb6')](',');if(!_0x1f1776[_0xa8f1('0x34')]||!_0x57f8de['length']||_0x1f1776[_0xa8f1('0x34')]!==_0x57f8de[_0xa8f1('0x34')]){throw new Error(_0xa8f1('0xb7'));}_0xa5fe40['body']['fields']=_[_0xa8f1('0xb8')](_0x1f1776,_0x57f8de);if(!_0xa5fe40[_0xa8f1('0x79')]['fields'][_0xa8f1('0xa1')]){throw new Error('No\x20phone\x20column\x20specified');}if(!_0xa5fe40['body']['fields'][_0xa8f1('0xb9')]){throw new Error(_0xa8f1('0xba'));}var _0x55e73c=path[_0xa8f1('0x7d')](config[_0xa8f1('0xbb')],_0xa8f1('0xbc'),_0xa5fe40[_0xa8f1('0xbd')][_0xa8f1('0xbe')]);fs['chmodSync'](_0x55e73c,parseInt('0777',0x8));var _0x5ae4d5=require('child_process')[_0xa8f1('0xbf')](path[_0xa8f1('0x7d')](__dirname,_0xa8f1('0xc0')),[_0x55e73c,_0xa5fe40[_0xa8f1('0x79')]['binding_keys'],_0xa5fe40[_0xa8f1('0x79')][_0xa8f1('0xb3')],_0xa5fe40[_0xa8f1('0x79')][_0xa8f1('0x51')],_0xa5fe40['body']['CompanyId'],_0xa5fe40['body'][_0xa8f1('0x93')],_0xa5fe40['body']['socket_timestamp']]);return _0x779a6b[_0xa8f1('0x1d')](0xc8)[_0xa8f1('0x1e')]({'message':_0xa8f1('0xc1'),'pid':_0x5ae4d5[_0xa8f1('0xc2')]});}catch(_0x111285){return _0x779a6b[_0xa8f1('0x1d')](0x1f4)[_0xa8f1('0x29')](_0x111285);}};exports[_0xa8f1('0xc3')]=function(_0x4a43b9,_0x1b18bc,_0x59dce0){var _0x52cefe=fs[_0xa8f1('0xc4')](_0x4a43b9[_0xa8f1('0xbd')][_0xa8f1('0x7')]);Papa[_0xa8f1('0x44')](_0x52cefe,{'header':!![],'skipEmptyLines':!![],'preview':0x1,'complete':function(_0x5192f0){return _0x1b18bc[_0xa8f1('0x1d')](0xc8)['json']({'file':_0x4a43b9[_0xa8f1('0xbd')],'fields':_0x5192f0[_0xa8f1('0xc5')][_0xa8f1('0x32')]});}});};exports['import']=function(_0x19df5d,_0x51cdba,_0x4ea37c){return db[_0xa8f1('0xc6')][_0xa8f1('0x74')]({'raw':!![],'attributes':['id'],'where':{'role':_0xa8f1('0xc7')}})[_0xa8f1('0x24')](function(_0x1424ec){var _0x12dc7d=![];if(!_0x19df5d[_0xa8f1('0x79')][_0xa8f1('0x51')]){throw new Error('No\x20ListId\x20specified');}if(!_0x19df5d[_0xa8f1('0x79')][_0xa8f1('0xc8')]['phone']){throw new Error(_0xa8f1('0xc9'));}if(!_0x19df5d[_0xa8f1('0x79')]['binding']['firstName']){throw new Error(_0xa8f1('0xba'));}if(!_0x19df5d[_0xa8f1('0x79')][_0xa8f1('0xb4')]){throw new Error(_0xa8f1('0xb5'));}var _0x10c0f0=require(_0xa8f1('0xca'))[_0xa8f1('0xbf')](path[_0xa8f1('0x7d')](__dirname,_0xa8f1('0xcb')),[_0x19df5d[_0xa8f1('0x71')]['id'],JSON[_0xa8f1('0xcc')](_0x19df5d['body']),JSON[_0xa8f1('0xcc')](_0x1424ec)]);_0x10c0f0['on']('message',function(_0x5e3a48){_0x12dc7d=!![];return _0x51cdba[_0xa8f1('0x1d')](0xc8)[_0xa8f1('0x1e')]({'message':_0xa8f1('0xcd'),'pid':_0x10c0f0['pid']});});_0x10c0f0['on'](_0xa8f1('0xce'),function(_0x37066b){if(_0x37066b&&!_0x12dc7d){return _0x51cdba[_0xa8f1('0x1d')](0x1f4)[_0xa8f1('0x1e')]({'message':_0xa8f1('0xcf'),'pid':_0x10c0f0[_0xa8f1('0xc2')]});}});})['catch'](handleError(_0x51cdba,null));};
\ No newline at end of file
index 3942c23..928d189 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x624b=['events','../../mysqldb','CmContact','save','update','emit','hasOwnProperty','hook','exports'];(function(_0x4794ac,_0x5a286e){var _0x377576=function(_0x3451b3){while(--_0x3451b3){_0x4794ac['push'](_0x4794ac['shift']());}};_0x377576(++_0x5a286e);}(_0x624b,0x1b0));var _0xb624=function(_0x254f21,_0x53b49a){_0x254f21=_0x254f21-0x0;var _0x3b863f=_0x624b[_0x254f21];return _0x3b863f;};'use strict';var EventEmitter=require(_0xb624('0x0'));var CmContact=require(_0xb624('0x1'))['db'][_0xb624('0x2')];var CmContactEvents=new EventEmitter();CmContactEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xb624('0x3'),'afterUpdate':_0xb624('0x4'),'afterDestroy':'remove'};function emitEvent(_0x4fe5cb){return function(_0x4c899c,_0x106518,_0x2b1543){CmContactEvents[_0xb624('0x5')](_0x4fe5cb+':'+_0x4c899c['id'],_0x4c899c);CmContactEvents[_0xb624('0x5')](_0x4fe5cb,_0x4c899c);_0x2b1543(null);};}for(var e in events){if(events[_0xb624('0x6')](e)){var event=events[e];CmContact[_0xb624('0x7')](e,emitEvent(event));}}module[_0xb624('0x8')]=CmContactEvents;
\ No newline at end of file
+var _0x3483=['save','update','remove','emit','hasOwnProperty','hook','setMaxListeners'];(function(_0x16fe4c,_0x2421e8){var _0x9999d=function(_0x26160a){while(--_0x26160a){_0x16fe4c['push'](_0x16fe4c['shift']());}};_0x9999d(++_0x2421e8);}(_0x3483,0x7d));var _0x3348=function(_0x2d61a9,_0x66e684){_0x2d61a9=_0x2d61a9-0x0;var _0x2b666c=_0x3483[_0x2d61a9];return _0x2b666c;};'use strict';var EventEmitter=require('events');var CmContact=require('../../mysqldb')['db']['CmContact'];var CmContactEvents=new EventEmitter();CmContactEvents[_0x3348('0x0')](0x0);var events={'afterCreate':_0x3348('0x1'),'afterUpdate':_0x3348('0x2'),'afterDestroy':_0x3348('0x3')};function emitEvent(_0x139644){return function(_0x523b05,_0x331482,_0x54f066){CmContactEvents[_0x3348('0x4')](_0x139644+':'+_0x523b05['id'],_0x523b05);CmContactEvents[_0x3348('0x4')](_0x139644,_0x523b05);_0x54f066(null);};}for(var e in events){if(events[_0x3348('0x5')](e)){var event=events[e];CmContact[_0x3348('0x6')](e,emitEvent(event));}}module['exports']=CmContactEvents;
\ No newline at end of file
index 759a193..825ea03 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeeef=['\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','CmHopperFinal','isNil','cmContact,\x20afterCreate,\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\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\x20hopperFinal\x20Campaign\x20','findAll','dialCheckDuplicateType','CmList','Lists','length','always','onlyIfOpen','outbound','BlackLists','CmHopperBlack','cmContact,\x20%s,\x20%s','message','Campaign','List\x20not\x20found','isEmpty','destroy','ContactId','VoiceQueueId','push','all','info','[CmContact][afterDestroy][Succesfull]','[CmContact][afterDestroy][Error]','lodash','util','api','moment','path','rimraf','./cmContact.attributes','exports','cm_contacts','phone','models','get','error','afterCreate','inspect','CmHopper','findOne','then','cmContact,\x20afterCreate\x20','\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'];(function(_0x1a9204,_0x1c9e00){var _0x17ca68=function(_0x1f4399){while(--_0x1f4399){_0x1a9204['push'](_0x1a9204['shift']());}};_0x17ca68(++_0x1c9e00);}(_0xeeef,0x95));var _0xfeee=function(_0x5f5134,_0x4eae86){_0x5f5134=_0x5f5134-0x0;var _0x4382ee=_0xeeef[_0x5f5134];return _0x4382ee;};'use strict';var _=require(_0xfeee('0x0'));var util=require(_0xfeee('0x1'));var logger=require('../../config/logger')(_0xfeee('0x2'));var moment=require(_0xfeee('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0xfeee('0x4'));var rimraf=require(_0xfeee('0x5'));var config=require('../../config/environment');var attributes=require(_0xfeee('0x6'));module[_0xfeee('0x7')]=function(_0x5cc5f9,_0x586783){return _0x5cc5f9['define']('CmContact',attributes,{'tableName':_0xfeee('0x8'),'paranoid':!![],'indexes':[{'name':_0xfeee('0x9'),'fields':['phone']}],'timestamps':!![],'hooks':{'afterCreate':function(_0x1ed301,_0x4980c4,_0x15a74e){var _0x45752f=_0x5cc5f9[_0xfeee('0xa')];var _0x341984=_0x1ed301[_0xfeee('0xb')]({'plain':!![]});function _0x5908ef(){return function(_0x4a683c){logger[_0xfeee('0xc')]('cmContact',_0xfeee('0xd'),util[_0xfeee('0xe')](_0x4a683c,{'showHidden':![],'depth':null}));};}var _0x3394d8=function(_0x5d7c3f){return new BPromise(function(_0x30f062,_0x3724f8){_0x45752f[_0xfeee('0xf')][_0xfeee('0x10')]({'where':{'phone':_0x341984[_0xfeee('0x9')],'VoiceQueueId':_0x5d7c3f['id']}})[_0xfeee('0x11')](function(_0x5c12f9){if(!_['isNil'](_0x5c12f9)){throw new Error(_0xfeee('0x12')+_0x341984[_0xfeee('0x9')]+_0xfeee('0x13')+_0x5d7c3f['id']);}return _0x45752f[_0xfeee('0xf')][_0xfeee('0x14')]({'phone':_0x341984['phone'],'ContactId':_0x341984['id'],'ListId':_0x341984[_0xfeee('0x15')],'priority':_0x341984[_0xfeee('0x16')]?_0x341984[_0xfeee('0x16')]:0x2,'scheduledat':_0x341984[_0xfeee('0x17')]?_0x341984['scheduledat']:moment()[_0xfeee('0x18')](_0xfeee('0x19')),'callback':_0x341984['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x341984[_0xfeee('0x1a')]?_0x341984[_0xfeee('0x1a')]:undefined,'callbackat':_0x341984['callbackUniqueid']?moment()[_0xfeee('0x18')](_0xfeee('0x19')):undefined,'VoiceQueueId':_0x5d7c3f['id']});})[_0xfeee('0x1b')](function(_0x423d0f){_0x3724f8(_0x423d0f);});});};var _0x49ec3a=function(_0x563c23){return new BPromise(function(_0x408718,_0x1178ba){_0x45752f[_0xfeee('0xf')][_0xfeee('0x10')]({'where':{'phone':_0x341984[_0xfeee('0x9')],'VoiceQueueId':_0x563c23['id']}})[_0xfeee('0x11')](function(_0x2d565d){if(!_['isNil'](_0x2d565d)){throw new Error(_0xfeee('0x12')+_0x341984[_0xfeee('0x9')]+_0xfeee('0x1c')+_0x563c23['id']);}return _0x45752f[_0xfeee('0x1d')][_0xfeee('0x10')]({'where':{'calleridnum':_0x341984['phone'],'VoiceQueueId':_0x563c23['id']}});})[_0xfeee('0x11')](function(_0x6bc122){if(!_[_0xfeee('0x1e')](_0x6bc122)){throw new Error(_0xfeee('0x1f')+_0x341984[_0xfeee('0x9')]+_0xfeee('0x20')+_0x563c23['id']);}return _0x45752f[_0xfeee('0xf')][_0xfeee('0x14')]({'phone':_0x341984['phone'],'ContactId':_0x341984['id'],'ListId':_0x341984[_0xfeee('0x15')],'priority':_0x341984['priority']?_0x341984[_0xfeee('0x16')]:0x2,'scheduledat':_0x341984[_0xfeee('0x17')]?_0x341984[_0xfeee('0x17')]:moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0x341984['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x341984['callbackUniqueid']?_0x341984[_0xfeee('0x1a')]:undefined,'callbackat':_0x341984[_0xfeee('0x1a')]?moment()['format']('YYYY-MM-DD\x20HH:mm:ss'):undefined,'VoiceQueueId':_0x563c23['id']});})['catch'](function(_0x4adaa3){_0x1178ba(_0x4adaa3);});});};function _0x1c72a2(){return function(_0x2376a5){logger[_0xfeee('0xc')](_0xfeee('0x21'),_0xfeee('0xd'),util[_0xfeee('0xe')](_0x2376a5,{'showHidden':![],'depth':null}));};}var _0x435bb2=function(_0x4a01fd){return new BPromise(function(_0x1e0e00,_0x20a616){_0x45752f['CmHopper'][_0xfeee('0x10')]({'where':{'phone':_0x341984[_0xfeee('0x9')],'CampaignId':_0x4a01fd['id']}})[_0xfeee('0x11')](function(_0x4d4063){if(!_[_0xfeee('0x1e')](_0x4d4063)){throw new Error(_0xfeee('0x12')+_0x341984['phone']+_0xfeee('0x22')+_0x4a01fd['id']);}return _0x45752f['CmHopper']['create']({'phone':_0x341984['phone'],'ContactId':_0x341984['id'],'ListId':_0x341984['ListId'],'priority':_0x341984[_0xfeee('0x16')]?_0x341984[_0xfeee('0x16')]:0x2,'scheduledat':_0x341984[_0xfeee('0x17')]?_0x341984['scheduledat']:moment()[_0xfeee('0x18')](_0xfeee('0x19')),'callback':_0x341984[_0xfeee('0x1a')]?!![]:![],'callbackuniqueid':_0x341984[_0xfeee('0x1a')]?_0x341984[_0xfeee('0x1a')]:undefined,'callbackat':_0x341984[_0xfeee('0x1a')]?moment()[_0xfeee('0x18')](_0xfeee('0x19')):undefined,'CampaignId':_0x4a01fd['id']});})[_0xfeee('0x1b')](function(_0x2e8066){_0x20a616(_0x2e8066);});});};var _0x531e85=function(_0xf9aac3){return new BPromise(function(_0x3d9191,_0x21dcef){_0x45752f[_0xfeee('0xf')]['findOne']({'where':{'phone':_0x341984[_0xfeee('0x9')],'CampaignId':_0xf9aac3['id']}})[_0xfeee('0x11')](function(_0x2911b8){if(!_[_0xfeee('0x1e')](_0x2911b8)){throw new Error(_0xfeee('0x12')+_0x341984[_0xfeee('0x9')]+'\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20Campaign\x20'+_0xf9aac3['id']);}return _0x45752f[_0xfeee('0x1d')][_0xfeee('0x10')]({'where':{'calleridnum':_0x341984[_0xfeee('0x9')],'CampaignId':_0xf9aac3['id']}});})[_0xfeee('0x11')](function(_0xd2c05c){if(!_[_0xfeee('0x1e')](_0xd2c05c)){throw new Error(_0xfeee('0x1f')+_0x341984[_0xfeee('0x9')]+_0xfeee('0x23')+_0xf9aac3['id']);}return _0x45752f[_0xfeee('0xf')]['create']({'phone':_0x341984[_0xfeee('0x9')],'ContactId':_0x341984['id'],'ListId':_0x341984[_0xfeee('0x15')],'priority':_0x341984[_0xfeee('0x16')]?_0x341984['priority']:0x2,'scheduledat':_0x341984[_0xfeee('0x17')]?_0x341984['scheduledat']:moment()['format'](_0xfeee('0x19')),'callback':_0x341984['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x341984[_0xfeee('0x1a')]?_0x341984[_0xfeee('0x1a')]:undefined,'callbackat':_0x341984[_0xfeee('0x1a')]?moment()['format'](_0xfeee('0x19')):undefined,'CampaignId':_0xf9aac3['id']});})[_0xfeee('0x1b')](function(_0xa6adef){_0x21dcef(_0xa6adef);});});};if(_0x341984[_0xfeee('0x15')]){_0x45752f['VoiceQueue'][_0xfeee('0x24')]({'where':{'type':'outbound'},'attributes':['id',_0xfeee('0x25')],'include':[{'model':_0x45752f[_0xfeee('0x26')],'as':_0xfeee('0x27'),'where':{'id':_0x341984[_0xfeee('0x15')]}}]})[_0xfeee('0x11')](function(_0x28731f){if(_0x28731f){var _0x3373e4=[];for(var _0x1b4e20=0x0,_0x251c2b;_0x1b4e20<_0x28731f[_0xfeee('0x28')];_0x1b4e20+=0x1){_0x251c2b=_0x28731f[_0x1b4e20][_0xfeee('0xb')]({'plain':!![]});switch(_0x251c2b[_0xfeee('0x25')]){case _0xfeee('0x29'):_0x49ec3a(_0x251c2b)[_0xfeee('0x1b')](_0x5908ef());break;case _0xfeee('0x2a'):_0x3394d8(_0x251c2b)[_0xfeee('0x1b')](_0x5908ef());break;default:_0x45752f[_0xfeee('0xf')][_0xfeee('0x14')]({'phone':_0x341984[_0xfeee('0x9')],'ContactId':_0x341984['id'],'ListId':_0x341984[_0xfeee('0x15')],'scheduledat':_0x341984[_0xfeee('0x17')]?_0x341984[_0xfeee('0x17')]:moment()[_0xfeee('0x18')](_0xfeee('0x19')),'priority':_0x341984[_0xfeee('0x16')]?_0x341984['priority']:0x2,'callback':_0x341984[_0xfeee('0x1a')]?!![]:![],'callbackuniqueid':_0x341984['callbackUniqueid']?_0x341984[_0xfeee('0x1a')]:undefined,'callbackat':_0x341984[_0xfeee('0x1a')]?moment()[_0xfeee('0x18')](_0xfeee('0x19')):undefined,'VoiceQueueId':_0x251c2b['id']})[_0xfeee('0x1b')](_0x5908ef());}}}})[_0xfeee('0x11')](function(){return _0x45752f['VoiceQueue'][_0xfeee('0x24')]({'where':{'type':_0xfeee('0x2b')},'attributes':['id'],'include':[{'model':_0x45752f['CmList'],'as':_0xfeee('0x2c'),'where':{'id':_0x341984[_0xfeee('0x15')]}}]})[_0xfeee('0x11')](function(_0x1f47d1){if(_0x1f47d1){var _0x12eec4=[];for(var _0x479373=0x0,_0x349c76;_0x479373<_0x1f47d1[_0xfeee('0x28')];_0x479373+=0x1){_0x349c76=_0x1f47d1[_0x479373][_0xfeee('0xb')]({'plain':!![]});_0x45752f[_0xfeee('0x2d')][_0xfeee('0x14')]({'phone':_0x341984[_0xfeee('0x9')],'ContactId':_0x341984['id'],'ListId':_0x341984[_0xfeee('0x15')],'VoiceQueueId':_0x349c76['id']})[_0xfeee('0x1b')](function(_0x23f7e5){logger[_0xfeee('0xc')](_0xfeee('0x2e'),_0xfeee('0xd'),_0x23f7e5[_0xfeee('0x2f')]);});}}});})['then'](function(){return _0x45752f['Campaign'][_0xfeee('0x24')]({'attributes':['id','dialCheckDuplicateType'],'include':[{'model':_0x45752f[_0xfeee('0x26')],'as':'Lists','where':{'id':_0x341984['ListId']}}]})[_0xfeee('0x11')](function(_0x2a9618){if(_0x2a9618){var _0x3e80dc=[];for(var _0x37a6c0=0x0,_0x5da26d;_0x37a6c0<_0x2a9618[_0xfeee('0x28')];_0x37a6c0+=0x1){_0x5da26d=_0x2a9618[_0x37a6c0][_0xfeee('0xb')]({'plain':!![]});switch(_0x5da26d[_0xfeee('0x25')]){case _0xfeee('0x29'):_0x531e85(_0x5da26d)[_0xfeee('0x1b')](_0x1c72a2());break;case'onlyIfOpen':_0x435bb2(_0x5da26d)[_0xfeee('0x1b')](_0x1c72a2());break;default:_0x45752f[_0xfeee('0xf')][_0xfeee('0x14')]({'phone':_0x341984['phone'],'ContactId':_0x341984['id'],'ListId':_0x341984[_0xfeee('0x15')],'scheduledat':_0x341984['scheduledat']?_0x341984[_0xfeee('0x17')]:moment()[_0xfeee('0x18')]('YYYY-MM-DD\x20HH:mm:ss'),'priority':_0x341984[_0xfeee('0x16')]?_0x341984[_0xfeee('0x16')]:0x2,'callback':_0x341984[_0xfeee('0x1a')]?!![]:![],'callbackuniqueid':_0x341984[_0xfeee('0x1a')]?_0x341984[_0xfeee('0x1a')]:undefined,'callbackat':_0x341984['callbackUniqueid']?moment()[_0xfeee('0x18')](_0xfeee('0x19')):undefined,'CampaignId':_0x5da26d['id']})[_0xfeee('0x1b')](_0x1c72a2());}}}});})['then'](function(){return _0x45752f[_0xfeee('0x30')][_0xfeee('0x24')]({'attributes':['id'],'include':[{'model':_0x45752f[_0xfeee('0x26')],'as':_0xfeee('0x2c'),'where':{'id':_0x341984[_0xfeee('0x15')]}}]})[_0xfeee('0x11')](function(_0x4067e2){if(_0x4067e2){var _0x2e1502=[];for(var _0x1c0566=0x0,_0x21844f;_0x1c0566<_0x4067e2['length'];_0x1c0566+=0x1){_0x21844f=_0x4067e2[_0x1c0566][_0xfeee('0xb')]({'plain':!![]});_0x45752f[_0xfeee('0x2d')][_0xfeee('0x14')]({'phone':_0x341984[_0xfeee('0x9')],'ContactId':_0x341984['id'],'ListId':_0x341984[_0xfeee('0x15')],'CampaignId':_0x21844f['id']})[_0xfeee('0x1b')](function(_0x329f02){logger[_0xfeee('0xc')](_0xfeee('0x2e'),_0xfeee('0xd'),_0x329f02['message']);});}}});})[_0xfeee('0x11')](function(){_0x15a74e();})[_0xfeee('0x1b')](function(_0x1b4022){logger[_0xfeee('0xc')](_0xfeee('0x2e'),'afterCreate',_0x1b4022[_0xfeee('0x2f')]);_0x15a74e(_0x1b4022);});}else{_0x15a74e(new Error(_0xfeee('0x31')));}},'afterDestroy':function(_0x31fd68,_0x29b0d1,_0x542850){var _0x59d301=_0x5cc5f9[_0xfeee('0xa')];var _0x38e5fc=_0x31fd68[_0xfeee('0xb')]({'plain':!![]});return _0x59d301['CmHopper'][_0xfeee('0x24')]({'raw':!![],'where':{'ListId':_0x38e5fc[_0xfeee('0x15')],'ContactId':_0x38e5fc['id']}})[_0xfeee('0x11')](function(_0x2105ae){if(!_[_0xfeee('0x32')](_0x2105ae)){var _0x52dc22=[];for(var _0x307013=0x0;_0x307013<_0x2105ae['length'];_0x307013+=0x1){var _0x564a74=_0x59d301['CmHopper'][_0xfeee('0x33')]({'where':{'ListId':_0x2105ae[_0x307013][_0xfeee('0x15')],'ContactId':_0x2105ae[_0x307013][_0xfeee('0x34')],'VoiceQueueId':_0x2105ae[_0x307013][_0xfeee('0x35')],'CampaignId':_0x2105ae[_0x307013]['CampaignId']}});_0x52dc22[_0xfeee('0x36')](_0x564a74);}return BPromise[_0xfeee('0x37')](_0x52dc22);}})['then'](function(_0x12f04a){logger[_0xfeee('0x38')](_0xfeee('0x39'),util['inspect'](_0x12f04a,{'showHidden':![],'depth':null}));_0x542850();})[_0xfeee('0x1b')](function(_0x100b75){logger[_0xfeee('0xc')](_0xfeee('0x3a'),util[_0xfeee('0xe')](_0x100b75,{'showHidden':![],'depth':null}));_0x542850(_0x100b75);});}}});};
\ No newline at end of file
+var _0x9993=['\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20Campaign\x20','VoiceQueue','outbound','dialCheckDuplicateType','CmList','Lists','length','always','findAll','BlackLists','message','Campaign','onlyIfOpen','CmHopperBlack','cmContact,\x20%s,\x20%s','afterCreate','models','isEmpty','VoiceQueueId','CampaignId','push','all','info','[CmContact][afterDestroy][Succesfull]','[CmContact][afterDestroy][Error]','lodash','api','bluebird','request-promise','rimraf','../../config/environment','exports','define','CmContact','cm_contacts','phone','get','error','cmContact','inspect','CmHopper','then','isNil','cmContact,\x20afterCreate\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20onlyIfOpen,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','create','ListId','priority','format','callbackUniqueid','YYYY-MM-DD\x20HH:mm:ss','catch','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','findOne','cmContact,\x20afterCreate,\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20VoiceQueue\x20','scheduledat','\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'];(function(_0x4cc03b,_0x299f1c){var _0xf0358c=function(_0x3d0da8){while(--_0x3d0da8){_0x4cc03b['push'](_0x4cc03b['shift']());}};_0xf0358c(++_0x299f1c);}(_0x9993,0x109));var _0x3999=function(_0x413feb,_0x10477f){_0x413feb=_0x413feb-0x0;var _0x40ee88=_0x9993[_0x413feb];return _0x40ee88;};'use strict';var _=require(_0x3999('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x3999('0x1'));var moment=require('moment');var BPromise=require(_0x3999('0x2'));var rp=require(_0x3999('0x3'));var fs=require('fs');var path=require('path');var rimraf=require(_0x3999('0x4'));var config=require(_0x3999('0x5'));var attributes=require('./cmContact.attributes');module[_0x3999('0x6')]=function(_0x1a736a,_0x4cf51e){return _0x1a736a[_0x3999('0x7')](_0x3999('0x8'),attributes,{'tableName':_0x3999('0x9'),'paranoid':!![],'indexes':[{'name':_0x3999('0xa'),'fields':['phone']}],'timestamps':!![],'hooks':{'afterCreate':function(_0x278aa5,_0xe9b749,_0x4292a7){var _0x5ecde6=_0x1a736a['models'];var _0x940e93=_0x278aa5[_0x3999('0xb')]({'plain':!![]});function _0x31cae1(){return function(_0x7b2dea){logger[_0x3999('0xc')](_0x3999('0xd'),'afterCreate',util[_0x3999('0xe')](_0x7b2dea,{'showHidden':![],'depth':null}));};}var _0x21d070=function(_0x15b0aa){return new BPromise(function(_0x3ca87b,_0x5b29b8){_0x5ecde6[_0x3999('0xf')]['findOne']({'where':{'phone':_0x940e93[_0x3999('0xa')],'VoiceQueueId':_0x15b0aa['id']}})[_0x3999('0x10')](function(_0x205c44){if(!_[_0x3999('0x11')](_0x205c44)){throw new Error(_0x3999('0x12')+_0x940e93[_0x3999('0xa')]+_0x3999('0x13')+_0x15b0aa['id']);}return _0x5ecde6[_0x3999('0xf')][_0x3999('0x14')]({'phone':_0x940e93['phone'],'ContactId':_0x940e93['id'],'ListId':_0x940e93[_0x3999('0x15')],'priority':_0x940e93[_0x3999('0x16')]?_0x940e93['priority']:0x2,'scheduledat':_0x940e93['scheduledat']?_0x940e93['scheduledat']:moment()[_0x3999('0x17')]('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0x940e93[_0x3999('0x18')]?!![]:![],'callbackuniqueid':_0x940e93[_0x3999('0x18')]?_0x940e93[_0x3999('0x18')]:undefined,'callbackat':_0x940e93[_0x3999('0x18')]?moment()[_0x3999('0x17')](_0x3999('0x19')):undefined,'VoiceQueueId':_0x15b0aa['id']});})[_0x3999('0x1a')](function(_0x41d57a){_0x5b29b8(_0x41d57a);});});};var _0x13db21=function(_0xe2ab03){return new BPromise(function(_0x1ac26c,_0x44cbe5){_0x5ecde6['CmHopper']['findOne']({'where':{'phone':_0x940e93['phone'],'VoiceQueueId':_0xe2ab03['id']}})['then'](function(_0x59a3bd){if(!_[_0x3999('0x11')](_0x59a3bd)){throw new Error(_0x3999('0x12')+_0x940e93[_0x3999('0xa')]+_0x3999('0x1b')+_0xe2ab03['id']);}return _0x5ecde6['CmHopperFinal'][_0x3999('0x1c')]({'where':{'calleridnum':_0x940e93['phone'],'VoiceQueueId':_0xe2ab03['id']}});})['then'](function(_0x3688ef){if(!_[_0x3999('0x11')](_0x3688ef)){throw new Error(_0x3999('0x1d')+_0x940e93[_0x3999('0xa')]+_0x3999('0x1e')+_0xe2ab03['id']);}return _0x5ecde6[_0x3999('0xf')]['create']({'phone':_0x940e93[_0x3999('0xa')],'ContactId':_0x940e93['id'],'ListId':_0x940e93[_0x3999('0x15')],'priority':_0x940e93[_0x3999('0x16')]?_0x940e93[_0x3999('0x16')]:0x2,'scheduledat':_0x940e93[_0x3999('0x1f')]?_0x940e93[_0x3999('0x1f')]:moment()[_0x3999('0x17')]('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0x940e93['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x940e93[_0x3999('0x18')]?_0x940e93['callbackUniqueid']:undefined,'callbackat':_0x940e93[_0x3999('0x18')]?moment()[_0x3999('0x17')](_0x3999('0x19')):undefined,'VoiceQueueId':_0xe2ab03['id']});})[_0x3999('0x1a')](function(_0x25ccf5){_0x44cbe5(_0x25ccf5);});});};function _0x4ff8a8(){return function(_0x186076){logger[_0x3999('0xc')]('cmContact','afterCreate',util[_0x3999('0xe')](_0x186076,{'showHidden':![],'depth':null}));};}var _0x43fd24=function(_0x2a21f2){return new BPromise(function(_0x101020,_0x101c72){_0x5ecde6[_0x3999('0xf')]['findOne']({'where':{'phone':_0x940e93[_0x3999('0xa')],'CampaignId':_0x2a21f2['id']}})['then'](function(_0x422510){if(!_[_0x3999('0x11')](_0x422510)){throw new Error(_0x3999('0x12')+_0x940e93['phone']+_0x3999('0x20')+_0x2a21f2['id']);}return _0x5ecde6[_0x3999('0xf')][_0x3999('0x14')]({'phone':_0x940e93[_0x3999('0xa')],'ContactId':_0x940e93['id'],'ListId':_0x940e93['ListId'],'priority':_0x940e93[_0x3999('0x16')]?_0x940e93[_0x3999('0x16')]:0x2,'scheduledat':_0x940e93[_0x3999('0x1f')]?_0x940e93[_0x3999('0x1f')]:moment()[_0x3999('0x17')](_0x3999('0x19')),'callback':_0x940e93[_0x3999('0x18')]?!![]:![],'callbackuniqueid':_0x940e93[_0x3999('0x18')]?_0x940e93[_0x3999('0x18')]:undefined,'callbackat':_0x940e93[_0x3999('0x18')]?moment()[_0x3999('0x17')](_0x3999('0x19')):undefined,'CampaignId':_0x2a21f2['id']});})['catch'](function(_0x21f800){_0x101c72(_0x21f800);});});};var _0x1859fd=function(_0x56dab8){return new BPromise(function(_0x6ee000,_0x497749){_0x5ecde6[_0x3999('0xf')][_0x3999('0x1c')]({'where':{'phone':_0x940e93['phone'],'CampaignId':_0x56dab8['id']}})['then'](function(_0x2adf5b){if(!_[_0x3999('0x11')](_0x2adf5b)){throw new Error(_0x3999('0x12')+_0x940e93['phone']+_0x3999('0x21')+_0x56dab8['id']);}return _0x5ecde6[_0x3999('0x22')][_0x3999('0x1c')]({'where':{'calleridnum':_0x940e93['phone'],'CampaignId':_0x56dab8['id']}});})[_0x3999('0x10')](function(_0x4b4815){if(!_['isNil'](_0x4b4815)){throw new Error('cmContact,\x20afterCreate,\x20'+_0x940e93[_0x3999('0xa')]+_0x3999('0x23')+_0x56dab8['id']);}return _0x5ecde6[_0x3999('0xf')][_0x3999('0x14')]({'phone':_0x940e93['phone'],'ContactId':_0x940e93['id'],'ListId':_0x940e93[_0x3999('0x15')],'priority':_0x940e93[_0x3999('0x16')]?_0x940e93[_0x3999('0x16')]:0x2,'scheduledat':_0x940e93['scheduledat']?_0x940e93[_0x3999('0x1f')]:moment()[_0x3999('0x17')](_0x3999('0x19')),'callback':_0x940e93[_0x3999('0x18')]?!![]:![],'callbackuniqueid':_0x940e93[_0x3999('0x18')]?_0x940e93[_0x3999('0x18')]:undefined,'callbackat':_0x940e93['callbackUniqueid']?moment()[_0x3999('0x17')]('YYYY-MM-DD\x20HH:mm:ss'):undefined,'CampaignId':_0x56dab8['id']});})[_0x3999('0x1a')](function(_0x484a1f){_0x497749(_0x484a1f);});});};if(_0x940e93[_0x3999('0x15')]){_0x5ecde6[_0x3999('0x24')]['findAll']({'where':{'type':_0x3999('0x25')},'attributes':['id',_0x3999('0x26')],'include':[{'model':_0x5ecde6[_0x3999('0x27')],'as':_0x3999('0x28'),'where':{'id':_0x940e93['ListId']}}]})[_0x3999('0x10')](function(_0x5302a1){if(_0x5302a1){var _0x184ddf=[];for(var _0x2bf1d2=0x0,_0x4fafc4;_0x2bf1d2<_0x5302a1[_0x3999('0x29')];_0x2bf1d2+=0x1){_0x4fafc4=_0x5302a1[_0x2bf1d2]['get']({'plain':!![]});switch(_0x4fafc4[_0x3999('0x26')]){case _0x3999('0x2a'):_0x13db21(_0x4fafc4)[_0x3999('0x1a')](_0x31cae1());break;case'onlyIfOpen':_0x21d070(_0x4fafc4)[_0x3999('0x1a')](_0x31cae1());break;default:_0x5ecde6[_0x3999('0xf')][_0x3999('0x14')]({'phone':_0x940e93['phone'],'ContactId':_0x940e93['id'],'ListId':_0x940e93[_0x3999('0x15')],'scheduledat':_0x940e93[_0x3999('0x1f')]?_0x940e93[_0x3999('0x1f')]:moment()[_0x3999('0x17')](_0x3999('0x19')),'priority':_0x940e93[_0x3999('0x16')]?_0x940e93[_0x3999('0x16')]:0x2,'callback':_0x940e93['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x940e93[_0x3999('0x18')]?_0x940e93[_0x3999('0x18')]:undefined,'callbackat':_0x940e93[_0x3999('0x18')]?moment()[_0x3999('0x17')](_0x3999('0x19')):undefined,'VoiceQueueId':_0x4fafc4['id']})[_0x3999('0x1a')](_0x31cae1());}}}})[_0x3999('0x10')](function(){return _0x5ecde6[_0x3999('0x24')][_0x3999('0x2b')]({'where':{'type':_0x3999('0x25')},'attributes':['id'],'include':[{'model':_0x5ecde6[_0x3999('0x27')],'as':_0x3999('0x2c'),'where':{'id':_0x940e93[_0x3999('0x15')]}}]})[_0x3999('0x10')](function(_0x63965c){if(_0x63965c){var _0x3f52fe=[];for(var _0x20c4bf=0x0,_0x1379a8;_0x20c4bf<_0x63965c['length'];_0x20c4bf+=0x1){_0x1379a8=_0x63965c[_0x20c4bf][_0x3999('0xb')]({'plain':!![]});_0x5ecde6['CmHopperBlack'][_0x3999('0x14')]({'phone':_0x940e93[_0x3999('0xa')],'ContactId':_0x940e93['id'],'ListId':_0x940e93[_0x3999('0x15')],'VoiceQueueId':_0x1379a8['id']})[_0x3999('0x1a')](function(_0x58a245){logger['error']('cmContact,\x20%s,\x20%s','afterCreate',_0x58a245[_0x3999('0x2d')]);});}}});})['then'](function(){return _0x5ecde6[_0x3999('0x2e')][_0x3999('0x2b')]({'attributes':['id',_0x3999('0x26')],'include':[{'model':_0x5ecde6[_0x3999('0x27')],'as':_0x3999('0x28'),'where':{'id':_0x940e93['ListId']}}]})[_0x3999('0x10')](function(_0x565030){if(_0x565030){var _0x52273f=[];for(var _0x111131=0x0,_0x28deca;_0x111131<_0x565030[_0x3999('0x29')];_0x111131+=0x1){_0x28deca=_0x565030[_0x111131][_0x3999('0xb')]({'plain':!![]});switch(_0x28deca[_0x3999('0x26')]){case _0x3999('0x2a'):_0x1859fd(_0x28deca)['catch'](_0x4ff8a8());break;case _0x3999('0x2f'):_0x43fd24(_0x28deca)['catch'](_0x4ff8a8());break;default:_0x5ecde6[_0x3999('0xf')][_0x3999('0x14')]({'phone':_0x940e93[_0x3999('0xa')],'ContactId':_0x940e93['id'],'ListId':_0x940e93[_0x3999('0x15')],'scheduledat':_0x940e93[_0x3999('0x1f')]?_0x940e93[_0x3999('0x1f')]:moment()['format'](_0x3999('0x19')),'priority':_0x940e93['priority']?_0x940e93['priority']:0x2,'callback':_0x940e93[_0x3999('0x18')]?!![]:![],'callbackuniqueid':_0x940e93['callbackUniqueid']?_0x940e93['callbackUniqueid']:undefined,'callbackat':_0x940e93[_0x3999('0x18')]?moment()['format'](_0x3999('0x19')):undefined,'CampaignId':_0x28deca['id']})[_0x3999('0x1a')](_0x4ff8a8());}}}});})[_0x3999('0x10')](function(){return _0x5ecde6['Campaign'][_0x3999('0x2b')]({'attributes':['id'],'include':[{'model':_0x5ecde6[_0x3999('0x27')],'as':'BlackLists','where':{'id':_0x940e93[_0x3999('0x15')]}}]})['then'](function(_0x38fc04){if(_0x38fc04){var _0x429c35=[];for(var _0x395df2=0x0,_0x442734;_0x395df2<_0x38fc04['length'];_0x395df2+=0x1){_0x442734=_0x38fc04[_0x395df2][_0x3999('0xb')]({'plain':!![]});_0x5ecde6[_0x3999('0x30')][_0x3999('0x14')]({'phone':_0x940e93[_0x3999('0xa')],'ContactId':_0x940e93['id'],'ListId':_0x940e93[_0x3999('0x15')],'CampaignId':_0x442734['id']})['catch'](function(_0xf77216){logger[_0x3999('0xc')](_0x3999('0x31'),_0x3999('0x32'),_0xf77216[_0x3999('0x2d')]);});}}});})[_0x3999('0x10')](function(){_0x4292a7();})[_0x3999('0x1a')](function(_0x155078){logger['error'](_0x3999('0x31'),_0x3999('0x32'),_0x155078[_0x3999('0x2d')]);_0x4292a7(_0x155078);});}else{_0x4292a7(new Error('List\x20not\x20found'));}},'afterDestroy':function(_0x3fbad8,_0x76546d,_0x5dd34e){var _0x57857b=_0x1a736a[_0x3999('0x33')];var _0x42f662=_0x3fbad8['get']({'plain':!![]});return _0x57857b[_0x3999('0xf')][_0x3999('0x2b')]({'raw':!![],'where':{'ListId':_0x42f662['ListId'],'ContactId':_0x42f662['id']}})['then'](function(_0x2a1481){if(!_[_0x3999('0x34')](_0x2a1481)){var _0x3e8ac8=[];for(var _0x3d525a=0x0;_0x3d525a<_0x2a1481[_0x3999('0x29')];_0x3d525a+=0x1){var _0x5cf414=_0x57857b[_0x3999('0xf')]['destroy']({'where':{'ListId':_0x2a1481[_0x3d525a][_0x3999('0x15')],'ContactId':_0x2a1481[_0x3d525a]['ContactId'],'VoiceQueueId':_0x2a1481[_0x3d525a][_0x3999('0x35')],'CampaignId':_0x2a1481[_0x3d525a][_0x3999('0x36')]}});_0x3e8ac8[_0x3999('0x37')](_0x5cf414);}return BPromise[_0x3999('0x38')](_0x3e8ac8);}})['then'](function(_0x4041fb){logger[_0x3999('0x39')](_0x3999('0x3a'),util[_0x3999('0xe')](_0x4041fb,{'showHidden':![],'depth':null}));_0x5dd34e();})[_0x3999('0x1a')](function(_0x138dc3){logger['error'](_0x3999('0x3b'),util[_0x3999('0xe')](_0x138dc3,{'showHidden':![],'depth':null}));_0x5dd34e(_0x138dc3);});}}});};
\ No newline at end of file
index b198f32..1a9e6f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6c85=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','register','request','then','info','CmContact,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','CmContact','find','options','attributes','include','map','model','ShowCmContact','catch','CreateCmContact','create','raw','lodash','util','moment','bluebird','randomstring','ioredis'];(function(_0x6182ff,_0x59d492){var _0x1cec22=function(_0x2e96f8){while(--_0x2e96f8){_0x6182ff['push'](_0x6182ff['shift']());}};_0x1cec22(++_0x59d492);}(_0x6c85,0x1a7));var _0x56c8=function(_0x4d0146,_0x31f115){_0x4d0146=_0x4d0146-0x0;var _0x367086=_0x6c85[_0x4d0146];return _0x367086;};'use strict';var _=require(_0x56c8('0x0'));var util=require(_0x56c8('0x1'));var moment=require(_0x56c8('0x2'));var BPromise=require(_0x56c8('0x3'));var rs=require(_0x56c8('0x4'));var fs=require('fs');var Redis=require(_0x56c8('0x5'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x56c8('0x6'))(_0x56c8('0x7'));var config=require(_0x56c8('0x8'));var jayson=require(_0x56c8('0x9'));var client=jayson[_0x56c8('0xa')][_0x56c8('0xb')]({'port':0x232a});config[_0x56c8('0xc')]=_[_0x56c8('0xd')](config[_0x56c8('0xc')],{'host':_0x56c8('0xe'),'port':0x18eb});var socket=require(_0x56c8('0xf'))(new Redis(config[_0x56c8('0xc')]));require('./cmContact.socket')[_0x56c8('0x10')](socket);function respondWithRpcPromise(_0x3600dc,_0x5161d3,_0x28d2b1){return new BPromise(function(_0x4162a9,_0x9ad0ac){return client[_0x56c8('0x11')](_0x3600dc,_0x28d2b1)[_0x56c8('0x12')](function(_0x8012a){logger[_0x56c8('0x13')](_0x56c8('0x14'),_0x5161d3,_0x56c8('0x15'));logger[_0x56c8('0x16')]('CmContact,\x20%s,\x20%s,\x20%s',_0x5161d3,_0x56c8('0x15'),JSON[_0x56c8('0x17')](_0x8012a));if(_0x8012a['error']){if(_0x8012a[_0x56c8('0x18')][_0x56c8('0x19')]===0x1f4){logger[_0x56c8('0x18')](_0x56c8('0x14'),_0x5161d3,_0x8012a[_0x56c8('0x18')]['message']);return _0x9ad0ac(_0x8012a[_0x56c8('0x18')][_0x56c8('0x1a')]);}logger['error'](_0x56c8('0x14'),_0x5161d3,_0x8012a[_0x56c8('0x18')]['message']);return _0x4162a9(_0x8012a[_0x56c8('0x18')]['message']);}else{logger[_0x56c8('0x13')]('CmContact,\x20%s,\x20%s',_0x5161d3,_0x56c8('0x15'));_0x4162a9(_0x8012a['result']['message']);}})['catch'](function(_0x537b43){logger['error']('CmContact,\x20%s,\x20%s',_0x5161d3,_0x537b43);_0x9ad0ac(_0x537b43);});});}exports['ShowCmContact']=function(_0x53bf74){var _0x3ee87e=this;return new Promise(function(_0x563bc0,_0x234b9c){return db[_0x56c8('0x1b')][_0x56c8('0x1c')]({'raw':_0x53bf74[_0x56c8('0x1d')]?_0x53bf74['options']['raw']===undefined?!![]:![]:!![],'where':_0x53bf74[_0x56c8('0x1d')]?_0x53bf74[_0x56c8('0x1d')]['where']||null:null,'attributes':_0x53bf74[_0x56c8('0x1d')]?_0x53bf74['options'][_0x56c8('0x1e')]||null:null,'include':_0x53bf74[_0x56c8('0x1d')]?_0x53bf74[_0x56c8('0x1d')][_0x56c8('0x1f')]?_[_0x56c8('0x20')](_0x53bf74[_0x56c8('0x1d')][_0x56c8('0x1f')],function(_0x168994){return{'model':db[_0x168994[_0x56c8('0x21')]],'as':_0x168994['as'],'attributes':_0x168994['attributes'],'include':_0x168994[_0x56c8('0x1f')]?_['map'](_0x168994['include'],function(_0x33e3c4){return{'model':db[_0x33e3c4[_0x56c8('0x21')]],'as':_0x33e3c4['as'],'attributes':_0x33e3c4['attributes'],'include':_0x33e3c4[_0x56c8('0x1f')]?_[_0x56c8('0x20')](_0x33e3c4[_0x56c8('0x1f')],function(_0x1bdcfe){return{'model':db[_0x1bdcfe[_0x56c8('0x21')]],'as':_0x1bdcfe['as'],'attributes':_0x1bdcfe[_0x56c8('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x56c8('0x12')](function(_0x36a878){logger['info'](_0x56c8('0x22'),_0x53bf74);logger[_0x56c8('0x16')]('ShowCmContact',_0x53bf74,JSON[_0x56c8('0x17')](_0x36a878));_0x563bc0(_0x36a878);})[_0x56c8('0x23')](function(_0x2eb121){logger[_0x56c8('0x18')](_0x56c8('0x22'),_0x2eb121[_0x56c8('0x1a')],_0x53bf74);_0x234b9c(_0x3ee87e[_0x56c8('0x18')](0x1f4,_0x2eb121[_0x56c8('0x1a')]));});});};exports[_0x56c8('0x24')]=function(_0x367fb9){var _0x420d1e=this;return new Promise(function(_0x107885,_0x525133){return db[_0x56c8('0x1b')][_0x56c8('0x25')](_0x367fb9['body'],{'raw':_0x367fb9[_0x56c8('0x1d')]?_0x367fb9['options'][_0x56c8('0x26')]===undefined?!![]:![]:!![]})[_0x56c8('0x12')](function(_0x5613c3){logger['info'](_0x56c8('0x24'),_0x367fb9);logger['debug'](_0x56c8('0x24'),_0x367fb9,JSON['stringify'](_0x5613c3));_0x107885(_0x5613c3);})[_0x56c8('0x23')](function(_0x3b5818){logger['error'](_0x56c8('0x24'),_0x3b5818['message'],_0x367fb9);_0x525133(_0x420d1e['error'](0x1f4,_0x3b5818[_0x56c8('0x1a')]));});});};
\ No newline at end of file
+var _0xd70e=['message','catch','ShowCmContact','CmContact','find','options','where','attributes','include','map','model','debug','CreateCmContact','create','body','raw','util','moment','bluebird','ioredis','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','redis','defaults','localhost','./cmContact.socket','register','request','then','info','CmContact,\x20%s,\x20%s','request\x20sent','stringify','error','code'];(function(_0x40f355,_0x27fac0){var _0x1ebb62=function(_0x5e94f4){while(--_0x5e94f4){_0x40f355['push'](_0x40f355['shift']());}};_0x1ebb62(++_0x27fac0);}(_0xd70e,0x1e4));var _0xed70=function(_0x3e3aca,_0xfb5e0b){_0x3e3aca=_0x3e3aca-0x0;var _0x5d1fdb=_0xd70e[_0x3e3aca];return _0x5d1fdb;};'use strict';var _=require('lodash');var util=require(_0xed70('0x0'));var moment=require(_0xed70('0x1'));var BPromise=require(_0xed70('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xed70('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xed70('0x4'));var logger=require(_0xed70('0x5'))(_0xed70('0x6'));var config=require('../../config/environment');var jayson=require(_0xed70('0x7'));var client=jayson[_0xed70('0x8')][_0xed70('0x9')]({'port':0x232a});config[_0xed70('0xa')]=_[_0xed70('0xb')](config[_0xed70('0xa')],{'host':_0xed70('0xc'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xed70('0xa')]));require(_0xed70('0xd'))[_0xed70('0xe')](socket);function respondWithRpcPromise(_0xa297a9,_0x41fcde,_0x2c44f4){return new BPromise(function(_0x2cb1d4,_0x22a915){return client[_0xed70('0xf')](_0xa297a9,_0x2c44f4)[_0xed70('0x10')](function(_0x361062){logger[_0xed70('0x11')](_0xed70('0x12'),_0x41fcde,'request\x20sent');logger['debug']('CmContact,\x20%s,\x20%s,\x20%s',_0x41fcde,_0xed70('0x13'),JSON[_0xed70('0x14')](_0x361062));if(_0x361062[_0xed70('0x15')]){if(_0x361062[_0xed70('0x15')][_0xed70('0x16')]===0x1f4){logger[_0xed70('0x15')](_0xed70('0x12'),_0x41fcde,_0x361062[_0xed70('0x15')]['message']);return _0x22a915(_0x361062[_0xed70('0x15')][_0xed70('0x17')]);}logger['error']('CmContact,\x20%s,\x20%s',_0x41fcde,_0x361062[_0xed70('0x15')][_0xed70('0x17')]);return _0x2cb1d4(_0x361062[_0xed70('0x15')]['message']);}else{logger[_0xed70('0x11')](_0xed70('0x12'),_0x41fcde,_0xed70('0x13'));_0x2cb1d4(_0x361062['result']['message']);}})[_0xed70('0x18')](function(_0x2061e9){logger[_0xed70('0x15')](_0xed70('0x12'),_0x41fcde,_0x2061e9);_0x22a915(_0x2061e9);});});}exports[_0xed70('0x19')]=function(_0x320105){var _0x1b4306=this;return new Promise(function(_0x2426e8,_0x359817){return db[_0xed70('0x1a')][_0xed70('0x1b')]({'raw':_0x320105[_0xed70('0x1c')]?_0x320105['options']['raw']===undefined?!![]:![]:!![],'where':_0x320105[_0xed70('0x1c')]?_0x320105[_0xed70('0x1c')][_0xed70('0x1d')]||null:null,'attributes':_0x320105[_0xed70('0x1c')]?_0x320105[_0xed70('0x1c')][_0xed70('0x1e')]||null:null,'include':_0x320105[_0xed70('0x1c')]?_0x320105[_0xed70('0x1c')][_0xed70('0x1f')]?_[_0xed70('0x20')](_0x320105['options'][_0xed70('0x1f')],function(_0x1fcab2){return{'model':db[_0x1fcab2[_0xed70('0x21')]],'as':_0x1fcab2['as'],'attributes':_0x1fcab2[_0xed70('0x1e')],'include':_0x1fcab2[_0xed70('0x1f')]?_[_0xed70('0x20')](_0x1fcab2['include'],function(_0x267f9b){return{'model':db[_0x267f9b[_0xed70('0x21')]],'as':_0x267f9b['as'],'attributes':_0x267f9b[_0xed70('0x1e')],'include':_0x267f9b[_0xed70('0x1f')]?_[_0xed70('0x20')](_0x267f9b[_0xed70('0x1f')],function(_0x5c7fc6){return{'model':db[_0x5c7fc6[_0xed70('0x21')]],'as':_0x5c7fc6['as'],'attributes':_0x5c7fc6[_0xed70('0x1e')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x187214){logger['info'](_0xed70('0x19'),_0x320105);logger[_0xed70('0x22')](_0xed70('0x19'),_0x320105,JSON[_0xed70('0x14')](_0x187214));_0x2426e8(_0x187214);})[_0xed70('0x18')](function(_0x1d46de){logger[_0xed70('0x15')](_0xed70('0x19'),_0x1d46de[_0xed70('0x17')],_0x320105);_0x359817(_0x1b4306[_0xed70('0x15')](0x1f4,_0x1d46de[_0xed70('0x17')]));});});};exports[_0xed70('0x23')]=function(_0x4d40cd){var _0xd41b0d=this;return new Promise(function(_0x2b3c6d,_0x391539){return db[_0xed70('0x1a')][_0xed70('0x24')](_0x4d40cd[_0xed70('0x25')],{'raw':_0x4d40cd[_0xed70('0x1c')]?_0x4d40cd[_0xed70('0x1c')][_0xed70('0x26')]===undefined?!![]:![]:!![]})[_0xed70('0x10')](function(_0x1ecb62){logger[_0xed70('0x11')](_0xed70('0x23'),_0x4d40cd);logger[_0xed70('0x22')]('CreateCmContact',_0x4d40cd,JSON['stringify'](_0x1ecb62));_0x2b3c6d(_0x1ecb62);})[_0xed70('0x18')](function(_0x5cc68c){logger['error'](_0xed70('0x23'),_0x5cc68c[_0xed70('0x17')],_0x4d40cd);_0x391539(_0xd41b0d['error'](0x1f4,_0x5cc68c[_0xed70('0x17')]));});});};
\ No newline at end of file
index d3ee82b..686cc97 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x723e=['remove','update','emit','removeListener','length','cmContact:','save'];(function(_0x59ce6a,_0x104b4f){var _0x1b006c=function(_0x1a7cfb){while(--_0x1a7cfb){_0x59ce6a['push'](_0x59ce6a['shift']());}};_0x1b006c(++_0x104b4f);}(_0x723e,0x179));var _0xe723=function(_0x251597,_0x3ffa57){_0x251597=_0x251597-0x0;var _0x4c8d25=_0x723e[_0x251597];return _0x4c8d25;};'use strict';var CmContactEvents=require('./cmContact.events');var events=[_0xe723('0x0'),_0xe723('0x1'),_0xe723('0x2')];function createListener(_0x161d6b,_0x2801c5){return function(_0xab58a8){_0x2801c5[_0xe723('0x3')](_0x161d6b,_0xab58a8);};}function removeListener(_0x1da20f,_0x8f78b2){return function(){CmContactEvents[_0xe723('0x4')](_0x1da20f,_0x8f78b2);};}exports['register']=function(_0x32d689){for(var _0x20c13b=0x0,_0x1335cd=events[_0xe723('0x5')];_0x20c13b<_0x1335cd;_0x20c13b++){var _0x2aebbd=events[_0x20c13b];var _0xe50f7=createListener(_0xe723('0x6')+_0x2aebbd,_0x32d689);CmContactEvents['on'](_0x2aebbd,_0xe50f7);}};
\ No newline at end of file
+var _0xb66c=['cmContact:','./cmContact.events','remove','removeListener','register','length'];(function(_0x36f243,_0x188505){var _0x426436=function(_0x1c8622){while(--_0x1c8622){_0x36f243['push'](_0x36f243['shift']());}};_0x426436(++_0x188505);}(_0xb66c,0x175));var _0xcb66=function(_0x898164,_0x5705b8){_0x898164=_0x898164-0x0;var _0x1a924d=_0xb66c[_0x898164];return _0x1a924d;};'use strict';var CmContactEvents=require(_0xcb66('0x0'));var events=['save',_0xcb66('0x1'),'update'];function createListener(_0x2afcb8,_0x24ea13){return function(_0xf7ccc5){_0x24ea13['emit'](_0x2afcb8,_0xf7ccc5);};}function removeListener(_0x35d439,_0x386241){return function(){CmContactEvents[_0xcb66('0x2')](_0x35d439,_0x386241);};}exports[_0xcb66('0x3')]=function(_0x5d766d){for(var _0x518163=0x0,_0x19adf5=events[_0xcb66('0x4')];_0x518163<_0x19adf5;_0x518163++){var _0xa3993=events[_0x518163];var _0x439f3d=createListener(_0xcb66('0x5')+_0xa3993,_0x5d766d);CmContactEvents['on'](_0xa3993,_0x439f3d);}};
\ No newline at end of file
index d5653ff..f408d12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x014d=['root','server/files/tmp','originalname','replace','format','extname','now','/csv','single','file','uploadCsv','join','basename','/upload/:id','import','put','/:id','update','destroy','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','describe','show','/:id/tags','getTags','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','getHopperFinals','/:id/jscripty_sessions','getJscriptySessions','create','post','/create_many','bulkCreate','diskStorage'];(function(_0x5bab91,_0x4ce9ad){var _0x360e7f=function(_0x40c59e){while(--_0x40c59e){_0x5bab91['push'](_0x5bab91['shift']());}};_0x360e7f(++_0x4ce9ad);}(_0x014d,0x1b2));var _0xd014=function(_0x286368,_0x5813a7){_0x286368=_0x286368-0x0;var _0x1f77ae=_0x014d[_0x286368];return _0x1f77ae;};'use strict';var multer=require(_0xd014('0x0'));var util=require(_0xd014('0x1'));var path=require('path');var timeout=require(_0xd014('0x2'));var express=require(_0xd014('0x3'));var router=express[_0xd014('0x4')]();var auth=require(_0xd014('0x5'));var interaction=require(_0xd014('0x6'));var config=require(_0xd014('0x7'));var controller=require('./cmContact.controller');router[_0xd014('0x8')]('/',auth[_0xd014('0x9')](),controller[_0xd014('0xa')]);router[_0xd014('0x8')]('/describe',auth[_0xd014('0x9')](),controller[_0xd014('0xb')]);router['get']('/:id',auth[_0xd014('0x9')](),controller[_0xd014('0xc')]);router[_0xd014('0x8')](_0xd014('0xd'),auth[_0xd014('0x9')](),controller[_0xd014('0xe')]);router['get']('/:id/hoppers',auth[_0xd014('0x9')](),controller['getHoppers']);router['get'](_0xd014('0xf'),auth['isAuthenticated'](),controller[_0xd014('0x10')]);router['get'](_0xd014('0x11'),auth[_0xd014('0x9')](),controller[_0xd014('0x12')]);router['get'](_0xd014('0x13'),auth[_0xd014('0x9')](),controller[_0xd014('0x14')]);router['post']('/merge',auth[_0xd014('0x9')](),controller['merge']);router['post']('/',auth[_0xd014('0x9')](),controller[_0xd014('0x15')]);router[_0xd014('0x16')](_0xd014('0x17'),auth['isAuthenticated'](),controller[_0xd014('0x18')]);router['post'](_0xd014('0xd'),auth['isAuthenticated'](),controller['setTags']);var upload=multer({'storage':multer[_0xd014('0x19')]({'destination':function(_0x452085,_0x1f307d,_0x3b613d){_0x3b613d(null,path['join'](config[_0xd014('0x1a')],_0xd014('0x1b')));},'filename':function(_0x2716a4,_0x547aac,_0x48757e){_0x547aac[_0xd014('0x1c')]=_0x547aac[_0xd014('0x1c')][_0xd014('0x1d')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x48757e(null,util[_0xd014('0x1e')]('%s-%s%s',path['basename'](_0x547aac['originalname'],path[_0xd014('0x1f')](_0x547aac['originalname'])),Date[_0xd014('0x20')](),path[_0xd014('0x1f')](_0x547aac['originalname'])));}})});router[_0xd014('0x16')](_0xd014('0x21'),upload[_0xd014('0x22')](_0xd014('0x23')),controller[_0xd014('0x24')]);var upload=multer({'storage':multer[_0xd014('0x19')]({'destination':function(_0x278e9c,_0x3ba41e,_0x388a3c){_0x388a3c(null,path[_0xd014('0x25')](config[_0xd014('0x1a')],_0xd014('0x1b')));},'filename':function(_0x28c5cf,_0x4fdcfd,_0x5a9240){_0x4fdcfd[_0xd014('0x1c')]=_0x4fdcfd[_0xd014('0x1c')][_0xd014('0x1d')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x5a9240(null,util[_0xd014('0x1e')]('%s-%s%s',path[_0xd014('0x26')](_0x4fdcfd[_0xd014('0x1c')],path[_0xd014('0x1f')](_0x4fdcfd['originalname'])),Date[_0xd014('0x20')](),path[_0xd014('0x1f')](_0x4fdcfd[_0xd014('0x1c')])));}})});router['post']('/upload',upload[_0xd014('0x22')](_0xd014('0x23')),controller['upload']);router[_0xd014('0x16')](_0xd014('0x27'),auth[_0xd014('0x9')](),controller[_0xd014('0x28')]);router[_0xd014('0x29')](_0xd014('0x2a'),auth[_0xd014('0x9')](),controller[_0xd014('0x2b')]);router['delete'](_0xd014('0x2a'),auth[_0xd014('0x9')](),controller[_0xd014('0x2c')]);module[_0xd014('0x2d')]=router;
\ No newline at end of file
+var _0x14dd=['/:id/hopper_histories','getHopperHistories','getHopperFinals','/:id/jscripty_sessions','getJscriptySessions','/merge','post','create','/create_many','setTags','join','root','server/files/tmp','originalname','replace','format','extname','/csv','file','uploadCsv','diskStorage','now','/upload','single','upload','/upload/:id','import','put','update','destroy','multer','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','index','get','/describe','describe','/:id','show','/:id/tags','getTags','/:id/hoppers','isAuthenticated','getHoppers'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x14dd,0x1f4));var _0xd14d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x14dd[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0xd14d('0x0'));var util=require('util');var path=require(_0xd14d('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xd14d('0x2')]();var auth=require(_0xd14d('0x3'));var interaction=require(_0xd14d('0x4'));var config=require(_0xd14d('0x5'));var controller=require('./cmContact.controller');router['get']('/',auth['isAuthenticated'](),controller[_0xd14d('0x6')]);router[_0xd14d('0x7')](_0xd14d('0x8'),auth['isAuthenticated'](),controller[_0xd14d('0x9')]);router[_0xd14d('0x7')](_0xd14d('0xa'),auth['isAuthenticated'](),controller[_0xd14d('0xb')]);router[_0xd14d('0x7')](_0xd14d('0xc'),auth['isAuthenticated'](),controller[_0xd14d('0xd')]);router['get'](_0xd14d('0xe'),auth[_0xd14d('0xf')](),controller[_0xd14d('0x10')]);router[_0xd14d('0x7')](_0xd14d('0x11'),auth[_0xd14d('0xf')](),controller[_0xd14d('0x12')]);router['get']('/:id/hopper_finals',auth[_0xd14d('0xf')](),controller[_0xd14d('0x13')]);router[_0xd14d('0x7')](_0xd14d('0x14'),auth[_0xd14d('0xf')](),controller[_0xd14d('0x15')]);router['post'](_0xd14d('0x16'),auth[_0xd14d('0xf')](),controller['merge']);router[_0xd14d('0x17')]('/',auth['isAuthenticated'](),controller[_0xd14d('0x18')]);router['post'](_0xd14d('0x19'),auth[_0xd14d('0xf')](),controller['bulkCreate']);router[_0xd14d('0x17')](_0xd14d('0xc'),auth[_0xd14d('0xf')](),controller[_0xd14d('0x1a')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x423981,_0x1091ce,_0x220ac7){_0x220ac7(null,path[_0xd14d('0x1b')](config[_0xd14d('0x1c')],_0xd14d('0x1d')));},'filename':function(_0x56d484,_0x55e1f2,_0x251047){_0x55e1f2[_0xd14d('0x1e')]=_0x55e1f2[_0xd14d('0x1e')][_0xd14d('0x1f')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x251047(null,util[_0xd14d('0x20')]('%s-%s%s',path['basename'](_0x55e1f2['originalname'],path[_0xd14d('0x21')](_0x55e1f2[_0xd14d('0x1e')])),Date['now'](),path[_0xd14d('0x21')](_0x55e1f2[_0xd14d('0x1e')])));}})});router[_0xd14d('0x17')](_0xd14d('0x22'),upload['single'](_0xd14d('0x23')),controller[_0xd14d('0x24')]);var upload=multer({'storage':multer[_0xd14d('0x25')]({'destination':function(_0x304c9e,_0x4c9a0c,_0x16a022){_0x16a022(null,path['join'](config['root'],_0xd14d('0x1d')));},'filename':function(_0x44b88d,_0x2e6613,_0x16f02d){_0x2e6613['originalname']=_0x2e6613['originalname'][_0xd14d('0x1f')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x16f02d(null,util[_0xd14d('0x20')]('%s-%s%s',path['basename'](_0x2e6613[_0xd14d('0x1e')],path['extname'](_0x2e6613[_0xd14d('0x1e')])),Date[_0xd14d('0x26')](),path[_0xd14d('0x21')](_0x2e6613['originalname'])));}})});router[_0xd14d('0x17')](_0xd14d('0x27'),upload[_0xd14d('0x28')](_0xd14d('0x23')),controller[_0xd14d('0x29')]);router['post'](_0xd14d('0x2a'),auth['isAuthenticated'](),controller[_0xd14d('0x2b')]);router[_0xd14d('0x2c')]('/:id',auth[_0xd14d('0xf')](),controller[_0xd14d('0x2d')]);router['delete'](_0xd14d('0xa'),auth[_0xd14d('0xf')](),controller[_0xd14d('0x2e')]);module['exports']=router;
\ No newline at end of file
index 6cb8906..b75919d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f4c=['sequelize','lodash','exports','STRING','setDataValue','alias','getDataValue','name','TEXT','long','type','select','values','stringify','BOOLEAN'];(function(_0x1075ba,_0x305a9b){var _0x37daba=function(_0x3563f0){while(--_0x3563f0){_0x1075ba['push'](_0x1075ba['shift']());}};_0x37daba(++_0x305a9b);}(_0x5f4c,0x1d1));var _0xc5f4=function(_0x2b4411,_0x2625ed){_0x2b4411=_0x2b4411-0x0;var _0x8e41ef=_0x5f4c[_0x2b4411];return _0x8e41ef;};'use strict';var Sequelize=require(_0xc5f4('0x0'));var _=require(_0xc5f4('0x1'));module[_0xc5f4('0x2')]={'name':{'type':Sequelize['VIRTUAL'],'get':function(_0x41b17d){return this['getDataValue']('alias');}},'alias':{'type':Sequelize[_0xc5f4('0x3')],'allowNull':![],'set':function(_0xdd7c1b){this[_0xc5f4('0x4')](_0xc5f4('0x5'),_0xdd7c1b?_0xdd7c1b:this[_0xc5f4('0x6')](_0xc5f4('0x7')));}},'type':{'type':Sequelize[_0xc5f4('0x3')],'allowNull':![]},'values':{'type':Sequelize[_0xc5f4('0x8')](_0xc5f4('0x9')),'get':function(){if(this[_0xc5f4('0x6')](_0xc5f4('0xa'))===_0xc5f4('0xb')){return JSON['parse'](this[_0xc5f4('0x6')]('values'));}else{return this[_0xc5f4('0x6')](_0xc5f4('0xc'));}},'set':function(_0x2c3dfa){if(Array['isArray'](_0x2c3dfa)){this['setDataValue'](_0xc5f4('0xc'),JSON[_0xc5f4('0xd')](_0x2c3dfa));}else{this[_0xc5f4('0x4')](_0xc5f4('0xc'),_0x2c3dfa);}}},'required':{'type':Sequelize[_0xc5f4('0xe')],'defaultValue':![]}};
\ No newline at end of file
+var _0x8fa4=['stringify','BOOLEAN','sequelize','VIRTUAL','getDataValue','alias','setDataValue','name','STRING','TEXT','type','select','parse','values'];(function(_0xfe577f,_0x183875){var _0x237f79=function(_0x9f8a4c){while(--_0x9f8a4c){_0xfe577f['push'](_0xfe577f['shift']());}};_0x237f79(++_0x183875);}(_0x8fa4,0x9c));var _0x48fa=function(_0xa8b074,_0xeabb35){_0xa8b074=_0xa8b074-0x0;var _0x41f89e=_0x8fa4[_0xa8b074];return _0x41f89e;};'use strict';var Sequelize=require(_0x48fa('0x0'));var _=require('lodash');module['exports']={'name':{'type':Sequelize[_0x48fa('0x1')],'get':function(_0x3d4c18){return this[_0x48fa('0x2')](_0x48fa('0x3'));}},'alias':{'type':Sequelize['STRING'],'allowNull':![],'set':function(_0xc1c43f){this[_0x48fa('0x4')](_0x48fa('0x3'),_0xc1c43f?_0xc1c43f:this[_0x48fa('0x2')](_0x48fa('0x5')));}},'type':{'type':Sequelize[_0x48fa('0x6')],'allowNull':![]},'values':{'type':Sequelize[_0x48fa('0x7')]('long'),'get':function(){if(this[_0x48fa('0x2')](_0x48fa('0x8'))===_0x48fa('0x9')){return JSON[_0x48fa('0xa')](this[_0x48fa('0x2')](_0x48fa('0xb')));}else{return this['getDataValue'](_0x48fa('0xb'));}},'set':function(_0x5c8eaa){if(Array['isArray'](_0x5c8eaa)){this[_0x48fa('0x4')]('values',JSON[_0x48fa('0xc')](_0x5c8eaa));}else{this[_0x48fa('0x4')](_0x48fa('0xb'),_0x5c8eaa);}}},'required':{'type':Sequelize[_0x48fa('0xd')],'defaultValue':![]}};
\ No newline at end of file
index 14a923e..e16b051 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7393=['save','update','then','destroy','error','stack','name','send','CmCustomField','differenceBy','keys','query','filters','intersection','model','fields','attributes','length','order','where','filter','map','type','key','merge','options','includeAll','include','rows','catch','show','params','rawAttributes','find','create','sequelize','transaction','body','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','path','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply'];(function(_0x44b2af,_0xc0540d){var _0x5eb49d=function(_0x203cc2){while(--_0x203cc2){_0x44b2af['push'](_0x44b2af['shift']());}};_0x5eb49d(++_0xc0540d);}(_0x7393,0x6f));var _0x3739=function(_0x49163c,_0x3db2b5){_0x49163c=_0x49163c-0x0;var _0x3632c6=_0x7393[_0x49163c];return _0x3632c6;};'use strict';var pdf=require(_0x3739('0x0'));var emlformat=require(_0x3739('0x1'));var rimraf=require(_0x3739('0x2'));var zipdir=require(_0x3739('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3739('0x4'));var moment=require(_0x3739('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x3739('0x6'));var util=require(_0x3739('0x7'));var path=require(_0x3739('0x8'));var sox=require(_0x3739('0x9'));var csv=require(_0x3739('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x3739('0xb'));var squel=require(_0x3739('0xc'));var crypto=require('crypto');var jsforce=require(_0x3739('0xd'));var deskjs=require(_0x3739('0xe'));var toCsv=require(_0x3739('0xa'));var querystring=require(_0x3739('0xf'));var Papa=require(_0x3739('0x10'));var Redis=require(_0x3739('0x11'));var authService=require(_0x3739('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x3739('0x13'));var logger=require(_0x3739('0x14'))(_0x3739('0x15'));var utils=require(_0x3739('0x16'));var config=require(_0x3739('0x17'));var db=require(_0x3739('0x18'))['db'];function respondWithStatusCode(_0x5430ee,_0x376957){_0x376957=_0x376957||0xcc;return function(_0x537acc){if(_0x537acc){return _0x5430ee[_0x3739('0x19')](_0x376957);}return _0x5430ee['status'](_0x376957)[_0x3739('0x1a')]();};}function respondWithResult(_0xf49881,_0x1178af){_0x1178af=_0x1178af||0xc8;return function(_0x55ac88){if(_0x55ac88){return _0xf49881[_0x3739('0x1b')](_0x1178af)[_0x3739('0x1c')](_0x55ac88);}};}function respondWithFilteredResult(_0x50f129,_0x323ce4){return function(_0x4b1f40){if(_0x4b1f40){var _0x301983=_0x4b1f40[_0x3739('0x1d')],_0x3628b7=_0x323ce4[_0x3739('0x1e')],_0x215ff1=_0x323ce4[_0x3739('0x1e')]+_0x323ce4[_0x3739('0x1f')],_0x216bd6;if(_0x215ff1>=_0x301983){_0x215ff1=_0x301983;_0x216bd6=0xc8;}else{_0x216bd6=0xce;}_0x50f129[_0x3739('0x1b')](_0x216bd6);return _0x50f129[_0x3739('0x20')](_0x3739('0x21'),_0x3628b7+'-'+_0x215ff1+'/'+_0x301983)[_0x3739('0x1c')](_0x4b1f40);}return null;};}function patchUpdates(_0x19a7d1){return function(_0x1d5475){try{jsonpatch[_0x3739('0x22')](_0x1d5475,_0x19a7d1,!![]);}catch(_0x278d38){return BPromise['reject'](_0x278d38);}return _0x1d5475[_0x3739('0x23')]();};}function saveUpdates(_0x373712,_0xe57f70){return function(_0x3d5fe4){if(_0x3d5fe4){return _0x3d5fe4[_0x3739('0x24')](_0x373712)[_0x3739('0x25')](function(_0x1f48fc){return _0x1f48fc;});}return null;};}function removeEntity(_0x34f259,_0x2634b0){return function(_0x490a19){if(_0x490a19){return _0x490a19[_0x3739('0x26')]()[_0x3739('0x25')](function(){_0x34f259[_0x3739('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0xe90c95,_0x250a55){return function(_0x37fd91){if(!_0x37fd91){_0xe90c95[_0x3739('0x19')](0x194);}return _0x37fd91;};}function handleError(_0x5f13dc,_0x121bda){_0x121bda=_0x121bda||0x1f4;return function(_0x2d492d){logger[_0x3739('0x27')](_0x2d492d[_0x3739('0x28')]);if(_0x2d492d[_0x3739('0x29')]){delete _0x2d492d[_0x3739('0x29')];}_0x5f13dc[_0x3739('0x1b')](_0x121bda)[_0x3739('0x2a')](_0x2d492d);};}exports['index']=function(_0x1e97bb,_0x5e15a1){var _0x57ee15={},_0x51b8fb={},_0x44abcd={'count':0x0,'rows':[]};var _0x22f72a=db[_0x3739('0x2b')]['rawAttributes'];_0x51b8fb['model']=_[_0x3739('0x2c')](_[_0x3739('0x2d')](_0x22f72a),[_0x3739('0x29')]);_0x51b8fb[_0x3739('0x2e')]=_['keys'](_0x1e97bb[_0x3739('0x2e')]);_0x51b8fb[_0x3739('0x2f')]=_[_0x3739('0x30')](_0x51b8fb['model'],_0x51b8fb[_0x3739('0x2e')]);_0x57ee15['attributes']=_[_0x3739('0x30')](_0x51b8fb[_0x3739('0x31')],qs['fields'](_0x1e97bb[_0x3739('0x2e')][_0x3739('0x32')]));_0x57ee15[_0x3739('0x33')]=_0x57ee15[_0x3739('0x33')][_0x3739('0x34')]?_0x57ee15[_0x3739('0x33')]:_0x51b8fb[_0x3739('0x31')];if(!_0x1e97bb['query']['hasOwnProperty']('nolimit')){_0x57ee15[_0x3739('0x1f')]=qs[_0x3739('0x1f')](_0x1e97bb[_0x3739('0x2e')][_0x3739('0x1f')]);_0x57ee15['offset']=qs[_0x3739('0x1e')](_0x1e97bb[_0x3739('0x2e')][_0x3739('0x1e')]);}_0x57ee15[_0x3739('0x35')]=qs['sort'](_0x1e97bb[_0x3739('0x2e')]['sort']);_0x57ee15[_0x3739('0x36')]=qs[_0x3739('0x2f')](_['pick'](_0x1e97bb['query'],_0x51b8fb[_0x3739('0x2f')]));if(_0x1e97bb[_0x3739('0x2e')][_0x3739('0x37')]){_0x57ee15[_0x3739('0x36')]=_['merge'](_0x57ee15[_0x3739('0x36')],{'$or':_[_0x3739('0x38')](_0x22f72a,function(_0x208054){if(_0x208054[_0x3739('0x39')][_0x3739('0x3a')]!=='VIRTUAL'){var _0x25e85c={};_0x25e85c[_0x208054['field']]={'$like':'%'+_0x1e97bb['query'][_0x3739('0x37')]+'%'};return _0x25e85c;}})});}_0x57ee15=_[_0x3739('0x3b')]({},_0x57ee15,_0x1e97bb[_0x3739('0x3c')]);var _0x360b60={'where':_0x57ee15[_0x3739('0x36')]};return db[_0x3739('0x2b')]['count'](_0x360b60)[_0x3739('0x25')](function(_0x287cf3){_0x44abcd['count']=_0x287cf3;if(_0x1e97bb[_0x3739('0x2e')][_0x3739('0x3d')]){_0x57ee15[_0x3739('0x3e')]=[{'all':!![]}];}return db[_0x3739('0x2b')]['findAll'](_0x57ee15);})[_0x3739('0x25')](function(_0x5b9e69){_0x44abcd[_0x3739('0x3f')]=_0x5b9e69;return _0x44abcd;})['then'](respondWithFilteredResult(_0x5e15a1,_0x57ee15))[_0x3739('0x40')](handleError(_0x5e15a1,null));};exports[_0x3739('0x41')]=function(_0x337f23,_0x1d7e4d){var _0x29d62b={'raw':!![],'where':{'id':_0x337f23[_0x3739('0x42')]['id']}},_0x5795ae={};_0x5795ae[_0x3739('0x31')]=_[_0x3739('0x2d')](db[_0x3739('0x2b')][_0x3739('0x43')]);_0x5795ae[_0x3739('0x2e')]=_[_0x3739('0x2d')](_0x337f23[_0x3739('0x2e')]);_0x5795ae[_0x3739('0x2f')]=_['intersection'](_0x5795ae[_0x3739('0x31')],_0x5795ae[_0x3739('0x2e')]);_0x29d62b[_0x3739('0x33')]=_[_0x3739('0x30')](_0x5795ae[_0x3739('0x31')],qs[_0x3739('0x32')](_0x337f23[_0x3739('0x2e')][_0x3739('0x32')]));_0x29d62b[_0x3739('0x33')]=_0x29d62b[_0x3739('0x33')][_0x3739('0x34')]?_0x29d62b[_0x3739('0x33')]:_0x5795ae[_0x3739('0x31')];if(_0x337f23[_0x3739('0x2e')][_0x3739('0x3d')]){_0x29d62b[_0x3739('0x3e')]=[{'all':!![]}];}_0x29d62b=_[_0x3739('0x3b')]({},_0x29d62b,_0x337f23[_0x3739('0x3c')]);return db[_0x3739('0x2b')][_0x3739('0x44')](_0x29d62b)[_0x3739('0x25')](handleEntityNotFound(_0x1d7e4d,null))[_0x3739('0x25')](respondWithResult(_0x1d7e4d,null))[_0x3739('0x40')](handleError(_0x1d7e4d,null));};exports[_0x3739('0x45')]=function(_0x524fa9,_0x2d95b1){return db[_0x3739('0x46')][_0x3739('0x47')](function(_0x3e5d66){return db[_0x3739('0x2b')][_0x3739('0x45')](_0x524fa9[_0x3739('0x48')],{'transaction':_0x3e5d66});})['then'](respondWithResult(_0x2d95b1,0xc9))[_0x3739('0x40')](handleError(_0x2d95b1,null));};exports[_0x3739('0x24')]=function(_0x20de8a,_0x184fbf){if(_0x20de8a[_0x3739('0x48')]['id']){delete _0x20de8a[_0x3739('0x48')]['id'];}return db[_0x3739('0x2b')][_0x3739('0x44')]({'where':{'id':_0x20de8a[_0x3739('0x42')]['id']}})['then'](handleEntityNotFound(_0x184fbf,null))[_0x3739('0x25')](saveUpdates(_0x20de8a[_0x3739('0x48')],null))[_0x3739('0x25')](respondWithResult(_0x184fbf,null))[_0x3739('0x40')](handleError(_0x184fbf,null));};exports['destroy']=function(_0x1a0568,_0xb13a85){return db['CmCustomField'][_0x3739('0x44')]({'where':{'id':_0x1a0568['params']['id']}})[_0x3739('0x25')](handleEntityNotFound(_0xb13a85,null))['then'](removeEntity(_0xb13a85,null))[_0x3739('0x40')](handleError(_0xb13a85,null));};
\ No newline at end of file
+var _0x859a=['include','findAll','rows','catch','show','params','merge','find','create','sequelize','transaction','body','html-pdf','eml-format','rimraf','moment','bluebird','util','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','sendStatus','status','count','offset','limit','set','json','apply','reject','update','then','destroy','end','error','name','send','index','CmCustomField','rawAttributes','differenceBy','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','key','VIRTUAL','options','includeAll'];(function(_0x333f88,_0x369a51){var _0x13b3b4=function(_0xaf4dbe){while(--_0xaf4dbe){_0x333f88['push'](_0x333f88['shift']());}};_0x13b3b4(++_0x369a51);}(_0x859a,0x1c8));var _0xa859=function(_0x28bdcc,_0x3ce22b){_0x28bdcc=_0x28bdcc-0x0;var _0x35369c=_0x859a[_0x28bdcc];return _0x35369c;};'use strict';var pdf=require(_0xa859('0x0'));var emlformat=require(_0xa859('0x1'));var rimraf=require(_0xa859('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xa859('0x3'));var BPromise=require(_0xa859('0x4'));var Mustache=require('mustache');var util=require(_0xa859('0x5'));var path=require('path');var sox=require(_0xa859('0x6'));var csv=require('to-csv');var ejs=require(_0xa859('0x7'));var fs=require('fs');var _=require(_0xa859('0x8'));var squel=require(_0xa859('0x9'));var crypto=require('crypto');var jsforce=require(_0xa859('0xa'));var deskjs=require(_0xa859('0xb'));var toCsv=require(_0xa859('0xc'));var querystring=require(_0xa859('0xd'));var Papa=require(_0xa859('0xe'));var Redis=require(_0xa859('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xa859('0x10'));var hardwareService=require(_0xa859('0x11'));var logger=require('../../config/logger')(_0xa859('0x12'));var utils=require(_0xa859('0x13'));var config=require(_0xa859('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x37f085,_0x37589c){_0x37589c=_0x37589c||0xcc;return function(_0x49cab1){if(_0x49cab1){return _0x37f085[_0xa859('0x15')](_0x37589c);}return _0x37f085[_0xa859('0x16')](_0x37589c)['end']();};}function respondWithResult(_0x47abd9,_0x56a548){_0x56a548=_0x56a548||0xc8;return function(_0x15b7fb){if(_0x15b7fb){return _0x47abd9[_0xa859('0x16')](_0x56a548)['json'](_0x15b7fb);}};}function respondWithFilteredResult(_0x3d3f5d,_0x538892){return function(_0x53f30f){if(_0x53f30f){var _0x5cfd3c=_0x53f30f[_0xa859('0x17')],_0x22d164=_0x538892[_0xa859('0x18')],_0x15ff5c=_0x538892['offset']+_0x538892[_0xa859('0x19')],_0x4f3373;if(_0x15ff5c>=_0x5cfd3c){_0x15ff5c=_0x5cfd3c;_0x4f3373=0xc8;}else{_0x4f3373=0xce;}_0x3d3f5d['status'](_0x4f3373);return _0x3d3f5d[_0xa859('0x1a')]('Content-Range',_0x22d164+'-'+_0x15ff5c+'/'+_0x5cfd3c)[_0xa859('0x1b')](_0x53f30f);}return null;};}function patchUpdates(_0x5ea8eb){return function(_0x173d12){try{jsonpatch[_0xa859('0x1c')](_0x173d12,_0x5ea8eb,!![]);}catch(_0xfbfb7e){return BPromise[_0xa859('0x1d')](_0xfbfb7e);}return _0x173d12['save']();};}function saveUpdates(_0x20b36a,_0x1bd694){return function(_0x57f5dc){if(_0x57f5dc){return _0x57f5dc[_0xa859('0x1e')](_0x20b36a)[_0xa859('0x1f')](function(_0x17dc59){return _0x17dc59;});}return null;};}function removeEntity(_0x221e73,_0x1dd61a){return function(_0x296e57){if(_0x296e57){return _0x296e57[_0xa859('0x20')]()[_0xa859('0x1f')](function(){_0x221e73[_0xa859('0x16')](0xcc)[_0xa859('0x21')]();});}};}function handleEntityNotFound(_0x750308,_0x2b13c2){return function(_0x131854){if(!_0x131854){_0x750308[_0xa859('0x15')](0x194);}return _0x131854;};}function handleError(_0x27dec7,_0x2ed6ee){_0x2ed6ee=_0x2ed6ee||0x1f4;return function(_0x4eb6df){logger[_0xa859('0x22')](_0x4eb6df['stack']);if(_0x4eb6df[_0xa859('0x23')]){delete _0x4eb6df[_0xa859('0x23')];}_0x27dec7[_0xa859('0x16')](_0x2ed6ee)[_0xa859('0x24')](_0x4eb6df);};}exports[_0xa859('0x25')]=function(_0x1dcd8c,_0x341341){var _0x30ac50={},_0x321e36={},_0x5a005d={'count':0x0,'rows':[]};var _0x4a2cd0=db[_0xa859('0x26')][_0xa859('0x27')];_0x321e36['model']=_[_0xa859('0x28')](_[_0xa859('0x29')](_0x4a2cd0),['name']);_0x321e36[_0xa859('0x2a')]=_[_0xa859('0x29')](_0x1dcd8c[_0xa859('0x2a')]);_0x321e36[_0xa859('0x2b')]=_[_0xa859('0x2c')](_0x321e36[_0xa859('0x2d')],_0x321e36[_0xa859('0x2a')]);_0x30ac50[_0xa859('0x2e')]=_[_0xa859('0x2c')](_0x321e36[_0xa859('0x2d')],qs[_0xa859('0x2f')](_0x1dcd8c[_0xa859('0x2a')]['fields']));_0x30ac50[_0xa859('0x2e')]=_0x30ac50[_0xa859('0x2e')][_0xa859('0x30')]?_0x30ac50[_0xa859('0x2e')]:_0x321e36[_0xa859('0x2d')];if(!_0x1dcd8c['query'][_0xa859('0x31')](_0xa859('0x32'))){_0x30ac50['limit']=qs[_0xa859('0x19')](_0x1dcd8c[_0xa859('0x2a')][_0xa859('0x19')]);_0x30ac50[_0xa859('0x18')]=qs[_0xa859('0x18')](_0x1dcd8c['query']['offset']);}_0x30ac50[_0xa859('0x33')]=qs[_0xa859('0x34')](_0x1dcd8c['query'][_0xa859('0x34')]);_0x30ac50[_0xa859('0x35')]=qs['filters'](_[_0xa859('0x36')](_0x1dcd8c['query'],_0x321e36[_0xa859('0x2b')]));if(_0x1dcd8c[_0xa859('0x2a')][_0xa859('0x37')]){_0x30ac50[_0xa859('0x35')]=_['merge'](_0x30ac50[_0xa859('0x35')],{'$or':_[_0xa859('0x38')](_0x4a2cd0,function(_0x3ac244){if(_0x3ac244[_0xa859('0x39')][_0xa859('0x3a')]!==_0xa859('0x3b')){var _0xbcafb7={};_0xbcafb7[_0x3ac244['field']]={'$like':'%'+_0x1dcd8c[_0xa859('0x2a')]['filter']+'%'};return _0xbcafb7;}})});}_0x30ac50=_['merge']({},_0x30ac50,_0x1dcd8c[_0xa859('0x3c')]);var _0x2b4fef={'where':_0x30ac50[_0xa859('0x35')]};return db[_0xa859('0x26')][_0xa859('0x17')](_0x2b4fef)[_0xa859('0x1f')](function(_0x57d335){_0x5a005d[_0xa859('0x17')]=_0x57d335;if(_0x1dcd8c[_0xa859('0x2a')][_0xa859('0x3d')]){_0x30ac50[_0xa859('0x3e')]=[{'all':!![]}];}return db[_0xa859('0x26')][_0xa859('0x3f')](_0x30ac50);})[_0xa859('0x1f')](function(_0x1f7639){_0x5a005d[_0xa859('0x40')]=_0x1f7639;return _0x5a005d;})[_0xa859('0x1f')](respondWithFilteredResult(_0x341341,_0x30ac50))[_0xa859('0x41')](handleError(_0x341341,null));};exports[_0xa859('0x42')]=function(_0x4a9ec1,_0x354f52){var _0x4445bf={'raw':!![],'where':{'id':_0x4a9ec1[_0xa859('0x43')]['id']}},_0x48f4a9={};_0x48f4a9['model']=_[_0xa859('0x29')](db['CmCustomField']['rawAttributes']);_0x48f4a9[_0xa859('0x2a')]=_[_0xa859('0x29')](_0x4a9ec1[_0xa859('0x2a')]);_0x48f4a9[_0xa859('0x2b')]=_[_0xa859('0x2c')](_0x48f4a9['model'],_0x48f4a9['query']);_0x4445bf['attributes']=_[_0xa859('0x2c')](_0x48f4a9[_0xa859('0x2d')],qs['fields'](_0x4a9ec1[_0xa859('0x2a')][_0xa859('0x2f')]));_0x4445bf['attributes']=_0x4445bf['attributes']['length']?_0x4445bf['attributes']:_0x48f4a9[_0xa859('0x2d')];if(_0x4a9ec1[_0xa859('0x2a')][_0xa859('0x3d')]){_0x4445bf[_0xa859('0x3e')]=[{'all':!![]}];}_0x4445bf=_[_0xa859('0x44')]({},_0x4445bf,_0x4a9ec1[_0xa859('0x3c')]);return db[_0xa859('0x26')][_0xa859('0x45')](_0x4445bf)[_0xa859('0x1f')](handleEntityNotFound(_0x354f52,null))[_0xa859('0x1f')](respondWithResult(_0x354f52,null))[_0xa859('0x41')](handleError(_0x354f52,null));};exports[_0xa859('0x46')]=function(_0x17d605,_0x76029c){return db[_0xa859('0x47')][_0xa859('0x48')](function(_0x2ed30f){return db[_0xa859('0x26')]['create'](_0x17d605[_0xa859('0x49')],{'transaction':_0x2ed30f});})[_0xa859('0x1f')](respondWithResult(_0x76029c,0xc9))[_0xa859('0x41')](handleError(_0x76029c,null));};exports[_0xa859('0x1e')]=function(_0x202fac,_0x425f81){if(_0x202fac['body']['id']){delete _0x202fac[_0xa859('0x49')]['id'];}return db[_0xa859('0x26')][_0xa859('0x45')]({'where':{'id':_0x202fac[_0xa859('0x43')]['id']}})['then'](handleEntityNotFound(_0x425f81,null))[_0xa859('0x1f')](saveUpdates(_0x202fac['body'],null))[_0xa859('0x1f')](respondWithResult(_0x425f81,null))[_0xa859('0x41')](handleError(_0x425f81,null));};exports['destroy']=function(_0x321c3c,_0x33e2fb){return db[_0xa859('0x26')]['find']({'where':{'id':_0x321c3c[_0xa859('0x43')]['id']}})[_0xa859('0x1f')](handleEntityNotFound(_0x33e2fb,null))[_0xa859('0x1f')](removeEntity(_0x33e2fb,null))[_0xa859('0x41')](handleError(_0x33e2fb,null));};
\ No newline at end of file
index 718e736..f058d10 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d63=['type','text','number','INTEGER','BOOLEAN','defaultValue','queryInterface','addColumn','cm_contacts','format','cf_%d','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','define','CmCustomField','cm_custom_fields','get','TEXT','transaction'];(function(_0x35116d,_0x30c8c7){var _0x16b2ab=function(_0x34301b){while(--_0x34301b){_0x35116d['push'](_0x35116d['shift']());}};_0x16b2ab(++_0x30c8c7);}(_0x4d63,0x16a));var _0x34d6=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x4d63[_0x321bb2];return _0x9c12ed;};'use strict';var _=require('lodash');var util=require(_0x34d6('0x0'));var logger=require(_0x34d6('0x1'))(_0x34d6('0x2'));var moment=require(_0x34d6('0x3'));var BPromise=require(_0x34d6('0x4'));var rp=require(_0x34d6('0x5'));var fs=require('fs');var path=require(_0x34d6('0x6'));var rimraf=require(_0x34d6('0x7'));var config=require(_0x34d6('0x8'));var attributes=require('./cmCustomField.attributes');module[_0x34d6('0x9')]=function(_0xd9cab6,_0x25f5d2){return _0xd9cab6[_0x34d6('0xa')](_0x34d6('0xb'),attributes,{'tableName':_0x34d6('0xc'),'paranoid':!![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x3bcf9f,_0x5dcba2,_0x29cbb8){var _0x468b1b=_0x3bcf9f[_0x34d6('0xd')]({'plain':!![]});var _0x2c6cd0={'type':_0x25f5d2[_0x34d6('0xe')],'transaction':_0x5dcba2[_0x34d6('0xf')]};switch(_0x468b1b[_0x34d6('0x10')]){case _0x34d6('0x11'):_0x2c6cd0['type']=_0x25f5d2['TEXT'];break;case _0x34d6('0x12'):_0x2c6cd0[_0x34d6('0x10')]=_0x25f5d2[_0x34d6('0x13')];break;case'switch':_0x2c6cd0[_0x34d6('0x10')]=_0x25f5d2[_0x34d6('0x14')];_0x2c6cd0[_0x34d6('0x15')]=![];break;}_0xd9cab6[_0x34d6('0x16')][_0x34d6('0x17')](_0x34d6('0x18'),util[_0x34d6('0x19')](_0x34d6('0x1a'),_0x468b1b['id']),_0x2c6cd0);_0x29cbb8();}}});};
\ No newline at end of file
+var _0x352c=['./cmCustomField.attributes','exports','define','CmCustomField','get','TEXT','transaction','type','text','number','INTEGER','BOOLEAN','defaultValue','queryInterface','addColumn','format','cf_%d','lodash','util','../../config/logger','moment','bluebird','request-promise','path','rimraf'];(function(_0xed95eb,_0x2132e1){var _0x292cd7=function(_0x219f9c){while(--_0x219f9c){_0xed95eb['push'](_0xed95eb['shift']());}};_0x292cd7(++_0x2132e1);}(_0x352c,0x1a1));var _0xc352=function(_0x2ec53e,_0x59038e){_0x2ec53e=_0x2ec53e-0x0;var _0x3a42d0=_0x352c[_0x2ec53e];return _0x3a42d0;};'use strict';var _=require(_0xc352('0x0'));var util=require(_0xc352('0x1'));var logger=require(_0xc352('0x2'))('api');var moment=require(_0xc352('0x3'));var BPromise=require(_0xc352('0x4'));var rp=require(_0xc352('0x5'));var fs=require('fs');var path=require(_0xc352('0x6'));var rimraf=require(_0xc352('0x7'));var config=require('../../config/environment');var attributes=require(_0xc352('0x8'));module[_0xc352('0x9')]=function(_0x1d2777,_0x3775aa){return _0x1d2777[_0xc352('0xa')](_0xc352('0xb'),attributes,{'tableName':'cm_custom_fields','paranoid':!![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x21a104,_0x4a950f,_0x885875){var _0xc31f6a=_0x21a104[_0xc352('0xc')]({'plain':!![]});var _0x4cda7c={'type':_0x3775aa[_0xc352('0xd')],'transaction':_0x4a950f[_0xc352('0xe')]};switch(_0xc31f6a[_0xc352('0xf')]){case _0xc352('0x10'):_0x4cda7c[_0xc352('0xf')]=_0x3775aa['TEXT'];break;case _0xc352('0x11'):_0x4cda7c[_0xc352('0xf')]=_0x3775aa[_0xc352('0x12')];break;case'switch':_0x4cda7c[_0xc352('0xf')]=_0x3775aa[_0xc352('0x13')];_0x4cda7c[_0xc352('0x14')]=![];break;}_0x1d2777[_0xc352('0x15')][_0xc352('0x16')]('cm_contacts',util[_0xc352('0x17')](_0xc352('0x18'),_0xc31f6a['id']),_0x4cda7c);_0x885875();}}});};
\ No newline at end of file
index d50c319..e4fd2a5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x873c=['randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','request','then','request\x20sent','debug','error','code','CmCustomField,\x20%s,\x20%s','message','info','result','catch','moment','bluebird'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0x873c,0x166));var _0xc873=function(_0x3ea07b,_0x10df30){_0x3ea07b=_0x3ea07b-0x0;var _0x3b7e76=_0x873c[_0x3ea07b];return _0x3b7e76;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xc873('0x0'));var BPromise=require(_0xc873('0x1'));var rs=require(_0xc873('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xc873('0x3'))['db'];var utils=require(_0xc873('0x4'));var logger=require(_0xc873('0x5'))(_0xc873('0x6'));var config=require('../../config/environment');var jayson=require(_0xc873('0x7'));var client=jayson[_0xc873('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2d0d6e,_0x265ecd,_0x27ba0f){return new BPromise(function(_0x1dd742,_0x4ef53b){return client[_0xc873('0x9')](_0x2d0d6e,_0x27ba0f)[_0xc873('0xa')](function(_0x370b7e){logger['info']('CmCustomField,\x20%s,\x20%s',_0x265ecd,_0xc873('0xb'));logger[_0xc873('0xc')]('CmCustomField,\x20%s,\x20%s,\x20%s',_0x265ecd,_0xc873('0xb'),JSON['stringify'](_0x370b7e));if(_0x370b7e[_0xc873('0xd')]){if(_0x370b7e[_0xc873('0xd')][_0xc873('0xe')]===0x1f4){logger[_0xc873('0xd')](_0xc873('0xf'),_0x265ecd,_0x370b7e[_0xc873('0xd')]['message']);return _0x4ef53b(_0x370b7e['error'][_0xc873('0x10')]);}logger['error']('CmCustomField,\x20%s,\x20%s',_0x265ecd,_0x370b7e[_0xc873('0xd')][_0xc873('0x10')]);return _0x1dd742(_0x370b7e['error'][_0xc873('0x10')]);}else{logger[_0xc873('0x11')]('CmCustomField,\x20%s,\x20%s',_0x265ecd,_0xc873('0xb'));_0x1dd742(_0x370b7e[_0xc873('0x12')][_0xc873('0x10')]);}})[_0xc873('0x13')](function(_0x158492){logger[_0xc873('0xd')](_0xc873('0xf'),_0x265ecd,_0x158492);_0x4ef53b(_0x158492);});});}
\ No newline at end of file
+var _0x7f1f=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','CmCustomField,\x20%s,\x20%s','request\x20sent','debug','CmCustomField,\x20%s,\x20%s,\x20%s','stringify','error','message','lodash','bluebird','../../mysqldb'];(function(_0x130450,_0x223094){var _0x5dcee5=function(_0xec82c5){while(--_0xec82c5){_0x130450['push'](_0x130450['shift']());}};_0x5dcee5(++_0x223094);}(_0x7f1f,0x1c5));var _0xf7f1=function(_0x55e08b,_0x421620){_0x55e08b=_0x55e08b-0x0;var _0xd1a7ff=_0x7f1f[_0x55e08b];return _0xd1a7ff;};'use strict';var _=require(_0xf7f1('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xf7f1('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0xf7f1('0x2'))['db'];var utils=require(_0xf7f1('0x3'));var logger=require(_0xf7f1('0x4'))(_0xf7f1('0x5'));var config=require(_0xf7f1('0x6'));var jayson=require(_0xf7f1('0x7'));var client=jayson[_0xf7f1('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x31f158,_0x696c6b,_0x30323){return new BPromise(function(_0x38e2fa,_0x34719a){return client[_0xf7f1('0x9')](_0x31f158,_0x30323)[_0xf7f1('0xa')](function(_0x21999f){logger[_0xf7f1('0xb')](_0xf7f1('0xc'),_0x696c6b,_0xf7f1('0xd'));logger[_0xf7f1('0xe')](_0xf7f1('0xf'),_0x696c6b,'request\x20sent',JSON[_0xf7f1('0x10')](_0x21999f));if(_0x21999f[_0xf7f1('0x11')]){if(_0x21999f[_0xf7f1('0x11')]['code']===0x1f4){logger[_0xf7f1('0x11')](_0xf7f1('0xc'),_0x696c6b,_0x21999f[_0xf7f1('0x11')][_0xf7f1('0x12')]);return _0x34719a(_0x21999f['error']['message']);}logger[_0xf7f1('0x11')](_0xf7f1('0xc'),_0x696c6b,_0x21999f[_0xf7f1('0x11')]['message']);return _0x38e2fa(_0x21999f[_0xf7f1('0x11')][_0xf7f1('0x12')]);}else{logger[_0xf7f1('0xb')](_0xf7f1('0xc'),_0x696c6b,_0xf7f1('0xd'));_0x38e2fa(_0x21999f['result']['message']);}})['catch'](function(_0x384ea2){logger['error']('CmCustomField,\x20%s,\x20%s',_0x696c6b,_0x384ea2);_0x34719a(_0x384ea2);});});}
\ No newline at end of file
index 19551b2..899573b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x06ee=['../../components/auth/service','./cmCustomField.controller','isAuthenticated','get','post','/:id','delete','exports','multer','util','path','connect-timeout','express','Router'];(function(_0x56ed8e,_0x25b6cd){var _0x305446=function(_0x50d2c7){while(--_0x50d2c7){_0x56ed8e['push'](_0x56ed8e['shift']());}};_0x305446(++_0x25b6cd);}(_0x06ee,0x14a));var _0xe06e=function(_0x36a537,_0xbc7ef7){_0x36a537=_0x36a537-0x0;var _0x409654=_0x06ee[_0x36a537];return _0x409654;};'use strict';var multer=require(_0xe06e('0x0'));var util=require(_0xe06e('0x1'));var path=require(_0xe06e('0x2'));var timeout=require(_0xe06e('0x3'));var express=require(_0xe06e('0x4'));var router=express[_0xe06e('0x5')]();var auth=require(_0xe06e('0x6'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xe06e('0x7'));router['get']('/',auth[_0xe06e('0x8')](),controller['index']);router[_0xe06e('0x9')]('/:id',auth[_0xe06e('0x8')](),controller['show']);router[_0xe06e('0xa')]('/',auth[_0xe06e('0x8')](),controller['create']);router['put'](_0xe06e('0xb'),auth[_0xe06e('0x8')](),controller['update']);router[_0xe06e('0xc')](_0xe06e('0xb'),auth[_0xe06e('0x8')](),controller['destroy']);module[_0xe06e('0xd')]=router;
\ No newline at end of file
+var _0x6bf6=['post','create','put','delete','destroy','exports','util','path','connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','show'];(function(_0x23c2f5,_0x3fbf7d){var _0x153390=function(_0x149c55){while(--_0x149c55){_0x23c2f5['push'](_0x23c2f5['shift']());}};_0x153390(++_0x3fbf7d);}(_0x6bf6,0x1d1));var _0x66bf=function(_0x3c504b,_0x437693){_0x3c504b=_0x3c504b-0x0;var _0x2e5354=_0x6bf6[_0x3c504b];return _0x2e5354;};'use strict';var multer=require('multer');var util=require(_0x66bf('0x0'));var path=require(_0x66bf('0x1'));var timeout=require(_0x66bf('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x66bf('0x3'));var interaction=require(_0x66bf('0x4'));var config=require(_0x66bf('0x5'));var controller=require('./cmCustomField.controller');router[_0x66bf('0x6')]('/',auth[_0x66bf('0x7')](),controller[_0x66bf('0x8')]);router['get'](_0x66bf('0x9'),auth[_0x66bf('0x7')](),controller[_0x66bf('0xa')]);router[_0x66bf('0xb')]('/',auth[_0x66bf('0x7')](),controller[_0x66bf('0xc')]);router[_0x66bf('0xd')](_0x66bf('0x9'),auth[_0x66bf('0x7')](),controller['update']);router[_0x66bf('0xe')](_0x66bf('0x9'),auth['isAuthenticated'](),controller[_0x66bf('0xf')]);module[_0x66bf('0x10')]=router;
\ No newline at end of file
index 5610e62..c85ea90 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x92b6=['STRING','BOOLEAN','DATE','format','YYYY-MM-DD\x20HH:mm:ss','INTEGER','moment','sequelize','exports'];(function(_0x220f3f,_0x11c540){var _0x1f170e=function(_0x2c0ec9){while(--_0x2c0ec9){_0x220f3f['push'](_0x220f3f['shift']());}};_0x1f170e(++_0x11c540);}(_0x92b6,0x1da));var _0x692b=function(_0x3157ae,_0x879878){_0x3157ae=_0x3157ae-0x0;var _0x1401cb=_0x92b6[_0x3157ae];return _0x1401cb;};'use strict';var moment=require(_0x692b('0x0'));var Sequelize=require(_0x692b('0x1'));module[_0x692b('0x2')]={'phone':{'type':Sequelize[_0x692b('0x3')],'allowNull':![]},'active':{'type':Sequelize[_0x692b('0x4')],'defaultValue':![]},'scheduledat':{'type':Sequelize[_0x692b('0x5')],'defaultValue':moment()[_0x692b('0x6')](_0x692b('0x7'))},'countbusyretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'callback':{'type':Sequelize[_0x692b('0x4')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x692b('0x3')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x692b('0x5')]},'priority':{'type':Sequelize[_0x692b('0x8')](0x2)['UNSIGNED'],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'recallme':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'ContactId':{'type':Sequelize['INTEGER'],'unique':'contactListQueue'},'ListId':{'type':Sequelize[_0x692b('0x8')],'unique':'contactListQueue'},'UserId':{'type':Sequelize['INTEGER']},'VoiceQueueId':{'type':Sequelize[_0x692b('0x8')],'unique':'contactListQueue'},'CampaignId':{'type':Sequelize['INTEGER']}};
\ No newline at end of file
+var _0xaa42=['INTEGER','BOOLEAN','DATE','UNSIGNED','contactListQueue','sequelize','exports','STRING','YYYY-MM-DD\x20HH:mm:ss'];(function(_0x125bd4,_0x129efa){var _0x2ca659=function(_0x296758){while(--_0x296758){_0x125bd4['push'](_0x125bd4['shift']());}};_0x2ca659(++_0x129efa);}(_0xaa42,0xd4));var _0x2aa4=function(_0xb24a3e,_0x4a3594){_0xb24a3e=_0xb24a3e-0x0;var _0x4038d7=_0xaa42[_0xb24a3e];return _0x4038d7;};'use strict';var moment=require('moment');var Sequelize=require(_0x2aa4('0x0'));module[_0x2aa4('0x1')]={'phone':{'type':Sequelize[_0x2aa4('0x2')],'allowNull':![]},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'scheduledat':{'type':Sequelize['DATE'],'defaultValue':moment()['format'](_0x2aa4('0x3'))},'countbusyretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x2aa4('0x4')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'callback':{'type':Sequelize[_0x2aa4('0x5')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x2aa4('0x2')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x2aa4('0x6')]},'priority':{'type':Sequelize[_0x2aa4('0x4')](0x2)[_0x2aa4('0x7')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'recallme':{'type':Sequelize[_0x2aa4('0x5')],'defaultValue':![]},'ContactId':{'type':Sequelize[_0x2aa4('0x4')],'unique':'contactListQueue'},'ListId':{'type':Sequelize[_0x2aa4('0x4')],'unique':_0x2aa4('0x8')},'UserId':{'type':Sequelize['INTEGER']},'VoiceQueueId':{'type':Sequelize[_0x2aa4('0x4')],'unique':_0x2aa4('0x8')},'CampaignId':{'type':Sequelize[_0x2aa4('0x4')]}};
\ No newline at end of file
index c21ca38..004449d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0d8d=['COALESCE(CmHopper.UserId,\x200)\x20ASC','priority','findOne','scheduledat','LOCK','UPDATE','CmCompany','Company','CmList','List','Queue','getOpenContacts','CmHopper,\x20%s,\x20%s,\x20%s','entity\x20not\x20found','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','ioredis','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','stack','name','send','index','keys','query','filters','model','$and','$gt','$gte','$lt','$ne','$not','$between','$notBetween','$like','$notLike','$iLike','$notILike','$overlap','$contains','$contained','$any','attributes','fields','length','hasOwnProperty','order','sort','where','pick','filter','merge','map','type','CmHopper','includeAll','include','findAll','rows','params','intersection','options','create','body','find','describe','catch','destroy','VoiceQueueId','CampaignId','VoiceQueue','Campaign','omit','dataValues','createdAt','updatedAt','statedesc','deleted','campaign','membername','user','UserId','deletedat','format','YYYY-MM-DD\x20HH:mm:ss','calleridnum','campaigntype','queue','ContactId','firstName','lastName','isNil','calleridname','CmHopperFinal','getPreview','CmContact','getVoiceQueues','outbound','preview','dialOrderByScheduledAt','transaction','direction','hopperIds','ASC','scheduledAt','DESC','sequelize','literal'];(function(_0x3a6bca,_0xbd2a54){var _0x23c6fd=function(_0x1b0a21){while(--_0x1b0a21){_0x3a6bca['push'](_0x3a6bca['shift']());}};_0x23c6fd(++_0xbd2a54);}(_0x0d8d,0x1ac));var _0xd0d8=function(_0x2ac573,_0xeeaa8b){_0x2ac573=_0x2ac573-0x0;var _0x11415f=_0x0d8d[_0x2ac573];return _0x11415f;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xd0d8('0x0'));var zipdir=require(_0xd0d8('0x1'));var jsonpatch=require(_0xd0d8('0x2'));var rp=require(_0xd0d8('0x3'));var moment=require(_0xd0d8('0x4'));var BPromise=require(_0xd0d8('0x5'));var Mustache=require('mustache');var util=require(_0xd0d8('0x6'));var path=require(_0xd0d8('0x7'));var sox=require('sox');var csv=require(_0xd0d8('0x8'));var ejs=require(_0xd0d8('0x9'));var fs=require('fs');var _=require(_0xd0d8('0xa'));var squel=require(_0xd0d8('0xb'));var crypto=require(_0xd0d8('0xc'));var jsforce=require(_0xd0d8('0xd'));var deskjs=require('desk.js');var toCsv=require(_0xd0d8('0x8'));var querystring=require('querystring');var Papa=require(_0xd0d8('0xe'));var Redis=require(_0xd0d8('0xf'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xd0d8('0x10'));var utils=require(_0xd0d8('0x11'));var config=require(_0xd0d8('0x12'));var db=require(_0xd0d8('0x13'))['db'];function respondWithStatusCode(_0x1f45b1,_0xf3588){_0xf3588=_0xf3588||0xcc;return function(_0x5261f7){if(_0x5261f7){return _0x1f45b1[_0xd0d8('0x14')](_0xf3588);}return _0x1f45b1[_0xd0d8('0x15')](_0xf3588)[_0xd0d8('0x16')]();};}function respondWithResult(_0x549c07,_0x1739aa){_0x1739aa=_0x1739aa||0xc8;return function(_0x3523f0){if(_0x3523f0){return _0x549c07[_0xd0d8('0x15')](_0x1739aa)[_0xd0d8('0x17')](_0x3523f0);}};}function respondWithFilteredResult(_0x41a98b,_0x2aa285){return function(_0x440ed0){if(_0x440ed0){var _0x4090a0=_0x440ed0[_0xd0d8('0x18')],_0x3dba1b=_0x2aa285[_0xd0d8('0x19')],_0x3257fc=_0x2aa285[_0xd0d8('0x19')]+_0x2aa285[_0xd0d8('0x1a')],_0x2ef694;if(_0x3257fc>=_0x4090a0){_0x3257fc=_0x4090a0;_0x2ef694=0xc8;}else{_0x2ef694=0xce;}_0x41a98b[_0xd0d8('0x15')](_0x2ef694);return _0x41a98b[_0xd0d8('0x1b')](_0xd0d8('0x1c'),_0x3dba1b+'-'+_0x3257fc+'/'+_0x4090a0)[_0xd0d8('0x17')](_0x440ed0);}return null;};}function patchUpdates(_0x2338a5){return function(_0xf7a5b){try{jsonpatch[_0xd0d8('0x1d')](_0xf7a5b,_0x2338a5,!![]);}catch(_0x10d4aa){return BPromise[_0xd0d8('0x1e')](_0x10d4aa);}return _0xf7a5b[_0xd0d8('0x1f')]();};}function saveUpdates(_0x5ad8b6,_0x5df3f7){return function(_0x2200e6){if(_0x2200e6){return _0x2200e6[_0xd0d8('0x20')](_0x5ad8b6)[_0xd0d8('0x21')](function(_0x18cdf0){return _0x18cdf0;});}return null;};}function removeEntity(_0x24bce3,_0x5acc86){return function(_0x31f634){if(_0x31f634){return _0x31f634['destroy']()[_0xd0d8('0x21')](function(){_0x24bce3[_0xd0d8('0x15')](0xcc)[_0xd0d8('0x16')]();});}};}function handleEntityNotFound(_0x194efc,_0x28612e){return function(_0x557405){if(!_0x557405){_0x194efc[_0xd0d8('0x14')](0x194);}return _0x557405;};}function handleError(_0x34ec1d,_0x1154dc){_0x1154dc=_0x1154dc||0x1f4;return function(_0x189bf6){logger['error'](_0x189bf6[_0xd0d8('0x22')]);if(_0x189bf6['name']){delete _0x189bf6[_0xd0d8('0x23')];}_0x34ec1d[_0xd0d8('0x15')](_0x1154dc)[_0xd0d8('0x24')](_0x189bf6);};}exports[_0xd0d8('0x25')]=function(_0x293280,_0x26cf20){var _0x41fa1e={},_0x2e3ef7={},_0x5d544e={'count':0x0,'rows':[]};var _0x4391c1=db['CmHopper']['rawAttributes'];_0x2e3ef7['model']=_[_0xd0d8('0x26')](_0x4391c1);_0x2e3ef7['query']=_[_0xd0d8('0x26')](_0x293280[_0xd0d8('0x27')]);_0x2e3ef7[_0xd0d8('0x28')]=_['intersection'](_0x2e3ef7[_0xd0d8('0x29')],_0x2e3ef7[_0xd0d8('0x27')]);_0x2e3ef7[_0xd0d8('0x28')]=_['concat'](_0x2e3ef7[_0xd0d8('0x28')],[_0xd0d8('0x2a'),'$or',_0xd0d8('0x2b'),_0xd0d8('0x2c'),_0xd0d8('0x2d'),'$lte',_0xd0d8('0x2e'),'$eq',_0xd0d8('0x2f'),_0xd0d8('0x30'),_0xd0d8('0x31'),'$in','$notIn',_0xd0d8('0x32'),_0xd0d8('0x33'),_0xd0d8('0x34'),_0xd0d8('0x35'),'$like',_0xd0d8('0x36'),_0xd0d8('0x37'),_0xd0d8('0x38'),_0xd0d8('0x39')]);_0x41fa1e[_0xd0d8('0x3a')]=_['intersection'](_0x2e3ef7[_0xd0d8('0x29')],qs[_0xd0d8('0x3b')](_0x293280[_0xd0d8('0x27')][_0xd0d8('0x3b')]));_0x41fa1e[_0xd0d8('0x3a')]=_0x41fa1e['attributes'][_0xd0d8('0x3c')]?_0x41fa1e['attributes']:_0x2e3ef7['model'];if(!_0x293280[_0xd0d8('0x27')][_0xd0d8('0x3d')]('nolimit')){_0x41fa1e[_0xd0d8('0x1a')]=qs[_0xd0d8('0x1a')](_0x293280[_0xd0d8('0x27')]['limit']);_0x41fa1e[_0xd0d8('0x19')]=qs[_0xd0d8('0x19')](_0x293280[_0xd0d8('0x27')][_0xd0d8('0x19')]);}_0x41fa1e[_0xd0d8('0x3e')]=qs[_0xd0d8('0x3f')](_0x293280[_0xd0d8('0x27')]['sort']);_0x41fa1e[_0xd0d8('0x40')]=qs[_0xd0d8('0x28')](_[_0xd0d8('0x41')](_0x293280[_0xd0d8('0x27')],_0x2e3ef7['filters']));if(_0x293280['query'][_0xd0d8('0x42')]){_0x41fa1e[_0xd0d8('0x40')]=_[_0xd0d8('0x43')](_0x41fa1e[_0xd0d8('0x40')],{'$or':_[_0xd0d8('0x44')](_0x4391c1,function(_0xe6a426){if(_0xe6a426[_0xd0d8('0x45')]['key']!=='VIRTUAL'){var _0x582383={};_0x582383[_0xe6a426['field']]={'$like':'%'+_0x293280[_0xd0d8('0x27')][_0xd0d8('0x42')]+'%'};return _0x582383;}})});}_0x41fa1e=_[_0xd0d8('0x43')]({},_0x41fa1e,_0x293280['options']);var _0x2e3f56={'where':_0x41fa1e[_0xd0d8('0x40')]};return db[_0xd0d8('0x46')]['count'](_0x2e3f56)[_0xd0d8('0x21')](function(_0x16905e){_0x5d544e[_0xd0d8('0x18')]=_0x16905e;if(_0x293280[_0xd0d8('0x27')][_0xd0d8('0x47')]){_0x41fa1e[_0xd0d8('0x48')]=[{'all':!![]}];}return db[_0xd0d8('0x46')][_0xd0d8('0x49')](_0x41fa1e);})[_0xd0d8('0x21')](function(_0x4647dc){_0x5d544e[_0xd0d8('0x4a')]=_0x4647dc;return _0x5d544e;})['then'](respondWithFilteredResult(_0x26cf20,_0x41fa1e))['catch'](handleError(_0x26cf20,null));};exports['show']=function(_0x4faea7,_0x5afd6f){var _0x550eda={'raw':!![],'where':{'id':_0x4faea7[_0xd0d8('0x4b')]['id']}},_0x2e0a4b={};_0x2e0a4b[_0xd0d8('0x29')]=_['keys'](db[_0xd0d8('0x46')]['rawAttributes']);_0x2e0a4b['query']=_['keys'](_0x4faea7[_0xd0d8('0x27')]);_0x2e0a4b[_0xd0d8('0x28')]=_[_0xd0d8('0x4c')](_0x2e0a4b[_0xd0d8('0x29')],_0x2e0a4b[_0xd0d8('0x27')]);_0x550eda['attributes']=_[_0xd0d8('0x4c')](_0x2e0a4b[_0xd0d8('0x29')],qs[_0xd0d8('0x3b')](_0x4faea7[_0xd0d8('0x27')][_0xd0d8('0x3b')]));_0x550eda[_0xd0d8('0x3a')]=_0x550eda[_0xd0d8('0x3a')][_0xd0d8('0x3c')]?_0x550eda[_0xd0d8('0x3a')]:_0x2e0a4b['model'];if(_0x4faea7[_0xd0d8('0x27')][_0xd0d8('0x47')]){_0x550eda[_0xd0d8('0x48')]=[{'all':!![]}];}_0x550eda=_['merge']({},_0x550eda,_0x4faea7[_0xd0d8('0x4d')]);return db[_0xd0d8('0x46')]['find'](_0x550eda)[_0xd0d8('0x21')](handleEntityNotFound(_0x5afd6f,null))[_0xd0d8('0x21')](respondWithResult(_0x5afd6f,null))['catch'](handleError(_0x5afd6f,null));};exports[_0xd0d8('0x4e')]=function(_0x451ef7,_0x5c65dc){return db[_0xd0d8('0x46')][_0xd0d8('0x4e')](_0x451ef7[_0xd0d8('0x4f')],{})['then'](respondWithResult(_0x5c65dc,0xc9))['catch'](handleError(_0x5c65dc,null));};exports[_0xd0d8('0x20')]=function(_0xedc5e8,_0x3aa480){if(_0xedc5e8[_0xd0d8('0x4f')]['id']){delete _0xedc5e8[_0xd0d8('0x4f')]['id'];}return db[_0xd0d8('0x46')][_0xd0d8('0x50')]({'where':{'id':_0xedc5e8[_0xd0d8('0x4b')]['id']}})[_0xd0d8('0x21')](handleEntityNotFound(_0x3aa480,null))['then'](saveUpdates(_0xedc5e8[_0xd0d8('0x4f')],null))[_0xd0d8('0x21')](respondWithResult(_0x3aa480,null))['catch'](handleError(_0x3aa480,null));};exports[_0xd0d8('0x51')]=function(_0x37b5cf,_0x40dca3){return db['CmHopper'][_0xd0d8('0x51')]()['then'](respondWithResult(_0x40dca3,null))[_0xd0d8('0x52')](handleError(_0x40dca3,null));};exports[_0xd0d8('0x53')]=function(_0x12a387,_0x106c4a){var _0x5db13b;return db[_0xd0d8('0x46')][_0xd0d8('0x50')]({'where':{'id':_0x12a387['params']['id']}})['then'](handleEntityNotFound(_0x106c4a,null))[_0xd0d8('0x21')](function(_0x2cf8c2){if(_0x2cf8c2){return _0x2cf8c2[_0xd0d8('0x53')]()[_0xd0d8('0x21')](function(_0x4bfc87){return _0x4bfc87;});}})[_0xd0d8('0x21')](function(_0x3320a9){_0x5db13b=_0x3320a9;if(_0x3320a9){if(_0x3320a9[_0xd0d8('0x54')]||_0x3320a9[_0xd0d8('0x55')]){return db[_0x3320a9['VoiceQueueId']?_0xd0d8('0x56'):_0xd0d8('0x57')]['find']({'where':{'id':_0x3320a9[_0xd0d8('0x54')]?_0x3320a9[_0xd0d8('0x54')]:_0x3320a9[_0xd0d8('0x55')]},'attributes':['id',_0xd0d8('0x23')],'raw':!![]});}}})[_0xd0d8('0x21')](function(_0x48c2e7){var _0x672e43={};if(_0x48c2e7){_['merge'](_0x672e43,_[_0xd0d8('0x58')](_0x5db13b[_0xd0d8('0x59')],[_0xd0d8('0x5a'),_0xd0d8('0x5b'),'id']));_0x672e43['state']=0x15;_0x672e43[_0xd0d8('0x5c')]=_0xd0d8('0x5d');_0x672e43[_0xd0d8('0x5e')]=_0x48c2e7[_0xd0d8('0x23')];_0x672e43[_0xd0d8('0x5f')]=_0x12a387[_0xd0d8('0x60')]['name'];_0x672e43[_0xd0d8('0x61')]=_0x12a387['user']['id'];_0x672e43[_0xd0d8('0x5d')]=!![];_0x672e43[_0xd0d8('0x62')]=moment()[_0xd0d8('0x63')](_0xd0d8('0x64'));_0x672e43[_0xd0d8('0x65')]=_0x5db13b['phone'];_0x672e43[_0xd0d8('0x66')]=_0x5db13b[_0xd0d8('0x54')]?_0xd0d8('0x67'):'ivr';return db['CmContact']['find']({'where':{'id':_0x672e43[_0xd0d8('0x68')]},'attributes':[_0xd0d8('0x69'),_0xd0d8('0x6a')]})['then'](function(_0x587f74){if(!_['isNil'](_0x106c4a)&&!_[_0xd0d8('0x6b')](_0x587f74[_0xd0d8('0x69')])){_0x672e43[_0xd0d8('0x6c')]=_0x587f74['firstName'];if(!_['isNil'](_0x587f74[_0xd0d8('0x6a')])){_0x672e43[_0xd0d8('0x6c')]+='\x20'+_0x587f74['lastName'];}}})['finally'](function(){return db[_0xd0d8('0x6d')][_0xd0d8('0x4e')](_0x672e43);});}})[_0xd0d8('0x21')](function(){return _0x106c4a['status'](0xcc)[_0xd0d8('0x16')]();})['catch'](handleError(_0x106c4a,null));};exports[_0xd0d8('0x6e')]=function(_0x4bad10,_0x8dcdbe,_0x5e06d3){var _0x300d97=[];return db[_0xd0d8('0x6f')]['describe']()['then'](function(_0x555fce){_0x300d97=_[_0xd0d8('0x26')](_0x555fce);return _0x4bad10[_0xd0d8('0x60')][_0xd0d8('0x70')]({'where':{'type':_0xd0d8('0x71'),'dialActive':!![],'dialMethod':_0xd0d8('0x72')},'attributes':['id',_0xd0d8('0x73')],'raw':!![]});})[_0xd0d8('0x21')](function(_0x759b78){if(_0x759b78&&_0x759b78[_0xd0d8('0x3c')]){return db['sequelize'][_0xd0d8('0x74')](function(_0x1aa6f5){var _0x334a16={'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0xd0d8('0x63')]('YYYY-MM-DD\x20HH:mm:ss')},'VoiceQueueId':{'$in':_['map'](_0x759b78,'id')},'$or':[{'UserId':null},{'UserId':_0x4bad10[_0xd0d8('0x60')]['id']}]};var _0x5754f5=[];if(_0x4bad10[_0xd0d8('0x4f')][_0xd0d8('0x75')]&&_0x4bad10[_0xd0d8('0x4f')][_0xd0d8('0x75')]==='prev'){if(!_['isEmpty'](_0x4bad10[_0xd0d8('0x4f')][_0xd0d8('0x76')])){_0x334a16['id']={'$in':_0x4bad10[_0xd0d8('0x4f')][_0xd0d8('0x76')]};}_0x5754f5=[['priority',_0xd0d8('0x77')],[_0xd0d8('0x78'),_0x759b78[0x0][_0xd0d8('0x73')]===_0xd0d8('0x77')?_0xd0d8('0x79'):'ASC'],db[_0xd0d8('0x7a')][_0xd0d8('0x7b')](_0xd0d8('0x7c')),['id',_0xd0d8('0x79')]];}else{if(!_['isEmpty'](_0x4bad10['body'][_0xd0d8('0x76')])){_0x334a16['id']={'$notIn':_0x4bad10[_0xd0d8('0x4f')][_0xd0d8('0x76')]};}_0x5754f5=[[_0xd0d8('0x7d'),_0xd0d8('0x79')],[_0xd0d8('0x78'),_0x759b78[0x0][_0xd0d8('0x73')]],db[_0xd0d8('0x7a')][_0xd0d8('0x7b')]('COALESCE(CmHopper.UserId,\x200)\x20DESC'),['id',_0xd0d8('0x77')]];}return db[_0xd0d8('0x46')][_0xd0d8('0x7e')]({'attributes':['id',_0xd0d8('0x7f')],'where':_0x334a16,'order':_0x5754f5,'transaction':_0x1aa6f5,'lock':_0x1aa6f5[_0xd0d8('0x80')][_0xd0d8('0x81')],'include':[{'model':db['CmContact'],'as':'Contact','attributes':_0x300d97,'include':[{'model':db[_0xd0d8('0x82')],'as':_0xd0d8('0x83'),'attributes':['id',_0xd0d8('0x23')]}]},{'model':db[_0xd0d8('0x84')],'as':_0xd0d8('0x85'),'attributes':['id','name']},{'model':db[_0xd0d8('0x56')],'as':_0xd0d8('0x86'),'attributes':['id',_0xd0d8('0x23'),'dialActive']}]})[_0xd0d8('0x21')](function(_0x43d475){if(_0x43d475){return _0x43d475[_0xd0d8('0x20')]({'UserId':_0x4bad10[_0xd0d8('0x60')]['id']},{'transaction':_0x1aa6f5});}});});}})[_0xd0d8('0x21')](handleEntityNotFound(_0x8dcdbe,null))[_0xd0d8('0x21')](respondWithResult(_0x8dcdbe,null))['catch'](handleError(_0x8dcdbe,null));};exports[_0xd0d8('0x87')]=function(_0x436168,_0x44eb78,_0x2e9c01){return _0x436168[_0xd0d8('0x60')][_0xd0d8('0x70')]({'where':{'type':'outbound','dialActive':!![],'dialMethod':_0xd0d8('0x72')},'attributes':['id'],'raw':!![]})[_0xd0d8('0x21')](function(_0x4e7b2e){if(_0x4e7b2e&&_0x4e7b2e[_0xd0d8('0x3c')]){return db['CmHopper'][_0xd0d8('0x18')]({'where':{'active':![],'recallme':![],'scheduledAt':{'$lte':moment()['format'](_0xd0d8('0x64'))},'VoiceQueueId':{'$in':_[_0xd0d8('0x44')](_0x4e7b2e,'id')},'$or':[{'UserId':null},{'UserId':_0x436168[_0xd0d8('0x60')]['id']}]}});}return 0x0;})[_0xd0d8('0x21')](function(_0x474b19){if(!_['isNil'](_0x474b19)&&_['isNumber'](_0x474b19)){return _0x44eb78['status'](0xc8)[_0xd0d8('0x17')]({'contacts':_0x474b19});}else{logger['error'](_0xd0d8('0x88'),_0xd0d8('0x87'),0x194,_0xd0d8('0x89'));_0x44eb78[_0xd0d8('0x14')](0x194);}})[_0xd0d8('0x52')](handleError(_0x44eb78,null));};
\ No newline at end of file
+var _0x066b=['VoiceQueueId','CampaignId','VoiceQueue','Campaign','omit','createdAt','updatedAt','state','deleted','campaign','membername','user','UserId','deletedat','format','YYYY-MM-DD\x20HH:mm:ss','calleridnum','queue','ivr','CmContact','ContactId','firstName','isNil','lastName','calleridname','finally','CmHopperFinal','getPreview','outbound','preview','dialOrderByScheduledAt','sequelize','transaction','map','direction','prev','isEmpty','hopperIds','ASC','scheduledAt','DESC','COALESCE(CmHopper.UserId,\x200)\x20ASC','priority','literal','COALESCE(CmHopper.UserId,\x200)\x20DESC','findOne','UPDATE','Contact','CmCompany','Company','CmList','List','getOpenContacts','CmHopper,\x20%s,\x20%s,\x20%s','entity\x20not\x20found','eml-format','fast-json-patch','request-promise','moment','mustache','util','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','end','status','json','count','offset','set','Content-Range','apply','save','then','destroy','sendStatus','stack','name','index','CmHopper','model','keys','filters','intersection','query','concat','$and','$or','$gt','$gte','$lt','$lte','$ne','$not','$between','$notIn','$notLike','$iLike','$notILike','$overlap','$contains','$contained','$any','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','params','rawAttributes','find','catch','create','body','update','describe'];(function(_0x29b609,_0x19d388){var _0x54c952=function(_0xb3c38d){while(--_0xb3c38d){_0x29b609['push'](_0x29b609['shift']());}};_0x54c952(++_0x19d388);}(_0x066b,0x15d));var _0xb066=function(_0x5a8473,_0x38aa21){_0x5a8473=_0x5a8473-0x0;var _0x5581b9=_0x066b[_0x5a8473];return _0x5581b9;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xb066('0x0'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xb066('0x1'));var rp=require(_0xb066('0x2'));var moment=require(_0xb066('0x3'));var BPromise=require('bluebird');var Mustache=require(_0xb066('0x4'));var util=require(_0xb066('0x5'));var path=require(_0xb066('0x6'));var sox=require(_0xb066('0x7'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xb066('0x8'));var squel=require('squel');var crypto=require(_0xb066('0x9'));var jsforce=require(_0xb066('0xa'));var deskjs=require(_0xb066('0xb'));var toCsv=require(_0xb066('0xc'));var querystring=require(_0xb066('0xd'));var Papa=require(_0xb066('0xe'));var Redis=require('ioredis');var authService=require(_0xb066('0xf'));var qs=require(_0xb066('0x10'));var hardwareService=require(_0xb066('0x11'));var logger=require(_0xb066('0x12'))(_0xb066('0x13'));var utils=require(_0xb066('0x14'));var config=require(_0xb066('0x15'));var db=require(_0xb066('0x16'))['db'];function respondWithStatusCode(_0x5f195c,_0x4b7f2e){_0x4b7f2e=_0x4b7f2e||0xcc;return function(_0x39703d){if(_0x39703d){return _0x5f195c['sendStatus'](_0x4b7f2e);}return _0x5f195c['status'](_0x4b7f2e)[_0xb066('0x17')]();};}function respondWithResult(_0x80e597,_0x673f52){_0x673f52=_0x673f52||0xc8;return function(_0x5ae685){if(_0x5ae685){return _0x80e597[_0xb066('0x18')](_0x673f52)[_0xb066('0x19')](_0x5ae685);}};}function respondWithFilteredResult(_0x523a86,_0x2b5b23){return function(_0x5a17c4){if(_0x5a17c4){var _0x53836b=_0x5a17c4[_0xb066('0x1a')],_0x13d215=_0x2b5b23[_0xb066('0x1b')],_0x27cf66=_0x2b5b23[_0xb066('0x1b')]+_0x2b5b23['limit'],_0x2a4ff2;if(_0x27cf66>=_0x53836b){_0x27cf66=_0x53836b;_0x2a4ff2=0xc8;}else{_0x2a4ff2=0xce;}_0x523a86[_0xb066('0x18')](_0x2a4ff2);return _0x523a86[_0xb066('0x1c')](_0xb066('0x1d'),_0x13d215+'-'+_0x27cf66+'/'+_0x53836b)[_0xb066('0x19')](_0x5a17c4);}return null;};}function patchUpdates(_0x2a5535){return function(_0x32c804){try{jsonpatch[_0xb066('0x1e')](_0x32c804,_0x2a5535,!![]);}catch(_0x117613){return BPromise['reject'](_0x117613);}return _0x32c804[_0xb066('0x1f')]();};}function saveUpdates(_0x4c1e1d,_0x73bdaa){return function(_0x394489){if(_0x394489){return _0x394489['update'](_0x4c1e1d)[_0xb066('0x20')](function(_0x890db9){return _0x890db9;});}return null;};}function removeEntity(_0x30a523,_0x43e963){return function(_0x1a24ae){if(_0x1a24ae){return _0x1a24ae[_0xb066('0x21')]()[_0xb066('0x20')](function(){_0x30a523[_0xb066('0x18')](0xcc)[_0xb066('0x17')]();});}};}function handleEntityNotFound(_0x5b3dad,_0x5f3c05){return function(_0x505312){if(!_0x505312){_0x5b3dad[_0xb066('0x22')](0x194);}return _0x505312;};}function handleError(_0x5d5479,_0x5b705e){_0x5b705e=_0x5b705e||0x1f4;return function(_0x513174){logger['error'](_0x513174[_0xb066('0x23')]);if(_0x513174[_0xb066('0x24')]){delete _0x513174[_0xb066('0x24')];}_0x5d5479[_0xb066('0x18')](_0x5b705e)['send'](_0x513174);};}exports[_0xb066('0x25')]=function(_0x5c1855,_0x5c26f1){var _0x31ee86={},_0x14b06f={},_0x52fb99={'count':0x0,'rows':[]};var _0x2f8e0a=db[_0xb066('0x26')]['rawAttributes'];_0x14b06f[_0xb066('0x27')]=_[_0xb066('0x28')](_0x2f8e0a);_0x14b06f['query']=_['keys'](_0x5c1855['query']);_0x14b06f[_0xb066('0x29')]=_[_0xb066('0x2a')](_0x14b06f['model'],_0x14b06f[_0xb066('0x2b')]);_0x14b06f['filters']=_[_0xb066('0x2c')](_0x14b06f['filters'],[_0xb066('0x2d'),_0xb066('0x2e'),_0xb066('0x2f'),_0xb066('0x30'),_0xb066('0x31'),_0xb066('0x32'),_0xb066('0x33'),'$eq',_0xb066('0x34'),_0xb066('0x35'),'$notBetween','$in',_0xb066('0x36'),'$like',_0xb066('0x37'),_0xb066('0x38'),_0xb066('0x39'),'$like',_0xb066('0x3a'),_0xb066('0x3b'),_0xb066('0x3c'),_0xb066('0x3d')]);_0x31ee86['attributes']=_[_0xb066('0x2a')](_0x14b06f[_0xb066('0x27')],qs[_0xb066('0x3e')](_0x5c1855[_0xb066('0x2b')][_0xb066('0x3e')]));_0x31ee86[_0xb066('0x3f')]=_0x31ee86[_0xb066('0x3f')][_0xb066('0x40')]?_0x31ee86[_0xb066('0x3f')]:_0x14b06f[_0xb066('0x27')];if(!_0x5c1855['query'][_0xb066('0x41')](_0xb066('0x42'))){_0x31ee86[_0xb066('0x43')]=qs[_0xb066('0x43')](_0x5c1855[_0xb066('0x2b')]['limit']);_0x31ee86[_0xb066('0x1b')]=qs[_0xb066('0x1b')](_0x5c1855[_0xb066('0x2b')][_0xb066('0x1b')]);}_0x31ee86[_0xb066('0x44')]=qs['sort'](_0x5c1855[_0xb066('0x2b')][_0xb066('0x45')]);_0x31ee86[_0xb066('0x46')]=qs[_0xb066('0x29')](_[_0xb066('0x47')](_0x5c1855['query'],_0x14b06f['filters']));if(_0x5c1855[_0xb066('0x2b')][_0xb066('0x48')]){_0x31ee86[_0xb066('0x46')]=_[_0xb066('0x49')](_0x31ee86[_0xb066('0x46')],{'$or':_['map'](_0x2f8e0a,function(_0x5a5dc6){if(_0x5a5dc6[_0xb066('0x4a')][_0xb066('0x4b')]!==_0xb066('0x4c')){var _0x3ffa7b={};_0x3ffa7b[_0x5a5dc6[_0xb066('0x4d')]]={'$like':'%'+_0x5c1855[_0xb066('0x2b')][_0xb066('0x48')]+'%'};return _0x3ffa7b;}})});}_0x31ee86=_['merge']({},_0x31ee86,_0x5c1855[_0xb066('0x4e')]);var _0x151f05={'where':_0x31ee86['where']};return db['CmHopper'][_0xb066('0x1a')](_0x151f05)[_0xb066('0x20')](function(_0x2a8e4d){_0x52fb99[_0xb066('0x1a')]=_0x2a8e4d;if(_0x5c1855[_0xb066('0x2b')][_0xb066('0x4f')]){_0x31ee86[_0xb066('0x50')]=[{'all':!![]}];}return db['CmHopper'][_0xb066('0x51')](_0x31ee86);})[_0xb066('0x20')](function(_0x4c6432){_0x52fb99[_0xb066('0x52')]=_0x4c6432;return _0x52fb99;})[_0xb066('0x20')](respondWithFilteredResult(_0x5c26f1,_0x31ee86))['catch'](handleError(_0x5c26f1,null));};exports[_0xb066('0x53')]=function(_0x3bf265,_0x42a0bc){var _0x469329={'raw':!![],'where':{'id':_0x3bf265[_0xb066('0x54')]['id']}},_0x2ff238={};_0x2ff238[_0xb066('0x27')]=_[_0xb066('0x28')](db[_0xb066('0x26')][_0xb066('0x55')]);_0x2ff238['query']=_[_0xb066('0x28')](_0x3bf265['query']);_0x2ff238[_0xb066('0x29')]=_[_0xb066('0x2a')](_0x2ff238[_0xb066('0x27')],_0x2ff238[_0xb066('0x2b')]);_0x469329['attributes']=_[_0xb066('0x2a')](_0x2ff238[_0xb066('0x27')],qs[_0xb066('0x3e')](_0x3bf265[_0xb066('0x2b')][_0xb066('0x3e')]));_0x469329[_0xb066('0x3f')]=_0x469329[_0xb066('0x3f')][_0xb066('0x40')]?_0x469329[_0xb066('0x3f')]:_0x2ff238[_0xb066('0x27')];if(_0x3bf265[_0xb066('0x2b')]['includeAll']){_0x469329['include']=[{'all':!![]}];}_0x469329=_[_0xb066('0x49')]({},_0x469329,_0x3bf265[_0xb066('0x4e')]);return db[_0xb066('0x26')][_0xb066('0x56')](_0x469329)['then'](handleEntityNotFound(_0x42a0bc,null))[_0xb066('0x20')](respondWithResult(_0x42a0bc,null))[_0xb066('0x57')](handleError(_0x42a0bc,null));};exports[_0xb066('0x58')]=function(_0x586c34,_0x57bbb4){return db[_0xb066('0x26')][_0xb066('0x58')](_0x586c34[_0xb066('0x59')],{})[_0xb066('0x20')](respondWithResult(_0x57bbb4,0xc9))['catch'](handleError(_0x57bbb4,null));};exports[_0xb066('0x5a')]=function(_0x495df4,_0x28af43){if(_0x495df4[_0xb066('0x59')]['id']){delete _0x495df4[_0xb066('0x59')]['id'];}return db[_0xb066('0x26')][_0xb066('0x56')]({'where':{'id':_0x495df4['params']['id']}})['then'](handleEntityNotFound(_0x28af43,null))['then'](saveUpdates(_0x495df4[_0xb066('0x59')],null))[_0xb066('0x20')](respondWithResult(_0x28af43,null))['catch'](handleError(_0x28af43,null));};exports[_0xb066('0x5b')]=function(_0x22f9b6,_0x166707){return db[_0xb066('0x26')]['describe']()['then'](respondWithResult(_0x166707,null))[_0xb066('0x57')](handleError(_0x166707,null));};exports[_0xb066('0x21')]=function(_0x4c50b5,_0x3a8bd6){var _0x2c9fc4;return db[_0xb066('0x26')][_0xb066('0x56')]({'where':{'id':_0x4c50b5[_0xb066('0x54')]['id']}})[_0xb066('0x20')](handleEntityNotFound(_0x3a8bd6,null))[_0xb066('0x20')](function(_0x5a3582){if(_0x5a3582){return _0x5a3582['destroy']()[_0xb066('0x20')](function(_0x31a5b5){return _0x31a5b5;});}})['then'](function(_0x362ee9){_0x2c9fc4=_0x362ee9;if(_0x362ee9){if(_0x362ee9[_0xb066('0x5c')]||_0x362ee9[_0xb066('0x5d')]){return db[_0x362ee9[_0xb066('0x5c')]?_0xb066('0x5e'):_0xb066('0x5f')][_0xb066('0x56')]({'where':{'id':_0x362ee9['VoiceQueueId']?_0x362ee9['VoiceQueueId']:_0x362ee9[_0xb066('0x5d')]},'attributes':['id',_0xb066('0x24')],'raw':!![]});}}})[_0xb066('0x20')](function(_0x28ea82){var _0xa2cd5={};if(_0x28ea82){_['merge'](_0xa2cd5,_[_0xb066('0x60')](_0x2c9fc4['dataValues'],[_0xb066('0x61'),_0xb066('0x62'),'id']));_0xa2cd5[_0xb066('0x63')]=0x15;_0xa2cd5['statedesc']=_0xb066('0x64');_0xa2cd5[_0xb066('0x65')]=_0x28ea82[_0xb066('0x24')];_0xa2cd5[_0xb066('0x66')]=_0x4c50b5[_0xb066('0x67')][_0xb066('0x24')];_0xa2cd5[_0xb066('0x68')]=_0x4c50b5['user']['id'];_0xa2cd5[_0xb066('0x64')]=!![];_0xa2cd5[_0xb066('0x69')]=moment()[_0xb066('0x6a')](_0xb066('0x6b'));_0xa2cd5[_0xb066('0x6c')]=_0x2c9fc4['phone'];_0xa2cd5['campaigntype']=_0x2c9fc4['VoiceQueueId']?_0xb066('0x6d'):_0xb066('0x6e');return db[_0xb066('0x6f')]['find']({'where':{'id':_0xa2cd5[_0xb066('0x70')]},'attributes':[_0xb066('0x71'),'lastName']})[_0xb066('0x20')](function(_0x1ef66){if(!_[_0xb066('0x72')](_0x3a8bd6)&&!_['isNil'](_0x1ef66['firstName'])){_0xa2cd5['calleridname']=_0x1ef66[_0xb066('0x71')];if(!_[_0xb066('0x72')](_0x1ef66[_0xb066('0x73')])){_0xa2cd5[_0xb066('0x74')]+='\x20'+_0x1ef66['lastName'];}}})[_0xb066('0x75')](function(){return db[_0xb066('0x76')][_0xb066('0x58')](_0xa2cd5);});}})[_0xb066('0x20')](function(){return _0x3a8bd6['status'](0xcc)['end']();})[_0xb066('0x57')](handleError(_0x3a8bd6,null));};exports[_0xb066('0x77')]=function(_0x33e71f,_0x502504,_0xca8916){var _0x169b44=[];return db['CmContact'][_0xb066('0x5b')]()[_0xb066('0x20')](function(_0x5aaac0){_0x169b44=_[_0xb066('0x28')](_0x5aaac0);return _0x33e71f['user']['getVoiceQueues']({'where':{'type':_0xb066('0x78'),'dialActive':!![],'dialMethod':_0xb066('0x79')},'attributes':['id',_0xb066('0x7a')],'raw':!![]});})[_0xb066('0x20')](function(_0xb0b198){if(_0xb0b198&&_0xb0b198[_0xb066('0x40')]){return db[_0xb066('0x7b')][_0xb066('0x7c')](function(_0x3a6c23){var _0x2c370e={'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0xb066('0x6a')](_0xb066('0x6b'))},'VoiceQueueId':{'$in':_[_0xb066('0x7d')](_0xb0b198,'id')},'$or':[{'UserId':null},{'UserId':_0x33e71f[_0xb066('0x67')]['id']}]};var _0x5830f0=[];if(_0x33e71f['body']['direction']&&_0x33e71f['body'][_0xb066('0x7e')]===_0xb066('0x7f')){if(!_[_0xb066('0x80')](_0x33e71f[_0xb066('0x59')][_0xb066('0x81')])){_0x2c370e['id']={'$in':_0x33e71f[_0xb066('0x59')][_0xb066('0x81')]};}_0x5830f0=[['priority',_0xb066('0x82')],[_0xb066('0x83'),_0xb0b198[0x0][_0xb066('0x7a')]==='ASC'?_0xb066('0x84'):'ASC'],db['sequelize']['literal'](_0xb066('0x85')),['id','DESC']];}else{if(!_[_0xb066('0x80')](_0x33e71f['body'][_0xb066('0x81')])){_0x2c370e['id']={'$notIn':_0x33e71f[_0xb066('0x59')][_0xb066('0x81')]};}_0x5830f0=[[_0xb066('0x86'),_0xb066('0x84')],[_0xb066('0x83'),_0xb0b198[0x0][_0xb066('0x7a')]],db[_0xb066('0x7b')][_0xb066('0x87')](_0xb066('0x88')),['id',_0xb066('0x82')]];}return db[_0xb066('0x26')][_0xb066('0x89')]({'attributes':['id','scheduledat'],'where':_0x2c370e,'order':_0x5830f0,'transaction':_0x3a6c23,'lock':_0x3a6c23['LOCK'][_0xb066('0x8a')],'include':[{'model':db[_0xb066('0x6f')],'as':_0xb066('0x8b'),'attributes':_0x169b44,'include':[{'model':db[_0xb066('0x8c')],'as':_0xb066('0x8d'),'attributes':['id',_0xb066('0x24')]}]},{'model':db[_0xb066('0x8e')],'as':_0xb066('0x8f'),'attributes':['id','name']},{'model':db['VoiceQueue'],'as':'Queue','attributes':['id','name','dialActive']}]})[_0xb066('0x20')](function(_0x4c6b57){if(_0x4c6b57){return _0x4c6b57[_0xb066('0x5a')]({'UserId':_0x33e71f[_0xb066('0x67')]['id']},{'transaction':_0x3a6c23});}});});}})[_0xb066('0x20')](handleEntityNotFound(_0x502504,null))[_0xb066('0x20')](respondWithResult(_0x502504,null))['catch'](handleError(_0x502504,null));};exports[_0xb066('0x90')]=function(_0x39721b,_0x508bd8,_0x1f6dce){return _0x39721b[_0xb066('0x67')]['getVoiceQueues']({'where':{'type':_0xb066('0x78'),'dialActive':!![],'dialMethod':_0xb066('0x79')},'attributes':['id'],'raw':!![]})[_0xb066('0x20')](function(_0x37ec4d){if(_0x37ec4d&&_0x37ec4d[_0xb066('0x40')]){return db[_0xb066('0x26')][_0xb066('0x1a')]({'where':{'active':![],'recallme':![],'scheduledAt':{'$lte':moment()['format'](_0xb066('0x6b'))},'VoiceQueueId':{'$in':_[_0xb066('0x7d')](_0x37ec4d,'id')},'$or':[{'UserId':null},{'UserId':_0x39721b['user']['id']}]}});}return 0x0;})[_0xb066('0x20')](function(_0x333beb){if(!_[_0xb066('0x72')](_0x333beb)&&_['isNumber'](_0x333beb)){return _0x508bd8[_0xb066('0x18')](0xc8)[_0xb066('0x19')]({'contacts':_0x333beb});}else{logger['error'](_0xb066('0x91'),'getOpenContacts',0x194,_0xb066('0x92'));_0x508bd8['sendStatus'](0x194);}})[_0xb066('0x57')](handleError(_0x508bd8,null));};
\ No newline at end of file
index e36560e..5f98d3c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b02=['rimraf','../../config/environment','./cmHopper.attributes','exports','define','CmHopper','scheduledat','phone','priority','lodash','util','../../config/logger','api','request-promise'];(function(_0x1221e8,_0x2e7229){var _0x3f3041=function(_0x2042c){while(--_0x2042c){_0x1221e8['push'](_0x1221e8['shift']());}};_0x3f3041(++_0x2e7229);}(_0x5b02,0xe9));var _0x25b0=function(_0x3f117e,_0x2484ab){_0x3f117e=_0x3f117e-0x0;var _0x4b3f24=_0x5b02[_0x3f117e];return _0x4b3f24;};'use strict';var _=require(_0x25b0('0x0'));var util=require(_0x25b0('0x1'));var logger=require(_0x25b0('0x2'))(_0x25b0('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x25b0('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x25b0('0x5'));var config=require(_0x25b0('0x6'));var attributes=require(_0x25b0('0x7'));module[_0x25b0('0x8')]=function(_0x2d84a9,_0x4eea55){return _0x2d84a9[_0x25b0('0x9')](_0x25b0('0xa'),attributes,{'tableName':'cm_hopper','paranoid':![],'indexes':[{'name':_0x25b0('0xb'),'fields':['scheduledat']},{'name':'phone','fields':[_0x25b0('0xc')]},{'name':_0x25b0('0xd'),'fields':[_0x25b0('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xa75b=['define','CmHopper','scheduledat','priority','lodash','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./cmHopper.attributes','exports'];(function(_0x9c8b4a,_0x2387ff){var _0x198bef=function(_0x2eb4e8){while(--_0x2eb4e8){_0x9c8b4a['push'](_0x9c8b4a['shift']());}};_0x198bef(++_0x2387ff);}(_0xa75b,0x170));var _0xba75=function(_0x1c5be7,_0x20a2ff){_0x1c5be7=_0x1c5be7-0x0;var _0x1efb18=_0xa75b[_0x1c5be7];return _0x1efb18;};'use strict';var _=require(_0xba75('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xba75('0x1'));var moment=require(_0xba75('0x2'));var BPromise=require(_0xba75('0x3'));var rp=require(_0xba75('0x4'));var fs=require('fs');var path=require(_0xba75('0x5'));var rimraf=require(_0xba75('0x6'));var config=require(_0xba75('0x7'));var attributes=require(_0xba75('0x8'));module[_0xba75('0x9')]=function(_0x41afc9,_0x2baa28){return _0x41afc9[_0xba75('0xa')](_0xba75('0xb'),attributes,{'tableName':'cm_hopper','paranoid':![],'indexes':[{'name':'scheduledat','fields':[_0xba75('0xc')]},{'name':'phone','fields':['phone']},{'name':_0xba75('0xd'),'fields':['priority']}],'timestamps':!![]});};
\ No newline at end of file
index 892af8a..1c2e255 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x17f8=['randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','CmHopper,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','findAll','options','raw','attributes','limit','include','model','map','GetCmHopper','debug','catch','CmHopper','find','info','ShowCmHopper','CreateCmHopper','UpdateCmHopper','body','where','DestroyCmHopper','destroy','GetContactDialer','CmContact','describe','transaction','order','LOCK','UPDATE','Contact','keys','length','push','update','all','MoveContactManagedDialer','CmHopperFinal','CountReScheduled','COUNT','sequelize','`scheduledat`\x20>=\x20','format','\x22%s\x22','YYYY-MM-DD\x20HH:mm:ss','\x20,\x201,\x20null','GetContactRecallMe','UserId','lodash'];(function(_0x2d7f0e,_0x3e6fbd){var _0x110b07=function(_0x557b00){while(--_0x557b00){_0x2d7f0e['push'](_0x2d7f0e['shift']());}};_0x110b07(++_0x3e6fbd);}(_0x17f8,0x179));var _0x817f=function(_0x193927,_0x545c88){_0x193927=_0x193927-0x0;var _0x1d21b1=_0x17f8[_0x193927];return _0x1d21b1;};'use strict';var _=require(_0x817f('0x0'));var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x817f('0x1'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x817f('0x2'))['db'];var utils=require(_0x817f('0x3'));var logger=require(_0x817f('0x4'))(_0x817f('0x5'));var config=require(_0x817f('0x6'));var jayson=require(_0x817f('0x7'));var client=jayson[_0x817f('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x45429c,_0x5ab235,_0x5b67d0){return new BPromise(function(_0x4d52d1,_0x4df1e1){return client[_0x817f('0x9')](_0x45429c,_0x5b67d0)[_0x817f('0xa')](function(_0xb7eda3){logger['info'](_0x817f('0xb'),_0x5ab235,_0x817f('0xc'));logger['debug']('CmHopper,\x20%s,\x20%s,\x20%s',_0x5ab235,_0x817f('0xc'),JSON[_0x817f('0xd')](_0xb7eda3));if(_0xb7eda3[_0x817f('0xe')]){if(_0xb7eda3[_0x817f('0xe')]['code']===0x1f4){logger[_0x817f('0xe')](_0x817f('0xb'),_0x5ab235,_0xb7eda3[_0x817f('0xe')][_0x817f('0xf')]);return _0x4df1e1(_0xb7eda3[_0x817f('0xe')][_0x817f('0xf')]);}logger['error'](_0x817f('0xb'),_0x5ab235,_0xb7eda3[_0x817f('0xe')][_0x817f('0xf')]);return _0x4d52d1(_0xb7eda3[_0x817f('0xe')][_0x817f('0xf')]);}else{logger['info'](_0x817f('0xb'),_0x5ab235,_0x817f('0xc'));_0x4d52d1(_0xb7eda3[_0x817f('0x10')][_0x817f('0xf')]);}})['catch'](function(_0x4fb2cb){logger['error'](_0x817f('0xb'),_0x5ab235,_0x4fb2cb);_0x4df1e1(_0x4fb2cb);});});}exports['GetCmHopper']=function(_0x97b290){var _0x4869db=this;return new Promise(function(_0xe0d5b7,_0x362179){return db['CmHopper'][_0x817f('0x11')]({'raw':_0x97b290[_0x817f('0x12')]?_0x97b290[_0x817f('0x12')][_0x817f('0x13')]===undefined?!![]:![]:!![],'where':_0x97b290[_0x817f('0x12')]?_0x97b290['options']['where']||null:null,'attributes':_0x97b290[_0x817f('0x12')]?_0x97b290[_0x817f('0x12')][_0x817f('0x14')]||null:null,'limit':_0x97b290[_0x817f('0x12')]?_0x97b290['options'][_0x817f('0x15')]||null:null,'include':_0x97b290[_0x817f('0x12')]?_0x97b290['options'][_0x817f('0x16')]?_['map'](_0x97b290[_0x817f('0x12')][_0x817f('0x16')],function(_0xe4a824){return{'model':db[_0xe4a824[_0x817f('0x17')]],'as':_0xe4a824['as'],'attributes':_0xe4a824[_0x817f('0x14')],'include':_0xe4a824[_0x817f('0x16')]?_[_0x817f('0x18')](_0xe4a824['include'],function(_0x56423f){return{'model':db[_0x56423f[_0x817f('0x17')]],'as':_0x56423f['as'],'attributes':_0x56423f[_0x817f('0x14')],'include':_0x56423f[_0x817f('0x16')]?_['map'](_0x56423f['include'],function(_0xcce0fe){return{'model':db[_0xcce0fe['model']],'as':_0xcce0fe['as'],'attributes':_0xcce0fe['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x4a2850){logger['info'](_0x817f('0x19'),_0x97b290);logger[_0x817f('0x1a')](_0x817f('0x19'),_0x97b290,JSON[_0x817f('0xd')](_0x4a2850));_0xe0d5b7(_0x4a2850);})[_0x817f('0x1b')](function(_0x386df7){logger[_0x817f('0xe')](_0x817f('0x19'),_0x386df7[_0x817f('0xf')],_0x97b290);_0x362179(_0x4869db[_0x817f('0xe')](0x1f4,_0x386df7[_0x817f('0xf')]));});});};exports['ShowCmHopper']=function(_0x37d838){var _0x305c4c=this;return new Promise(function(_0x4a5b88,_0x3788a8){return db[_0x817f('0x1c')][_0x817f('0x1d')]({'raw':_0x37d838['options']?_0x37d838[_0x817f('0x12')][_0x817f('0x13')]===undefined?!![]:![]:!![],'where':_0x37d838[_0x817f('0x12')]?_0x37d838['options']['where']||null:null,'attributes':_0x37d838[_0x817f('0x12')]?_0x37d838['options'][_0x817f('0x14')]||null:null,'include':_0x37d838['options']?_0x37d838[_0x817f('0x12')][_0x817f('0x16')]?_['map'](_0x37d838['options'][_0x817f('0x16')],function(_0x1eece7){return{'model':db[_0x1eece7[_0x817f('0x17')]],'as':_0x1eece7['as'],'attributes':_0x1eece7[_0x817f('0x14')],'include':_0x1eece7[_0x817f('0x16')]?_[_0x817f('0x18')](_0x1eece7['include'],function(_0x211da3){return{'model':db[_0x211da3[_0x817f('0x17')]],'as':_0x211da3['as'],'attributes':_0x211da3[_0x817f('0x14')],'include':_0x211da3[_0x817f('0x16')]?_['map'](_0x211da3[_0x817f('0x16')],function(_0x46d1b5){return{'model':db[_0x46d1b5[_0x817f('0x17')]],'as':_0x46d1b5['as'],'attributes':_0x46d1b5[_0x817f('0x14')]};}):[]};}):[]};}):[]:[]})[_0x817f('0xa')](function(_0x51c930){logger[_0x817f('0x1e')](_0x817f('0x1f'),_0x37d838);logger['debug'](_0x817f('0x1f'),_0x37d838,JSON[_0x817f('0xd')](_0x51c930));_0x4a5b88(_0x51c930);})[_0x817f('0x1b')](function(_0x1a2dd2){logger['error'](_0x817f('0x1f'),_0x1a2dd2[_0x817f('0xf')],_0x37d838);_0x3788a8(_0x305c4c[_0x817f('0xe')](0x1f4,_0x1a2dd2[_0x817f('0xf')]));});});};exports[_0x817f('0x20')]=function(_0x2310ff){var _0x229cb3=this;return new Promise(function(_0x2546bb,_0x4012d4){return db[_0x817f('0x1c')]['create'](_0x2310ff['body'],{'raw':_0x2310ff[_0x817f('0x12')]?_0x2310ff['options'][_0x817f('0x13')]===undefined?!![]:![]:!![]})[_0x817f('0xa')](function(_0x5c4394){logger[_0x817f('0x1e')](_0x817f('0x20'),_0x2310ff);logger['debug'](_0x817f('0x20'),_0x2310ff,JSON['stringify'](_0x5c4394));_0x2546bb(_0x5c4394);})[_0x817f('0x1b')](function(_0x30da93){logger[_0x817f('0xe')](_0x817f('0x20'),_0x30da93['message'],_0x2310ff);_0x4012d4(_0x229cb3[_0x817f('0xe')](0x1f4,_0x30da93[_0x817f('0xf')]));});});};exports[_0x817f('0x21')]=function(_0x2f4ddd){var _0x542765=this;return new Promise(function(_0x571dbf,_0x5f59dc){return db['CmHopper']['update'](_0x2f4ddd[_0x817f('0x22')],{'raw':_0x2f4ddd[_0x817f('0x12')]?_0x2f4ddd[_0x817f('0x12')][_0x817f('0x13')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2f4ddd[_0x817f('0x12')]?_0x2f4ddd[_0x817f('0x12')][_0x817f('0x23')]||null:null,'attributes':_0x2f4ddd[_0x817f('0x12')]?_0x2f4ddd[_0x817f('0x12')]['attributes']||null:null,'limit':_0x2f4ddd[_0x817f('0x12')]?_0x2f4ddd[_0x817f('0x12')][_0x817f('0x15')]||null:null})[_0x817f('0xa')](function(_0x4e17b5){logger[_0x817f('0x1e')](_0x817f('0x21'),_0x2f4ddd);logger[_0x817f('0x1a')](_0x817f('0x21'),_0x2f4ddd,JSON[_0x817f('0xd')](_0x4e17b5));_0x571dbf(_0x4e17b5);})[_0x817f('0x1b')](function(_0x138f7b){logger[_0x817f('0xe')](_0x817f('0x21'),_0x138f7b[_0x817f('0xf')],_0x2f4ddd);_0x5f59dc(_0x542765['error'](0x1f4,_0x138f7b[_0x817f('0xf')]));});});};exports[_0x817f('0x24')]=function(_0x113ec7){var _0x1ef1c7=this;return new Promise(function(_0x5cd824,_0x35d09b){return db[_0x817f('0x1c')][_0x817f('0x25')]({'where':_0x113ec7[_0x817f('0x12')]?_0x113ec7['options'][_0x817f('0x23')]||null:null})[_0x817f('0xa')](function(_0x31897e){logger[_0x817f('0x1e')](_0x817f('0x24'),_0x113ec7);logger[_0x817f('0x1a')](_0x817f('0x24'),_0x113ec7,JSON[_0x817f('0xd')](_0x31897e));_0x5cd824(_0x31897e);})[_0x817f('0x1b')](function(_0x23cc2e){logger[_0x817f('0xe')](_0x817f('0x24'),_0x23cc2e['message'],_0x113ec7);_0x35d09b(_0x1ef1c7[_0x817f('0xe')](0x1f4,_0x23cc2e[_0x817f('0xf')]));});});};exports[_0x817f('0x26')]=function(_0x4fcf45){var _0x30675f=this;return new Promise(function(_0x546cd5,_0x28df35){return db[_0x817f('0x27')][_0x817f('0x28')]()[_0x817f('0xa')](function(_0x52700c){return db['sequelize'][_0x817f('0x29')](function(_0x1602ab){return db[_0x817f('0x1c')][_0x817f('0x11')]({'where':_0x4fcf45['options']?_0x4fcf45[_0x817f('0x12')][_0x817f('0x23')]||null:null,'attributes':_0x4fcf45[_0x817f('0x12')]?_0x4fcf45[_0x817f('0x12')]['attributes']||null:null,'limit':_0x4fcf45[_0x817f('0x12')]?_0x4fcf45[_0x817f('0x12')][_0x817f('0x15')]||null:null,'order':_0x4fcf45[_0x817f('0x12')]?_0x4fcf45[_0x817f('0x12')][_0x817f('0x2a')]||null:null,'transaction':_0x1602ab,'lock':_0x1602ab[_0x817f('0x2b')][_0x817f('0x2c')],'include':[{'model':db[_0x817f('0x27')],'as':_0x817f('0x2d'),'attributes':_[_0x817f('0x2e')](_0x52700c)}]})[_0x817f('0xa')](function(_0xf5cb56){var _0x16aab8=[];for(var _0x35a9a8=0x0;_0x35a9a8<_0xf5cb56[_0x817f('0x2f')];_0x35a9a8+=0x1){_0x16aab8[_0x817f('0x30')](_0xf5cb56[_0x35a9a8][_0x817f('0x31')](_0x4fcf45['body'],{'transaction':_0x1602ab}));}return BPromise[_0x817f('0x32')](_0x16aab8);});})[_0x817f('0xa')](function(_0x144c6a){logger[_0x817f('0x1e')](_0x817f('0x26'),_0x4fcf45);logger[_0x817f('0x1a')]('GetContactDialer',_0x4fcf45,JSON[_0x817f('0xd')](_0x144c6a));_0x546cd5(_0x144c6a);})[_0x817f('0x1b')](function(_0x53da17){logger['error']('GetContactDialer',_0x53da17[_0x817f('0xf')],_0x4fcf45);_0x28df35(_0x30675f[_0x817f('0xe')](0x1f4,_0x53da17[_0x817f('0xf')]));});});});};exports[_0x817f('0x33')]=function(_0x3b6dcf){var _0x335eb6=this;return new Promise(function(_0xde1af9,_0x545c4c){return db['sequelize'][_0x817f('0x29')](function(_0x550718){return db[_0x817f('0x34')]['create'](_0x3b6dcf[_0x817f('0x22')],{'raw':_0x3b6dcf[_0x817f('0x12')]?_0x3b6dcf[_0x817f('0x12')]['raw']===undefined?!![]:![]:!![],'transaction':_0x550718})['then'](function(){return db[_0x817f('0x1c')]['destroy']({'where':_0x3b6dcf[_0x817f('0x12')]?_0x3b6dcf[_0x817f('0x12')][_0x817f('0x23')]||null:null,'transaction':_0x550718});});})['then'](function(_0x33175c){logger[_0x817f('0x1e')](_0x817f('0x33'),_0x3b6dcf);logger[_0x817f('0x1a')](_0x817f('0x33'),_0x3b6dcf,JSON[_0x817f('0xd')](_0x33175c));_0xde1af9(_0x33175c);})[_0x817f('0x1b')](function(_0x3c6a12){logger[_0x817f('0xe')](_0x817f('0x33'),_0x3c6a12[_0x817f('0xf')],_0x3b6dcf);_0x545c4c(_0x335eb6[_0x817f('0xe')](0x1f4,_0x3c6a12[_0x817f('0xf')]));});});};exports[_0x817f('0x35')]=function(_0x4b037c){var _0x2a9c4b=this;return new Promise(function(_0x140952,_0x2b964f){return db[_0x817f('0x1c')]['findAll']({'raw':_0x4b037c[_0x817f('0x12')]?_0x4b037c[_0x817f('0x12')]['raw']===undefined?!![]:![]:!![],'where':_0x4b037c[_0x817f('0x12')]?_0x4b037c[_0x817f('0x12')][_0x817f('0x23')]||null:null,'attributes':[[db['sequelize']['fn'](_0x817f('0x36'),db['sequelize']['fn']('IF',db[_0x817f('0x37')]['literal'](_0x817f('0x38')+util[_0x817f('0x39')](_0x817f('0x3a'),moment()['format'](_0x817f('0x3b')))+_0x817f('0x3c')))),'contactsRescheduled']]})[_0x817f('0xa')](function(_0x4c7f7f){logger[_0x817f('0x1e')](_0x817f('0x35'),_0x4b037c);logger[_0x817f('0x1a')](_0x817f('0x35'),_0x4b037c,JSON[_0x817f('0xd')](_0x4c7f7f));_0x140952(_0x4c7f7f);})[_0x817f('0x1b')](function(_0x3300c4){logger[_0x817f('0xe')]('CountReScheduled',_0x3300c4[_0x817f('0xf')],_0x4b037c);_0x2b964f(_0x2a9c4b[_0x817f('0xe')](0x1f4,_0x3300c4['message']));});});};exports[_0x817f('0x3d')]=function(_0x11a704){var _0x56a244=this;return new Promise(function(_0x1c15dd,_0x46a4e3){return db['CmContact']['describe']()['then'](function(_0x44dc4c){return db[_0x817f('0x37')][_0x817f('0x29')](function(_0x988eb2){return db[_0x817f('0x1c')][_0x817f('0x11')]({'where':_0x11a704['options']?_0x11a704[_0x817f('0x12')][_0x817f('0x23')]||null:null,'attributes':_0x11a704[_0x817f('0x12')]?_0x11a704[_0x817f('0x12')][_0x817f('0x14')]||null:null,'limit':0x1,'order':_0x11a704['options']?_0x11a704[_0x817f('0x12')][_0x817f('0x2a')]||null:null,'group':db['CmHopper'][_0x817f('0x3e')],'transaction':_0x988eb2,'lock':_0x988eb2[_0x817f('0x2b')][_0x817f('0x2c')],'include':_0x11a704[_0x817f('0x12')]?_0x11a704['options'][_0x817f('0x16')]?_[_0x817f('0x18')](_0x11a704['options']['include'],function(_0xe34799){return{'model':db[_0xe34799['model']],'as':_0xe34799['as'],'attributes':_0xe34799['attributes'],'include':_0xe34799[_0x817f('0x16')]?_[_0x817f('0x18')](_0xe34799[_0x817f('0x16')],function(_0x4263c5){return{'model':db[_0x4263c5[_0x817f('0x17')]],'as':_0x4263c5['as'],'attributes':_0x4263c5[_0x817f('0x14')],'include':_0x4263c5[_0x817f('0x16')]?_[_0x817f('0x18')](_0x4263c5[_0x817f('0x16')],function(_0x57ad1c){return{'model':db[_0x57ad1c[_0x817f('0x17')]],'as':_0x57ad1c['as'],'attributes':_0x57ad1c[_0x817f('0x14')]};}):[]};}):[]};}):[]:[]})[_0x817f('0xa')](function(_0x44d6ab){var _0x4ecf8e=[];for(var _0x50b9e4=0x0;_0x50b9e4<_0x44d6ab[_0x817f('0x2f')];_0x50b9e4+=0x1){_0x4ecf8e[_0x817f('0x30')](_0x44d6ab[_0x50b9e4][_0x817f('0x31')](_0x11a704['body'],{'transaction':_0x988eb2}));}return BPromise[_0x817f('0x32')](_0x4ecf8e);});})[_0x817f('0xa')](function(_0x4512bd){logger[_0x817f('0x1e')](_0x817f('0x3d'),_0x11a704);logger[_0x817f('0x1a')](_0x817f('0x3d'),_0x11a704,JSON[_0x817f('0xd')](_0x4512bd));_0x1c15dd(_0x4512bd);})[_0x817f('0x1b')](function(_0x22676d){logger[_0x817f('0xe')]('GetContactRecallMe',_0x22676d[_0x817f('0xf')],_0x11a704);_0x46a4e3(_0x56a244[_0x817f('0xe')](0x1f4,_0x22676d[_0x817f('0xf')]));});});});};
\ No newline at end of file
+var _0x2a27=['format','\x22%s\x22','YYYY-MM-DD\x20HH:mm:ss','contactsRescheduled','UserId','push','GetContactRecallMe','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','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','catch','CmHopper','findAll','options','raw','where','attributes','limit','include','map','model','GetCmHopper','find','ShowCmHopper','CreateCmHopper','create','body','UpdateCmHopper','update','destroy','DestroyCmHopper','GetContactDialer','CmContact','describe','transaction','order','LOCK','UPDATE','Contact','keys','length','all','MoveContactManagedDialer','sequelize','CmHopperFinal','CountReScheduled','COUNT','literal','`scheduledat`\x20>=\x20'];(function(_0x3ef6c3,_0x1c96ae){var _0x5a1600=function(_0x241aa8){while(--_0x241aa8){_0x3ef6c3['push'](_0x3ef6c3['shift']());}};_0x5a1600(++_0x1c96ae);}(_0x2a27,0x95));var _0x72a2=function(_0x23a0d6,_0x3d503c){_0x23a0d6=_0x23a0d6-0x0;var _0x272920=_0x2a27[_0x23a0d6];return _0x272920;};'use strict';var _=require(_0x72a2('0x0'));var util=require(_0x72a2('0x1'));var moment=require(_0x72a2('0x2'));var BPromise=require(_0x72a2('0x3'));var rs=require(_0x72a2('0x4'));var fs=require('fs');var Redis=require(_0x72a2('0x5'));var db=require(_0x72a2('0x6'))['db'];var utils=require(_0x72a2('0x7'));var logger=require(_0x72a2('0x8'))(_0x72a2('0x9'));var config=require('../../config/environment');var jayson=require(_0x72a2('0xa'));var client=jayson[_0x72a2('0xb')][_0x72a2('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x5e0d25,_0x4cbb24,_0x398d52){return new BPromise(function(_0x253f52,_0x572ae2){return client[_0x72a2('0xd')](_0x5e0d25,_0x398d52)[_0x72a2('0xe')](function(_0xbfc985){logger[_0x72a2('0xf')](_0x72a2('0x10'),_0x4cbb24,_0x72a2('0x11'));logger[_0x72a2('0x12')](_0x72a2('0x13'),_0x4cbb24,'request\x20sent',JSON[_0x72a2('0x14')](_0xbfc985));if(_0xbfc985[_0x72a2('0x15')]){if(_0xbfc985['error'][_0x72a2('0x16')]===0x1f4){logger[_0x72a2('0x15')](_0x72a2('0x10'),_0x4cbb24,_0xbfc985[_0x72a2('0x15')][_0x72a2('0x17')]);return _0x572ae2(_0xbfc985[_0x72a2('0x15')][_0x72a2('0x17')]);}logger[_0x72a2('0x15')](_0x72a2('0x10'),_0x4cbb24,_0xbfc985['error']['message']);return _0x253f52(_0xbfc985['error'][_0x72a2('0x17')]);}else{logger[_0x72a2('0xf')](_0x72a2('0x10'),_0x4cbb24,_0x72a2('0x11'));_0x253f52(_0xbfc985[_0x72a2('0x18')][_0x72a2('0x17')]);}})[_0x72a2('0x19')](function(_0x938852){logger[_0x72a2('0x15')]('CmHopper,\x20%s,\x20%s',_0x4cbb24,_0x938852);_0x572ae2(_0x938852);});});}exports['GetCmHopper']=function(_0x20513f){var _0x1fb16c=this;return new Promise(function(_0x331e54,_0x2d910b){return db[_0x72a2('0x1a')][_0x72a2('0x1b')]({'raw':_0x20513f[_0x72a2('0x1c')]?_0x20513f[_0x72a2('0x1c')][_0x72a2('0x1d')]===undefined?!![]:![]:!![],'where':_0x20513f[_0x72a2('0x1c')]?_0x20513f[_0x72a2('0x1c')][_0x72a2('0x1e')]||null:null,'attributes':_0x20513f[_0x72a2('0x1c')]?_0x20513f[_0x72a2('0x1c')][_0x72a2('0x1f')]||null:null,'limit':_0x20513f[_0x72a2('0x1c')]?_0x20513f[_0x72a2('0x1c')][_0x72a2('0x20')]||null:null,'include':_0x20513f[_0x72a2('0x1c')]?_0x20513f[_0x72a2('0x1c')][_0x72a2('0x21')]?_[_0x72a2('0x22')](_0x20513f['options'][_0x72a2('0x21')],function(_0x3d2dfa){return{'model':db[_0x3d2dfa[_0x72a2('0x23')]],'as':_0x3d2dfa['as'],'attributes':_0x3d2dfa[_0x72a2('0x1f')],'include':_0x3d2dfa['include']?_[_0x72a2('0x22')](_0x3d2dfa[_0x72a2('0x21')],function(_0x5a572f){return{'model':db[_0x5a572f[_0x72a2('0x23')]],'as':_0x5a572f['as'],'attributes':_0x5a572f[_0x72a2('0x1f')],'include':_0x5a572f[_0x72a2('0x21')]?_[_0x72a2('0x22')](_0x5a572f['include'],function(_0x4bcaa0){return{'model':db[_0x4bcaa0[_0x72a2('0x23')]],'as':_0x4bcaa0['as'],'attributes':_0x4bcaa0['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x28cfaf){logger['info']('GetCmHopper',_0x20513f);logger[_0x72a2('0x12')](_0x72a2('0x24'),_0x20513f,JSON['stringify'](_0x28cfaf));_0x331e54(_0x28cfaf);})[_0x72a2('0x19')](function(_0x3c54cb){logger[_0x72a2('0x15')]('GetCmHopper',_0x3c54cb[_0x72a2('0x17')],_0x20513f);_0x2d910b(_0x1fb16c[_0x72a2('0x15')](0x1f4,_0x3c54cb[_0x72a2('0x17')]));});});};exports['ShowCmHopper']=function(_0x2cdedf){var _0x859bec=this;return new Promise(function(_0x1fa608,_0x180dc8){return db['CmHopper'][_0x72a2('0x25')]({'raw':_0x2cdedf[_0x72a2('0x1c')]?_0x2cdedf[_0x72a2('0x1c')][_0x72a2('0x1d')]===undefined?!![]:![]:!![],'where':_0x2cdedf[_0x72a2('0x1c')]?_0x2cdedf[_0x72a2('0x1c')][_0x72a2('0x1e')]||null:null,'attributes':_0x2cdedf[_0x72a2('0x1c')]?_0x2cdedf[_0x72a2('0x1c')]['attributes']||null:null,'include':_0x2cdedf[_0x72a2('0x1c')]?_0x2cdedf[_0x72a2('0x1c')]['include']?_['map'](_0x2cdedf[_0x72a2('0x1c')][_0x72a2('0x21')],function(_0x2f0d8f){return{'model':db[_0x2f0d8f[_0x72a2('0x23')]],'as':_0x2f0d8f['as'],'attributes':_0x2f0d8f[_0x72a2('0x1f')],'include':_0x2f0d8f[_0x72a2('0x21')]?_['map'](_0x2f0d8f[_0x72a2('0x21')],function(_0x1d82f6){return{'model':db[_0x1d82f6[_0x72a2('0x23')]],'as':_0x1d82f6['as'],'attributes':_0x1d82f6[_0x72a2('0x1f')],'include':_0x1d82f6[_0x72a2('0x21')]?_[_0x72a2('0x22')](_0x1d82f6['include'],function(_0x1f173e){return{'model':db[_0x1f173e[_0x72a2('0x23')]],'as':_0x1f173e['as'],'attributes':_0x1f173e[_0x72a2('0x1f')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x59d0ec){logger[_0x72a2('0xf')](_0x72a2('0x26'),_0x2cdedf);logger['debug'](_0x72a2('0x26'),_0x2cdedf,JSON[_0x72a2('0x14')](_0x59d0ec));_0x1fa608(_0x59d0ec);})[_0x72a2('0x19')](function(_0x5aedac){logger[_0x72a2('0x15')](_0x72a2('0x26'),_0x5aedac[_0x72a2('0x17')],_0x2cdedf);_0x180dc8(_0x859bec[_0x72a2('0x15')](0x1f4,_0x5aedac[_0x72a2('0x17')]));});});};exports[_0x72a2('0x27')]=function(_0x350a24){var _0x4edf00=this;return new Promise(function(_0x19a751,_0x5d1cdb){return db['CmHopper'][_0x72a2('0x28')](_0x350a24[_0x72a2('0x29')],{'raw':_0x350a24[_0x72a2('0x1c')]?_0x350a24['options'][_0x72a2('0x1d')]===undefined?!![]:![]:!![]})[_0x72a2('0xe')](function(_0x3a8d46){logger[_0x72a2('0xf')](_0x72a2('0x27'),_0x350a24);logger[_0x72a2('0x12')](_0x72a2('0x27'),_0x350a24,JSON[_0x72a2('0x14')](_0x3a8d46));_0x19a751(_0x3a8d46);})[_0x72a2('0x19')](function(_0x361f22){logger[_0x72a2('0x15')](_0x72a2('0x27'),_0x361f22[_0x72a2('0x17')],_0x350a24);_0x5d1cdb(_0x4edf00[_0x72a2('0x15')](0x1f4,_0x361f22[_0x72a2('0x17')]));});});};exports[_0x72a2('0x2a')]=function(_0x5bff58){var _0x1c6105=this;return new Promise(function(_0x21edcb,_0x5439be){return db[_0x72a2('0x1a')][_0x72a2('0x2b')](_0x5bff58[_0x72a2('0x29')],{'raw':_0x5bff58['options']?_0x5bff58[_0x72a2('0x1c')][_0x72a2('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5bff58[_0x72a2('0x1c')]?_0x5bff58['options'][_0x72a2('0x1e')]||null:null,'attributes':_0x5bff58[_0x72a2('0x1c')]?_0x5bff58[_0x72a2('0x1c')][_0x72a2('0x1f')]||null:null,'limit':_0x5bff58[_0x72a2('0x1c')]?_0x5bff58[_0x72a2('0x1c')]['limit']||null:null})[_0x72a2('0xe')](function(_0x3b6e7e){logger[_0x72a2('0xf')](_0x72a2('0x2a'),_0x5bff58);logger[_0x72a2('0x12')](_0x72a2('0x2a'),_0x5bff58,JSON['stringify'](_0x3b6e7e));_0x21edcb(_0x3b6e7e);})[_0x72a2('0x19')](function(_0x1fcd3b){logger['error'](_0x72a2('0x2a'),_0x1fcd3b[_0x72a2('0x17')],_0x5bff58);_0x5439be(_0x1c6105['error'](0x1f4,_0x1fcd3b[_0x72a2('0x17')]));});});};exports['DestroyCmHopper']=function(_0x139767){var _0x38acf6=this;return new Promise(function(_0x1c47dd,_0x295ad3){return db[_0x72a2('0x1a')][_0x72a2('0x2c')]({'where':_0x139767[_0x72a2('0x1c')]?_0x139767[_0x72a2('0x1c')][_0x72a2('0x1e')]||null:null})[_0x72a2('0xe')](function(_0x53a540){logger['info'](_0x72a2('0x2d'),_0x139767);logger[_0x72a2('0x12')](_0x72a2('0x2d'),_0x139767,JSON[_0x72a2('0x14')](_0x53a540));_0x1c47dd(_0x53a540);})['catch'](function(_0x283f0d){logger[_0x72a2('0x15')](_0x72a2('0x2d'),_0x283f0d[_0x72a2('0x17')],_0x139767);_0x295ad3(_0x38acf6[_0x72a2('0x15')](0x1f4,_0x283f0d['message']));});});};exports[_0x72a2('0x2e')]=function(_0x23ec37){var _0x5aceb6=this;return new Promise(function(_0x450cce,_0x44bfec){return db[_0x72a2('0x2f')][_0x72a2('0x30')]()[_0x72a2('0xe')](function(_0x1fd05d){return db['sequelize'][_0x72a2('0x31')](function(_0x248361){return db[_0x72a2('0x1a')][_0x72a2('0x1b')]({'where':_0x23ec37[_0x72a2('0x1c')]?_0x23ec37['options'][_0x72a2('0x1e')]||null:null,'attributes':_0x23ec37[_0x72a2('0x1c')]?_0x23ec37[_0x72a2('0x1c')][_0x72a2('0x1f')]||null:null,'limit':_0x23ec37['options']?_0x23ec37[_0x72a2('0x1c')]['limit']||null:null,'order':_0x23ec37[_0x72a2('0x1c')]?_0x23ec37[_0x72a2('0x1c')][_0x72a2('0x32')]||null:null,'transaction':_0x248361,'lock':_0x248361[_0x72a2('0x33')][_0x72a2('0x34')],'include':[{'model':db[_0x72a2('0x2f')],'as':_0x72a2('0x35'),'attributes':_[_0x72a2('0x36')](_0x1fd05d)}]})['then'](function(_0x5689af){var _0x843fff=[];for(var _0x2bb07f=0x0;_0x2bb07f<_0x5689af[_0x72a2('0x37')];_0x2bb07f+=0x1){_0x843fff['push'](_0x5689af[_0x2bb07f]['update'](_0x23ec37[_0x72a2('0x29')],{'transaction':_0x248361}));}return BPromise[_0x72a2('0x38')](_0x843fff);});})[_0x72a2('0xe')](function(_0x412ce5){logger[_0x72a2('0xf')]('GetContactDialer',_0x23ec37);logger[_0x72a2('0x12')](_0x72a2('0x2e'),_0x23ec37,JSON[_0x72a2('0x14')](_0x412ce5));_0x450cce(_0x412ce5);})[_0x72a2('0x19')](function(_0x40f1ea){logger[_0x72a2('0x15')](_0x72a2('0x2e'),_0x40f1ea[_0x72a2('0x17')],_0x23ec37);_0x44bfec(_0x5aceb6[_0x72a2('0x15')](0x1f4,_0x40f1ea[_0x72a2('0x17')]));});});});};exports[_0x72a2('0x39')]=function(_0x202ed6){var _0x4a5596=this;return new Promise(function(_0x975e2,_0xb758d9){return db[_0x72a2('0x3a')]['transaction'](function(_0x496ddb){return db[_0x72a2('0x3b')][_0x72a2('0x28')](_0x202ed6[_0x72a2('0x29')],{'raw':_0x202ed6[_0x72a2('0x1c')]?_0x202ed6[_0x72a2('0x1c')][_0x72a2('0x1d')]===undefined?!![]:![]:!![],'transaction':_0x496ddb})[_0x72a2('0xe')](function(){return db[_0x72a2('0x1a')][_0x72a2('0x2c')]({'where':_0x202ed6[_0x72a2('0x1c')]?_0x202ed6[_0x72a2('0x1c')][_0x72a2('0x1e')]||null:null,'transaction':_0x496ddb});});})['then'](function(_0x1a1e3f){logger[_0x72a2('0xf')](_0x72a2('0x39'),_0x202ed6);logger[_0x72a2('0x12')](_0x72a2('0x39'),_0x202ed6,JSON[_0x72a2('0x14')](_0x1a1e3f));_0x975e2(_0x1a1e3f);})[_0x72a2('0x19')](function(_0x61d86e){logger['error'](_0x72a2('0x39'),_0x61d86e['message'],_0x202ed6);_0xb758d9(_0x4a5596[_0x72a2('0x15')](0x1f4,_0x61d86e[_0x72a2('0x17')]));});});};exports[_0x72a2('0x3c')]=function(_0x465a26){var _0x5a5153=this;return new Promise(function(_0x138d59,_0x7bc7f){return db[_0x72a2('0x1a')][_0x72a2('0x1b')]({'raw':_0x465a26['options']?_0x465a26[_0x72a2('0x1c')][_0x72a2('0x1d')]===undefined?!![]:![]:!![],'where':_0x465a26['options']?_0x465a26[_0x72a2('0x1c')]['where']||null:null,'attributes':[[db[_0x72a2('0x3a')]['fn'](_0x72a2('0x3d'),db['sequelize']['fn']('IF',db['sequelize'][_0x72a2('0x3e')](_0x72a2('0x3f')+util[_0x72a2('0x40')](_0x72a2('0x41'),moment()['format'](_0x72a2('0x42')))+'\x20,\x201,\x20null'))),_0x72a2('0x43')]]})[_0x72a2('0xe')](function(_0x123586){logger[_0x72a2('0xf')](_0x72a2('0x3c'),_0x465a26);logger['debug'](_0x72a2('0x3c'),_0x465a26,JSON[_0x72a2('0x14')](_0x123586));_0x138d59(_0x123586);})[_0x72a2('0x19')](function(_0x4a739c){logger[_0x72a2('0x15')](_0x72a2('0x3c'),_0x4a739c[_0x72a2('0x17')],_0x465a26);_0x7bc7f(_0x5a5153[_0x72a2('0x15')](0x1f4,_0x4a739c[_0x72a2('0x17')]));});});};exports['GetContactRecallMe']=function(_0x2fa424){var _0x272f0b=this;return new Promise(function(_0x49794e,_0x23ae3f){return db[_0x72a2('0x2f')][_0x72a2('0x30')]()['then'](function(_0x14d2fc){return db[_0x72a2('0x3a')][_0x72a2('0x31')](function(_0x34618d){return db['CmHopper']['findAll']({'where':_0x2fa424[_0x72a2('0x1c')]?_0x2fa424['options'][_0x72a2('0x1e')]||null:null,'attributes':_0x2fa424[_0x72a2('0x1c')]?_0x2fa424[_0x72a2('0x1c')][_0x72a2('0x1f')]||null:null,'limit':0x1,'order':_0x2fa424['options']?_0x2fa424[_0x72a2('0x1c')][_0x72a2('0x32')]||null:null,'group':db[_0x72a2('0x1a')][_0x72a2('0x44')],'transaction':_0x34618d,'lock':_0x34618d[_0x72a2('0x33')]['UPDATE'],'include':_0x2fa424[_0x72a2('0x1c')]?_0x2fa424[_0x72a2('0x1c')]['include']?_[_0x72a2('0x22')](_0x2fa424[_0x72a2('0x1c')][_0x72a2('0x21')],function(_0x127db8){return{'model':db[_0x127db8[_0x72a2('0x23')]],'as':_0x127db8['as'],'attributes':_0x127db8[_0x72a2('0x1f')],'include':_0x127db8[_0x72a2('0x21')]?_[_0x72a2('0x22')](_0x127db8[_0x72a2('0x21')],function(_0x4f6435){return{'model':db[_0x4f6435[_0x72a2('0x23')]],'as':_0x4f6435['as'],'attributes':_0x4f6435[_0x72a2('0x1f')],'include':_0x4f6435['include']?_[_0x72a2('0x22')](_0x4f6435[_0x72a2('0x21')],function(_0x5a83d7){return{'model':db[_0x5a83d7[_0x72a2('0x23')]],'as':_0x5a83d7['as'],'attributes':_0x5a83d7[_0x72a2('0x1f')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x495959){var _0x5ee753=[];for(var _0x482fdf=0x0;_0x482fdf<_0x495959[_0x72a2('0x37')];_0x482fdf+=0x1){_0x5ee753[_0x72a2('0x45')](_0x495959[_0x482fdf][_0x72a2('0x2b')](_0x2fa424[_0x72a2('0x29')],{'transaction':_0x34618d}));}return BPromise[_0x72a2('0x38')](_0x5ee753);});})[_0x72a2('0xe')](function(_0x3d853d){logger['info']('GetContactRecallMe',_0x2fa424);logger[_0x72a2('0x12')]('GetContactRecallMe',_0x2fa424,JSON['stringify'](_0x3d853d));_0x49794e(_0x3d853d);})['catch'](function(_0x2179aa){logger[_0x72a2('0x15')](_0x72a2('0x46'),_0x2179aa[_0x72a2('0x17')],_0x2fa424);_0x23ae3f(_0x272f0b[_0x72a2('0x15')](0x1f4,_0x2179aa[_0x72a2('0x17')]));});});});};
\ No newline at end of file
index 8b80472..8888e07 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(_0x9cd4c3,_0x1c9b2c){var _0x4c9025=function(_0x25b3c6){while(--_0x25b3c6){_0x9cd4c3['push'](_0x9cd4c3['shift']());}};_0x4c9025(++_0x1c9b2c);}(_0x9957,0x93));var _0x7995=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0x9957[_0x3947c9];return _0x2e7871;};'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 _0x7a54=['destroy','exports','multer','util','path','express','Router','../../components/interaction/service','../../config/environment','./cmHopper.controller','get','isAuthenticated','describe','/opencontacts','/:id','post','/preview','getPreview','put','delete'];(function(_0x18bafc,_0x59c5ac){var _0x180ace=function(_0x36eb16){while(--_0x36eb16){_0x18bafc['push'](_0x18bafc['shift']());}};_0x180ace(++_0x59c5ac);}(_0x7a54,0x106));var _0x47a5=function(_0x20436f,_0x3ad2bd){_0x20436f=_0x20436f-0x0;var _0x2b9892=_0x7a54[_0x20436f];return _0x2b9892;};'use strict';var multer=require(_0x47a5('0x0'));var util=require(_0x47a5('0x1'));var path=require(_0x47a5('0x2'));var timeout=require('connect-timeout');var express=require(_0x47a5('0x3'));var router=express[_0x47a5('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x47a5('0x5'));var config=require(_0x47a5('0x6'));var controller=require(_0x47a5('0x7'));router[_0x47a5('0x8')]('/',auth[_0x47a5('0x9')](),controller['index']);router[_0x47a5('0x8')]('/describe',auth[_0x47a5('0x9')](),controller[_0x47a5('0xa')]);router['get'](_0x47a5('0xb'),auth['isAuthenticated'](),controller['getOpenContacts']);router['get'](_0x47a5('0xc'),auth[_0x47a5('0x9')](),controller['show']);router[_0x47a5('0xd')]('/',auth['isAuthenticated'](),controller['create']);router[_0x47a5('0xd')](_0x47a5('0xe'),auth[_0x47a5('0x9')](),controller[_0x47a5('0xf')]);router[_0x47a5('0x10')](_0x47a5('0xc'),auth[_0x47a5('0x9')](),controller['update']);router[_0x47a5('0x11')](_0x47a5('0xc'),auth[_0x47a5('0x9')](),controller[_0x47a5('0x12')]);module[_0x47a5('0x13')]=router;
\ No newline at end of file
index 3afb1b2..db23ca7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7817=['INTEGER','contactListQueue','moment','sequelize','exports','STRING'];(function(_0x543bc5,_0x3ca523){var _0x19304d=function(_0x3b521f){while(--_0x3b521f){_0x543bc5['push'](_0x543bc5['shift']());}};_0x19304d(++_0x3ca523);}(_0x7817,0x1dc));var _0x7781=function(_0x5a6f0d,_0x28bfa5){_0x5a6f0d=_0x5a6f0d-0x0;var _0x13d5f0=_0x7817[_0x5a6f0d];return _0x13d5f0;};'use strict';var moment=require(_0x7781('0x0'));var Sequelize=require(_0x7781('0x1'));module[_0x7781('0x2')]={'phone':{'type':Sequelize[_0x7781('0x3')],'allowNull':![]},'ContactId':{'type':Sequelize[_0x7781('0x4')],'unique':_0x7781('0x5')},'ListId':{'type':Sequelize[_0x7781('0x4')],'unique':_0x7781('0x5')},'VoiceQueueId':{'type':Sequelize['INTEGER'],'unique':'contactListQueue'}};
\ No newline at end of file
+var _0x50b2=['contactListQueue','moment','exports','STRING','INTEGER'];(function(_0xeca834,_0x3fe0b8){var _0x48b1d6=function(_0x2679a9){while(--_0x2679a9){_0xeca834['push'](_0xeca834['shift']());}};_0x48b1d6(++_0x3fe0b8);}(_0x50b2,0x17d));var _0x250b=function(_0x404a11,_0x268dc0){_0x404a11=_0x404a11-0x0;var _0x435823=_0x50b2[_0x404a11];return _0x435823;};'use strict';var moment=require(_0x250b('0x0'));var Sequelize=require('sequelize');module[_0x250b('0x1')]={'phone':{'type':Sequelize[_0x250b('0x2')],'allowNull':![]},'ContactId':{'type':Sequelize[_0x250b('0x3')],'unique':_0x250b('0x4')},'ListId':{'type':Sequelize['INTEGER'],'unique':_0x250b('0x4')},'VoiceQueueId':{'type':Sequelize[_0x250b('0x3')],'unique':_0x250b('0x4')}};
\ No newline at end of file
index 4acab04..62073eb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xec48=['fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','status','json','count','offset','limit','set','Content-Range','apply','update','then','destroy','sendStatus','error','stack','name','index','CmHopperBlack','rawAttributes','model','query','filters','intersection','attributes','fields','length','order','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','keys','find','body','describe','html-pdf','eml-format','rimraf','zip-dir'];(function(_0x578c30,_0x1c88f2){var _0x327b01=function(_0x3e7fa1){while(--_0x3e7fa1){_0x578c30['push'](_0x578c30['shift']());}};_0x327b01(++_0x1c88f2);}(_0xec48,0x8e));var _0x8ec4=function(_0x187842,_0x58331c){_0x187842=_0x187842-0x0;var _0x5dbcf3=_0xec48[_0x187842];return _0x5dbcf3;};'use strict';var pdf=require(_0x8ec4('0x0'));var emlformat=require(_0x8ec4('0x1'));var rimraf=require(_0x8ec4('0x2'));var zipdir=require(_0x8ec4('0x3'));var jsonpatch=require(_0x8ec4('0x4'));var rp=require(_0x8ec4('0x5'));var moment=require(_0x8ec4('0x6'));var BPromise=require('bluebird');var Mustache=require(_0x8ec4('0x7'));var util=require(_0x8ec4('0x8'));var path=require(_0x8ec4('0x9'));var sox=require(_0x8ec4('0xa'));var csv=require(_0x8ec4('0xb'));var ejs=require(_0x8ec4('0xc'));var fs=require('fs');var _=require(_0x8ec4('0xd'));var squel=require(_0x8ec4('0xe'));var crypto=require(_0x8ec4('0xf'));var jsforce=require('jsforce');var deskjs=require(_0x8ec4('0x10'));var toCsv=require(_0x8ec4('0xb'));var querystring=require('querystring');var Papa=require(_0x8ec4('0x11'));var Redis=require(_0x8ec4('0x12'));var authService=require(_0x8ec4('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x8ec4('0x14'));var logger=require(_0x8ec4('0x15'))(_0x8ec4('0x16'));var utils=require(_0x8ec4('0x17'));var config=require(_0x8ec4('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xea9b9c,_0x5845e9){_0x5845e9=_0x5845e9||0xcc;return function(_0x3e58e0){if(_0x3e58e0){return _0xea9b9c['sendStatus'](_0x5845e9);}return _0xea9b9c[_0x8ec4('0x19')](_0x5845e9)['end']();};}function respondWithResult(_0x45b152,_0x547187){_0x547187=_0x547187||0xc8;return function(_0x3449af){if(_0x3449af){return _0x45b152['status'](_0x547187)[_0x8ec4('0x1a')](_0x3449af);}};}function respondWithFilteredResult(_0x51bff7,_0x1f0943){return function(_0x4e4ef2){if(_0x4e4ef2){var _0x34c48a=_0x4e4ef2[_0x8ec4('0x1b')],_0x28bce8=_0x1f0943[_0x8ec4('0x1c')],_0x5afff8=_0x1f0943[_0x8ec4('0x1c')]+_0x1f0943[_0x8ec4('0x1d')],_0x25ec45;if(_0x5afff8>=_0x34c48a){_0x5afff8=_0x34c48a;_0x25ec45=0xc8;}else{_0x25ec45=0xce;}_0x51bff7[_0x8ec4('0x19')](_0x25ec45);return _0x51bff7[_0x8ec4('0x1e')](_0x8ec4('0x1f'),_0x28bce8+'-'+_0x5afff8+'/'+_0x34c48a)['json'](_0x4e4ef2);}return null;};}function patchUpdates(_0xdfa25d){return function(_0x37e8b5){try{jsonpatch[_0x8ec4('0x20')](_0x37e8b5,_0xdfa25d,!![]);}catch(_0x52ec1e){return BPromise['reject'](_0x52ec1e);}return _0x37e8b5['save']();};}function saveUpdates(_0x32903b,_0x2523f6){return function(_0x477682){if(_0x477682){return _0x477682[_0x8ec4('0x21')](_0x32903b)[_0x8ec4('0x22')](function(_0x4372fb){return _0x4372fb;});}return null;};}function removeEntity(_0x3305c7,_0x1048bc){return function(_0x3b3896){if(_0x3b3896){return _0x3b3896[_0x8ec4('0x23')]()[_0x8ec4('0x22')](function(){_0x3305c7[_0x8ec4('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5279a6,_0x23ec44){return function(_0x3bbf49){if(!_0x3bbf49){_0x5279a6[_0x8ec4('0x24')](0x194);}return _0x3bbf49;};}function handleError(_0x2bb242,_0x331317){_0x331317=_0x331317||0x1f4;return function(_0x5a48de){logger[_0x8ec4('0x25')](_0x5a48de[_0x8ec4('0x26')]);if(_0x5a48de[_0x8ec4('0x27')]){delete _0x5a48de['name'];}_0x2bb242[_0x8ec4('0x19')](_0x331317)['send'](_0x5a48de);};}exports[_0x8ec4('0x28')]=function(_0x506036,_0x2d7cb4){var _0x3079c0={},_0x20515f={},_0x476c80={'count':0x0,'rows':[]};var _0x1a7047=db[_0x8ec4('0x29')][_0x8ec4('0x2a')];_0x20515f[_0x8ec4('0x2b')]=_['keys'](_0x1a7047);_0x20515f['query']=_['keys'](_0x506036[_0x8ec4('0x2c')]);_0x20515f[_0x8ec4('0x2d')]=_[_0x8ec4('0x2e')](_0x20515f[_0x8ec4('0x2b')],_0x20515f[_0x8ec4('0x2c')]);_0x3079c0[_0x8ec4('0x2f')]=_[_0x8ec4('0x2e')](_0x20515f[_0x8ec4('0x2b')],qs[_0x8ec4('0x30')](_0x506036[_0x8ec4('0x2c')][_0x8ec4('0x30')]));_0x3079c0['attributes']=_0x3079c0[_0x8ec4('0x2f')][_0x8ec4('0x31')]?_0x3079c0[_0x8ec4('0x2f')]:_0x20515f[_0x8ec4('0x2b')];if(!_0x506036[_0x8ec4('0x2c')]['hasOwnProperty']('nolimit')){_0x3079c0[_0x8ec4('0x1d')]=qs[_0x8ec4('0x1d')](_0x506036[_0x8ec4('0x2c')][_0x8ec4('0x1d')]);_0x3079c0[_0x8ec4('0x1c')]=qs[_0x8ec4('0x1c')](_0x506036['query'][_0x8ec4('0x1c')]);}_0x3079c0[_0x8ec4('0x32')]=qs['sort'](_0x506036[_0x8ec4('0x2c')][_0x8ec4('0x33')]);_0x3079c0['where']=qs[_0x8ec4('0x2d')](_[_0x8ec4('0x34')](_0x506036[_0x8ec4('0x2c')],_0x20515f[_0x8ec4('0x2d')]));if(_0x506036['query'][_0x8ec4('0x35')]){_0x3079c0[_0x8ec4('0x36')]=_[_0x8ec4('0x37')](_0x3079c0['where'],{'$or':_[_0x8ec4('0x38')](_0x1a7047,function(_0xdcfbda){if(_0xdcfbda[_0x8ec4('0x39')][_0x8ec4('0x3a')]!==_0x8ec4('0x3b')){var _0x1a1615={};_0x1a1615[_0xdcfbda[_0x8ec4('0x3c')]]={'$like':'%'+_0x506036['query'][_0x8ec4('0x35')]+'%'};return _0x1a1615;}})});}_0x3079c0=_[_0x8ec4('0x37')]({},_0x3079c0,_0x506036[_0x8ec4('0x3d')]);var _0x39bb9b={'where':_0x3079c0['where']};return db[_0x8ec4('0x29')][_0x8ec4('0x1b')](_0x39bb9b)['then'](function(_0x47aa97){_0x476c80['count']=_0x47aa97;if(_0x506036['query'][_0x8ec4('0x3e')]){_0x3079c0[_0x8ec4('0x3f')]=[{'all':!![]}];}return db[_0x8ec4('0x29')][_0x8ec4('0x40')](_0x3079c0);})[_0x8ec4('0x22')](function(_0x379765){_0x476c80[_0x8ec4('0x41')]=_0x379765;return _0x476c80;})['then'](respondWithFilteredResult(_0x2d7cb4,_0x3079c0))[_0x8ec4('0x42')](handleError(_0x2d7cb4,null));};exports[_0x8ec4('0x43')]=function(_0x5de67b,_0xaf77fa){var _0x41cb13={'raw':!![],'where':{'id':_0x5de67b[_0x8ec4('0x44')]['id']}},_0x85bcc7={};_0x85bcc7['model']=_[_0x8ec4('0x45')](db[_0x8ec4('0x29')][_0x8ec4('0x2a')]);_0x85bcc7[_0x8ec4('0x2c')]=_[_0x8ec4('0x45')](_0x5de67b[_0x8ec4('0x2c')]);_0x85bcc7['filters']=_[_0x8ec4('0x2e')](_0x85bcc7[_0x8ec4('0x2b')],_0x85bcc7[_0x8ec4('0x2c')]);_0x41cb13[_0x8ec4('0x2f')]=_[_0x8ec4('0x2e')](_0x85bcc7[_0x8ec4('0x2b')],qs[_0x8ec4('0x30')](_0x5de67b['query'][_0x8ec4('0x30')]));_0x41cb13[_0x8ec4('0x2f')]=_0x41cb13['attributes'][_0x8ec4('0x31')]?_0x41cb13[_0x8ec4('0x2f')]:_0x85bcc7[_0x8ec4('0x2b')];if(_0x5de67b[_0x8ec4('0x2c')]['includeAll']){_0x41cb13['include']=[{'all':!![]}];}_0x41cb13=_[_0x8ec4('0x37')]({},_0x41cb13,_0x5de67b[_0x8ec4('0x3d')]);return db[_0x8ec4('0x29')][_0x8ec4('0x46')](_0x41cb13)[_0x8ec4('0x22')](handleEntityNotFound(_0xaf77fa,null))['then'](respondWithResult(_0xaf77fa,null))[_0x8ec4('0x42')](handleError(_0xaf77fa,null));};exports['update']=function(_0x434d40,_0x2b9beb){if(_0x434d40['body']['id']){delete _0x434d40[_0x8ec4('0x47')]['id'];}return db[_0x8ec4('0x29')][_0x8ec4('0x46')]({'where':{'id':_0x434d40[_0x8ec4('0x44')]['id']}})[_0x8ec4('0x22')](handleEntityNotFound(_0x2b9beb,null))[_0x8ec4('0x22')](saveUpdates(_0x434d40[_0x8ec4('0x47')],null))['then'](respondWithResult(_0x2b9beb,null))[_0x8ec4('0x42')](handleError(_0x2b9beb,null));};exports[_0x8ec4('0x23')]=function(_0x16c0f7,_0x4b5089){return db[_0x8ec4('0x29')]['find']({'where':{'id':_0x16c0f7[_0x8ec4('0x44')]['id']}})[_0x8ec4('0x22')](handleEntityNotFound(_0x4b5089,null))['then'](removeEntity(_0x4b5089,null))[_0x8ec4('0x42')](handleError(_0x4b5089,null));};exports[_0x8ec4('0x48')]=function(_0x554e1c,_0x287fe8){return db[_0x8ec4('0x29')]['describe']()['then'](respondWithResult(_0x287fe8,null))[_0x8ec4('0x42')](handleError(_0x287fe8,null));};
\ No newline at end of file
+var _0xd631=['destroy','error','stack','name','send','index','rawAttributes','keys','query','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','offset','order','sort','where','pick','filter','merge','map','type','key','options','CmHopperBlack','include','findAll','catch','show','params','filters','includeAll','find','update','body','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','limit','set','Content-Range','apply','reject','then'];(function(_0x12bc86,_0x48294a){var _0x24377a=function(_0x3c41c9){while(--_0x3c41c9){_0x12bc86['push'](_0x12bc86['shift']());}};_0x24377a(++_0x48294a);}(_0xd631,0x19e));var _0x1d63=function(_0x68c979,_0x431cff){_0x68c979=_0x68c979-0x0;var _0x4f0001=_0xd631[_0x68c979];return _0x4f0001;};'use strict';var pdf=require(_0x1d63('0x0'));var emlformat=require(_0x1d63('0x1'));var rimraf=require(_0x1d63('0x2'));var zipdir=require(_0x1d63('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x1d63('0x4'));var moment=require(_0x1d63('0x5'));var BPromise=require(_0x1d63('0x6'));var Mustache=require('mustache');var util=require(_0x1d63('0x7'));var path=require(_0x1d63('0x8'));var sox=require(_0x1d63('0x9'));var csv=require(_0x1d63('0xa'));var ejs=require(_0x1d63('0xb'));var fs=require('fs');var _=require(_0x1d63('0xc'));var squel=require(_0x1d63('0xd'));var crypto=require(_0x1d63('0xe'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x1d63('0xa'));var querystring=require(_0x1d63('0xf'));var Papa=require(_0x1d63('0x10'));var Redis=require('ioredis');var authService=require(_0x1d63('0x11'));var qs=require(_0x1d63('0x12'));var hardwareService=require(_0x1d63('0x13'));var logger=require(_0x1d63('0x14'))(_0x1d63('0x15'));var utils=require(_0x1d63('0x16'));var config=require(_0x1d63('0x17'));var db=require(_0x1d63('0x18'))['db'];function respondWithStatusCode(_0x132bad,_0x5969c9){_0x5969c9=_0x5969c9||0xcc;return function(_0x417d8a){if(_0x417d8a){return _0x132bad[_0x1d63('0x19')](_0x5969c9);}return _0x132bad[_0x1d63('0x1a')](_0x5969c9)[_0x1d63('0x1b')]();};}function respondWithResult(_0x57ec25,_0x36b579){_0x36b579=_0x36b579||0xc8;return function(_0x33f6ff){if(_0x33f6ff){return _0x57ec25[_0x1d63('0x1a')](_0x36b579)[_0x1d63('0x1c')](_0x33f6ff);}};}function respondWithFilteredResult(_0x1cd663,_0x70e907){return function(_0x454d19){if(_0x454d19){var _0x313f48=_0x454d19[_0x1d63('0x1d')],_0x1feb6b=_0x70e907['offset'],_0x2014e0=_0x70e907['offset']+_0x70e907[_0x1d63('0x1e')],_0x3222a0;if(_0x2014e0>=_0x313f48){_0x2014e0=_0x313f48;_0x3222a0=0xc8;}else{_0x3222a0=0xce;}_0x1cd663[_0x1d63('0x1a')](_0x3222a0);return _0x1cd663[_0x1d63('0x1f')](_0x1d63('0x20'),_0x1feb6b+'-'+_0x2014e0+'/'+_0x313f48)['json'](_0x454d19);}return null;};}function patchUpdates(_0x5e0dfc){return function(_0xcb739){try{jsonpatch[_0x1d63('0x21')](_0xcb739,_0x5e0dfc,!![]);}catch(_0x36f818){return BPromise[_0x1d63('0x22')](_0x36f818);}return _0xcb739['save']();};}function saveUpdates(_0x189fd2,_0x26322e){return function(_0x3ddf18){if(_0x3ddf18){return _0x3ddf18['update'](_0x189fd2)[_0x1d63('0x23')](function(_0x272358){return _0x272358;});}return null;};}function removeEntity(_0x3a08ae,_0x4ce4e5){return function(_0x113a18){if(_0x113a18){return _0x113a18[_0x1d63('0x24')]()[_0x1d63('0x23')](function(){_0x3a08ae[_0x1d63('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2d2b8c,_0xd8fc88){return function(_0x5170d4){if(!_0x5170d4){_0x2d2b8c['sendStatus'](0x194);}return _0x5170d4;};}function handleError(_0x5c24b5,_0x1eb847){_0x1eb847=_0x1eb847||0x1f4;return function(_0x1d10a9){logger[_0x1d63('0x25')](_0x1d10a9[_0x1d63('0x26')]);if(_0x1d10a9[_0x1d63('0x27')]){delete _0x1d10a9[_0x1d63('0x27')];}_0x5c24b5[_0x1d63('0x1a')](_0x1eb847)[_0x1d63('0x28')](_0x1d10a9);};}exports[_0x1d63('0x29')]=function(_0x3dfaaf,_0x172dbe){var _0x13e1ea={},_0x1a7806={},_0x16189d={'count':0x0,'rows':[]};var _0x3252e9=db['CmHopperBlack'][_0x1d63('0x2a')];_0x1a7806['model']=_[_0x1d63('0x2b')](_0x3252e9);_0x1a7806[_0x1d63('0x2c')]=_[_0x1d63('0x2b')](_0x3dfaaf[_0x1d63('0x2c')]);_0x1a7806['filters']=_[_0x1d63('0x2d')](_0x1a7806[_0x1d63('0x2e')],_0x1a7806['query']);_0x13e1ea['attributes']=_[_0x1d63('0x2d')](_0x1a7806[_0x1d63('0x2e')],qs[_0x1d63('0x2f')](_0x3dfaaf[_0x1d63('0x2c')][_0x1d63('0x2f')]));_0x13e1ea[_0x1d63('0x30')]=_0x13e1ea[_0x1d63('0x30')][_0x1d63('0x31')]?_0x13e1ea['attributes']:_0x1a7806[_0x1d63('0x2e')];if(!_0x3dfaaf[_0x1d63('0x2c')][_0x1d63('0x32')](_0x1d63('0x33'))){_0x13e1ea['limit']=qs[_0x1d63('0x1e')](_0x3dfaaf[_0x1d63('0x2c')][_0x1d63('0x1e')]);_0x13e1ea[_0x1d63('0x34')]=qs[_0x1d63('0x34')](_0x3dfaaf[_0x1d63('0x2c')][_0x1d63('0x34')]);}_0x13e1ea[_0x1d63('0x35')]=qs[_0x1d63('0x36')](_0x3dfaaf[_0x1d63('0x2c')]['sort']);_0x13e1ea[_0x1d63('0x37')]=qs['filters'](_[_0x1d63('0x38')](_0x3dfaaf[_0x1d63('0x2c')],_0x1a7806['filters']));if(_0x3dfaaf[_0x1d63('0x2c')][_0x1d63('0x39')]){_0x13e1ea[_0x1d63('0x37')]=_[_0x1d63('0x3a')](_0x13e1ea[_0x1d63('0x37')],{'$or':_[_0x1d63('0x3b')](_0x3252e9,function(_0x643aac){if(_0x643aac[_0x1d63('0x3c')][_0x1d63('0x3d')]!=='VIRTUAL'){var _0x514a55={};_0x514a55[_0x643aac['field']]={'$like':'%'+_0x3dfaaf[_0x1d63('0x2c')][_0x1d63('0x39')]+'%'};return _0x514a55;}})});}_0x13e1ea=_[_0x1d63('0x3a')]({},_0x13e1ea,_0x3dfaaf[_0x1d63('0x3e')]);var _0x5eb271={'where':_0x13e1ea[_0x1d63('0x37')]};return db[_0x1d63('0x3f')][_0x1d63('0x1d')](_0x5eb271)[_0x1d63('0x23')](function(_0x458b36){_0x16189d['count']=_0x458b36;if(_0x3dfaaf[_0x1d63('0x2c')]['includeAll']){_0x13e1ea[_0x1d63('0x40')]=[{'all':!![]}];}return db[_0x1d63('0x3f')][_0x1d63('0x41')](_0x13e1ea);})[_0x1d63('0x23')](function(_0x144f3d){_0x16189d['rows']=_0x144f3d;return _0x16189d;})[_0x1d63('0x23')](respondWithFilteredResult(_0x172dbe,_0x13e1ea))[_0x1d63('0x42')](handleError(_0x172dbe,null));};exports[_0x1d63('0x43')]=function(_0x21b5a6,_0xf6c02e){var _0x587864={'raw':!![],'where':{'id':_0x21b5a6[_0x1d63('0x44')]['id']}},_0x1c42d4={};_0x1c42d4['model']=_['keys'](db[_0x1d63('0x3f')]['rawAttributes']);_0x1c42d4[_0x1d63('0x2c')]=_[_0x1d63('0x2b')](_0x21b5a6['query']);_0x1c42d4[_0x1d63('0x45')]=_[_0x1d63('0x2d')](_0x1c42d4[_0x1d63('0x2e')],_0x1c42d4[_0x1d63('0x2c')]);_0x587864[_0x1d63('0x30')]=_['intersection'](_0x1c42d4['model'],qs[_0x1d63('0x2f')](_0x21b5a6[_0x1d63('0x2c')][_0x1d63('0x2f')]));_0x587864[_0x1d63('0x30')]=_0x587864['attributes']['length']?_0x587864[_0x1d63('0x30')]:_0x1c42d4[_0x1d63('0x2e')];if(_0x21b5a6[_0x1d63('0x2c')][_0x1d63('0x46')]){_0x587864[_0x1d63('0x40')]=[{'all':!![]}];}_0x587864=_[_0x1d63('0x3a')]({},_0x587864,_0x21b5a6[_0x1d63('0x3e')]);return db[_0x1d63('0x3f')][_0x1d63('0x47')](_0x587864)[_0x1d63('0x23')](handleEntityNotFound(_0xf6c02e,null))[_0x1d63('0x23')](respondWithResult(_0xf6c02e,null))[_0x1d63('0x42')](handleError(_0xf6c02e,null));};exports[_0x1d63('0x48')]=function(_0x6728b4,_0x45620d){if(_0x6728b4['body']['id']){delete _0x6728b4[_0x1d63('0x49')]['id'];}return db[_0x1d63('0x3f')][_0x1d63('0x47')]({'where':{'id':_0x6728b4[_0x1d63('0x44')]['id']}})['then'](handleEntityNotFound(_0x45620d,null))[_0x1d63('0x23')](saveUpdates(_0x6728b4[_0x1d63('0x49')],null))[_0x1d63('0x23')](respondWithResult(_0x45620d,null))['catch'](handleError(_0x45620d,null));};exports['destroy']=function(_0xb81864,_0x14ae42){return db[_0x1d63('0x3f')]['find']({'where':{'id':_0xb81864[_0x1d63('0x44')]['id']}})['then'](handleEntityNotFound(_0x14ae42,null))['then'](removeEntity(_0x14ae42,null))[_0x1d63('0x42')](handleError(_0x14ae42,null));};exports[_0x1d63('0x4a')]=function(_0x572776,_0x5b9bd1){return db[_0x1d63('0x3f')][_0x1d63('0x4a')]()[_0x1d63('0x23')](respondWithResult(_0x5b9bd1,null))[_0x1d63('0x42')](handleError(_0x5b9bd1,null));};
\ No newline at end of file
index e868e06..dfe6d78 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f62=['api','moment','bluebird','rimraf','../../config/environment','./cmHopperBlack.attributes','exports','define','CmHopperBlack','cm_hopper_black','util'];(function(_0xc6fb05,_0x2199ce){var _0x53cc80=function(_0x211605){while(--_0x211605){_0xc6fb05['push'](_0xc6fb05['shift']());}};_0x53cc80(++_0x2199ce);}(_0x9f62,0x154));var _0x29f6=function(_0x2e95f9,_0x4654f4){_0x2e95f9=_0x2e95f9-0x0;var _0x195f81=_0x9f62[_0x2e95f9];return _0x195f81;};'use strict';var _=require('lodash');var util=require(_0x29f6('0x0'));var logger=require('../../config/logger')(_0x29f6('0x1'));var moment=require(_0x29f6('0x2'));var BPromise=require(_0x29f6('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x29f6('0x4'));var config=require(_0x29f6('0x5'));var attributes=require(_0x29f6('0x6'));module[_0x29f6('0x7')]=function(_0x595034,_0xf66137){return _0x595034[_0x29f6('0x8')](_0x29f6('0x9'),attributes,{'tableName':_0x29f6('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa9e0=['../../config/environment','./cmHopperBlack.attributes','exports','define','CmHopperBlack','lodash','util','../../config/logger','bluebird','path','rimraf'];(function(_0x5c50e8,_0x5a265a){var _0x50e9d9=function(_0x3fed46){while(--_0x3fed46){_0x5c50e8['push'](_0x5c50e8['shift']());}};_0x50e9d9(++_0x5a265a);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2b4411,_0x2625ed){_0x2b4411=_0x2b4411-0x0;var _0x8e41ef=_0xa9e0[_0x2b4411];return _0x8e41ef;};'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':'cm_hopper_black','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b406dca..a684548 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x531f=['message','info','catch','CmHopperBlack','findAll','options','raw','attributes','limit','include','model','map','GetCmHopperBlack','stringify','UpdateCmHopperBlack','body','where','destroy','DestroyCmHopperBlack','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','request\x20sent','debug','CmHopperBlack,\x20%s,\x20%s,\x20%s','error','CmHopperBlack,\x20%s,\x20%s'];(function(_0x1ac595,_0x5d2081){var _0x455fff=function(_0x3043ee){while(--_0x3043ee){_0x1ac595['push'](_0x1ac595['shift']());}};_0x455fff(++_0x5d2081);}(_0x531f,0x11d));var _0xf531=function(_0x42bbd8,_0x32af99){_0x42bbd8=_0x42bbd8-0x0;var _0x2d4a1c=_0x531f[_0x42bbd8];return _0x2d4a1c;};'use strict';var _=require(_0xf531('0x0'));var util=require(_0xf531('0x1'));var moment=require(_0xf531('0x2'));var BPromise=require(_0xf531('0x3'));var rs=require(_0xf531('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xf531('0x5'))['db'];var utils=require(_0xf531('0x6'));var logger=require(_0xf531('0x7'))(_0xf531('0x8'));var config=require(_0xf531('0x9'));var jayson=require(_0xf531('0xa'));var client=jayson[_0xf531('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x5ad5a5,_0x5c71dc,_0xd4f940){return new BPromise(function(_0xbd755f,_0x462fe5){return client[_0xf531('0xc')](_0x5ad5a5,_0xd4f940)[_0xf531('0xd')](function(_0x1ba69d){logger['info']('CmHopperBlack,\x20%s,\x20%s',_0x5c71dc,_0xf531('0xe'));logger[_0xf531('0xf')](_0xf531('0x10'),_0x5c71dc,'request\x20sent',JSON['stringify'](_0x1ba69d));if(_0x1ba69d[_0xf531('0x11')]){if(_0x1ba69d['error']['code']===0x1f4){logger['error'](_0xf531('0x12'),_0x5c71dc,_0x1ba69d['error'][_0xf531('0x13')]);return _0x462fe5(_0x1ba69d[_0xf531('0x11')][_0xf531('0x13')]);}logger['error']('CmHopperBlack,\x20%s,\x20%s',_0x5c71dc,_0x1ba69d[_0xf531('0x11')][_0xf531('0x13')]);return _0xbd755f(_0x1ba69d[_0xf531('0x11')]['message']);}else{logger[_0xf531('0x14')](_0xf531('0x12'),_0x5c71dc,_0xf531('0xe'));_0xbd755f(_0x1ba69d['result']['message']);}})[_0xf531('0x15')](function(_0x33c0c6){logger[_0xf531('0x11')](_0xf531('0x12'),_0x5c71dc,_0x33c0c6);_0x462fe5(_0x33c0c6);});});}exports['GetCmHopperBlack']=function(_0x321cbf){var _0x3ee697=this;return new Promise(function(_0x227593,_0x9dd398){return db[_0xf531('0x16')][_0xf531('0x17')]({'raw':_0x321cbf[_0xf531('0x18')]?_0x321cbf[_0xf531('0x18')][_0xf531('0x19')]===undefined?!![]:![]:!![],'where':_0x321cbf[_0xf531('0x18')]?_0x321cbf['options']['where']||null:null,'attributes':_0x321cbf[_0xf531('0x18')]?_0x321cbf['options'][_0xf531('0x1a')]||null:null,'limit':_0x321cbf[_0xf531('0x18')]?_0x321cbf[_0xf531('0x18')][_0xf531('0x1b')]||null:null,'include':_0x321cbf[_0xf531('0x18')]?_0x321cbf[_0xf531('0x18')][_0xf531('0x1c')]?_['map'](_0x321cbf['options'][_0xf531('0x1c')],function(_0x49b10a){return{'model':db[_0x49b10a[_0xf531('0x1d')]],'as':_0x49b10a['as'],'attributes':_0x49b10a['attributes'],'include':_0x49b10a[_0xf531('0x1c')]?_[_0xf531('0x1e')](_0x49b10a[_0xf531('0x1c')],function(_0x3cae1b){return{'model':db[_0x3cae1b[_0xf531('0x1d')]],'as':_0x3cae1b['as'],'attributes':_0x3cae1b['attributes'],'include':_0x3cae1b[_0xf531('0x1c')]?_[_0xf531('0x1e')](_0x3cae1b[_0xf531('0x1c')],function(_0x6683da){return{'model':db[_0x6683da[_0xf531('0x1d')]],'as':_0x6683da['as'],'attributes':_0x6683da[_0xf531('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xf531('0xd')](function(_0x302b71){logger[_0xf531('0x14')](_0xf531('0x1f'),_0x321cbf);logger[_0xf531('0xf')]('GetCmHopperBlack',_0x321cbf,JSON[_0xf531('0x20')](_0x302b71));_0x227593(_0x302b71);})[_0xf531('0x15')](function(_0x1a5242){logger['error'](_0xf531('0x1f'),_0x1a5242[_0xf531('0x13')],_0x321cbf);_0x9dd398(_0x3ee697[_0xf531('0x11')](0x1f4,_0x1a5242[_0xf531('0x13')]));});});};exports[_0xf531('0x21')]=function(_0x233bda){var _0x3dfa43=this;return new Promise(function(_0x2ef2cd,_0x4188e7){return db[_0xf531('0x16')]['update'](_0x233bda[_0xf531('0x22')],{'raw':_0x233bda[_0xf531('0x18')]?_0x233bda[_0xf531('0x18')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x233bda[_0xf531('0x18')]?_0x233bda[_0xf531('0x18')][_0xf531('0x23')]||null:null,'attributes':_0x233bda[_0xf531('0x18')]?_0x233bda[_0xf531('0x18')][_0xf531('0x1a')]||null:null,'limit':_0x233bda[_0xf531('0x18')]?_0x233bda['options'][_0xf531('0x1b')]||null:null})['then'](function(_0xa0887d){logger[_0xf531('0x14')]('UpdateCmHopperBlack',_0x233bda);logger[_0xf531('0xf')]('UpdateCmHopperBlack',_0x233bda,JSON[_0xf531('0x20')](_0xa0887d));_0x2ef2cd(_0xa0887d);})['catch'](function(_0xe8b4e7){logger[_0xf531('0x11')](_0xf531('0x21'),_0xe8b4e7[_0xf531('0x13')],_0x233bda);_0x4188e7(_0x3dfa43[_0xf531('0x11')](0x1f4,_0xe8b4e7[_0xf531('0x13')]));});});};exports['DestroyCmHopperBlack']=function(_0x3a5b24){var _0x1200d2=this;return new Promise(function(_0x9b0441,_0x12790f){return db[_0xf531('0x16')][_0xf531('0x24')]({'where':_0x3a5b24['options']?_0x3a5b24[_0xf531('0x18')][_0xf531('0x23')]||null:null})[_0xf531('0xd')](function(_0x453273){logger[_0xf531('0x14')]('DestroyCmHopperBlack',_0x3a5b24);logger[_0xf531('0xf')](_0xf531('0x25'),_0x3a5b24,JSON['stringify'](_0x453273));_0x9b0441(_0x453273);})[_0xf531('0x15')](function(_0x4763e9){logger[_0xf531('0x11')]('DestroyCmHopperBlack',_0x4763e9[_0xf531('0x13')],_0x3a5b24);_0x12790f(_0x1200d2[_0xf531('0x11')](0x1f4,_0x4763e9[_0xf531('0x13')]));});});};
\ No newline at end of file
+var _0x7a16=['message','result','catch','GetCmHopperBlack','findAll','options','raw','where','limit','include','map','attributes','model','UpdateCmHopperBlack','CmHopperBlack','body','DestroyCmHopperBlack','destroy','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http','request','then','info','CmHopperBlack,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code'];(function(_0x4491ef,_0x5153d9){var _0x3c72dc=function(_0x4c467d){while(--_0x4c467d){_0x4491ef['push'](_0x4491ef['shift']());}};_0x3c72dc(++_0x5153d9);}(_0x7a16,0x14a));var _0x67a1=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0x7a16[_0x432682];return _0x463d05;};'use strict';var _=require(_0x67a1('0x0'));var util=require(_0x67a1('0x1'));var moment=require(_0x67a1('0x2'));var BPromise=require(_0x67a1('0x3'));var rs=require(_0x67a1('0x4'));var fs=require('fs');var Redis=require(_0x67a1('0x5'));var db=require(_0x67a1('0x6'))['db'];var utils=require(_0x67a1('0x7'));var logger=require(_0x67a1('0x8'))('rpc');var config=require(_0x67a1('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x67a1('0xa')][_0x67a1('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x59470a,_0x4c90ed,_0x515657){return new BPromise(function(_0x43fcda,_0x3de660){return client[_0x67a1('0xc')](_0x59470a,_0x515657)[_0x67a1('0xd')](function(_0x4f308d){logger[_0x67a1('0xe')](_0x67a1('0xf'),_0x4c90ed,_0x67a1('0x10'));logger[_0x67a1('0x11')]('CmHopperBlack,\x20%s,\x20%s,\x20%s',_0x4c90ed,'request\x20sent',JSON[_0x67a1('0x12')](_0x4f308d));if(_0x4f308d[_0x67a1('0x13')]){if(_0x4f308d[_0x67a1('0x13')][_0x67a1('0x14')]===0x1f4){logger[_0x67a1('0x13')](_0x67a1('0xf'),_0x4c90ed,_0x4f308d['error'][_0x67a1('0x15')]);return _0x3de660(_0x4f308d[_0x67a1('0x13')][_0x67a1('0x15')]);}logger[_0x67a1('0x13')](_0x67a1('0xf'),_0x4c90ed,_0x4f308d[_0x67a1('0x13')]['message']);return _0x43fcda(_0x4f308d[_0x67a1('0x13')][_0x67a1('0x15')]);}else{logger['info'](_0x67a1('0xf'),_0x4c90ed,_0x67a1('0x10'));_0x43fcda(_0x4f308d[_0x67a1('0x16')][_0x67a1('0x15')]);}})[_0x67a1('0x17')](function(_0x2e795a){logger[_0x67a1('0x13')]('CmHopperBlack,\x20%s,\x20%s',_0x4c90ed,_0x2e795a);_0x3de660(_0x2e795a);});});}exports[_0x67a1('0x18')]=function(_0x249f79){var _0x3f6c0b=this;return new Promise(function(_0x1ab392,_0x4cb084){return db['CmHopperBlack'][_0x67a1('0x19')]({'raw':_0x249f79['options']?_0x249f79[_0x67a1('0x1a')][_0x67a1('0x1b')]===undefined?!![]:![]:!![],'where':_0x249f79['options']?_0x249f79[_0x67a1('0x1a')][_0x67a1('0x1c')]||null:null,'attributes':_0x249f79[_0x67a1('0x1a')]?_0x249f79[_0x67a1('0x1a')]['attributes']||null:null,'limit':_0x249f79[_0x67a1('0x1a')]?_0x249f79[_0x67a1('0x1a')][_0x67a1('0x1d')]||null:null,'include':_0x249f79[_0x67a1('0x1a')]?_0x249f79['options'][_0x67a1('0x1e')]?_[_0x67a1('0x1f')](_0x249f79[_0x67a1('0x1a')]['include'],function(_0x65b901){return{'model':db[_0x65b901['model']],'as':_0x65b901['as'],'attributes':_0x65b901[_0x67a1('0x20')],'include':_0x65b901[_0x67a1('0x1e')]?_[_0x67a1('0x1f')](_0x65b901['include'],function(_0x34c147){return{'model':db[_0x34c147['model']],'as':_0x34c147['as'],'attributes':_0x34c147['attributes'],'include':_0x34c147[_0x67a1('0x1e')]?_[_0x67a1('0x1f')](_0x34c147[_0x67a1('0x1e')],function(_0x2f40e7){return{'model':db[_0x2f40e7[_0x67a1('0x21')]],'as':_0x2f40e7['as'],'attributes':_0x2f40e7[_0x67a1('0x20')]};}):[]};}):[]};}):[]:[]})[_0x67a1('0xd')](function(_0x27afae){logger['info'](_0x67a1('0x18'),_0x249f79);logger[_0x67a1('0x11')]('GetCmHopperBlack',_0x249f79,JSON[_0x67a1('0x12')](_0x27afae));_0x1ab392(_0x27afae);})[_0x67a1('0x17')](function(_0xf7915e){logger['error'](_0x67a1('0x18'),_0xf7915e[_0x67a1('0x15')],_0x249f79);_0x4cb084(_0x3f6c0b[_0x67a1('0x13')](0x1f4,_0xf7915e['message']));});});};exports[_0x67a1('0x22')]=function(_0x359be4){var _0x458a1f=this;return new Promise(function(_0xf17f52,_0x15397f){return db[_0x67a1('0x23')]['update'](_0x359be4[_0x67a1('0x24')],{'raw':_0x359be4[_0x67a1('0x1a')]?_0x359be4[_0x67a1('0x1a')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x359be4[_0x67a1('0x1a')]?_0x359be4[_0x67a1('0x1a')][_0x67a1('0x1c')]||null:null,'attributes':_0x359be4[_0x67a1('0x1a')]?_0x359be4[_0x67a1('0x1a')][_0x67a1('0x20')]||null:null,'limit':_0x359be4['options']?_0x359be4[_0x67a1('0x1a')][_0x67a1('0x1d')]||null:null})[_0x67a1('0xd')](function(_0x378b09){logger['info'](_0x67a1('0x22'),_0x359be4);logger[_0x67a1('0x11')](_0x67a1('0x22'),_0x359be4,JSON[_0x67a1('0x12')](_0x378b09));_0xf17f52(_0x378b09);})[_0x67a1('0x17')](function(_0x434a7f){logger[_0x67a1('0x13')](_0x67a1('0x22'),_0x434a7f[_0x67a1('0x15')],_0x359be4);_0x15397f(_0x458a1f['error'](0x1f4,_0x434a7f[_0x67a1('0x15')]));});});};exports[_0x67a1('0x25')]=function(_0x2503cc){var _0x2d1169=this;return new Promise(function(_0x13c3ef,_0x3568f5){return db['CmHopperBlack'][_0x67a1('0x26')]({'where':_0x2503cc[_0x67a1('0x1a')]?_0x2503cc[_0x67a1('0x1a')][_0x67a1('0x1c')]||null:null})[_0x67a1('0xd')](function(_0x30158f){logger[_0x67a1('0xe')](_0x67a1('0x25'),_0x2503cc);logger[_0x67a1('0x11')](_0x67a1('0x25'),_0x2503cc,JSON[_0x67a1('0x12')](_0x30158f));_0x13c3ef(_0x30158f);})[_0x67a1('0x17')](function(_0x1bb26f){logger[_0x67a1('0x13')]('DestroyCmHopperBlack',_0x1bb26f[_0x67a1('0x15')],_0x2503cc);_0x3568f5(_0x2d1169[_0x67a1('0x13')](0x1f4,_0x1bb26f[_0x67a1('0x15')]));});});};
\ No newline at end of file
index c767cc3..22bda0c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4156=['exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmHopperBlack.controller','get','isAuthenticated','index','/describe','describe','show','put','/:id','update','destroy'];(function(_0x5e4b85,_0x6cf965){var _0x5cd3cb=function(_0x589c9e){while(--_0x589c9e){_0x5e4b85['push'](_0x5e4b85['shift']());}};_0x5cd3cb(++_0x6cf965);}(_0x4156,0xf1));var _0x6415=function(_0x251cb0,_0xd57cc6){_0x251cb0=_0x251cb0-0x0;var _0x44b122=_0x4156[_0x251cb0];return _0x44b122;};'use strict';var multer=require(_0x6415('0x0'));var util=require(_0x6415('0x1'));var path=require(_0x6415('0x2'));var timeout=require(_0x6415('0x3'));var express=require(_0x6415('0x4'));var router=express['Router']();var auth=require(_0x6415('0x5'));var interaction=require(_0x6415('0x6'));var config=require(_0x6415('0x7'));var controller=require(_0x6415('0x8'));router[_0x6415('0x9')]('/',auth[_0x6415('0xa')](),controller[_0x6415('0xb')]);router['get'](_0x6415('0xc'),auth['isAuthenticated'](),controller[_0x6415('0xd')]);router[_0x6415('0x9')]('/:id',auth[_0x6415('0xa')](),controller[_0x6415('0xe')]);router[_0x6415('0xf')](_0x6415('0x10'),auth['isAuthenticated'](),controller[_0x6415('0x11')]);router['delete']('/:id',auth[_0x6415('0xa')](),controller[_0x6415('0x12')]);module[_0x6415('0x13')]=router;
\ No newline at end of file
+var _0x2dd3=['Router','../../components/auth/service','../../config/environment','./cmHopperBlack.controller','get','isAuthenticated','index','/describe','describe','put','/:id','update','delete','destroy','exports','util','path','connect-timeout','express'];(function(_0x1f2900,_0x51d552){var _0x64bf33=function(_0x51efe4){while(--_0x51efe4){_0x1f2900['push'](_0x1f2900['shift']());}};_0x64bf33(++_0x51d552);}(_0x2dd3,0x6e));var _0x32dd=function(_0xe03cd4,_0x29dd37){_0xe03cd4=_0xe03cd4-0x0;var _0xdd9134=_0x2dd3[_0xe03cd4];return _0xdd9134;};'use strict';var multer=require('multer');var util=require(_0x32dd('0x0'));var path=require(_0x32dd('0x1'));var timeout=require(_0x32dd('0x2'));var express=require(_0x32dd('0x3'));var router=express[_0x32dd('0x4')]();var auth=require(_0x32dd('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x32dd('0x6'));var controller=require(_0x32dd('0x7'));router[_0x32dd('0x8')]('/',auth[_0x32dd('0x9')](),controller[_0x32dd('0xa')]);router[_0x32dd('0x8')](_0x32dd('0xb'),auth[_0x32dd('0x9')](),controller[_0x32dd('0xc')]);router[_0x32dd('0x8')]('/:id',auth[_0x32dd('0x9')](),controller['show']);router[_0x32dd('0xd')](_0x32dd('0xe'),auth['isAuthenticated'](),controller[_0x32dd('0xf')]);router[_0x32dd('0x10')]('/:id',auth[_0x32dd('0x9')](),controller[_0x32dd('0x11')]);module[_0x32dd('0x12')]=router;
\ No newline at end of file
index 9ca9842..1570b6c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9b1a=['STRING','DATE','getDataValue','endtime','setDataValue','followuptime','seconds','dispositionat','BOOLEAN','sequelize','INTEGER'];(function(_0x4de1b5,_0x2a7626){var _0xed55cf=function(_0x5f1115){while(--_0x5f1115){_0x4de1b5['push'](_0x4de1b5['shift']());}};_0xed55cf(++_0x2a7626);}(_0x9b1a,0x169));var _0xa9b1=function(_0x40a825,_0x3bac79){_0x40a825=_0x40a825-0x0;var _0x273a54=_0x9b1a[_0x40a825];return _0x273a54;};'use strict';var Sequelize=require(_0xa9b1('0x0'));var moment=require('moment');module['exports']={'state':{'type':Sequelize[_0xa9b1('0x1')](0x2)},'statedesc':{'type':Sequelize[_0xa9b1('0x2')]},'scheduledat':{'type':Sequelize[_0xa9b1('0x3')]},'countbusyretry':{'type':Sequelize[_0xa9b1('0x1')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0xa9b1('0x1')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0xa9b1('0x1')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0xa9b1('0x1')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0xa9b1('0x2')]},'originatecalleridnum':{'type':Sequelize[_0xa9b1('0x2')]},'originatecalleridname':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0xa9b1('0x2')]},'calleridname':{'type':Sequelize['STRING']},'starttime':{'type':Sequelize[_0xa9b1('0x3')]},'responsetime':{'type':Sequelize[_0xa9b1('0x3')]},'answertime':{'type':Sequelize['DATE']},'droptime':{'type':Sequelize['DATE']},'endtime':{'type':Sequelize[_0xa9b1('0x3')]},'ringtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0xa9b1('0x1')],'defaultValue':0x0},'talktime':{'type':Sequelize[_0xa9b1('0x1')],'defaultValue':0x0},'followuptime':{'type':Sequelize[_0xa9b1('0x1')],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0xa9b1('0x2')]},'campaign':{'type':Sequelize[_0xa9b1('0x2')]},'campaigntype':{'type':Sequelize[_0xa9b1('0x2')]},'membername':{'type':Sequelize['STRING']},'reason':{'type':Sequelize[_0xa9b1('0x2')]},'disposition':{'type':Sequelize[_0xa9b1('0x2')]},'dispositionat':{'type':Sequelize[_0xa9b1('0x3')],'set':function(_0x37d8d4){var _0x5a6097=this[_0xa9b1('0x4')](_0xa9b1('0x5'));if(_0x5a6097&&_0x37d8d4){this[_0xa9b1('0x6')](_0xa9b1('0x7'),moment(_0x37d8d4)['diff'](moment(_0x5a6097),_0xa9b1('0x8')));}return this[_0xa9b1('0x6')](_0xa9b1('0x9'),_0x37d8d4);}},'amd':{'type':Sequelize[_0xa9b1('0xa')],'defaultValue':![]},'fax':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'blacklist':{'type':Sequelize[_0xa9b1('0xa')],'defaultValue':![]},'rescheduled':{'type':Sequelize[_0xa9b1('0xa')],'defaultValue':![]},'rescheduledat':{'type':Sequelize['DATE']},'callback':{'type':Sequelize[_0xa9b1('0xa')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize['STRING'],'defaultValue':null},'callbackat':{'type':Sequelize[_0xa9b1('0x3')]},'deleted':{'type':Sequelize[_0xa9b1('0x2')],'defaultValue':null},'deletedat':{'type':Sequelize['DATE']},'recallme':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agiafterat':{'type':Sequelize[_0xa9b1('0x3')]}};
\ No newline at end of file
+var _0xebeb=['getDataValue','endtime','setDataValue','followuptime','diff','dispositionat','BOOLEAN','moment','exports','STRING','DATE','INTEGER'];(function(_0x352cbd,_0x408b53){var _0x5d19f6=function(_0x35c83c){while(--_0x35c83c){_0x352cbd['push'](_0x352cbd['shift']());}};_0x5d19f6(++_0x408b53);}(_0xebeb,0x193));var _0xbebe=function(_0x35ccc4,_0xf6d7cb){_0x35ccc4=_0x35ccc4-0x0;var _0x3ee40d=_0xebeb[_0x35ccc4];return _0x3ee40d;};'use strict';var Sequelize=require('sequelize');var moment=require(_0xbebe('0x0'));module[_0xbebe('0x1')]={'state':{'type':Sequelize['INTEGER'](0x2)},'statedesc':{'type':Sequelize[_0xbebe('0x2')]},'scheduledat':{'type':Sequelize[_0xbebe('0x3')]},'countbusyretry':{'type':Sequelize[_0xbebe('0x4')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0xbebe('0x4')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0xbebe('0x4')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0xbebe('0x4')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0xbebe('0x2')]},'originatecalleridnum':{'type':Sequelize['STRING']},'originatecalleridname':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0xbebe('0x2')]},'calleridname':{'type':Sequelize[_0xbebe('0x2')]},'starttime':{'type':Sequelize['DATE']},'responsetime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0xbebe('0x3')]},'droptime':{'type':Sequelize[_0xbebe('0x3')]},'endtime':{'type':Sequelize[_0xbebe('0x3')]},'ringtime':{'type':Sequelize[_0xbebe('0x4')],'defaultValue':0x0},'holdtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'talktime':{'type':Sequelize[_0xbebe('0x4')],'defaultValue':0x0},'followuptime':{'type':Sequelize[_0xbebe('0x4')],'defaultValue':0x0},'dropreason':{'type':Sequelize['STRING']},'campaign':{'type':Sequelize['STRING']},'campaigntype':{'type':Sequelize[_0xbebe('0x2')]},'membername':{'type':Sequelize[_0xbebe('0x2')]},'reason':{'type':Sequelize[_0xbebe('0x2')]},'disposition':{'type':Sequelize[_0xbebe('0x2')]},'dispositionat':{'type':Sequelize[_0xbebe('0x3')],'set':function(_0x533ac2){var _0x1cf82f=this[_0xbebe('0x5')](_0xbebe('0x6'));if(_0x1cf82f&&_0x533ac2){this[_0xbebe('0x7')](_0xbebe('0x8'),moment(_0x533ac2)[_0xbebe('0x9')](moment(_0x1cf82f),'seconds'));}return this[_0xbebe('0x7')](_0xbebe('0xa'),_0x533ac2);}},'amd':{'type':Sequelize[_0xbebe('0xb')],'defaultValue':![]},'fax':{'type':Sequelize[_0xbebe('0xb')],'defaultValue':![]},'blacklist':{'type':Sequelize[_0xbebe('0xb')],'defaultValue':![]},'rescheduled':{'type':Sequelize[_0xbebe('0xb')],'defaultValue':![]},'rescheduledat':{'type':Sequelize[_0xbebe('0x3')]},'callback':{'type':Sequelize[_0xbebe('0xb')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0xbebe('0x2')],'defaultValue':null},'callbackat':{'type':Sequelize['DATE']},'deleted':{'type':Sequelize['STRING'],'defaultValue':null},'deletedat':{'type':Sequelize[_0xbebe('0x3')]},'recallme':{'type':Sequelize[_0xbebe('0xb')],'defaultValue':![]},'agiafterat':{'type':Sequelize['DATE']}};
\ No newline at end of file
index 840ebee..f6f557f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d1f=['VIRTUAL','field','filter','merge','include','rows','catch','show','includeAll','options','find','describe','body','uniqueid','findAll','params','sequelize','COUNT','literal','`state`\x20=\x200,\x201,\x20null','noSuchContacts','`state`\x20=\x203,\x201,\x20null','noAnswerContacts','busyContacts','`state`\x20=\x208,\x201,\x20null','congestionContacts','dropContacts','`state`\x20=\x2011\x20,\x201,\x20null','abandonedContacts','`state`\x20=\x2022,\x201,\x20null','reCallContacts','countContactsIvrCampaignHopperFinal','`state`\x20=\x205,\x201,\x20null','`state`\x20=\x2010\x20,\x201,\x20null','`state`\x20=\x2019,\x201,\x20null','answeringMachine','moveContactsQueueCampaignHopperFinal','VoiceQueue','insert','into','fromQuery','phone','scheduledAt','ListId','VoiceQueueId','createdAt','select','ANY_VALUE(calleridnum)','NOW()','ANY_VALUE(ContactId)','ContactId','ANY_VALUE(ListId)','ANY_VALUE(VoiceQueueId)','updatedAt','cm_hopper_final','VoiceQueueId\x20=\x20?','toString','state\x20=\x20?','state','calleridnum\x20IS\x20NOT\x20NULL','calleridnum\x20NOT\x20IN\x20(?)','from','calleridnum','state\x20=\x204','group','Campaign','cm_hopper','CampaignId','CampaignId\x20=\x20?','CmHopper','findOne','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','path','sox','ejs','squel','jsforce','desk.js','to-csv','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','limit','set','Content-Range','apply','update','then','name','index','CmHopperFinal','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','nolimit','sort','where','map','type','key'];(function(_0x3f5d12,_0xb08a4a){var _0xcaef7d=function(_0x540d90){while(--_0x540d90){_0x3f5d12['push'](_0x3f5d12['shift']());}};_0xcaef7d(++_0xb08a4a);}(_0x4d1f,0x141));var _0xf4d1=function(_0x56dd7e,_0x5d7d64){_0x56dd7e=_0x56dd7e-0x0;var _0x5b3585=_0x4d1f[_0x56dd7e];return _0x5b3585;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xf4d1('0x0'));var rimraf=require(_0xf4d1('0x1'));var zipdir=require(_0xf4d1('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xf4d1('0x3'));var moment=require(_0xf4d1('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xf4d1('0x5'));var util=require(_0xf4d1('0x6'));var path=require(_0xf4d1('0x7'));var sox=require(_0xf4d1('0x8'));var csv=require('to-csv');var ejs=require(_0xf4d1('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0xf4d1('0xa'));var crypto=require('crypto');var jsforce=require(_0xf4d1('0xb'));var deskjs=require(_0xf4d1('0xc'));var toCsv=require(_0xf4d1('0xd'));var querystring=require(_0xf4d1('0xe'));var Papa=require(_0xf4d1('0xf'));var Redis=require(_0xf4d1('0x10'));var authService=require(_0xf4d1('0x11'));var qs=require(_0xf4d1('0x12'));var hardwareService=require(_0xf4d1('0x13'));var logger=require(_0xf4d1('0x14'))('api');var utils=require(_0xf4d1('0x15'));var config=require(_0xf4d1('0x16'));var db=require(_0xf4d1('0x17'))['db'];function respondWithStatusCode(_0x2889eb,_0x180a7c){_0x180a7c=_0x180a7c||0xcc;return function(_0x1d1d7a){if(_0x1d1d7a){return _0x2889eb[_0xf4d1('0x18')](_0x180a7c);}return _0x2889eb[_0xf4d1('0x19')](_0x180a7c)[_0xf4d1('0x1a')]();};}function respondWithResult(_0x18a9d5,_0xf67fd0){_0xf67fd0=_0xf67fd0||0xc8;return function(_0x11acff){if(_0x11acff){return _0x18a9d5[_0xf4d1('0x19')](_0xf67fd0)[_0xf4d1('0x1b')](_0x11acff);}};}function respondWithFilteredResult(_0x2c9f68,_0x5807a7){return function(_0x2c2faf){if(_0x2c2faf){var _0x241fd7=_0x2c2faf[_0xf4d1('0x1c')],_0xb35840=_0x5807a7[_0xf4d1('0x1d')],_0x5e1127=_0x5807a7[_0xf4d1('0x1d')]+_0x5807a7[_0xf4d1('0x1e')],_0x57d3c1;if(_0x5e1127>=_0x241fd7){_0x5e1127=_0x241fd7;_0x57d3c1=0xc8;}else{_0x57d3c1=0xce;}_0x2c9f68[_0xf4d1('0x19')](_0x57d3c1);return _0x2c9f68[_0xf4d1('0x1f')](_0xf4d1('0x20'),_0xb35840+'-'+_0x5e1127+'/'+_0x241fd7)[_0xf4d1('0x1b')](_0x2c2faf);}return null;};}function patchUpdates(_0x192ec6){return function(_0x423cb4){try{jsonpatch[_0xf4d1('0x21')](_0x423cb4,_0x192ec6,!![]);}catch(_0x18fcce){return BPromise['reject'](_0x18fcce);}return _0x423cb4['save']();};}function saveUpdates(_0x474d89,_0x43a012){return function(_0x54be94){if(_0x54be94){return _0x54be94[_0xf4d1('0x22')](_0x474d89)[_0xf4d1('0x23')](function(_0x458e04){return _0x458e04;});}return null;};}function removeEntity(_0xe224f7,_0x557d12){return function(_0x525055){if(_0x525055){return _0x525055['destroy']()[_0xf4d1('0x23')](function(){_0xe224f7[_0xf4d1('0x19')](0xcc)[_0xf4d1('0x1a')]();});}};}function handleEntityNotFound(_0x4a47ad,_0x24e390){return function(_0x2ff36f){if(!_0x2ff36f){_0x4a47ad[_0xf4d1('0x18')](0x194);}return _0x2ff36f;};}function handleError(_0x280298,_0x3d352b){_0x3d352b=_0x3d352b||0x1f4;return function(_0x3e554c){logger['error'](_0x3e554c['stack']);if(_0x3e554c['name']){delete _0x3e554c[_0xf4d1('0x24')];}_0x280298[_0xf4d1('0x19')](_0x3d352b)['send'](_0x3e554c);};}exports[_0xf4d1('0x25')]=function(_0x470ae4,_0x1cb16c){var _0xc4ca30={},_0x5c1d2f={},_0x552efb={'count':0x0,'rows':[]};var _0x3c9bdc=db[_0xf4d1('0x26')][_0xf4d1('0x27')];_0x5c1d2f['model']=_[_0xf4d1('0x28')](_0x3c9bdc);_0x5c1d2f[_0xf4d1('0x29')]=_[_0xf4d1('0x28')](_0x470ae4[_0xf4d1('0x29')]);_0x5c1d2f[_0xf4d1('0x2a')]=_[_0xf4d1('0x2b')](_0x5c1d2f[_0xf4d1('0x2c')],_0x5c1d2f['query']);_0xc4ca30[_0xf4d1('0x2d')]=_[_0xf4d1('0x2b')](_0x5c1d2f[_0xf4d1('0x2c')],qs[_0xf4d1('0x2e')](_0x470ae4[_0xf4d1('0x29')][_0xf4d1('0x2e')]));_0xc4ca30['attributes']=_0xc4ca30[_0xf4d1('0x2d')][_0xf4d1('0x2f')]?_0xc4ca30['attributes']:_0x5c1d2f[_0xf4d1('0x2c')];if(!_0x470ae4[_0xf4d1('0x29')]['hasOwnProperty'](_0xf4d1('0x30'))){_0xc4ca30[_0xf4d1('0x1e')]=qs['limit'](_0x470ae4[_0xf4d1('0x29')][_0xf4d1('0x1e')]);_0xc4ca30['offset']=qs['offset'](_0x470ae4[_0xf4d1('0x29')][_0xf4d1('0x1d')]);}_0xc4ca30['order']=qs[_0xf4d1('0x31')](_0x470ae4[_0xf4d1('0x29')]['sort']);_0xc4ca30[_0xf4d1('0x32')]=qs['filters'](_['pick'](_0x470ae4[_0xf4d1('0x29')],_0x5c1d2f[_0xf4d1('0x2a')]));if(_0x470ae4[_0xf4d1('0x29')]['filter']){_0xc4ca30[_0xf4d1('0x32')]=_['merge'](_0xc4ca30[_0xf4d1('0x32')],{'$or':_[_0xf4d1('0x33')](_0x3c9bdc,function(_0x526d62){if(_0x526d62[_0xf4d1('0x34')][_0xf4d1('0x35')]!==_0xf4d1('0x36')){var _0x529bb8={};_0x529bb8[_0x526d62[_0xf4d1('0x37')]]={'$like':'%'+_0x470ae4[_0xf4d1('0x29')][_0xf4d1('0x38')]+'%'};return _0x529bb8;}})});}_0xc4ca30=_[_0xf4d1('0x39')]({},_0xc4ca30,_0x470ae4['options']);var _0x7a9c44={'where':_0xc4ca30[_0xf4d1('0x32')]};return db[_0xf4d1('0x26')][_0xf4d1('0x1c')](_0x7a9c44)[_0xf4d1('0x23')](function(_0x223b24){_0x552efb[_0xf4d1('0x1c')]=_0x223b24;if(_0x470ae4[_0xf4d1('0x29')]['includeAll']){_0xc4ca30[_0xf4d1('0x3a')]=[{'all':!![]}];}return db[_0xf4d1('0x26')]['findAll'](_0xc4ca30);})[_0xf4d1('0x23')](function(_0x5c2b98){_0x552efb[_0xf4d1('0x3b')]=_0x5c2b98;return _0x552efb;})[_0xf4d1('0x23')](respondWithFilteredResult(_0x1cb16c,_0xc4ca30))[_0xf4d1('0x3c')](handleError(_0x1cb16c,null));};exports[_0xf4d1('0x3d')]=function(_0x344a89,_0x558c1e){var _0x12f133={'raw':!![],'where':{'id':_0x344a89['params']['id']}},_0x3e2108={};_0x3e2108[_0xf4d1('0x2c')]=_['keys'](db['CmHopperFinal']['rawAttributes']);_0x3e2108['query']=_['keys'](_0x344a89['query']);_0x3e2108[_0xf4d1('0x2a')]=_[_0xf4d1('0x2b')](_0x3e2108['model'],_0x3e2108[_0xf4d1('0x29')]);_0x12f133['attributes']=_['intersection'](_0x3e2108['model'],qs[_0xf4d1('0x2e')](_0x344a89[_0xf4d1('0x29')][_0xf4d1('0x2e')]));_0x12f133[_0xf4d1('0x2d')]=_0x12f133[_0xf4d1('0x2d')][_0xf4d1('0x2f')]?_0x12f133[_0xf4d1('0x2d')]:_0x3e2108[_0xf4d1('0x2c')];if(_0x344a89['query'][_0xf4d1('0x3e')]){_0x12f133[_0xf4d1('0x3a')]=[{'all':!![]}];}_0x12f133=_['merge']({},_0x12f133,_0x344a89[_0xf4d1('0x3f')]);return db[_0xf4d1('0x26')][_0xf4d1('0x40')](_0x12f133)[_0xf4d1('0x23')](handleEntityNotFound(_0x558c1e,null))[_0xf4d1('0x23')](respondWithResult(_0x558c1e,null))['catch'](handleError(_0x558c1e,null));};exports['describe']=function(_0x1a6316,_0x4e79f4){return db[_0xf4d1('0x26')][_0xf4d1('0x41')]()[_0xf4d1('0x23')](respondWithResult(_0x4e79f4,null))[_0xf4d1('0x3c')](handleError(_0x4e79f4,null));};exports[_0xf4d1('0x22')]=function(_0x35f330,_0x15a865){if(_0x35f330[_0xf4d1('0x42')][_0xf4d1('0x43')]){delete _0x35f330[_0xf4d1('0x42')][_0xf4d1('0x43')];}return db[_0xf4d1('0x26')][_0xf4d1('0x40')]({'where':{'uniqueid':_0x35f330['params']['id']}})['then'](handleEntityNotFound(_0x15a865,null))['then'](saveUpdates(_0x35f330[_0xf4d1('0x42')],null))[_0xf4d1('0x23')](respondWithResult(_0x15a865,null))[_0xf4d1('0x3c')](handleError(_0x15a865,null));};exports['countContactsQueueCampaignHopperFinal']=function(_0x5aa731,_0x8cd539,_0x9b798d){return db[_0xf4d1('0x26')][_0xf4d1('0x44')]({'raw':![],'where':{'VoiceQueueId':_0x5aa731[_0xf4d1('0x45')]['id']},'attributes':[[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db['sequelize']['fn']('IF',db[_0xf4d1('0x46')][_0xf4d1('0x48')](_0xf4d1('0x49')))),_0xf4d1('0x4a')],[db[_0xf4d1('0x46')]['fn']('COUNT',db[_0xf4d1('0x46')]['fn']('IF',db[_0xf4d1('0x46')][_0xf4d1('0x48')](_0xf4d1('0x4b')))),_0xf4d1('0x4c')],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db[_0xf4d1('0x46')]['fn']('IF',db[_0xf4d1('0x46')][_0xf4d1('0x48')]('`state`\x20=\x205,\x201,\x20null'))),_0xf4d1('0x4d')],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db[_0xf4d1('0x46')]['fn']('IF',db['sequelize'][_0xf4d1('0x48')](_0xf4d1('0x4e')))),_0xf4d1('0x4f')],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db['sequelize']['fn']('IF',db[_0xf4d1('0x46')]['literal']('`state`\x20=\x2010\x20,\x201,\x20null'))),_0xf4d1('0x50')],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db[_0xf4d1('0x46')]['fn']('IF',db['sequelize'][_0xf4d1('0x48')](_0xf4d1('0x51')))),_0xf4d1('0x52')],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db[_0xf4d1('0x46')]['fn']('IF',db[_0xf4d1('0x46')][_0xf4d1('0x48')](_0xf4d1('0x53')))),_0xf4d1('0x54')],[db[_0xf4d1('0x46')]['fn']('COUNT',db[_0xf4d1('0x46')]['fn']('IF',db[_0xf4d1('0x46')][_0xf4d1('0x48')]('`state`\x20=\x2019,\x201,\x20null'))),'answeringMachine']]})[_0xf4d1('0x23')](handleEntityNotFound(_0x8cd539,null))[_0xf4d1('0x23')](respondWithResult(_0x8cd539,null))[_0xf4d1('0x3c')](handleError(_0x8cd539,null));};exports[_0xf4d1('0x55')]=function(_0x4ee006,_0x1f8a6c,_0x28b687){return db[_0xf4d1('0x26')]['findAll']({'raw':![],'where':{'CampaignId':_0x4ee006['params']['id']},'attributes':[[db['sequelize']['fn'](_0xf4d1('0x47'),db[_0xf4d1('0x46')]['fn']('IF',db[_0xf4d1('0x46')][_0xf4d1('0x48')](_0xf4d1('0x49')))),'noSuchContacts'],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db[_0xf4d1('0x46')]['fn']('IF',db[_0xf4d1('0x46')]['literal'](_0xf4d1('0x4b')))),_0xf4d1('0x4c')],[db[_0xf4d1('0x46')]['fn']('COUNT',db[_0xf4d1('0x46')]['fn']('IF',db[_0xf4d1('0x46')][_0xf4d1('0x48')](_0xf4d1('0x56')))),_0xf4d1('0x4d')],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db[_0xf4d1('0x46')]['fn']('IF',db[_0xf4d1('0x46')][_0xf4d1('0x48')](_0xf4d1('0x4e')))),_0xf4d1('0x4f')],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db[_0xf4d1('0x46')]['fn']('IF',db[_0xf4d1('0x46')][_0xf4d1('0x48')](_0xf4d1('0x57')))),_0xf4d1('0x50')],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db[_0xf4d1('0x46')]['fn']('IF',db['sequelize'][_0xf4d1('0x48')]('`state`\x20=\x2011\x20,\x201,\x20null'))),_0xf4d1('0x52')],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db[_0xf4d1('0x46')]['fn']('IF',db['sequelize'][_0xf4d1('0x48')](_0xf4d1('0x53')))),_0xf4d1('0x54')],[db[_0xf4d1('0x46')]['fn'](_0xf4d1('0x47'),db['sequelize']['fn']('IF',db[_0xf4d1('0x46')][_0xf4d1('0x48')](_0xf4d1('0x58')))),_0xf4d1('0x59')]]})[_0xf4d1('0x23')](handleEntityNotFound(_0x1f8a6c,null))['then'](respondWithResult(_0x1f8a6c,null))[_0xf4d1('0x3c')](handleError(_0x1f8a6c,null));};exports[_0xf4d1('0x5a')]=function(_0x2b6fe2,_0x20bd22,_0x51bb32){return db[_0xf4d1('0x5b')][_0xf4d1('0x40')]({'where':{'id':_0x2b6fe2[_0xf4d1('0x45')]['id']}})[_0xf4d1('0x23')](handleEntityNotFound(_0x20bd22,null))[_0xf4d1('0x23')](function(_0x35b8fa){var _0x171f05;if(_0x35b8fa){_0x171f05=squel[_0xf4d1('0x5c')]()[_0xf4d1('0x5d')]('cm_hopper')[_0xf4d1('0x5e')]([_0xf4d1('0x5f'),_0xf4d1('0x60'),'ContactId',_0xf4d1('0x61'),_0xf4d1('0x62'),_0xf4d1('0x63'),'updatedAt'],squel[_0xf4d1('0x64')]()[_0xf4d1('0x37')](_0xf4d1('0x65'),_0xf4d1('0x5f'))['field'](_0xf4d1('0x66'),_0xf4d1('0x60'))['field'](_0xf4d1('0x67'),_0xf4d1('0x68'))[_0xf4d1('0x37')](_0xf4d1('0x69'),'ListId')[_0xf4d1('0x37')](_0xf4d1('0x6a'),_0xf4d1('0x62'))[_0xf4d1('0x37')]('NOW()','createdAt')[_0xf4d1('0x37')](_0xf4d1('0x66'),_0xf4d1('0x6b'))['from'](_0xf4d1('0x6c'))[_0xf4d1('0x32')](_0xf4d1('0x6d'),_0x2b6fe2[_0xf4d1('0x45')]['id'][_0xf4d1('0x6e')]())['where'](_0xf4d1('0x6f'),_0x2b6fe2[_0xf4d1('0x42')][_0xf4d1('0x70')][_0xf4d1('0x6e')]())['where'](_0xf4d1('0x71'))[_0xf4d1('0x32')](_0xf4d1('0x72'),squel[_0xf4d1('0x64')]()[_0xf4d1('0x37')](_0xf4d1('0x5f'))[_0xf4d1('0x73')]('cm_hopper')['where'](_0xf4d1('0x6d'),_0x2b6fe2['params']['id']['toString']()))[_0xf4d1('0x32')]('calleridnum\x20NOT\x20IN\x20(?)',squel['select']()['field'](_0xf4d1('0x74'))[_0xf4d1('0x73')](_0xf4d1('0x6c'))[_0xf4d1('0x32')](_0xf4d1('0x6d'),_0x2b6fe2[_0xf4d1('0x45')]['id'][_0xf4d1('0x6e')]())[_0xf4d1('0x32')](_0xf4d1('0x75')))[_0xf4d1('0x76')](_0xf4d1('0x68')))[_0xf4d1('0x6e')]();return db['sequelize']['query'](_0x171f05);}return[];})[_0xf4d1('0x23')](respondWithResult(_0x20bd22,null))[_0xf4d1('0x3c')](handleError(_0x20bd22,null));};exports['moveContactsIvrCampaignHopperFinal']=function(_0x3f265e,_0x5cbde9,_0x3befc0){return db[_0xf4d1('0x77')][_0xf4d1('0x40')]({'where':{'id':_0x3f265e['params']['id']}})[_0xf4d1('0x23')](handleEntityNotFound(_0x5cbde9,null))['then'](function(_0x37509e){var _0x1e018d;if(_0x37509e){_0x1e018d=squel[_0xf4d1('0x5c')]()[_0xf4d1('0x5d')](_0xf4d1('0x78'))[_0xf4d1('0x5e')]([_0xf4d1('0x5f'),_0xf4d1('0x60'),_0xf4d1('0x68'),_0xf4d1('0x61'),_0xf4d1('0x79'),_0xf4d1('0x63'),_0xf4d1('0x6b')],squel[_0xf4d1('0x64')]()[_0xf4d1('0x37')]('ANY_VALUE(calleridnum)',_0xf4d1('0x5f'))[_0xf4d1('0x37')](_0xf4d1('0x66'),_0xf4d1('0x60'))[_0xf4d1('0x37')]('ANY_VALUE(ContactId)',_0xf4d1('0x68'))[_0xf4d1('0x37')](_0xf4d1('0x69'),_0xf4d1('0x61'))[_0xf4d1('0x37')]('ANY_VALUE(CampaignId)',_0xf4d1('0x79'))['field'](_0xf4d1('0x66'),_0xf4d1('0x63'))['field'](_0xf4d1('0x66'),_0xf4d1('0x6b'))[_0xf4d1('0x73')](_0xf4d1('0x6c'))[_0xf4d1('0x32')](_0xf4d1('0x7a'),_0x3f265e['params']['id'][_0xf4d1('0x6e')]())['where'](_0xf4d1('0x6f'),_0x3f265e[_0xf4d1('0x42')]['state'][_0xf4d1('0x6e')]())[_0xf4d1('0x32')](_0xf4d1('0x71'))[_0xf4d1('0x32')](_0xf4d1('0x72'),squel[_0xf4d1('0x64')]()[_0xf4d1('0x37')](_0xf4d1('0x5f'))[_0xf4d1('0x73')]('cm_hopper')[_0xf4d1('0x32')](_0xf4d1('0x7a'),_0x3f265e['params']['id']['toString']()))[_0xf4d1('0x32')](_0xf4d1('0x72'),squel[_0xf4d1('0x64')]()[_0xf4d1('0x37')](_0xf4d1('0x74'))['from'](_0xf4d1('0x6c'))[_0xf4d1('0x32')](_0xf4d1('0x7a'),_0x3f265e[_0xf4d1('0x45')]['id'][_0xf4d1('0x6e')]())[_0xf4d1('0x32')](_0xf4d1('0x75')))['group'](_0xf4d1('0x68')))[_0xf4d1('0x6e')]();return db[_0xf4d1('0x46')][_0xf4d1('0x29')](_0x1e018d);}return[];})[_0xf4d1('0x23')](respondWithResult(_0x5cbde9,null))['catch'](handleError(_0x5cbde9,null));};exports['checkContactHopper']=function(_0x1591f5,_0x332f50,_0x4990cb){return db[_0xf4d1('0x7b')][_0xf4d1('0x7c')]({'where':{'VoiceQueueId':_0x1591f5[_0xf4d1('0x42')][_0xf4d1('0x62')],'CampaignId':_0x1591f5[_0xf4d1('0x42')]['CampaignId'],'ContactId':_0x1591f5[_0xf4d1('0x42')][_0xf4d1('0x68')]}})['then'](handleEntityNotFound(_0x332f50,null))['then'](function(_0x454545){if(_0x454545){return _0x454545;}return null;})['then'](respondWithResult(_0x332f50,null))[_0xf4d1('0x3c')](handleError(_0x332f50,null));};
\ No newline at end of file
+var _0x9d81=['merge','describe','body','uniqueid','countContactsQueueCampaignHopperFinal','sequelize','COUNT','literal','`state`\x20=\x200,\x201,\x20null','noSuchContacts','`state`\x20=\x203,\x201,\x20null','noAnswerContacts','`state`\x20=\x205,\x201,\x20null','busyContacts','`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','answeringMachine','countContactsIvrCampaignHopperFinal','`state`\x20=\x2019,\x201,\x20null','moveContactsQueueCampaignHopperFinal','VoiceQueue','find','insert','cm_hopper','scheduledAt','ContactId','ListId','VoiceQueueId','createdAt','select','field','phone','NOW()','ANY_VALUE(ContactId)','ANY_VALUE(ListId)','ANY_VALUE(VoiceQueueId)','updatedAt','from','cm_hopper_final','VoiceQueueId\x20=\x20?','state\x20=\x20?','state','toString','calleridnum\x20IS\x20NOT\x20NULL','calleridnum\x20NOT\x20IN\x20(?)','calleridnum','state\x20=\x204','moveContactsIvrCampaignHopperFinal','into','fromQuery','ANY_VALUE(calleridnum)','ANY_VALUE(CampaignId)','CampaignId','CampaignId\x20=\x20?','group','CmHopper','eml-format','rimraf','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','error','stack','name','send','index','CmHopperFinal','rawAttributes','model','keys','query','filters','intersection','fields','attributes','nolimit','sort','where','pick','filter','map','type','key','options','findAll','catch','show','params','includeAll'];(function(_0x32b33b,_0x22d81a){var _0x31eb5a=function(_0x2034e5){while(--_0x2034e5){_0x32b33b['push'](_0x32b33b['shift']());}};_0x31eb5a(++_0x22d81a);}(_0x9d81,0x13e));var _0x19d8=function(_0x2c91e9,_0x2fb965){_0x2c91e9=_0x2c91e9-0x0;var _0x13f0ff=_0x9d81[_0x2c91e9];return _0x13f0ff;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x19d8('0x0'));var rimraf=require(_0x19d8('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x19d8('0x2'));var rp=require('request-promise');var moment=require(_0x19d8('0x3'));var BPromise=require(_0x19d8('0x4'));var Mustache=require(_0x19d8('0x5'));var util=require(_0x19d8('0x6'));var path=require(_0x19d8('0x7'));var sox=require(_0x19d8('0x8'));var csv=require(_0x19d8('0x9'));var ejs=require(_0x19d8('0xa'));var fs=require('fs');var _=require(_0x19d8('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x19d8('0xc'));var deskjs=require(_0x19d8('0xd'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x19d8('0xe'));var Redis=require(_0x19d8('0xf'));var authService=require(_0x19d8('0x10'));var qs=require(_0x19d8('0x11'));var hardwareService=require(_0x19d8('0x12'));var logger=require(_0x19d8('0x13'))('api');var utils=require(_0x19d8('0x14'));var config=require(_0x19d8('0x15'));var db=require(_0x19d8('0x16'))['db'];function respondWithStatusCode(_0x15052b,_0x11daeb){_0x11daeb=_0x11daeb||0xcc;return function(_0x4c420a){if(_0x4c420a){return _0x15052b[_0x19d8('0x17')](_0x11daeb);}return _0x15052b[_0x19d8('0x18')](_0x11daeb)[_0x19d8('0x19')]();};}function respondWithResult(_0x13cbf3,_0x4b9dfb){_0x4b9dfb=_0x4b9dfb||0xc8;return function(_0x3c2b81){if(_0x3c2b81){return _0x13cbf3[_0x19d8('0x18')](_0x4b9dfb)[_0x19d8('0x1a')](_0x3c2b81);}};}function respondWithFilteredResult(_0x3e0358,_0x28104f){return function(_0x1c8c23){if(_0x1c8c23){var _0x4a8544=_0x1c8c23[_0x19d8('0x1b')],_0x440b8b=_0x28104f[_0x19d8('0x1c')],_0x387229=_0x28104f['offset']+_0x28104f[_0x19d8('0x1d')],_0x5b054b;if(_0x387229>=_0x4a8544){_0x387229=_0x4a8544;_0x5b054b=0xc8;}else{_0x5b054b=0xce;}_0x3e0358['status'](_0x5b054b);return _0x3e0358[_0x19d8('0x1e')](_0x19d8('0x1f'),_0x440b8b+'-'+_0x387229+'/'+_0x4a8544)[_0x19d8('0x1a')](_0x1c8c23);}return null;};}function patchUpdates(_0x4ec58f){return function(_0x229122){try{jsonpatch[_0x19d8('0x20')](_0x229122,_0x4ec58f,!![]);}catch(_0x1ef9fc){return BPromise[_0x19d8('0x21')](_0x1ef9fc);}return _0x229122[_0x19d8('0x22')]();};}function saveUpdates(_0x3ba678,_0x419484){return function(_0x25cc16){if(_0x25cc16){return _0x25cc16[_0x19d8('0x23')](_0x3ba678)['then'](function(_0x5eb2cb){return _0x5eb2cb;});}return null;};}function removeEntity(_0x40cf2f,_0x59a1d4){return function(_0x2e61b3){if(_0x2e61b3){return _0x2e61b3[_0x19d8('0x24')]()[_0x19d8('0x25')](function(){_0x40cf2f['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x6ed7ef,_0x33dfcd){return function(_0x425a07){if(!_0x425a07){_0x6ed7ef[_0x19d8('0x17')](0x194);}return _0x425a07;};}function handleError(_0xa7e69d,_0x2efbdc){_0x2efbdc=_0x2efbdc||0x1f4;return function(_0x5a9fbf){logger[_0x19d8('0x26')](_0x5a9fbf[_0x19d8('0x27')]);if(_0x5a9fbf['name']){delete _0x5a9fbf[_0x19d8('0x28')];}_0xa7e69d[_0x19d8('0x18')](_0x2efbdc)[_0x19d8('0x29')](_0x5a9fbf);};}exports[_0x19d8('0x2a')]=function(_0x1ffe24,_0x280170){var _0x280eb3={},_0x2c9e28={},_0x206655={'count':0x0,'rows':[]};var _0x5d157a=db[_0x19d8('0x2b')][_0x19d8('0x2c')];_0x2c9e28[_0x19d8('0x2d')]=_[_0x19d8('0x2e')](_0x5d157a);_0x2c9e28['query']=_[_0x19d8('0x2e')](_0x1ffe24[_0x19d8('0x2f')]);_0x2c9e28[_0x19d8('0x30')]=_['intersection'](_0x2c9e28[_0x19d8('0x2d')],_0x2c9e28['query']);_0x280eb3['attributes']=_[_0x19d8('0x31')](_0x2c9e28[_0x19d8('0x2d')],qs[_0x19d8('0x32')](_0x1ffe24[_0x19d8('0x2f')][_0x19d8('0x32')]));_0x280eb3[_0x19d8('0x33')]=_0x280eb3[_0x19d8('0x33')]['length']?_0x280eb3[_0x19d8('0x33')]:_0x2c9e28['model'];if(!_0x1ffe24['query']['hasOwnProperty'](_0x19d8('0x34'))){_0x280eb3[_0x19d8('0x1d')]=qs[_0x19d8('0x1d')](_0x1ffe24[_0x19d8('0x2f')][_0x19d8('0x1d')]);_0x280eb3[_0x19d8('0x1c')]=qs[_0x19d8('0x1c')](_0x1ffe24[_0x19d8('0x2f')]['offset']);}_0x280eb3['order']=qs[_0x19d8('0x35')](_0x1ffe24[_0x19d8('0x2f')][_0x19d8('0x35')]);_0x280eb3[_0x19d8('0x36')]=qs['filters'](_[_0x19d8('0x37')](_0x1ffe24['query'],_0x2c9e28[_0x19d8('0x30')]));if(_0x1ffe24[_0x19d8('0x2f')][_0x19d8('0x38')]){_0x280eb3[_0x19d8('0x36')]=_['merge'](_0x280eb3[_0x19d8('0x36')],{'$or':_[_0x19d8('0x39')](_0x5d157a,function(_0x3ea922){if(_0x3ea922[_0x19d8('0x3a')][_0x19d8('0x3b')]!=='VIRTUAL'){var _0x32153f={};_0x32153f[_0x3ea922['field']]={'$like':'%'+_0x1ffe24[_0x19d8('0x2f')][_0x19d8('0x38')]+'%'};return _0x32153f;}})});}_0x280eb3=_['merge']({},_0x280eb3,_0x1ffe24[_0x19d8('0x3c')]);var _0xe843d6={'where':_0x280eb3['where']};return db['CmHopperFinal']['count'](_0xe843d6)[_0x19d8('0x25')](function(_0x577a97){_0x206655[_0x19d8('0x1b')]=_0x577a97;if(_0x1ffe24[_0x19d8('0x2f')]['includeAll']){_0x280eb3['include']=[{'all':!![]}];}return db[_0x19d8('0x2b')][_0x19d8('0x3d')](_0x280eb3);})[_0x19d8('0x25')](function(_0x53ffbe){_0x206655['rows']=_0x53ffbe;return _0x206655;})['then'](respondWithFilteredResult(_0x280170,_0x280eb3))[_0x19d8('0x3e')](handleError(_0x280170,null));};exports[_0x19d8('0x3f')]=function(_0x2e2fa9,_0x5cd07e){var _0x49f76d={'raw':!![],'where':{'id':_0x2e2fa9[_0x19d8('0x40')]['id']}},_0x5e2700={};_0x5e2700['model']=_[_0x19d8('0x2e')](db[_0x19d8('0x2b')]['rawAttributes']);_0x5e2700['query']=_[_0x19d8('0x2e')](_0x2e2fa9[_0x19d8('0x2f')]);_0x5e2700[_0x19d8('0x30')]=_[_0x19d8('0x31')](_0x5e2700[_0x19d8('0x2d')],_0x5e2700[_0x19d8('0x2f')]);_0x49f76d[_0x19d8('0x33')]=_[_0x19d8('0x31')](_0x5e2700[_0x19d8('0x2d')],qs[_0x19d8('0x32')](_0x2e2fa9[_0x19d8('0x2f')][_0x19d8('0x32')]));_0x49f76d['attributes']=_0x49f76d[_0x19d8('0x33')]['length']?_0x49f76d['attributes']:_0x5e2700[_0x19d8('0x2d')];if(_0x2e2fa9[_0x19d8('0x2f')][_0x19d8('0x41')]){_0x49f76d['include']=[{'all':!![]}];}_0x49f76d=_[_0x19d8('0x42')]({},_0x49f76d,_0x2e2fa9['options']);return db[_0x19d8('0x2b')]['find'](_0x49f76d)[_0x19d8('0x25')](handleEntityNotFound(_0x5cd07e,null))[_0x19d8('0x25')](respondWithResult(_0x5cd07e,null))[_0x19d8('0x3e')](handleError(_0x5cd07e,null));};exports[_0x19d8('0x43')]=function(_0x5c831c,_0x19f941){return db[_0x19d8('0x2b')]['describe']()['then'](respondWithResult(_0x19f941,null))['catch'](handleError(_0x19f941,null));};exports['update']=function(_0x28201e,_0x101520){if(_0x28201e[_0x19d8('0x44')][_0x19d8('0x45')]){delete _0x28201e[_0x19d8('0x44')]['uniqueid'];}return db[_0x19d8('0x2b')]['find']({'where':{'uniqueid':_0x28201e[_0x19d8('0x40')]['id']}})[_0x19d8('0x25')](handleEntityNotFound(_0x101520,null))['then'](saveUpdates(_0x28201e['body'],null))['then'](respondWithResult(_0x101520,null))[_0x19d8('0x3e')](handleError(_0x101520,null));};exports[_0x19d8('0x46')]=function(_0x52a3b5,_0x4ce0e8,_0x4e0be7){return db[_0x19d8('0x2b')][_0x19d8('0x3d')]({'raw':![],'where':{'VoiceQueueId':_0x52a3b5['params']['id']},'attributes':[[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db[_0x19d8('0x47')][_0x19d8('0x49')](_0x19d8('0x4a')))),_0x19d8('0x4b')],[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db[_0x19d8('0x47')][_0x19d8('0x49')](_0x19d8('0x4c')))),_0x19d8('0x4d')],[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db['sequelize']['fn']('IF',db['sequelize']['literal'](_0x19d8('0x4e')))),_0x19d8('0x4f')],[db['sequelize']['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db[_0x19d8('0x47')][_0x19d8('0x49')](_0x19d8('0x50')))),_0x19d8('0x51')],[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db[_0x19d8('0x47')][_0x19d8('0x49')](_0x19d8('0x52')))),_0x19d8('0x53')],[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db[_0x19d8('0x47')][_0x19d8('0x49')](_0x19d8('0x54')))),_0x19d8('0x55')],[db['sequelize']['fn']('COUNT',db[_0x19d8('0x47')]['fn']('IF',db[_0x19d8('0x47')][_0x19d8('0x49')](_0x19d8('0x56')))),_0x19d8('0x57')],[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db['sequelize']['fn']('IF',db['sequelize']['literal']('`state`\x20=\x2019,\x201,\x20null'))),_0x19d8('0x58')]]})[_0x19d8('0x25')](handleEntityNotFound(_0x4ce0e8,null))[_0x19d8('0x25')](respondWithResult(_0x4ce0e8,null))[_0x19d8('0x3e')](handleError(_0x4ce0e8,null));};exports[_0x19d8('0x59')]=function(_0x3df5c1,_0x5d352d,_0x3d9d04){return db[_0x19d8('0x2b')][_0x19d8('0x3d')]({'raw':![],'where':{'CampaignId':_0x3df5c1[_0x19d8('0x40')]['id']},'attributes':[[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db['sequelize']['fn']('IF',db[_0x19d8('0x47')][_0x19d8('0x49')](_0x19d8('0x4a')))),_0x19d8('0x4b')],[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db['sequelize']['literal']('`state`\x20=\x203,\x201,\x20null'))),'noAnswerContacts'],[db['sequelize']['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db[_0x19d8('0x47')]['literal'](_0x19d8('0x4e')))),_0x19d8('0x4f')],[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db[_0x19d8('0x47')][_0x19d8('0x49')](_0x19d8('0x50')))),_0x19d8('0x51')],[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db['sequelize']['literal']('`state`\x20=\x2010\x20,\x201,\x20null'))),_0x19d8('0x53')],[db['sequelize']['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db[_0x19d8('0x47')][_0x19d8('0x49')](_0x19d8('0x54')))),_0x19d8('0x55')],[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db['sequelize'][_0x19d8('0x49')](_0x19d8('0x56')))),_0x19d8('0x57')],[db[_0x19d8('0x47')]['fn'](_0x19d8('0x48'),db[_0x19d8('0x47')]['fn']('IF',db[_0x19d8('0x47')][_0x19d8('0x49')](_0x19d8('0x5a')))),_0x19d8('0x58')]]})[_0x19d8('0x25')](handleEntityNotFound(_0x5d352d,null))[_0x19d8('0x25')](respondWithResult(_0x5d352d,null))[_0x19d8('0x3e')](handleError(_0x5d352d,null));};exports[_0x19d8('0x5b')]=function(_0xf7c0e9,_0x3bfca4,_0x2046fe){return db[_0x19d8('0x5c')][_0x19d8('0x5d')]({'where':{'id':_0xf7c0e9[_0x19d8('0x40')]['id']}})[_0x19d8('0x25')](handleEntityNotFound(_0x3bfca4,null))['then'](function(_0x2b6c9b){var _0x5783b1;if(_0x2b6c9b){_0x5783b1=squel[_0x19d8('0x5e')]()['into'](_0x19d8('0x5f'))['fromQuery'](['phone',_0x19d8('0x60'),_0x19d8('0x61'),_0x19d8('0x62'),_0x19d8('0x63'),_0x19d8('0x64'),'updatedAt'],squel[_0x19d8('0x65')]()[_0x19d8('0x66')]('ANY_VALUE(calleridnum)',_0x19d8('0x67'))['field'](_0x19d8('0x68'),_0x19d8('0x60'))[_0x19d8('0x66')](_0x19d8('0x69'),_0x19d8('0x61'))[_0x19d8('0x66')](_0x19d8('0x6a'),_0x19d8('0x62'))[_0x19d8('0x66')](_0x19d8('0x6b'),_0x19d8('0x63'))[_0x19d8('0x66')]('NOW()',_0x19d8('0x64'))[_0x19d8('0x66')](_0x19d8('0x68'),_0x19d8('0x6c'))[_0x19d8('0x6d')](_0x19d8('0x6e'))['where'](_0x19d8('0x6f'),_0xf7c0e9['params']['id']['toString']())[_0x19d8('0x36')](_0x19d8('0x70'),_0xf7c0e9[_0x19d8('0x44')][_0x19d8('0x71')][_0x19d8('0x72')]())[_0x19d8('0x36')](_0x19d8('0x73'))[_0x19d8('0x36')](_0x19d8('0x74'),squel['select']()[_0x19d8('0x66')](_0x19d8('0x67'))[_0x19d8('0x6d')](_0x19d8('0x5f'))[_0x19d8('0x36')](_0x19d8('0x6f'),_0xf7c0e9[_0x19d8('0x40')]['id'][_0x19d8('0x72')]()))['where'](_0x19d8('0x74'),squel[_0x19d8('0x65')]()['field'](_0x19d8('0x75'))[_0x19d8('0x6d')](_0x19d8('0x6e'))[_0x19d8('0x36')](_0x19d8('0x6f'),_0xf7c0e9['params']['id'][_0x19d8('0x72')]())[_0x19d8('0x36')](_0x19d8('0x76')))['group']('ContactId'))[_0x19d8('0x72')]();return db[_0x19d8('0x47')][_0x19d8('0x2f')](_0x5783b1);}return[];})[_0x19d8('0x25')](respondWithResult(_0x3bfca4,null))[_0x19d8('0x3e')](handleError(_0x3bfca4,null));};exports[_0x19d8('0x77')]=function(_0x48f282,_0x59e1a3,_0x59ac0b){return db['Campaign'][_0x19d8('0x5d')]({'where':{'id':_0x48f282['params']['id']}})['then'](handleEntityNotFound(_0x59e1a3,null))[_0x19d8('0x25')](function(_0x37e0fb){var _0x58c934;if(_0x37e0fb){_0x58c934=squel[_0x19d8('0x5e')]()[_0x19d8('0x78')](_0x19d8('0x5f'))[_0x19d8('0x79')]([_0x19d8('0x67'),_0x19d8('0x60'),_0x19d8('0x61'),'ListId','CampaignId',_0x19d8('0x64'),_0x19d8('0x6c')],squel[_0x19d8('0x65')]()[_0x19d8('0x66')](_0x19d8('0x7a'),_0x19d8('0x67'))[_0x19d8('0x66')]('NOW()','scheduledAt')[_0x19d8('0x66')]('ANY_VALUE(ContactId)',_0x19d8('0x61'))[_0x19d8('0x66')](_0x19d8('0x6a'),_0x19d8('0x62'))['field'](_0x19d8('0x7b'),_0x19d8('0x7c'))[_0x19d8('0x66')](_0x19d8('0x68'),'createdAt')[_0x19d8('0x66')](_0x19d8('0x68'),'updatedAt')[_0x19d8('0x6d')](_0x19d8('0x6e'))[_0x19d8('0x36')](_0x19d8('0x7d'),_0x48f282[_0x19d8('0x40')]['id'][_0x19d8('0x72')]())[_0x19d8('0x36')](_0x19d8('0x70'),_0x48f282['body'][_0x19d8('0x71')][_0x19d8('0x72')]())[_0x19d8('0x36')](_0x19d8('0x73'))[_0x19d8('0x36')](_0x19d8('0x74'),squel[_0x19d8('0x65')]()['field'](_0x19d8('0x67'))[_0x19d8('0x6d')](_0x19d8('0x5f'))[_0x19d8('0x36')](_0x19d8('0x7d'),_0x48f282['params']['id'][_0x19d8('0x72')]()))[_0x19d8('0x36')](_0x19d8('0x74'),squel[_0x19d8('0x65')]()['field']('calleridnum')[_0x19d8('0x6d')](_0x19d8('0x6e'))[_0x19d8('0x36')](_0x19d8('0x7d'),_0x48f282['params']['id'][_0x19d8('0x72')]())[_0x19d8('0x36')](_0x19d8('0x76')))[_0x19d8('0x7e')](_0x19d8('0x61')))[_0x19d8('0x72')]();return db[_0x19d8('0x47')][_0x19d8('0x2f')](_0x58c934);}return[];})[_0x19d8('0x25')](respondWithResult(_0x59e1a3,null))['catch'](handleError(_0x59e1a3,null));};exports['checkContactHopper']=function(_0x529a08,_0x4a715d,_0x341e58){return db[_0x19d8('0x7f')]['findOne']({'where':{'VoiceQueueId':_0x529a08[_0x19d8('0x44')][_0x19d8('0x63')],'CampaignId':_0x529a08[_0x19d8('0x44')]['CampaignId'],'ContactId':_0x529a08[_0x19d8('0x44')]['ContactId']}})[_0x19d8('0x25')](handleEntityNotFound(_0x4a715d,null))[_0x19d8('0x25')](function(_0x16d35b){if(_0x16d35b){return _0x16d35b;}return null;})[_0x19d8('0x25')](respondWithResult(_0x4a715d,null))[_0x19d8('0x3e')](handleError(_0x4a715d,null));};
\ No newline at end of file
index 9357f24..a3da98f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7eb1=['lodash','util','../../config/logger','moment','bluebird','request-promise','rimraf','../../config/environment','exports','define','CmHopperFinal','cm_hopper_final','calleridnum','uniqueid'];(function(_0xd94c5c,_0x1134f9){var _0x5876c5=function(_0x538eb6){while(--_0x538eb6){_0xd94c5c['push'](_0xd94c5c['shift']());}};_0x5876c5(++_0x1134f9);}(_0x7eb1,0x1ce));var _0x17eb=function(_0x1a9b94,_0x4d763e){_0x1a9b94=_0x1a9b94-0x0;var _0x379102=_0x7eb1[_0x1a9b94];return _0x379102;};'use strict';var _=require(_0x17eb('0x0'));var util=require(_0x17eb('0x1'));var logger=require(_0x17eb('0x2'))('api');var moment=require(_0x17eb('0x3'));var BPromise=require(_0x17eb('0x4'));var rp=require(_0x17eb('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x17eb('0x6'));var config=require(_0x17eb('0x7'));var attributes=require('./cmHopperFinal.attributes');module[_0x17eb('0x8')]=function(_0x1ed7eb,_0x23900c){return _0x1ed7eb[_0x17eb('0x9')](_0x17eb('0xa'),attributes,{'tableName':_0x17eb('0xb'),'paranoid':![],'indexes':[{'name':_0x17eb('0xc'),'fields':['calleridnum']},{'name':_0x17eb('0xd'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x2887=['./cmHopperFinal.attributes','exports','define','CmHopperFinal','calleridnum','uniqueid','lodash','util','../../config/logger','bluebird','request-promise','path','rimraf','../../config/environment'];(function(_0x2d0796,_0x47d658){var _0x391c6d=function(_0x3f39df){while(--_0x3f39df){_0x2d0796['push'](_0x2d0796['shift']());}};_0x391c6d(++_0x47d658);}(_0x2887,0x110));var _0x7288=function(_0x5162ed,_0x386cb7){_0x5162ed=_0x5162ed-0x0;var _0x4c579b=_0x2887[_0x5162ed];return _0x4c579b;};'use strict';var _=require(_0x7288('0x0'));var util=require(_0x7288('0x1'));var logger=require(_0x7288('0x2'))('api');var moment=require('moment');var BPromise=require(_0x7288('0x3'));var rp=require(_0x7288('0x4'));var fs=require('fs');var path=require(_0x7288('0x5'));var rimraf=require(_0x7288('0x6'));var config=require(_0x7288('0x7'));var attributes=require(_0x7288('0x8'));module[_0x7288('0x9')]=function(_0x4defb7,_0x47d915){return _0x4defb7[_0x7288('0xa')](_0x7288('0xb'),attributes,{'tableName':'cm_hopper_final','paranoid':![],'indexes':[{'name':_0x7288('0xc'),'fields':[_0x7288('0xc')]},{'name':'uniqueid','fields':[_0x7288('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
index 8985672..5ea4f0b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa88=['debug','CmHopperFinal,\x20%s,\x20%s,\x20%s','error','CmHopperFinal,\x20%s,\x20%s','message','result','catch','create','body','options','CreateCmHopperFinal','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','then','info','request\x20sent'];(function(_0x22e69f,_0x5a6621){var _0x1a4fac=function(_0x2bfe4e){while(--_0x2bfe4e){_0x22e69f['push'](_0x22e69f['shift']());}};_0x1a4fac(++_0x5a6621);}(_0xaa88,0x137));var _0x8aa8=function(_0x5d8018,_0x588592){_0x5d8018=_0x5d8018-0x0;var _0x151ac4=_0xaa88[_0x5d8018];return _0x151ac4;};'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')]('CmHopperFinal,\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')]('CmHopperFinal,\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')]('CmHopperFinal,\x20%s,\x20%s',_0x449d2d,_0xd59fb8);_0x40826f(_0xd59fb8);});});}exports['CreateCmHopperFinal']=function(_0x2c1b9a){var _0x49d80d=this;return new Promise(function(_0x557adc,_0xab7af5){return db['CmHopperFinal'][_0x8aa8('0x15')](_0x2c1b9a[_0x8aa8('0x16')],{'raw':_0x2c1b9a[_0x8aa8('0x17')]?_0x2c1b9a[_0x8aa8('0x17')]['raw']===undefined?!![]:![]:!![]})[_0x8aa8('0xb')](function(_0x36c445){logger[_0x8aa8('0xc')](_0x8aa8('0x18'),_0x2c1b9a);logger[_0x8aa8('0xe')](_0x8aa8('0x18'),_0x2c1b9a,JSON['stringify'](_0x36c445));_0x557adc(_0x36c445);})[_0x8aa8('0x14')](function(_0x4cc455){logger[_0x8aa8('0x10')]('CreateCmHopperFinal',_0x4cc455[_0x8aa8('0x12')],_0x2c1b9a);_0xab7af5(_0x49d80d['error'](0x1f4,_0x4cc455[_0x8aa8('0x12')]));});});};
\ No newline at end of file
+var _0xda55=['options','lodash','util','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','request','then','CmHopperFinal,\x20%s,\x20%s','request\x20sent','debug','CmHopperFinal,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','CreateCmHopperFinal','CmHopperFinal','create','body'];(function(_0x32fb7e,_0x522a5c){var _0x199172=function(_0xe4b28c){while(--_0xe4b28c){_0x32fb7e['push'](_0x32fb7e['shift']());}};_0x199172(++_0x522a5c);}(_0xda55,0x6d));var _0x5da5=function(_0x1324c3,_0x1947b7){_0x1324c3=_0x1324c3-0x0;var _0x36fd4b=_0xda55[_0x1324c3];return _0x36fd4b;};'use strict';var _=require(_0x5da5('0x0'));var util=require(_0x5da5('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x5da5('0x2'));var fs=require('fs');var Redis=require(_0x5da5('0x3'));var db=require(_0x5da5('0x4'))['db'];var utils=require(_0x5da5('0x5'));var logger=require(_0x5da5('0x6'))('rpc');var config=require(_0x5da5('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x5da5('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2fd877,_0x267469,_0x71b187){return new BPromise(function(_0x46290d,_0x3debdf){return client[_0x5da5('0x9')](_0x2fd877,_0x71b187)[_0x5da5('0xa')](function(_0x302795){logger['info'](_0x5da5('0xb'),_0x267469,_0x5da5('0xc'));logger[_0x5da5('0xd')](_0x5da5('0xe'),_0x267469,_0x5da5('0xc'),JSON[_0x5da5('0xf')](_0x302795));if(_0x302795[_0x5da5('0x10')]){if(_0x302795['error'][_0x5da5('0x11')]===0x1f4){logger[_0x5da5('0x10')]('CmHopperFinal,\x20%s,\x20%s',_0x267469,_0x302795[_0x5da5('0x10')][_0x5da5('0x12')]);return _0x3debdf(_0x302795[_0x5da5('0x10')][_0x5da5('0x12')]);}logger[_0x5da5('0x10')](_0x5da5('0xb'),_0x267469,_0x302795['error']['message']);return _0x46290d(_0x302795['error'][_0x5da5('0x12')]);}else{logger[_0x5da5('0x13')](_0x5da5('0xb'),_0x267469,_0x5da5('0xc'));_0x46290d(_0x302795[_0x5da5('0x14')][_0x5da5('0x12')]);}})[_0x5da5('0x15')](function(_0x4a952a){logger[_0x5da5('0x10')](_0x5da5('0xb'),_0x267469,_0x4a952a);_0x3debdf(_0x4a952a);});});}exports[_0x5da5('0x16')]=function(_0x16b11f){var _0x3f7e98=this;return new Promise(function(_0x428b07,_0x547c58){return db[_0x5da5('0x17')][_0x5da5('0x18')](_0x16b11f[_0x5da5('0x19')],{'raw':_0x16b11f[_0x5da5('0x1a')]?_0x16b11f[_0x5da5('0x1a')]['raw']===undefined?!![]:![]:!![]})[_0x5da5('0xa')](function(_0x3372fc){logger[_0x5da5('0x13')]('CreateCmHopperFinal',_0x16b11f);logger[_0x5da5('0xd')](_0x5da5('0x16'),_0x16b11f,JSON[_0x5da5('0xf')](_0x3372fc));_0x428b07(_0x3372fc);})[_0x5da5('0x15')](function(_0xec69f2){logger[_0x5da5('0x10')]('CreateCmHopperFinal',_0xec69f2[_0x5da5('0x12')],_0x16b11f);_0x547c58(_0x3f7e98['error'](0x1f4,_0xec69f2[_0x5da5('0x12')]));});});};
\ No newline at end of file
index 238e69a..258c4a6 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(_0x300642,_0x450544){var _0x325ebb=function(_0x228134){while(--_0x228134){_0x300642['push'](_0x300642['shift']());}};_0x325ebb(++_0x450544);}(_0x9c44,0x178));var _0x49c4=function(_0x50a0c2,_0x4befab){_0x50a0c2=_0x50a0c2-0x0;var _0x5ebadd=_0x9c44[_0x50a0c2];return _0x5ebadd;};'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 _0x3e74=['isAuthenticated','index','describe','/:id','countContactsQueueCampaignHopperFinal','post','/voice/queue/moveContacts/:id','moveContactsQueueCampaignHopperFinal','/voice/campaign/moveContacts/:id','/checkContactHopper','checkContactHopper','update','exports','multer','path','connect-timeout','express','../../components/interaction/service','./cmHopperFinal.controller','get'];(function(_0x351b46,_0x26b265){var _0x1515df=function(_0x22896a){while(--_0x22896a){_0x351b46['push'](_0x351b46['shift']());}};_0x1515df(++_0x26b265);}(_0x3e74,0x175));var _0x43e7=function(_0x148fd6,_0x29653d){_0x148fd6=_0x148fd6-0x0;var _0x3ce5e4=_0x3e74[_0x148fd6];return _0x3ce5e4;};'use strict';var multer=require(_0x43e7('0x0'));var util=require('util');var path=require(_0x43e7('0x1'));var timeout=require(_0x43e7('0x2'));var express=require(_0x43e7('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x43e7('0x4'));var config=require('../../config/environment');var controller=require(_0x43e7('0x5'));router[_0x43e7('0x6')]('/',auth[_0x43e7('0x7')](),controller[_0x43e7('0x8')]);router[_0x43e7('0x6')]('/describe',auth[_0x43e7('0x7')](),controller[_0x43e7('0x9')]);router[_0x43e7('0x6')](_0x43e7('0xa'),auth[_0x43e7('0x7')](),controller['show']);router[_0x43e7('0x6')]('/voice/queue/countAttributes/:id',auth['isAuthenticated'](),controller[_0x43e7('0xb')]);router[_0x43e7('0x6')]('/campaign/countAttributes/:id',auth[_0x43e7('0x7')](),controller['countContactsIvrCampaignHopperFinal']);router[_0x43e7('0xc')](_0x43e7('0xd'),auth['isAuthenticated'](),controller[_0x43e7('0xe')]);router[_0x43e7('0xc')](_0x43e7('0xf'),auth[_0x43e7('0x7')](),controller['moveContactsIvrCampaignHopperFinal']);router['post'](_0x43e7('0x10'),auth[_0x43e7('0x7')](),controller[_0x43e7('0x11')]);router['put']('/:id',auth[_0x43e7('0x7')](),controller[_0x43e7('0x12')]);module[_0x43e7('0x13')]=router;
\ No newline at end of file
index bd44f9f..f8a92b8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b19=['sequelize','INTEGER','STRING','DATE','BOOLEAN'];(function(_0x595913,_0x323b13){var _0x2253a0=function(_0xad4a2c){while(--_0xad4a2c){_0x595913['push'](_0x595913['shift']());}};_0x2253a0(++_0x323b13);}(_0x4b19,0x195));var _0x94b1=function(_0xab3b4,_0x2cee9c){_0xab3b4=_0xab3b4-0x0;var _0x4762ae=_0x4b19[_0xab3b4];return _0x4762ae;};'use strict';var Sequelize=require(_0x94b1('0x0'));module['exports']={'state':{'type':Sequelize[_0x94b1('0x1')](0x2)},'statedesc':{'type':Sequelize[_0x94b1('0x2')]},'scheduledat':{'type':Sequelize[_0x94b1('0x3')]},'countbusyretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x94b1('0x1')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x94b1('0x1')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0x94b1('0x1')],'defaultValue':0x0},'uniqueid':{'type':Sequelize['STRING']},'originatecalleridnum':{'type':Sequelize[_0x94b1('0x2')]},'originatecalleridname':{'type':Sequelize[_0x94b1('0x2')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x94b1('0x2')]},'starttime':{'type':Sequelize[_0x94b1('0x3')]},'responsetime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0x94b1('0x3')]},'droptime':{'type':Sequelize[_0x94b1('0x3')]},'endtime':{'type':Sequelize[_0x94b1('0x3')]},'ringtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0x94b1('0x1')],'defaultValue':0x0},'talktime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'followuptime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0x94b1('0x2')]},'campaign':{'type':Sequelize[_0x94b1('0x2')]},'campaigntype':{'type':Sequelize[_0x94b1('0x2')]},'membername':{'type':Sequelize[_0x94b1('0x2')]},'reason':{'type':Sequelize[_0x94b1('0x2')]},'amd':{'type':Sequelize[_0x94b1('0x4')],'defaultValue':![]},'fax':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callback':{'type':Sequelize[_0x94b1('0x4')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x94b1('0x2')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x94b1('0x3')]},'recallme':{'type':Sequelize[_0x94b1('0x4')],'defaultValue':![]},'editedat':{'type':Sequelize['DATE']},'edited':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
+var _0xb91a=['INTEGER','STRING','DATE','BOOLEAN','sequelize','exports'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0xb91a,0xf4));var _0xab91=function(_0x48b021,_0x5da513){_0x48b021=_0x48b021-0x0;var _0x5a8deb=_0xb91a[_0x48b021];return _0x5a8deb;};'use strict';var Sequelize=require(_0xab91('0x0'));module[_0xab91('0x1')]={'state':{'type':Sequelize[_0xab91('0x2')](0x2)},'statedesc':{'type':Sequelize['STRING']},'scheduledat':{'type':Sequelize['DATE']},'countbusyretry':{'type':Sequelize[_0xab91('0x2')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0xab91('0x2')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0xab91('0x2')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0xab91('0x2')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0xab91('0x3')]},'originatecalleridnum':{'type':Sequelize[_0xab91('0x3')]},'originatecalleridname':{'type':Sequelize[_0xab91('0x3')]},'calleridnum':{'type':Sequelize[_0xab91('0x3')]},'calleridname':{'type':Sequelize[_0xab91('0x3')]},'starttime':{'type':Sequelize[_0xab91('0x4')]},'responsetime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0xab91('0x4')]},'droptime':{'type':Sequelize[_0xab91('0x4')]},'endtime':{'type':Sequelize['DATE']},'ringtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'holdtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'talktime':{'type':Sequelize[_0xab91('0x2')],'defaultValue':0x0},'followuptime':{'type':Sequelize[_0xab91('0x2')],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0xab91('0x3')]},'campaign':{'type':Sequelize[_0xab91('0x3')]},'campaigntype':{'type':Sequelize[_0xab91('0x3')]},'membername':{'type':Sequelize[_0xab91('0x3')]},'reason':{'type':Sequelize[_0xab91('0x3')]},'amd':{'type':Sequelize[_0xab91('0x5')],'defaultValue':![]},'fax':{'type':Sequelize[_0xab91('0x5')],'defaultValue':![]},'callback':{'type':Sequelize[_0xab91('0x5')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0xab91('0x3')],'defaultValue':null},'callbackat':{'type':Sequelize[_0xab91('0x4')]},'recallme':{'type':Sequelize[_0xab91('0x5')],'defaultValue':![]},'editedat':{'type':Sequelize['DATE']},'edited':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
index 103e04d..9f0b31f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-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(_0x1458b5,_0x4b8db0){var _0x52e881=function(_0x192872){while(--_0x192872){_0x1458b5['push'](_0x1458b5['shift']());}};_0x52e881(++_0x4b8db0);}(_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'];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
+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(_0x2040dd,_0x156a63){var _0x27688f=function(_0xb90c80){while(--_0xb90c80){_0x2040dd['push'](_0x2040dd['shift']());}};_0x27688f(++_0x156a63);}(_0xb10b,0x12a));var _0xbb10=function(_0x2d8fdb,_0x30e70c){_0x2d8fdb=_0x2d8fdb-0x0;var _0x3bc1c2=_0xb10b[_0x2d8fdb];return _0x3bc1c2;};'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
index fa95bb0..d8d03fb 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(_0x54a7aa,_0x55d59c){var _0x43a783=function(_0x32a62e){while(--_0x32a62e){_0x54a7aa['push'](_0x54a7aa['shift']());}};_0x43a783(++_0x55d59c);}(_0xe706,0xa3));var _0x6e70=function(_0x135f1f,_0x45e875){_0x135f1f=_0x135f1f-0x0;var _0x547ed6=_0xe706[_0x135f1f];return _0x547ed6;};'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 _0x9c44=['CmHopperHistory','cm_hopper_history','endtime','uniqueid','../../config/logger','api','moment','bluebird','request-promise','path','./cmHopperHistory.attributes','define'];(function(_0x5d5ead,_0x4034ac){var _0x4eb7ba=function(_0x33803d){while(--_0x33803d){_0x5d5ead['push'](_0x5d5ead['shift']());}};_0x4eb7ba(++_0x4034ac);}(_0x9c44,0x178));var _0x49c4=function(_0x334841,_0x2bbc4c){_0x334841=_0x334841-0x0;var _0x5beb4b=_0x9c44[_0x334841];return _0x5beb4b;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x49c4('0x0'))(_0x49c4('0x1'));var moment=require(_0x49c4('0x2'));var BPromise=require(_0x49c4('0x3'));var rp=require(_0x49c4('0x4'));var fs=require('fs');var path=require(_0x49c4('0x5'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x49c4('0x6'));module['exports']=function(_0xc1278f,_0x6030ae){return _0xc1278f[_0x49c4('0x7')](_0x49c4('0x8'),attributes,{'tableName':_0x49c4('0x9'),'paranoid':![],'indexes':[{'name':'endtime','fields':[_0x49c4('0xa')]},{'name':_0x49c4('0xb'),'fields':[_0x49c4('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index ab816b7..fac37bd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3238=['info','CmHopperHistory,\x20%s,\x20%s','request\x20sent','debug','CmHopperHistory,\x20%s,\x20%s,\x20%s','stringify','error','message','result','CreateCmHopperHistory','CmHopperHistory','body','options','raw','catch','AvgHandleTime','findAll','where','sequelize','col','COUNT','literal','`state`\x20=\x204,\x201,\x20null','predictiveIntervalAnsweredCalls','`state`\x20=\x2010,\x201,\x20null','predictiveIntervalDroppedCallsTimeout','predictiveIntervalDroppedCallsCallersExit','AVG','`state`\x20=\x204,\x20`holdtime`,\x20null','predictiveIntervalAvgHoldtime','`state`\x20=\x204,\x20`talktime`,\x20null','predictiveIntervalAvgTalktime','campaign','name','`state`\x20=\x200,\x201,\x20null','`state`\x20=\x203,\x201,\x20null','outboundNoAnswerCallsDay','outboundAnswerCallsDay','`state`\x20=\x205,\x201,\x20null','outboundBusyCallsDay','`state`\x20=\x208,\x201,\x20null','`state`\x20=\x2012,\x201,\x20null','outboundUnknownCallsDay','`state`\x20=\x2013,\x201,\x20null','outboundBlacklistCallsDay','`state`\x20=\x2014,\x201,\x20null','`state`\x20=\x2018,\x201,\x20null','outboundRejectCallsDay','`state`\x20=\x2016,\x201,\x20null','`state`\x20=\x2020,\x201,\x20null','GetVoiceQueueHopperHistory','GetCampaignHopperHistory','ivrTotalCallsDays','ivrAnswerCallsDay','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then'];(function(_0x3de5cd,_0x3a4bcf){var _0x2c5f1f=function(_0x484cb5){while(--_0x484cb5){_0x3de5cd['push'](_0x3de5cd['shift']());}};_0x2c5f1f(++_0x3a4bcf);}(_0x3238,0x13e));var _0x8323=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x3238[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x8323('0x0'));var util=require('util');var moment=require(_0x8323('0x1'));var BPromise=require(_0x8323('0x2'));var rs=require(_0x8323('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x8323('0x4'))['db'];var utils=require(_0x8323('0x5'));var logger=require(_0x8323('0x6'))(_0x8323('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x8323('0x8')][_0x8323('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x40b1f0,_0x14b3b5,_0x4ddf1f){return new BPromise(function(_0x232f4b,_0x5950e2){return client[_0x8323('0xa')](_0x40b1f0,_0x4ddf1f)[_0x8323('0xb')](function(_0x1577a6){logger[_0x8323('0xc')](_0x8323('0xd'),_0x14b3b5,_0x8323('0xe'));logger[_0x8323('0xf')](_0x8323('0x10'),_0x14b3b5,'request\x20sent',JSON[_0x8323('0x11')](_0x1577a6));if(_0x1577a6[_0x8323('0x12')]){if(_0x1577a6[_0x8323('0x12')]['code']===0x1f4){logger[_0x8323('0x12')](_0x8323('0xd'),_0x14b3b5,_0x1577a6[_0x8323('0x12')][_0x8323('0x13')]);return _0x5950e2(_0x1577a6[_0x8323('0x12')][_0x8323('0x13')]);}logger[_0x8323('0x12')](_0x8323('0xd'),_0x14b3b5,_0x1577a6[_0x8323('0x12')][_0x8323('0x13')]);return _0x232f4b(_0x1577a6[_0x8323('0x12')][_0x8323('0x13')]);}else{logger[_0x8323('0xc')](_0x8323('0xd'),_0x14b3b5,'request\x20sent');_0x232f4b(_0x1577a6[_0x8323('0x14')][_0x8323('0x13')]);}})['catch'](function(_0x320e7f){logger['error']('CmHopperHistory,\x20%s,\x20%s',_0x14b3b5,_0x320e7f);_0x5950e2(_0x320e7f);});});}exports[_0x8323('0x15')]=function(_0x3bb436){var _0x2bb7c5=this;return new Promise(function(_0x46a42c,_0x3b3ba9){return db[_0x8323('0x16')]['create'](_0x3bb436[_0x8323('0x17')],{'raw':_0x3bb436['options']?_0x3bb436[_0x8323('0x18')][_0x8323('0x19')]===undefined?!![]:![]:!![]})[_0x8323('0xb')](function(_0x4d1ef3){logger[_0x8323('0xc')]('CreateCmHopperHistory',_0x3bb436);logger['debug'](_0x8323('0x15'),_0x3bb436,JSON[_0x8323('0x11')](_0x4d1ef3));_0x46a42c(_0x4d1ef3);})[_0x8323('0x1a')](function(_0x49fdb1){logger['error'](_0x8323('0x15'),_0x49fdb1[_0x8323('0x13')],_0x3bb436);_0x3b3ba9(_0x2bb7c5[_0x8323('0x12')](0x1f4,_0x49fdb1[_0x8323('0x13')]));});});};exports[_0x8323('0x1b')]=function(_0x372ce6){var _0x3185d3=this;return new Promise(function(_0xe839b3,_0x2ded41){return db['CmHopperHistory'][_0x8323('0x1c')]({'raw':_0x372ce6['options']?_0x372ce6['options']['raw']===undefined?!![]:![]:!![],'where':_0x372ce6[_0x8323('0x18')]?_0x372ce6[_0x8323('0x18')][_0x8323('0x1d')]||null:null,'attributes':[[db[_0x8323('0x1e')]['fn']('COUNT',db[_0x8323('0x1e')][_0x8323('0x1f')]('id')),'predictiveIntervalTotalCalls'],[db[_0x8323('0x1e')]['fn'](_0x8323('0x20'),db[_0x8323('0x1e')]['fn']('IF',db[_0x8323('0x1e')][_0x8323('0x21')](_0x8323('0x22')))),_0x8323('0x23')],[db['sequelize']['fn'](_0x8323('0x20'),db[_0x8323('0x1e')]['fn']('IF',db['sequelize'][_0x8323('0x21')](_0x8323('0x24')))),_0x8323('0x25')],[db[_0x8323('0x1e')]['fn'](_0x8323('0x20'),db['sequelize']['fn']('IF',db['sequelize']['literal']('`state`\x20=\x2011,\x201,\x20null'))),_0x8323('0x26')],[db[_0x8323('0x1e')]['fn'](_0x8323('0x27'),db['sequelize']['fn']('IF',db['sequelize'][_0x8323('0x21')](_0x8323('0x28')))),_0x8323('0x29')],[db[_0x8323('0x1e')]['fn'](_0x8323('0x27'),db[_0x8323('0x1e')]['fn']('IF',db[_0x8323('0x1e')]['literal'](_0x8323('0x2a')))),_0x8323('0x2b')]]})['then'](function(_0x20a582){logger[_0x8323('0xc')](_0x8323('0x1b'),_0x372ce6);logger[_0x8323('0xf')](_0x8323('0x1b'),_0x372ce6,JSON[_0x8323('0x11')](_0x20a582));_0xe839b3(_0x20a582);})[_0x8323('0x1a')](function(_0x52b01b){logger[_0x8323('0x12')](_0x8323('0x1b'),_0x52b01b[_0x8323('0x13')],_0x372ce6);_0x2ded41(_0x3185d3[_0x8323('0x12')](0x1f4,_0x52b01b[_0x8323('0x13')]));});});};exports['GetVoiceQueueHopperHistory']=function(_0x580d06){var _0x41efea=this;return new Promise(function(_0x2d6c39,_0xada275){return db[_0x8323('0x16')][_0x8323('0x1c')]({'raw':_0x580d06[_0x8323('0x18')]?_0x580d06['options'][_0x8323('0x19')]===undefined?!![]:![]:!![],'where':_0x580d06[_0x8323('0x18')]?_0x580d06['options'][_0x8323('0x1d')]||null:null,'attributes':[[_0x8323('0x2c'),_0x8323('0x2d')],[db[_0x8323('0x1e')]['fn'](_0x8323('0x20'),db['sequelize']['fn']('IF',db['sequelize'][_0x8323('0x21')](_0x8323('0x2e')))),'outboundNoSuchCallsDay'],[db[_0x8323('0x1e')]['fn'](_0x8323('0x20'),db[_0x8323('0x1e')]['fn']('IF',db[_0x8323('0x1e')][_0x8323('0x21')](_0x8323('0x2f')))),_0x8323('0x30')],[db['sequelize']['fn'](_0x8323('0x20'),db[_0x8323('0x1e')]['fn']('IF',db[_0x8323('0x1e')][_0x8323('0x21')]('`state`\x20=\x204,\x201,\x20null'))),_0x8323('0x31')],[db[_0x8323('0x1e')]['fn']('COUNT',db['sequelize']['fn']('IF',db[_0x8323('0x1e')][_0x8323('0x21')](_0x8323('0x32')))),_0x8323('0x33')],[db[_0x8323('0x1e')]['fn']('COUNT',db[_0x8323('0x1e')]['fn']('IF',db[_0x8323('0x1e')][_0x8323('0x21')](_0x8323('0x34')))),'outboundCongestionCallsDay'],[db[_0x8323('0x1e')]['fn'](_0x8323('0x20'),db['sequelize']['fn']('IF',db['sequelize'][_0x8323('0x21')]('`state`\x20=\x2010\x20,\x201,\x20null'))),'outboundDropCallsDayTimeout'],[db[_0x8323('0x1e')]['fn']('COUNT',db[_0x8323('0x1e')]['fn']('IF',db['sequelize'][_0x8323('0x21')]('`state`\x20=\x2011\x20,\x201,\x20null'))),'outboundDropCallsDayCallersExit'],[db[_0x8323('0x1e')]['fn'](_0x8323('0x20'),db[_0x8323('0x1e')]['fn']('IF',db[_0x8323('0x1e')][_0x8323('0x21')](_0x8323('0x35')))),_0x8323('0x36')],[db[_0x8323('0x1e')]['fn'](_0x8323('0x20'),db['sequelize']['fn']('IF',db['sequelize'][_0x8323('0x21')](_0x8323('0x37')))),_0x8323('0x38')],[db[_0x8323('0x1e')]['fn'](_0x8323('0x20'),db[_0x8323('0x1e')]['fn']('IF',db[_0x8323('0x1e')]['literal'](_0x8323('0x39')))),'outboundOriginateFailureCallsDay'],[db[_0x8323('0x1e')]['fn']('COUNT',db[_0x8323('0x1e')]['fn']('IF',db[_0x8323('0x1e')][_0x8323('0x21')](_0x8323('0x3a')))),_0x8323('0x3b')],[db[_0x8323('0x1e')]['fn'](_0x8323('0x20'),db[_0x8323('0x1e')]['fn']('IF',db['sequelize']['literal'](_0x8323('0x3c')))),'outboundAnswerAgiCallsDay'],[db[_0x8323('0x1e')]['fn']('COUNT',db[_0x8323('0x1e')]['fn']('IF',db[_0x8323('0x1e')][_0x8323('0x21')](_0x8323('0x3d')))),'outboundRejectCallsDay'],[db[_0x8323('0x1e')]['fn']('COUNT',db['sequelize']['fn']('IF',db['sequelize']['literal']('`state`\x20=\x2022\x20or\x20`state`\x20=\x2023,\x201,\x20null'))),'outboundReCallsDay']],'group':[_0x8323('0x2c')]})[_0x8323('0xb')](function(_0x16b073){logger[_0x8323('0xc')](_0x8323('0x3e'),_0x580d06);logger[_0x8323('0xf')](_0x8323('0x3e'),_0x580d06,JSON[_0x8323('0x11')](_0x16b073));_0x2d6c39(_0x16b073);})[_0x8323('0x1a')](function(_0x14d0b1){logger[_0x8323('0x12')](_0x8323('0x3e'),_0x14d0b1[_0x8323('0x13')],_0x580d06);_0xada275(_0x41efea['error'](0x1f4,_0x14d0b1[_0x8323('0x13')]));});});};exports[_0x8323('0x3f')]=function(_0x20637e){var _0xa10750=this;return new Promise(function(_0x3b37ca,_0xd6f24){return db['CmHopperHistory']['findAll']({'raw':_0x20637e['options']?_0x20637e['options']['raw']===undefined?!![]:![]:!![],'where':_0x20637e[_0x8323('0x18')]?_0x20637e[_0x8323('0x18')][_0x8323('0x1d')]||null:null,'attributes':[[_0x8323('0x2c'),'name'],[db[_0x8323('0x1e')]['fn']('COUNT',db[_0x8323('0x1e')][_0x8323('0x1f')]('id')),_0x8323('0x40')],[db[_0x8323('0x1e')]['fn'](_0x8323('0x20'),db[_0x8323('0x1e')]['fn']('IF',db[_0x8323('0x1e')][_0x8323('0x21')](_0x8323('0x22')))),_0x8323('0x41')]],'group':['campaign']})[_0x8323('0xb')](function(_0x46cf89){logger[_0x8323('0xc')](_0x8323('0x3f'),_0x20637e);logger[_0x8323('0xf')](_0x8323('0x3f'),_0x20637e,JSON[_0x8323('0x11')](_0x46cf89));_0x3b37ca(_0x46cf89);})[_0x8323('0x1a')](function(_0x1a8a0c){logger['error'](_0x8323('0x3f'),_0x1a8a0c['message'],_0x20637e);_0xd6f24(_0xa10750[_0x8323('0x12')](0x1f4,_0x1a8a0c['message']));});});};
\ No newline at end of file
+var _0xbe0f=['`state`\x20=\x205,\x201,\x20null','outboundBusyCallsDay','outboundCongestionCallsDay','`state`\x20=\x2010\x20,\x201,\x20null','outboundDropCallsDayTimeout','`state`\x20=\x2011\x20,\x201,\x20null','outboundDropCallsDayCallersExit','outboundUnknownCallsDay','`state`\x20=\x2013,\x201,\x20null','outboundBlacklistCallsDay','`state`\x20=\x2014,\x201,\x20null','outboundOriginateFailureCallsDay','`state`\x20=\x2018,\x201,\x20null','outboundRejectCallsDay','`state`\x20=\x2016,\x201,\x20null','outboundAnswerAgiCallsDay','`state`\x20=\x2020,\x201,\x20null','`state`\x20=\x2022\x20or\x20`state`\x20=\x2023,\x201,\x20null','outboundReCallsDay','GetVoiceQueueHopperHistory','ivrTotalCallsDays','ivrAnswerCallsDay','GetCampaignHopperHistory','lodash','util','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','request','info','CmHopperHistory,\x20%s,\x20%s','request\x20sent','CmHopperHistory,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','create','body','options','raw','then','CreateCmHopperHistory','debug','AvgHandleTime','CmHopperHistory','where','sequelize','col','predictiveIntervalTotalCalls','COUNT','literal','`state`\x20=\x204,\x201,\x20null','predictiveIntervalAnsweredCalls','`state`\x20=\x2010,\x201,\x20null','predictiveIntervalDroppedCallsTimeout','predictiveIntervalDroppedCallsCallersExit','AVG','`state`\x20=\x204,\x20`holdtime`,\x20null','predictiveIntervalAvgHoldtime','`state`\x20=\x204,\x20`talktime`,\x20null','findAll','campaign','name','`state`\x20=\x200,\x201,\x20null','outboundNoSuchCallsDay','`state`\x20=\x203,\x201,\x20null','outboundNoAnswerCallsDay','outboundAnswerCallsDay'];(function(_0x25db85,_0x118ed5){var _0xf1e8b0=function(_0x59c112){while(--_0x59c112){_0x25db85['push'](_0x25db85['shift']());}};_0xf1e8b0(++_0x118ed5);}(_0xbe0f,0x1d3));var _0xfbe0=function(_0x48bc08,_0x434787){_0x48bc08=_0x48bc08-0x0;var _0x411f29=_0xbe0f[_0x48bc08];return _0x411f29;};'use strict';var _=require(_0xfbe0('0x0'));var util=require(_0xfbe0('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xfbe0('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xfbe0('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0xfbe0('0x4'))(_0xfbe0('0x5'));var config=require(_0xfbe0('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xfbe0('0x7')][_0xfbe0('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x57e832,_0x2f0146,_0x1b8e67){return new BPromise(function(_0x1ce1c3,_0x1be56a){return client[_0xfbe0('0x9')](_0x57e832,_0x1b8e67)['then'](function(_0x2a572c){logger[_0xfbe0('0xa')](_0xfbe0('0xb'),_0x2f0146,_0xfbe0('0xc'));logger['debug'](_0xfbe0('0xd'),_0x2f0146,_0xfbe0('0xc'),JSON[_0xfbe0('0xe')](_0x2a572c));if(_0x2a572c[_0xfbe0('0xf')]){if(_0x2a572c[_0xfbe0('0xf')]['code']===0x1f4){logger[_0xfbe0('0xf')](_0xfbe0('0xb'),_0x2f0146,_0x2a572c['error'][_0xfbe0('0x10')]);return _0x1be56a(_0x2a572c[_0xfbe0('0xf')][_0xfbe0('0x10')]);}logger[_0xfbe0('0xf')](_0xfbe0('0xb'),_0x2f0146,_0x2a572c[_0xfbe0('0xf')][_0xfbe0('0x10')]);return _0x1ce1c3(_0x2a572c[_0xfbe0('0xf')][_0xfbe0('0x10')]);}else{logger[_0xfbe0('0xa')](_0xfbe0('0xb'),_0x2f0146,_0xfbe0('0xc'));_0x1ce1c3(_0x2a572c[_0xfbe0('0x11')][_0xfbe0('0x10')]);}})[_0xfbe0('0x12')](function(_0x325b8d){logger[_0xfbe0('0xf')]('CmHopperHistory,\x20%s,\x20%s',_0x2f0146,_0x325b8d);_0x1be56a(_0x325b8d);});});}exports['CreateCmHopperHistory']=function(_0x5db910){var _0x250631=this;return new Promise(function(_0x3bb90d,_0x4992d4){return db['CmHopperHistory'][_0xfbe0('0x13')](_0x5db910[_0xfbe0('0x14')],{'raw':_0x5db910['options']?_0x5db910[_0xfbe0('0x15')][_0xfbe0('0x16')]===undefined?!![]:![]:!![]})[_0xfbe0('0x17')](function(_0x3bdb0b){logger[_0xfbe0('0xa')](_0xfbe0('0x18'),_0x5db910);logger[_0xfbe0('0x19')](_0xfbe0('0x18'),_0x5db910,JSON[_0xfbe0('0xe')](_0x3bdb0b));_0x3bb90d(_0x3bdb0b);})[_0xfbe0('0x12')](function(_0x1821bb){logger['error'](_0xfbe0('0x18'),_0x1821bb['message'],_0x5db910);_0x4992d4(_0x250631[_0xfbe0('0xf')](0x1f4,_0x1821bb[_0xfbe0('0x10')]));});});};exports[_0xfbe0('0x1a')]=function(_0x4ca905){var _0xa4ddf7=this;return new Promise(function(_0x5d5e6c,_0x189188){return db[_0xfbe0('0x1b')]['findAll']({'raw':_0x4ca905['options']?_0x4ca905['options'][_0xfbe0('0x16')]===undefined?!![]:![]:!![],'where':_0x4ca905[_0xfbe0('0x15')]?_0x4ca905[_0xfbe0('0x15')][_0xfbe0('0x1c')]||null:null,'attributes':[[db[_0xfbe0('0x1d')]['fn']('COUNT',db[_0xfbe0('0x1d')][_0xfbe0('0x1e')]('id')),_0xfbe0('0x1f')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')](_0xfbe0('0x22')))),_0xfbe0('0x23')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')](_0xfbe0('0x24')))),_0xfbe0('0x25')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')]('`state`\x20=\x2011,\x201,\x20null'))),_0xfbe0('0x26')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x27'),db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')]['literal'](_0xfbe0('0x28')))),_0xfbe0('0x29')],[db['sequelize']['fn']('AVG',db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')](_0xfbe0('0x2a')))),'predictiveIntervalAvgTalktime']]})[_0xfbe0('0x17')](function(_0x2fcc2d){logger[_0xfbe0('0xa')](_0xfbe0('0x1a'),_0x4ca905);logger[_0xfbe0('0x19')](_0xfbe0('0x1a'),_0x4ca905,JSON[_0xfbe0('0xe')](_0x2fcc2d));_0x5d5e6c(_0x2fcc2d);})[_0xfbe0('0x12')](function(_0x46b8c2){logger[_0xfbe0('0xf')](_0xfbe0('0x1a'),_0x46b8c2[_0xfbe0('0x10')],_0x4ca905);_0x189188(_0xa4ddf7[_0xfbe0('0xf')](0x1f4,_0x46b8c2[_0xfbe0('0x10')]));});});};exports['GetVoiceQueueHopperHistory']=function(_0xdc1469){var _0x418143=this;return new Promise(function(_0x818acb,_0x215ff8){return db[_0xfbe0('0x1b')][_0xfbe0('0x2b')]({'raw':_0xdc1469['options']?_0xdc1469['options'][_0xfbe0('0x16')]===undefined?!![]:![]:!![],'where':_0xdc1469[_0xfbe0('0x15')]?_0xdc1469[_0xfbe0('0x15')][_0xfbe0('0x1c')]||null:null,'attributes':[[_0xfbe0('0x2c'),_0xfbe0('0x2d')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')]['literal'](_0xfbe0('0x2e')))),_0xfbe0('0x2f')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db['sequelize'][_0xfbe0('0x21')](_0xfbe0('0x30')))),_0xfbe0('0x31')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')]('`state`\x20=\x204,\x201,\x20null'))),_0xfbe0('0x32')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db['sequelize']['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')](_0xfbe0('0x33')))),_0xfbe0('0x34')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db['sequelize'][_0xfbe0('0x21')]('`state`\x20=\x208,\x201,\x20null'))),_0xfbe0('0x35')],[db['sequelize']['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db['sequelize'][_0xfbe0('0x21')](_0xfbe0('0x36')))),_0xfbe0('0x37')],[db[_0xfbe0('0x1d')]['fn']('COUNT',db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')](_0xfbe0('0x38')))),_0xfbe0('0x39')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')]('`state`\x20=\x2012,\x201,\x20null'))),_0xfbe0('0x3a')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db['sequelize'][_0xfbe0('0x21')](_0xfbe0('0x3b')))),_0xfbe0('0x3c')],[db['sequelize']['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')]['literal'](_0xfbe0('0x3d')))),_0xfbe0('0x3e')],[db['sequelize']['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')](_0xfbe0('0x3f')))),_0xfbe0('0x40')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db['sequelize'][_0xfbe0('0x21')](_0xfbe0('0x41')))),_0xfbe0('0x42')],[db[_0xfbe0('0x1d')]['fn']('COUNT',db[_0xfbe0('0x1d')]['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')](_0xfbe0('0x43')))),'outboundRejectCallsDay'],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db['sequelize']['fn']('IF',db[_0xfbe0('0x1d')][_0xfbe0('0x21')](_0xfbe0('0x44')))),_0xfbe0('0x45')]],'group':[_0xfbe0('0x2c')]})[_0xfbe0('0x17')](function(_0x47aa23){logger[_0xfbe0('0xa')]('GetVoiceQueueHopperHistory',_0xdc1469);logger[_0xfbe0('0x19')](_0xfbe0('0x46'),_0xdc1469,JSON[_0xfbe0('0xe')](_0x47aa23));_0x818acb(_0x47aa23);})[_0xfbe0('0x12')](function(_0x5586c6){logger[_0xfbe0('0xf')]('GetVoiceQueueHopperHistory',_0x5586c6[_0xfbe0('0x10')],_0xdc1469);_0x215ff8(_0x418143[_0xfbe0('0xf')](0x1f4,_0x5586c6[_0xfbe0('0x10')]));});});};exports['GetCampaignHopperHistory']=function(_0x43459c){var _0x382881=this;return new Promise(function(_0x2e27a4,_0x85c268){return db[_0xfbe0('0x1b')][_0xfbe0('0x2b')]({'raw':_0x43459c[_0xfbe0('0x15')]?_0x43459c[_0xfbe0('0x15')][_0xfbe0('0x16')]===undefined?!![]:![]:!![],'where':_0x43459c['options']?_0x43459c[_0xfbe0('0x15')][_0xfbe0('0x1c')]||null:null,'attributes':[['campaign','name'],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')][_0xfbe0('0x1e')]('id')),_0xfbe0('0x47')],[db[_0xfbe0('0x1d')]['fn'](_0xfbe0('0x20'),db[_0xfbe0('0x1d')]['fn']('IF',db['sequelize'][_0xfbe0('0x21')](_0xfbe0('0x22')))),_0xfbe0('0x48')]],'group':['campaign']})[_0xfbe0('0x17')](function(_0xb7e718){logger[_0xfbe0('0xa')](_0xfbe0('0x49'),_0x43459c);logger[_0xfbe0('0x19')](_0xfbe0('0x49'),_0x43459c,JSON[_0xfbe0('0xe')](_0xb7e718));_0x2e27a4(_0xb7e718);})[_0xfbe0('0x12')](function(_0xdf5e3d){logger[_0xfbe0('0xf')]('GetCampaignHopperHistory',_0xdf5e3d[_0xfbe0('0x10')],_0x43459c);_0x85c268(_0x382881[_0xfbe0('0xf')](0x1f4,_0xdf5e3d[_0xfbe0('0x10')]));});});};
\ No newline at end of file
index 9c7bd0d..97e71c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeff8=['../../config/environment','./cmHopperHistory.controller','get','index','/describe','isAuthenticated','/:id','show','create','put','update','exports','multer','util','connect-timeout','express','Router','../../components/interaction/service'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0xeff8,0x186));var _0x8eff=function(_0x9729d7,_0x1b79a8){_0x9729d7=_0x9729d7-0x0;var _0x3c4ac6=_0xeff8[_0x9729d7];return _0x3c4ac6;};'use strict';var multer=require(_0x8eff('0x0'));var util=require(_0x8eff('0x1'));var path=require('path');var timeout=require(_0x8eff('0x2'));var express=require(_0x8eff('0x3'));var router=express[_0x8eff('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x8eff('0x5'));var config=require(_0x8eff('0x6'));var controller=require(_0x8eff('0x7'));router[_0x8eff('0x8')]('/',auth['isAuthenticated'](),controller[_0x8eff('0x9')]);router[_0x8eff('0x8')](_0x8eff('0xa'),auth[_0x8eff('0xb')](),controller['describe']);router[_0x8eff('0x8')](_0x8eff('0xc'),auth[_0x8eff('0xb')](),controller[_0x8eff('0xd')]);router['post']('/',auth['isAuthenticated'](),controller[_0x8eff('0xe')]);router[_0x8eff('0xf')](_0x8eff('0xc'),auth['isAuthenticated'](),controller[_0x8eff('0x10')]);module[_0x8eff('0x11')]=router;
\ No newline at end of file
+var _0xf873=['describe','/:id','show','create','put','update','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmHopperHistory.controller','isAuthenticated','index','get'];(function(_0x122830,_0x8942bd){var _0x1eb4f4=function(_0x186653){while(--_0x186653){_0x122830['push'](_0x122830['shift']());}};_0x1eb4f4(++_0x8942bd);}(_0xf873,0xb2));var _0x3f87=function(_0x238bc5,_0x103277){_0x238bc5=_0x238bc5-0x0;var _0x5c8a73=_0xf873[_0x238bc5];return _0x5c8a73;};'use strict';var multer=require('multer');var util=require(_0x3f87('0x0'));var path=require(_0x3f87('0x1'));var timeout=require(_0x3f87('0x2'));var express=require(_0x3f87('0x3'));var router=express[_0x3f87('0x4')]();var auth=require(_0x3f87('0x5'));var interaction=require(_0x3f87('0x6'));var config=require(_0x3f87('0x7'));var controller=require(_0x3f87('0x8'));router['get']('/',auth[_0x3f87('0x9')](),controller[_0x3f87('0xa')]);router[_0x3f87('0xb')]('/describe',auth[_0x3f87('0x9')](),controller[_0x3f87('0xc')]);router[_0x3f87('0xb')](_0x3f87('0xd'),auth[_0x3f87('0x9')](),controller[_0x3f87('0xe')]);router['post']('/',auth[_0x3f87('0x9')](),controller[_0x3f87('0xf')]);router[_0x3f87('0x10')](_0x3f87('0xd'),auth[_0x3f87('0x9')](),controller[_0x3f87('0x11')]);module[_0x3f87('0x12')]=router;
\ No newline at end of file
index a67543a..2dc9ad5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x814b=['STRING','name','sequelize','exports'];(function(_0x27a46c,_0x3e0870){var _0x483aef=function(_0x486eeb){while(--_0x486eeb){_0x27a46c['push'](_0x27a46c['shift']());}};_0x483aef(++_0x3e0870);}(_0x814b,0x1a2));var _0xb814=function(_0x2a723e,_0x61bb43){_0x2a723e=_0x2a723e-0x0;var _0x48a0e1=_0x814b[_0x2a723e];return _0x48a0e1;};'use strict';var Sequelize=require(_0xb814('0x0'));module[_0xb814('0x1')]={'name':{'type':Sequelize[_0xb814('0x2')],'unique':_0xb814('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0xb814('0x2')]},'dialPrefix':{'type':Sequelize[_0xb814('0x2')]}};
\ No newline at end of file
+var _0xc4aa=['exports','STRING','name','sequelize'];(function(_0x15c310,_0x5a4df3){var _0x2be27e=function(_0x3eb197){while(--_0x3eb197){_0x15c310['push'](_0x15c310['shift']());}};_0x2be27e(++_0x5a4df3);}(_0xc4aa,0x1b7));var _0xac4a=function(_0x2070da,_0x45e586){_0x2070da=_0x2070da-0x0;var _0x4f9fe1=_0xc4aa[_0x2070da];return _0x4f9fe1;};'use strict';var Sequelize=require(_0xac4a('0x0'));module[_0xac4a('0x1')]={'name':{'type':Sequelize[_0xac4a('0x2')],'unique':_0xac4a('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0xac4a('0x2')]},'dialPrefix':{'type':Sequelize[_0xac4a('0x2')]}};
\ No newline at end of file
index 45f9b38..a0d34d1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeba8=['find','create','body','user','role','UserProfileSection','autoAssociation','catch','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','addDisposition','ListId','Disposition','getDispositions','findOne','map','rows','removeDispositions','ids','CmContact','tags','isArray','join','push','each','omit','success','dataValues','errors','message','CmCustomField','concat','format','cf_%d','raw','getContacts','getContactsCsv','CustomFields','writeFileSync','Content-disposition','setHeader','Content-type','text/csv','download','/tmp/list_%d_%s.csv','addCustomField','sequelize','TEXT','text','type','Sequelize','number','INTEGER','switch','BOOLEAN','defaultValue','addColumn','findAndCountAll','addAgents','spread','emit','userCmList:save','removeAgents','userCmList:remove','getAgents','User','html-pdf','rimraf','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','register','sendStatus','status','end','json','offset','set','Content-Range','apply','save','update','destroy','then','get','Lists','UserProfileResource','name','send','index','rawAttributes','keys','query','filters','attributes','intersection','model','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','where','merge','key','field','filter','options','CmList','count','includeAll','include','findAll','show','params'];(function(_0xaa7ea3,_0x149995){var _0x3956db=function(_0x34040f){while(--_0x34040f){_0xaa7ea3['push'](_0xaa7ea3['shift']());}};_0x3956db(++_0x149995);}(_0xeba8,0x1e4));var _0x8eba=function(_0x53361f,_0x3b2cb6){_0x53361f=_0x53361f-0x0;var _0x279237=_0xeba8[_0x53361f];return _0x279237;};'use strict';var pdf=require(_0x8eba('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x8eba('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x8eba('0x2'));var rp=require('request-promise');var moment=require(_0x8eba('0x3'));var BPromise=require(_0x8eba('0x4'));var Mustache=require(_0x8eba('0x5'));var util=require(_0x8eba('0x6'));var path=require('path');var sox=require(_0x8eba('0x7'));var csv=require(_0x8eba('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x8eba('0x9'));var squel=require(_0x8eba('0xa'));var crypto=require('crypto');var jsforce=require(_0x8eba('0xb'));var deskjs=require(_0x8eba('0xc'));var toCsv=require(_0x8eba('0x8'));var querystring=require(_0x8eba('0xd'));var Papa=require(_0x8eba('0xe'));var Redis=require(_0x8eba('0xf'));var authService=require(_0x8eba('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0x8eba('0x11'))(_0x8eba('0x12'));var utils=require(_0x8eba('0x13'));var config=require(_0x8eba('0x14'));var db=require(_0x8eba('0x15'))['db'];config[_0x8eba('0x16')]=_[_0x8eba('0x17')](config['redis'],{'host':_0x8eba('0x18'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x8eba('0x16')]));require('./cmList.socket')[_0x8eba('0x19')](socket);function respondWithStatusCode(_0x25471f,_0x1d6fab){_0x1d6fab=_0x1d6fab||0xcc;return function(_0x40d58c){if(_0x40d58c){return _0x25471f[_0x8eba('0x1a')](_0x1d6fab);}return _0x25471f[_0x8eba('0x1b')](_0x1d6fab)[_0x8eba('0x1c')]();};}function respondWithResult(_0x2e761a,_0x223b63){_0x223b63=_0x223b63||0xc8;return function(_0x31df6e){if(_0x31df6e){return _0x2e761a['status'](_0x223b63)[_0x8eba('0x1d')](_0x31df6e);}};}function respondWithFilteredResult(_0x4ccbbf,_0x2861df){return function(_0x75b401){if(_0x75b401){var _0x1712c8=_0x75b401['count'],_0x97e730=_0x2861df[_0x8eba('0x1e')],_0x52a769=_0x2861df['offset']+_0x2861df['limit'],_0xc94dc9;if(_0x52a769>=_0x1712c8){_0x52a769=_0x1712c8;_0xc94dc9=0xc8;}else{_0xc94dc9=0xce;}_0x4ccbbf[_0x8eba('0x1b')](_0xc94dc9);return _0x4ccbbf[_0x8eba('0x1f')](_0x8eba('0x20'),_0x97e730+'-'+_0x52a769+'/'+_0x1712c8)['json'](_0x75b401);}return null;};}function patchUpdates(_0x47c463){return function(_0x233692){try{jsonpatch[_0x8eba('0x21')](_0x233692,_0x47c463,!![]);}catch(_0x534a74){return BPromise['reject'](_0x534a74);}return _0x233692[_0x8eba('0x22')]();};}function saveUpdates(_0x3315c2,_0xb5010e){return function(_0x2e3d9b){if(_0x2e3d9b){return _0x2e3d9b[_0x8eba('0x23')](_0x3315c2)['then'](function(_0xd07d37){return _0xd07d37;});}return null;};}function removeEntity(_0xed9500,_0x502853){return function(_0x38375c){if(_0x38375c){return _0x38375c[_0x8eba('0x24')]()[_0x8eba('0x25')](function(){var _0x383d54=_0x38375c[_0x8eba('0x26')]({'plain':!![]});var _0x4c52cf=_0x8eba('0x27');return db[_0x8eba('0x28')][_0x8eba('0x24')]({'where':{'type':_0x4c52cf,'resourceId':_0x383d54['id']}})['then'](function(){return _0x38375c;});})[_0x8eba('0x25')](function(){_0xed9500[_0x8eba('0x1b')](0xcc)[_0x8eba('0x1c')]();});}};}function handleEntityNotFound(_0x337961,_0x4942cd){return function(_0x19e7c9){if(!_0x19e7c9){_0x337961['sendStatus'](0x194);}return _0x19e7c9;};}function handleError(_0x2ee109,_0x4f8de4){_0x4f8de4=_0x4f8de4||0x1f4;return function(_0x4b5a8b){logger['error'](_0x4b5a8b['stack']);if(_0x4b5a8b[_0x8eba('0x29')]){delete _0x4b5a8b[_0x8eba('0x29')];}_0x2ee109[_0x8eba('0x1b')](_0x4f8de4)[_0x8eba('0x2a')](_0x4b5a8b);};}exports[_0x8eba('0x2b')]=function(_0x56a1b8,_0x31c846){var _0x387d38={},_0x3891b8={},_0x487092={'count':0x0,'rows':[]};var _0x5c54cc=db['CmList'][_0x8eba('0x2c')];_0x3891b8['model']=_[_0x8eba('0x2d')](_0x5c54cc);_0x3891b8[_0x8eba('0x2e')]=_[_0x8eba('0x2d')](_0x56a1b8[_0x8eba('0x2e')]);_0x3891b8[_0x8eba('0x2f')]=_['intersection'](_0x3891b8['model'],_0x3891b8[_0x8eba('0x2e')]);_0x387d38[_0x8eba('0x30')]=_[_0x8eba('0x31')](_0x3891b8[_0x8eba('0x32')],qs[_0x8eba('0x33')](_0x56a1b8[_0x8eba('0x2e')][_0x8eba('0x33')]));_0x387d38[_0x8eba('0x30')]=_0x387d38[_0x8eba('0x30')][_0x8eba('0x34')]?_0x387d38[_0x8eba('0x30')]:_0x3891b8[_0x8eba('0x32')];if(!_0x56a1b8[_0x8eba('0x2e')][_0x8eba('0x35')](_0x8eba('0x36'))){_0x387d38[_0x8eba('0x37')]=qs['limit'](_0x56a1b8[_0x8eba('0x2e')][_0x8eba('0x37')]);_0x387d38[_0x8eba('0x1e')]=qs[_0x8eba('0x1e')](_0x56a1b8[_0x8eba('0x2e')][_0x8eba('0x1e')]);}_0x387d38[_0x8eba('0x38')]=qs[_0x8eba('0x39')](_0x56a1b8['query'][_0x8eba('0x39')]);_0x387d38['where']=qs[_0x8eba('0x2f')](_[_0x8eba('0x3a')](_0x56a1b8[_0x8eba('0x2e')],_0x3891b8['filters']));if(_0x56a1b8[_0x8eba('0x2e')]['filter']){_0x387d38[_0x8eba('0x3b')]=_[_0x8eba('0x3c')](_0x387d38[_0x8eba('0x3b')],{'$or':_['map'](_0x5c54cc,function(_0x18e14e){if(_0x18e14e['type'][_0x8eba('0x3d')]!=='VIRTUAL'){var _0x16df09={};_0x16df09[_0x18e14e[_0x8eba('0x3e')]]={'$like':'%'+_0x56a1b8[_0x8eba('0x2e')][_0x8eba('0x3f')]+'%'};return _0x16df09;}})});}_0x387d38=_[_0x8eba('0x3c')]({},_0x387d38,_0x56a1b8[_0x8eba('0x40')]);var _0x255268={'where':_0x387d38['where']};return db[_0x8eba('0x41')][_0x8eba('0x42')](_0x255268)['then'](function(_0x26982e){_0x487092[_0x8eba('0x42')]=_0x26982e;if(_0x56a1b8[_0x8eba('0x2e')][_0x8eba('0x43')]){_0x387d38[_0x8eba('0x44')]=[{'all':!![]}];}return db[_0x8eba('0x41')][_0x8eba('0x45')](_0x387d38);})[_0x8eba('0x25')](function(_0x2552d4){_0x487092['rows']=_0x2552d4;return _0x487092;})[_0x8eba('0x25')](respondWithFilteredResult(_0x31c846,_0x387d38))['catch'](handleError(_0x31c846,null));};exports[_0x8eba('0x46')]=function(_0x4c4678,_0x4c70fc){var _0x9afc6d={'raw':![],'where':{'id':_0x4c4678[_0x8eba('0x47')]['id']}},_0x13a8a4={};_0x13a8a4['model']=_[_0x8eba('0x2d')](db[_0x8eba('0x41')][_0x8eba('0x2c')]);_0x13a8a4[_0x8eba('0x2e')]=_[_0x8eba('0x2d')](_0x4c4678[_0x8eba('0x2e')]);_0x13a8a4[_0x8eba('0x2f')]=_['intersection'](_0x13a8a4[_0x8eba('0x32')],_0x13a8a4[_0x8eba('0x2e')]);_0x9afc6d[_0x8eba('0x30')]=_[_0x8eba('0x31')](_0x13a8a4[_0x8eba('0x32')],qs[_0x8eba('0x33')](_0x4c4678[_0x8eba('0x2e')][_0x8eba('0x33')]));_0x9afc6d[_0x8eba('0x30')]=_0x9afc6d[_0x8eba('0x30')]['length']?_0x9afc6d[_0x8eba('0x30')]:_0x13a8a4['model'];if(_0x4c4678['query']['includeAll']){_0x9afc6d[_0x8eba('0x44')]=[{'all':!![]}];}_0x9afc6d=_['merge']({},_0x9afc6d,_0x4c4678[_0x8eba('0x40')]);return db[_0x8eba('0x41')][_0x8eba('0x48')](_0x9afc6d)['then'](handleEntityNotFound(_0x4c70fc,null))[_0x8eba('0x25')](respondWithResult(_0x4c70fc,null))['catch'](handleError(_0x4c70fc,null));};exports[_0x8eba('0x49')]=function(_0xfaaef0,_0x8a9788){return db['CmList'][_0x8eba('0x49')](_0xfaaef0[_0x8eba('0x4a')],{})[_0x8eba('0x25')](function(_0x5bf5ce){var _0x1e0453=_0xfaaef0[_0x8eba('0x4b')][_0x8eba('0x26')]({'plain':!![]});if(!_0x1e0453)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x1e0453[_0x8eba('0x4c')]===_0x8eba('0x4b')){var _0x1b113b=_0x5bf5ce['get']({'plain':!![]});var _0x16da18=_0x8eba('0x27');return db[_0x8eba('0x4d')]['find']({'where':{'name':_0x16da18,'userProfileId':_0x1e0453['userProfileId']},'raw':!![]})['then'](function(_0x31f341){if(_0x31f341&&_0x31f341[_0x8eba('0x4e')]===0x0){return db[_0x8eba('0x28')][_0x8eba('0x49')]({'name':_0x1b113b[_0x8eba('0x29')],'resourceId':_0x1b113b['id'],'type':_0x31f341['name'],'sectionId':_0x31f341['id']},{})[_0x8eba('0x25')](function(){return _0x5bf5ce;});}else{return _0x5bf5ce;}})[_0x8eba('0x4f')](function(_0x32c47a){logger[_0x8eba('0x50')](_0x8eba('0x51'),_0x32c47a);throw _0x32c47a;});}return _0x5bf5ce;})['then'](respondWithResult(_0x8a9788,0xc9))[_0x8eba('0x4f')](handleError(_0x8a9788,null));};exports[_0x8eba('0x23')]=function(_0x1af265,_0x181412){if(_0x1af265['body']['id']){delete _0x1af265[_0x8eba('0x4a')]['id'];}return db[_0x8eba('0x41')][_0x8eba('0x48')]({'where':{'id':_0x1af265['params']['id']}})[_0x8eba('0x25')](handleEntityNotFound(_0x181412,null))[_0x8eba('0x25')](saveUpdates(_0x1af265[_0x8eba('0x4a')],null))[_0x8eba('0x25')](respondWithResult(_0x181412,null))[_0x8eba('0x4f')](handleError(_0x181412,null));};exports[_0x8eba('0x24')]=function(_0xd5c201,_0x5e9548){return db['CmList'][_0x8eba('0x48')]({'where':{'id':_0xd5c201['params']['id']}})[_0x8eba('0x25')](handleEntityNotFound(_0x5e9548,null))[_0x8eba('0x25')](removeEntity(_0x5e9548,null))['catch'](handleError(_0x5e9548,null));};exports[_0x8eba('0x52')]=function(_0x560724,_0x2a247c){return db['CmList'][_0x8eba('0x52')]()[_0x8eba('0x25')](respondWithResult(_0x2a247c,null))['catch'](handleError(_0x2a247c,null));};exports[_0x8eba('0x53')]=function(_0x54ac51,_0x1f3597,_0x2ea024){if(_0x54ac51[_0x8eba('0x4a')]['id']){delete _0x54ac51[_0x8eba('0x4a')]['id'];}return db[_0x8eba('0x41')][_0x8eba('0x48')]({'where':{'id':_0x54ac51['params']['id']}})[_0x8eba('0x25')](handleEntityNotFound(_0x1f3597,null))[_0x8eba('0x25')](function(_0x1c694e){if(_0x1c694e){_0x54ac51['body'][_0x8eba('0x54')]=_0x1c694e['id'];return db[_0x8eba('0x55')]['create'](_0x54ac51[_0x8eba('0x4a')]);}})['then'](respondWithResult(_0x1f3597,null))[_0x8eba('0x4f')](handleError(_0x1f3597,null));};exports[_0x8eba('0x56')]=function(_0x6ca272,_0x2a487d,_0x38c24d){var _0x4ff92b={'raw':![],'where':{}};var _0x19627b={};var _0xe7952={'count':0x0,'rows':[]};return db[_0x8eba('0x41')][_0x8eba('0x57')]({'where':{'id':_0x6ca272[_0x8eba('0x47')]['id']}})[_0x8eba('0x25')](handleEntityNotFound(_0x2a487d,null))[_0x8eba('0x25')](function(_0x57819e){if(_0x57819e){_0x19627b['model']=_[_0x8eba('0x2d')](db['Disposition'][_0x8eba('0x2c')]);_0x19627b['query']=_[_0x8eba('0x2d')](_0x6ca272[_0x8eba('0x2e')]);_0x19627b[_0x8eba('0x2f')]=_[_0x8eba('0x31')](_0x19627b['model'],_0x19627b['query']);_0x4ff92b[_0x8eba('0x30')]=_[_0x8eba('0x31')](_0x19627b[_0x8eba('0x32')],qs[_0x8eba('0x33')](_0x6ca272[_0x8eba('0x2e')]['fields']));_0x4ff92b[_0x8eba('0x30')]=_0x4ff92b[_0x8eba('0x30')]['length']?_0x4ff92b[_0x8eba('0x30')]:_0x19627b[_0x8eba('0x32')];if(!_0x6ca272[_0x8eba('0x2e')][_0x8eba('0x35')](_0x8eba('0x36'))){_0x4ff92b[_0x8eba('0x37')]=qs[_0x8eba('0x37')](_0x6ca272[_0x8eba('0x2e')][_0x8eba('0x37')]);_0x4ff92b[_0x8eba('0x1e')]=qs[_0x8eba('0x1e')](_0x6ca272['query']['offset']);}_0x4ff92b[_0x8eba('0x38')]=qs[_0x8eba('0x39')](_0x6ca272['query'][_0x8eba('0x39')]);_0x4ff92b['where']=qs['filters'](_[_0x8eba('0x3a')](_0x6ca272[_0x8eba('0x2e')],_0x19627b[_0x8eba('0x2f')]));_0x4ff92b[_0x8eba('0x3b')]['ListId']=_0x57819e['id'];if(_0x6ca272['query'][_0x8eba('0x3f')]){_0x4ff92b[_0x8eba('0x3b')]=_[_0x8eba('0x3c')](_0x4ff92b['where'],{'$or':_[_0x8eba('0x58')](_0x4ff92b[_0x8eba('0x30')],function(_0x464511){var _0x230370={};_0x230370[_0x464511]={'$like':'%'+_0x6ca272[_0x8eba('0x2e')][_0x8eba('0x3f')]+'%'};return _0x230370;})});}_0x4ff92b=_[_0x8eba('0x3c')]({},_0x4ff92b,_0x6ca272[_0x8eba('0x40')]);return db[_0x8eba('0x55')][_0x8eba('0x42')]({'where':_0x4ff92b[_0x8eba('0x3b')]})[_0x8eba('0x25')](function(_0x3b0fa1){_0xe7952['count']=_0x3b0fa1;if(_0x6ca272[_0x8eba('0x2e')][_0x8eba('0x43')]){_0x4ff92b[_0x8eba('0x44')]=[{'all':!![]}];}return db[_0x8eba('0x55')]['findAll'](_0x4ff92b);})[_0x8eba('0x25')](function(_0x3e21a5){_0xe7952[_0x8eba('0x59')]=_0x3e21a5;return _0xe7952;});}})[_0x8eba('0x25')](respondWithFilteredResult(_0x2a487d,_0x4ff92b))['catch'](handleError(_0x2a487d,null));};exports[_0x8eba('0x5a')]=function(_0x3f4f61,_0x23a52b,_0x496657){return db[_0x8eba('0x41')][_0x8eba('0x48')]({'where':{'id':_0x3f4f61[_0x8eba('0x47')]['id']}})[_0x8eba('0x25')](handleEntityNotFound(_0x23a52b,null))[_0x8eba('0x25')](function(_0x21e480){if(_0x21e480){return _0x21e480[_0x8eba('0x5a')](_0x3f4f61[_0x8eba('0x2e')][_0x8eba('0x5b')]);}})[_0x8eba('0x25')](respondWithStatusCode(_0x23a52b,null))[_0x8eba('0x4f')](handleError(_0x23a52b,null));};exports['addContacts']=function(_0x42825e,_0x599e1b,_0x3f70f4){return db[_0x8eba('0x41')][_0x8eba('0x48')]({'where':{'id':_0x42825e[_0x8eba('0x47')]['id']}})[_0x8eba('0x25')](handleEntityNotFound(_0x599e1b,null))[_0x8eba('0x25')](function(_0x1adb49){if(_0x1adb49){var _0x501860=[];var _0x371fc1={'success':[],'errors':[]};return db[_0x8eba('0x5c')][_0x8eba('0x52')]()['then'](function(_0x36f24d){if(_0x42825e[_0x8eba('0x4a')][_0x8eba('0x5d')]&&_[_0x8eba('0x5e')](_0x42825e[_0x8eba('0x4a')]['tags'])){if(_0x42825e[_0x8eba('0x4a')][_0x8eba('0x5d')]['length']){_0x42825e[_0x8eba('0x4a')][_0x8eba('0x5d')]=_0x42825e[_0x8eba('0x4a')][_0x8eba('0x5d')][_0x8eba('0x5f')](';')+';';}else{_0x42825e[_0x8eba('0x4a')][_0x8eba('0x5d')]=null;}}else{_0x42825e[_0x8eba('0x4a')][_0x8eba('0x5d')]=null;}if(_0x42825e[_0x8eba('0x4a')]&&_['isArray'](_0x42825e['body'])){for(var _0x32680b=0x0;_0x32680b<_0x42825e[_0x8eba('0x4a')]['length'];_0x32680b+=0x1){_0x42825e['body'][_0x32680b][_0x8eba('0x54')]=_0x42825e[_0x8eba('0x47')]['id'];_0x501860[_0x8eba('0x60')](_0x42825e[_0x8eba('0x4a')][_0x32680b]);}return BPromise[_0x8eba('0x61')](_0x501860,function(_0x5f30bd){return db[_0x8eba('0x5c')][_0x8eba('0x49')](_[_0x8eba('0x62')](_0x5f30bd,[_0x8eba('0x5b'),'id'])||{},{'fields':_['keys'](_0x36f24d),'raw':!![]})[_0x8eba('0x25')](function(_0x3d8f78){_0x371fc1[_0x8eba('0x63')][_0x8eba('0x60')](_0x3d8f78[_0x8eba('0x64')]);})[_0x8eba('0x4f')](function(_0x21e33e){_0x371fc1[_0x8eba('0x65')][_0x8eba('0x60')]({'data':_0x5f30bd,'error':_0x21e33e[_0x8eba('0x66')]});});})[_0x8eba('0x25')](function(_0x60029a){return _0x371fc1;})[_0x8eba('0x4f')](function(_0x49804f){return _0x49804f;});}else{_0x599e1b[_0x8eba('0x1b')](0x190)[_0x8eba('0x1d')]({'message':'Malformed\x20request\x20syntax'});}});}})['then'](respondWithResult(_0x599e1b,null))[_0x8eba('0x4f')](handleError(_0x599e1b,null));};exports['getContacts']=function(_0x87ba46,_0x18919f,_0x215a78){var _0x1258ef;return db[_0x8eba('0x41')]['find']({'where':{'id':_0x87ba46[_0x8eba('0x47')]['id']},'include':[{'model':db[_0x8eba('0x67')],'as':'CustomFields'}]})[_0x8eba('0x25')](handleEntityNotFound(_0x18919f,null))[_0x8eba('0x25')](function(_0x4c6417){if(_0x4c6417){_0x1258ef=_0x4c6417;return db[_0x8eba('0x5c')][_0x8eba('0x2c')];}})[_0x8eba('0x25')](function(_0xdb5626){if(_0xdb5626){var _0x23a5a9={};var _0x857506={};_0x857506['model']=_[_0x8eba('0x68')](_[_0x8eba('0x2d')](_0xdb5626),_[_0x8eba('0x58')](_0x1258ef['CustomFields'],function(_0x157d62){return util[_0x8eba('0x69')](_0x8eba('0x6a'),_0x157d62['id']);}));_0x857506['query']=_[_0x8eba('0x2d')](_0x87ba46[_0x8eba('0x2e')]);_0x857506[_0x8eba('0x2f')]=_[_0x8eba('0x31')](_0x857506['model'],_0x857506['query']);_0x23a5a9['attributes']=_[_0x8eba('0x31')](_0x857506['model'],qs[_0x8eba('0x33')](_0x87ba46['query']['fields']));_0x23a5a9[_0x8eba('0x30')]=_0x23a5a9['attributes'][_0x8eba('0x34')]?_0x23a5a9[_0x8eba('0x30')]:_0x857506['model'];if(!_0x87ba46[_0x8eba('0x2e')][_0x8eba('0x35')]('nolimit')){_0x23a5a9[_0x8eba('0x37')]=qs[_0x8eba('0x37')](_0x87ba46[_0x8eba('0x2e')][_0x8eba('0x37')]);_0x23a5a9['offset']=qs['offset'](_0x87ba46['query'][_0x8eba('0x1e')]);}_0x23a5a9[_0x8eba('0x38')]=qs[_0x8eba('0x39')](_0x87ba46[_0x8eba('0x2e')][_0x8eba('0x39')]);_0x23a5a9['where']=qs['filters'](_['pick'](_0x87ba46['query'],_0x857506['filters']));_0x23a5a9[_0x8eba('0x6b')]=!![];if(_0x87ba46[_0x8eba('0x2e')][_0x8eba('0x3f')]){_0x23a5a9[_0x8eba('0x3b')]=_[_0x8eba('0x3c')](_0x23a5a9['where'],{'$or':_[_0x8eba('0x58')](_0x23a5a9[_0x8eba('0x30')],function(_0x191e49){var _0xe3e41={};_0xe3e41[_0x191e49]={'$like':'%'+_0x87ba46[_0x8eba('0x2e')]['filter']+'%'};return _0xe3e41;})});}_0x23a5a9=_[_0x8eba('0x3c')]({},_0x23a5a9,_0x87ba46[_0x8eba('0x40')]);return _0x1258ef[_0x8eba('0x6c')](_0x23a5a9);}})[_0x8eba('0x25')](respondWithResult(_0x18919f,null))[_0x8eba('0x4f')](handleError(_0x18919f,null));};exports[_0x8eba('0x6d')]=function(_0x590ca5,_0x20aad0,_0x16c495){var _0x4d0033;return db[_0x8eba('0x41')][_0x8eba('0x48')]({'where':{'id':_0x590ca5[_0x8eba('0x47')]['id']},'include':[{'model':db['CmCustomField'],'as':_0x8eba('0x6e')}]})[_0x8eba('0x25')](handleEntityNotFound(_0x20aad0,null))[_0x8eba('0x25')](function(_0x338a1b){if(_0x338a1b){_0x4d0033=_0x338a1b;return db[_0x8eba('0x5c')][_0x8eba('0x2c')];}})['then'](function(_0x26aacd){if(_0x26aacd){var _0x2b5d8a={};var _0x24810d={};_0x24810d[_0x8eba('0x32')]=_[_0x8eba('0x68')](_[_0x8eba('0x2d')](_0x26aacd),_[_0x8eba('0x58')](_0x4d0033[_0x8eba('0x6e')],function(_0x36bbad){return util[_0x8eba('0x69')]('cf_%d',_0x36bbad['id']);}));_0x24810d[_0x8eba('0x2e')]=_[_0x8eba('0x2d')](_0x590ca5['query']);_0x24810d[_0x8eba('0x2f')]=_[_0x8eba('0x31')](_0x24810d[_0x8eba('0x32')],_0x24810d[_0x8eba('0x2e')]);_0x2b5d8a['attributes']=_[_0x8eba('0x31')](_0x24810d[_0x8eba('0x32')],qs[_0x8eba('0x33')](_0x590ca5[_0x8eba('0x2e')]['fields']));_0x2b5d8a[_0x8eba('0x30')]=_0x2b5d8a[_0x8eba('0x30')]['length']?_0x2b5d8a[_0x8eba('0x30')]:_0x24810d['model'];if(!_0x590ca5[_0x8eba('0x2e')][_0x8eba('0x35')]('nolimit')){_0x2b5d8a[_0x8eba('0x37')]=qs[_0x8eba('0x37')](_0x590ca5[_0x8eba('0x2e')]['limit']);_0x2b5d8a[_0x8eba('0x1e')]=qs[_0x8eba('0x1e')](_0x590ca5['query']['offset']);}_0x2b5d8a['order']=qs[_0x8eba('0x39')](_0x590ca5[_0x8eba('0x2e')][_0x8eba('0x39')]);_0x2b5d8a['where']=qs[_0x8eba('0x2f')](_[_0x8eba('0x3a')](_0x590ca5[_0x8eba('0x2e')],_0x24810d['filters']));_0x2b5d8a[_0x8eba('0x6b')]=!![];if(_0x590ca5[_0x8eba('0x2e')]['filter']){_0x2b5d8a[_0x8eba('0x3b')]=_[_0x8eba('0x3c')](_0x2b5d8a[_0x8eba('0x3b')],{'$or':_[_0x8eba('0x58')](_0x2b5d8a[_0x8eba('0x30')],function(_0x26201b){var _0x57f7da={};_0x57f7da[_0x26201b]={'$like':'%'+_0x590ca5['query']['filter']+'%'};return _0x57f7da;})});}_0x2b5d8a=_['merge']({},_0x2b5d8a,_0x590ca5[_0x8eba('0x40')]);return _0x4d0033[_0x8eba('0x6c')](_0x2b5d8a);}})['then'](function(_0x454f65){if(!_['isEmpty'](_0x454f65)){var _0x10d5ac=toCsv(_0x454f65);var _0x1616f1=Date['now']();fs[_0x8eba('0x6f')](util[_0x8eba('0x69')]('/tmp/list_%d_%s.csv',_0x4d0033['id'],_0x1616f1),_0x10d5ac);_0x20aad0['setHeader'](_0x8eba('0x70'),'attachment;\x20filename='+util[_0x8eba('0x69')]('list_%d_%s.csv',_0x4d0033['id'],_0x1616f1));_0x20aad0[_0x8eba('0x71')](_0x8eba('0x72'),_0x8eba('0x73'));return _0x20aad0[_0x8eba('0x74')](util['format'](_0x8eba('0x75'),_0x4d0033['id'],_0x1616f1));}else{return _0x20aad0[_0x8eba('0x1a')](0xcc);}})['catch'](handleError(_0x20aad0,null));};exports[_0x8eba('0x76')]=function(_0x504a3a,_0x5aae7e,_0x391686){var _0x11c34a;delete _0x504a3a['body']['id'];return db[_0x8eba('0x41')][_0x8eba('0x57')]({'where':{'id':_0x504a3a[_0x8eba('0x47')]['id']}})[_0x8eba('0x25')](handleEntityNotFound(_0x5aae7e,null))['then'](function(_0x58af36){if(_0x58af36){return db[_0x8eba('0x77')]['transaction'](function(_0x4b24e0){return db['CmCustomField'][_0x8eba('0x49')](_0x504a3a[_0x8eba('0x4a')],{'transaction':_0x4b24e0})[_0x8eba('0x25')](function(_0x3467ab){_0x11c34a=_0x3467ab;return _0x58af36['addCustomFields'](_0x3467ab,{'transaction':_0x4b24e0});})[_0x8eba('0x25')](function(){var _0x11e7c2={'type':db['Sequelize'][_0x8eba('0x78')],'transaction':_0x4b24e0};switch(_0x504a3a['body']['type']){case _0x8eba('0x79'):_0x11e7c2[_0x8eba('0x7a')]=db[_0x8eba('0x7b')][_0x8eba('0x78')];break;case _0x8eba('0x7c'):_0x11e7c2['type']=db[_0x8eba('0x7b')][_0x8eba('0x7d')];break;case _0x8eba('0x7e'):_0x11e7c2[_0x8eba('0x7a')]=db[_0x8eba('0x7b')][_0x8eba('0x7f')];_0x11e7c2[_0x8eba('0x80')]=![];break;default:}return db['sequelize']['queryInterface'][_0x8eba('0x81')]('cm_contacts',util[_0x8eba('0x69')]('cf_%s',_0x11c34a['id']),_0x11e7c2);})[_0x8eba('0x25')](function(){return _0x11c34a;});});}})['then'](respondWithResult(_0x5aae7e,null))[_0x8eba('0x4f')](handleError(_0x5aae7e,null));};exports['getCustomFields']=function(_0x54f86e,_0x4ae3b9,_0xf94411){var _0x473bff={};var _0x4c29e1={};var _0x47c0f4;var _0x5a84d8;return db['CmList'][_0x8eba('0x57')]({'where':{'id':_0x54f86e[_0x8eba('0x47')]['id']}})['then'](handleEntityNotFound(_0x4ae3b9,null))[_0x8eba('0x25')](function(_0x4ed340){if(_0x4ed340){_0x47c0f4=_0x4ed340;_0x4c29e1['model']=_[_0x8eba('0x2d')](db[_0x8eba('0x67')]['rawAttributes']);_0x4c29e1['query']=_['keys'](_0x54f86e['query']);_0x4c29e1[_0x8eba('0x2f')]=_[_0x8eba('0x31')](_0x4c29e1[_0x8eba('0x32')],_0x4c29e1[_0x8eba('0x2e')]);_0x473bff[_0x8eba('0x30')]=_['intersection'](_0x4c29e1[_0x8eba('0x32')],qs[_0x8eba('0x33')](_0x54f86e[_0x8eba('0x2e')][_0x8eba('0x33')]));_0x473bff[_0x8eba('0x30')]=_0x473bff[_0x8eba('0x30')]['length']?_0x473bff[_0x8eba('0x30')]:_0x4c29e1[_0x8eba('0x32')];_0x473bff[_0x8eba('0x38')]=qs[_0x8eba('0x39')](_0x54f86e[_0x8eba('0x2e')][_0x8eba('0x39')]);_0x473bff[_0x8eba('0x3b')]=qs[_0x8eba('0x2f')](_[_0x8eba('0x3a')](_0x54f86e[_0x8eba('0x2e')],_0x4c29e1[_0x8eba('0x2f')]));_0x473bff['where']=_['merge'](_0x473bff[_0x8eba('0x3b')],{'$or':[{'ListId':_0x4ed340['id']},{'ListId':null}]});if(_0x54f86e[_0x8eba('0x2e')][_0x8eba('0x3f')]){_0x473bff['where']=_[_0x8eba('0x3c')](_0x473bff[_0x8eba('0x3b')],{'$or':_['map'](_0x473bff[_0x8eba('0x30')],function(_0x5d7052){var _0xc7ec33={};_0xc7ec33[_0x5d7052]={'$like':'%'+_0x54f86e['query'][_0x8eba('0x3f')]+'%'};return _0xc7ec33;})});}_0x473bff=_[_0x8eba('0x3c')]({},_0x473bff,_0x54f86e[_0x8eba('0x40')]);return db[_0x8eba('0x67')][_0x8eba('0x82')](_0x473bff);}})['then'](respondWithResult(_0x4ae3b9,null))[_0x8eba('0x4f')](handleError(_0x4ae3b9,null));};exports['addAgents']=function(_0x43f45f,_0x32834b,_0x554145){return db[_0x8eba('0x41')][_0x8eba('0x48')]({'where':{'id':_0x43f45f[_0x8eba('0x47')]['id']}})['then'](handleEntityNotFound(_0x32834b,null))[_0x8eba('0x25')](function(_0x4d17fd){if(_0x4d17fd){return _0x4d17fd[_0x8eba('0x83')](_0x43f45f[_0x8eba('0x4a')][_0x8eba('0x5b')],_[_0x8eba('0x62')](_0x43f45f[_0x8eba('0x4a')],[_0x8eba('0x5b'),'id'])||{})[_0x8eba('0x84')](function(_0x7b4797){for(var _0x593682=0x0;_0x593682<_0x43f45f[_0x8eba('0x4a')][_0x8eba('0x5b')][_0x8eba('0x34')];_0x593682+=0x1){socket[_0x8eba('0x85')](_0x8eba('0x86'),{'UserId':_0x43f45f[_0x8eba('0x4a')][_0x8eba('0x5b')][_0x593682],'CmListId':_0x43f45f['params']['id']});}return _0x7b4797;});}})[_0x8eba('0x25')](respondWithResult(_0x32834b,null))[_0x8eba('0x4f')](handleError(_0x32834b,null));};exports[_0x8eba('0x87')]=function(_0x131adc,_0x46e66b,_0x1bf887){return db[_0x8eba('0x41')][_0x8eba('0x48')]({'where':{'id':_0x131adc[_0x8eba('0x47')]['id']}})['then'](handleEntityNotFound(_0x46e66b,null))[_0x8eba('0x25')](function(_0x590b73){if(_0x590b73){return _0x590b73[_0x8eba('0x87')](_0x131adc['query'][_0x8eba('0x5b')])[_0x8eba('0x25')](function(){if(_[_0x8eba('0x5e')](_0x131adc[_0x8eba('0x2e')][_0x8eba('0x5b')])){for(var _0x38c7cf=0x0;_0x38c7cf<_0x131adc[_0x8eba('0x2e')][_0x8eba('0x5b')][_0x8eba('0x34')];_0x38c7cf+=0x1){socket[_0x8eba('0x85')](_0x8eba('0x88'),{'UserId':Number(_0x131adc['query'][_0x8eba('0x5b')][_0x38c7cf]),'CmListId':Number(_0x131adc['params']['id'])});}}else{socket[_0x8eba('0x85')](_0x8eba('0x88'),{'UserId':Number(_0x131adc['query'][_0x8eba('0x5b')]),'CmListId':Number(_0x131adc[_0x8eba('0x47')]['id'])});}});}})[_0x8eba('0x25')](respondWithStatusCode(_0x46e66b,null))['catch'](handleError(_0x46e66b,null));};exports[_0x8eba('0x89')]=function(_0x191998,_0x223692,_0x46b0bd){var _0x2d694f={};var _0x3fc06d={};var _0x4f5ba6;var _0xd2dc71;return db[_0x8eba('0x41')][_0x8eba('0x57')]({'where':{'id':_0x191998[_0x8eba('0x47')]['id']}})['then'](handleEntityNotFound(_0x223692,null))[_0x8eba('0x25')](function(_0x6091d8){if(_0x6091d8){_0x4f5ba6=_0x6091d8;_0x3fc06d[_0x8eba('0x32')]=_['keys'](db[_0x8eba('0x8a')][_0x8eba('0x2c')]);_0x3fc06d['query']=_[_0x8eba('0x2d')](_0x191998['query']);_0x3fc06d['filters']=_[_0x8eba('0x31')](_0x3fc06d[_0x8eba('0x32')],_0x3fc06d[_0x8eba('0x2e')]);_0x2d694f['attributes']=_[_0x8eba('0x31')](_0x3fc06d[_0x8eba('0x32')],qs['fields'](_0x191998[_0x8eba('0x2e')]['fields']));_0x2d694f['attributes']=_0x2d694f[_0x8eba('0x30')][_0x8eba('0x34')]?_0x2d694f[_0x8eba('0x30')]:_0x3fc06d['model'];_0x2d694f[_0x8eba('0x38')]=qs['sort'](_0x191998[_0x8eba('0x2e')][_0x8eba('0x39')]);_0x2d694f[_0x8eba('0x3b')]=qs[_0x8eba('0x2f')](_[_0x8eba('0x3a')](_0x191998['query'],_0x3fc06d[_0x8eba('0x2f')]));if(_0x191998[_0x8eba('0x2e')][_0x8eba('0x3f')]){_0x2d694f[_0x8eba('0x3b')]=_[_0x8eba('0x3c')](_0x2d694f['where'],{'$or':_['map'](_0x2d694f[_0x8eba('0x30')],function(_0x5e6195){var _0x4fa186={};_0x4fa186[_0x5e6195]={'$like':'%'+_0x191998[_0x8eba('0x2e')][_0x8eba('0x3f')]+'%'};return _0x4fa186;})});}_0x2d694f=_[_0x8eba('0x3c')]({},_0x2d694f,_0x191998[_0x8eba('0x40')]);return _0x4f5ba6[_0x8eba('0x89')](_0x2d694f);}})[_0x8eba('0x25')](function(_0x53dc89){if(_0x53dc89){_0xd2dc71=_0x53dc89['length'];if(!_0x191998[_0x8eba('0x2e')]['hasOwnProperty'](_0x8eba('0x36'))){_0x2d694f[_0x8eba('0x37')]=qs[_0x8eba('0x37')](_0x191998[_0x8eba('0x2e')]['limit']);_0x2d694f[_0x8eba('0x1e')]=qs[_0x8eba('0x1e')](_0x191998[_0x8eba('0x2e')][_0x8eba('0x1e')]);}return _0x4f5ba6[_0x8eba('0x89')](_0x2d694f);}})['then'](function(_0x1873ce){if(_0x1873ce){return _0x1873ce?{'count':_0xd2dc71,'rows':_0x1873ce}:null;}})[_0x8eba('0x25')](respondWithResult(_0x223692,null))[_0x8eba('0x4f')](handleError(_0x223692,null));};
\ No newline at end of file
+var _0xe16c=['VIRTUAL','merge','options','includeAll','include','findAll','rows','catch','params','find','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','Lists','UserProfileSection','userProfileId','autoAssociation','name','describe','addDisposition','ListId','getDispositions','findOne','Disposition','length','nolimit','removeDispositions','ids','CmContact','tags','join','isArray','each','create','omit','push','dataValues','errors','message','Malformed\x20request\x20syntax','CmCustomField','CustomFields','cf_%d','raw','getContacts','getContactsCsv','concat','isEmpty','writeFileSync','/tmp/list_%d_%s.csv','Content-disposition','attachment;\x20filename=','format','list_%d_%s.csv','setHeader','Content-type','text/csv','download','addCustomField','sequelize','transaction','addCustomFields','TEXT','text','Sequelize','number','INTEGER','switch','defaultValue','queryInterface','cf_%s','getCustomFields','findAndCountAll','addAgents','spread','userCmList:save','removeAgents','emit','userCmList:remove','getAgents','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','squel','jsforce','desk.js','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','./cmList.socket','register','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','destroy','then','get','error','stack','send','index','CmList','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','order','sort','where','pick','filter','map','type'];(function(_0x8e90e1,_0x17d5b5){var _0xd793eb=function(_0x493b5e){while(--_0x493b5e){_0x8e90e1['push'](_0x8e90e1['shift']());}};_0xd793eb(++_0x17d5b5);}(_0xe16c,0x171));var _0xce16=function(_0x45fc47,_0x91c95){_0x45fc47=_0x45fc47-0x0;var _0x3d06d7=_0xe16c[_0x45fc47];return _0x3d06d7;};'use strict';var pdf=require(_0xce16('0x0'));var emlformat=require(_0xce16('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xce16('0x2'));var rp=require(_0xce16('0x3'));var moment=require(_0xce16('0x4'));var BPromise=require(_0xce16('0x5'));var Mustache=require(_0xce16('0x6'));var util=require(_0xce16('0x7'));var path=require(_0xce16('0x8'));var sox=require(_0xce16('0x9'));var csv=require(_0xce16('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xce16('0xb'));var crypto=require('crypto');var jsforce=require(_0xce16('0xc'));var deskjs=require(_0xce16('0xd'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xce16('0xe'));var Redis=require(_0xce16('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xce16('0x10'));var hardwareService=require(_0xce16('0x11'));var logger=require(_0xce16('0x12'))('api');var utils=require(_0xce16('0x13'));var config=require(_0xce16('0x14'));var db=require(_0xce16('0x15'))['db'];config[_0xce16('0x16')]=_[_0xce16('0x17')](config[_0xce16('0x16')],{'host':_0xce16('0x18'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xce16('0x16')]));require(_0xce16('0x19'))[_0xce16('0x1a')](socket);function respondWithStatusCode(_0xea85ac,_0x4aaee7){_0x4aaee7=_0x4aaee7||0xcc;return function(_0x2357e3){if(_0x2357e3){return _0xea85ac[_0xce16('0x1b')](_0x4aaee7);}return _0xea85ac[_0xce16('0x1c')](_0x4aaee7)[_0xce16('0x1d')]();};}function respondWithResult(_0x4f8bb3,_0xcfa2fc){_0xcfa2fc=_0xcfa2fc||0xc8;return function(_0x4778b2){if(_0x4778b2){return _0x4f8bb3['status'](_0xcfa2fc)[_0xce16('0x1e')](_0x4778b2);}};}function respondWithFilteredResult(_0xd6d3e,_0x244c57){return function(_0x121163){if(_0x121163){var _0x5bbc3a=_0x121163[_0xce16('0x1f')],_0x56cf0c=_0x244c57[_0xce16('0x20')],_0x509a5b=_0x244c57[_0xce16('0x20')]+_0x244c57[_0xce16('0x21')],_0x3086fb;if(_0x509a5b>=_0x5bbc3a){_0x509a5b=_0x5bbc3a;_0x3086fb=0xc8;}else{_0x3086fb=0xce;}_0xd6d3e['status'](_0x3086fb);return _0xd6d3e[_0xce16('0x22')](_0xce16('0x23'),_0x56cf0c+'-'+_0x509a5b+'/'+_0x5bbc3a)[_0xce16('0x1e')](_0x121163);}return null;};}function patchUpdates(_0x4049cf){return function(_0x972c1f){try{jsonpatch[_0xce16('0x24')](_0x972c1f,_0x4049cf,!![]);}catch(_0x4be1df){return BPromise[_0xce16('0x25')](_0x4be1df);}return _0x972c1f['save']();};}function saveUpdates(_0x596af2,_0x364609){return function(_0x134d01){if(_0x134d01){return _0x134d01[_0xce16('0x26')](_0x596af2)['then'](function(_0x5d8e94){return _0x5d8e94;});}return null;};}function removeEntity(_0x20ea51,_0x5535ce){return function(_0x459ea4){if(_0x459ea4){return _0x459ea4[_0xce16('0x27')]()[_0xce16('0x28')](function(){var _0x21c72d=_0x459ea4[_0xce16('0x29')]({'plain':!![]});var _0x1f7c92='Lists';return db['UserProfileResource'][_0xce16('0x27')]({'where':{'type':_0x1f7c92,'resourceId':_0x21c72d['id']}})[_0xce16('0x28')](function(){return _0x459ea4;});})[_0xce16('0x28')](function(){_0x20ea51[_0xce16('0x1c')](0xcc)[_0xce16('0x1d')]();});}};}function handleEntityNotFound(_0x2e05c0,_0x5e2052){return function(_0x4d5854){if(!_0x4d5854){_0x2e05c0[_0xce16('0x1b')](0x194);}return _0x4d5854;};}function handleError(_0x2a8a03,_0x6a006e){_0x6a006e=_0x6a006e||0x1f4;return function(_0x2a655e){logger[_0xce16('0x2a')](_0x2a655e[_0xce16('0x2b')]);if(_0x2a655e['name']){delete _0x2a655e['name'];}_0x2a8a03[_0xce16('0x1c')](_0x6a006e)[_0xce16('0x2c')](_0x2a655e);};}exports[_0xce16('0x2d')]=function(_0x2191e6,_0x365323){var _0x4d4f67={},_0x25158c={},_0x27b232={'count':0x0,'rows':[]};var _0x3d1a70=db[_0xce16('0x2e')][_0xce16('0x2f')];_0x25158c[_0xce16('0x30')]=_[_0xce16('0x31')](_0x3d1a70);_0x25158c['query']=_[_0xce16('0x31')](_0x2191e6[_0xce16('0x32')]);_0x25158c[_0xce16('0x33')]=_[_0xce16('0x34')](_0x25158c[_0xce16('0x30')],_0x25158c['query']);_0x4d4f67[_0xce16('0x35')]=_['intersection'](_0x25158c[_0xce16('0x30')],qs[_0xce16('0x36')](_0x2191e6[_0xce16('0x32')][_0xce16('0x36')]));_0x4d4f67[_0xce16('0x35')]=_0x4d4f67[_0xce16('0x35')]['length']?_0x4d4f67[_0xce16('0x35')]:_0x25158c['model'];if(!_0x2191e6[_0xce16('0x32')][_0xce16('0x37')]('nolimit')){_0x4d4f67['limit']=qs[_0xce16('0x21')](_0x2191e6[_0xce16('0x32')][_0xce16('0x21')]);_0x4d4f67[_0xce16('0x20')]=qs[_0xce16('0x20')](_0x2191e6[_0xce16('0x32')][_0xce16('0x20')]);}_0x4d4f67[_0xce16('0x38')]=qs[_0xce16('0x39')](_0x2191e6[_0xce16('0x32')]['sort']);_0x4d4f67[_0xce16('0x3a')]=qs[_0xce16('0x33')](_[_0xce16('0x3b')](_0x2191e6['query'],_0x25158c[_0xce16('0x33')]));if(_0x2191e6[_0xce16('0x32')][_0xce16('0x3c')]){_0x4d4f67[_0xce16('0x3a')]=_['merge'](_0x4d4f67[_0xce16('0x3a')],{'$or':_[_0xce16('0x3d')](_0x3d1a70,function(_0x2dadeb){if(_0x2dadeb[_0xce16('0x3e')]['key']!==_0xce16('0x3f')){var _0x20a908={};_0x20a908[_0x2dadeb['field']]={'$like':'%'+_0x2191e6['query'][_0xce16('0x3c')]+'%'};return _0x20a908;}})});}_0x4d4f67=_[_0xce16('0x40')]({},_0x4d4f67,_0x2191e6[_0xce16('0x41')]);var _0x358a8e={'where':_0x4d4f67['where']};return db[_0xce16('0x2e')][_0xce16('0x1f')](_0x358a8e)[_0xce16('0x28')](function(_0x28c26f){_0x27b232[_0xce16('0x1f')]=_0x28c26f;if(_0x2191e6[_0xce16('0x32')][_0xce16('0x42')]){_0x4d4f67[_0xce16('0x43')]=[{'all':!![]}];}return db['CmList'][_0xce16('0x44')](_0x4d4f67);})[_0xce16('0x28')](function(_0xd90929){_0x27b232[_0xce16('0x45')]=_0xd90929;return _0x27b232;})[_0xce16('0x28')](respondWithFilteredResult(_0x365323,_0x4d4f67))[_0xce16('0x46')](handleError(_0x365323,null));};exports['show']=function(_0x27ba9d,_0x6f1ccf){var _0x4e0302={'raw':![],'where':{'id':_0x27ba9d[_0xce16('0x47')]['id']}},_0x5d58f4={};_0x5d58f4['model']=_[_0xce16('0x31')](db[_0xce16('0x2e')][_0xce16('0x2f')]);_0x5d58f4['query']=_[_0xce16('0x31')](_0x27ba9d[_0xce16('0x32')]);_0x5d58f4[_0xce16('0x33')]=_[_0xce16('0x34')](_0x5d58f4['model'],_0x5d58f4[_0xce16('0x32')]);_0x4e0302[_0xce16('0x35')]=_[_0xce16('0x34')](_0x5d58f4[_0xce16('0x30')],qs[_0xce16('0x36')](_0x27ba9d[_0xce16('0x32')][_0xce16('0x36')]));_0x4e0302[_0xce16('0x35')]=_0x4e0302[_0xce16('0x35')]['length']?_0x4e0302['attributes']:_0x5d58f4[_0xce16('0x30')];if(_0x27ba9d[_0xce16('0x32')]['includeAll']){_0x4e0302[_0xce16('0x43')]=[{'all':!![]}];}_0x4e0302=_[_0xce16('0x40')]({},_0x4e0302,_0x27ba9d[_0xce16('0x41')]);return db[_0xce16('0x2e')][_0xce16('0x48')](_0x4e0302)[_0xce16('0x28')](handleEntityNotFound(_0x6f1ccf,null))[_0xce16('0x28')](respondWithResult(_0x6f1ccf,null))[_0xce16('0x46')](handleError(_0x6f1ccf,null));};exports['create']=function(_0x3bc149,_0x895109){return db[_0xce16('0x2e')]['create'](_0x3bc149[_0xce16('0x49')],{})['then'](function(_0x4bedf5){var _0x3b1b60=_0x3bc149['user'][_0xce16('0x29')]({'plain':!![]});if(!_0x3b1b60)throw new Error(_0xce16('0x4a'));if(_0x3b1b60[_0xce16('0x4b')]===_0xce16('0x4c')){var _0x14effd=_0x4bedf5[_0xce16('0x29')]({'plain':!![]});var _0x47af01=_0xce16('0x4d');return db[_0xce16('0x4e')][_0xce16('0x48')]({'where':{'name':_0x47af01,'userProfileId':_0x3b1b60[_0xce16('0x4f')]},'raw':!![]})['then'](function(_0x1aef4a){if(_0x1aef4a&&_0x1aef4a[_0xce16('0x50')]===0x0){return db['UserProfileResource']['create']({'name':_0x14effd[_0xce16('0x51')],'resourceId':_0x14effd['id'],'type':_0x1aef4a[_0xce16('0x51')],'sectionId':_0x1aef4a['id']},{})[_0xce16('0x28')](function(){return _0x4bedf5;});}else{return _0x4bedf5;}})['catch'](function(_0x1522fe){logger[_0xce16('0x2a')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x1522fe);throw _0x1522fe;});}return _0x4bedf5;})['then'](respondWithResult(_0x895109,0xc9))[_0xce16('0x46')](handleError(_0x895109,null));};exports[_0xce16('0x26')]=function(_0x272eae,_0x191501){if(_0x272eae[_0xce16('0x49')]['id']){delete _0x272eae['body']['id'];}return db[_0xce16('0x2e')][_0xce16('0x48')]({'where':{'id':_0x272eae[_0xce16('0x47')]['id']}})['then'](handleEntityNotFound(_0x191501,null))[_0xce16('0x28')](saveUpdates(_0x272eae['body'],null))[_0xce16('0x28')](respondWithResult(_0x191501,null))['catch'](handleError(_0x191501,null));};exports[_0xce16('0x27')]=function(_0x4b1768,_0x59ad6b){return db['CmList'][_0xce16('0x48')]({'where':{'id':_0x4b1768[_0xce16('0x47')]['id']}})[_0xce16('0x28')](handleEntityNotFound(_0x59ad6b,null))[_0xce16('0x28')](removeEntity(_0x59ad6b,null))[_0xce16('0x46')](handleError(_0x59ad6b,null));};exports[_0xce16('0x52')]=function(_0x1d00a,_0x4974e9){return db[_0xce16('0x2e')][_0xce16('0x52')]()[_0xce16('0x28')](respondWithResult(_0x4974e9,null))[_0xce16('0x46')](handleError(_0x4974e9,null));};exports[_0xce16('0x53')]=function(_0x8019bc,_0x4262d7,_0x229d70){if(_0x8019bc['body']['id']){delete _0x8019bc[_0xce16('0x49')]['id'];}return db[_0xce16('0x2e')]['find']({'where':{'id':_0x8019bc[_0xce16('0x47')]['id']}})[_0xce16('0x28')](handleEntityNotFound(_0x4262d7,null))[_0xce16('0x28')](function(_0x280d55){if(_0x280d55){_0x8019bc['body'][_0xce16('0x54')]=_0x280d55['id'];return db['Disposition']['create'](_0x8019bc['body']);}})['then'](respondWithResult(_0x4262d7,null))[_0xce16('0x46')](handleError(_0x4262d7,null));};exports[_0xce16('0x55')]=function(_0x338f87,_0x15d581,_0x29448a){var _0x704abb={'raw':![],'where':{}};var _0x2703f4={};var _0x180769={'count':0x0,'rows':[]};return db[_0xce16('0x2e')][_0xce16('0x56')]({'where':{'id':_0x338f87[_0xce16('0x47')]['id']}})[_0xce16('0x28')](handleEntityNotFound(_0x15d581,null))['then'](function(_0x237788){if(_0x237788){_0x2703f4[_0xce16('0x30')]=_[_0xce16('0x31')](db[_0xce16('0x57')]['rawAttributes']);_0x2703f4[_0xce16('0x32')]=_['keys'](_0x338f87[_0xce16('0x32')]);_0x2703f4[_0xce16('0x33')]=_[_0xce16('0x34')](_0x2703f4[_0xce16('0x30')],_0x2703f4[_0xce16('0x32')]);_0x704abb[_0xce16('0x35')]=_[_0xce16('0x34')](_0x2703f4[_0xce16('0x30')],qs[_0xce16('0x36')](_0x338f87['query'][_0xce16('0x36')]));_0x704abb[_0xce16('0x35')]=_0x704abb[_0xce16('0x35')][_0xce16('0x58')]?_0x704abb[_0xce16('0x35')]:_0x2703f4[_0xce16('0x30')];if(!_0x338f87[_0xce16('0x32')][_0xce16('0x37')](_0xce16('0x59'))){_0x704abb[_0xce16('0x21')]=qs[_0xce16('0x21')](_0x338f87['query'][_0xce16('0x21')]);_0x704abb[_0xce16('0x20')]=qs[_0xce16('0x20')](_0x338f87[_0xce16('0x32')][_0xce16('0x20')]);}_0x704abb['order']=qs[_0xce16('0x39')](_0x338f87[_0xce16('0x32')]['sort']);_0x704abb[_0xce16('0x3a')]=qs[_0xce16('0x33')](_[_0xce16('0x3b')](_0x338f87[_0xce16('0x32')],_0x2703f4[_0xce16('0x33')]));_0x704abb[_0xce16('0x3a')][_0xce16('0x54')]=_0x237788['id'];if(_0x338f87[_0xce16('0x32')][_0xce16('0x3c')]){_0x704abb['where']=_[_0xce16('0x40')](_0x704abb[_0xce16('0x3a')],{'$or':_[_0xce16('0x3d')](_0x704abb[_0xce16('0x35')],function(_0x584ee3){var _0xd27d10={};_0xd27d10[_0x584ee3]={'$like':'%'+_0x338f87[_0xce16('0x32')][_0xce16('0x3c')]+'%'};return _0xd27d10;})});}_0x704abb=_[_0xce16('0x40')]({},_0x704abb,_0x338f87[_0xce16('0x41')]);return db[_0xce16('0x57')]['count']({'where':_0x704abb['where']})[_0xce16('0x28')](function(_0x5b473e){_0x180769[_0xce16('0x1f')]=_0x5b473e;if(_0x338f87[_0xce16('0x32')][_0xce16('0x42')]){_0x704abb[_0xce16('0x43')]=[{'all':!![]}];}return db[_0xce16('0x57')]['findAll'](_0x704abb);})[_0xce16('0x28')](function(_0x16e9a6){_0x180769[_0xce16('0x45')]=_0x16e9a6;return _0x180769;});}})[_0xce16('0x28')](respondWithFilteredResult(_0x15d581,_0x704abb))['catch'](handleError(_0x15d581,null));};exports['removeDispositions']=function(_0xf97eb9,_0x1c4b36,_0xe6a517){return db['CmList'][_0xce16('0x48')]({'where':{'id':_0xf97eb9[_0xce16('0x47')]['id']}})[_0xce16('0x28')](handleEntityNotFound(_0x1c4b36,null))[_0xce16('0x28')](function(_0x2332e5){if(_0x2332e5){return _0x2332e5[_0xce16('0x5a')](_0xf97eb9[_0xce16('0x32')][_0xce16('0x5b')]);}})[_0xce16('0x28')](respondWithStatusCode(_0x1c4b36,null))[_0xce16('0x46')](handleError(_0x1c4b36,null));};exports['addContacts']=function(_0x2895d5,_0x1f49c3,_0x5ecc92){return db[_0xce16('0x2e')][_0xce16('0x48')]({'where':{'id':_0x2895d5[_0xce16('0x47')]['id']}})[_0xce16('0x28')](handleEntityNotFound(_0x1f49c3,null))[_0xce16('0x28')](function(_0x335dd3){if(_0x335dd3){var _0x22a6ff=[];var _0x1d3393={'success':[],'errors':[]};return db[_0xce16('0x5c')][_0xce16('0x52')]()[_0xce16('0x28')](function(_0x411739){if(_0x2895d5[_0xce16('0x49')][_0xce16('0x5d')]&&_['isArray'](_0x2895d5[_0xce16('0x49')][_0xce16('0x5d')])){if(_0x2895d5[_0xce16('0x49')][_0xce16('0x5d')][_0xce16('0x58')]){_0x2895d5[_0xce16('0x49')][_0xce16('0x5d')]=_0x2895d5[_0xce16('0x49')][_0xce16('0x5d')][_0xce16('0x5e')](';')+';';}else{_0x2895d5[_0xce16('0x49')]['tags']=null;}}else{_0x2895d5[_0xce16('0x49')]['tags']=null;}if(_0x2895d5[_0xce16('0x49')]&&_[_0xce16('0x5f')](_0x2895d5[_0xce16('0x49')])){for(var _0xb2e63f=0x0;_0xb2e63f<_0x2895d5[_0xce16('0x49')][_0xce16('0x58')];_0xb2e63f+=0x1){_0x2895d5['body'][_0xb2e63f][_0xce16('0x54')]=_0x2895d5[_0xce16('0x47')]['id'];_0x22a6ff['push'](_0x2895d5[_0xce16('0x49')][_0xb2e63f]);}return BPromise[_0xce16('0x60')](_0x22a6ff,function(_0x2d7424){return db[_0xce16('0x5c')][_0xce16('0x61')](_[_0xce16('0x62')](_0x2d7424,[_0xce16('0x5b'),'id'])||{},{'fields':_[_0xce16('0x31')](_0x411739),'raw':!![]})[_0xce16('0x28')](function(_0x19b4f5){_0x1d3393['success'][_0xce16('0x63')](_0x19b4f5[_0xce16('0x64')]);})[_0xce16('0x46')](function(_0x320922){_0x1d3393[_0xce16('0x65')]['push']({'data':_0x2d7424,'error':_0x320922[_0xce16('0x66')]});});})[_0xce16('0x28')](function(_0x7e9abd){return _0x1d3393;})[_0xce16('0x46')](function(_0x109156){return _0x109156;});}else{_0x1f49c3['status'](0x190)[_0xce16('0x1e')]({'message':_0xce16('0x67')});}});}})[_0xce16('0x28')](respondWithResult(_0x1f49c3,null))[_0xce16('0x46')](handleError(_0x1f49c3,null));};exports['getContacts']=function(_0x4b4725,_0x4ebd96,_0x222122){var _0x225315;return db[_0xce16('0x2e')][_0xce16('0x48')]({'where':{'id':_0x4b4725[_0xce16('0x47')]['id']},'include':[{'model':db[_0xce16('0x68')],'as':_0xce16('0x69')}]})[_0xce16('0x28')](handleEntityNotFound(_0x4ebd96,null))[_0xce16('0x28')](function(_0x3d1da5){if(_0x3d1da5){_0x225315=_0x3d1da5;return db[_0xce16('0x5c')][_0xce16('0x2f')];}})['then'](function(_0x3aed26){if(_0x3aed26){var _0x3903be={};var _0x5ab714={};_0x5ab714[_0xce16('0x30')]=_['concat'](_[_0xce16('0x31')](_0x3aed26),_['map'](_0x225315['CustomFields'],function(_0x87725){return util['format'](_0xce16('0x6a'),_0x87725['id']);}));_0x5ab714[_0xce16('0x32')]=_[_0xce16('0x31')](_0x4b4725[_0xce16('0x32')]);_0x5ab714[_0xce16('0x33')]=_[_0xce16('0x34')](_0x5ab714[_0xce16('0x30')],_0x5ab714[_0xce16('0x32')]);_0x3903be[_0xce16('0x35')]=_['intersection'](_0x5ab714[_0xce16('0x30')],qs[_0xce16('0x36')](_0x4b4725[_0xce16('0x32')][_0xce16('0x36')]));_0x3903be[_0xce16('0x35')]=_0x3903be[_0xce16('0x35')][_0xce16('0x58')]?_0x3903be[_0xce16('0x35')]:_0x5ab714['model'];if(!_0x4b4725[_0xce16('0x32')][_0xce16('0x37')]('nolimit')){_0x3903be[_0xce16('0x21')]=qs['limit'](_0x4b4725[_0xce16('0x32')][_0xce16('0x21')]);_0x3903be[_0xce16('0x20')]=qs['offset'](_0x4b4725[_0xce16('0x32')]['offset']);}_0x3903be[_0xce16('0x38')]=qs[_0xce16('0x39')](_0x4b4725[_0xce16('0x32')]['sort']);_0x3903be['where']=qs[_0xce16('0x33')](_[_0xce16('0x3b')](_0x4b4725['query'],_0x5ab714['filters']));_0x3903be[_0xce16('0x6b')]=!![];if(_0x4b4725[_0xce16('0x32')][_0xce16('0x3c')]){_0x3903be[_0xce16('0x3a')]=_[_0xce16('0x40')](_0x3903be[_0xce16('0x3a')],{'$or':_['map'](_0x3903be[_0xce16('0x35')],function(_0x12b9bd){var _0x27929d={};_0x27929d[_0x12b9bd]={'$like':'%'+_0x4b4725[_0xce16('0x32')][_0xce16('0x3c')]+'%'};return _0x27929d;})});}_0x3903be=_[_0xce16('0x40')]({},_0x3903be,_0x4b4725[_0xce16('0x41')]);return _0x225315[_0xce16('0x6c')](_0x3903be);}})[_0xce16('0x28')](respondWithResult(_0x4ebd96,null))['catch'](handleError(_0x4ebd96,null));};exports[_0xce16('0x6d')]=function(_0x3c15a2,_0x3ff339,_0x27652e){var _0x37cf0b;return db['CmList'][_0xce16('0x48')]({'where':{'id':_0x3c15a2[_0xce16('0x47')]['id']},'include':[{'model':db['CmCustomField'],'as':_0xce16('0x69')}]})[_0xce16('0x28')](handleEntityNotFound(_0x3ff339,null))[_0xce16('0x28')](function(_0xf68bbe){if(_0xf68bbe){_0x37cf0b=_0xf68bbe;return db[_0xce16('0x5c')][_0xce16('0x2f')];}})['then'](function(_0x515e77){if(_0x515e77){var _0x48f67a={};var _0x3cc8fb={};_0x3cc8fb[_0xce16('0x30')]=_[_0xce16('0x6e')](_['keys'](_0x515e77),_['map'](_0x37cf0b[_0xce16('0x69')],function(_0x153f40){return util['format']('cf_%d',_0x153f40['id']);}));_0x3cc8fb[_0xce16('0x32')]=_[_0xce16('0x31')](_0x3c15a2['query']);_0x3cc8fb[_0xce16('0x33')]=_[_0xce16('0x34')](_0x3cc8fb['model'],_0x3cc8fb[_0xce16('0x32')]);_0x48f67a['attributes']=_[_0xce16('0x34')](_0x3cc8fb[_0xce16('0x30')],qs[_0xce16('0x36')](_0x3c15a2[_0xce16('0x32')][_0xce16('0x36')]));_0x48f67a['attributes']=_0x48f67a[_0xce16('0x35')][_0xce16('0x58')]?_0x48f67a[_0xce16('0x35')]:_0x3cc8fb[_0xce16('0x30')];if(!_0x3c15a2[_0xce16('0x32')]['hasOwnProperty'](_0xce16('0x59'))){_0x48f67a[_0xce16('0x21')]=qs[_0xce16('0x21')](_0x3c15a2['query'][_0xce16('0x21')]);_0x48f67a[_0xce16('0x20')]=qs[_0xce16('0x20')](_0x3c15a2['query'][_0xce16('0x20')]);}_0x48f67a[_0xce16('0x38')]=qs[_0xce16('0x39')](_0x3c15a2[_0xce16('0x32')]['sort']);_0x48f67a[_0xce16('0x3a')]=qs[_0xce16('0x33')](_['pick'](_0x3c15a2['query'],_0x3cc8fb['filters']));_0x48f67a['raw']=!![];if(_0x3c15a2[_0xce16('0x32')]['filter']){_0x48f67a[_0xce16('0x3a')]=_[_0xce16('0x40')](_0x48f67a[_0xce16('0x3a')],{'$or':_[_0xce16('0x3d')](_0x48f67a[_0xce16('0x35')],function(_0x52eda2){var _0x1de24c={};_0x1de24c[_0x52eda2]={'$like':'%'+_0x3c15a2['query'][_0xce16('0x3c')]+'%'};return _0x1de24c;})});}_0x48f67a=_[_0xce16('0x40')]({},_0x48f67a,_0x3c15a2[_0xce16('0x41')]);return _0x37cf0b[_0xce16('0x6c')](_0x48f67a);}})[_0xce16('0x28')](function(_0x3f907a){if(!_[_0xce16('0x6f')](_0x3f907a)){var _0x31e709=toCsv(_0x3f907a);var _0x4b2a1b=Date['now']();fs[_0xce16('0x70')](util['format'](_0xce16('0x71'),_0x37cf0b['id'],_0x4b2a1b),_0x31e709);_0x3ff339['setHeader'](_0xce16('0x72'),_0xce16('0x73')+util[_0xce16('0x74')](_0xce16('0x75'),_0x37cf0b['id'],_0x4b2a1b));_0x3ff339[_0xce16('0x76')](_0xce16('0x77'),_0xce16('0x78'));return _0x3ff339[_0xce16('0x79')](util[_0xce16('0x74')](_0xce16('0x71'),_0x37cf0b['id'],_0x4b2a1b));}else{return _0x3ff339[_0xce16('0x1b')](0xcc);}})[_0xce16('0x46')](handleError(_0x3ff339,null));};exports[_0xce16('0x7a')]=function(_0x1d1bbe,_0x2abb1c,_0x188efb){var _0x1df624;delete _0x1d1bbe[_0xce16('0x49')]['id'];return db[_0xce16('0x2e')][_0xce16('0x56')]({'where':{'id':_0x1d1bbe[_0xce16('0x47')]['id']}})[_0xce16('0x28')](handleEntityNotFound(_0x2abb1c,null))['then'](function(_0x5df13f){if(_0x5df13f){return db[_0xce16('0x7b')][_0xce16('0x7c')](function(_0x29c001){return db[_0xce16('0x68')][_0xce16('0x61')](_0x1d1bbe[_0xce16('0x49')],{'transaction':_0x29c001})[_0xce16('0x28')](function(_0x31c639){_0x1df624=_0x31c639;return _0x5df13f[_0xce16('0x7d')](_0x31c639,{'transaction':_0x29c001});})[_0xce16('0x28')](function(){var _0x5aeb22={'type':db['Sequelize'][_0xce16('0x7e')],'transaction':_0x29c001};switch(_0x1d1bbe[_0xce16('0x49')][_0xce16('0x3e')]){case _0xce16('0x7f'):_0x5aeb22[_0xce16('0x3e')]=db[_0xce16('0x80')]['TEXT'];break;case _0xce16('0x81'):_0x5aeb22[_0xce16('0x3e')]=db[_0xce16('0x80')][_0xce16('0x82')];break;case _0xce16('0x83'):_0x5aeb22['type']=db['Sequelize']['BOOLEAN'];_0x5aeb22[_0xce16('0x84')]=![];break;default:}return db[_0xce16('0x7b')][_0xce16('0x85')]['addColumn']('cm_contacts',util[_0xce16('0x74')](_0xce16('0x86'),_0x1df624['id']),_0x5aeb22);})[_0xce16('0x28')](function(){return _0x1df624;});});}})[_0xce16('0x28')](respondWithResult(_0x2abb1c,null))[_0xce16('0x46')](handleError(_0x2abb1c,null));};exports[_0xce16('0x87')]=function(_0x4008b8,_0x36a45a,_0x105c36){var _0x206f1f={};var _0x3ac4df={};var _0x29379c;var _0x38c5ad;return db[_0xce16('0x2e')][_0xce16('0x56')]({'where':{'id':_0x4008b8[_0xce16('0x47')]['id']}})['then'](handleEntityNotFound(_0x36a45a,null))[_0xce16('0x28')](function(_0x3b78fd){if(_0x3b78fd){_0x29379c=_0x3b78fd;_0x3ac4df[_0xce16('0x30')]=_['keys'](db[_0xce16('0x68')][_0xce16('0x2f')]);_0x3ac4df[_0xce16('0x32')]=_[_0xce16('0x31')](_0x4008b8[_0xce16('0x32')]);_0x3ac4df[_0xce16('0x33')]=_[_0xce16('0x34')](_0x3ac4df[_0xce16('0x30')],_0x3ac4df[_0xce16('0x32')]);_0x206f1f[_0xce16('0x35')]=_[_0xce16('0x34')](_0x3ac4df[_0xce16('0x30')],qs[_0xce16('0x36')](_0x4008b8['query']['fields']));_0x206f1f[_0xce16('0x35')]=_0x206f1f[_0xce16('0x35')][_0xce16('0x58')]?_0x206f1f[_0xce16('0x35')]:_0x3ac4df['model'];_0x206f1f[_0xce16('0x38')]=qs[_0xce16('0x39')](_0x4008b8[_0xce16('0x32')][_0xce16('0x39')]);_0x206f1f[_0xce16('0x3a')]=qs['filters'](_[_0xce16('0x3b')](_0x4008b8[_0xce16('0x32')],_0x3ac4df['filters']));_0x206f1f[_0xce16('0x3a')]=_[_0xce16('0x40')](_0x206f1f[_0xce16('0x3a')],{'$or':[{'ListId':_0x3b78fd['id']},{'ListId':null}]});if(_0x4008b8[_0xce16('0x32')]['filter']){_0x206f1f['where']=_[_0xce16('0x40')](_0x206f1f[_0xce16('0x3a')],{'$or':_[_0xce16('0x3d')](_0x206f1f[_0xce16('0x35')],function(_0x1787ad){var _0xdf190c={};_0xdf190c[_0x1787ad]={'$like':'%'+_0x4008b8['query'][_0xce16('0x3c')]+'%'};return _0xdf190c;})});}_0x206f1f=_[_0xce16('0x40')]({},_0x206f1f,_0x4008b8['options']);return db['CmCustomField'][_0xce16('0x88')](_0x206f1f);}})[_0xce16('0x28')](respondWithResult(_0x36a45a,null))['catch'](handleError(_0x36a45a,null));};exports[_0xce16('0x89')]=function(_0x12a495,_0x585f40,_0xb4f876){return db[_0xce16('0x2e')][_0xce16('0x48')]({'where':{'id':_0x12a495[_0xce16('0x47')]['id']}})['then'](handleEntityNotFound(_0x585f40,null))[_0xce16('0x28')](function(_0x455586){if(_0x455586){return _0x455586['addAgents'](_0x12a495[_0xce16('0x49')]['ids'],_[_0xce16('0x62')](_0x12a495['body'],[_0xce16('0x5b'),'id'])||{})[_0xce16('0x8a')](function(_0x11fb6c){for(var _0x1a0369=0x0;_0x1a0369<_0x12a495[_0xce16('0x49')][_0xce16('0x5b')][_0xce16('0x58')];_0x1a0369+=0x1){socket['emit'](_0xce16('0x8b'),{'UserId':_0x12a495[_0xce16('0x49')]['ids'][_0x1a0369],'CmListId':_0x12a495[_0xce16('0x47')]['id']});}return _0x11fb6c;});}})[_0xce16('0x28')](respondWithResult(_0x585f40,null))['catch'](handleError(_0x585f40,null));};exports['removeAgents']=function(_0x535f0d,_0x328562,_0x10984c){return db[_0xce16('0x2e')]['find']({'where':{'id':_0x535f0d[_0xce16('0x47')]['id']}})[_0xce16('0x28')](handleEntityNotFound(_0x328562,null))[_0xce16('0x28')](function(_0x583ec3){if(_0x583ec3){return _0x583ec3[_0xce16('0x8c')](_0x535f0d[_0xce16('0x32')]['ids'])[_0xce16('0x28')](function(){if(_['isArray'](_0x535f0d[_0xce16('0x32')][_0xce16('0x5b')])){for(var _0xa81c4d=0x0;_0xa81c4d<_0x535f0d[_0xce16('0x32')][_0xce16('0x5b')]['length'];_0xa81c4d+=0x1){socket[_0xce16('0x8d')](_0xce16('0x8e'),{'UserId':Number(_0x535f0d[_0xce16('0x32')][_0xce16('0x5b')][_0xa81c4d]),'CmListId':Number(_0x535f0d[_0xce16('0x47')]['id'])});}}else{socket[_0xce16('0x8d')](_0xce16('0x8e'),{'UserId':Number(_0x535f0d[_0xce16('0x32')][_0xce16('0x5b')]),'CmListId':Number(_0x535f0d[_0xce16('0x47')]['id'])});}});}})[_0xce16('0x28')](respondWithStatusCode(_0x328562,null))[_0xce16('0x46')](handleError(_0x328562,null));};exports[_0xce16('0x8f')]=function(_0x27a877,_0x3b7181,_0x8ba031){var _0x297b95={};var _0x148c44={};var _0x571d79;var _0x308d6e;return db[_0xce16('0x2e')][_0xce16('0x56')]({'where':{'id':_0x27a877[_0xce16('0x47')]['id']}})[_0xce16('0x28')](handleEntityNotFound(_0x3b7181,null))[_0xce16('0x28')](function(_0x580b7e){if(_0x580b7e){_0x571d79=_0x580b7e;_0x148c44['model']=_['keys'](db['User'][_0xce16('0x2f')]);_0x148c44[_0xce16('0x32')]=_['keys'](_0x27a877['query']);_0x148c44['filters']=_[_0xce16('0x34')](_0x148c44['model'],_0x148c44[_0xce16('0x32')]);_0x297b95['attributes']=_['intersection'](_0x148c44['model'],qs[_0xce16('0x36')](_0x27a877['query'][_0xce16('0x36')]));_0x297b95['attributes']=_0x297b95[_0xce16('0x35')][_0xce16('0x58')]?_0x297b95['attributes']:_0x148c44[_0xce16('0x30')];_0x297b95[_0xce16('0x38')]=qs[_0xce16('0x39')](_0x27a877[_0xce16('0x32')][_0xce16('0x39')]);_0x297b95[_0xce16('0x3a')]=qs[_0xce16('0x33')](_[_0xce16('0x3b')](_0x27a877[_0xce16('0x32')],_0x148c44[_0xce16('0x33')]));if(_0x27a877[_0xce16('0x32')][_0xce16('0x3c')]){_0x297b95[_0xce16('0x3a')]=_[_0xce16('0x40')](_0x297b95['where'],{'$or':_[_0xce16('0x3d')](_0x297b95[_0xce16('0x35')],function(_0x55dfab){var _0x55516e={};_0x55516e[_0x55dfab]={'$like':'%'+_0x27a877[_0xce16('0x32')]['filter']+'%'};return _0x55516e;})});}_0x297b95=_[_0xce16('0x40')]({},_0x297b95,_0x27a877[_0xce16('0x41')]);return _0x571d79[_0xce16('0x8f')](_0x297b95);}})[_0xce16('0x28')](function(_0x1c88c5){if(_0x1c88c5){_0x308d6e=_0x1c88c5[_0xce16('0x58')];if(!_0x27a877['query']['hasOwnProperty'](_0xce16('0x59'))){_0x297b95['limit']=qs[_0xce16('0x21')](_0x27a877[_0xce16('0x32')][_0xce16('0x21')]);_0x297b95[_0xce16('0x20')]=qs[_0xce16('0x20')](_0x27a877['query'][_0xce16('0x20')]);}return _0x571d79[_0xce16('0x8f')](_0x297b95);}})[_0xce16('0x28')](function(_0xd09a77){if(_0xd09a77){return _0xd09a77?{'count':_0x308d6e,'rows':_0xd09a77}:null;}})['then'](respondWithResult(_0x3b7181,null))['catch'](handleError(_0x3b7181,null));};
\ No newline at end of file
index 1162317..5cfaac4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7978=['../../mysqldb','CmList','setMaxListeners','update','remove','emit','hook','events'];(function(_0x4e676e,_0x2a7c6d){var _0x336a3c=function(_0x4767c4){while(--_0x4767c4){_0x4e676e['push'](_0x4e676e['shift']());}};_0x336a3c(++_0x2a7c6d);}(_0x7978,0x147));var _0x8797=function(_0x411017,_0x4a8117){_0x411017=_0x411017-0x0;var _0x2adeea=_0x7978[_0x411017];return _0x2adeea;};'use strict';var EventEmitter=require(_0x8797('0x0'));var CmList=require(_0x8797('0x1'))['db'][_0x8797('0x2')];var CmListEvents=new EventEmitter();CmListEvents[_0x8797('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x8797('0x4'),'afterDestroy':_0x8797('0x5')};function emitEvent(_0x355679){return function(_0xb95b03,_0x518a6f,_0x107cfc){CmListEvents[_0x8797('0x6')](_0x355679+':'+_0xb95b03['id'],_0xb95b03);CmListEvents[_0x8797('0x6')](_0x355679,_0xb95b03);_0x107cfc(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];CmList[_0x8797('0x7')](e,emitEvent(event));}}module['exports']=CmListEvents;
\ No newline at end of file
+var _0xc9e7=['events','CmList','setMaxListeners','remove','emit','hasOwnProperty','exports'];(function(_0x10bf47,_0x4b255d){var _0x5a0ce5=function(_0x575c88){while(--_0x575c88){_0x10bf47['push'](_0x10bf47['shift']());}};_0x5a0ce5(++_0x4b255d);}(_0xc9e7,0x11f));var _0x7c9e=function(_0x544500,_0x36a8c0){_0x544500=_0x544500-0x0;var _0x4132dc=_0xc9e7[_0x544500];return _0x4132dc;};'use strict';var EventEmitter=require(_0x7c9e('0x0'));var CmList=require('../../mysqldb')['db'][_0x7c9e('0x1')];var CmListEvents=new EventEmitter();CmListEvents[_0x7c9e('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x7c9e('0x3')};function emitEvent(_0x320aeb){return function(_0x32b6a3,_0x479267,_0x484928){CmListEvents[_0x7c9e('0x4')](_0x320aeb+':'+_0x32b6a3['id'],_0x32b6a3);CmListEvents[_0x7c9e('0x4')](_0x320aeb,_0x32b6a3);_0x484928(null);};}for(var e in events){if(events[_0x7c9e('0x5')](e)){var event=events[e];CmList['hook'](e,emitEvent(event));}}module[_0x7c9e('0x6')]=CmListEvents;
\ No newline at end of file
index d1ac952..f3ee08e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3b59=['lodash','util','../../config/logger','api','moment','bluebird','path','../../config/environment','./cmList.attributes','exports','define','CmList','cm_lists'];(function(_0x458dd2,_0xb2c6e6){var _0x470f65=function(_0x506bc9){while(--_0x506bc9){_0x458dd2['push'](_0x458dd2['shift']());}};_0x470f65(++_0xb2c6e6);}(_0x3b59,0x9c));var _0x93b5=function(_0x2c7cd3,_0x369d68){_0x2c7cd3=_0x2c7cd3-0x0;var _0x36d395=_0x3b59[_0x2c7cd3];return _0x36d395;};'use strict';var _=require(_0x93b5('0x0'));var util=require(_0x93b5('0x1'));var logger=require(_0x93b5('0x2'))(_0x93b5('0x3'));var moment=require(_0x93b5('0x4'));var BPromise=require(_0x93b5('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x93b5('0x6'));var rimraf=require('rimraf');var config=require(_0x93b5('0x7'));var attributes=require(_0x93b5('0x8'));module[_0x93b5('0x9')]=function(_0x27f8e3,_0x5665a9){return _0x27f8e3[_0x93b5('0xa')](_0x93b5('0xb'),attributes,{'tableName':_0x93b5('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0f73=['CmList','cm_lists','lodash','util','../../config/logger','bluebird','request-promise','path','rimraf','../../config/environment','exports','define'];(function(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0x0f73,0x146));var _0x30f7=function(_0x115d62,_0x2e4933){_0x115d62=_0x115d62-0x0;var _0x2e38f8=_0x0f73[_0x115d62];return _0x2e38f8;};'use strict';var _=require(_0x30f7('0x0'));var util=require(_0x30f7('0x1'));var logger=require(_0x30f7('0x2'))('api');var moment=require('moment');var BPromise=require(_0x30f7('0x3'));var rp=require(_0x30f7('0x4'));var fs=require('fs');var path=require(_0x30f7('0x5'));var rimraf=require(_0x30f7('0x6'));var config=require(_0x30f7('0x7'));var attributes=require('./cmList.attributes');module[_0x30f7('0x8')]=function(_0x593fe7,_0x49b5b8){return _0x593fe7[_0x30f7('0x9')](_0x30f7('0xa'),attributes,{'tableName':_0x30f7('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c916dc1..cce5aa7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ada=['CmList,\x20%s,\x20%s','request\x20sent','debug','CmList,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','moment','bluebird','ioredis','../../mysqldb','../../config/logger','jayson/promise','client','http','redis','localhost','./cmList.socket','then','info'];(function(_0x1b2bf8,_0x34f73d){var _0x4f780c=function(_0x5712ca){while(--_0x5712ca){_0x1b2bf8['push'](_0x1b2bf8['shift']());}};_0x4f780c(++_0x34f73d);}(_0x8ada,0x82));var _0xa8ad=function(_0xe5b3e1,_0x57a645){_0xe5b3e1=_0xe5b3e1-0x0;var _0x121dad=_0x8ada[_0xe5b3e1];return _0x121dad;};'use strict';var _=require(_0xa8ad('0x0'));var util=require('util');var moment=require(_0xa8ad('0x1'));var BPromise=require(_0xa8ad('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xa8ad('0x3'));var db=require(_0xa8ad('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xa8ad('0x5'))('rpc');var config=require('../../config/environment');var jayson=require(_0xa8ad('0x6'));var client=jayson[_0xa8ad('0x7')][_0xa8ad('0x8')]({'port':0x232a});config[_0xa8ad('0x9')]=_['defaults'](config[_0xa8ad('0x9')],{'host':_0xa8ad('0xa'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xa8ad('0x9')]));require(_0xa8ad('0xb'))['register'](socket);function respondWithRpcPromise(_0x46c3a6,_0x2c6675,_0x3b4bbe){return new BPromise(function(_0x3fafe9,_0x4f67c6){return client['request'](_0x46c3a6,_0x3b4bbe)[_0xa8ad('0xc')](function(_0x535b36){logger[_0xa8ad('0xd')](_0xa8ad('0xe'),_0x2c6675,_0xa8ad('0xf'));logger[_0xa8ad('0x10')](_0xa8ad('0x11'),_0x2c6675,'request\x20sent',JSON[_0xa8ad('0x12')](_0x535b36));if(_0x535b36[_0xa8ad('0x13')]){if(_0x535b36[_0xa8ad('0x13')][_0xa8ad('0x14')]===0x1f4){logger[_0xa8ad('0x13')](_0xa8ad('0xe'),_0x2c6675,_0x535b36[_0xa8ad('0x13')]['message']);return _0x4f67c6(_0x535b36[_0xa8ad('0x13')][_0xa8ad('0x15')]);}logger[_0xa8ad('0x13')](_0xa8ad('0xe'),_0x2c6675,_0x535b36[_0xa8ad('0x13')][_0xa8ad('0x15')]);return _0x3fafe9(_0x535b36['error'][_0xa8ad('0x15')]);}else{logger[_0xa8ad('0xd')](_0xa8ad('0xe'),_0x2c6675,_0xa8ad('0xf'));_0x3fafe9(_0x535b36[_0xa8ad('0x16')][_0xa8ad('0x15')]);}})[_0xa8ad('0x17')](function(_0x1ea554){logger[_0xa8ad('0x13')]('CmList,\x20%s,\x20%s',_0x2c6675,_0x1ea554);_0x4f67c6(_0x1ea554);});});}
\ No newline at end of file
+var _0xe6e7=['jayson/promise','client','http','defaults','redis','localhost','./cmList.socket','register','request','CmList,\x20%s,\x20%s','request\x20sent','debug','CmList,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger'];(function(_0xebe2ce,_0x280c91){var _0x495de8=function(_0xa65f6b){while(--_0xa65f6b){_0xebe2ce['push'](_0xebe2ce['shift']());}};_0x495de8(++_0x280c91);}(_0xe6e7,0x94));var _0x7e6e=function(_0x15bf19,_0x3d0aff){_0x15bf19=_0x15bf19-0x0;var _0x131525=_0xe6e7[_0x15bf19];return _0x131525;};'use strict';var _=require(_0x7e6e('0x0'));var util=require(_0x7e6e('0x1'));var moment=require(_0x7e6e('0x2'));var BPromise=require(_0x7e6e('0x3'));var rs=require(_0x7e6e('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x7e6e('0x5'))['db'];var utils=require(_0x7e6e('0x6'));var logger=require(_0x7e6e('0x7'))('rpc');var config=require('../../config/environment');var jayson=require(_0x7e6e('0x8'));var client=jayson[_0x7e6e('0x9')][_0x7e6e('0xa')]({'port':0x232a});config['redis']=_[_0x7e6e('0xb')](config[_0x7e6e('0xc')],{'host':_0x7e6e('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x7e6e('0xc')]));require(_0x7e6e('0xe'))[_0x7e6e('0xf')](socket);function respondWithRpcPromise(_0x4cf08e,_0x1c58c1,_0x4c3c85){return new BPromise(function(_0x177fec,_0x4841ce){return client[_0x7e6e('0x10')](_0x4cf08e,_0x4c3c85)['then'](function(_0x338a13){logger['info'](_0x7e6e('0x11'),_0x1c58c1,_0x7e6e('0x12'));logger[_0x7e6e('0x13')](_0x7e6e('0x14'),_0x1c58c1,'request\x20sent',JSON[_0x7e6e('0x15')](_0x338a13));if(_0x338a13[_0x7e6e('0x16')]){if(_0x338a13[_0x7e6e('0x16')]['code']===0x1f4){logger[_0x7e6e('0x16')](_0x7e6e('0x11'),_0x1c58c1,_0x338a13[_0x7e6e('0x16')][_0x7e6e('0x17')]);return _0x4841ce(_0x338a13[_0x7e6e('0x16')][_0x7e6e('0x17')]);}logger[_0x7e6e('0x16')](_0x7e6e('0x11'),_0x1c58c1,_0x338a13[_0x7e6e('0x16')][_0x7e6e('0x17')]);return _0x177fec(_0x338a13[_0x7e6e('0x16')][_0x7e6e('0x17')]);}else{logger['info'](_0x7e6e('0x11'),_0x1c58c1,_0x7e6e('0x12'));_0x177fec(_0x338a13[_0x7e6e('0x18')][_0x7e6e('0x17')]);}})[_0x7e6e('0x19')](function(_0x5a06e2){logger[_0x7e6e('0x16')]('CmList,\x20%s,\x20%s',_0x1c58c1,_0x5a06e2);_0x4841ce(_0x5a06e2);});});}
\ No newline at end of file
index c6692f5..7ab125d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd545=['remove','update','emit','removeListener','length','cmList:','./cmList.events'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xd545,0xae));var _0x5d54=function(_0x28eb6d,_0x1288cc){_0x28eb6d=_0x28eb6d-0x0;var _0xf6f7dc=_0xd545[_0x28eb6d];return _0xf6f7dc;};'use strict';var CmListEvents=require(_0x5d54('0x0'));var events=['save',_0x5d54('0x1'),_0x5d54('0x2')];function createListener(_0x574d8c,_0x563e48){return function(_0x1d0346){_0x563e48[_0x5d54('0x3')](_0x574d8c,_0x1d0346);};}function removeListener(_0x2eaf00,_0x2a3db4){return function(){CmListEvents[_0x5d54('0x4')](_0x2eaf00,_0x2a3db4);};}exports['register']=function(_0x243edd){for(var _0x279cb7=0x0,_0x4edbcf=events[_0x5d54('0x5')];_0x279cb7<_0x4edbcf;_0x279cb7++){var _0x4b9848=events[_0x279cb7];var _0xa011c5=createListener(_0x5d54('0x6')+_0x4b9848,_0x243edd);CmListEvents['on'](_0x4b9848,_0xa011c5);}};
\ No newline at end of file
+var _0x0208=['./cmList.events','remove','update','removeListener','register','cmList:'];(function(_0x534479,_0xe50e7d){var _0x1ede3e=function(_0x22a6e9){while(--_0x22a6e9){_0x534479['push'](_0x534479['shift']());}};_0x1ede3e(++_0xe50e7d);}(_0x0208,0x174));var _0x8020=function(_0x3a75a1,_0x18842d){_0x3a75a1=_0x3a75a1-0x0;var _0x1f9f87=_0x0208[_0x3a75a1];return _0x1f9f87;};'use strict';var CmListEvents=require(_0x8020('0x0'));var events=['save',_0x8020('0x1'),_0x8020('0x2')];function createListener(_0x2544ac,_0x51f6b1){return function(_0x130e95){_0x51f6b1['emit'](_0x2544ac,_0x130e95);};}function removeListener(_0x3f3cf9,_0x1cc360){return function(){CmListEvents[_0x8020('0x3')](_0x3f3cf9,_0x1cc360);};}exports[_0x8020('0x4')]=function(_0x213ea8){for(var _0x15c1cc=0x0,_0x35f649=events['length'];_0x15c1cc<_0x35f649;_0x15c1cc++){var _0x184ce6=events[_0x15c1cc];var _0x585e16=createListener(_0x8020('0x5')+_0x184ce6,_0x213ea8);CmListEvents['on'](_0x184ce6,_0x585e16);}};
\ No newline at end of file
index 3ec11fa..be28a17 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfdb8=['destroy','removeDispositions','removeAgents','exports','multer','util','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmList.controller','get','isAuthenticated','index','/describe','describe','getDispositions','/:id/contacts','getContacts','/:id/contacts/csv','getContactsCsv','/:id/fields','getCustomFields','/:id/users','getAgents','create','post','/:id/dispositions','addDisposition','addContacts','addCustomField','addAgents','put','/:id','delete'];(function(_0x1b77b8,_0x9af51f){var _0x3f8fff=function(_0x5073b3){while(--_0x5073b3){_0x1b77b8['push'](_0x1b77b8['shift']());}};_0x3f8fff(++_0x9af51f);}(_0xfdb8,0xdc));var _0x8fdb=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xfdb8[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x8fdb('0x0'));var util=require(_0x8fdb('0x1'));var path=require('path');var timeout=require(_0x8fdb('0x2'));var express=require('express');var router=express[_0x8fdb('0x3')]();var auth=require(_0x8fdb('0x4'));var interaction=require(_0x8fdb('0x5'));var config=require(_0x8fdb('0x6'));var controller=require(_0x8fdb('0x7'));router[_0x8fdb('0x8')]('/',auth[_0x8fdb('0x9')](),controller[_0x8fdb('0xa')]);router['get'](_0x8fdb('0xb'),auth[_0x8fdb('0x9')](),controller[_0x8fdb('0xc')]);router['get']('/:id',auth[_0x8fdb('0x9')](),controller['show']);router['get']('/:id/dispositions',auth[_0x8fdb('0x9')](),controller[_0x8fdb('0xd')]);router[_0x8fdb('0x8')](_0x8fdb('0xe'),auth[_0x8fdb('0x9')](),controller[_0x8fdb('0xf')]);router['get'](_0x8fdb('0x10'),auth[_0x8fdb('0x9')](),controller[_0x8fdb('0x11')]);router[_0x8fdb('0x8')](_0x8fdb('0x12'),auth[_0x8fdb('0x9')](),controller[_0x8fdb('0x13')]);router[_0x8fdb('0x8')](_0x8fdb('0x14'),auth[_0x8fdb('0x9')](),controller[_0x8fdb('0x15')]);router['post']('/',auth['isAuthenticated'](),controller[_0x8fdb('0x16')]);router[_0x8fdb('0x17')](_0x8fdb('0x18'),auth[_0x8fdb('0x9')](),controller[_0x8fdb('0x19')]);router[_0x8fdb('0x17')](_0x8fdb('0xe'),auth[_0x8fdb('0x9')](),controller[_0x8fdb('0x1a')]);router[_0x8fdb('0x17')]('/:id/fields',auth[_0x8fdb('0x9')](),controller[_0x8fdb('0x1b')]);router[_0x8fdb('0x17')]('/:id/users',auth[_0x8fdb('0x9')](),controller[_0x8fdb('0x1c')]);router[_0x8fdb('0x1d')](_0x8fdb('0x1e'),auth['isAuthenticated'](),controller['update']);router[_0x8fdb('0x1f')](_0x8fdb('0x1e'),auth[_0x8fdb('0x9')](),controller[_0x8fdb('0x20')]);router[_0x8fdb('0x1f')](_0x8fdb('0x18'),auth[_0x8fdb('0x9')](),controller[_0x8fdb('0x21')]);router['delete'](_0x8fdb('0x14'),auth[_0x8fdb('0x9')](),controller[_0x8fdb('0x22')]);module[_0x8fdb('0x23')]=router;
\ No newline at end of file
+var _0x61c2=['/:id/fields','getCustomFields','/:id/users','getAgents','post','create','/:id/dispositions','addDisposition','/:id/contacts','addContacts','addCustomField','put','update','destroy','delete','removeDispositions','removeAgents','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','get','index','/describe','/:id','isAuthenticated','getDispositions','getContacts','/:id/contacts/csv','getContactsCsv'];(function(_0x8dffcb,_0x357af6){var _0x4dfbe6=function(_0x452f54){while(--_0x452f54){_0x8dffcb['push'](_0x8dffcb['shift']());}};_0x4dfbe6(++_0x357af6);}(_0x61c2,0xbc));var _0x261c=function(_0x5339f9,_0x17c027){_0x5339f9=_0x5339f9-0x0;var _0x34680e=_0x61c2[_0x5339f9];return _0x34680e;};'use strict';var multer=require(_0x261c('0x0'));var util=require(_0x261c('0x1'));var path=require(_0x261c('0x2'));var timeout=require(_0x261c('0x3'));var express=require('express');var router=express[_0x261c('0x4')]();var auth=require(_0x261c('0x5'));var interaction=require(_0x261c('0x6'));var config=require('../../config/environment');var controller=require('./cmList.controller');router[_0x261c('0x7')]('/',auth['isAuthenticated'](),controller[_0x261c('0x8')]);router[_0x261c('0x7')](_0x261c('0x9'),auth['isAuthenticated'](),controller['describe']);router['get'](_0x261c('0xa'),auth[_0x261c('0xb')](),controller['show']);router[_0x261c('0x7')]('/:id/dispositions',auth[_0x261c('0xb')](),controller[_0x261c('0xc')]);router[_0x261c('0x7')]('/:id/contacts',auth['isAuthenticated'](),controller[_0x261c('0xd')]);router[_0x261c('0x7')](_0x261c('0xe'),auth[_0x261c('0xb')](),controller[_0x261c('0xf')]);router['get'](_0x261c('0x10'),auth[_0x261c('0xb')](),controller[_0x261c('0x11')]);router[_0x261c('0x7')](_0x261c('0x12'),auth['isAuthenticated'](),controller[_0x261c('0x13')]);router[_0x261c('0x14')]('/',auth[_0x261c('0xb')](),controller[_0x261c('0x15')]);router[_0x261c('0x14')](_0x261c('0x16'),auth['isAuthenticated'](),controller[_0x261c('0x17')]);router['post'](_0x261c('0x18'),auth[_0x261c('0xb')](),controller[_0x261c('0x19')]);router[_0x261c('0x14')](_0x261c('0x10'),auth['isAuthenticated'](),controller[_0x261c('0x1a')]);router['post'](_0x261c('0x12'),auth[_0x261c('0xb')](),controller['addAgents']);router[_0x261c('0x1b')](_0x261c('0xa'),auth[_0x261c('0xb')](),controller[_0x261c('0x1c')]);router['delete']('/:id',auth['isAuthenticated'](),controller[_0x261c('0x1d')]);router[_0x261c('0x1e')](_0x261c('0x16'),auth[_0x261c('0xb')](),controller[_0x261c('0x1f')]);router[_0x261c('0x1e')](_0x261c('0x12'),auth[_0x261c('0xb')](),controller[_0x261c('0x20')]);module[_0x261c('0x21')]=router;
\ No newline at end of file
index f7f22c4..942c4fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c63=['VIRTUAL','getDataValue','STRING','sequelize','exports'];(function(_0x30e196,_0x20e04a){var _0x394bff=function(_0x5d1817){while(--_0x5d1817){_0x30e196['push'](_0x30e196['shift']());}};_0x394bff(++_0x20e04a);}(_0x9c63,0x1a7));var _0x39c6=function(_0x3a4f65,_0x5f1391){_0x3a4f65=_0x3a4f65-0x0;var _0x39af3e=_0x9c63[_0x3a4f65];return _0x39af3e;};'use strict';var Sequelize=require(_0x39c6('0x0'));module[_0x39c6('0x1')]={'name':{'type':Sequelize[_0x39c6('0x2')],'get':function(_0x30f25a){return this[_0x39c6('0x3')]('field');}},'field':{'type':Sequelize[_0x39c6('0x4')],'allowNull':![]},'operator':{'type':Sequelize[_0x39c6('0x4')],'allowNull':![]},'value':{'type':Sequelize['STRING'],'allowNull':![]}};
\ No newline at end of file
+var _0x263b=['STRING','sequelize','exports','VIRTUAL','getDataValue','field'];(function(_0xaa0309,_0x1c8008){var _0x5de7ce=function(_0x3aa6ae){while(--_0x3aa6ae){_0xaa0309['push'](_0xaa0309['shift']());}};_0x5de7ce(++_0x1c8008);}(_0x263b,0xdf));var _0xb263=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x263b[_0x501510];return _0x1e6ee5;};'use strict';var Sequelize=require(_0xb263('0x0'));module[_0xb263('0x1')]={'name':{'type':Sequelize[_0xb263('0x2')],'get':function(_0x538149){return this[_0xb263('0x3')](_0xb263('0x4'));}},'field':{'type':Sequelize[_0xb263('0x5')],'allowNull':![]},'operator':{'type':Sequelize['STRING'],'allowNull':![]},'value':{'type':Sequelize[_0xb263('0x5')],'allowNull':![]}};
\ No newline at end of file
index 6c060f3..78cc3dc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9147=['mustache','util','path','sox','ejs','squel','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject','save','then','destroy','end','stack','name','send','update','body','Condition','params','catch','html-pdf','eml-format','rimraf','request-promise','moment'];(function(_0x33ded9,_0x2d00aa){var _0x1ee27a=function(_0x54fb4a){while(--_0x54fb4a){_0x33ded9['push'](_0x33ded9['shift']());}};_0x1ee27a(++_0x2d00aa);}(_0x9147,0x7f));var _0x7914=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x9147[_0x501510];return _0x1e6ee5;};'use strict';var pdf=require(_0x7914('0x0'));var emlformat=require(_0x7914('0x1'));var rimraf=require(_0x7914('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x7914('0x3'));var moment=require(_0x7914('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x7914('0x5'));var util=require(_0x7914('0x6'));var path=require(_0x7914('0x7'));var sox=require(_0x7914('0x8'));var csv=require('to-csv');var ejs=require(_0x7914('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x7914('0xa'));var crypto=require('crypto');var jsforce=require(_0x7914('0xb'));var deskjs=require(_0x7914('0xc'));var toCsv=require(_0x7914('0xd'));var querystring=require(_0x7914('0xe'));var Papa=require(_0x7914('0xf'));var Redis=require(_0x7914('0x10'));var authService=require('../../components/auth/service');var qs=require(_0x7914('0x11'));var hardwareService=require(_0x7914('0x12'));var logger=require(_0x7914('0x13'))(_0x7914('0x14'));var utils=require('../../config/utils');var config=require(_0x7914('0x15'));var db=require(_0x7914('0x16'))['db'];function respondWithStatusCode(_0x1d39e8,_0x9e8171){_0x9e8171=_0x9e8171||0xcc;return function(_0x10d62b){if(_0x10d62b){return _0x1d39e8[_0x7914('0x17')](_0x9e8171);}return _0x1d39e8['status'](_0x9e8171)['end']();};}function respondWithResult(_0x48bb08,_0x2089d7){_0x2089d7=_0x2089d7||0xc8;return function(_0x543680){if(_0x543680){return _0x48bb08[_0x7914('0x18')](_0x2089d7)[_0x7914('0x19')](_0x543680);}};}function respondWithFilteredResult(_0x225a08,_0x38da04){return function(_0x5dfc5c){if(_0x5dfc5c){var _0x3073b6=_0x5dfc5c[_0x7914('0x1a')],_0x1be13a=_0x38da04[_0x7914('0x1b')],_0x307436=_0x38da04[_0x7914('0x1b')]+_0x38da04[_0x7914('0x1c')],_0x4fbea3;if(_0x307436>=_0x3073b6){_0x307436=_0x3073b6;_0x4fbea3=0xc8;}else{_0x4fbea3=0xce;}_0x225a08['status'](_0x4fbea3);return _0x225a08['set'](_0x7914('0x1d'),_0x1be13a+'-'+_0x307436+'/'+_0x3073b6)['json'](_0x5dfc5c);}return null;};}function patchUpdates(_0x52dcad){return function(_0x4339ad){try{jsonpatch[_0x7914('0x1e')](_0x4339ad,_0x52dcad,!![]);}catch(_0x3d20db){return BPromise[_0x7914('0x1f')](_0x3d20db);}return _0x4339ad[_0x7914('0x20')]();};}function saveUpdates(_0x2a7262,_0x14d65b){return function(_0x334f9b){if(_0x334f9b){return _0x334f9b['update'](_0x2a7262)[_0x7914('0x21')](function(_0x2fad00){return _0x2fad00;});}return null;};}function removeEntity(_0x5c9608,_0x71fb5){return function(_0x427ccb){if(_0x427ccb){return _0x427ccb[_0x7914('0x22')]()[_0x7914('0x21')](function(){_0x5c9608['status'](0xcc)[_0x7914('0x23')]();});}};}function handleEntityNotFound(_0x13d364,_0x1a95e1){return function(_0x21763f){if(!_0x21763f){_0x13d364[_0x7914('0x17')](0x194);}return _0x21763f;};}function handleError(_0x495541,_0x16552b){_0x16552b=_0x16552b||0x1f4;return function(_0x202b96){logger['error'](_0x202b96[_0x7914('0x24')]);if(_0x202b96[_0x7914('0x25')]){delete _0x202b96[_0x7914('0x25')];}_0x495541[_0x7914('0x18')](_0x16552b)[_0x7914('0x26')](_0x202b96);};}exports[_0x7914('0x27')]=function(_0x5f5609,_0x3e1de5){if(_0x5f5609[_0x7914('0x28')]['id']){delete _0x5f5609[_0x7914('0x28')]['id'];}return db[_0x7914('0x29')]['find']({'where':{'id':_0x5f5609[_0x7914('0x2a')]['id']}})[_0x7914('0x21')](handleEntityNotFound(_0x3e1de5,null))[_0x7914('0x21')](saveUpdates(_0x5f5609[_0x7914('0x28')],null))['then'](respondWithResult(_0x3e1de5,null))[_0x7914('0x2b')](handleError(_0x3e1de5,null));};exports[_0x7914('0x22')]=function(_0x23d02a,_0x3f59a8){return db[_0x7914('0x29')]['find']({'where':{'id':_0x23d02a['params']['id']}})[_0x7914('0x21')](handleEntityNotFound(_0x3f59a8,null))[_0x7914('0x21')](removeEntity(_0x3f59a8,null))[_0x7914('0x2b')](handleError(_0x3f59a8,null));};
\ No newline at end of file
+var _0x6db5=['../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','count','offset','limit','set','json','apply','update','destroy','error','stack','name','send','Condition','params','then','catch','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis'];(function(_0x4ec1cc,_0x53c6f5){var _0x4d5f74=function(_0x3a722d){while(--_0x3a722d){_0x4ec1cc['push'](_0x4ec1cc['shift']());}};_0x4d5f74(++_0x53c6f5);}(_0x6db5,0x17a));var _0x56db=function(_0x323854,_0x490e58){_0x323854=_0x323854-0x0;var _0x5691ec=_0x6db5[_0x323854];return _0x5691ec;};'use strict';var pdf=require(_0x56db('0x0'));var emlformat=require(_0x56db('0x1'));var rimraf=require(_0x56db('0x2'));var zipdir=require(_0x56db('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x56db('0x4'));var moment=require(_0x56db('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x56db('0x6'));var util=require(_0x56db('0x7'));var path=require('path');var sox=require(_0x56db('0x8'));var csv=require('to-csv');var ejs=require(_0x56db('0x9'));var fs=require('fs');var _=require(_0x56db('0xa'));var squel=require('squel');var crypto=require(_0x56db('0xb'));var jsforce=require(_0x56db('0xc'));var deskjs=require(_0x56db('0xd'));var toCsv=require(_0x56db('0xe'));var querystring=require(_0x56db('0xf'));var Papa=require(_0x56db('0x10'));var Redis=require(_0x56db('0x11'));var authService=require(_0x56db('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x56db('0x13'));var logger=require(_0x56db('0x14'))(_0x56db('0x15'));var utils=require(_0x56db('0x16'));var config=require(_0x56db('0x17'));var db=require(_0x56db('0x18'))['db'];function respondWithStatusCode(_0x187f33,_0x49071b){_0x49071b=_0x49071b||0xcc;return function(_0x34fce4){if(_0x34fce4){return _0x187f33[_0x56db('0x19')](_0x49071b);}return _0x187f33['status'](_0x49071b)[_0x56db('0x1a')]();};}function respondWithResult(_0xb4e0a5,_0x3c816a){_0x3c816a=_0x3c816a||0xc8;return function(_0x12689b){if(_0x12689b){return _0xb4e0a5[_0x56db('0x1b')](_0x3c816a)['json'](_0x12689b);}};}function respondWithFilteredResult(_0x460fc9,_0x16df0c){return function(_0xfd186b){if(_0xfd186b){var _0x2fd511=_0xfd186b[_0x56db('0x1c')],_0x3a7579=_0x16df0c[_0x56db('0x1d')],_0x242002=_0x16df0c[_0x56db('0x1d')]+_0x16df0c[_0x56db('0x1e')],_0xe28c19;if(_0x242002>=_0x2fd511){_0x242002=_0x2fd511;_0xe28c19=0xc8;}else{_0xe28c19=0xce;}_0x460fc9['status'](_0xe28c19);return _0x460fc9[_0x56db('0x1f')]('Content-Range',_0x3a7579+'-'+_0x242002+'/'+_0x2fd511)[_0x56db('0x20')](_0xfd186b);}return null;};}function patchUpdates(_0x462fee){return function(_0x4307bb){try{jsonpatch[_0x56db('0x21')](_0x4307bb,_0x462fee,!![]);}catch(_0x58809f){return BPromise['reject'](_0x58809f);}return _0x4307bb['save']();};}function saveUpdates(_0x36a58d,_0x50b2a9){return function(_0x1bdd84){if(_0x1bdd84){return _0x1bdd84[_0x56db('0x22')](_0x36a58d)['then'](function(_0x54c374){return _0x54c374;});}return null;};}function removeEntity(_0xc74320,_0x5cd800){return function(_0x108cf9){if(_0x108cf9){return _0x108cf9[_0x56db('0x23')]()['then'](function(){_0xc74320[_0x56db('0x1b')](0xcc)[_0x56db('0x1a')]();});}};}function handleEntityNotFound(_0x64e9bc,_0x35e5dd){return function(_0x167b76){if(!_0x167b76){_0x64e9bc['sendStatus'](0x194);}return _0x167b76;};}function handleError(_0x4d5417,_0x3cb301){_0x3cb301=_0x3cb301||0x1f4;return function(_0x2ac155){logger[_0x56db('0x24')](_0x2ac155[_0x56db('0x25')]);if(_0x2ac155['name']){delete _0x2ac155[_0x56db('0x26')];}_0x4d5417['status'](_0x3cb301)[_0x56db('0x27')](_0x2ac155);};}exports['update']=function(_0x2dc558,_0x474f11){if(_0x2dc558['body']['id']){delete _0x2dc558['body']['id'];}return db[_0x56db('0x28')]['find']({'where':{'id':_0x2dc558[_0x56db('0x29')]['id']}})['then'](handleEntityNotFound(_0x474f11,null))[_0x56db('0x2a')](saveUpdates(_0x2dc558['body'],null))[_0x56db('0x2a')](respondWithResult(_0x474f11,null))[_0x56db('0x2b')](handleError(_0x474f11,null));};exports[_0x56db('0x23')]=function(_0x1d241e,_0xa6d9a9){return db[_0x56db('0x28')]['find']({'where':{'id':_0x1d241e[_0x56db('0x29')]['id']}})[_0x56db('0x2a')](handleEntityNotFound(_0xa6d9a9,null))[_0x56db('0x2a')](removeEntity(_0xa6d9a9,null))['catch'](handleError(_0xa6d9a9,null));};
\ No newline at end of file
index db7803a..4fd7015 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x40fd=['define','Condition','tools_conditions','util','api','bluebird','request-promise','path','rimraf','../../config/environment','./condition.attributes','exports'];(function(_0x2addb0,_0x3ca911){var _0x20152a=function(_0x226bd5){while(--_0x226bd5){_0x2addb0['push'](_0x2addb0['shift']());}};_0x20152a(++_0x3ca911);}(_0x40fd,0x16b));var _0xd40f=function(_0x273c39,_0x1052e6){_0x273c39=_0x273c39-0x0;var _0x46d6b5=_0x40fd[_0x273c39];return _0x46d6b5;};'use strict';var _=require('lodash');var util=require(_0xd40f('0x0'));var logger=require('../../config/logger')(_0xd40f('0x1'));var moment=require('moment');var BPromise=require(_0xd40f('0x2'));var rp=require(_0xd40f('0x3'));var fs=require('fs');var path=require(_0xd40f('0x4'));var rimraf=require(_0xd40f('0x5'));var config=require(_0xd40f('0x6'));var attributes=require(_0xd40f('0x7'));module[_0xd40f('0x8')]=function(_0x3166f7,_0x378ad5){return _0x3166f7[_0xd40f('0x9')](_0xd40f('0xa'),attributes,{'tableName':_0xd40f('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x411e=['define','Condition','lodash','../../config/logger','api','moment','request-promise','path','rimraf','../../config/environment','exports'];(function(_0x40297f,_0x608ea4){var _0x7d2d16=function(_0x427813){while(--_0x427813){_0x40297f['push'](_0x40297f['shift']());}};_0x7d2d16(++_0x608ea4);}(_0x411e,0x7b));var _0xe411=function(_0x262baa,_0x283058){_0x262baa=_0x262baa-0x0;var _0x4f2257=_0x411e[_0x262baa];return _0x4f2257;};'use strict';var _=require(_0xe411('0x0'));var util=require('util');var logger=require(_0xe411('0x1'))(_0xe411('0x2'));var moment=require(_0xe411('0x3'));var BPromise=require('bluebird');var rp=require(_0xe411('0x4'));var fs=require('fs');var path=require(_0xe411('0x5'));var rimraf=require(_0xe411('0x6'));var config=require(_0xe411('0x7'));var attributes=require('./condition.attributes');module[_0xe411('0x8')]=function(_0x1ee951,_0x4ced47){return _0x1ee951[_0xe411('0x9')](_0xe411('0xa'),attributes,{'tableName':'tools_conditions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6fc8df3..ee45008 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x487a=['util','moment','bluebird','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','Condition,\x20%s,\x20%s','request\x20sent','debug','Condition,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash'];(function(_0x165cf5,_0x434402){var _0x302e4a=function(_0x17d1fc){while(--_0x17d1fc){_0x165cf5['push'](_0x165cf5['shift']());}};_0x302e4a(++_0x434402);}(_0x487a,0xbf));var _0xa487=function(_0x3a9661,_0x530b12){_0x3a9661=_0x3a9661-0x0;var _0x5bb119=_0x487a[_0x3a9661];return _0x5bb119;};'use strict';var _=require(_0xa487('0x0'));var util=require(_0xa487('0x1'));var moment=require(_0xa487('0x2'));var BPromise=require(_0xa487('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xa487('0x4'));var db=require(_0xa487('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xa487('0x6'))(_0xa487('0x7'));var config=require(_0xa487('0x8'));var jayson=require(_0xa487('0x9'));var client=jayson[_0xa487('0xa')][_0xa487('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xa016ad,_0x3c28e3,_0x4231e4){return new BPromise(function(_0x23799e,_0x283c8f){return client[_0xa487('0xc')](_0xa016ad,_0x4231e4)['then'](function(_0xa8dc77){logger[_0xa487('0xd')](_0xa487('0xe'),_0x3c28e3,_0xa487('0xf'));logger[_0xa487('0x10')](_0xa487('0x11'),_0x3c28e3,_0xa487('0xf'),JSON[_0xa487('0x12')](_0xa8dc77));if(_0xa8dc77[_0xa487('0x13')]){if(_0xa8dc77[_0xa487('0x13')][_0xa487('0x14')]===0x1f4){logger[_0xa487('0x13')]('Condition,\x20%s,\x20%s',_0x3c28e3,_0xa8dc77[_0xa487('0x13')][_0xa487('0x15')]);return _0x283c8f(_0xa8dc77[_0xa487('0x13')]['message']);}logger[_0xa487('0x13')](_0xa487('0xe'),_0x3c28e3,_0xa8dc77['error']['message']);return _0x23799e(_0xa8dc77['error'][_0xa487('0x15')]);}else{logger[_0xa487('0xd')](_0xa487('0xe'),_0x3c28e3,_0xa487('0xf'));_0x23799e(_0xa8dc77[_0xa487('0x16')][_0xa487('0x15')]);}})[_0xa487('0x17')](function(_0x460724){logger['error'](_0xa487('0xe'),_0x3c28e3,_0x460724);_0x283c8f(_0x460724);});});}
\ No newline at end of file
+var _0xa23a=['randomstring','../../config/utils','client','request','then','info','Condition,\x20%s,\x20%s','request\x20sent','debug','Condition,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird'];(function(_0x392886,_0x42d6e7){var _0x4dabb9=function(_0x2ffb14){while(--_0x2ffb14){_0x392886['push'](_0x392886['shift']());}};_0x4dabb9(++_0x42d6e7);}(_0xa23a,0x128));var _0xaa23=function(_0x24487f,_0x9b3ea0){_0x24487f=_0x24487f-0x0;var _0x456456=_0xa23a[_0x24487f];return _0x456456;};'use strict';var _=require(_0xaa23('0x0'));var util=require(_0xaa23('0x1'));var moment=require(_0xaa23('0x2'));var BPromise=require(_0xaa23('0x3'));var rs=require(_0xaa23('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xaa23('0x5'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xaa23('0x6')]['http']({'port':0x232a});function respondWithRpcPromise(_0xfdd4ad,_0x211787,_0x5ab35d){return new BPromise(function(_0x3d2284,_0x4d32a3){return client[_0xaa23('0x7')](_0xfdd4ad,_0x5ab35d)[_0xaa23('0x8')](function(_0x4f55fd){logger[_0xaa23('0x9')](_0xaa23('0xa'),_0x211787,_0xaa23('0xb'));logger[_0xaa23('0xc')](_0xaa23('0xd'),_0x211787,_0xaa23('0xb'),JSON[_0xaa23('0xe')](_0x4f55fd));if(_0x4f55fd[_0xaa23('0xf')]){if(_0x4f55fd[_0xaa23('0xf')][_0xaa23('0x10')]===0x1f4){logger[_0xaa23('0xf')](_0xaa23('0xa'),_0x211787,_0x4f55fd['error'][_0xaa23('0x11')]);return _0x4d32a3(_0x4f55fd[_0xaa23('0xf')][_0xaa23('0x11')]);}logger[_0xaa23('0xf')](_0xaa23('0xa'),_0x211787,_0x4f55fd[_0xaa23('0xf')][_0xaa23('0x11')]);return _0x3d2284(_0x4f55fd[_0xaa23('0xf')]['message']);}else{logger[_0xaa23('0x9')](_0xaa23('0xa'),_0x211787,_0xaa23('0xb'));_0x3d2284(_0x4f55fd[_0xaa23('0x12')]['message']);}})[_0xaa23('0x13')](function(_0x18b8c6){logger['error'](_0xaa23('0xa'),_0x211787,_0x18b8c6);_0x4d32a3(_0x18b8c6);});});}
\ No newline at end of file
index 88e86dd..2644f6d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd02f=['update','delete','destroy','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./condition.controller','put','/:id','isAuthenticated'];(function(_0x3b3dfb,_0x5b1fc9){var _0x11f043=function(_0x577698){while(--_0x577698){_0x3b3dfb['push'](_0x3b3dfb['shift']());}};_0x11f043(++_0x5b1fc9);}(_0xd02f,0x1b7));var _0xfd02=function(_0x5a6ef9,_0x1c56d3){_0x5a6ef9=_0x5a6ef9-0x0;var _0x133ba2=_0xd02f[_0x5a6ef9];return _0x133ba2;};'use strict';var multer=require(_0xfd02('0x0'));var util=require(_0xfd02('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0xfd02('0x2'));var router=express[_0xfd02('0x3')]();var auth=require(_0xfd02('0x4'));var interaction=require(_0xfd02('0x5'));var config=require(_0xfd02('0x6'));var controller=require(_0xfd02('0x7'));router[_0xfd02('0x8')](_0xfd02('0x9'),auth[_0xfd02('0xa')](),controller[_0xfd02('0xb')]);router[_0xfd02('0xc')](_0xfd02('0x9'),auth['isAuthenticated'](),controller[_0xfd02('0xd')]);module[_0xfd02('0xe')]=router;
\ No newline at end of file
+var _0xe5b1=['express','Router','../../components/interaction/service','../../config/environment','./condition.controller','put','/:id','isAuthenticated','delete','destroy','util','path','connect-timeout'];(function(_0x30ae5e,_0x391fc4){var _0x1f2e93=function(_0x60307d){while(--_0x60307d){_0x30ae5e['push'](_0x30ae5e['shift']());}};_0x1f2e93(++_0x391fc4);}(_0xe5b1,0x19d));var _0x1e5b=function(_0x3be7ff,_0x12e714){_0x3be7ff=_0x3be7ff-0x0;var _0x186721=_0xe5b1[_0x3be7ff];return _0x186721;};'use strict';var multer=require('multer');var util=require(_0x1e5b('0x0'));var path=require(_0x1e5b('0x1'));var timeout=require(_0x1e5b('0x2'));var express=require(_0x1e5b('0x3'));var router=express[_0x1e5b('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x1e5b('0x5'));var config=require(_0x1e5b('0x6'));var controller=require(_0x1e5b('0x7'));router[_0x1e5b('0x8')](_0x1e5b('0x9'),auth[_0x1e5b('0xa')](),controller['update']);router[_0x1e5b('0xb')]('/:id',auth[_0x1e5b('0xa')](),controller[_0x1e5b('0xc')]);module['exports']=router;
\ No newline at end of file
index 4bc2893..9551f12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x37ca=['name','sequelize','exports','STRING'];(function(_0x272d7c,_0x25198c){var _0x529e1d=function(_0x5628b7){while(--_0x5628b7){_0x272d7c['push'](_0x272d7c['shift']());}};_0x529e1d(++_0x25198c);}(_0x37ca,0x7d));var _0xa37c=function(_0x35eae4,_0x5eaac2){_0x35eae4=_0x35eae4-0x0;var _0x24d429=_0x37ca[_0x35eae4];return _0x24d429;};'use strict';var Sequelize=require(_0xa37c('0x0'));module[_0xa37c('0x1')]={'name':{'type':Sequelize[_0xa37c('0x2')],'allowNull':![],'unique':_0xa37c('0x3')},'description':{'type':Sequelize[_0xa37c('0x2')]}};
\ No newline at end of file
+var _0xbf33=['sequelize','STRING','name'];(function(_0x1fd222,_0x2588de){var _0x4fca24=function(_0x46d96e){while(--_0x46d96e){_0x1fd222['push'](_0x1fd222['shift']());}};_0x4fca24(++_0x2588de);}(_0xbf33,0x171));var _0x3bf3=function(_0x138f59,_0x1b53fb){_0x138f59=_0x138f59-0x0;var _0x3d114d=_0xbf33[_0x138f59];return _0x3d114d;};'use strict';var Sequelize=require(_0x3bf3('0x0'));module['exports']={'name':{'type':Sequelize[_0x3bf3('0x1')],'allowNull':![],'unique':_0x3bf3('0x2')},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index b7e89a7..0351335 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x67e1=['hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','map','field','options','Dashboard','includeAll','include','findAll','rows','catch','show','params','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','omit','createdAt','updatedAt','userProfileId','type','iframe','attrUrl','attrs','value','custom','attrPath','clock','attrHourFormat','HH:mm:ss','attrTimezone','0.00','attrFontSize','counter','attrMetric','total','attrVoiceQueues','pie-chart','attrSerie1','attrSerie2','attrSerie3','attrReport','reportType','attrRefresh','stringify','DashboardItem','getItems','findOne','html-pdf','eml-format','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','ioredis','../../config/license/hardware','../../config/utils','../../mysqldb','redis','defaults','./dashboard.socket','register','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject','save','update','then','destroy','get','CustomDashboards','end','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length'];(function(_0x47af23,_0x3c4174){var _0x4384cd=function(_0x527836){while(--_0x527836){_0x47af23['push'](_0x47af23['shift']());}};_0x4384cd(++_0x3c4174);}(_0x67e1,0x18f));var _0x167e=function(_0x326c8f,_0x5fbc58){_0x326c8f=_0x326c8f-0x0;var _0xa129ea=_0x67e1[_0x326c8f];return _0xa129ea;};'use strict';var pdf=require(_0x167e('0x0'));var emlformat=require(_0x167e('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x167e('0x2'));var moment=require(_0x167e('0x3'));var BPromise=require(_0x167e('0x4'));var Mustache=require('mustache');var util=require(_0x167e('0x5'));var path=require(_0x167e('0x6'));var sox=require(_0x167e('0x7'));var csv=require(_0x167e('0x8'));var ejs=require(_0x167e('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x167e('0xa'));var crypto=require(_0x167e('0xb'));var jsforce=require(_0x167e('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x167e('0x8'));var querystring=require(_0x167e('0xd'));var Papa=require(_0x167e('0xe'));var Redis=require(_0x167e('0xf'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x167e('0x10'));var logger=require('../../config/logger')('api');var utils=require(_0x167e('0x11'));var config=require('../../config/environment');var db=require(_0x167e('0x12'))['db'];config[_0x167e('0x13')]=_[_0x167e('0x14')](config[_0x167e('0x13')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x167e('0x15'))[_0x167e('0x16')](socket);function respondWithStatusCode(_0x4c06f0,_0x44188f){_0x44188f=_0x44188f||0xcc;return function(_0x2d7c5e){if(_0x2d7c5e){return _0x4c06f0[_0x167e('0x17')](_0x44188f);}return _0x4c06f0[_0x167e('0x18')](_0x44188f)['end']();};}function respondWithResult(_0x4d6f17,_0x33d616){_0x33d616=_0x33d616||0xc8;return function(_0x521da4){if(_0x521da4){return _0x4d6f17[_0x167e('0x18')](_0x33d616)[_0x167e('0x19')](_0x521da4);}};}function respondWithFilteredResult(_0x21cae6,_0x1b966a){return function(_0x4556d8){if(_0x4556d8){var _0x5d64d4=_0x4556d8[_0x167e('0x1a')],_0x398f5d=_0x1b966a[_0x167e('0x1b')],_0x3a62b4=_0x1b966a[_0x167e('0x1b')]+_0x1b966a[_0x167e('0x1c')],_0x425899;if(_0x3a62b4>=_0x5d64d4){_0x3a62b4=_0x5d64d4;_0x425899=0xc8;}else{_0x425899=0xce;}_0x21cae6['status'](_0x425899);return _0x21cae6['set'](_0x167e('0x1d'),_0x398f5d+'-'+_0x3a62b4+'/'+_0x5d64d4)[_0x167e('0x19')](_0x4556d8);}return null;};}function patchUpdates(_0x4e2013){return function(_0x567389){try{jsonpatch[_0x167e('0x1e')](_0x567389,_0x4e2013,!![]);}catch(_0xec0f95){return BPromise[_0x167e('0x1f')](_0xec0f95);}return _0x567389[_0x167e('0x20')]();};}function saveUpdates(_0x23257b,_0x27c0fe){return function(_0x2aaa76){if(_0x2aaa76){return _0x2aaa76[_0x167e('0x21')](_0x23257b)[_0x167e('0x22')](function(_0x41c0f3){return _0x41c0f3;});}return null;};}function removeEntity(_0x157924,_0x3f6350){return function(_0x48744c){if(_0x48744c){return _0x48744c[_0x167e('0x23')]()['then'](function(){var _0x33aff4=_0x48744c[_0x167e('0x24')]({'plain':!![]});var _0x42e7da=_0x167e('0x25');return db['UserProfileResource'][_0x167e('0x23')]({'where':{'type':_0x42e7da,'resourceId':_0x33aff4['id']}})['then'](function(){return _0x48744c;});})[_0x167e('0x22')](function(){_0x157924[_0x167e('0x18')](0xcc)[_0x167e('0x26')]();});}};}function handleEntityNotFound(_0x24bc6f,_0x294370){return function(_0x18a8c7){if(!_0x18a8c7){_0x24bc6f[_0x167e('0x17')](0x194);}return _0x18a8c7;};}function handleError(_0x59c204,_0x16c77f){_0x16c77f=_0x16c77f||0x1f4;return function(_0x579f71){logger[_0x167e('0x27')](_0x579f71[_0x167e('0x28')]);if(_0x579f71[_0x167e('0x29')]){delete _0x579f71['name'];}_0x59c204[_0x167e('0x18')](_0x16c77f)[_0x167e('0x2a')](_0x579f71);};}exports[_0x167e('0x2b')]=function(_0x4fbd3a,_0x300bd8){var _0x3e4756={},_0x5efbb2={},_0x12c7c6={'count':0x0,'rows':[]};var _0x250c34=db['Dashboard'][_0x167e('0x2c')];_0x5efbb2[_0x167e('0x2d')]=_[_0x167e('0x2e')](_0x250c34);_0x5efbb2[_0x167e('0x2f')]=_[_0x167e('0x2e')](_0x4fbd3a[_0x167e('0x2f')]);_0x5efbb2[_0x167e('0x30')]=_[_0x167e('0x31')](_0x5efbb2[_0x167e('0x2d')],_0x5efbb2[_0x167e('0x2f')]);_0x3e4756[_0x167e('0x32')]=_['intersection'](_0x5efbb2[_0x167e('0x2d')],qs[_0x167e('0x33')](_0x4fbd3a[_0x167e('0x2f')][_0x167e('0x33')]));_0x3e4756[_0x167e('0x32')]=_0x3e4756[_0x167e('0x32')][_0x167e('0x34')]?_0x3e4756[_0x167e('0x32')]:_0x5efbb2[_0x167e('0x2d')];if(!_0x4fbd3a['query'][_0x167e('0x35')](_0x167e('0x36'))){_0x3e4756['limit']=qs[_0x167e('0x1c')](_0x4fbd3a[_0x167e('0x2f')][_0x167e('0x1c')]);_0x3e4756[_0x167e('0x1b')]=qs['offset'](_0x4fbd3a[_0x167e('0x2f')]['offset']);}_0x3e4756[_0x167e('0x37')]=qs[_0x167e('0x38')](_0x4fbd3a['query'][_0x167e('0x38')]);_0x3e4756['where']=qs[_0x167e('0x30')](_[_0x167e('0x39')](_0x4fbd3a[_0x167e('0x2f')],_0x5efbb2['filters']));if(_0x4fbd3a['query'][_0x167e('0x3a')]){_0x3e4756[_0x167e('0x3b')]=_[_0x167e('0x3c')](_0x3e4756[_0x167e('0x3b')],{'$or':_[_0x167e('0x3d')](_0x250c34,function(_0x5a381b){if(_0x5a381b['type']['key']!=='VIRTUAL'){var _0x17fd3a={};_0x17fd3a[_0x5a381b[_0x167e('0x3e')]]={'$like':'%'+_0x4fbd3a[_0x167e('0x2f')][_0x167e('0x3a')]+'%'};return _0x17fd3a;}})});}_0x3e4756=_[_0x167e('0x3c')]({},_0x3e4756,_0x4fbd3a[_0x167e('0x3f')]);var _0x5c4982={'where':_0x3e4756['where']};return db[_0x167e('0x40')][_0x167e('0x1a')](_0x5c4982)[_0x167e('0x22')](function(_0x4e5258){_0x12c7c6[_0x167e('0x1a')]=_0x4e5258;if(_0x4fbd3a[_0x167e('0x2f')][_0x167e('0x41')]){_0x3e4756[_0x167e('0x42')]=[{'all':!![]}];}return db[_0x167e('0x40')][_0x167e('0x43')](_0x3e4756);})[_0x167e('0x22')](function(_0x4131b0){_0x12c7c6[_0x167e('0x44')]=_0x4131b0;return _0x12c7c6;})[_0x167e('0x22')](respondWithFilteredResult(_0x300bd8,_0x3e4756))[_0x167e('0x45')](handleError(_0x300bd8,null));};exports[_0x167e('0x46')]=function(_0x3beac2,_0x40f7b2){var _0x4fb49a={'raw':![],'where':{'id':_0x3beac2[_0x167e('0x47')]['id']}},_0x4e809e={};_0x4e809e[_0x167e('0x2d')]=_['keys'](db['Dashboard'][_0x167e('0x2c')]);_0x4e809e[_0x167e('0x2f')]=_[_0x167e('0x2e')](_0x3beac2[_0x167e('0x2f')]);_0x4e809e[_0x167e('0x30')]=_[_0x167e('0x31')](_0x4e809e['model'],_0x4e809e[_0x167e('0x2f')]);_0x4fb49a[_0x167e('0x32')]=_[_0x167e('0x31')](_0x4e809e[_0x167e('0x2d')],qs['fields'](_0x3beac2['query'][_0x167e('0x33')]));_0x4fb49a[_0x167e('0x32')]=_0x4fb49a[_0x167e('0x32')]['length']?_0x4fb49a[_0x167e('0x32')]:_0x4e809e['model'];if(_0x3beac2[_0x167e('0x2f')][_0x167e('0x41')]){_0x4fb49a[_0x167e('0x42')]=[{'all':!![]}];}_0x4fb49a=_['merge']({},_0x4fb49a,_0x3beac2['options']);return db[_0x167e('0x40')][_0x167e('0x48')](_0x4fb49a)[_0x167e('0x22')](handleEntityNotFound(_0x40f7b2,null))['then'](respondWithResult(_0x40f7b2,null))[_0x167e('0x45')](handleError(_0x40f7b2,null));};exports[_0x167e('0x49')]=function(_0x2c757b,_0x3f3ec3){return db[_0x167e('0x40')]['create'](_0x2c757b[_0x167e('0x4a')],{})['then'](function(_0x1c3a65){var _0x29f288=_0x2c757b[_0x167e('0x4b')]['get']({'plain':!![]});if(!_0x29f288)throw new Error(_0x167e('0x4c'));if(_0x29f288[_0x167e('0x4d')]===_0x167e('0x4b')){var _0x4d4620=_0x1c3a65[_0x167e('0x24')]({'plain':!![]});var _0x58447d=_0x167e('0x25');return db[_0x167e('0x4e')][_0x167e('0x48')]({'where':{'name':_0x58447d,'userProfileId':_0x29f288['userProfileId']},'raw':!![]})[_0x167e('0x22')](function(_0x26d20d){if(_0x26d20d&&_0x26d20d['autoAssociation']===0x0){return db[_0x167e('0x4f')][_0x167e('0x49')]({'name':_0x4d4620[_0x167e('0x29')],'resourceId':_0x4d4620['id'],'type':_0x26d20d[_0x167e('0x29')],'sectionId':_0x26d20d['id']},{})[_0x167e('0x22')](function(){return _0x1c3a65;});}else{return _0x1c3a65;}})[_0x167e('0x45')](function(_0x3551ef){logger[_0x167e('0x27')](_0x167e('0x50'),_0x3551ef);throw _0x3551ef;});}return _0x1c3a65;})[_0x167e('0x22')](respondWithResult(_0x3f3ec3,0xc9))[_0x167e('0x45')](handleError(_0x3f3ec3,null));};exports['clone']=function(_0x417155,_0x171b70){var _0x8c953={'raw':![],'where':{'id':_0x417155['params']['id']}},_0x1669a9={};_0x1669a9[_0x167e('0x2d')]=_[_0x167e('0x2e')](db[_0x167e('0x40')][_0x167e('0x2c')]);_0x8c953[_0x167e('0x32')]=_[_0x167e('0x31')](_0x1669a9[_0x167e('0x2d')],qs[_0x167e('0x33')](_0x417155[_0x167e('0x2f')][_0x167e('0x33')]));_0x8c953['attributes']=_0x8c953['attributes'][_0x167e('0x34')]?_0x8c953['attributes']:_0x1669a9[_0x167e('0x2d')];if(_0x417155[_0x167e('0x2f')]['includeAll']){_0x8c953[_0x167e('0x42')]=[{'all':!![]}];}_0x8c953=_[_0x167e('0x3c')]({},_0x8c953,_0x417155['options']);return db[_0x167e('0x40')][_0x167e('0x48')](_0x8c953)[_0x167e('0x22')](handleEntityNotFound(_0x171b70,null))[_0x167e('0x22')](function(_0x4b8c55){if(_0x4b8c55){var _0x2b8870=_0x4b8c55[_0x167e('0x24')]({'plain':!![]});_0x2b8870=qs[_0x167e('0x51')](_0x2b8870,['id',_0x167e('0x52'),_0x167e('0x53')]);_0x417155[_0x167e('0x4a')]=_[_0x167e('0x51')](_0x417155[_0x167e('0x4a')],['id',_0x167e('0x52'),_0x167e('0x53')]);return db[_0x167e('0x40')][_0x167e('0x49')](_[_0x167e('0x3c')](_0x2b8870,_0x417155[_0x167e('0x4a')]),{'include':_0x417155[_0x167e('0x2f')][_0x167e('0x41')]?[{'all':!![]}]:undefined})['then'](function(_0x34e6b1){var _0x3a2fe6=_0x417155[_0x167e('0x4b')][_0x167e('0x24')]({'plain':!![]});if(!_0x3a2fe6)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x3a2fe6[_0x167e('0x4d')]==='user'){var _0x4334e2=_0x34e6b1[_0x167e('0x24')]({'plain':!![]});var _0xe997b8='CustomDashboards';return db[_0x167e('0x4e')][_0x167e('0x48')]({'where':{'name':_0xe997b8,'userProfileId':_0x3a2fe6[_0x167e('0x54')]},'raw':!![]})[_0x167e('0x22')](function(_0x58611b){if(_0x58611b&&_0x58611b['autoAssociation']===0x0){return db[_0x167e('0x4f')][_0x167e('0x49')]({'name':_0x4334e2[_0x167e('0x29')],'resourceId':_0x4334e2['id'],'type':_0x58611b[_0x167e('0x29')],'sectionId':_0x58611b['id']},{})[_0x167e('0x22')](function(){return _0x34e6b1;});}else{return _0x34e6b1;}})['catch'](function(_0x585993){logger[_0x167e('0x27')](_0x167e('0x50'),_0x585993);throw _0x585993;});}return _0x34e6b1;});}})[_0x167e('0x22')](respondWithResult(_0x171b70,0xc9))[_0x167e('0x45')](handleError(_0x171b70,null));};exports['update']=function(_0x26b0b4,_0x27a4aa){if(_0x26b0b4[_0x167e('0x4a')]['id']){delete _0x26b0b4[_0x167e('0x4a')]['id'];}return db[_0x167e('0x40')][_0x167e('0x48')]({'where':{'id':_0x26b0b4['params']['id']}})[_0x167e('0x22')](handleEntityNotFound(_0x27a4aa,null))[_0x167e('0x22')](saveUpdates(_0x26b0b4[_0x167e('0x4a')],null))[_0x167e('0x22')](respondWithResult(_0x27a4aa,null))[_0x167e('0x45')](handleError(_0x27a4aa,null));};exports[_0x167e('0x23')]=function(_0x36a6cb,_0x4543e6){return db[_0x167e('0x40')][_0x167e('0x48')]({'where':{'id':_0x36a6cb['params']['id']}})[_0x167e('0x22')](handleEntityNotFound(_0x4543e6,null))[_0x167e('0x22')](removeEntity(_0x4543e6,null))[_0x167e('0x45')](handleError(_0x4543e6,null));};function widgetAttributes(_0x4f2142){try{switch(_0x4f2142[_0x167e('0x55')]){case _0x167e('0x56'):return[{'name':_0x167e('0x57'),'value':_0x4f2142[_0x167e('0x57')]||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142[_0x167e('0x58')][0x0]?_0x4f2142['attrs'][0x0][_0x167e('0x59')]:undefined)||'https://'}];case _0x167e('0x5a'):return[{'name':'attrPath','value':_0x4f2142[_0x167e('0x5b')]||(_0x4f2142['attrs']&&_0x4f2142['attrs'][0x0]?_0x4f2142[_0x167e('0x58')][0x0]['value']:undefined)||''}];case _0x167e('0x5c'):return[{'name':_0x167e('0x5d'),'value':_0x4f2142[_0x167e('0x5d')]||(_0x4f2142['attrs']&&_0x4f2142[_0x167e('0x58')][0x0]?_0x4f2142['attrs'][0x0][_0x167e('0x59')]:undefined)||_0x167e('0x5e')},{'name':'attrTimezone','value':_0x4f2142[_0x167e('0x5f')]||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142[_0x167e('0x58')][0x1]?_0x4f2142[_0x167e('0x58')][0x1]['value']:undefined)||_0x167e('0x60')},{'name':_0x167e('0x61'),'value':_0x4f2142['attrFontSize']||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142[_0x167e('0x58')][0x2]?_0x4f2142['attrs'][0x2][_0x167e('0x59')]:undefined)||0xc}];case _0x167e('0x62'):return[{'name':_0x167e('0x63'),'value':_0x4f2142[_0x167e('0x63')]||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142[_0x167e('0x58')][0x0]?_0x4f2142[_0x167e('0x58')][0x0][_0x167e('0x59')]:undefined)||_0x167e('0x64')},{'name':'attrVoiceQueues','value':_0x4f2142[_0x167e('0x65')]||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142[_0x167e('0x58')][0x1]?_0x4f2142[_0x167e('0x58')][0x1][_0x167e('0x59')]:undefined)||[]},{'name':'attrFontSize','value':_0x4f2142[_0x167e('0x61')]||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142['attrs'][0x2]?_0x4f2142['attrs'][0x2][_0x167e('0x59')]:undefined)||0x14}];case'multibar-chart':case _0x167e('0x66'):return[{'name':_0x167e('0x67'),'value':_0x4f2142[_0x167e('0x67')]||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142[_0x167e('0x58')][0x0]?_0x4f2142[_0x167e('0x58')][0x0]['value']:undefined)||'total'},{'name':_0x167e('0x68'),'value':_0x4f2142['attrSerie2']||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142['attrs'][0x1]?_0x4f2142[_0x167e('0x58')][0x1][_0x167e('0x59')]:undefined)||null},{'name':'attrSerie3','value':_0x4f2142[_0x167e('0x69')]||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142[_0x167e('0x58')][0x2]?_0x4f2142[_0x167e('0x58')][0x2]['value']:undefined)||null},{'name':_0x167e('0x65'),'value':_0x4f2142['attrVoiceQueues']||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142[_0x167e('0x58')][0x3]?_0x4f2142[_0x167e('0x58')][0x3][_0x167e('0x59')]:undefined)||[]}];case'web-report':return[{'name':_0x167e('0x6a'),'type':_0x4f2142[_0x167e('0x6b')]||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142[_0x167e('0x58')][0x0]?_0x4f2142['attrs'][0x0][_0x167e('0x55')]:undefined)||null,'value':_0x4f2142[_0x167e('0x6a')]||(_0x4f2142['attrs']&&_0x4f2142[_0x167e('0x58')][0x0]?_0x4f2142['attrs'][0x0]['value']:undefined)||null},{'name':'attrRefresh','value':_0x4f2142[_0x167e('0x6c')]||(_0x4f2142[_0x167e('0x58')]&&_0x4f2142[_0x167e('0x58')][0x1]?_0x4f2142[_0x167e('0x58')][0x1][_0x167e('0x59')]:undefined)||0x0}];default:return[];}}catch(_0x39f44e){logger['error']('widgetAttributes:\x20%s',JSON[_0x167e('0x6d')](_0x39f44e));return[];}}exports['addItem']=function(_0xd6b25f,_0x3ad66,_0x347e3f){if(_0xd6b25f['body']['id']){delete _0xd6b25f[_0x167e('0x4a')]['id'];}return db[_0x167e('0x40')][_0x167e('0x48')]({'where':{'id':_0xd6b25f[_0x167e('0x47')]['id']}})[_0x167e('0x22')](handleEntityNotFound(_0x3ad66,null))[_0x167e('0x22')](function(_0x55bda8){if(_0x55bda8){_0xd6b25f[_0x167e('0x4a')]['DashboardId']=_0x55bda8['id'];_0xd6b25f[_0x167e('0x4a')]['attrs']=widgetAttributes(_0xd6b25f[_0x167e('0x4a')]);return db[_0x167e('0x6e')]['create'](_0xd6b25f[_0x167e('0x4a')]);}})[_0x167e('0x22')](respondWithResult(_0x3ad66,null))[_0x167e('0x45')](handleError(_0x3ad66,null));};exports[_0x167e('0x6f')]=function(_0x1d2124,_0x185be4,_0x472264){var _0x543c3f={};var _0x4874f3={};var _0x1a95a0;var _0x5c84fa;return db[_0x167e('0x40')][_0x167e('0x70')]({'where':{'id':_0x1d2124[_0x167e('0x47')]['id']}})[_0x167e('0x22')](handleEntityNotFound(_0x185be4,null))[_0x167e('0x22')](function(_0x1a8ca8){if(_0x1a8ca8){_0x1a95a0=_0x1a8ca8;_0x4874f3['model']=_[_0x167e('0x2e')](db[_0x167e('0x6e')]['rawAttributes']);_0x4874f3['query']=_['keys'](_0x1d2124[_0x167e('0x2f')]);_0x4874f3[_0x167e('0x30')]=_['intersection'](_0x4874f3[_0x167e('0x2d')],_0x4874f3[_0x167e('0x2f')]);_0x543c3f[_0x167e('0x32')]=_['intersection'](_0x4874f3[_0x167e('0x2d')],qs[_0x167e('0x33')](_0x1d2124[_0x167e('0x2f')][_0x167e('0x33')]));_0x543c3f[_0x167e('0x32')]=_0x543c3f[_0x167e('0x32')]['length']?_0x543c3f[_0x167e('0x32')]:_0x4874f3[_0x167e('0x2d')];_0x543c3f[_0x167e('0x37')]=qs[_0x167e('0x38')](_0x1d2124[_0x167e('0x2f')]['sort']);_0x543c3f['where']=qs[_0x167e('0x30')](_[_0x167e('0x39')](_0x1d2124[_0x167e('0x2f')],_0x4874f3[_0x167e('0x30')]));if(_0x1d2124[_0x167e('0x2f')][_0x167e('0x3a')]){_0x543c3f[_0x167e('0x3b')]=_['merge'](_0x543c3f[_0x167e('0x3b')],{'$or':_['map'](_0x543c3f[_0x167e('0x32')],function(_0xad8ebb){var _0x2959a8={};_0x2959a8[_0xad8ebb]={'$like':'%'+_0x1d2124['query']['filter']+'%'};return _0x2959a8;})});}_0x543c3f=_[_0x167e('0x3c')]({},_0x543c3f,_0x1d2124[_0x167e('0x3f')]);return _0x1a95a0[_0x167e('0x6f')](_0x543c3f);}})['then'](function(_0x2ae7ca){if(_0x2ae7ca){_0x5c84fa=_0x2ae7ca[_0x167e('0x34')];if(!_0x1d2124[_0x167e('0x2f')][_0x167e('0x35')]('nolimit')){_0x543c3f[_0x167e('0x1c')]=qs['limit'](_0x1d2124[_0x167e('0x2f')][_0x167e('0x1c')]);_0x543c3f[_0x167e('0x1b')]=qs[_0x167e('0x1b')](_0x1d2124[_0x167e('0x2f')]['offset']);}return _0x1a95a0['getItems'](_0x543c3f);}})[_0x167e('0x22')](function(_0x51d10f){if(_0x51d10f){return _0x51d10f?{'count':_0x5c84fa,'rows':_0x51d10f}:null;}})[_0x167e('0x22')](respondWithResult(_0x185be4,null))[_0x167e('0x45')](handleError(_0x185be4,null));};
\ No newline at end of file
+var _0xb30c=['includeAll','include','findAll','rows','catch','params','intersection','length','find','create','get','role','user','UserProfileSection','userProfileId','autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','omit','createdAt','updatedAt','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','update','iframe','attrUrl','attrs','attrPath','value','attrHourFormat','attrTimezone','0.00','attrFontSize','attrMetric','attrVoiceQueues','multibar-chart','pie-chart','attrSerie1','total','attrSerie2','attrSerie3','reportType','attrReport','attrRefresh','widgetAttributes:\x20%s','stringify','addItem','DashboardId','getItems','DashboardItem','hasOwnProperty','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','ioredis','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','redis','defaults','localhost','./dashboard.socket','register','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','then','CustomDashboards','UserProfileResource','destroy','stack','name','send','index','Dashboard','rawAttributes','model','keys','query','attributes','fields','nolimit','order','sort','filters','pick','merge','type','key','VIRTUAL','filter','options','where'];(function(_0x52a6bf,_0x2df9f0){var _0x20e914=function(_0x2d38d6){while(--_0x2d38d6){_0x52a6bf['push'](_0x52a6bf['shift']());}};_0x20e914(++_0x2df9f0);}(_0xb30c,0x120));var _0xcb30=function(_0x4565ec,_0x16f9d8){_0x4565ec=_0x4565ec-0x0;var _0x1d592f=_0xb30c[_0x4565ec];return _0x1d592f;};'use strict';var pdf=require(_0xcb30('0x0'));var emlformat=require(_0xcb30('0x1'));var rimraf=require(_0xcb30('0x2'));var zipdir=require(_0xcb30('0x3'));var jsonpatch=require(_0xcb30('0x4'));var rp=require('request-promise');var moment=require(_0xcb30('0x5'));var BPromise=require(_0xcb30('0x6'));var Mustache=require('mustache');var util=require(_0xcb30('0x7'));var path=require('path');var sox=require(_0xcb30('0x8'));var csv=require(_0xcb30('0x9'));var ejs=require(_0xcb30('0xa'));var fs=require('fs');var _=require(_0xcb30('0xb'));var squel=require(_0xcb30('0xc'));var crypto=require(_0xcb30('0xd'));var jsforce=require(_0xcb30('0xe'));var deskjs=require(_0xcb30('0xf'));var toCsv=require(_0xcb30('0x9'));var querystring=require(_0xcb30('0x10'));var Papa=require('papaparse');var Redis=require(_0xcb30('0x11'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xcb30('0x12'));var logger=require(_0xcb30('0x13'))(_0xcb30('0x14'));var utils=require(_0xcb30('0x15'));var config=require(_0xcb30('0x16'));var db=require('../../mysqldb')['db'];config[_0xcb30('0x17')]=_[_0xcb30('0x18')](config['redis'],{'host':_0xcb30('0x19'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xcb30('0x17')]));require(_0xcb30('0x1a'))[_0xcb30('0x1b')](socket);function respondWithStatusCode(_0x535c00,_0x48752b){_0x48752b=_0x48752b||0xcc;return function(_0x1d2d1a){if(_0x1d2d1a){return _0x535c00[_0xcb30('0x1c')](_0x48752b);}return _0x535c00[_0xcb30('0x1d')](_0x48752b)[_0xcb30('0x1e')]();};}function respondWithResult(_0xeb2c7b,_0x367a4d){_0x367a4d=_0x367a4d||0xc8;return function(_0x10fa74){if(_0x10fa74){return _0xeb2c7b[_0xcb30('0x1d')](_0x367a4d)[_0xcb30('0x1f')](_0x10fa74);}};}function respondWithFilteredResult(_0x87c10b,_0x265808){return function(_0x23c116){if(_0x23c116){var _0x5146c8=_0x23c116[_0xcb30('0x20')],_0x2beda8=_0x265808[_0xcb30('0x21')],_0x19e0e4=_0x265808[_0xcb30('0x21')]+_0x265808[_0xcb30('0x22')],_0x39d840;if(_0x19e0e4>=_0x5146c8){_0x19e0e4=_0x5146c8;_0x39d840=0xc8;}else{_0x39d840=0xce;}_0x87c10b[_0xcb30('0x1d')](_0x39d840);return _0x87c10b[_0xcb30('0x23')](_0xcb30('0x24'),_0x2beda8+'-'+_0x19e0e4+'/'+_0x5146c8)[_0xcb30('0x1f')](_0x23c116);}return null;};}function patchUpdates(_0x240a92){return function(_0x5f2771){try{jsonpatch['apply'](_0x5f2771,_0x240a92,!![]);}catch(_0x1d78e2){return BPromise[_0xcb30('0x25')](_0x1d78e2);}return _0x5f2771[_0xcb30('0x26')]();};}function saveUpdates(_0x5142c7,_0x4f8bf3){return function(_0x2f21fb){if(_0x2f21fb){return _0x2f21fb['update'](_0x5142c7)[_0xcb30('0x27')](function(_0x2da5fa){return _0x2da5fa;});}return null;};}function removeEntity(_0x46fc7b,_0x1ec4cf){return function(_0x38c390){if(_0x38c390){return _0x38c390['destroy']()[_0xcb30('0x27')](function(){var _0x446ddd=_0x38c390['get']({'plain':!![]});var _0x486ccd=_0xcb30('0x28');return db[_0xcb30('0x29')][_0xcb30('0x2a')]({'where':{'type':_0x486ccd,'resourceId':_0x446ddd['id']}})[_0xcb30('0x27')](function(){return _0x38c390;});})[_0xcb30('0x27')](function(){_0x46fc7b[_0xcb30('0x1d')](0xcc)['end']();});}};}function handleEntityNotFound(_0x30704e,_0x29486c){return function(_0x4e11d3){if(!_0x4e11d3){_0x30704e[_0xcb30('0x1c')](0x194);}return _0x4e11d3;};}function handleError(_0x236eab,_0x4d7d8f){_0x4d7d8f=_0x4d7d8f||0x1f4;return function(_0x1634ab){logger['error'](_0x1634ab[_0xcb30('0x2b')]);if(_0x1634ab[_0xcb30('0x2c')]){delete _0x1634ab[_0xcb30('0x2c')];}_0x236eab[_0xcb30('0x1d')](_0x4d7d8f)[_0xcb30('0x2d')](_0x1634ab);};}exports[_0xcb30('0x2e')]=function(_0x35923d,_0x3aec7c){var _0x5550f6={},_0x5a6de6={},_0xc43fb5={'count':0x0,'rows':[]};var _0xa6bc6e=db[_0xcb30('0x2f')][_0xcb30('0x30')];_0x5a6de6[_0xcb30('0x31')]=_[_0xcb30('0x32')](_0xa6bc6e);_0x5a6de6[_0xcb30('0x33')]=_[_0xcb30('0x32')](_0x35923d[_0xcb30('0x33')]);_0x5a6de6['filters']=_['intersection'](_0x5a6de6[_0xcb30('0x31')],_0x5a6de6[_0xcb30('0x33')]);_0x5550f6[_0xcb30('0x34')]=_['intersection'](_0x5a6de6['model'],qs[_0xcb30('0x35')](_0x35923d[_0xcb30('0x33')][_0xcb30('0x35')]));_0x5550f6[_0xcb30('0x34')]=_0x5550f6['attributes']['length']?_0x5550f6[_0xcb30('0x34')]:_0x5a6de6[_0xcb30('0x31')];if(!_0x35923d[_0xcb30('0x33')]['hasOwnProperty'](_0xcb30('0x36'))){_0x5550f6[_0xcb30('0x22')]=qs['limit'](_0x35923d['query'][_0xcb30('0x22')]);_0x5550f6[_0xcb30('0x21')]=qs[_0xcb30('0x21')](_0x35923d[_0xcb30('0x33')][_0xcb30('0x21')]);}_0x5550f6[_0xcb30('0x37')]=qs['sort'](_0x35923d['query'][_0xcb30('0x38')]);_0x5550f6['where']=qs[_0xcb30('0x39')](_[_0xcb30('0x3a')](_0x35923d[_0xcb30('0x33')],_0x5a6de6[_0xcb30('0x39')]));if(_0x35923d[_0xcb30('0x33')]['filter']){_0x5550f6['where']=_[_0xcb30('0x3b')](_0x5550f6['where'],{'$or':_['map'](_0xa6bc6e,function(_0x3593a7){if(_0x3593a7[_0xcb30('0x3c')][_0xcb30('0x3d')]!==_0xcb30('0x3e')){var _0x2f18e2={};_0x2f18e2[_0x3593a7['field']]={'$like':'%'+_0x35923d['query'][_0xcb30('0x3f')]+'%'};return _0x2f18e2;}})});}_0x5550f6=_['merge']({},_0x5550f6,_0x35923d[_0xcb30('0x40')]);var _0x4efc72={'where':_0x5550f6[_0xcb30('0x41')]};return db['Dashboard'][_0xcb30('0x20')](_0x4efc72)[_0xcb30('0x27')](function(_0x5451c1){_0xc43fb5[_0xcb30('0x20')]=_0x5451c1;if(_0x35923d[_0xcb30('0x33')][_0xcb30('0x42')]){_0x5550f6[_0xcb30('0x43')]=[{'all':!![]}];}return db[_0xcb30('0x2f')][_0xcb30('0x44')](_0x5550f6);})[_0xcb30('0x27')](function(_0x16fdde){_0xc43fb5[_0xcb30('0x45')]=_0x16fdde;return _0xc43fb5;})['then'](respondWithFilteredResult(_0x3aec7c,_0x5550f6))[_0xcb30('0x46')](handleError(_0x3aec7c,null));};exports['show']=function(_0x572f45,_0x17192a){var _0x5accb0={'raw':![],'where':{'id':_0x572f45[_0xcb30('0x47')]['id']}},_0x20cd11={};_0x20cd11['model']=_['keys'](db[_0xcb30('0x2f')]['rawAttributes']);_0x20cd11[_0xcb30('0x33')]=_[_0xcb30('0x32')](_0x572f45[_0xcb30('0x33')]);_0x20cd11[_0xcb30('0x39')]=_[_0xcb30('0x48')](_0x20cd11[_0xcb30('0x31')],_0x20cd11['query']);_0x5accb0['attributes']=_[_0xcb30('0x48')](_0x20cd11[_0xcb30('0x31')],qs[_0xcb30('0x35')](_0x572f45[_0xcb30('0x33')][_0xcb30('0x35')]));_0x5accb0[_0xcb30('0x34')]=_0x5accb0[_0xcb30('0x34')][_0xcb30('0x49')]?_0x5accb0['attributes']:_0x20cd11[_0xcb30('0x31')];if(_0x572f45['query'][_0xcb30('0x42')]){_0x5accb0[_0xcb30('0x43')]=[{'all':!![]}];}_0x5accb0=_[_0xcb30('0x3b')]({},_0x5accb0,_0x572f45[_0xcb30('0x40')]);return db['Dashboard'][_0xcb30('0x4a')](_0x5accb0)['then'](handleEntityNotFound(_0x17192a,null))['then'](respondWithResult(_0x17192a,null))[_0xcb30('0x46')](handleError(_0x17192a,null));};exports[_0xcb30('0x4b')]=function(_0x524407,_0x835dfe){return db[_0xcb30('0x2f')][_0xcb30('0x4b')](_0x524407['body'],{})[_0xcb30('0x27')](function(_0x32f1db){var _0xef46ec=_0x524407['user'][_0xcb30('0x4c')]({'plain':!![]});if(!_0xef46ec)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0xef46ec[_0xcb30('0x4d')]===_0xcb30('0x4e')){var _0x5ec780=_0x32f1db[_0xcb30('0x4c')]({'plain':!![]});var _0x3c522c=_0xcb30('0x28');return db[_0xcb30('0x4f')][_0xcb30('0x4a')]({'where':{'name':_0x3c522c,'userProfileId':_0xef46ec[_0xcb30('0x50')]},'raw':!![]})[_0xcb30('0x27')](function(_0x10157e){if(_0x10157e&&_0x10157e[_0xcb30('0x51')]===0x0){return db[_0xcb30('0x29')][_0xcb30('0x4b')]({'name':_0x5ec780[_0xcb30('0x2c')],'resourceId':_0x5ec780['id'],'type':_0x10157e['name'],'sectionId':_0x10157e['id']},{})[_0xcb30('0x27')](function(){return _0x32f1db;});}else{return _0x32f1db;}})[_0xcb30('0x46')](function(_0x2d1ab3){logger[_0xcb30('0x52')](_0xcb30('0x53'),_0x2d1ab3);throw _0x2d1ab3;});}return _0x32f1db;})[_0xcb30('0x27')](respondWithResult(_0x835dfe,0xc9))['catch'](handleError(_0x835dfe,null));};exports[_0xcb30('0x54')]=function(_0x5e3968,_0x1d11fa){var _0x5cfb90={'raw':![],'where':{'id':_0x5e3968[_0xcb30('0x47')]['id']}},_0x4fc0be={};_0x4fc0be[_0xcb30('0x31')]=_[_0xcb30('0x32')](db[_0xcb30('0x2f')][_0xcb30('0x30')]);_0x5cfb90[_0xcb30('0x34')]=_[_0xcb30('0x48')](_0x4fc0be[_0xcb30('0x31')],qs[_0xcb30('0x35')](_0x5e3968[_0xcb30('0x33')][_0xcb30('0x35')]));_0x5cfb90[_0xcb30('0x34')]=_0x5cfb90[_0xcb30('0x34')][_0xcb30('0x49')]?_0x5cfb90['attributes']:_0x4fc0be[_0xcb30('0x31')];if(_0x5e3968[_0xcb30('0x33')][_0xcb30('0x42')]){_0x5cfb90[_0xcb30('0x43')]=[{'all':!![]}];}_0x5cfb90=_[_0xcb30('0x3b')]({},_0x5cfb90,_0x5e3968[_0xcb30('0x40')]);return db['Dashboard']['find'](_0x5cfb90)[_0xcb30('0x27')](handleEntityNotFound(_0x1d11fa,null))[_0xcb30('0x27')](function(_0x2c291c){if(_0x2c291c){var _0x2ca587=_0x2c291c[_0xcb30('0x4c')]({'plain':!![]});_0x2ca587=qs[_0xcb30('0x55')](_0x2ca587,['id',_0xcb30('0x56'),_0xcb30('0x57')]);_0x5e3968[_0xcb30('0x58')]=_[_0xcb30('0x55')](_0x5e3968[_0xcb30('0x58')],['id',_0xcb30('0x56'),_0xcb30('0x57')]);return db[_0xcb30('0x2f')][_0xcb30('0x4b')](_[_0xcb30('0x3b')](_0x2ca587,_0x5e3968[_0xcb30('0x58')]),{'include':_0x5e3968['query'][_0xcb30('0x42')]?[{'all':!![]}]:undefined})[_0xcb30('0x27')](function(_0x10ba35){var _0x13b051=_0x5e3968[_0xcb30('0x4e')]['get']({'plain':!![]});if(!_0x13b051)throw new Error(_0xcb30('0x59'));if(_0x13b051['role']===_0xcb30('0x4e')){var _0x3ab598=_0x10ba35[_0xcb30('0x4c')]({'plain':!![]});var _0x5670a4=_0xcb30('0x28');return db[_0xcb30('0x4f')][_0xcb30('0x4a')]({'where':{'name':_0x5670a4,'userProfileId':_0x13b051[_0xcb30('0x50')]},'raw':!![]})[_0xcb30('0x27')](function(_0x596e65){if(_0x596e65&&_0x596e65[_0xcb30('0x51')]===0x0){return db[_0xcb30('0x29')][_0xcb30('0x4b')]({'name':_0x3ab598[_0xcb30('0x2c')],'resourceId':_0x3ab598['id'],'type':_0x596e65['name'],'sectionId':_0x596e65['id']},{})['then'](function(){return _0x10ba35;});}else{return _0x10ba35;}})[_0xcb30('0x46')](function(_0x186cdc){logger['error'](_0xcb30('0x53'),_0x186cdc);throw _0x186cdc;});}return _0x10ba35;});}})[_0xcb30('0x27')](respondWithResult(_0x1d11fa,0xc9))[_0xcb30('0x46')](handleError(_0x1d11fa,null));};exports[_0xcb30('0x5a')]=function(_0x396ebc,_0x381695){if(_0x396ebc[_0xcb30('0x58')]['id']){delete _0x396ebc[_0xcb30('0x58')]['id'];}return db[_0xcb30('0x2f')][_0xcb30('0x4a')]({'where':{'id':_0x396ebc[_0xcb30('0x47')]['id']}})['then'](handleEntityNotFound(_0x381695,null))[_0xcb30('0x27')](saveUpdates(_0x396ebc[_0xcb30('0x58')],null))[_0xcb30('0x27')](respondWithResult(_0x381695,null))[_0xcb30('0x46')](handleError(_0x381695,null));};exports[_0xcb30('0x2a')]=function(_0x31554f,_0x5b2fe1){return db['Dashboard'][_0xcb30('0x4a')]({'where':{'id':_0x31554f[_0xcb30('0x47')]['id']}})['then'](handleEntityNotFound(_0x5b2fe1,null))[_0xcb30('0x27')](removeEntity(_0x5b2fe1,null))[_0xcb30('0x46')](handleError(_0x5b2fe1,null));};function widgetAttributes(_0x21aa74){try{switch(_0x21aa74[_0xcb30('0x3c')]){case _0xcb30('0x5b'):return[{'name':'attrUrl','value':_0x21aa74[_0xcb30('0x5c')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74[_0xcb30('0x5d')][0x0]?_0x21aa74[_0xcb30('0x5d')][0x0]['value']:undefined)||'https://'}];case'custom':return[{'name':_0xcb30('0x5e'),'value':_0x21aa74[_0xcb30('0x5e')]||(_0x21aa74['attrs']&&_0x21aa74['attrs'][0x0]?_0x21aa74[_0xcb30('0x5d')][0x0][_0xcb30('0x5f')]:undefined)||''}];case'clock':return[{'name':_0xcb30('0x60'),'value':_0x21aa74[_0xcb30('0x60')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74[_0xcb30('0x5d')][0x0]?_0x21aa74[_0xcb30('0x5d')][0x0][_0xcb30('0x5f')]:undefined)||'HH:mm:ss'},{'name':_0xcb30('0x61'),'value':_0x21aa74[_0xcb30('0x61')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74['attrs'][0x1]?_0x21aa74[_0xcb30('0x5d')][0x1][_0xcb30('0x5f')]:undefined)||_0xcb30('0x62')},{'name':_0xcb30('0x63'),'value':_0x21aa74['attrFontSize']||(_0x21aa74['attrs']&&_0x21aa74[_0xcb30('0x5d')][0x2]?_0x21aa74[_0xcb30('0x5d')][0x2]['value']:undefined)||0xc}];case'counter':return[{'name':_0xcb30('0x64'),'value':_0x21aa74[_0xcb30('0x64')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74[_0xcb30('0x5d')][0x0]?_0x21aa74[_0xcb30('0x5d')][0x0][_0xcb30('0x5f')]:undefined)||'total'},{'name':_0xcb30('0x65'),'value':_0x21aa74[_0xcb30('0x65')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74[_0xcb30('0x5d')][0x1]?_0x21aa74[_0xcb30('0x5d')][0x1][_0xcb30('0x5f')]:undefined)||[]},{'name':'attrFontSize','value':_0x21aa74['attrFontSize']||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74['attrs'][0x2]?_0x21aa74[_0xcb30('0x5d')][0x2][_0xcb30('0x5f')]:undefined)||0x14}];case _0xcb30('0x66'):case _0xcb30('0x67'):return[{'name':'attrSerie1','value':_0x21aa74[_0xcb30('0x68')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74[_0xcb30('0x5d')][0x0]?_0x21aa74[_0xcb30('0x5d')][0x0][_0xcb30('0x5f')]:undefined)||_0xcb30('0x69')},{'name':_0xcb30('0x6a'),'value':_0x21aa74[_0xcb30('0x6a')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74[_0xcb30('0x5d')][0x1]?_0x21aa74[_0xcb30('0x5d')][0x1][_0xcb30('0x5f')]:undefined)||null},{'name':_0xcb30('0x6b'),'value':_0x21aa74[_0xcb30('0x6b')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74[_0xcb30('0x5d')][0x2]?_0x21aa74['attrs'][0x2][_0xcb30('0x5f')]:undefined)||null},{'name':_0xcb30('0x65'),'value':_0x21aa74[_0xcb30('0x65')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74[_0xcb30('0x5d')][0x3]?_0x21aa74['attrs'][0x3][_0xcb30('0x5f')]:undefined)||[]}];case'web-report':return[{'name':'attrReport','type':_0x21aa74[_0xcb30('0x6c')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74[_0xcb30('0x5d')][0x0]?_0x21aa74[_0xcb30('0x5d')][0x0][_0xcb30('0x3c')]:undefined)||null,'value':_0x21aa74[_0xcb30('0x6d')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74[_0xcb30('0x5d')][0x0]?_0x21aa74[_0xcb30('0x5d')][0x0][_0xcb30('0x5f')]:undefined)||null},{'name':_0xcb30('0x6e'),'value':_0x21aa74[_0xcb30('0x6e')]||(_0x21aa74[_0xcb30('0x5d')]&&_0x21aa74['attrs'][0x1]?_0x21aa74[_0xcb30('0x5d')][0x1][_0xcb30('0x5f')]:undefined)||0x0}];default:return[];}}catch(_0xa69550){logger[_0xcb30('0x52')](_0xcb30('0x6f'),JSON[_0xcb30('0x70')](_0xa69550));return[];}}exports[_0xcb30('0x71')]=function(_0x534339,_0x1b8aa5,_0x295884){if(_0x534339[_0xcb30('0x58')]['id']){delete _0x534339[_0xcb30('0x58')]['id'];}return db['Dashboard'][_0xcb30('0x4a')]({'where':{'id':_0x534339[_0xcb30('0x47')]['id']}})['then'](handleEntityNotFound(_0x1b8aa5,null))[_0xcb30('0x27')](function(_0x213f5c){if(_0x213f5c){_0x534339[_0xcb30('0x58')][_0xcb30('0x72')]=_0x213f5c['id'];_0x534339[_0xcb30('0x58')][_0xcb30('0x5d')]=widgetAttributes(_0x534339['body']);return db['DashboardItem'][_0xcb30('0x4b')](_0x534339[_0xcb30('0x58')]);}})[_0xcb30('0x27')](respondWithResult(_0x1b8aa5,null))[_0xcb30('0x46')](handleError(_0x1b8aa5,null));};exports[_0xcb30('0x73')]=function(_0x28302b,_0x231a73,_0x26e663){var _0x26b3b0={};var _0x589810={};var _0x3f57b0;var _0x265a2c;return db[_0xcb30('0x2f')]['findOne']({'where':{'id':_0x28302b[_0xcb30('0x47')]['id']}})[_0xcb30('0x27')](handleEntityNotFound(_0x231a73,null))[_0xcb30('0x27')](function(_0x247f2f){if(_0x247f2f){_0x3f57b0=_0x247f2f;_0x589810[_0xcb30('0x31')]=_[_0xcb30('0x32')](db[_0xcb30('0x74')][_0xcb30('0x30')]);_0x589810[_0xcb30('0x33')]=_[_0xcb30('0x32')](_0x28302b[_0xcb30('0x33')]);_0x589810[_0xcb30('0x39')]=_['intersection'](_0x589810[_0xcb30('0x31')],_0x589810['query']);_0x26b3b0[_0xcb30('0x34')]=_[_0xcb30('0x48')](_0x589810['model'],qs[_0xcb30('0x35')](_0x28302b[_0xcb30('0x33')][_0xcb30('0x35')]));_0x26b3b0[_0xcb30('0x34')]=_0x26b3b0['attributes'][_0xcb30('0x49')]?_0x26b3b0['attributes']:_0x589810[_0xcb30('0x31')];_0x26b3b0[_0xcb30('0x37')]=qs['sort'](_0x28302b[_0xcb30('0x33')][_0xcb30('0x38')]);_0x26b3b0[_0xcb30('0x41')]=qs[_0xcb30('0x39')](_[_0xcb30('0x3a')](_0x28302b[_0xcb30('0x33')],_0x589810[_0xcb30('0x39')]));if(_0x28302b['query']['filter']){_0x26b3b0[_0xcb30('0x41')]=_['merge'](_0x26b3b0['where'],{'$or':_['map'](_0x26b3b0[_0xcb30('0x34')],function(_0x2ff3f5){var _0x3d6e4d={};_0x3d6e4d[_0x2ff3f5]={'$like':'%'+_0x28302b[_0xcb30('0x33')][_0xcb30('0x3f')]+'%'};return _0x3d6e4d;})});}_0x26b3b0=_[_0xcb30('0x3b')]({},_0x26b3b0,_0x28302b[_0xcb30('0x40')]);return _0x3f57b0['getItems'](_0x26b3b0);}})[_0xcb30('0x27')](function(_0x883370){if(_0x883370){_0x265a2c=_0x883370[_0xcb30('0x49')];if(!_0x28302b[_0xcb30('0x33')][_0xcb30('0x75')](_0xcb30('0x36'))){_0x26b3b0[_0xcb30('0x22')]=qs[_0xcb30('0x22')](_0x28302b['query'][_0xcb30('0x22')]);_0x26b3b0[_0xcb30('0x21')]=qs['offset'](_0x28302b['query']['offset']);}return _0x3f57b0[_0xcb30('0x73')](_0x26b3b0);}})[_0xcb30('0x27')](function(_0x37fb8f){if(_0x37fb8f){return _0x37fb8f?{'count':_0x265a2c,'rows':_0x37fb8f}:null;}})[_0xcb30('0x27')](respondWithResult(_0x231a73,null))[_0xcb30('0x46')](handleError(_0x231a73,null));};
\ No newline at end of file
index b406b8d..afe6df1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3cd2=['remove','emit','hook','exports','events','save','update'];(function(_0x2ace72,_0x814809){var _0x33d102=function(_0x505fd1){while(--_0x505fd1){_0x2ace72['push'](_0x2ace72['shift']());}};_0x33d102(++_0x814809);}(_0x3cd2,0x115));var _0x23cd=function(_0x28f69d,_0x28cfcc){_0x28f69d=_0x28f69d-0x0;var _0x591be0=_0x3cd2[_0x28f69d];return _0x591be0;};'use strict';var EventEmitter=require(_0x23cd('0x0'));var Dashboard=require('../../mysqldb')['db']['Dashboard'];var DashboardEvents=new EventEmitter();DashboardEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x23cd('0x1'),'afterUpdate':_0x23cd('0x2'),'afterDestroy':_0x23cd('0x3')};function emitEvent(_0x37915c){return function(_0x5aa219,_0x5fc575,_0xce2fd1){DashboardEvents['emit'](_0x37915c+':'+_0x5aa219['id'],_0x5aa219);DashboardEvents[_0x23cd('0x4')](_0x37915c,_0x5aa219);_0xce2fd1(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];Dashboard[_0x23cd('0x5')](e,emitEvent(event));}}module[_0x23cd('0x6')]=DashboardEvents;
\ No newline at end of file
+var _0xb6c9=['emit','hasOwnProperty','events','setMaxListeners','update','remove'];(function(_0x3712e2,_0x32d752){var _0x1faff4=function(_0x550dc0){while(--_0x550dc0){_0x3712e2['push'](_0x3712e2['shift']());}};_0x1faff4(++_0x32d752);}(_0xb6c9,0x152));var _0x9b6c=function(_0x1fc772,_0x376734){_0x1fc772=_0x1fc772-0x0;var _0x725ba3=_0xb6c9[_0x1fc772];return _0x725ba3;};'use strict';var EventEmitter=require(_0x9b6c('0x0'));var Dashboard=require('../../mysqldb')['db']['Dashboard'];var DashboardEvents=new EventEmitter();DashboardEvents[_0x9b6c('0x1')](0x0);var events={'afterCreate':'save','afterUpdate':_0x9b6c('0x2'),'afterDestroy':_0x9b6c('0x3')};function emitEvent(_0x15cb82){return function(_0x510296,_0x5dc26d,_0x1e98d7){DashboardEvents[_0x9b6c('0x4')](_0x15cb82+':'+_0x510296['id'],_0x510296);DashboardEvents[_0x9b6c('0x4')](_0x15cb82,_0x510296);_0x1e98d7(null);};}for(var e in events){if(events[_0x9b6c('0x5')](e)){var event=events[e];Dashboard['hook'](e,emitEvent(event));}}module['exports']=DashboardEvents;
\ No newline at end of file
index 9fe218c..dbdf46c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8bf5=['api','bluebird','request-promise','path','rimraf','../../config/environment','./dashboard.attributes','exports','define','Dashboard','util','../../config/logger'];(function(_0x2fc308,_0x1b5444){var _0x72b2e5=function(_0x5b57b8){while(--_0x5b57b8){_0x2fc308['push'](_0x2fc308['shift']());}};_0x72b2e5(++_0x1b5444);}(_0x8bf5,0x172));var _0x58bf=function(_0x26dcf6,_0xeb575c){_0x26dcf6=_0x26dcf6-0x0;var _0x83fa09=_0x8bf5[_0x26dcf6];return _0x83fa09;};'use strict';var _=require('lodash');var util=require(_0x58bf('0x0'));var logger=require(_0x58bf('0x1'))(_0x58bf('0x2'));var moment=require('moment');var BPromise=require(_0x58bf('0x3'));var rp=require(_0x58bf('0x4'));var fs=require('fs');var path=require(_0x58bf('0x5'));var rimraf=require(_0x58bf('0x6'));var config=require(_0x58bf('0x7'));var attributes=require(_0x58bf('0x8'));module[_0x58bf('0x9')]=function(_0x1f4925,_0x488b45){return _0x1f4925[_0x58bf('0xa')](_0x58bf('0xb'),attributes,{'tableName':'dashboards','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xcb3c=['lodash','util','../../config/logger','api','bluebird','path','../../config/environment','./dashboard.attributes','exports','define','Dashboard','dashboards'];(function(_0x48c2ae,_0x4cea90){var _0x8f7531=function(_0x126458){while(--_0x126458){_0x48c2ae['push'](_0x48c2ae['shift']());}};_0x8f7531(++_0x4cea90);}(_0xcb3c,0x150));var _0xccb3=function(_0x4853fc,_0x52cd55){_0x4853fc=_0x4853fc-0x0;var _0x23be73=_0xcb3c[_0x4853fc];return _0x23be73;};'use strict';var _=require(_0xccb3('0x0'));var util=require(_0xccb3('0x1'));var logger=require(_0xccb3('0x2'))(_0xccb3('0x3'));var moment=require('moment');var BPromise=require(_0xccb3('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xccb3('0x5'));var rimraf=require('rimraf');var config=require(_0xccb3('0x6'));var attributes=require(_0xccb3('0x7'));module[_0xccb3('0x8')]=function(_0x3c02f3,_0x56eec1){return _0x3c02f3[_0xccb3('0x9')](_0xccb3('0xa'),attributes,{'tableName':_0xccb3('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4e87cae..c5885ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x32d1=['message','Dashboard,\x20%s,\x20%s','catch','util','moment','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','defaults','socket.io-emitter','./dashboard.socket','register','request','then','info','request\x20sent','Dashboard,\x20%s,\x20%s,\x20%s','error','code'];(function(_0x20b0fd,_0x342213){var _0x4c0b52=function(_0x2ffafe){while(--_0x2ffafe){_0x20b0fd['push'](_0x20b0fd['shift']());}};_0x4c0b52(++_0x342213);}(_0x32d1,0xcb));var _0x132d=function(_0x3cb033,_0xea70f2){_0x3cb033=_0x3cb033-0x0;var _0x21381e=_0x32d1[_0x3cb033];return _0x21381e;};'use strict';var _=require('lodash');var util=require(_0x132d('0x0'));var moment=require(_0x132d('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x132d('0x2'));var db=require(_0x132d('0x3'))['db'];var utils=require(_0x132d('0x4'));var logger=require(_0x132d('0x5'))(_0x132d('0x6'));var config=require(_0x132d('0x7'));var jayson=require(_0x132d('0x8'));var client=jayson['client'][_0x132d('0x9')]({'port':0x232a});config[_0x132d('0xa')]=_[_0x132d('0xb')](config[_0x132d('0xa')],{'host':'localhost','port':0x18eb});var socket=require(_0x132d('0xc'))(new Redis(config['redis']));require(_0x132d('0xd'))[_0x132d('0xe')](socket);function respondWithRpcPromise(_0x314066,_0x5f446c,_0x23ff77){return new BPromise(function(_0x300498,_0x5cbda3){return client[_0x132d('0xf')](_0x314066,_0x23ff77)[_0x132d('0x10')](function(_0x1c297f){logger[_0x132d('0x11')]('Dashboard,\x20%s,\x20%s',_0x5f446c,_0x132d('0x12'));logger['debug'](_0x132d('0x13'),_0x5f446c,_0x132d('0x12'),JSON['stringify'](_0x1c297f));if(_0x1c297f[_0x132d('0x14')]){if(_0x1c297f[_0x132d('0x14')][_0x132d('0x15')]===0x1f4){logger[_0x132d('0x14')]('Dashboard,\x20%s,\x20%s',_0x5f446c,_0x1c297f['error'][_0x132d('0x16')]);return _0x5cbda3(_0x1c297f[_0x132d('0x14')][_0x132d('0x16')]);}logger[_0x132d('0x14')](_0x132d('0x17'),_0x5f446c,_0x1c297f[_0x132d('0x14')][_0x132d('0x16')]);return _0x300498(_0x1c297f[_0x132d('0x14')][_0x132d('0x16')]);}else{logger[_0x132d('0x11')](_0x132d('0x17'),_0x5f446c,_0x132d('0x12'));_0x300498(_0x1c297f['result'][_0x132d('0x16')]);}})[_0x132d('0x18')](function(_0x4ab50c){logger[_0x132d('0x14')](_0x132d('0x17'),_0x5f446c,_0x4ab50c);_0x5cbda3(_0x4ab50c);});});}
\ No newline at end of file
+var _0x2538=['stringify','error','message','result','catch','lodash','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','redis','localhost','socket.io-emitter','./dashboard.socket','register','request','then','info','Dashboard,\x20%s,\x20%s','debug','Dashboard,\x20%s,\x20%s,\x20%s','request\x20sent'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x2538,0xad));var _0x8253=function(_0x445ff7,_0x2f90be){_0x445ff7=_0x445ff7-0x0;var _0x4f38fe=_0x2538[_0x445ff7];return _0x4f38fe;};'use strict';var _=require(_0x8253('0x0'));var util=require(_0x8253('0x1'));var moment=require('moment');var BPromise=require(_0x8253('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x8253('0x3'));var db=require(_0x8253('0x4'))['db'];var utils=require(_0x8253('0x5'));var logger=require(_0x8253('0x6'))('rpc');var config=require(_0x8253('0x7'));var jayson=require(_0x8253('0x8'));var client=jayson[_0x8253('0x9')][_0x8253('0xa')]({'port':0x232a});config[_0x8253('0xb')]=_['defaults'](config[_0x8253('0xb')],{'host':_0x8253('0xc'),'port':0x18eb});var socket=require(_0x8253('0xd'))(new Redis(config[_0x8253('0xb')]));require(_0x8253('0xe'))[_0x8253('0xf')](socket);function respondWithRpcPromise(_0xdca23a,_0x1a0b2b,_0x2db58e){return new BPromise(function(_0x5ca995,_0x22ea29){return client[_0x8253('0x10')](_0xdca23a,_0x2db58e)[_0x8253('0x11')](function(_0x109fc7){logger[_0x8253('0x12')](_0x8253('0x13'),_0x1a0b2b,'request\x20sent');logger[_0x8253('0x14')](_0x8253('0x15'),_0x1a0b2b,_0x8253('0x16'),JSON[_0x8253('0x17')](_0x109fc7));if(_0x109fc7[_0x8253('0x18')]){if(_0x109fc7[_0x8253('0x18')]['code']===0x1f4){logger[_0x8253('0x18')]('Dashboard,\x20%s,\x20%s',_0x1a0b2b,_0x109fc7[_0x8253('0x18')][_0x8253('0x19')]);return _0x22ea29(_0x109fc7[_0x8253('0x18')][_0x8253('0x19')]);}logger['error'](_0x8253('0x13'),_0x1a0b2b,_0x109fc7[_0x8253('0x18')][_0x8253('0x19')]);return _0x5ca995(_0x109fc7[_0x8253('0x18')][_0x8253('0x19')]);}else{logger[_0x8253('0x12')]('Dashboard,\x20%s,\x20%s',_0x1a0b2b,_0x8253('0x16'));_0x5ca995(_0x109fc7[_0x8253('0x1a')][_0x8253('0x19')]);}})[_0x8253('0x1b')](function(_0x4f3445){logger['error'](_0x8253('0x13'),_0x1a0b2b,_0x4f3445);_0x22ea29(_0x4f3445);});});}
\ No newline at end of file
index 648dc4c..b2e3af5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb806=['emit','removeListener','./dashboard.events','save','remove'];(function(_0x2e22ce,_0x6eacac){var _0x339e78=function(_0x48656f){while(--_0x48656f){_0x2e22ce['push'](_0x2e22ce['shift']());}};_0x339e78(++_0x6eacac);}(_0xb806,0xe8));var _0x6b80=function(_0x5d6456,_0x58ecc7){_0x5d6456=_0x5d6456-0x0;var _0x4d66c1=_0xb806[_0x5d6456];return _0x4d66c1;};'use strict';var DashboardEvents=require(_0x6b80('0x0'));var events=[_0x6b80('0x1'),_0x6b80('0x2'),'update'];function createListener(_0x402cd1,_0x662060){return function(_0x10fea4){_0x662060[_0x6b80('0x3')](_0x402cd1,_0x10fea4);};}function removeListener(_0x4897f7,_0xb2a16a){return function(){DashboardEvents[_0x6b80('0x4')](_0x4897f7,_0xb2a16a);};}exports['register']=function(_0x463c67){for(var _0x24ca82=0x0,_0xe7079e=events['length'];_0x24ca82<_0xe7079e;_0x24ca82++){var _0xb14b9b=events[_0x24ca82];var _0x198283=createListener('dashboard:'+_0xb14b9b,_0x463c67);DashboardEvents['on'](_0xb14b9b,_0x198283);}};
\ No newline at end of file
+var _0xfd61=['./dashboard.events','save','remove','update','emit','removeListener','register','length','dashboard:'];(function(_0x59f1e6,_0xda13c5){var _0x2aada5=function(_0x5bf12c){while(--_0x5bf12c){_0x59f1e6['push'](_0x59f1e6['shift']());}};_0x2aada5(++_0xda13c5);}(_0xfd61,0xcf));var _0x1fd6=function(_0x4cc492,_0x162c85){_0x4cc492=_0x4cc492-0x0;var _0x1f36b9=_0xfd61[_0x4cc492];return _0x1f36b9;};'use strict';var DashboardEvents=require(_0x1fd6('0x0'));var events=[_0x1fd6('0x1'),_0x1fd6('0x2'),_0x1fd6('0x3')];function createListener(_0x32bd3f,_0x91b516){return function(_0x29d0b5){_0x91b516[_0x1fd6('0x4')](_0x32bd3f,_0x29d0b5);};}function removeListener(_0x141b44,_0x29d885){return function(){DashboardEvents[_0x1fd6('0x5')](_0x141b44,_0x29d885);};}exports[_0x1fd6('0x6')]=function(_0x10e0ea){for(var _0x51f773=0x0,_0x24a2b1=events[_0x1fd6('0x7')];_0x51f773<_0x24a2b1;_0x51f773++){var _0x3b8245=events[_0x51f773];var _0x15c6a4=createListener(_0x1fd6('0x8')+_0x3b8245,_0x10e0ea);DashboardEvents['on'](_0x3b8245,_0x15c6a4);}};
\ No newline at end of file
index 444d2a1..85ebeaf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x688e=['delete','destroy','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./dashboard.controller','get','isAuthenticated','index','/:id','show','/:id/items','getItems','create','post','addItem','update'];(function(_0x4bf658,_0x4f9c09){var _0x3852ab=function(_0x121787){while(--_0x121787){_0x4bf658['push'](_0x4bf658['shift']());}};_0x3852ab(++_0x4f9c09);}(_0x688e,0x80));var _0xe688=function(_0x3ece81,_0x121982){_0x3ece81=_0x3ece81-0x0;var _0x390a43=_0x688e[_0x3ece81];return _0x390a43;};'use strict';var multer=require('multer');var util=require(_0xe688('0x0'));var path=require(_0xe688('0x1'));var timeout=require(_0xe688('0x2'));var express=require(_0xe688('0x3'));var router=express['Router']();var auth=require(_0xe688('0x4'));var interaction=require(_0xe688('0x5'));var config=require(_0xe688('0x6'));var controller=require(_0xe688('0x7'));router[_0xe688('0x8')]('/',auth[_0xe688('0x9')](),controller[_0xe688('0xa')]);router[_0xe688('0x8')](_0xe688('0xb'),auth['isAuthenticated'](),controller[_0xe688('0xc')]);router['get'](_0xe688('0xd'),auth[_0xe688('0x9')](),controller[_0xe688('0xe')]);router['post']('/',auth[_0xe688('0x9')](),controller[_0xe688('0xf')]);router['post']('/:id/clone',auth[_0xe688('0x9')](),controller['clone']);router[_0xe688('0x10')]('/:id/items',auth['isAuthenticated'](),controller[_0xe688('0x11')]);router['put']('/:id',auth[_0xe688('0x9')](),controller[_0xe688('0x12')]);router[_0xe688('0x13')](_0xe688('0xb'),auth[_0xe688('0x9')](),controller[_0xe688('0x14')]);module['exports']=router;
\ No newline at end of file
+var _0x7512=['/:id','show','get','getItems','post','clone','/:id/items','update','delete','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','./dashboard.controller','isAuthenticated','index'];(function(_0x15b9f1,_0x357021){var _0x1fa691=function(_0x43da97){while(--_0x43da97){_0x15b9f1['push'](_0x15b9f1['shift']());}};_0x1fa691(++_0x357021);}(_0x7512,0x68));var _0x2751=function(_0x5442d1,_0x193d0e){_0x5442d1=_0x5442d1-0x0;var _0x2f0eaf=_0x7512[_0x5442d1];return _0x2f0eaf;};'use strict';var multer=require(_0x2751('0x0'));var util=require(_0x2751('0x1'));var path=require(_0x2751('0x2'));var timeout=require('connect-timeout');var express=require(_0x2751('0x3'));var router=express[_0x2751('0x4')]();var auth=require(_0x2751('0x5'));var interaction=require(_0x2751('0x6'));var config=require('../../config/environment');var controller=require(_0x2751('0x7'));router['get']('/',auth[_0x2751('0x8')](),controller[_0x2751('0x9')]);router['get'](_0x2751('0xa'),auth[_0x2751('0x8')](),controller[_0x2751('0xb')]);router[_0x2751('0xc')]('/:id/items',auth[_0x2751('0x8')](),controller[_0x2751('0xd')]);router[_0x2751('0xe')]('/',auth[_0x2751('0x8')](),controller['create']);router[_0x2751('0xe')]('/:id/clone',auth[_0x2751('0x8')](),controller[_0x2751('0xf')]);router['post'](_0x2751('0x10'),auth[_0x2751('0x8')](),controller['addItem']);router['put'](_0x2751('0xa'),auth[_0x2751('0x8')](),controller[_0x2751('0x11')]);router[_0x2751('0x12')](_0x2751('0xa'),auth[_0x2751('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index a8965c1..15d728b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x80d2=['#2196f3','sequelize','lodash','exports','STRING','TEXT','long','parse','attrs','setDataValue','stringify','INTEGER','#ffffff'];(function(_0x17d9e3,_0x1f969c){var _0x14192d=function(_0x159745){while(--_0x159745){_0x17d9e3['push'](_0x17d9e3['shift']());}};_0x14192d(++_0x1f969c);}(_0x80d2,0x194));var _0x280d=function(_0x417dfb,_0x294d8f){_0x417dfb=_0x417dfb-0x0;var _0x485e00=_0x80d2[_0x417dfb];return _0x485e00;};'use strict';var Sequelize=require(_0x280d('0x0'));var squel=require('squel');var _=require(_0x280d('0x1'));module[_0x280d('0x2')]={'title':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize[_0x280d('0x3')](0x14),'allowNull':![],'validate':{'len':[0x1,0x14]}},'attrs':{'type':Sequelize[_0x280d('0x4')](_0x280d('0x5')),'get':function(){try{return JSON[_0x280d('0x6')](this['getDataValue'](_0x280d('0x7')));}catch(_0x302c4b){return[];}},'set':function(_0x3d8c65){try{this[_0x280d('0x8')](_0x280d('0x7'),JSON[_0x280d('0x9')](_0x3d8c65));}catch(_0x29993f){this[_0x280d('0x8')](_0x280d('0x7'),JSON[_0x280d('0x9')]([]));}}},'sizeX':{'type':Sequelize[_0x280d('0xa')],'allowNull':![],'defaultValue':0x1},'sizeY':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1},'row':{'type':Sequelize[_0x280d('0xa')]},'col':{'type':Sequelize['INTEGER']},'background':{'type':Sequelize[_0x280d('0x3')],'allowNull':![],'defaultValue':_0x280d('0xb'),'validate':{'notEmpty':!![]}},'foreground':{'type':Sequelize[_0x280d('0x3')],'allowNull':![],'defaultValue':_0x280d('0xc'),'validate':{'notEmpty':!![]}},'link':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x3bf5=['exports','STRING','long','attrs','setDataValue','stringify','INTEGER','#ffffff','#2196f3','sequelize','lodash'];(function(_0x31cb5f,_0x2df766){var _0x586042=function(_0x53c807){while(--_0x53c807){_0x31cb5f['push'](_0x31cb5f['shift']());}};_0x586042(++_0x2df766);}(_0x3bf5,0x8d));var _0x53bf=function(_0x246148,_0x1358ee){_0x246148=_0x246148-0x0;var _0x453d94=_0x3bf5[_0x246148];return _0x453d94;};'use strict';var Sequelize=require(_0x53bf('0x0'));var squel=require('squel');var _=require(_0x53bf('0x1'));module[_0x53bf('0x2')]={'title':{'type':Sequelize[_0x53bf('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x53bf('0x3')](0x14),'allowNull':![],'validate':{'len':[0x1,0x14]}},'attrs':{'type':Sequelize['TEXT'](_0x53bf('0x4')),'get':function(){try{return JSON['parse'](this['getDataValue'](_0x53bf('0x5')));}catch(_0x5e5107){return[];}},'set':function(_0x2e5076){try{this[_0x53bf('0x6')](_0x53bf('0x5'),JSON[_0x53bf('0x7')](_0x2e5076));}catch(_0xcc8970){this['setDataValue'](_0x53bf('0x5'),JSON['stringify']([]));}}},'sizeX':{'type':Sequelize[_0x53bf('0x8')],'allowNull':![],'defaultValue':0x1},'sizeY':{'type':Sequelize[_0x53bf('0x8')],'allowNull':![],'defaultValue':0x1},'row':{'type':Sequelize['INTEGER']},'col':{'type':Sequelize[_0x53bf('0x8')]},'background':{'type':Sequelize[_0x53bf('0x3')],'allowNull':![],'defaultValue':_0x53bf('0x9'),'validate':{'notEmpty':!![]}},'foreground':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x53bf('0xa'),'validate':{'notEmpty':!![]}},'link':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 7f69dee..82adb76 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4639=['../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/environment','redis','defaults','localhost','./dashboardItem.socket','register','sendStatus','end','status','json','count','offset','set','Content-Range','apply','reject','save','update','then','stack','name','show','model','keys','DashboardItem','rawAttributes','query','intersection','attributes','fields','length','includeAll','include','merge','options','find','destroy','params','catch','type','iframe','attrUrl','attrs','value','https://','custom','attrPath','clock','attrHourFormat','HH:mm:ss','attrTimezone','0.00','attrFontSize','counter','attrMetric','attrVoiceQueues','pie-chart','total','attrSerie2','attrSerie3','web-report','attrReport','attrRefresh','error','widgetAttributes:\x20%s','stringify','create','body','html-pdf','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','path','to-csv','lodash','squel','crypto','jsforce','desk.js','papaparse'];(function(_0x2cc0b3,_0x120bf1){var _0x1667ef=function(_0x3abcb4){while(--_0x3abcb4){_0x2cc0b3['push'](_0x2cc0b3['shift']());}};_0x1667ef(++_0x120bf1);}(_0x4639,0xf6));var _0x9463=function(_0x459423,_0x3416a8){_0x459423=_0x459423-0x0;var _0x42ed14=_0x4639[_0x459423];return _0x42ed14;};'use strict';var pdf=require(_0x9463('0x0'));var emlformat=require(_0x9463('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x9463('0x2'));var jsonpatch=require(_0x9463('0x3'));var rp=require('request-promise');var moment=require(_0x9463('0x4'));var BPromise=require(_0x9463('0x5'));var Mustache=require(_0x9463('0x6'));var util=require('util');var path=require(_0x9463('0x7'));var sox=require('sox');var csv=require(_0x9463('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x9463('0x9'));var squel=require(_0x9463('0xa'));var crypto=require(_0x9463('0xb'));var jsforce=require(_0x9463('0xc'));var deskjs=require(_0x9463('0xd'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x9463('0xe'));var Redis=require('ioredis');var authService=require(_0x9463('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x9463('0x10'));var logger=require(_0x9463('0x11'))(_0x9463('0x12'));var utils=require('../../config/utils');var config=require(_0x9463('0x13'));var db=require('../../mysqldb')['db'];config[_0x9463('0x14')]=_[_0x9463('0x15')](config['redis'],{'host':_0x9463('0x16'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x9463('0x14')]));require(_0x9463('0x17'))[_0x9463('0x18')](socket);function respondWithStatusCode(_0x39b50b,_0x93ce81){_0x93ce81=_0x93ce81||0xcc;return function(_0x2bbf1e){if(_0x2bbf1e){return _0x39b50b[_0x9463('0x19')](_0x93ce81);}return _0x39b50b['status'](_0x93ce81)[_0x9463('0x1a')]();};}function respondWithResult(_0x126e29,_0xd2b2a){_0xd2b2a=_0xd2b2a||0xc8;return function(_0x320d4d){if(_0x320d4d){return _0x126e29[_0x9463('0x1b')](_0xd2b2a)[_0x9463('0x1c')](_0x320d4d);}};}function respondWithFilteredResult(_0xe26396,_0x443cdb){return function(_0xe7e766){if(_0xe7e766){var _0x20b22e=_0xe7e766[_0x9463('0x1d')],_0xb46ca6=_0x443cdb[_0x9463('0x1e')],_0x5a138d=_0x443cdb['offset']+_0x443cdb['limit'],_0x9def5f;if(_0x5a138d>=_0x20b22e){_0x5a138d=_0x20b22e;_0x9def5f=0xc8;}else{_0x9def5f=0xce;}_0xe26396[_0x9463('0x1b')](_0x9def5f);return _0xe26396[_0x9463('0x1f')](_0x9463('0x20'),_0xb46ca6+'-'+_0x5a138d+'/'+_0x20b22e)[_0x9463('0x1c')](_0xe7e766);}return null;};}function patchUpdates(_0x5f5d02){return function(_0x2fd7a6){try{jsonpatch[_0x9463('0x21')](_0x2fd7a6,_0x5f5d02,!![]);}catch(_0xa3fd5){return BPromise[_0x9463('0x22')](_0xa3fd5);}return _0x2fd7a6[_0x9463('0x23')]();};}function saveUpdates(_0x526a42,_0xf0e4ca){return function(_0x3e4842){if(_0x3e4842){return _0x3e4842[_0x9463('0x24')](_0x526a42)[_0x9463('0x25')](function(_0x5e9524){return _0x5e9524;});}return null;};}function removeEntity(_0x11e176,_0x21794d){return function(_0x4566cf){if(_0x4566cf){return _0x4566cf['destroy']()[_0x9463('0x25')](function(){_0x11e176['status'](0xcc)[_0x9463('0x1a')]();});}};}function handleEntityNotFound(_0x4698ef,_0x575cab){return function(_0xcdf7){if(!_0xcdf7){_0x4698ef[_0x9463('0x19')](0x194);}return _0xcdf7;};}function handleError(_0x4061ed,_0xd15f69){_0xd15f69=_0xd15f69||0x1f4;return function(_0x5d3b11){logger['error'](_0x5d3b11[_0x9463('0x26')]);if(_0x5d3b11[_0x9463('0x27')]){delete _0x5d3b11[_0x9463('0x27')];}_0x4061ed[_0x9463('0x1b')](_0xd15f69)['send'](_0x5d3b11);};}exports[_0x9463('0x28')]=function(_0x3791d0,_0x332cac){var _0x5e2191={'raw':![],'where':{'id':_0x3791d0['params']['id']}},_0x514321={};_0x514321[_0x9463('0x29')]=_[_0x9463('0x2a')](db[_0x9463('0x2b')][_0x9463('0x2c')]);_0x514321[_0x9463('0x2d')]=_[_0x9463('0x2a')](_0x3791d0[_0x9463('0x2d')]);_0x514321['filters']=_[_0x9463('0x2e')](_0x514321[_0x9463('0x29')],_0x514321[_0x9463('0x2d')]);_0x5e2191[_0x9463('0x2f')]=_[_0x9463('0x2e')](_0x514321[_0x9463('0x29')],qs[_0x9463('0x30')](_0x3791d0[_0x9463('0x2d')][_0x9463('0x30')]));_0x5e2191[_0x9463('0x2f')]=_0x5e2191['attributes'][_0x9463('0x31')]?_0x5e2191['attributes']:_0x514321[_0x9463('0x29')];if(_0x3791d0['query'][_0x9463('0x32')]){_0x5e2191[_0x9463('0x33')]=[{'all':!![]}];}_0x5e2191=_[_0x9463('0x34')]({},_0x5e2191,_0x3791d0[_0x9463('0x35')]);return db[_0x9463('0x2b')][_0x9463('0x36')](_0x5e2191)[_0x9463('0x25')](handleEntityNotFound(_0x332cac,null))['then'](respondWithResult(_0x332cac,null))['catch'](handleError(_0x332cac,null));};exports[_0x9463('0x37')]=function(_0x4df1ac,_0x23cc09){return db['DashboardItem'][_0x9463('0x36')]({'where':{'id':_0x4df1ac[_0x9463('0x38')]['id']}})[_0x9463('0x25')](handleEntityNotFound(_0x23cc09,null))[_0x9463('0x25')](removeEntity(_0x23cc09,null))[_0x9463('0x39')](handleError(_0x23cc09,null));};function widgetAttributes(_0x22a8ce){try{switch(_0x22a8ce[_0x9463('0x3a')]){case _0x9463('0x3b'):return[{'name':_0x9463('0x3c'),'value':_0x22a8ce[_0x9463('0x3c')]||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x0]?_0x22a8ce[_0x9463('0x3d')][0x0][_0x9463('0x3e')]:undefined)||_0x9463('0x3f')}];case _0x9463('0x40'):return[{'name':_0x9463('0x41'),'value':_0x22a8ce[_0x9463('0x41')]||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x0]?_0x22a8ce[_0x9463('0x3d')][0x0][_0x9463('0x3e')]:undefined)||''}];case _0x9463('0x42'):return[{'name':_0x9463('0x43'),'value':_0x22a8ce[_0x9463('0x43')]||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x0]?_0x22a8ce[_0x9463('0x3d')][0x0][_0x9463('0x3e')]:undefined)||_0x9463('0x44')},{'name':'attrTimezone','value':_0x22a8ce[_0x9463('0x45')]||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x1]?_0x22a8ce[_0x9463('0x3d')][0x1][_0x9463('0x3e')]:undefined)||_0x9463('0x46')},{'name':'attrFontSize','value':_0x22a8ce[_0x9463('0x47')]||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x2]?_0x22a8ce[_0x9463('0x3d')][0x2]['value']:undefined)||0xc}];case _0x9463('0x48'):return[{'name':_0x9463('0x49'),'value':_0x22a8ce['attrMetric']||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x0]?_0x22a8ce[_0x9463('0x3d')][0x0]['value']:undefined)||'total'},{'name':'attrVoiceQueues','value':_0x22a8ce[_0x9463('0x4a')]||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x1]?_0x22a8ce[_0x9463('0x3d')][0x1][_0x9463('0x3e')]:undefined)||[]},{'name':_0x9463('0x47'),'value':_0x22a8ce['attrFontSize']||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x2]?_0x22a8ce[_0x9463('0x3d')][0x2][_0x9463('0x3e')]:undefined)||0x14}];case'multibar-chart':case _0x9463('0x4b'):return[{'name':'attrSerie1','value':_0x22a8ce['attrSerie1']||(_0x22a8ce['attrs']&&_0x22a8ce[_0x9463('0x3d')][0x0]?_0x22a8ce[_0x9463('0x3d')][0x0]['value']:undefined)||_0x9463('0x4c')},{'name':_0x9463('0x4d'),'value':_0x22a8ce[_0x9463('0x4d')]||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x1]?_0x22a8ce[_0x9463('0x3d')][0x1][_0x9463('0x3e')]:undefined)||null},{'name':_0x9463('0x4e'),'value':_0x22a8ce['attrSerie3']||(_0x22a8ce['attrs']&&_0x22a8ce['attrs'][0x2]?_0x22a8ce[_0x9463('0x3d')][0x2][_0x9463('0x3e')]:undefined)||null},{'name':'attrVoiceQueues','value':_0x22a8ce['attrVoiceQueues']||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x3]?_0x22a8ce['attrs'][0x3][_0x9463('0x3e')]:undefined)||[]}];case _0x9463('0x4f'):return[{'name':_0x9463('0x50'),'type':_0x22a8ce['reportType']||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce[_0x9463('0x3d')][0x0]?_0x22a8ce['attrs'][0x0][_0x9463('0x3a')]:undefined)||null,'value':_0x22a8ce[_0x9463('0x50')]||(_0x22a8ce[_0x9463('0x3d')]&&_0x22a8ce['attrs'][0x0]?_0x22a8ce[_0x9463('0x3d')][0x0][_0x9463('0x3e')]:undefined)||null},{'name':_0x9463('0x51'),'value':_0x22a8ce[_0x9463('0x51')]||(_0x22a8ce['attrs']&&_0x22a8ce['attrs'][0x1]?_0x22a8ce[_0x9463('0x3d')][0x1][_0x9463('0x3e')]:undefined)||0x0}];default:return[];}}catch(_0x2ea697){logger[_0x9463('0x52')](_0x9463('0x53'),JSON[_0x9463('0x54')](_0x2ea697));return[];}}exports[_0x9463('0x55')]=function(_0x221729,_0xc001a7){if(_0x221729[_0x9463('0x56')]){_0x221729[_0x9463('0x56')][_0x9463('0x3d')]=widgetAttributes(_0x221729[_0x9463('0x56')]);}return db[_0x9463('0x2b')][_0x9463('0x55')](_0x221729[_0x9463('0x56')],{})[_0x9463('0x25')](respondWithResult(_0xc001a7,0xc9))[_0x9463('0x39')](handleError(_0xc001a7,null));};exports['update']=function(_0x4d598c,_0x3c19e5){if(_0x4d598c[_0x9463('0x56')]['id']){delete _0x4d598c[_0x9463('0x56')]['id'];}_0x4d598c[_0x9463('0x56')][_0x9463('0x3d')]=widgetAttributes(_0x4d598c[_0x9463('0x56')]);return db[_0x9463('0x2b')][_0x9463('0x36')]({'where':{'id':_0x4d598c[_0x9463('0x38')]['id']}})[_0x9463('0x25')](handleEntityNotFound(_0x3c19e5,null))[_0x9463('0x25')](saveUpdates(_0x4d598c['body'],null))[_0x9463('0x25')](respondWithResult(_0x3c19e5,null))['catch'](handleError(_0x3c19e5,null));};
\ No newline at end of file
+var _0x777c=['attrHourFormat','attrTimezone','0.00','attrFontSize','counter','attrMetric','total','attrVoiceQueues','multibar-chart','pie-chart','attrSerie1','attrSerie2','attrSerie3','attrReport','widgetAttributes:\x20%s','stringify','create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','path','sox','to-csv','ejs','lodash','squel','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./dashboardItem.socket','register','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','error','name','send','show','params','keys','DashboardItem','query','filters','intersection','model','attributes','fields','length','includeAll','include','find','catch','type','iframe','attrUrl','attrs','value','custom','attrPath','clock'];(function(_0x14a97b,_0x59ef45){var _0x201bd5=function(_0x513ba7){while(--_0x513ba7){_0x14a97b['push'](_0x14a97b['shift']());}};_0x201bd5(++_0x59ef45);}(_0x777c,0x16e));var _0xc777=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x777c[_0x14add3];return _0x4a174f;};'use strict';var pdf=require(_0xc777('0x0'));var emlformat=require(_0xc777('0x1'));var rimraf=require(_0xc777('0x2'));var zipdir=require(_0xc777('0x3'));var jsonpatch=require(_0xc777('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xc777('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0xc777('0x6'));var sox=require(_0xc777('0x7'));var csv=require(_0xc777('0x8'));var ejs=require(_0xc777('0x9'));var fs=require('fs');var _=require(_0xc777('0xa'));var squel=require(_0xc777('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xc777('0x8'));var querystring=require(_0xc777('0xc'));var Papa=require('papaparse');var Redis=require(_0xc777('0xd'));var authService=require(_0xc777('0xe'));var qs=require(_0xc777('0xf'));var hardwareService=require(_0xc777('0x10'));var logger=require(_0xc777('0x11'))(_0xc777('0x12'));var utils=require(_0xc777('0x13'));var config=require(_0xc777('0x14'));var db=require(_0xc777('0x15'))['db'];config[_0xc777('0x16')]=_[_0xc777('0x17')](config['redis'],{'host':_0xc777('0x18'),'port':0x18eb});var socket=require(_0xc777('0x19'))(new Redis(config[_0xc777('0x16')]));require(_0xc777('0x1a'))[_0xc777('0x1b')](socket);function respondWithStatusCode(_0x2f25a7,_0x30196a){_0x30196a=_0x30196a||0xcc;return function(_0x4399a0){if(_0x4399a0){return _0x2f25a7[_0xc777('0x1c')](_0x30196a);}return _0x2f25a7['status'](_0x30196a)[_0xc777('0x1d')]();};}function respondWithResult(_0x3a6ad2,_0x356906){_0x356906=_0x356906||0xc8;return function(_0x4beed7){if(_0x4beed7){return _0x3a6ad2[_0xc777('0x1e')](_0x356906)[_0xc777('0x1f')](_0x4beed7);}};}function respondWithFilteredResult(_0x48a58c,_0x42d44f){return function(_0x2422c4){if(_0x2422c4){var _0x4cd4d7=_0x2422c4[_0xc777('0x20')],_0x1d7a78=_0x42d44f[_0xc777('0x21')],_0x4ad4d1=_0x42d44f[_0xc777('0x21')]+_0x42d44f[_0xc777('0x22')],_0x333acf;if(_0x4ad4d1>=_0x4cd4d7){_0x4ad4d1=_0x4cd4d7;_0x333acf=0xc8;}else{_0x333acf=0xce;}_0x48a58c[_0xc777('0x1e')](_0x333acf);return _0x48a58c[_0xc777('0x23')](_0xc777('0x24'),_0x1d7a78+'-'+_0x4ad4d1+'/'+_0x4cd4d7)['json'](_0x2422c4);}return null;};}function patchUpdates(_0xa05395){return function(_0x26a975){try{jsonpatch[_0xc777('0x25')](_0x26a975,_0xa05395,!![]);}catch(_0x3984af){return BPromise[_0xc777('0x26')](_0x3984af);}return _0x26a975[_0xc777('0x27')]();};}function saveUpdates(_0x4e84e0,_0x7259c6){return function(_0x148fc9){if(_0x148fc9){return _0x148fc9[_0xc777('0x28')](_0x4e84e0)['then'](function(_0xcddcb3){return _0xcddcb3;});}return null;};}function removeEntity(_0x2f26b8,_0x37286c){return function(_0x5154d2){if(_0x5154d2){return _0x5154d2[_0xc777('0x29')]()[_0xc777('0x2a')](function(){_0x2f26b8[_0xc777('0x1e')](0xcc)[_0xc777('0x1d')]();});}};}function handleEntityNotFound(_0x16eb77,_0x39d8ee){return function(_0x4b33cb){if(!_0x4b33cb){_0x16eb77[_0xc777('0x1c')](0x194);}return _0x4b33cb;};}function handleError(_0x523e41,_0x216b6e){_0x216b6e=_0x216b6e||0x1f4;return function(_0x2ae75b){logger[_0xc777('0x2b')](_0x2ae75b['stack']);if(_0x2ae75b[_0xc777('0x2c')]){delete _0x2ae75b['name'];}_0x523e41[_0xc777('0x1e')](_0x216b6e)[_0xc777('0x2d')](_0x2ae75b);};}exports[_0xc777('0x2e')]=function(_0x299a29,_0x40f1fa){var _0x22c617={'raw':![],'where':{'id':_0x299a29[_0xc777('0x2f')]['id']}},_0x433816={};_0x433816['model']=_[_0xc777('0x30')](db[_0xc777('0x31')]['rawAttributes']);_0x433816[_0xc777('0x32')]=_[_0xc777('0x30')](_0x299a29['query']);_0x433816[_0xc777('0x33')]=_[_0xc777('0x34')](_0x433816[_0xc777('0x35')],_0x433816[_0xc777('0x32')]);_0x22c617[_0xc777('0x36')]=_[_0xc777('0x34')](_0x433816[_0xc777('0x35')],qs[_0xc777('0x37')](_0x299a29[_0xc777('0x32')][_0xc777('0x37')]));_0x22c617[_0xc777('0x36')]=_0x22c617[_0xc777('0x36')][_0xc777('0x38')]?_0x22c617['attributes']:_0x433816[_0xc777('0x35')];if(_0x299a29[_0xc777('0x32')][_0xc777('0x39')]){_0x22c617[_0xc777('0x3a')]=[{'all':!![]}];}_0x22c617=_['merge']({},_0x22c617,_0x299a29['options']);return db[_0xc777('0x31')][_0xc777('0x3b')](_0x22c617)[_0xc777('0x2a')](handleEntityNotFound(_0x40f1fa,null))[_0xc777('0x2a')](respondWithResult(_0x40f1fa,null))[_0xc777('0x3c')](handleError(_0x40f1fa,null));};exports[_0xc777('0x29')]=function(_0x5d26f8,_0x3349e4){return db['DashboardItem'][_0xc777('0x3b')]({'where':{'id':_0x5d26f8['params']['id']}})[_0xc777('0x2a')](handleEntityNotFound(_0x3349e4,null))[_0xc777('0x2a')](removeEntity(_0x3349e4,null))['catch'](handleError(_0x3349e4,null));};function widgetAttributes(_0x41da24){try{switch(_0x41da24[_0xc777('0x3d')]){case _0xc777('0x3e'):return[{'name':_0xc777('0x3f'),'value':_0x41da24[_0xc777('0x3f')]||(_0x41da24[_0xc777('0x40')]&&_0x41da24[_0xc777('0x40')][0x0]?_0x41da24[_0xc777('0x40')][0x0][_0xc777('0x41')]:undefined)||'https://'}];case _0xc777('0x42'):return[{'name':'attrPath','value':_0x41da24[_0xc777('0x43')]||(_0x41da24['attrs']&&_0x41da24[_0xc777('0x40')][0x0]?_0x41da24['attrs'][0x0]['value']:undefined)||''}];case _0xc777('0x44'):return[{'name':_0xc777('0x45'),'value':_0x41da24[_0xc777('0x45')]||(_0x41da24[_0xc777('0x40')]&&_0x41da24[_0xc777('0x40')][0x0]?_0x41da24[_0xc777('0x40')][0x0][_0xc777('0x41')]:undefined)||'HH:mm:ss'},{'name':_0xc777('0x46'),'value':_0x41da24[_0xc777('0x46')]||(_0x41da24['attrs']&&_0x41da24[_0xc777('0x40')][0x1]?_0x41da24[_0xc777('0x40')][0x1]['value']:undefined)||_0xc777('0x47')},{'name':_0xc777('0x48'),'value':_0x41da24[_0xc777('0x48')]||(_0x41da24['attrs']&&_0x41da24[_0xc777('0x40')][0x2]?_0x41da24[_0xc777('0x40')][0x2][_0xc777('0x41')]:undefined)||0xc}];case _0xc777('0x49'):return[{'name':'attrMetric','value':_0x41da24[_0xc777('0x4a')]||(_0x41da24['attrs']&&_0x41da24[_0xc777('0x40')][0x0]?_0x41da24[_0xc777('0x40')][0x0][_0xc777('0x41')]:undefined)||_0xc777('0x4b')},{'name':'attrVoiceQueues','value':_0x41da24[_0xc777('0x4c')]||(_0x41da24[_0xc777('0x40')]&&_0x41da24[_0xc777('0x40')][0x1]?_0x41da24[_0xc777('0x40')][0x1][_0xc777('0x41')]:undefined)||[]},{'name':'attrFontSize','value':_0x41da24[_0xc777('0x48')]||(_0x41da24['attrs']&&_0x41da24['attrs'][0x2]?_0x41da24[_0xc777('0x40')][0x2][_0xc777('0x41')]:undefined)||0x14}];case _0xc777('0x4d'):case _0xc777('0x4e'):return[{'name':_0xc777('0x4f'),'value':_0x41da24['attrSerie1']||(_0x41da24['attrs']&&_0x41da24[_0xc777('0x40')][0x0]?_0x41da24['attrs'][0x0][_0xc777('0x41')]:undefined)||_0xc777('0x4b')},{'name':_0xc777('0x50'),'value':_0x41da24[_0xc777('0x50')]||(_0x41da24[_0xc777('0x40')]&&_0x41da24['attrs'][0x1]?_0x41da24['attrs'][0x1][_0xc777('0x41')]:undefined)||null},{'name':_0xc777('0x51'),'value':_0x41da24['attrSerie3']||(_0x41da24[_0xc777('0x40')]&&_0x41da24['attrs'][0x2]?_0x41da24[_0xc777('0x40')][0x2][_0xc777('0x41')]:undefined)||null},{'name':_0xc777('0x4c'),'value':_0x41da24['attrVoiceQueues']||(_0x41da24[_0xc777('0x40')]&&_0x41da24[_0xc777('0x40')][0x3]?_0x41da24[_0xc777('0x40')][0x3][_0xc777('0x41')]:undefined)||[]}];case'web-report':return[{'name':_0xc777('0x52'),'type':_0x41da24['reportType']||(_0x41da24[_0xc777('0x40')]&&_0x41da24[_0xc777('0x40')][0x0]?_0x41da24[_0xc777('0x40')][0x0]['type']:undefined)||null,'value':_0x41da24[_0xc777('0x52')]||(_0x41da24['attrs']&&_0x41da24[_0xc777('0x40')][0x0]?_0x41da24[_0xc777('0x40')][0x0][_0xc777('0x41')]:undefined)||null},{'name':'attrRefresh','value':_0x41da24['attrRefresh']||(_0x41da24[_0xc777('0x40')]&&_0x41da24[_0xc777('0x40')][0x1]?_0x41da24[_0xc777('0x40')][0x1]['value']:undefined)||0x0}];default:return[];}}catch(_0x5a1575){logger[_0xc777('0x2b')](_0xc777('0x53'),JSON[_0xc777('0x54')](_0x5a1575));return[];}}exports[_0xc777('0x55')]=function(_0x48a5e9,_0x189e0a){if(_0x48a5e9[_0xc777('0x56')]){_0x48a5e9[_0xc777('0x56')]['attrs']=widgetAttributes(_0x48a5e9[_0xc777('0x56')]);}return db['DashboardItem'][_0xc777('0x55')](_0x48a5e9[_0xc777('0x56')],{})[_0xc777('0x2a')](respondWithResult(_0x189e0a,0xc9))[_0xc777('0x3c')](handleError(_0x189e0a,null));};exports[_0xc777('0x28')]=function(_0x26a711,_0xcde087){if(_0x26a711['body']['id']){delete _0x26a711[_0xc777('0x56')]['id'];}_0x26a711['body']['attrs']=widgetAttributes(_0x26a711[_0xc777('0x56')]);return db[_0xc777('0x31')][_0xc777('0x3b')]({'where':{'id':_0x26a711[_0xc777('0x2f')]['id']}})[_0xc777('0x2a')](handleEntityNotFound(_0xcde087,null))['then'](saveUpdates(_0x26a711[_0xc777('0x56')],null))[_0xc777('0x2a')](respondWithResult(_0xcde087,null))[_0xc777('0x3c')](handleError(_0xcde087,null));};
\ No newline at end of file
index d344d05..e036aa1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4744=['hook','exports','events','../../mysqldb','setMaxListeners','save','update','remove','hasOwnProperty'];(function(_0x55264c,_0x22522f){var _0x430a1a=function(_0x49d3e4){while(--_0x49d3e4){_0x55264c['push'](_0x55264c['shift']());}};_0x430a1a(++_0x22522f);}(_0x4744,0x107));var _0x4474=function(_0x8be029,_0x2983c9){_0x8be029=_0x8be029-0x0;var _0x135c0f=_0x4744[_0x8be029];return _0x135c0f;};'use strict';var EventEmitter=require(_0x4474('0x0'));var DashboardItem=require(_0x4474('0x1'))['db']['DashboardItem'];var DashboardItemEvents=new EventEmitter();DashboardItemEvents[_0x4474('0x2')](0x0);var events={'afterCreate':_0x4474('0x3'),'afterUpdate':_0x4474('0x4'),'afterDestroy':_0x4474('0x5')};function emitEvent(_0xbb4a32){return function(_0x3337f4,_0x395f6d,_0x37c996){DashboardItemEvents['emit'](_0xbb4a32+':'+_0x3337f4['id'],_0x3337f4);DashboardItemEvents['emit'](_0xbb4a32,_0x3337f4);_0x37c996(null);};}for(var e in events){if(events[_0x4474('0x6')](e)){var event=events[e];DashboardItem[_0x4474('0x7')](e,emitEvent(event));}}module[_0x4474('0x8')]=DashboardItemEvents;
\ No newline at end of file
+var _0x3445=['../../mysqldb','DashboardItem','setMaxListeners','save','update','remove','emit','events'];(function(_0x133e7e,_0x17871c){var _0x4bb6c8=function(_0x4c3467){while(--_0x4c3467){_0x133e7e['push'](_0x133e7e['shift']());}};_0x4bb6c8(++_0x17871c);}(_0x3445,0x1b7));var _0x5344=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x3445[_0x3dd15e];return _0x231fd0;};'use strict';var EventEmitter=require(_0x5344('0x0'));var DashboardItem=require(_0x5344('0x1'))['db'][_0x5344('0x2')];var DashboardItemEvents=new EventEmitter();DashboardItemEvents[_0x5344('0x3')](0x0);var events={'afterCreate':_0x5344('0x4'),'afterUpdate':_0x5344('0x5'),'afterDestroy':_0x5344('0x6')};function emitEvent(_0x5d75ff){return function(_0x4a8e2b,_0x3a602c,_0xc695f0){DashboardItemEvents[_0x5344('0x7')](_0x5d75ff+':'+_0x4a8e2b['id'],_0x4a8e2b);DashboardItemEvents[_0x5344('0x7')](_0x5d75ff,_0x4a8e2b);_0xc695f0(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];DashboardItem['hook'](e,emitEvent(event));}}module['exports']=DashboardItemEvents;
\ No newline at end of file
index 369b5b0..463cfa6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe988=['./dashboardItem.attributes','exports','define','DashboardItem','dashboard_items','lodash','util','../../config/logger','api','moment','rimraf'];(function(_0xa9859c,_0x50500d){var _0x3e23f9=function(_0x4f242a){while(--_0x4f242a){_0xa9859c['push'](_0xa9859c['shift']());}};_0x3e23f9(++_0x50500d);}(_0xe988,0x15a));var _0x8e98=function(_0x311c35,_0x534915){_0x311c35=_0x311c35-0x0;var _0x5cc50c=_0xe988[_0x311c35];return _0x5cc50c;};'use strict';var _=require(_0x8e98('0x0'));var util=require(_0x8e98('0x1'));var logger=require(_0x8e98('0x2'))(_0x8e98('0x3'));var moment=require(_0x8e98('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x8e98('0x5'));var config=require('../../config/environment');var attributes=require(_0x8e98('0x6'));module[_0x8e98('0x7')]=function(_0x195034,_0x18ff72){return _0x195034[_0x8e98('0x8')](_0x8e98('0x9'),attributes,{'tableName':_0x8e98('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8a3c=['path','rimraf','../../config/environment','./dashboardItem.attributes','exports','DashboardItem','dashboard_items','lodash','../../config/logger','api','bluebird','request-promise'];(function(_0x2f088a,_0x56b212){var _0x4f6e72=function(_0x4eb315){while(--_0x4eb315){_0x2f088a['push'](_0x2f088a['shift']());}};_0x4f6e72(++_0x56b212);}(_0x8a3c,0x1c3));var _0xc8a3=function(_0x52d5d9,_0x24bc67){_0x52d5d9=_0x52d5d9-0x0;var _0x2507c4=_0x8a3c[_0x52d5d9];return _0x2507c4;};'use strict';var _=require(_0xc8a3('0x0'));var util=require('util');var logger=require(_0xc8a3('0x1'))(_0xc8a3('0x2'));var moment=require('moment');var BPromise=require(_0xc8a3('0x3'));var rp=require(_0xc8a3('0x4'));var fs=require('fs');var path=require(_0xc8a3('0x5'));var rimraf=require(_0xc8a3('0x6'));var config=require(_0xc8a3('0x7'));var attributes=require(_0xc8a3('0x8'));module[_0xc8a3('0x9')]=function(_0x92ea86,_0x3ce753){return _0x92ea86['define'](_0xc8a3('0xa'),attributes,{'tableName':_0xc8a3('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2df1a6a..305c145 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb773=['./dashboardItem.socket','register','request','then','DashboardItem,\x20%s,\x20%s','request\x20sent','debug','DashboardItem,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','rpc','../../config/environment','jayson/promise','client','redis','defaults','localhost','socket.io-emitter'];(function(_0x41d02a,_0x355e19){var _0x4c3983=function(_0x4802a7){while(--_0x4802a7){_0x41d02a['push'](_0x41d02a['shift']());}};_0x4c3983(++_0x355e19);}(_0xb773,0x14e));var _0x3b77=function(_0x5a77fb,_0x2d2d59){_0x5a77fb=_0x5a77fb-0x0;var _0x6ca4fb=_0xb773[_0x5a77fb];return _0x6ca4fb;};'use strict';var _=require(_0x3b77('0x0'));var util=require(_0x3b77('0x1'));var moment=require(_0x3b77('0x2'));var BPromise=require(_0x3b77('0x3'));var rs=require(_0x3b77('0x4'));var fs=require('fs');var Redis=require(_0x3b77('0x5'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x3b77('0x6'));var config=require(_0x3b77('0x7'));var jayson=require(_0x3b77('0x8'));var client=jayson[_0x3b77('0x9')]['http']({'port':0x232a});config[_0x3b77('0xa')]=_[_0x3b77('0xb')](config[_0x3b77('0xa')],{'host':_0x3b77('0xc'),'port':0x18eb});var socket=require(_0x3b77('0xd'))(new Redis(config[_0x3b77('0xa')]));require(_0x3b77('0xe'))[_0x3b77('0xf')](socket);function respondWithRpcPromise(_0x1ad43e,_0x11fade,_0x1261c8){return new BPromise(function(_0x1b309a,_0x28bb78){return client[_0x3b77('0x10')](_0x1ad43e,_0x1261c8)[_0x3b77('0x11')](function(_0xe4748c){logger['info'](_0x3b77('0x12'),_0x11fade,_0x3b77('0x13'));logger[_0x3b77('0x14')](_0x3b77('0x15'),_0x11fade,_0x3b77('0x13'),JSON[_0x3b77('0x16')](_0xe4748c));if(_0xe4748c['error']){if(_0xe4748c[_0x3b77('0x17')][_0x3b77('0x18')]===0x1f4){logger[_0x3b77('0x17')](_0x3b77('0x12'),_0x11fade,_0xe4748c['error'][_0x3b77('0x19')]);return _0x28bb78(_0xe4748c[_0x3b77('0x17')]['message']);}logger[_0x3b77('0x17')](_0x3b77('0x12'),_0x11fade,_0xe4748c['error'][_0x3b77('0x19')]);return _0x1b309a(_0xe4748c[_0x3b77('0x17')][_0x3b77('0x19')]);}else{logger[_0x3b77('0x1a')](_0x3b77('0x12'),_0x11fade,_0x3b77('0x13'));_0x1b309a(_0xe4748c[_0x3b77('0x1b')][_0x3b77('0x19')]);}})[_0x3b77('0x1c')](function(_0x4b5f64){logger[_0x3b77('0x17')](_0x3b77('0x12'),_0x11fade,_0x4b5f64);_0x28bb78(_0x4b5f64);});});}
\ No newline at end of file
+var _0xbc0c=['DashboardItem,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./dashboardItem.socket','register','then','info','DashboardItem,\x20%s,\x20%s','debug'];(function(_0x3831c8,_0x19525c){var _0x465c0b=function(_0x1d9965){while(--_0x1d9965){_0x3831c8['push'](_0x3831c8['shift']());}};_0x465c0b(++_0x19525c);}(_0xbc0c,0x1f4));var _0xcbc0=function(_0x33f73b,_0xa73b89){_0x33f73b=_0x33f73b-0x0;var _0x45d964=_0xbc0c[_0x33f73b];return _0x45d964;};'use strict';var _=require(_0xcbc0('0x0'));var util=require(_0xcbc0('0x1'));var moment=require(_0xcbc0('0x2'));var BPromise=require('bluebird');var rs=require(_0xcbc0('0x3'));var fs=require('fs');var Redis=require(_0xcbc0('0x4'));var db=require(_0xcbc0('0x5'))['db'];var utils=require(_0xcbc0('0x6'));var logger=require('../../config/logger')(_0xcbc0('0x7'));var config=require(_0xcbc0('0x8'));var jayson=require(_0xcbc0('0x9'));var client=jayson[_0xcbc0('0xa')][_0xcbc0('0xb')]({'port':0x232a});config[_0xcbc0('0xc')]=_[_0xcbc0('0xd')](config[_0xcbc0('0xc')],{'host':_0xcbc0('0xe'),'port':0x18eb});var socket=require(_0xcbc0('0xf'))(new Redis(config[_0xcbc0('0xc')]));require(_0xcbc0('0x10'))[_0xcbc0('0x11')](socket);function respondWithRpcPromise(_0x55c235,_0x44f2f1,_0x22e061){return new BPromise(function(_0x33fd63,_0x5cd707){return client['request'](_0x55c235,_0x22e061)[_0xcbc0('0x12')](function(_0x185e97){logger[_0xcbc0('0x13')](_0xcbc0('0x14'),_0x44f2f1,'request\x20sent');logger[_0xcbc0('0x15')](_0xcbc0('0x16'),_0x44f2f1,'request\x20sent',JSON[_0xcbc0('0x17')](_0x185e97));if(_0x185e97[_0xcbc0('0x18')]){if(_0x185e97['error'][_0xcbc0('0x19')]===0x1f4){logger['error'](_0xcbc0('0x14'),_0x44f2f1,_0x185e97[_0xcbc0('0x18')][_0xcbc0('0x1a')]);return _0x5cd707(_0x185e97[_0xcbc0('0x18')][_0xcbc0('0x1a')]);}logger[_0xcbc0('0x18')]('DashboardItem,\x20%s,\x20%s',_0x44f2f1,_0x185e97[_0xcbc0('0x18')][_0xcbc0('0x1a')]);return _0x33fd63(_0x185e97[_0xcbc0('0x18')][_0xcbc0('0x1a')]);}else{logger[_0xcbc0('0x13')](_0xcbc0('0x14'),_0x44f2f1,_0xcbc0('0x1b'));_0x33fd63(_0x185e97[_0xcbc0('0x1c')][_0xcbc0('0x1a')]);}})['catch'](function(_0x18e81e){logger['error'](_0xcbc0('0x14'),_0x44f2f1,_0x18e81e);_0x5cd707(_0x18e81e);});});}
\ No newline at end of file
index 248d570..899dbca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['register','length','dashboardItem:','./dashboardItem.events','save','remove','update','emit','removeListener'];(function(_0x4c6cf0,_0x826f70){var _0x108145=function(_0x299f69){while(--_0x299f69){_0x4c6cf0['push'](_0x4c6cf0['shift']());}};_0x108145(++_0x826f70);}(_0x34e8,0x12c));var _0x834e=function(_0x42cb70,_0x5c8934){_0x42cb70=_0x42cb70-0x0;var _0x2949fb=_0x34e8[_0x42cb70];return _0x2949fb;};'use strict';var DashboardItemEvents=require(_0x834e('0x0'));var events=[_0x834e('0x1'),_0x834e('0x2'),_0x834e('0x3')];function createListener(_0x530939,_0x832422){return function(_0x21e2e0){_0x832422[_0x834e('0x4')](_0x530939,_0x21e2e0);};}function removeListener(_0x31bf20,_0x289ef2){return function(){DashboardItemEvents[_0x834e('0x5')](_0x31bf20,_0x289ef2);};}exports[_0x834e('0x6')]=function(_0x4a2018){for(var _0x858aa1=0x0,_0x52056d=events[_0x834e('0x7')];_0x858aa1<_0x52056d;_0x858aa1++){var _0x3cc2e3=events[_0x858aa1];var _0x3a3ef6=createListener(_0x834e('0x8')+_0x3cc2e3,_0x4a2018);DashboardItemEvents['on'](_0x3cc2e3,_0x3a3ef6);}};
\ No newline at end of file
+var _0xedd9=['removeListener','register','length','dashboardItem:','save','remove','update','emit'];(function(_0x2743e4,_0x30cb8d){var _0x16c55a=function(_0x4dd107){while(--_0x4dd107){_0x2743e4['push'](_0x2743e4['shift']());}};_0x16c55a(++_0x30cb8d);}(_0xedd9,0xfc));var _0x9edd=function(_0x52784c,_0x5751d6){_0x52784c=_0x52784c-0x0;var _0x147746=_0xedd9[_0x52784c];return _0x147746;};'use strict';var DashboardItemEvents=require('./dashboardItem.events');var events=[_0x9edd('0x0'),_0x9edd('0x1'),_0x9edd('0x2')];function createListener(_0x2c16b8,_0x3b51bc){return function(_0x127cbe){_0x3b51bc[_0x9edd('0x3')](_0x2c16b8,_0x127cbe);};}function removeListener(_0x36b53f,_0x5943b3){return function(){DashboardItemEvents[_0x9edd('0x4')](_0x36b53f,_0x5943b3);};}exports[_0x9edd('0x5')]=function(_0x268f9e){for(var _0x34c1a7=0x0,_0x5319f7=events[_0x9edd('0x6')];_0x34c1a7<_0x5319f7;_0x34c1a7++){var _0x571af9=events[_0x34c1a7];var _0x172522=createListener(_0x9edd('0x7')+_0x571af9,_0x268f9e);DashboardItemEvents['on'](_0x571af9,_0x172522);}};
\ No newline at end of file
index 2a51b1f..6618ad3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf955=['./dashboardItem.controller','get','/:id','isAuthenticated','show','post','create','put','update','delete','destroy','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x27f761,_0x4015f3){var _0x3fd40f=function(_0x3642d5){while(--_0x3642d5){_0x27f761['push'](_0x27f761['shift']());}};_0x3fd40f(++_0x4015f3);}(_0xf955,0x1ad));var _0x5f95=function(_0x139a3c,_0x4fc883){_0x139a3c=_0x139a3c-0x0;var _0x2b375b=_0xf955[_0x139a3c];return _0x2b375b;};'use strict';var multer=require(_0x5f95('0x0'));var util=require(_0x5f95('0x1'));var path=require(_0x5f95('0x2'));var timeout=require(_0x5f95('0x3'));var express=require(_0x5f95('0x4'));var router=express[_0x5f95('0x5')]();var auth=require(_0x5f95('0x6'));var interaction=require(_0x5f95('0x7'));var config=require('../../config/environment');var controller=require(_0x5f95('0x8'));router[_0x5f95('0x9')](_0x5f95('0xa'),auth[_0x5f95('0xb')](),controller[_0x5f95('0xc')]);router[_0x5f95('0xd')]('/',auth[_0x5f95('0xb')](),controller[_0x5f95('0xe')]);router[_0x5f95('0xf')]('/:id',auth[_0x5f95('0xb')](),controller[_0x5f95('0x10')]);router[_0x5f95('0x11')]('/:id',auth['isAuthenticated'](),controller[_0x5f95('0x12')]);module['exports']=router;
\ No newline at end of file
+var _0x06ee=['update','exports','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./dashboardItem.controller','get','/:id','isAuthenticated','show','create','put'];(function(_0x51e7a6,_0x171c5d){var _0x10a3a2=function(_0xafc702){while(--_0xafc702){_0x51e7a6['push'](_0x51e7a6['shift']());}};_0x10a3a2(++_0x171c5d);}(_0x06ee,0x15b));var _0xe06e=function(_0x29ae62,_0x19d14c){_0x29ae62=_0x29ae62-0x0;var _0x4e0532=_0x06ee[_0x29ae62];return _0x4e0532;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xe06e('0x0'));var timeout=require(_0xe06e('0x1'));var express=require('express');var router=express[_0xe06e('0x2')]();var auth=require(_0xe06e('0x3'));var interaction=require(_0xe06e('0x4'));var config=require(_0xe06e('0x5'));var controller=require(_0xe06e('0x6'));router[_0xe06e('0x7')](_0xe06e('0x8'),auth[_0xe06e('0x9')](),controller[_0xe06e('0xa')]);router['post']('/',auth['isAuthenticated'](),controller[_0xe06e('0xb')]);router[_0xe06e('0xc')]('/:id',auth['isAuthenticated'](),controller[_0xe06e('0xd')]);router['delete']('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0xe06e('0xe')]=router;
\ No newline at end of file
index d0b85f4..2391e96 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x61bb=['sequelize','exports','STRING'];(function(_0x2898e5,_0x59cd6e){var _0x1b628f=function(_0x271b2c){while(--_0x271b2c){_0x2898e5['push'](_0x2898e5['shift']());}};_0x1b628f(++_0x59cd6e);}(_0x61bb,0x189));var _0xb61b=function(_0xf69110,_0x4410b2){_0xf69110=_0xf69110-0x0;var _0x5c0d6a=_0x61bb[_0xf69110];return _0x5c0d6a;};'use strict';var Sequelize=require(_0xb61b('0x0'));module[_0xb61b('0x1')]={'name':{'type':Sequelize[_0xb61b('0x2')],'allowNull':![]}};
\ No newline at end of file
+var _0xbda2=['exports','sequelize'];(function(_0x3ef984,_0x3f5981){var _0x578b03=function(_0x112d2f){while(--_0x112d2f){_0x3ef984['push'](_0x3ef984['shift']());}};_0x578b03(++_0x3f5981);}(_0xbda2,0x1e1));var _0x2bda=function(_0x16a0a2,_0x429a5b){_0x16a0a2=_0x16a0a2-0x0;var _0x12f6e7=_0xbda2[_0x16a0a2];return _0x12f6e7;};'use strict';var Sequelize=require(_0x2bda('0x0'));module[_0x2bda('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]}};
\ No newline at end of file
index 27115cd..a42485f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x94c2=['userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','find','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','set','apply','reject','save','then','destroy','Dispositions','UserProfileResource','error','stack','name','send','index','Disposition','rawAttributes','keys','query','filters','intersection','attributes','model','fields','length','hasOwnProperty','limit','order','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','catch','show','params','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection'];(function(_0x36ec30,_0x5b063c){var _0x4e5b09=function(_0x32ffd5){while(--_0x32ffd5){_0x36ec30['push'](_0x36ec30['shift']());}};_0x4e5b09(++_0x5b063c);}(_0x94c2,0xaa));var _0x294c=function(_0x2dea24,_0x2fc021){_0x2dea24=_0x2dea24-0x0;var _0x309d58=_0x94c2[_0x2dea24];return _0x309d58;};'use strict';var pdf=require(_0x294c('0x0'));var emlformat=require(_0x294c('0x1'));var rimraf=require(_0x294c('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x294c('0x3'));var rp=require(_0x294c('0x4'));var moment=require(_0x294c('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x294c('0x6'));var util=require(_0x294c('0x7'));var path=require(_0x294c('0x8'));var sox=require('sox');var csv=require(_0x294c('0x9'));var ejs=require(_0x294c('0xa'));var fs=require('fs');var _=require(_0x294c('0xb'));var squel=require(_0x294c('0xc'));var crypto=require(_0x294c('0xd'));var jsforce=require(_0x294c('0xe'));var deskjs=require(_0x294c('0xf'));var toCsv=require(_0x294c('0x9'));var querystring=require(_0x294c('0x10'));var Papa=require(_0x294c('0x11'));var Redis=require(_0x294c('0x12'));var authService=require(_0x294c('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x294c('0x14'));var logger=require('../../config/logger')('api');var utils=require(_0x294c('0x15'));var config=require(_0x294c('0x16'));var db=require(_0x294c('0x17'))['db'];function respondWithStatusCode(_0x2357f8,_0x3294b2){_0x3294b2=_0x3294b2||0xcc;return function(_0x208969){if(_0x208969){return _0x2357f8[_0x294c('0x18')](_0x3294b2);}return _0x2357f8[_0x294c('0x19')](_0x3294b2)[_0x294c('0x1a')]();};}function respondWithResult(_0x10d985,_0x3370a8){_0x3370a8=_0x3370a8||0xc8;return function(_0x16480d){if(_0x16480d){return _0x10d985[_0x294c('0x19')](_0x3370a8)[_0x294c('0x1b')](_0x16480d);}};}function respondWithFilteredResult(_0x522435,_0x20a67d){return function(_0x285c99){if(_0x285c99){var _0x4ee725=_0x285c99['count'],_0x233738=_0x20a67d['offset'],_0x4ace81=_0x20a67d[_0x294c('0x1c')]+_0x20a67d['limit'],_0x50682b;if(_0x4ace81>=_0x4ee725){_0x4ace81=_0x4ee725;_0x50682b=0xc8;}else{_0x50682b=0xce;}_0x522435[_0x294c('0x19')](_0x50682b);return _0x522435[_0x294c('0x1d')]('Content-Range',_0x233738+'-'+_0x4ace81+'/'+_0x4ee725)[_0x294c('0x1b')](_0x285c99);}return null;};}function patchUpdates(_0x2bba24){return function(_0x58ad07){try{jsonpatch[_0x294c('0x1e')](_0x58ad07,_0x2bba24,!![]);}catch(_0x5003c6){return BPromise[_0x294c('0x1f')](_0x5003c6);}return _0x58ad07[_0x294c('0x20')]();};}function saveUpdates(_0x5e21ae,_0x51fccd){return function(_0x5a8beb){if(_0x5a8beb){return _0x5a8beb['update'](_0x5e21ae)[_0x294c('0x21')](function(_0x3692c1){return _0x3692c1;});}return null;};}function removeEntity(_0x48ae55,_0x111ddd){return function(_0x560380){if(_0x560380){return _0x560380[_0x294c('0x22')]()['then'](function(){var _0x3bdd30=_0x560380['get']({'plain':!![]});var _0x3cad90=_0x294c('0x23');return db[_0x294c('0x24')][_0x294c('0x22')]({'where':{'type':_0x3cad90,'resourceId':_0x3bdd30['id']}})[_0x294c('0x21')](function(){return _0x560380;});})[_0x294c('0x21')](function(){_0x48ae55['status'](0xcc)[_0x294c('0x1a')]();});}};}function handleEntityNotFound(_0x3530b8,_0x15fa21){return function(_0x26c202){if(!_0x26c202){_0x3530b8['sendStatus'](0x194);}return _0x26c202;};}function handleError(_0x50596d,_0x5ed51e){_0x5ed51e=_0x5ed51e||0x1f4;return function(_0x4f6d35){logger[_0x294c('0x25')](_0x4f6d35[_0x294c('0x26')]);if(_0x4f6d35['name']){delete _0x4f6d35[_0x294c('0x27')];}_0x50596d[_0x294c('0x19')](_0x5ed51e)[_0x294c('0x28')](_0x4f6d35);};}exports[_0x294c('0x29')]=function(_0x1472bc,_0xcda5ff){var _0x3096bb={},_0x411191={},_0x3a8c1b={'count':0x0,'rows':[]};var _0x500632=db[_0x294c('0x2a')][_0x294c('0x2b')];_0x411191['model']=_[_0x294c('0x2c')](_0x500632);_0x411191[_0x294c('0x2d')]=_[_0x294c('0x2c')](_0x1472bc['query']);_0x411191[_0x294c('0x2e')]=_[_0x294c('0x2f')](_0x411191['model'],_0x411191[_0x294c('0x2d')]);_0x3096bb[_0x294c('0x30')]=_['intersection'](_0x411191[_0x294c('0x31')],qs[_0x294c('0x32')](_0x1472bc[_0x294c('0x2d')][_0x294c('0x32')]));_0x3096bb[_0x294c('0x30')]=_0x3096bb[_0x294c('0x30')][_0x294c('0x33')]?_0x3096bb[_0x294c('0x30')]:_0x411191[_0x294c('0x31')];if(!_0x1472bc['query'][_0x294c('0x34')]('nolimit')){_0x3096bb[_0x294c('0x35')]=qs['limit'](_0x1472bc[_0x294c('0x2d')]['limit']);_0x3096bb['offset']=qs[_0x294c('0x1c')](_0x1472bc['query']['offset']);}_0x3096bb[_0x294c('0x36')]=qs[_0x294c('0x37')](_0x1472bc[_0x294c('0x2d')][_0x294c('0x37')]);_0x3096bb['where']=qs[_0x294c('0x2e')](_[_0x294c('0x38')](_0x1472bc[_0x294c('0x2d')],_0x411191[_0x294c('0x2e')]));if(_0x1472bc[_0x294c('0x2d')][_0x294c('0x39')]){_0x3096bb[_0x294c('0x3a')]=_[_0x294c('0x3b')](_0x3096bb[_0x294c('0x3a')],{'$or':_[_0x294c('0x3c')](_0x500632,function(_0x234618){if(_0x234618[_0x294c('0x3d')][_0x294c('0x3e')]!==_0x294c('0x3f')){var _0x4a07cd={};_0x4a07cd[_0x234618[_0x294c('0x40')]]={'$like':'%'+_0x1472bc[_0x294c('0x2d')][_0x294c('0x39')]+'%'};return _0x4a07cd;}})});}_0x3096bb=_[_0x294c('0x3b')]({},_0x3096bb,_0x1472bc[_0x294c('0x41')]);var _0x3dc12e={'where':_0x3096bb['where']};return db[_0x294c('0x2a')]['count'](_0x3dc12e)['then'](function(_0x2dd387){_0x3a8c1b['count']=_0x2dd387;if(_0x1472bc[_0x294c('0x2d')][_0x294c('0x42')]){_0x3096bb[_0x294c('0x43')]=[{'all':!![]}];}return db[_0x294c('0x2a')][_0x294c('0x44')](_0x3096bb);})[_0x294c('0x21')](function(_0x12210f){_0x3a8c1b['rows']=_0x12210f;return _0x3a8c1b;})['then'](respondWithFilteredResult(_0xcda5ff,_0x3096bb))[_0x294c('0x45')](handleError(_0xcda5ff,null));};exports[_0x294c('0x46')]=function(_0x2e836b,_0x43f641){var _0x26a4db={'raw':!![],'where':{'id':_0x2e836b[_0x294c('0x47')]['id']}},_0x1a0eba={};_0x1a0eba[_0x294c('0x31')]=_[_0x294c('0x2c')](db[_0x294c('0x2a')][_0x294c('0x2b')]);_0x1a0eba[_0x294c('0x2d')]=_['keys'](_0x2e836b[_0x294c('0x2d')]);_0x1a0eba['filters']=_[_0x294c('0x2f')](_0x1a0eba[_0x294c('0x31')],_0x1a0eba[_0x294c('0x2d')]);_0x26a4db[_0x294c('0x30')]=_[_0x294c('0x2f')](_0x1a0eba[_0x294c('0x31')],qs[_0x294c('0x32')](_0x2e836b[_0x294c('0x2d')][_0x294c('0x32')]));_0x26a4db[_0x294c('0x30')]=_0x26a4db[_0x294c('0x30')][_0x294c('0x33')]?_0x26a4db[_0x294c('0x30')]:_0x1a0eba[_0x294c('0x31')];if(_0x2e836b[_0x294c('0x2d')][_0x294c('0x42')]){_0x26a4db[_0x294c('0x43')]=[{'all':!![]}];}_0x26a4db=_[_0x294c('0x3b')]({},_0x26a4db,_0x2e836b[_0x294c('0x41')]);return db[_0x294c('0x2a')]['find'](_0x26a4db)['then'](handleEntityNotFound(_0x43f641,null))[_0x294c('0x21')](respondWithResult(_0x43f641,null))[_0x294c('0x45')](handleError(_0x43f641,null));};exports[_0x294c('0x48')]=function(_0x5575ae,_0x5567d0){return db[_0x294c('0x2a')]['create'](_0x5575ae[_0x294c('0x49')],{})[_0x294c('0x21')](function(_0x14d084){var _0x2510f5=_0x5575ae[_0x294c('0x4a')][_0x294c('0x4b')]({'plain':!![]});if(!_0x2510f5)throw new Error(_0x294c('0x4c'));if(_0x2510f5[_0x294c('0x4d')]===_0x294c('0x4a')){var _0x31f3b5=_0x14d084[_0x294c('0x4b')]({'plain':!![]});var _0x5907f2=_0x294c('0x23');return db[_0x294c('0x4e')]['find']({'where':{'name':_0x5907f2,'userProfileId':_0x2510f5[_0x294c('0x4f')]},'raw':!![]})[_0x294c('0x21')](function(_0x262926){if(_0x262926&&_0x262926['autoAssociation']===0x0){return db['UserProfileResource'][_0x294c('0x48')]({'name':_0x31f3b5[_0x294c('0x27')],'resourceId':_0x31f3b5['id'],'type':_0x262926['name'],'sectionId':_0x262926['id']},{})[_0x294c('0x21')](function(){return _0x14d084;});}else{return _0x14d084;}})[_0x294c('0x45')](function(_0x529812){logger['error'](_0x294c('0x50'),_0x529812);throw _0x529812;});}return _0x14d084;})['then'](respondWithResult(_0x5567d0,0xc9))[_0x294c('0x45')](handleError(_0x5567d0,null));};exports[_0x294c('0x51')]=function(_0x29caaf,_0x22b2fb){if(_0x29caaf[_0x294c('0x49')]['id']){delete _0x29caaf[_0x294c('0x49')]['id'];}return db[_0x294c('0x2a')][_0x294c('0x52')]({'where':{'id':_0x29caaf['params']['id']}})['then'](handleEntityNotFound(_0x22b2fb,null))['then'](saveUpdates(_0x29caaf[_0x294c('0x49')],null))[_0x294c('0x21')](respondWithResult(_0x22b2fb,null))[_0x294c('0x45')](handleError(_0x22b2fb,null));};exports[_0x294c('0x22')]=function(_0xdfbea9,_0x199ca6){return db[_0x294c('0x2a')][_0x294c('0x52')]({'where':{'id':_0xdfbea9[_0x294c('0x47')]['id']}})[_0x294c('0x21')](handleEntityNotFound(_0x199ca6,null))['then'](removeEntity(_0x199ca6,null))[_0x294c('0x45')](handleError(_0x199ca6,null));};
\ No newline at end of file
+var _0x50f2=['ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','reject','save','update','then','get','UserProfileResource','destroy','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','Disposition','include','findAll','rows','catch','show','params','includeAll','options','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','Dispositions','UserProfileSection','find','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','eml-format','rimraf','fast-json-patch','bluebird','mustache','util','path'];(function(_0x587fb5,_0x59cb3b){var _0x551105=function(_0x5bbef4){while(--_0x5bbef4){_0x587fb5['push'](_0x587fb5['shift']());}};_0x551105(++_0x59cb3b);}(_0x50f2,0x1ea));var _0x250f=function(_0x4b055c,_0x4b870b){_0x4b055c=_0x4b055c-0x0;var _0x4b62bb=_0x50f2[_0x4b055c];return _0x4b62bb;};'use strict';var pdf=require(_0x250f('0x0'));var emlformat=require(_0x250f('0x1'));var rimraf=require(_0x250f('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x250f('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x250f('0x4'));var Mustache=require(_0x250f('0x5'));var util=require(_0x250f('0x6'));var path=require(_0x250f('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x250f('0x8'));var fs=require('fs');var _=require(_0x250f('0x9'));var squel=require(_0x250f('0xa'));var crypto=require(_0x250f('0xb'));var jsforce=require(_0x250f('0xc'));var deskjs=require(_0x250f('0xd'));var toCsv=require(_0x250f('0xe'));var querystring=require(_0x250f('0xf'));var Papa=require(_0x250f('0x10'));var Redis=require(_0x250f('0x11'));var authService=require(_0x250f('0x12'));var qs=require(_0x250f('0x13'));var hardwareService=require(_0x250f('0x14'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0x250f('0x15'));var db=require(_0x250f('0x16'))['db'];function respondWithStatusCode(_0x58d92a,_0x486306){_0x486306=_0x486306||0xcc;return function(_0x5ca028){if(_0x5ca028){return _0x58d92a[_0x250f('0x17')](_0x486306);}return _0x58d92a['status'](_0x486306)[_0x250f('0x18')]();};}function respondWithResult(_0x338643,_0x315a48){_0x315a48=_0x315a48||0xc8;return function(_0x3ecdfc){if(_0x3ecdfc){return _0x338643[_0x250f('0x19')](_0x315a48)[_0x250f('0x1a')](_0x3ecdfc);}};}function respondWithFilteredResult(_0x315c54,_0x426b80){return function(_0x7aaae2){if(_0x7aaae2){var _0x5c9b9a=_0x7aaae2[_0x250f('0x1b')],_0x3c4e22=_0x426b80['offset'],_0x217d10=_0x426b80[_0x250f('0x1c')]+_0x426b80[_0x250f('0x1d')],_0x5954bc;if(_0x217d10>=_0x5c9b9a){_0x217d10=_0x5c9b9a;_0x5954bc=0xc8;}else{_0x5954bc=0xce;}_0x315c54[_0x250f('0x19')](_0x5954bc);return _0x315c54[_0x250f('0x1e')](_0x250f('0x1f'),_0x3c4e22+'-'+_0x217d10+'/'+_0x5c9b9a)['json'](_0x7aaae2);}return null;};}function patchUpdates(_0x460560){return function(_0x158a1f){try{jsonpatch['apply'](_0x158a1f,_0x460560,!![]);}catch(_0x3cdceb){return BPromise[_0x250f('0x20')](_0x3cdceb);}return _0x158a1f[_0x250f('0x21')]();};}function saveUpdates(_0x2eed7a,_0x20d096){return function(_0xb50d82){if(_0xb50d82){return _0xb50d82[_0x250f('0x22')](_0x2eed7a)[_0x250f('0x23')](function(_0x412111){return _0x412111;});}return null;};}function removeEntity(_0x38488f,_0x4650f3){return function(_0x113b9f){if(_0x113b9f){return _0x113b9f['destroy']()[_0x250f('0x23')](function(){var _0x2dd557=_0x113b9f[_0x250f('0x24')]({'plain':!![]});var _0x59d9ea='Dispositions';return db[_0x250f('0x25')][_0x250f('0x26')]({'where':{'type':_0x59d9ea,'resourceId':_0x2dd557['id']}})[_0x250f('0x23')](function(){return _0x113b9f;});})[_0x250f('0x23')](function(){_0x38488f[_0x250f('0x19')](0xcc)[_0x250f('0x18')]();});}};}function handleEntityNotFound(_0x30dda3,_0x4d26c2){return function(_0x370d63){if(!_0x370d63){_0x30dda3[_0x250f('0x17')](0x194);}return _0x370d63;};}function handleError(_0x392ff5,_0x18e835){_0x18e835=_0x18e835||0x1f4;return function(_0x4f87b8){logger['error'](_0x4f87b8[_0x250f('0x27')]);if(_0x4f87b8[_0x250f('0x28')]){delete _0x4f87b8[_0x250f('0x28')];}_0x392ff5[_0x250f('0x19')](_0x18e835)[_0x250f('0x29')](_0x4f87b8);};}exports[_0x250f('0x2a')]=function(_0x2704a6,_0x52038c){var _0x2dc1a1={},_0x317964={},_0x5446ef={'count':0x0,'rows':[]};var _0x34e40d=db['Disposition'][_0x250f('0x2b')];_0x317964[_0x250f('0x2c')]=_[_0x250f('0x2d')](_0x34e40d);_0x317964['query']=_[_0x250f('0x2d')](_0x2704a6[_0x250f('0x2e')]);_0x317964[_0x250f('0x2f')]=_[_0x250f('0x30')](_0x317964[_0x250f('0x2c')],_0x317964[_0x250f('0x2e')]);_0x2dc1a1[_0x250f('0x31')]=_['intersection'](_0x317964[_0x250f('0x2c')],qs[_0x250f('0x32')](_0x2704a6[_0x250f('0x2e')][_0x250f('0x32')]));_0x2dc1a1[_0x250f('0x31')]=_0x2dc1a1[_0x250f('0x31')][_0x250f('0x33')]?_0x2dc1a1[_0x250f('0x31')]:_0x317964[_0x250f('0x2c')];if(!_0x2704a6[_0x250f('0x2e')][_0x250f('0x34')](_0x250f('0x35'))){_0x2dc1a1['limit']=qs[_0x250f('0x1d')](_0x2704a6[_0x250f('0x2e')][_0x250f('0x1d')]);_0x2dc1a1[_0x250f('0x1c')]=qs['offset'](_0x2704a6[_0x250f('0x2e')]['offset']);}_0x2dc1a1[_0x250f('0x36')]=qs[_0x250f('0x37')](_0x2704a6[_0x250f('0x2e')][_0x250f('0x37')]);_0x2dc1a1[_0x250f('0x38')]=qs[_0x250f('0x2f')](_[_0x250f('0x39')](_0x2704a6[_0x250f('0x2e')],_0x317964[_0x250f('0x2f')]));if(_0x2704a6[_0x250f('0x2e')][_0x250f('0x3a')]){_0x2dc1a1[_0x250f('0x38')]=_[_0x250f('0x3b')](_0x2dc1a1[_0x250f('0x38')],{'$or':_[_0x250f('0x3c')](_0x34e40d,function(_0x578d23){if(_0x578d23[_0x250f('0x3d')][_0x250f('0x3e')]!==_0x250f('0x3f')){var _0x4da0d8={};_0x4da0d8[_0x578d23['field']]={'$like':'%'+_0x2704a6[_0x250f('0x2e')][_0x250f('0x3a')]+'%'};return _0x4da0d8;}})});}_0x2dc1a1=_[_0x250f('0x3b')]({},_0x2dc1a1,_0x2704a6['options']);var _0x58de30={'where':_0x2dc1a1['where']};return db[_0x250f('0x40')][_0x250f('0x1b')](_0x58de30)[_0x250f('0x23')](function(_0xc2b0f3){_0x5446ef[_0x250f('0x1b')]=_0xc2b0f3;if(_0x2704a6['query']['includeAll']){_0x2dc1a1[_0x250f('0x41')]=[{'all':!![]}];}return db[_0x250f('0x40')][_0x250f('0x42')](_0x2dc1a1);})[_0x250f('0x23')](function(_0x4d1e67){_0x5446ef[_0x250f('0x43')]=_0x4d1e67;return _0x5446ef;})[_0x250f('0x23')](respondWithFilteredResult(_0x52038c,_0x2dc1a1))[_0x250f('0x44')](handleError(_0x52038c,null));};exports[_0x250f('0x45')]=function(_0x34fdc8,_0x4360b8){var _0x9e5794={'raw':!![],'where':{'id':_0x34fdc8[_0x250f('0x46')]['id']}},_0x2712a4={};_0x2712a4[_0x250f('0x2c')]=_[_0x250f('0x2d')](db[_0x250f('0x40')][_0x250f('0x2b')]);_0x2712a4[_0x250f('0x2e')]=_['keys'](_0x34fdc8[_0x250f('0x2e')]);_0x2712a4[_0x250f('0x2f')]=_[_0x250f('0x30')](_0x2712a4['model'],_0x2712a4[_0x250f('0x2e')]);_0x9e5794[_0x250f('0x31')]=_[_0x250f('0x30')](_0x2712a4['model'],qs[_0x250f('0x32')](_0x34fdc8[_0x250f('0x2e')][_0x250f('0x32')]));_0x9e5794[_0x250f('0x31')]=_0x9e5794[_0x250f('0x31')][_0x250f('0x33')]?_0x9e5794['attributes']:_0x2712a4[_0x250f('0x2c')];if(_0x34fdc8[_0x250f('0x2e')][_0x250f('0x47')]){_0x9e5794[_0x250f('0x41')]=[{'all':!![]}];}_0x9e5794=_['merge']({},_0x9e5794,_0x34fdc8[_0x250f('0x48')]);return db[_0x250f('0x40')]['find'](_0x9e5794)[_0x250f('0x23')](handleEntityNotFound(_0x4360b8,null))['then'](respondWithResult(_0x4360b8,null))[_0x250f('0x44')](handleError(_0x4360b8,null));};exports[_0x250f('0x49')]=function(_0x5783c5,_0x28fed3){return db[_0x250f('0x40')][_0x250f('0x49')](_0x5783c5[_0x250f('0x4a')],{})[_0x250f('0x23')](function(_0x274d0d){var _0x45b8fd=_0x5783c5['user'][_0x250f('0x24')]({'plain':!![]});if(!_0x45b8fd)throw new Error(_0x250f('0x4b'));if(_0x45b8fd[_0x250f('0x4c')]===_0x250f('0x4d')){var _0xd037d6=_0x274d0d[_0x250f('0x24')]({'plain':!![]});var _0x311c75=_0x250f('0x4e');return db[_0x250f('0x4f')][_0x250f('0x50')]({'where':{'name':_0x311c75,'userProfileId':_0x45b8fd['userProfileId']},'raw':!![]})[_0x250f('0x23')](function(_0x32a1ba){if(_0x32a1ba&&_0x32a1ba[_0x250f('0x51')]===0x0){return db['UserProfileResource']['create']({'name':_0xd037d6[_0x250f('0x28')],'resourceId':_0xd037d6['id'],'type':_0x32a1ba[_0x250f('0x28')],'sectionId':_0x32a1ba['id']},{})['then'](function(){return _0x274d0d;});}else{return _0x274d0d;}})['catch'](function(_0x5dbf7e){logger['error'](_0x250f('0x52'),_0x5dbf7e);throw _0x5dbf7e;});}return _0x274d0d;})[_0x250f('0x23')](respondWithResult(_0x28fed3,0xc9))['catch'](handleError(_0x28fed3,null));};exports[_0x250f('0x22')]=function(_0x2a5f8a,_0x1ce6df){if(_0x2a5f8a[_0x250f('0x4a')]['id']){delete _0x2a5f8a[_0x250f('0x4a')]['id'];}return db[_0x250f('0x40')][_0x250f('0x50')]({'where':{'id':_0x2a5f8a[_0x250f('0x46')]['id']}})['then'](handleEntityNotFound(_0x1ce6df,null))[_0x250f('0x23')](saveUpdates(_0x2a5f8a[_0x250f('0x4a')],null))['then'](respondWithResult(_0x1ce6df,null))[_0x250f('0x44')](handleError(_0x1ce6df,null));};exports[_0x250f('0x26')]=function(_0x5d5665,_0x121236){return db[_0x250f('0x40')][_0x250f('0x50')]({'where':{'id':_0x5d5665[_0x250f('0x46')]['id']}})[_0x250f('0x23')](handleEntityNotFound(_0x121236,null))[_0x250f('0x23')](removeEntity(_0x121236,null))[_0x250f('0x44')](handleError(_0x121236,null));};
\ No newline at end of file
index a0320ca..a8a7b17 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x23a9=['SmsAccountId','OpenchannelAccountId','lodash','util','../../config/logger','api','moment','bluebird','request-promise','rimraf','exports','define','name_voice','name','name_chat','ChatWebsiteId','name_mail','MailAccountId','name_sms'];(function(_0x2a1d90,_0x1362b9){var _0x161d04=function(_0x408433){while(--_0x408433){_0x2a1d90['push'](_0x2a1d90['shift']());}};_0x161d04(++_0x1362b9);}(_0x23a9,0x158));var _0x923a=function(_0x86c31f,_0x1f2a49){_0x86c31f=_0x86c31f-0x0;var _0x220ade=_0x23a9[_0x86c31f];return _0x220ade;};'use strict';var _=require(_0x923a('0x0'));var util=require(_0x923a('0x1'));var logger=require(_0x923a('0x2'))(_0x923a('0x3'));var moment=require(_0x923a('0x4'));var BPromise=require(_0x923a('0x5'));var rp=require(_0x923a('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0x923a('0x7'));var config=require('../../config/environment');var attributes=require('./disposition.attributes');module[_0x923a('0x8')]=function(_0x24ad42,_0x5d148a){return _0x24ad42[_0x923a('0x9')]('Disposition',attributes,{'tableName':'tools_dispositions','paranoid':![],'indexes':[{'unique':!![],'name':_0x923a('0xa'),'fields':[_0x923a('0xb'),'ListId']},{'unique':!![],'name':_0x923a('0xc'),'fields':[_0x923a('0xb'),_0x923a('0xd')]},{'unique':!![],'name':_0x923a('0xe'),'fields':[_0x923a('0xb'),_0x923a('0xf')]},{'unique':!![],'name':_0x923a('0x10'),'fields':[_0x923a('0xb'),_0x923a('0x11')]},{'unique':!![],'name':'name_fax','fields':[_0x923a('0xb'),'FaxAccountId']},{'unique':!![],'name':'name_openchannel','fields':['name',_0x923a('0x12')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xa5fe=['bluebird','path','rimraf','../../config/environment','./disposition.attributes','exports','define','Disposition','name_voice','name','ListId','name_chat','ChatWebsiteId','name_mail','MailAccountId','SmsAccountId','FaxAccountId','name_openchannel','util'];(function(_0x47a954,_0x4738d2){var _0x3da926=function(_0x2fa36b){while(--_0x2fa36b){_0x47a954['push'](_0x47a954['shift']());}};_0x3da926(++_0x4738d2);}(_0xa5fe,0x84));var _0xea5f=function(_0x40911a,_0x55ec99){_0x40911a=_0x40911a-0x0;var _0x27e8e3=_0xa5fe[_0x40911a];return _0x27e8e3;};'use strict';var _=require('lodash');var util=require(_0xea5f('0x0'));var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0xea5f('0x1'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xea5f('0x2'));var rimraf=require(_0xea5f('0x3'));var config=require(_0xea5f('0x4'));var attributes=require(_0xea5f('0x5'));module[_0xea5f('0x6')]=function(_0x4061cc,_0x39ac5f){return _0x4061cc[_0xea5f('0x7')](_0xea5f('0x8'),attributes,{'tableName':'tools_dispositions','paranoid':![],'indexes':[{'unique':!![],'name':_0xea5f('0x9'),'fields':[_0xea5f('0xa'),_0xea5f('0xb')]},{'unique':!![],'name':_0xea5f('0xc'),'fields':[_0xea5f('0xa'),_0xea5f('0xd')]},{'unique':!![],'name':_0xea5f('0xe'),'fields':[_0xea5f('0xa'),_0xea5f('0xf')]},{'unique':!![],'name':'name_sms','fields':[_0xea5f('0xa'),_0xea5f('0x10')]},{'unique':!![],'name':'name_fax','fields':[_0xea5f('0xa'),_0xea5f('0x11')]},{'unique':!![],'name':_0xea5f('0x12'),'fields':[_0xea5f('0xa'),'OpenchannelAccountId']}],'timestamps':!![]});};
\ No newline at end of file
index 458023b..2a66ea3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9fd4=['http','request','then','info','Disposition,\x20%s,\x20%s','request\x20sent','debug','Disposition,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client'];(function(_0x50960d,_0xeb603f){var _0x489257=function(_0x52f44a){while(--_0x52f44a){_0x50960d['push'](_0x50960d['shift']());}};_0x489257(++_0xeb603f);}(_0x9fd4,0x16c));var _0x49fd=function(_0x4e6243,_0x37ec06){_0x4e6243=_0x4e6243-0x0;var _0x211fbc=_0x9fd4[_0x4e6243];return _0x211fbc;};'use strict';var _=require(_0x49fd('0x0'));var util=require(_0x49fd('0x1'));var moment=require(_0x49fd('0x2'));var BPromise=require(_0x49fd('0x3'));var rs=require(_0x49fd('0x4'));var fs=require('fs');var Redis=require(_0x49fd('0x5'));var db=require(_0x49fd('0x6'))['db'];var utils=require(_0x49fd('0x7'));var logger=require(_0x49fd('0x8'))('rpc');var config=require('../../config/environment');var jayson=require(_0x49fd('0x9'));var client=jayson[_0x49fd('0xa')][_0x49fd('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x9353cd,_0x48b999,_0x14bb94){return new BPromise(function(_0x461ac1,_0x36f605){return client[_0x49fd('0xc')](_0x9353cd,_0x14bb94)[_0x49fd('0xd')](function(_0x4a1c47){logger[_0x49fd('0xe')](_0x49fd('0xf'),_0x48b999,_0x49fd('0x10'));logger[_0x49fd('0x11')](_0x49fd('0x12'),_0x48b999,_0x49fd('0x10'),JSON[_0x49fd('0x13')](_0x4a1c47));if(_0x4a1c47['error']){if(_0x4a1c47[_0x49fd('0x14')][_0x49fd('0x15')]===0x1f4){logger[_0x49fd('0x14')](_0x49fd('0xf'),_0x48b999,_0x4a1c47[_0x49fd('0x14')][_0x49fd('0x16')]);return _0x36f605(_0x4a1c47[_0x49fd('0x14')][_0x49fd('0x16')]);}logger[_0x49fd('0x14')](_0x49fd('0xf'),_0x48b999,_0x4a1c47[_0x49fd('0x14')][_0x49fd('0x16')]);return _0x461ac1(_0x4a1c47[_0x49fd('0x14')][_0x49fd('0x16')]);}else{logger[_0x49fd('0xe')](_0x49fd('0xf'),_0x48b999,_0x49fd('0x10'));_0x461ac1(_0x4a1c47[_0x49fd('0x17')][_0x49fd('0x16')]);}})[_0x49fd('0x18')](function(_0x14c34f){logger[_0x49fd('0x14')](_0x49fd('0xf'),_0x48b999,_0x14c34f);_0x36f605(_0x14c34f);});});}
\ No newline at end of file
+var _0x8c46=['info','Disposition,\x20%s,\x20%s','Disposition,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','lodash','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request'];(function(_0x348d8d,_0x25a6dd){var _0x2a7d1f=function(_0x32fed7){while(--_0x32fed7){_0x348d8d['push'](_0x348d8d['shift']());}};_0x2a7d1f(++_0x25a6dd);}(_0x8c46,0x171));var _0x68c4=function(_0x1cb581,_0x58507b){_0x1cb581=_0x1cb581-0x0;var _0xbd2a2=_0x8c46[_0x1cb581];return _0xbd2a2;};'use strict';var _=require(_0x68c4('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x68c4('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x68c4('0x2'))['db'];var utils=require(_0x68c4('0x3'));var logger=require(_0x68c4('0x4'))(_0x68c4('0x5'));var config=require(_0x68c4('0x6'));var jayson=require(_0x68c4('0x7'));var client=jayson[_0x68c4('0x8')][_0x68c4('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3da9c3,_0x458a2b,_0x5e57ce){return new BPromise(function(_0x1754d7,_0x1d40a3){return client[_0x68c4('0xa')](_0x3da9c3,_0x5e57ce)['then'](function(_0x356698){logger[_0x68c4('0xb')](_0x68c4('0xc'),_0x458a2b,'request\x20sent');logger['debug'](_0x68c4('0xd'),_0x458a2b,_0x68c4('0xe'),JSON['stringify'](_0x356698));if(_0x356698['error']){if(_0x356698[_0x68c4('0xf')][_0x68c4('0x10')]===0x1f4){logger[_0x68c4('0xf')]('Disposition,\x20%s,\x20%s',_0x458a2b,_0x356698[_0x68c4('0xf')][_0x68c4('0x11')]);return _0x1d40a3(_0x356698[_0x68c4('0xf')]['message']);}logger[_0x68c4('0xf')](_0x68c4('0xc'),_0x458a2b,_0x356698[_0x68c4('0xf')]['message']);return _0x1754d7(_0x356698[_0x68c4('0xf')][_0x68c4('0x11')]);}else{logger['info'](_0x68c4('0xc'),_0x458a2b,'request\x20sent');_0x1754d7(_0x356698[_0x68c4('0x12')]['message']);}})['catch'](function(_0xc2ea2f){logger[_0x68c4('0xf')]('Disposition,\x20%s,\x20%s',_0x458a2b,_0xc2ea2f);_0x1d40a3(_0xc2ea2f);});});}
\ No newline at end of file
index 465a318..0acef50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ee8=['delete','destroy','exports','multer','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./disposition.controller','get','isAuthenticated','/:id','show','post','update'];(function(_0x233db5,_0x5df26d){var _0x28d009=function(_0x580e95){while(--_0x580e95){_0x233db5['push'](_0x233db5['shift']());}};_0x28d009(++_0x5df26d);}(_0x2ee8,0x124));var _0x82ee=function(_0x29879a,_0x562a6f){_0x29879a=_0x29879a-0x0;var _0x2eea07=_0x2ee8[_0x29879a];return _0x2eea07;};'use strict';var multer=require(_0x82ee('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x82ee('0x1'));var express=require(_0x82ee('0x2'));var router=express[_0x82ee('0x3')]();var auth=require(_0x82ee('0x4'));var interaction=require(_0x82ee('0x5'));var config=require(_0x82ee('0x6'));var controller=require(_0x82ee('0x7'));router[_0x82ee('0x8')]('/',auth[_0x82ee('0x9')](),controller['index']);router['get'](_0x82ee('0xa'),auth[_0x82ee('0x9')](),controller[_0x82ee('0xb')]);router[_0x82ee('0xc')]('/',auth[_0x82ee('0x9')](),controller['create']);router['put'](_0x82ee('0xa'),auth[_0x82ee('0x9')](),controller[_0x82ee('0xd')]);router[_0x82ee('0xe')](_0x82ee('0xa'),auth[_0x82ee('0x9')](),controller[_0x82ee('0xf')]);module[_0x82ee('0x10')]=router;
\ No newline at end of file
+var _0x769b=['put','/:id','delete','destroy','exports','multer','util','connect-timeout','express','../../components/auth/service','../../components/interaction/service','./disposition.controller','get','isAuthenticated','show','post','create'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0x769b,0x16a));var _0xb769=function(_0x60c140,_0x368d88){_0x60c140=_0x60c140-0x0;var _0x47a797=_0x769b[_0x60c140];return _0x47a797;};'use strict';var multer=require(_0xb769('0x0'));var util=require(_0xb769('0x1'));var path=require('path');var timeout=require(_0xb769('0x2'));var express=require(_0xb769('0x3'));var router=express['Router']();var auth=require(_0xb769('0x4'));var interaction=require(_0xb769('0x5'));var config=require('../../config/environment');var controller=require(_0xb769('0x6'));router[_0xb769('0x7')]('/',auth[_0xb769('0x8')](),controller['index']);router[_0xb769('0x7')]('/:id',auth[_0xb769('0x8')](),controller[_0xb769('0x9')]);router[_0xb769('0xa')]('/',auth[_0xb769('0x8')](),controller[_0xb769('0xb')]);router[_0xb769('0xc')](_0xb769('0xd'),auth[_0xb769('0x8')](),controller['update']);router[_0xb769('0xe')](_0xb769('0xd'),auth['isAuthenticated'](),controller[_0xb769('0xf')]);module[_0xb769('0x10')]=router;
\ No newline at end of file
index 06a5033..0229b40 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd710=['TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','BOOLEAN','INTEGER','setDataValue','mandatoryDispositionPauseId','mandatoryDisposition','sequelize','exports','STRING','ENUM','yes','localstationid','7200','9600','14400','4800','12000','v17,v27,v29','IAX','DADHI','SIP'];(function(_0x6c993a,_0x5ea3ab){var _0x27f547=function(_0x22df20){while(--_0x22df20){_0x6c993a['push'](_0x6c993a['shift']());}};_0x27f547(++_0x5ea3ab);}(_0xd710,0x8b));var _0x0d71=function(_0x24fbd0,_0x3e3a1f){_0x24fbd0=_0x24fbd0-0x0;var _0x332f23=_0xd710[_0x24fbd0];return _0x332f23;};'use strict';var Sequelize=require(_0x0d71('0x0'));module[_0x0d71('0x1')]={'name':{'type':Sequelize[_0x0d71('0x2')],'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x0d71('0x2')]},'ecm':{'type':Sequelize[_0x0d71('0x3')](_0x0d71('0x4'),'no'),'defaultValue':_0x0d71('0x4')},'headerinfo':{'type':Sequelize[_0x0d71('0x2')],'defaultValue':'xCALLY\x20Motion\x20Fax'},'localstationid':{'type':Sequelize[_0x0d71('0x2')],'unique':_0x0d71('0x5')},'minrate':{'type':Sequelize[_0x0d71('0x3')]('2400','4800',_0x0d71('0x6'),_0x0d71('0x7'),'12000',_0x0d71('0x8')),'defaultValue':_0x0d71('0x9')},'maxrate':{'type':Sequelize[_0x0d71('0x3')]('2400',_0x0d71('0x9'),'7200',_0x0d71('0x7'),_0x0d71('0xa'),'14400'),'defaultValue':_0x0d71('0x8')},'modem':{'type':Sequelize['STRING'],'defaultValue':_0x0d71('0xb')},'gateway':{'type':Sequelize[_0x0d71('0x2')],'defaultValue':'no','validate':{'is':/^(?:yes|no|[0-9]+)$/}},'faxdetect':{'type':Sequelize['STRING'],'defaultValue':'no','validate':{'is':/^(?:yes|no|t38|cng|[0-9]+)$/}},'t38timeout':{'type':Sequelize['INTEGER'],'defaultValue':0x1388,'validate':{'min':0x3e8}},'tech':{'type':Sequelize['ENUM']('SIP',_0x0d71('0xc'),_0x0d71('0xd'),'KHOMP'),'defaultValue':_0x0d71('0xe')},'key':{'type':Sequelize['STRING'],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0x0d71('0xf')],'defaultValue':function(){return _0x0d71('0x10');}},'notificationSound':{'type':Sequelize[_0x0d71('0x11')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x0d71('0x11')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x0d71('0x12')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0x0d71('0x11')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x0d71('0x12')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x0d71('0x11')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x0d71('0x12')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0x0d71('0x12')],'allowNull':!![],'defaultValue':null,'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize[_0x0d71('0x11')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x373123){if(!_0x373123)this[_0x0d71('0x13')](_0x0d71('0x14'),null);this['setDataValue'](_0x0d71('0x15'),_0x373123);}}};
\ No newline at end of file
+var _0x756c=['IAX','DADHI','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','BOOLEAN','setDataValue','mandatoryDisposition','sequelize','exports','STRING','ENUM','yes','xCALLY\x20Motion\x20Fax','localstationid','2400','4800','9600','12000','14400','7200','v17,v27,v29','INTEGER','SIP'];(function(_0x139e21,_0x4b933c){var _0xe653f0=function(_0x34eaed){while(--_0x34eaed){_0x139e21['push'](_0x139e21['shift']());}};_0xe653f0(++_0x4b933c);}(_0x756c,0x1d3));var _0xc756=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x756c[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xc756('0x0'));module[_0xc756('0x1')]={'name':{'type':Sequelize[_0xc756('0x2')],'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize['STRING']},'ecm':{'type':Sequelize[_0xc756('0x3')](_0xc756('0x4'),'no'),'defaultValue':_0xc756('0x4')},'headerinfo':{'type':Sequelize[_0xc756('0x2')],'defaultValue':_0xc756('0x5')},'localstationid':{'type':Sequelize[_0xc756('0x2')],'unique':_0xc756('0x6')},'minrate':{'type':Sequelize[_0xc756('0x3')](_0xc756('0x7'),_0xc756('0x8'),'7200',_0xc756('0x9'),_0xc756('0xa'),_0xc756('0xb')),'defaultValue':'4800'},'maxrate':{'type':Sequelize[_0xc756('0x3')](_0xc756('0x7'),_0xc756('0x8'),_0xc756('0xc'),'9600',_0xc756('0xa'),_0xc756('0xb')),'defaultValue':'14400'},'modem':{'type':Sequelize[_0xc756('0x2')],'defaultValue':_0xc756('0xd')},'gateway':{'type':Sequelize[_0xc756('0x2')],'defaultValue':'no','validate':{'is':/^(?:yes|no|[0-9]+)$/}},'faxdetect':{'type':Sequelize['STRING'],'defaultValue':'no','validate':{'is':/^(?:yes|no|t38|cng|[0-9]+)$/}},'t38timeout':{'type':Sequelize[_0xc756('0xe')],'defaultValue':0x1388,'validate':{'min':0x3e8}},'tech':{'type':Sequelize['ENUM'](_0xc756('0xf'),_0xc756('0x10'),_0xc756('0x11'),'KHOMP'),'defaultValue':_0xc756('0xf')},'key':{'type':Sequelize[_0xc756('0x2')],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0xc756('0x12')],'defaultValue':function(){return _0xc756('0x13');}},'notificationSound':{'type':Sequelize[_0xc756('0x14')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xc756('0x14')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xc756('0x14')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xc756('0xe')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xc756('0x14')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xc756('0xe')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0xc756('0xe')],'allowNull':!![],'defaultValue':null,'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x35cedb){if(!_0x35cedb)this[_0xc756('0x15')]('mandatoryDispositionPauseId',null);this['setDataValue'](_0xc756('0x16'),_0x35cedb);}}};
\ No newline at end of file
index 7e8e004..7fd6779 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xad5c=['ListId','List\x20not\x20found','Send\x20Fax\x20failed','filename','Messages','Contact\x20not\x20found','spread','out','ContactId','dataValues','SendFaxRpc,\x20%s','addAgents','emit','removeAgents','userFaxAccount:remove','getAgents','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','sox','ejs','lodash','crypto','jsforce','to-csv','papaparse','ioredis','../../components/parsers/qs','../../mysqldb','redis','defaults','localhost','./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~!@#$%^&-_=+[{]}.','then','info','request\x20sent','debug','FaxAccount,\x20%s,\x20%s,\x20%s','error','code','FaxAccount,\x20%s,\x20%s','message','result','catch','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','destroy','get','FaxAccounts','UserProfileResource','name','send','index','Pause','mandatoryDispositionPause','FaxAccount','rawAttributes','keys','query','filters','intersection','attributes','model','hasOwnProperty','order','sort','where','pick','merge','type','key','VIRTUAL','field','filter','options','includeAll','include','rows','show','params','fields','length','find','create','body','user','role','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','addDisposition','FaxAccountId','Disposition','getDispositions','findOne','map','findAll','removeDispositions','ids','CannedAnswer','nolimit','removeAnswers','addInteraction','omit','getInteractions','FaxInteraction','CmContact','Contact','User','Owner','internal','Tag','Tags','color','tag','sequelize','FaxApplication','bulkCreate','getApplications','exten','system','description','Fax\x20Extension','priority','appdata','push','Answer','CDR(type)=inbound-fax','ecm','faxdetect','maxrate','minrate','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','addAccountApplications','transaction','VoiceExtension','tech','createdAt','updatedAt','findById','getMessages','FaxMessage','$gte','split','format','CmList','List','Contacts','DESC','attachments','join','root','basename','CheckAfterSend','isNil','path','from','\x22%s\x22\x20<%s>','fax'];(function(_0xb0f7c3,_0x4eae95){var _0x28ea68=function(_0x4395a7){while(--_0x4395a7){_0xb0f7c3['push'](_0xb0f7c3['shift']());}};_0x28ea68(++_0x4eae95);}(_0xad5c,0x17e));var _0xcad5=function(_0x530197,_0x2cf97){_0x530197=_0x530197-0x0;var _0x4f381a=_0xad5c[_0x530197];return _0x4f381a;};'use strict';var pdf=require(_0xcad5('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xcad5('0x1'));var zipdir=require(_0xcad5('0x2'));var jsonpatch=require(_0xcad5('0x3'));var rp=require(_0xcad5('0x4'));var moment=require(_0xcad5('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xcad5('0x6'));var util=require('util');var path=require('path');var sox=require(_0xcad5('0x7'));var csv=require('to-csv');var ejs=require(_0xcad5('0x8'));var fs=require('fs');var _=require(_0xcad5('0x9'));var squel=require('squel');var crypto=require(_0xcad5('0xa'));var jsforce=require(_0xcad5('0xb'));var deskjs=require('desk.js');var toCsv=require(_0xcad5('0xc'));var querystring=require('querystring');var Papa=require(_0xcad5('0xd'));var Redis=require(_0xcad5('0xe'));var authService=require('../../components/auth/service');var qs=require(_0xcad5('0xf'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xcad5('0x10'))['db'];config[_0xcad5('0x11')]=_[_0xcad5('0x12')](config[_0xcad5('0x11')],{'host':_0xcad5('0x13'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xcad5('0x11')]));require(_0xcad5('0x14'))[_0xcad5('0x15')](socket);var jayson=require(_0xcad5('0x16'));var client=jayson[_0xcad5('0x17')][_0xcad5('0x18')]({'port':0x232c});var client9002=jayson[_0xcad5('0x17')][_0xcad5('0x18')]({'port':0x232a});function checkPasswordPattern(_0x40b844,_0x43272e,_0x1bb4a4){if(_0x1bb4a4){var _0x2b43be=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2b43be[_0xcad5('0x19')](_0x43272e)){return _0x40b844;}else{throw new Error(_0xcad5('0x1a'));}}else{return _0x40b844;}}function respondWithRpcPromise(_0x22fbf4,_0x10c3ed,_0x34bdf2,_0x2a9800){return new BPromise(function(_0x5025ce,_0x47f814){var _0x4688d9=_0x2a9800||client;return _0x4688d9['request'](_0x22fbf4,_0x34bdf2)[_0xcad5('0x1b')](function(_0xa310e1){logger[_0xcad5('0x1c')]('FaxAccount,\x20%s,\x20%s',_0x10c3ed,_0xcad5('0x1d'));logger[_0xcad5('0x1e')](_0xcad5('0x1f'),_0x10c3ed,_0xcad5('0x1d'),JSON['stringify'](_0xa310e1));if(_0xa310e1['error']){if(_0xa310e1[_0xcad5('0x20')][_0xcad5('0x21')]===0x1f4){logger[_0xcad5('0x20')](_0xcad5('0x22'),_0x10c3ed,_0xa310e1[_0xcad5('0x20')][_0xcad5('0x23')]);return _0x47f814(_0xa310e1[_0xcad5('0x20')]['message']);}logger[_0xcad5('0x20')]('FaxAccount,\x20%s,\x20%s',_0x10c3ed,_0xa310e1['error']['message']);return _0x5025ce(_0xa310e1[_0xcad5('0x20')][_0xcad5('0x23')]);}else{logger[_0xcad5('0x1c')](_0xcad5('0x22'),_0x10c3ed,_0xcad5('0x1d'));_0x5025ce(_0xa310e1[_0xcad5('0x24')][_0xcad5('0x23')]);}})[_0xcad5('0x25')](function(_0x243919){logger[_0xcad5('0x20')]('FaxAccount,\x20%s,\x20%s',_0x10c3ed,_0x243919);_0x47f814(_0x243919);});});}function respondWithStatusCode(_0x313e12,_0x555169){_0x555169=_0x555169||0xcc;return function(_0x111de4){if(_0x111de4){return _0x313e12[_0xcad5('0x26')](_0x555169);}return _0x313e12[_0xcad5('0x27')](_0x555169)[_0xcad5('0x28')]();};}function respondWithResult(_0x5748be,_0xb75f04){_0xb75f04=_0xb75f04||0xc8;return function(_0x39c34b){if(_0x39c34b){return _0x5748be['status'](_0xb75f04)[_0xcad5('0x29')](_0x39c34b);}};}function respondWithFilteredResult(_0x42823d,_0x807cc3){return function(_0x53314c){if(_0x53314c){var _0x2f3280=_0x53314c[_0xcad5('0x2a')],_0x560cce=_0x807cc3[_0xcad5('0x2b')],_0x2c92fc=_0x807cc3['offset']+_0x807cc3[_0xcad5('0x2c')],_0xcab228;if(_0x2c92fc>=_0x2f3280){_0x2c92fc=_0x2f3280;_0xcab228=0xc8;}else{_0xcab228=0xce;}_0x42823d[_0xcad5('0x27')](_0xcab228);return _0x42823d[_0xcad5('0x2d')]('Content-Range',_0x560cce+'-'+_0x2c92fc+'/'+_0x2f3280)[_0xcad5('0x29')](_0x53314c);}return null;};}function patchUpdates(_0x39436f){return function(_0x1b5e3e){try{jsonpatch[_0xcad5('0x2e')](_0x1b5e3e,_0x39436f,!![]);}catch(_0x373733){return BPromise[_0xcad5('0x2f')](_0x373733);}return _0x1b5e3e[_0xcad5('0x30')]();};}function saveUpdates(_0x4b880b,_0x489fb0){return function(_0x3db413){if(_0x3db413){return _0x3db413[_0xcad5('0x31')](_0x4b880b)[_0xcad5('0x1b')](function(_0x13e4e9){return _0x13e4e9;});}return null;};}function removeEntity(_0x1418a7,_0x53cd71){return function(_0x3089f6){if(_0x3089f6){return _0x3089f6[_0xcad5('0x32')]()[_0xcad5('0x1b')](function(){var _0x50faf7=_0x3089f6[_0xcad5('0x33')]({'plain':!![]});var _0x43d562=_0xcad5('0x34');return db[_0xcad5('0x35')][_0xcad5('0x32')]({'where':{'type':_0x43d562,'resourceId':_0x50faf7['id']}})[_0xcad5('0x1b')](function(){return _0x3089f6;});})[_0xcad5('0x1b')](function(){_0x1418a7[_0xcad5('0x27')](0xcc)[_0xcad5('0x28')]();});}};}function handleEntityNotFound(_0x247408,_0x40ca93){return function(_0xef3642){if(!_0xef3642){_0x247408[_0xcad5('0x26')](0x194);}return _0xef3642;};}function handleError(_0xf65389,_0x84d4c9){_0x84d4c9=_0x84d4c9||0x1f4;return function(_0x5f322b){logger[_0xcad5('0x20')](_0x5f322b['stack']);if(_0x5f322b[_0xcad5('0x36')]){delete _0x5f322b['name'];}_0xf65389[_0xcad5('0x27')](_0x84d4c9)[_0xcad5('0x37')](_0x5f322b);};}exports[_0xcad5('0x38')]=function(_0x16f03e,_0x2c6e37){var _0x31a7c3={'include':[{'model':db[_0xcad5('0x39')],'as':_0xcad5('0x3a')}]},_0x481494={},_0x412349={'count':0x0,'rows':[]};var _0x90cdbe=db[_0xcad5('0x3b')][_0xcad5('0x3c')];_0x481494['model']=_[_0xcad5('0x3d')](_0x90cdbe);_0x481494[_0xcad5('0x3e')]=_[_0xcad5('0x3d')](_0x16f03e[_0xcad5('0x3e')]);_0x481494[_0xcad5('0x3f')]=_[_0xcad5('0x40')](_0x481494['model'],_0x481494[_0xcad5('0x3e')]);_0x31a7c3[_0xcad5('0x41')]=_[_0xcad5('0x40')](_0x481494[_0xcad5('0x42')],qs['fields'](_0x16f03e[_0xcad5('0x3e')]['fields']));_0x31a7c3[_0xcad5('0x41')]=_0x31a7c3[_0xcad5('0x41')]['length']?_0x31a7c3['attributes']:_0x481494['model'];if(!_0x16f03e[_0xcad5('0x3e')][_0xcad5('0x43')]('nolimit')){_0x31a7c3[_0xcad5('0x2c')]=qs[_0xcad5('0x2c')](_0x16f03e[_0xcad5('0x3e')][_0xcad5('0x2c')]);_0x31a7c3[_0xcad5('0x2b')]=qs[_0xcad5('0x2b')](_0x16f03e['query']['offset']);}_0x31a7c3[_0xcad5('0x44')]=qs[_0xcad5('0x45')](_0x16f03e[_0xcad5('0x3e')][_0xcad5('0x45')]);_0x31a7c3[_0xcad5('0x46')]=qs[_0xcad5('0x3f')](_[_0xcad5('0x47')](_0x16f03e[_0xcad5('0x3e')],_0x481494['filters']));if(_0x16f03e['query']['filter']){_0x31a7c3[_0xcad5('0x46')]=_[_0xcad5('0x48')](_0x31a7c3[_0xcad5('0x46')],{'$or':_['map'](_0x90cdbe,function(_0x4ce8c5){if(_0x4ce8c5[_0xcad5('0x49')][_0xcad5('0x4a')]!==_0xcad5('0x4b')){var _0x465b01={};_0x465b01[_0x4ce8c5[_0xcad5('0x4c')]]={'$like':'%'+_0x16f03e[_0xcad5('0x3e')][_0xcad5('0x4d')]+'%'};return _0x465b01;}})});}_0x31a7c3=_[_0xcad5('0x48')]({},_0x31a7c3,_0x16f03e[_0xcad5('0x4e')]);var _0x1fcc4b={'where':_0x31a7c3[_0xcad5('0x46')]};return db[_0xcad5('0x3b')][_0xcad5('0x2a')](_0x1fcc4b)[_0xcad5('0x1b')](function(_0x13a341){_0x412349[_0xcad5('0x2a')]=_0x13a341;if(_0x16f03e[_0xcad5('0x3e')][_0xcad5('0x4f')]){_0x31a7c3[_0xcad5('0x50')]=[{'all':!![]}];}return db[_0xcad5('0x3b')]['findAll'](_0x31a7c3);})[_0xcad5('0x1b')](function(_0x46a3a5){_0x412349[_0xcad5('0x51')]=_0x46a3a5;return _0x412349;})[_0xcad5('0x1b')](respondWithFilteredResult(_0x2c6e37,_0x31a7c3))[_0xcad5('0x25')](handleError(_0x2c6e37,null));};exports[_0xcad5('0x52')]=function(_0xf2f1d4,_0x17d132){var _0x599412={'raw':![],'where':{'id':_0xf2f1d4[_0xcad5('0x53')]['id']},'include':[{'model':db['Pause'],'as':'mandatoryDispositionPause'}]},_0x55112e={};_0x55112e[_0xcad5('0x42')]=_[_0xcad5('0x3d')](db['FaxAccount']['rawAttributes']);_0x55112e['query']=_[_0xcad5('0x3d')](_0xf2f1d4[_0xcad5('0x3e')]);_0x55112e[_0xcad5('0x3f')]=_[_0xcad5('0x40')](_0x55112e[_0xcad5('0x42')],_0x55112e[_0xcad5('0x3e')]);_0x599412['attributes']=_[_0xcad5('0x40')](_0x55112e[_0xcad5('0x42')],qs[_0xcad5('0x54')](_0xf2f1d4['query'][_0xcad5('0x54')]));_0x599412[_0xcad5('0x41')]=_0x599412[_0xcad5('0x41')][_0xcad5('0x55')]?_0x599412[_0xcad5('0x41')]:_0x55112e[_0xcad5('0x42')];if(_0xf2f1d4['query'][_0xcad5('0x4f')]){_0x599412[_0xcad5('0x50')]=[{'all':!![]}];}_0x599412=_[_0xcad5('0x48')]({},_0x599412,_0xf2f1d4[_0xcad5('0x4e')]);return db[_0xcad5('0x3b')][_0xcad5('0x56')](_0x599412)[_0xcad5('0x1b')](handleEntityNotFound(_0x17d132,null))[_0xcad5('0x1b')](respondWithResult(_0x17d132,null))[_0xcad5('0x25')](handleError(_0x17d132,null));};exports[_0xcad5('0x57')]=function(_0x1508fd,_0x218442){return db[_0xcad5('0x3b')][_0xcad5('0x57')](_0x1508fd[_0xcad5('0x58')],{})[_0xcad5('0x1b')](function(_0x533e30){var _0x351578=_0x1508fd[_0xcad5('0x59')][_0xcad5('0x33')]({'plain':!![]});if(!_0x351578)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x351578[_0xcad5('0x5a')]===_0xcad5('0x59')){var _0x5e5838=_0x533e30[_0xcad5('0x33')]({'plain':!![]});var _0x48071a='FaxAccounts';return db['UserProfileSection']['find']({'where':{'name':_0x48071a,'userProfileId':_0x351578[_0xcad5('0x5b')]},'raw':!![]})[_0xcad5('0x1b')](function(_0x21802b){if(_0x21802b&&_0x21802b[_0xcad5('0x5c')]===0x0){return db['UserProfileResource'][_0xcad5('0x57')]({'name':_0x5e5838[_0xcad5('0x36')],'resourceId':_0x5e5838['id'],'type':_0x21802b['name'],'sectionId':_0x21802b['id']},{})[_0xcad5('0x1b')](function(){return _0x533e30;});}else{return _0x533e30;}})[_0xcad5('0x25')](function(_0xc3dbd3){logger[_0xcad5('0x20')](_0xcad5('0x5d'),_0xc3dbd3);throw _0xc3dbd3;});}return _0x533e30;})[_0xcad5('0x1b')](respondWithResult(_0x218442,0xc9))[_0xcad5('0x25')](handleError(_0x218442,null));};exports['update']=function(_0x7bae19,_0x31afe5){if(_0x7bae19[_0xcad5('0x58')]['id']){delete _0x7bae19[_0xcad5('0x58')]['id'];}return db[_0xcad5('0x3b')][_0xcad5('0x56')]({'where':{'id':_0x7bae19[_0xcad5('0x53')]['id']},'include':[{'model':db[_0xcad5('0x39')],'as':_0xcad5('0x3a')}]})[_0xcad5('0x1b')](handleEntityNotFound(_0x31afe5,null))[_0xcad5('0x1b')](saveUpdates(_0x7bae19['body'],null))[_0xcad5('0x1b')](respondWithResult(_0x31afe5,null))[_0xcad5('0x25')](handleError(_0x31afe5,null));};exports['destroy']=function(_0x3091d8,_0x40ae16){return db[_0xcad5('0x3b')][_0xcad5('0x56')]({'where':{'id':_0x3091d8[_0xcad5('0x53')]['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x40ae16,null))['then'](removeEntity(_0x40ae16,null))[_0xcad5('0x25')](handleError(_0x40ae16,null));};exports[_0xcad5('0x5e')]=function(_0x4d865b,_0x2b75be){return db[_0xcad5('0x3b')][_0xcad5('0x5e')]()[_0xcad5('0x1b')](respondWithResult(_0x2b75be,null))[_0xcad5('0x25')](handleError(_0x2b75be,null));};exports[_0xcad5('0x5f')]=function(_0x28d248,_0x477fac,_0x4c5153){if(_0x28d248[_0xcad5('0x58')]['id']){delete _0x28d248['body']['id'];}return db[_0xcad5('0x3b')][_0xcad5('0x56')]({'where':{'id':_0x28d248[_0xcad5('0x53')]['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x477fac,null))[_0xcad5('0x1b')](function(_0x420614){if(_0x420614){_0x28d248[_0xcad5('0x58')][_0xcad5('0x60')]=_0x420614['id'];return db[_0xcad5('0x61')][_0xcad5('0x57')](_0x28d248[_0xcad5('0x58')]);}})[_0xcad5('0x1b')](respondWithResult(_0x477fac,null))[_0xcad5('0x25')](handleError(_0x477fac,null));};exports[_0xcad5('0x62')]=function(_0x2635bb,_0x2cea4a,_0x3f4ce2){var _0x1d9baf={'raw':![],'where':{}};var _0x469528={};var _0x2daddd={'count':0x0,'rows':[]};return db[_0xcad5('0x3b')][_0xcad5('0x63')]({'where':{'id':_0x2635bb[_0xcad5('0x53')]['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x2cea4a,null))['then'](function(_0x5ae289){if(_0x5ae289){_0x469528[_0xcad5('0x42')]=_[_0xcad5('0x3d')](db[_0xcad5('0x61')][_0xcad5('0x3c')]);_0x469528[_0xcad5('0x3e')]=_['keys'](_0x2635bb[_0xcad5('0x3e')]);_0x469528[_0xcad5('0x3f')]=_[_0xcad5('0x40')](_0x469528['model'],_0x469528[_0xcad5('0x3e')]);_0x1d9baf['attributes']=_[_0xcad5('0x40')](_0x469528['model'],qs[_0xcad5('0x54')](_0x2635bb[_0xcad5('0x3e')][_0xcad5('0x54')]));_0x1d9baf[_0xcad5('0x41')]=_0x1d9baf[_0xcad5('0x41')][_0xcad5('0x55')]?_0x1d9baf[_0xcad5('0x41')]:_0x469528[_0xcad5('0x42')];if(!_0x2635bb[_0xcad5('0x3e')]['hasOwnProperty']('nolimit')){_0x1d9baf[_0xcad5('0x2c')]=qs[_0xcad5('0x2c')](_0x2635bb[_0xcad5('0x3e')][_0xcad5('0x2c')]);_0x1d9baf[_0xcad5('0x2b')]=qs[_0xcad5('0x2b')](_0x2635bb['query'][_0xcad5('0x2b')]);}_0x1d9baf['order']=qs[_0xcad5('0x45')](_0x2635bb[_0xcad5('0x3e')][_0xcad5('0x45')]);_0x1d9baf[_0xcad5('0x46')]=qs['filters'](_[_0xcad5('0x47')](_0x2635bb[_0xcad5('0x3e')],_0x469528[_0xcad5('0x3f')]));_0x1d9baf[_0xcad5('0x46')]['FaxAccountId']=_0x5ae289['id'];if(_0x2635bb[_0xcad5('0x3e')][_0xcad5('0x4d')]){_0x1d9baf['where']=_['merge'](_0x1d9baf[_0xcad5('0x46')],{'$or':_[_0xcad5('0x64')](_0x1d9baf[_0xcad5('0x41')],function(_0x518d65){var _0xca8bb8={};_0xca8bb8[_0x518d65]={'$like':'%'+_0x2635bb[_0xcad5('0x3e')][_0xcad5('0x4d')]+'%'};return _0xca8bb8;})});}_0x1d9baf=_[_0xcad5('0x48')]({},_0x1d9baf,_0x2635bb[_0xcad5('0x4e')]);return db[_0xcad5('0x61')][_0xcad5('0x2a')]({'where':_0x1d9baf[_0xcad5('0x46')]})[_0xcad5('0x1b')](function(_0xeea2e1){_0x2daddd[_0xcad5('0x2a')]=_0xeea2e1;if(_0x2635bb[_0xcad5('0x3e')][_0xcad5('0x4f')]){_0x1d9baf[_0xcad5('0x50')]=[{'all':!![]}];}return db[_0xcad5('0x61')][_0xcad5('0x65')](_0x1d9baf);})[_0xcad5('0x1b')](function(_0x59aa30){_0x2daddd['rows']=_0x59aa30;return _0x2daddd;});}})[_0xcad5('0x1b')](respondWithFilteredResult(_0x2cea4a,_0x1d9baf))[_0xcad5('0x25')](handleError(_0x2cea4a,null));};exports[_0xcad5('0x66')]=function(_0x54f541,_0x58ba7d,_0x45d320){return db[_0xcad5('0x3b')][_0xcad5('0x56')]({'where':{'id':_0x54f541['params']['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x58ba7d,null))[_0xcad5('0x1b')](function(_0xcbc5cc){if(_0xcbc5cc){return _0xcbc5cc[_0xcad5('0x66')](_0x54f541[_0xcad5('0x3e')][_0xcad5('0x67')]);}})[_0xcad5('0x1b')](respondWithStatusCode(_0x58ba7d,null))[_0xcad5('0x25')](handleError(_0x58ba7d,null));};exports['addAnswer']=function(_0x4e9e69,_0x24234e,_0x1617a1){if(_0x4e9e69[_0xcad5('0x58')]['id']){delete _0x4e9e69['body']['id'];}return db[_0xcad5('0x3b')][_0xcad5('0x56')]({'where':{'id':_0x4e9e69[_0xcad5('0x53')]['id']}})['then'](handleEntityNotFound(_0x24234e,null))['then'](function(_0x49278b){if(_0x49278b){_0x4e9e69[_0xcad5('0x58')][_0xcad5('0x60')]=_0x49278b['id'];return db[_0xcad5('0x68')][_0xcad5('0x57')](_0x4e9e69[_0xcad5('0x58')]);}})[_0xcad5('0x1b')](respondWithResult(_0x24234e,null))[_0xcad5('0x25')](handleError(_0x24234e,null));};exports['getAnswers']=function(_0x3625d8,_0x2b00dc,_0x161f4d){var _0x5a1afa={'raw':![],'where':{}};var _0x2fd3fb={};var _0x5a05dd={'count':0x0,'rows':[]};return db['FaxAccount'][_0xcad5('0x63')]({'where':{'id':_0x3625d8[_0xcad5('0x53')]['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x2b00dc,null))[_0xcad5('0x1b')](function(_0x6ec199){if(_0x6ec199){_0x2fd3fb[_0xcad5('0x42')]=_[_0xcad5('0x3d')](db[_0xcad5('0x68')]['rawAttributes']);_0x2fd3fb['query']=_['keys'](_0x3625d8[_0xcad5('0x3e')]);_0x2fd3fb[_0xcad5('0x3f')]=_[_0xcad5('0x40')](_0x2fd3fb[_0xcad5('0x42')],_0x2fd3fb['query']);_0x5a1afa['attributes']=_['intersection'](_0x2fd3fb['model'],qs[_0xcad5('0x54')](_0x3625d8[_0xcad5('0x3e')][_0xcad5('0x54')]));_0x5a1afa['attributes']=_0x5a1afa[_0xcad5('0x41')][_0xcad5('0x55')]?_0x5a1afa[_0xcad5('0x41')]:_0x2fd3fb['model'];if(!_0x3625d8['query'][_0xcad5('0x43')](_0xcad5('0x69'))){_0x5a1afa[_0xcad5('0x2c')]=qs[_0xcad5('0x2c')](_0x3625d8[_0xcad5('0x3e')][_0xcad5('0x2c')]);_0x5a1afa[_0xcad5('0x2b')]=qs[_0xcad5('0x2b')](_0x3625d8[_0xcad5('0x3e')]['offset']);}_0x5a1afa[_0xcad5('0x44')]=qs[_0xcad5('0x45')](_0x3625d8[_0xcad5('0x3e')]['sort']);_0x5a1afa[_0xcad5('0x46')]=qs[_0xcad5('0x3f')](_[_0xcad5('0x47')](_0x3625d8[_0xcad5('0x3e')],_0x2fd3fb[_0xcad5('0x3f')]));_0x5a1afa['where'][_0xcad5('0x60')]=_0x6ec199['id'];if(_0x3625d8[_0xcad5('0x3e')][_0xcad5('0x4d')]){_0x5a1afa[_0xcad5('0x46')]=_[_0xcad5('0x48')](_0x5a1afa[_0xcad5('0x46')],{'$or':_[_0xcad5('0x64')](_0x5a1afa[_0xcad5('0x41')],function(_0xa9e7dc){var _0x51b625={};_0x51b625[_0xa9e7dc]={'$like':'%'+_0x3625d8[_0xcad5('0x3e')]['filter']+'%'};return _0x51b625;})});}_0x5a1afa=_[_0xcad5('0x48')]({},_0x5a1afa,_0x3625d8['options']);return db['CannedAnswer'][_0xcad5('0x2a')]({'where':_0x5a1afa[_0xcad5('0x46')]})[_0xcad5('0x1b')](function(_0x4e2745){_0x5a05dd[_0xcad5('0x2a')]=_0x4e2745;if(_0x3625d8['query'][_0xcad5('0x4f')]){_0x5a1afa['include']=[{'all':!![]}];}return db['CannedAnswer'][_0xcad5('0x65')](_0x5a1afa);})[_0xcad5('0x1b')](function(_0xfae7ef){_0x5a05dd[_0xcad5('0x51')]=_0xfae7ef;return _0x5a05dd;});}})['then'](respondWithFilteredResult(_0x2b00dc,_0x5a1afa))[_0xcad5('0x25')](handleError(_0x2b00dc,null));};exports[_0xcad5('0x6a')]=function(_0x3c64ca,_0x25c2f3,_0x5e9c32){return db[_0xcad5('0x3b')]['find']({'where':{'id':_0x3c64ca['params']['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x25c2f3,null))[_0xcad5('0x1b')](function(_0x492e46){if(_0x492e46){return _0x492e46[_0xcad5('0x6a')](_0x3c64ca[_0xcad5('0x3e')][_0xcad5('0x67')]);}})[_0xcad5('0x1b')](respondWithStatusCode(_0x25c2f3,null))[_0xcad5('0x25')](handleError(_0x25c2f3,null));};exports[_0xcad5('0x6b')]=function(_0x3edb8c,_0x4bcd4d,_0x346bec){return db['FaxInteraction'][_0xcad5('0x56')]({'where':{'id':_0x3edb8c[_0xcad5('0x53')]['id']}})['then'](handleEntityNotFound(_0x4bcd4d,null))['then'](function(_0x1faf02){if(_0x1faf02){return _0x1faf02[_0xcad5('0x6b')](_0x3edb8c['body'][_0xcad5('0x67')],_[_0xcad5('0x6c')](_0x3edb8c[_0xcad5('0x58')],[_0xcad5('0x67'),'id'])||{});}})[_0xcad5('0x1b')](respondWithResult(_0x4bcd4d,null))[_0xcad5('0x25')](handleError(_0x4bcd4d,null));};exports[_0xcad5('0x6d')]=function(_0x29542f,_0x483c63,_0x37fd19){var _0x293870={'raw':![],'where':{}};var _0x114e89={};var _0x316965={'count':0x0,'rows':[]};return db[_0xcad5('0x3b')]['findOne']({'where':{'id':_0x29542f[_0xcad5('0x53')]['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x483c63,null))[_0xcad5('0x1b')](function(_0x37ee0f){if(_0x37ee0f){_0x114e89[_0xcad5('0x42')]=_[_0xcad5('0x3d')](db['FaxInteraction'][_0xcad5('0x3c')]);_0x114e89[_0xcad5('0x3e')]=_['keys'](_0x29542f[_0xcad5('0x3e')]);_0x114e89[_0xcad5('0x3f')]=_['intersection'](_0x114e89[_0xcad5('0x42')],_0x114e89[_0xcad5('0x3e')]);_0x293870[_0xcad5('0x41')]=_[_0xcad5('0x40')](_0x114e89[_0xcad5('0x42')],qs['fields'](_0x29542f['query'][_0xcad5('0x54')]));_0x293870[_0xcad5('0x41')]=_0x293870[_0xcad5('0x41')][_0xcad5('0x55')]?_0x293870[_0xcad5('0x41')]:_0x114e89[_0xcad5('0x42')];if(!_0x29542f[_0xcad5('0x3e')][_0xcad5('0x43')](_0xcad5('0x69'))){_0x293870[_0xcad5('0x2c')]=qs[_0xcad5('0x2c')](_0x29542f[_0xcad5('0x3e')][_0xcad5('0x2c')]);_0x293870[_0xcad5('0x2b')]=qs[_0xcad5('0x2b')](_0x29542f['query']['offset']);}_0x293870['order']=qs[_0xcad5('0x45')](_0x29542f['query'][_0xcad5('0x45')]);_0x293870['where']=qs['filters'](_['pick'](_0x29542f[_0xcad5('0x3e')],_0x114e89[_0xcad5('0x3f')]));_0x293870['where'][_0xcad5('0x60')]=_0x37ee0f['id'];if(_0x29542f['query'][_0xcad5('0x4d')]){_0x293870[_0xcad5('0x46')]=_[_0xcad5('0x48')](_0x293870[_0xcad5('0x46')],{'$or':_[_0xcad5('0x64')](_0x293870['attributes'],function(_0x3679d8){var _0xf5e280={};_0xf5e280[_0x3679d8]={'$like':'%'+_0x29542f[_0xcad5('0x3e')][_0xcad5('0x4d')]+'%'};return _0xf5e280;})});}_0x293870=_[_0xcad5('0x48')]({},_0x293870,_0x29542f['options']);return db[_0xcad5('0x6e')][_0xcad5('0x2a')]({'where':_0x293870[_0xcad5('0x46')]})[_0xcad5('0x1b')](function(_0x2e30c7){_0x316965['count']=_0x2e30c7;if(_0x29542f[_0xcad5('0x3e')][_0xcad5('0x4f')]){_0x293870[_0xcad5('0x50')]=[{'model':db[_0xcad5('0x6f')],'as':_0xcad5('0x70'),'required':![]},{'model':db[_0xcad5('0x71')],'as':_0xcad5('0x72'),'attributes':[_0xcad5('0x36'),'fullname',_0xcad5('0x73')],'required':![]},{'model':db[_0xcad5('0x74')],'as':_0xcad5('0x75'),'attributes':['id',_0xcad5('0x36'),_0xcad5('0x76')],'where':_0x29542f[_0xcad5('0x3e')][_0xcad5('0x77')]?{'id':_0x29542f[_0xcad5('0x3e')]['tag']}:undefined,'required':_0x29542f[_0xcad5('0x3e')][_0xcad5('0x77')]?!![]:![]}];}return db['FaxInteraction']['findAll'](_0x293870);})['then'](function(_0x200ad8){_0x316965[_0xcad5('0x51')]=_0x200ad8;return _0x316965;});}})[_0xcad5('0x1b')](respondWithFilteredResult(_0x483c63,_0x293870))[_0xcad5('0x25')](handleError(_0x483c63,null));};exports['addApplications']=function(_0x39f6b9,_0x5113ad,_0x44f350){return db[_0xcad5('0x3b')][_0xcad5('0x63')]({'where':{'id':_0x39f6b9['params']['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x5113ad,null))[_0xcad5('0x1b')](function(_0x1fcb3d){if(_0x1fcb3d){return db[_0xcad5('0x78')]['transaction'](function(_0x2a7195){return db[_0xcad5('0x79')][_0xcad5('0x32')]({'where':{'FaxAccountId':_0x39f6b9[_0xcad5('0x53')]['id']},'transaction':_0x2a7195})['then'](function(_0x1784ae){var _0x4a0af4=_[_0xcad5('0x64')](_0x39f6b9[_0xcad5('0x58')],function(_0x519ebd){_0x519ebd[_0xcad5('0x60')]=_0x39f6b9[_0xcad5('0x53')]['id'];return _0x519ebd;});return db[_0xcad5('0x79')][_0xcad5('0x7a')](_0x4a0af4,{'transaction':_0x2a7195});});})[_0xcad5('0x1b')](function(){return db[_0xcad5('0x79')]['findAndCountAll']({'where':{'FaxAccountId':_0x39f6b9[_0xcad5('0x53')]['id']},'order':'priority'});});}})[_0xcad5('0x1b')](respondWithResult(_0x5113ad,null))[_0xcad5('0x25')](handleError(_0x5113ad,null));};exports[_0xcad5('0x7b')]=function(_0x2fca38,_0x40bf32,_0x486da3){var _0x31bbfc={};var _0x5d7eb={};var _0x3ab99e;var _0x44b01a;return db[_0xcad5('0x3b')]['findOne']({'where':{'id':_0x2fca38[_0xcad5('0x53')]['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x40bf32,null))['then'](function(_0x3c1b26){if(_0x3c1b26){_0x3ab99e=_0x3c1b26;_0x5d7eb[_0xcad5('0x42')]=_[_0xcad5('0x3d')](db[_0xcad5('0x79')][_0xcad5('0x3c')]);_0x5d7eb[_0xcad5('0x3e')]=_[_0xcad5('0x3d')](_0x2fca38[_0xcad5('0x3e')]);_0x5d7eb[_0xcad5('0x3f')]=_['intersection'](_0x5d7eb['model'],_0x5d7eb['query']);_0x31bbfc[_0xcad5('0x41')]=_[_0xcad5('0x40')](_0x5d7eb[_0xcad5('0x42')],qs[_0xcad5('0x54')](_0x2fca38[_0xcad5('0x3e')][_0xcad5('0x54')]));_0x31bbfc[_0xcad5('0x41')]=_0x31bbfc[_0xcad5('0x41')][_0xcad5('0x55')]?_0x31bbfc[_0xcad5('0x41')]:_0x5d7eb['model'];_0x31bbfc['order']=qs['sort'](_0x2fca38[_0xcad5('0x3e')][_0xcad5('0x45')]);_0x31bbfc['where']=qs['filters'](_[_0xcad5('0x47')](_0x2fca38[_0xcad5('0x3e')],_0x5d7eb['filters']));if(_0x2fca38[_0xcad5('0x3e')][_0xcad5('0x4d')]){_0x31bbfc['where']=_['merge'](_0x31bbfc['where'],{'$or':_[_0xcad5('0x64')](_0x31bbfc[_0xcad5('0x41')],function(_0x4aafe4){var _0x151c35={};_0x151c35[_0x4aafe4]={'$like':'%'+_0x2fca38[_0xcad5('0x3e')][_0xcad5('0x4d')]+'%'};return _0x151c35;})});}_0x31bbfc=_[_0xcad5('0x48')]({},_0x31bbfc,_0x2fca38[_0xcad5('0x4e')]);return _0x3ab99e[_0xcad5('0x7b')](_0x31bbfc);}})[_0xcad5('0x1b')](function(_0x513a80){if(_0x513a80){_0x44b01a=_0x513a80[_0xcad5('0x55')];if(!_0x2fca38['query'][_0xcad5('0x43')](_0xcad5('0x69'))){_0x31bbfc[_0xcad5('0x2c')]=qs[_0xcad5('0x2c')](_0x2fca38['query'][_0xcad5('0x2c')]);_0x31bbfc['offset']=qs[_0xcad5('0x2b')](_0x2fca38[_0xcad5('0x3e')][_0xcad5('0x2b')]);}return _0x3ab99e['getApplications'](_0x31bbfc);}})['then'](function(_0x7143ce){if(_0x7143ce){return _0x7143ce?{'count':_0x44b01a,'rows':_0x7143ce}:null;}})[_0xcad5('0x1b')](respondWithResult(_0x40bf32,null))['catch'](handleError(_0x40bf32,null));};function Extension(_0x443ef7,_0x1cc472,_0x3a59d7,_0x5759f3){this['context']='from-voip-provider';this[_0xcad5('0x7c')]=_0x443ef7['localstationid'];this['app']=_0x5759f3;this[_0xcad5('0x49')]=_0xcad5('0x7d');this[_0xcad5('0x7e')]=_0xcad5('0x7f');this[_0xcad5('0x60')]=_0x443ef7['id'];this[_0xcad5('0x80')]=_0x1cc472;this[_0xcad5('0x81')]=_0x3a59d7;}function createExtensionsReciveFax(_0x25e58f){var _0x3cee6c=0x1;var _0x3dd5c0=[];_0x3dd5c0[_0xcad5('0x82')](new Extension(_0x25e58f,_0x3cee6c,'',_0xcad5('0x83')));_0x3cee6c+=0x1;_0x3dd5c0[_0xcad5('0x82')](new Extension(_0x25e58f,_0x3cee6c,_0xcad5('0x84'),'Set'));_0x3cee6c+=0x1;for(var _0x4ae298 in _0x25e58f){if(_0x25e58f[_0xcad5('0x43')](_0x4ae298)&&(_0x4ae298===_0xcad5('0x85')||_0x4ae298==='localstationid'||_0x4ae298==='gateway'||_0x4ae298===_0xcad5('0x86')||_0x4ae298==='headerinfo'||_0x4ae298===_0xcad5('0x87')||_0x4ae298===_0xcad5('0x88')||_0x4ae298==='modem'||_0x4ae298==='t38timeout')){_0x3dd5c0['push'](new Extension(_0x25e58f,_0x3cee6c,'FAXOPT('+_0x4ae298+')='+_0x25e58f[_0x4ae298],_0xcad5('0x89')));_0x3cee6c+=0x1;}}_0x3dd5c0[_0xcad5('0x82')](new Extension(_0x25e58f,_0x3cee6c,'6',_0xcad5('0x8a')));_0x3cee6c+=0x1;_0x3dd5c0[_0xcad5('0x82')](new Extension(_0x25e58f,_0x3cee6c,_0xcad5('0x8b'),_0xcad5('0x8c')));_0x3cee6c=0x0;return _0x3dd5c0;}exports[_0xcad5('0x8d')]=function(_0x2b66a9,_0x1968d6,_0x137251){var _0x4bd6fc;return db[_0xcad5('0x78')][_0xcad5('0x8e')](function(_0x327a92){return db[_0xcad5('0x3b')][_0xcad5('0x57')](_0x2b66a9[_0xcad5('0x58')],{'transaction':_0x327a92})[_0xcad5('0x1b')](function(_0xdd06f9){_0x4bd6fc=_0xdd06f9[_0xcad5('0x33')]({'plain':!![]});return db['VoiceExtension'][_0xcad5('0x7a')](createExtensionsReciveFax(_0x4bd6fc),{'transaction':_0x327a92});});})[_0xcad5('0x1b')](function(){return _0x4bd6fc;})[_0xcad5('0x1b')](respondWithResult(_0x1968d6,null))['catch'](handleError(_0x1968d6,null));};exports['updateAccountApplications']=function(_0x41740f,_0x64aa81,_0x1da881){var _0x4f4d5e;return db[_0xcad5('0x78')]['transaction'](function(_0x4f73d9){return db[_0xcad5('0x3b')][_0xcad5('0x31')](_0x41740f[_0xcad5('0x58')],{'where':{'id':_0x41740f[_0xcad5('0x58')]['id']},'transaction':_0x4f73d9})[_0xcad5('0x1b')](function(_0x39b2fe){return db[_0xcad5('0x8f')][_0xcad5('0x32')]({'where':{'FaxAccountId':_0x41740f['body']['id']},'transaction':_0x4f73d9})[_0xcad5('0x1b')](function(_0x5b9165){return db[_0xcad5('0x8f')][_0xcad5('0x7a')](createExtensionsReciveFax(_[_0xcad5('0x6c')](_0x41740f['body'],[_0xcad5('0x90'),'key',_0xcad5('0x91'),_0xcad5('0x92'),'TrunkId','ListId'])),{'transaction':_0x4f73d9});});});})[_0xcad5('0x1b')](function(){return db['FaxAccount'][_0xcad5('0x93')](_0x41740f[_0xcad5('0x58')]['id']);})[_0xcad5('0x1b')](respondWithResult(_0x64aa81,null))[_0xcad5('0x25')](handleError(_0x64aa81,null));};exports[_0xcad5('0x94')]=function(_0x30feed,_0x355a89,_0x230ef4){var _0x5ba712={'raw':!![],'where':{}};var _0x45b58f={};var _0x38bfd9={'count':0x0,'rows':[]};return db[_0xcad5('0x3b')][_0xcad5('0x63')]({'where':{'id':_0x30feed[_0xcad5('0x53')]['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x355a89,null))[_0xcad5('0x1b')](function(_0x4e99f2){if(_0x4e99f2){_0x45b58f[_0xcad5('0x42')]=_['keys'](db[_0xcad5('0x95')]['rawAttributes']);_0x45b58f[_0xcad5('0x3e')]=_[_0xcad5('0x3d')](_0x30feed['query']);_0x45b58f[_0xcad5('0x3f')]=_[_0xcad5('0x40')](_0x45b58f['model'],_0x45b58f[_0xcad5('0x3e')]);_0x5ba712['attributes']=_['intersection'](_0x45b58f[_0xcad5('0x42')],qs[_0xcad5('0x54')](_0x30feed['query'][_0xcad5('0x54')]));_0x5ba712[_0xcad5('0x41')]=_0x5ba712[_0xcad5('0x41')]['length']?_0x5ba712[_0xcad5('0x41')]:_0x45b58f[_0xcad5('0x42')];if(!_0x30feed[_0xcad5('0x3e')]['hasOwnProperty'](_0xcad5('0x69'))){_0x5ba712['limit']=qs[_0xcad5('0x2c')](_0x30feed[_0xcad5('0x3e')][_0xcad5('0x2c')]);_0x5ba712[_0xcad5('0x2b')]=qs[_0xcad5('0x2b')](_0x30feed['query'][_0xcad5('0x2b')]);}_0x5ba712[_0xcad5('0x44')]=qs['sort'](_0x30feed[_0xcad5('0x3e')][_0xcad5('0x45')]);_0x5ba712[_0xcad5('0x46')]=qs[_0xcad5('0x3f')](_[_0xcad5('0x47')](_0x30feed[_0xcad5('0x3e')],_0x45b58f['filters']));_0x5ba712[_0xcad5('0x46')][_0xcad5('0x60')]=_0x4e99f2['id'];if(_0x30feed['query'][_0xcad5('0x4d')]){_0x5ba712[_0xcad5('0x46')]=_[_0xcad5('0x48')](_0x5ba712[_0xcad5('0x46')],{'$or':_[_0xcad5('0x64')](_0x5ba712[_0xcad5('0x41')],function(_0x49f560){var _0x11dd1f={};_0x11dd1f[_0x49f560]={'$like':'%'+_0x30feed['query']['filter']+'%'};return _0x11dd1f;})});}if(_0x30feed[_0xcad5('0x3e')][_0xcad5('0x96')]){var _0x295fbc=_0x30feed['query'][_0xcad5('0x96')][_0xcad5('0x97')](',');var _0x2a1713={};_0x2a1713[_0x295fbc[0x0]]={'$gte':moment(_0x295fbc[0x1])[_0xcad5('0x98')]('YYYY-MM-DD\x20HH:mm:ss')};_0x5ba712[_0xcad5('0x46')]=_[_0xcad5('0x48')](_0x5ba712['where'],_0x2a1713);}_0x5ba712=_['merge']({},_0x5ba712,_0x30feed[_0xcad5('0x4e')]);return db[_0xcad5('0x95')]['count']({'where':_0x5ba712[_0xcad5('0x46')]})['then'](function(_0x22d072){_0x38bfd9[_0xcad5('0x2a')]=_0x22d072;if(_0x30feed[_0xcad5('0x3e')]['includeAll']){_0x5ba712[_0xcad5('0x50')]=[{'all':!![]}];}return db[_0xcad5('0x95')][_0xcad5('0x65')](_0x5ba712);})[_0xcad5('0x1b')](function(_0x23e915){_0x38bfd9[_0xcad5('0x51')]=_0x23e915;return _0x38bfd9;});}})[_0xcad5('0x1b')](respondWithFilteredResult(_0x355a89,_0x5ba712))[_0xcad5('0x25')](handleError(_0x355a89,null));};exports['send']=function(_0x14d53e,_0x4aa275,_0x373a5a){var _0x48c71c,_0x5cd573={},_0xdbf17d;if(_0x14d53e['body']['to']){_0xdbf17d=_0x14d53e[_0xcad5('0x58')]['to'][0x0];}return db[_0xcad5('0x3b')]['find']({'where':{'id':_0x14d53e[_0xcad5('0x53')]['id']},'include':[{'model':db[_0xcad5('0x99')],'as':_0xcad5('0x9a'),'include':[{'model':db[_0xcad5('0x6f')],'as':_0xcad5('0x9b'),'where':{'fax':_0xdbf17d},'limit':0x1,'order':[[_0xcad5('0x92'),_0xcad5('0x9c')]]}]}]})[_0xcad5('0x1b')](handleEntityNotFound(_0x4aa275,null))[_0xcad5('0x1b')](function(_0x62debb){_0x48c71c=_0x62debb;if(_0x14d53e['body'][_0xcad5('0x9d')]&&_0x14d53e['body'][_0xcad5('0x9d')][_0xcad5('0x55')]){for(var _0x4e4f72=0x0;_0x4e4f72<_0x14d53e[_0xcad5('0x58')][_0xcad5('0x9d')][_0xcad5('0x55')];_0x4e4f72+=0x1){_0x14d53e[_0xcad5('0x58')][_0xcad5('0x9d')][_0x4e4f72]={'filename':_0x14d53e[_0xcad5('0x58')][_0xcad5('0x9d')][_0x4e4f72][_0xcad5('0x36')],'id':_0x14d53e['body'][_0xcad5('0x9d')][_0x4e4f72]['id'],'path':path[_0xcad5('0x9e')](config[_0xcad5('0x9f')],'server/files/attachments',_0x14d53e[_0xcad5('0x58')][_0xcad5('0x9d')][_0x4e4f72][_0xcad5('0xa0')])};}}return respondWithRpcPromise(_0xcad5('0xa1'),'CheckAfterSend',{'FaxAccountId':_[_0xcad5('0xa2')](_0x14d53e[_0xcad5('0x53')]['id'])?undefined:_0x14d53e[_0xcad5('0x53')]['id'],'path':_['isNil'](_0x14d53e['body'][_0xcad5('0x9d')][0x0][_0xcad5('0xa3')])?undefined:_0x14d53e[_0xcad5('0x58')][_0xcad5('0x9d')][0x0][_0xcad5('0xa3')],'fax':_[_0xcad5('0xa2')](_0x14d53e[_0xcad5('0x58')]['to'][0x0])?undefined:_0x14d53e['body']['to'][0x0]},client9002);})[_0xcad5('0x1b')](function(){if(_0x48c71c){if(_['isNil'](_0x14d53e[_0xcad5('0x58')]['from'])){_0x14d53e[_0xcad5('0x58')][_0xcad5('0xa4')]=util[_0xcad5('0x98')](_0xcad5('0xa5'),_0x48c71c[_0xcad5('0x36')],_0x48c71c[_0xcad5('0xa6')]);}if(_0x48c71c[_0xcad5('0x9a')]){if(_0x48c71c[_0xcad5('0x9a')]['Contacts']['length']){return _0x48c71c['List'][_0xcad5('0x9b')][0x0];}else{return db[_0xcad5('0x6f')][_0xcad5('0x57')](_[_0xcad5('0x12')](_0x14d53e[_0xcad5('0x58')],{'firstName':_0x14d53e[_0xcad5('0x58')]['to'][0x0],'phone':_0x14d53e[_0xcad5('0x58')]['to'][0x0],'fax':_0x14d53e['body']['to'][0x0],'ListId':_0x48c71c[_0xcad5('0xa7')]}));}}else{throw new Error(_0xcad5('0xa8'));}}else{throw new Error(_0xcad5('0xa9'));}})[_0xcad5('0x1b')](function(_0x46c918){if(_0x46c918){return db[_0xcad5('0x6e')][_0xcad5('0x56')]({'where':{'ContactId':_0x46c918['id'],'closed':![],'FaxAccountId':_0x48c71c['id']}})[_0xcad5('0x1b')](function(_0x4e723e){if(_0x4e723e){return[_0x4e723e,![]];}return db[_0xcad5('0x6e')][_0xcad5('0x57')]({'UserId':_0x14d53e[_0xcad5('0x59')]['id'],'ContactId':_0x46c918['id'],'FaxAccountId':_0x48c71c['id'],'fax':_0x14d53e[_0xcad5('0x58')]['to'][0x0],'firstMsgDirection':'out','Messages':[_[_0xcad5('0x48')](_0x14d53e[_0xcad5('0x58')],{'read':![],'body':_0x14d53e[_0xcad5('0x58')]['attachments'][0x0][_0xcad5('0xaa')],'FaxAccountId':_0x48c71c['id'],'UserId':_0x14d53e[_0xcad5('0x59')]['id'],'ContactId':_0x46c918['id'],'AttachmentId':_0x14d53e[_0xcad5('0x58')]['attachments'][0x0]['id']})]},{'include':[{'model':db[_0xcad5('0x95')],'as':_0xcad5('0xab')}]})[_0xcad5('0x1b')](function(_0x1432c6){return[_0x1432c6,!![]];});});}else{throw new Error(_0xcad5('0xac'));}})[_0xcad5('0xad')](function(_0x492880,_0x244477){if(_0x244477){return _0x492880;}return db['FaxMessage']['create']({'direction':_0xcad5('0xae'),'read':![],'body':_0x14d53e[_0xcad5('0x58')][_0xcad5('0x9d')][0x0][_0xcad5('0xaa')],'FaxAccountId':_0x48c71c['id'],'FaxInteractionId':_0x492880['id'],'UserId':_0x14d53e[_0xcad5('0x59')]['id'],'ContactId':_0x492880[_0xcad5('0xaf')],'AttachmentId':_0x14d53e[_0xcad5('0x58')][_0xcad5('0x9d')][0x0]['id']})['then'](function(_0x58949d){_0x492880['dataValues'][_0xcad5('0xab')]=[];_0x492880[_0xcad5('0xb0')][_0xcad5('0xab')]['push'](_0x58949d[_0xcad5('0xb0')]);return _0x492880;});})[_0xcad5('0x1b')](function(_0x2c5da7){respondWithRpcPromise('SendFax','SendFax',{'FaxAccountId':_[_0xcad5('0xa2')](_0x14d53e[_0xcad5('0x53')]['id'])?undefined:_0x14d53e[_0xcad5('0x53')]['id'],'path':_[_0xcad5('0xa2')](_0x14d53e[_0xcad5('0x58')][_0xcad5('0x9d')][0x0][_0xcad5('0xa3')])?undefined:_0x14d53e[_0xcad5('0x58')][_0xcad5('0x9d')][0x0][_0xcad5('0xa3')],'fax':_[_0xcad5('0xa2')](_0x14d53e[_0xcad5('0x58')]['to'][0x0])?undefined:_0x14d53e['body']['to'][0x0],'AttachmentId':_0x14d53e[_0xcad5('0x58')][_0xcad5('0x9d')][0x0]['id']},client9002)[_0xcad5('0x1b')](function(_0x48f8cc){logger[_0xcad5('0x1c')](_0xcad5('0xb1'),_0x48f8cc);})['catch'](function(_0x43e16c){logger['info'](_0xcad5('0xb1'),_0x43e16c);});return _0x2c5da7;})['then'](respondWithResult(_0x4aa275,null))[_0xcad5('0x25')](handleError(_0x4aa275,null));};exports[_0xcad5('0xb2')]=function(_0x5a2842,_0x507c7b,_0x3182f4){return db[_0xcad5('0x3b')][_0xcad5('0x56')]({'where':{'id':_0x5a2842[_0xcad5('0x53')]['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x507c7b,null))[_0xcad5('0x1b')](function(_0x403c1d){if(_0x403c1d){return _0x403c1d['addAgents'](_0x5a2842[_0xcad5('0x58')][_0xcad5('0x67')],_[_0xcad5('0x6c')](_0x5a2842[_0xcad5('0x58')],[_0xcad5('0x67'),'id'])||{})[_0xcad5('0xad')](function(_0x13125d){for(var _0x4d0f53=0x0;_0x4d0f53<_0x5a2842['body'][_0xcad5('0x67')]['length'];_0x4d0f53+=0x1){socket[_0xcad5('0xb3')]('userFaxAccount:save',{'UserId':_0x5a2842[_0xcad5('0x58')][_0xcad5('0x67')][_0x4d0f53],'FaxAccountId':_0x5a2842[_0xcad5('0x53')]['id']});}return _0x13125d;});}})[_0xcad5('0x1b')](respondWithResult(_0x507c7b,null))['catch'](handleError(_0x507c7b,null));};exports[_0xcad5('0xb4')]=function(_0x5c3a7e,_0x4e8dde,_0x478bee){return db[_0xcad5('0x3b')][_0xcad5('0x56')]({'where':{'id':_0x5c3a7e[_0xcad5('0x53')]['id']}})[_0xcad5('0x1b')](handleEntityNotFound(_0x4e8dde,null))['then'](function(_0x8b75c0){if(_0x8b75c0){return _0x8b75c0['removeAgents'](_0x5c3a7e['query']['ids'])[_0xcad5('0x1b')](function(){if(_['isArray'](_0x5c3a7e[_0xcad5('0x3e')][_0xcad5('0x67')])){for(var _0x735999=0x0;_0x735999<_0x5c3a7e[_0xcad5('0x3e')][_0xcad5('0x67')]['length'];_0x735999+=0x1){socket[_0xcad5('0xb3')](_0xcad5('0xb5'),{'UserId':Number(_0x5c3a7e[_0xcad5('0x3e')][_0xcad5('0x67')][_0x735999]),'FaxAccountId':Number(_0x5c3a7e[_0xcad5('0x53')]['id'])});}}else{socket[_0xcad5('0xb3')](_0xcad5('0xb5'),{'UserId':Number(_0x5c3a7e[_0xcad5('0x3e')][_0xcad5('0x67')]),'FaxAccountId':Number(_0x5c3a7e[_0xcad5('0x53')]['id'])});}});}})[_0xcad5('0x1b')](respondWithStatusCode(_0x4e8dde,null))[_0xcad5('0x25')](handleError(_0x4e8dde,null));};exports[_0xcad5('0xb6')]=function(_0x5bf633,_0x2c5c81,_0x21c345){var _0x82d29={};var _0x352b44={};var _0x44fd29;var _0x131a41;return db[_0xcad5('0x3b')]['findOne']({'where':{'id':_0x5bf633[_0xcad5('0x53')]['id']}})['then'](handleEntityNotFound(_0x2c5c81,null))['then'](function(_0x6de9b0){if(_0x6de9b0){_0x44fd29=_0x6de9b0;_0x352b44['model']=_[_0xcad5('0x3d')](db[_0xcad5('0x71')]['rawAttributes']);_0x352b44['query']=_[_0xcad5('0x3d')](_0x5bf633[_0xcad5('0x3e')]);_0x352b44[_0xcad5('0x3f')]=_[_0xcad5('0x40')](_0x352b44['model'],_0x352b44[_0xcad5('0x3e')]);_0x82d29['attributes']=_[_0xcad5('0x40')](_0x352b44[_0xcad5('0x42')],qs[_0xcad5('0x54')](_0x5bf633[_0xcad5('0x3e')][_0xcad5('0x54')]));_0x82d29['attributes']=_0x82d29[_0xcad5('0x41')]['length']?_0x82d29[_0xcad5('0x41')]:_0x352b44['model'];_0x82d29[_0xcad5('0x44')]=qs['sort'](_0x5bf633[_0xcad5('0x3e')][_0xcad5('0x45')]);_0x82d29[_0xcad5('0x46')]=qs['filters'](_[_0xcad5('0x47')](_0x5bf633[_0xcad5('0x3e')],_0x352b44[_0xcad5('0x3f')]));if(_0x5bf633[_0xcad5('0x3e')][_0xcad5('0x4d')]){_0x82d29[_0xcad5('0x46')]=_['merge'](_0x82d29['where'],{'$or':_[_0xcad5('0x64')](_0x82d29[_0xcad5('0x41')],function(_0xbec175){var _0x2865b={};_0x2865b[_0xbec175]={'$like':'%'+_0x5bf633[_0xcad5('0x3e')][_0xcad5('0x4d')]+'%'};return _0x2865b;})});}_0x82d29=_[_0xcad5('0x48')]({},_0x82d29,_0x5bf633[_0xcad5('0x4e')]);return _0x44fd29['getAgents'](_0x82d29);}})['then'](function(_0x57609e){if(_0x57609e){_0x131a41=_0x57609e[_0xcad5('0x55')];if(!_0x5bf633['query'][_0xcad5('0x43')](_0xcad5('0x69'))){_0x82d29[_0xcad5('0x2c')]=qs['limit'](_0x5bf633[_0xcad5('0x3e')][_0xcad5('0x2c')]);_0x82d29['offset']=qs[_0xcad5('0x2b')](_0x5bf633[_0xcad5('0x3e')][_0xcad5('0x2b')]);}return _0x44fd29['getAgents'](_0x82d29);}})['then'](function(_0x3e69fd){if(_0x3e69fd){return _0x3e69fd?{'count':_0x131a41,'rows':_0x3e69fd}:null;}})['then'](respondWithResult(_0x2c5c81,null))[_0xcad5('0x25')](handleError(_0x2c5c81,null));};
\ No newline at end of file
+var _0xe92e=['fullname','internal','Tag','Tags','color','tag','addApplications','sequelize','transaction','FaxApplication','bulkCreate','findAndCountAll','getApplications','context','from-voip-provider','exten','app','system','Fax\x20Extension','priority','appdata','push','CDR(type)=inbound-fax','Set','ecm','gateway','headerinfo','minrate','modem','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','tech','createdAt','updatedAt','ListId','findById','getMessages','$gte','split','YYYY-MM-DD\x20HH:mm:ss','FaxMessage','findAll','CmList','List','CmContact','Contacts','attachments','join','root','server/files/attachments','CheckAfterSend','isNil','path','from','fax','List\x20not\x20found','out','filename','Messages','Contact\x20not\x20found','spread','ContactId','dataValues','SendFax','info','SendFaxRpc,\x20%s','userFaxAccount:save','removeAgents','isArray','emit','userFaxAccount:remove','getAgents','User','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','redis','defaults','localhost','./faxAccount.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','FaxAccount,\x20%s,\x20%s','request\x20sent','debug','FaxAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','end','count','offset','limit','status','set','Content-Range','json','apply','reject','update','get','UserProfileResource','stack','send','index','Pause','mandatoryDispositionPause','FaxAccount','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','pick','filter','merge','where','type','key','VIRTUAL','field','options','includeAll','include','rows','show','params','find','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','FaxAccounts','userProfileId','autoAssociation','create','name','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','destroy','describe','addDisposition','body','FaxAccountId','getDispositions','order','map','Disposition','ids','addAnswer','CannedAnswer','getAnswers','findOne','removeAnswers','addInteraction','FaxInteraction','omit','getInteractions','Contact','Owner'];(function(_0x224d50,_0x388987){var _0x41f8a6=function(_0x40dccf){while(--_0x40dccf){_0x224d50['push'](_0x224d50['shift']());}};_0x41f8a6(++_0x388987);}(_0xe92e,0x10f));var _0xee92=function(_0x5082d7,_0x53a807){_0x5082d7=_0x5082d7-0x0;var _0x33f08c=_0xe92e[_0x5082d7];return _0x33f08c;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xee92('0x0'));var zipdir=require(_0xee92('0x1'));var jsonpatch=require(_0xee92('0x2'));var rp=require(_0xee92('0x3'));var moment=require(_0xee92('0x4'));var BPromise=require(_0xee92('0x5'));var Mustache=require('mustache');var util=require(_0xee92('0x6'));var path=require('path');var sox=require('sox');var csv=require(_0xee92('0x7'));var ejs=require(_0xee92('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0xee92('0x9'));var crypto=require(_0xee92('0xa'));var jsforce=require(_0xee92('0xb'));var deskjs=require(_0xee92('0xc'));var toCsv=require(_0xee92('0x7'));var querystring=require(_0xee92('0xd'));var Papa=require(_0xee92('0xe'));var Redis=require(_0xee92('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xee92('0x10'));var hardwareService=require(_0xee92('0x11'));var logger=require(_0xee92('0x12'))(_0xee92('0x13'));var utils=require('../../config/utils');var config=require(_0xee92('0x14'));var db=require('../../mysqldb')['db'];config[_0xee92('0x15')]=_[_0xee92('0x16')](config[_0xee92('0x15')],{'host':_0xee92('0x17'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xee92('0x15')]));require(_0xee92('0x18'))[_0xee92('0x19')](socket);var jayson=require(_0xee92('0x1a'));var client=jayson['client'][_0xee92('0x1b')]({'port':0x232c});var client9002=jayson['client']['http']({'port':0x232a});function checkPasswordPattern(_0x494e30,_0x3ae9c3,_0x472a42){if(_0x472a42){var _0x40fe66=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x40fe66[_0xee92('0x1c')](_0x3ae9c3)){return _0x494e30;}else{throw new Error(_0xee92('0x1d'));}}else{return _0x494e30;}}function respondWithRpcPromise(_0x2c963a,_0x5d8018,_0x2595e4,_0x10e19f){return new BPromise(function(_0x557a8d,_0xe0a7b7){var _0x15063c=_0x10e19f||client;return _0x15063c[_0xee92('0x1e')](_0x2c963a,_0x2595e4)[_0xee92('0x1f')](function(_0x55c17d){logger['info'](_0xee92('0x20'),_0x5d8018,_0xee92('0x21'));logger[_0xee92('0x22')](_0xee92('0x23'),_0x5d8018,_0xee92('0x21'),JSON[_0xee92('0x24')](_0x55c17d));if(_0x55c17d[_0xee92('0x25')]){if(_0x55c17d[_0xee92('0x25')][_0xee92('0x26')]===0x1f4){logger[_0xee92('0x25')](_0xee92('0x20'),_0x5d8018,_0x55c17d[_0xee92('0x25')][_0xee92('0x27')]);return _0xe0a7b7(_0x55c17d['error'][_0xee92('0x27')]);}logger[_0xee92('0x25')]('FaxAccount,\x20%s,\x20%s',_0x5d8018,_0x55c17d['error'][_0xee92('0x27')]);return _0x557a8d(_0x55c17d[_0xee92('0x25')][_0xee92('0x27')]);}else{logger['info'](_0xee92('0x20'),_0x5d8018,_0xee92('0x21'));_0x557a8d(_0x55c17d[_0xee92('0x28')][_0xee92('0x27')]);}})[_0xee92('0x29')](function(_0x12375f){logger['error']('FaxAccount,\x20%s,\x20%s',_0x5d8018,_0x12375f);_0xe0a7b7(_0x12375f);});});}function respondWithStatusCode(_0x5c1262,_0x3df7eb){_0x3df7eb=_0x3df7eb||0xcc;return function(_0x34ae02){if(_0x34ae02){return _0x5c1262[_0xee92('0x2a')](_0x3df7eb);}return _0x5c1262['status'](_0x3df7eb)[_0xee92('0x2b')]();};}function respondWithResult(_0x4f6f97,_0xb6008d){_0xb6008d=_0xb6008d||0xc8;return function(_0x8fc533){if(_0x8fc533){return _0x4f6f97['status'](_0xb6008d)['json'](_0x8fc533);}};}function respondWithFilteredResult(_0x451776,_0x2f3058){return function(_0x19e58f){if(_0x19e58f){var _0x92fcaa=_0x19e58f[_0xee92('0x2c')],_0xe4019a=_0x2f3058[_0xee92('0x2d')],_0x97d04e=_0x2f3058['offset']+_0x2f3058[_0xee92('0x2e')],_0x124b77;if(_0x97d04e>=_0x92fcaa){_0x97d04e=_0x92fcaa;_0x124b77=0xc8;}else{_0x124b77=0xce;}_0x451776[_0xee92('0x2f')](_0x124b77);return _0x451776[_0xee92('0x30')](_0xee92('0x31'),_0xe4019a+'-'+_0x97d04e+'/'+_0x92fcaa)[_0xee92('0x32')](_0x19e58f);}return null;};}function patchUpdates(_0x4ec8b3){return function(_0x480352){try{jsonpatch[_0xee92('0x33')](_0x480352,_0x4ec8b3,!![]);}catch(_0x35c7e5){return BPromise[_0xee92('0x34')](_0x35c7e5);}return _0x480352['save']();};}function saveUpdates(_0x42ebe1,_0x42a765){return function(_0x4e0e52){if(_0x4e0e52){return _0x4e0e52[_0xee92('0x35')](_0x42ebe1)['then'](function(_0x4f5e84){return _0x4f5e84;});}return null;};}function removeEntity(_0x5894b3,_0x39ad9c){return function(_0x2c4f76){if(_0x2c4f76){return _0x2c4f76['destroy']()[_0xee92('0x1f')](function(){var _0x10c375=_0x2c4f76[_0xee92('0x36')]({'plain':!![]});var _0x455dde='FaxAccounts';return db[_0xee92('0x37')]['destroy']({'where':{'type':_0x455dde,'resourceId':_0x10c375['id']}})[_0xee92('0x1f')](function(){return _0x2c4f76;});})[_0xee92('0x1f')](function(){_0x5894b3[_0xee92('0x2f')](0xcc)[_0xee92('0x2b')]();});}};}function handleEntityNotFound(_0x51f6df,_0x25b441){return function(_0x5c1b9e){if(!_0x5c1b9e){_0x51f6df[_0xee92('0x2a')](0x194);}return _0x5c1b9e;};}function handleError(_0x20df91,_0x69c809){_0x69c809=_0x69c809||0x1f4;return function(_0x2b6a55){logger[_0xee92('0x25')](_0x2b6a55[_0xee92('0x38')]);if(_0x2b6a55['name']){delete _0x2b6a55['name'];}_0x20df91[_0xee92('0x2f')](_0x69c809)[_0xee92('0x39')](_0x2b6a55);};}exports[_0xee92('0x3a')]=function(_0x247858,_0x36f5dc){var _0x1edfda={'include':[{'model':db[_0xee92('0x3b')],'as':_0xee92('0x3c')}]},_0x20e908={},_0x5f3576={'count':0x0,'rows':[]};var _0x2655c2=db[_0xee92('0x3d')][_0xee92('0x3e')];_0x20e908[_0xee92('0x3f')]=_[_0xee92('0x40')](_0x2655c2);_0x20e908[_0xee92('0x41')]=_[_0xee92('0x40')](_0x247858[_0xee92('0x41')]);_0x20e908[_0xee92('0x42')]=_[_0xee92('0x43')](_0x20e908[_0xee92('0x3f')],_0x20e908[_0xee92('0x41')]);_0x1edfda[_0xee92('0x44')]=_[_0xee92('0x43')](_0x20e908['model'],qs[_0xee92('0x45')](_0x247858['query'][_0xee92('0x45')]));_0x1edfda['attributes']=_0x1edfda['attributes'][_0xee92('0x46')]?_0x1edfda[_0xee92('0x44')]:_0x20e908[_0xee92('0x3f')];if(!_0x247858['query'][_0xee92('0x47')](_0xee92('0x48'))){_0x1edfda[_0xee92('0x2e')]=qs[_0xee92('0x2e')](_0x247858[_0xee92('0x41')][_0xee92('0x2e')]);_0x1edfda[_0xee92('0x2d')]=qs[_0xee92('0x2d')](_0x247858['query'][_0xee92('0x2d')]);}_0x1edfda['order']=qs[_0xee92('0x49')](_0x247858['query'][_0xee92('0x49')]);_0x1edfda['where']=qs[_0xee92('0x42')](_[_0xee92('0x4a')](_0x247858[_0xee92('0x41')],_0x20e908[_0xee92('0x42')]));if(_0x247858[_0xee92('0x41')][_0xee92('0x4b')]){_0x1edfda['where']=_[_0xee92('0x4c')](_0x1edfda[_0xee92('0x4d')],{'$or':_['map'](_0x2655c2,function(_0x812b70){if(_0x812b70[_0xee92('0x4e')][_0xee92('0x4f')]!==_0xee92('0x50')){var _0x21969f={};_0x21969f[_0x812b70[_0xee92('0x51')]]={'$like':'%'+_0x247858['query'][_0xee92('0x4b')]+'%'};return _0x21969f;}})});}_0x1edfda=_[_0xee92('0x4c')]({},_0x1edfda,_0x247858[_0xee92('0x52')]);var _0x2a2755={'where':_0x1edfda[_0xee92('0x4d')]};return db[_0xee92('0x3d')][_0xee92('0x2c')](_0x2a2755)['then'](function(_0x4fc20b){_0x5f3576[_0xee92('0x2c')]=_0x4fc20b;if(_0x247858[_0xee92('0x41')][_0xee92('0x53')]){_0x1edfda[_0xee92('0x54')]=[{'all':!![]}];}return db[_0xee92('0x3d')]['findAll'](_0x1edfda);})[_0xee92('0x1f')](function(_0x21f0e8){_0x5f3576[_0xee92('0x55')]=_0x21f0e8;return _0x5f3576;})[_0xee92('0x1f')](respondWithFilteredResult(_0x36f5dc,_0x1edfda))[_0xee92('0x29')](handleError(_0x36f5dc,null));};exports[_0xee92('0x56')]=function(_0x6f787,_0x589d2c){var _0x36619b={'raw':![],'where':{'id':_0x6f787[_0xee92('0x57')]['id']},'include':[{'model':db[_0xee92('0x3b')],'as':_0xee92('0x3c')}]},_0x128dd3={};_0x128dd3['model']=_[_0xee92('0x40')](db[_0xee92('0x3d')][_0xee92('0x3e')]);_0x128dd3['query']=_[_0xee92('0x40')](_0x6f787[_0xee92('0x41')]);_0x128dd3[_0xee92('0x42')]=_[_0xee92('0x43')](_0x128dd3[_0xee92('0x3f')],_0x128dd3[_0xee92('0x41')]);_0x36619b[_0xee92('0x44')]=_[_0xee92('0x43')](_0x128dd3[_0xee92('0x3f')],qs[_0xee92('0x45')](_0x6f787['query']['fields']));_0x36619b['attributes']=_0x36619b[_0xee92('0x44')][_0xee92('0x46')]?_0x36619b[_0xee92('0x44')]:_0x128dd3[_0xee92('0x3f')];if(_0x6f787[_0xee92('0x41')][_0xee92('0x53')]){_0x36619b[_0xee92('0x54')]=[{'all':!![]}];}_0x36619b=_['merge']({},_0x36619b,_0x6f787['options']);return db[_0xee92('0x3d')][_0xee92('0x58')](_0x36619b)[_0xee92('0x1f')](handleEntityNotFound(_0x589d2c,null))[_0xee92('0x1f')](respondWithResult(_0x589d2c,null))['catch'](handleError(_0x589d2c,null));};exports['create']=function(_0x1de689,_0x1b4e8f){return db[_0xee92('0x3d')]['create'](_0x1de689['body'],{})[_0xee92('0x1f')](function(_0x1a3e68){var _0x153205=_0x1de689[_0xee92('0x59')][_0xee92('0x36')]({'plain':!![]});if(!_0x153205)throw new Error(_0xee92('0x5a'));if(_0x153205[_0xee92('0x5b')]===_0xee92('0x59')){var _0x3f75d0=_0x1a3e68[_0xee92('0x36')]({'plain':!![]});var _0x2a1ed4=_0xee92('0x5c');return db['UserProfileSection'][_0xee92('0x58')]({'where':{'name':_0x2a1ed4,'userProfileId':_0x153205[_0xee92('0x5d')]},'raw':!![]})[_0xee92('0x1f')](function(_0x3115d0){if(_0x3115d0&&_0x3115d0[_0xee92('0x5e')]===0x0){return db[_0xee92('0x37')][_0xee92('0x5f')]({'name':_0x3f75d0[_0xee92('0x60')],'resourceId':_0x3f75d0['id'],'type':_0x3115d0[_0xee92('0x60')],'sectionId':_0x3115d0['id']},{})['then'](function(){return _0x1a3e68;});}else{return _0x1a3e68;}})[_0xee92('0x29')](function(_0xaf92de){logger[_0xee92('0x25')](_0xee92('0x61'),_0xaf92de);throw _0xaf92de;});}return _0x1a3e68;})[_0xee92('0x1f')](respondWithResult(_0x1b4e8f,0xc9))['catch'](handleError(_0x1b4e8f,null));};exports[_0xee92('0x35')]=function(_0xace396,_0x117287){if(_0xace396['body']['id']){delete _0xace396['body']['id'];}return db[_0xee92('0x3d')]['find']({'where':{'id':_0xace396[_0xee92('0x57')]['id']},'include':[{'model':db[_0xee92('0x3b')],'as':_0xee92('0x3c')}]})[_0xee92('0x1f')](handleEntityNotFound(_0x117287,null))[_0xee92('0x1f')](saveUpdates(_0xace396['body'],null))[_0xee92('0x1f')](respondWithResult(_0x117287,null))[_0xee92('0x29')](handleError(_0x117287,null));};exports[_0xee92('0x62')]=function(_0x107007,_0x116569){return db['FaxAccount']['find']({'where':{'id':_0x107007[_0xee92('0x57')]['id']}})['then'](handleEntityNotFound(_0x116569,null))['then'](removeEntity(_0x116569,null))['catch'](handleError(_0x116569,null));};exports[_0xee92('0x63')]=function(_0xced779,_0x52ccd1){return db[_0xee92('0x3d')][_0xee92('0x63')]()[_0xee92('0x1f')](respondWithResult(_0x52ccd1,null))[_0xee92('0x29')](handleError(_0x52ccd1,null));};exports[_0xee92('0x64')]=function(_0xae175b,_0x45a616,_0x26851d){if(_0xae175b[_0xee92('0x65')]['id']){delete _0xae175b[_0xee92('0x65')]['id'];}return db[_0xee92('0x3d')][_0xee92('0x58')]({'where':{'id':_0xae175b[_0xee92('0x57')]['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x45a616,null))[_0xee92('0x1f')](function(_0x5de77c){if(_0x5de77c){_0xae175b[_0xee92('0x65')][_0xee92('0x66')]=_0x5de77c['id'];return db['Disposition']['create'](_0xae175b['body']);}})[_0xee92('0x1f')](respondWithResult(_0x45a616,null))['catch'](handleError(_0x45a616,null));};exports[_0xee92('0x67')]=function(_0x3b3f8a,_0x211796,_0x146a14){var _0x353744={'raw':![],'where':{}};var _0x33bc82={};var _0x2237cb={'count':0x0,'rows':[]};return db['FaxAccount']['findOne']({'where':{'id':_0x3b3f8a[_0xee92('0x57')]['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x211796,null))['then'](function(_0x3dcdd3){if(_0x3dcdd3){_0x33bc82[_0xee92('0x3f')]=_[_0xee92('0x40')](db['Disposition']['rawAttributes']);_0x33bc82[_0xee92('0x41')]=_['keys'](_0x3b3f8a[_0xee92('0x41')]);_0x33bc82['filters']=_[_0xee92('0x43')](_0x33bc82['model'],_0x33bc82[_0xee92('0x41')]);_0x353744[_0xee92('0x44')]=_[_0xee92('0x43')](_0x33bc82[_0xee92('0x3f')],qs['fields'](_0x3b3f8a[_0xee92('0x41')][_0xee92('0x45')]));_0x353744[_0xee92('0x44')]=_0x353744[_0xee92('0x44')][_0xee92('0x46')]?_0x353744['attributes']:_0x33bc82[_0xee92('0x3f')];if(!_0x3b3f8a[_0xee92('0x41')][_0xee92('0x47')]('nolimit')){_0x353744['limit']=qs[_0xee92('0x2e')](_0x3b3f8a[_0xee92('0x41')][_0xee92('0x2e')]);_0x353744[_0xee92('0x2d')]=qs['offset'](_0x3b3f8a['query'][_0xee92('0x2d')]);}_0x353744[_0xee92('0x68')]=qs[_0xee92('0x49')](_0x3b3f8a['query']['sort']);_0x353744[_0xee92('0x4d')]=qs[_0xee92('0x42')](_[_0xee92('0x4a')](_0x3b3f8a[_0xee92('0x41')],_0x33bc82[_0xee92('0x42')]));_0x353744[_0xee92('0x4d')][_0xee92('0x66')]=_0x3dcdd3['id'];if(_0x3b3f8a[_0xee92('0x41')][_0xee92('0x4b')]){_0x353744[_0xee92('0x4d')]=_['merge'](_0x353744[_0xee92('0x4d')],{'$or':_[_0xee92('0x69')](_0x353744[_0xee92('0x44')],function(_0x2791e3){var _0x168758={};_0x168758[_0x2791e3]={'$like':'%'+_0x3b3f8a[_0xee92('0x41')]['filter']+'%'};return _0x168758;})});}_0x353744=_[_0xee92('0x4c')]({},_0x353744,_0x3b3f8a['options']);return db['Disposition'][_0xee92('0x2c')]({'where':_0x353744[_0xee92('0x4d')]})[_0xee92('0x1f')](function(_0x54107f){_0x2237cb[_0xee92('0x2c')]=_0x54107f;if(_0x3b3f8a[_0xee92('0x41')]['includeAll']){_0x353744[_0xee92('0x54')]=[{'all':!![]}];}return db[_0xee92('0x6a')]['findAll'](_0x353744);})['then'](function(_0x5d3b67){_0x2237cb['rows']=_0x5d3b67;return _0x2237cb;});}})[_0xee92('0x1f')](respondWithFilteredResult(_0x211796,_0x353744))[_0xee92('0x29')](handleError(_0x211796,null));};exports['removeDispositions']=function(_0x219eb7,_0x19b08a,_0x129fc0){return db[_0xee92('0x3d')]['find']({'where':{'id':_0x219eb7['params']['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x19b08a,null))[_0xee92('0x1f')](function(_0x363a40){if(_0x363a40){return _0x363a40['removeDispositions'](_0x219eb7[_0xee92('0x41')][_0xee92('0x6b')]);}})['then'](respondWithStatusCode(_0x19b08a,null))[_0xee92('0x29')](handleError(_0x19b08a,null));};exports[_0xee92('0x6c')]=function(_0x44a410,_0x1ab286,_0x79c99a){if(_0x44a410[_0xee92('0x65')]['id']){delete _0x44a410['body']['id'];}return db[_0xee92('0x3d')][_0xee92('0x58')]({'where':{'id':_0x44a410[_0xee92('0x57')]['id']}})['then'](handleEntityNotFound(_0x1ab286,null))['then'](function(_0x3e465b){if(_0x3e465b){_0x44a410[_0xee92('0x65')][_0xee92('0x66')]=_0x3e465b['id'];return db[_0xee92('0x6d')][_0xee92('0x5f')](_0x44a410[_0xee92('0x65')]);}})['then'](respondWithResult(_0x1ab286,null))[_0xee92('0x29')](handleError(_0x1ab286,null));};exports[_0xee92('0x6e')]=function(_0x5a5a62,_0x2df499,_0x57f664){var _0x303857={'raw':![],'where':{}};var _0x448233={};var _0x99a3eb={'count':0x0,'rows':[]};return db[_0xee92('0x3d')][_0xee92('0x6f')]({'where':{'id':_0x5a5a62[_0xee92('0x57')]['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x2df499,null))[_0xee92('0x1f')](function(_0x578e12){if(_0x578e12){_0x448233[_0xee92('0x3f')]=_[_0xee92('0x40')](db[_0xee92('0x6d')][_0xee92('0x3e')]);_0x448233[_0xee92('0x41')]=_[_0xee92('0x40')](_0x5a5a62['query']);_0x448233[_0xee92('0x42')]=_[_0xee92('0x43')](_0x448233['model'],_0x448233[_0xee92('0x41')]);_0x303857[_0xee92('0x44')]=_[_0xee92('0x43')](_0x448233[_0xee92('0x3f')],qs[_0xee92('0x45')](_0x5a5a62['query'][_0xee92('0x45')]));_0x303857[_0xee92('0x44')]=_0x303857[_0xee92('0x44')][_0xee92('0x46')]?_0x303857['attributes']:_0x448233[_0xee92('0x3f')];if(!_0x5a5a62[_0xee92('0x41')][_0xee92('0x47')](_0xee92('0x48'))){_0x303857[_0xee92('0x2e')]=qs[_0xee92('0x2e')](_0x5a5a62['query'][_0xee92('0x2e')]);_0x303857[_0xee92('0x2d')]=qs[_0xee92('0x2d')](_0x5a5a62[_0xee92('0x41')][_0xee92('0x2d')]);}_0x303857[_0xee92('0x68')]=qs[_0xee92('0x49')](_0x5a5a62[_0xee92('0x41')]['sort']);_0x303857[_0xee92('0x4d')]=qs[_0xee92('0x42')](_[_0xee92('0x4a')](_0x5a5a62['query'],_0x448233['filters']));_0x303857[_0xee92('0x4d')][_0xee92('0x66')]=_0x578e12['id'];if(_0x5a5a62['query']['filter']){_0x303857['where']=_[_0xee92('0x4c')](_0x303857['where'],{'$or':_[_0xee92('0x69')](_0x303857[_0xee92('0x44')],function(_0x453fb4){var _0x203c23={};_0x203c23[_0x453fb4]={'$like':'%'+_0x5a5a62[_0xee92('0x41')][_0xee92('0x4b')]+'%'};return _0x203c23;})});}_0x303857=_['merge']({},_0x303857,_0x5a5a62['options']);return db[_0xee92('0x6d')][_0xee92('0x2c')]({'where':_0x303857['where']})[_0xee92('0x1f')](function(_0x11e5de){_0x99a3eb['count']=_0x11e5de;if(_0x5a5a62['query'][_0xee92('0x53')]){_0x303857[_0xee92('0x54')]=[{'all':!![]}];}return db[_0xee92('0x6d')]['findAll'](_0x303857);})['then'](function(_0x39f858){_0x99a3eb[_0xee92('0x55')]=_0x39f858;return _0x99a3eb;});}})[_0xee92('0x1f')](respondWithFilteredResult(_0x2df499,_0x303857))[_0xee92('0x29')](handleError(_0x2df499,null));};exports[_0xee92('0x70')]=function(_0x4f434d,_0x34becc,_0x356bb5){return db[_0xee92('0x3d')][_0xee92('0x58')]({'where':{'id':_0x4f434d[_0xee92('0x57')]['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x34becc,null))[_0xee92('0x1f')](function(_0xa01944){if(_0xa01944){return _0xa01944[_0xee92('0x70')](_0x4f434d[_0xee92('0x41')][_0xee92('0x6b')]);}})['then'](respondWithStatusCode(_0x34becc,null))[_0xee92('0x29')](handleError(_0x34becc,null));};exports[_0xee92('0x71')]=function(_0x8e4d99,_0x4eac6f,_0x2d813e){return db[_0xee92('0x72')][_0xee92('0x58')]({'where':{'id':_0x8e4d99[_0xee92('0x57')]['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x4eac6f,null))['then'](function(_0x5a8b9f){if(_0x5a8b9f){return _0x5a8b9f[_0xee92('0x71')](_0x8e4d99[_0xee92('0x65')][_0xee92('0x6b')],_[_0xee92('0x73')](_0x8e4d99[_0xee92('0x65')],[_0xee92('0x6b'),'id'])||{});}})[_0xee92('0x1f')](respondWithResult(_0x4eac6f,null))[_0xee92('0x29')](handleError(_0x4eac6f,null));};exports[_0xee92('0x74')]=function(_0x565ab7,_0x1fbf28,_0x27001c){var _0x1b703b={'raw':![],'where':{}};var _0xf969f9={};var _0x4830e9={'count':0x0,'rows':[]};return db[_0xee92('0x3d')][_0xee92('0x6f')]({'where':{'id':_0x565ab7[_0xee92('0x57')]['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x1fbf28,null))['then'](function(_0x329fb7){if(_0x329fb7){_0xf969f9['model']=_[_0xee92('0x40')](db[_0xee92('0x72')][_0xee92('0x3e')]);_0xf969f9[_0xee92('0x41')]=_[_0xee92('0x40')](_0x565ab7[_0xee92('0x41')]);_0xf969f9[_0xee92('0x42')]=_[_0xee92('0x43')](_0xf969f9[_0xee92('0x3f')],_0xf969f9['query']);_0x1b703b[_0xee92('0x44')]=_[_0xee92('0x43')](_0xf969f9[_0xee92('0x3f')],qs[_0xee92('0x45')](_0x565ab7['query']['fields']));_0x1b703b[_0xee92('0x44')]=_0x1b703b[_0xee92('0x44')][_0xee92('0x46')]?_0x1b703b[_0xee92('0x44')]:_0xf969f9['model'];if(!_0x565ab7[_0xee92('0x41')][_0xee92('0x47')](_0xee92('0x48'))){_0x1b703b[_0xee92('0x2e')]=qs['limit'](_0x565ab7[_0xee92('0x41')][_0xee92('0x2e')]);_0x1b703b[_0xee92('0x2d')]=qs['offset'](_0x565ab7[_0xee92('0x41')][_0xee92('0x2d')]);}_0x1b703b[_0xee92('0x68')]=qs['sort'](_0x565ab7['query'][_0xee92('0x49')]);_0x1b703b[_0xee92('0x4d')]=qs[_0xee92('0x42')](_['pick'](_0x565ab7[_0xee92('0x41')],_0xf969f9[_0xee92('0x42')]));_0x1b703b[_0xee92('0x4d')][_0xee92('0x66')]=_0x329fb7['id'];if(_0x565ab7['query'][_0xee92('0x4b')]){_0x1b703b[_0xee92('0x4d')]=_['merge'](_0x1b703b['where'],{'$or':_['map'](_0x1b703b['attributes'],function(_0x11b86a){var _0x358c45={};_0x358c45[_0x11b86a]={'$like':'%'+_0x565ab7['query'][_0xee92('0x4b')]+'%'};return _0x358c45;})});}_0x1b703b=_[_0xee92('0x4c')]({},_0x1b703b,_0x565ab7[_0xee92('0x52')]);return db[_0xee92('0x72')]['count']({'where':_0x1b703b[_0xee92('0x4d')]})[_0xee92('0x1f')](function(_0x4925ca){_0x4830e9['count']=_0x4925ca;if(_0x565ab7[_0xee92('0x41')][_0xee92('0x53')]){_0x1b703b['include']=[{'model':db['CmContact'],'as':_0xee92('0x75'),'required':![]},{'model':db['User'],'as':_0xee92('0x76'),'attributes':[_0xee92('0x60'),_0xee92('0x77'),_0xee92('0x78')],'required':![]},{'model':db[_0xee92('0x79')],'as':_0xee92('0x7a'),'attributes':['id','name',_0xee92('0x7b')],'where':_0x565ab7[_0xee92('0x41')][_0xee92('0x7c')]?{'id':_0x565ab7['query'][_0xee92('0x7c')]}:undefined,'required':_0x565ab7[_0xee92('0x41')][_0xee92('0x7c')]?!![]:![]}];}return db[_0xee92('0x72')]['findAll'](_0x1b703b);})[_0xee92('0x1f')](function(_0x3e0adb){_0x4830e9[_0xee92('0x55')]=_0x3e0adb;return _0x4830e9;});}})['then'](respondWithFilteredResult(_0x1fbf28,_0x1b703b))[_0xee92('0x29')](handleError(_0x1fbf28,null));};exports[_0xee92('0x7d')]=function(_0x5f97ea,_0x42fd09,_0x14218e){return db[_0xee92('0x3d')][_0xee92('0x6f')]({'where':{'id':_0x5f97ea[_0xee92('0x57')]['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x42fd09,null))['then'](function(_0x27f9eb){if(_0x27f9eb){return db[_0xee92('0x7e')][_0xee92('0x7f')](function(_0x23c54c){return db['FaxApplication']['destroy']({'where':{'FaxAccountId':_0x5f97ea[_0xee92('0x57')]['id']},'transaction':_0x23c54c})[_0xee92('0x1f')](function(_0x2c6273){var _0x80213c=_[_0xee92('0x69')](_0x5f97ea['body'],function(_0x292fa3){_0x292fa3[_0xee92('0x66')]=_0x5f97ea[_0xee92('0x57')]['id'];return _0x292fa3;});return db[_0xee92('0x80')][_0xee92('0x81')](_0x80213c,{'transaction':_0x23c54c});});})['then'](function(){return db[_0xee92('0x80')][_0xee92('0x82')]({'where':{'FaxAccountId':_0x5f97ea[_0xee92('0x57')]['id']},'order':'priority'});});}})[_0xee92('0x1f')](respondWithResult(_0x42fd09,null))[_0xee92('0x29')](handleError(_0x42fd09,null));};exports[_0xee92('0x83')]=function(_0x526fb3,_0x16fb10,_0x449b77){var _0x13f944={};var _0x4c7f8e={};var _0x258c19;var _0x3a5033;return db[_0xee92('0x3d')][_0xee92('0x6f')]({'where':{'id':_0x526fb3['params']['id']}})['then'](handleEntityNotFound(_0x16fb10,null))[_0xee92('0x1f')](function(_0x11a7bd){if(_0x11a7bd){_0x258c19=_0x11a7bd;_0x4c7f8e[_0xee92('0x3f')]=_[_0xee92('0x40')](db[_0xee92('0x80')]['rawAttributes']);_0x4c7f8e[_0xee92('0x41')]=_[_0xee92('0x40')](_0x526fb3[_0xee92('0x41')]);_0x4c7f8e['filters']=_[_0xee92('0x43')](_0x4c7f8e[_0xee92('0x3f')],_0x4c7f8e[_0xee92('0x41')]);_0x13f944[_0xee92('0x44')]=_[_0xee92('0x43')](_0x4c7f8e[_0xee92('0x3f')],qs[_0xee92('0x45')](_0x526fb3[_0xee92('0x41')][_0xee92('0x45')]));_0x13f944[_0xee92('0x44')]=_0x13f944['attributes'][_0xee92('0x46')]?_0x13f944[_0xee92('0x44')]:_0x4c7f8e[_0xee92('0x3f')];_0x13f944[_0xee92('0x68')]=qs[_0xee92('0x49')](_0x526fb3[_0xee92('0x41')][_0xee92('0x49')]);_0x13f944[_0xee92('0x4d')]=qs[_0xee92('0x42')](_[_0xee92('0x4a')](_0x526fb3[_0xee92('0x41')],_0x4c7f8e[_0xee92('0x42')]));if(_0x526fb3[_0xee92('0x41')][_0xee92('0x4b')]){_0x13f944[_0xee92('0x4d')]=_[_0xee92('0x4c')](_0x13f944[_0xee92('0x4d')],{'$or':_[_0xee92('0x69')](_0x13f944[_0xee92('0x44')],function(_0x517ff8){var _0x3f83d9={};_0x3f83d9[_0x517ff8]={'$like':'%'+_0x526fb3[_0xee92('0x41')]['filter']+'%'};return _0x3f83d9;})});}_0x13f944=_['merge']({},_0x13f944,_0x526fb3[_0xee92('0x52')]);return _0x258c19['getApplications'](_0x13f944);}})[_0xee92('0x1f')](function(_0x1a871a){if(_0x1a871a){_0x3a5033=_0x1a871a[_0xee92('0x46')];if(!_0x526fb3[_0xee92('0x41')][_0xee92('0x47')]('nolimit')){_0x13f944[_0xee92('0x2e')]=qs[_0xee92('0x2e')](_0x526fb3[_0xee92('0x41')][_0xee92('0x2e')]);_0x13f944['offset']=qs['offset'](_0x526fb3[_0xee92('0x41')][_0xee92('0x2d')]);}return _0x258c19[_0xee92('0x83')](_0x13f944);}})[_0xee92('0x1f')](function(_0x5d83f5){if(_0x5d83f5){return _0x5d83f5?{'count':_0x3a5033,'rows':_0x5d83f5}:null;}})[_0xee92('0x1f')](respondWithResult(_0x16fb10,null))[_0xee92('0x29')](handleError(_0x16fb10,null));};function Extension(_0x2c1c2e,_0x17b4ea,_0x2407b5,_0x12018a){this[_0xee92('0x84')]=_0xee92('0x85');this[_0xee92('0x86')]=_0x2c1c2e['localstationid'];this[_0xee92('0x87')]=_0x12018a;this[_0xee92('0x4e')]=_0xee92('0x88');this['description']=_0xee92('0x89');this[_0xee92('0x66')]=_0x2c1c2e['id'];this[_0xee92('0x8a')]=_0x17b4ea;this[_0xee92('0x8b')]=_0x2407b5;}function createExtensionsReciveFax(_0x3ee949){var _0x1a4c1a=0x1;var _0x5495fb=[];_0x5495fb[_0xee92('0x8c')](new Extension(_0x3ee949,_0x1a4c1a,'','Answer'));_0x1a4c1a+=0x1;_0x5495fb['push'](new Extension(_0x3ee949,_0x1a4c1a,_0xee92('0x8d'),_0xee92('0x8e')));_0x1a4c1a+=0x1;for(var _0x1ebd00 in _0x3ee949){if(_0x3ee949[_0xee92('0x47')](_0x1ebd00)&&(_0x1ebd00===_0xee92('0x8f')||_0x1ebd00==='localstationid'||_0x1ebd00===_0xee92('0x90')||_0x1ebd00==='faxdetect'||_0x1ebd00===_0xee92('0x91')||_0x1ebd00==='maxrate'||_0x1ebd00===_0xee92('0x92')||_0x1ebd00===_0xee92('0x93')||_0x1ebd00==='t38timeout')){_0x5495fb[_0xee92('0x8c')](new Extension(_0x3ee949,_0x1a4c1a,'FAXOPT('+_0x1ebd00+')='+_0x3ee949[_0x1ebd00],_0xee92('0x8e')));_0x1a4c1a+=0x1;}}_0x5495fb[_0xee92('0x8c')](new Extension(_0x3ee949,_0x1a4c1a,'6',_0xee92('0x94')));_0x1a4c1a+=0x1;_0x5495fb['push'](new Extension(_0x3ee949,_0x1a4c1a,_0xee92('0x95'),_0xee92('0x96')));_0x1a4c1a=0x0;return _0x5495fb;}exports['addAccountApplications']=function(_0x4f5f9e,_0x3b0434,_0x6fa902){var _0x4237e7;return db[_0xee92('0x7e')]['transaction'](function(_0x2ea7ec){return db['FaxAccount']['create'](_0x4f5f9e[_0xee92('0x65')],{'transaction':_0x2ea7ec})['then'](function(_0x56772a){_0x4237e7=_0x56772a[_0xee92('0x36')]({'plain':!![]});return db[_0xee92('0x97')][_0xee92('0x81')](createExtensionsReciveFax(_0x4237e7),{'transaction':_0x2ea7ec});});})[_0xee92('0x1f')](function(){return _0x4237e7;})['then'](respondWithResult(_0x3b0434,null))[_0xee92('0x29')](handleError(_0x3b0434,null));};exports[_0xee92('0x98')]=function(_0x548e10,_0x238dd8,_0x2b630f){var _0x539af2;return db['sequelize']['transaction'](function(_0x3fa739){return db[_0xee92('0x3d')]['update'](_0x548e10[_0xee92('0x65')],{'where':{'id':_0x548e10[_0xee92('0x65')]['id']},'transaction':_0x3fa739})[_0xee92('0x1f')](function(_0x43bf04){return db['VoiceExtension'][_0xee92('0x62')]({'where':{'FaxAccountId':_0x548e10['body']['id']},'transaction':_0x3fa739})[_0xee92('0x1f')](function(_0x308117){return db[_0xee92('0x97')][_0xee92('0x81')](createExtensionsReciveFax(_[_0xee92('0x73')](_0x548e10[_0xee92('0x65')],[_0xee92('0x99'),_0xee92('0x4f'),_0xee92('0x9a'),_0xee92('0x9b'),'TrunkId',_0xee92('0x9c')])),{'transaction':_0x3fa739});});});})['then'](function(){return db[_0xee92('0x3d')][_0xee92('0x9d')](_0x548e10[_0xee92('0x65')]['id']);})[_0xee92('0x1f')](respondWithResult(_0x238dd8,null))['catch'](handleError(_0x238dd8,null));};exports[_0xee92('0x9e')]=function(_0x14be5,_0x4af51c,_0x4427f1){var _0x1b08b8={'raw':!![],'where':{}};var _0xfd3e3c={};var _0x1013bc={'count':0x0,'rows':[]};return db[_0xee92('0x3d')][_0xee92('0x6f')]({'where':{'id':_0x14be5[_0xee92('0x57')]['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x4af51c,null))[_0xee92('0x1f')](function(_0x4adc95){if(_0x4adc95){_0xfd3e3c['model']=_[_0xee92('0x40')](db['FaxMessage'][_0xee92('0x3e')]);_0xfd3e3c[_0xee92('0x41')]=_['keys'](_0x14be5[_0xee92('0x41')]);_0xfd3e3c[_0xee92('0x42')]=_[_0xee92('0x43')](_0xfd3e3c[_0xee92('0x3f')],_0xfd3e3c[_0xee92('0x41')]);_0x1b08b8[_0xee92('0x44')]=_['intersection'](_0xfd3e3c['model'],qs[_0xee92('0x45')](_0x14be5[_0xee92('0x41')][_0xee92('0x45')]));_0x1b08b8['attributes']=_0x1b08b8[_0xee92('0x44')][_0xee92('0x46')]?_0x1b08b8[_0xee92('0x44')]:_0xfd3e3c['model'];if(!_0x14be5[_0xee92('0x41')][_0xee92('0x47')](_0xee92('0x48'))){_0x1b08b8[_0xee92('0x2e')]=qs['limit'](_0x14be5[_0xee92('0x41')][_0xee92('0x2e')]);_0x1b08b8[_0xee92('0x2d')]=qs[_0xee92('0x2d')](_0x14be5[_0xee92('0x41')][_0xee92('0x2d')]);}_0x1b08b8['order']=qs[_0xee92('0x49')](_0x14be5[_0xee92('0x41')][_0xee92('0x49')]);_0x1b08b8[_0xee92('0x4d')]=qs[_0xee92('0x42')](_[_0xee92('0x4a')](_0x14be5[_0xee92('0x41')],_0xfd3e3c[_0xee92('0x42')]));_0x1b08b8[_0xee92('0x4d')][_0xee92('0x66')]=_0x4adc95['id'];if(_0x14be5[_0xee92('0x41')]['filter']){_0x1b08b8[_0xee92('0x4d')]=_[_0xee92('0x4c')](_0x1b08b8[_0xee92('0x4d')],{'$or':_[_0xee92('0x69')](_0x1b08b8[_0xee92('0x44')],function(_0x339be4){var _0x2faad8={};_0x2faad8[_0x339be4]={'$like':'%'+_0x14be5[_0xee92('0x41')][_0xee92('0x4b')]+'%'};return _0x2faad8;})});}if(_0x14be5['query'][_0xee92('0x9f')]){var _0x260c8b=_0x14be5[_0xee92('0x41')]['$gte'][_0xee92('0xa0')](',');var _0x3c5e7c={};_0x3c5e7c[_0x260c8b[0x0]]={'$gte':moment(_0x260c8b[0x1])['format'](_0xee92('0xa1'))};_0x1b08b8[_0xee92('0x4d')]=_[_0xee92('0x4c')](_0x1b08b8['where'],_0x3c5e7c);}_0x1b08b8=_['merge']({},_0x1b08b8,_0x14be5[_0xee92('0x52')]);return db[_0xee92('0xa2')][_0xee92('0x2c')]({'where':_0x1b08b8[_0xee92('0x4d')]})[_0xee92('0x1f')](function(_0x31f712){_0x1013bc['count']=_0x31f712;if(_0x14be5['query'][_0xee92('0x53')]){_0x1b08b8[_0xee92('0x54')]=[{'all':!![]}];}return db[_0xee92('0xa2')][_0xee92('0xa3')](_0x1b08b8);})[_0xee92('0x1f')](function(_0x34da97){_0x1013bc[_0xee92('0x55')]=_0x34da97;return _0x1013bc;});}})[_0xee92('0x1f')](respondWithFilteredResult(_0x4af51c,_0x1b08b8))[_0xee92('0x29')](handleError(_0x4af51c,null));};exports['send']=function(_0x46aa29,_0x1b14ac,_0x2b5a14){var _0x51e63e,_0x54ac1e={},_0x64360e;if(_0x46aa29[_0xee92('0x65')]['to']){_0x64360e=_0x46aa29[_0xee92('0x65')]['to'][0x0];}return db[_0xee92('0x3d')]['find']({'where':{'id':_0x46aa29[_0xee92('0x57')]['id']},'include':[{'model':db[_0xee92('0xa4')],'as':_0xee92('0xa5'),'include':[{'model':db[_0xee92('0xa6')],'as':_0xee92('0xa7'),'where':{'fax':_0x64360e},'limit':0x1,'order':[[_0xee92('0x9b'),'DESC']]}]}]})[_0xee92('0x1f')](handleEntityNotFound(_0x1b14ac,null))['then'](function(_0x3b0f35){_0x51e63e=_0x3b0f35;if(_0x46aa29[_0xee92('0x65')][_0xee92('0xa8')]&&_0x46aa29[_0xee92('0x65')][_0xee92('0xa8')][_0xee92('0x46')]){for(var _0x36ad50=0x0;_0x36ad50<_0x46aa29[_0xee92('0x65')]['attachments']['length'];_0x36ad50+=0x1){_0x46aa29[_0xee92('0x65')][_0xee92('0xa8')][_0x36ad50]={'filename':_0x46aa29['body'][_0xee92('0xa8')][_0x36ad50][_0xee92('0x60')],'id':_0x46aa29[_0xee92('0x65')]['attachments'][_0x36ad50]['id'],'path':path[_0xee92('0xa9')](config[_0xee92('0xaa')],_0xee92('0xab'),_0x46aa29[_0xee92('0x65')]['attachments'][_0x36ad50]['basename'])};}}return respondWithRpcPromise(_0xee92('0xac'),_0xee92('0xac'),{'FaxAccountId':_[_0xee92('0xad')](_0x46aa29[_0xee92('0x57')]['id'])?undefined:_0x46aa29['params']['id'],'path':_[_0xee92('0xad')](_0x46aa29['body'][_0xee92('0xa8')][0x0]['path'])?undefined:_0x46aa29[_0xee92('0x65')][_0xee92('0xa8')][0x0][_0xee92('0xae')],'fax':_[_0xee92('0xad')](_0x46aa29['body']['to'][0x0])?undefined:_0x46aa29[_0xee92('0x65')]['to'][0x0]},client9002);})[_0xee92('0x1f')](function(){if(_0x51e63e){if(_[_0xee92('0xad')](_0x46aa29['body']['from'])){_0x46aa29[_0xee92('0x65')][_0xee92('0xaf')]=util['format']('\x22%s\x22\x20<%s>',_0x51e63e[_0xee92('0x60')],_0x51e63e[_0xee92('0xb0')]);}if(_0x51e63e[_0xee92('0xa5')]){if(_0x51e63e[_0xee92('0xa5')][_0xee92('0xa7')][_0xee92('0x46')]){return _0x51e63e['List'][_0xee92('0xa7')][0x0];}else{return db[_0xee92('0xa6')][_0xee92('0x5f')](_[_0xee92('0x16')](_0x46aa29[_0xee92('0x65')],{'firstName':_0x46aa29['body']['to'][0x0],'phone':_0x46aa29[_0xee92('0x65')]['to'][0x0],'fax':_0x46aa29[_0xee92('0x65')]['to'][0x0],'ListId':_0x51e63e['ListId']}));}}else{throw new Error(_0xee92('0xb1'));}}else{throw new Error('Send\x20Fax\x20failed');}})[_0xee92('0x1f')](function(_0x1d5033){if(_0x1d5033){return db[_0xee92('0x72')][_0xee92('0x58')]({'where':{'ContactId':_0x1d5033['id'],'closed':![],'FaxAccountId':_0x51e63e['id']}})[_0xee92('0x1f')](function(_0x100eaf){if(_0x100eaf){return[_0x100eaf,![]];}return db[_0xee92('0x72')][_0xee92('0x5f')]({'UserId':_0x46aa29[_0xee92('0x59')]['id'],'ContactId':_0x1d5033['id'],'FaxAccountId':_0x51e63e['id'],'fax':_0x46aa29['body']['to'][0x0],'firstMsgDirection':_0xee92('0xb2'),'Messages':[_[_0xee92('0x4c')](_0x46aa29['body'],{'read':![],'body':_0x46aa29[_0xee92('0x65')][_0xee92('0xa8')][0x0][_0xee92('0xb3')],'FaxAccountId':_0x51e63e['id'],'UserId':_0x46aa29[_0xee92('0x59')]['id'],'ContactId':_0x1d5033['id'],'AttachmentId':_0x46aa29['body'][_0xee92('0xa8')][0x0]['id']})]},{'include':[{'model':db[_0xee92('0xa2')],'as':_0xee92('0xb4')}]})[_0xee92('0x1f')](function(_0x1dae49){return[_0x1dae49,!![]];});});}else{throw new Error(_0xee92('0xb5'));}})[_0xee92('0xb6')](function(_0x2896aa,_0x514f78){if(_0x514f78){return _0x2896aa;}return db[_0xee92('0xa2')][_0xee92('0x5f')]({'direction':_0xee92('0xb2'),'read':![],'body':_0x46aa29['body'][_0xee92('0xa8')][0x0][_0xee92('0xb3')],'FaxAccountId':_0x51e63e['id'],'FaxInteractionId':_0x2896aa['id'],'UserId':_0x46aa29[_0xee92('0x59')]['id'],'ContactId':_0x2896aa[_0xee92('0xb7')],'AttachmentId':_0x46aa29[_0xee92('0x65')][_0xee92('0xa8')][0x0]['id']})['then'](function(_0x178067){_0x2896aa[_0xee92('0xb8')][_0xee92('0xb4')]=[];_0x2896aa[_0xee92('0xb8')][_0xee92('0xb4')]['push'](_0x178067[_0xee92('0xb8')]);return _0x2896aa;});})[_0xee92('0x1f')](function(_0x11759f){respondWithRpcPromise(_0xee92('0xb9'),'SendFax',{'FaxAccountId':_['isNil'](_0x46aa29[_0xee92('0x57')]['id'])?undefined:_0x46aa29['params']['id'],'path':_[_0xee92('0xad')](_0x46aa29['body'][_0xee92('0xa8')][0x0][_0xee92('0xae')])?undefined:_0x46aa29[_0xee92('0x65')][_0xee92('0xa8')][0x0][_0xee92('0xae')],'fax':_['isNil'](_0x46aa29['body']['to'][0x0])?undefined:_0x46aa29['body']['to'][0x0],'AttachmentId':_0x46aa29[_0xee92('0x65')]['attachments'][0x0]['id']},client9002)[_0xee92('0x1f')](function(_0x5a1430){logger[_0xee92('0xba')](_0xee92('0xbb'),_0x5a1430);})[_0xee92('0x29')](function(_0x46cefb){logger['info']('SendFaxRpc,\x20%s',_0x46cefb);});return _0x11759f;})['then'](respondWithResult(_0x1b14ac,null))[_0xee92('0x29')](handleError(_0x1b14ac,null));};exports['addAgents']=function(_0x81e6da,_0x4a6e53,_0x4f851c){return db['FaxAccount'][_0xee92('0x58')]({'where':{'id':_0x81e6da[_0xee92('0x57')]['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x4a6e53,null))[_0xee92('0x1f')](function(_0x3861e3){if(_0x3861e3){return _0x3861e3['addAgents'](_0x81e6da[_0xee92('0x65')][_0xee92('0x6b')],_[_0xee92('0x73')](_0x81e6da[_0xee92('0x65')],[_0xee92('0x6b'),'id'])||{})[_0xee92('0xb6')](function(_0x4e3ca7){for(var _0x4aa902=0x0;_0x4aa902<_0x81e6da[_0xee92('0x65')]['ids'][_0xee92('0x46')];_0x4aa902+=0x1){socket['emit'](_0xee92('0xbc'),{'UserId':_0x81e6da[_0xee92('0x65')]['ids'][_0x4aa902],'FaxAccountId':_0x81e6da[_0xee92('0x57')]['id']});}return _0x4e3ca7;});}})[_0xee92('0x1f')](respondWithResult(_0x4a6e53,null))['catch'](handleError(_0x4a6e53,null));};exports[_0xee92('0xbd')]=function(_0x259474,_0x82b341,_0x59e170){return db[_0xee92('0x3d')][_0xee92('0x58')]({'where':{'id':_0x259474['params']['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x82b341,null))[_0xee92('0x1f')](function(_0x195136){if(_0x195136){return _0x195136[_0xee92('0xbd')](_0x259474[_0xee92('0x41')][_0xee92('0x6b')])[_0xee92('0x1f')](function(){if(_[_0xee92('0xbe')](_0x259474[_0xee92('0x41')][_0xee92('0x6b')])){for(var _0x2c9cea=0x0;_0x2c9cea<_0x259474['query'][_0xee92('0x6b')][_0xee92('0x46')];_0x2c9cea+=0x1){socket[_0xee92('0xbf')](_0xee92('0xc0'),{'UserId':Number(_0x259474['query'][_0xee92('0x6b')][_0x2c9cea]),'FaxAccountId':Number(_0x259474[_0xee92('0x57')]['id'])});}}else{socket[_0xee92('0xbf')](_0xee92('0xc0'),{'UserId':Number(_0x259474[_0xee92('0x41')][_0xee92('0x6b')]),'FaxAccountId':Number(_0x259474[_0xee92('0x57')]['id'])});}});}})[_0xee92('0x1f')](respondWithStatusCode(_0x82b341,null))[_0xee92('0x29')](handleError(_0x82b341,null));};exports[_0xee92('0xc1')]=function(_0xdaf6a5,_0x3202a7,_0x4b7dd1){var _0x53b046={};var _0x2b6cd5={};var _0x46815c;var _0x544aac;return db['FaxAccount'][_0xee92('0x6f')]({'where':{'id':_0xdaf6a5[_0xee92('0x57')]['id']}})[_0xee92('0x1f')](handleEntityNotFound(_0x3202a7,null))[_0xee92('0x1f')](function(_0x49d496){if(_0x49d496){_0x46815c=_0x49d496;_0x2b6cd5[_0xee92('0x3f')]=_[_0xee92('0x40')](db[_0xee92('0xc2')][_0xee92('0x3e')]);_0x2b6cd5['query']=_[_0xee92('0x40')](_0xdaf6a5[_0xee92('0x41')]);_0x2b6cd5[_0xee92('0x42')]=_['intersection'](_0x2b6cd5[_0xee92('0x3f')],_0x2b6cd5['query']);_0x53b046[_0xee92('0x44')]=_[_0xee92('0x43')](_0x2b6cd5[_0xee92('0x3f')],qs[_0xee92('0x45')](_0xdaf6a5[_0xee92('0x41')][_0xee92('0x45')]));_0x53b046[_0xee92('0x44')]=_0x53b046['attributes'][_0xee92('0x46')]?_0x53b046['attributes']:_0x2b6cd5[_0xee92('0x3f')];_0x53b046['order']=qs[_0xee92('0x49')](_0xdaf6a5[_0xee92('0x41')][_0xee92('0x49')]);_0x53b046[_0xee92('0x4d')]=qs['filters'](_[_0xee92('0x4a')](_0xdaf6a5['query'],_0x2b6cd5[_0xee92('0x42')]));if(_0xdaf6a5[_0xee92('0x41')][_0xee92('0x4b')]){_0x53b046['where']=_[_0xee92('0x4c')](_0x53b046['where'],{'$or':_[_0xee92('0x69')](_0x53b046[_0xee92('0x44')],function(_0x2aba8f){var _0x201c34={};_0x201c34[_0x2aba8f]={'$like':'%'+_0xdaf6a5['query'][_0xee92('0x4b')]+'%'};return _0x201c34;})});}_0x53b046=_[_0xee92('0x4c')]({},_0x53b046,_0xdaf6a5['options']);return _0x46815c[_0xee92('0xc1')](_0x53b046);}})[_0xee92('0x1f')](function(_0x4349f7){if(_0x4349f7){_0x544aac=_0x4349f7[_0xee92('0x46')];if(!_0xdaf6a5[_0xee92('0x41')][_0xee92('0x47')](_0xee92('0x48'))){_0x53b046['limit']=qs[_0xee92('0x2e')](_0xdaf6a5[_0xee92('0x41')][_0xee92('0x2e')]);_0x53b046[_0xee92('0x2d')]=qs[_0xee92('0x2d')](_0xdaf6a5['query'][_0xee92('0x2d')]);}return _0x46815c['getAgents'](_0x53b046);}})['then'](function(_0x362ec7){if(_0x362ec7){return _0x362ec7?{'count':_0x544aac,'rows':_0x362ec7}:null;}})[_0xee92('0x1f')](respondWithResult(_0x3202a7,null))[_0xee92('0x29')](handleError(_0x3202a7,null));};
\ No newline at end of file
index 0db83e3..699eebe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5a51=['setMaxListeners','save','update','remove','emit','hasOwnProperty','events','../../mysqldb'];(function(_0x296897,_0x4d23ea){var _0x2b44ab=function(_0xdf90d8){while(--_0xdf90d8){_0x296897['push'](_0x296897['shift']());}};_0x2b44ab(++_0x4d23ea);}(_0x5a51,0x12e));var _0x15a5=function(_0x594e87,_0x481c91){_0x594e87=_0x594e87-0x0;var _0x5338a1=_0x5a51[_0x594e87];return _0x5338a1;};'use strict';var EventEmitter=require(_0x15a5('0x0'));var FaxAccount=require(_0x15a5('0x1'))['db']['FaxAccount'];var FaxAccountEvents=new EventEmitter();FaxAccountEvents[_0x15a5('0x2')](0x0);var events={'afterCreate':_0x15a5('0x3'),'afterUpdate':_0x15a5('0x4'),'afterDestroy':_0x15a5('0x5')};function emitEvent(_0x3066cb){return function(_0x2ed5c9,_0x8dcf2d,_0x19cfea){FaxAccountEvents['emit'](_0x3066cb+':'+_0x2ed5c9['id'],_0x2ed5c9);FaxAccountEvents[_0x15a5('0x6')](_0x3066cb,_0x2ed5c9);_0x19cfea(null);};}for(var e in events){if(events[_0x15a5('0x7')](e)){var event=events[e];FaxAccount['hook'](e,emitEvent(event));}}module['exports']=FaxAccountEvents;
\ No newline at end of file
+var _0x39bc=['save','update','emit','hasOwnProperty','hook','events','../../mysqldb','setMaxListeners'];(function(_0x164931,_0x571f99){var _0x5afead=function(_0x5f5fe3){while(--_0x5f5fe3){_0x164931['push'](_0x164931['shift']());}};_0x5afead(++_0x571f99);}(_0x39bc,0xdd));var _0xc39b=function(_0x589707,_0x40f4d6){_0x589707=_0x589707-0x0;var _0x199565=_0x39bc[_0x589707];return _0x199565;};'use strict';var EventEmitter=require(_0xc39b('0x0'));var FaxAccount=require(_0xc39b('0x1'))['db']['FaxAccount'];var FaxAccountEvents=new EventEmitter();FaxAccountEvents[_0xc39b('0x2')](0x0);var events={'afterCreate':_0xc39b('0x3'),'afterUpdate':_0xc39b('0x4'),'afterDestroy':'remove'};function emitEvent(_0x55dda0){return function(_0x3929a3,_0x4dc01d,_0x4599cc){FaxAccountEvents[_0xc39b('0x5')](_0x55dda0+':'+_0x3929a3['id'],_0x3929a3);FaxAccountEvents[_0xc39b('0x5')](_0x55dda0,_0x3929a3);_0x4599cc(null);};}for(var e in events){if(events[_0xc39b('0x6')](e)){var event=events[e];FaxAccount[_0xc39b('0x7')](e,emitEvent(event));}}module['exports']=FaxAccountEvents;
\ No newline at end of file
index 6b3ff0a..0309311 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x43a6=['fax_accounts','lodash','util','../../config/logger','moment','bluebird','request-promise','path','./faxAccount.attributes','exports','define','FaxAccount'];(function(_0x491544,_0x5874f1){var _0x33cbdb=function(_0x3debc6){while(--_0x3debc6){_0x491544['push'](_0x491544['shift']());}};_0x33cbdb(++_0x5874f1);}(_0x43a6,0x9d));var _0x643a=function(_0x3b6652,_0x32486d){_0x3b6652=_0x3b6652-0x0;var _0x14d39f=_0x43a6[_0x3b6652];return _0x14d39f;};'use strict';var _=require(_0x643a('0x0'));var util=require(_0x643a('0x1'));var logger=require(_0x643a('0x2'))('api');var moment=require(_0x643a('0x3'));var BPromise=require(_0x643a('0x4'));var rp=require(_0x643a('0x5'));var fs=require('fs');var path=require(_0x643a('0x6'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x643a('0x7'));module[_0x643a('0x8')]=function(_0x24bf22,_0x11deaa){return _0x24bf22[_0x643a('0x9')](_0x643a('0xa'),attributes,{'tableName':_0x643a('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf386=['rimraf','./faxAccount.attributes','exports','FaxAccount','fax_accounts','lodash','util','../../config/logger','request-promise'];(function(_0x47eafe,_0x27b943){var _0x4224d0=function(_0x5eef2b){while(--_0x5eef2b){_0x47eafe['push'](_0x47eafe['shift']());}};_0x4224d0(++_0x27b943);}(_0xf386,0xdd));var _0x6f38=function(_0x1b0090,_0x2dba38){_0x1b0090=_0x1b0090-0x0;var _0x3182e7=_0xf386[_0x1b0090];return _0x3182e7;};'use strict';var _=require(_0x6f38('0x0'));var util=require(_0x6f38('0x1'));var logger=require(_0x6f38('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x6f38('0x3'));var fs=require('fs');var path=require('path');var rimraf=require(_0x6f38('0x4'));var config=require('../../config/environment');var attributes=require(_0x6f38('0x5'));module[_0x6f38('0x6')]=function(_0x3ee855,_0x1abab8){return _0x3ee855['define'](_0x6f38('0x7'),attributes,{'tableName':_0x6f38('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 7dd3614..a3c415c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd3d4=['util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','defaults','redis','localhost','./faxAccount.socket','register','request\x20sent','debug','error','code','message','FaxAccount,\x20%s,\x20%s','info','result','catch','GetFaxAccount','FaxAccount','findAll','options','raw','attributes','limit','include','model','map','then','stringify','body','CmContact','Sequelize','ValidationError','difference','keys','createdAt','updatedAt','isNil','from\x20is\x20mandatory','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','mapKey','from','find','account','CmList','Contacts','FaxApplication','Applications','List','list','applications','orderBy','length','ListId','contact','fax','FaxInteraction','create','spread','get','autoclose','push','unmanaged','created','interaction','FaxMessage','ContactId','AttachmentId','User','name','UserId','unshift','agent','waitForTheAssignedAgent','*,*,*,*','Start','startRouting','lodash'];(function(_0x3d1836,_0x2d49ba){var _0x3b9a4f=function(_0x31fa55){while(--_0x31fa55){_0x3d1836['push'](_0x3d1836['shift']());}};_0x3b9a4f(++_0x2d49ba);}(_0xd3d4,0x1bc));var _0x4d3d=function(_0x46c1d5,_0x5ca335){_0x46c1d5=_0x46c1d5-0x0;var _0x40fe7b=_0xd3d4[_0x46c1d5];return _0x40fe7b;};'use strict';var _=require(_0x4d3d('0x0'));var util=require(_0x4d3d('0x1'));var moment=require(_0x4d3d('0x2'));var BPromise=require(_0x4d3d('0x3'));var rs=require(_0x4d3d('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x4d3d('0x5'))['db'];var utils=require(_0x4d3d('0x6'));var logger=require(_0x4d3d('0x7'))(_0x4d3d('0x8'));var config=require('../../config/environment');var jayson=require(_0x4d3d('0x9'));var client=jayson[_0x4d3d('0xa')][_0x4d3d('0xb')]({'port':0x232c});config['redis']=_[_0x4d3d('0xc')](config[_0x4d3d('0xd')],{'host':_0x4d3d('0xe'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x4d3d('0xf'))[_0x4d3d('0x10')](socket);function respondWithRpcPromise(_0x5c7c3c,_0x157fb2,_0x3a3653){return new BPromise(function(_0x57d148,_0x1a4e76){return client['request'](_0x5c7c3c,_0x3a3653)['then'](function(_0x125787){logger['info']('FaxAccount,\x20%s,\x20%s',_0x157fb2,_0x4d3d('0x11'));logger[_0x4d3d('0x12')]('FaxAccount,\x20%s,\x20%s,\x20%s',_0x157fb2,_0x4d3d('0x11'),JSON['stringify'](_0x125787));if(_0x125787['error']){if(_0x125787[_0x4d3d('0x13')][_0x4d3d('0x14')]===0x1f4){logger[_0x4d3d('0x13')]('FaxAccount,\x20%s,\x20%s',_0x157fb2,_0x125787[_0x4d3d('0x13')]['message']);return _0x1a4e76(_0x125787[_0x4d3d('0x13')][_0x4d3d('0x15')]);}logger[_0x4d3d('0x13')](_0x4d3d('0x16'),_0x157fb2,_0x125787[_0x4d3d('0x13')][_0x4d3d('0x15')]);return _0x57d148(_0x125787[_0x4d3d('0x13')][_0x4d3d('0x15')]);}else{logger[_0x4d3d('0x17')](_0x4d3d('0x16'),_0x157fb2,_0x4d3d('0x11'));_0x57d148(_0x125787[_0x4d3d('0x18')][_0x4d3d('0x15')]);}})[_0x4d3d('0x19')](function(_0x42d2c3){logger['error']('FaxAccount,\x20%s,\x20%s',_0x157fb2,_0x42d2c3);_0x1a4e76(_0x42d2c3);});});}exports[_0x4d3d('0x1a')]=function(_0x5dcc7e){var _0x2c1bd2=this;return new Promise(function(_0x1f18c5,_0x21a6c5){return db[_0x4d3d('0x1b')][_0x4d3d('0x1c')]({'raw':_0x5dcc7e[_0x4d3d('0x1d')]?_0x5dcc7e[_0x4d3d('0x1d')][_0x4d3d('0x1e')]===undefined?!![]:![]:!![],'where':_0x5dcc7e[_0x4d3d('0x1d')]?_0x5dcc7e['options']['where']||null:null,'attributes':_0x5dcc7e[_0x4d3d('0x1d')]?_0x5dcc7e[_0x4d3d('0x1d')][_0x4d3d('0x1f')]||null:null,'limit':_0x5dcc7e[_0x4d3d('0x1d')]?_0x5dcc7e['options'][_0x4d3d('0x20')]||null:null,'include':_0x5dcc7e[_0x4d3d('0x1d')]?_0x5dcc7e[_0x4d3d('0x1d')][_0x4d3d('0x21')]?_['map'](_0x5dcc7e[_0x4d3d('0x1d')][_0x4d3d('0x21')],function(_0x234999){return{'model':db[_0x234999[_0x4d3d('0x22')]],'as':_0x234999['as'],'attributes':_0x234999[_0x4d3d('0x1f')],'include':_0x234999[_0x4d3d('0x21')]?_[_0x4d3d('0x23')](_0x234999[_0x4d3d('0x21')],function(_0x41463e){return{'model':db[_0x41463e['model']],'as':_0x41463e['as'],'attributes':_0x41463e[_0x4d3d('0x1f')],'include':_0x41463e[_0x4d3d('0x21')]?_['map'](_0x41463e[_0x4d3d('0x21')],function(_0x10141c){return{'model':db[_0x10141c[_0x4d3d('0x22')]],'as':_0x10141c['as'],'attributes':_0x10141c['attributes']};}):[]};}):[]};}):[]:[]})[_0x4d3d('0x24')](function(_0x3537ed){logger['info'](_0x4d3d('0x1a'),_0x5dcc7e);logger[_0x4d3d('0x12')](_0x4d3d('0x1a'),_0x5dcc7e,JSON[_0x4d3d('0x25')](_0x3537ed));_0x1f18c5(_0x3537ed);})[_0x4d3d('0x19')](function(_0x33059a){logger[_0x4d3d('0x13')](_0x4d3d('0x1a'),_0x33059a[_0x4d3d('0x15')],_0x5dcc7e);_0x21a6c5(_0x2c1bd2[_0x4d3d('0x13')](0x1f4,_0x33059a[_0x4d3d('0x15')]));});});};exports['NotifyFaxAccount']=function(_0x55e97b,_0x2ce64f,_0x23c0e9){var _0x311029=this;return new Promise(function(_0x44404f,_0x9d1955){var _0x48bf64={'body':_0x55e97b[_0x4d3d('0x26')],'channel':'fax'};var _0x21846e=[];var _0x198069=[];var _0x2f5ebe={};return db[_0x4d3d('0x27')]['describe']()[_0x4d3d('0x24')](function(_0x5e609f){if(!_0x5e609f){throw new db[(_0x4d3d('0x28'))][(_0x4d3d('0x29'))]('no\x20available\x20attributes');}_0x21846e=_[_0x4d3d('0x2a')](_[_0x4d3d('0x2b')](_0x5e609f),[_0x4d3d('0x2c'),_0x4d3d('0x2d')]);_0x198069=_[_0x4d3d('0x2a')](_[_0x4d3d('0x2b')](_0x5e609f),[_0x4d3d('0x2c'),_0x4d3d('0x2d'),'CompanyId','ListId']);if(_0x55e97b['body']['id']){delete _0x55e97b[_0x4d3d('0x26')]['id'];}if(_[_0x4d3d('0x2e')](_0x55e97b[_0x4d3d('0x26')]['from'])){throw new db[(_0x4d3d('0x28'))][(_0x4d3d('0x29'))](_0x4d3d('0x2f'));}if(_[_0x4d3d('0x2e')](_0x55e97b[_0x4d3d('0x26')]['body'])||_0x55e97b[_0x4d3d('0x26')][_0x4d3d('0x26')]===''){throw new db['Sequelize'][(_0x4d3d('0x29'))](_0x4d3d('0x30'));}if(_[_0x4d3d('0x2e')](_0x55e97b['body']['mapKey'])){throw new db[(_0x4d3d('0x28'))][(_0x4d3d('0x29'))](_0x4d3d('0x31')+_0x198069);}if(!_[_0x4d3d('0x32')](_0x198069,_0x55e97b['body']['mapKey'])){throw new db[(_0x4d3d('0x28'))]['ValidationError'](_0x4d3d('0x33')+_0x198069);}_0x2f5ebe[_0x55e97b['body'][_0x4d3d('0x34')]]=_0x55e97b[_0x4d3d('0x26')][_0x4d3d('0x35')];})[_0x4d3d('0x24')](function(){return db[_0x4d3d('0x1b')][_0x4d3d('0x36')]({'where':{'id':_0x55e97b[_0x4d3d('0x37')]['id']},'include':[{'model':db[_0x4d3d('0x38')],'as':'List','include':[{'model':db[_0x4d3d('0x27')],'as':_0x4d3d('0x39'),'where':_0x2f5ebe,'limit':0x1,'order':[[_0x4d3d('0x2d'),'DESC']]}]},{'model':db[_0x4d3d('0x3a')],'as':_0x4d3d('0x3b')}]});})['then'](function(_0x4a46d8){if(_0x4a46d8&&_0x4a46d8[_0x4d3d('0x3c')]){var _0x3a1c7c=_0x4a46d8['get']({'plain':!![]});_0x48bf64['account']=_0x3a1c7c;_0x48bf64['applications']=_0x3a1c7c['Applications'];_0x48bf64[_0x4d3d('0x3d')]=_0x3a1c7c[_0x4d3d('0x3c')];_0x48bf64[_0x4d3d('0x3e')]=_[_0x4d3d('0x3f')](_0x48bf64[_0x4d3d('0x3e')],['priority'],['asc']);if(_0x48bf64[_0x4d3d('0x37')][_0x4d3d('0x3b')]){delete _0x48bf64[_0x4d3d('0x37')][_0x4d3d('0x3b')];}if(_0x48bf64[_0x4d3d('0x37')][_0x4d3d('0x3c')]&&_0x48bf64[_0x4d3d('0x37')][_0x4d3d('0x3c')][_0x4d3d('0x39')][_0x4d3d('0x40')]){return _0x48bf64[_0x4d3d('0x37')][_0x4d3d('0x3c')][_0x4d3d('0x39')][0x0];}var _0x360595=_[_0x4d3d('0xc')](_0x55e97b['body'],{'firstName':_0x55e97b[_0x4d3d('0x26')]['from'],'ListId':_0x3a1c7c[_0x4d3d('0x41')]});_0x360595[_0x55e97b[_0x4d3d('0x26')][_0x4d3d('0x34')]]=_0x55e97b[_0x4d3d('0x26')]['from'];return db[_0x4d3d('0x27')]['create'](_0x360595,{'fields':_0x21846e,'raw':!![]});}})['then'](function(_0x2244da){_0x48bf64[_0x4d3d('0x42')]=_0x2244da;if(_0x2244da){var _0x3336d8={'ContactId':_0x2244da['id'],'FaxAccountId':_0x55e97b[_0x4d3d('0x37')]['id'],'fax':_0x2244da[_0x4d3d('0x43')]};return db[_0x4d3d('0x44')][_0x4d3d('0x36')]({'where':{'ContactId':_0x2244da['id'],'closed':![],'FaxAccountId':_0x55e97b['account']['id']}})[_0x4d3d('0x24')](function(_0x4798d6){if(_0x4798d6){return[_0x4798d6,![]];}return db[_0x4d3d('0x44')][_0x4d3d('0x45')](_0x3336d8)[_0x4d3d('0x24')](function(_0x4f99a8){return[_0x4f99a8,!![]];});});}else{throw new Error('Contact\x20not\x20found');}})[_0x4d3d('0x46')](function(_0x89dc5,_0x13e9a8){var _0x4ca072=_0x89dc5[_0x4d3d('0x47')]({'plain':!![]});if(_0x13e9a8){if(_0x48bf64['account'][_0x4d3d('0x48')]){_0x48bf64['applications'][_0x4d3d('0x49')]({'id':0x0,'priority':_0x48bf64['applications'][_0x4d3d('0x40')]+0x1,'app':'close','appdata':_0x4d3d('0x4a'),'interval':'*,*,*,*'});}_0x4ca072[_0x4d3d('0x4b')]=!![];}else{_0x4ca072['created']=![];}_0x48bf64[_0x4d3d('0x4c')]=_0x4ca072;return db[_0x4d3d('0x4d')][_0x4d3d('0x45')]({'body':_0x55e97b[_0x4d3d('0x26')][_0x4d3d('0x26')],'FaxAccountId':_0x55e97b[_0x4d3d('0x37')]['id'],'FaxInteractionId':_0x89dc5['id'],'direction':'in','ContactId':_0x89dc5[_0x4d3d('0x4e')],'AttachmentId':_0x55e97b[_0x4d3d('0x26')][_0x4d3d('0x4f')]});})[_0x4d3d('0x24')](function(_0x523b67){_0x48bf64[_0x4d3d('0x15')]=_0x523b67;if(_0x48bf64[_0x4d3d('0x4c')]['UserId']){return db[_0x4d3d('0x50')][_0x4d3d('0x36')]({'attributes':['id',_0x4d3d('0x51')],'where':{'id':_0x48bf64['interaction'][_0x4d3d('0x52')]}})[_0x4d3d('0x24')](function(_0x376edb){if(_0x376edb){_0x48bf64[_0x4d3d('0x3e')][_0x4d3d('0x53')]({'id':0x0,'priority':0x0,'app':_0x4d3d('0x54'),'appdata':_0x376edb[_0x4d3d('0x51')]+','+(_0x48bf64['account'][_0x4d3d('0x55')]||0xa),'interval':_0x4d3d('0x56')});}return respondWithRpcPromise(_0x4d3d('0x57'),'startRouting',_0x48bf64);});}return respondWithRpcPromise(_0x4d3d('0x57'),_0x4d3d('0x58'),_0x48bf64);})['then'](function(_0x2de0e6){_0x44404f(_0x2de0e6);})[_0x4d3d('0x19')](function(_0x40aa9a){_0x9d1955(_0x311029[_0x4d3d('0x13')](0x1f4,_0x40aa9a[_0x4d3d('0x15')]));});});};
\ No newline at end of file
+var _0xadf9=['FaxAccount,\x20%s,\x20%s','request\x20sent','debug','FaxAccount,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','options','raw','where','attributes','limit','map','include','model','GetFaxAccount','NotifyFaxAccount','body','CmContact','describe','Sequelize','no\x20available\x20attributes','difference','keys','createdAt','updatedAt','CompanyId','ListId','isNil','from','ValidationError','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','FaxAccount','find','account','CmList','List','Contacts','DESC','FaxApplication','Applications','get','applications','list','orderBy','priority','asc','length','create','fax','FaxInteraction','spread','autoclose','close','unmanaged','*,*,*,*','created','FaxMessage','AttachmentId','interaction','UserId','User','name','unshift','waitForTheAssignedAgent','Start','startRouting','lodash','util','moment','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','redis','defaults','socket.io-emitter','register','then','info'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xadf9,0xa4));var _0x9adf=function(_0x43cf8f,_0x1c436c){_0x43cf8f=_0x43cf8f-0x0;var _0x928a69=_0xadf9[_0x43cf8f];return _0x928a69;};'use strict';var _=require(_0x9adf('0x0'));var util=require(_0x9adf('0x1'));var moment=require(_0x9adf('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x9adf('0x3'));var db=require(_0x9adf('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x9adf('0x5'))(_0x9adf('0x6'));var config=require(_0x9adf('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x9adf('0x8')][_0x9adf('0x9')]({'port':0x232c});config[_0x9adf('0xa')]=_[_0x9adf('0xb')](config[_0x9adf('0xa')],{'host':'localhost','port':0x18eb});var socket=require(_0x9adf('0xc'))(new Redis(config[_0x9adf('0xa')]));require('./faxAccount.socket')[_0x9adf('0xd')](socket);function respondWithRpcPromise(_0x30b56e,_0x7d2f1a,_0x1a7c69){return new BPromise(function(_0xa62065,_0x28cdf7){return client['request'](_0x30b56e,_0x1a7c69)[_0x9adf('0xe')](function(_0x23d6b3){logger[_0x9adf('0xf')](_0x9adf('0x10'),_0x7d2f1a,_0x9adf('0x11'));logger[_0x9adf('0x12')](_0x9adf('0x13'),_0x7d2f1a,'request\x20sent',JSON[_0x9adf('0x14')](_0x23d6b3));if(_0x23d6b3['error']){if(_0x23d6b3[_0x9adf('0x15')]['code']===0x1f4){logger[_0x9adf('0x15')]('FaxAccount,\x20%s,\x20%s',_0x7d2f1a,_0x23d6b3[_0x9adf('0x15')][_0x9adf('0x16')]);return _0x28cdf7(_0x23d6b3[_0x9adf('0x15')][_0x9adf('0x16')]);}logger[_0x9adf('0x15')](_0x9adf('0x10'),_0x7d2f1a,_0x23d6b3['error'][_0x9adf('0x16')]);return _0xa62065(_0x23d6b3[_0x9adf('0x15')][_0x9adf('0x16')]);}else{logger[_0x9adf('0xf')]('FaxAccount,\x20%s,\x20%s',_0x7d2f1a,_0x9adf('0x11'));_0xa62065(_0x23d6b3[_0x9adf('0x17')][_0x9adf('0x16')]);}})[_0x9adf('0x18')](function(_0x4ca467){logger[_0x9adf('0x15')](_0x9adf('0x10'),_0x7d2f1a,_0x4ca467);_0x28cdf7(_0x4ca467);});});}exports['GetFaxAccount']=function(_0x5797ba){var _0x545e37=this;return new Promise(function(_0x50f88a,_0x3ab5e9){return db['FaxAccount']['findAll']({'raw':_0x5797ba[_0x9adf('0x19')]?_0x5797ba[_0x9adf('0x19')][_0x9adf('0x1a')]===undefined?!![]:![]:!![],'where':_0x5797ba[_0x9adf('0x19')]?_0x5797ba[_0x9adf('0x19')][_0x9adf('0x1b')]||null:null,'attributes':_0x5797ba['options']?_0x5797ba['options'][_0x9adf('0x1c')]||null:null,'limit':_0x5797ba['options']?_0x5797ba[_0x9adf('0x19')][_0x9adf('0x1d')]||null:null,'include':_0x5797ba[_0x9adf('0x19')]?_0x5797ba['options']['include']?_[_0x9adf('0x1e')](_0x5797ba[_0x9adf('0x19')][_0x9adf('0x1f')],function(_0x1f269c){return{'model':db[_0x1f269c[_0x9adf('0x20')]],'as':_0x1f269c['as'],'attributes':_0x1f269c['attributes'],'include':_0x1f269c['include']?_[_0x9adf('0x1e')](_0x1f269c['include'],function(_0x93491){return{'model':db[_0x93491['model']],'as':_0x93491['as'],'attributes':_0x93491[_0x9adf('0x1c')],'include':_0x93491[_0x9adf('0x1f')]?_[_0x9adf('0x1e')](_0x93491[_0x9adf('0x1f')],function(_0x285501){return{'model':db[_0x285501[_0x9adf('0x20')]],'as':_0x285501['as'],'attributes':_0x285501[_0x9adf('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x9adf('0xe')](function(_0x2e44ad){logger[_0x9adf('0xf')](_0x9adf('0x21'),_0x5797ba);logger[_0x9adf('0x12')](_0x9adf('0x21'),_0x5797ba,JSON[_0x9adf('0x14')](_0x2e44ad));_0x50f88a(_0x2e44ad);})['catch'](function(_0x27a761){logger[_0x9adf('0x15')](_0x9adf('0x21'),_0x27a761[_0x9adf('0x16')],_0x5797ba);_0x3ab5e9(_0x545e37['error'](0x1f4,_0x27a761[_0x9adf('0x16')]));});});};exports[_0x9adf('0x22')]=function(_0x54a0eb,_0x55f300,_0x355c3a){var _0x3408b0=this;return new Promise(function(_0x3a9f6d,_0x5d3a8e){var _0x2b4619={'body':_0x54a0eb[_0x9adf('0x23')],'channel':'fax'};var _0x3706bd=[];var _0x2dfb1c=[];var _0x5cd919={};return db[_0x9adf('0x24')][_0x9adf('0x25')]()[_0x9adf('0xe')](function(_0x28178f){if(!_0x28178f){throw new db[(_0x9adf('0x26'))]['ValidationError'](_0x9adf('0x27'));}_0x3706bd=_[_0x9adf('0x28')](_[_0x9adf('0x29')](_0x28178f),[_0x9adf('0x2a'),'updatedAt']);_0x2dfb1c=_['difference'](_['keys'](_0x28178f),[_0x9adf('0x2a'),_0x9adf('0x2b'),_0x9adf('0x2c'),_0x9adf('0x2d')]);if(_0x54a0eb['body']['id']){delete _0x54a0eb[_0x9adf('0x23')]['id'];}if(_[_0x9adf('0x2e')](_0x54a0eb['body'][_0x9adf('0x2f')])){throw new db[(_0x9adf('0x26'))][(_0x9adf('0x30'))](_0x9adf('0x31'));}if(_[_0x9adf('0x2e')](_0x54a0eb[_0x9adf('0x23')][_0x9adf('0x23')])||_0x54a0eb['body'][_0x9adf('0x23')]===''){throw new db[(_0x9adf('0x26'))]['ValidationError'](_0x9adf('0x32'));}if(_['isNil'](_0x54a0eb[_0x9adf('0x23')][_0x9adf('0x33')])){throw new db['Sequelize'][(_0x9adf('0x30'))](_0x9adf('0x34')+_0x2dfb1c);}if(!_[_0x9adf('0x35')](_0x2dfb1c,_0x54a0eb[_0x9adf('0x23')][_0x9adf('0x33')])){throw new db[(_0x9adf('0x26'))][(_0x9adf('0x30'))](_0x9adf('0x36')+_0x2dfb1c);}_0x5cd919[_0x54a0eb[_0x9adf('0x23')][_0x9adf('0x33')]]=_0x54a0eb[_0x9adf('0x23')][_0x9adf('0x2f')];})[_0x9adf('0xe')](function(){return db[_0x9adf('0x37')][_0x9adf('0x38')]({'where':{'id':_0x54a0eb[_0x9adf('0x39')]['id']},'include':[{'model':db[_0x9adf('0x3a')],'as':_0x9adf('0x3b'),'include':[{'model':db[_0x9adf('0x24')],'as':_0x9adf('0x3c'),'where':_0x5cd919,'limit':0x1,'order':[[_0x9adf('0x2b'),_0x9adf('0x3d')]]}]},{'model':db[_0x9adf('0x3e')],'as':_0x9adf('0x3f')}]});})[_0x9adf('0xe')](function(_0x1b89eb){if(_0x1b89eb&&_0x1b89eb[_0x9adf('0x3b')]){var _0x1d0025=_0x1b89eb[_0x9adf('0x40')]({'plain':!![]});_0x2b4619[_0x9adf('0x39')]=_0x1d0025;_0x2b4619[_0x9adf('0x41')]=_0x1d0025[_0x9adf('0x3f')];_0x2b4619[_0x9adf('0x42')]=_0x1d0025[_0x9adf('0x3b')];_0x2b4619[_0x9adf('0x41')]=_[_0x9adf('0x43')](_0x2b4619[_0x9adf('0x41')],[_0x9adf('0x44')],[_0x9adf('0x45')]);if(_0x2b4619[_0x9adf('0x39')][_0x9adf('0x3f')]){delete _0x2b4619[_0x9adf('0x39')]['Applications'];}if(_0x2b4619[_0x9adf('0x39')][_0x9adf('0x3b')]&&_0x2b4619[_0x9adf('0x39')]['List'][_0x9adf('0x3c')][_0x9adf('0x46')]){return _0x2b4619[_0x9adf('0x39')][_0x9adf('0x3b')][_0x9adf('0x3c')][0x0];}var _0x5d005c=_[_0x9adf('0xb')](_0x54a0eb[_0x9adf('0x23')],{'firstName':_0x54a0eb[_0x9adf('0x23')][_0x9adf('0x2f')],'ListId':_0x1d0025[_0x9adf('0x2d')]});_0x5d005c[_0x54a0eb[_0x9adf('0x23')]['mapKey']]=_0x54a0eb[_0x9adf('0x23')][_0x9adf('0x2f')];return db[_0x9adf('0x24')][_0x9adf('0x47')](_0x5d005c,{'fields':_0x3706bd,'raw':!![]});}})[_0x9adf('0xe')](function(_0x38eea7){_0x2b4619['contact']=_0x38eea7;if(_0x38eea7){var _0xc3355c={'ContactId':_0x38eea7['id'],'FaxAccountId':_0x54a0eb[_0x9adf('0x39')]['id'],'fax':_0x38eea7[_0x9adf('0x48')]};return db['FaxInteraction'][_0x9adf('0x38')]({'where':{'ContactId':_0x38eea7['id'],'closed':![],'FaxAccountId':_0x54a0eb['account']['id']}})[_0x9adf('0xe')](function(_0x1a141c){if(_0x1a141c){return[_0x1a141c,![]];}return db[_0x9adf('0x49')]['create'](_0xc3355c)[_0x9adf('0xe')](function(_0xecd997){return[_0xecd997,!![]];});});}else{throw new Error('Contact\x20not\x20found');}})[_0x9adf('0x4a')](function(_0x6167f3,_0x1a2729){var _0x21b456=_0x6167f3['get']({'plain':!![]});if(_0x1a2729){if(_0x2b4619['account'][_0x9adf('0x4b')]){_0x2b4619[_0x9adf('0x41')]['push']({'id':0x0,'priority':_0x2b4619[_0x9adf('0x41')]['length']+0x1,'app':_0x9adf('0x4c'),'appdata':_0x9adf('0x4d'),'interval':_0x9adf('0x4e')});}_0x21b456['created']=!![];}else{_0x21b456[_0x9adf('0x4f')]=![];}_0x2b4619['interaction']=_0x21b456;return db[_0x9adf('0x50')][_0x9adf('0x47')]({'body':_0x54a0eb[_0x9adf('0x23')][_0x9adf('0x23')],'FaxAccountId':_0x54a0eb[_0x9adf('0x39')]['id'],'FaxInteractionId':_0x6167f3['id'],'direction':'in','ContactId':_0x6167f3['ContactId'],'AttachmentId':_0x54a0eb[_0x9adf('0x23')][_0x9adf('0x51')]});})[_0x9adf('0xe')](function(_0x526265){_0x2b4619['message']=_0x526265;if(_0x2b4619[_0x9adf('0x52')][_0x9adf('0x53')]){return db[_0x9adf('0x54')][_0x9adf('0x38')]({'attributes':['id',_0x9adf('0x55')],'where':{'id':_0x2b4619[_0x9adf('0x52')][_0x9adf('0x53')]}})[_0x9adf('0xe')](function(_0x173474){if(_0x173474){_0x2b4619[_0x9adf('0x41')][_0x9adf('0x56')]({'id':0x0,'priority':0x0,'app':'agent','appdata':_0x173474[_0x9adf('0x55')]+','+(_0x2b4619['account'][_0x9adf('0x57')]||0xa),'interval':_0x9adf('0x4e')});}return respondWithRpcPromise(_0x9adf('0x58'),_0x9adf('0x59'),_0x2b4619);});}return respondWithRpcPromise(_0x9adf('0x58'),_0x9adf('0x59'),_0x2b4619);})[_0x9adf('0xe')](function(_0xa09dfc){_0x3a9f6d(_0xa09dfc);})[_0x9adf('0x18')](function(_0x5c4296){_0x5d3a8e(_0x3408b0[_0x9adf('0x15')](0x1f4,_0x5c4296[_0x9adf('0x16')]));});});};
\ No newline at end of file
index 8f77d90..6df124d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ed3=['removeListener','faxAccount:','./faxAccount.events','remove','emit'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x4ed3,0xbb));var _0x34ed=function(_0x20620f,_0x37c815){_0x20620f=_0x20620f-0x0;var _0x593a2f=_0x4ed3[_0x20620f];return _0x593a2f;};'use strict';var FaxAccountEvents=require(_0x34ed('0x0'));var events=['save',_0x34ed('0x1'),'update'];function createListener(_0x4edee9,_0x17f32c){return function(_0x1ddaaa){_0x17f32c[_0x34ed('0x2')](_0x4edee9,_0x1ddaaa);};}function removeListener(_0x3d4a31,_0x11294b){return function(){FaxAccountEvents[_0x34ed('0x3')](_0x3d4a31,_0x11294b);};}exports['register']=function(_0x4232dd){for(var _0x50ecef=0x0,_0x2986c8=events['length'];_0x50ecef<_0x2986c8;_0x50ecef++){var _0x44a0ac=events[_0x50ecef];var _0x16c0f7=createListener(_0x34ed('0x4')+_0x44a0ac,_0x4232dd);FaxAccountEvents['on'](_0x44a0ac,_0x16c0f7);}};
\ No newline at end of file
+var _0xb944=['update','emit','removeListener','register','length','faxAccount:','./faxAccount.events','save','remove'];(function(_0x4e64ee,_0x4bd994){var _0x3b6caf=function(_0x196d24){while(--_0x196d24){_0x4e64ee['push'](_0x4e64ee['shift']());}};_0x3b6caf(++_0x4bd994);}(_0xb944,0x19b));var _0x4b94=function(_0x151f72,_0x3117de){_0x151f72=_0x151f72-0x0;var _0x3ee71b=_0xb944[_0x151f72];return _0x3ee71b;};'use strict';var FaxAccountEvents=require(_0x4b94('0x0'));var events=[_0x4b94('0x1'),_0x4b94('0x2'),_0x4b94('0x3')];function createListener(_0x2ac3a4,_0x36fb05){return function(_0x4de883){_0x36fb05[_0x4b94('0x4')](_0x2ac3a4,_0x4de883);};}function removeListener(_0x4f983f,_0x129208){return function(){FaxAccountEvents[_0x4b94('0x5')](_0x4f983f,_0x129208);};}exports[_0x4b94('0x6')]=function(_0x4ce66b){for(var _0x353a18=0x0,_0x4cfd0d=events[_0x4b94('0x7')];_0x353a18<_0x4cfd0d;_0x353a18++){var _0x38924b=events[_0x353a18];var _0x4f21ab=createListener(_0x4b94('0x8')+_0x38924b,_0x4ce66b);FaxAccountEvents['on'](_0x38924b,_0x4f21ab);}};
\ No newline at end of file
index 4ffa875..60c2584 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe3fe=['express','Router','get','index','describe','/:id','isAuthenticated','getDispositions','/:id/canned_answers','/:id/interactions','getInteractions','/:id/applications','getApplications','/:id/messages','getMessages','/:id/users','post','/:id/dispositions','addDisposition','addInteraction','/updateaccountapplications','updateAccountApplications','/:id/send','send','addAgents','put','update','delete','destroy','removeDispositions','removeAgents','exports','multer','util','path','connect-timeout'];(function(_0x5678b5,_0x1c4aa8){var _0x4c09a5=function(_0x2aa89a){while(--_0x2aa89a){_0x5678b5['push'](_0x5678b5['shift']());}};_0x4c09a5(++_0x1c4aa8);}(_0xe3fe,0xd4));var _0xee3f=function(_0x4b1997,_0x1ec965){_0x4b1997=_0x4b1997-0x0;var _0x2e330a=_0xe3fe[_0x4b1997];return _0x2e330a;};'use strict';var multer=require(_0xee3f('0x0'));var util=require(_0xee3f('0x1'));var path=require(_0xee3f('0x2'));var timeout=require(_0xee3f('0x3'));var express=require(_0xee3f('0x4'));var router=express[_0xee3f('0x5')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./faxAccount.controller');router[_0xee3f('0x6')]('/',auth['isAuthenticated'](),controller[_0xee3f('0x7')]);router['get']('/describe',auth['isAuthenticated'](),controller[_0xee3f('0x8')]);router[_0xee3f('0x6')](_0xee3f('0x9'),auth['isAuthenticated'](),controller['show']);router[_0xee3f('0x6')]('/:id/dispositions',auth[_0xee3f('0xa')](),controller[_0xee3f('0xb')]);router[_0xee3f('0x6')](_0xee3f('0xc'),auth[_0xee3f('0xa')](),controller['getAnswers']);router[_0xee3f('0x6')](_0xee3f('0xd'),auth[_0xee3f('0xa')](),controller[_0xee3f('0xe')]);router[_0xee3f('0x6')](_0xee3f('0xf'),auth[_0xee3f('0xa')](),controller[_0xee3f('0x10')]);router[_0xee3f('0x6')](_0xee3f('0x11'),auth['isAuthenticated'](),controller[_0xee3f('0x12')]);router[_0xee3f('0x6')](_0xee3f('0x13'),auth['isAuthenticated'](),controller['getAgents']);router[_0xee3f('0x14')]('/',auth['isAuthenticated'](),controller['create']);router[_0xee3f('0x14')](_0xee3f('0x15'),auth['isAuthenticated'](),controller[_0xee3f('0x16')]);router[_0xee3f('0x14')](_0xee3f('0xc'),auth[_0xee3f('0xa')](),controller['addAnswer']);router[_0xee3f('0x14')](_0xee3f('0xd'),auth[_0xee3f('0xa')](),controller[_0xee3f('0x17')]);router[_0xee3f('0x14')](_0xee3f('0xf'),auth['isAuthenticated'](),controller['addApplications']);router[_0xee3f('0x14')]('/addaccountapplications',auth[_0xee3f('0xa')](),controller['addAccountApplications']);router['post'](_0xee3f('0x18'),auth[_0xee3f('0xa')](),controller[_0xee3f('0x19')]);router['post'](_0xee3f('0x1a'),auth[_0xee3f('0xa')](),controller[_0xee3f('0x1b')]);router['post'](_0xee3f('0x13'),auth['isAuthenticated'](),controller[_0xee3f('0x1c')]);router[_0xee3f('0x1d')](_0xee3f('0x9'),auth[_0xee3f('0xa')](),controller[_0xee3f('0x1e')]);router[_0xee3f('0x1f')](_0xee3f('0x9'),auth['isAuthenticated'](),controller[_0xee3f('0x20')]);router[_0xee3f('0x1f')]('/:id/dispositions',auth['isAuthenticated'](),controller[_0xee3f('0x21')]);router[_0xee3f('0x1f')](_0xee3f('0xc'),auth[_0xee3f('0xa')](),controller['removeAnswers']);router[_0xee3f('0x1f')](_0xee3f('0x13'),auth[_0xee3f('0xa')](),controller[_0xee3f('0x22')]);module[_0xee3f('0x23')]=router;
\ No newline at end of file
+var _0x0d76=['destroy','removeDispositions','removeAnswers','removeAgents','exports','multer','path','express','Router','../../components/auth/service','./faxAccount.controller','index','get','/describe','describe','/:id','isAuthenticated','show','/:id/dispositions','getDispositions','getAnswers','/:id/interactions','getInteractions','getApplications','/:id/messages','/:id/users','getAgents','post','create','addDisposition','/:id/canned_answers','addAnswer','addInteraction','addApplications','/updateaccountapplications','updateAccountApplications','update','delete'];(function(_0x18f64a,_0x1c8248){var _0x44687f=function(_0x1234ad){while(--_0x1234ad){_0x18f64a['push'](_0x18f64a['shift']());}};_0x44687f(++_0x1c8248);}(_0x0d76,0xe9));var _0x60d7=function(_0x1c969c,_0x2c0fbf){_0x1c969c=_0x1c969c-0x0;var _0x421d03=_0x0d76[_0x1c969c];return _0x421d03;};'use strict';var multer=require(_0x60d7('0x0'));var util=require('util');var path=require(_0x60d7('0x1'));var timeout=require('connect-timeout');var express=require(_0x60d7('0x2'));var router=express[_0x60d7('0x3')]();var auth=require(_0x60d7('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x60d7('0x5'));router['get']('/',auth['isAuthenticated'](),controller[_0x60d7('0x6')]);router[_0x60d7('0x7')](_0x60d7('0x8'),auth['isAuthenticated'](),controller[_0x60d7('0x9')]);router[_0x60d7('0x7')](_0x60d7('0xa'),auth[_0x60d7('0xb')](),controller[_0x60d7('0xc')]);router[_0x60d7('0x7')](_0x60d7('0xd'),auth[_0x60d7('0xb')](),controller[_0x60d7('0xe')]);router[_0x60d7('0x7')]('/:id/canned_answers',auth['isAuthenticated'](),controller[_0x60d7('0xf')]);router[_0x60d7('0x7')](_0x60d7('0x10'),auth['isAuthenticated'](),controller[_0x60d7('0x11')]);router['get']('/:id/applications',auth['isAuthenticated'](),controller[_0x60d7('0x12')]);router[_0x60d7('0x7')](_0x60d7('0x13'),auth[_0x60d7('0xb')](),controller['getMessages']);router[_0x60d7('0x7')](_0x60d7('0x14'),auth[_0x60d7('0xb')](),controller[_0x60d7('0x15')]);router[_0x60d7('0x16')]('/',auth[_0x60d7('0xb')](),controller[_0x60d7('0x17')]);router[_0x60d7('0x16')](_0x60d7('0xd'),auth[_0x60d7('0xb')](),controller[_0x60d7('0x18')]);router[_0x60d7('0x16')](_0x60d7('0x19'),auth[_0x60d7('0xb')](),controller[_0x60d7('0x1a')]);router[_0x60d7('0x16')](_0x60d7('0x10'),auth[_0x60d7('0xb')](),controller[_0x60d7('0x1b')]);router['post']('/:id/applications',auth[_0x60d7('0xb')](),controller[_0x60d7('0x1c')]);router['post']('/addaccountapplications',auth['isAuthenticated'](),controller['addAccountApplications']);router[_0x60d7('0x16')](_0x60d7('0x1d'),auth[_0x60d7('0xb')](),controller[_0x60d7('0x1e')]);router[_0x60d7('0x16')]('/:id/send',auth['isAuthenticated'](),controller['send']);router[_0x60d7('0x16')]('/:id/users',auth[_0x60d7('0xb')](),controller['addAgents']);router['put'](_0x60d7('0xa'),auth[_0x60d7('0xb')](),controller[_0x60d7('0x1f')]);router[_0x60d7('0x20')](_0x60d7('0xa'),auth[_0x60d7('0xb')](),controller[_0x60d7('0x21')]);router[_0x60d7('0x20')](_0x60d7('0xd'),auth[_0x60d7('0xb')](),controller[_0x60d7('0x22')]);router[_0x60d7('0x20')](_0x60d7('0x19'),auth['isAuthenticated'](),controller[_0x60d7('0x23')]);router[_0x60d7('0x20')](_0x60d7('0x14'),auth[_0x60d7('0xb')](),controller[_0x60d7('0x24')]);module[_0x60d7('0x25')]=router;
\ No newline at end of file
index 6e05be0..7d8e77b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd1f1=['TEXT','*,*,*,*','sequelize','exports','STRING','noop'];(function(_0x50ae0b,_0x4e6668){var _0x5d3331=function(_0x5fc394){while(--_0x5fc394){_0x50ae0b['push'](_0x50ae0b['shift']());}};_0x5d3331(++_0x4e6668);}(_0xd1f1,0xbc));var _0x1d1f=function(_0x4690f1,_0x10f22f){_0x4690f1=_0x4690f1-0x0;var _0x5c2b55=_0xd1f1[_0x4690f1];return _0x5c2b55;};'use strict';var Sequelize=require(_0x1d1f('0x0'));module[_0x1d1f('0x1')]={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize[_0x1d1f('0x2')],'allowNull':![],'defaultValue':_0x1d1f('0x3')},'appdata':{'type':Sequelize[_0x1d1f('0x4')]()},'description':{'type':Sequelize[_0x1d1f('0x2')]},'interval':{'type':Sequelize[_0x1d1f('0x2')],'defaultValue':_0x1d1f('0x5')}};
\ No newline at end of file
+var _0x6a58=['STRING','TEXT','*,*,*,*','sequelize','exports'];(function(_0x4c00bd,_0x5172dc){var _0x520935=function(_0xb920d5){while(--_0xb920d5){_0x4c00bd['push'](_0x4c00bd['shift']());}};_0x520935(++_0x5172dc);}(_0x6a58,0x120));var _0x86a5=function(_0x2c9b79,_0x7cf58b){_0x2c9b79=_0x2c9b79-0x0;var _0x265032=_0x6a58[_0x2c9b79];return _0x265032;};'use strict';var Sequelize=require(_0x86a5('0x0'));module[_0x86a5('0x1')]={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize[_0x86a5('0x2')],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize[_0x86a5('0x3')]()},'description':{'type':Sequelize['STRING']},'interval':{'type':Sequelize[_0x86a5('0x2')],'defaultValue':_0x86a5('0x4')}};
\ No newline at end of file
index c3e2c87..abd9a8c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b75=['sendStatus','status','end','json','count','offset','limit','set','reject','save','update','destroy','then','error','stack','name','send','index','FaxApplication','model','keys','query','intersection','fields','attributes','hasOwnProperty','nolimit','sort','pick','filters','filter','where','merge','map','key','VIRTUAL','field','options','include','findAll','rows','show','params','rawAttributes','length','includeAll','find','catch','create','body','html-pdf','eml-format','zip-dir','moment','bluebird','mustache','util','path','ejs','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/environment'];(function(_0x38e1b2,_0x5769a2){var _0x5c5fa5=function(_0xc7c26f){while(--_0xc7c26f){_0x38e1b2['push'](_0x38e1b2['shift']());}};_0x5c5fa5(++_0x5769a2);}(_0x5b75,0x1e2));var _0x55b7=function(_0x16995f,_0x326c0f){_0x16995f=_0x16995f-0x0;var _0x37931a=_0x5b75[_0x16995f];return _0x37931a;};'use strict';var pdf=require(_0x55b7('0x0'));var emlformat=require(_0x55b7('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x55b7('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x55b7('0x3'));var BPromise=require(_0x55b7('0x4'));var Mustache=require(_0x55b7('0x5'));var util=require(_0x55b7('0x6'));var path=require(_0x55b7('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x55b7('0x8'));var fs=require('fs');var _=require(_0x55b7('0x9'));var squel=require(_0x55b7('0xa'));var crypto=require(_0x55b7('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x55b7('0xc'));var toCsv=require(_0x55b7('0xd'));var querystring=require(_0x55b7('0xe'));var Papa=require(_0x55b7('0xf'));var Redis=require(_0x55b7('0x10'));var authService=require(_0x55b7('0x11'));var qs=require(_0x55b7('0x12'));var hardwareService=require(_0x55b7('0x13'));var logger=require('../../config/logger')(_0x55b7('0x14'));var utils=require('../../config/utils');var config=require(_0x55b7('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x402e50,_0x207c35){_0x207c35=_0x207c35||0xcc;return function(_0xb284de){if(_0xb284de){return _0x402e50[_0x55b7('0x16')](_0x207c35);}return _0x402e50[_0x55b7('0x17')](_0x207c35)[_0x55b7('0x18')]();};}function respondWithResult(_0x4a3392,_0x3e4170){_0x3e4170=_0x3e4170||0xc8;return function(_0x23a0ae){if(_0x23a0ae){return _0x4a3392[_0x55b7('0x17')](_0x3e4170)[_0x55b7('0x19')](_0x23a0ae);}};}function respondWithFilteredResult(_0x22fc43,_0x3033b3){return function(_0x43d1cc){if(_0x43d1cc){var _0x475b25=_0x43d1cc[_0x55b7('0x1a')],_0x17de73=_0x3033b3[_0x55b7('0x1b')],_0x3f5b16=_0x3033b3[_0x55b7('0x1b')]+_0x3033b3[_0x55b7('0x1c')],_0x142769;if(_0x3f5b16>=_0x475b25){_0x3f5b16=_0x475b25;_0x142769=0xc8;}else{_0x142769=0xce;}_0x22fc43['status'](_0x142769);return _0x22fc43[_0x55b7('0x1d')]('Content-Range',_0x17de73+'-'+_0x3f5b16+'/'+_0x475b25)['json'](_0x43d1cc);}return null;};}function patchUpdates(_0x1af9cf){return function(_0x4d5999){try{jsonpatch['apply'](_0x4d5999,_0x1af9cf,!![]);}catch(_0x4c73e9){return BPromise[_0x55b7('0x1e')](_0x4c73e9);}return _0x4d5999[_0x55b7('0x1f')]();};}function saveUpdates(_0x2a0466,_0x8037af){return function(_0x4bef10){if(_0x4bef10){return _0x4bef10[_0x55b7('0x20')](_0x2a0466)['then'](function(_0x2492a1){return _0x2492a1;});}return null;};}function removeEntity(_0x426e1f,_0x500243){return function(_0xcc388d){if(_0xcc388d){return _0xcc388d[_0x55b7('0x21')]()[_0x55b7('0x22')](function(){_0x426e1f[_0x55b7('0x17')](0xcc)[_0x55b7('0x18')]();});}};}function handleEntityNotFound(_0x38225e,_0x3e7b4b){return function(_0x4e7e6e){if(!_0x4e7e6e){_0x38225e['sendStatus'](0x194);}return _0x4e7e6e;};}function handleError(_0x1011b8,_0x45f18c){_0x45f18c=_0x45f18c||0x1f4;return function(_0x237c6c){logger[_0x55b7('0x23')](_0x237c6c[_0x55b7('0x24')]);if(_0x237c6c[_0x55b7('0x25')]){delete _0x237c6c[_0x55b7('0x25')];}_0x1011b8['status'](_0x45f18c)[_0x55b7('0x26')](_0x237c6c);};}exports[_0x55b7('0x27')]=function(_0x3e9574,_0x1f18ee){var _0x296cad={},_0x936e46={},_0x43dfc6={'count':0x0,'rows':[]};var _0x38baa8=db[_0x55b7('0x28')]['rawAttributes'];_0x936e46[_0x55b7('0x29')]=_[_0x55b7('0x2a')](_0x38baa8);_0x936e46['query']=_[_0x55b7('0x2a')](_0x3e9574[_0x55b7('0x2b')]);_0x936e46['filters']=_['intersection'](_0x936e46[_0x55b7('0x29')],_0x936e46[_0x55b7('0x2b')]);_0x296cad['attributes']=_[_0x55b7('0x2c')](_0x936e46[_0x55b7('0x29')],qs[_0x55b7('0x2d')](_0x3e9574[_0x55b7('0x2b')]['fields']));_0x296cad[_0x55b7('0x2e')]=_0x296cad[_0x55b7('0x2e')]['length']?_0x296cad[_0x55b7('0x2e')]:_0x936e46[_0x55b7('0x29')];if(!_0x3e9574[_0x55b7('0x2b')][_0x55b7('0x2f')](_0x55b7('0x30'))){_0x296cad['limit']=qs[_0x55b7('0x1c')](_0x3e9574[_0x55b7('0x2b')]['limit']);_0x296cad[_0x55b7('0x1b')]=qs[_0x55b7('0x1b')](_0x3e9574['query'][_0x55b7('0x1b')]);}_0x296cad['order']=qs[_0x55b7('0x31')](_0x3e9574[_0x55b7('0x2b')]['sort']);_0x296cad['where']=qs['filters'](_[_0x55b7('0x32')](_0x3e9574['query'],_0x936e46[_0x55b7('0x33')]));if(_0x3e9574[_0x55b7('0x2b')][_0x55b7('0x34')]){_0x296cad[_0x55b7('0x35')]=_[_0x55b7('0x36')](_0x296cad['where'],{'$or':_[_0x55b7('0x37')](_0x38baa8,function(_0x2e7e22){if(_0x2e7e22['type'][_0x55b7('0x38')]!==_0x55b7('0x39')){var _0x242a2e={};_0x242a2e[_0x2e7e22[_0x55b7('0x3a')]]={'$like':'%'+_0x3e9574[_0x55b7('0x2b')][_0x55b7('0x34')]+'%'};return _0x242a2e;}})});}_0x296cad=_['merge']({},_0x296cad,_0x3e9574[_0x55b7('0x3b')]);var _0x550c62={'where':_0x296cad[_0x55b7('0x35')]};return db['FaxApplication'][_0x55b7('0x1a')](_0x550c62)[_0x55b7('0x22')](function(_0x29c9c2){_0x43dfc6['count']=_0x29c9c2;if(_0x3e9574[_0x55b7('0x2b')]['includeAll']){_0x296cad[_0x55b7('0x3c')]=[{'all':!![]}];}return db[_0x55b7('0x28')][_0x55b7('0x3d')](_0x296cad);})['then'](function(_0x4e5f82){_0x43dfc6[_0x55b7('0x3e')]=_0x4e5f82;return _0x43dfc6;})['then'](respondWithFilteredResult(_0x1f18ee,_0x296cad))['catch'](handleError(_0x1f18ee,null));};exports[_0x55b7('0x3f')]=function(_0x2436ee,_0x19a383){var _0x3119bf={'raw':!![],'where':{'id':_0x2436ee[_0x55b7('0x40')]['id']}},_0xe18a43={};_0xe18a43[_0x55b7('0x29')]=_['keys'](db['FaxApplication'][_0x55b7('0x41')]);_0xe18a43[_0x55b7('0x2b')]=_[_0x55b7('0x2a')](_0x2436ee['query']);_0xe18a43[_0x55b7('0x33')]=_['intersection'](_0xe18a43[_0x55b7('0x29')],_0xe18a43[_0x55b7('0x2b')]);_0x3119bf[_0x55b7('0x2e')]=_['intersection'](_0xe18a43[_0x55b7('0x29')],qs[_0x55b7('0x2d')](_0x2436ee[_0x55b7('0x2b')]['fields']));_0x3119bf[_0x55b7('0x2e')]=_0x3119bf['attributes'][_0x55b7('0x42')]?_0x3119bf['attributes']:_0xe18a43[_0x55b7('0x29')];if(_0x2436ee[_0x55b7('0x2b')][_0x55b7('0x43')]){_0x3119bf['include']=[{'all':!![]}];}_0x3119bf=_['merge']({},_0x3119bf,_0x2436ee['options']);return db['FaxApplication'][_0x55b7('0x44')](_0x3119bf)[_0x55b7('0x22')](handleEntityNotFound(_0x19a383,null))[_0x55b7('0x22')](respondWithResult(_0x19a383,null))[_0x55b7('0x45')](handleError(_0x19a383,null));};exports[_0x55b7('0x46')]=function(_0x24dd9d,_0x1525c0){return db[_0x55b7('0x28')][_0x55b7('0x46')](_0x24dd9d[_0x55b7('0x47')],{})[_0x55b7('0x22')](respondWithResult(_0x1525c0,0xc9))[_0x55b7('0x45')](handleError(_0x1525c0,null));};exports[_0x55b7('0x20')]=function(_0x4b0414,_0x245553){if(_0x4b0414[_0x55b7('0x47')]['id']){delete _0x4b0414[_0x55b7('0x47')]['id'];}return db[_0x55b7('0x28')][_0x55b7('0x44')]({'where':{'id':_0x4b0414[_0x55b7('0x40')]['id']}})[_0x55b7('0x22')](handleEntityNotFound(_0x245553,null))[_0x55b7('0x22')](saveUpdates(_0x4b0414['body'],null))[_0x55b7('0x22')](respondWithResult(_0x245553,null))[_0x55b7('0x45')](handleError(_0x245553,null));};exports[_0x55b7('0x21')]=function(_0x50e043,_0xad20f){return db['FaxApplication'][_0x55b7('0x44')]({'where':{'id':_0x50e043[_0x55b7('0x40')]['id']}})[_0x55b7('0x22')](handleEntityNotFound(_0xad20f,null))[_0x55b7('0x22')](removeEntity(_0xad20f,null))[_0x55b7('0x45')](handleError(_0xad20f,null));};
\ No newline at end of file
+var _0x83ae=['map','key','VIRTUAL','field','filter','merge','options','count','includeAll','findAll','rows','catch','show','params','length','find','create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','squel','crypto','desk.js','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','offset','limit','set','apply','update','then','destroy','error','stack','name','send','index','FaxApplication','rawAttributes','keys','query','filters','intersection','model','attributes','fields','nolimit','sort','pick','where'];(function(_0x30f63d,_0xf0902b){var _0x4f59f4=function(_0x4479d7){while(--_0x4479d7){_0x30f63d['push'](_0x30f63d['shift']());}};_0x4f59f4(++_0xf0902b);}(_0x83ae,0x175));var _0xe83a=function(_0x3a5746,_0x2778af){_0x3a5746=_0x3a5746-0x0;var _0x4ee4bc=_0x83ae[_0x3a5746];return _0x4ee4bc;};'use strict';var pdf=require(_0xe83a('0x0'));var emlformat=require(_0xe83a('0x1'));var rimraf=require(_0xe83a('0x2'));var zipdir=require(_0xe83a('0x3'));var jsonpatch=require(_0xe83a('0x4'));var rp=require(_0xe83a('0x5'));var moment=require(_0xe83a('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xe83a('0x7'));var util=require(_0xe83a('0x8'));var path=require(_0xe83a('0x9'));var sox=require(_0xe83a('0xa'));var csv=require(_0xe83a('0xb'));var ejs=require(_0xe83a('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0xe83a('0xd'));var crypto=require(_0xe83a('0xe'));var jsforce=require('jsforce');var deskjs=require(_0xe83a('0xf'));var toCsv=require(_0xe83a('0xb'));var querystring=require('querystring');var Papa=require(_0xe83a('0x10'));var Redis=require(_0xe83a('0x11'));var authService=require(_0xe83a('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xe83a('0x13'));var logger=require(_0xe83a('0x14'))(_0xe83a('0x15'));var utils=require(_0xe83a('0x16'));var config=require(_0xe83a('0x17'));var db=require(_0xe83a('0x18'))['db'];function respondWithStatusCode(_0x36cf98,_0x27b0d8){_0x27b0d8=_0x27b0d8||0xcc;return function(_0x302be4){if(_0x302be4){return _0x36cf98['sendStatus'](_0x27b0d8);}return _0x36cf98[_0xe83a('0x19')](_0x27b0d8)[_0xe83a('0x1a')]();};}function respondWithResult(_0x1187af,_0x2beeab){_0x2beeab=_0x2beeab||0xc8;return function(_0x4974a2){if(_0x4974a2){return _0x1187af['status'](_0x2beeab)[_0xe83a('0x1b')](_0x4974a2);}};}function respondWithFilteredResult(_0x25d996,_0x562116){return function(_0x241ca8){if(_0x241ca8){var _0x455928=_0x241ca8['count'],_0x4fe02d=_0x562116[_0xe83a('0x1c')],_0x1a6c84=_0x562116[_0xe83a('0x1c')]+_0x562116[_0xe83a('0x1d')],_0x5ae95f;if(_0x1a6c84>=_0x455928){_0x1a6c84=_0x455928;_0x5ae95f=0xc8;}else{_0x5ae95f=0xce;}_0x25d996[_0xe83a('0x19')](_0x5ae95f);return _0x25d996[_0xe83a('0x1e')]('Content-Range',_0x4fe02d+'-'+_0x1a6c84+'/'+_0x455928)[_0xe83a('0x1b')](_0x241ca8);}return null;};}function patchUpdates(_0x2f66f4){return function(_0x2e3a2f){try{jsonpatch[_0xe83a('0x1f')](_0x2e3a2f,_0x2f66f4,!![]);}catch(_0x4ebc1d){return BPromise['reject'](_0x4ebc1d);}return _0x2e3a2f['save']();};}function saveUpdates(_0x430583,_0x46f195){return function(_0x45fad0){if(_0x45fad0){return _0x45fad0[_0xe83a('0x20')](_0x430583)[_0xe83a('0x21')](function(_0x39c8ad){return _0x39c8ad;});}return null;};}function removeEntity(_0x4154e,_0x56ac76){return function(_0x1c66b7){if(_0x1c66b7){return _0x1c66b7[_0xe83a('0x22')]()[_0xe83a('0x21')](function(){_0x4154e[_0xe83a('0x19')](0xcc)[_0xe83a('0x1a')]();});}};}function handleEntityNotFound(_0x2e0a89,_0x2486a4){return function(_0x3761bf){if(!_0x3761bf){_0x2e0a89['sendStatus'](0x194);}return _0x3761bf;};}function handleError(_0x573496,_0x497f5d){_0x497f5d=_0x497f5d||0x1f4;return function(_0xa409a3){logger[_0xe83a('0x23')](_0xa409a3[_0xe83a('0x24')]);if(_0xa409a3[_0xe83a('0x25')]){delete _0xa409a3[_0xe83a('0x25')];}_0x573496[_0xe83a('0x19')](_0x497f5d)[_0xe83a('0x26')](_0xa409a3);};}exports[_0xe83a('0x27')]=function(_0x525bee,_0x3caa19){var _0x5b4483={},_0x2cb4d5={},_0x574fe4={'count':0x0,'rows':[]};var _0x23e8a1=db[_0xe83a('0x28')][_0xe83a('0x29')];_0x2cb4d5['model']=_[_0xe83a('0x2a')](_0x23e8a1);_0x2cb4d5['query']=_[_0xe83a('0x2a')](_0x525bee[_0xe83a('0x2b')]);_0x2cb4d5[_0xe83a('0x2c')]=_[_0xe83a('0x2d')](_0x2cb4d5[_0xe83a('0x2e')],_0x2cb4d5[_0xe83a('0x2b')]);_0x5b4483[_0xe83a('0x2f')]=_[_0xe83a('0x2d')](_0x2cb4d5[_0xe83a('0x2e')],qs[_0xe83a('0x30')](_0x525bee['query'][_0xe83a('0x30')]));_0x5b4483[_0xe83a('0x2f')]=_0x5b4483['attributes']['length']?_0x5b4483[_0xe83a('0x2f')]:_0x2cb4d5['model'];if(!_0x525bee[_0xe83a('0x2b')]['hasOwnProperty'](_0xe83a('0x31'))){_0x5b4483[_0xe83a('0x1d')]=qs['limit'](_0x525bee['query'][_0xe83a('0x1d')]);_0x5b4483[_0xe83a('0x1c')]=qs['offset'](_0x525bee[_0xe83a('0x2b')]['offset']);}_0x5b4483['order']=qs[_0xe83a('0x32')](_0x525bee[_0xe83a('0x2b')]['sort']);_0x5b4483['where']=qs[_0xe83a('0x2c')](_[_0xe83a('0x33')](_0x525bee[_0xe83a('0x2b')],_0x2cb4d5['filters']));if(_0x525bee[_0xe83a('0x2b')]['filter']){_0x5b4483[_0xe83a('0x34')]=_['merge'](_0x5b4483[_0xe83a('0x34')],{'$or':_[_0xe83a('0x35')](_0x23e8a1,function(_0x48ae7c){if(_0x48ae7c['type'][_0xe83a('0x36')]!==_0xe83a('0x37')){var _0x2fe356={};_0x2fe356[_0x48ae7c[_0xe83a('0x38')]]={'$like':'%'+_0x525bee['query'][_0xe83a('0x39')]+'%'};return _0x2fe356;}})});}_0x5b4483=_[_0xe83a('0x3a')]({},_0x5b4483,_0x525bee[_0xe83a('0x3b')]);var _0x2bd79a={'where':_0x5b4483[_0xe83a('0x34')]};return db[_0xe83a('0x28')][_0xe83a('0x3c')](_0x2bd79a)['then'](function(_0x41ffb7){_0x574fe4['count']=_0x41ffb7;if(_0x525bee[_0xe83a('0x2b')][_0xe83a('0x3d')]){_0x5b4483['include']=[{'all':!![]}];}return db[_0xe83a('0x28')][_0xe83a('0x3e')](_0x5b4483);})[_0xe83a('0x21')](function(_0x4b3e12){_0x574fe4[_0xe83a('0x3f')]=_0x4b3e12;return _0x574fe4;})[_0xe83a('0x21')](respondWithFilteredResult(_0x3caa19,_0x5b4483))[_0xe83a('0x40')](handleError(_0x3caa19,null));};exports[_0xe83a('0x41')]=function(_0x18a39c,_0x200c55){var _0x33d62b={'raw':!![],'where':{'id':_0x18a39c[_0xe83a('0x42')]['id']}},_0x27098b={};_0x27098b[_0xe83a('0x2e')]=_[_0xe83a('0x2a')](db[_0xe83a('0x28')][_0xe83a('0x29')]);_0x27098b['query']=_[_0xe83a('0x2a')](_0x18a39c[_0xe83a('0x2b')]);_0x27098b[_0xe83a('0x2c')]=_[_0xe83a('0x2d')](_0x27098b[_0xe83a('0x2e')],_0x27098b[_0xe83a('0x2b')]);_0x33d62b[_0xe83a('0x2f')]=_[_0xe83a('0x2d')](_0x27098b[_0xe83a('0x2e')],qs[_0xe83a('0x30')](_0x18a39c[_0xe83a('0x2b')]['fields']));_0x33d62b['attributes']=_0x33d62b[_0xe83a('0x2f')][_0xe83a('0x43')]?_0x33d62b[_0xe83a('0x2f')]:_0x27098b[_0xe83a('0x2e')];if(_0x18a39c[_0xe83a('0x2b')][_0xe83a('0x3d')]){_0x33d62b['include']=[{'all':!![]}];}_0x33d62b=_[_0xe83a('0x3a')]({},_0x33d62b,_0x18a39c['options']);return db[_0xe83a('0x28')][_0xe83a('0x44')](_0x33d62b)['then'](handleEntityNotFound(_0x200c55,null))[_0xe83a('0x21')](respondWithResult(_0x200c55,null))[_0xe83a('0x40')](handleError(_0x200c55,null));};exports[_0xe83a('0x45')]=function(_0xc3a793,_0x5f4d84){return db[_0xe83a('0x28')]['create'](_0xc3a793[_0xe83a('0x46')],{})[_0xe83a('0x21')](respondWithResult(_0x5f4d84,0xc9))[_0xe83a('0x40')](handleError(_0x5f4d84,null));};exports[_0xe83a('0x20')]=function(_0x522f47,_0x24b1bb){if(_0x522f47[_0xe83a('0x46')]['id']){delete _0x522f47['body']['id'];}return db['FaxApplication'][_0xe83a('0x44')]({'where':{'id':_0x522f47[_0xe83a('0x42')]['id']}})[_0xe83a('0x21')](handleEntityNotFound(_0x24b1bb,null))['then'](saveUpdates(_0x522f47[_0xe83a('0x46')],null))['then'](respondWithResult(_0x24b1bb,null))[_0xe83a('0x40')](handleError(_0x24b1bb,null));};exports[_0xe83a('0x22')]=function(_0x16e1cd,_0x1073d1){return db[_0xe83a('0x28')][_0xe83a('0x44')]({'where':{'id':_0x16e1cd[_0xe83a('0x42')]['id']}})[_0xe83a('0x21')](handleEntityNotFound(_0x1073d1,null))[_0xe83a('0x21')](removeEntity(_0x1073d1,null))[_0xe83a('0x40')](handleError(_0x1073d1,null));};
\ No newline at end of file
index 66e4dae..610ec74 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ef6=['fax_applications','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','bluebird','request-promise','rimraf','../../config/environment','./faxApplication.attributes','exports','define','FaxApplication'];(function(_0x1b8fcb,_0x595318){var _0x4b1a3f=function(_0x47b3f2){while(--_0x47b3f2){_0x1b8fcb['push'](_0x1b8fcb['shift']());}};_0x4b1a3f(++_0x595318);}(_0x8ef6,0xf2));var _0x68ef=function(_0xea3ca1,_0x2290ce){_0xea3ca1=_0xea3ca1-0x0;var _0x2cf74=_0x8ef6[_0xea3ca1];return _0x2cf74;};'use strict';var _=require(_0x68ef('0x0'));var util=require(_0x68ef('0x1'));var logger=require(_0x68ef('0x2'))(_0x68ef('0x3'));var moment=require(_0x68ef('0x4'));var BPromise=require(_0x68ef('0x5'));var rp=require(_0x68ef('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0x68ef('0x7'));var config=require(_0x68ef('0x8'));var attributes=require(_0x68ef('0x9'));module[_0x68ef('0xa')]=function(_0x4d26e3,_0x4f77f3){return _0x4d26e3[_0x68ef('0xb')](_0x68ef('0xc'),attributes,{'tableName':_0x68ef('0xd'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':_0x68ef('0xe')});};
\ No newline at end of file
+var _0x6c7b=['fax_applications','utf8mb4','utf8mb4_unicode_ci','lodash','moment','request-promise','path','rimraf','./faxApplication.attributes','exports','define'];(function(_0x2002b3,_0x11e91c){var _0x2756f0=function(_0x4bf0b3){while(--_0x4bf0b3){_0x2002b3['push'](_0x2002b3['shift']());}};_0x2756f0(++_0x11e91c);}(_0x6c7b,0x10b));var _0xb6c7=function(_0x371ff2,_0x48ee02){_0x371ff2=_0x371ff2-0x0;var _0x769dcb=_0x6c7b[_0x371ff2];return _0x769dcb;};'use strict';var _=require(_0xb6c7('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0xb6c7('0x1'));var BPromise=require('bluebird');var rp=require(_0xb6c7('0x2'));var fs=require('fs');var path=require(_0xb6c7('0x3'));var rimraf=require(_0xb6c7('0x4'));var config=require('../../config/environment');var attributes=require(_0xb6c7('0x5'));module[_0xb6c7('0x6')]=function(_0xfe3eb9,_0x219abc){return _0xfe3eb9[_0xb6c7('0x7')]('FaxApplication',attributes,{'tableName':_0xb6c7('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xb6c7('0x9'),'collate':_0xb6c7('0xa')});};
\ No newline at end of file
index c5987c8..4dd6399 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1e3c=['rpc','../../config/environment','jayson/promise','client','request','then','info','request\x20sent','debug','stringify','error','FaxApplication,\x20%s,\x20%s','message','result','catch','update','options','raw','where','limit','UpdateFaxApplication','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x308bd1,_0x4a612a){var _0x19405d=function(_0x15792c){while(--_0x15792c){_0x308bd1['push'](_0x308bd1['shift']());}};_0x19405d(++_0x4a612a);}(_0x1e3c,0x123));var _0xc1e3=function(_0x381c55,_0x4311e6){_0x381c55=_0x381c55-0x0;var _0x2d5400=_0x1e3c[_0x381c55];return _0x2d5400;};'use strict';var _=require(_0xc1e3('0x0'));var util=require(_0xc1e3('0x1'));var moment=require(_0xc1e3('0x2'));var BPromise=require(_0xc1e3('0x3'));var rs=require(_0xc1e3('0x4'));var fs=require('fs');var Redis=require(_0xc1e3('0x5'));var db=require(_0xc1e3('0x6'))['db'];var utils=require(_0xc1e3('0x7'));var logger=require(_0xc1e3('0x8'))(_0xc1e3('0x9'));var config=require(_0xc1e3('0xa'));var jayson=require(_0xc1e3('0xb'));var client=jayson[_0xc1e3('0xc')]['http']({'port':0x232a});function respondWithRpcPromise(_0x5957a4,_0x20ab82,_0x374fcc){return new BPromise(function(_0x518f5b,_0x21c485){return client[_0xc1e3('0xd')](_0x5957a4,_0x374fcc)[_0xc1e3('0xe')](function(_0x4fc535){logger[_0xc1e3('0xf')]('FaxApplication,\x20%s,\x20%s',_0x20ab82,_0xc1e3('0x10'));logger[_0xc1e3('0x11')]('FaxApplication,\x20%s,\x20%s,\x20%s',_0x20ab82,_0xc1e3('0x10'),JSON[_0xc1e3('0x12')](_0x4fc535));if(_0x4fc535['error']){if(_0x4fc535[_0xc1e3('0x13')]['code']===0x1f4){logger['error'](_0xc1e3('0x14'),_0x20ab82,_0x4fc535[_0xc1e3('0x13')]['message']);return _0x21c485(_0x4fc535['error'][_0xc1e3('0x15')]);}logger['error'](_0xc1e3('0x14'),_0x20ab82,_0x4fc535[_0xc1e3('0x13')]['message']);return _0x518f5b(_0x4fc535[_0xc1e3('0x13')][_0xc1e3('0x15')]);}else{logger[_0xc1e3('0xf')]('FaxApplication,\x20%s,\x20%s',_0x20ab82,_0xc1e3('0x10'));_0x518f5b(_0x4fc535[_0xc1e3('0x16')]['message']);}})[_0xc1e3('0x17')](function(_0x37417a){logger['error'](_0xc1e3('0x14'),_0x20ab82,_0x37417a);_0x21c485(_0x37417a);});});}exports['UpdateFaxApplication']=function(_0x189ef0){var _0x11c39a=this;return new Promise(function(_0x19e318,_0x18e9be){return db['FaxApplication'][_0xc1e3('0x18')](_0x189ef0['body'],{'raw':_0x189ef0['options']?_0x189ef0[_0xc1e3('0x19')][_0xc1e3('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x189ef0[_0xc1e3('0x19')]?_0x189ef0[_0xc1e3('0x19')][_0xc1e3('0x1b')]||null:null,'attributes':_0x189ef0['options']?_0x189ef0[_0xc1e3('0x19')]['attributes']||null:null,'limit':_0x189ef0[_0xc1e3('0x19')]?_0x189ef0['options'][_0xc1e3('0x1c')]||null:null})['then'](function(_0x130884){logger['info']('UpdateFaxApplication',_0x189ef0);logger[_0xc1e3('0x11')](_0xc1e3('0x1d'),_0x189ef0,JSON[_0xc1e3('0x12')](_0x130884));_0x19e318(_0x130884);})[_0xc1e3('0x17')](function(_0x3a0970){logger[_0xc1e3('0x13')](_0xc1e3('0x1d'),_0x3a0970['message'],_0x189ef0);_0x18e9be(_0x11c39a[_0xc1e3('0x13')](0x1f4,_0x3a0970['message']));});});};
\ No newline at end of file
+var _0x5265=['../../config/environment','jayson/promise','http','request','info','request\x20sent','debug','FaxApplication,\x20%s,\x20%s,\x20%s','stringify','error','FaxApplication,\x20%s,\x20%s','message','result','catch','UpdateFaxApplication','FaxApplication','body','options','where','attributes','limit','then','util','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc'];(function(_0x2e76a7,_0x23871a){var _0x454cde=function(_0x51724d){while(--_0x51724d){_0x2e76a7['push'](_0x2e76a7['shift']());}};_0x454cde(++_0x23871a);}(_0x5265,0xc4));var _0x5526=function(_0x454b1f,_0x1d84b5){_0x454b1f=_0x454b1f-0x0;var _0x49c3ac=_0x5265[_0x454b1f];return _0x49c3ac;};'use strict';var _=require('lodash');var util=require(_0x5526('0x0'));var moment=require(_0x5526('0x1'));var BPromise=require('bluebird');var rs=require(_0x5526('0x2'));var fs=require('fs');var Redis=require(_0x5526('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x5526('0x4'));var logger=require(_0x5526('0x5'))(_0x5526('0x6'));var config=require(_0x5526('0x7'));var jayson=require(_0x5526('0x8'));var client=jayson['client'][_0x5526('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x9371b0,_0x365c15,_0x505d3e){return new BPromise(function(_0x468f69,_0x11414e){return client[_0x5526('0xa')](_0x9371b0,_0x505d3e)['then'](function(_0x325386){logger[_0x5526('0xb')]('FaxApplication,\x20%s,\x20%s',_0x365c15,_0x5526('0xc'));logger[_0x5526('0xd')](_0x5526('0xe'),_0x365c15,_0x5526('0xc'),JSON[_0x5526('0xf')](_0x325386));if(_0x325386[_0x5526('0x10')]){if(_0x325386[_0x5526('0x10')]['code']===0x1f4){logger[_0x5526('0x10')](_0x5526('0x11'),_0x365c15,_0x325386['error'][_0x5526('0x12')]);return _0x11414e(_0x325386[_0x5526('0x10')]['message']);}logger[_0x5526('0x10')](_0x5526('0x11'),_0x365c15,_0x325386[_0x5526('0x10')][_0x5526('0x12')]);return _0x468f69(_0x325386['error'][_0x5526('0x12')]);}else{logger[_0x5526('0xb')](_0x5526('0x11'),_0x365c15,_0x5526('0xc'));_0x468f69(_0x325386[_0x5526('0x13')]['message']);}})[_0x5526('0x14')](function(_0x4ef749){logger[_0x5526('0x10')](_0x5526('0x11'),_0x365c15,_0x4ef749);_0x11414e(_0x4ef749);});});}exports[_0x5526('0x15')]=function(_0x3c3244){var _0x406147=this;return new Promise(function(_0x3bd944,_0x22542b){return db[_0x5526('0x16')]['update'](_0x3c3244[_0x5526('0x17')],{'raw':_0x3c3244[_0x5526('0x18')]?_0x3c3244[_0x5526('0x18')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3c3244[_0x5526('0x18')]?_0x3c3244[_0x5526('0x18')][_0x5526('0x19')]||null:null,'attributes':_0x3c3244[_0x5526('0x18')]?_0x3c3244[_0x5526('0x18')][_0x5526('0x1a')]||null:null,'limit':_0x3c3244[_0x5526('0x18')]?_0x3c3244[_0x5526('0x18')][_0x5526('0x1b')]||null:null})[_0x5526('0x1c')](function(_0x465cae){logger[_0x5526('0xb')](_0x5526('0x15'),_0x3c3244);logger[_0x5526('0xd')]('UpdateFaxApplication',_0x3c3244,JSON[_0x5526('0xf')](_0x465cae));_0x3bd944(_0x465cae);})['catch'](function(_0x2dac4c){logger[_0x5526('0x10')]('UpdateFaxApplication',_0x2dac4c[_0x5526('0x12')],_0x3c3244);_0x22542b(_0x406147['error'](0x1f4,_0x2dac4c[_0x5526('0x12')]));});});};
\ No newline at end of file
index 65bdd51..a23d9a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e81=['destroy','exports','multer','util','path','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxApplication.controller','get','isAuthenticated','/:id','show','post','create','put','delete'];(function(_0x5e10cf,_0x5ce2fb){var _0x3af2f1=function(_0x546e11){while(--_0x546e11){_0x5e10cf['push'](_0x5e10cf['shift']());}};_0x3af2f1(++_0x5ce2fb);}(_0x4e81,0x1bc));var _0x14e8=function(_0x5d5bcb,_0x25e2ea){_0x5d5bcb=_0x5d5bcb-0x0;var _0x4ea5eb=_0x4e81[_0x5d5bcb];return _0x4ea5eb;};'use strict';var multer=require(_0x14e8('0x0'));var util=require(_0x14e8('0x1'));var path=require(_0x14e8('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require(_0x14e8('0x3'));var interaction=require(_0x14e8('0x4'));var config=require(_0x14e8('0x5'));var controller=require(_0x14e8('0x6'));router[_0x14e8('0x7')]('/',auth[_0x14e8('0x8')](),controller['index']);router['get'](_0x14e8('0x9'),auth[_0x14e8('0x8')](),controller[_0x14e8('0xa')]);router[_0x14e8('0xb')]('/',auth[_0x14e8('0x8')](),controller[_0x14e8('0xc')]);router[_0x14e8('0xd')](_0x14e8('0x9'),auth[_0x14e8('0x8')](),controller['update']);router[_0x14e8('0xe')](_0x14e8('0x9'),auth[_0x14e8('0x8')](),controller[_0x14e8('0xf')]);module[_0x14e8('0x10')]=router;
\ No newline at end of file
+var _0x8f4c=['update','delete','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./faxApplication.controller','isAuthenticated','post','create','put','/:id'];(function(_0xe255cf,_0x3d463b){var _0x263447=function(_0x7e0e5d){while(--_0x7e0e5d){_0xe255cf['push'](_0xe255cf['shift']());}};_0x263447(++_0x3d463b);}(_0x8f4c,0x113));var _0xc8f4=function(_0x22d398,_0x3d552a){_0x22d398=_0x22d398-0x0;var _0x18fa77=_0x8f4c[_0x22d398];return _0x18fa77;};'use strict';var multer=require(_0xc8f4('0x0'));var util=require(_0xc8f4('0x1'));var path=require(_0xc8f4('0x2'));var timeout=require(_0xc8f4('0x3'));var express=require(_0xc8f4('0x4'));var router=express[_0xc8f4('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0xc8f4('0x6'));var config=require(_0xc8f4('0x7'));var controller=require(_0xc8f4('0x8'));router['get']('/',auth[_0xc8f4('0x9')](),controller['index']);router['get']('/:id',auth[_0xc8f4('0x9')](),controller['show']);router[_0xc8f4('0xa')]('/',auth[_0xc8f4('0x9')](),controller[_0xc8f4('0xb')]);router[_0xc8f4('0xc')](_0xc8f4('0xd'),auth['isAuthenticated'](),controller[_0xc8f4('0xe')]);router[_0xc8f4('0xf')](_0xc8f4('0xd'),auth[_0xc8f4('0x9')](),controller['destroy']);module[_0xc8f4('0x10')]=router;
\ No newline at end of file
index 95b8643..73c2505 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x81e6=['ENUM','out','sequelize','exports','BOOLEAN','DATE','STRING'];(function(_0x38c5fd,_0x43524a){var _0x455356=function(_0xbbede2){while(--_0xbbede2){_0x38c5fd['push'](_0x38c5fd['shift']());}};_0x455356(++_0x43524a);}(_0x81e6,0x191));var _0x681e=function(_0x38aa9c,_0x51404d){_0x38aa9c=_0x38aa9c-0x0;var _0x3dd901=_0x81e6[_0x38aa9c];return _0x3dd901;};'use strict';var Sequelize=require(_0x681e('0x0'));module[_0x681e('0x1')]={'closed':{'type':Sequelize[_0x681e('0x2')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x681e('0x3')]},'disposition':{'type':Sequelize[_0x681e('0x4')]},'note':{'type':Sequelize[_0x681e('0x4')]},'read1stAt':{'type':Sequelize[_0x681e('0x3')]},'fax':{'type':Sequelize['STRING']},'firstMsgDirection':{'type':Sequelize[_0x681e('0x5')]('in',_0x681e('0x6')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x681e('0x3')]},'lastMsgDirection':{'type':Sequelize['ENUM']('in',_0x681e('0x6')),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
+var _0x6b99=['out','sequelize','exports','BOOLEAN','DATE','STRING','ENUM'];(function(_0x4d09c8,_0x3cc9dd){var _0x17566c=function(_0xbb64ac){while(--_0xbb64ac){_0x4d09c8['push'](_0x4d09c8['shift']());}};_0x17566c(++_0x3cc9dd);}(_0x6b99,0x12e));var _0x96b9=function(_0x44bcb0,_0x235aa9){_0x44bcb0=_0x44bcb0-0x0;var _0xfaf881=_0x6b99[_0x44bcb0];return _0xfaf881;};'use strict';var Sequelize=require(_0x96b9('0x0'));module[_0x96b9('0x1')]={'closed':{'type':Sequelize[_0x96b9('0x2')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x96b9('0x3')]},'disposition':{'type':Sequelize[_0x96b9('0x4')]},'note':{'type':Sequelize[_0x96b9('0x4')]},'read1stAt':{'type':Sequelize['DATE']},'fax':{'type':Sequelize[_0x96b9('0x4')]},'firstMsgDirection':{'type':Sequelize[_0x96b9('0x5')]('in','out'),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x96b9('0x3')]},'lastMsgDirection':{'type':Sequelize[_0x96b9('0x5')]('in',_0x96b9('0x6')),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
index 01b5ff5..bde3967 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9bde=['include','findAll','addTags','ids','spread','Tag','faxInteractionTags:save','removeTags','download','unix','join','root','server','files','interaction-%s.zip','Attachment','mkdirSync','basename','createReadStream','pipe','createWriteStream','log','err','unlinkSync','eml-format','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','redis','defaults','localhost','./faxInteraction.socket','register','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','save','then','destroy','error','name','send','unreadMessages','count','Users','map','TagIds','Tags','push','catch','rawAttributes','model','query','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','select','field','color','from','tools_tags','COUNT(*)','me.FaxInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','me.read\x20=\x20false','u.id','ui.FaxInteractionId','user_has_fax_interactions','left_join','users','cm_contacts','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','o.id\x20=\x20i.UserId','fax_accounts','a.id\x20=\x20i.FaxAccountId','fax_messages','expr','advancedFilter','forEach','createdAt','value','startOf','day','format','utc','endOf','and','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','isArray','condition','TagId','Messages.count','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','ContactId','c.firstName','\x20LIKE\x20?','c.lastName','c.email','\x20>\x20?','isEmpty','FaxAccountId','i.FaxAccountId\x20IN\x20?','concat','parse','$lte','null','\x20IS\x20NULL','replace','isNumeric','i.id\x20LIKE\x20?','i.fax\x20LIKE\x20?','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','DESC','group','i.id','Sequelize','SELECT','clone','read','%s\x20=\x200','toString','having','`Messages.count`\x20=\x200','%s\x20>\x200','`Messages.count`\x20>\x200','tag','fax_interaction_has_tags','it.FaxInteractionId\x20=\x20i.id','t.id\x20=\x20it.TagId','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','sequelize','FaxInteraction','a.key','Account.key','Contact.firstName','Contact.lastName','Contact.email','c.phone','Contact.phone','c.mobile','ui.FaxInteractionId\x20IN\x20?','groupBy','FaxInteractionId','all','rows','params','merge','options','create','body','find','describe','addMessage','FaxMessage','omit','getMessages','findOne','filter','split','YYYY-MM-DD\x20HH:mm:ss','includeAll'];(function(_0x5517c0,_0x358609){var _0x33803b=function(_0x513c18){while(--_0x513c18){_0x5517c0['push'](_0x5517c0['shift']());}};_0x33803b(++_0x358609);}(_0x9bde,0xe1));var _0xe9bd=function(_0x114f73,_0x21d7a6){_0x114f73=_0x114f73-0x0;var _0x49463e=_0x9bde[_0x114f73];return _0x49463e;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xe9bd('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xe9bd('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0xe9bd('0x2'));var moment=require(_0xe9bd('0x3'));var BPromise=require(_0xe9bd('0x4'));var Mustache=require(_0xe9bd('0x5'));var util=require(_0xe9bd('0x6'));var path=require(_0xe9bd('0x7'));var sox=require(_0xe9bd('0x8'));var csv=require('to-csv');var ejs=require(_0xe9bd('0x9'));var fs=require('fs');var _=require(_0xe9bd('0xa'));var squel=require(_0xe9bd('0xb'));var crypto=require(_0xe9bd('0xc'));var jsforce=require(_0xe9bd('0xd'));var deskjs=require(_0xe9bd('0xe'));var toCsv=require(_0xe9bd('0xf'));var querystring=require(_0xe9bd('0x10'));var Papa=require(_0xe9bd('0x11'));var Redis=require(_0xe9bd('0x12'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xe9bd('0x13'));var logger=require(_0xe9bd('0x14'))(_0xe9bd('0x15'));var utils=require('../../config/utils');var config=require(_0xe9bd('0x16'));var db=require(_0xe9bd('0x17'))['db'];config[_0xe9bd('0x18')]=_[_0xe9bd('0x19')](config['redis'],{'host':_0xe9bd('0x1a'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xe9bd('0x18')]));require(_0xe9bd('0x1b'))[_0xe9bd('0x1c')](socket);function respondWithStatusCode(_0x51109f,_0x47ba5e){_0x47ba5e=_0x47ba5e||0xcc;return function(_0x46a95e){if(_0x46a95e){return _0x51109f[_0xe9bd('0x1d')](_0x47ba5e);}return _0x51109f[_0xe9bd('0x1e')](_0x47ba5e)[_0xe9bd('0x1f')]();};}function respondWithResult(_0x3360bd,_0x389e7b){_0x389e7b=_0x389e7b||0xc8;return function(_0x45a9f2){if(_0x45a9f2){return _0x3360bd['status'](_0x389e7b)[_0xe9bd('0x20')](_0x45a9f2);}};}function respondWithFilteredResult(_0x464a1b,_0x160281){return function(_0x494b27){if(_0x494b27){var _0x36f03d=_0x494b27['count'],_0x3bae08=_0x160281[_0xe9bd('0x21')],_0x34ba2b=_0x160281['offset']+_0x160281[_0xe9bd('0x22')],_0x330733;if(_0x34ba2b>=_0x36f03d){_0x34ba2b=_0x36f03d;_0x330733=0xc8;}else{_0x330733=0xce;}_0x464a1b['status'](_0x330733);return _0x464a1b[_0xe9bd('0x23')](_0xe9bd('0x24'),_0x3bae08+'-'+_0x34ba2b+'/'+_0x36f03d)[_0xe9bd('0x20')](_0x494b27);}return null;};}function patchUpdates(_0x3dda13){return function(_0x1acb82){try{jsonpatch[_0xe9bd('0x25')](_0x1acb82,_0x3dda13,!![]);}catch(_0x6593ce){return BPromise['reject'](_0x6593ce);}return _0x1acb82[_0xe9bd('0x26')]();};}function saveUpdates(_0x28cd17,_0x4ecaf5){return function(_0x37aec1){if(_0x37aec1){return _0x37aec1['update'](_0x28cd17)[_0xe9bd('0x27')](function(_0x1b9cc9){return _0x1b9cc9;});}return null;};}function removeEntity(_0x36f8c0,_0xf02209){return function(_0x5bc4bf){if(_0x5bc4bf){return _0x5bc4bf[_0xe9bd('0x28')]()[_0xe9bd('0x27')](function(){_0x36f8c0[_0xe9bd('0x1e')](0xcc)[_0xe9bd('0x1f')]();});}};}function handleEntityNotFound(_0x2641be,_0xb52d45){return function(_0x399f3c){if(!_0x399f3c){_0x2641be[_0xe9bd('0x1d')](0x194);}return _0x399f3c;};}function handleError(_0x1ae889,_0x5987af){_0x5987af=_0x5987af||0x1f4;return function(_0x3c211a){logger[_0xe9bd('0x29')](_0x3c211a['stack']);if(_0x3c211a[_0xe9bd('0x2a')]){delete _0x3c211a[_0xe9bd('0x2a')];}_0x1ae889[_0xe9bd('0x1e')](_0x5987af)[_0xe9bd('0x2b')](_0x3c211a);};}function getInteractionUnreadMessages(_0x141b95){return new BPromise(function(_0x183601,_0x519f48){try{if(_0x141b95['closed']){_0x141b95[_0xe9bd('0x2c')]=0x0;_0x183601(_0x141b95);}else{return db['FaxMessage'][_0xe9bd('0x2d')]({'where':{'FaxInteractionId':_0x141b95['id'],'direction':'in','read':![]}})[_0xe9bd('0x27')](function(_0x27f80c){_0x141b95[_0xe9bd('0x2c')]=_0x27f80c;_0x183601(_0x141b95);});}}catch(_0x4057df){_0x519f48(_0x4057df);}});}function getInteractionUsers(_0x509e36,_0x4b7bc2){return new BPromise(function(_0x7f2c5,_0x3b6682){try{if(_0x4b7bc2[_0x509e36['id']]){_0x509e36[_0xe9bd('0x2e')]=_[_0xe9bd('0x2f')](_0x4b7bc2[_0x509e36['id']],function(_0xe2436){return{'id':_0xe2436['id']};});}}catch(_0x1f0f9e){_0x3b6682(_0x1f0f9e);}_0x7f2c5(_0x509e36);});}function getInteractionTags(_0x3c31ee,_0x66213a){return new BPromise(function(_0x45703e,_0x4ec15c){try{if(_0x3c31ee[_0xe9bd('0x30')]){_0x3c31ee[_0xe9bd('0x31')]=[];_0x3c31ee[_0xe9bd('0x30')]['split'](',')['forEach'](function(_0x25eeab){_0x3c31ee[_0xe9bd('0x31')][_0xe9bd('0x32')](_0x66213a[_0x25eeab]);});}delete _0x3c31ee[_0xe9bd('0x30')];}catch(_0x1dda43){_0x4ec15c(_0x1dda43);}_0x45703e(_0x3c31ee);});}function updateFaxInteraction(_0x2950e8,_0x1e50ac,_0x1c6173){return new BPromise(function(_0x1a1a29,_0x32b3e3){return getInteractionUnreadMessages(_0x2950e8)[_0xe9bd('0x27')](function(_0x549dd1){return getInteractionUsers(_0x549dd1,_0x1c6173);})[_0xe9bd('0x27')](function(_0x199477){return getInteractionTags(_0x199477,_0x1e50ac);})[_0xe9bd('0x27')](function(_0x8ff624){_0x1a1a29(_0x8ff624);})[_0xe9bd('0x33')](function(_0x147da5){_0x32b3e3(_0x147da5);});});}exports['index']=function(_0x3f3cf5,_0x32e764){var _0x56b4a5={},_0x404a7d={},_0x264c87={'count':0x0,'rows':[]};var _0x4c7d47=db['FaxInteraction'][_0xe9bd('0x34')];_0x404a7d[_0xe9bd('0x35')]=_['keys'](_0x4c7d47);_0x404a7d[_0xe9bd('0x36')]=_[_0xe9bd('0x37')](_0x3f3cf5[_0xe9bd('0x36')]);_0x404a7d['filters']=_[_0xe9bd('0x38')](_0x404a7d['model'],_0x404a7d[_0xe9bd('0x36')]);_0x56b4a5[_0xe9bd('0x39')]=_[_0xe9bd('0x38')](_0x404a7d[_0xe9bd('0x35')],qs['fields'](_0x3f3cf5[_0xe9bd('0x36')][_0xe9bd('0x3a')]));_0x56b4a5[_0xe9bd('0x39')]=_0x56b4a5[_0xe9bd('0x39')][_0xe9bd('0x3b')]?_0x56b4a5[_0xe9bd('0x39')]:_0x404a7d[_0xe9bd('0x35')];if(!_0x3f3cf5[_0xe9bd('0x36')][_0xe9bd('0x3c')](_0xe9bd('0x3d'))){_0x56b4a5['limit']=qs['limit'](_0x3f3cf5[_0xe9bd('0x36')]['limit']);_0x56b4a5[_0xe9bd('0x21')]=qs[_0xe9bd('0x21')](_0x3f3cf5[_0xe9bd('0x36')]['offset']);}_0x56b4a5[_0xe9bd('0x3e')]=qs[_0xe9bd('0x3f')](_0x3f3cf5[_0xe9bd('0x36')]['sort']);_0x56b4a5[_0xe9bd('0x40')]=qs[_0xe9bd('0x41')](_[_0xe9bd('0x42')](_0x3f3cf5[_0xe9bd('0x36')],_0x404a7d[_0xe9bd('0x41')]));var _0x40f87c=[];var _0x221be7=squel[_0xe9bd('0x43')]()[_0xe9bd('0x44')]('id')[_0xe9bd('0x44')](_0xe9bd('0x2a'))[_0xe9bd('0x44')](_0xe9bd('0x45'))[_0xe9bd('0x46')](_0xe9bd('0x47'));var _0x5b70d3=squel['select']()[_0xe9bd('0x44')](_0xe9bd('0x48'))[_0xe9bd('0x46')]('fax_messages','me')['where'](_0xe9bd('0x49'))[_0xe9bd('0x40')](_0xe9bd('0x4a'))[_0xe9bd('0x40')](_0xe9bd('0x4b'));var _0x3d4b58=squel[_0xe9bd('0x43')]()['field'](_0xe9bd('0x4c'))['field'](_0xe9bd('0x4d'))[_0xe9bd('0x46')](_0xe9bd('0x4e'),'ui')[_0xe9bd('0x4f')](_0xe9bd('0x50'),'u','u.id\x20=\x20ui.UserId');var _0x3317d6=squel[_0xe9bd('0x43')]()[_0xe9bd('0x46')]('fax_interactions','i')[_0xe9bd('0x4f')](_0xe9bd('0x51'),'c',_0xe9bd('0x52'))['left_join'](_0xe9bd('0x50'),'o',_0xe9bd('0x53'))[_0xe9bd('0x4f')](_0xe9bd('0x54'),'a',_0xe9bd('0x55'))['left_join'](_0xe9bd('0x56'),'me','me.FaxInteractionId\x20=\x20i.id');var _0x835697=squel[_0xe9bd('0x57')]();if(_0x3f3cf5[_0xe9bd('0x36')][_0xe9bd('0x58')]){var _0x589776=JSON['parse'](_0x3f3cf5[_0xe9bd('0x36')]['advancedFilter']);_[_0xe9bd('0x37')](_0x589776)[_0xe9bd('0x59')](function(_0x5e08ae){var _0x59d5cb=_0x589776[_0x5e08ae];if(_0x5e08ae===_0xe9bd('0x5a')){var _0x524da7=moment(_0x59d5cb[_0xe9bd('0x5b')]['dateStart'])[_0xe9bd('0x5c')](_0xe9bd('0x5d'))['utc']()[_0xe9bd('0x5e')]();var _0x4d6021=moment(_0x4d6021)[_0xe9bd('0x5f')]()[_0xe9bd('0x60')](_0xe9bd('0x5d'))['format']();_0x835697[_0xe9bd('0x61')](_0xe9bd('0x62'),_0x524da7,_0x4d6021);}else{if(_[_0xe9bd('0x63')](_0x59d5cb[_0xe9bd('0x64')])){_0x59d5cb['condition']['forEach'](function(_0x441f89){switch(_0x59d5cb['condition'][_0xe9bd('0x5b')]){case'IS':if(_0x5e08ae!==_0xe9bd('0x65')&&_0x5e08ae!==_0xe9bd('0x66')){if(_[_0xe9bd('0x63')](_0x59d5cb[_0xe9bd('0x5b')])&&_0x59d5cb[_0xe9bd('0x5b')][_0xe9bd('0x3b')]>0x1){_0x835697[_0xe9bd('0x61')](_0x59d5cb[_0xe9bd('0x67')]+'.'+_0x5e08ae+_0xe9bd('0x68'),_0x59d5cb[_0xe9bd('0x5b')]);}else{_0x835697[_0xe9bd('0x61')](_0x59d5cb['tableAlias']+'.'+_0x5e08ae+'\x20=\x20?',_0x59d5cb['value'][0x0]);}}break;case'=':_0x835697[_0xe9bd('0x61')](_0x59d5cb['tableAlias']+'.'+_0x5e08ae+_0xe9bd('0x69'),_0x59d5cb[_0xe9bd('0x5b')]);break;case _0xe9bd('0x6a'):if(_0x5e08ae===_0xe9bd('0x6b')){_0x835697[_0xe9bd('0x61')](_0xe9bd('0x6c')+_0xe9bd('0x6d'),'%'+_0x59d5cb[_0xe9bd('0x5b')]+'%');_0x835697['or'](_0xe9bd('0x6e')+'\x20LIKE\x20?','%'+_0x59d5cb[_0xe9bd('0x5b')]+'%');_0x835697['or'](_0xe9bd('0x6f')+_0xe9bd('0x6d'),'%'+_0x59d5cb[_0xe9bd('0x5b')]+'%');}else{_0x835697['and'](_0x59d5cb[_0xe9bd('0x67')]+'.'+_0x5e08ae+_0xe9bd('0x6d'),'%'+_0x59d5cb[_0xe9bd('0x5b')]+'%');}break;case'>':_0x835697['and'](_0x59d5cb[_0xe9bd('0x67')]+'.'+_0x5e08ae+_0xe9bd('0x70'),_0x59d5cb[_0xe9bd('0x5b')]);break;case'<':_0x835697[_0xe9bd('0x61')](_0x59d5cb['tableAlias']+'.'+_0x5e08ae+'\x20<\x20?',_0x59d5cb[_0xe9bd('0x5b')]);break;}});}else{switch(_0x59d5cb[_0xe9bd('0x64')][_0xe9bd('0x5b')]){case'IS':if(_0x5e08ae!==_0xe9bd('0x65')&&_0x5e08ae!=='Messages.count'){if(_['isArray'](_0x59d5cb[_0xe9bd('0x5b')])&&_0x59d5cb[_0xe9bd('0x5b')][_0xe9bd('0x3b')]>0x1){_0x835697[_0xe9bd('0x61')](_0x59d5cb[_0xe9bd('0x67')]+'.'+_0x5e08ae+_0xe9bd('0x68'),_0x59d5cb['value']);}else{_0x835697[_0xe9bd('0x61')](_0x59d5cb['tableAlias']+'.'+_0x5e08ae+_0xe9bd('0x69'),_0x59d5cb[_0xe9bd('0x5b')][0x0]);}}break;case'=':_0x835697[_0xe9bd('0x61')](_0x59d5cb[_0xe9bd('0x67')]+'.'+_0x5e08ae+'\x20=\x20?',_0x59d5cb[_0xe9bd('0x5b')]);break;case _0xe9bd('0x6a'):if(_0x5e08ae===_0xe9bd('0x6b')){_0x835697['and'](_0xe9bd('0x6c')+_0xe9bd('0x6d'),'%'+_0x59d5cb[_0xe9bd('0x5b')]+'%');_0x835697['or'](_0xe9bd('0x6e')+_0xe9bd('0x6d'),'%'+_0x59d5cb[_0xe9bd('0x5b')]+'%');_0x835697['or'](_0xe9bd('0x6f')+_0xe9bd('0x6d'),'%'+_0x59d5cb[_0xe9bd('0x5b')]+'%');}else{_0x835697[_0xe9bd('0x61')](_0x59d5cb[_0xe9bd('0x67')]+'.'+_0x5e08ae+_0xe9bd('0x6d'),'%'+_0x59d5cb['value']+'%');}break;case'>':_0x835697[_0xe9bd('0x61')](_0x59d5cb[_0xe9bd('0x67')]+'.'+_0x5e08ae+'\x20>\x20?',_0x59d5cb[_0xe9bd('0x5b')]);break;case'<':_0x835697[_0xe9bd('0x61')](_0x59d5cb['tableAlias']+'.'+_0x5e08ae+'\x20<\x20?',_0x59d5cb[_0xe9bd('0x5b')]);break;}}}});}else{var _0x4190f0=_(Object['keys'](_0x3f3cf5['query']))['map'](function(_0x246487){return _0x4c7d47['hasOwnProperty'](_0x246487)?_0x246487:undefined;})['filter'](function(_0x4b5bfb){return!_['isNil'](_0x4b5bfb);})[_0xe9bd('0x5b')]();if(!_[_0xe9bd('0x71')](_0x4190f0)){_0x4190f0[_0xe9bd('0x59')](function(_0x4947b0){if(_0x4947b0===_0xe9bd('0x72')){_0x3317d6[_0xe9bd('0x40')](_0xe9bd('0x73'),[][_0xe9bd('0x74')](_0x3f3cf5['query'][_0x4947b0]));}else if(_0x4947b0===_0xe9bd('0x5a')){var _0x10ef2b=JSON[_0xe9bd('0x75')](_0x3f3cf5['query'][_0x4947b0])['$gte'];var _0x3e68fb=JSON[_0xe9bd('0x75')](_0x3f3cf5[_0xe9bd('0x36')][_0x4947b0])[_0xe9bd('0x76')];_0x3317d6[_0xe9bd('0x40')](_0xe9bd('0x62'),_0x10ef2b,_0x3e68fb);}else{if(_0x3f3cf5[_0xe9bd('0x36')][_0x4947b0]===_0xe9bd('0x77')){_0x3317d6['where']('i.'+_0x4947b0+_0xe9bd('0x78'));}else{_0x3317d6[_0xe9bd('0x40')]('i.'+_0x4947b0+_0xe9bd('0x69'),_0x3f3cf5[_0xe9bd('0x36')][_0x4947b0]);}}});}if(_0x3f3cf5[_0xe9bd('0x36')]['filter']){var _0xa13d16=_0x3f3cf5['query']['filter'][_0xe9bd('0x79')]('\x5c','\x5c\x5c')[_0xe9bd('0x79')]('\x27\x27','\x27\x27\x27\x27');if(qs[_0xe9bd('0x7a')](_0xa13d16)){_0x835697['or'](_0xe9bd('0x7b'),_0xa13d16+'%')['or'](_0xe9bd('0x7c'),_0xa13d16+'%');}_0x835697['or'](_0xe9bd('0x7d'),_0xa13d16+'%');}}_0x3317d6['where'](_0x835697);if(_0x56b4a5[_0xe9bd('0x3e')]){_0x56b4a5[_0xe9bd('0x3e')]['forEach'](function(_0x2a014e){_0x3317d6[_0xe9bd('0x3e')]('i.'+_0x2a014e[0x0],_0x2a014e[0x1]===_0xe9bd('0x7e')?![]:!![]);});}_0x3317d6[_0xe9bd('0x7f')](_0xe9bd('0x80'));var _0x1a36aa={'type':db[_0xe9bd('0x81')]['QueryTypes'][_0xe9bd('0x82')],'raw':!![]};var _0x179edf=_0x3317d6[_0xe9bd('0x83')]()[_0xe9bd('0x44')](_0xe9bd('0x48'));if(!_0x3f3cf5[_0xe9bd('0x36')][_0xe9bd('0x58')]){if(_0x3f3cf5[_0xe9bd('0x36')][_0xe9bd('0x84')]){if(_0x3f3cf5['query'][_0xe9bd('0x84')]==0x1){_0x179edf[_0xe9bd('0x40')](util[_0xe9bd('0x5e')](_0xe9bd('0x85'),_0x5b70d3[_0xe9bd('0x86')]()));_0x3317d6[_0xe9bd('0x87')](_0xe9bd('0x88'));}else{_0x179edf['where'](util[_0xe9bd('0x5e')](_0xe9bd('0x89'),_0x5b70d3['toString']()));_0x3317d6[_0xe9bd('0x87')](_0xe9bd('0x8a'));}}if(_0x3f3cf5[_0xe9bd('0x36')][_0xe9bd('0x8b')]){var _0x242110=_[_0xe9bd('0x63')](_0x3f3cf5[_0xe9bd('0x36')]['tag'])?_0x3f3cf5['query'][_0xe9bd('0x8b')]:new Array(_0x3f3cf5[_0xe9bd('0x36')][_0xe9bd('0x8b')]);var _0x1b863f=squel[_0xe9bd('0x57')]();_0x242110[_0xe9bd('0x59')](function(_0x1b46f4){_0x1b863f['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x1b46f4+',%');});_0x3317d6[_0xe9bd('0x87')](_0x1b863f);_0x179edf[_0xe9bd('0x4f')](_0xe9bd('0x8c'),'it',_0xe9bd('0x8d'));_0x179edf[_0xe9bd('0x4f')](_0xe9bd('0x47'),'t',_0xe9bd('0x8e'));_0x179edf['where']('t.id\x20IN\x20?',_0x242110);}}else{var _0x589776=JSON[_0xe9bd('0x75')](_0x3f3cf5['query']['advancedFilter']);_['keys'](_0x589776)[_0xe9bd('0x59')](function(_0x402ab2){var _0xf170d4=_0x589776[_0x402ab2];if(_0x402ab2===_0xe9bd('0x65')){var _0xd8a604=_0xf170d4[_0xe9bd('0x5b')];var _0x104173=squel[_0xe9bd('0x57')]();_0xd8a604[_0xe9bd('0x59')](function(_0x5ac1d9){_0x104173['or'](_0xe9bd('0x8f'),'%,'+_0x5ac1d9+',%');});_0x3317d6['having'](_0x104173);_0x179edf[_0xe9bd('0x4f')](_0xe9bd('0x90'),'it',_0xe9bd('0x91'));_0x179edf[_0xe9bd('0x4f')](_0xe9bd('0x47'),'t','t.id\x20=\x20it.TagId');_0x179edf['where']('t.id\x20IN\x20?',_0xd8a604);}else if(_0x402ab2===_0xe9bd('0x66')){if(_0xf170d4[_0xe9bd('0x5b')]['length']===0x1){if(_0xf170d4[_0xe9bd('0x5b')][0x0]===0x1){_0x179edf[_0xe9bd('0x40')](util[_0xe9bd('0x5e')](_0xe9bd('0x85'),_0x5b70d3[_0xe9bd('0x86')]()));_0x3317d6['having'](_0xe9bd('0x88'));}else{_0x179edf[_0xe9bd('0x40')](util[_0xe9bd('0x5e')](_0xe9bd('0x89'),_0x5b70d3[_0xe9bd('0x86')]()));_0x3317d6[_0xe9bd('0x87')](_0xe9bd('0x8a'));}}}});}db[_0xe9bd('0x92')][_0xe9bd('0x36')](_0x179edf[_0xe9bd('0x86')](),_0x1a36aa)['then'](function(_0x4d5288){_0x264c87['count']=_0x4d5288['length'];if(_0x264c87[_0xe9bd('0x2d')]===0x0)return[];return db[_0xe9bd('0x92')][_0xe9bd('0x36')](_0x221be7['toString'](),_0x1a36aa)[_0xe9bd('0x27')](function(_0x36df30){_0x40f87c=_['keyBy'](_0x36df30,'id');_0x1a36aa=_['merge'](_0x1a36aa,{'model':db[_0xe9bd('0x93')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x3317d6[_0xe9bd('0x44')](_0xe9bd('0x94'),_0xe9bd('0x95'));_0x3317d6[_0xe9bd('0x44')]('i.*');_0x3317d6['field']('c.firstName',_0xe9bd('0x96'));_0x3317d6[_0xe9bd('0x44')](_0xe9bd('0x6e'),_0xe9bd('0x97'));_0x3317d6[_0xe9bd('0x44')](_0xe9bd('0x6f'),_0xe9bd('0x98'));_0x3317d6[_0xe9bd('0x44')](_0xe9bd('0x99'),_0xe9bd('0x9a'));_0x3317d6['field'](_0xe9bd('0x9b'),'Contact.mobile');_0x3317d6[_0xe9bd('0x44')]('c.fax','Contact.fax');_0x3317d6[_0xe9bd('0x44')]('GROUP_CONCAT(DISTINCT\x20t.id)',_0xe9bd('0x30'));_0x3317d6['left_join'](_0xe9bd('0x8c'),'it',_0xe9bd('0x8d'));_0x3317d6[_0xe9bd('0x4f')](_0xe9bd('0x47'),'t',_0xe9bd('0x8e'));_0x3317d6[_0xe9bd('0x22')](_0x56b4a5['limit']);_0x3317d6[_0xe9bd('0x21')](_0x56b4a5[_0xe9bd('0x21')]);return db['sequelize'][_0xe9bd('0x36')](_0x3317d6[_0xe9bd('0x86')](),_0x1a36aa);})[_0xe9bd('0x27')](function(_0x59897b){_0x3d4b58[_0xe9bd('0x40')](_0xe9bd('0x9c'),_[_0xe9bd('0x2f')](_0x59897b,'id'));return db[_0xe9bd('0x92')][_0xe9bd('0x36')](_0x3d4b58['toString'](),_0x1a36aa)[_0xe9bd('0x27')](function(_0x157b8e){var _0x591c5f=_[_0xe9bd('0x9d')](_0x157b8e,_0xe9bd('0x9e'));var _0x396679=[];_0x59897b[_0xe9bd('0x59')](function(_0x50243f){_0x396679[_0xe9bd('0x32')](updateFaxInteraction(_0x50243f,_0x40f87c,_0x591c5f));});return BPromise[_0xe9bd('0x9f')](_0x396679);});});})[_0xe9bd('0x27')](function(_0x15ad2f){_0x264c87[_0xe9bd('0xa0')]=_0x15ad2f;return _0x264c87;})[_0xe9bd('0x27')](respondWithFilteredResult(_0x32e764,_0x56b4a5))[_0xe9bd('0x33')](handleError(_0x32e764,null));};exports['show']=function(_0x7c3e0a,_0x59719e){var _0x33dcf6={'raw':![],'where':{'id':_0x7c3e0a[_0xe9bd('0xa1')]['id']}},_0x3a2d9f={};_0x3a2d9f['model']=_[_0xe9bd('0x37')](db['FaxInteraction'][_0xe9bd('0x34')]);_0x3a2d9f[_0xe9bd('0x36')]=_[_0xe9bd('0x37')](_0x7c3e0a[_0xe9bd('0x36')]);_0x3a2d9f[_0xe9bd('0x41')]=_[_0xe9bd('0x38')](_0x3a2d9f[_0xe9bd('0x35')],_0x3a2d9f[_0xe9bd('0x36')]);_0x33dcf6[_0xe9bd('0x39')]=_[_0xe9bd('0x38')](_0x3a2d9f[_0xe9bd('0x35')],qs['fields'](_0x7c3e0a[_0xe9bd('0x36')][_0xe9bd('0x3a')]));_0x33dcf6[_0xe9bd('0x39')]=_0x33dcf6['attributes'][_0xe9bd('0x3b')]?_0x33dcf6[_0xe9bd('0x39')]:_0x3a2d9f['model'];if(_0x7c3e0a['query']['includeAll']){_0x33dcf6['include']=[{'all':!![]}];}_0x33dcf6=_[_0xe9bd('0xa2')]({},_0x33dcf6,_0x7c3e0a[_0xe9bd('0xa3')]);return db[_0xe9bd('0x93')]['find'](_0x33dcf6)[_0xe9bd('0x27')](handleEntityNotFound(_0x59719e,null))[_0xe9bd('0x27')](respondWithResult(_0x59719e,null))['catch'](handleError(_0x59719e,null));};exports[_0xe9bd('0xa4')]=function(_0x35894c,_0x3fed2e){return db[_0xe9bd('0x93')][_0xe9bd('0xa4')](_0x35894c['body'],{})[_0xe9bd('0x27')](respondWithResult(_0x3fed2e,0xc9))[_0xe9bd('0x33')](handleError(_0x3fed2e,null));};exports['update']=function(_0x53d685,_0x54ffbd){if(_0x53d685['body']['id']){delete _0x53d685[_0xe9bd('0xa5')]['id'];}return db[_0xe9bd('0x93')][_0xe9bd('0xa6')]({'where':{'id':_0x53d685[_0xe9bd('0xa1')]['id']}})['then'](handleEntityNotFound(_0x54ffbd,null))['then'](saveUpdates(_0x53d685[_0xe9bd('0xa5')],null))[_0xe9bd('0x27')](respondWithResult(_0x54ffbd,null))[_0xe9bd('0x33')](handleError(_0x54ffbd,null));};exports['destroy']=function(_0x220f1f,_0x2582d9){return db['FaxInteraction']['find']({'where':{'id':_0x220f1f[_0xe9bd('0xa1')]['id']}})[_0xe9bd('0x27')](handleEntityNotFound(_0x2582d9,null))[_0xe9bd('0x27')](removeEntity(_0x2582d9,null))[_0xe9bd('0x33')](handleError(_0x2582d9,null));};exports[_0xe9bd('0xa7')]=function(_0x284a58,_0x1ce898){return db[_0xe9bd('0x93')][_0xe9bd('0xa7')]()['then'](respondWithResult(_0x1ce898,null))[_0xe9bd('0x33')](handleError(_0x1ce898,null));};exports[_0xe9bd('0xa8')]=function(_0x14cdd5,_0x1554fd,_0x213a08){return db[_0xe9bd('0xa9')]['find']({'where':{'id':_0x14cdd5[_0xe9bd('0xa1')]['id']}})['then'](handleEntityNotFound(_0x1554fd,null))[_0xe9bd('0x27')](function(_0x5783cc){if(_0x5783cc){return _0x5783cc[_0xe9bd('0xa8')](_0x14cdd5[_0xe9bd('0xa5')]['ids'],_[_0xe9bd('0xaa')](_0x14cdd5[_0xe9bd('0xa5')],['ids','id'])||{});}})[_0xe9bd('0x27')](respondWithResult(_0x1554fd,null))[_0xe9bd('0x33')](handleError(_0x1554fd,null));};exports[_0xe9bd('0xab')]=function(_0x402d07,_0x56133d,_0x209720){var _0xea6699={'raw':![],'where':{}};var _0x57df6e={};var _0x16b9bf={'count':0x0,'rows':[]};return db[_0xe9bd('0x93')][_0xe9bd('0xac')]({'where':{'id':_0x402d07['params']['id']}})[_0xe9bd('0x27')](handleEntityNotFound(_0x56133d,null))[_0xe9bd('0x27')](function(_0x308fd6){if(_0x308fd6){_0x57df6e[_0xe9bd('0x35')]=_[_0xe9bd('0x37')](db[_0xe9bd('0xa9')][_0xe9bd('0x34')]);_0x57df6e['query']=_[_0xe9bd('0x37')](_0x402d07[_0xe9bd('0x36')]);_0x57df6e[_0xe9bd('0x41')]=_['intersection'](_0x57df6e[_0xe9bd('0x35')],_0x57df6e['query']);_0xea6699['attributes']=_['intersection'](_0x57df6e[_0xe9bd('0x35')],qs['fields'](_0x402d07['query'][_0xe9bd('0x3a')]));_0xea6699[_0xe9bd('0x39')]=_0xea6699['attributes'][_0xe9bd('0x3b')]?_0xea6699[_0xe9bd('0x39')]:_0x57df6e['model'];if(!_0x402d07['query'][_0xe9bd('0x3c')]('nolimit')){_0xea6699['limit']=qs[_0xe9bd('0x22')](_0x402d07[_0xe9bd('0x36')][_0xe9bd('0x22')]);_0xea6699[_0xe9bd('0x21')]=qs[_0xe9bd('0x21')](_0x402d07[_0xe9bd('0x36')][_0xe9bd('0x21')]);}_0xea6699['order']=qs[_0xe9bd('0x3f')](_0x402d07['query']['sort']);_0xea6699[_0xe9bd('0x40')]=qs[_0xe9bd('0x41')](_[_0xe9bd('0x42')](_0x402d07[_0xe9bd('0x36')],_0x57df6e[_0xe9bd('0x41')]));_0xea6699['where'][_0xe9bd('0x9e')]=_0x308fd6['id'];if(_0x402d07[_0xe9bd('0x36')][_0xe9bd('0xad')]){_0xea6699[_0xe9bd('0x40')]=_[_0xe9bd('0xa2')](_0xea6699[_0xe9bd('0x40')],{'$or':_['map'](_0xea6699[_0xe9bd('0x39')],function(_0x265dba){var _0x1d496e={};_0x1d496e[_0x265dba]={'$like':'%'+_0x402d07[_0xe9bd('0x36')][_0xe9bd('0xad')]+'%'};return _0x1d496e;})});}if(_0x402d07[_0xe9bd('0x36')]['$gte']){var _0x23655f=_0x402d07[_0xe9bd('0x36')]['$gte'][_0xe9bd('0xae')](',');var _0x4c5304={};_0x4c5304[_0x23655f[0x0]]={'$gte':moment(_0x23655f[0x1])[_0xe9bd('0x5e')](_0xe9bd('0xaf'))};_0xea6699['where']=_[_0xe9bd('0xa2')](_0xea6699[_0xe9bd('0x40')],_0x4c5304);}_0xea6699=_[_0xe9bd('0xa2')]({},_0xea6699,_0x402d07[_0xe9bd('0xa3')]);return db[_0xe9bd('0xa9')][_0xe9bd('0x2d')]({'where':_0xea6699[_0xe9bd('0x40')]})[_0xe9bd('0x27')](function(_0x41506b){_0x16b9bf['count']=_0x41506b;if(_0x402d07[_0xe9bd('0x36')][_0xe9bd('0xb0')]){_0xea6699[_0xe9bd('0xb1')]=[{'all':!![]}];}return db[_0xe9bd('0xa9')][_0xe9bd('0xb2')](_0xea6699);})[_0xe9bd('0x27')](function(_0x3b453c){_0x16b9bf['rows']=_0x3b453c;return _0x16b9bf;});}})[_0xe9bd('0x27')](respondWithFilteredResult(_0x56133d,_0xea6699))['catch'](handleError(_0x56133d,null));};exports[_0xe9bd('0xb3')]=function(_0xbc686e,_0x2db271,_0x1c2d6d){return db[_0xe9bd('0x93')][_0xe9bd('0xa6')]({'where':{'id':_0xbc686e['params']['id']}})[_0xe9bd('0x27')](handleEntityNotFound(_0x2db271,null))[_0xe9bd('0x27')](function(_0x39b54b){if(_0x39b54b){return _0x39b54b['setTags'](_0xbc686e[_0xe9bd('0xa5')][_0xe9bd('0xb4')],_[_0xe9bd('0xaa')](_0xbc686e[_0xe9bd('0xa5')],[_0xe9bd('0xb4'),'id'])||{})[_0xe9bd('0xb5')](function(){return db[_0xe9bd('0xb6')][_0xe9bd('0xb2')]({'attributes':['id',_0xe9bd('0x2a'),_0xe9bd('0x45')],'where':{'id':_0xbc686e['body'][_0xe9bd('0xb4')]}});})[_0xe9bd('0x27')](function(_0x31aae8){socket['emit'](_0xe9bd('0xb7'),{'id':Number(_0xbc686e[_0xe9bd('0xa1')]['id']),'tags':_0x31aae8||[]});return{'id':Number(_0xbc686e[_0xe9bd('0xa1')]['id']),'tags':_0x31aae8||[]};});}})['then'](respondWithResult(_0x2db271,null))['catch'](handleError(_0x2db271,null));};exports[_0xe9bd('0xb8')]=function(_0x183071,_0x432bb2,_0x436da9){return db[_0xe9bd('0x93')][_0xe9bd('0xa6')]({'where':{'id':_0x183071[_0xe9bd('0xa1')]['id']}})['then'](handleEntityNotFound(_0x432bb2,null))[_0xe9bd('0x27')](function(_0x297ccc){if(_0x297ccc){return _0x297ccc['removeTags'](_0x183071[_0xe9bd('0x36')][_0xe9bd('0xb4')]);}})[_0xe9bd('0x27')](respondWithStatusCode(_0x432bb2,null))[_0xe9bd('0x33')](handleError(_0x432bb2,null));};exports[_0xe9bd('0xb9')]=function(_0x142907,_0x428a2e){var _0x253c42=moment()[_0xe9bd('0xba')]()[_0xe9bd('0x86')]();var _0x38ce72=path[_0xe9bd('0xbb')](config[_0xe9bd('0xbc')],_0xe9bd('0xbd'),_0xe9bd('0xbe'),'attachments');var _0x17c8e8=path[_0xe9bd('0xbb')](config[_0xe9bd('0xbc')],_0xe9bd('0xbd'),_0xe9bd('0xbe'),'tmp');var _0x86b85=path[_0xe9bd('0xbb')](_0x17c8e8,_0x253c42);var _0x1eeb25=util[_0xe9bd('0x5e')](_0xe9bd('0xbf'),_0x253c42);var _0x1fa474=path[_0xe9bd('0xbb')](_0x17c8e8,_0x1eeb25);var _0x463d54=![];return db[_0xe9bd('0x93')][_0xe9bd('0xa6')]({'where':{'id':_0x142907[_0xe9bd('0xa1')]['id']}})[_0xe9bd('0x27')](handleEntityNotFound(_0x428a2e,null))[_0xe9bd('0x27')](function(_0x5953ca){if(_0x5953ca){return _0x5953ca[_0xe9bd('0xab')]({'attributes':['id',_0xe9bd('0xa5'),_0xe9bd('0x5a')],'include':[{'model':db[_0xe9bd('0xc0')],'as':_0xe9bd('0xc0')}]});}return[];})[_0xe9bd('0x27')](function(_0x37c697){_0x463d54=_0x37c697[_0xe9bd('0x3b')];if(_0x37c697[_0xe9bd('0x3b')]){fs[_0xe9bd('0xc1')](_0x86b85);for(var _0xad2195=0x0;_0xad2195<_0x37c697[_0xe9bd('0x3b')];_0xad2195++){var _0x5da417=_0x37c697[_0xad2195];var _0x388fc5=_0x5da417[_0xe9bd('0xc0')];if(_0x388fc5){var _0x62dd82=path[_0xe9bd('0xbb')](_0x38ce72,_0x388fc5[_0xe9bd('0xc2')]);if(fs['existsSync'](_0x62dd82)){fs[_0xe9bd('0xc3')](_0x62dd82)[_0xe9bd('0xc4')](fs[_0xe9bd('0xc5')](path['join'](_0x86b85,_0x388fc5[_0xe9bd('0xc2')])));}}}}})[_0xe9bd('0x27')](function(){if(_0x463d54){return new BPromise(function(_0x496640,_0x4efce6){zipdir(_0x86b85,{'saveTo':_0x1fa474},function(_0x4b8f8e,_0x28e51a){if(_0x4b8f8e)return _0x4efce6(_0x4b8f8e);return _0x496640(_0x28e51a);});});}})[_0xe9bd('0x27')](function(){if(_0x463d54){return new BPromise(function(_0x48cd92,_0x432fcb){rimraf(_0x86b85,function(_0x2daa01){if(_0x2daa01)_0x432fcb(_0x2daa01);return _0x48cd92();});});}})[_0xe9bd('0x27')](function(){if(_0x463d54){return _0x428a2e['download'](_0x1fa474,_0x1eeb25,function(_0x15ad87){if(_0x15ad87){console[_0xe9bd('0xc6')](_0xe9bd('0xc7'),_0x15ad87);}else{fs[_0xe9bd('0xc8')](_0x1fa474);}});}else{return _0x428a2e['sendStatus'](0xc8);}})[_0xe9bd('0x33')](handleError(_0x428a2e,null));};
\ No newline at end of file
+var _0x3a97=['body','describe','FaxMessage','addMessage','ids','getMessages','findOne','sort','split','format','YYYY-MM-DD\x20HH:mm:ss','options','includeAll','addTags','setTags','spread','Tag','findAll','color','emit','faxInteractionTags:save','removeTags','download','unix','server','files','attachments','tmp','interaction-%s.zip','join','Attachment','mkdirSync','basename','existsSync','createReadStream','pipe','log','err','unlinkSync','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./faxInteraction.socket','register','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','sendStatus','name','Users','map','TagIds','Tags','push','catch','index','FaxInteraction','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','where','pick','select','tools_tags','field','COUNT(*)','from','fax_messages','me.FaxInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','u.id','ui.FaxInteractionId','left_join','u.id\x20=\x20ui.UserId','fax_interactions','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','users','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','startOf','day','utc','endOf','and','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','isArray','condition','forEach','value','unreadMessages','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','ContactId','\x20LIKE\x20?','c.email','\x20>\x20?','\x20<\x20?','TagId','c.firstName','c.lastName','filter','isNil','FaxAccountId','i.FaxAccountId\x20IN\x20?','$gte','$lte','null','replace','\x27\x27\x27\x27','i.id\x20LIKE\x20?','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','DESC','group','Sequelize','clone','COUNT(me.id)','read','`unreadMessages`\x20=\x200','having','`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','toString','sequelize','keyBy','a.key','Account.key','i.*','Contact.email','c.phone','Contact.phone','c.mobile','Contact.mobile','c.fax','GROUP_CONCAT(DISTINCT\x20t.id)','ui.FaxInteractionId\x20IN\x20?','groupBy','FaxInteractionId','all','show','params','include','merge','find','create'];(function(_0x4dc7b9,_0x319d5a){var _0x3ab114=function(_0x51a9df){while(--_0x51a9df){_0x4dc7b9['push'](_0x4dc7b9['shift']());}};_0x3ab114(++_0x319d5a);}(_0x3a97,0x1b7));var _0x73a9=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x3a97[_0x3b380d];return _0x54502b;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x73a9('0x0'));var jsonpatch=require(_0x73a9('0x1'));var rp=require(_0x73a9('0x2'));var moment=require(_0x73a9('0x3'));var BPromise=require(_0x73a9('0x4'));var Mustache=require(_0x73a9('0x5'));var util=require(_0x73a9('0x6'));var path=require(_0x73a9('0x7'));var sox=require(_0x73a9('0x8'));var csv=require('to-csv');var ejs=require(_0x73a9('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x73a9('0xa'));var crypto=require(_0x73a9('0xb'));var jsforce=require(_0x73a9('0xc'));var deskjs=require(_0x73a9('0xd'));var toCsv=require(_0x73a9('0xe'));var querystring=require(_0x73a9('0xf'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x73a9('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x73a9('0x11'));var logger=require(_0x73a9('0x12'))(_0x73a9('0x13'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x73a9('0x14'))['db'];config['redis']=_[_0x73a9('0x15')](config[_0x73a9('0x16')],{'host':_0x73a9('0x17'),'port':0x18eb});var socket=require(_0x73a9('0x18'))(new Redis(config['redis']));require(_0x73a9('0x19'))[_0x73a9('0x1a')](socket);function respondWithStatusCode(_0x25cb3d,_0x29d98d){_0x29d98d=_0x29d98d||0xcc;return function(_0x4aa7b8){if(_0x4aa7b8){return _0x25cb3d['sendStatus'](_0x29d98d);}return _0x25cb3d[_0x73a9('0x1b')](_0x29d98d)[_0x73a9('0x1c')]();};}function respondWithResult(_0xdffa65,_0x2ae959){_0x2ae959=_0x2ae959||0xc8;return function(_0x4d4a0c){if(_0x4d4a0c){return _0xdffa65['status'](_0x2ae959)[_0x73a9('0x1d')](_0x4d4a0c);}};}function respondWithFilteredResult(_0xeaae3d,_0x5cd80b){return function(_0x2dda7b){if(_0x2dda7b){var _0x3f4f5b=_0x2dda7b[_0x73a9('0x1e')],_0x32f6b8=_0x5cd80b[_0x73a9('0x1f')],_0x28a28a=_0x5cd80b[_0x73a9('0x1f')]+_0x5cd80b[_0x73a9('0x20')],_0x168d32;if(_0x28a28a>=_0x3f4f5b){_0x28a28a=_0x3f4f5b;_0x168d32=0xc8;}else{_0x168d32=0xce;}_0xeaae3d[_0x73a9('0x1b')](_0x168d32);return _0xeaae3d[_0x73a9('0x21')](_0x73a9('0x22'),_0x32f6b8+'-'+_0x28a28a+'/'+_0x3f4f5b)['json'](_0x2dda7b);}return null;};}function patchUpdates(_0x1b27f0){return function(_0x41d242){try{jsonpatch[_0x73a9('0x23')](_0x41d242,_0x1b27f0,!![]);}catch(_0x1b5775){return BPromise[_0x73a9('0x24')](_0x1b5775);}return _0x41d242[_0x73a9('0x25')]();};}function saveUpdates(_0x57e8b0,_0x28c4aa){return function(_0x1b747e){if(_0x1b747e){return _0x1b747e[_0x73a9('0x26')](_0x57e8b0)['then'](function(_0x3de8c3){return _0x3de8c3;});}return null;};}function removeEntity(_0x216f11,_0x363389){return function(_0x20d172){if(_0x20d172){return _0x20d172[_0x73a9('0x27')]()[_0x73a9('0x28')](function(){_0x216f11[_0x73a9('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2539c7,_0x492c90){return function(_0x23cf16){if(!_0x23cf16){_0x2539c7[_0x73a9('0x29')](0x194);}return _0x23cf16;};}function handleError(_0x1166dd,_0x2de28d){_0x2de28d=_0x2de28d||0x1f4;return function(_0x406f66){logger['error'](_0x406f66['stack']);if(_0x406f66[_0x73a9('0x2a')]){delete _0x406f66['name'];}_0x1166dd[_0x73a9('0x1b')](_0x2de28d)['send'](_0x406f66);};}function getInteractionUsers(_0x57ed45,_0x4f3474){return new BPromise(function(_0xc906cb,_0x4d4ad2){try{if(_0x4f3474[_0x57ed45['id']]){_0x57ed45[_0x73a9('0x2b')]=_[_0x73a9('0x2c')](_0x4f3474[_0x57ed45['id']],function(_0xfd4ff4){return{'id':_0xfd4ff4['id']};});}}catch(_0x52dbfc){_0x4d4ad2(_0x52dbfc);}_0xc906cb(_0x57ed45);});}function getInteractionTags(_0x75d77c,_0x22a950){return new BPromise(function(_0x1e3a4a,_0x23d949){try{if(_0x75d77c[_0x73a9('0x2d')]){_0x75d77c['Tags']=[];_0x75d77c['TagIds']['split'](',')['forEach'](function(_0x7eb6b2){_0x75d77c[_0x73a9('0x2e')][_0x73a9('0x2f')](_0x22a950[_0x7eb6b2]);});}delete _0x75d77c['TagIds'];}catch(_0xc4f462){_0x23d949(_0xc4f462);}_0x1e3a4a(_0x75d77c);});}function updateFaxInteraction(_0x176e66,_0x125511,_0x39dd3d){return new BPromise(function(_0x10beb9,_0x44568b){return getInteractionUsers(_0x176e66,_0x39dd3d)[_0x73a9('0x28')](function(_0x49e98f){return getInteractionTags(_0x49e98f,_0x125511);})[_0x73a9('0x28')](function(_0x560013){_0x10beb9(_0x560013);})[_0x73a9('0x30')](function(_0x2f4878){_0x44568b(_0x2f4878);});});}exports[_0x73a9('0x31')]=function(_0x453ce0,_0xf94e0c){var _0x522a6b={},_0x15390c={},_0x3a003d={'count':0x0,'rows':[]};var _0x3351ab=db[_0x73a9('0x32')][_0x73a9('0x33')];_0x15390c[_0x73a9('0x34')]=_[_0x73a9('0x35')](_0x3351ab);_0x15390c[_0x73a9('0x36')]=_[_0x73a9('0x35')](_0x453ce0[_0x73a9('0x36')]);_0x15390c[_0x73a9('0x37')]=_[_0x73a9('0x38')](_0x15390c[_0x73a9('0x34')],_0x15390c[_0x73a9('0x36')]);_0x522a6b[_0x73a9('0x39')]=_[_0x73a9('0x38')](_0x15390c[_0x73a9('0x34')],qs[_0x73a9('0x3a')](_0x453ce0['query'][_0x73a9('0x3a')]));_0x522a6b['attributes']=_0x522a6b[_0x73a9('0x39')][_0x73a9('0x3b')]?_0x522a6b[_0x73a9('0x39')]:_0x15390c['model'];if(!_0x453ce0[_0x73a9('0x36')][_0x73a9('0x3c')](_0x73a9('0x3d'))){_0x522a6b[_0x73a9('0x20')]=qs[_0x73a9('0x20')](_0x453ce0[_0x73a9('0x36')][_0x73a9('0x20')]);_0x522a6b['offset']=qs['offset'](_0x453ce0[_0x73a9('0x36')][_0x73a9('0x1f')]);}_0x522a6b[_0x73a9('0x3e')]=qs['sort'](_0x453ce0[_0x73a9('0x36')]['sort']);_0x522a6b[_0x73a9('0x3f')]=qs['filters'](_[_0x73a9('0x40')](_0x453ce0['query'],_0x15390c[_0x73a9('0x37')]));var _0xd3d6b6=[];var _0x577761=squel[_0x73a9('0x41')]()['field']('id')['field']('name')['field']('color')['from'](_0x73a9('0x42'));var _0x4ba537=squel['select']()[_0x73a9('0x43')](_0x73a9('0x44'))[_0x73a9('0x45')](_0x73a9('0x46'),'me')['where'](_0x73a9('0x47'))[_0x73a9('0x3f')](_0x73a9('0x48'))[_0x73a9('0x3f')]('me.read\x20=\x20false');var _0x5cc0a1=squel['select']()[_0x73a9('0x43')](_0x73a9('0x49'))['field'](_0x73a9('0x4a'))[_0x73a9('0x45')]('user_has_fax_interactions','ui')[_0x73a9('0x4b')]('users','u',_0x73a9('0x4c'));var _0x3007cb=squel[_0x73a9('0x41')]()[_0x73a9('0x45')](_0x73a9('0x4d'),'i')[_0x73a9('0x4b')]('cm_contacts','c',_0x73a9('0x4e'))[_0x73a9('0x4b')](_0x73a9('0x4f'),'o',_0x73a9('0x50'))['left_join'](_0x73a9('0x51'),'a',_0x73a9('0x52'))[_0x73a9('0x4b')](_0x73a9('0x46'),'me',_0x73a9('0x53'));var _0x4265c7=squel[_0x73a9('0x54')]();if(_0x453ce0[_0x73a9('0x36')][_0x73a9('0x55')]){var _0x36f450=JSON[_0x73a9('0x56')](_0x453ce0[_0x73a9('0x36')][_0x73a9('0x55')]);_[_0x73a9('0x35')](_0x36f450)['forEach'](function(_0x2d9c71){var _0x3e727c=_0x36f450[_0x2d9c71];if(_0x2d9c71==='createdAt'){var _0x300e7a=moment(_0x3e727c['value']['dateStart'])[_0x73a9('0x57')](_0x73a9('0x58'))[_0x73a9('0x59')]()['format']();var _0x4f3096=moment(_0x4f3096)[_0x73a9('0x59')]()[_0x73a9('0x5a')](_0x73a9('0x58'))['format']();_0x4265c7[_0x73a9('0x5b')](_0x73a9('0x5c'),_0x300e7a,_0x4f3096);}else{if(_[_0x73a9('0x5d')](_0x3e727c[_0x73a9('0x5e')])){_0x3e727c[_0x73a9('0x5e')][_0x73a9('0x5f')](function(_0x51b879){switch(_0x3e727c['condition'][_0x73a9('0x60')]){case'IS':if(_0x2d9c71!=='TagId'&&_0x2d9c71!==_0x73a9('0x61')){if(_[_0x73a9('0x5d')](_0x3e727c[_0x73a9('0x60')])&&_0x3e727c[_0x73a9('0x60')][_0x73a9('0x3b')]>0x1){_0x4265c7[_0x73a9('0x5b')](_0x3e727c[_0x73a9('0x62')]+'.'+_0x2d9c71+_0x73a9('0x63'),_0x3e727c[_0x73a9('0x60')]);}else{_0x4265c7['and'](_0x3e727c['tableAlias']+'.'+_0x2d9c71+_0x73a9('0x64'),_0x3e727c[_0x73a9('0x60')][0x0]);}}break;case'=':_0x4265c7[_0x73a9('0x5b')](_0x3e727c[_0x73a9('0x62')]+'.'+_0x2d9c71+_0x73a9('0x64'),_0x3e727c[_0x73a9('0x60')]);break;case _0x73a9('0x65'):if(_0x2d9c71===_0x73a9('0x66')){_0x4265c7[_0x73a9('0x5b')]('c.firstName'+_0x73a9('0x67'),'%'+_0x3e727c[_0x73a9('0x60')]+'%');_0x4265c7['or']('c.lastName'+'\x20LIKE\x20?','%'+_0x3e727c[_0x73a9('0x60')]+'%');_0x4265c7['or'](_0x73a9('0x68')+'\x20LIKE\x20?','%'+_0x3e727c[_0x73a9('0x60')]+'%');}else{_0x4265c7[_0x73a9('0x5b')](_0x3e727c[_0x73a9('0x62')]+'.'+_0x2d9c71+_0x73a9('0x67'),'%'+_0x3e727c[_0x73a9('0x60')]+'%');}break;case'>':_0x4265c7['and'](_0x3e727c[_0x73a9('0x62')]+'.'+_0x2d9c71+_0x73a9('0x69'),_0x3e727c['value']);break;case'<':_0x4265c7[_0x73a9('0x5b')](_0x3e727c[_0x73a9('0x62')]+'.'+_0x2d9c71+_0x73a9('0x6a'),_0x3e727c[_0x73a9('0x60')]);break;}});}else{switch(_0x3e727c[_0x73a9('0x5e')][_0x73a9('0x60')]){case'IS':if(_0x2d9c71!==_0x73a9('0x6b')&&_0x2d9c71!==_0x73a9('0x61')){if(_[_0x73a9('0x5d')](_0x3e727c[_0x73a9('0x60')])&&_0x3e727c[_0x73a9('0x60')]['length']>0x1){_0x4265c7[_0x73a9('0x5b')](_0x3e727c[_0x73a9('0x62')]+'.'+_0x2d9c71+_0x73a9('0x63'),_0x3e727c[_0x73a9('0x60')]);}else{_0x4265c7[_0x73a9('0x5b')](_0x3e727c[_0x73a9('0x62')]+'.'+_0x2d9c71+_0x73a9('0x64'),_0x3e727c[_0x73a9('0x60')][0x0]);}}break;case'=':_0x4265c7[_0x73a9('0x5b')](_0x3e727c['tableAlias']+'.'+_0x2d9c71+_0x73a9('0x64'),_0x3e727c[_0x73a9('0x60')]);break;case _0x73a9('0x65'):if(_0x2d9c71===_0x73a9('0x66')){_0x4265c7[_0x73a9('0x5b')](_0x73a9('0x6c')+'\x20LIKE\x20?','%'+_0x3e727c[_0x73a9('0x60')]+'%');_0x4265c7['or'](_0x73a9('0x6d')+_0x73a9('0x67'),'%'+_0x3e727c[_0x73a9('0x60')]+'%');_0x4265c7['or'](_0x73a9('0x68')+_0x73a9('0x67'),'%'+_0x3e727c[_0x73a9('0x60')]+'%');}else{_0x4265c7['and'](_0x3e727c[_0x73a9('0x62')]+'.'+_0x2d9c71+_0x73a9('0x67'),'%'+_0x3e727c[_0x73a9('0x60')]+'%');}break;case'>':_0x4265c7[_0x73a9('0x5b')](_0x3e727c['tableAlias']+'.'+_0x2d9c71+'\x20>\x20?',_0x3e727c[_0x73a9('0x60')]);break;case'<':_0x4265c7[_0x73a9('0x5b')](_0x3e727c[_0x73a9('0x62')]+'.'+_0x2d9c71+_0x73a9('0x6a'),_0x3e727c[_0x73a9('0x60')]);break;}}}});}else{var _0x33accf=_(Object[_0x73a9('0x35')](_0x453ce0[_0x73a9('0x36')]))[_0x73a9('0x2c')](function(_0x54f862){return _0x3351ab[_0x73a9('0x3c')](_0x54f862)?_0x54f862:undefined;})[_0x73a9('0x6e')](function(_0xc1fa8){return!_[_0x73a9('0x6f')](_0xc1fa8);})[_0x73a9('0x60')]();if(!_['isEmpty'](_0x33accf)){_0x33accf[_0x73a9('0x5f')](function(_0xf1ba9c){if(_0xf1ba9c===_0x73a9('0x70')){_0x3007cb[_0x73a9('0x3f')](_0x73a9('0x71'),[]['concat'](_0x453ce0[_0x73a9('0x36')][_0xf1ba9c]));}else if(_0xf1ba9c==='createdAt'){var _0x1a20ea=JSON['parse'](_0x453ce0[_0x73a9('0x36')][_0xf1ba9c])[_0x73a9('0x72')];var _0xf5ef60=JSON[_0x73a9('0x56')](_0x453ce0['query'][_0xf1ba9c])[_0x73a9('0x73')];_0x3007cb[_0x73a9('0x3f')](_0x73a9('0x5c'),_0x1a20ea,_0xf5ef60);}else{if(_0x453ce0[_0x73a9('0x36')][_0xf1ba9c]===_0x73a9('0x74')){_0x3007cb[_0x73a9('0x3f')]('i.'+_0xf1ba9c+'\x20IS\x20NULL');}else{_0x3007cb[_0x73a9('0x3f')]('i.'+_0xf1ba9c+_0x73a9('0x64'),_0x453ce0[_0x73a9('0x36')][_0xf1ba9c]);}}});}if(_0x453ce0[_0x73a9('0x36')][_0x73a9('0x6e')]){var _0x214c9b=_0x453ce0['query']['filter'][_0x73a9('0x75')]('\x5c','\x5c\x5c')['replace']('\x27\x27',_0x73a9('0x76'));if(qs['isNumeric'](_0x214c9b)){_0x4265c7['or'](_0x73a9('0x77'),_0x214c9b+'%')['or']('i.fax\x20LIKE\x20?',_0x214c9b+'%');}_0x4265c7['or'](_0x73a9('0x78'),_0x214c9b+'%');}}_0x3007cb['where'](_0x4265c7);if(_0x522a6b[_0x73a9('0x3e')]){_0x522a6b['order'][_0x73a9('0x5f')](function(_0x20b48c){_0x3007cb[_0x73a9('0x3e')]('i.'+_0x20b48c[0x0],_0x20b48c[0x1]===_0x73a9('0x79')?![]:!![]);});}_0x3007cb[_0x73a9('0x7a')]('i.id');var _0x5dd598={'type':db[_0x73a9('0x7b')]['QueryTypes']['SELECT'],'raw':!![]};var _0x5427aa=_0x3007cb[_0x73a9('0x7c')]()['field']('COUNT(*)')[_0x73a9('0x43')](_0x73a9('0x7d'),_0x73a9('0x61'));if(!_0x453ce0[_0x73a9('0x36')]['advancedFilter']){if(_0x453ce0['query'][_0x73a9('0x7e')]){if(_0x453ce0['query']['read']==0x1){_0x5427aa['having'](_0x73a9('0x7f'));_0x3007cb[_0x73a9('0x80')]('`unreadMessages`\x20=\x200');}else{_0x5427aa['having'](_0x73a9('0x81'));_0x3007cb[_0x73a9('0x80')](_0x73a9('0x81'));}}if(_0x453ce0['query']['tag']){var _0x4b8516=_['isArray'](_0x453ce0[_0x73a9('0x36')]['tag'])?_0x453ce0[_0x73a9('0x36')][_0x73a9('0x82')]:new Array(_0x453ce0[_0x73a9('0x36')][_0x73a9('0x82')]);var _0x363aab=squel[_0x73a9('0x54')]();_0x4b8516[_0x73a9('0x5f')](function(_0x56649c){_0x363aab['or'](_0x73a9('0x83'),'%,'+_0x56649c+',%');});_0x3007cb['having'](_0x363aab);_0x5427aa[_0x73a9('0x4b')](_0x73a9('0x84'),'it',_0x73a9('0x85'));_0x5427aa[_0x73a9('0x4b')](_0x73a9('0x42'),'t',_0x73a9('0x86'));_0x5427aa[_0x73a9('0x3f')](_0x73a9('0x87'),_0x4b8516);}}else{var _0x36f450=JSON[_0x73a9('0x56')](_0x453ce0['query'][_0x73a9('0x55')]);_[_0x73a9('0x35')](_0x36f450)[_0x73a9('0x5f')](function(_0x1a358d){var _0x1a01e8=_0x36f450[_0x1a358d];if(_0x1a358d===_0x73a9('0x6b')){var _0x190124=_0x1a01e8['value'];var _0xe3ad85=squel[_0x73a9('0x54')]();_0x190124[_0x73a9('0x5f')](function(_0x29f2e2){_0xe3ad85['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x29f2e2+',%');});_0x3007cb['having'](_0xe3ad85);_0x5427aa[_0x73a9('0x4b')](_0x73a9('0x88'),'it',_0x73a9('0x89'));_0x5427aa[_0x73a9('0x4b')](_0x73a9('0x42'),'t','t.id\x20=\x20it.TagId');_0x5427aa['where']('t.id\x20IN\x20?',_0x190124);}else if(_0x1a358d===_0x73a9('0x61')){if(_0x1a01e8['value'][_0x73a9('0x3b')]===0x1){if(_0x1a01e8[_0x73a9('0x60')][0x0]===0x1){_0x5427aa[_0x73a9('0x80')](_0x73a9('0x7f'));_0x3007cb[_0x73a9('0x80')]('`unreadMessages`\x20=\x200');}else{_0x5427aa[_0x73a9('0x80')](_0x73a9('0x81'));_0x3007cb['having'](_0x73a9('0x81'));}}}});}db['sequelize'][_0x73a9('0x36')](_0x5427aa[_0x73a9('0x8a')](),_0x5dd598)[_0x73a9('0x28')](function(_0x5bb6bb){_0x3a003d[_0x73a9('0x1e')]=_0x5bb6bb['length'];if(_0x3a003d['count']===0x0)return[];return db[_0x73a9('0x8b')][_0x73a9('0x36')](_0x577761[_0x73a9('0x8a')](),_0x5dd598)[_0x73a9('0x28')](function(_0x3b362a){_0xd3d6b6=_[_0x73a9('0x8c')](_0x3b362a,'id');_0x5dd598=_['merge'](_0x5dd598,{'model':db[_0x73a9('0x32')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x3007cb[_0x73a9('0x43')]('COUNT(me.id)',_0x73a9('0x61'));_0x3007cb['field'](_0x73a9('0x8d'),_0x73a9('0x8e'));_0x3007cb[_0x73a9('0x43')](_0x73a9('0x8f'));_0x3007cb[_0x73a9('0x43')](_0x73a9('0x6c'),'Contact.firstName');_0x3007cb[_0x73a9('0x43')](_0x73a9('0x6d'),'Contact.lastName');_0x3007cb[_0x73a9('0x43')](_0x73a9('0x68'),_0x73a9('0x90'));_0x3007cb[_0x73a9('0x43')](_0x73a9('0x91'),_0x73a9('0x92'));_0x3007cb[_0x73a9('0x43')](_0x73a9('0x93'),_0x73a9('0x94'));_0x3007cb['field'](_0x73a9('0x95'),'Contact.fax');_0x3007cb['field'](_0x73a9('0x96'),_0x73a9('0x2d'));_0x3007cb['left_join']('fax_interaction_has_tags','it',_0x73a9('0x85'));_0x3007cb[_0x73a9('0x4b')](_0x73a9('0x42'),'t',_0x73a9('0x86'));_0x3007cb['limit'](_0x522a6b['limit']);_0x3007cb['offset'](_0x522a6b[_0x73a9('0x1f')]);return db[_0x73a9('0x8b')]['query'](_0x3007cb[_0x73a9('0x8a')](),_0x5dd598);})[_0x73a9('0x28')](function(_0x4830fa){_0x5cc0a1[_0x73a9('0x3f')](_0x73a9('0x97'),_[_0x73a9('0x2c')](_0x4830fa,'id'));return db[_0x73a9('0x8b')][_0x73a9('0x36')](_0x5cc0a1[_0x73a9('0x8a')](),_0x5dd598)[_0x73a9('0x28')](function(_0xa7c864){var _0x3ce6d6=_[_0x73a9('0x98')](_0xa7c864,_0x73a9('0x99'));var _0x2d5876=[];_0x4830fa[_0x73a9('0x5f')](function(_0x1dfe1c){_0x2d5876[_0x73a9('0x2f')](updateFaxInteraction(_0x1dfe1c,_0xd3d6b6,_0x3ce6d6));});return BPromise[_0x73a9('0x9a')](_0x2d5876);});});})[_0x73a9('0x28')](function(_0x362b5e){_0x3a003d['rows']=_0x362b5e;return _0x3a003d;})[_0x73a9('0x28')](respondWithFilteredResult(_0xf94e0c,_0x522a6b))['catch'](handleError(_0xf94e0c,null));};exports[_0x73a9('0x9b')]=function(_0x195174,_0x16ecfc){var _0x4b3418={'raw':![],'where':{'id':_0x195174[_0x73a9('0x9c')]['id']}},_0x1d4ba8={};_0x1d4ba8[_0x73a9('0x34')]=_['keys'](db[_0x73a9('0x32')][_0x73a9('0x33')]);_0x1d4ba8[_0x73a9('0x36')]=_[_0x73a9('0x35')](_0x195174['query']);_0x1d4ba8['filters']=_[_0x73a9('0x38')](_0x1d4ba8[_0x73a9('0x34')],_0x1d4ba8[_0x73a9('0x36')]);_0x4b3418['attributes']=_['intersection'](_0x1d4ba8['model'],qs[_0x73a9('0x3a')](_0x195174['query'][_0x73a9('0x3a')]));_0x4b3418[_0x73a9('0x39')]=_0x4b3418[_0x73a9('0x39')]['length']?_0x4b3418[_0x73a9('0x39')]:_0x1d4ba8[_0x73a9('0x34')];if(_0x195174[_0x73a9('0x36')]['includeAll']){_0x4b3418[_0x73a9('0x9d')]=[{'all':!![]}];}_0x4b3418=_[_0x73a9('0x9e')]({},_0x4b3418,_0x195174['options']);return db['FaxInteraction'][_0x73a9('0x9f')](_0x4b3418)[_0x73a9('0x28')](handleEntityNotFound(_0x16ecfc,null))[_0x73a9('0x28')](respondWithResult(_0x16ecfc,null))[_0x73a9('0x30')](handleError(_0x16ecfc,null));};exports[_0x73a9('0xa0')]=function(_0x5049ee,_0x4a720c){return db[_0x73a9('0x32')][_0x73a9('0xa0')](_0x5049ee['body'],{})['then'](respondWithResult(_0x4a720c,0xc9))['catch'](handleError(_0x4a720c,null));};exports[_0x73a9('0x26')]=function(_0xa40b0e,_0x52350d){if(_0xa40b0e[_0x73a9('0xa1')]['id']){delete _0xa40b0e[_0x73a9('0xa1')]['id'];}return db[_0x73a9('0x32')][_0x73a9('0x9f')]({'where':{'id':_0xa40b0e[_0x73a9('0x9c')]['id']}})[_0x73a9('0x28')](handleEntityNotFound(_0x52350d,null))[_0x73a9('0x28')](saveUpdates(_0xa40b0e['body'],null))[_0x73a9('0x28')](respondWithResult(_0x52350d,null))[_0x73a9('0x30')](handleError(_0x52350d,null));};exports[_0x73a9('0x27')]=function(_0x127cd4,_0x4f4705){return db[_0x73a9('0x32')][_0x73a9('0x9f')]({'where':{'id':_0x127cd4[_0x73a9('0x9c')]['id']}})[_0x73a9('0x28')](handleEntityNotFound(_0x4f4705,null))['then'](removeEntity(_0x4f4705,null))[_0x73a9('0x30')](handleError(_0x4f4705,null));};exports['describe']=function(_0x286bd7,_0x324994){return db[_0x73a9('0x32')][_0x73a9('0xa2')]()[_0x73a9('0x28')](respondWithResult(_0x324994,null))['catch'](handleError(_0x324994,null));};exports['addMessage']=function(_0x463de2,_0x54efe0,_0x3c0f1){return db[_0x73a9('0xa3')][_0x73a9('0x9f')]({'where':{'id':_0x463de2[_0x73a9('0x9c')]['id']}})[_0x73a9('0x28')](handleEntityNotFound(_0x54efe0,null))['then'](function(_0x80a8cd){if(_0x80a8cd){return _0x80a8cd[_0x73a9('0xa4')](_0x463de2['body'][_0x73a9('0xa5')],_['omit'](_0x463de2['body'],[_0x73a9('0xa5'),'id'])||{});}})[_0x73a9('0x28')](respondWithResult(_0x54efe0,null))[_0x73a9('0x30')](handleError(_0x54efe0,null));};exports[_0x73a9('0xa6')]=function(_0x1c51ce,_0x4ab7ed,_0x29bcd2){var _0x39f6be={'raw':![],'where':{}};var _0x344941={};var _0x5dee21={'count':0x0,'rows':[]};return db[_0x73a9('0x32')][_0x73a9('0xa7')]({'where':{'id':_0x1c51ce[_0x73a9('0x9c')]['id']}})['then'](handleEntityNotFound(_0x4ab7ed,null))[_0x73a9('0x28')](function(_0x65b84f){if(_0x65b84f){_0x344941['model']=_[_0x73a9('0x35')](db['FaxMessage']['rawAttributes']);_0x344941[_0x73a9('0x36')]=_['keys'](_0x1c51ce[_0x73a9('0x36')]);_0x344941[_0x73a9('0x37')]=_[_0x73a9('0x38')](_0x344941[_0x73a9('0x34')],_0x344941[_0x73a9('0x36')]);_0x39f6be[_0x73a9('0x39')]=_[_0x73a9('0x38')](_0x344941['model'],qs[_0x73a9('0x3a')](_0x1c51ce[_0x73a9('0x36')][_0x73a9('0x3a')]));_0x39f6be['attributes']=_0x39f6be[_0x73a9('0x39')]['length']?_0x39f6be['attributes']:_0x344941[_0x73a9('0x34')];if(!_0x1c51ce['query'][_0x73a9('0x3c')]('nolimit')){_0x39f6be[_0x73a9('0x20')]=qs[_0x73a9('0x20')](_0x1c51ce[_0x73a9('0x36')]['limit']);_0x39f6be[_0x73a9('0x1f')]=qs[_0x73a9('0x1f')](_0x1c51ce[_0x73a9('0x36')][_0x73a9('0x1f')]);}_0x39f6be[_0x73a9('0x3e')]=qs[_0x73a9('0xa8')](_0x1c51ce[_0x73a9('0x36')][_0x73a9('0xa8')]);_0x39f6be[_0x73a9('0x3f')]=qs[_0x73a9('0x37')](_[_0x73a9('0x40')](_0x1c51ce[_0x73a9('0x36')],_0x344941['filters']));_0x39f6be['where'][_0x73a9('0x99')]=_0x65b84f['id'];if(_0x1c51ce[_0x73a9('0x36')][_0x73a9('0x6e')]){_0x39f6be[_0x73a9('0x3f')]=_[_0x73a9('0x9e')](_0x39f6be[_0x73a9('0x3f')],{'$or':_[_0x73a9('0x2c')](_0x39f6be['attributes'],function(_0x5e91c7){var _0x1cfed2={};_0x1cfed2[_0x5e91c7]={'$like':'%'+_0x1c51ce['query'][_0x73a9('0x6e')]+'%'};return _0x1cfed2;})});}if(_0x1c51ce['query'][_0x73a9('0x72')]){var _0xb48036=_0x1c51ce[_0x73a9('0x36')][_0x73a9('0x72')][_0x73a9('0xa9')](',');var _0x3a0c0a={};_0x3a0c0a[_0xb48036[0x0]]={'$gte':moment(_0xb48036[0x1])[_0x73a9('0xaa')](_0x73a9('0xab'))};_0x39f6be[_0x73a9('0x3f')]=_[_0x73a9('0x9e')](_0x39f6be['where'],_0x3a0c0a);}_0x39f6be=_[_0x73a9('0x9e')]({},_0x39f6be,_0x1c51ce[_0x73a9('0xac')]);return db[_0x73a9('0xa3')][_0x73a9('0x1e')]({'where':_0x39f6be[_0x73a9('0x3f')]})[_0x73a9('0x28')](function(_0x2c43c7){_0x5dee21[_0x73a9('0x1e')]=_0x2c43c7;if(_0x1c51ce[_0x73a9('0x36')][_0x73a9('0xad')]){_0x39f6be[_0x73a9('0x9d')]=[{'all':!![]}];}return db['FaxMessage']['findAll'](_0x39f6be);})[_0x73a9('0x28')](function(_0x25e981){_0x5dee21['rows']=_0x25e981;return _0x5dee21;});}})[_0x73a9('0x28')](respondWithFilteredResult(_0x4ab7ed,_0x39f6be))[_0x73a9('0x30')](handleError(_0x4ab7ed,null));};exports[_0x73a9('0xae')]=function(_0x38cd4d,_0xf8913,_0x3619d6){return db[_0x73a9('0x32')][_0x73a9('0x9f')]({'where':{'id':_0x38cd4d['params']['id']}})[_0x73a9('0x28')](handleEntityNotFound(_0xf8913,null))['then'](function(_0x54ccf7){if(_0x54ccf7){return _0x54ccf7[_0x73a9('0xaf')](_0x38cd4d[_0x73a9('0xa1')][_0x73a9('0xa5')],_['omit'](_0x38cd4d[_0x73a9('0xa1')],[_0x73a9('0xa5'),'id'])||{})[_0x73a9('0xb0')](function(){return db[_0x73a9('0xb1')][_0x73a9('0xb2')]({'attributes':['id',_0x73a9('0x2a'),_0x73a9('0xb3')],'where':{'id':_0x38cd4d[_0x73a9('0xa1')]['ids']}});})[_0x73a9('0x28')](function(_0x2954df){socket[_0x73a9('0xb4')](_0x73a9('0xb5'),{'id':Number(_0x38cd4d['params']['id']),'tags':_0x2954df||[]});return{'id':Number(_0x38cd4d[_0x73a9('0x9c')]['id']),'tags':_0x2954df||[]};});}})[_0x73a9('0x28')](respondWithResult(_0xf8913,null))[_0x73a9('0x30')](handleError(_0xf8913,null));};exports['removeTags']=function(_0x1d7619,_0x4b1869,_0xef7d69){return db[_0x73a9('0x32')][_0x73a9('0x9f')]({'where':{'id':_0x1d7619[_0x73a9('0x9c')]['id']}})[_0x73a9('0x28')](handleEntityNotFound(_0x4b1869,null))[_0x73a9('0x28')](function(_0x46dbf6){if(_0x46dbf6){return _0x46dbf6[_0x73a9('0xb6')](_0x1d7619[_0x73a9('0x36')][_0x73a9('0xa5')]);}})['then'](respondWithStatusCode(_0x4b1869,null))['catch'](handleError(_0x4b1869,null));};exports[_0x73a9('0xb7')]=function(_0x5658b,_0x5713ac){var _0x304146=moment()[_0x73a9('0xb8')]()[_0x73a9('0x8a')]();var _0x5288b1=path['join'](config['root'],_0x73a9('0xb9'),_0x73a9('0xba'),_0x73a9('0xbb'));var _0x4e6330=path['join'](config['root'],_0x73a9('0xb9'),_0x73a9('0xba'),_0x73a9('0xbc'));var _0xbdd186=path['join'](_0x4e6330,_0x304146);var _0x4074dc=util[_0x73a9('0xaa')](_0x73a9('0xbd'),_0x304146);var _0xb8c28b=path[_0x73a9('0xbe')](_0x4e6330,_0x4074dc);var _0x22c768=![];return db[_0x73a9('0x32')][_0x73a9('0x9f')]({'where':{'id':_0x5658b[_0x73a9('0x9c')]['id']}})[_0x73a9('0x28')](handleEntityNotFound(_0x5713ac,null))[_0x73a9('0x28')](function(_0x2ed693){if(_0x2ed693){return _0x2ed693[_0x73a9('0xa6')]({'attributes':['id',_0x73a9('0xa1'),'createdAt'],'include':[{'model':db[_0x73a9('0xbf')],'as':_0x73a9('0xbf')}]});}return[];})[_0x73a9('0x28')](function(_0x3cb539){_0x22c768=_0x3cb539[_0x73a9('0x3b')];if(_0x3cb539[_0x73a9('0x3b')]){fs[_0x73a9('0xc0')](_0xbdd186);for(var _0x3024c3=0x0;_0x3024c3<_0x3cb539[_0x73a9('0x3b')];_0x3024c3++){var _0x3380e8=_0x3cb539[_0x3024c3];var _0x45b52a=_0x3380e8[_0x73a9('0xbf')];if(_0x45b52a){var _0x27df7b=path['join'](_0x5288b1,_0x45b52a[_0x73a9('0xc1')]);if(fs[_0x73a9('0xc2')](_0x27df7b)){fs[_0x73a9('0xc3')](_0x27df7b)[_0x73a9('0xc4')](fs['createWriteStream'](path[_0x73a9('0xbe')](_0xbdd186,_0x45b52a[_0x73a9('0xc1')])));}}}}})[_0x73a9('0x28')](function(){if(_0x22c768){return new BPromise(function(_0xff3ce9,_0x5f176a){zipdir(_0xbdd186,{'saveTo':_0xb8c28b},function(_0x5a6816,_0x29579c){if(_0x5a6816)return _0x5f176a(_0x5a6816);return _0xff3ce9(_0x29579c);});});}})[_0x73a9('0x28')](function(){if(_0x22c768){return new BPromise(function(_0x64f59f,_0x5480e5){rimraf(_0xbdd186,function(_0x149512){if(_0x149512)_0x5480e5(_0x149512);return _0x64f59f();});});}})[_0x73a9('0x28')](function(){if(_0x22c768){return _0x5713ac[_0x73a9('0xb7')](_0xb8c28b,_0x4074dc,function(_0x549607){if(_0x549607){console[_0x73a9('0xc5')](_0x73a9('0xc6'),_0x549607);}else{fs[_0x73a9('0xc7')](_0xb8c28b);}});}else{return _0x5713ac['sendStatus'](0xc8);}})[_0x73a9('0x30')](handleError(_0x5713ac,null));};
\ No newline at end of file
index b520fdb..c37db5f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7b8e=['unreadMessages','length','emit','catch','hook','exports','../../mysqldb','FaxInteraction','setMaxListeners','save','update','getUsers','setDataValue','Users','map','findAll','then'];(function(_0x116423,_0x1a1ceb){var _0x52f058=function(_0xfda981){while(--_0xfda981){_0x116423['push'](_0x116423['shift']());}};_0x52f058(++_0x1a1ceb);}(_0x7b8e,0x127));var _0xe7b8=function(_0x4cbba4,_0xdd0998){_0x4cbba4=_0x4cbba4-0x0;var _0x25d3b3=_0x7b8e[_0x4cbba4];return _0x25d3b3;};'use strict';var EventEmitter=require('events');var FaxInteraction=require(_0xe7b8('0x0'))['db'][_0xe7b8('0x1')];var FaxMessage=require(_0xe7b8('0x0'))['db']['FaxMessage'];var FaxInteractionEvents=new EventEmitter();FaxInteractionEvents[_0xe7b8('0x2')](0x0);var events={'afterCreate':_0xe7b8('0x3'),'afterUpdate':_0xe7b8('0x4'),'afterDestroy':'remove'};function emitEvent(_0x5950c9){return function(_0x3f48cd,_0x4c56e4,_0x1dd84c){_0x3f48cd[_0xe7b8('0x5')]({'attributes':['id'],'raw':!![]})['then'](function(_0x2bb311){_0x3f48cd[_0xe7b8('0x6')](_0xe7b8('0x7'),_0x2bb311[_0xe7b8('0x8')](function(_0x5d6f93){return{'id':_0x5d6f93['id']};}));return FaxMessage[_0xe7b8('0x9')]({'where':{'FaxInteractionId':_0x3f48cd['id'],'direction':'in','read':![]},'raw':!![]});})[_0xe7b8('0xa')](function(_0x19c58){_0x3f48cd['setDataValue'](_0xe7b8('0xb'),_0x19c58[_0xe7b8('0xc')]);FaxInteractionEvents[_0xe7b8('0xd')](_0x5950c9+':'+_0x3f48cd['id'],_0x3f48cd);FaxInteractionEvents[_0xe7b8('0xd')](_0x5950c9,_0x3f48cd);_0x1dd84c(null);})[_0xe7b8('0xe')](_0x1dd84c(null));};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];FaxInteraction[_0xe7b8('0xf')](e,emitEvent(event));}}module[_0xe7b8('0x10')]=FaxInteractionEvents;
\ No newline at end of file
+var _0x36f2=['then','setDataValue','Users','map','findAll','unreadMessages','length','emit','catch','hook','exports','events','FaxInteraction','FaxMessage','update','remove'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0x36f2,0x9b));var _0x236f=function(_0x52b2ee,_0x14d250){_0x52b2ee=_0x52b2ee-0x0;var _0x472ea1=_0x36f2[_0x52b2ee];return _0x472ea1;};'use strict';var EventEmitter=require(_0x236f('0x0'));var FaxInteraction=require('../../mysqldb')['db'][_0x236f('0x1')];var FaxMessage=require('../../mysqldb')['db'][_0x236f('0x2')];var FaxInteractionEvents=new EventEmitter();FaxInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0x236f('0x3'),'afterDestroy':_0x236f('0x4')};function emitEvent(_0x539bb5){return function(_0x613b45,_0x997f2d,_0x2b8532){_0x613b45['getUsers']({'attributes':['id'],'raw':!![]})[_0x236f('0x5')](function(_0x47d817){_0x613b45[_0x236f('0x6')](_0x236f('0x7'),_0x47d817[_0x236f('0x8')](function(_0xffd2b7){return{'id':_0xffd2b7['id']};}));return FaxMessage[_0x236f('0x9')]({'where':{'FaxInteractionId':_0x613b45['id'],'direction':'in','read':![]},'raw':!![]});})[_0x236f('0x5')](function(_0x16ce6c){_0x613b45[_0x236f('0x6')](_0x236f('0xa'),_0x16ce6c[_0x236f('0xb')]);FaxInteractionEvents['emit'](_0x539bb5+':'+_0x613b45['id'],_0x613b45);FaxInteractionEvents[_0x236f('0xc')](_0x539bb5,_0x613b45);_0x2b8532(null);})[_0x236f('0xd')](_0x2b8532(null));};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];FaxInteraction[_0x236f('0xe')](e,emitEvent(event));}}module[_0x236f('0xf')]=FaxInteractionEvents;
\ No newline at end of file
index 63d2537..87fd953 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ea2=['closedAt','format','lodash','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','exports','FaxInteraction','fax_interactions','changed','closed'];(function(_0x4ff685,_0x282dce){var _0x10522f=function(_0x2e977a){while(--_0x2e977a){_0x4ff685['push'](_0x4ff685['shift']());}};_0x10522f(++_0x282dce);}(_0x3ea2,0x182));var _0x23ea=function(_0x48c998,_0x37d255){_0x48c998=_0x48c998-0x0;var _0x59c2a2=_0x3ea2[_0x48c998];return _0x59c2a2;};'use strict';var _=require(_0x23ea('0x0'));var util=require(_0x23ea('0x1'));var logger=require(_0x23ea('0x2'))(_0x23ea('0x3'));var moment=require(_0x23ea('0x4'));var BPromise=require(_0x23ea('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x23ea('0x6'));var rimraf=require(_0x23ea('0x7'));var config=require(_0x23ea('0x8'));var attributes=require('./faxInteraction.attributes');module[_0x23ea('0x9')]=function(_0x130523,_0x12a009){return _0x130523['define'](_0x23ea('0xa'),attributes,{'tableName':_0x23ea('0xb'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x2b901b,_0x5c8855,_0x4ab3b7){if(_0x2b901b[_0x23ea('0xc')](_0x23ea('0xd'))){_0x2b901b[_0x23ea('0xe')]=moment()[_0x23ea('0xf')]('YYYY-MM-DD\x20HH:mm:ss');}_0x4ab3b7(null,_0x2b901b);}}});};
\ No newline at end of file
+var _0x50b4=['moment','bluebird','request-promise','path','../../config/environment','exports','define','FaxInteraction','changed','closedAt','lodash','util','../../config/logger','api'];(function(_0x2438e1,_0xee863c){var _0x326304=function(_0x241e88){while(--_0x241e88){_0x2438e1['push'](_0x2438e1['shift']());}};_0x326304(++_0xee863c);}(_0x50b4,0xdc));var _0x450b=function(_0x194314,_0x591133){_0x194314=_0x194314-0x0;var _0x1dfab9=_0x50b4[_0x194314];return _0x1dfab9;};'use strict';var _=require(_0x450b('0x0'));var util=require(_0x450b('0x1'));var logger=require(_0x450b('0x2'))(_0x450b('0x3'));var moment=require(_0x450b('0x4'));var BPromise=require(_0x450b('0x5'));var rp=require(_0x450b('0x6'));var fs=require('fs');var path=require(_0x450b('0x7'));var rimraf=require('rimraf');var config=require(_0x450b('0x8'));var attributes=require('./faxInteraction.attributes');module[_0x450b('0x9')]=function(_0x4690b8,_0x468817){return _0x4690b8[_0x450b('0xa')](_0x450b('0xb'),attributes,{'tableName':'fax_interactions','paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x7d7c22,_0x1a5af1,_0x33e5ad){if(_0x7d7c22[_0x450b('0xc')]('closed')){_0x7d7c22[_0x450b('0xd')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');}_0x33e5ad(null,_0x7d7c22);}}});};
\ No newline at end of file
index 16610fe..6946e82 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x408c=['attributes','stringify','AddTagsToFaxInteraction','addTags','ids','omit','spread','AddTags','lodash','util','bluebird','randomstring','../../mysqldb','rpc','../../config/environment','http','redis','defaults','./faxInteraction.socket','register','FaxInteraction,\x20%s,\x20%s','debug','FaxInteraction,\x20%s,\x20%s,\x20%s','error','code','message','info','request\x20sent','catch','UpdateFaxInteraction','FaxInteraction','update','body','options','raw','where'];(function(_0x16e1f1,_0x20f280){var _0x410e7e=function(_0x519306){while(--_0x519306){_0x16e1f1['push'](_0x16e1f1['shift']());}};_0x410e7e(++_0x20f280);}(_0x408c,0x98));var _0xc408=function(_0x4baacb,_0x490c83){_0x4baacb=_0x4baacb-0x0;var _0x42752a=_0x408c[_0x4baacb];return _0x42752a;};'use strict';var _=require(_0xc408('0x0'));var util=require(_0xc408('0x1'));var moment=require('moment');var BPromise=require(_0xc408('0x2'));var rs=require(_0xc408('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xc408('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xc408('0x5'));var config=require(_0xc408('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0xc408('0x7')]({'port':0x232a});config[_0xc408('0x8')]=_[_0xc408('0x9')](config[_0xc408('0x8')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xc408('0x8')]));require(_0xc408('0xa'))[_0xc408('0xb')](socket);function respondWithRpcPromise(_0x202c69,_0x336938,_0x34add8){return new BPromise(function(_0x55f5fd,_0x4e1ab8){return client['request'](_0x202c69,_0x34add8)['then'](function(_0x230fb9){logger['info'](_0xc408('0xc'),_0x336938,'request\x20sent');logger[_0xc408('0xd')](_0xc408('0xe'),_0x336938,'request\x20sent',JSON['stringify'](_0x230fb9));if(_0x230fb9[_0xc408('0xf')]){if(_0x230fb9['error'][_0xc408('0x10')]===0x1f4){logger[_0xc408('0xf')](_0xc408('0xc'),_0x336938,_0x230fb9[_0xc408('0xf')][_0xc408('0x11')]);return _0x4e1ab8(_0x230fb9[_0xc408('0xf')]['message']);}logger['error'](_0xc408('0xc'),_0x336938,_0x230fb9['error'][_0xc408('0x11')]);return _0x55f5fd(_0x230fb9[_0xc408('0xf')][_0xc408('0x11')]);}else{logger[_0xc408('0x12')](_0xc408('0xc'),_0x336938,_0xc408('0x13'));_0x55f5fd(_0x230fb9['result'][_0xc408('0x11')]);}})[_0xc408('0x14')](function(_0x5825bc){logger[_0xc408('0xf')]('FaxInteraction,\x20%s,\x20%s',_0x336938,_0x5825bc);_0x4e1ab8(_0x5825bc);});});}exports[_0xc408('0x15')]=function(_0x3b91d5){var _0x198ad8=this;return new Promise(function(_0x18e940,_0x5ca18b){return db[_0xc408('0x16')][_0xc408('0x17')](_0x3b91d5[_0xc408('0x18')],{'raw':_0x3b91d5[_0xc408('0x19')]?_0x3b91d5[_0xc408('0x19')][_0xc408('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3b91d5[_0xc408('0x19')]?_0x3b91d5[_0xc408('0x19')][_0xc408('0x1b')]||null:null,'attributes':_0x3b91d5[_0xc408('0x19')]?_0x3b91d5['options'][_0xc408('0x1c')]||null:null,'limit':_0x3b91d5[_0xc408('0x19')]?_0x3b91d5[_0xc408('0x19')]['limit']||null:null})['then'](function(_0x3d6b63){logger[_0xc408('0x12')](_0xc408('0x15'),_0x3b91d5);logger[_0xc408('0xd')](_0xc408('0x15'),_0x3b91d5,JSON[_0xc408('0x1d')](_0x3d6b63));_0x18e940(_0x3d6b63);})[_0xc408('0x14')](function(_0x218c41){logger[_0xc408('0xf')](_0xc408('0x15'),_0x218c41[_0xc408('0x11')],_0x3b91d5);_0x5ca18b(_0x198ad8[_0xc408('0xf')](0x1f4,_0x218c41['message']));});});};exports[_0xc408('0x1e')]=function(_0xbfdaa5){return new Promise(function(_0x5441a0,_0x349c86){return db[_0xc408('0x16')]['find']({'where':_0xbfdaa5[_0xc408('0x19')]?_0xbfdaa5['options']['where']||null:null})['then'](function(_0x5d6b04){if(_0x5d6b04){return _0x5d6b04[_0xc408('0x1f')](_0xbfdaa5[_0xc408('0x18')][_0xc408('0x20')],_[_0xc408('0x21')](_0xbfdaa5[_0xc408('0x18')],[_0xc408('0x20'),'id'])||{});}})[_0xc408('0x22')](function(_0x572ad0){logger[_0xc408('0x12')]('AddTags',_0xbfdaa5);logger['debug'](_0xc408('0x23'),_0xbfdaa5,JSON[_0xc408('0x1d')](_0x572ad0));_0x5441a0(_0x572ad0);})['catch'](function(_0x365c59){logger[_0xc408('0xf')](_0xc408('0x23'),_0x365c59['message'],_0xbfdaa5);_0x349c86(_this[_0xc408('0xf')](0x1f4,_0x365c59[_0xc408('0x11')]));});});};
\ No newline at end of file
+var _0x04ff=['result','catch','UpdateFaxInteraction','update','options','raw','where','attributes','find','body','ids','omit','spread','AddTags','util','moment','bluebird','randomstring','ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','client','redis','defaults','localhost','socket.io-emitter','register','request','then','info','FaxInteraction,\x20%s,\x20%s','request\x20sent','debug','FaxInteraction,\x20%s,\x20%s,\x20%s','stringify','code','error','message'];(function(_0x2aee43,_0x398988){var _0x55006c=function(_0x5654db){while(--_0x5654db){_0x2aee43['push'](_0x2aee43['shift']());}};_0x55006c(++_0x398988);}(_0x04ff,0x86));var _0xf04f=function(_0x5851ce,_0x1b72ad){_0x5851ce=_0x5851ce-0x0;var _0x4cbda2=_0x04ff[_0x5851ce];return _0x4cbda2;};'use strict';var _=require('lodash');var util=require(_0xf04f('0x0'));var moment=require(_0xf04f('0x1'));var BPromise=require(_0xf04f('0x2'));var rs=require(_0xf04f('0x3'));var fs=require('fs');var Redis=require(_0xf04f('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0xf04f('0x5'));var logger=require('../../config/logger')(_0xf04f('0x6'));var config=require(_0xf04f('0x7'));var jayson=require(_0xf04f('0x8'));var client=jayson[_0xf04f('0x9')]['http']({'port':0x232a});config[_0xf04f('0xa')]=_[_0xf04f('0xb')](config['redis'],{'host':_0xf04f('0xc'),'port':0x18eb});var socket=require(_0xf04f('0xd'))(new Redis(config[_0xf04f('0xa')]));require('./faxInteraction.socket')[_0xf04f('0xe')](socket);function respondWithRpcPromise(_0x14eed6,_0x117a93,_0x5090a2){return new BPromise(function(_0x297304,_0x45e62b){return client[_0xf04f('0xf')](_0x14eed6,_0x5090a2)[_0xf04f('0x10')](function(_0x55f1c7){logger[_0xf04f('0x11')](_0xf04f('0x12'),_0x117a93,_0xf04f('0x13'));logger[_0xf04f('0x14')](_0xf04f('0x15'),_0x117a93,'request\x20sent',JSON[_0xf04f('0x16')](_0x55f1c7));if(_0x55f1c7['error']){if(_0x55f1c7['error'][_0xf04f('0x17')]===0x1f4){logger[_0xf04f('0x18')]('FaxInteraction,\x20%s,\x20%s',_0x117a93,_0x55f1c7[_0xf04f('0x18')][_0xf04f('0x19')]);return _0x45e62b(_0x55f1c7[_0xf04f('0x18')][_0xf04f('0x19')]);}logger[_0xf04f('0x18')]('FaxInteraction,\x20%s,\x20%s',_0x117a93,_0x55f1c7[_0xf04f('0x18')][_0xf04f('0x19')]);return _0x297304(_0x55f1c7['error'][_0xf04f('0x19')]);}else{logger['info'](_0xf04f('0x12'),_0x117a93,_0xf04f('0x13'));_0x297304(_0x55f1c7[_0xf04f('0x1a')][_0xf04f('0x19')]);}})[_0xf04f('0x1b')](function(_0x4c02fb){logger[_0xf04f('0x18')](_0xf04f('0x12'),_0x117a93,_0x4c02fb);_0x45e62b(_0x4c02fb);});});}exports[_0xf04f('0x1c')]=function(_0x3ce4f6){var _0x2ac082=this;return new Promise(function(_0x1d7a77,_0xdfe5f8){return db['FaxInteraction'][_0xf04f('0x1d')](_0x3ce4f6['body'],{'raw':_0x3ce4f6[_0xf04f('0x1e')]?_0x3ce4f6[_0xf04f('0x1e')][_0xf04f('0x1f')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3ce4f6['options']?_0x3ce4f6[_0xf04f('0x1e')][_0xf04f('0x20')]||null:null,'attributes':_0x3ce4f6[_0xf04f('0x1e')]?_0x3ce4f6['options'][_0xf04f('0x21')]||null:null,'limit':_0x3ce4f6[_0xf04f('0x1e')]?_0x3ce4f6['options']['limit']||null:null})[_0xf04f('0x10')](function(_0x5881c3){logger[_0xf04f('0x11')](_0xf04f('0x1c'),_0x3ce4f6);logger[_0xf04f('0x14')]('UpdateFaxInteraction',_0x3ce4f6,JSON['stringify'](_0x5881c3));_0x1d7a77(_0x5881c3);})[_0xf04f('0x1b')](function(_0x4a90c2){logger['error'](_0xf04f('0x1c'),_0x4a90c2['message'],_0x3ce4f6);_0xdfe5f8(_0x2ac082[_0xf04f('0x18')](0x1f4,_0x4a90c2[_0xf04f('0x19')]));});});};exports['AddTagsToFaxInteraction']=function(_0x55b515){return new Promise(function(_0x267e5c,_0x11fabe){return db['FaxInteraction'][_0xf04f('0x22')]({'where':_0x55b515['options']?_0x55b515['options'][_0xf04f('0x20')]||null:null})[_0xf04f('0x10')](function(_0x5de045){if(_0x5de045){return _0x5de045['addTags'](_0x55b515[_0xf04f('0x23')][_0xf04f('0x24')],_[_0xf04f('0x25')](_0x55b515['body'],[_0xf04f('0x24'),'id'])||{});}})[_0xf04f('0x26')](function(_0xbeb09b){logger[_0xf04f('0x11')](_0xf04f('0x27'),_0x55b515);logger[_0xf04f('0x14')](_0xf04f('0x27'),_0x55b515,JSON['stringify'](_0xbeb09b));_0x267e5c(_0xbeb09b);})[_0xf04f('0x1b')](function(_0xd1f488){logger['error'](_0xf04f('0x27'),_0xd1f488[_0xf04f('0x19')],_0x55b515);_0x11fabe(_this[_0xf04f('0x18')](0x1f4,_0xd1f488[_0xf04f('0x19')]));});});};
\ No newline at end of file
index 0b3b72f..3345b4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5dfc=['remove','update','removeListener','register','length','./faxInteraction.events','save'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0x5dfc,0xe5));var _0xc5df=function(_0x2cc0b3,_0x120bf1){_0x2cc0b3=_0x2cc0b3-0x0;var _0x1667ef=_0x5dfc[_0x2cc0b3];return _0x1667ef;};'use strict';var FaxInteractionEvents=require(_0xc5df('0x0'));var events=[_0xc5df('0x1'),_0xc5df('0x2'),_0xc5df('0x3')];function createListener(_0x4e58b4,_0x2fdbee){return function(_0x4b1969){_0x2fdbee['emit'](_0x4e58b4,_0x4b1969);};}function removeListener(_0x59c46e,_0x35c1b6){return function(){FaxInteractionEvents[_0xc5df('0x4')](_0x59c46e,_0x35c1b6);};}exports[_0xc5df('0x5')]=function(_0x1fb05c){for(var _0x538f00=0x0,_0x5c8dea=events[_0xc5df('0x6')];_0x538f00<_0x5c8dea;_0x538f00++){var _0x591aa0=events[_0x538f00];var _0x5d195d=createListener('faxInteraction:'+_0x591aa0,_0x1fb05c);FaxInteractionEvents['on'](_0x591aa0,_0x5d195d);}};
\ No newline at end of file
+var _0xadeb=['./faxInteraction.events','save','remove','update','emit','faxInteraction:'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xadeb,0x198));var _0xbade=function(_0x280b2b,_0x26ee31){_0x280b2b=_0x280b2b-0x0;var _0x4ae2b3=_0xadeb[_0x280b2b];return _0x4ae2b3;};'use strict';var FaxInteractionEvents=require(_0xbade('0x0'));var events=[_0xbade('0x1'),_0xbade('0x2'),_0xbade('0x3')];function createListener(_0x2520a9,_0x2d1a00){return function(_0x19d80f){_0x2d1a00[_0xbade('0x4')](_0x2520a9,_0x19d80f);};}function removeListener(_0x39afb7,_0x336908){return function(){FaxInteractionEvents['removeListener'](_0x39afb7,_0x336908);};}exports['register']=function(_0x1766ac){for(var _0x20c7ea=0x0,_0x4778dc=events['length'];_0x20c7ea<_0x4778dc;_0x20c7ea++){var _0x23ad2b=events[_0x20c7ea];var _0x98a613=createListener(_0xbade('0x5')+_0x23ad2b,_0x1766ac);FaxInteractionEvents['on'](_0x23ad2b,_0x98a613);}};
\ No newline at end of file
index 8089863..d930866 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd02d=['destroy','/:id/tags','removeTags','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./faxInteraction.controller','isAuthenticated','index','get','/describe','describe','/:id','show','/:id/download','download','post','create','/:id/messages','addMessage','tracked','fax','addTags','put','faxinteraction:update','update','delete'];(function(_0x4c2825,_0x21d9f9){var _0x1b196c=function(_0x38637b){while(--_0x38637b){_0x4c2825['push'](_0x4c2825['shift']());}};_0x1b196c(++_0x21d9f9);}(_0xd02d,0xa9));var _0xdd02=function(_0x58ef8a,_0x4bdc28){_0x58ef8a=_0x58ef8a-0x0;var _0x553ac1=_0xd02d[_0x58ef8a];return _0x553ac1;};'use strict';var multer=require(_0xdd02('0x0'));var util=require(_0xdd02('0x1'));var path=require(_0xdd02('0x2'));var timeout=require(_0xdd02('0x3'));var express=require(_0xdd02('0x4'));var router=express[_0xdd02('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0xdd02('0x6'));var config=require(_0xdd02('0x7'));var controller=require(_0xdd02('0x8'));router['get']('/',auth[_0xdd02('0x9')](),controller[_0xdd02('0xa')]);router[_0xdd02('0xb')](_0xdd02('0xc'),auth[_0xdd02('0x9')](),controller[_0xdd02('0xd')]);router[_0xdd02('0xb')](_0xdd02('0xe'),auth[_0xdd02('0x9')](),controller[_0xdd02('0xf')]);router[_0xdd02('0xb')]('/:id/messages',auth[_0xdd02('0x9')](),controller['getMessages']);router['get'](_0xdd02('0x10'),auth[_0xdd02('0x9')](),controller[_0xdd02('0x11')]);router[_0xdd02('0x12')]('/',auth['isAuthenticated'](),controller[_0xdd02('0x13')]);router['post'](_0xdd02('0x14'),auth[_0xdd02('0x9')](),controller[_0xdd02('0x15')]);router[_0xdd02('0x12')]('/:id/tags',auth[_0xdd02('0x9')](),interaction[_0xdd02('0x16')](_0xdd02('0x17'),'faxinteraction:addtags'),controller[_0xdd02('0x18')]);router[_0xdd02('0x19')](_0xdd02('0xe'),auth[_0xdd02('0x9')](),interaction[_0xdd02('0x16')](_0xdd02('0x17'),_0xdd02('0x1a')),controller[_0xdd02('0x1b')]);router[_0xdd02('0x1c')](_0xdd02('0xe'),auth['isAuthenticated'](),interaction['tracked'](_0xdd02('0x17'),'faxinteraction:destroy'),controller[_0xdd02('0x1d')]);router[_0xdd02('0x1c')](_0xdd02('0x1e'),auth[_0xdd02('0x9')](),controller[_0xdd02('0x1f')]);module[_0xdd02('0x20')]=router;
\ No newline at end of file
+var _0xad4a=['delete','faxinteraction:destroy','destroy','removeTags','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxInteraction.controller','get','isAuthenticated','index','describe','/:id','/:id/messages','getMessages','/:id/download','download','post','create','addMessage','/:id/tags','tracked','fax','faxinteraction:addtags','addTags','put','faxinteraction:update','update'];(function(_0x26bd73,_0x44325f){var _0x531fcf=function(_0x1a9e35){while(--_0x1a9e35){_0x26bd73['push'](_0x26bd73['shift']());}};_0x531fcf(++_0x44325f);}(_0xad4a,0x8d));var _0xaad4=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xad4a[_0x321bb2];return _0x9c12ed;};'use strict';var multer=require(_0xaad4('0x0'));var util=require('util');var path=require(_0xaad4('0x1'));var timeout=require(_0xaad4('0x2'));var express=require(_0xaad4('0x3'));var router=express[_0xaad4('0x4')]();var auth=require(_0xaad4('0x5'));var interaction=require(_0xaad4('0x6'));var config=require(_0xaad4('0x7'));var controller=require(_0xaad4('0x8'));router[_0xaad4('0x9')]('/',auth[_0xaad4('0xa')](),controller[_0xaad4('0xb')]);router[_0xaad4('0x9')]('/describe',auth['isAuthenticated'](),controller[_0xaad4('0xc')]);router[_0xaad4('0x9')](_0xaad4('0xd'),auth['isAuthenticated'](),controller['show']);router[_0xaad4('0x9')](_0xaad4('0xe'),auth[_0xaad4('0xa')](),controller[_0xaad4('0xf')]);router[_0xaad4('0x9')](_0xaad4('0x10'),auth[_0xaad4('0xa')](),controller[_0xaad4('0x11')]);router[_0xaad4('0x12')]('/',auth[_0xaad4('0xa')](),controller[_0xaad4('0x13')]);router['post'](_0xaad4('0xe'),auth[_0xaad4('0xa')](),controller[_0xaad4('0x14')]);router[_0xaad4('0x12')](_0xaad4('0x15'),auth[_0xaad4('0xa')](),interaction[_0xaad4('0x16')](_0xaad4('0x17'),_0xaad4('0x18')),controller[_0xaad4('0x19')]);router[_0xaad4('0x1a')](_0xaad4('0xd'),auth[_0xaad4('0xa')](),interaction[_0xaad4('0x16')](_0xaad4('0x17'),_0xaad4('0x1b')),controller[_0xaad4('0x1c')]);router[_0xaad4('0x1d')]('/:id',auth['isAuthenticated'](),interaction[_0xaad4('0x16')](_0xaad4('0x17'),_0xaad4('0x1e')),controller[_0xaad4('0x1f')]);router[_0xaad4('0x1d')](_0xaad4('0x15'),auth[_0xaad4('0xa')](),controller[_0xaad4('0x20')]);module[_0xaad4('0x21')]=router;
\ No newline at end of file
index fd2c860..5884957 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x843f=['BOOLEAN','out','TEXT','DATE','exports'];(function(_0x161504,_0xecd8e1){var _0x3f1b5b=function(_0x2b8449){while(--_0x2b8449){_0x161504['push'](_0x161504['shift']());}};_0x3f1b5b(++_0xecd8e1);}(_0x843f,0xef));var _0xf843=function(_0x1ac5eb,_0x31ad27){_0x1ac5eb=_0x1ac5eb-0x0;var _0x20f2e8=_0x843f[_0x1ac5eb];return _0x20f2e8;};'use strict';var Sequelize=require('sequelize');module[_0xf843('0x0')]={'body':{'type':Sequelize['TEXT']('medium'),'allowNull':![]},'read':{'type':Sequelize[_0xf843('0x1')],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in',_0xf843('0x2')),'defaultValue':_0xf843('0x2'),'allowNull':![]},'failMessage':{'type':Sequelize[_0xf843('0x3')],'defaultValue':null},'readAt':{'type':Sequelize[_0xf843('0x4')]}};
\ No newline at end of file
+var _0x0111=['sequelize','exports','TEXT','medium','BOOLEAN','out','DATE'];(function(_0x11cc58,_0x313fc2){var _0x45084f=function(_0x4ce4cb){while(--_0x4ce4cb){_0x11cc58['push'](_0x11cc58['shift']());}};_0x45084f(++_0x313fc2);}(_0x0111,0x150));var _0x1011=function(_0x486970,_0x3da57d){_0x486970=_0x486970-0x0;var _0x5aec14=_0x0111[_0x486970];return _0x5aec14;};'use strict';var Sequelize=require(_0x1011('0x0'));module[_0x1011('0x1')]={'body':{'type':Sequelize[_0x1011('0x2')](_0x1011('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0x1011('0x4')],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in','out'),'defaultValue':_0x1011('0x5'),'allowNull':![]},'failMessage':{'type':Sequelize[_0x1011('0x2')],'defaultValue':null},'readAt':{'type':Sequelize[_0x1011('0x6')]}};
\ No newline at end of file
index 247fe7e..3bded7d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfc4c=['name','send','index','FaxMessage','query','filters','model','attributes','fields','length','order','sort','where','pick','filter','merge','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','params','rawAttributes','keys','intersection','find','body','describe','../../config/logger','fax-interactions','accept','readAt','YYYY-MM-DD\x20HH:mm:ss','UserId','CmContact','get','FaxInteraction','FaxInteractionId','read1stAt','interaction','user','role','null','AcceptMessage','acceptMessage','manual','interface','format','channel','event','EventManager','acceptmessage','fax','agent','[FAXMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','SIP/%s','rejectmessage','create','isNil','Attachment','findOne','AttachmentId','SendFax','FaxAccountId','/var/opt/motion2/server/files/attachments/%s','download','root','server','files','attachments','join','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','util','path','ejs','squel','crypto','desk.js','ioredis','../../components/auth/service','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','register','http','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','info','request\x20sent','debug','FaxMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','FaxMessage,\x20%s,\x20%s','message','result','catch','sendStatus','status','count','offset','limit','set','Content-Range','json','reject','save','update','destroy','stack'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0xfc4c,0xca));var _0xcfc4=function(_0x804c96,_0x16c809){_0x804c96=_0x804c96-0x0;var _0x4822ce=_0xfc4c[_0x804c96];return _0x4822ce;};'use strict';var pdf=require(_0xcfc4('0x0'));var emlformat=require(_0xcfc4('0x1'));var rimraf=require(_0xcfc4('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xcfc4('0x3'));var rp=require(_0xcfc4('0x4'));var moment=require(_0xcfc4('0x5'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xcfc4('0x6'));var path=require(_0xcfc4('0x7'));var sox=require('sox');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('jsforce');var deskjs=require(_0xcfc4('0xb'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0xcfc4('0xc'));var authService=require(_0xcfc4('0xd'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xcfc4('0xe'));var logger=require('../../config/logger')('api');var utils=require(_0xcfc4('0xf'));var config=require(_0xcfc4('0x10'));var db=require(_0xcfc4('0x11'))['db'];config[_0xcfc4('0x12')]=_[_0xcfc4('0x13')](config['redis'],{'host':_0xcfc4('0x14'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xcfc4('0x12')]));require('./faxMessage.socket')[_0xcfc4('0x15')](socket);var jayson=require('jayson/promise');var client=jayson['client'][_0xcfc4('0x16')]({'port':0x232c});var client9002=jayson[_0xcfc4('0x17')]['http']({'port':0x232a});function checkPasswordPattern(_0x407cd6,_0x391d92,_0x39f8f1){if(_0x39f8f1){var _0x4bb1f3=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4bb1f3['test'](_0x391d92)){return _0x407cd6;}else{throw new Error(_0xcfc4('0x18'));}}else{return _0x407cd6;}}function respondWithRpcPromise(_0x47db36,_0x54826c,_0x5c78f9,_0x136693){return new BPromise(function(_0x52cd7b,_0x472694){var _0x19887b=_0x136693||client;return _0x19887b['request'](_0x47db36,_0x5c78f9)[_0xcfc4('0x19')](function(_0x68347b){logger[_0xcfc4('0x1a')]('FaxMessage,\x20%s,\x20%s',_0x54826c,_0xcfc4('0x1b'));logger[_0xcfc4('0x1c')](_0xcfc4('0x1d'),_0x54826c,'request\x20sent',JSON[_0xcfc4('0x1e')](_0x68347b));if(_0x68347b[_0xcfc4('0x1f')]){if(_0x68347b[_0xcfc4('0x1f')][_0xcfc4('0x20')]===0x1f4){logger[_0xcfc4('0x1f')](_0xcfc4('0x21'),_0x54826c,_0x68347b[_0xcfc4('0x1f')][_0xcfc4('0x22')]);return _0x472694(_0x68347b[_0xcfc4('0x1f')][_0xcfc4('0x22')]);}logger[_0xcfc4('0x1f')]('FaxMessage,\x20%s,\x20%s',_0x54826c,_0x68347b[_0xcfc4('0x1f')][_0xcfc4('0x22')]);return _0x52cd7b(_0x68347b[_0xcfc4('0x1f')]['message']);}else{logger[_0xcfc4('0x1a')]('FaxMessage,\x20%s,\x20%s',_0x54826c,_0xcfc4('0x1b'));_0x52cd7b(_0x68347b[_0xcfc4('0x23')][_0xcfc4('0x22')]);}})[_0xcfc4('0x24')](function(_0x2e5ef4){logger[_0xcfc4('0x1f')]('FaxMessage,\x20%s,\x20%s',_0x54826c,_0x2e5ef4);_0x472694(_0x2e5ef4);});});}function respondWithStatusCode(_0x11aba3,_0x347f15){_0x347f15=_0x347f15||0xcc;return function(_0x201181){if(_0x201181){return _0x11aba3[_0xcfc4('0x25')](_0x347f15);}return _0x11aba3[_0xcfc4('0x26')](_0x347f15)['end']();};}function respondWithResult(_0x2a8b5a,_0xfdfccd){_0xfdfccd=_0xfdfccd||0xc8;return function(_0x37d762){if(_0x37d762){return _0x2a8b5a[_0xcfc4('0x26')](_0xfdfccd)['json'](_0x37d762);}};}function respondWithFilteredResult(_0x4c65fc,_0x534522){return function(_0x3c96bb){if(_0x3c96bb){var _0x12cf57=_0x3c96bb[_0xcfc4('0x27')],_0x220511=_0x534522[_0xcfc4('0x28')],_0x3c2baf=_0x534522['offset']+_0x534522[_0xcfc4('0x29')],_0xfff05a;if(_0x3c2baf>=_0x12cf57){_0x3c2baf=_0x12cf57;_0xfff05a=0xc8;}else{_0xfff05a=0xce;}_0x4c65fc[_0xcfc4('0x26')](_0xfff05a);return _0x4c65fc[_0xcfc4('0x2a')](_0xcfc4('0x2b'),_0x220511+'-'+_0x3c2baf+'/'+_0x12cf57)[_0xcfc4('0x2c')](_0x3c96bb);}return null;};}function patchUpdates(_0x3be3b1){return function(_0x2cc8c0){try{jsonpatch['apply'](_0x2cc8c0,_0x3be3b1,!![]);}catch(_0x514e0b){return BPromise[_0xcfc4('0x2d')](_0x514e0b);}return _0x2cc8c0[_0xcfc4('0x2e')]();};}function saveUpdates(_0x5ffe51,_0x5a72e8){return function(_0x321680){if(_0x321680){return _0x321680[_0xcfc4('0x2f')](_0x5ffe51)['then'](function(_0x3e3c8a){return _0x3e3c8a;});}return null;};}function removeEntity(_0x22999d,_0x2a49bf){return function(_0x41e6b4){if(_0x41e6b4){return _0x41e6b4[_0xcfc4('0x30')]()['then'](function(){_0x22999d[_0xcfc4('0x26')](0xcc)['end']();});}};}function handleEntityNotFound(_0x849b2b,_0x10b003){return function(_0x3ac6ea){if(!_0x3ac6ea){_0x849b2b[_0xcfc4('0x25')](0x194);}return _0x3ac6ea;};}function handleError(_0xfcd378,_0x2eaf19){_0x2eaf19=_0x2eaf19||0x1f4;return function(_0xa0f710){logger[_0xcfc4('0x1f')](_0xa0f710[_0xcfc4('0x31')]);if(_0xa0f710[_0xcfc4('0x32')]){delete _0xa0f710['name'];}_0xfcd378[_0xcfc4('0x26')](_0x2eaf19)[_0xcfc4('0x33')](_0xa0f710);};}exports[_0xcfc4('0x34')]=function(_0x3ba478,_0x16b6b2){var _0x50f351={},_0x44d886={},_0x54c3c7={'count':0x0,'rows':[]};var _0x12f63a=db[_0xcfc4('0x35')]['rawAttributes'];_0x44d886['model']=_['keys'](_0x12f63a);_0x44d886[_0xcfc4('0x36')]=_['keys'](_0x3ba478[_0xcfc4('0x36')]);_0x44d886[_0xcfc4('0x37')]=_['intersection'](_0x44d886[_0xcfc4('0x38')],_0x44d886[_0xcfc4('0x36')]);_0x50f351[_0xcfc4('0x39')]=_['intersection'](_0x44d886[_0xcfc4('0x38')],qs['fields'](_0x3ba478[_0xcfc4('0x36')][_0xcfc4('0x3a')]));_0x50f351[_0xcfc4('0x39')]=_0x50f351[_0xcfc4('0x39')][_0xcfc4('0x3b')]?_0x50f351[_0xcfc4('0x39')]:_0x44d886[_0xcfc4('0x38')];if(!_0x3ba478[_0xcfc4('0x36')]['hasOwnProperty']('nolimit')){_0x50f351[_0xcfc4('0x29')]=qs[_0xcfc4('0x29')](_0x3ba478['query'][_0xcfc4('0x29')]);_0x50f351[_0xcfc4('0x28')]=qs['offset'](_0x3ba478[_0xcfc4('0x36')][_0xcfc4('0x28')]);}_0x50f351[_0xcfc4('0x3c')]=qs[_0xcfc4('0x3d')](_0x3ba478['query'][_0xcfc4('0x3d')]);_0x50f351[_0xcfc4('0x3e')]=qs[_0xcfc4('0x37')](_[_0xcfc4('0x3f')](_0x3ba478[_0xcfc4('0x36')],_0x44d886['filters']));if(_0x3ba478[_0xcfc4('0x36')][_0xcfc4('0x40')]){_0x50f351[_0xcfc4('0x3e')]=_[_0xcfc4('0x41')](_0x50f351['where'],{'$or':_['map'](_0x12f63a,function(_0x294580){if(_0x294580['type'][_0xcfc4('0x42')]!==_0xcfc4('0x43')){var _0x464dc0={};_0x464dc0[_0x294580[_0xcfc4('0x44')]]={'$like':'%'+_0x3ba478['query'][_0xcfc4('0x40')]+'%'};return _0x464dc0;}})});}_0x50f351=_[_0xcfc4('0x41')]({},_0x50f351,_0x3ba478[_0xcfc4('0x45')]);var _0x5018a3={'where':_0x50f351[_0xcfc4('0x3e')]};return db[_0xcfc4('0x35')][_0xcfc4('0x27')](_0x5018a3)[_0xcfc4('0x19')](function(_0x3ddbef){_0x54c3c7[_0xcfc4('0x27')]=_0x3ddbef;if(_0x3ba478[_0xcfc4('0x36')][_0xcfc4('0x46')]){_0x50f351[_0xcfc4('0x47')]=[{'all':!![]}];}return db[_0xcfc4('0x35')][_0xcfc4('0x48')](_0x50f351);})['then'](function(_0x511acc){_0x54c3c7[_0xcfc4('0x49')]=_0x511acc;return _0x54c3c7;})['then'](respondWithFilteredResult(_0x16b6b2,_0x50f351))[_0xcfc4('0x24')](handleError(_0x16b6b2,null));};exports[_0xcfc4('0x4a')]=function(_0x2e9243,_0x434d10){var _0x14c924={'raw':!![],'where':{'id':_0x2e9243[_0xcfc4('0x4b')]['id']}},_0x37a457={};_0x37a457[_0xcfc4('0x38')]=_['keys'](db[_0xcfc4('0x35')][_0xcfc4('0x4c')]);_0x37a457[_0xcfc4('0x36')]=_[_0xcfc4('0x4d')](_0x2e9243['query']);_0x37a457[_0xcfc4('0x37')]=_[_0xcfc4('0x4e')](_0x37a457[_0xcfc4('0x38')],_0x37a457[_0xcfc4('0x36')]);_0x14c924[_0xcfc4('0x39')]=_[_0xcfc4('0x4e')](_0x37a457['model'],qs[_0xcfc4('0x3a')](_0x2e9243[_0xcfc4('0x36')]['fields']));_0x14c924['attributes']=_0x14c924[_0xcfc4('0x39')][_0xcfc4('0x3b')]?_0x14c924[_0xcfc4('0x39')]:_0x37a457['model'];if(_0x2e9243[_0xcfc4('0x36')][_0xcfc4('0x46')]){_0x14c924[_0xcfc4('0x47')]=[{'all':!![]}];}_0x14c924=_['merge']({},_0x14c924,_0x2e9243['options']);return db[_0xcfc4('0x35')][_0xcfc4('0x4f')](_0x14c924)[_0xcfc4('0x19')](handleEntityNotFound(_0x434d10,null))[_0xcfc4('0x19')](respondWithResult(_0x434d10,null))[_0xcfc4('0x24')](handleError(_0x434d10,null));};exports['update']=function(_0x152002,_0x1f2116){if(_0x152002[_0xcfc4('0x50')]['id']){delete _0x152002[_0xcfc4('0x50')]['id'];}return db['FaxMessage'][_0xcfc4('0x4f')]({'where':{'id':_0x152002[_0xcfc4('0x4b')]['id']}})[_0xcfc4('0x19')](handleEntityNotFound(_0x1f2116,null))[_0xcfc4('0x19')](saveUpdates(_0x152002[_0xcfc4('0x50')],null))['then'](respondWithResult(_0x1f2116,null))[_0xcfc4('0x24')](handleError(_0x1f2116,null));};exports[_0xcfc4('0x30')]=function(_0x41e2e2,_0x25d295){return db[_0xcfc4('0x35')][_0xcfc4('0x4f')]({'where':{'id':_0x41e2e2['params']['id']}})['then'](handleEntityNotFound(_0x25d295,null))['then'](removeEntity(_0x25d295,null))['catch'](handleError(_0x25d295,null));};exports[_0xcfc4('0x51')]=function(_0x5622f8,_0x2f01f8){return db['FaxMessage'][_0xcfc4('0x51')]()['then'](respondWithResult(_0x2f01f8,null))[_0xcfc4('0x24')](handleError(_0x2f01f8,null));};var interaction_log=require(_0xcfc4('0x52'))(_0xcfc4('0x53'));exports[_0xcfc4('0x54')]=function(_0x437915,_0x1386bc,_0x3e486e){var _0x1e0a33={'channel':'fax'};if(_0x437915[_0xcfc4('0x50')]['id']){delete _0x437915[_0xcfc4('0x50')]['id'];}_0x437915[_0xcfc4('0x50')]['read']=!![];_0x437915[_0xcfc4('0x50')][_0xcfc4('0x55')]=moment()['format'](_0xcfc4('0x56'));_0x437915['body'][_0xcfc4('0x57')]=_0x437915[_0xcfc4('0x50')][_0xcfc4('0x57')]||_0x437915['user']['id'];return db['FaxMessage']['find']({'where':{'id':_0x437915[_0xcfc4('0x4b')]['id'],'UserId':null},'include':[{'model':db[_0xcfc4('0x58')],'as':'Contact'}]})[_0xcfc4('0x19')](handleEntityNotFound(_0x1386bc,null))[_0xcfc4('0x19')](saveUpdates(_0x437915[_0xcfc4('0x50')],null))[_0xcfc4('0x19')](function(_0x336800){if(_0x336800){_0x1e0a33[_0xcfc4('0x22')]=_0x336800[_0xcfc4('0x59')]({'plain':!![]});return db[_0xcfc4('0x5a')]['find']({'where':{'id':_0x336800[_0xcfc4('0x5b')]}});}return null;})[_0xcfc4('0x19')](handleEntityNotFound(_0x1386bc,null))['then'](function(_0x522939){if(_0x522939){return _0x522939[_0xcfc4('0x2f')]({'UserId':_0x437915[_0xcfc4('0x50')]['UserId'],'read1stAt':_['isNil'](_0x522939[_0xcfc4('0x5c')])?moment()['format'](_0xcfc4('0x56')):undefined});}return null;})[_0xcfc4('0x19')](function(_0x42e355){if(_0x42e355){_0x1e0a33[_0xcfc4('0x5d')]=_0x42e355[_0xcfc4('0x59')]({'plain':!![]});interaction_log[_0xcfc4('0x1a')]('[FAXMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x437915[_0xcfc4('0x5e')]['id'],_0x437915['user'][_0xcfc4('0x32')],_0x437915['user'][_0xcfc4('0x5f')],_0x1e0a33[_0xcfc4('0x5d')]['id'],_0x437915['body']?JSON[_0xcfc4('0x1e')](_0x437915['body']):_0xcfc4('0x60'));return respondWithRpcPromise(_0xcfc4('0x61'),_0xcfc4('0x62'),_0x1e0a33);}return null;})[_0xcfc4('0x19')](function(_0xad2c77){if(_0xad2c77){if(_0x437915[_0xcfc4('0x50')][_0xcfc4('0x63')]){_0x1e0a33[_0xcfc4('0x22')][_0xcfc4('0x64')]=util[_0xcfc4('0x65')]('SIP/%s',_0x437915[_0xcfc4('0x5e')]['name']);_0x1e0a33[_0xcfc4('0x22')]['channel']=_0x1e0a33[_0xcfc4('0x66')];_0x1e0a33['message'][_0xcfc4('0x67')]='accept';return respondWithRpcPromise('EventManager',_0xcfc4('0x68'),{'event':_0xcfc4('0x69'),'message':_0x1e0a33[_0xcfc4('0x22')]},client9002)['then'](function(){return _0x1e0a33;});}return _0x1e0a33;}return null;})[_0xcfc4('0x19')](respondWithResult(_0x1386bc,null))[_0xcfc4('0x24')](handleError(_0x1386bc,null));};var interaction_log=require('../../config/logger')(_0xcfc4('0x53'));exports['reject']=function(_0x272ee8,_0xa51dce,_0x2a4c90){var _0x1c6da5={'agent':{},'channel':_0xcfc4('0x6a')};if(_0x272ee8['body']['id']){delete _0x272ee8[_0xcfc4('0x50')]['id'];}_0x272ee8[_0xcfc4('0x50')][_0xcfc4('0x57')]=_0x272ee8[_0xcfc4('0x50')]['UserId']||_0x272ee8[_0xcfc4('0x5e')]['id'];_0x1c6da5[_0xcfc4('0x6b')]['id']=_0x272ee8[_0xcfc4('0x50')][_0xcfc4('0x57')];return db[_0xcfc4('0x35')][_0xcfc4('0x4f')]({'where':{'id':_0x272ee8[_0xcfc4('0x4b')]['id'],'UserId':null}})[_0xcfc4('0x19')](handleEntityNotFound(_0xa51dce,null))[_0xcfc4('0x19')](function(_0x4bef20){if(_0x4bef20){_0x1c6da5[_0xcfc4('0x22')]=_0x4bef20['get']({'plain':!![]});return db[_0xcfc4('0x5a')][_0xcfc4('0x4f')]({'where':{'id':_0x4bef20['FaxInteractionId']}});}return null;})[_0xcfc4('0x19')](handleEntityNotFound(_0xa51dce,null))['then'](function(_0x554468){if(_0x554468){_0x1c6da5[_0xcfc4('0x5d')]=_0x554468['get']({'plain':!![]});interaction_log[_0xcfc4('0x1a')](_0xcfc4('0x6c'),_0x272ee8[_0xcfc4('0x5e')]['id'],_0x272ee8[_0xcfc4('0x5e')][_0xcfc4('0x32')],_0x272ee8['user'][_0xcfc4('0x5f')],_0x1c6da5[_0xcfc4('0x5d')]['id'],_0x272ee8[_0xcfc4('0x50')]?JSON[_0xcfc4('0x1e')](_0x272ee8['body']):_0xcfc4('0x60'));return respondWithRpcPromise(_0xcfc4('0x6d'),'rejectMessage',_0x1c6da5);}return null;})['then'](function(_0x4636e0){if(_0x4636e0){_0x4636e0[_0xcfc4('0x22')][_0xcfc4('0x64')]=util[_0xcfc4('0x65')](_0xcfc4('0x6e'),_0x272ee8[_0xcfc4('0x5e')][_0xcfc4('0x32')]);_0x4636e0[_0xcfc4('0x22')][_0xcfc4('0x66')]=_0x1c6da5[_0xcfc4('0x66')];_0x4636e0['message'][_0xcfc4('0x67')]=_0xcfc4('0x2d');respondWithRpcPromise(_0xcfc4('0x68'),_0xcfc4('0x68'),{'event':_0xcfc4('0x6f'),'message':_0x4636e0['message']},client9002);return _0x1c6da5;}return null;})[_0xcfc4('0x19')](respondWithResult(_0xa51dce,null))[_0xcfc4('0x24')](handleError(_0xa51dce,null));};exports[_0xcfc4('0x70')]=function(_0x1373f6,_0x4cbb68){var _0x1d1ebe;return db[_0xcfc4('0x35')][_0xcfc4('0x70')](_0x1373f6[_0xcfc4('0x50')],{})[_0xcfc4('0x19')](function(_0x3f3664){_0x1d1ebe=_0x3f3664;return db[_0xcfc4('0x58')]['findOne']({'where':{'id':_0x1d1ebe['ContactId']}});})[_0xcfc4('0x19')](function(_0x1e78a0){if(_[_0xcfc4('0x71')](_0x1e78a0)){return;}else{_0x1d1ebe['fax']=_0x1e78a0[_0xcfc4('0x6a')];return db[_0xcfc4('0x72')][_0xcfc4('0x73')]({'where':{'id':_0x1d1ebe[_0xcfc4('0x74')]}});}})['then'](function(_0x273bda){return respondWithRpcPromise(_0xcfc4('0x75'),_0xcfc4('0x75'),{'FaxAccountId':_[_0xcfc4('0x71')](_0x1373f6[_0xcfc4('0x50')])?undefined:_0x1373f6[_0xcfc4('0x50')][_0xcfc4('0x76')],'path':_[_0xcfc4('0x71')](_0x273bda)?undefined:util[_0xcfc4('0x65')](_0xcfc4('0x77'),_0x273bda['basename']),'fax':_['isNil'](_0x1d1ebe[_0xcfc4('0x6a')])?undefined:_0x1d1ebe['fax'],'AttachmentId':_0x1d1ebe[_0xcfc4('0x74')]},client9002);})[_0xcfc4('0x19')](respondWithResult(_0x4cbb68,0xc9))['catch'](handleError(_0x4cbb68,null));};exports[_0xcfc4('0x78')]=function(_0x13c845,_0x219c97){var _0x5dd7de=path['join'](config[_0xcfc4('0x79')],_0xcfc4('0x7a'),_0xcfc4('0x7b'),_0xcfc4('0x7c'));return db[_0xcfc4('0x35')]['find']({'where':{'id':_0x13c845[_0xcfc4('0x4b')]['id']},'include':[{'model':db[_0xcfc4('0x72')],'as':_0xcfc4('0x72')}]})[_0xcfc4('0x19')](handleEntityNotFound(_0x219c97,null))['then'](function(_0x3cf5a4){if(_0x3cf5a4){return _0x219c97[_0xcfc4('0x78')](path[_0xcfc4('0x7d')](_0x5dd7de,_0x3cf5a4[_0xcfc4('0x72')]['basename']));}})[_0xcfc4('0x24')](handleError(_0x219c97,null));};
\ No newline at end of file
+var _0x86f5=['papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','defaults','localhost','redis','./faxMessage.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','then','info','FaxMessage,\x20%s,\x20%s','request\x20sent','debug','FaxMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','sendStatus','status','end','json','offset','set','Content-Range','save','update','destroy','stack','name','send','index','FaxMessage','keys','query','filters','intersection','model','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','filter','merge','type','VIRTUAL','field','options','count','includeAll','rows','show','params','rawAttributes','fields','include','find','body','describe','fax-interactions','accept','fax','read','format','UserId','CmContact','FaxInteraction','FaxInteractionId','read1stAt','get','[FAXMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','user','role','interaction','AcceptMessage','manual','interface','SIP/%s','channel','event','EventManager','acceptmessage','reject','[FAXMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','rejectMessage','rejectmessage','create','ContactId','isNil','Attachment','findOne','AttachmentId','SendFax','/var/opt/motion2/server/files/attachments/%s','basename','download','join','root','files','attachments','html-pdf','rimraf','zip-dir','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','squel','crypto','jsforce','querystring'];(function(_0x17e94d,_0x4859dc){var _0x42b157=function(_0x3dbec6){while(--_0x3dbec6){_0x17e94d['push'](_0x17e94d['shift']());}};_0x42b157(++_0x4859dc);}(_0x86f5,0x178));var _0x586f=function(_0x531cb8,_0x8ef36f){_0x531cb8=_0x531cb8-0x0;var _0x5cf297=_0x86f5[_0x531cb8];return _0x5cf297;};'use strict';var pdf=require(_0x586f('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x586f('0x1'));var zipdir=require(_0x586f('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x586f('0x3'));var moment=require(_0x586f('0x4'));var BPromise=require(_0x586f('0x5'));var Mustache=require(_0x586f('0x6'));var util=require('util');var path=require('path');var sox=require(_0x586f('0x7'));var csv=require(_0x586f('0x8'));var ejs=require(_0x586f('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x586f('0xa'));var crypto=require(_0x586f('0xb'));var jsforce=require(_0x586f('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x586f('0xd'));var Papa=require(_0x586f('0xe'));var Redis=require(_0x586f('0xf'));var authService=require(_0x586f('0x10'));var qs=require(_0x586f('0x11'));var hardwareService=require(_0x586f('0x12'));var logger=require(_0x586f('0x13'))('api');var utils=require(_0x586f('0x14'));var config=require('../../config/environment');var db=require(_0x586f('0x15'))['db'];config['redis']=_[_0x586f('0x16')](config['redis'],{'host':_0x586f('0x17'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x586f('0x18')]));require(_0x586f('0x19'))[_0x586f('0x1a')](socket);var jayson=require(_0x586f('0x1b'));var client=jayson[_0x586f('0x1c')][_0x586f('0x1d')]({'port':0x232c});var client9002=jayson['client'][_0x586f('0x1d')]({'port':0x232a});function checkPasswordPattern(_0x4da2fa,_0x5d838c,_0x3381c6){if(_0x3381c6){var _0x24d0ca=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x24d0ca[_0x586f('0x1e')](_0x5d838c)){return _0x4da2fa;}else{throw new Error(_0x586f('0x1f'));}}else{return _0x4da2fa;}}function respondWithRpcPromise(_0x30ec4d,_0x2d15a1,_0x5ef362,_0x4bd38a){return new BPromise(function(_0x44f938,_0x3a3667){var _0x287faf=_0x4bd38a||client;return _0x287faf[_0x586f('0x20')](_0x30ec4d,_0x5ef362)[_0x586f('0x21')](function(_0x11b7d6){logger[_0x586f('0x22')](_0x586f('0x23'),_0x2d15a1,_0x586f('0x24'));logger[_0x586f('0x25')](_0x586f('0x26'),_0x2d15a1,_0x586f('0x24'),JSON[_0x586f('0x27')](_0x11b7d6));if(_0x11b7d6['error']){if(_0x11b7d6[_0x586f('0x28')][_0x586f('0x29')]===0x1f4){logger[_0x586f('0x28')](_0x586f('0x23'),_0x2d15a1,_0x11b7d6['error'][_0x586f('0x2a')]);return _0x3a3667(_0x11b7d6[_0x586f('0x28')][_0x586f('0x2a')]);}logger[_0x586f('0x28')](_0x586f('0x23'),_0x2d15a1,_0x11b7d6['error'][_0x586f('0x2a')]);return _0x44f938(_0x11b7d6[_0x586f('0x28')][_0x586f('0x2a')]);}else{logger[_0x586f('0x22')](_0x586f('0x23'),_0x2d15a1,_0x586f('0x24'));_0x44f938(_0x11b7d6['result'][_0x586f('0x2a')]);}})[_0x586f('0x2b')](function(_0x3e8b53){logger[_0x586f('0x28')]('FaxMessage,\x20%s,\x20%s',_0x2d15a1,_0x3e8b53);_0x3a3667(_0x3e8b53);});});}function respondWithStatusCode(_0x414f72,_0x5a4be7){_0x5a4be7=_0x5a4be7||0xcc;return function(_0x1063a3){if(_0x1063a3){return _0x414f72[_0x586f('0x2c')](_0x5a4be7);}return _0x414f72[_0x586f('0x2d')](_0x5a4be7)[_0x586f('0x2e')]();};}function respondWithResult(_0x36e035,_0x410d51){_0x410d51=_0x410d51||0xc8;return function(_0x2ba6f1){if(_0x2ba6f1){return _0x36e035['status'](_0x410d51)[_0x586f('0x2f')](_0x2ba6f1);}};}function respondWithFilteredResult(_0x550277,_0x3d6bb2){return function(_0x527a5b){if(_0x527a5b){var _0x5b7b73=_0x527a5b['count'],_0x109bd0=_0x3d6bb2[_0x586f('0x30')],_0x2a2f9f=_0x3d6bb2[_0x586f('0x30')]+_0x3d6bb2['limit'],_0x48fc79;if(_0x2a2f9f>=_0x5b7b73){_0x2a2f9f=_0x5b7b73;_0x48fc79=0xc8;}else{_0x48fc79=0xce;}_0x550277[_0x586f('0x2d')](_0x48fc79);return _0x550277[_0x586f('0x31')](_0x586f('0x32'),_0x109bd0+'-'+_0x2a2f9f+'/'+_0x5b7b73)[_0x586f('0x2f')](_0x527a5b);}return null;};}function patchUpdates(_0x441c78){return function(_0x339639){try{jsonpatch['apply'](_0x339639,_0x441c78,!![]);}catch(_0x1b3cca){return BPromise['reject'](_0x1b3cca);}return _0x339639[_0x586f('0x33')]();};}function saveUpdates(_0x37a7ca,_0x3c9d7f){return function(_0x2eb381){if(_0x2eb381){return _0x2eb381[_0x586f('0x34')](_0x37a7ca)[_0x586f('0x21')](function(_0x3184eb){return _0x3184eb;});}return null;};}function removeEntity(_0x4767c5,_0x51b7a6){return function(_0x32a272){if(_0x32a272){return _0x32a272[_0x586f('0x35')]()[_0x586f('0x21')](function(){_0x4767c5[_0x586f('0x2d')](0xcc)[_0x586f('0x2e')]();});}};}function handleEntityNotFound(_0x5526d6,_0x1a0083){return function(_0x5aa747){if(!_0x5aa747){_0x5526d6[_0x586f('0x2c')](0x194);}return _0x5aa747;};}function handleError(_0x47c75b,_0x44ce55){_0x44ce55=_0x44ce55||0x1f4;return function(_0x160b80){logger[_0x586f('0x28')](_0x160b80[_0x586f('0x36')]);if(_0x160b80[_0x586f('0x37')]){delete _0x160b80[_0x586f('0x37')];}_0x47c75b[_0x586f('0x2d')](_0x44ce55)[_0x586f('0x38')](_0x160b80);};}exports[_0x586f('0x39')]=function(_0x3405c5,_0x4b2e01){var _0xd4dfab={},_0x328034={},_0x5690fe={'count':0x0,'rows':[]};var _0x5097f7=db[_0x586f('0x3a')]['rawAttributes'];_0x328034['model']=_[_0x586f('0x3b')](_0x5097f7);_0x328034['query']=_[_0x586f('0x3b')](_0x3405c5[_0x586f('0x3c')]);_0x328034[_0x586f('0x3d')]=_[_0x586f('0x3e')](_0x328034[_0x586f('0x3f')],_0x328034[_0x586f('0x3c')]);_0xd4dfab['attributes']=_[_0x586f('0x3e')](_0x328034[_0x586f('0x3f')],qs['fields'](_0x3405c5[_0x586f('0x3c')]['fields']));_0xd4dfab[_0x586f('0x40')]=_0xd4dfab[_0x586f('0x40')][_0x586f('0x41')]?_0xd4dfab[_0x586f('0x40')]:_0x328034[_0x586f('0x3f')];if(!_0x3405c5[_0x586f('0x3c')][_0x586f('0x42')](_0x586f('0x43'))){_0xd4dfab[_0x586f('0x44')]=qs[_0x586f('0x44')](_0x3405c5['query']['limit']);_0xd4dfab[_0x586f('0x30')]=qs['offset'](_0x3405c5['query']['offset']);}_0xd4dfab[_0x586f('0x45')]=qs[_0x586f('0x46')](_0x3405c5[_0x586f('0x3c')][_0x586f('0x46')]);_0xd4dfab[_0x586f('0x47')]=qs[_0x586f('0x3d')](_['pick'](_0x3405c5[_0x586f('0x3c')],_0x328034[_0x586f('0x3d')]));if(_0x3405c5[_0x586f('0x3c')][_0x586f('0x48')]){_0xd4dfab['where']=_[_0x586f('0x49')](_0xd4dfab[_0x586f('0x47')],{'$or':_['map'](_0x5097f7,function(_0x37ec2c){if(_0x37ec2c[_0x586f('0x4a')]['key']!==_0x586f('0x4b')){var _0x190202={};_0x190202[_0x37ec2c[_0x586f('0x4c')]]={'$like':'%'+_0x3405c5[_0x586f('0x3c')][_0x586f('0x48')]+'%'};return _0x190202;}})});}_0xd4dfab=_['merge']({},_0xd4dfab,_0x3405c5[_0x586f('0x4d')]);var _0x4fd194={'where':_0xd4dfab[_0x586f('0x47')]};return db[_0x586f('0x3a')][_0x586f('0x4e')](_0x4fd194)['then'](function(_0x329872){_0x5690fe[_0x586f('0x4e')]=_0x329872;if(_0x3405c5[_0x586f('0x3c')][_0x586f('0x4f')]){_0xd4dfab['include']=[{'all':!![]}];}return db[_0x586f('0x3a')]['findAll'](_0xd4dfab);})[_0x586f('0x21')](function(_0x131b7a){_0x5690fe[_0x586f('0x50')]=_0x131b7a;return _0x5690fe;})[_0x586f('0x21')](respondWithFilteredResult(_0x4b2e01,_0xd4dfab))['catch'](handleError(_0x4b2e01,null));};exports[_0x586f('0x51')]=function(_0x1da394,_0x266fdb){var _0x1b756f={'raw':!![],'where':{'id':_0x1da394[_0x586f('0x52')]['id']}},_0x44dc51={};_0x44dc51['model']=_[_0x586f('0x3b')](db['FaxMessage'][_0x586f('0x53')]);_0x44dc51[_0x586f('0x3c')]=_[_0x586f('0x3b')](_0x1da394[_0x586f('0x3c')]);_0x44dc51[_0x586f('0x3d')]=_[_0x586f('0x3e')](_0x44dc51[_0x586f('0x3f')],_0x44dc51[_0x586f('0x3c')]);_0x1b756f[_0x586f('0x40')]=_[_0x586f('0x3e')](_0x44dc51[_0x586f('0x3f')],qs[_0x586f('0x54')](_0x1da394['query'][_0x586f('0x54')]));_0x1b756f['attributes']=_0x1b756f['attributes'][_0x586f('0x41')]?_0x1b756f[_0x586f('0x40')]:_0x44dc51['model'];if(_0x1da394[_0x586f('0x3c')][_0x586f('0x4f')]){_0x1b756f[_0x586f('0x55')]=[{'all':!![]}];}_0x1b756f=_[_0x586f('0x49')]({},_0x1b756f,_0x1da394[_0x586f('0x4d')]);return db[_0x586f('0x3a')][_0x586f('0x56')](_0x1b756f)['then'](handleEntityNotFound(_0x266fdb,null))['then'](respondWithResult(_0x266fdb,null))['catch'](handleError(_0x266fdb,null));};exports[_0x586f('0x34')]=function(_0x136c85,_0x5b08df){if(_0x136c85[_0x586f('0x57')]['id']){delete _0x136c85[_0x586f('0x57')]['id'];}return db['FaxMessage']['find']({'where':{'id':_0x136c85['params']['id']}})[_0x586f('0x21')](handleEntityNotFound(_0x5b08df,null))[_0x586f('0x21')](saveUpdates(_0x136c85[_0x586f('0x57')],null))[_0x586f('0x21')](respondWithResult(_0x5b08df,null))[_0x586f('0x2b')](handleError(_0x5b08df,null));};exports[_0x586f('0x35')]=function(_0x20de49,_0xc84c5){return db[_0x586f('0x3a')][_0x586f('0x56')]({'where':{'id':_0x20de49[_0x586f('0x52')]['id']}})[_0x586f('0x21')](handleEntityNotFound(_0xc84c5,null))[_0x586f('0x21')](removeEntity(_0xc84c5,null))['catch'](handleError(_0xc84c5,null));};exports[_0x586f('0x58')]=function(_0x30caa6,_0x2f8a8b){return db[_0x586f('0x3a')][_0x586f('0x58')]()['then'](respondWithResult(_0x2f8a8b,null))[_0x586f('0x2b')](handleError(_0x2f8a8b,null));};var interaction_log=require(_0x586f('0x13'))(_0x586f('0x59'));exports[_0x586f('0x5a')]=function(_0x56bd59,_0x573235,_0x2f231b){var _0x3a1e15={'channel':_0x586f('0x5b')};if(_0x56bd59[_0x586f('0x57')]['id']){delete _0x56bd59[_0x586f('0x57')]['id'];}_0x56bd59[_0x586f('0x57')][_0x586f('0x5c')]=!![];_0x56bd59[_0x586f('0x57')]['readAt']=moment()[_0x586f('0x5d')]('YYYY-MM-DD\x20HH:mm:ss');_0x56bd59[_0x586f('0x57')][_0x586f('0x5e')]=_0x56bd59[_0x586f('0x57')][_0x586f('0x5e')]||_0x56bd59['user']['id'];return db[_0x586f('0x3a')][_0x586f('0x56')]({'where':{'id':_0x56bd59[_0x586f('0x52')]['id'],'UserId':null},'include':[{'model':db[_0x586f('0x5f')],'as':'Contact'}]})[_0x586f('0x21')](handleEntityNotFound(_0x573235,null))[_0x586f('0x21')](saveUpdates(_0x56bd59[_0x586f('0x57')],null))[_0x586f('0x21')](function(_0xcec91a){if(_0xcec91a){_0x3a1e15[_0x586f('0x2a')]=_0xcec91a['get']({'plain':!![]});return db[_0x586f('0x60')][_0x586f('0x56')]({'where':{'id':_0xcec91a[_0x586f('0x61')]}});}return null;})[_0x586f('0x21')](handleEntityNotFound(_0x573235,null))['then'](function(_0x411b6d){if(_0x411b6d){return _0x411b6d[_0x586f('0x34')]({'UserId':_0x56bd59['body'][_0x586f('0x5e')],'read1stAt':_['isNil'](_0x411b6d[_0x586f('0x62')])?moment()[_0x586f('0x5d')]('YYYY-MM-DD\x20HH:mm:ss'):undefined});}return null;})['then'](function(_0x4ba44b){if(_0x4ba44b){_0x3a1e15['interaction']=_0x4ba44b[_0x586f('0x63')]({'plain':!![]});interaction_log[_0x586f('0x22')](_0x586f('0x64'),_0x56bd59['user']['id'],_0x56bd59[_0x586f('0x65')][_0x586f('0x37')],_0x56bd59[_0x586f('0x65')][_0x586f('0x66')],_0x3a1e15[_0x586f('0x67')]['id'],_0x56bd59[_0x586f('0x57')]?JSON['stringify'](_0x56bd59[_0x586f('0x57')]):'null');return respondWithRpcPromise(_0x586f('0x68'),'acceptMessage',_0x3a1e15);}return null;})[_0x586f('0x21')](function(_0xd05078){if(_0xd05078){if(_0x56bd59[_0x586f('0x57')][_0x586f('0x69')]){_0x3a1e15[_0x586f('0x2a')][_0x586f('0x6a')]=util[_0x586f('0x5d')](_0x586f('0x6b'),_0x56bd59['user'][_0x586f('0x37')]);_0x3a1e15[_0x586f('0x2a')][_0x586f('0x6c')]=_0x3a1e15['channel'];_0x3a1e15[_0x586f('0x2a')][_0x586f('0x6d')]='accept';return respondWithRpcPromise(_0x586f('0x6e'),'EventManager',{'event':_0x586f('0x6f'),'message':_0x3a1e15[_0x586f('0x2a')]},client9002)[_0x586f('0x21')](function(){return _0x3a1e15;});}return _0x3a1e15;}return null;})[_0x586f('0x21')](respondWithResult(_0x573235,null))[_0x586f('0x2b')](handleError(_0x573235,null));};var interaction_log=require(_0x586f('0x13'))(_0x586f('0x59'));exports[_0x586f('0x70')]=function(_0x2eb6a8,_0x41ab64,_0x6fd985){var _0x3a85c8={'agent':{},'channel':'fax'};if(_0x2eb6a8[_0x586f('0x57')]['id']){delete _0x2eb6a8[_0x586f('0x57')]['id'];}_0x2eb6a8[_0x586f('0x57')][_0x586f('0x5e')]=_0x2eb6a8[_0x586f('0x57')]['UserId']||_0x2eb6a8[_0x586f('0x65')]['id'];_0x3a85c8['agent']['id']=_0x2eb6a8[_0x586f('0x57')][_0x586f('0x5e')];return db[_0x586f('0x3a')][_0x586f('0x56')]({'where':{'id':_0x2eb6a8[_0x586f('0x52')]['id'],'UserId':null}})[_0x586f('0x21')](handleEntityNotFound(_0x41ab64,null))['then'](function(_0x4f15a4){if(_0x4f15a4){_0x3a85c8[_0x586f('0x2a')]=_0x4f15a4[_0x586f('0x63')]({'plain':!![]});return db[_0x586f('0x60')][_0x586f('0x56')]({'where':{'id':_0x4f15a4[_0x586f('0x61')]}});}return null;})[_0x586f('0x21')](handleEntityNotFound(_0x41ab64,null))[_0x586f('0x21')](function(_0x4853e){if(_0x4853e){_0x3a85c8[_0x586f('0x67')]=_0x4853e[_0x586f('0x63')]({'plain':!![]});interaction_log[_0x586f('0x22')](_0x586f('0x71'),_0x2eb6a8[_0x586f('0x65')]['id'],_0x2eb6a8[_0x586f('0x65')][_0x586f('0x37')],_0x2eb6a8['user'][_0x586f('0x66')],_0x3a85c8[_0x586f('0x67')]['id'],_0x2eb6a8['body']?JSON[_0x586f('0x27')](_0x2eb6a8[_0x586f('0x57')]):'null');return respondWithRpcPromise('RejectMessage',_0x586f('0x72'),_0x3a85c8);}return null;})[_0x586f('0x21')](function(_0x39b992){if(_0x39b992){_0x39b992[_0x586f('0x2a')]['interface']=util[_0x586f('0x5d')]('SIP/%s',_0x2eb6a8[_0x586f('0x65')][_0x586f('0x37')]);_0x39b992[_0x586f('0x2a')]['channel']=_0x3a85c8['channel'];_0x39b992[_0x586f('0x2a')][_0x586f('0x6d')]=_0x586f('0x70');respondWithRpcPromise(_0x586f('0x6e'),_0x586f('0x6e'),{'event':_0x586f('0x73'),'message':_0x39b992['message']},client9002);return _0x3a85c8;}return null;})[_0x586f('0x21')](respondWithResult(_0x41ab64,null))[_0x586f('0x2b')](handleError(_0x41ab64,null));};exports[_0x586f('0x74')]=function(_0x5cbb0b,_0x5b90eb){var _0x82325d;return db[_0x586f('0x3a')]['create'](_0x5cbb0b[_0x586f('0x57')],{})['then'](function(_0x57e745){_0x82325d=_0x57e745;return db['CmContact']['findOne']({'where':{'id':_0x82325d[_0x586f('0x75')]}});})[_0x586f('0x21')](function(_0x2dd916){if(_[_0x586f('0x76')](_0x2dd916)){return;}else{_0x82325d[_0x586f('0x5b')]=_0x2dd916['fax'];return db[_0x586f('0x77')][_0x586f('0x78')]({'where':{'id':_0x82325d[_0x586f('0x79')]}});}})['then'](function(_0x472283){return respondWithRpcPromise(_0x586f('0x7a'),_0x586f('0x7a'),{'FaxAccountId':_[_0x586f('0x76')](_0x5cbb0b['body'])?undefined:_0x5cbb0b[_0x586f('0x57')]['FaxAccountId'],'path':_[_0x586f('0x76')](_0x472283)?undefined:util[_0x586f('0x5d')](_0x586f('0x7b'),_0x472283[_0x586f('0x7c')]),'fax':_[_0x586f('0x76')](_0x82325d[_0x586f('0x5b')])?undefined:_0x82325d[_0x586f('0x5b')],'AttachmentId':_0x82325d[_0x586f('0x79')]},client9002);})[_0x586f('0x21')](respondWithResult(_0x5b90eb,0xc9))[_0x586f('0x2b')](handleError(_0x5b90eb,null));};exports[_0x586f('0x7d')]=function(_0x20922c,_0x28c215){var _0x4a19e7=path[_0x586f('0x7e')](config[_0x586f('0x7f')],'server',_0x586f('0x80'),_0x586f('0x81'));return db['FaxMessage'][_0x586f('0x56')]({'where':{'id':_0x20922c[_0x586f('0x52')]['id']},'include':[{'model':db[_0x586f('0x77')],'as':_0x586f('0x77')}]})[_0x586f('0x21')](handleEntityNotFound(_0x28c215,null))[_0x586f('0x21')](function(_0x3cdd1b){if(_0x3cdd1b){return _0x28c215[_0x586f('0x7d')](path[_0x586f('0x7e')](_0x4a19e7,_0x3cdd1b[_0x586f('0x77')][_0x586f('0x7c')]));}})[_0x586f('0x2b')](handleError(_0x28c215,null));};
\ No newline at end of file
index 682ecb8..800a345 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb9a1=['update','remove','emit','hook','exports','events','../../mysqldb','FaxMessage','setMaxListeners','save'];(function(_0x50e0b4,_0x1057f7){var _0x2fa8b0=function(_0x3766bc){while(--_0x3766bc){_0x50e0b4['push'](_0x50e0b4['shift']());}};_0x2fa8b0(++_0x1057f7);}(_0xb9a1,0xaf));var _0x1b9a=function(_0x45e7b4,_0x99d70c){_0x45e7b4=_0x45e7b4-0x0;var _0x5a4ee1=_0xb9a1[_0x45e7b4];return _0x5a4ee1;};'use strict';var EventEmitter=require(_0x1b9a('0x0'));var FaxMessage=require(_0x1b9a('0x1'))['db'][_0x1b9a('0x2')];var FaxMessageEvents=new EventEmitter();FaxMessageEvents[_0x1b9a('0x3')](0x0);var events={'afterCreate':_0x1b9a('0x4'),'afterUpdate':_0x1b9a('0x5'),'afterDestroy':_0x1b9a('0x6')};function emitEvent(_0x2bb2c9){return function(_0x531aa8,_0x204ffc,_0x553e46){FaxMessageEvents[_0x1b9a('0x7')](_0x2bb2c9+':'+_0x531aa8['id'],_0x531aa8);FaxMessageEvents['emit'](_0x2bb2c9,_0x531aa8);_0x553e46(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];FaxMessage[_0x1b9a('0x8')](e,emitEvent(event));}}module[_0x1b9a('0x9')]=FaxMessageEvents;
\ No newline at end of file
+var _0xb4eb=['remove','emit','hasOwnProperty','FaxMessage','update'];(function(_0x4f7418,_0x1755cc){var _0x4afe7e=function(_0x5ae646){while(--_0x5ae646){_0x4f7418['push'](_0x4f7418['shift']());}};_0x4afe7e(++_0x1755cc);}(_0xb4eb,0x157));var _0xbb4e=function(_0x22bf95,_0x380fc1){_0x22bf95=_0x22bf95-0x0;var _0x3483f2=_0xb4eb[_0x22bf95];return _0x3483f2;};'use strict';var EventEmitter=require('events');var FaxMessage=require('../../mysqldb')['db'][_0xbb4e('0x0')];var FaxMessageEvents=new EventEmitter();FaxMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0xbb4e('0x1'),'afterDestroy':_0xbb4e('0x2')};function emitEvent(_0x53cd56){return function(_0x1f6c8d,_0x43ac15,_0x3e97cd){FaxMessageEvents[_0xbb4e('0x3')](_0x53cd56+':'+_0x1f6c8d['id'],_0x1f6c8d);FaxMessageEvents[_0xbb4e('0x3')](_0x53cd56,_0x1f6c8d);_0x3e97cd(null);};}for(var e in events){if(events[_0xbb4e('0x4')](e)){var event=events[e];FaxMessage['hook'](e,emitEvent(event));}}module['exports']=FaxMessageEvents;
\ No newline at end of file
index 88a4a44..bddaba3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x278a=['body','FULLTEXT','models','get','direction','toLowerCase','secret','isNil','UserId','FaxInteraction','findOne','FaxInteractionId','then','createdAt','catch','error','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','define','FaxMessage','fax_messages','fti_fax_messages'];(function(_0x2e2e2f,_0x4f3781){var _0x22cd22=function(_0x4cc7ee){while(--_0x4cc7ee){_0x2e2e2f['push'](_0x2e2e2f['shift']());}};_0x22cd22(++_0x4f3781);}(_0x278a,0x1b2));var _0xa278=function(_0x23ac33,_0x3c2714){_0x23ac33=_0x23ac33-0x0;var _0xe17edb=_0x278a[_0x23ac33];return _0xe17edb;};'use strict';var _=require(_0xa278('0x0'));var util=require(_0xa278('0x1'));var logger=require(_0xa278('0x2'))('api');var moment=require(_0xa278('0x3'));var BPromise=require(_0xa278('0x4'));var rp=require(_0xa278('0x5'));var fs=require('fs');var path=require(_0xa278('0x6'));var rimraf=require(_0xa278('0x7'));var config=require(_0xa278('0x8'));var attributes=require('./faxMessage.attributes');module[_0xa278('0x9')]=function(_0x39d766,_0x5ec526){return _0x39d766[_0xa278('0xa')](_0xa278('0xb'),attributes,{'tableName':_0xa278('0xc'),'paranoid':![],'indexes':[{'name':_0xa278('0xd'),'fields':[_0xa278('0xe')],'type':_0xa278('0xf')}],'timestamps':!![],'hooks':{'afterCreate':function(_0x60d5e9,_0x4b08c1,_0x3fc6c0){var _0x596864=_0x39d766[_0xa278('0x10')];var _0x4502b5=_0x60d5e9[_0xa278('0x11')]({'plain':!![]});if(_0x4502b5['direction']['toLowerCase']()==='in'||_0x4502b5[_0xa278('0x12')][_0xa278('0x13')]()==='out'&&!_0x4502b5[_0xa278('0x14')]&&!_[_0xa278('0x15')](_0x4502b5[_0xa278('0x16')])){_0x596864[_0xa278('0x17')][_0xa278('0x18')]({'where':{'id':_0x4502b5[_0xa278('0x19')]}})[_0xa278('0x1a')](function(_0x32eef3){if(_0x32eef3){_0x32eef3['update']({'lastMsgAt':_0x4502b5[_0xa278('0x1b')],'lastMsgDirection':_0x4502b5[_0xa278('0x12')][_0xa278('0x13')]()});}})[_0xa278('0x1c')](function(_0x43a1e4){console[_0xa278('0x1d')](_0x43a1e4);});}_0x3fc6c0();}},'charset':_0xa278('0x1e'),'collate':_0xa278('0x1f')});};
\ No newline at end of file
+var _0xdd10=['api','bluebird','request-promise','path','../../config/environment','./faxMessage.attributes','define','fax_messages','body','FULLTEXT','get','direction','toLowerCase','out','secret','isNil','findOne','FaxInteractionId','then','catch','utf8mb4','lodash'];(function(_0x20c9b2,_0x55d7b1){var _0x2c6030=function(_0x10845f){while(--_0x10845f){_0x20c9b2['push'](_0x20c9b2['shift']());}};_0x2c6030(++_0x55d7b1);}(_0xdd10,0x1b7));var _0x0dd1=function(_0x5c4399,_0x532a4e){_0x5c4399=_0x5c4399-0x0;var _0x501807=_0xdd10[_0x5c4399];return _0x501807;};'use strict';var _=require(_0x0dd1('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x0dd1('0x1'));var moment=require('moment');var BPromise=require(_0x0dd1('0x2'));var rp=require(_0x0dd1('0x3'));var fs=require('fs');var path=require(_0x0dd1('0x4'));var rimraf=require('rimraf');var config=require(_0x0dd1('0x5'));var attributes=require(_0x0dd1('0x6'));module['exports']=function(_0x47bb98,_0x59bef3){return _0x47bb98[_0x0dd1('0x7')]('FaxMessage',attributes,{'tableName':_0x0dd1('0x8'),'paranoid':![],'indexes':[{'name':'fti_fax_messages','fields':[_0x0dd1('0x9')],'type':_0x0dd1('0xa')}],'timestamps':!![],'hooks':{'afterCreate':function(_0x1f617f,_0x4fe443,_0x2a7caa){var _0x47ea41=_0x47bb98['models'];var _0x79d861=_0x1f617f[_0x0dd1('0xb')]({'plain':!![]});if(_0x79d861[_0x0dd1('0xc')][_0x0dd1('0xd')]()==='in'||_0x79d861[_0x0dd1('0xc')][_0x0dd1('0xd')]()===_0x0dd1('0xe')&&!_0x79d861[_0x0dd1('0xf')]&&!_[_0x0dd1('0x10')](_0x79d861['UserId'])){_0x47ea41['FaxInteraction'][_0x0dd1('0x11')]({'where':{'id':_0x79d861[_0x0dd1('0x12')]}})[_0x0dd1('0x13')](function(_0x1b0991){if(_0x1b0991){_0x1b0991['update']({'lastMsgAt':_0x79d861['createdAt'],'lastMsgDirection':_0x79d861['direction'][_0x0dd1('0xd')]()});}})[_0x0dd1('0x14')](function(_0x30b210){console['error'](_0x30b210);});}_0x2a7caa();}},'charset':_0x0dd1('0x15'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index ccbbceb..c050736 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a28=['debug','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','defaults','localhost','socket.io-emitter','redis','./faxMessage.socket','register','then','info','FaxMessage,\x20%s,\x20%s','request\x20sent','FaxMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','FaxMessage','create','body','options','CreateFaxMessage','update','raw','where','attributes','limit','UpdateFaxMessage'];(function(_0x449f17,_0x2d76c9){var _0xee2cb3=function(_0x3fe0d4){while(--_0x3fe0d4){_0x449f17['push'](_0x449f17['shift']());}};_0xee2cb3(++_0x2d76c9);}(_0x8a28,0xfd));var _0x88a2=function(_0x2b10c6,_0x185590){_0x2b10c6=_0x2b10c6-0x0;var _0x3789d2=_0x8a28[_0x2b10c6];return _0x3789d2;};'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['CreateFaxMessage']=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')]('CreateFaxMessage',_0x26a3a6['message'],_0x190aac);_0x499891(_0x282a27[_0x88a2('0x19')](0x1f4,_0x26a3a6[_0x88a2('0x1b')]));});});};exports['UpdateFaxMessage']=function(_0x42ae5b){var _0x4427a1=this;return new Promise(function(_0x2ba881,_0x2474fc){return db['FaxMessage'][_0x88a2('0x23')](_0x42ae5b['body'],{'raw':_0x42ae5b[_0x88a2('0x21')]?_0x42ae5b[_0x88a2('0x21')][_0x88a2('0x24')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x42ae5b['options']?_0x42ae5b[_0x88a2('0x21')][_0x88a2('0x25')]||null:null,'attributes':_0x42ae5b['options']?_0x42ae5b[_0x88a2('0x21')][_0x88a2('0x26')]||null:null,'limit':_0x42ae5b['options']?_0x42ae5b['options'][_0x88a2('0x27')]||null:null})[_0x88a2('0x13')](function(_0x1ceaab){logger[_0x88a2('0x14')](_0x88a2('0x28'),_0x42ae5b);logger[_0x88a2('0x29')]('UpdateFaxMessage',_0x42ae5b,JSON[_0x88a2('0x18')](_0x1ceaab));_0x2ba881(_0x1ceaab);})[_0x88a2('0x1d')](function(_0x928694){logger[_0x88a2('0x19')](_0x88a2('0x28'),_0x928694[_0x88a2('0x1b')],_0x42ae5b);_0x2474fc(_0x4427a1[_0x88a2('0x19')](0x1f4,_0x928694[_0x88a2('0x1b')]));});});};
\ No newline at end of file
+var _0x5a2a=['request\x20sent','debug','stringify','error','code','message','result','CreateFaxMessage','FaxMessage','create','body','options','raw','UpdateFaxMessage','update','where','attributes','limit','catch','lodash','util','moment','bluebird','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','redis','localhost','socket.io-emitter','register','request','then','info','FaxMessage,\x20%s,\x20%s'];(function(_0x234ae1,_0x42bdd6){var _0x227ba0=function(_0x1f6531){while(--_0x1f6531){_0x234ae1['push'](_0x234ae1['shift']());}};_0x227ba0(++_0x42bdd6);}(_0x5a2a,0x1c3));var _0xa5a2=function(_0x341b68,_0x2ed569){_0x341b68=_0x341b68-0x0;var _0x5ce2ea=_0x5a2a[_0x341b68];return _0x5ce2ea;};'use strict';var _=require(_0xa5a2('0x0'));var util=require(_0xa5a2('0x1'));var moment=require(_0xa5a2('0x2'));var BPromise=require(_0xa5a2('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xa5a2('0x4'));var logger=require(_0xa5a2('0x5'))('rpc');var config=require(_0xa5a2('0x6'));var jayson=require(_0xa5a2('0x7'));var client=jayson[_0xa5a2('0x8')]['http']({'port':0x232a});config[_0xa5a2('0x9')]=_['defaults'](config[_0xa5a2('0x9')],{'host':_0xa5a2('0xa'),'port':0x18eb});var socket=require(_0xa5a2('0xb'))(new Redis(config['redis']));require('./faxMessage.socket')[_0xa5a2('0xc')](socket);function respondWithRpcPromise(_0x47119f,_0x429eb6,_0x252e0a){return new BPromise(function(_0x367616,_0x599f13){return client[_0xa5a2('0xd')](_0x47119f,_0x252e0a)[_0xa5a2('0xe')](function(_0x28f227){logger[_0xa5a2('0xf')](_0xa5a2('0x10'),_0x429eb6,_0xa5a2('0x11'));logger[_0xa5a2('0x12')]('FaxMessage,\x20%s,\x20%s,\x20%s',_0x429eb6,'request\x20sent',JSON[_0xa5a2('0x13')](_0x28f227));if(_0x28f227[_0xa5a2('0x14')]){if(_0x28f227[_0xa5a2('0x14')][_0xa5a2('0x15')]===0x1f4){logger[_0xa5a2('0x14')]('FaxMessage,\x20%s,\x20%s',_0x429eb6,_0x28f227[_0xa5a2('0x14')][_0xa5a2('0x16')]);return _0x599f13(_0x28f227['error'][_0xa5a2('0x16')]);}logger[_0xa5a2('0x14')]('FaxMessage,\x20%s,\x20%s',_0x429eb6,_0x28f227[_0xa5a2('0x14')][_0xa5a2('0x16')]);return _0x367616(_0x28f227['error'][_0xa5a2('0x16')]);}else{logger[_0xa5a2('0xf')](_0xa5a2('0x10'),_0x429eb6,_0xa5a2('0x11'));_0x367616(_0x28f227[_0xa5a2('0x17')][_0xa5a2('0x16')]);}})['catch'](function(_0x1f4de7){logger[_0xa5a2('0x14')](_0xa5a2('0x10'),_0x429eb6,_0x1f4de7);_0x599f13(_0x1f4de7);});});}exports[_0xa5a2('0x18')]=function(_0x281730){var _0x36a301=this;return new Promise(function(_0x5c600d,_0x299208){return db[_0xa5a2('0x19')][_0xa5a2('0x1a')](_0x281730[_0xa5a2('0x1b')],{'raw':_0x281730[_0xa5a2('0x1c')]?_0x281730[_0xa5a2('0x1c')][_0xa5a2('0x1d')]===undefined?!![]:![]:!![]})[_0xa5a2('0xe')](function(_0x3a7a6a){logger[_0xa5a2('0xf')](_0xa5a2('0x18'),_0x281730);logger[_0xa5a2('0x12')](_0xa5a2('0x18'),_0x281730,JSON[_0xa5a2('0x13')](_0x3a7a6a));_0x5c600d(_0x3a7a6a);})['catch'](function(_0x503e9c){logger['error'](_0xa5a2('0x18'),_0x503e9c[_0xa5a2('0x16')],_0x281730);_0x299208(_0x36a301[_0xa5a2('0x14')](0x1f4,_0x503e9c[_0xa5a2('0x16')]));});});};exports[_0xa5a2('0x1e')]=function(_0x446c70){var _0x29556e=this;return new Promise(function(_0x1ad00c,_0x50722e){return db[_0xa5a2('0x19')][_0xa5a2('0x1f')](_0x446c70['body'],{'raw':_0x446c70[_0xa5a2('0x1c')]?_0x446c70[_0xa5a2('0x1c')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x446c70[_0xa5a2('0x1c')]?_0x446c70[_0xa5a2('0x1c')][_0xa5a2('0x20')]||null:null,'attributes':_0x446c70[_0xa5a2('0x1c')]?_0x446c70['options'][_0xa5a2('0x21')]||null:null,'limit':_0x446c70[_0xa5a2('0x1c')]?_0x446c70[_0xa5a2('0x1c')][_0xa5a2('0x22')]||null:null})[_0xa5a2('0xe')](function(_0x1475ec){logger[_0xa5a2('0xf')](_0xa5a2('0x1e'),_0x446c70);logger[_0xa5a2('0x12')](_0xa5a2('0x1e'),_0x446c70,JSON[_0xa5a2('0x13')](_0x1475ec));_0x1ad00c(_0x1475ec);})[_0xa5a2('0x23')](function(_0x3b4a5c){logger['error'](_0xa5a2('0x1e'),_0x3b4a5c['message'],_0x446c70);_0x50722e(_0x29556e[_0xa5a2('0x14')](0x1f4,_0x3b4a5c[_0xa5a2('0x16')]));});});};
\ No newline at end of file
index 7c1c37f..5d81467 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3a4a=['save','update','emit','removeListener','register'];(function(_0x35f6c0,_0x1a94d5){var _0x5de5b4=function(_0x268d77){while(--_0x268d77){_0x35f6c0['push'](_0x35f6c0['shift']());}};_0x5de5b4(++_0x1a94d5);}(_0x3a4a,0xe6));var _0xa3a4=function(_0x2c1e7a,_0x155f86){_0x2c1e7a=_0x2c1e7a-0x0;var _0xcacb4f=_0x3a4a[_0x2c1e7a];return _0xcacb4f;};'use strict';var FaxMessageEvents=require('./faxMessage.events');var events=[_0xa3a4('0x0'),'remove',_0xa3a4('0x1')];function createListener(_0x555c75,_0x89afc6){return function(_0x5d20b9){_0x89afc6[_0xa3a4('0x2')](_0x555c75,_0x5d20b9);};}function removeListener(_0x3a1884,_0x44be65){return function(){FaxMessageEvents[_0xa3a4('0x3')](_0x3a1884,_0x44be65);};}exports[_0xa3a4('0x4')]=function(_0x49401b){for(var _0x402f52=0x0,_0x3780c3=events['length'];_0x402f52<_0x3780c3;_0x402f52++){var _0x283160=events[_0x402f52];var _0x138c5e=createListener('faxMessage:'+_0x283160,_0x49401b);FaxMessageEvents['on'](_0x283160,_0x138c5e);}};
\ No newline at end of file
+var _0x3d9f=['./faxMessage.events','save','remove','update','emit','register','faxMessage:'];(function(_0x768c47,_0x590f6f){var _0x27554a=function(_0x2504c1){while(--_0x2504c1){_0x768c47['push'](_0x768c47['shift']());}};_0x27554a(++_0x590f6f);}(_0x3d9f,0xd2));var _0xf3d9=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x3d9f[_0x5b644e];return _0x49c6bf;};'use strict';var FaxMessageEvents=require(_0xf3d9('0x0'));var events=[_0xf3d9('0x1'),_0xf3d9('0x2'),_0xf3d9('0x3')];function createListener(_0xbf75d8,_0x14f5ee){return function(_0x3d6e55){_0x14f5ee[_0xf3d9('0x4')](_0xbf75d8,_0x3d6e55);};}function removeListener(_0x4ac931,_0x4ab31c){return function(){FaxMessageEvents['removeListener'](_0x4ac931,_0x4ab31c);};}exports[_0xf3d9('0x5')]=function(_0x5c3fe6){for(var _0x6d83d7=0x0,_0x1eefe1=events['length'];_0x6d83d7<_0x1eefe1;_0x6d83d7++){var _0x58071f=events[_0x6d83d7];var _0x30272e=createListener(_0xf3d9('0x6')+_0x58071f,_0x5c3fe6);FaxMessageEvents['on'](_0x58071f,_0x30272e);}};
\ No newline at end of file
index f463840..1c00d35 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2272=['tracked','fax','create','put','update','reject','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','index','get','/describe','describe','/:id','show','/:id/download','download','post'];(function(_0x140726,_0x6e3df6){var _0x44170a=function(_0x4733cd){while(--_0x4733cd){_0x140726['push'](_0x140726['shift']());}};_0x44170a(++_0x6e3df6);}(_0x2272,0xd8));var _0x2227=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x2272[_0xa464c9];return _0x3d73c4;};'use strict';var multer=require(_0x2227('0x0'));var util=require(_0x2227('0x1'));var path=require(_0x2227('0x2'));var timeout=require(_0x2227('0x3'));var express=require(_0x2227('0x4'));var router=express['Router']();var auth=require(_0x2227('0x5'));var interaction=require(_0x2227('0x6'));var config=require(_0x2227('0x7'));var controller=require('./faxMessage.controller');router['get']('/',auth[_0x2227('0x8')](),controller[_0x2227('0x9')]);router[_0x2227('0xa')](_0x2227('0xb'),auth[_0x2227('0x8')](),controller[_0x2227('0xc')]);router[_0x2227('0xa')](_0x2227('0xd'),auth[_0x2227('0x8')](),controller[_0x2227('0xe')]);router['get'](_0x2227('0xf'),auth['isAuthenticated'](),controller[_0x2227('0x10')]);router[_0x2227('0x11')]('/',auth[_0x2227('0x8')](),interaction[_0x2227('0x12')](_0x2227('0x13'),'faxmessage:create'),controller[_0x2227('0x14')]);router[_0x2227('0x15')](_0x2227('0xd'),auth[_0x2227('0x8')](),controller[_0x2227('0x16')]);router[_0x2227('0x15')]('/:id/accept',auth['isAuthenticated'](),controller['accept']);router[_0x2227('0x15')]('/:id/reject',auth[_0x2227('0x8')](),controller[_0x2227('0x17')]);router['delete'](_0x2227('0xd'),auth[_0x2227('0x8')](),controller[_0x2227('0x18')]);module[_0x2227('0x19')]=router;
\ No newline at end of file
+var _0x9536=['download','post','tracked','fax','faxmessage:create','create','put','/:id/accept','accept','/:id/reject','reject','delete','/:id','multer','util','path','connect-timeout','Router','../../components/interaction/service','../../config/environment','./faxMessage.controller','get','isAuthenticated','/describe','describe','show'];(function(_0x458dd2,_0xb2c6e6){var _0x470f65=function(_0x506bc9){while(--_0x506bc9){_0x458dd2['push'](_0x458dd2['shift']());}};_0x470f65(++_0xb2c6e6);}(_0x9536,0x179));var _0x6953=function(_0x1030ce,_0xbe3f74){_0x1030ce=_0x1030ce-0x0;var _0x3367fd=_0x9536[_0x1030ce];return _0x3367fd;};'use strict';var multer=require(_0x6953('0x0'));var util=require(_0x6953('0x1'));var path=require(_0x6953('0x2'));var timeout=require(_0x6953('0x3'));var express=require('express');var router=express[_0x6953('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x6953('0x5'));var config=require(_0x6953('0x6'));var controller=require(_0x6953('0x7'));router[_0x6953('0x8')]('/',auth[_0x6953('0x9')](),controller['index']);router[_0x6953('0x8')](_0x6953('0xa'),auth[_0x6953('0x9')](),controller[_0x6953('0xb')]);router[_0x6953('0x8')]('/:id',auth[_0x6953('0x9')](),controller[_0x6953('0xc')]);router[_0x6953('0x8')]('/:id/download',auth[_0x6953('0x9')](),controller[_0x6953('0xd')]);router[_0x6953('0xe')]('/',auth[_0x6953('0x9')](),interaction[_0x6953('0xf')](_0x6953('0x10'),_0x6953('0x11')),controller[_0x6953('0x12')]);router[_0x6953('0x13')]('/:id',auth[_0x6953('0x9')](),controller['update']);router[_0x6953('0x13')](_0x6953('0x14'),auth[_0x6953('0x9')](),controller[_0x6953('0x15')]);router[_0x6953('0x13')](_0x6953('0x16'),auth[_0x6953('0x9')](),controller[_0x6953('0x17')]);router[_0x6953('0x18')](_0x6953('0x19'),auth[_0x6953('0x9')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 0fb08f9..23eeec2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ecb=['exports','name','INTEGER','rrmemory','beepall'];(function(_0x2d188f,_0x4d524d){var _0x5dc9b1=function(_0x279eeb){while(--_0x279eeb){_0x2d188f['push'](_0x2d188f['shift']());}};_0x5dc9b1(++_0x4d524d);}(_0x1ecb,0x186));var _0xb1ec=function(_0x5ec055,_0x6e712){_0x5ec055=_0x5ec055-0x0;var _0xa64023=_0x1ecb[_0x5ec055];return _0xa64023;};'use strict';var Sequelize=require('sequelize');module[_0xb1ec('0x0')]={'name':{'type':Sequelize['STRING'],'unique':_0xb1ec('0x1'),'allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0xb1ec('0x2')],'allowNull':![],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0xb1ec('0x3'),_0xb1ec('0x4'),'roundrobin'),'allowNull':![]},'lastAgent':{'type':Sequelize[_0xb1ec('0x2')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x990c=['name','INTEGER','ENUM','rrmemory','beepall','roundrobin','exports','STRING'];(function(_0x46bf1f,_0x4b133a){var _0x2ecde0=function(_0x2661c3){while(--_0x2661c3){_0x46bf1f['push'](_0x46bf1f['shift']());}};_0x2ecde0(++_0x4b133a);}(_0x990c,0xf6));var _0xc990=function(_0xc9d7a5,_0x527440){_0xc9d7a5=_0xc9d7a5-0x0;var _0x40f1fc=_0x990c[_0xc9d7a5];return _0x40f1fc;};'use strict';var Sequelize=require('sequelize');module[_0xc990('0x0')]={'name':{'type':Sequelize[_0xc990('0x1')],'unique':_0xc990('0x2'),'allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xc990('0x1')]},'timeout':{'type':Sequelize[_0xc990('0x3')],'allowNull':![],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xc990('0x4')](_0xc990('0x5'),_0xc990('0x6'),_0xc990('0x7')),'allowNull':![]},'lastAgent':{'type':Sequelize[_0xc990('0x3')],'defaultValue':0x0}};
\ No newline at end of file
index 423bcab..3d2848e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8582=['removeTeams','ids','team_has_fax_queues','join','clone','sequelize','toString','QueryTypes','every','TeamId','includes','all','union','compact','value','isEmpty','emit','userFaxQueue:remove','addAgents','spread','removeAgents','isArray','getAgents','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','ejs','squel','crypto','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults','localhost','socket.io-emitter','register','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','save','update','then','destroy','get','FaxQueues','UserProfileResource','error','stack','name','send','index','FaxQueue','rawAttributes','model','keys','query','attributes','intersection','fields','length','nolimit','order','sort','where','pick','filter','merge','map','type','key','options','count','includeAll','include','findAll','show','params','find','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getMembers','UserFaxQueue','filters','FaxQueueId','User','findAndCountAll','agent','createdAt','rows','%s/%s','SIP','faxPause','updatedAt','getTeams','findOne','Team','hasOwnProperty','teams','Agents','online','voicePause','flatMap','transaction','addTeams','each','findOrCreate','forEach','userFaxQueue:save'];(function(_0x1d6a39,_0x5e3ba1){var _0x534782=function(_0x1d0b72){while(--_0x1d0b72){_0x1d6a39['push'](_0x1d6a39['shift']());}};_0x534782(++_0x5e3ba1);}(_0x8582,0x1b2));var _0x2858=function(_0xa0b87d,_0x3d1bfa){_0xa0b87d=_0xa0b87d-0x0;var _0x6053c8=_0x8582[_0xa0b87d];return _0x6053c8;};'use strict';var pdf=require(_0x2858('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x2858('0x1'));var zipdir=require(_0x2858('0x2'));var jsonpatch=require(_0x2858('0x3'));var rp=require(_0x2858('0x4'));var moment=require(_0x2858('0x5'));var BPromise=require(_0x2858('0x6'));var Mustache=require(_0x2858('0x7'));var util=require('util');var path=require(_0x2858('0x8'));var sox=require(_0x2858('0x9'));var csv=require('to-csv');var ejs=require(_0x2858('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x2858('0xb'));var crypto=require(_0x2858('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x2858('0xd'));var toCsv=require(_0x2858('0xe'));var querystring=require(_0x2858('0xf'));var Papa=require(_0x2858('0x10'));var Redis=require('ioredis');var authService=require(_0x2858('0x11'));var qs=require(_0x2858('0x12'));var hardwareService=require(_0x2858('0x13'));var logger=require(_0x2858('0x14'))(_0x2858('0x15'));var utils=require(_0x2858('0x16'));var config=require('../../config/environment');var db=require(_0x2858('0x17'))['db'];config[_0x2858('0x18')]=_[_0x2858('0x19')](config[_0x2858('0x18')],{'host':_0x2858('0x1a'),'port':0x18eb});var socket=require(_0x2858('0x1b'))(new Redis(config[_0x2858('0x18')]));require('./faxQueue.socket')[_0x2858('0x1c')](socket);function respondWithStatusCode(_0x3351da,_0x9c60ad){_0x9c60ad=_0x9c60ad||0xcc;return function(_0x12846d){if(_0x12846d){return _0x3351da[_0x2858('0x1d')](_0x9c60ad);}return _0x3351da[_0x2858('0x1e')](_0x9c60ad)[_0x2858('0x1f')]();};}function respondWithResult(_0x15fa31,_0xa5b568){_0xa5b568=_0xa5b568||0xc8;return function(_0x5e21f3){if(_0x5e21f3){return _0x15fa31[_0x2858('0x1e')](_0xa5b568)[_0x2858('0x20')](_0x5e21f3);}};}function respondWithFilteredResult(_0x1bec89,_0x4a98af){return function(_0x55ceab){if(_0x55ceab){var _0x4ec7ea=_0x55ceab['count'],_0x21f914=_0x4a98af[_0x2858('0x21')],_0x5e59ed=_0x4a98af[_0x2858('0x21')]+_0x4a98af[_0x2858('0x22')],_0x389d42;if(_0x5e59ed>=_0x4ec7ea){_0x5e59ed=_0x4ec7ea;_0x389d42=0xc8;}else{_0x389d42=0xce;}_0x1bec89['status'](_0x389d42);return _0x1bec89[_0x2858('0x23')](_0x2858('0x24'),_0x21f914+'-'+_0x5e59ed+'/'+_0x4ec7ea)[_0x2858('0x20')](_0x55ceab);}return null;};}function patchUpdates(_0x4922c0){return function(_0x14c30d){try{jsonpatch[_0x2858('0x25')](_0x14c30d,_0x4922c0,!![]);}catch(_0x15196f){return BPromise['reject'](_0x15196f);}return _0x14c30d[_0x2858('0x26')]();};}function saveUpdates(_0x4f0e95,_0x15ac8c){return function(_0xdfb2bb){if(_0xdfb2bb){return _0xdfb2bb[_0x2858('0x27')](_0x4f0e95)[_0x2858('0x28')](function(_0x58d61b){return _0x58d61b;});}return null;};}function removeEntity(_0x22d27e,_0x2b4f60){return function(_0x59e5d4){if(_0x59e5d4){return _0x59e5d4[_0x2858('0x29')]()['then'](function(){var _0x2343ec=_0x59e5d4[_0x2858('0x2a')]({'plain':!![]});var _0x3b968c=_0x2858('0x2b');return db[_0x2858('0x2c')][_0x2858('0x29')]({'where':{'type':_0x3b968c,'resourceId':_0x2343ec['id']}})[_0x2858('0x28')](function(){return _0x59e5d4;});})[_0x2858('0x28')](function(){_0x22d27e[_0x2858('0x1e')](0xcc)[_0x2858('0x1f')]();});}};}function handleEntityNotFound(_0x76ba83,_0x410d80){return function(_0x49427d){if(!_0x49427d){_0x76ba83[_0x2858('0x1d')](0x194);}return _0x49427d;};}function handleError(_0x5e5a3b,_0xe4d48d){_0xe4d48d=_0xe4d48d||0x1f4;return function(_0x58656e){logger[_0x2858('0x2d')](_0x58656e[_0x2858('0x2e')]);if(_0x58656e[_0x2858('0x2f')]){delete _0x58656e[_0x2858('0x2f')];}_0x5e5a3b['status'](_0xe4d48d)[_0x2858('0x30')](_0x58656e);};}exports[_0x2858('0x31')]=function(_0x118c0c,_0x51f833){var _0x55b04e={},_0x1f558a={},_0x2dc81b={'count':0x0,'rows':[]};var _0x25be1a=db[_0x2858('0x32')][_0x2858('0x33')];_0x1f558a[_0x2858('0x34')]=_[_0x2858('0x35')](_0x25be1a);_0x1f558a[_0x2858('0x36')]=_[_0x2858('0x35')](_0x118c0c['query']);_0x1f558a['filters']=_['intersection'](_0x1f558a[_0x2858('0x34')],_0x1f558a[_0x2858('0x36')]);_0x55b04e[_0x2858('0x37')]=_[_0x2858('0x38')](_0x1f558a['model'],qs['fields'](_0x118c0c['query'][_0x2858('0x39')]));_0x55b04e['attributes']=_0x55b04e[_0x2858('0x37')][_0x2858('0x3a')]?_0x55b04e['attributes']:_0x1f558a[_0x2858('0x34')];if(!_0x118c0c[_0x2858('0x36')]['hasOwnProperty'](_0x2858('0x3b'))){_0x55b04e[_0x2858('0x22')]=qs[_0x2858('0x22')](_0x118c0c[_0x2858('0x36')][_0x2858('0x22')]);_0x55b04e[_0x2858('0x21')]=qs[_0x2858('0x21')](_0x118c0c[_0x2858('0x36')]['offset']);}_0x55b04e[_0x2858('0x3c')]=qs[_0x2858('0x3d')](_0x118c0c[_0x2858('0x36')][_0x2858('0x3d')]);_0x55b04e[_0x2858('0x3e')]=qs['filters'](_[_0x2858('0x3f')](_0x118c0c['query'],_0x1f558a['filters']));if(_0x118c0c[_0x2858('0x36')][_0x2858('0x40')]){_0x55b04e[_0x2858('0x3e')]=_[_0x2858('0x41')](_0x55b04e[_0x2858('0x3e')],{'$or':_[_0x2858('0x42')](_0x25be1a,function(_0x112ac0){if(_0x112ac0[_0x2858('0x43')][_0x2858('0x44')]!=='VIRTUAL'){var _0x3a5e3b={};_0x3a5e3b[_0x112ac0['field']]={'$like':'%'+_0x118c0c['query'][_0x2858('0x40')]+'%'};return _0x3a5e3b;}})});}_0x55b04e=_[_0x2858('0x41')]({},_0x55b04e,_0x118c0c[_0x2858('0x45')]);var _0x4bd16d={'where':_0x55b04e[_0x2858('0x3e')]};return db[_0x2858('0x32')][_0x2858('0x46')](_0x4bd16d)[_0x2858('0x28')](function(_0x38db5b){_0x2dc81b[_0x2858('0x46')]=_0x38db5b;if(_0x118c0c[_0x2858('0x36')][_0x2858('0x47')]){_0x55b04e[_0x2858('0x48')]=[{'all':!![]}];}return db[_0x2858('0x32')][_0x2858('0x49')](_0x55b04e);})[_0x2858('0x28')](function(_0x1095c2){_0x2dc81b['rows']=_0x1095c2;return _0x2dc81b;})[_0x2858('0x28')](respondWithFilteredResult(_0x51f833,_0x55b04e))['catch'](handleError(_0x51f833,null));};exports[_0x2858('0x4a')]=function(_0x359044,_0x13f393){var _0x3e26b1={'raw':!![],'where':{'id':_0x359044[_0x2858('0x4b')]['id']}},_0x4efd09={};_0x4efd09['model']=_['keys'](db[_0x2858('0x32')]['rawAttributes']);_0x4efd09[_0x2858('0x36')]=_[_0x2858('0x35')](_0x359044[_0x2858('0x36')]);_0x4efd09['filters']=_['intersection'](_0x4efd09['model'],_0x4efd09[_0x2858('0x36')]);_0x3e26b1['attributes']=_[_0x2858('0x38')](_0x4efd09[_0x2858('0x34')],qs[_0x2858('0x39')](_0x359044[_0x2858('0x36')]['fields']));_0x3e26b1[_0x2858('0x37')]=_0x3e26b1[_0x2858('0x37')][_0x2858('0x3a')]?_0x3e26b1[_0x2858('0x37')]:_0x4efd09['model'];if(_0x359044[_0x2858('0x36')][_0x2858('0x47')]){_0x3e26b1[_0x2858('0x48')]=[{'all':!![]}];}_0x3e26b1=_['merge']({},_0x3e26b1,_0x359044['options']);return db[_0x2858('0x32')][_0x2858('0x4c')](_0x3e26b1)['then'](handleEntityNotFound(_0x13f393,null))[_0x2858('0x28')](respondWithResult(_0x13f393,null))[_0x2858('0x4d')](handleError(_0x13f393,null));};exports[_0x2858('0x4e')]=function(_0xefc7f2,_0x3c268b){return db[_0x2858('0x32')][_0x2858('0x4e')](_0xefc7f2[_0x2858('0x4f')],{})[_0x2858('0x28')](function(_0x15d79d){var _0x14fcad=_0xefc7f2[_0x2858('0x50')][_0x2858('0x2a')]({'plain':!![]});if(!_0x14fcad)throw new Error(_0x2858('0x51'));if(_0x14fcad['role']===_0x2858('0x50')){var _0x353081=_0x15d79d[_0x2858('0x2a')]({'plain':!![]});var _0xeb5f1d=_0x2858('0x2b');return db[_0x2858('0x52')][_0x2858('0x4c')]({'where':{'name':_0xeb5f1d,'userProfileId':_0x14fcad[_0x2858('0x53')]},'raw':!![]})[_0x2858('0x28')](function(_0x1c6f2f){if(_0x1c6f2f&&_0x1c6f2f[_0x2858('0x54')]===0x0){return db['UserProfileResource'][_0x2858('0x4e')]({'name':_0x353081[_0x2858('0x2f')],'resourceId':_0x353081['id'],'type':_0x1c6f2f[_0x2858('0x2f')],'sectionId':_0x1c6f2f['id']},{})[_0x2858('0x28')](function(){return _0x15d79d;});}else{return _0x15d79d;}})[_0x2858('0x4d')](function(_0x30b469){logger[_0x2858('0x2d')](_0x2858('0x55'),_0x30b469);throw _0x30b469;});}return _0x15d79d;})[_0x2858('0x28')](respondWithResult(_0x3c268b,0xc9))['catch'](handleError(_0x3c268b,null));};exports[_0x2858('0x27')]=function(_0x48e7d5,_0x245bb8){if(_0x48e7d5[_0x2858('0x4f')]['id']){delete _0x48e7d5[_0x2858('0x4f')]['id'];}return db[_0x2858('0x32')]['find']({'where':{'id':_0x48e7d5[_0x2858('0x4b')]['id']}})[_0x2858('0x28')](handleEntityNotFound(_0x245bb8,null))[_0x2858('0x28')](saveUpdates(_0x48e7d5[_0x2858('0x4f')],null))[_0x2858('0x28')](respondWithResult(_0x245bb8,null))[_0x2858('0x4d')](handleError(_0x245bb8,null));};exports[_0x2858('0x29')]=function(_0x2958a0,_0x589698){return db['FaxQueue']['find']({'where':{'id':_0x2958a0[_0x2858('0x4b')]['id']}})[_0x2858('0x28')](handleEntityNotFound(_0x589698,null))[_0x2858('0x28')](removeEntity(_0x589698,null))[_0x2858('0x4d')](handleError(_0x589698,null));};exports['describe']=function(_0x3c45c1,_0x4090da){return db[_0x2858('0x32')]['describe']()['then'](respondWithResult(_0x4090da,null))[_0x2858('0x4d')](handleError(_0x4090da,null));};exports[_0x2858('0x56')]=function(_0x128433,_0x2f6946,_0x3eb3ea){var _0x23f76d={'raw':!![],'where':{}},_0x26089e={},_0x101451;return db[_0x2858('0x32')]['findOne']({'where':{'id':_0x128433[_0x2858('0x4b')]['id']}})[_0x2858('0x28')](handleEntityNotFound(_0x2f6946,null))[_0x2858('0x28')](function(_0x127a3b){if(_0x127a3b){_0x101451=_0x127a3b['get']({'plain':!![]});_0x26089e[_0x2858('0x34')]=_[_0x2858('0x35')](db[_0x2858('0x57')][_0x2858('0x33')]);_0x26089e['query']=_[_0x2858('0x35')](_0x128433[_0x2858('0x36')]);_0x26089e[_0x2858('0x58')]=_[_0x2858('0x38')](_0x26089e['model'],_0x26089e[_0x2858('0x36')]);_0x23f76d[_0x2858('0x37')]=_[_0x2858('0x38')](_0x26089e[_0x2858('0x34')],qs[_0x2858('0x39')](_0x128433[_0x2858('0x36')]['fields']));_0x23f76d['attributes']=_0x23f76d['attributes']['length']?_0x23f76d['attributes']:_0x26089e['model'];if(!_0x128433[_0x2858('0x36')]['hasOwnProperty'](_0x2858('0x3b'))){_0x23f76d[_0x2858('0x22')]=qs[_0x2858('0x22')](_0x128433[_0x2858('0x36')][_0x2858('0x22')]);_0x23f76d['offset']=qs[_0x2858('0x21')](_0x128433[_0x2858('0x36')][_0x2858('0x21')]);}_0x23f76d['order']=qs[_0x2858('0x3d')](_0x128433[_0x2858('0x36')][_0x2858('0x3d')]);_0x23f76d['where']=qs[_0x2858('0x58')](_[_0x2858('0x3f')](_0x128433[_0x2858('0x36')],_0x26089e['filters']));_0x23f76d[_0x2858('0x3e')][_0x2858('0x59')]=_0x127a3b['id'];if(_0x128433['query']['filter']){_0x23f76d['where']=_[_0x2858('0x41')](_0x23f76d[_0x2858('0x3e')],{'$or':_['map'](_0x23f76d['attributes'],function(_0x5b51d6){var _0x2214de={};_0x2214de[_0x5b51d6]={'$like':'%'+_0x128433[_0x2858('0x36')]['filter']+'%'};return _0x2214de;})});}_0x23f76d=_[_0x2858('0x41')]({},_0x23f76d,_0x128433['options']);return db[_0x2858('0x57')][_0x2858('0x49')](_0x23f76d);}})[_0x2858('0x28')](function(_0x13eed5){if(_0x13eed5){return db[_0x2858('0x5a')][_0x2858('0x5b')]({'where':{'id':_[_0x2858('0x42')](_0x13eed5,'UserId'),'role':_0x2858('0x5c')},'attributes':['id',_0x2858('0x2f'),'faxPause','updatedAt',_0x2858('0x5d')]});}})['then'](function(_0x1da020){if(_0x1da020){return{'count':_0x1da020[_0x2858('0x46')],'rows':_[_0x2858('0x42')](_0x1da020[_0x2858('0x5e')],function(_0x3bc0b2){return{'membername':_0x3bc0b2[_0x2858('0x2f')],'UserId':_0x3bc0b2['id'],'queue_name':_0x101451[_0x2858('0x2f')],'FaxQueueId':_0x101451['id'],'interface':util['format'](_0x2858('0x5f'),_0x2858('0x60'),_0x3bc0b2[_0x2858('0x2f')]),'penalty':0x0,'paused':_0x3bc0b2[_0x2858('0x61')],'createdAt':_0x3bc0b2[_0x2858('0x5d')],'updatedAt':_0x3bc0b2[_0x2858('0x62')]};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x2f6946,_0x23f76d))[_0x2858('0x4d')](handleError(_0x2f6946,null));};exports[_0x2858('0x63')]=function(_0x4e2bbf,_0x456406,_0x991cb4){var _0x4f8809={};var _0x3e4e5d={};var _0x4c7a43;var _0x4945fb;return db[_0x2858('0x32')][_0x2858('0x64')]({'where':{'id':_0x4e2bbf[_0x2858('0x4b')]['id']}})[_0x2858('0x28')](handleEntityNotFound(_0x456406,null))[_0x2858('0x28')](function(_0x490fdc){if(_0x490fdc){_0x4c7a43=_0x490fdc;_0x3e4e5d['model']=_[_0x2858('0x35')](db[_0x2858('0x65')][_0x2858('0x33')]);_0x3e4e5d[_0x2858('0x36')]=_['keys'](_0x4e2bbf[_0x2858('0x36')]);_0x3e4e5d[_0x2858('0x58')]=_[_0x2858('0x38')](_0x3e4e5d[_0x2858('0x34')],_0x3e4e5d['query']);_0x4f8809[_0x2858('0x37')]=_[_0x2858('0x38')](_0x3e4e5d[_0x2858('0x34')],qs[_0x2858('0x39')](_0x4e2bbf['query'][_0x2858('0x39')]));_0x4f8809[_0x2858('0x37')]=_0x4f8809[_0x2858('0x37')][_0x2858('0x3a')]?_0x4f8809[_0x2858('0x37')]:_0x3e4e5d[_0x2858('0x34')];_0x4f8809[_0x2858('0x3c')]=qs['sort'](_0x4e2bbf[_0x2858('0x36')][_0x2858('0x3d')]);_0x4f8809[_0x2858('0x3e')]=qs[_0x2858('0x58')](_[_0x2858('0x3f')](_0x4e2bbf[_0x2858('0x36')],_0x3e4e5d['filters']));if(_0x4e2bbf[_0x2858('0x36')][_0x2858('0x40')]){_0x4f8809[_0x2858('0x3e')]=_[_0x2858('0x41')](_0x4f8809[_0x2858('0x3e')],{'$or':_['map'](_0x4f8809[_0x2858('0x37')],function(_0x47d93c){var _0x314cda={};_0x314cda[_0x47d93c]={'$like':'%'+_0x4e2bbf[_0x2858('0x36')][_0x2858('0x40')]+'%'};return _0x314cda;})});}_0x4f8809=_['merge']({},_0x4f8809,_0x4e2bbf[_0x2858('0x45')]);return _0x4c7a43[_0x2858('0x63')](_0x4f8809);}})['then'](function(_0x1f610){if(_0x1f610){_0x4945fb=_0x1f610[_0x2858('0x3a')];if(!_0x4e2bbf[_0x2858('0x36')][_0x2858('0x66')](_0x2858('0x3b'))){_0x4f8809['limit']=qs['limit'](_0x4e2bbf[_0x2858('0x36')][_0x2858('0x22')]);_0x4f8809['offset']=qs[_0x2858('0x21')](_0x4e2bbf['query'][_0x2858('0x21')]);}return _0x4c7a43[_0x2858('0x63')](_0x4f8809);}})['then'](function(_0x3fafb6){if(_0x3fafb6){return _0x3fafb6?{'count':_0x4945fb,'rows':_0x3fafb6}:null;}})['then'](respondWithResult(_0x456406,null))['catch'](handleError(_0x456406,null));};exports['addTeams']=function(_0x310744,_0x585f39,_0xf431f7){var _0x162ba4=_0x310744['body'][_0x2858('0x67')];return db['Team'][_0x2858('0x49')]({'where':{'id':_[_0x2858('0x42')](_0x162ba4,'id')},'attributes':['id'],'include':[{'model':db[_0x2858('0x5a')],'as':_0x2858('0x68'),'attributes':['id',_0x2858('0x2f'),_0x2858('0x69'),_0x2858('0x6a'),'interface'],'raw':!![]}]})['then'](function(_0x43a93b){if(_0x43a93b){var _0xf9f26b=_[_0x2858('0x6b')](_0x43a93b,function(_0x411c24){var _0x207173=_0x411c24[_0x2858('0x2a')]({'plain':!![]});return _0x207173[_0x2858('0x68')];});return db[_0x2858('0x32')][_0x2858('0x4c')]({'where':{'id':_0x310744['params']['id']}})[_0x2858('0x28')](function(_0x1ce6f3){return db['sequelize'][_0x2858('0x6c')](function(_0x55ee6a){return _0x1ce6f3[_0x2858('0x6d')](_['map'](_0x162ba4,'id'),{'transaction':_0x55ee6a})[_0x2858('0x28')](function(){return BPromise[_0x2858('0x6e')](_0xf9f26b,function(_0xb59865){return db[_0x2858('0x57')][_0x2858('0x6f')]({'where':{'UserId':_0xb59865['id'],'FaxQueueId':_0x310744['params']['id']},'transaction':_0x55ee6a});});})[_0x2858('0x28')](function(){_0xf9f26b[_0x2858('0x70')](function(_0x302d3b){socket['emit'](_0x2858('0x71'),{'UserId':_0x302d3b['id'],'FaxQueueId':_0x1ce6f3['id']});});});});});}})[_0x2858('0x28')](respondWithStatusCode(_0x585f39,null))[_0x2858('0x4d')](handleError(_0x585f39,null));};exports[_0x2858('0x72')]=function(_0x17fd5d,_0x2ea0ff,_0x54275a){return db[_0x2858('0x65')][_0x2858('0x49')]({'where':{'id':_0x17fd5d[_0x2858('0x36')][_0x2858('0x73')]},'attributes':['id'],'include':[{'model':db[_0x2858('0x5a')],'as':_0x2858('0x68'),'attributes':['id'],'raw':!![]}]})[_0x2858('0x28')](handleEntityNotFound(_0x2ea0ff,null))['then'](function(_0xd49fc4){var _0x3f6a82=_['map'](_0xd49fc4,'id');var _0x331607=[];var _0x1bf66a=[];var _0x35829f=squel['select']();_0x35829f['field']('tq.TeamId')['from'](_0x2858('0x74'),'tq')[_0x2858('0x75')]('user_has_teams','ut','ut.TeamId\x20=\x20tq.TeamId')[_0x2858('0x3e')]('FaxQueueId\x20=\x20?',_0x17fd5d[_0x2858('0x4b')]['id']);for(var _0x4db72b=0x0;_0x4db72b<_0xd49fc4[_0x2858('0x3a')];_0x4db72b+=0x1){let _0x42d8c2=_0xd49fc4[_0x4db72b];for(var _0x4cbe86=0x0;_0x4cbe86<_0x42d8c2[_0x2858('0x68')][_0x2858('0x3a')];_0x4cbe86+=0x1){let _0x5710eb=_0x42d8c2['Agents'][_0x4cbe86];var _0x4a6a6f=_0x35829f[_0x2858('0x76')]();_0x4a6a6f[_0x2858('0x3e')]('ut.UserId\x20=\x20?',_0x5710eb['id']);_0x1bf66a['push'](db[_0x2858('0x77')][_0x2858('0x36')](_0x4a6a6f[_0x2858('0x78')](),{'type':db[_0x2858('0x77')][_0x2858('0x79')]['SELECT']})[_0x2858('0x28')](function(_0x1bf312){if(_0x1bf312['length']===0x1){return _0x5710eb['id'];}else{var _0x38f115=_[_0x2858('0x7a')](_[_0x2858('0x42')](_0x1bf312,_0x2858('0x7b')),function(_0x14e0c0){return _[_0x2858('0x7c')](_0x3f6a82,_0x14e0c0);});if(_0x38f115){return _0x5710eb['id'];}}}));}}return BPromise[_0x2858('0x7d')](_0x1bf66a)[_0x2858('0x28')](function(_0x230613){_0x331607=_(_0x331607)[_0x2858('0x7e')](_0x230613)[_0x2858('0x7f')]()[_0x2858('0x80')]();return db[_0x2858('0x32')][_0x2858('0x4c')]({'where':{'id':_0x17fd5d[_0x2858('0x4b')]['id']}})[_0x2858('0x28')](function(_0x491846){return db[_0x2858('0x77')]['transaction'](function(_0x2d9142){return _0x491846['removeTeams'](_0x17fd5d['query']['ids'],{'transaction':_0x2d9142})[_0x2858('0x28')](function(){if(!_[_0x2858('0x81')](_0x331607)){return _0x491846['removeAgents'](_0x331607,{'transaction':_0x2d9142});}})[_0x2858('0x28')](function(){_0x331607[_0x2858('0x70')](function(_0x156f43){socket[_0x2858('0x82')](_0x2858('0x83'),{'UserId':_0x156f43,'FaxQueueId':_0x491846['id']});});});});});});})[_0x2858('0x28')](respondWithStatusCode(_0x2ea0ff,null))[_0x2858('0x4d')](handleError(_0x2ea0ff,null));};exports['addAgents']=function(_0x3bde64,_0x1f6389,_0x1290c1){return db['FaxQueue'][_0x2858('0x4c')]({'where':{'id':_0x3bde64[_0x2858('0x4b')]['id']}})[_0x2858('0x28')](handleEntityNotFound(_0x1f6389,null))[_0x2858('0x28')](function(_0x25b13c){if(_0x25b13c){return _0x25b13c[_0x2858('0x84')](_0x3bde64[_0x2858('0x4f')][_0x2858('0x73')],_['omit'](_0x3bde64[_0x2858('0x4f')],['ids','id'])||{})[_0x2858('0x85')](function(_0x1a3c0c){for(var _0xee42ea=0x0;_0xee42ea<_0x3bde64['body'][_0x2858('0x73')]['length'];_0xee42ea+=0x1){socket[_0x2858('0x82')](_0x2858('0x71'),{'UserId':_0x3bde64[_0x2858('0x4f')][_0x2858('0x73')][_0xee42ea],'FaxQueueId':_0x3bde64[_0x2858('0x4b')]['id']});}return _0x1a3c0c;});}})[_0x2858('0x28')](respondWithResult(_0x1f6389,null))[_0x2858('0x4d')](handleError(_0x1f6389,null));};exports['removeAgents']=function(_0x1ff3c1,_0x5882a7,_0x25b9fd){return db['FaxQueue'][_0x2858('0x4c')]({'where':{'id':_0x1ff3c1[_0x2858('0x4b')]['id']}})[_0x2858('0x28')](handleEntityNotFound(_0x5882a7,null))[_0x2858('0x28')](function(_0x2fc362){if(_0x2fc362){return _0x2fc362[_0x2858('0x86')](_0x1ff3c1['query'][_0x2858('0x73')])[_0x2858('0x28')](function(){if(_[_0x2858('0x87')](_0x1ff3c1[_0x2858('0x36')][_0x2858('0x73')])){for(var _0x3f4016=0x0;_0x3f4016<_0x1ff3c1[_0x2858('0x36')][_0x2858('0x73')]['length'];_0x3f4016+=0x1){socket[_0x2858('0x82')]('userFaxQueue:remove',{'UserId':Number(_0x1ff3c1[_0x2858('0x36')][_0x2858('0x73')][_0x3f4016]),'FaxQueueId':Number(_0x1ff3c1['params']['id'])});}}else{socket['emit'](_0x2858('0x83'),{'UserId':Number(_0x1ff3c1[_0x2858('0x36')][_0x2858('0x73')]),'FaxQueueId':Number(_0x1ff3c1[_0x2858('0x4b')]['id'])});}});}})[_0x2858('0x28')](respondWithStatusCode(_0x5882a7,null))[_0x2858('0x4d')](handleError(_0x5882a7,null));};exports[_0x2858('0x88')]=function(_0x4f49e0,_0x238045,_0x20d892){var _0x1eaafb={};var _0x5f505b={};var _0x38278c;var _0x2bd03d;return db['FaxQueue']['findOne']({'where':{'id':_0x4f49e0[_0x2858('0x4b')]['id']}})[_0x2858('0x28')](handleEntityNotFound(_0x238045,null))[_0x2858('0x28')](function(_0x297b8a){if(_0x297b8a){_0x38278c=_0x297b8a;_0x5f505b[_0x2858('0x34')]=_[_0x2858('0x35')](db['User']['rawAttributes']);_0x5f505b[_0x2858('0x36')]=_[_0x2858('0x35')](_0x4f49e0[_0x2858('0x36')]);_0x5f505b['filters']=_[_0x2858('0x38')](_0x5f505b[_0x2858('0x34')],_0x5f505b[_0x2858('0x36')]);_0x1eaafb['attributes']=_[_0x2858('0x38')](_0x5f505b[_0x2858('0x34')],qs[_0x2858('0x39')](_0x4f49e0[_0x2858('0x36')]['fields']));_0x1eaafb[_0x2858('0x37')]=_0x1eaafb[_0x2858('0x37')]['length']?_0x1eaafb[_0x2858('0x37')]:_0x5f505b[_0x2858('0x34')];_0x1eaafb[_0x2858('0x3c')]=qs[_0x2858('0x3d')](_0x4f49e0[_0x2858('0x36')][_0x2858('0x3d')]);_0x1eaafb[_0x2858('0x3e')]=qs['filters'](_[_0x2858('0x3f')](_0x4f49e0[_0x2858('0x36')],_0x5f505b[_0x2858('0x58')]));if(_0x4f49e0[_0x2858('0x36')][_0x2858('0x40')]){_0x1eaafb[_0x2858('0x3e')]=_[_0x2858('0x41')](_0x1eaafb[_0x2858('0x3e')],{'$or':_[_0x2858('0x42')](_0x1eaafb['attributes'],function(_0x2f8455){var _0x4ec67d={};_0x4ec67d[_0x2f8455]={'$like':'%'+_0x4f49e0[_0x2858('0x36')]['filter']+'%'};return _0x4ec67d;})});}_0x1eaafb=_[_0x2858('0x41')]({},_0x1eaafb,_0x4f49e0[_0x2858('0x45')]);return _0x38278c[_0x2858('0x88')](_0x1eaafb);}})[_0x2858('0x28')](function(_0x437e4b){if(_0x437e4b){_0x2bd03d=_0x437e4b[_0x2858('0x3a')];if(!_0x4f49e0[_0x2858('0x36')][_0x2858('0x66')]('nolimit')){_0x1eaafb['limit']=qs[_0x2858('0x22')](_0x4f49e0[_0x2858('0x36')]['limit']);_0x1eaafb[_0x2858('0x21')]=qs[_0x2858('0x21')](_0x4f49e0[_0x2858('0x36')][_0x2858('0x21')]);}return _0x38278c[_0x2858('0x88')](_0x1eaafb);}})[_0x2858('0x28')](function(_0x8570d8){if(_0x8570d8){return _0x8570d8?{'count':_0x2bd03d,'rows':_0x8570d8}:null;}})[_0x2858('0x28')](respondWithResult(_0x238045,null))[_0x2858('0x4d')](handleError(_0x238045,null));};
\ No newline at end of file
+var _0xa1b3=['sequelize','QueryTypes','SELECT','every','TeamId','includes','all','union','value','ids','isEmpty','removeAgents','addAgents','omit','spread','userFaxQueue:remove','getAgents','html-pdf','eml-format','rimraf','zip-dir','request-promise','bluebird','path','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./faxQueue.socket','register','sendStatus','status','end','json','count','offset','set','apply','reject','save','update','then','destroy','get','UserProfileResource','error','stack','name','FaxQueue','rawAttributes','model','keys','query','intersection','attributes','fields','hasOwnProperty','nolimit','limit','sort','where','filters','pick','merge','type','VIRTUAL','field','filter','options','includeAll','include','rows','find','body','role','FaxQueues','UserProfileSection','autoAssociation','create','catch','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','describe','getMembers','UserFaxQueue','length','order','map','findAll','User','findAndCountAll','UserId','agent','faxPause','%s/%s','SIP','updatedAt','getTeams','findOne','Team','addTeams','teams','online','voicePause','flatMap','Agents','transaction','each','findOrCreate','forEach','emit','userFaxQueue:save','removeTeams','select','from','join','ut.TeamId\x20=\x20tq.TeamId','ut.UserId\x20=\x20?','push'];(function(_0x3fba9f,_0x3b7b9b){var _0x192cf1=function(_0x557290){while(--_0x557290){_0x3fba9f['push'](_0x3fba9f['shift']());}};_0x192cf1(++_0x3b7b9b);}(_0xa1b3,0x1a0));var _0x3a1b=function(_0x372177,_0x1fa6af){_0x372177=_0x372177-0x0;var _0x338fbc=_0xa1b3[_0x372177];return _0x338fbc;};'use strict';var pdf=require(_0x3a1b('0x0'));var emlformat=require(_0x3a1b('0x1'));var rimraf=require(_0x3a1b('0x2'));var zipdir=require(_0x3a1b('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3a1b('0x4'));var moment=require('moment');var BPromise=require(_0x3a1b('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0x3a1b('0x6'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x3a1b('0x7'));var fs=require('fs');var _=require(_0x3a1b('0x8'));var squel=require('squel');var crypto=require(_0x3a1b('0x9'));var jsforce=require(_0x3a1b('0xa'));var deskjs=require(_0x3a1b('0xb'));var toCsv=require(_0x3a1b('0xc'));var querystring=require(_0x3a1b('0xd'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x3a1b('0xe'));var hardwareService=require(_0x3a1b('0xf'));var logger=require(_0x3a1b('0x10'))(_0x3a1b('0x11'));var utils=require(_0x3a1b('0x12'));var config=require(_0x3a1b('0x13'));var db=require(_0x3a1b('0x14'))['db'];config['redis']=_[_0x3a1b('0x15')](config[_0x3a1b('0x16')],{'host':_0x3a1b('0x17'),'port':0x18eb});var socket=require(_0x3a1b('0x18'))(new Redis(config[_0x3a1b('0x16')]));require(_0x3a1b('0x19'))[_0x3a1b('0x1a')](socket);function respondWithStatusCode(_0x44dd74,_0x86a021){_0x86a021=_0x86a021||0xcc;return function(_0x42cc45){if(_0x42cc45){return _0x44dd74[_0x3a1b('0x1b')](_0x86a021);}return _0x44dd74[_0x3a1b('0x1c')](_0x86a021)[_0x3a1b('0x1d')]();};}function respondWithResult(_0x1845dc,_0x2d68d4){_0x2d68d4=_0x2d68d4||0xc8;return function(_0x26c0b0){if(_0x26c0b0){return _0x1845dc[_0x3a1b('0x1c')](_0x2d68d4)[_0x3a1b('0x1e')](_0x26c0b0);}};}function respondWithFilteredResult(_0xe4929e,_0x169546){return function(_0x114c1d){if(_0x114c1d){var _0x54f43f=_0x114c1d[_0x3a1b('0x1f')],_0x2d6577=_0x169546['offset'],_0x4d7e82=_0x169546[_0x3a1b('0x20')]+_0x169546['limit'],_0x4431f1;if(_0x4d7e82>=_0x54f43f){_0x4d7e82=_0x54f43f;_0x4431f1=0xc8;}else{_0x4431f1=0xce;}_0xe4929e[_0x3a1b('0x1c')](_0x4431f1);return _0xe4929e[_0x3a1b('0x21')]('Content-Range',_0x2d6577+'-'+_0x4d7e82+'/'+_0x54f43f)['json'](_0x114c1d);}return null;};}function patchUpdates(_0x54211f){return function(_0x2bf1bf){try{jsonpatch[_0x3a1b('0x22')](_0x2bf1bf,_0x54211f,!![]);}catch(_0x3c1934){return BPromise[_0x3a1b('0x23')](_0x3c1934);}return _0x2bf1bf[_0x3a1b('0x24')]();};}function saveUpdates(_0x75e394,_0x1bc540){return function(_0x75c43){if(_0x75c43){return _0x75c43[_0x3a1b('0x25')](_0x75e394)[_0x3a1b('0x26')](function(_0x57c15b){return _0x57c15b;});}return null;};}function removeEntity(_0x386ca3,_0x5a74d9){return function(_0x188693){if(_0x188693){return _0x188693[_0x3a1b('0x27')]()['then'](function(){var _0x2714d2=_0x188693[_0x3a1b('0x28')]({'plain':!![]});var _0x584a6f='FaxQueues';return db[_0x3a1b('0x29')][_0x3a1b('0x27')]({'where':{'type':_0x584a6f,'resourceId':_0x2714d2['id']}})[_0x3a1b('0x26')](function(){return _0x188693;});})['then'](function(){_0x386ca3[_0x3a1b('0x1c')](0xcc)[_0x3a1b('0x1d')]();});}};}function handleEntityNotFound(_0x412966,_0x2665db){return function(_0x68bcb7){if(!_0x68bcb7){_0x412966[_0x3a1b('0x1b')](0x194);}return _0x68bcb7;};}function handleError(_0x5e4eb3,_0x3bcaab){_0x3bcaab=_0x3bcaab||0x1f4;return function(_0x564ba4){logger[_0x3a1b('0x2a')](_0x564ba4[_0x3a1b('0x2b')]);if(_0x564ba4[_0x3a1b('0x2c')]){delete _0x564ba4['name'];}_0x5e4eb3['status'](_0x3bcaab)['send'](_0x564ba4);};}exports['index']=function(_0x36a3d5,_0x362048){var _0x19d12a={},_0x3db861={},_0xa15dbe={'count':0x0,'rows':[]};var _0x5a1515=db[_0x3a1b('0x2d')][_0x3a1b('0x2e')];_0x3db861[_0x3a1b('0x2f')]=_['keys'](_0x5a1515);_0x3db861['query']=_[_0x3a1b('0x30')](_0x36a3d5[_0x3a1b('0x31')]);_0x3db861['filters']=_[_0x3a1b('0x32')](_0x3db861[_0x3a1b('0x2f')],_0x3db861['query']);_0x19d12a[_0x3a1b('0x33')]=_[_0x3a1b('0x32')](_0x3db861['model'],qs[_0x3a1b('0x34')](_0x36a3d5[_0x3a1b('0x31')][_0x3a1b('0x34')]));_0x19d12a[_0x3a1b('0x33')]=_0x19d12a[_0x3a1b('0x33')]['length']?_0x19d12a['attributes']:_0x3db861[_0x3a1b('0x2f')];if(!_0x36a3d5[_0x3a1b('0x31')][_0x3a1b('0x35')](_0x3a1b('0x36'))){_0x19d12a[_0x3a1b('0x37')]=qs[_0x3a1b('0x37')](_0x36a3d5[_0x3a1b('0x31')]['limit']);_0x19d12a[_0x3a1b('0x20')]=qs[_0x3a1b('0x20')](_0x36a3d5[_0x3a1b('0x31')]['offset']);}_0x19d12a['order']=qs[_0x3a1b('0x38')](_0x36a3d5[_0x3a1b('0x31')][_0x3a1b('0x38')]);_0x19d12a[_0x3a1b('0x39')]=qs[_0x3a1b('0x3a')](_[_0x3a1b('0x3b')](_0x36a3d5[_0x3a1b('0x31')],_0x3db861[_0x3a1b('0x3a')]));if(_0x36a3d5[_0x3a1b('0x31')]['filter']){_0x19d12a[_0x3a1b('0x39')]=_[_0x3a1b('0x3c')](_0x19d12a[_0x3a1b('0x39')],{'$or':_['map'](_0x5a1515,function(_0x1f8f01){if(_0x1f8f01[_0x3a1b('0x3d')]['key']!==_0x3a1b('0x3e')){var _0xa794c9={};_0xa794c9[_0x1f8f01[_0x3a1b('0x3f')]]={'$like':'%'+_0x36a3d5[_0x3a1b('0x31')][_0x3a1b('0x40')]+'%'};return _0xa794c9;}})});}_0x19d12a=_[_0x3a1b('0x3c')]({},_0x19d12a,_0x36a3d5[_0x3a1b('0x41')]);var _0x15dd6a={'where':_0x19d12a[_0x3a1b('0x39')]};return db[_0x3a1b('0x2d')]['count'](_0x15dd6a)['then'](function(_0xb03950){_0xa15dbe['count']=_0xb03950;if(_0x36a3d5['query'][_0x3a1b('0x42')]){_0x19d12a[_0x3a1b('0x43')]=[{'all':!![]}];}return db['FaxQueue']['findAll'](_0x19d12a);})[_0x3a1b('0x26')](function(_0x46259b){_0xa15dbe[_0x3a1b('0x44')]=_0x46259b;return _0xa15dbe;})[_0x3a1b('0x26')](respondWithFilteredResult(_0x362048,_0x19d12a))['catch'](handleError(_0x362048,null));};exports['show']=function(_0x176f73,_0x10683e){var _0x71a74a={'raw':!![],'where':{'id':_0x176f73['params']['id']}},_0x175481={};_0x175481[_0x3a1b('0x2f')]=_[_0x3a1b('0x30')](db[_0x3a1b('0x2d')][_0x3a1b('0x2e')]);_0x175481['query']=_['keys'](_0x176f73['query']);_0x175481[_0x3a1b('0x3a')]=_['intersection'](_0x175481[_0x3a1b('0x2f')],_0x175481[_0x3a1b('0x31')]);_0x71a74a[_0x3a1b('0x33')]=_[_0x3a1b('0x32')](_0x175481[_0x3a1b('0x2f')],qs[_0x3a1b('0x34')](_0x176f73[_0x3a1b('0x31')]['fields']));_0x71a74a[_0x3a1b('0x33')]=_0x71a74a[_0x3a1b('0x33')]['length']?_0x71a74a[_0x3a1b('0x33')]:_0x175481[_0x3a1b('0x2f')];if(_0x176f73['query'][_0x3a1b('0x42')]){_0x71a74a['include']=[{'all':!![]}];}_0x71a74a=_[_0x3a1b('0x3c')]({},_0x71a74a,_0x176f73['options']);return db['FaxQueue'][_0x3a1b('0x45')](_0x71a74a)['then'](handleEntityNotFound(_0x10683e,null))[_0x3a1b('0x26')](respondWithResult(_0x10683e,null))['catch'](handleError(_0x10683e,null));};exports['create']=function(_0x2adfa5,_0x1e9f3a){return db[_0x3a1b('0x2d')]['create'](_0x2adfa5[_0x3a1b('0x46')],{})['then'](function(_0x15329f){var _0x5b45b8=_0x2adfa5['user'][_0x3a1b('0x28')]({'plain':!![]});if(!_0x5b45b8)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x5b45b8[_0x3a1b('0x47')]==='user'){var _0x4deb80=_0x15329f[_0x3a1b('0x28')]({'plain':!![]});var _0x33a8bb=_0x3a1b('0x48');return db[_0x3a1b('0x49')][_0x3a1b('0x45')]({'where':{'name':_0x33a8bb,'userProfileId':_0x5b45b8['userProfileId']},'raw':!![]})['then'](function(_0x3ffce5){if(_0x3ffce5&&_0x3ffce5[_0x3a1b('0x4a')]===0x0){return db['UserProfileResource'][_0x3a1b('0x4b')]({'name':_0x4deb80['name'],'resourceId':_0x4deb80['id'],'type':_0x3ffce5[_0x3a1b('0x2c')],'sectionId':_0x3ffce5['id']},{})[_0x3a1b('0x26')](function(){return _0x15329f;});}else{return _0x15329f;}})[_0x3a1b('0x4c')](function(_0xd56d7f){logger['error'](_0x3a1b('0x4d'),_0xd56d7f);throw _0xd56d7f;});}return _0x15329f;})[_0x3a1b('0x26')](respondWithResult(_0x1e9f3a,0xc9))[_0x3a1b('0x4c')](handleError(_0x1e9f3a,null));};exports[_0x3a1b('0x25')]=function(_0x3fb728,_0x33b6dc){if(_0x3fb728[_0x3a1b('0x46')]['id']){delete _0x3fb728['body']['id'];}return db['FaxQueue'][_0x3a1b('0x45')]({'where':{'id':_0x3fb728[_0x3a1b('0x4e')]['id']}})[_0x3a1b('0x26')](handleEntityNotFound(_0x33b6dc,null))[_0x3a1b('0x26')](saveUpdates(_0x3fb728[_0x3a1b('0x46')],null))[_0x3a1b('0x26')](respondWithResult(_0x33b6dc,null))['catch'](handleError(_0x33b6dc,null));};exports['destroy']=function(_0x229ca1,_0x52f16e){return db['FaxQueue']['find']({'where':{'id':_0x229ca1[_0x3a1b('0x4e')]['id']}})[_0x3a1b('0x26')](handleEntityNotFound(_0x52f16e,null))[_0x3a1b('0x26')](removeEntity(_0x52f16e,null))[_0x3a1b('0x4c')](handleError(_0x52f16e,null));};exports[_0x3a1b('0x4f')]=function(_0x5079db,_0x4db1a3){return db[_0x3a1b('0x2d')]['describe']()[_0x3a1b('0x26')](respondWithResult(_0x4db1a3,null))[_0x3a1b('0x4c')](handleError(_0x4db1a3,null));};exports[_0x3a1b('0x50')]=function(_0x60bf8d,_0xcc7ec,_0x7c2379){var _0x284030={'raw':!![],'where':{}},_0x39c706={},_0x246fdb;return db[_0x3a1b('0x2d')]['findOne']({'where':{'id':_0x60bf8d[_0x3a1b('0x4e')]['id']}})['then'](handleEntityNotFound(_0xcc7ec,null))[_0x3a1b('0x26')](function(_0x2aaeaa){if(_0x2aaeaa){_0x246fdb=_0x2aaeaa['get']({'plain':!![]});_0x39c706[_0x3a1b('0x2f')]=_[_0x3a1b('0x30')](db[_0x3a1b('0x51')]['rawAttributes']);_0x39c706[_0x3a1b('0x31')]=_[_0x3a1b('0x30')](_0x60bf8d[_0x3a1b('0x31')]);_0x39c706[_0x3a1b('0x3a')]=_[_0x3a1b('0x32')](_0x39c706['model'],_0x39c706[_0x3a1b('0x31')]);_0x284030[_0x3a1b('0x33')]=_[_0x3a1b('0x32')](_0x39c706[_0x3a1b('0x2f')],qs[_0x3a1b('0x34')](_0x60bf8d[_0x3a1b('0x31')][_0x3a1b('0x34')]));_0x284030['attributes']=_0x284030[_0x3a1b('0x33')][_0x3a1b('0x52')]?_0x284030[_0x3a1b('0x33')]:_0x39c706[_0x3a1b('0x2f')];if(!_0x60bf8d[_0x3a1b('0x31')][_0x3a1b('0x35')](_0x3a1b('0x36'))){_0x284030[_0x3a1b('0x37')]=qs[_0x3a1b('0x37')](_0x60bf8d[_0x3a1b('0x31')]['limit']);_0x284030[_0x3a1b('0x20')]=qs[_0x3a1b('0x20')](_0x60bf8d[_0x3a1b('0x31')]['offset']);}_0x284030[_0x3a1b('0x53')]=qs['sort'](_0x60bf8d['query'][_0x3a1b('0x38')]);_0x284030[_0x3a1b('0x39')]=qs[_0x3a1b('0x3a')](_[_0x3a1b('0x3b')](_0x60bf8d['query'],_0x39c706[_0x3a1b('0x3a')]));_0x284030[_0x3a1b('0x39')]['FaxQueueId']=_0x2aaeaa['id'];if(_0x60bf8d['query'][_0x3a1b('0x40')]){_0x284030[_0x3a1b('0x39')]=_[_0x3a1b('0x3c')](_0x284030[_0x3a1b('0x39')],{'$or':_[_0x3a1b('0x54')](_0x284030[_0x3a1b('0x33')],function(_0x5d2e0c){var _0x47a2ea={};_0x47a2ea[_0x5d2e0c]={'$like':'%'+_0x60bf8d[_0x3a1b('0x31')][_0x3a1b('0x40')]+'%'};return _0x47a2ea;})});}_0x284030=_['merge']({},_0x284030,_0x60bf8d['options']);return db['UserFaxQueue'][_0x3a1b('0x55')](_0x284030);}})['then'](function(_0x39c9d0){if(_0x39c9d0){return db[_0x3a1b('0x56')][_0x3a1b('0x57')]({'where':{'id':_[_0x3a1b('0x54')](_0x39c9d0,_0x3a1b('0x58')),'role':_0x3a1b('0x59')},'attributes':['id',_0x3a1b('0x2c'),_0x3a1b('0x5a'),'updatedAt','createdAt']});}})[_0x3a1b('0x26')](function(_0x457f68){if(_0x457f68){return{'count':_0x457f68[_0x3a1b('0x1f')],'rows':_['map'](_0x457f68[_0x3a1b('0x44')],function(_0x1456ed){return{'membername':_0x1456ed[_0x3a1b('0x2c')],'UserId':_0x1456ed['id'],'queue_name':_0x246fdb[_0x3a1b('0x2c')],'FaxQueueId':_0x246fdb['id'],'interface':util['format'](_0x3a1b('0x5b'),_0x3a1b('0x5c'),_0x1456ed[_0x3a1b('0x2c')]),'penalty':0x0,'paused':_0x1456ed[_0x3a1b('0x5a')],'createdAt':_0x1456ed['createdAt'],'updatedAt':_0x1456ed[_0x3a1b('0x5d')]};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0xcc7ec,_0x284030))[_0x3a1b('0x4c')](handleError(_0xcc7ec,null));};exports[_0x3a1b('0x5e')]=function(_0x1caf11,_0x4fe194,_0x2c57a6){var _0x5685c1={};var _0x2a1dff={};var _0x32d62c;var _0x5ccd03;return db[_0x3a1b('0x2d')][_0x3a1b('0x5f')]({'where':{'id':_0x1caf11[_0x3a1b('0x4e')]['id']}})[_0x3a1b('0x26')](handleEntityNotFound(_0x4fe194,null))['then'](function(_0xabe784){if(_0xabe784){_0x32d62c=_0xabe784;_0x2a1dff[_0x3a1b('0x2f')]=_[_0x3a1b('0x30')](db[_0x3a1b('0x60')][_0x3a1b('0x2e')]);_0x2a1dff[_0x3a1b('0x31')]=_[_0x3a1b('0x30')](_0x1caf11[_0x3a1b('0x31')]);_0x2a1dff[_0x3a1b('0x3a')]=_[_0x3a1b('0x32')](_0x2a1dff[_0x3a1b('0x2f')],_0x2a1dff[_0x3a1b('0x31')]);_0x5685c1[_0x3a1b('0x33')]=_['intersection'](_0x2a1dff[_0x3a1b('0x2f')],qs['fields'](_0x1caf11['query'][_0x3a1b('0x34')]));_0x5685c1[_0x3a1b('0x33')]=_0x5685c1[_0x3a1b('0x33')][_0x3a1b('0x52')]?_0x5685c1[_0x3a1b('0x33')]:_0x2a1dff[_0x3a1b('0x2f')];_0x5685c1[_0x3a1b('0x53')]=qs[_0x3a1b('0x38')](_0x1caf11[_0x3a1b('0x31')][_0x3a1b('0x38')]);_0x5685c1[_0x3a1b('0x39')]=qs[_0x3a1b('0x3a')](_['pick'](_0x1caf11[_0x3a1b('0x31')],_0x2a1dff[_0x3a1b('0x3a')]));if(_0x1caf11[_0x3a1b('0x31')][_0x3a1b('0x40')]){_0x5685c1[_0x3a1b('0x39')]=_[_0x3a1b('0x3c')](_0x5685c1[_0x3a1b('0x39')],{'$or':_[_0x3a1b('0x54')](_0x5685c1[_0x3a1b('0x33')],function(_0x1b55e0){var _0x4b50a9={};_0x4b50a9[_0x1b55e0]={'$like':'%'+_0x1caf11['query']['filter']+'%'};return _0x4b50a9;})});}_0x5685c1=_['merge']({},_0x5685c1,_0x1caf11[_0x3a1b('0x41')]);return _0x32d62c[_0x3a1b('0x5e')](_0x5685c1);}})[_0x3a1b('0x26')](function(_0x326f1f){if(_0x326f1f){_0x5ccd03=_0x326f1f[_0x3a1b('0x52')];if(!_0x1caf11[_0x3a1b('0x31')][_0x3a1b('0x35')]('nolimit')){_0x5685c1[_0x3a1b('0x37')]=qs[_0x3a1b('0x37')](_0x1caf11[_0x3a1b('0x31')][_0x3a1b('0x37')]);_0x5685c1[_0x3a1b('0x20')]=qs[_0x3a1b('0x20')](_0x1caf11[_0x3a1b('0x31')][_0x3a1b('0x20')]);}return _0x32d62c[_0x3a1b('0x5e')](_0x5685c1);}})[_0x3a1b('0x26')](function(_0x145035){if(_0x145035){return _0x145035?{'count':_0x5ccd03,'rows':_0x145035}:null;}})[_0x3a1b('0x26')](respondWithResult(_0x4fe194,null))[_0x3a1b('0x4c')](handleError(_0x4fe194,null));};exports[_0x3a1b('0x61')]=function(_0x5b485d,_0x30037e,_0xeb454e){var _0x2f7cff=_0x5b485d['body'][_0x3a1b('0x62')];return db[_0x3a1b('0x60')]['findAll']({'where':{'id':_[_0x3a1b('0x54')](_0x2f7cff,'id')},'attributes':['id'],'include':[{'model':db['User'],'as':'Agents','attributes':['id',_0x3a1b('0x2c'),_0x3a1b('0x63'),_0x3a1b('0x64'),'interface'],'raw':!![]}]})[_0x3a1b('0x26')](function(_0x5d901f){if(_0x5d901f){var _0x7cf7c1=_[_0x3a1b('0x65')](_0x5d901f,function(_0x44180e){var _0x3c6586=_0x44180e[_0x3a1b('0x28')]({'plain':!![]});return _0x3c6586[_0x3a1b('0x66')];});return db[_0x3a1b('0x2d')][_0x3a1b('0x45')]({'where':{'id':_0x5b485d[_0x3a1b('0x4e')]['id']}})[_0x3a1b('0x26')](function(_0x23e4ba){return db['sequelize'][_0x3a1b('0x67')](function(_0x46dae3){return _0x23e4ba[_0x3a1b('0x61')](_[_0x3a1b('0x54')](_0x2f7cff,'id'),{'transaction':_0x46dae3})['then'](function(){return BPromise[_0x3a1b('0x68')](_0x7cf7c1,function(_0x1b3f90){return db[_0x3a1b('0x51')][_0x3a1b('0x69')]({'where':{'UserId':_0x1b3f90['id'],'FaxQueueId':_0x5b485d[_0x3a1b('0x4e')]['id']},'transaction':_0x46dae3});});})[_0x3a1b('0x26')](function(){_0x7cf7c1[_0x3a1b('0x6a')](function(_0x457205){socket[_0x3a1b('0x6b')](_0x3a1b('0x6c'),{'UserId':_0x457205['id'],'FaxQueueId':_0x23e4ba['id']});});});});});}})[_0x3a1b('0x26')](respondWithStatusCode(_0x30037e,null))[_0x3a1b('0x4c')](handleError(_0x30037e,null));};exports[_0x3a1b('0x6d')]=function(_0x5a33a7,_0x34719f,_0x2670e4){return db[_0x3a1b('0x60')]['findAll']({'where':{'id':_0x5a33a7[_0x3a1b('0x31')]['ids']},'attributes':['id'],'include':[{'model':db[_0x3a1b('0x56')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x3a1b('0x26')](handleEntityNotFound(_0x34719f,null))[_0x3a1b('0x26')](function(_0x2fed78){var _0x2b0bfc=_[_0x3a1b('0x54')](_0x2fed78,'id');var _0x273978=[];var _0x5dd265=[];var _0x2d3eda=squel[_0x3a1b('0x6e')]();_0x2d3eda['field']('tq.TeamId')[_0x3a1b('0x6f')]('team_has_fax_queues','tq')[_0x3a1b('0x70')]('user_has_teams','ut',_0x3a1b('0x71'))[_0x3a1b('0x39')]('FaxQueueId\x20=\x20?',_0x5a33a7[_0x3a1b('0x4e')]['id']);for(var _0x16667=0x0;_0x16667<_0x2fed78[_0x3a1b('0x52')];_0x16667+=0x1){let _0xd7ffc2=_0x2fed78[_0x16667];for(var _0x4e25da=0x0;_0x4e25da<_0xd7ffc2['Agents'][_0x3a1b('0x52')];_0x4e25da+=0x1){let _0x240a6d=_0xd7ffc2[_0x3a1b('0x66')][_0x4e25da];var _0x45e1a9=_0x2d3eda['clone']();_0x45e1a9[_0x3a1b('0x39')](_0x3a1b('0x72'),_0x240a6d['id']);_0x5dd265[_0x3a1b('0x73')](db[_0x3a1b('0x74')]['query'](_0x45e1a9['toString'](),{'type':db[_0x3a1b('0x74')][_0x3a1b('0x75')][_0x3a1b('0x76')]})['then'](function(_0x3519bb){if(_0x3519bb[_0x3a1b('0x52')]===0x1){return _0x240a6d['id'];}else{var _0x42ad13=_[_0x3a1b('0x77')](_[_0x3a1b('0x54')](_0x3519bb,_0x3a1b('0x78')),function(_0x1ea7bd){return _[_0x3a1b('0x79')](_0x2b0bfc,_0x1ea7bd);});if(_0x42ad13){return _0x240a6d['id'];}}}));}}return BPromise[_0x3a1b('0x7a')](_0x5dd265)[_0x3a1b('0x26')](function(_0x23ce21){_0x273978=_(_0x273978)[_0x3a1b('0x7b')](_0x23ce21)['compact']()[_0x3a1b('0x7c')]();return db[_0x3a1b('0x2d')][_0x3a1b('0x45')]({'where':{'id':_0x5a33a7[_0x3a1b('0x4e')]['id']}})['then'](function(_0x1c21b5){return db[_0x3a1b('0x74')][_0x3a1b('0x67')](function(_0x2c9565){return _0x1c21b5[_0x3a1b('0x6d')](_0x5a33a7[_0x3a1b('0x31')][_0x3a1b('0x7d')],{'transaction':_0x2c9565})['then'](function(){if(!_[_0x3a1b('0x7e')](_0x273978)){return _0x1c21b5[_0x3a1b('0x7f')](_0x273978,{'transaction':_0x2c9565});}})[_0x3a1b('0x26')](function(){_0x273978[_0x3a1b('0x6a')](function(_0x5dc1ee){socket['emit']('userFaxQueue:remove',{'UserId':_0x5dc1ee,'FaxQueueId':_0x1c21b5['id']});});});});});});})[_0x3a1b('0x26')](respondWithStatusCode(_0x34719f,null))[_0x3a1b('0x4c')](handleError(_0x34719f,null));};exports[_0x3a1b('0x80')]=function(_0x5d4351,_0x3a839c,_0xaf9441){return db[_0x3a1b('0x2d')][_0x3a1b('0x45')]({'where':{'id':_0x5d4351[_0x3a1b('0x4e')]['id']}})[_0x3a1b('0x26')](handleEntityNotFound(_0x3a839c,null))['then'](function(_0x3573b0){if(_0x3573b0){return _0x3573b0[_0x3a1b('0x80')](_0x5d4351[_0x3a1b('0x46')]['ids'],_[_0x3a1b('0x81')](_0x5d4351['body'],[_0x3a1b('0x7d'),'id'])||{})[_0x3a1b('0x82')](function(_0x11324b){for(var _0x2fd500=0x0;_0x2fd500<_0x5d4351[_0x3a1b('0x46')][_0x3a1b('0x7d')]['length'];_0x2fd500+=0x1){socket['emit']('userFaxQueue:save',{'UserId':_0x5d4351[_0x3a1b('0x46')]['ids'][_0x2fd500],'FaxQueueId':_0x5d4351[_0x3a1b('0x4e')]['id']});}return _0x11324b;});}})['then'](respondWithResult(_0x3a839c,null))['catch'](handleError(_0x3a839c,null));};exports['removeAgents']=function(_0x35da08,_0x5a9a11,_0x5762bc){return db['FaxQueue'][_0x3a1b('0x45')]({'where':{'id':_0x35da08[_0x3a1b('0x4e')]['id']}})[_0x3a1b('0x26')](handleEntityNotFound(_0x5a9a11,null))[_0x3a1b('0x26')](function(_0x4e334c){if(_0x4e334c){return _0x4e334c['removeAgents'](_0x35da08[_0x3a1b('0x31')]['ids'])[_0x3a1b('0x26')](function(){if(_['isArray'](_0x35da08[_0x3a1b('0x31')][_0x3a1b('0x7d')])){for(var _0x5eaa85=0x0;_0x5eaa85<_0x35da08[_0x3a1b('0x31')][_0x3a1b('0x7d')][_0x3a1b('0x52')];_0x5eaa85+=0x1){socket['emit'](_0x3a1b('0x83'),{'UserId':Number(_0x35da08[_0x3a1b('0x31')][_0x3a1b('0x7d')][_0x5eaa85]),'FaxQueueId':Number(_0x35da08[_0x3a1b('0x4e')]['id'])});}}else{socket[_0x3a1b('0x6b')](_0x3a1b('0x83'),{'UserId':Number(_0x35da08[_0x3a1b('0x31')]['ids']),'FaxQueueId':Number(_0x35da08[_0x3a1b('0x4e')]['id'])});}});}})[_0x3a1b('0x26')](respondWithStatusCode(_0x5a9a11,null))[_0x3a1b('0x4c')](handleError(_0x5a9a11,null));};exports[_0x3a1b('0x84')]=function(_0x270cc3,_0x493817,_0x9577d0){var _0x294453={};var _0x52540e={};var _0x4f3c32;var _0x567ebb;return db[_0x3a1b('0x2d')]['findOne']({'where':{'id':_0x270cc3['params']['id']}})['then'](handleEntityNotFound(_0x493817,null))[_0x3a1b('0x26')](function(_0x22c607){if(_0x22c607){_0x4f3c32=_0x22c607;_0x52540e[_0x3a1b('0x2f')]=_['keys'](db['User'][_0x3a1b('0x2e')]);_0x52540e['query']=_[_0x3a1b('0x30')](_0x270cc3[_0x3a1b('0x31')]);_0x52540e[_0x3a1b('0x3a')]=_['intersection'](_0x52540e[_0x3a1b('0x2f')],_0x52540e[_0x3a1b('0x31')]);_0x294453['attributes']=_[_0x3a1b('0x32')](_0x52540e[_0x3a1b('0x2f')],qs['fields'](_0x270cc3[_0x3a1b('0x31')][_0x3a1b('0x34')]));_0x294453['attributes']=_0x294453['attributes'][_0x3a1b('0x52')]?_0x294453[_0x3a1b('0x33')]:_0x52540e[_0x3a1b('0x2f')];_0x294453['order']=qs[_0x3a1b('0x38')](_0x270cc3[_0x3a1b('0x31')][_0x3a1b('0x38')]);_0x294453[_0x3a1b('0x39')]=qs[_0x3a1b('0x3a')](_[_0x3a1b('0x3b')](_0x270cc3[_0x3a1b('0x31')],_0x52540e[_0x3a1b('0x3a')]));if(_0x270cc3[_0x3a1b('0x31')][_0x3a1b('0x40')]){_0x294453[_0x3a1b('0x39')]=_[_0x3a1b('0x3c')](_0x294453[_0x3a1b('0x39')],{'$or':_[_0x3a1b('0x54')](_0x294453[_0x3a1b('0x33')],function(_0xdbd886){var _0x2caf36={};_0x2caf36[_0xdbd886]={'$like':'%'+_0x270cc3[_0x3a1b('0x31')][_0x3a1b('0x40')]+'%'};return _0x2caf36;})});}_0x294453=_['merge']({},_0x294453,_0x270cc3['options']);return _0x4f3c32[_0x3a1b('0x84')](_0x294453);}})[_0x3a1b('0x26')](function(_0x9a2275){if(_0x9a2275){_0x567ebb=_0x9a2275[_0x3a1b('0x52')];if(!_0x270cc3[_0x3a1b('0x31')][_0x3a1b('0x35')](_0x3a1b('0x36'))){_0x294453['limit']=qs[_0x3a1b('0x37')](_0x270cc3[_0x3a1b('0x31')][_0x3a1b('0x37')]);_0x294453[_0x3a1b('0x20')]=qs[_0x3a1b('0x20')](_0x270cc3['query'][_0x3a1b('0x20')]);}return _0x4f3c32[_0x3a1b('0x84')](_0x294453);}})[_0x3a1b('0x26')](function(_0x3f3c5d){if(_0x3f3c5d){return _0x3f3c5d?{'count':_0x567ebb,'rows':_0x3f3c5d}:null;}})[_0x3a1b('0x26')](respondWithResult(_0x493817,null))[_0x3a1b('0x4c')](handleError(_0x493817,null));};
\ No newline at end of file
index c0de82f..5320be4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2750=['remove','emit','hasOwnProperty','hook','exports','events','FaxQueue','setMaxListeners','save','update'];(function(_0x3e2220,_0x4aa138){var _0x39d81c=function(_0x262015){while(--_0x262015){_0x3e2220['push'](_0x3e2220['shift']());}};_0x39d81c(++_0x4aa138);}(_0x2750,0x13b));var _0x0275=function(_0x13439d,_0x4bda64){_0x13439d=_0x13439d-0x0;var _0x425230=_0x2750[_0x13439d];return _0x425230;};'use strict';var EventEmitter=require(_0x0275('0x0'));var FaxQueue=require('../../mysqldb')['db'][_0x0275('0x1')];var FaxQueueEvents=new EventEmitter();FaxQueueEvents[_0x0275('0x2')](0x0);var events={'afterCreate':_0x0275('0x3'),'afterUpdate':_0x0275('0x4'),'afterDestroy':_0x0275('0x5')};function emitEvent(_0x41ec06){return function(_0x20273d,_0x4960,_0x3d0c9c){FaxQueueEvents[_0x0275('0x6')](_0x41ec06+':'+_0x20273d['id'],_0x20273d);FaxQueueEvents['emit'](_0x41ec06,_0x20273d);_0x3d0c9c(null);};}for(var e in events){if(events[_0x0275('0x7')](e)){var event=events[e];FaxQueue[_0x0275('0x8')](e,emitEvent(event));}}module[_0x0275('0x9')]=FaxQueueEvents;
\ No newline at end of file
+var _0x3c81=['hook','exports','events','../../mysqldb','setMaxListeners','save','emit','hasOwnProperty'];(function(_0x5ce4e3,_0x42cb9a){var _0x42248f=function(_0x22ab0f){while(--_0x22ab0f){_0x5ce4e3['push'](_0x5ce4e3['shift']());}};_0x42248f(++_0x42cb9a);}(_0x3c81,0x102));var _0x13c8=function(_0x36ba67,_0xa84137){_0x36ba67=_0x36ba67-0x0;var _0x316509=_0x3c81[_0x36ba67];return _0x316509;};'use strict';var EventEmitter=require(_0x13c8('0x0'));var FaxQueue=require(_0x13c8('0x1'))['db']['FaxQueue'];var FaxQueueEvents=new EventEmitter();FaxQueueEvents[_0x13c8('0x2')](0x0);var events={'afterCreate':_0x13c8('0x3'),'afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x5c3ba4){return function(_0x548599,_0x101d4f,_0x3ec886){FaxQueueEvents[_0x13c8('0x4')](_0x5c3ba4+':'+_0x548599['id'],_0x548599);FaxQueueEvents[_0x13c8('0x4')](_0x5c3ba4,_0x548599);_0x3ec886(null);};}for(var e in events){if(events[_0x13c8('0x5')](e)){var event=events[e];FaxQueue[_0x13c8('0x6')](e,emitEvent(event));}}module[_0x13c8('0x7')]=FaxQueueEvents;
\ No newline at end of file
index 67ba6ff..c084fca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b0e=['path','rimraf','../../config/environment','./faxQueue.attributes','exports','define','lodash','../../config/logger','moment','bluebird','request-promise'];(function(_0x367760,_0x351f4e){var _0x5678d1=function(_0x4c6a58){while(--_0x4c6a58){_0x367760['push'](_0x367760['shift']());}};_0x5678d1(++_0x351f4e);}(_0x0b0e,0x187));var _0xe0b0=function(_0x1dab5f,_0x10cd21){_0x1dab5f=_0x1dab5f-0x0;var _0x40c2f3=_0x0b0e[_0x1dab5f];return _0x40c2f3;};'use strict';var _=require(_0xe0b0('0x0'));var util=require('util');var logger=require(_0xe0b0('0x1'))('api');var moment=require(_0xe0b0('0x2'));var BPromise=require(_0xe0b0('0x3'));var rp=require(_0xe0b0('0x4'));var fs=require('fs');var path=require(_0xe0b0('0x5'));var rimraf=require(_0xe0b0('0x6'));var config=require(_0xe0b0('0x7'));var attributes=require(_0xe0b0('0x8'));module[_0xe0b0('0x9')]=function(_0x30e20d,_0x28e40f){return _0x30e20d[_0xe0b0('0xa')]('FaxQueue',attributes,{'tableName':'fax_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xadb5=['bluebird','path','rimraf','../../config/environment','exports','define','FaxQueue','fax_queues','util','api','moment'];(function(_0x3513ac,_0x36d578){var _0x1697a5=function(_0x8febf1){while(--_0x8febf1){_0x3513ac['push'](_0x3513ac['shift']());}};_0x1697a5(++_0x36d578);}(_0xadb5,0xad));var _0x5adb=function(_0x3f0d6d,_0x387bd3){_0x3f0d6d=_0x3f0d6d-0x0;var _0x344d61=_0xadb5[_0x3f0d6d];return _0x344d61;};'use strict';var _=require('lodash');var util=require(_0x5adb('0x0'));var logger=require('../../config/logger')(_0x5adb('0x1'));var moment=require(_0x5adb('0x2'));var BPromise=require(_0x5adb('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x5adb('0x4'));var rimraf=require(_0x5adb('0x5'));var config=require(_0x5adb('0x6'));var attributes=require('./faxQueue.attributes');module[_0x5adb('0x7')]=function(_0x168d89,_0x3e2555){return _0x168d89[_0x5adb('0x8')](_0x5adb('0x9'),attributes,{'tableName':_0x5adb('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6ce54df..b22fb17 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x61b3=['client','http','defaults','localhost','redis','request','FaxQueue,\x20%s,\x20%s','request\x20sent','debug','FaxQueue,\x20%s,\x20%s,\x20%s','error','message','info','result','catch','FaxQueue','options','raw','where','attributes','limit','map','include','model','then','GetFaxQueue','ShowFaxQueue','find','lodash','util','moment','ioredis','rpc','../../config/environment','jayson/promise'];(function(_0x1103ba,_0x30c827){var _0x69063d=function(_0x4f0f71){while(--_0x4f0f71){_0x1103ba['push'](_0x1103ba['shift']());}};_0x69063d(++_0x30c827);}(_0x61b3,0x1e3));var _0x361b=function(_0x3daea4,_0x6f3fa0){_0x3daea4=_0x3daea4-0x0;var _0x359dbb=_0x61b3[_0x3daea4];return _0x359dbb;};'use strict';var _=require(_0x361b('0x0'));var util=require(_0x361b('0x1'));var moment=require(_0x361b('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x361b('0x3'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x361b('0x4'));var config=require(_0x361b('0x5'));var jayson=require(_0x361b('0x6'));var client=jayson[_0x361b('0x7')][_0x361b('0x8')]({'port':0x232a});config['redis']=_[_0x361b('0x9')](config['redis'],{'host':_0x361b('0xa'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x361b('0xb')]));require('./faxQueue.socket')['register'](socket);function respondWithRpcPromise(_0x4daad5,_0x398299,_0x3ca4b2){return new BPromise(function(_0x3e0681,_0x44e4d7){return client[_0x361b('0xc')](_0x4daad5,_0x3ca4b2)['then'](function(_0x38633a){logger['info'](_0x361b('0xd'),_0x398299,_0x361b('0xe'));logger[_0x361b('0xf')](_0x361b('0x10'),_0x398299,_0x361b('0xe'),JSON['stringify'](_0x38633a));if(_0x38633a[_0x361b('0x11')]){if(_0x38633a[_0x361b('0x11')]['code']===0x1f4){logger[_0x361b('0x11')](_0x361b('0xd'),_0x398299,_0x38633a[_0x361b('0x11')][_0x361b('0x12')]);return _0x44e4d7(_0x38633a[_0x361b('0x11')][_0x361b('0x12')]);}logger[_0x361b('0x11')](_0x361b('0xd'),_0x398299,_0x38633a[_0x361b('0x11')][_0x361b('0x12')]);return _0x3e0681(_0x38633a[_0x361b('0x11')]['message']);}else{logger[_0x361b('0x13')](_0x361b('0xd'),_0x398299,_0x361b('0xe'));_0x3e0681(_0x38633a[_0x361b('0x14')][_0x361b('0x12')]);}})[_0x361b('0x15')](function(_0x4be54e){logger[_0x361b('0x11')](_0x361b('0xd'),_0x398299,_0x4be54e);_0x44e4d7(_0x4be54e);});});}exports['GetFaxQueue']=function(_0xb72777){var _0x25290c=this;return new Promise(function(_0x52ed7a,_0x3f55fb){return db[_0x361b('0x16')]['findAll']({'raw':_0xb72777[_0x361b('0x17')]?_0xb72777['options'][_0x361b('0x18')]===undefined?!![]:![]:!![],'where':_0xb72777[_0x361b('0x17')]?_0xb72777[_0x361b('0x17')][_0x361b('0x19')]||null:null,'attributes':_0xb72777[_0x361b('0x17')]?_0xb72777[_0x361b('0x17')][_0x361b('0x1a')]||null:null,'limit':_0xb72777['options']?_0xb72777['options'][_0x361b('0x1b')]||null:null,'include':_0xb72777[_0x361b('0x17')]?_0xb72777[_0x361b('0x17')]['include']?_[_0x361b('0x1c')](_0xb72777['options'][_0x361b('0x1d')],function(_0x37d092){return{'model':db[_0x37d092[_0x361b('0x1e')]],'as':_0x37d092['as'],'attributes':_0x37d092[_0x361b('0x1a')],'include':_0x37d092[_0x361b('0x1d')]?_[_0x361b('0x1c')](_0x37d092[_0x361b('0x1d')],function(_0x83f809){return{'model':db[_0x83f809['model']],'as':_0x83f809['as'],'attributes':_0x83f809['attributes'],'include':_0x83f809[_0x361b('0x1d')]?_[_0x361b('0x1c')](_0x83f809['include'],function(_0x2add9f){return{'model':db[_0x2add9f['model']],'as':_0x2add9f['as'],'attributes':_0x2add9f[_0x361b('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x361b('0x1f')](function(_0x507aa3){logger[_0x361b('0x13')](_0x361b('0x20'),_0xb72777);logger['debug'](_0x361b('0x20'),_0xb72777,JSON['stringify'](_0x507aa3));_0x52ed7a(_0x507aa3);})[_0x361b('0x15')](function(_0x8e00aa){logger[_0x361b('0x11')](_0x361b('0x20'),_0x8e00aa[_0x361b('0x12')],_0xb72777);_0x3f55fb(_0x25290c[_0x361b('0x11')](0x1f4,_0x8e00aa[_0x361b('0x12')]));});});};exports[_0x361b('0x21')]=function(_0x1dfc48){var _0xfb2093=this;return new Promise(function(_0x594a51,_0x4936eb){return db['FaxQueue'][_0x361b('0x22')]({'raw':_0x1dfc48[_0x361b('0x17')]?_0x1dfc48['options'][_0x361b('0x18')]===undefined?!![]:![]:!![],'where':_0x1dfc48['options']?_0x1dfc48[_0x361b('0x17')][_0x361b('0x19')]||null:null,'attributes':_0x1dfc48[_0x361b('0x17')]?_0x1dfc48[_0x361b('0x17')][_0x361b('0x1a')]||null:null,'include':_0x1dfc48[_0x361b('0x17')]?_0x1dfc48[_0x361b('0x17')][_0x361b('0x1d')]?_['map'](_0x1dfc48[_0x361b('0x17')][_0x361b('0x1d')],function(_0xea8562){return{'model':db[_0xea8562[_0x361b('0x1e')]],'as':_0xea8562['as'],'attributes':_0xea8562[_0x361b('0x1a')],'include':_0xea8562['include']?_['map'](_0xea8562['include'],function(_0x35209d){return{'model':db[_0x35209d[_0x361b('0x1e')]],'as':_0x35209d['as'],'attributes':_0x35209d[_0x361b('0x1a')],'include':_0x35209d['include']?_[_0x361b('0x1c')](_0x35209d['include'],function(_0x2d48ec){return{'model':db[_0x2d48ec[_0x361b('0x1e')]],'as':_0x2d48ec['as'],'attributes':_0x2d48ec[_0x361b('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x361b('0x1f')](function(_0x396198){logger[_0x361b('0x13')](_0x361b('0x21'),_0x1dfc48);logger[_0x361b('0xf')](_0x361b('0x21'),_0x1dfc48,JSON['stringify'](_0x396198));_0x594a51(_0x396198);})[_0x361b('0x15')](function(_0xd4941f){logger['error'](_0x361b('0x21'),_0xd4941f['message'],_0x1dfc48);_0x4936eb(_0xfb2093[_0x361b('0x11')](0x1f4,_0xd4941f['message']));});});};
\ No newline at end of file
+var _0xd85c=['redis','socket.io-emitter','./faxQueue.socket','request','info','FaxQueue,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','FaxQueue','findAll','options','where','attributes','include','map','model','then','GetFaxQueue','ShowFaxQueue','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http'];(function(_0x4d008b,_0x5a5532){var _0x2432d0=function(_0x126a05){while(--_0x126a05){_0x4d008b['push'](_0x4d008b['shift']());}};_0x2432d0(++_0x5a5532);}(_0xd85c,0x123));var _0xcd85=function(_0x15cf23,_0x4f90d5){_0x15cf23=_0x15cf23-0x0;var _0x19cf58=_0xd85c[_0x15cf23];return _0x19cf58;};'use strict';var _=require(_0xcd85('0x0'));var util=require(_0xcd85('0x1'));var moment=require(_0xcd85('0x2'));var BPromise=require(_0xcd85('0x3'));var rs=require(_0xcd85('0x4'));var fs=require('fs');var Redis=require(_0xcd85('0x5'));var db=require(_0xcd85('0x6'))['db'];var utils=require(_0xcd85('0x7'));var logger=require(_0xcd85('0x8'))(_0xcd85('0x9'));var config=require(_0xcd85('0xa'));var jayson=require(_0xcd85('0xb'));var client=jayson['client'][_0xcd85('0xc')]({'port':0x232a});config['redis']=_['defaults'](config[_0xcd85('0xd')],{'host':'localhost','port':0x18eb});var socket=require(_0xcd85('0xe'))(new Redis(config[_0xcd85('0xd')]));require(_0xcd85('0xf'))['register'](socket);function respondWithRpcPromise(_0x1b8df5,_0xfeb50b,_0x3a8feb){return new BPromise(function(_0x1967bf,_0x46d527){return client[_0xcd85('0x10')](_0x1b8df5,_0x3a8feb)['then'](function(_0x45efed){logger[_0xcd85('0x11')](_0xcd85('0x12'),_0xfeb50b,_0xcd85('0x13'));logger[_0xcd85('0x14')]('FaxQueue,\x20%s,\x20%s,\x20%s',_0xfeb50b,'request\x20sent',JSON[_0xcd85('0x15')](_0x45efed));if(_0x45efed['error']){if(_0x45efed[_0xcd85('0x16')][_0xcd85('0x17')]===0x1f4){logger[_0xcd85('0x16')](_0xcd85('0x12'),_0xfeb50b,_0x45efed[_0xcd85('0x16')]['message']);return _0x46d527(_0x45efed[_0xcd85('0x16')]['message']);}logger[_0xcd85('0x16')]('FaxQueue,\x20%s,\x20%s',_0xfeb50b,_0x45efed[_0xcd85('0x16')][_0xcd85('0x18')]);return _0x1967bf(_0x45efed[_0xcd85('0x16')][_0xcd85('0x18')]);}else{logger['info'](_0xcd85('0x12'),_0xfeb50b,_0xcd85('0x13'));_0x1967bf(_0x45efed[_0xcd85('0x19')]['message']);}})[_0xcd85('0x1a')](function(_0x142283){logger[_0xcd85('0x16')](_0xcd85('0x12'),_0xfeb50b,_0x142283);_0x46d527(_0x142283);});});}exports['GetFaxQueue']=function(_0x3117cc){var _0x578f93=this;return new Promise(function(_0x42c541,_0x11ad0c){return db[_0xcd85('0x1b')][_0xcd85('0x1c')]({'raw':_0x3117cc[_0xcd85('0x1d')]?_0x3117cc['options']['raw']===undefined?!![]:![]:!![],'where':_0x3117cc[_0xcd85('0x1d')]?_0x3117cc['options'][_0xcd85('0x1e')]||null:null,'attributes':_0x3117cc[_0xcd85('0x1d')]?_0x3117cc[_0xcd85('0x1d')][_0xcd85('0x1f')]||null:null,'limit':_0x3117cc[_0xcd85('0x1d')]?_0x3117cc[_0xcd85('0x1d')]['limit']||null:null,'include':_0x3117cc[_0xcd85('0x1d')]?_0x3117cc[_0xcd85('0x1d')][_0xcd85('0x20')]?_[_0xcd85('0x21')](_0x3117cc['options']['include'],function(_0x2a5590){return{'model':db[_0x2a5590[_0xcd85('0x22')]],'as':_0x2a5590['as'],'attributes':_0x2a5590[_0xcd85('0x1f')],'include':_0x2a5590[_0xcd85('0x20')]?_[_0xcd85('0x21')](_0x2a5590[_0xcd85('0x20')],function(_0x3d3059){return{'model':db[_0x3d3059['model']],'as':_0x3d3059['as'],'attributes':_0x3d3059[_0xcd85('0x1f')],'include':_0x3d3059[_0xcd85('0x20')]?_['map'](_0x3d3059[_0xcd85('0x20')],function(_0x351bd9){return{'model':db[_0x351bd9[_0xcd85('0x22')]],'as':_0x351bd9['as'],'attributes':_0x351bd9['attributes']};}):[]};}):[]};}):[]:[]})[_0xcd85('0x23')](function(_0x5195f6){logger[_0xcd85('0x11')](_0xcd85('0x24'),_0x3117cc);logger[_0xcd85('0x14')]('GetFaxQueue',_0x3117cc,JSON[_0xcd85('0x15')](_0x5195f6));_0x42c541(_0x5195f6);})['catch'](function(_0x364234){logger[_0xcd85('0x16')]('GetFaxQueue',_0x364234[_0xcd85('0x18')],_0x3117cc);_0x11ad0c(_0x578f93['error'](0x1f4,_0x364234[_0xcd85('0x18')]));});});};exports[_0xcd85('0x25')]=function(_0x2c6dc1){var _0xa65b8c=this;return new Promise(function(_0xd432a7,_0x5d6a1b){return db[_0xcd85('0x1b')]['find']({'raw':_0x2c6dc1[_0xcd85('0x1d')]?_0x2c6dc1['options']['raw']===undefined?!![]:![]:!![],'where':_0x2c6dc1['options']?_0x2c6dc1[_0xcd85('0x1d')][_0xcd85('0x1e')]||null:null,'attributes':_0x2c6dc1['options']?_0x2c6dc1[_0xcd85('0x1d')][_0xcd85('0x1f')]||null:null,'include':_0x2c6dc1['options']?_0x2c6dc1[_0xcd85('0x1d')][_0xcd85('0x20')]?_[_0xcd85('0x21')](_0x2c6dc1['options'][_0xcd85('0x20')],function(_0x5d231c){return{'model':db[_0x5d231c[_0xcd85('0x22')]],'as':_0x5d231c['as'],'attributes':_0x5d231c[_0xcd85('0x1f')],'include':_0x5d231c[_0xcd85('0x20')]?_[_0xcd85('0x21')](_0x5d231c['include'],function(_0x5bd581){return{'model':db[_0x5bd581['model']],'as':_0x5bd581['as'],'attributes':_0x5bd581[_0xcd85('0x1f')],'include':_0x5bd581[_0xcd85('0x20')]?_[_0xcd85('0x21')](_0x5bd581[_0xcd85('0x20')],function(_0x5c912c){return{'model':db[_0x5c912c[_0xcd85('0x22')]],'as':_0x5c912c['as'],'attributes':_0x5c912c[_0xcd85('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xcd85('0x23')](function(_0x28f972){logger[_0xcd85('0x11')](_0xcd85('0x25'),_0x2c6dc1);logger[_0xcd85('0x14')](_0xcd85('0x25'),_0x2c6dc1,JSON['stringify'](_0x28f972));_0xd432a7(_0x28f972);})['catch'](function(_0x4a34ca){logger[_0xcd85('0x16')]('ShowFaxQueue',_0x4a34ca['message'],_0x2c6dc1);_0x5d6a1b(_0xa65b8c['error'](0x1f4,_0x4a34ca['message']));});});};
\ No newline at end of file
index e1d2843..569e58d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb233=['remove','update','emit','removeListener','register','length','faxQueue:','save'];(function(_0x58b35e,_0x17a8cd){var _0x86b2a0=function(_0x162126){while(--_0x162126){_0x58b35e['push'](_0x58b35e['shift']());}};_0x86b2a0(++_0x17a8cd);}(_0xb233,0x1a7));var _0x3b23=function(_0x30ff44,_0x143800){_0x30ff44=_0x30ff44-0x0;var _0x126c3c=_0xb233[_0x30ff44];return _0x126c3c;};'use strict';var FaxQueueEvents=require('./faxQueue.events');var events=[_0x3b23('0x0'),_0x3b23('0x1'),_0x3b23('0x2')];function createListener(_0x4818e6,_0x1bc5e3){return function(_0x4a7188){_0x1bc5e3[_0x3b23('0x3')](_0x4818e6,_0x4a7188);};}function removeListener(_0x3f33d2,_0x22a582){return function(){FaxQueueEvents[_0x3b23('0x4')](_0x3f33d2,_0x22a582);};}exports[_0x3b23('0x5')]=function(_0x531614){for(var _0x3995c9=0x0,_0x105287=events[_0x3b23('0x6')];_0x3995c9<_0x105287;_0x3995c9++){var _0x2f2f9e=events[_0x3995c9];var _0x5d5d19=createListener(_0x3b23('0x7')+_0x2f2f9e,_0x531614);FaxQueueEvents['on'](_0x2f2f9e,_0x5d5d19);}};
\ No newline at end of file
+var _0xd854=['./faxQueue.events','save','remove','update','emit','removeListener','register','length','faxQueue:'];(function(_0x1736e8,_0x28cb17){var _0x23024e=function(_0x55b69c){while(--_0x55b69c){_0x1736e8['push'](_0x1736e8['shift']());}};_0x23024e(++_0x28cb17);}(_0xd854,0xfc));var _0x4d85=function(_0x5e9ba5,_0x4df56b){_0x5e9ba5=_0x5e9ba5-0x0;var _0x36ffa3=_0xd854[_0x5e9ba5];return _0x36ffa3;};'use strict';var FaxQueueEvents=require(_0x4d85('0x0'));var events=[_0x4d85('0x1'),_0x4d85('0x2'),_0x4d85('0x3')];function createListener(_0x2b830d,_0x2b6f6a){return function(_0x2cbabd){_0x2b6f6a[_0x4d85('0x4')](_0x2b830d,_0x2cbabd);};}function removeListener(_0x2ba167,_0x35287c){return function(){FaxQueueEvents[_0x4d85('0x5')](_0x2ba167,_0x35287c);};}exports[_0x4d85('0x6')]=function(_0x4ba50e){for(var _0x19224b=0x0,_0x41245c=events[_0x4d85('0x7')];_0x19224b<_0x41245c;_0x19224b++){var _0x11c270=events[_0x19224b];var _0x3a4aa0=createListener(_0x4d85('0x8')+_0x11c270,_0x4ba50e);FaxQueueEvents['on'](_0x11c270,_0x3a4aa0);}};
\ No newline at end of file
index c1eea32..5ce3929 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3e1=['../../config/environment','./faxQueue.controller','index','get','/describe','isAuthenticated','/:id','/:id/members','/:id/teams','/:id/users','getAgents','post','create','addTeams','addAgents','update','delete','destroy','removeAgents','exports','util','path','connect-timeout','Router','../../components/auth/service'];(function(_0x531cb8,_0x8ef36f){var _0x5cf297=function(_0x45acb4){while(--_0x45acb4){_0x531cb8['push'](_0x531cb8['shift']());}};_0x5cf297(++_0x8ef36f);}(_0xc3e1,0x91));var _0x1c3e=function(_0x868a4a,_0x5dcd66){_0x868a4a=_0x868a4a-0x0;var _0x2f2984=_0xc3e1[_0x868a4a];return _0x2f2984;};'use strict';var multer=require('multer');var util=require(_0x1c3e('0x0'));var path=require(_0x1c3e('0x1'));var timeout=require(_0x1c3e('0x2'));var express=require('express');var router=express[_0x1c3e('0x3')]();var auth=require(_0x1c3e('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x1c3e('0x5'));var controller=require(_0x1c3e('0x6'));router['get']('/',auth['isAuthenticated'](),controller[_0x1c3e('0x7')]);router[_0x1c3e('0x8')](_0x1c3e('0x9'),auth[_0x1c3e('0xa')](),controller['describe']);router[_0x1c3e('0x8')](_0x1c3e('0xb'),auth[_0x1c3e('0xa')](),controller['show']);router[_0x1c3e('0x8')](_0x1c3e('0xc'),auth[_0x1c3e('0xa')](),controller['getMembers']);router[_0x1c3e('0x8')](_0x1c3e('0xd'),auth[_0x1c3e('0xa')](),controller['getTeams']);router[_0x1c3e('0x8')](_0x1c3e('0xe'),auth[_0x1c3e('0xa')](),controller[_0x1c3e('0xf')]);router[_0x1c3e('0x10')]('/',auth[_0x1c3e('0xa')](),controller[_0x1c3e('0x11')]);router['post'](_0x1c3e('0xd'),auth[_0x1c3e('0xa')](),controller[_0x1c3e('0x12')]);router[_0x1c3e('0x10')]('/:id/users',auth[_0x1c3e('0xa')](),controller[_0x1c3e('0x13')]);router['put'](_0x1c3e('0xb'),auth[_0x1c3e('0xa')](),controller[_0x1c3e('0x14')]);router[_0x1c3e('0x15')](_0x1c3e('0xb'),auth[_0x1c3e('0xa')](),controller[_0x1c3e('0x16')]);router[_0x1c3e('0x15')](_0x1c3e('0xd'),auth['isAuthenticated'](),controller['removeTeams']);router[_0x1c3e('0x15')](_0x1c3e('0xe'),auth[_0x1c3e('0xa')](),controller[_0x1c3e('0x17')]);module[_0x1c3e('0x18')]=router;
\ No newline at end of file
+var _0xdf02=['create','addTeams','/:id/users','addAgents','put','update','delete','destroy','removeAgents','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','./faxQueue.controller','get','isAuthenticated','index','/describe','describe','/:id','/:id/members','getMembers','/:id/teams','getTeams','getAgents','post'];(function(_0x4ee335,_0x7d8bc7){var _0x1fa8d1=function(_0x52e831){while(--_0x52e831){_0x4ee335['push'](_0x4ee335['shift']());}};_0x1fa8d1(++_0x7d8bc7);}(_0xdf02,0x10f));var _0x2df0=function(_0x1a36a5,_0x746928){_0x1a36a5=_0x1a36a5-0x0;var _0x746243=_0xdf02[_0x1a36a5];return _0x746243;};'use strict';var multer=require(_0x2df0('0x0'));var util=require('util');var path=require(_0x2df0('0x1'));var timeout=require(_0x2df0('0x2'));var express=require('express');var router=express[_0x2df0('0x3')]();var auth=require(_0x2df0('0x4'));var interaction=require(_0x2df0('0x5'));var config=require('../../config/environment');var controller=require(_0x2df0('0x6'));router[_0x2df0('0x7')]('/',auth[_0x2df0('0x8')](),controller[_0x2df0('0x9')]);router['get'](_0x2df0('0xa'),auth['isAuthenticated'](),controller[_0x2df0('0xb')]);router[_0x2df0('0x7')](_0x2df0('0xc'),auth[_0x2df0('0x8')](),controller['show']);router['get'](_0x2df0('0xd'),auth['isAuthenticated'](),controller[_0x2df0('0xe')]);router[_0x2df0('0x7')](_0x2df0('0xf'),auth['isAuthenticated'](),controller[_0x2df0('0x10')]);router[_0x2df0('0x7')]('/:id/users',auth[_0x2df0('0x8')](),controller[_0x2df0('0x11')]);router[_0x2df0('0x12')]('/',auth[_0x2df0('0x8')](),controller[_0x2df0('0x13')]);router['post'](_0x2df0('0xf'),auth['isAuthenticated'](),controller[_0x2df0('0x14')]);router[_0x2df0('0x12')](_0x2df0('0x15'),auth['isAuthenticated'](),controller[_0x2df0('0x16')]);router[_0x2df0('0x17')]('/:id',auth[_0x2df0('0x8')](),controller[_0x2df0('0x18')]);router[_0x2df0('0x19')]('/:id',auth[_0x2df0('0x8')](),controller[_0x2df0('0x1a')]);router[_0x2df0('0x19')]('/:id/teams',auth[_0x2df0('0x8')](),controller['removeTeams']);router[_0x2df0('0x19')](_0x2df0('0x15'),auth[_0x2df0('0x8')](),controller[_0x2df0('0x1b')]);module[_0x2df0('0x1c')]=router;
\ No newline at end of file
index 53d06f1..a0c4c2b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xea77=['STRING','DATE','moment','sequelize','exports'];(function(_0x4836cf,_0x1936f4){var _0x2de5e3=function(_0x45b845){while(--_0x45b845){_0x4836cf['push'](_0x4836cf['shift']());}};_0x2de5e3(++_0x1936f4);}(_0xea77,0x93));var _0x7ea7=function(_0x42fcef,_0x4057bd){_0x42fcef=_0x42fcef-0x0;var _0xb14b47=_0xea77[_0x42fcef];return _0xb14b47;};'use strict';var moment=require(_0x7ea7('0x0'));var Sequelize=require(_0x7ea7('0x1'));module[_0x7ea7('0x2')]={'uniqueid':{'type':Sequelize[_0x7ea7('0x3')],'allowNull':![]},'from':{'type':Sequelize[_0x7ea7('0x3')]},'joinAt':{'type':Sequelize[_0x7ea7('0x4')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0x7ea7('0x4')]},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize[_0x7ea7('0x3')]}};
\ No newline at end of file
+var _0x7693=['sequelize','exports','STRING','DATE','moment'];(function(_0x52a742,_0x402e3d){var _0x47d29c=function(_0x549457){while(--_0x549457){_0x52a742['push'](_0x52a742['shift']());}};_0x47d29c(++_0x402e3d);}(_0x7693,0x1ee));var _0x3769=function(_0x194b34,_0x2feb25){_0x194b34=_0x194b34-0x0;var _0x1ffc45=_0x7693[_0x194b34];return _0x1ffc45;};'use strict';var moment=require(_0x3769('0x0'));var Sequelize=require(_0x3769('0x1'));module[_0x3769('0x2')]={'uniqueid':{'type':Sequelize[_0x3769('0x3')],'allowNull':![]},'from':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0x3769('0x4')]},'exitAt':{'type':Sequelize[_0x3769('0x4')]},'reason':{'type':Sequelize[_0x3769('0x3')]}};
\ No newline at end of file
index cdd7566..eea8cfc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x866c=['destroy','error','stack','name','index','FaxQueueReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','sort','where','pick','filter','merge','map','key','VIRTUAL','options','count','includeAll','findAll','params','length','find','catch','create','body','describe','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','path','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','limit','set','save','update','then'];(function(_0x39439c,_0x4b9e0f){var _0x23a578=function(_0x114347){while(--_0x114347){_0x39439c['push'](_0x39439c['shift']());}};_0x23a578(++_0x4b9e0f);}(_0x866c,0x9d));var _0xc866=function(_0x3e9cf0,_0x2beb36){_0x3e9cf0=_0x3e9cf0-0x0;var _0x1b7d40=_0x866c[_0x3e9cf0];return _0x1b7d40;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xc866('0x0'));var rimraf=require(_0xc866('0x1'));var zipdir=require(_0xc866('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xc866('0x3'));var moment=require(_0xc866('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xc866('0x5'));var util=require(_0xc866('0x6'));var path=require(_0xc866('0x7'));var sox=require('sox');var csv=require(_0xc866('0x8'));var ejs=require(_0xc866('0x9'));var fs=require('fs');var _=require(_0xc866('0xa'));var squel=require(_0xc866('0xb'));var crypto=require('crypto');var jsforce=require(_0xc866('0xc'));var deskjs=require(_0xc866('0xd'));var toCsv=require(_0xc866('0x8'));var querystring=require('querystring');var Papa=require(_0xc866('0xe'));var Redis=require(_0xc866('0xf'));var authService=require(_0xc866('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')('api');var utils=require(_0xc866('0x11'));var config=require(_0xc866('0x12'));var db=require(_0xc866('0x13'))['db'];function respondWithStatusCode(_0x307161,_0x39a2b0){_0x39a2b0=_0x39a2b0||0xcc;return function(_0x470a7d){if(_0x470a7d){return _0x307161[_0xc866('0x14')](_0x39a2b0);}return _0x307161[_0xc866('0x15')](_0x39a2b0)[_0xc866('0x16')]();};}function respondWithResult(_0x305065,_0x506998){_0x506998=_0x506998||0xc8;return function(_0x404e91){if(_0x404e91){return _0x305065[_0xc866('0x15')](_0x506998)[_0xc866('0x17')](_0x404e91);}};}function respondWithFilteredResult(_0x557c91,_0x4c69ec){return function(_0x59bfc0){if(_0x59bfc0){var _0x3f081e=_0x59bfc0['count'],_0x379981=_0x4c69ec['offset'],_0x21dcff=_0x4c69ec['offset']+_0x4c69ec[_0xc866('0x18')],_0x529708;if(_0x21dcff>=_0x3f081e){_0x21dcff=_0x3f081e;_0x529708=0xc8;}else{_0x529708=0xce;}_0x557c91[_0xc866('0x15')](_0x529708);return _0x557c91[_0xc866('0x19')]('Content-Range',_0x379981+'-'+_0x21dcff+'/'+_0x3f081e)[_0xc866('0x17')](_0x59bfc0);}return null;};}function patchUpdates(_0x13e10a){return function(_0x1d8d52){try{jsonpatch['apply'](_0x1d8d52,_0x13e10a,!![]);}catch(_0x507edd){return BPromise['reject'](_0x507edd);}return _0x1d8d52[_0xc866('0x1a')]();};}function saveUpdates(_0x3deb53,_0x438108){return function(_0x1c52b1){if(_0x1c52b1){return _0x1c52b1[_0xc866('0x1b')](_0x3deb53)[_0xc866('0x1c')](function(_0x57c045){return _0x57c045;});}return null;};}function removeEntity(_0x1c0901,_0x59f853){return function(_0x505e0d){if(_0x505e0d){return _0x505e0d[_0xc866('0x1d')]()['then'](function(){_0x1c0901[_0xc866('0x15')](0xcc)[_0xc866('0x16')]();});}};}function handleEntityNotFound(_0x5dcdca,_0x4bd06e){return function(_0x4086f8){if(!_0x4086f8){_0x5dcdca[_0xc866('0x14')](0x194);}return _0x4086f8;};}function handleError(_0x411b4f,_0x38cd06){_0x38cd06=_0x38cd06||0x1f4;return function(_0x373a7d){logger[_0xc866('0x1e')](_0x373a7d[_0xc866('0x1f')]);if(_0x373a7d[_0xc866('0x20')]){delete _0x373a7d[_0xc866('0x20')];}_0x411b4f['status'](_0x38cd06)['send'](_0x373a7d);};}exports[_0xc866('0x21')]=function(_0x30df5a,_0x111be){var _0x19be22={},_0x3768b9={},_0xc5d833={'count':0x0,'rows':[]};var _0x16ae50=db[_0xc866('0x22')][_0xc866('0x23')];_0x3768b9[_0xc866('0x24')]=_[_0xc866('0x25')](_0x16ae50);_0x3768b9[_0xc866('0x26')]=_['keys'](_0x30df5a['query']);_0x3768b9[_0xc866('0x27')]=_[_0xc866('0x28')](_0x3768b9['model'],_0x3768b9[_0xc866('0x26')]);_0x19be22[_0xc866('0x29')]=_['intersection'](_0x3768b9['model'],qs[_0xc866('0x2a')](_0x30df5a[_0xc866('0x26')]['fields']));_0x19be22['attributes']=_0x19be22[_0xc866('0x29')]['length']?_0x19be22[_0xc866('0x29')]:_0x3768b9[_0xc866('0x24')];if(!_0x30df5a[_0xc866('0x26')]['hasOwnProperty']('nolimit')){_0x19be22[_0xc866('0x18')]=qs[_0xc866('0x18')](_0x30df5a[_0xc866('0x26')][_0xc866('0x18')]);_0x19be22['offset']=qs['offset'](_0x30df5a[_0xc866('0x26')]['offset']);}_0x19be22['order']=qs[_0xc866('0x2b')](_0x30df5a['query'][_0xc866('0x2b')]);_0x19be22[_0xc866('0x2c')]=qs[_0xc866('0x27')](_[_0xc866('0x2d')](_0x30df5a[_0xc866('0x26')],_0x3768b9[_0xc866('0x27')]));if(_0x30df5a[_0xc866('0x26')][_0xc866('0x2e')]){_0x19be22[_0xc866('0x2c')]=_[_0xc866('0x2f')](_0x19be22[_0xc866('0x2c')],{'$or':_[_0xc866('0x30')](_0x16ae50,function(_0x561172){if(_0x561172['type'][_0xc866('0x31')]!==_0xc866('0x32')){var _0x35fc56={};_0x35fc56[_0x561172['field']]={'$like':'%'+_0x30df5a['query'][_0xc866('0x2e')]+'%'};return _0x35fc56;}})});}_0x19be22=_[_0xc866('0x2f')]({},_0x19be22,_0x30df5a[_0xc866('0x33')]);var _0x45460b={'where':_0x19be22[_0xc866('0x2c')]};return db[_0xc866('0x22')][_0xc866('0x34')](_0x45460b)['then'](function(_0xbddb8d){_0xc5d833['count']=_0xbddb8d;if(_0x30df5a['query'][_0xc866('0x35')]){_0x19be22['include']=[{'all':!![]}];}return db['FaxQueueReport'][_0xc866('0x36')](_0x19be22);})[_0xc866('0x1c')](function(_0x12b3bc){_0xc5d833['rows']=_0x12b3bc;return _0xc5d833;})[_0xc866('0x1c')](respondWithFilteredResult(_0x111be,_0x19be22))['catch'](handleError(_0x111be,null));};exports['show']=function(_0x144a48,_0x417617){var _0x5dd258={'raw':!![],'where':{'id':_0x144a48[_0xc866('0x37')]['id']}},_0x4b5394={};_0x4b5394[_0xc866('0x24')]=_[_0xc866('0x25')](db['FaxQueueReport'][_0xc866('0x23')]);_0x4b5394['query']=_[_0xc866('0x25')](_0x144a48[_0xc866('0x26')]);_0x4b5394[_0xc866('0x27')]=_[_0xc866('0x28')](_0x4b5394[_0xc866('0x24')],_0x4b5394['query']);_0x5dd258[_0xc866('0x29')]=_[_0xc866('0x28')](_0x4b5394[_0xc866('0x24')],qs['fields'](_0x144a48[_0xc866('0x26')][_0xc866('0x2a')]));_0x5dd258[_0xc866('0x29')]=_0x5dd258['attributes'][_0xc866('0x38')]?_0x5dd258['attributes']:_0x4b5394[_0xc866('0x24')];if(_0x144a48[_0xc866('0x26')][_0xc866('0x35')]){_0x5dd258['include']=[{'all':!![]}];}_0x5dd258=_['merge']({},_0x5dd258,_0x144a48[_0xc866('0x33')]);return db[_0xc866('0x22')][_0xc866('0x39')](_0x5dd258)['then'](handleEntityNotFound(_0x417617,null))[_0xc866('0x1c')](respondWithResult(_0x417617,null))[_0xc866('0x3a')](handleError(_0x417617,null));};exports[_0xc866('0x3b')]=function(_0x49137f,_0x143c47){return db[_0xc866('0x22')][_0xc866('0x3b')](_0x49137f['body'],{})[_0xc866('0x1c')](respondWithResult(_0x143c47,0xc9))[_0xc866('0x3a')](handleError(_0x143c47,null));};exports[_0xc866('0x1b')]=function(_0x107fb0,_0x1609fb){if(_0x107fb0[_0xc866('0x3c')]['id']){delete _0x107fb0[_0xc866('0x3c')]['id'];}return db[_0xc866('0x22')][_0xc866('0x39')]({'where':{'id':_0x107fb0[_0xc866('0x37')]['id']}})[_0xc866('0x1c')](handleEntityNotFound(_0x1609fb,null))['then'](saveUpdates(_0x107fb0[_0xc866('0x3c')],null))[_0xc866('0x1c')](respondWithResult(_0x1609fb,null))[_0xc866('0x3a')](handleError(_0x1609fb,null));};exports[_0xc866('0x1d')]=function(_0x11068a,_0x45ece4){return db[_0xc866('0x22')]['find']({'where':{'id':_0x11068a[_0xc866('0x37')]['id']}})[_0xc866('0x1c')](handleEntityNotFound(_0x45ece4,null))[_0xc866('0x1c')](removeEntity(_0x45ece4,null))[_0xc866('0x3a')](handleError(_0x45ece4,null));};exports[_0xc866('0x3d')]=function(_0x1a30d1,_0x1a4c7d){return db[_0xc866('0x22')][_0xc866('0x3d')]()[_0xc866('0x1c')](respondWithResult(_0x1a4c7d,null))['catch'](handleError(_0x1a4c7d,null));};
\ No newline at end of file
+var _0x1285=['body','describe','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','index','FaxQueueReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','map','key','VIRTUAL','field','filter','merge','options','includeAll','include','findAll','rows','catch','show','params','length','find','create'];(function(_0x5d2803,_0xf375bd){var _0xdcad2c=function(_0x3c3a98){while(--_0x3c3a98){_0x5d2803['push'](_0x5d2803['shift']());}};_0xdcad2c(++_0xf375bd);}(_0x1285,0x9c));var _0x5128=function(_0x2fd910,_0x401fdb){_0x2fd910=_0x2fd910-0x0;var _0x5ab655=_0x1285[_0x2fd910];return _0x5ab655;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x5128('0x0'));var zipdir=require(_0x5128('0x1'));var jsonpatch=require(_0x5128('0x2'));var rp=require(_0x5128('0x3'));var moment=require(_0x5128('0x4'));var BPromise=require(_0x5128('0x5'));var Mustache=require('mustache');var util=require(_0x5128('0x6'));var path=require(_0x5128('0x7'));var sox=require(_0x5128('0x8'));var csv=require(_0x5128('0x9'));var ejs=require(_0x5128('0xa'));var fs=require('fs');var _=require(_0x5128('0xb'));var squel=require(_0x5128('0xc'));var crypto=require(_0x5128('0xd'));var jsforce=require(_0x5128('0xe'));var deskjs=require('desk.js');var toCsv=require(_0x5128('0x9'));var querystring=require(_0x5128('0xf'));var Papa=require(_0x5128('0x10'));var Redis=require(_0x5128('0x11'));var authService=require(_0x5128('0x12'));var qs=require(_0x5128('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x5128('0x14'))('api');var utils=require(_0x5128('0x15'));var config=require(_0x5128('0x16'));var db=require(_0x5128('0x17'))['db'];function respondWithStatusCode(_0x5da0a4,_0x450ec7){_0x450ec7=_0x450ec7||0xcc;return function(_0x2bd56e){if(_0x2bd56e){return _0x5da0a4[_0x5128('0x18')](_0x450ec7);}return _0x5da0a4[_0x5128('0x19')](_0x450ec7)[_0x5128('0x1a')]();};}function respondWithResult(_0x2bddda,_0x538084){_0x538084=_0x538084||0xc8;return function(_0x104016){if(_0x104016){return _0x2bddda[_0x5128('0x19')](_0x538084)[_0x5128('0x1b')](_0x104016);}};}function respondWithFilteredResult(_0x221c14,_0x28d997){return function(_0x3dd4d7){if(_0x3dd4d7){var _0xface62=_0x3dd4d7[_0x5128('0x1c')],_0x194971=_0x28d997[_0x5128('0x1d')],_0x11687e=_0x28d997[_0x5128('0x1d')]+_0x28d997[_0x5128('0x1e')],_0x33aa91;if(_0x11687e>=_0xface62){_0x11687e=_0xface62;_0x33aa91=0xc8;}else{_0x33aa91=0xce;}_0x221c14['status'](_0x33aa91);return _0x221c14[_0x5128('0x1f')](_0x5128('0x20'),_0x194971+'-'+_0x11687e+'/'+_0xface62)[_0x5128('0x1b')](_0x3dd4d7);}return null;};}function patchUpdates(_0x4c8007){return function(_0x405a78){try{jsonpatch[_0x5128('0x21')](_0x405a78,_0x4c8007,!![]);}catch(_0x1d2135){return BPromise[_0x5128('0x22')](_0x1d2135);}return _0x405a78[_0x5128('0x23')]();};}function saveUpdates(_0x383cce,_0x3274a5){return function(_0x132b2d){if(_0x132b2d){return _0x132b2d[_0x5128('0x24')](_0x383cce)[_0x5128('0x25')](function(_0x49e83b){return _0x49e83b;});}return null;};}function removeEntity(_0x561e32,_0x27011d){return function(_0x2cc266){if(_0x2cc266){return _0x2cc266[_0x5128('0x26')]()[_0x5128('0x25')](function(){_0x561e32['status'](0xcc)[_0x5128('0x1a')]();});}};}function handleEntityNotFound(_0x26e4d9,_0x3eb710){return function(_0xba520c){if(!_0xba520c){_0x26e4d9['sendStatus'](0x194);}return _0xba520c;};}function handleError(_0x14a471,_0x8859d8){_0x8859d8=_0x8859d8||0x1f4;return function(_0x2d197e){logger[_0x5128('0x27')](_0x2d197e[_0x5128('0x28')]);if(_0x2d197e[_0x5128('0x29')]){delete _0x2d197e['name'];}_0x14a471[_0x5128('0x19')](_0x8859d8)[_0x5128('0x2a')](_0x2d197e);};}exports[_0x5128('0x2b')]=function(_0x3562b9,_0x17abc1){var _0x18753d={},_0x1adad8={},_0x448478={'count':0x0,'rows':[]};var _0x4b7569=db[_0x5128('0x2c')][_0x5128('0x2d')];_0x1adad8[_0x5128('0x2e')]=_['keys'](_0x4b7569);_0x1adad8['query']=_[_0x5128('0x2f')](_0x3562b9[_0x5128('0x30')]);_0x1adad8[_0x5128('0x31')]=_[_0x5128('0x32')](_0x1adad8[_0x5128('0x2e')],_0x1adad8[_0x5128('0x30')]);_0x18753d[_0x5128('0x33')]=_[_0x5128('0x32')](_0x1adad8['model'],qs[_0x5128('0x34')](_0x3562b9[_0x5128('0x30')][_0x5128('0x34')]));_0x18753d['attributes']=_0x18753d[_0x5128('0x33')]['length']?_0x18753d[_0x5128('0x33')]:_0x1adad8[_0x5128('0x2e')];if(!_0x3562b9[_0x5128('0x30')][_0x5128('0x35')](_0x5128('0x36'))){_0x18753d[_0x5128('0x1e')]=qs['limit'](_0x3562b9[_0x5128('0x30')][_0x5128('0x1e')]);_0x18753d[_0x5128('0x1d')]=qs['offset'](_0x3562b9['query'][_0x5128('0x1d')]);}_0x18753d[_0x5128('0x37')]=qs[_0x5128('0x38')](_0x3562b9['query'][_0x5128('0x38')]);_0x18753d[_0x5128('0x39')]=qs[_0x5128('0x31')](_['pick'](_0x3562b9[_0x5128('0x30')],_0x1adad8[_0x5128('0x31')]));if(_0x3562b9['query']['filter']){_0x18753d[_0x5128('0x39')]=_['merge'](_0x18753d['where'],{'$or':_[_0x5128('0x3a')](_0x4b7569,function(_0x32e51e){if(_0x32e51e['type'][_0x5128('0x3b')]!==_0x5128('0x3c')){var _0x8cb9f2={};_0x8cb9f2[_0x32e51e[_0x5128('0x3d')]]={'$like':'%'+_0x3562b9['query'][_0x5128('0x3e')]+'%'};return _0x8cb9f2;}})});}_0x18753d=_[_0x5128('0x3f')]({},_0x18753d,_0x3562b9[_0x5128('0x40')]);var _0x1dd742={'where':_0x18753d[_0x5128('0x39')]};return db['FaxQueueReport'][_0x5128('0x1c')](_0x1dd742)[_0x5128('0x25')](function(_0x2ff955){_0x448478['count']=_0x2ff955;if(_0x3562b9[_0x5128('0x30')][_0x5128('0x41')]){_0x18753d[_0x5128('0x42')]=[{'all':!![]}];}return db[_0x5128('0x2c')][_0x5128('0x43')](_0x18753d);})[_0x5128('0x25')](function(_0x2ac1e3){_0x448478[_0x5128('0x44')]=_0x2ac1e3;return _0x448478;})[_0x5128('0x25')](respondWithFilteredResult(_0x17abc1,_0x18753d))[_0x5128('0x45')](handleError(_0x17abc1,null));};exports[_0x5128('0x46')]=function(_0x4c19ef,_0x2cfa9d){var _0x564f2a={'raw':!![],'where':{'id':_0x4c19ef[_0x5128('0x47')]['id']}},_0x1e16a0={};_0x1e16a0[_0x5128('0x2e')]=_['keys'](db['FaxQueueReport'][_0x5128('0x2d')]);_0x1e16a0['query']=_['keys'](_0x4c19ef[_0x5128('0x30')]);_0x1e16a0[_0x5128('0x31')]=_['intersection'](_0x1e16a0[_0x5128('0x2e')],_0x1e16a0['query']);_0x564f2a[_0x5128('0x33')]=_[_0x5128('0x32')](_0x1e16a0[_0x5128('0x2e')],qs[_0x5128('0x34')](_0x4c19ef[_0x5128('0x30')]['fields']));_0x564f2a[_0x5128('0x33')]=_0x564f2a[_0x5128('0x33')][_0x5128('0x48')]?_0x564f2a['attributes']:_0x1e16a0[_0x5128('0x2e')];if(_0x4c19ef[_0x5128('0x30')]['includeAll']){_0x564f2a[_0x5128('0x42')]=[{'all':!![]}];}_0x564f2a=_[_0x5128('0x3f')]({},_0x564f2a,_0x4c19ef[_0x5128('0x40')]);return db[_0x5128('0x2c')][_0x5128('0x49')](_0x564f2a)[_0x5128('0x25')](handleEntityNotFound(_0x2cfa9d,null))[_0x5128('0x25')](respondWithResult(_0x2cfa9d,null))['catch'](handleError(_0x2cfa9d,null));};exports[_0x5128('0x4a')]=function(_0x4e523a,_0x4ee0b3){return db['FaxQueueReport'][_0x5128('0x4a')](_0x4e523a[_0x5128('0x4b')],{})[_0x5128('0x25')](respondWithResult(_0x4ee0b3,0xc9))[_0x5128('0x45')](handleError(_0x4ee0b3,null));};exports['update']=function(_0x2fd309,_0x3a24fe){if(_0x2fd309[_0x5128('0x4b')]['id']){delete _0x2fd309['body']['id'];}return db[_0x5128('0x2c')]['find']({'where':{'id':_0x2fd309[_0x5128('0x47')]['id']}})[_0x5128('0x25')](handleEntityNotFound(_0x3a24fe,null))['then'](saveUpdates(_0x2fd309['body'],null))[_0x5128('0x25')](respondWithResult(_0x3a24fe,null))[_0x5128('0x45')](handleError(_0x3a24fe,null));};exports['destroy']=function(_0x35a683,_0x296e63){return db[_0x5128('0x2c')]['find']({'where':{'id':_0x35a683[_0x5128('0x47')]['id']}})[_0x5128('0x25')](handleEntityNotFound(_0x296e63,null))[_0x5128('0x25')](removeEntity(_0x296e63,null))[_0x5128('0x45')](handleError(_0x296e63,null));};exports['describe']=function(_0x582c54,_0x504dc8){return db[_0x5128('0x2c')][_0x5128('0x4c')]()['then'](respondWithResult(_0x504dc8,null))['catch'](handleError(_0x504dc8,null));};
\ No newline at end of file
index 0a07005..d53bd34 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3aaa=['bluebird','request-promise','path','../../config/environment','./faxQueueReport.attributes','exports','FaxQueueReport','report_fax_queue','uniqueid','lodash','util','api','moment'];(function(_0x54de5d,_0x1f8b26){var _0x1b349e=function(_0xe199cc){while(--_0xe199cc){_0x54de5d['push'](_0x54de5d['shift']());}};_0x1b349e(++_0x1f8b26);}(_0x3aaa,0x14e));var _0xa3aa=function(_0x6e7825,_0x41c5f8){_0x6e7825=_0x6e7825-0x0;var _0x3c7610=_0x3aaa[_0x6e7825];return _0x3c7610;};'use strict';var _=require(_0xa3aa('0x0'));var util=require(_0xa3aa('0x1'));var logger=require('../../config/logger')(_0xa3aa('0x2'));var moment=require(_0xa3aa('0x3'));var BPromise=require(_0xa3aa('0x4'));var rp=require(_0xa3aa('0x5'));var fs=require('fs');var path=require(_0xa3aa('0x6'));var rimraf=require('rimraf');var config=require(_0xa3aa('0x7'));var attributes=require(_0xa3aa('0x8'));module[_0xa3aa('0x9')]=function(_0x20a491,_0xbecbf2){return _0x20a491['define'](_0xa3aa('0xa'),attributes,{'tableName':_0xa3aa('0xb'),'paranoid':![],'indexes':[{'name':_0xa3aa('0xc'),'fields':[_0xa3aa('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x86ac=['api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./faxQueueReport.attributes','exports','FaxQueueReport','report_fax_queue','uniqueid','lodash','util','../../config/logger'];(function(_0x4c6c74,_0x317fad){var _0x3b4152=function(_0x200dfa){while(--_0x200dfa){_0x4c6c74['push'](_0x4c6c74['shift']());}};_0x3b4152(++_0x317fad);}(_0x86ac,0x10b));var _0xc86a=function(_0x191cc9,_0x52e74a){_0x191cc9=_0x191cc9-0x0;var _0x95137f=_0x86ac[_0x191cc9];return _0x95137f;};'use strict';var _=require(_0xc86a('0x0'));var util=require(_0xc86a('0x1'));var logger=require(_0xc86a('0x2'))(_0xc86a('0x3'));var moment=require(_0xc86a('0x4'));var BPromise=require(_0xc86a('0x5'));var rp=require(_0xc86a('0x6'));var fs=require('fs');var path=require(_0xc86a('0x7'));var rimraf=require(_0xc86a('0x8'));var config=require(_0xc86a('0x9'));var attributes=require(_0xc86a('0xa'));module[_0xc86a('0xb')]=function(_0x2ec95d,_0x14b12a){return _0x2ec95d['define'](_0xc86a('0xc'),attributes,{'tableName':_0xc86a('0xd'),'paranoid':![],'indexes':[{'name':_0xc86a('0xe'),'fields':[_0xc86a('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
index a25bd9c..7a2b3c0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbecf=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','debug','FaxQueueReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','FaxQueueReport,\x20%s,\x20%s','message','result','catch','CreateFaxQueueReport','FaxQueueReport','create','raw','options','where','attributes','limit','info','UpdateFaxQueueReport','moment','bluebird','randomstring','ioredis'];(function(_0x5e959e,_0x35b453){var _0x2a7611=function(_0x5d9683){while(--_0x5d9683){_0x5e959e['push'](_0x5e959e['shift']());}};_0x2a7611(++_0x35b453);}(_0xbecf,0x15c));var _0xfbec=function(_0x188047,_0x148f85){_0x188047=_0x188047-0x0;var _0x56c1a1=_0xbecf[_0x188047];return _0x56c1a1;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xfbec('0x0'));var BPromise=require(_0xfbec('0x1'));var rs=require(_0xfbec('0x2'));var fs=require('fs');var Redis=require(_0xfbec('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xfbec('0x4'));var logger=require(_0xfbec('0x5'))(_0xfbec('0x6'));var config=require(_0xfbec('0x7'));var jayson=require(_0xfbec('0x8'));var client=jayson['client'][_0xfbec('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x34a717,_0x33c701,_0x410cab){return new BPromise(function(_0x43bc5b,_0x312ad1){return client[_0xfbec('0xa')](_0x34a717,_0x410cab)[_0xfbec('0xb')](function(_0x21863f){logger['info']('FaxQueueReport,\x20%s,\x20%s',_0x33c701,'request\x20sent');logger[_0xfbec('0xc')](_0xfbec('0xd'),_0x33c701,_0xfbec('0xe'),JSON[_0xfbec('0xf')](_0x21863f));if(_0x21863f[_0xfbec('0x10')]){if(_0x21863f['error'][_0xfbec('0x11')]===0x1f4){logger[_0xfbec('0x10')](_0xfbec('0x12'),_0x33c701,_0x21863f[_0xfbec('0x10')]['message']);return _0x312ad1(_0x21863f[_0xfbec('0x10')][_0xfbec('0x13')]);}logger[_0xfbec('0x10')](_0xfbec('0x12'),_0x33c701,_0x21863f['error'][_0xfbec('0x13')]);return _0x43bc5b(_0x21863f['error'][_0xfbec('0x13')]);}else{logger['info'](_0xfbec('0x12'),_0x33c701,_0xfbec('0xe'));_0x43bc5b(_0x21863f[_0xfbec('0x14')]['message']);}})[_0xfbec('0x15')](function(_0x2a3329){logger[_0xfbec('0x10')]('FaxQueueReport,\x20%s,\x20%s',_0x33c701,_0x2a3329);_0x312ad1(_0x2a3329);});});}exports[_0xfbec('0x16')]=function(_0x267a4b){var _0x259874=this;return new Promise(function(_0x6fc8f,_0x42a6cf){return db[_0xfbec('0x17')][_0xfbec('0x18')](_0x267a4b['body'],{'raw':_0x267a4b['options']?_0x267a4b['options'][_0xfbec('0x19')]===undefined?!![]:![]:!![]})[_0xfbec('0xb')](function(_0x2c2007){logger['info'](_0xfbec('0x16'),_0x267a4b);logger[_0xfbec('0xc')]('CreateFaxQueueReport',_0x267a4b,JSON[_0xfbec('0xf')](_0x2c2007));_0x6fc8f(_0x2c2007);})[_0xfbec('0x15')](function(_0x54a20f){logger[_0xfbec('0x10')](_0xfbec('0x16'),_0x54a20f[_0xfbec('0x13')],_0x267a4b);_0x42a6cf(_0x259874[_0xfbec('0x10')](0x1f4,_0x54a20f[_0xfbec('0x13')]));});});};exports['UpdateFaxQueueReport']=function(_0x2e172e){var _0x4bc10a=this;return new Promise(function(_0x1bed47,_0x1c9a07){return db['FaxQueueReport']['update'](_0x2e172e['body'],{'raw':_0x2e172e[_0xfbec('0x1a')]?_0x2e172e[_0xfbec('0x1a')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2e172e[_0xfbec('0x1a')]?_0x2e172e[_0xfbec('0x1a')][_0xfbec('0x1b')]||null:null,'attributes':_0x2e172e['options']?_0x2e172e[_0xfbec('0x1a')][_0xfbec('0x1c')]||null:null,'limit':_0x2e172e[_0xfbec('0x1a')]?_0x2e172e[_0xfbec('0x1a')][_0xfbec('0x1d')]||null:null})[_0xfbec('0xb')](function(_0x4aff99){logger[_0xfbec('0x1e')](_0xfbec('0x1f'),_0x2e172e);logger[_0xfbec('0xc')](_0xfbec('0x1f'),_0x2e172e,JSON[_0xfbec('0xf')](_0x4aff99));_0x1bed47(_0x4aff99);})[_0xfbec('0x15')](function(_0x41b4cf){logger['error'](_0xfbec('0x1f'),_0x41b4cf['message'],_0x2e172e);_0x1c9a07(_0x4bc10a['error'](0x1f4,_0x41b4cf['message']));});});};
\ No newline at end of file
+var _0x4dd3=['ioredis','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','FaxQueueReport,\x20%s,\x20%s','request\x20sent','debug','FaxQueueReport,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','CreateFaxQueueReport','FaxQueueReport','create','body','options','stringify','raw','where','UpdateFaxQueueReport','lodash','util','moment'];(function(_0x4b2436,_0x452299){var _0x4f5ab2=function(_0x5c6679){while(--_0x5c6679){_0x4b2436['push'](_0x4b2436['shift']());}};_0x4f5ab2(++_0x452299);}(_0x4dd3,0xf5));var _0x34dd=function(_0x425716,_0x3e9d1c){_0x425716=_0x425716-0x0;var _0x2d39af=_0x4dd3[_0x425716];return _0x2d39af;};'use strict';var _=require(_0x34dd('0x0'));var util=require(_0x34dd('0x1'));var moment=require(_0x34dd('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x34dd('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x34dd('0x4'));var logger=require(_0x34dd('0x5'))(_0x34dd('0x6'));var config=require('../../config/environment');var jayson=require(_0x34dd('0x7'));var client=jayson[_0x34dd('0x8')][_0x34dd('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x365482,_0x3a3429,_0x5e8911){return new BPromise(function(_0x4cb036,_0xc0c516){return client[_0x34dd('0xa')](_0x365482,_0x5e8911)[_0x34dd('0xb')](function(_0x4e1bc8){logger[_0x34dd('0xc')](_0x34dd('0xd'),_0x3a3429,_0x34dd('0xe'));logger[_0x34dd('0xf')](_0x34dd('0x10'),_0x3a3429,_0x34dd('0xe'),JSON['stringify'](_0x4e1bc8));if(_0x4e1bc8[_0x34dd('0x11')]){if(_0x4e1bc8[_0x34dd('0x11')][_0x34dd('0x12')]===0x1f4){logger[_0x34dd('0x11')](_0x34dd('0xd'),_0x3a3429,_0x4e1bc8['error']['message']);return _0xc0c516(_0x4e1bc8[_0x34dd('0x11')][_0x34dd('0x13')]);}logger[_0x34dd('0x11')]('FaxQueueReport,\x20%s,\x20%s',_0x3a3429,_0x4e1bc8[_0x34dd('0x11')]['message']);return _0x4cb036(_0x4e1bc8[_0x34dd('0x11')][_0x34dd('0x13')]);}else{logger[_0x34dd('0xc')](_0x34dd('0xd'),_0x3a3429,_0x34dd('0xe'));_0x4cb036(_0x4e1bc8[_0x34dd('0x14')]['message']);}})[_0x34dd('0x15')](function(_0x46d9f5){logger[_0x34dd('0x11')](_0x34dd('0xd'),_0x3a3429,_0x46d9f5);_0xc0c516(_0x46d9f5);});});}exports[_0x34dd('0x16')]=function(_0x366274){var _0x3e2084=this;return new Promise(function(_0x2b4b52,_0xcbe2b5){return db[_0x34dd('0x17')][_0x34dd('0x18')](_0x366274[_0x34dd('0x19')],{'raw':_0x366274[_0x34dd('0x1a')]?_0x366274[_0x34dd('0x1a')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x23072a){logger[_0x34dd('0xc')](_0x34dd('0x16'),_0x366274);logger[_0x34dd('0xf')](_0x34dd('0x16'),_0x366274,JSON[_0x34dd('0x1b')](_0x23072a));_0x2b4b52(_0x23072a);})['catch'](function(_0x41e4bf){logger[_0x34dd('0x11')]('CreateFaxQueueReport',_0x41e4bf['message'],_0x366274);_0xcbe2b5(_0x3e2084['error'](0x1f4,_0x41e4bf[_0x34dd('0x13')]));});});};exports['UpdateFaxQueueReport']=function(_0x93beae){var _0x330641=this;return new Promise(function(_0x4c2e31,_0x29e4a3){return db[_0x34dd('0x17')]['update'](_0x93beae['body'],{'raw':_0x93beae[_0x34dd('0x1a')]?_0x93beae['options'][_0x34dd('0x1c')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x93beae[_0x34dd('0x1a')]?_0x93beae[_0x34dd('0x1a')][_0x34dd('0x1d')]||null:null,'attributes':_0x93beae[_0x34dd('0x1a')]?_0x93beae[_0x34dd('0x1a')]['attributes']||null:null,'limit':_0x93beae[_0x34dd('0x1a')]?_0x93beae[_0x34dd('0x1a')]['limit']||null:null})[_0x34dd('0xb')](function(_0x170a82){logger[_0x34dd('0xc')](_0x34dd('0x1e'),_0x93beae);logger['debug']('UpdateFaxQueueReport',_0x93beae,JSON[_0x34dd('0x1b')](_0x170a82));_0x4c2e31(_0x170a82);})[_0x34dd('0x15')](function(_0x74a33c){logger[_0x34dd('0x11')](_0x34dd('0x1e'),_0x74a33c[_0x34dd('0x13')],_0x93beae);_0x29e4a3(_0x330641[_0x34dd('0x11')](0x1f4,_0x74a33c[_0x34dd('0x13')]));});});};
\ No newline at end of file
index b1ff7d5..91d3dee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf29=['path','express','Router','../../components/interaction/service','../../config/environment','./faxQueueReport.controller','get','isAuthenticated','index','/describe','describe','show','post','put','delete','/:id','destroy','exports','multer','util'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0xdf29,0x1ca));var _0x9df2=function(_0x485f74,_0x24de26){_0x485f74=_0x485f74-0x0;var _0x14e0ff=_0xdf29[_0x485f74];return _0x14e0ff;};'use strict';var multer=require(_0x9df2('0x0'));var util=require(_0x9df2('0x1'));var path=require(_0x9df2('0x2'));var timeout=require('connect-timeout');var express=require(_0x9df2('0x3'));var router=express[_0x9df2('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x9df2('0x5'));var config=require(_0x9df2('0x6'));var controller=require(_0x9df2('0x7'));router[_0x9df2('0x8')]('/',auth[_0x9df2('0x9')](),controller[_0x9df2('0xa')]);router['get'](_0x9df2('0xb'),auth['isAuthenticated'](),controller[_0x9df2('0xc')]);router[_0x9df2('0x8')]('/:id',auth[_0x9df2('0x9')](),controller[_0x9df2('0xd')]);router[_0x9df2('0xe')]('/',auth[_0x9df2('0x9')](),controller['create']);router[_0x9df2('0xf')]('/:id',auth[_0x9df2('0x9')](),controller['update']);router[_0x9df2('0x10')](_0x9df2('0x11'),auth[_0x9df2('0x9')](),controller[_0x9df2('0x12')]);module[_0x9df2('0x13')]=router;
\ No newline at end of file
+var _0x4e5c=['/:id','show','post','create','put','delete','destroy','exports','multer','util','path','express','Router','../../components/interaction/service','../../config/environment','./faxQueueReport.controller','get','isAuthenticated','/describe','describe'];(function(_0x5dabac,_0x3d248b){var _0x86e8ea=function(_0x446be4){while(--_0x446be4){_0x5dabac['push'](_0x5dabac['shift']());}};_0x86e8ea(++_0x3d248b);}(_0x4e5c,0xd0));var _0xc4e5=function(_0x2aecb2,_0x343312){_0x2aecb2=_0x2aecb2-0x0;var _0x3ebb80=_0x4e5c[_0x2aecb2];return _0x3ebb80;};'use strict';var multer=require(_0xc4e5('0x0'));var util=require(_0xc4e5('0x1'));var path=require(_0xc4e5('0x2'));var timeout=require('connect-timeout');var express=require(_0xc4e5('0x3'));var router=express[_0xc4e5('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xc4e5('0x5'));var config=require(_0xc4e5('0x6'));var controller=require(_0xc4e5('0x7'));router[_0xc4e5('0x8')]('/',auth[_0xc4e5('0x9')](),controller['index']);router['get'](_0xc4e5('0xa'),auth[_0xc4e5('0x9')](),controller[_0xc4e5('0xb')]);router['get'](_0xc4e5('0xc'),auth[_0xc4e5('0x9')](),controller[_0xc4e5('0xd')]);router[_0xc4e5('0xe')]('/',auth[_0xc4e5('0x9')](),controller[_0xc4e5('0xf')]);router[_0xc4e5('0x10')](_0xc4e5('0xc'),auth[_0xc4e5('0x9')](),controller['update']);router[_0xc4e5('0x11')]('/:id',auth['isAuthenticated'](),controller[_0xc4e5('0x12')]);module[_0xc4e5('0x13')]=router;
\ No newline at end of file
index a58eb48..de2be32 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ab4=['queue','moment','exports','STRING','ENUM'];(function(_0x316b3e,_0x47b154){var _0x45ba95=function(_0x5e68c4){while(--_0x5e68c4){_0x316b3e['push'](_0x316b3e['shift']());}};_0x45ba95(++_0x47b154);}(_0x2ab4,0x1c3));var _0x42ab=function(_0x565ed7,_0x398228){_0x565ed7=_0x565ed7-0x0;var _0x183ad7=_0x2ab4[_0x565ed7];return _0x183ad7;};'use strict';var moment=require(_0x42ab('0x0'));var Sequelize=require('sequelize');module[_0x42ab('0x1')]={'uniqueid':{'type':Sequelize[_0x42ab('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0x42ab('0x3')]('account','agent',_0x42ab('0x4')),'allowNull':![],'defaultValue':_0x42ab('0x4')},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize['NOW']}};
\ No newline at end of file
+var _0x79b8=['moment','sequelize','exports','ENUM','account','queue','DATE','NOW'];(function(_0x102b2b,_0x45d45e){var _0x55db93=function(_0x502524){while(--_0x502524){_0x102b2b['push'](_0x102b2b['shift']());}};_0x55db93(++_0x45d45e);}(_0x79b8,0x1f0));var _0x879b=function(_0x4e61e0,_0x1c1ab5){_0x4e61e0=_0x4e61e0-0x0;var _0x3c768b=_0x79b8[_0x4e61e0];return _0x3c768b;};'use strict';var moment=require(_0x879b('0x0'));var Sequelize=require(_0x879b('0x1'));module[_0x879b('0x2')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize[_0x879b('0x3')](_0x879b('0x4'),'agent',_0x879b('0x5')),'allowNull':![],'defaultValue':_0x879b('0x5')},'transferredAt':{'type':Sequelize[_0x879b('0x6')],'allowNull':![],'defaultValue':Sequelize[_0x879b('0x7')]}};
\ No newline at end of file
index 317b317..3348a5c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ace=['hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','VIRTUAL','field','options','FaxTransferReport','count','includeAll','include','findAll','rows','catch','show','params','length','find','create','body','describe','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/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','Content-Range','apply','save','update','then','destroy','error','name','send','rawAttributes','model','query','filters','attributes','intersection','fields'];(function(_0x2db667,_0x193cf5){var _0x83ff9=function(_0x5da022){while(--_0x5da022){_0x2db667['push'](_0x2db667['shift']());}};_0x83ff9(++_0x193cf5);}(_0x3ace,0x1d6));var _0xe3ac=function(_0xee3e3f,_0x3e65d1){_0xee3e3f=_0xee3e3f-0x0;var _0x1967b3=_0x3ace[_0xee3e3f];return _0x1967b3;};'use strict';var pdf=require(_0xe3ac('0x0'));var emlformat=require(_0xe3ac('0x1'));var rimraf=require(_0xe3ac('0x2'));var zipdir=require(_0xe3ac('0x3'));var jsonpatch=require(_0xe3ac('0x4'));var rp=require(_0xe3ac('0x5'));var moment=require(_0xe3ac('0x6'));var BPromise=require(_0xe3ac('0x7'));var Mustache=require(_0xe3ac('0x8'));var util=require(_0xe3ac('0x9'));var path=require('path');var sox=require(_0xe3ac('0xa'));var csv=require(_0xe3ac('0xb'));var ejs=require(_0xe3ac('0xc'));var fs=require('fs');var _=require(_0xe3ac('0xd'));var squel=require(_0xe3ac('0xe'));var crypto=require(_0xe3ac('0xf'));var jsforce=require(_0xe3ac('0x10'));var deskjs=require(_0xe3ac('0x11'));var toCsv=require(_0xe3ac('0xb'));var querystring=require(_0xe3ac('0x12'));var Papa=require('papaparse');var Redis=require(_0xe3ac('0x13'));var authService=require('../../components/auth/service');var qs=require(_0xe3ac('0x14'));var hardwareService=require(_0xe3ac('0x15'));var logger=require(_0xe3ac('0x16'))(_0xe3ac('0x17'));var utils=require(_0xe3ac('0x18'));var config=require(_0xe3ac('0x19'));var db=require(_0xe3ac('0x1a'))['db'];function respondWithStatusCode(_0x36d7dc,_0x29d88c){_0x29d88c=_0x29d88c||0xcc;return function(_0xe9ba97){if(_0xe9ba97){return _0x36d7dc[_0xe3ac('0x1b')](_0x29d88c);}return _0x36d7dc[_0xe3ac('0x1c')](_0x29d88c)[_0xe3ac('0x1d')]();};}function respondWithResult(_0x1fdd1f,_0x456b5a){_0x456b5a=_0x456b5a||0xc8;return function(_0x49dd65){if(_0x49dd65){return _0x1fdd1f[_0xe3ac('0x1c')](_0x456b5a)[_0xe3ac('0x1e')](_0x49dd65);}};}function respondWithFilteredResult(_0x3c7fd2,_0xc257e2){return function(_0x49538b){if(_0x49538b){var _0x5f253b=_0x49538b['count'],_0x518332=_0xc257e2['offset'],_0x4c926=_0xc257e2[_0xe3ac('0x1f')]+_0xc257e2['limit'],_0x209b8e;if(_0x4c926>=_0x5f253b){_0x4c926=_0x5f253b;_0x209b8e=0xc8;}else{_0x209b8e=0xce;}_0x3c7fd2['status'](_0x209b8e);return _0x3c7fd2['set'](_0xe3ac('0x20'),_0x518332+'-'+_0x4c926+'/'+_0x5f253b)[_0xe3ac('0x1e')](_0x49538b);}return null;};}function patchUpdates(_0x48945a){return function(_0x4e8ab4){try{jsonpatch[_0xe3ac('0x21')](_0x4e8ab4,_0x48945a,!![]);}catch(_0x3488cc){return BPromise['reject'](_0x3488cc);}return _0x4e8ab4[_0xe3ac('0x22')]();};}function saveUpdates(_0x35f1f3,_0xad8f93){return function(_0x295e58){if(_0x295e58){return _0x295e58[_0xe3ac('0x23')](_0x35f1f3)[_0xe3ac('0x24')](function(_0xf66f09){return _0xf66f09;});}return null;};}function removeEntity(_0x267045,_0x5b00a3){return function(_0x337373){if(_0x337373){return _0x337373[_0xe3ac('0x25')]()[_0xe3ac('0x24')](function(){_0x267045[_0xe3ac('0x1c')](0xcc)[_0xe3ac('0x1d')]();});}};}function handleEntityNotFound(_0x144a83,_0x3ceb96){return function(_0xc4376){if(!_0xc4376){_0x144a83[_0xe3ac('0x1b')](0x194);}return _0xc4376;};}function handleError(_0x3d4e8d,_0x16e208){_0x16e208=_0x16e208||0x1f4;return function(_0x39f085){logger[_0xe3ac('0x26')](_0x39f085['stack']);if(_0x39f085[_0xe3ac('0x27')]){delete _0x39f085[_0xe3ac('0x27')];}_0x3d4e8d[_0xe3ac('0x1c')](_0x16e208)[_0xe3ac('0x28')](_0x39f085);};}exports['index']=function(_0x1a9284,_0x2c5fb9){var _0x1fcb73={},_0x629ec4={},_0x1c266b={'count':0x0,'rows':[]};var _0x4d5c6a=db['FaxTransferReport'][_0xe3ac('0x29')];_0x629ec4[_0xe3ac('0x2a')]=_['keys'](_0x4d5c6a);_0x629ec4[_0xe3ac('0x2b')]=_['keys'](_0x1a9284[_0xe3ac('0x2b')]);_0x629ec4[_0xe3ac('0x2c')]=_['intersection'](_0x629ec4[_0xe3ac('0x2a')],_0x629ec4[_0xe3ac('0x2b')]);_0x1fcb73[_0xe3ac('0x2d')]=_[_0xe3ac('0x2e')](_0x629ec4[_0xe3ac('0x2a')],qs[_0xe3ac('0x2f')](_0x1a9284[_0xe3ac('0x2b')]['fields']));_0x1fcb73[_0xe3ac('0x2d')]=_0x1fcb73[_0xe3ac('0x2d')]['length']?_0x1fcb73[_0xe3ac('0x2d')]:_0x629ec4[_0xe3ac('0x2a')];if(!_0x1a9284[_0xe3ac('0x2b')][_0xe3ac('0x30')](_0xe3ac('0x31'))){_0x1fcb73['limit']=qs['limit'](_0x1a9284[_0xe3ac('0x2b')][_0xe3ac('0x32')]);_0x1fcb73['offset']=qs[_0xe3ac('0x1f')](_0x1a9284[_0xe3ac('0x2b')]['offset']);}_0x1fcb73[_0xe3ac('0x33')]=qs[_0xe3ac('0x34')](_0x1a9284['query'][_0xe3ac('0x34')]);_0x1fcb73[_0xe3ac('0x35')]=qs[_0xe3ac('0x2c')](_[_0xe3ac('0x36')](_0x1a9284[_0xe3ac('0x2b')],_0x629ec4[_0xe3ac('0x2c')]));if(_0x1a9284['query'][_0xe3ac('0x37')]){_0x1fcb73[_0xe3ac('0x35')]=_[_0xe3ac('0x38')](_0x1fcb73[_0xe3ac('0x35')],{'$or':_['map'](_0x4d5c6a,function(_0x1f1ad5){if(_0x1f1ad5['type']['key']!==_0xe3ac('0x39')){var _0x107686={};_0x107686[_0x1f1ad5[_0xe3ac('0x3a')]]={'$like':'%'+_0x1a9284['query'][_0xe3ac('0x37')]+'%'};return _0x107686;}})});}_0x1fcb73=_[_0xe3ac('0x38')]({},_0x1fcb73,_0x1a9284[_0xe3ac('0x3b')]);var _0x137d3e={'where':_0x1fcb73[_0xe3ac('0x35')]};return db[_0xe3ac('0x3c')][_0xe3ac('0x3d')](_0x137d3e)['then'](function(_0x247b6d){_0x1c266b[_0xe3ac('0x3d')]=_0x247b6d;if(_0x1a9284[_0xe3ac('0x2b')][_0xe3ac('0x3e')]){_0x1fcb73[_0xe3ac('0x3f')]=[{'all':!![]}];}return db[_0xe3ac('0x3c')][_0xe3ac('0x40')](_0x1fcb73);})[_0xe3ac('0x24')](function(_0x4938e0){_0x1c266b[_0xe3ac('0x41')]=_0x4938e0;return _0x1c266b;})[_0xe3ac('0x24')](respondWithFilteredResult(_0x2c5fb9,_0x1fcb73))[_0xe3ac('0x42')](handleError(_0x2c5fb9,null));};exports[_0xe3ac('0x43')]=function(_0x1e6279,_0xaf21b5){var _0x331a89={'raw':!![],'where':{'id':_0x1e6279[_0xe3ac('0x44')]['id']}},_0x2c5f7b={};_0x2c5f7b[_0xe3ac('0x2a')]=_['keys'](db[_0xe3ac('0x3c')][_0xe3ac('0x29')]);_0x2c5f7b[_0xe3ac('0x2b')]=_['keys'](_0x1e6279[_0xe3ac('0x2b')]);_0x2c5f7b[_0xe3ac('0x2c')]=_[_0xe3ac('0x2e')](_0x2c5f7b[_0xe3ac('0x2a')],_0x2c5f7b['query']);_0x331a89[_0xe3ac('0x2d')]=_[_0xe3ac('0x2e')](_0x2c5f7b[_0xe3ac('0x2a')],qs['fields'](_0x1e6279[_0xe3ac('0x2b')][_0xe3ac('0x2f')]));_0x331a89[_0xe3ac('0x2d')]=_0x331a89[_0xe3ac('0x2d')][_0xe3ac('0x45')]?_0x331a89['attributes']:_0x2c5f7b[_0xe3ac('0x2a')];if(_0x1e6279['query'][_0xe3ac('0x3e')]){_0x331a89[_0xe3ac('0x3f')]=[{'all':!![]}];}_0x331a89=_[_0xe3ac('0x38')]({},_0x331a89,_0x1e6279[_0xe3ac('0x3b')]);return db[_0xe3ac('0x3c')][_0xe3ac('0x46')](_0x331a89)[_0xe3ac('0x24')](handleEntityNotFound(_0xaf21b5,null))[_0xe3ac('0x24')](respondWithResult(_0xaf21b5,null))[_0xe3ac('0x42')](handleError(_0xaf21b5,null));};exports['create']=function(_0x16390e,_0x3c99bf){return db[_0xe3ac('0x3c')][_0xe3ac('0x47')](_0x16390e[_0xe3ac('0x48')],{})[_0xe3ac('0x24')](respondWithResult(_0x3c99bf,0xc9))[_0xe3ac('0x42')](handleError(_0x3c99bf,null));};exports['update']=function(_0x1034a8,_0x382510){if(_0x1034a8[_0xe3ac('0x48')]['id']){delete _0x1034a8[_0xe3ac('0x48')]['id'];}return db[_0xe3ac('0x3c')][_0xe3ac('0x46')]({'where':{'id':_0x1034a8[_0xe3ac('0x44')]['id']}})[_0xe3ac('0x24')](handleEntityNotFound(_0x382510,null))[_0xe3ac('0x24')](saveUpdates(_0x1034a8[_0xe3ac('0x48')],null))[_0xe3ac('0x24')](respondWithResult(_0x382510,null))[_0xe3ac('0x42')](handleError(_0x382510,null));};exports[_0xe3ac('0x25')]=function(_0xf2bcc0,_0x20b427){return db[_0xe3ac('0x3c')][_0xe3ac('0x46')]({'where':{'id':_0xf2bcc0[_0xe3ac('0x44')]['id']}})[_0xe3ac('0x24')](handleEntityNotFound(_0x20b427,null))['then'](removeEntity(_0x20b427,null))[_0xe3ac('0x42')](handleError(_0x20b427,null));};exports[_0xe3ac('0x49')]=function(_0x46274,_0xbb980a){return db['FaxTransferReport'][_0xe3ac('0x49')]()[_0xe3ac('0x24')](respondWithResult(_0xbb980a,null))['catch'](handleError(_0xbb980a,null));};
\ No newline at end of file
+var _0x8c2a=['catch','show','include','find','create','body','destroy','params','describe','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','reject','save','update','error','stack','name','send','index','FaxTransferReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','merge','map','type','key','VIRTUAL','field','filter','options','then','includeAll','findAll','rows'];(function(_0x2151b7,_0x4eb75c){var _0x3260a4=function(_0x32dc53){while(--_0x32dc53){_0x2151b7['push'](_0x2151b7['shift']());}};_0x3260a4(++_0x4eb75c);}(_0x8c2a,0x1cb));var _0xa8c2=function(_0x5e0ca6,_0x50d4df){_0x5e0ca6=_0x5e0ca6-0x0;var _0x24b18f=_0x8c2a[_0x5e0ca6];return _0x24b18f;};'use strict';var pdf=require(_0xa8c2('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xa8c2('0x1'));var zipdir=require(_0xa8c2('0x2'));var jsonpatch=require(_0xa8c2('0x3'));var rp=require(_0xa8c2('0x4'));var moment=require(_0xa8c2('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xa8c2('0x6'));var util=require(_0xa8c2('0x7'));var path=require(_0xa8c2('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xa8c2('0x9'));var fs=require('fs');var _=require(_0xa8c2('0xa'));var squel=require(_0xa8c2('0xb'));var crypto=require(_0xa8c2('0xc'));var jsforce=require(_0xa8c2('0xd'));var deskjs=require(_0xa8c2('0xe'));var toCsv=require(_0xa8c2('0xf'));var querystring=require(_0xa8c2('0x10'));var Papa=require(_0xa8c2('0x11'));var Redis=require(_0xa8c2('0x12'));var authService=require(_0xa8c2('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xa8c2('0x14'));var logger=require('../../config/logger')(_0xa8c2('0x15'));var utils=require(_0xa8c2('0x16'));var config=require('../../config/environment');var db=require(_0xa8c2('0x17'))['db'];function respondWithStatusCode(_0x52a493,_0x3c9c88){_0x3c9c88=_0x3c9c88||0xcc;return function(_0x229d30){if(_0x229d30){return _0x52a493[_0xa8c2('0x18')](_0x3c9c88);}return _0x52a493[_0xa8c2('0x19')](_0x3c9c88)[_0xa8c2('0x1a')]();};}function respondWithResult(_0x396698,_0xab3606){_0xab3606=_0xab3606||0xc8;return function(_0x3b8064){if(_0x3b8064){return _0x396698['status'](_0xab3606)['json'](_0x3b8064);}};}function respondWithFilteredResult(_0x35bbf0,_0x911696){return function(_0x17c59c){if(_0x17c59c){var _0x3a4c8b=_0x17c59c[_0xa8c2('0x1b')],_0x258c97=_0x911696[_0xa8c2('0x1c')],_0x88acb6=_0x911696[_0xa8c2('0x1c')]+_0x911696[_0xa8c2('0x1d')],_0x1d2597;if(_0x88acb6>=_0x3a4c8b){_0x88acb6=_0x3a4c8b;_0x1d2597=0xc8;}else{_0x1d2597=0xce;}_0x35bbf0[_0xa8c2('0x19')](_0x1d2597);return _0x35bbf0[_0xa8c2('0x1e')](_0xa8c2('0x1f'),_0x258c97+'-'+_0x88acb6+'/'+_0x3a4c8b)['json'](_0x17c59c);}return null;};}function patchUpdates(_0x331c29){return function(_0xcfd621){try{jsonpatch['apply'](_0xcfd621,_0x331c29,!![]);}catch(_0x252fa7){return BPromise[_0xa8c2('0x20')](_0x252fa7);}return _0xcfd621[_0xa8c2('0x21')]();};}function saveUpdates(_0x319832,_0x23cdb4){return function(_0x303c02){if(_0x303c02){return _0x303c02[_0xa8c2('0x22')](_0x319832)['then'](function(_0x5db555){return _0x5db555;});}return null;};}function removeEntity(_0x233d10,_0x4c3f2e){return function(_0xfd3fac){if(_0xfd3fac){return _0xfd3fac['destroy']()['then'](function(){_0x233d10[_0xa8c2('0x19')](0xcc)[_0xa8c2('0x1a')]();});}};}function handleEntityNotFound(_0x2451f6,_0x1dfb73){return function(_0x5a1f2f){if(!_0x5a1f2f){_0x2451f6['sendStatus'](0x194);}return _0x5a1f2f;};}function handleError(_0x3198eb,_0x34e061){_0x34e061=_0x34e061||0x1f4;return function(_0x1cec5e){logger[_0xa8c2('0x23')](_0x1cec5e[_0xa8c2('0x24')]);if(_0x1cec5e[_0xa8c2('0x25')]){delete _0x1cec5e['name'];}_0x3198eb[_0xa8c2('0x19')](_0x34e061)[_0xa8c2('0x26')](_0x1cec5e);};}exports[_0xa8c2('0x27')]=function(_0x39b913,_0x395beb){var _0x331e58={},_0x547fc8={},_0x55a370={'count':0x0,'rows':[]};var _0x58371a=db[_0xa8c2('0x28')][_0xa8c2('0x29')];_0x547fc8[_0xa8c2('0x2a')]=_[_0xa8c2('0x2b')](_0x58371a);_0x547fc8['query']=_['keys'](_0x39b913[_0xa8c2('0x2c')]);_0x547fc8[_0xa8c2('0x2d')]=_[_0xa8c2('0x2e')](_0x547fc8['model'],_0x547fc8[_0xa8c2('0x2c')]);_0x331e58[_0xa8c2('0x2f')]=_[_0xa8c2('0x2e')](_0x547fc8[_0xa8c2('0x2a')],qs[_0xa8c2('0x30')](_0x39b913[_0xa8c2('0x2c')][_0xa8c2('0x30')]));_0x331e58[_0xa8c2('0x2f')]=_0x331e58[_0xa8c2('0x2f')][_0xa8c2('0x31')]?_0x331e58[_0xa8c2('0x2f')]:_0x547fc8['model'];if(!_0x39b913[_0xa8c2('0x2c')]['hasOwnProperty'](_0xa8c2('0x32'))){_0x331e58[_0xa8c2('0x1d')]=qs[_0xa8c2('0x1d')](_0x39b913[_0xa8c2('0x2c')][_0xa8c2('0x1d')]);_0x331e58[_0xa8c2('0x1c')]=qs[_0xa8c2('0x1c')](_0x39b913[_0xa8c2('0x2c')]['offset']);}_0x331e58[_0xa8c2('0x33')]=qs[_0xa8c2('0x34')](_0x39b913['query'][_0xa8c2('0x34')]);_0x331e58[_0xa8c2('0x35')]=qs[_0xa8c2('0x2d')](_['pick'](_0x39b913[_0xa8c2('0x2c')],_0x547fc8['filters']));if(_0x39b913[_0xa8c2('0x2c')]['filter']){_0x331e58['where']=_[_0xa8c2('0x36')](_0x331e58[_0xa8c2('0x35')],{'$or':_[_0xa8c2('0x37')](_0x58371a,function(_0x3c3f4d){if(_0x3c3f4d[_0xa8c2('0x38')][_0xa8c2('0x39')]!==_0xa8c2('0x3a')){var _0x3a8da1={};_0x3a8da1[_0x3c3f4d[_0xa8c2('0x3b')]]={'$like':'%'+_0x39b913[_0xa8c2('0x2c')][_0xa8c2('0x3c')]+'%'};return _0x3a8da1;}})});}_0x331e58=_[_0xa8c2('0x36')]({},_0x331e58,_0x39b913[_0xa8c2('0x3d')]);var _0x4e1dda={'where':_0x331e58[_0xa8c2('0x35')]};return db[_0xa8c2('0x28')][_0xa8c2('0x1b')](_0x4e1dda)[_0xa8c2('0x3e')](function(_0x44a04f){_0x55a370['count']=_0x44a04f;if(_0x39b913[_0xa8c2('0x2c')][_0xa8c2('0x3f')]){_0x331e58['include']=[{'all':!![]}];}return db[_0xa8c2('0x28')][_0xa8c2('0x40')](_0x331e58);})['then'](function(_0x34d785){_0x55a370[_0xa8c2('0x41')]=_0x34d785;return _0x55a370;})[_0xa8c2('0x3e')](respondWithFilteredResult(_0x395beb,_0x331e58))[_0xa8c2('0x42')](handleError(_0x395beb,null));};exports[_0xa8c2('0x43')]=function(_0xb6cee,_0x14853a){var _0x492c6f={'raw':!![],'where':{'id':_0xb6cee['params']['id']}},_0x872be8={};_0x872be8[_0xa8c2('0x2a')]=_[_0xa8c2('0x2b')](db[_0xa8c2('0x28')][_0xa8c2('0x29')]);_0x872be8['query']=_['keys'](_0xb6cee[_0xa8c2('0x2c')]);_0x872be8[_0xa8c2('0x2d')]=_['intersection'](_0x872be8[_0xa8c2('0x2a')],_0x872be8[_0xa8c2('0x2c')]);_0x492c6f['attributes']=_[_0xa8c2('0x2e')](_0x872be8[_0xa8c2('0x2a')],qs[_0xa8c2('0x30')](_0xb6cee['query']['fields']));_0x492c6f[_0xa8c2('0x2f')]=_0x492c6f[_0xa8c2('0x2f')][_0xa8c2('0x31')]?_0x492c6f[_0xa8c2('0x2f')]:_0x872be8['model'];if(_0xb6cee[_0xa8c2('0x2c')][_0xa8c2('0x3f')]){_0x492c6f[_0xa8c2('0x44')]=[{'all':!![]}];}_0x492c6f=_[_0xa8c2('0x36')]({},_0x492c6f,_0xb6cee[_0xa8c2('0x3d')]);return db[_0xa8c2('0x28')][_0xa8c2('0x45')](_0x492c6f)[_0xa8c2('0x3e')](handleEntityNotFound(_0x14853a,null))[_0xa8c2('0x3e')](respondWithResult(_0x14853a,null))['catch'](handleError(_0x14853a,null));};exports[_0xa8c2('0x46')]=function(_0x162893,_0x1d76c9){return db['FaxTransferReport'][_0xa8c2('0x46')](_0x162893['body'],{})[_0xa8c2('0x3e')](respondWithResult(_0x1d76c9,0xc9))[_0xa8c2('0x42')](handleError(_0x1d76c9,null));};exports[_0xa8c2('0x22')]=function(_0xaec94,_0x14b707){if(_0xaec94[_0xa8c2('0x47')]['id']){delete _0xaec94[_0xa8c2('0x47')]['id'];}return db[_0xa8c2('0x28')][_0xa8c2('0x45')]({'where':{'id':_0xaec94['params']['id']}})['then'](handleEntityNotFound(_0x14b707,null))[_0xa8c2('0x3e')](saveUpdates(_0xaec94['body'],null))[_0xa8c2('0x3e')](respondWithResult(_0x14b707,null))['catch'](handleError(_0x14b707,null));};exports[_0xa8c2('0x48')]=function(_0x5a6b8b,_0x3bfdee){return db['FaxTransferReport'][_0xa8c2('0x45')]({'where':{'id':_0x5a6b8b[_0xa8c2('0x49')]['id']}})[_0xa8c2('0x3e')](handleEntityNotFound(_0x3bfdee,null))[_0xa8c2('0x3e')](removeEntity(_0x3bfdee,null))[_0xa8c2('0x42')](handleError(_0x3bfdee,null));};exports['describe']=function(_0x21beb1,_0xf09672){return db[_0xa8c2('0x28')][_0xa8c2('0x4a')]()[_0xa8c2('0x3e')](respondWithResult(_0xf09672,null))[_0xa8c2('0x42')](handleError(_0xf09672,null));};
\ No newline at end of file
index 37603b8..7c76fca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e0b=['../../config/environment','./faxTransferReport.attributes','exports','define','FaxTransferReport','report_fax_transfer','uniqueid','lodash','util','../../config/logger','api','request-promise','path','rimraf'];(function(_0x5b101a,_0x149408){var _0x5616f7=function(_0x578197){while(--_0x578197){_0x5b101a['push'](_0x5b101a['shift']());}};_0x5616f7(++_0x149408);}(_0x3e0b,0x18f));var _0xb3e0=function(_0x12948f,_0x4043fa){_0x12948f=_0x12948f-0x0;var _0x5a1ed8=_0x3e0b[_0x12948f];return _0x5a1ed8;};'use strict';var _=require(_0xb3e0('0x0'));var util=require(_0xb3e0('0x1'));var logger=require(_0xb3e0('0x2'))(_0xb3e0('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xb3e0('0x4'));var fs=require('fs');var path=require(_0xb3e0('0x5'));var rimraf=require(_0xb3e0('0x6'));var config=require(_0xb3e0('0x7'));var attributes=require(_0xb3e0('0x8'));module[_0xb3e0('0x9')]=function(_0x585588,_0xb8351c){return _0x585588[_0xb3e0('0xa')](_0xb3e0('0xb'),attributes,{'tableName':_0xb3e0('0xc'),'paranoid':![],'indexes':[{'name':_0xb3e0('0xd'),'fields':[_0xb3e0('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x2bc7=['moment','bluebird','request-promise','path','rimraf','../../config/environment','./faxTransferReport.attributes','exports','define','FaxTransferReport','report_fax_transfer','uniqueid','lodash','util','../../config/logger'];(function(_0x4e1926,_0x2415d6){var _0x85fa41=function(_0x3f3886){while(--_0x3f3886){_0x4e1926['push'](_0x4e1926['shift']());}};_0x85fa41(++_0x2415d6);}(_0x2bc7,0x192));var _0x72bc=function(_0x5224b7,_0x5badae){_0x5224b7=_0x5224b7-0x0;var _0x4cec06=_0x2bc7[_0x5224b7];return _0x4cec06;};'use strict';var _=require(_0x72bc('0x0'));var util=require(_0x72bc('0x1'));var logger=require(_0x72bc('0x2'))('api');var moment=require(_0x72bc('0x3'));var BPromise=require(_0x72bc('0x4'));var rp=require(_0x72bc('0x5'));var fs=require('fs');var path=require(_0x72bc('0x6'));var rimraf=require(_0x72bc('0x7'));var config=require(_0x72bc('0x8'));var attributes=require(_0x72bc('0x9'));module[_0x72bc('0xa')]=function(_0x17af33,_0x18e598){return _0x17af33[_0x72bc('0xb')](_0x72bc('0xc'),attributes,{'tableName':_0x72bc('0xd'),'paranoid':![],'indexes':[{'name':_0x72bc('0xe'),'fields':[_0x72bc('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
index c67c88c..defcdbb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc44d=['rpc','../../config/environment','jayson/promise','http','request','info','FaxTransferReport,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','util','moment','../../mysqldb','../../config/utils'];(function(_0x52cd63,_0x2fcf68){var _0x38e8bc=function(_0x5c220a){while(--_0x5c220a){_0x52cd63['push'](_0x52cd63['shift']());}};_0x38e8bc(++_0x2fcf68);}(_0xc44d,0x13f));var _0xdc44=function(_0xc7564f,_0x22625d){_0xc7564f=_0xc7564f-0x0;var _0x43526f=_0xc44d[_0xc7564f];return _0x43526f;};'use strict';var _=require('lodash');var util=require(_0xdc44('0x0'));var moment=require(_0xdc44('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0xdc44('0x2'))['db'];var utils=require(_0xdc44('0x3'));var logger=require('../../config/logger')(_0xdc44('0x4'));var config=require(_0xdc44('0x5'));var jayson=require(_0xdc44('0x6'));var client=jayson['client'][_0xdc44('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x39ab21,_0x47ff0d,_0x1370c5){return new BPromise(function(_0x32f087,_0x194feb){return client[_0xdc44('0x8')](_0x39ab21,_0x1370c5)['then'](function(_0x5c0e1e){logger[_0xdc44('0x9')](_0xdc44('0xa'),_0x47ff0d,'request\x20sent');logger['debug']('FaxTransferReport,\x20%s,\x20%s,\x20%s',_0x47ff0d,_0xdc44('0xb'),JSON['stringify'](_0x5c0e1e));if(_0x5c0e1e[_0xdc44('0xc')]){if(_0x5c0e1e[_0xdc44('0xc')][_0xdc44('0xd')]===0x1f4){logger[_0xdc44('0xc')](_0xdc44('0xa'),_0x47ff0d,_0x5c0e1e[_0xdc44('0xc')][_0xdc44('0xe')]);return _0x194feb(_0x5c0e1e[_0xdc44('0xc')]['message']);}logger[_0xdc44('0xc')]('FaxTransferReport,\x20%s,\x20%s',_0x47ff0d,_0x5c0e1e[_0xdc44('0xc')][_0xdc44('0xe')]);return _0x32f087(_0x5c0e1e[_0xdc44('0xc')][_0xdc44('0xe')]);}else{logger[_0xdc44('0x9')](_0xdc44('0xa'),_0x47ff0d,_0xdc44('0xb'));_0x32f087(_0x5c0e1e[_0xdc44('0xf')]['message']);}})[_0xdc44('0x10')](function(_0x5d76e1){logger['error'](_0xdc44('0xa'),_0x47ff0d,_0x5d76e1);_0x194feb(_0x5d76e1);});});}
\ No newline at end of file
+var _0x7a36=['FaxTransferReport,\x20%s,\x20%s,\x20%s','error','code','message','result','util','moment','bluebird','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','FaxTransferReport,\x20%s,\x20%s','request\x20sent'];(function(_0x51f8c5,_0x4e97ea){var _0x5aedf8=function(_0x111fd0){while(--_0x111fd0){_0x51f8c5['push'](_0x51f8c5['shift']());}};_0x5aedf8(++_0x4e97ea);}(_0x7a36,0x16d));var _0x67a3=function(_0xd334f7,_0x173594){_0xd334f7=_0xd334f7-0x0;var _0x3d31ad=_0x7a36[_0xd334f7];return _0x3d31ad;};'use strict';var _=require('lodash');var util=require(_0x67a3('0x0'));var moment=require(_0x67a3('0x1'));var BPromise=require(_0x67a3('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x67a3('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x67a3('0x4'));var logger=require(_0x67a3('0x5'))(_0x67a3('0x6'));var config=require(_0x67a3('0x7'));var jayson=require(_0x67a3('0x8'));var client=jayson[_0x67a3('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0xdd16cb,_0x6afef7,_0x5e12a4){return new BPromise(function(_0xd18c0e,_0x2282e4){return client[_0x67a3('0xa')](_0xdd16cb,_0x5e12a4)[_0x67a3('0xb')](function(_0x16671b){logger[_0x67a3('0xc')](_0x67a3('0xd'),_0x6afef7,_0x67a3('0xe'));logger['debug'](_0x67a3('0xf'),_0x6afef7,_0x67a3('0xe'),JSON['stringify'](_0x16671b));if(_0x16671b[_0x67a3('0x10')]){if(_0x16671b['error'][_0x67a3('0x11')]===0x1f4){logger[_0x67a3('0x10')]('FaxTransferReport,\x20%s,\x20%s',_0x6afef7,_0x16671b[_0x67a3('0x10')][_0x67a3('0x12')]);return _0x2282e4(_0x16671b[_0x67a3('0x10')][_0x67a3('0x12')]);}logger[_0x67a3('0x10')](_0x67a3('0xd'),_0x6afef7,_0x16671b[_0x67a3('0x10')]['message']);return _0xd18c0e(_0x16671b['error'][_0x67a3('0x12')]);}else{logger[_0x67a3('0xc')](_0x67a3('0xd'),_0x6afef7,_0x67a3('0xe'));_0xd18c0e(_0x16671b[_0x67a3('0x13')][_0x67a3('0x12')]);}})['catch'](function(_0x5cd208){logger[_0x67a3('0x10')]('FaxTransferReport,\x20%s,\x20%s',_0x6afef7,_0x5cd208);_0x2282e4(_0x5cd208);});});}
\ No newline at end of file
index bac6875..0d45752 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeec6=['multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxTransferReport.controller','get','index','isAuthenticated','describe','/:id','show','post','update','exports'];(function(_0x4a5335,_0x5d7ba3){var _0x229232=function(_0x120e72){while(--_0x120e72){_0x4a5335['push'](_0x4a5335['shift']());}};_0x229232(++_0x5d7ba3);}(_0xeec6,0x1c2));var _0x6eec=function(_0xb7b878,_0x5c3b92){_0xb7b878=_0xb7b878-0x0;var _0x3c84b9=_0xeec6[_0xb7b878];return _0x3c84b9;};'use strict';var multer=require(_0x6eec('0x0'));var util=require(_0x6eec('0x1'));var path=require(_0x6eec('0x2'));var timeout=require(_0x6eec('0x3'));var express=require('express');var router=express[_0x6eec('0x4')]();var auth=require(_0x6eec('0x5'));var interaction=require(_0x6eec('0x6'));var config=require(_0x6eec('0x7'));var controller=require(_0x6eec('0x8'));router[_0x6eec('0x9')]('/',auth['isAuthenticated'](),controller[_0x6eec('0xa')]);router[_0x6eec('0x9')]('/describe',auth[_0x6eec('0xb')](),controller[_0x6eec('0xc')]);router[_0x6eec('0x9')](_0x6eec('0xd'),auth['isAuthenticated'](),controller[_0x6eec('0xe')]);router[_0x6eec('0xf')]('/',auth[_0x6eec('0xb')](),controller['create']);router['put']('/:id',auth[_0x6eec('0xb')](),controller[_0x6eec('0x10')]);router['delete']('/:id',auth[_0x6eec('0xb')](),controller['destroy']);module[_0x6eec('0x11')]=router;
\ No newline at end of file
+var _0x17ba=['describe','/:id','show','post','create','put','update','delete','destroy','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxTransferReport.controller','get','isAuthenticated','index','/describe'];(function(_0xc1badc,_0x4eb0b6){var _0x489fb5=function(_0x3e2d11){while(--_0x3e2d11){_0xc1badc['push'](_0xc1badc['shift']());}};_0x489fb5(++_0x4eb0b6);}(_0x17ba,0xab));var _0xa17b=function(_0x550259,_0x2fe38c){_0x550259=_0x550259-0x0;var _0x15f116=_0x17ba[_0x550259];return _0x15f116;};'use strict';var multer=require(_0xa17b('0x0'));var util=require(_0xa17b('0x1'));var path=require('path');var timeout=require(_0xa17b('0x2'));var express=require(_0xa17b('0x3'));var router=express[_0xa17b('0x4')]();var auth=require(_0xa17b('0x5'));var interaction=require(_0xa17b('0x6'));var config=require(_0xa17b('0x7'));var controller=require(_0xa17b('0x8'));router[_0xa17b('0x9')]('/',auth[_0xa17b('0xa')](),controller[_0xa17b('0xb')]);router[_0xa17b('0x9')](_0xa17b('0xc'),auth[_0xa17b('0xa')](),controller[_0xa17b('0xd')]);router[_0xa17b('0x9')](_0xa17b('0xe'),auth[_0xa17b('0xa')](),controller[_0xa17b('0xf')]);router[_0xa17b('0x10')]('/',auth['isAuthenticated'](),controller[_0xa17b('0x11')]);router[_0xa17b('0x12')](_0xa17b('0xe'),auth[_0xa17b('0xa')](),controller[_0xa17b('0x13')]);router[_0xa17b('0x14')](_0xa17b('0xe'),auth['isAuthenticated'](),controller[_0xa17b('0x15')]);module[_0xa17b('0x16')]=router;
\ No newline at end of file
index 235c8b4..1b755c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ad3=['update','delete','multer','util','path','connect-timeout','express','./intDeskAccount.controller','get','isAuthenticated','index','show','/:id/configurations','getConfigurations','post','create','/:id'];(function(_0x4a1bd0,_0x369f8a){var _0x1bf108=function(_0x5974bc){while(--_0x5974bc){_0x4a1bd0['push'](_0x4a1bd0['shift']());}};_0x1bf108(++_0x369f8a);}(_0x8ad3,0x112));var _0x38ad=function(_0x213da4,_0x4e962d){_0x213da4=_0x213da4-0x0;var _0x5d9d18=_0x8ad3[_0x213da4];return _0x5d9d18;};'use strict';var multer=require(_0x38ad('0x0'));var util=require(_0x38ad('0x1'));var path=require(_0x38ad('0x2'));var timeout=require(_0x38ad('0x3'));var express=require(_0x38ad('0x4'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x38ad('0x5'));router[_0x38ad('0x6')]('/',auth[_0x38ad('0x7')](),controller[_0x38ad('0x8')]);router[_0x38ad('0x6')]('/:id',auth[_0x38ad('0x7')](),controller[_0x38ad('0x9')]);router[_0x38ad('0x6')](_0x38ad('0xa'),auth[_0x38ad('0x7')](),controller[_0x38ad('0xb')]);router[_0x38ad('0x6')]('/:id/fields',auth['isAuthenticated'](),controller['getFields']);router[_0x38ad('0xc')]('/',auth['isAuthenticated'](),controller[_0x38ad('0xd')]);router[_0x38ad('0xc')](_0x38ad('0xa'),auth[_0x38ad('0x7')](),controller['addConfiguration']);router['put'](_0x38ad('0xe'),auth[_0x38ad('0x7')](),controller[_0x38ad('0xf')]);router[_0x38ad('0x10')](_0x38ad('0xe'),auth[_0x38ad('0x7')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x3e66=['../../components/interaction/service','../../config/environment','./intDeskAccount.controller','get','isAuthenticated','/:id','show','/:id/fields','getFields','post','create','/:id/configurations','addConfiguration','put','update','delete','destroy','exports','multer','path','connect-timeout','express','../../components/auth/service'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x3e66,0x154));var _0x63e6=function(_0x27f922,_0x4d0f86){_0x27f922=_0x27f922-0x0;var _0x425102=_0x3e66[_0x27f922];return _0x425102;};'use strict';var multer=require(_0x63e6('0x0'));var util=require('util');var path=require(_0x63e6('0x1'));var timeout=require(_0x63e6('0x2'));var express=require(_0x63e6('0x3'));var router=express['Router']();var auth=require(_0x63e6('0x4'));var interaction=require(_0x63e6('0x5'));var config=require(_0x63e6('0x6'));var controller=require(_0x63e6('0x7'));router[_0x63e6('0x8')]('/',auth[_0x63e6('0x9')](),controller['index']);router[_0x63e6('0x8')](_0x63e6('0xa'),auth[_0x63e6('0x9')](),controller[_0x63e6('0xb')]);router[_0x63e6('0x8')]('/:id/configurations',auth[_0x63e6('0x9')](),controller['getConfigurations']);router[_0x63e6('0x8')](_0x63e6('0xc'),auth[_0x63e6('0x9')](),controller[_0x63e6('0xd')]);router[_0x63e6('0xe')]('/',auth['isAuthenticated'](),controller[_0x63e6('0xf')]);router[_0x63e6('0xe')](_0x63e6('0x10'),auth[_0x63e6('0x9')](),controller[_0x63e6('0x11')]);router[_0x63e6('0x12')](_0x63e6('0xa'),auth[_0x63e6('0x9')](),controller[_0x63e6('0x13')]);router[_0x63e6('0x14')]('/:id',auth['isAuthenticated'](),controller[_0x63e6('0x15')]);module[_0x63e6('0x16')]=router;
\ No newline at end of file
index 398a39a..4c58dfb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1e6e=['ENUM','basic','integrationTab','newTab','STRING'];(function(_0x38fb0b,_0x23bfd1){var _0x5ca074=function(_0x4732a6){while(--_0x4732a6){_0x38fb0b['push'](_0x38fb0b['shift']());}};_0x5ca074(++_0x23bfd1);}(_0x1e6e,0x13f));var _0xe1e6=function(_0x2be8c2,_0x14a4b5){_0x2be8c2=_0x2be8c2-0x0;var _0x97f531=_0x1e6e[_0x2be8c2];return _0x97f531;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0xe1e6('0x0')]},'description':{'type':Sequelize[_0xe1e6('0x0')]},'username':{'type':Sequelize[_0xe1e6('0x0')]},'remoteUri':{'type':Sequelize[_0xe1e6('0x0')]},'authType':{'type':Sequelize[_0xe1e6('0x1')](_0xe1e6('0x2')),'defaultValue':_0xe1e6('0x2')},'password':{'type':Sequelize[_0xe1e6('0x0')]},'consumerKey':{'type':Sequelize['STRING']},'consumerSecret':{'type':Sequelize[_0xe1e6('0x0')]},'token':{'type':Sequelize['STRING']},'tokenSecret':{'type':Sequelize[_0xe1e6('0x0')]},'serverUrl':{'type':Sequelize[_0xe1e6('0x0')]},'type':{'type':Sequelize[_0xe1e6('0x1')](_0xe1e6('0x3'),_0xe1e6('0x4')),'defaultValue':_0xe1e6('0x3')}};
\ No newline at end of file
+var _0x7a7d=['newTab','sequelize','exports','STRING','ENUM','basic','integrationTab'];(function(_0x51beba,_0x202d19){var _0x167ee0=function(_0x2d5b21){while(--_0x2d5b21){_0x51beba['push'](_0x51beba['shift']());}};_0x167ee0(++_0x202d19);}(_0x7a7d,0x10b));var _0xd7a7=function(_0x5f74b8,_0x4a5e2c){_0x5f74b8=_0x5f74b8-0x0;var _0x641356=_0x7a7d[_0x5f74b8];return _0x641356;};'use strict';var Sequelize=require(_0xd7a7('0x0'));module[_0xd7a7('0x1')]={'name':{'type':Sequelize[_0xd7a7('0x2')]},'description':{'type':Sequelize[_0xd7a7('0x2')]},'username':{'type':Sequelize[_0xd7a7('0x2')]},'remoteUri':{'type':Sequelize[_0xd7a7('0x2')]},'authType':{'type':Sequelize[_0xd7a7('0x3')]('basic'),'defaultValue':_0xd7a7('0x4')},'password':{'type':Sequelize['STRING']},'consumerKey':{'type':Sequelize['STRING']},'consumerSecret':{'type':Sequelize[_0xd7a7('0x2')]},'token':{'type':Sequelize['STRING']},'tokenSecret':{'type':Sequelize[_0xd7a7('0x2')]},'serverUrl':{'type':Sequelize[_0xd7a7('0x2')]},'type':{'type':Sequelize[_0xd7a7('0x3')](_0xd7a7('0x5'),_0xd7a7('0x6')),'defaultValue':_0xd7a7('0x5')}};
\ No newline at end of file
index aa0face..23ceb3b 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(_0x3297c4,_0x4288b4){var _0xa2403=function(_0x1cfb5a){while(--_0x1cfb5a){_0x3297c4['push'](_0x3297c4['shift']());}};_0xa2403(++_0x4288b4);}(_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 _0xb10b=['includeAll','findAll','rows','show','params','intersection','include','find','create','body','update','getConfigurations','DeskConfiguration','map','nolimit','addConfiguration','findOne','AccountId','channel','Descriptions','getDescriptions','DeskField','Subjects','getFields','priority','remoteUri','authType','password','consumerKey','consumerSecret','token','tokenSecret','slice','substring','format','application/json','basic','headers','Authorization','Basic\x20%s','%s:%s','toString','base64','_embedded','entries','active','label','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','statusCode','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','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','DeskAccount,\x20%s,\x20%s','request\x20sent','debug','DeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','end','status','json','count','offset','limit','Content-Range','apply','reject','then','destroy','sendStatus','name','send','DeskAccount','rawAttributes','model','query','keys','attributes','fields','length','hasOwnProperty','order','sort','where','filters','pick','filter','type','VIRTUAL','field','merge','options'];(function(_0x1e3486,_0x1b8d6f){var _0x36e986=function(_0x2f2c99){while(--_0x2f2c99){_0x1e3486['push'](_0x1e3486['shift']());}};_0x36e986(++_0x1b8d6f);}(_0xb10b,0x12a));var _0xbb10=function(_0x98459f,_0x4dfb55){_0x98459f=_0x98459f-0x0;var _0x128f94=_0xb10b[_0x98459f];return _0x128f94;};'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'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0xbb10('0x18'));var client=jayson[_0xbb10('0x19')][_0xbb10('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x193a27,_0x442548,_0x147230){if(_0x147230){var _0x58a612=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x58a612[_0xbb10('0x1b')](_0x442548)){return _0x193a27;}else{throw new Error(_0xbb10('0x1c'));}}else{return _0x193a27;}}function respondWithRpcPromise(_0x45b9d6,_0x17fd46,_0x3df17b,_0x2f2ebf){return new BPromise(function(_0x24a57b,_0x36b5e8){var _0x3e26f4=_0x2f2ebf||client;return _0x3e26f4[_0xbb10('0x1d')](_0x45b9d6,_0x3df17b)['then'](function(_0x2eca0f){logger[_0xbb10('0x1e')](_0xbb10('0x1f'),_0x17fd46,_0xbb10('0x20'));logger[_0xbb10('0x21')](_0xbb10('0x22'),_0x17fd46,_0xbb10('0x20'),JSON[_0xbb10('0x23')](_0x2eca0f));if(_0x2eca0f[_0xbb10('0x24')]){if(_0x2eca0f[_0xbb10('0x24')]['code']===0x1f4){logger[_0xbb10('0x24')](_0xbb10('0x1f'),_0x17fd46,_0x2eca0f[_0xbb10('0x24')][_0xbb10('0x25')]);return _0x36b5e8(_0x2eca0f[_0xbb10('0x24')][_0xbb10('0x25')]);}logger['error'](_0xbb10('0x1f'),_0x17fd46,_0x2eca0f[_0xbb10('0x24')]['message']);return _0x24a57b(_0x2eca0f['error'][_0xbb10('0x25')]);}else{logger[_0xbb10('0x1e')](_0xbb10('0x1f'),_0x17fd46,_0xbb10('0x20'));_0x24a57b(_0x2eca0f[_0xbb10('0x26')][_0xbb10('0x25')]);}})[_0xbb10('0x27')](function(_0x436104){logger[_0xbb10('0x24')](_0xbb10('0x1f'),_0x17fd46,_0x436104);_0x36b5e8(_0x436104);});});}function respondWithStatusCode(_0x3ba6cd,_0x26ad93){_0x26ad93=_0x26ad93||0xcc;return function(_0x537898){if(_0x537898){return _0x3ba6cd['sendStatus'](_0x26ad93);}return _0x3ba6cd['status'](_0x26ad93)[_0xbb10('0x28')]();};}function respondWithResult(_0x3c5ae7,_0x2c89b9){_0x2c89b9=_0x2c89b9||0xc8;return function(_0x4e25ff){if(_0x4e25ff){return _0x3c5ae7[_0xbb10('0x29')](_0x2c89b9)[_0xbb10('0x2a')](_0x4e25ff);}};}function respondWithFilteredResult(_0x6ed43b,_0x1d5e95){return function(_0x1acce9){if(_0x1acce9){var _0x20d946=_0x1acce9[_0xbb10('0x2b')],_0x2a0e8b=_0x1d5e95[_0xbb10('0x2c')],_0x4aabb9=_0x1d5e95[_0xbb10('0x2c')]+_0x1d5e95[_0xbb10('0x2d')],_0x3796c7;if(_0x4aabb9>=_0x20d946){_0x4aabb9=_0x20d946;_0x3796c7=0xc8;}else{_0x3796c7=0xce;}_0x6ed43b[_0xbb10('0x29')](_0x3796c7);return _0x6ed43b['set'](_0xbb10('0x2e'),_0x2a0e8b+'-'+_0x4aabb9+'/'+_0x20d946)['json'](_0x1acce9);}return null;};}function patchUpdates(_0x448d5c){return function(_0x56f2da){try{jsonpatch[_0xbb10('0x2f')](_0x56f2da,_0x448d5c,!![]);}catch(_0x1dcc9c){return BPromise[_0xbb10('0x30')](_0x1dcc9c);}return _0x56f2da['save']();};}function saveUpdates(_0x518d47,_0x4c3744){return function(_0x34f65e){if(_0x34f65e){return _0x34f65e['update'](_0x518d47)[_0xbb10('0x31')](function(_0x37dde7){return _0x37dde7;});}return null;};}function removeEntity(_0x2f653f,_0x1c0b57){return function(_0x37a83f){if(_0x37a83f){return _0x37a83f[_0xbb10('0x32')]()[_0xbb10('0x31')](function(){_0x2f653f['status'](0xcc)[_0xbb10('0x28')]();});}};}function handleEntityNotFound(_0x1da9c9,_0x441d15){return function(_0x8c1ce6){if(!_0x8c1ce6){_0x1da9c9[_0xbb10('0x33')](0x194);}return _0x8c1ce6;};}function handleError(_0x9de708,_0x188cbd){_0x188cbd=_0x188cbd||0x1f4;return function(_0x10202c){logger[_0xbb10('0x24')](_0x10202c['stack']);if(_0x10202c[_0xbb10('0x34')]){delete _0x10202c[_0xbb10('0x34')];}_0x9de708[_0xbb10('0x29')](_0x188cbd)[_0xbb10('0x35')](_0x10202c);};}exports['index']=function(_0x111762,_0x5de37b){var _0x4e2754={},_0x3eb3cc={},_0x40c164={'count':0x0,'rows':[]};var _0x26e76a=db[_0xbb10('0x36')][_0xbb10('0x37')];_0x3eb3cc[_0xbb10('0x38')]=_['keys'](_0x26e76a);_0x3eb3cc[_0xbb10('0x39')]=_[_0xbb10('0x3a')](_0x111762['query']);_0x3eb3cc['filters']=_['intersection'](_0x3eb3cc[_0xbb10('0x38')],_0x3eb3cc[_0xbb10('0x39')]);_0x4e2754[_0xbb10('0x3b')]=_['intersection'](_0x3eb3cc[_0xbb10('0x38')],qs[_0xbb10('0x3c')](_0x111762[_0xbb10('0x39')]['fields']));_0x4e2754[_0xbb10('0x3b')]=_0x4e2754[_0xbb10('0x3b')][_0xbb10('0x3d')]?_0x4e2754[_0xbb10('0x3b')]:_0x3eb3cc['model'];if(!_0x111762[_0xbb10('0x39')][_0xbb10('0x3e')]('nolimit')){_0x4e2754[_0xbb10('0x2d')]=qs[_0xbb10('0x2d')](_0x111762[_0xbb10('0x39')][_0xbb10('0x2d')]);_0x4e2754[_0xbb10('0x2c')]=qs[_0xbb10('0x2c')](_0x111762['query'][_0xbb10('0x2c')]);}_0x4e2754[_0xbb10('0x3f')]=qs[_0xbb10('0x40')](_0x111762[_0xbb10('0x39')]['sort']);_0x4e2754[_0xbb10('0x41')]=qs[_0xbb10('0x42')](_[_0xbb10('0x43')](_0x111762[_0xbb10('0x39')],_0x3eb3cc['filters']));if(_0x111762[_0xbb10('0x39')][_0xbb10('0x44')]){_0x4e2754['where']=_['merge'](_0x4e2754[_0xbb10('0x41')],{'$or':_['map'](_0x26e76a,function(_0x318984){if(_0x318984[_0xbb10('0x45')]['key']!==_0xbb10('0x46')){var _0x1d82bf={};_0x1d82bf[_0x318984[_0xbb10('0x47')]]={'$like':'%'+_0x111762['query'][_0xbb10('0x44')]+'%'};return _0x1d82bf;}})});}_0x4e2754=_[_0xbb10('0x48')]({},_0x4e2754,_0x111762[_0xbb10('0x49')]);var _0x32b729={'where':_0x4e2754[_0xbb10('0x41')]};return db[_0xbb10('0x36')][_0xbb10('0x2b')](_0x32b729)[_0xbb10('0x31')](function(_0x205bb4){_0x40c164[_0xbb10('0x2b')]=_0x205bb4;if(_0x111762[_0xbb10('0x39')][_0xbb10('0x4a')]){_0x4e2754['include']=[{'all':!![]}];}return db[_0xbb10('0x36')][_0xbb10('0x4b')](_0x4e2754);})['then'](function(_0x14e1cb){_0x40c164[_0xbb10('0x4c')]=_0x14e1cb;return _0x40c164;})[_0xbb10('0x31')](respondWithFilteredResult(_0x5de37b,_0x4e2754))[_0xbb10('0x27')](handleError(_0x5de37b,null));};exports[_0xbb10('0x4d')]=function(_0x39f0de,_0x3e06b0){var _0x5be85e={'raw':![],'where':{'id':_0x39f0de[_0xbb10('0x4e')]['id']}},_0x4a9793={};_0x4a9793[_0xbb10('0x38')]=_[_0xbb10('0x3a')](db['DeskAccount']['rawAttributes']);_0x4a9793[_0xbb10('0x39')]=_[_0xbb10('0x3a')](_0x39f0de[_0xbb10('0x39')]);_0x4a9793[_0xbb10('0x42')]=_[_0xbb10('0x4f')](_0x4a9793[_0xbb10('0x38')],_0x4a9793[_0xbb10('0x39')]);_0x5be85e[_0xbb10('0x3b')]=_[_0xbb10('0x4f')](_0x4a9793[_0xbb10('0x38')],qs['fields'](_0x39f0de['query'][_0xbb10('0x3c')]));_0x5be85e[_0xbb10('0x3b')]=_0x5be85e[_0xbb10('0x3b')][_0xbb10('0x3d')]?_0x5be85e[_0xbb10('0x3b')]:_0x4a9793[_0xbb10('0x38')];if(_0x39f0de[_0xbb10('0x39')][_0xbb10('0x4a')]){_0x5be85e[_0xbb10('0x50')]=[{'all':!![]}];}_0x5be85e=_[_0xbb10('0x48')]({},_0x5be85e,_0x39f0de[_0xbb10('0x49')]);return db[_0xbb10('0x36')][_0xbb10('0x51')](_0x5be85e)[_0xbb10('0x31')](handleEntityNotFound(_0x3e06b0,null))[_0xbb10('0x31')](respondWithResult(_0x3e06b0,null))['catch'](handleError(_0x3e06b0,null));};exports[_0xbb10('0x52')]=function(_0x5bd44d,_0x33d60a){return db[_0xbb10('0x36')][_0xbb10('0x52')](_0x5bd44d[_0xbb10('0x53')],{})[_0xbb10('0x31')](respondWithResult(_0x33d60a,0xc9))[_0xbb10('0x27')](handleError(_0x33d60a,null));};exports[_0xbb10('0x54')]=function(_0x44eec1,_0x180400){if(_0x44eec1[_0xbb10('0x53')]['id']){delete _0x44eec1[_0xbb10('0x53')]['id'];}return db[_0xbb10('0x36')][_0xbb10('0x51')]({'where':{'id':_0x44eec1[_0xbb10('0x4e')]['id']}})[_0xbb10('0x31')](handleEntityNotFound(_0x180400,null))['then'](saveUpdates(_0x44eec1[_0xbb10('0x53')],null))[_0xbb10('0x31')](respondWithResult(_0x180400,null))[_0xbb10('0x27')](handleError(_0x180400,null));};exports[_0xbb10('0x32')]=function(_0xbffa3c,_0x379d8c){return db['DeskAccount'][_0xbb10('0x51')]({'where':{'id':_0xbffa3c[_0xbb10('0x4e')]['id']}})[_0xbb10('0x31')](handleEntityNotFound(_0x379d8c,null))[_0xbb10('0x31')](removeEntity(_0x379d8c,null))[_0xbb10('0x27')](handleError(_0x379d8c,null));};exports[_0xbb10('0x55')]=function(_0x175872,_0x12ec18,_0x205e01){var _0x40c4fb={};var _0x2eb05a={};var _0x2a1ce1;var _0x16932f;return db['DeskAccount']['findOne']({'where':{'id':_0x175872[_0xbb10('0x4e')]['id']}})[_0xbb10('0x31')](handleEntityNotFound(_0x12ec18,null))[_0xbb10('0x31')](function(_0x8b0a7d){if(_0x8b0a7d){_0x2a1ce1=_0x8b0a7d;_0x2eb05a['model']=_['keys'](db[_0xbb10('0x56')][_0xbb10('0x37')]);_0x2eb05a[_0xbb10('0x39')]=_[_0xbb10('0x3a')](_0x175872[_0xbb10('0x39')]);_0x2eb05a[_0xbb10('0x42')]=_[_0xbb10('0x4f')](_0x2eb05a['model'],_0x2eb05a[_0xbb10('0x39')]);_0x40c4fb[_0xbb10('0x3b')]=_['intersection'](_0x2eb05a['model'],qs['fields'](_0x175872[_0xbb10('0x39')][_0xbb10('0x3c')]));_0x40c4fb[_0xbb10('0x3b')]=_0x40c4fb['attributes']['length']?_0x40c4fb['attributes']:_0x2eb05a[_0xbb10('0x38')];_0x40c4fb[_0xbb10('0x3f')]=qs[_0xbb10('0x40')](_0x175872['query'][_0xbb10('0x40')]);_0x40c4fb[_0xbb10('0x41')]=qs['filters'](_['pick'](_0x175872[_0xbb10('0x39')],_0x2eb05a[_0xbb10('0x42')]));if(_0x175872[_0xbb10('0x39')][_0xbb10('0x44')]){_0x40c4fb['where']=_[_0xbb10('0x48')](_0x40c4fb[_0xbb10('0x41')],{'$or':_[_0xbb10('0x57')](_0x40c4fb['attributes'],function(_0x402a01){var _0x2f05bc={};_0x2f05bc[_0x402a01]={'$like':'%'+_0x175872[_0xbb10('0x39')]['filter']+'%'};return _0x2f05bc;})});}_0x40c4fb=_[_0xbb10('0x48')]({},_0x40c4fb,_0x175872[_0xbb10('0x49')]);return _0x2a1ce1[_0xbb10('0x55')](_0x40c4fb);}})[_0xbb10('0x31')](function(_0x5e4a6e){if(_0x5e4a6e){_0x16932f=_0x5e4a6e[_0xbb10('0x3d')];if(!_0x175872[_0xbb10('0x39')][_0xbb10('0x3e')](_0xbb10('0x58'))){_0x40c4fb['limit']=qs[_0xbb10('0x2d')](_0x175872[_0xbb10('0x39')][_0xbb10('0x2d')]);_0x40c4fb[_0xbb10('0x2c')]=qs[_0xbb10('0x2c')](_0x175872[_0xbb10('0x39')][_0xbb10('0x2c')]);}return _0x2a1ce1['getConfigurations'](_0x40c4fb);}})['then'](function(_0x5acd5e){if(_0x5acd5e){return _0x5acd5e?{'count':_0x16932f,'rows':_0x5acd5e}:null;}})[_0xbb10('0x31')](respondWithResult(_0x12ec18,null))[_0xbb10('0x27')](handleError(_0x12ec18,null));};exports[_0xbb10('0x59')]=function(_0x5c9afc,_0x5cd089,_0x46f462){if(_0x5c9afc[_0xbb10('0x53')]['id']){delete _0x5c9afc[_0xbb10('0x53')]['id'];}return db[_0xbb10('0x36')][_0xbb10('0x5a')]({'where':{'id':_0x5c9afc[_0xbb10('0x4e')]['id']}})['then'](handleEntityNotFound(_0x5cd089,null))[_0xbb10('0x31')](function(_0x15fae2){if(_0x15fae2){_0x5c9afc[_0xbb10('0x53')][_0xbb10('0x5b')]=_0x15fae2['id'];_0x5c9afc[_0xbb10('0x53')]['Subjects']=integrations['getSubjects'](_0x5c9afc['body'][_0xbb10('0x5c')],_0x5c9afc[_0xbb10('0x53')][_0xbb10('0x45')]);_0x5c9afc[_0xbb10('0x53')][_0xbb10('0x5d')]=integrations[_0xbb10('0x5e')](_0x5c9afc['body'][_0xbb10('0x5c')],_0x5c9afc['body']['type']);return db['DeskConfiguration'][_0xbb10('0x52')](_0x5c9afc[_0xbb10('0x53')],{'include':[{'model':db[_0xbb10('0x5f')],'as':_0xbb10('0x60')},{'model':db['DeskField'],'as':_0xbb10('0x5d')}]});}return null;})['then'](respondWithResult(_0x5cd089,null))['catch'](handleError(_0x5cd089,null));};exports[_0xbb10('0x61')]=function(_0xfe3db0,_0x29529c,_0x2bd2ab){var _0xfa3c7c=[{'name':'priority','label':_0xbb10('0x62'),'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 _0x19fcec='';return db[_0xbb10('0x36')][_0xbb10('0x5a')]({'where':{'id':_0xfe3db0[_0xbb10('0x4e')]['id']},'attributes':['id',_0xbb10('0x63'),_0xbb10('0x64'),'username',_0xbb10('0x65'),_0xbb10('0x66'),_0xbb10('0x67'),_0xbb10('0x68'),_0xbb10('0x69')]})[_0xbb10('0x31')](handleEntityNotFound(_0x29529c,null))[_0xbb10('0x31')](function(_0x312a08){if(_0x312a08){_0x19fcec=_0x312a08['remoteUri'];var _0x428146=_0x19fcec[_0xbb10('0x6a')](-0x1);if(_0x428146==='/'){_0x19fcec=_0x19fcec[_0xbb10('0x6b')](0x0,_0x19fcec['lastIndexOf'](_0x428146));}var _0x4ee101={'method':'GET','uri':util[_0xbb10('0x6c')]('%s/custom_fields',_0x19fcec),'headers':{'Content-Type':'application/json','Accept':_0xbb10('0x6d')},'json':!![]};if(_0x312a08[_0xbb10('0x64')]===_0xbb10('0x6e')){_0x4ee101[_0xbb10('0x6f')][_0xbb10('0x70')]=util[_0xbb10('0x6c')](_0xbb10('0x71'),new Buffer(util[_0xbb10('0x6c')](_0xbb10('0x72'),_0x312a08['username'],_0x312a08[_0xbb10('0x65')]))[_0xbb10('0x73')](_0xbb10('0x74')));}return rp(_0x4ee101)[_0xbb10('0x31')](function(_0x5c8eb8){return _0xfa3c7c['concat'](_[_0xbb10('0x57')](_0x5c8eb8[_0xbb10('0x75')][_0xbb10('0x76')],function(_0x32bb25){return{'id':_0x32bb25['name'],'name':_0x32bb25[_0xbb10('0x34')],'type':_0x32bb25[_0xbb10('0x45')],'active':_0x32bb25[_0xbb10('0x77')],'label':_0x32bb25[_0xbb10('0x78')],'custom':!![]};}));});}})[_0xbb10('0x31')](function(_0x517185){return{'count':_0x517185['length'],'rows':_0x517185};})[_0xbb10('0x31')](respondWithResult(_0x29529c,null))[_0xbb10('0x27')](function(_0x22c030){var _0x5239da=_0xfe3db0[_0xbb10('0x39')][_0xbb10('0x1b')]?0x1f4:_0x22c030['statusCode']||0x1f4;logger['error'](_0xbb10('0x79'),_0xbb10('0x61'),_0x5239da,JSON[_0xbb10('0x23')](_0x22c030));delete _0x22c030['name'];if(_0x5239da===0x191){_0x5239da=0x190;}_0x29529c[_0xbb10('0x29')](_0x5239da)[_0xbb10('0x35')](_0xfe3db0[_0xbb10('0x39')][_0xbb10('0x1b')]?{'message':_0xbb10('0x7a'),'statusCode':_0x22c030[_0xbb10('0x7b')]}:_0x22c030);});};
\ No newline at end of file
index 191e989..3909c86 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1be1=['rimraf','./intDeskAccount.attributes','../../components/integrations/configuration','exports','DeskAccount','int_desk_accounts','../../config/logger','api','bluebird','request-promise','path'];(function(_0x354164,_0x4c30de){var _0x5db9a8=function(_0x319b08){while(--_0x319b08){_0x354164['push'](_0x354164['shift']());}};_0x5db9a8(++_0x4c30de);}(_0x1be1,0x192));var _0x11be=function(_0x374716,_0x2a8f2e){_0x374716=_0x374716-0x0;var _0x118483=_0x1be1[_0x374716];return _0x118483;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x11be('0x0'))(_0x11be('0x1'));var moment=require('moment');var BPromise=require(_0x11be('0x2'));var rp=require(_0x11be('0x3'));var fs=require('fs');var path=require(_0x11be('0x4'));var rimraf=require(_0x11be('0x5'));var config=require('../../config/environment');var attributes=require(_0x11be('0x6'));var integrations=require(_0x11be('0x7'));module[_0x11be('0x8')]=function(_0x479719,_0xfe8c62){return _0x479719['define'](_0x11be('0x9'),attributes,{'tableName':_0x11be('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xdace=['DeskAccount','int_desk_accounts','lodash','../../config/logger','api','moment','request-promise','path','rimraf','../../config/environment','../../components/integrations/configuration','exports','define'];(function(_0x3bb6d2,_0x26ad26){var _0x5a62c8=function(_0x205dbf){while(--_0x205dbf){_0x3bb6d2['push'](_0x3bb6d2['shift']());}};_0x5a62c8(++_0x26ad26);}(_0xdace,0xc5));var _0xedac=function(_0xf34109,_0x380779){_0xf34109=_0xf34109-0x0;var _0x570bfc=_0xdace[_0xf34109];return _0x570bfc;};'use strict';var _=require(_0xedac('0x0'));var util=require('util');var logger=require(_0xedac('0x1'))(_0xedac('0x2'));var moment=require(_0xedac('0x3'));var BPromise=require('bluebird');var rp=require(_0xedac('0x4'));var fs=require('fs');var path=require(_0xedac('0x5'));var rimraf=require(_0xedac('0x6'));var config=require(_0xedac('0x7'));var attributes=require('./intDeskAccount.attributes');var integrations=require(_0xedac('0x8'));module[_0xedac('0x9')]=function(_0x39328a,_0x5ecbd3){return _0x39328a[_0xedac('0xa')](_0xedac('0xb'),attributes,{'tableName':_0xedac('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 8d19498..43dec31 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3557=['stringify','catch','ShowDeskAccount','where','debug','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','request','then','DeskAccount,\x20%s,\x20%s','request\x20sent','DeskAccount,\x20%s,\x20%s,\x20%s','error','code','message','info','result','DeskAccount','options','raw','attributes','limit','include','map','model','GetDeskAccount'];(function(_0x24a956,_0x1a7a4f){var _0x38aac9=function(_0x12d778){while(--_0x12d778){_0x24a956['push'](_0x24a956['shift']());}};_0x38aac9(++_0x1a7a4f);}(_0x3557,0x137));var _0x7355=function(_0x14bf63,_0xdbd373){_0x14bf63=_0x14bf63-0x0;var _0x410d22=_0x3557[_0x14bf63];return _0x410d22;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x7355('0x0'));var BPromise=require(_0x7355('0x1'));var rs=require(_0x7355('0x2'));var fs=require('fs');var Redis=require(_0x7355('0x3'));var db=require(_0x7355('0x4'))['db'];var utils=require(_0x7355('0x5'));var logger=require(_0x7355('0x6'))(_0x7355('0x7'));var config=require(_0x7355('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x7355('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2b5191,_0xa3958a,_0x96b044){return new BPromise(function(_0x2ef99b,_0x1fcf24){return client[_0x7355('0xa')](_0x2b5191,_0x96b044)[_0x7355('0xb')](function(_0x15093d){logger['info'](_0x7355('0xc'),_0xa3958a,_0x7355('0xd'));logger['debug'](_0x7355('0xe'),_0xa3958a,_0x7355('0xd'),JSON['stringify'](_0x15093d));if(_0x15093d[_0x7355('0xf')]){if(_0x15093d[_0x7355('0xf')][_0x7355('0x10')]===0x1f4){logger[_0x7355('0xf')](_0x7355('0xc'),_0xa3958a,_0x15093d['error']['message']);return _0x1fcf24(_0x15093d[_0x7355('0xf')][_0x7355('0x11')]);}logger[_0x7355('0xf')](_0x7355('0xc'),_0xa3958a,_0x15093d[_0x7355('0xf')][_0x7355('0x11')]);return _0x2ef99b(_0x15093d[_0x7355('0xf')][_0x7355('0x11')]);}else{logger[_0x7355('0x12')]('DeskAccount,\x20%s,\x20%s',_0xa3958a,_0x7355('0xd'));_0x2ef99b(_0x15093d[_0x7355('0x13')]['message']);}})['catch'](function(_0x259d69){logger['error']('DeskAccount,\x20%s,\x20%s',_0xa3958a,_0x259d69);_0x1fcf24(_0x259d69);});});}exports['GetDeskAccount']=function(_0x32412e){var _0x10471c=this;return new Promise(function(_0xb111a,_0x1ad64){return db[_0x7355('0x14')]['findAll']({'raw':_0x32412e[_0x7355('0x15')]?_0x32412e['options'][_0x7355('0x16')]===undefined?!![]:![]:!![],'where':_0x32412e['options']?_0x32412e[_0x7355('0x15')]['where']||null:null,'attributes':_0x32412e['options']?_0x32412e[_0x7355('0x15')][_0x7355('0x17')]||null:null,'limit':_0x32412e[_0x7355('0x15')]?_0x32412e[_0x7355('0x15')][_0x7355('0x18')]||null:null,'include':_0x32412e[_0x7355('0x15')]?_0x32412e[_0x7355('0x15')][_0x7355('0x19')]?_[_0x7355('0x1a')](_0x32412e[_0x7355('0x15')][_0x7355('0x19')],function(_0x18507c){return{'model':db[_0x18507c[_0x7355('0x1b')]],'as':_0x18507c['as'],'attributes':_0x18507c[_0x7355('0x17')],'include':_0x18507c[_0x7355('0x19')]?_[_0x7355('0x1a')](_0x18507c['include'],function(_0x28fde6){return{'model':db[_0x28fde6[_0x7355('0x1b')]],'as':_0x28fde6['as'],'attributes':_0x28fde6['attributes'],'include':_0x28fde6[_0x7355('0x19')]?_['map'](_0x28fde6[_0x7355('0x19')],function(_0x2c38f6){return{'model':db[_0x2c38f6[_0x7355('0x1b')]],'as':_0x2c38f6['as'],'attributes':_0x2c38f6[_0x7355('0x17')]};}):[]};}):[]};}):[]:[]})[_0x7355('0xb')](function(_0x14e68f){logger['info'](_0x7355('0x1c'),_0x32412e);logger['debug'](_0x7355('0x1c'),_0x32412e,JSON[_0x7355('0x1d')](_0x14e68f));_0xb111a(_0x14e68f);})[_0x7355('0x1e')](function(_0xe04de){logger[_0x7355('0xf')]('GetDeskAccount',_0xe04de[_0x7355('0x11')],_0x32412e);_0x1ad64(_0x10471c[_0x7355('0xf')](0x1f4,_0xe04de[_0x7355('0x11')]));});});};exports[_0x7355('0x1f')]=function(_0x50a696){var _0x10a04e=this;return new Promise(function(_0x247497,_0x22f240){return db[_0x7355('0x14')]['find']({'raw':_0x50a696['options']?_0x50a696[_0x7355('0x15')][_0x7355('0x16')]===undefined?!![]:![]:!![],'where':_0x50a696['options']?_0x50a696[_0x7355('0x15')][_0x7355('0x20')]||null:null,'attributes':_0x50a696[_0x7355('0x15')]?_0x50a696[_0x7355('0x15')][_0x7355('0x17')]||null:null,'include':_0x50a696['options']?_0x50a696[_0x7355('0x15')][_0x7355('0x19')]?_[_0x7355('0x1a')](_0x50a696[_0x7355('0x15')]['include'],function(_0x445192){return{'model':db[_0x445192['model']],'as':_0x445192['as'],'attributes':_0x445192[_0x7355('0x17')],'include':_0x445192[_0x7355('0x19')]?_[_0x7355('0x1a')](_0x445192[_0x7355('0x19')],function(_0x57a9fa){return{'model':db[_0x57a9fa[_0x7355('0x1b')]],'as':_0x57a9fa['as'],'attributes':_0x57a9fa[_0x7355('0x17')],'include':_0x57a9fa['include']?_[_0x7355('0x1a')](_0x57a9fa[_0x7355('0x19')],function(_0x2064b9){return{'model':db[_0x2064b9[_0x7355('0x1b')]],'as':_0x2064b9['as'],'attributes':_0x2064b9['attributes']};}):[]};}):[]};}):[]:[]})[_0x7355('0xb')](function(_0x393cdf){logger[_0x7355('0x12')](_0x7355('0x1f'),_0x50a696);logger[_0x7355('0x21')](_0x7355('0x1f'),_0x50a696,JSON[_0x7355('0x1d')](_0x393cdf));_0x247497(_0x393cdf);})['catch'](function(_0x21d725){logger[_0x7355('0xf')](_0x7355('0x1f'),_0x21d725['message'],_0x50a696);_0x22f240(_0x10a04e[_0x7355('0xf')](0x1f4,_0x21d725[_0x7355('0x11')]));});});};
\ No newline at end of file
+var _0x0bf7=['lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','http','request','then','info','debug','request\x20sent','stringify','error','code','DeskAccount,\x20%s,\x20%s','message','catch','GetDeskAccount','findAll','options','raw','where','limit','include','map','model','attributes','ShowDeskAccount','DeskAccount','find'];(function(_0x5608a3,_0x5b33c5){var _0x1ed50a=function(_0x959171){while(--_0x959171){_0x5608a3['push'](_0x5608a3['shift']());}};_0x1ed50a(++_0x5b33c5);}(_0x0bf7,0x14a));var _0x70bf=function(_0x207ce8,_0x363217){_0x207ce8=_0x207ce8-0x0;var _0x4469a2=_0x0bf7[_0x207ce8];return _0x4469a2;};'use strict';var _=require(_0x70bf('0x0'));var util=require('util');var moment=require(_0x70bf('0x1'));var BPromise=require(_0x70bf('0x2'));var rs=require(_0x70bf('0x3'));var fs=require('fs');var Redis=require(_0x70bf('0x4'));var db=require(_0x70bf('0x5'))['db'];var utils=require(_0x70bf('0x6'));var logger=require('../../config/logger')(_0x70bf('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client'][_0x70bf('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x410444,_0x12c90d,_0x24b8b0){return new BPromise(function(_0x2ba2ce,_0x140739){return client[_0x70bf('0x9')](_0x410444,_0x24b8b0)[_0x70bf('0xa')](function(_0x70693f){logger[_0x70bf('0xb')]('DeskAccount,\x20%s,\x20%s',_0x12c90d,'request\x20sent');logger[_0x70bf('0xc')]('DeskAccount,\x20%s,\x20%s,\x20%s',_0x12c90d,_0x70bf('0xd'),JSON[_0x70bf('0xe')](_0x70693f));if(_0x70693f[_0x70bf('0xf')]){if(_0x70693f[_0x70bf('0xf')][_0x70bf('0x10')]===0x1f4){logger['error'](_0x70bf('0x11'),_0x12c90d,_0x70693f[_0x70bf('0xf')][_0x70bf('0x12')]);return _0x140739(_0x70693f['error'][_0x70bf('0x12')]);}logger['error']('DeskAccount,\x20%s,\x20%s',_0x12c90d,_0x70693f[_0x70bf('0xf')][_0x70bf('0x12')]);return _0x2ba2ce(_0x70693f['error'][_0x70bf('0x12')]);}else{logger['info'](_0x70bf('0x11'),_0x12c90d,'request\x20sent');_0x2ba2ce(_0x70693f['result'][_0x70bf('0x12')]);}})[_0x70bf('0x13')](function(_0x1734d6){logger[_0x70bf('0xf')](_0x70bf('0x11'),_0x12c90d,_0x1734d6);_0x140739(_0x1734d6);});});}exports[_0x70bf('0x14')]=function(_0x4ecd00){var _0x2bcf03=this;return new Promise(function(_0x3bf356,_0x43e325){return db['DeskAccount'][_0x70bf('0x15')]({'raw':_0x4ecd00['options']?_0x4ecd00[_0x70bf('0x16')][_0x70bf('0x17')]===undefined?!![]:![]:!![],'where':_0x4ecd00['options']?_0x4ecd00[_0x70bf('0x16')][_0x70bf('0x18')]||null:null,'attributes':_0x4ecd00['options']?_0x4ecd00[_0x70bf('0x16')]['attributes']||null:null,'limit':_0x4ecd00[_0x70bf('0x16')]?_0x4ecd00['options'][_0x70bf('0x19')]||null:null,'include':_0x4ecd00[_0x70bf('0x16')]?_0x4ecd00[_0x70bf('0x16')][_0x70bf('0x1a')]?_[_0x70bf('0x1b')](_0x4ecd00['options'][_0x70bf('0x1a')],function(_0xb20a35){return{'model':db[_0xb20a35[_0x70bf('0x1c')]],'as':_0xb20a35['as'],'attributes':_0xb20a35['attributes'],'include':_0xb20a35[_0x70bf('0x1a')]?_[_0x70bf('0x1b')](_0xb20a35[_0x70bf('0x1a')],function(_0x54ffd6){return{'model':db[_0x54ffd6[_0x70bf('0x1c')]],'as':_0x54ffd6['as'],'attributes':_0x54ffd6['attributes'],'include':_0x54ffd6['include']?_[_0x70bf('0x1b')](_0x54ffd6[_0x70bf('0x1a')],function(_0x1d9896){return{'model':db[_0x1d9896[_0x70bf('0x1c')]],'as':_0x1d9896['as'],'attributes':_0x1d9896[_0x70bf('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x70bf('0xa')](function(_0x102a12){logger[_0x70bf('0xb')]('GetDeskAccount',_0x4ecd00);logger[_0x70bf('0xc')](_0x70bf('0x14'),_0x4ecd00,JSON[_0x70bf('0xe')](_0x102a12));_0x3bf356(_0x102a12);})[_0x70bf('0x13')](function(_0xe9bbaf){logger[_0x70bf('0xf')](_0x70bf('0x14'),_0xe9bbaf[_0x70bf('0x12')],_0x4ecd00);_0x43e325(_0x2bcf03[_0x70bf('0xf')](0x1f4,_0xe9bbaf[_0x70bf('0x12')]));});});};exports[_0x70bf('0x1e')]=function(_0x17acbf){var _0x2df8d7=this;return new Promise(function(_0x397e76,_0x11eb12){return db[_0x70bf('0x1f')][_0x70bf('0x20')]({'raw':_0x17acbf[_0x70bf('0x16')]?_0x17acbf[_0x70bf('0x16')][_0x70bf('0x17')]===undefined?!![]:![]:!![],'where':_0x17acbf[_0x70bf('0x16')]?_0x17acbf['options'][_0x70bf('0x18')]||null:null,'attributes':_0x17acbf[_0x70bf('0x16')]?_0x17acbf[_0x70bf('0x16')][_0x70bf('0x1d')]||null:null,'include':_0x17acbf[_0x70bf('0x16')]?_0x17acbf[_0x70bf('0x16')][_0x70bf('0x1a')]?_[_0x70bf('0x1b')](_0x17acbf[_0x70bf('0x16')]['include'],function(_0x2b4c1e){return{'model':db[_0x2b4c1e[_0x70bf('0x1c')]],'as':_0x2b4c1e['as'],'attributes':_0x2b4c1e['attributes'],'include':_0x2b4c1e[_0x70bf('0x1a')]?_[_0x70bf('0x1b')](_0x2b4c1e['include'],function(_0x5b2a78){return{'model':db[_0x5b2a78['model']],'as':_0x5b2a78['as'],'attributes':_0x5b2a78[_0x70bf('0x1d')],'include':_0x5b2a78[_0x70bf('0x1a')]?_[_0x70bf('0x1b')](_0x5b2a78[_0x70bf('0x1a')],function(_0x43f5a8){return{'model':db[_0x43f5a8[_0x70bf('0x1c')]],'as':_0x43f5a8['as'],'attributes':_0x43f5a8[_0x70bf('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x70bf('0xa')](function(_0x32dfd4){logger[_0x70bf('0xb')](_0x70bf('0x1e'),_0x17acbf);logger[_0x70bf('0xc')](_0x70bf('0x1e'),_0x17acbf,JSON['stringify'](_0x32dfd4));_0x397e76(_0x32dfd4);})[_0x70bf('0x13')](function(_0x47ce21){logger[_0x70bf('0xf')](_0x70bf('0x1e'),_0x47ce21[_0x70bf('0x12')],_0x17acbf);_0x11eb12(_0x2df8d7[_0x70bf('0xf')](0x1f4,_0x47ce21['message']));});});};
\ No newline at end of file
index f972794..07e814e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x165b=['index','/:id','show','/:id/fields','/:id/subjects','getSubjects','getDescriptions','/:id/tags','put','update','delete','exports','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated'];(function(_0x252328,_0x4c22f0){var _0xaa85b7=function(_0x2623d0){while(--_0x2623d0){_0x252328['push'](_0x252328['shift']());}};_0xaa85b7(++_0x4c22f0);}(_0x165b,0x1c1));var _0xb165=function(_0x5e875a,_0x3850a1){_0x5e875a=_0x5e875a-0x0;var _0xb5eb05=_0x165b[_0x5e875a];return _0xb5eb05;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xb165('0x0'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xb165('0x1')]();var auth=require(_0xb165('0x2'));var interaction=require(_0xb165('0x3'));var config=require(_0xb165('0x4'));var controller=require('./intDeskConfiguration.controller');router[_0xb165('0x5')]('/',auth[_0xb165('0x6')](),controller[_0xb165('0x7')]);router[_0xb165('0x5')](_0xb165('0x8'),auth[_0xb165('0x6')](),controller[_0xb165('0x9')]);router[_0xb165('0x5')](_0xb165('0xa'),auth[_0xb165('0x6')](),controller['getFields']);router['get'](_0xb165('0xb'),auth[_0xb165('0x6')](),controller[_0xb165('0xc')]);router['get']('/:id/descriptions',auth[_0xb165('0x6')](),controller[_0xb165('0xd')]);router['get'](_0xb165('0xe'),auth[_0xb165('0x6')](),controller['getTags']);router['post']('/',auth[_0xb165('0x6')](),controller['create']);router['post'](_0xb165('0xe'),auth[_0xb165('0x6')](),controller['setTags']);router[_0xb165('0xf')](_0xb165('0x8'),auth[_0xb165('0x6')](),controller[_0xb165('0x10')]);router[_0xb165('0x11')](_0xb165('0x8'),auth[_0xb165('0x6')](),controller['destroy']);module[_0xb165('0x12')]=router;
\ No newline at end of file
+var _0xcb83=['/:id/subjects','/:id/descriptions','getDescriptions','/:id/tags','getTags','post','create','setTags','put','update','delete','multer','util','path','connect-timeout','Router','./intDeskConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields'];(function(_0x58b8af,_0x46afbc){var _0x2ab974=function(_0x2d753e){while(--_0x2d753e){_0x58b8af['push'](_0x58b8af['shift']());}};_0x2ab974(++_0x46afbc);}(_0xcb83,0x136));var _0x3cb8=function(_0x4c8411,_0x4ab1a3){_0x4c8411=_0x4c8411-0x0;var _0x24a20a=_0xcb83[_0x4c8411];return _0x24a20a;};'use strict';var multer=require(_0x3cb8('0x0'));var util=require(_0x3cb8('0x1'));var path=require(_0x3cb8('0x2'));var timeout=require(_0x3cb8('0x3'));var express=require('express');var router=express[_0x3cb8('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x3cb8('0x5'));router[_0x3cb8('0x6')]('/',auth[_0x3cb8('0x7')](),controller[_0x3cb8('0x8')]);router[_0x3cb8('0x6')](_0x3cb8('0x9'),auth[_0x3cb8('0x7')](),controller[_0x3cb8('0xa')]);router['get'](_0x3cb8('0xb'),auth[_0x3cb8('0x7')](),controller['getFields']);router[_0x3cb8('0x6')](_0x3cb8('0xc'),auth[_0x3cb8('0x7')](),controller['getSubjects']);router[_0x3cb8('0x6')](_0x3cb8('0xd'),auth['isAuthenticated'](),controller[_0x3cb8('0xe')]);router[_0x3cb8('0x6')](_0x3cb8('0xf'),auth[_0x3cb8('0x7')](),controller[_0x3cb8('0x10')]);router[_0x3cb8('0x11')]('/',auth[_0x3cb8('0x7')](),controller[_0x3cb8('0x12')]);router[_0x3cb8('0x11')]('/:id/tags',auth['isAuthenticated'](),controller[_0x3cb8('0x13')]);router[_0x3cb8('0x14')](_0x3cb8('0x9'),auth['isAuthenticated'](),controller[_0x3cb8('0x15')]);router[_0x3cb8('0x16')]('/:id',auth[_0x3cb8('0x7')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 6bfaac7..77101e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6fd4=['STRING','sequelize','exports'];(function(_0x1ee293,_0x465cda){var _0x161342=function(_0xf08e2f){while(--_0xf08e2f){_0x1ee293['push'](_0x1ee293['shift']());}};_0x161342(++_0x465cda);}(_0x6fd4,0x19c));var _0x46fd=function(_0x5c4d0b,_0x1293a7){_0x5c4d0b=_0x5c4d0b-0x0;var _0xb61057=_0x6fd4[_0x5c4d0b];return _0xb61057;};'use strict';var Sequelize=require(_0x46fd('0x0'));module[_0x46fd('0x1')]={'name':{'type':Sequelize[_0x46fd('0x2')]},'description':{'type':Sequelize[_0x46fd('0x2')]}};
\ No newline at end of file
+var _0xbfc5=['STRING'];(function(_0x5c2e3e,_0x26ecd3){var _0x53f64a=function(_0x2b5df8){while(--_0x2b5df8){_0x5c2e3e['push'](_0x5c2e3e['shift']());}};_0x53f64a(++_0x26ecd3);}(_0xbfc5,0x175));var _0x5bfc=function(_0x5d81a0,_0x8eaf63){_0x5d81a0=_0x5d81a0-0x0;var _0x531dd2=_0xbfc5[_0x5d81a0];return _0x531dd2;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0x5bfc('0x0')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index d447528..0c37dd0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0e9f=['setTags','ids','html-pdf','eml-format','fast-json-patch','bluebird','path','sox','ejs','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../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~!@#$%^&-_=+[{]}.','then','info','DeskConfiguration,\x20%s,\x20%s','debug','DeskConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','code','error','message','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','name','send','index','DeskConfiguration','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','params','length','find','create','body','getFields','findOne','DeskField','order','nolimit','getSubjects','getDescriptions','getTags'];(function(_0x5f4118,_0x43b9eb){var _0x21bc32=function(_0x2dba1b){while(--_0x2dba1b){_0x5f4118['push'](_0x5f4118['shift']());}};_0x21bc32(++_0x43b9eb);}(_0x0e9f,0x116));var _0xf0e9=function(_0x4d7707,_0x9784ca){_0x4d7707=_0x4d7707-0x0;var _0x5d3421=_0x0e9f[_0x4d7707];return _0x5d3421;};'use strict';var pdf=require(_0xf0e9('0x0'));var emlformat=require(_0xf0e9('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xf0e9('0x2'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xf0e9('0x3'));var Mustache=require('mustache');var util=require('util');var path=require(_0xf0e9('0x4'));var sox=require(_0xf0e9('0x5'));var csv=require('to-csv');var ejs=require(_0xf0e9('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0xf0e9('0x7'));var crypto=require(_0xf0e9('0x8'));var jsforce=require(_0xf0e9('0x9'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xf0e9('0xa'));var Papa=require(_0xf0e9('0xb'));var Redis=require(_0xf0e9('0xc'));var authService=require('../../components/auth/service');var qs=require(_0xf0e9('0xd'));var hardwareService=require(_0xf0e9('0xe'));var logger=require(_0xf0e9('0xf'))('api');var utils=require(_0xf0e9('0x10'));var config=require(_0xf0e9('0x11'));var db=require(_0xf0e9('0x12'))['db'];var jayson=require(_0xf0e9('0x13'));var client=jayson['client'][_0xf0e9('0x14')]({'port':0x232a});function checkPasswordPattern(_0x541cd6,_0x1461af,_0x36ddf3){if(_0x36ddf3){var _0x5733e9=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5733e9[_0xf0e9('0x15')](_0x1461af)){return _0x541cd6;}else{throw new Error(_0xf0e9('0x16'));}}else{return _0x541cd6;}}function respondWithRpcPromise(_0x261100,_0x1b87cf,_0x18da61,_0x273510){return new BPromise(function(_0x5c7787,_0x933fea){var _0x1eb36f=_0x273510||client;return _0x1eb36f['request'](_0x261100,_0x18da61)[_0xf0e9('0x17')](function(_0xcf4be0){logger[_0xf0e9('0x18')](_0xf0e9('0x19'),_0x1b87cf,'request\x20sent');logger[_0xf0e9('0x1a')](_0xf0e9('0x1b'),_0x1b87cf,_0xf0e9('0x1c'),JSON[_0xf0e9('0x1d')](_0xcf4be0));if(_0xcf4be0['error']){if(_0xcf4be0['error'][_0xf0e9('0x1e')]===0x1f4){logger[_0xf0e9('0x1f')](_0xf0e9('0x19'),_0x1b87cf,_0xcf4be0['error']['message']);return _0x933fea(_0xcf4be0[_0xf0e9('0x1f')][_0xf0e9('0x20')]);}logger['error'](_0xf0e9('0x19'),_0x1b87cf,_0xcf4be0['error'][_0xf0e9('0x20')]);return _0x5c7787(_0xcf4be0[_0xf0e9('0x1f')]['message']);}else{logger['info'](_0xf0e9('0x19'),_0x1b87cf,_0xf0e9('0x1c'));_0x5c7787(_0xcf4be0['result'][_0xf0e9('0x20')]);}})[_0xf0e9('0x21')](function(_0x52612e){logger[_0xf0e9('0x1f')](_0xf0e9('0x19'),_0x1b87cf,_0x52612e);_0x933fea(_0x52612e);});});}function respondWithStatusCode(_0x4c0d73,_0x297936){_0x297936=_0x297936||0xcc;return function(_0x423dd1){if(_0x423dd1){return _0x4c0d73[_0xf0e9('0x22')](_0x297936);}return _0x4c0d73[_0xf0e9('0x23')](_0x297936)[_0xf0e9('0x24')]();};}function respondWithResult(_0x25eacb,_0x330080){_0x330080=_0x330080||0xc8;return function(_0x4d4bc8){if(_0x4d4bc8){return _0x25eacb['status'](_0x330080)[_0xf0e9('0x25')](_0x4d4bc8);}};}function respondWithFilteredResult(_0x4f9e96,_0x553788){return function(_0x5aac7f){if(_0x5aac7f){var _0x8b5167=_0x5aac7f[_0xf0e9('0x26')],_0x8fd443=_0x553788[_0xf0e9('0x27')],_0x5620a5=_0x553788['offset']+_0x553788[_0xf0e9('0x28')],_0x258927;if(_0x5620a5>=_0x8b5167){_0x5620a5=_0x8b5167;_0x258927=0xc8;}else{_0x258927=0xce;}_0x4f9e96[_0xf0e9('0x23')](_0x258927);return _0x4f9e96[_0xf0e9('0x29')](_0xf0e9('0x2a'),_0x8fd443+'-'+_0x5620a5+'/'+_0x8b5167)[_0xf0e9('0x25')](_0x5aac7f);}return null;};}function patchUpdates(_0xf90eea){return function(_0x15603d){try{jsonpatch[_0xf0e9('0x2b')](_0x15603d,_0xf90eea,!![]);}catch(_0x4957df){return BPromise[_0xf0e9('0x2c')](_0x4957df);}return _0x15603d[_0xf0e9('0x2d')]();};}function saveUpdates(_0x5c4a31,_0x4822c9){return function(_0x25452f){if(_0x25452f){return _0x25452f[_0xf0e9('0x2e')](_0x5c4a31)['then'](function(_0x35402d){return _0x35402d;});}return null;};}function removeEntity(_0x10ae6c,_0x92e4b2){return function(_0x3772de){if(_0x3772de){return _0x3772de[_0xf0e9('0x2f')]()[_0xf0e9('0x17')](function(){_0x10ae6c[_0xf0e9('0x23')](0xcc)[_0xf0e9('0x24')]();});}};}function handleEntityNotFound(_0x4ff3fe,_0x44edcf){return function(_0x2dc765){if(!_0x2dc765){_0x4ff3fe['sendStatus'](0x194);}return _0x2dc765;};}function handleError(_0x231f6f,_0x4a8c60){_0x4a8c60=_0x4a8c60||0x1f4;return function(_0xf2c221){logger['error'](_0xf2c221['stack']);if(_0xf2c221[_0xf0e9('0x30')]){delete _0xf2c221[_0xf0e9('0x30')];}_0x231f6f[_0xf0e9('0x23')](_0x4a8c60)[_0xf0e9('0x31')](_0xf2c221);};}exports[_0xf0e9('0x32')]=function(_0x16ae4d,_0x4b8f3d){var _0x233132={},_0x5526b9={},_0x1d35f1={'count':0x0,'rows':[]};var _0x4c6cf0=db[_0xf0e9('0x33')][_0xf0e9('0x34')];_0x5526b9[_0xf0e9('0x35')]=_[_0xf0e9('0x36')](_0x4c6cf0);_0x5526b9[_0xf0e9('0x37')]=_[_0xf0e9('0x36')](_0x16ae4d[_0xf0e9('0x37')]);_0x5526b9[_0xf0e9('0x38')]=_[_0xf0e9('0x39')](_0x5526b9[_0xf0e9('0x35')],_0x5526b9['query']);_0x233132[_0xf0e9('0x3a')]=_[_0xf0e9('0x39')](_0x5526b9['model'],qs[_0xf0e9('0x3b')](_0x16ae4d[_0xf0e9('0x37')][_0xf0e9('0x3b')]));_0x233132[_0xf0e9('0x3a')]=_0x233132[_0xf0e9('0x3a')]['length']?_0x233132[_0xf0e9('0x3a')]:_0x5526b9[_0xf0e9('0x35')];if(!_0x16ae4d['query'][_0xf0e9('0x3c')]('nolimit')){_0x233132[_0xf0e9('0x28')]=qs['limit'](_0x16ae4d[_0xf0e9('0x37')][_0xf0e9('0x28')]);_0x233132['offset']=qs[_0xf0e9('0x27')](_0x16ae4d['query']['offset']);}_0x233132['order']=qs[_0xf0e9('0x3d')](_0x16ae4d[_0xf0e9('0x37')][_0xf0e9('0x3d')]);_0x233132[_0xf0e9('0x3e')]=qs['filters'](_[_0xf0e9('0x3f')](_0x16ae4d[_0xf0e9('0x37')],_0x5526b9['filters']));if(_0x16ae4d['query'][_0xf0e9('0x40')]){_0x233132[_0xf0e9('0x3e')]=_[_0xf0e9('0x41')](_0x233132[_0xf0e9('0x3e')],{'$or':_[_0xf0e9('0x42')](_0x4c6cf0,function(_0x4973e4){if(_0x4973e4[_0xf0e9('0x43')][_0xf0e9('0x44')]!==_0xf0e9('0x45')){var _0x287467={};_0x287467[_0x4973e4[_0xf0e9('0x46')]]={'$like':'%'+_0x16ae4d[_0xf0e9('0x37')][_0xf0e9('0x40')]+'%'};return _0x287467;}})});}_0x233132=_['merge']({},_0x233132,_0x16ae4d[_0xf0e9('0x47')]);var _0x410355={'where':_0x233132[_0xf0e9('0x3e')]};return db[_0xf0e9('0x33')]['count'](_0x410355)[_0xf0e9('0x17')](function(_0x372f4b){_0x1d35f1[_0xf0e9('0x26')]=_0x372f4b;if(_0x16ae4d['query'][_0xf0e9('0x48')]){_0x233132[_0xf0e9('0x49')]=[{'all':!![]}];}return db[_0xf0e9('0x33')][_0xf0e9('0x4a')](_0x233132);})[_0xf0e9('0x17')](function(_0xe3a44f){_0x1d35f1[_0xf0e9('0x4b')]=_0xe3a44f;return _0x1d35f1;})[_0xf0e9('0x17')](respondWithFilteredResult(_0x4b8f3d,_0x233132))[_0xf0e9('0x21')](handleError(_0x4b8f3d,null));};exports[_0xf0e9('0x4c')]=function(_0x1e3655,_0x392a9a){var _0x317419={'raw':![],'where':{'id':_0x1e3655[_0xf0e9('0x4d')]['id']}},_0x26ea90={};_0x26ea90[_0xf0e9('0x35')]=_[_0xf0e9('0x36')](db[_0xf0e9('0x33')][_0xf0e9('0x34')]);_0x26ea90[_0xf0e9('0x37')]=_[_0xf0e9('0x36')](_0x1e3655[_0xf0e9('0x37')]);_0x26ea90[_0xf0e9('0x38')]=_[_0xf0e9('0x39')](_0x26ea90[_0xf0e9('0x35')],_0x26ea90[_0xf0e9('0x37')]);_0x317419['attributes']=_[_0xf0e9('0x39')](_0x26ea90[_0xf0e9('0x35')],qs['fields'](_0x1e3655[_0xf0e9('0x37')][_0xf0e9('0x3b')]));_0x317419[_0xf0e9('0x3a')]=_0x317419[_0xf0e9('0x3a')][_0xf0e9('0x4e')]?_0x317419['attributes']:_0x26ea90[_0xf0e9('0x35')];if(_0x1e3655['query'][_0xf0e9('0x48')]){_0x317419['include']=[{'all':!![]}];}_0x317419=_[_0xf0e9('0x41')]({},_0x317419,_0x1e3655[_0xf0e9('0x47')]);return db[_0xf0e9('0x33')][_0xf0e9('0x4f')](_0x317419)['then'](handleEntityNotFound(_0x392a9a,null))['then'](respondWithResult(_0x392a9a,null))[_0xf0e9('0x21')](handleError(_0x392a9a,null));};exports['create']=function(_0x4301c9,_0x284c2a){return db['DeskConfiguration'][_0xf0e9('0x50')](_0x4301c9['body'],{})[_0xf0e9('0x17')](respondWithResult(_0x284c2a,0xc9))['catch'](handleError(_0x284c2a,null));};exports[_0xf0e9('0x2e')]=function(_0x5536a5,_0x29f3fb){if(_0x5536a5[_0xf0e9('0x51')]['id']){delete _0x5536a5[_0xf0e9('0x51')]['id'];}return db[_0xf0e9('0x33')]['find']({'where':{'id':_0x5536a5[_0xf0e9('0x4d')]['id']}})['then'](handleEntityNotFound(_0x29f3fb,null))[_0xf0e9('0x17')](saveUpdates(_0x5536a5['body'],null))[_0xf0e9('0x17')](respondWithResult(_0x29f3fb,null))[_0xf0e9('0x21')](handleError(_0x29f3fb,null));};exports[_0xf0e9('0x2f')]=function(_0x21cddd,_0x5335f6){return db[_0xf0e9('0x33')]['find']({'where':{'id':_0x21cddd[_0xf0e9('0x4d')]['id']}})['then'](handleEntityNotFound(_0x5335f6,null))[_0xf0e9('0x17')](removeEntity(_0x5335f6,null))[_0xf0e9('0x21')](handleError(_0x5335f6,null));};exports[_0xf0e9('0x52')]=function(_0x1a2351,_0x54a911,_0x511ac7){var _0x337504={};var _0xc9dcf2={};var _0xaa2ec8;var _0x356a71;return db[_0xf0e9('0x33')][_0xf0e9('0x53')]({'where':{'id':_0x1a2351[_0xf0e9('0x4d')]['id']}})[_0xf0e9('0x17')](handleEntityNotFound(_0x54a911,null))[_0xf0e9('0x17')](function(_0x45d58f){if(_0x45d58f){_0xaa2ec8=_0x45d58f;_0xc9dcf2[_0xf0e9('0x35')]=_[_0xf0e9('0x36')](db[_0xf0e9('0x54')][_0xf0e9('0x34')]);_0xc9dcf2['query']=_['keys'](_0x1a2351[_0xf0e9('0x37')]);_0xc9dcf2['filters']=_[_0xf0e9('0x39')](_0xc9dcf2[_0xf0e9('0x35')],_0xc9dcf2['query']);_0x337504[_0xf0e9('0x3a')]=_[_0xf0e9('0x39')](_0xc9dcf2[_0xf0e9('0x35')],qs[_0xf0e9('0x3b')](_0x1a2351[_0xf0e9('0x37')][_0xf0e9('0x3b')]));_0x337504[_0xf0e9('0x3a')]=_0x337504[_0xf0e9('0x3a')][_0xf0e9('0x4e')]?_0x337504[_0xf0e9('0x3a')]:_0xc9dcf2['model'];_0x337504[_0xf0e9('0x55')]=qs['sort'](_0x1a2351['query'][_0xf0e9('0x3d')]);_0x337504[_0xf0e9('0x3e')]=qs[_0xf0e9('0x38')](_['pick'](_0x1a2351[_0xf0e9('0x37')],_0xc9dcf2[_0xf0e9('0x38')]));if(_0x1a2351['query']['filter']){_0x337504[_0xf0e9('0x3e')]=_[_0xf0e9('0x41')](_0x337504[_0xf0e9('0x3e')],{'$or':_[_0xf0e9('0x42')](_0x337504[_0xf0e9('0x3a')],function(_0x59f45d){var _0x49176={};_0x49176[_0x59f45d]={'$like':'%'+_0x1a2351[_0xf0e9('0x37')][_0xf0e9('0x40')]+'%'};return _0x49176;})});}_0x337504=_['merge']({},_0x337504,_0x1a2351[_0xf0e9('0x47')]);return _0xaa2ec8['getFields'](_0x337504);}})[_0xf0e9('0x17')](function(_0x19061d){if(_0x19061d){_0x356a71=_0x19061d['length'];if(!_0x1a2351[_0xf0e9('0x37')][_0xf0e9('0x3c')](_0xf0e9('0x56'))){_0x337504[_0xf0e9('0x28')]=qs[_0xf0e9('0x28')](_0x1a2351[_0xf0e9('0x37')][_0xf0e9('0x28')]);_0x337504[_0xf0e9('0x27')]=qs[_0xf0e9('0x27')](_0x1a2351[_0xf0e9('0x37')][_0xf0e9('0x27')]);}return _0xaa2ec8[_0xf0e9('0x52')](_0x337504);}})['then'](function(_0x203b8e){if(_0x203b8e){return _0x203b8e?{'count':_0x356a71,'rows':_0x203b8e}:null;}})['then'](respondWithResult(_0x54a911,null))['catch'](handleError(_0x54a911,null));};exports['getSubjects']=function(_0xa750f6,_0x2b0e05,_0x3e156e){var _0x4955a5={};var _0x2bfd7e={};var _0x490260;var _0xcd44e1;return db[_0xf0e9('0x33')][_0xf0e9('0x53')]({'where':{'id':_0xa750f6['params']['id']}})[_0xf0e9('0x17')](handleEntityNotFound(_0x2b0e05,null))[_0xf0e9('0x17')](function(_0x13f6f9){if(_0x13f6f9){_0x490260=_0x13f6f9;_0x2bfd7e[_0xf0e9('0x35')]=_[_0xf0e9('0x36')](db[_0xf0e9('0x54')][_0xf0e9('0x34')]);_0x2bfd7e[_0xf0e9('0x37')]=_['keys'](_0xa750f6[_0xf0e9('0x37')]);_0x2bfd7e['filters']=_[_0xf0e9('0x39')](_0x2bfd7e[_0xf0e9('0x35')],_0x2bfd7e['query']);_0x4955a5['attributes']=_[_0xf0e9('0x39')](_0x2bfd7e[_0xf0e9('0x35')],qs['fields'](_0xa750f6['query'][_0xf0e9('0x3b')]));_0x4955a5[_0xf0e9('0x3a')]=_0x4955a5[_0xf0e9('0x3a')][_0xf0e9('0x4e')]?_0x4955a5[_0xf0e9('0x3a')]:_0x2bfd7e[_0xf0e9('0x35')];_0x4955a5[_0xf0e9('0x55')]=qs[_0xf0e9('0x3d')](_0xa750f6[_0xf0e9('0x37')][_0xf0e9('0x3d')]);_0x4955a5[_0xf0e9('0x3e')]=qs[_0xf0e9('0x38')](_['pick'](_0xa750f6['query'],_0x2bfd7e[_0xf0e9('0x38')]));if(_0xa750f6[_0xf0e9('0x37')]['filter']){_0x4955a5[_0xf0e9('0x3e')]=_[_0xf0e9('0x41')](_0x4955a5[_0xf0e9('0x3e')],{'$or':_['map'](_0x4955a5['attributes'],function(_0x55acb2){var _0x49bc54={};_0x49bc54[_0x55acb2]={'$like':'%'+_0xa750f6[_0xf0e9('0x37')][_0xf0e9('0x40')]+'%'};return _0x49bc54;})});}_0x4955a5=_[_0xf0e9('0x41')]({},_0x4955a5,_0xa750f6[_0xf0e9('0x47')]);return _0x490260[_0xf0e9('0x57')](_0x4955a5);}})[_0xf0e9('0x17')](function(_0x52d9e9){if(_0x52d9e9){_0xcd44e1=_0x52d9e9[_0xf0e9('0x4e')];if(!_0xa750f6[_0xf0e9('0x37')]['hasOwnProperty'](_0xf0e9('0x56'))){_0x4955a5[_0xf0e9('0x28')]=qs[_0xf0e9('0x28')](_0xa750f6[_0xf0e9('0x37')][_0xf0e9('0x28')]);_0x4955a5[_0xf0e9('0x27')]=qs[_0xf0e9('0x27')](_0xa750f6['query'][_0xf0e9('0x27')]);}return _0x490260[_0xf0e9('0x57')](_0x4955a5);}})[_0xf0e9('0x17')](function(_0x568d96){if(_0x568d96){return _0x568d96?{'count':_0xcd44e1,'rows':_0x568d96}:null;}})[_0xf0e9('0x17')](respondWithResult(_0x2b0e05,null))[_0xf0e9('0x21')](handleError(_0x2b0e05,null));};exports[_0xf0e9('0x58')]=function(_0x17df88,_0x6744d7,_0x5b5836){var _0x4355eb={};var _0x28f074={};var _0x1cbd1b;var _0x26b3db;return db[_0xf0e9('0x33')][_0xf0e9('0x53')]({'where':{'id':_0x17df88[_0xf0e9('0x4d')]['id']}})['then'](handleEntityNotFound(_0x6744d7,null))[_0xf0e9('0x17')](function(_0x1e2208){if(_0x1e2208){_0x1cbd1b=_0x1e2208;_0x28f074['model']=_[_0xf0e9('0x36')](db['DeskField'][_0xf0e9('0x34')]);_0x28f074[_0xf0e9('0x37')]=_[_0xf0e9('0x36')](_0x17df88[_0xf0e9('0x37')]);_0x28f074['filters']=_['intersection'](_0x28f074[_0xf0e9('0x35')],_0x28f074['query']);_0x4355eb[_0xf0e9('0x3a')]=_[_0xf0e9('0x39')](_0x28f074[_0xf0e9('0x35')],qs[_0xf0e9('0x3b')](_0x17df88[_0xf0e9('0x37')][_0xf0e9('0x3b')]));_0x4355eb[_0xf0e9('0x3a')]=_0x4355eb[_0xf0e9('0x3a')]['length']?_0x4355eb[_0xf0e9('0x3a')]:_0x28f074['model'];_0x4355eb[_0xf0e9('0x55')]=qs['sort'](_0x17df88[_0xf0e9('0x37')][_0xf0e9('0x3d')]);_0x4355eb[_0xf0e9('0x3e')]=qs['filters'](_[_0xf0e9('0x3f')](_0x17df88['query'],_0x28f074[_0xf0e9('0x38')]));if(_0x17df88['query'][_0xf0e9('0x40')]){_0x4355eb['where']=_[_0xf0e9('0x41')](_0x4355eb[_0xf0e9('0x3e')],{'$or':_[_0xf0e9('0x42')](_0x4355eb['attributes'],function(_0x44fba6){var _0x208bd2={};_0x208bd2[_0x44fba6]={'$like':'%'+_0x17df88['query']['filter']+'%'};return _0x208bd2;})});}_0x4355eb=_['merge']({},_0x4355eb,_0x17df88[_0xf0e9('0x47')]);return _0x1cbd1b[_0xf0e9('0x58')](_0x4355eb);}})[_0xf0e9('0x17')](function(_0x278883){if(_0x278883){_0x26b3db=_0x278883[_0xf0e9('0x4e')];if(!_0x17df88['query'][_0xf0e9('0x3c')]('nolimit')){_0x4355eb['limit']=qs[_0xf0e9('0x28')](_0x17df88[_0xf0e9('0x37')][_0xf0e9('0x28')]);_0x4355eb[_0xf0e9('0x27')]=qs[_0xf0e9('0x27')](_0x17df88['query'][_0xf0e9('0x27')]);}return _0x1cbd1b['getDescriptions'](_0x4355eb);}})['then'](function(_0x5ab671){if(_0x5ab671){return _0x5ab671?{'count':_0x26b3db,'rows':_0x5ab671}:null;}})[_0xf0e9('0x17')](respondWithResult(_0x6744d7,null))['catch'](handleError(_0x6744d7,null));};exports[_0xf0e9('0x59')]=function(_0x5576ff,_0x2a9c45,_0x1e5f15){var _0x1ee3de={};var _0xc76c1d={};var _0x2330f4;var _0x30aede;return db['DeskConfiguration'][_0xf0e9('0x53')]({'where':{'id':_0x5576ff[_0xf0e9('0x4d')]['id']}})[_0xf0e9('0x17')](handleEntityNotFound(_0x2a9c45,null))[_0xf0e9('0x17')](function(_0x3d76af){if(_0x3d76af){_0x2330f4=_0x3d76af;_0xc76c1d['model']=_[_0xf0e9('0x36')](db['Tag'][_0xf0e9('0x34')]);_0xc76c1d[_0xf0e9('0x37')]=_[_0xf0e9('0x36')](_0x5576ff[_0xf0e9('0x37')]);_0xc76c1d['filters']=_[_0xf0e9('0x39')](_0xc76c1d['model'],_0xc76c1d[_0xf0e9('0x37')]);_0x1ee3de[_0xf0e9('0x3a')]=_[_0xf0e9('0x39')](_0xc76c1d['model'],qs[_0xf0e9('0x3b')](_0x5576ff[_0xf0e9('0x37')][_0xf0e9('0x3b')]));_0x1ee3de[_0xf0e9('0x3a')]=_0x1ee3de[_0xf0e9('0x3a')]['length']?_0x1ee3de['attributes']:_0xc76c1d[_0xf0e9('0x35')];_0x1ee3de[_0xf0e9('0x55')]=qs[_0xf0e9('0x3d')](_0x5576ff[_0xf0e9('0x37')]['sort']);_0x1ee3de[_0xf0e9('0x3e')]=qs[_0xf0e9('0x38')](_[_0xf0e9('0x3f')](_0x5576ff[_0xf0e9('0x37')],_0xc76c1d[_0xf0e9('0x38')]));if(_0x5576ff[_0xf0e9('0x37')]['filter']){_0x1ee3de['where']=_['merge'](_0x1ee3de['where'],{'$or':_[_0xf0e9('0x42')](_0x1ee3de[_0xf0e9('0x3a')],function(_0x3ef4b8){var _0x1b1391={};_0x1b1391[_0x3ef4b8]={'$like':'%'+_0x5576ff[_0xf0e9('0x37')]['filter']+'%'};return _0x1b1391;})});}_0x1ee3de=_[_0xf0e9('0x41')]({},_0x1ee3de,_0x5576ff['options']);return _0x2330f4[_0xf0e9('0x59')](_0x1ee3de);}})[_0xf0e9('0x17')](function(_0x6bcc79){if(_0x6bcc79){_0x30aede=_0x6bcc79[_0xf0e9('0x4e')];if(!_0x5576ff[_0xf0e9('0x37')][_0xf0e9('0x3c')](_0xf0e9('0x56'))){_0x1ee3de[_0xf0e9('0x28')]=qs['limit'](_0x5576ff[_0xf0e9('0x37')][_0xf0e9('0x28')]);_0x1ee3de[_0xf0e9('0x27')]=qs[_0xf0e9('0x27')](_0x5576ff[_0xf0e9('0x37')]['offset']);}return _0x2330f4[_0xf0e9('0x59')](_0x1ee3de);}})[_0xf0e9('0x17')](function(_0x167d4f){if(_0x167d4f){return _0x167d4f?{'count':_0x30aede,'rows':_0x167d4f}:null;}})[_0xf0e9('0x17')](respondWithResult(_0x2a9c45,null))['catch'](handleError(_0x2a9c45,null));};exports[_0xf0e9('0x5a')]=function(_0x26d8e0,_0x1d77f5,_0x546a3e){if(_0x26d8e0[_0xf0e9('0x51')]['id']){delete _0x26d8e0['body']['id'];}return db[_0xf0e9('0x33')][_0xf0e9('0x53')]({'where':{'id':_0x26d8e0[_0xf0e9('0x4d')]['id']}})[_0xf0e9('0x17')](handleEntityNotFound(_0x1d77f5,null))[_0xf0e9('0x17')](function(_0x1f9602){if(_0x1f9602){return _0x1f9602['setTags'](_0x26d8e0[_0xf0e9('0x51')][_0xf0e9('0x5b')]||[]);}return null;})[_0xf0e9('0x17')](respondWithResult(_0x1d77f5,null))[_0xf0e9('0x21')](handleError(_0x1d77f5,null));};
\ No newline at end of file
+var _0x3657=['params','find','create','body','DeskField','map','getFields','hasOwnProperty','getSubjects','findOne','getDescriptions','getTags','Tag','setTags','ids','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','util','path','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../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~!@#$%^&-_=+[{]}.','request','then','DeskConfiguration,\x20%s,\x20%s','request\x20sent','DeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','end','json','offset','status','Content-Range','apply','reject','save','update','destroy','stack','name','index','DeskConfiguration','rawAttributes','model','keys','query','intersection','attributes','fields','length','nolimit','limit','order','sort','where','filters','pick','filter','merge','type','key','VIRTUAL','field','options','count','includeAll','findAll','rows'];(function(_0x2ffec9,_0x33ca3f){var _0x3155a8=function(_0x2fb71e){while(--_0x2fb71e){_0x2ffec9['push'](_0x2ffec9['shift']());}};_0x3155a8(++_0x33ca3f);}(_0x3657,0x183));var _0x7365=function(_0x383158,_0x415e43){_0x383158=_0x383158-0x0;var _0x507985=_0x3657[_0x383158];return _0x507985;};'use strict';var pdf=require(_0x7365('0x0'));var emlformat=require(_0x7365('0x1'));var rimraf=require(_0x7365('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x7365('0x3'));var rp=require(_0x7365('0x4'));var moment=require(_0x7365('0x5'));var BPromise=require(_0x7365('0x6'));var Mustache=require('mustache');var util=require(_0x7365('0x7'));var path=require(_0x7365('0x8'));var sox=require(_0x7365('0x9'));var csv=require('to-csv');var ejs=require(_0x7365('0xa'));var fs=require('fs');var _=require(_0x7365('0xb'));var squel=require(_0x7365('0xc'));var crypto=require('crypto');var jsforce=require(_0x7365('0xd'));var deskjs=require(_0x7365('0xe'));var toCsv=require(_0x7365('0xf'));var querystring=require('querystring');var Papa=require(_0x7365('0x10'));var Redis=require(_0x7365('0x11'));var authService=require('../../components/auth/service');var qs=require(_0x7365('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x7365('0x13'))(_0x7365('0x14'));var utils=require(_0x7365('0x15'));var config=require('../../config/environment');var db=require(_0x7365('0x16'))['db'];var jayson=require(_0x7365('0x17'));var client=jayson['client'][_0x7365('0x18')]({'port':0x232a});function checkPasswordPattern(_0x33b248,_0x30c2a1,_0x12b0da){if(_0x12b0da){var _0x418368=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x418368['test'](_0x30c2a1)){return _0x33b248;}else{throw new Error(_0x7365('0x19'));}}else{return _0x33b248;}}function respondWithRpcPromise(_0x52f309,_0x39faaf,_0x5b5db3,_0x4a14a0){return new BPromise(function(_0xf753a3,_0x21548f){var _0x26cf47=_0x4a14a0||client;return _0x26cf47[_0x7365('0x1a')](_0x52f309,_0x5b5db3)[_0x7365('0x1b')](function(_0x4dcc2c){logger['info'](_0x7365('0x1c'),_0x39faaf,_0x7365('0x1d'));logger['debug'](_0x7365('0x1e'),_0x39faaf,_0x7365('0x1d'),JSON[_0x7365('0x1f')](_0x4dcc2c));if(_0x4dcc2c[_0x7365('0x20')]){if(_0x4dcc2c[_0x7365('0x20')][_0x7365('0x21')]===0x1f4){logger[_0x7365('0x20')](_0x7365('0x1c'),_0x39faaf,_0x4dcc2c[_0x7365('0x20')][_0x7365('0x22')]);return _0x21548f(_0x4dcc2c[_0x7365('0x20')][_0x7365('0x22')]);}logger[_0x7365('0x20')](_0x7365('0x1c'),_0x39faaf,_0x4dcc2c[_0x7365('0x20')][_0x7365('0x22')]);return _0xf753a3(_0x4dcc2c[_0x7365('0x20')]['message']);}else{logger['info'](_0x7365('0x1c'),_0x39faaf,_0x7365('0x1d'));_0xf753a3(_0x4dcc2c[_0x7365('0x23')][_0x7365('0x22')]);}})[_0x7365('0x24')](function(_0x431fa1){logger['error'](_0x7365('0x1c'),_0x39faaf,_0x431fa1);_0x21548f(_0x431fa1);});});}function respondWithStatusCode(_0x2408ee,_0x3c9e48){_0x3c9e48=_0x3c9e48||0xcc;return function(_0x28f960){if(_0x28f960){return _0x2408ee[_0x7365('0x25')](_0x3c9e48);}return _0x2408ee['status'](_0x3c9e48)[_0x7365('0x26')]();};}function respondWithResult(_0x354490,_0x36669d){_0x36669d=_0x36669d||0xc8;return function(_0x353fcb){if(_0x353fcb){return _0x354490['status'](_0x36669d)[_0x7365('0x27')](_0x353fcb);}};}function respondWithFilteredResult(_0xf4cdb6,_0x4a29f0){return function(_0x4dceeb){if(_0x4dceeb){var _0x324530=_0x4dceeb['count'],_0x41a04f=_0x4a29f0[_0x7365('0x28')],_0x4e5242=_0x4a29f0[_0x7365('0x28')]+_0x4a29f0['limit'],_0x3d1e72;if(_0x4e5242>=_0x324530){_0x4e5242=_0x324530;_0x3d1e72=0xc8;}else{_0x3d1e72=0xce;}_0xf4cdb6[_0x7365('0x29')](_0x3d1e72);return _0xf4cdb6['set'](_0x7365('0x2a'),_0x41a04f+'-'+_0x4e5242+'/'+_0x324530)[_0x7365('0x27')](_0x4dceeb);}return null;};}function patchUpdates(_0x29277b){return function(_0x2af1fc){try{jsonpatch[_0x7365('0x2b')](_0x2af1fc,_0x29277b,!![]);}catch(_0xbdb78c){return BPromise[_0x7365('0x2c')](_0xbdb78c);}return _0x2af1fc[_0x7365('0x2d')]();};}function saveUpdates(_0x1be2d7,_0x15a97e){return function(_0x433c38){if(_0x433c38){return _0x433c38[_0x7365('0x2e')](_0x1be2d7)['then'](function(_0x1753f4){return _0x1753f4;});}return null;};}function removeEntity(_0x4c9db2,_0x2ab314){return function(_0x385d23){if(_0x385d23){return _0x385d23[_0x7365('0x2f')]()['then'](function(){_0x4c9db2['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x15a0ba,_0x17daf3){return function(_0x1811c2){if(!_0x1811c2){_0x15a0ba[_0x7365('0x25')](0x194);}return _0x1811c2;};}function handleError(_0x471e72,_0xa78678){_0xa78678=_0xa78678||0x1f4;return function(_0x4a031d){logger[_0x7365('0x20')](_0x4a031d[_0x7365('0x30')]);if(_0x4a031d[_0x7365('0x31')]){delete _0x4a031d['name'];}_0x471e72['status'](_0xa78678)['send'](_0x4a031d);};}exports[_0x7365('0x32')]=function(_0x15386c,_0x26d3a9){var _0x1eae55={},_0x4303a9={},_0x43e589={'count':0x0,'rows':[]};var _0x2046f6=db[_0x7365('0x33')][_0x7365('0x34')];_0x4303a9[_0x7365('0x35')]=_[_0x7365('0x36')](_0x2046f6);_0x4303a9['query']=_['keys'](_0x15386c[_0x7365('0x37')]);_0x4303a9['filters']=_[_0x7365('0x38')](_0x4303a9[_0x7365('0x35')],_0x4303a9['query']);_0x1eae55[_0x7365('0x39')]=_['intersection'](_0x4303a9[_0x7365('0x35')],qs[_0x7365('0x3a')](_0x15386c[_0x7365('0x37')][_0x7365('0x3a')]));_0x1eae55[_0x7365('0x39')]=_0x1eae55[_0x7365('0x39')][_0x7365('0x3b')]?_0x1eae55[_0x7365('0x39')]:_0x4303a9[_0x7365('0x35')];if(!_0x15386c[_0x7365('0x37')]['hasOwnProperty'](_0x7365('0x3c'))){_0x1eae55['limit']=qs['limit'](_0x15386c[_0x7365('0x37')][_0x7365('0x3d')]);_0x1eae55[_0x7365('0x28')]=qs[_0x7365('0x28')](_0x15386c[_0x7365('0x37')][_0x7365('0x28')]);}_0x1eae55[_0x7365('0x3e')]=qs['sort'](_0x15386c[_0x7365('0x37')][_0x7365('0x3f')]);_0x1eae55[_0x7365('0x40')]=qs[_0x7365('0x41')](_[_0x7365('0x42')](_0x15386c[_0x7365('0x37')],_0x4303a9[_0x7365('0x41')]));if(_0x15386c[_0x7365('0x37')][_0x7365('0x43')]){_0x1eae55[_0x7365('0x40')]=_[_0x7365('0x44')](_0x1eae55['where'],{'$or':_['map'](_0x2046f6,function(_0x5aaf16){if(_0x5aaf16[_0x7365('0x45')][_0x7365('0x46')]!==_0x7365('0x47')){var _0x37bdb3={};_0x37bdb3[_0x5aaf16[_0x7365('0x48')]]={'$like':'%'+_0x15386c[_0x7365('0x37')][_0x7365('0x43')]+'%'};return _0x37bdb3;}})});}_0x1eae55=_['merge']({},_0x1eae55,_0x15386c[_0x7365('0x49')]);var _0x1d6b3b={'where':_0x1eae55['where']};return db[_0x7365('0x33')]['count'](_0x1d6b3b)['then'](function(_0x1f2d8a){_0x43e589[_0x7365('0x4a')]=_0x1f2d8a;if(_0x15386c[_0x7365('0x37')][_0x7365('0x4b')]){_0x1eae55['include']=[{'all':!![]}];}return db[_0x7365('0x33')][_0x7365('0x4c')](_0x1eae55);})[_0x7365('0x1b')](function(_0x20d0e6){_0x43e589[_0x7365('0x4d')]=_0x20d0e6;return _0x43e589;})[_0x7365('0x1b')](respondWithFilteredResult(_0x26d3a9,_0x1eae55))['catch'](handleError(_0x26d3a9,null));};exports['show']=function(_0x1be432,_0x40bb20){var _0x5a327b={'raw':![],'where':{'id':_0x1be432[_0x7365('0x4e')]['id']}},_0x4a8855={};_0x4a8855[_0x7365('0x35')]=_[_0x7365('0x36')](db[_0x7365('0x33')][_0x7365('0x34')]);_0x4a8855[_0x7365('0x37')]=_[_0x7365('0x36')](_0x1be432['query']);_0x4a8855[_0x7365('0x41')]=_[_0x7365('0x38')](_0x4a8855[_0x7365('0x35')],_0x4a8855[_0x7365('0x37')]);_0x5a327b[_0x7365('0x39')]=_[_0x7365('0x38')](_0x4a8855['model'],qs[_0x7365('0x3a')](_0x1be432[_0x7365('0x37')][_0x7365('0x3a')]));_0x5a327b[_0x7365('0x39')]=_0x5a327b[_0x7365('0x39')]['length']?_0x5a327b['attributes']:_0x4a8855[_0x7365('0x35')];if(_0x1be432[_0x7365('0x37')][_0x7365('0x4b')]){_0x5a327b['include']=[{'all':!![]}];}_0x5a327b=_[_0x7365('0x44')]({},_0x5a327b,_0x1be432[_0x7365('0x49')]);return db[_0x7365('0x33')][_0x7365('0x4f')](_0x5a327b)['then'](handleEntityNotFound(_0x40bb20,null))[_0x7365('0x1b')](respondWithResult(_0x40bb20,null))[_0x7365('0x24')](handleError(_0x40bb20,null));};exports[_0x7365('0x50')]=function(_0x3ec79c,_0x61b60a){return db[_0x7365('0x33')][_0x7365('0x50')](_0x3ec79c[_0x7365('0x51')],{})[_0x7365('0x1b')](respondWithResult(_0x61b60a,0xc9))[_0x7365('0x24')](handleError(_0x61b60a,null));};exports[_0x7365('0x2e')]=function(_0x2b8ca2,_0x3873cf){if(_0x2b8ca2['body']['id']){delete _0x2b8ca2[_0x7365('0x51')]['id'];}return db[_0x7365('0x33')][_0x7365('0x4f')]({'where':{'id':_0x2b8ca2[_0x7365('0x4e')]['id']}})['then'](handleEntityNotFound(_0x3873cf,null))[_0x7365('0x1b')](saveUpdates(_0x2b8ca2['body'],null))[_0x7365('0x1b')](respondWithResult(_0x3873cf,null))[_0x7365('0x24')](handleError(_0x3873cf,null));};exports[_0x7365('0x2f')]=function(_0x48951d,_0x16f045){return db['DeskConfiguration'][_0x7365('0x4f')]({'where':{'id':_0x48951d[_0x7365('0x4e')]['id']}})[_0x7365('0x1b')](handleEntityNotFound(_0x16f045,null))['then'](removeEntity(_0x16f045,null))['catch'](handleError(_0x16f045,null));};exports['getFields']=function(_0x4c520e,_0xa21420,_0x39cdb2){var _0x1f2bc0={};var _0xb67f38={};var _0x358bcb;var _0x178a51;return db[_0x7365('0x33')]['findOne']({'where':{'id':_0x4c520e[_0x7365('0x4e')]['id']}})[_0x7365('0x1b')](handleEntityNotFound(_0xa21420,null))[_0x7365('0x1b')](function(_0x3c5233){if(_0x3c5233){_0x358bcb=_0x3c5233;_0xb67f38[_0x7365('0x35')]=_['keys'](db[_0x7365('0x52')][_0x7365('0x34')]);_0xb67f38[_0x7365('0x37')]=_[_0x7365('0x36')](_0x4c520e[_0x7365('0x37')]);_0xb67f38[_0x7365('0x41')]=_[_0x7365('0x38')](_0xb67f38[_0x7365('0x35')],_0xb67f38[_0x7365('0x37')]);_0x1f2bc0[_0x7365('0x39')]=_['intersection'](_0xb67f38['model'],qs[_0x7365('0x3a')](_0x4c520e['query'][_0x7365('0x3a')]));_0x1f2bc0[_0x7365('0x39')]=_0x1f2bc0[_0x7365('0x39')][_0x7365('0x3b')]?_0x1f2bc0[_0x7365('0x39')]:_0xb67f38[_0x7365('0x35')];_0x1f2bc0[_0x7365('0x3e')]=qs['sort'](_0x4c520e[_0x7365('0x37')][_0x7365('0x3f')]);_0x1f2bc0[_0x7365('0x40')]=qs[_0x7365('0x41')](_[_0x7365('0x42')](_0x4c520e[_0x7365('0x37')],_0xb67f38[_0x7365('0x41')]));if(_0x4c520e[_0x7365('0x37')][_0x7365('0x43')]){_0x1f2bc0[_0x7365('0x40')]=_['merge'](_0x1f2bc0[_0x7365('0x40')],{'$or':_[_0x7365('0x53')](_0x1f2bc0[_0x7365('0x39')],function(_0xe4e9da){var _0x443a6e={};_0x443a6e[_0xe4e9da]={'$like':'%'+_0x4c520e[_0x7365('0x37')][_0x7365('0x43')]+'%'};return _0x443a6e;})});}_0x1f2bc0=_[_0x7365('0x44')]({},_0x1f2bc0,_0x4c520e[_0x7365('0x49')]);return _0x358bcb[_0x7365('0x54')](_0x1f2bc0);}})[_0x7365('0x1b')](function(_0x41ab39){if(_0x41ab39){_0x178a51=_0x41ab39['length'];if(!_0x4c520e[_0x7365('0x37')][_0x7365('0x55')]('nolimit')){_0x1f2bc0[_0x7365('0x3d')]=qs['limit'](_0x4c520e[_0x7365('0x37')][_0x7365('0x3d')]);_0x1f2bc0[_0x7365('0x28')]=qs[_0x7365('0x28')](_0x4c520e[_0x7365('0x37')][_0x7365('0x28')]);}return _0x358bcb[_0x7365('0x54')](_0x1f2bc0);}})[_0x7365('0x1b')](function(_0x4c3ba5){if(_0x4c3ba5){return _0x4c3ba5?{'count':_0x178a51,'rows':_0x4c3ba5}:null;}})[_0x7365('0x1b')](respondWithResult(_0xa21420,null))[_0x7365('0x24')](handleError(_0xa21420,null));};exports[_0x7365('0x56')]=function(_0x2955be,_0x2dc8c7,_0x305148){var _0x1f6ca6={};var _0x1907b0={};var _0x296457;var _0x1a2135;return db[_0x7365('0x33')][_0x7365('0x57')]({'where':{'id':_0x2955be[_0x7365('0x4e')]['id']}})['then'](handleEntityNotFound(_0x2dc8c7,null))['then'](function(_0x4c90a3){if(_0x4c90a3){_0x296457=_0x4c90a3;_0x1907b0[_0x7365('0x35')]=_[_0x7365('0x36')](db[_0x7365('0x52')][_0x7365('0x34')]);_0x1907b0[_0x7365('0x37')]=_[_0x7365('0x36')](_0x2955be[_0x7365('0x37')]);_0x1907b0[_0x7365('0x41')]=_[_0x7365('0x38')](_0x1907b0[_0x7365('0x35')],_0x1907b0[_0x7365('0x37')]);_0x1f6ca6[_0x7365('0x39')]=_[_0x7365('0x38')](_0x1907b0[_0x7365('0x35')],qs['fields'](_0x2955be['query'][_0x7365('0x3a')]));_0x1f6ca6[_0x7365('0x39')]=_0x1f6ca6['attributes'][_0x7365('0x3b')]?_0x1f6ca6[_0x7365('0x39')]:_0x1907b0[_0x7365('0x35')];_0x1f6ca6[_0x7365('0x3e')]=qs[_0x7365('0x3f')](_0x2955be[_0x7365('0x37')][_0x7365('0x3f')]);_0x1f6ca6['where']=qs['filters'](_[_0x7365('0x42')](_0x2955be[_0x7365('0x37')],_0x1907b0['filters']));if(_0x2955be['query'][_0x7365('0x43')]){_0x1f6ca6[_0x7365('0x40')]=_[_0x7365('0x44')](_0x1f6ca6['where'],{'$or':_[_0x7365('0x53')](_0x1f6ca6[_0x7365('0x39')],function(_0xba697a){var _0x46d3d7={};_0x46d3d7[_0xba697a]={'$like':'%'+_0x2955be['query'][_0x7365('0x43')]+'%'};return _0x46d3d7;})});}_0x1f6ca6=_['merge']({},_0x1f6ca6,_0x2955be[_0x7365('0x49')]);return _0x296457[_0x7365('0x56')](_0x1f6ca6);}})[_0x7365('0x1b')](function(_0x231e9e){if(_0x231e9e){_0x1a2135=_0x231e9e[_0x7365('0x3b')];if(!_0x2955be['query'][_0x7365('0x55')]('nolimit')){_0x1f6ca6[_0x7365('0x3d')]=qs['limit'](_0x2955be['query']['limit']);_0x1f6ca6[_0x7365('0x28')]=qs[_0x7365('0x28')](_0x2955be[_0x7365('0x37')][_0x7365('0x28')]);}return _0x296457['getSubjects'](_0x1f6ca6);}})[_0x7365('0x1b')](function(_0x3b4160){if(_0x3b4160){return _0x3b4160?{'count':_0x1a2135,'rows':_0x3b4160}:null;}})['then'](respondWithResult(_0x2dc8c7,null))['catch'](handleError(_0x2dc8c7,null));};exports[_0x7365('0x58')]=function(_0x5c2153,_0x35a17f,_0x4517db){var _0x2d5fa9={};var _0x3308b7={};var _0x2b2883;var _0x3245f3;return db[_0x7365('0x33')]['findOne']({'where':{'id':_0x5c2153['params']['id']}})[_0x7365('0x1b')](handleEntityNotFound(_0x35a17f,null))[_0x7365('0x1b')](function(_0x460010){if(_0x460010){_0x2b2883=_0x460010;_0x3308b7[_0x7365('0x35')]=_[_0x7365('0x36')](db[_0x7365('0x52')]['rawAttributes']);_0x3308b7[_0x7365('0x37')]=_[_0x7365('0x36')](_0x5c2153['query']);_0x3308b7[_0x7365('0x41')]=_[_0x7365('0x38')](_0x3308b7[_0x7365('0x35')],_0x3308b7[_0x7365('0x37')]);_0x2d5fa9[_0x7365('0x39')]=_['intersection'](_0x3308b7[_0x7365('0x35')],qs[_0x7365('0x3a')](_0x5c2153[_0x7365('0x37')][_0x7365('0x3a')]));_0x2d5fa9[_0x7365('0x39')]=_0x2d5fa9[_0x7365('0x39')]['length']?_0x2d5fa9[_0x7365('0x39')]:_0x3308b7[_0x7365('0x35')];_0x2d5fa9[_0x7365('0x3e')]=qs[_0x7365('0x3f')](_0x5c2153['query'][_0x7365('0x3f')]);_0x2d5fa9['where']=qs['filters'](_[_0x7365('0x42')](_0x5c2153['query'],_0x3308b7['filters']));if(_0x5c2153[_0x7365('0x37')][_0x7365('0x43')]){_0x2d5fa9[_0x7365('0x40')]=_[_0x7365('0x44')](_0x2d5fa9['where'],{'$or':_[_0x7365('0x53')](_0x2d5fa9[_0x7365('0x39')],function(_0x15b8b4){var _0x358ad9={};_0x358ad9[_0x15b8b4]={'$like':'%'+_0x5c2153['query']['filter']+'%'};return _0x358ad9;})});}_0x2d5fa9=_[_0x7365('0x44')]({},_0x2d5fa9,_0x5c2153[_0x7365('0x49')]);return _0x2b2883['getDescriptions'](_0x2d5fa9);}})['then'](function(_0x5d4c40){if(_0x5d4c40){_0x3245f3=_0x5d4c40[_0x7365('0x3b')];if(!_0x5c2153['query'][_0x7365('0x55')]('nolimit')){_0x2d5fa9[_0x7365('0x3d')]=qs['limit'](_0x5c2153['query'][_0x7365('0x3d')]);_0x2d5fa9[_0x7365('0x28')]=qs[_0x7365('0x28')](_0x5c2153[_0x7365('0x37')][_0x7365('0x28')]);}return _0x2b2883['getDescriptions'](_0x2d5fa9);}})[_0x7365('0x1b')](function(_0x44c0a9){if(_0x44c0a9){return _0x44c0a9?{'count':_0x3245f3,'rows':_0x44c0a9}:null;}})['then'](respondWithResult(_0x35a17f,null))['catch'](handleError(_0x35a17f,null));};exports[_0x7365('0x59')]=function(_0x125160,_0x5a7034,_0x13d5b6){var _0x5b9a05={};var _0x52f2c5={};var _0x35c7e1;var _0x1cbadf;return db[_0x7365('0x33')][_0x7365('0x57')]({'where':{'id':_0x125160['params']['id']}})['then'](handleEntityNotFound(_0x5a7034,null))[_0x7365('0x1b')](function(_0x13f778){if(_0x13f778){_0x35c7e1=_0x13f778;_0x52f2c5[_0x7365('0x35')]=_['keys'](db[_0x7365('0x5a')][_0x7365('0x34')]);_0x52f2c5['query']=_['keys'](_0x125160[_0x7365('0x37')]);_0x52f2c5[_0x7365('0x41')]=_[_0x7365('0x38')](_0x52f2c5[_0x7365('0x35')],_0x52f2c5[_0x7365('0x37')]);_0x5b9a05['attributes']=_[_0x7365('0x38')](_0x52f2c5[_0x7365('0x35')],qs[_0x7365('0x3a')](_0x125160[_0x7365('0x37')][_0x7365('0x3a')]));_0x5b9a05[_0x7365('0x39')]=_0x5b9a05[_0x7365('0x39')][_0x7365('0x3b')]?_0x5b9a05[_0x7365('0x39')]:_0x52f2c5[_0x7365('0x35')];_0x5b9a05[_0x7365('0x3e')]=qs[_0x7365('0x3f')](_0x125160[_0x7365('0x37')][_0x7365('0x3f')]);_0x5b9a05[_0x7365('0x40')]=qs[_0x7365('0x41')](_[_0x7365('0x42')](_0x125160[_0x7365('0x37')],_0x52f2c5[_0x7365('0x41')]));if(_0x125160[_0x7365('0x37')]['filter']){_0x5b9a05['where']=_[_0x7365('0x44')](_0x5b9a05[_0x7365('0x40')],{'$or':_[_0x7365('0x53')](_0x5b9a05[_0x7365('0x39')],function(_0x31beeb){var _0x3fc6aa={};_0x3fc6aa[_0x31beeb]={'$like':'%'+_0x125160['query'][_0x7365('0x43')]+'%'};return _0x3fc6aa;})});}_0x5b9a05=_[_0x7365('0x44')]({},_0x5b9a05,_0x125160['options']);return _0x35c7e1['getTags'](_0x5b9a05);}})[_0x7365('0x1b')](function(_0x4afb09){if(_0x4afb09){_0x1cbadf=_0x4afb09[_0x7365('0x3b')];if(!_0x125160[_0x7365('0x37')][_0x7365('0x55')](_0x7365('0x3c'))){_0x5b9a05[_0x7365('0x3d')]=qs[_0x7365('0x3d')](_0x125160['query'][_0x7365('0x3d')]);_0x5b9a05[_0x7365('0x28')]=qs[_0x7365('0x28')](_0x125160[_0x7365('0x37')][_0x7365('0x28')]);}return _0x35c7e1[_0x7365('0x59')](_0x5b9a05);}})['then'](function(_0x10f4e1){if(_0x10f4e1){return _0x10f4e1?{'count':_0x1cbadf,'rows':_0x10f4e1}:null;}})[_0x7365('0x1b')](respondWithResult(_0x5a7034,null))[_0x7365('0x24')](handleError(_0x5a7034,null));};exports[_0x7365('0x5b')]=function(_0x20bb45,_0x1dd8e0,_0xd76ae5){if(_0x20bb45[_0x7365('0x51')]['id']){delete _0x20bb45[_0x7365('0x51')]['id'];}return db[_0x7365('0x33')][_0x7365('0x57')]({'where':{'id':_0x20bb45[_0x7365('0x4e')]['id']}})[_0x7365('0x1b')](handleEntityNotFound(_0x1dd8e0,null))[_0x7365('0x1b')](function(_0x775195){if(_0x775195){return _0x775195[_0x7365('0x5b')](_0x20bb45[_0x7365('0x51')][_0x7365('0x5c')]||[]);}return null;})[_0x7365('0x1b')](respondWithResult(_0x1dd8e0,null))[_0x7365('0x24')](handleError(_0x1dd8e0,null));};
\ No newline at end of file
index b532adc..f6ae992 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb59b=['int_desk_configurations','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./intDeskConfiguration.attributes','exports','DeskConfiguration'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0xb59b,0x177));var _0xbb59=function(_0x405f0f,_0x213d88){_0x405f0f=_0x405f0f-0x0;var _0x590f5b=_0xb59b[_0x405f0f];return _0x590f5b;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')(_0xbb59('0x0'));var moment=require(_0xbb59('0x1'));var BPromise=require(_0xbb59('0x2'));var rp=require(_0xbb59('0x3'));var fs=require('fs');var path=require(_0xbb59('0x4'));var rimraf=require(_0xbb59('0x5'));var config=require(_0xbb59('0x6'));var attributes=require(_0xbb59('0x7'));module[_0xbb59('0x8')]=function(_0x8a6aa9,_0x5b4301){return _0x8a6aa9['define'](_0xbb59('0x9'),attributes,{'tableName':_0xbb59('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa7ed=['bluebird','request-promise','path','rimraf','../../config/environment','./intDeskConfiguration.attributes','exports','DeskConfiguration','int_desk_configurations','lodash','util','../../config/logger','api'];(function(_0x3806d0,_0x2dcea5){var _0x43813c=function(_0x1e0031){while(--_0x1e0031){_0x3806d0['push'](_0x3806d0['shift']());}};_0x43813c(++_0x2dcea5);}(_0xa7ed,0x1dd));var _0xda7e=function(_0x1fd447,_0x386d77){_0x1fd447=_0x1fd447-0x0;var _0x23961b=_0xa7ed[_0x1fd447];return _0x23961b;};'use strict';var _=require(_0xda7e('0x0'));var util=require(_0xda7e('0x1'));var logger=require(_0xda7e('0x2'))(_0xda7e('0x3'));var moment=require('moment');var BPromise=require(_0xda7e('0x4'));var rp=require(_0xda7e('0x5'));var fs=require('fs');var path=require(_0xda7e('0x6'));var rimraf=require(_0xda7e('0x7'));var config=require(_0xda7e('0x8'));var attributes=require(_0xda7e('0x9'));module[_0xda7e('0xa')]=function(_0x3efbfe,_0x3d8c98){return _0x3efbfe['define'](_0xda7e('0xb'),attributes,{'tableName':_0xda7e('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 603e40e..2be2db0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ef6=['result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','request','then','info','DeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','DeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message'];(function(_0x4986e2,_0x9940d3){var _0x55b178=function(_0x1299f7){while(--_0x1299f7){_0x4986e2['push'](_0x4986e2['shift']());}};_0x55b178(++_0x9940d3);}(_0x8ef6,0xf2));var _0x68ef=function(_0x59dc11,_0x468cf8){_0x59dc11=_0x59dc11-0x0;var _0x243095=_0x8ef6[_0x59dc11];return _0x243095;};'use strict';var _=require(_0x68ef('0x0'));var util=require(_0x68ef('0x1'));var moment=require(_0x68ef('0x2'));var BPromise=require(_0x68ef('0x3'));var rs=require(_0x68ef('0x4'));var fs=require('fs');var Redis=require(_0x68ef('0x5'));var db=require(_0x68ef('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0x68ef('0x7'))(_0x68ef('0x8'));var config=require(_0x68ef('0x9'));var jayson=require(_0x68ef('0xa'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x3c2ff3,_0x4740e8,_0x2de776){return new BPromise(function(_0x4eb5eb,_0x228967){return client[_0x68ef('0xb')](_0x3c2ff3,_0x2de776)[_0x68ef('0xc')](function(_0x22ae26){logger[_0x68ef('0xd')](_0x68ef('0xe'),_0x4740e8,_0x68ef('0xf'));logger[_0x68ef('0x10')](_0x68ef('0x11'),_0x4740e8,_0x68ef('0xf'),JSON[_0x68ef('0x12')](_0x22ae26));if(_0x22ae26[_0x68ef('0x13')]){if(_0x22ae26['error'][_0x68ef('0x14')]===0x1f4){logger[_0x68ef('0x13')](_0x68ef('0xe'),_0x4740e8,_0x22ae26[_0x68ef('0x13')][_0x68ef('0x15')]);return _0x228967(_0x22ae26[_0x68ef('0x13')]['message']);}logger[_0x68ef('0x13')](_0x68ef('0xe'),_0x4740e8,_0x22ae26[_0x68ef('0x13')]['message']);return _0x4eb5eb(_0x22ae26[_0x68ef('0x13')][_0x68ef('0x15')]);}else{logger[_0x68ef('0xd')]('DeskConfiguration,\x20%s,\x20%s',_0x4740e8,_0x68ef('0xf'));_0x4eb5eb(_0x22ae26[_0x68ef('0x16')][_0x68ef('0x15')]);}})[_0x68ef('0x17')](function(_0x5c4456){logger[_0x68ef('0x13')]('DeskConfiguration,\x20%s,\x20%s',_0x4740e8,_0x5c4456);_0x228967(_0x5c4456);});});}
\ No newline at end of file
+var _0xe2fe=['then','info','DeskConfiguration,\x20%s,\x20%s','stringify','error','message','request\x20sent','result','lodash','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','request'];(function(_0x16c857,_0x19bb0d){var _0x3e57f3=function(_0x1c7cf3){while(--_0x1c7cf3){_0x16c857['push'](_0x16c857['shift']());}};_0x3e57f3(++_0x19bb0d);}(_0xe2fe,0x86));var _0xee2f=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xe2fe[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xee2f('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xee2f('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xee2f('0x2'));var db=require(_0xee2f('0x3'))['db'];var utils=require(_0xee2f('0x4'));var logger=require(_0xee2f('0x5'))(_0xee2f('0x6'));var config=require('../../config/environment');var jayson=require(_0xee2f('0x7'));var client=jayson[_0xee2f('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1533a0,_0x2e1c8c,_0x5a7975){return new BPromise(function(_0x3c4095,_0x5ea796){return client[_0xee2f('0x9')](_0x1533a0,_0x5a7975)[_0xee2f('0xa')](function(_0x53f7dd){logger[_0xee2f('0xb')](_0xee2f('0xc'),_0x2e1c8c,'request\x20sent');logger['debug']('DeskConfiguration,\x20%s,\x20%s,\x20%s',_0x2e1c8c,'request\x20sent',JSON[_0xee2f('0xd')](_0x53f7dd));if(_0x53f7dd['error']){if(_0x53f7dd['error']['code']===0x1f4){logger[_0xee2f('0xe')](_0xee2f('0xc'),_0x2e1c8c,_0x53f7dd[_0xee2f('0xe')][_0xee2f('0xf')]);return _0x5ea796(_0x53f7dd[_0xee2f('0xe')][_0xee2f('0xf')]);}logger['error'](_0xee2f('0xc'),_0x2e1c8c,_0x53f7dd['error'][_0xee2f('0xf')]);return _0x3c4095(_0x53f7dd[_0xee2f('0xe')]['message']);}else{logger[_0xee2f('0xb')](_0xee2f('0xc'),_0x2e1c8c,_0xee2f('0x10'));_0x3c4095(_0x53f7dd[_0xee2f('0x11')][_0xee2f('0xf')]);}})['catch'](function(_0x3f6372){logger['error'](_0xee2f('0xc'),_0x2e1c8c,_0x3f6372);_0x5ea796(_0x3f6372);});});}
\ No newline at end of file
index 77a73fb..505000d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9fc=['./intDeskField.controller','isAuthenticated','index','/:id','show','post','create','update','delete','destroy','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x544633,_0x3bd0c2){var _0x2d92a9=function(_0x455e04){while(--_0x455e04){_0x544633['push'](_0x544633['shift']());}};_0x2d92a9(++_0x3bd0c2);}(_0xe9fc,0x1ea));var _0xce9f=function(_0x39e283,_0x247e6b){_0x39e283=_0x39e283-0x0;var _0x7de89f=_0xe9fc[_0x39e283];return _0x7de89f;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xce9f('0x0'));var timeout=require(_0xce9f('0x1'));var express=require(_0xce9f('0x2'));var router=express[_0xce9f('0x3')]();var auth=require(_0xce9f('0x4'));var interaction=require(_0xce9f('0x5'));var config=require('../../config/environment');var controller=require(_0xce9f('0x6'));router['get']('/',auth[_0xce9f('0x7')](),controller[_0xce9f('0x8')]);router['get'](_0xce9f('0x9'),auth[_0xce9f('0x7')](),controller[_0xce9f('0xa')]);router[_0xce9f('0xb')]('/',auth['isAuthenticated'](),controller[_0xce9f('0xc')]);router['put'](_0xce9f('0x9'),auth[_0xce9f('0x7')](),controller[_0xce9f('0xd')]);router[_0xce9f('0xe')]('/:id',auth['isAuthenticated'](),controller[_0xce9f('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0xd92b=['../../components/interaction/service','../../config/environment','./intDeskField.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router'];(function(_0x1d90cb,_0x1f2289){var _0x4424a7=function(_0x3c3eb1){while(--_0x3c3eb1){_0x1d90cb['push'](_0x1d90cb['shift']());}};_0x4424a7(++_0x1f2289);}(_0xd92b,0x10b));var _0xbd92=function(_0xb2063,_0x33f65f){_0xb2063=_0xb2063-0x0;var _0x520ed3=_0xd92b[_0xb2063];return _0x520ed3;};'use strict';var multer=require(_0xbd92('0x0'));var util=require(_0xbd92('0x1'));var path=require(_0xbd92('0x2'));var timeout=require(_0xbd92('0x3'));var express=require(_0xbd92('0x4'));var router=express[_0xbd92('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0xbd92('0x6'));var config=require(_0xbd92('0x7'));var controller=require(_0xbd92('0x8'));router[_0xbd92('0x9')]('/',auth[_0xbd92('0xa')](),controller[_0xbd92('0xb')]);router[_0xbd92('0x9')](_0xbd92('0xc'),auth[_0xbd92('0xa')](),controller[_0xbd92('0xd')]);router[_0xbd92('0xe')]('/',auth[_0xbd92('0xa')](),controller[_0xbd92('0xf')]);router[_0xbd92('0x10')](_0xbd92('0xc'),auth[_0xbd92('0xa')](),controller[_0xbd92('0x11')]);router[_0xbd92('0x12')]('/:id',auth['isAuthenticated'](),controller[_0xbd92('0x13')]);module[_0xbd92('0x14')]=router;
\ No newline at end of file
index 82cda0b..75b0705 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['keyValue','string','STRING','variable','BOOLEAN','sequelize','exports','customVariable'];(function(_0x49a3cf,_0xd8f676){var _0xb18f75=function(_0x29e487){while(--_0x29e487){_0x49a3cf['push'](_0x49a3cf['shift']());}};_0xb18f75(++_0xd8f676);}(_0xd8b0,0xad));var _0x0d8b=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xd8b0[_0x20a584];return _0x4b41a8;};'use strict';var Sequelize=require(_0x0d8b('0x0'));module[_0x0d8b('0x1')]={'type':{'type':Sequelize['ENUM']('string','variable',_0x0d8b('0x2'),_0x0d8b('0x3')),'defaultValue':_0x0d8b('0x4')},'content':{'type':Sequelize[_0x0d8b('0x5')]},'key':{'type':Sequelize[_0x0d8b('0x5')]},'keyType':{'type':Sequelize['ENUM']('string',_0x0d8b('0x6'),_0x0d8b('0x2'))},'keyContent':{'type':Sequelize[_0x0d8b('0x5')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize[_0x0d8b('0x5')]},'customField':{'type':Sequelize[_0x0d8b('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x4522=['STRING','customVariable','BOOLEAN','ENUM','string','variable','keyValue'];(function(_0x2bf5d5,_0x366ece){var _0x505ee3=function(_0x5b1192){while(--_0x5b1192){_0x2bf5d5['push'](_0x2bf5d5['shift']());}};_0x505ee3(++_0x366ece);}(_0x4522,0x1a0));var _0x2452=function(_0x9abfa4,_0x1808dd){_0x9abfa4=_0x9abfa4-0x0;var _0x2c88b2=_0x4522[_0x9abfa4];return _0x2c88b2;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0x2452('0x0')](_0x2452('0x1'),_0x2452('0x2'),'customVariable',_0x2452('0x3')),'defaultValue':_0x2452('0x1')},'content':{'type':Sequelize[_0x2452('0x4')]},'key':{'type':Sequelize[_0x2452('0x4')]},'keyType':{'type':Sequelize[_0x2452('0x0')](_0x2452('0x1'),_0x2452('0x2'),_0x2452('0x5'))},'keyContent':{'type':Sequelize[_0x2452('0x4')]},'idField':{'type':Sequelize[_0x2452('0x4')]},'nameField':{'type':Sequelize[_0x2452('0x4')]},'customField':{'type':Sequelize[_0x2452('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x2452('0x4')]}};
\ No newline at end of file
index 317476b..52711bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x28e3=['sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','error','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','filter','type','key','VIRTUAL','field','DeskField','count','includeAll','include','findAll','rows','params','merge','options','find','catch','create','body','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb'];(function(_0x55f8b4,_0x43f30d){var _0x2475f9=function(_0xdd6f4a){while(--_0xdd6f4a){_0x55f8b4['push'](_0x55f8b4['shift']());}};_0x2475f9(++_0x43f30d);}(_0x28e3,0x106));var _0x328e=function(_0x334841,_0x2bbc4c){_0x334841=_0x334841-0x0;var _0x5beb4b=_0x28e3[_0x334841];return _0x5beb4b;};'use strict';var pdf=require(_0x328e('0x0'));var emlformat=require(_0x328e('0x1'));var rimraf=require(_0x328e('0x2'));var zipdir=require(_0x328e('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x328e('0x4'));var moment=require(_0x328e('0x5'));var BPromise=require(_0x328e('0x6'));var Mustache=require(_0x328e('0x7'));var util=require(_0x328e('0x8'));var path=require(_0x328e('0x9'));var sox=require(_0x328e('0xa'));var csv=require(_0x328e('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x328e('0xc'));var jsforce=require(_0x328e('0xd'));var deskjs=require(_0x328e('0xe'));var toCsv=require(_0x328e('0xb'));var querystring=require(_0x328e('0xf'));var Papa=require('papaparse');var Redis=require(_0x328e('0x10'));var authService=require(_0x328e('0x11'));var qs=require(_0x328e('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')('api');var utils=require(_0x328e('0x13'));var config=require(_0x328e('0x14'));var db=require(_0x328e('0x15'))['db'];function respondWithStatusCode(_0x1c7294,_0x32e15b){_0x32e15b=_0x32e15b||0xcc;return function(_0x45cda0){if(_0x45cda0){return _0x1c7294[_0x328e('0x16')](_0x32e15b);}return _0x1c7294[_0x328e('0x17')](_0x32e15b)[_0x328e('0x18')]();};}function respondWithResult(_0x96f79a,_0xb252e5){_0xb252e5=_0xb252e5||0xc8;return function(_0x4abd75){if(_0x4abd75){return _0x96f79a[_0x328e('0x17')](_0xb252e5)[_0x328e('0x19')](_0x4abd75);}};}function respondWithFilteredResult(_0x1552ce,_0x1a035d){return function(_0x29f8bf){if(_0x29f8bf){var _0x397b16=_0x29f8bf['count'],_0x2a8096=_0x1a035d[_0x328e('0x1a')],_0x3c5b37=_0x1a035d[_0x328e('0x1a')]+_0x1a035d[_0x328e('0x1b')],_0x20901e;if(_0x3c5b37>=_0x397b16){_0x3c5b37=_0x397b16;_0x20901e=0xc8;}else{_0x20901e=0xce;}_0x1552ce[_0x328e('0x17')](_0x20901e);return _0x1552ce[_0x328e('0x1c')](_0x328e('0x1d'),_0x2a8096+'-'+_0x3c5b37+'/'+_0x397b16)[_0x328e('0x19')](_0x29f8bf);}return null;};}function patchUpdates(_0x47b194){return function(_0x43c2c3){try{jsonpatch[_0x328e('0x1e')](_0x43c2c3,_0x47b194,!![]);}catch(_0x448f5a){return BPromise[_0x328e('0x1f')](_0x448f5a);}return _0x43c2c3[_0x328e('0x20')]();};}function saveUpdates(_0x5bf2a7,_0x62e84d){return function(_0x1c5551){if(_0x1c5551){return _0x1c5551[_0x328e('0x21')](_0x5bf2a7)['then'](function(_0x35da3b){return _0x35da3b;});}return null;};}function removeEntity(_0x3bafb1,_0x39a9e2){return function(_0x273b45){if(_0x273b45){return _0x273b45[_0x328e('0x22')]()[_0x328e('0x23')](function(){_0x3bafb1[_0x328e('0x17')](0xcc)[_0x328e('0x18')]();});}};}function handleEntityNotFound(_0x3878d7,_0x5cbc7f){return function(_0x4e1d4c){if(!_0x4e1d4c){_0x3878d7[_0x328e('0x16')](0x194);}return _0x4e1d4c;};}function handleError(_0x388bc0,_0x2ccb67){_0x2ccb67=_0x2ccb67||0x1f4;return function(_0x14202c){logger[_0x328e('0x24')](_0x14202c['stack']);if(_0x14202c[_0x328e('0x25')]){delete _0x14202c['name'];}_0x388bc0[_0x328e('0x17')](_0x2ccb67)[_0x328e('0x26')](_0x14202c);};}exports[_0x328e('0x27')]=function(_0x2fab5a,_0x108f0d){var _0x4d4a58={},_0x4ebda7={},_0x3bd897={'count':0x0,'rows':[]};var _0x54e70a=db['DeskField'][_0x328e('0x28')];_0x4ebda7[_0x328e('0x29')]=_[_0x328e('0x2a')](_0x54e70a);_0x4ebda7[_0x328e('0x2b')]=_[_0x328e('0x2a')](_0x2fab5a['query']);_0x4ebda7[_0x328e('0x2c')]=_[_0x328e('0x2d')](_0x4ebda7[_0x328e('0x29')],_0x4ebda7[_0x328e('0x2b')]);_0x4d4a58[_0x328e('0x2e')]=_['intersection'](_0x4ebda7[_0x328e('0x29')],qs[_0x328e('0x2f')](_0x2fab5a[_0x328e('0x2b')][_0x328e('0x2f')]));_0x4d4a58[_0x328e('0x2e')]=_0x4d4a58[_0x328e('0x2e')][_0x328e('0x30')]?_0x4d4a58[_0x328e('0x2e')]:_0x4ebda7[_0x328e('0x29')];if(!_0x2fab5a['query']['hasOwnProperty'](_0x328e('0x31'))){_0x4d4a58[_0x328e('0x1b')]=qs['limit'](_0x2fab5a['query']['limit']);_0x4d4a58[_0x328e('0x1a')]=qs[_0x328e('0x1a')](_0x2fab5a[_0x328e('0x2b')][_0x328e('0x1a')]);}_0x4d4a58[_0x328e('0x32')]=qs[_0x328e('0x33')](_0x2fab5a[_0x328e('0x2b')]['sort']);_0x4d4a58[_0x328e('0x34')]=qs['filters'](_['pick'](_0x2fab5a[_0x328e('0x2b')],_0x4ebda7['filters']));if(_0x2fab5a[_0x328e('0x2b')][_0x328e('0x35')]){_0x4d4a58[_0x328e('0x34')]=_['merge'](_0x4d4a58[_0x328e('0x34')],{'$or':_['map'](_0x54e70a,function(_0x2ba70c){if(_0x2ba70c[_0x328e('0x36')][_0x328e('0x37')]!==_0x328e('0x38')){var _0x561a7d={};_0x561a7d[_0x2ba70c[_0x328e('0x39')]]={'$like':'%'+_0x2fab5a['query'][_0x328e('0x35')]+'%'};return _0x561a7d;}})});}_0x4d4a58=_['merge']({},_0x4d4a58,_0x2fab5a['options']);var _0x3735ed={'where':_0x4d4a58['where']};return db[_0x328e('0x3a')][_0x328e('0x3b')](_0x3735ed)[_0x328e('0x23')](function(_0x467a0b){_0x3bd897['count']=_0x467a0b;if(_0x2fab5a[_0x328e('0x2b')][_0x328e('0x3c')]){_0x4d4a58[_0x328e('0x3d')]=[{'all':!![]}];}return db[_0x328e('0x3a')][_0x328e('0x3e')](_0x4d4a58);})['then'](function(_0xf05003){_0x3bd897[_0x328e('0x3f')]=_0xf05003;return _0x3bd897;})[_0x328e('0x23')](respondWithFilteredResult(_0x108f0d,_0x4d4a58))['catch'](handleError(_0x108f0d,null));};exports['show']=function(_0x59712d,_0x2e0d9d){var _0x5e1938={'raw':!![],'where':{'id':_0x59712d[_0x328e('0x40')]['id']}},_0x3dbeec={};_0x3dbeec['model']=_['keys'](db[_0x328e('0x3a')][_0x328e('0x28')]);_0x3dbeec[_0x328e('0x2b')]=_[_0x328e('0x2a')](_0x59712d[_0x328e('0x2b')]);_0x3dbeec[_0x328e('0x2c')]=_[_0x328e('0x2d')](_0x3dbeec[_0x328e('0x29')],_0x3dbeec[_0x328e('0x2b')]);_0x5e1938[_0x328e('0x2e')]=_[_0x328e('0x2d')](_0x3dbeec[_0x328e('0x29')],qs['fields'](_0x59712d[_0x328e('0x2b')]['fields']));_0x5e1938['attributes']=_0x5e1938[_0x328e('0x2e')][_0x328e('0x30')]?_0x5e1938[_0x328e('0x2e')]:_0x3dbeec['model'];if(_0x59712d[_0x328e('0x2b')][_0x328e('0x3c')]){_0x5e1938[_0x328e('0x3d')]=[{'all':!![]}];}_0x5e1938=_[_0x328e('0x41')]({},_0x5e1938,_0x59712d[_0x328e('0x42')]);return db[_0x328e('0x3a')][_0x328e('0x43')](_0x5e1938)['then'](handleEntityNotFound(_0x2e0d9d,null))['then'](respondWithResult(_0x2e0d9d,null))[_0x328e('0x44')](handleError(_0x2e0d9d,null));};exports[_0x328e('0x45')]=function(_0x59a964,_0x3bd43b){return db[_0x328e('0x3a')][_0x328e('0x45')](_0x59a964['body'],{})[_0x328e('0x23')](respondWithResult(_0x3bd43b,0xc9))[_0x328e('0x44')](handleError(_0x3bd43b,null));};exports[_0x328e('0x21')]=function(_0x4534ee,_0x36f2b8){if(_0x4534ee[_0x328e('0x46')]['id']){delete _0x4534ee[_0x328e('0x46')]['id'];}return db['DeskField'][_0x328e('0x43')]({'where':{'id':_0x4534ee[_0x328e('0x40')]['id']}})[_0x328e('0x23')](handleEntityNotFound(_0x36f2b8,null))['then'](saveUpdates(_0x4534ee[_0x328e('0x46')],null))[_0x328e('0x23')](respondWithResult(_0x36f2b8,null))[_0x328e('0x44')](handleError(_0x36f2b8,null));};exports[_0x328e('0x22')]=function(_0x1532d7,_0x294945){return db[_0x328e('0x3a')]['find']({'where':{'id':_0x1532d7[_0x328e('0x40')]['id']}})[_0x328e('0x23')](handleEntityNotFound(_0x294945,null))[_0x328e('0x23')](removeEntity(_0x294945,null))[_0x328e('0x44')](handleError(_0x294945,null));};
\ No newline at end of file
+var _0xf0f4=['to-csv','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','sendStatus','status','end','count','offset','json','apply','destroy','then','error','name','send','index','DeskField','rawAttributes','model','keys','query','filters','intersection','attributes','fields','limit','order','sort','filter','where','merge','map','type','key','VIRTUAL','field','includeAll','include','findAll','rows','catch','params','length','options','create','body','update','find','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util'];(function(_0x3e7b5e,_0x2b4890){var _0x35edde=function(_0x571045){while(--_0x571045){_0x3e7b5e['push'](_0x3e7b5e['shift']());}};_0x35edde(++_0x2b4890);}(_0xf0f4,0x1d3));var _0x4f0f=function(_0x46fe8f,_0x1474ca){_0x46fe8f=_0x46fe8f-0x0;var _0x6ac068=_0xf0f4[_0x46fe8f];return _0x6ac068;};'use strict';var pdf=require(_0x4f0f('0x0'));var emlformat=require(_0x4f0f('0x1'));var rimraf=require(_0x4f0f('0x2'));var zipdir=require(_0x4f0f('0x3'));var jsonpatch=require(_0x4f0f('0x4'));var rp=require(_0x4f0f('0x5'));var moment=require(_0x4f0f('0x6'));var BPromise=require(_0x4f0f('0x7'));var Mustache=require('mustache');var util=require(_0x4f0f('0x8'));var path=require('path');var sox=require('sox');var csv=require(_0x4f0f('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x4f0f('0xa'));var crypto=require(_0x4f0f('0xb'));var jsforce=require(_0x4f0f('0xc'));var deskjs=require(_0x4f0f('0xd'));var toCsv=require(_0x4f0f('0x9'));var querystring=require(_0x4f0f('0xe'));var Papa=require(_0x4f0f('0xf'));var Redis=require(_0x4f0f('0x10'));var authService=require(_0x4f0f('0x11'));var qs=require(_0x4f0f('0x12'));var hardwareService=require(_0x4f0f('0x13'));var logger=require('../../config/logger')(_0x4f0f('0x14'));var utils=require(_0x4f0f('0x15'));var config=require(_0x4f0f('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1ebe3c,_0x13299f){_0x13299f=_0x13299f||0xcc;return function(_0x251127){if(_0x251127){return _0x1ebe3c[_0x4f0f('0x17')](_0x13299f);}return _0x1ebe3c[_0x4f0f('0x18')](_0x13299f)[_0x4f0f('0x19')]();};}function respondWithResult(_0x5539a9,_0x2b0852){_0x2b0852=_0x2b0852||0xc8;return function(_0x1065c7){if(_0x1065c7){return _0x5539a9['status'](_0x2b0852)['json'](_0x1065c7);}};}function respondWithFilteredResult(_0x388229,_0x349cea){return function(_0x36baf3){if(_0x36baf3){var _0x4fa440=_0x36baf3[_0x4f0f('0x1a')],_0x2b56cf=_0x349cea[_0x4f0f('0x1b')],_0x341e23=_0x349cea[_0x4f0f('0x1b')]+_0x349cea['limit'],_0xdce6e9;if(_0x341e23>=_0x4fa440){_0x341e23=_0x4fa440;_0xdce6e9=0xc8;}else{_0xdce6e9=0xce;}_0x388229[_0x4f0f('0x18')](_0xdce6e9);return _0x388229['set']('Content-Range',_0x2b56cf+'-'+_0x341e23+'/'+_0x4fa440)[_0x4f0f('0x1c')](_0x36baf3);}return null;};}function patchUpdates(_0x5da144){return function(_0x336178){try{jsonpatch[_0x4f0f('0x1d')](_0x336178,_0x5da144,!![]);}catch(_0xb7a466){return BPromise['reject'](_0xb7a466);}return _0x336178['save']();};}function saveUpdates(_0x2974d8,_0x22e6cc){return function(_0x5ebe60){if(_0x5ebe60){return _0x5ebe60['update'](_0x2974d8)['then'](function(_0x98ca34){return _0x98ca34;});}return null;};}function removeEntity(_0x28d3a8,_0x31585e){return function(_0x4651f7){if(_0x4651f7){return _0x4651f7[_0x4f0f('0x1e')]()[_0x4f0f('0x1f')](function(){_0x28d3a8[_0x4f0f('0x18')](0xcc)[_0x4f0f('0x19')]();});}};}function handleEntityNotFound(_0x4998f1,_0x236824){return function(_0x11de5b){if(!_0x11de5b){_0x4998f1[_0x4f0f('0x17')](0x194);}return _0x11de5b;};}function handleError(_0xf2cde5,_0x1cd5c5){_0x1cd5c5=_0x1cd5c5||0x1f4;return function(_0x1badc0){logger[_0x4f0f('0x20')](_0x1badc0['stack']);if(_0x1badc0[_0x4f0f('0x21')]){delete _0x1badc0[_0x4f0f('0x21')];}_0xf2cde5[_0x4f0f('0x18')](_0x1cd5c5)[_0x4f0f('0x22')](_0x1badc0);};}exports[_0x4f0f('0x23')]=function(_0x4550a0,_0xe9a8fe){var _0x46963b={},_0x53d570={},_0x4fba74={'count':0x0,'rows':[]};var _0xe5fb54=db[_0x4f0f('0x24')][_0x4f0f('0x25')];_0x53d570[_0x4f0f('0x26')]=_[_0x4f0f('0x27')](_0xe5fb54);_0x53d570[_0x4f0f('0x28')]=_[_0x4f0f('0x27')](_0x4550a0[_0x4f0f('0x28')]);_0x53d570[_0x4f0f('0x29')]=_[_0x4f0f('0x2a')](_0x53d570[_0x4f0f('0x26')],_0x53d570['query']);_0x46963b[_0x4f0f('0x2b')]=_[_0x4f0f('0x2a')](_0x53d570['model'],qs[_0x4f0f('0x2c')](_0x4550a0['query']['fields']));_0x46963b[_0x4f0f('0x2b')]=_0x46963b[_0x4f0f('0x2b')]['length']?_0x46963b[_0x4f0f('0x2b')]:_0x53d570[_0x4f0f('0x26')];if(!_0x4550a0[_0x4f0f('0x28')]['hasOwnProperty']('nolimit')){_0x46963b[_0x4f0f('0x2d')]=qs[_0x4f0f('0x2d')](_0x4550a0[_0x4f0f('0x28')]['limit']);_0x46963b['offset']=qs['offset'](_0x4550a0[_0x4f0f('0x28')][_0x4f0f('0x1b')]);}_0x46963b[_0x4f0f('0x2e')]=qs['sort'](_0x4550a0[_0x4f0f('0x28')][_0x4f0f('0x2f')]);_0x46963b['where']=qs['filters'](_['pick'](_0x4550a0[_0x4f0f('0x28')],_0x53d570[_0x4f0f('0x29')]));if(_0x4550a0[_0x4f0f('0x28')][_0x4f0f('0x30')]){_0x46963b[_0x4f0f('0x31')]=_[_0x4f0f('0x32')](_0x46963b['where'],{'$or':_[_0x4f0f('0x33')](_0xe5fb54,function(_0x3416f0){if(_0x3416f0[_0x4f0f('0x34')][_0x4f0f('0x35')]!==_0x4f0f('0x36')){var _0x3dbd45={};_0x3dbd45[_0x3416f0[_0x4f0f('0x37')]]={'$like':'%'+_0x4550a0[_0x4f0f('0x28')]['filter']+'%'};return _0x3dbd45;}})});}_0x46963b=_[_0x4f0f('0x32')]({},_0x46963b,_0x4550a0['options']);var _0x2edaee={'where':_0x46963b[_0x4f0f('0x31')]};return db[_0x4f0f('0x24')][_0x4f0f('0x1a')](_0x2edaee)[_0x4f0f('0x1f')](function(_0x25d1b6){_0x4fba74[_0x4f0f('0x1a')]=_0x25d1b6;if(_0x4550a0['query'][_0x4f0f('0x38')]){_0x46963b[_0x4f0f('0x39')]=[{'all':!![]}];}return db[_0x4f0f('0x24')][_0x4f0f('0x3a')](_0x46963b);})['then'](function(_0x22305d){_0x4fba74[_0x4f0f('0x3b')]=_0x22305d;return _0x4fba74;})['then'](respondWithFilteredResult(_0xe9a8fe,_0x46963b))[_0x4f0f('0x3c')](handleError(_0xe9a8fe,null));};exports['show']=function(_0x5c1449,_0x8b6aa8){var _0x5b5e40={'raw':!![],'where':{'id':_0x5c1449[_0x4f0f('0x3d')]['id']}},_0x1f8aa1={};_0x1f8aa1['model']=_[_0x4f0f('0x27')](db[_0x4f0f('0x24')]['rawAttributes']);_0x1f8aa1['query']=_['keys'](_0x5c1449['query']);_0x1f8aa1[_0x4f0f('0x29')]=_[_0x4f0f('0x2a')](_0x1f8aa1[_0x4f0f('0x26')],_0x1f8aa1[_0x4f0f('0x28')]);_0x5b5e40[_0x4f0f('0x2b')]=_[_0x4f0f('0x2a')](_0x1f8aa1[_0x4f0f('0x26')],qs['fields'](_0x5c1449[_0x4f0f('0x28')]['fields']));_0x5b5e40[_0x4f0f('0x2b')]=_0x5b5e40[_0x4f0f('0x2b')][_0x4f0f('0x3e')]?_0x5b5e40[_0x4f0f('0x2b')]:_0x1f8aa1[_0x4f0f('0x26')];if(_0x5c1449[_0x4f0f('0x28')][_0x4f0f('0x38')]){_0x5b5e40['include']=[{'all':!![]}];}_0x5b5e40=_['merge']({},_0x5b5e40,_0x5c1449[_0x4f0f('0x3f')]);return db['DeskField']['find'](_0x5b5e40)['then'](handleEntityNotFound(_0x8b6aa8,null))[_0x4f0f('0x1f')](respondWithResult(_0x8b6aa8,null))['catch'](handleError(_0x8b6aa8,null));};exports['create']=function(_0x41bbbd,_0x4daad2){return db[_0x4f0f('0x24')][_0x4f0f('0x40')](_0x41bbbd[_0x4f0f('0x41')],{})[_0x4f0f('0x1f')](respondWithResult(_0x4daad2,0xc9))[_0x4f0f('0x3c')](handleError(_0x4daad2,null));};exports[_0x4f0f('0x42')]=function(_0x7be7b0,_0x5dd01d){if(_0x7be7b0['body']['id']){delete _0x7be7b0[_0x4f0f('0x41')]['id'];}return db['DeskField'][_0x4f0f('0x43')]({'where':{'id':_0x7be7b0[_0x4f0f('0x3d')]['id']}})[_0x4f0f('0x1f')](handleEntityNotFound(_0x5dd01d,null))[_0x4f0f('0x1f')](saveUpdates(_0x7be7b0[_0x4f0f('0x41')],null))[_0x4f0f('0x1f')](respondWithResult(_0x5dd01d,null))['catch'](handleError(_0x5dd01d,null));};exports[_0x4f0f('0x1e')]=function(_0x21894d,_0x420ae7){return db[_0x4f0f('0x24')][_0x4f0f('0x43')]({'where':{'id':_0x21894d[_0x4f0f('0x3d')]['id']}})[_0x4f0f('0x1f')](handleEntityNotFound(_0x420ae7,null))[_0x4f0f('0x1f')](removeEntity(_0x420ae7,null))[_0x4f0f('0x3c')](handleError(_0x420ae7,null));};
\ No newline at end of file
index bf2efc9..98186f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x89f9=['bluebird','request-promise','path','rimraf','../../config/environment','./intDeskField.attributes','define','desk_unique_index','idField','FieldId','util','../../config/logger','api','moment'];(function(_0x44b827,_0x1bb1aa){var _0x527342=function(_0x481338){while(--_0x481338){_0x44b827['push'](_0x44b827['shift']());}};_0x527342(++_0x1bb1aa);}(_0x89f9,0x7a));var _0x989f=function(_0x17e0f0,_0x53fe3a){_0x17e0f0=_0x17e0f0-0x0;var _0x20b991=_0x89f9[_0x17e0f0];return _0x20b991;};'use strict';var _=require('lodash');var util=require(_0x989f('0x0'));var logger=require(_0x989f('0x1'))(_0x989f('0x2'));var moment=require(_0x989f('0x3'));var BPromise=require(_0x989f('0x4'));var rp=require(_0x989f('0x5'));var fs=require('fs');var path=require(_0x989f('0x6'));var rimraf=require(_0x989f('0x7'));var config=require(_0x989f('0x8'));var attributes=require(_0x989f('0x9'));module['exports']=function(_0x59ebff,_0x16b7a3){return _0x59ebff[_0x989f('0xa')]('DeskField',attributes,{'tableName':'int_desk_fields','paranoid':![],'indexes':[{'name':_0x989f('0xb'),'fields':[_0x989f('0xc'),_0x989f('0xd')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x1b50=['idField','FieldId','lodash','../../config/logger','api','moment','bluebird','request-promise','path','define','DeskField','int_desk_fields','desk_unique_index'];(function(_0x359841,_0x17d758){var _0x2df6d7=function(_0x5beea3){while(--_0x5beea3){_0x359841['push'](_0x359841['shift']());}};_0x2df6d7(++_0x17d758);}(_0x1b50,0x147));var _0x01b5=function(_0x515a41,_0x4c631c){_0x515a41=_0x515a41-0x0;var _0x5a435b=_0x1b50[_0x515a41];return _0x5a435b;};'use strict';var _=require(_0x01b5('0x0'));var util=require('util');var logger=require(_0x01b5('0x1'))(_0x01b5('0x2'));var moment=require(_0x01b5('0x3'));var BPromise=require(_0x01b5('0x4'));var rp=require(_0x01b5('0x5'));var fs=require('fs');var path=require(_0x01b5('0x6'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require('./intDeskField.attributes');module['exports']=function(_0x5d8459,_0xa8db35){return _0x5d8459[_0x01b5('0x7')](_0x01b5('0x8'),attributes,{'tableName':_0x01b5('0x9'),'paranoid':![],'indexes':[{'name':_0x01b5('0xa'),'fields':[_0x01b5('0xb'),_0x01b5('0xc')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index d35c162..60eea9d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd64b=['message','result','catch','lodash','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','http','request','info','DeskField,\x20%s,\x20%s','request\x20sent','DeskField,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x620c00,_0x25ebdd){var _0x4b0ed8=function(_0x1d22f4){while(--_0x1d22f4){_0x620c00['push'](_0x620c00['shift']());}};_0x4b0ed8(++_0x25ebdd);}(_0xd64b,0xc1));var _0xbd64=function(_0x124c75,_0x332013){_0x124c75=_0x124c75-0x0;var _0x5c5471=_0xd64b[_0x124c75];return _0x5c5471;};'use strict';var _=require(_0xbd64('0x0'));var util=require('util');var moment=require(_0xbd64('0x1'));var BPromise=require('bluebird');var rs=require(_0xbd64('0x2'));var fs=require('fs');var Redis=require(_0xbd64('0x3'));var db=require(_0xbd64('0x4'))['db'];var utils=require(_0xbd64('0x5'));var logger=require(_0xbd64('0x6'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client'][_0xbd64('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x32995f,_0x3e700e,_0x38204e){return new BPromise(function(_0x3f1f17,_0x2b8543){return client[_0xbd64('0x8')](_0x32995f,_0x38204e)['then'](function(_0x5ae70c){logger[_0xbd64('0x9')](_0xbd64('0xa'),_0x3e700e,_0xbd64('0xb'));logger['debug'](_0xbd64('0xc'),_0x3e700e,_0xbd64('0xb'),JSON[_0xbd64('0xd')](_0x5ae70c));if(_0x5ae70c[_0xbd64('0xe')]){if(_0x5ae70c['error'][_0xbd64('0xf')]===0x1f4){logger['error'](_0xbd64('0xa'),_0x3e700e,_0x5ae70c[_0xbd64('0xe')][_0xbd64('0x10')]);return _0x2b8543(_0x5ae70c[_0xbd64('0xe')][_0xbd64('0x10')]);}logger[_0xbd64('0xe')](_0xbd64('0xa'),_0x3e700e,_0x5ae70c[_0xbd64('0xe')][_0xbd64('0x10')]);return _0x3f1f17(_0x5ae70c['error'][_0xbd64('0x10')]);}else{logger[_0xbd64('0x9')](_0xbd64('0xa'),_0x3e700e,_0xbd64('0xb'));_0x3f1f17(_0x5ae70c[_0xbd64('0x11')]['message']);}})[_0xbd64('0x12')](function(_0x5332e0){logger[_0xbd64('0xe')](_0xbd64('0xa'),_0x3e700e,_0x5332e0);_0x2b8543(_0x5332e0);});});}
\ No newline at end of file
+var _0x9a19=['catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','DeskField,\x20%s,\x20%s','request\x20sent','debug','DeskField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result'];(function(_0x3ec122,_0x55150a){var _0x4ecf41=function(_0x1709cd){while(--_0x1709cd){_0x3ec122['push'](_0x3ec122['shift']());}};_0x4ecf41(++_0x55150a);}(_0x9a19,0x114));var _0x99a1=function(_0x599e60,_0x5b6519){_0x599e60=_0x599e60-0x0;var _0x468e19=_0x9a19[_0x599e60];return _0x468e19;};'use strict';var _=require(_0x99a1('0x0'));var util=require(_0x99a1('0x1'));var moment=require(_0x99a1('0x2'));var BPromise=require('bluebird');var rs=require(_0x99a1('0x3'));var fs=require('fs');var Redis=require(_0x99a1('0x4'));var db=require(_0x99a1('0x5'))['db'];var utils=require(_0x99a1('0x6'));var logger=require(_0x99a1('0x7'))(_0x99a1('0x8'));var config=require(_0x99a1('0x9'));var jayson=require(_0x99a1('0xa'));var client=jayson[_0x99a1('0xb')][_0x99a1('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x65045d,_0x523b9e,_0x4d2a5c){return new BPromise(function(_0x5aa6c2,_0x56f50){return client[_0x99a1('0xd')](_0x65045d,_0x4d2a5c)['then'](function(_0x5874fc){logger[_0x99a1('0xe')](_0x99a1('0xf'),_0x523b9e,_0x99a1('0x10'));logger[_0x99a1('0x11')](_0x99a1('0x12'),_0x523b9e,'request\x20sent',JSON[_0x99a1('0x13')](_0x5874fc));if(_0x5874fc[_0x99a1('0x14')]){if(_0x5874fc[_0x99a1('0x14')][_0x99a1('0x15')]===0x1f4){logger[_0x99a1('0x14')](_0x99a1('0xf'),_0x523b9e,_0x5874fc[_0x99a1('0x14')][_0x99a1('0x16')]);return _0x56f50(_0x5874fc[_0x99a1('0x14')][_0x99a1('0x16')]);}logger[_0x99a1('0x14')](_0x99a1('0xf'),_0x523b9e,_0x5874fc[_0x99a1('0x14')][_0x99a1('0x16')]);return _0x5aa6c2(_0x5874fc[_0x99a1('0x14')]['message']);}else{logger[_0x99a1('0xe')](_0x99a1('0xf'),_0x523b9e,_0x99a1('0x10'));_0x5aa6c2(_0x5874fc[_0x99a1('0x17')][_0x99a1('0x16')]);}})[_0x99a1('0x18')](function(_0x1ca878){logger['error']('DeskField,\x20%s,\x20%s',_0x523b9e,_0x1ca878);_0x56f50(_0x1ca878);});});}
\ No newline at end of file
index 09734e1..73af078 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe809=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intDynamics365Account.controller','get','isAuthenticated','/:id','show','/:id/configurations','/:id/fields','getFields','post','create','addConfiguration','update','delete','destroy','exports','multer','path','connect-timeout'];(function(_0x1fd6ca,_0x57513a){var _0x38b4c2=function(_0x5425e6){while(--_0x5425e6){_0x1fd6ca['push'](_0x1fd6ca['shift']());}};_0x38b4c2(++_0x57513a);}(_0xe809,0x105));var _0x9e80=function(_0x2cc116,_0x59dbc8){_0x2cc116=_0x2cc116-0x0;var _0x3184ee=_0xe809[_0x2cc116];return _0x3184ee;};'use strict';var multer=require(_0x9e80('0x0'));var util=require('util');var path=require(_0x9e80('0x1'));var timeout=require(_0x9e80('0x2'));var express=require('express');var router=express[_0x9e80('0x3')]();var auth=require(_0x9e80('0x4'));var interaction=require(_0x9e80('0x5'));var config=require(_0x9e80('0x6'));var controller=require(_0x9e80('0x7'));router[_0x9e80('0x8')]('/',auth[_0x9e80('0x9')](),controller['index']);router[_0x9e80('0x8')](_0x9e80('0xa'),auth[_0x9e80('0x9')](),controller[_0x9e80('0xb')]);router[_0x9e80('0x8')](_0x9e80('0xc'),auth[_0x9e80('0x9')](),controller['getConfigurations']);router['get'](_0x9e80('0xd'),auth[_0x9e80('0x9')](),controller[_0x9e80('0xe')]);router[_0x9e80('0xf')]('/',auth[_0x9e80('0x9')](),controller[_0x9e80('0x10')]);router['post'](_0x9e80('0xc'),auth['isAuthenticated'](),controller[_0x9e80('0x11')]);router['put'](_0x9e80('0xa'),auth[_0x9e80('0x9')](),controller[_0x9e80('0x12')]);router[_0x9e80('0x13')](_0x9e80('0xa'),auth['isAuthenticated'](),controller[_0x9e80('0x14')]);module[_0x9e80('0x15')]=router;
\ No newline at end of file
+var _0xa8e0=['get','isAuthenticated','/:id','show','/:id/fields','getFields','post','create','/:id/configurations','addConfiguration','delete','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment'];(function(_0x380948,_0x1e9442){var _0x3bb08f=function(_0x566bb6){while(--_0x566bb6){_0x380948['push'](_0x380948['shift']());}};_0x3bb08f(++_0x1e9442);}(_0xa8e0,0x129));var _0x0a8e=function(_0x43c566,_0x5a450e){_0x43c566=_0x43c566-0x0;var _0x949b2=_0xa8e0[_0x43c566];return _0x949b2;};'use strict';var multer=require(_0x0a8e('0x0'));var util=require('util');var path=require(_0x0a8e('0x1'));var timeout=require(_0x0a8e('0x2'));var express=require(_0x0a8e('0x3'));var router=express[_0x0a8e('0x4')]();var auth=require(_0x0a8e('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x0a8e('0x6'));var controller=require('./intDynamics365Account.controller');router[_0x0a8e('0x7')]('/',auth[_0x0a8e('0x8')](),controller['index']);router[_0x0a8e('0x7')](_0x0a8e('0x9'),auth[_0x0a8e('0x8')](),controller[_0x0a8e('0xa')]);router['get']('/:id/configurations',auth[_0x0a8e('0x8')](),controller['getConfigurations']);router['get'](_0x0a8e('0xb'),auth['isAuthenticated'](),controller[_0x0a8e('0xc')]);router[_0x0a8e('0xd')]('/',auth['isAuthenticated'](),controller[_0x0a8e('0xe')]);router[_0x0a8e('0xd')](_0x0a8e('0xf'),auth[_0x0a8e('0x8')](),controller[_0x0a8e('0x10')]);router['put'](_0x0a8e('0x9'),auth[_0x0a8e('0x8')](),controller['update']);router[_0x0a8e('0x11')](_0x0a8e('0x9'),auth[_0x0a8e('0x8')](),controller['destroy']);module[_0x0a8e('0x12')]=router;
\ No newline at end of file
index 433d7a2..9e5c2e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc782=['exports','STRING','sequelize'];(function(_0x13b722,_0x3c3ce4){var _0xa4a9=function(_0x312bc5){while(--_0x312bc5){_0x13b722['push'](_0x13b722['shift']());}};_0xa4a9(++_0x3c3ce4);}(_0xc782,0xfe));var _0x2c78=function(_0x2b5c82,_0x5dadd7){_0x2b5c82=_0x2b5c82-0x0;var _0x29d9f1=_0xc782[_0x2b5c82];return _0x29d9f1;};'use strict';var Sequelize=require(_0x2c78('0x0'));module[_0x2c78('0x1')]={'name':{'type':Sequelize['STRING']},'username':{'type':Sequelize['STRING']},'password':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize[_0x2c78('0x2')]},'tenantId':{'type':Sequelize['STRING']},'clientId':{'type':Sequelize[_0x2c78('0x2')]},'clientSecret':{'type':Sequelize[_0x2c78('0x2')]},'serverUrl':{'type':Sequelize[_0x2c78('0x2')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x3bbf=['sequelize','exports','STRING'];(function(_0x36fdeb,_0x22ff27){var _0xb1be66=function(_0x4c8e48){while(--_0x4c8e48){_0x36fdeb['push'](_0x36fdeb['shift']());}};_0xb1be66(++_0x22ff27);}(_0x3bbf,0x138));var _0xf3bb=function(_0x2831e5,_0x3bc4ce){_0x2831e5=_0x2831e5-0x0;var _0x12bf47=_0x3bbf[_0x2831e5];return _0x12bf47;};'use strict';var Sequelize=require(_0xf3bb('0x0'));module[_0xf3bb('0x1')]={'name':{'type':Sequelize[_0xf3bb('0x2')]},'username':{'type':Sequelize['STRING']},'password':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize[_0xf3bb('0x2')]},'tenantId':{'type':Sequelize[_0xf3bb('0x2')]},'clientId':{'type':Sequelize[_0xf3bb('0x2')]},'clientSecret':{'type':Sequelize['STRING']},'serverUrl':{'type':Sequelize[_0xf3bb('0x2')]},'description':{'type':Sequelize[_0xf3bb('0x2')]}};
\ No newline at end of file
index 4c8264b..583e46b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9fd=[')/Attributes(',')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?','OptionSet','Value','UserLocalizedLabel','Label','EntityDefinitions(','TrueOption','true','FalseOption','DisplayName','eml-format','rimraf','moment','mustache','path','squel','crypto','jsforce','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','test','request','then','info','Dynamics365Account,\x20%s,\x20%s','Dynamics365Account,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','end','status','json','offset','limit','set','Content-Range','reject','save','update','destroy','name','index','Dynamics365Account','rawAttributes','model','keys','query','intersection','attributes','fields','hasOwnProperty','order','sort','where','filters','pick','filter','map','type','VIRTUAL','merge','options','count','includeAll','include','params','length','find','create','body','findOne','Dynamics365Configuration','nolimit','getConfigurations','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','getDescriptions','Dynamics365Field','ticketType','incident','PhoneCall','title','description','customerid','caseorigincode','regardingobjectid','directioncode','accountidyominame','actualserviceunits','contactidname','contractdetailidname','createdbyexternalpartyname','createdbyexternalpartyyominame','createdbyname','createdonbehalfbyyominame','customeridname','customeridtype','customeridyominame','emailaddress','entityimage_timestamp','escalatedon','exchangerate','followupby','kbarticleidname','lastonholdtime','masteridname','modifiedbyexternalpartyname','modifiedbyexternalpartyyominame','modifiedbyname','modifiedonbehalfbyyominame','msdyn_incidenttypename','msdyn_iotalertname','numberofchildincidents','onholdtime','overriddencreatedon','owneridtype','primarycontactidname','primarycontactidyominame','prioritycodename','productserialnumber','resolveby','responseby','responsiblecontactidname','responsiblecontactidyominame','sentimentvalue','slainvokedidname','socialprofileidname','statecode','ticketnumber','timezoneruleversionnumber','transactioncurrencyidname','traversedpath','utcconversiontimezonecode','concat','username','password','remoteUri','tenantId','clientId','clientSecret','slice','substring','lastIndexOf','format','%s/api/data/v9.0/','https://login.microsoftonline.com/','/oauth2/token','GET','EntityDefinitions?$select=DisplayName,EntitySetName&$filter=SchemaName\x20eq\x20\x27','Bearer\x20','4.0','MetadataId',')?$select=LogicalName&$expand=Attributes($select=LogicalName)','Attributes','remove','includes','LogicalName','@odata.type','push','all','forEach','isNil','BooleanAttributeMetadata','StringAttributeMetadata','DoubleAttributeMetadata','BigIntAttributeMetadata','IntegerAttributeMetadata','DateTimeAttributeMetadata','StatusAttributeMetadata','EntityNameAttributeMetadata','StateAttributeMetadata','DecimalAttributeMetadata','log','Dynamics365\x20error:\x20','statusCode','stack','send'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xe9fd,0x195));var _0xde9f=function(_0x552250,_0x16ba20){_0x552250=_0x552250-0x0;var _0x38b0d4=_0xe9fd[_0x552250];return _0x38b0d4;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xde9f('0x0'));var rimraf=require(_0xde9f('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xde9f('0x2'));var BPromise=require('bluebird');var Mustache=require(_0xde9f('0x3'));var util=require('util');var path=require(_0xde9f('0x4'));var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xde9f('0x5'));var crypto=require(_0xde9f('0x6'));var jsforce=require(_0xde9f('0x7'));var deskjs=require('desk.js');var toCsv=require(_0xde9f('0x8'));var querystring=require(_0xde9f('0x9'));var Papa=require(_0xde9f('0xa'));var Redis=require(_0xde9f('0xb'));var authService=require(_0xde9f('0xc'));var qs=require(_0xde9f('0xd'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xde9f('0xe'))(_0xde9f('0xf'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xde9f('0x10'))['db'];var integrations=require(_0xde9f('0x11'));var jayson=require(_0xde9f('0x12'));var client=jayson[_0xde9f('0x13')][_0xde9f('0x14')]({'port':0x232a});function checkPasswordPattern(_0x426f97,_0x361ae8,_0x3420c1){if(_0x3420c1){var _0xdcd326=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0xdcd326[_0xde9f('0x15')](_0x361ae8)){return _0x426f97;}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 _0x426f97;}}function respondWithRpcPromise(_0x1963ea,_0x467bdb,_0x53a33e,_0x8dd65b){return new BPromise(function(_0x368cab,_0x2bd1d6){var _0x1683d8=_0x8dd65b||client;return _0x1683d8[_0xde9f('0x16')](_0x1963ea,_0x53a33e)[_0xde9f('0x17')](function(_0x140fdf){logger[_0xde9f('0x18')](_0xde9f('0x19'),_0x467bdb,'request\x20sent');logger['debug'](_0xde9f('0x1a'),_0x467bdb,'request\x20sent',JSON[_0xde9f('0x1b')](_0x140fdf));if(_0x140fdf[_0xde9f('0x1c')]){if(_0x140fdf[_0xde9f('0x1c')][_0xde9f('0x1d')]===0x1f4){logger['error'](_0xde9f('0x19'),_0x467bdb,_0x140fdf['error'][_0xde9f('0x1e')]);return _0x2bd1d6(_0x140fdf['error']['message']);}logger[_0xde9f('0x1c')]('Dynamics365Account,\x20%s,\x20%s',_0x467bdb,_0x140fdf[_0xde9f('0x1c')][_0xde9f('0x1e')]);return _0x368cab(_0x140fdf[_0xde9f('0x1c')]['message']);}else{logger[_0xde9f('0x18')]('Dynamics365Account,\x20%s,\x20%s',_0x467bdb,_0xde9f('0x1f'));_0x368cab(_0x140fdf[_0xde9f('0x20')][_0xde9f('0x1e')]);}})[_0xde9f('0x21')](function(_0x319b91){logger['error']('Dynamics365Account,\x20%s,\x20%s',_0x467bdb,_0x319b91);_0x2bd1d6(_0x319b91);});});}function respondWithStatusCode(_0x48002e,_0xfeb6ed){_0xfeb6ed=_0xfeb6ed||0xcc;return function(_0xd81e68){if(_0xd81e68){return _0x48002e['sendStatus'](_0xfeb6ed);}return _0x48002e['status'](_0xfeb6ed)[_0xde9f('0x22')]();};}function respondWithResult(_0x45f8e5,_0x14e735){_0x14e735=_0x14e735||0xc8;return function(_0x4f30bb){if(_0x4f30bb){return _0x45f8e5[_0xde9f('0x23')](_0x14e735)[_0xde9f('0x24')](_0x4f30bb);}};}function respondWithFilteredResult(_0x17f3fb,_0x54c776){return function(_0x2ee4bf){if(_0x2ee4bf){var _0x1f914e=_0x2ee4bf['count'],_0x4fa3ec=_0x54c776['offset'],_0x4921b5=_0x54c776[_0xde9f('0x25')]+_0x54c776[_0xde9f('0x26')],_0x2d6dd7;if(_0x4921b5>=_0x1f914e){_0x4921b5=_0x1f914e;_0x2d6dd7=0xc8;}else{_0x2d6dd7=0xce;}_0x17f3fb['status'](_0x2d6dd7);return _0x17f3fb[_0xde9f('0x27')](_0xde9f('0x28'),_0x4fa3ec+'-'+_0x4921b5+'/'+_0x1f914e)[_0xde9f('0x24')](_0x2ee4bf);}return null;};}function patchUpdates(_0x229d3a){return function(_0x5b7fb3){try{jsonpatch['apply'](_0x5b7fb3,_0x229d3a,!![]);}catch(_0x19a33a){return BPromise[_0xde9f('0x29')](_0x19a33a);}return _0x5b7fb3[_0xde9f('0x2a')]();};}function saveUpdates(_0x2e9648,_0x21d8c4){return function(_0x46cdfb){if(_0x46cdfb){return _0x46cdfb[_0xde9f('0x2b')](_0x2e9648)[_0xde9f('0x17')](function(_0x4dbea7){return _0x4dbea7;});}return null;};}function removeEntity(_0x4c0b06,_0x5b839b){return function(_0x10fefd){if(_0x10fefd){return _0x10fefd[_0xde9f('0x2c')]()[_0xde9f('0x17')](function(){_0x4c0b06[_0xde9f('0x23')](0xcc)[_0xde9f('0x22')]();});}};}function handleEntityNotFound(_0x40237b,_0x531062){return function(_0x4fca6f){if(!_0x4fca6f){_0x40237b['sendStatus'](0x194);}return _0x4fca6f;};}function handleError(_0x4a6487,_0xef3471){_0xef3471=_0xef3471||0x1f4;return function(_0x4e7cca){logger[_0xde9f('0x1c')](_0x4e7cca['stack']);if(_0x4e7cca[_0xde9f('0x2d')]){delete _0x4e7cca[_0xde9f('0x2d')];}_0x4a6487['status'](_0xef3471)['send'](_0x4e7cca);};}exports[_0xde9f('0x2e')]=function(_0x3e981d,_0x1cacce){var _0x366f63={},_0x3ba93d={},_0x1908c8={'count':0x0,'rows':[]};var _0x37c057=db[_0xde9f('0x2f')][_0xde9f('0x30')];_0x3ba93d[_0xde9f('0x31')]=_[_0xde9f('0x32')](_0x37c057);_0x3ba93d[_0xde9f('0x33')]=_['keys'](_0x3e981d['query']);_0x3ba93d['filters']=_[_0xde9f('0x34')](_0x3ba93d[_0xde9f('0x31')],_0x3ba93d[_0xde9f('0x33')]);_0x366f63[_0xde9f('0x35')]=_[_0xde9f('0x34')](_0x3ba93d[_0xde9f('0x31')],qs[_0xde9f('0x36')](_0x3e981d[_0xde9f('0x33')][_0xde9f('0x36')]));_0x366f63[_0xde9f('0x35')]=_0x366f63[_0xde9f('0x35')]['length']?_0x366f63['attributes']:_0x3ba93d[_0xde9f('0x31')];if(!_0x3e981d[_0xde9f('0x33')][_0xde9f('0x37')]('nolimit')){_0x366f63[_0xde9f('0x26')]=qs[_0xde9f('0x26')](_0x3e981d[_0xde9f('0x33')][_0xde9f('0x26')]);_0x366f63[_0xde9f('0x25')]=qs['offset'](_0x3e981d[_0xde9f('0x33')][_0xde9f('0x25')]);}_0x366f63[_0xde9f('0x38')]=qs[_0xde9f('0x39')](_0x3e981d[_0xde9f('0x33')][_0xde9f('0x39')]);_0x366f63[_0xde9f('0x3a')]=qs[_0xde9f('0x3b')](_[_0xde9f('0x3c')](_0x3e981d['query'],_0x3ba93d['filters']));if(_0x3e981d[_0xde9f('0x33')][_0xde9f('0x3d')]){_0x366f63[_0xde9f('0x3a')]=_['merge'](_0x366f63[_0xde9f('0x3a')],{'$or':_[_0xde9f('0x3e')](_0x37c057,function(_0x5e47ff){if(_0x5e47ff[_0xde9f('0x3f')]['key']!==_0xde9f('0x40')){var _0x5e05e={};_0x5e05e[_0x5e47ff['field']]={'$like':'%'+_0x3e981d[_0xde9f('0x33')][_0xde9f('0x3d')]+'%'};return _0x5e05e;}})});}_0x366f63=_[_0xde9f('0x41')]({},_0x366f63,_0x3e981d[_0xde9f('0x42')]);var _0x4ecde3={'where':_0x366f63[_0xde9f('0x3a')]};return db[_0xde9f('0x2f')][_0xde9f('0x43')](_0x4ecde3)['then'](function(_0xbbdf85){_0x1908c8[_0xde9f('0x43')]=_0xbbdf85;if(_0x3e981d[_0xde9f('0x33')][_0xde9f('0x44')]){_0x366f63[_0xde9f('0x45')]=[{'all':!![]}];}return db['Dynamics365Account']['findAll'](_0x366f63);})[_0xde9f('0x17')](function(_0x1fd450){_0x1908c8['rows']=_0x1fd450;return _0x1908c8;})['then'](respondWithFilteredResult(_0x1cacce,_0x366f63))[_0xde9f('0x21')](handleError(_0x1cacce,null));};exports['show']=function(_0x114a09,_0x39d703){var _0x40a786={'raw':![],'where':{'id':_0x114a09[_0xde9f('0x46')]['id']}},_0x1d4049={};_0x1d4049['model']=_[_0xde9f('0x32')](db[_0xde9f('0x2f')][_0xde9f('0x30')]);_0x1d4049['query']=_[_0xde9f('0x32')](_0x114a09[_0xde9f('0x33')]);_0x1d4049['filters']=_[_0xde9f('0x34')](_0x1d4049[_0xde9f('0x31')],_0x1d4049[_0xde9f('0x33')]);_0x40a786[_0xde9f('0x35')]=_[_0xde9f('0x34')](_0x1d4049['model'],qs[_0xde9f('0x36')](_0x114a09['query']['fields']));_0x40a786[_0xde9f('0x35')]=_0x40a786['attributes'][_0xde9f('0x47')]?_0x40a786[_0xde9f('0x35')]:_0x1d4049[_0xde9f('0x31')];if(_0x114a09[_0xde9f('0x33')][_0xde9f('0x44')]){_0x40a786[_0xde9f('0x45')]=[{'all':!![]}];}_0x40a786=_['merge']({},_0x40a786,_0x114a09[_0xde9f('0x42')]);return db['Dynamics365Account'][_0xde9f('0x48')](_0x40a786)[_0xde9f('0x17')](handleEntityNotFound(_0x39d703,null))[_0xde9f('0x17')](respondWithResult(_0x39d703,null))[_0xde9f('0x21')](handleError(_0x39d703,null));};exports['create']=function(_0x5d91a8,_0x2b906e){return db[_0xde9f('0x2f')][_0xde9f('0x49')](_0x5d91a8[_0xde9f('0x4a')],{})[_0xde9f('0x17')](respondWithResult(_0x2b906e,0xc9))[_0xde9f('0x21')](handleError(_0x2b906e,null));};exports[_0xde9f('0x2b')]=function(_0x5c147c,_0x8e30cc){if(_0x5c147c[_0xde9f('0x4a')]['id']){delete _0x5c147c['body']['id'];}return db['Dynamics365Account'][_0xde9f('0x48')]({'where':{'id':_0x5c147c['params']['id']}})[_0xde9f('0x17')](handleEntityNotFound(_0x8e30cc,null))[_0xde9f('0x17')](saveUpdates(_0x5c147c[_0xde9f('0x4a')],null))[_0xde9f('0x17')](respondWithResult(_0x8e30cc,null))[_0xde9f('0x21')](handleError(_0x8e30cc,null));};exports[_0xde9f('0x2c')]=function(_0x4ebc72,_0x74f086){return db[_0xde9f('0x2f')][_0xde9f('0x48')]({'where':{'id':_0x4ebc72[_0xde9f('0x46')]['id']}})['then'](handleEntityNotFound(_0x74f086,null))[_0xde9f('0x17')](removeEntity(_0x74f086,null))[_0xde9f('0x21')](handleError(_0x74f086,null));};exports['getConfigurations']=function(_0x23fa66,_0x2b9290,_0x56e978){var _0x15f693={};var _0x208c02={};var _0x3e8b39;var _0x296e64;return db[_0xde9f('0x2f')][_0xde9f('0x4b')]({'where':{'id':_0x23fa66[_0xde9f('0x46')]['id']}})['then'](handleEntityNotFound(_0x2b9290,null))[_0xde9f('0x17')](function(_0x3fdc53){if(_0x3fdc53){_0x3e8b39=_0x3fdc53;_0x208c02[_0xde9f('0x31')]=_['keys'](db[_0xde9f('0x4c')]['rawAttributes']);_0x208c02[_0xde9f('0x33')]=_[_0xde9f('0x32')](_0x23fa66['query']);_0x208c02[_0xde9f('0x3b')]=_[_0xde9f('0x34')](_0x208c02['model'],_0x208c02[_0xde9f('0x33')]);_0x15f693[_0xde9f('0x35')]=_[_0xde9f('0x34')](_0x208c02['model'],qs[_0xde9f('0x36')](_0x23fa66['query'][_0xde9f('0x36')]));_0x15f693[_0xde9f('0x35')]=_0x15f693[_0xde9f('0x35')][_0xde9f('0x47')]?_0x15f693[_0xde9f('0x35')]:_0x208c02[_0xde9f('0x31')];_0x15f693[_0xde9f('0x38')]=qs['sort'](_0x23fa66[_0xde9f('0x33')][_0xde9f('0x39')]);_0x15f693[_0xde9f('0x3a')]=qs[_0xde9f('0x3b')](_['pick'](_0x23fa66[_0xde9f('0x33')],_0x208c02[_0xde9f('0x3b')]));if(_0x23fa66[_0xde9f('0x33')]['filter']){_0x15f693[_0xde9f('0x3a')]=_[_0xde9f('0x41')](_0x15f693[_0xde9f('0x3a')],{'$or':_[_0xde9f('0x3e')](_0x15f693[_0xde9f('0x35')],function(_0x473590){var _0x4cbd7c={};_0x4cbd7c[_0x473590]={'$like':'%'+_0x23fa66['query'][_0xde9f('0x3d')]+'%'};return _0x4cbd7c;})});}_0x15f693=_[_0xde9f('0x41')]({},_0x15f693,_0x23fa66[_0xde9f('0x42')]);return _0x3e8b39['getConfigurations'](_0x15f693);}})[_0xde9f('0x17')](function(_0x53767e){if(_0x53767e){_0x296e64=_0x53767e[_0xde9f('0x47')];if(!_0x23fa66['query'][_0xde9f('0x37')](_0xde9f('0x4d'))){_0x15f693['limit']=qs[_0xde9f('0x26')](_0x23fa66['query'][_0xde9f('0x26')]);_0x15f693['offset']=qs[_0xde9f('0x25')](_0x23fa66[_0xde9f('0x33')][_0xde9f('0x25')]);}return _0x3e8b39[_0xde9f('0x4e')](_0x15f693);}})['then'](function(_0x36e42d){if(_0x36e42d){return _0x36e42d?{'count':_0x296e64,'rows':_0x36e42d}:null;}})['then'](respondWithResult(_0x2b9290,null))[_0xde9f('0x21')](handleError(_0x2b9290,null));};exports[_0xde9f('0x4f')]=function(_0x2569db,_0x1d0542,_0x5de992){if(_0x2569db[_0xde9f('0x4a')]['id']){delete _0x2569db[_0xde9f('0x4a')]['id'];}return db['Dynamics365Account'][_0xde9f('0x4b')]({'where':{'id':_0x2569db[_0xde9f('0x46')]['id']}})[_0xde9f('0x17')](handleEntityNotFound(_0x1d0542,null))[_0xde9f('0x17')](function(_0x31ee3e){if(_0x31ee3e){_0x2569db['body'][_0xde9f('0x50')]=_0x31ee3e['id'];_0x2569db[_0xde9f('0x4a')][_0xde9f('0x51')]=integrations[_0xde9f('0x52')](_0x2569db[_0xde9f('0x4a')][_0xde9f('0x53')],_0x2569db[_0xde9f('0x4a')][_0xde9f('0x3f')]);_0x2569db[_0xde9f('0x4a')][_0xde9f('0x54')]=integrations[_0xde9f('0x55')](_0x2569db['body'][_0xde9f('0x53')],_0x2569db[_0xde9f('0x4a')]['type']);return db[_0xde9f('0x4c')][_0xde9f('0x49')](_0x2569db[_0xde9f('0x4a')],{'include':[{'model':db[_0xde9f('0x56')],'as':_0xde9f('0x51')},{'model':db[_0xde9f('0x56')],'as':'Descriptions'}]});}return null;})['then'](respondWithResult(_0x1d0542,null))['catch'](handleError(_0x1d0542,null));};exports['getFields']=function(_0x1f8b39,_0x911fa1,_0x460ac8){var _0x37cc49=_0x1f8b39[_0xde9f('0x33')][_0xde9f('0x57')];var _0x469f86=_0x37cc49===_0xde9f('0x58')?'Incident':_0xde9f('0x59');var _0x47ec62='';var _0x56793a='';var _0x132976='';var _0x2ab571='';var _0x355b58='';var _0x1ae430='';var _0x3ddd7d='';var _0x1e044e='';var _0x39039f=[_0xde9f('0x5a'),_0xde9f('0x5b'),_0xde9f('0x5c'),'ownerid',_0xde9f('0x5d'),'subject','phonenumber',_0xde9f('0x5e'),_0xde9f('0x5f'),'phonecall_activity_parties'];var _0x9c2657=['accountidname',_0xde9f('0x60'),_0xde9f('0x61'),'billedserviceunits',_0xde9f('0x62'),'contactidyominame',_0xde9f('0x63'),'contractidname',_0xde9f('0x64'),_0xde9f('0x65'),_0xde9f('0x66'),'createdbyyominame','createdon','createdonbehalfbyname',_0xde9f('0x67'),_0xde9f('0x68'),_0xde9f('0x69'),_0xde9f('0x6a'),_0xde9f('0x6b'),'entitlementidname',_0xde9f('0x6c'),'entityimage_url',_0xde9f('0x6d'),_0xde9f('0x6e'),'firstresponsebykpiidname',_0xde9f('0x6f'),'importsequencenumber','influencescore',_0xde9f('0x70'),_0xde9f('0x71'),_0xde9f('0x72'),_0xde9f('0x73'),_0xde9f('0x74'),_0xde9f('0x75'),'modifiedbyyominame','modifiedon','modifiedonbehalfbyname',_0xde9f('0x76'),_0xde9f('0x77'),_0xde9f('0x78'),_0xde9f('0x79'),_0xde9f('0x7a'),_0xde9f('0x7b'),'owneridname',_0xde9f('0x7c'),'owneridyominame','parentcaseidname',_0xde9f('0x7d'),_0xde9f('0x7e'),_0xde9f('0x7f'),'productidname',_0xde9f('0x80'),_0xde9f('0x81'),'resolvebykpiidname',_0xde9f('0x82'),_0xde9f('0x83'),_0xde9f('0x84'),_0xde9f('0x85'),_0xde9f('0x86'),'slaname',_0xde9f('0x87'),_0xde9f('0x88'),'statuscode','subjectidname',_0xde9f('0x89'),_0xde9f('0x8a'),_0xde9f('0x8b'),_0xde9f('0x8c'),_0xde9f('0x8d'),'versionnumber'];var _0x4e0e63=_0x39039f[_0xde9f('0x8e')](_0x9c2657);return db[_0xde9f('0x2f')][_0xde9f('0x4b')]({'where':{'id':_0x1f8b39[_0xde9f('0x46')]['id']},'attributes':['id',_0xde9f('0x8f'),_0xde9f('0x90'),_0xde9f('0x91'),_0xde9f('0x92'),_0xde9f('0x93'),_0xde9f('0x94')]})[_0xde9f('0x17')](handleEntityNotFound(_0x911fa1,null))[_0xde9f('0x17')](function(_0x3d28f0){if(_0x3d28f0){_0x1e044e=_0x3d28f0[_0xde9f('0x91')];var _0x5d3a0b=_0x1e044e[_0xde9f('0x95')](-0x1);if(_0x5d3a0b==='/'){_0x1e044e=_0x1e044e[_0xde9f('0x96')](0x0,_0x1e044e[_0xde9f('0x97')](_0x5d3a0b));}_0x3ddd7d=util[_0xde9f('0x98')](_0xde9f('0x99'),_0x1e044e);var _0x1587f1={'method':'POST','uri':_0xde9f('0x9a')+_0x3d28f0[_0xde9f('0x92')]+_0xde9f('0x9b'),'form':{'client_id':_0x3d28f0[_0xde9f('0x93')],'resource':_0x1e044e,'username':_0x3d28f0[_0xde9f('0x8f')],'password':_0x3d28f0[_0xde9f('0x90')],'grant_type':_0xde9f('0x90'),'client_secret':_0x3d28f0['clientSecret']},'json':!![]};return rp(_0x1587f1);}})[_0xde9f('0x17')](function(_0x59fbc6){_0x1ae430=_0x59fbc6['access_token'];var _0x1383c9={'method':_0xde9f('0x9c'),'uri':encodeURI(_0x3ddd7d+_0xde9f('0x9d')+_0x469f86+'\x27'),'headers':{'Authorization':_0xde9f('0x9e')+_0x1ae430,'If-None-Match':null,'OData-Version':_0xde9f('0x9f')},'json':!![]};return rp(_0x1383c9);})[_0xde9f('0x17')](function(_0x14e024){var _0x2423fb=_0x14e024['value'][0x0];var _0x2bc823=_0x2423fb[_0xde9f('0xa0')];var _0x586598={'method':_0xde9f('0x9c'),'uri':_0x3ddd7d+'EntityDefinitions('+_0x2bc823+_0xde9f('0xa1'),'headers':{'Authorization':_0xde9f('0x9e')+_0x1ae430,'If-None-Match':null,'OData-Version':_0xde9f('0x9f')},'json':!![]};return rp(_0x586598);})[_0xde9f('0x17')](function(_0x1a289e){_0x47ec62=_0x1a289e;_0x56793a=_0x47ec62[_0xde9f('0xa2')];_0x56793a=_[_0xde9f('0xa3')](_0x56793a,function(_0x4581df){return!_0x4e0e63[_0xde9f('0xa4')](_0x4581df[_0xde9f('0xa5')]);});var _0x39e2d9=[];var _0xd43dbd=[];_0x56793a['forEach'](function(_0x41be89){if(_0x41be89[_0xde9f('0xa6')]){var _0x469d9a=_0x41be89[_0xde9f('0xa6')]['substring'](_0x41be89[_0xde9f('0xa6')][_0xde9f('0x97')]('.')+0x1);if(_0x469d9a==='PicklistAttributeMetadata'){_0x39e2d9[_0xde9f('0xa7')](getSelectList(_0x3ddd7d,_0x37cc49,_0xd43dbd,_0x47ec62[_0xde9f('0xa0')],_0x41be89[_0xde9f('0xa0')],_0x1ae430));}}});return Promise[_0xde9f('0xa8')](_0x39e2d9);})[_0xde9f('0x17')](function(_0x30c343){_0x132976=_0x30c343[0x0];var _0x4d308c=[];var _0x443954=[];_0x56793a[_0xde9f('0xa9')](function(_0x32adcf){if(!_[_0xde9f('0xaa')](_0x32adcf['@odata.type'])){var _0x2c9327=_0x32adcf['@odata.type']['substring'](_0x32adcf[_0xde9f('0xa6')][_0xde9f('0x97')]('.')+0x1);if(_0x2c9327===_0xde9f('0xab')){_0x4d308c[_0xde9f('0xa7')](getBooleanList(_0x3ddd7d,_0x37cc49,_0x443954,_0x47ec62[_0xde9f('0xa0')],_0x32adcf['MetadataId'],_0x1ae430));}}});return Promise[_0xde9f('0xa8')](_0x4d308c);})[_0xde9f('0x17')](function(_0x41e236){_0x2ab571=_0x41e236[0x0];var _0x3fedd7=[];var _0x5f2089=[];_0x56793a[_0xde9f('0xa9')](function(_0x401e18){if(_0x401e18[_0xde9f('0xa6')]){var _0x2b1eb9=_0x401e18[_0xde9f('0xa6')][_0xde9f('0x96')](_0x401e18[_0xde9f('0xa6')][_0xde9f('0x97')]('.')+0x1);if(_0x2b1eb9===_0xde9f('0xac')||_0x2b1eb9===_0xde9f('0xad')||_0x2b1eb9===_0xde9f('0xae')||_0x2b1eb9===_0xde9f('0xaf')||_0x2b1eb9==='MemoAttributeMetadata'||_0x2b1eb9===_0xde9f('0xb0')||_0x2b1eb9===_0xde9f('0xb1')||_0x2b1eb9===_0xde9f('0xb2')||_0x2b1eb9===_0xde9f('0xb3')||_0x2b1eb9===_0xde9f('0xb4')){_0x3fedd7[_0xde9f('0xa7')](getInputList(_0x3ddd7d,_0x37cc49,_0x2b1eb9,_0x5f2089,_0x47ec62[_0xde9f('0xa0')],_0x401e18[_0xde9f('0xa0')],_0x1ae430));}}});return Promise['all'](_0x3fedd7);})['then'](function(_0x53000d){_0x355b58=_0x53000d[0x0];var _0x49e271=_0x132976[_0xde9f('0x8e')](_0x2ab571)[_0xde9f('0x8e')](_0x355b58);var _0x4b041a={'count':_0x49e271[_0xde9f('0x47')],'rows':_0x49e271};return _0x4b041a;})[_0xde9f('0x17')](respondWithResult(_0x911fa1,null))['catch'](function(_0x134478){console[_0xde9f('0xb5')](_0xde9f('0xb6')+_0x134478);var _0x219c18=_0x1f8b39['query'][_0xde9f('0x15')]?0x1f4:_0x134478[_0xde9f('0xb7')]||0x1f4;logger[_0xde9f('0x1c')](_0x134478[_0xde9f('0xb8')]);delete _0x134478[_0xde9f('0x2d')];if(_0x219c18===0x191){_0x219c18=0x190;}_0x911fa1[_0xde9f('0x23')](_0x219c18)[_0xde9f('0xb9')](_0x1f8b39['query'][_0xde9f('0x15')]?{'message':'Wrong\x20credentials','statusCode':_0x134478[_0xde9f('0xb7')]}:_0x134478);});};function getSelectList(_0xc89ce,_0x16200c,_0x40c0aa,_0x5c581a,_0x50ebb4,_0x18dd44){var _0x412ebd={'method':'GET','uri':_0xc89ce+'EntityDefinitions('+_0x5c581a+_0xde9f('0xba')+_0x50ebb4+_0xde9f('0xbb')+'$select=DisplayName,LogicalName&$expand=OptionSet($select=Options)','headers':{'Authorization':_0xde9f('0x9e')+_0x18dd44,'If-None-Match':null,'OData-Version':_0xde9f('0x9f')},'json':!![]};return rp(_0x412ebd)[_0xde9f('0x17')](function(_0x3d62e2){var _0x123aa7=[];var _0x2dad50=_0x3d62e2[_0xde9f('0xbc')]['Options'];_0x2dad50['forEach'](function(_0x29d903){_0x123aa7[_0xde9f('0xa7')]({'name':_0x29d903['Label']['UserLocalizedLabel']['Label'],'value':String(_0x29d903[_0xde9f('0xbd')])});});var _0x44fa6d={'id':_0x16200c+'_'+_0x3d62e2[_0xde9f('0xa5')],'name':_0x3d62e2['DisplayName'][_0xde9f('0xbe')][_0xde9f('0xbf')],'custom':![],'options':_0x123aa7};_0x40c0aa[_0xde9f('0xa7')](_0x44fa6d);return _0x40c0aa;});}function getBooleanList(_0x2414c3,_0x5e9cce,_0x137c4b,_0xda8491,_0xf02245,_0xd46f66){var _0x231295={'method':_0xde9f('0x9c'),'uri':_0x2414c3+_0xde9f('0xc0')+_0xda8491+_0xde9f('0xba')+_0xf02245+')/Microsoft.Dynamics.CRM.BooleanAttributeMetadata?$select=DisplayName,LogicalName&$expand=OptionSet($select=FalseOption,\x20TrueOption)','headers':{'Authorization':_0xde9f('0x9e')+_0xd46f66,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x231295)[_0xde9f('0x17')](function(_0xae4277){var _0x111a33=[];_0x111a33['push']({'name':_0xae4277['OptionSet'][_0xde9f('0xc1')][_0xde9f('0xbf')]['UserLocalizedLabel'][_0xde9f('0xbf')],'value':_0xde9f('0xc2')},{'name':_0xae4277[_0xde9f('0xbc')][_0xde9f('0xc3')][_0xde9f('0xbf')]['UserLocalizedLabel'][_0xde9f('0xbf')],'value':'false'});var _0x38ed6f={'id':_0x5e9cce+'_'+_0xae4277[_0xde9f('0xa5')],'name':_0xae4277[_0xde9f('0xc4')][_0xde9f('0xbe')]['Label'],'custom':![],'options':_0x111a33};_0x137c4b[_0xde9f('0xa7')](_0x38ed6f);return _0x137c4b;});}function getInputList(_0x569e53,_0x17f295,_0x2b6842,_0x1de388,_0x48e5e8,_0xf2895d,_0x1727a4){var _0x56f470={'method':_0xde9f('0x9c'),'uri':_0x569e53+_0xde9f('0xc0')+_0x48e5e8+_0xde9f('0xba')+_0xf2895d+')/Microsoft.Dynamics.CRM.'+_0x2b6842+'?$select=DisplayName,LogicalName','headers':{'Authorization':_0xde9f('0x9e')+_0x1727a4,'If-None-Match':null,'OData-Version':_0xde9f('0x9f')},'json':!![]};return rp(_0x56f470)[_0xde9f('0x17')](function(_0x63c99f){var _0x3ed32f={'id':_0x17f295+'_'+_0x63c99f[_0xde9f('0xa5')],'name':_0x63c99f[_0xde9f('0xc4')][_0xde9f('0xbe')]?_0x63c99f[_0xde9f('0xc4')][_0xde9f('0xbe')][_0xde9f('0xbf')]:_0x63c99f[_0xde9f('0xa5')],'custom':![],'options':[]};_0x1de388['push'](_0x3ed32f);return _0x1de388;});}
\ No newline at end of file
+var _0x67e7=['../../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~!@#$%^&-_=+[{]}.','request','then','Dynamics365Account,\x20%s,\x20%s','request\x20sent','debug','Dynamics365Account,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','end','json','limit','status','set','Content-Range','update','destroy','stack','name','send','index','Dynamics365Account','rawAttributes','query','filters','intersection','model','fields','length','attributes','offset','sort','filter','where','merge','map','field','options','count','includeAll','include','rows','show','params','keys','find','create','body','getConfigurations','findOne','order','hasOwnProperty','nolimit','addConfiguration','Subjects','getSubjects','type','Descriptions','channel','Dynamics365Configuration','Dynamics365Field','getFields','ticketType','incident','Incident','PhoneCall','title','description','customerid','ownerid','caseorigincode','regardingobjectid','directioncode','accountidname','accountidyominame','billedserviceunits','contactidname','contactidyominame','contractidname','createdbyexternalpartyname','createdbyexternalpartyyominame','createdbyyominame','createdon','createdonbehalfbyname','createdonbehalfbyyominame','customeridtype','customeridyominame','entitlementidname','entityimage_timestamp','entityimage_url','exchangerate','followupby','importsequencenumber','influencescore','kbarticleidname','masteridname','modifiedbyexternalpartyyominame','modifiedbyname','modifiedon','modifiedonbehalfbyname','modifiedonbehalfbyyominame','msdyn_incidenttypename','msdyn_iotalertname','numberofchildincidents','onholdtime','overriddencreatedon','owneridname','owneridyominame','parentcaseidname','primarycontactidname','primarycontactidyominame','productidname','resolveby','resolvebykpiidname','responseby','responsiblecontactidname','responsiblecontactidyominame','sentimentvalue','slainvokedidname','slaname','statuscode','subjectidname','ticketnumber','timezoneruleversionnumber','transactioncurrencyidname','traversedpath','utcconversiontimezonecode','versionnumber','concat','username','remoteUri','tenantId','slice','substring','lastIndexOf','format','%s/api/data/v9.0/','POST','https://login.microsoftonline.com/','/oauth2/token','clientId','password','access_token','GET','4.0','value','MetadataId',')?$select=LogicalName&$expand=Attributes($select=LogicalName)','Bearer\x20','Attributes','remove','forEach','@odata.type','PicklistAttributeMetadata','all','isNil','BooleanAttributeMetadata','DoubleAttributeMetadata','BigIntAttributeMetadata','IntegerAttributeMetadata','MemoAttributeMetadata','StatusAttributeMetadata','EntityNameAttributeMetadata','push','log','Dynamics365\x20error:\x20','statusCode','Wrong\x20credentials','EntityDefinitions(',')/Attributes(',')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?','OptionSet','Label','Value','LogicalName','UserLocalizedLabel',')/Microsoft.Dynamics.CRM.BooleanAttributeMetadata?$select=DisplayName,LogicalName&$expand=OptionSet($select=FalseOption,\x20TrueOption)','TrueOption','true','FalseOption','false','DisplayName','?$select=DisplayName,LogicalName','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment'];(function(_0x12c10c,_0x13bd5c){var _0x5e7c0f=function(_0x2c031b){while(--_0x2c031b){_0x12c10c['push'](_0x12c10c['shift']());}};_0x5e7c0f(++_0x13bd5c);}(_0x67e7,0xc0));var _0x767e=function(_0x1a88a4,_0x24341a){_0x1a88a4=_0x1a88a4-0x0;var _0x1fcfbb=_0x67e7[_0x1a88a4];return _0x1fcfbb;};'use strict';var pdf=require(_0x767e('0x0'));var emlformat=require(_0x767e('0x1'));var rimraf=require(_0x767e('0x2'));var zipdir=require(_0x767e('0x3'));var jsonpatch=require(_0x767e('0x4'));var rp=require('request-promise');var moment=require(_0x767e('0x5'));var BPromise=require(_0x767e('0x6'));var Mustache=require(_0x767e('0x7'));var util=require(_0x767e('0x8'));var path=require('path');var sox=require(_0x767e('0x9'));var csv=require(_0x767e('0xa'));var ejs=require(_0x767e('0xb'));var fs=require('fs');var _=require(_0x767e('0xc'));var squel=require(_0x767e('0xd'));var crypto=require(_0x767e('0xe'));var jsforce=require(_0x767e('0xf'));var deskjs=require('desk.js');var toCsv=require(_0x767e('0xa'));var querystring=require(_0x767e('0x10'));var Papa=require(_0x767e('0x11'));var Redis=require('ioredis');var authService=require(_0x767e('0x12'));var qs=require(_0x767e('0x13'));var hardwareService=require(_0x767e('0x14'));var logger=require(_0x767e('0x15'))(_0x767e('0x16'));var utils=require('../../config/utils');var config=require(_0x767e('0x17'));var db=require(_0x767e('0x18'))['db'];var integrations=require(_0x767e('0x19'));var jayson=require('jayson/promise');var client=jayson['client'][_0x767e('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x257e46,_0x51b29f,_0x21da77){if(_0x21da77){var _0x4aaa18=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4aaa18[_0x767e('0x1b')](_0x51b29f)){return _0x257e46;}else{throw new Error(_0x767e('0x1c'));}}else{return _0x257e46;}}function respondWithRpcPromise(_0x3c6de2,_0x28eceb,_0x5f015f,_0x32ab15){return new BPromise(function(_0x39e8d4,_0x2917ab){var _0x1c43fd=_0x32ab15||client;return _0x1c43fd[_0x767e('0x1d')](_0x3c6de2,_0x5f015f)[_0x767e('0x1e')](function(_0xe2e1f9){logger['info'](_0x767e('0x1f'),_0x28eceb,_0x767e('0x20'));logger[_0x767e('0x21')](_0x767e('0x22'),_0x28eceb,_0x767e('0x20'),JSON[_0x767e('0x23')](_0xe2e1f9));if(_0xe2e1f9[_0x767e('0x24')]){if(_0xe2e1f9[_0x767e('0x24')][_0x767e('0x25')]===0x1f4){logger[_0x767e('0x24')](_0x767e('0x1f'),_0x28eceb,_0xe2e1f9['error'][_0x767e('0x26')]);return _0x2917ab(_0xe2e1f9['error'][_0x767e('0x26')]);}logger['error']('Dynamics365Account,\x20%s,\x20%s',_0x28eceb,_0xe2e1f9[_0x767e('0x24')]['message']);return _0x39e8d4(_0xe2e1f9[_0x767e('0x24')]['message']);}else{logger['info'](_0x767e('0x1f'),_0x28eceb,'request\x20sent');_0x39e8d4(_0xe2e1f9[_0x767e('0x27')]['message']);}})[_0x767e('0x28')](function(_0x2fcdf4){logger['error'](_0x767e('0x1f'),_0x28eceb,_0x2fcdf4);_0x2917ab(_0x2fcdf4);});});}function respondWithStatusCode(_0x52b0b9,_0x1239de){_0x1239de=_0x1239de||0xcc;return function(_0x19ccd2){if(_0x19ccd2){return _0x52b0b9[_0x767e('0x29')](_0x1239de);}return _0x52b0b9['status'](_0x1239de)[_0x767e('0x2a')]();};}function respondWithResult(_0x23cd48,_0x235424){_0x235424=_0x235424||0xc8;return function(_0x5f3c76){if(_0x5f3c76){return _0x23cd48['status'](_0x235424)[_0x767e('0x2b')](_0x5f3c76);}};}function respondWithFilteredResult(_0x7cae98,_0x3d739f){return function(_0x5dcb36){if(_0x5dcb36){var _0x57d25f=_0x5dcb36['count'],_0x3c8dcf=_0x3d739f['offset'],_0x2f71c0=_0x3d739f['offset']+_0x3d739f[_0x767e('0x2c')],_0x47dbc5;if(_0x2f71c0>=_0x57d25f){_0x2f71c0=_0x57d25f;_0x47dbc5=0xc8;}else{_0x47dbc5=0xce;}_0x7cae98[_0x767e('0x2d')](_0x47dbc5);return _0x7cae98[_0x767e('0x2e')](_0x767e('0x2f'),_0x3c8dcf+'-'+_0x2f71c0+'/'+_0x57d25f)['json'](_0x5dcb36);}return null;};}function patchUpdates(_0xbe44e6){return function(_0x3f6459){try{jsonpatch['apply'](_0x3f6459,_0xbe44e6,!![]);}catch(_0x45eb1e){return BPromise['reject'](_0x45eb1e);}return _0x3f6459['save']();};}function saveUpdates(_0x1bd97b,_0x145c1a){return function(_0x23c5a7){if(_0x23c5a7){return _0x23c5a7[_0x767e('0x30')](_0x1bd97b)['then'](function(_0x858990){return _0x858990;});}return null;};}function removeEntity(_0x4e0505,_0x5e74fa){return function(_0x4ce322){if(_0x4ce322){return _0x4ce322[_0x767e('0x31')]()['then'](function(){_0x4e0505[_0x767e('0x2d')](0xcc)[_0x767e('0x2a')]();});}};}function handleEntityNotFound(_0x4017ad,_0x2af8f3){return function(_0x5a5fc4){if(!_0x5a5fc4){_0x4017ad[_0x767e('0x29')](0x194);}return _0x5a5fc4;};}function handleError(_0x3ff728,_0x534839){_0x534839=_0x534839||0x1f4;return function(_0x57073e){logger[_0x767e('0x24')](_0x57073e[_0x767e('0x32')]);if(_0x57073e[_0x767e('0x33')]){delete _0x57073e['name'];}_0x3ff728['status'](_0x534839)[_0x767e('0x34')](_0x57073e);};}exports[_0x767e('0x35')]=function(_0x5aca77,_0x1b0773){var _0x214e11={},_0x117d46={},_0xdeccd1={'count':0x0,'rows':[]};var _0x146bae=db[_0x767e('0x36')][_0x767e('0x37')];_0x117d46['model']=_['keys'](_0x146bae);_0x117d46[_0x767e('0x38')]=_['keys'](_0x5aca77[_0x767e('0x38')]);_0x117d46[_0x767e('0x39')]=_[_0x767e('0x3a')](_0x117d46[_0x767e('0x3b')],_0x117d46['query']);_0x214e11['attributes']=_[_0x767e('0x3a')](_0x117d46['model'],qs[_0x767e('0x3c')](_0x5aca77[_0x767e('0x38')][_0x767e('0x3c')]));_0x214e11['attributes']=_0x214e11['attributes'][_0x767e('0x3d')]?_0x214e11[_0x767e('0x3e')]:_0x117d46[_0x767e('0x3b')];if(!_0x5aca77[_0x767e('0x38')]['hasOwnProperty']('nolimit')){_0x214e11[_0x767e('0x2c')]=qs[_0x767e('0x2c')](_0x5aca77[_0x767e('0x38')]['limit']);_0x214e11['offset']=qs['offset'](_0x5aca77[_0x767e('0x38')][_0x767e('0x3f')]);}_0x214e11['order']=qs[_0x767e('0x40')](_0x5aca77['query'][_0x767e('0x40')]);_0x214e11['where']=qs[_0x767e('0x39')](_['pick'](_0x5aca77[_0x767e('0x38')],_0x117d46[_0x767e('0x39')]));if(_0x5aca77[_0x767e('0x38')][_0x767e('0x41')]){_0x214e11[_0x767e('0x42')]=_[_0x767e('0x43')](_0x214e11[_0x767e('0x42')],{'$or':_[_0x767e('0x44')](_0x146bae,function(_0x2e92ec){if(_0x2e92ec['type']['key']!=='VIRTUAL'){var _0x86fe4b={};_0x86fe4b[_0x2e92ec[_0x767e('0x45')]]={'$like':'%'+_0x5aca77['query'][_0x767e('0x41')]+'%'};return _0x86fe4b;}})});}_0x214e11=_[_0x767e('0x43')]({},_0x214e11,_0x5aca77[_0x767e('0x46')]);var _0x51a05f={'where':_0x214e11[_0x767e('0x42')]};return db[_0x767e('0x36')][_0x767e('0x47')](_0x51a05f)[_0x767e('0x1e')](function(_0x62938f){_0xdeccd1[_0x767e('0x47')]=_0x62938f;if(_0x5aca77['query'][_0x767e('0x48')]){_0x214e11[_0x767e('0x49')]=[{'all':!![]}];}return db[_0x767e('0x36')]['findAll'](_0x214e11);})['then'](function(_0xa1596d){_0xdeccd1[_0x767e('0x4a')]=_0xa1596d;return _0xdeccd1;})[_0x767e('0x1e')](respondWithFilteredResult(_0x1b0773,_0x214e11))[_0x767e('0x28')](handleError(_0x1b0773,null));};exports[_0x767e('0x4b')]=function(_0x41289e,_0x55a31d){var _0x13f651={'raw':![],'where':{'id':_0x41289e[_0x767e('0x4c')]['id']}},_0x1d05c3={};_0x1d05c3[_0x767e('0x3b')]=_[_0x767e('0x4d')](db[_0x767e('0x36')][_0x767e('0x37')]);_0x1d05c3[_0x767e('0x38')]=_[_0x767e('0x4d')](_0x41289e[_0x767e('0x38')]);_0x1d05c3[_0x767e('0x39')]=_[_0x767e('0x3a')](_0x1d05c3['model'],_0x1d05c3[_0x767e('0x38')]);_0x13f651['attributes']=_[_0x767e('0x3a')](_0x1d05c3[_0x767e('0x3b')],qs[_0x767e('0x3c')](_0x41289e['query']['fields']));_0x13f651[_0x767e('0x3e')]=_0x13f651[_0x767e('0x3e')][_0x767e('0x3d')]?_0x13f651[_0x767e('0x3e')]:_0x1d05c3['model'];if(_0x41289e[_0x767e('0x38')][_0x767e('0x48')]){_0x13f651['include']=[{'all':!![]}];}_0x13f651=_[_0x767e('0x43')]({},_0x13f651,_0x41289e[_0x767e('0x46')]);return db['Dynamics365Account'][_0x767e('0x4e')](_0x13f651)[_0x767e('0x1e')](handleEntityNotFound(_0x55a31d,null))[_0x767e('0x1e')](respondWithResult(_0x55a31d,null))[_0x767e('0x28')](handleError(_0x55a31d,null));};exports[_0x767e('0x4f')]=function(_0x3480b2,_0x5e5063){return db['Dynamics365Account'][_0x767e('0x4f')](_0x3480b2['body'],{})[_0x767e('0x1e')](respondWithResult(_0x5e5063,0xc9))[_0x767e('0x28')](handleError(_0x5e5063,null));};exports[_0x767e('0x30')]=function(_0x4df72a,_0x46ce2e){if(_0x4df72a[_0x767e('0x50')]['id']){delete _0x4df72a['body']['id'];}return db['Dynamics365Account'][_0x767e('0x4e')]({'where':{'id':_0x4df72a[_0x767e('0x4c')]['id']}})[_0x767e('0x1e')](handleEntityNotFound(_0x46ce2e,null))[_0x767e('0x1e')](saveUpdates(_0x4df72a[_0x767e('0x50')],null))[_0x767e('0x1e')](respondWithResult(_0x46ce2e,null))[_0x767e('0x28')](handleError(_0x46ce2e,null));};exports[_0x767e('0x31')]=function(_0x2f7e4b,_0x1110a0){return db[_0x767e('0x36')]['find']({'where':{'id':_0x2f7e4b[_0x767e('0x4c')]['id']}})[_0x767e('0x1e')](handleEntityNotFound(_0x1110a0,null))['then'](removeEntity(_0x1110a0,null))[_0x767e('0x28')](handleError(_0x1110a0,null));};exports[_0x767e('0x51')]=function(_0x47748c,_0x130001,_0xfaddfe){var _0x3035f5={};var _0x1b67d7={};var _0x243a1f;var _0x243d3b;return db[_0x767e('0x36')][_0x767e('0x52')]({'where':{'id':_0x47748c[_0x767e('0x4c')]['id']}})['then'](handleEntityNotFound(_0x130001,null))[_0x767e('0x1e')](function(_0xe8852b){if(_0xe8852b){_0x243a1f=_0xe8852b;_0x1b67d7[_0x767e('0x3b')]=_[_0x767e('0x4d')](db['Dynamics365Configuration'][_0x767e('0x37')]);_0x1b67d7[_0x767e('0x38')]=_['keys'](_0x47748c[_0x767e('0x38')]);_0x1b67d7[_0x767e('0x39')]=_['intersection'](_0x1b67d7['model'],_0x1b67d7[_0x767e('0x38')]);_0x3035f5[_0x767e('0x3e')]=_[_0x767e('0x3a')](_0x1b67d7['model'],qs[_0x767e('0x3c')](_0x47748c[_0x767e('0x38')][_0x767e('0x3c')]));_0x3035f5[_0x767e('0x3e')]=_0x3035f5[_0x767e('0x3e')][_0x767e('0x3d')]?_0x3035f5[_0x767e('0x3e')]:_0x1b67d7[_0x767e('0x3b')];_0x3035f5[_0x767e('0x53')]=qs[_0x767e('0x40')](_0x47748c[_0x767e('0x38')][_0x767e('0x40')]);_0x3035f5[_0x767e('0x42')]=qs['filters'](_['pick'](_0x47748c['query'],_0x1b67d7[_0x767e('0x39')]));if(_0x47748c[_0x767e('0x38')][_0x767e('0x41')]){_0x3035f5[_0x767e('0x42')]=_[_0x767e('0x43')](_0x3035f5[_0x767e('0x42')],{'$or':_[_0x767e('0x44')](_0x3035f5[_0x767e('0x3e')],function(_0x269257){var _0x4fb26f={};_0x4fb26f[_0x269257]={'$like':'%'+_0x47748c[_0x767e('0x38')]['filter']+'%'};return _0x4fb26f;})});}_0x3035f5=_[_0x767e('0x43')]({},_0x3035f5,_0x47748c['options']);return _0x243a1f[_0x767e('0x51')](_0x3035f5);}})['then'](function(_0x10e55d){if(_0x10e55d){_0x243d3b=_0x10e55d[_0x767e('0x3d')];if(!_0x47748c['query'][_0x767e('0x54')](_0x767e('0x55'))){_0x3035f5[_0x767e('0x2c')]=qs['limit'](_0x47748c['query']['limit']);_0x3035f5[_0x767e('0x3f')]=qs[_0x767e('0x3f')](_0x47748c[_0x767e('0x38')][_0x767e('0x3f')]);}return _0x243a1f[_0x767e('0x51')](_0x3035f5);}})[_0x767e('0x1e')](function(_0x4d5790){if(_0x4d5790){return _0x4d5790?{'count':_0x243d3b,'rows':_0x4d5790}:null;}})[_0x767e('0x1e')](respondWithResult(_0x130001,null))[_0x767e('0x28')](handleError(_0x130001,null));};exports[_0x767e('0x56')]=function(_0x2ef610,_0x33b657,_0x3e685c){if(_0x2ef610[_0x767e('0x50')]['id']){delete _0x2ef610[_0x767e('0x50')]['id'];}return db[_0x767e('0x36')][_0x767e('0x52')]({'where':{'id':_0x2ef610[_0x767e('0x4c')]['id']}})[_0x767e('0x1e')](handleEntityNotFound(_0x33b657,null))[_0x767e('0x1e')](function(_0x5236e3){if(_0x5236e3){_0x2ef610[_0x767e('0x50')]['AccountId']=_0x5236e3['id'];_0x2ef610['body'][_0x767e('0x57')]=integrations[_0x767e('0x58')](_0x2ef610[_0x767e('0x50')]['channel'],_0x2ef610['body'][_0x767e('0x59')]);_0x2ef610['body'][_0x767e('0x5a')]=integrations['getDescriptions'](_0x2ef610[_0x767e('0x50')][_0x767e('0x5b')],_0x2ef610['body'][_0x767e('0x59')]);return db[_0x767e('0x5c')][_0x767e('0x4f')](_0x2ef610[_0x767e('0x50')],{'include':[{'model':db[_0x767e('0x5d')],'as':'Subjects'},{'model':db[_0x767e('0x5d')],'as':'Descriptions'}]});}return null;})[_0x767e('0x1e')](respondWithResult(_0x33b657,null))[_0x767e('0x28')](handleError(_0x33b657,null));};exports[_0x767e('0x5e')]=function(_0x5de869,_0x3d4a5d,_0x2da905){var _0x20c263=_0x5de869['query'][_0x767e('0x5f')];var _0x7ccc91=_0x20c263===_0x767e('0x60')?_0x767e('0x61'):_0x767e('0x62');var _0x15e150='';var _0x22d0d9='';var _0x1559d0='';var _0x5b2b7d='';var _0x20e714='';var _0x58efa0='';var _0x581145='';var _0x2b9b88='';var _0x170a40=[_0x767e('0x63'),_0x767e('0x64'),_0x767e('0x65'),_0x767e('0x66'),_0x767e('0x67'),'subject','phonenumber',_0x767e('0x68'),_0x767e('0x69'),'phonecall_activity_parties'];var _0x54a9eb=[_0x767e('0x6a'),_0x767e('0x6b'),'actualserviceunits',_0x767e('0x6c'),_0x767e('0x6d'),_0x767e('0x6e'),'contractdetailidname',_0x767e('0x6f'),_0x767e('0x70'),_0x767e('0x71'),'createdbyname',_0x767e('0x72'),_0x767e('0x73'),_0x767e('0x74'),_0x767e('0x75'),'customeridname',_0x767e('0x76'),_0x767e('0x77'),'emailaddress',_0x767e('0x78'),_0x767e('0x79'),_0x767e('0x7a'),'escalatedon',_0x767e('0x7b'),'firstresponsebykpiidname',_0x767e('0x7c'),_0x767e('0x7d'),_0x767e('0x7e'),_0x767e('0x7f'),'lastonholdtime',_0x767e('0x80'),'modifiedbyexternalpartyname',_0x767e('0x81'),_0x767e('0x82'),'modifiedbyyominame',_0x767e('0x83'),_0x767e('0x84'),_0x767e('0x85'),_0x767e('0x86'),_0x767e('0x87'),_0x767e('0x88'),_0x767e('0x89'),_0x767e('0x8a'),_0x767e('0x8b'),'owneridtype',_0x767e('0x8c'),_0x767e('0x8d'),_0x767e('0x8e'),_0x767e('0x8f'),'prioritycodename',_0x767e('0x90'),'productserialnumber',_0x767e('0x91'),_0x767e('0x92'),_0x767e('0x93'),_0x767e('0x94'),_0x767e('0x95'),_0x767e('0x96'),_0x767e('0x97'),_0x767e('0x98'),'socialprofileidname','statecode',_0x767e('0x99'),_0x767e('0x9a'),_0x767e('0x9b'),_0x767e('0x9c'),_0x767e('0x9d'),_0x767e('0x9e'),_0x767e('0x9f'),_0x767e('0xa0')];var _0x513e5b=_0x170a40[_0x767e('0xa1')](_0x54a9eb);return db[_0x767e('0x36')]['findOne']({'where':{'id':_0x5de869[_0x767e('0x4c')]['id']},'attributes':['id',_0x767e('0xa2'),'password',_0x767e('0xa3'),_0x767e('0xa4'),'clientId','clientSecret']})[_0x767e('0x1e')](handleEntityNotFound(_0x3d4a5d,null))[_0x767e('0x1e')](function(_0x23f8d5){if(_0x23f8d5){_0x2b9b88=_0x23f8d5[_0x767e('0xa3')];var _0x1b5da=_0x2b9b88[_0x767e('0xa5')](-0x1);if(_0x1b5da==='/'){_0x2b9b88=_0x2b9b88[_0x767e('0xa6')](0x0,_0x2b9b88[_0x767e('0xa7')](_0x1b5da));}_0x581145=util[_0x767e('0xa8')](_0x767e('0xa9'),_0x2b9b88);var _0x422bf2={'method':_0x767e('0xaa'),'uri':_0x767e('0xab')+_0x23f8d5[_0x767e('0xa4')]+_0x767e('0xac'),'form':{'client_id':_0x23f8d5[_0x767e('0xad')],'resource':_0x2b9b88,'username':_0x23f8d5[_0x767e('0xa2')],'password':_0x23f8d5['password'],'grant_type':_0x767e('0xae'),'client_secret':_0x23f8d5['clientSecret']},'json':!![]};return rp(_0x422bf2);}})['then'](function(_0x28c2c3){_0x58efa0=_0x28c2c3[_0x767e('0xaf')];var _0x35af75={'method':_0x767e('0xb0'),'uri':encodeURI(_0x581145+'EntityDefinitions?$select=DisplayName,EntitySetName&$filter=SchemaName\x20eq\x20\x27'+_0x7ccc91+'\x27'),'headers':{'Authorization':'Bearer\x20'+_0x58efa0,'If-None-Match':null,'OData-Version':_0x767e('0xb1')},'json':!![]};return rp(_0x35af75);})[_0x767e('0x1e')](function(_0x361b6e){var _0x1f809e=_0x361b6e[_0x767e('0xb2')][0x0];var _0x5814fe=_0x1f809e[_0x767e('0xb3')];var _0x426b4c={'method':'GET','uri':_0x581145+'EntityDefinitions('+_0x5814fe+_0x767e('0xb4'),'headers':{'Authorization':_0x767e('0xb5')+_0x58efa0,'If-None-Match':null,'OData-Version':_0x767e('0xb1')},'json':!![]};return rp(_0x426b4c);})['then'](function(_0xc8bfe9){_0x15e150=_0xc8bfe9;_0x22d0d9=_0x15e150[_0x767e('0xb6')];_0x22d0d9=_[_0x767e('0xb7')](_0x22d0d9,function(_0x4ce662){return!_0x513e5b['includes'](_0x4ce662['LogicalName']);});var _0x46999a=[];var _0x3dd6a7=[];_0x22d0d9[_0x767e('0xb8')](function(_0x15f47d){if(_0x15f47d[_0x767e('0xb9')]){var _0x244a93=_0x15f47d[_0x767e('0xb9')][_0x767e('0xa6')](_0x15f47d[_0x767e('0xb9')][_0x767e('0xa7')]('.')+0x1);if(_0x244a93===_0x767e('0xba')){_0x46999a['push'](getSelectList(_0x581145,_0x20c263,_0x3dd6a7,_0x15e150['MetadataId'],_0x15f47d[_0x767e('0xb3')],_0x58efa0));}}});return Promise[_0x767e('0xbb')](_0x46999a);})[_0x767e('0x1e')](function(_0x4d7585){_0x1559d0=_0x4d7585[0x0];var _0x5f4130=[];var _0x1e53f0=[];_0x22d0d9[_0x767e('0xb8')](function(_0x56d601){if(!_[_0x767e('0xbc')](_0x56d601[_0x767e('0xb9')])){var _0x556a1e=_0x56d601['@odata.type']['substring'](_0x56d601['@odata.type']['lastIndexOf']('.')+0x1);if(_0x556a1e===_0x767e('0xbd')){_0x5f4130['push'](getBooleanList(_0x581145,_0x20c263,_0x1e53f0,_0x15e150[_0x767e('0xb3')],_0x56d601[_0x767e('0xb3')],_0x58efa0));}}});return Promise[_0x767e('0xbb')](_0x5f4130);})[_0x767e('0x1e')](function(_0x2ea006){_0x5b2b7d=_0x2ea006[0x0];var _0x1049ef=[];var _0x3e6efd=[];_0x22d0d9[_0x767e('0xb8')](function(_0x4e720f){if(_0x4e720f[_0x767e('0xb9')]){var _0x209132=_0x4e720f['@odata.type'][_0x767e('0xa6')](_0x4e720f[_0x767e('0xb9')][_0x767e('0xa7')]('.')+0x1);if(_0x209132==='StringAttributeMetadata'||_0x209132===_0x767e('0xbe')||_0x209132===_0x767e('0xbf')||_0x209132===_0x767e('0xc0')||_0x209132===_0x767e('0xc1')||_0x209132==='DateTimeAttributeMetadata'||_0x209132===_0x767e('0xc2')||_0x209132===_0x767e('0xc3')||_0x209132==='StateAttributeMetadata'||_0x209132==='DecimalAttributeMetadata'){_0x1049ef[_0x767e('0xc4')](getInputList(_0x581145,_0x20c263,_0x209132,_0x3e6efd,_0x15e150['MetadataId'],_0x4e720f[_0x767e('0xb3')],_0x58efa0));}}});return Promise[_0x767e('0xbb')](_0x1049ef);})[_0x767e('0x1e')](function(_0x36304b){_0x20e714=_0x36304b[0x0];var _0x32e0ec=_0x1559d0[_0x767e('0xa1')](_0x5b2b7d)[_0x767e('0xa1')](_0x20e714);var _0x1673fa={'count':_0x32e0ec[_0x767e('0x3d')],'rows':_0x32e0ec};return _0x1673fa;})[_0x767e('0x1e')](respondWithResult(_0x3d4a5d,null))[_0x767e('0x28')](function(_0x4e03f0){console[_0x767e('0xc5')](_0x767e('0xc6')+_0x4e03f0);var _0x4de1ec=_0x5de869[_0x767e('0x38')]['test']?0x1f4:_0x4e03f0[_0x767e('0xc7')]||0x1f4;logger[_0x767e('0x24')](_0x4e03f0['stack']);delete _0x4e03f0[_0x767e('0x33')];if(_0x4de1ec===0x191){_0x4de1ec=0x190;}_0x3d4a5d['status'](_0x4de1ec)[_0x767e('0x34')](_0x5de869[_0x767e('0x38')]['test']?{'message':_0x767e('0xc8'),'statusCode':_0x4e03f0[_0x767e('0xc7')]}:_0x4e03f0);});};function getSelectList(_0x202a42,_0x47acf8,_0x5a2290,_0x5e79ee,_0x135cb5,_0x376db1){var _0x41463d={'method':'GET','uri':_0x202a42+_0x767e('0xc9')+_0x5e79ee+_0x767e('0xca')+_0x135cb5+_0x767e('0xcb')+'$select=DisplayName,LogicalName&$expand=OptionSet($select=Options)','headers':{'Authorization':_0x767e('0xb5')+_0x376db1,'If-None-Match':null,'OData-Version':_0x767e('0xb1')},'json':!![]};return rp(_0x41463d)[_0x767e('0x1e')](function(_0x817008){var _0x55de26=[];var _0x5e7336=_0x817008[_0x767e('0xcc')]['Options'];_0x5e7336[_0x767e('0xb8')](function(_0x412d00){_0x55de26['push']({'name':_0x412d00[_0x767e('0xcd')]['UserLocalizedLabel'][_0x767e('0xcd')],'value':String(_0x412d00[_0x767e('0xce')])});});var _0x44c397={'id':_0x47acf8+'_'+_0x817008[_0x767e('0xcf')],'name':_0x817008['DisplayName'][_0x767e('0xd0')][_0x767e('0xcd')],'custom':![],'options':_0x55de26};_0x5a2290[_0x767e('0xc4')](_0x44c397);return _0x5a2290;});}function getBooleanList(_0x495f79,_0x54299c,_0x51c814,_0x45f6b6,_0x5a28b1,_0x537368){var _0x303c11={'method':_0x767e('0xb0'),'uri':_0x495f79+'EntityDefinitions('+_0x45f6b6+_0x767e('0xca')+_0x5a28b1+_0x767e('0xd1'),'headers':{'Authorization':_0x767e('0xb5')+_0x537368,'If-None-Match':null,'OData-Version':_0x767e('0xb1')},'json':!![]};return rp(_0x303c11)[_0x767e('0x1e')](function(_0x56ebcf){var _0x81a8a1=[];_0x81a8a1[_0x767e('0xc4')]({'name':_0x56ebcf[_0x767e('0xcc')][_0x767e('0xd2')][_0x767e('0xcd')][_0x767e('0xd0')][_0x767e('0xcd')],'value':_0x767e('0xd3')},{'name':_0x56ebcf[_0x767e('0xcc')][_0x767e('0xd4')]['Label']['UserLocalizedLabel']['Label'],'value':_0x767e('0xd5')});var _0x1576f0={'id':_0x54299c+'_'+_0x56ebcf[_0x767e('0xcf')],'name':_0x56ebcf[_0x767e('0xd6')][_0x767e('0xd0')][_0x767e('0xcd')],'custom':![],'options':_0x81a8a1};_0x51c814['push'](_0x1576f0);return _0x51c814;});}function getInputList(_0x4cf4c2,_0x1fbf87,_0x1b573b,_0x53cf0d,_0x11b154,_0x35ec63,_0x341506){var _0x5cb6e9={'method':'GET','uri':_0x4cf4c2+_0x767e('0xc9')+_0x11b154+_0x767e('0xca')+_0x35ec63+')/Microsoft.Dynamics.CRM.'+_0x1b573b+_0x767e('0xd7'),'headers':{'Authorization':'Bearer\x20'+_0x341506,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x5cb6e9)[_0x767e('0x1e')](function(_0x4b9497){var _0x4bc3c5={'id':_0x1fbf87+'_'+_0x4b9497[_0x767e('0xcf')],'name':_0x4b9497[_0x767e('0xd6')][_0x767e('0xd0')]?_0x4b9497[_0x767e('0xd6')][_0x767e('0xd0')][_0x767e('0xcd')]:_0x4b9497[_0x767e('0xcf')],'custom':![],'options':[]};_0x53cf0d[_0x767e('0xc4')](_0x4bc3c5);return _0x53cf0d;});}
\ No newline at end of file
index 08d4a30..56fda49 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5ade=['../../config/logger','api','moment','bluebird','../../config/environment','./intDynamics365Account.attributes','../../components/integrations/configuration','define','int_dynamics365_accounts','util'];(function(_0xa323b1,_0x3f5f4e){var _0x4dde8e=function(_0x179180){while(--_0x179180){_0xa323b1['push'](_0xa323b1['shift']());}};_0x4dde8e(++_0x3f5f4e);}(_0x5ade,0x1df));var _0xe5ad=function(_0x560923,_0xe76b4f){_0x560923=_0x560923-0x0;var _0x313aa9=_0x5ade[_0x560923];return _0x313aa9;};'use strict';var _=require('lodash');var util=require(_0xe5ad('0x0'));var logger=require(_0xe5ad('0x1'))(_0xe5ad('0x2'));var moment=require(_0xe5ad('0x3'));var BPromise=require(_0xe5ad('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0xe5ad('0x5'));var attributes=require(_0xe5ad('0x6'));var integrations=require(_0xe5ad('0x7'));module['exports']=function(_0x3f1254,_0x1cdd5c){return _0x3f1254[_0xe5ad('0x8')]('Dynamics365Account',attributes,{'tableName':_0xe5ad('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd6de=['exports','int_dynamics365_accounts','util','../../config/logger','api','moment','bluebird','./intDynamics365Account.attributes','../../components/integrations/configuration'];(function(_0x417abf,_0x11e785){var _0xed2c60=function(_0x30a997){while(--_0x30a997){_0x417abf['push'](_0x417abf['shift']());}};_0xed2c60(++_0x11e785);}(_0xd6de,0xe3));var _0xed6d=function(_0x36c5b0,_0x5001da){_0x36c5b0=_0x36c5b0-0x0;var _0xf19333=_0xd6de[_0x36c5b0];return _0xf19333;};'use strict';var _=require('lodash');var util=require(_0xed6d('0x0'));var logger=require(_0xed6d('0x1'))(_0xed6d('0x2'));var moment=require(_0xed6d('0x3'));var BPromise=require(_0xed6d('0x4'));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(_0xed6d('0x5'));var integrations=require(_0xed6d('0x6'));module[_0xed6d('0x7')]=function(_0x2dc6ca,_0x3709cc){return _0x2dc6ca['define']('Dynamics365Account',attributes,{'tableName':_0xed6d('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index af48cbc..1a20ac3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x42cc=['../../config/environment','request','then','info','request\x20sent','debug','Dynamics365Account,\x20%s,\x20%s,\x20%s','error','message','Dynamics365Account,\x20%s,\x20%s','result','GetDynamics365Account','Dynamics365Account','findAll','options','raw','where','include','map','model','attributes','stringify','catch','ShowDynamics365Account','find','lodash','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x3a2ddf,_0x226a45){var _0x14c6a3=function(_0x57b011){while(--_0x57b011){_0x3a2ddf['push'](_0x3a2ddf['shift']());}};_0x14c6a3(++_0x226a45);}(_0x42cc,0x199));var _0xc42c=function(_0x516ffb,_0x5b5b42){_0x516ffb=_0x516ffb-0x0;var _0x319667=_0x42cc[_0x516ffb];return _0x319667;};'use strict';var _=require(_0xc42c('0x0'));var util=require('util');var moment=require(_0xc42c('0x1'));var BPromise=require('bluebird');var rs=require(_0xc42c('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xc42c('0x3'))['db'];var utils=require(_0xc42c('0x4'));var logger=require(_0xc42c('0x5'))(_0xc42c('0x6'));var config=require(_0xc42c('0x7'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x834e99,_0x395259,_0x2ea1de){return new BPromise(function(_0x36e4db,_0x4a03e5){return client[_0xc42c('0x8')](_0x834e99,_0x2ea1de)[_0xc42c('0x9')](function(_0x11b6ab){logger[_0xc42c('0xa')]('Dynamics365Account,\x20%s,\x20%s',_0x395259,_0xc42c('0xb'));logger[_0xc42c('0xc')](_0xc42c('0xd'),_0x395259,'request\x20sent',JSON['stringify'](_0x11b6ab));if(_0x11b6ab[_0xc42c('0xe')]){if(_0x11b6ab[_0xc42c('0xe')]['code']===0x1f4){logger[_0xc42c('0xe')]('Dynamics365Account,\x20%s,\x20%s',_0x395259,_0x11b6ab[_0xc42c('0xe')][_0xc42c('0xf')]);return _0x4a03e5(_0x11b6ab[_0xc42c('0xe')][_0xc42c('0xf')]);}logger[_0xc42c('0xe')](_0xc42c('0x10'),_0x395259,_0x11b6ab[_0xc42c('0xe')][_0xc42c('0xf')]);return _0x36e4db(_0x11b6ab[_0xc42c('0xe')][_0xc42c('0xf')]);}else{logger[_0xc42c('0xa')](_0xc42c('0x10'),_0x395259,'request\x20sent');_0x36e4db(_0x11b6ab[_0xc42c('0x11')]['message']);}})['catch'](function(_0x3dd1e6){logger[_0xc42c('0xe')](_0xc42c('0x10'),_0x395259,_0x3dd1e6);_0x4a03e5(_0x3dd1e6);});});}exports[_0xc42c('0x12')]=function(_0x5ae72e){var _0x57b1f7=this;return new Promise(function(_0x133fb5,_0x2440f0){return db[_0xc42c('0x13')][_0xc42c('0x14')]({'raw':_0x5ae72e[_0xc42c('0x15')]?_0x5ae72e[_0xc42c('0x15')][_0xc42c('0x16')]===undefined?!![]:![]:!![],'where':_0x5ae72e[_0xc42c('0x15')]?_0x5ae72e[_0xc42c('0x15')][_0xc42c('0x17')]||null:null,'attributes':_0x5ae72e[_0xc42c('0x15')]?_0x5ae72e[_0xc42c('0x15')]['attributes']||null:null,'limit':_0x5ae72e[_0xc42c('0x15')]?_0x5ae72e[_0xc42c('0x15')]['limit']||null:null,'include':_0x5ae72e['options']?_0x5ae72e[_0xc42c('0x15')][_0xc42c('0x18')]?_[_0xc42c('0x19')](_0x5ae72e['options'][_0xc42c('0x18')],function(_0x24a004){return{'model':db[_0x24a004[_0xc42c('0x1a')]],'as':_0x24a004['as'],'attributes':_0x24a004[_0xc42c('0x1b')],'include':_0x24a004[_0xc42c('0x18')]?_[_0xc42c('0x19')](_0x24a004['include'],function(_0x13601c){return{'model':db[_0x13601c['model']],'as':_0x13601c['as'],'attributes':_0x13601c['attributes'],'include':_0x13601c[_0xc42c('0x18')]?_[_0xc42c('0x19')](_0x13601c[_0xc42c('0x18')],function(_0x495713){return{'model':db[_0x495713[_0xc42c('0x1a')]],'as':_0x495713['as'],'attributes':_0x495713[_0xc42c('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x4975eb){logger[_0xc42c('0xa')](_0xc42c('0x12'),_0x5ae72e);logger[_0xc42c('0xc')](_0xc42c('0x12'),_0x5ae72e,JSON[_0xc42c('0x1c')](_0x4975eb));_0x133fb5(_0x4975eb);})[_0xc42c('0x1d')](function(_0x2c91f6){logger[_0xc42c('0xe')](_0xc42c('0x12'),_0x2c91f6[_0xc42c('0xf')],_0x5ae72e);_0x2440f0(_0x57b1f7[_0xc42c('0xe')](0x1f4,_0x2c91f6[_0xc42c('0xf')]));});});};exports[_0xc42c('0x1e')]=function(_0x4b5994){var _0x3f4bf6=this;return new Promise(function(_0x50790e,_0x3e92dd){return db['Dynamics365Account'][_0xc42c('0x1f')]({'raw':_0x4b5994[_0xc42c('0x15')]?_0x4b5994[_0xc42c('0x15')][_0xc42c('0x16')]===undefined?!![]:![]:!![],'where':_0x4b5994['options']?_0x4b5994['options']['where']||null:null,'attributes':_0x4b5994[_0xc42c('0x15')]?_0x4b5994[_0xc42c('0x15')][_0xc42c('0x1b')]||null:null,'include':_0x4b5994[_0xc42c('0x15')]?_0x4b5994[_0xc42c('0x15')]['include']?_['map'](_0x4b5994['options'][_0xc42c('0x18')],function(_0x18d330){return{'model':db[_0x18d330[_0xc42c('0x1a')]],'as':_0x18d330['as'],'attributes':_0x18d330[_0xc42c('0x1b')],'include':_0x18d330['include']?_['map'](_0x18d330[_0xc42c('0x18')],function(_0x29cbae){return{'model':db[_0x29cbae[_0xc42c('0x1a')]],'as':_0x29cbae['as'],'attributes':_0x29cbae['attributes'],'include':_0x29cbae[_0xc42c('0x18')]?_['map'](_0x29cbae[_0xc42c('0x18')],function(_0x9a385){return{'model':db[_0x9a385[_0xc42c('0x1a')]],'as':_0x9a385['as'],'attributes':_0x9a385[_0xc42c('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x4dc19a){logger[_0xc42c('0xa')]('ShowDynamics365Account',_0x4b5994);logger[_0xc42c('0xc')]('ShowDynamics365Account',_0x4b5994,JSON[_0xc42c('0x1c')](_0x4dc19a));_0x50790e(_0x4dc19a);})[_0xc42c('0x1d')](function(_0x1f876d){logger[_0xc42c('0xe')]('ShowDynamics365Account',_0x1f876d[_0xc42c('0xf')],_0x4b5994);_0x3e92dd(_0x3f4bf6[_0xc42c('0xe')](0x1f4,_0x1f876d[_0xc42c('0xf')]));});});};
\ No newline at end of file
+var _0x91ca=['model','ShowDynamics365Account','find','where','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','Dynamics365Account,\x20%s,\x20%s,\x20%s','stringify','error','code','Dynamics365Account,\x20%s,\x20%s','message','result','catch','GetDynamics365Account','Dynamics365Account','findAll','options','raw','attributes','limit','map','include'];(function(_0x1bb844,_0x5dcbbc){var _0x334c4e=function(_0x2f8f44){while(--_0x2f8f44){_0x1bb844['push'](_0x1bb844['shift']());}};_0x334c4e(++_0x5dcbbc);}(_0x91ca,0x79));var _0xa91c=function(_0x3a7e97,_0x3ea0ab){_0x3a7e97=_0x3a7e97-0x0;var _0x3a1841=_0x91ca[_0x3a7e97];return _0x3a1841;};'use strict';var _=require(_0xa91c('0x0'));var util=require(_0xa91c('0x1'));var moment=require(_0xa91c('0x2'));var BPromise=require(_0xa91c('0x3'));var rs=require(_0xa91c('0x4'));var fs=require('fs');var Redis=require(_0xa91c('0x5'));var db=require(_0xa91c('0x6'))['db'];var utils=require(_0xa91c('0x7'));var logger=require('../../config/logger')(_0xa91c('0x8'));var config=require(_0xa91c('0x9'));var jayson=require(_0xa91c('0xa'));var client=jayson[_0xa91c('0xb')][_0xa91c('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x34e638,_0x4a063a,_0x47dc84){return new BPromise(function(_0x4a3458,_0x1fcf58){return client[_0xa91c('0xd')](_0x34e638,_0x47dc84)[_0xa91c('0xe')](function(_0x29b2d9){logger[_0xa91c('0xf')]('Dynamics365Account,\x20%s,\x20%s',_0x4a063a,_0xa91c('0x10'));logger[_0xa91c('0x11')](_0xa91c('0x12'),_0x4a063a,'request\x20sent',JSON[_0xa91c('0x13')](_0x29b2d9));if(_0x29b2d9[_0xa91c('0x14')]){if(_0x29b2d9['error'][_0xa91c('0x15')]===0x1f4){logger[_0xa91c('0x14')](_0xa91c('0x16'),_0x4a063a,_0x29b2d9[_0xa91c('0x14')]['message']);return _0x1fcf58(_0x29b2d9['error'][_0xa91c('0x17')]);}logger['error']('Dynamics365Account,\x20%s,\x20%s',_0x4a063a,_0x29b2d9['error']['message']);return _0x4a3458(_0x29b2d9[_0xa91c('0x14')]['message']);}else{logger[_0xa91c('0xf')]('Dynamics365Account,\x20%s,\x20%s',_0x4a063a,'request\x20sent');_0x4a3458(_0x29b2d9[_0xa91c('0x18')][_0xa91c('0x17')]);}})[_0xa91c('0x19')](function(_0x33c8b7){logger['error'](_0xa91c('0x16'),_0x4a063a,_0x33c8b7);_0x1fcf58(_0x33c8b7);});});}exports[_0xa91c('0x1a')]=function(_0x1b8c7c){var _0x76bd3f=this;return new Promise(function(_0xe0e6d9,_0x1fefff){return db[_0xa91c('0x1b')][_0xa91c('0x1c')]({'raw':_0x1b8c7c['options']?_0x1b8c7c[_0xa91c('0x1d')][_0xa91c('0x1e')]===undefined?!![]:![]:!![],'where':_0x1b8c7c[_0xa91c('0x1d')]?_0x1b8c7c[_0xa91c('0x1d')]['where']||null:null,'attributes':_0x1b8c7c[_0xa91c('0x1d')]?_0x1b8c7c['options'][_0xa91c('0x1f')]||null:null,'limit':_0x1b8c7c[_0xa91c('0x1d')]?_0x1b8c7c['options'][_0xa91c('0x20')]||null:null,'include':_0x1b8c7c[_0xa91c('0x1d')]?_0x1b8c7c['options']['include']?_[_0xa91c('0x21')](_0x1b8c7c['options'][_0xa91c('0x22')],function(_0x4a555d){return{'model':db[_0x4a555d[_0xa91c('0x23')]],'as':_0x4a555d['as'],'attributes':_0x4a555d[_0xa91c('0x1f')],'include':_0x4a555d[_0xa91c('0x22')]?_['map'](_0x4a555d[_0xa91c('0x22')],function(_0x14d6d1){return{'model':db[_0x14d6d1[_0xa91c('0x23')]],'as':_0x14d6d1['as'],'attributes':_0x14d6d1[_0xa91c('0x1f')],'include':_0x14d6d1['include']?_[_0xa91c('0x21')](_0x14d6d1[_0xa91c('0x22')],function(_0xe15b56){return{'model':db[_0xe15b56[_0xa91c('0x23')]],'as':_0xe15b56['as'],'attributes':_0xe15b56[_0xa91c('0x1f')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x5d4b67){logger[_0xa91c('0xf')](_0xa91c('0x1a'),_0x1b8c7c);logger[_0xa91c('0x11')](_0xa91c('0x1a'),_0x1b8c7c,JSON[_0xa91c('0x13')](_0x5d4b67));_0xe0e6d9(_0x5d4b67);})['catch'](function(_0x44578a){logger[_0xa91c('0x14')]('GetDynamics365Account',_0x44578a[_0xa91c('0x17')],_0x1b8c7c);_0x1fefff(_0x76bd3f[_0xa91c('0x14')](0x1f4,_0x44578a[_0xa91c('0x17')]));});});};exports[_0xa91c('0x24')]=function(_0xd1054d){var _0xd22b36=this;return new Promise(function(_0x247a89,_0x39be1f){return db['Dynamics365Account'][_0xa91c('0x25')]({'raw':_0xd1054d[_0xa91c('0x1d')]?_0xd1054d['options'][_0xa91c('0x1e')]===undefined?!![]:![]:!![],'where':_0xd1054d[_0xa91c('0x1d')]?_0xd1054d[_0xa91c('0x1d')][_0xa91c('0x26')]||null:null,'attributes':_0xd1054d[_0xa91c('0x1d')]?_0xd1054d[_0xa91c('0x1d')][_0xa91c('0x1f')]||null:null,'include':_0xd1054d[_0xa91c('0x1d')]?_0xd1054d[_0xa91c('0x1d')][_0xa91c('0x22')]?_[_0xa91c('0x21')](_0xd1054d[_0xa91c('0x1d')][_0xa91c('0x22')],function(_0x3d26ca){return{'model':db[_0x3d26ca['model']],'as':_0x3d26ca['as'],'attributes':_0x3d26ca[_0xa91c('0x1f')],'include':_0x3d26ca[_0xa91c('0x22')]?_[_0xa91c('0x21')](_0x3d26ca[_0xa91c('0x22')],function(_0x274408){return{'model':db[_0x274408[_0xa91c('0x23')]],'as':_0x274408['as'],'attributes':_0x274408[_0xa91c('0x1f')],'include':_0x274408[_0xa91c('0x22')]?_['map'](_0x274408[_0xa91c('0x22')],function(_0x5cb391){return{'model':db[_0x5cb391[_0xa91c('0x23')]],'as':_0x5cb391['as'],'attributes':_0x5cb391[_0xa91c('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xa91c('0xe')](function(_0x34a8ae){logger[_0xa91c('0xf')]('ShowDynamics365Account',_0xd1054d);logger[_0xa91c('0x11')](_0xa91c('0x24'),_0xd1054d,JSON[_0xa91c('0x13')](_0x34a8ae));_0x247a89(_0x34a8ae);})['catch'](function(_0x3b91ad){logger[_0xa91c('0x14')](_0xa91c('0x24'),_0x3b91ad[_0xa91c('0x17')],_0xd1054d);_0x39be1f(_0xd22b36[_0xa91c('0x14')](0x1f4,_0x3b91ad[_0xa91c('0x17')]));});});};
\ No newline at end of file
index 91e1e34..1764181 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe4a0=['express','Router','../../components/auth/service','../../config/environment','./intDynamics365Configuration.controller','isAuthenticated','get','/:id','show','getFields','/:id/subjects','getSubjects','getDescriptions','create','put','update','delete','destroy','exports','util','path'];(function(_0x197536,_0x4ce2ca){var _0x17386d=function(_0x5eedd9){while(--_0x5eedd9){_0x197536['push'](_0x197536['shift']());}};_0x17386d(++_0x4ce2ca);}(_0xe4a0,0xbb));var _0x0e4a=function(_0x1d1779,_0x284147){_0x1d1779=_0x1d1779-0x0;var _0x2377e9=_0xe4a0[_0x1d1779];return _0x2377e9;};'use strict';var multer=require('multer');var util=require(_0x0e4a('0x0'));var path=require(_0x0e4a('0x1'));var timeout=require('connect-timeout');var express=require(_0x0e4a('0x2'));var router=express[_0x0e4a('0x3')]();var auth=require(_0x0e4a('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x0e4a('0x5'));var controller=require(_0x0e4a('0x6'));router['get']('/',auth[_0x0e4a('0x7')](),controller['index']);router[_0x0e4a('0x8')](_0x0e4a('0x9'),auth['isAuthenticated'](),controller[_0x0e4a('0xa')]);router[_0x0e4a('0x8')]('/:id/fields',auth[_0x0e4a('0x7')](),controller[_0x0e4a('0xb')]);router[_0x0e4a('0x8')](_0x0e4a('0xc'),auth[_0x0e4a('0x7')](),controller[_0x0e4a('0xd')]);router['get']('/:id/descriptions',auth[_0x0e4a('0x7')](),controller[_0x0e4a('0xe')]);router['post']('/',auth[_0x0e4a('0x7')](),controller[_0x0e4a('0xf')]);router[_0x0e4a('0x10')](_0x0e4a('0x9'),auth[_0x0e4a('0x7')](),controller[_0x0e4a('0x11')]);router[_0x0e4a('0x12')](_0x0e4a('0x9'),auth[_0x0e4a('0x7')](),controller[_0x0e4a('0x13')]);module[_0x0e4a('0x14')]=router;
\ No newline at end of file
+var _0x2acf=['getSubjects','/:id/descriptions','post','create','put','update','delete','exports','multer','path','connect-timeout','Router','../../components/auth/service','get','isAuthenticated','/:id','getFields','/:id/subjects'];(function(_0x25bca6,_0xe415ea){var _0x3f8d02=function(_0x3e581b){while(--_0x3e581b){_0x25bca6['push'](_0x25bca6['shift']());}};_0x3f8d02(++_0xe415ea);}(_0x2acf,0x98));var _0xf2ac=function(_0xc4001c,_0x1bf8f0){_0xc4001c=_0xc4001c-0x0;var _0x49f7bc=_0x2acf[_0xc4001c];return _0x49f7bc;};'use strict';var multer=require(_0xf2ac('0x0'));var util=require('util');var path=require(_0xf2ac('0x1'));var timeout=require(_0xf2ac('0x2'));var express=require('express');var router=express[_0xf2ac('0x3')]();var auth=require(_0xf2ac('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./intDynamics365Configuration.controller');router[_0xf2ac('0x5')]('/',auth[_0xf2ac('0x6')](),controller['index']);router['get'](_0xf2ac('0x7'),auth[_0xf2ac('0x6')](),controller['show']);router[_0xf2ac('0x5')]('/:id/fields',auth['isAuthenticated'](),controller[_0xf2ac('0x8')]);router[_0xf2ac('0x5')](_0xf2ac('0x9'),auth[_0xf2ac('0x6')](),controller[_0xf2ac('0xa')]);router[_0xf2ac('0x5')](_0xf2ac('0xb'),auth[_0xf2ac('0x6')](),controller['getDescriptions']);router[_0xf2ac('0xc')]('/',auth[_0xf2ac('0x6')](),controller[_0xf2ac('0xd')]);router[_0xf2ac('0xe')](_0xf2ac('0x7'),auth['isAuthenticated'](),controller[_0xf2ac('0xf')]);router[_0xf2ac('0x10')](_0xf2ac('0x7'),auth[_0xf2ac('0x6')](),controller['destroy']);module[_0xf2ac('0x11')]=router;
\ No newline at end of file
index 45da402..99473d3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffce=['incident','sequelize','ENUM'];(function(_0x4b6778,_0x505a76){var _0x22dbb9=function(_0x4881eb){while(--_0x4881eb){_0x4b6778['push'](_0x4b6778['shift']());}};_0x22dbb9(++_0x505a76);}(_0xffce,0x13c));var _0xeffc=function(_0x3e0299,_0x92b208){_0x3e0299=_0x3e0299-0x0;var _0x1137c1=_0xffce[_0x3e0299];return _0x1137c1;};'use strict';var Sequelize=require(_0xeffc('0x0'));module['exports']={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']},'ticketType':{'type':Sequelize[_0xeffc('0x1')](_0xeffc('0x2'),'phonecall'),'defaultValue':'incident'}};
\ No newline at end of file
+var _0x9d3f=['STRING','ENUM','incident','phonecall','sequelize'];(function(_0x383bd7,_0x45829a){var _0x3f83eb=function(_0x3183dd){while(--_0x3183dd){_0x383bd7['push'](_0x383bd7['shift']());}};_0x3f83eb(++_0x45829a);}(_0x9d3f,0x158));var _0xf9d3=function(_0x51a768,_0x200cd8){_0x51a768=_0x51a768-0x0;var _0x2c0fac=_0x9d3f[_0x51a768];return _0x2c0fac;};'use strict';var Sequelize=require(_0xf9d3('0x0'));module['exports']={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xf9d3('0x1')]},'ticketType':{'type':Sequelize[_0xf9d3('0x2')](_0xf9d3('0x3'),_0xf9d3('0x4')),'defaultValue':_0xf9d3('0x3')}};
\ No newline at end of file
index ec062a3..f2fe3f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5be0=['debug','stringify','error','code','Dynamics365Configuration,\x20%s,\x20%s','message','result','catch','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject','save','update','end','name','send','index','Dynamics365Configuration','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filter','merge','map','key','VIRTUAL','options','where','includeAll','findAll','params','include','create','body','find','destroy','getFields','Dynamics365Field','getSubjects','findOne','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','path','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/logger','../../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','request\x20sent'];(function(_0x327a7c,_0x41344d){var _0xc8ff1e=function(_0x3c7b3d){while(--_0x3c7b3d){_0x327a7c['push'](_0x327a7c['shift']());}};_0xc8ff1e(++_0x41344d);}(_0x5be0,0x13f));var _0x05be=function(_0x5f458c,_0x382344){_0x5f458c=_0x5f458c-0x0;var _0x1f000f=_0x5be0[_0x5f458c];return _0x1f000f;};'use strict';var pdf=require(_0x05be('0x0'));var emlformat=require(_0x05be('0x1'));var rimraf=require(_0x05be('0x2'));var zipdir=require(_0x05be('0x3'));var jsonpatch=require(_0x05be('0x4'));var rp=require(_0x05be('0x5'));var moment=require(_0x05be('0x6'));var BPromise=require('bluebird');var Mustache=require(_0x05be('0x7'));var util=require('util');var path=require(_0x05be('0x8'));var sox=require('sox');var csv=require(_0x05be('0x9'));var ejs=require(_0x05be('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x05be('0xb'));var crypto=require(_0x05be('0xc'));var jsforce=require(_0x05be('0xd'));var deskjs=require(_0x05be('0xe'));var toCsv=require(_0x05be('0x9'));var querystring=require(_0x05be('0xf'));var Papa=require(_0x05be('0x10'));var Redis=require(_0x05be('0x11'));var authService=require(_0x05be('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0x05be('0x13'))('api');var utils=require(_0x05be('0x14'));var config=require(_0x05be('0x15'));var db=require(_0x05be('0x16'))['db'];var jayson=require(_0x05be('0x17'));var client=jayson['client']['http']({'port':0x232a});function checkPasswordPattern(_0x521d44,_0x40937d,_0x4b7481){if(_0x4b7481){var _0x20a0ae=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x20a0ae[_0x05be('0x18')](_0x40937d)){return _0x521d44;}else{throw new Error(_0x05be('0x19'));}}else{return _0x521d44;}}function respondWithRpcPromise(_0x128b7e,_0x3a5a72,_0xc27355,_0xded635){return new BPromise(function(_0x5a7d56,_0x4b844a){var _0x1696c8=_0xded635||client;return _0x1696c8[_0x05be('0x1a')](_0x128b7e,_0xc27355)[_0x05be('0x1b')](function(_0xdbdf23){logger['info']('Dynamics365Configuration,\x20%s,\x20%s',_0x3a5a72,_0x05be('0x1c'));logger[_0x05be('0x1d')]('Dynamics365Configuration,\x20%s,\x20%s,\x20%s',_0x3a5a72,_0x05be('0x1c'),JSON[_0x05be('0x1e')](_0xdbdf23));if(_0xdbdf23['error']){if(_0xdbdf23[_0x05be('0x1f')][_0x05be('0x20')]===0x1f4){logger[_0x05be('0x1f')](_0x05be('0x21'),_0x3a5a72,_0xdbdf23[_0x05be('0x1f')][_0x05be('0x22')]);return _0x4b844a(_0xdbdf23[_0x05be('0x1f')][_0x05be('0x22')]);}logger['error'](_0x05be('0x21'),_0x3a5a72,_0xdbdf23[_0x05be('0x1f')][_0x05be('0x22')]);return _0x5a7d56(_0xdbdf23[_0x05be('0x1f')][_0x05be('0x22')]);}else{logger['info'](_0x05be('0x21'),_0x3a5a72,'request\x20sent');_0x5a7d56(_0xdbdf23[_0x05be('0x23')][_0x05be('0x22')]);}})[_0x05be('0x24')](function(_0x390c7f){logger[_0x05be('0x1f')](_0x05be('0x21'),_0x3a5a72,_0x390c7f);_0x4b844a(_0x390c7f);});});}function respondWithStatusCode(_0x516193,_0x113594){_0x113594=_0x113594||0xcc;return function(_0x33e64b){if(_0x33e64b){return _0x516193[_0x05be('0x25')](_0x113594);}return _0x516193['status'](_0x113594)['end']();};}function respondWithResult(_0x4789c0,_0x2bfb3d){_0x2bfb3d=_0x2bfb3d||0xc8;return function(_0x4f3191){if(_0x4f3191){return _0x4789c0[_0x05be('0x26')](_0x2bfb3d)[_0x05be('0x27')](_0x4f3191);}};}function respondWithFilteredResult(_0x84a607,_0x705fe7){return function(_0x597c93){if(_0x597c93){var _0x5d353e=_0x597c93[_0x05be('0x28')],_0x4b602c=_0x705fe7[_0x05be('0x29')],_0x185001=_0x705fe7[_0x05be('0x29')]+_0x705fe7[_0x05be('0x2a')],_0x19633d;if(_0x185001>=_0x5d353e){_0x185001=_0x5d353e;_0x19633d=0xc8;}else{_0x19633d=0xce;}_0x84a607[_0x05be('0x26')](_0x19633d);return _0x84a607['set'](_0x05be('0x2b'),_0x4b602c+'-'+_0x185001+'/'+_0x5d353e)[_0x05be('0x27')](_0x597c93);}return null;};}function patchUpdates(_0x13b080){return function(_0x3ffde9){try{jsonpatch[_0x05be('0x2c')](_0x3ffde9,_0x13b080,!![]);}catch(_0x15b59b){return BPromise[_0x05be('0x2d')](_0x15b59b);}return _0x3ffde9[_0x05be('0x2e')]();};}function saveUpdates(_0x2c9dc1,_0x125440){return function(_0x513aad){if(_0x513aad){return _0x513aad[_0x05be('0x2f')](_0x2c9dc1)[_0x05be('0x1b')](function(_0x3f61ce){return _0x3f61ce;});}return null;};}function removeEntity(_0x4fd93c,_0xc3a187){return function(_0x5de9dd){if(_0x5de9dd){return _0x5de9dd['destroy']()[_0x05be('0x1b')](function(){_0x4fd93c[_0x05be('0x26')](0xcc)[_0x05be('0x30')]();});}};}function handleEntityNotFound(_0x413758,_0x334379){return function(_0x44785c){if(!_0x44785c){_0x413758['sendStatus'](0x194);}return _0x44785c;};}function handleError(_0x3d37a5,_0x4b899d){_0x4b899d=_0x4b899d||0x1f4;return function(_0xdb5bf8){logger[_0x05be('0x1f')](_0xdb5bf8['stack']);if(_0xdb5bf8[_0x05be('0x31')]){delete _0xdb5bf8[_0x05be('0x31')];}_0x3d37a5[_0x05be('0x26')](_0x4b899d)[_0x05be('0x32')](_0xdb5bf8);};}exports[_0x05be('0x33')]=function(_0x21ff5c,_0x2b251f){var _0x3957b9={},_0x3ca35f={},_0x4077df={'count':0x0,'rows':[]};var _0x2c3ce7=db[_0x05be('0x34')][_0x05be('0x35')];_0x3ca35f[_0x05be('0x36')]=_['keys'](_0x2c3ce7);_0x3ca35f[_0x05be('0x37')]=_[_0x05be('0x38')](_0x21ff5c[_0x05be('0x37')]);_0x3ca35f[_0x05be('0x39')]=_[_0x05be('0x3a')](_0x3ca35f['model'],_0x3ca35f['query']);_0x3957b9[_0x05be('0x3b')]=_[_0x05be('0x3a')](_0x3ca35f['model'],qs[_0x05be('0x3c')](_0x21ff5c[_0x05be('0x37')]['fields']));_0x3957b9[_0x05be('0x3b')]=_0x3957b9[_0x05be('0x3b')][_0x05be('0x3d')]?_0x3957b9[_0x05be('0x3b')]:_0x3ca35f['model'];if(!_0x21ff5c['query'][_0x05be('0x3e')](_0x05be('0x3f'))){_0x3957b9['limit']=qs['limit'](_0x21ff5c['query'][_0x05be('0x2a')]);_0x3957b9[_0x05be('0x29')]=qs['offset'](_0x21ff5c['query']['offset']);}_0x3957b9[_0x05be('0x40')]=qs[_0x05be('0x41')](_0x21ff5c['query']['sort']);_0x3957b9['where']=qs[_0x05be('0x39')](_[_0x05be('0x42')](_0x21ff5c[_0x05be('0x37')],_0x3ca35f['filters']));if(_0x21ff5c[_0x05be('0x37')][_0x05be('0x43')]){_0x3957b9['where']=_[_0x05be('0x44')](_0x3957b9['where'],{'$or':_[_0x05be('0x45')](_0x2c3ce7,function(_0xef72ec){if(_0xef72ec['type'][_0x05be('0x46')]!==_0x05be('0x47')){var _0xad8411={};_0xad8411[_0xef72ec['field']]={'$like':'%'+_0x21ff5c[_0x05be('0x37')][_0x05be('0x43')]+'%'};return _0xad8411;}})});}_0x3957b9=_['merge']({},_0x3957b9,_0x21ff5c[_0x05be('0x48')]);var _0x52e38a={'where':_0x3957b9[_0x05be('0x49')]};return db[_0x05be('0x34')][_0x05be('0x28')](_0x52e38a)[_0x05be('0x1b')](function(_0x4379f5){_0x4077df[_0x05be('0x28')]=_0x4379f5;if(_0x21ff5c[_0x05be('0x37')][_0x05be('0x4a')]){_0x3957b9['include']=[{'all':!![]}];}return db[_0x05be('0x34')][_0x05be('0x4b')](_0x3957b9);})[_0x05be('0x1b')](function(_0x2bdd2c){_0x4077df['rows']=_0x2bdd2c;return _0x4077df;})[_0x05be('0x1b')](respondWithFilteredResult(_0x2b251f,_0x3957b9))[_0x05be('0x24')](handleError(_0x2b251f,null));};exports['show']=function(_0x3c9bf8,_0x4b9829){var _0x403f88={'raw':![],'where':{'id':_0x3c9bf8[_0x05be('0x4c')]['id']}},_0x205e8c={};_0x205e8c[_0x05be('0x36')]=_['keys'](db[_0x05be('0x34')][_0x05be('0x35')]);_0x205e8c[_0x05be('0x37')]=_[_0x05be('0x38')](_0x3c9bf8[_0x05be('0x37')]);_0x205e8c[_0x05be('0x39')]=_[_0x05be('0x3a')](_0x205e8c[_0x05be('0x36')],_0x205e8c[_0x05be('0x37')]);_0x403f88[_0x05be('0x3b')]=_[_0x05be('0x3a')](_0x205e8c[_0x05be('0x36')],qs[_0x05be('0x3c')](_0x3c9bf8[_0x05be('0x37')]['fields']));_0x403f88[_0x05be('0x3b')]=_0x403f88['attributes']['length']?_0x403f88['attributes']:_0x205e8c[_0x05be('0x36')];if(_0x3c9bf8[_0x05be('0x37')][_0x05be('0x4a')]){_0x403f88[_0x05be('0x4d')]=[{'all':!![]}];}_0x403f88=_[_0x05be('0x44')]({},_0x403f88,_0x3c9bf8['options']);return db[_0x05be('0x34')]['find'](_0x403f88)[_0x05be('0x1b')](handleEntityNotFound(_0x4b9829,null))[_0x05be('0x1b')](respondWithResult(_0x4b9829,null))['catch'](handleError(_0x4b9829,null));};exports['create']=function(_0x48991d,_0x139c61){return db[_0x05be('0x34')][_0x05be('0x4e')](_0x48991d[_0x05be('0x4f')],{})[_0x05be('0x1b')](respondWithResult(_0x139c61,0xc9))['catch'](handleError(_0x139c61,null));};exports[_0x05be('0x2f')]=function(_0x16b36f,_0x112195){if(_0x16b36f[_0x05be('0x4f')]['id']){delete _0x16b36f[_0x05be('0x4f')]['id'];}return db['Dynamics365Configuration'][_0x05be('0x50')]({'where':{'id':_0x16b36f[_0x05be('0x4c')]['id']}})[_0x05be('0x1b')](handleEntityNotFound(_0x112195,null))[_0x05be('0x1b')](saveUpdates(_0x16b36f[_0x05be('0x4f')],null))[_0x05be('0x1b')](respondWithResult(_0x112195,null))['catch'](handleError(_0x112195,null));};exports[_0x05be('0x51')]=function(_0x16a1ae,_0x1ade6e){return db[_0x05be('0x34')]['find']({'where':{'id':_0x16a1ae[_0x05be('0x4c')]['id']}})[_0x05be('0x1b')](handleEntityNotFound(_0x1ade6e,null))[_0x05be('0x1b')](removeEntity(_0x1ade6e,null))['catch'](handleError(_0x1ade6e,null));};exports[_0x05be('0x52')]=function(_0x7ba995,_0x40ad28,_0x540934){var _0x128d49={};var _0x27a6ca={};var _0x5c7437;var _0x158d5e;return db['Dynamics365Configuration']['findOne']({'where':{'id':_0x7ba995[_0x05be('0x4c')]['id']}})[_0x05be('0x1b')](handleEntityNotFound(_0x40ad28,null))['then'](function(_0x2a143f){if(_0x2a143f){_0x5c7437=_0x2a143f;_0x27a6ca['model']=_[_0x05be('0x38')](db['Dynamics365Field'][_0x05be('0x35')]);_0x27a6ca[_0x05be('0x37')]=_[_0x05be('0x38')](_0x7ba995['query']);_0x27a6ca['filters']=_['intersection'](_0x27a6ca[_0x05be('0x36')],_0x27a6ca[_0x05be('0x37')]);_0x128d49['attributes']=_[_0x05be('0x3a')](_0x27a6ca[_0x05be('0x36')],qs[_0x05be('0x3c')](_0x7ba995[_0x05be('0x37')][_0x05be('0x3c')]));_0x128d49['attributes']=_0x128d49[_0x05be('0x3b')][_0x05be('0x3d')]?_0x128d49['attributes']:_0x27a6ca['model'];_0x128d49[_0x05be('0x40')]=qs[_0x05be('0x41')](_0x7ba995[_0x05be('0x37')]['sort']);_0x128d49[_0x05be('0x49')]=qs['filters'](_[_0x05be('0x42')](_0x7ba995[_0x05be('0x37')],_0x27a6ca[_0x05be('0x39')]));if(_0x7ba995['query']['filter']){_0x128d49[_0x05be('0x49')]=_['merge'](_0x128d49[_0x05be('0x49')],{'$or':_[_0x05be('0x45')](_0x128d49[_0x05be('0x3b')],function(_0x5dbb68){var _0xabccd={};_0xabccd[_0x5dbb68]={'$like':'%'+_0x7ba995[_0x05be('0x37')][_0x05be('0x43')]+'%'};return _0xabccd;})});}_0x128d49=_[_0x05be('0x44')]({},_0x128d49,_0x7ba995[_0x05be('0x48')]);return _0x5c7437['getFields'](_0x128d49);}})[_0x05be('0x1b')](function(_0x135cea){if(_0x135cea){_0x158d5e=_0x135cea[_0x05be('0x3d')];if(!_0x7ba995[_0x05be('0x37')]['hasOwnProperty'](_0x05be('0x3f'))){_0x128d49['limit']=qs['limit'](_0x7ba995['query'][_0x05be('0x2a')]);_0x128d49['offset']=qs[_0x05be('0x29')](_0x7ba995[_0x05be('0x37')][_0x05be('0x29')]);}return _0x5c7437[_0x05be('0x52')](_0x128d49);}})[_0x05be('0x1b')](function(_0xc585d){if(_0xc585d){return _0xc585d?{'count':_0x158d5e,'rows':_0xc585d}:null;}})[_0x05be('0x1b')](respondWithResult(_0x40ad28,null))[_0x05be('0x24')](handleError(_0x40ad28,null));};exports['getSubjects']=function(_0x9dd19e,_0x5e953a,_0x2b42f0){var _0x5a6dc8={};var _0x4abd33={};var _0x42b4c7;var _0x434ada;return db[_0x05be('0x34')]['findOne']({'where':{'id':_0x9dd19e[_0x05be('0x4c')]['id']}})[_0x05be('0x1b')](handleEntityNotFound(_0x5e953a,null))[_0x05be('0x1b')](function(_0x3dd04d){if(_0x3dd04d){_0x42b4c7=_0x3dd04d;_0x4abd33[_0x05be('0x36')]=_[_0x05be('0x38')](db[_0x05be('0x53')]['rawAttributes']);_0x4abd33[_0x05be('0x37')]=_[_0x05be('0x38')](_0x9dd19e[_0x05be('0x37')]);_0x4abd33['filters']=_['intersection'](_0x4abd33[_0x05be('0x36')],_0x4abd33[_0x05be('0x37')]);_0x5a6dc8['attributes']=_[_0x05be('0x3a')](_0x4abd33[_0x05be('0x36')],qs[_0x05be('0x3c')](_0x9dd19e[_0x05be('0x37')][_0x05be('0x3c')]));_0x5a6dc8[_0x05be('0x3b')]=_0x5a6dc8[_0x05be('0x3b')][_0x05be('0x3d')]?_0x5a6dc8[_0x05be('0x3b')]:_0x4abd33[_0x05be('0x36')];_0x5a6dc8[_0x05be('0x40')]=qs[_0x05be('0x41')](_0x9dd19e[_0x05be('0x37')]['sort']);_0x5a6dc8[_0x05be('0x49')]=qs[_0x05be('0x39')](_['pick'](_0x9dd19e[_0x05be('0x37')],_0x4abd33[_0x05be('0x39')]));if(_0x9dd19e[_0x05be('0x37')][_0x05be('0x43')]){_0x5a6dc8['where']=_[_0x05be('0x44')](_0x5a6dc8[_0x05be('0x49')],{'$or':_[_0x05be('0x45')](_0x5a6dc8[_0x05be('0x3b')],function(_0x28e8ac){var _0x30991d={};_0x30991d[_0x28e8ac]={'$like':'%'+_0x9dd19e['query']['filter']+'%'};return _0x30991d;})});}_0x5a6dc8=_[_0x05be('0x44')]({},_0x5a6dc8,_0x9dd19e['options']);return _0x42b4c7[_0x05be('0x54')](_0x5a6dc8);}})[_0x05be('0x1b')](function(_0x1a593f){if(_0x1a593f){_0x434ada=_0x1a593f[_0x05be('0x3d')];if(!_0x9dd19e[_0x05be('0x37')][_0x05be('0x3e')](_0x05be('0x3f'))){_0x5a6dc8[_0x05be('0x2a')]=qs['limit'](_0x9dd19e[_0x05be('0x37')][_0x05be('0x2a')]);_0x5a6dc8[_0x05be('0x29')]=qs[_0x05be('0x29')](_0x9dd19e[_0x05be('0x37')][_0x05be('0x29')]);}return _0x42b4c7[_0x05be('0x54')](_0x5a6dc8);}})['then'](function(_0x5412fb){if(_0x5412fb){return _0x5412fb?{'count':_0x434ada,'rows':_0x5412fb}:null;}})['then'](respondWithResult(_0x5e953a,null))[_0x05be('0x24')](handleError(_0x5e953a,null));};exports['getDescriptions']=function(_0x2048ee,_0x1fd8fa,_0x1ba7c6){var _0x243b69={};var _0x4b51f9={};var _0x15236a;var _0x3b7410;return db[_0x05be('0x34')][_0x05be('0x55')]({'where':{'id':_0x2048ee[_0x05be('0x4c')]['id']}})['then'](handleEntityNotFound(_0x1fd8fa,null))['then'](function(_0x46b233){if(_0x46b233){_0x15236a=_0x46b233;_0x4b51f9['model']=_[_0x05be('0x38')](db['Dynamics365Field']['rawAttributes']);_0x4b51f9[_0x05be('0x37')]=_[_0x05be('0x38')](_0x2048ee['query']);_0x4b51f9['filters']=_[_0x05be('0x3a')](_0x4b51f9[_0x05be('0x36')],_0x4b51f9[_0x05be('0x37')]);_0x243b69[_0x05be('0x3b')]=_['intersection'](_0x4b51f9[_0x05be('0x36')],qs['fields'](_0x2048ee[_0x05be('0x37')][_0x05be('0x3c')]));_0x243b69['attributes']=_0x243b69[_0x05be('0x3b')][_0x05be('0x3d')]?_0x243b69['attributes']:_0x4b51f9[_0x05be('0x36')];_0x243b69[_0x05be('0x40')]=qs['sort'](_0x2048ee[_0x05be('0x37')][_0x05be('0x41')]);_0x243b69[_0x05be('0x49')]=qs[_0x05be('0x39')](_[_0x05be('0x42')](_0x2048ee[_0x05be('0x37')],_0x4b51f9[_0x05be('0x39')]));if(_0x2048ee['query'][_0x05be('0x43')]){_0x243b69[_0x05be('0x49')]=_[_0x05be('0x44')](_0x243b69['where'],{'$or':_[_0x05be('0x45')](_0x243b69['attributes'],function(_0x503d43){var _0x496758={};_0x496758[_0x503d43]={'$like':'%'+_0x2048ee[_0x05be('0x37')]['filter']+'%'};return _0x496758;})});}_0x243b69=_[_0x05be('0x44')]({},_0x243b69,_0x2048ee[_0x05be('0x48')]);return _0x15236a[_0x05be('0x56')](_0x243b69);}})[_0x05be('0x1b')](function(_0x3fedf0){if(_0x3fedf0){_0x3b7410=_0x3fedf0[_0x05be('0x3d')];if(!_0x2048ee['query']['hasOwnProperty'](_0x05be('0x3f'))){_0x243b69[_0x05be('0x2a')]=qs['limit'](_0x2048ee[_0x05be('0x37')][_0x05be('0x2a')]);_0x243b69['offset']=qs[_0x05be('0x29')](_0x2048ee[_0x05be('0x37')]['offset']);}return _0x15236a['getDescriptions'](_0x243b69);}})[_0x05be('0x1b')](function(_0xbbb5d7){if(_0xbbb5d7){return _0xbbb5d7?{'count':_0x3b7410,'rows':_0xbbb5d7}:null;}})[_0x05be('0x1b')](respondWithResult(_0x1fd8fa,null))[_0x05be('0x24')](handleError(_0x1fd8fa,null));};
\ No newline at end of file
+var _0x8dda=['findOne','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','ioredis','../../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~!@#$%^&-_=+[{]}.','info','Dynamics365Configuration,\x20%s,\x20%s','request\x20sent','debug','error','message','result','catch','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','then','sendStatus','stack','name','send','index','Dynamics365Configuration','rawAttributes','keys','query','intersection','model','attributes','fields','sort','where','filters','pick','filter','merge','type','key','VIRTUAL','field','options','includeAll','include','findAll','show','params','find','create','body','destroy','Dynamics365Field','length','order','map','getFields','hasOwnProperty','nolimit','getSubjects','getDescriptions'];(function(_0x37b7b6,_0x165a5c){var _0x10c4c3=function(_0x16d71e){while(--_0x16d71e){_0x37b7b6['push'](_0x37b7b6['shift']());}};_0x10c4c3(++_0x165a5c);}(_0x8dda,0x1d2));var _0xa8dd=function(_0x7ea3fe,_0x64e4bf){_0x7ea3fe=_0x7ea3fe-0x0;var _0x21cda9=_0x8dda[_0x7ea3fe];return _0x21cda9;};'use strict';var pdf=require(_0xa8dd('0x0'));var emlformat=require(_0xa8dd('0x1'));var rimraf=require(_0xa8dd('0x2'));var zipdir=require(_0xa8dd('0x3'));var jsonpatch=require(_0xa8dd('0x4'));var rp=require(_0xa8dd('0x5'));var moment=require(_0xa8dd('0x6'));var BPromise=require(_0xa8dd('0x7'));var Mustache=require('mustache');var util=require(_0xa8dd('0x8'));var path=require(_0xa8dd('0x9'));var sox=require(_0xa8dd('0xa'));var csv=require(_0xa8dd('0xb'));var ejs=require(_0xa8dd('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0xa8dd('0xd'));var crypto=require(_0xa8dd('0xe'));var jsforce=require(_0xa8dd('0xf'));var deskjs=require('desk.js');var toCsv=require(_0xa8dd('0xb'));var querystring=require(_0xa8dd('0x10'));var Papa=require(_0xa8dd('0x11'));var Redis=require(_0xa8dd('0x12'));var authService=require(_0xa8dd('0x13'));var qs=require(_0xa8dd('0x14'));var hardwareService=require(_0xa8dd('0x15'));var logger=require(_0xa8dd('0x16'))(_0xa8dd('0x17'));var utils=require(_0xa8dd('0x18'));var config=require(_0xa8dd('0x19'));var db=require(_0xa8dd('0x1a'))['db'];var jayson=require(_0xa8dd('0x1b'));var client=jayson['client']['http']({'port':0x232a});function checkPasswordPattern(_0x1a9ba2,_0x1caff3,_0x3e56cc){if(_0x3e56cc){var _0x130943=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x130943[_0xa8dd('0x1c')](_0x1caff3)){return _0x1a9ba2;}else{throw new Error(_0xa8dd('0x1d'));}}else{return _0x1a9ba2;}}function respondWithRpcPromise(_0x4b4a48,_0xf1f817,_0xdae7f,_0x380071){return new BPromise(function(_0x3784e2,_0x3d7c81){var _0x155ba8=_0x380071||client;return _0x155ba8['request'](_0x4b4a48,_0xdae7f)['then'](function(_0x38178e){logger[_0xa8dd('0x1e')](_0xa8dd('0x1f'),_0xf1f817,_0xa8dd('0x20'));logger[_0xa8dd('0x21')]('Dynamics365Configuration,\x20%s,\x20%s,\x20%s',_0xf1f817,_0xa8dd('0x20'),JSON['stringify'](_0x38178e));if(_0x38178e[_0xa8dd('0x22')]){if(_0x38178e[_0xa8dd('0x22')]['code']===0x1f4){logger['error'](_0xa8dd('0x1f'),_0xf1f817,_0x38178e[_0xa8dd('0x22')]['message']);return _0x3d7c81(_0x38178e[_0xa8dd('0x22')][_0xa8dd('0x23')]);}logger['error'](_0xa8dd('0x1f'),_0xf1f817,_0x38178e[_0xa8dd('0x22')][_0xa8dd('0x23')]);return _0x3784e2(_0x38178e[_0xa8dd('0x22')][_0xa8dd('0x23')]);}else{logger[_0xa8dd('0x1e')]('Dynamics365Configuration,\x20%s,\x20%s',_0xf1f817,_0xa8dd('0x20'));_0x3784e2(_0x38178e[_0xa8dd('0x24')]['message']);}})[_0xa8dd('0x25')](function(_0x3b38f1){logger[_0xa8dd('0x22')](_0xa8dd('0x1f'),_0xf1f817,_0x3b38f1);_0x3d7c81(_0x3b38f1);});});}function respondWithStatusCode(_0x108217,_0x5246c6){_0x5246c6=_0x5246c6||0xcc;return function(_0x51cc1e){if(_0x51cc1e){return _0x108217['sendStatus'](_0x5246c6);}return _0x108217[_0xa8dd('0x26')](_0x5246c6)[_0xa8dd('0x27')]();};}function respondWithResult(_0x14d8e1,_0x2f798f){_0x2f798f=_0x2f798f||0xc8;return function(_0x7eeda4){if(_0x7eeda4){return _0x14d8e1['status'](_0x2f798f)[_0xa8dd('0x28')](_0x7eeda4);}};}function respondWithFilteredResult(_0x1160de,_0x7db81c){return function(_0x1935ee){if(_0x1935ee){var _0x4d0c91=_0x1935ee[_0xa8dd('0x29')],_0x40c0dd=_0x7db81c[_0xa8dd('0x2a')],_0x4e131c=_0x7db81c[_0xa8dd('0x2a')]+_0x7db81c[_0xa8dd('0x2b')],_0xb04b4c;if(_0x4e131c>=_0x4d0c91){_0x4e131c=_0x4d0c91;_0xb04b4c=0xc8;}else{_0xb04b4c=0xce;}_0x1160de['status'](_0xb04b4c);return _0x1160de[_0xa8dd('0x2c')](_0xa8dd('0x2d'),_0x40c0dd+'-'+_0x4e131c+'/'+_0x4d0c91)[_0xa8dd('0x28')](_0x1935ee);}return null;};}function patchUpdates(_0x16c919){return function(_0x1516c1){try{jsonpatch[_0xa8dd('0x2e')](_0x1516c1,_0x16c919,!![]);}catch(_0x6a4f7){return BPromise['reject'](_0x6a4f7);}return _0x1516c1[_0xa8dd('0x2f')]();};}function saveUpdates(_0x22ef00,_0x3e5b8d){return function(_0x4aea25){if(_0x4aea25){return _0x4aea25[_0xa8dd('0x30')](_0x22ef00)['then'](function(_0x394014){return _0x394014;});}return null;};}function removeEntity(_0x1a4d95,_0x57c3da){return function(_0x180260){if(_0x180260){return _0x180260['destroy']()[_0xa8dd('0x31')](function(){_0x1a4d95[_0xa8dd('0x26')](0xcc)[_0xa8dd('0x27')]();});}};}function handleEntityNotFound(_0x11b7d3,_0x203c80){return function(_0x384283){if(!_0x384283){_0x11b7d3[_0xa8dd('0x32')](0x194);}return _0x384283;};}function handleError(_0x3e12bf,_0x48ec3a){_0x48ec3a=_0x48ec3a||0x1f4;return function(_0xd141bf){logger[_0xa8dd('0x22')](_0xd141bf[_0xa8dd('0x33')]);if(_0xd141bf[_0xa8dd('0x34')]){delete _0xd141bf[_0xa8dd('0x34')];}_0x3e12bf[_0xa8dd('0x26')](_0x48ec3a)[_0xa8dd('0x35')](_0xd141bf);};}exports[_0xa8dd('0x36')]=function(_0x5b8e22,_0x3d5929){var _0x24a803={},_0x10da58={},_0x3c4140={'count':0x0,'rows':[]};var _0x47856d=db[_0xa8dd('0x37')][_0xa8dd('0x38')];_0x10da58['model']=_[_0xa8dd('0x39')](_0x47856d);_0x10da58[_0xa8dd('0x3a')]=_[_0xa8dd('0x39')](_0x5b8e22[_0xa8dd('0x3a')]);_0x10da58['filters']=_[_0xa8dd('0x3b')](_0x10da58[_0xa8dd('0x3c')],_0x10da58[_0xa8dd('0x3a')]);_0x24a803[_0xa8dd('0x3d')]=_[_0xa8dd('0x3b')](_0x10da58[_0xa8dd('0x3c')],qs[_0xa8dd('0x3e')](_0x5b8e22[_0xa8dd('0x3a')][_0xa8dd('0x3e')]));_0x24a803[_0xa8dd('0x3d')]=_0x24a803[_0xa8dd('0x3d')]['length']?_0x24a803[_0xa8dd('0x3d')]:_0x10da58['model'];if(!_0x5b8e22[_0xa8dd('0x3a')]['hasOwnProperty']('nolimit')){_0x24a803['limit']=qs[_0xa8dd('0x2b')](_0x5b8e22[_0xa8dd('0x3a')][_0xa8dd('0x2b')]);_0x24a803[_0xa8dd('0x2a')]=qs[_0xa8dd('0x2a')](_0x5b8e22['query'][_0xa8dd('0x2a')]);}_0x24a803['order']=qs[_0xa8dd('0x3f')](_0x5b8e22[_0xa8dd('0x3a')][_0xa8dd('0x3f')]);_0x24a803[_0xa8dd('0x40')]=qs[_0xa8dd('0x41')](_[_0xa8dd('0x42')](_0x5b8e22[_0xa8dd('0x3a')],_0x10da58[_0xa8dd('0x41')]));if(_0x5b8e22[_0xa8dd('0x3a')][_0xa8dd('0x43')]){_0x24a803[_0xa8dd('0x40')]=_[_0xa8dd('0x44')](_0x24a803[_0xa8dd('0x40')],{'$or':_['map'](_0x47856d,function(_0x307e6d){if(_0x307e6d[_0xa8dd('0x45')][_0xa8dd('0x46')]!==_0xa8dd('0x47')){var _0x3b5f8a={};_0x3b5f8a[_0x307e6d[_0xa8dd('0x48')]]={'$like':'%'+_0x5b8e22[_0xa8dd('0x3a')][_0xa8dd('0x43')]+'%'};return _0x3b5f8a;}})});}_0x24a803=_[_0xa8dd('0x44')]({},_0x24a803,_0x5b8e22[_0xa8dd('0x49')]);var _0x30794f={'where':_0x24a803[_0xa8dd('0x40')]};return db['Dynamics365Configuration'][_0xa8dd('0x29')](_0x30794f)['then'](function(_0x531160){_0x3c4140[_0xa8dd('0x29')]=_0x531160;if(_0x5b8e22[_0xa8dd('0x3a')][_0xa8dd('0x4a')]){_0x24a803[_0xa8dd('0x4b')]=[{'all':!![]}];}return db[_0xa8dd('0x37')][_0xa8dd('0x4c')](_0x24a803);})[_0xa8dd('0x31')](function(_0x87d9b5){_0x3c4140['rows']=_0x87d9b5;return _0x3c4140;})[_0xa8dd('0x31')](respondWithFilteredResult(_0x3d5929,_0x24a803))[_0xa8dd('0x25')](handleError(_0x3d5929,null));};exports[_0xa8dd('0x4d')]=function(_0x1420b7,_0x4c3803){var _0x5f5281={'raw':![],'where':{'id':_0x1420b7[_0xa8dd('0x4e')]['id']}},_0x10dcb2={};_0x10dcb2[_0xa8dd('0x3c')]=_[_0xa8dd('0x39')](db['Dynamics365Configuration'][_0xa8dd('0x38')]);_0x10dcb2[_0xa8dd('0x3a')]=_['keys'](_0x1420b7[_0xa8dd('0x3a')]);_0x10dcb2[_0xa8dd('0x41')]=_[_0xa8dd('0x3b')](_0x10dcb2[_0xa8dd('0x3c')],_0x10dcb2[_0xa8dd('0x3a')]);_0x5f5281[_0xa8dd('0x3d')]=_[_0xa8dd('0x3b')](_0x10dcb2[_0xa8dd('0x3c')],qs[_0xa8dd('0x3e')](_0x1420b7[_0xa8dd('0x3a')][_0xa8dd('0x3e')]));_0x5f5281[_0xa8dd('0x3d')]=_0x5f5281[_0xa8dd('0x3d')]['length']?_0x5f5281[_0xa8dd('0x3d')]:_0x10dcb2[_0xa8dd('0x3c')];if(_0x1420b7[_0xa8dd('0x3a')][_0xa8dd('0x4a')]){_0x5f5281[_0xa8dd('0x4b')]=[{'all':!![]}];}_0x5f5281=_['merge']({},_0x5f5281,_0x1420b7['options']);return db[_0xa8dd('0x37')][_0xa8dd('0x4f')](_0x5f5281)[_0xa8dd('0x31')](handleEntityNotFound(_0x4c3803,null))[_0xa8dd('0x31')](respondWithResult(_0x4c3803,null))[_0xa8dd('0x25')](handleError(_0x4c3803,null));};exports[_0xa8dd('0x50')]=function(_0x5c5674,_0x289923){return db[_0xa8dd('0x37')][_0xa8dd('0x50')](_0x5c5674[_0xa8dd('0x51')],{})['then'](respondWithResult(_0x289923,0xc9))[_0xa8dd('0x25')](handleError(_0x289923,null));};exports[_0xa8dd('0x30')]=function(_0x1b6237,_0x5957d2){if(_0x1b6237[_0xa8dd('0x51')]['id']){delete _0x1b6237[_0xa8dd('0x51')]['id'];}return db[_0xa8dd('0x37')][_0xa8dd('0x4f')]({'where':{'id':_0x1b6237[_0xa8dd('0x4e')]['id']}})[_0xa8dd('0x31')](handleEntityNotFound(_0x5957d2,null))[_0xa8dd('0x31')](saveUpdates(_0x1b6237[_0xa8dd('0x51')],null))['then'](respondWithResult(_0x5957d2,null))['catch'](handleError(_0x5957d2,null));};exports[_0xa8dd('0x52')]=function(_0xd55731,_0x13ceda){return db[_0xa8dd('0x37')]['find']({'where':{'id':_0xd55731['params']['id']}})[_0xa8dd('0x31')](handleEntityNotFound(_0x13ceda,null))[_0xa8dd('0x31')](removeEntity(_0x13ceda,null))[_0xa8dd('0x25')](handleError(_0x13ceda,null));};exports['getFields']=function(_0x2afcaf,_0x95c232,_0x2964e7){var _0x5891b5={};var _0x11fe3d={};var _0x3dd761;var _0x1d09fb;return db['Dynamics365Configuration']['findOne']({'where':{'id':_0x2afcaf[_0xa8dd('0x4e')]['id']}})[_0xa8dd('0x31')](handleEntityNotFound(_0x95c232,null))[_0xa8dd('0x31')](function(_0x587340){if(_0x587340){_0x3dd761=_0x587340;_0x11fe3d['model']=_[_0xa8dd('0x39')](db[_0xa8dd('0x53')][_0xa8dd('0x38')]);_0x11fe3d[_0xa8dd('0x3a')]=_[_0xa8dd('0x39')](_0x2afcaf['query']);_0x11fe3d['filters']=_[_0xa8dd('0x3b')](_0x11fe3d[_0xa8dd('0x3c')],_0x11fe3d[_0xa8dd('0x3a')]);_0x5891b5[_0xa8dd('0x3d')]=_[_0xa8dd('0x3b')](_0x11fe3d[_0xa8dd('0x3c')],qs['fields'](_0x2afcaf[_0xa8dd('0x3a')][_0xa8dd('0x3e')]));_0x5891b5[_0xa8dd('0x3d')]=_0x5891b5[_0xa8dd('0x3d')][_0xa8dd('0x54')]?_0x5891b5[_0xa8dd('0x3d')]:_0x11fe3d[_0xa8dd('0x3c')];_0x5891b5[_0xa8dd('0x55')]=qs['sort'](_0x2afcaf[_0xa8dd('0x3a')][_0xa8dd('0x3f')]);_0x5891b5[_0xa8dd('0x40')]=qs[_0xa8dd('0x41')](_[_0xa8dd('0x42')](_0x2afcaf[_0xa8dd('0x3a')],_0x11fe3d[_0xa8dd('0x41')]));if(_0x2afcaf[_0xa8dd('0x3a')][_0xa8dd('0x43')]){_0x5891b5[_0xa8dd('0x40')]=_[_0xa8dd('0x44')](_0x5891b5['where'],{'$or':_[_0xa8dd('0x56')](_0x5891b5['attributes'],function(_0x1afac4){var _0x1cc6c3={};_0x1cc6c3[_0x1afac4]={'$like':'%'+_0x2afcaf['query']['filter']+'%'};return _0x1cc6c3;})});}_0x5891b5=_[_0xa8dd('0x44')]({},_0x5891b5,_0x2afcaf[_0xa8dd('0x49')]);return _0x3dd761[_0xa8dd('0x57')](_0x5891b5);}})[_0xa8dd('0x31')](function(_0x28a58f){if(_0x28a58f){_0x1d09fb=_0x28a58f['length'];if(!_0x2afcaf['query'][_0xa8dd('0x58')](_0xa8dd('0x59'))){_0x5891b5[_0xa8dd('0x2b')]=qs[_0xa8dd('0x2b')](_0x2afcaf[_0xa8dd('0x3a')]['limit']);_0x5891b5[_0xa8dd('0x2a')]=qs[_0xa8dd('0x2a')](_0x2afcaf[_0xa8dd('0x3a')][_0xa8dd('0x2a')]);}return _0x3dd761[_0xa8dd('0x57')](_0x5891b5);}})[_0xa8dd('0x31')](function(_0x242fc2){if(_0x242fc2){return _0x242fc2?{'count':_0x1d09fb,'rows':_0x242fc2}:null;}})['then'](respondWithResult(_0x95c232,null))['catch'](handleError(_0x95c232,null));};exports[_0xa8dd('0x5a')]=function(_0x4c6f60,_0x152e08,_0x54f926){var _0x2a4caa={};var _0x54dd36={};var _0x5d8803;var _0x1d5db9;return db[_0xa8dd('0x37')]['findOne']({'where':{'id':_0x4c6f60['params']['id']}})[_0xa8dd('0x31')](handleEntityNotFound(_0x152e08,null))[_0xa8dd('0x31')](function(_0xd6ea4){if(_0xd6ea4){_0x5d8803=_0xd6ea4;_0x54dd36['model']=_[_0xa8dd('0x39')](db['Dynamics365Field'][_0xa8dd('0x38')]);_0x54dd36[_0xa8dd('0x3a')]=_['keys'](_0x4c6f60['query']);_0x54dd36[_0xa8dd('0x41')]=_['intersection'](_0x54dd36[_0xa8dd('0x3c')],_0x54dd36[_0xa8dd('0x3a')]);_0x2a4caa[_0xa8dd('0x3d')]=_['intersection'](_0x54dd36[_0xa8dd('0x3c')],qs[_0xa8dd('0x3e')](_0x4c6f60['query']['fields']));_0x2a4caa[_0xa8dd('0x3d')]=_0x2a4caa['attributes'][_0xa8dd('0x54')]?_0x2a4caa['attributes']:_0x54dd36[_0xa8dd('0x3c')];_0x2a4caa[_0xa8dd('0x55')]=qs[_0xa8dd('0x3f')](_0x4c6f60[_0xa8dd('0x3a')][_0xa8dd('0x3f')]);_0x2a4caa['where']=qs['filters'](_['pick'](_0x4c6f60[_0xa8dd('0x3a')],_0x54dd36[_0xa8dd('0x41')]));if(_0x4c6f60[_0xa8dd('0x3a')][_0xa8dd('0x43')]){_0x2a4caa[_0xa8dd('0x40')]=_['merge'](_0x2a4caa[_0xa8dd('0x40')],{'$or':_[_0xa8dd('0x56')](_0x2a4caa[_0xa8dd('0x3d')],function(_0x5912ce){var _0x386cc2={};_0x386cc2[_0x5912ce]={'$like':'%'+_0x4c6f60[_0xa8dd('0x3a')][_0xa8dd('0x43')]+'%'};return _0x386cc2;})});}_0x2a4caa=_[_0xa8dd('0x44')]({},_0x2a4caa,_0x4c6f60[_0xa8dd('0x49')]);return _0x5d8803['getSubjects'](_0x2a4caa);}})[_0xa8dd('0x31')](function(_0x4deb77){if(_0x4deb77){_0x1d5db9=_0x4deb77[_0xa8dd('0x54')];if(!_0x4c6f60[_0xa8dd('0x3a')][_0xa8dd('0x58')](_0xa8dd('0x59'))){_0x2a4caa['limit']=qs[_0xa8dd('0x2b')](_0x4c6f60[_0xa8dd('0x3a')]['limit']);_0x2a4caa['offset']=qs['offset'](_0x4c6f60[_0xa8dd('0x3a')][_0xa8dd('0x2a')]);}return _0x5d8803[_0xa8dd('0x5a')](_0x2a4caa);}})['then'](function(_0x505abd){if(_0x505abd){return _0x505abd?{'count':_0x1d5db9,'rows':_0x505abd}:null;}})[_0xa8dd('0x31')](respondWithResult(_0x152e08,null))[_0xa8dd('0x25')](handleError(_0x152e08,null));};exports[_0xa8dd('0x5b')]=function(_0x4e850d,_0x25469b,_0x4acdc0){var _0x5965e3={};var _0x5bd0d5={};var _0x553d6a;var _0x25900f;return db[_0xa8dd('0x37')][_0xa8dd('0x5c')]({'where':{'id':_0x4e850d[_0xa8dd('0x4e')]['id']}})['then'](handleEntityNotFound(_0x25469b,null))[_0xa8dd('0x31')](function(_0x5d6653){if(_0x5d6653){_0x553d6a=_0x5d6653;_0x5bd0d5[_0xa8dd('0x3c')]=_[_0xa8dd('0x39')](db[_0xa8dd('0x53')][_0xa8dd('0x38')]);_0x5bd0d5['query']=_[_0xa8dd('0x39')](_0x4e850d[_0xa8dd('0x3a')]);_0x5bd0d5[_0xa8dd('0x41')]=_[_0xa8dd('0x3b')](_0x5bd0d5[_0xa8dd('0x3c')],_0x5bd0d5[_0xa8dd('0x3a')]);_0x5965e3[_0xa8dd('0x3d')]=_[_0xa8dd('0x3b')](_0x5bd0d5[_0xa8dd('0x3c')],qs[_0xa8dd('0x3e')](_0x4e850d[_0xa8dd('0x3a')][_0xa8dd('0x3e')]));_0x5965e3[_0xa8dd('0x3d')]=_0x5965e3['attributes'][_0xa8dd('0x54')]?_0x5965e3[_0xa8dd('0x3d')]:_0x5bd0d5[_0xa8dd('0x3c')];_0x5965e3[_0xa8dd('0x55')]=qs[_0xa8dd('0x3f')](_0x4e850d['query'][_0xa8dd('0x3f')]);_0x5965e3[_0xa8dd('0x40')]=qs[_0xa8dd('0x41')](_[_0xa8dd('0x42')](_0x4e850d[_0xa8dd('0x3a')],_0x5bd0d5['filters']));if(_0x4e850d[_0xa8dd('0x3a')][_0xa8dd('0x43')]){_0x5965e3[_0xa8dd('0x40')]=_[_0xa8dd('0x44')](_0x5965e3[_0xa8dd('0x40')],{'$or':_[_0xa8dd('0x56')](_0x5965e3[_0xa8dd('0x3d')],function(_0x1a4c59){var _0x38dca9={};_0x38dca9[_0x1a4c59]={'$like':'%'+_0x4e850d[_0xa8dd('0x3a')][_0xa8dd('0x43')]+'%'};return _0x38dca9;})});}_0x5965e3=_[_0xa8dd('0x44')]({},_0x5965e3,_0x4e850d[_0xa8dd('0x49')]);return _0x553d6a['getDescriptions'](_0x5965e3);}})['then'](function(_0x3239b4){if(_0x3239b4){_0x25900f=_0x3239b4[_0xa8dd('0x54')];if(!_0x4e850d['query']['hasOwnProperty']('nolimit')){_0x5965e3[_0xa8dd('0x2b')]=qs['limit'](_0x4e850d['query'][_0xa8dd('0x2b')]);_0x5965e3[_0xa8dd('0x2a')]=qs[_0xa8dd('0x2a')](_0x4e850d['query'][_0xa8dd('0x2a')]);}return _0x553d6a['getDescriptions'](_0x5965e3);}})[_0xa8dd('0x31')](function(_0x3f0b91){if(_0x3f0b91){return _0x3f0b91?{'count':_0x25900f,'rows':_0x3f0b91}:null;}})[_0xa8dd('0x31')](respondWithResult(_0x25469b,null))[_0xa8dd('0x25')](handleError(_0x25469b,null));};
\ No newline at end of file
index b07ce01..0f25917 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9bb=['path','../../config/environment','./intDynamics365Configuration.attributes','exports','define','Dynamics365Configuration','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x4d5576,_0x42298d){var _0x447d01=function(_0xfe832d){while(--_0xfe832d){_0x4d5576['push'](_0x4d5576['shift']());}};_0x447d01(++_0x42298d);}(_0xe9bb,0x14b));var _0xbe9b=function(_0x29d312,_0x951117){_0x29d312=_0x29d312-0x0;var _0x1fe04b=_0xe9bb[_0x29d312];return _0x1fe04b;};'use strict';var _=require(_0xbe9b('0x0'));var util=require(_0xbe9b('0x1'));var logger=require(_0xbe9b('0x2'))(_0xbe9b('0x3'));var moment=require(_0xbe9b('0x4'));var BPromise=require(_0xbe9b('0x5'));var rp=require(_0xbe9b('0x6'));var fs=require('fs');var path=require(_0xbe9b('0x7'));var rimraf=require('rimraf');var config=require(_0xbe9b('0x8'));var attributes=require(_0xbe9b('0x9'));module[_0xbe9b('0xa')]=function(_0x5c9d79,_0x1a7c08){return _0x5c9d79[_0xbe9b('0xb')](_0xbe9b('0xc'),attributes,{'tableName':'int_dynamics365_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd08a=['moment','bluebird','request-promise','path','../../config/environment','./intDynamics365Configuration.attributes','exports','Dynamics365Configuration','int_dynamics365_configurations','lodash','../../config/logger','api'];(function(_0x434493,_0x499ab1){var _0xfb3ee3=function(_0x4274d3){while(--_0x4274d3){_0x434493['push'](_0x434493['shift']());}};_0xfb3ee3(++_0x499ab1);}(_0xd08a,0xa5));var _0xad08=function(_0xad368,_0xafd00){_0xad368=_0xad368-0x0;var _0x3165a7=_0xd08a[_0xad368];return _0x3165a7;};'use strict';var _=require(_0xad08('0x0'));var util=require('util');var logger=require(_0xad08('0x1'))(_0xad08('0x2'));var moment=require(_0xad08('0x3'));var BPromise=require(_0xad08('0x4'));var rp=require(_0xad08('0x5'));var fs=require('fs');var path=require(_0xad08('0x6'));var rimraf=require('rimraf');var config=require(_0xad08('0x7'));var attributes=require(_0xad08('0x8'));module[_0xad08('0x9')]=function(_0x85c651,_0x52e19d){return _0x85c651['define'](_0xad08('0xa'),attributes,{'tableName':_0xad08('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2fef9e1..d25efe5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x45ac=['Dynamics365Configuration,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','request','info','Dynamics365Configuration,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x465a0c,_0x19d4d5){var _0x1e202e=function(_0x27bd8a){while(--_0x27bd8a){_0x465a0c['push'](_0x465a0c['shift']());}};_0x1e202e(++_0x19d4d5);}(_0x45ac,0x1be));var _0xc45a=function(_0x3441e9,_0x269c8a){_0x3441e9=_0x3441e9-0x0;var _0x7f9ada=_0x45ac[_0x3441e9];return _0x7f9ada;};'use strict';var _=require(_0xc45a('0x0'));var util=require(_0xc45a('0x1'));var moment=require(_0xc45a('0x2'));var BPromise=require(_0xc45a('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xc45a('0x4'));var db=require(_0xc45a('0x5'))['db'];var utils=require(_0xc45a('0x6'));var logger=require(_0xc45a('0x7'))(_0xc45a('0x8'));var config=require(_0xc45a('0x9'));var jayson=require('jayson/promise');var client=jayson['client'][_0xc45a('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x1b0cfa,_0x511c27,_0x2c7dd5){return new BPromise(function(_0x315c5d,_0x420bc9){return client[_0xc45a('0xb')](_0x1b0cfa,_0x2c7dd5)['then'](function(_0x2d92f7){logger[_0xc45a('0xc')](_0xc45a('0xd'),_0x511c27,_0xc45a('0xe'));logger[_0xc45a('0xf')](_0xc45a('0x10'),_0x511c27,_0xc45a('0xe'),JSON['stringify'](_0x2d92f7));if(_0x2d92f7[_0xc45a('0x11')]){if(_0x2d92f7[_0xc45a('0x11')][_0xc45a('0x12')]===0x1f4){logger[_0xc45a('0x11')](_0xc45a('0xd'),_0x511c27,_0x2d92f7[_0xc45a('0x11')][_0xc45a('0x13')]);return _0x420bc9(_0x2d92f7[_0xc45a('0x11')][_0xc45a('0x13')]);}logger[_0xc45a('0x11')](_0xc45a('0xd'),_0x511c27,_0x2d92f7[_0xc45a('0x11')][_0xc45a('0x13')]);return _0x315c5d(_0x2d92f7[_0xc45a('0x11')]['message']);}else{logger[_0xc45a('0xc')](_0xc45a('0xd'),_0x511c27,_0xc45a('0xe'));_0x315c5d(_0x2d92f7[_0xc45a('0x14')]['message']);}})[_0xc45a('0x15')](function(_0x4b4db9){logger[_0xc45a('0x11')]('Dynamics365Configuration,\x20%s,\x20%s',_0x511c27,_0x4b4db9);_0x420bc9(_0x4b4db9);});});}
\ No newline at end of file
+var _0xddee=['randomstring','../../config/utils','jayson/promise','client','http','info','Dynamics365Configuration,\x20%s,\x20%s','request\x20sent','debug','Dynamics365Configuration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','util'];(function(_0x242876,_0x40c095){var _0x2e2718=function(_0x335d22){while(--_0x335d22){_0x242876['push'](_0x242876['shift']());}};_0x2e2718(++_0x40c095);}(_0xddee,0xcf));var _0xedde=function(_0x459423,_0x3416a8){_0x459423=_0x459423-0x0;var _0x42ed14=_0xddee[_0x459423];return _0x42ed14;};'use strict';var _=require('lodash');var util=require(_0xedde('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xedde('0x1'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xedde('0x2'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0xedde('0x3'));var client=jayson[_0xedde('0x4')][_0xedde('0x5')]({'port':0x232a});function respondWithRpcPromise(_0xaeaf7d,_0x2cdd95,_0x5d7146){return new BPromise(function(_0x14720a,_0x59dda2){return client['request'](_0xaeaf7d,_0x5d7146)['then'](function(_0x4ec3d3){logger[_0xedde('0x6')](_0xedde('0x7'),_0x2cdd95,_0xedde('0x8'));logger[_0xedde('0x9')](_0xedde('0xa'),_0x2cdd95,_0xedde('0x8'),JSON[_0xedde('0xb')](_0x4ec3d3));if(_0x4ec3d3[_0xedde('0xc')]){if(_0x4ec3d3[_0xedde('0xc')][_0xedde('0xd')]===0x1f4){logger['error'](_0xedde('0x7'),_0x2cdd95,_0x4ec3d3[_0xedde('0xc')][_0xedde('0xe')]);return _0x59dda2(_0x4ec3d3[_0xedde('0xc')][_0xedde('0xe')]);}logger[_0xedde('0xc')](_0xedde('0x7'),_0x2cdd95,_0x4ec3d3['error'][_0xedde('0xe')]);return _0x14720a(_0x4ec3d3['error'][_0xedde('0xe')]);}else{logger['info'](_0xedde('0x7'),_0x2cdd95,'request\x20sent');_0x14720a(_0x4ec3d3['result']['message']);}})[_0xedde('0xf')](function(_0x2521c0){logger[_0xedde('0xc')](_0xedde('0x7'),_0x2cdd95,_0x2521c0);_0x59dda2(_0x2521c0);});});}
\ No newline at end of file
index 50630c8..8107f7f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b86=['isAuthenticated','index','/:id','show','post','put','delete','util','path','connect-timeout','express','../../components/auth/service','../../config/environment','./intDynamics365Field.controller','get'];(function(_0x79702,_0x34931c){var _0x417e6b=function(_0x55294a){while(--_0x55294a){_0x79702['push'](_0x79702['shift']());}};_0x417e6b(++_0x34931c);}(_0x5b86,0xf7));var _0x65b8=function(_0x4d8190,_0x2faf1f){_0x4d8190=_0x4d8190-0x0;var _0xf25973=_0x5b86[_0x4d8190];return _0xf25973;};'use strict';var multer=require('multer');var util=require(_0x65b8('0x0'));var path=require(_0x65b8('0x1'));var timeout=require(_0x65b8('0x2'));var express=require(_0x65b8('0x3'));var router=express['Router']();var auth=require(_0x65b8('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x65b8('0x5'));var controller=require(_0x65b8('0x6'));router[_0x65b8('0x7')]('/',auth[_0x65b8('0x8')](),controller[_0x65b8('0x9')]);router[_0x65b8('0x7')](_0x65b8('0xa'),auth[_0x65b8('0x8')](),controller[_0x65b8('0xb')]);router[_0x65b8('0xc')]('/',auth[_0x65b8('0x8')](),controller['create']);router[_0x65b8('0xd')]('/:id',auth['isAuthenticated'](),controller['update']);router[_0x65b8('0xe')]('/:id',auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x4c48=['path','connect-timeout','express','../../components/interaction/service','../../config/environment','./intDynamics365Field.controller','get','/:id','isAuthenticated','post','create','put','update','delete','destroy','exports','multer'];(function(_0x3f0b30,_0x159bc8){var _0x2748a5=function(_0x3b42cc){while(--_0x3b42cc){_0x3f0b30['push'](_0x3f0b30['shift']());}};_0x2748a5(++_0x159bc8);}(_0x4c48,0x1a8));var _0x84c4=function(_0x4404ff,_0x13d7a9){_0x4404ff=_0x4404ff-0x0;var _0x5e7b19=_0x4c48[_0x4404ff];return _0x5e7b19;};'use strict';var multer=require(_0x84c4('0x0'));var util=require('util');var path=require(_0x84c4('0x1'));var timeout=require(_0x84c4('0x2'));var express=require(_0x84c4('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x84c4('0x4'));var config=require(_0x84c4('0x5'));var controller=require(_0x84c4('0x6'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x84c4('0x7')](_0x84c4('0x8'),auth[_0x84c4('0x9')](),controller['show']);router[_0x84c4('0xa')]('/',auth['isAuthenticated'](),controller[_0x84c4('0xb')]);router[_0x84c4('0xc')](_0x84c4('0x8'),auth[_0x84c4('0x9')](),controller[_0x84c4('0xd')]);router[_0x84c4('0xe')](_0x84c4('0x8'),auth[_0x84c4('0x9')](),controller[_0x84c4('0xf')]);module[_0x84c4('0x10')]=router;
\ No newline at end of file
index a2ca3ee..1f07115 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c00=['sequelize','exports','variable','customVariable','string','STRING','ENUM','BOOLEAN'];(function(_0x23f135,_0x239502){var _0x5078e0=function(_0x354ae1){while(--_0x354ae1){_0x23f135['push'](_0x23f135['shift']());}};_0x5078e0(++_0x239502);}(_0x9c00,0x1a0));var _0x09c0=function(_0xf61129,_0x523668){_0xf61129=_0xf61129-0x0;var _0xefa38a=_0x9c00[_0xf61129];return _0xefa38a;};'use strict';var Sequelize=require(_0x09c0('0x0'));module[_0x09c0('0x1')]={'type':{'type':Sequelize['ENUM']('string',_0x09c0('0x2'),_0x09c0('0x3'),'keyValue'),'defaultValue':_0x09c0('0x4')},'content':{'type':Sequelize[_0x09c0('0x5')]},'key':{'type':Sequelize[_0x09c0('0x5')]},'keyType':{'type':Sequelize[_0x09c0('0x6')](_0x09c0('0x4'),'variable','customVariable')},'keyContent':{'type':Sequelize[_0x09c0('0x5')]},'idField':{'type':Sequelize[_0x09c0('0x5')]},'nameField':{'type':Sequelize[_0x09c0('0x5')]},'customField':{'type':Sequelize[_0x09c0('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x09c0('0x5')]}};
\ No newline at end of file
+var _0x6e6c=['variable','STRING','BOOLEAN','sequelize','exports','string'];(function(_0x149c8f,_0x5cb5e4){var _0x4624c6=function(_0x599cf9){while(--_0x599cf9){_0x149c8f['push'](_0x149c8f['shift']());}};_0x4624c6(++_0x5cb5e4);}(_0x6e6c,0xc3));var _0xc6e6=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0x6e6c[_0x397e5f];return _0x5302b8;};'use strict';var Sequelize=require(_0xc6e6('0x0'));module[_0xc6e6('0x1')]={'type':{'type':Sequelize['ENUM'](_0xc6e6('0x2'),_0xc6e6('0x3'),'customVariable','keyValue'),'defaultValue':_0xc6e6('0x2')},'content':{'type':Sequelize['STRING']},'key':{'type':Sequelize[_0xc6e6('0x4')]},'keyType':{'type':Sequelize['ENUM'](_0xc6e6('0x2'),_0xc6e6('0x3'),'customVariable')},'keyContent':{'type':Sequelize[_0xc6e6('0x4')]},'idField':{'type':Sequelize[_0xc6e6('0x4')]},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize[_0xc6e6('0x5')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xc6e6('0x4')]}};
\ No newline at end of file
index ecdea29..30b81c8 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(_0x4fbaf9,_0x3b8190){var _0x1d89a0=function(_0x3b650b){while(--_0x3b650b){_0x4fbaf9['push'](_0x4fbaf9['shift']());}};_0x1d89a0(++_0x3b8190);}(_0x70e0,0x17b));var _0x070e=function(_0x119787,_0x4aa56a){_0x119787=_0x119787-0x0;var _0xc22124=_0x70e0[_0x119787];return _0xc22124;};'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 _0xb7e7=['find','html-pdf','rimraf','fast-json-patch','moment','mustache','util','path','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','send','index','model','keys','filters','intersection','attributes','fields','query','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','options','Dynamics365Field','includeAll','findAll','show','params','rawAttributes','include','catch','create','body'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0xb7e7,0x121));var _0x7b7e=function(_0x1da04e,_0x31024b){_0x1da04e=_0x1da04e-0x0;var _0xdd8c41=_0xb7e7[_0x1da04e];return _0xdd8c41;};'use strict';var pdf=require(_0x7b7e('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x7b7e('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x7b7e('0x2'));var rp=require('request-promise');var moment=require(_0x7b7e('0x3'));var BPromise=require('bluebird');var Mustache=require(_0x7b7e('0x4'));var util=require(_0x7b7e('0x5'));var path=require(_0x7b7e('0x6'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x7b7e('0x7'));var fs=require('fs');var _=require(_0x7b7e('0x8'));var squel=require(_0x7b7e('0x9'));var crypto=require('crypto');var jsforce=require(_0x7b7e('0xa'));var deskjs=require(_0x7b7e('0xb'));var toCsv=require(_0x7b7e('0xc'));var querystring=require(_0x7b7e('0xd'));var Papa=require(_0x7b7e('0xe'));var Redis=require(_0x7b7e('0xf'));var authService=require(_0x7b7e('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x7b7e('0x11'));var logger=require(_0x7b7e('0x12'))(_0x7b7e('0x13'));var utils=require(_0x7b7e('0x14'));var config=require(_0x7b7e('0x15'));var db=require(_0x7b7e('0x16'))['db'];function respondWithStatusCode(_0x36d2a3,_0x55620b){_0x55620b=_0x55620b||0xcc;return function(_0xaadda){if(_0xaadda){return _0x36d2a3['sendStatus'](_0x55620b);}return _0x36d2a3[_0x7b7e('0x17')](_0x55620b)[_0x7b7e('0x18')]();};}function respondWithResult(_0x50d7d2,_0x422d3a){_0x422d3a=_0x422d3a||0xc8;return function(_0x5976ac){if(_0x5976ac){return _0x50d7d2['status'](_0x422d3a)[_0x7b7e('0x19')](_0x5976ac);}};}function respondWithFilteredResult(_0xd304f5,_0xf067da){return function(_0x457ec5){if(_0x457ec5){var _0x3d2fb2=_0x457ec5[_0x7b7e('0x1a')],_0x5703fd=_0xf067da[_0x7b7e('0x1b')],_0x51baf6=_0xf067da[_0x7b7e('0x1b')]+_0xf067da[_0x7b7e('0x1c')],_0xc7f087;if(_0x51baf6>=_0x3d2fb2){_0x51baf6=_0x3d2fb2;_0xc7f087=0xc8;}else{_0xc7f087=0xce;}_0xd304f5[_0x7b7e('0x17')](_0xc7f087);return _0xd304f5[_0x7b7e('0x1d')](_0x7b7e('0x1e'),_0x5703fd+'-'+_0x51baf6+'/'+_0x3d2fb2)[_0x7b7e('0x19')](_0x457ec5);}return null;};}function patchUpdates(_0x429a0e){return function(_0x12e8e9){try{jsonpatch[_0x7b7e('0x1f')](_0x12e8e9,_0x429a0e,!![]);}catch(_0x448980){return BPromise[_0x7b7e('0x20')](_0x448980);}return _0x12e8e9[_0x7b7e('0x21')]();};}function saveUpdates(_0x864287,_0x3a7b8b){return function(_0x49eddb){if(_0x49eddb){return _0x49eddb[_0x7b7e('0x22')](_0x864287)[_0x7b7e('0x23')](function(_0x24718c){return _0x24718c;});}return null;};}function removeEntity(_0x4c0647,_0x313122){return function(_0xbf0cb3){if(_0xbf0cb3){return _0xbf0cb3[_0x7b7e('0x24')]()[_0x7b7e('0x23')](function(){_0x4c0647[_0x7b7e('0x17')](0xcc)[_0x7b7e('0x18')]();});}};}function handleEntityNotFound(_0x28bf43,_0x10a66a){return function(_0x53bbb3){if(!_0x53bbb3){_0x28bf43['sendStatus'](0x194);}return _0x53bbb3;};}function handleError(_0x4a836a,_0x26ee14){_0x26ee14=_0x26ee14||0x1f4;return function(_0x22598e){logger[_0x7b7e('0x25')](_0x22598e['stack']);if(_0x22598e['name']){delete _0x22598e['name'];}_0x4a836a[_0x7b7e('0x17')](_0x26ee14)[_0x7b7e('0x26')](_0x22598e);};}exports[_0x7b7e('0x27')]=function(_0x7aa71,_0x3ceaf5){var _0x48fad1={},_0x6a1e71={},_0x21a15={'count':0x0,'rows':[]};var _0x4c46b8=db['Dynamics365Field']['rawAttributes'];_0x6a1e71[_0x7b7e('0x28')]=_[_0x7b7e('0x29')](_0x4c46b8);_0x6a1e71['query']=_[_0x7b7e('0x29')](_0x7aa71['query']);_0x6a1e71[_0x7b7e('0x2a')]=_[_0x7b7e('0x2b')](_0x6a1e71[_0x7b7e('0x28')],_0x6a1e71['query']);_0x48fad1[_0x7b7e('0x2c')]=_[_0x7b7e('0x2b')](_0x6a1e71[_0x7b7e('0x28')],qs[_0x7b7e('0x2d')](_0x7aa71[_0x7b7e('0x2e')]['fields']));_0x48fad1[_0x7b7e('0x2c')]=_0x48fad1['attributes'][_0x7b7e('0x2f')]?_0x48fad1[_0x7b7e('0x2c')]:_0x6a1e71[_0x7b7e('0x28')];if(!_0x7aa71[_0x7b7e('0x2e')][_0x7b7e('0x30')](_0x7b7e('0x31'))){_0x48fad1[_0x7b7e('0x1c')]=qs['limit'](_0x7aa71['query'][_0x7b7e('0x1c')]);_0x48fad1[_0x7b7e('0x1b')]=qs['offset'](_0x7aa71[_0x7b7e('0x2e')][_0x7b7e('0x1b')]);}_0x48fad1[_0x7b7e('0x32')]=qs['sort'](_0x7aa71[_0x7b7e('0x2e')][_0x7b7e('0x33')]);_0x48fad1[_0x7b7e('0x34')]=qs[_0x7b7e('0x2a')](_[_0x7b7e('0x35')](_0x7aa71[_0x7b7e('0x2e')],_0x6a1e71[_0x7b7e('0x2a')]));if(_0x7aa71[_0x7b7e('0x2e')][_0x7b7e('0x36')]){_0x48fad1[_0x7b7e('0x34')]=_[_0x7b7e('0x37')](_0x48fad1[_0x7b7e('0x34')],{'$or':_[_0x7b7e('0x38')](_0x4c46b8,function(_0xdcb8ef){if(_0xdcb8ef[_0x7b7e('0x39')][_0x7b7e('0x3a')]!=='VIRTUAL'){var _0x8c80d5={};_0x8c80d5[_0xdcb8ef[_0x7b7e('0x3b')]]={'$like':'%'+_0x7aa71[_0x7b7e('0x2e')][_0x7b7e('0x36')]+'%'};return _0x8c80d5;}})});}_0x48fad1=_[_0x7b7e('0x37')]({},_0x48fad1,_0x7aa71[_0x7b7e('0x3c')]);var _0x7f15={'where':_0x48fad1[_0x7b7e('0x34')]};return db[_0x7b7e('0x3d')][_0x7b7e('0x1a')](_0x7f15)['then'](function(_0x3d6571){_0x21a15[_0x7b7e('0x1a')]=_0x3d6571;if(_0x7aa71[_0x7b7e('0x2e')][_0x7b7e('0x3e')]){_0x48fad1['include']=[{'all':!![]}];}return db[_0x7b7e('0x3d')][_0x7b7e('0x3f')](_0x48fad1);})[_0x7b7e('0x23')](function(_0x5c58c0){_0x21a15['rows']=_0x5c58c0;return _0x21a15;})[_0x7b7e('0x23')](respondWithFilteredResult(_0x3ceaf5,_0x48fad1))['catch'](handleError(_0x3ceaf5,null));};exports[_0x7b7e('0x40')]=function(_0x3b16d7,_0x4de331){var _0xa5daaa={'raw':!![],'where':{'id':_0x3b16d7[_0x7b7e('0x41')]['id']}},_0x2074d1={};_0x2074d1[_0x7b7e('0x28')]=_[_0x7b7e('0x29')](db[_0x7b7e('0x3d')][_0x7b7e('0x42')]);_0x2074d1[_0x7b7e('0x2e')]=_[_0x7b7e('0x29')](_0x3b16d7['query']);_0x2074d1['filters']=_[_0x7b7e('0x2b')](_0x2074d1['model'],_0x2074d1[_0x7b7e('0x2e')]);_0xa5daaa['attributes']=_['intersection'](_0x2074d1[_0x7b7e('0x28')],qs['fields'](_0x3b16d7[_0x7b7e('0x2e')]['fields']));_0xa5daaa[_0x7b7e('0x2c')]=_0xa5daaa[_0x7b7e('0x2c')][_0x7b7e('0x2f')]?_0xa5daaa[_0x7b7e('0x2c')]:_0x2074d1['model'];if(_0x3b16d7[_0x7b7e('0x2e')][_0x7b7e('0x3e')]){_0xa5daaa[_0x7b7e('0x43')]=[{'all':!![]}];}_0xa5daaa=_[_0x7b7e('0x37')]({},_0xa5daaa,_0x3b16d7[_0x7b7e('0x3c')]);return db[_0x7b7e('0x3d')]['find'](_0xa5daaa)['then'](handleEntityNotFound(_0x4de331,null))['then'](respondWithResult(_0x4de331,null))[_0x7b7e('0x44')](handleError(_0x4de331,null));};exports[_0x7b7e('0x45')]=function(_0x2f9de2,_0x2cfe70){return db[_0x7b7e('0x3d')][_0x7b7e('0x45')](_0x2f9de2['body'],{})[_0x7b7e('0x23')](respondWithResult(_0x2cfe70,0xc9))[_0x7b7e('0x44')](handleError(_0x2cfe70,null));};exports['update']=function(_0x5efcb8,_0x1dcb88){if(_0x5efcb8[_0x7b7e('0x46')]['id']){delete _0x5efcb8[_0x7b7e('0x46')]['id'];}return db[_0x7b7e('0x3d')][_0x7b7e('0x47')]({'where':{'id':_0x5efcb8[_0x7b7e('0x41')]['id']}})['then'](handleEntityNotFound(_0x1dcb88,null))[_0x7b7e('0x23')](saveUpdates(_0x5efcb8['body'],null))[_0x7b7e('0x23')](respondWithResult(_0x1dcb88,null))[_0x7b7e('0x44')](handleError(_0x1dcb88,null));};exports[_0x7b7e('0x24')]=function(_0x5874e2,_0x58e4e6){return db[_0x7b7e('0x3d')][_0x7b7e('0x47')]({'where':{'id':_0x5874e2[_0x7b7e('0x41')]['id']}})[_0x7b7e('0x23')](handleEntityNotFound(_0x58e4e6,null))[_0x7b7e('0x23')](removeEntity(_0x58e4e6,null))['catch'](handleError(_0x58e4e6,null));};
\ No newline at end of file
index 2cfec15..3a4e444 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(_0x423847,_0x1c43ce){var _0x455dcc=function(_0x48090c){while(--_0x48090c){_0x423847['push'](_0x423847['shift']());}};_0x455dcc(++_0x1c43ce);}(_0x7a54,0x106));var _0x47a5=function(_0x44fd95,_0x167c62){_0x44fd95=_0x44fd95-0x0;var _0x55f701=_0x7a54[_0x44fd95];return _0x55f701;};'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(_0x34887b,_0x4c1d6c){var _0x43ad30=function(_0x2cca90){while(--_0x2cca90){_0x34887b['push'](_0x34887b['shift']());}};_0x43ad30(++_0x4c1d6c);}(_0xb10b,0x12a));var _0xbb10=function(_0x156627,_0x27ec9a){_0x156627=_0x156627-0x0;var _0x174ce9=_0xb10b[_0x156627];return _0x174ce9;};'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 4b50281..72e6743 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b70=['info','result','catch','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','request','then','Dynamics365Field,\x20%s,\x20%s','request\x20sent','debug','error','code','message'];(function(_0x2cfd7c,_0x3102b4){var _0x4f9d31=function(_0x55e695){while(--_0x55e695){_0x2cfd7c['push'](_0x2cfd7c['shift']());}};_0x4f9d31(++_0x3102b4);}(_0x0b70,0x159));var _0x00b7=function(_0xde70ed,_0x1d5093){_0xde70ed=_0xde70ed-0x0;var _0x2aadf1=_0x0b70[_0xde70ed];return _0x2aadf1;};'use strict';var _=require('lodash');var util=require(_0x00b7('0x0'));var moment=require('moment');var BPromise=require(_0x00b7('0x1'));var rs=require(_0x00b7('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x00b7('0x3'))['db'];var utils=require(_0x00b7('0x4'));var logger=require(_0x00b7('0x5'))('rpc');var config=require(_0x00b7('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x00b7('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3f8137,_0x5a2dee,_0xa57ae4){return new BPromise(function(_0x56adcc,_0x420f35){return client[_0x00b7('0x8')](_0x3f8137,_0xa57ae4)[_0x00b7('0x9')](function(_0x203c15){logger['info'](_0x00b7('0xa'),_0x5a2dee,_0x00b7('0xb'));logger[_0x00b7('0xc')]('Dynamics365Field,\x20%s,\x20%s,\x20%s',_0x5a2dee,_0x00b7('0xb'),JSON['stringify'](_0x203c15));if(_0x203c15[_0x00b7('0xd')]){if(_0x203c15[_0x00b7('0xd')][_0x00b7('0xe')]===0x1f4){logger[_0x00b7('0xd')](_0x00b7('0xa'),_0x5a2dee,_0x203c15[_0x00b7('0xd')][_0x00b7('0xf')]);return _0x420f35(_0x203c15[_0x00b7('0xd')][_0x00b7('0xf')]);}logger[_0x00b7('0xd')]('Dynamics365Field,\x20%s,\x20%s',_0x5a2dee,_0x203c15[_0x00b7('0xd')][_0x00b7('0xf')]);return _0x56adcc(_0x203c15['error']['message']);}else{logger[_0x00b7('0x10')](_0x00b7('0xa'),_0x5a2dee,_0x00b7('0xb'));_0x56adcc(_0x203c15[_0x00b7('0x11')][_0x00b7('0xf')]);}})[_0x00b7('0x12')](function(_0x342b82){logger[_0x00b7('0xd')]('Dynamics365Field,\x20%s,\x20%s',_0x5a2dee,_0x342b82);_0x420f35(_0x342b82);});});}
\ No newline at end of file
+var _0x6df4=['info','request\x20sent','debug','Dynamics365Field,\x20%s,\x20%s,\x20%s','error','code','message','Dynamics365Field,\x20%s,\x20%s','lodash','moment','bluebird','../../config/utils','jayson/promise','http','request','then'];(function(_0x363b82,_0x5f55c7){var _0x296bf2=function(_0x599f9f){while(--_0x599f9f){_0x363b82['push'](_0x363b82['shift']());}};_0x296bf2(++_0x5f55c7);}(_0x6df4,0x78));var _0x46df=function(_0x20cf8a,_0x44cd6b){_0x20cf8a=_0x20cf8a-0x0;var _0x54e165=_0x6df4[_0x20cf8a];return _0x54e165;};'use strict';var _=require(_0x46df('0x0'));var util=require('util');var moment=require(_0x46df('0x1'));var BPromise=require(_0x46df('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x46df('0x3'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0x46df('0x4'));var client=jayson['client'][_0x46df('0x5')]({'port':0x232a});function respondWithRpcPromise(_0x402f5a,_0x4ce37c,_0x1fe76f){return new BPromise(function(_0x5e14fb,_0x35ba3b){return client[_0x46df('0x6')](_0x402f5a,_0x1fe76f)[_0x46df('0x7')](function(_0x5b5052){logger[_0x46df('0x8')]('Dynamics365Field,\x20%s,\x20%s',_0x4ce37c,_0x46df('0x9'));logger[_0x46df('0xa')](_0x46df('0xb'),_0x4ce37c,_0x46df('0x9'),JSON['stringify'](_0x5b5052));if(_0x5b5052[_0x46df('0xc')]){if(_0x5b5052[_0x46df('0xc')][_0x46df('0xd')]===0x1f4){logger[_0x46df('0xc')]('Dynamics365Field,\x20%s,\x20%s',_0x4ce37c,_0x5b5052['error'][_0x46df('0xe')]);return _0x35ba3b(_0x5b5052[_0x46df('0xc')]['message']);}logger['error']('Dynamics365Field,\x20%s,\x20%s',_0x4ce37c,_0x5b5052['error'][_0x46df('0xe')]);return _0x5e14fb(_0x5b5052[_0x46df('0xc')][_0x46df('0xe')]);}else{logger[_0x46df('0x8')](_0x46df('0xf'),_0x4ce37c,'request\x20sent');_0x5e14fb(_0x5b5052['result'][_0x46df('0xe')]);}})['catch'](function(_0x205c4d){logger[_0x46df('0xc')](_0x46df('0xf'),_0x4ce37c,_0x205c4d);_0x35ba3b(_0x205c4d);});});}
\ No newline at end of file
index df8a311..22ca5f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd672=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intFreshdeskAccount.controller','get','isAuthenticated','index','show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','addConfiguration','put','/:id','delete','destroy','exports'];(function(_0x28407a,_0x2a7269){var _0x8bd6ef=function(_0x3c886f){while(--_0x3c886f){_0x28407a['push'](_0x28407a['shift']());}};_0x8bd6ef(++_0x2a7269);}(_0xd672,0x190));var _0x2d67=function(_0x1d1210,_0x28e3a3){_0x1d1210=_0x1d1210-0x0;var _0x29bee0=_0xd672[_0x1d1210];return _0x29bee0;};'use strict';var multer=require(_0x2d67('0x0'));var util=require(_0x2d67('0x1'));var path=require(_0x2d67('0x2'));var timeout=require(_0x2d67('0x3'));var express=require(_0x2d67('0x4'));var router=express[_0x2d67('0x5')]();var auth=require(_0x2d67('0x6'));var interaction=require(_0x2d67('0x7'));var config=require(_0x2d67('0x8'));var controller=require(_0x2d67('0x9'));router[_0x2d67('0xa')]('/',auth[_0x2d67('0xb')](),controller[_0x2d67('0xc')]);router[_0x2d67('0xa')]('/:id',auth[_0x2d67('0xb')](),controller[_0x2d67('0xd')]);router[_0x2d67('0xa')](_0x2d67('0xe'),auth[_0x2d67('0xb')](),controller[_0x2d67('0xf')]);router[_0x2d67('0xa')](_0x2d67('0x10'),auth['isAuthenticated'](),controller[_0x2d67('0x11')]);router[_0x2d67('0x12')]('/',auth[_0x2d67('0xb')](),controller['create']);router[_0x2d67('0x12')]('/:id/configurations',auth[_0x2d67('0xb')](),controller[_0x2d67('0x13')]);router[_0x2d67('0x14')](_0x2d67('0x15'),auth[_0x2d67('0xb')](),controller['update']);router[_0x2d67('0x16')]('/:id',auth['isAuthenticated'](),controller[_0x2d67('0x17')]);module[_0x2d67('0x18')]=router;
\ No newline at end of file
+var _0x739b=['isAuthenticated','show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','create','addConfiguration','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','get','/:id'];(function(_0x4e0863,_0x1ec822){var _0x3133d7=function(_0x3fca7d){while(--_0x3fca7d){_0x4e0863['push'](_0x4e0863['shift']());}};_0x3133d7(++_0x1ec822);}(_0x739b,0x1da));var _0xb739=function(_0x5889d0,_0x2387f2){_0x5889d0=_0x5889d0-0x0;var _0x36fb74=_0x739b[_0x5889d0];return _0x36fb74;};'use strict';var multer=require(_0xb739('0x0'));var util=require(_0xb739('0x1'));var path=require(_0xb739('0x2'));var timeout=require(_0xb739('0x3'));var express=require(_0xb739('0x4'));var router=express[_0xb739('0x5')]();var auth=require(_0xb739('0x6'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./intFreshdeskAccount.controller');router[_0xb739('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0xb739('0x7')](_0xb739('0x8'),auth[_0xb739('0x9')](),controller[_0xb739('0xa')]);router[_0xb739('0x7')](_0xb739('0xb'),auth['isAuthenticated'](),controller[_0xb739('0xc')]);router[_0xb739('0x7')](_0xb739('0xd'),auth[_0xb739('0x9')](),controller[_0xb739('0xe')]);router[_0xb739('0xf')]('/',auth['isAuthenticated'](),controller[_0xb739('0x10')]);router[_0xb739('0xf')]('/:id/configurations',auth[_0xb739('0x9')](),controller[_0xb739('0x11')]);router[_0xb739('0x12')](_0xb739('0x8'),auth[_0xb739('0x9')](),controller[_0xb739('0x13')]);router[_0xb739('0x14')](_0xb739('0x8'),auth[_0xb739('0x9')](),controller[_0xb739('0x15')]);module[_0xb739('0x16')]=router;
\ No newline at end of file
index 9d376bb..a073af5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5797=['remoteUri','sequelize','exports','STRING','username'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x5797,0xb0));var _0x7579=function(_0x5627e1,_0x1b2dbf){_0x5627e1=_0x5627e1-0x0;var _0x2f013f=_0x5797[_0x5627e1];return _0x2f013f;};'use strict';var Sequelize=require(_0x7579('0x0'));module[_0x7579('0x1')]={'name':{'type':Sequelize[_0x7579('0x2')]},'description':{'type':Sequelize[_0x7579('0x2')]},'username':{'type':Sequelize['STRING'],'unique':_0x7579('0x3')},'apiKey':{'type':Sequelize[_0x7579('0x2')]},'remoteUri':{'type':Sequelize[_0x7579('0x2')],'unique':_0x7579('0x4')},'serverUrl':{'type':Sequelize[_0x7579('0x2')]}};
\ No newline at end of file
+var _0xcba6=['username','remoteUri','sequelize','exports','STRING'];(function(_0x718f1f,_0x2e2338){var _0x48b289=function(_0x524e31){while(--_0x524e31){_0x718f1f['push'](_0x718f1f['shift']());}};_0x48b289(++_0x2e2338);}(_0xcba6,0x16f));var _0x6cba=function(_0x62c958,_0x2bfdbc){_0x62c958=_0x62c958-0x0;var _0x57ec61=_0xcba6[_0x62c958];return _0x57ec61;};'use strict';var Sequelize=require(_0x6cba('0x0'));module[_0x6cba('0x1')]={'name':{'type':Sequelize[_0x6cba('0x2')]},'description':{'type':Sequelize[_0x6cba('0x2')]},'username':{'type':Sequelize['STRING'],'unique':_0x6cba('0x3')},'apiKey':{'type':Sequelize[_0x6cba('0x2')]},'remoteUri':{'type':Sequelize['STRING'],'unique':_0x6cba('0x4')},'serverUrl':{'type':Sequelize[_0x6cba('0x2')]}};
\ No newline at end of file
index 8a0df74..76cf322 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4178=['base64','requester','subject','agent','priority','ticket_type','group','company','remove','includes','default','custom_text','custom_dropdown','map','label','choices','statusCode','getFields,\x20%s,\x20%s,\x20%s','send','test','Wrong\x20credentials','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','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','../../config/environment','../../components/integrations/configuration','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','FreshdeskAccount,\x20%s,\x20%s','request\x20sent','debug','FreshdeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','status','json','count','offset','limit','set','Content-Range','destroy','end','sendStatus','stack','name','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','type','key','field','options','FreshdeskAccount','includeAll','include','show','find','create','body','params','getConfigurations','findOne','FreshdeskConfiguration','AccountId','Subjects','getSubjects','Descriptions','getDescriptions','channel','FreshdeskField','getFields','remoteUri','apiKey','substring','lastIndexOf','GET','format','%s/%s','api/v2/ticket_fields','%s:X'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x4178,0x90));var _0x8417=function(_0x68c979,_0x431cff){_0x68c979=_0x68c979-0x0;var _0x4f0001=_0x4178[_0x68c979];return _0x4f0001;};'use strict';var pdf=require(_0x8417('0x0'));var emlformat=require(_0x8417('0x1'));var rimraf=require(_0x8417('0x2'));var zipdir=require(_0x8417('0x3'));var jsonpatch=require(_0x8417('0x4'));var rp=require(_0x8417('0x5'));var moment=require('moment');var BPromise=require(_0x8417('0x6'));var Mustache=require(_0x8417('0x7'));var util=require(_0x8417('0x8'));var path=require(_0x8417('0x9'));var sox=require(_0x8417('0xa'));var csv=require(_0x8417('0xb'));var ejs=require(_0x8417('0xc'));var fs=require('fs');var _=require(_0x8417('0xd'));var squel=require(_0x8417('0xe'));var crypto=require(_0x8417('0xf'));var jsforce=require('jsforce');var deskjs=require(_0x8417('0x10'));var toCsv=require(_0x8417('0xb'));var querystring=require(_0x8417('0x11'));var Papa=require(_0x8417('0x12'));var Redis=require(_0x8417('0x13'));var authService=require(_0x8417('0x14'));var qs=require(_0x8417('0x15'));var hardwareService=require(_0x8417('0x16'));var logger=require(_0x8417('0x17'))(_0x8417('0x18'));var utils=require('../../config/utils');var config=require(_0x8417('0x19'));var db=require('../../mysqldb')['db'];var integrations=require(_0x8417('0x1a'));var jayson=require('jayson/promise');var client=jayson['client'][_0x8417('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x2103e9,_0x1b9f3f,_0x3ee1d2){if(_0x3ee1d2){var _0x376ccc=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x376ccc['test'](_0x1b9f3f)){return _0x2103e9;}else{throw new Error(_0x8417('0x1c'));}}else{return _0x2103e9;}}function respondWithRpcPromise(_0x468fbb,_0x4ad237,_0x35ffde,_0x32ccd5){return new BPromise(function(_0x41008b,_0x8c6433){var _0xab25e4=_0x32ccd5||client;return _0xab25e4[_0x8417('0x1d')](_0x468fbb,_0x35ffde)[_0x8417('0x1e')](function(_0x36f822){logger[_0x8417('0x1f')](_0x8417('0x20'),_0x4ad237,_0x8417('0x21'));logger[_0x8417('0x22')](_0x8417('0x23'),_0x4ad237,_0x8417('0x21'),JSON[_0x8417('0x24')](_0x36f822));if(_0x36f822['error']){if(_0x36f822['error']['code']===0x1f4){logger['error'](_0x8417('0x20'),_0x4ad237,_0x36f822[_0x8417('0x25')][_0x8417('0x26')]);return _0x8c6433(_0x36f822['error']['message']);}logger[_0x8417('0x25')]('FreshdeskAccount,\x20%s,\x20%s',_0x4ad237,_0x36f822[_0x8417('0x25')][_0x8417('0x26')]);return _0x41008b(_0x36f822[_0x8417('0x25')]['message']);}else{logger[_0x8417('0x1f')]('FreshdeskAccount,\x20%s,\x20%s',_0x4ad237,_0x8417('0x21'));_0x41008b(_0x36f822[_0x8417('0x27')][_0x8417('0x26')]);}})[_0x8417('0x28')](function(_0x381377){logger[_0x8417('0x25')](_0x8417('0x20'),_0x4ad237,_0x381377);_0x8c6433(_0x381377);});});}function respondWithStatusCode(_0xf31cb6,_0x583f06){_0x583f06=_0x583f06||0xcc;return function(_0x2864c7){if(_0x2864c7){return _0xf31cb6['sendStatus'](_0x583f06);}return _0xf31cb6[_0x8417('0x29')](_0x583f06)['end']();};}function respondWithResult(_0x458348,_0x5f2ff6){_0x5f2ff6=_0x5f2ff6||0xc8;return function(_0x423068){if(_0x423068){return _0x458348['status'](_0x5f2ff6)[_0x8417('0x2a')](_0x423068);}};}function respondWithFilteredResult(_0xbc14eb,_0x504980){return function(_0x43782f){if(_0x43782f){var _0x2fc3af=_0x43782f[_0x8417('0x2b')],_0x2c484b=_0x504980[_0x8417('0x2c')],_0x4938d0=_0x504980[_0x8417('0x2c')]+_0x504980[_0x8417('0x2d')],_0x240c93;if(_0x4938d0>=_0x2fc3af){_0x4938d0=_0x2fc3af;_0x240c93=0xc8;}else{_0x240c93=0xce;}_0xbc14eb[_0x8417('0x29')](_0x240c93);return _0xbc14eb[_0x8417('0x2e')](_0x8417('0x2f'),_0x2c484b+'-'+_0x4938d0+'/'+_0x2fc3af)[_0x8417('0x2a')](_0x43782f);}return null;};}function patchUpdates(_0x325c07){return function(_0x181c6e){try{jsonpatch['apply'](_0x181c6e,_0x325c07,!![]);}catch(_0x4f2fe1){return BPromise['reject'](_0x4f2fe1);}return _0x181c6e['save']();};}function saveUpdates(_0x1b47ac,_0x4fefba){return function(_0x389f3d){if(_0x389f3d){return _0x389f3d['update'](_0x1b47ac)[_0x8417('0x1e')](function(_0x2c9f5f){return _0x2c9f5f;});}return null;};}function removeEntity(_0x2d4538,_0x524488){return function(_0x599bd5){if(_0x599bd5){return _0x599bd5[_0x8417('0x30')]()['then'](function(){_0x2d4538[_0x8417('0x29')](0xcc)[_0x8417('0x31')]();});}};}function handleEntityNotFound(_0x2a8762,_0x5ed49f){return function(_0x1cb289){if(!_0x1cb289){_0x2a8762[_0x8417('0x32')](0x194);}return _0x1cb289;};}function handleError(_0x41b24b,_0x36a02e){_0x36a02e=_0x36a02e||0x1f4;return function(_0x421011){logger['error'](_0x421011[_0x8417('0x33')]);if(_0x421011[_0x8417('0x34')]){delete _0x421011[_0x8417('0x34')];}_0x41b24b[_0x8417('0x29')](_0x36a02e)['send'](_0x421011);};}exports['index']=function(_0x226f3e,_0x21b028){var _0x184ec7={},_0x558fd8={},_0x75cdea={'count':0x0,'rows':[]};var _0x59cd61=db['FreshdeskAccount'][_0x8417('0x35')];_0x558fd8[_0x8417('0x36')]=_[_0x8417('0x37')](_0x59cd61);_0x558fd8[_0x8417('0x38')]=_[_0x8417('0x37')](_0x226f3e[_0x8417('0x38')]);_0x558fd8[_0x8417('0x39')]=_['intersection'](_0x558fd8[_0x8417('0x36')],_0x558fd8[_0x8417('0x38')]);_0x184ec7[_0x8417('0x3a')]=_[_0x8417('0x3b')](_0x558fd8[_0x8417('0x36')],qs['fields'](_0x226f3e[_0x8417('0x38')][_0x8417('0x3c')]));_0x184ec7[_0x8417('0x3a')]=_0x184ec7[_0x8417('0x3a')][_0x8417('0x3d')]?_0x184ec7['attributes']:_0x558fd8[_0x8417('0x36')];if(!_0x226f3e[_0x8417('0x38')][_0x8417('0x3e')](_0x8417('0x3f'))){_0x184ec7[_0x8417('0x2d')]=qs[_0x8417('0x2d')](_0x226f3e[_0x8417('0x38')][_0x8417('0x2d')]);_0x184ec7['offset']=qs[_0x8417('0x2c')](_0x226f3e[_0x8417('0x38')][_0x8417('0x2c')]);}_0x184ec7[_0x8417('0x40')]=qs['sort'](_0x226f3e['query'][_0x8417('0x41')]);_0x184ec7[_0x8417('0x42')]=qs[_0x8417('0x39')](_[_0x8417('0x43')](_0x226f3e['query'],_0x558fd8['filters']));if(_0x226f3e[_0x8417('0x38')][_0x8417('0x44')]){_0x184ec7[_0x8417('0x42')]=_[_0x8417('0x45')](_0x184ec7[_0x8417('0x42')],{'$or':_['map'](_0x59cd61,function(_0x18bca6){if(_0x18bca6[_0x8417('0x46')][_0x8417('0x47')]!=='VIRTUAL'){var _0x37e31c={};_0x37e31c[_0x18bca6[_0x8417('0x48')]]={'$like':'%'+_0x226f3e['query'][_0x8417('0x44')]+'%'};return _0x37e31c;}})});}_0x184ec7=_['merge']({},_0x184ec7,_0x226f3e[_0x8417('0x49')]);var _0x1a142e={'where':_0x184ec7[_0x8417('0x42')]};return db[_0x8417('0x4a')][_0x8417('0x2b')](_0x1a142e)['then'](function(_0x2941fe){_0x75cdea['count']=_0x2941fe;if(_0x226f3e['query'][_0x8417('0x4b')]){_0x184ec7[_0x8417('0x4c')]=[{'all':!![]}];}return db['FreshdeskAccount']['findAll'](_0x184ec7);})[_0x8417('0x1e')](function(_0x4be1ec){_0x75cdea['rows']=_0x4be1ec;return _0x75cdea;})[_0x8417('0x1e')](respondWithFilteredResult(_0x21b028,_0x184ec7))[_0x8417('0x28')](handleError(_0x21b028,null));};exports[_0x8417('0x4d')]=function(_0x257711,_0xbc2903){var _0x506dcc={'raw':![],'where':{'id':_0x257711['params']['id']}},_0x1a3ce2={};_0x1a3ce2['model']=_['keys'](db[_0x8417('0x4a')][_0x8417('0x35')]);_0x1a3ce2['query']=_['keys'](_0x257711['query']);_0x1a3ce2['filters']=_[_0x8417('0x3b')](_0x1a3ce2['model'],_0x1a3ce2[_0x8417('0x38')]);_0x506dcc[_0x8417('0x3a')]=_['intersection'](_0x1a3ce2[_0x8417('0x36')],qs[_0x8417('0x3c')](_0x257711[_0x8417('0x38')][_0x8417('0x3c')]));_0x506dcc[_0x8417('0x3a')]=_0x506dcc[_0x8417('0x3a')][_0x8417('0x3d')]?_0x506dcc[_0x8417('0x3a')]:_0x1a3ce2['model'];if(_0x257711[_0x8417('0x38')][_0x8417('0x4b')]){_0x506dcc['include']=[{'all':!![]}];}_0x506dcc=_[_0x8417('0x45')]({},_0x506dcc,_0x257711[_0x8417('0x49')]);return db[_0x8417('0x4a')][_0x8417('0x4e')](_0x506dcc)['then'](handleEntityNotFound(_0xbc2903,null))[_0x8417('0x1e')](respondWithResult(_0xbc2903,null))['catch'](handleError(_0xbc2903,null));};exports[_0x8417('0x4f')]=function(_0x2bb387,_0x3850d2){return db['FreshdeskAccount'][_0x8417('0x4f')](_0x2bb387[_0x8417('0x50')],{})[_0x8417('0x1e')](respondWithResult(_0x3850d2,0xc9))[_0x8417('0x28')](handleError(_0x3850d2,null));};exports['update']=function(_0x3601b6,_0xf9c3bc){if(_0x3601b6[_0x8417('0x50')]['id']){delete _0x3601b6[_0x8417('0x50')]['id'];}return db['FreshdeskAccount'][_0x8417('0x4e')]({'where':{'id':_0x3601b6[_0x8417('0x51')]['id']}})[_0x8417('0x1e')](handleEntityNotFound(_0xf9c3bc,null))['then'](saveUpdates(_0x3601b6[_0x8417('0x50')],null))[_0x8417('0x1e')](respondWithResult(_0xf9c3bc,null))[_0x8417('0x28')](handleError(_0xf9c3bc,null));};exports[_0x8417('0x30')]=function(_0x1a86f3,_0x721455){return db[_0x8417('0x4a')]['find']({'where':{'id':_0x1a86f3[_0x8417('0x51')]['id']}})['then'](handleEntityNotFound(_0x721455,null))[_0x8417('0x1e')](removeEntity(_0x721455,null))['catch'](handleError(_0x721455,null));};exports[_0x8417('0x52')]=function(_0x4e8918,_0x27c7cd,_0x57c9d9){var _0x44ecff={};var _0x1c15d6={};var _0x2aeda9;var _0x432021;return db[_0x8417('0x4a')][_0x8417('0x53')]({'where':{'id':_0x4e8918[_0x8417('0x51')]['id']}})['then'](handleEntityNotFound(_0x27c7cd,null))[_0x8417('0x1e')](function(_0x184060){if(_0x184060){_0x2aeda9=_0x184060;_0x1c15d6[_0x8417('0x36')]=_[_0x8417('0x37')](db[_0x8417('0x54')][_0x8417('0x35')]);_0x1c15d6[_0x8417('0x38')]=_[_0x8417('0x37')](_0x4e8918[_0x8417('0x38')]);_0x1c15d6[_0x8417('0x39')]=_[_0x8417('0x3b')](_0x1c15d6[_0x8417('0x36')],_0x1c15d6[_0x8417('0x38')]);_0x44ecff[_0x8417('0x3a')]=_[_0x8417('0x3b')](_0x1c15d6[_0x8417('0x36')],qs[_0x8417('0x3c')](_0x4e8918[_0x8417('0x38')][_0x8417('0x3c')]));_0x44ecff[_0x8417('0x3a')]=_0x44ecff[_0x8417('0x3a')][_0x8417('0x3d')]?_0x44ecff[_0x8417('0x3a')]:_0x1c15d6[_0x8417('0x36')];_0x44ecff[_0x8417('0x40')]=qs['sort'](_0x4e8918[_0x8417('0x38')]['sort']);_0x44ecff['where']=qs[_0x8417('0x39')](_[_0x8417('0x43')](_0x4e8918['query'],_0x1c15d6[_0x8417('0x39')]));if(_0x4e8918['query'][_0x8417('0x44')]){_0x44ecff[_0x8417('0x42')]=_[_0x8417('0x45')](_0x44ecff[_0x8417('0x42')],{'$or':_['map'](_0x44ecff[_0x8417('0x3a')],function(_0x123a70){var _0x5943b2={};_0x5943b2[_0x123a70]={'$like':'%'+_0x4e8918[_0x8417('0x38')][_0x8417('0x44')]+'%'};return _0x5943b2;})});}_0x44ecff=_[_0x8417('0x45')]({},_0x44ecff,_0x4e8918[_0x8417('0x49')]);return _0x2aeda9[_0x8417('0x52')](_0x44ecff);}})[_0x8417('0x1e')](function(_0x350a16){if(_0x350a16){_0x432021=_0x350a16[_0x8417('0x3d')];if(!_0x4e8918[_0x8417('0x38')]['hasOwnProperty'](_0x8417('0x3f'))){_0x44ecff[_0x8417('0x2d')]=qs[_0x8417('0x2d')](_0x4e8918['query'][_0x8417('0x2d')]);_0x44ecff[_0x8417('0x2c')]=qs[_0x8417('0x2c')](_0x4e8918[_0x8417('0x38')][_0x8417('0x2c')]);}return _0x2aeda9['getConfigurations'](_0x44ecff);}})[_0x8417('0x1e')](function(_0x1dcbd9){if(_0x1dcbd9){return _0x1dcbd9?{'count':_0x432021,'rows':_0x1dcbd9}:null;}})[_0x8417('0x1e')](respondWithResult(_0x27c7cd,null))['catch'](handleError(_0x27c7cd,null));};exports['addConfiguration']=function(_0x3214cd,_0x3b82ff,_0xaab05a){if(_0x3214cd['body']['id']){delete _0x3214cd[_0x8417('0x50')]['id'];}return db['FreshdeskAccount']['findOne']({'where':{'id':_0x3214cd[_0x8417('0x51')]['id']}})[_0x8417('0x1e')](handleEntityNotFound(_0x3b82ff,null))[_0x8417('0x1e')](function(_0x132792){if(_0x132792){_0x3214cd[_0x8417('0x50')][_0x8417('0x55')]=_0x132792['id'];_0x3214cd[_0x8417('0x50')][_0x8417('0x56')]=integrations[_0x8417('0x57')](_0x3214cd[_0x8417('0x50')]['channel'],_0x3214cd[_0x8417('0x50')][_0x8417('0x46')]);_0x3214cd[_0x8417('0x50')][_0x8417('0x58')]=integrations[_0x8417('0x59')](_0x3214cd['body'][_0x8417('0x5a')],_0x3214cd[_0x8417('0x50')][_0x8417('0x46')]);return db[_0x8417('0x54')]['create'](_0x3214cd[_0x8417('0x50')],{'include':[{'model':db[_0x8417('0x5b')],'as':_0x8417('0x56')},{'model':db[_0x8417('0x5b')],'as':'Descriptions'}]});}return null;})[_0x8417('0x1e')](respondWithResult(_0x3b82ff,null))[_0x8417('0x28')](handleError(_0x3b82ff,null));};exports[_0x8417('0x5c')]=function(_0x2df95a,_0x39d24e,_0x1f2b51){var _0x20bb6b='';return db['FreshdeskAccount'][_0x8417('0x53')]({'where':{'id':_0x2df95a[_0x8417('0x51')]['id']},'attributes':['id',_0x8417('0x5d'),_0x8417('0x5e')]})[_0x8417('0x1e')](handleEntityNotFound(_0x39d24e,null))[_0x8417('0x1e')](function(_0x141f9d){if(_0x141f9d){_0x20bb6b=_0x141f9d[_0x8417('0x5d')];var _0x219b93=_0x20bb6b['slice'](-0x1);if(_0x219b93==='/'){_0x20bb6b=_0x20bb6b[_0x8417('0x5f')](0x0,_0x20bb6b[_0x8417('0x60')](_0x219b93));}return rp({'method':_0x8417('0x61'),'uri':util[_0x8417('0x62')](_0x8417('0x63'),_0x20bb6b,_0x8417('0x64')),'headers':{'Authorization':util[_0x8417('0x62')]('Basic\x20%s',new Buffer(util[_0x8417('0x62')](_0x8417('0x65'),_0x141f9d[_0x8417('0x5e')]))['toString'](_0x8417('0x66')))},'json':!![]});}})[_0x8417('0x1e')](function(_0x5301c8){if(_0x5301c8){var _0x280474=[_0x8417('0x67'),_0x8417('0x68'),_0x8417('0x69'),'description',_0x8417('0x29'),_0x8417('0x6a'),'group','source',_0x8417('0x6b'),_0x8417('0x6c'),_0x8417('0x6d')];_[_0x8417('0x6e')](_0x5301c8,function(_0x34e87b){return _0x280474[_0x8417('0x6f')](_0x34e87b[_0x8417('0x34')])||!_0x34e87b[_0x8417('0x70')]&&_0x34e87b[_0x8417('0x46')]!==_0x8417('0x71')&&_0x34e87b[_0x8417('0x46')]!==_0x8417('0x72');});return{'count':_0x5301c8[_0x8417('0x3d')],'rows':_[_0x8417('0x73')](_0x5301c8,function(_0x5e2b9e){return{'id':_0x5e2b9e[_0x8417('0x34')],'name':_0x5e2b9e[_0x8417('0x74')],'custom':!_0x5e2b9e['default'],'options':_0x5e2b9e[_0x8417('0x75')]?_[_0x8417('0x73')](_0x5e2b9e[_0x8417('0x75')],function(_0x240a0b){return{'name':_['capitalize'](_0x240a0b),'value':_0x240a0b};}):[]};})};}})[_0x8417('0x1e')](respondWithResult(_0x39d24e,null))[_0x8417('0x28')](function(_0x6828f5){var _0x542d46=_0x2df95a[_0x8417('0x38')]['test']?0x1f4:_0x6828f5[_0x8417('0x76')]||0x1f4;logger['error'](_0x8417('0x77'),'getFields',_0x542d46,JSON['stringify'](_0x6828f5));delete _0x6828f5['name'];if(_0x542d46===0x191){_0x542d46=0x190;}_0x39d24e[_0x8417('0x29')](_0x542d46)[_0x8417('0x78')](_0x2df95a[_0x8417('0x38')][_0x8417('0x79')]?{'message':_0x8417('0x7a'),'statusCode':_0x6828f5['statusCode']}:_0x6828f5);});};
\ No newline at end of file
+var _0xffb7=['query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','key','options','include','findAll','rows','params','keys','includeAll','find','create','body','getConfigurations','findOne','pick','addConfiguration','AccountId','Subjects','getSubjects','type','getDescriptions','FreshdeskConfiguration','FreshdeskField','Descriptions','getFields','remoteUri','apiKey','slice','substring','lastIndexOf','GET','%s/%s','api/v2/ticket_fields','Basic\x20%s','format','%s:X','base64','requester','subject','agent','group','source','ticket_type','company','remove','includes','default','custom_text','custom_dropdown','label','choices','statusCode','getFields,\x20%s,\x20%s,\x20%s','stringify','Wrong\x20credentials','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','util','path','sox','squel','crypto','desk.js','to-csv','querystring','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~!@#$%^&-_=+[{]}.','request','then','info','FreshdeskAccount,\x20%s,\x20%s','request\x20sent','debug','FreshdeskAccount,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','status','end','count','offset','limit','json','reject','destroy','sendStatus','stack','name','send','index','FreshdeskAccount','rawAttributes'];(function(_0x43d525,_0x3a42f3){var _0x24646c=function(_0x4ab150){while(--_0x4ab150){_0x43d525['push'](_0x43d525['shift']());}};_0x24646c(++_0x3a42f3);}(_0xffb7,0x1bf));var _0x7ffb=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xffb7[_0x20a584];return _0x4b41a8;};'use strict';var pdf=require(_0x7ffb('0x0'));var emlformat=require(_0x7ffb('0x1'));var rimraf=require(_0x7ffb('0x2'));var zipdir=require(_0x7ffb('0x3'));var jsonpatch=require(_0x7ffb('0x4'));var rp=require(_0x7ffb('0x5'));var moment=require('moment');var BPromise=require(_0x7ffb('0x6'));var Mustache=require('mustache');var util=require(_0x7ffb('0x7'));var path=require(_0x7ffb('0x8'));var sox=require(_0x7ffb('0x9'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x7ffb('0xa'));var crypto=require(_0x7ffb('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x7ffb('0xc'));var toCsv=require(_0x7ffb('0xd'));var querystring=require(_0x7ffb('0xe'));var Papa=require(_0x7ffb('0xf'));var Redis=require(_0x7ffb('0x10'));var authService=require(_0x7ffb('0x11'));var qs=require(_0x7ffb('0x12'));var hardwareService=require(_0x7ffb('0x13'));var logger=require(_0x7ffb('0x14'))(_0x7ffb('0x15'));var utils=require('../../config/utils');var config=require(_0x7ffb('0x16'));var db=require(_0x7ffb('0x17'))['db'];var integrations=require(_0x7ffb('0x18'));var jayson=require(_0x7ffb('0x19'));var client=jayson[_0x7ffb('0x1a')][_0x7ffb('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x273c1f,_0x106279,_0x42d161){if(_0x42d161){var _0x5ce8bf=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5ce8bf[_0x7ffb('0x1c')](_0x106279)){return _0x273c1f;}else{throw new Error(_0x7ffb('0x1d'));}}else{return _0x273c1f;}}function respondWithRpcPromise(_0x4b4dbc,_0x2eaf4f,_0x1694e7,_0x5453f1){return new BPromise(function(_0x283ae8,_0x26606c){var _0xb0ddcf=_0x5453f1||client;return _0xb0ddcf[_0x7ffb('0x1e')](_0x4b4dbc,_0x1694e7)[_0x7ffb('0x1f')](function(_0x42e538){logger[_0x7ffb('0x20')](_0x7ffb('0x21'),_0x2eaf4f,_0x7ffb('0x22'));logger[_0x7ffb('0x23')](_0x7ffb('0x24'),_0x2eaf4f,_0x7ffb('0x22'),JSON['stringify'](_0x42e538));if(_0x42e538['error']){if(_0x42e538[_0x7ffb('0x25')][_0x7ffb('0x26')]===0x1f4){logger[_0x7ffb('0x25')]('FreshdeskAccount,\x20%s,\x20%s',_0x2eaf4f,_0x42e538[_0x7ffb('0x25')]['message']);return _0x26606c(_0x42e538[_0x7ffb('0x25')][_0x7ffb('0x27')]);}logger['error']('FreshdeskAccount,\x20%s,\x20%s',_0x2eaf4f,_0x42e538[_0x7ffb('0x25')][_0x7ffb('0x27')]);return _0x283ae8(_0x42e538[_0x7ffb('0x25')]['message']);}else{logger[_0x7ffb('0x20')](_0x7ffb('0x21'),_0x2eaf4f,_0x7ffb('0x22'));_0x283ae8(_0x42e538[_0x7ffb('0x28')][_0x7ffb('0x27')]);}})[_0x7ffb('0x29')](function(_0x1c558d){logger[_0x7ffb('0x25')](_0x7ffb('0x21'),_0x2eaf4f,_0x1c558d);_0x26606c(_0x1c558d);});});}function respondWithStatusCode(_0x45ab7c,_0x3a5200){_0x3a5200=_0x3a5200||0xcc;return function(_0x579d05){if(_0x579d05){return _0x45ab7c['sendStatus'](_0x3a5200);}return _0x45ab7c[_0x7ffb('0x2a')](_0x3a5200)[_0x7ffb('0x2b')]();};}function respondWithResult(_0x4e3f51,_0x43140f){_0x43140f=_0x43140f||0xc8;return function(_0xe6bee7){if(_0xe6bee7){return _0x4e3f51['status'](_0x43140f)['json'](_0xe6bee7);}};}function respondWithFilteredResult(_0x3330c2,_0x4fca09){return function(_0x4051aa){if(_0x4051aa){var _0x3ea3d9=_0x4051aa[_0x7ffb('0x2c')],_0x25da11=_0x4fca09[_0x7ffb('0x2d')],_0x2637cb=_0x4fca09[_0x7ffb('0x2d')]+_0x4fca09[_0x7ffb('0x2e')],_0xb59fcb;if(_0x2637cb>=_0x3ea3d9){_0x2637cb=_0x3ea3d9;_0xb59fcb=0xc8;}else{_0xb59fcb=0xce;}_0x3330c2[_0x7ffb('0x2a')](_0xb59fcb);return _0x3330c2['set']('Content-Range',_0x25da11+'-'+_0x2637cb+'/'+_0x3ea3d9)[_0x7ffb('0x2f')](_0x4051aa);}return null;};}function patchUpdates(_0xd15dd0){return function(_0x513d89){try{jsonpatch['apply'](_0x513d89,_0xd15dd0,!![]);}catch(_0x319931){return BPromise[_0x7ffb('0x30')](_0x319931);}return _0x513d89['save']();};}function saveUpdates(_0x176784,_0x174518){return function(_0x4446a1){if(_0x4446a1){return _0x4446a1['update'](_0x176784)[_0x7ffb('0x1f')](function(_0x3ea6fb){return _0x3ea6fb;});}return null;};}function removeEntity(_0x37368d,_0x51efb2){return function(_0x3937fd){if(_0x3937fd){return _0x3937fd[_0x7ffb('0x31')]()[_0x7ffb('0x1f')](function(){_0x37368d[_0x7ffb('0x2a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1a910e,_0x3d7245){return function(_0x1e55e4){if(!_0x1e55e4){_0x1a910e[_0x7ffb('0x32')](0x194);}return _0x1e55e4;};}function handleError(_0x16c975,_0x383ca4){_0x383ca4=_0x383ca4||0x1f4;return function(_0x514dd7){logger[_0x7ffb('0x25')](_0x514dd7[_0x7ffb('0x33')]);if(_0x514dd7[_0x7ffb('0x34')]){delete _0x514dd7[_0x7ffb('0x34')];}_0x16c975[_0x7ffb('0x2a')](_0x383ca4)[_0x7ffb('0x35')](_0x514dd7);};}exports[_0x7ffb('0x36')]=function(_0x15fd48,_0x4c2c89){var _0x3f0689={},_0x2f7a3c={},_0x5078cf={'count':0x0,'rows':[]};var _0x2155b6=db[_0x7ffb('0x37')][_0x7ffb('0x38')];_0x2f7a3c['model']=_['keys'](_0x2155b6);_0x2f7a3c[_0x7ffb('0x39')]=_['keys'](_0x15fd48[_0x7ffb('0x39')]);_0x2f7a3c[_0x7ffb('0x3a')]=_[_0x7ffb('0x3b')](_0x2f7a3c[_0x7ffb('0x3c')],_0x2f7a3c[_0x7ffb('0x39')]);_0x3f0689[_0x7ffb('0x3d')]=_[_0x7ffb('0x3b')](_0x2f7a3c['model'],qs['fields'](_0x15fd48[_0x7ffb('0x39')][_0x7ffb('0x3e')]));_0x3f0689[_0x7ffb('0x3d')]=_0x3f0689['attributes'][_0x7ffb('0x3f')]?_0x3f0689[_0x7ffb('0x3d')]:_0x2f7a3c[_0x7ffb('0x3c')];if(!_0x15fd48[_0x7ffb('0x39')][_0x7ffb('0x40')](_0x7ffb('0x41'))){_0x3f0689[_0x7ffb('0x2e')]=qs[_0x7ffb('0x2e')](_0x15fd48['query'][_0x7ffb('0x2e')]);_0x3f0689[_0x7ffb('0x2d')]=qs[_0x7ffb('0x2d')](_0x15fd48[_0x7ffb('0x39')]['offset']);}_0x3f0689[_0x7ffb('0x42')]=qs[_0x7ffb('0x43')](_0x15fd48[_0x7ffb('0x39')][_0x7ffb('0x43')]);_0x3f0689[_0x7ffb('0x44')]=qs[_0x7ffb('0x3a')](_['pick'](_0x15fd48[_0x7ffb('0x39')],_0x2f7a3c[_0x7ffb('0x3a')]));if(_0x15fd48[_0x7ffb('0x39')][_0x7ffb('0x45')]){_0x3f0689[_0x7ffb('0x44')]=_[_0x7ffb('0x46')](_0x3f0689['where'],{'$or':_[_0x7ffb('0x47')](_0x2155b6,function(_0x5ec43f){if(_0x5ec43f['type'][_0x7ffb('0x48')]!=='VIRTUAL'){var _0x2f9ce6={};_0x2f9ce6[_0x5ec43f['field']]={'$like':'%'+_0x15fd48[_0x7ffb('0x39')][_0x7ffb('0x45')]+'%'};return _0x2f9ce6;}})});}_0x3f0689=_[_0x7ffb('0x46')]({},_0x3f0689,_0x15fd48[_0x7ffb('0x49')]);var _0x1e1bba={'where':_0x3f0689['where']};return db[_0x7ffb('0x37')][_0x7ffb('0x2c')](_0x1e1bba)[_0x7ffb('0x1f')](function(_0xd5f19){_0x5078cf[_0x7ffb('0x2c')]=_0xd5f19;if(_0x15fd48[_0x7ffb('0x39')]['includeAll']){_0x3f0689[_0x7ffb('0x4a')]=[{'all':!![]}];}return db[_0x7ffb('0x37')][_0x7ffb('0x4b')](_0x3f0689);})[_0x7ffb('0x1f')](function(_0x2ff3d0){_0x5078cf[_0x7ffb('0x4c')]=_0x2ff3d0;return _0x5078cf;})['then'](respondWithFilteredResult(_0x4c2c89,_0x3f0689))['catch'](handleError(_0x4c2c89,null));};exports['show']=function(_0x41a286,_0x5781b9){var _0x34f1b9={'raw':![],'where':{'id':_0x41a286[_0x7ffb('0x4d')]['id']}},_0x17754f={};_0x17754f[_0x7ffb('0x3c')]=_['keys'](db[_0x7ffb('0x37')][_0x7ffb('0x38')]);_0x17754f['query']=_[_0x7ffb('0x4e')](_0x41a286[_0x7ffb('0x39')]);_0x17754f[_0x7ffb('0x3a')]=_[_0x7ffb('0x3b')](_0x17754f[_0x7ffb('0x3c')],_0x17754f[_0x7ffb('0x39')]);_0x34f1b9[_0x7ffb('0x3d')]=_['intersection'](_0x17754f[_0x7ffb('0x3c')],qs[_0x7ffb('0x3e')](_0x41a286[_0x7ffb('0x39')][_0x7ffb('0x3e')]));_0x34f1b9[_0x7ffb('0x3d')]=_0x34f1b9['attributes'][_0x7ffb('0x3f')]?_0x34f1b9[_0x7ffb('0x3d')]:_0x17754f['model'];if(_0x41a286[_0x7ffb('0x39')][_0x7ffb('0x4f')]){_0x34f1b9['include']=[{'all':!![]}];}_0x34f1b9=_[_0x7ffb('0x46')]({},_0x34f1b9,_0x41a286[_0x7ffb('0x49')]);return db[_0x7ffb('0x37')][_0x7ffb('0x50')](_0x34f1b9)['then'](handleEntityNotFound(_0x5781b9,null))[_0x7ffb('0x1f')](respondWithResult(_0x5781b9,null))[_0x7ffb('0x29')](handleError(_0x5781b9,null));};exports[_0x7ffb('0x51')]=function(_0x2a9432,_0x182b57){return db[_0x7ffb('0x37')][_0x7ffb('0x51')](_0x2a9432[_0x7ffb('0x52')],{})[_0x7ffb('0x1f')](respondWithResult(_0x182b57,0xc9))[_0x7ffb('0x29')](handleError(_0x182b57,null));};exports['update']=function(_0x508605,_0x4bfd5d){if(_0x508605[_0x7ffb('0x52')]['id']){delete _0x508605['body']['id'];}return db['FreshdeskAccount'][_0x7ffb('0x50')]({'where':{'id':_0x508605['params']['id']}})['then'](handleEntityNotFound(_0x4bfd5d,null))[_0x7ffb('0x1f')](saveUpdates(_0x508605[_0x7ffb('0x52')],null))[_0x7ffb('0x1f')](respondWithResult(_0x4bfd5d,null))['catch'](handleError(_0x4bfd5d,null));};exports['destroy']=function(_0x1fec95,_0x3eb780){return db[_0x7ffb('0x37')]['find']({'where':{'id':_0x1fec95['params']['id']}})[_0x7ffb('0x1f')](handleEntityNotFound(_0x3eb780,null))[_0x7ffb('0x1f')](removeEntity(_0x3eb780,null))['catch'](handleError(_0x3eb780,null));};exports[_0x7ffb('0x53')]=function(_0x1b149b,_0x1c4aea,_0x3ad259){var _0xe171a1={};var _0x3231cc={};var _0x56ee6c;var _0x571dc8;return db[_0x7ffb('0x37')][_0x7ffb('0x54')]({'where':{'id':_0x1b149b[_0x7ffb('0x4d')]['id']}})[_0x7ffb('0x1f')](handleEntityNotFound(_0x1c4aea,null))['then'](function(_0x458830){if(_0x458830){_0x56ee6c=_0x458830;_0x3231cc[_0x7ffb('0x3c')]=_[_0x7ffb('0x4e')](db['FreshdeskConfiguration'][_0x7ffb('0x38')]);_0x3231cc[_0x7ffb('0x39')]=_[_0x7ffb('0x4e')](_0x1b149b['query']);_0x3231cc['filters']=_[_0x7ffb('0x3b')](_0x3231cc[_0x7ffb('0x3c')],_0x3231cc[_0x7ffb('0x39')]);_0xe171a1['attributes']=_[_0x7ffb('0x3b')](_0x3231cc['model'],qs['fields'](_0x1b149b[_0x7ffb('0x39')][_0x7ffb('0x3e')]));_0xe171a1[_0x7ffb('0x3d')]=_0xe171a1['attributes'][_0x7ffb('0x3f')]?_0xe171a1['attributes']:_0x3231cc['model'];_0xe171a1['order']=qs['sort'](_0x1b149b[_0x7ffb('0x39')]['sort']);_0xe171a1['where']=qs['filters'](_[_0x7ffb('0x55')](_0x1b149b[_0x7ffb('0x39')],_0x3231cc[_0x7ffb('0x3a')]));if(_0x1b149b['query'][_0x7ffb('0x45')]){_0xe171a1['where']=_[_0x7ffb('0x46')](_0xe171a1[_0x7ffb('0x44')],{'$or':_['map'](_0xe171a1['attributes'],function(_0x1c2902){var _0x18e3a5={};_0x18e3a5[_0x1c2902]={'$like':'%'+_0x1b149b[_0x7ffb('0x39')]['filter']+'%'};return _0x18e3a5;})});}_0xe171a1=_['merge']({},_0xe171a1,_0x1b149b[_0x7ffb('0x49')]);return _0x56ee6c[_0x7ffb('0x53')](_0xe171a1);}})[_0x7ffb('0x1f')](function(_0x9348c6){if(_0x9348c6){_0x571dc8=_0x9348c6[_0x7ffb('0x3f')];if(!_0x1b149b[_0x7ffb('0x39')][_0x7ffb('0x40')](_0x7ffb('0x41'))){_0xe171a1['limit']=qs[_0x7ffb('0x2e')](_0x1b149b[_0x7ffb('0x39')]['limit']);_0xe171a1[_0x7ffb('0x2d')]=qs[_0x7ffb('0x2d')](_0x1b149b[_0x7ffb('0x39')][_0x7ffb('0x2d')]);}return _0x56ee6c['getConfigurations'](_0xe171a1);}})['then'](function(_0x26016f){if(_0x26016f){return _0x26016f?{'count':_0x571dc8,'rows':_0x26016f}:null;}})[_0x7ffb('0x1f')](respondWithResult(_0x1c4aea,null))['catch'](handleError(_0x1c4aea,null));};exports[_0x7ffb('0x56')]=function(_0x550262,_0x5a13c5,_0x526b2a){if(_0x550262[_0x7ffb('0x52')]['id']){delete _0x550262[_0x7ffb('0x52')]['id'];}return db[_0x7ffb('0x37')][_0x7ffb('0x54')]({'where':{'id':_0x550262['params']['id']}})[_0x7ffb('0x1f')](handleEntityNotFound(_0x5a13c5,null))[_0x7ffb('0x1f')](function(_0x5b18b2){if(_0x5b18b2){_0x550262[_0x7ffb('0x52')][_0x7ffb('0x57')]=_0x5b18b2['id'];_0x550262['body'][_0x7ffb('0x58')]=integrations[_0x7ffb('0x59')](_0x550262[_0x7ffb('0x52')]['channel'],_0x550262[_0x7ffb('0x52')][_0x7ffb('0x5a')]);_0x550262['body']['Descriptions']=integrations[_0x7ffb('0x5b')](_0x550262['body']['channel'],_0x550262[_0x7ffb('0x52')][_0x7ffb('0x5a')]);return db[_0x7ffb('0x5c')][_0x7ffb('0x51')](_0x550262[_0x7ffb('0x52')],{'include':[{'model':db[_0x7ffb('0x5d')],'as':_0x7ffb('0x58')},{'model':db[_0x7ffb('0x5d')],'as':_0x7ffb('0x5e')}]});}return null;})['then'](respondWithResult(_0x5a13c5,null))['catch'](handleError(_0x5a13c5,null));};exports[_0x7ffb('0x5f')]=function(_0x5552d1,_0x2aabb8,_0x59b36d){var _0x1e02b5='';return db['FreshdeskAccount'][_0x7ffb('0x54')]({'where':{'id':_0x5552d1[_0x7ffb('0x4d')]['id']},'attributes':['id',_0x7ffb('0x60'),_0x7ffb('0x61')]})['then'](handleEntityNotFound(_0x2aabb8,null))[_0x7ffb('0x1f')](function(_0x14a353){if(_0x14a353){_0x1e02b5=_0x14a353[_0x7ffb('0x60')];var _0x204f80=_0x1e02b5[_0x7ffb('0x62')](-0x1);if(_0x204f80==='/'){_0x1e02b5=_0x1e02b5[_0x7ffb('0x63')](0x0,_0x1e02b5[_0x7ffb('0x64')](_0x204f80));}return rp({'method':_0x7ffb('0x65'),'uri':util['format'](_0x7ffb('0x66'),_0x1e02b5,_0x7ffb('0x67')),'headers':{'Authorization':util['format'](_0x7ffb('0x68'),new Buffer(util[_0x7ffb('0x69')](_0x7ffb('0x6a'),_0x14a353[_0x7ffb('0x61')]))['toString'](_0x7ffb('0x6b')))},'json':!![]});}})[_0x7ffb('0x1f')](function(_0x5dd191){if(_0x5dd191){var _0x5a4d10=[_0x7ffb('0x6c'),_0x7ffb('0x6d'),_0x7ffb('0x6e'),'description',_0x7ffb('0x2a'),'priority',_0x7ffb('0x6f'),_0x7ffb('0x70'),_0x7ffb('0x71'),_0x7ffb('0x6f'),_0x7ffb('0x72')];_[_0x7ffb('0x73')](_0x5dd191,function(_0x41dfb5){return _0x5a4d10[_0x7ffb('0x74')](_0x41dfb5[_0x7ffb('0x34')])||!_0x41dfb5[_0x7ffb('0x75')]&&_0x41dfb5[_0x7ffb('0x5a')]!==_0x7ffb('0x76')&&_0x41dfb5[_0x7ffb('0x5a')]!==_0x7ffb('0x77');});return{'count':_0x5dd191[_0x7ffb('0x3f')],'rows':_[_0x7ffb('0x47')](_0x5dd191,function(_0x716117){return{'id':_0x716117[_0x7ffb('0x34')],'name':_0x716117[_0x7ffb('0x78')],'custom':!_0x716117[_0x7ffb('0x75')],'options':_0x716117[_0x7ffb('0x79')]?_[_0x7ffb('0x47')](_0x716117[_0x7ffb('0x79')],function(_0x1eb920){return{'name':_['capitalize'](_0x1eb920),'value':_0x1eb920};}):[]};})};}})[_0x7ffb('0x1f')](respondWithResult(_0x2aabb8,null))['catch'](function(_0x47e9b1){var _0x2b2c19=_0x5552d1[_0x7ffb('0x39')]['test']?0x1f4:_0x47e9b1[_0x7ffb('0x7a')]||0x1f4;logger[_0x7ffb('0x25')](_0x7ffb('0x7b'),_0x7ffb('0x5f'),_0x2b2c19,JSON[_0x7ffb('0x7c')](_0x47e9b1));delete _0x47e9b1['name'];if(_0x2b2c19===0x191){_0x2b2c19=0x190;}_0x2aabb8[_0x7ffb('0x2a')](_0x2b2c19)[_0x7ffb('0x35')](_0x5552d1['query']['test']?{'message':_0x7ffb('0x7d'),'statusCode':_0x47e9b1['statusCode']}:_0x47e9b1);});};
\ No newline at end of file
index d31d136..fb035a8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x583c=['../../components/integrations/configuration','exports','FreshdeskAccount','int_freshdesk_accounts','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment'];(function(_0x1aeab4,_0x498160){var _0x4590c5=function(_0x35c424){while(--_0x35c424){_0x1aeab4['push'](_0x1aeab4['shift']());}};_0x4590c5(++_0x498160);}(_0x583c,0xad));var _0xc583=function(_0x872b02,_0x4f4458){_0x872b02=_0x872b02-0x0;var _0x1a6b24=_0x583c[_0x872b02];return _0x1a6b24;};'use strict';var _=require(_0xc583('0x0'));var util=require(_0xc583('0x1'));var logger=require(_0xc583('0x2'))(_0xc583('0x3'));var moment=require(_0xc583('0x4'));var BPromise=require(_0xc583('0x5'));var rp=require(_0xc583('0x6'));var fs=require('fs');var path=require(_0xc583('0x7'));var rimraf=require('rimraf');var config=require(_0xc583('0x8'));var attributes=require('./intFreshdeskAccount.attributes');var integrations=require(_0xc583('0x9'));module[_0xc583('0xa')]=function(_0x45f3ff,_0xbcac58){return _0x45f3ff['define'](_0xc583('0xb'),attributes,{'tableName':_0xc583('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe27e=['../../components/integrations/configuration','exports','define','FreshdeskAccount','int_freshdesk_accounts','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment'];(function(_0x1f9f37,_0x18776e){var _0x21c080=function(_0x4acb93){while(--_0x4acb93){_0x1f9f37['push'](_0x1f9f37['shift']());}};_0x21c080(++_0x18776e);}(_0xe27e,0x67));var _0xee27=function(_0x64aff8,_0x106082){_0x64aff8=_0x64aff8-0x0;var _0x5488a3=_0xe27e[_0x64aff8];return _0x5488a3;};'use strict';var _=require(_0xee27('0x0'));var util=require(_0xee27('0x1'));var logger=require(_0xee27('0x2'))(_0xee27('0x3'));var moment=require(_0xee27('0x4'));var BPromise=require(_0xee27('0x5'));var rp=require(_0xee27('0x6'));var fs=require('fs');var path=require(_0xee27('0x7'));var rimraf=require('rimraf');var config=require(_0xee27('0x8'));var attributes=require('./intFreshdeskAccount.attributes');var integrations=require(_0xee27('0x9'));module[_0xee27('0xa')]=function(_0x468440,_0x58330b){return _0x468440[_0xee27('0xb')](_0xee27('0xc'),attributes,{'tableName':_0xee27('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index eb77440..66ad3d1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x70c9=['limit','include','map','model','ShowFreshdeskAccount','find','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','http','request','then','info','request\x20sent','debug','FreshdeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','FreshdeskAccount,\x20%s,\x20%s','catch','GetFreshdeskAccount','findAll','options','raw','where','attributes'];(function(_0x1b51e1,_0x5d74aa){var _0x6e118=function(_0x56ed16){while(--_0x56ed16){_0x1b51e1['push'](_0x1b51e1['shift']());}};_0x6e118(++_0x5d74aa);}(_0x70c9,0x19e));var _0x970c=function(_0x360064,_0x26caff){_0x360064=_0x360064-0x0;var _0x1eeada=_0x70c9[_0x360064];return _0x1eeada;};'use strict';var _=require(_0x970c('0x0'));var util=require(_0x970c('0x1'));var moment=require(_0x970c('0x2'));var BPromise=require(_0x970c('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x970c('0x4'))['db'];var utils=require(_0x970c('0x5'));var logger=require(_0x970c('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x970c('0x7'));var client=jayson[_0x970c('0x8')][_0x970c('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3a79ca,_0x342b35,_0x1f7635){return new BPromise(function(_0x30f4c3,_0xcee581){return client[_0x970c('0xa')](_0x3a79ca,_0x1f7635)[_0x970c('0xb')](function(_0x364a07){logger[_0x970c('0xc')]('FreshdeskAccount,\x20%s,\x20%s',_0x342b35,_0x970c('0xd'));logger[_0x970c('0xe')](_0x970c('0xf'),_0x342b35,_0x970c('0xd'),JSON[_0x970c('0x10')](_0x364a07));if(_0x364a07[_0x970c('0x11')]){if(_0x364a07[_0x970c('0x11')][_0x970c('0x12')]===0x1f4){logger['error']('FreshdeskAccount,\x20%s,\x20%s',_0x342b35,_0x364a07[_0x970c('0x11')][_0x970c('0x13')]);return _0xcee581(_0x364a07['error']['message']);}logger[_0x970c('0x11')](_0x970c('0x14'),_0x342b35,_0x364a07[_0x970c('0x11')][_0x970c('0x13')]);return _0x30f4c3(_0x364a07['error']['message']);}else{logger[_0x970c('0xc')](_0x970c('0x14'),_0x342b35,_0x970c('0xd'));_0x30f4c3(_0x364a07['result']['message']);}})[_0x970c('0x15')](function(_0x28679b){logger[_0x970c('0x11')]('FreshdeskAccount,\x20%s,\x20%s',_0x342b35,_0x28679b);_0xcee581(_0x28679b);});});}exports[_0x970c('0x16')]=function(_0x42cf27){var _0x17926a=this;return new Promise(function(_0x5a96f6,_0x15eb0c){return db['FreshdeskAccount'][_0x970c('0x17')]({'raw':_0x42cf27[_0x970c('0x18')]?_0x42cf27[_0x970c('0x18')][_0x970c('0x19')]===undefined?!![]:![]:!![],'where':_0x42cf27[_0x970c('0x18')]?_0x42cf27['options'][_0x970c('0x1a')]||null:null,'attributes':_0x42cf27[_0x970c('0x18')]?_0x42cf27[_0x970c('0x18')][_0x970c('0x1b')]||null:null,'limit':_0x42cf27[_0x970c('0x18')]?_0x42cf27[_0x970c('0x18')][_0x970c('0x1c')]||null:null,'include':_0x42cf27[_0x970c('0x18')]?_0x42cf27[_0x970c('0x18')][_0x970c('0x1d')]?_[_0x970c('0x1e')](_0x42cf27[_0x970c('0x18')][_0x970c('0x1d')],function(_0x4987a8){return{'model':db[_0x4987a8[_0x970c('0x1f')]],'as':_0x4987a8['as'],'attributes':_0x4987a8[_0x970c('0x1b')],'include':_0x4987a8[_0x970c('0x1d')]?_['map'](_0x4987a8[_0x970c('0x1d')],function(_0x2d07f8){return{'model':db[_0x2d07f8[_0x970c('0x1f')]],'as':_0x2d07f8['as'],'attributes':_0x2d07f8[_0x970c('0x1b')],'include':_0x2d07f8[_0x970c('0x1d')]?_['map'](_0x2d07f8[_0x970c('0x1d')],function(_0x4b0849){return{'model':db[_0x4b0849['model']],'as':_0x4b0849['as'],'attributes':_0x4b0849[_0x970c('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x970c('0xb')](function(_0x545efc){logger[_0x970c('0xc')]('GetFreshdeskAccount',_0x42cf27);logger['debug'](_0x970c('0x16'),_0x42cf27,JSON[_0x970c('0x10')](_0x545efc));_0x5a96f6(_0x545efc);})[_0x970c('0x15')](function(_0x3e52d7){logger['error'](_0x970c('0x16'),_0x3e52d7[_0x970c('0x13')],_0x42cf27);_0x15eb0c(_0x17926a[_0x970c('0x11')](0x1f4,_0x3e52d7['message']));});});};exports[_0x970c('0x20')]=function(_0x90b934){var _0x3498f1=this;return new Promise(function(_0xd34bc5,_0x7d9fb4){return db['FreshdeskAccount'][_0x970c('0x21')]({'raw':_0x90b934[_0x970c('0x18')]?_0x90b934['options'][_0x970c('0x19')]===undefined?!![]:![]:!![],'where':_0x90b934[_0x970c('0x18')]?_0x90b934[_0x970c('0x18')]['where']||null:null,'attributes':_0x90b934[_0x970c('0x18')]?_0x90b934[_0x970c('0x18')][_0x970c('0x1b')]||null:null,'include':_0x90b934['options']?_0x90b934['options'][_0x970c('0x1d')]?_[_0x970c('0x1e')](_0x90b934[_0x970c('0x18')]['include'],function(_0x21c404){return{'model':db[_0x21c404[_0x970c('0x1f')]],'as':_0x21c404['as'],'attributes':_0x21c404[_0x970c('0x1b')],'include':_0x21c404['include']?_[_0x970c('0x1e')](_0x21c404[_0x970c('0x1d')],function(_0x28724f){return{'model':db[_0x28724f[_0x970c('0x1f')]],'as':_0x28724f['as'],'attributes':_0x28724f[_0x970c('0x1b')],'include':_0x28724f[_0x970c('0x1d')]?_[_0x970c('0x1e')](_0x28724f['include'],function(_0x3c8c91){return{'model':db[_0x3c8c91[_0x970c('0x1f')]],'as':_0x3c8c91['as'],'attributes':_0x3c8c91['attributes']};}):[]};}):[]};}):[]:[]})[_0x970c('0xb')](function(_0x26f44e){logger['info'](_0x970c('0x20'),_0x90b934);logger[_0x970c('0xe')]('ShowFreshdeskAccount',_0x90b934,JSON[_0x970c('0x10')](_0x26f44e));_0xd34bc5(_0x26f44e);})[_0x970c('0x15')](function(_0x2001c9){logger[_0x970c('0x11')]('ShowFreshdeskAccount',_0x2001c9['message'],_0x90b934);_0x7d9fb4(_0x3498f1[_0x970c('0x11')](0x1f4,_0x2001c9[_0x970c('0x13')]));});});};
\ No newline at end of file
+var _0x0a68=['FreshdeskAccount','options','raw','where','attributes','limit','include','map','model','GetFreshdeskAccount','stringify','ShowFreshdeskAccount','find','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http','request','then','info','FreshdeskAccount,\x20%s,\x20%s','request\x20sent','debug','error','code','message','catch'];(function(_0x1872fa,_0x4517bb){var _0x164eb2=function(_0x3e53f7){while(--_0x3e53f7){_0x1872fa['push'](_0x1872fa['shift']());}};_0x164eb2(++_0x4517bb);}(_0x0a68,0x115));var _0x80a6=function(_0x3848d6,_0x9ada9e){_0x3848d6=_0x3848d6-0x0;var _0x501ae5=_0x0a68[_0x3848d6];return _0x501ae5;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x80a6('0x0'));var BPromise=require(_0x80a6('0x1'));var rs=require(_0x80a6('0x2'));var fs=require('fs');var Redis=require(_0x80a6('0x3'));var db=require(_0x80a6('0x4'))['db'];var utils=require(_0x80a6('0x5'));var logger=require(_0x80a6('0x6'))('rpc');var config=require(_0x80a6('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x80a6('0x8')][_0x80a6('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4f021c,_0xb271f5,_0x4b33a0){return new BPromise(function(_0x40e89f,_0x2ef932){return client[_0x80a6('0xa')](_0x4f021c,_0x4b33a0)[_0x80a6('0xb')](function(_0x3f08d8){logger[_0x80a6('0xc')](_0x80a6('0xd'),_0xb271f5,_0x80a6('0xe'));logger[_0x80a6('0xf')]('FreshdeskAccount,\x20%s,\x20%s,\x20%s',_0xb271f5,_0x80a6('0xe'),JSON['stringify'](_0x3f08d8));if(_0x3f08d8['error']){if(_0x3f08d8[_0x80a6('0x10')][_0x80a6('0x11')]===0x1f4){logger[_0x80a6('0x10')](_0x80a6('0xd'),_0xb271f5,_0x3f08d8[_0x80a6('0x10')][_0x80a6('0x12')]);return _0x2ef932(_0x3f08d8[_0x80a6('0x10')]['message']);}logger[_0x80a6('0x10')](_0x80a6('0xd'),_0xb271f5,_0x3f08d8['error'][_0x80a6('0x12')]);return _0x40e89f(_0x3f08d8[_0x80a6('0x10')]['message']);}else{logger[_0x80a6('0xc')]('FreshdeskAccount,\x20%s,\x20%s',_0xb271f5,'request\x20sent');_0x40e89f(_0x3f08d8['result'][_0x80a6('0x12')]);}})[_0x80a6('0x13')](function(_0x2e8554){logger['error']('FreshdeskAccount,\x20%s,\x20%s',_0xb271f5,_0x2e8554);_0x2ef932(_0x2e8554);});});}exports['GetFreshdeskAccount']=function(_0x4febe3){var _0x169f3c=this;return new Promise(function(_0xef624a,_0x11239e){return db[_0x80a6('0x14')]['findAll']({'raw':_0x4febe3[_0x80a6('0x15')]?_0x4febe3[_0x80a6('0x15')][_0x80a6('0x16')]===undefined?!![]:![]:!![],'where':_0x4febe3[_0x80a6('0x15')]?_0x4febe3[_0x80a6('0x15')][_0x80a6('0x17')]||null:null,'attributes':_0x4febe3['options']?_0x4febe3['options'][_0x80a6('0x18')]||null:null,'limit':_0x4febe3[_0x80a6('0x15')]?_0x4febe3[_0x80a6('0x15')][_0x80a6('0x19')]||null:null,'include':_0x4febe3[_0x80a6('0x15')]?_0x4febe3['options'][_0x80a6('0x1a')]?_[_0x80a6('0x1b')](_0x4febe3[_0x80a6('0x15')][_0x80a6('0x1a')],function(_0x281c89){return{'model':db[_0x281c89[_0x80a6('0x1c')]],'as':_0x281c89['as'],'attributes':_0x281c89[_0x80a6('0x18')],'include':_0x281c89[_0x80a6('0x1a')]?_[_0x80a6('0x1b')](_0x281c89[_0x80a6('0x1a')],function(_0x3c7a38){return{'model':db[_0x3c7a38[_0x80a6('0x1c')]],'as':_0x3c7a38['as'],'attributes':_0x3c7a38[_0x80a6('0x18')],'include':_0x3c7a38[_0x80a6('0x1a')]?_[_0x80a6('0x1b')](_0x3c7a38['include'],function(_0x4cf8f1){return{'model':db[_0x4cf8f1[_0x80a6('0x1c')]],'as':_0x4cf8f1['as'],'attributes':_0x4cf8f1[_0x80a6('0x18')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x24da93){logger[_0x80a6('0xc')](_0x80a6('0x1d'),_0x4febe3);logger[_0x80a6('0xf')](_0x80a6('0x1d'),_0x4febe3,JSON[_0x80a6('0x1e')](_0x24da93));_0xef624a(_0x24da93);})[_0x80a6('0x13')](function(_0x3d3daf){logger[_0x80a6('0x10')](_0x80a6('0x1d'),_0x3d3daf[_0x80a6('0x12')],_0x4febe3);_0x11239e(_0x169f3c[_0x80a6('0x10')](0x1f4,_0x3d3daf[_0x80a6('0x12')]));});});};exports[_0x80a6('0x1f')]=function(_0x2bc139){var _0x17dbcd=this;return new Promise(function(_0x15b155,_0x1684e7){return db[_0x80a6('0x14')][_0x80a6('0x20')]({'raw':_0x2bc139[_0x80a6('0x15')]?_0x2bc139[_0x80a6('0x15')]['raw']===undefined?!![]:![]:!![],'where':_0x2bc139[_0x80a6('0x15')]?_0x2bc139['options'][_0x80a6('0x17')]||null:null,'attributes':_0x2bc139[_0x80a6('0x15')]?_0x2bc139[_0x80a6('0x15')][_0x80a6('0x18')]||null:null,'include':_0x2bc139[_0x80a6('0x15')]?_0x2bc139[_0x80a6('0x15')][_0x80a6('0x1a')]?_[_0x80a6('0x1b')](_0x2bc139[_0x80a6('0x15')][_0x80a6('0x1a')],function(_0x52c202){return{'model':db[_0x52c202[_0x80a6('0x1c')]],'as':_0x52c202['as'],'attributes':_0x52c202['attributes'],'include':_0x52c202[_0x80a6('0x1a')]?_[_0x80a6('0x1b')](_0x52c202[_0x80a6('0x1a')],function(_0x5dd287){return{'model':db[_0x5dd287[_0x80a6('0x1c')]],'as':_0x5dd287['as'],'attributes':_0x5dd287[_0x80a6('0x18')],'include':_0x5dd287['include']?_[_0x80a6('0x1b')](_0x5dd287[_0x80a6('0x1a')],function(_0x3ddd33){return{'model':db[_0x3ddd33[_0x80a6('0x1c')]],'as':_0x3ddd33['as'],'attributes':_0x3ddd33[_0x80a6('0x18')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x5ed493){logger[_0x80a6('0xc')](_0x80a6('0x1f'),_0x2bc139);logger['debug']('ShowFreshdeskAccount',_0x2bc139,JSON[_0x80a6('0x1e')](_0x5ed493));_0x15b155(_0x5ed493);})['catch'](function(_0x7a254c){logger[_0x80a6('0x10')](_0x80a6('0x1f'),_0x7a254c['message'],_0x2bc139);_0x1684e7(_0x17dbcd[_0x80a6('0x10')](0x1f4,_0x7a254c[_0x80a6('0x12')]));});});};
\ No newline at end of file
index cc88e68..bb18112 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf873=['getDescriptions','/:id/tags','getTags','post','create','put','/:id','update','delete','destroy','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intFreshdeskConfiguration.controller','isAuthenticated','index','get','show','/:id/fields','getFields','/:id/subjects','getSubjects','/:id/descriptions'];(function(_0x1c289a,_0x277fe7){var _0x28d68e=function(_0x2f8e98){while(--_0x2f8e98){_0x1c289a['push'](_0x1c289a['shift']());}};_0x28d68e(++_0x277fe7);}(_0xf873,0xb2));var _0x3f87=function(_0x21c9af,_0x726e47){_0x21c9af=_0x21c9af-0x0;var _0x53ec4f=_0xf873[_0x21c9af];return _0x53ec4f;};'use strict';var multer=require('multer');var util=require(_0x3f87('0x0'));var path=require(_0x3f87('0x1'));var timeout=require(_0x3f87('0x2'));var express=require(_0x3f87('0x3'));var router=express[_0x3f87('0x4')]();var auth=require(_0x3f87('0x5'));var interaction=require(_0x3f87('0x6'));var config=require(_0x3f87('0x7'));var controller=require(_0x3f87('0x8'));router['get']('/',auth[_0x3f87('0x9')](),controller[_0x3f87('0xa')]);router[_0x3f87('0xb')]('/:id',auth[_0x3f87('0x9')](),controller[_0x3f87('0xc')]);router[_0x3f87('0xb')](_0x3f87('0xd'),auth[_0x3f87('0x9')](),controller[_0x3f87('0xe')]);router['get'](_0x3f87('0xf'),auth[_0x3f87('0x9')](),controller[_0x3f87('0x10')]);router[_0x3f87('0xb')](_0x3f87('0x11'),auth[_0x3f87('0x9')](),controller[_0x3f87('0x12')]);router[_0x3f87('0xb')](_0x3f87('0x13'),auth[_0x3f87('0x9')](),controller[_0x3f87('0x14')]);router[_0x3f87('0x15')]('/',auth[_0x3f87('0x9')](),controller[_0x3f87('0x16')]);router['post'](_0x3f87('0x13'),auth[_0x3f87('0x9')](),controller['setTags']);router[_0x3f87('0x17')](_0x3f87('0x18'),auth[_0x3f87('0x9')](),controller[_0x3f87('0x19')]);router[_0x3f87('0x1a')](_0x3f87('0x18'),auth[_0x3f87('0x9')](),controller[_0x3f87('0x1b')]);module['exports']=router;
\ No newline at end of file
+var _0x5ad3=['destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intFreshdeskConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','getSubjects','/:id/descriptions','/:id/tags','post','setTags','delete'];(function(_0x4fe496,_0x1d8673){var _0x422b24=function(_0x27a644){while(--_0x27a644){_0x4fe496['push'](_0x4fe496['shift']());}};_0x422b24(++_0x1d8673);}(_0x5ad3,0x1e2));var _0x35ad=function(_0x26f1b2,_0x33d843){_0x26f1b2=_0x26f1b2-0x0;var _0x1624a4=_0x5ad3[_0x26f1b2];return _0x1624a4;};'use strict';var multer=require(_0x35ad('0x0'));var util=require(_0x35ad('0x1'));var path=require(_0x35ad('0x2'));var timeout=require(_0x35ad('0x3'));var express=require('express');var router=express[_0x35ad('0x4')]();var auth=require(_0x35ad('0x5'));var interaction=require(_0x35ad('0x6'));var config=require(_0x35ad('0x7'));var controller=require(_0x35ad('0x8'));router[_0x35ad('0x9')]('/',auth[_0x35ad('0xa')](),controller[_0x35ad('0xb')]);router[_0x35ad('0x9')](_0x35ad('0xc'),auth['isAuthenticated'](),controller[_0x35ad('0xd')]);router[_0x35ad('0x9')](_0x35ad('0xe'),auth['isAuthenticated'](),controller[_0x35ad('0xf')]);router['get']('/:id/subjects',auth[_0x35ad('0xa')](),controller[_0x35ad('0x10')]);router['get'](_0x35ad('0x11'),auth[_0x35ad('0xa')](),controller['getDescriptions']);router['get'](_0x35ad('0x12'),auth[_0x35ad('0xa')](),controller['getTags']);router[_0x35ad('0x13')]('/',auth[_0x35ad('0xa')](),controller['create']);router['post'](_0x35ad('0x12'),auth[_0x35ad('0xa')](),controller[_0x35ad('0x14')]);router['put'](_0x35ad('0xc'),auth[_0x35ad('0xa')](),controller['update']);router[_0x35ad('0x15')]('/:id',auth['isAuthenticated'](),controller[_0x35ad('0x16')]);module[_0x35ad('0x17')]=router;
\ No newline at end of file
index 01338bf..f7ee61d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7db2=['STRING','sequelize','exports'];(function(_0x20a323,_0x297ff2){var _0xef49e5=function(_0x8f54f){while(--_0x8f54f){_0x20a323['push'](_0x20a323['shift']());}};_0xef49e5(++_0x297ff2);}(_0x7db2,0x1b1));var _0x27db=function(_0x4ea28d,_0x58c85a){_0x4ea28d=_0x4ea28d-0x0;var _0x3c0fd9=_0x7db2[_0x4ea28d];return _0x3c0fd9;};'use strict';var Sequelize=require(_0x27db('0x0'));module[_0x27db('0x1')]={'name':{'type':Sequelize[_0x27db('0x2')]},'description':{'type':Sequelize[_0x27db('0x2')]}};
\ No newline at end of file
+var _0x37ff=['sequelize','STRING'];(function(_0x1abeb2,_0x79f462){var _0x48da20=function(_0x42a90b){while(--_0x42a90b){_0x1abeb2['push'](_0x1abeb2['shift']());}};_0x48da20(++_0x79f462);}(_0x37ff,0x190));var _0xf37f=function(_0x9a7d5b,_0x50327f){_0x9a7d5b=_0x9a7d5b-0x0;var _0xe2a5b3=_0x37ff[_0x9a7d5b];return _0xe2a5b3;};'use strict';var Sequelize=require(_0xf37f('0x0'));module['exports']={'name':{'type':Sequelize[_0xf37f('0x1')]},'description':{'type':Sequelize[_0xf37f('0x1')]}};
\ No newline at end of file
index de10a3e..60f64bd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x723c=['Content-Range','apply','reject','save','destroy','end','name','send','FreshdeskConfiguration','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','sort','where','pick','filter','map','type','key','VIRTUAL','merge','options','includeAll','include','findAll','rows','catch','show','params','length','find','body','update','FreshdeskField','order','getFields','getSubjects','findOne','getDescriptions','getTags','Tag','setTags','eml-format','rimraf','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../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','info','FreshdeskConfiguration,\x20%s,\x20%s','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','code','error','message','result','sendStatus','status','json','count','offset','limit','set'];(function(_0x5d8631,_0x44944b){var _0x34c15e=function(_0x4448f8){while(--_0x4448f8){_0x5d8631['push'](_0x5d8631['shift']());}};_0x34c15e(++_0x44944b);}(_0x723c,0x1ad));var _0xc723=function(_0x11e662,_0xd34d05){_0x11e662=_0x11e662-0x0;var _0x1e2873=_0x723c[_0x11e662];return _0x1e2873;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xc723('0x0'));var rimraf=require(_0xc723('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xc723('0x2'));var rp=require('request-promise');var moment=require(_0xc723('0x3'));var BPromise=require(_0xc723('0x4'));var Mustache=require(_0xc723('0x5'));var util=require(_0xc723('0x6'));var path=require(_0xc723('0x7'));var sox=require(_0xc723('0x8'));var csv=require(_0xc723('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xc723('0xa'));var squel=require(_0xc723('0xb'));var crypto=require('crypto');var jsforce=require(_0xc723('0xc'));var deskjs=require(_0xc723('0xd'));var toCsv=require(_0xc723('0x9'));var querystring=require(_0xc723('0xe'));var Papa=require(_0xc723('0xf'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0xc723('0x10'));var hardwareService=require(_0xc723('0x11'));var logger=require(_0xc723('0x12'))(_0xc723('0x13'));var utils=require('../../config/utils');var config=require(_0xc723('0x14'));var db=require(_0xc723('0x15'))['db'];var jayson=require(_0xc723('0x16'));var client=jayson[_0xc723('0x17')][_0xc723('0x18')]({'port':0x232a});function checkPasswordPattern(_0x5cffb4,_0x605b42,_0x1a53fc){if(_0x1a53fc){var _0x3d988b=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3d988b[_0xc723('0x19')](_0x605b42)){return _0x5cffb4;}else{throw new Error(_0xc723('0x1a'));}}else{return _0x5cffb4;}}function respondWithRpcPromise(_0x4a3d86,_0x2e8be7,_0x5426f8,_0x5e37c1){return new BPromise(function(_0x1bb1ba,_0x110d83){var _0x212a77=_0x5e37c1||client;return _0x212a77[_0xc723('0x1b')](_0x4a3d86,_0x5426f8)[_0xc723('0x1c')](function(_0x165a8f){logger[_0xc723('0x1d')](_0xc723('0x1e'),_0x2e8be7,'request\x20sent');logger[_0xc723('0x1f')](_0xc723('0x20'),_0x2e8be7,_0xc723('0x21'),JSON[_0xc723('0x22')](_0x165a8f));if(_0x165a8f['error']){if(_0x165a8f['error'][_0xc723('0x23')]===0x1f4){logger[_0xc723('0x24')](_0xc723('0x1e'),_0x2e8be7,_0x165a8f[_0xc723('0x24')][_0xc723('0x25')]);return _0x110d83(_0x165a8f['error'][_0xc723('0x25')]);}logger[_0xc723('0x24')](_0xc723('0x1e'),_0x2e8be7,_0x165a8f[_0xc723('0x24')][_0xc723('0x25')]);return _0x1bb1ba(_0x165a8f[_0xc723('0x24')][_0xc723('0x25')]);}else{logger[_0xc723('0x1d')](_0xc723('0x1e'),_0x2e8be7,_0xc723('0x21'));_0x1bb1ba(_0x165a8f[_0xc723('0x26')][_0xc723('0x25')]);}})['catch'](function(_0x16ae56){logger['error'](_0xc723('0x1e'),_0x2e8be7,_0x16ae56);_0x110d83(_0x16ae56);});});}function respondWithStatusCode(_0x380fb5,_0x1296e5){_0x1296e5=_0x1296e5||0xcc;return function(_0x4f92b6){if(_0x4f92b6){return _0x380fb5[_0xc723('0x27')](_0x1296e5);}return _0x380fb5[_0xc723('0x28')](_0x1296e5)['end']();};}function respondWithResult(_0x5acbda,_0x38adbe){_0x38adbe=_0x38adbe||0xc8;return function(_0xddf5bc){if(_0xddf5bc){return _0x5acbda[_0xc723('0x28')](_0x38adbe)[_0xc723('0x29')](_0xddf5bc);}};}function respondWithFilteredResult(_0x4066cd,_0x40a594){return function(_0x1670cf){if(_0x1670cf){var _0x459742=_0x1670cf[_0xc723('0x2a')],_0x5b9cb6=_0x40a594[_0xc723('0x2b')],_0x567895=_0x40a594['offset']+_0x40a594[_0xc723('0x2c')],_0x2ccef6;if(_0x567895>=_0x459742){_0x567895=_0x459742;_0x2ccef6=0xc8;}else{_0x2ccef6=0xce;}_0x4066cd[_0xc723('0x28')](_0x2ccef6);return _0x4066cd[_0xc723('0x2d')](_0xc723('0x2e'),_0x5b9cb6+'-'+_0x567895+'/'+_0x459742)['json'](_0x1670cf);}return null;};}function patchUpdates(_0x14186d){return function(_0x13407b){try{jsonpatch[_0xc723('0x2f')](_0x13407b,_0x14186d,!![]);}catch(_0x5acc14){return BPromise[_0xc723('0x30')](_0x5acc14);}return _0x13407b[_0xc723('0x31')]();};}function saveUpdates(_0x389061,_0x4cd745){return function(_0x25f85d){if(_0x25f85d){return _0x25f85d['update'](_0x389061)['then'](function(_0x5cf1b3){return _0x5cf1b3;});}return null;};}function removeEntity(_0x2a10c1,_0x3dc181){return function(_0x559c0a){if(_0x559c0a){return _0x559c0a[_0xc723('0x32')]()[_0xc723('0x1c')](function(){_0x2a10c1[_0xc723('0x28')](0xcc)[_0xc723('0x33')]();});}};}function handleEntityNotFound(_0x111ca0,_0x3b2ecc){return function(_0x36b0d8){if(!_0x36b0d8){_0x111ca0[_0xc723('0x27')](0x194);}return _0x36b0d8;};}function handleError(_0x1a8272,_0x145da7){_0x145da7=_0x145da7||0x1f4;return function(_0x141a6a){logger[_0xc723('0x24')](_0x141a6a['stack']);if(_0x141a6a[_0xc723('0x34')]){delete _0x141a6a['name'];}_0x1a8272['status'](_0x145da7)[_0xc723('0x35')](_0x141a6a);};}exports['index']=function(_0x48c764,_0x12419d){var _0x264234={},_0x22565d={},_0x179eee={'count':0x0,'rows':[]};var _0x5c337c=db[_0xc723('0x36')][_0xc723('0x37')];_0x22565d[_0xc723('0x38')]=_[_0xc723('0x39')](_0x5c337c);_0x22565d[_0xc723('0x3a')]=_['keys'](_0x48c764[_0xc723('0x3a')]);_0x22565d[_0xc723('0x3b')]=_[_0xc723('0x3c')](_0x22565d[_0xc723('0x38')],_0x22565d[_0xc723('0x3a')]);_0x264234['attributes']=_[_0xc723('0x3c')](_0x22565d['model'],qs[_0xc723('0x3d')](_0x48c764[_0xc723('0x3a')][_0xc723('0x3d')]));_0x264234[_0xc723('0x3e')]=_0x264234[_0xc723('0x3e')]['length']?_0x264234[_0xc723('0x3e')]:_0x22565d[_0xc723('0x38')];if(!_0x48c764[_0xc723('0x3a')][_0xc723('0x3f')](_0xc723('0x40'))){_0x264234[_0xc723('0x2c')]=qs['limit'](_0x48c764['query'][_0xc723('0x2c')]);_0x264234[_0xc723('0x2b')]=qs[_0xc723('0x2b')](_0x48c764[_0xc723('0x3a')][_0xc723('0x2b')]);}_0x264234['order']=qs[_0xc723('0x41')](_0x48c764[_0xc723('0x3a')][_0xc723('0x41')]);_0x264234[_0xc723('0x42')]=qs[_0xc723('0x3b')](_[_0xc723('0x43')](_0x48c764[_0xc723('0x3a')],_0x22565d[_0xc723('0x3b')]));if(_0x48c764[_0xc723('0x3a')][_0xc723('0x44')]){_0x264234['where']=_['merge'](_0x264234['where'],{'$or':_[_0xc723('0x45')](_0x5c337c,function(_0x50f4b7){if(_0x50f4b7[_0xc723('0x46')][_0xc723('0x47')]!==_0xc723('0x48')){var _0x5cc27c={};_0x5cc27c[_0x50f4b7['field']]={'$like':'%'+_0x48c764['query'][_0xc723('0x44')]+'%'};return _0x5cc27c;}})});}_0x264234=_[_0xc723('0x49')]({},_0x264234,_0x48c764[_0xc723('0x4a')]);var _0x43d3b2={'where':_0x264234['where']};return db[_0xc723('0x36')][_0xc723('0x2a')](_0x43d3b2)[_0xc723('0x1c')](function(_0x3f3c75){_0x179eee[_0xc723('0x2a')]=_0x3f3c75;if(_0x48c764['query'][_0xc723('0x4b')]){_0x264234[_0xc723('0x4c')]=[{'all':!![]}];}return db[_0xc723('0x36')][_0xc723('0x4d')](_0x264234);})[_0xc723('0x1c')](function(_0x646632){_0x179eee[_0xc723('0x4e')]=_0x646632;return _0x179eee;})['then'](respondWithFilteredResult(_0x12419d,_0x264234))[_0xc723('0x4f')](handleError(_0x12419d,null));};exports[_0xc723('0x50')]=function(_0x42e0d4,_0x5ead61){var _0x2397e8={'raw':![],'where':{'id':_0x42e0d4[_0xc723('0x51')]['id']}},_0xf7bb41={};_0xf7bb41[_0xc723('0x38')]=_[_0xc723('0x39')](db[_0xc723('0x36')][_0xc723('0x37')]);_0xf7bb41[_0xc723('0x3a')]=_[_0xc723('0x39')](_0x42e0d4[_0xc723('0x3a')]);_0xf7bb41[_0xc723('0x3b')]=_[_0xc723('0x3c')](_0xf7bb41['model'],_0xf7bb41['query']);_0x2397e8[_0xc723('0x3e')]=_['intersection'](_0xf7bb41[_0xc723('0x38')],qs[_0xc723('0x3d')](_0x42e0d4[_0xc723('0x3a')][_0xc723('0x3d')]));_0x2397e8['attributes']=_0x2397e8[_0xc723('0x3e')][_0xc723('0x52')]?_0x2397e8[_0xc723('0x3e')]:_0xf7bb41[_0xc723('0x38')];if(_0x42e0d4[_0xc723('0x3a')][_0xc723('0x4b')]){_0x2397e8[_0xc723('0x4c')]=[{'all':!![]}];}_0x2397e8=_['merge']({},_0x2397e8,_0x42e0d4[_0xc723('0x4a')]);return db[_0xc723('0x36')][_0xc723('0x53')](_0x2397e8)[_0xc723('0x1c')](handleEntityNotFound(_0x5ead61,null))[_0xc723('0x1c')](respondWithResult(_0x5ead61,null))[_0xc723('0x4f')](handleError(_0x5ead61,null));};exports['create']=function(_0x4ab440,_0x8e0ef7){return db[_0xc723('0x36')]['create'](_0x4ab440[_0xc723('0x54')],{})[_0xc723('0x1c')](respondWithResult(_0x8e0ef7,0xc9))[_0xc723('0x4f')](handleError(_0x8e0ef7,null));};exports[_0xc723('0x55')]=function(_0x3c0dfa,_0x3a5fc2){if(_0x3c0dfa[_0xc723('0x54')]['id']){delete _0x3c0dfa[_0xc723('0x54')]['id'];}return db['FreshdeskConfiguration'][_0xc723('0x53')]({'where':{'id':_0x3c0dfa[_0xc723('0x51')]['id']}})['then'](handleEntityNotFound(_0x3a5fc2,null))[_0xc723('0x1c')](saveUpdates(_0x3c0dfa[_0xc723('0x54')],null))[_0xc723('0x1c')](respondWithResult(_0x3a5fc2,null))['catch'](handleError(_0x3a5fc2,null));};exports['destroy']=function(_0x1d0753,_0x34274c){return db['FreshdeskConfiguration']['find']({'where':{'id':_0x1d0753['params']['id']}})[_0xc723('0x1c')](handleEntityNotFound(_0x34274c,null))['then'](removeEntity(_0x34274c,null))['catch'](handleError(_0x34274c,null));};exports['getFields']=function(_0x1c03a9,_0x33c962,_0x220a72){var _0x33bef5={};var _0x4e61da={};var _0x1b0fad;var _0x64beb;return db['FreshdeskConfiguration']['findOne']({'where':{'id':_0x1c03a9[_0xc723('0x51')]['id']}})[_0xc723('0x1c')](handleEntityNotFound(_0x33c962,null))[_0xc723('0x1c')](function(_0x3309c6){if(_0x3309c6){_0x1b0fad=_0x3309c6;_0x4e61da[_0xc723('0x38')]=_['keys'](db[_0xc723('0x56')]['rawAttributes']);_0x4e61da[_0xc723('0x3a')]=_[_0xc723('0x39')](_0x1c03a9['query']);_0x4e61da['filters']=_[_0xc723('0x3c')](_0x4e61da[_0xc723('0x38')],_0x4e61da['query']);_0x33bef5['attributes']=_[_0xc723('0x3c')](_0x4e61da['model'],qs[_0xc723('0x3d')](_0x1c03a9[_0xc723('0x3a')][_0xc723('0x3d')]));_0x33bef5[_0xc723('0x3e')]=_0x33bef5[_0xc723('0x3e')][_0xc723('0x52')]?_0x33bef5[_0xc723('0x3e')]:_0x4e61da[_0xc723('0x38')];_0x33bef5[_0xc723('0x57')]=qs[_0xc723('0x41')](_0x1c03a9[_0xc723('0x3a')]['sort']);_0x33bef5[_0xc723('0x42')]=qs['filters'](_['pick'](_0x1c03a9[_0xc723('0x3a')],_0x4e61da[_0xc723('0x3b')]));if(_0x1c03a9['query']['filter']){_0x33bef5[_0xc723('0x42')]=_[_0xc723('0x49')](_0x33bef5[_0xc723('0x42')],{'$or':_[_0xc723('0x45')](_0x33bef5['attributes'],function(_0x690f6a){var _0x140217={};_0x140217[_0x690f6a]={'$like':'%'+_0x1c03a9[_0xc723('0x3a')][_0xc723('0x44')]+'%'};return _0x140217;})});}_0x33bef5=_[_0xc723('0x49')]({},_0x33bef5,_0x1c03a9[_0xc723('0x4a')]);return _0x1b0fad[_0xc723('0x58')](_0x33bef5);}})[_0xc723('0x1c')](function(_0x1f7f6f){if(_0x1f7f6f){_0x64beb=_0x1f7f6f['length'];if(!_0x1c03a9[_0xc723('0x3a')][_0xc723('0x3f')]('nolimit')){_0x33bef5[_0xc723('0x2c')]=qs[_0xc723('0x2c')](_0x1c03a9[_0xc723('0x3a')][_0xc723('0x2c')]);_0x33bef5[_0xc723('0x2b')]=qs[_0xc723('0x2b')](_0x1c03a9['query'][_0xc723('0x2b')]);}return _0x1b0fad['getFields'](_0x33bef5);}})[_0xc723('0x1c')](function(_0x4126e7){if(_0x4126e7){return _0x4126e7?{'count':_0x64beb,'rows':_0x4126e7}:null;}})[_0xc723('0x1c')](respondWithResult(_0x33c962,null))[_0xc723('0x4f')](handleError(_0x33c962,null));};exports[_0xc723('0x59')]=function(_0x9c54dd,_0x13dc98,_0x5136ee){var _0x25302c={};var _0x1885d4={};var _0x268b1f;var _0x179f70;return db[_0xc723('0x36')][_0xc723('0x5a')]({'where':{'id':_0x9c54dd['params']['id']}})[_0xc723('0x1c')](handleEntityNotFound(_0x13dc98,null))[_0xc723('0x1c')](function(_0xd5d9ce){if(_0xd5d9ce){_0x268b1f=_0xd5d9ce;_0x1885d4[_0xc723('0x38')]=_['keys'](db['FreshdeskField'][_0xc723('0x37')]);_0x1885d4[_0xc723('0x3a')]=_['keys'](_0x9c54dd['query']);_0x1885d4['filters']=_[_0xc723('0x3c')](_0x1885d4[_0xc723('0x38')],_0x1885d4[_0xc723('0x3a')]);_0x25302c[_0xc723('0x3e')]=_[_0xc723('0x3c')](_0x1885d4[_0xc723('0x38')],qs['fields'](_0x9c54dd[_0xc723('0x3a')]['fields']));_0x25302c[_0xc723('0x3e')]=_0x25302c[_0xc723('0x3e')][_0xc723('0x52')]?_0x25302c[_0xc723('0x3e')]:_0x1885d4[_0xc723('0x38')];_0x25302c['order']=qs['sort'](_0x9c54dd[_0xc723('0x3a')][_0xc723('0x41')]);_0x25302c[_0xc723('0x42')]=qs[_0xc723('0x3b')](_[_0xc723('0x43')](_0x9c54dd['query'],_0x1885d4['filters']));if(_0x9c54dd[_0xc723('0x3a')][_0xc723('0x44')]){_0x25302c[_0xc723('0x42')]=_[_0xc723('0x49')](_0x25302c[_0xc723('0x42')],{'$or':_[_0xc723('0x45')](_0x25302c[_0xc723('0x3e')],function(_0x2dddc4){var _0x4ccc32={};_0x4ccc32[_0x2dddc4]={'$like':'%'+_0x9c54dd[_0xc723('0x3a')][_0xc723('0x44')]+'%'};return _0x4ccc32;})});}_0x25302c=_['merge']({},_0x25302c,_0x9c54dd['options']);return _0x268b1f[_0xc723('0x59')](_0x25302c);}})[_0xc723('0x1c')](function(_0x16bfa0){if(_0x16bfa0){_0x179f70=_0x16bfa0[_0xc723('0x52')];if(!_0x9c54dd[_0xc723('0x3a')]['hasOwnProperty'](_0xc723('0x40'))){_0x25302c[_0xc723('0x2c')]=qs[_0xc723('0x2c')](_0x9c54dd[_0xc723('0x3a')][_0xc723('0x2c')]);_0x25302c[_0xc723('0x2b')]=qs[_0xc723('0x2b')](_0x9c54dd[_0xc723('0x3a')][_0xc723('0x2b')]);}return _0x268b1f['getSubjects'](_0x25302c);}})[_0xc723('0x1c')](function(_0xf5fbc8){if(_0xf5fbc8){return _0xf5fbc8?{'count':_0x179f70,'rows':_0xf5fbc8}:null;}})[_0xc723('0x1c')](respondWithResult(_0x13dc98,null))[_0xc723('0x4f')](handleError(_0x13dc98,null));};exports[_0xc723('0x5b')]=function(_0x44c9de,_0x178d53,_0x27d8ee){var _0x2f315c={};var _0x3e0006={};var _0xd73d21;var _0x1fd012;return db[_0xc723('0x36')][_0xc723('0x5a')]({'where':{'id':_0x44c9de['params']['id']}})[_0xc723('0x1c')](handleEntityNotFound(_0x178d53,null))[_0xc723('0x1c')](function(_0x396274){if(_0x396274){_0xd73d21=_0x396274;_0x3e0006['model']=_[_0xc723('0x39')](db['FreshdeskField']['rawAttributes']);_0x3e0006[_0xc723('0x3a')]=_[_0xc723('0x39')](_0x44c9de[_0xc723('0x3a')]);_0x3e0006['filters']=_['intersection'](_0x3e0006['model'],_0x3e0006[_0xc723('0x3a')]);_0x2f315c[_0xc723('0x3e')]=_[_0xc723('0x3c')](_0x3e0006[_0xc723('0x38')],qs[_0xc723('0x3d')](_0x44c9de[_0xc723('0x3a')][_0xc723('0x3d')]));_0x2f315c[_0xc723('0x3e')]=_0x2f315c['attributes']['length']?_0x2f315c[_0xc723('0x3e')]:_0x3e0006[_0xc723('0x38')];_0x2f315c[_0xc723('0x57')]=qs[_0xc723('0x41')](_0x44c9de['query'][_0xc723('0x41')]);_0x2f315c[_0xc723('0x42')]=qs['filters'](_[_0xc723('0x43')](_0x44c9de[_0xc723('0x3a')],_0x3e0006[_0xc723('0x3b')]));if(_0x44c9de['query'][_0xc723('0x44')]){_0x2f315c[_0xc723('0x42')]=_['merge'](_0x2f315c[_0xc723('0x42')],{'$or':_['map'](_0x2f315c[_0xc723('0x3e')],function(_0x4a63fa){var _0x5c413a={};_0x5c413a[_0x4a63fa]={'$like':'%'+_0x44c9de[_0xc723('0x3a')]['filter']+'%'};return _0x5c413a;})});}_0x2f315c=_['merge']({},_0x2f315c,_0x44c9de[_0xc723('0x4a')]);return _0xd73d21['getDescriptions'](_0x2f315c);}})[_0xc723('0x1c')](function(_0x3553dd){if(_0x3553dd){_0x1fd012=_0x3553dd[_0xc723('0x52')];if(!_0x44c9de[_0xc723('0x3a')]['hasOwnProperty'](_0xc723('0x40'))){_0x2f315c[_0xc723('0x2c')]=qs[_0xc723('0x2c')](_0x44c9de['query']['limit']);_0x2f315c['offset']=qs['offset'](_0x44c9de[_0xc723('0x3a')]['offset']);}return _0xd73d21[_0xc723('0x5b')](_0x2f315c);}})['then'](function(_0x4da573){if(_0x4da573){return _0x4da573?{'count':_0x1fd012,'rows':_0x4da573}:null;}})[_0xc723('0x1c')](respondWithResult(_0x178d53,null))['catch'](handleError(_0x178d53,null));};exports[_0xc723('0x5c')]=function(_0x5df523,_0x34d9fd,_0x3bbc6f){var _0x5217c4={};var _0x3391ea={};var _0x2edcb8;var _0x35804e;return db['FreshdeskConfiguration'][_0xc723('0x5a')]({'where':{'id':_0x5df523[_0xc723('0x51')]['id']}})[_0xc723('0x1c')](handleEntityNotFound(_0x34d9fd,null))[_0xc723('0x1c')](function(_0x3e914e){if(_0x3e914e){_0x2edcb8=_0x3e914e;_0x3391ea[_0xc723('0x38')]=_[_0xc723('0x39')](db[_0xc723('0x5d')][_0xc723('0x37')]);_0x3391ea[_0xc723('0x3a')]=_[_0xc723('0x39')](_0x5df523[_0xc723('0x3a')]);_0x3391ea['filters']=_['intersection'](_0x3391ea['model'],_0x3391ea[_0xc723('0x3a')]);_0x5217c4[_0xc723('0x3e')]=_[_0xc723('0x3c')](_0x3391ea[_0xc723('0x38')],qs[_0xc723('0x3d')](_0x5df523[_0xc723('0x3a')][_0xc723('0x3d')]));_0x5217c4['attributes']=_0x5217c4[_0xc723('0x3e')][_0xc723('0x52')]?_0x5217c4[_0xc723('0x3e')]:_0x3391ea[_0xc723('0x38')];_0x5217c4[_0xc723('0x57')]=qs[_0xc723('0x41')](_0x5df523[_0xc723('0x3a')][_0xc723('0x41')]);_0x5217c4[_0xc723('0x42')]=qs[_0xc723('0x3b')](_[_0xc723('0x43')](_0x5df523[_0xc723('0x3a')],_0x3391ea[_0xc723('0x3b')]));if(_0x5df523['query']['filter']){_0x5217c4[_0xc723('0x42')]=_['merge'](_0x5217c4[_0xc723('0x42')],{'$or':_['map'](_0x5217c4['attributes'],function(_0x1e44f4){var _0x3a6f35={};_0x3a6f35[_0x1e44f4]={'$like':'%'+_0x5df523['query'][_0xc723('0x44')]+'%'};return _0x3a6f35;})});}_0x5217c4=_[_0xc723('0x49')]({},_0x5217c4,_0x5df523[_0xc723('0x4a')]);return _0x2edcb8['getTags'](_0x5217c4);}})[_0xc723('0x1c')](function(_0x3c07ff){if(_0x3c07ff){_0x35804e=_0x3c07ff[_0xc723('0x52')];if(!_0x5df523[_0xc723('0x3a')][_0xc723('0x3f')](_0xc723('0x40'))){_0x5217c4[_0xc723('0x2c')]=qs[_0xc723('0x2c')](_0x5df523[_0xc723('0x3a')][_0xc723('0x2c')]);_0x5217c4[_0xc723('0x2b')]=qs['offset'](_0x5df523[_0xc723('0x3a')][_0xc723('0x2b')]);}return _0x2edcb8[_0xc723('0x5c')](_0x5217c4);}})[_0xc723('0x1c')](function(_0xa5e23c){if(_0xa5e23c){return _0xa5e23c?{'count':_0x35804e,'rows':_0xa5e23c}:null;}})[_0xc723('0x1c')](respondWithResult(_0x34d9fd,null))[_0xc723('0x4f')](handleError(_0x34d9fd,null));};exports[_0xc723('0x5e')]=function(_0x430ec2,_0x389323,_0x262a22){if(_0x430ec2[_0xc723('0x54')]['id']){delete _0x430ec2['body']['id'];}return db[_0xc723('0x36')][_0xc723('0x5a')]({'where':{'id':_0x430ec2[_0xc723('0x51')]['id']}})[_0xc723('0x1c')](handleEntityNotFound(_0x389323,null))[_0xc723('0x1c')](function(_0x1f7bb0){if(_0x1f7bb0){return _0x1f7bb0['setTags'](_0x430ec2['body']['ids']||[]);}return null;})['then'](respondWithResult(_0x389323,null))[_0xc723('0x4f')](handleError(_0x389323,null));};
\ No newline at end of file
+var _0xf61e=['filter','hasOwnProperty','nolimit','getSubjects','getDescriptions','Tag','getTags','setTags','ids','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','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','FreshdeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','sendStatus','end','status','json','count','offset','limit','set','Content-Range','reject','save','destroy','name','send','index','rawAttributes','keys','query','filters','attributes','intersection','fields','length','model','sort','where','pick','merge','map','type','key','VIRTUAL','field','options','FreshdeskConfiguration','include','rows','show','params','find','catch','create','body','update','getFields','findOne','FreshdeskField','order'];(function(_0x29038d,_0x54cca5){var _0x39ca8a=function(_0xbc660d){while(--_0xbc660d){_0x29038d['push'](_0x29038d['shift']());}};_0x39ca8a(++_0x54cca5);}(_0xf61e,0x191));var _0xef61=function(_0x161760,_0x21d025){_0x161760=_0x161760-0x0;var _0x14f504=_0xf61e[_0x161760];return _0x14f504;};'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'];var jayson=require(_0xef61('0x1b'));var client=jayson[_0xef61('0x1c')][_0xef61('0x1d')]({'port':0x232a});function checkPasswordPattern(_0x318f1c,_0x5de159,_0x2a6b04){if(_0x2a6b04){var _0x58d9a0=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x58d9a0[_0xef61('0x1e')](_0x5de159)){return _0x318f1c;}else{throw new Error(_0xef61('0x1f'));}}else{return _0x318f1c;}}function respondWithRpcPromise(_0x370ee0,_0x76ef9b,_0x4c64b5,_0x2ac1b2){return new BPromise(function(_0x435beb,_0x1224c2){var _0x78ff22=_0x2ac1b2||client;return _0x78ff22['request'](_0x370ee0,_0x4c64b5)[_0xef61('0x20')](function(_0xbe23a7){logger['info'](_0xef61('0x21'),_0x76ef9b,_0xef61('0x22'));logger[_0xef61('0x23')](_0xef61('0x24'),_0x76ef9b,_0xef61('0x22'),JSON[_0xef61('0x25')](_0xbe23a7));if(_0xbe23a7[_0xef61('0x26')]){if(_0xbe23a7['error'][_0xef61('0x27')]===0x1f4){logger[_0xef61('0x26')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x76ef9b,_0xbe23a7[_0xef61('0x26')][_0xef61('0x28')]);return _0x1224c2(_0xbe23a7[_0xef61('0x26')][_0xef61('0x28')]);}logger[_0xef61('0x26')](_0xef61('0x21'),_0x76ef9b,_0xbe23a7[_0xef61('0x26')]['message']);return _0x435beb(_0xbe23a7['error'][_0xef61('0x28')]);}else{logger['info'](_0xef61('0x21'),_0x76ef9b,'request\x20sent');_0x435beb(_0xbe23a7['result'][_0xef61('0x28')]);}})['catch'](function(_0x53181b){logger[_0xef61('0x26')](_0xef61('0x21'),_0x76ef9b,_0x53181b);_0x1224c2(_0x53181b);});});}function respondWithStatusCode(_0x3ceb14,_0x111bac){_0x111bac=_0x111bac||0xcc;return function(_0x5e56da){if(_0x5e56da){return _0x3ceb14[_0xef61('0x29')](_0x111bac);}return _0x3ceb14['status'](_0x111bac)[_0xef61('0x2a')]();};}function respondWithResult(_0xb00f83,_0x2419a9){_0x2419a9=_0x2419a9||0xc8;return function(_0xf4c7c9){if(_0xf4c7c9){return _0xb00f83[_0xef61('0x2b')](_0x2419a9)[_0xef61('0x2c')](_0xf4c7c9);}};}function respondWithFilteredResult(_0x258b5a,_0x23837f){return function(_0x297df7){if(_0x297df7){var _0x1ee27b=_0x297df7[_0xef61('0x2d')],_0x3a16ba=_0x23837f[_0xef61('0x2e')],_0x18426f=_0x23837f[_0xef61('0x2e')]+_0x23837f[_0xef61('0x2f')],_0xeb9a62;if(_0x18426f>=_0x1ee27b){_0x18426f=_0x1ee27b;_0xeb9a62=0xc8;}else{_0xeb9a62=0xce;}_0x258b5a[_0xef61('0x2b')](_0xeb9a62);return _0x258b5a[_0xef61('0x30')](_0xef61('0x31'),_0x3a16ba+'-'+_0x18426f+'/'+_0x1ee27b)[_0xef61('0x2c')](_0x297df7);}return null;};}function patchUpdates(_0x53fa3b){return function(_0x4f35ad){try{jsonpatch['apply'](_0x4f35ad,_0x53fa3b,!![]);}catch(_0x38b522){return BPromise[_0xef61('0x32')](_0x38b522);}return _0x4f35ad[_0xef61('0x33')]();};}function saveUpdates(_0x554ef4,_0x2bd5b3){return function(_0x21d6f0){if(_0x21d6f0){return _0x21d6f0['update'](_0x554ef4)[_0xef61('0x20')](function(_0x5d77f9){return _0x5d77f9;});}return null;};}function removeEntity(_0x4c7fd3,_0x307b70){return function(_0x48b6db){if(_0x48b6db){return _0x48b6db[_0xef61('0x34')]()['then'](function(){_0x4c7fd3[_0xef61('0x2b')](0xcc)[_0xef61('0x2a')]();});}};}function handleEntityNotFound(_0x23db9c,_0x14c05c){return function(_0x4378e5){if(!_0x4378e5){_0x23db9c[_0xef61('0x29')](0x194);}return _0x4378e5;};}function handleError(_0xf8cca2,_0x232cd8){_0x232cd8=_0x232cd8||0x1f4;return function(_0x1c622c){logger[_0xef61('0x26')](_0x1c622c['stack']);if(_0x1c622c[_0xef61('0x35')]){delete _0x1c622c[_0xef61('0x35')];}_0xf8cca2[_0xef61('0x2b')](_0x232cd8)[_0xef61('0x36')](_0x1c622c);};}exports[_0xef61('0x37')]=function(_0x534935,_0x1c38dc){var _0x3b7373={},_0x291944={},_0x53bdb9={'count':0x0,'rows':[]};var _0x59b97b=db['FreshdeskConfiguration'][_0xef61('0x38')];_0x291944['model']=_['keys'](_0x59b97b);_0x291944['query']=_[_0xef61('0x39')](_0x534935[_0xef61('0x3a')]);_0x291944[_0xef61('0x3b')]=_['intersection'](_0x291944['model'],_0x291944['query']);_0x3b7373[_0xef61('0x3c')]=_[_0xef61('0x3d')](_0x291944['model'],qs[_0xef61('0x3e')](_0x534935[_0xef61('0x3a')][_0xef61('0x3e')]));_0x3b7373[_0xef61('0x3c')]=_0x3b7373['attributes'][_0xef61('0x3f')]?_0x3b7373[_0xef61('0x3c')]:_0x291944[_0xef61('0x40')];if(!_0x534935[_0xef61('0x3a')]['hasOwnProperty']('nolimit')){_0x3b7373[_0xef61('0x2f')]=qs[_0xef61('0x2f')](_0x534935[_0xef61('0x3a')]['limit']);_0x3b7373[_0xef61('0x2e')]=qs[_0xef61('0x2e')](_0x534935[_0xef61('0x3a')][_0xef61('0x2e')]);}_0x3b7373['order']=qs['sort'](_0x534935['query'][_0xef61('0x41')]);_0x3b7373[_0xef61('0x42')]=qs[_0xef61('0x3b')](_[_0xef61('0x43')](_0x534935[_0xef61('0x3a')],_0x291944[_0xef61('0x3b')]));if(_0x534935[_0xef61('0x3a')]['filter']){_0x3b7373[_0xef61('0x42')]=_[_0xef61('0x44')](_0x3b7373[_0xef61('0x42')],{'$or':_[_0xef61('0x45')](_0x59b97b,function(_0x51fac1){if(_0x51fac1[_0xef61('0x46')][_0xef61('0x47')]!==_0xef61('0x48')){var _0x11bced={};_0x11bced[_0x51fac1[_0xef61('0x49')]]={'$like':'%'+_0x534935[_0xef61('0x3a')]['filter']+'%'};return _0x11bced;}})});}_0x3b7373=_[_0xef61('0x44')]({},_0x3b7373,_0x534935[_0xef61('0x4a')]);var _0x292c85={'where':_0x3b7373['where']};return db[_0xef61('0x4b')][_0xef61('0x2d')](_0x292c85)[_0xef61('0x20')](function(_0x408e7c){_0x53bdb9[_0xef61('0x2d')]=_0x408e7c;if(_0x534935[_0xef61('0x3a')]['includeAll']){_0x3b7373[_0xef61('0x4c')]=[{'all':!![]}];}return db[_0xef61('0x4b')]['findAll'](_0x3b7373);})[_0xef61('0x20')](function(_0x37da22){_0x53bdb9[_0xef61('0x4d')]=_0x37da22;return _0x53bdb9;})[_0xef61('0x20')](respondWithFilteredResult(_0x1c38dc,_0x3b7373))['catch'](handleError(_0x1c38dc,null));};exports[_0xef61('0x4e')]=function(_0x20e4f2,_0x5e614b){var _0x47b09d={'raw':![],'where':{'id':_0x20e4f2[_0xef61('0x4f')]['id']}},_0x3ed63f={};_0x3ed63f['model']=_[_0xef61('0x39')](db[_0xef61('0x4b')][_0xef61('0x38')]);_0x3ed63f[_0xef61('0x3a')]=_[_0xef61('0x39')](_0x20e4f2[_0xef61('0x3a')]);_0x3ed63f[_0xef61('0x3b')]=_['intersection'](_0x3ed63f[_0xef61('0x40')],_0x3ed63f['query']);_0x47b09d[_0xef61('0x3c')]=_[_0xef61('0x3d')](_0x3ed63f[_0xef61('0x40')],qs[_0xef61('0x3e')](_0x20e4f2[_0xef61('0x3a')][_0xef61('0x3e')]));_0x47b09d[_0xef61('0x3c')]=_0x47b09d[_0xef61('0x3c')][_0xef61('0x3f')]?_0x47b09d['attributes']:_0x3ed63f[_0xef61('0x40')];if(_0x20e4f2[_0xef61('0x3a')]['includeAll']){_0x47b09d['include']=[{'all':!![]}];}_0x47b09d=_[_0xef61('0x44')]({},_0x47b09d,_0x20e4f2[_0xef61('0x4a')]);return db['FreshdeskConfiguration'][_0xef61('0x50')](_0x47b09d)['then'](handleEntityNotFound(_0x5e614b,null))[_0xef61('0x20')](respondWithResult(_0x5e614b,null))[_0xef61('0x51')](handleError(_0x5e614b,null));};exports[_0xef61('0x52')]=function(_0x2533f2,_0xa2e84b){return db[_0xef61('0x4b')]['create'](_0x2533f2[_0xef61('0x53')],{})[_0xef61('0x20')](respondWithResult(_0xa2e84b,0xc9))['catch'](handleError(_0xa2e84b,null));};exports[_0xef61('0x54')]=function(_0x20fa01,_0x57856f){if(_0x20fa01['body']['id']){delete _0x20fa01[_0xef61('0x53')]['id'];}return db['FreshdeskConfiguration']['find']({'where':{'id':_0x20fa01['params']['id']}})[_0xef61('0x20')](handleEntityNotFound(_0x57856f,null))[_0xef61('0x20')](saveUpdates(_0x20fa01['body'],null))[_0xef61('0x20')](respondWithResult(_0x57856f,null))[_0xef61('0x51')](handleError(_0x57856f,null));};exports[_0xef61('0x34')]=function(_0x1e7f23,_0x71004){return db[_0xef61('0x4b')][_0xef61('0x50')]({'where':{'id':_0x1e7f23[_0xef61('0x4f')]['id']}})['then'](handleEntityNotFound(_0x71004,null))['then'](removeEntity(_0x71004,null))[_0xef61('0x51')](handleError(_0x71004,null));};exports[_0xef61('0x55')]=function(_0x1d5103,_0x1cc851,_0x1e1f8e){var _0x5a6d4b={};var _0x258d9d={};var _0x572d5f;var _0x5f3b97;return db[_0xef61('0x4b')][_0xef61('0x56')]({'where':{'id':_0x1d5103[_0xef61('0x4f')]['id']}})['then'](handleEntityNotFound(_0x1cc851,null))[_0xef61('0x20')](function(_0x1a8f8f){if(_0x1a8f8f){_0x572d5f=_0x1a8f8f;_0x258d9d[_0xef61('0x40')]=_[_0xef61('0x39')](db[_0xef61('0x57')][_0xef61('0x38')]);_0x258d9d[_0xef61('0x3a')]=_[_0xef61('0x39')](_0x1d5103[_0xef61('0x3a')]);_0x258d9d[_0xef61('0x3b')]=_['intersection'](_0x258d9d[_0xef61('0x40')],_0x258d9d['query']);_0x5a6d4b['attributes']=_[_0xef61('0x3d')](_0x258d9d[_0xef61('0x40')],qs[_0xef61('0x3e')](_0x1d5103[_0xef61('0x3a')][_0xef61('0x3e')]));_0x5a6d4b[_0xef61('0x3c')]=_0x5a6d4b['attributes']['length']?_0x5a6d4b[_0xef61('0x3c')]:_0x258d9d[_0xef61('0x40')];_0x5a6d4b[_0xef61('0x58')]=qs[_0xef61('0x41')](_0x1d5103[_0xef61('0x3a')][_0xef61('0x41')]);_0x5a6d4b[_0xef61('0x42')]=qs[_0xef61('0x3b')](_[_0xef61('0x43')](_0x1d5103[_0xef61('0x3a')],_0x258d9d[_0xef61('0x3b')]));if(_0x1d5103['query'][_0xef61('0x59')]){_0x5a6d4b[_0xef61('0x42')]=_['merge'](_0x5a6d4b[_0xef61('0x42')],{'$or':_[_0xef61('0x45')](_0x5a6d4b[_0xef61('0x3c')],function(_0xaeaee6){var _0x2cc99d={};_0x2cc99d[_0xaeaee6]={'$like':'%'+_0x1d5103[_0xef61('0x3a')][_0xef61('0x59')]+'%'};return _0x2cc99d;})});}_0x5a6d4b=_[_0xef61('0x44')]({},_0x5a6d4b,_0x1d5103['options']);return _0x572d5f[_0xef61('0x55')](_0x5a6d4b);}})['then'](function(_0x58a059){if(_0x58a059){_0x5f3b97=_0x58a059['length'];if(!_0x1d5103[_0xef61('0x3a')][_0xef61('0x5a')](_0xef61('0x5b'))){_0x5a6d4b['limit']=qs[_0xef61('0x2f')](_0x1d5103[_0xef61('0x3a')][_0xef61('0x2f')]);_0x5a6d4b[_0xef61('0x2e')]=qs[_0xef61('0x2e')](_0x1d5103[_0xef61('0x3a')][_0xef61('0x2e')]);}return _0x572d5f[_0xef61('0x55')](_0x5a6d4b);}})[_0xef61('0x20')](function(_0x2d24c4){if(_0x2d24c4){return _0x2d24c4?{'count':_0x5f3b97,'rows':_0x2d24c4}:null;}})[_0xef61('0x20')](respondWithResult(_0x1cc851,null))[_0xef61('0x51')](handleError(_0x1cc851,null));};exports[_0xef61('0x5c')]=function(_0x2bb5f5,_0x477e14,_0x5931a4){var _0x9d1764={};var _0x117d37={};var _0x529a78;var _0xb0ab6d;return db[_0xef61('0x4b')][_0xef61('0x56')]({'where':{'id':_0x2bb5f5[_0xef61('0x4f')]['id']}})[_0xef61('0x20')](handleEntityNotFound(_0x477e14,null))[_0xef61('0x20')](function(_0x51e179){if(_0x51e179){_0x529a78=_0x51e179;_0x117d37[_0xef61('0x40')]=_[_0xef61('0x39')](db['FreshdeskField'][_0xef61('0x38')]);_0x117d37['query']=_[_0xef61('0x39')](_0x2bb5f5[_0xef61('0x3a')]);_0x117d37['filters']=_[_0xef61('0x3d')](_0x117d37['model'],_0x117d37[_0xef61('0x3a')]);_0x9d1764[_0xef61('0x3c')]=_['intersection'](_0x117d37['model'],qs[_0xef61('0x3e')](_0x2bb5f5[_0xef61('0x3a')][_0xef61('0x3e')]));_0x9d1764[_0xef61('0x3c')]=_0x9d1764[_0xef61('0x3c')]['length']?_0x9d1764[_0xef61('0x3c')]:_0x117d37[_0xef61('0x40')];_0x9d1764[_0xef61('0x58')]=qs[_0xef61('0x41')](_0x2bb5f5[_0xef61('0x3a')][_0xef61('0x41')]);_0x9d1764['where']=qs[_0xef61('0x3b')](_['pick'](_0x2bb5f5[_0xef61('0x3a')],_0x117d37[_0xef61('0x3b')]));if(_0x2bb5f5[_0xef61('0x3a')][_0xef61('0x59')]){_0x9d1764[_0xef61('0x42')]=_[_0xef61('0x44')](_0x9d1764[_0xef61('0x42')],{'$or':_[_0xef61('0x45')](_0x9d1764[_0xef61('0x3c')],function(_0x471d16){var _0x383409={};_0x383409[_0x471d16]={'$like':'%'+_0x2bb5f5[_0xef61('0x3a')][_0xef61('0x59')]+'%'};return _0x383409;})});}_0x9d1764=_['merge']({},_0x9d1764,_0x2bb5f5[_0xef61('0x4a')]);return _0x529a78[_0xef61('0x5c')](_0x9d1764);}})[_0xef61('0x20')](function(_0xef8968){if(_0xef8968){_0xb0ab6d=_0xef8968['length'];if(!_0x2bb5f5[_0xef61('0x3a')]['hasOwnProperty']('nolimit')){_0x9d1764[_0xef61('0x2f')]=qs['limit'](_0x2bb5f5[_0xef61('0x3a')]['limit']);_0x9d1764['offset']=qs[_0xef61('0x2e')](_0x2bb5f5[_0xef61('0x3a')]['offset']);}return _0x529a78[_0xef61('0x5c')](_0x9d1764);}})['then'](function(_0x11f9c8){if(_0x11f9c8){return _0x11f9c8?{'count':_0xb0ab6d,'rows':_0x11f9c8}:null;}})[_0xef61('0x20')](respondWithResult(_0x477e14,null))[_0xef61('0x51')](handleError(_0x477e14,null));};exports[_0xef61('0x5d')]=function(_0x531587,_0x1488c0,_0x59813e){var _0x2e91b2={};var _0x2ddf83={};var _0x1929aa;var _0x26f45c;return db[_0xef61('0x4b')][_0xef61('0x56')]({'where':{'id':_0x531587[_0xef61('0x4f')]['id']}})[_0xef61('0x20')](handleEntityNotFound(_0x1488c0,null))[_0xef61('0x20')](function(_0x540b68){if(_0x540b68){_0x1929aa=_0x540b68;_0x2ddf83[_0xef61('0x40')]=_['keys'](db[_0xef61('0x57')][_0xef61('0x38')]);_0x2ddf83['query']=_[_0xef61('0x39')](_0x531587['query']);_0x2ddf83['filters']=_[_0xef61('0x3d')](_0x2ddf83[_0xef61('0x40')],_0x2ddf83['query']);_0x2e91b2[_0xef61('0x3c')]=_[_0xef61('0x3d')](_0x2ddf83['model'],qs[_0xef61('0x3e')](_0x531587[_0xef61('0x3a')]['fields']));_0x2e91b2[_0xef61('0x3c')]=_0x2e91b2['attributes'][_0xef61('0x3f')]?_0x2e91b2[_0xef61('0x3c')]:_0x2ddf83[_0xef61('0x40')];_0x2e91b2[_0xef61('0x58')]=qs['sort'](_0x531587[_0xef61('0x3a')][_0xef61('0x41')]);_0x2e91b2[_0xef61('0x42')]=qs['filters'](_[_0xef61('0x43')](_0x531587[_0xef61('0x3a')],_0x2ddf83['filters']));if(_0x531587['query'][_0xef61('0x59')]){_0x2e91b2[_0xef61('0x42')]=_[_0xef61('0x44')](_0x2e91b2[_0xef61('0x42')],{'$or':_[_0xef61('0x45')](_0x2e91b2[_0xef61('0x3c')],function(_0x1b669a){var _0x113f9c={};_0x113f9c[_0x1b669a]={'$like':'%'+_0x531587[_0xef61('0x3a')][_0xef61('0x59')]+'%'};return _0x113f9c;})});}_0x2e91b2=_[_0xef61('0x44')]({},_0x2e91b2,_0x531587[_0xef61('0x4a')]);return _0x1929aa[_0xef61('0x5d')](_0x2e91b2);}})[_0xef61('0x20')](function(_0x437b81){if(_0x437b81){_0x26f45c=_0x437b81[_0xef61('0x3f')];if(!_0x531587['query'][_0xef61('0x5a')](_0xef61('0x5b'))){_0x2e91b2[_0xef61('0x2f')]=qs[_0xef61('0x2f')](_0x531587[_0xef61('0x3a')][_0xef61('0x2f')]);_0x2e91b2[_0xef61('0x2e')]=qs[_0xef61('0x2e')](_0x531587[_0xef61('0x3a')][_0xef61('0x2e')]);}return _0x1929aa[_0xef61('0x5d')](_0x2e91b2);}})[_0xef61('0x20')](function(_0x4e8a39){if(_0x4e8a39){return _0x4e8a39?{'count':_0x26f45c,'rows':_0x4e8a39}:null;}})[_0xef61('0x20')](respondWithResult(_0x1488c0,null))[_0xef61('0x51')](handleError(_0x1488c0,null));};exports['getTags']=function(_0x32d478,_0x3607f9,_0x4629bf){var _0x23992d={};var _0x241f8f={};var _0x51a988;var _0x32168e;return db['FreshdeskConfiguration'][_0xef61('0x56')]({'where':{'id':_0x32d478[_0xef61('0x4f')]['id']}})[_0xef61('0x20')](handleEntityNotFound(_0x3607f9,null))[_0xef61('0x20')](function(_0x2c9a86){if(_0x2c9a86){_0x51a988=_0x2c9a86;_0x241f8f[_0xef61('0x40')]=_[_0xef61('0x39')](db[_0xef61('0x5e')]['rawAttributes']);_0x241f8f[_0xef61('0x3a')]=_[_0xef61('0x39')](_0x32d478[_0xef61('0x3a')]);_0x241f8f[_0xef61('0x3b')]=_[_0xef61('0x3d')](_0x241f8f[_0xef61('0x40')],_0x241f8f[_0xef61('0x3a')]);_0x23992d[_0xef61('0x3c')]=_[_0xef61('0x3d')](_0x241f8f['model'],qs[_0xef61('0x3e')](_0x32d478[_0xef61('0x3a')][_0xef61('0x3e')]));_0x23992d[_0xef61('0x3c')]=_0x23992d['attributes']['length']?_0x23992d[_0xef61('0x3c')]:_0x241f8f[_0xef61('0x40')];_0x23992d[_0xef61('0x58')]=qs[_0xef61('0x41')](_0x32d478[_0xef61('0x3a')][_0xef61('0x41')]);_0x23992d[_0xef61('0x42')]=qs['filters'](_[_0xef61('0x43')](_0x32d478[_0xef61('0x3a')],_0x241f8f[_0xef61('0x3b')]));if(_0x32d478[_0xef61('0x3a')][_0xef61('0x59')]){_0x23992d['where']=_[_0xef61('0x44')](_0x23992d['where'],{'$or':_[_0xef61('0x45')](_0x23992d[_0xef61('0x3c')],function(_0x2b48dd){var _0xb5cee1={};_0xb5cee1[_0x2b48dd]={'$like':'%'+_0x32d478[_0xef61('0x3a')][_0xef61('0x59')]+'%'};return _0xb5cee1;})});}_0x23992d=_['merge']({},_0x23992d,_0x32d478[_0xef61('0x4a')]);return _0x51a988[_0xef61('0x5f')](_0x23992d);}})[_0xef61('0x20')](function(_0x3f8c6d){if(_0x3f8c6d){_0x32168e=_0x3f8c6d[_0xef61('0x3f')];if(!_0x32d478[_0xef61('0x3a')][_0xef61('0x5a')]('nolimit')){_0x23992d[_0xef61('0x2f')]=qs[_0xef61('0x2f')](_0x32d478[_0xef61('0x3a')]['limit']);_0x23992d['offset']=qs[_0xef61('0x2e')](_0x32d478[_0xef61('0x3a')]['offset']);}return _0x51a988[_0xef61('0x5f')](_0x23992d);}})[_0xef61('0x20')](function(_0x30e931){if(_0x30e931){return _0x30e931?{'count':_0x32168e,'rows':_0x30e931}:null;}})[_0xef61('0x20')](respondWithResult(_0x3607f9,null))[_0xef61('0x51')](handleError(_0x3607f9,null));};exports[_0xef61('0x60')]=function(_0x3e75d9,_0x402908,_0x5deca8){if(_0x3e75d9[_0xef61('0x53')]['id']){delete _0x3e75d9[_0xef61('0x53')]['id'];}return db[_0xef61('0x4b')][_0xef61('0x56')]({'where':{'id':_0x3e75d9[_0xef61('0x4f')]['id']}})['then'](handleEntityNotFound(_0x402908,null))[_0xef61('0x20')](function(_0x4a5887){if(_0x4a5887){return _0x4a5887[_0xef61('0x60')](_0x3e75d9[_0xef61('0x53')][_0xef61('0x61')]||[]);}return null;})['then'](respondWithResult(_0x402908,null))['catch'](handleError(_0x402908,null));};
\ No newline at end of file
index e373212..179883d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd6a0=['exports','define','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment','./intFreshdeskConfiguration.attributes'];(function(_0x28b82a,_0x4d16d4){var _0x17abd1=function(_0x2a6f2e){while(--_0x2a6f2e){_0x28b82a['push'](_0x28b82a['shift']());}};_0x17abd1(++_0x4d16d4);}(_0xd6a0,0xb6));var _0x0d6a=function(_0x5172b8,_0x3b4275){_0x5172b8=_0x5172b8-0x0;var _0x49beac=_0xd6a0[_0x5172b8];return _0x49beac;};'use strict';var _=require(_0x0d6a('0x0'));var util=require(_0x0d6a('0x1'));var logger=require(_0x0d6a('0x2'))(_0x0d6a('0x3'));var moment=require(_0x0d6a('0x4'));var BPromise=require(_0x0d6a('0x5'));var rp=require(_0x0d6a('0x6'));var fs=require('fs');var path=require(_0x0d6a('0x7'));var rimraf=require('rimraf');var config=require(_0x0d6a('0x8'));var attributes=require(_0x0d6a('0x9'));module[_0x0d6a('0xa')]=function(_0x4dcf6e,_0x7e5088){return _0x4dcf6e[_0x0d6a('0xb')]('FreshdeskConfiguration',attributes,{'tableName':'int_freshdesk_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x86c8=['../../config/environment','./intFreshdeskConfiguration.attributes','exports','define','FreshdeskConfiguration','int_freshdesk_configurations','lodash','util','../../config/logger','api','moment','path'];(function(_0xeae258,_0x5801fa){var _0x15de8e=function(_0x58ad1e){while(--_0x58ad1e){_0xeae258['push'](_0xeae258['shift']());}};_0x15de8e(++_0x5801fa);}(_0x86c8,0x14a));var _0x886c=function(_0x3a0de6,_0x20f15c){_0x3a0de6=_0x3a0de6-0x0;var _0x318c38=_0x86c8[_0x3a0de6];return _0x318c38;};'use strict';var _=require(_0x886c('0x0'));var util=require(_0x886c('0x1'));var logger=require(_0x886c('0x2'))(_0x886c('0x3'));var moment=require(_0x886c('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x886c('0x5'));var rimraf=require('rimraf');var config=require(_0x886c('0x6'));var attributes=require(_0x886c('0x7'));module[_0x886c('0x8')]=function(_0x3963a5,_0x5bde3c){return _0x3963a5[_0x886c('0x9')](_0x886c('0xa'),attributes,{'tableName':_0x886c('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1a14d53..599c1d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x729d=['message','info','request\x20sent','result','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','jayson/promise','client','http','request','then','FreshdeskConfiguration,\x20%s,\x20%s','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x258526,_0xa65b83){var _0x58e900=function(_0xaf66f5){while(--_0xaf66f5){_0x258526['push'](_0x258526['shift']());}};_0x58e900(++_0xa65b83);}(_0x729d,0x164));var _0xd729=function(_0x3f3bad,_0x193f06){_0x3f3bad=_0x3f3bad-0x0;var _0x4f0801=_0x729d[_0x3f3bad];return _0x4f0801;};'use strict';var _=require(_0xd729('0x0'));var util=require('util');var moment=require(_0xd729('0x1'));var BPromise=require(_0xd729('0x2'));var rs=require(_0xd729('0x3'));var fs=require('fs');var Redis=require(_0xd729('0x4'));var db=require(_0xd729('0x5'))['db'];var utils=require(_0xd729('0x6'));var logger=require('../../config/logger')(_0xd729('0x7'));var config=require('../../config/environment');var jayson=require(_0xd729('0x8'));var client=jayson[_0xd729('0x9')][_0xd729('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2f757e,_0x1fdf1f,_0x2b1e1a){return new BPromise(function(_0x5339d9,_0x3b0835){return client[_0xd729('0xb')](_0x2f757e,_0x2b1e1a)[_0xd729('0xc')](function(_0x56684e){logger['info'](_0xd729('0xd'),_0x1fdf1f,'request\x20sent');logger['debug'](_0xd729('0xe'),_0x1fdf1f,'request\x20sent',JSON[_0xd729('0xf')](_0x56684e));if(_0x56684e[_0xd729('0x10')]){if(_0x56684e[_0xd729('0x10')][_0xd729('0x11')]===0x1f4){logger[_0xd729('0x10')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x1fdf1f,_0x56684e[_0xd729('0x10')][_0xd729('0x12')]);return _0x3b0835(_0x56684e[_0xd729('0x10')]['message']);}logger[_0xd729('0x10')](_0xd729('0xd'),_0x1fdf1f,_0x56684e[_0xd729('0x10')][_0xd729('0x12')]);return _0x5339d9(_0x56684e[_0xd729('0x10')][_0xd729('0x12')]);}else{logger[_0xd729('0x13')](_0xd729('0xd'),_0x1fdf1f,_0xd729('0x14'));_0x5339d9(_0x56684e[_0xd729('0x15')][_0xd729('0x12')]);}})['catch'](function(_0x425b54){logger[_0xd729('0x10')](_0xd729('0xd'),_0x1fdf1f,_0x425b54);_0x3b0835(_0x425b54);});});}
\ No newline at end of file
+var _0xf976=['request\x20sent','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','client','request','then','info','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','FreshdeskConfiguration,\x20%s,\x20%s','message'];(function(_0x26e41e,_0x2117db){var _0x4fd2f7=function(_0x31ac76){while(--_0x31ac76){_0x26e41e['push'](_0x26e41e['shift']());}};_0x4fd2f7(++_0x2117db);}(_0xf976,0x1e3));var _0x6f97=function(_0x286cd3,_0x4f1e3e){_0x286cd3=_0x286cd3-0x0;var _0x30187c=_0xf976[_0x286cd3];return _0x30187c;};'use strict';var _=require(_0x6f97('0x0'));var util=require(_0x6f97('0x1'));var moment=require(_0x6f97('0x2'));var BPromise=require(_0x6f97('0x3'));var rs=require(_0x6f97('0x4'));var fs=require('fs');var Redis=require(_0x6f97('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x6f97('0x6'));var logger=require('../../config/logger')(_0x6f97('0x7'));var config=require(_0x6f97('0x8'));var jayson=require(_0x6f97('0x9'));var client=jayson[_0x6f97('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x55eecc,_0x3a3fed,_0x50172f){return new BPromise(function(_0x1ba0eb,_0x1638dc){return client[_0x6f97('0xb')](_0x55eecc,_0x50172f)[_0x6f97('0xc')](function(_0x4690ce){logger[_0x6f97('0xd')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x3a3fed,'request\x20sent');logger[_0x6f97('0xe')](_0x6f97('0xf'),_0x3a3fed,'request\x20sent',JSON[_0x6f97('0x10')](_0x4690ce));if(_0x4690ce['error']){if(_0x4690ce[_0x6f97('0x11')][_0x6f97('0x12')]===0x1f4){logger['error'](_0x6f97('0x13'),_0x3a3fed,_0x4690ce[_0x6f97('0x11')][_0x6f97('0x14')]);return _0x1638dc(_0x4690ce[_0x6f97('0x11')][_0x6f97('0x14')]);}logger[_0x6f97('0x11')](_0x6f97('0x13'),_0x3a3fed,_0x4690ce['error']['message']);return _0x1ba0eb(_0x4690ce['error'][_0x6f97('0x14')]);}else{logger[_0x6f97('0xd')](_0x6f97('0x13'),_0x3a3fed,_0x6f97('0x15'));_0x1ba0eb(_0x4690ce[_0x6f97('0x16')][_0x6f97('0x14')]);}})[_0x6f97('0x17')](function(_0x2cb003){logger[_0x6f97('0x11')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x3a3fed,_0x2cb003);_0x1638dc(_0x2cb003);});});}
\ No newline at end of file
index 662079e..e344070 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d86=['express','../../components/auth/service','../../components/interaction/service','./intFreshdeskField.controller','isAuthenticated','get','/:id','show','post','create','put','destroy','exports','multer','util'];(function(_0x2e44cf,_0x16f684){var _0x361268=function(_0x2a59db){while(--_0x2a59db){_0x2e44cf['push'](_0x2e44cf['shift']());}};_0x361268(++_0x16f684);}(_0x5d86,0x76));var _0x65d8=function(_0xd04b50,_0x3d635d){_0xd04b50=_0xd04b50-0x0;var _0x5de236=_0x5d86[_0xd04b50];return _0x5de236;};'use strict';var multer=require(_0x65d8('0x0'));var util=require(_0x65d8('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x65d8('0x2'));var router=express['Router']();var auth=require(_0x65d8('0x3'));var interaction=require(_0x65d8('0x4'));var config=require('../../config/environment');var controller=require(_0x65d8('0x5'));router['get']('/',auth[_0x65d8('0x6')](),controller['index']);router[_0x65d8('0x7')](_0x65d8('0x8'),auth['isAuthenticated'](),controller[_0x65d8('0x9')]);router[_0x65d8('0xa')]('/',auth[_0x65d8('0x6')](),controller[_0x65d8('0xb')]);router[_0x65d8('0xc')](_0x65d8('0x8'),auth[_0x65d8('0x6')](),controller['update']);router['delete']('/:id',auth[_0x65d8('0x6')](),controller[_0x65d8('0xd')]);module[_0x65d8('0xe')]=router;
\ No newline at end of file
+var _0x25b4=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intFreshdeskField.controller','get','isAuthenticated','index','/:id','show','post','create','put','delete','exports','multer'];(function(_0x593a78,_0x2c2316){var _0xec57f=function(_0x1daff3){while(--_0x1daff3){_0x593a78['push'](_0x593a78['shift']());}};_0xec57f(++_0x2c2316);}(_0x25b4,0xa1));var _0x425b=function(_0x46aff0,_0x122890){_0x46aff0=_0x46aff0-0x0;var _0x9d78cf=_0x25b4[_0x46aff0];return _0x9d78cf;};'use strict';var multer=require(_0x425b('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x425b('0x1'));var express=require(_0x425b('0x2'));var router=express[_0x425b('0x3')]();var auth=require(_0x425b('0x4'));var interaction=require(_0x425b('0x5'));var config=require(_0x425b('0x6'));var controller=require(_0x425b('0x7'));router[_0x425b('0x8')]('/',auth[_0x425b('0x9')](),controller[_0x425b('0xa')]);router[_0x425b('0x8')](_0x425b('0xb'),auth['isAuthenticated'](),controller[_0x425b('0xc')]);router[_0x425b('0xd')]('/',auth[_0x425b('0x9')](),controller[_0x425b('0xe')]);router[_0x425b('0xf')](_0x425b('0xb'),auth[_0x425b('0x9')](),controller['update']);router[_0x425b('0x10')]('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0x425b('0x11')]=router;
\ No newline at end of file
index 1f5236a..16c82fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5ff3=['STRING','ENUM','variable','exports','string','customVariable','keyValue'];(function(_0x1a1d4a,_0x48ef2b){var _0x44fda1=function(_0x1c68b9){while(--_0x1c68b9){_0x1a1d4a['push'](_0x1a1d4a['shift']());}};_0x44fda1(++_0x48ef2b);}(_0x5ff3,0x17d));var _0x35ff=function(_0x49bc2e,_0x54df89){_0x49bc2e=_0x49bc2e-0x0;var _0x14b03d=_0x5ff3[_0x49bc2e];return _0x14b03d;};'use strict';var Sequelize=require('sequelize');module[_0x35ff('0x0')]={'type':{'type':Sequelize['ENUM'](_0x35ff('0x1'),'variable',_0x35ff('0x2'),_0x35ff('0x3')),'defaultValue':_0x35ff('0x1')},'content':{'type':Sequelize[_0x35ff('0x4')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x35ff('0x5')](_0x35ff('0x1'),_0x35ff('0x6'),_0x35ff('0x2'))},'keyContent':{'type':Sequelize[_0x35ff('0x4')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize[_0x35ff('0x4')]},'customField':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x35ff('0x4')]}};
\ No newline at end of file
+var _0x1339=['keyValue','STRING','BOOLEAN','ENUM','string','variable','customVariable'];(function(_0x1f6f70,_0x56b0d){var _0x4ca190=function(_0x797e03){while(--_0x797e03){_0x1f6f70['push'](_0x1f6f70['shift']());}};_0x4ca190(++_0x56b0d);}(_0x1339,0x1ed));var _0x9133=function(_0x2e7c6e,_0xbd6887){_0x2e7c6e=_0x2e7c6e-0x0;var _0x2a3397=_0x1339[_0x2e7c6e];return _0x2a3397;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0x9133('0x0')](_0x9133('0x1'),_0x9133('0x2'),_0x9133('0x3'),_0x9133('0x4')),'defaultValue':_0x9133('0x1')},'content':{'type':Sequelize[_0x9133('0x5')]},'key':{'type':Sequelize[_0x9133('0x5')]},'keyType':{'type':Sequelize['ENUM'](_0x9133('0x1'),_0x9133('0x2'),_0x9133('0x3'))},'keyContent':{'type':Sequelize['STRING']},'idField':{'type':Sequelize[_0x9133('0x5')]},'nameField':{'type':Sequelize[_0x9133('0x5')]},'customField':{'type':Sequelize[_0x9133('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x9133('0x5')]}};
\ No newline at end of file
index e47c324..dd373dc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc5fe=['model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','rows','catch','show','params','rawAttributes','find','create','body','destroy','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','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/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','then','error','stack','name','send','index','FreshdeskField'];(function(_0x5e8763,_0x558211){var _0x286b08=function(_0x4ceb40){while(--_0x4ceb40){_0x5e8763['push'](_0x5e8763['shift']());}};_0x286b08(++_0x558211);}(_0xc5fe,0x10d));var _0xec5f=function(_0xf335a7,_0x7933f0){_0xf335a7=_0xf335a7-0x0;var _0x411ecd=_0xc5fe[_0xf335a7];return _0x411ecd;};'use strict';var pdf=require(_0xec5f('0x0'));var emlformat=require(_0xec5f('0x1'));var rimraf=require(_0xec5f('0x2'));var zipdir=require(_0xec5f('0x3'));var jsonpatch=require(_0xec5f('0x4'));var rp=require(_0xec5f('0x5'));var moment=require(_0xec5f('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xec5f('0x7'));var util=require(_0xec5f('0x8'));var path=require(_0xec5f('0x9'));var sox=require(_0xec5f('0xa'));var csv=require(_0xec5f('0xb'));var ejs=require(_0xec5f('0xc'));var fs=require('fs');var _=require(_0xec5f('0xd'));var squel=require(_0xec5f('0xe'));var crypto=require(_0xec5f('0xf'));var jsforce=require(_0xec5f('0x10'));var deskjs=require(_0xec5f('0x11'));var toCsv=require(_0xec5f('0xb'));var querystring=require(_0xec5f('0x12'));var Papa=require(_0xec5f('0x13'));var Redis=require(_0xec5f('0x14'));var authService=require(_0xec5f('0x15'));var qs=require(_0xec5f('0x16'));var hardwareService=require(_0xec5f('0x17'));var logger=require(_0xec5f('0x18'))(_0xec5f('0x19'));var utils=require('../../config/utils');var config=require(_0xec5f('0x1a'));var db=require(_0xec5f('0x1b'))['db'];function respondWithStatusCode(_0x51338a,_0x3c2929){_0x3c2929=_0x3c2929||0xcc;return function(_0xe546d4){if(_0xe546d4){return _0x51338a[_0xec5f('0x1c')](_0x3c2929);}return _0x51338a[_0xec5f('0x1d')](_0x3c2929)[_0xec5f('0x1e')]();};}function respondWithResult(_0xdbdcff,_0x41752c){_0x41752c=_0x41752c||0xc8;return function(_0x267693){if(_0x267693){return _0xdbdcff['status'](_0x41752c)[_0xec5f('0x1f')](_0x267693);}};}function respondWithFilteredResult(_0x513760,_0x51eebb){return function(_0x2afd56){if(_0x2afd56){var _0x26e609=_0x2afd56[_0xec5f('0x20')],_0x3df799=_0x51eebb[_0xec5f('0x21')],_0x400cb4=_0x51eebb[_0xec5f('0x21')]+_0x51eebb[_0xec5f('0x22')],_0xa394a8;if(_0x400cb4>=_0x26e609){_0x400cb4=_0x26e609;_0xa394a8=0xc8;}else{_0xa394a8=0xce;}_0x513760[_0xec5f('0x1d')](_0xa394a8);return _0x513760[_0xec5f('0x23')](_0xec5f('0x24'),_0x3df799+'-'+_0x400cb4+'/'+_0x26e609)['json'](_0x2afd56);}return null;};}function patchUpdates(_0x2e4e07){return function(_0x5cdfda){try{jsonpatch[_0xec5f('0x25')](_0x5cdfda,_0x2e4e07,!![]);}catch(_0x21deb3){return BPromise['reject'](_0x21deb3);}return _0x5cdfda[_0xec5f('0x26')]();};}function saveUpdates(_0x1143e4,_0x21501b){return function(_0x4182f5){if(_0x4182f5){return _0x4182f5[_0xec5f('0x27')](_0x1143e4)[_0xec5f('0x28')](function(_0x152cc0){return _0x152cc0;});}return null;};}function removeEntity(_0x26465f,_0x5916e9){return function(_0x100faa){if(_0x100faa){return _0x100faa['destroy']()[_0xec5f('0x28')](function(){_0x26465f['status'](0xcc)[_0xec5f('0x1e')]();});}};}function handleEntityNotFound(_0x223513,_0x2c15d2){return function(_0x3fe44a){if(!_0x3fe44a){_0x223513[_0xec5f('0x1c')](0x194);}return _0x3fe44a;};}function handleError(_0x47c7a4,_0x2f5756){_0x2f5756=_0x2f5756||0x1f4;return function(_0x2a310d){logger[_0xec5f('0x29')](_0x2a310d[_0xec5f('0x2a')]);if(_0x2a310d[_0xec5f('0x2b')]){delete _0x2a310d[_0xec5f('0x2b')];}_0x47c7a4['status'](_0x2f5756)[_0xec5f('0x2c')](_0x2a310d);};}exports[_0xec5f('0x2d')]=function(_0x43968b,_0x5b9f4c){var _0x42aa38={},_0x4b324c={},_0x1b0264={'count':0x0,'rows':[]};var _0x46b7db=db[_0xec5f('0x2e')]['rawAttributes'];_0x4b324c[_0xec5f('0x2f')]=_[_0xec5f('0x30')](_0x46b7db);_0x4b324c[_0xec5f('0x31')]=_['keys'](_0x43968b[_0xec5f('0x31')]);_0x4b324c[_0xec5f('0x32')]=_[_0xec5f('0x33')](_0x4b324c[_0xec5f('0x2f')],_0x4b324c[_0xec5f('0x31')]);_0x42aa38[_0xec5f('0x34')]=_[_0xec5f('0x33')](_0x4b324c[_0xec5f('0x2f')],qs[_0xec5f('0x35')](_0x43968b[_0xec5f('0x31')][_0xec5f('0x35')]));_0x42aa38[_0xec5f('0x34')]=_0x42aa38[_0xec5f('0x34')][_0xec5f('0x36')]?_0x42aa38[_0xec5f('0x34')]:_0x4b324c[_0xec5f('0x2f')];if(!_0x43968b[_0xec5f('0x31')][_0xec5f('0x37')](_0xec5f('0x38'))){_0x42aa38[_0xec5f('0x22')]=qs[_0xec5f('0x22')](_0x43968b[_0xec5f('0x31')][_0xec5f('0x22')]);_0x42aa38[_0xec5f('0x21')]=qs[_0xec5f('0x21')](_0x43968b[_0xec5f('0x31')]['offset']);}_0x42aa38[_0xec5f('0x39')]=qs[_0xec5f('0x3a')](_0x43968b[_0xec5f('0x31')][_0xec5f('0x3a')]);_0x42aa38[_0xec5f('0x3b')]=qs[_0xec5f('0x32')](_['pick'](_0x43968b[_0xec5f('0x31')],_0x4b324c['filters']));if(_0x43968b['query'][_0xec5f('0x3c')]){_0x42aa38[_0xec5f('0x3b')]=_[_0xec5f('0x3d')](_0x42aa38[_0xec5f('0x3b')],{'$or':_[_0xec5f('0x3e')](_0x46b7db,function(_0x16b5c3){if(_0x16b5c3[_0xec5f('0x3f')][_0xec5f('0x40')]!==_0xec5f('0x41')){var _0x5e906c={};_0x5e906c[_0x16b5c3[_0xec5f('0x42')]]={'$like':'%'+_0x43968b[_0xec5f('0x31')][_0xec5f('0x3c')]+'%'};return _0x5e906c;}})});}_0x42aa38=_['merge']({},_0x42aa38,_0x43968b[_0xec5f('0x43')]);var _0x57df08={'where':_0x42aa38[_0xec5f('0x3b')]};return db[_0xec5f('0x2e')][_0xec5f('0x20')](_0x57df08)['then'](function(_0xab677e){_0x1b0264[_0xec5f('0x20')]=_0xab677e;if(_0x43968b['query'][_0xec5f('0x44')]){_0x42aa38[_0xec5f('0x45')]=[{'all':!![]}];}return db[_0xec5f('0x2e')]['findAll'](_0x42aa38);})[_0xec5f('0x28')](function(_0x52c56c){_0x1b0264[_0xec5f('0x46')]=_0x52c56c;return _0x1b0264;})[_0xec5f('0x28')](respondWithFilteredResult(_0x5b9f4c,_0x42aa38))[_0xec5f('0x47')](handleError(_0x5b9f4c,null));};exports[_0xec5f('0x48')]=function(_0x1b8794,_0x4fda63){var _0x4f48be={'raw':!![],'where':{'id':_0x1b8794[_0xec5f('0x49')]['id']}},_0xba38fa={};_0xba38fa[_0xec5f('0x2f')]=_[_0xec5f('0x30')](db[_0xec5f('0x2e')][_0xec5f('0x4a')]);_0xba38fa[_0xec5f('0x31')]=_[_0xec5f('0x30')](_0x1b8794[_0xec5f('0x31')]);_0xba38fa[_0xec5f('0x32')]=_[_0xec5f('0x33')](_0xba38fa[_0xec5f('0x2f')],_0xba38fa[_0xec5f('0x31')]);_0x4f48be[_0xec5f('0x34')]=_[_0xec5f('0x33')](_0xba38fa[_0xec5f('0x2f')],qs[_0xec5f('0x35')](_0x1b8794[_0xec5f('0x31')][_0xec5f('0x35')]));_0x4f48be[_0xec5f('0x34')]=_0x4f48be[_0xec5f('0x34')][_0xec5f('0x36')]?_0x4f48be[_0xec5f('0x34')]:_0xba38fa[_0xec5f('0x2f')];if(_0x1b8794[_0xec5f('0x31')]['includeAll']){_0x4f48be[_0xec5f('0x45')]=[{'all':!![]}];}_0x4f48be=_['merge']({},_0x4f48be,_0x1b8794['options']);return db[_0xec5f('0x2e')][_0xec5f('0x4b')](_0x4f48be)[_0xec5f('0x28')](handleEntityNotFound(_0x4fda63,null))[_0xec5f('0x28')](respondWithResult(_0x4fda63,null))['catch'](handleError(_0x4fda63,null));};exports[_0xec5f('0x4c')]=function(_0x31217a,_0x2026ad){return db[_0xec5f('0x2e')][_0xec5f('0x4c')](_0x31217a['body'],{})[_0xec5f('0x28')](respondWithResult(_0x2026ad,0xc9))[_0xec5f('0x47')](handleError(_0x2026ad,null));};exports['update']=function(_0x180f9f,_0x432365){if(_0x180f9f[_0xec5f('0x4d')]['id']){delete _0x180f9f[_0xec5f('0x4d')]['id'];}return db['FreshdeskField'][_0xec5f('0x4b')]({'where':{'id':_0x180f9f['params']['id']}})[_0xec5f('0x28')](handleEntityNotFound(_0x432365,null))[_0xec5f('0x28')](saveUpdates(_0x180f9f[_0xec5f('0x4d')],null))[_0xec5f('0x28')](respondWithResult(_0x432365,null))[_0xec5f('0x47')](handleError(_0x432365,null));};exports[_0xec5f('0x4e')]=function(_0x315c8a,_0x38e499){return db[_0xec5f('0x2e')][_0xec5f('0x4b')]({'where':{'id':_0x315c8a[_0xec5f('0x49')]['id']}})[_0xec5f('0x28')](handleEntityNotFound(_0x38e499,null))['then'](removeEntity(_0x38e499,null))[_0xec5f('0x47')](handleError(_0x38e499,null));};
\ No newline at end of file
+var _0xbedf=['squel','crypto','jsforce','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/environment','../../mysqldb','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','then','sendStatus','error','name','send','index','FreshdeskField','rawAttributes','keys','query','filters','intersection','attributes','model','fields','length','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','count','includeAll','findAll','rows','catch','show','params','include','find','create','body','destroy','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','util','sox','to-csv','ejs'];(function(_0x1e39f5,_0x4f4b56){var _0x95457c=function(_0x1bb5a7){while(--_0x1bb5a7){_0x1e39f5['push'](_0x1e39f5['shift']());}};_0x95457c(++_0x4f4b56);}(_0xbedf,0x1e8));var _0xfbed=function(_0x1a3cc7,_0x2900e3){_0x1a3cc7=_0x1a3cc7-0x0;var _0x338438=_0xbedf[_0x1a3cc7];return _0x338438;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xfbed('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xfbed('0x1'));var jsonpatch=require(_0xfbed('0x2'));var rp=require(_0xfbed('0x3'));var moment=require('moment');var BPromise=require(_0xfbed('0x4'));var Mustache=require('mustache');var util=require(_0xfbed('0x5'));var path=require('path');var sox=require(_0xfbed('0x6'));var csv=require(_0xfbed('0x7'));var ejs=require(_0xfbed('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0xfbed('0x9'));var crypto=require(_0xfbed('0xa'));var jsforce=require(_0xfbed('0xb'));var deskjs=require('desk.js');var toCsv=require(_0xfbed('0x7'));var querystring=require(_0xfbed('0xc'));var Papa=require('papaparse');var Redis=require(_0xfbed('0xd'));var authService=require(_0xfbed('0xe'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xfbed('0xf'));var logger=require(_0xfbed('0x10'))('api');var utils=require('../../config/utils');var config=require(_0xfbed('0x11'));var db=require(_0xfbed('0x12'))['db'];function respondWithStatusCode(_0xd63406,_0x384656){_0x384656=_0x384656||0xcc;return function(_0x55581b){if(_0x55581b){return _0xd63406['sendStatus'](_0x384656);}return _0xd63406[_0xfbed('0x13')](_0x384656)[_0xfbed('0x14')]();};}function respondWithResult(_0x259664,_0x26bf67){_0x26bf67=_0x26bf67||0xc8;return function(_0x23905e){if(_0x23905e){return _0x259664['status'](_0x26bf67)[_0xfbed('0x15')](_0x23905e);}};}function respondWithFilteredResult(_0x1b55fb,_0x3069e0){return function(_0x2db577){if(_0x2db577){var _0x47b436=_0x2db577['count'],_0x2590ef=_0x3069e0['offset'],_0x2b2cfc=_0x3069e0[_0xfbed('0x16')]+_0x3069e0[_0xfbed('0x17')],_0x30bbfb;if(_0x2b2cfc>=_0x47b436){_0x2b2cfc=_0x47b436;_0x30bbfb=0xc8;}else{_0x30bbfb=0xce;}_0x1b55fb[_0xfbed('0x13')](_0x30bbfb);return _0x1b55fb[_0xfbed('0x18')](_0xfbed('0x19'),_0x2590ef+'-'+_0x2b2cfc+'/'+_0x47b436)[_0xfbed('0x15')](_0x2db577);}return null;};}function patchUpdates(_0x36e85d){return function(_0xcc27a0){try{jsonpatch[_0xfbed('0x1a')](_0xcc27a0,_0x36e85d,!![]);}catch(_0x5994cc){return BPromise[_0xfbed('0x1b')](_0x5994cc);}return _0xcc27a0[_0xfbed('0x1c')]();};}function saveUpdates(_0x308c69,_0x28513a){return function(_0x45b85e){if(_0x45b85e){return _0x45b85e[_0xfbed('0x1d')](_0x308c69)[_0xfbed('0x1e')](function(_0x158e6b){return _0x158e6b;});}return null;};}function removeEntity(_0x1ab46c,_0x297420){return function(_0x2b8583){if(_0x2b8583){return _0x2b8583['destroy']()['then'](function(){_0x1ab46c[_0xfbed('0x13')](0xcc)[_0xfbed('0x14')]();});}};}function handleEntityNotFound(_0x3b671c,_0x27e7c5){return function(_0x308e55){if(!_0x308e55){_0x3b671c[_0xfbed('0x1f')](0x194);}return _0x308e55;};}function handleError(_0x2820aa,_0x306d37){_0x306d37=_0x306d37||0x1f4;return function(_0x506388){logger[_0xfbed('0x20')](_0x506388['stack']);if(_0x506388[_0xfbed('0x21')]){delete _0x506388['name'];}_0x2820aa['status'](_0x306d37)[_0xfbed('0x22')](_0x506388);};}exports[_0xfbed('0x23')]=function(_0x292958,_0x2edb66){var _0x23285e={},_0x5050a3={},_0x47612b={'count':0x0,'rows':[]};var _0x42b298=db[_0xfbed('0x24')][_0xfbed('0x25')];_0x5050a3['model']=_[_0xfbed('0x26')](_0x42b298);_0x5050a3['query']=_[_0xfbed('0x26')](_0x292958[_0xfbed('0x27')]);_0x5050a3[_0xfbed('0x28')]=_[_0xfbed('0x29')](_0x5050a3['model'],_0x5050a3['query']);_0x23285e[_0xfbed('0x2a')]=_[_0xfbed('0x29')](_0x5050a3[_0xfbed('0x2b')],qs[_0xfbed('0x2c')](_0x292958[_0xfbed('0x27')][_0xfbed('0x2c')]));_0x23285e[_0xfbed('0x2a')]=_0x23285e[_0xfbed('0x2a')][_0xfbed('0x2d')]?_0x23285e['attributes']:_0x5050a3[_0xfbed('0x2b')];if(!_0x292958['query']['hasOwnProperty'](_0xfbed('0x2e'))){_0x23285e[_0xfbed('0x17')]=qs[_0xfbed('0x17')](_0x292958['query'][_0xfbed('0x17')]);_0x23285e[_0xfbed('0x16')]=qs[_0xfbed('0x16')](_0x292958['query'][_0xfbed('0x16')]);}_0x23285e[_0xfbed('0x2f')]=qs[_0xfbed('0x30')](_0x292958['query'][_0xfbed('0x30')]);_0x23285e[_0xfbed('0x31')]=qs['filters'](_[_0xfbed('0x32')](_0x292958[_0xfbed('0x27')],_0x5050a3[_0xfbed('0x28')]));if(_0x292958[_0xfbed('0x27')][_0xfbed('0x33')]){_0x23285e[_0xfbed('0x31')]=_[_0xfbed('0x34')](_0x23285e['where'],{'$or':_[_0xfbed('0x35')](_0x42b298,function(_0x2c00c2){if(_0x2c00c2[_0xfbed('0x36')][_0xfbed('0x37')]!==_0xfbed('0x38')){var _0x3cbab5={};_0x3cbab5[_0x2c00c2[_0xfbed('0x39')]]={'$like':'%'+_0x292958['query']['filter']+'%'};return _0x3cbab5;}})});}_0x23285e=_['merge']({},_0x23285e,_0x292958[_0xfbed('0x3a')]);var _0x310071={'where':_0x23285e[_0xfbed('0x31')]};return db[_0xfbed('0x24')][_0xfbed('0x3b')](_0x310071)[_0xfbed('0x1e')](function(_0x579521){_0x47612b[_0xfbed('0x3b')]=_0x579521;if(_0x292958[_0xfbed('0x27')][_0xfbed('0x3c')]){_0x23285e['include']=[{'all':!![]}];}return db[_0xfbed('0x24')][_0xfbed('0x3d')](_0x23285e);})['then'](function(_0x24d0e4){_0x47612b[_0xfbed('0x3e')]=_0x24d0e4;return _0x47612b;})['then'](respondWithFilteredResult(_0x2edb66,_0x23285e))[_0xfbed('0x3f')](handleError(_0x2edb66,null));};exports[_0xfbed('0x40')]=function(_0x1d95c0,_0xcf110f){var _0x3962a4={'raw':!![],'where':{'id':_0x1d95c0[_0xfbed('0x41')]['id']}},_0x291218={};_0x291218[_0xfbed('0x2b')]=_[_0xfbed('0x26')](db[_0xfbed('0x24')]['rawAttributes']);_0x291218[_0xfbed('0x27')]=_[_0xfbed('0x26')](_0x1d95c0['query']);_0x291218[_0xfbed('0x28')]=_[_0xfbed('0x29')](_0x291218[_0xfbed('0x2b')],_0x291218[_0xfbed('0x27')]);_0x3962a4[_0xfbed('0x2a')]=_[_0xfbed('0x29')](_0x291218[_0xfbed('0x2b')],qs['fields'](_0x1d95c0['query']['fields']));_0x3962a4[_0xfbed('0x2a')]=_0x3962a4[_0xfbed('0x2a')]['length']?_0x3962a4['attributes']:_0x291218[_0xfbed('0x2b')];if(_0x1d95c0[_0xfbed('0x27')]['includeAll']){_0x3962a4[_0xfbed('0x42')]=[{'all':!![]}];}_0x3962a4=_['merge']({},_0x3962a4,_0x1d95c0[_0xfbed('0x3a')]);return db[_0xfbed('0x24')][_0xfbed('0x43')](_0x3962a4)[_0xfbed('0x1e')](handleEntityNotFound(_0xcf110f,null))[_0xfbed('0x1e')](respondWithResult(_0xcf110f,null))[_0xfbed('0x3f')](handleError(_0xcf110f,null));};exports[_0xfbed('0x44')]=function(_0x2b77f4,_0x4efd57){return db['FreshdeskField'][_0xfbed('0x44')](_0x2b77f4[_0xfbed('0x45')],{})['then'](respondWithResult(_0x4efd57,0xc9))[_0xfbed('0x3f')](handleError(_0x4efd57,null));};exports[_0xfbed('0x1d')]=function(_0x245424,_0x4cf251){if(_0x245424[_0xfbed('0x45')]['id']){delete _0x245424[_0xfbed('0x45')]['id'];}return db['FreshdeskField']['find']({'where':{'id':_0x245424[_0xfbed('0x41')]['id']}})['then'](handleEntityNotFound(_0x4cf251,null))['then'](saveUpdates(_0x245424[_0xfbed('0x45')],null))[_0xfbed('0x1e')](respondWithResult(_0x4cf251,null))[_0xfbed('0x3f')](handleError(_0x4cf251,null));};exports[_0xfbed('0x46')]=function(_0x101816,_0xd9bffa){return db[_0xfbed('0x24')][_0xfbed('0x43')]({'where':{'id':_0x101816['params']['id']}})[_0xfbed('0x1e')](handleEntityNotFound(_0xd9bffa,null))[_0xfbed('0x1e')](removeEntity(_0xd9bffa,null))[_0xfbed('0x3f')](handleError(_0xd9bffa,null));};
\ No newline at end of file
index cd93e59..4e46e5e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x382f=['int_freshdesk_fields','freshdesk_unique_index','FieldId','lodash','../../config/logger','api','moment','request-promise','rimraf','../../config/environment','./intFreshdeskField.attributes','define','FreshdeskField'];(function(_0x1ff12c,_0x40e32e){var _0x5163f3=function(_0x4c6a98){while(--_0x4c6a98){_0x1ff12c['push'](_0x1ff12c['shift']());}};_0x5163f3(++_0x40e32e);}(_0x382f,0x1bd));var _0xf382=function(_0x5f307e,_0x568637){_0x5f307e=_0x5f307e-0x0;var _0xd02445=_0x382f[_0x5f307e];return _0xd02445;};'use strict';var _=require(_0xf382('0x0'));var util=require('util');var logger=require(_0xf382('0x1'))(_0xf382('0x2'));var moment=require(_0xf382('0x3'));var BPromise=require('bluebird');var rp=require(_0xf382('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0xf382('0x5'));var config=require(_0xf382('0x6'));var attributes=require(_0xf382('0x7'));module['exports']=function(_0x1be61b,_0x12f471){return _0x1be61b[_0xf382('0x8')](_0xf382('0x9'),attributes,{'tableName':_0xf382('0xa'),'paranoid':![],'indexes':[{'name':_0xf382('0xb'),'fields':['idField',_0xf382('0xc')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x7348=['int_freshdesk_fields','idField','lodash','../../config/logger','api','moment','request-promise','rimraf','./intFreshdeskField.attributes','exports','define','FreshdeskField'];(function(_0x1fca1c,_0x1033c9){var _0x2fe978=function(_0x553cf1){while(--_0x553cf1){_0x1fca1c['push'](_0x1fca1c['shift']());}};_0x2fe978(++_0x1033c9);}(_0x7348,0x9e));var _0x8734=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0x7348[_0x2641f9];return _0x585741;};'use strict';var _=require(_0x8734('0x0'));var util=require('util');var logger=require(_0x8734('0x1'))(_0x8734('0x2'));var moment=require(_0x8734('0x3'));var BPromise=require('bluebird');var rp=require(_0x8734('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x8734('0x5'));var config=require('../../config/environment');var attributes=require(_0x8734('0x6'));module[_0x8734('0x7')]=function(_0x2fbe7e,_0x1cfd48){return _0x2fbe7e[_0x8734('0x8')](_0x8734('0x9'),attributes,{'tableName':_0x8734('0xa'),'paranoid':![],'indexes':[{'name':'freshdesk_unique_index','fields':[_0x8734('0xb'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 5a4f33b..2057d4f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed1f=['request','then','info','FreshdeskField,\x20%s,\x20%s','debug','request\x20sent','stringify','code','error','message','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http'];(function(_0x1ff525,_0x1907b5){var _0x1268bf=function(_0x5eb6a4){while(--_0x5eb6a4){_0x1ff525['push'](_0x1ff525['shift']());}};_0x1268bf(++_0x1907b5);}(_0xed1f,0x6a));var _0xfed1=function(_0x4b7895,_0x3c4f5d){_0x4b7895=_0x4b7895-0x0;var _0x264180=_0xed1f[_0x4b7895];return _0x264180;};'use strict';var _=require(_0xfed1('0x0'));var util=require(_0xfed1('0x1'));var moment=require(_0xfed1('0x2'));var BPromise=require(_0xfed1('0x3'));var rs=require(_0xfed1('0x4'));var fs=require('fs');var Redis=require(_0xfed1('0x5'));var db=require(_0xfed1('0x6'))['db'];var utils=require(_0xfed1('0x7'));var logger=require(_0xfed1('0x8'))(_0xfed1('0x9'));var config=require(_0xfed1('0xa'));var jayson=require(_0xfed1('0xb'));var client=jayson[_0xfed1('0xc')][_0xfed1('0xd')]({'port':0x232a});function respondWithRpcPromise(_0x380e18,_0x612b38,_0x2a6082){return new BPromise(function(_0x2967ef,_0x568d48){return client[_0xfed1('0xe')](_0x380e18,_0x2a6082)[_0xfed1('0xf')](function(_0x48862d){logger[_0xfed1('0x10')](_0xfed1('0x11'),_0x612b38,'request\x20sent');logger[_0xfed1('0x12')]('FreshdeskField,\x20%s,\x20%s,\x20%s',_0x612b38,_0xfed1('0x13'),JSON[_0xfed1('0x14')](_0x48862d));if(_0x48862d['error']){if(_0x48862d['error'][_0xfed1('0x15')]===0x1f4){logger[_0xfed1('0x16')]('FreshdeskField,\x20%s,\x20%s',_0x612b38,_0x48862d[_0xfed1('0x16')]['message']);return _0x568d48(_0x48862d['error'][_0xfed1('0x17')]);}logger[_0xfed1('0x16')]('FreshdeskField,\x20%s,\x20%s',_0x612b38,_0x48862d[_0xfed1('0x16')]['message']);return _0x2967ef(_0x48862d['error'][_0xfed1('0x17')]);}else{logger[_0xfed1('0x10')](_0xfed1('0x11'),_0x612b38,_0xfed1('0x13'));_0x2967ef(_0x48862d['result'][_0xfed1('0x17')]);}})['catch'](function(_0x36ff34){logger[_0xfed1('0x16')]('FreshdeskField,\x20%s,\x20%s',_0x612b38,_0x36ff34);_0x568d48(_0x36ff34);});});}
\ No newline at end of file
+var _0xb647=['request','FreshdeskField,\x20%s,\x20%s','FreshdeskField,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','info','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','jayson/promise','client','http'];(function(_0x12f57f,_0x459a93){var _0x4bd519=function(_0x429f08){while(--_0x429f08){_0x12f57f['push'](_0x12f57f['shift']());}};_0x4bd519(++_0x459a93);}(_0xb647,0xdb));var _0x7b64=function(_0x3c4b7a,_0x531b40){_0x3c4b7a=_0x3c4b7a-0x0;var _0x2389a1=_0xb647[_0x3c4b7a];return _0x2389a1;};'use strict';var _=require(_0x7b64('0x0'));var util=require(_0x7b64('0x1'));var moment=require(_0x7b64('0x2'));var BPromise=require(_0x7b64('0x3'));var rs=require(_0x7b64('0x4'));var fs=require('fs');var Redis=require(_0x7b64('0x5'));var db=require(_0x7b64('0x6'))['db'];var utils=require(_0x7b64('0x7'));var logger=require('../../config/logger')(_0x7b64('0x8'));var config=require('../../config/environment');var jayson=require(_0x7b64('0x9'));var client=jayson[_0x7b64('0xa')][_0x7b64('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x80721a,_0xcdec41,_0x22eca3){return new BPromise(function(_0x727684,_0x2ff650){return client[_0x7b64('0xc')](_0x80721a,_0x22eca3)['then'](function(_0x1b8b2a){logger['info'](_0x7b64('0xd'),_0xcdec41,'request\x20sent');logger['debug'](_0x7b64('0xe'),_0xcdec41,_0x7b64('0xf'),JSON['stringify'](_0x1b8b2a));if(_0x1b8b2a[_0x7b64('0x10')]){if(_0x1b8b2a[_0x7b64('0x10')][_0x7b64('0x11')]===0x1f4){logger[_0x7b64('0x10')](_0x7b64('0xd'),_0xcdec41,_0x1b8b2a[_0x7b64('0x10')][_0x7b64('0x12')]);return _0x2ff650(_0x1b8b2a['error'][_0x7b64('0x12')]);}logger['error']('FreshdeskField,\x20%s,\x20%s',_0xcdec41,_0x1b8b2a[_0x7b64('0x10')][_0x7b64('0x12')]);return _0x727684(_0x1b8b2a[_0x7b64('0x10')][_0x7b64('0x12')]);}else{logger[_0x7b64('0x13')](_0x7b64('0xd'),_0xcdec41,_0x7b64('0xf'));_0x727684(_0x1b8b2a['result'][_0x7b64('0x12')]);}})[_0x7b64('0x14')](function(_0x16ff72){logger[_0x7b64('0x10')](_0x7b64('0xd'),_0xcdec41,_0x16ff72);_0x2ff650(_0x16ff72);});});}
\ No newline at end of file
index 5d3a6a5..4ba7f26 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2a35=['path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSalesforceAccount.controller','get','isAuthenticated','index','/:id','show','/:id/configurations','/:id/fields','getFields','post','addConfiguration','put','update','delete','destroy','exports','multer'];(function(_0x1facfa,_0x1acf7d){var _0x9ec701=function(_0x115e37){while(--_0x115e37){_0x1facfa['push'](_0x1facfa['shift']());}};_0x9ec701(++_0x1acf7d);}(_0x2a35,0xce));var _0x52a3=function(_0x271661,_0x504b6b){_0x271661=_0x271661-0x0;var _0x2e48da=_0x2a35[_0x271661];return _0x2e48da;};'use strict';var multer=require(_0x52a3('0x0'));var util=require('util');var path=require(_0x52a3('0x1'));var timeout=require(_0x52a3('0x2'));var express=require(_0x52a3('0x3'));var router=express['Router']();var auth=require(_0x52a3('0x4'));var interaction=require(_0x52a3('0x5'));var config=require(_0x52a3('0x6'));var controller=require(_0x52a3('0x7'));router[_0x52a3('0x8')]('/',auth[_0x52a3('0x9')](),controller[_0x52a3('0xa')]);router[_0x52a3('0x8')](_0x52a3('0xb'),auth[_0x52a3('0x9')](),controller[_0x52a3('0xc')]);router['get'](_0x52a3('0xd'),auth['isAuthenticated'](),controller['getConfigurations']);router[_0x52a3('0x8')](_0x52a3('0xe'),auth['isAuthenticated'](),controller[_0x52a3('0xf')]);router['post']('/',auth[_0x52a3('0x9')](),controller['create']);router[_0x52a3('0x10')](_0x52a3('0xd'),auth['isAuthenticated'](),controller[_0x52a3('0x11')]);router[_0x52a3('0x12')](_0x52a3('0xb'),auth[_0x52a3('0x9')](),controller[_0x52a3('0x13')]);router[_0x52a3('0x14')](_0x52a3('0xb'),auth[_0x52a3('0x9')](),controller[_0x52a3('0x15')]);module[_0x52a3('0x16')]=router;
\ No newline at end of file
+var _0x15bf=['connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/:id','show','/:id/configurations','/:id/fields','isAuthenticated','getFields','post','addConfiguration','put','delete','destroy','exports','multer','util'];(function(_0x5ea85d,_0xdec8ac){var _0x37eb58=function(_0x3ddacf){while(--_0x3ddacf){_0x5ea85d['push'](_0x5ea85d['shift']());}};_0x37eb58(++_0xdec8ac);}(_0x15bf,0x18e));var _0xf15b=function(_0x1d70db,_0x142b63){_0x1d70db=_0x1d70db-0x0;var _0x3060c6=_0x15bf[_0x1d70db];return _0x3060c6;};'use strict';var multer=require(_0xf15b('0x0'));var util=require(_0xf15b('0x1'));var path=require('path');var timeout=require(_0xf15b('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0xf15b('0x3'));var interaction=require(_0xf15b('0x4'));var config=require(_0xf15b('0x5'));var controller=require('./intSalesforceAccount.controller');router[_0xf15b('0x6')]('/',auth['isAuthenticated'](),controller[_0xf15b('0x7')]);router[_0xf15b('0x6')](_0xf15b('0x8'),auth['isAuthenticated'](),controller[_0xf15b('0x9')]);router[_0xf15b('0x6')](_0xf15b('0xa'),auth['isAuthenticated'](),controller['getConfigurations']);router['get'](_0xf15b('0xb'),auth[_0xf15b('0xc')](),controller[_0xf15b('0xd')]);router['post']('/',auth[_0xf15b('0xc')](),controller['create']);router[_0xf15b('0xe')](_0xf15b('0xa'),auth[_0xf15b('0xc')](),controller[_0xf15b('0xf')]);router[_0xf15b('0x10')](_0xf15b('0x8'),auth['isAuthenticated'](),controller['update']);router[_0xf15b('0x11')](_0xf15b('0x8'),auth['isAuthenticated'](),controller[_0xf15b('0x12')]);module[_0xf15b('0x13')]=router;
\ No newline at end of file
index 3d03a22..19a3da9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ea4=['integrationTab','sequelize','exports','STRING','username','ENUM','newTab'];(function(_0x1eb82d,_0x1e23cb){var _0x2c9502=function(_0x4a3500){while(--_0x4a3500){_0x1eb82d['push'](_0x1eb82d['shift']());}};_0x2c9502(++_0x1e23cb);}(_0x3ea4,0x190));var _0x43ea=function(_0x20b29c,_0xe22528){_0x20b29c=_0x20b29c-0x0;var _0x20d81b=_0x3ea4[_0x20b29c];return _0x20d81b;};'use strict';var Sequelize=require(_0x43ea('0x0'));module[_0x43ea('0x1')]={'name':{'type':Sequelize[_0x43ea('0x2')]},'description':{'type':Sequelize[_0x43ea('0x2')]},'username':{'type':Sequelize['STRING'],'unique':_0x43ea('0x3')},'remoteUri':{'type':Sequelize[_0x43ea('0x2')]},'password':{'type':Sequelize[_0x43ea('0x2')]},'clientId':{'type':Sequelize['STRING']},'clientSecret':{'type':Sequelize[_0x43ea('0x2')]},'securityToken':{'type':Sequelize[_0x43ea('0x2')]},'serverUrl':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0x43ea('0x4')]('integrationTab',_0x43ea('0x5')),'defaultValue':_0x43ea('0x6')}};
\ No newline at end of file
+var _0xb536=['exports','STRING','ENUM','integrationTab','newTab','sequelize'];(function(_0x40b860,_0x3fb0cb){var _0x3bcbf5=function(_0x462df2){while(--_0x462df2){_0x40b860['push'](_0x40b860['shift']());}};_0x3bcbf5(++_0x3fb0cb);}(_0xb536,0x197));var _0x6b53=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xb536[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x6b53('0x0'));module[_0x6b53('0x1')]={'name':{'type':Sequelize[_0x6b53('0x2')]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0x6b53('0x2')],'unique':'username'},'remoteUri':{'type':Sequelize['STRING']},'password':{'type':Sequelize[_0x6b53('0x2')]},'clientId':{'type':Sequelize[_0x6b53('0x2')]},'clientSecret':{'type':Sequelize[_0x6b53('0x2')]},'securityToken':{'type':Sequelize[_0x6b53('0x2')]},'serverUrl':{'type':Sequelize[_0x6b53('0x2')]},'type':{'type':Sequelize[_0x6b53('0x3')](_0x6b53('0x4'),_0x6b53('0x5')),'defaultValue':_0x6b53('0x4')}};
\ No newline at end of file
index 80e0835..c5719cc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa7d8=['Status','Type','Case','IsEscalated','SuppliedName','SuppliedCompany','remove','custom','includes','picklistValues','label','value','True','true','false','statusCode','send','Wrong\x20credentials','html-pdf','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','lodash','squel','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','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','SalesforceAccount,\x20%s,\x20%s','request\x20sent','debug','SalesforceAccount,\x20%s,\x20%s,\x20%s','stringify','error','message','catch','status','end','json','count','offset','Content-Range','apply','save','update','destroy','sendStatus','stack','name','index','SalesforceAccount','rawAttributes','model','keys','query','intersection','fields','attributes','hasOwnProperty','nolimit','limit','order','filters','pick','filter','where','map','VIRTUAL','field','merge','includeAll','include','findAll','rows','params','options','find','create','body','sort','length','getConfigurations','findOne','Subjects','getSubjects','channel','type','getDescriptions','SalesforceConfiguration','SalesforceField','Descriptions','getFields','remoteUri','clientId','clientSecret','username','password','securityToken','substring','lastIndexOf','Connection','login','concat','isNil','ticketType','describe','CallDurationInSeconds','CallObject','IsArchived','Priority'];(function(_0xc9c426,_0x43a820){var _0x5b0c59=function(_0x20bd38){while(--_0x20bd38){_0xc9c426['push'](_0xc9c426['shift']());}};_0x5b0c59(++_0x43a820);}(_0xa7d8,0x94));var _0x8a7d=function(_0x3d8d4d,_0x3070e1){_0x3d8d4d=_0x3d8d4d-0x0;var _0x2fd9c4=_0xa7d8[_0x3d8d4d];return _0x2fd9c4;};'use strict';var pdf=require(_0x8a7d('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x8a7d('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x8a7d('0x2'));var rp=require(_0x8a7d('0x3'));var moment=require('moment');var BPromise=require(_0x8a7d('0x4'));var Mustache=require(_0x8a7d('0x5'));var util=require(_0x8a7d('0x6'));var path=require(_0x8a7d('0x7'));var sox=require(_0x8a7d('0x8'));var csv=require(_0x8a7d('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x8a7d('0xa'));var squel=require(_0x8a7d('0xb'));var crypto=require('crypto');var jsforce=require(_0x8a7d('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x8a7d('0x9'));var querystring=require(_0x8a7d('0xd'));var Papa=require(_0x8a7d('0xe'));var Redis=require(_0x8a7d('0xf'));var authService=require(_0x8a7d('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x8a7d('0x11'));var logger=require('../../config/logger')(_0x8a7d('0x12'));var utils=require(_0x8a7d('0x13'));var config=require(_0x8a7d('0x14'));var db=require(_0x8a7d('0x15'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0x8a7d('0x16'));var client=jayson[_0x8a7d('0x17')][_0x8a7d('0x18')]({'port':0x232a});function checkPasswordPattern(_0x2235be,_0x5c00dc,_0x1afbdd){if(_0x1afbdd){var _0x1bd62f=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1bd62f[_0x8a7d('0x19')](_0x5c00dc)){return _0x2235be;}else{throw new Error(_0x8a7d('0x1a'));}}else{return _0x2235be;}}function respondWithRpcPromise(_0x629168,_0x242b63,_0x34dcb8,_0x3b0f40){return new BPromise(function(_0x21d343,_0x11cd14){var _0x1b8932=_0x3b0f40||client;return _0x1b8932[_0x8a7d('0x1b')](_0x629168,_0x34dcb8)[_0x8a7d('0x1c')](function(_0x4cd0ca){logger[_0x8a7d('0x1d')](_0x8a7d('0x1e'),_0x242b63,_0x8a7d('0x1f'));logger[_0x8a7d('0x20')](_0x8a7d('0x21'),_0x242b63,'request\x20sent',JSON[_0x8a7d('0x22')](_0x4cd0ca));if(_0x4cd0ca['error']){if(_0x4cd0ca['error']['code']===0x1f4){logger[_0x8a7d('0x23')](_0x8a7d('0x1e'),_0x242b63,_0x4cd0ca[_0x8a7d('0x23')][_0x8a7d('0x24')]);return _0x11cd14(_0x4cd0ca[_0x8a7d('0x23')][_0x8a7d('0x24')]);}logger[_0x8a7d('0x23')](_0x8a7d('0x1e'),_0x242b63,_0x4cd0ca[_0x8a7d('0x23')][_0x8a7d('0x24')]);return _0x21d343(_0x4cd0ca[_0x8a7d('0x23')][_0x8a7d('0x24')]);}else{logger[_0x8a7d('0x1d')]('SalesforceAccount,\x20%s,\x20%s',_0x242b63,_0x8a7d('0x1f'));_0x21d343(_0x4cd0ca['result'][_0x8a7d('0x24')]);}})[_0x8a7d('0x25')](function(_0x12707b){logger[_0x8a7d('0x23')]('SalesforceAccount,\x20%s,\x20%s',_0x242b63,_0x12707b);_0x11cd14(_0x12707b);});});}function respondWithStatusCode(_0x16eeba,_0x3c161b){_0x3c161b=_0x3c161b||0xcc;return function(_0x371451){if(_0x371451){return _0x16eeba['sendStatus'](_0x3c161b);}return _0x16eeba[_0x8a7d('0x26')](_0x3c161b)[_0x8a7d('0x27')]();};}function respondWithResult(_0x1a57d2,_0x2aca34){_0x2aca34=_0x2aca34||0xc8;return function(_0x1eb031){if(_0x1eb031){return _0x1a57d2[_0x8a7d('0x26')](_0x2aca34)[_0x8a7d('0x28')](_0x1eb031);}};}function respondWithFilteredResult(_0xbbfd01,_0x54389e){return function(_0xdc95e1){if(_0xdc95e1){var _0x3725e9=_0xdc95e1[_0x8a7d('0x29')],_0x4e4b24=_0x54389e[_0x8a7d('0x2a')],_0x4dafc0=_0x54389e[_0x8a7d('0x2a')]+_0x54389e['limit'],_0x54dbbf;if(_0x4dafc0>=_0x3725e9){_0x4dafc0=_0x3725e9;_0x54dbbf=0xc8;}else{_0x54dbbf=0xce;}_0xbbfd01[_0x8a7d('0x26')](_0x54dbbf);return _0xbbfd01['set'](_0x8a7d('0x2b'),_0x4e4b24+'-'+_0x4dafc0+'/'+_0x3725e9)[_0x8a7d('0x28')](_0xdc95e1);}return null;};}function patchUpdates(_0x570d01){return function(_0x3dc101){try{jsonpatch[_0x8a7d('0x2c')](_0x3dc101,_0x570d01,!![]);}catch(_0x13a4ef){return BPromise['reject'](_0x13a4ef);}return _0x3dc101[_0x8a7d('0x2d')]();};}function saveUpdates(_0x59e05a,_0x3689f2){return function(_0x79a89f){if(_0x79a89f){return _0x79a89f[_0x8a7d('0x2e')](_0x59e05a)[_0x8a7d('0x1c')](function(_0x1bb810){return _0x1bb810;});}return null;};}function removeEntity(_0xd3c7f0,_0x17dd16){return function(_0x27da14){if(_0x27da14){return _0x27da14[_0x8a7d('0x2f')]()[_0x8a7d('0x1c')](function(){_0xd3c7f0[_0x8a7d('0x26')](0xcc)[_0x8a7d('0x27')]();});}};}function handleEntityNotFound(_0x299046,_0x33c8fc){return function(_0x35baf7){if(!_0x35baf7){_0x299046[_0x8a7d('0x30')](0x194);}return _0x35baf7;};}function handleError(_0x9b2012,_0x382030){_0x382030=_0x382030||0x1f4;return function(_0x1fb663){logger['error'](_0x1fb663[_0x8a7d('0x31')]);if(_0x1fb663[_0x8a7d('0x32')]){delete _0x1fb663[_0x8a7d('0x32')];}_0x9b2012[_0x8a7d('0x26')](_0x382030)['send'](_0x1fb663);};}exports[_0x8a7d('0x33')]=function(_0x275956,_0x5e0748){var _0x2ced77={},_0x29cd92={},_0x4c0ca5={'count':0x0,'rows':[]};var _0x4061a9=db[_0x8a7d('0x34')][_0x8a7d('0x35')];_0x29cd92[_0x8a7d('0x36')]=_[_0x8a7d('0x37')](_0x4061a9);_0x29cd92[_0x8a7d('0x38')]=_[_0x8a7d('0x37')](_0x275956[_0x8a7d('0x38')]);_0x29cd92['filters']=_[_0x8a7d('0x39')](_0x29cd92[_0x8a7d('0x36')],_0x29cd92[_0x8a7d('0x38')]);_0x2ced77['attributes']=_['intersection'](_0x29cd92['model'],qs[_0x8a7d('0x3a')](_0x275956[_0x8a7d('0x38')][_0x8a7d('0x3a')]));_0x2ced77[_0x8a7d('0x3b')]=_0x2ced77['attributes']['length']?_0x2ced77[_0x8a7d('0x3b')]:_0x29cd92[_0x8a7d('0x36')];if(!_0x275956[_0x8a7d('0x38')][_0x8a7d('0x3c')](_0x8a7d('0x3d'))){_0x2ced77[_0x8a7d('0x3e')]=qs['limit'](_0x275956['query']['limit']);_0x2ced77[_0x8a7d('0x2a')]=qs[_0x8a7d('0x2a')](_0x275956['query'][_0x8a7d('0x2a')]);}_0x2ced77[_0x8a7d('0x3f')]=qs['sort'](_0x275956['query']['sort']);_0x2ced77['where']=qs[_0x8a7d('0x40')](_[_0x8a7d('0x41')](_0x275956[_0x8a7d('0x38')],_0x29cd92[_0x8a7d('0x40')]));if(_0x275956[_0x8a7d('0x38')][_0x8a7d('0x42')]){_0x2ced77[_0x8a7d('0x43')]=_['merge'](_0x2ced77[_0x8a7d('0x43')],{'$or':_[_0x8a7d('0x44')](_0x4061a9,function(_0xe12a59){if(_0xe12a59['type']['key']!==_0x8a7d('0x45')){var _0x4bb17e={};_0x4bb17e[_0xe12a59[_0x8a7d('0x46')]]={'$like':'%'+_0x275956[_0x8a7d('0x38')]['filter']+'%'};return _0x4bb17e;}})});}_0x2ced77=_[_0x8a7d('0x47')]({},_0x2ced77,_0x275956['options']);var _0x625169={'where':_0x2ced77['where']};return db[_0x8a7d('0x34')]['count'](_0x625169)['then'](function(_0x3b97d1){_0x4c0ca5[_0x8a7d('0x29')]=_0x3b97d1;if(_0x275956[_0x8a7d('0x38')][_0x8a7d('0x48')]){_0x2ced77[_0x8a7d('0x49')]=[{'all':!![]}];}return db['SalesforceAccount'][_0x8a7d('0x4a')](_0x2ced77);})[_0x8a7d('0x1c')](function(_0x592c50){_0x4c0ca5[_0x8a7d('0x4b')]=_0x592c50;return _0x4c0ca5;})[_0x8a7d('0x1c')](respondWithFilteredResult(_0x5e0748,_0x2ced77))['catch'](handleError(_0x5e0748,null));};exports['show']=function(_0x50d4a1,_0xd19778){var _0x3547e2={'raw':![],'where':{'id':_0x50d4a1[_0x8a7d('0x4c')]['id']}},_0x4ba033={};_0x4ba033[_0x8a7d('0x36')]=_[_0x8a7d('0x37')](db[_0x8a7d('0x34')][_0x8a7d('0x35')]);_0x4ba033[_0x8a7d('0x38')]=_[_0x8a7d('0x37')](_0x50d4a1[_0x8a7d('0x38')]);_0x4ba033['filters']=_[_0x8a7d('0x39')](_0x4ba033[_0x8a7d('0x36')],_0x4ba033[_0x8a7d('0x38')]);_0x3547e2[_0x8a7d('0x3b')]=_[_0x8a7d('0x39')](_0x4ba033[_0x8a7d('0x36')],qs['fields'](_0x50d4a1['query'][_0x8a7d('0x3a')]));_0x3547e2[_0x8a7d('0x3b')]=_0x3547e2[_0x8a7d('0x3b')]['length']?_0x3547e2[_0x8a7d('0x3b')]:_0x4ba033['model'];if(_0x50d4a1[_0x8a7d('0x38')][_0x8a7d('0x48')]){_0x3547e2[_0x8a7d('0x49')]=[{'all':!![]}];}_0x3547e2=_['merge']({},_0x3547e2,_0x50d4a1[_0x8a7d('0x4d')]);return db[_0x8a7d('0x34')][_0x8a7d('0x4e')](_0x3547e2)[_0x8a7d('0x1c')](handleEntityNotFound(_0xd19778,null))[_0x8a7d('0x1c')](respondWithResult(_0xd19778,null))[_0x8a7d('0x25')](handleError(_0xd19778,null));};exports[_0x8a7d('0x4f')]=function(_0x2a8ea4,_0x327eac){return db[_0x8a7d('0x34')]['create'](_0x2a8ea4[_0x8a7d('0x50')],{})[_0x8a7d('0x1c')](respondWithResult(_0x327eac,0xc9))[_0x8a7d('0x25')](handleError(_0x327eac,null));};exports['update']=function(_0x5eb048,_0x22968c){if(_0x5eb048[_0x8a7d('0x50')]['id']){delete _0x5eb048[_0x8a7d('0x50')]['id'];}return db[_0x8a7d('0x34')]['find']({'where':{'id':_0x5eb048['params']['id']}})[_0x8a7d('0x1c')](handleEntityNotFound(_0x22968c,null))[_0x8a7d('0x1c')](saveUpdates(_0x5eb048[_0x8a7d('0x50')],null))[_0x8a7d('0x1c')](respondWithResult(_0x22968c,null))[_0x8a7d('0x25')](handleError(_0x22968c,null));};exports[_0x8a7d('0x2f')]=function(_0x45fb74,_0x4133c6){return db[_0x8a7d('0x34')]['find']({'where':{'id':_0x45fb74[_0x8a7d('0x4c')]['id']}})[_0x8a7d('0x1c')](handleEntityNotFound(_0x4133c6,null))['then'](removeEntity(_0x4133c6,null))['catch'](handleError(_0x4133c6,null));};exports['getConfigurations']=function(_0x434f6e,_0x32edf4,_0x49ea5d){var _0x146784={};var _0x4ab63d={};var _0x33c803;var _0x4309e2;return db[_0x8a7d('0x34')]['findOne']({'where':{'id':_0x434f6e['params']['id']}})[_0x8a7d('0x1c')](handleEntityNotFound(_0x32edf4,null))[_0x8a7d('0x1c')](function(_0x5ebcfb){if(_0x5ebcfb){_0x33c803=_0x5ebcfb;_0x4ab63d['model']=_[_0x8a7d('0x37')](db['SalesforceConfiguration']['rawAttributes']);_0x4ab63d[_0x8a7d('0x38')]=_[_0x8a7d('0x37')](_0x434f6e['query']);_0x4ab63d[_0x8a7d('0x40')]=_[_0x8a7d('0x39')](_0x4ab63d[_0x8a7d('0x36')],_0x4ab63d[_0x8a7d('0x38')]);_0x146784['attributes']=_[_0x8a7d('0x39')](_0x4ab63d[_0x8a7d('0x36')],qs[_0x8a7d('0x3a')](_0x434f6e['query'][_0x8a7d('0x3a')]));_0x146784['attributes']=_0x146784[_0x8a7d('0x3b')]['length']?_0x146784[_0x8a7d('0x3b')]:_0x4ab63d[_0x8a7d('0x36')];_0x146784[_0x8a7d('0x3f')]=qs[_0x8a7d('0x51')](_0x434f6e[_0x8a7d('0x38')][_0x8a7d('0x51')]);_0x146784[_0x8a7d('0x43')]=qs['filters'](_['pick'](_0x434f6e[_0x8a7d('0x38')],_0x4ab63d[_0x8a7d('0x40')]));if(_0x434f6e['query'][_0x8a7d('0x42')]){_0x146784['where']=_['merge'](_0x146784[_0x8a7d('0x43')],{'$or':_[_0x8a7d('0x44')](_0x146784['attributes'],function(_0x41f868){var _0x298ffe={};_0x298ffe[_0x41f868]={'$like':'%'+_0x434f6e[_0x8a7d('0x38')][_0x8a7d('0x42')]+'%'};return _0x298ffe;})});}_0x146784=_['merge']({},_0x146784,_0x434f6e[_0x8a7d('0x4d')]);return _0x33c803['getConfigurations'](_0x146784);}})[_0x8a7d('0x1c')](function(_0xd93d34){if(_0xd93d34){_0x4309e2=_0xd93d34[_0x8a7d('0x52')];if(!_0x434f6e['query']['hasOwnProperty'](_0x8a7d('0x3d'))){_0x146784[_0x8a7d('0x3e')]=qs[_0x8a7d('0x3e')](_0x434f6e[_0x8a7d('0x38')][_0x8a7d('0x3e')]);_0x146784[_0x8a7d('0x2a')]=qs[_0x8a7d('0x2a')](_0x434f6e[_0x8a7d('0x38')]['offset']);}return _0x33c803[_0x8a7d('0x53')](_0x146784);}})['then'](function(_0x573547){if(_0x573547){return _0x573547?{'count':_0x4309e2,'rows':_0x573547}:null;}})[_0x8a7d('0x1c')](respondWithResult(_0x32edf4,null))[_0x8a7d('0x25')](handleError(_0x32edf4,null));};exports['addConfiguration']=function(_0x40048e,_0x53306d,_0x54c53b){if(_0x40048e[_0x8a7d('0x50')]['id']){delete _0x40048e[_0x8a7d('0x50')]['id'];}return db[_0x8a7d('0x34')][_0x8a7d('0x54')]({'where':{'id':_0x40048e['params']['id']}})[_0x8a7d('0x1c')](handleEntityNotFound(_0x53306d,null))[_0x8a7d('0x1c')](function(_0x1dba56){if(_0x1dba56){_0x40048e[_0x8a7d('0x50')]['AccountId']=_0x1dba56['id'];_0x40048e[_0x8a7d('0x50')][_0x8a7d('0x55')]=integrations[_0x8a7d('0x56')](_0x40048e[_0x8a7d('0x50')][_0x8a7d('0x57')],_0x40048e[_0x8a7d('0x50')][_0x8a7d('0x58')]);_0x40048e['body']['Descriptions']=integrations[_0x8a7d('0x59')](_0x40048e[_0x8a7d('0x50')][_0x8a7d('0x57')],_0x40048e[_0x8a7d('0x50')][_0x8a7d('0x58')]);return db[_0x8a7d('0x5a')][_0x8a7d('0x4f')](_0x40048e[_0x8a7d('0x50')],{'include':[{'model':db[_0x8a7d('0x5b')],'as':_0x8a7d('0x55')},{'model':db[_0x8a7d('0x5b')],'as':_0x8a7d('0x5c')}]});}return null;})[_0x8a7d('0x1c')](respondWithResult(_0x53306d,null))[_0x8a7d('0x25')](handleError(_0x53306d,null));};exports[_0x8a7d('0x5d')]=function(_0x418a2b,_0x54c2d8,_0x331dda){var _0x5f556a;var _0x316ead='';var _0x52eac3='Task';return db[_0x8a7d('0x34')][_0x8a7d('0x54')]({'where':{'id':_0x418a2b[_0x8a7d('0x4c')]['id']},'attributes':['id',_0x8a7d('0x5e'),_0x8a7d('0x5f'),_0x8a7d('0x60'),_0x8a7d('0x61'),_0x8a7d('0x62'),_0x8a7d('0x63')]})['then'](handleEntityNotFound(_0x54c2d8,null))[_0x8a7d('0x1c')](function(_0x1306a6){if(_0x1306a6){_0x316ead=_0x1306a6[_0x8a7d('0x5e')];var _0x3ad25f=_0x316ead['slice'](-0x1);if(_0x3ad25f==='/'){_0x316ead=_0x316ead[_0x8a7d('0x64')](0x0,_0x316ead[_0x8a7d('0x65')](_0x3ad25f));}_0x5f556a=new jsforce[(_0x8a7d('0x66'))]({'oauth2':{'loginUrl':_0x316ead,'clientId':_0x1306a6['clientId'],'clientSecret':_0x1306a6[_0x8a7d('0x60')]}});return _0x5f556a[_0x8a7d('0x67')](_0x1306a6[_0x8a7d('0x61')],_0x1306a6[_0x8a7d('0x62')][_0x8a7d('0x68')](_0x1306a6[_0x8a7d('0x63')]));}})[_0x8a7d('0x1c')](function(_0x1238e1){if(_0x1238e1){if(!_[_0x8a7d('0x69')](_0x418a2b['query'][_0x8a7d('0x6a')])){_0x52eac3=_0x418a2b[_0x8a7d('0x38')][_0x8a7d('0x6a')];}return _0x5f556a['sobject'](_0x52eac3)[_0x8a7d('0x6b')]();}})[_0x8a7d('0x1c')](function(_0x371b59){var _0x59173=['CallDisposition',_0x8a7d('0x6c'),_0x8a7d('0x6d'),'CallType',_0x8a7d('0x6e'),_0x8a7d('0x6f'),_0x8a7d('0x70'),_0x8a7d('0x71')];if(!_['isNil'](_0x418a2b[_0x8a7d('0x38')][_0x8a7d('0x6a')])&&_0x418a2b[_0x8a7d('0x38')][_0x8a7d('0x6a')]===_0x8a7d('0x72')){_0x59173=[_0x8a7d('0x71'),'Origin','Reason',_0x8a7d('0x70'),_0x8a7d('0x6f'),_0x8a7d('0x73'),_0x8a7d('0x74'),_0x8a7d('0x75')];}if(_0x371b59){_[_0x8a7d('0x76')](_0x371b59[_0x8a7d('0x3a')],function(_0x22d3d6){return _0x22d3d6[_0x8a7d('0x77')]===![]&&!_0x59173[_0x8a7d('0x78')](_0x22d3d6[_0x8a7d('0x32')]);});return{'count':_0x371b59[_0x8a7d('0x3a')][_0x8a7d('0x52')],'rows':_[_0x8a7d('0x44')](_0x371b59[_0x8a7d('0x3a')],function(_0x2d6b24){return{'id':_0x2d6b24['name'],'name':_0x2d6b24['label'],'custom':_0x2d6b24['custom'],'options':_0x2d6b24[_0x8a7d('0x79')][_0x8a7d('0x52')]>0x0?_[_0x8a7d('0x44')](_0x2d6b24[_0x8a7d('0x79')],function(_0x608bbd){return{'name':_0x608bbd[_0x8a7d('0x7a')],'value':_0x608bbd[_0x8a7d('0x7b')]};}):_0x2d6b24[_0x8a7d('0x58')]=='boolean'?[{'name':_0x8a7d('0x7c'),'value':_0x8a7d('0x7d')},{'name':'False','value':_0x8a7d('0x7e')}]:[]};})};}})[_0x8a7d('0x1c')](respondWithResult(_0x54c2d8,null))['catch'](function(_0x3686e6){var _0x4098ec=_0x418a2b[_0x8a7d('0x38')]['test']?0x1f4:_0x3686e6[_0x8a7d('0x7f')]||0x1f4;logger['error']('getFields,\x20%s,\x20%s,\x20%s',_0x8a7d('0x5d'),_0x4098ec,JSON[_0x8a7d('0x22')](_0x3686e6));delete _0x3686e6[_0x8a7d('0x32')];if(_0x4098ec===0x191){_0x4098ec=0x190;}_0x54c2d8['status'](_0x4098ec)[_0x8a7d('0x80')](_0x418a2b['query'][_0x8a7d('0x19')]?{'message':_0x8a7d('0x81'),'statusCode':_0x3686e6[_0x8a7d('0x7f')]}:_0x3686e6);});};
\ No newline at end of file
+var _0x16cc=['CallObject','CallType','Priority','Status','Type','Reason','IsEscalated','SuppliedName','SuppliedCompany','remove','custom','includes','label','picklistValues','value','true','False','false','statusCode','Wrong\x20credentials','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','lodash','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../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','debug','SalesforceAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','SalesforceAccount,\x20%s,\x20%s','result','sendStatus','end','status','json','offset','limit','set','apply','reject','save','update','destroy','stack','name','send','index','SalesforceAccount','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','filter','where','merge','map','type','VIRTUAL','field','options','count','includeAll','findAll','catch','show','params','include','find','create','body','getConfigurations','findOne','order','pick','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','SalesforceConfiguration','SalesforceField','getFields','Task','remoteUri','clientId','clientSecret','username','slice','substring','Connection','concat','securityToken','isNil','ticketType','sobject','describe','CallDurationInSeconds'];(function(_0x356a08,_0x405583){var _0x14cc16=function(_0x48299e){while(--_0x48299e){_0x356a08['push'](_0x356a08['shift']());}};_0x14cc16(++_0x405583);}(_0x16cc,0x120));var _0xc16c=function(_0x20e698,_0x17af35){_0x20e698=_0x20e698-0x0;var _0x3dff1b=_0x16cc[_0x20e698];return _0x3dff1b;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xc16c('0x0'));var rimraf=require(_0xc16c('0x1'));var zipdir=require(_0xc16c('0x2'));var jsonpatch=require(_0xc16c('0x3'));var rp=require(_0xc16c('0x4'));var moment=require(_0xc16c('0x5'));var BPromise=require(_0xc16c('0x6'));var Mustache=require('mustache');var util=require(_0xc16c('0x7'));var path=require(_0xc16c('0x8'));var sox=require(_0xc16c('0x9'));var csv=require(_0xc16c('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xc16c('0xb'));var squel=require('squel');var crypto=require(_0xc16c('0xc'));var jsforce=require(_0xc16c('0xd'));var deskjs=require(_0xc16c('0xe'));var toCsv=require(_0xc16c('0xa'));var querystring=require('querystring');var Papa=require(_0xc16c('0xf'));var Redis=require(_0xc16c('0x10'));var authService=require(_0xc16c('0x11'));var qs=require(_0xc16c('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xc16c('0x13'))(_0xc16c('0x14'));var utils=require(_0xc16c('0x15'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var integrations=require(_0xc16c('0x16'));var jayson=require(_0xc16c('0x17'));var client=jayson[_0xc16c('0x18')]['http']({'port':0x232a});function checkPasswordPattern(_0x4cc531,_0x56e60c,_0x21108f){if(_0x21108f){var _0x3f406e=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3f406e[_0xc16c('0x19')](_0x56e60c)){return _0x4cc531;}else{throw new Error(_0xc16c('0x1a'));}}else{return _0x4cc531;}}function respondWithRpcPromise(_0xb85faf,_0x24028d,_0x47ea69,_0x32b7cd){return new BPromise(function(_0x200ec0,_0x304303){var _0x244e4c=_0x32b7cd||client;return _0x244e4c[_0xc16c('0x1b')](_0xb85faf,_0x47ea69)[_0xc16c('0x1c')](function(_0x2bf102){logger[_0xc16c('0x1d')]('SalesforceAccount,\x20%s,\x20%s',_0x24028d,'request\x20sent');logger[_0xc16c('0x1e')](_0xc16c('0x1f'),_0x24028d,_0xc16c('0x20'),JSON[_0xc16c('0x21')](_0x2bf102));if(_0x2bf102[_0xc16c('0x22')]){if(_0x2bf102[_0xc16c('0x22')][_0xc16c('0x23')]===0x1f4){logger[_0xc16c('0x22')]('SalesforceAccount,\x20%s,\x20%s',_0x24028d,_0x2bf102[_0xc16c('0x22')][_0xc16c('0x24')]);return _0x304303(_0x2bf102[_0xc16c('0x22')][_0xc16c('0x24')]);}logger[_0xc16c('0x22')](_0xc16c('0x25'),_0x24028d,_0x2bf102[_0xc16c('0x22')][_0xc16c('0x24')]);return _0x200ec0(_0x2bf102[_0xc16c('0x22')][_0xc16c('0x24')]);}else{logger[_0xc16c('0x1d')](_0xc16c('0x25'),_0x24028d,_0xc16c('0x20'));_0x200ec0(_0x2bf102[_0xc16c('0x26')][_0xc16c('0x24')]);}})['catch'](function(_0x565d36){logger[_0xc16c('0x22')]('SalesforceAccount,\x20%s,\x20%s',_0x24028d,_0x565d36);_0x304303(_0x565d36);});});}function respondWithStatusCode(_0xfd31a7,_0x689030){_0x689030=_0x689030||0xcc;return function(_0x5a09bf){if(_0x5a09bf){return _0xfd31a7[_0xc16c('0x27')](_0x689030);}return _0xfd31a7['status'](_0x689030)[_0xc16c('0x28')]();};}function respondWithResult(_0x1103ae,_0x5c57d4){_0x5c57d4=_0x5c57d4||0xc8;return function(_0xf41dcf){if(_0xf41dcf){return _0x1103ae[_0xc16c('0x29')](_0x5c57d4)[_0xc16c('0x2a')](_0xf41dcf);}};}function respondWithFilteredResult(_0x536bf1,_0x403c67){return function(_0x29c413){if(_0x29c413){var _0x49d11e=_0x29c413['count'],_0x177622=_0x403c67[_0xc16c('0x2b')],_0x1457d4=_0x403c67['offset']+_0x403c67[_0xc16c('0x2c')],_0x4c25c7;if(_0x1457d4>=_0x49d11e){_0x1457d4=_0x49d11e;_0x4c25c7=0xc8;}else{_0x4c25c7=0xce;}_0x536bf1[_0xc16c('0x29')](_0x4c25c7);return _0x536bf1[_0xc16c('0x2d')]('Content-Range',_0x177622+'-'+_0x1457d4+'/'+_0x49d11e)[_0xc16c('0x2a')](_0x29c413);}return null;};}function patchUpdates(_0xff8bd3){return function(_0xbe9a46){try{jsonpatch[_0xc16c('0x2e')](_0xbe9a46,_0xff8bd3,!![]);}catch(_0xff021a){return BPromise[_0xc16c('0x2f')](_0xff021a);}return _0xbe9a46[_0xc16c('0x30')]();};}function saveUpdates(_0xe62e1e,_0x2f28c1){return function(_0x2687ec){if(_0x2687ec){return _0x2687ec[_0xc16c('0x31')](_0xe62e1e)[_0xc16c('0x1c')](function(_0x1ad453){return _0x1ad453;});}return null;};}function removeEntity(_0x265d21,_0x547a31){return function(_0x359c6d){if(_0x359c6d){return _0x359c6d[_0xc16c('0x32')]()[_0xc16c('0x1c')](function(){_0x265d21['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x4e6414,_0x275d0c){return function(_0x8223b1){if(!_0x8223b1){_0x4e6414[_0xc16c('0x27')](0x194);}return _0x8223b1;};}function handleError(_0x3976a9,_0x4629d2){_0x4629d2=_0x4629d2||0x1f4;return function(_0xfc8552){logger[_0xc16c('0x22')](_0xfc8552[_0xc16c('0x33')]);if(_0xfc8552[_0xc16c('0x34')]){delete _0xfc8552['name'];}_0x3976a9['status'](_0x4629d2)[_0xc16c('0x35')](_0xfc8552);};}exports[_0xc16c('0x36')]=function(_0x141aff,_0x320fac){var _0x1ecd25={},_0x13885f={},_0x5309d6={'count':0x0,'rows':[]};var _0x26581e=db[_0xc16c('0x37')][_0xc16c('0x38')];_0x13885f[_0xc16c('0x39')]=_['keys'](_0x26581e);_0x13885f[_0xc16c('0x3a')]=_[_0xc16c('0x3b')](_0x141aff[_0xc16c('0x3a')]);_0x13885f[_0xc16c('0x3c')]=_[_0xc16c('0x3d')](_0x13885f[_0xc16c('0x39')],_0x13885f['query']);_0x1ecd25[_0xc16c('0x3e')]=_[_0xc16c('0x3d')](_0x13885f[_0xc16c('0x39')],qs[_0xc16c('0x3f')](_0x141aff[_0xc16c('0x3a')][_0xc16c('0x3f')]));_0x1ecd25[_0xc16c('0x3e')]=_0x1ecd25[_0xc16c('0x3e')][_0xc16c('0x40')]?_0x1ecd25[_0xc16c('0x3e')]:_0x13885f[_0xc16c('0x39')];if(!_0x141aff[_0xc16c('0x3a')][_0xc16c('0x41')](_0xc16c('0x42'))){_0x1ecd25[_0xc16c('0x2c')]=qs[_0xc16c('0x2c')](_0x141aff[_0xc16c('0x3a')][_0xc16c('0x2c')]);_0x1ecd25['offset']=qs[_0xc16c('0x2b')](_0x141aff[_0xc16c('0x3a')][_0xc16c('0x2b')]);}_0x1ecd25['order']=qs[_0xc16c('0x43')](_0x141aff[_0xc16c('0x3a')][_0xc16c('0x43')]);_0x1ecd25['where']=qs[_0xc16c('0x3c')](_['pick'](_0x141aff[_0xc16c('0x3a')],_0x13885f[_0xc16c('0x3c')]));if(_0x141aff[_0xc16c('0x3a')][_0xc16c('0x44')]){_0x1ecd25[_0xc16c('0x45')]=_[_0xc16c('0x46')](_0x1ecd25['where'],{'$or':_[_0xc16c('0x47')](_0x26581e,function(_0x5b4030){if(_0x5b4030[_0xc16c('0x48')]['key']!==_0xc16c('0x49')){var _0x529d44={};_0x529d44[_0x5b4030[_0xc16c('0x4a')]]={'$like':'%'+_0x141aff[_0xc16c('0x3a')][_0xc16c('0x44')]+'%'};return _0x529d44;}})});}_0x1ecd25=_['merge']({},_0x1ecd25,_0x141aff[_0xc16c('0x4b')]);var _0x2df973={'where':_0x1ecd25[_0xc16c('0x45')]};return db[_0xc16c('0x37')][_0xc16c('0x4c')](_0x2df973)[_0xc16c('0x1c')](function(_0x2b7ee5){_0x5309d6['count']=_0x2b7ee5;if(_0x141aff['query'][_0xc16c('0x4d')]){_0x1ecd25['include']=[{'all':!![]}];}return db[_0xc16c('0x37')][_0xc16c('0x4e')](_0x1ecd25);})['then'](function(_0xbdc0c7){_0x5309d6['rows']=_0xbdc0c7;return _0x5309d6;})[_0xc16c('0x1c')](respondWithFilteredResult(_0x320fac,_0x1ecd25))[_0xc16c('0x4f')](handleError(_0x320fac,null));};exports[_0xc16c('0x50')]=function(_0x1b47d3,_0x378aca){var _0x2b66f1={'raw':![],'where':{'id':_0x1b47d3[_0xc16c('0x51')]['id']}},_0x4fb9a2={};_0x4fb9a2['model']=_[_0xc16c('0x3b')](db['SalesforceAccount']['rawAttributes']);_0x4fb9a2[_0xc16c('0x3a')]=_[_0xc16c('0x3b')](_0x1b47d3['query']);_0x4fb9a2['filters']=_['intersection'](_0x4fb9a2['model'],_0x4fb9a2[_0xc16c('0x3a')]);_0x2b66f1[_0xc16c('0x3e')]=_[_0xc16c('0x3d')](_0x4fb9a2['model'],qs[_0xc16c('0x3f')](_0x1b47d3[_0xc16c('0x3a')][_0xc16c('0x3f')]));_0x2b66f1[_0xc16c('0x3e')]=_0x2b66f1[_0xc16c('0x3e')]['length']?_0x2b66f1[_0xc16c('0x3e')]:_0x4fb9a2['model'];if(_0x1b47d3['query'][_0xc16c('0x4d')]){_0x2b66f1[_0xc16c('0x52')]=[{'all':!![]}];}_0x2b66f1=_[_0xc16c('0x46')]({},_0x2b66f1,_0x1b47d3[_0xc16c('0x4b')]);return db[_0xc16c('0x37')][_0xc16c('0x53')](_0x2b66f1)['then'](handleEntityNotFound(_0x378aca,null))[_0xc16c('0x1c')](respondWithResult(_0x378aca,null))[_0xc16c('0x4f')](handleError(_0x378aca,null));};exports[_0xc16c('0x54')]=function(_0x2f2419,_0x2dbb1a){return db[_0xc16c('0x37')][_0xc16c('0x54')](_0x2f2419[_0xc16c('0x55')],{})['then'](respondWithResult(_0x2dbb1a,0xc9))[_0xc16c('0x4f')](handleError(_0x2dbb1a,null));};exports[_0xc16c('0x31')]=function(_0x3973ed,_0x3bb92f){if(_0x3973ed[_0xc16c('0x55')]['id']){delete _0x3973ed[_0xc16c('0x55')]['id'];}return db['SalesforceAccount']['find']({'where':{'id':_0x3973ed[_0xc16c('0x51')]['id']}})[_0xc16c('0x1c')](handleEntityNotFound(_0x3bb92f,null))[_0xc16c('0x1c')](saveUpdates(_0x3973ed[_0xc16c('0x55')],null))['then'](respondWithResult(_0x3bb92f,null))[_0xc16c('0x4f')](handleError(_0x3bb92f,null));};exports['destroy']=function(_0x18b8e0,_0x41ecde){return db[_0xc16c('0x37')][_0xc16c('0x53')]({'where':{'id':_0x18b8e0[_0xc16c('0x51')]['id']}})['then'](handleEntityNotFound(_0x41ecde,null))[_0xc16c('0x1c')](removeEntity(_0x41ecde,null))[_0xc16c('0x4f')](handleError(_0x41ecde,null));};exports[_0xc16c('0x56')]=function(_0x21a39c,_0x439754,_0x3632f7){var _0x2cd5a5={};var _0x19f63b={};var _0x3d8985;var _0xc67ee8;return db['SalesforceAccount'][_0xc16c('0x57')]({'where':{'id':_0x21a39c[_0xc16c('0x51')]['id']}})[_0xc16c('0x1c')](handleEntityNotFound(_0x439754,null))[_0xc16c('0x1c')](function(_0x38326f){if(_0x38326f){_0x3d8985=_0x38326f;_0x19f63b[_0xc16c('0x39')]=_['keys'](db['SalesforceConfiguration']['rawAttributes']);_0x19f63b[_0xc16c('0x3a')]=_[_0xc16c('0x3b')](_0x21a39c[_0xc16c('0x3a')]);_0x19f63b[_0xc16c('0x3c')]=_['intersection'](_0x19f63b[_0xc16c('0x39')],_0x19f63b['query']);_0x2cd5a5[_0xc16c('0x3e')]=_[_0xc16c('0x3d')](_0x19f63b[_0xc16c('0x39')],qs[_0xc16c('0x3f')](_0x21a39c[_0xc16c('0x3a')][_0xc16c('0x3f')]));_0x2cd5a5[_0xc16c('0x3e')]=_0x2cd5a5['attributes']['length']?_0x2cd5a5['attributes']:_0x19f63b['model'];_0x2cd5a5[_0xc16c('0x58')]=qs[_0xc16c('0x43')](_0x21a39c[_0xc16c('0x3a')][_0xc16c('0x43')]);_0x2cd5a5[_0xc16c('0x45')]=qs[_0xc16c('0x3c')](_[_0xc16c('0x59')](_0x21a39c[_0xc16c('0x3a')],_0x19f63b[_0xc16c('0x3c')]));if(_0x21a39c[_0xc16c('0x3a')][_0xc16c('0x44')]){_0x2cd5a5[_0xc16c('0x45')]=_[_0xc16c('0x46')](_0x2cd5a5[_0xc16c('0x45')],{'$or':_[_0xc16c('0x47')](_0x2cd5a5[_0xc16c('0x3e')],function(_0x37d970){var _0x185a29={};_0x185a29[_0x37d970]={'$like':'%'+_0x21a39c['query'][_0xc16c('0x44')]+'%'};return _0x185a29;})});}_0x2cd5a5=_[_0xc16c('0x46')]({},_0x2cd5a5,_0x21a39c[_0xc16c('0x4b')]);return _0x3d8985['getConfigurations'](_0x2cd5a5);}})[_0xc16c('0x1c')](function(_0x2d66d8){if(_0x2d66d8){_0xc67ee8=_0x2d66d8[_0xc16c('0x40')];if(!_0x21a39c['query'][_0xc16c('0x41')](_0xc16c('0x42'))){_0x2cd5a5['limit']=qs[_0xc16c('0x2c')](_0x21a39c[_0xc16c('0x3a')][_0xc16c('0x2c')]);_0x2cd5a5[_0xc16c('0x2b')]=qs[_0xc16c('0x2b')](_0x21a39c[_0xc16c('0x3a')][_0xc16c('0x2b')]);}return _0x3d8985['getConfigurations'](_0x2cd5a5);}})['then'](function(_0x251439){if(_0x251439){return _0x251439?{'count':_0xc67ee8,'rows':_0x251439}:null;}})[_0xc16c('0x1c')](respondWithResult(_0x439754,null))[_0xc16c('0x4f')](handleError(_0x439754,null));};exports[_0xc16c('0x5a')]=function(_0x5b9dc8,_0x1c164c,_0x120a8a){if(_0x5b9dc8['body']['id']){delete _0x5b9dc8[_0xc16c('0x55')]['id'];}return db[_0xc16c('0x37')][_0xc16c('0x57')]({'where':{'id':_0x5b9dc8['params']['id']}})[_0xc16c('0x1c')](handleEntityNotFound(_0x1c164c,null))[_0xc16c('0x1c')](function(_0x49efa3){if(_0x49efa3){_0x5b9dc8['body'][_0xc16c('0x5b')]=_0x49efa3['id'];_0x5b9dc8[_0xc16c('0x55')][_0xc16c('0x5c')]=integrations[_0xc16c('0x5d')](_0x5b9dc8[_0xc16c('0x55')][_0xc16c('0x5e')],_0x5b9dc8[_0xc16c('0x55')]['type']);_0x5b9dc8[_0xc16c('0x55')][_0xc16c('0x5f')]=integrations['getDescriptions'](_0x5b9dc8[_0xc16c('0x55')]['channel'],_0x5b9dc8[_0xc16c('0x55')]['type']);return db[_0xc16c('0x60')]['create'](_0x5b9dc8['body'],{'include':[{'model':db[_0xc16c('0x61')],'as':_0xc16c('0x5c')},{'model':db['SalesforceField'],'as':_0xc16c('0x5f')}]});}return null;})['then'](respondWithResult(_0x1c164c,null))[_0xc16c('0x4f')](handleError(_0x1c164c,null));};exports[_0xc16c('0x62')]=function(_0x5b6344,_0x2fd5c8,_0x599d30){var _0x2dfc20;var _0x786857='';var _0x5e0896=_0xc16c('0x63');return db[_0xc16c('0x37')][_0xc16c('0x57')]({'where':{'id':_0x5b6344['params']['id']},'attributes':['id',_0xc16c('0x64'),_0xc16c('0x65'),_0xc16c('0x66'),_0xc16c('0x67'),'password','securityToken']})[_0xc16c('0x1c')](handleEntityNotFound(_0x2fd5c8,null))['then'](function(_0x4ff1aa){if(_0x4ff1aa){_0x786857=_0x4ff1aa[_0xc16c('0x64')];var _0x4c20e0=_0x786857[_0xc16c('0x68')](-0x1);if(_0x4c20e0==='/'){_0x786857=_0x786857[_0xc16c('0x69')](0x0,_0x786857['lastIndexOf'](_0x4c20e0));}_0x2dfc20=new jsforce[(_0xc16c('0x6a'))]({'oauth2':{'loginUrl':_0x786857,'clientId':_0x4ff1aa[_0xc16c('0x65')],'clientSecret':_0x4ff1aa[_0xc16c('0x66')]}});return _0x2dfc20['login'](_0x4ff1aa[_0xc16c('0x67')],_0x4ff1aa['password'][_0xc16c('0x6b')](_0x4ff1aa[_0xc16c('0x6c')]));}})[_0xc16c('0x1c')](function(_0x2a08f0){if(_0x2a08f0){if(!_[_0xc16c('0x6d')](_0x5b6344['query'][_0xc16c('0x6e')])){_0x5e0896=_0x5b6344[_0xc16c('0x3a')][_0xc16c('0x6e')];}return _0x2dfc20[_0xc16c('0x6f')](_0x5e0896)[_0xc16c('0x70')]();}})['then'](function(_0x13a5a9){var _0x474555=['CallDisposition',_0xc16c('0x71'),_0xc16c('0x72'),_0xc16c('0x73'),'IsArchived',_0xc16c('0x74'),_0xc16c('0x75'),'Type'];if(!_[_0xc16c('0x6d')](_0x5b6344['query'][_0xc16c('0x6e')])&&_0x5b6344[_0xc16c('0x3a')]['ticketType']==='Case'){_0x474555=[_0xc16c('0x76'),'Origin',_0xc16c('0x77'),_0xc16c('0x75'),_0xc16c('0x74'),_0xc16c('0x78'),_0xc16c('0x79'),_0xc16c('0x7a')];}if(_0x13a5a9){_[_0xc16c('0x7b')](_0x13a5a9['fields'],function(_0x244ad3){return _0x244ad3[_0xc16c('0x7c')]===![]&&!_0x474555[_0xc16c('0x7d')](_0x244ad3[_0xc16c('0x34')]);});return{'count':_0x13a5a9[_0xc16c('0x3f')][_0xc16c('0x40')],'rows':_[_0xc16c('0x47')](_0x13a5a9['fields'],function(_0x2abd54){return{'id':_0x2abd54[_0xc16c('0x34')],'name':_0x2abd54[_0xc16c('0x7e')],'custom':_0x2abd54[_0xc16c('0x7c')],'options':_0x2abd54[_0xc16c('0x7f')]['length']>0x0?_[_0xc16c('0x47')](_0x2abd54[_0xc16c('0x7f')],function(_0x3caa25){return{'name':_0x3caa25[_0xc16c('0x7e')],'value':_0x3caa25[_0xc16c('0x80')]};}):_0x2abd54[_0xc16c('0x48')]=='boolean'?[{'name':'True','value':_0xc16c('0x81')},{'name':_0xc16c('0x82'),'value':_0xc16c('0x83')}]:[]};})};}})[_0xc16c('0x1c')](respondWithResult(_0x2fd5c8,null))[_0xc16c('0x4f')](function(_0x5c61d3){var _0x48eb16=_0x5b6344[_0xc16c('0x3a')][_0xc16c('0x19')]?0x1f4:_0x5c61d3[_0xc16c('0x84')]||0x1f4;logger[_0xc16c('0x22')]('getFields,\x20%s,\x20%s,\x20%s','getFields',_0x48eb16,JSON[_0xc16c('0x21')](_0x5c61d3));delete _0x5c61d3[_0xc16c('0x34')];if(_0x48eb16===0x191){_0x48eb16=0x190;}_0x2fd5c8['status'](_0x48eb16)['send'](_0x5b6344[_0xc16c('0x3a')]['test']?{'message':_0xc16c('0x85'),'statusCode':_0x5c61d3['statusCode']}:_0x5c61d3);});};
\ No newline at end of file
index aa7b200..80a8c6d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x26f9=['../../config/environment','./intSalesforceAccount.attributes','../../components/integrations/configuration','exports','define','SalesforceAccount','int_salesforce_accounts','lodash','util','api','request-promise','path'];(function(_0xfbd54c,_0x40c35b){var _0x1c87d6=function(_0x5578fc){while(--_0x5578fc){_0xfbd54c['push'](_0xfbd54c['shift']());}};_0x1c87d6(++_0x40c35b);}(_0x26f9,0x16f));var _0x926f=function(_0x44fd6b,_0x338098){_0x44fd6b=_0x44fd6b-0x0;var _0x7cba12=_0x26f9[_0x44fd6b];return _0x7cba12;};'use strict';var _=require(_0x926f('0x0'));var util=require(_0x926f('0x1'));var logger=require('../../config/logger')(_0x926f('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x926f('0x3'));var fs=require('fs');var path=require(_0x926f('0x4'));var rimraf=require('rimraf');var config=require(_0x926f('0x5'));var attributes=require(_0x926f('0x6'));var integrations=require(_0x926f('0x7'));module[_0x926f('0x8')]=function(_0x46ff8e,_0x3d2ded){return _0x46ff8e[_0x926f('0x9')](_0x926f('0xa'),attributes,{'tableName':_0x926f('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xae60=['lodash','util','../../config/logger','moment','bluebird','request-promise','rimraf','../../config/environment','../../components/integrations/configuration','exports','define','SalesforceAccount','int_salesforce_accounts'];(function(_0x562daf,_0x1ac141){var _0x4d9986=function(_0x10611c){while(--_0x10611c){_0x562daf['push'](_0x562daf['shift']());}};_0x4d9986(++_0x1ac141);}(_0xae60,0x1c7));var _0x0ae6=function(_0x38537f,_0x252124){_0x38537f=_0x38537f-0x0;var _0x141e23=_0xae60[_0x38537f];return _0x141e23;};'use strict';var _=require(_0x0ae6('0x0'));var util=require(_0x0ae6('0x1'));var logger=require(_0x0ae6('0x2'))('api');var moment=require(_0x0ae6('0x3'));var BPromise=require(_0x0ae6('0x4'));var rp=require(_0x0ae6('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x0ae6('0x6'));var config=require(_0x0ae6('0x7'));var attributes=require('./intSalesforceAccount.attributes');var integrations=require(_0x0ae6('0x8'));module[_0x0ae6('0x9')]=function(_0x30e000,_0x46fed4){return _0x30e000[_0x0ae6('0xa')](_0x0ae6('0xb'),attributes,{'tableName':_0x0ae6('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 24c60f2..5e0d20a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4fdb=['options','raw','where','attributes','limit','include','map','model','ShowSalesforceAccount','find','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','http','then','info','SalesforceAccount,\x20%s,\x20%s','debug','stringify','error','code','message','request\x20sent','result','catch','GetSalesforceAccount','SalesforceAccount'];(function(_0x160c73,_0x2ee678){var _0xd9302=function(_0x169454){while(--_0x169454){_0x160c73['push'](_0x160c73['shift']());}};_0xd9302(++_0x2ee678);}(_0x4fdb,0x8e));var _0xb4fd=function(_0x9fa789,_0x405454){_0x9fa789=_0x9fa789-0x0;var _0x36bb5b=_0x4fdb[_0x9fa789];return _0x36bb5b;};'use strict';var _=require(_0xb4fd('0x0'));var util=require(_0xb4fd('0x1'));var moment=require(_0xb4fd('0x2'));var BPromise=require(_0xb4fd('0x3'));var rs=require(_0xb4fd('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xb4fd('0x5'));var logger=require(_0xb4fd('0x6'))(_0xb4fd('0x7'));var config=require(_0xb4fd('0x8'));var jayson=require('jayson/promise');var client=jayson['client'][_0xb4fd('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5b0d84,_0x1e10cb,_0x27f67f){return new BPromise(function(_0x41b9b8,_0x4010fc){return client['request'](_0x5b0d84,_0x27f67f)[_0xb4fd('0xa')](function(_0x1ce335){logger[_0xb4fd('0xb')](_0xb4fd('0xc'),_0x1e10cb,'request\x20sent');logger[_0xb4fd('0xd')]('SalesforceAccount,\x20%s,\x20%s,\x20%s',_0x1e10cb,'request\x20sent',JSON[_0xb4fd('0xe')](_0x1ce335));if(_0x1ce335[_0xb4fd('0xf')]){if(_0x1ce335[_0xb4fd('0xf')][_0xb4fd('0x10')]===0x1f4){logger[_0xb4fd('0xf')]('SalesforceAccount,\x20%s,\x20%s',_0x1e10cb,_0x1ce335['error'][_0xb4fd('0x11')]);return _0x4010fc(_0x1ce335[_0xb4fd('0xf')][_0xb4fd('0x11')]);}logger[_0xb4fd('0xf')](_0xb4fd('0xc'),_0x1e10cb,_0x1ce335[_0xb4fd('0xf')][_0xb4fd('0x11')]);return _0x41b9b8(_0x1ce335[_0xb4fd('0xf')][_0xb4fd('0x11')]);}else{logger['info'](_0xb4fd('0xc'),_0x1e10cb,_0xb4fd('0x12'));_0x41b9b8(_0x1ce335[_0xb4fd('0x13')][_0xb4fd('0x11')]);}})[_0xb4fd('0x14')](function(_0x43f334){logger[_0xb4fd('0xf')](_0xb4fd('0xc'),_0x1e10cb,_0x43f334);_0x4010fc(_0x43f334);});});}exports[_0xb4fd('0x15')]=function(_0x2a410a){var _0x48757b=this;return new Promise(function(_0x48e2eb,_0x433fb7){return db[_0xb4fd('0x16')]['findAll']({'raw':_0x2a410a[_0xb4fd('0x17')]?_0x2a410a[_0xb4fd('0x17')][_0xb4fd('0x18')]===undefined?!![]:![]:!![],'where':_0x2a410a['options']?_0x2a410a['options'][_0xb4fd('0x19')]||null:null,'attributes':_0x2a410a[_0xb4fd('0x17')]?_0x2a410a['options'][_0xb4fd('0x1a')]||null:null,'limit':_0x2a410a[_0xb4fd('0x17')]?_0x2a410a[_0xb4fd('0x17')][_0xb4fd('0x1b')]||null:null,'include':_0x2a410a[_0xb4fd('0x17')]?_0x2a410a[_0xb4fd('0x17')][_0xb4fd('0x1c')]?_[_0xb4fd('0x1d')](_0x2a410a[_0xb4fd('0x17')][_0xb4fd('0x1c')],function(_0xcd9a43){return{'model':db[_0xcd9a43[_0xb4fd('0x1e')]],'as':_0xcd9a43['as'],'attributes':_0xcd9a43[_0xb4fd('0x1a')],'include':_0xcd9a43[_0xb4fd('0x1c')]?_['map'](_0xcd9a43['include'],function(_0x16d65e){return{'model':db[_0x16d65e[_0xb4fd('0x1e')]],'as':_0x16d65e['as'],'attributes':_0x16d65e[_0xb4fd('0x1a')],'include':_0x16d65e[_0xb4fd('0x1c')]?_[_0xb4fd('0x1d')](_0x16d65e[_0xb4fd('0x1c')],function(_0x14c25d){return{'model':db[_0x14c25d[_0xb4fd('0x1e')]],'as':_0x14c25d['as'],'attributes':_0x14c25d[_0xb4fd('0x1a')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x25c297){logger['info'](_0xb4fd('0x15'),_0x2a410a);logger[_0xb4fd('0xd')]('GetSalesforceAccount',_0x2a410a,JSON[_0xb4fd('0xe')](_0x25c297));_0x48e2eb(_0x25c297);})[_0xb4fd('0x14')](function(_0x452d11){logger[_0xb4fd('0xf')](_0xb4fd('0x15'),_0x452d11[_0xb4fd('0x11')],_0x2a410a);_0x433fb7(_0x48757b[_0xb4fd('0xf')](0x1f4,_0x452d11[_0xb4fd('0x11')]));});});};exports[_0xb4fd('0x1f')]=function(_0x38bc0a){var _0x37be13=this;return new Promise(function(_0x5990f5,_0x43450b){return db[_0xb4fd('0x16')][_0xb4fd('0x20')]({'raw':_0x38bc0a[_0xb4fd('0x17')]?_0x38bc0a[_0xb4fd('0x17')][_0xb4fd('0x18')]===undefined?!![]:![]:!![],'where':_0x38bc0a['options']?_0x38bc0a['options'][_0xb4fd('0x19')]||null:null,'attributes':_0x38bc0a[_0xb4fd('0x17')]?_0x38bc0a[_0xb4fd('0x17')][_0xb4fd('0x1a')]||null:null,'include':_0x38bc0a[_0xb4fd('0x17')]?_0x38bc0a[_0xb4fd('0x17')][_0xb4fd('0x1c')]?_[_0xb4fd('0x1d')](_0x38bc0a['options'][_0xb4fd('0x1c')],function(_0xd06fde){return{'model':db[_0xd06fde[_0xb4fd('0x1e')]],'as':_0xd06fde['as'],'attributes':_0xd06fde[_0xb4fd('0x1a')],'include':_0xd06fde['include']?_[_0xb4fd('0x1d')](_0xd06fde[_0xb4fd('0x1c')],function(_0x2ac7ca){return{'model':db[_0x2ac7ca[_0xb4fd('0x1e')]],'as':_0x2ac7ca['as'],'attributes':_0x2ac7ca[_0xb4fd('0x1a')],'include':_0x2ac7ca[_0xb4fd('0x1c')]?_['map'](_0x2ac7ca['include'],function(_0x10beec){return{'model':db[_0x10beec['model']],'as':_0x10beec['as'],'attributes':_0x10beec[_0xb4fd('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xb4fd('0xa')](function(_0x22b5e2){logger[_0xb4fd('0xb')](_0xb4fd('0x1f'),_0x38bc0a);logger['debug'](_0xb4fd('0x1f'),_0x38bc0a,JSON[_0xb4fd('0xe')](_0x22b5e2));_0x5990f5(_0x22b5e2);})[_0xb4fd('0x14')](function(_0x10e17e){logger[_0xb4fd('0xf')]('ShowSalesforceAccount',_0x10e17e[_0xb4fd('0x11')],_0x38bc0a);_0x43450b(_0x37be13['error'](0x1f4,_0x10e17e[_0xb4fd('0x11')]));});});};
\ No newline at end of file
+var _0x843d=['bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','SalesforceAccount,\x20%s,\x20%s,\x20%s','error','code','SalesforceAccount,\x20%s,\x20%s','message','result','catch','SalesforceAccount','findAll','options','where','attributes','include','model','map','GetSalesforceAccount','ShowSalesforceAccount','find','debug','stringify','util','moment'];(function(_0x33929d,_0x334aa1){var _0x17ca2e=function(_0x2e8d4a){while(--_0x2e8d4a){_0x33929d['push'](_0x33929d['shift']());}};_0x17ca2e(++_0x334aa1);}(_0x843d,0xad));var _0xd843=function(_0x5d4547,_0x1798fe){_0x5d4547=_0x5d4547-0x0;var _0x2e0e1c=_0x843d[_0x5d4547];return _0x2e0e1c;};'use strict';var _=require('lodash');var util=require(_0xd843('0x0'));var moment=require(_0xd843('0x1'));var BPromise=require(_0xd843('0x2'));var rs=require(_0xd843('0x3'));var fs=require('fs');var Redis=require(_0xd843('0x4'));var db=require(_0xd843('0x5'))['db'];var utils=require(_0xd843('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0xd843('0x7'));var jayson=require(_0xd843('0x8'));var client=jayson[_0xd843('0x9')][_0xd843('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3ad11c,_0x21af47,_0x4db0da){return new BPromise(function(_0x4afdac,_0x229cab){return client[_0xd843('0xb')](_0x3ad11c,_0x4db0da)[_0xd843('0xc')](function(_0x2c4d6c){logger[_0xd843('0xd')]('SalesforceAccount,\x20%s,\x20%s',_0x21af47,_0xd843('0xe'));logger['debug'](_0xd843('0xf'),_0x21af47,_0xd843('0xe'),JSON['stringify'](_0x2c4d6c));if(_0x2c4d6c[_0xd843('0x10')]){if(_0x2c4d6c['error'][_0xd843('0x11')]===0x1f4){logger['error'](_0xd843('0x12'),_0x21af47,_0x2c4d6c[_0xd843('0x10')]['message']);return _0x229cab(_0x2c4d6c[_0xd843('0x10')][_0xd843('0x13')]);}logger[_0xd843('0x10')](_0xd843('0x12'),_0x21af47,_0x2c4d6c[_0xd843('0x10')][_0xd843('0x13')]);return _0x4afdac(_0x2c4d6c[_0xd843('0x10')]['message']);}else{logger[_0xd843('0xd')](_0xd843('0x12'),_0x21af47,_0xd843('0xe'));_0x4afdac(_0x2c4d6c[_0xd843('0x14')][_0xd843('0x13')]);}})[_0xd843('0x15')](function(_0x596dd3){logger['error'](_0xd843('0x12'),_0x21af47,_0x596dd3);_0x229cab(_0x596dd3);});});}exports['GetSalesforceAccount']=function(_0x173cdd){var _0x42f901=this;return new Promise(function(_0x73d50f,_0x442336){return db[_0xd843('0x16')][_0xd843('0x17')]({'raw':_0x173cdd['options']?_0x173cdd['options']['raw']===undefined?!![]:![]:!![],'where':_0x173cdd[_0xd843('0x18')]?_0x173cdd['options'][_0xd843('0x19')]||null:null,'attributes':_0x173cdd['options']?_0x173cdd[_0xd843('0x18')][_0xd843('0x1a')]||null:null,'limit':_0x173cdd[_0xd843('0x18')]?_0x173cdd['options']['limit']||null:null,'include':_0x173cdd[_0xd843('0x18')]?_0x173cdd[_0xd843('0x18')][_0xd843('0x1b')]?_['map'](_0x173cdd[_0xd843('0x18')][_0xd843('0x1b')],function(_0x3568e9){return{'model':db[_0x3568e9[_0xd843('0x1c')]],'as':_0x3568e9['as'],'attributes':_0x3568e9[_0xd843('0x1a')],'include':_0x3568e9[_0xd843('0x1b')]?_[_0xd843('0x1d')](_0x3568e9[_0xd843('0x1b')],function(_0x11a0b4){return{'model':db[_0x11a0b4[_0xd843('0x1c')]],'as':_0x11a0b4['as'],'attributes':_0x11a0b4[_0xd843('0x1a')],'include':_0x11a0b4[_0xd843('0x1b')]?_['map'](_0x11a0b4[_0xd843('0x1b')],function(_0xdba3fa){return{'model':db[_0xdba3fa[_0xd843('0x1c')]],'as':_0xdba3fa['as'],'attributes':_0xdba3fa[_0xd843('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xd843('0xc')](function(_0x1a95ba){logger['info']('GetSalesforceAccount',_0x173cdd);logger['debug'](_0xd843('0x1e'),_0x173cdd,JSON['stringify'](_0x1a95ba));_0x73d50f(_0x1a95ba);})[_0xd843('0x15')](function(_0x12f8b0){logger[_0xd843('0x10')](_0xd843('0x1e'),_0x12f8b0[_0xd843('0x13')],_0x173cdd);_0x442336(_0x42f901['error'](0x1f4,_0x12f8b0[_0xd843('0x13')]));});});};exports[_0xd843('0x1f')]=function(_0xd4c28e){var _0x4163ea=this;return new Promise(function(_0x3ab91c,_0x221f8e){return db[_0xd843('0x16')][_0xd843('0x20')]({'raw':_0xd4c28e[_0xd843('0x18')]?_0xd4c28e[_0xd843('0x18')]['raw']===undefined?!![]:![]:!![],'where':_0xd4c28e[_0xd843('0x18')]?_0xd4c28e[_0xd843('0x18')][_0xd843('0x19')]||null:null,'attributes':_0xd4c28e[_0xd843('0x18')]?_0xd4c28e[_0xd843('0x18')][_0xd843('0x1a')]||null:null,'include':_0xd4c28e[_0xd843('0x18')]?_0xd4c28e[_0xd843('0x18')][_0xd843('0x1b')]?_[_0xd843('0x1d')](_0xd4c28e[_0xd843('0x18')][_0xd843('0x1b')],function(_0x195b7f){return{'model':db[_0x195b7f[_0xd843('0x1c')]],'as':_0x195b7f['as'],'attributes':_0x195b7f[_0xd843('0x1a')],'include':_0x195b7f[_0xd843('0x1b')]?_[_0xd843('0x1d')](_0x195b7f['include'],function(_0x41b452){return{'model':db[_0x41b452[_0xd843('0x1c')]],'as':_0x41b452['as'],'attributes':_0x41b452[_0xd843('0x1a')],'include':_0x41b452['include']?_[_0xd843('0x1d')](_0x41b452['include'],function(_0x1f4fa3){return{'model':db[_0x1f4fa3[_0xd843('0x1c')]],'as':_0x1f4fa3['as'],'attributes':_0x1f4fa3[_0xd843('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xd843('0xc')](function(_0x493361){logger[_0xd843('0xd')](_0xd843('0x1f'),_0xd4c28e);logger[_0xd843('0x21')]('ShowSalesforceAccount',_0xd4c28e,JSON[_0xd843('0x22')](_0x493361));_0x3ab91c(_0x493361);})[_0xd843('0x15')](function(_0x113231){logger[_0xd843('0x10')](_0xd843('0x1f'),_0x113231[_0xd843('0x13')],_0xd4c28e);_0x221f8e(_0x4163ea[_0xd843('0x10')](0x1f4,_0x113231['message']));});});};
\ No newline at end of file
index 7be943e..2c762a6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb26d=['Router','../../components/interaction/service','./intSalesforceConfiguration.controller','get','index','/:id/fields','isAuthenticated','getDescriptions','post','put','/:id','update','exports','multer','util','path'];(function(_0x456e47,_0x1bfc8f){var _0x45cdc7=function(_0x105d06){while(--_0x105d06){_0x456e47['push'](_0x456e47['shift']());}};_0x45cdc7(++_0x1bfc8f);}(_0xb26d,0x7d));var _0xdb26=function(_0x157c43,_0xc6b4d){_0x157c43=_0x157c43-0x0;var _0x49dced=_0xb26d[_0x157c43];return _0x49dced;};'use strict';var multer=require(_0xdb26('0x0'));var util=require(_0xdb26('0x1'));var path=require(_0xdb26('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xdb26('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xdb26('0x4'));var config=require('../../config/environment');var controller=require(_0xdb26('0x5'));router[_0xdb26('0x6')]('/',auth['isAuthenticated'](),controller[_0xdb26('0x7')]);router[_0xdb26('0x6')]('/:id',auth['isAuthenticated'](),controller['show']);router[_0xdb26('0x6')](_0xdb26('0x8'),auth[_0xdb26('0x9')](),controller['getFields']);router[_0xdb26('0x6')]('/:id/subjects',auth[_0xdb26('0x9')](),controller['getSubjects']);router[_0xdb26('0x6')]('/:id/descriptions',auth[_0xdb26('0x9')](),controller[_0xdb26('0xa')]);router[_0xdb26('0xb')]('/',auth['isAuthenticated'](),controller['create']);router[_0xdb26('0xc')](_0xdb26('0xd'),auth[_0xdb26('0x9')](),controller[_0xdb26('0xe')]);router['delete'](_0xdb26('0xd'),auth[_0xdb26('0x9')](),controller['destroy']);module[_0xdb26('0xf')]=router;
\ No newline at end of file
+var _0x445d=['get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','getDescriptions','post','create','put','update','delete','destroy','exports','util','path','connect-timeout','express','../../components/auth/service','../../config/environment','./intSalesforceConfiguration.controller'];(function(_0x26ed80,_0x134e23){var _0x48e465=function(_0x2a2ba4){while(--_0x2a2ba4){_0x26ed80['push'](_0x26ed80['shift']());}};_0x48e465(++_0x134e23);}(_0x445d,0x1f1));var _0xd445=function(_0x2af68f,_0x4b55b2){_0x2af68f=_0x2af68f-0x0;var _0x3ed66a=_0x445d[_0x2af68f];return _0x3ed66a;};'use strict';var multer=require('multer');var util=require(_0xd445('0x0'));var path=require(_0xd445('0x1'));var timeout=require(_0xd445('0x2'));var express=require(_0xd445('0x3'));var router=express['Router']();var auth=require(_0xd445('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xd445('0x5'));var controller=require(_0xd445('0x6'));router[_0xd445('0x7')]('/',auth[_0xd445('0x8')](),controller[_0xd445('0x9')]);router[_0xd445('0x7')](_0xd445('0xa'),auth[_0xd445('0x8')](),controller[_0xd445('0xb')]);router['get'](_0xd445('0xc'),auth[_0xd445('0x8')](),controller[_0xd445('0xd')]);router[_0xd445('0x7')](_0xd445('0xe'),auth[_0xd445('0x8')](),controller[_0xd445('0xf')]);router['get']('/:id/descriptions',auth[_0xd445('0x8')](),controller[_0xd445('0x10')]);router[_0xd445('0x11')]('/',auth[_0xd445('0x8')](),controller[_0xd445('0x12')]);router[_0xd445('0x13')]('/:id',auth[_0xd445('0x8')](),controller[_0xd445('0x14')]);router[_0xd445('0x15')](_0xd445('0xa'),auth[_0xd445('0x8')](),controller[_0xd445('0x16')]);module[_0xd445('0x17')]=router;
\ No newline at end of file
index 9e4ff3b..b26391e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcafe=['contact_lead','nothing','lead','sequelize','exports','STRING','ENUM','Case','contact'];(function(_0xc3d0da,_0x2621d2){var _0xb609f4=function(_0x371f92){while(--_0x371f92){_0xc3d0da['push'](_0xc3d0da['shift']());}};_0xb609f4(++_0x2621d2);}(_0xcafe,0x1a1));var _0xecaf=function(_0x36a6cd,_0x225b81){_0x36a6cd=_0x36a6cd-0x0;var _0x5d8e90=_0xcafe[_0x36a6cd];return _0x5d8e90;};'use strict';var Sequelize=require(_0xecaf('0x0'));module[_0xecaf('0x1')]={'name':{'type':Sequelize[_0xecaf('0x2')]},'description':{'type':Sequelize[_0xecaf('0x2')]},'ticketType':{'type':Sequelize[_0xecaf('0x3')]('Task',_0xecaf('0x4')),'defaultValue':'Task'},'moduleSearch':{'type':Sequelize['ENUM']('contact_lead',_0xecaf('0x5'),'lead'),'defaultValue':_0xecaf('0x6')},'moduleCreate':{'type':Sequelize[_0xecaf('0x3')](_0xecaf('0x7'),_0xecaf('0x5'),_0xecaf('0x8')),'defaultValue':_0xecaf('0x8')}};
\ No newline at end of file
+var _0x370b=['ENUM','Task','Case','contact','lead','nothing','sequelize','exports','STRING'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x370b,0x1bf));var _0xb370=function(_0x30ffc1,_0x556cd6){_0x30ffc1=_0x30ffc1-0x0;var _0x586b40=_0x370b[_0x30ffc1];return _0x586b40;};'use strict';var Sequelize=require(_0xb370('0x0'));module[_0xb370('0x1')]={'name':{'type':Sequelize[_0xb370('0x2')]},'description':{'type':Sequelize[_0xb370('0x2')]},'ticketType':{'type':Sequelize[_0xb370('0x3')](_0xb370('0x4'),_0xb370('0x5')),'defaultValue':_0xb370('0x4')},'moduleSearch':{'type':Sequelize[_0xb370('0x3')]('contact_lead',_0xb370('0x6'),_0xb370('0x7')),'defaultValue':'contact_lead'},'moduleCreate':{'type':Sequelize[_0xb370('0x3')](_0xb370('0x8'),'contact','lead'),'defaultValue':_0xb370('0x7')}};
\ No newline at end of file
index 853bb0e..ba97c8c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x83c6=['query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','where','pick','filter','merge','map','type','options','SalesforceConfiguration','includeAll','findAll','catch','params','include','find','create','body','getFields','findOne','SalesforceField','sort','getSubjects','getDescriptions','html-pdf','eml-format','zip-dir','fast-json-patch','bluebird','mustache','util','path','sox','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','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','SalesforceConfiguration,\x20%s,\x20%s','debug','SalesforceConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','end','status','json','count','offset','limit','set','apply','reject','save','update','destroy','stack','name','rawAttributes','keys'];(function(_0x59d89e,_0x55edf5){var _0x554e93=function(_0x3d40bc){while(--_0x3d40bc){_0x59d89e['push'](_0x59d89e['shift']());}};_0x554e93(++_0x55edf5);}(_0x83c6,0x77));var _0x683c=function(_0x583fe8,_0x3940aa){_0x583fe8=_0x583fe8-0x0;var _0xb456e3=_0x83c6[_0x583fe8];return _0xb456e3;};'use strict';var pdf=require(_0x683c('0x0'));var emlformat=require(_0x683c('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x683c('0x2'));var jsonpatch=require(_0x683c('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x683c('0x4'));var Mustache=require(_0x683c('0x5'));var util=require(_0x683c('0x6'));var path=require(_0x683c('0x7'));var sox=require(_0x683c('0x8'));var csv=require(_0x683c('0x9'));var ejs=require(_0x683c('0xa'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x683c('0xb'));var jsforce=require(_0x683c('0xc'));var deskjs=require(_0x683c('0xd'));var toCsv=require(_0x683c('0x9'));var querystring=require(_0x683c('0xe'));var Papa=require(_0x683c('0xf'));var Redis=require(_0x683c('0x10'));var authService=require(_0x683c('0x11'));var qs=require(_0x683c('0x12'));var hardwareService=require(_0x683c('0x13'));var logger=require('../../config/logger')(_0x683c('0x14'));var utils=require(_0x683c('0x15'));var config=require(_0x683c('0x16'));var db=require('../../mysqldb')['db'];var jayson=require(_0x683c('0x17'));var client=jayson['client'][_0x683c('0x18')]({'port':0x232a});function checkPasswordPattern(_0x4f4906,_0x142f4c,_0x31faa5){if(_0x31faa5){var _0x4e4b0e=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4e4b0e[_0x683c('0x19')](_0x142f4c)){return _0x4f4906;}else{throw new Error(_0x683c('0x1a'));}}else{return _0x4f4906;}}function respondWithRpcPromise(_0x527932,_0x3f7271,_0x857c1f,_0x19333a){return new BPromise(function(_0x50b464,_0x23be87){var _0x55f348=_0x19333a||client;return _0x55f348[_0x683c('0x1b')](_0x527932,_0x857c1f)[_0x683c('0x1c')](function(_0x24b17c){logger[_0x683c('0x1d')](_0x683c('0x1e'),_0x3f7271,'request\x20sent');logger[_0x683c('0x1f')](_0x683c('0x20'),_0x3f7271,_0x683c('0x21'),JSON[_0x683c('0x22')](_0x24b17c));if(_0x24b17c[_0x683c('0x23')]){if(_0x24b17c[_0x683c('0x23')][_0x683c('0x24')]===0x1f4){logger[_0x683c('0x23')](_0x683c('0x1e'),_0x3f7271,_0x24b17c[_0x683c('0x23')]['message']);return _0x23be87(_0x24b17c[_0x683c('0x23')][_0x683c('0x25')]);}logger[_0x683c('0x23')](_0x683c('0x1e'),_0x3f7271,_0x24b17c[_0x683c('0x23')][_0x683c('0x25')]);return _0x50b464(_0x24b17c[_0x683c('0x23')]['message']);}else{logger[_0x683c('0x1d')](_0x683c('0x1e'),_0x3f7271,_0x683c('0x21'));_0x50b464(_0x24b17c[_0x683c('0x26')][_0x683c('0x25')]);}})['catch'](function(_0xc40fb8){logger[_0x683c('0x23')](_0x683c('0x1e'),_0x3f7271,_0xc40fb8);_0x23be87(_0xc40fb8);});});}function respondWithStatusCode(_0x219eff,_0x38b3d3){_0x38b3d3=_0x38b3d3||0xcc;return function(_0x31b794){if(_0x31b794){return _0x219eff['sendStatus'](_0x38b3d3);}return _0x219eff['status'](_0x38b3d3)[_0x683c('0x27')]();};}function respondWithResult(_0x5473a9,_0x2d137e){_0x2d137e=_0x2d137e||0xc8;return function(_0x491a0e){if(_0x491a0e){return _0x5473a9[_0x683c('0x28')](_0x2d137e)[_0x683c('0x29')](_0x491a0e);}};}function respondWithFilteredResult(_0x2a7d22,_0x529add){return function(_0x46f833){if(_0x46f833){var _0x9e0eba=_0x46f833[_0x683c('0x2a')],_0x222363=_0x529add[_0x683c('0x2b')],_0x4d23c5=_0x529add[_0x683c('0x2b')]+_0x529add[_0x683c('0x2c')],_0x3e3051;if(_0x4d23c5>=_0x9e0eba){_0x4d23c5=_0x9e0eba;_0x3e3051=0xc8;}else{_0x3e3051=0xce;}_0x2a7d22[_0x683c('0x28')](_0x3e3051);return _0x2a7d22[_0x683c('0x2d')]('Content-Range',_0x222363+'-'+_0x4d23c5+'/'+_0x9e0eba)[_0x683c('0x29')](_0x46f833);}return null;};}function patchUpdates(_0x33c561){return function(_0x2fcc0b){try{jsonpatch[_0x683c('0x2e')](_0x2fcc0b,_0x33c561,!![]);}catch(_0x1d78db){return BPromise[_0x683c('0x2f')](_0x1d78db);}return _0x2fcc0b[_0x683c('0x30')]();};}function saveUpdates(_0x4caa82,_0x4160de){return function(_0x1d9c09){if(_0x1d9c09){return _0x1d9c09[_0x683c('0x31')](_0x4caa82)[_0x683c('0x1c')](function(_0x3575c4){return _0x3575c4;});}return null;};}function removeEntity(_0x2bb49f,_0x252709){return function(_0x481a7f){if(_0x481a7f){return _0x481a7f[_0x683c('0x32')]()['then'](function(){_0x2bb49f[_0x683c('0x28')](0xcc)[_0x683c('0x27')]();});}};}function handleEntityNotFound(_0x29aa82,_0x165cd7){return function(_0x28f960){if(!_0x28f960){_0x29aa82['sendStatus'](0x194);}return _0x28f960;};}function handleError(_0x37cdf2,_0x440bfe){_0x440bfe=_0x440bfe||0x1f4;return function(_0x24fa0e){logger[_0x683c('0x23')](_0x24fa0e[_0x683c('0x33')]);if(_0x24fa0e[_0x683c('0x34')]){delete _0x24fa0e[_0x683c('0x34')];}_0x37cdf2['status'](_0x440bfe)['send'](_0x24fa0e);};}exports['index']=function(_0x23e273,_0x22a3c5){var _0x562dfb={},_0x283156={},_0x20dcd8={'count':0x0,'rows':[]};var _0x571529=db['SalesforceConfiguration'][_0x683c('0x35')];_0x283156['model']=_[_0x683c('0x36')](_0x571529);_0x283156[_0x683c('0x37')]=_[_0x683c('0x36')](_0x23e273[_0x683c('0x37')]);_0x283156[_0x683c('0x38')]=_[_0x683c('0x39')](_0x283156[_0x683c('0x3a')],_0x283156[_0x683c('0x37')]);_0x562dfb[_0x683c('0x3b')]=_[_0x683c('0x39')](_0x283156[_0x683c('0x3a')],qs[_0x683c('0x3c')](_0x23e273[_0x683c('0x37')]['fields']));_0x562dfb[_0x683c('0x3b')]=_0x562dfb['attributes'][_0x683c('0x3d')]?_0x562dfb[_0x683c('0x3b')]:_0x283156[_0x683c('0x3a')];if(!_0x23e273[_0x683c('0x37')][_0x683c('0x3e')](_0x683c('0x3f'))){_0x562dfb[_0x683c('0x2c')]=qs[_0x683c('0x2c')](_0x23e273[_0x683c('0x37')]['limit']);_0x562dfb[_0x683c('0x2b')]=qs[_0x683c('0x2b')](_0x23e273['query'][_0x683c('0x2b')]);}_0x562dfb[_0x683c('0x40')]=qs['sort'](_0x23e273[_0x683c('0x37')]['sort']);_0x562dfb[_0x683c('0x41')]=qs['filters'](_[_0x683c('0x42')](_0x23e273[_0x683c('0x37')],_0x283156[_0x683c('0x38')]));if(_0x23e273['query'][_0x683c('0x43')]){_0x562dfb[_0x683c('0x41')]=_[_0x683c('0x44')](_0x562dfb['where'],{'$or':_[_0x683c('0x45')](_0x571529,function(_0x37fa06){if(_0x37fa06[_0x683c('0x46')]['key']!=='VIRTUAL'){var _0xf91a02={};_0xf91a02[_0x37fa06['field']]={'$like':'%'+_0x23e273[_0x683c('0x37')][_0x683c('0x43')]+'%'};return _0xf91a02;}})});}_0x562dfb=_[_0x683c('0x44')]({},_0x562dfb,_0x23e273[_0x683c('0x47')]);var _0x522675={'where':_0x562dfb[_0x683c('0x41')]};return db[_0x683c('0x48')][_0x683c('0x2a')](_0x522675)[_0x683c('0x1c')](function(_0x2f73c6){_0x20dcd8[_0x683c('0x2a')]=_0x2f73c6;if(_0x23e273[_0x683c('0x37')][_0x683c('0x49')]){_0x562dfb['include']=[{'all':!![]}];}return db[_0x683c('0x48')][_0x683c('0x4a')](_0x562dfb);})[_0x683c('0x1c')](function(_0xc9814f){_0x20dcd8['rows']=_0xc9814f;return _0x20dcd8;})[_0x683c('0x1c')](respondWithFilteredResult(_0x22a3c5,_0x562dfb))[_0x683c('0x4b')](handleError(_0x22a3c5,null));};exports['show']=function(_0x4e32e8,_0x5a48a3){var _0x47e76e={'raw':![],'where':{'id':_0x4e32e8[_0x683c('0x4c')]['id']}},_0x2a3de2={};_0x2a3de2[_0x683c('0x3a')]=_[_0x683c('0x36')](db[_0x683c('0x48')][_0x683c('0x35')]);_0x2a3de2[_0x683c('0x37')]=_['keys'](_0x4e32e8['query']);_0x2a3de2[_0x683c('0x38')]=_[_0x683c('0x39')](_0x2a3de2['model'],_0x2a3de2[_0x683c('0x37')]);_0x47e76e['attributes']=_[_0x683c('0x39')](_0x2a3de2[_0x683c('0x3a')],qs[_0x683c('0x3c')](_0x4e32e8[_0x683c('0x37')][_0x683c('0x3c')]));_0x47e76e[_0x683c('0x3b')]=_0x47e76e[_0x683c('0x3b')][_0x683c('0x3d')]?_0x47e76e[_0x683c('0x3b')]:_0x2a3de2[_0x683c('0x3a')];if(_0x4e32e8[_0x683c('0x37')][_0x683c('0x49')]){_0x47e76e[_0x683c('0x4d')]=[{'all':!![]}];}_0x47e76e=_['merge']({},_0x47e76e,_0x4e32e8[_0x683c('0x47')]);return db[_0x683c('0x48')][_0x683c('0x4e')](_0x47e76e)[_0x683c('0x1c')](handleEntityNotFound(_0x5a48a3,null))[_0x683c('0x1c')](respondWithResult(_0x5a48a3,null))[_0x683c('0x4b')](handleError(_0x5a48a3,null));};exports[_0x683c('0x4f')]=function(_0x5f0fee,_0x5cc3d8){return db[_0x683c('0x48')][_0x683c('0x4f')](_0x5f0fee[_0x683c('0x50')],{})[_0x683c('0x1c')](respondWithResult(_0x5cc3d8,0xc9))[_0x683c('0x4b')](handleError(_0x5cc3d8,null));};exports['update']=function(_0x25a43e,_0x42aa53){if(_0x25a43e['body']['id']){delete _0x25a43e['body']['id'];}return db['SalesforceConfiguration'][_0x683c('0x4e')]({'where':{'id':_0x25a43e[_0x683c('0x4c')]['id']}})['then'](handleEntityNotFound(_0x42aa53,null))[_0x683c('0x1c')](saveUpdates(_0x25a43e[_0x683c('0x50')],null))[_0x683c('0x1c')](respondWithResult(_0x42aa53,null))[_0x683c('0x4b')](handleError(_0x42aa53,null));};exports['destroy']=function(_0x533de2,_0x2e1200){return db[_0x683c('0x48')]['find']({'where':{'id':_0x533de2[_0x683c('0x4c')]['id']}})['then'](handleEntityNotFound(_0x2e1200,null))[_0x683c('0x1c')](removeEntity(_0x2e1200,null))[_0x683c('0x4b')](handleError(_0x2e1200,null));};exports[_0x683c('0x51')]=function(_0x2953c9,_0x1e38bc,_0x3f838d){var _0x4f1603={};var _0x540d11={};var _0x3eabbb;var _0x28a1e0;return db[_0x683c('0x48')][_0x683c('0x52')]({'where':{'id':_0x2953c9['params']['id']}})[_0x683c('0x1c')](handleEntityNotFound(_0x1e38bc,null))['then'](function(_0x5c052e){if(_0x5c052e){_0x3eabbb=_0x5c052e;_0x540d11[_0x683c('0x3a')]=_['keys'](db[_0x683c('0x53')][_0x683c('0x35')]);_0x540d11['query']=_['keys'](_0x2953c9[_0x683c('0x37')]);_0x540d11['filters']=_['intersection'](_0x540d11[_0x683c('0x3a')],_0x540d11[_0x683c('0x37')]);_0x4f1603[_0x683c('0x3b')]=_[_0x683c('0x39')](_0x540d11[_0x683c('0x3a')],qs[_0x683c('0x3c')](_0x2953c9[_0x683c('0x37')]['fields']));_0x4f1603['attributes']=_0x4f1603[_0x683c('0x3b')][_0x683c('0x3d')]?_0x4f1603[_0x683c('0x3b')]:_0x540d11[_0x683c('0x3a')];_0x4f1603['order']=qs[_0x683c('0x54')](_0x2953c9['query'][_0x683c('0x54')]);_0x4f1603['where']=qs[_0x683c('0x38')](_[_0x683c('0x42')](_0x2953c9[_0x683c('0x37')],_0x540d11[_0x683c('0x38')]));if(_0x2953c9[_0x683c('0x37')]['filter']){_0x4f1603['where']=_['merge'](_0x4f1603['where'],{'$or':_[_0x683c('0x45')](_0x4f1603[_0x683c('0x3b')],function(_0x1d995d){var _0x2f5608={};_0x2f5608[_0x1d995d]={'$like':'%'+_0x2953c9[_0x683c('0x37')]['filter']+'%'};return _0x2f5608;})});}_0x4f1603=_[_0x683c('0x44')]({},_0x4f1603,_0x2953c9[_0x683c('0x47')]);return _0x3eabbb[_0x683c('0x51')](_0x4f1603);}})[_0x683c('0x1c')](function(_0x12be4c){if(_0x12be4c){_0x28a1e0=_0x12be4c[_0x683c('0x3d')];if(!_0x2953c9[_0x683c('0x37')][_0x683c('0x3e')](_0x683c('0x3f'))){_0x4f1603['limit']=qs[_0x683c('0x2c')](_0x2953c9[_0x683c('0x37')][_0x683c('0x2c')]);_0x4f1603[_0x683c('0x2b')]=qs[_0x683c('0x2b')](_0x2953c9[_0x683c('0x37')][_0x683c('0x2b')]);}return _0x3eabbb[_0x683c('0x51')](_0x4f1603);}})[_0x683c('0x1c')](function(_0x5fbd92){if(_0x5fbd92){return _0x5fbd92?{'count':_0x28a1e0,'rows':_0x5fbd92}:null;}})[_0x683c('0x1c')](respondWithResult(_0x1e38bc,null))[_0x683c('0x4b')](handleError(_0x1e38bc,null));};exports[_0x683c('0x55')]=function(_0x4ec28d,_0x27c0ef,_0x3f9691){var _0x53a6c0={};var _0x19dec3={};var _0x45a664;var _0x1d3c57;return db['SalesforceConfiguration'][_0x683c('0x52')]({'where':{'id':_0x4ec28d[_0x683c('0x4c')]['id']}})[_0x683c('0x1c')](handleEntityNotFound(_0x27c0ef,null))[_0x683c('0x1c')](function(_0x422c3f){if(_0x422c3f){_0x45a664=_0x422c3f;_0x19dec3[_0x683c('0x3a')]=_[_0x683c('0x36')](db[_0x683c('0x53')][_0x683c('0x35')]);_0x19dec3[_0x683c('0x37')]=_['keys'](_0x4ec28d[_0x683c('0x37')]);_0x19dec3['filters']=_['intersection'](_0x19dec3[_0x683c('0x3a')],_0x19dec3[_0x683c('0x37')]);_0x53a6c0['attributes']=_[_0x683c('0x39')](_0x19dec3[_0x683c('0x3a')],qs[_0x683c('0x3c')](_0x4ec28d['query']['fields']));_0x53a6c0[_0x683c('0x3b')]=_0x53a6c0['attributes']['length']?_0x53a6c0[_0x683c('0x3b')]:_0x19dec3[_0x683c('0x3a')];_0x53a6c0[_0x683c('0x40')]=qs['sort'](_0x4ec28d[_0x683c('0x37')][_0x683c('0x54')]);_0x53a6c0['where']=qs['filters'](_[_0x683c('0x42')](_0x4ec28d[_0x683c('0x37')],_0x19dec3['filters']));if(_0x4ec28d[_0x683c('0x37')][_0x683c('0x43')]){_0x53a6c0[_0x683c('0x41')]=_['merge'](_0x53a6c0[_0x683c('0x41')],{'$or':_[_0x683c('0x45')](_0x53a6c0[_0x683c('0x3b')],function(_0x11ca85){var _0x257504={};_0x257504[_0x11ca85]={'$like':'%'+_0x4ec28d[_0x683c('0x37')][_0x683c('0x43')]+'%'};return _0x257504;})});}_0x53a6c0=_[_0x683c('0x44')]({},_0x53a6c0,_0x4ec28d[_0x683c('0x47')]);return _0x45a664[_0x683c('0x55')](_0x53a6c0);}})['then'](function(_0x567ad0){if(_0x567ad0){_0x1d3c57=_0x567ad0[_0x683c('0x3d')];if(!_0x4ec28d[_0x683c('0x37')]['hasOwnProperty'](_0x683c('0x3f'))){_0x53a6c0['limit']=qs[_0x683c('0x2c')](_0x4ec28d[_0x683c('0x37')]['limit']);_0x53a6c0['offset']=qs['offset'](_0x4ec28d[_0x683c('0x37')]['offset']);}return _0x45a664['getSubjects'](_0x53a6c0);}})[_0x683c('0x1c')](function(_0x49dd5b){if(_0x49dd5b){return _0x49dd5b?{'count':_0x1d3c57,'rows':_0x49dd5b}:null;}})['then'](respondWithResult(_0x27c0ef,null))[_0x683c('0x4b')](handleError(_0x27c0ef,null));};exports[_0x683c('0x56')]=function(_0x534823,_0x1706af,_0x5232f4){var _0x50b8a6={};var _0x11d102={};var _0x10b750;var _0x1cc45d;return db[_0x683c('0x48')][_0x683c('0x52')]({'where':{'id':_0x534823[_0x683c('0x4c')]['id']}})[_0x683c('0x1c')](handleEntityNotFound(_0x1706af,null))[_0x683c('0x1c')](function(_0x47fc0d){if(_0x47fc0d){_0x10b750=_0x47fc0d;_0x11d102[_0x683c('0x3a')]=_[_0x683c('0x36')](db[_0x683c('0x53')][_0x683c('0x35')]);_0x11d102[_0x683c('0x37')]=_[_0x683c('0x36')](_0x534823[_0x683c('0x37')]);_0x11d102[_0x683c('0x38')]=_[_0x683c('0x39')](_0x11d102['model'],_0x11d102[_0x683c('0x37')]);_0x50b8a6[_0x683c('0x3b')]=_[_0x683c('0x39')](_0x11d102[_0x683c('0x3a')],qs[_0x683c('0x3c')](_0x534823[_0x683c('0x37')][_0x683c('0x3c')]));_0x50b8a6[_0x683c('0x3b')]=_0x50b8a6[_0x683c('0x3b')]['length']?_0x50b8a6[_0x683c('0x3b')]:_0x11d102[_0x683c('0x3a')];_0x50b8a6[_0x683c('0x40')]=qs[_0x683c('0x54')](_0x534823[_0x683c('0x37')][_0x683c('0x54')]);_0x50b8a6[_0x683c('0x41')]=qs[_0x683c('0x38')](_[_0x683c('0x42')](_0x534823[_0x683c('0x37')],_0x11d102[_0x683c('0x38')]));if(_0x534823['query']['filter']){_0x50b8a6[_0x683c('0x41')]=_[_0x683c('0x44')](_0x50b8a6[_0x683c('0x41')],{'$or':_[_0x683c('0x45')](_0x50b8a6[_0x683c('0x3b')],function(_0x2866cc){var _0x49f460={};_0x49f460[_0x2866cc]={'$like':'%'+_0x534823[_0x683c('0x37')][_0x683c('0x43')]+'%'};return _0x49f460;})});}_0x50b8a6=_[_0x683c('0x44')]({},_0x50b8a6,_0x534823['options']);return _0x10b750[_0x683c('0x56')](_0x50b8a6);}})[_0x683c('0x1c')](function(_0x51af3e){if(_0x51af3e){_0x1cc45d=_0x51af3e[_0x683c('0x3d')];if(!_0x534823['query']['hasOwnProperty']('nolimit')){_0x50b8a6[_0x683c('0x2c')]=qs['limit'](_0x534823['query'][_0x683c('0x2c')]);_0x50b8a6[_0x683c('0x2b')]=qs[_0x683c('0x2b')](_0x534823[_0x683c('0x37')]['offset']);}return _0x10b750[_0x683c('0x56')](_0x50b8a6);}})[_0x683c('0x1c')](function(_0x2a330e){if(_0x2a330e){return _0x2a330e?{'count':_0x1cc45d,'rows':_0x2a330e}:null;}})['then'](respondWithResult(_0x1706af,null))[_0x683c('0x4b')](handleError(_0x1706af,null));};
\ No newline at end of file
+var _0x6927=['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','SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','SalesforceConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','status','end','offset','limit','Content-Range','save','update','then','destroy','sendStatus','stack','name','send','index','SalesforceConfiguration','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','where','pick','filter','merge','map','key','VIRTUAL','field','options','count','include','findAll','rows','show','params','length','create','body','find','getFields','findOne','order','sort','nolimit','getSubjects','SalesforceField','getDescriptions','html-pdf','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','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','../../mysqldb','http'];(function(_0x4b9014,_0x3b0b76){var _0x53fdce=function(_0xe31f52){while(--_0xe31f52){_0x4b9014['push'](_0x4b9014['shift']());}};_0x53fdce(++_0x3b0b76);}(_0x6927,0x146));var _0x7692=function(_0x19f803,_0x4f0914){_0x19f803=_0x19f803-0x0;var _0x2aa624=_0x6927[_0x19f803];return _0x2aa624;};'use strict';var pdf=require(_0x7692('0x0'));var emlformat=require(_0x7692('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x7692('0x2'));var jsonpatch=require(_0x7692('0x3'));var rp=require('request-promise');var moment=require(_0x7692('0x4'));var BPromise=require(_0x7692('0x5'));var Mustache=require(_0x7692('0x6'));var util=require('util');var path=require(_0x7692('0x7'));var sox=require(_0x7692('0x8'));var csv=require(_0x7692('0x9'));var ejs=require(_0x7692('0xa'));var fs=require('fs');var _=require(_0x7692('0xb'));var squel=require(_0x7692('0xc'));var crypto=require(_0x7692('0xd'));var jsforce=require(_0x7692('0xe'));var deskjs=require(_0x7692('0xf'));var toCsv=require('to-csv');var querystring=require(_0x7692('0x10'));var Papa=require(_0x7692('0x11'));var Redis=require(_0x7692('0x12'));var authService=require(_0x7692('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x7692('0x14'));var logger=require(_0x7692('0x15'))(_0x7692('0x16'));var utils=require(_0x7692('0x17'));var config=require('../../config/environment');var db=require(_0x7692('0x18'))['db'];var jayson=require('jayson/promise');var client=jayson['client'][_0x7692('0x19')]({'port':0x232a});function checkPasswordPattern(_0x47ea90,_0x23736f,_0x2301ff){if(_0x2301ff){var _0x1531c2=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1531c2[_0x7692('0x1a')](_0x23736f)){return _0x47ea90;}else{throw new Error(_0x7692('0x1b'));}}else{return _0x47ea90;}}function respondWithRpcPromise(_0x5b9dc1,_0x6077a3,_0x525852,_0x33e407){return new BPromise(function(_0x166f74,_0x307108){var _0x28ea56=_0x33e407||client;return _0x28ea56['request'](_0x5b9dc1,_0x525852)['then'](function(_0x4fab88){logger[_0x7692('0x1c')](_0x7692('0x1d'),_0x6077a3,_0x7692('0x1e'));logger['debug'](_0x7692('0x1f'),_0x6077a3,_0x7692('0x1e'),JSON[_0x7692('0x20')](_0x4fab88));if(_0x4fab88[_0x7692('0x21')]){if(_0x4fab88[_0x7692('0x21')][_0x7692('0x22')]===0x1f4){logger[_0x7692('0x21')](_0x7692('0x1d'),_0x6077a3,_0x4fab88[_0x7692('0x21')]['message']);return _0x307108(_0x4fab88[_0x7692('0x21')][_0x7692('0x23')]);}logger[_0x7692('0x21')]('SalesforceConfiguration,\x20%s,\x20%s',_0x6077a3,_0x4fab88[_0x7692('0x21')]['message']);return _0x166f74(_0x4fab88[_0x7692('0x21')][_0x7692('0x23')]);}else{logger['info'](_0x7692('0x1d'),_0x6077a3,_0x7692('0x1e'));_0x166f74(_0x4fab88['result']['message']);}})[_0x7692('0x24')](function(_0xd31d66){logger[_0x7692('0x21')]('SalesforceConfiguration,\x20%s,\x20%s',_0x6077a3,_0xd31d66);_0x307108(_0xd31d66);});});}function respondWithStatusCode(_0x177b75,_0x127e9a){_0x127e9a=_0x127e9a||0xcc;return function(_0x1975b7){if(_0x1975b7){return _0x177b75['sendStatus'](_0x127e9a);}return _0x177b75[_0x7692('0x25')](_0x127e9a)[_0x7692('0x26')]();};}function respondWithResult(_0x2e9a5c,_0x411a2a){_0x411a2a=_0x411a2a||0xc8;return function(_0x82a47e){if(_0x82a47e){return _0x2e9a5c['status'](_0x411a2a)['json'](_0x82a47e);}};}function respondWithFilteredResult(_0x4194c7,_0xfb760b){return function(_0x22f709){if(_0x22f709){var _0x54ba60=_0x22f709['count'],_0x36c589=_0xfb760b['offset'],_0x22e9c3=_0xfb760b[_0x7692('0x27')]+_0xfb760b[_0x7692('0x28')],_0x44f05f;if(_0x22e9c3>=_0x54ba60){_0x22e9c3=_0x54ba60;_0x44f05f=0xc8;}else{_0x44f05f=0xce;}_0x4194c7['status'](_0x44f05f);return _0x4194c7['set'](_0x7692('0x29'),_0x36c589+'-'+_0x22e9c3+'/'+_0x54ba60)['json'](_0x22f709);}return null;};}function patchUpdates(_0x4b8cb5){return function(_0xf7f9c8){try{jsonpatch['apply'](_0xf7f9c8,_0x4b8cb5,!![]);}catch(_0x52e940){return BPromise['reject'](_0x52e940);}return _0xf7f9c8[_0x7692('0x2a')]();};}function saveUpdates(_0x539ec2,_0x40225a){return function(_0x2e980e){if(_0x2e980e){return _0x2e980e[_0x7692('0x2b')](_0x539ec2)[_0x7692('0x2c')](function(_0x45bbab){return _0x45bbab;});}return null;};}function removeEntity(_0x104879,_0x21df73){return function(_0x7ec00c){if(_0x7ec00c){return _0x7ec00c[_0x7692('0x2d')]()['then'](function(){_0x104879['status'](0xcc)[_0x7692('0x26')]();});}};}function handleEntityNotFound(_0x31ebd7,_0x2934b4){return function(_0x3404ed){if(!_0x3404ed){_0x31ebd7[_0x7692('0x2e')](0x194);}return _0x3404ed;};}function handleError(_0x4787c0,_0x2b74ad){_0x2b74ad=_0x2b74ad||0x1f4;return function(_0x4eb49e){logger[_0x7692('0x21')](_0x4eb49e[_0x7692('0x2f')]);if(_0x4eb49e[_0x7692('0x30')]){delete _0x4eb49e[_0x7692('0x30')];}_0x4787c0['status'](_0x2b74ad)[_0x7692('0x31')](_0x4eb49e);};}exports[_0x7692('0x32')]=function(_0x4da7ad,_0x5bc689){var _0xbdafeb={},_0x211bbd={},_0x42938e={'count':0x0,'rows':[]};var _0x54cbc7=db[_0x7692('0x33')][_0x7692('0x34')];_0x211bbd[_0x7692('0x35')]=_[_0x7692('0x36')](_0x54cbc7);_0x211bbd['query']=_[_0x7692('0x36')](_0x4da7ad[_0x7692('0x37')]);_0x211bbd[_0x7692('0x38')]=_[_0x7692('0x39')](_0x211bbd[_0x7692('0x35')],_0x211bbd['query']);_0xbdafeb[_0x7692('0x3a')]=_['intersection'](_0x211bbd[_0x7692('0x35')],qs[_0x7692('0x3b')](_0x4da7ad['query'][_0x7692('0x3b')]));_0xbdafeb[_0x7692('0x3a')]=_0xbdafeb[_0x7692('0x3a')]['length']?_0xbdafeb[_0x7692('0x3a')]:_0x211bbd[_0x7692('0x35')];if(!_0x4da7ad[_0x7692('0x37')][_0x7692('0x3c')]('nolimit')){_0xbdafeb[_0x7692('0x28')]=qs['limit'](_0x4da7ad[_0x7692('0x37')][_0x7692('0x28')]);_0xbdafeb['offset']=qs[_0x7692('0x27')](_0x4da7ad[_0x7692('0x37')]['offset']);}_0xbdafeb['order']=qs['sort'](_0x4da7ad[_0x7692('0x37')]['sort']);_0xbdafeb[_0x7692('0x3d')]=qs[_0x7692('0x38')](_[_0x7692('0x3e')](_0x4da7ad[_0x7692('0x37')],_0x211bbd[_0x7692('0x38')]));if(_0x4da7ad[_0x7692('0x37')][_0x7692('0x3f')]){_0xbdafeb['where']=_[_0x7692('0x40')](_0xbdafeb[_0x7692('0x3d')],{'$or':_[_0x7692('0x41')](_0x54cbc7,function(_0x59f572){if(_0x59f572['type'][_0x7692('0x42')]!==_0x7692('0x43')){var _0x490505={};_0x490505[_0x59f572[_0x7692('0x44')]]={'$like':'%'+_0x4da7ad['query']['filter']+'%'};return _0x490505;}})});}_0xbdafeb=_['merge']({},_0xbdafeb,_0x4da7ad[_0x7692('0x45')]);var _0x354051={'where':_0xbdafeb[_0x7692('0x3d')]};return db[_0x7692('0x33')][_0x7692('0x46')](_0x354051)['then'](function(_0x6b70b4){_0x42938e[_0x7692('0x46')]=_0x6b70b4;if(_0x4da7ad[_0x7692('0x37')]['includeAll']){_0xbdafeb[_0x7692('0x47')]=[{'all':!![]}];}return db[_0x7692('0x33')][_0x7692('0x48')](_0xbdafeb);})[_0x7692('0x2c')](function(_0x4b1beb){_0x42938e[_0x7692('0x49')]=_0x4b1beb;return _0x42938e;})[_0x7692('0x2c')](respondWithFilteredResult(_0x5bc689,_0xbdafeb))[_0x7692('0x24')](handleError(_0x5bc689,null));};exports[_0x7692('0x4a')]=function(_0x23702a,_0x3fe3f8){var _0x35ccd3={'raw':![],'where':{'id':_0x23702a[_0x7692('0x4b')]['id']}},_0x487a9c={};_0x487a9c[_0x7692('0x35')]=_[_0x7692('0x36')](db[_0x7692('0x33')][_0x7692('0x34')]);_0x487a9c[_0x7692('0x37')]=_[_0x7692('0x36')](_0x23702a[_0x7692('0x37')]);_0x487a9c['filters']=_['intersection'](_0x487a9c[_0x7692('0x35')],_0x487a9c[_0x7692('0x37')]);_0x35ccd3['attributes']=_[_0x7692('0x39')](_0x487a9c[_0x7692('0x35')],qs['fields'](_0x23702a[_0x7692('0x37')]['fields']));_0x35ccd3[_0x7692('0x3a')]=_0x35ccd3[_0x7692('0x3a')][_0x7692('0x4c')]?_0x35ccd3[_0x7692('0x3a')]:_0x487a9c['model'];if(_0x23702a[_0x7692('0x37')]['includeAll']){_0x35ccd3['include']=[{'all':!![]}];}_0x35ccd3=_['merge']({},_0x35ccd3,_0x23702a[_0x7692('0x45')]);return db[_0x7692('0x33')]['find'](_0x35ccd3)[_0x7692('0x2c')](handleEntityNotFound(_0x3fe3f8,null))[_0x7692('0x2c')](respondWithResult(_0x3fe3f8,null))[_0x7692('0x24')](handleError(_0x3fe3f8,null));};exports[_0x7692('0x4d')]=function(_0x459e28,_0x38cb08){return db[_0x7692('0x33')]['create'](_0x459e28['body'],{})[_0x7692('0x2c')](respondWithResult(_0x38cb08,0xc9))['catch'](handleError(_0x38cb08,null));};exports['update']=function(_0x3a8f62,_0x108069){if(_0x3a8f62['body']['id']){delete _0x3a8f62[_0x7692('0x4e')]['id'];}return db[_0x7692('0x33')][_0x7692('0x4f')]({'where':{'id':_0x3a8f62[_0x7692('0x4b')]['id']}})[_0x7692('0x2c')](handleEntityNotFound(_0x108069,null))['then'](saveUpdates(_0x3a8f62[_0x7692('0x4e')],null))[_0x7692('0x2c')](respondWithResult(_0x108069,null))[_0x7692('0x24')](handleError(_0x108069,null));};exports[_0x7692('0x2d')]=function(_0x2d5030,_0x2b2727){return db['SalesforceConfiguration']['find']({'where':{'id':_0x2d5030['params']['id']}})[_0x7692('0x2c')](handleEntityNotFound(_0x2b2727,null))[_0x7692('0x2c')](removeEntity(_0x2b2727,null))[_0x7692('0x24')](handleError(_0x2b2727,null));};exports[_0x7692('0x50')]=function(_0x564acd,_0x3d0941,_0x176bc3){var _0x7d27df={};var _0x153880={};var _0x38d916;var _0xff8a90;return db[_0x7692('0x33')][_0x7692('0x51')]({'where':{'id':_0x564acd['params']['id']}})[_0x7692('0x2c')](handleEntityNotFound(_0x3d0941,null))[_0x7692('0x2c')](function(_0x42f0c3){if(_0x42f0c3){_0x38d916=_0x42f0c3;_0x153880[_0x7692('0x35')]=_[_0x7692('0x36')](db['SalesforceField']['rawAttributes']);_0x153880['query']=_['keys'](_0x564acd[_0x7692('0x37')]);_0x153880[_0x7692('0x38')]=_[_0x7692('0x39')](_0x153880[_0x7692('0x35')],_0x153880['query']);_0x7d27df[_0x7692('0x3a')]=_['intersection'](_0x153880['model'],qs[_0x7692('0x3b')](_0x564acd['query'][_0x7692('0x3b')]));_0x7d27df['attributes']=_0x7d27df[_0x7692('0x3a')]['length']?_0x7d27df[_0x7692('0x3a')]:_0x153880[_0x7692('0x35')];_0x7d27df[_0x7692('0x52')]=qs[_0x7692('0x53')](_0x564acd['query']['sort']);_0x7d27df['where']=qs['filters'](_[_0x7692('0x3e')](_0x564acd[_0x7692('0x37')],_0x153880[_0x7692('0x38')]));if(_0x564acd[_0x7692('0x37')][_0x7692('0x3f')]){_0x7d27df['where']=_[_0x7692('0x40')](_0x7d27df[_0x7692('0x3d')],{'$or':_[_0x7692('0x41')](_0x7d27df[_0x7692('0x3a')],function(_0x39408c){var _0x49c65c={};_0x49c65c[_0x39408c]={'$like':'%'+_0x564acd[_0x7692('0x37')][_0x7692('0x3f')]+'%'};return _0x49c65c;})});}_0x7d27df=_['merge']({},_0x7d27df,_0x564acd[_0x7692('0x45')]);return _0x38d916[_0x7692('0x50')](_0x7d27df);}})[_0x7692('0x2c')](function(_0x168519){if(_0x168519){_0xff8a90=_0x168519['length'];if(!_0x564acd[_0x7692('0x37')]['hasOwnProperty'](_0x7692('0x54'))){_0x7d27df[_0x7692('0x28')]=qs[_0x7692('0x28')](_0x564acd[_0x7692('0x37')][_0x7692('0x28')]);_0x7d27df['offset']=qs[_0x7692('0x27')](_0x564acd[_0x7692('0x37')]['offset']);}return _0x38d916[_0x7692('0x50')](_0x7d27df);}})['then'](function(_0x3a27c3){if(_0x3a27c3){return _0x3a27c3?{'count':_0xff8a90,'rows':_0x3a27c3}:null;}})[_0x7692('0x2c')](respondWithResult(_0x3d0941,null))[_0x7692('0x24')](handleError(_0x3d0941,null));};exports[_0x7692('0x55')]=function(_0x473758,_0x55fd1c,_0xf30f47){var _0x1d0871={};var _0x4e88d7={};var _0x112ffb;var _0x37f376;return db[_0x7692('0x33')][_0x7692('0x51')]({'where':{'id':_0x473758[_0x7692('0x4b')]['id']}})['then'](handleEntityNotFound(_0x55fd1c,null))['then'](function(_0x140c2a){if(_0x140c2a){_0x112ffb=_0x140c2a;_0x4e88d7[_0x7692('0x35')]=_[_0x7692('0x36')](db[_0x7692('0x56')][_0x7692('0x34')]);_0x4e88d7[_0x7692('0x37')]=_[_0x7692('0x36')](_0x473758['query']);_0x4e88d7[_0x7692('0x38')]=_['intersection'](_0x4e88d7[_0x7692('0x35')],_0x4e88d7[_0x7692('0x37')]);_0x1d0871[_0x7692('0x3a')]=_[_0x7692('0x39')](_0x4e88d7[_0x7692('0x35')],qs[_0x7692('0x3b')](_0x473758[_0x7692('0x37')]['fields']));_0x1d0871['attributes']=_0x1d0871[_0x7692('0x3a')]['length']?_0x1d0871[_0x7692('0x3a')]:_0x4e88d7[_0x7692('0x35')];_0x1d0871[_0x7692('0x52')]=qs['sort'](_0x473758[_0x7692('0x37')][_0x7692('0x53')]);_0x1d0871[_0x7692('0x3d')]=qs['filters'](_[_0x7692('0x3e')](_0x473758[_0x7692('0x37')],_0x4e88d7[_0x7692('0x38')]));if(_0x473758[_0x7692('0x37')][_0x7692('0x3f')]){_0x1d0871[_0x7692('0x3d')]=_[_0x7692('0x40')](_0x1d0871[_0x7692('0x3d')],{'$or':_['map'](_0x1d0871[_0x7692('0x3a')],function(_0x4f1137){var _0x39b362={};_0x39b362[_0x4f1137]={'$like':'%'+_0x473758[_0x7692('0x37')][_0x7692('0x3f')]+'%'};return _0x39b362;})});}_0x1d0871=_['merge']({},_0x1d0871,_0x473758['options']);return _0x112ffb[_0x7692('0x55')](_0x1d0871);}})[_0x7692('0x2c')](function(_0x248069){if(_0x248069){_0x37f376=_0x248069[_0x7692('0x4c')];if(!_0x473758[_0x7692('0x37')][_0x7692('0x3c')](_0x7692('0x54'))){_0x1d0871[_0x7692('0x28')]=qs[_0x7692('0x28')](_0x473758['query'][_0x7692('0x28')]);_0x1d0871[_0x7692('0x27')]=qs[_0x7692('0x27')](_0x473758[_0x7692('0x37')][_0x7692('0x27')]);}return _0x112ffb[_0x7692('0x55')](_0x1d0871);}})[_0x7692('0x2c')](function(_0x3d6ede){if(_0x3d6ede){return _0x3d6ede?{'count':_0x37f376,'rows':_0x3d6ede}:null;}})[_0x7692('0x2c')](respondWithResult(_0x55fd1c,null))[_0x7692('0x24')](handleError(_0x55fd1c,null));};exports[_0x7692('0x57')]=function(_0x3e487b,_0x1e2c1c,_0x471a23){var _0x1333e0={};var _0x4ef6c9={};var _0x4eafb3;var _0x3edd42;return db[_0x7692('0x33')]['findOne']({'where':{'id':_0x3e487b['params']['id']}})[_0x7692('0x2c')](handleEntityNotFound(_0x1e2c1c,null))[_0x7692('0x2c')](function(_0xa5e54){if(_0xa5e54){_0x4eafb3=_0xa5e54;_0x4ef6c9[_0x7692('0x35')]=_[_0x7692('0x36')](db[_0x7692('0x56')][_0x7692('0x34')]);_0x4ef6c9[_0x7692('0x37')]=_[_0x7692('0x36')](_0x3e487b[_0x7692('0x37')]);_0x4ef6c9[_0x7692('0x38')]=_[_0x7692('0x39')](_0x4ef6c9[_0x7692('0x35')],_0x4ef6c9[_0x7692('0x37')]);_0x1333e0['attributes']=_[_0x7692('0x39')](_0x4ef6c9[_0x7692('0x35')],qs['fields'](_0x3e487b[_0x7692('0x37')][_0x7692('0x3b')]));_0x1333e0[_0x7692('0x3a')]=_0x1333e0['attributes'][_0x7692('0x4c')]?_0x1333e0[_0x7692('0x3a')]:_0x4ef6c9[_0x7692('0x35')];_0x1333e0[_0x7692('0x52')]=qs[_0x7692('0x53')](_0x3e487b['query'][_0x7692('0x53')]);_0x1333e0['where']=qs[_0x7692('0x38')](_[_0x7692('0x3e')](_0x3e487b[_0x7692('0x37')],_0x4ef6c9[_0x7692('0x38')]));if(_0x3e487b[_0x7692('0x37')][_0x7692('0x3f')]){_0x1333e0[_0x7692('0x3d')]=_[_0x7692('0x40')](_0x1333e0['where'],{'$or':_['map'](_0x1333e0[_0x7692('0x3a')],function(_0x288526){var _0x1e9215={};_0x1e9215[_0x288526]={'$like':'%'+_0x3e487b[_0x7692('0x37')][_0x7692('0x3f')]+'%'};return _0x1e9215;})});}_0x1333e0=_[_0x7692('0x40')]({},_0x1333e0,_0x3e487b['options']);return _0x4eafb3[_0x7692('0x57')](_0x1333e0);}})[_0x7692('0x2c')](function(_0x54d7fc){if(_0x54d7fc){_0x3edd42=_0x54d7fc[_0x7692('0x4c')];if(!_0x3e487b[_0x7692('0x37')][_0x7692('0x3c')](_0x7692('0x54'))){_0x1333e0[_0x7692('0x28')]=qs[_0x7692('0x28')](_0x3e487b[_0x7692('0x37')]['limit']);_0x1333e0[_0x7692('0x27')]=qs[_0x7692('0x27')](_0x3e487b['query'][_0x7692('0x27')]);}return _0x4eafb3[_0x7692('0x57')](_0x1333e0);}})[_0x7692('0x2c')](function(_0x1370a6){if(_0x1370a6){return _0x1370a6?{'count':_0x3edd42,'rows':_0x1370a6}:null;}})[_0x7692('0x2c')](respondWithResult(_0x1e2c1c,null))[_0x7692('0x24')](handleError(_0x1e2c1c,null));};
\ No newline at end of file
index 8ae0f22..1aa60cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9594=['SalesforceConfiguration','lodash','../../config/logger','api','moment','request-promise','path','../../config/environment','./intSalesforceConfiguration.attributes','define'];(function(_0x319dfc,_0x16f830){var _0x4b5e9e=function(_0x594151){while(--_0x594151){_0x319dfc['push'](_0x319dfc['shift']());}};_0x4b5e9e(++_0x16f830);}(_0x9594,0x12d));var _0x4959=function(_0x9aada2,_0xd2d349){_0x9aada2=_0x9aada2-0x0;var _0x196dff=_0x9594[_0x9aada2];return _0x196dff;};'use strict';var _=require(_0x4959('0x0'));var util=require('util');var logger=require(_0x4959('0x1'))(_0x4959('0x2'));var moment=require(_0x4959('0x3'));var BPromise=require('bluebird');var rp=require(_0x4959('0x4'));var fs=require('fs');var path=require(_0x4959('0x5'));var rimraf=require('rimraf');var config=require(_0x4959('0x6'));var attributes=require(_0x4959('0x7'));module['exports']=function(_0x32707a,_0x3c9209){return _0x32707a[_0x4959('0x8')](_0x4959('0x9'),attributes,{'tableName':'int_salesforce_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0256=['path','rimraf','exports','int_salesforce_configurations','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x2c62a2,_0x594f0c){var _0xd2613e=function(_0x2854b9){while(--_0x2854b9){_0x2c62a2['push'](_0x2c62a2['shift']());}};_0xd2613e(++_0x594f0c);}(_0x0256,0x190));var _0x6025=function(_0x5edbac,_0xa54f78){_0x5edbac=_0x5edbac-0x0;var _0x2a5b78=_0x0256[_0x5edbac];return _0x2a5b78;};'use strict';var _=require(_0x6025('0x0'));var util=require(_0x6025('0x1'));var logger=require(_0x6025('0x2'))(_0x6025('0x3'));var moment=require(_0x6025('0x4'));var BPromise=require(_0x6025('0x5'));var rp=require(_0x6025('0x6'));var fs=require('fs');var path=require(_0x6025('0x7'));var rimraf=require(_0x6025('0x8'));var config=require('../../config/environment');var attributes=require('./intSalesforceConfiguration.attributes');module[_0x6025('0x9')]=function(_0x1aa16b,_0x18a80e){return _0x1aa16b['define']('SalesforceConfiguration',attributes,{'tableName':_0x6025('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 92fcc4f..54575ab 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(_0x481441,_0x366928){var _0x1f0ad1=function(_0x43b825){while(--_0x43b825){_0x481441['push'](_0x481441['shift']());}};_0x1f0ad1(++_0x366928);}(_0xc4aa,0x1b7));var _0xac4a=function(_0x21549c,_0x6d64d1){_0x21549c=_0x21549c-0x0;var _0x426cbd=_0xc4aa[_0x21549c];return _0x426cbd;};'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 _0x7217=['stringify','error','code','message','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','rpc','../../config/environment','jayson/promise','client','http','request','then','info','SalesforceConfiguration,\x20%s,\x20%s','debug','SalesforceConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent'];(function(_0x166742,_0x55520c){var _0xb7814a=function(_0x18feaf){while(--_0x18feaf){_0x166742['push'](_0x166742['shift']());}};_0xb7814a(++_0x55520c);}(_0x7217,0x19e));var _0x7721=function(_0x387777,_0x356171){_0x387777=_0x387777-0x0;var _0x3f84c0=_0x7217[_0x387777];return _0x3f84c0;};'use strict';var _=require(_0x7721('0x0'));var util=require('util');var moment=require(_0x7721('0x1'));var BPromise=require(_0x7721('0x2'));var rs=require(_0x7721('0x3'));var fs=require('fs');var Redis=require(_0x7721('0x4'));var db=require(_0x7721('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x7721('0x6'));var config=require(_0x7721('0x7'));var jayson=require(_0x7721('0x8'));var client=jayson[_0x7721('0x9')][_0x7721('0xa')]({'port':0x232a});function respondWithRpcPromise(_0xf7ff37,_0x18ab6b,_0x21f680){return new BPromise(function(_0x225610,_0x2f99ed){return client[_0x7721('0xb')](_0xf7ff37,_0x21f680)[_0x7721('0xc')](function(_0xfa8835){logger[_0x7721('0xd')](_0x7721('0xe'),_0x18ab6b,'request\x20sent');logger[_0x7721('0xf')](_0x7721('0x10'),_0x18ab6b,_0x7721('0x11'),JSON[_0x7721('0x12')](_0xfa8835));if(_0xfa8835[_0x7721('0x13')]){if(_0xfa8835[_0x7721('0x13')][_0x7721('0x14')]===0x1f4){logger[_0x7721('0x13')]('SalesforceConfiguration,\x20%s,\x20%s',_0x18ab6b,_0xfa8835[_0x7721('0x13')][_0x7721('0x15')]);return _0x2f99ed(_0xfa8835['error'][_0x7721('0x15')]);}logger[_0x7721('0x13')](_0x7721('0xe'),_0x18ab6b,_0xfa8835[_0x7721('0x13')]['message']);return _0x225610(_0xfa8835[_0x7721('0x13')][_0x7721('0x15')]);}else{logger['info']('SalesforceConfiguration,\x20%s,\x20%s',_0x18ab6b,'request\x20sent');_0x225610(_0xfa8835[_0x7721('0x16')][_0x7721('0x15')]);}})[_0x7721('0x17')](function(_0x32550d){logger['error'](_0x7721('0xe'),_0x18ab6b,_0x32550d);_0x2f99ed(_0x32550d);});});}
\ No newline at end of file
index 4928f92..b044737 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf9c=['../../config/environment','get','isAuthenticated','index','/:id','show','post','create','put','delete','destroy','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x56ab74,_0x1effda){var _0x17d8d0=function(_0x37e174){while(--_0x37e174){_0x56ab74['push'](_0x56ab74['shift']());}};_0x17d8d0(++_0x1effda);}(_0xbf9c,0x6b));var _0xcbf9=function(_0x581ceb,_0x144af2){_0x581ceb=_0x581ceb-0x0;var _0x3913bf=_0xbf9c[_0x581ceb];return _0x3913bf;};'use strict';var multer=require('multer');var util=require(_0xcbf9('0x0'));var path=require(_0xcbf9('0x1'));var timeout=require(_0xcbf9('0x2'));var express=require(_0xcbf9('0x3'));var router=express[_0xcbf9('0x4')]();var auth=require(_0xcbf9('0x5'));var interaction=require(_0xcbf9('0x6'));var config=require(_0xcbf9('0x7'));var controller=require('./intSalesforceField.controller');router[_0xcbf9('0x8')]('/',auth[_0xcbf9('0x9')](),controller[_0xcbf9('0xa')]);router[_0xcbf9('0x8')](_0xcbf9('0xb'),auth['isAuthenticated'](),controller[_0xcbf9('0xc')]);router[_0xcbf9('0xd')]('/',auth[_0xcbf9('0x9')](),controller[_0xcbf9('0xe')]);router[_0xcbf9('0xf')](_0xcbf9('0xb'),auth[_0xcbf9('0x9')](),controller['update']);router[_0xcbf9('0x10')](_0xcbf9('0xb'),auth[_0xcbf9('0x9')](),controller[_0xcbf9('0x11')]);module[_0xcbf9('0x12')]=router;
\ No newline at end of file
+var _0xd010=['destroy','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSalesforceField.controller','get','index','show','isAuthenticated','update','delete','/:id'];(function(_0xdb7b29,_0x4e7197){var _0x382819=function(_0xe8f235){while(--_0xe8f235){_0xdb7b29['push'](_0xdb7b29['shift']());}};_0x382819(++_0x4e7197);}(_0xd010,0xa1));var _0x0d01=function(_0x4d0b0d,_0x3e83e0){_0x4d0b0d=_0x4d0b0d-0x0;var _0x181d1c=_0xd010[_0x4d0b0d];return _0x181d1c;};'use strict';var multer=require(_0x0d01('0x0'));var util=require('util');var path=require(_0x0d01('0x1'));var timeout=require('connect-timeout');var express=require(_0x0d01('0x2'));var router=express[_0x0d01('0x3')]();var auth=require(_0x0d01('0x4'));var interaction=require(_0x0d01('0x5'));var config=require(_0x0d01('0x6'));var controller=require(_0x0d01('0x7'));router[_0x0d01('0x8')]('/',auth['isAuthenticated'](),controller[_0x0d01('0x9')]);router[_0x0d01('0x8')]('/:id',auth['isAuthenticated'](),controller[_0x0d01('0xa')]);router['post']('/',auth[_0x0d01('0xb')](),controller['create']);router['put']('/:id',auth[_0x0d01('0xb')](),controller[_0x0d01('0xc')]);router[_0x0d01('0xd')](_0x0d01('0xe'),auth[_0x0d01('0xb')](),controller[_0x0d01('0xf')]);module['exports']=router;
\ No newline at end of file
index 8cd346a..e5d9f2e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x232d=['variable','customVariable','STRING','sequelize','ENUM','string'];(function(_0x51c39f,_0x5bfb0b){var _0x274221=function(_0x5610d0){while(--_0x5610d0){_0x51c39f['push'](_0x51c39f['shift']());}};_0x274221(++_0x5bfb0b);}(_0x232d,0x9f));var _0xd232=function(_0x23e226,_0x4137ab){_0x23e226=_0x23e226-0x0;var _0x548ccf=_0x232d[_0x23e226];return _0x548ccf;};'use strict';var Sequelize=require(_0xd232('0x0'));module['exports']={'type':{'type':Sequelize[_0xd232('0x1')](_0xd232('0x2'),_0xd232('0x3'),_0xd232('0x4'),'keyValue'),'defaultValue':_0xd232('0x2')},'content':{'type':Sequelize[_0xd232('0x5')]},'key':{'type':Sequelize[_0xd232('0x5')]},'keyType':{'type':Sequelize[_0xd232('0x1')](_0xd232('0x2'),_0xd232('0x3'),'customVariable')},'keyContent':{'type':Sequelize[_0xd232('0x5')]},'idField':{'type':Sequelize[_0xd232('0x5')]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xf920=['keyValue','STRING','sequelize','string','variable','customVariable'];(function(_0x3a44b2,_0x4e3f9f){var _0x147938=function(_0x3607df){while(--_0x3607df){_0x3a44b2['push'](_0x3a44b2['shift']());}};_0x147938(++_0x4e3f9f);}(_0xf920,0x12e));var _0x0f92=function(_0x299ecf,_0x5e642b){_0x299ecf=_0x299ecf-0x0;var _0x4813c9=_0xf920[_0x299ecf];return _0x4813c9;};'use strict';var Sequelize=require(_0x0f92('0x0'));module['exports']={'type':{'type':Sequelize['ENUM'](_0x0f92('0x1'),_0x0f92('0x2'),_0x0f92('0x3'),_0x0f92('0x4')),'defaultValue':_0x0f92('0x1')},'content':{'type':Sequelize[_0x0f92('0x5')]},'key':{'type':Sequelize[_0x0f92('0x5')]},'keyType':{'type':Sequelize['ENUM'](_0x0f92('0x1'),'variable',_0x0f92('0x3'))},'keyContent':{'type':Sequelize[_0x0f92('0x5')]},'idField':{'type':Sequelize['STRING']},'variableName':{'type':Sequelize[_0x0f92('0x5')]}};
\ No newline at end of file
index 87e6888..61a141f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa5dd=['../../config/utils','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','sendStatus','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','sort','where','filter','merge','map','key','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','params','SalesforceField','find','create','body','destroy','html-pdf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/parsers/qs','api'];(function(_0x19950b,_0x53d0d7){var _0x3c6b41=function(_0x3924ad){while(--_0x3924ad){_0x19950b['push'](_0x19950b['shift']());}};_0x3c6b41(++_0x53d0d7);}(_0xa5dd,0x101));var _0xda5d=function(_0x51df3b,_0x5e2069){_0x51df3b=_0x51df3b-0x0;var _0x232718=_0xa5dd[_0x51df3b];return _0x232718;};'use strict';var pdf=require(_0xda5d('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xda5d('0x1'));var jsonpatch=require(_0xda5d('0x2'));var rp=require(_0xda5d('0x3'));var moment=require(_0xda5d('0x4'));var BPromise=require(_0xda5d('0x5'));var Mustache=require('mustache');var util=require(_0xda5d('0x6'));var path=require(_0xda5d('0x7'));var sox=require(_0xda5d('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xda5d('0x9'));var squel=require(_0xda5d('0xa'));var crypto=require(_0xda5d('0xb'));var jsforce=require(_0xda5d('0xc'));var deskjs=require(_0xda5d('0xd'));var toCsv=require(_0xda5d('0xe'));var querystring=require(_0xda5d('0xf'));var Papa=require(_0xda5d('0x10'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0xda5d('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xda5d('0x12'));var utils=require(_0xda5d('0x13'));var config=require('../../config/environment');var db=require(_0xda5d('0x14'))['db'];function respondWithStatusCode(_0xbca0c3,_0x17090b){_0x17090b=_0x17090b||0xcc;return function(_0x514648){if(_0x514648){return _0xbca0c3['sendStatus'](_0x17090b);}return _0xbca0c3[_0xda5d('0x15')](_0x17090b)[_0xda5d('0x16')]();};}function respondWithResult(_0xf7edd3,_0x3ef0f8){_0x3ef0f8=_0x3ef0f8||0xc8;return function(_0x2b877d){if(_0x2b877d){return _0xf7edd3[_0xda5d('0x15')](_0x3ef0f8)[_0xda5d('0x17')](_0x2b877d);}};}function respondWithFilteredResult(_0x53a7ad,_0x579ae1){return function(_0x55127c){if(_0x55127c){var _0x481e2b=_0x55127c[_0xda5d('0x18')],_0x54ffb1=_0x579ae1[_0xda5d('0x19')],_0x42be77=_0x579ae1[_0xda5d('0x19')]+_0x579ae1[_0xda5d('0x1a')],_0x257973;if(_0x42be77>=_0x481e2b){_0x42be77=_0x481e2b;_0x257973=0xc8;}else{_0x257973=0xce;}_0x53a7ad[_0xda5d('0x15')](_0x257973);return _0x53a7ad[_0xda5d('0x1b')](_0xda5d('0x1c'),_0x54ffb1+'-'+_0x42be77+'/'+_0x481e2b)['json'](_0x55127c);}return null;};}function patchUpdates(_0x3f5cc9){return function(_0x424e28){try{jsonpatch['apply'](_0x424e28,_0x3f5cc9,!![]);}catch(_0x189e38){return BPromise[_0xda5d('0x1d')](_0x189e38);}return _0x424e28[_0xda5d('0x1e')]();};}function saveUpdates(_0x3dbd53,_0x1a0bf9){return function(_0x109e29){if(_0x109e29){return _0x109e29[_0xda5d('0x1f')](_0x3dbd53)['then'](function(_0x380327){return _0x380327;});}return null;};}function removeEntity(_0x594993,_0x2e6153){return function(_0x506d97){if(_0x506d97){return _0x506d97['destroy']()[_0xda5d('0x20')](function(){_0x594993['status'](0xcc)[_0xda5d('0x16')]();});}};}function handleEntityNotFound(_0x1e00c9,_0x1e1e56){return function(_0x761ef0){if(!_0x761ef0){_0x1e00c9[_0xda5d('0x21')](0x194);}return _0x761ef0;};}function handleError(_0x114a45,_0x2e9f9a){_0x2e9f9a=_0x2e9f9a||0x1f4;return function(_0x40be9c){logger[_0xda5d('0x22')](_0x40be9c[_0xda5d('0x23')]);if(_0x40be9c[_0xda5d('0x24')]){delete _0x40be9c[_0xda5d('0x24')];}_0x114a45[_0xda5d('0x15')](_0x2e9f9a)[_0xda5d('0x25')](_0x40be9c);};}exports[_0xda5d('0x26')]=function(_0x24d988,_0x44afcc){var _0x31281f={},_0x16cf1a={},_0x777bf3={'count':0x0,'rows':[]};var _0x2bded9=db['SalesforceField'][_0xda5d('0x27')];_0x16cf1a[_0xda5d('0x28')]=_[_0xda5d('0x29')](_0x2bded9);_0x16cf1a[_0xda5d('0x2a')]=_[_0xda5d('0x29')](_0x24d988['query']);_0x16cf1a[_0xda5d('0x2b')]=_[_0xda5d('0x2c')](_0x16cf1a[_0xda5d('0x28')],_0x16cf1a[_0xda5d('0x2a')]);_0x31281f[_0xda5d('0x2d')]=_['intersection'](_0x16cf1a['model'],qs[_0xda5d('0x2e')](_0x24d988[_0xda5d('0x2a')][_0xda5d('0x2e')]));_0x31281f['attributes']=_0x31281f['attributes']['length']?_0x31281f[_0xda5d('0x2d')]:_0x16cf1a[_0xda5d('0x28')];if(!_0x24d988[_0xda5d('0x2a')][_0xda5d('0x2f')](_0xda5d('0x30'))){_0x31281f['limit']=qs[_0xda5d('0x1a')](_0x24d988['query'][_0xda5d('0x1a')]);_0x31281f[_0xda5d('0x19')]=qs[_0xda5d('0x19')](_0x24d988['query'][_0xda5d('0x19')]);}_0x31281f['order']=qs[_0xda5d('0x31')](_0x24d988[_0xda5d('0x2a')][_0xda5d('0x31')]);_0x31281f[_0xda5d('0x32')]=qs[_0xda5d('0x2b')](_['pick'](_0x24d988[_0xda5d('0x2a')],_0x16cf1a[_0xda5d('0x2b')]));if(_0x24d988['query'][_0xda5d('0x33')]){_0x31281f[_0xda5d('0x32')]=_[_0xda5d('0x34')](_0x31281f[_0xda5d('0x32')],{'$or':_[_0xda5d('0x35')](_0x2bded9,function(_0x2e0317){if(_0x2e0317['type'][_0xda5d('0x36')]!==_0xda5d('0x37')){var _0x4656ab={};_0x4656ab[_0x2e0317['field']]={'$like':'%'+_0x24d988['query']['filter']+'%'};return _0x4656ab;}})});}_0x31281f=_['merge']({},_0x31281f,_0x24d988[_0xda5d('0x38')]);var _0x3874bd={'where':_0x31281f['where']};return db['SalesforceField'][_0xda5d('0x18')](_0x3874bd)[_0xda5d('0x20')](function(_0x5930fb){_0x777bf3[_0xda5d('0x18')]=_0x5930fb;if(_0x24d988[_0xda5d('0x2a')][_0xda5d('0x39')]){_0x31281f[_0xda5d('0x3a')]=[{'all':!![]}];}return db['SalesforceField'][_0xda5d('0x3b')](_0x31281f);})[_0xda5d('0x20')](function(_0x41bd66){_0x777bf3[_0xda5d('0x3c')]=_0x41bd66;return _0x777bf3;})['then'](respondWithFilteredResult(_0x44afcc,_0x31281f))[_0xda5d('0x3d')](handleError(_0x44afcc,null));};exports[_0xda5d('0x3e')]=function(_0x3a8767,_0x487c16){var _0x5c9547={'raw':!![],'where':{'id':_0x3a8767[_0xda5d('0x3f')]['id']}},_0x302e63={};_0x302e63[_0xda5d('0x28')]=_[_0xda5d('0x29')](db[_0xda5d('0x40')][_0xda5d('0x27')]);_0x302e63[_0xda5d('0x2a')]=_['keys'](_0x3a8767['query']);_0x302e63[_0xda5d('0x2b')]=_[_0xda5d('0x2c')](_0x302e63['model'],_0x302e63[_0xda5d('0x2a')]);_0x5c9547[_0xda5d('0x2d')]=_['intersection'](_0x302e63[_0xda5d('0x28')],qs[_0xda5d('0x2e')](_0x3a8767[_0xda5d('0x2a')][_0xda5d('0x2e')]));_0x5c9547[_0xda5d('0x2d')]=_0x5c9547[_0xda5d('0x2d')]['length']?_0x5c9547[_0xda5d('0x2d')]:_0x302e63[_0xda5d('0x28')];if(_0x3a8767[_0xda5d('0x2a')][_0xda5d('0x39')]){_0x5c9547[_0xda5d('0x3a')]=[{'all':!![]}];}_0x5c9547=_[_0xda5d('0x34')]({},_0x5c9547,_0x3a8767[_0xda5d('0x38')]);return db[_0xda5d('0x40')][_0xda5d('0x41')](_0x5c9547)[_0xda5d('0x20')](handleEntityNotFound(_0x487c16,null))['then'](respondWithResult(_0x487c16,null))['catch'](handleError(_0x487c16,null));};exports[_0xda5d('0x42')]=function(_0x1165b4,_0x34e4db){return db[_0xda5d('0x40')][_0xda5d('0x42')](_0x1165b4[_0xda5d('0x43')],{})[_0xda5d('0x20')](respondWithResult(_0x34e4db,0xc9))[_0xda5d('0x3d')](handleError(_0x34e4db,null));};exports['update']=function(_0x18cb7b,_0x4aba9d){if(_0x18cb7b[_0xda5d('0x43')]['id']){delete _0x18cb7b[_0xda5d('0x43')]['id'];}return db[_0xda5d('0x40')][_0xda5d('0x41')]({'where':{'id':_0x18cb7b['params']['id']}})[_0xda5d('0x20')](handleEntityNotFound(_0x4aba9d,null))[_0xda5d('0x20')](saveUpdates(_0x18cb7b[_0xda5d('0x43')],null))['then'](respondWithResult(_0x4aba9d,null))['catch'](handleError(_0x4aba9d,null));};exports[_0xda5d('0x44')]=function(_0x559f7c,_0x44d866){return db['SalesforceField'][_0xda5d('0x41')]({'where':{'id':_0x559f7c[_0xda5d('0x3f')]['id']}})[_0xda5d('0x20')](handleEntityNotFound(_0x44d866,null))[_0xda5d('0x20')](removeEntity(_0x44d866,null))[_0xda5d('0x3d')](handleError(_0x44d866,null));};
\ No newline at end of file
+var _0x7df3=['sendStatus','status','end','offset','limit','set','Content-Range','apply','save','update','then','destroy','error','name','send','SalesforceField','model','keys','query','filters','intersection','fields','attributes','length','nolimit','order','sort','pick','filter','where','merge','type','key','VIRTUAL','options','count','includeAll','include','findAll','rows','catch','rawAttributes','create','body','find','params','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb'];(function(_0x5d7da0,_0x5ddfd1){var _0x28ff31=function(_0x5addbc){while(--_0x5addbc){_0x5d7da0['push'](_0x5d7da0['shift']());}};_0x28ff31(++_0x5ddfd1);}(_0x7df3,0x109));var _0x37df=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0x7df3[_0x2f5ac5];return _0x37c9a8;};'use strict';var pdf=require(_0x37df('0x0'));var emlformat=require(_0x37df('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x37df('0x2'));var jsonpatch=require(_0x37df('0x3'));var rp=require(_0x37df('0x4'));var moment=require(_0x37df('0x5'));var BPromise=require(_0x37df('0x6'));var Mustache=require(_0x37df('0x7'));var util=require(_0x37df('0x8'));var path=require(_0x37df('0x9'));var sox=require(_0x37df('0xa'));var csv=require('to-csv');var ejs=require(_0x37df('0xb'));var fs=require('fs');var _=require(_0x37df('0xc'));var squel=require(_0x37df('0xd'));var crypto=require('crypto');var jsforce=require(_0x37df('0xe'));var deskjs=require(_0x37df('0xf'));var toCsv=require(_0x37df('0x10'));var querystring=require(_0x37df('0x11'));var Papa=require(_0x37df('0x12'));var Redis=require('ioredis');var authService=require(_0x37df('0x13'));var qs=require(_0x37df('0x14'));var hardwareService=require(_0x37df('0x15'));var logger=require(_0x37df('0x16'))(_0x37df('0x17'));var utils=require(_0x37df('0x18'));var config=require(_0x37df('0x19'));var db=require(_0x37df('0x1a'))['db'];function respondWithStatusCode(_0x4ccf4f,_0x2aaf87){_0x2aaf87=_0x2aaf87||0xcc;return function(_0x3f390a){if(_0x3f390a){return _0x4ccf4f[_0x37df('0x1b')](_0x2aaf87);}return _0x4ccf4f[_0x37df('0x1c')](_0x2aaf87)[_0x37df('0x1d')]();};}function respondWithResult(_0x203676,_0xc0e137){_0xc0e137=_0xc0e137||0xc8;return function(_0x4fd276){if(_0x4fd276){return _0x203676[_0x37df('0x1c')](_0xc0e137)['json'](_0x4fd276);}};}function respondWithFilteredResult(_0x127497,_0x496e6c){return function(_0x3eb0ea){if(_0x3eb0ea){var _0x514ae8=_0x3eb0ea['count'],_0x2a3864=_0x496e6c[_0x37df('0x1e')],_0x240942=_0x496e6c['offset']+_0x496e6c[_0x37df('0x1f')],_0x104ed8;if(_0x240942>=_0x514ae8){_0x240942=_0x514ae8;_0x104ed8=0xc8;}else{_0x104ed8=0xce;}_0x127497[_0x37df('0x1c')](_0x104ed8);return _0x127497[_0x37df('0x20')](_0x37df('0x21'),_0x2a3864+'-'+_0x240942+'/'+_0x514ae8)['json'](_0x3eb0ea);}return null;};}function patchUpdates(_0x452303){return function(_0x5c3ca5){try{jsonpatch[_0x37df('0x22')](_0x5c3ca5,_0x452303,!![]);}catch(_0x196af3){return BPromise['reject'](_0x196af3);}return _0x5c3ca5[_0x37df('0x23')]();};}function saveUpdates(_0x53be96,_0x1fc2d7){return function(_0x580712){if(_0x580712){return _0x580712[_0x37df('0x24')](_0x53be96)[_0x37df('0x25')](function(_0xc23028){return _0xc23028;});}return null;};}function removeEntity(_0x572f80,_0x3b2b44){return function(_0x4c4fb6){if(_0x4c4fb6){return _0x4c4fb6[_0x37df('0x26')]()['then'](function(){_0x572f80['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x24f131,_0x164a1c){return function(_0x1410a3){if(!_0x1410a3){_0x24f131[_0x37df('0x1b')](0x194);}return _0x1410a3;};}function handleError(_0x5e4b36,_0x2294ea){_0x2294ea=_0x2294ea||0x1f4;return function(_0x489a79){logger[_0x37df('0x27')](_0x489a79['stack']);if(_0x489a79[_0x37df('0x28')]){delete _0x489a79[_0x37df('0x28')];}_0x5e4b36[_0x37df('0x1c')](_0x2294ea)[_0x37df('0x29')](_0x489a79);};}exports['index']=function(_0x6bdcec,_0x5a288b){var _0x28db18={},_0x20ef47={},_0x5413f7={'count':0x0,'rows':[]};var _0x161052=db[_0x37df('0x2a')]['rawAttributes'];_0x20ef47[_0x37df('0x2b')]=_[_0x37df('0x2c')](_0x161052);_0x20ef47[_0x37df('0x2d')]=_[_0x37df('0x2c')](_0x6bdcec[_0x37df('0x2d')]);_0x20ef47[_0x37df('0x2e')]=_['intersection'](_0x20ef47[_0x37df('0x2b')],_0x20ef47[_0x37df('0x2d')]);_0x28db18['attributes']=_[_0x37df('0x2f')](_0x20ef47['model'],qs['fields'](_0x6bdcec[_0x37df('0x2d')][_0x37df('0x30')]));_0x28db18[_0x37df('0x31')]=_0x28db18['attributes'][_0x37df('0x32')]?_0x28db18['attributes']:_0x20ef47[_0x37df('0x2b')];if(!_0x6bdcec[_0x37df('0x2d')]['hasOwnProperty'](_0x37df('0x33'))){_0x28db18['limit']=qs[_0x37df('0x1f')](_0x6bdcec[_0x37df('0x2d')][_0x37df('0x1f')]);_0x28db18['offset']=qs[_0x37df('0x1e')](_0x6bdcec['query'][_0x37df('0x1e')]);}_0x28db18[_0x37df('0x34')]=qs[_0x37df('0x35')](_0x6bdcec[_0x37df('0x2d')][_0x37df('0x35')]);_0x28db18['where']=qs[_0x37df('0x2e')](_[_0x37df('0x36')](_0x6bdcec['query'],_0x20ef47['filters']));if(_0x6bdcec[_0x37df('0x2d')][_0x37df('0x37')]){_0x28db18[_0x37df('0x38')]=_[_0x37df('0x39')](_0x28db18[_0x37df('0x38')],{'$or':_['map'](_0x161052,function(_0x5605fb){if(_0x5605fb[_0x37df('0x3a')][_0x37df('0x3b')]!==_0x37df('0x3c')){var _0x1c75d8={};_0x1c75d8[_0x5605fb['field']]={'$like':'%'+_0x6bdcec[_0x37df('0x2d')][_0x37df('0x37')]+'%'};return _0x1c75d8;}})});}_0x28db18=_['merge']({},_0x28db18,_0x6bdcec[_0x37df('0x3d')]);var _0xfef025={'where':_0x28db18[_0x37df('0x38')]};return db[_0x37df('0x2a')][_0x37df('0x3e')](_0xfef025)[_0x37df('0x25')](function(_0x4307f5){_0x5413f7[_0x37df('0x3e')]=_0x4307f5;if(_0x6bdcec['query'][_0x37df('0x3f')]){_0x28db18[_0x37df('0x40')]=[{'all':!![]}];}return db[_0x37df('0x2a')][_0x37df('0x41')](_0x28db18);})[_0x37df('0x25')](function(_0x4691c2){_0x5413f7[_0x37df('0x42')]=_0x4691c2;return _0x5413f7;})[_0x37df('0x25')](respondWithFilteredResult(_0x5a288b,_0x28db18))[_0x37df('0x43')](handleError(_0x5a288b,null));};exports['show']=function(_0x4a1ed1,_0x134a5b){var _0xfc6484={'raw':!![],'where':{'id':_0x4a1ed1['params']['id']}},_0xec4816={};_0xec4816[_0x37df('0x2b')]=_[_0x37df('0x2c')](db['SalesforceField'][_0x37df('0x44')]);_0xec4816[_0x37df('0x2d')]=_[_0x37df('0x2c')](_0x4a1ed1[_0x37df('0x2d')]);_0xec4816[_0x37df('0x2e')]=_['intersection'](_0xec4816[_0x37df('0x2b')],_0xec4816[_0x37df('0x2d')]);_0xfc6484['attributes']=_['intersection'](_0xec4816[_0x37df('0x2b')],qs['fields'](_0x4a1ed1['query']['fields']));_0xfc6484[_0x37df('0x31')]=_0xfc6484[_0x37df('0x31')][_0x37df('0x32')]?_0xfc6484[_0x37df('0x31')]:_0xec4816['model'];if(_0x4a1ed1['query'][_0x37df('0x3f')]){_0xfc6484[_0x37df('0x40')]=[{'all':!![]}];}_0xfc6484=_[_0x37df('0x39')]({},_0xfc6484,_0x4a1ed1[_0x37df('0x3d')]);return db['SalesforceField']['find'](_0xfc6484)[_0x37df('0x25')](handleEntityNotFound(_0x134a5b,null))[_0x37df('0x25')](respondWithResult(_0x134a5b,null))['catch'](handleError(_0x134a5b,null));};exports[_0x37df('0x45')]=function(_0x1a6563,_0x3b31a9){return db[_0x37df('0x2a')][_0x37df('0x45')](_0x1a6563[_0x37df('0x46')],{})['then'](respondWithResult(_0x3b31a9,0xc9))[_0x37df('0x43')](handleError(_0x3b31a9,null));};exports[_0x37df('0x24')]=function(_0x152e08,_0x43b9f3){if(_0x152e08[_0x37df('0x46')]['id']){delete _0x152e08[_0x37df('0x46')]['id'];}return db[_0x37df('0x2a')][_0x37df('0x47')]({'where':{'id':_0x152e08[_0x37df('0x48')]['id']}})['then'](handleEntityNotFound(_0x43b9f3,null))[_0x37df('0x25')](saveUpdates(_0x152e08['body'],null))[_0x37df('0x25')](respondWithResult(_0x43b9f3,null))[_0x37df('0x43')](handleError(_0x43b9f3,null));};exports[_0x37df('0x26')]=function(_0x1f50f1,_0x4fdc0d){return db[_0x37df('0x2a')][_0x37df('0x47')]({'where':{'id':_0x1f50f1[_0x37df('0x48')]['id']}})['then'](handleEntityNotFound(_0x4fdc0d,null))[_0x37df('0x25')](removeEntity(_0x4fdc0d,null))[_0x37df('0x43')](handleError(_0x4fdc0d,null));};
\ No newline at end of file
index 68dba78..b15dcf9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0480=['util','api','moment','bluebird','path','rimraf','../../config/environment','./intSalesforceField.attributes','exports','SalesforceField','int_salesforce_fields','salesforce_unique_index'];(function(_0xba746b,_0x2c4ac2){var _0x273b44=function(_0x4b7a2e){while(--_0x4b7a2e){_0xba746b['push'](_0xba746b['shift']());}};_0x273b44(++_0x2c4ac2);}(_0x0480,0x6c));var _0x0048=function(_0x4a2e6b,_0x59779c){_0x4a2e6b=_0x4a2e6b-0x0;var _0x3ea1cd=_0x0480[_0x4a2e6b];return _0x3ea1cd;};'use strict';var _=require('lodash');var util=require(_0x0048('0x0'));var logger=require('../../config/logger')(_0x0048('0x1'));var moment=require(_0x0048('0x2'));var BPromise=require(_0x0048('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x0048('0x4'));var rimraf=require(_0x0048('0x5'));var config=require(_0x0048('0x6'));var attributes=require(_0x0048('0x7'));module[_0x0048('0x8')]=function(_0x2ee56a,_0x2be439){return _0x2ee56a['define'](_0x0048('0x9'),attributes,{'tableName':_0x0048('0xa'),'paranoid':![],'indexes':[{'name':_0x0048('0xb'),'fields':['idField','FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x2b2d=['moment','request-promise','path','rimraf','./intSalesforceField.attributes','exports','define','SalesforceField','salesforce_unique_index','idField','lodash','../../config/logger','api'];(function(_0x426826,_0x4a2794){var _0x3f672c=function(_0x424125){while(--_0x424125){_0x426826['push'](_0x426826['shift']());}};_0x3f672c(++_0x4a2794);}(_0x2b2d,0x128));var _0xd2b2=function(_0x168466,_0x5f37e5){_0x168466=_0x168466-0x0;var _0xcf8a4=_0x2b2d[_0x168466];return _0xcf8a4;};'use strict';var _=require(_0xd2b2('0x0'));var util=require('util');var logger=require(_0xd2b2('0x1'))(_0xd2b2('0x2'));var moment=require(_0xd2b2('0x3'));var BPromise=require('bluebird');var rp=require(_0xd2b2('0x4'));var fs=require('fs');var path=require(_0xd2b2('0x5'));var rimraf=require(_0xd2b2('0x6'));var config=require('../../config/environment');var attributes=require(_0xd2b2('0x7'));module[_0xd2b2('0x8')]=function(_0x5ca843,_0x5e6a4a){return _0x5ca843[_0xd2b2('0x9')](_0xd2b2('0xa'),attributes,{'tableName':'int_salesforce_fields','paranoid':![],'indexes':[{'name':_0xd2b2('0xb'),'fields':[_0xd2b2('0xc'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 1f3444f..8d6bdc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc947=['message','result','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info','SalesforceField,\x20%s,\x20%s','request\x20sent','stringify','error','code'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xc947,0x6b));var _0x7c94=function(_0x5d07de,_0x8b665){_0x5d07de=_0x5d07de-0x0;var _0x2af923=_0xc947[_0x5d07de];return _0x2af923;};'use strict';var _=require(_0x7c94('0x0'));var util=require(_0x7c94('0x1'));var moment=require(_0x7c94('0x2'));var BPromise=require(_0x7c94('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7c94('0x4'));var db=require(_0x7c94('0x5'))['db'];var utils=require(_0x7c94('0x6'));var logger=require(_0x7c94('0x7'))('rpc');var config=require(_0x7c94('0x8'));var jayson=require(_0x7c94('0x9'));var client=jayson[_0x7c94('0xa')][_0x7c94('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x18c6fc,_0x506e48,_0x441cf0){return new BPromise(function(_0x5e7eb2,_0x1beb4f){return client['request'](_0x18c6fc,_0x441cf0)[_0x7c94('0xc')](function(_0x14c5b9){logger[_0x7c94('0xd')](_0x7c94('0xe'),_0x506e48,_0x7c94('0xf'));logger['debug']('SalesforceField,\x20%s,\x20%s,\x20%s',_0x506e48,_0x7c94('0xf'),JSON[_0x7c94('0x10')](_0x14c5b9));if(_0x14c5b9[_0x7c94('0x11')]){if(_0x14c5b9[_0x7c94('0x11')][_0x7c94('0x12')]===0x1f4){logger[_0x7c94('0x11')](_0x7c94('0xe'),_0x506e48,_0x14c5b9[_0x7c94('0x11')][_0x7c94('0x13')]);return _0x1beb4f(_0x14c5b9[_0x7c94('0x11')]['message']);}logger['error'](_0x7c94('0xe'),_0x506e48,_0x14c5b9['error']['message']);return _0x5e7eb2(_0x14c5b9[_0x7c94('0x11')][_0x7c94('0x13')]);}else{logger[_0x7c94('0xd')](_0x7c94('0xe'),_0x506e48,'request\x20sent');_0x5e7eb2(_0x14c5b9[_0x7c94('0x14')][_0x7c94('0x13')]);}})['catch'](function(_0x2596af){logger[_0x7c94('0x11')](_0x7c94('0xe'),_0x506e48,_0x2596af);_0x1beb4f(_0x2596af);});});}
\ No newline at end of file
+var _0xd0d0=['request','then','request\x20sent','debug','stringify','error','code','SalesforceField,\x20%s,\x20%s','message','info','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http'];(function(_0x52d487,_0x5650b9){var _0x1f4194=function(_0x92083b){while(--_0x92083b){_0x52d487['push'](_0x52d487['shift']());}};_0x1f4194(++_0x5650b9);}(_0xd0d0,0x1ed));var _0x0d0d=function(_0x2e0f24,_0x988105){_0x2e0f24=_0x2e0f24-0x0;var _0x9ab669=_0xd0d0[_0x2e0f24];return _0x9ab669;};'use strict';var _=require(_0x0d0d('0x0'));var util=require('util');var moment=require(_0x0d0d('0x1'));var BPromise=require(_0x0d0d('0x2'));var rs=require(_0x0d0d('0x3'));var fs=require('fs');var Redis=require(_0x0d0d('0x4'));var db=require(_0x0d0d('0x5'))['db'];var utils=require(_0x0d0d('0x6'));var logger=require(_0x0d0d('0x7'))(_0x0d0d('0x8'));var config=require(_0x0d0d('0x9'));var jayson=require(_0x0d0d('0xa'));var client=jayson[_0x0d0d('0xb')][_0x0d0d('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x2f6331,_0x3a4fc9,_0x475318){return new BPromise(function(_0x33e55c,_0x3e4170){return client[_0x0d0d('0xd')](_0x2f6331,_0x475318)[_0x0d0d('0xe')](function(_0xa4db41){logger['info']('SalesforceField,\x20%s,\x20%s',_0x3a4fc9,_0x0d0d('0xf'));logger[_0x0d0d('0x10')]('SalesforceField,\x20%s,\x20%s,\x20%s',_0x3a4fc9,_0x0d0d('0xf'),JSON[_0x0d0d('0x11')](_0xa4db41));if(_0xa4db41['error']){if(_0xa4db41[_0x0d0d('0x12')][_0x0d0d('0x13')]===0x1f4){logger[_0x0d0d('0x12')](_0x0d0d('0x14'),_0x3a4fc9,_0xa4db41[_0x0d0d('0x12')][_0x0d0d('0x15')]);return _0x3e4170(_0xa4db41[_0x0d0d('0x12')][_0x0d0d('0x15')]);}logger[_0x0d0d('0x12')](_0x0d0d('0x14'),_0x3a4fc9,_0xa4db41['error'][_0x0d0d('0x15')]);return _0x33e55c(_0xa4db41['error'][_0x0d0d('0x15')]);}else{logger[_0x0d0d('0x16')](_0x0d0d('0x14'),_0x3a4fc9,_0x0d0d('0xf'));_0x33e55c(_0xa4db41['result'][_0x0d0d('0x15')]);}})['catch'](function(_0x4a6393){logger[_0x0d0d('0x12')](_0x0d0d('0x14'),_0x3a4fc9,_0x4a6393);_0x3e4170(_0x4a6393);});});}
\ No newline at end of file
index 4f4e302..cbc11b3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1090=['util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intServicenowAccount.controller','get','isAuthenticated','index','/:id','show','getConfigurations','/:id/fields','getFields','create','post','/:id/configurations','addConfiguration','put','update','delete','destroy','multer'];(function(_0x507597,_0x412525){var _0x110a0f=function(_0x57935a){while(--_0x57935a){_0x507597['push'](_0x507597['shift']());}};_0x110a0f(++_0x412525);}(_0x1090,0x7c));var _0x0109=function(_0x2f6768,_0x5a76a1){_0x2f6768=_0x2f6768-0x0;var _0x48d02d=_0x1090[_0x2f6768];return _0x48d02d;};'use strict';var multer=require(_0x0109('0x0'));var util=require(_0x0109('0x1'));var path=require(_0x0109('0x2'));var timeout=require('connect-timeout');var express=require(_0x0109('0x3'));var router=express[_0x0109('0x4')]();var auth=require(_0x0109('0x5'));var interaction=require(_0x0109('0x6'));var config=require(_0x0109('0x7'));var controller=require(_0x0109('0x8'));router[_0x0109('0x9')]('/',auth[_0x0109('0xa')](),controller[_0x0109('0xb')]);router[_0x0109('0x9')](_0x0109('0xc'),auth[_0x0109('0xa')](),controller[_0x0109('0xd')]);router[_0x0109('0x9')]('/:id/configurations',auth[_0x0109('0xa')](),controller[_0x0109('0xe')]);router['get'](_0x0109('0xf'),auth[_0x0109('0xa')](),controller[_0x0109('0x10')]);router['post']('/',auth[_0x0109('0xa')](),controller[_0x0109('0x11')]);router[_0x0109('0x12')](_0x0109('0x13'),auth[_0x0109('0xa')](),controller[_0x0109('0x14')]);router[_0x0109('0x15')](_0x0109('0xc'),auth['isAuthenticated'](),controller[_0x0109('0x16')]);router[_0x0109('0x17')]('/:id',auth[_0x0109('0xa')](),controller[_0x0109('0x18')]);module['exports']=router;
\ No newline at end of file
+var _0x40c5=['exports','multer','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','post','create','/:id/configurations','put','destroy'];(function(_0x545c58,_0x3980d4){var _0x35f92e=function(_0x53842e){while(--_0x53842e){_0x545c58['push'](_0x545c58['shift']());}};_0x35f92e(++_0x3980d4);}(_0x40c5,0xd2));var _0x540c=function(_0x3a6938,_0x51047d){_0x3a6938=_0x3a6938-0x0;var _0x49b2cd=_0x40c5[_0x3a6938];return _0x49b2cd;};'use strict';var multer=require(_0x540c('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x540c('0x1'));var express=require(_0x540c('0x2'));var router=express[_0x540c('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x540c('0x4'));var config=require(_0x540c('0x5'));var controller=require('./intServicenowAccount.controller');router[_0x540c('0x6')]('/',auth[_0x540c('0x7')](),controller[_0x540c('0x8')]);router[_0x540c('0x6')](_0x540c('0x9'),auth['isAuthenticated'](),controller[_0x540c('0xa')]);router['get']('/:id/configurations',auth['isAuthenticated'](),controller['getConfigurations']);router[_0x540c('0x6')](_0x540c('0xb'),auth[_0x540c('0x7')](),controller[_0x540c('0xc')]);router[_0x540c('0xd')]('/',auth['isAuthenticated'](),controller[_0x540c('0xe')]);router['post'](_0x540c('0xf'),auth['isAuthenticated'](),controller['addConfiguration']);router[_0x540c('0x10')]('/:id',auth['isAuthenticated'](),controller['update']);router['delete'](_0x540c('0x9'),auth[_0x540c('0x7')](),controller[_0x540c('0x11')]);module[_0x540c('0x12')]=router;
\ No newline at end of file
index 35c1307..7e2b2aa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc368=['STRING','username','remoteUri','exports'];(function(_0x321df4,_0x3efec5){var _0x50d06c=function(_0x3ac0f4){while(--_0x3ac0f4){_0x321df4['push'](_0x321df4['shift']());}};_0x50d06c(++_0x3efec5);}(_0xc368,0x7b));var _0x8c36=function(_0x3c0445,_0x59d190){_0x3c0445=_0x3c0445-0x0;var _0x118704=_0xc368[_0x3c0445];return _0x118704;};'use strict';var Sequelize=require('sequelize');module[_0x8c36('0x0')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x8c36('0x1')]},'username':{'type':Sequelize[_0x8c36('0x1')],'unique':_0x8c36('0x2')},'password':{'type':Sequelize[_0x8c36('0x1')]},'email':{'type':Sequelize[_0x8c36('0x1')]},'remoteUri':{'type':Sequelize['STRING'],'unique':_0x8c36('0x3')},'serverUrl':{'type':Sequelize[_0x8c36('0x1')]}};
\ No newline at end of file
+var _0x2750=['STRING','username','remoteUri','sequelize'];(function(_0x5c365f,_0x3b40ed){var _0x295e1b=function(_0x226683){while(--_0x226683){_0x5c365f['push'](_0x5c365f['shift']());}};_0x295e1b(++_0x3b40ed);}(_0x2750,0x13b));var _0x0275=function(_0x56c560,_0x502951){_0x56c560=_0x56c560-0x0;var _0x474942=_0x2750[_0x56c560];return _0x474942;};'use strict';var Sequelize=require(_0x0275('0x0'));module['exports']={'name':{'type':Sequelize[_0x0275('0x1')]},'description':{'type':Sequelize[_0x0275('0x1')]},'username':{'type':Sequelize[_0x0275('0x1')],'unique':_0x0275('0x2')},'password':{'type':Sequelize[_0x0275('0x1')]},'email':{'type':Sequelize[_0x0275('0x1')]},'remoteUri':{'type':Sequelize[_0x0275('0x1')],'unique':_0x0275('0x3')},'serverUrl':{'type':Sequelize[_0x0275('0x1')]}};
\ No newline at end of file
index 1402df5..8e952cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8acc=['ServicenowAccount,\x20%s,\x20%s','request\x20sent','ServicenowAccount,\x20%s,\x20%s,\x20%s','error','message','result','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','stack','name','send','index','ServicenowAccount','rawAttributes','model','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','keys','create','body','catch','find','params','destroy','getConfigurations','ServicenowConfiguration','pick','map','findOne','Subjects','getSubjects','channel','type','Descriptions','getDescriptions','ServicenowField','getFields','hold_reason','knowledge','close_code','incident_state','severity','category','parent','made_sla','caused_by','watch_list','sys_updated_on','child_incidents','resolved_by','opened_by','user_input','sys_created_on','sys_domain','state','calendar_stc','closed_at','impact','active','work_notes_list','priority','time_worked','expected_start','business_duration','work_end','resolved_at','approval_set','subcategory','work_notes','short_description','correlation_display','work_start','assignment_group','business_stc','description','notify','sys_class_name','close_notes','closed_by','follow_up','parent_incident','sys_id','reopened_by','urgency','problem_id','company','reassignment_count','activity_due','comments','sla_due','approval','comments_and_work_notes','sys_mod_count','upon_approval','correlation_id','location','username','password','email','serverUrl','slice','substring','lastIndexOf','format','%s/api/now/doc/table/schema/','%s/api/now/table/','GET','incident?sysparm_display_value=all','assign','remove','forEach','internalType','push','all','log','TCL:\x20_object','TCL:\x20exports.getEntityFields\x20->\x20_objectsCustom','label','ServiceNow\x20error:\x20','statusCode','Wrong\x20credentials','True','true','sys_choice?sysparm_query=name=incident^element=','inactive','false','value','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','crypto','jsforce','desk.js','querystring','../../config/logger','api','../../config/utils','../../mysqldb','../../components/integrations/configuration','client','http','test','request','then','info'];(function(_0x480ba3,_0xf6f9f8){var _0x187433=function(_0x496bd0){while(--_0x496bd0){_0x480ba3['push'](_0x480ba3['shift']());}};_0x187433(++_0xf6f9f8);}(_0x8acc,0x9e));var _0xc8ac=function(_0x334970,_0x7d7a3){_0x334970=_0x334970-0x0;var _0x560cb3=_0x8acc[_0x334970];return _0x560cb3;};'use strict';var pdf=require(_0xc8ac('0x0'));var emlformat=require(_0xc8ac('0x1'));var rimraf=require(_0xc8ac('0x2'));var zipdir=require(_0xc8ac('0x3'));var jsonpatch=require(_0xc8ac('0x4'));var rp=require(_0xc8ac('0x5'));var moment=require(_0xc8ac('0x6'));var BPromise=require(_0xc8ac('0x7'));var Mustache=require(_0xc8ac('0x8'));var util=require(_0xc8ac('0x9'));var path=require(_0xc8ac('0xa'));var sox=require(_0xc8ac('0xb'));var csv=require(_0xc8ac('0xc'));var ejs=require(_0xc8ac('0xd'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xc8ac('0xe'));var jsforce=require(_0xc8ac('0xf'));var deskjs=require(_0xc8ac('0x10'));var toCsv=require(_0xc8ac('0xc'));var querystring=require(_0xc8ac('0x11'));var Papa=require('papaparse');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(_0xc8ac('0x12'))(_0xc8ac('0x13'));var utils=require(_0xc8ac('0x14'));var config=require('../../config/environment');var db=require(_0xc8ac('0x15'))['db'];var integrations=require(_0xc8ac('0x16'));var jayson=require('jayson/promise');var client=jayson[_0xc8ac('0x17')][_0xc8ac('0x18')]({'port':0x232a});function checkPasswordPattern(_0x23242c,_0x11f554,_0x2e9a87){if(_0x2e9a87){var _0x189d0c=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x189d0c[_0xc8ac('0x19')](_0x11f554)){return _0x23242c;}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 _0x23242c;}}function respondWithRpcPromise(_0xf91913,_0x5a3a9a,_0x3bfa31,_0xc9bac3){return new BPromise(function(_0x554e7f,_0x13cab0){var _0x48c65d=_0xc9bac3||client;return _0x48c65d[_0xc8ac('0x1a')](_0xf91913,_0x3bfa31)[_0xc8ac('0x1b')](function(_0x3ef906){logger[_0xc8ac('0x1c')](_0xc8ac('0x1d'),_0x5a3a9a,_0xc8ac('0x1e'));logger['debug'](_0xc8ac('0x1f'),_0x5a3a9a,_0xc8ac('0x1e'),JSON['stringify'](_0x3ef906));if(_0x3ef906['error']){if(_0x3ef906[_0xc8ac('0x20')]['code']===0x1f4){logger['error'](_0xc8ac('0x1d'),_0x5a3a9a,_0x3ef906[_0xc8ac('0x20')]['message']);return _0x13cab0(_0x3ef906[_0xc8ac('0x20')][_0xc8ac('0x21')]);}logger['error']('ServicenowAccount,\x20%s,\x20%s',_0x5a3a9a,_0x3ef906['error'][_0xc8ac('0x21')]);return _0x554e7f(_0x3ef906['error'][_0xc8ac('0x21')]);}else{logger[_0xc8ac('0x1c')](_0xc8ac('0x1d'),_0x5a3a9a,_0xc8ac('0x1e'));_0x554e7f(_0x3ef906[_0xc8ac('0x22')][_0xc8ac('0x21')]);}})['catch'](function(_0x11c24e){logger[_0xc8ac('0x20')](_0xc8ac('0x1d'),_0x5a3a9a,_0x11c24e);_0x13cab0(_0x11c24e);});});}function respondWithStatusCode(_0x254a6c,_0x35799e){_0x35799e=_0x35799e||0xcc;return function(_0x2b58e5){if(_0x2b58e5){return _0x254a6c[_0xc8ac('0x23')](_0x35799e);}return _0x254a6c[_0xc8ac('0x24')](_0x35799e)[_0xc8ac('0x25')]();};}function respondWithResult(_0x466986,_0x14daed){_0x14daed=_0x14daed||0xc8;return function(_0x844451){if(_0x844451){return _0x466986['status'](_0x14daed)[_0xc8ac('0x26')](_0x844451);}};}function respondWithFilteredResult(_0x462923,_0xcbf718){return function(_0x391c9d){if(_0x391c9d){var _0x178b26=_0x391c9d[_0xc8ac('0x27')],_0x5e0c71=_0xcbf718['offset'],_0x33d05c=_0xcbf718[_0xc8ac('0x28')]+_0xcbf718[_0xc8ac('0x29')],_0x38d14a;if(_0x33d05c>=_0x178b26){_0x33d05c=_0x178b26;_0x38d14a=0xc8;}else{_0x38d14a=0xce;}_0x462923[_0xc8ac('0x24')](_0x38d14a);return _0x462923[_0xc8ac('0x2a')](_0xc8ac('0x2b'),_0x5e0c71+'-'+_0x33d05c+'/'+_0x178b26)[_0xc8ac('0x26')](_0x391c9d);}return null;};}function patchUpdates(_0x30fc58){return function(_0x1848e6){try{jsonpatch[_0xc8ac('0x2c')](_0x1848e6,_0x30fc58,!![]);}catch(_0x168b5e){return BPromise[_0xc8ac('0x2d')](_0x168b5e);}return _0x1848e6[_0xc8ac('0x2e')]();};}function saveUpdates(_0x496e32,_0x1f3e31){return function(_0x470615){if(_0x470615){return _0x470615[_0xc8ac('0x2f')](_0x496e32)[_0xc8ac('0x1b')](function(_0x46d20e){return _0x46d20e;});}return null;};}function removeEntity(_0x37a825,_0x384cd7){return function(_0x1796dd){if(_0x1796dd){return _0x1796dd['destroy']()[_0xc8ac('0x1b')](function(){_0x37a825[_0xc8ac('0x24')](0xcc)[_0xc8ac('0x25')]();});}};}function handleEntityNotFound(_0x138e20,_0x9790a9){return function(_0xa77c1b){if(!_0xa77c1b){_0x138e20[_0xc8ac('0x23')](0x194);}return _0xa77c1b;};}function handleError(_0x3fbce6,_0x18c8dc){_0x18c8dc=_0x18c8dc||0x1f4;return function(_0x5ed47e){logger[_0xc8ac('0x20')](_0x5ed47e[_0xc8ac('0x30')]);if(_0x5ed47e[_0xc8ac('0x31')]){delete _0x5ed47e['name'];}_0x3fbce6[_0xc8ac('0x24')](_0x18c8dc)[_0xc8ac('0x32')](_0x5ed47e);};}exports[_0xc8ac('0x33')]=function(_0x2a53fb,_0x1d32fa){var _0x4898aa={},_0x400d4e={},_0x53b68e={'count':0x0,'rows':[]};var _0x18239a=db[_0xc8ac('0x34')][_0xc8ac('0x35')];_0x400d4e[_0xc8ac('0x36')]=_['keys'](_0x18239a);_0x400d4e[_0xc8ac('0x37')]=_['keys'](_0x2a53fb[_0xc8ac('0x37')]);_0x400d4e[_0xc8ac('0x38')]=_['intersection'](_0x400d4e[_0xc8ac('0x36')],_0x400d4e[_0xc8ac('0x37')]);_0x4898aa['attributes']=_[_0xc8ac('0x39')](_0x400d4e[_0xc8ac('0x36')],qs[_0xc8ac('0x3a')](_0x2a53fb[_0xc8ac('0x37')][_0xc8ac('0x3a')]));_0x4898aa[_0xc8ac('0x3b')]=_0x4898aa[_0xc8ac('0x3b')][_0xc8ac('0x3c')]?_0x4898aa[_0xc8ac('0x3b')]:_0x400d4e[_0xc8ac('0x36')];if(!_0x2a53fb[_0xc8ac('0x37')][_0xc8ac('0x3d')](_0xc8ac('0x3e'))){_0x4898aa[_0xc8ac('0x29')]=qs[_0xc8ac('0x29')](_0x2a53fb[_0xc8ac('0x37')][_0xc8ac('0x29')]);_0x4898aa['offset']=qs['offset'](_0x2a53fb[_0xc8ac('0x37')][_0xc8ac('0x28')]);}_0x4898aa[_0xc8ac('0x3f')]=qs[_0xc8ac('0x40')](_0x2a53fb[_0xc8ac('0x37')][_0xc8ac('0x40')]);_0x4898aa[_0xc8ac('0x41')]=qs['filters'](_['pick'](_0x2a53fb[_0xc8ac('0x37')],_0x400d4e[_0xc8ac('0x38')]));if(_0x2a53fb[_0xc8ac('0x37')][_0xc8ac('0x42')]){_0x4898aa[_0xc8ac('0x41')]=_[_0xc8ac('0x43')](_0x4898aa[_0xc8ac('0x41')],{'$or':_['map'](_0x18239a,function(_0x3cd3fc){if(_0x3cd3fc['type'][_0xc8ac('0x44')]!==_0xc8ac('0x45')){var _0x3b00b1={};_0x3b00b1[_0x3cd3fc[_0xc8ac('0x46')]]={'$like':'%'+_0x2a53fb[_0xc8ac('0x37')][_0xc8ac('0x42')]+'%'};return _0x3b00b1;}})});}_0x4898aa=_[_0xc8ac('0x43')]({},_0x4898aa,_0x2a53fb[_0xc8ac('0x47')]);var _0x528094={'where':_0x4898aa[_0xc8ac('0x41')]};return db[_0xc8ac('0x34')][_0xc8ac('0x27')](_0x528094)[_0xc8ac('0x1b')](function(_0x39bd9e){_0x53b68e[_0xc8ac('0x27')]=_0x39bd9e;if(_0x2a53fb[_0xc8ac('0x37')][_0xc8ac('0x48')]){_0x4898aa[_0xc8ac('0x49')]=[{'all':!![]}];}return db[_0xc8ac('0x34')][_0xc8ac('0x4a')](_0x4898aa);})['then'](function(_0x2f287e){_0x53b68e[_0xc8ac('0x4b')]=_0x2f287e;return _0x53b68e;})[_0xc8ac('0x1b')](respondWithFilteredResult(_0x1d32fa,_0x4898aa))['catch'](handleError(_0x1d32fa,null));};exports[_0xc8ac('0x4c')]=function(_0x45a8fa,_0x21ebac){var _0x59cb66={'raw':![],'where':{'id':_0x45a8fa['params']['id']}},_0x129e4c={};_0x129e4c[_0xc8ac('0x36')]=_[_0xc8ac('0x4d')](db[_0xc8ac('0x34')][_0xc8ac('0x35')]);_0x129e4c[_0xc8ac('0x37')]=_[_0xc8ac('0x4d')](_0x45a8fa[_0xc8ac('0x37')]);_0x129e4c[_0xc8ac('0x38')]=_[_0xc8ac('0x39')](_0x129e4c['model'],_0x129e4c[_0xc8ac('0x37')]);_0x59cb66[_0xc8ac('0x3b')]=_[_0xc8ac('0x39')](_0x129e4c[_0xc8ac('0x36')],qs[_0xc8ac('0x3a')](_0x45a8fa[_0xc8ac('0x37')][_0xc8ac('0x3a')]));_0x59cb66[_0xc8ac('0x3b')]=_0x59cb66[_0xc8ac('0x3b')]['length']?_0x59cb66[_0xc8ac('0x3b')]:_0x129e4c[_0xc8ac('0x36')];if(_0x45a8fa[_0xc8ac('0x37')][_0xc8ac('0x48')]){_0x59cb66[_0xc8ac('0x49')]=[{'all':!![]}];}_0x59cb66=_['merge']({},_0x59cb66,_0x45a8fa[_0xc8ac('0x47')]);return db[_0xc8ac('0x34')]['find'](_0x59cb66)[_0xc8ac('0x1b')](handleEntityNotFound(_0x21ebac,null))[_0xc8ac('0x1b')](respondWithResult(_0x21ebac,null))['catch'](handleError(_0x21ebac,null));};exports[_0xc8ac('0x4e')]=function(_0x42e3bb,_0x108cc4){return db['ServicenowAccount'][_0xc8ac('0x4e')](_0x42e3bb[_0xc8ac('0x4f')],{})['then'](respondWithResult(_0x108cc4,0xc9))[_0xc8ac('0x50')](handleError(_0x108cc4,null));};exports['update']=function(_0x460000,_0x389641){if(_0x460000[_0xc8ac('0x4f')]['id']){delete _0x460000['body']['id'];}return db[_0xc8ac('0x34')][_0xc8ac('0x51')]({'where':{'id':_0x460000[_0xc8ac('0x52')]['id']}})[_0xc8ac('0x1b')](handleEntityNotFound(_0x389641,null))[_0xc8ac('0x1b')](saveUpdates(_0x460000[_0xc8ac('0x4f')],null))[_0xc8ac('0x1b')](respondWithResult(_0x389641,null))[_0xc8ac('0x50')](handleError(_0x389641,null));};exports[_0xc8ac('0x53')]=function(_0x42f457,_0x3797ce){return db['ServicenowAccount'][_0xc8ac('0x51')]({'where':{'id':_0x42f457[_0xc8ac('0x52')]['id']}})[_0xc8ac('0x1b')](handleEntityNotFound(_0x3797ce,null))[_0xc8ac('0x1b')](removeEntity(_0x3797ce,null))[_0xc8ac('0x50')](handleError(_0x3797ce,null));};exports[_0xc8ac('0x54')]=function(_0x9d8ac4,_0x5341e5,_0x4654d8){var _0x270f13={};var _0x2c5f98={};var _0x3a277c;var _0xc21a00;return db[_0xc8ac('0x34')]['findOne']({'where':{'id':_0x9d8ac4[_0xc8ac('0x52')]['id']}})[_0xc8ac('0x1b')](handleEntityNotFound(_0x5341e5,null))[_0xc8ac('0x1b')](function(_0x327c6f){if(_0x327c6f){_0x3a277c=_0x327c6f;_0x2c5f98[_0xc8ac('0x36')]=_[_0xc8ac('0x4d')](db[_0xc8ac('0x55')][_0xc8ac('0x35')]);_0x2c5f98[_0xc8ac('0x37')]=_[_0xc8ac('0x4d')](_0x9d8ac4[_0xc8ac('0x37')]);_0x2c5f98[_0xc8ac('0x38')]=_[_0xc8ac('0x39')](_0x2c5f98[_0xc8ac('0x36')],_0x2c5f98[_0xc8ac('0x37')]);_0x270f13['attributes']=_[_0xc8ac('0x39')](_0x2c5f98[_0xc8ac('0x36')],qs[_0xc8ac('0x3a')](_0x9d8ac4[_0xc8ac('0x37')][_0xc8ac('0x3a')]));_0x270f13[_0xc8ac('0x3b')]=_0x270f13[_0xc8ac('0x3b')][_0xc8ac('0x3c')]?_0x270f13['attributes']:_0x2c5f98['model'];_0x270f13[_0xc8ac('0x3f')]=qs['sort'](_0x9d8ac4[_0xc8ac('0x37')][_0xc8ac('0x40')]);_0x270f13[_0xc8ac('0x41')]=qs[_0xc8ac('0x38')](_[_0xc8ac('0x56')](_0x9d8ac4[_0xc8ac('0x37')],_0x2c5f98[_0xc8ac('0x38')]));if(_0x9d8ac4[_0xc8ac('0x37')][_0xc8ac('0x42')]){_0x270f13[_0xc8ac('0x41')]=_[_0xc8ac('0x43')](_0x270f13[_0xc8ac('0x41')],{'$or':_[_0xc8ac('0x57')](_0x270f13['attributes'],function(_0xa32360){var _0x46cb36={};_0x46cb36[_0xa32360]={'$like':'%'+_0x9d8ac4['query'][_0xc8ac('0x42')]+'%'};return _0x46cb36;})});}_0x270f13=_[_0xc8ac('0x43')]({},_0x270f13,_0x9d8ac4[_0xc8ac('0x47')]);return _0x3a277c[_0xc8ac('0x54')](_0x270f13);}})['then'](function(_0x46b03c){if(_0x46b03c){_0xc21a00=_0x46b03c[_0xc8ac('0x3c')];if(!_0x9d8ac4[_0xc8ac('0x37')]['hasOwnProperty'](_0xc8ac('0x3e'))){_0x270f13['limit']=qs[_0xc8ac('0x29')](_0x9d8ac4[_0xc8ac('0x37')][_0xc8ac('0x29')]);_0x270f13[_0xc8ac('0x28')]=qs[_0xc8ac('0x28')](_0x9d8ac4[_0xc8ac('0x37')][_0xc8ac('0x28')]);}return _0x3a277c['getConfigurations'](_0x270f13);}})[_0xc8ac('0x1b')](function(_0x1e09db){if(_0x1e09db){return _0x1e09db?{'count':_0xc21a00,'rows':_0x1e09db}:null;}})[_0xc8ac('0x1b')](respondWithResult(_0x5341e5,null))[_0xc8ac('0x50')](handleError(_0x5341e5,null));};exports['addConfiguration']=function(_0xc219d2,_0xa93de7,_0x2e5595){if(_0xc219d2['body']['id']){delete _0xc219d2[_0xc8ac('0x4f')]['id'];}return db['ServicenowAccount'][_0xc8ac('0x58')]({'where':{'id':_0xc219d2['params']['id']}})[_0xc8ac('0x1b')](handleEntityNotFound(_0xa93de7,null))[_0xc8ac('0x1b')](function(_0x3a67ae){if(_0x3a67ae){_0xc219d2[_0xc8ac('0x4f')]['AccountId']=_0x3a67ae['id'];_0xc219d2[_0xc8ac('0x4f')][_0xc8ac('0x59')]=integrations[_0xc8ac('0x5a')](_0xc219d2[_0xc8ac('0x4f')][_0xc8ac('0x5b')],_0xc219d2[_0xc8ac('0x4f')][_0xc8ac('0x5c')]);_0xc219d2['body'][_0xc8ac('0x5d')]=integrations[_0xc8ac('0x5e')](_0xc219d2[_0xc8ac('0x4f')][_0xc8ac('0x5b')],_0xc219d2[_0xc8ac('0x4f')][_0xc8ac('0x5c')]);return db['ServicenowConfiguration'][_0xc8ac('0x4e')](_0xc219d2['body'],{'include':[{'model':db[_0xc8ac('0x5f')],'as':_0xc8ac('0x59')},{'model':db[_0xc8ac('0x5f')],'as':_0xc8ac('0x5d')}]});}return null;})['then'](respondWithResult(_0xa93de7,null))[_0xc8ac('0x50')](handleError(_0xa93de7,null));};exports[_0xc8ac('0x60')]=function(_0x43a7c1,_0x596571,_0x484963){var _0x671c8f=['made_sla',_0xc8ac('0x61'),_0xc8ac('0x62'),'subcategory',_0xc8ac('0x63'),'notify',_0xc8ac('0x64'),_0xc8ac('0x65'),_0xc8ac('0x66')];var _0x275ed3=[_0xc8ac('0x67'),_0xc8ac('0x68'),_0xc8ac('0x69'),_0xc8ac('0x6a'),'upon_reject',_0xc8ac('0x6b'),_0xc8ac('0x6c'),_0xc8ac('0x61'),'approval_history','number',_0xc8ac('0x6d'),'sys_updated_by',_0xc8ac('0x6e'),_0xc8ac('0x6f'),_0xc8ac('0x70'),_0xc8ac('0x71'),_0xc8ac('0x72'),'sys_created_by',_0xc8ac('0x62'),_0xc8ac('0x3f'),_0xc8ac('0x73'),_0xc8ac('0x74'),'cmdb_ci','delivery_plan',_0xc8ac('0x75'),_0xc8ac('0x76'),_0xc8ac('0x77'),'business_service',_0xc8ac('0x78'),'sys_domain_path','rfc',_0xc8ac('0x79'),_0xc8ac('0x7a'),'opened_at',_0xc8ac('0x7b'),'group_list',_0xc8ac('0x7c'),'reopened_time',_0xc8ac('0x7d'),'caller_id',_0xc8ac('0x7e'),_0xc8ac('0x7f'),_0xc8ac('0x80'),_0xc8ac('0x81'),_0xc8ac('0x63'),_0xc8ac('0x82'),'delivery_task',_0xc8ac('0x83'),_0xc8ac('0x84'),_0xc8ac('0x85'),'additional_assignee_list',_0xc8ac('0x86'),'calendar_duration',_0xc8ac('0x87'),_0xc8ac('0x88'),_0xc8ac('0x89'),_0xc8ac('0x8a'),_0xc8ac('0x8b'),_0xc8ac('0x8c'),_0xc8ac('0x8d'),'contact_type',_0xc8ac('0x8e'),_0xc8ac('0x64'),_0xc8ac('0x8f'),_0xc8ac('0x90'),_0xc8ac('0x91'),_0xc8ac('0x92'),_0xc8ac('0x93'),'assigned_to',_0xc8ac('0x65'),_0xc8ac('0x94'),_0xc8ac('0x95'),_0xc8ac('0x96'),_0xc8ac('0x97'),'due_date',_0xc8ac('0x98'),'reopen_count','sys_tags','escalation',_0xc8ac('0x99'),_0xc8ac('0x9a'),_0xc8ac('0x9b'),_0xc8ac('0x66')];var _0x1a29e1='';var _0x211136='';var _0x15c4f9=[];var _0xca2501='';var _0x23a63e='';var _0x5319ea=[];var _0x53eb6c='';var _0x1dfd0e='';var _0x5bb388={};var _0x4ccb84='';return db[_0xc8ac('0x34')][_0xc8ac('0x58')]({'where':{'id':_0x43a7c1[_0xc8ac('0x52')]['id']},'attributes':['id',_0xc8ac('0x9c'),_0xc8ac('0x9d'),_0xc8ac('0x9e'),'remoteUri',_0xc8ac('0x9f')]})[_0xc8ac('0x1b')](handleEntityNotFound(_0x596571,null))[_0xc8ac('0x1b')](function(_0x19dd98){if(_0x19dd98){_0x4ccb84=_0x19dd98['remoteUri'];var _0x566193=_0x4ccb84[_0xc8ac('0xa0')](-0x1);if(_0x566193==='/'){_0x4ccb84=_0x4ccb84[_0xc8ac('0xa1')](0x0,_0x4ccb84[_0xc8ac('0xa2')](_0x566193));}_0x1dfd0e=util[_0xc8ac('0xa3')](_0xc8ac('0xa4'),_0x4ccb84);_0x53eb6c=util[_0xc8ac('0xa3')](_0xc8ac('0xa5'),_0x4ccb84);_0x5bb388={'user':_0x19dd98[_0xc8ac('0x9c')],'pass':_0x19dd98[_0xc8ac('0x9d')]};var _0x275ff7={'method':_0xc8ac('0xa6'),'uri':_0x1dfd0e+_0xc8ac('0xa7'),'auth':_0x5bb388,'json':!![]};return rp(_0x275ff7);}})[_0xc8ac('0x1b')](function(_0xdeaa48){if(_0xdeaa48[_0xc8ac('0x22')][_0xc8ac('0x3c')]>0x0){_0x1a29e1=_0xdeaa48[_0xc8ac('0x22')];}console['log']('incident\x20table\x20objects',_0x1a29e1);_0x5319ea=[];_0x211136=Object[_0xc8ac('0xa8')]([],_0x1a29e1);_[_0xc8ac('0xa9')](_0x211136,function(_0x3ce1d3){return!_0x671c8f['includes'](_0x3ce1d3[_0xc8ac('0x31')]);});_0x211136[_0xc8ac('0xaa')](function(_0x16eda4){var _0x5756a4=createFieldObject(_0x53eb6c,_0x5bb388,_0x16eda4[_0xc8ac('0xab')],_0x16eda4[_0xc8ac('0x31')],_0x16eda4['label'],![]);_0x5319ea[_0xc8ac('0xac')](_0x5756a4);});return Promise[_0xc8ac('0xad')](_0x5319ea);})[_0xc8ac('0x1b')](function(_0x1e75ab){_0x15c4f9=_0x1e75ab;_0xca2501=Object[_0xc8ac('0xa8')]([],_0x1a29e1);console[_0xc8ac('0xae')](_0xc8ac('0xaf'),_0x1a29e1);_[_0xc8ac('0xa9')](_0xca2501,function(_0x406cf5){return _0x275ed3['includes'](_0x406cf5[_0xc8ac('0x31')]);});console[_0xc8ac('0xae')](_0xc8ac('0xb0'),_0xca2501);_0x5319ea=[];_0xca2501[_0xc8ac('0xaa')](function(_0x13c447){var _0x2da2a9=createFieldObject(_0x53eb6c,_0x5bb388,_0x13c447[_0xc8ac('0xab')],_0x13c447[_0xc8ac('0x31')],_0x13c447[_0xc8ac('0xb1')],!![]);_0x5319ea[_0xc8ac('0xac')](_0x2da2a9);});return Promise['all'](_0x5319ea);})[_0xc8ac('0x1b')](function(_0x551aeb){_0x23a63e=_0x551aeb;var _0x41ddf4=_0x15c4f9['concat'](_0x23a63e);return{'count':_0x41ddf4['length'],'rows':_0x41ddf4};})[_0xc8ac('0x1b')](respondWithResult(_0x596571,null))[_0xc8ac('0x50')](function(_0x4679f9){console[_0xc8ac('0xae')](_0xc8ac('0xb2')+_0x4679f9);var _0x5732ec=_0x43a7c1[_0xc8ac('0x37')][_0xc8ac('0x19')]?0x1f4:_0x4679f9[_0xc8ac('0xb3')]||0x1f4;logger[_0xc8ac('0x20')](_0x4679f9[_0xc8ac('0x30')]);delete _0x4679f9[_0xc8ac('0x31')];if(_0x5732ec===0x191){_0x5732ec=0x190;}_0x596571[_0xc8ac('0x24')](_0x5732ec)[_0xc8ac('0x32')](_0x43a7c1[_0xc8ac('0x37')]['test']?{'message':_0xc8ac('0xb4'),'statusCode':_0x4679f9['statusCode']}:_0x4679f9);});};function createFieldObject(_0x3309a5,_0x3e0032,_0x8d48a7,_0x21ea2a,_0x1b37c6,_0xe1a5cb){return new Promise(function(_0x1d92ef,_0x2a346f){var _0x35d692={'id':_0x21ea2a,'name':_0x1b37c6,'custom':_0xe1a5cb};if(_0x8d48a7==='boolean'){_0x35d692[_0xc8ac('0x47')]=[{'name':_0xc8ac('0xb5'),'value':_0xc8ac('0xb6')},{'name':'False','value':'false'}];_0x1d92ef(_0x35d692);}else{var _0x5c8ba3={'method':_0xc8ac('0xa6'),'uri':_0x3309a5+_0xc8ac('0xb7')+_0x21ea2a,'auth':_0x3e0032,'json':!![]};return rp(_0x5c8ba3)[_0xc8ac('0x1b')](function(_0x41fdfb){var _0x32ac2d=[];if(_0x41fdfb[_0xc8ac('0x22')][_0xc8ac('0x3c')]>0x0){_0x41fdfb[_0xc8ac('0x22')][_0xc8ac('0xaa')](function(_0x492251){if(_0x492251[_0xc8ac('0xb8')]===_0xc8ac('0xb9')){var _0x43f08c={'name':_0x492251[_0xc8ac('0xb1')],'value':_0x492251[_0xc8ac('0xba')]};_0x32ac2d['push'](_0x43f08c);}});}_0x35d692[_0xc8ac('0x47')]=_0x32ac2d;if(_0x35d692[_0xc8ac('0x47')][_0xc8ac('0x3c')]>0x0){_0x1d92ef(_0x35d692);}else{if(_0xe1a5cb==![]){_0x1d92ef();}else{_0x1d92ef(_0x35d692);}}});}});}
\ No newline at end of file
+var _0x737e=['approval_history','resolved_by','sys_updated_by','opened_by','user_input','sys_domain','state','sys_created_by','calendar_stc','closed_at','delivery_plan','active','business_service','priority','sys_domain_path','rfc','expected_start','business_duration','group_list','reopened_time','resolved_at','caller_id','approval_set','work_notes','short_description','delivery_task','work_start','assignment_group','additional_assignee_list','description','calendar_duration','closed_by','follow_up','parent_incident','sys_id','contact_type','reopened_by','company','reassignment_count','assigned_to','comments','sla_due','approval','due_date','reopen_count','sys_tags','escalation','upon_approval','username','password','email','remoteUri','serverUrl','format','%s/api/now/doc/table/schema/','%s/api/now/table/','GET','incident?sysparm_display_value=all','log','incident\x20table\x20objects','remove','internalType','label','push','all','assign','TCL:\x20_object','includes','TCL:\x20exports.getEntityFields\x20->\x20_objectsCustom','forEach','concat','Wrong\x20credentials','statusCode','boolean','True','False','false','sys_choice?sysparm_query=name=incident^element=','inactive','value','html-pdf','eml-format','rimraf','zip-dir','request-promise','bluebird','path','sox','to-csv','ejs','lodash','crypto','desk.js','querystring','ioredis','../../components/parsers/qs','../../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','info','request\x20sent','debug','ServicenowAccount,\x20%s,\x20%s,\x20%s','error','code','ServicenowAccount,\x20%s,\x20%s','message','result','catch','sendStatus','status','end','json','offset','limit','set','reject','save','update','then','destroy','stack','name','send','ServicenowAccount','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','merge','where','map','type','field','filter','count','includeAll','include','findAll','rows','show','params','rawAttributes','length','find','create','body','getConfigurations','findOne','options','addConfiguration','AccountId','getSubjects','channel','Descriptions','getDescriptions','ServicenowField','Subjects','getFields','made_sla','hold_reason','subcategory','notify','incident_state','severity','category','parent','caused_by','watch_list','upon_reject','sys_updated_on','child_incidents'];(function(_0x36de4a,_0x5ac71d){var _0x17f2d0=function(_0x29e758){while(--_0x29e758){_0x36de4a['push'](_0x36de4a['shift']());}};_0x17f2d0(++_0x5ac71d);}(_0x737e,0x1cc));var _0xe737=function(_0x578405,_0x2d081c){_0x578405=_0x578405-0x0;var _0x483e80=_0x737e[_0x578405];return _0x483e80;};'use strict';var pdf=require(_0xe737('0x0'));var emlformat=require(_0xe737('0x1'));var rimraf=require(_0xe737('0x2'));var zipdir=require(_0xe737('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xe737('0x4'));var moment=require('moment');var BPromise=require(_0xe737('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0xe737('0x6'));var sox=require(_0xe737('0x7'));var csv=require(_0xe737('0x8'));var ejs=require(_0xe737('0x9'));var fs=require('fs');var _=require(_0xe737('0xa'));var squel=require('squel');var crypto=require(_0xe737('0xb'));var jsforce=require('jsforce');var deskjs=require(_0xe737('0xc'));var toCsv=require(_0xe737('0x8'));var querystring=require(_0xe737('0xd'));var Papa=require('papaparse');var Redis=require(_0xe737('0xe'));var authService=require('../../components/auth/service');var qs=require(_0xe737('0xf'));var hardwareService=require(_0xe737('0x10'));var logger=require(_0xe737('0x11'))(_0xe737('0x12'));var utils=require(_0xe737('0x13'));var config=require(_0xe737('0x14'));var db=require(_0xe737('0x15'))['db'];var integrations=require(_0xe737('0x16'));var jayson=require(_0xe737('0x17'));var client=jayson[_0xe737('0x18')][_0xe737('0x19')]({'port':0x232a});function checkPasswordPattern(_0x361bd1,_0x39fd4b,_0x51d8a3){if(_0x51d8a3){var _0x394904=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x394904[_0xe737('0x1a')](_0x39fd4b)){return _0x361bd1;}else{throw new Error(_0xe737('0x1b'));}}else{return _0x361bd1;}}function respondWithRpcPromise(_0x1d1fee,_0x465572,_0x43265d,_0x16c99d){return new BPromise(function(_0x1fae39,_0x45c6f2){var _0x34588e=_0x16c99d||client;return _0x34588e[_0xe737('0x1c')](_0x1d1fee,_0x43265d)['then'](function(_0x7e5fad){logger[_0xe737('0x1d')]('ServicenowAccount,\x20%s,\x20%s',_0x465572,_0xe737('0x1e'));logger[_0xe737('0x1f')](_0xe737('0x20'),_0x465572,_0xe737('0x1e'),JSON['stringify'](_0x7e5fad));if(_0x7e5fad[_0xe737('0x21')]){if(_0x7e5fad[_0xe737('0x21')][_0xe737('0x22')]===0x1f4){logger[_0xe737('0x21')](_0xe737('0x23'),_0x465572,_0x7e5fad['error'][_0xe737('0x24')]);return _0x45c6f2(_0x7e5fad[_0xe737('0x21')][_0xe737('0x24')]);}logger[_0xe737('0x21')](_0xe737('0x23'),_0x465572,_0x7e5fad[_0xe737('0x21')][_0xe737('0x24')]);return _0x1fae39(_0x7e5fad[_0xe737('0x21')]['message']);}else{logger[_0xe737('0x1d')](_0xe737('0x23'),_0x465572,'request\x20sent');_0x1fae39(_0x7e5fad[_0xe737('0x25')][_0xe737('0x24')]);}})[_0xe737('0x26')](function(_0x331baf){logger[_0xe737('0x21')](_0xe737('0x23'),_0x465572,_0x331baf);_0x45c6f2(_0x331baf);});});}function respondWithStatusCode(_0x1b5175,_0x5c8794){_0x5c8794=_0x5c8794||0xcc;return function(_0x59b7ba){if(_0x59b7ba){return _0x1b5175[_0xe737('0x27')](_0x5c8794);}return _0x1b5175[_0xe737('0x28')](_0x5c8794)[_0xe737('0x29')]();};}function respondWithResult(_0x4984f7,_0x49650c){_0x49650c=_0x49650c||0xc8;return function(_0x2624a4){if(_0x2624a4){return _0x4984f7[_0xe737('0x28')](_0x49650c)[_0xe737('0x2a')](_0x2624a4);}};}function respondWithFilteredResult(_0x525763,_0x871c5e){return function(_0x3ad39c){if(_0x3ad39c){var _0x228de2=_0x3ad39c['count'],_0x3f2765=_0x871c5e['offset'],_0x35c4fa=_0x871c5e[_0xe737('0x2b')]+_0x871c5e[_0xe737('0x2c')],_0x1eb619;if(_0x35c4fa>=_0x228de2){_0x35c4fa=_0x228de2;_0x1eb619=0xc8;}else{_0x1eb619=0xce;}_0x525763[_0xe737('0x28')](_0x1eb619);return _0x525763[_0xe737('0x2d')]('Content-Range',_0x3f2765+'-'+_0x35c4fa+'/'+_0x228de2)[_0xe737('0x2a')](_0x3ad39c);}return null;};}function patchUpdates(_0x43ec14){return function(_0x4a2ed9){try{jsonpatch['apply'](_0x4a2ed9,_0x43ec14,!![]);}catch(_0x389e0f){return BPromise[_0xe737('0x2e')](_0x389e0f);}return _0x4a2ed9[_0xe737('0x2f')]();};}function saveUpdates(_0x1edbec,_0x454db6){return function(_0x440f0c){if(_0x440f0c){return _0x440f0c[_0xe737('0x30')](_0x1edbec)[_0xe737('0x31')](function(_0x410f74){return _0x410f74;});}return null;};}function removeEntity(_0x58397a,_0x116097){return function(_0x3e496c){if(_0x3e496c){return _0x3e496c[_0xe737('0x32')]()[_0xe737('0x31')](function(){_0x58397a[_0xe737('0x28')](0xcc)[_0xe737('0x29')]();});}};}function handleEntityNotFound(_0x2be926,_0x4b871d){return function(_0x181540){if(!_0x181540){_0x2be926[_0xe737('0x27')](0x194);}return _0x181540;};}function handleError(_0x365e89,_0x4b08af){_0x4b08af=_0x4b08af||0x1f4;return function(_0x1a0444){logger['error'](_0x1a0444[_0xe737('0x33')]);if(_0x1a0444[_0xe737('0x34')]){delete _0x1a0444['name'];}_0x365e89['status'](_0x4b08af)[_0xe737('0x35')](_0x1a0444);};}exports['index']=function(_0x10400f,_0x5654aa){var _0x32fb34={},_0x3c5b1b={},_0x1c1a98={'count':0x0,'rows':[]};var _0x41fd84=db[_0xe737('0x36')]['rawAttributes'];_0x3c5b1b[_0xe737('0x37')]=_[_0xe737('0x38')](_0x41fd84);_0x3c5b1b[_0xe737('0x39')]=_[_0xe737('0x38')](_0x10400f[_0xe737('0x39')]);_0x3c5b1b[_0xe737('0x3a')]=_[_0xe737('0x3b')](_0x3c5b1b[_0xe737('0x37')],_0x3c5b1b['query']);_0x32fb34[_0xe737('0x3c')]=_[_0xe737('0x3b')](_0x3c5b1b[_0xe737('0x37')],qs['fields'](_0x10400f[_0xe737('0x39')][_0xe737('0x3d')]));_0x32fb34[_0xe737('0x3c')]=_0x32fb34[_0xe737('0x3c')]['length']?_0x32fb34[_0xe737('0x3c')]:_0x3c5b1b[_0xe737('0x37')];if(!_0x10400f['query'][_0xe737('0x3e')](_0xe737('0x3f'))){_0x32fb34[_0xe737('0x2c')]=qs[_0xe737('0x2c')](_0x10400f[_0xe737('0x39')][_0xe737('0x2c')]);_0x32fb34[_0xe737('0x2b')]=qs['offset'](_0x10400f[_0xe737('0x39')]['offset']);}_0x32fb34[_0xe737('0x40')]=qs[_0xe737('0x41')](_0x10400f[_0xe737('0x39')][_0xe737('0x41')]);_0x32fb34['where']=qs[_0xe737('0x3a')](_[_0xe737('0x42')](_0x10400f[_0xe737('0x39')],_0x3c5b1b[_0xe737('0x3a')]));if(_0x10400f[_0xe737('0x39')]['filter']){_0x32fb34['where']=_[_0xe737('0x43')](_0x32fb34[_0xe737('0x44')],{'$or':_[_0xe737('0x45')](_0x41fd84,function(_0xd76588){if(_0xd76588[_0xe737('0x46')]['key']!=='VIRTUAL'){var _0x4461cb={};_0x4461cb[_0xd76588[_0xe737('0x47')]]={'$like':'%'+_0x10400f[_0xe737('0x39')][_0xe737('0x48')]+'%'};return _0x4461cb;}})});}_0x32fb34=_['merge']({},_0x32fb34,_0x10400f['options']);var _0xd8622f={'where':_0x32fb34[_0xe737('0x44')]};return db[_0xe737('0x36')][_0xe737('0x49')](_0xd8622f)[_0xe737('0x31')](function(_0x50c981){_0x1c1a98[_0xe737('0x49')]=_0x50c981;if(_0x10400f[_0xe737('0x39')][_0xe737('0x4a')]){_0x32fb34[_0xe737('0x4b')]=[{'all':!![]}];}return db[_0xe737('0x36')][_0xe737('0x4c')](_0x32fb34);})[_0xe737('0x31')](function(_0x2f6c38){_0x1c1a98[_0xe737('0x4d')]=_0x2f6c38;return _0x1c1a98;})[_0xe737('0x31')](respondWithFilteredResult(_0x5654aa,_0x32fb34))[_0xe737('0x26')](handleError(_0x5654aa,null));};exports[_0xe737('0x4e')]=function(_0x9b0c04,_0xa466b){var _0x11ee9b={'raw':![],'where':{'id':_0x9b0c04[_0xe737('0x4f')]['id']}},_0x168c6e={};_0x168c6e[_0xe737('0x37')]=_['keys'](db['ServicenowAccount'][_0xe737('0x50')]);_0x168c6e['query']=_[_0xe737('0x38')](_0x9b0c04[_0xe737('0x39')]);_0x168c6e[_0xe737('0x3a')]=_['intersection'](_0x168c6e[_0xe737('0x37')],_0x168c6e[_0xe737('0x39')]);_0x11ee9b[_0xe737('0x3c')]=_[_0xe737('0x3b')](_0x168c6e[_0xe737('0x37')],qs['fields'](_0x9b0c04[_0xe737('0x39')]['fields']));_0x11ee9b[_0xe737('0x3c')]=_0x11ee9b['attributes'][_0xe737('0x51')]?_0x11ee9b['attributes']:_0x168c6e[_0xe737('0x37')];if(_0x9b0c04[_0xe737('0x39')][_0xe737('0x4a')]){_0x11ee9b[_0xe737('0x4b')]=[{'all':!![]}];}_0x11ee9b=_[_0xe737('0x43')]({},_0x11ee9b,_0x9b0c04['options']);return db[_0xe737('0x36')][_0xe737('0x52')](_0x11ee9b)[_0xe737('0x31')](handleEntityNotFound(_0xa466b,null))[_0xe737('0x31')](respondWithResult(_0xa466b,null))[_0xe737('0x26')](handleError(_0xa466b,null));};exports[_0xe737('0x53')]=function(_0x5d0880,_0x935d43){return db[_0xe737('0x36')]['create'](_0x5d0880[_0xe737('0x54')],{})[_0xe737('0x31')](respondWithResult(_0x935d43,0xc9))['catch'](handleError(_0x935d43,null));};exports[_0xe737('0x30')]=function(_0x285680,_0x488008){if(_0x285680[_0xe737('0x54')]['id']){delete _0x285680[_0xe737('0x54')]['id'];}return db[_0xe737('0x36')][_0xe737('0x52')]({'where':{'id':_0x285680['params']['id']}})[_0xe737('0x31')](handleEntityNotFound(_0x488008,null))[_0xe737('0x31')](saveUpdates(_0x285680[_0xe737('0x54')],null))[_0xe737('0x31')](respondWithResult(_0x488008,null))[_0xe737('0x26')](handleError(_0x488008,null));};exports['destroy']=function(_0x526470,_0x3c8114){return db[_0xe737('0x36')]['find']({'where':{'id':_0x526470[_0xe737('0x4f')]['id']}})[_0xe737('0x31')](handleEntityNotFound(_0x3c8114,null))[_0xe737('0x31')](removeEntity(_0x3c8114,null))[_0xe737('0x26')](handleError(_0x3c8114,null));};exports[_0xe737('0x55')]=function(_0x579f21,_0x2e9311,_0x55a7ce){var _0x1532ad={};var _0x2b8c52={};var _0x49de1d;var _0x2489b1;return db[_0xe737('0x36')][_0xe737('0x56')]({'where':{'id':_0x579f21['params']['id']}})[_0xe737('0x31')](handleEntityNotFound(_0x2e9311,null))['then'](function(_0x3b61fc){if(_0x3b61fc){_0x49de1d=_0x3b61fc;_0x2b8c52['model']=_[_0xe737('0x38')](db['ServicenowConfiguration'][_0xe737('0x50')]);_0x2b8c52[_0xe737('0x39')]=_[_0xe737('0x38')](_0x579f21[_0xe737('0x39')]);_0x2b8c52[_0xe737('0x3a')]=_[_0xe737('0x3b')](_0x2b8c52[_0xe737('0x37')],_0x2b8c52['query']);_0x1532ad[_0xe737('0x3c')]=_[_0xe737('0x3b')](_0x2b8c52['model'],qs['fields'](_0x579f21[_0xe737('0x39')][_0xe737('0x3d')]));_0x1532ad['attributes']=_0x1532ad[_0xe737('0x3c')]['length']?_0x1532ad['attributes']:_0x2b8c52[_0xe737('0x37')];_0x1532ad[_0xe737('0x40')]=qs['sort'](_0x579f21[_0xe737('0x39')][_0xe737('0x41')]);_0x1532ad[_0xe737('0x44')]=qs[_0xe737('0x3a')](_['pick'](_0x579f21[_0xe737('0x39')],_0x2b8c52[_0xe737('0x3a')]));if(_0x579f21[_0xe737('0x39')][_0xe737('0x48')]){_0x1532ad['where']=_[_0xe737('0x43')](_0x1532ad[_0xe737('0x44')],{'$or':_['map'](_0x1532ad[_0xe737('0x3c')],function(_0x3211d6){var _0x2dc2de={};_0x2dc2de[_0x3211d6]={'$like':'%'+_0x579f21['query'][_0xe737('0x48')]+'%'};return _0x2dc2de;})});}_0x1532ad=_[_0xe737('0x43')]({},_0x1532ad,_0x579f21[_0xe737('0x57')]);return _0x49de1d[_0xe737('0x55')](_0x1532ad);}})[_0xe737('0x31')](function(_0x26a3a8){if(_0x26a3a8){_0x2489b1=_0x26a3a8['length'];if(!_0x579f21['query']['hasOwnProperty']('nolimit')){_0x1532ad[_0xe737('0x2c')]=qs[_0xe737('0x2c')](_0x579f21[_0xe737('0x39')][_0xe737('0x2c')]);_0x1532ad[_0xe737('0x2b')]=qs[_0xe737('0x2b')](_0x579f21[_0xe737('0x39')][_0xe737('0x2b')]);}return _0x49de1d[_0xe737('0x55')](_0x1532ad);}})[_0xe737('0x31')](function(_0x395f80){if(_0x395f80){return _0x395f80?{'count':_0x2489b1,'rows':_0x395f80}:null;}})[_0xe737('0x31')](respondWithResult(_0x2e9311,null))[_0xe737('0x26')](handleError(_0x2e9311,null));};exports[_0xe737('0x58')]=function(_0xd8e69f,_0x1e64b7,_0x5e0e4e){if(_0xd8e69f[_0xe737('0x54')]['id']){delete _0xd8e69f[_0xe737('0x54')]['id'];}return db['ServicenowAccount'][_0xe737('0x56')]({'where':{'id':_0xd8e69f['params']['id']}})[_0xe737('0x31')](handleEntityNotFound(_0x1e64b7,null))[_0xe737('0x31')](function(_0x163db8){if(_0x163db8){_0xd8e69f[_0xe737('0x54')][_0xe737('0x59')]=_0x163db8['id'];_0xd8e69f[_0xe737('0x54')]['Subjects']=integrations[_0xe737('0x5a')](_0xd8e69f[_0xe737('0x54')][_0xe737('0x5b')],_0xd8e69f[_0xe737('0x54')][_0xe737('0x46')]);_0xd8e69f[_0xe737('0x54')][_0xe737('0x5c')]=integrations[_0xe737('0x5d')](_0xd8e69f[_0xe737('0x54')][_0xe737('0x5b')],_0xd8e69f[_0xe737('0x54')][_0xe737('0x46')]);return db['ServicenowConfiguration']['create'](_0xd8e69f[_0xe737('0x54')],{'include':[{'model':db[_0xe737('0x5e')],'as':_0xe737('0x5f')},{'model':db[_0xe737('0x5e')],'as':_0xe737('0x5c')}]});}return null;})[_0xe737('0x31')](respondWithResult(_0x1e64b7,null))[_0xe737('0x26')](handleError(_0x1e64b7,null));};exports[_0xe737('0x60')]=function(_0x3533a5,_0x41ec65,_0x3657e1){var _0x1e35a0=[_0xe737('0x61'),_0xe737('0x62'),'knowledge',_0xe737('0x63'),'close_code',_0xe737('0x64'),_0xe737('0x65'),_0xe737('0x66'),_0xe737('0x67')];var _0x2dcebb=[_0xe737('0x68'),_0xe737('0x61'),_0xe737('0x69'),_0xe737('0x6a'),_0xe737('0x6b'),_0xe737('0x6c'),_0xe737('0x6d'),'hold_reason',_0xe737('0x6e'),'number',_0xe737('0x6f'),_0xe737('0x70'),_0xe737('0x71'),_0xe737('0x72'),'sys_created_on',_0xe737('0x73'),_0xe737('0x74'),_0xe737('0x75'),'knowledge',_0xe737('0x40'),_0xe737('0x76'),_0xe737('0x77'),'cmdb_ci',_0xe737('0x78'),'impact',_0xe737('0x79'),'work_notes_list',_0xe737('0x7a'),_0xe737('0x7b'),_0xe737('0x7c'),_0xe737('0x7d'),'time_worked',_0xe737('0x7e'),'opened_at',_0xe737('0x7f'),_0xe737('0x80'),'work_end',_0xe737('0x81'),_0xe737('0x82'),_0xe737('0x83'),_0xe737('0x84'),_0xe737('0x63'),_0xe737('0x85'),_0xe737('0x86'),'close_code','correlation_display',_0xe737('0x87'),_0xe737('0x88'),_0xe737('0x89'),'business_stc',_0xe737('0x8a'),_0xe737('0x8b'),_0xe737('0x8c'),'notify','sys_class_name','close_notes',_0xe737('0x8d'),_0xe737('0x8e'),_0xe737('0x8f'),_0xe737('0x90'),_0xe737('0x91'),_0xe737('0x92'),_0xe737('0x65'),'urgency','problem_id',_0xe737('0x93'),_0xe737('0x94'),'activity_due',_0xe737('0x95'),_0xe737('0x66'),_0xe737('0x96'),_0xe737('0x97'),_0xe737('0x98'),'comments_and_work_notes',_0xe737('0x99'),'sys_mod_count',_0xe737('0x9a'),_0xe737('0x9b'),_0xe737('0x9c'),_0xe737('0x9d'),'correlation_id','location',_0xe737('0x67')];var _0x50b714='';var _0x3f2fd1='';var _0x3a5c54=[];var _0x359f2d='';var _0x76de4d='';var _0x3d61ed=[];var _0x4758be='';var _0x302218='';var _0x10c13a={};var _0x335deb='';return db['ServicenowAccount'][_0xe737('0x56')]({'where':{'id':_0x3533a5[_0xe737('0x4f')]['id']},'attributes':['id',_0xe737('0x9e'),_0xe737('0x9f'),_0xe737('0xa0'),_0xe737('0xa1'),_0xe737('0xa2')]})[_0xe737('0x31')](handleEntityNotFound(_0x41ec65,null))[_0xe737('0x31')](function(_0x3ae6d4){if(_0x3ae6d4){_0x335deb=_0x3ae6d4['remoteUri'];var _0x2c573b=_0x335deb['slice'](-0x1);if(_0x2c573b==='/'){_0x335deb=_0x335deb['substring'](0x0,_0x335deb['lastIndexOf'](_0x2c573b));}_0x302218=util[_0xe737('0xa3')](_0xe737('0xa4'),_0x335deb);_0x4758be=util['format'](_0xe737('0xa5'),_0x335deb);_0x10c13a={'user':_0x3ae6d4[_0xe737('0x9e')],'pass':_0x3ae6d4[_0xe737('0x9f')]};var _0x36f526={'method':_0xe737('0xa6'),'uri':_0x302218+_0xe737('0xa7'),'auth':_0x10c13a,'json':!![]};return rp(_0x36f526);}})[_0xe737('0x31')](function(_0x4d13ef){if(_0x4d13ef[_0xe737('0x25')]['length']>0x0){_0x50b714=_0x4d13ef[_0xe737('0x25')];}console[_0xe737('0xa8')](_0xe737('0xa9'),_0x50b714);_0x3d61ed=[];_0x3f2fd1=Object['assign']([],_0x50b714);_[_0xe737('0xaa')](_0x3f2fd1,function(_0xc7ffcb){return!_0x1e35a0['includes'](_0xc7ffcb[_0xe737('0x34')]);});_0x3f2fd1['forEach'](function(_0x227ffa){var _0x49a44e=createFieldObject(_0x4758be,_0x10c13a,_0x227ffa[_0xe737('0xab')],_0x227ffa['name'],_0x227ffa[_0xe737('0xac')],![]);_0x3d61ed[_0xe737('0xad')](_0x49a44e);});return Promise[_0xe737('0xae')](_0x3d61ed);})[_0xe737('0x31')](function(_0x327dae){_0x3a5c54=_0x327dae;_0x359f2d=Object[_0xe737('0xaf')]([],_0x50b714);console[_0xe737('0xa8')](_0xe737('0xb0'),_0x50b714);_['remove'](_0x359f2d,function(_0x4d4c03){return _0x2dcebb[_0xe737('0xb1')](_0x4d4c03[_0xe737('0x34')]);});console[_0xe737('0xa8')](_0xe737('0xb2'),_0x359f2d);_0x3d61ed=[];_0x359f2d[_0xe737('0xb3')](function(_0x495302){var _0x510eb1=createFieldObject(_0x4758be,_0x10c13a,_0x495302['internalType'],_0x495302['name'],_0x495302[_0xe737('0xac')],!![]);_0x3d61ed[_0xe737('0xad')](_0x510eb1);});return Promise[_0xe737('0xae')](_0x3d61ed);})[_0xe737('0x31')](function(_0x206951){_0x76de4d=_0x206951;var _0x4e8ad4=_0x3a5c54[_0xe737('0xb4')](_0x76de4d);return{'count':_0x4e8ad4['length'],'rows':_0x4e8ad4};})[_0xe737('0x31')](respondWithResult(_0x41ec65,null))[_0xe737('0x26')](function(_0x359767){console[_0xe737('0xa8')]('ServiceNow\x20error:\x20'+_0x359767);var _0x23b1bb=_0x3533a5[_0xe737('0x39')][_0xe737('0x1a')]?0x1f4:_0x359767['statusCode']||0x1f4;logger['error'](_0x359767['stack']);delete _0x359767[_0xe737('0x34')];if(_0x23b1bb===0x191){_0x23b1bb=0x190;}_0x41ec65['status'](_0x23b1bb)[_0xe737('0x35')](_0x3533a5[_0xe737('0x39')][_0xe737('0x1a')]?{'message':_0xe737('0xb5'),'statusCode':_0x359767[_0xe737('0xb6')]}:_0x359767);});};function createFieldObject(_0x2ad42c,_0x20c255,_0x52067a,_0x15b7f6,_0x696964,_0x3dc7d8){return new Promise(function(_0x45166c,_0x55b87a){var _0x441894={'id':_0x15b7f6,'name':_0x696964,'custom':_0x3dc7d8};if(_0x52067a===_0xe737('0xb7')){_0x441894['options']=[{'name':_0xe737('0xb8'),'value':'true'},{'name':_0xe737('0xb9'),'value':_0xe737('0xba')}];_0x45166c(_0x441894);}else{var _0x4158d6={'method':_0xe737('0xa6'),'uri':_0x2ad42c+_0xe737('0xbb')+_0x15b7f6,'auth':_0x20c255,'json':!![]};return rp(_0x4158d6)['then'](function(_0x2df94b){var _0x13a943=[];if(_0x2df94b[_0xe737('0x25')][_0xe737('0x51')]>0x0){_0x2df94b[_0xe737('0x25')]['forEach'](function(_0x5636dc){if(_0x5636dc[_0xe737('0xbc')]===_0xe737('0xba')){var _0x45cb09={'name':_0x5636dc['label'],'value':_0x5636dc[_0xe737('0xbd')]};_0x13a943[_0xe737('0xad')](_0x45cb09);}});}_0x441894[_0xe737('0x57')]=_0x13a943;if(_0x441894[_0xe737('0x57')]['length']>0x0){_0x45166c(_0x441894);}else{if(_0x3dc7d8==![]){_0x45166c();}else{_0x45166c(_0x441894);}}});}});}
\ No newline at end of file
index bb5484f..a868f87 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['../../config/logger','moment','bluebird','path','rimraf','../../config/environment','./intServicenowAccount.attributes','../../components/integrations/configuration','define','ServicenowAccount','lodash','util'];(function(_0x4dc7b9,_0x319d5a){var _0x3ab114=function(_0x51a9df){while(--_0x51a9df){_0x4dc7b9['push'](_0x4dc7b9['shift']());}};_0x3ab114(++_0x319d5a);}(_0x7a54,0x106));var _0x47a5=function(_0x2110bf,_0x284342){_0x2110bf=_0x2110bf-0x0;var _0x4b5032=_0x7a54[_0x2110bf];return _0x4b5032;};'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'));var integrations=require(_0x47a5('0x9'));module['exports']=function(_0x3d5629,_0x59199c){return _0x3d5629[_0x47a5('0xa')](_0x47a5('0xb'),attributes,{'tableName':'int_servicenow_accounts','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(_0x3908ad,_0x2bec1c){var _0x1d83cc=function(_0x4c09c0){while(--_0x4c09c0){_0x3908ad['push'](_0x3908ad['shift']());}};_0x1d83cc(++_0x2bec1c);}(_0x814b,0x1a2));var _0xb814=function(_0x4c9316,_0x5c7f6f){_0x4c9316=_0x4c9316-0x0;var _0x146aad=_0x814b[_0x4c9316];return _0x146aad;};'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 83f1d11..b585eed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5256=['then','info','ServicenowAccount,\x20%s,\x20%s','debug','ServicenowAccount,\x20%s,\x20%s,\x20%s','error','message','request\x20sent','result','catch','GetServicenowAccount','findAll','options','attributes','limit','model','include','map','stringify','ShowServicenowAccount','ServicenowAccount','raw','where','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','request'];(function(_0x1aa981,_0x45eb1a){var _0x332fd6=function(_0x4f155c){while(--_0x4f155c){_0x1aa981['push'](_0x1aa981['shift']());}};_0x332fd6(++_0x45eb1a);}(_0x5256,0x152));var _0x6525=function(_0x422905,_0x3bce3a){_0x422905=_0x422905-0x0;var _0x33dc6c=_0x5256[_0x422905];return _0x33dc6c;};'use strict';var _=require(_0x6525('0x0'));var util=require(_0x6525('0x1'));var moment=require(_0x6525('0x2'));var BPromise=require('bluebird');var rs=require(_0x6525('0x3'));var fs=require('fs');var Redis=require(_0x6525('0x4'));var db=require(_0x6525('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x6525('0x6'))(_0x6525('0x7'));var config=require(_0x6525('0x8'));var jayson=require(_0x6525('0x9'));var client=jayson['client'][_0x6525('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x9f245f,_0x3c402a,_0x3013bf){return new BPromise(function(_0x3a4561,_0x477b20){return client[_0x6525('0xb')](_0x9f245f,_0x3013bf)[_0x6525('0xc')](function(_0x4d9473){logger[_0x6525('0xd')](_0x6525('0xe'),_0x3c402a,'request\x20sent');logger[_0x6525('0xf')](_0x6525('0x10'),_0x3c402a,'request\x20sent',JSON['stringify'](_0x4d9473));if(_0x4d9473[_0x6525('0x11')]){if(_0x4d9473[_0x6525('0x11')]['code']===0x1f4){logger[_0x6525('0x11')](_0x6525('0xe'),_0x3c402a,_0x4d9473['error']['message']);return _0x477b20(_0x4d9473['error'][_0x6525('0x12')]);}logger[_0x6525('0x11')]('ServicenowAccount,\x20%s,\x20%s',_0x3c402a,_0x4d9473['error'][_0x6525('0x12')]);return _0x3a4561(_0x4d9473[_0x6525('0x11')][_0x6525('0x12')]);}else{logger['info'](_0x6525('0xe'),_0x3c402a,_0x6525('0x13'));_0x3a4561(_0x4d9473[_0x6525('0x14')][_0x6525('0x12')]);}})[_0x6525('0x15')](function(_0x54efd0){logger['error'](_0x6525('0xe'),_0x3c402a,_0x54efd0);_0x477b20(_0x54efd0);});});}exports[_0x6525('0x16')]=function(_0x463b3b){var _0x24a24e=this;return new Promise(function(_0x3a1af1,_0x355e07){return db['ServicenowAccount'][_0x6525('0x17')]({'raw':_0x463b3b[_0x6525('0x18')]?_0x463b3b[_0x6525('0x18')]['raw']===undefined?!![]:![]:!![],'where':_0x463b3b[_0x6525('0x18')]?_0x463b3b[_0x6525('0x18')]['where']||null:null,'attributes':_0x463b3b['options']?_0x463b3b['options'][_0x6525('0x19')]||null:null,'limit':_0x463b3b[_0x6525('0x18')]?_0x463b3b['options'][_0x6525('0x1a')]||null:null,'include':_0x463b3b[_0x6525('0x18')]?_0x463b3b[_0x6525('0x18')]['include']?_['map'](_0x463b3b['options']['include'],function(_0x342206){return{'model':db[_0x342206[_0x6525('0x1b')]],'as':_0x342206['as'],'attributes':_0x342206[_0x6525('0x19')],'include':_0x342206[_0x6525('0x1c')]?_['map'](_0x342206[_0x6525('0x1c')],function(_0x5d5738){return{'model':db[_0x5d5738['model']],'as':_0x5d5738['as'],'attributes':_0x5d5738[_0x6525('0x19')],'include':_0x5d5738['include']?_[_0x6525('0x1d')](_0x5d5738[_0x6525('0x1c')],function(_0x292923){return{'model':db[_0x292923[_0x6525('0x1b')]],'as':_0x292923['as'],'attributes':_0x292923[_0x6525('0x19')]};}):[]};}):[]};}):[]:[]})[_0x6525('0xc')](function(_0x2e8270){logger[_0x6525('0xd')](_0x6525('0x16'),_0x463b3b);logger['debug']('GetServicenowAccount',_0x463b3b,JSON[_0x6525('0x1e')](_0x2e8270));_0x3a1af1(_0x2e8270);})[_0x6525('0x15')](function(_0xeb459d){logger['error'](_0x6525('0x16'),_0xeb459d[_0x6525('0x12')],_0x463b3b);_0x355e07(_0x24a24e[_0x6525('0x11')](0x1f4,_0xeb459d['message']));});});};exports[_0x6525('0x1f')]=function(_0x5c3ad1){var _0x442963=this;return new Promise(function(_0x35a58c,_0x1c3a56){return db[_0x6525('0x20')]['find']({'raw':_0x5c3ad1['options']?_0x5c3ad1[_0x6525('0x18')][_0x6525('0x21')]===undefined?!![]:![]:!![],'where':_0x5c3ad1[_0x6525('0x18')]?_0x5c3ad1[_0x6525('0x18')][_0x6525('0x22')]||null:null,'attributes':_0x5c3ad1[_0x6525('0x18')]?_0x5c3ad1[_0x6525('0x18')][_0x6525('0x19')]||null:null,'include':_0x5c3ad1[_0x6525('0x18')]?_0x5c3ad1[_0x6525('0x18')]['include']?_['map'](_0x5c3ad1[_0x6525('0x18')][_0x6525('0x1c')],function(_0xe8b3ab){return{'model':db[_0xe8b3ab[_0x6525('0x1b')]],'as':_0xe8b3ab['as'],'attributes':_0xe8b3ab[_0x6525('0x19')],'include':_0xe8b3ab[_0x6525('0x1c')]?_['map'](_0xe8b3ab[_0x6525('0x1c')],function(_0x5dd1b7){return{'model':db[_0x5dd1b7['model']],'as':_0x5dd1b7['as'],'attributes':_0x5dd1b7[_0x6525('0x19')],'include':_0x5dd1b7[_0x6525('0x1c')]?_[_0x6525('0x1d')](_0x5dd1b7[_0x6525('0x1c')],function(_0x4d7254){return{'model':db[_0x4d7254[_0x6525('0x1b')]],'as':_0x4d7254['as'],'attributes':_0x4d7254[_0x6525('0x19')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x508fc9){logger[_0x6525('0xd')](_0x6525('0x1f'),_0x5c3ad1);logger[_0x6525('0xf')](_0x6525('0x1f'),_0x5c3ad1,JSON[_0x6525('0x1e')](_0x508fc9));_0x35a58c(_0x508fc9);})['catch'](function(_0x3f3da9){logger[_0x6525('0x11')]('ShowServicenowAccount',_0x3f3da9[_0x6525('0x12')],_0x5c3ad1);_0x1c3a56(_0x442963['error'](0x1f4,_0x3f3da9[_0x6525('0x12')]));});});};
\ No newline at end of file
+var _0x899e=['map','model','then','find','ShowServicenowAccount','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','debug','ServicenowAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','ServicenowAccount,\x20%s,\x20%s','message','result','catch','GetServicenowAccount','ServicenowAccount','findAll','options','raw','include','attributes'];(function(_0x57486e,_0x32283b){var _0x5f110b=function(_0xa18fc3){while(--_0xa18fc3){_0x57486e['push'](_0x57486e['shift']());}};_0x5f110b(++_0x32283b);}(_0x899e,0xfa));var _0xe899=function(_0x1b095d,_0x165325){_0x1b095d=_0x1b095d-0x0;var _0x3b3480=_0x899e[_0x1b095d];return _0x3b3480;};'use strict';var _=require('lodash');var util=require(_0xe899('0x0'));var moment=require(_0xe899('0x1'));var BPromise=require(_0xe899('0x2'));var rs=require(_0xe899('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xe899('0x4'))['db'];var utils=require(_0xe899('0x5'));var logger=require(_0xe899('0x6'))(_0xe899('0x7'));var config=require(_0xe899('0x8'));var jayson=require(_0xe899('0x9'));var client=jayson[_0xe899('0xa')][_0xe899('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x3c5e51,_0x285c3f,_0x34557b){return new BPromise(function(_0x32abbe,_0x2af072){return client[_0xe899('0xc')](_0x3c5e51,_0x34557b)['then'](function(_0x25117d){logger[_0xe899('0xd')]('ServicenowAccount,\x20%s,\x20%s',_0x285c3f,'request\x20sent');logger[_0xe899('0xe')](_0xe899('0xf'),_0x285c3f,_0xe899('0x10'),JSON[_0xe899('0x11')](_0x25117d));if(_0x25117d[_0xe899('0x12')]){if(_0x25117d[_0xe899('0x12')]['code']===0x1f4){logger[_0xe899('0x12')](_0xe899('0x13'),_0x285c3f,_0x25117d[_0xe899('0x12')][_0xe899('0x14')]);return _0x2af072(_0x25117d['error'][_0xe899('0x14')]);}logger['error']('ServicenowAccount,\x20%s,\x20%s',_0x285c3f,_0x25117d[_0xe899('0x12')][_0xe899('0x14')]);return _0x32abbe(_0x25117d['error'][_0xe899('0x14')]);}else{logger[_0xe899('0xd')](_0xe899('0x13'),_0x285c3f,_0xe899('0x10'));_0x32abbe(_0x25117d[_0xe899('0x15')][_0xe899('0x14')]);}})[_0xe899('0x16')](function(_0x111c27){logger[_0xe899('0x12')](_0xe899('0x13'),_0x285c3f,_0x111c27);_0x2af072(_0x111c27);});});}exports[_0xe899('0x17')]=function(_0x4c73f0){var _0x8c9d28=this;return new Promise(function(_0x72a127,_0x4ddb14){return db[_0xe899('0x18')][_0xe899('0x19')]({'raw':_0x4c73f0[_0xe899('0x1a')]?_0x4c73f0[_0xe899('0x1a')][_0xe899('0x1b')]===undefined?!![]:![]:!![],'where':_0x4c73f0[_0xe899('0x1a')]?_0x4c73f0[_0xe899('0x1a')]['where']||null:null,'attributes':_0x4c73f0[_0xe899('0x1a')]?_0x4c73f0[_0xe899('0x1a')]['attributes']||null:null,'limit':_0x4c73f0['options']?_0x4c73f0[_0xe899('0x1a')]['limit']||null:null,'include':_0x4c73f0[_0xe899('0x1a')]?_0x4c73f0[_0xe899('0x1a')][_0xe899('0x1c')]?_['map'](_0x4c73f0['options'][_0xe899('0x1c')],function(_0x522471){return{'model':db[_0x522471['model']],'as':_0x522471['as'],'attributes':_0x522471[_0xe899('0x1d')],'include':_0x522471[_0xe899('0x1c')]?_[_0xe899('0x1e')](_0x522471['include'],function(_0x3e5138){return{'model':db[_0x3e5138[_0xe899('0x1f')]],'as':_0x3e5138['as'],'attributes':_0x3e5138['attributes'],'include':_0x3e5138['include']?_[_0xe899('0x1e')](_0x3e5138[_0xe899('0x1c')],function(_0x16e7b1){return{'model':db[_0x16e7b1[_0xe899('0x1f')]],'as':_0x16e7b1['as'],'attributes':_0x16e7b1[_0xe899('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xe899('0x20')](function(_0x3f1286){logger['info']('GetServicenowAccount',_0x4c73f0);logger[_0xe899('0xe')](_0xe899('0x17'),_0x4c73f0,JSON[_0xe899('0x11')](_0x3f1286));_0x72a127(_0x3f1286);})['catch'](function(_0x1f18ed){logger[_0xe899('0x12')](_0xe899('0x17'),_0x1f18ed[_0xe899('0x14')],_0x4c73f0);_0x4ddb14(_0x8c9d28['error'](0x1f4,_0x1f18ed[_0xe899('0x14')]));});});};exports['ShowServicenowAccount']=function(_0x49f512){var _0x2429bc=this;return new Promise(function(_0x3b1c57,_0x501942){return db[_0xe899('0x18')][_0xe899('0x21')]({'raw':_0x49f512['options']?_0x49f512[_0xe899('0x1a')][_0xe899('0x1b')]===undefined?!![]:![]:!![],'where':_0x49f512[_0xe899('0x1a')]?_0x49f512[_0xe899('0x1a')]['where']||null:null,'attributes':_0x49f512[_0xe899('0x1a')]?_0x49f512[_0xe899('0x1a')][_0xe899('0x1d')]||null:null,'include':_0x49f512[_0xe899('0x1a')]?_0x49f512[_0xe899('0x1a')][_0xe899('0x1c')]?_[_0xe899('0x1e')](_0x49f512['options'][_0xe899('0x1c')],function(_0x26a25a){return{'model':db[_0x26a25a[_0xe899('0x1f')]],'as':_0x26a25a['as'],'attributes':_0x26a25a[_0xe899('0x1d')],'include':_0x26a25a['include']?_[_0xe899('0x1e')](_0x26a25a['include'],function(_0x311f3a){return{'model':db[_0x311f3a[_0xe899('0x1f')]],'as':_0x311f3a['as'],'attributes':_0x311f3a['attributes'],'include':_0x311f3a[_0xe899('0x1c')]?_[_0xe899('0x1e')](_0x311f3a[_0xe899('0x1c')],function(_0x42dd6f){return{'model':db[_0x42dd6f[_0xe899('0x1f')]],'as':_0x42dd6f['as'],'attributes':_0x42dd6f['attributes']};}):[]};}):[]};}):[]:[]})[_0xe899('0x20')](function(_0xe7310b){logger[_0xe899('0xd')](_0xe899('0x22'),_0x49f512);logger[_0xe899('0xe')](_0xe899('0x22'),_0x49f512,JSON[_0xe899('0x11')](_0xe7310b));_0x3b1c57(_0xe7310b);})[_0xe899('0x16')](function(_0x129b7a){logger[_0xe899('0x12')](_0xe899('0x22'),_0x129b7a['message'],_0x49f512);_0x501942(_0x2429bc[_0xe899('0x12')](0x1f4,_0x129b7a[_0xe899('0x14')]));});});};
\ No newline at end of file
index 9b234e0..cfcb283 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf668=['./intServicenowConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','getDescriptions','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x56482c,_0x16118d){var _0x5aae7a=function(_0x52512f){while(--_0x52512f){_0x56482c['push'](_0x56482c['shift']());}};_0x5aae7a(++_0x16118d);}(_0xf668,0x156));var _0x8f66=function(_0x8f94b0,_0x4cde8d){_0x8f94b0=_0x8f94b0-0x0;var _0x2f1549=_0xf668[_0x8f94b0];return _0x2f1549;};'use strict';var multer=require(_0x8f66('0x0'));var util=require(_0x8f66('0x1'));var path=require(_0x8f66('0x2'));var timeout=require(_0x8f66('0x3'));var express=require(_0x8f66('0x4'));var router=express['Router']();var auth=require(_0x8f66('0x5'));var interaction=require(_0x8f66('0x6'));var config=require(_0x8f66('0x7'));var controller=require(_0x8f66('0x8'));router[_0x8f66('0x9')]('/',auth[_0x8f66('0xa')](),controller[_0x8f66('0xb')]);router[_0x8f66('0x9')](_0x8f66('0xc'),auth[_0x8f66('0xa')](),controller[_0x8f66('0xd')]);router[_0x8f66('0x9')](_0x8f66('0xe'),auth['isAuthenticated'](),controller[_0x8f66('0xf')]);router[_0x8f66('0x9')](_0x8f66('0x10'),auth['isAuthenticated'](),controller[_0x8f66('0x11')]);router[_0x8f66('0x9')]('/:id/descriptions',auth[_0x8f66('0xa')](),controller[_0x8f66('0x12')]);router['post']('/',auth[_0x8f66('0xa')](),controller[_0x8f66('0x13')]);router[_0x8f66('0x14')](_0x8f66('0xc'),auth[_0x8f66('0xa')](),controller[_0x8f66('0x15')]);router[_0x8f66('0x16')](_0x8f66('0xc'),auth[_0x8f66('0xa')](),controller[_0x8f66('0x17')]);module[_0x8f66('0x18')]=router;
\ No newline at end of file
+var _0x126e=['./intServicenowConfiguration.controller','get','isAuthenticated','index','/:id','show','getFields','post','put','update','destroy','exports','multer','util','connect-timeout','Router','../../components/interaction/service','../../config/environment'];(function(_0x49e614,_0x41b9f9){var _0x36013b=function(_0x440c04){while(--_0x440c04){_0x49e614['push'](_0x49e614['shift']());}};_0x36013b(++_0x41b9f9);}(_0x126e,0x1aa));var _0xe126=function(_0x160c73,_0x2ee678){_0x160c73=_0x160c73-0x0;var _0xd9302=_0x126e[_0x160c73];return _0xd9302;};'use strict';var multer=require(_0xe126('0x0'));var util=require(_0xe126('0x1'));var path=require('path');var timeout=require(_0xe126('0x2'));var express=require('express');var router=express[_0xe126('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xe126('0x4'));var config=require(_0xe126('0x5'));var controller=require(_0xe126('0x6'));router[_0xe126('0x7')]('/',auth[_0xe126('0x8')](),controller[_0xe126('0x9')]);router[_0xe126('0x7')](_0xe126('0xa'),auth[_0xe126('0x8')](),controller[_0xe126('0xb')]);router['get']('/:id/fields',auth['isAuthenticated'](),controller[_0xe126('0xc')]);router[_0xe126('0x7')]('/:id/subjects',auth[_0xe126('0x8')](),controller['getSubjects']);router[_0xe126('0x7')]('/:id/descriptions',auth[_0xe126('0x8')](),controller['getDescriptions']);router[_0xe126('0xd')]('/',auth[_0xe126('0x8')](),controller['create']);router[_0xe126('0xe')]('/:id',auth[_0xe126('0x8')](),controller[_0xe126('0xf')]);router['delete'](_0xe126('0xa'),auth[_0xe126('0x8')](),controller[_0xe126('0x10')]);module[_0xe126('0x11')]=router;
\ No newline at end of file
index 2ba3d82..423dfba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4922=['exports','STRING','sequelize'];(function(_0x5b3de9,_0xcb74aa){var _0x463bd9=function(_0x5476cb){while(--_0x5476cb){_0x5b3de9['push'](_0x5b3de9['shift']());}};_0x463bd9(++_0xcb74aa);}(_0x4922,0xce));var _0x2492=function(_0x57dfa5,_0x45802d){_0x57dfa5=_0x57dfa5-0x0;var _0x1779f1=_0x4922[_0x57dfa5];return _0x1779f1;};'use strict';var Sequelize=require(_0x2492('0x0'));module[_0x2492('0x1')]={'name':{'type':Sequelize[_0x2492('0x2')]},'description':{'type':Sequelize[_0x2492('0x2')]}};
\ No newline at end of file
+var _0x080d=['sequelize','exports','STRING'];(function(_0x2a8428,_0x56957e){var _0x360661=function(_0x5b5941){while(--_0x5b5941){_0x2a8428['push'](_0x2a8428['shift']());}};_0x360661(++_0x56957e);}(_0x080d,0x16b));var _0xd080=function(_0x491faa,_0x4f2907){_0x491faa=_0x491faa-0x0;var _0x414440=_0x080d[_0x491faa];return _0x414440;};'use strict';var Sequelize=require(_0xd080('0x0'));module[_0xd080('0x1')]={'name':{'type':Sequelize[_0xd080('0x2')]},'description':{'type':Sequelize[_0xd080('0x2')]}};
\ No newline at end of file
index 0d21199..9681545 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9446=['create','body','find','getFields','findOne','ServicenowField','pick','getDescriptions','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','lodash','crypto','jsforce','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/utils','../../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','info','ServicenowConfiguration,\x20%s,\x20%s','request\x20sent','debug','ServicenowConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','end','count','offset','status','Content-Range','json','apply','reject','save','update','destroy','stack','name','send','model','keys','query','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','filters','filter','merge','map','key','VIRTUAL','field','options','ServicenowConfiguration','include','then','rows','params','rawAttributes','intersection','includeAll'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x9446,0x170));var _0x6944=function(_0xb43c93,_0x59e74d){_0xb43c93=_0xb43c93-0x0;var _0x597b8f=_0x9446[_0xb43c93];return _0x597b8f;};'use strict';var pdf=require(_0x6944('0x0'));var emlformat=require(_0x6944('0x1'));var rimraf=require(_0x6944('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x6944('0x3'));var rp=require(_0x6944('0x4'));var moment=require(_0x6944('0x5'));var BPromise=require(_0x6944('0x6'));var Mustache=require(_0x6944('0x7'));var util=require(_0x6944('0x8'));var path=require(_0x6944('0x9'));var sox=require(_0x6944('0xa'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x6944('0xb'));var squel=require('squel');var crypto=require(_0x6944('0xc'));var jsforce=require(_0x6944('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x6944('0xe'));var querystring=require(_0x6944('0xf'));var Papa=require(_0x6944('0x10'));var Redis=require('ioredis');var authService=require(_0x6944('0x11'));var qs=require(_0x6944('0x12'));var hardwareService=require(_0x6944('0x13'));var logger=require('../../config/logger')('api');var utils=require(_0x6944('0x14'));var config=require(_0x6944('0x15'));var db=require(_0x6944('0x16'))['db'];var jayson=require(_0x6944('0x17'));var client=jayson[_0x6944('0x18')]['http']({'port':0x232a});function checkPasswordPattern(_0x2cd5a8,_0x3694d8,_0x37ac48){if(_0x37ac48){var _0x1e059a=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1e059a[_0x6944('0x19')](_0x3694d8)){return _0x2cd5a8;}else{throw new Error(_0x6944('0x1a'));}}else{return _0x2cd5a8;}}function respondWithRpcPromise(_0x494a7c,_0x19853e,_0x444bb7,_0x19047f){return new BPromise(function(_0x471b18,_0x406825){var _0x26409a=_0x19047f||client;return _0x26409a[_0x6944('0x1b')](_0x494a7c,_0x444bb7)['then'](function(_0x29fb77){logger[_0x6944('0x1c')](_0x6944('0x1d'),_0x19853e,_0x6944('0x1e'));logger[_0x6944('0x1f')](_0x6944('0x20'),_0x19853e,_0x6944('0x1e'),JSON[_0x6944('0x21')](_0x29fb77));if(_0x29fb77[_0x6944('0x22')]){if(_0x29fb77['error'][_0x6944('0x23')]===0x1f4){logger[_0x6944('0x22')](_0x6944('0x1d'),_0x19853e,_0x29fb77[_0x6944('0x22')][_0x6944('0x24')]);return _0x406825(_0x29fb77[_0x6944('0x22')][_0x6944('0x24')]);}logger['error'](_0x6944('0x1d'),_0x19853e,_0x29fb77[_0x6944('0x22')]['message']);return _0x471b18(_0x29fb77['error'][_0x6944('0x24')]);}else{logger[_0x6944('0x1c')](_0x6944('0x1d'),_0x19853e,'request\x20sent');_0x471b18(_0x29fb77[_0x6944('0x25')][_0x6944('0x24')]);}})[_0x6944('0x26')](function(_0x44e51d){logger[_0x6944('0x22')](_0x6944('0x1d'),_0x19853e,_0x44e51d);_0x406825(_0x44e51d);});});}function respondWithStatusCode(_0x45069e,_0x229288){_0x229288=_0x229288||0xcc;return function(_0x406af1){if(_0x406af1){return _0x45069e[_0x6944('0x27')](_0x229288);}return _0x45069e['status'](_0x229288)[_0x6944('0x28')]();};}function respondWithResult(_0x5d9559,_0x46a33d){_0x46a33d=_0x46a33d||0xc8;return function(_0x41659c){if(_0x41659c){return _0x5d9559['status'](_0x46a33d)['json'](_0x41659c);}};}function respondWithFilteredResult(_0x506a54,_0x4eb95d){return function(_0x191d85){if(_0x191d85){var _0x1df5aa=_0x191d85[_0x6944('0x29')],_0x25c83a=_0x4eb95d[_0x6944('0x2a')],_0x5072c0=_0x4eb95d[_0x6944('0x2a')]+_0x4eb95d['limit'],_0x42e3be;if(_0x5072c0>=_0x1df5aa){_0x5072c0=_0x1df5aa;_0x42e3be=0xc8;}else{_0x42e3be=0xce;}_0x506a54[_0x6944('0x2b')](_0x42e3be);return _0x506a54['set'](_0x6944('0x2c'),_0x25c83a+'-'+_0x5072c0+'/'+_0x1df5aa)[_0x6944('0x2d')](_0x191d85);}return null;};}function patchUpdates(_0x11a481){return function(_0x696fcf){try{jsonpatch[_0x6944('0x2e')](_0x696fcf,_0x11a481,!![]);}catch(_0x282b9b){return BPromise[_0x6944('0x2f')](_0x282b9b);}return _0x696fcf[_0x6944('0x30')]();};}function saveUpdates(_0x8679c9,_0xafaef2){return function(_0x1f434d){if(_0x1f434d){return _0x1f434d[_0x6944('0x31')](_0x8679c9)['then'](function(_0x21e120){return _0x21e120;});}return null;};}function removeEntity(_0x3ac971,_0x462c8c){return function(_0x38c551){if(_0x38c551){return _0x38c551[_0x6944('0x32')]()['then'](function(){_0x3ac971[_0x6944('0x2b')](0xcc)[_0x6944('0x28')]();});}};}function handleEntityNotFound(_0x2c893c,_0x4b543b){return function(_0x2c84bf){if(!_0x2c84bf){_0x2c893c[_0x6944('0x27')](0x194);}return _0x2c84bf;};}function handleError(_0x43a005,_0x2ad6b4){_0x2ad6b4=_0x2ad6b4||0x1f4;return function(_0x43db2a){logger[_0x6944('0x22')](_0x43db2a[_0x6944('0x33')]);if(_0x43db2a[_0x6944('0x34')]){delete _0x43db2a['name'];}_0x43a005[_0x6944('0x2b')](_0x2ad6b4)[_0x6944('0x35')](_0x43db2a);};}exports['index']=function(_0x230744,_0x4110c0){var _0x317acf={},_0x5391a7={},_0x2895cd={'count':0x0,'rows':[]};var _0x21d4f0=db['ServicenowConfiguration']['rawAttributes'];_0x5391a7[_0x6944('0x36')]=_[_0x6944('0x37')](_0x21d4f0);_0x5391a7[_0x6944('0x38')]=_[_0x6944('0x37')](_0x230744['query']);_0x5391a7['filters']=_['intersection'](_0x5391a7['model'],_0x5391a7[_0x6944('0x38')]);_0x317acf[_0x6944('0x39')]=_['intersection'](_0x5391a7[_0x6944('0x36')],qs[_0x6944('0x3a')](_0x230744[_0x6944('0x38')][_0x6944('0x3a')]));_0x317acf['attributes']=_0x317acf['attributes'][_0x6944('0x3b')]?_0x317acf[_0x6944('0x39')]:_0x5391a7[_0x6944('0x36')];if(!_0x230744[_0x6944('0x38')][_0x6944('0x3c')](_0x6944('0x3d'))){_0x317acf[_0x6944('0x3e')]=qs[_0x6944('0x3e')](_0x230744[_0x6944('0x38')]['limit']);_0x317acf[_0x6944('0x2a')]=qs[_0x6944('0x2a')](_0x230744[_0x6944('0x38')]['offset']);}_0x317acf[_0x6944('0x3f')]=qs[_0x6944('0x40')](_0x230744[_0x6944('0x38')][_0x6944('0x40')]);_0x317acf[_0x6944('0x41')]=qs[_0x6944('0x42')](_['pick'](_0x230744[_0x6944('0x38')],_0x5391a7[_0x6944('0x42')]));if(_0x230744[_0x6944('0x38')][_0x6944('0x43')]){_0x317acf[_0x6944('0x41')]=_[_0x6944('0x44')](_0x317acf[_0x6944('0x41')],{'$or':_[_0x6944('0x45')](_0x21d4f0,function(_0x371516){if(_0x371516['type'][_0x6944('0x46')]!==_0x6944('0x47')){var _0x60f877={};_0x60f877[_0x371516[_0x6944('0x48')]]={'$like':'%'+_0x230744[_0x6944('0x38')][_0x6944('0x43')]+'%'};return _0x60f877;}})});}_0x317acf=_[_0x6944('0x44')]({},_0x317acf,_0x230744[_0x6944('0x49')]);var _0x114aab={'where':_0x317acf[_0x6944('0x41')]};return db[_0x6944('0x4a')][_0x6944('0x29')](_0x114aab)['then'](function(_0x4f742d){_0x2895cd[_0x6944('0x29')]=_0x4f742d;if(_0x230744[_0x6944('0x38')]['includeAll']){_0x317acf[_0x6944('0x4b')]=[{'all':!![]}];}return db[_0x6944('0x4a')]['findAll'](_0x317acf);})[_0x6944('0x4c')](function(_0x34d365){_0x2895cd[_0x6944('0x4d')]=_0x34d365;return _0x2895cd;})[_0x6944('0x4c')](respondWithFilteredResult(_0x4110c0,_0x317acf))[_0x6944('0x26')](handleError(_0x4110c0,null));};exports['show']=function(_0x329a9c,_0x279dec){var _0x3fe5f8={'raw':![],'where':{'id':_0x329a9c[_0x6944('0x4e')]['id']}},_0x3039fe={};_0x3039fe[_0x6944('0x36')]=_[_0x6944('0x37')](db[_0x6944('0x4a')][_0x6944('0x4f')]);_0x3039fe[_0x6944('0x38')]=_['keys'](_0x329a9c[_0x6944('0x38')]);_0x3039fe[_0x6944('0x42')]=_[_0x6944('0x50')](_0x3039fe[_0x6944('0x36')],_0x3039fe[_0x6944('0x38')]);_0x3fe5f8[_0x6944('0x39')]=_[_0x6944('0x50')](_0x3039fe['model'],qs[_0x6944('0x3a')](_0x329a9c[_0x6944('0x38')]['fields']));_0x3fe5f8[_0x6944('0x39')]=_0x3fe5f8[_0x6944('0x39')][_0x6944('0x3b')]?_0x3fe5f8[_0x6944('0x39')]:_0x3039fe[_0x6944('0x36')];if(_0x329a9c[_0x6944('0x38')][_0x6944('0x51')]){_0x3fe5f8['include']=[{'all':!![]}];}_0x3fe5f8=_[_0x6944('0x44')]({},_0x3fe5f8,_0x329a9c[_0x6944('0x49')]);return db['ServicenowConfiguration']['find'](_0x3fe5f8)['then'](handleEntityNotFound(_0x279dec,null))[_0x6944('0x4c')](respondWithResult(_0x279dec,null))[_0x6944('0x26')](handleError(_0x279dec,null));};exports[_0x6944('0x52')]=function(_0x97fdad,_0x30b813){return db[_0x6944('0x4a')]['create'](_0x97fdad[_0x6944('0x53')],{})['then'](respondWithResult(_0x30b813,0xc9))[_0x6944('0x26')](handleError(_0x30b813,null));};exports[_0x6944('0x31')]=function(_0x3e0756,_0x3682ca){if(_0x3e0756[_0x6944('0x53')]['id']){delete _0x3e0756['body']['id'];}return db['ServicenowConfiguration']['find']({'where':{'id':_0x3e0756[_0x6944('0x4e')]['id']}})[_0x6944('0x4c')](handleEntityNotFound(_0x3682ca,null))[_0x6944('0x4c')](saveUpdates(_0x3e0756[_0x6944('0x53')],null))[_0x6944('0x4c')](respondWithResult(_0x3682ca,null))[_0x6944('0x26')](handleError(_0x3682ca,null));};exports[_0x6944('0x32')]=function(_0x5463b9,_0x3d056c){return db['ServicenowConfiguration'][_0x6944('0x54')]({'where':{'id':_0x5463b9[_0x6944('0x4e')]['id']}})[_0x6944('0x4c')](handleEntityNotFound(_0x3d056c,null))['then'](removeEntity(_0x3d056c,null))[_0x6944('0x26')](handleError(_0x3d056c,null));};exports[_0x6944('0x55')]=function(_0x571856,_0x23bf0e,_0x2e8928){var _0x3b787c={};var _0xa8879b={};var _0x4e8f31;var _0x8ed624;return db['ServicenowConfiguration'][_0x6944('0x56')]({'where':{'id':_0x571856[_0x6944('0x4e')]['id']}})[_0x6944('0x4c')](handleEntityNotFound(_0x23bf0e,null))[_0x6944('0x4c')](function(_0x246ef1){if(_0x246ef1){_0x4e8f31=_0x246ef1;_0xa8879b[_0x6944('0x36')]=_[_0x6944('0x37')](db[_0x6944('0x57')]['rawAttributes']);_0xa8879b[_0x6944('0x38')]=_[_0x6944('0x37')](_0x571856[_0x6944('0x38')]);_0xa8879b['filters']=_[_0x6944('0x50')](_0xa8879b[_0x6944('0x36')],_0xa8879b[_0x6944('0x38')]);_0x3b787c['attributes']=_[_0x6944('0x50')](_0xa8879b['model'],qs['fields'](_0x571856[_0x6944('0x38')][_0x6944('0x3a')]));_0x3b787c[_0x6944('0x39')]=_0x3b787c[_0x6944('0x39')][_0x6944('0x3b')]?_0x3b787c[_0x6944('0x39')]:_0xa8879b[_0x6944('0x36')];_0x3b787c['order']=qs[_0x6944('0x40')](_0x571856[_0x6944('0x38')][_0x6944('0x40')]);_0x3b787c[_0x6944('0x41')]=qs['filters'](_[_0x6944('0x58')](_0x571856[_0x6944('0x38')],_0xa8879b[_0x6944('0x42')]));if(_0x571856[_0x6944('0x38')][_0x6944('0x43')]){_0x3b787c[_0x6944('0x41')]=_['merge'](_0x3b787c['where'],{'$or':_[_0x6944('0x45')](_0x3b787c[_0x6944('0x39')],function(_0x5b07e5){var _0x2c7d05={};_0x2c7d05[_0x5b07e5]={'$like':'%'+_0x571856['query']['filter']+'%'};return _0x2c7d05;})});}_0x3b787c=_[_0x6944('0x44')]({},_0x3b787c,_0x571856['options']);return _0x4e8f31[_0x6944('0x55')](_0x3b787c);}})['then'](function(_0x4085a2){if(_0x4085a2){_0x8ed624=_0x4085a2[_0x6944('0x3b')];if(!_0x571856[_0x6944('0x38')][_0x6944('0x3c')](_0x6944('0x3d'))){_0x3b787c[_0x6944('0x3e')]=qs[_0x6944('0x3e')](_0x571856[_0x6944('0x38')][_0x6944('0x3e')]);_0x3b787c[_0x6944('0x2a')]=qs[_0x6944('0x2a')](_0x571856[_0x6944('0x38')][_0x6944('0x2a')]);}return _0x4e8f31[_0x6944('0x55')](_0x3b787c);}})[_0x6944('0x4c')](function(_0x59f35f){if(_0x59f35f){return _0x59f35f?{'count':_0x8ed624,'rows':_0x59f35f}:null;}})[_0x6944('0x4c')](respondWithResult(_0x23bf0e,null))[_0x6944('0x26')](handleError(_0x23bf0e,null));};exports['getSubjects']=function(_0xe1a99c,_0x3c6876,_0x50611f){var _0x21b5ba={};var _0x3822af={};var _0x14036b;var _0x2c4c1b;return db[_0x6944('0x4a')][_0x6944('0x56')]({'where':{'id':_0xe1a99c[_0x6944('0x4e')]['id']}})['then'](handleEntityNotFound(_0x3c6876,null))[_0x6944('0x4c')](function(_0x502b18){if(_0x502b18){_0x14036b=_0x502b18;_0x3822af['model']=_[_0x6944('0x37')](db[_0x6944('0x57')]['rawAttributes']);_0x3822af[_0x6944('0x38')]=_[_0x6944('0x37')](_0xe1a99c[_0x6944('0x38')]);_0x3822af[_0x6944('0x42')]=_[_0x6944('0x50')](_0x3822af['model'],_0x3822af[_0x6944('0x38')]);_0x21b5ba[_0x6944('0x39')]=_[_0x6944('0x50')](_0x3822af['model'],qs['fields'](_0xe1a99c[_0x6944('0x38')][_0x6944('0x3a')]));_0x21b5ba[_0x6944('0x39')]=_0x21b5ba[_0x6944('0x39')][_0x6944('0x3b')]?_0x21b5ba['attributes']:_0x3822af[_0x6944('0x36')];_0x21b5ba['order']=qs[_0x6944('0x40')](_0xe1a99c[_0x6944('0x38')]['sort']);_0x21b5ba[_0x6944('0x41')]=qs[_0x6944('0x42')](_['pick'](_0xe1a99c[_0x6944('0x38')],_0x3822af['filters']));if(_0xe1a99c[_0x6944('0x38')][_0x6944('0x43')]){_0x21b5ba[_0x6944('0x41')]=_[_0x6944('0x44')](_0x21b5ba[_0x6944('0x41')],{'$or':_[_0x6944('0x45')](_0x21b5ba[_0x6944('0x39')],function(_0x47eb55){var _0x4c34b9={};_0x4c34b9[_0x47eb55]={'$like':'%'+_0xe1a99c[_0x6944('0x38')]['filter']+'%'};return _0x4c34b9;})});}_0x21b5ba=_[_0x6944('0x44')]({},_0x21b5ba,_0xe1a99c[_0x6944('0x49')]);return _0x14036b['getSubjects'](_0x21b5ba);}})[_0x6944('0x4c')](function(_0x2e9fe5){if(_0x2e9fe5){_0x2c4c1b=_0x2e9fe5['length'];if(!_0xe1a99c[_0x6944('0x38')][_0x6944('0x3c')]('nolimit')){_0x21b5ba['limit']=qs[_0x6944('0x3e')](_0xe1a99c['query'][_0x6944('0x3e')]);_0x21b5ba['offset']=qs['offset'](_0xe1a99c[_0x6944('0x38')][_0x6944('0x2a')]);}return _0x14036b['getSubjects'](_0x21b5ba);}})[_0x6944('0x4c')](function(_0x3b1bba){if(_0x3b1bba){return _0x3b1bba?{'count':_0x2c4c1b,'rows':_0x3b1bba}:null;}})['then'](respondWithResult(_0x3c6876,null))[_0x6944('0x26')](handleError(_0x3c6876,null));};exports[_0x6944('0x59')]=function(_0x536b36,_0x35b3b5,_0x4e8ea3){var _0x24809f={};var _0x3e03c7={};var _0x28013b;var _0x1b9fbd;return db[_0x6944('0x4a')][_0x6944('0x56')]({'where':{'id':_0x536b36[_0x6944('0x4e')]['id']}})[_0x6944('0x4c')](handleEntityNotFound(_0x35b3b5,null))[_0x6944('0x4c')](function(_0x3579ed){if(_0x3579ed){_0x28013b=_0x3579ed;_0x3e03c7['model']=_['keys'](db[_0x6944('0x57')][_0x6944('0x4f')]);_0x3e03c7[_0x6944('0x38')]=_[_0x6944('0x37')](_0x536b36[_0x6944('0x38')]);_0x3e03c7[_0x6944('0x42')]=_[_0x6944('0x50')](_0x3e03c7['model'],_0x3e03c7[_0x6944('0x38')]);_0x24809f['attributes']=_[_0x6944('0x50')](_0x3e03c7[_0x6944('0x36')],qs['fields'](_0x536b36['query'][_0x6944('0x3a')]));_0x24809f[_0x6944('0x39')]=_0x24809f[_0x6944('0x39')]['length']?_0x24809f[_0x6944('0x39')]:_0x3e03c7[_0x6944('0x36')];_0x24809f['order']=qs[_0x6944('0x40')](_0x536b36[_0x6944('0x38')][_0x6944('0x40')]);_0x24809f[_0x6944('0x41')]=qs[_0x6944('0x42')](_[_0x6944('0x58')](_0x536b36['query'],_0x3e03c7[_0x6944('0x42')]));if(_0x536b36['query'][_0x6944('0x43')]){_0x24809f['where']=_[_0x6944('0x44')](_0x24809f[_0x6944('0x41')],{'$or':_[_0x6944('0x45')](_0x24809f[_0x6944('0x39')],function(_0x2329dd){var _0x13deb9={};_0x13deb9[_0x2329dd]={'$like':'%'+_0x536b36[_0x6944('0x38')][_0x6944('0x43')]+'%'};return _0x13deb9;})});}_0x24809f=_['merge']({},_0x24809f,_0x536b36[_0x6944('0x49')]);return _0x28013b['getDescriptions'](_0x24809f);}})[_0x6944('0x4c')](function(_0x58c126){if(_0x58c126){_0x1b9fbd=_0x58c126['length'];if(!_0x536b36[_0x6944('0x38')][_0x6944('0x3c')](_0x6944('0x3d'))){_0x24809f[_0x6944('0x3e')]=qs[_0x6944('0x3e')](_0x536b36[_0x6944('0x38')]['limit']);_0x24809f[_0x6944('0x2a')]=qs['offset'](_0x536b36['query'][_0x6944('0x2a')]);}return _0x28013b[_0x6944('0x59')](_0x24809f);}})['then'](function(_0x11be06){if(_0x11be06){return _0x11be06?{'count':_0x1b9fbd,'rows':_0x11be06}:null;}})['then'](respondWithResult(_0x35b3b5,null))[_0x6944('0x26')](handleError(_0x35b3b5,null));};
\ No newline at end of file
+var _0xd976=['VIRTUAL','field','options','include','rows','show','params','length','includeAll','create','body','find','findOne','map','getFields','getSubjects','ServicenowField','getDescriptions','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../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~!@#$%^&-_=+[{]}.','request','ServicenowConfiguration,\x20%s,\x20%s','request\x20sent','debug','ServicenowConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','stack','name','send','index','ServicenowConfiguration','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','type','key'];(function(_0x55aaf3,_0x5cb9d4){var _0x4fccef=function(_0x40ceef){while(--_0x40ceef){_0x55aaf3['push'](_0x55aaf3['shift']());}};_0x4fccef(++_0x5cb9d4);}(_0xd976,0x12f));var _0x6d97=function(_0x228bcb,_0xbdb6f3){_0x228bcb=_0x228bcb-0x0;var _0xb56860=_0xd976[_0x228bcb];return _0xb56860;};'use strict';var pdf=require(_0x6d97('0x0'));var emlformat=require(_0x6d97('0x1'));var rimraf=require(_0x6d97('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x6d97('0x3'));var moment=require('moment');var BPromise=require(_0x6d97('0x4'));var Mustache=require(_0x6d97('0x5'));var util=require(_0x6d97('0x6'));var path=require(_0x6d97('0x7'));var sox=require(_0x6d97('0x8'));var csv=require(_0x6d97('0x9'));var ejs=require(_0x6d97('0xa'));var fs=require('fs');var _=require(_0x6d97('0xb'));var squel=require(_0x6d97('0xc'));var crypto=require(_0x6d97('0xd'));var jsforce=require(_0x6d97('0xe'));var deskjs=require('desk.js');var toCsv=require(_0x6d97('0x9'));var querystring=require('querystring');var Papa=require(_0x6d97('0xf'));var Redis=require('ioredis');var authService=require(_0x6d97('0x10'));var qs=require(_0x6d97('0x11'));var hardwareService=require(_0x6d97('0x12'));var logger=require(_0x6d97('0x13'))(_0x6d97('0x14'));var utils=require(_0x6d97('0x15'));var config=require(_0x6d97('0x16'));var db=require(_0x6d97('0x17'))['db'];var jayson=require(_0x6d97('0x18'));var client=jayson['client'][_0x6d97('0x19')]({'port':0x232a});function checkPasswordPattern(_0x3306ac,_0xc67450,_0x378f41){if(_0x378f41){var _0x397958=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x397958['test'](_0xc67450)){return _0x3306ac;}else{throw new Error(_0x6d97('0x1a'));}}else{return _0x3306ac;}}function respondWithRpcPromise(_0x3e004a,_0x1577c0,_0x4e64f8,_0x1a5601){return new BPromise(function(_0x59b442,_0x48c053){var _0x113d51=_0x1a5601||client;return _0x113d51[_0x6d97('0x1b')](_0x3e004a,_0x4e64f8)['then'](function(_0x287226){logger['info'](_0x6d97('0x1c'),_0x1577c0,_0x6d97('0x1d'));logger[_0x6d97('0x1e')](_0x6d97('0x1f'),_0x1577c0,_0x6d97('0x1d'),JSON[_0x6d97('0x20')](_0x287226));if(_0x287226[_0x6d97('0x21')]){if(_0x287226[_0x6d97('0x21')][_0x6d97('0x22')]===0x1f4){logger[_0x6d97('0x21')](_0x6d97('0x1c'),_0x1577c0,_0x287226['error'][_0x6d97('0x23')]);return _0x48c053(_0x287226[_0x6d97('0x21')]['message']);}logger['error'](_0x6d97('0x1c'),_0x1577c0,_0x287226[_0x6d97('0x21')][_0x6d97('0x23')]);return _0x59b442(_0x287226[_0x6d97('0x21')][_0x6d97('0x23')]);}else{logger[_0x6d97('0x24')]('ServicenowConfiguration,\x20%s,\x20%s',_0x1577c0,_0x6d97('0x1d'));_0x59b442(_0x287226[_0x6d97('0x25')][_0x6d97('0x23')]);}})[_0x6d97('0x26')](function(_0x318a0b){logger[_0x6d97('0x21')]('ServicenowConfiguration,\x20%s,\x20%s',_0x1577c0,_0x318a0b);_0x48c053(_0x318a0b);});});}function respondWithStatusCode(_0x39a095,_0x37a190){_0x37a190=_0x37a190||0xcc;return function(_0x2e2a33){if(_0x2e2a33){return _0x39a095[_0x6d97('0x27')](_0x37a190);}return _0x39a095[_0x6d97('0x28')](_0x37a190)[_0x6d97('0x29')]();};}function respondWithResult(_0x27a544,_0x43efca){_0x43efca=_0x43efca||0xc8;return function(_0x200570){if(_0x200570){return _0x27a544['status'](_0x43efca)[_0x6d97('0x2a')](_0x200570);}};}function respondWithFilteredResult(_0x52b27c,_0x3f3ed1){return function(_0x31947a){if(_0x31947a){var _0x3f41c0=_0x31947a[_0x6d97('0x2b')],_0x1bc842=_0x3f3ed1[_0x6d97('0x2c')],_0x16247c=_0x3f3ed1[_0x6d97('0x2c')]+_0x3f3ed1[_0x6d97('0x2d')],_0x3ea25e;if(_0x16247c>=_0x3f41c0){_0x16247c=_0x3f41c0;_0x3ea25e=0xc8;}else{_0x3ea25e=0xce;}_0x52b27c[_0x6d97('0x28')](_0x3ea25e);return _0x52b27c[_0x6d97('0x2e')](_0x6d97('0x2f'),_0x1bc842+'-'+_0x16247c+'/'+_0x3f41c0)[_0x6d97('0x2a')](_0x31947a);}return null;};}function patchUpdates(_0x3a95f5){return function(_0x1124ef){try{jsonpatch[_0x6d97('0x30')](_0x1124ef,_0x3a95f5,!![]);}catch(_0x173074){return BPromise[_0x6d97('0x31')](_0x173074);}return _0x1124ef[_0x6d97('0x32')]();};}function saveUpdates(_0x5c053b,_0x3d0695){return function(_0x258afc){if(_0x258afc){return _0x258afc[_0x6d97('0x33')](_0x5c053b)['then'](function(_0x2c5711){return _0x2c5711;});}return null;};}function removeEntity(_0x986702,_0x38d12a){return function(_0x2a2234){if(_0x2a2234){return _0x2a2234[_0x6d97('0x34')]()[_0x6d97('0x35')](function(){_0x986702[_0x6d97('0x28')](0xcc)[_0x6d97('0x29')]();});}};}function handleEntityNotFound(_0x4d282b,_0x99e3d5){return function(_0x3cd8b0){if(!_0x3cd8b0){_0x4d282b[_0x6d97('0x27')](0x194);}return _0x3cd8b0;};}function handleError(_0x51555c,_0x2112b2){_0x2112b2=_0x2112b2||0x1f4;return function(_0x375296){logger['error'](_0x375296[_0x6d97('0x36')]);if(_0x375296['name']){delete _0x375296[_0x6d97('0x37')];}_0x51555c[_0x6d97('0x28')](_0x2112b2)[_0x6d97('0x38')](_0x375296);};}exports[_0x6d97('0x39')]=function(_0x188a80,_0x45cd46){var _0x3ef3c4={},_0xbdebb6={},_0x734a4={'count':0x0,'rows':[]};var _0x5a0109=db[_0x6d97('0x3a')][_0x6d97('0x3b')];_0xbdebb6[_0x6d97('0x3c')]=_[_0x6d97('0x3d')](_0x5a0109);_0xbdebb6[_0x6d97('0x3e')]=_[_0x6d97('0x3d')](_0x188a80[_0x6d97('0x3e')]);_0xbdebb6[_0x6d97('0x3f')]=_[_0x6d97('0x40')](_0xbdebb6['model'],_0xbdebb6[_0x6d97('0x3e')]);_0x3ef3c4[_0x6d97('0x41')]=_['intersection'](_0xbdebb6[_0x6d97('0x3c')],qs[_0x6d97('0x42')](_0x188a80['query'][_0x6d97('0x42')]));_0x3ef3c4['attributes']=_0x3ef3c4['attributes']['length']?_0x3ef3c4[_0x6d97('0x41')]:_0xbdebb6[_0x6d97('0x3c')];if(!_0x188a80[_0x6d97('0x3e')][_0x6d97('0x43')](_0x6d97('0x44'))){_0x3ef3c4[_0x6d97('0x2d')]=qs['limit'](_0x188a80['query'][_0x6d97('0x2d')]);_0x3ef3c4[_0x6d97('0x2c')]=qs[_0x6d97('0x2c')](_0x188a80[_0x6d97('0x3e')][_0x6d97('0x2c')]);}_0x3ef3c4[_0x6d97('0x45')]=qs[_0x6d97('0x46')](_0x188a80[_0x6d97('0x3e')]['sort']);_0x3ef3c4[_0x6d97('0x47')]=qs[_0x6d97('0x3f')](_[_0x6d97('0x48')](_0x188a80[_0x6d97('0x3e')],_0xbdebb6[_0x6d97('0x3f')]));if(_0x188a80[_0x6d97('0x3e')][_0x6d97('0x49')]){_0x3ef3c4[_0x6d97('0x47')]=_[_0x6d97('0x4a')](_0x3ef3c4[_0x6d97('0x47')],{'$or':_['map'](_0x5a0109,function(_0xcce3){if(_0xcce3[_0x6d97('0x4b')][_0x6d97('0x4c')]!==_0x6d97('0x4d')){var _0x24e4b8={};_0x24e4b8[_0xcce3[_0x6d97('0x4e')]]={'$like':'%'+_0x188a80[_0x6d97('0x3e')][_0x6d97('0x49')]+'%'};return _0x24e4b8;}})});}_0x3ef3c4=_[_0x6d97('0x4a')]({},_0x3ef3c4,_0x188a80[_0x6d97('0x4f')]);var _0x5789f0={'where':_0x3ef3c4['where']};return db['ServicenowConfiguration'][_0x6d97('0x2b')](_0x5789f0)[_0x6d97('0x35')](function(_0x37dc7d){_0x734a4[_0x6d97('0x2b')]=_0x37dc7d;if(_0x188a80[_0x6d97('0x3e')]['includeAll']){_0x3ef3c4[_0x6d97('0x50')]=[{'all':!![]}];}return db[_0x6d97('0x3a')]['findAll'](_0x3ef3c4);})[_0x6d97('0x35')](function(_0xabe11b){_0x734a4[_0x6d97('0x51')]=_0xabe11b;return _0x734a4;})[_0x6d97('0x35')](respondWithFilteredResult(_0x45cd46,_0x3ef3c4))['catch'](handleError(_0x45cd46,null));};exports[_0x6d97('0x52')]=function(_0x107a6c,_0x3b5697){var _0xd0248a={'raw':![],'where':{'id':_0x107a6c[_0x6d97('0x53')]['id']}},_0x135e20={};_0x135e20[_0x6d97('0x3c')]=_['keys'](db['ServicenowConfiguration'][_0x6d97('0x3b')]);_0x135e20[_0x6d97('0x3e')]=_[_0x6d97('0x3d')](_0x107a6c['query']);_0x135e20[_0x6d97('0x3f')]=_[_0x6d97('0x40')](_0x135e20[_0x6d97('0x3c')],_0x135e20[_0x6d97('0x3e')]);_0xd0248a[_0x6d97('0x41')]=_[_0x6d97('0x40')](_0x135e20[_0x6d97('0x3c')],qs['fields'](_0x107a6c[_0x6d97('0x3e')][_0x6d97('0x42')]));_0xd0248a['attributes']=_0xd0248a[_0x6d97('0x41')][_0x6d97('0x54')]?_0xd0248a[_0x6d97('0x41')]:_0x135e20[_0x6d97('0x3c')];if(_0x107a6c['query'][_0x6d97('0x55')]){_0xd0248a['include']=[{'all':!![]}];}_0xd0248a=_[_0x6d97('0x4a')]({},_0xd0248a,_0x107a6c[_0x6d97('0x4f')]);return db[_0x6d97('0x3a')]['find'](_0xd0248a)[_0x6d97('0x35')](handleEntityNotFound(_0x3b5697,null))['then'](respondWithResult(_0x3b5697,null))[_0x6d97('0x26')](handleError(_0x3b5697,null));};exports[_0x6d97('0x56')]=function(_0x1403ef,_0x40ef23){return db[_0x6d97('0x3a')][_0x6d97('0x56')](_0x1403ef['body'],{})[_0x6d97('0x35')](respondWithResult(_0x40ef23,0xc9))[_0x6d97('0x26')](handleError(_0x40ef23,null));};exports['update']=function(_0x3c282a,_0x288f5a){if(_0x3c282a[_0x6d97('0x57')]['id']){delete _0x3c282a[_0x6d97('0x57')]['id'];}return db['ServicenowConfiguration']['find']({'where':{'id':_0x3c282a[_0x6d97('0x53')]['id']}})[_0x6d97('0x35')](handleEntityNotFound(_0x288f5a,null))['then'](saveUpdates(_0x3c282a['body'],null))['then'](respondWithResult(_0x288f5a,null))[_0x6d97('0x26')](handleError(_0x288f5a,null));};exports[_0x6d97('0x34')]=function(_0x3a8d88,_0x24e2fd){return db[_0x6d97('0x3a')][_0x6d97('0x58')]({'where':{'id':_0x3a8d88[_0x6d97('0x53')]['id']}})[_0x6d97('0x35')](handleEntityNotFound(_0x24e2fd,null))['then'](removeEntity(_0x24e2fd,null))[_0x6d97('0x26')](handleError(_0x24e2fd,null));};exports['getFields']=function(_0x149ab4,_0x326dcc,_0x58f065){var _0x17ca36={};var _0x300e18={};var _0x1a27a6;var _0x277c9b;return db[_0x6d97('0x3a')][_0x6d97('0x59')]({'where':{'id':_0x149ab4[_0x6d97('0x53')]['id']}})[_0x6d97('0x35')](handleEntityNotFound(_0x326dcc,null))['then'](function(_0x29302c){if(_0x29302c){_0x1a27a6=_0x29302c;_0x300e18[_0x6d97('0x3c')]=_[_0x6d97('0x3d')](db['ServicenowField'][_0x6d97('0x3b')]);_0x300e18[_0x6d97('0x3e')]=_['keys'](_0x149ab4['query']);_0x300e18[_0x6d97('0x3f')]=_[_0x6d97('0x40')](_0x300e18[_0x6d97('0x3c')],_0x300e18[_0x6d97('0x3e')]);_0x17ca36['attributes']=_[_0x6d97('0x40')](_0x300e18[_0x6d97('0x3c')],qs['fields'](_0x149ab4[_0x6d97('0x3e')][_0x6d97('0x42')]));_0x17ca36['attributes']=_0x17ca36[_0x6d97('0x41')]['length']?_0x17ca36[_0x6d97('0x41')]:_0x300e18[_0x6d97('0x3c')];_0x17ca36[_0x6d97('0x45')]=qs[_0x6d97('0x46')](_0x149ab4[_0x6d97('0x3e')][_0x6d97('0x46')]);_0x17ca36[_0x6d97('0x47')]=qs[_0x6d97('0x3f')](_[_0x6d97('0x48')](_0x149ab4[_0x6d97('0x3e')],_0x300e18[_0x6d97('0x3f')]));if(_0x149ab4[_0x6d97('0x3e')][_0x6d97('0x49')]){_0x17ca36[_0x6d97('0x47')]=_[_0x6d97('0x4a')](_0x17ca36['where'],{'$or':_[_0x6d97('0x5a')](_0x17ca36[_0x6d97('0x41')],function(_0x4544a0){var _0x4b415a={};_0x4b415a[_0x4544a0]={'$like':'%'+_0x149ab4[_0x6d97('0x3e')][_0x6d97('0x49')]+'%'};return _0x4b415a;})});}_0x17ca36=_[_0x6d97('0x4a')]({},_0x17ca36,_0x149ab4[_0x6d97('0x4f')]);return _0x1a27a6[_0x6d97('0x5b')](_0x17ca36);}})[_0x6d97('0x35')](function(_0x34b35d){if(_0x34b35d){_0x277c9b=_0x34b35d[_0x6d97('0x54')];if(!_0x149ab4[_0x6d97('0x3e')][_0x6d97('0x43')](_0x6d97('0x44'))){_0x17ca36['limit']=qs[_0x6d97('0x2d')](_0x149ab4[_0x6d97('0x3e')][_0x6d97('0x2d')]);_0x17ca36[_0x6d97('0x2c')]=qs[_0x6d97('0x2c')](_0x149ab4['query'][_0x6d97('0x2c')]);}return _0x1a27a6[_0x6d97('0x5b')](_0x17ca36);}})[_0x6d97('0x35')](function(_0x40f78f){if(_0x40f78f){return _0x40f78f?{'count':_0x277c9b,'rows':_0x40f78f}:null;}})['then'](respondWithResult(_0x326dcc,null))[_0x6d97('0x26')](handleError(_0x326dcc,null));};exports[_0x6d97('0x5c')]=function(_0x33a977,_0x35881e,_0x311d1a){var _0x25c79a={};var _0x1d535a={};var _0xb43e09;var _0x14cf80;return db[_0x6d97('0x3a')]['findOne']({'where':{'id':_0x33a977['params']['id']}})[_0x6d97('0x35')](handleEntityNotFound(_0x35881e,null))[_0x6d97('0x35')](function(_0x54fbc1){if(_0x54fbc1){_0xb43e09=_0x54fbc1;_0x1d535a[_0x6d97('0x3c')]=_[_0x6d97('0x3d')](db[_0x6d97('0x5d')][_0x6d97('0x3b')]);_0x1d535a[_0x6d97('0x3e')]=_[_0x6d97('0x3d')](_0x33a977['query']);_0x1d535a[_0x6d97('0x3f')]=_[_0x6d97('0x40')](_0x1d535a[_0x6d97('0x3c')],_0x1d535a[_0x6d97('0x3e')]);_0x25c79a[_0x6d97('0x41')]=_[_0x6d97('0x40')](_0x1d535a[_0x6d97('0x3c')],qs[_0x6d97('0x42')](_0x33a977[_0x6d97('0x3e')]['fields']));_0x25c79a[_0x6d97('0x41')]=_0x25c79a[_0x6d97('0x41')][_0x6d97('0x54')]?_0x25c79a[_0x6d97('0x41')]:_0x1d535a[_0x6d97('0x3c')];_0x25c79a[_0x6d97('0x45')]=qs[_0x6d97('0x46')](_0x33a977['query'][_0x6d97('0x46')]);_0x25c79a[_0x6d97('0x47')]=qs[_0x6d97('0x3f')](_['pick'](_0x33a977[_0x6d97('0x3e')],_0x1d535a[_0x6d97('0x3f')]));if(_0x33a977[_0x6d97('0x3e')][_0x6d97('0x49')]){_0x25c79a['where']=_['merge'](_0x25c79a[_0x6d97('0x47')],{'$or':_['map'](_0x25c79a['attributes'],function(_0x353c03){var _0x38ad4a={};_0x38ad4a[_0x353c03]={'$like':'%'+_0x33a977['query']['filter']+'%'};return _0x38ad4a;})});}_0x25c79a=_[_0x6d97('0x4a')]({},_0x25c79a,_0x33a977[_0x6d97('0x4f')]);return _0xb43e09[_0x6d97('0x5c')](_0x25c79a);}})['then'](function(_0x202f84){if(_0x202f84){_0x14cf80=_0x202f84[_0x6d97('0x54')];if(!_0x33a977[_0x6d97('0x3e')][_0x6d97('0x43')](_0x6d97('0x44'))){_0x25c79a['limit']=qs['limit'](_0x33a977[_0x6d97('0x3e')][_0x6d97('0x2d')]);_0x25c79a['offset']=qs['offset'](_0x33a977[_0x6d97('0x3e')][_0x6d97('0x2c')]);}return _0xb43e09[_0x6d97('0x5c')](_0x25c79a);}})['then'](function(_0x591870){if(_0x591870){return _0x591870?{'count':_0x14cf80,'rows':_0x591870}:null;}})[_0x6d97('0x35')](respondWithResult(_0x35881e,null))[_0x6d97('0x26')](handleError(_0x35881e,null));};exports[_0x6d97('0x5e')]=function(_0x2c333f,_0x13a703,_0x19f51e){var _0x32f9cb={};var _0x3a8116={};var _0x5e93e1;var _0x53ce8f;return db[_0x6d97('0x3a')][_0x6d97('0x59')]({'where':{'id':_0x2c333f['params']['id']}})[_0x6d97('0x35')](handleEntityNotFound(_0x13a703,null))['then'](function(_0x4850ef){if(_0x4850ef){_0x5e93e1=_0x4850ef;_0x3a8116['model']=_['keys'](db[_0x6d97('0x5d')][_0x6d97('0x3b')]);_0x3a8116[_0x6d97('0x3e')]=_['keys'](_0x2c333f[_0x6d97('0x3e')]);_0x3a8116[_0x6d97('0x3f')]=_[_0x6d97('0x40')](_0x3a8116['model'],_0x3a8116['query']);_0x32f9cb[_0x6d97('0x41')]=_['intersection'](_0x3a8116['model'],qs['fields'](_0x2c333f['query'][_0x6d97('0x42')]));_0x32f9cb[_0x6d97('0x41')]=_0x32f9cb[_0x6d97('0x41')]['length']?_0x32f9cb['attributes']:_0x3a8116[_0x6d97('0x3c')];_0x32f9cb[_0x6d97('0x45')]=qs[_0x6d97('0x46')](_0x2c333f[_0x6d97('0x3e')][_0x6d97('0x46')]);_0x32f9cb[_0x6d97('0x47')]=qs[_0x6d97('0x3f')](_[_0x6d97('0x48')](_0x2c333f['query'],_0x3a8116[_0x6d97('0x3f')]));if(_0x2c333f[_0x6d97('0x3e')][_0x6d97('0x49')]){_0x32f9cb['where']=_['merge'](_0x32f9cb['where'],{'$or':_[_0x6d97('0x5a')](_0x32f9cb[_0x6d97('0x41')],function(_0xbe290a){var _0x4959c3={};_0x4959c3[_0xbe290a]={'$like':'%'+_0x2c333f[_0x6d97('0x3e')][_0x6d97('0x49')]+'%'};return _0x4959c3;})});}_0x32f9cb=_['merge']({},_0x32f9cb,_0x2c333f[_0x6d97('0x4f')]);return _0x5e93e1['getDescriptions'](_0x32f9cb);}})[_0x6d97('0x35')](function(_0x4c451d){if(_0x4c451d){_0x53ce8f=_0x4c451d['length'];if(!_0x2c333f[_0x6d97('0x3e')]['hasOwnProperty'](_0x6d97('0x44'))){_0x32f9cb[_0x6d97('0x2d')]=qs[_0x6d97('0x2d')](_0x2c333f[_0x6d97('0x3e')]['limit']);_0x32f9cb['offset']=qs[_0x6d97('0x2c')](_0x2c333f[_0x6d97('0x3e')][_0x6d97('0x2c')]);}return _0x5e93e1['getDescriptions'](_0x32f9cb);}})['then'](function(_0x25d229){if(_0x25d229){return _0x25d229?{'count':_0x53ce8f,'rows':_0x25d229}:null;}})[_0x6d97('0x35')](respondWithResult(_0x13a703,null))[_0x6d97('0x26')](handleError(_0x13a703,null));};
\ No newline at end of file
index 36725aa..ac4a023 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc193=['rimraf','../../config/environment','./intServicenowConfiguration.attributes','exports','ServicenowConfiguration','int_servicenow_configurations','lodash','util','../../config/logger','api','moment','request-promise','path'];(function(_0x11ee57,_0x546a3b){var _0xae946d=function(_0x25648b){while(--_0x25648b){_0x11ee57['push'](_0x11ee57['shift']());}};_0xae946d(++_0x546a3b);}(_0xc193,0x10a));var _0x3c19=function(_0xfae23b,_0x2be4ba){_0xfae23b=_0xfae23b-0x0;var _0x200640=_0xc193[_0xfae23b];return _0x200640;};'use strict';var _=require(_0x3c19('0x0'));var util=require(_0x3c19('0x1'));var logger=require(_0x3c19('0x2'))(_0x3c19('0x3'));var moment=require(_0x3c19('0x4'));var BPromise=require('bluebird');var rp=require(_0x3c19('0x5'));var fs=require('fs');var path=require(_0x3c19('0x6'));var rimraf=require(_0x3c19('0x7'));var config=require(_0x3c19('0x8'));var attributes=require(_0x3c19('0x9'));module[_0x3c19('0xa')]=function(_0x28e5a6,_0x578569){return _0x28e5a6['define'](_0x3c19('0xb'),attributes,{'tableName':_0x3c19('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xc0d1=['int_servicenow_configurations','lodash','../../config/logger','api','bluebird','rimraf','./intServicenowConfiguration.attributes','exports','ServicenowConfiguration'];(function(_0x49c057,_0xc808ed){var _0xd8f0e6=function(_0x5b9042){while(--_0x5b9042){_0x49c057['push'](_0x49c057['shift']());}};_0xd8f0e6(++_0xc808ed);}(_0xc0d1,0x7f));var _0x1c0d=function(_0x2be8c2,_0x14a4b5){_0x2be8c2=_0x2be8c2-0x0;var _0x97f531=_0xc0d1[_0x2be8c2];return _0x97f531;};'use strict';var _=require(_0x1c0d('0x0'));var util=require('util');var logger=require(_0x1c0d('0x1'))(_0x1c0d('0x2'));var moment=require('moment');var BPromise=require(_0x1c0d('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x1c0d('0x4'));var config=require('../../config/environment');var attributes=require(_0x1c0d('0x5'));module[_0x1c0d('0x6')]=function(_0x17c6ae,_0x28cc1f){return _0x17c6ae['define'](_0x1c0d('0x7'),attributes,{'tableName':_0x1c0d('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 7f7b061..b201896 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xafe5=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','then','ServicenowConfiguration,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring'];(function(_0x153f4d,_0x591469){var _0x26e1c7=function(_0x2d06a8){while(--_0x2d06a8){_0x153f4d['push'](_0x153f4d['shift']());}};_0x26e1c7(++_0x591469);}(_0xafe5,0x69));var _0x5afe=function(_0x127bb3,_0x276879){_0x127bb3=_0x127bb3-0x0;var _0x46d46e=_0xafe5[_0x127bb3];return _0x46d46e;};'use strict';var _=require(_0x5afe('0x0'));var util=require(_0x5afe('0x1'));var moment=require(_0x5afe('0x2'));var BPromise=require(_0x5afe('0x3'));var rs=require(_0x5afe('0x4'));var fs=require('fs');var Redis=require(_0x5afe('0x5'));var db=require(_0x5afe('0x6'))['db'];var utils=require(_0x5afe('0x7'));var logger=require(_0x5afe('0x8'))(_0x5afe('0x9'));var config=require(_0x5afe('0xa'));var jayson=require(_0x5afe('0xb'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x87da8c,_0x539d5f,_0x9bc6f3){return new BPromise(function(_0x32e1ce,_0xea64da){return client['request'](_0x87da8c,_0x9bc6f3)[_0x5afe('0xc')](function(_0x3e141e){logger['info'](_0x5afe('0xd'),_0x539d5f,'request\x20sent');logger[_0x5afe('0xe')]('ServicenowConfiguration,\x20%s,\x20%s,\x20%s',_0x539d5f,_0x5afe('0xf'),JSON[_0x5afe('0x10')](_0x3e141e));if(_0x3e141e[_0x5afe('0x11')]){if(_0x3e141e[_0x5afe('0x11')][_0x5afe('0x12')]===0x1f4){logger[_0x5afe('0x11')](_0x5afe('0xd'),_0x539d5f,_0x3e141e[_0x5afe('0x11')]['message']);return _0xea64da(_0x3e141e[_0x5afe('0x11')][_0x5afe('0x13')]);}logger[_0x5afe('0x11')](_0x5afe('0xd'),_0x539d5f,_0x3e141e[_0x5afe('0x11')][_0x5afe('0x13')]);return _0x32e1ce(_0x3e141e['error'][_0x5afe('0x13')]);}else{logger['info'](_0x5afe('0xd'),_0x539d5f,_0x5afe('0xf'));_0x32e1ce(_0x3e141e[_0x5afe('0x14')][_0x5afe('0x13')]);}})[_0x5afe('0x15')](function(_0x287b4f){logger['error'](_0x5afe('0xd'),_0x539d5f,_0x287b4f);_0xea64da(_0x287b4f);});});}
\ No newline at end of file
+var _0xf081=['request','then','info','ServicenowConfiguration,\x20%s,\x20%s','request\x20sent','debug','ServicenowConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','http'];(function(_0x34df56,_0x52a58f){var _0x520f88=function(_0x2f0a82){while(--_0x2f0a82){_0x34df56['push'](_0x34df56['shift']());}};_0x520f88(++_0x52a58f);}(_0xf081,0x1ee));var _0x1f08=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0xf081[_0x57b54c];return _0x59cc19;};'use strict';var _=require(_0x1f08('0x0'));var util=require(_0x1f08('0x1'));var moment=require(_0x1f08('0x2'));var BPromise=require(_0x1f08('0x3'));var rs=require(_0x1f08('0x4'));var fs=require('fs');var Redis=require(_0x1f08('0x5'));var db=require(_0x1f08('0x6'))['db'];var utils=require(_0x1f08('0x7'));var logger=require(_0x1f08('0x8'))(_0x1f08('0x9'));var config=require('../../config/environment');var jayson=require(_0x1f08('0xa'));var client=jayson['client'][_0x1f08('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x294d0e,_0x14f6cd,_0x5a1926){return new BPromise(function(_0x37443e,_0x1cefff){return client[_0x1f08('0xc')](_0x294d0e,_0x5a1926)[_0x1f08('0xd')](function(_0xe39400){logger[_0x1f08('0xe')](_0x1f08('0xf'),_0x14f6cd,_0x1f08('0x10'));logger[_0x1f08('0x11')](_0x1f08('0x12'),_0x14f6cd,_0x1f08('0x10'),JSON[_0x1f08('0x13')](_0xe39400));if(_0xe39400[_0x1f08('0x14')]){if(_0xe39400[_0x1f08('0x14')][_0x1f08('0x15')]===0x1f4){logger['error'](_0x1f08('0xf'),_0x14f6cd,_0xe39400[_0x1f08('0x14')][_0x1f08('0x16')]);return _0x1cefff(_0xe39400[_0x1f08('0x14')][_0x1f08('0x16')]);}logger[_0x1f08('0x14')](_0x1f08('0xf'),_0x14f6cd,_0xe39400['error'][_0x1f08('0x16')]);return _0x37443e(_0xe39400[_0x1f08('0x14')][_0x1f08('0x16')]);}else{logger[_0x1f08('0xe')](_0x1f08('0xf'),_0x14f6cd,_0x1f08('0x10'));_0x37443e(_0xe39400['result'][_0x1f08('0x16')]);}})['catch'](function(_0x5e9112){logger['error'](_0x1f08('0xf'),_0x14f6cd,_0x5e9112);_0x1cefff(_0x5e9112);});});}
\ No newline at end of file
index 8f856d0..a3d7e43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x04d1=['Router','../../components/auth/service','../../config/environment','./intServicenowField.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express'];(function(_0x3ae689,_0x566fb9){var _0x591bf5=function(_0x336f7a){while(--_0x336f7a){_0x3ae689['push'](_0x3ae689['shift']());}};_0x591bf5(++_0x566fb9);}(_0x04d1,0x1b4));var _0x104d=function(_0x8136b0,_0x550ce6){_0x8136b0=_0x8136b0-0x0;var _0x205695=_0x04d1[_0x8136b0];return _0x205695;};'use strict';var multer=require(_0x104d('0x0'));var util=require(_0x104d('0x1'));var path=require(_0x104d('0x2'));var timeout=require(_0x104d('0x3'));var express=require(_0x104d('0x4'));var router=express[_0x104d('0x5')]();var auth=require(_0x104d('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x104d('0x7'));var controller=require(_0x104d('0x8'));router[_0x104d('0x9')]('/',auth[_0x104d('0xa')](),controller[_0x104d('0xb')]);router[_0x104d('0x9')](_0x104d('0xc'),auth['isAuthenticated'](),controller[_0x104d('0xd')]);router[_0x104d('0xe')]('/',auth[_0x104d('0xa')](),controller[_0x104d('0xf')]);router[_0x104d('0x10')](_0x104d('0xc'),auth[_0x104d('0xa')](),controller[_0x104d('0x11')]);router[_0x104d('0x12')](_0x104d('0xc'),auth[_0x104d('0xa')](),controller[_0x104d('0x13')]);module[_0x104d('0x14')]=router;
\ No newline at end of file
+var _0x950f=['/:id','show','create','put','destroy','multer','path','connect-timeout','express','../../components/auth/service','../../config/environment','./intServicenowField.controller','get','isAuthenticated'];(function(_0x2666cc,_0x30da9f){var _0x36c067=function(_0x22846e){while(--_0x22846e){_0x2666cc['push'](_0x2666cc['shift']());}};_0x36c067(++_0x30da9f);}(_0x950f,0x12b));var _0xf950=function(_0x2e0a25,_0x2da7a6){_0x2e0a25=_0x2e0a25-0x0;var _0x359873=_0x950f[_0x2e0a25];return _0x359873;};'use strict';var multer=require(_0xf950('0x0'));var util=require('util');var path=require(_0xf950('0x1'));var timeout=require(_0xf950('0x2'));var express=require(_0xf950('0x3'));var router=express['Router']();var auth=require(_0xf950('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xf950('0x5'));var controller=require(_0xf950('0x6'));router[_0xf950('0x7')]('/',auth[_0xf950('0x8')](),controller['index']);router[_0xf950('0x7')](_0xf950('0x9'),auth[_0xf950('0x8')](),controller[_0xf950('0xa')]);router['post']('/',auth['isAuthenticated'](),controller[_0xf950('0xb')]);router[_0xf950('0xc')](_0xf950('0x9'),auth[_0xf950('0x8')](),controller['update']);router['delete']('/:id',auth['isAuthenticated'](),controller[_0xf950('0xd')]);module['exports']=router;
\ No newline at end of file
index dd85e1b..bc4d028 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x750a=['customVariable','keyValue','string','STRING','ENUM','exports','variable'];(function(_0x16172f,_0x5cee02){var _0x247807=function(_0x16ead5){while(--_0x16ead5){_0x16172f['push'](_0x16172f['shift']());}};_0x247807(++_0x5cee02);}(_0x750a,0x140));var _0xa750=function(_0x94f6a,_0x33be24){_0x94f6a=_0x94f6a-0x0;var _0x2bb557=_0x750a[_0x94f6a];return _0x2bb557;};'use strict';var Sequelize=require('sequelize');module[_0xa750('0x0')]={'type':{'type':Sequelize['ENUM']('string',_0xa750('0x1'),_0xa750('0x2'),_0xa750('0x3')),'defaultValue':_0xa750('0x4')},'content':{'type':Sequelize[_0xa750('0x5')]},'key':{'type':Sequelize[_0xa750('0x5')]},'keyType':{'type':Sequelize[_0xa750('0x6')](_0xa750('0x4'),_0xa750('0x1'),_0xa750('0x2'))},'keyContent':{'type':Sequelize[_0xa750('0x5')]},'idField':{'type':Sequelize[_0xa750('0x5')]},'nameField':{'type':Sequelize[_0xa750('0x5')]},'customField':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xb43b=['ENUM','BOOLEAN','sequelize','exports','string','variable','customVariable','STRING'];(function(_0x229f5e,_0x433f0f){var _0x2d62ff=function(_0xe4d381){while(--_0xe4d381){_0x229f5e['push'](_0x229f5e['shift']());}};_0x2d62ff(++_0x433f0f);}(_0xb43b,0x1b2));var _0xbb43=function(_0x5c483f,_0x4d8e1c){_0x5c483f=_0x5c483f-0x0;var _0x38c00c=_0xb43b[_0x5c483f];return _0x38c00c;};'use strict';var Sequelize=require(_0xbb43('0x0'));module[_0xbb43('0x1')]={'type':{'type':Sequelize['ENUM'](_0xbb43('0x2'),_0xbb43('0x3'),_0xbb43('0x4'),'keyValue'),'defaultValue':_0xbb43('0x2')},'content':{'type':Sequelize[_0xbb43('0x5')]},'key':{'type':Sequelize[_0xbb43('0x5')]},'keyType':{'type':Sequelize[_0xbb43('0x6')]('string','variable',_0xbb43('0x4'))},'keyContent':{'type':Sequelize['STRING']},'idField':{'type':Sequelize[_0xbb43('0x5')]},'nameField':{'type':Sequelize[_0xbb43('0x5')]},'customField':{'type':Sequelize[_0xbb43('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xbb43('0x5')]}};
\ No newline at end of file
index 27b0009..d38afa9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3d94=['send','index','ServicenowField','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','pick','filter','merge','VIRTUAL','field','options','count','includeAll','include','findAll','rows','catch','show','find','create','body','params','rimraf','request-promise','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','status','offset','set','Content-Range','json','save','update','destroy','then','end','sendStatus','stack','name'];(function(_0x130db4,_0x4b4fb3){var _0x4e1e3a=function(_0x5ecc32){while(--_0x5ecc32){_0x130db4['push'](_0x130db4['shift']());}};_0x4e1e3a(++_0x4b4fb3);}(_0x3d94,0x12a));var _0x43d9=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x3d94[_0x2dafbe];return _0x58a45a;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x43d9('0x0'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x43d9('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x43d9('0x2'));var util=require(_0x43d9('0x3'));var path=require(_0x43d9('0x4'));var sox=require(_0x43d9('0x5'));var csv=require(_0x43d9('0x6'));var ejs=require(_0x43d9('0x7'));var fs=require('fs');var _=require(_0x43d9('0x8'));var squel=require('squel');var crypto=require(_0x43d9('0x9'));var jsforce=require(_0x43d9('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x43d9('0xb'));var Redis=require(_0x43d9('0xc'));var authService=require('../../components/auth/service');var qs=require(_0x43d9('0xd'));var hardwareService=require(_0x43d9('0xe'));var logger=require('../../config/logger')(_0x43d9('0xf'));var utils=require(_0x43d9('0x10'));var config=require(_0x43d9('0x11'));var db=require(_0x43d9('0x12'))['db'];function respondWithStatusCode(_0x26ef6f,_0x5d7076){_0x5d7076=_0x5d7076||0xcc;return function(_0x35f26a){if(_0x35f26a){return _0x26ef6f['sendStatus'](_0x5d7076);}return _0x26ef6f[_0x43d9('0x13')](_0x5d7076)['end']();};}function respondWithResult(_0x3ab79f,_0x9908b2){_0x9908b2=_0x9908b2||0xc8;return function(_0x9a2d8d){if(_0x9a2d8d){return _0x3ab79f[_0x43d9('0x13')](_0x9908b2)['json'](_0x9a2d8d);}};}function respondWithFilteredResult(_0x44e4af,_0x48d4ff){return function(_0x103f59){if(_0x103f59){var _0x5d1a48=_0x103f59['count'],_0x2aad86=_0x48d4ff[_0x43d9('0x14')],_0x59b124=_0x48d4ff[_0x43d9('0x14')]+_0x48d4ff['limit'],_0x3a4e6e;if(_0x59b124>=_0x5d1a48){_0x59b124=_0x5d1a48;_0x3a4e6e=0xc8;}else{_0x3a4e6e=0xce;}_0x44e4af[_0x43d9('0x13')](_0x3a4e6e);return _0x44e4af[_0x43d9('0x15')](_0x43d9('0x16'),_0x2aad86+'-'+_0x59b124+'/'+_0x5d1a48)[_0x43d9('0x17')](_0x103f59);}return null;};}function patchUpdates(_0x48d476){return function(_0xf75a18){try{jsonpatch['apply'](_0xf75a18,_0x48d476,!![]);}catch(_0x3480df){return BPromise['reject'](_0x3480df);}return _0xf75a18[_0x43d9('0x18')]();};}function saveUpdates(_0x49f9d3,_0x58e33a){return function(_0x5b5c8d){if(_0x5b5c8d){return _0x5b5c8d[_0x43d9('0x19')](_0x49f9d3)['then'](function(_0x19b61e){return _0x19b61e;});}return null;};}function removeEntity(_0x589811,_0x50ba24){return function(_0x12905a){if(_0x12905a){return _0x12905a[_0x43d9('0x1a')]()[_0x43d9('0x1b')](function(){_0x589811[_0x43d9('0x13')](0xcc)[_0x43d9('0x1c')]();});}};}function handleEntityNotFound(_0xfd0c31,_0x143dcd){return function(_0x13dbe6){if(!_0x13dbe6){_0xfd0c31[_0x43d9('0x1d')](0x194);}return _0x13dbe6;};}function handleError(_0x15a0e0,_0x18987e){_0x18987e=_0x18987e||0x1f4;return function(_0x16b5af){logger['error'](_0x16b5af[_0x43d9('0x1e')]);if(_0x16b5af['name']){delete _0x16b5af[_0x43d9('0x1f')];}_0x15a0e0[_0x43d9('0x13')](_0x18987e)[_0x43d9('0x20')](_0x16b5af);};}exports[_0x43d9('0x21')]=function(_0x545723,_0x4ee40d){var _0x124549={},_0xf89ac2={},_0x47c8ef={'count':0x0,'rows':[]};var _0x5178bc=db[_0x43d9('0x22')][_0x43d9('0x23')];_0xf89ac2[_0x43d9('0x24')]=_[_0x43d9('0x25')](_0x5178bc);_0xf89ac2[_0x43d9('0x26')]=_['keys'](_0x545723['query']);_0xf89ac2[_0x43d9('0x27')]=_[_0x43d9('0x28')](_0xf89ac2['model'],_0xf89ac2['query']);_0x124549[_0x43d9('0x29')]=_[_0x43d9('0x28')](_0xf89ac2['model'],qs['fields'](_0x545723[_0x43d9('0x26')][_0x43d9('0x2a')]));_0x124549[_0x43d9('0x29')]=_0x124549[_0x43d9('0x29')][_0x43d9('0x2b')]?_0x124549[_0x43d9('0x29')]:_0xf89ac2[_0x43d9('0x24')];if(!_0x545723['query'][_0x43d9('0x2c')](_0x43d9('0x2d'))){_0x124549[_0x43d9('0x2e')]=qs[_0x43d9('0x2e')](_0x545723[_0x43d9('0x26')][_0x43d9('0x2e')]);_0x124549[_0x43d9('0x14')]=qs[_0x43d9('0x14')](_0x545723[_0x43d9('0x26')][_0x43d9('0x14')]);}_0x124549['order']=qs[_0x43d9('0x2f')](_0x545723[_0x43d9('0x26')][_0x43d9('0x2f')]);_0x124549[_0x43d9('0x30')]=qs[_0x43d9('0x27')](_[_0x43d9('0x31')](_0x545723[_0x43d9('0x26')],_0xf89ac2[_0x43d9('0x27')]));if(_0x545723[_0x43d9('0x26')][_0x43d9('0x32')]){_0x124549[_0x43d9('0x30')]=_[_0x43d9('0x33')](_0x124549[_0x43d9('0x30')],{'$or':_['map'](_0x5178bc,function(_0x277e23){if(_0x277e23['type']['key']!==_0x43d9('0x34')){var _0x203740={};_0x203740[_0x277e23[_0x43d9('0x35')]]={'$like':'%'+_0x545723[_0x43d9('0x26')]['filter']+'%'};return _0x203740;}})});}_0x124549=_[_0x43d9('0x33')]({},_0x124549,_0x545723[_0x43d9('0x36')]);var _0x5dc936={'where':_0x124549['where']};return db[_0x43d9('0x22')][_0x43d9('0x37')](_0x5dc936)['then'](function(_0x11fd38){_0x47c8ef['count']=_0x11fd38;if(_0x545723['query'][_0x43d9('0x38')]){_0x124549[_0x43d9('0x39')]=[{'all':!![]}];}return db['ServicenowField'][_0x43d9('0x3a')](_0x124549);})[_0x43d9('0x1b')](function(_0x158722){_0x47c8ef[_0x43d9('0x3b')]=_0x158722;return _0x47c8ef;})[_0x43d9('0x1b')](respondWithFilteredResult(_0x4ee40d,_0x124549))[_0x43d9('0x3c')](handleError(_0x4ee40d,null));};exports[_0x43d9('0x3d')]=function(_0xcc7294,_0x4daea3){var _0x2e1531={'raw':!![],'where':{'id':_0xcc7294['params']['id']}},_0x2aff03={};_0x2aff03[_0x43d9('0x24')]=_[_0x43d9('0x25')](db[_0x43d9('0x22')][_0x43d9('0x23')]);_0x2aff03[_0x43d9('0x26')]=_[_0x43d9('0x25')](_0xcc7294['query']);_0x2aff03[_0x43d9('0x27')]=_[_0x43d9('0x28')](_0x2aff03[_0x43d9('0x24')],_0x2aff03[_0x43d9('0x26')]);_0x2e1531['attributes']=_[_0x43d9('0x28')](_0x2aff03[_0x43d9('0x24')],qs[_0x43d9('0x2a')](_0xcc7294['query'][_0x43d9('0x2a')]));_0x2e1531[_0x43d9('0x29')]=_0x2e1531['attributes'][_0x43d9('0x2b')]?_0x2e1531['attributes']:_0x2aff03[_0x43d9('0x24')];if(_0xcc7294['query'][_0x43d9('0x38')]){_0x2e1531['include']=[{'all':!![]}];}_0x2e1531=_['merge']({},_0x2e1531,_0xcc7294[_0x43d9('0x36')]);return db[_0x43d9('0x22')][_0x43d9('0x3e')](_0x2e1531)[_0x43d9('0x1b')](handleEntityNotFound(_0x4daea3,null))['then'](respondWithResult(_0x4daea3,null))[_0x43d9('0x3c')](handleError(_0x4daea3,null));};exports[_0x43d9('0x3f')]=function(_0x112d56,_0x2da44b){return db[_0x43d9('0x22')][_0x43d9('0x3f')](_0x112d56['body'],{})[_0x43d9('0x1b')](respondWithResult(_0x2da44b,0xc9))[_0x43d9('0x3c')](handleError(_0x2da44b,null));};exports[_0x43d9('0x19')]=function(_0x4395c9,_0x12f429){if(_0x4395c9['body']['id']){delete _0x4395c9[_0x43d9('0x40')]['id'];}return db['ServicenowField'][_0x43d9('0x3e')]({'where':{'id':_0x4395c9[_0x43d9('0x41')]['id']}})['then'](handleEntityNotFound(_0x12f429,null))[_0x43d9('0x1b')](saveUpdates(_0x4395c9['body'],null))[_0x43d9('0x1b')](respondWithResult(_0x12f429,null))[_0x43d9('0x3c')](handleError(_0x12f429,null));};exports[_0x43d9('0x1a')]=function(_0xb5a8d,_0x5d4469){return db['ServicenowField'][_0x43d9('0x3e')]({'where':{'id':_0xb5a8d[_0x43d9('0x41')]['id']}})['then'](handleEntityNotFound(_0x5d4469,null))[_0x43d9('0x1b')](removeEntity(_0x5d4469,null))['catch'](handleError(_0x5d4469,null));};
\ No newline at end of file
+var _0x349f=['pick','filter','merge','map','type','field','options','includeAll','findAll','rows','catch','show','params','keys','length','include','find','create','update','body','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','then','destroy','stack','name','send','index','ServicenowField','rawAttributes','query','intersection','model','fields','attributes','hasOwnProperty','nolimit','order','sort','where','filters'];(function(_0x484ad1,_0x4e6e01){var _0x46c82e=function(_0x18a0ed){while(--_0x18a0ed){_0x484ad1['push'](_0x484ad1['shift']());}};_0x46c82e(++_0x4e6e01);}(_0x349f,0xa8));var _0xf349=function(_0x2a07ce,_0x122d63){_0x2a07ce=_0x2a07ce-0x0;var _0x33abd4=_0x349f[_0x2a07ce];return _0x33abd4;};'use strict';var pdf=require(_0xf349('0x0'));var emlformat=require(_0xf349('0x1'));var rimraf=require(_0xf349('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xf349('0x3'));var rp=require(_0xf349('0x4'));var moment=require(_0xf349('0x5'));var BPromise=require(_0xf349('0x6'));var Mustache=require(_0xf349('0x7'));var util=require(_0xf349('0x8'));var path=require(_0xf349('0x9'));var sox=require(_0xf349('0xa'));var csv=require(_0xf349('0xb'));var ejs=require(_0xf349('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0xf349('0xd'));var crypto=require(_0xf349('0xe'));var jsforce=require(_0xf349('0xf'));var deskjs=require(_0xf349('0x10'));var toCsv=require(_0xf349('0xb'));var querystring=require(_0xf349('0x11'));var Papa=require(_0xf349('0x12'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0xf349('0x13'));var hardwareService=require(_0xf349('0x14'));var logger=require(_0xf349('0x15'))(_0xf349('0x16'));var utils=require(_0xf349('0x17'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5cca91,_0x1ffaa5){_0x1ffaa5=_0x1ffaa5||0xcc;return function(_0x238c96){if(_0x238c96){return _0x5cca91[_0xf349('0x18')](_0x1ffaa5);}return _0x5cca91[_0xf349('0x19')](_0x1ffaa5)[_0xf349('0x1a')]();};}function respondWithResult(_0x4e89ee,_0x39ce84){_0x39ce84=_0x39ce84||0xc8;return function(_0x35d833){if(_0x35d833){return _0x4e89ee['status'](_0x39ce84)[_0xf349('0x1b')](_0x35d833);}};}function respondWithFilteredResult(_0x3de88f,_0x590f02){return function(_0x358412){if(_0x358412){var _0x55479f=_0x358412[_0xf349('0x1c')],_0x401ada=_0x590f02[_0xf349('0x1d')],_0x3bc4e4=_0x590f02[_0xf349('0x1d')]+_0x590f02[_0xf349('0x1e')],_0x26b561;if(_0x3bc4e4>=_0x55479f){_0x3bc4e4=_0x55479f;_0x26b561=0xc8;}else{_0x26b561=0xce;}_0x3de88f['status'](_0x26b561);return _0x3de88f[_0xf349('0x1f')]('Content-Range',_0x401ada+'-'+_0x3bc4e4+'/'+_0x55479f)[_0xf349('0x1b')](_0x358412);}return null;};}function patchUpdates(_0x1431fe){return function(_0x296894){try{jsonpatch[_0xf349('0x20')](_0x296894,_0x1431fe,!![]);}catch(_0x363da1){return BPromise[_0xf349('0x21')](_0x363da1);}return _0x296894[_0xf349('0x22')]();};}function saveUpdates(_0x104f9b,_0x5ccd87){return function(_0x282cc8){if(_0x282cc8){return _0x282cc8['update'](_0x104f9b)[_0xf349('0x23')](function(_0x2b00f4){return _0x2b00f4;});}return null;};}function removeEntity(_0x2dccbc,_0x4c0e73){return function(_0x311fc2){if(_0x311fc2){return _0x311fc2[_0xf349('0x24')]()[_0xf349('0x23')](function(){_0x2dccbc['status'](0xcc)[_0xf349('0x1a')]();});}};}function handleEntityNotFound(_0x35c9dd,_0x4d574a){return function(_0x5752b5){if(!_0x5752b5){_0x35c9dd['sendStatus'](0x194);}return _0x5752b5;};}function handleError(_0x100d5d,_0x42d42a){_0x42d42a=_0x42d42a||0x1f4;return function(_0x2dd84a){logger['error'](_0x2dd84a[_0xf349('0x25')]);if(_0x2dd84a[_0xf349('0x26')]){delete _0x2dd84a[_0xf349('0x26')];}_0x100d5d[_0xf349('0x19')](_0x42d42a)[_0xf349('0x27')](_0x2dd84a);};}exports[_0xf349('0x28')]=function(_0x3da7b7,_0x1598d5){var _0x439d32={},_0x1346dd={},_0x403816={'count':0x0,'rows':[]};var _0x345302=db[_0xf349('0x29')][_0xf349('0x2a')];_0x1346dd['model']=_['keys'](_0x345302);_0x1346dd['query']=_['keys'](_0x3da7b7[_0xf349('0x2b')]);_0x1346dd['filters']=_[_0xf349('0x2c')](_0x1346dd['model'],_0x1346dd['query']);_0x439d32['attributes']=_['intersection'](_0x1346dd[_0xf349('0x2d')],qs[_0xf349('0x2e')](_0x3da7b7[_0xf349('0x2b')][_0xf349('0x2e')]));_0x439d32[_0xf349('0x2f')]=_0x439d32['attributes']['length']?_0x439d32[_0xf349('0x2f')]:_0x1346dd[_0xf349('0x2d')];if(!_0x3da7b7[_0xf349('0x2b')][_0xf349('0x30')](_0xf349('0x31'))){_0x439d32['limit']=qs[_0xf349('0x1e')](_0x3da7b7[_0xf349('0x2b')]['limit']);_0x439d32['offset']=qs['offset'](_0x3da7b7[_0xf349('0x2b')][_0xf349('0x1d')]);}_0x439d32[_0xf349('0x32')]=qs['sort'](_0x3da7b7[_0xf349('0x2b')][_0xf349('0x33')]);_0x439d32[_0xf349('0x34')]=qs[_0xf349('0x35')](_[_0xf349('0x36')](_0x3da7b7['query'],_0x1346dd[_0xf349('0x35')]));if(_0x3da7b7['query'][_0xf349('0x37')]){_0x439d32[_0xf349('0x34')]=_[_0xf349('0x38')](_0x439d32[_0xf349('0x34')],{'$or':_[_0xf349('0x39')](_0x345302,function(_0x28a3db){if(_0x28a3db[_0xf349('0x3a')]['key']!=='VIRTUAL'){var _0x4d80cb={};_0x4d80cb[_0x28a3db[_0xf349('0x3b')]]={'$like':'%'+_0x3da7b7[_0xf349('0x2b')]['filter']+'%'};return _0x4d80cb;}})});}_0x439d32=_[_0xf349('0x38')]({},_0x439d32,_0x3da7b7[_0xf349('0x3c')]);var _0x5c387b={'where':_0x439d32[_0xf349('0x34')]};return db[_0xf349('0x29')][_0xf349('0x1c')](_0x5c387b)[_0xf349('0x23')](function(_0x2cc1f3){_0x403816[_0xf349('0x1c')]=_0x2cc1f3;if(_0x3da7b7['query'][_0xf349('0x3d')]){_0x439d32['include']=[{'all':!![]}];}return db['ServicenowField'][_0xf349('0x3e')](_0x439d32);})[_0xf349('0x23')](function(_0x325279){_0x403816[_0xf349('0x3f')]=_0x325279;return _0x403816;})['then'](respondWithFilteredResult(_0x1598d5,_0x439d32))[_0xf349('0x40')](handleError(_0x1598d5,null));};exports[_0xf349('0x41')]=function(_0x562ac1,_0x45f1ab){var _0x4d6880={'raw':!![],'where':{'id':_0x562ac1[_0xf349('0x42')]['id']}},_0x4c15dd={};_0x4c15dd['model']=_[_0xf349('0x43')](db['ServicenowField'][_0xf349('0x2a')]);_0x4c15dd[_0xf349('0x2b')]=_['keys'](_0x562ac1[_0xf349('0x2b')]);_0x4c15dd[_0xf349('0x35')]=_[_0xf349('0x2c')](_0x4c15dd['model'],_0x4c15dd[_0xf349('0x2b')]);_0x4d6880[_0xf349('0x2f')]=_[_0xf349('0x2c')](_0x4c15dd['model'],qs[_0xf349('0x2e')](_0x562ac1[_0xf349('0x2b')][_0xf349('0x2e')]));_0x4d6880[_0xf349('0x2f')]=_0x4d6880[_0xf349('0x2f')][_0xf349('0x44')]?_0x4d6880['attributes']:_0x4c15dd[_0xf349('0x2d')];if(_0x562ac1[_0xf349('0x2b')]['includeAll']){_0x4d6880[_0xf349('0x45')]=[{'all':!![]}];}_0x4d6880=_[_0xf349('0x38')]({},_0x4d6880,_0x562ac1[_0xf349('0x3c')]);return db[_0xf349('0x29')][_0xf349('0x46')](_0x4d6880)['then'](handleEntityNotFound(_0x45f1ab,null))[_0xf349('0x23')](respondWithResult(_0x45f1ab,null))[_0xf349('0x40')](handleError(_0x45f1ab,null));};exports[_0xf349('0x47')]=function(_0x36a600,_0x22b5f4){return db[_0xf349('0x29')]['create'](_0x36a600['body'],{})['then'](respondWithResult(_0x22b5f4,0xc9))[_0xf349('0x40')](handleError(_0x22b5f4,null));};exports[_0xf349('0x48')]=function(_0x423657,_0x3417a6){if(_0x423657[_0xf349('0x49')]['id']){delete _0x423657[_0xf349('0x49')]['id'];}return db[_0xf349('0x29')][_0xf349('0x46')]({'where':{'id':_0x423657[_0xf349('0x42')]['id']}})[_0xf349('0x23')](handleEntityNotFound(_0x3417a6,null))['then'](saveUpdates(_0x423657['body'],null))[_0xf349('0x23')](respondWithResult(_0x3417a6,null))['catch'](handleError(_0x3417a6,null));};exports[_0xf349('0x24')]=function(_0x1ad99a,_0x435193){return db[_0xf349('0x29')]['find']({'where':{'id':_0x1ad99a[_0xf349('0x42')]['id']}})[_0xf349('0x23')](handleEntityNotFound(_0x435193,null))[_0xf349('0x23')](removeEntity(_0x435193,null))[_0xf349('0x40')](handleError(_0x435193,null));};
\ No newline at end of file
index ab88d08..706bd92 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc051=['lodash','../../config/logger','moment','request-promise','path','rimraf','../../config/environment','ServicenowField','int_servicenow_fields','servicenow_unique_index','idField','FieldId'];(function(_0x3d5bdd,_0x3e92ee){var _0x1ba0df=function(_0x199a5c){while(--_0x199a5c){_0x3d5bdd['push'](_0x3d5bdd['shift']());}};_0x1ba0df(++_0x3e92ee);}(_0xc051,0xf0));var _0x1c05=function(_0x5b9894,_0x177c5f){_0x5b9894=_0x5b9894-0x0;var _0xfc7935=_0xc051[_0x5b9894];return _0xfc7935;};'use strict';var _=require(_0x1c05('0x0'));var util=require('util');var logger=require(_0x1c05('0x1'))('api');var moment=require(_0x1c05('0x2'));var BPromise=require('bluebird');var rp=require(_0x1c05('0x3'));var fs=require('fs');var path=require(_0x1c05('0x4'));var rimraf=require(_0x1c05('0x5'));var config=require(_0x1c05('0x6'));var attributes=require('./intServicenowField.attributes');module['exports']=function(_0x16bf1c,_0x207071){return _0x16bf1c['define'](_0x1c05('0x7'),attributes,{'tableName':_0x1c05('0x8'),'paranoid':![],'indexes':[{'name':_0x1c05('0x9'),'fields':[_0x1c05('0xa'),_0x1c05('0xb')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xe443=['api','bluebird','request-promise','path','rimraf','../../config/environment','./intServicenowField.attributes','define','ServicenowField','int_servicenow_fields','idField','FieldId','util','../../config/logger'];(function(_0x10849c,_0x4124f5){var _0x4391c1=function(_0x4e976a){while(--_0x4e976a){_0x10849c['push'](_0x10849c['shift']());}};_0x4391c1(++_0x4124f5);}(_0xe443,0x1da));var _0x3e44=function(_0x5db5d7,_0x503239){_0x5db5d7=_0x5db5d7-0x0;var _0x2a3348=_0xe443[_0x5db5d7];return _0x2a3348;};'use strict';var _=require('lodash');var util=require(_0x3e44('0x0'));var logger=require(_0x3e44('0x1'))(_0x3e44('0x2'));var moment=require('moment');var BPromise=require(_0x3e44('0x3'));var rp=require(_0x3e44('0x4'));var fs=require('fs');var path=require(_0x3e44('0x5'));var rimraf=require(_0x3e44('0x6'));var config=require(_0x3e44('0x7'));var attributes=require(_0x3e44('0x8'));module['exports']=function(_0x1118d6,_0x5391cf){return _0x1118d6[_0x3e44('0x9')](_0x3e44('0xa'),attributes,{'tableName':_0x3e44('0xb'),'paranoid':![],'indexes':[{'name':'servicenow_unique_index','fields':[_0x3e44('0xc'),_0x3e44('0xd')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 50de600..f821772 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x77d4=['ioredis','../../mysqldb','rpc','../../config/environment','jayson/promise','client','http','then','info','ServicenowField,\x20%s,\x20%s','request\x20sent','ServicenowField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','util','bluebird'];(function(_0x2ec461,_0x5f588a){var _0x28603d=function(_0x21114b){while(--_0x21114b){_0x2ec461['push'](_0x2ec461['shift']());}};_0x28603d(++_0x5f588a);}(_0x77d4,0x108));var _0x477d=function(_0x3e23fd,_0x324cb8){_0x3e23fd=_0x3e23fd-0x0;var _0x23e70d=_0x77d4[_0x3e23fd];return _0x23e70d;};'use strict';var _=require('lodash');var util=require(_0x477d('0x0'));var moment=require('moment');var BPromise=require(_0x477d('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x477d('0x2'));var db=require(_0x477d('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x477d('0x4'));var config=require(_0x477d('0x5'));var jayson=require(_0x477d('0x6'));var client=jayson[_0x477d('0x7')][_0x477d('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x45ca2d,_0x5153df,_0x4f4fb4){return new BPromise(function(_0x2dd5d2,_0x579859){return client['request'](_0x45ca2d,_0x4f4fb4)[_0x477d('0x9')](function(_0x29f11b){logger[_0x477d('0xa')](_0x477d('0xb'),_0x5153df,_0x477d('0xc'));logger['debug'](_0x477d('0xd'),_0x5153df,'request\x20sent',JSON[_0x477d('0xe')](_0x29f11b));if(_0x29f11b[_0x477d('0xf')]){if(_0x29f11b['error'][_0x477d('0x10')]===0x1f4){logger[_0x477d('0xf')]('ServicenowField,\x20%s,\x20%s',_0x5153df,_0x29f11b['error'][_0x477d('0x11')]);return _0x579859(_0x29f11b[_0x477d('0xf')]['message']);}logger[_0x477d('0xf')](_0x477d('0xb'),_0x5153df,_0x29f11b['error']['message']);return _0x2dd5d2(_0x29f11b[_0x477d('0xf')]['message']);}else{logger[_0x477d('0xa')](_0x477d('0xb'),_0x5153df,_0x477d('0xc'));_0x2dd5d2(_0x29f11b['result'][_0x477d('0x11')]);}})[_0x477d('0x12')](function(_0x29c6f8){logger[_0x477d('0xf')]('ServicenowField,\x20%s,\x20%s',_0x5153df,_0x29c6f8);_0x579859(_0x29c6f8);});});}
\ No newline at end of file
+var _0xaebd=['ServicenowField,\x20%s,\x20%s,\x20%s','stringify','error','message','ServicenowField,\x20%s,\x20%s','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','request\x20sent'];(function(_0x288225,_0x10267c){var _0x2e52d1=function(_0x334c49){while(--_0x334c49){_0x288225['push'](_0x288225['shift']());}};_0x2e52d1(++_0x10267c);}(_0xaebd,0x1e9));var _0xdaeb=function(_0x1e68c2,_0x343c95){_0x1e68c2=_0x1e68c2-0x0;var _0x8fc74f=_0xaebd[_0x1e68c2];return _0x8fc74f;};'use strict';var _=require(_0xdaeb('0x0'));var util=require('util');var moment=require(_0xdaeb('0x1'));var BPromise=require(_0xdaeb('0x2'));var rs=require(_0xdaeb('0x3'));var fs=require('fs');var Redis=require(_0xdaeb('0x4'));var db=require(_0xdaeb('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xdaeb('0x6'))(_0xdaeb('0x7'));var config=require(_0xdaeb('0x8'));var jayson=require(_0xdaeb('0x9'));var client=jayson[_0xdaeb('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3ea090,_0x3f7ba1,_0x52c717){return new BPromise(function(_0x550bd9,_0x1b9d37){return client[_0xdaeb('0xb')](_0x3ea090,_0x52c717)[_0xdaeb('0xc')](function(_0x5e0ae9){logger[_0xdaeb('0xd')]('ServicenowField,\x20%s,\x20%s',_0x3f7ba1,_0xdaeb('0xe'));logger['debug'](_0xdaeb('0xf'),_0x3f7ba1,'request\x20sent',JSON[_0xdaeb('0x10')](_0x5e0ae9));if(_0x5e0ae9[_0xdaeb('0x11')]){if(_0x5e0ae9['error']['code']===0x1f4){logger[_0xdaeb('0x11')]('ServicenowField,\x20%s,\x20%s',_0x3f7ba1,_0x5e0ae9[_0xdaeb('0x11')][_0xdaeb('0x12')]);return _0x1b9d37(_0x5e0ae9[_0xdaeb('0x11')][_0xdaeb('0x12')]);}logger[_0xdaeb('0x11')](_0xdaeb('0x13'),_0x3f7ba1,_0x5e0ae9[_0xdaeb('0x11')]['message']);return _0x550bd9(_0x5e0ae9['error'][_0xdaeb('0x12')]);}else{logger[_0xdaeb('0xd')](_0xdaeb('0x13'),_0x3f7ba1,_0xdaeb('0xe'));_0x550bd9(_0x5e0ae9['result']['message']);}})[_0xdaeb('0x14')](function(_0x4dd803){logger['error'](_0xdaeb('0x13'),_0x3f7ba1,_0x4dd803);_0x1b9d37(_0x4dd803);});});}
\ No newline at end of file
index 2063e92..558c754 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8cef=['get','isAuthenticated','index','show','/:id/configurations','getFields','addConfiguration','/:id','update','destroy','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','./intSugarcrmAccount.controller'];(function(_0x271f9e,_0xc8e431){var _0x3f07f0=function(_0x4fbfab){while(--_0x4fbfab){_0x271f9e['push'](_0x271f9e['shift']());}};_0x3f07f0(++_0xc8e431);}(_0x8cef,0x1bb));var _0xf8ce=function(_0x10654d,_0x3094aa){_0x10654d=_0x10654d-0x0;var _0x29c7a3=_0x8cef[_0x10654d];return _0x29c7a3;};'use strict';var multer=require(_0xf8ce('0x0'));var util=require('util');var path=require(_0xf8ce('0x1'));var timeout=require('connect-timeout');var express=require(_0xf8ce('0x2'));var router=express[_0xf8ce('0x3')]();var auth=require(_0xf8ce('0x4'));var interaction=require(_0xf8ce('0x5'));var config=require('../../config/environment');var controller=require(_0xf8ce('0x6'));router[_0xf8ce('0x7')]('/',auth[_0xf8ce('0x8')](),controller[_0xf8ce('0x9')]);router[_0xf8ce('0x7')]('/:id',auth[_0xf8ce('0x8')](),controller[_0xf8ce('0xa')]);router['get'](_0xf8ce('0xb'),auth[_0xf8ce('0x8')](),controller['getConfigurations']);router[_0xf8ce('0x7')]('/:id/fields',auth[_0xf8ce('0x8')](),controller[_0xf8ce('0xc')]);router['post']('/',auth['isAuthenticated'](),controller['create']);router['post']('/:id/configurations',auth[_0xf8ce('0x8')](),controller[_0xf8ce('0xd')]);router['put'](_0xf8ce('0xe'),auth[_0xf8ce('0x8')](),controller[_0xf8ce('0xf')]);router['delete'](_0xf8ce('0xe'),auth[_0xf8ce('0x8')](),controller[_0xf8ce('0x10')]);module[_0xf8ce('0x11')]=router;
\ No newline at end of file
+var _0x6172=['util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./intSugarcrmAccount.controller','get','isAuthenticated','index','show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','create','addConfiguration','put','/:id','update','delete','destroy','multer'];(function(_0x21dd50,_0x921f70){var _0x1b7d5e=function(_0x317101){while(--_0x317101){_0x21dd50['push'](_0x21dd50['shift']());}};_0x1b7d5e(++_0x921f70);}(_0x6172,0x18f));var _0x2617=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x6172[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x2617('0x0'));var util=require(_0x2617('0x1'));var path=require(_0x2617('0x2'));var timeout=require(_0x2617('0x3'));var express=require(_0x2617('0x4'));var router=express[_0x2617('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x2617('0x6'));var config=require(_0x2617('0x7'));var controller=require(_0x2617('0x8'));router[_0x2617('0x9')]('/',auth[_0x2617('0xa')](),controller[_0x2617('0xb')]);router[_0x2617('0x9')]('/:id',auth[_0x2617('0xa')](),controller[_0x2617('0xc')]);router['get'](_0x2617('0xd'),auth['isAuthenticated'](),controller[_0x2617('0xe')]);router[_0x2617('0x9')](_0x2617('0xf'),auth[_0x2617('0xa')](),controller[_0x2617('0x10')]);router[_0x2617('0x11')]('/',auth[_0x2617('0xa')](),controller[_0x2617('0x12')]);router['post'](_0x2617('0xd'),auth['isAuthenticated'](),controller[_0x2617('0x13')]);router[_0x2617('0x14')](_0x2617('0x15'),auth['isAuthenticated'](),controller[_0x2617('0x16')]);router[_0x2617('0x17')](_0x2617('0x15'),auth[_0x2617('0xa')](),controller[_0x2617('0x18')]);module['exports']=router;
\ No newline at end of file
index 54b674a..4bf34ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x638b=['username','exports','STRING'];(function(_0x2d9ece,_0x282f1c){var _0x4e2c19=function(_0x14ff16){while(--_0x14ff16){_0x2d9ece['push'](_0x2d9ece['shift']());}};_0x4e2c19(++_0x282f1c);}(_0x638b,0x94));var _0xb638=function(_0x38e881,_0x25c4c0){_0x38e881=_0x38e881-0x0;var _0xd1e998=_0x638b[_0x38e881];return _0xd1e998;};'use strict';var Sequelize=require('sequelize');module[_0xb638('0x0')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xb638('0x1')]},'username':{'type':Sequelize['STRING'],'unique':_0xb638('0x2')},'password':{'type':Sequelize[_0xb638('0x1')]},'remoteUri':{'type':Sequelize[_0xb638('0x1')],'unique':'remoteUri'},'serverUrl':{'type':Sequelize[_0xb638('0x1')]}};
\ No newline at end of file
+var _0xc7b1=['remoteUri','sequelize','STRING','username'];(function(_0x1e597b,_0xaca62f){var _0x5318f7=function(_0x967905){while(--_0x967905){_0x1e597b['push'](_0x1e597b['shift']());}};_0x5318f7(++_0xaca62f);}(_0xc7b1,0xe5));var _0x1c7b=function(_0x423e15,_0x12b2b2){_0x423e15=_0x423e15-0x0;var _0x184279=_0xc7b1[_0x423e15];return _0x184279;};'use strict';var Sequelize=require(_0x1c7b('0x0'));module['exports']={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x1c7b('0x1')]},'username':{'type':Sequelize[_0x1c7b('0x1')],'unique':_0x1c7b('0x2')},'password':{'type':Sequelize[_0x1c7b('0x1')]},'remoteUri':{'type':Sequelize['STRING'],'unique':_0x1c7b('0x3')},'serverUrl':{'type':Sequelize[_0x1c7b('0x1')]}};
\ No newline at end of file
index 9723296..6721f2d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7c62=['Calls','values','module_fields','remove','includes','label','endsWith','value','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','util','path','sox','to-csv','lodash','squel','crypto','jsforce','querystring','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../components/integrations/configuration','jayson/promise','http','test','then','info','SugarcrmAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','SugarcrmAccount,\x20%s,\x20%s','message','request\x20sent','result','catch','end','status','json','offset','limit','set','Content-Range','apply','save','update','destroy','sendStatus','stack','name','send','index','SugarcrmAccount','rawAttributes','keys','query','filters','intersection','model','fields','attributes','length','sort','where','pick','filter','merge','type','key','VIRTUAL','options','count','includeAll','findAll','show','params','include','find','create','body','getConfigurations','SugarcrmConfiguration','order','map','nolimit','addConfiguration','findOne','Subjects','getSubjects','channel','Descriptions','SugarcrmField','getFields','assigned_user_id','description','duration_hours','duration_minutes','parent_id','parent_type','direction','password','remoteUri','slice','substring','POST','format','%s%s','/service/v4_1/rest.php','JSON','username','PLAIN','xCALLY\x20Motion\x20Integration','Invalid\x20Login','Password\x20Expired'];(function(_0x44b152,_0x1280e2){var _0x2c8d1d=function(_0x186c7e){while(--_0x186c7e){_0x44b152['push'](_0x44b152['shift']());}};_0x2c8d1d(++_0x1280e2);}(_0x7c62,0x101));var _0x27c6=function(_0x443cc1,_0x50ccb0){_0x443cc1=_0x443cc1-0x0;var _0x543163=_0x7c62[_0x443cc1];return _0x543163;};'use strict';var pdf=require(_0x27c6('0x0'));var emlformat=require(_0x27c6('0x1'));var rimraf=require(_0x27c6('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x27c6('0x3'));var rp=require(_0x27c6('0x4'));var moment=require('moment');var BPromise=require(_0x27c6('0x5'));var Mustache=require('mustache');var util=require(_0x27c6('0x6'));var path=require(_0x27c6('0x7'));var sox=require(_0x27c6('0x8'));var csv=require(_0x27c6('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x27c6('0xa'));var squel=require(_0x27c6('0xb'));var crypto=require(_0x27c6('0xc'));var jsforce=require(_0x27c6('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x27c6('0x9'));var querystring=require(_0x27c6('0xe'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x27c6('0xf'));var hardwareService=require(_0x27c6('0x10'));var logger=require(_0x27c6('0x11'))(_0x27c6('0x12'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var integrations=require(_0x27c6('0x13'));var jayson=require(_0x27c6('0x14'));var client=jayson['client'][_0x27c6('0x15')]({'port':0x232a});function checkPasswordPattern(_0x41e360,_0x585ce4,_0x22dbe2){if(_0x22dbe2){var _0x1de0b2=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1de0b2[_0x27c6('0x16')](_0x585ce4)){return _0x41e360;}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 _0x41e360;}}function respondWithRpcPromise(_0x1b3d84,_0x42f561,_0x208766,_0x34d440){return new BPromise(function(_0x246cea,_0x16009b){var _0x2b90cd=_0x34d440||client;return _0x2b90cd['request'](_0x1b3d84,_0x208766)[_0x27c6('0x17')](function(_0x2da2a6){logger[_0x27c6('0x18')]('SugarcrmAccount,\x20%s,\x20%s',_0x42f561,'request\x20sent');logger['debug'](_0x27c6('0x19'),_0x42f561,'request\x20sent',JSON[_0x27c6('0x1a')](_0x2da2a6));if(_0x2da2a6[_0x27c6('0x1b')]){if(_0x2da2a6['error'][_0x27c6('0x1c')]===0x1f4){logger['error'](_0x27c6('0x1d'),_0x42f561,_0x2da2a6[_0x27c6('0x1b')][_0x27c6('0x1e')]);return _0x16009b(_0x2da2a6[_0x27c6('0x1b')][_0x27c6('0x1e')]);}logger[_0x27c6('0x1b')]('SugarcrmAccount,\x20%s,\x20%s',_0x42f561,_0x2da2a6[_0x27c6('0x1b')]['message']);return _0x246cea(_0x2da2a6[_0x27c6('0x1b')][_0x27c6('0x1e')]);}else{logger[_0x27c6('0x18')](_0x27c6('0x1d'),_0x42f561,_0x27c6('0x1f'));_0x246cea(_0x2da2a6[_0x27c6('0x20')][_0x27c6('0x1e')]);}})[_0x27c6('0x21')](function(_0x2fcb71){logger[_0x27c6('0x1b')](_0x27c6('0x1d'),_0x42f561,_0x2fcb71);_0x16009b(_0x2fcb71);});});}function respondWithStatusCode(_0x343858,_0x343071){_0x343071=_0x343071||0xcc;return function(_0x1a8c9){if(_0x1a8c9){return _0x343858['sendStatus'](_0x343071);}return _0x343858['status'](_0x343071)[_0x27c6('0x22')]();};}function respondWithResult(_0x219324,_0x56a222){_0x56a222=_0x56a222||0xc8;return function(_0x4efac6){if(_0x4efac6){return _0x219324[_0x27c6('0x23')](_0x56a222)[_0x27c6('0x24')](_0x4efac6);}};}function respondWithFilteredResult(_0x31f6b0,_0x480882){return function(_0x2317f2){if(_0x2317f2){var _0x4ad125=_0x2317f2['count'],_0x546721=_0x480882['offset'],_0x130577=_0x480882[_0x27c6('0x25')]+_0x480882[_0x27c6('0x26')],_0x417a64;if(_0x130577>=_0x4ad125){_0x130577=_0x4ad125;_0x417a64=0xc8;}else{_0x417a64=0xce;}_0x31f6b0[_0x27c6('0x23')](_0x417a64);return _0x31f6b0[_0x27c6('0x27')](_0x27c6('0x28'),_0x546721+'-'+_0x130577+'/'+_0x4ad125)[_0x27c6('0x24')](_0x2317f2);}return null;};}function patchUpdates(_0x3afc9c){return function(_0x4361ff){try{jsonpatch[_0x27c6('0x29')](_0x4361ff,_0x3afc9c,!![]);}catch(_0x2fa342){return BPromise['reject'](_0x2fa342);}return _0x4361ff[_0x27c6('0x2a')]();};}function saveUpdates(_0x10da30,_0x16f488){return function(_0x4f6213){if(_0x4f6213){return _0x4f6213[_0x27c6('0x2b')](_0x10da30)[_0x27c6('0x17')](function(_0x1ecab0){return _0x1ecab0;});}return null;};}function removeEntity(_0x2577e3,_0x4efa51){return function(_0x2f3e8c){if(_0x2f3e8c){return _0x2f3e8c[_0x27c6('0x2c')]()[_0x27c6('0x17')](function(){_0x2577e3['status'](0xcc)[_0x27c6('0x22')]();});}};}function handleEntityNotFound(_0x3fe0b3,_0x4f10a4){return function(_0x2fa560){if(!_0x2fa560){_0x3fe0b3[_0x27c6('0x2d')](0x194);}return _0x2fa560;};}function handleError(_0x1bae98,_0x4ebfbf){_0x4ebfbf=_0x4ebfbf||0x1f4;return function(_0x16cea9){logger[_0x27c6('0x1b')](_0x16cea9[_0x27c6('0x2e')]);if(_0x16cea9[_0x27c6('0x2f')]){delete _0x16cea9[_0x27c6('0x2f')];}_0x1bae98[_0x27c6('0x23')](_0x4ebfbf)[_0x27c6('0x30')](_0x16cea9);};}exports[_0x27c6('0x31')]=function(_0x5e64de,_0x703b0b){var _0x3527fe={},_0x3ad560={},_0x3c8f86={'count':0x0,'rows':[]};var _0x210ebf=db[_0x27c6('0x32')][_0x27c6('0x33')];_0x3ad560['model']=_[_0x27c6('0x34')](_0x210ebf);_0x3ad560[_0x27c6('0x35')]=_[_0x27c6('0x34')](_0x5e64de[_0x27c6('0x35')]);_0x3ad560[_0x27c6('0x36')]=_[_0x27c6('0x37')](_0x3ad560[_0x27c6('0x38')],_0x3ad560[_0x27c6('0x35')]);_0x3527fe['attributes']=_[_0x27c6('0x37')](_0x3ad560['model'],qs[_0x27c6('0x39')](_0x5e64de[_0x27c6('0x35')]['fields']));_0x3527fe[_0x27c6('0x3a')]=_0x3527fe[_0x27c6('0x3a')][_0x27c6('0x3b')]?_0x3527fe[_0x27c6('0x3a')]:_0x3ad560[_0x27c6('0x38')];if(!_0x5e64de[_0x27c6('0x35')]['hasOwnProperty']('nolimit')){_0x3527fe[_0x27c6('0x26')]=qs[_0x27c6('0x26')](_0x5e64de[_0x27c6('0x35')][_0x27c6('0x26')]);_0x3527fe[_0x27c6('0x25')]=qs[_0x27c6('0x25')](_0x5e64de[_0x27c6('0x35')][_0x27c6('0x25')]);}_0x3527fe['order']=qs[_0x27c6('0x3c')](_0x5e64de['query']['sort']);_0x3527fe[_0x27c6('0x3d')]=qs[_0x27c6('0x36')](_[_0x27c6('0x3e')](_0x5e64de[_0x27c6('0x35')],_0x3ad560[_0x27c6('0x36')]));if(_0x5e64de[_0x27c6('0x35')][_0x27c6('0x3f')]){_0x3527fe[_0x27c6('0x3d')]=_[_0x27c6('0x40')](_0x3527fe[_0x27c6('0x3d')],{'$or':_['map'](_0x210ebf,function(_0x537b2c){if(_0x537b2c[_0x27c6('0x41')][_0x27c6('0x42')]!==_0x27c6('0x43')){var _0x1c5561={};_0x1c5561[_0x537b2c['field']]={'$like':'%'+_0x5e64de[_0x27c6('0x35')][_0x27c6('0x3f')]+'%'};return _0x1c5561;}})});}_0x3527fe=_['merge']({},_0x3527fe,_0x5e64de[_0x27c6('0x44')]);var _0x333547={'where':_0x3527fe[_0x27c6('0x3d')]};return db['SugarcrmAccount']['count'](_0x333547)[_0x27c6('0x17')](function(_0x4f91af){_0x3c8f86[_0x27c6('0x45')]=_0x4f91af;if(_0x5e64de[_0x27c6('0x35')][_0x27c6('0x46')]){_0x3527fe['include']=[{'all':!![]}];}return db[_0x27c6('0x32')][_0x27c6('0x47')](_0x3527fe);})[_0x27c6('0x17')](function(_0x295e8f){_0x3c8f86['rows']=_0x295e8f;return _0x3c8f86;})['then'](respondWithFilteredResult(_0x703b0b,_0x3527fe))['catch'](handleError(_0x703b0b,null));};exports[_0x27c6('0x48')]=function(_0x26b023,_0x5ba60e){var _0x1f4bce={'raw':![],'where':{'id':_0x26b023[_0x27c6('0x49')]['id']}},_0x1da09b={};_0x1da09b['model']=_[_0x27c6('0x34')](db[_0x27c6('0x32')][_0x27c6('0x33')]);_0x1da09b[_0x27c6('0x35')]=_[_0x27c6('0x34')](_0x26b023['query']);_0x1da09b[_0x27c6('0x36')]=_[_0x27c6('0x37')](_0x1da09b[_0x27c6('0x38')],_0x1da09b[_0x27c6('0x35')]);_0x1f4bce[_0x27c6('0x3a')]=_['intersection'](_0x1da09b[_0x27c6('0x38')],qs[_0x27c6('0x39')](_0x26b023['query']['fields']));_0x1f4bce[_0x27c6('0x3a')]=_0x1f4bce[_0x27c6('0x3a')][_0x27c6('0x3b')]?_0x1f4bce[_0x27c6('0x3a')]:_0x1da09b[_0x27c6('0x38')];if(_0x26b023[_0x27c6('0x35')][_0x27c6('0x46')]){_0x1f4bce[_0x27c6('0x4a')]=[{'all':!![]}];}_0x1f4bce=_['merge']({},_0x1f4bce,_0x26b023[_0x27c6('0x44')]);return db['SugarcrmAccount'][_0x27c6('0x4b')](_0x1f4bce)[_0x27c6('0x17')](handleEntityNotFound(_0x5ba60e,null))[_0x27c6('0x17')](respondWithResult(_0x5ba60e,null))['catch'](handleError(_0x5ba60e,null));};exports[_0x27c6('0x4c')]=function(_0x4adec4,_0x1a2830){return db[_0x27c6('0x32')][_0x27c6('0x4c')](_0x4adec4[_0x27c6('0x4d')],{})['then'](respondWithResult(_0x1a2830,0xc9))['catch'](handleError(_0x1a2830,null));};exports['update']=function(_0x5bedfd,_0xb13ab6){if(_0x5bedfd[_0x27c6('0x4d')]['id']){delete _0x5bedfd[_0x27c6('0x4d')]['id'];}return db[_0x27c6('0x32')][_0x27c6('0x4b')]({'where':{'id':_0x5bedfd[_0x27c6('0x49')]['id']}})[_0x27c6('0x17')](handleEntityNotFound(_0xb13ab6,null))[_0x27c6('0x17')](saveUpdates(_0x5bedfd['body'],null))[_0x27c6('0x17')](respondWithResult(_0xb13ab6,null))['catch'](handleError(_0xb13ab6,null));};exports[_0x27c6('0x2c')]=function(_0xa24d8d,_0x4397fa){return db[_0x27c6('0x32')][_0x27c6('0x4b')]({'where':{'id':_0xa24d8d[_0x27c6('0x49')]['id']}})[_0x27c6('0x17')](handleEntityNotFound(_0x4397fa,null))[_0x27c6('0x17')](removeEntity(_0x4397fa,null))['catch'](handleError(_0x4397fa,null));};exports[_0x27c6('0x4e')]=function(_0x73fe3b,_0x5266ea,_0x139ce4){var _0x586e71={};var _0x31ba17={};var _0x55d8ee;var _0x2ac8aa;return db['SugarcrmAccount']['findOne']({'where':{'id':_0x73fe3b['params']['id']}})[_0x27c6('0x17')](handleEntityNotFound(_0x5266ea,null))[_0x27c6('0x17')](function(_0x2efb50){if(_0x2efb50){_0x55d8ee=_0x2efb50;_0x31ba17[_0x27c6('0x38')]=_[_0x27c6('0x34')](db[_0x27c6('0x4f')][_0x27c6('0x33')]);_0x31ba17[_0x27c6('0x35')]=_[_0x27c6('0x34')](_0x73fe3b[_0x27c6('0x35')]);_0x31ba17[_0x27c6('0x36')]=_[_0x27c6('0x37')](_0x31ba17[_0x27c6('0x38')],_0x31ba17[_0x27c6('0x35')]);_0x586e71['attributes']=_['intersection'](_0x31ba17[_0x27c6('0x38')],qs[_0x27c6('0x39')](_0x73fe3b[_0x27c6('0x35')]['fields']));_0x586e71[_0x27c6('0x3a')]=_0x586e71[_0x27c6('0x3a')][_0x27c6('0x3b')]?_0x586e71[_0x27c6('0x3a')]:_0x31ba17['model'];_0x586e71[_0x27c6('0x50')]=qs[_0x27c6('0x3c')](_0x73fe3b['query'][_0x27c6('0x3c')]);_0x586e71[_0x27c6('0x3d')]=qs['filters'](_[_0x27c6('0x3e')](_0x73fe3b[_0x27c6('0x35')],_0x31ba17['filters']));if(_0x73fe3b[_0x27c6('0x35')]['filter']){_0x586e71[_0x27c6('0x3d')]=_['merge'](_0x586e71[_0x27c6('0x3d')],{'$or':_[_0x27c6('0x51')](_0x586e71['attributes'],function(_0x3dff77){var _0x2be999={};_0x2be999[_0x3dff77]={'$like':'%'+_0x73fe3b[_0x27c6('0x35')][_0x27c6('0x3f')]+'%'};return _0x2be999;})});}_0x586e71=_['merge']({},_0x586e71,_0x73fe3b[_0x27c6('0x44')]);return _0x55d8ee[_0x27c6('0x4e')](_0x586e71);}})['then'](function(_0x48674f){if(_0x48674f){_0x2ac8aa=_0x48674f[_0x27c6('0x3b')];if(!_0x73fe3b[_0x27c6('0x35')]['hasOwnProperty'](_0x27c6('0x52'))){_0x586e71[_0x27c6('0x26')]=qs[_0x27c6('0x26')](_0x73fe3b[_0x27c6('0x35')][_0x27c6('0x26')]);_0x586e71[_0x27c6('0x25')]=qs[_0x27c6('0x25')](_0x73fe3b[_0x27c6('0x35')]['offset']);}return _0x55d8ee[_0x27c6('0x4e')](_0x586e71);}})[_0x27c6('0x17')](function(_0x5c50c0){if(_0x5c50c0){return _0x5c50c0?{'count':_0x2ac8aa,'rows':_0x5c50c0}:null;}})[_0x27c6('0x17')](respondWithResult(_0x5266ea,null))[_0x27c6('0x21')](handleError(_0x5266ea,null));};exports[_0x27c6('0x53')]=function(_0x276b88,_0x1a1b55,_0x4ced8d){if(_0x276b88[_0x27c6('0x4d')]['id']){delete _0x276b88['body']['id'];}return db[_0x27c6('0x32')][_0x27c6('0x54')]({'where':{'id':_0x276b88[_0x27c6('0x49')]['id']}})['then'](handleEntityNotFound(_0x1a1b55,null))['then'](function(_0x5117d3){if(_0x5117d3){_0x276b88[_0x27c6('0x4d')]['AccountId']=_0x5117d3['id'];_0x276b88[_0x27c6('0x4d')][_0x27c6('0x55')]=integrations[_0x27c6('0x56')](_0x276b88[_0x27c6('0x4d')][_0x27c6('0x57')],_0x276b88['body']['type']);_0x276b88[_0x27c6('0x4d')][_0x27c6('0x58')]=integrations['getDescriptions'](_0x276b88[_0x27c6('0x4d')][_0x27c6('0x57')],_0x276b88['body'][_0x27c6('0x41')]);return db[_0x27c6('0x4f')][_0x27c6('0x4c')](_0x276b88[_0x27c6('0x4d')],{'include':[{'model':db['SugarcrmField'],'as':_0x27c6('0x55')},{'model':db[_0x27c6('0x59')],'as':_0x27c6('0x58')}]});}return null;})[_0x27c6('0x17')](respondWithResult(_0x1a1b55,null))[_0x27c6('0x21')](handleError(_0x1a1b55,null));};exports[_0x27c6('0x5a')]=function(_0x513c0f,_0x43af66,_0x3619d2){var _0x2f5b5c='';var _0x33e7e3=['id','name',_0x27c6('0x5b'),'created_by',_0x27c6('0x5c'),'date_start',_0x27c6('0x5d'),_0x27c6('0x5e'),_0x27c6('0x5f'),_0x27c6('0x60'),'parent_name',_0x27c6('0x61')];return db[_0x27c6('0x32')][_0x27c6('0x54')]({'where':{'id':_0x513c0f[_0x27c6('0x49')]['id']},'attributes':['id','username',_0x27c6('0x62'),'remoteUri']})[_0x27c6('0x17')](handleEntityNotFound(_0x43af66,null))[_0x27c6('0x17')](function(_0x309b45){if(_0x309b45){_0x2f5b5c=_0x309b45[_0x27c6('0x63')];var _0x2121b9=_0x2f5b5c[_0x27c6('0x64')](-0x1);if(_0x2121b9==='/'){_0x2f5b5c=_0x2f5b5c[_0x27c6('0x65')](0x0,_0x2f5b5c['lastIndexOf'](_0x2121b9));}return rp({'method':_0x27c6('0x66'),'uri':util[_0x27c6('0x67')](_0x27c6('0x68'),_0x2f5b5c,_0x27c6('0x69')),'json':!![],'form':{'method':'login','input_type':'JSON','response_type':_0x27c6('0x6a'),'rest_data':JSON[_0x27c6('0x1a')]({'user_auth':{'user_name':_0x309b45[_0x27c6('0x6b')],'password':_0x309b45[_0x27c6('0x62')],'encryption':_0x27c6('0x6c')},'application':_0x27c6('0x6d')})}});}})[_0x27c6('0x17')](function(_0x321fab){if(_0x321fab&&_0x321fab[_0x27c6('0x2f')]!==_0x27c6('0x6e')&&_0x321fab[_0x27c6('0x2f')]!==_0x27c6('0x6f')){return rp({'method':_0x27c6('0x66'),'uri':util[_0x27c6('0x67')]('%s%s',_0x2f5b5c,_0x27c6('0x69')),'json':!![],'form':{'method':'get_module_fields','input_type':_0x27c6('0x6a'),'response_type':'JSON','rest_data':JSON[_0x27c6('0x1a')]({'session':_0x321fab['id'],'module_name':_0x27c6('0x70')})}})[_0x27c6('0x17')](function(_0x4cd04e){if(_0x4cd04e){var _0x5c9c8d=_[_0x27c6('0x71')](_0x4cd04e[_0x27c6('0x72')]);_[_0x27c6('0x73')](_0x5c9c8d,function(_0x16bef8){return _0x33e7e3[_0x27c6('0x74')](_0x16bef8[_0x27c6('0x2f')]);});return{'count':_0x5c9c8d[_0x27c6('0x3b')],'rows':_[_0x27c6('0x51')](_0x5c9c8d,function(_0x1519f5){return{'id':_0x1519f5[_0x27c6('0x2f')],'name':_0x1519f5[_0x27c6('0x75')],'custom':_[_0x27c6('0x76')](_0x1519f5[_0x27c6('0x2f')],'_c')?!![]:![],'options':_0x1519f5[_0x27c6('0x44')]?_[_0x27c6('0x51')](_[_0x27c6('0x71')](_0x1519f5['options']),function(_0x36378f){return{'name':_0x36378f[_0x27c6('0x77')],'value':_0x36378f[_0x27c6('0x2f')]};}):[]};})};}})[_0x27c6('0x17')](respondWithResult(_0x43af66,null))[_0x27c6('0x21')](function(_0x475445){var _0x6066ff=_0x513c0f[_0x27c6('0x35')][_0x27c6('0x16')]?0x1f4:_0x475445[_0x27c6('0x78')]||0x1f4;logger[_0x27c6('0x1b')](_0x27c6('0x79'),'getFields',_0x6066ff,JSON[_0x27c6('0x1a')](_0x475445));delete _0x475445[_0x27c6('0x2f')];if(_0x6066ff===0x191){_0x6066ff=0x190;}_0x43af66[_0x27c6('0x23')](_0x6066ff)[_0x27c6('0x30')](_0x513c0f[_0x27c6('0x35')][_0x27c6('0x16')]?{'message':_0x27c6('0x7a'),'statusCode':_0x475445[_0x27c6('0x78')]}:_0x475445);});}else{var _0x5a210b=0x1f4;_0x43af66['status'](_0x5a210b)['send']({'message':_0x27c6('0x7a'),'statusCode':0x190});}});};
\ No newline at end of file
+var _0x376b=['remoteUri','slice','lastIndexOf','POST','format','/service/v4_1/rest.php','JSON','PLAIN','xCALLY\x20Motion\x20Integration','Invalid\x20Login','Password\x20Expired','Calls','values','remove','endsWith','statusCode','getFields,\x20%s,\x20%s,\x20%s','getFields','Wrong\x20credentials','html-pdf','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../mysqldb','jayson/promise','client','http','test','request','then','info','SugarcrmAccount,\x20%s,\x20%s','debug','SugarcrmAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','code','error','message','sendStatus','status','end','json','offset','limit','set','apply','reject','update','destroy','name','send','index','SugarcrmAccount','rawAttributes','keys','query','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','sort','filters','pick','filter','where','map','type','key','field','options','count','includeAll','include','findAll','rows','catch','show','params','merge','find','create','body','getConfigurations','findOne','SugarcrmConfiguration','AccountId','Subjects','getSubjects','channel','getDescriptions','SugarcrmField','Descriptions','assigned_user_id','created_by','date_start','duration_hours','duration_minutes','parent_type','parent_name','direction','username','password'];(function(_0x1a88f9,_0x3fd16c){var _0x400c80=function(_0x210cc5){while(--_0x210cc5){_0x1a88f9['push'](_0x1a88f9['shift']());}};_0x400c80(++_0x3fd16c);}(_0x376b,0x10b));var _0xb376=function(_0x25dc57,_0x4b6dbe){_0x25dc57=_0x25dc57-0x0;var _0x58ade7=_0x376b[_0x25dc57];return _0x58ade7;};'use strict';var pdf=require(_0xb376('0x0'));var emlformat=require(_0xb376('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xb376('0x2'));var jsonpatch=require(_0xb376('0x3'));var rp=require('request-promise');var moment=require(_0xb376('0x4'));var BPromise=require(_0xb376('0x5'));var Mustache=require(_0xb376('0x6'));var util=require(_0xb376('0x7'));var path=require(_0xb376('0x8'));var sox=require(_0xb376('0x9'));var csv=require(_0xb376('0xa'));var ejs=require(_0xb376('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0xb376('0xc'));var crypto=require(_0xb376('0xd'));var jsforce=require(_0xb376('0xe'));var deskjs=require(_0xb376('0xf'));var toCsv=require(_0xb376('0xa'));var querystring=require(_0xb376('0x10'));var Papa=require(_0xb376('0x11'));var Redis=require(_0xb376('0x12'));var authService=require(_0xb376('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xb376('0x14'));var logger=require('../../config/logger')(_0xb376('0x15'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xb376('0x16'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0xb376('0x17'));var client=jayson[_0xb376('0x18')][_0xb376('0x19')]({'port':0x232a});function checkPasswordPattern(_0x144fe3,_0x747ab2,_0x4b70ca){if(_0x4b70ca){var _0x3865e6=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3865e6[_0xb376('0x1a')](_0x747ab2)){return _0x144fe3;}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 _0x144fe3;}}function respondWithRpcPromise(_0xfe47cf,_0x467e81,_0x4e32e4,_0x5c8af4){return new BPromise(function(_0x79ea2e,_0x7a1166){var _0x492d1e=_0x5c8af4||client;return _0x492d1e[_0xb376('0x1b')](_0xfe47cf,_0x4e32e4)[_0xb376('0x1c')](function(_0x53b7bc){logger[_0xb376('0x1d')](_0xb376('0x1e'),_0x467e81,'request\x20sent');logger[_0xb376('0x1f')](_0xb376('0x20'),_0x467e81,_0xb376('0x21'),JSON[_0xb376('0x22')](_0x53b7bc));if(_0x53b7bc['error']){if(_0x53b7bc['error'][_0xb376('0x23')]===0x1f4){logger[_0xb376('0x24')]('SugarcrmAccount,\x20%s,\x20%s',_0x467e81,_0x53b7bc[_0xb376('0x24')][_0xb376('0x25')]);return _0x7a1166(_0x53b7bc[_0xb376('0x24')][_0xb376('0x25')]);}logger[_0xb376('0x24')](_0xb376('0x1e'),_0x467e81,_0x53b7bc['error'][_0xb376('0x25')]);return _0x79ea2e(_0x53b7bc[_0xb376('0x24')][_0xb376('0x25')]);}else{logger[_0xb376('0x1d')](_0xb376('0x1e'),_0x467e81,_0xb376('0x21'));_0x79ea2e(_0x53b7bc['result'][_0xb376('0x25')]);}})['catch'](function(_0x5d989f){logger['error']('SugarcrmAccount,\x20%s,\x20%s',_0x467e81,_0x5d989f);_0x7a1166(_0x5d989f);});});}function respondWithStatusCode(_0x271f03,_0xfac3){_0xfac3=_0xfac3||0xcc;return function(_0x17c584){if(_0x17c584){return _0x271f03[_0xb376('0x26')](_0xfac3);}return _0x271f03[_0xb376('0x27')](_0xfac3)[_0xb376('0x28')]();};}function respondWithResult(_0x10040b,_0x129f42){_0x129f42=_0x129f42||0xc8;return function(_0x2bc108){if(_0x2bc108){return _0x10040b[_0xb376('0x27')](_0x129f42)[_0xb376('0x29')](_0x2bc108);}};}function respondWithFilteredResult(_0x280837,_0x346f52){return function(_0x34e1ee){if(_0x34e1ee){var _0x121bb3=_0x34e1ee['count'],_0x232a05=_0x346f52[_0xb376('0x2a')],_0x242678=_0x346f52[_0xb376('0x2a')]+_0x346f52[_0xb376('0x2b')],_0xed5327;if(_0x242678>=_0x121bb3){_0x242678=_0x121bb3;_0xed5327=0xc8;}else{_0xed5327=0xce;}_0x280837[_0xb376('0x27')](_0xed5327);return _0x280837[_0xb376('0x2c')]('Content-Range',_0x232a05+'-'+_0x242678+'/'+_0x121bb3)[_0xb376('0x29')](_0x34e1ee);}return null;};}function patchUpdates(_0x521ec5){return function(_0x86655){try{jsonpatch[_0xb376('0x2d')](_0x86655,_0x521ec5,!![]);}catch(_0x2e869b){return BPromise[_0xb376('0x2e')](_0x2e869b);}return _0x86655['save']();};}function saveUpdates(_0x13f227,_0x4e193b){return function(_0x1c75ef){if(_0x1c75ef){return _0x1c75ef[_0xb376('0x2f')](_0x13f227)[_0xb376('0x1c')](function(_0x295c43){return _0x295c43;});}return null;};}function removeEntity(_0x4cffda,_0x3eeb8c){return function(_0x36fe0d){if(_0x36fe0d){return _0x36fe0d[_0xb376('0x30')]()[_0xb376('0x1c')](function(){_0x4cffda['status'](0xcc)[_0xb376('0x28')]();});}};}function handleEntityNotFound(_0x3f0cf1,_0x4c12ec){return function(_0x178152){if(!_0x178152){_0x3f0cf1[_0xb376('0x26')](0x194);}return _0x178152;};}function handleError(_0x5baf95,_0x391afc){_0x391afc=_0x391afc||0x1f4;return function(_0x500b26){logger[_0xb376('0x24')](_0x500b26['stack']);if(_0x500b26[_0xb376('0x31')]){delete _0x500b26[_0xb376('0x31')];}_0x5baf95[_0xb376('0x27')](_0x391afc)[_0xb376('0x32')](_0x500b26);};}exports[_0xb376('0x33')]=function(_0x1e0b96,_0x53343b){var _0x1c7910={},_0x5b4dcc={},_0x29c92c={'count':0x0,'rows':[]};var _0x14c70c=db[_0xb376('0x34')][_0xb376('0x35')];_0x5b4dcc['model']=_[_0xb376('0x36')](_0x14c70c);_0x5b4dcc['query']=_['keys'](_0x1e0b96[_0xb376('0x37')]);_0x5b4dcc['filters']=_[_0xb376('0x38')](_0x5b4dcc[_0xb376('0x39')],_0x5b4dcc[_0xb376('0x37')]);_0x1c7910[_0xb376('0x3a')]=_[_0xb376('0x38')](_0x5b4dcc[_0xb376('0x39')],qs[_0xb376('0x3b')](_0x1e0b96['query'][_0xb376('0x3b')]));_0x1c7910[_0xb376('0x3a')]=_0x1c7910['attributes'][_0xb376('0x3c')]?_0x1c7910[_0xb376('0x3a')]:_0x5b4dcc[_0xb376('0x39')];if(!_0x1e0b96['query'][_0xb376('0x3d')](_0xb376('0x3e'))){_0x1c7910[_0xb376('0x2b')]=qs[_0xb376('0x2b')](_0x1e0b96[_0xb376('0x37')][_0xb376('0x2b')]);_0x1c7910[_0xb376('0x2a')]=qs['offset'](_0x1e0b96['query'][_0xb376('0x2a')]);}_0x1c7910['order']=qs['sort'](_0x1e0b96[_0xb376('0x37')][_0xb376('0x3f')]);_0x1c7910['where']=qs[_0xb376('0x40')](_[_0xb376('0x41')](_0x1e0b96[_0xb376('0x37')],_0x5b4dcc[_0xb376('0x40')]));if(_0x1e0b96[_0xb376('0x37')][_0xb376('0x42')]){_0x1c7910[_0xb376('0x43')]=_['merge'](_0x1c7910[_0xb376('0x43')],{'$or':_[_0xb376('0x44')](_0x14c70c,function(_0x5d32fd){if(_0x5d32fd[_0xb376('0x45')][_0xb376('0x46')]!=='VIRTUAL'){var _0x35f177={};_0x35f177[_0x5d32fd[_0xb376('0x47')]]={'$like':'%'+_0x1e0b96[_0xb376('0x37')][_0xb376('0x42')]+'%'};return _0x35f177;}})});}_0x1c7910=_['merge']({},_0x1c7910,_0x1e0b96[_0xb376('0x48')]);var _0x4c4f03={'where':_0x1c7910[_0xb376('0x43')]};return db[_0xb376('0x34')][_0xb376('0x49')](_0x4c4f03)[_0xb376('0x1c')](function(_0x682d22){_0x29c92c[_0xb376('0x49')]=_0x682d22;if(_0x1e0b96[_0xb376('0x37')][_0xb376('0x4a')]){_0x1c7910[_0xb376('0x4b')]=[{'all':!![]}];}return db['SugarcrmAccount'][_0xb376('0x4c')](_0x1c7910);})[_0xb376('0x1c')](function(_0x3bf55b){_0x29c92c[_0xb376('0x4d')]=_0x3bf55b;return _0x29c92c;})[_0xb376('0x1c')](respondWithFilteredResult(_0x53343b,_0x1c7910))[_0xb376('0x4e')](handleError(_0x53343b,null));};exports[_0xb376('0x4f')]=function(_0x3aa1f6,_0x776802){var _0x3f1b74={'raw':![],'where':{'id':_0x3aa1f6[_0xb376('0x50')]['id']}},_0x5720f1={};_0x5720f1[_0xb376('0x39')]=_[_0xb376('0x36')](db['SugarcrmAccount']['rawAttributes']);_0x5720f1[_0xb376('0x37')]=_[_0xb376('0x36')](_0x3aa1f6[_0xb376('0x37')]);_0x5720f1[_0xb376('0x40')]=_['intersection'](_0x5720f1[_0xb376('0x39')],_0x5720f1['query']);_0x3f1b74['attributes']=_[_0xb376('0x38')](_0x5720f1['model'],qs[_0xb376('0x3b')](_0x3aa1f6[_0xb376('0x37')][_0xb376('0x3b')]));_0x3f1b74[_0xb376('0x3a')]=_0x3f1b74['attributes'][_0xb376('0x3c')]?_0x3f1b74[_0xb376('0x3a')]:_0x5720f1['model'];if(_0x3aa1f6[_0xb376('0x37')]['includeAll']){_0x3f1b74[_0xb376('0x4b')]=[{'all':!![]}];}_0x3f1b74=_[_0xb376('0x51')]({},_0x3f1b74,_0x3aa1f6[_0xb376('0x48')]);return db['SugarcrmAccount'][_0xb376('0x52')](_0x3f1b74)[_0xb376('0x1c')](handleEntityNotFound(_0x776802,null))[_0xb376('0x1c')](respondWithResult(_0x776802,null))[_0xb376('0x4e')](handleError(_0x776802,null));};exports[_0xb376('0x53')]=function(_0x485446,_0x591ca1){return db['SugarcrmAccount'][_0xb376('0x53')](_0x485446['body'],{})[_0xb376('0x1c')](respondWithResult(_0x591ca1,0xc9))[_0xb376('0x4e')](handleError(_0x591ca1,null));};exports['update']=function(_0x587955,_0x5e6f13){if(_0x587955['body']['id']){delete _0x587955[_0xb376('0x54')]['id'];}return db[_0xb376('0x34')]['find']({'where':{'id':_0x587955[_0xb376('0x50')]['id']}})[_0xb376('0x1c')](handleEntityNotFound(_0x5e6f13,null))[_0xb376('0x1c')](saveUpdates(_0x587955['body'],null))[_0xb376('0x1c')](respondWithResult(_0x5e6f13,null))['catch'](handleError(_0x5e6f13,null));};exports[_0xb376('0x30')]=function(_0x30304e,_0x2b491e){return db[_0xb376('0x34')][_0xb376('0x52')]({'where':{'id':_0x30304e[_0xb376('0x50')]['id']}})[_0xb376('0x1c')](handleEntityNotFound(_0x2b491e,null))[_0xb376('0x1c')](removeEntity(_0x2b491e,null))['catch'](handleError(_0x2b491e,null));};exports[_0xb376('0x55')]=function(_0x1260f1,_0x3a6944,_0x2c0096){var _0x59657b={};var _0x17cf09={};var _0x26a91a;var _0x33c6fc;return db[_0xb376('0x34')][_0xb376('0x56')]({'where':{'id':_0x1260f1[_0xb376('0x50')]['id']}})[_0xb376('0x1c')](handleEntityNotFound(_0x3a6944,null))[_0xb376('0x1c')](function(_0x50e489){if(_0x50e489){_0x26a91a=_0x50e489;_0x17cf09[_0xb376('0x39')]=_[_0xb376('0x36')](db[_0xb376('0x57')]['rawAttributes']);_0x17cf09['query']=_[_0xb376('0x36')](_0x1260f1[_0xb376('0x37')]);_0x17cf09[_0xb376('0x40')]=_[_0xb376('0x38')](_0x17cf09[_0xb376('0x39')],_0x17cf09[_0xb376('0x37')]);_0x59657b[_0xb376('0x3a')]=_[_0xb376('0x38')](_0x17cf09[_0xb376('0x39')],qs['fields'](_0x1260f1[_0xb376('0x37')][_0xb376('0x3b')]));_0x59657b['attributes']=_0x59657b[_0xb376('0x3a')][_0xb376('0x3c')]?_0x59657b[_0xb376('0x3a')]:_0x17cf09[_0xb376('0x39')];_0x59657b['order']=qs['sort'](_0x1260f1[_0xb376('0x37')][_0xb376('0x3f')]);_0x59657b[_0xb376('0x43')]=qs[_0xb376('0x40')](_[_0xb376('0x41')](_0x1260f1[_0xb376('0x37')],_0x17cf09['filters']));if(_0x1260f1[_0xb376('0x37')][_0xb376('0x42')]){_0x59657b[_0xb376('0x43')]=_['merge'](_0x59657b['where'],{'$or':_[_0xb376('0x44')](_0x59657b[_0xb376('0x3a')],function(_0x4a27ed){var _0x1b62e4={};_0x1b62e4[_0x4a27ed]={'$like':'%'+_0x1260f1['query']['filter']+'%'};return _0x1b62e4;})});}_0x59657b=_[_0xb376('0x51')]({},_0x59657b,_0x1260f1[_0xb376('0x48')]);return _0x26a91a[_0xb376('0x55')](_0x59657b);}})[_0xb376('0x1c')](function(_0x17a665){if(_0x17a665){_0x33c6fc=_0x17a665[_0xb376('0x3c')];if(!_0x1260f1[_0xb376('0x37')][_0xb376('0x3d')](_0xb376('0x3e'))){_0x59657b[_0xb376('0x2b')]=qs['limit'](_0x1260f1[_0xb376('0x37')]['limit']);_0x59657b['offset']=qs[_0xb376('0x2a')](_0x1260f1[_0xb376('0x37')]['offset']);}return _0x26a91a['getConfigurations'](_0x59657b);}})['then'](function(_0x24252d){if(_0x24252d){return _0x24252d?{'count':_0x33c6fc,'rows':_0x24252d}:null;}})[_0xb376('0x1c')](respondWithResult(_0x3a6944,null))[_0xb376('0x4e')](handleError(_0x3a6944,null));};exports['addConfiguration']=function(_0x5d59e9,_0x132b88,_0x5c5160){if(_0x5d59e9[_0xb376('0x54')]['id']){delete _0x5d59e9[_0xb376('0x54')]['id'];}return db[_0xb376('0x34')][_0xb376('0x56')]({'where':{'id':_0x5d59e9['params']['id']}})[_0xb376('0x1c')](handleEntityNotFound(_0x132b88,null))[_0xb376('0x1c')](function(_0x442d66){if(_0x442d66){_0x5d59e9[_0xb376('0x54')][_0xb376('0x58')]=_0x442d66['id'];_0x5d59e9[_0xb376('0x54')][_0xb376('0x59')]=integrations[_0xb376('0x5a')](_0x5d59e9[_0xb376('0x54')][_0xb376('0x5b')],_0x5d59e9[_0xb376('0x54')]['type']);_0x5d59e9['body']['Descriptions']=integrations[_0xb376('0x5c')](_0x5d59e9[_0xb376('0x54')][_0xb376('0x5b')],_0x5d59e9[_0xb376('0x54')][_0xb376('0x45')]);return db[_0xb376('0x57')]['create'](_0x5d59e9['body'],{'include':[{'model':db[_0xb376('0x5d')],'as':'Subjects'},{'model':db[_0xb376('0x5d')],'as':_0xb376('0x5e')}]});}return null;})[_0xb376('0x1c')](respondWithResult(_0x132b88,null))['catch'](handleError(_0x132b88,null));};exports['getFields']=function(_0x491e7,_0x2c4d3d,_0x3e3ea9){var _0x3a8983='';var _0x567b25=['id',_0xb376('0x31'),_0xb376('0x5f'),_0xb376('0x60'),'description',_0xb376('0x61'),_0xb376('0x62'),_0xb376('0x63'),'parent_id',_0xb376('0x64'),_0xb376('0x65'),_0xb376('0x66')];return db[_0xb376('0x34')][_0xb376('0x56')]({'where':{'id':_0x491e7['params']['id']},'attributes':['id',_0xb376('0x67'),_0xb376('0x68'),_0xb376('0x69')]})[_0xb376('0x1c')](handleEntityNotFound(_0x2c4d3d,null))[_0xb376('0x1c')](function(_0x54ac13){if(_0x54ac13){_0x3a8983=_0x54ac13[_0xb376('0x69')];var _0x360741=_0x3a8983[_0xb376('0x6a')](-0x1);if(_0x360741==='/'){_0x3a8983=_0x3a8983['substring'](0x0,_0x3a8983[_0xb376('0x6b')](_0x360741));}return rp({'method':_0xb376('0x6c'),'uri':util[_0xb376('0x6d')]('%s%s',_0x3a8983,_0xb376('0x6e')),'json':!![],'form':{'method':'login','input_type':_0xb376('0x6f'),'response_type':_0xb376('0x6f'),'rest_data':JSON[_0xb376('0x22')]({'user_auth':{'user_name':_0x54ac13[_0xb376('0x67')],'password':_0x54ac13['password'],'encryption':_0xb376('0x70')},'application':_0xb376('0x71')})}});}})[_0xb376('0x1c')](function(_0x30c2a6){if(_0x30c2a6&&_0x30c2a6[_0xb376('0x31')]!==_0xb376('0x72')&&_0x30c2a6[_0xb376('0x31')]!==_0xb376('0x73')){return rp({'method':_0xb376('0x6c'),'uri':util[_0xb376('0x6d')]('%s%s',_0x3a8983,_0xb376('0x6e')),'json':!![],'form':{'method':'get_module_fields','input_type':_0xb376('0x6f'),'response_type':_0xb376('0x6f'),'rest_data':JSON['stringify']({'session':_0x30c2a6['id'],'module_name':_0xb376('0x74')})}})[_0xb376('0x1c')](function(_0x27b3dc){if(_0x27b3dc){var _0x2cb6e3=_[_0xb376('0x75')](_0x27b3dc['module_fields']);_[_0xb376('0x76')](_0x2cb6e3,function(_0x1b0ff9){return _0x567b25['includes'](_0x1b0ff9[_0xb376('0x31')]);});return{'count':_0x2cb6e3[_0xb376('0x3c')],'rows':_['map'](_0x2cb6e3,function(_0x3c1327){return{'id':_0x3c1327[_0xb376('0x31')],'name':_0x3c1327['label'],'custom':_[_0xb376('0x77')](_0x3c1327[_0xb376('0x31')],'_c')?!![]:![],'options':_0x3c1327[_0xb376('0x48')]?_[_0xb376('0x44')](_[_0xb376('0x75')](_0x3c1327[_0xb376('0x48')]),function(_0x44db51){return{'name':_0x44db51['value'],'value':_0x44db51['name']};}):[]};})};}})[_0xb376('0x1c')](respondWithResult(_0x2c4d3d,null))[_0xb376('0x4e')](function(_0xc07c8){var _0x416845=_0x491e7[_0xb376('0x37')]['test']?0x1f4:_0xc07c8[_0xb376('0x78')]||0x1f4;logger[_0xb376('0x24')](_0xb376('0x79'),_0xb376('0x7a'),_0x416845,JSON[_0xb376('0x22')](_0xc07c8));delete _0xc07c8[_0xb376('0x31')];if(_0x416845===0x191){_0x416845=0x190;}_0x2c4d3d['status'](_0x416845)[_0xb376('0x32')](_0x491e7['query'][_0xb376('0x1a')]?{'message':'Wrong\x20credentials','statusCode':_0xc07c8[_0xb376('0x78')]}:_0xc07c8);});}else{var _0x19a7de=0x1f4;_0x2c4d3d[_0xb376('0x27')](_0x19a7de)['send']({'message':_0xb376('0x7b'),'statusCode':0x190});}});};
\ No newline at end of file
index fe05023..6af733b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8fa9=['SugarcrmAccount','lodash','util','../../config/logger','bluebird','request-promise','path','rimraf','../../components/integrations/configuration','exports','define'];(function(_0x3ff9b9,_0x2bbf3d){var _0x40ca7e=function(_0xd0d8cb){while(--_0xd0d8cb){_0x3ff9b9['push'](_0x3ff9b9['shift']());}};_0x40ca7e(++_0x2bbf3d);}(_0x8fa9,0x161));var _0x98fa=function(_0x5d9958,_0x48b22f){_0x5d9958=_0x5d9958-0x0;var _0x523a05=_0x8fa9[_0x5d9958];return _0x523a05;};'use strict';var _=require(_0x98fa('0x0'));var util=require(_0x98fa('0x1'));var logger=require(_0x98fa('0x2'))('api');var moment=require('moment');var BPromise=require(_0x98fa('0x3'));var rp=require(_0x98fa('0x4'));var fs=require('fs');var path=require(_0x98fa('0x5'));var rimraf=require(_0x98fa('0x6'));var config=require('../../config/environment');var attributes=require('./intSugarcrmAccount.attributes');var integrations=require(_0x98fa('0x7'));module[_0x98fa('0x8')]=function(_0x2e5b2e,_0x45d52e){return _0x2e5b2e[_0x98fa('0x9')](_0x98fa('0xa'),attributes,{'tableName':'int_sugarcrm_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xadff=['lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./intSugarcrmAccount.attributes','exports','define','SugarcrmAccount'];(function(_0x4fffb8,_0x3411d4){var _0x24e456=function(_0x1e0466){while(--_0x1e0466){_0x4fffb8['push'](_0x4fffb8['shift']());}};_0x24e456(++_0x3411d4);}(_0xadff,0xfc));var _0xfadf=function(_0x84ac52,_0x1be926){_0x84ac52=_0x84ac52-0x0;var _0x2d024f=_0xadff[_0x84ac52];return _0x2d024f;};'use strict';var _=require(_0xfadf('0x0'));var util=require(_0xfadf('0x1'));var logger=require(_0xfadf('0x2'))(_0xfadf('0x3'));var moment=require(_0xfadf('0x4'));var BPromise=require(_0xfadf('0x5'));var rp=require(_0xfadf('0x6'));var fs=require('fs');var path=require(_0xfadf('0x7'));var rimraf=require(_0xfadf('0x8'));var config=require(_0xfadf('0x9'));var attributes=require(_0xfadf('0xa'));var integrations=require('../../components/integrations/configuration');module[_0xfadf('0xb')]=function(_0x334864,_0x148c43){return _0x334864[_0xfadf('0xc')](_0xfadf('0xd'),attributes,{'tableName':'int_sugarcrm_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index e2e3841..b8d526f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2804=['SugarcrmAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetSugarcrmAccount','options','raw','where','attributes','limit','include','map','model','debug','ShowSugarcrmAccount','SugarcrmAccount','find','util','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','SugarcrmAccount,\x20%s,\x20%s','request\x20sent'];(function(_0x4bf5fd,_0x21a61f){var _0xaa79ab=function(_0x5c06e7){while(--_0x5c06e7){_0x4bf5fd['push'](_0x4bf5fd['shift']());}};_0xaa79ab(++_0x21a61f);}(_0x2804,0xe0));var _0x4280=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x2804[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0x4280('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x4280('0x1'));var db=require(_0x4280('0x2'))['db'];var utils=require(_0x4280('0x3'));var logger=require(_0x4280('0x4'))(_0x4280('0x5'));var config=require(_0x4280('0x6'));var jayson=require(_0x4280('0x7'));var client=jayson[_0x4280('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x51abf9,_0x41e64f,_0x1cf91d){return new BPromise(function(_0xae3d4b,_0x2e3bbf){return client[_0x4280('0x9')](_0x51abf9,_0x1cf91d)[_0x4280('0xa')](function(_0x2efc61){logger[_0x4280('0xb')](_0x4280('0xc'),_0x41e64f,_0x4280('0xd'));logger['debug'](_0x4280('0xe'),_0x41e64f,_0x4280('0xd'),JSON[_0x4280('0xf')](_0x2efc61));if(_0x2efc61[_0x4280('0x10')]){if(_0x2efc61[_0x4280('0x10')][_0x4280('0x11')]===0x1f4){logger[_0x4280('0x10')](_0x4280('0xc'),_0x41e64f,_0x2efc61[_0x4280('0x10')][_0x4280('0x12')]);return _0x2e3bbf(_0x2efc61[_0x4280('0x10')]['message']);}logger[_0x4280('0x10')](_0x4280('0xc'),_0x41e64f,_0x2efc61[_0x4280('0x10')][_0x4280('0x12')]);return _0xae3d4b(_0x2efc61[_0x4280('0x10')][_0x4280('0x12')]);}else{logger[_0x4280('0xb')](_0x4280('0xc'),_0x41e64f,_0x4280('0xd'));_0xae3d4b(_0x2efc61[_0x4280('0x13')][_0x4280('0x12')]);}})[_0x4280('0x14')](function(_0x28442e){logger[_0x4280('0x10')](_0x4280('0xc'),_0x41e64f,_0x28442e);_0x2e3bbf(_0x28442e);});});}exports[_0x4280('0x15')]=function(_0x2b9b1a){var _0x1b5312=this;return new Promise(function(_0x84a5db,_0x5697b0){return db['SugarcrmAccount']['findAll']({'raw':_0x2b9b1a['options']?_0x2b9b1a[_0x4280('0x16')][_0x4280('0x17')]===undefined?!![]:![]:!![],'where':_0x2b9b1a[_0x4280('0x16')]?_0x2b9b1a[_0x4280('0x16')][_0x4280('0x18')]||null:null,'attributes':_0x2b9b1a['options']?_0x2b9b1a[_0x4280('0x16')][_0x4280('0x19')]||null:null,'limit':_0x2b9b1a['options']?_0x2b9b1a['options'][_0x4280('0x1a')]||null:null,'include':_0x2b9b1a['options']?_0x2b9b1a[_0x4280('0x16')][_0x4280('0x1b')]?_[_0x4280('0x1c')](_0x2b9b1a[_0x4280('0x16')][_0x4280('0x1b')],function(_0x2b3310){return{'model':db[_0x2b3310[_0x4280('0x1d')]],'as':_0x2b3310['as'],'attributes':_0x2b3310[_0x4280('0x19')],'include':_0x2b3310[_0x4280('0x1b')]?_[_0x4280('0x1c')](_0x2b3310[_0x4280('0x1b')],function(_0x5720b1){return{'model':db[_0x5720b1[_0x4280('0x1d')]],'as':_0x5720b1['as'],'attributes':_0x5720b1[_0x4280('0x19')],'include':_0x5720b1[_0x4280('0x1b')]?_['map'](_0x5720b1[_0x4280('0x1b')],function(_0x3cee6c){return{'model':db[_0x3cee6c[_0x4280('0x1d')]],'as':_0x3cee6c['as'],'attributes':_0x3cee6c[_0x4280('0x19')]};}):[]};}):[]};}):[]:[]})[_0x4280('0xa')](function(_0x220620){logger[_0x4280('0xb')]('GetSugarcrmAccount',_0x2b9b1a);logger[_0x4280('0x1e')](_0x4280('0x15'),_0x2b9b1a,JSON[_0x4280('0xf')](_0x220620));_0x84a5db(_0x220620);})['catch'](function(_0x48ad68){logger[_0x4280('0x10')](_0x4280('0x15'),_0x48ad68[_0x4280('0x12')],_0x2b9b1a);_0x5697b0(_0x1b5312['error'](0x1f4,_0x48ad68[_0x4280('0x12')]));});});};exports[_0x4280('0x1f')]=function(_0x16cc62){var _0x34a45d=this;return new Promise(function(_0xdd88b3,_0x3533b6){return db[_0x4280('0x20')][_0x4280('0x21')]({'raw':_0x16cc62['options']?_0x16cc62[_0x4280('0x16')][_0x4280('0x17')]===undefined?!![]:![]:!![],'where':_0x16cc62[_0x4280('0x16')]?_0x16cc62[_0x4280('0x16')]['where']||null:null,'attributes':_0x16cc62[_0x4280('0x16')]?_0x16cc62[_0x4280('0x16')][_0x4280('0x19')]||null:null,'include':_0x16cc62['options']?_0x16cc62[_0x4280('0x16')][_0x4280('0x1b')]?_[_0x4280('0x1c')](_0x16cc62['options'][_0x4280('0x1b')],function(_0x4b55fb){return{'model':db[_0x4b55fb[_0x4280('0x1d')]],'as':_0x4b55fb['as'],'attributes':_0x4b55fb[_0x4280('0x19')],'include':_0x4b55fb[_0x4280('0x1b')]?_['map'](_0x4b55fb[_0x4280('0x1b')],function(_0x22d77f){return{'model':db[_0x22d77f[_0x4280('0x1d')]],'as':_0x22d77f['as'],'attributes':_0x22d77f[_0x4280('0x19')],'include':_0x22d77f[_0x4280('0x1b')]?_[_0x4280('0x1c')](_0x22d77f[_0x4280('0x1b')],function(_0x41329e){return{'model':db[_0x41329e[_0x4280('0x1d')]],'as':_0x41329e['as'],'attributes':_0x41329e[_0x4280('0x19')]};}):[]};}):[]};}):[]:[]})[_0x4280('0xa')](function(_0x16a89c){logger[_0x4280('0xb')](_0x4280('0x1f'),_0x16cc62);logger['debug'](_0x4280('0x1f'),_0x16cc62,JSON[_0x4280('0xf')](_0x16a89c));_0xdd88b3(_0x16a89c);})['catch'](function(_0x35d1a6){logger[_0x4280('0x10')]('ShowSugarcrmAccount',_0x35d1a6[_0x4280('0x12')],_0x16cc62);_0x3533b6(_0x34a45d['error'](0x1f4,_0x35d1a6[_0x4280('0x12')]));});});};
\ No newline at end of file
+var _0x8bc9=['message','info','result','GetSugarcrmAccount','SugarcrmAccount','options','raw','attributes','include','map','model','catch','ShowSugarcrmAccount','find','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','then','SugarcrmAccount,\x20%s,\x20%s','request\x20sent','debug','SugarcrmAccount,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x2a1b33,_0x409f50){var _0x4c50e7=function(_0x13e16d){while(--_0x13e16d){_0x2a1b33['push'](_0x2a1b33['shift']());}};_0x4c50e7(++_0x409f50);}(_0x8bc9,0x1bb));var _0x98bc=function(_0x511ef2,_0x4a8926){_0x511ef2=_0x511ef2-0x0;var _0x10be0e=_0x8bc9[_0x511ef2];return _0x10be0e;};'use strict';var _=require(_0x98bc('0x0'));var util=require(_0x98bc('0x1'));var moment=require(_0x98bc('0x2'));var BPromise=require(_0x98bc('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x98bc('0x4'));var db=require(_0x98bc('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x98bc('0x6'))(_0x98bc('0x7'));var config=require(_0x98bc('0x8'));var jayson=require(_0x98bc('0x9'));var client=jayson['client'][_0x98bc('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x31a8e5,_0xfdea99,_0x700caa){return new BPromise(function(_0x5d7b47,_0x570f2d){return client['request'](_0x31a8e5,_0x700caa)[_0x98bc('0xb')](function(_0x4289ee){logger['info'](_0x98bc('0xc'),_0xfdea99,_0x98bc('0xd'));logger[_0x98bc('0xe')](_0x98bc('0xf'),_0xfdea99,_0x98bc('0xd'),JSON[_0x98bc('0x10')](_0x4289ee));if(_0x4289ee[_0x98bc('0x11')]){if(_0x4289ee[_0x98bc('0x11')][_0x98bc('0x12')]===0x1f4){logger[_0x98bc('0x11')](_0x98bc('0xc'),_0xfdea99,_0x4289ee[_0x98bc('0x11')][_0x98bc('0x13')]);return _0x570f2d(_0x4289ee[_0x98bc('0x11')][_0x98bc('0x13')]);}logger[_0x98bc('0x11')](_0x98bc('0xc'),_0xfdea99,_0x4289ee[_0x98bc('0x11')][_0x98bc('0x13')]);return _0x5d7b47(_0x4289ee[_0x98bc('0x11')]['message']);}else{logger[_0x98bc('0x14')](_0x98bc('0xc'),_0xfdea99,'request\x20sent');_0x5d7b47(_0x4289ee[_0x98bc('0x15')][_0x98bc('0x13')]);}})['catch'](function(_0x8f9bc){logger['error'](_0x98bc('0xc'),_0xfdea99,_0x8f9bc);_0x570f2d(_0x8f9bc);});});}exports[_0x98bc('0x16')]=function(_0x267875){var _0x257019=this;return new Promise(function(_0x4bb20f,_0x13eac3){return db[_0x98bc('0x17')]['findAll']({'raw':_0x267875[_0x98bc('0x18')]?_0x267875[_0x98bc('0x18')][_0x98bc('0x19')]===undefined?!![]:![]:!![],'where':_0x267875[_0x98bc('0x18')]?_0x267875['options']['where']||null:null,'attributes':_0x267875['options']?_0x267875[_0x98bc('0x18')][_0x98bc('0x1a')]||null:null,'limit':_0x267875[_0x98bc('0x18')]?_0x267875[_0x98bc('0x18')]['limit']||null:null,'include':_0x267875[_0x98bc('0x18')]?_0x267875['options'][_0x98bc('0x1b')]?_[_0x98bc('0x1c')](_0x267875[_0x98bc('0x18')]['include'],function(_0x180259){return{'model':db[_0x180259['model']],'as':_0x180259['as'],'attributes':_0x180259[_0x98bc('0x1a')],'include':_0x180259['include']?_[_0x98bc('0x1c')](_0x180259['include'],function(_0x501672){return{'model':db[_0x501672[_0x98bc('0x1d')]],'as':_0x501672['as'],'attributes':_0x501672['attributes'],'include':_0x501672['include']?_[_0x98bc('0x1c')](_0x501672['include'],function(_0x56b6c9){return{'model':db[_0x56b6c9[_0x98bc('0x1d')]],'as':_0x56b6c9['as'],'attributes':_0x56b6c9['attributes']};}):[]};}):[]};}):[]:[]})[_0x98bc('0xb')](function(_0x4bbb3a){logger[_0x98bc('0x14')](_0x98bc('0x16'),_0x267875);logger[_0x98bc('0xe')](_0x98bc('0x16'),_0x267875,JSON['stringify'](_0x4bbb3a));_0x4bb20f(_0x4bbb3a);})[_0x98bc('0x1e')](function(_0x35f42c){logger['error']('GetSugarcrmAccount',_0x35f42c['message'],_0x267875);_0x13eac3(_0x257019[_0x98bc('0x11')](0x1f4,_0x35f42c[_0x98bc('0x13')]));});});};exports[_0x98bc('0x1f')]=function(_0x4c45e6){var _0x3ba97b=this;return new Promise(function(_0x2f808e,_0x157174){return db[_0x98bc('0x17')][_0x98bc('0x20')]({'raw':_0x4c45e6['options']?_0x4c45e6[_0x98bc('0x18')][_0x98bc('0x19')]===undefined?!![]:![]:!![],'where':_0x4c45e6[_0x98bc('0x18')]?_0x4c45e6[_0x98bc('0x18')]['where']||null:null,'attributes':_0x4c45e6[_0x98bc('0x18')]?_0x4c45e6[_0x98bc('0x18')]['attributes']||null:null,'include':_0x4c45e6[_0x98bc('0x18')]?_0x4c45e6[_0x98bc('0x18')][_0x98bc('0x1b')]?_['map'](_0x4c45e6[_0x98bc('0x18')][_0x98bc('0x1b')],function(_0x520615){return{'model':db[_0x520615['model']],'as':_0x520615['as'],'attributes':_0x520615[_0x98bc('0x1a')],'include':_0x520615[_0x98bc('0x1b')]?_[_0x98bc('0x1c')](_0x520615[_0x98bc('0x1b')],function(_0x11f49d){return{'model':db[_0x11f49d[_0x98bc('0x1d')]],'as':_0x11f49d['as'],'attributes':_0x11f49d[_0x98bc('0x1a')],'include':_0x11f49d[_0x98bc('0x1b')]?_[_0x98bc('0x1c')](_0x11f49d[_0x98bc('0x1b')],function(_0x4b15b4){return{'model':db[_0x4b15b4[_0x98bc('0x1d')]],'as':_0x4b15b4['as'],'attributes':_0x4b15b4[_0x98bc('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x98bc('0xb')](function(_0x29a6c3){logger['info'](_0x98bc('0x1f'),_0x4c45e6);logger[_0x98bc('0xe')](_0x98bc('0x1f'),_0x4c45e6,JSON['stringify'](_0x29a6c3));_0x2f808e(_0x29a6c3);})[_0x98bc('0x1e')](function(_0x31bdf9){logger[_0x98bc('0x11')](_0x98bc('0x1f'),_0x31bdf9[_0x98bc('0x13')],_0x4c45e6);_0x157174(_0x3ba97b['error'](0x1f4,_0x31bdf9[_0x98bc('0x13')]));});});};
\ No newline at end of file
index e521d49..c31c665 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2f50=['Router','../../components/auth/service','../../config/environment','get','isAuthenticated','/:id','getFields','/:id/subjects','getSubjects','/:id/descriptions','post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout'];(function(_0x575287,_0x288709){var _0x224c5f=function(_0x1c7bee){while(--_0x1c7bee){_0x575287['push'](_0x575287['shift']());}};_0x224c5f(++_0x288709);}(_0x2f50,0x7a));var _0x02f5=function(_0x33cc46,_0x2d9779){_0x33cc46=_0x33cc46-0x0;var _0x43e370=_0x2f50[_0x33cc46];return _0x43e370;};'use strict';var multer=require(_0x02f5('0x0'));var util=require(_0x02f5('0x1'));var path=require(_0x02f5('0x2'));var timeout=require(_0x02f5('0x3'));var express=require('express');var router=express[_0x02f5('0x4')]();var auth=require(_0x02f5('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x02f5('0x6'));var controller=require('./intSugarcrmConfiguration.controller');router[_0x02f5('0x7')]('/',auth[_0x02f5('0x8')](),controller['index']);router[_0x02f5('0x7')](_0x02f5('0x9'),auth[_0x02f5('0x8')](),controller['show']);router[_0x02f5('0x7')]('/:id/fields',auth[_0x02f5('0x8')](),controller[_0x02f5('0xa')]);router[_0x02f5('0x7')](_0x02f5('0xb'),auth[_0x02f5('0x8')](),controller[_0x02f5('0xc')]);router[_0x02f5('0x7')](_0x02f5('0xd'),auth['isAuthenticated'](),controller['getDescriptions']);router[_0x02f5('0xe')]('/',auth[_0x02f5('0x8')](),controller[_0x02f5('0xf')]);router[_0x02f5('0x10')](_0x02f5('0x9'),auth[_0x02f5('0x8')](),controller[_0x02f5('0x11')]);router[_0x02f5('0x12')]('/:id',auth[_0x02f5('0x8')](),controller[_0x02f5('0x13')]);module[_0x02f5('0x14')]=router;
\ No newline at end of file
+var _0x9734=['create','update','delete','exports','util','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./intSugarcrmConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','getDescriptions','post'];(function(_0x3d0366,_0x50211a){var _0x5ce75e=function(_0xc70777){while(--_0xc70777){_0x3d0366['push'](_0x3d0366['shift']());}};_0x5ce75e(++_0x50211a);}(_0x9734,0xe0));var _0x4973=function(_0x4bfff1,_0x324d7b){_0x4bfff1=_0x4bfff1-0x0;var _0x2737fc=_0x9734[_0x4bfff1];return _0x2737fc;};'use strict';var multer=require('multer');var util=require(_0x4973('0x0'));var path=require('path');var timeout=require(_0x4973('0x1'));var express=require(_0x4973('0x2'));var router=express[_0x4973('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x4973('0x4'));var config=require(_0x4973('0x5'));var controller=require(_0x4973('0x6'));router[_0x4973('0x7')]('/',auth[_0x4973('0x8')](),controller[_0x4973('0x9')]);router[_0x4973('0x7')](_0x4973('0xa'),auth[_0x4973('0x8')](),controller[_0x4973('0xb')]);router[_0x4973('0x7')](_0x4973('0xc'),auth[_0x4973('0x8')](),controller[_0x4973('0xd')]);router['get'](_0x4973('0xe'),auth[_0x4973('0x8')](),controller[_0x4973('0xf')]);router[_0x4973('0x7')]('/:id/descriptions',auth[_0x4973('0x8')](),controller[_0x4973('0x10')]);router[_0x4973('0x11')]('/',auth['isAuthenticated'](),controller[_0x4973('0x12')]);router['put'](_0x4973('0xa'),auth[_0x4973('0x8')](),controller[_0x4973('0x13')]);router[_0x4973('0x14')](_0x4973('0xa'),auth[_0x4973('0x8')](),controller['destroy']);module[_0x4973('0x15')]=router;
\ No newline at end of file
index e0a50a3..b7dab4c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc8e6=['exports','STRING','sequelize'];(function(_0x4b727f,_0x584eb9){var _0x1b4018=function(_0x5aaa48){while(--_0x5aaa48){_0x4b727f['push'](_0x4b727f['shift']());}};_0x1b4018(++_0x584eb9);}(_0xc8e6,0xc5));var _0x6c8e=function(_0x2e5405,_0x42ec09){_0x2e5405=_0x2e5405-0x0;var _0x2f0270=_0xc8e6[_0x2e5405];return _0x2f0270;};'use strict';var Sequelize=require(_0x6c8e('0x0'));module[_0x6c8e('0x1')]={'name':{'type':Sequelize[_0x6c8e('0x2')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x795f=['STRING','sequelize'];(function(_0x42a54a,_0x419b47){var _0x13186f=function(_0x3cb043){while(--_0x3cb043){_0x42a54a['push'](_0x42a54a['shift']());}};_0x13186f(++_0x419b47);}(_0x795f,0xab));var _0xf795=function(_0x10ece3,_0x256031){_0x10ece3=_0x10ece3-0x0;var _0x4d63d6=_0x795f[_0x10ece3];return _0x4d63d6;};'use strict';var Sequelize=require(_0xf795('0x0'));module['exports']={'name':{'type':Sequelize[_0xf795('0x1')]},'description':{'type':Sequelize[_0xf795('0x1')]}};
\ No newline at end of file
index 990f64e..edfa822 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf224=['send','SugarcrmConfiguration','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','VIRTUAL','field','options','then','includeAll','include','findAll','params','find','create','body','findOne','SugarcrmField','getFields','getSubjects','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','lodash','squel','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','jayson/promise','client','http','test','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','catch','sendStatus','status','json','count','offset','set','Content-Range','apply','reject','update','destroy','stack','name'];(function(_0x5acdcf,_0x5e1019){var _0x9b4637=function(_0x39bca2){while(--_0x39bca2){_0x5acdcf['push'](_0x5acdcf['shift']());}};_0x9b4637(++_0x5e1019);}(_0xf224,0x176));var _0x4f22=function(_0x74f310,_0x5d2664){_0x74f310=_0x74f310-0x0;var _0x239e49=_0xf224[_0x74f310];return _0x239e49;};'use strict';var pdf=require(_0x4f22('0x0'));var emlformat=require(_0x4f22('0x1'));var rimraf=require(_0x4f22('0x2'));var zipdir=require(_0x4f22('0x3'));var jsonpatch=require(_0x4f22('0x4'));var rp=require(_0x4f22('0x5'));var moment=require(_0x4f22('0x6'));var BPromise=require(_0x4f22('0x7'));var Mustache=require('mustache');var util=require(_0x4f22('0x8'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x4f22('0x9'));var squel=require(_0x4f22('0xa'));var crypto=require('crypto');var jsforce=require(_0x4f22('0xb'));var deskjs=require(_0x4f22('0xc'));var toCsv=require(_0x4f22('0xd'));var querystring=require(_0x4f22('0xe'));var Papa=require(_0x4f22('0xf'));var Redis=require(_0x4f22('0x10'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x4f22('0x11'));var logger=require(_0x4f22('0x12'))('api');var utils=require(_0x4f22('0x13'));var config=require(_0x4f22('0x14'));var db=require('../../mysqldb')['db'];var jayson=require(_0x4f22('0x15'));var client=jayson[_0x4f22('0x16')][_0x4f22('0x17')]({'port':0x232a});function checkPasswordPattern(_0x3fba23,_0x42a6d2,_0x530dcf){if(_0x530dcf){var _0x21d1e7=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x21d1e7[_0x4f22('0x18')](_0x42a6d2)){return _0x3fba23;}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 _0x3fba23;}}function respondWithRpcPromise(_0x2fece0,_0xad20bc,_0x49bcf4,_0x1b33db){return new BPromise(function(_0x359b68,_0x2188cd){var _0x2c84b3=_0x1b33db||client;return _0x2c84b3['request'](_0x2fece0,_0x49bcf4)['then'](function(_0x11ca72){logger['info'](_0x4f22('0x19'),_0xad20bc,_0x4f22('0x1a'));logger[_0x4f22('0x1b')](_0x4f22('0x1c'),_0xad20bc,_0x4f22('0x1a'),JSON[_0x4f22('0x1d')](_0x11ca72));if(_0x11ca72[_0x4f22('0x1e')]){if(_0x11ca72['error']['code']===0x1f4){logger[_0x4f22('0x1e')](_0x4f22('0x19'),_0xad20bc,_0x11ca72[_0x4f22('0x1e')]['message']);return _0x2188cd(_0x11ca72[_0x4f22('0x1e')][_0x4f22('0x1f')]);}logger[_0x4f22('0x1e')]('SugarcrmConfiguration,\x20%s,\x20%s',_0xad20bc,_0x11ca72[_0x4f22('0x1e')][_0x4f22('0x1f')]);return _0x359b68(_0x11ca72[_0x4f22('0x1e')][_0x4f22('0x1f')]);}else{logger['info'](_0x4f22('0x19'),_0xad20bc,'request\x20sent');_0x359b68(_0x11ca72['result'][_0x4f22('0x1f')]);}})[_0x4f22('0x20')](function(_0x23a4a7){logger[_0x4f22('0x1e')](_0x4f22('0x19'),_0xad20bc,_0x23a4a7);_0x2188cd(_0x23a4a7);});});}function respondWithStatusCode(_0x16107d,_0x384aba){_0x384aba=_0x384aba||0xcc;return function(_0x1c0c90){if(_0x1c0c90){return _0x16107d[_0x4f22('0x21')](_0x384aba);}return _0x16107d[_0x4f22('0x22')](_0x384aba)['end']();};}function respondWithResult(_0x22bf26,_0x37c6cc){_0x37c6cc=_0x37c6cc||0xc8;return function(_0x10b682){if(_0x10b682){return _0x22bf26[_0x4f22('0x22')](_0x37c6cc)[_0x4f22('0x23')](_0x10b682);}};}function respondWithFilteredResult(_0x12e584,_0x45e9b9){return function(_0x48348b){if(_0x48348b){var _0x4b9769=_0x48348b[_0x4f22('0x24')],_0x1608d2=_0x45e9b9[_0x4f22('0x25')],_0x246014=_0x45e9b9[_0x4f22('0x25')]+_0x45e9b9['limit'],_0xa2f2d2;if(_0x246014>=_0x4b9769){_0x246014=_0x4b9769;_0xa2f2d2=0xc8;}else{_0xa2f2d2=0xce;}_0x12e584[_0x4f22('0x22')](_0xa2f2d2);return _0x12e584[_0x4f22('0x26')](_0x4f22('0x27'),_0x1608d2+'-'+_0x246014+'/'+_0x4b9769)[_0x4f22('0x23')](_0x48348b);}return null;};}function patchUpdates(_0x2f1108){return function(_0x32bde0){try{jsonpatch[_0x4f22('0x28')](_0x32bde0,_0x2f1108,!![]);}catch(_0x183b08){return BPromise[_0x4f22('0x29')](_0x183b08);}return _0x32bde0['save']();};}function saveUpdates(_0x586360,_0x5b9c9c){return function(_0x227af1){if(_0x227af1){return _0x227af1[_0x4f22('0x2a')](_0x586360)['then'](function(_0x1d4baf){return _0x1d4baf;});}return null;};}function removeEntity(_0x5016f9,_0x13dbf1){return function(_0xc9a14a){if(_0xc9a14a){return _0xc9a14a[_0x4f22('0x2b')]()['then'](function(){_0x5016f9[_0x4f22('0x22')](0xcc)['end']();});}};}function handleEntityNotFound(_0xff844a,_0x3ef77d){return function(_0x5ab450){if(!_0x5ab450){_0xff844a[_0x4f22('0x21')](0x194);}return _0x5ab450;};}function handleError(_0x3ec791,_0x2414f6){_0x2414f6=_0x2414f6||0x1f4;return function(_0x35fddd){logger['error'](_0x35fddd[_0x4f22('0x2c')]);if(_0x35fddd[_0x4f22('0x2d')]){delete _0x35fddd[_0x4f22('0x2d')];}_0x3ec791[_0x4f22('0x22')](_0x2414f6)[_0x4f22('0x2e')](_0x35fddd);};}exports['index']=function(_0x2fe747,_0xca3ed0){var _0xcab2e0={},_0x3707e1={},_0x351770={'count':0x0,'rows':[]};var _0x3dea3d=db[_0x4f22('0x2f')][_0x4f22('0x30')];_0x3707e1[_0x4f22('0x31')]=_[_0x4f22('0x32')](_0x3dea3d);_0x3707e1['query']=_[_0x4f22('0x32')](_0x2fe747[_0x4f22('0x33')]);_0x3707e1[_0x4f22('0x34')]=_[_0x4f22('0x35')](_0x3707e1[_0x4f22('0x31')],_0x3707e1['query']);_0xcab2e0[_0x4f22('0x36')]=_[_0x4f22('0x35')](_0x3707e1[_0x4f22('0x31')],qs[_0x4f22('0x37')](_0x2fe747[_0x4f22('0x33')][_0x4f22('0x37')]));_0xcab2e0[_0x4f22('0x36')]=_0xcab2e0[_0x4f22('0x36')][_0x4f22('0x38')]?_0xcab2e0[_0x4f22('0x36')]:_0x3707e1[_0x4f22('0x31')];if(!_0x2fe747[_0x4f22('0x33')][_0x4f22('0x39')](_0x4f22('0x3a'))){_0xcab2e0[_0x4f22('0x3b')]=qs[_0x4f22('0x3b')](_0x2fe747[_0x4f22('0x33')][_0x4f22('0x3b')]);_0xcab2e0[_0x4f22('0x25')]=qs[_0x4f22('0x25')](_0x2fe747[_0x4f22('0x33')][_0x4f22('0x25')]);}_0xcab2e0[_0x4f22('0x3c')]=qs[_0x4f22('0x3d')](_0x2fe747[_0x4f22('0x33')]['sort']);_0xcab2e0[_0x4f22('0x3e')]=qs[_0x4f22('0x34')](_[_0x4f22('0x3f')](_0x2fe747[_0x4f22('0x33')],_0x3707e1[_0x4f22('0x34')]));if(_0x2fe747[_0x4f22('0x33')][_0x4f22('0x40')]){_0xcab2e0['where']=_[_0x4f22('0x41')](_0xcab2e0[_0x4f22('0x3e')],{'$or':_[_0x4f22('0x42')](_0x3dea3d,function(_0x3983ef){if(_0x3983ef[_0x4f22('0x43')]['key']!==_0x4f22('0x44')){var _0x441a7c={};_0x441a7c[_0x3983ef[_0x4f22('0x45')]]={'$like':'%'+_0x2fe747[_0x4f22('0x33')]['filter']+'%'};return _0x441a7c;}})});}_0xcab2e0=_['merge']({},_0xcab2e0,_0x2fe747[_0x4f22('0x46')]);var _0x3b8977={'where':_0xcab2e0[_0x4f22('0x3e')]};return db[_0x4f22('0x2f')][_0x4f22('0x24')](_0x3b8977)[_0x4f22('0x47')](function(_0x5ec88e){_0x351770[_0x4f22('0x24')]=_0x5ec88e;if(_0x2fe747[_0x4f22('0x33')][_0x4f22('0x48')]){_0xcab2e0[_0x4f22('0x49')]=[{'all':!![]}];}return db[_0x4f22('0x2f')][_0x4f22('0x4a')](_0xcab2e0);})[_0x4f22('0x47')](function(_0x2c12e6){_0x351770['rows']=_0x2c12e6;return _0x351770;})[_0x4f22('0x47')](respondWithFilteredResult(_0xca3ed0,_0xcab2e0))['catch'](handleError(_0xca3ed0,null));};exports['show']=function(_0x2f736e,_0x52de48){var _0x25f685={'raw':![],'where':{'id':_0x2f736e[_0x4f22('0x4b')]['id']}},_0x430520={};_0x430520[_0x4f22('0x31')]=_['keys'](db['SugarcrmConfiguration'][_0x4f22('0x30')]);_0x430520['query']=_[_0x4f22('0x32')](_0x2f736e['query']);_0x430520[_0x4f22('0x34')]=_[_0x4f22('0x35')](_0x430520[_0x4f22('0x31')],_0x430520[_0x4f22('0x33')]);_0x25f685[_0x4f22('0x36')]=_[_0x4f22('0x35')](_0x430520[_0x4f22('0x31')],qs['fields'](_0x2f736e[_0x4f22('0x33')][_0x4f22('0x37')]));_0x25f685[_0x4f22('0x36')]=_0x25f685[_0x4f22('0x36')][_0x4f22('0x38')]?_0x25f685[_0x4f22('0x36')]:_0x430520[_0x4f22('0x31')];if(_0x2f736e['query'][_0x4f22('0x48')]){_0x25f685[_0x4f22('0x49')]=[{'all':!![]}];}_0x25f685=_[_0x4f22('0x41')]({},_0x25f685,_0x2f736e[_0x4f22('0x46')]);return db[_0x4f22('0x2f')][_0x4f22('0x4c')](_0x25f685)[_0x4f22('0x47')](handleEntityNotFound(_0x52de48,null))[_0x4f22('0x47')](respondWithResult(_0x52de48,null))[_0x4f22('0x20')](handleError(_0x52de48,null));};exports['create']=function(_0x5f3412,_0x3cad28){return db[_0x4f22('0x2f')][_0x4f22('0x4d')](_0x5f3412[_0x4f22('0x4e')],{})['then'](respondWithResult(_0x3cad28,0xc9))[_0x4f22('0x20')](handleError(_0x3cad28,null));};exports['update']=function(_0x29c759,_0x9f0f74){if(_0x29c759[_0x4f22('0x4e')]['id']){delete _0x29c759[_0x4f22('0x4e')]['id'];}return db[_0x4f22('0x2f')][_0x4f22('0x4c')]({'where':{'id':_0x29c759['params']['id']}})['then'](handleEntityNotFound(_0x9f0f74,null))[_0x4f22('0x47')](saveUpdates(_0x29c759[_0x4f22('0x4e')],null))[_0x4f22('0x47')](respondWithResult(_0x9f0f74,null))[_0x4f22('0x20')](handleError(_0x9f0f74,null));};exports['destroy']=function(_0x7c2c03,_0x38218b){return db[_0x4f22('0x2f')][_0x4f22('0x4c')]({'where':{'id':_0x7c2c03['params']['id']}})['then'](handleEntityNotFound(_0x38218b,null))[_0x4f22('0x47')](removeEntity(_0x38218b,null))[_0x4f22('0x20')](handleError(_0x38218b,null));};exports['getFields']=function(_0x2dd5f2,_0x3c493b,_0x59a80e){var _0x3a3a76={};var _0x51005a={};var _0x18f738;var _0x5e3285;return db[_0x4f22('0x2f')][_0x4f22('0x4f')]({'where':{'id':_0x2dd5f2[_0x4f22('0x4b')]['id']}})[_0x4f22('0x47')](handleEntityNotFound(_0x3c493b,null))[_0x4f22('0x47')](function(_0x16f965){if(_0x16f965){_0x18f738=_0x16f965;_0x51005a[_0x4f22('0x31')]=_['keys'](db[_0x4f22('0x50')][_0x4f22('0x30')]);_0x51005a[_0x4f22('0x33')]=_[_0x4f22('0x32')](_0x2dd5f2[_0x4f22('0x33')]);_0x51005a[_0x4f22('0x34')]=_[_0x4f22('0x35')](_0x51005a['model'],_0x51005a[_0x4f22('0x33')]);_0x3a3a76[_0x4f22('0x36')]=_['intersection'](_0x51005a['model'],qs[_0x4f22('0x37')](_0x2dd5f2['query'][_0x4f22('0x37')]));_0x3a3a76[_0x4f22('0x36')]=_0x3a3a76['attributes'][_0x4f22('0x38')]?_0x3a3a76[_0x4f22('0x36')]:_0x51005a[_0x4f22('0x31')];_0x3a3a76[_0x4f22('0x3c')]=qs[_0x4f22('0x3d')](_0x2dd5f2[_0x4f22('0x33')]['sort']);_0x3a3a76[_0x4f22('0x3e')]=qs[_0x4f22('0x34')](_[_0x4f22('0x3f')](_0x2dd5f2[_0x4f22('0x33')],_0x51005a[_0x4f22('0x34')]));if(_0x2dd5f2[_0x4f22('0x33')][_0x4f22('0x40')]){_0x3a3a76[_0x4f22('0x3e')]=_[_0x4f22('0x41')](_0x3a3a76[_0x4f22('0x3e')],{'$or':_[_0x4f22('0x42')](_0x3a3a76[_0x4f22('0x36')],function(_0x255d13){var _0x2f9941={};_0x2f9941[_0x255d13]={'$like':'%'+_0x2dd5f2[_0x4f22('0x33')]['filter']+'%'};return _0x2f9941;})});}_0x3a3a76=_[_0x4f22('0x41')]({},_0x3a3a76,_0x2dd5f2[_0x4f22('0x46')]);return _0x18f738[_0x4f22('0x51')](_0x3a3a76);}})['then'](function(_0x4b43ef){if(_0x4b43ef){_0x5e3285=_0x4b43ef[_0x4f22('0x38')];if(!_0x2dd5f2['query'][_0x4f22('0x39')]('nolimit')){_0x3a3a76['limit']=qs[_0x4f22('0x3b')](_0x2dd5f2[_0x4f22('0x33')][_0x4f22('0x3b')]);_0x3a3a76[_0x4f22('0x25')]=qs[_0x4f22('0x25')](_0x2dd5f2[_0x4f22('0x33')][_0x4f22('0x25')]);}return _0x18f738[_0x4f22('0x51')](_0x3a3a76);}})['then'](function(_0x28d2aa){if(_0x28d2aa){return _0x28d2aa?{'count':_0x5e3285,'rows':_0x28d2aa}:null;}})[_0x4f22('0x47')](respondWithResult(_0x3c493b,null))[_0x4f22('0x20')](handleError(_0x3c493b,null));};exports[_0x4f22('0x52')]=function(_0x568b63,_0x382751,_0x55847a){var _0x51e531={};var _0x2977fb={};var _0x26b56d;var _0x2c1f04;return db[_0x4f22('0x2f')]['findOne']({'where':{'id':_0x568b63[_0x4f22('0x4b')]['id']}})[_0x4f22('0x47')](handleEntityNotFound(_0x382751,null))[_0x4f22('0x47')](function(_0xbd7eff){if(_0xbd7eff){_0x26b56d=_0xbd7eff;_0x2977fb[_0x4f22('0x31')]=_[_0x4f22('0x32')](db[_0x4f22('0x50')][_0x4f22('0x30')]);_0x2977fb[_0x4f22('0x33')]=_[_0x4f22('0x32')](_0x568b63[_0x4f22('0x33')]);_0x2977fb[_0x4f22('0x34')]=_[_0x4f22('0x35')](_0x2977fb[_0x4f22('0x31')],_0x2977fb[_0x4f22('0x33')]);_0x51e531[_0x4f22('0x36')]=_[_0x4f22('0x35')](_0x2977fb[_0x4f22('0x31')],qs[_0x4f22('0x37')](_0x568b63[_0x4f22('0x33')][_0x4f22('0x37')]));_0x51e531['attributes']=_0x51e531['attributes'][_0x4f22('0x38')]?_0x51e531[_0x4f22('0x36')]:_0x2977fb['model'];_0x51e531['order']=qs[_0x4f22('0x3d')](_0x568b63[_0x4f22('0x33')]['sort']);_0x51e531['where']=qs[_0x4f22('0x34')](_[_0x4f22('0x3f')](_0x568b63[_0x4f22('0x33')],_0x2977fb['filters']));if(_0x568b63[_0x4f22('0x33')]['filter']){_0x51e531[_0x4f22('0x3e')]=_[_0x4f22('0x41')](_0x51e531[_0x4f22('0x3e')],{'$or':_['map'](_0x51e531[_0x4f22('0x36')],function(_0x2db739){var _0x2c6aac={};_0x2c6aac[_0x2db739]={'$like':'%'+_0x568b63['query'][_0x4f22('0x40')]+'%'};return _0x2c6aac;})});}_0x51e531=_[_0x4f22('0x41')]({},_0x51e531,_0x568b63[_0x4f22('0x46')]);return _0x26b56d[_0x4f22('0x52')](_0x51e531);}})[_0x4f22('0x47')](function(_0x3aafc7){if(_0x3aafc7){_0x2c1f04=_0x3aafc7[_0x4f22('0x38')];if(!_0x568b63['query']['hasOwnProperty']('nolimit')){_0x51e531[_0x4f22('0x3b')]=qs[_0x4f22('0x3b')](_0x568b63[_0x4f22('0x33')]['limit']);_0x51e531[_0x4f22('0x25')]=qs[_0x4f22('0x25')](_0x568b63['query'][_0x4f22('0x25')]);}return _0x26b56d[_0x4f22('0x52')](_0x51e531);}})[_0x4f22('0x47')](function(_0x319a15){if(_0x319a15){return _0x319a15?{'count':_0x2c1f04,'rows':_0x319a15}:null;}})[_0x4f22('0x47')](respondWithResult(_0x382751,null))[_0x4f22('0x20')](handleError(_0x382751,null));};exports[_0x4f22('0x53')]=function(_0x4b102e,_0xec9e9b,_0x1c6e32){var _0x590e9a={};var _0x38365c={};var _0x383fc9;var _0x480ef4;return db[_0x4f22('0x2f')][_0x4f22('0x4f')]({'where':{'id':_0x4b102e[_0x4f22('0x4b')]['id']}})['then'](handleEntityNotFound(_0xec9e9b,null))[_0x4f22('0x47')](function(_0x59c01e){if(_0x59c01e){_0x383fc9=_0x59c01e;_0x38365c[_0x4f22('0x31')]=_[_0x4f22('0x32')](db['SugarcrmField']['rawAttributes']);_0x38365c['query']=_[_0x4f22('0x32')](_0x4b102e[_0x4f22('0x33')]);_0x38365c[_0x4f22('0x34')]=_[_0x4f22('0x35')](_0x38365c[_0x4f22('0x31')],_0x38365c[_0x4f22('0x33')]);_0x590e9a['attributes']=_[_0x4f22('0x35')](_0x38365c[_0x4f22('0x31')],qs[_0x4f22('0x37')](_0x4b102e['query'][_0x4f22('0x37')]));_0x590e9a[_0x4f22('0x36')]=_0x590e9a[_0x4f22('0x36')][_0x4f22('0x38')]?_0x590e9a[_0x4f22('0x36')]:_0x38365c[_0x4f22('0x31')];_0x590e9a[_0x4f22('0x3c')]=qs[_0x4f22('0x3d')](_0x4b102e['query'][_0x4f22('0x3d')]);_0x590e9a['where']=qs[_0x4f22('0x34')](_['pick'](_0x4b102e['query'],_0x38365c[_0x4f22('0x34')]));if(_0x4b102e[_0x4f22('0x33')][_0x4f22('0x40')]){_0x590e9a[_0x4f22('0x3e')]=_[_0x4f22('0x41')](_0x590e9a[_0x4f22('0x3e')],{'$or':_[_0x4f22('0x42')](_0x590e9a[_0x4f22('0x36')],function(_0x586e8d){var _0x4c4a79={};_0x4c4a79[_0x586e8d]={'$like':'%'+_0x4b102e[_0x4f22('0x33')][_0x4f22('0x40')]+'%'};return _0x4c4a79;})});}_0x590e9a=_[_0x4f22('0x41')]({},_0x590e9a,_0x4b102e[_0x4f22('0x46')]);return _0x383fc9['getDescriptions'](_0x590e9a);}})[_0x4f22('0x47')](function(_0x111955){if(_0x111955){_0x480ef4=_0x111955[_0x4f22('0x38')];if(!_0x4b102e[_0x4f22('0x33')][_0x4f22('0x39')](_0x4f22('0x3a'))){_0x590e9a[_0x4f22('0x3b')]=qs[_0x4f22('0x3b')](_0x4b102e['query']['limit']);_0x590e9a[_0x4f22('0x25')]=qs[_0x4f22('0x25')](_0x4b102e[_0x4f22('0x33')][_0x4f22('0x25')]);}return _0x383fc9[_0x4f22('0x53')](_0x590e9a);}})[_0x4f22('0x47')](function(_0x2f7e63){if(_0x2f7e63){return _0x2f7e63?{'count':_0x480ef4,'rows':_0x2f7e63}:null;}})['then'](respondWithResult(_0xec9e9b,null))[_0x4f22('0x20')](handleError(_0xec9e9b,null));};
\ No newline at end of file
+var _0xfce9=['getDescriptions','SugarcrmField','html-pdf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','ejs','lodash','squel','crypto','jsforce','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','request','then','info','request\x20sent','debug','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','SugarcrmConfiguration,\x20%s,\x20%s','catch','sendStatus','end','status','json','offset','limit','Content-Range','save','stack','send','index','rawAttributes','keys','query','filters','intersection','model','fields','attributes','hasOwnProperty','nolimit','order','sort','filter','where','merge','map','type','key','VIRTUAL','options','count','include','findAll','rows','show','params','length','includeAll','SugarcrmConfiguration','find','create','body','update','destroy','getFields','findOne','pick','getSubjects'];(function(_0x1168db,_0x499657){var _0xc0ef3d=function(_0x2f1301){while(--_0x2f1301){_0x1168db['push'](_0x1168db['shift']());}};_0xc0ef3d(++_0x499657);}(_0xfce9,0xb2));var _0x9fce=function(_0x59d471,_0x2b1e92){_0x59d471=_0x59d471-0x0;var _0x5e23b1=_0xfce9[_0x59d471];return _0x5e23b1;};'use strict';var pdf=require(_0x9fce('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x9fce('0x1'));var jsonpatch=require(_0x9fce('0x2'));var rp=require(_0x9fce('0x3'));var moment=require(_0x9fce('0x4'));var BPromise=require(_0x9fce('0x5'));var Mustache=require('mustache');var util=require(_0x9fce('0x6'));var path=require(_0x9fce('0x7'));var sox=require(_0x9fce('0x8'));var csv=require('to-csv');var ejs=require(_0x9fce('0x9'));var fs=require('fs');var _=require(_0x9fce('0xa'));var squel=require(_0x9fce('0xb'));var crypto=require(_0x9fce('0xc'));var jsforce=require(_0x9fce('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x9fce('0xe'));var querystring=require(_0x9fce('0xf'));var Papa=require(_0x9fce('0x10'));var Redis=require(_0x9fce('0x11'));var authService=require(_0x9fce('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x9fce('0x13'));var logger=require(_0x9fce('0x14'))(_0x9fce('0x15'));var utils=require(_0x9fce('0x16'));var config=require(_0x9fce('0x17'));var db=require(_0x9fce('0x18'))['db'];var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function checkPasswordPattern(_0x54c46d,_0x2d226a,_0x10cf0f){if(_0x10cf0f){var _0x48300e=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x48300e['test'](_0x2d226a)){return _0x54c46d;}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 _0x54c46d;}}function respondWithRpcPromise(_0x33c804,_0xe4036,_0x4ac6b8,_0x3ee3ad){return new BPromise(function(_0x340d32,_0xc7a1e2){var _0x3daf7e=_0x3ee3ad||client;return _0x3daf7e[_0x9fce('0x19')](_0x33c804,_0x4ac6b8)[_0x9fce('0x1a')](function(_0x7e72fb){logger[_0x9fce('0x1b')]('SugarcrmConfiguration,\x20%s,\x20%s',_0xe4036,_0x9fce('0x1c'));logger[_0x9fce('0x1d')](_0x9fce('0x1e'),_0xe4036,'request\x20sent',JSON[_0x9fce('0x1f')](_0x7e72fb));if(_0x7e72fb[_0x9fce('0x20')]){if(_0x7e72fb[_0x9fce('0x20')][_0x9fce('0x21')]===0x1f4){logger['error']('SugarcrmConfiguration,\x20%s,\x20%s',_0xe4036,_0x7e72fb[_0x9fce('0x20')][_0x9fce('0x22')]);return _0xc7a1e2(_0x7e72fb[_0x9fce('0x20')][_0x9fce('0x22')]);}logger[_0x9fce('0x20')](_0x9fce('0x23'),_0xe4036,_0x7e72fb[_0x9fce('0x20')][_0x9fce('0x22')]);return _0x340d32(_0x7e72fb[_0x9fce('0x20')][_0x9fce('0x22')]);}else{logger['info'](_0x9fce('0x23'),_0xe4036,'request\x20sent');_0x340d32(_0x7e72fb['result']['message']);}})[_0x9fce('0x24')](function(_0x591dc8){logger[_0x9fce('0x20')](_0x9fce('0x23'),_0xe4036,_0x591dc8);_0xc7a1e2(_0x591dc8);});});}function respondWithStatusCode(_0x440098,_0x209e0a){_0x209e0a=_0x209e0a||0xcc;return function(_0x3d10f4){if(_0x3d10f4){return _0x440098[_0x9fce('0x25')](_0x209e0a);}return _0x440098['status'](_0x209e0a)[_0x9fce('0x26')]();};}function respondWithResult(_0x58057f,_0x41546d){_0x41546d=_0x41546d||0xc8;return function(_0x445fb2){if(_0x445fb2){return _0x58057f[_0x9fce('0x27')](_0x41546d)[_0x9fce('0x28')](_0x445fb2);}};}function respondWithFilteredResult(_0x9229b2,_0x1ce702){return function(_0x261c14){if(_0x261c14){var _0x4f8cb9=_0x261c14['count'],_0x504bc9=_0x1ce702[_0x9fce('0x29')],_0x5c6d5a=_0x1ce702['offset']+_0x1ce702[_0x9fce('0x2a')],_0x4e3727;if(_0x5c6d5a>=_0x4f8cb9){_0x5c6d5a=_0x4f8cb9;_0x4e3727=0xc8;}else{_0x4e3727=0xce;}_0x9229b2[_0x9fce('0x27')](_0x4e3727);return _0x9229b2['set'](_0x9fce('0x2b'),_0x504bc9+'-'+_0x5c6d5a+'/'+_0x4f8cb9)[_0x9fce('0x28')](_0x261c14);}return null;};}function patchUpdates(_0xe416cd){return function(_0x5a73ba){try{jsonpatch['apply'](_0x5a73ba,_0xe416cd,!![]);}catch(_0x55f008){return BPromise['reject'](_0x55f008);}return _0x5a73ba[_0x9fce('0x2c')]();};}function saveUpdates(_0x4d3393,_0x19e251){return function(_0x4f9a3b){if(_0x4f9a3b){return _0x4f9a3b['update'](_0x4d3393)['then'](function(_0x1809b8){return _0x1809b8;});}return null;};}function removeEntity(_0x2683a7,_0x182a90){return function(_0x47beee){if(_0x47beee){return _0x47beee['destroy']()[_0x9fce('0x1a')](function(){_0x2683a7[_0x9fce('0x27')](0xcc)[_0x9fce('0x26')]();});}};}function handleEntityNotFound(_0x44d537,_0x38f1fb){return function(_0x4fbeb8){if(!_0x4fbeb8){_0x44d537[_0x9fce('0x25')](0x194);}return _0x4fbeb8;};}function handleError(_0x55beb2,_0x38c460){_0x38c460=_0x38c460||0x1f4;return function(_0x59d005){logger[_0x9fce('0x20')](_0x59d005[_0x9fce('0x2d')]);if(_0x59d005['name']){delete _0x59d005['name'];}_0x55beb2[_0x9fce('0x27')](_0x38c460)[_0x9fce('0x2e')](_0x59d005);};}exports[_0x9fce('0x2f')]=function(_0x5b4b3e,_0xb4413b){var _0x16a8f2={},_0x3e101b={},_0x425304={'count':0x0,'rows':[]};var _0xb70ea9=db['SugarcrmConfiguration'][_0x9fce('0x30')];_0x3e101b['model']=_[_0x9fce('0x31')](_0xb70ea9);_0x3e101b['query']=_[_0x9fce('0x31')](_0x5b4b3e[_0x9fce('0x32')]);_0x3e101b[_0x9fce('0x33')]=_[_0x9fce('0x34')](_0x3e101b[_0x9fce('0x35')],_0x3e101b['query']);_0x16a8f2['attributes']=_[_0x9fce('0x34')](_0x3e101b[_0x9fce('0x35')],qs[_0x9fce('0x36')](_0x5b4b3e['query'][_0x9fce('0x36')]));_0x16a8f2['attributes']=_0x16a8f2[_0x9fce('0x37')]['length']?_0x16a8f2['attributes']:_0x3e101b['model'];if(!_0x5b4b3e[_0x9fce('0x32')][_0x9fce('0x38')](_0x9fce('0x39'))){_0x16a8f2[_0x9fce('0x2a')]=qs[_0x9fce('0x2a')](_0x5b4b3e[_0x9fce('0x32')][_0x9fce('0x2a')]);_0x16a8f2['offset']=qs['offset'](_0x5b4b3e[_0x9fce('0x32')]['offset']);}_0x16a8f2[_0x9fce('0x3a')]=qs['sort'](_0x5b4b3e['query'][_0x9fce('0x3b')]);_0x16a8f2['where']=qs[_0x9fce('0x33')](_['pick'](_0x5b4b3e[_0x9fce('0x32')],_0x3e101b[_0x9fce('0x33')]));if(_0x5b4b3e['query'][_0x9fce('0x3c')]){_0x16a8f2[_0x9fce('0x3d')]=_[_0x9fce('0x3e')](_0x16a8f2['where'],{'$or':_[_0x9fce('0x3f')](_0xb70ea9,function(_0x1b46fd){if(_0x1b46fd[_0x9fce('0x40')][_0x9fce('0x41')]!==_0x9fce('0x42')){var _0x396a71={};_0x396a71[_0x1b46fd['field']]={'$like':'%'+_0x5b4b3e['query'][_0x9fce('0x3c')]+'%'};return _0x396a71;}})});}_0x16a8f2=_[_0x9fce('0x3e')]({},_0x16a8f2,_0x5b4b3e[_0x9fce('0x43')]);var _0xe23702={'where':_0x16a8f2['where']};return db['SugarcrmConfiguration']['count'](_0xe23702)[_0x9fce('0x1a')](function(_0x1412a3){_0x425304[_0x9fce('0x44')]=_0x1412a3;if(_0x5b4b3e[_0x9fce('0x32')]['includeAll']){_0x16a8f2[_0x9fce('0x45')]=[{'all':!![]}];}return db['SugarcrmConfiguration'][_0x9fce('0x46')](_0x16a8f2);})[_0x9fce('0x1a')](function(_0x268544){_0x425304[_0x9fce('0x47')]=_0x268544;return _0x425304;})[_0x9fce('0x1a')](respondWithFilteredResult(_0xb4413b,_0x16a8f2))[_0x9fce('0x24')](handleError(_0xb4413b,null));};exports[_0x9fce('0x48')]=function(_0x1d3c87,_0x30c5a9){var _0x32f258={'raw':![],'where':{'id':_0x1d3c87[_0x9fce('0x49')]['id']}},_0x1d4cf6={};_0x1d4cf6[_0x9fce('0x35')]=_[_0x9fce('0x31')](db['SugarcrmConfiguration'][_0x9fce('0x30')]);_0x1d4cf6['query']=_[_0x9fce('0x31')](_0x1d3c87[_0x9fce('0x32')]);_0x1d4cf6[_0x9fce('0x33')]=_[_0x9fce('0x34')](_0x1d4cf6[_0x9fce('0x35')],_0x1d4cf6['query']);_0x32f258['attributes']=_[_0x9fce('0x34')](_0x1d4cf6[_0x9fce('0x35')],qs[_0x9fce('0x36')](_0x1d3c87[_0x9fce('0x32')][_0x9fce('0x36')]));_0x32f258[_0x9fce('0x37')]=_0x32f258[_0x9fce('0x37')][_0x9fce('0x4a')]?_0x32f258[_0x9fce('0x37')]:_0x1d4cf6['model'];if(_0x1d3c87[_0x9fce('0x32')][_0x9fce('0x4b')]){_0x32f258[_0x9fce('0x45')]=[{'all':!![]}];}_0x32f258=_[_0x9fce('0x3e')]({},_0x32f258,_0x1d3c87[_0x9fce('0x43')]);return db[_0x9fce('0x4c')][_0x9fce('0x4d')](_0x32f258)[_0x9fce('0x1a')](handleEntityNotFound(_0x30c5a9,null))[_0x9fce('0x1a')](respondWithResult(_0x30c5a9,null))[_0x9fce('0x24')](handleError(_0x30c5a9,null));};exports[_0x9fce('0x4e')]=function(_0x240fd4,_0x5c12f2){return db[_0x9fce('0x4c')][_0x9fce('0x4e')](_0x240fd4[_0x9fce('0x4f')],{})[_0x9fce('0x1a')](respondWithResult(_0x5c12f2,0xc9))[_0x9fce('0x24')](handleError(_0x5c12f2,null));};exports[_0x9fce('0x50')]=function(_0x328941,_0xd163aa){if(_0x328941[_0x9fce('0x4f')]['id']){delete _0x328941[_0x9fce('0x4f')]['id'];}return db[_0x9fce('0x4c')][_0x9fce('0x4d')]({'where':{'id':_0x328941[_0x9fce('0x49')]['id']}})[_0x9fce('0x1a')](handleEntityNotFound(_0xd163aa,null))['then'](saveUpdates(_0x328941[_0x9fce('0x4f')],null))[_0x9fce('0x1a')](respondWithResult(_0xd163aa,null))[_0x9fce('0x24')](handleError(_0xd163aa,null));};exports[_0x9fce('0x51')]=function(_0x5595a9,_0xc44907){return db[_0x9fce('0x4c')][_0x9fce('0x4d')]({'where':{'id':_0x5595a9[_0x9fce('0x49')]['id']}})[_0x9fce('0x1a')](handleEntityNotFound(_0xc44907,null))[_0x9fce('0x1a')](removeEntity(_0xc44907,null))[_0x9fce('0x24')](handleError(_0xc44907,null));};exports[_0x9fce('0x52')]=function(_0x333e53,_0x55821b,_0x3e75e7){var _0x47b27f={};var _0x469ca9={};var _0x332556;var _0x17f644;return db['SugarcrmConfiguration'][_0x9fce('0x53')]({'where':{'id':_0x333e53[_0x9fce('0x49')]['id']}})[_0x9fce('0x1a')](handleEntityNotFound(_0x55821b,null))[_0x9fce('0x1a')](function(_0x47abea){if(_0x47abea){_0x332556=_0x47abea;_0x469ca9[_0x9fce('0x35')]=_['keys'](db['SugarcrmField'][_0x9fce('0x30')]);_0x469ca9['query']=_[_0x9fce('0x31')](_0x333e53[_0x9fce('0x32')]);_0x469ca9[_0x9fce('0x33')]=_[_0x9fce('0x34')](_0x469ca9[_0x9fce('0x35')],_0x469ca9[_0x9fce('0x32')]);_0x47b27f[_0x9fce('0x37')]=_['intersection'](_0x469ca9[_0x9fce('0x35')],qs[_0x9fce('0x36')](_0x333e53[_0x9fce('0x32')][_0x9fce('0x36')]));_0x47b27f[_0x9fce('0x37')]=_0x47b27f[_0x9fce('0x37')][_0x9fce('0x4a')]?_0x47b27f[_0x9fce('0x37')]:_0x469ca9[_0x9fce('0x35')];_0x47b27f[_0x9fce('0x3a')]=qs[_0x9fce('0x3b')](_0x333e53[_0x9fce('0x32')][_0x9fce('0x3b')]);_0x47b27f[_0x9fce('0x3d')]=qs['filters'](_[_0x9fce('0x54')](_0x333e53[_0x9fce('0x32')],_0x469ca9[_0x9fce('0x33')]));if(_0x333e53[_0x9fce('0x32')][_0x9fce('0x3c')]){_0x47b27f[_0x9fce('0x3d')]=_[_0x9fce('0x3e')](_0x47b27f[_0x9fce('0x3d')],{'$or':_['map'](_0x47b27f[_0x9fce('0x37')],function(_0x25a2aa){var _0x4f0413={};_0x4f0413[_0x25a2aa]={'$like':'%'+_0x333e53[_0x9fce('0x32')][_0x9fce('0x3c')]+'%'};return _0x4f0413;})});}_0x47b27f=_[_0x9fce('0x3e')]({},_0x47b27f,_0x333e53['options']);return _0x332556[_0x9fce('0x52')](_0x47b27f);}})[_0x9fce('0x1a')](function(_0x58ba09){if(_0x58ba09){_0x17f644=_0x58ba09[_0x9fce('0x4a')];if(!_0x333e53[_0x9fce('0x32')][_0x9fce('0x38')](_0x9fce('0x39'))){_0x47b27f[_0x9fce('0x2a')]=qs['limit'](_0x333e53[_0x9fce('0x32')][_0x9fce('0x2a')]);_0x47b27f['offset']=qs['offset'](_0x333e53[_0x9fce('0x32')][_0x9fce('0x29')]);}return _0x332556[_0x9fce('0x52')](_0x47b27f);}})[_0x9fce('0x1a')](function(_0x203520){if(_0x203520){return _0x203520?{'count':_0x17f644,'rows':_0x203520}:null;}})[_0x9fce('0x1a')](respondWithResult(_0x55821b,null))[_0x9fce('0x24')](handleError(_0x55821b,null));};exports[_0x9fce('0x55')]=function(_0x4e5c51,_0x1c4bfe,_0x1f9447){var _0x3b608f={};var _0x7c2ef9={};var _0x11ca79;var _0x2c5b7f;return db[_0x9fce('0x4c')][_0x9fce('0x53')]({'where':{'id':_0x4e5c51[_0x9fce('0x49')]['id']}})[_0x9fce('0x1a')](handleEntityNotFound(_0x1c4bfe,null))[_0x9fce('0x1a')](function(_0x52e595){if(_0x52e595){_0x11ca79=_0x52e595;_0x7c2ef9['model']=_[_0x9fce('0x31')](db['SugarcrmField'][_0x9fce('0x30')]);_0x7c2ef9[_0x9fce('0x32')]=_[_0x9fce('0x31')](_0x4e5c51['query']);_0x7c2ef9['filters']=_['intersection'](_0x7c2ef9['model'],_0x7c2ef9['query']);_0x3b608f[_0x9fce('0x37')]=_[_0x9fce('0x34')](_0x7c2ef9[_0x9fce('0x35')],qs['fields'](_0x4e5c51[_0x9fce('0x32')][_0x9fce('0x36')]));_0x3b608f[_0x9fce('0x37')]=_0x3b608f['attributes']['length']?_0x3b608f[_0x9fce('0x37')]:_0x7c2ef9[_0x9fce('0x35')];_0x3b608f[_0x9fce('0x3a')]=qs['sort'](_0x4e5c51[_0x9fce('0x32')][_0x9fce('0x3b')]);_0x3b608f['where']=qs[_0x9fce('0x33')](_[_0x9fce('0x54')](_0x4e5c51['query'],_0x7c2ef9[_0x9fce('0x33')]));if(_0x4e5c51[_0x9fce('0x32')][_0x9fce('0x3c')]){_0x3b608f[_0x9fce('0x3d')]=_[_0x9fce('0x3e')](_0x3b608f[_0x9fce('0x3d')],{'$or':_[_0x9fce('0x3f')](_0x3b608f[_0x9fce('0x37')],function(_0x5a7d30){var _0x52d092={};_0x52d092[_0x5a7d30]={'$like':'%'+_0x4e5c51[_0x9fce('0x32')][_0x9fce('0x3c')]+'%'};return _0x52d092;})});}_0x3b608f=_['merge']({},_0x3b608f,_0x4e5c51[_0x9fce('0x43')]);return _0x11ca79[_0x9fce('0x55')](_0x3b608f);}})[_0x9fce('0x1a')](function(_0x3dcf53){if(_0x3dcf53){_0x2c5b7f=_0x3dcf53['length'];if(!_0x4e5c51[_0x9fce('0x32')][_0x9fce('0x38')](_0x9fce('0x39'))){_0x3b608f['limit']=qs[_0x9fce('0x2a')](_0x4e5c51[_0x9fce('0x32')][_0x9fce('0x2a')]);_0x3b608f[_0x9fce('0x29')]=qs[_0x9fce('0x29')](_0x4e5c51[_0x9fce('0x32')]['offset']);}return _0x11ca79[_0x9fce('0x55')](_0x3b608f);}})['then'](function(_0x170110){if(_0x170110){return _0x170110?{'count':_0x2c5b7f,'rows':_0x170110}:null;}})['then'](respondWithResult(_0x1c4bfe,null))['catch'](handleError(_0x1c4bfe,null));};exports[_0x9fce('0x56')]=function(_0x4a0dc2,_0x2899b2,_0x2226ff){var _0x227f04={};var _0x12945c={};var _0x489cce;var _0x27782f;return db[_0x9fce('0x4c')][_0x9fce('0x53')]({'where':{'id':_0x4a0dc2['params']['id']}})[_0x9fce('0x1a')](handleEntityNotFound(_0x2899b2,null))[_0x9fce('0x1a')](function(_0x299f1e){if(_0x299f1e){_0x489cce=_0x299f1e;_0x12945c[_0x9fce('0x35')]=_[_0x9fce('0x31')](db[_0x9fce('0x57')][_0x9fce('0x30')]);_0x12945c[_0x9fce('0x32')]=_[_0x9fce('0x31')](_0x4a0dc2[_0x9fce('0x32')]);_0x12945c['filters']=_[_0x9fce('0x34')](_0x12945c[_0x9fce('0x35')],_0x12945c[_0x9fce('0x32')]);_0x227f04[_0x9fce('0x37')]=_['intersection'](_0x12945c[_0x9fce('0x35')],qs[_0x9fce('0x36')](_0x4a0dc2[_0x9fce('0x32')][_0x9fce('0x36')]));_0x227f04[_0x9fce('0x37')]=_0x227f04[_0x9fce('0x37')][_0x9fce('0x4a')]?_0x227f04[_0x9fce('0x37')]:_0x12945c['model'];_0x227f04[_0x9fce('0x3a')]=qs[_0x9fce('0x3b')](_0x4a0dc2[_0x9fce('0x32')][_0x9fce('0x3b')]);_0x227f04['where']=qs[_0x9fce('0x33')](_[_0x9fce('0x54')](_0x4a0dc2[_0x9fce('0x32')],_0x12945c[_0x9fce('0x33')]));if(_0x4a0dc2['query'][_0x9fce('0x3c')]){_0x227f04['where']=_[_0x9fce('0x3e')](_0x227f04[_0x9fce('0x3d')],{'$or':_['map'](_0x227f04[_0x9fce('0x37')],function(_0x3b77ca){var _0x1fbd87={};_0x1fbd87[_0x3b77ca]={'$like':'%'+_0x4a0dc2[_0x9fce('0x32')][_0x9fce('0x3c')]+'%'};return _0x1fbd87;})});}_0x227f04=_[_0x9fce('0x3e')]({},_0x227f04,_0x4a0dc2[_0x9fce('0x43')]);return _0x489cce[_0x9fce('0x56')](_0x227f04);}})['then'](function(_0x198f15){if(_0x198f15){_0x27782f=_0x198f15[_0x9fce('0x4a')];if(!_0x4a0dc2[_0x9fce('0x32')]['hasOwnProperty'](_0x9fce('0x39'))){_0x227f04[_0x9fce('0x2a')]=qs[_0x9fce('0x2a')](_0x4a0dc2[_0x9fce('0x32')][_0x9fce('0x2a')]);_0x227f04[_0x9fce('0x29')]=qs[_0x9fce('0x29')](_0x4a0dc2[_0x9fce('0x32')]['offset']);}return _0x489cce[_0x9fce('0x56')](_0x227f04);}})[_0x9fce('0x1a')](function(_0xfd0c1d){if(_0xfd0c1d){return _0xfd0c1d?{'count':_0x27782f,'rows':_0xfd0c1d}:null;}})[_0x9fce('0x1a')](respondWithResult(_0x2899b2,null))[_0x9fce('0x24')](handleError(_0x2899b2,null));};
\ No newline at end of file
index 3932d82..c17d3e7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeaa9=['rimraf','exports','define','SugarcrmConfiguration','int_sugarcrm_configurations','lodash','util','../../config/logger','api','bluebird','request-promise','path'];(function(_0x20c188,_0xde5449){var _0x117ecd=function(_0x4a479b){while(--_0x4a479b){_0x20c188['push'](_0x20c188['shift']());}};_0x117ecd(++_0xde5449);}(_0xeaa9,0x95));var _0x9eaa=function(_0x303477,_0x3aca10){_0x303477=_0x303477-0x0;var _0x39f79d=_0xeaa9[_0x303477];return _0x39f79d;};'use strict';var _=require(_0x9eaa('0x0'));var util=require(_0x9eaa('0x1'));var logger=require(_0x9eaa('0x2'))(_0x9eaa('0x3'));var moment=require('moment');var BPromise=require(_0x9eaa('0x4'));var rp=require(_0x9eaa('0x5'));var fs=require('fs');var path=require(_0x9eaa('0x6'));var rimraf=require(_0x9eaa('0x7'));var config=require('../../config/environment');var attributes=require('./intSugarcrmConfiguration.attributes');module[_0x9eaa('0x8')]=function(_0x324e3c,_0x3d14b1){return _0x324e3c[_0x9eaa('0x9')](_0x9eaa('0xa'),attributes,{'tableName':_0x9eaa('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xc9a0=['path','rimraf','../../config/environment','./intSugarcrmConfiguration.attributes','exports','SugarcrmConfiguration','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x552352,_0x51e3b0){var _0x1e0d71=function(_0xa0c4f5){while(--_0xa0c4f5){_0x552352['push'](_0x552352['shift']());}};_0x1e0d71(++_0x51e3b0);}(_0xc9a0,0xbc));var _0x0c9a=function(_0x23e797,_0x1dc763){_0x23e797=_0x23e797-0x0;var _0xa5e856=_0xc9a0[_0x23e797];return _0xa5e856;};'use strict';var _=require(_0x0c9a('0x0'));var util=require(_0x0c9a('0x1'));var logger=require(_0x0c9a('0x2'))(_0x0c9a('0x3'));var moment=require(_0x0c9a('0x4'));var BPromise=require(_0x0c9a('0x5'));var rp=require(_0x0c9a('0x6'));var fs=require('fs');var path=require(_0x0c9a('0x7'));var rimraf=require(_0x0c9a('0x8'));var config=require(_0x0c9a('0x9'));var attributes=require(_0x0c9a('0xa'));module[_0x0c9a('0xb')]=function(_0x310036,_0x2f04fe){return _0x310036['define'](_0x0c9a('0xc'),attributes,{'tableName':'int_sugarcrm_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 324b266..be8e020 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x46b3=['randomstring','../../config/utils','../../config/logger','jayson/promise','client','http','then','info','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','moment','bluebird'];(function(_0x4e676e,_0x2a7c6d){var _0x336a3c=function(_0x4767c4){while(--_0x4767c4){_0x4e676e['push'](_0x4e676e['shift']());}};_0x336a3c(++_0x2a7c6d);}(_0x46b3,0x1df));var _0x346b=function(_0x55cbe4,_0xf9721f){_0x55cbe4=_0x55cbe4-0x0;var _0x122d0c=_0x46b3[_0x55cbe4];return _0x122d0c;};'use strict';var _=require(_0x346b('0x0'));var util=require(_0x346b('0x1'));var moment=require(_0x346b('0x2'));var BPromise=require(_0x346b('0x3'));var rs=require(_0x346b('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x346b('0x5'));var logger=require(_0x346b('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x346b('0x7'));var client=jayson[_0x346b('0x8')][_0x346b('0x9')]({'port':0x232a});function respondWithRpcPromise(_0xa09cd8,_0x497610,_0xc169f9){return new BPromise(function(_0x3de78c,_0x3c6081){return client['request'](_0xa09cd8,_0xc169f9)[_0x346b('0xa')](function(_0x5ad528){logger[_0x346b('0xb')](_0x346b('0xc'),_0x497610,_0x346b('0xd'));logger[_0x346b('0xe')](_0x346b('0xf'),_0x497610,_0x346b('0xd'),JSON['stringify'](_0x5ad528));if(_0x5ad528[_0x346b('0x10')]){if(_0x5ad528[_0x346b('0x10')][_0x346b('0x11')]===0x1f4){logger[_0x346b('0x10')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x497610,_0x5ad528[_0x346b('0x10')]['message']);return _0x3c6081(_0x5ad528[_0x346b('0x10')][_0x346b('0x12')]);}logger[_0x346b('0x10')](_0x346b('0xc'),_0x497610,_0x5ad528[_0x346b('0x10')][_0x346b('0x12')]);return _0x3de78c(_0x5ad528['error'][_0x346b('0x12')]);}else{logger[_0x346b('0xb')](_0x346b('0xc'),_0x497610,_0x346b('0xd'));_0x3de78c(_0x5ad528[_0x346b('0x13')]['message']);}})[_0x346b('0x14')](function(_0x258e70){logger['error'](_0x346b('0xc'),_0x497610,_0x258e70);_0x3c6081(_0x258e70);});});}
\ No newline at end of file
+var _0x94c4=['randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','catch','lodash','util','moment'];(function(_0x465e5c,_0x5d6dd0){var _0x413d9a=function(_0x58adda){while(--_0x58adda){_0x465e5c['push'](_0x465e5c['shift']());}};_0x413d9a(++_0x5d6dd0);}(_0x94c4,0xcf));var _0x494c=function(_0x502ebd,_0x470f8d){_0x502ebd=_0x502ebd-0x0;var _0x167b0a=_0x94c4[_0x502ebd];return _0x167b0a;};'use strict';var _=require(_0x494c('0x0'));var util=require(_0x494c('0x1'));var moment=require(_0x494c('0x2'));var BPromise=require('bluebird');var rs=require(_0x494c('0x3'));var fs=require('fs');var Redis=require(_0x494c('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x494c('0x5'));var logger=require(_0x494c('0x6'))(_0x494c('0x7'));var config=require(_0x494c('0x8'));var jayson=require(_0x494c('0x9'));var client=jayson[_0x494c('0xa')][_0x494c('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x14992b,_0x17791f,_0x4090a5){return new BPromise(function(_0x563451,_0x3c395d){return client[_0x494c('0xc')](_0x14992b,_0x4090a5)['then'](function(_0x108abc){logger[_0x494c('0xd')](_0x494c('0xe'),_0x17791f,_0x494c('0xf'));logger[_0x494c('0x10')]('SugarcrmConfiguration,\x20%s,\x20%s,\x20%s',_0x17791f,_0x494c('0xf'),JSON[_0x494c('0x11')](_0x108abc));if(_0x108abc[_0x494c('0x12')]){if(_0x108abc[_0x494c('0x12')]['code']===0x1f4){logger[_0x494c('0x12')](_0x494c('0xe'),_0x17791f,_0x108abc[_0x494c('0x12')][_0x494c('0x13')]);return _0x3c395d(_0x108abc['error'][_0x494c('0x13')]);}logger[_0x494c('0x12')](_0x494c('0xe'),_0x17791f,_0x108abc['error']['message']);return _0x563451(_0x108abc[_0x494c('0x12')]['message']);}else{logger[_0x494c('0xd')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x17791f,_0x494c('0xf'));_0x563451(_0x108abc['result']['message']);}})[_0x494c('0x14')](function(_0x3ab741){logger[_0x494c('0x12')](_0x494c('0xe'),_0x17791f,_0x3ab741);_0x3c395d(_0x3ab741);});});}
\ No newline at end of file
index 1587fd7..7ff0277 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x521d=['multer','util','path','connect-timeout','express','../../components/auth/service','../../config/environment','./intSugarcrmField.controller','get','isAuthenticated','/:id','show','post','create','put','destroy'];(function(_0x19bc1f,_0x22d41f){var _0x45b6ad=function(_0x2ccee1){while(--_0x2ccee1){_0x19bc1f['push'](_0x19bc1f['shift']());}};_0x45b6ad(++_0x22d41f);}(_0x521d,0x160));var _0xd521=function(_0x20a9af,_0x47d453){_0x20a9af=_0x20a9af-0x0;var _0x2ae219=_0x521d[_0x20a9af];return _0x2ae219;};'use strict';var multer=require(_0xd521('0x0'));var util=require(_0xd521('0x1'));var path=require(_0xd521('0x2'));var timeout=require(_0xd521('0x3'));var express=require(_0xd521('0x4'));var router=express['Router']();var auth=require(_0xd521('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xd521('0x6'));var controller=require(_0xd521('0x7'));router[_0xd521('0x8')]('/',auth[_0xd521('0x9')](),controller['index']);router['get'](_0xd521('0xa'),auth[_0xd521('0x9')](),controller[_0xd521('0xb')]);router[_0xd521('0xc')]('/',auth['isAuthenticated'](),controller[_0xd521('0xd')]);router[_0xd521('0xe')](_0xd521('0xa'),auth['isAuthenticated'](),controller['update']);router['delete'](_0xd521('0xa'),auth[_0xd521('0x9')](),controller[_0xd521('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0x1693=['index','/:id','post','create','update','delete','destroy','multer','util','path','connect-timeout','../../components/auth/service','../../config/environment','get','isAuthenticated'];(function(_0x17c799,_0x1d21ef){var _0x19ebff=function(_0x423b17){while(--_0x423b17){_0x17c799['push'](_0x17c799['shift']());}};_0x19ebff(++_0x1d21ef);}(_0x1693,0x16f));var _0x3169=function(_0x5ac84c,_0x287781){_0x5ac84c=_0x5ac84c-0x0;var _0x3c53d2=_0x1693[_0x5ac84c];return _0x3c53d2;};'use strict';var multer=require(_0x3169('0x0'));var util=require(_0x3169('0x1'));var path=require(_0x3169('0x2'));var timeout=require(_0x3169('0x3'));var express=require('express');var router=express['Router']();var auth=require(_0x3169('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x3169('0x5'));var controller=require('./intSugarcrmField.controller');router[_0x3169('0x6')]('/',auth[_0x3169('0x7')](),controller[_0x3169('0x8')]);router['get'](_0x3169('0x9'),auth[_0x3169('0x7')](),controller['show']);router[_0x3169('0xa')]('/',auth['isAuthenticated'](),controller[_0x3169('0xb')]);router['put'](_0x3169('0x9'),auth[_0x3169('0x7')](),controller[_0x3169('0xc')]);router[_0x3169('0xd')](_0x3169('0x9'),auth[_0x3169('0x7')](),controller[_0x3169('0xe')]);module['exports']=router;
\ No newline at end of file
index 88ffc82..bf7d27f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4483=['customVariable','keyValue','string','STRING','BOOLEAN','sequelize','exports','ENUM','variable'];(function(_0x2924fe,_0x4331d7){var _0x2f17a7=function(_0x5e80f2){while(--_0x5e80f2){_0x2924fe['push'](_0x2924fe['shift']());}};_0x2f17a7(++_0x4331d7);}(_0x4483,0x1a3));var _0x3448=function(_0x32456d,_0x203e42){_0x32456d=_0x32456d-0x0;var _0x58cfa0=_0x4483[_0x32456d];return _0x58cfa0;};'use strict';var Sequelize=require(_0x3448('0x0'));module[_0x3448('0x1')]={'type':{'type':Sequelize[_0x3448('0x2')]('string',_0x3448('0x3'),_0x3448('0x4'),_0x3448('0x5')),'defaultValue':_0x3448('0x6')},'content':{'type':Sequelize[_0x3448('0x7')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x3448('0x2')](_0x3448('0x6'),_0x3448('0x3'),_0x3448('0x4'))},'keyContent':{'type':Sequelize[_0x3448('0x7')]},'idField':{'type':Sequelize[_0x3448('0x7')]},'nameField':{'type':Sequelize[_0x3448('0x7')]},'customField':{'type':Sequelize[_0x3448('0x8')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x9bde=['BOOLEAN','exports','string','customVariable','keyValue','STRING','ENUM'];(function(_0x50bf5a,_0x807bba){var _0x4ddc1d=function(_0x349a61){while(--_0x349a61){_0x50bf5a['push'](_0x50bf5a['shift']());}};_0x4ddc1d(++_0x807bba);}(_0x9bde,0xe1));var _0xe9bd=function(_0x48f832,_0x45c1bb){_0x48f832=_0x48f832-0x0;var _0x44a83f=_0x9bde[_0x48f832];return _0x44a83f;};'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
index 6f74ec4..772e7cd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7e79=['querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','set','apply','reject','save','update','destroy','then','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','filter','where','key','VIRTUAL','merge','SugarcrmField','count','includeAll','include','rows','show','params','options','catch','create','body','find','html-pdf','zip-dir','fast-json-patch','moment','bluebird','mustache','path','ejs','lodash','crypto','jsforce'];(function(_0x3fdcee,_0x17dbfe){var _0x4a5788=function(_0x2030aa){while(--_0x2030aa){_0x3fdcee['push'](_0x3fdcee['shift']());}};_0x4a5788(++_0x17dbfe);}(_0x7e79,0x7f));var _0x97e7=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x7e79[_0x42cae2];return _0x5f256f;};'use strict';var pdf=require(_0x97e7('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x97e7('0x1'));var jsonpatch=require(_0x97e7('0x2'));var rp=require('request-promise');var moment=require(_0x97e7('0x3'));var BPromise=require(_0x97e7('0x4'));var Mustache=require(_0x97e7('0x5'));var util=require('util');var path=require(_0x97e7('0x6'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x97e7('0x7'));var fs=require('fs');var _=require(_0x97e7('0x8'));var squel=require('squel');var crypto=require(_0x97e7('0x9'));var jsforce=require(_0x97e7('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x97e7('0xb'));var Papa=require(_0x97e7('0xc'));var Redis=require(_0x97e7('0xd'));var authService=require(_0x97e7('0xe'));var qs=require(_0x97e7('0xf'));var hardwareService=require(_0x97e7('0x10'));var logger=require('../../config/logger')(_0x97e7('0x11'));var utils=require(_0x97e7('0x12'));var config=require(_0x97e7('0x13'));var db=require(_0x97e7('0x14'))['db'];function respondWithStatusCode(_0x308ccd,_0x11ed00){_0x11ed00=_0x11ed00||0xcc;return function(_0x54d93d){if(_0x54d93d){return _0x308ccd[_0x97e7('0x15')](_0x11ed00);}return _0x308ccd[_0x97e7('0x16')](_0x11ed00)[_0x97e7('0x17')]();};}function respondWithResult(_0x30dea6,_0x4bffe1){_0x4bffe1=_0x4bffe1||0xc8;return function(_0x776b4a){if(_0x776b4a){return _0x30dea6[_0x97e7('0x16')](_0x4bffe1)[_0x97e7('0x18')](_0x776b4a);}};}function respondWithFilteredResult(_0x5f18bb,_0x44fa5c){return function(_0x55257b){if(_0x55257b){var _0x137591=_0x55257b['count'],_0xbb1d8=_0x44fa5c[_0x97e7('0x19')],_0x50fa19=_0x44fa5c[_0x97e7('0x19')]+_0x44fa5c[_0x97e7('0x1a')],_0x2e3574;if(_0x50fa19>=_0x137591){_0x50fa19=_0x137591;_0x2e3574=0xc8;}else{_0x2e3574=0xce;}_0x5f18bb[_0x97e7('0x16')](_0x2e3574);return _0x5f18bb[_0x97e7('0x1b')]('Content-Range',_0xbb1d8+'-'+_0x50fa19+'/'+_0x137591)[_0x97e7('0x18')](_0x55257b);}return null;};}function patchUpdates(_0x1dd2dd){return function(_0xcf9669){try{jsonpatch[_0x97e7('0x1c')](_0xcf9669,_0x1dd2dd,!![]);}catch(_0x65144f){return BPromise[_0x97e7('0x1d')](_0x65144f);}return _0xcf9669[_0x97e7('0x1e')]();};}function saveUpdates(_0x1e3ac2,_0x422309){return function(_0x4003a0){if(_0x4003a0){return _0x4003a0[_0x97e7('0x1f')](_0x1e3ac2)['then'](function(_0x59524c){return _0x59524c;});}return null;};}function removeEntity(_0x8a88d5,_0xe5f3e5){return function(_0xa9281c){if(_0xa9281c){return _0xa9281c[_0x97e7('0x20')]()[_0x97e7('0x21')](function(){_0x8a88d5[_0x97e7('0x16')](0xcc)[_0x97e7('0x17')]();});}};}function handleEntityNotFound(_0xb9c10b,_0x26b476){return function(_0x4fc7e1){if(!_0x4fc7e1){_0xb9c10b[_0x97e7('0x15')](0x194);}return _0x4fc7e1;};}function handleError(_0x161286,_0x2bbafb){_0x2bbafb=_0x2bbafb||0x1f4;return function(_0x2d8bf6){logger[_0x97e7('0x22')](_0x2d8bf6[_0x97e7('0x23')]);if(_0x2d8bf6[_0x97e7('0x24')]){delete _0x2d8bf6[_0x97e7('0x24')];}_0x161286[_0x97e7('0x16')](_0x2bbafb)[_0x97e7('0x25')](_0x2d8bf6);};}exports[_0x97e7('0x26')]=function(_0x45cdbf,_0x23c46d){var _0x491499={},_0x2082b3={},_0x121e70={'count':0x0,'rows':[]};var _0x4c1a01=db['SugarcrmField'][_0x97e7('0x27')];_0x2082b3[_0x97e7('0x28')]=_[_0x97e7('0x29')](_0x4c1a01);_0x2082b3[_0x97e7('0x2a')]=_[_0x97e7('0x29')](_0x45cdbf[_0x97e7('0x2a')]);_0x2082b3[_0x97e7('0x2b')]=_[_0x97e7('0x2c')](_0x2082b3[_0x97e7('0x28')],_0x2082b3[_0x97e7('0x2a')]);_0x491499[_0x97e7('0x2d')]=_[_0x97e7('0x2c')](_0x2082b3['model'],qs[_0x97e7('0x2e')](_0x45cdbf['query'][_0x97e7('0x2e')]));_0x491499[_0x97e7('0x2d')]=_0x491499[_0x97e7('0x2d')]['length']?_0x491499[_0x97e7('0x2d')]:_0x2082b3[_0x97e7('0x28')];if(!_0x45cdbf[_0x97e7('0x2a')][_0x97e7('0x2f')](_0x97e7('0x30'))){_0x491499[_0x97e7('0x1a')]=qs[_0x97e7('0x1a')](_0x45cdbf[_0x97e7('0x2a')][_0x97e7('0x1a')]);_0x491499[_0x97e7('0x19')]=qs[_0x97e7('0x19')](_0x45cdbf[_0x97e7('0x2a')][_0x97e7('0x19')]);}_0x491499[_0x97e7('0x31')]=qs[_0x97e7('0x32')](_0x45cdbf[_0x97e7('0x2a')][_0x97e7('0x32')]);_0x491499['where']=qs[_0x97e7('0x2b')](_[_0x97e7('0x33')](_0x45cdbf['query'],_0x2082b3[_0x97e7('0x2b')]));if(_0x45cdbf['query'][_0x97e7('0x34')]){_0x491499[_0x97e7('0x35')]=_['merge'](_0x491499['where'],{'$or':_['map'](_0x4c1a01,function(_0x524499){if(_0x524499['type'][_0x97e7('0x36')]!==_0x97e7('0x37')){var _0x353e66={};_0x353e66[_0x524499['field']]={'$like':'%'+_0x45cdbf[_0x97e7('0x2a')][_0x97e7('0x34')]+'%'};return _0x353e66;}})});}_0x491499=_[_0x97e7('0x38')]({},_0x491499,_0x45cdbf['options']);var _0x3ae069={'where':_0x491499[_0x97e7('0x35')]};return db[_0x97e7('0x39')][_0x97e7('0x3a')](_0x3ae069)[_0x97e7('0x21')](function(_0x47291f){_0x121e70[_0x97e7('0x3a')]=_0x47291f;if(_0x45cdbf[_0x97e7('0x2a')][_0x97e7('0x3b')]){_0x491499[_0x97e7('0x3c')]=[{'all':!![]}];}return db[_0x97e7('0x39')]['findAll'](_0x491499);})[_0x97e7('0x21')](function(_0x289f21){_0x121e70[_0x97e7('0x3d')]=_0x289f21;return _0x121e70;})[_0x97e7('0x21')](respondWithFilteredResult(_0x23c46d,_0x491499))['catch'](handleError(_0x23c46d,null));};exports[_0x97e7('0x3e')]=function(_0x253302,_0xee748d){var _0x5d34db={'raw':!![],'where':{'id':_0x253302[_0x97e7('0x3f')]['id']}},_0x9bae78={};_0x9bae78[_0x97e7('0x28')]=_[_0x97e7('0x29')](db[_0x97e7('0x39')]['rawAttributes']);_0x9bae78[_0x97e7('0x2a')]=_[_0x97e7('0x29')](_0x253302[_0x97e7('0x2a')]);_0x9bae78[_0x97e7('0x2b')]=_[_0x97e7('0x2c')](_0x9bae78['model'],_0x9bae78[_0x97e7('0x2a')]);_0x5d34db[_0x97e7('0x2d')]=_[_0x97e7('0x2c')](_0x9bae78[_0x97e7('0x28')],qs[_0x97e7('0x2e')](_0x253302[_0x97e7('0x2a')][_0x97e7('0x2e')]));_0x5d34db[_0x97e7('0x2d')]=_0x5d34db[_0x97e7('0x2d')]['length']?_0x5d34db[_0x97e7('0x2d')]:_0x9bae78[_0x97e7('0x28')];if(_0x253302[_0x97e7('0x2a')][_0x97e7('0x3b')]){_0x5d34db[_0x97e7('0x3c')]=[{'all':!![]}];}_0x5d34db=_['merge']({},_0x5d34db,_0x253302[_0x97e7('0x40')]);return db[_0x97e7('0x39')]['find'](_0x5d34db)[_0x97e7('0x21')](handleEntityNotFound(_0xee748d,null))['then'](respondWithResult(_0xee748d,null))[_0x97e7('0x41')](handleError(_0xee748d,null));};exports[_0x97e7('0x42')]=function(_0x387dd2,_0x44b75a){return db[_0x97e7('0x39')][_0x97e7('0x42')](_0x387dd2[_0x97e7('0x43')],{})[_0x97e7('0x21')](respondWithResult(_0x44b75a,0xc9))['catch'](handleError(_0x44b75a,null));};exports['update']=function(_0x243cf0,_0x34ad8d){if(_0x243cf0['body']['id']){delete _0x243cf0[_0x97e7('0x43')]['id'];}return db[_0x97e7('0x39')][_0x97e7('0x44')]({'where':{'id':_0x243cf0[_0x97e7('0x3f')]['id']}})[_0x97e7('0x21')](handleEntityNotFound(_0x34ad8d,null))[_0x97e7('0x21')](saveUpdates(_0x243cf0[_0x97e7('0x43')],null))[_0x97e7('0x21')](respondWithResult(_0x34ad8d,null))['catch'](handleError(_0x34ad8d,null));};exports['destroy']=function(_0x10a1a9,_0x486f2e){return db[_0x97e7('0x39')][_0x97e7('0x44')]({'where':{'id':_0x10a1a9[_0x97e7('0x3f')]['id']}})[_0x97e7('0x21')](handleEntityNotFound(_0x486f2e,null))[_0x97e7('0x21')](removeEntity(_0x486f2e,null))[_0x97e7('0x41')](handleError(_0x486f2e,null));};
\ No newline at end of file
+var _0x6834=['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','sendStatus','status','end','offset','set','json','apply','reject','save','update','stack','name','send','index','SugarcrmField','model','query','intersection','fields','attributes','length','hasOwnProperty','limit','sort','where','pick','filter','map','type','VIRTUAL','field','merge','options','count','then','includeAll','include','findAll','rows','catch','keys','find','create','body','params','destroy','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','to-csv'];(function(_0x5c5882,_0x35c0a9){var _0x52b06e=function(_0x2d5a5f){while(--_0x2d5a5f){_0x5c5882['push'](_0x5c5882['shift']());}};_0x52b06e(++_0x35c0a9);}(_0x6834,0x1ef));var _0x4683=function(_0x32ae96,_0x15313c){_0x32ae96=_0x32ae96-0x0;var _0x17d45a=_0x6834[_0x32ae96];return _0x17d45a;};'use strict';var pdf=require(_0x4683('0x0'));var emlformat=require(_0x4683('0x1'));var rimraf=require(_0x4683('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x4683('0x3'));var moment=require('moment');var BPromise=require(_0x4683('0x4'));var Mustache=require(_0x4683('0x5'));var util=require(_0x4683('0x6'));var path=require(_0x4683('0x7'));var sox=require('sox');var csv=require(_0x4683('0x8'));var ejs=require(_0x4683('0x9'));var fs=require('fs');var _=require(_0x4683('0xa'));var squel=require(_0x4683('0xb'));var crypto=require(_0x4683('0xc'));var jsforce=require(_0x4683('0xd'));var deskjs=require(_0x4683('0xe'));var toCsv=require(_0x4683('0x8'));var querystring=require(_0x4683('0xf'));var Papa=require(_0x4683('0x10'));var Redis=require(_0x4683('0x11'));var authService=require(_0x4683('0x12'));var qs=require(_0x4683('0x13'));var hardwareService=require(_0x4683('0x14'));var logger=require(_0x4683('0x15'))(_0x4683('0x16'));var utils=require(_0x4683('0x17'));var config=require(_0x4683('0x18'));var db=require(_0x4683('0x19'))['db'];function respondWithStatusCode(_0x9ed258,_0x13d079){_0x13d079=_0x13d079||0xcc;return function(_0x272a5b){if(_0x272a5b){return _0x9ed258[_0x4683('0x1a')](_0x13d079);}return _0x9ed258[_0x4683('0x1b')](_0x13d079)[_0x4683('0x1c')]();};}function respondWithResult(_0x26dc09,_0x48307e){_0x48307e=_0x48307e||0xc8;return function(_0xa743e6){if(_0xa743e6){return _0x26dc09['status'](_0x48307e)['json'](_0xa743e6);}};}function respondWithFilteredResult(_0x13fe55,_0x42effb){return function(_0x49c771){if(_0x49c771){var _0x3b4c2a=_0x49c771['count'],_0x2957d4=_0x42effb['offset'],_0x17464f=_0x42effb[_0x4683('0x1d')]+_0x42effb['limit'],_0x215a84;if(_0x17464f>=_0x3b4c2a){_0x17464f=_0x3b4c2a;_0x215a84=0xc8;}else{_0x215a84=0xce;}_0x13fe55['status'](_0x215a84);return _0x13fe55[_0x4683('0x1e')]('Content-Range',_0x2957d4+'-'+_0x17464f+'/'+_0x3b4c2a)[_0x4683('0x1f')](_0x49c771);}return null;};}function patchUpdates(_0x49dc1b){return function(_0x59f14d){try{jsonpatch[_0x4683('0x20')](_0x59f14d,_0x49dc1b,!![]);}catch(_0x2447c6){return BPromise[_0x4683('0x21')](_0x2447c6);}return _0x59f14d[_0x4683('0x22')]();};}function saveUpdates(_0x2952dd,_0x1ebbde){return function(_0x52e732){if(_0x52e732){return _0x52e732[_0x4683('0x23')](_0x2952dd)['then'](function(_0x44e9fd){return _0x44e9fd;});}return null;};}function removeEntity(_0x36b65c,_0x235db2){return function(_0x1956c1){if(_0x1956c1){return _0x1956c1['destroy']()['then'](function(){_0x36b65c[_0x4683('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x350f6e,_0x508c09){return function(_0x23892f){if(!_0x23892f){_0x350f6e[_0x4683('0x1a')](0x194);}return _0x23892f;};}function handleError(_0x5afcaa,_0x1fc655){_0x1fc655=_0x1fc655||0x1f4;return function(_0x586b1e){logger['error'](_0x586b1e[_0x4683('0x24')]);if(_0x586b1e[_0x4683('0x25')]){delete _0x586b1e[_0x4683('0x25')];}_0x5afcaa[_0x4683('0x1b')](_0x1fc655)[_0x4683('0x26')](_0x586b1e);};}exports[_0x4683('0x27')]=function(_0x525492,_0x141fa9){var _0x5785fa={},_0x135ecd={},_0x1a82be={'count':0x0,'rows':[]};var _0x56ef54=db[_0x4683('0x28')]['rawAttributes'];_0x135ecd[_0x4683('0x29')]=_['keys'](_0x56ef54);_0x135ecd[_0x4683('0x2a')]=_['keys'](_0x525492[_0x4683('0x2a')]);_0x135ecd['filters']=_[_0x4683('0x2b')](_0x135ecd[_0x4683('0x29')],_0x135ecd[_0x4683('0x2a')]);_0x5785fa['attributes']=_['intersection'](_0x135ecd[_0x4683('0x29')],qs[_0x4683('0x2c')](_0x525492[_0x4683('0x2a')][_0x4683('0x2c')]));_0x5785fa[_0x4683('0x2d')]=_0x5785fa[_0x4683('0x2d')][_0x4683('0x2e')]?_0x5785fa[_0x4683('0x2d')]:_0x135ecd[_0x4683('0x29')];if(!_0x525492[_0x4683('0x2a')][_0x4683('0x2f')]('nolimit')){_0x5785fa['limit']=qs[_0x4683('0x30')](_0x525492[_0x4683('0x2a')][_0x4683('0x30')]);_0x5785fa[_0x4683('0x1d')]=qs[_0x4683('0x1d')](_0x525492[_0x4683('0x2a')][_0x4683('0x1d')]);}_0x5785fa['order']=qs[_0x4683('0x31')](_0x525492[_0x4683('0x2a')][_0x4683('0x31')]);_0x5785fa[_0x4683('0x32')]=qs['filters'](_[_0x4683('0x33')](_0x525492[_0x4683('0x2a')],_0x135ecd['filters']));if(_0x525492[_0x4683('0x2a')][_0x4683('0x34')]){_0x5785fa['where']=_['merge'](_0x5785fa[_0x4683('0x32')],{'$or':_[_0x4683('0x35')](_0x56ef54,function(_0x519163){if(_0x519163[_0x4683('0x36')]['key']!==_0x4683('0x37')){var _0x55637a={};_0x55637a[_0x519163[_0x4683('0x38')]]={'$like':'%'+_0x525492[_0x4683('0x2a')][_0x4683('0x34')]+'%'};return _0x55637a;}})});}_0x5785fa=_[_0x4683('0x39')]({},_0x5785fa,_0x525492[_0x4683('0x3a')]);var _0x425606={'where':_0x5785fa[_0x4683('0x32')]};return db[_0x4683('0x28')][_0x4683('0x3b')](_0x425606)[_0x4683('0x3c')](function(_0x4b6b99){_0x1a82be[_0x4683('0x3b')]=_0x4b6b99;if(_0x525492['query'][_0x4683('0x3d')]){_0x5785fa[_0x4683('0x3e')]=[{'all':!![]}];}return db['SugarcrmField'][_0x4683('0x3f')](_0x5785fa);})['then'](function(_0x5b7c2c){_0x1a82be[_0x4683('0x40')]=_0x5b7c2c;return _0x1a82be;})['then'](respondWithFilteredResult(_0x141fa9,_0x5785fa))[_0x4683('0x41')](handleError(_0x141fa9,null));};exports['show']=function(_0xeab5fc,_0x4c5caa){var _0x2fe8ae={'raw':!![],'where':{'id':_0xeab5fc['params']['id']}},_0x4ae57c={};_0x4ae57c[_0x4683('0x29')]=_[_0x4683('0x42')](db[_0x4683('0x28')]['rawAttributes']);_0x4ae57c[_0x4683('0x2a')]=_['keys'](_0xeab5fc[_0x4683('0x2a')]);_0x4ae57c['filters']=_[_0x4683('0x2b')](_0x4ae57c['model'],_0x4ae57c[_0x4683('0x2a')]);_0x2fe8ae[_0x4683('0x2d')]=_[_0x4683('0x2b')](_0x4ae57c[_0x4683('0x29')],qs[_0x4683('0x2c')](_0xeab5fc[_0x4683('0x2a')][_0x4683('0x2c')]));_0x2fe8ae[_0x4683('0x2d')]=_0x2fe8ae[_0x4683('0x2d')][_0x4683('0x2e')]?_0x2fe8ae[_0x4683('0x2d')]:_0x4ae57c['model'];if(_0xeab5fc[_0x4683('0x2a')][_0x4683('0x3d')]){_0x2fe8ae[_0x4683('0x3e')]=[{'all':!![]}];}_0x2fe8ae=_[_0x4683('0x39')]({},_0x2fe8ae,_0xeab5fc[_0x4683('0x3a')]);return db['SugarcrmField'][_0x4683('0x43')](_0x2fe8ae)[_0x4683('0x3c')](handleEntityNotFound(_0x4c5caa,null))['then'](respondWithResult(_0x4c5caa,null))[_0x4683('0x41')](handleError(_0x4c5caa,null));};exports[_0x4683('0x44')]=function(_0x59bf9e,_0x25edaa){return db[_0x4683('0x28')][_0x4683('0x44')](_0x59bf9e[_0x4683('0x45')],{})[_0x4683('0x3c')](respondWithResult(_0x25edaa,0xc9))['catch'](handleError(_0x25edaa,null));};exports[_0x4683('0x23')]=function(_0x1ca9d7,_0x514aa1){if(_0x1ca9d7[_0x4683('0x45')]['id']){delete _0x1ca9d7['body']['id'];}return db[_0x4683('0x28')][_0x4683('0x43')]({'where':{'id':_0x1ca9d7[_0x4683('0x46')]['id']}})[_0x4683('0x3c')](handleEntityNotFound(_0x514aa1,null))['then'](saveUpdates(_0x1ca9d7[_0x4683('0x45')],null))['then'](respondWithResult(_0x514aa1,null))[_0x4683('0x41')](handleError(_0x514aa1,null));};exports[_0x4683('0x47')]=function(_0xba2b0b,_0x2bccc8){return db['SugarcrmField'][_0x4683('0x43')]({'where':{'id':_0xba2b0b[_0x4683('0x46')]['id']}})['then'](handleEntityNotFound(_0x2bccc8,null))[_0x4683('0x3c')](removeEntity(_0x2bccc8,null))[_0x4683('0x41')](handleError(_0x2bccc8,null));};
\ No newline at end of file
index 015db21..940595e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x79ce=['request-promise','path','../../config/environment','exports','define','SugarcrmField','int_sugarcrm_fields','sugarcrm_unique_index','idField','FieldId','lodash','moment','bluebird'];(function(_0x1ebe90,_0x5d29fc){var _0x447c82=function(_0x1c2646){while(--_0x1c2646){_0x1ebe90['push'](_0x1ebe90['shift']());}};_0x447c82(++_0x5d29fc);}(_0x79ce,0x176));var _0xe79c=function(_0x125bd6,_0x32c84c){_0x125bd6=_0x125bd6-0x0;var _0x93ab0=_0x79ce[_0x125bd6];return _0x93ab0;};'use strict';var _=require(_0xe79c('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0xe79c('0x1'));var BPromise=require(_0xe79c('0x2'));var rp=require(_0xe79c('0x3'));var fs=require('fs');var path=require(_0xe79c('0x4'));var rimraf=require('rimraf');var config=require(_0xe79c('0x5'));var attributes=require('./intSugarcrmField.attributes');module[_0xe79c('0x6')]=function(_0x534dda,_0x575afe){return _0x534dda[_0xe79c('0x7')](_0xe79c('0x8'),attributes,{'tableName':_0xe79c('0x9'),'paranoid':![],'indexes':[{'name':_0xe79c('0xa'),'fields':[_0xe79c('0xb'),_0xe79c('0xc')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xf4be=['SugarcrmField','int_sugarcrm_fields','idField','FieldId','lodash','util','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./intSugarcrmField.attributes'];(function(_0x493cea,_0x144c6a){var _0x1c32ba=function(_0x47c0f9){while(--_0x47c0f9){_0x493cea['push'](_0x493cea['shift']());}};_0x1c32ba(++_0x144c6a);}(_0xf4be,0x146));var _0xef4b=function(_0x1c8da8,_0x9f764){_0x1c8da8=_0x1c8da8-0x0;var _0x5a0dda=_0xf4be[_0x1c8da8];return _0x5a0dda;};'use strict';var _=require(_0xef4b('0x0'));var util=require(_0xef4b('0x1'));var logger=require('../../config/logger')(_0xef4b('0x2'));var moment=require(_0xef4b('0x3'));var BPromise=require(_0xef4b('0x4'));var rp=require(_0xef4b('0x5'));var fs=require('fs');var path=require(_0xef4b('0x6'));var rimraf=require(_0xef4b('0x7'));var config=require(_0xef4b('0x8'));var attributes=require(_0xef4b('0x9'));module['exports']=function(_0x2e4b1b,_0x56e17f){return _0x2e4b1b['define'](_0xef4b('0xa'),attributes,{'tableName':_0xef4b('0xb'),'paranoid':![],'indexes':[{'name':'sugarcrm_unique_index','fields':[_0xef4b('0xc'),_0xef4b('0xd')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index a724792..6b20f04 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9a10=['lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/logger','jayson/promise','client','http','then','info','request\x20sent','debug','SugarcrmField,\x20%s,\x20%s,\x20%s','error','code','SugarcrmField,\x20%s,\x20%s','message','result','catch'];(function(_0x50007c,_0x1cbf11){var _0x5c1ec7=function(_0x52d038){while(--_0x52d038){_0x50007c['push'](_0x50007c['shift']());}};_0x5c1ec7(++_0x1cbf11);}(_0x9a10,0x150));var _0x09a1=function(_0x233352,_0x55f74f){_0x233352=_0x233352-0x0;var _0x10c295=_0x9a10[_0x233352];return _0x10c295;};'use strict';var _=require(_0x09a1('0x0'));var util=require(_0x09a1('0x1'));var moment=require(_0x09a1('0x2'));var BPromise=require(_0x09a1('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x09a1('0x4'));var db=require(_0x09a1('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x09a1('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x09a1('0x7'));var client=jayson[_0x09a1('0x8')][_0x09a1('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x1d6553,_0x416941,_0x2ebadc){return new BPromise(function(_0x39a793,_0x529da7){return client['request'](_0x1d6553,_0x2ebadc)[_0x09a1('0xa')](function(_0x4b2af2){logger[_0x09a1('0xb')]('SugarcrmField,\x20%s,\x20%s',_0x416941,_0x09a1('0xc'));logger[_0x09a1('0xd')](_0x09a1('0xe'),_0x416941,_0x09a1('0xc'),JSON['stringify'](_0x4b2af2));if(_0x4b2af2[_0x09a1('0xf')]){if(_0x4b2af2['error'][_0x09a1('0x10')]===0x1f4){logger['error'](_0x09a1('0x11'),_0x416941,_0x4b2af2[_0x09a1('0xf')][_0x09a1('0x12')]);return _0x529da7(_0x4b2af2[_0x09a1('0xf')]['message']);}logger['error'](_0x09a1('0x11'),_0x416941,_0x4b2af2[_0x09a1('0xf')]['message']);return _0x39a793(_0x4b2af2[_0x09a1('0xf')]['message']);}else{logger['info'](_0x09a1('0x11'),_0x416941,_0x09a1('0xc'));_0x39a793(_0x4b2af2[_0x09a1('0x13')]['message']);}})[_0x09a1('0x14')](function(_0x208a89){logger[_0x09a1('0xf')](_0x09a1('0x11'),_0x416941,_0x208a89);_0x529da7(_0x208a89);});});}
\ No newline at end of file
+var _0xb06c=['code','message','result','lodash','bluebird','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','SugarcrmField,\x20%s,\x20%s','request\x20sent','debug','SugarcrmField,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x35da42,_0x5c2610){var _0x370035=function(_0x546db5){while(--_0x546db5){_0x35da42['push'](_0x35da42['shift']());}};_0x370035(++_0x5c2610);}(_0xb06c,0x1d1));var _0xcb06=function(_0x397e50,_0x2e8182){_0x397e50=_0x397e50-0x0;var _0x17290b=_0xb06c[_0x397e50];return _0x17290b;};'use strict';var _=require(_0xcb06('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xcb06('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0xcb06('0x2'))['db'];var utils=require('../../config/utils');var logger=require(_0xcb06('0x3'))(_0xcb06('0x4'));var config=require(_0xcb06('0x5'));var jayson=require(_0xcb06('0x6'));var client=jayson[_0xcb06('0x7')][_0xcb06('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x1458c1,_0x275844,_0x433a6d){return new BPromise(function(_0x3fb091,_0x22f735){return client[_0xcb06('0x9')](_0x1458c1,_0x433a6d)[_0xcb06('0xa')](function(_0x470d0){logger[_0xcb06('0xb')](_0xcb06('0xc'),_0x275844,_0xcb06('0xd'));logger[_0xcb06('0xe')](_0xcb06('0xf'),_0x275844,_0xcb06('0xd'),JSON[_0xcb06('0x10')](_0x470d0));if(_0x470d0[_0xcb06('0x11')]){if(_0x470d0['error'][_0xcb06('0x12')]===0x1f4){logger[_0xcb06('0x11')]('SugarcrmField,\x20%s,\x20%s',_0x275844,_0x470d0[_0xcb06('0x11')][_0xcb06('0x13')]);return _0x22f735(_0x470d0[_0xcb06('0x11')][_0xcb06('0x13')]);}logger[_0xcb06('0x11')](_0xcb06('0xc'),_0x275844,_0x470d0[_0xcb06('0x11')][_0xcb06('0x13')]);return _0x3fb091(_0x470d0[_0xcb06('0x11')][_0xcb06('0x13')]);}else{logger['info']('SugarcrmField,\x20%s,\x20%s',_0x275844,_0xcb06('0xd'));_0x3fb091(_0x470d0[_0xcb06('0x14')]['message']);}})['catch'](function(_0x4ffe0d){logger[_0xcb06('0x11')](_0xcb06('0xc'),_0x275844,_0x4ffe0d);_0x22f735(_0x4ffe0d);});});}
\ No newline at end of file
index 844354e..8af6c6b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d2b=['../../config/environment','index','get','/:id','isAuthenticated','/:id/configurations','post','create','addConfiguration','put','update','delete','destroy','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x51a13b,_0x4ecad3){var _0x20ce74=function(_0x3aabed){while(--_0x3aabed){_0x51a13b['push'](_0x51a13b['shift']());}};_0x20ce74(++_0x4ecad3);}(_0x5d2b,0xf4));var _0xb5d2=function(_0x5004ad,_0x45a6c8){_0x5004ad=_0x5004ad-0x0;var _0x3460ec=_0x5d2b[_0x5004ad];return _0x3460ec;};'use strict';var multer=require(_0xb5d2('0x0'));var util=require(_0xb5d2('0x1'));var path=require(_0xb5d2('0x2'));var timeout=require(_0xb5d2('0x3'));var express=require(_0xb5d2('0x4'));var router=express[_0xb5d2('0x5')]();var auth=require(_0xb5d2('0x6'));var interaction=require(_0xb5d2('0x7'));var config=require(_0xb5d2('0x8'));var controller=require('./intVtigerAccount.controller');router['get']('/',auth['isAuthenticated'](),controller[_0xb5d2('0x9')]);router[_0xb5d2('0xa')](_0xb5d2('0xb'),auth[_0xb5d2('0xc')](),controller['show']);router[_0xb5d2('0xa')](_0xb5d2('0xd'),auth[_0xb5d2('0xc')](),controller['getConfigurations']);router['get']('/:id/fields',auth[_0xb5d2('0xc')](),controller['getFields']);router[_0xb5d2('0xe')]('/',auth[_0xb5d2('0xc')](),controller[_0xb5d2('0xf')]);router['post']('/:id/configurations',auth[_0xb5d2('0xc')](),controller[_0xb5d2('0x10')]);router[_0xb5d2('0x11')]('/:id',auth[_0xb5d2('0xc')](),controller[_0xb5d2('0x12')]);router[_0xb5d2('0x13')](_0xb5d2('0xb'),auth['isAuthenticated'](),controller[_0xb5d2('0x14')]);module['exports']=router;
\ No newline at end of file
+var _0x4545=['isAuthenticated','update','destroy','util','connect-timeout','Router','../../components/auth/service','../../config/environment','get','index','/:id','/:id/fields','getFields','create','post','/:id/configurations','put'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x4545,0x135));var _0x5454=function(_0x4a9fb1,_0x273043){_0x4a9fb1=_0x4a9fb1-0x0;var _0x348672=_0x4545[_0x4a9fb1];return _0x348672;};'use strict';var multer=require('multer');var util=require(_0x5454('0x0'));var path=require('path');var timeout=require(_0x5454('0x1'));var express=require('express');var router=express[_0x5454('0x2')]();var auth=require(_0x5454('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x5454('0x4'));var controller=require('./intVtigerAccount.controller');router[_0x5454('0x5')]('/',auth['isAuthenticated'](),controller[_0x5454('0x6')]);router['get'](_0x5454('0x7'),auth['isAuthenticated'](),controller['show']);router[_0x5454('0x5')]('/:id/configurations',auth['isAuthenticated'](),controller['getConfigurations']);router[_0x5454('0x5')](_0x5454('0x8'),auth['isAuthenticated'](),controller[_0x5454('0x9')]);router['post']('/',auth['isAuthenticated'](),controller[_0x5454('0xa')]);router[_0x5454('0xb')](_0x5454('0xc'),auth['isAuthenticated'](),controller['addConfiguration']);router[_0x5454('0xd')](_0x5454('0x7'),auth[_0x5454('0xe')](),controller[_0x5454('0xf')]);router['delete'](_0x5454('0x7'),auth[_0x5454('0xe')](),controller[_0x5454('0x10')]);module['exports']=router;
\ No newline at end of file
index 38e3064..41983e6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc31b=['STRING','HelpDesk','sequelize','exports'];(function(_0x1981aa,_0x196b04){var _0x7e028b=function(_0xc0107d){while(--_0xc0107d){_0x1981aa['push'](_0x1981aa['shift']());}};_0x7e028b(++_0x196b04);}(_0xc31b,0xc2));var _0xbc31=function(_0x49372f,_0x3ef0de){_0x49372f=_0x49372f-0x0;var _0x26a0d6=_0xc31b[_0x49372f];return _0x26a0d6;};'use strict';var Sequelize=require(_0xbc31('0x0'));module[_0xbc31('0x1')]={'name':{'type':Sequelize[_0xbc31('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0xbc31('0x2')]},'username':{'type':Sequelize[_0xbc31('0x2')],'allowNull':![]},'moduleName':{'type':Sequelize[_0xbc31('0x2')],'allowNull':![],'defaultValue':_0xbc31('0x3')},'remoteUri':{'type':Sequelize[_0xbc31('0x2')],'allowNull':![]},'serverUrl':{'type':Sequelize['STRING']},'accessKey':{'type':Sequelize[_0xbc31('0x2')],'allowNull':![]}};
\ No newline at end of file
+var _0x3d32=['exports','STRING','HelpDesk'];(function(_0x320b8e,_0x1da3fe){var _0x55a10a=function(_0x148a56){while(--_0x148a56){_0x320b8e['push'](_0x320b8e['shift']());}};_0x55a10a(++_0x1da3fe);}(_0x3d32,0x11d));var _0x23d3=function(_0x56aa1e,_0x30f9aa){_0x56aa1e=_0x56aa1e-0x0;var _0x51efde=_0x3d32[_0x56aa1e];return _0x51efde;};'use strict';var Sequelize=require('sequelize');module[_0x23d3('0x0')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'description':{'type':Sequelize[_0x23d3('0x1')]},'username':{'type':Sequelize[_0x23d3('0x1')],'allowNull':![]},'moduleName':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x23d3('0x2')},'remoteUri':{'type':Sequelize[_0x23d3('0x1')],'allowNull':![]},'serverUrl':{'type':Sequelize['STRING']},'accessKey':{'type':Sequelize[_0x23d3('0x1')],'allowNull':![]}};
\ No newline at end of file
index 66e634a..19498d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x67ed=['Descriptions','getDescriptions','VtigerField','md5','username','moduleName','remoteUri','serverUrl','slice','substring','%s/webservice.php','GET','getchallenge','success','POST','login','describe','sessionName','autogenerated','reference','type','remove','editable','false','label','startsWith','picklist','picklistValues','value','log','vTiger\x20error:\x20','statusCode','getFields,\x20%s,\x20%s,\x20%s','getFields','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../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','request\x20sent','debug','VtigerAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','VtigerAccount,\x20%s,\x20%s','message','info','result','catch','sendStatus','status','end','json','offset','set','reject','save','update','destroy','stack','name','send','index','VtigerAccount','rawAttributes','model','keys','query','intersection','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where','filters','filter','merge','map','key','VIRTUAL','options','count','include','rows','show','params','length','find','body','getConfigurations','findOne','VtigerConfiguration','pick','AccountId','Subjects','getSubjects','channel'];(function(_0x2d7f0e,_0x3e6fbd){var _0x110b07=function(_0x557b00){while(--_0x557b00){_0x2d7f0e['push'](_0x2d7f0e['shift']());}};_0x110b07(++_0x3e6fbd);}(_0x67ed,0x124));var _0xd67e=function(_0x7d9cda,_0x45a149){_0x7d9cda=_0x7d9cda-0x0;var _0x1fe25d=_0x67ed[_0x7d9cda];return _0x1fe25d;};'use strict';var pdf=require(_0xd67e('0x0'));var emlformat=require(_0xd67e('0x1'));var rimraf=require(_0xd67e('0x2'));var zipdir=require(_0xd67e('0x3'));var jsonpatch=require(_0xd67e('0x4'));var rp=require(_0xd67e('0x5'));var moment=require(_0xd67e('0x6'));var BPromise=require(_0xd67e('0x7'));var Mustache=require('mustache');var util=require('util');var path=require(_0xd67e('0x8'));var sox=require(_0xd67e('0x9'));var csv=require(_0xd67e('0xa'));var ejs=require(_0xd67e('0xb'));var fs=require('fs');var _=require(_0xd67e('0xc'));var squel=require(_0xd67e('0xd'));var crypto=require(_0xd67e('0xe'));var jsforce=require(_0xd67e('0xf'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xd67e('0x10'));var Redis=require(_0xd67e('0x11'));var authService=require(_0xd67e('0x12'));var qs=require(_0xd67e('0x13'));var hardwareService=require(_0xd67e('0x14'));var logger=require(_0xd67e('0x15'))(_0xd67e('0x16'));var utils=require(_0xd67e('0x17'));var config=require('../../config/environment');var db=require(_0xd67e('0x18'))['db'];var integrations=require(_0xd67e('0x19'));var jayson=require(_0xd67e('0x1a'));var client=jayson[_0xd67e('0x1b')][_0xd67e('0x1c')]({'port':0x232a});function checkPasswordPattern(_0x5ddc94,_0x9a5a0d,_0x22da8c){if(_0x22da8c){var _0x4c4d1a=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4c4d1a[_0xd67e('0x1d')](_0x9a5a0d)){return _0x5ddc94;}else{throw new Error(_0xd67e('0x1e'));}}else{return _0x5ddc94;}}function respondWithRpcPromise(_0x450e17,_0x5ced7c,_0x493bec,_0x86efa0){return new BPromise(function(_0x15ff83,_0x5daee3){var _0x5e7fb4=_0x86efa0||client;return _0x5e7fb4[_0xd67e('0x1f')](_0x450e17,_0x493bec)[_0xd67e('0x20')](function(_0x1be2e5){logger['info']('VtigerAccount,\x20%s,\x20%s',_0x5ced7c,_0xd67e('0x21'));logger[_0xd67e('0x22')](_0xd67e('0x23'),_0x5ced7c,'request\x20sent',JSON[_0xd67e('0x24')](_0x1be2e5));if(_0x1be2e5[_0xd67e('0x25')]){if(_0x1be2e5['error'][_0xd67e('0x26')]===0x1f4){logger[_0xd67e('0x25')](_0xd67e('0x27'),_0x5ced7c,_0x1be2e5['error']['message']);return _0x5daee3(_0x1be2e5[_0xd67e('0x25')][_0xd67e('0x28')]);}logger['error'](_0xd67e('0x27'),_0x5ced7c,_0x1be2e5[_0xd67e('0x25')][_0xd67e('0x28')]);return _0x15ff83(_0x1be2e5['error']['message']);}else{logger[_0xd67e('0x29')](_0xd67e('0x27'),_0x5ced7c,_0xd67e('0x21'));_0x15ff83(_0x1be2e5[_0xd67e('0x2a')][_0xd67e('0x28')]);}})[_0xd67e('0x2b')](function(_0x22ca72){logger[_0xd67e('0x25')]('VtigerAccount,\x20%s,\x20%s',_0x5ced7c,_0x22ca72);_0x5daee3(_0x22ca72);});});}function respondWithStatusCode(_0x401de1,_0x20ba93){_0x20ba93=_0x20ba93||0xcc;return function(_0x438e72){if(_0x438e72){return _0x401de1[_0xd67e('0x2c')](_0x20ba93);}return _0x401de1[_0xd67e('0x2d')](_0x20ba93)[_0xd67e('0x2e')]();};}function respondWithResult(_0x35e6d7,_0x5b9f6f){_0x5b9f6f=_0x5b9f6f||0xc8;return function(_0x42a9fa){if(_0x42a9fa){return _0x35e6d7[_0xd67e('0x2d')](_0x5b9f6f)[_0xd67e('0x2f')](_0x42a9fa);}};}function respondWithFilteredResult(_0x387354,_0x1b5699){return function(_0x136462){if(_0x136462){var _0x34ac18=_0x136462['count'],_0x52d03b=_0x1b5699['offset'],_0x419f75=_0x1b5699[_0xd67e('0x30')]+_0x1b5699['limit'],_0x5c062c;if(_0x419f75>=_0x34ac18){_0x419f75=_0x34ac18;_0x5c062c=0xc8;}else{_0x5c062c=0xce;}_0x387354[_0xd67e('0x2d')](_0x5c062c);return _0x387354[_0xd67e('0x31')]('Content-Range',_0x52d03b+'-'+_0x419f75+'/'+_0x34ac18)['json'](_0x136462);}return null;};}function patchUpdates(_0x100bdc){return function(_0x791fae){try{jsonpatch['apply'](_0x791fae,_0x100bdc,!![]);}catch(_0x244f5d){return BPromise[_0xd67e('0x32')](_0x244f5d);}return _0x791fae[_0xd67e('0x33')]();};}function saveUpdates(_0x392090,_0x575e2b){return function(_0x149a08){if(_0x149a08){return _0x149a08[_0xd67e('0x34')](_0x392090)[_0xd67e('0x20')](function(_0x5649ad){return _0x5649ad;});}return null;};}function removeEntity(_0x35253c,_0x161f00){return function(_0x52fb16){if(_0x52fb16){return _0x52fb16[_0xd67e('0x35')]()[_0xd67e('0x20')](function(){_0x35253c[_0xd67e('0x2d')](0xcc)[_0xd67e('0x2e')]();});}};}function handleEntityNotFound(_0x288bf8,_0x4f9f48){return function(_0x4dfe5e){if(!_0x4dfe5e){_0x288bf8[_0xd67e('0x2c')](0x194);}return _0x4dfe5e;};}function handleError(_0x2bfbb0,_0x4f6ecd){_0x4f6ecd=_0x4f6ecd||0x1f4;return function(_0x361cde){logger[_0xd67e('0x25')](_0x361cde[_0xd67e('0x36')]);if(_0x361cde[_0xd67e('0x37')]){delete _0x361cde[_0xd67e('0x37')];}_0x2bfbb0[_0xd67e('0x2d')](_0x4f6ecd)[_0xd67e('0x38')](_0x361cde);};}exports[_0xd67e('0x39')]=function(_0x1636b7,_0x11c7a4){var _0x501b2f={},_0x4eaeae={},_0xb0efeb={'count':0x0,'rows':[]};var _0x2bb76b=db[_0xd67e('0x3a')][_0xd67e('0x3b')];_0x4eaeae[_0xd67e('0x3c')]=_[_0xd67e('0x3d')](_0x2bb76b);_0x4eaeae[_0xd67e('0x3e')]=_[_0xd67e('0x3d')](_0x1636b7[_0xd67e('0x3e')]);_0x4eaeae['filters']=_[_0xd67e('0x3f')](_0x4eaeae[_0xd67e('0x3c')],_0x4eaeae[_0xd67e('0x3e')]);_0x501b2f[_0xd67e('0x40')]=_[_0xd67e('0x3f')](_0x4eaeae['model'],qs[_0xd67e('0x41')](_0x1636b7[_0xd67e('0x3e')][_0xd67e('0x41')]));_0x501b2f[_0xd67e('0x40')]=_0x501b2f[_0xd67e('0x40')]['length']?_0x501b2f['attributes']:_0x4eaeae[_0xd67e('0x3c')];if(!_0x1636b7[_0xd67e('0x3e')][_0xd67e('0x42')](_0xd67e('0x43'))){_0x501b2f[_0xd67e('0x44')]=qs[_0xd67e('0x44')](_0x1636b7[_0xd67e('0x3e')][_0xd67e('0x44')]);_0x501b2f[_0xd67e('0x30')]=qs['offset'](_0x1636b7[_0xd67e('0x3e')][_0xd67e('0x30')]);}_0x501b2f[_0xd67e('0x45')]=qs[_0xd67e('0x46')](_0x1636b7[_0xd67e('0x3e')]['sort']);_0x501b2f[_0xd67e('0x47')]=qs[_0xd67e('0x48')](_['pick'](_0x1636b7['query'],_0x4eaeae[_0xd67e('0x48')]));if(_0x1636b7[_0xd67e('0x3e')][_0xd67e('0x49')]){_0x501b2f[_0xd67e('0x47')]=_[_0xd67e('0x4a')](_0x501b2f[_0xd67e('0x47')],{'$or':_[_0xd67e('0x4b')](_0x2bb76b,function(_0x1674e2){if(_0x1674e2['type'][_0xd67e('0x4c')]!==_0xd67e('0x4d')){var _0x1c2220={};_0x1c2220[_0x1674e2['field']]={'$like':'%'+_0x1636b7[_0xd67e('0x3e')][_0xd67e('0x49')]+'%'};return _0x1c2220;}})});}_0x501b2f=_['merge']({},_0x501b2f,_0x1636b7[_0xd67e('0x4e')]);var _0x135501={'where':_0x501b2f[_0xd67e('0x47')]};return db[_0xd67e('0x3a')][_0xd67e('0x4f')](_0x135501)[_0xd67e('0x20')](function(_0x5e56fe){_0xb0efeb[_0xd67e('0x4f')]=_0x5e56fe;if(_0x1636b7[_0xd67e('0x3e')]['includeAll']){_0x501b2f[_0xd67e('0x50')]=[{'all':!![]}];}return db[_0xd67e('0x3a')]['findAll'](_0x501b2f);})[_0xd67e('0x20')](function(_0x9a9b9c){_0xb0efeb[_0xd67e('0x51')]=_0x9a9b9c;return _0xb0efeb;})[_0xd67e('0x20')](respondWithFilteredResult(_0x11c7a4,_0x501b2f))[_0xd67e('0x2b')](handleError(_0x11c7a4,null));};exports[_0xd67e('0x52')]=function(_0x5b97e1,_0x2e8222){var _0x22fbec={'raw':![],'where':{'id':_0x5b97e1[_0xd67e('0x53')]['id']}},_0x5c0df8={};_0x5c0df8[_0xd67e('0x3c')]=_[_0xd67e('0x3d')](db[_0xd67e('0x3a')][_0xd67e('0x3b')]);_0x5c0df8[_0xd67e('0x3e')]=_[_0xd67e('0x3d')](_0x5b97e1[_0xd67e('0x3e')]);_0x5c0df8[_0xd67e('0x48')]=_['intersection'](_0x5c0df8[_0xd67e('0x3c')],_0x5c0df8[_0xd67e('0x3e')]);_0x22fbec['attributes']=_['intersection'](_0x5c0df8[_0xd67e('0x3c')],qs[_0xd67e('0x41')](_0x5b97e1[_0xd67e('0x3e')][_0xd67e('0x41')]));_0x22fbec[_0xd67e('0x40')]=_0x22fbec[_0xd67e('0x40')][_0xd67e('0x54')]?_0x22fbec['attributes']:_0x5c0df8[_0xd67e('0x3c')];if(_0x5b97e1[_0xd67e('0x3e')]['includeAll']){_0x22fbec[_0xd67e('0x50')]=[{'all':!![]}];}_0x22fbec=_[_0xd67e('0x4a')]({},_0x22fbec,_0x5b97e1['options']);return db[_0xd67e('0x3a')][_0xd67e('0x55')](_0x22fbec)[_0xd67e('0x20')](handleEntityNotFound(_0x2e8222,null))[_0xd67e('0x20')](respondWithResult(_0x2e8222,null))[_0xd67e('0x2b')](handleError(_0x2e8222,null));};exports['create']=function(_0x1e663b,_0x46bf54){return db['VtigerAccount']['create'](_0x1e663b[_0xd67e('0x56')],{})[_0xd67e('0x20')](respondWithResult(_0x46bf54,0xc9))[_0xd67e('0x2b')](handleError(_0x46bf54,null));};exports[_0xd67e('0x34')]=function(_0x59f59e,_0x2b8569){if(_0x59f59e[_0xd67e('0x56')]['id']){delete _0x59f59e[_0xd67e('0x56')]['id'];}return db[_0xd67e('0x3a')][_0xd67e('0x55')]({'where':{'id':_0x59f59e[_0xd67e('0x53')]['id']}})['then'](handleEntityNotFound(_0x2b8569,null))[_0xd67e('0x20')](saveUpdates(_0x59f59e['body'],null))['then'](respondWithResult(_0x2b8569,null))[_0xd67e('0x2b')](handleError(_0x2b8569,null));};exports['destroy']=function(_0x2c2d3d,_0x254710){return db['VtigerAccount']['find']({'where':{'id':_0x2c2d3d[_0xd67e('0x53')]['id']}})[_0xd67e('0x20')](handleEntityNotFound(_0x254710,null))['then'](removeEntity(_0x254710,null))[_0xd67e('0x2b')](handleError(_0x254710,null));};exports[_0xd67e('0x57')]=function(_0x208c9e,_0x4dfde9,_0x27934f){var _0xef3567={};var _0x343cb4={};var _0x33126f;var _0x3fd554;return db[_0xd67e('0x3a')][_0xd67e('0x58')]({'where':{'id':_0x208c9e[_0xd67e('0x53')]['id']}})[_0xd67e('0x20')](handleEntityNotFound(_0x4dfde9,null))[_0xd67e('0x20')](function(_0x334f32){if(_0x334f32){_0x33126f=_0x334f32;_0x343cb4[_0xd67e('0x3c')]=_[_0xd67e('0x3d')](db[_0xd67e('0x59')][_0xd67e('0x3b')]);_0x343cb4[_0xd67e('0x3e')]=_[_0xd67e('0x3d')](_0x208c9e[_0xd67e('0x3e')]);_0x343cb4[_0xd67e('0x48')]=_[_0xd67e('0x3f')](_0x343cb4[_0xd67e('0x3c')],_0x343cb4[_0xd67e('0x3e')]);_0xef3567[_0xd67e('0x40')]=_[_0xd67e('0x3f')](_0x343cb4[_0xd67e('0x3c')],qs[_0xd67e('0x41')](_0x208c9e[_0xd67e('0x3e')][_0xd67e('0x41')]));_0xef3567[_0xd67e('0x40')]=_0xef3567[_0xd67e('0x40')][_0xd67e('0x54')]?_0xef3567['attributes']:_0x343cb4[_0xd67e('0x3c')];_0xef3567['order']=qs[_0xd67e('0x46')](_0x208c9e[_0xd67e('0x3e')][_0xd67e('0x46')]);_0xef3567[_0xd67e('0x47')]=qs[_0xd67e('0x48')](_[_0xd67e('0x5a')](_0x208c9e[_0xd67e('0x3e')],_0x343cb4[_0xd67e('0x48')]));if(_0x208c9e['query'][_0xd67e('0x49')]){_0xef3567['where']=_[_0xd67e('0x4a')](_0xef3567[_0xd67e('0x47')],{'$or':_['map'](_0xef3567['attributes'],function(_0x20eed8){var _0x150286={};_0x150286[_0x20eed8]={'$like':'%'+_0x208c9e[_0xd67e('0x3e')][_0xd67e('0x49')]+'%'};return _0x150286;})});}_0xef3567=_[_0xd67e('0x4a')]({},_0xef3567,_0x208c9e[_0xd67e('0x4e')]);return _0x33126f[_0xd67e('0x57')](_0xef3567);}})['then'](function(_0x5d3236){if(_0x5d3236){_0x3fd554=_0x5d3236['length'];if(!_0x208c9e['query'][_0xd67e('0x42')]('nolimit')){_0xef3567[_0xd67e('0x44')]=qs[_0xd67e('0x44')](_0x208c9e[_0xd67e('0x3e')][_0xd67e('0x44')]);_0xef3567[_0xd67e('0x30')]=qs['offset'](_0x208c9e['query']['offset']);}return _0x33126f[_0xd67e('0x57')](_0xef3567);}})[_0xd67e('0x20')](function(_0x4300c6){if(_0x4300c6){return _0x4300c6?{'count':_0x3fd554,'rows':_0x4300c6}:null;}})[_0xd67e('0x20')](respondWithResult(_0x4dfde9,null))[_0xd67e('0x2b')](handleError(_0x4dfde9,null));};exports['addConfiguration']=function(_0x382b52,_0x4e29cb,_0x211561){if(_0x382b52[_0xd67e('0x56')]['id']){delete _0x382b52[_0xd67e('0x56')]['id'];}return db['VtigerAccount'][_0xd67e('0x58')]({'where':{'id':_0x382b52[_0xd67e('0x53')]['id']}})[_0xd67e('0x20')](handleEntityNotFound(_0x4e29cb,null))[_0xd67e('0x20')](function(_0x20a756){if(_0x20a756){_0x382b52['body'][_0xd67e('0x5b')]=_0x20a756['id'];_0x382b52[_0xd67e('0x56')][_0xd67e('0x5c')]=integrations[_0xd67e('0x5d')](_0x382b52['body'][_0xd67e('0x5e')],_0x382b52['body']['type']);_0x382b52[_0xd67e('0x56')][_0xd67e('0x5f')]=integrations[_0xd67e('0x60')](_0x382b52[_0xd67e('0x56')][_0xd67e('0x5e')],_0x382b52[_0xd67e('0x56')]['type']);return db[_0xd67e('0x59')]['create'](_0x382b52['body'],{'include':[{'model':db[_0xd67e('0x61')],'as':_0xd67e('0x5c')},{'model':db['VtigerField'],'as':'Descriptions'}]});}return null;})[_0xd67e('0x20')](respondWithResult(_0x4e29cb,null))[_0xd67e('0x2b')](handleError(_0x4e29cb,null));};var md5=require(_0xd67e('0x62'));exports['getFields']=function(_0x20f579,_0x5cfc9d,_0x20fca7){var _0x318c97=null;var _0x89ae71=null;var _0x1fcaf6=null;var _0xfc35ab=null;var _0x28327f='';return db[_0xd67e('0x3a')]['findOne']({'where':{'id':_0x20f579['params']['id']},'attributes':['id',_0xd67e('0x37'),_0xd67e('0x63'),'description',_0xd67e('0x64'),_0xd67e('0x65'),_0xd67e('0x66'),'accessKey']})[_0xd67e('0x20')](handleEntityNotFound(_0x5cfc9d,null))[_0xd67e('0x20')](function(_0x13c474){if(_0x13c474){_0x318c97=_0x13c474[_0xd67e('0x63')];_0x89ae71=_0x13c474['accessKey'];_0x1fcaf6=_0x13c474[_0xd67e('0x64')];_0x28327f=_0x13c474[_0xd67e('0x65')];var _0x35a3e6=_0x28327f[_0xd67e('0x67')](-0x1);if(_0x35a3e6==='/'){_0x28327f=_0x28327f[_0xd67e('0x68')](0x0,_0x28327f['lastIndexOf'](_0x35a3e6));}_0xfc35ab=util['format'](_0xd67e('0x69'),_0x28327f);var _0xe1952d={'method':_0xd67e('0x6a'),'uri':_0xfc35ab,'qs':{'operation':_0xd67e('0x6b'),'username':_0x13c474[_0xd67e('0x63')]},'json':!![]};return rp(_0xe1952d);}})[_0xd67e('0x20')](function(_0x4c11a0){if(_0x4c11a0[_0xd67e('0x6c')]){var _0x1c72ed={'method':_0xd67e('0x6d'),'uri':_0xfc35ab,'form':{'operation':_0xd67e('0x6e'),'username':_0x318c97,'accessKey':md5(_0x4c11a0[_0xd67e('0x2a')]['token']+_0x89ae71)},'json':!![]};return rp(_0x1c72ed);}})[_0xd67e('0x20')](function(_0x5d6572){if(_0x5d6572[_0xd67e('0x6c')]){var _0x23b192={'method':_0xd67e('0x6a'),'uri':_0xfc35ab,'qs':{'operation':_0xd67e('0x6f'),'username':_0x318c97,'sessionName':_0x5d6572[_0xd67e('0x2a')][_0xd67e('0x70')],'elementType':_0x1fcaf6},'json':!![]};return rp(_0x23b192);}})[_0xd67e('0x20')](function(_0x27f1ff){if(_0x27f1ff[_0xd67e('0x6c')]){var _0x581a93=[_0xd67e('0x71'),_0xd67e('0x72'),'owner'];_['remove'](_0x27f1ff[_0xd67e('0x2a')][_0xd67e('0x41')],function(_0x27b480){return _0x581a93['includes'](_0x27b480[_0xd67e('0x73')][_0xd67e('0x37')]);});_[_0xd67e('0x74')](_0x27f1ff[_0xd67e('0x2a')][_0xd67e('0x41')],function(_0x31a7a2){return _0x31a7a2[_0xd67e('0x75')]===_0xd67e('0x76');});return{'count':_0x27f1ff['result']['fields'][_0xd67e('0x54')],'rows':_[_0xd67e('0x4b')](_0x27f1ff[_0xd67e('0x2a')][_0xd67e('0x41')],function(_0x4e1b00){return{'id':_0x4e1b00[_0xd67e('0x37')],'name':_0x4e1b00[_0xd67e('0x77')],'custom':_[_0xd67e('0x78')](_0x4e1b00[_0xd67e('0x37')],'cf_')?!![]:![],'options':_0x4e1b00[_0xd67e('0x73')][_0xd67e('0x37')]===_0xd67e('0x79')&&_0x4e1b00[_0xd67e('0x73')][_0xd67e('0x7a')][_0xd67e('0x54')]>0x0?_[_0xd67e('0x4b')](_0x4e1b00['type'][_0xd67e('0x7a')],function(_0x1c98fb){return{'name':_0x1c98fb[_0xd67e('0x77')],'value':_0x1c98fb[_0xd67e('0x7b')]};}):[]};})};}})[_0xd67e('0x20')](respondWithResult(_0x5cfc9d,null))[_0xd67e('0x2b')](function(_0x4a8586){console[_0xd67e('0x7c')](_0xd67e('0x7d')+_0x4a8586);var _0x36dcc=_0x20f579[_0xd67e('0x3e')][_0xd67e('0x1d')]?0x1f4:_0x4a8586[_0xd67e('0x7e')]||0x1f4;logger[_0xd67e('0x25')](_0xd67e('0x7f'),_0xd67e('0x80'),_0x36dcc,JSON[_0xd67e('0x24')](_0x4a8586));delete _0x4a8586[_0xd67e('0x37')];if(_0x36dcc===0x191){_0x36dcc=0x190;}_0x5cfc9d[_0xd67e('0x2d')](_0x36dcc)['send'](_0x20f579[_0xd67e('0x3e')][_0xd67e('0x1d')]?{'message':'Wrong\x20credentials','statusCode':_0x4a8586[_0xd67e('0x7e')]}:_0x4a8586);});};
\ No newline at end of file
+var _0x4803=['../../mysqldb','jayson/promise','test','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','reject','save','update','destroy','name','send','index','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','includeAll','VtigerAccount','findAll','rows','show','include','find','create','body','params','getConfigurations','findOne','VtigerConfiguration','AccountId','getSubjects','channel','Descriptions','VtigerField','Subjects','md5','getFields','username','description','remoteUri','serverUrl','moduleName','slice','substring','lastIndexOf','format','%s/webservice.php','GET','getchallenge','success','login','describe','sessionName','autogenerated','reference','owner','remove','includes','editable','false','label','startsWith','cf_','picklistValues','vTiger\x20error:\x20','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','sox','ejs','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment'];(function(_0x3fea62,_0x289fe7){var _0x4d18f6=function(_0x1f4120){while(--_0x1f4120){_0x3fea62['push'](_0x3fea62['shift']());}};_0x4d18f6(++_0x289fe7);}(_0x4803,0xe7));var _0x3480=function(_0x5135f4,_0x3d5a56){_0x5135f4=_0x5135f4-0x0;var _0x19d2bc=_0x4803[_0x5135f4];return _0x19d2bc;};'use strict';var pdf=require(_0x3480('0x0'));var emlformat=require(_0x3480('0x1'));var rimraf=require(_0x3480('0x2'));var zipdir=require(_0x3480('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3480('0x4'));var moment=require(_0x3480('0x5'));var BPromise=require(_0x3480('0x6'));var Mustache=require(_0x3480('0x7'));var util=require(_0x3480('0x8'));var path=require('path');var sox=require(_0x3480('0x9'));var csv=require('to-csv');var ejs=require(_0x3480('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x3480('0xb'));var crypto=require(_0x3480('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x3480('0xd'));var toCsv=require('to-csv');var querystring=require(_0x3480('0xe'));var Papa=require(_0x3480('0xf'));var Redis=require(_0x3480('0x10'));var authService=require(_0x3480('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x3480('0x12'));var logger=require(_0x3480('0x13'))(_0x3480('0x14'));var utils=require(_0x3480('0x15'));var config=require(_0x3480('0x16'));var db=require(_0x3480('0x17'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0x3480('0x18'));var client=jayson['client']['http']({'port':0x232a});function checkPasswordPattern(_0x4a4b8c,_0xbdf9cf,_0xef7a88){if(_0xef7a88){var _0x3983c0=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3983c0[_0x3480('0x19')](_0xbdf9cf)){return _0x4a4b8c;}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 _0x4a4b8c;}}function respondWithRpcPromise(_0xfb9b6c,_0x3b4dd3,_0x99c02e,_0x3a3120){return new BPromise(function(_0x23e37e,_0x90b023){var _0x228080=_0x3a3120||client;return _0x228080[_0x3480('0x1a')](_0xfb9b6c,_0x99c02e)[_0x3480('0x1b')](function(_0x4d44cf){logger[_0x3480('0x1c')](_0x3480('0x1d'),_0x3b4dd3,_0x3480('0x1e'));logger['debug'](_0x3480('0x1f'),_0x3b4dd3,_0x3480('0x1e'),JSON[_0x3480('0x20')](_0x4d44cf));if(_0x4d44cf[_0x3480('0x21')]){if(_0x4d44cf[_0x3480('0x21')][_0x3480('0x22')]===0x1f4){logger['error'](_0x3480('0x1d'),_0x3b4dd3,_0x4d44cf[_0x3480('0x21')][_0x3480('0x23')]);return _0x90b023(_0x4d44cf['error'][_0x3480('0x23')]);}logger[_0x3480('0x21')]('VtigerAccount,\x20%s,\x20%s',_0x3b4dd3,_0x4d44cf[_0x3480('0x21')][_0x3480('0x23')]);return _0x23e37e(_0x4d44cf['error'][_0x3480('0x23')]);}else{logger['info'](_0x3480('0x1d'),_0x3b4dd3,'request\x20sent');_0x23e37e(_0x4d44cf[_0x3480('0x24')][_0x3480('0x23')]);}})[_0x3480('0x25')](function(_0x2581cb){logger[_0x3480('0x21')]('VtigerAccount,\x20%s,\x20%s',_0x3b4dd3,_0x2581cb);_0x90b023(_0x2581cb);});});}function respondWithStatusCode(_0x47d8fc,_0x2670fd){_0x2670fd=_0x2670fd||0xcc;return function(_0x3cf2d0){if(_0x3cf2d0){return _0x47d8fc[_0x3480('0x26')](_0x2670fd);}return _0x47d8fc[_0x3480('0x27')](_0x2670fd)[_0x3480('0x28')]();};}function respondWithResult(_0x3ae554,_0x57fb34){_0x57fb34=_0x57fb34||0xc8;return function(_0x38b6e1){if(_0x38b6e1){return _0x3ae554['status'](_0x57fb34)[_0x3480('0x29')](_0x38b6e1);}};}function respondWithFilteredResult(_0x5d10b5,_0x1ce400){return function(_0x480a8f){if(_0x480a8f){var _0x22330f=_0x480a8f[_0x3480('0x2a')],_0x5f22eb=_0x1ce400[_0x3480('0x2b')],_0x208440=_0x1ce400[_0x3480('0x2b')]+_0x1ce400[_0x3480('0x2c')],_0x3562fa;if(_0x208440>=_0x22330f){_0x208440=_0x22330f;_0x3562fa=0xc8;}else{_0x3562fa=0xce;}_0x5d10b5[_0x3480('0x27')](_0x3562fa);return _0x5d10b5['set'](_0x3480('0x2d'),_0x5f22eb+'-'+_0x208440+'/'+_0x22330f)[_0x3480('0x29')](_0x480a8f);}return null;};}function patchUpdates(_0x23dd88){return function(_0x1e2729){try{jsonpatch['apply'](_0x1e2729,_0x23dd88,!![]);}catch(_0x4dee98){return BPromise[_0x3480('0x2e')](_0x4dee98);}return _0x1e2729[_0x3480('0x2f')]();};}function saveUpdates(_0x35d33c,_0x2fb4cc){return function(_0x1e81e6){if(_0x1e81e6){return _0x1e81e6[_0x3480('0x30')](_0x35d33c)[_0x3480('0x1b')](function(_0x1a9f2a){return _0x1a9f2a;});}return null;};}function removeEntity(_0x10deb6,_0x323e0d){return function(_0x47bdba){if(_0x47bdba){return _0x47bdba[_0x3480('0x31')]()[_0x3480('0x1b')](function(){_0x10deb6['status'](0xcc)[_0x3480('0x28')]();});}};}function handleEntityNotFound(_0x126009,_0x2639cb){return function(_0x155561){if(!_0x155561){_0x126009['sendStatus'](0x194);}return _0x155561;};}function handleError(_0x4affa2,_0x1cef1d){_0x1cef1d=_0x1cef1d||0x1f4;return function(_0x42a7ce){logger['error'](_0x42a7ce['stack']);if(_0x42a7ce[_0x3480('0x32')]){delete _0x42a7ce[_0x3480('0x32')];}_0x4affa2[_0x3480('0x27')](_0x1cef1d)[_0x3480('0x33')](_0x42a7ce);};}exports[_0x3480('0x34')]=function(_0xa04d9f,_0x2477ef){var _0x255124={},_0x1bbe6d={},_0x424e01={'count':0x0,'rows':[]};var _0x247a20=db['VtigerAccount'][_0x3480('0x35')];_0x1bbe6d[_0x3480('0x36')]=_['keys'](_0x247a20);_0x1bbe6d[_0x3480('0x37')]=_[_0x3480('0x38')](_0xa04d9f[_0x3480('0x37')]);_0x1bbe6d[_0x3480('0x39')]=_[_0x3480('0x3a')](_0x1bbe6d['model'],_0x1bbe6d['query']);_0x255124[_0x3480('0x3b')]=_[_0x3480('0x3a')](_0x1bbe6d[_0x3480('0x36')],qs[_0x3480('0x3c')](_0xa04d9f[_0x3480('0x37')][_0x3480('0x3c')]));_0x255124['attributes']=_0x255124[_0x3480('0x3b')][_0x3480('0x3d')]?_0x255124[_0x3480('0x3b')]:_0x1bbe6d['model'];if(!_0xa04d9f[_0x3480('0x37')][_0x3480('0x3e')](_0x3480('0x3f'))){_0x255124[_0x3480('0x2c')]=qs[_0x3480('0x2c')](_0xa04d9f[_0x3480('0x37')][_0x3480('0x2c')]);_0x255124[_0x3480('0x2b')]=qs[_0x3480('0x2b')](_0xa04d9f[_0x3480('0x37')][_0x3480('0x2b')]);}_0x255124[_0x3480('0x40')]=qs[_0x3480('0x41')](_0xa04d9f[_0x3480('0x37')][_0x3480('0x41')]);_0x255124[_0x3480('0x42')]=qs[_0x3480('0x39')](_[_0x3480('0x43')](_0xa04d9f[_0x3480('0x37')],_0x1bbe6d['filters']));if(_0xa04d9f[_0x3480('0x37')]['filter']){_0x255124['where']=_[_0x3480('0x44')](_0x255124[_0x3480('0x42')],{'$or':_[_0x3480('0x45')](_0x247a20,function(_0x552a71){if(_0x552a71[_0x3480('0x46')][_0x3480('0x47')]!==_0x3480('0x48')){var _0x3e1a55={};_0x3e1a55[_0x552a71[_0x3480('0x49')]]={'$like':'%'+_0xa04d9f[_0x3480('0x37')][_0x3480('0x4a')]+'%'};return _0x3e1a55;}})});}_0x255124=_[_0x3480('0x44')]({},_0x255124,_0xa04d9f[_0x3480('0x4b')]);var _0x53af99={'where':_0x255124[_0x3480('0x42')]};return db['VtigerAccount']['count'](_0x53af99)[_0x3480('0x1b')](function(_0x59d9c2){_0x424e01['count']=_0x59d9c2;if(_0xa04d9f['query'][_0x3480('0x4c')]){_0x255124['include']=[{'all':!![]}];}return db[_0x3480('0x4d')][_0x3480('0x4e')](_0x255124);})['then'](function(_0x46cb2b){_0x424e01[_0x3480('0x4f')]=_0x46cb2b;return _0x424e01;})[_0x3480('0x1b')](respondWithFilteredResult(_0x2477ef,_0x255124))['catch'](handleError(_0x2477ef,null));};exports[_0x3480('0x50')]=function(_0x425529,_0x31e117){var _0x4e1b5f={'raw':![],'where':{'id':_0x425529['params']['id']}},_0x6f6e28={};_0x6f6e28[_0x3480('0x36')]=_['keys'](db[_0x3480('0x4d')][_0x3480('0x35')]);_0x6f6e28[_0x3480('0x37')]=_[_0x3480('0x38')](_0x425529[_0x3480('0x37')]);_0x6f6e28['filters']=_[_0x3480('0x3a')](_0x6f6e28[_0x3480('0x36')],_0x6f6e28[_0x3480('0x37')]);_0x4e1b5f[_0x3480('0x3b')]=_['intersection'](_0x6f6e28['model'],qs[_0x3480('0x3c')](_0x425529[_0x3480('0x37')][_0x3480('0x3c')]));_0x4e1b5f[_0x3480('0x3b')]=_0x4e1b5f['attributes']['length']?_0x4e1b5f[_0x3480('0x3b')]:_0x6f6e28[_0x3480('0x36')];if(_0x425529[_0x3480('0x37')][_0x3480('0x4c')]){_0x4e1b5f[_0x3480('0x51')]=[{'all':!![]}];}_0x4e1b5f=_[_0x3480('0x44')]({},_0x4e1b5f,_0x425529['options']);return db[_0x3480('0x4d')][_0x3480('0x52')](_0x4e1b5f)[_0x3480('0x1b')](handleEntityNotFound(_0x31e117,null))[_0x3480('0x1b')](respondWithResult(_0x31e117,null))['catch'](handleError(_0x31e117,null));};exports['create']=function(_0x16ccbb,_0x257faa){return db[_0x3480('0x4d')][_0x3480('0x53')](_0x16ccbb[_0x3480('0x54')],{})['then'](respondWithResult(_0x257faa,0xc9))['catch'](handleError(_0x257faa,null));};exports['update']=function(_0x9b94f4,_0x2c6efa){if(_0x9b94f4[_0x3480('0x54')]['id']){delete _0x9b94f4['body']['id'];}return db[_0x3480('0x4d')][_0x3480('0x52')]({'where':{'id':_0x9b94f4[_0x3480('0x55')]['id']}})[_0x3480('0x1b')](handleEntityNotFound(_0x2c6efa,null))[_0x3480('0x1b')](saveUpdates(_0x9b94f4['body'],null))['then'](respondWithResult(_0x2c6efa,null))[_0x3480('0x25')](handleError(_0x2c6efa,null));};exports[_0x3480('0x31')]=function(_0xb89454,_0x14b37d){return db['VtigerAccount'][_0x3480('0x52')]({'where':{'id':_0xb89454[_0x3480('0x55')]['id']}})[_0x3480('0x1b')](handleEntityNotFound(_0x14b37d,null))[_0x3480('0x1b')](removeEntity(_0x14b37d,null))[_0x3480('0x25')](handleError(_0x14b37d,null));};exports[_0x3480('0x56')]=function(_0x16d3c9,_0x5cfd27,_0x5ccc4e){var _0x49a8d0={};var _0x3788ff={};var _0x41b3c5;var _0x3a71e6;return db[_0x3480('0x4d')][_0x3480('0x57')]({'where':{'id':_0x16d3c9['params']['id']}})[_0x3480('0x1b')](handleEntityNotFound(_0x5cfd27,null))[_0x3480('0x1b')](function(_0x3acbdc){if(_0x3acbdc){_0x41b3c5=_0x3acbdc;_0x3788ff['model']=_[_0x3480('0x38')](db[_0x3480('0x58')][_0x3480('0x35')]);_0x3788ff[_0x3480('0x37')]=_[_0x3480('0x38')](_0x16d3c9[_0x3480('0x37')]);_0x3788ff[_0x3480('0x39')]=_['intersection'](_0x3788ff['model'],_0x3788ff['query']);_0x49a8d0[_0x3480('0x3b')]=_[_0x3480('0x3a')](_0x3788ff['model'],qs[_0x3480('0x3c')](_0x16d3c9[_0x3480('0x37')][_0x3480('0x3c')]));_0x49a8d0[_0x3480('0x3b')]=_0x49a8d0[_0x3480('0x3b')]['length']?_0x49a8d0[_0x3480('0x3b')]:_0x3788ff[_0x3480('0x36')];_0x49a8d0[_0x3480('0x40')]=qs['sort'](_0x16d3c9['query'][_0x3480('0x41')]);_0x49a8d0['where']=qs[_0x3480('0x39')](_[_0x3480('0x43')](_0x16d3c9['query'],_0x3788ff[_0x3480('0x39')]));if(_0x16d3c9[_0x3480('0x37')][_0x3480('0x4a')]){_0x49a8d0[_0x3480('0x42')]=_[_0x3480('0x44')](_0x49a8d0['where'],{'$or':_[_0x3480('0x45')](_0x49a8d0[_0x3480('0x3b')],function(_0x1752ce){var _0x169157={};_0x169157[_0x1752ce]={'$like':'%'+_0x16d3c9[_0x3480('0x37')][_0x3480('0x4a')]+'%'};return _0x169157;})});}_0x49a8d0=_['merge']({},_0x49a8d0,_0x16d3c9[_0x3480('0x4b')]);return _0x41b3c5[_0x3480('0x56')](_0x49a8d0);}})[_0x3480('0x1b')](function(_0xfdc8ce){if(_0xfdc8ce){_0x3a71e6=_0xfdc8ce[_0x3480('0x3d')];if(!_0x16d3c9[_0x3480('0x37')][_0x3480('0x3e')](_0x3480('0x3f'))){_0x49a8d0[_0x3480('0x2c')]=qs[_0x3480('0x2c')](_0x16d3c9[_0x3480('0x37')][_0x3480('0x2c')]);_0x49a8d0[_0x3480('0x2b')]=qs[_0x3480('0x2b')](_0x16d3c9['query'][_0x3480('0x2b')]);}return _0x41b3c5[_0x3480('0x56')](_0x49a8d0);}})[_0x3480('0x1b')](function(_0x15a880){if(_0x15a880){return _0x15a880?{'count':_0x3a71e6,'rows':_0x15a880}:null;}})[_0x3480('0x1b')](respondWithResult(_0x5cfd27,null))[_0x3480('0x25')](handleError(_0x5cfd27,null));};exports['addConfiguration']=function(_0x5a08dd,_0x424487,_0xdf2e01){if(_0x5a08dd[_0x3480('0x54')]['id']){delete _0x5a08dd[_0x3480('0x54')]['id'];}return db[_0x3480('0x4d')][_0x3480('0x57')]({'where':{'id':_0x5a08dd['params']['id']}})[_0x3480('0x1b')](handleEntityNotFound(_0x424487,null))[_0x3480('0x1b')](function(_0x105ab3){if(_0x105ab3){_0x5a08dd[_0x3480('0x54')][_0x3480('0x59')]=_0x105ab3['id'];_0x5a08dd[_0x3480('0x54')]['Subjects']=integrations[_0x3480('0x5a')](_0x5a08dd[_0x3480('0x54')][_0x3480('0x5b')],_0x5a08dd[_0x3480('0x54')][_0x3480('0x46')]);_0x5a08dd[_0x3480('0x54')][_0x3480('0x5c')]=integrations['getDescriptions'](_0x5a08dd[_0x3480('0x54')][_0x3480('0x5b')],_0x5a08dd['body'][_0x3480('0x46')]);return db['VtigerConfiguration'][_0x3480('0x53')](_0x5a08dd[_0x3480('0x54')],{'include':[{'model':db[_0x3480('0x5d')],'as':_0x3480('0x5e')},{'model':db[_0x3480('0x5d')],'as':_0x3480('0x5c')}]});}return null;})['then'](respondWithResult(_0x424487,null))[_0x3480('0x25')](handleError(_0x424487,null));};var md5=require(_0x3480('0x5f'));exports[_0x3480('0x60')]=function(_0x203e58,_0x5ebe1e,_0x165fa){var _0x5cb482=null;var _0x3dad27=null;var _0x43d774=null;var _0x10f9ac=null;var _0x591ce6='';return db[_0x3480('0x4d')][_0x3480('0x57')]({'where':{'id':_0x203e58[_0x3480('0x55')]['id']},'attributes':['id','name',_0x3480('0x61'),_0x3480('0x62'),'moduleName',_0x3480('0x63'),_0x3480('0x64'),'accessKey']})[_0x3480('0x1b')](handleEntityNotFound(_0x5ebe1e,null))[_0x3480('0x1b')](function(_0xb61b8){if(_0xb61b8){_0x5cb482=_0xb61b8[_0x3480('0x61')];_0x3dad27=_0xb61b8['accessKey'];_0x43d774=_0xb61b8[_0x3480('0x65')];_0x591ce6=_0xb61b8[_0x3480('0x63')];var _0x2fa96f=_0x591ce6[_0x3480('0x66')](-0x1);if(_0x2fa96f==='/'){_0x591ce6=_0x591ce6[_0x3480('0x67')](0x0,_0x591ce6[_0x3480('0x68')](_0x2fa96f));}_0x10f9ac=util[_0x3480('0x69')](_0x3480('0x6a'),_0x591ce6);var _0x1c48bc={'method':_0x3480('0x6b'),'uri':_0x10f9ac,'qs':{'operation':_0x3480('0x6c'),'username':_0xb61b8[_0x3480('0x61')]},'json':!![]};return rp(_0x1c48bc);}})[_0x3480('0x1b')](function(_0xf444be){if(_0xf444be[_0x3480('0x6d')]){var _0x33f582={'method':'POST','uri':_0x10f9ac,'form':{'operation':_0x3480('0x6e'),'username':_0x5cb482,'accessKey':md5(_0xf444be[_0x3480('0x24')]['token']+_0x3dad27)},'json':!![]};return rp(_0x33f582);}})[_0x3480('0x1b')](function(_0x3b7ded){if(_0x3b7ded[_0x3480('0x6d')]){var _0x2b4ae7={'method':_0x3480('0x6b'),'uri':_0x10f9ac,'qs':{'operation':_0x3480('0x6f'),'username':_0x5cb482,'sessionName':_0x3b7ded['result'][_0x3480('0x70')],'elementType':_0x43d774},'json':!![]};return rp(_0x2b4ae7);}})[_0x3480('0x1b')](function(_0x5db2e9){if(_0x5db2e9[_0x3480('0x6d')]){var _0xff9d86=[_0x3480('0x71'),_0x3480('0x72'),_0x3480('0x73')];_[_0x3480('0x74')](_0x5db2e9[_0x3480('0x24')][_0x3480('0x3c')],function(_0x116ca8){return _0xff9d86[_0x3480('0x75')](_0x116ca8[_0x3480('0x46')][_0x3480('0x32')]);});_['remove'](_0x5db2e9[_0x3480('0x24')][_0x3480('0x3c')],function(_0x4a219f){return _0x4a219f[_0x3480('0x76')]===_0x3480('0x77');});return{'count':_0x5db2e9['result'][_0x3480('0x3c')][_0x3480('0x3d')],'rows':_['map'](_0x5db2e9['result']['fields'],function(_0x1c7e7e){return{'id':_0x1c7e7e['name'],'name':_0x1c7e7e[_0x3480('0x78')],'custom':_[_0x3480('0x79')](_0x1c7e7e[_0x3480('0x32')],_0x3480('0x7a'))?!![]:![],'options':_0x1c7e7e[_0x3480('0x46')]['name']==='picklist'&&_0x1c7e7e['type'][_0x3480('0x7b')]['length']>0x0?_[_0x3480('0x45')](_0x1c7e7e[_0x3480('0x46')][_0x3480('0x7b')],function(_0x2b2d3e){return{'name':_0x2b2d3e[_0x3480('0x78')],'value':_0x2b2d3e['value']};}):[]};})};}})[_0x3480('0x1b')](respondWithResult(_0x5ebe1e,null))[_0x3480('0x25')](function(_0x5bdb86){console['log'](_0x3480('0x7c')+_0x5bdb86);var _0x3e1fb1=_0x203e58[_0x3480('0x37')][_0x3480('0x19')]?0x1f4:_0x5bdb86['statusCode']||0x1f4;logger['error'](_0x3480('0x7d'),_0x3480('0x60'),_0x3e1fb1,JSON['stringify'](_0x5bdb86));delete _0x5bdb86[_0x3480('0x32')];if(_0x3e1fb1===0x191){_0x3e1fb1=0x190;}_0x5ebe1e[_0x3480('0x27')](_0x3e1fb1)['send'](_0x203e58[_0x3480('0x37')][_0x3480('0x19')]?{'message':_0x3480('0x7e'),'statusCode':_0x5bdb86['statusCode']}:_0x5bdb86);});};
\ No newline at end of file
index f95d202..3f9c148 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x095b=['../../config/environment','./intVtigerAccount.attributes','../../components/integrations/configuration','exports','define','VtigerAccount','lodash','../../config/logger','api','moment','bluebird','request-promise','rimraf'];(function(_0x3f40fe,_0x41ceff){var _0x4bbc8c=function(_0x4672fd){while(--_0x4672fd){_0x3f40fe['push'](_0x3f40fe['shift']());}};_0x4bbc8c(++_0x41ceff);}(_0x095b,0x6e));var _0xb095=function(_0x3ddbc4,_0x5c727e){_0x3ddbc4=_0x3ddbc4-0x0;var _0x3714f0=_0x095b[_0x3ddbc4];return _0x3714f0;};'use strict';var _=require(_0xb095('0x0'));var util=require('util');var logger=require(_0xb095('0x1'))(_0xb095('0x2'));var moment=require(_0xb095('0x3'));var BPromise=require(_0xb095('0x4'));var rp=require(_0xb095('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0xb095('0x6'));var config=require(_0xb095('0x7'));var attributes=require(_0xb095('0x8'));var integrations=require(_0xb095('0x9'));module[_0xb095('0xa')]=function(_0x3e4cc9,_0x24deed){return _0x3e4cc9[_0xb095('0xb')](_0xb095('0xc'),attributes,{'tableName':'int_vtiger_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x419f=['moment','bluebird','path','../../config/environment','./intVtigerAccount.attributes','../../components/integrations/configuration','exports','define','VtigerAccount','int_vtiger_accounts','lodash','util','../../config/logger','api'];(function(_0x4d6de5,_0x1c8ee5){var _0x491061=function(_0x6fab52){while(--_0x6fab52){_0x4d6de5['push'](_0x4d6de5['shift']());}};_0x491061(++_0x1c8ee5);}(_0x419f,0x176));var _0xf419=function(_0x167cc1,_0x56ef5a){_0x167cc1=_0x167cc1-0x0;var _0x10bc4b=_0x419f[_0x167cc1];return _0x10bc4b;};'use strict';var _=require(_0xf419('0x0'));var util=require(_0xf419('0x1'));var logger=require(_0xf419('0x2'))(_0xf419('0x3'));var moment=require(_0xf419('0x4'));var BPromise=require(_0xf419('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xf419('0x6'));var rimraf=require('rimraf');var config=require(_0xf419('0x7'));var attributes=require(_0xf419('0x8'));var integrations=require(_0xf419('0x9'));module[_0xf419('0xa')]=function(_0x2d8430,_0x2b5526){return _0x2d8430[_0xf419('0xb')](_0xf419('0xc'),attributes,{'tableName':_0xf419('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 669ea28..2fb783b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f36=['../../config/logger','../../config/environment','jayson/promise','client','request','info','VtigerAccount,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','GetVtigerAccount','VtigerAccount','findAll','options','where','attributes','limit','include','map','model','then','debug','ShowVtigerAccount','find','lodash','util','bluebird','randomstring','ioredis','../../mysqldb'];(function(_0x14bdf1,_0x33578){var _0x266d9b=function(_0x3d99a2){while(--_0x3d99a2){_0x14bdf1['push'](_0x14bdf1['shift']());}};_0x266d9b(++_0x33578);}(_0x0f36,0xe8));var _0x60f3=function(_0xc266d6,_0x15fc8c){_0xc266d6=_0xc266d6-0x0;var _0x2ab82c=_0x0f36[_0xc266d6];return _0x2ab82c;};'use strict';var _=require(_0x60f3('0x0'));var util=require(_0x60f3('0x1'));var moment=require('moment');var BPromise=require(_0x60f3('0x2'));var rs=require(_0x60f3('0x3'));var fs=require('fs');var Redis=require(_0x60f3('0x4'));var db=require(_0x60f3('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x60f3('0x6'))('rpc');var config=require(_0x60f3('0x7'));var jayson=require(_0x60f3('0x8'));var client=jayson[_0x60f3('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x36be00,_0xc4666,_0x3f170c){return new BPromise(function(_0x2e478f,_0x4fc940){return client[_0x60f3('0xa')](_0x36be00,_0x3f170c)['then'](function(_0x2e17e0){logger[_0x60f3('0xb')](_0x60f3('0xc'),_0xc4666,_0x60f3('0xd'));logger['debug']('VtigerAccount,\x20%s,\x20%s,\x20%s',_0xc4666,_0x60f3('0xd'),JSON[_0x60f3('0xe')](_0x2e17e0));if(_0x2e17e0[_0x60f3('0xf')]){if(_0x2e17e0[_0x60f3('0xf')][_0x60f3('0x10')]===0x1f4){logger[_0x60f3('0xf')](_0x60f3('0xc'),_0xc4666,_0x2e17e0[_0x60f3('0xf')][_0x60f3('0x11')]);return _0x4fc940(_0x2e17e0[_0x60f3('0xf')][_0x60f3('0x11')]);}logger[_0x60f3('0xf')](_0x60f3('0xc'),_0xc4666,_0x2e17e0['error']['message']);return _0x2e478f(_0x2e17e0[_0x60f3('0xf')][_0x60f3('0x11')]);}else{logger[_0x60f3('0xb')]('VtigerAccount,\x20%s,\x20%s',_0xc4666,_0x60f3('0xd'));_0x2e478f(_0x2e17e0[_0x60f3('0x12')][_0x60f3('0x11')]);}})[_0x60f3('0x13')](function(_0x119f6c){logger[_0x60f3('0xf')](_0x60f3('0xc'),_0xc4666,_0x119f6c);_0x4fc940(_0x119f6c);});});}exports[_0x60f3('0x14')]=function(_0x51cba8){var _0x3cb7cb=this;return new Promise(function(_0x3b87df,_0xf28836){return db[_0x60f3('0x15')][_0x60f3('0x16')]({'raw':_0x51cba8['options']?_0x51cba8[_0x60f3('0x17')]['raw']===undefined?!![]:![]:!![],'where':_0x51cba8[_0x60f3('0x17')]?_0x51cba8[_0x60f3('0x17')][_0x60f3('0x18')]||null:null,'attributes':_0x51cba8[_0x60f3('0x17')]?_0x51cba8[_0x60f3('0x17')][_0x60f3('0x19')]||null:null,'limit':_0x51cba8['options']?_0x51cba8['options'][_0x60f3('0x1a')]||null:null,'include':_0x51cba8['options']?_0x51cba8[_0x60f3('0x17')][_0x60f3('0x1b')]?_[_0x60f3('0x1c')](_0x51cba8[_0x60f3('0x17')][_0x60f3('0x1b')],function(_0x43d87a){return{'model':db[_0x43d87a[_0x60f3('0x1d')]],'as':_0x43d87a['as'],'attributes':_0x43d87a[_0x60f3('0x19')],'include':_0x43d87a[_0x60f3('0x1b')]?_[_0x60f3('0x1c')](_0x43d87a['include'],function(_0x41590f){return{'model':db[_0x41590f[_0x60f3('0x1d')]],'as':_0x41590f['as'],'attributes':_0x41590f[_0x60f3('0x19')],'include':_0x41590f[_0x60f3('0x1b')]?_[_0x60f3('0x1c')](_0x41590f['include'],function(_0x3529f0){return{'model':db[_0x3529f0[_0x60f3('0x1d')]],'as':_0x3529f0['as'],'attributes':_0x3529f0[_0x60f3('0x19')]};}):[]};}):[]};}):[]:[]})[_0x60f3('0x1e')](function(_0x428b15){logger[_0x60f3('0xb')]('GetVtigerAccount',_0x51cba8);logger[_0x60f3('0x1f')](_0x60f3('0x14'),_0x51cba8,JSON[_0x60f3('0xe')](_0x428b15));_0x3b87df(_0x428b15);})[_0x60f3('0x13')](function(_0x99600c){logger[_0x60f3('0xf')](_0x60f3('0x14'),_0x99600c['message'],_0x51cba8);_0xf28836(_0x3cb7cb['error'](0x1f4,_0x99600c[_0x60f3('0x11')]));});});};exports[_0x60f3('0x20')]=function(_0x55fe0e){var _0x1c123d=this;return new Promise(function(_0x4e0877,_0x32d2c1){return db['VtigerAccount'][_0x60f3('0x21')]({'raw':_0x55fe0e[_0x60f3('0x17')]?_0x55fe0e[_0x60f3('0x17')]['raw']===undefined?!![]:![]:!![],'where':_0x55fe0e[_0x60f3('0x17')]?_0x55fe0e[_0x60f3('0x17')][_0x60f3('0x18')]||null:null,'attributes':_0x55fe0e[_0x60f3('0x17')]?_0x55fe0e[_0x60f3('0x17')][_0x60f3('0x19')]||null:null,'include':_0x55fe0e[_0x60f3('0x17')]?_0x55fe0e[_0x60f3('0x17')]['include']?_['map'](_0x55fe0e[_0x60f3('0x17')][_0x60f3('0x1b')],function(_0x4e91f9){return{'model':db[_0x4e91f9[_0x60f3('0x1d')]],'as':_0x4e91f9['as'],'attributes':_0x4e91f9['attributes'],'include':_0x4e91f9[_0x60f3('0x1b')]?_[_0x60f3('0x1c')](_0x4e91f9[_0x60f3('0x1b')],function(_0x489f0a){return{'model':db[_0x489f0a['model']],'as':_0x489f0a['as'],'attributes':_0x489f0a[_0x60f3('0x19')],'include':_0x489f0a['include']?_[_0x60f3('0x1c')](_0x489f0a['include'],function(_0x51f62c){return{'model':db[_0x51f62c[_0x60f3('0x1d')]],'as':_0x51f62c['as'],'attributes':_0x51f62c[_0x60f3('0x19')]};}):[]};}):[]};}):[]:[]})[_0x60f3('0x1e')](function(_0x50608e){logger[_0x60f3('0xb')](_0x60f3('0x20'),_0x55fe0e);logger[_0x60f3('0x1f')](_0x60f3('0x20'),_0x55fe0e,JSON['stringify'](_0x50608e));_0x4e0877(_0x50608e);})[_0x60f3('0x13')](function(_0x262718){logger[_0x60f3('0xf')](_0x60f3('0x20'),_0x262718['message'],_0x55fe0e);_0x32d2c1(_0x1c123d[_0x60f3('0xf')](0x1f4,_0x262718[_0x60f3('0x11')]));});});};
\ No newline at end of file
+var _0x4a9d=['message','result','catch','GetVtigerAccount','VtigerAccount','findAll','options','where','include','map','attributes','model','ShowVtigerAccount','find','raw','lodash','util','bluebird','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','VtigerAccount,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code'];(function(_0x5071a9,_0x4ccc7e){var _0x35d56b=function(_0x135273){while(--_0x135273){_0x5071a9['push'](_0x5071a9['shift']());}};_0x35d56b(++_0x4ccc7e);}(_0x4a9d,0x185));var _0xd4a9=function(_0x5a6ed9,_0x5254f6){_0x5a6ed9=_0x5a6ed9-0x0;var _0x2c2875=_0x4a9d[_0x5a6ed9];return _0x2c2875;};'use strict';var _=require(_0xd4a9('0x0'));var util=require(_0xd4a9('0x1'));var moment=require('moment');var BPromise=require(_0xd4a9('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xd4a9('0x3'));var db=require(_0xd4a9('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xd4a9('0x5'))(_0xd4a9('0x6'));var config=require(_0xd4a9('0x7'));var jayson=require(_0xd4a9('0x8'));var client=jayson[_0xd4a9('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x176ff7,_0x573978,_0x231d29){return new BPromise(function(_0x1e9874,_0x51b05e){return client[_0xd4a9('0xa')](_0x176ff7,_0x231d29)[_0xd4a9('0xb')](function(_0x3071b3){logger[_0xd4a9('0xc')](_0xd4a9('0xd'),_0x573978,'request\x20sent');logger[_0xd4a9('0xe')]('VtigerAccount,\x20%s,\x20%s,\x20%s',_0x573978,_0xd4a9('0xf'),JSON[_0xd4a9('0x10')](_0x3071b3));if(_0x3071b3['error']){if(_0x3071b3[_0xd4a9('0x11')][_0xd4a9('0x12')]===0x1f4){logger[_0xd4a9('0x11')](_0xd4a9('0xd'),_0x573978,_0x3071b3['error'][_0xd4a9('0x13')]);return _0x51b05e(_0x3071b3[_0xd4a9('0x11')][_0xd4a9('0x13')]);}logger[_0xd4a9('0x11')](_0xd4a9('0xd'),_0x573978,_0x3071b3[_0xd4a9('0x11')][_0xd4a9('0x13')]);return _0x1e9874(_0x3071b3[_0xd4a9('0x11')][_0xd4a9('0x13')]);}else{logger[_0xd4a9('0xc')]('VtigerAccount,\x20%s,\x20%s',_0x573978,_0xd4a9('0xf'));_0x1e9874(_0x3071b3[_0xd4a9('0x14')][_0xd4a9('0x13')]);}})[_0xd4a9('0x15')](function(_0x499fa7){logger[_0xd4a9('0x11')](_0xd4a9('0xd'),_0x573978,_0x499fa7);_0x51b05e(_0x499fa7);});});}exports[_0xd4a9('0x16')]=function(_0x1e7a42){var _0x48f4ed=this;return new Promise(function(_0x4a97c1,_0x20face){return db[_0xd4a9('0x17')][_0xd4a9('0x18')]({'raw':_0x1e7a42[_0xd4a9('0x19')]?_0x1e7a42['options']['raw']===undefined?!![]:![]:!![],'where':_0x1e7a42[_0xd4a9('0x19')]?_0x1e7a42[_0xd4a9('0x19')][_0xd4a9('0x1a')]||null:null,'attributes':_0x1e7a42[_0xd4a9('0x19')]?_0x1e7a42['options']['attributes']||null:null,'limit':_0x1e7a42[_0xd4a9('0x19')]?_0x1e7a42[_0xd4a9('0x19')]['limit']||null:null,'include':_0x1e7a42['options']?_0x1e7a42[_0xd4a9('0x19')][_0xd4a9('0x1b')]?_[_0xd4a9('0x1c')](_0x1e7a42[_0xd4a9('0x19')][_0xd4a9('0x1b')],function(_0x1bced3){return{'model':db[_0x1bced3['model']],'as':_0x1bced3['as'],'attributes':_0x1bced3[_0xd4a9('0x1d')],'include':_0x1bced3[_0xd4a9('0x1b')]?_['map'](_0x1bced3[_0xd4a9('0x1b')],function(_0x5b5378){return{'model':db[_0x5b5378[_0xd4a9('0x1e')]],'as':_0x5b5378['as'],'attributes':_0x5b5378['attributes'],'include':_0x5b5378[_0xd4a9('0x1b')]?_[_0xd4a9('0x1c')](_0x5b5378['include'],function(_0x5cbb9b){return{'model':db[_0x5cbb9b[_0xd4a9('0x1e')]],'as':_0x5cbb9b['as'],'attributes':_0x5cbb9b[_0xd4a9('0x1d')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x2ff50f){logger[_0xd4a9('0xc')](_0xd4a9('0x16'),_0x1e7a42);logger[_0xd4a9('0xe')](_0xd4a9('0x16'),_0x1e7a42,JSON[_0xd4a9('0x10')](_0x2ff50f));_0x4a97c1(_0x2ff50f);})['catch'](function(_0x1f3979){logger['error'](_0xd4a9('0x16'),_0x1f3979[_0xd4a9('0x13')],_0x1e7a42);_0x20face(_0x48f4ed[_0xd4a9('0x11')](0x1f4,_0x1f3979[_0xd4a9('0x13')]));});});};exports[_0xd4a9('0x1f')]=function(_0x59ad2c){var _0x15e438=this;return new Promise(function(_0x4e4af8,_0x5ed883){return db['VtigerAccount'][_0xd4a9('0x20')]({'raw':_0x59ad2c[_0xd4a9('0x19')]?_0x59ad2c[_0xd4a9('0x19')][_0xd4a9('0x21')]===undefined?!![]:![]:!![],'where':_0x59ad2c[_0xd4a9('0x19')]?_0x59ad2c[_0xd4a9('0x19')]['where']||null:null,'attributes':_0x59ad2c[_0xd4a9('0x19')]?_0x59ad2c[_0xd4a9('0x19')]['attributes']||null:null,'include':_0x59ad2c[_0xd4a9('0x19')]?_0x59ad2c[_0xd4a9('0x19')]['include']?_[_0xd4a9('0x1c')](_0x59ad2c[_0xd4a9('0x19')][_0xd4a9('0x1b')],function(_0x2c1ecb){return{'model':db[_0x2c1ecb[_0xd4a9('0x1e')]],'as':_0x2c1ecb['as'],'attributes':_0x2c1ecb['attributes'],'include':_0x2c1ecb[_0xd4a9('0x1b')]?_[_0xd4a9('0x1c')](_0x2c1ecb[_0xd4a9('0x1b')],function(_0x1950b0){return{'model':db[_0x1950b0['model']],'as':_0x1950b0['as'],'attributes':_0x1950b0['attributes'],'include':_0x1950b0['include']?_['map'](_0x1950b0[_0xd4a9('0x1b')],function(_0x11da11){return{'model':db[_0x11da11[_0xd4a9('0x1e')]],'as':_0x11da11['as'],'attributes':_0x11da11[_0xd4a9('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xd4a9('0xb')](function(_0x5be61b){logger[_0xd4a9('0xc')]('ShowVtigerAccount',_0x59ad2c);logger['debug'](_0xd4a9('0x1f'),_0x59ad2c,JSON[_0xd4a9('0x10')](_0x5be61b));_0x4e4af8(_0x5be61b);})['catch'](function(_0x459b63){logger['error'](_0xd4a9('0x1f'),_0x459b63[_0xd4a9('0x13')],_0x59ad2c);_0x5ed883(_0x15e438[_0xd4a9('0x11')](0x1f4,_0x459b63[_0xd4a9('0x13')]));});});};
\ No newline at end of file
index 1ae1cf5..24fc8a3 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(_0xdc37a1,_0x53ebb9){var _0x99b4fe=function(_0x2811e3){while(--_0x2811e3){_0xdc37a1['push'](_0xdc37a1['shift']());}};_0x99b4fe(++_0x53ebb9);}(_0xe706,0xa3));var _0x6e70=function(_0x131c81,_0x12fe63){_0x131c81=_0x131c81-0x0;var _0x241e7a=_0xe706[_0x131c81];return _0x241e7a;};'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 _0xbaf0=['path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./intVtigerConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','/:id/descriptions','getDescriptions','post','update','delete','exports','util'];(function(_0xf80b3,_0x25d5f3){var _0x10c489=function(_0x3c5aee){while(--_0x3c5aee){_0xf80b3['push'](_0xf80b3['shift']());}};_0x10c489(++_0x25d5f3);}(_0xbaf0,0x12a));var _0x0baf=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0xbaf0[_0x432682];return _0x463d05;};'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('0x8')](_0x0baf('0x11'),auth[_0x0baf('0x9')](),controller[_0x0baf('0x12')]);router[_0x0baf('0x13')]('/',auth[_0x0baf('0x9')](),controller['create']);router['put'](_0x0baf('0xb'),auth[_0x0baf('0x9')](),controller[_0x0baf('0x14')]);router[_0x0baf('0x15')]('/:id',auth[_0x0baf('0x9')](),controller['destroy']);module[_0x0baf('0x16')]=router;
\ No newline at end of file
index c91b228..4e1d2d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeb02=['sequelize','STRING'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0xeb02,0xa0));var _0x2eb0=function(_0x21cce9,_0x5b1624){_0x21cce9=_0x21cce9-0x0;var _0x26dca9=_0xeb02[_0x21cce9];return _0x26dca9;};'use strict';var Sequelize=require(_0x2eb0('0x0'));module['exports']={'name':{'type':Sequelize[_0x2eb0('0x1')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x3767=['sequelize','STRING'];(function(_0x30bd4d,_0x50eb60){var _0x306915=function(_0x5ae782){while(--_0x5ae782){_0x30bd4d['push'](_0x30bd4d['shift']());}};_0x306915(++_0x50eb60);}(_0x3767,0x132));var _0x7376=function(_0x3af917,_0x55c1de){_0x3af917=_0x3af917-0x0;var _0x26e8e6=_0x3767[_0x3af917];return _0x26e8e6;};'use strict';var Sequelize=require(_0x7376('0x0'));module['exports']={'name':{'type':Sequelize[_0x7376('0x1')]},'description':{'type':Sequelize[_0x7376('0x1')]}};
\ No newline at end of file
index c66f585..fce202e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf4b0=['ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','test','request','then','info','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','sendStatus','end','status','json','count','offset','limit','set','apply','save','update','destroy','stack','name','send','index','VtigerConfiguration','model','keys','query','intersection','length','hasOwnProperty','order','sort','filters','filter','where','merge','type','key','options','include','findAll','rows','show','attributes','fields','create','body','find','params','findOne','rawAttributes','pick','map','getFields','nolimit','getSubjects','getDescriptions','VtigerField','html-pdf','eml-format','fast-json-patch','request-promise','moment','util','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring'];(function(_0x36ed48,_0x1ee0d4){var _0x51c63a=function(_0x2d0a40){while(--_0x2d0a40){_0x36ed48['push'](_0x36ed48['shift']());}};_0x51c63a(++_0x1ee0d4);}(_0xf4b0,0xfa));var _0x0f4b=function(_0x59d075,_0x301246){_0x59d075=_0x59d075-0x0;var _0x170e09=_0xf4b0[_0x59d075];return _0x170e09;};'use strict';var pdf=require(_0x0f4b('0x0'));var emlformat=require(_0x0f4b('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x0f4b('0x2'));var rp=require(_0x0f4b('0x3'));var moment=require(_0x0f4b('0x4'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x0f4b('0x5'));var path=require('path');var sox=require(_0x0f4b('0x6'));var csv=require('to-csv');var ejs=require(_0x0f4b('0x7'));var fs=require('fs');var _=require(_0x0f4b('0x8'));var squel=require(_0x0f4b('0x9'));var crypto=require('crypto');var jsforce=require(_0x0f4b('0xa'));var deskjs=require(_0x0f4b('0xb'));var toCsv=require(_0x0f4b('0xc'));var querystring=require(_0x0f4b('0xd'));var Papa=require('papaparse');var Redis=require(_0x0f4b('0xe'));var authService=require(_0x0f4b('0xf'));var qs=require(_0x0f4b('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x0f4b('0x11'))(_0x0f4b('0x12'));var utils=require(_0x0f4b('0x13'));var config=require(_0x0f4b('0x14'));var db=require(_0x0f4b('0x15'))['db'];var jayson=require(_0x0f4b('0x16'));var client=jayson[_0x0f4b('0x17')][_0x0f4b('0x18')]({'port':0x232a});function checkPasswordPattern(_0x205396,_0x4ca2d0,_0x4c33f3){if(_0x4c33f3){var _0x30637d=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x30637d[_0x0f4b('0x19')](_0x4ca2d0)){return _0x205396;}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 _0x205396;}}function respondWithRpcPromise(_0x2f20c5,_0xc89d11,_0x3a868e,_0x3305bf){return new BPromise(function(_0x295061,_0x576164){var _0x4c072e=_0x3305bf||client;return _0x4c072e[_0x0f4b('0x1a')](_0x2f20c5,_0x3a868e)[_0x0f4b('0x1b')](function(_0x51b400){logger[_0x0f4b('0x1c')](_0x0f4b('0x1d'),_0xc89d11,'request\x20sent');logger['debug']('VtigerConfiguration,\x20%s,\x20%s,\x20%s',_0xc89d11,_0x0f4b('0x1e'),JSON[_0x0f4b('0x1f')](_0x51b400));if(_0x51b400[_0x0f4b('0x20')]){if(_0x51b400['error'][_0x0f4b('0x21')]===0x1f4){logger[_0x0f4b('0x20')]('VtigerConfiguration,\x20%s,\x20%s',_0xc89d11,_0x51b400['error'][_0x0f4b('0x22')]);return _0x576164(_0x51b400[_0x0f4b('0x20')][_0x0f4b('0x22')]);}logger[_0x0f4b('0x20')](_0x0f4b('0x1d'),_0xc89d11,_0x51b400[_0x0f4b('0x20')]['message']);return _0x295061(_0x51b400['error'][_0x0f4b('0x22')]);}else{logger[_0x0f4b('0x1c')](_0x0f4b('0x1d'),_0xc89d11,'request\x20sent');_0x295061(_0x51b400[_0x0f4b('0x23')][_0x0f4b('0x22')]);}})[_0x0f4b('0x24')](function(_0x3958e8){logger[_0x0f4b('0x20')](_0x0f4b('0x1d'),_0xc89d11,_0x3958e8);_0x576164(_0x3958e8);});});}function respondWithStatusCode(_0x319334,_0x109d92){_0x109d92=_0x109d92||0xcc;return function(_0x8f533c){if(_0x8f533c){return _0x319334[_0x0f4b('0x25')](_0x109d92);}return _0x319334['status'](_0x109d92)[_0x0f4b('0x26')]();};}function respondWithResult(_0x1fcec6,_0x26a020){_0x26a020=_0x26a020||0xc8;return function(_0x5ea11b){if(_0x5ea11b){return _0x1fcec6[_0x0f4b('0x27')](_0x26a020)[_0x0f4b('0x28')](_0x5ea11b);}};}function respondWithFilteredResult(_0x1f4e27,_0x23a3bd){return function(_0x1ed60d){if(_0x1ed60d){var _0x398289=_0x1ed60d[_0x0f4b('0x29')],_0x1feb87=_0x23a3bd[_0x0f4b('0x2a')],_0x3d9846=_0x23a3bd[_0x0f4b('0x2a')]+_0x23a3bd[_0x0f4b('0x2b')],_0x58e7b7;if(_0x3d9846>=_0x398289){_0x3d9846=_0x398289;_0x58e7b7=0xc8;}else{_0x58e7b7=0xce;}_0x1f4e27[_0x0f4b('0x27')](_0x58e7b7);return _0x1f4e27[_0x0f4b('0x2c')]('Content-Range',_0x1feb87+'-'+_0x3d9846+'/'+_0x398289)['json'](_0x1ed60d);}return null;};}function patchUpdates(_0x1f9d42){return function(_0x317356){try{jsonpatch[_0x0f4b('0x2d')](_0x317356,_0x1f9d42,!![]);}catch(_0x372b58){return BPromise['reject'](_0x372b58);}return _0x317356[_0x0f4b('0x2e')]();};}function saveUpdates(_0x41a9c9,_0x46fb73){return function(_0x425b0f){if(_0x425b0f){return _0x425b0f[_0x0f4b('0x2f')](_0x41a9c9)['then'](function(_0x7bdf75){return _0x7bdf75;});}return null;};}function removeEntity(_0x578680,_0x59ede3){return function(_0x446885){if(_0x446885){return _0x446885[_0x0f4b('0x30')]()[_0x0f4b('0x1b')](function(){_0x578680[_0x0f4b('0x27')](0xcc)[_0x0f4b('0x26')]();});}};}function handleEntityNotFound(_0x1f8890,_0x362315){return function(_0x57bff2){if(!_0x57bff2){_0x1f8890[_0x0f4b('0x25')](0x194);}return _0x57bff2;};}function handleError(_0x5814cd,_0x20210b){_0x20210b=_0x20210b||0x1f4;return function(_0x48e310){logger[_0x0f4b('0x20')](_0x48e310[_0x0f4b('0x31')]);if(_0x48e310[_0x0f4b('0x32')]){delete _0x48e310[_0x0f4b('0x32')];}_0x5814cd[_0x0f4b('0x27')](_0x20210b)[_0x0f4b('0x33')](_0x48e310);};}exports[_0x0f4b('0x34')]=function(_0x99b9f,_0x43bc1b){var _0x5efd5c={},_0x2943e0={},_0x48c559={'count':0x0,'rows':[]};var _0x42314c=db[_0x0f4b('0x35')]['rawAttributes'];_0x2943e0[_0x0f4b('0x36')]=_[_0x0f4b('0x37')](_0x42314c);_0x2943e0[_0x0f4b('0x38')]=_[_0x0f4b('0x37')](_0x99b9f[_0x0f4b('0x38')]);_0x2943e0['filters']=_[_0x0f4b('0x39')](_0x2943e0[_0x0f4b('0x36')],_0x2943e0[_0x0f4b('0x38')]);_0x5efd5c['attributes']=_[_0x0f4b('0x39')](_0x2943e0[_0x0f4b('0x36')],qs['fields'](_0x99b9f['query']['fields']));_0x5efd5c['attributes']=_0x5efd5c['attributes'][_0x0f4b('0x3a')]?_0x5efd5c['attributes']:_0x2943e0[_0x0f4b('0x36')];if(!_0x99b9f[_0x0f4b('0x38')][_0x0f4b('0x3b')]('nolimit')){_0x5efd5c['limit']=qs[_0x0f4b('0x2b')](_0x99b9f[_0x0f4b('0x38')][_0x0f4b('0x2b')]);_0x5efd5c[_0x0f4b('0x2a')]=qs[_0x0f4b('0x2a')](_0x99b9f[_0x0f4b('0x38')]['offset']);}_0x5efd5c[_0x0f4b('0x3c')]=qs[_0x0f4b('0x3d')](_0x99b9f[_0x0f4b('0x38')][_0x0f4b('0x3d')]);_0x5efd5c['where']=qs[_0x0f4b('0x3e')](_['pick'](_0x99b9f['query'],_0x2943e0[_0x0f4b('0x3e')]));if(_0x99b9f[_0x0f4b('0x38')][_0x0f4b('0x3f')]){_0x5efd5c[_0x0f4b('0x40')]=_[_0x0f4b('0x41')](_0x5efd5c[_0x0f4b('0x40')],{'$or':_['map'](_0x42314c,function(_0x14d483){if(_0x14d483[_0x0f4b('0x42')][_0x0f4b('0x43')]!=='VIRTUAL'){var _0x3faf55={};_0x3faf55[_0x14d483['field']]={'$like':'%'+_0x99b9f[_0x0f4b('0x38')][_0x0f4b('0x3f')]+'%'};return _0x3faf55;}})});}_0x5efd5c=_[_0x0f4b('0x41')]({},_0x5efd5c,_0x99b9f[_0x0f4b('0x44')]);var _0x4023e6={'where':_0x5efd5c[_0x0f4b('0x40')]};return db[_0x0f4b('0x35')]['count'](_0x4023e6)[_0x0f4b('0x1b')](function(_0x499377){_0x48c559[_0x0f4b('0x29')]=_0x499377;if(_0x99b9f[_0x0f4b('0x38')]['includeAll']){_0x5efd5c[_0x0f4b('0x45')]=[{'all':!![]}];}return db['VtigerConfiguration'][_0x0f4b('0x46')](_0x5efd5c);})[_0x0f4b('0x1b')](function(_0x5da160){_0x48c559[_0x0f4b('0x47')]=_0x5da160;return _0x48c559;})['then'](respondWithFilteredResult(_0x43bc1b,_0x5efd5c))[_0x0f4b('0x24')](handleError(_0x43bc1b,null));};exports[_0x0f4b('0x48')]=function(_0x1bd8a3,_0x2172ff){var _0x16890a={'raw':![],'where':{'id':_0x1bd8a3['params']['id']}},_0x4a9193={};_0x4a9193['model']=_[_0x0f4b('0x37')](db[_0x0f4b('0x35')]['rawAttributes']);_0x4a9193[_0x0f4b('0x38')]=_[_0x0f4b('0x37')](_0x1bd8a3[_0x0f4b('0x38')]);_0x4a9193['filters']=_[_0x0f4b('0x39')](_0x4a9193['model'],_0x4a9193[_0x0f4b('0x38')]);_0x16890a[_0x0f4b('0x49')]=_[_0x0f4b('0x39')](_0x4a9193[_0x0f4b('0x36')],qs[_0x0f4b('0x4a')](_0x1bd8a3['query']['fields']));_0x16890a[_0x0f4b('0x49')]=_0x16890a['attributes']['length']?_0x16890a['attributes']:_0x4a9193[_0x0f4b('0x36')];if(_0x1bd8a3[_0x0f4b('0x38')]['includeAll']){_0x16890a[_0x0f4b('0x45')]=[{'all':!![]}];}_0x16890a=_[_0x0f4b('0x41')]({},_0x16890a,_0x1bd8a3[_0x0f4b('0x44')]);return db[_0x0f4b('0x35')]['find'](_0x16890a)[_0x0f4b('0x1b')](handleEntityNotFound(_0x2172ff,null))['then'](respondWithResult(_0x2172ff,null))[_0x0f4b('0x24')](handleError(_0x2172ff,null));};exports['create']=function(_0xe982cc,_0x14d816){return db['VtigerConfiguration'][_0x0f4b('0x4b')](_0xe982cc['body'],{})[_0x0f4b('0x1b')](respondWithResult(_0x14d816,0xc9))[_0x0f4b('0x24')](handleError(_0x14d816,null));};exports['update']=function(_0x4e9f45,_0x5381b1){if(_0x4e9f45[_0x0f4b('0x4c')]['id']){delete _0x4e9f45[_0x0f4b('0x4c')]['id'];}return db['VtigerConfiguration'][_0x0f4b('0x4d')]({'where':{'id':_0x4e9f45[_0x0f4b('0x4e')]['id']}})[_0x0f4b('0x1b')](handleEntityNotFound(_0x5381b1,null))['then'](saveUpdates(_0x4e9f45[_0x0f4b('0x4c')],null))[_0x0f4b('0x1b')](respondWithResult(_0x5381b1,null))[_0x0f4b('0x24')](handleError(_0x5381b1,null));};exports['destroy']=function(_0x1d1115,_0x330661){return db[_0x0f4b('0x35')][_0x0f4b('0x4d')]({'where':{'id':_0x1d1115[_0x0f4b('0x4e')]['id']}})[_0x0f4b('0x1b')](handleEntityNotFound(_0x330661,null))[_0x0f4b('0x1b')](removeEntity(_0x330661,null))[_0x0f4b('0x24')](handleError(_0x330661,null));};exports['getFields']=function(_0x49b474,_0xf28a10,_0x25a9e0){var _0x1f7448={};var _0x50fb06={};var _0x9870f6;var _0xe5aa7d;return db[_0x0f4b('0x35')][_0x0f4b('0x4f')]({'where':{'id':_0x49b474[_0x0f4b('0x4e')]['id']}})[_0x0f4b('0x1b')](handleEntityNotFound(_0xf28a10,null))[_0x0f4b('0x1b')](function(_0x4e0c7b){if(_0x4e0c7b){_0x9870f6=_0x4e0c7b;_0x50fb06[_0x0f4b('0x36')]=_[_0x0f4b('0x37')](db['VtigerField'][_0x0f4b('0x50')]);_0x50fb06[_0x0f4b('0x38')]=_[_0x0f4b('0x37')](_0x49b474[_0x0f4b('0x38')]);_0x50fb06['filters']=_[_0x0f4b('0x39')](_0x50fb06[_0x0f4b('0x36')],_0x50fb06[_0x0f4b('0x38')]);_0x1f7448[_0x0f4b('0x49')]=_[_0x0f4b('0x39')](_0x50fb06[_0x0f4b('0x36')],qs['fields'](_0x49b474['query'][_0x0f4b('0x4a')]));_0x1f7448['attributes']=_0x1f7448['attributes'][_0x0f4b('0x3a')]?_0x1f7448[_0x0f4b('0x49')]:_0x50fb06[_0x0f4b('0x36')];_0x1f7448[_0x0f4b('0x3c')]=qs[_0x0f4b('0x3d')](_0x49b474[_0x0f4b('0x38')][_0x0f4b('0x3d')]);_0x1f7448[_0x0f4b('0x40')]=qs[_0x0f4b('0x3e')](_[_0x0f4b('0x51')](_0x49b474[_0x0f4b('0x38')],_0x50fb06[_0x0f4b('0x3e')]));if(_0x49b474[_0x0f4b('0x38')][_0x0f4b('0x3f')]){_0x1f7448[_0x0f4b('0x40')]=_[_0x0f4b('0x41')](_0x1f7448[_0x0f4b('0x40')],{'$or':_[_0x0f4b('0x52')](_0x1f7448[_0x0f4b('0x49')],function(_0x3c3f82){var _0x5c956e={};_0x5c956e[_0x3c3f82]={'$like':'%'+_0x49b474['query'][_0x0f4b('0x3f')]+'%'};return _0x5c956e;})});}_0x1f7448=_[_0x0f4b('0x41')]({},_0x1f7448,_0x49b474[_0x0f4b('0x44')]);return _0x9870f6[_0x0f4b('0x53')](_0x1f7448);}})['then'](function(_0x160cc4){if(_0x160cc4){_0xe5aa7d=_0x160cc4[_0x0f4b('0x3a')];if(!_0x49b474[_0x0f4b('0x38')]['hasOwnProperty'](_0x0f4b('0x54'))){_0x1f7448[_0x0f4b('0x2b')]=qs[_0x0f4b('0x2b')](_0x49b474[_0x0f4b('0x38')][_0x0f4b('0x2b')]);_0x1f7448[_0x0f4b('0x2a')]=qs[_0x0f4b('0x2a')](_0x49b474['query'][_0x0f4b('0x2a')]);}return _0x9870f6[_0x0f4b('0x53')](_0x1f7448);}})[_0x0f4b('0x1b')](function(_0x35b292){if(_0x35b292){return _0x35b292?{'count':_0xe5aa7d,'rows':_0x35b292}:null;}})[_0x0f4b('0x1b')](respondWithResult(_0xf28a10,null))[_0x0f4b('0x24')](handleError(_0xf28a10,null));};exports[_0x0f4b('0x55')]=function(_0x94eaee,_0x38a832,_0x24c662){var _0x5776f8={};var _0x2aa731={};var _0x88a32c;var _0x34971d;return db[_0x0f4b('0x35')][_0x0f4b('0x4f')]({'where':{'id':_0x94eaee['params']['id']}})[_0x0f4b('0x1b')](handleEntityNotFound(_0x38a832,null))[_0x0f4b('0x1b')](function(_0xf48508){if(_0xf48508){_0x88a32c=_0xf48508;_0x2aa731[_0x0f4b('0x36')]=_['keys'](db['VtigerField'][_0x0f4b('0x50')]);_0x2aa731[_0x0f4b('0x38')]=_[_0x0f4b('0x37')](_0x94eaee['query']);_0x2aa731[_0x0f4b('0x3e')]=_[_0x0f4b('0x39')](_0x2aa731[_0x0f4b('0x36')],_0x2aa731[_0x0f4b('0x38')]);_0x5776f8[_0x0f4b('0x49')]=_[_0x0f4b('0x39')](_0x2aa731[_0x0f4b('0x36')],qs[_0x0f4b('0x4a')](_0x94eaee[_0x0f4b('0x38')]['fields']));_0x5776f8['attributes']=_0x5776f8[_0x0f4b('0x49')][_0x0f4b('0x3a')]?_0x5776f8['attributes']:_0x2aa731[_0x0f4b('0x36')];_0x5776f8['order']=qs[_0x0f4b('0x3d')](_0x94eaee[_0x0f4b('0x38')][_0x0f4b('0x3d')]);_0x5776f8['where']=qs[_0x0f4b('0x3e')](_['pick'](_0x94eaee[_0x0f4b('0x38')],_0x2aa731[_0x0f4b('0x3e')]));if(_0x94eaee['query'][_0x0f4b('0x3f')]){_0x5776f8['where']=_[_0x0f4b('0x41')](_0x5776f8[_0x0f4b('0x40')],{'$or':_[_0x0f4b('0x52')](_0x5776f8[_0x0f4b('0x49')],function(_0x2b8e86){var _0x3dca41={};_0x3dca41[_0x2b8e86]={'$like':'%'+_0x94eaee[_0x0f4b('0x38')][_0x0f4b('0x3f')]+'%'};return _0x3dca41;})});}_0x5776f8=_[_0x0f4b('0x41')]({},_0x5776f8,_0x94eaee[_0x0f4b('0x44')]);return _0x88a32c[_0x0f4b('0x55')](_0x5776f8);}})['then'](function(_0x214689){if(_0x214689){_0x34971d=_0x214689[_0x0f4b('0x3a')];if(!_0x94eaee['query'][_0x0f4b('0x3b')](_0x0f4b('0x54'))){_0x5776f8[_0x0f4b('0x2b')]=qs[_0x0f4b('0x2b')](_0x94eaee['query']['limit']);_0x5776f8['offset']=qs[_0x0f4b('0x2a')](_0x94eaee[_0x0f4b('0x38')]['offset']);}return _0x88a32c[_0x0f4b('0x55')](_0x5776f8);}})[_0x0f4b('0x1b')](function(_0x59bb48){if(_0x59bb48){return _0x59bb48?{'count':_0x34971d,'rows':_0x59bb48}:null;}})['then'](respondWithResult(_0x38a832,null))[_0x0f4b('0x24')](handleError(_0x38a832,null));};exports[_0x0f4b('0x56')]=function(_0x4005f9,_0x4caad0,_0xcc9801){var _0x5790a3={};var _0x3ff66a={};var _0x463215;var _0x1ee3b3;return db[_0x0f4b('0x35')][_0x0f4b('0x4f')]({'where':{'id':_0x4005f9[_0x0f4b('0x4e')]['id']}})[_0x0f4b('0x1b')](handleEntityNotFound(_0x4caad0,null))[_0x0f4b('0x1b')](function(_0x2edc18){if(_0x2edc18){_0x463215=_0x2edc18;_0x3ff66a[_0x0f4b('0x36')]=_[_0x0f4b('0x37')](db[_0x0f4b('0x57')][_0x0f4b('0x50')]);_0x3ff66a[_0x0f4b('0x38')]=_[_0x0f4b('0x37')](_0x4005f9[_0x0f4b('0x38')]);_0x3ff66a[_0x0f4b('0x3e')]=_[_0x0f4b('0x39')](_0x3ff66a[_0x0f4b('0x36')],_0x3ff66a[_0x0f4b('0x38')]);_0x5790a3[_0x0f4b('0x49')]=_[_0x0f4b('0x39')](_0x3ff66a[_0x0f4b('0x36')],qs[_0x0f4b('0x4a')](_0x4005f9['query'][_0x0f4b('0x4a')]));_0x5790a3[_0x0f4b('0x49')]=_0x5790a3[_0x0f4b('0x49')][_0x0f4b('0x3a')]?_0x5790a3[_0x0f4b('0x49')]:_0x3ff66a[_0x0f4b('0x36')];_0x5790a3['order']=qs[_0x0f4b('0x3d')](_0x4005f9['query'][_0x0f4b('0x3d')]);_0x5790a3[_0x0f4b('0x40')]=qs[_0x0f4b('0x3e')](_['pick'](_0x4005f9[_0x0f4b('0x38')],_0x3ff66a[_0x0f4b('0x3e')]));if(_0x4005f9[_0x0f4b('0x38')][_0x0f4b('0x3f')]){_0x5790a3[_0x0f4b('0x40')]=_['merge'](_0x5790a3[_0x0f4b('0x40')],{'$or':_[_0x0f4b('0x52')](_0x5790a3[_0x0f4b('0x49')],function(_0x3496d3){var _0x53f7f7={};_0x53f7f7[_0x3496d3]={'$like':'%'+_0x4005f9[_0x0f4b('0x38')][_0x0f4b('0x3f')]+'%'};return _0x53f7f7;})});}_0x5790a3=_[_0x0f4b('0x41')]({},_0x5790a3,_0x4005f9[_0x0f4b('0x44')]);return _0x463215[_0x0f4b('0x56')](_0x5790a3);}})[_0x0f4b('0x1b')](function(_0x3085bb){if(_0x3085bb){_0x1ee3b3=_0x3085bb[_0x0f4b('0x3a')];if(!_0x4005f9[_0x0f4b('0x38')]['hasOwnProperty'](_0x0f4b('0x54'))){_0x5790a3[_0x0f4b('0x2b')]=qs[_0x0f4b('0x2b')](_0x4005f9[_0x0f4b('0x38')][_0x0f4b('0x2b')]);_0x5790a3[_0x0f4b('0x2a')]=qs[_0x0f4b('0x2a')](_0x4005f9['query'][_0x0f4b('0x2a')]);}return _0x463215[_0x0f4b('0x56')](_0x5790a3);}})[_0x0f4b('0x1b')](function(_0x33edb1){if(_0x33edb1){return _0x33edb1?{'count':_0x1ee3b3,'rows':_0x33edb1}:null;}})[_0x0f4b('0x1b')](respondWithResult(_0x4caad0,null))[_0x0f4b('0x24')](handleError(_0x4caad0,null));};
\ No newline at end of file
+var _0x6ff3=['merge','type','key','VIRTUAL','filter','options','includeAll','include','rows','params','intersection','find','create','body','destroy','findOne','VtigerField','order','map','getFields','getSubjects','getDescriptions','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','ioredis','../../config/license/hardware','../../config/logger','api','../../config/utils','../../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','VtigerConfiguration,\x20%s,\x20%s','debug','VtigerConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','request\x20sent','result','catch','sendStatus','status','end','count','offset','limit','set','json','apply','reject','save','update','name','send','index','VtigerConfiguration','rawAttributes','model','keys','query','attributes','fields','length','hasOwnProperty','nolimit','sort','pick','filters','where'];(function(_0x142489,_0x472bdb){var _0x463823=function(_0x4e65c0){while(--_0x4e65c0){_0x142489['push'](_0x142489['shift']());}};_0x463823(++_0x472bdb);}(_0x6ff3,0x124));var _0x36ff=function(_0x3f81f8,_0x2bf739){_0x3f81f8=_0x3f81f8-0x0;var _0x22b24a=_0x6ff3[_0x3f81f8];return _0x22b24a;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x36ff('0x0'));var zipdir=require(_0x36ff('0x1'));var jsonpatch=require(_0x36ff('0x2'));var rp=require(_0x36ff('0x3'));var moment=require('moment');var BPromise=require(_0x36ff('0x4'));var Mustache=require(_0x36ff('0x5'));var util=require('util');var path=require('path');var sox=require(_0x36ff('0x6'));var csv=require(_0x36ff('0x7'));var ejs=require(_0x36ff('0x8'));var fs=require('fs');var _=require(_0x36ff('0x9'));var squel=require(_0x36ff('0xa'));var crypto=require(_0x36ff('0xb'));var jsforce=require(_0x36ff('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x36ff('0x7'));var querystring=require(_0x36ff('0xd'));var Papa=require(_0x36ff('0xe'));var Redis=require(_0x36ff('0xf'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x36ff('0x10'));var logger=require(_0x36ff('0x11'))(_0x36ff('0x12'));var utils=require(_0x36ff('0x13'));var config=require(_0x36ff('0x14'));var db=require(_0x36ff('0x15'))['db'];var jayson=require(_0x36ff('0x16'));var client=jayson[_0x36ff('0x17')]['http']({'port':0x232a});function checkPasswordPattern(_0x5d802c,_0x5d8259,_0x52d08){if(_0x52d08){var _0x2865cd=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2865cd[_0x36ff('0x18')](_0x5d8259)){return _0x5d802c;}else{throw new Error(_0x36ff('0x19'));}}else{return _0x5d802c;}}function respondWithRpcPromise(_0xd5fd6a,_0x1fe1b3,_0x1e8a4a,_0x1b7a6c){return new BPromise(function(_0x3a0001,_0x381dfb){var _0x131ae9=_0x1b7a6c||client;return _0x131ae9[_0x36ff('0x1a')](_0xd5fd6a,_0x1e8a4a)[_0x36ff('0x1b')](function(_0x26dd6a){logger['info'](_0x36ff('0x1c'),_0x1fe1b3,'request\x20sent');logger[_0x36ff('0x1d')](_0x36ff('0x1e'),_0x1fe1b3,'request\x20sent',JSON[_0x36ff('0x1f')](_0x26dd6a));if(_0x26dd6a[_0x36ff('0x20')]){if(_0x26dd6a[_0x36ff('0x20')][_0x36ff('0x21')]===0x1f4){logger['error'](_0x36ff('0x1c'),_0x1fe1b3,_0x26dd6a[_0x36ff('0x20')][_0x36ff('0x22')]);return _0x381dfb(_0x26dd6a[_0x36ff('0x20')][_0x36ff('0x22')]);}logger[_0x36ff('0x20')](_0x36ff('0x1c'),_0x1fe1b3,_0x26dd6a['error']['message']);return _0x3a0001(_0x26dd6a[_0x36ff('0x20')][_0x36ff('0x22')]);}else{logger[_0x36ff('0x23')](_0x36ff('0x1c'),_0x1fe1b3,_0x36ff('0x24'));_0x3a0001(_0x26dd6a[_0x36ff('0x25')][_0x36ff('0x22')]);}})[_0x36ff('0x26')](function(_0x41acdf){logger[_0x36ff('0x20')](_0x36ff('0x1c'),_0x1fe1b3,_0x41acdf);_0x381dfb(_0x41acdf);});});}function respondWithStatusCode(_0x7d6d5f,_0x9160d5){_0x9160d5=_0x9160d5||0xcc;return function(_0x1ff962){if(_0x1ff962){return _0x7d6d5f[_0x36ff('0x27')](_0x9160d5);}return _0x7d6d5f[_0x36ff('0x28')](_0x9160d5)[_0x36ff('0x29')]();};}function respondWithResult(_0x5eb3aa,_0x1ff351){_0x1ff351=_0x1ff351||0xc8;return function(_0x565f8a){if(_0x565f8a){return _0x5eb3aa[_0x36ff('0x28')](_0x1ff351)['json'](_0x565f8a);}};}function respondWithFilteredResult(_0x4ac513,_0x23365f){return function(_0x24c274){if(_0x24c274){var _0x59de66=_0x24c274[_0x36ff('0x2a')],_0x271353=_0x23365f[_0x36ff('0x2b')],_0x4df7bd=_0x23365f[_0x36ff('0x2b')]+_0x23365f[_0x36ff('0x2c')],_0x1015f5;if(_0x4df7bd>=_0x59de66){_0x4df7bd=_0x59de66;_0x1015f5=0xc8;}else{_0x1015f5=0xce;}_0x4ac513[_0x36ff('0x28')](_0x1015f5);return _0x4ac513[_0x36ff('0x2d')]('Content-Range',_0x271353+'-'+_0x4df7bd+'/'+_0x59de66)[_0x36ff('0x2e')](_0x24c274);}return null;};}function patchUpdates(_0x45497e){return function(_0x45eabe){try{jsonpatch[_0x36ff('0x2f')](_0x45eabe,_0x45497e,!![]);}catch(_0x267c1a){return BPromise[_0x36ff('0x30')](_0x267c1a);}return _0x45eabe[_0x36ff('0x31')]();};}function saveUpdates(_0xb7dd9,_0x119fae){return function(_0x416a42){if(_0x416a42){return _0x416a42[_0x36ff('0x32')](_0xb7dd9)[_0x36ff('0x1b')](function(_0x15ef3a){return _0x15ef3a;});}return null;};}function removeEntity(_0x3e4896,_0x119775){return function(_0x5687a1){if(_0x5687a1){return _0x5687a1['destroy']()[_0x36ff('0x1b')](function(){_0x3e4896[_0x36ff('0x28')](0xcc)[_0x36ff('0x29')]();});}};}function handleEntityNotFound(_0x4cdaba,_0xf16d16){return function(_0x565a55){if(!_0x565a55){_0x4cdaba[_0x36ff('0x27')](0x194);}return _0x565a55;};}function handleError(_0xec55fc,_0x339ce2){_0x339ce2=_0x339ce2||0x1f4;return function(_0x53d1b1){logger[_0x36ff('0x20')](_0x53d1b1['stack']);if(_0x53d1b1[_0x36ff('0x33')]){delete _0x53d1b1[_0x36ff('0x33')];}_0xec55fc[_0x36ff('0x28')](_0x339ce2)[_0x36ff('0x34')](_0x53d1b1);};}exports[_0x36ff('0x35')]=function(_0x14a438,_0x29c927){var _0x864e89={},_0x552656={},_0x55ab78={'count':0x0,'rows':[]};var _0x435c6a=db[_0x36ff('0x36')][_0x36ff('0x37')];_0x552656[_0x36ff('0x38')]=_[_0x36ff('0x39')](_0x435c6a);_0x552656[_0x36ff('0x3a')]=_[_0x36ff('0x39')](_0x14a438['query']);_0x552656['filters']=_['intersection'](_0x552656[_0x36ff('0x38')],_0x552656[_0x36ff('0x3a')]);_0x864e89[_0x36ff('0x3b')]=_['intersection'](_0x552656['model'],qs[_0x36ff('0x3c')](_0x14a438[_0x36ff('0x3a')][_0x36ff('0x3c')]));_0x864e89[_0x36ff('0x3b')]=_0x864e89[_0x36ff('0x3b')][_0x36ff('0x3d')]?_0x864e89[_0x36ff('0x3b')]:_0x552656['model'];if(!_0x14a438[_0x36ff('0x3a')][_0x36ff('0x3e')](_0x36ff('0x3f'))){_0x864e89['limit']=qs[_0x36ff('0x2c')](_0x14a438['query'][_0x36ff('0x2c')]);_0x864e89[_0x36ff('0x2b')]=qs['offset'](_0x14a438['query'][_0x36ff('0x2b')]);}_0x864e89['order']=qs[_0x36ff('0x40')](_0x14a438['query'][_0x36ff('0x40')]);_0x864e89['where']=qs['filters'](_[_0x36ff('0x41')](_0x14a438['query'],_0x552656[_0x36ff('0x42')]));if(_0x14a438['query']['filter']){_0x864e89[_0x36ff('0x43')]=_[_0x36ff('0x44')](_0x864e89[_0x36ff('0x43')],{'$or':_['map'](_0x435c6a,function(_0xd0b84d){if(_0xd0b84d[_0x36ff('0x45')][_0x36ff('0x46')]!==_0x36ff('0x47')){var _0x5c0df9={};_0x5c0df9[_0xd0b84d['field']]={'$like':'%'+_0x14a438['query'][_0x36ff('0x48')]+'%'};return _0x5c0df9;}})});}_0x864e89=_[_0x36ff('0x44')]({},_0x864e89,_0x14a438[_0x36ff('0x49')]);var _0x520c68={'where':_0x864e89['where']};return db[_0x36ff('0x36')][_0x36ff('0x2a')](_0x520c68)[_0x36ff('0x1b')](function(_0xc63eb4){_0x55ab78[_0x36ff('0x2a')]=_0xc63eb4;if(_0x14a438[_0x36ff('0x3a')][_0x36ff('0x4a')]){_0x864e89[_0x36ff('0x4b')]=[{'all':!![]}];}return db[_0x36ff('0x36')]['findAll'](_0x864e89);})[_0x36ff('0x1b')](function(_0x512b4a){_0x55ab78[_0x36ff('0x4c')]=_0x512b4a;return _0x55ab78;})[_0x36ff('0x1b')](respondWithFilteredResult(_0x29c927,_0x864e89))['catch'](handleError(_0x29c927,null));};exports['show']=function(_0xa91656,_0x3c9e41){var _0x22cb2e={'raw':![],'where':{'id':_0xa91656[_0x36ff('0x4d')]['id']}},_0x5a160a={};_0x5a160a['model']=_[_0x36ff('0x39')](db[_0x36ff('0x36')]['rawAttributes']);_0x5a160a[_0x36ff('0x3a')]=_[_0x36ff('0x39')](_0xa91656[_0x36ff('0x3a')]);_0x5a160a[_0x36ff('0x42')]=_[_0x36ff('0x4e')](_0x5a160a[_0x36ff('0x38')],_0x5a160a[_0x36ff('0x3a')]);_0x22cb2e[_0x36ff('0x3b')]=_[_0x36ff('0x4e')](_0x5a160a['model'],qs['fields'](_0xa91656['query'][_0x36ff('0x3c')]));_0x22cb2e[_0x36ff('0x3b')]=_0x22cb2e[_0x36ff('0x3b')][_0x36ff('0x3d')]?_0x22cb2e[_0x36ff('0x3b')]:_0x5a160a[_0x36ff('0x38')];if(_0xa91656['query'][_0x36ff('0x4a')]){_0x22cb2e[_0x36ff('0x4b')]=[{'all':!![]}];}_0x22cb2e=_[_0x36ff('0x44')]({},_0x22cb2e,_0xa91656[_0x36ff('0x49')]);return db[_0x36ff('0x36')][_0x36ff('0x4f')](_0x22cb2e)[_0x36ff('0x1b')](handleEntityNotFound(_0x3c9e41,null))['then'](respondWithResult(_0x3c9e41,null))[_0x36ff('0x26')](handleError(_0x3c9e41,null));};exports[_0x36ff('0x50')]=function(_0x29c273,_0x4394b6){return db[_0x36ff('0x36')][_0x36ff('0x50')](_0x29c273[_0x36ff('0x51')],{})['then'](respondWithResult(_0x4394b6,0xc9))[_0x36ff('0x26')](handleError(_0x4394b6,null));};exports[_0x36ff('0x32')]=function(_0x222fc7,_0x141f7b){if(_0x222fc7[_0x36ff('0x51')]['id']){delete _0x222fc7[_0x36ff('0x51')]['id'];}return db[_0x36ff('0x36')]['find']({'where':{'id':_0x222fc7[_0x36ff('0x4d')]['id']}})[_0x36ff('0x1b')](handleEntityNotFound(_0x141f7b,null))[_0x36ff('0x1b')](saveUpdates(_0x222fc7['body'],null))[_0x36ff('0x1b')](respondWithResult(_0x141f7b,null))[_0x36ff('0x26')](handleError(_0x141f7b,null));};exports[_0x36ff('0x52')]=function(_0x5c1822,_0x1d8b25){return db[_0x36ff('0x36')][_0x36ff('0x4f')]({'where':{'id':_0x5c1822['params']['id']}})[_0x36ff('0x1b')](handleEntityNotFound(_0x1d8b25,null))[_0x36ff('0x1b')](removeEntity(_0x1d8b25,null))[_0x36ff('0x26')](handleError(_0x1d8b25,null));};exports['getFields']=function(_0x587d74,_0x4ca160,_0x5e737e){var _0x93f20a={};var _0x50419b={};var _0x261580;var _0x46d587;return db[_0x36ff('0x36')][_0x36ff('0x53')]({'where':{'id':_0x587d74[_0x36ff('0x4d')]['id']}})['then'](handleEntityNotFound(_0x4ca160,null))['then'](function(_0x400950){if(_0x400950){_0x261580=_0x400950;_0x50419b[_0x36ff('0x38')]=_[_0x36ff('0x39')](db[_0x36ff('0x54')][_0x36ff('0x37')]);_0x50419b[_0x36ff('0x3a')]=_[_0x36ff('0x39')](_0x587d74[_0x36ff('0x3a')]);_0x50419b[_0x36ff('0x42')]=_[_0x36ff('0x4e')](_0x50419b['model'],_0x50419b['query']);_0x93f20a[_0x36ff('0x3b')]=_[_0x36ff('0x4e')](_0x50419b[_0x36ff('0x38')],qs[_0x36ff('0x3c')](_0x587d74['query'][_0x36ff('0x3c')]));_0x93f20a['attributes']=_0x93f20a[_0x36ff('0x3b')][_0x36ff('0x3d')]?_0x93f20a[_0x36ff('0x3b')]:_0x50419b['model'];_0x93f20a[_0x36ff('0x55')]=qs[_0x36ff('0x40')](_0x587d74[_0x36ff('0x3a')][_0x36ff('0x40')]);_0x93f20a[_0x36ff('0x43')]=qs['filters'](_[_0x36ff('0x41')](_0x587d74['query'],_0x50419b[_0x36ff('0x42')]));if(_0x587d74['query'][_0x36ff('0x48')]){_0x93f20a[_0x36ff('0x43')]=_[_0x36ff('0x44')](_0x93f20a[_0x36ff('0x43')],{'$or':_[_0x36ff('0x56')](_0x93f20a[_0x36ff('0x3b')],function(_0xcfa3a9){var _0x2b8f82={};_0x2b8f82[_0xcfa3a9]={'$like':'%'+_0x587d74[_0x36ff('0x3a')][_0x36ff('0x48')]+'%'};return _0x2b8f82;})});}_0x93f20a=_['merge']({},_0x93f20a,_0x587d74['options']);return _0x261580[_0x36ff('0x57')](_0x93f20a);}})[_0x36ff('0x1b')](function(_0x30789e){if(_0x30789e){_0x46d587=_0x30789e[_0x36ff('0x3d')];if(!_0x587d74[_0x36ff('0x3a')]['hasOwnProperty']('nolimit')){_0x93f20a[_0x36ff('0x2c')]=qs['limit'](_0x587d74[_0x36ff('0x3a')]['limit']);_0x93f20a['offset']=qs['offset'](_0x587d74[_0x36ff('0x3a')]['offset']);}return _0x261580['getFields'](_0x93f20a);}})[_0x36ff('0x1b')](function(_0x54496f){if(_0x54496f){return _0x54496f?{'count':_0x46d587,'rows':_0x54496f}:null;}})['then'](respondWithResult(_0x4ca160,null))[_0x36ff('0x26')](handleError(_0x4ca160,null));};exports[_0x36ff('0x58')]=function(_0xfcb974,_0x334c8d,_0x444b84){var _0x1ac85d={};var _0x19011d={};var _0xd64c00;var _0x2a770a;return db[_0x36ff('0x36')][_0x36ff('0x53')]({'where':{'id':_0xfcb974['params']['id']}})['then'](handleEntityNotFound(_0x334c8d,null))[_0x36ff('0x1b')](function(_0x3f9b75){if(_0x3f9b75){_0xd64c00=_0x3f9b75;_0x19011d[_0x36ff('0x38')]=_['keys'](db[_0x36ff('0x54')][_0x36ff('0x37')]);_0x19011d[_0x36ff('0x3a')]=_[_0x36ff('0x39')](_0xfcb974[_0x36ff('0x3a')]);_0x19011d[_0x36ff('0x42')]=_['intersection'](_0x19011d[_0x36ff('0x38')],_0x19011d[_0x36ff('0x3a')]);_0x1ac85d[_0x36ff('0x3b')]=_[_0x36ff('0x4e')](_0x19011d[_0x36ff('0x38')],qs[_0x36ff('0x3c')](_0xfcb974[_0x36ff('0x3a')][_0x36ff('0x3c')]));_0x1ac85d['attributes']=_0x1ac85d['attributes']['length']?_0x1ac85d['attributes']:_0x19011d['model'];_0x1ac85d[_0x36ff('0x55')]=qs[_0x36ff('0x40')](_0xfcb974[_0x36ff('0x3a')][_0x36ff('0x40')]);_0x1ac85d[_0x36ff('0x43')]=qs['filters'](_[_0x36ff('0x41')](_0xfcb974[_0x36ff('0x3a')],_0x19011d['filters']));if(_0xfcb974[_0x36ff('0x3a')][_0x36ff('0x48')]){_0x1ac85d['where']=_[_0x36ff('0x44')](_0x1ac85d[_0x36ff('0x43')],{'$or':_['map'](_0x1ac85d['attributes'],function(_0x32dc9d){var _0x1603c2={};_0x1603c2[_0x32dc9d]={'$like':'%'+_0xfcb974['query'][_0x36ff('0x48')]+'%'};return _0x1603c2;})});}_0x1ac85d=_[_0x36ff('0x44')]({},_0x1ac85d,_0xfcb974[_0x36ff('0x49')]);return _0xd64c00['getSubjects'](_0x1ac85d);}})['then'](function(_0x1a93b5){if(_0x1a93b5){_0x2a770a=_0x1a93b5[_0x36ff('0x3d')];if(!_0xfcb974['query'][_0x36ff('0x3e')](_0x36ff('0x3f'))){_0x1ac85d['limit']=qs[_0x36ff('0x2c')](_0xfcb974[_0x36ff('0x3a')]['limit']);_0x1ac85d[_0x36ff('0x2b')]=qs[_0x36ff('0x2b')](_0xfcb974[_0x36ff('0x3a')][_0x36ff('0x2b')]);}return _0xd64c00[_0x36ff('0x58')](_0x1ac85d);}})['then'](function(_0x1d9751){if(_0x1d9751){return _0x1d9751?{'count':_0x2a770a,'rows':_0x1d9751}:null;}})[_0x36ff('0x1b')](respondWithResult(_0x334c8d,null))[_0x36ff('0x26')](handleError(_0x334c8d,null));};exports[_0x36ff('0x59')]=function(_0x1a0a72,_0x5516c0,_0x339a9a){var _0x4ca50d={};var _0x135d70={};var _0x5c1a34;var _0x304b56;return db[_0x36ff('0x36')][_0x36ff('0x53')]({'where':{'id':_0x1a0a72[_0x36ff('0x4d')]['id']}})[_0x36ff('0x1b')](handleEntityNotFound(_0x5516c0,null))[_0x36ff('0x1b')](function(_0xca9d64){if(_0xca9d64){_0x5c1a34=_0xca9d64;_0x135d70[_0x36ff('0x38')]=_[_0x36ff('0x39')](db[_0x36ff('0x54')][_0x36ff('0x37')]);_0x135d70['query']=_['keys'](_0x1a0a72['query']);_0x135d70[_0x36ff('0x42')]=_[_0x36ff('0x4e')](_0x135d70[_0x36ff('0x38')],_0x135d70[_0x36ff('0x3a')]);_0x4ca50d[_0x36ff('0x3b')]=_[_0x36ff('0x4e')](_0x135d70['model'],qs[_0x36ff('0x3c')](_0x1a0a72[_0x36ff('0x3a')]['fields']));_0x4ca50d[_0x36ff('0x3b')]=_0x4ca50d[_0x36ff('0x3b')][_0x36ff('0x3d')]?_0x4ca50d[_0x36ff('0x3b')]:_0x135d70[_0x36ff('0x38')];_0x4ca50d['order']=qs[_0x36ff('0x40')](_0x1a0a72['query'][_0x36ff('0x40')]);_0x4ca50d[_0x36ff('0x43')]=qs['filters'](_[_0x36ff('0x41')](_0x1a0a72[_0x36ff('0x3a')],_0x135d70['filters']));if(_0x1a0a72['query'][_0x36ff('0x48')]){_0x4ca50d[_0x36ff('0x43')]=_[_0x36ff('0x44')](_0x4ca50d[_0x36ff('0x43')],{'$or':_['map'](_0x4ca50d['attributes'],function(_0x5d9752){var _0x40573c={};_0x40573c[_0x5d9752]={'$like':'%'+_0x1a0a72[_0x36ff('0x3a')][_0x36ff('0x48')]+'%'};return _0x40573c;})});}_0x4ca50d=_[_0x36ff('0x44')]({},_0x4ca50d,_0x1a0a72['options']);return _0x5c1a34[_0x36ff('0x59')](_0x4ca50d);}})[_0x36ff('0x1b')](function(_0xeee588){if(_0xeee588){_0x304b56=_0xeee588[_0x36ff('0x3d')];if(!_0x1a0a72['query'][_0x36ff('0x3e')](_0x36ff('0x3f'))){_0x4ca50d[_0x36ff('0x2c')]=qs[_0x36ff('0x2c')](_0x1a0a72[_0x36ff('0x3a')][_0x36ff('0x2c')]);_0x4ca50d[_0x36ff('0x2b')]=qs[_0x36ff('0x2b')](_0x1a0a72[_0x36ff('0x3a')][_0x36ff('0x2b')]);}return _0x5c1a34[_0x36ff('0x59')](_0x4ca50d);}})['then'](function(_0x42f805){if(_0x42f805){return _0x42f805?{'count':_0x304b56,'rows':_0x42f805}:null;}})[_0x36ff('0x1b')](respondWithResult(_0x5516c0,null))['catch'](handleError(_0x5516c0,null));};
\ No newline at end of file
index 6e9410c..7718e9d 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(_0x125027,_0x35f6a0){var _0x38ea7b=function(_0x571bc6){while(--_0x571bc6){_0x125027['push'](_0x125027['shift']());}};_0x38ea7b(++_0x35f6a0);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3899d1,_0x4aa04c){_0x3899d1=_0x3899d1-0x0;var _0xeb4a7d=_0xa9e0[_0x3899d1];return _0xeb4a7d;};'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(_0x37d1ac,_0x14aa6a){var _0x5b4af7=function(_0x2fb49d){while(--_0x2fb49d){_0x37d1ac['push'](_0x37d1ac['shift']());}};_0x5b4af7(++_0x14aa6a);}(_0xa9e0,0x123));var _0x0a9e=function(_0x1ddedd,_0x485606){_0x1ddedd=_0x1ddedd-0x0;var _0xa3e1ac=_0xa9e0[_0x1ddedd];return _0xa3e1ac;};'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 d1b5aa6..006e4d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf518=['jayson/promise','client','http','request','then','info','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','code','error','message','result','catch','lodash','util','moment','bluebird','../../config/utils','../../config/logger','rpc','../../config/environment'];(function(_0x4ff09b,_0x53f67d){var _0x3f5c2e=function(_0x124592){while(--_0x124592){_0x4ff09b['push'](_0x4ff09b['shift']());}};_0x3f5c2e(++_0x53f67d);}(_0xf518,0x1f2));var _0x8f51=function(_0x24618a,_0x2cd0f4){_0x24618a=_0x24618a-0x0;var _0x2e3d64=_0xf518[_0x24618a];return _0x2e3d64;};'use strict';var _=require(_0x8f51('0x0'));var util=require(_0x8f51('0x1'));var moment=require(_0x8f51('0x2'));var BPromise=require(_0x8f51('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x8f51('0x4'));var logger=require(_0x8f51('0x5'))(_0x8f51('0x6'));var config=require(_0x8f51('0x7'));var jayson=require(_0x8f51('0x8'));var client=jayson[_0x8f51('0x9')][_0x8f51('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x306412,_0xed27f7,_0x5f815e){return new BPromise(function(_0x3cc5d4,_0x2e6aae){return client[_0x8f51('0xb')](_0x306412,_0x5f815e)[_0x8f51('0xc')](function(_0x1d3ae3){logger[_0x8f51('0xd')](_0x8f51('0xe'),_0xed27f7,_0x8f51('0xf'));logger[_0x8f51('0x10')]('VtigerConfiguration,\x20%s,\x20%s,\x20%s',_0xed27f7,_0x8f51('0xf'),JSON[_0x8f51('0x11')](_0x1d3ae3));if(_0x1d3ae3['error']){if(_0x1d3ae3['error'][_0x8f51('0x12')]===0x1f4){logger[_0x8f51('0x13')](_0x8f51('0xe'),_0xed27f7,_0x1d3ae3['error'][_0x8f51('0x14')]);return _0x2e6aae(_0x1d3ae3['error']['message']);}logger[_0x8f51('0x13')](_0x8f51('0xe'),_0xed27f7,_0x1d3ae3['error'][_0x8f51('0x14')]);return _0x3cc5d4(_0x1d3ae3['error'][_0x8f51('0x14')]);}else{logger['info'](_0x8f51('0xe'),_0xed27f7,_0x8f51('0xf'));_0x3cc5d4(_0x1d3ae3[_0x8f51('0x15')][_0x8f51('0x14')]);}})[_0x8f51('0x16')](function(_0x54e4fe){logger['error'](_0x8f51('0xe'),_0xed27f7,_0x54e4fe);_0x2e6aae(_0x54e4fe);});});}
\ No newline at end of file
+var _0x8672=['code','message','lodash','util','randomstring','../../config/utils','../../config/environment','client','request','then','info','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','VtigerConfiguration,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x384c35,_0x358c5f){var _0x4c7bcd=function(_0x40a87b){while(--_0x40a87b){_0x384c35['push'](_0x384c35['shift']());}};_0x4c7bcd(++_0x358c5f);}(_0x8672,0x142));var _0x2867=function(_0x3a5823,_0x2294f2){_0x3a5823=_0x3a5823-0x0;var _0x3aa4a3=_0x8672[_0x3a5823];return _0x3aa4a3;};'use strict';var _=require(_0x2867('0x0'));var util=require(_0x2867('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x2867('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x2867('0x3'));var logger=require('../../config/logger')('rpc');var config=require(_0x2867('0x4'));var jayson=require('jayson/promise');var client=jayson[_0x2867('0x5')]['http']({'port':0x232a});function respondWithRpcPromise(_0x40cd0b,_0x1aaaa9,_0x4d89a2){return new BPromise(function(_0xdc4368,_0x575e5b){return client[_0x2867('0x6')](_0x40cd0b,_0x4d89a2)[_0x2867('0x7')](function(_0x3cb326){logger[_0x2867('0x8')](_0x2867('0x9'),_0x1aaaa9,_0x2867('0xa'));logger['debug'](_0x2867('0xb'),_0x1aaaa9,_0x2867('0xa'),JSON[_0x2867('0xc')](_0x3cb326));if(_0x3cb326['error']){if(_0x3cb326[_0x2867('0xd')][_0x2867('0xe')]===0x1f4){logger[_0x2867('0xd')]('VtigerConfiguration,\x20%s,\x20%s',_0x1aaaa9,_0x3cb326[_0x2867('0xd')][_0x2867('0xf')]);return _0x575e5b(_0x3cb326['error'][_0x2867('0xf')]);}logger[_0x2867('0xd')]('VtigerConfiguration,\x20%s,\x20%s',_0x1aaaa9,_0x3cb326[_0x2867('0xd')][_0x2867('0xf')]);return _0xdc4368(_0x3cb326[_0x2867('0xd')][_0x2867('0xf')]);}else{logger[_0x2867('0x8')](_0x2867('0x9'),_0x1aaaa9,_0x2867('0xa'));_0xdc4368(_0x3cb326['result'][_0x2867('0xf')]);}})['catch'](function(_0x2f84da){logger['error'](_0x2867('0x9'),_0x1aaaa9,_0x2f84da);_0x575e5b(_0x2f84da);});});}
\ No newline at end of file
index 5d028f4..92b3bc6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd149=['update','multer','express','../../components/interaction/service','../../config/environment','./intVtigerField.controller','get','isAuthenticated','index','/:id','create','put'];(function(_0x3b5f87,_0x15bd24){var _0x5e456e=function(_0x23f41a){while(--_0x23f41a){_0x3b5f87['push'](_0x3b5f87['shift']());}};_0x5e456e(++_0x15bd24);}(_0xd149,0x151));var _0x9d14=function(_0x12fc8d,_0x19ee33){_0x12fc8d=_0x12fc8d-0x0;var _0x3f9d04=_0xd149[_0x12fc8d];return _0x3f9d04;};'use strict';var multer=require(_0x9d14('0x0'));var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require(_0x9d14('0x1'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x9d14('0x2'));var config=require(_0x9d14('0x3'));var controller=require(_0x9d14('0x4'));router[_0x9d14('0x5')]('/',auth[_0x9d14('0x6')](),controller[_0x9d14('0x7')]);router[_0x9d14('0x5')](_0x9d14('0x8'),auth['isAuthenticated'](),controller['show']);router['post']('/',auth['isAuthenticated'](),controller[_0x9d14('0x9')]);router[_0x9d14('0xa')](_0x9d14('0x8'),auth[_0x9d14('0x6')](),controller[_0x9d14('0xb')]);router['delete']('/:id',auth[_0x9d14('0x6')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x15ea=['connect-timeout','Router','../../components/auth/service','../../components/interaction/service','./intVtigerField.controller','get','isAuthenticated','index','create','put','/:id','destroy','exports','multer','util','path'];(function(_0x3c4d1b,_0x5b9858){var _0x585a1e=function(_0x353986){while(--_0x353986){_0x3c4d1b['push'](_0x3c4d1b['shift']());}};_0x585a1e(++_0x5b9858);}(_0x15ea,0x7d));var _0xa15e=function(_0x388c6d,_0x16ef6d){_0x388c6d=_0x388c6d-0x0;var _0x19c330=_0x15ea[_0x388c6d];return _0x19c330;};'use strict';var multer=require(_0xa15e('0x0'));var util=require(_0xa15e('0x1'));var path=require(_0xa15e('0x2'));var timeout=require(_0xa15e('0x3'));var express=require('express');var router=express[_0xa15e('0x4')]();var auth=require(_0xa15e('0x5'));var interaction=require(_0xa15e('0x6'));var config=require('../../config/environment');var controller=require(_0xa15e('0x7'));router[_0xa15e('0x8')]('/',auth[_0xa15e('0x9')](),controller[_0xa15e('0xa')]);router[_0xa15e('0x8')]('/:id',auth[_0xa15e('0x9')](),controller['show']);router['post']('/',auth[_0xa15e('0x9')](),controller[_0xa15e('0xb')]);router[_0xa15e('0xc')](_0xa15e('0xd'),auth['isAuthenticated'](),controller['update']);router['delete'](_0xa15e('0xd'),auth[_0xa15e('0x9')](),controller[_0xa15e('0xe')]);module[_0xa15e('0xf')]=router;
\ No newline at end of file
index c113662..6cca1b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c81=['customVariable','BOOLEAN','sequelize','exports','string','variable','STRING','ENUM'];(function(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0x3c81,0x102));var _0x13c8=function(_0x157812,_0x3f367f){_0x157812=_0x157812-0x0;var _0x49d92d=_0x3c81[_0x157812];return _0x49d92d;};'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
+var _0x1339=['keyValue','STRING','BOOLEAN','ENUM','string','variable','customVariable'];(function(_0x19f355,_0x247073){var _0x52ea26=function(_0x5140da){while(--_0x5140da){_0x19f355['push'](_0x19f355['shift']());}};_0x52ea26(++_0x247073);}(_0x1339,0x1ed));var _0x9133=function(_0xa93712,_0x509f9a){_0xa93712=_0xa93712-0x0;var _0x558271=_0x1339[_0xa93712];return _0x558271;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0x9133('0x0')](_0x9133('0x1'),_0x9133('0x2'),_0x9133('0x3'),_0x9133('0x4')),'defaultValue':_0x9133('0x1')},'content':{'type':Sequelize[_0x9133('0x5')]},'key':{'type':Sequelize[_0x9133('0x5')]},'keyType':{'type':Sequelize['ENUM'](_0x9133('0x1'),_0x9133('0x2'),_0x9133('0x3'))},'keyContent':{'type':Sequelize['STRING']},'idField':{'type':Sequelize[_0x9133('0x5')]},'nameField':{'type':Sequelize[_0x9133('0x5')]},'customField':{'type':Sequelize[_0x9133('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x9133('0x5')]}};
\ No newline at end of file
index 00edbed..ac59735 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['type','key','VIRTUAL','field','count','includeAll','findAll','catch','params','model','options','find','create','body','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','VtigerField','rawAttributes','keys','query','filters','intersection','fields','length','attributes','hasOwnProperty','nolimit','order','sort','where','filter','merge'];(function(_0x2a0bf0,_0x247ffd){var _0x104fd6=function(_0x555e9b){while(--_0x555e9b){_0x2a0bf0['push'](_0x2a0bf0['shift']());}};_0x104fd6(++_0x247ffd);}(_0xb10b,0x12a));var _0xbb10=function(_0x239a37,_0x1675c8){_0x239a37=_0x239a37-0x0;var _0x46db3c=_0xb10b[_0x239a37];return _0x46db3c;};'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['update']=function(_0x14e1cb,_0x2f5027){if(_0x14e1cb[_0xbb10('0x46')]['id']){delete _0x14e1cb[_0xbb10('0x46')]['id'];}return db[_0xbb10('0x29')][_0xbb10('0x44')]({'where':{'id':_0x14e1cb[_0xbb10('0x41')]['id']}})['then'](handleEntityNotFound(_0x2f5027,null))['then'](saveUpdates(_0x14e1cb[_0xbb10('0x46')],null))[_0xbb10('0x25')](respondWithResult(_0x2f5027,null))[_0xbb10('0x40')](handleError(_0x2f5027,null));};exports['destroy']=function(_0x5f0c12,_0x3cd6f3){return db[_0xbb10('0x29')][_0xbb10('0x44')]({'where':{'id':_0x5f0c12[_0xbb10('0x41')]['id']}})[_0xbb10('0x25')](handleEntityNotFound(_0x3cd6f3,null))[_0xbb10('0x25')](removeEntity(_0x3cd6f3,null))[_0xbb10('0x40')](handleError(_0x3cd6f3,null));};
\ No newline at end of file
+var _0x282b=['send','VtigerField','model','keys','query','filters','intersection','attributes','fields','length','nolimit','sort','where','filter','merge','map','type','VIRTUAL','field','options','includeAll','catch','show','params','rawAttributes','include','find','create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','util','path','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','destroy','then','error','stack','name'];(function(_0x295a55,_0x56e0dc){var _0x3890cf=function(_0x284d42){while(--_0x284d42){_0x295a55['push'](_0x295a55['shift']());}};_0x3890cf(++_0x56e0dc);}(_0x282b,0xec));var _0xb282=function(_0x51164e,_0x12ddcb){_0x51164e=_0x51164e-0x0;var _0x118e3c=_0x282b[_0x51164e];return _0x118e3c;};'use strict';var pdf=require(_0xb282('0x0'));var emlformat=require(_0xb282('0x1'));var rimraf=require(_0xb282('0x2'));var zipdir=require(_0xb282('0x3'));var jsonpatch=require(_0xb282('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xb282('0x5'));var Mustache=require('mustache');var util=require(_0xb282('0x6'));var path=require(_0xb282('0x7'));var sox=require(_0xb282('0x8'));var csv=require(_0xb282('0x9'));var ejs=require(_0xb282('0xa'));var fs=require('fs');var _=require(_0xb282('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xb282('0xc'));var deskjs=require(_0xb282('0xd'));var toCsv=require('to-csv');var querystring=require(_0xb282('0xe'));var Papa=require(_0xb282('0xf'));var Redis=require(_0xb282('0x10'));var authService=require(_0xb282('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xb282('0x12'))(_0xb282('0x13'));var utils=require(_0xb282('0x14'));var config=require(_0xb282('0x15'));var db=require(_0xb282('0x16'))['db'];function respondWithStatusCode(_0x5f1c71,_0x5d52d2){_0x5d52d2=_0x5d52d2||0xcc;return function(_0x338bdb){if(_0x338bdb){return _0x5f1c71[_0xb282('0x17')](_0x5d52d2);}return _0x5f1c71[_0xb282('0x18')](_0x5d52d2)[_0xb282('0x19')]();};}function respondWithResult(_0x122372,_0x55bd85){_0x55bd85=_0x55bd85||0xc8;return function(_0x34c595){if(_0x34c595){return _0x122372['status'](_0x55bd85)[_0xb282('0x1a')](_0x34c595);}};}function respondWithFilteredResult(_0x211862,_0x4af892){return function(_0x525cfa){if(_0x525cfa){var _0x5bc7c3=_0x525cfa[_0xb282('0x1b')],_0x13cea1=_0x4af892[_0xb282('0x1c')],_0x350676=_0x4af892['offset']+_0x4af892[_0xb282('0x1d')],_0x7c20df;if(_0x350676>=_0x5bc7c3){_0x350676=_0x5bc7c3;_0x7c20df=0xc8;}else{_0x7c20df=0xce;}_0x211862[_0xb282('0x18')](_0x7c20df);return _0x211862[_0xb282('0x1e')](_0xb282('0x1f'),_0x13cea1+'-'+_0x350676+'/'+_0x5bc7c3)[_0xb282('0x1a')](_0x525cfa);}return null;};}function patchUpdates(_0x492d20){return function(_0x52e305){try{jsonpatch[_0xb282('0x20')](_0x52e305,_0x492d20,!![]);}catch(_0x2cdeb1){return BPromise['reject'](_0x2cdeb1);}return _0x52e305[_0xb282('0x21')]();};}function saveUpdates(_0x34b6c7,_0x2e3928){return function(_0x438dbe){if(_0x438dbe){return _0x438dbe[_0xb282('0x22')](_0x34b6c7)['then'](function(_0x1de407){return _0x1de407;});}return null;};}function removeEntity(_0x16a656,_0x1f3e12){return function(_0x4b79d7){if(_0x4b79d7){return _0x4b79d7[_0xb282('0x23')]()[_0xb282('0x24')](function(){_0x16a656[_0xb282('0x18')](0xcc)[_0xb282('0x19')]();});}};}function handleEntityNotFound(_0x680095,_0x56645f){return function(_0x4d624f){if(!_0x4d624f){_0x680095[_0xb282('0x17')](0x194);}return _0x4d624f;};}function handleError(_0x3c7f1f,_0x4934f0){_0x4934f0=_0x4934f0||0x1f4;return function(_0x5e828e){logger[_0xb282('0x25')](_0x5e828e[_0xb282('0x26')]);if(_0x5e828e[_0xb282('0x27')]){delete _0x5e828e[_0xb282('0x27')];}_0x3c7f1f[_0xb282('0x18')](_0x4934f0)[_0xb282('0x28')](_0x5e828e);};}exports['index']=function(_0xa0d7fb,_0x42015c){var _0x50bd73={},_0x22d895={},_0x38a1f8={'count':0x0,'rows':[]};var _0x2a4491=db[_0xb282('0x29')]['rawAttributes'];_0x22d895[_0xb282('0x2a')]=_[_0xb282('0x2b')](_0x2a4491);_0x22d895[_0xb282('0x2c')]=_[_0xb282('0x2b')](_0xa0d7fb[_0xb282('0x2c')]);_0x22d895[_0xb282('0x2d')]=_[_0xb282('0x2e')](_0x22d895['model'],_0x22d895[_0xb282('0x2c')]);_0x50bd73[_0xb282('0x2f')]=_[_0xb282('0x2e')](_0x22d895[_0xb282('0x2a')],qs[_0xb282('0x30')](_0xa0d7fb['query'][_0xb282('0x30')]));_0x50bd73['attributes']=_0x50bd73[_0xb282('0x2f')][_0xb282('0x31')]?_0x50bd73[_0xb282('0x2f')]:_0x22d895['model'];if(!_0xa0d7fb[_0xb282('0x2c')]['hasOwnProperty'](_0xb282('0x32'))){_0x50bd73[_0xb282('0x1d')]=qs[_0xb282('0x1d')](_0xa0d7fb[_0xb282('0x2c')][_0xb282('0x1d')]);_0x50bd73[_0xb282('0x1c')]=qs['offset'](_0xa0d7fb[_0xb282('0x2c')][_0xb282('0x1c')]);}_0x50bd73['order']=qs['sort'](_0xa0d7fb[_0xb282('0x2c')][_0xb282('0x33')]);_0x50bd73[_0xb282('0x34')]=qs['filters'](_['pick'](_0xa0d7fb['query'],_0x22d895[_0xb282('0x2d')]));if(_0xa0d7fb[_0xb282('0x2c')][_0xb282('0x35')]){_0x50bd73[_0xb282('0x34')]=_[_0xb282('0x36')](_0x50bd73[_0xb282('0x34')],{'$or':_[_0xb282('0x37')](_0x2a4491,function(_0x530194){if(_0x530194[_0xb282('0x38')]['key']!==_0xb282('0x39')){var _0x45f9d9={};_0x45f9d9[_0x530194[_0xb282('0x3a')]]={'$like':'%'+_0xa0d7fb['query'][_0xb282('0x35')]+'%'};return _0x45f9d9;}})});}_0x50bd73=_['merge']({},_0x50bd73,_0xa0d7fb[_0xb282('0x3b')]);var _0x13eb0f={'where':_0x50bd73[_0xb282('0x34')]};return db[_0xb282('0x29')]['count'](_0x13eb0f)['then'](function(_0x397fa1){_0x38a1f8[_0xb282('0x1b')]=_0x397fa1;if(_0xa0d7fb[_0xb282('0x2c')][_0xb282('0x3c')]){_0x50bd73['include']=[{'all':!![]}];}return db[_0xb282('0x29')]['findAll'](_0x50bd73);})[_0xb282('0x24')](function(_0x1a1b50){_0x38a1f8['rows']=_0x1a1b50;return _0x38a1f8;})[_0xb282('0x24')](respondWithFilteredResult(_0x42015c,_0x50bd73))[_0xb282('0x3d')](handleError(_0x42015c,null));};exports[_0xb282('0x3e')]=function(_0x2c988a,_0x3c1e6c){var _0x23c6b8={'raw':!![],'where':{'id':_0x2c988a[_0xb282('0x3f')]['id']}},_0x43e87e={};_0x43e87e[_0xb282('0x2a')]=_[_0xb282('0x2b')](db[_0xb282('0x29')][_0xb282('0x40')]);_0x43e87e[_0xb282('0x2c')]=_[_0xb282('0x2b')](_0x2c988a[_0xb282('0x2c')]);_0x43e87e[_0xb282('0x2d')]=_[_0xb282('0x2e')](_0x43e87e[_0xb282('0x2a')],_0x43e87e['query']);_0x23c6b8[_0xb282('0x2f')]=_['intersection'](_0x43e87e[_0xb282('0x2a')],qs[_0xb282('0x30')](_0x2c988a[_0xb282('0x2c')][_0xb282('0x30')]));_0x23c6b8[_0xb282('0x2f')]=_0x23c6b8[_0xb282('0x2f')]['length']?_0x23c6b8['attributes']:_0x43e87e[_0xb282('0x2a')];if(_0x2c988a['query'][_0xb282('0x3c')]){_0x23c6b8[_0xb282('0x41')]=[{'all':!![]}];}_0x23c6b8=_['merge']({},_0x23c6b8,_0x2c988a[_0xb282('0x3b')]);return db[_0xb282('0x29')][_0xb282('0x42')](_0x23c6b8)['then'](handleEntityNotFound(_0x3c1e6c,null))['then'](respondWithResult(_0x3c1e6c,null))[_0xb282('0x3d')](handleError(_0x3c1e6c,null));};exports['create']=function(_0x33700f,_0x1dd100){return db[_0xb282('0x29')][_0xb282('0x43')](_0x33700f[_0xb282('0x44')],{})[_0xb282('0x24')](respondWithResult(_0x1dd100,0xc9))['catch'](handleError(_0x1dd100,null));};exports[_0xb282('0x22')]=function(_0xb0cf81,_0x8e6fb8){if(_0xb0cf81['body']['id']){delete _0xb0cf81[_0xb282('0x44')]['id'];}return db['VtigerField'][_0xb282('0x42')]({'where':{'id':_0xb0cf81['params']['id']}})[_0xb282('0x24')](handleEntityNotFound(_0x8e6fb8,null))['then'](saveUpdates(_0xb0cf81['body'],null))['then'](respondWithResult(_0x8e6fb8,null))[_0xb282('0x3d')](handleError(_0x8e6fb8,null));};exports[_0xb282('0x23')]=function(_0x42d99f,_0x7a5aa4){return db['VtigerField']['find']({'where':{'id':_0x42d99f['params']['id']}})[_0xb282('0x24')](handleEntityNotFound(_0x7a5aa4,null))[_0xb282('0x24')](removeEntity(_0x7a5aa4,null))[_0xb282('0x3d')](handleError(_0x7a5aa4,null));};
\ No newline at end of file
index 67ca539..9310e80 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1755=['exports','int_vtiger_fields','vtiger_unique_index','idField','FieldId','util','../../config/logger','api','moment','rimraf','../../config/environment','./intVtigerField.attributes'];(function(_0x3cbfd3,_0x2b8965){var _0x4d41c1=function(_0x36c764){while(--_0x36c764){_0x3cbfd3['push'](_0x3cbfd3['shift']());}};_0x4d41c1(++_0x2b8965);}(_0x1755,0x65));var _0x5175=function(_0x538e2b,_0x42194d){_0x538e2b=_0x538e2b-0x0;var _0x2eb7e1=_0x1755[_0x538e2b];return _0x2eb7e1;};'use strict';var _=require('lodash');var util=require(_0x5175('0x0'));var logger=require(_0x5175('0x1'))(_0x5175('0x2'));var moment=require(_0x5175('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x5175('0x4'));var config=require(_0x5175('0x5'));var attributes=require(_0x5175('0x6'));module[_0x5175('0x7')]=function(_0x2ec957,_0x1c1494){return _0x2ec957['define']('VtigerField',attributes,{'tableName':_0x5175('0x8'),'paranoid':![],'indexes':[{'name':_0x5175('0x9'),'fields':[_0x5175('0xa'),_0x5175('0xb')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x846b=['define','VtigerField','int_vtiger_fields','vtiger_unique_index','idField','FieldId','lodash','bluebird','request-promise','./intVtigerField.attributes','exports'];(function(_0x13c0ef,_0x5e287e){var _0x2927af=function(_0x30997a){while(--_0x30997a){_0x13c0ef['push'](_0x13c0ef['shift']());}};_0x2927af(++_0x5e287e);}(_0x846b,0x13a));var _0xb846=function(_0x4f8bc7,_0x21dd77){_0x4f8bc7=_0x4f8bc7-0x0;var _0x37d6ab=_0x846b[_0x4f8bc7];return _0x37d6ab;};'use strict';var _=require(_0xb846('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0xb846('0x1'));var rp=require(_0xb846('0x2'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xb846('0x3'));module[_0xb846('0x4')]=function(_0x14ea38,_0x163ed0){return _0x14ea38[_0xb846('0x5')](_0xb846('0x6'),attributes,{'tableName':_0xb846('0x7'),'paranoid':![],'indexes':[{'name':_0xb846('0x8'),'fields':[_0xb846('0x9'),_0xb846('0xa')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index a7bd2ff..c8a98c7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7c53=['jayson/promise','client','request','info','debug','VtigerField,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','VtigerField,\x20%s,\x20%s','message','util','moment','../../mysqldb','../../config/utils','../../config/environment'];(function(_0x454c11,_0x47ef67){var _0x27d3da=function(_0x573eab){while(--_0x573eab){_0x454c11['push'](_0x454c11['shift']());}};_0x27d3da(++_0x47ef67);}(_0x7c53,0x1e8));var _0x37c5=function(_0x1af8b2,_0x33630b){_0x1af8b2=_0x1af8b2-0x0;var _0x26dd66=_0x7c53[_0x1af8b2];return _0x26dd66;};'use strict';var _=require('lodash');var util=require(_0x37c5('0x0'));var moment=require(_0x37c5('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x37c5('0x2'))['db'];var utils=require(_0x37c5('0x3'));var logger=require('../../config/logger')('rpc');var config=require(_0x37c5('0x4'));var jayson=require(_0x37c5('0x5'));var client=jayson[_0x37c5('0x6')]['http']({'port':0x232a});function respondWithRpcPromise(_0x5770e7,_0x23af7f,_0x2f1f40){return new BPromise(function(_0x475ded,_0x33bac8){return client[_0x37c5('0x7')](_0x5770e7,_0x2f1f40)['then'](function(_0x21be61){logger[_0x37c5('0x8')]('VtigerField,\x20%s,\x20%s',_0x23af7f,'request\x20sent');logger[_0x37c5('0x9')](_0x37c5('0xa'),_0x23af7f,_0x37c5('0xb'),JSON[_0x37c5('0xc')](_0x21be61));if(_0x21be61[_0x37c5('0xd')]){if(_0x21be61['error'][_0x37c5('0xe')]===0x1f4){logger[_0x37c5('0xd')](_0x37c5('0xf'),_0x23af7f,_0x21be61[_0x37c5('0xd')][_0x37c5('0x10')]);return _0x33bac8(_0x21be61[_0x37c5('0xd')][_0x37c5('0x10')]);}logger[_0x37c5('0xd')](_0x37c5('0xf'),_0x23af7f,_0x21be61[_0x37c5('0xd')][_0x37c5('0x10')]);return _0x475ded(_0x21be61['error'][_0x37c5('0x10')]);}else{logger[_0x37c5('0x8')](_0x37c5('0xf'),_0x23af7f,_0x37c5('0xb'));_0x475ded(_0x21be61['result'][_0x37c5('0x10')]);}})['catch'](function(_0x2e8b1f){logger['error'](_0x37c5('0xf'),_0x23af7f,_0x2e8b1f);_0x33bac8(_0x2e8b1f);});});}
\ No newline at end of file
+var _0xc5fd=['lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','VtigerField,\x20%s,\x20%s,\x20%s','stringify','error','VtigerField,\x20%s,\x20%s','message','result','catch'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0xc5fd,0xfa));var _0xdc5f=function(_0x432fca,_0xb0b1b5){_0x432fca=_0x432fca-0x0;var _0x3adba4=_0xc5fd[_0x432fca];return _0x3adba4;};'use strict';var _=require(_0xdc5f('0x0'));var util=require(_0xdc5f('0x1'));var moment=require(_0xdc5f('0x2'));var BPromise=require(_0xdc5f('0x3'));var rs=require(_0xdc5f('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xdc5f('0x5'))['db'];var utils=require(_0xdc5f('0x6'));var logger=require(_0xdc5f('0x7'))(_0xdc5f('0x8'));var config=require(_0xdc5f('0x9'));var jayson=require(_0xdc5f('0xa'));var client=jayson[_0xdc5f('0xb')][_0xdc5f('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x550e56,_0x2f1a4e,_0x53f838){return new BPromise(function(_0x48120e,_0x3436db){return client[_0xdc5f('0xd')](_0x550e56,_0x53f838)[_0xdc5f('0xe')](function(_0x5e22e9){logger[_0xdc5f('0xf')]('VtigerField,\x20%s,\x20%s',_0x2f1a4e,_0xdc5f('0x10'));logger[_0xdc5f('0x11')](_0xdc5f('0x12'),_0x2f1a4e,'request\x20sent',JSON[_0xdc5f('0x13')](_0x5e22e9));if(_0x5e22e9[_0xdc5f('0x14')]){if(_0x5e22e9[_0xdc5f('0x14')]['code']===0x1f4){logger[_0xdc5f('0x14')](_0xdc5f('0x15'),_0x2f1a4e,_0x5e22e9[_0xdc5f('0x14')][_0xdc5f('0x16')]);return _0x3436db(_0x5e22e9[_0xdc5f('0x14')]['message']);}logger[_0xdc5f('0x14')](_0xdc5f('0x15'),_0x2f1a4e,_0x5e22e9[_0xdc5f('0x14')][_0xdc5f('0x16')]);return _0x48120e(_0x5e22e9['error'][_0xdc5f('0x16')]);}else{logger['info']('VtigerField,\x20%s,\x20%s',_0x2f1a4e,_0xdc5f('0x10'));_0x48120e(_0x5e22e9[_0xdc5f('0x17')]['message']);}})[_0xdc5f('0x18')](function(_0x3c2796){logger[_0xdc5f('0x14')]('VtigerField,\x20%s,\x20%s',_0x2f1a4e,_0x3c2796);_0x3436db(_0x3c2796);});});}
\ No newline at end of file
index eecbf11..a639db7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2bb8=['/:id/fields','post','create','addConfiguration','/:id','update','exports','multer','util','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intZendeskAccount.controller','get','isAuthenticated','index','show','/:id/configurations','getConfigurations'];(function(_0x34bdf4,_0x4505f6){var _0x247569=function(_0x526061){while(--_0x526061){_0x34bdf4['push'](_0x34bdf4['shift']());}};_0x247569(++_0x4505f6);}(_0x2bb8,0x70));var _0x82bb=function(_0x5bd61b,_0x60f6ca){_0x5bd61b=_0x5bd61b-0x0;var _0x1d128f=_0x2bb8[_0x5bd61b];return _0x1d128f;};'use strict';var multer=require(_0x82bb('0x0'));var util=require(_0x82bb('0x1'));var path=require('path');var timeout=require(_0x82bb('0x2'));var express=require('express');var router=express[_0x82bb('0x3')]();var auth=require(_0x82bb('0x4'));var interaction=require(_0x82bb('0x5'));var config=require(_0x82bb('0x6'));var controller=require(_0x82bb('0x7'));router[_0x82bb('0x8')]('/',auth[_0x82bb('0x9')](),controller[_0x82bb('0xa')]);router[_0x82bb('0x8')]('/:id',auth[_0x82bb('0x9')](),controller[_0x82bb('0xb')]);router[_0x82bb('0x8')](_0x82bb('0xc'),auth['isAuthenticated'](),controller[_0x82bb('0xd')]);router['get'](_0x82bb('0xe'),auth[_0x82bb('0x9')](),controller['getFields']);router[_0x82bb('0xf')]('/',auth[_0x82bb('0x9')](),controller[_0x82bb('0x10')]);router['post'](_0x82bb('0xc'),auth[_0x82bb('0x9')](),controller[_0x82bb('0x11')]);router['put'](_0x82bb('0x12'),auth[_0x82bb('0x9')](),controller[_0x82bb('0x13')]);router['delete'](_0x82bb('0x12'),auth[_0x82bb('0x9')](),controller['destroy']);module[_0x82bb('0x14')]=router;
\ No newline at end of file
+var _0x6ec4=['getFields','post','/:id/configurations','addConfiguration','put','update','delete','destroy','multer','path','connect-timeout','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','/:id','show','getConfigurations','/:id/fields'];(function(_0x85bef0,_0x75b06b){var _0x580a62=function(_0x42f3c5){while(--_0x42f3c5){_0x85bef0['push'](_0x85bef0['shift']());}};_0x580a62(++_0x75b06b);}(_0x6ec4,0x138));var _0x46ec=function(_0xf1603b,_0x257c11){_0xf1603b=_0xf1603b-0x0;var _0x298fab=_0x6ec4[_0xf1603b];return _0x298fab;};'use strict';var multer=require(_0x46ec('0x0'));var util=require('util');var path=require(_0x46ec('0x1'));var timeout=require(_0x46ec('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x46ec('0x3'));var interaction=require(_0x46ec('0x4'));var config=require('../../config/environment');var controller=require('./intZendeskAccount.controller');router[_0x46ec('0x5')]('/',auth[_0x46ec('0x6')](),controller['index']);router[_0x46ec('0x5')](_0x46ec('0x7'),auth[_0x46ec('0x6')](),controller[_0x46ec('0x8')]);router[_0x46ec('0x5')]('/:id/configurations',auth[_0x46ec('0x6')](),controller[_0x46ec('0x9')]);router[_0x46ec('0x5')](_0x46ec('0xa'),auth['isAuthenticated'](),controller[_0x46ec('0xb')]);router[_0x46ec('0xc')]('/',auth[_0x46ec('0x6')](),controller['create']);router['post'](_0x46ec('0xd'),auth[_0x46ec('0x6')](),controller[_0x46ec('0xe')]);router[_0x46ec('0xf')](_0x46ec('0x7'),auth[_0x46ec('0x6')](),controller[_0x46ec('0x10')]);router[_0x46ec('0x11')](_0x46ec('0x7'),auth[_0x46ec('0x6')](),controller[_0x46ec('0x12')]);module['exports']=router;
\ No newline at end of file
index 59b82c7..1af0d57 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x518d=['remoteUri','ENUM','password','token','integrationTab','sequelize','exports','STRING','username'];(function(_0x81bc59,_0x41a6f4){var _0xf74eac=function(_0x3ec1a3){while(--_0x3ec1a3){_0x81bc59['push'](_0x81bc59['shift']());}};_0xf74eac(++_0x41a6f4);}(_0x518d,0x140));var _0xd518=function(_0x362f57,_0x69e05c){_0x362f57=_0x362f57-0x0;var _0x56eb50=_0x518d[_0x362f57];return _0x56eb50;};'use strict';var Sequelize=require(_0xd518('0x0'));module[_0xd518('0x1')]={'name':{'type':Sequelize[_0xd518('0x2')]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0xd518('0x2')],'unique':_0xd518('0x3')},'password':{'type':Sequelize['STRING']},'token':{'type':Sequelize[_0xd518('0x2')]},'remoteUri':{'type':Sequelize[_0xd518('0x2')],'unique':_0xd518('0x4')},'authType':{'type':Sequelize[_0xd518('0x5')](_0xd518('0x6'),_0xd518('0x7')),'defaultValue':_0xd518('0x6')},'serverUrl':{'type':Sequelize[_0xd518('0x2')]},'type':{'type':Sequelize[_0xd518('0x5')](_0xd518('0x8'),'newTab'),'defaultValue':_0xd518('0x8')}};
\ No newline at end of file
+var _0x85f7=['STRING','remoteUri','token','password','ENUM','integrationTab','newTab','sequelize','exports'];(function(_0x50a0c2,_0x4befab){var _0x5ebadd=function(_0x3a3342){while(--_0x3a3342){_0x50a0c2['push'](_0x50a0c2['shift']());}};_0x5ebadd(++_0x4befab);}(_0x85f7,0xa9));var _0x785f=function(_0x415240,_0x28e74e){_0x415240=_0x415240-0x0;var _0x22fef4=_0x85f7[_0x415240];return _0x22fef4;};'use strict';var Sequelize=require(_0x785f('0x0'));module[_0x785f('0x1')]={'name':{'type':Sequelize[_0x785f('0x2')]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0x785f('0x2')],'unique':'username'},'password':{'type':Sequelize[_0x785f('0x2')]},'token':{'type':Sequelize[_0x785f('0x2')]},'remoteUri':{'type':Sequelize[_0x785f('0x2')],'unique':_0x785f('0x3')},'authType':{'type':Sequelize['ENUM']('password',_0x785f('0x4')),'defaultValue':_0x785f('0x5')},'serverUrl':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0x785f('0x6')](_0x785f('0x7'),_0x785f('0x8')),'defaultValue':'integrationTab'}};
\ No newline at end of file
index 32047a4..a4c0b06 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0d9b=['where','merge','map','type','key','field','include','rows','show','length','includeAll','create','update','body','find','params','findOne','ZendeskConfiguration','options','getConfigurations','addConfiguration','AccountId','Subjects','getSubjects','Descriptions','getDescriptions','ZendeskField','getFields','password','authType','remoteUri','slice','substring','format','%s/%s','ticket_fields','headers','%s:%s','username','toString','base64','token','Basic\x20%s','Sequelize','ValidationError','Unknown\x20authentication\x20type','subject','position','system_field_options','custom_field_options','statusCode','getFields,\x20%s,\x20%s,\x20%s','send','Wrong\x20credentials','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/environment','../../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','debug','ZendeskAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','sendStatus','status','json','count','offset','Content-Range','apply','reject','save','destroy','stack','name','index','ZendeskAccount','rawAttributes','keys','query','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','pick','filter'];(function(_0x1d07d9,_0xba43c8){var _0x39928f=function(_0x48da54){while(--_0x48da54){_0x1d07d9['push'](_0x1d07d9['shift']());}};_0x39928f(++_0xba43c8);}(_0x0d9b,0x1a4));var _0xb0d9=function(_0x2430a4,_0x58f802){_0x2430a4=_0x2430a4-0x0;var _0x38db23=_0x0d9b[_0x2430a4];return _0x38db23;};'use strict';var pdf=require(_0xb0d9('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xb0d9('0x1'));var zipdir=require(_0xb0d9('0x2'));var jsonpatch=require(_0xb0d9('0x3'));var rp=require(_0xb0d9('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xb0d9('0x5'));var util=require(_0xb0d9('0x6'));var path=require('path');var sox=require(_0xb0d9('0x7'));var csv=require(_0xb0d9('0x8'));var ejs=require(_0xb0d9('0x9'));var fs=require('fs');var _=require(_0xb0d9('0xa'));var squel=require(_0xb0d9('0xb'));var crypto=require(_0xb0d9('0xc'));var jsforce=require(_0xb0d9('0xd'));var deskjs=require(_0xb0d9('0xe'));var toCsv=require(_0xb0d9('0x8'));var querystring=require(_0xb0d9('0xf'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xb0d9('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xb0d9('0x11'));var logger=require(_0xb0d9('0x12'))('api');var utils=require('../../config/utils');var config=require(_0xb0d9('0x13'));var db=require(_0xb0d9('0x14'))['db'];var integrations=require(_0xb0d9('0x15'));var jayson=require(_0xb0d9('0x16'));var client=jayson[_0xb0d9('0x17')]['http']({'port':0x232a});function checkPasswordPattern(_0x281a6d,_0x4e43a1,_0x30b209){if(_0x30b209){var _0x239a1d=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x239a1d[_0xb0d9('0x18')](_0x4e43a1)){return _0x281a6d;}else{throw new Error(_0xb0d9('0x19'));}}else{return _0x281a6d;}}function respondWithRpcPromise(_0x251f27,_0x12c6f9,_0x596e99,_0x408050){return new BPromise(function(_0x2e4a91,_0x309f49){var _0x52e660=_0x408050||client;return _0x52e660[_0xb0d9('0x1a')](_0x251f27,_0x596e99)[_0xb0d9('0x1b')](function(_0x3e7bb8){logger[_0xb0d9('0x1c')](_0xb0d9('0x1d'),_0x12c6f9,'request\x20sent');logger[_0xb0d9('0x1e')](_0xb0d9('0x1f'),_0x12c6f9,_0xb0d9('0x20'),JSON[_0xb0d9('0x21')](_0x3e7bb8));if(_0x3e7bb8[_0xb0d9('0x22')]){if(_0x3e7bb8[_0xb0d9('0x22')][_0xb0d9('0x23')]===0x1f4){logger['error']('ZendeskAccount,\x20%s,\x20%s',_0x12c6f9,_0x3e7bb8['error'][_0xb0d9('0x24')]);return _0x309f49(_0x3e7bb8[_0xb0d9('0x22')][_0xb0d9('0x24')]);}logger[_0xb0d9('0x22')](_0xb0d9('0x1d'),_0x12c6f9,_0x3e7bb8[_0xb0d9('0x22')][_0xb0d9('0x24')]);return _0x2e4a91(_0x3e7bb8[_0xb0d9('0x22')][_0xb0d9('0x24')]);}else{logger[_0xb0d9('0x1c')](_0xb0d9('0x1d'),_0x12c6f9,'request\x20sent');_0x2e4a91(_0x3e7bb8[_0xb0d9('0x25')][_0xb0d9('0x24')]);}})[_0xb0d9('0x26')](function(_0x58053f){logger[_0xb0d9('0x22')]('ZendeskAccount,\x20%s,\x20%s',_0x12c6f9,_0x58053f);_0x309f49(_0x58053f);});});}function respondWithStatusCode(_0x985da8,_0x23ee88){_0x23ee88=_0x23ee88||0xcc;return function(_0x16f99e){if(_0x16f99e){return _0x985da8[_0xb0d9('0x27')](_0x23ee88);}return _0x985da8[_0xb0d9('0x28')](_0x23ee88)['end']();};}function respondWithResult(_0x590fad,_0x1cf5f7){_0x1cf5f7=_0x1cf5f7||0xc8;return function(_0x4aefa3){if(_0x4aefa3){return _0x590fad[_0xb0d9('0x28')](_0x1cf5f7)[_0xb0d9('0x29')](_0x4aefa3);}};}function respondWithFilteredResult(_0x5d36eb,_0x22aa9e){return function(_0x381f10){if(_0x381f10){var _0x57f859=_0x381f10[_0xb0d9('0x2a')],_0x847ef5=_0x22aa9e[_0xb0d9('0x2b')],_0x45b61c=_0x22aa9e[_0xb0d9('0x2b')]+_0x22aa9e['limit'],_0x1bc41b;if(_0x45b61c>=_0x57f859){_0x45b61c=_0x57f859;_0x1bc41b=0xc8;}else{_0x1bc41b=0xce;}_0x5d36eb['status'](_0x1bc41b);return _0x5d36eb['set'](_0xb0d9('0x2c'),_0x847ef5+'-'+_0x45b61c+'/'+_0x57f859)[_0xb0d9('0x29')](_0x381f10);}return null;};}function patchUpdates(_0x36701f){return function(_0x36a00d){try{jsonpatch[_0xb0d9('0x2d')](_0x36a00d,_0x36701f,!![]);}catch(_0x4cdf6d){return BPromise[_0xb0d9('0x2e')](_0x4cdf6d);}return _0x36a00d[_0xb0d9('0x2f')]();};}function saveUpdates(_0x40665f,_0xd3c9f3){return function(_0x1baea6){if(_0x1baea6){return _0x1baea6['update'](_0x40665f)[_0xb0d9('0x1b')](function(_0x59e867){return _0x59e867;});}return null;};}function removeEntity(_0x580a2e,_0x398784){return function(_0x33a5c5){if(_0x33a5c5){return _0x33a5c5[_0xb0d9('0x30')]()[_0xb0d9('0x1b')](function(){_0x580a2e[_0xb0d9('0x28')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5deb6e,_0x530334){return function(_0x37f47c){if(!_0x37f47c){_0x5deb6e[_0xb0d9('0x27')](0x194);}return _0x37f47c;};}function handleError(_0x1f073b,_0x2663db){_0x2663db=_0x2663db||0x1f4;return function(_0x5f3e35){logger['error'](_0x5f3e35[_0xb0d9('0x31')]);if(_0x5f3e35['name']){delete _0x5f3e35[_0xb0d9('0x32')];}_0x1f073b[_0xb0d9('0x28')](_0x2663db)['send'](_0x5f3e35);};}exports[_0xb0d9('0x33')]=function(_0x5820dd,_0x3c8d7b){var _0x4b83f1={},_0x5dc914={},_0x1d09d3={'count':0x0,'rows':[]};var _0x533877=db[_0xb0d9('0x34')][_0xb0d9('0x35')];_0x5dc914['model']=_[_0xb0d9('0x36')](_0x533877);_0x5dc914[_0xb0d9('0x37')]=_[_0xb0d9('0x36')](_0x5820dd[_0xb0d9('0x37')]);_0x5dc914[_0xb0d9('0x38')]=_[_0xb0d9('0x39')](_0x5dc914[_0xb0d9('0x3a')],_0x5dc914[_0xb0d9('0x37')]);_0x4b83f1[_0xb0d9('0x3b')]=_['intersection'](_0x5dc914['model'],qs['fields'](_0x5820dd[_0xb0d9('0x37')][_0xb0d9('0x3c')]));_0x4b83f1[_0xb0d9('0x3b')]=_0x4b83f1[_0xb0d9('0x3b')]['length']?_0x4b83f1['attributes']:_0x5dc914[_0xb0d9('0x3a')];if(!_0x5820dd['query'][_0xb0d9('0x3d')](_0xb0d9('0x3e'))){_0x4b83f1[_0xb0d9('0x3f')]=qs[_0xb0d9('0x3f')](_0x5820dd[_0xb0d9('0x37')][_0xb0d9('0x3f')]);_0x4b83f1[_0xb0d9('0x2b')]=qs[_0xb0d9('0x2b')](_0x5820dd['query'][_0xb0d9('0x2b')]);}_0x4b83f1[_0xb0d9('0x40')]=qs[_0xb0d9('0x41')](_0x5820dd[_0xb0d9('0x37')][_0xb0d9('0x41')]);_0x4b83f1['where']=qs['filters'](_[_0xb0d9('0x42')](_0x5820dd[_0xb0d9('0x37')],_0x5dc914['filters']));if(_0x5820dd['query'][_0xb0d9('0x43')]){_0x4b83f1[_0xb0d9('0x44')]=_[_0xb0d9('0x45')](_0x4b83f1['where'],{'$or':_[_0xb0d9('0x46')](_0x533877,function(_0x3973b5){if(_0x3973b5[_0xb0d9('0x47')][_0xb0d9('0x48')]!=='VIRTUAL'){var _0x570183={};_0x570183[_0x3973b5[_0xb0d9('0x49')]]={'$like':'%'+_0x5820dd['query'][_0xb0d9('0x43')]+'%'};return _0x570183;}})});}_0x4b83f1=_[_0xb0d9('0x45')]({},_0x4b83f1,_0x5820dd['options']);var _0x14fa57={'where':_0x4b83f1[_0xb0d9('0x44')]};return db[_0xb0d9('0x34')]['count'](_0x14fa57)[_0xb0d9('0x1b')](function(_0x2b7c91){_0x1d09d3['count']=_0x2b7c91;if(_0x5820dd['query']['includeAll']){_0x4b83f1[_0xb0d9('0x4a')]=[{'all':!![]}];}return db[_0xb0d9('0x34')]['findAll'](_0x4b83f1);})[_0xb0d9('0x1b')](function(_0x143682){_0x1d09d3[_0xb0d9('0x4b')]=_0x143682;return _0x1d09d3;})['then'](respondWithFilteredResult(_0x3c8d7b,_0x4b83f1))['catch'](handleError(_0x3c8d7b,null));};exports[_0xb0d9('0x4c')]=function(_0x499d6d,_0x52f476){var _0x134606={'raw':![],'where':{'id':_0x499d6d['params']['id']}},_0x227769={};_0x227769['model']=_[_0xb0d9('0x36')](db[_0xb0d9('0x34')][_0xb0d9('0x35')]);_0x227769[_0xb0d9('0x37')]=_[_0xb0d9('0x36')](_0x499d6d[_0xb0d9('0x37')]);_0x227769[_0xb0d9('0x38')]=_[_0xb0d9('0x39')](_0x227769[_0xb0d9('0x3a')],_0x227769[_0xb0d9('0x37')]);_0x134606[_0xb0d9('0x3b')]=_[_0xb0d9('0x39')](_0x227769[_0xb0d9('0x3a')],qs[_0xb0d9('0x3c')](_0x499d6d[_0xb0d9('0x37')][_0xb0d9('0x3c')]));_0x134606[_0xb0d9('0x3b')]=_0x134606[_0xb0d9('0x3b')][_0xb0d9('0x4d')]?_0x134606[_0xb0d9('0x3b')]:_0x227769[_0xb0d9('0x3a')];if(_0x499d6d[_0xb0d9('0x37')][_0xb0d9('0x4e')]){_0x134606[_0xb0d9('0x4a')]=[{'all':!![]}];}_0x134606=_[_0xb0d9('0x45')]({},_0x134606,_0x499d6d['options']);return db[_0xb0d9('0x34')]['find'](_0x134606)[_0xb0d9('0x1b')](handleEntityNotFound(_0x52f476,null))[_0xb0d9('0x1b')](respondWithResult(_0x52f476,null))[_0xb0d9('0x26')](handleError(_0x52f476,null));};exports['create']=function(_0x434f6e,_0xef6763){return db['ZendeskAccount'][_0xb0d9('0x4f')](_0x434f6e['body'],{})[_0xb0d9('0x1b')](respondWithResult(_0xef6763,0xc9))['catch'](handleError(_0xef6763,null));};exports[_0xb0d9('0x50')]=function(_0x4b71ff,_0x4f746d){if(_0x4b71ff[_0xb0d9('0x51')]['id']){delete _0x4b71ff[_0xb0d9('0x51')]['id'];}return db[_0xb0d9('0x34')][_0xb0d9('0x52')]({'where':{'id':_0x4b71ff['params']['id']}})[_0xb0d9('0x1b')](handleEntityNotFound(_0x4f746d,null))[_0xb0d9('0x1b')](saveUpdates(_0x4b71ff[_0xb0d9('0x51')],null))[_0xb0d9('0x1b')](respondWithResult(_0x4f746d,null))['catch'](handleError(_0x4f746d,null));};exports[_0xb0d9('0x30')]=function(_0x57355a,_0x46688a){return db[_0xb0d9('0x34')][_0xb0d9('0x52')]({'where':{'id':_0x57355a[_0xb0d9('0x53')]['id']}})[_0xb0d9('0x1b')](handleEntityNotFound(_0x46688a,null))[_0xb0d9('0x1b')](removeEntity(_0x46688a,null))[_0xb0d9('0x26')](handleError(_0x46688a,null));};exports['getConfigurations']=function(_0x45145e,_0x393ffd,_0x5931dc){var _0x2e65ac={};var _0x17208e={};var _0x3aff98;var _0x2dd1da;return db['ZendeskAccount'][_0xb0d9('0x54')]({'where':{'id':_0x45145e[_0xb0d9('0x53')]['id']}})['then'](handleEntityNotFound(_0x393ffd,null))[_0xb0d9('0x1b')](function(_0xaad9ce){if(_0xaad9ce){_0x3aff98=_0xaad9ce;_0x17208e['model']=_[_0xb0d9('0x36')](db[_0xb0d9('0x55')][_0xb0d9('0x35')]);_0x17208e[_0xb0d9('0x37')]=_['keys'](_0x45145e['query']);_0x17208e[_0xb0d9('0x38')]=_[_0xb0d9('0x39')](_0x17208e[_0xb0d9('0x3a')],_0x17208e[_0xb0d9('0x37')]);_0x2e65ac[_0xb0d9('0x3b')]=_[_0xb0d9('0x39')](_0x17208e[_0xb0d9('0x3a')],qs[_0xb0d9('0x3c')](_0x45145e[_0xb0d9('0x37')][_0xb0d9('0x3c')]));_0x2e65ac[_0xb0d9('0x3b')]=_0x2e65ac['attributes'][_0xb0d9('0x4d')]?_0x2e65ac[_0xb0d9('0x3b')]:_0x17208e['model'];_0x2e65ac[_0xb0d9('0x40')]=qs['sort'](_0x45145e[_0xb0d9('0x37')][_0xb0d9('0x41')]);_0x2e65ac[_0xb0d9('0x44')]=qs[_0xb0d9('0x38')](_[_0xb0d9('0x42')](_0x45145e['query'],_0x17208e[_0xb0d9('0x38')]));if(_0x45145e[_0xb0d9('0x37')]['filter']){_0x2e65ac[_0xb0d9('0x44')]=_['merge'](_0x2e65ac[_0xb0d9('0x44')],{'$or':_[_0xb0d9('0x46')](_0x2e65ac[_0xb0d9('0x3b')],function(_0x2a7145){var _0x91c58f={};_0x91c58f[_0x2a7145]={'$like':'%'+_0x45145e[_0xb0d9('0x37')][_0xb0d9('0x43')]+'%'};return _0x91c58f;})});}_0x2e65ac=_[_0xb0d9('0x45')]({},_0x2e65ac,_0x45145e[_0xb0d9('0x56')]);return _0x3aff98[_0xb0d9('0x57')](_0x2e65ac);}})[_0xb0d9('0x1b')](function(_0x293dc8){if(_0x293dc8){_0x2dd1da=_0x293dc8[_0xb0d9('0x4d')];if(!_0x45145e['query']['hasOwnProperty']('nolimit')){_0x2e65ac[_0xb0d9('0x3f')]=qs['limit'](_0x45145e['query'][_0xb0d9('0x3f')]);_0x2e65ac[_0xb0d9('0x2b')]=qs[_0xb0d9('0x2b')](_0x45145e[_0xb0d9('0x37')][_0xb0d9('0x2b')]);}return _0x3aff98[_0xb0d9('0x57')](_0x2e65ac);}})[_0xb0d9('0x1b')](function(_0x586924){if(_0x586924){return _0x586924?{'count':_0x2dd1da,'rows':_0x586924}:null;}})[_0xb0d9('0x1b')](respondWithResult(_0x393ffd,null))[_0xb0d9('0x26')](handleError(_0x393ffd,null));};exports[_0xb0d9('0x58')]=function(_0x5bb285,_0x21b66f,_0x2e4e5e){if(_0x5bb285[_0xb0d9('0x51')]['id']){delete _0x5bb285[_0xb0d9('0x51')]['id'];}return db[_0xb0d9('0x34')][_0xb0d9('0x54')]({'where':{'id':_0x5bb285[_0xb0d9('0x53')]['id']}})['then'](handleEntityNotFound(_0x21b66f,null))[_0xb0d9('0x1b')](function(_0x48bbe9){if(_0x48bbe9){_0x5bb285[_0xb0d9('0x51')][_0xb0d9('0x59')]=_0x48bbe9['id'];_0x5bb285[_0xb0d9('0x51')][_0xb0d9('0x5a')]=integrations[_0xb0d9('0x5b')](_0x5bb285[_0xb0d9('0x51')]['channel'],_0x5bb285['body'][_0xb0d9('0x47')]);_0x5bb285[_0xb0d9('0x51')][_0xb0d9('0x5c')]=integrations[_0xb0d9('0x5d')](_0x5bb285['body']['channel'],_0x5bb285[_0xb0d9('0x51')][_0xb0d9('0x47')]);return db[_0xb0d9('0x55')][_0xb0d9('0x4f')](_0x5bb285[_0xb0d9('0x51')],{'include':[{'model':db['ZendeskField'],'as':'Subjects'},{'model':db[_0xb0d9('0x5e')],'as':'Descriptions'}]});}return null;})[_0xb0d9('0x1b')](respondWithResult(_0x21b66f,null))[_0xb0d9('0x26')](handleError(_0x21b66f,null));};exports[_0xb0d9('0x5f')]=function(_0x467300,_0x1083fd,_0x5d2fe1){var _0x311039='';return db[_0xb0d9('0x34')][_0xb0d9('0x54')]({'where':{'id':_0x467300['params']['id']},'attributes':['id','username',_0xb0d9('0x60'),'token',_0xb0d9('0x61'),_0xb0d9('0x62')]})[_0xb0d9('0x1b')](handleEntityNotFound(_0x1083fd,null))[_0xb0d9('0x1b')](function(_0x404f9b){if(_0x404f9b){_0x311039=_0x404f9b['remoteUri'];var _0x4894a5=_0x311039[_0xb0d9('0x63')](-0x1);if(_0x4894a5==='/'){_0x311039=_0x311039[_0xb0d9('0x64')](0x0,_0x311039['lastIndexOf'](_0x4894a5));}var _0x5b9060={'method':'GET','uri':util[_0xb0d9('0x65')](_0xb0d9('0x66'),_0x311039,_0xb0d9('0x67')),'json':!![]};switch(_0x404f9b[_0xb0d9('0x61')]){case _0xb0d9('0x60'):_0x5b9060[_0xb0d9('0x68')]={'Authorization':util['format']('Basic\x20%s',new Buffer(util[_0xb0d9('0x65')](_0xb0d9('0x69'),_0x404f9b[_0xb0d9('0x6a')],_0x404f9b[_0xb0d9('0x60')]))[_0xb0d9('0x6b')](_0xb0d9('0x6c')))};break;case _0xb0d9('0x6d'):_0x5b9060[_0xb0d9('0x68')]={'Authorization':util[_0xb0d9('0x65')](_0xb0d9('0x6e'),new Buffer(util[_0xb0d9('0x65')]('%s/token:%s',_0x404f9b[_0xb0d9('0x6a')],_0x404f9b[_0xb0d9('0x6d')]))[_0xb0d9('0x6b')]('base64'))};break;default:throw new db[(_0xb0d9('0x6f'))][(_0xb0d9('0x70'))](_0xb0d9('0x71'));}return rp(_0x5b9060);}})[_0xb0d9('0x1b')](function(_0x4b3c95){if(_0x4b3c95){var _0x128b54=[_0xb0d9('0x72'),'description','group','assignee'];_['remove'](_0x4b3c95[_0xb0d9('0x67')],function(_0x4acfcb){return _0x128b54['includes'](_0x4acfcb[_0xb0d9('0x47')]);});return{'count':_0x4b3c95[_0xb0d9('0x67')][_0xb0d9('0x4d')],'rows':_[_0xb0d9('0x46')](_0x4b3c95['ticket_fields'],function(_0x21123e){return{'id':_0x21123e['id'],'name':_0x21123e[_0xb0d9('0x73')]>0x7?_0x21123e['title']:_0x21123e['type'],'custom':_0x21123e['position']>0x7?!![]:![],'options':_0x21123e[_0xb0d9('0x74')]?_0x21123e[_0xb0d9('0x74')]:_0x21123e[_0xb0d9('0x75')]?_0x21123e[_0xb0d9('0x75')]:[]};})};}})['then'](respondWithResult(_0x1083fd,null))['catch'](function(_0x5678e8){var _0x188391=_0x467300[_0xb0d9('0x37')]['test']?0x1f4:_0x5678e8[_0xb0d9('0x76')]||0x1f4;logger[_0xb0d9('0x22')](_0xb0d9('0x77'),_0xb0d9('0x5f'),_0x188391,JSON[_0xb0d9('0x21')](_0x5678e8));delete _0x5678e8[_0xb0d9('0x32')];if(_0x188391===0x191){_0x188391=0x190;}_0x1083fd[_0xb0d9('0x28')](_0x188391)[_0xb0d9('0x78')](_0x467300[_0xb0d9('0x37')]['test']?{'message':_0xb0d9('0x79'),'statusCode':_0x5678e8[_0xb0d9('0x76')]}:_0x5678e8);});};
\ No newline at end of file
+var _0xbb25=['sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','name','send','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','filters','filter','merge','map','type','VIRTUAL','field','ZendeskAccount','count','includeAll','include','findAll','catch','show','options','find','create','body','params','getConfigurations','rawAttributes','pick','addConfiguration','findOne','AccountId','getSubjects','channel','Descriptions','getDescriptions','ZendeskConfiguration','ZendeskField','Subjects','password','token','authType','remoteUri','slice','lastIndexOf','format','%s/%s','ticket_fields','%s:%s','username','toString','headers','Basic\x20%s','%s/token:%s','ValidationError','Unknown\x20authentication\x20type','subject','assignee','includes','position','system_field_options','custom_field_options','statusCode','getFields,\x20%s,\x20%s,\x20%s','getFields','Wrong\x20credentials','html-pdf','eml-format','moment','mustache','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/utils','../../config/environment','../../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','request\x20sent','debug','ZendeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','ZendeskAccount,\x20%s,\x20%s','message','result'];(function(_0x102d1c,_0x36f1e4){var _0x5b9be5=function(_0x1c827a){while(--_0x1c827a){_0x102d1c['push'](_0x102d1c['shift']());}};_0x5b9be5(++_0x36f1e4);}(_0xbb25,0x1bd));var _0x5bb2=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xbb25[_0x14add3];return _0x4a174f;};'use strict';var pdf=require(_0x5bb2('0x0'));var emlformat=require(_0x5bb2('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x5bb2('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x5bb2('0x3'));var util=require('util');var path=require('path');var sox=require(_0x5bb2('0x4'));var csv=require(_0x5bb2('0x5'));var ejs=require(_0x5bb2('0x6'));var fs=require('fs');var _=require(_0x5bb2('0x7'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x5bb2('0x8'));var deskjs=require(_0x5bb2('0x9'));var toCsv=require(_0x5bb2('0x5'));var querystring=require(_0x5bb2('0xa'));var Papa=require(_0x5bb2('0xb'));var Redis=require(_0x5bb2('0xc'));var authService=require(_0x5bb2('0xd'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x5bb2('0xe'));var logger=require('../../config/logger')('api');var utils=require(_0x5bb2('0xf'));var config=require(_0x5bb2('0x10'));var db=require(_0x5bb2('0x11'))['db'];var integrations=require(_0x5bb2('0x12'));var jayson=require(_0x5bb2('0x13'));var client=jayson[_0x5bb2('0x14')]['http']({'port':0x232a});function checkPasswordPattern(_0x1b720d,_0x900fa,_0x3beef8){if(_0x3beef8){var _0x568a27=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x568a27[_0x5bb2('0x15')](_0x900fa)){return _0x1b720d;}else{throw new Error(_0x5bb2('0x16'));}}else{return _0x1b720d;}}function respondWithRpcPromise(_0x4f5c2d,_0x1519a6,_0xe71203,_0x345d50){return new BPromise(function(_0x264ab6,_0xa0a3ba){var _0x24cde5=_0x345d50||client;return _0x24cde5[_0x5bb2('0x17')](_0x4f5c2d,_0xe71203)[_0x5bb2('0x18')](function(_0x2ffbdb){logger[_0x5bb2('0x19')]('ZendeskAccount,\x20%s,\x20%s',_0x1519a6,_0x5bb2('0x1a'));logger[_0x5bb2('0x1b')](_0x5bb2('0x1c'),_0x1519a6,'request\x20sent',JSON[_0x5bb2('0x1d')](_0x2ffbdb));if(_0x2ffbdb[_0x5bb2('0x1e')]){if(_0x2ffbdb[_0x5bb2('0x1e')][_0x5bb2('0x1f')]===0x1f4){logger[_0x5bb2('0x1e')](_0x5bb2('0x20'),_0x1519a6,_0x2ffbdb[_0x5bb2('0x1e')][_0x5bb2('0x21')]);return _0xa0a3ba(_0x2ffbdb[_0x5bb2('0x1e')]['message']);}logger[_0x5bb2('0x1e')](_0x5bb2('0x20'),_0x1519a6,_0x2ffbdb['error'][_0x5bb2('0x21')]);return _0x264ab6(_0x2ffbdb[_0x5bb2('0x1e')][_0x5bb2('0x21')]);}else{logger['info'](_0x5bb2('0x20'),_0x1519a6,'request\x20sent');_0x264ab6(_0x2ffbdb[_0x5bb2('0x22')]['message']);}})['catch'](function(_0x4943c9){logger['error']('ZendeskAccount,\x20%s,\x20%s',_0x1519a6,_0x4943c9);_0xa0a3ba(_0x4943c9);});});}function respondWithStatusCode(_0x1e22df,_0xe4c2b){_0xe4c2b=_0xe4c2b||0xcc;return function(_0x5c4c9f){if(_0x5c4c9f){return _0x1e22df[_0x5bb2('0x23')](_0xe4c2b);}return _0x1e22df[_0x5bb2('0x24')](_0xe4c2b)[_0x5bb2('0x25')]();};}function respondWithResult(_0x1a6b07,_0x3faacd){_0x3faacd=_0x3faacd||0xc8;return function(_0xed23ec){if(_0xed23ec){return _0x1a6b07['status'](_0x3faacd)[_0x5bb2('0x26')](_0xed23ec);}};}function respondWithFilteredResult(_0x132022,_0x35ea07){return function(_0xe37f20){if(_0xe37f20){var _0x2b02d6=_0xe37f20['count'],_0x1213c1=_0x35ea07[_0x5bb2('0x27')],_0x1e07d8=_0x35ea07[_0x5bb2('0x27')]+_0x35ea07[_0x5bb2('0x28')],_0x1565f1;if(_0x1e07d8>=_0x2b02d6){_0x1e07d8=_0x2b02d6;_0x1565f1=0xc8;}else{_0x1565f1=0xce;}_0x132022['status'](_0x1565f1);return _0x132022[_0x5bb2('0x29')](_0x5bb2('0x2a'),_0x1213c1+'-'+_0x1e07d8+'/'+_0x2b02d6)[_0x5bb2('0x26')](_0xe37f20);}return null;};}function patchUpdates(_0x2396ca){return function(_0x30c80c){try{jsonpatch[_0x5bb2('0x2b')](_0x30c80c,_0x2396ca,!![]);}catch(_0x125cd5){return BPromise[_0x5bb2('0x2c')](_0x125cd5);}return _0x30c80c[_0x5bb2('0x2d')]();};}function saveUpdates(_0x4a30d5,_0x4d0e7e){return function(_0x2681a5){if(_0x2681a5){return _0x2681a5[_0x5bb2('0x2e')](_0x4a30d5)['then'](function(_0x5787c1){return _0x5787c1;});}return null;};}function removeEntity(_0x18f0db,_0x4cbf46){return function(_0x546939){if(_0x546939){return _0x546939[_0x5bb2('0x2f')]()['then'](function(){_0x18f0db[_0x5bb2('0x24')](0xcc)['end']();});}};}function handleEntityNotFound(_0x51f77d,_0x24620e){return function(_0x3a5e32){if(!_0x3a5e32){_0x51f77d['sendStatus'](0x194);}return _0x3a5e32;};}function handleError(_0x4ea071,_0x3cf436){_0x3cf436=_0x3cf436||0x1f4;return function(_0x1702ac){logger[_0x5bb2('0x1e')](_0x1702ac['stack']);if(_0x1702ac['name']){delete _0x1702ac[_0x5bb2('0x30')];}_0x4ea071['status'](_0x3cf436)[_0x5bb2('0x31')](_0x1702ac);};}exports['index']=function(_0x1f57a1,_0x4444f6){var _0x23b9fc={},_0x4d060e={},_0x291420={'count':0x0,'rows':[]};var _0x229788=db['ZendeskAccount']['rawAttributes'];_0x4d060e[_0x5bb2('0x32')]=_[_0x5bb2('0x33')](_0x229788);_0x4d060e[_0x5bb2('0x34')]=_[_0x5bb2('0x33')](_0x1f57a1['query']);_0x4d060e['filters']=_[_0x5bb2('0x35')](_0x4d060e[_0x5bb2('0x32')],_0x4d060e[_0x5bb2('0x34')]);_0x23b9fc[_0x5bb2('0x36')]=_[_0x5bb2('0x35')](_0x4d060e[_0x5bb2('0x32')],qs[_0x5bb2('0x37')](_0x1f57a1['query'][_0x5bb2('0x37')]));_0x23b9fc[_0x5bb2('0x36')]=_0x23b9fc[_0x5bb2('0x36')][_0x5bb2('0x38')]?_0x23b9fc[_0x5bb2('0x36')]:_0x4d060e[_0x5bb2('0x32')];if(!_0x1f57a1[_0x5bb2('0x34')][_0x5bb2('0x39')]('nolimit')){_0x23b9fc[_0x5bb2('0x28')]=qs[_0x5bb2('0x28')](_0x1f57a1[_0x5bb2('0x34')][_0x5bb2('0x28')]);_0x23b9fc['offset']=qs[_0x5bb2('0x27')](_0x1f57a1[_0x5bb2('0x34')][_0x5bb2('0x27')]);}_0x23b9fc[_0x5bb2('0x3a')]=qs['sort'](_0x1f57a1[_0x5bb2('0x34')][_0x5bb2('0x3b')]);_0x23b9fc[_0x5bb2('0x3c')]=qs[_0x5bb2('0x3d')](_['pick'](_0x1f57a1[_0x5bb2('0x34')],_0x4d060e[_0x5bb2('0x3d')]));if(_0x1f57a1[_0x5bb2('0x34')][_0x5bb2('0x3e')]){_0x23b9fc[_0x5bb2('0x3c')]=_[_0x5bb2('0x3f')](_0x23b9fc['where'],{'$or':_[_0x5bb2('0x40')](_0x229788,function(_0x26de29){if(_0x26de29[_0x5bb2('0x41')]['key']!==_0x5bb2('0x42')){var _0x38b835={};_0x38b835[_0x26de29[_0x5bb2('0x43')]]={'$like':'%'+_0x1f57a1[_0x5bb2('0x34')][_0x5bb2('0x3e')]+'%'};return _0x38b835;}})});}_0x23b9fc=_[_0x5bb2('0x3f')]({},_0x23b9fc,_0x1f57a1['options']);var _0x54ab47={'where':_0x23b9fc[_0x5bb2('0x3c')]};return db[_0x5bb2('0x44')][_0x5bb2('0x45')](_0x54ab47)['then'](function(_0xdfd43a){_0x291420[_0x5bb2('0x45')]=_0xdfd43a;if(_0x1f57a1['query'][_0x5bb2('0x46')]){_0x23b9fc[_0x5bb2('0x47')]=[{'all':!![]}];}return db['ZendeskAccount'][_0x5bb2('0x48')](_0x23b9fc);})[_0x5bb2('0x18')](function(_0x3d8a4b){_0x291420['rows']=_0x3d8a4b;return _0x291420;})[_0x5bb2('0x18')](respondWithFilteredResult(_0x4444f6,_0x23b9fc))[_0x5bb2('0x49')](handleError(_0x4444f6,null));};exports[_0x5bb2('0x4a')]=function(_0xc85391,_0x388240){var _0x2e474a={'raw':![],'where':{'id':_0xc85391['params']['id']}},_0x21870b={};_0x21870b['model']=_[_0x5bb2('0x33')](db[_0x5bb2('0x44')]['rawAttributes']);_0x21870b[_0x5bb2('0x34')]=_[_0x5bb2('0x33')](_0xc85391['query']);_0x21870b['filters']=_['intersection'](_0x21870b[_0x5bb2('0x32')],_0x21870b[_0x5bb2('0x34')]);_0x2e474a[_0x5bb2('0x36')]=_[_0x5bb2('0x35')](_0x21870b['model'],qs[_0x5bb2('0x37')](_0xc85391[_0x5bb2('0x34')][_0x5bb2('0x37')]));_0x2e474a[_0x5bb2('0x36')]=_0x2e474a[_0x5bb2('0x36')][_0x5bb2('0x38')]?_0x2e474a[_0x5bb2('0x36')]:_0x21870b[_0x5bb2('0x32')];if(_0xc85391[_0x5bb2('0x34')][_0x5bb2('0x46')]){_0x2e474a[_0x5bb2('0x47')]=[{'all':!![]}];}_0x2e474a=_[_0x5bb2('0x3f')]({},_0x2e474a,_0xc85391[_0x5bb2('0x4b')]);return db[_0x5bb2('0x44')][_0x5bb2('0x4c')](_0x2e474a)[_0x5bb2('0x18')](handleEntityNotFound(_0x388240,null))[_0x5bb2('0x18')](respondWithResult(_0x388240,null))['catch'](handleError(_0x388240,null));};exports[_0x5bb2('0x4d')]=function(_0x1857f6,_0x463e8c){return db[_0x5bb2('0x44')][_0x5bb2('0x4d')](_0x1857f6['body'],{})[_0x5bb2('0x18')](respondWithResult(_0x463e8c,0xc9))[_0x5bb2('0x49')](handleError(_0x463e8c,null));};exports['update']=function(_0x182eab,_0x28ba33){if(_0x182eab['body']['id']){delete _0x182eab[_0x5bb2('0x4e')]['id'];}return db[_0x5bb2('0x44')]['find']({'where':{'id':_0x182eab[_0x5bb2('0x4f')]['id']}})[_0x5bb2('0x18')](handleEntityNotFound(_0x28ba33,null))['then'](saveUpdates(_0x182eab[_0x5bb2('0x4e')],null))[_0x5bb2('0x18')](respondWithResult(_0x28ba33,null))[_0x5bb2('0x49')](handleError(_0x28ba33,null));};exports[_0x5bb2('0x2f')]=function(_0x4a905d,_0x30540f){return db[_0x5bb2('0x44')][_0x5bb2('0x4c')]({'where':{'id':_0x4a905d[_0x5bb2('0x4f')]['id']}})['then'](handleEntityNotFound(_0x30540f,null))[_0x5bb2('0x18')](removeEntity(_0x30540f,null))[_0x5bb2('0x49')](handleError(_0x30540f,null));};exports[_0x5bb2('0x50')]=function(_0x251604,_0x5b8227,_0x172675){var _0x225475={};var _0x31fbf1={};var _0x5c75f2;var _0x1d2849;return db[_0x5bb2('0x44')]['findOne']({'where':{'id':_0x251604[_0x5bb2('0x4f')]['id']}})['then'](handleEntityNotFound(_0x5b8227,null))['then'](function(_0x494ab8){if(_0x494ab8){_0x5c75f2=_0x494ab8;_0x31fbf1[_0x5bb2('0x32')]=_[_0x5bb2('0x33')](db['ZendeskConfiguration'][_0x5bb2('0x51')]);_0x31fbf1[_0x5bb2('0x34')]=_[_0x5bb2('0x33')](_0x251604['query']);_0x31fbf1[_0x5bb2('0x3d')]=_[_0x5bb2('0x35')](_0x31fbf1[_0x5bb2('0x32')],_0x31fbf1['query']);_0x225475[_0x5bb2('0x36')]=_[_0x5bb2('0x35')](_0x31fbf1[_0x5bb2('0x32')],qs['fields'](_0x251604[_0x5bb2('0x34')][_0x5bb2('0x37')]));_0x225475[_0x5bb2('0x36')]=_0x225475[_0x5bb2('0x36')][_0x5bb2('0x38')]?_0x225475['attributes']:_0x31fbf1['model'];_0x225475[_0x5bb2('0x3a')]=qs['sort'](_0x251604[_0x5bb2('0x34')][_0x5bb2('0x3b')]);_0x225475[_0x5bb2('0x3c')]=qs['filters'](_[_0x5bb2('0x52')](_0x251604[_0x5bb2('0x34')],_0x31fbf1[_0x5bb2('0x3d')]));if(_0x251604[_0x5bb2('0x34')][_0x5bb2('0x3e')]){_0x225475[_0x5bb2('0x3c')]=_[_0x5bb2('0x3f')](_0x225475[_0x5bb2('0x3c')],{'$or':_[_0x5bb2('0x40')](_0x225475[_0x5bb2('0x36')],function(_0xa377c2){var _0x59e041={};_0x59e041[_0xa377c2]={'$like':'%'+_0x251604[_0x5bb2('0x34')][_0x5bb2('0x3e')]+'%'};return _0x59e041;})});}_0x225475=_['merge']({},_0x225475,_0x251604[_0x5bb2('0x4b')]);return _0x5c75f2['getConfigurations'](_0x225475);}})[_0x5bb2('0x18')](function(_0x4bc91d){if(_0x4bc91d){_0x1d2849=_0x4bc91d[_0x5bb2('0x38')];if(!_0x251604['query'][_0x5bb2('0x39')]('nolimit')){_0x225475[_0x5bb2('0x28')]=qs['limit'](_0x251604[_0x5bb2('0x34')][_0x5bb2('0x28')]);_0x225475[_0x5bb2('0x27')]=qs['offset'](_0x251604[_0x5bb2('0x34')][_0x5bb2('0x27')]);}return _0x5c75f2[_0x5bb2('0x50')](_0x225475);}})[_0x5bb2('0x18')](function(_0x3b48f2){if(_0x3b48f2){return _0x3b48f2?{'count':_0x1d2849,'rows':_0x3b48f2}:null;}})[_0x5bb2('0x18')](respondWithResult(_0x5b8227,null))[_0x5bb2('0x49')](handleError(_0x5b8227,null));};exports[_0x5bb2('0x53')]=function(_0x2e7cea,_0x5ca489,_0x39e23b){if(_0x2e7cea['body']['id']){delete _0x2e7cea['body']['id'];}return db[_0x5bb2('0x44')][_0x5bb2('0x54')]({'where':{'id':_0x2e7cea[_0x5bb2('0x4f')]['id']}})['then'](handleEntityNotFound(_0x5ca489,null))['then'](function(_0x282dd5){if(_0x282dd5){_0x2e7cea[_0x5bb2('0x4e')][_0x5bb2('0x55')]=_0x282dd5['id'];_0x2e7cea[_0x5bb2('0x4e')]['Subjects']=integrations[_0x5bb2('0x56')](_0x2e7cea['body'][_0x5bb2('0x57')],_0x2e7cea[_0x5bb2('0x4e')][_0x5bb2('0x41')]);_0x2e7cea[_0x5bb2('0x4e')][_0x5bb2('0x58')]=integrations[_0x5bb2('0x59')](_0x2e7cea[_0x5bb2('0x4e')][_0x5bb2('0x57')],_0x2e7cea[_0x5bb2('0x4e')][_0x5bb2('0x41')]);return db[_0x5bb2('0x5a')][_0x5bb2('0x4d')](_0x2e7cea[_0x5bb2('0x4e')],{'include':[{'model':db[_0x5bb2('0x5b')],'as':_0x5bb2('0x5c')},{'model':db['ZendeskField'],'as':_0x5bb2('0x58')}]});}return null;})[_0x5bb2('0x18')](respondWithResult(_0x5ca489,null))[_0x5bb2('0x49')](handleError(_0x5ca489,null));};exports['getFields']=function(_0x99dcc6,_0x239c11,_0x82f5a0){var _0x1852d8='';return db[_0x5bb2('0x44')][_0x5bb2('0x54')]({'where':{'id':_0x99dcc6[_0x5bb2('0x4f')]['id']},'attributes':['id','username',_0x5bb2('0x5d'),_0x5bb2('0x5e'),_0x5bb2('0x5f'),_0x5bb2('0x60')]})[_0x5bb2('0x18')](handleEntityNotFound(_0x239c11,null))[_0x5bb2('0x18')](function(_0x51f24b){if(_0x51f24b){_0x1852d8=_0x51f24b[_0x5bb2('0x60')];var _0x4cbe88=_0x1852d8[_0x5bb2('0x61')](-0x1);if(_0x4cbe88==='/'){_0x1852d8=_0x1852d8['substring'](0x0,_0x1852d8[_0x5bb2('0x62')](_0x4cbe88));}var _0x106e8d={'method':'GET','uri':util[_0x5bb2('0x63')](_0x5bb2('0x64'),_0x1852d8,_0x5bb2('0x65')),'json':!![]};switch(_0x51f24b[_0x5bb2('0x5f')]){case'password':_0x106e8d['headers']={'Authorization':util[_0x5bb2('0x63')]('Basic\x20%s',new Buffer(util[_0x5bb2('0x63')](_0x5bb2('0x66'),_0x51f24b[_0x5bb2('0x67')],_0x51f24b['password']))[_0x5bb2('0x68')]('base64'))};break;case _0x5bb2('0x5e'):_0x106e8d[_0x5bb2('0x69')]={'Authorization':util[_0x5bb2('0x63')](_0x5bb2('0x6a'),new Buffer(util[_0x5bb2('0x63')](_0x5bb2('0x6b'),_0x51f24b[_0x5bb2('0x67')],_0x51f24b[_0x5bb2('0x5e')]))[_0x5bb2('0x68')]('base64'))};break;default:throw new db['Sequelize'][(_0x5bb2('0x6c'))](_0x5bb2('0x6d'));}return rp(_0x106e8d);}})['then'](function(_0x339908){if(_0x339908){var _0x17557f=[_0x5bb2('0x6e'),'description','group',_0x5bb2('0x6f')];_['remove'](_0x339908[_0x5bb2('0x65')],function(_0x2e1730){return _0x17557f[_0x5bb2('0x70')](_0x2e1730[_0x5bb2('0x41')]);});return{'count':_0x339908['ticket_fields'][_0x5bb2('0x38')],'rows':_['map'](_0x339908[_0x5bb2('0x65')],function(_0x121e75){return{'id':_0x121e75['id'],'name':_0x121e75[_0x5bb2('0x71')]>0x7?_0x121e75['title']:_0x121e75[_0x5bb2('0x41')],'custom':_0x121e75['position']>0x7?!![]:![],'options':_0x121e75['system_field_options']?_0x121e75[_0x5bb2('0x72')]:_0x121e75['custom_field_options']?_0x121e75[_0x5bb2('0x73')]:[]};})};}})[_0x5bb2('0x18')](respondWithResult(_0x239c11,null))['catch'](function(_0x5d2077){var _0x5238d6=_0x99dcc6[_0x5bb2('0x34')][_0x5bb2('0x15')]?0x1f4:_0x5d2077[_0x5bb2('0x74')]||0x1f4;logger[_0x5bb2('0x1e')](_0x5bb2('0x75'),_0x5bb2('0x76'),_0x5238d6,JSON[_0x5bb2('0x1d')](_0x5d2077));delete _0x5d2077[_0x5bb2('0x30')];if(_0x5238d6===0x191){_0x5238d6=0x190;}_0x239c11[_0x5bb2('0x24')](_0x5238d6)[_0x5bb2('0x31')](_0x99dcc6[_0x5bb2('0x34')][_0x5bb2('0x15')]?{'message':_0x5bb2('0x77'),'statusCode':_0x5d2077['statusCode']}:_0x5d2077);});};
\ No newline at end of file
index 3873e45..f0355bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x38f2=['path','rimraf','../../config/environment','./intZendeskAccount.attributes','../../components/integrations/configuration','define','ZendeskAccount','int_zendesk_accounts','lodash','util','../../config/logger','moment','bluebird','request-promise'];(function(_0x4c2df3,_0x126be0){var _0x7100c2=function(_0x1403c6){while(--_0x1403c6){_0x4c2df3['push'](_0x4c2df3['shift']());}};_0x7100c2(++_0x126be0);}(_0x38f2,0xbe));var _0x238f=function(_0x26aa74,_0x5d2566){_0x26aa74=_0x26aa74-0x0;var _0x2edbd2=_0x38f2[_0x26aa74];return _0x2edbd2;};'use strict';var _=require(_0x238f('0x0'));var util=require(_0x238f('0x1'));var logger=require(_0x238f('0x2'))('api');var moment=require(_0x238f('0x3'));var BPromise=require(_0x238f('0x4'));var rp=require(_0x238f('0x5'));var fs=require('fs');var path=require(_0x238f('0x6'));var rimraf=require(_0x238f('0x7'));var config=require(_0x238f('0x8'));var attributes=require(_0x238f('0x9'));var integrations=require(_0x238f('0xa'));module['exports']=function(_0x2b15d1,_0x54db80){return _0x2b15d1[_0x238f('0xb')](_0x238f('0xc'),attributes,{'tableName':_0x238f('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8463=['bluebird','request-promise','rimraf','../../config/environment','../../components/integrations/configuration','exports','define','int_zendesk_accounts','lodash','util','api','moment'];(function(_0x25bc04,_0x57ad29){var _0xff4bf6=function(_0x145337){while(--_0x145337){_0x25bc04['push'](_0x25bc04['shift']());}};_0xff4bf6(++_0x57ad29);}(_0x8463,0x140));var _0x3846=function(_0x5c1148,_0x25df3b){_0x5c1148=_0x5c1148-0x0;var _0x50fe76=_0x8463[_0x5c1148];return _0x50fe76;};'use strict';var _=require(_0x3846('0x0'));var util=require(_0x3846('0x1'));var logger=require('../../config/logger')(_0x3846('0x2'));var moment=require(_0x3846('0x3'));var BPromise=require(_0x3846('0x4'));var rp=require(_0x3846('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x3846('0x6'));var config=require(_0x3846('0x7'));var attributes=require('./intZendeskAccount.attributes');var integrations=require(_0x3846('0x8'));module[_0x3846('0x9')]=function(_0x3c176b,_0x41f063){return _0x3c176b[_0x3846('0xa')]('ZendeskAccount',attributes,{'tableName':_0x3846('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ca50d82..6475adc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3d7a=['message','result','catch','GetZendeskAccount','findAll','options','raw','where','attributes','limit','include','model','ZendeskAccount','find','map','ShowZendeskAccount','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','http','then','info','debug','ZendeskAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','ZendeskAccount,\x20%s,\x20%s'];(function(_0x38c0c7,_0x2b2384){var _0x5ee3c2=function(_0x1f400b){while(--_0x1f400b){_0x38c0c7['push'](_0x38c0c7['shift']());}};_0x5ee3c2(++_0x2b2384);}(_0x3d7a,0x1b4));var _0xa3d7=function(_0x10e840,_0x5b3935){_0x10e840=_0x10e840-0x0;var _0x405caa=_0x3d7a[_0x10e840];return _0x405caa;};'use strict';var _=require(_0xa3d7('0x0'));var util=require(_0xa3d7('0x1'));var moment=require('moment');var BPromise=require(_0xa3d7('0x2'));var rs=require(_0xa3d7('0x3'));var fs=require('fs');var Redis=require(_0xa3d7('0x4'));var db=require(_0xa3d7('0x5'))['db'];var utils=require(_0xa3d7('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0xa3d7('0x7'));var jayson=require(_0xa3d7('0x8'));var client=jayson['client'][_0xa3d7('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4a9ed8,_0x2e102c,_0x2266c9){return new BPromise(function(_0x4c3dae,_0x31c731){return client['request'](_0x4a9ed8,_0x2266c9)[_0xa3d7('0xa')](function(_0x48889c){logger[_0xa3d7('0xb')]('ZendeskAccount,\x20%s,\x20%s',_0x2e102c,'request\x20sent');logger[_0xa3d7('0xc')](_0xa3d7('0xd'),_0x2e102c,_0xa3d7('0xe'),JSON[_0xa3d7('0xf')](_0x48889c));if(_0x48889c[_0xa3d7('0x10')]){if(_0x48889c[_0xa3d7('0x10')][_0xa3d7('0x11')]===0x1f4){logger[_0xa3d7('0x10')](_0xa3d7('0x12'),_0x2e102c,_0x48889c[_0xa3d7('0x10')][_0xa3d7('0x13')]);return _0x31c731(_0x48889c[_0xa3d7('0x10')][_0xa3d7('0x13')]);}logger[_0xa3d7('0x10')]('ZendeskAccount,\x20%s,\x20%s',_0x2e102c,_0x48889c[_0xa3d7('0x10')][_0xa3d7('0x13')]);return _0x4c3dae(_0x48889c['error']['message']);}else{logger[_0xa3d7('0xb')]('ZendeskAccount,\x20%s,\x20%s',_0x2e102c,'request\x20sent');_0x4c3dae(_0x48889c[_0xa3d7('0x14')]['message']);}})[_0xa3d7('0x15')](function(_0x2a0125){logger['error']('ZendeskAccount,\x20%s,\x20%s',_0x2e102c,_0x2a0125);_0x31c731(_0x2a0125);});});}exports[_0xa3d7('0x16')]=function(_0x27517c){var _0x1f43b8=this;return new Promise(function(_0xcc129d,_0x3cda30){return db['ZendeskAccount'][_0xa3d7('0x17')]({'raw':_0x27517c['options']?_0x27517c[_0xa3d7('0x18')][_0xa3d7('0x19')]===undefined?!![]:![]:!![],'where':_0x27517c[_0xa3d7('0x18')]?_0x27517c['options'][_0xa3d7('0x1a')]||null:null,'attributes':_0x27517c['options']?_0x27517c['options'][_0xa3d7('0x1b')]||null:null,'limit':_0x27517c[_0xa3d7('0x18')]?_0x27517c[_0xa3d7('0x18')][_0xa3d7('0x1c')]||null:null,'include':_0x27517c[_0xa3d7('0x18')]?_0x27517c[_0xa3d7('0x18')][_0xa3d7('0x1d')]?_['map'](_0x27517c[_0xa3d7('0x18')][_0xa3d7('0x1d')],function(_0x3efa95){return{'model':db[_0x3efa95[_0xa3d7('0x1e')]],'as':_0x3efa95['as'],'attributes':_0x3efa95['attributes'],'include':_0x3efa95[_0xa3d7('0x1d')]?_['map'](_0x3efa95[_0xa3d7('0x1d')],function(_0x4db60a){return{'model':db[_0x4db60a[_0xa3d7('0x1e')]],'as':_0x4db60a['as'],'attributes':_0x4db60a[_0xa3d7('0x1b')],'include':_0x4db60a['include']?_['map'](_0x4db60a[_0xa3d7('0x1d')],function(_0x26a5a0){return{'model':db[_0x26a5a0[_0xa3d7('0x1e')]],'as':_0x26a5a0['as'],'attributes':_0x26a5a0[_0xa3d7('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xa3d7('0xa')](function(_0x481c3d){logger[_0xa3d7('0xb')](_0xa3d7('0x16'),_0x27517c);logger['debug']('GetZendeskAccount',_0x27517c,JSON[_0xa3d7('0xf')](_0x481c3d));_0xcc129d(_0x481c3d);})[_0xa3d7('0x15')](function(_0x1bb819){logger['error'](_0xa3d7('0x16'),_0x1bb819[_0xa3d7('0x13')],_0x27517c);_0x3cda30(_0x1f43b8[_0xa3d7('0x10')](0x1f4,_0x1bb819['message']));});});};exports['ShowZendeskAccount']=function(_0x246085){var _0x19d049=this;return new Promise(function(_0x2c5429,_0x2d8460){return db[_0xa3d7('0x1f')][_0xa3d7('0x20')]({'raw':_0x246085[_0xa3d7('0x18')]?_0x246085[_0xa3d7('0x18')][_0xa3d7('0x19')]===undefined?!![]:![]:!![],'where':_0x246085['options']?_0x246085[_0xa3d7('0x18')][_0xa3d7('0x1a')]||null:null,'attributes':_0x246085[_0xa3d7('0x18')]?_0x246085['options'][_0xa3d7('0x1b')]||null:null,'include':_0x246085['options']?_0x246085[_0xa3d7('0x18')][_0xa3d7('0x1d')]?_[_0xa3d7('0x21')](_0x246085[_0xa3d7('0x18')]['include'],function(_0x3ff5c9){return{'model':db[_0x3ff5c9[_0xa3d7('0x1e')]],'as':_0x3ff5c9['as'],'attributes':_0x3ff5c9[_0xa3d7('0x1b')],'include':_0x3ff5c9[_0xa3d7('0x1d')]?_['map'](_0x3ff5c9[_0xa3d7('0x1d')],function(_0x28b0da){return{'model':db[_0x28b0da[_0xa3d7('0x1e')]],'as':_0x28b0da['as'],'attributes':_0x28b0da[_0xa3d7('0x1b')],'include':_0x28b0da[_0xa3d7('0x1d')]?_[_0xa3d7('0x21')](_0x28b0da['include'],function(_0x2b784f){return{'model':db[_0x2b784f[_0xa3d7('0x1e')]],'as':_0x2b784f['as'],'attributes':_0x2b784f[_0xa3d7('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xa3d7('0xa')](function(_0x393547){logger[_0xa3d7('0xb')](_0xa3d7('0x22'),_0x246085);logger[_0xa3d7('0xc')](_0xa3d7('0x22'),_0x246085,JSON[_0xa3d7('0xf')](_0x393547));_0x2c5429(_0x393547);})[_0xa3d7('0x15')](function(_0x543758){logger[_0xa3d7('0x10')](_0xa3d7('0x22'),_0x543758[_0xa3d7('0x13')],_0x246085);_0x2d8460(_0x19d049[_0xa3d7('0x10')](0x1f4,_0x543758['message']));});});};
\ No newline at end of file
+var _0x72bd=['find','ShowZendeskAccount','catch','lodash','moment','bluebird','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','request','then','ZendeskAccount,\x20%s,\x20%s','request\x20sent','debug','ZendeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','GetZendeskAccount','ZendeskAccount','findAll','raw','where','options','attributes','map','include','model'];(function(_0x19372d,_0x12aa2a){var _0x324b8a=function(_0x4d5d1e){while(--_0x4d5d1e){_0x19372d['push'](_0x19372d['shift']());}};_0x324b8a(++_0x12aa2a);}(_0x72bd,0xcf));var _0xd72b=function(_0x13d07a,_0x41efc3){_0x13d07a=_0x13d07a-0x0;var _0x5ee0ee=_0x72bd[_0x13d07a];return _0x5ee0ee;};'use strict';var _=require(_0xd72b('0x0'));var util=require('util');var moment=require(_0xd72b('0x1'));var BPromise=require(_0xd72b('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0xd72b('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0xd72b('0x4'))(_0xd72b('0x5'));var config=require(_0xd72b('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xd72b('0x7')][_0xd72b('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x379ec8,_0x326393,_0x2bc0ce){return new BPromise(function(_0x1604d8,_0x288bd8){return client[_0xd72b('0x9')](_0x379ec8,_0x2bc0ce)[_0xd72b('0xa')](function(_0x5675ad){logger['info'](_0xd72b('0xb'),_0x326393,_0xd72b('0xc'));logger[_0xd72b('0xd')](_0xd72b('0xe'),_0x326393,'request\x20sent',JSON[_0xd72b('0xf')](_0x5675ad));if(_0x5675ad[_0xd72b('0x10')]){if(_0x5675ad[_0xd72b('0x10')][_0xd72b('0x11')]===0x1f4){logger[_0xd72b('0x10')](_0xd72b('0xb'),_0x326393,_0x5675ad['error'][_0xd72b('0x12')]);return _0x288bd8(_0x5675ad['error'][_0xd72b('0x12')]);}logger[_0xd72b('0x10')]('ZendeskAccount,\x20%s,\x20%s',_0x326393,_0x5675ad['error']['message']);return _0x1604d8(_0x5675ad[_0xd72b('0x10')]['message']);}else{logger[_0xd72b('0x13')]('ZendeskAccount,\x20%s,\x20%s',_0x326393,_0xd72b('0xc'));_0x1604d8(_0x5675ad[_0xd72b('0x14')][_0xd72b('0x12')]);}})['catch'](function(_0x4ce17d){logger['error'](_0xd72b('0xb'),_0x326393,_0x4ce17d);_0x288bd8(_0x4ce17d);});});}exports[_0xd72b('0x15')]=function(_0x255656){var _0x2507f8=this;return new Promise(function(_0x4e41a7,_0x544450){return db[_0xd72b('0x16')][_0xd72b('0x17')]({'raw':_0x255656['options']?_0x255656['options'][_0xd72b('0x18')]===undefined?!![]:![]:!![],'where':_0x255656['options']?_0x255656['options'][_0xd72b('0x19')]||null:null,'attributes':_0x255656[_0xd72b('0x1a')]?_0x255656[_0xd72b('0x1a')][_0xd72b('0x1b')]||null:null,'limit':_0x255656['options']?_0x255656[_0xd72b('0x1a')]['limit']||null:null,'include':_0x255656[_0xd72b('0x1a')]?_0x255656[_0xd72b('0x1a')]['include']?_[_0xd72b('0x1c')](_0x255656[_0xd72b('0x1a')][_0xd72b('0x1d')],function(_0x342968){return{'model':db[_0x342968[_0xd72b('0x1e')]],'as':_0x342968['as'],'attributes':_0x342968[_0xd72b('0x1b')],'include':_0x342968[_0xd72b('0x1d')]?_[_0xd72b('0x1c')](_0x342968[_0xd72b('0x1d')],function(_0x124eed){return{'model':db[_0x124eed[_0xd72b('0x1e')]],'as':_0x124eed['as'],'attributes':_0x124eed[_0xd72b('0x1b')],'include':_0x124eed[_0xd72b('0x1d')]?_[_0xd72b('0x1c')](_0x124eed[_0xd72b('0x1d')],function(_0x2dd9a6){return{'model':db[_0x2dd9a6['model']],'as':_0x2dd9a6['as'],'attributes':_0x2dd9a6['attributes']};}):[]};}):[]};}):[]:[]})[_0xd72b('0xa')](function(_0x2e0ab4){logger['info']('GetZendeskAccount',_0x255656);logger['debug'](_0xd72b('0x15'),_0x255656,JSON[_0xd72b('0xf')](_0x2e0ab4));_0x4e41a7(_0x2e0ab4);})['catch'](function(_0x4467b6){logger[_0xd72b('0x10')](_0xd72b('0x15'),_0x4467b6[_0xd72b('0x12')],_0x255656);_0x544450(_0x2507f8[_0xd72b('0x10')](0x1f4,_0x4467b6[_0xd72b('0x12')]));});});};exports['ShowZendeskAccount']=function(_0x2d7b1f){var _0x2f39ed=this;return new Promise(function(_0x5f2c48,_0x4fb166){return db[_0xd72b('0x16')][_0xd72b('0x1f')]({'raw':_0x2d7b1f['options']?_0x2d7b1f[_0xd72b('0x1a')][_0xd72b('0x18')]===undefined?!![]:![]:!![],'where':_0x2d7b1f[_0xd72b('0x1a')]?_0x2d7b1f[_0xd72b('0x1a')][_0xd72b('0x19')]||null:null,'attributes':_0x2d7b1f[_0xd72b('0x1a')]?_0x2d7b1f['options'][_0xd72b('0x1b')]||null:null,'include':_0x2d7b1f['options']?_0x2d7b1f[_0xd72b('0x1a')]['include']?_[_0xd72b('0x1c')](_0x2d7b1f['options'][_0xd72b('0x1d')],function(_0x109ef8){return{'model':db[_0x109ef8[_0xd72b('0x1e')]],'as':_0x109ef8['as'],'attributes':_0x109ef8[_0xd72b('0x1b')],'include':_0x109ef8[_0xd72b('0x1d')]?_[_0xd72b('0x1c')](_0x109ef8[_0xd72b('0x1d')],function(_0x236abe){return{'model':db[_0x236abe[_0xd72b('0x1e')]],'as':_0x236abe['as'],'attributes':_0x236abe[_0xd72b('0x1b')],'include':_0x236abe['include']?_[_0xd72b('0x1c')](_0x236abe[_0xd72b('0x1d')],function(_0x3f64e2){return{'model':db[_0x3f64e2[_0xd72b('0x1e')]],'as':_0x3f64e2['as'],'attributes':_0x3f64e2[_0xd72b('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xd72b('0xa')](function(_0x491858){logger['info'](_0xd72b('0x20'),_0x2d7b1f);logger[_0xd72b('0xd')](_0xd72b('0x20'),_0x2d7b1f,JSON[_0xd72b('0xf')](_0x491858));_0x5f2c48(_0x491858);})[_0xd72b('0x21')](function(_0x5bfee9){logger[_0xd72b('0x10')](_0xd72b('0x20'),_0x5bfee9[_0xd72b('0x12')],_0x2d7b1f);_0x4fb166(_0x2f39ed[_0xd72b('0x10')](0x1f4,_0x5bfee9[_0xd72b('0x12')]));});});};
\ No newline at end of file
index 34cedce..ebdb84b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xddb1=['put','delete','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','./intZendeskConfiguration.controller','isAuthenticated','get','/:id','show','/:id/subjects','getSubjects','/:id/descriptions','/:id/tags','create','post'];(function(_0x45ff66,_0x3ffb2a){var _0x2be3a3=function(_0x4d51c6){while(--_0x4d51c6){_0x45ff66['push'](_0x45ff66['shift']());}};_0x2be3a3(++_0x3ffb2a);}(_0xddb1,0x1a8));var _0x1ddb=function(_0x22dc90,_0x9665a3){_0x22dc90=_0x22dc90-0x0;var _0x43895e=_0xddb1[_0x22dc90];return _0x43895e;};'use strict';var multer=require(_0x1ddb('0x0'));var util=require(_0x1ddb('0x1'));var path=require(_0x1ddb('0x2'));var timeout=require(_0x1ddb('0x3'));var express=require('express');var router=express[_0x1ddb('0x4')]();var auth=require(_0x1ddb('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x1ddb('0x6'));router['get']('/',auth[_0x1ddb('0x7')](),controller['index']);router[_0x1ddb('0x8')](_0x1ddb('0x9'),auth[_0x1ddb('0x7')](),controller[_0x1ddb('0xa')]);router[_0x1ddb('0x8')]('/:id/fields',auth[_0x1ddb('0x7')](),controller['getFields']);router['get'](_0x1ddb('0xb'),auth[_0x1ddb('0x7')](),controller[_0x1ddb('0xc')]);router[_0x1ddb('0x8')](_0x1ddb('0xd'),auth['isAuthenticated'](),controller['getDescriptions']);router[_0x1ddb('0x8')](_0x1ddb('0xe'),auth[_0x1ddb('0x7')](),controller['getTags']);router['post']('/',auth[_0x1ddb('0x7')](),controller[_0x1ddb('0xf')]);router[_0x1ddb('0x10')]('/:id/tags',auth[_0x1ddb('0x7')](),controller['setTags']);router[_0x1ddb('0x11')](_0x1ddb('0x9'),auth[_0x1ddb('0x7')](),controller['update']);router[_0x1ddb('0x12')](_0x1ddb('0x9'),auth[_0x1ddb('0x7')](),controller[_0x1ddb('0x13')]);module[_0x1ddb('0x14')]=router;
\ No newline at end of file
+var _0x891b=['path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intZendeskConfiguration.controller','get','isAuthenticated','index','show','/:id/fields','getFields','/:id/subjects','getDescriptions','post','put','/:id','update','destroy','exports','multer','util'];(function(_0x447725,_0x49753b){var _0x399167=function(_0x1e47d9){while(--_0x1e47d9){_0x447725['push'](_0x447725['shift']());}};_0x399167(++_0x49753b);}(_0x891b,0xa6));var _0xb891=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x891b[_0x20a584];return _0x4b41a8;};'use strict';var multer=require(_0xb891('0x0'));var util=require(_0xb891('0x1'));var path=require(_0xb891('0x2'));var timeout=require(_0xb891('0x3'));var express=require(_0xb891('0x4'));var router=express[_0xb891('0x5')]();var auth=require(_0xb891('0x6'));var interaction=require(_0xb891('0x7'));var config=require(_0xb891('0x8'));var controller=require(_0xb891('0x9'));router[_0xb891('0xa')]('/',auth[_0xb891('0xb')](),controller[_0xb891('0xc')]);router[_0xb891('0xa')]('/:id',auth[_0xb891('0xb')](),controller[_0xb891('0xd')]);router['get'](_0xb891('0xe'),auth['isAuthenticated'](),controller[_0xb891('0xf')]);router[_0xb891('0xa')](_0xb891('0x10'),auth[_0xb891('0xb')](),controller['getSubjects']);router['get']('/:id/descriptions',auth[_0xb891('0xb')](),controller[_0xb891('0x11')]);router[_0xb891('0xa')]('/:id/tags',auth[_0xb891('0xb')](),controller['getTags']);router[_0xb891('0x12')]('/',auth[_0xb891('0xb')](),controller['create']);router['post']('/:id/tags',auth[_0xb891('0xb')](),controller['setTags']);router[_0xb891('0x13')](_0xb891('0x14'),auth[_0xb891('0xb')](),controller[_0xb891('0x15')]);router['delete'](_0xb891('0x14'),auth[_0xb891('0xb')](),controller[_0xb891('0x16')]);module[_0xb891('0x17')]=router;
\ No newline at end of file
index 21270f6..7cb1f65 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe0f3=['sequelize'];(function(_0x67f95e,_0x3ca797){var _0x538f5a=function(_0xc919e9){while(--_0xc919e9){_0x67f95e['push'](_0x67f95e['shift']());}};_0x538f5a(++_0x3ca797);}(_0xe0f3,0x121));var _0x3e0f=function(_0x5114f5,_0x579892){_0x5114f5=_0x5114f5-0x0;var _0x264699=_0xe0f3[_0x5114f5];return _0x264699;};'use strict';var Sequelize=require(_0x3e0f('0x0'));module['exports']={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x7067=['STRING','sequelize','exports'];(function(_0xc988e4,_0x4e3b13){var _0x2c9d58=function(_0x516967){while(--_0x516967){_0xc988e4['push'](_0xc988e4['shift']());}};_0x2c9d58(++_0x4e3b13);}(_0x7067,0x199));var _0x7706=function(_0x58fe7e,_0x17a4af){_0x58fe7e=_0x58fe7e-0x0;var _0x5e2a5b=_0x7067[_0x58fe7e];return _0x5e2a5b;};'use strict';var Sequelize=require(_0x7706('0x0'));module[_0x7706('0x1')]={'name':{'type':Sequelize[_0x7706('0x2')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 9adbb3a..a84c337 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x899d=['params','find','create','body','destroy','findOne','ZendeskField','order','map','hasOwnProperty','getFields','getSubjects','getDescriptions','getTags','Tag','setTags','ids','html-pdf','rimraf','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../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','info','ZendeskConfiguration,\x20%s,\x20%s','debug','request\x20sent','stringify','error','message','result','catch','status','end','json','offset','Content-Range','apply','save','sendStatus','stack','name','send','index','ZendeskConfiguration','rawAttributes','query','keys','intersection','model','attributes','fields','length','nolimit','limit','sort','where','pick','filters','merge','type','key','VIRTUAL','filter','options','count','includeAll','include','findAll','rows'];(function(_0x257488,_0x1e32d3){var _0x31bbe0=function(_0x559383){while(--_0x559383){_0x257488['push'](_0x257488['shift']());}};_0x31bbe0(++_0x1e32d3);}(_0x899d,0x1d3));var _0xd899=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x899d[_0x42cae2];return _0x5f256f;};'use strict';var pdf=require(_0xd899('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xd899('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xd899('0x2'));var BPromise=require(_0xd899('0x3'));var Mustache=require(_0xd899('0x4'));var util=require(_0xd899('0x5'));var path=require(_0xd899('0x6'));var sox=require('sox');var csv=require(_0xd899('0x7'));var ejs=require(_0xd899('0x8'));var fs=require('fs');var _=require(_0xd899('0x9'));var squel=require(_0xd899('0xa'));var crypto=require(_0xd899('0xb'));var jsforce=require(_0xd899('0xc'));var deskjs=require(_0xd899('0xd'));var toCsv=require(_0xd899('0x7'));var querystring=require(_0xd899('0xe'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xd899('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xd899('0x10'));var logger=require('../../config/logger')(_0xd899('0x11'));var utils=require(_0xd899('0x12'));var config=require('../../config/environment');var db=require(_0xd899('0x13'))['db'];var jayson=require(_0xd899('0x14'));var client=jayson[_0xd899('0x15')]['http']({'port':0x232a});function checkPasswordPattern(_0x5aa5e4,_0x41c2a6,_0xc4b244){if(_0xc4b244){var _0x2acbfe=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2acbfe[_0xd899('0x16')](_0x41c2a6)){return _0x5aa5e4;}else{throw new Error(_0xd899('0x17'));}}else{return _0x5aa5e4;}}function respondWithRpcPromise(_0xa1399d,_0x126d7d,_0x148135,_0x1d93d3){return new BPromise(function(_0x3f8cd9,_0x45e368){var _0x1f01b9=_0x1d93d3||client;return _0x1f01b9[_0xd899('0x18')](_0xa1399d,_0x148135)[_0xd899('0x19')](function(_0x38ebf8){logger[_0xd899('0x1a')](_0xd899('0x1b'),_0x126d7d,'request\x20sent');logger[_0xd899('0x1c')]('ZendeskConfiguration,\x20%s,\x20%s,\x20%s',_0x126d7d,_0xd899('0x1d'),JSON[_0xd899('0x1e')](_0x38ebf8));if(_0x38ebf8[_0xd899('0x1f')]){if(_0x38ebf8[_0xd899('0x1f')]['code']===0x1f4){logger[_0xd899('0x1f')](_0xd899('0x1b'),_0x126d7d,_0x38ebf8['error'][_0xd899('0x20')]);return _0x45e368(_0x38ebf8[_0xd899('0x1f')][_0xd899('0x20')]);}logger['error'](_0xd899('0x1b'),_0x126d7d,_0x38ebf8[_0xd899('0x1f')][_0xd899('0x20')]);return _0x3f8cd9(_0x38ebf8[_0xd899('0x1f')]['message']);}else{logger[_0xd899('0x1a')]('ZendeskConfiguration,\x20%s,\x20%s',_0x126d7d,'request\x20sent');_0x3f8cd9(_0x38ebf8[_0xd899('0x21')][_0xd899('0x20')]);}})[_0xd899('0x22')](function(_0x5990b8){logger[_0xd899('0x1f')]('ZendeskConfiguration,\x20%s,\x20%s',_0x126d7d,_0x5990b8);_0x45e368(_0x5990b8);});});}function respondWithStatusCode(_0x49b7ad,_0x2ee083){_0x2ee083=_0x2ee083||0xcc;return function(_0x52d7e8){if(_0x52d7e8){return _0x49b7ad['sendStatus'](_0x2ee083);}return _0x49b7ad[_0xd899('0x23')](_0x2ee083)[_0xd899('0x24')]();};}function respondWithResult(_0x2205d1,_0x10e8e0){_0x10e8e0=_0x10e8e0||0xc8;return function(_0x5e794b){if(_0x5e794b){return _0x2205d1['status'](_0x10e8e0)[_0xd899('0x25')](_0x5e794b);}};}function respondWithFilteredResult(_0x55dc40,_0x269eb5){return function(_0x3c2364){if(_0x3c2364){var _0x1bf727=_0x3c2364['count'],_0x1a8865=_0x269eb5[_0xd899('0x26')],_0xfe7376=_0x269eb5[_0xd899('0x26')]+_0x269eb5['limit'],_0x30f28a;if(_0xfe7376>=_0x1bf727){_0xfe7376=_0x1bf727;_0x30f28a=0xc8;}else{_0x30f28a=0xce;}_0x55dc40['status'](_0x30f28a);return _0x55dc40['set'](_0xd899('0x27'),_0x1a8865+'-'+_0xfe7376+'/'+_0x1bf727)['json'](_0x3c2364);}return null;};}function patchUpdates(_0xceb79){return function(_0x53060d){try{jsonpatch[_0xd899('0x28')](_0x53060d,_0xceb79,!![]);}catch(_0x52ac8f){return BPromise['reject'](_0x52ac8f);}return _0x53060d[_0xd899('0x29')]();};}function saveUpdates(_0x2cb895,_0x1d619b){return function(_0x2a5de0){if(_0x2a5de0){return _0x2a5de0['update'](_0x2cb895)[_0xd899('0x19')](function(_0x4ae2f5){return _0x4ae2f5;});}return null;};}function removeEntity(_0x42df82,_0x5d156a){return function(_0x32d755){if(_0x32d755){return _0x32d755['destroy']()['then'](function(){_0x42df82[_0xd899('0x23')](0xcc)[_0xd899('0x24')]();});}};}function handleEntityNotFound(_0x328da4,_0x2d5a89){return function(_0x3c2c95){if(!_0x3c2c95){_0x328da4[_0xd899('0x2a')](0x194);}return _0x3c2c95;};}function handleError(_0x41cdb1,_0x441051){_0x441051=_0x441051||0x1f4;return function(_0x514566){logger[_0xd899('0x1f')](_0x514566[_0xd899('0x2b')]);if(_0x514566[_0xd899('0x2c')]){delete _0x514566[_0xd899('0x2c')];}_0x41cdb1[_0xd899('0x23')](_0x441051)[_0xd899('0x2d')](_0x514566);};}exports[_0xd899('0x2e')]=function(_0x56db50,_0x501477){var _0x2d351e={},_0x422e2a={},_0x2b9579={'count':0x0,'rows':[]};var _0x21cb24=db[_0xd899('0x2f')][_0xd899('0x30')];_0x422e2a['model']=_['keys'](_0x21cb24);_0x422e2a[_0xd899('0x31')]=_[_0xd899('0x32')](_0x56db50['query']);_0x422e2a['filters']=_[_0xd899('0x33')](_0x422e2a[_0xd899('0x34')],_0x422e2a[_0xd899('0x31')]);_0x2d351e[_0xd899('0x35')]=_[_0xd899('0x33')](_0x422e2a[_0xd899('0x34')],qs[_0xd899('0x36')](_0x56db50['query'][_0xd899('0x36')]));_0x2d351e[_0xd899('0x35')]=_0x2d351e['attributes'][_0xd899('0x37')]?_0x2d351e[_0xd899('0x35')]:_0x422e2a[_0xd899('0x34')];if(!_0x56db50['query']['hasOwnProperty'](_0xd899('0x38'))){_0x2d351e[_0xd899('0x39')]=qs[_0xd899('0x39')](_0x56db50[_0xd899('0x31')][_0xd899('0x39')]);_0x2d351e[_0xd899('0x26')]=qs['offset'](_0x56db50[_0xd899('0x31')][_0xd899('0x26')]);}_0x2d351e['order']=qs['sort'](_0x56db50['query'][_0xd899('0x3a')]);_0x2d351e[_0xd899('0x3b')]=qs['filters'](_[_0xd899('0x3c')](_0x56db50[_0xd899('0x31')],_0x422e2a[_0xd899('0x3d')]));if(_0x56db50[_0xd899('0x31')]['filter']){_0x2d351e[_0xd899('0x3b')]=_[_0xd899('0x3e')](_0x2d351e[_0xd899('0x3b')],{'$or':_['map'](_0x21cb24,function(_0xdc37de){if(_0xdc37de[_0xd899('0x3f')][_0xd899('0x40')]!==_0xd899('0x41')){var _0x3b2c00={};_0x3b2c00[_0xdc37de['field']]={'$like':'%'+_0x56db50[_0xd899('0x31')][_0xd899('0x42')]+'%'};return _0x3b2c00;}})});}_0x2d351e=_[_0xd899('0x3e')]({},_0x2d351e,_0x56db50[_0xd899('0x43')]);var _0xa208d2={'where':_0x2d351e[_0xd899('0x3b')]};return db['ZendeskConfiguration'][_0xd899('0x44')](_0xa208d2)[_0xd899('0x19')](function(_0x3f7c6f){_0x2b9579['count']=_0x3f7c6f;if(_0x56db50[_0xd899('0x31')][_0xd899('0x45')]){_0x2d351e[_0xd899('0x46')]=[{'all':!![]}];}return db[_0xd899('0x2f')][_0xd899('0x47')](_0x2d351e);})['then'](function(_0x505241){_0x2b9579[_0xd899('0x48')]=_0x505241;return _0x2b9579;})[_0xd899('0x19')](respondWithFilteredResult(_0x501477,_0x2d351e))['catch'](handleError(_0x501477,null));};exports['show']=function(_0x1bf3da,_0x378ded){var _0x232a20={'raw':![],'where':{'id':_0x1bf3da[_0xd899('0x49')]['id']}},_0x334963={};_0x334963[_0xd899('0x34')]=_['keys'](db[_0xd899('0x2f')][_0xd899('0x30')]);_0x334963[_0xd899('0x31')]=_[_0xd899('0x32')](_0x1bf3da[_0xd899('0x31')]);_0x334963[_0xd899('0x3d')]=_['intersection'](_0x334963[_0xd899('0x34')],_0x334963[_0xd899('0x31')]);_0x232a20[_0xd899('0x35')]=_[_0xd899('0x33')](_0x334963[_0xd899('0x34')],qs[_0xd899('0x36')](_0x1bf3da[_0xd899('0x31')][_0xd899('0x36')]));_0x232a20[_0xd899('0x35')]=_0x232a20['attributes'][_0xd899('0x37')]?_0x232a20[_0xd899('0x35')]:_0x334963['model'];if(_0x1bf3da[_0xd899('0x31')][_0xd899('0x45')]){_0x232a20[_0xd899('0x46')]=[{'all':!![]}];}_0x232a20=_['merge']({},_0x232a20,_0x1bf3da[_0xd899('0x43')]);return db[_0xd899('0x2f')][_0xd899('0x4a')](_0x232a20)['then'](handleEntityNotFound(_0x378ded,null))[_0xd899('0x19')](respondWithResult(_0x378ded,null))[_0xd899('0x22')](handleError(_0x378ded,null));};exports[_0xd899('0x4b')]=function(_0x356925,_0x19c822){return db[_0xd899('0x2f')][_0xd899('0x4b')](_0x356925[_0xd899('0x4c')],{})[_0xd899('0x19')](respondWithResult(_0x19c822,0xc9))[_0xd899('0x22')](handleError(_0x19c822,null));};exports['update']=function(_0x333ab1,_0x343984){if(_0x333ab1[_0xd899('0x4c')]['id']){delete _0x333ab1[_0xd899('0x4c')]['id'];}return db['ZendeskConfiguration'][_0xd899('0x4a')]({'where':{'id':_0x333ab1['params']['id']}})['then'](handleEntityNotFound(_0x343984,null))[_0xd899('0x19')](saveUpdates(_0x333ab1['body'],null))[_0xd899('0x19')](respondWithResult(_0x343984,null))[_0xd899('0x22')](handleError(_0x343984,null));};exports[_0xd899('0x4d')]=function(_0x3132f8,_0x5a84b1){return db[_0xd899('0x2f')][_0xd899('0x4a')]({'where':{'id':_0x3132f8[_0xd899('0x49')]['id']}})[_0xd899('0x19')](handleEntityNotFound(_0x5a84b1,null))[_0xd899('0x19')](removeEntity(_0x5a84b1,null))[_0xd899('0x22')](handleError(_0x5a84b1,null));};exports['getFields']=function(_0x2f4c5a,_0x4a85dc,_0x33fa8f){var _0x2b9878={};var _0x434dc4={};var _0x435015;var _0x2083bf;return db['ZendeskConfiguration'][_0xd899('0x4e')]({'where':{'id':_0x2f4c5a[_0xd899('0x49')]['id']}})[_0xd899('0x19')](handleEntityNotFound(_0x4a85dc,null))[_0xd899('0x19')](function(_0x74b5d9){if(_0x74b5d9){_0x435015=_0x74b5d9;_0x434dc4[_0xd899('0x34')]=_[_0xd899('0x32')](db[_0xd899('0x4f')][_0xd899('0x30')]);_0x434dc4[_0xd899('0x31')]=_['keys'](_0x2f4c5a[_0xd899('0x31')]);_0x434dc4[_0xd899('0x3d')]=_[_0xd899('0x33')](_0x434dc4[_0xd899('0x34')],_0x434dc4[_0xd899('0x31')]);_0x2b9878[_0xd899('0x35')]=_[_0xd899('0x33')](_0x434dc4[_0xd899('0x34')],qs[_0xd899('0x36')](_0x2f4c5a[_0xd899('0x31')][_0xd899('0x36')]));_0x2b9878[_0xd899('0x35')]=_0x2b9878[_0xd899('0x35')][_0xd899('0x37')]?_0x2b9878[_0xd899('0x35')]:_0x434dc4['model'];_0x2b9878[_0xd899('0x50')]=qs[_0xd899('0x3a')](_0x2f4c5a[_0xd899('0x31')]['sort']);_0x2b9878['where']=qs[_0xd899('0x3d')](_[_0xd899('0x3c')](_0x2f4c5a[_0xd899('0x31')],_0x434dc4[_0xd899('0x3d')]));if(_0x2f4c5a[_0xd899('0x31')][_0xd899('0x42')]){_0x2b9878[_0xd899('0x3b')]=_[_0xd899('0x3e')](_0x2b9878[_0xd899('0x3b')],{'$or':_[_0xd899('0x51')](_0x2b9878[_0xd899('0x35')],function(_0x226e38){var _0x343f43={};_0x343f43[_0x226e38]={'$like':'%'+_0x2f4c5a['query']['filter']+'%'};return _0x343f43;})});}_0x2b9878=_[_0xd899('0x3e')]({},_0x2b9878,_0x2f4c5a[_0xd899('0x43')]);return _0x435015['getFields'](_0x2b9878);}})[_0xd899('0x19')](function(_0x436dd7){if(_0x436dd7){_0x2083bf=_0x436dd7['length'];if(!_0x2f4c5a[_0xd899('0x31')][_0xd899('0x52')](_0xd899('0x38'))){_0x2b9878[_0xd899('0x39')]=qs[_0xd899('0x39')](_0x2f4c5a[_0xd899('0x31')]['limit']);_0x2b9878['offset']=qs[_0xd899('0x26')](_0x2f4c5a[_0xd899('0x31')]['offset']);}return _0x435015[_0xd899('0x53')](_0x2b9878);}})[_0xd899('0x19')](function(_0xc821fc){if(_0xc821fc){return _0xc821fc?{'count':_0x2083bf,'rows':_0xc821fc}:null;}})[_0xd899('0x19')](respondWithResult(_0x4a85dc,null))[_0xd899('0x22')](handleError(_0x4a85dc,null));};exports['getSubjects']=function(_0x166a28,_0xb839b9,_0x14d5ec){var _0x5f2d0c={};var _0x5dfc39={};var _0x141356;var _0x825a53;return db[_0xd899('0x2f')]['findOne']({'where':{'id':_0x166a28[_0xd899('0x49')]['id']}})[_0xd899('0x19')](handleEntityNotFound(_0xb839b9,null))['then'](function(_0x572ceb){if(_0x572ceb){_0x141356=_0x572ceb;_0x5dfc39['model']=_['keys'](db['ZendeskField'][_0xd899('0x30')]);_0x5dfc39[_0xd899('0x31')]=_[_0xd899('0x32')](_0x166a28[_0xd899('0x31')]);_0x5dfc39[_0xd899('0x3d')]=_[_0xd899('0x33')](_0x5dfc39[_0xd899('0x34')],_0x5dfc39['query']);_0x5f2d0c[_0xd899('0x35')]=_[_0xd899('0x33')](_0x5dfc39['model'],qs[_0xd899('0x36')](_0x166a28['query']['fields']));_0x5f2d0c[_0xd899('0x35')]=_0x5f2d0c[_0xd899('0x35')][_0xd899('0x37')]?_0x5f2d0c['attributes']:_0x5dfc39[_0xd899('0x34')];_0x5f2d0c['order']=qs[_0xd899('0x3a')](_0x166a28[_0xd899('0x31')]['sort']);_0x5f2d0c[_0xd899('0x3b')]=qs[_0xd899('0x3d')](_[_0xd899('0x3c')](_0x166a28[_0xd899('0x31')],_0x5dfc39['filters']));if(_0x166a28[_0xd899('0x31')][_0xd899('0x42')]){_0x5f2d0c['where']=_[_0xd899('0x3e')](_0x5f2d0c['where'],{'$or':_[_0xd899('0x51')](_0x5f2d0c[_0xd899('0x35')],function(_0x52dfd3){var _0x1c3a99={};_0x1c3a99[_0x52dfd3]={'$like':'%'+_0x166a28[_0xd899('0x31')][_0xd899('0x42')]+'%'};return _0x1c3a99;})});}_0x5f2d0c=_['merge']({},_0x5f2d0c,_0x166a28[_0xd899('0x43')]);return _0x141356[_0xd899('0x54')](_0x5f2d0c);}})[_0xd899('0x19')](function(_0x392eb8){if(_0x392eb8){_0x825a53=_0x392eb8[_0xd899('0x37')];if(!_0x166a28[_0xd899('0x31')][_0xd899('0x52')](_0xd899('0x38'))){_0x5f2d0c['limit']=qs[_0xd899('0x39')](_0x166a28['query'][_0xd899('0x39')]);_0x5f2d0c[_0xd899('0x26')]=qs[_0xd899('0x26')](_0x166a28['query'][_0xd899('0x26')]);}return _0x141356[_0xd899('0x54')](_0x5f2d0c);}})[_0xd899('0x19')](function(_0x316399){if(_0x316399){return _0x316399?{'count':_0x825a53,'rows':_0x316399}:null;}})[_0xd899('0x19')](respondWithResult(_0xb839b9,null))[_0xd899('0x22')](handleError(_0xb839b9,null));};exports[_0xd899('0x55')]=function(_0x4cfb00,_0x32e4fa,_0x3b8a8d){var _0x3f5b4d={};var _0x5dc6bd={};var _0x527ee8;var _0x374539;return db[_0xd899('0x2f')][_0xd899('0x4e')]({'where':{'id':_0x4cfb00[_0xd899('0x49')]['id']}})[_0xd899('0x19')](handleEntityNotFound(_0x32e4fa,null))['then'](function(_0x4fb120){if(_0x4fb120){_0x527ee8=_0x4fb120;_0x5dc6bd[_0xd899('0x34')]=_['keys'](db[_0xd899('0x4f')][_0xd899('0x30')]);_0x5dc6bd[_0xd899('0x31')]=_[_0xd899('0x32')](_0x4cfb00['query']);_0x5dc6bd[_0xd899('0x3d')]=_[_0xd899('0x33')](_0x5dc6bd[_0xd899('0x34')],_0x5dc6bd['query']);_0x3f5b4d['attributes']=_[_0xd899('0x33')](_0x5dc6bd[_0xd899('0x34')],qs[_0xd899('0x36')](_0x4cfb00[_0xd899('0x31')][_0xd899('0x36')]));_0x3f5b4d['attributes']=_0x3f5b4d['attributes'][_0xd899('0x37')]?_0x3f5b4d['attributes']:_0x5dc6bd[_0xd899('0x34')];_0x3f5b4d[_0xd899('0x50')]=qs['sort'](_0x4cfb00[_0xd899('0x31')][_0xd899('0x3a')]);_0x3f5b4d[_0xd899('0x3b')]=qs[_0xd899('0x3d')](_[_0xd899('0x3c')](_0x4cfb00[_0xd899('0x31')],_0x5dc6bd['filters']));if(_0x4cfb00[_0xd899('0x31')][_0xd899('0x42')]){_0x3f5b4d['where']=_[_0xd899('0x3e')](_0x3f5b4d[_0xd899('0x3b')],{'$or':_[_0xd899('0x51')](_0x3f5b4d[_0xd899('0x35')],function(_0x31b958){var _0x807c76={};_0x807c76[_0x31b958]={'$like':'%'+_0x4cfb00['query'][_0xd899('0x42')]+'%'};return _0x807c76;})});}_0x3f5b4d=_[_0xd899('0x3e')]({},_0x3f5b4d,_0x4cfb00[_0xd899('0x43')]);return _0x527ee8['getDescriptions'](_0x3f5b4d);}})['then'](function(_0x5653c0){if(_0x5653c0){_0x374539=_0x5653c0[_0xd899('0x37')];if(!_0x4cfb00[_0xd899('0x31')][_0xd899('0x52')](_0xd899('0x38'))){_0x3f5b4d[_0xd899('0x39')]=qs[_0xd899('0x39')](_0x4cfb00[_0xd899('0x31')][_0xd899('0x39')]);_0x3f5b4d[_0xd899('0x26')]=qs[_0xd899('0x26')](_0x4cfb00[_0xd899('0x31')][_0xd899('0x26')]);}return _0x527ee8[_0xd899('0x55')](_0x3f5b4d);}})[_0xd899('0x19')](function(_0x3cce27){if(_0x3cce27){return _0x3cce27?{'count':_0x374539,'rows':_0x3cce27}:null;}})[_0xd899('0x19')](respondWithResult(_0x32e4fa,null))[_0xd899('0x22')](handleError(_0x32e4fa,null));};exports[_0xd899('0x56')]=function(_0x2e6313,_0x48a4a5,_0x16819f){var _0xd6bdd3={};var _0x3c73b6={};var _0x32f7be;var _0x5335b5;return db['ZendeskConfiguration']['findOne']({'where':{'id':_0x2e6313[_0xd899('0x49')]['id']}})[_0xd899('0x19')](handleEntityNotFound(_0x48a4a5,null))[_0xd899('0x19')](function(_0x49ac8d){if(_0x49ac8d){_0x32f7be=_0x49ac8d;_0x3c73b6[_0xd899('0x34')]=_['keys'](db[_0xd899('0x57')]['rawAttributes']);_0x3c73b6[_0xd899('0x31')]=_[_0xd899('0x32')](_0x2e6313[_0xd899('0x31')]);_0x3c73b6[_0xd899('0x3d')]=_[_0xd899('0x33')](_0x3c73b6['model'],_0x3c73b6[_0xd899('0x31')]);_0xd6bdd3[_0xd899('0x35')]=_[_0xd899('0x33')](_0x3c73b6[_0xd899('0x34')],qs[_0xd899('0x36')](_0x2e6313[_0xd899('0x31')][_0xd899('0x36')]));_0xd6bdd3[_0xd899('0x35')]=_0xd6bdd3['attributes'][_0xd899('0x37')]?_0xd6bdd3[_0xd899('0x35')]:_0x3c73b6[_0xd899('0x34')];_0xd6bdd3[_0xd899('0x50')]=qs[_0xd899('0x3a')](_0x2e6313[_0xd899('0x31')][_0xd899('0x3a')]);_0xd6bdd3[_0xd899('0x3b')]=qs[_0xd899('0x3d')](_['pick'](_0x2e6313[_0xd899('0x31')],_0x3c73b6[_0xd899('0x3d')]));if(_0x2e6313[_0xd899('0x31')][_0xd899('0x42')]){_0xd6bdd3['where']=_[_0xd899('0x3e')](_0xd6bdd3[_0xd899('0x3b')],{'$or':_[_0xd899('0x51')](_0xd6bdd3[_0xd899('0x35')],function(_0x2cf0e9){var _0x45dd69={};_0x45dd69[_0x2cf0e9]={'$like':'%'+_0x2e6313[_0xd899('0x31')]['filter']+'%'};return _0x45dd69;})});}_0xd6bdd3=_['merge']({},_0xd6bdd3,_0x2e6313['options']);return _0x32f7be[_0xd899('0x56')](_0xd6bdd3);}})['then'](function(_0x4e6397){if(_0x4e6397){_0x5335b5=_0x4e6397[_0xd899('0x37')];if(!_0x2e6313[_0xd899('0x31')][_0xd899('0x52')]('nolimit')){_0xd6bdd3['limit']=qs['limit'](_0x2e6313[_0xd899('0x31')][_0xd899('0x39')]);_0xd6bdd3['offset']=qs[_0xd899('0x26')](_0x2e6313[_0xd899('0x31')][_0xd899('0x26')]);}return _0x32f7be[_0xd899('0x56')](_0xd6bdd3);}})[_0xd899('0x19')](function(_0x3a5e44){if(_0x3a5e44){return _0x3a5e44?{'count':_0x5335b5,'rows':_0x3a5e44}:null;}})[_0xd899('0x19')](respondWithResult(_0x48a4a5,null))[_0xd899('0x22')](handleError(_0x48a4a5,null));};exports['setTags']=function(_0x5ac2e7,_0x41d12e,_0xeca298){if(_0x5ac2e7[_0xd899('0x4c')]['id']){delete _0x5ac2e7['body']['id'];}return db['ZendeskConfiguration'][_0xd899('0x4e')]({'where':{'id':_0x5ac2e7[_0xd899('0x49')]['id']}})[_0xd899('0x19')](handleEntityNotFound(_0x41d12e,null))['then'](function(_0x24d63d){if(_0x24d63d){return _0x24d63d[_0xd899('0x58')](_0x5ac2e7[_0xd899('0x4c')][_0xd899('0x59')]||[]);}return null;})[_0xd899('0x19')](respondWithResult(_0x41d12e,null))['catch'](handleError(_0x41d12e,null));};
\ No newline at end of file
+var _0xdf51=['options','includeAll','include','findAll','rows','show','params','rawAttributes','length','find','body','ZendeskField','getFields','getSubjects','getDescriptions','findOne','getTags','Tag','setTags','ids','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','api','../../config/utils','../../mysqldb','jayson/promise','http','test','request','then','ZendeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','catch','status','json','count','offset','limit','set','Content-Range','reject','save','update','end','sendStatus','stack','name','send','index','ZendeskConfiguration','model','keys','query','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filters','pick','merge','map','type','key','VIRTUAL','filter'];(function(_0x59dfe3,_0x4f9c9a){var _0x202d85=function(_0xabb754){while(--_0xabb754){_0x59dfe3['push'](_0x59dfe3['shift']());}};_0x202d85(++_0x4f9c9a);}(_0xdf51,0x71));var _0x1df5=function(_0x2d256f,_0x4d376c){_0x2d256f=_0x2d256f-0x0;var _0x3b0053=_0xdf51[_0x2d256f];return _0x3b0053;};'use strict';var pdf=require(_0x1df5('0x0'));var emlformat=require(_0x1df5('0x1'));var rimraf=require(_0x1df5('0x2'));var zipdir=require(_0x1df5('0x3'));var jsonpatch=require(_0x1df5('0x4'));var rp=require('request-promise');var moment=require(_0x1df5('0x5'));var BPromise=require(_0x1df5('0x6'));var Mustache=require(_0x1df5('0x7'));var util=require(_0x1df5('0x8'));var path=require('path');var sox=require(_0x1df5('0x9'));var csv=require(_0x1df5('0xa'));var ejs=require(_0x1df5('0xb'));var fs=require('fs');var _=require(_0x1df5('0xc'));var squel=require(_0x1df5('0xd'));var crypto=require(_0x1df5('0xe'));var jsforce=require(_0x1df5('0xf'));var deskjs=require(_0x1df5('0x10'));var toCsv=require(_0x1df5('0xa'));var querystring=require(_0x1df5('0x11'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x1df5('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0x1df5('0x13'));var utils=require(_0x1df5('0x14'));var config=require('../../config/environment');var db=require(_0x1df5('0x15'))['db'];var jayson=require(_0x1df5('0x16'));var client=jayson['client'][_0x1df5('0x17')]({'port':0x232a});function checkPasswordPattern(_0x236e15,_0x572f39,_0x1e1995){if(_0x1e1995){var _0x23434f=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x23434f[_0x1df5('0x18')](_0x572f39)){return _0x236e15;}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 _0x236e15;}}function respondWithRpcPromise(_0x34614a,_0x1b3067,_0x2469fa,_0x51cc26){return new BPromise(function(_0x1440d9,_0x3eb94c){var _0x2d47eb=_0x51cc26||client;return _0x2d47eb[_0x1df5('0x19')](_0x34614a,_0x2469fa)[_0x1df5('0x1a')](function(_0x398adf){logger['info'](_0x1df5('0x1b'),_0x1b3067,_0x1df5('0x1c'));logger[_0x1df5('0x1d')](_0x1df5('0x1e'),_0x1b3067,_0x1df5('0x1c'),JSON[_0x1df5('0x1f')](_0x398adf));if(_0x398adf[_0x1df5('0x20')]){if(_0x398adf['error']['code']===0x1f4){logger[_0x1df5('0x20')](_0x1df5('0x1b'),_0x1b3067,_0x398adf[_0x1df5('0x20')][_0x1df5('0x21')]);return _0x3eb94c(_0x398adf[_0x1df5('0x20')]['message']);}logger[_0x1df5('0x20')](_0x1df5('0x1b'),_0x1b3067,_0x398adf['error'][_0x1df5('0x21')]);return _0x1440d9(_0x398adf[_0x1df5('0x20')]['message']);}else{logger[_0x1df5('0x22')](_0x1df5('0x1b'),_0x1b3067,_0x1df5('0x1c'));_0x1440d9(_0x398adf[_0x1df5('0x23')][_0x1df5('0x21')]);}})[_0x1df5('0x24')](function(_0x3d7012){logger[_0x1df5('0x20')](_0x1df5('0x1b'),_0x1b3067,_0x3d7012);_0x3eb94c(_0x3d7012);});});}function respondWithStatusCode(_0x80d6da,_0x49252f){_0x49252f=_0x49252f||0xcc;return function(_0x3ac4be){if(_0x3ac4be){return _0x80d6da['sendStatus'](_0x49252f);}return _0x80d6da['status'](_0x49252f)['end']();};}function respondWithResult(_0x291123,_0x38cfd5){_0x38cfd5=_0x38cfd5||0xc8;return function(_0x375479){if(_0x375479){return _0x291123[_0x1df5('0x25')](_0x38cfd5)[_0x1df5('0x26')](_0x375479);}};}function respondWithFilteredResult(_0xf36753,_0x57f5bf){return function(_0x394187){if(_0x394187){var _0x15b97e=_0x394187[_0x1df5('0x27')],_0xe86114=_0x57f5bf[_0x1df5('0x28')],_0x19b5a7=_0x57f5bf[_0x1df5('0x28')]+_0x57f5bf[_0x1df5('0x29')],_0x15f5dc;if(_0x19b5a7>=_0x15b97e){_0x19b5a7=_0x15b97e;_0x15f5dc=0xc8;}else{_0x15f5dc=0xce;}_0xf36753[_0x1df5('0x25')](_0x15f5dc);return _0xf36753[_0x1df5('0x2a')](_0x1df5('0x2b'),_0xe86114+'-'+_0x19b5a7+'/'+_0x15b97e)[_0x1df5('0x26')](_0x394187);}return null;};}function patchUpdates(_0x29e449){return function(_0x24be91){try{jsonpatch['apply'](_0x24be91,_0x29e449,!![]);}catch(_0x2be804){return BPromise[_0x1df5('0x2c')](_0x2be804);}return _0x24be91[_0x1df5('0x2d')]();};}function saveUpdates(_0xaf3d39,_0x278014){return function(_0x59ff3b){if(_0x59ff3b){return _0x59ff3b[_0x1df5('0x2e')](_0xaf3d39)[_0x1df5('0x1a')](function(_0x22d777){return _0x22d777;});}return null;};}function removeEntity(_0x2ca6ba,_0x3efee3){return function(_0x29efde){if(_0x29efde){return _0x29efde['destroy']()[_0x1df5('0x1a')](function(){_0x2ca6ba[_0x1df5('0x25')](0xcc)[_0x1df5('0x2f')]();});}};}function handleEntityNotFound(_0x518e4d,_0x3142fa){return function(_0x4ce311){if(!_0x4ce311){_0x518e4d[_0x1df5('0x30')](0x194);}return _0x4ce311;};}function handleError(_0x2400ad,_0xab23c2){_0xab23c2=_0xab23c2||0x1f4;return function(_0x32d7d0){logger[_0x1df5('0x20')](_0x32d7d0[_0x1df5('0x31')]);if(_0x32d7d0[_0x1df5('0x32')]){delete _0x32d7d0[_0x1df5('0x32')];}_0x2400ad[_0x1df5('0x25')](_0xab23c2)[_0x1df5('0x33')](_0x32d7d0);};}exports[_0x1df5('0x34')]=function(_0x28d8af,_0x108128){var _0x279b8e={},_0x71a50b={},_0x1e203e={'count':0x0,'rows':[]};var _0x6b4e71=db[_0x1df5('0x35')]['rawAttributes'];_0x71a50b[_0x1df5('0x36')]=_[_0x1df5('0x37')](_0x6b4e71);_0x71a50b[_0x1df5('0x38')]=_[_0x1df5('0x37')](_0x28d8af['query']);_0x71a50b['filters']=_[_0x1df5('0x39')](_0x71a50b[_0x1df5('0x36')],_0x71a50b[_0x1df5('0x38')]);_0x279b8e[_0x1df5('0x3a')]=_['intersection'](_0x71a50b[_0x1df5('0x36')],qs[_0x1df5('0x3b')](_0x28d8af[_0x1df5('0x38')][_0x1df5('0x3b')]));_0x279b8e[_0x1df5('0x3a')]=_0x279b8e['attributes']['length']?_0x279b8e[_0x1df5('0x3a')]:_0x71a50b[_0x1df5('0x36')];if(!_0x28d8af[_0x1df5('0x38')][_0x1df5('0x3c')](_0x1df5('0x3d'))){_0x279b8e[_0x1df5('0x29')]=qs[_0x1df5('0x29')](_0x28d8af[_0x1df5('0x38')][_0x1df5('0x29')]);_0x279b8e['offset']=qs[_0x1df5('0x28')](_0x28d8af[_0x1df5('0x38')][_0x1df5('0x28')]);}_0x279b8e[_0x1df5('0x3e')]=qs[_0x1df5('0x3f')](_0x28d8af[_0x1df5('0x38')][_0x1df5('0x3f')]);_0x279b8e[_0x1df5('0x40')]=qs[_0x1df5('0x41')](_[_0x1df5('0x42')](_0x28d8af[_0x1df5('0x38')],_0x71a50b[_0x1df5('0x41')]));if(_0x28d8af[_0x1df5('0x38')]['filter']){_0x279b8e[_0x1df5('0x40')]=_[_0x1df5('0x43')](_0x279b8e[_0x1df5('0x40')],{'$or':_[_0x1df5('0x44')](_0x6b4e71,function(_0x4f7413){if(_0x4f7413[_0x1df5('0x45')][_0x1df5('0x46')]!==_0x1df5('0x47')){var _0x1745d6={};_0x1745d6[_0x4f7413['field']]={'$like':'%'+_0x28d8af[_0x1df5('0x38')][_0x1df5('0x48')]+'%'};return _0x1745d6;}})});}_0x279b8e=_[_0x1df5('0x43')]({},_0x279b8e,_0x28d8af[_0x1df5('0x49')]);var _0x54c48a={'where':_0x279b8e[_0x1df5('0x40')]};return db[_0x1df5('0x35')][_0x1df5('0x27')](_0x54c48a)[_0x1df5('0x1a')](function(_0x491fcd){_0x1e203e[_0x1df5('0x27')]=_0x491fcd;if(_0x28d8af[_0x1df5('0x38')][_0x1df5('0x4a')]){_0x279b8e[_0x1df5('0x4b')]=[{'all':!![]}];}return db[_0x1df5('0x35')][_0x1df5('0x4c')](_0x279b8e);})[_0x1df5('0x1a')](function(_0x22bfdd){_0x1e203e[_0x1df5('0x4d')]=_0x22bfdd;return _0x1e203e;})[_0x1df5('0x1a')](respondWithFilteredResult(_0x108128,_0x279b8e))['catch'](handleError(_0x108128,null));};exports[_0x1df5('0x4e')]=function(_0x1adab3,_0x5ba7ec){var _0x64de07={'raw':![],'where':{'id':_0x1adab3[_0x1df5('0x4f')]['id']}},_0x1a55d9={};_0x1a55d9[_0x1df5('0x36')]=_[_0x1df5('0x37')](db['ZendeskConfiguration'][_0x1df5('0x50')]);_0x1a55d9[_0x1df5('0x38')]=_[_0x1df5('0x37')](_0x1adab3[_0x1df5('0x38')]);_0x1a55d9[_0x1df5('0x41')]=_[_0x1df5('0x39')](_0x1a55d9[_0x1df5('0x36')],_0x1a55d9[_0x1df5('0x38')]);_0x64de07['attributes']=_[_0x1df5('0x39')](_0x1a55d9[_0x1df5('0x36')],qs['fields'](_0x1adab3[_0x1df5('0x38')][_0x1df5('0x3b')]));_0x64de07[_0x1df5('0x3a')]=_0x64de07[_0x1df5('0x3a')][_0x1df5('0x51')]?_0x64de07[_0x1df5('0x3a')]:_0x1a55d9['model'];if(_0x1adab3[_0x1df5('0x38')][_0x1df5('0x4a')]){_0x64de07['include']=[{'all':!![]}];}_0x64de07=_['merge']({},_0x64de07,_0x1adab3[_0x1df5('0x49')]);return db['ZendeskConfiguration'][_0x1df5('0x52')](_0x64de07)[_0x1df5('0x1a')](handleEntityNotFound(_0x5ba7ec,null))[_0x1df5('0x1a')](respondWithResult(_0x5ba7ec,null))[_0x1df5('0x24')](handleError(_0x5ba7ec,null));};exports['create']=function(_0x1bc595,_0x1b24cd){return db[_0x1df5('0x35')]['create'](_0x1bc595['body'],{})[_0x1df5('0x1a')](respondWithResult(_0x1b24cd,0xc9))[_0x1df5('0x24')](handleError(_0x1b24cd,null));};exports[_0x1df5('0x2e')]=function(_0x3d8b8c,_0x119f66){if(_0x3d8b8c[_0x1df5('0x53')]['id']){delete _0x3d8b8c[_0x1df5('0x53')]['id'];}return db[_0x1df5('0x35')][_0x1df5('0x52')]({'where':{'id':_0x3d8b8c[_0x1df5('0x4f')]['id']}})[_0x1df5('0x1a')](handleEntityNotFound(_0x119f66,null))[_0x1df5('0x1a')](saveUpdates(_0x3d8b8c[_0x1df5('0x53')],null))[_0x1df5('0x1a')](respondWithResult(_0x119f66,null))['catch'](handleError(_0x119f66,null));};exports['destroy']=function(_0x4d2aeb,_0xf85f5a){return db[_0x1df5('0x35')][_0x1df5('0x52')]({'where':{'id':_0x4d2aeb['params']['id']}})[_0x1df5('0x1a')](handleEntityNotFound(_0xf85f5a,null))['then'](removeEntity(_0xf85f5a,null))[_0x1df5('0x24')](handleError(_0xf85f5a,null));};exports['getFields']=function(_0x51d481,_0x53a4b9,_0x68ca19){var _0x1eaa8c={};var _0x1b6dd0={};var _0x17d11d;var _0x1b58fc;return db['ZendeskConfiguration']['findOne']({'where':{'id':_0x51d481[_0x1df5('0x4f')]['id']}})[_0x1df5('0x1a')](handleEntityNotFound(_0x53a4b9,null))[_0x1df5('0x1a')](function(_0x5da4fb){if(_0x5da4fb){_0x17d11d=_0x5da4fb;_0x1b6dd0[_0x1df5('0x36')]=_[_0x1df5('0x37')](db[_0x1df5('0x54')]['rawAttributes']);_0x1b6dd0[_0x1df5('0x38')]=_[_0x1df5('0x37')](_0x51d481[_0x1df5('0x38')]);_0x1b6dd0[_0x1df5('0x41')]=_[_0x1df5('0x39')](_0x1b6dd0['model'],_0x1b6dd0[_0x1df5('0x38')]);_0x1eaa8c[_0x1df5('0x3a')]=_[_0x1df5('0x39')](_0x1b6dd0[_0x1df5('0x36')],qs[_0x1df5('0x3b')](_0x51d481[_0x1df5('0x38')]['fields']));_0x1eaa8c[_0x1df5('0x3a')]=_0x1eaa8c[_0x1df5('0x3a')]['length']?_0x1eaa8c[_0x1df5('0x3a')]:_0x1b6dd0['model'];_0x1eaa8c[_0x1df5('0x3e')]=qs['sort'](_0x51d481['query'][_0x1df5('0x3f')]);_0x1eaa8c['where']=qs[_0x1df5('0x41')](_[_0x1df5('0x42')](_0x51d481[_0x1df5('0x38')],_0x1b6dd0['filters']));if(_0x51d481['query']['filter']){_0x1eaa8c[_0x1df5('0x40')]=_[_0x1df5('0x43')](_0x1eaa8c[_0x1df5('0x40')],{'$or':_['map'](_0x1eaa8c[_0x1df5('0x3a')],function(_0xa61e6a){var _0x1df003={};_0x1df003[_0xa61e6a]={'$like':'%'+_0x51d481[_0x1df5('0x38')][_0x1df5('0x48')]+'%'};return _0x1df003;})});}_0x1eaa8c=_[_0x1df5('0x43')]({},_0x1eaa8c,_0x51d481[_0x1df5('0x49')]);return _0x17d11d['getFields'](_0x1eaa8c);}})[_0x1df5('0x1a')](function(_0x217cde){if(_0x217cde){_0x1b58fc=_0x217cde[_0x1df5('0x51')];if(!_0x51d481[_0x1df5('0x38')][_0x1df5('0x3c')](_0x1df5('0x3d'))){_0x1eaa8c['limit']=qs['limit'](_0x51d481[_0x1df5('0x38')][_0x1df5('0x29')]);_0x1eaa8c[_0x1df5('0x28')]=qs[_0x1df5('0x28')](_0x51d481[_0x1df5('0x38')][_0x1df5('0x28')]);}return _0x17d11d[_0x1df5('0x55')](_0x1eaa8c);}})[_0x1df5('0x1a')](function(_0x20c90c){if(_0x20c90c){return _0x20c90c?{'count':_0x1b58fc,'rows':_0x20c90c}:null;}})[_0x1df5('0x1a')](respondWithResult(_0x53a4b9,null))[_0x1df5('0x24')](handleError(_0x53a4b9,null));};exports[_0x1df5('0x56')]=function(_0x9c602d,_0xfbb172,_0x4aa4e0){var _0x31a69a={};var _0x44458f={};var _0xee2495;var _0x246c6c;return db[_0x1df5('0x35')]['findOne']({'where':{'id':_0x9c602d[_0x1df5('0x4f')]['id']}})[_0x1df5('0x1a')](handleEntityNotFound(_0xfbb172,null))[_0x1df5('0x1a')](function(_0x1c204){if(_0x1c204){_0xee2495=_0x1c204;_0x44458f['model']=_[_0x1df5('0x37')](db[_0x1df5('0x54')]['rawAttributes']);_0x44458f[_0x1df5('0x38')]=_[_0x1df5('0x37')](_0x9c602d[_0x1df5('0x38')]);_0x44458f[_0x1df5('0x41')]=_[_0x1df5('0x39')](_0x44458f[_0x1df5('0x36')],_0x44458f[_0x1df5('0x38')]);_0x31a69a['attributes']=_[_0x1df5('0x39')](_0x44458f[_0x1df5('0x36')],qs[_0x1df5('0x3b')](_0x9c602d[_0x1df5('0x38')][_0x1df5('0x3b')]));_0x31a69a[_0x1df5('0x3a')]=_0x31a69a[_0x1df5('0x3a')][_0x1df5('0x51')]?_0x31a69a['attributes']:_0x44458f['model'];_0x31a69a[_0x1df5('0x3e')]=qs[_0x1df5('0x3f')](_0x9c602d[_0x1df5('0x38')][_0x1df5('0x3f')]);_0x31a69a[_0x1df5('0x40')]=qs[_0x1df5('0x41')](_[_0x1df5('0x42')](_0x9c602d[_0x1df5('0x38')],_0x44458f['filters']));if(_0x9c602d[_0x1df5('0x38')][_0x1df5('0x48')]){_0x31a69a[_0x1df5('0x40')]=_[_0x1df5('0x43')](_0x31a69a[_0x1df5('0x40')],{'$or':_[_0x1df5('0x44')](_0x31a69a['attributes'],function(_0x436d40){var _0x2208da={};_0x2208da[_0x436d40]={'$like':'%'+_0x9c602d[_0x1df5('0x38')][_0x1df5('0x48')]+'%'};return _0x2208da;})});}_0x31a69a=_[_0x1df5('0x43')]({},_0x31a69a,_0x9c602d[_0x1df5('0x49')]);return _0xee2495[_0x1df5('0x56')](_0x31a69a);}})[_0x1df5('0x1a')](function(_0x4153d5){if(_0x4153d5){_0x246c6c=_0x4153d5['length'];if(!_0x9c602d[_0x1df5('0x38')][_0x1df5('0x3c')](_0x1df5('0x3d'))){_0x31a69a[_0x1df5('0x29')]=qs[_0x1df5('0x29')](_0x9c602d['query']['limit']);_0x31a69a[_0x1df5('0x28')]=qs['offset'](_0x9c602d[_0x1df5('0x38')][_0x1df5('0x28')]);}return _0xee2495[_0x1df5('0x56')](_0x31a69a);}})[_0x1df5('0x1a')](function(_0x36e0f3){if(_0x36e0f3){return _0x36e0f3?{'count':_0x246c6c,'rows':_0x36e0f3}:null;}})[_0x1df5('0x1a')](respondWithResult(_0xfbb172,null))[_0x1df5('0x24')](handleError(_0xfbb172,null));};exports[_0x1df5('0x57')]=function(_0x157af0,_0x322f38,_0x175ec0){var _0x2ef410={};var _0x237964={};var _0x2aae39;var _0x2313ec;return db[_0x1df5('0x35')][_0x1df5('0x58')]({'where':{'id':_0x157af0[_0x1df5('0x4f')]['id']}})[_0x1df5('0x1a')](handleEntityNotFound(_0x322f38,null))['then'](function(_0x580c1f){if(_0x580c1f){_0x2aae39=_0x580c1f;_0x237964[_0x1df5('0x36')]=_[_0x1df5('0x37')](db['ZendeskField'][_0x1df5('0x50')]);_0x237964[_0x1df5('0x38')]=_['keys'](_0x157af0[_0x1df5('0x38')]);_0x237964[_0x1df5('0x41')]=_[_0x1df5('0x39')](_0x237964['model'],_0x237964[_0x1df5('0x38')]);_0x2ef410['attributes']=_[_0x1df5('0x39')](_0x237964[_0x1df5('0x36')],qs[_0x1df5('0x3b')](_0x157af0[_0x1df5('0x38')]['fields']));_0x2ef410['attributes']=_0x2ef410[_0x1df5('0x3a')][_0x1df5('0x51')]?_0x2ef410[_0x1df5('0x3a')]:_0x237964[_0x1df5('0x36')];_0x2ef410['order']=qs[_0x1df5('0x3f')](_0x157af0[_0x1df5('0x38')][_0x1df5('0x3f')]);_0x2ef410[_0x1df5('0x40')]=qs[_0x1df5('0x41')](_['pick'](_0x157af0[_0x1df5('0x38')],_0x237964['filters']));if(_0x157af0[_0x1df5('0x38')][_0x1df5('0x48')]){_0x2ef410[_0x1df5('0x40')]=_[_0x1df5('0x43')](_0x2ef410[_0x1df5('0x40')],{'$or':_[_0x1df5('0x44')](_0x2ef410[_0x1df5('0x3a')],function(_0x43c51c){var _0x4bedcf={};_0x4bedcf[_0x43c51c]={'$like':'%'+_0x157af0[_0x1df5('0x38')]['filter']+'%'};return _0x4bedcf;})});}_0x2ef410=_[_0x1df5('0x43')]({},_0x2ef410,_0x157af0[_0x1df5('0x49')]);return _0x2aae39[_0x1df5('0x57')](_0x2ef410);}})[_0x1df5('0x1a')](function(_0x36e016){if(_0x36e016){_0x2313ec=_0x36e016[_0x1df5('0x51')];if(!_0x157af0['query'][_0x1df5('0x3c')]('nolimit')){_0x2ef410[_0x1df5('0x29')]=qs['limit'](_0x157af0[_0x1df5('0x38')][_0x1df5('0x29')]);_0x2ef410['offset']=qs['offset'](_0x157af0[_0x1df5('0x38')][_0x1df5('0x28')]);}return _0x2aae39[_0x1df5('0x57')](_0x2ef410);}})[_0x1df5('0x1a')](function(_0x18225b){if(_0x18225b){return _0x18225b?{'count':_0x2313ec,'rows':_0x18225b}:null;}})[_0x1df5('0x1a')](respondWithResult(_0x322f38,null))[_0x1df5('0x24')](handleError(_0x322f38,null));};exports[_0x1df5('0x59')]=function(_0x21ceca,_0x4428eb,_0x3f01aa){var _0x2200d9={};var _0x302ba9={};var _0x5673a9;var _0x464d56;return db[_0x1df5('0x35')][_0x1df5('0x58')]({'where':{'id':_0x21ceca[_0x1df5('0x4f')]['id']}})[_0x1df5('0x1a')](handleEntityNotFound(_0x4428eb,null))[_0x1df5('0x1a')](function(_0x4d2e9e){if(_0x4d2e9e){_0x5673a9=_0x4d2e9e;_0x302ba9['model']=_[_0x1df5('0x37')](db[_0x1df5('0x5a')][_0x1df5('0x50')]);_0x302ba9[_0x1df5('0x38')]=_['keys'](_0x21ceca[_0x1df5('0x38')]);_0x302ba9[_0x1df5('0x41')]=_[_0x1df5('0x39')](_0x302ba9[_0x1df5('0x36')],_0x302ba9[_0x1df5('0x38')]);_0x2200d9['attributes']=_[_0x1df5('0x39')](_0x302ba9[_0x1df5('0x36')],qs[_0x1df5('0x3b')](_0x21ceca[_0x1df5('0x38')]['fields']));_0x2200d9[_0x1df5('0x3a')]=_0x2200d9[_0x1df5('0x3a')][_0x1df5('0x51')]?_0x2200d9[_0x1df5('0x3a')]:_0x302ba9['model'];_0x2200d9[_0x1df5('0x3e')]=qs[_0x1df5('0x3f')](_0x21ceca[_0x1df5('0x38')][_0x1df5('0x3f')]);_0x2200d9['where']=qs['filters'](_[_0x1df5('0x42')](_0x21ceca['query'],_0x302ba9[_0x1df5('0x41')]));if(_0x21ceca[_0x1df5('0x38')][_0x1df5('0x48')]){_0x2200d9[_0x1df5('0x40')]=_[_0x1df5('0x43')](_0x2200d9[_0x1df5('0x40')],{'$or':_[_0x1df5('0x44')](_0x2200d9[_0x1df5('0x3a')],function(_0x218ccf){var _0x200e24={};_0x200e24[_0x218ccf]={'$like':'%'+_0x21ceca[_0x1df5('0x38')][_0x1df5('0x48')]+'%'};return _0x200e24;})});}_0x2200d9=_[_0x1df5('0x43')]({},_0x2200d9,_0x21ceca[_0x1df5('0x49')]);return _0x5673a9[_0x1df5('0x59')](_0x2200d9);}})[_0x1df5('0x1a')](function(_0x2a2040){if(_0x2a2040){_0x464d56=_0x2a2040['length'];if(!_0x21ceca[_0x1df5('0x38')][_0x1df5('0x3c')](_0x1df5('0x3d'))){_0x2200d9['limit']=qs['limit'](_0x21ceca[_0x1df5('0x38')]['limit']);_0x2200d9['offset']=qs['offset'](_0x21ceca[_0x1df5('0x38')][_0x1df5('0x28')]);}return _0x5673a9[_0x1df5('0x59')](_0x2200d9);}})[_0x1df5('0x1a')](function(_0x33dc41){if(_0x33dc41){return _0x33dc41?{'count':_0x464d56,'rows':_0x33dc41}:null;}})[_0x1df5('0x1a')](respondWithResult(_0x4428eb,null))[_0x1df5('0x24')](handleError(_0x4428eb,null));};exports[_0x1df5('0x5b')]=function(_0x2f2dd0,_0x1f9f3a,_0x4c926f){if(_0x2f2dd0['body']['id']){delete _0x2f2dd0[_0x1df5('0x53')]['id'];}return db[_0x1df5('0x35')][_0x1df5('0x58')]({'where':{'id':_0x2f2dd0[_0x1df5('0x4f')]['id']}})['then'](handleEntityNotFound(_0x1f9f3a,null))['then'](function(_0x4112f8){if(_0x4112f8){return _0x4112f8['setTags'](_0x2f2dd0[_0x1df5('0x53')][_0x1df5('0x5c')]||[]);}return null;})['then'](respondWithResult(_0x1f9f3a,null))[_0x1df5('0x24')](handleError(_0x1f9f3a,null));};
\ No newline at end of file
index 61f1d5d..7f503bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb61=['rimraf','./intZendeskConfiguration.attributes','exports','define','ZendeskConfiguration','int_zendesk_configurations','lodash','../../config/logger','api','moment','bluebird','request-promise','path'];(function(_0x43f2ed,_0x18ef91){var _0x5f452f=function(_0x4616df){while(--_0x4616df){_0x43f2ed['push'](_0x43f2ed['shift']());}};_0x5f452f(++_0x18ef91);}(_0xbb61,0x131));var _0x1bb6=function(_0x352e09,_0x37a7da){_0x352e09=_0x352e09-0x0;var _0x1b7094=_0xbb61[_0x352e09];return _0x1b7094;};'use strict';var _=require(_0x1bb6('0x0'));var util=require('util');var logger=require(_0x1bb6('0x1'))(_0x1bb6('0x2'));var moment=require(_0x1bb6('0x3'));var BPromise=require(_0x1bb6('0x4'));var rp=require(_0x1bb6('0x5'));var fs=require('fs');var path=require(_0x1bb6('0x6'));var rimraf=require(_0x1bb6('0x7'));var config=require('../../config/environment');var attributes=require(_0x1bb6('0x8'));module[_0x1bb6('0x9')]=function(_0x2d59c2,_0x4e4b01){return _0x2d59c2[_0x1bb6('0xa')](_0x1bb6('0xb'),attributes,{'tableName':_0x1bb6('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa777=['rimraf','../../config/environment','./intZendeskConfiguration.attributes','exports','define','util','../../config/logger','api','moment','bluebird','path'];(function(_0x7f677f,_0x5f2c1c){var _0x5acea1=function(_0x21e95e){while(--_0x21e95e){_0x7f677f['push'](_0x7f677f['shift']());}};_0x5acea1(++_0x5f2c1c);}(_0xa777,0x102));var _0x7a77=function(_0x22388f,_0x512d0a){_0x22388f=_0x22388f-0x0;var _0x21a9fe=_0xa777[_0x22388f];return _0x21a9fe;};'use strict';var _=require('lodash');var util=require(_0x7a77('0x0'));var logger=require(_0x7a77('0x1'))(_0x7a77('0x2'));var moment=require(_0x7a77('0x3'));var BPromise=require(_0x7a77('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x7a77('0x5'));var rimraf=require(_0x7a77('0x6'));var config=require(_0x7a77('0x7'));var attributes=require(_0x7a77('0x8'));module[_0x7a77('0x9')]=function(_0x493a5f,_0x451da3){return _0x493a5f[_0x7a77('0xa')]('ZendeskConfiguration',attributes,{'tableName':'int_zendesk_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4b17983..4f58c16 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1606=['../../config/environment','jayson/promise','client','http','request','info','request\x20sent','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','ZendeskConfiguration,\x20%s,\x20%s','message','catch','lodash','util','moment','bluebird','ioredis','../../config/utils','../../config/logger'];(function(_0x5e6bec,_0x1eb54d){var _0x5dc5cf=function(_0x59429a){while(--_0x59429a){_0x5e6bec['push'](_0x5e6bec['shift']());}};_0x5dc5cf(++_0x1eb54d);}(_0x1606,0xd5));var _0x6160=function(_0x58d9da,_0x1eb851){_0x58d9da=_0x58d9da-0x0;var _0xa23363=_0x1606[_0x58d9da];return _0xa23363;};'use strict';var _=require(_0x6160('0x0'));var util=require(_0x6160('0x1'));var moment=require(_0x6160('0x2'));var BPromise=require(_0x6160('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x6160('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x6160('0x5'));var logger=require(_0x6160('0x6'))('rpc');var config=require(_0x6160('0x7'));var jayson=require(_0x6160('0x8'));var client=jayson[_0x6160('0x9')][_0x6160('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x12b48f,_0xa809b2,_0x14ae5a){return new BPromise(function(_0x30478a,_0x23cd0b){return client[_0x6160('0xb')](_0x12b48f,_0x14ae5a)['then'](function(_0x339601){logger[_0x6160('0xc')]('ZendeskConfiguration,\x20%s,\x20%s',_0xa809b2,_0x6160('0xd'));logger[_0x6160('0xe')](_0x6160('0xf'),_0xa809b2,_0x6160('0xd'),JSON[_0x6160('0x10')](_0x339601));if(_0x339601[_0x6160('0x11')]){if(_0x339601[_0x6160('0x11')][_0x6160('0x12')]===0x1f4){logger[_0x6160('0x11')](_0x6160('0x13'),_0xa809b2,_0x339601[_0x6160('0x11')][_0x6160('0x14')]);return _0x23cd0b(_0x339601[_0x6160('0x11')][_0x6160('0x14')]);}logger['error'](_0x6160('0x13'),_0xa809b2,_0x339601[_0x6160('0x11')][_0x6160('0x14')]);return _0x30478a(_0x339601[_0x6160('0x11')][_0x6160('0x14')]);}else{logger[_0x6160('0xc')](_0x6160('0x13'),_0xa809b2,_0x6160('0xd'));_0x30478a(_0x339601['result'][_0x6160('0x14')]);}})[_0x6160('0x15')](function(_0x1cb61d){logger[_0x6160('0x11')](_0x6160('0x13'),_0xa809b2,_0x1cb61d);_0x23cd0b(_0x1cb61d);});});}
\ No newline at end of file
+var _0x23dc=['ZendeskConfiguration,\x20%s,\x20%s','catch','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','client','http','request','then','info','request\x20sent','error','message'];(function(_0x510dbb,_0xa8a03){var _0x3df997=function(_0x23f852){while(--_0x23f852){_0x510dbb['push'](_0x510dbb['shift']());}};_0x3df997(++_0xa8a03);}(_0x23dc,0x142));var _0xc23d=function(_0x13e06c,_0x320aef){_0x13e06c=_0x13e06c-0x0;var _0x35dab9=_0x23dc[_0x13e06c];return _0x35dab9;};'use strict';var _=require('lodash');var util=require(_0xc23d('0x0'));var moment=require('moment');var BPromise=require(_0xc23d('0x1'));var rs=require(_0xc23d('0x2'));var fs=require('fs');var Redis=require(_0xc23d('0x3'));var db=require(_0xc23d('0x4'))['db'];var utils=require(_0xc23d('0x5'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xc23d('0x6')][_0xc23d('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x4e2fa0,_0x5d6f1d,_0x57c750){return new BPromise(function(_0x54283d,_0x2d9f8e){return client[_0xc23d('0x8')](_0x4e2fa0,_0x57c750)[_0xc23d('0x9')](function(_0x4336b1){logger[_0xc23d('0xa')]('ZendeskConfiguration,\x20%s,\x20%s',_0x5d6f1d,_0xc23d('0xb'));logger['debug']('ZendeskConfiguration,\x20%s,\x20%s,\x20%s',_0x5d6f1d,_0xc23d('0xb'),JSON['stringify'](_0x4336b1));if(_0x4336b1[_0xc23d('0xc')]){if(_0x4336b1[_0xc23d('0xc')]['code']===0x1f4){logger[_0xc23d('0xc')]('ZendeskConfiguration,\x20%s,\x20%s',_0x5d6f1d,_0x4336b1[_0xc23d('0xc')]['message']);return _0x2d9f8e(_0x4336b1['error'][_0xc23d('0xd')]);}logger['error'](_0xc23d('0xe'),_0x5d6f1d,_0x4336b1[_0xc23d('0xc')][_0xc23d('0xd')]);return _0x54283d(_0x4336b1[_0xc23d('0xc')][_0xc23d('0xd')]);}else{logger['info'](_0xc23d('0xe'),_0x5d6f1d,_0xc23d('0xb'));_0x54283d(_0x4336b1['result'][_0xc23d('0xd')]);}})[_0xc23d('0xf')](function(_0x243088){logger[_0xc23d('0xc')](_0xc23d('0xe'),_0x5d6f1d,_0x243088);_0x2d9f8e(_0x243088);});});}
\ No newline at end of file
index 413b184..f0b7346 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['/:id','update','delete','multer','util','path','Router','../../components/interaction/service','../../config/environment','./intZendeskField.controller','get','isAuthenticated'];(function(_0x3cda25,_0x520a52){var _0x57fe24=function(_0x1fd6e8){while(--_0x1fd6e8){_0x3cda25['push'](_0x3cda25['shift']());}};_0x57fe24(++_0x520a52);}(_0xa9e0,0x123));var _0x0a9e=function(_0x1b828b,_0x344400){_0x1b828b=_0x1b828b-0x0;var _0x98da1a=_0xa9e0[_0x1b828b];return _0x98da1a;};'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['post']('/',auth[_0x0a9e('0x8')](),controller['create']);router['put'](_0x0a9e('0x9'),auth[_0x0a9e('0x8')](),controller[_0x0a9e('0xa')]);router[_0x0a9e('0xb')](_0x0a9e('0x9'),auth[_0x0a9e('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0xa9e0=['/:id','update','delete','multer','util','path','Router','../../components/interaction/service','../../config/environment','./intZendeskField.controller','get','isAuthenticated'];(function(_0x482c8f,_0xc5c78a){var _0xba6649=function(_0x5e5044){while(--_0x5e5044){_0x482c8f['push'](_0x482c8f['shift']());}};_0xba6649(++_0xc5c78a);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0xa9e0[_0x3947c9];return _0x2e7871;};'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['post']('/',auth[_0x0a9e('0x8')](),controller['create']);router['put'](_0x0a9e('0x9'),auth[_0x0a9e('0x8')](),controller[_0x0a9e('0xa')]);router[_0x0a9e('0xb')](_0x0a9e('0x9'),auth[_0x0a9e('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 6f0523f..c0ab445 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6324=['variable','BOOLEAN','sequelize','exports','ENUM','string','customVariable','STRING'];(function(_0x5d3dbb,_0x7bc90d){var _0x3442d1=function(_0x118d1b){while(--_0x118d1b){_0x5d3dbb['push'](_0x5d3dbb['shift']());}};_0x3442d1(++_0x7bc90d);}(_0x6324,0x142));var _0x4632=function(_0x650e11,_0x284f86){_0x650e11=_0x650e11-0x0;var _0x1a9b47=_0x6324[_0x650e11];return _0x1a9b47;};'use strict';var Sequelize=require(_0x4632('0x0'));module[_0x4632('0x1')]={'type':{'type':Sequelize[_0x4632('0x2')](_0x4632('0x3'),'variable',_0x4632('0x4'),'keyValue'),'defaultValue':_0x4632('0x3')},'content':{'type':Sequelize['STRING']},'key':{'type':Sequelize[_0x4632('0x5')]},'keyType':{'type':Sequelize['ENUM'](_0x4632('0x3'),_0x4632('0x6'),_0x4632('0x4'))},'keyContent':{'type':Sequelize[_0x4632('0x5')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize[_0x4632('0x5')]},'customField':{'type':Sequelize[_0x4632('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x4632('0x5')]}};
\ No newline at end of file
+var _0xe706=['BOOLEAN','sequelize','exports','ENUM','variable','customVariable','keyValue','string','STRING'];(function(_0x5c6aeb,_0x1a3eda){var _0x518281=function(_0x5bcb78){while(--_0x5bcb78){_0x5c6aeb['push'](_0x5c6aeb['shift']());}};_0x518281(++_0x1a3eda);}(_0xe706,0xa3));var _0x6e70=function(_0x493df0,_0x3808fe){_0x493df0=_0x493df0-0x0;var _0x4b6a03=_0xe706[_0x493df0];return _0x4b6a03;};'use strict';var Sequelize=require(_0x6e70('0x0'));module[_0x6e70('0x1')]={'type':{'type':Sequelize[_0x6e70('0x2')]('string',_0x6e70('0x3'),_0x6e70('0x4'),_0x6e70('0x5')),'defaultValue':_0x6e70('0x6')},'content':{'type':Sequelize[_0x6e70('0x7')]},'key':{'type':Sequelize[_0x6e70('0x7')]},'keyType':{'type':Sequelize[_0x6e70('0x2')](_0x6e70('0x6'),_0x6e70('0x3'),_0x6e70('0x4'))},'keyContent':{'type':Sequelize[_0x6e70('0x7')]},'idField':{'type':Sequelize[_0x6e70('0x7')]},'nameField':{'type':Sequelize[_0x6e70('0x7')]},'customField':{'type':Sequelize[_0x6e70('0x8')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x6e70('0x7')]}};
\ No newline at end of file
index 77ced4e..4d7a8b7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa701=['params','include','find','create','body','eml-format','rimraf','request-promise','mustache','util','path','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','stack','name','send','index','ZendeskField','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','nolimit','sort','where','pick','filter','merge','map','type','key','field','options','includeAll','findAll','rows','catch'];(function(_0x337115,_0x3f4b57){var _0x94663f=function(_0x24cc07){while(--_0x24cc07){_0x337115['push'](_0x337115['shift']());}};_0x94663f(++_0x3f4b57);}(_0xa701,0xd4));var _0x1a70=function(_0x1bcb4d,_0x2a09d7){_0x1bcb4d=_0x1bcb4d-0x0;var _0x43948d=_0xa701[_0x1bcb4d];return _0x43948d;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x1a70('0x0'));var rimraf=require(_0x1a70('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x1a70('0x2'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x1a70('0x3'));var util=require(_0x1a70('0x4'));var path=require(_0x1a70('0x5'));var sox=require(_0x1a70('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x1a70('0x7'));var squel=require(_0x1a70('0x8'));var crypto=require(_0x1a70('0x9'));var jsforce=require(_0x1a70('0xa'));var deskjs=require(_0x1a70('0xb'));var toCsv=require(_0x1a70('0xc'));var querystring=require(_0x1a70('0xd'));var Papa=require('papaparse');var Redis=require(_0x1a70('0xe'));var authService=require(_0x1a70('0xf'));var qs=require(_0x1a70('0x10'));var hardwareService=require(_0x1a70('0x11'));var logger=require('../../config/logger')(_0x1a70('0x12'));var utils=require(_0x1a70('0x13'));var config=require(_0x1a70('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5d6d1f,_0x3daffa){_0x3daffa=_0x3daffa||0xcc;return function(_0x51a47a){if(_0x51a47a){return _0x5d6d1f[_0x1a70('0x15')](_0x3daffa);}return _0x5d6d1f['status'](_0x3daffa)[_0x1a70('0x16')]();};}function respondWithResult(_0x516efb,_0x3623fd){_0x3623fd=_0x3623fd||0xc8;return function(_0x59fd45){if(_0x59fd45){return _0x516efb[_0x1a70('0x17')](_0x3623fd)[_0x1a70('0x18')](_0x59fd45);}};}function respondWithFilteredResult(_0x10b71a,_0x92fb4c){return function(_0x123523){if(_0x123523){var _0x5d45ab=_0x123523[_0x1a70('0x19')],_0x5a5b4c=_0x92fb4c[_0x1a70('0x1a')],_0x318fcc=_0x92fb4c['offset']+_0x92fb4c[_0x1a70('0x1b')],_0x5ae53c;if(_0x318fcc>=_0x5d45ab){_0x318fcc=_0x5d45ab;_0x5ae53c=0xc8;}else{_0x5ae53c=0xce;}_0x10b71a['status'](_0x5ae53c);return _0x10b71a[_0x1a70('0x1c')](_0x1a70('0x1d'),_0x5a5b4c+'-'+_0x318fcc+'/'+_0x5d45ab)['json'](_0x123523);}return null;};}function patchUpdates(_0x117ac1){return function(_0x35de3b){try{jsonpatch['apply'](_0x35de3b,_0x117ac1,!![]);}catch(_0x56fc92){return BPromise[_0x1a70('0x1e')](_0x56fc92);}return _0x35de3b[_0x1a70('0x1f')]();};}function saveUpdates(_0x30ec3d,_0x3db574){return function(_0x11023c){if(_0x11023c){return _0x11023c[_0x1a70('0x20')](_0x30ec3d)[_0x1a70('0x21')](function(_0x1692e0){return _0x1692e0;});}return null;};}function removeEntity(_0x64dbe4,_0x476782){return function(_0x1832dc){if(_0x1832dc){return _0x1832dc[_0x1a70('0x22')]()[_0x1a70('0x21')](function(){_0x64dbe4[_0x1a70('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4fcf57,_0x3f9cdf){return function(_0x20f1b1){if(!_0x20f1b1){_0x4fcf57[_0x1a70('0x15')](0x194);}return _0x20f1b1;};}function handleError(_0x3597dc,_0x467ec6){_0x467ec6=_0x467ec6||0x1f4;return function(_0x16f2e6){logger['error'](_0x16f2e6[_0x1a70('0x23')]);if(_0x16f2e6[_0x1a70('0x24')]){delete _0x16f2e6['name'];}_0x3597dc[_0x1a70('0x17')](_0x467ec6)[_0x1a70('0x25')](_0x16f2e6);};}exports[_0x1a70('0x26')]=function(_0x24dee2,_0x3cd7fb){var _0x2c6cc8={},_0x16fc4a={},_0xc18572={'count':0x0,'rows':[]};var _0x445c76=db[_0x1a70('0x27')][_0x1a70('0x28')];_0x16fc4a['model']=_[_0x1a70('0x29')](_0x445c76);_0x16fc4a[_0x1a70('0x2a')]=_[_0x1a70('0x29')](_0x24dee2[_0x1a70('0x2a')]);_0x16fc4a[_0x1a70('0x2b')]=_[_0x1a70('0x2c')](_0x16fc4a[_0x1a70('0x2d')],_0x16fc4a[_0x1a70('0x2a')]);_0x2c6cc8[_0x1a70('0x2e')]=_[_0x1a70('0x2c')](_0x16fc4a[_0x1a70('0x2d')],qs[_0x1a70('0x2f')](_0x24dee2['query'][_0x1a70('0x2f')]));_0x2c6cc8['attributes']=_0x2c6cc8[_0x1a70('0x2e')][_0x1a70('0x30')]?_0x2c6cc8[_0x1a70('0x2e')]:_0x16fc4a[_0x1a70('0x2d')];if(!_0x24dee2[_0x1a70('0x2a')]['hasOwnProperty'](_0x1a70('0x31'))){_0x2c6cc8[_0x1a70('0x1b')]=qs[_0x1a70('0x1b')](_0x24dee2[_0x1a70('0x2a')][_0x1a70('0x1b')]);_0x2c6cc8[_0x1a70('0x1a')]=qs[_0x1a70('0x1a')](_0x24dee2[_0x1a70('0x2a')]['offset']);}_0x2c6cc8['order']=qs[_0x1a70('0x32')](_0x24dee2[_0x1a70('0x2a')][_0x1a70('0x32')]);_0x2c6cc8[_0x1a70('0x33')]=qs[_0x1a70('0x2b')](_[_0x1a70('0x34')](_0x24dee2[_0x1a70('0x2a')],_0x16fc4a[_0x1a70('0x2b')]));if(_0x24dee2[_0x1a70('0x2a')][_0x1a70('0x35')]){_0x2c6cc8['where']=_[_0x1a70('0x36')](_0x2c6cc8['where'],{'$or':_[_0x1a70('0x37')](_0x445c76,function(_0x5946c5){if(_0x5946c5[_0x1a70('0x38')][_0x1a70('0x39')]!=='VIRTUAL'){var _0x38e478={};_0x38e478[_0x5946c5[_0x1a70('0x3a')]]={'$like':'%'+_0x24dee2[_0x1a70('0x2a')][_0x1a70('0x35')]+'%'};return _0x38e478;}})});}_0x2c6cc8=_['merge']({},_0x2c6cc8,_0x24dee2[_0x1a70('0x3b')]);var _0x32942f={'where':_0x2c6cc8[_0x1a70('0x33')]};return db[_0x1a70('0x27')][_0x1a70('0x19')](_0x32942f)[_0x1a70('0x21')](function(_0xaf1b17){_0xc18572[_0x1a70('0x19')]=_0xaf1b17;if(_0x24dee2['query'][_0x1a70('0x3c')]){_0x2c6cc8['include']=[{'all':!![]}];}return db[_0x1a70('0x27')][_0x1a70('0x3d')](_0x2c6cc8);})[_0x1a70('0x21')](function(_0x1d8848){_0xc18572[_0x1a70('0x3e')]=_0x1d8848;return _0xc18572;})['then'](respondWithFilteredResult(_0x3cd7fb,_0x2c6cc8))[_0x1a70('0x3f')](handleError(_0x3cd7fb,null));};exports['show']=function(_0x8b1602,_0x1271d8){var _0x2b1cc1={'raw':!![],'where':{'id':_0x8b1602[_0x1a70('0x40')]['id']}},_0x21c99f={};_0x21c99f[_0x1a70('0x2d')]=_[_0x1a70('0x29')](db['ZendeskField'][_0x1a70('0x28')]);_0x21c99f[_0x1a70('0x2a')]=_[_0x1a70('0x29')](_0x8b1602[_0x1a70('0x2a')]);_0x21c99f[_0x1a70('0x2b')]=_[_0x1a70('0x2c')](_0x21c99f[_0x1a70('0x2d')],_0x21c99f[_0x1a70('0x2a')]);_0x2b1cc1[_0x1a70('0x2e')]=_['intersection'](_0x21c99f[_0x1a70('0x2d')],qs[_0x1a70('0x2f')](_0x8b1602[_0x1a70('0x2a')][_0x1a70('0x2f')]));_0x2b1cc1[_0x1a70('0x2e')]=_0x2b1cc1[_0x1a70('0x2e')][_0x1a70('0x30')]?_0x2b1cc1[_0x1a70('0x2e')]:_0x21c99f['model'];if(_0x8b1602['query'][_0x1a70('0x3c')]){_0x2b1cc1[_0x1a70('0x41')]=[{'all':!![]}];}_0x2b1cc1=_['merge']({},_0x2b1cc1,_0x8b1602[_0x1a70('0x3b')]);return db['ZendeskField'][_0x1a70('0x42')](_0x2b1cc1)[_0x1a70('0x21')](handleEntityNotFound(_0x1271d8,null))['then'](respondWithResult(_0x1271d8,null))[_0x1a70('0x3f')](handleError(_0x1271d8,null));};exports[_0x1a70('0x43')]=function(_0x13b475,_0x579e1c){return db[_0x1a70('0x27')][_0x1a70('0x43')](_0x13b475['body'],{})['then'](respondWithResult(_0x579e1c,0xc9))[_0x1a70('0x3f')](handleError(_0x579e1c,null));};exports['update']=function(_0xbcc0eb,_0xe3eebc){if(_0xbcc0eb[_0x1a70('0x44')]['id']){delete _0xbcc0eb[_0x1a70('0x44')]['id'];}return db[_0x1a70('0x27')][_0x1a70('0x42')]({'where':{'id':_0xbcc0eb['params']['id']}})[_0x1a70('0x21')](handleEntityNotFound(_0xe3eebc,null))[_0x1a70('0x21')](saveUpdates(_0xbcc0eb['body'],null))[_0x1a70('0x21')](respondWithResult(_0xe3eebc,null))[_0x1a70('0x3f')](handleError(_0xe3eebc,null));};exports[_0x1a70('0x22')]=function(_0x1a7a99,_0x40e227){return db['ZendeskField'][_0x1a70('0x42')]({'where':{'id':_0x1a7a99[_0x1a70('0x40')]['id']}})[_0x1a70('0x21')](handleEntityNotFound(_0x40e227,null))['then'](removeEntity(_0x40e227,null))[_0x1a70('0x3f')](handleError(_0x40e227,null));};
\ No newline at end of file
+var _0xe643=['../../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','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','rows','show','params','ZendeskField','catch','create','body','destroy','find','html-pdf','eml-format','zip-dir','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis'];(function(_0x307faa,_0x19d4e4){var _0x4a67f8=function(_0x44677e){while(--_0x44677e){_0x307faa['push'](_0x307faa['shift']());}};_0x4a67f8(++_0x19d4e4);}(_0xe643,0x84));var _0x3e64=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xe643[_0xa464c9];return _0x3d73c4;};'use strict';var pdf=require(_0x3e64('0x0'));var emlformat=require(_0x3e64('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x3e64('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3e64('0x3'));var moment=require(_0x3e64('0x4'));var BPromise=require(_0x3e64('0x5'));var Mustache=require(_0x3e64('0x6'));var util=require(_0x3e64('0x7'));var path=require('path');var sox=require(_0x3e64('0x8'));var csv=require(_0x3e64('0x9'));var ejs=require(_0x3e64('0xa'));var fs=require('fs');var _=require(_0x3e64('0xb'));var squel=require(_0x3e64('0xc'));var crypto=require(_0x3e64('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x3e64('0xe'));var toCsv=require(_0x3e64('0x9'));var querystring=require(_0x3e64('0xf'));var Papa=require(_0x3e64('0x10'));var Redis=require(_0x3e64('0x11'));var authService=require(_0x3e64('0x12'));var qs=require(_0x3e64('0x13'));var hardwareService=require(_0x3e64('0x14'));var logger=require(_0x3e64('0x15'))(_0x3e64('0x16'));var utils=require('../../config/utils');var config=require(_0x3e64('0x17'));var db=require(_0x3e64('0x18'))['db'];function respondWithStatusCode(_0x1ae3dd,_0xe8dc1d){_0xe8dc1d=_0xe8dc1d||0xcc;return function(_0x476a4d){if(_0x476a4d){return _0x1ae3dd[_0x3e64('0x19')](_0xe8dc1d);}return _0x1ae3dd[_0x3e64('0x1a')](_0xe8dc1d)[_0x3e64('0x1b')]();};}function respondWithResult(_0x184ebd,_0x5e4501){_0x5e4501=_0x5e4501||0xc8;return function(_0x7610d5){if(_0x7610d5){return _0x184ebd[_0x3e64('0x1a')](_0x5e4501)[_0x3e64('0x1c')](_0x7610d5);}};}function respondWithFilteredResult(_0x4f1269,_0x5b53b2){return function(_0x4eab61){if(_0x4eab61){var _0x4bafd0=_0x4eab61[_0x3e64('0x1d')],_0x4a8488=_0x5b53b2[_0x3e64('0x1e')],_0x4d58da=_0x5b53b2[_0x3e64('0x1e')]+_0x5b53b2[_0x3e64('0x1f')],_0x3764fb;if(_0x4d58da>=_0x4bafd0){_0x4d58da=_0x4bafd0;_0x3764fb=0xc8;}else{_0x3764fb=0xce;}_0x4f1269[_0x3e64('0x1a')](_0x3764fb);return _0x4f1269[_0x3e64('0x20')](_0x3e64('0x21'),_0x4a8488+'-'+_0x4d58da+'/'+_0x4bafd0)[_0x3e64('0x1c')](_0x4eab61);}return null;};}function patchUpdates(_0x5eff76){return function(_0x3e9c5e){try{jsonpatch['apply'](_0x3e9c5e,_0x5eff76,!![]);}catch(_0x5ba990){return BPromise[_0x3e64('0x22')](_0x5ba990);}return _0x3e9c5e[_0x3e64('0x23')]();};}function saveUpdates(_0x5d4b86,_0x3c6ac4){return function(_0x21eff6){if(_0x21eff6){return _0x21eff6[_0x3e64('0x24')](_0x5d4b86)[_0x3e64('0x25')](function(_0x15b382){return _0x15b382;});}return null;};}function removeEntity(_0x24b368,_0x39d2c2){return function(_0x579f31){if(_0x579f31){return _0x579f31['destroy']()[_0x3e64('0x25')](function(){_0x24b368[_0x3e64('0x1a')](0xcc)[_0x3e64('0x1b')]();});}};}function handleEntityNotFound(_0x438507,_0xc086db){return function(_0x38c5e6){if(!_0x38c5e6){_0x438507[_0x3e64('0x19')](0x194);}return _0x38c5e6;};}function handleError(_0x1a09bd,_0x402649){_0x402649=_0x402649||0x1f4;return function(_0x272609){logger['error'](_0x272609[_0x3e64('0x26')]);if(_0x272609[_0x3e64('0x27')]){delete _0x272609[_0x3e64('0x27')];}_0x1a09bd[_0x3e64('0x1a')](_0x402649)[_0x3e64('0x28')](_0x272609);};}exports[_0x3e64('0x29')]=function(_0x4f3889,_0x325ae3){var _0x2342de={},_0x5e7614={},_0x32e35b={'count':0x0,'rows':[]};var _0x30b402=db['ZendeskField'][_0x3e64('0x2a')];_0x5e7614[_0x3e64('0x2b')]=_[_0x3e64('0x2c')](_0x30b402);_0x5e7614[_0x3e64('0x2d')]=_[_0x3e64('0x2c')](_0x4f3889[_0x3e64('0x2d')]);_0x5e7614[_0x3e64('0x2e')]=_[_0x3e64('0x2f')](_0x5e7614[_0x3e64('0x2b')],_0x5e7614['query']);_0x2342de[_0x3e64('0x30')]=_[_0x3e64('0x2f')](_0x5e7614[_0x3e64('0x2b')],qs[_0x3e64('0x31')](_0x4f3889[_0x3e64('0x2d')][_0x3e64('0x31')]));_0x2342de[_0x3e64('0x30')]=_0x2342de[_0x3e64('0x30')][_0x3e64('0x32')]?_0x2342de[_0x3e64('0x30')]:_0x5e7614[_0x3e64('0x2b')];if(!_0x4f3889['query'][_0x3e64('0x33')](_0x3e64('0x34'))){_0x2342de[_0x3e64('0x1f')]=qs['limit'](_0x4f3889[_0x3e64('0x2d')][_0x3e64('0x1f')]);_0x2342de[_0x3e64('0x1e')]=qs[_0x3e64('0x1e')](_0x4f3889[_0x3e64('0x2d')][_0x3e64('0x1e')]);}_0x2342de[_0x3e64('0x35')]=qs['sort'](_0x4f3889[_0x3e64('0x2d')][_0x3e64('0x36')]);_0x2342de[_0x3e64('0x37')]=qs['filters'](_['pick'](_0x4f3889[_0x3e64('0x2d')],_0x5e7614[_0x3e64('0x2e')]));if(_0x4f3889[_0x3e64('0x2d')][_0x3e64('0x38')]){_0x2342de[_0x3e64('0x37')]=_[_0x3e64('0x39')](_0x2342de[_0x3e64('0x37')],{'$or':_[_0x3e64('0x3a')](_0x30b402,function(_0x586ae6){if(_0x586ae6[_0x3e64('0x3b')][_0x3e64('0x3c')]!==_0x3e64('0x3d')){var _0x263662={};_0x263662[_0x586ae6[_0x3e64('0x3e')]]={'$like':'%'+_0x4f3889[_0x3e64('0x2d')][_0x3e64('0x38')]+'%'};return _0x263662;}})});}_0x2342de=_['merge']({},_0x2342de,_0x4f3889[_0x3e64('0x3f')]);var _0x3aa01f={'where':_0x2342de[_0x3e64('0x37')]};return db['ZendeskField'][_0x3e64('0x1d')](_0x3aa01f)[_0x3e64('0x25')](function(_0x4ef1dc){_0x32e35b[_0x3e64('0x1d')]=_0x4ef1dc;if(_0x4f3889[_0x3e64('0x2d')][_0x3e64('0x40')]){_0x2342de[_0x3e64('0x41')]=[{'all':!![]}];}return db['ZendeskField']['findAll'](_0x2342de);})[_0x3e64('0x25')](function(_0x152644){_0x32e35b[_0x3e64('0x42')]=_0x152644;return _0x32e35b;})[_0x3e64('0x25')](respondWithFilteredResult(_0x325ae3,_0x2342de))['catch'](handleError(_0x325ae3,null));};exports[_0x3e64('0x43')]=function(_0x3dacbb,_0x478d9b){var _0x4dc5c5={'raw':!![],'where':{'id':_0x3dacbb[_0x3e64('0x44')]['id']}},_0x2dfd19={};_0x2dfd19[_0x3e64('0x2b')]=_['keys'](db[_0x3e64('0x45')]['rawAttributes']);_0x2dfd19['query']=_[_0x3e64('0x2c')](_0x3dacbb[_0x3e64('0x2d')]);_0x2dfd19[_0x3e64('0x2e')]=_[_0x3e64('0x2f')](_0x2dfd19['model'],_0x2dfd19['query']);_0x4dc5c5[_0x3e64('0x30')]=_[_0x3e64('0x2f')](_0x2dfd19['model'],qs[_0x3e64('0x31')](_0x3dacbb[_0x3e64('0x2d')][_0x3e64('0x31')]));_0x4dc5c5[_0x3e64('0x30')]=_0x4dc5c5[_0x3e64('0x30')][_0x3e64('0x32')]?_0x4dc5c5[_0x3e64('0x30')]:_0x2dfd19[_0x3e64('0x2b')];if(_0x3dacbb[_0x3e64('0x2d')][_0x3e64('0x40')]){_0x4dc5c5['include']=[{'all':!![]}];}_0x4dc5c5=_['merge']({},_0x4dc5c5,_0x3dacbb[_0x3e64('0x3f')]);return db[_0x3e64('0x45')]['find'](_0x4dc5c5)['then'](handleEntityNotFound(_0x478d9b,null))[_0x3e64('0x25')](respondWithResult(_0x478d9b,null))[_0x3e64('0x46')](handleError(_0x478d9b,null));};exports[_0x3e64('0x47')]=function(_0x12ee1d,_0x1feecb){return db['ZendeskField'][_0x3e64('0x47')](_0x12ee1d[_0x3e64('0x48')],{})[_0x3e64('0x25')](respondWithResult(_0x1feecb,0xc9))[_0x3e64('0x46')](handleError(_0x1feecb,null));};exports['update']=function(_0x5e0586,_0x581470){if(_0x5e0586[_0x3e64('0x48')]['id']){delete _0x5e0586[_0x3e64('0x48')]['id'];}return db[_0x3e64('0x45')]['find']({'where':{'id':_0x5e0586[_0x3e64('0x44')]['id']}})[_0x3e64('0x25')](handleEntityNotFound(_0x581470,null))[_0x3e64('0x25')](saveUpdates(_0x5e0586[_0x3e64('0x48')],null))[_0x3e64('0x25')](respondWithResult(_0x581470,null))[_0x3e64('0x46')](handleError(_0x581470,null));};exports[_0x3e64('0x49')]=function(_0x1ec7d1,_0x699c9a){return db['ZendeskField'][_0x3e64('0x4a')]({'where':{'id':_0x1ec7d1[_0x3e64('0x44')]['id']}})[_0x3e64('0x25')](handleEntityNotFound(_0x699c9a,null))[_0x3e64('0x25')](removeEntity(_0x699c9a,null))[_0x3e64('0x46')](handleError(_0x699c9a,null));};
\ No newline at end of file
index b63b35f..91b9882 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a19=['idField','FieldId','lodash','util','api','moment','bluebird','request-promise','rimraf','../../config/environment','./intZendeskField.attributes','exports','define','ZendeskField','int_zendesk_fields','zendesk_unique_index'];(function(_0x220a65,_0x1fbea7){var _0x4e6a9b=function(_0x5a83eb){while(--_0x5a83eb){_0x220a65['push'](_0x220a65['shift']());}};_0x4e6a9b(++_0x1fbea7);}(_0x0a19,0xf2));var _0x90a1=function(_0x4b2436,_0x452299){_0x4b2436=_0x4b2436-0x0;var _0x4f5ab2=_0x0a19[_0x4b2436];return _0x4f5ab2;};'use strict';var _=require(_0x90a1('0x0'));var util=require(_0x90a1('0x1'));var logger=require('../../config/logger')(_0x90a1('0x2'));var moment=require(_0x90a1('0x3'));var BPromise=require(_0x90a1('0x4'));var rp=require(_0x90a1('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x90a1('0x6'));var config=require(_0x90a1('0x7'));var attributes=require(_0x90a1('0x8'));module[_0x90a1('0x9')]=function(_0x859236,_0xdd8906){return _0x859236[_0x90a1('0xa')](_0x90a1('0xb'),attributes,{'tableName':_0x90a1('0xc'),'paranoid':![],'indexes':[{'name':_0x90a1('0xd'),'fields':[_0x90a1('0xe'),_0x90a1('0xf')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xefc5=['zendesk_unique_index','lodash','util','../../config/logger','api','bluebird','path','rimraf','../../config/environment','./intZendeskField.attributes','exports','define','ZendeskField','int_zendesk_fields'];(function(_0xa2e6cc,_0x50de8a){var _0xa65ef2=function(_0x580817){while(--_0x580817){_0xa2e6cc['push'](_0xa2e6cc['shift']());}};_0xa65ef2(++_0x50de8a);}(_0xefc5,0x151));var _0x5efc=function(_0x261e29,_0x10fffd){_0x261e29=_0x261e29-0x0;var _0x25ef43=_0xefc5[_0x261e29];return _0x25ef43;};'use strict';var _=require(_0x5efc('0x0'));var util=require(_0x5efc('0x1'));var logger=require(_0x5efc('0x2'))(_0x5efc('0x3'));var moment=require('moment');var BPromise=require(_0x5efc('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x5efc('0x5'));var rimraf=require(_0x5efc('0x6'));var config=require(_0x5efc('0x7'));var attributes=require(_0x5efc('0x8'));module[_0x5efc('0x9')]=function(_0x4376e8,_0x451798){return _0x4376e8[_0x5efc('0xa')](_0x5efc('0xb'),attributes,{'tableName':_0x5efc('0xc'),'paranoid':![],'indexes':[{'name':_0x5efc('0xd'),'fields':['idField','FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 0f86e5f..7122c5c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9e8=['info','ZendeskField,\x20%s,\x20%s','debug','ZendeskField,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','request'];(function(_0x1b3f01,_0x1999c4){var _0x3af08e=function(_0x39be26){while(--_0x39be26){_0x1b3f01['push'](_0x1b3f01['shift']());}};_0x3af08e(++_0x1999c4);}(_0xe9e8,0x6b));var _0x8e9e=function(_0x2cf3a1,_0x2be877){_0x2cf3a1=_0x2cf3a1-0x0;var _0x6544a6=_0xe9e8[_0x2cf3a1];return _0x6544a6;};'use strict';var _=require(_0x8e9e('0x0'));var util=require(_0x8e9e('0x1'));var moment=require(_0x8e9e('0x2'));var BPromise=require(_0x8e9e('0x3'));var rs=require(_0x8e9e('0x4'));var fs=require('fs');var Redis=require(_0x8e9e('0x5'));var db=require(_0x8e9e('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0x8e9e('0x7'))(_0x8e9e('0x8'));var config=require(_0x8e9e('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x8e9e('0xa')][_0x8e9e('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x204f5c,_0x1fb8d3,_0x58f822){return new BPromise(function(_0x3b5d21,_0x2ae896){return client[_0x8e9e('0xc')](_0x204f5c,_0x58f822)['then'](function(_0x39f5e5){logger[_0x8e9e('0xd')](_0x8e9e('0xe'),_0x1fb8d3,'request\x20sent');logger[_0x8e9e('0xf')](_0x8e9e('0x10'),_0x1fb8d3,_0x8e9e('0x11'),JSON[_0x8e9e('0x12')](_0x39f5e5));if(_0x39f5e5[_0x8e9e('0x13')]){if(_0x39f5e5[_0x8e9e('0x13')][_0x8e9e('0x14')]===0x1f4){logger['error'](_0x8e9e('0xe'),_0x1fb8d3,_0x39f5e5['error'][_0x8e9e('0x15')]);return _0x2ae896(_0x39f5e5[_0x8e9e('0x13')][_0x8e9e('0x15')]);}logger[_0x8e9e('0x13')](_0x8e9e('0xe'),_0x1fb8d3,_0x39f5e5[_0x8e9e('0x13')][_0x8e9e('0x15')]);return _0x3b5d21(_0x39f5e5['error']['message']);}else{logger[_0x8e9e('0xd')](_0x8e9e('0xe'),_0x1fb8d3,'request\x20sent');_0x3b5d21(_0x39f5e5[_0x8e9e('0x16')][_0x8e9e('0x15')]);}})[_0x8e9e('0x17')](function(_0x22b2c7){logger[_0x8e9e('0x13')]('ZendeskField,\x20%s,\x20%s',_0x1fb8d3,_0x22b2c7);_0x2ae896(_0x22b2c7);});});}
\ No newline at end of file
+var _0x0565=['client','http','request','then','info','ZendeskField,\x20%s,\x20%s','request\x20sent','ZendeskField,\x20%s,\x20%s,\x20%s','stringify','code','message','error','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise'];(function(_0x335b77,_0x273122){var _0x27114a=function(_0x558285){while(--_0x558285){_0x335b77['push'](_0x335b77['shift']());}};_0x27114a(++_0x273122);}(_0x0565,0xf2));var _0x5056=function(_0x368fb9,_0x1a9895){_0x368fb9=_0x368fb9-0x0;var _0x4892fb=_0x0565[_0x368fb9];return _0x4892fb;};'use strict';var _=require(_0x5056('0x0'));var util=require(_0x5056('0x1'));var moment=require(_0x5056('0x2'));var BPromise=require(_0x5056('0x3'));var rs=require(_0x5056('0x4'));var fs=require('fs');var Redis=require(_0x5056('0x5'));var db=require(_0x5056('0x6'))['db'];var utils=require(_0x5056('0x7'));var logger=require(_0x5056('0x8'))(_0x5056('0x9'));var config=require('../../config/environment');var jayson=require(_0x5056('0xa'));var client=jayson[_0x5056('0xb')][_0x5056('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x22afb7,_0x4b8280,_0x52b01f){return new BPromise(function(_0x38f74,_0x223c92){return client[_0x5056('0xd')](_0x22afb7,_0x52b01f)[_0x5056('0xe')](function(_0x2144a9){logger[_0x5056('0xf')](_0x5056('0x10'),_0x4b8280,_0x5056('0x11'));logger['debug'](_0x5056('0x12'),_0x4b8280,_0x5056('0x11'),JSON[_0x5056('0x13')](_0x2144a9));if(_0x2144a9['error']){if(_0x2144a9['error'][_0x5056('0x14')]===0x1f4){logger['error']('ZendeskField,\x20%s,\x20%s',_0x4b8280,_0x2144a9['error'][_0x5056('0x15')]);return _0x223c92(_0x2144a9['error'][_0x5056('0x15')]);}logger[_0x5056('0x16')](_0x5056('0x10'),_0x4b8280,_0x2144a9['error'][_0x5056('0x15')]);return _0x38f74(_0x2144a9[_0x5056('0x16')][_0x5056('0x15')]);}else{logger[_0x5056('0xf')](_0x5056('0x10'),_0x4b8280,_0x5056('0x11'));_0x38f74(_0x2144a9['result'][_0x5056('0x15')]);}})['catch'](function(_0x43db77){logger[_0x5056('0x16')](_0x5056('0x10'),_0x4b8280,_0x43db77);_0x223c92(_0x43db77);});});}
\ No newline at end of file
index eee96d5..d1cd760 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c81=['connect-timeout','express','./intZohoAccount.controller','get','isAuthenticated','index','/:id','getConfigurations','/:id/fields','getFields','post','create','/:id/configurations','addConfiguration','put','update','delete','destroy','multer','util'];(function(_0x18546c,_0x4daf94){var _0x46ef43=function(_0x559377){while(--_0x559377){_0x18546c['push'](_0x18546c['shift']());}};_0x46ef43(++_0x4daf94);}(_0x3c81,0x102));var _0x13c8=function(_0x458341,_0x12e5a0){_0x458341=_0x458341-0x0;var _0xb433a=_0x3c81[_0x458341];return _0xb433a;};'use strict';var multer=require(_0x13c8('0x0'));var util=require(_0x13c8('0x1'));var path=require('path');var timeout=require(_0x13c8('0x2'));var express=require(_0x13c8('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(_0x13c8('0x4'));router[_0x13c8('0x5')]('/',auth[_0x13c8('0x6')](),controller[_0x13c8('0x7')]);router[_0x13c8('0x5')](_0x13c8('0x8'),auth[_0x13c8('0x6')](),controller['show']);router[_0x13c8('0x5')]('/:id/configurations',auth[_0x13c8('0x6')](),controller[_0x13c8('0x9')]);router[_0x13c8('0x5')](_0x13c8('0xa'),auth[_0x13c8('0x6')](),controller[_0x13c8('0xb')]);router[_0x13c8('0xc')]('/',auth[_0x13c8('0x6')](),controller[_0x13c8('0xd')]);router[_0x13c8('0xc')](_0x13c8('0xe'),auth[_0x13c8('0x6')](),controller[_0x13c8('0xf')]);router[_0x13c8('0x10')]('/:id',auth[_0x13c8('0x6')](),controller[_0x13c8('0x11')]);router[_0x13c8('0x12')](_0x13c8('0x8'),auth['isAuthenticated'](),controller[_0x13c8('0x13')]);module['exports']=router;
\ No newline at end of file
+var _0x9348=['express','../../components/auth/service','../../components/interaction/service','./intZohoAccount.controller','get','isAuthenticated','index','/:id','show','/:id/configurations','post','create','addConfiguration','put','update','delete','destroy','multer','util','path','connect-timeout'];(function(_0x330051,_0x8acb12){var _0x8ebb0e=function(_0x41112a){while(--_0x41112a){_0x330051['push'](_0x330051['shift']());}};_0x8ebb0e(++_0x8acb12);}(_0x9348,0x10d));var _0x8934=function(_0x48b710,_0x348d9e){_0x48b710=_0x48b710-0x0;var _0x2e39b0=_0x9348[_0x48b710];return _0x2e39b0;};'use strict';var multer=require(_0x8934('0x0'));var util=require(_0x8934('0x1'));var path=require(_0x8934('0x2'));var timeout=require(_0x8934('0x3'));var express=require(_0x8934('0x4'));var router=express['Router']();var auth=require(_0x8934('0x5'));var interaction=require(_0x8934('0x6'));var config=require('../../config/environment');var controller=require(_0x8934('0x7'));router[_0x8934('0x8')]('/',auth[_0x8934('0x9')](),controller[_0x8934('0xa')]);router[_0x8934('0x8')](_0x8934('0xb'),auth['isAuthenticated'](),controller[_0x8934('0xc')]);router[_0x8934('0x8')](_0x8934('0xd'),auth['isAuthenticated'](),controller['getConfigurations']);router['get']('/:id/fields',auth[_0x8934('0x9')](),controller['getFields']);router[_0x8934('0xe')]('/',auth[_0x8934('0x9')](),controller[_0x8934('0xf')]);router[_0x8934('0xe')](_0x8934('0xd'),auth[_0x8934('0x9')](),controller[_0x8934('0x10')]);router[_0x8934('0x11')]('/:id',auth[_0x8934('0x9')](),controller[_0x8934('0x12')]);router[_0x8934('0x13')](_0x8934('0xb'),auth[_0x8934('0x9')](),controller[_0x8934('0x14')]);module['exports']=router;
\ No newline at end of file
index 3e721fe..6a3af83 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1660=['STRING','exports'];(function(_0x5f4060,_0x26bfb2){var _0x1f1744=function(_0xcdd0bf){while(--_0xcdd0bf){_0x5f4060['push'](_0x5f4060['shift']());}};_0x1f1744(++_0x26bfb2);}(_0x1660,0x18f));var _0x0166=function(_0x9fd887,_0x47f76c){_0x9fd887=_0x9fd887-0x0;var _0x1a54ab=_0x1660[_0x9fd887];return _0x1a54ab;};'use strict';var Sequelize=require('sequelize');module[_0x0166('0x0')]={'name':{'type':Sequelize[_0x0166('0x1')]},'description':{'type':Sequelize[_0x0166('0x1')]},'authToken':{'type':Sequelize['STRING']},'host':{'type':Sequelize['STRING']},'serverUrl':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x2ab2=['exports','STRING'];(function(_0x5a8f33,_0x1a2fe1){var _0x499d28=function(_0x558efa){while(--_0x558efa){_0x5a8f33['push'](_0x5a8f33['shift']());}};_0x499d28(++_0x1a2fe1);}(_0x2ab2,0xc2));var _0x22ab=function(_0x381c5a,_0x5a7e7c){_0x381c5a=_0x381c5a-0x0;var _0x26861d=_0x2ab2[_0x381c5a];return _0x26861d;};'use strict';var Sequelize=require('sequelize');module[_0x22ab('0x0')]={'name':{'type':Sequelize[_0x22ab('0x1')]},'description':{'type':Sequelize['STRING']},'authToken':{'type':Sequelize[_0x22ab('0x1')]},'host':{'type':Sequelize[_0x22ab('0x1')]},'serverUrl':{'type':Sequelize[_0x22ab('0x1')]}};
\ No newline at end of file
index 073e7f6..38ce3f0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x91f8=['val','statusCode','getFields,\x20%s,\x20%s,\x20%s','getFields','Wrong\x20credentials','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','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','ZohoAccount,\x20%s,\x20%s','request\x20sent','debug','ZohoAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','json','offset','limit','set','Content-Range','apply','reject','save','update','then','stack','name','send','index','ZohoAccount','rawAttributes','query','keys','filters','intersection','attributes','fields','length','model','hasOwnProperty','nolimit','sort','where','pick','filter','merge','map','type','key','VIRTUAL','count','includeAll','include','show','params','find','create','body','getConfigurations','ZohoConfiguration','options','addConfiguration','AccountId','Subjects','Descriptions','getDescriptions','ZohoField','findOne','host','authToken','slice','GET','format','crmapi','response','Calls','section','Call\x20Purpose','includes','push','label','true','Pick\x20List'];(function(_0xb0fea4,_0x4f0b94){var _0x1ff73e=function(_0x5d67f5){while(--_0x5d67f5){_0xb0fea4['push'](_0xb0fea4['shift']());}};_0x1ff73e(++_0x4f0b94);}(_0x91f8,0x15e));var _0x891f=function(_0x2b9847,_0x5b5294){_0x2b9847=_0x2b9847-0x0;var _0x4e393f=_0x91f8[_0x2b9847];return _0x4e393f;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x891f('0x0'));var rimraf=require(_0x891f('0x1'));var zipdir=require(_0x891f('0x2'));var jsonpatch=require(_0x891f('0x3'));var rp=require(_0x891f('0x4'));var moment=require(_0x891f('0x5'));var BPromise=require(_0x891f('0x6'));var Mustache=require(_0x891f('0x7'));var util=require(_0x891f('0x8'));var path=require(_0x891f('0x9'));var sox=require('sox');var csv=require(_0x891f('0xa'));var ejs=require(_0x891f('0xb'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x891f('0xc'));var jsforce=require(_0x891f('0xd'));var deskjs=require(_0x891f('0xe'));var toCsv=require(_0x891f('0xa'));var querystring=require(_0x891f('0xf'));var Papa=require(_0x891f('0x10'));var Redis=require(_0x891f('0x11'));var authService=require(_0x891f('0x12'));var qs=require(_0x891f('0x13'));var hardwareService=require(_0x891f('0x14'));var logger=require(_0x891f('0x15'))('api');var utils=require(_0x891f('0x16'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0x891f('0x17'));var client=jayson[_0x891f('0x18')][_0x891f('0x19')]({'port':0x232a});function checkPasswordPattern(_0x745b5,_0x319dab,_0x569458){if(_0x569458){var _0x2be680=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2be680[_0x891f('0x1a')](_0x319dab)){return _0x745b5;}else{throw new Error(_0x891f('0x1b'));}}else{return _0x745b5;}}function respondWithRpcPromise(_0x185949,_0x53d3e0,_0x1d3f71,_0x3942ee){return new BPromise(function(_0x1275b3,_0x20095f){var _0x371abf=_0x3942ee||client;return _0x371abf[_0x891f('0x1c')](_0x185949,_0x1d3f71)['then'](function(_0x75f059){logger[_0x891f('0x1d')](_0x891f('0x1e'),_0x53d3e0,_0x891f('0x1f'));logger[_0x891f('0x20')](_0x891f('0x21'),_0x53d3e0,'request\x20sent',JSON[_0x891f('0x22')](_0x75f059));if(_0x75f059[_0x891f('0x23')]){if(_0x75f059[_0x891f('0x23')][_0x891f('0x24')]===0x1f4){logger[_0x891f('0x23')](_0x891f('0x1e'),_0x53d3e0,_0x75f059['error'][_0x891f('0x25')]);return _0x20095f(_0x75f059[_0x891f('0x23')]['message']);}logger[_0x891f('0x23')]('ZohoAccount,\x20%s,\x20%s',_0x53d3e0,_0x75f059['error'][_0x891f('0x25')]);return _0x1275b3(_0x75f059[_0x891f('0x23')][_0x891f('0x25')]);}else{logger[_0x891f('0x1d')]('ZohoAccount,\x20%s,\x20%s',_0x53d3e0,_0x891f('0x1f'));_0x1275b3(_0x75f059[_0x891f('0x26')][_0x891f('0x25')]);}})[_0x891f('0x27')](function(_0x26b0db){logger[_0x891f('0x23')](_0x891f('0x1e'),_0x53d3e0,_0x26b0db);_0x20095f(_0x26b0db);});});}function respondWithStatusCode(_0x3f7f7f,_0x4f502b){_0x4f502b=_0x4f502b||0xcc;return function(_0x19964b){if(_0x19964b){return _0x3f7f7f[_0x891f('0x28')](_0x4f502b);}return _0x3f7f7f['status'](_0x4f502b)['end']();};}function respondWithResult(_0x15273c,_0x5c5805){_0x5c5805=_0x5c5805||0xc8;return function(_0x5b3549){if(_0x5b3549){return _0x15273c[_0x891f('0x29')](_0x5c5805)[_0x891f('0x2a')](_0x5b3549);}};}function respondWithFilteredResult(_0xc39581,_0x141e7f){return function(_0x363bc2){if(_0x363bc2){var _0x1f2c5d=_0x363bc2['count'],_0x1c7993=_0x141e7f[_0x891f('0x2b')],_0x3d1b49=_0x141e7f[_0x891f('0x2b')]+_0x141e7f[_0x891f('0x2c')],_0x1cf029;if(_0x3d1b49>=_0x1f2c5d){_0x3d1b49=_0x1f2c5d;_0x1cf029=0xc8;}else{_0x1cf029=0xce;}_0xc39581[_0x891f('0x29')](_0x1cf029);return _0xc39581[_0x891f('0x2d')](_0x891f('0x2e'),_0x1c7993+'-'+_0x3d1b49+'/'+_0x1f2c5d)[_0x891f('0x2a')](_0x363bc2);}return null;};}function patchUpdates(_0x32bc0d){return function(_0x46ddd8){try{jsonpatch[_0x891f('0x2f')](_0x46ddd8,_0x32bc0d,!![]);}catch(_0x3d424d){return BPromise[_0x891f('0x30')](_0x3d424d);}return _0x46ddd8[_0x891f('0x31')]();};}function saveUpdates(_0x150a8c,_0x5a48e8){return function(_0x35e7fc){if(_0x35e7fc){return _0x35e7fc[_0x891f('0x32')](_0x150a8c)[_0x891f('0x33')](function(_0x5ef825){return _0x5ef825;});}return null;};}function removeEntity(_0x58edc5,_0x74ca96){return function(_0x4248b1){if(_0x4248b1){return _0x4248b1['destroy']()[_0x891f('0x33')](function(){_0x58edc5[_0x891f('0x29')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1fe4f3,_0x2bf878){return function(_0x54ea53){if(!_0x54ea53){_0x1fe4f3['sendStatus'](0x194);}return _0x54ea53;};}function handleError(_0x169204,_0x1f3f44){_0x1f3f44=_0x1f3f44||0x1f4;return function(_0x5332ae){logger[_0x891f('0x23')](_0x5332ae[_0x891f('0x34')]);if(_0x5332ae[_0x891f('0x35')]){delete _0x5332ae[_0x891f('0x35')];}_0x169204['status'](_0x1f3f44)[_0x891f('0x36')](_0x5332ae);};}exports[_0x891f('0x37')]=function(_0x639e1,_0x26e095){var _0x3b543d={},_0x12481d={},_0x3768d9={'count':0x0,'rows':[]};var _0x5807a2=db[_0x891f('0x38')][_0x891f('0x39')];_0x12481d['model']=_['keys'](_0x5807a2);_0x12481d[_0x891f('0x3a')]=_[_0x891f('0x3b')](_0x639e1[_0x891f('0x3a')]);_0x12481d[_0x891f('0x3c')]=_[_0x891f('0x3d')](_0x12481d['model'],_0x12481d['query']);_0x3b543d[_0x891f('0x3e')]=_[_0x891f('0x3d')](_0x12481d['model'],qs[_0x891f('0x3f')](_0x639e1[_0x891f('0x3a')]['fields']));_0x3b543d['attributes']=_0x3b543d['attributes'][_0x891f('0x40')]?_0x3b543d[_0x891f('0x3e')]:_0x12481d[_0x891f('0x41')];if(!_0x639e1[_0x891f('0x3a')][_0x891f('0x42')](_0x891f('0x43'))){_0x3b543d[_0x891f('0x2c')]=qs[_0x891f('0x2c')](_0x639e1[_0x891f('0x3a')][_0x891f('0x2c')]);_0x3b543d['offset']=qs[_0x891f('0x2b')](_0x639e1[_0x891f('0x3a')][_0x891f('0x2b')]);}_0x3b543d['order']=qs['sort'](_0x639e1[_0x891f('0x3a')][_0x891f('0x44')]);_0x3b543d[_0x891f('0x45')]=qs[_0x891f('0x3c')](_[_0x891f('0x46')](_0x639e1['query'],_0x12481d[_0x891f('0x3c')]));if(_0x639e1[_0x891f('0x3a')][_0x891f('0x47')]){_0x3b543d[_0x891f('0x45')]=_[_0x891f('0x48')](_0x3b543d[_0x891f('0x45')],{'$or':_[_0x891f('0x49')](_0x5807a2,function(_0x1ee9ff){if(_0x1ee9ff[_0x891f('0x4a')][_0x891f('0x4b')]!==_0x891f('0x4c')){var _0xb7f808={};_0xb7f808[_0x1ee9ff['field']]={'$like':'%'+_0x639e1['query'][_0x891f('0x47')]+'%'};return _0xb7f808;}})});}_0x3b543d=_['merge']({},_0x3b543d,_0x639e1['options']);var _0x1b9ac4={'where':_0x3b543d[_0x891f('0x45')]};return db[_0x891f('0x38')][_0x891f('0x4d')](_0x1b9ac4)[_0x891f('0x33')](function(_0x433d3d){_0x3768d9['count']=_0x433d3d;if(_0x639e1['query'][_0x891f('0x4e')]){_0x3b543d[_0x891f('0x4f')]=[{'all':!![]}];}return db['ZohoAccount']['findAll'](_0x3b543d);})[_0x891f('0x33')](function(_0x57bd58){_0x3768d9['rows']=_0x57bd58;return _0x3768d9;})[_0x891f('0x33')](respondWithFilteredResult(_0x26e095,_0x3b543d))[_0x891f('0x27')](handleError(_0x26e095,null));};exports[_0x891f('0x50')]=function(_0xb720a1,_0x3bf359){var _0x54a1c3={'raw':![],'where':{'id':_0xb720a1[_0x891f('0x51')]['id']}},_0xf77fc1={};_0xf77fc1[_0x891f('0x41')]=_[_0x891f('0x3b')](db[_0x891f('0x38')][_0x891f('0x39')]);_0xf77fc1[_0x891f('0x3a')]=_[_0x891f('0x3b')](_0xb720a1[_0x891f('0x3a')]);_0xf77fc1[_0x891f('0x3c')]=_['intersection'](_0xf77fc1['model'],_0xf77fc1[_0x891f('0x3a')]);_0x54a1c3['attributes']=_[_0x891f('0x3d')](_0xf77fc1[_0x891f('0x41')],qs['fields'](_0xb720a1[_0x891f('0x3a')][_0x891f('0x3f')]));_0x54a1c3[_0x891f('0x3e')]=_0x54a1c3[_0x891f('0x3e')][_0x891f('0x40')]?_0x54a1c3[_0x891f('0x3e')]:_0xf77fc1[_0x891f('0x41')];if(_0xb720a1['query'][_0x891f('0x4e')]){_0x54a1c3[_0x891f('0x4f')]=[{'all':!![]}];}_0x54a1c3=_[_0x891f('0x48')]({},_0x54a1c3,_0xb720a1['options']);return db[_0x891f('0x38')][_0x891f('0x52')](_0x54a1c3)[_0x891f('0x33')](handleEntityNotFound(_0x3bf359,null))[_0x891f('0x33')](respondWithResult(_0x3bf359,null))['catch'](handleError(_0x3bf359,null));};exports[_0x891f('0x53')]=function(_0x16d4f2,_0x54a404){return db[_0x891f('0x38')]['create'](_0x16d4f2[_0x891f('0x54')],{})[_0x891f('0x33')](respondWithResult(_0x54a404,0xc9))[_0x891f('0x27')](handleError(_0x54a404,null));};exports[_0x891f('0x32')]=function(_0x583ea0,_0x3d0bcd){if(_0x583ea0[_0x891f('0x54')]['id']){delete _0x583ea0['body']['id'];}return db['ZohoAccount'][_0x891f('0x52')]({'where':{'id':_0x583ea0[_0x891f('0x51')]['id']}})[_0x891f('0x33')](handleEntityNotFound(_0x3d0bcd,null))[_0x891f('0x33')](saveUpdates(_0x583ea0['body'],null))[_0x891f('0x33')](respondWithResult(_0x3d0bcd,null))['catch'](handleError(_0x3d0bcd,null));};exports['destroy']=function(_0x5c9d14,_0xc25326){return db[_0x891f('0x38')][_0x891f('0x52')]({'where':{'id':_0x5c9d14[_0x891f('0x51')]['id']}})['then'](handleEntityNotFound(_0xc25326,null))[_0x891f('0x33')](removeEntity(_0xc25326,null))[_0x891f('0x27')](handleError(_0xc25326,null));};exports[_0x891f('0x55')]=function(_0x4af06a,_0x746912,_0x48a25d){var _0x2eb7c5={};var _0x4dc855={};var _0x543a00;var _0x308d05;return db['ZohoAccount']['findOne']({'where':{'id':_0x4af06a[_0x891f('0x51')]['id']}})[_0x891f('0x33')](handleEntityNotFound(_0x746912,null))[_0x891f('0x33')](function(_0x4ddef4){if(_0x4ddef4){_0x543a00=_0x4ddef4;_0x4dc855[_0x891f('0x41')]=_[_0x891f('0x3b')](db[_0x891f('0x56')][_0x891f('0x39')]);_0x4dc855[_0x891f('0x3a')]=_[_0x891f('0x3b')](_0x4af06a['query']);_0x4dc855[_0x891f('0x3c')]=_['intersection'](_0x4dc855['model'],_0x4dc855[_0x891f('0x3a')]);_0x2eb7c5[_0x891f('0x3e')]=_['intersection'](_0x4dc855['model'],qs[_0x891f('0x3f')](_0x4af06a[_0x891f('0x3a')][_0x891f('0x3f')]));_0x2eb7c5[_0x891f('0x3e')]=_0x2eb7c5[_0x891f('0x3e')][_0x891f('0x40')]?_0x2eb7c5['attributes']:_0x4dc855[_0x891f('0x41')];_0x2eb7c5['order']=qs[_0x891f('0x44')](_0x4af06a[_0x891f('0x3a')][_0x891f('0x44')]);_0x2eb7c5[_0x891f('0x45')]=qs[_0x891f('0x3c')](_[_0x891f('0x46')](_0x4af06a[_0x891f('0x3a')],_0x4dc855[_0x891f('0x3c')]));if(_0x4af06a[_0x891f('0x3a')][_0x891f('0x47')]){_0x2eb7c5[_0x891f('0x45')]=_[_0x891f('0x48')](_0x2eb7c5[_0x891f('0x45')],{'$or':_[_0x891f('0x49')](_0x2eb7c5[_0x891f('0x3e')],function(_0x49e67f){var _0x612ddb={};_0x612ddb[_0x49e67f]={'$like':'%'+_0x4af06a[_0x891f('0x3a')][_0x891f('0x47')]+'%'};return _0x612ddb;})});}_0x2eb7c5=_[_0x891f('0x48')]({},_0x2eb7c5,_0x4af06a[_0x891f('0x57')]);return _0x543a00['getConfigurations'](_0x2eb7c5);}})[_0x891f('0x33')](function(_0x58490f){if(_0x58490f){_0x308d05=_0x58490f['length'];if(!_0x4af06a['query'][_0x891f('0x42')](_0x891f('0x43'))){_0x2eb7c5[_0x891f('0x2c')]=qs[_0x891f('0x2c')](_0x4af06a[_0x891f('0x3a')]['limit']);_0x2eb7c5[_0x891f('0x2b')]=qs[_0x891f('0x2b')](_0x4af06a['query']['offset']);}return _0x543a00[_0x891f('0x55')](_0x2eb7c5);}})[_0x891f('0x33')](function(_0x49e05c){if(_0x49e05c){return _0x49e05c?{'count':_0x308d05,'rows':_0x49e05c}:null;}})[_0x891f('0x33')](respondWithResult(_0x746912,null))[_0x891f('0x27')](handleError(_0x746912,null));};exports[_0x891f('0x58')]=function(_0x8cced9,_0x160cfb,_0x1c64f9){if(_0x8cced9[_0x891f('0x54')]['id']){delete _0x8cced9[_0x891f('0x54')]['id'];}return db['ZohoAccount']['findOne']({'where':{'id':_0x8cced9[_0x891f('0x51')]['id']}})[_0x891f('0x33')](handleEntityNotFound(_0x160cfb,null))['then'](function(_0xdd76f6){if(_0xdd76f6){_0x8cced9[_0x891f('0x54')][_0x891f('0x59')]=_0xdd76f6['id'];_0x8cced9[_0x891f('0x54')][_0x891f('0x5a')]=integrations['getSubjects'](_0x8cced9['body']['channel'],_0x8cced9['body'][_0x891f('0x4a')]);_0x8cced9['body'][_0x891f('0x5b')]=integrations[_0x891f('0x5c')](_0x8cced9[_0x891f('0x54')]['channel'],_0x8cced9[_0x891f('0x54')][_0x891f('0x4a')]);return db[_0x891f('0x56')][_0x891f('0x53')](_0x8cced9[_0x891f('0x54')],{'include':[{'model':db[_0x891f('0x5d')],'as':_0x891f('0x5a')},{'model':db[_0x891f('0x5d')],'as':_0x891f('0x5b')}]});}return null;})['then'](respondWithResult(_0x160cfb,null))[_0x891f('0x27')](handleError(_0x160cfb,null));};exports['getFields']=function(_0x50dc80,_0x21776e,_0x2173e7){var _0x47d7e1='';return db[_0x891f('0x38')][_0x891f('0x5e')]({'where':{'id':_0x50dc80['params']['id']},'attributes':['id',_0x891f('0x5f'),_0x891f('0x60')]})['then'](handleEntityNotFound(_0x21776e,null))[_0x891f('0x33')](function(_0x56e713){if(_0x56e713){_0x47d7e1=_0x56e713[_0x891f('0x5f')];var _0x5c628b=_0x47d7e1[_0x891f('0x61')](-0x1);if(_0x5c628b==='/'){_0x47d7e1=_0x47d7e1['substring'](0x0,_0x47d7e1['lastIndexOf'](_0x5c628b));}return rp({'method':_0x891f('0x62'),'uri':util[_0x891f('0x63')]('https://crm.%s/crm/private/json/Calls/getFields',_0x47d7e1),'qs':{'authtoken':_0x56e713[_0x891f('0x60')],'scope':_0x891f('0x64')},'json':!![]});}})[_0x891f('0x33')](function(_0xa0b02c){if(_0xa0b02c){if(_0xa0b02c[_0x891f('0x65')]&&_0xa0b02c[_0x891f('0x65')][_0x891f('0x23')]){throw new Error(_0xa0b02c[_0x891f('0x65')][_0x891f('0x23')][_0x891f('0x25')]);}var _0x1c5315=[];if(_0xa0b02c[_0x891f('0x66')]&&_0xa0b02c['Calls'][_0x891f('0x67')]){if(_0xa0b02c[_0x891f('0x66')][_0x891f('0x67')]['FL']){var _0x27fa1f=[_0x891f('0x68')];for(var _0x53f993=0x0,_0x5bb9c8=_0xa0b02c[_0x891f('0x66')]['section']['FL'][_0x891f('0x40')];_0x53f993<_0x5bb9c8;_0x53f993++){if(_[_0x891f('0x69')](_0x27fa1f,_0xa0b02c['Calls']['section']['FL'][_0x53f993]['dv'])){_0x1c5315[_0x891f('0x6a')]({'id':_0xa0b02c[_0x891f('0x66')][_0x891f('0x67')]['FL'][_0x53f993]['dv'],'name':_0xa0b02c['Calls']['section']['FL'][_0x53f993][_0x891f('0x6b')],'custom':_0xa0b02c[_0x891f('0x66')][_0x891f('0x67')]['FL'][_0x53f993]['customfield']===_0x891f('0x6c')?!![]:![],'options':_0xa0b02c[_0x891f('0x66')]['section']['FL'][_0x53f993]['type']===_0x891f('0x6d')&&_0xa0b02c[_0x891f('0x66')][_0x891f('0x67')]['FL'][_0x53f993][_0x891f('0x6e')]?_[_0x891f('0x49')](_0xa0b02c[_0x891f('0x66')][_0x891f('0x67')]['FL'][_0x53f993][_0x891f('0x6e')],function(_0x259886){return{'name':_0x259886,'value':_0x259886};}):[]});}}}}return{'count':_0x1c5315[_0x891f('0x40')],'rows':_0x1c5315};}})[_0x891f('0x33')](respondWithResult(_0x21776e,null))[_0x891f('0x27')](function(_0x242960){var _0x26793a=_0x50dc80[_0x891f('0x3a')][_0x891f('0x1a')]?0x1f4:_0x242960[_0x891f('0x6f')]||0x1f4;logger[_0x891f('0x23')](_0x891f('0x70'),_0x891f('0x71'),_0x26793a,JSON[_0x891f('0x22')](_0x242960));delete _0x242960[_0x891f('0x35')];if(_0x26793a===0x191){_0x26793a=0x190;}_0x21776e[_0x891f('0x29')](_0x26793a)[_0x891f('0x36')](_0x50dc80[_0x891f('0x3a')][_0x891f('0x1a')]?{'message':_0x891f('0x72'),'statusCode':_0x242960['statusCode']}:_0x242960);});};
\ No newline at end of file
+var _0x2d74=['length','nolimit','sort','where','pick','merge','key','VIRTUAL','field','filter','options','count','includeAll','include','findAll','rows','show','params','find','body','getConfigurations','findOne','ZohoConfiguration','map','hasOwnProperty','addConfiguration','Subjects','type','getDescriptions','channel','create','ZohoField','Descriptions','getFields','host','slice','lastIndexOf','GET','format','authToken','crmapi','response','Calls','section','Call\x20Purpose','includes','label','customfield','true','Pick\x20List','statusCode','getFields,\x20%s,\x20%s,\x20%s','send','Wrong\x20credentials','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../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','ZohoAccount,\x20%s,\x20%s','request\x20sent','ZohoAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','sendStatus','status','offset','limit','set','Content-Range','json','apply','reject','save','update','destroy','stack','name','index','ZohoAccount','rawAttributes','model','keys','query','filters','attributes','intersection','fields'];(function(_0x332af8,_0x4decd8){var _0x246708=function(_0x409142){while(--_0x409142){_0x332af8['push'](_0x332af8['shift']());}};_0x246708(++_0x4decd8);}(_0x2d74,0x198));var _0x42d7=function(_0x3b71f1,_0x564185){_0x3b71f1=_0x3b71f1-0x0;var _0x35b401=_0x2d74[_0x3b71f1];return _0x35b401;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x42d7('0x0'));var rimraf=require(_0x42d7('0x1'));var zipdir=require(_0x42d7('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x42d7('0x3'));var moment=require(_0x42d7('0x4'));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('crypto');var jsforce=require(_0x42d7('0xd'));var deskjs=require(_0x42d7('0xe'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x42d7('0xf'));var Redis=require(_0x42d7('0x10'));var authService=require(_0x42d7('0x11'));var qs=require(_0x42d7('0x12'));var hardwareService=require(_0x42d7('0x13'));var logger=require(_0x42d7('0x14'))('api');var utils=require('../../config/utils');var config=require(_0x42d7('0x15'));var db=require(_0x42d7('0x16'))['db'];var integrations=require(_0x42d7('0x17'));var jayson=require(_0x42d7('0x18'));var client=jayson[_0x42d7('0x19')][_0x42d7('0x1a')]({'port':0x232a});function checkPasswordPattern(_0xf73cd7,_0x408ea6,_0x4e20ba){if(_0x4e20ba){var _0x587de4=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x587de4[_0x42d7('0x1b')](_0x408ea6)){return _0xf73cd7;}else{throw new Error(_0x42d7('0x1c'));}}else{return _0xf73cd7;}}function respondWithRpcPromise(_0xe9769d,_0x5e7152,_0x539e52,_0x3e4aee){return new BPromise(function(_0xda9441,_0x16351f){var _0x5f0a13=_0x3e4aee||client;return _0x5f0a13[_0x42d7('0x1d')](_0xe9769d,_0x539e52)[_0x42d7('0x1e')](function(_0x3e7d1f){logger[_0x42d7('0x1f')](_0x42d7('0x20'),_0x5e7152,_0x42d7('0x21'));logger['debug'](_0x42d7('0x22'),_0x5e7152,_0x42d7('0x21'),JSON[_0x42d7('0x23')](_0x3e7d1f));if(_0x3e7d1f['error']){if(_0x3e7d1f[_0x42d7('0x24')][_0x42d7('0x25')]===0x1f4){logger[_0x42d7('0x24')](_0x42d7('0x20'),_0x5e7152,_0x3e7d1f[_0x42d7('0x24')][_0x42d7('0x26')]);return _0x16351f(_0x3e7d1f[_0x42d7('0x24')][_0x42d7('0x26')]);}logger[_0x42d7('0x24')](_0x42d7('0x20'),_0x5e7152,_0x3e7d1f[_0x42d7('0x24')][_0x42d7('0x26')]);return _0xda9441(_0x3e7d1f[_0x42d7('0x24')]['message']);}else{logger[_0x42d7('0x1f')](_0x42d7('0x20'),_0x5e7152,_0x42d7('0x21'));_0xda9441(_0x3e7d1f['result'][_0x42d7('0x26')]);}})[_0x42d7('0x27')](function(_0x31f120){logger['error']('ZohoAccount,\x20%s,\x20%s',_0x5e7152,_0x31f120);_0x16351f(_0x31f120);});});}function respondWithStatusCode(_0xb8858,_0x1a5c7a){_0x1a5c7a=_0x1a5c7a||0xcc;return function(_0x5d25ac){if(_0x5d25ac){return _0xb8858[_0x42d7('0x28')](_0x1a5c7a);}return _0xb8858[_0x42d7('0x29')](_0x1a5c7a)['end']();};}function respondWithResult(_0x189bda,_0x3ef843){_0x3ef843=_0x3ef843||0xc8;return function(_0x514889){if(_0x514889){return _0x189bda[_0x42d7('0x29')](_0x3ef843)['json'](_0x514889);}};}function respondWithFilteredResult(_0x12632b,_0x3c0ae3){return function(_0x5c2c11){if(_0x5c2c11){var _0x4ff1d8=_0x5c2c11['count'],_0x3635c1=_0x3c0ae3[_0x42d7('0x2a')],_0x3253a=_0x3c0ae3[_0x42d7('0x2a')]+_0x3c0ae3[_0x42d7('0x2b')],_0xd574a9;if(_0x3253a>=_0x4ff1d8){_0x3253a=_0x4ff1d8;_0xd574a9=0xc8;}else{_0xd574a9=0xce;}_0x12632b[_0x42d7('0x29')](_0xd574a9);return _0x12632b[_0x42d7('0x2c')](_0x42d7('0x2d'),_0x3635c1+'-'+_0x3253a+'/'+_0x4ff1d8)[_0x42d7('0x2e')](_0x5c2c11);}return null;};}function patchUpdates(_0x13a73f){return function(_0x2a95b7){try{jsonpatch[_0x42d7('0x2f')](_0x2a95b7,_0x13a73f,!![]);}catch(_0x261c0e){return BPromise[_0x42d7('0x30')](_0x261c0e);}return _0x2a95b7[_0x42d7('0x31')]();};}function saveUpdates(_0x20cd9a,_0x564dbe){return function(_0x273499){if(_0x273499){return _0x273499[_0x42d7('0x32')](_0x20cd9a)[_0x42d7('0x1e')](function(_0x3e639b){return _0x3e639b;});}return null;};}function removeEntity(_0x4215fc,_0x32d873){return function(_0x14a172){if(_0x14a172){return _0x14a172[_0x42d7('0x33')]()[_0x42d7('0x1e')](function(){_0x4215fc[_0x42d7('0x29')](0xcc)['end']();});}};}function handleEntityNotFound(_0x460263,_0x4fa9f1){return function(_0x5e9d84){if(!_0x5e9d84){_0x460263['sendStatus'](0x194);}return _0x5e9d84;};}function handleError(_0x2e430b,_0x50c4c4){_0x50c4c4=_0x50c4c4||0x1f4;return function(_0x3f964e){logger['error'](_0x3f964e[_0x42d7('0x34')]);if(_0x3f964e[_0x42d7('0x35')]){delete _0x3f964e[_0x42d7('0x35')];}_0x2e430b[_0x42d7('0x29')](_0x50c4c4)['send'](_0x3f964e);};}exports[_0x42d7('0x36')]=function(_0x2eadc3,_0xdce9ca){var _0x5ab61a={},_0x15d0db={},_0x8dcbea={'count':0x0,'rows':[]};var _0x1de59e=db[_0x42d7('0x37')][_0x42d7('0x38')];_0x15d0db[_0x42d7('0x39')]=_[_0x42d7('0x3a')](_0x1de59e);_0x15d0db[_0x42d7('0x3b')]=_[_0x42d7('0x3a')](_0x2eadc3[_0x42d7('0x3b')]);_0x15d0db[_0x42d7('0x3c')]=_['intersection'](_0x15d0db[_0x42d7('0x39')],_0x15d0db[_0x42d7('0x3b')]);_0x5ab61a[_0x42d7('0x3d')]=_[_0x42d7('0x3e')](_0x15d0db[_0x42d7('0x39')],qs[_0x42d7('0x3f')](_0x2eadc3[_0x42d7('0x3b')]['fields']));_0x5ab61a['attributes']=_0x5ab61a[_0x42d7('0x3d')][_0x42d7('0x40')]?_0x5ab61a[_0x42d7('0x3d')]:_0x15d0db['model'];if(!_0x2eadc3[_0x42d7('0x3b')]['hasOwnProperty'](_0x42d7('0x41'))){_0x5ab61a[_0x42d7('0x2b')]=qs[_0x42d7('0x2b')](_0x2eadc3[_0x42d7('0x3b')][_0x42d7('0x2b')]);_0x5ab61a['offset']=qs[_0x42d7('0x2a')](_0x2eadc3['query']['offset']);}_0x5ab61a['order']=qs['sort'](_0x2eadc3[_0x42d7('0x3b')][_0x42d7('0x42')]);_0x5ab61a[_0x42d7('0x43')]=qs['filters'](_[_0x42d7('0x44')](_0x2eadc3['query'],_0x15d0db[_0x42d7('0x3c')]));if(_0x2eadc3[_0x42d7('0x3b')]['filter']){_0x5ab61a['where']=_[_0x42d7('0x45')](_0x5ab61a[_0x42d7('0x43')],{'$or':_['map'](_0x1de59e,function(_0x4f7712){if(_0x4f7712['type'][_0x42d7('0x46')]!==_0x42d7('0x47')){var _0x5d0985={};_0x5d0985[_0x4f7712[_0x42d7('0x48')]]={'$like':'%'+_0x2eadc3[_0x42d7('0x3b')][_0x42d7('0x49')]+'%'};return _0x5d0985;}})});}_0x5ab61a=_[_0x42d7('0x45')]({},_0x5ab61a,_0x2eadc3[_0x42d7('0x4a')]);var _0x3c6be9={'where':_0x5ab61a[_0x42d7('0x43')]};return db[_0x42d7('0x37')][_0x42d7('0x4b')](_0x3c6be9)[_0x42d7('0x1e')](function(_0x3e0465){_0x8dcbea[_0x42d7('0x4b')]=_0x3e0465;if(_0x2eadc3[_0x42d7('0x3b')][_0x42d7('0x4c')]){_0x5ab61a[_0x42d7('0x4d')]=[{'all':!![]}];}return db[_0x42d7('0x37')][_0x42d7('0x4e')](_0x5ab61a);})[_0x42d7('0x1e')](function(_0x135bd3){_0x8dcbea[_0x42d7('0x4f')]=_0x135bd3;return _0x8dcbea;})[_0x42d7('0x1e')](respondWithFilteredResult(_0xdce9ca,_0x5ab61a))[_0x42d7('0x27')](handleError(_0xdce9ca,null));};exports[_0x42d7('0x50')]=function(_0x1e5614,_0x15d57d){var _0x699bfc={'raw':![],'where':{'id':_0x1e5614[_0x42d7('0x51')]['id']}},_0x32e3b7={};_0x32e3b7[_0x42d7('0x39')]=_[_0x42d7('0x3a')](db['ZohoAccount'][_0x42d7('0x38')]);_0x32e3b7[_0x42d7('0x3b')]=_[_0x42d7('0x3a')](_0x1e5614[_0x42d7('0x3b')]);_0x32e3b7[_0x42d7('0x3c')]=_[_0x42d7('0x3e')](_0x32e3b7[_0x42d7('0x39')],_0x32e3b7['query']);_0x699bfc[_0x42d7('0x3d')]=_[_0x42d7('0x3e')](_0x32e3b7[_0x42d7('0x39')],qs[_0x42d7('0x3f')](_0x1e5614[_0x42d7('0x3b')][_0x42d7('0x3f')]));_0x699bfc[_0x42d7('0x3d')]=_0x699bfc[_0x42d7('0x3d')][_0x42d7('0x40')]?_0x699bfc[_0x42d7('0x3d')]:_0x32e3b7['model'];if(_0x1e5614[_0x42d7('0x3b')]['includeAll']){_0x699bfc[_0x42d7('0x4d')]=[{'all':!![]}];}_0x699bfc=_[_0x42d7('0x45')]({},_0x699bfc,_0x1e5614[_0x42d7('0x4a')]);return db[_0x42d7('0x37')][_0x42d7('0x52')](_0x699bfc)[_0x42d7('0x1e')](handleEntityNotFound(_0x15d57d,null))['then'](respondWithResult(_0x15d57d,null))['catch'](handleError(_0x15d57d,null));};exports['create']=function(_0x3a3de9,_0x44d60f){return db['ZohoAccount']['create'](_0x3a3de9[_0x42d7('0x53')],{})[_0x42d7('0x1e')](respondWithResult(_0x44d60f,0xc9))['catch'](handleError(_0x44d60f,null));};exports[_0x42d7('0x32')]=function(_0x425096,_0x212d0b){if(_0x425096[_0x42d7('0x53')]['id']){delete _0x425096['body']['id'];}return db[_0x42d7('0x37')][_0x42d7('0x52')]({'where':{'id':_0x425096[_0x42d7('0x51')]['id']}})[_0x42d7('0x1e')](handleEntityNotFound(_0x212d0b,null))[_0x42d7('0x1e')](saveUpdates(_0x425096[_0x42d7('0x53')],null))[_0x42d7('0x1e')](respondWithResult(_0x212d0b,null))[_0x42d7('0x27')](handleError(_0x212d0b,null));};exports[_0x42d7('0x33')]=function(_0x540829,_0x3ade2b){return db[_0x42d7('0x37')][_0x42d7('0x52')]({'where':{'id':_0x540829[_0x42d7('0x51')]['id']}})[_0x42d7('0x1e')](handleEntityNotFound(_0x3ade2b,null))[_0x42d7('0x1e')](removeEntity(_0x3ade2b,null))['catch'](handleError(_0x3ade2b,null));};exports[_0x42d7('0x54')]=function(_0x3017a8,_0x38fdab,_0x2ca1b1){var _0x17a1e6={};var _0x4632a0={};var _0x5aa244;var _0x386764;return db[_0x42d7('0x37')][_0x42d7('0x55')]({'where':{'id':_0x3017a8[_0x42d7('0x51')]['id']}})[_0x42d7('0x1e')](handleEntityNotFound(_0x38fdab,null))[_0x42d7('0x1e')](function(_0x387691){if(_0x387691){_0x5aa244=_0x387691;_0x4632a0['model']=_['keys'](db[_0x42d7('0x56')][_0x42d7('0x38')]);_0x4632a0[_0x42d7('0x3b')]=_['keys'](_0x3017a8[_0x42d7('0x3b')]);_0x4632a0[_0x42d7('0x3c')]=_[_0x42d7('0x3e')](_0x4632a0[_0x42d7('0x39')],_0x4632a0[_0x42d7('0x3b')]);_0x17a1e6['attributes']=_[_0x42d7('0x3e')](_0x4632a0['model'],qs[_0x42d7('0x3f')](_0x3017a8[_0x42d7('0x3b')][_0x42d7('0x3f')]));_0x17a1e6[_0x42d7('0x3d')]=_0x17a1e6[_0x42d7('0x3d')][_0x42d7('0x40')]?_0x17a1e6[_0x42d7('0x3d')]:_0x4632a0[_0x42d7('0x39')];_0x17a1e6['order']=qs['sort'](_0x3017a8[_0x42d7('0x3b')][_0x42d7('0x42')]);_0x17a1e6[_0x42d7('0x43')]=qs[_0x42d7('0x3c')](_['pick'](_0x3017a8[_0x42d7('0x3b')],_0x4632a0['filters']));if(_0x3017a8[_0x42d7('0x3b')]['filter']){_0x17a1e6[_0x42d7('0x43')]=_['merge'](_0x17a1e6[_0x42d7('0x43')],{'$or':_[_0x42d7('0x57')](_0x17a1e6[_0x42d7('0x3d')],function(_0x5cb96c){var _0x2638c9={};_0x2638c9[_0x5cb96c]={'$like':'%'+_0x3017a8[_0x42d7('0x3b')][_0x42d7('0x49')]+'%'};return _0x2638c9;})});}_0x17a1e6=_[_0x42d7('0x45')]({},_0x17a1e6,_0x3017a8[_0x42d7('0x4a')]);return _0x5aa244[_0x42d7('0x54')](_0x17a1e6);}})['then'](function(_0x47345f){if(_0x47345f){_0x386764=_0x47345f[_0x42d7('0x40')];if(!_0x3017a8[_0x42d7('0x3b')][_0x42d7('0x58')](_0x42d7('0x41'))){_0x17a1e6[_0x42d7('0x2b')]=qs[_0x42d7('0x2b')](_0x3017a8['query'][_0x42d7('0x2b')]);_0x17a1e6[_0x42d7('0x2a')]=qs[_0x42d7('0x2a')](_0x3017a8['query'][_0x42d7('0x2a')]);}return _0x5aa244[_0x42d7('0x54')](_0x17a1e6);}})['then'](function(_0x1eca66){if(_0x1eca66){return _0x1eca66?{'count':_0x386764,'rows':_0x1eca66}:null;}})[_0x42d7('0x1e')](respondWithResult(_0x38fdab,null))[_0x42d7('0x27')](handleError(_0x38fdab,null));};exports[_0x42d7('0x59')]=function(_0x455618,_0x475678,_0x4c875a){if(_0x455618[_0x42d7('0x53')]['id']){delete _0x455618[_0x42d7('0x53')]['id'];}return db['ZohoAccount']['findOne']({'where':{'id':_0x455618[_0x42d7('0x51')]['id']}})[_0x42d7('0x1e')](handleEntityNotFound(_0x475678,null))[_0x42d7('0x1e')](function(_0x1eb320){if(_0x1eb320){_0x455618[_0x42d7('0x53')]['AccountId']=_0x1eb320['id'];_0x455618[_0x42d7('0x53')][_0x42d7('0x5a')]=integrations['getSubjects'](_0x455618[_0x42d7('0x53')]['channel'],_0x455618[_0x42d7('0x53')][_0x42d7('0x5b')]);_0x455618[_0x42d7('0x53')]['Descriptions']=integrations[_0x42d7('0x5c')](_0x455618['body'][_0x42d7('0x5d')],_0x455618[_0x42d7('0x53')][_0x42d7('0x5b')]);return db[_0x42d7('0x56')][_0x42d7('0x5e')](_0x455618['body'],{'include':[{'model':db[_0x42d7('0x5f')],'as':'Subjects'},{'model':db['ZohoField'],'as':_0x42d7('0x60')}]});}return null;})[_0x42d7('0x1e')](respondWithResult(_0x475678,null))[_0x42d7('0x27')](handleError(_0x475678,null));};exports[_0x42d7('0x61')]=function(_0x105f53,_0x5d0029,_0x16a6ed){var _0xdd4c1f='';return db[_0x42d7('0x37')][_0x42d7('0x55')]({'where':{'id':_0x105f53[_0x42d7('0x51')]['id']},'attributes':['id','host','authToken']})[_0x42d7('0x1e')](handleEntityNotFound(_0x5d0029,null))[_0x42d7('0x1e')](function(_0x4b1321){if(_0x4b1321){_0xdd4c1f=_0x4b1321[_0x42d7('0x62')];var _0x2231fd=_0xdd4c1f[_0x42d7('0x63')](-0x1);if(_0x2231fd==='/'){_0xdd4c1f=_0xdd4c1f['substring'](0x0,_0xdd4c1f[_0x42d7('0x64')](_0x2231fd));}return rp({'method':_0x42d7('0x65'),'uri':util[_0x42d7('0x66')]('https://crm.%s/crm/private/json/Calls/getFields',_0xdd4c1f),'qs':{'authtoken':_0x4b1321[_0x42d7('0x67')],'scope':_0x42d7('0x68')},'json':!![]});}})['then'](function(_0x5cc714){if(_0x5cc714){if(_0x5cc714[_0x42d7('0x69')]&&_0x5cc714['response'][_0x42d7('0x24')]){throw new Error(_0x5cc714[_0x42d7('0x69')]['error']['message']);}var _0x38c068=[];if(_0x5cc714[_0x42d7('0x6a')]&&_0x5cc714['Calls']['section']){if(_0x5cc714['Calls'][_0x42d7('0x6b')]['FL']){var _0x1fa2a7=[_0x42d7('0x6c')];for(var _0x41b140=0x0,_0x43c7fe=_0x5cc714[_0x42d7('0x6a')][_0x42d7('0x6b')]['FL']['length'];_0x41b140<_0x43c7fe;_0x41b140++){if(_[_0x42d7('0x6d')](_0x1fa2a7,_0x5cc714['Calls'][_0x42d7('0x6b')]['FL'][_0x41b140]['dv'])){_0x38c068['push']({'id':_0x5cc714[_0x42d7('0x6a')][_0x42d7('0x6b')]['FL'][_0x41b140]['dv'],'name':_0x5cc714[_0x42d7('0x6a')][_0x42d7('0x6b')]['FL'][_0x41b140][_0x42d7('0x6e')],'custom':_0x5cc714[_0x42d7('0x6a')][_0x42d7('0x6b')]['FL'][_0x41b140][_0x42d7('0x6f')]===_0x42d7('0x70')?!![]:![],'options':_0x5cc714[_0x42d7('0x6a')][_0x42d7('0x6b')]['FL'][_0x41b140][_0x42d7('0x5b')]===_0x42d7('0x71')&&_0x5cc714[_0x42d7('0x6a')][_0x42d7('0x6b')]['FL'][_0x41b140]['val']?_[_0x42d7('0x57')](_0x5cc714[_0x42d7('0x6a')][_0x42d7('0x6b')]['FL'][_0x41b140]['val'],function(_0x34a427){return{'name':_0x34a427,'value':_0x34a427};}):[]});}}}}return{'count':_0x38c068[_0x42d7('0x40')],'rows':_0x38c068};}})['then'](respondWithResult(_0x5d0029,null))[_0x42d7('0x27')](function(_0x49370a){var _0x1020d2=_0x105f53['query']['test']?0x1f4:_0x49370a[_0x42d7('0x72')]||0x1f4;logger[_0x42d7('0x24')](_0x42d7('0x73'),_0x42d7('0x61'),_0x1020d2,JSON[_0x42d7('0x23')](_0x49370a));delete _0x49370a[_0x42d7('0x35')];if(_0x1020d2===0x191){_0x1020d2=0x190;}_0x5d0029[_0x42d7('0x29')](_0x1020d2)[_0x42d7('0x74')](_0x105f53[_0x42d7('0x3b')][_0x42d7('0x1b')]?{'message':_0x42d7('0x75'),'statusCode':_0x49370a[_0x42d7('0x72')]}:_0x49370a);});};
\ No newline at end of file
index 1961fd0..1cd69fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x579a=['api','request-promise','path','../../components/integrations/configuration','define','ZohoAccount','int_zoho_accounts','lodash','util','../../config/logger'];(function(_0x1f5705,_0x4dd312){var _0x4ecdd2=function(_0xbed77c){while(--_0xbed77c){_0x1f5705['push'](_0x1f5705['shift']());}};_0x4ecdd2(++_0x4dd312);}(_0x579a,0x9d));var _0xa579=function(_0x22d0a4,_0xf960d8){_0x22d0a4=_0x22d0a4-0x0;var _0x435214=_0x579a[_0x22d0a4];return _0x435214;};'use strict';var _=require(_0xa579('0x0'));var util=require(_0xa579('0x1'));var logger=require(_0xa579('0x2'))(_0xa579('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xa579('0x4'));var fs=require('fs');var path=require(_0xa579('0x5'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require('./intZohoAccount.attributes');var integrations=require(_0xa579('0x6'));module['exports']=function(_0x354f3b,_0x14a544){return _0x354f3b[_0xa579('0x7')](_0xa579('0x8'),attributes,{'tableName':_0xa579('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9187=['define','ZohoAccount','int_zoho_accounts','util','api','moment','bluebird','path','rimraf','../../config/environment','./intZohoAccount.attributes','../../components/integrations/configuration'];(function(_0x2ec587,_0x441027){var _0x3aff44=function(_0x4b5a5f){while(--_0x4b5a5f){_0x2ec587['push'](_0x2ec587['shift']());}};_0x3aff44(++_0x441027);}(_0x9187,0xc3));var _0x7918=function(_0x1accb5,_0x36dc61){_0x1accb5=_0x1accb5-0x0;var _0x3f6291=_0x9187[_0x1accb5];return _0x3f6291;};'use strict';var _=require('lodash');var util=require(_0x7918('0x0'));var logger=require('../../config/logger')(_0x7918('0x1'));var moment=require(_0x7918('0x2'));var BPromise=require(_0x7918('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x7918('0x4'));var rimraf=require(_0x7918('0x5'));var config=require(_0x7918('0x6'));var attributes=require(_0x7918('0x7'));var integrations=require(_0x7918('0x8'));module['exports']=function(_0x283ca9,_0x174151){return _0x283ca9[_0x7918('0x9')](_0x7918('0xa'),attributes,{'tableName':_0x7918('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b871cd0..e7fcbe9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x98d4=['raw','include','model','attributes','map','then','GetZohoAccount','ShowZohoAccount','find','where','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','http','request','info','ZohoAccount,\x20%s,\x20%s','debug','ZohoAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','ZohoAccount','findAll','options'];(function(_0x395667,_0x45593a){var _0x5cdb8f=function(_0x2be0fd){while(--_0x2be0fd){_0x395667['push'](_0x395667['shift']());}};_0x5cdb8f(++_0x45593a);}(_0x98d4,0x6a));var _0x498d=function(_0x4840b,_0x4eb187){_0x4840b=_0x4840b-0x0;var _0x530352=_0x98d4[_0x4840b];return _0x530352;};'use strict';var _=require('lodash');var util=require('util');var moment=require('moment');var BPromise=require(_0x498d('0x0'));var rs=require(_0x498d('0x1'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x498d('0x2'))['db'];var utils=require(_0x498d('0x3'));var logger=require(_0x498d('0x4'))('rpc');var config=require('../../config/environment');var jayson=require(_0x498d('0x5'));var client=jayson['client'][_0x498d('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x5b84e7,_0x3862b2,_0x17ae57){return new BPromise(function(_0x3dcb57,_0x632515){return client[_0x498d('0x7')](_0x5b84e7,_0x17ae57)['then'](function(_0x3c7a67){logger[_0x498d('0x8')](_0x498d('0x9'),_0x3862b2,'request\x20sent');logger[_0x498d('0xa')](_0x498d('0xb'),_0x3862b2,'request\x20sent',JSON[_0x498d('0xc')](_0x3c7a67));if(_0x3c7a67[_0x498d('0xd')]){if(_0x3c7a67[_0x498d('0xd')][_0x498d('0xe')]===0x1f4){logger[_0x498d('0xd')]('ZohoAccount,\x20%s,\x20%s',_0x3862b2,_0x3c7a67[_0x498d('0xd')][_0x498d('0xf')]);return _0x632515(_0x3c7a67[_0x498d('0xd')][_0x498d('0xf')]);}logger['error'](_0x498d('0x9'),_0x3862b2,_0x3c7a67[_0x498d('0xd')][_0x498d('0xf')]);return _0x3dcb57(_0x3c7a67[_0x498d('0xd')][_0x498d('0xf')]);}else{logger['info'](_0x498d('0x9'),_0x3862b2,_0x498d('0x10'));_0x3dcb57(_0x3c7a67[_0x498d('0x11')][_0x498d('0xf')]);}})[_0x498d('0x12')](function(_0x3a4ecc){logger[_0x498d('0xd')]('ZohoAccount,\x20%s,\x20%s',_0x3862b2,_0x3a4ecc);_0x632515(_0x3a4ecc);});});}exports['GetZohoAccount']=function(_0xf46ca){var _0x5e12d8=this;return new Promise(function(_0x5471ad,_0x4249c6){return db[_0x498d('0x13')][_0x498d('0x14')]({'raw':_0xf46ca[_0x498d('0x15')]?_0xf46ca['options'][_0x498d('0x16')]===undefined?!![]:![]:!![],'where':_0xf46ca[_0x498d('0x15')]?_0xf46ca[_0x498d('0x15')]['where']||null:null,'attributes':_0xf46ca[_0x498d('0x15')]?_0xf46ca['options']['attributes']||null:null,'limit':_0xf46ca[_0x498d('0x15')]?_0xf46ca[_0x498d('0x15')]['limit']||null:null,'include':_0xf46ca[_0x498d('0x15')]?_0xf46ca[_0x498d('0x15')][_0x498d('0x17')]?_['map'](_0xf46ca['options']['include'],function(_0x15f051){return{'model':db[_0x15f051[_0x498d('0x18')]],'as':_0x15f051['as'],'attributes':_0x15f051[_0x498d('0x19')],'include':_0x15f051['include']?_['map'](_0x15f051[_0x498d('0x17')],function(_0x287636){return{'model':db[_0x287636[_0x498d('0x18')]],'as':_0x287636['as'],'attributes':_0x287636['attributes'],'include':_0x287636['include']?_[_0x498d('0x1a')](_0x287636[_0x498d('0x17')],function(_0x2a6856){return{'model':db[_0x2a6856[_0x498d('0x18')]],'as':_0x2a6856['as'],'attributes':_0x2a6856[_0x498d('0x19')]};}):[]};}):[]};}):[]:[]})[_0x498d('0x1b')](function(_0x45107e){logger[_0x498d('0x8')](_0x498d('0x1c'),_0xf46ca);logger['debug'](_0x498d('0x1c'),_0xf46ca,JSON[_0x498d('0xc')](_0x45107e));_0x5471ad(_0x45107e);})[_0x498d('0x12')](function(_0x294572){logger[_0x498d('0xd')](_0x498d('0x1c'),_0x294572[_0x498d('0xf')],_0xf46ca);_0x4249c6(_0x5e12d8['error'](0x1f4,_0x294572[_0x498d('0xf')]));});});};exports[_0x498d('0x1d')]=function(_0x3e4cab){var _0x12bbab=this;return new Promise(function(_0x4fb508,_0x45a1dc){return db['ZohoAccount'][_0x498d('0x1e')]({'raw':_0x3e4cab['options']?_0x3e4cab[_0x498d('0x15')]['raw']===undefined?!![]:![]:!![],'where':_0x3e4cab[_0x498d('0x15')]?_0x3e4cab['options'][_0x498d('0x1f')]||null:null,'attributes':_0x3e4cab['options']?_0x3e4cab[_0x498d('0x15')][_0x498d('0x19')]||null:null,'include':_0x3e4cab[_0x498d('0x15')]?_0x3e4cab[_0x498d('0x15')]['include']?_[_0x498d('0x1a')](_0x3e4cab[_0x498d('0x15')][_0x498d('0x17')],function(_0x25c973){return{'model':db[_0x25c973[_0x498d('0x18')]],'as':_0x25c973['as'],'attributes':_0x25c973['attributes'],'include':_0x25c973[_0x498d('0x17')]?_['map'](_0x25c973[_0x498d('0x17')],function(_0x2ffd6d){return{'model':db[_0x2ffd6d['model']],'as':_0x2ffd6d['as'],'attributes':_0x2ffd6d[_0x498d('0x19')],'include':_0x2ffd6d['include']?_['map'](_0x2ffd6d['include'],function(_0x8b4c7c){return{'model':db[_0x8b4c7c['model']],'as':_0x8b4c7c['as'],'attributes':_0x8b4c7c[_0x498d('0x19')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x499641){logger[_0x498d('0x8')](_0x498d('0x1d'),_0x3e4cab);logger['debug'](_0x498d('0x1d'),_0x3e4cab,JSON['stringify'](_0x499641));_0x4fb508(_0x499641);})[_0x498d('0x12')](function(_0x57e4da){logger[_0x498d('0xd')](_0x498d('0x1d'),_0x57e4da[_0x498d('0xf')],_0x3e4cab);_0x45a1dc(_0x12bbab[_0x498d('0xd')](0x1f4,_0x57e4da[_0x498d('0xf')]));});});};
\ No newline at end of file
+var _0xb493=['ZohoAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetZohoAccount','ZohoAccount','findAll','options','raw','where','attributes','include','map','model','ShowZohoAccount','find','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','jayson/promise','client','http','request','then','info','ZohoAccount,\x20%s,\x20%s','request\x20sent','debug'];(function(_0xa98302,_0x844f27){var _0x1ad8e3=function(_0x57e51d){while(--_0x57e51d){_0xa98302['push'](_0xa98302['shift']());}};_0x1ad8e3(++_0x844f27);}(_0xb493,0x14e));var _0x3b49=function(_0x4c6d91,_0x3ad457){_0x4c6d91=_0x4c6d91-0x0;var _0x130111=_0xb493[_0x4c6d91];return _0x130111;};'use strict';var _=require(_0x3b49('0x0'));var util=require(_0x3b49('0x1'));var moment=require('moment');var BPromise=require(_0x3b49('0x2'));var rs=require(_0x3b49('0x3'));var fs=require('fs');var Redis=require(_0x3b49('0x4'));var db=require(_0x3b49('0x5'))['db'];var utils=require(_0x3b49('0x6'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0x3b49('0x7'));var client=jayson[_0x3b49('0x8')][_0x3b49('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5a008e,_0x202f91,_0x1a819e){return new BPromise(function(_0x2c0289,_0x1d5f6a){return client[_0x3b49('0xa')](_0x5a008e,_0x1a819e)[_0x3b49('0xb')](function(_0x2cac2f){logger[_0x3b49('0xc')](_0x3b49('0xd'),_0x202f91,_0x3b49('0xe'));logger[_0x3b49('0xf')](_0x3b49('0x10'),_0x202f91,'request\x20sent',JSON[_0x3b49('0x11')](_0x2cac2f));if(_0x2cac2f[_0x3b49('0x12')]){if(_0x2cac2f[_0x3b49('0x12')][_0x3b49('0x13')]===0x1f4){logger[_0x3b49('0x12')](_0x3b49('0xd'),_0x202f91,_0x2cac2f[_0x3b49('0x12')][_0x3b49('0x14')]);return _0x1d5f6a(_0x2cac2f[_0x3b49('0x12')][_0x3b49('0x14')]);}logger[_0x3b49('0x12')](_0x3b49('0xd'),_0x202f91,_0x2cac2f[_0x3b49('0x12')][_0x3b49('0x14')]);return _0x2c0289(_0x2cac2f[_0x3b49('0x12')][_0x3b49('0x14')]);}else{logger[_0x3b49('0xc')](_0x3b49('0xd'),_0x202f91,'request\x20sent');_0x2c0289(_0x2cac2f[_0x3b49('0x15')][_0x3b49('0x14')]);}})[_0x3b49('0x16')](function(_0x1e2328){logger[_0x3b49('0x12')](_0x3b49('0xd'),_0x202f91,_0x1e2328);_0x1d5f6a(_0x1e2328);});});}exports[_0x3b49('0x17')]=function(_0x28bfe7){var _0x361ed1=this;return new Promise(function(_0x55acca,_0x2940be){return db[_0x3b49('0x18')][_0x3b49('0x19')]({'raw':_0x28bfe7[_0x3b49('0x1a')]?_0x28bfe7[_0x3b49('0x1a')][_0x3b49('0x1b')]===undefined?!![]:![]:!![],'where':_0x28bfe7[_0x3b49('0x1a')]?_0x28bfe7[_0x3b49('0x1a')][_0x3b49('0x1c')]||null:null,'attributes':_0x28bfe7[_0x3b49('0x1a')]?_0x28bfe7[_0x3b49('0x1a')][_0x3b49('0x1d')]||null:null,'limit':_0x28bfe7[_0x3b49('0x1a')]?_0x28bfe7[_0x3b49('0x1a')]['limit']||null:null,'include':_0x28bfe7['options']?_0x28bfe7['options'][_0x3b49('0x1e')]?_[_0x3b49('0x1f')](_0x28bfe7[_0x3b49('0x1a')][_0x3b49('0x1e')],function(_0x455530){return{'model':db[_0x455530[_0x3b49('0x20')]],'as':_0x455530['as'],'attributes':_0x455530[_0x3b49('0x1d')],'include':_0x455530['include']?_[_0x3b49('0x1f')](_0x455530[_0x3b49('0x1e')],function(_0x4eed35){return{'model':db[_0x4eed35[_0x3b49('0x20')]],'as':_0x4eed35['as'],'attributes':_0x4eed35[_0x3b49('0x1d')],'include':_0x4eed35[_0x3b49('0x1e')]?_[_0x3b49('0x1f')](_0x4eed35[_0x3b49('0x1e')],function(_0xc23aae){return{'model':db[_0xc23aae[_0x3b49('0x20')]],'as':_0xc23aae['as'],'attributes':_0xc23aae[_0x3b49('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x3b49('0xb')](function(_0x16779f){logger[_0x3b49('0xc')](_0x3b49('0x17'),_0x28bfe7);logger[_0x3b49('0xf')]('GetZohoAccount',_0x28bfe7,JSON[_0x3b49('0x11')](_0x16779f));_0x55acca(_0x16779f);})[_0x3b49('0x16')](function(_0x395f74){logger[_0x3b49('0x12')](_0x3b49('0x17'),_0x395f74[_0x3b49('0x14')],_0x28bfe7);_0x2940be(_0x361ed1['error'](0x1f4,_0x395f74[_0x3b49('0x14')]));});});};exports[_0x3b49('0x21')]=function(_0x545c93){var _0x1ae27b=this;return new Promise(function(_0x5da9d7,_0x2335fa){return db[_0x3b49('0x18')][_0x3b49('0x22')]({'raw':_0x545c93[_0x3b49('0x1a')]?_0x545c93[_0x3b49('0x1a')][_0x3b49('0x1b')]===undefined?!![]:![]:!![],'where':_0x545c93[_0x3b49('0x1a')]?_0x545c93[_0x3b49('0x1a')][_0x3b49('0x1c')]||null:null,'attributes':_0x545c93['options']?_0x545c93['options'][_0x3b49('0x1d')]||null:null,'include':_0x545c93[_0x3b49('0x1a')]?_0x545c93[_0x3b49('0x1a')]['include']?_['map'](_0x545c93[_0x3b49('0x1a')][_0x3b49('0x1e')],function(_0x9092b7){return{'model':db[_0x9092b7['model']],'as':_0x9092b7['as'],'attributes':_0x9092b7[_0x3b49('0x1d')],'include':_0x9092b7['include']?_[_0x3b49('0x1f')](_0x9092b7[_0x3b49('0x1e')],function(_0x2c7e55){return{'model':db[_0x2c7e55[_0x3b49('0x20')]],'as':_0x2c7e55['as'],'attributes':_0x2c7e55[_0x3b49('0x1d')],'include':_0x2c7e55['include']?_['map'](_0x2c7e55[_0x3b49('0x1e')],function(_0x57e1aa){return{'model':db[_0x57e1aa[_0x3b49('0x20')]],'as':_0x57e1aa['as'],'attributes':_0x57e1aa[_0x3b49('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x3b49('0xb')](function(_0x38b357){logger[_0x3b49('0xc')](_0x3b49('0x21'),_0x545c93);logger[_0x3b49('0xf')]('ShowZohoAccount',_0x545c93,JSON[_0x3b49('0x11')](_0x38b357));_0x5da9d7(_0x38b357);})[_0x3b49('0x16')](function(_0x267bb1){logger['error'](_0x3b49('0x21'),_0x267bb1['message'],_0x545c93);_0x2335fa(_0x1ae27b['error'](0x1f4,_0x267bb1[_0x3b49('0x14')]));});});};
\ No newline at end of file
index c1ab88b..cf6177e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x61e6=['update','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intZohoConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','post','create','put'];(function(_0x208c54,_0x120a70){var _0x4b0116=function(_0x32be34){while(--_0x32be34){_0x208c54['push'](_0x208c54['shift']());}};_0x4b0116(++_0x120a70);}(_0x61e6,0x9a));var _0x661e=function(_0x4f0235,_0x694d01){_0x4f0235=_0x4f0235-0x0;var _0x435043=_0x61e6[_0x4f0235];return _0x435043;};'use strict';var multer=require(_0x661e('0x0'));var util=require(_0x661e('0x1'));var path=require(_0x661e('0x2'));var timeout=require('connect-timeout');var express=require(_0x661e('0x3'));var router=express[_0x661e('0x4')]();var auth=require(_0x661e('0x5'));var interaction=require(_0x661e('0x6'));var config=require(_0x661e('0x7'));var controller=require(_0x661e('0x8'));router[_0x661e('0x9')]('/',auth[_0x661e('0xa')](),controller[_0x661e('0xb')]);router[_0x661e('0x9')](_0x661e('0xc'),auth[_0x661e('0xa')](),controller[_0x661e('0xd')]);router[_0x661e('0x9')](_0x661e('0xe'),auth[_0x661e('0xa')](),controller[_0x661e('0xf')]);router[_0x661e('0x9')](_0x661e('0x10'),auth[_0x661e('0xa')](),controller[_0x661e('0x11')]);router[_0x661e('0x9')]('/:id/descriptions',auth[_0x661e('0xa')](),controller['getDescriptions']);router[_0x661e('0x12')]('/',auth[_0x661e('0xa')](),controller[_0x661e('0x13')]);router[_0x661e('0x14')](_0x661e('0xc'),auth[_0x661e('0xa')](),controller[_0x661e('0x15')]);router[_0x661e('0x16')](_0x661e('0xc'),auth[_0x661e('0xa')](),controller[_0x661e('0x17')]);module[_0x661e('0x18')]=router;
\ No newline at end of file
+var _0xe2cc=['../../components/interaction/service','../../config/environment','./intZohoConfiguration.controller','get','isAuthenticated','/:id','show','/:id/fields','/:id/subjects','getSubjects','/:id/descriptions','getDescriptions','post','create','put','update','exports','multer','util','express','Router','../../components/auth/service'];(function(_0x4d50aa,_0x10395){var _0x14a3b3=function(_0x389c0f){while(--_0x389c0f){_0x4d50aa['push'](_0x4d50aa['shift']());}};_0x14a3b3(++_0x10395);}(_0xe2cc,0x69));var _0xce2c=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0xe2cc[_0x2f5ac5];return _0x37c9a8;};'use strict';var multer=require(_0xce2c('0x0'));var util=require(_0xce2c('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0xce2c('0x2'));var router=express[_0xce2c('0x3')]();var auth=require(_0xce2c('0x4'));var interaction=require(_0xce2c('0x5'));var config=require(_0xce2c('0x6'));var controller=require(_0xce2c('0x7'));router[_0xce2c('0x8')]('/',auth[_0xce2c('0x9')](),controller['index']);router['get'](_0xce2c('0xa'),auth[_0xce2c('0x9')](),controller[_0xce2c('0xb')]);router[_0xce2c('0x8')](_0xce2c('0xc'),auth[_0xce2c('0x9')](),controller['getFields']);router[_0xce2c('0x8')](_0xce2c('0xd'),auth[_0xce2c('0x9')](),controller[_0xce2c('0xe')]);router[_0xce2c('0x8')](_0xce2c('0xf'),auth[_0xce2c('0x9')](),controller[_0xce2c('0x10')]);router[_0xce2c('0x11')]('/',auth[_0xce2c('0x9')](),controller[_0xce2c('0x12')]);router[_0xce2c('0x13')](_0xce2c('0xa'),auth[_0xce2c('0x9')](),controller[_0xce2c('0x14')]);router['delete']('/:id',auth[_0xce2c('0x9')](),controller['destroy']);module[_0xce2c('0x15')]=router;
\ No newline at end of file
index a3f099e..8cebb50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa8c6=['STRING','sequelize','exports'];(function(_0x26d10f,_0x30c1bb){var _0x48114a=function(_0x2adca9){while(--_0x2adca9){_0x26d10f['push'](_0x26d10f['shift']());}};_0x48114a(++_0x30c1bb);}(_0xa8c6,0x124));var _0x6a8c=function(_0x2bd6d9,_0x2071cb){_0x2bd6d9=_0x2bd6d9-0x0;var _0x4b4929=_0xa8c6[_0x2bd6d9];return _0x4b4929;};'use strict';var Sequelize=require(_0x6a8c('0x0'));module[_0x6a8c('0x1')]={'name':{'type':Sequelize[_0x6a8c('0x2')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x5398=['sequelize','STRING'];(function(_0x5d724e,_0x59d033){var _0x5ba326=function(_0x1e36e6){while(--_0x1e36e6){_0x5d724e['push'](_0x5d724e['shift']());}};_0x5ba326(++_0x59d033);}(_0x5398,0x6c));var _0x8539=function(_0x4d7845,_0x214ea8){_0x4d7845=_0x4d7845-0x0;var _0x3b7c57=_0x5398[_0x4d7845];return _0x3b7c57;};'use strict';var Sequelize=require(_0x8539('0x0'));module['exports']={'name':{'type':Sequelize[_0x8539('0x1')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 981fb1c..e2a3cdd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x11c5=['pick','filter','type','key','field','merge','options','include','rows','show','params','length','create','body','find','findOne','map','getSubjects','ZohoField','getDescriptions','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','mustache','util','path','to-csv','ejs','lodash','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../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','ZohoConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','save','update','destroy','stack','name','send','index','ZohoConfiguration','rawAttributes','keys','filters','intersection','model','query','attributes','fields','hasOwnProperty','nolimit','order','sort','where'];(function(_0x41f144,_0x21669b){var _0x4658f3=function(_0x248d09){while(--_0x248d09){_0x41f144['push'](_0x41f144['shift']());}};_0x4658f3(++_0x21669b);}(_0x11c5,0x6e));var _0x511c=function(_0x44457d,_0x434b72){_0x44457d=_0x44457d-0x0;var _0x103ea=_0x11c5[_0x44457d];return _0x103ea;};'use strict';var pdf=require(_0x511c('0x0'));var emlformat=require(_0x511c('0x1'));var rimraf=require(_0x511c('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x511c('0x3'));var rp=require(_0x511c('0x4'));var moment=require(_0x511c('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x511c('0x6'));var util=require(_0x511c('0x7'));var path=require(_0x511c('0x8'));var sox=require('sox');var csv=require(_0x511c('0x9'));var ejs=require(_0x511c('0xa'));var fs=require('fs');var _=require(_0x511c('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x511c('0xc'));var toCsv=require('to-csv');var querystring=require(_0x511c('0xd'));var Papa=require(_0x511c('0xe'));var Redis=require('ioredis');var authService=require(_0x511c('0xf'));var qs=require(_0x511c('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x511c('0x11'))('api');var utils=require(_0x511c('0x12'));var config=require(_0x511c('0x13'));var db=require(_0x511c('0x14'))['db'];var jayson=require(_0x511c('0x15'));var client=jayson[_0x511c('0x16')][_0x511c('0x17')]({'port':0x232a});function checkPasswordPattern(_0x150395,_0x582a5d,_0x4adb30){if(_0x4adb30){var _0x3cb726=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3cb726[_0x511c('0x18')](_0x582a5d)){return _0x150395;}else{throw new Error(_0x511c('0x19'));}}else{return _0x150395;}}function respondWithRpcPromise(_0x26e18d,_0x13b327,_0x448f6a,_0x5df68e){return new BPromise(function(_0x3e8847,_0x556017){var _0x59d138=_0x5df68e||client;return _0x59d138[_0x511c('0x1a')](_0x26e18d,_0x448f6a)[_0x511c('0x1b')](function(_0x7b23dd){logger[_0x511c('0x1c')](_0x511c('0x1d'),_0x13b327,_0x511c('0x1e'));logger[_0x511c('0x1f')]('ZohoConfiguration,\x20%s,\x20%s,\x20%s',_0x13b327,_0x511c('0x1e'),JSON[_0x511c('0x20')](_0x7b23dd));if(_0x7b23dd[_0x511c('0x21')]){if(_0x7b23dd[_0x511c('0x21')][_0x511c('0x22')]===0x1f4){logger['error'](_0x511c('0x1d'),_0x13b327,_0x7b23dd[_0x511c('0x21')][_0x511c('0x23')]);return _0x556017(_0x7b23dd[_0x511c('0x21')][_0x511c('0x23')]);}logger['error']('ZohoConfiguration,\x20%s,\x20%s',_0x13b327,_0x7b23dd['error'][_0x511c('0x23')]);return _0x3e8847(_0x7b23dd[_0x511c('0x21')][_0x511c('0x23')]);}else{logger[_0x511c('0x1c')](_0x511c('0x1d'),_0x13b327,_0x511c('0x1e'));_0x3e8847(_0x7b23dd[_0x511c('0x24')][_0x511c('0x23')]);}})[_0x511c('0x25')](function(_0x34ec75){logger[_0x511c('0x21')]('ZohoConfiguration,\x20%s,\x20%s',_0x13b327,_0x34ec75);_0x556017(_0x34ec75);});});}function respondWithStatusCode(_0x25ef92,_0x7ed50a){_0x7ed50a=_0x7ed50a||0xcc;return function(_0x649bb4){if(_0x649bb4){return _0x25ef92[_0x511c('0x26')](_0x7ed50a);}return _0x25ef92[_0x511c('0x27')](_0x7ed50a)[_0x511c('0x28')]();};}function respondWithResult(_0x14cf54,_0xb1b550){_0xb1b550=_0xb1b550||0xc8;return function(_0x52a456){if(_0x52a456){return _0x14cf54[_0x511c('0x27')](_0xb1b550)['json'](_0x52a456);}};}function respondWithFilteredResult(_0xc845a,_0x58e7da){return function(_0x110f8f){if(_0x110f8f){var _0x47c217=_0x110f8f[_0x511c('0x29')],_0x275254=_0x58e7da[_0x511c('0x2a')],_0x3896cc=_0x58e7da[_0x511c('0x2a')]+_0x58e7da[_0x511c('0x2b')],_0x33d43c;if(_0x3896cc>=_0x47c217){_0x3896cc=_0x47c217;_0x33d43c=0xc8;}else{_0x33d43c=0xce;}_0xc845a[_0x511c('0x27')](_0x33d43c);return _0xc845a[_0x511c('0x2c')](_0x511c('0x2d'),_0x275254+'-'+_0x3896cc+'/'+_0x47c217)[_0x511c('0x2e')](_0x110f8f);}return null;};}function patchUpdates(_0x47c65e){return function(_0x10c750){try{jsonpatch[_0x511c('0x2f')](_0x10c750,_0x47c65e,!![]);}catch(_0x8f11d6){return BPromise[_0x511c('0x30')](_0x8f11d6);}return _0x10c750[_0x511c('0x31')]();};}function saveUpdates(_0x9cce8f,_0x2118f6){return function(_0xb694ee){if(_0xb694ee){return _0xb694ee[_0x511c('0x32')](_0x9cce8f)['then'](function(_0x12b7df){return _0x12b7df;});}return null;};}function removeEntity(_0x325fdd,_0x904ad1){return function(_0x48efa5){if(_0x48efa5){return _0x48efa5[_0x511c('0x33')]()[_0x511c('0x1b')](function(){_0x325fdd['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x2a436d,_0x528e1b){return function(_0x4a5ea2){if(!_0x4a5ea2){_0x2a436d[_0x511c('0x26')](0x194);}return _0x4a5ea2;};}function handleError(_0x566a88,_0x22a248){_0x22a248=_0x22a248||0x1f4;return function(_0x5a0b3d){logger[_0x511c('0x21')](_0x5a0b3d[_0x511c('0x34')]);if(_0x5a0b3d[_0x511c('0x35')]){delete _0x5a0b3d[_0x511c('0x35')];}_0x566a88[_0x511c('0x27')](_0x22a248)[_0x511c('0x36')](_0x5a0b3d);};}exports[_0x511c('0x37')]=function(_0x13464b,_0x70deb9){var _0x101f49={},_0x366175={},_0x696a94={'count':0x0,'rows':[]};var _0x3858d0=db[_0x511c('0x38')][_0x511c('0x39')];_0x366175['model']=_[_0x511c('0x3a')](_0x3858d0);_0x366175['query']=_[_0x511c('0x3a')](_0x13464b['query']);_0x366175[_0x511c('0x3b')]=_[_0x511c('0x3c')](_0x366175[_0x511c('0x3d')],_0x366175[_0x511c('0x3e')]);_0x101f49[_0x511c('0x3f')]=_[_0x511c('0x3c')](_0x366175['model'],qs[_0x511c('0x40')](_0x13464b['query'][_0x511c('0x40')]));_0x101f49[_0x511c('0x3f')]=_0x101f49['attributes']['length']?_0x101f49['attributes']:_0x366175[_0x511c('0x3d')];if(!_0x13464b[_0x511c('0x3e')][_0x511c('0x41')](_0x511c('0x42'))){_0x101f49[_0x511c('0x2b')]=qs[_0x511c('0x2b')](_0x13464b['query']['limit']);_0x101f49[_0x511c('0x2a')]=qs[_0x511c('0x2a')](_0x13464b[_0x511c('0x3e')]['offset']);}_0x101f49[_0x511c('0x43')]=qs[_0x511c('0x44')](_0x13464b[_0x511c('0x3e')][_0x511c('0x44')]);_0x101f49[_0x511c('0x45')]=qs[_0x511c('0x3b')](_[_0x511c('0x46')](_0x13464b['query'],_0x366175[_0x511c('0x3b')]));if(_0x13464b['query'][_0x511c('0x47')]){_0x101f49['where']=_['merge'](_0x101f49[_0x511c('0x45')],{'$or':_['map'](_0x3858d0,function(_0x119463){if(_0x119463[_0x511c('0x48')][_0x511c('0x49')]!=='VIRTUAL'){var _0x37e282={};_0x37e282[_0x119463[_0x511c('0x4a')]]={'$like':'%'+_0x13464b['query'][_0x511c('0x47')]+'%'};return _0x37e282;}})});}_0x101f49=_[_0x511c('0x4b')]({},_0x101f49,_0x13464b[_0x511c('0x4c')]);var _0x32a440={'where':_0x101f49[_0x511c('0x45')]};return db[_0x511c('0x38')][_0x511c('0x29')](_0x32a440)['then'](function(_0x48ae2c){_0x696a94[_0x511c('0x29')]=_0x48ae2c;if(_0x13464b[_0x511c('0x3e')]['includeAll']){_0x101f49[_0x511c('0x4d')]=[{'all':!![]}];}return db[_0x511c('0x38')]['findAll'](_0x101f49);})['then'](function(_0x2ef2a6){_0x696a94[_0x511c('0x4e')]=_0x2ef2a6;return _0x696a94;})['then'](respondWithFilteredResult(_0x70deb9,_0x101f49))[_0x511c('0x25')](handleError(_0x70deb9,null));};exports[_0x511c('0x4f')]=function(_0x6a308,_0x304f12){var _0x2ed115={'raw':![],'where':{'id':_0x6a308[_0x511c('0x50')]['id']}},_0x2b7442={};_0x2b7442[_0x511c('0x3d')]=_[_0x511c('0x3a')](db['ZohoConfiguration']['rawAttributes']);_0x2b7442['query']=_[_0x511c('0x3a')](_0x6a308[_0x511c('0x3e')]);_0x2b7442[_0x511c('0x3b')]=_[_0x511c('0x3c')](_0x2b7442[_0x511c('0x3d')],_0x2b7442[_0x511c('0x3e')]);_0x2ed115[_0x511c('0x3f')]=_[_0x511c('0x3c')](_0x2b7442[_0x511c('0x3d')],qs['fields'](_0x6a308[_0x511c('0x3e')][_0x511c('0x40')]));_0x2ed115[_0x511c('0x3f')]=_0x2ed115[_0x511c('0x3f')][_0x511c('0x51')]?_0x2ed115['attributes']:_0x2b7442[_0x511c('0x3d')];if(_0x6a308['query']['includeAll']){_0x2ed115['include']=[{'all':!![]}];}_0x2ed115=_['merge']({},_0x2ed115,_0x6a308[_0x511c('0x4c')]);return db[_0x511c('0x38')]['find'](_0x2ed115)['then'](handleEntityNotFound(_0x304f12,null))[_0x511c('0x1b')](respondWithResult(_0x304f12,null))[_0x511c('0x25')](handleError(_0x304f12,null));};exports[_0x511c('0x52')]=function(_0x1a632b,_0x360253){return db['ZohoConfiguration']['create'](_0x1a632b[_0x511c('0x53')],{})[_0x511c('0x1b')](respondWithResult(_0x360253,0xc9))[_0x511c('0x25')](handleError(_0x360253,null));};exports[_0x511c('0x32')]=function(_0x20f286,_0x21d788){if(_0x20f286['body']['id']){delete _0x20f286[_0x511c('0x53')]['id'];}return db['ZohoConfiguration'][_0x511c('0x54')]({'where':{'id':_0x20f286[_0x511c('0x50')]['id']}})[_0x511c('0x1b')](handleEntityNotFound(_0x21d788,null))[_0x511c('0x1b')](saveUpdates(_0x20f286[_0x511c('0x53')],null))['then'](respondWithResult(_0x21d788,null))[_0x511c('0x25')](handleError(_0x21d788,null));};exports[_0x511c('0x33')]=function(_0x4d94cd,_0x2bf53c){return db[_0x511c('0x38')][_0x511c('0x54')]({'where':{'id':_0x4d94cd[_0x511c('0x50')]['id']}})[_0x511c('0x1b')](handleEntityNotFound(_0x2bf53c,null))[_0x511c('0x1b')](removeEntity(_0x2bf53c,null))[_0x511c('0x25')](handleError(_0x2bf53c,null));};exports['getFields']=function(_0x3cfee8,_0x30bd5a,_0x1364dc){var _0x43c7fb={};var _0x1e2b0e={};var _0x3af1a0;var _0x342a8f;return db['ZohoConfiguration'][_0x511c('0x55')]({'where':{'id':_0x3cfee8[_0x511c('0x50')]['id']}})[_0x511c('0x1b')](handleEntityNotFound(_0x30bd5a,null))['then'](function(_0x9c59d0){if(_0x9c59d0){_0x3af1a0=_0x9c59d0;_0x1e2b0e['model']=_[_0x511c('0x3a')](db['ZohoField'][_0x511c('0x39')]);_0x1e2b0e[_0x511c('0x3e')]=_[_0x511c('0x3a')](_0x3cfee8['query']);_0x1e2b0e[_0x511c('0x3b')]=_[_0x511c('0x3c')](_0x1e2b0e[_0x511c('0x3d')],_0x1e2b0e[_0x511c('0x3e')]);_0x43c7fb[_0x511c('0x3f')]=_[_0x511c('0x3c')](_0x1e2b0e[_0x511c('0x3d')],qs['fields'](_0x3cfee8[_0x511c('0x3e')]['fields']));_0x43c7fb[_0x511c('0x3f')]=_0x43c7fb[_0x511c('0x3f')]['length']?_0x43c7fb[_0x511c('0x3f')]:_0x1e2b0e[_0x511c('0x3d')];_0x43c7fb[_0x511c('0x43')]=qs['sort'](_0x3cfee8['query']['sort']);_0x43c7fb['where']=qs[_0x511c('0x3b')](_[_0x511c('0x46')](_0x3cfee8[_0x511c('0x3e')],_0x1e2b0e[_0x511c('0x3b')]));if(_0x3cfee8[_0x511c('0x3e')]['filter']){_0x43c7fb[_0x511c('0x45')]=_['merge'](_0x43c7fb[_0x511c('0x45')],{'$or':_[_0x511c('0x56')](_0x43c7fb[_0x511c('0x3f')],function(_0x5eca23){var _0x5be527={};_0x5be527[_0x5eca23]={'$like':'%'+_0x3cfee8[_0x511c('0x3e')][_0x511c('0x47')]+'%'};return _0x5be527;})});}_0x43c7fb=_[_0x511c('0x4b')]({},_0x43c7fb,_0x3cfee8['options']);return _0x3af1a0['getFields'](_0x43c7fb);}})['then'](function(_0x5593b3){if(_0x5593b3){_0x342a8f=_0x5593b3[_0x511c('0x51')];if(!_0x3cfee8['query'][_0x511c('0x41')](_0x511c('0x42'))){_0x43c7fb[_0x511c('0x2b')]=qs[_0x511c('0x2b')](_0x3cfee8[_0x511c('0x3e')][_0x511c('0x2b')]);_0x43c7fb['offset']=qs[_0x511c('0x2a')](_0x3cfee8[_0x511c('0x3e')][_0x511c('0x2a')]);}return _0x3af1a0['getFields'](_0x43c7fb);}})[_0x511c('0x1b')](function(_0x1abf84){if(_0x1abf84){return _0x1abf84?{'count':_0x342a8f,'rows':_0x1abf84}:null;}})[_0x511c('0x1b')](respondWithResult(_0x30bd5a,null))[_0x511c('0x25')](handleError(_0x30bd5a,null));};exports[_0x511c('0x57')]=function(_0x5140c5,_0x4bdee1,_0x5344e6){var _0x118942={};var _0x46703a={};var _0x5c934e;var _0x2fcd32;return db[_0x511c('0x38')][_0x511c('0x55')]({'where':{'id':_0x5140c5[_0x511c('0x50')]['id']}})[_0x511c('0x1b')](handleEntityNotFound(_0x4bdee1,null))[_0x511c('0x1b')](function(_0x3330f6){if(_0x3330f6){_0x5c934e=_0x3330f6;_0x46703a[_0x511c('0x3d')]=_[_0x511c('0x3a')](db['ZohoField'][_0x511c('0x39')]);_0x46703a[_0x511c('0x3e')]=_[_0x511c('0x3a')](_0x5140c5[_0x511c('0x3e')]);_0x46703a[_0x511c('0x3b')]=_[_0x511c('0x3c')](_0x46703a[_0x511c('0x3d')],_0x46703a[_0x511c('0x3e')]);_0x118942[_0x511c('0x3f')]=_['intersection'](_0x46703a[_0x511c('0x3d')],qs['fields'](_0x5140c5[_0x511c('0x3e')][_0x511c('0x40')]));_0x118942[_0x511c('0x3f')]=_0x118942[_0x511c('0x3f')][_0x511c('0x51')]?_0x118942[_0x511c('0x3f')]:_0x46703a[_0x511c('0x3d')];_0x118942[_0x511c('0x43')]=qs[_0x511c('0x44')](_0x5140c5[_0x511c('0x3e')][_0x511c('0x44')]);_0x118942[_0x511c('0x45')]=qs[_0x511c('0x3b')](_[_0x511c('0x46')](_0x5140c5[_0x511c('0x3e')],_0x46703a[_0x511c('0x3b')]));if(_0x5140c5[_0x511c('0x3e')]['filter']){_0x118942[_0x511c('0x45')]=_[_0x511c('0x4b')](_0x118942[_0x511c('0x45')],{'$or':_[_0x511c('0x56')](_0x118942[_0x511c('0x3f')],function(_0x1fbd62){var _0x3120f3={};_0x3120f3[_0x1fbd62]={'$like':'%'+_0x5140c5[_0x511c('0x3e')][_0x511c('0x47')]+'%'};return _0x3120f3;})});}_0x118942=_[_0x511c('0x4b')]({},_0x118942,_0x5140c5[_0x511c('0x4c')]);return _0x5c934e[_0x511c('0x57')](_0x118942);}})[_0x511c('0x1b')](function(_0x312315){if(_0x312315){_0x2fcd32=_0x312315[_0x511c('0x51')];if(!_0x5140c5['query'][_0x511c('0x41')](_0x511c('0x42'))){_0x118942[_0x511c('0x2b')]=qs['limit'](_0x5140c5[_0x511c('0x3e')][_0x511c('0x2b')]);_0x118942['offset']=qs[_0x511c('0x2a')](_0x5140c5['query'][_0x511c('0x2a')]);}return _0x5c934e[_0x511c('0x57')](_0x118942);}})['then'](function(_0x55b799){if(_0x55b799){return _0x55b799?{'count':_0x2fcd32,'rows':_0x55b799}:null;}})[_0x511c('0x1b')](respondWithResult(_0x4bdee1,null))[_0x511c('0x25')](handleError(_0x4bdee1,null));};exports['getDescriptions']=function(_0x5cd728,_0x523340,_0xb41c3f){var _0x675475={};var _0x5c47ee={};var _0x31ea5a;var _0x4350e5;return db[_0x511c('0x38')][_0x511c('0x55')]({'where':{'id':_0x5cd728[_0x511c('0x50')]['id']}})[_0x511c('0x1b')](handleEntityNotFound(_0x523340,null))[_0x511c('0x1b')](function(_0x438e9e){if(_0x438e9e){_0x31ea5a=_0x438e9e;_0x5c47ee[_0x511c('0x3d')]=_[_0x511c('0x3a')](db[_0x511c('0x58')][_0x511c('0x39')]);_0x5c47ee[_0x511c('0x3e')]=_[_0x511c('0x3a')](_0x5cd728['query']);_0x5c47ee['filters']=_[_0x511c('0x3c')](_0x5c47ee[_0x511c('0x3d')],_0x5c47ee[_0x511c('0x3e')]);_0x675475[_0x511c('0x3f')]=_[_0x511c('0x3c')](_0x5c47ee['model'],qs[_0x511c('0x40')](_0x5cd728[_0x511c('0x3e')][_0x511c('0x40')]));_0x675475[_0x511c('0x3f')]=_0x675475[_0x511c('0x3f')]['length']?_0x675475[_0x511c('0x3f')]:_0x5c47ee[_0x511c('0x3d')];_0x675475[_0x511c('0x43')]=qs[_0x511c('0x44')](_0x5cd728[_0x511c('0x3e')][_0x511c('0x44')]);_0x675475[_0x511c('0x45')]=qs[_0x511c('0x3b')](_['pick'](_0x5cd728[_0x511c('0x3e')],_0x5c47ee[_0x511c('0x3b')]));if(_0x5cd728['query']['filter']){_0x675475[_0x511c('0x45')]=_[_0x511c('0x4b')](_0x675475[_0x511c('0x45')],{'$or':_[_0x511c('0x56')](_0x675475[_0x511c('0x3f')],function(_0x2913f5){var _0xbd578d={};_0xbd578d[_0x2913f5]={'$like':'%'+_0x5cd728['query'][_0x511c('0x47')]+'%'};return _0xbd578d;})});}_0x675475=_[_0x511c('0x4b')]({},_0x675475,_0x5cd728['options']);return _0x31ea5a[_0x511c('0x59')](_0x675475);}})[_0x511c('0x1b')](function(_0x10ccfc){if(_0x10ccfc){_0x4350e5=_0x10ccfc['length'];if(!_0x5cd728['query'][_0x511c('0x41')](_0x511c('0x42'))){_0x675475[_0x511c('0x2b')]=qs[_0x511c('0x2b')](_0x5cd728['query'][_0x511c('0x2b')]);_0x675475['offset']=qs[_0x511c('0x2a')](_0x5cd728['query'][_0x511c('0x2a')]);}return _0x31ea5a[_0x511c('0x59')](_0x675475);}})[_0x511c('0x1b')](function(_0x1b1a50){if(_0x1b1a50){return _0x1b1a50?{'count':_0x4350e5,'rows':_0x1b1a50}:null;}})['then'](respondWithResult(_0x523340,null))[_0x511c('0x25')](handleError(_0x523340,null));};
\ No newline at end of file
+var _0xbecb=['info','ZohoConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','status','json','count','offset','limit','set','reject','save','update','then','sendStatus','stack','name','send','ZohoConfiguration','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','merge','map','type','key','VIRTUAL','includeAll','include','findAll','rows','show','options','find','catch','create','body','destroy','params','getFields','pick','filter','hasOwnProperty','findOne','ZohoField','getSubjects','getDescriptions','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../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~!@#$%^&-_=+[{]}.'];(function(_0x331b87,_0x2f9949){var _0x409129=function(_0x5cd4e7){while(--_0x5cd4e7){_0x331b87['push'](_0x331b87['shift']());}};_0x409129(++_0x2f9949);}(_0xbecb,0xef));var _0xbbec=function(_0x1035c1,_0x2d8583){_0x1035c1=_0x1035c1-0x0;var _0x308d67=_0xbecb[_0x1035c1];return _0x308d67;};'use strict';var pdf=require(_0xbbec('0x0'));var emlformat=require(_0xbbec('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xbbec('0x2'));var jsonpatch=require(_0xbbec('0x3'));var rp=require(_0xbbec('0x4'));var moment=require(_0xbbec('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xbbec('0x6'));var util=require(_0xbbec('0x7'));var path=require('path');var sox=require(_0xbbec('0x8'));var csv=require(_0xbbec('0x9'));var ejs=require(_0xbbec('0xa'));var fs=require('fs');var _=require(_0xbbec('0xb'));var squel=require(_0xbbec('0xc'));var crypto=require(_0xbbec('0xd'));var jsforce=require(_0xbbec('0xe'));var deskjs=require(_0xbbec('0xf'));var toCsv=require('to-csv');var querystring=require(_0xbbec('0x10'));var Papa=require(_0xbbec('0x11'));var Redis=require(_0xbbec('0x12'));var authService=require('../../components/auth/service');var qs=require(_0xbbec('0x13'));var hardwareService=require(_0xbbec('0x14'));var logger=require(_0xbbec('0x15'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xbbec('0x16'))['db'];var jayson=require(_0xbbec('0x17'));var client=jayson[_0xbbec('0x18')][_0xbbec('0x19')]({'port':0x232a});function checkPasswordPattern(_0xd84a62,_0x4822c4,_0x3bed44){if(_0x3bed44){var _0x55a64b=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x55a64b[_0xbbec('0x1a')](_0x4822c4)){return _0xd84a62;}else{throw new Error(_0xbbec('0x1b'));}}else{return _0xd84a62;}}function respondWithRpcPromise(_0x7e64b,_0xadf40a,_0x29a590,_0x1164db){return new BPromise(function(_0x236e60,_0x585000){var _0x48198f=_0x1164db||client;return _0x48198f['request'](_0x7e64b,_0x29a590)['then'](function(_0x13dd06){logger[_0xbbec('0x1c')](_0xbbec('0x1d'),_0xadf40a,_0xbbec('0x1e'));logger[_0xbbec('0x1f')]('ZohoConfiguration,\x20%s,\x20%s,\x20%s',_0xadf40a,'request\x20sent',JSON[_0xbbec('0x20')](_0x13dd06));if(_0x13dd06['error']){if(_0x13dd06[_0xbbec('0x21')][_0xbbec('0x22')]===0x1f4){logger[_0xbbec('0x21')]('ZohoConfiguration,\x20%s,\x20%s',_0xadf40a,_0x13dd06[_0xbbec('0x21')]['message']);return _0x585000(_0x13dd06[_0xbbec('0x21')][_0xbbec('0x23')]);}logger[_0xbbec('0x21')]('ZohoConfiguration,\x20%s,\x20%s',_0xadf40a,_0x13dd06[_0xbbec('0x21')][_0xbbec('0x23')]);return _0x236e60(_0x13dd06[_0xbbec('0x21')]['message']);}else{logger['info'](_0xbbec('0x1d'),_0xadf40a,_0xbbec('0x1e'));_0x236e60(_0x13dd06['result'][_0xbbec('0x23')]);}})['catch'](function(_0x2d5623){logger['error'](_0xbbec('0x1d'),_0xadf40a,_0x2d5623);_0x585000(_0x2d5623);});});}function respondWithStatusCode(_0x217cc9,_0x4f186d){_0x4f186d=_0x4f186d||0xcc;return function(_0x5c4506){if(_0x5c4506){return _0x217cc9['sendStatus'](_0x4f186d);}return _0x217cc9[_0xbbec('0x24')](_0x4f186d)['end']();};}function respondWithResult(_0x463b8a,_0x38272b){_0x38272b=_0x38272b||0xc8;return function(_0xd07cb2){if(_0xd07cb2){return _0x463b8a[_0xbbec('0x24')](_0x38272b)[_0xbbec('0x25')](_0xd07cb2);}};}function respondWithFilteredResult(_0x45344a,_0x23b002){return function(_0x3cfbb2){if(_0x3cfbb2){var _0x1a2c66=_0x3cfbb2[_0xbbec('0x26')],_0x72e92e=_0x23b002[_0xbbec('0x27')],_0x2c28ec=_0x23b002[_0xbbec('0x27')]+_0x23b002[_0xbbec('0x28')],_0x363b5d;if(_0x2c28ec>=_0x1a2c66){_0x2c28ec=_0x1a2c66;_0x363b5d=0xc8;}else{_0x363b5d=0xce;}_0x45344a['status'](_0x363b5d);return _0x45344a[_0xbbec('0x29')]('Content-Range',_0x72e92e+'-'+_0x2c28ec+'/'+_0x1a2c66)[_0xbbec('0x25')](_0x3cfbb2);}return null;};}function patchUpdates(_0x4d7ccd){return function(_0x224b3){try{jsonpatch['apply'](_0x224b3,_0x4d7ccd,!![]);}catch(_0x57be15){return BPromise[_0xbbec('0x2a')](_0x57be15);}return _0x224b3[_0xbbec('0x2b')]();};}function saveUpdates(_0xe410c0,_0x256c8f){return function(_0x43fecf){if(_0x43fecf){return _0x43fecf[_0xbbec('0x2c')](_0xe410c0)['then'](function(_0x5ebb2f){return _0x5ebb2f;});}return null;};}function removeEntity(_0x10bb6b,_0x4a4e63){return function(_0x1ed64d){if(_0x1ed64d){return _0x1ed64d['destroy']()[_0xbbec('0x2d')](function(){_0x10bb6b['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x4e3a65,_0x34d5b5){return function(_0x5d3ae5){if(!_0x5d3ae5){_0x4e3a65[_0xbbec('0x2e')](0x194);}return _0x5d3ae5;};}function handleError(_0x399511,_0x5d85df){_0x5d85df=_0x5d85df||0x1f4;return function(_0x14827e){logger['error'](_0x14827e[_0xbbec('0x2f')]);if(_0x14827e[_0xbbec('0x30')]){delete _0x14827e['name'];}_0x399511['status'](_0x5d85df)[_0xbbec('0x31')](_0x14827e);};}exports['index']=function(_0x1d01a0,_0x34c750){var _0xa73cb2={},_0x463b78={},_0x3aabb2={'count':0x0,'rows':[]};var _0x245d4d=db[_0xbbec('0x32')][_0xbbec('0x33')];_0x463b78[_0xbbec('0x34')]=_[_0xbbec('0x35')](_0x245d4d);_0x463b78[_0xbbec('0x36')]=_[_0xbbec('0x35')](_0x1d01a0['query']);_0x463b78[_0xbbec('0x37')]=_[_0xbbec('0x38')](_0x463b78[_0xbbec('0x34')],_0x463b78[_0xbbec('0x36')]);_0xa73cb2[_0xbbec('0x39')]=_['intersection'](_0x463b78['model'],qs[_0xbbec('0x3a')](_0x1d01a0[_0xbbec('0x36')][_0xbbec('0x3a')]));_0xa73cb2[_0xbbec('0x39')]=_0xa73cb2[_0xbbec('0x39')][_0xbbec('0x3b')]?_0xa73cb2[_0xbbec('0x39')]:_0x463b78[_0xbbec('0x34')];if(!_0x1d01a0[_0xbbec('0x36')]['hasOwnProperty'](_0xbbec('0x3c'))){_0xa73cb2[_0xbbec('0x28')]=qs[_0xbbec('0x28')](_0x1d01a0['query'][_0xbbec('0x28')]);_0xa73cb2[_0xbbec('0x27')]=qs['offset'](_0x1d01a0[_0xbbec('0x36')]['offset']);}_0xa73cb2[_0xbbec('0x3d')]=qs[_0xbbec('0x3e')](_0x1d01a0['query']['sort']);_0xa73cb2[_0xbbec('0x3f')]=qs[_0xbbec('0x37')](_['pick'](_0x1d01a0[_0xbbec('0x36')],_0x463b78[_0xbbec('0x37')]));if(_0x1d01a0[_0xbbec('0x36')]['filter']){_0xa73cb2['where']=_[_0xbbec('0x40')](_0xa73cb2[_0xbbec('0x3f')],{'$or':_[_0xbbec('0x41')](_0x245d4d,function(_0x58cb2e){if(_0x58cb2e[_0xbbec('0x42')][_0xbbec('0x43')]!==_0xbbec('0x44')){var _0x183324={};_0x183324[_0x58cb2e['field']]={'$like':'%'+_0x1d01a0[_0xbbec('0x36')]['filter']+'%'};return _0x183324;}})});}_0xa73cb2=_[_0xbbec('0x40')]({},_0xa73cb2,_0x1d01a0['options']);var _0x13729b={'where':_0xa73cb2[_0xbbec('0x3f')]};return db['ZohoConfiguration'][_0xbbec('0x26')](_0x13729b)[_0xbbec('0x2d')](function(_0x19917e){_0x3aabb2[_0xbbec('0x26')]=_0x19917e;if(_0x1d01a0['query'][_0xbbec('0x45')]){_0xa73cb2[_0xbbec('0x46')]=[{'all':!![]}];}return db[_0xbbec('0x32')][_0xbbec('0x47')](_0xa73cb2);})['then'](function(_0x5a79ef){_0x3aabb2[_0xbbec('0x48')]=_0x5a79ef;return _0x3aabb2;})[_0xbbec('0x2d')](respondWithFilteredResult(_0x34c750,_0xa73cb2))['catch'](handleError(_0x34c750,null));};exports[_0xbbec('0x49')]=function(_0x18a8d6,_0x2d96f8){var _0x2b93b4={'raw':![],'where':{'id':_0x18a8d6['params']['id']}},_0x549398={};_0x549398[_0xbbec('0x34')]=_['keys'](db[_0xbbec('0x32')][_0xbbec('0x33')]);_0x549398[_0xbbec('0x36')]=_[_0xbbec('0x35')](_0x18a8d6[_0xbbec('0x36')]);_0x549398[_0xbbec('0x37')]=_[_0xbbec('0x38')](_0x549398[_0xbbec('0x34')],_0x549398[_0xbbec('0x36')]);_0x2b93b4[_0xbbec('0x39')]=_[_0xbbec('0x38')](_0x549398[_0xbbec('0x34')],qs[_0xbbec('0x3a')](_0x18a8d6['query']['fields']));_0x2b93b4[_0xbbec('0x39')]=_0x2b93b4[_0xbbec('0x39')][_0xbbec('0x3b')]?_0x2b93b4['attributes']:_0x549398[_0xbbec('0x34')];if(_0x18a8d6[_0xbbec('0x36')]['includeAll']){_0x2b93b4[_0xbbec('0x46')]=[{'all':!![]}];}_0x2b93b4=_[_0xbbec('0x40')]({},_0x2b93b4,_0x18a8d6[_0xbbec('0x4a')]);return db[_0xbbec('0x32')][_0xbbec('0x4b')](_0x2b93b4)['then'](handleEntityNotFound(_0x2d96f8,null))[_0xbbec('0x2d')](respondWithResult(_0x2d96f8,null))[_0xbbec('0x4c')](handleError(_0x2d96f8,null));};exports[_0xbbec('0x4d')]=function(_0x5ad9fb,_0x3e717a){return db[_0xbbec('0x32')]['create'](_0x5ad9fb['body'],{})[_0xbbec('0x2d')](respondWithResult(_0x3e717a,0xc9))[_0xbbec('0x4c')](handleError(_0x3e717a,null));};exports['update']=function(_0x5d3c29,_0x2320f0){if(_0x5d3c29[_0xbbec('0x4e')]['id']){delete _0x5d3c29[_0xbbec('0x4e')]['id'];}return db[_0xbbec('0x32')][_0xbbec('0x4b')]({'where':{'id':_0x5d3c29['params']['id']}})[_0xbbec('0x2d')](handleEntityNotFound(_0x2320f0,null))[_0xbbec('0x2d')](saveUpdates(_0x5d3c29['body'],null))[_0xbbec('0x2d')](respondWithResult(_0x2320f0,null))[_0xbbec('0x4c')](handleError(_0x2320f0,null));};exports[_0xbbec('0x4f')]=function(_0x356ac5,_0xe7e5fa){return db[_0xbbec('0x32')][_0xbbec('0x4b')]({'where':{'id':_0x356ac5[_0xbbec('0x50')]['id']}})[_0xbbec('0x2d')](handleEntityNotFound(_0xe7e5fa,null))[_0xbbec('0x2d')](removeEntity(_0xe7e5fa,null))[_0xbbec('0x4c')](handleError(_0xe7e5fa,null));};exports[_0xbbec('0x51')]=function(_0x7156b9,_0x3a95c6,_0x55be35){var _0xdda242={};var _0x3d6b6a={};var _0x12307e;var _0x23c97e;return db[_0xbbec('0x32')]['findOne']({'where':{'id':_0x7156b9[_0xbbec('0x50')]['id']}})[_0xbbec('0x2d')](handleEntityNotFound(_0x3a95c6,null))[_0xbbec('0x2d')](function(_0x145506){if(_0x145506){_0x12307e=_0x145506;_0x3d6b6a[_0xbbec('0x34')]=_[_0xbbec('0x35')](db['ZohoField'][_0xbbec('0x33')]);_0x3d6b6a[_0xbbec('0x36')]=_[_0xbbec('0x35')](_0x7156b9['query']);_0x3d6b6a[_0xbbec('0x37')]=_['intersection'](_0x3d6b6a[_0xbbec('0x34')],_0x3d6b6a[_0xbbec('0x36')]);_0xdda242[_0xbbec('0x39')]=_[_0xbbec('0x38')](_0x3d6b6a[_0xbbec('0x34')],qs[_0xbbec('0x3a')](_0x7156b9[_0xbbec('0x36')][_0xbbec('0x3a')]));_0xdda242[_0xbbec('0x39')]=_0xdda242['attributes'][_0xbbec('0x3b')]?_0xdda242[_0xbbec('0x39')]:_0x3d6b6a['model'];_0xdda242[_0xbbec('0x3d')]=qs['sort'](_0x7156b9['query'][_0xbbec('0x3e')]);_0xdda242['where']=qs['filters'](_[_0xbbec('0x52')](_0x7156b9[_0xbbec('0x36')],_0x3d6b6a['filters']));if(_0x7156b9['query'][_0xbbec('0x53')]){_0xdda242[_0xbbec('0x3f')]=_[_0xbbec('0x40')](_0xdda242[_0xbbec('0x3f')],{'$or':_[_0xbbec('0x41')](_0xdda242[_0xbbec('0x39')],function(_0x1ebd8d){var _0x281e72={};_0x281e72[_0x1ebd8d]={'$like':'%'+_0x7156b9['query'][_0xbbec('0x53')]+'%'};return _0x281e72;})});}_0xdda242=_['merge']({},_0xdda242,_0x7156b9['options']);return _0x12307e[_0xbbec('0x51')](_0xdda242);}})[_0xbbec('0x2d')](function(_0x38f5b5){if(_0x38f5b5){_0x23c97e=_0x38f5b5[_0xbbec('0x3b')];if(!_0x7156b9['query'][_0xbbec('0x54')](_0xbbec('0x3c'))){_0xdda242[_0xbbec('0x28')]=qs[_0xbbec('0x28')](_0x7156b9[_0xbbec('0x36')]['limit']);_0xdda242[_0xbbec('0x27')]=qs[_0xbbec('0x27')](_0x7156b9[_0xbbec('0x36')][_0xbbec('0x27')]);}return _0x12307e['getFields'](_0xdda242);}})[_0xbbec('0x2d')](function(_0x47ffa3){if(_0x47ffa3){return _0x47ffa3?{'count':_0x23c97e,'rows':_0x47ffa3}:null;}})[_0xbbec('0x2d')](respondWithResult(_0x3a95c6,null))[_0xbbec('0x4c')](handleError(_0x3a95c6,null));};exports['getSubjects']=function(_0x355788,_0x29b992,_0x56328a){var _0x11b466={};var _0x342893={};var _0x2bf55c;var _0x1d447d;return db[_0xbbec('0x32')][_0xbbec('0x55')]({'where':{'id':_0x355788['params']['id']}})[_0xbbec('0x2d')](handleEntityNotFound(_0x29b992,null))[_0xbbec('0x2d')](function(_0x5da8d6){if(_0x5da8d6){_0x2bf55c=_0x5da8d6;_0x342893[_0xbbec('0x34')]=_[_0xbbec('0x35')](db[_0xbbec('0x56')][_0xbbec('0x33')]);_0x342893['query']=_[_0xbbec('0x35')](_0x355788['query']);_0x342893['filters']=_[_0xbbec('0x38')](_0x342893[_0xbbec('0x34')],_0x342893[_0xbbec('0x36')]);_0x11b466[_0xbbec('0x39')]=_[_0xbbec('0x38')](_0x342893[_0xbbec('0x34')],qs[_0xbbec('0x3a')](_0x355788[_0xbbec('0x36')]['fields']));_0x11b466[_0xbbec('0x39')]=_0x11b466['attributes'][_0xbbec('0x3b')]?_0x11b466[_0xbbec('0x39')]:_0x342893[_0xbbec('0x34')];_0x11b466[_0xbbec('0x3d')]=qs[_0xbbec('0x3e')](_0x355788[_0xbbec('0x36')][_0xbbec('0x3e')]);_0x11b466[_0xbbec('0x3f')]=qs[_0xbbec('0x37')](_[_0xbbec('0x52')](_0x355788[_0xbbec('0x36')],_0x342893[_0xbbec('0x37')]));if(_0x355788[_0xbbec('0x36')][_0xbbec('0x53')]){_0x11b466[_0xbbec('0x3f')]=_[_0xbbec('0x40')](_0x11b466['where'],{'$or':_[_0xbbec('0x41')](_0x11b466['attributes'],function(_0x16faa7){var _0x16775e={};_0x16775e[_0x16faa7]={'$like':'%'+_0x355788[_0xbbec('0x36')]['filter']+'%'};return _0x16775e;})});}_0x11b466=_[_0xbbec('0x40')]({},_0x11b466,_0x355788[_0xbbec('0x4a')]);return _0x2bf55c[_0xbbec('0x57')](_0x11b466);}})[_0xbbec('0x2d')](function(_0x162f9a){if(_0x162f9a){_0x1d447d=_0x162f9a[_0xbbec('0x3b')];if(!_0x355788[_0xbbec('0x36')][_0xbbec('0x54')](_0xbbec('0x3c'))){_0x11b466[_0xbbec('0x28')]=qs[_0xbbec('0x28')](_0x355788[_0xbbec('0x36')][_0xbbec('0x28')]);_0x11b466[_0xbbec('0x27')]=qs[_0xbbec('0x27')](_0x355788['query'][_0xbbec('0x27')]);}return _0x2bf55c[_0xbbec('0x57')](_0x11b466);}})[_0xbbec('0x2d')](function(_0x2bc790){if(_0x2bc790){return _0x2bc790?{'count':_0x1d447d,'rows':_0x2bc790}:null;}})['then'](respondWithResult(_0x29b992,null))[_0xbbec('0x4c')](handleError(_0x29b992,null));};exports[_0xbbec('0x58')]=function(_0xb99e0a,_0x185c5b,_0x1ef412){var _0x33a6aa={};var _0xe2cc77={};var _0x36b6aa;var _0x381d6c;return db[_0xbbec('0x32')][_0xbbec('0x55')]({'where':{'id':_0xb99e0a[_0xbbec('0x50')]['id']}})[_0xbbec('0x2d')](handleEntityNotFound(_0x185c5b,null))[_0xbbec('0x2d')](function(_0x2cdd00){if(_0x2cdd00){_0x36b6aa=_0x2cdd00;_0xe2cc77[_0xbbec('0x34')]=_['keys'](db[_0xbbec('0x56')][_0xbbec('0x33')]);_0xe2cc77[_0xbbec('0x36')]=_[_0xbbec('0x35')](_0xb99e0a[_0xbbec('0x36')]);_0xe2cc77['filters']=_['intersection'](_0xe2cc77[_0xbbec('0x34')],_0xe2cc77[_0xbbec('0x36')]);_0x33a6aa[_0xbbec('0x39')]=_[_0xbbec('0x38')](_0xe2cc77[_0xbbec('0x34')],qs['fields'](_0xb99e0a[_0xbbec('0x36')][_0xbbec('0x3a')]));_0x33a6aa[_0xbbec('0x39')]=_0x33a6aa[_0xbbec('0x39')][_0xbbec('0x3b')]?_0x33a6aa[_0xbbec('0x39')]:_0xe2cc77[_0xbbec('0x34')];_0x33a6aa[_0xbbec('0x3d')]=qs[_0xbbec('0x3e')](_0xb99e0a[_0xbbec('0x36')][_0xbbec('0x3e')]);_0x33a6aa[_0xbbec('0x3f')]=qs[_0xbbec('0x37')](_[_0xbbec('0x52')](_0xb99e0a[_0xbbec('0x36')],_0xe2cc77[_0xbbec('0x37')]));if(_0xb99e0a['query'][_0xbbec('0x53')]){_0x33a6aa[_0xbbec('0x3f')]=_[_0xbbec('0x40')](_0x33a6aa[_0xbbec('0x3f')],{'$or':_[_0xbbec('0x41')](_0x33a6aa[_0xbbec('0x39')],function(_0x51bb88){var _0x25015a={};_0x25015a[_0x51bb88]={'$like':'%'+_0xb99e0a[_0xbbec('0x36')][_0xbbec('0x53')]+'%'};return _0x25015a;})});}_0x33a6aa=_[_0xbbec('0x40')]({},_0x33a6aa,_0xb99e0a[_0xbbec('0x4a')]);return _0x36b6aa[_0xbbec('0x58')](_0x33a6aa);}})['then'](function(_0x3adb4e){if(_0x3adb4e){_0x381d6c=_0x3adb4e[_0xbbec('0x3b')];if(!_0xb99e0a[_0xbbec('0x36')][_0xbbec('0x54')]('nolimit')){_0x33a6aa[_0xbbec('0x28')]=qs[_0xbbec('0x28')](_0xb99e0a[_0xbbec('0x36')]['limit']);_0x33a6aa[_0xbbec('0x27')]=qs[_0xbbec('0x27')](_0xb99e0a[_0xbbec('0x36')]['offset']);}return _0x36b6aa[_0xbbec('0x58')](_0x33a6aa);}})[_0xbbec('0x2d')](function(_0x5514e8){if(_0x5514e8){return _0x5514e8?{'count':_0x381d6c,'rows':_0x5514e8}:null;}})[_0xbbec('0x2d')](respondWithResult(_0x185c5b,null))[_0xbbec('0x4c')](handleError(_0x185c5b,null));};
\ No newline at end of file
index 00a711a..90e2baa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5ec6=['int_zoho_configurations','lodash','util','../../config/logger','moment','request-promise','rimraf','./intZohoConfiguration.attributes','ZohoConfiguration'];(function(_0xcd38d3,_0x3731b4){var _0x42d5b1=function(_0x480260){while(--_0x480260){_0xcd38d3['push'](_0xcd38d3['shift']());}};_0x42d5b1(++_0x3731b4);}(_0x5ec6,0x7f));var _0x65ec=function(_0x1cd877,_0x50f926){_0x1cd877=_0x1cd877-0x0;var _0x302d31=_0x5ec6[_0x1cd877];return _0x302d31;};'use strict';var _=require(_0x65ec('0x0'));var util=require(_0x65ec('0x1'));var logger=require(_0x65ec('0x2'))('api');var moment=require(_0x65ec('0x3'));var BPromise=require('bluebird');var rp=require(_0x65ec('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x65ec('0x5'));var config=require('../../config/environment');var attributes=require(_0x65ec('0x6'));module['exports']=function(_0x2fc973,_0xbb2e56){return _0x2fc973['define'](_0x65ec('0x7'),attributes,{'tableName':_0x65ec('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x073e=['rimraf','../../config/environment','define','ZohoConfiguration','int_zoho_configurations','lodash','util','../../config/logger','api','path'];(function(_0x5f0236,_0x3a4fad){var _0x32e634=function(_0x436c23){while(--_0x436c23){_0x5f0236['push'](_0x5f0236['shift']());}};_0x32e634(++_0x3a4fad);}(_0x073e,0x181));var _0xe073=function(_0x341f4c,_0x54efb2){_0x341f4c=_0x341f4c-0x0;var _0x4aa515=_0x073e[_0x341f4c];return _0x4aa515;};'use strict';var _=require(_0xe073('0x0'));var util=require(_0xe073('0x1'));var logger=require(_0xe073('0x2'))(_0xe073('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0xe073('0x4'));var rimraf=require(_0xe073('0x5'));var config=require(_0xe073('0x6'));var attributes=require('./intZohoConfiguration.attributes');module['exports']=function(_0x4bc6b3,_0x45995e){return _0x4bc6b3[_0xe073('0x7')](_0xe073('0x8'),attributes,{'tableName':_0xe073('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 9dc5e36..dedbf34 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a03=['ZohoConfiguration,\x20%s,\x20%s','message','info','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','then','debug','ZohoConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code'];(function(_0x58efa6,_0x2c00bd){var _0x5d643c=function(_0x1d1ef2){while(--_0x1d1ef2){_0x58efa6['push'](_0x58efa6['shift']());}};_0x5d643c(++_0x2c00bd);}(_0x7a03,0x95));var _0x37a0=function(_0x1c9a59,_0x1d32b5){_0x1c9a59=_0x1c9a59-0x0;var _0xc46635=_0x7a03[_0x1c9a59];return _0xc46635;};'use strict';var _=require(_0x37a0('0x0'));var util=require(_0x37a0('0x1'));var moment=require(_0x37a0('0x2'));var BPromise=require(_0x37a0('0x3'));var rs=require(_0x37a0('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x37a0('0x5'))['db'];var utils=require(_0x37a0('0x6'));var logger=require(_0x37a0('0x7'))(_0x37a0('0x8'));var config=require(_0x37a0('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x37a0('0xa')][_0x37a0('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x3d3730,_0x3ae008,_0x4cc28c){return new BPromise(function(_0x466195,_0x1b8db0){return client['request'](_0x3d3730,_0x4cc28c)[_0x37a0('0xc')](function(_0x1f8218){logger['info']('ZohoConfiguration,\x20%s,\x20%s',_0x3ae008,'request\x20sent');logger[_0x37a0('0xd')](_0x37a0('0xe'),_0x3ae008,_0x37a0('0xf'),JSON[_0x37a0('0x10')](_0x1f8218));if(_0x1f8218[_0x37a0('0x11')]){if(_0x1f8218[_0x37a0('0x11')][_0x37a0('0x12')]===0x1f4){logger[_0x37a0('0x11')](_0x37a0('0x13'),_0x3ae008,_0x1f8218['error']['message']);return _0x1b8db0(_0x1f8218[_0x37a0('0x11')]['message']);}logger['error'](_0x37a0('0x13'),_0x3ae008,_0x1f8218[_0x37a0('0x11')][_0x37a0('0x14')]);return _0x466195(_0x1f8218[_0x37a0('0x11')]['message']);}else{logger[_0x37a0('0x15')](_0x37a0('0x13'),_0x3ae008,'request\x20sent');_0x466195(_0x1f8218[_0x37a0('0x16')][_0x37a0('0x14')]);}})[_0x37a0('0x17')](function(_0x33f516){logger['error']('ZohoConfiguration,\x20%s,\x20%s',_0x3ae008,_0x33f516);_0x1b8db0(_0x33f516);});});}
\ No newline at end of file
+var _0x437f=['error','code','message','result','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','ZohoConfiguration,\x20%s,\x20%s','request\x20sent','debug','ZohoConfiguration,\x20%s,\x20%s,\x20%s'];(function(_0x10ff13,_0x54eb3e){var _0x5dc7d5=function(_0x47c2f4){while(--_0x47c2f4){_0x10ff13['push'](_0x10ff13['shift']());}};_0x5dc7d5(++_0x54eb3e);}(_0x437f,0x1a8));var _0xf437=function(_0x4e26b8,_0x1a3c12){_0x4e26b8=_0x4e26b8-0x0;var _0x10a6f0=_0x437f[_0x4e26b8];return _0x10a6f0;};'use strict';var _=require('lodash');var util=require(_0xf437('0x0'));var moment=require(_0xf437('0x1'));var BPromise=require(_0xf437('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0xf437('0x3'))['db'];var utils=require(_0xf437('0x4'));var logger=require(_0xf437('0x5'))(_0xf437('0x6'));var config=require(_0xf437('0x7'));var jayson=require(_0xf437('0x8'));var client=jayson[_0xf437('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x128d63,_0x7c3824,_0x4b9051){return new BPromise(function(_0x4c768f,_0x5e2746){return client[_0xf437('0xa')](_0x128d63,_0x4b9051)[_0xf437('0xb')](function(_0xea7ec3){logger[_0xf437('0xc')](_0xf437('0xd'),_0x7c3824,_0xf437('0xe'));logger[_0xf437('0xf')](_0xf437('0x10'),_0x7c3824,_0xf437('0xe'),JSON['stringify'](_0xea7ec3));if(_0xea7ec3[_0xf437('0x11')]){if(_0xea7ec3['error'][_0xf437('0x12')]===0x1f4){logger[_0xf437('0x11')](_0xf437('0xd'),_0x7c3824,_0xea7ec3[_0xf437('0x11')]['message']);return _0x5e2746(_0xea7ec3[_0xf437('0x11')][_0xf437('0x13')]);}logger[_0xf437('0x11')]('ZohoConfiguration,\x20%s,\x20%s',_0x7c3824,_0xea7ec3[_0xf437('0x11')][_0xf437('0x13')]);return _0x4c768f(_0xea7ec3[_0xf437('0x11')][_0xf437('0x13')]);}else{logger['info']('ZohoConfiguration,\x20%s,\x20%s',_0x7c3824,_0xf437('0xe'));_0x4c768f(_0xea7ec3[_0xf437('0x14')][_0xf437('0x13')]);}})['catch'](function(_0xdbbd48){logger['error'](_0xf437('0xd'),_0x7c3824,_0xdbbd48);_0x5e2746(_0xdbbd48);});});}
\ No newline at end of file
index e25e33f..caf331c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1898=['post','create','put','update','delete','destroy','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','index','get','/:id','show'];(function(_0x160830,_0x4e18c0){var _0x28e158=function(_0x20c511){while(--_0x20c511){_0x160830['push'](_0x160830['shift']());}};_0x28e158(++_0x4e18c0);}(_0x1898,0x7e));var _0x8189=function(_0x1301ee,_0x48dbef){_0x1301ee=_0x1301ee-0x0;var _0x4c7c23=_0x1898[_0x1301ee];return _0x4c7c23;};'use strict';var multer=require(_0x8189('0x0'));var util=require(_0x8189('0x1'));var path=require(_0x8189('0x2'));var timeout=require(_0x8189('0x3'));var express=require(_0x8189('0x4'));var router=express[_0x8189('0x5')]();var auth=require(_0x8189('0x6'));var interaction=require(_0x8189('0x7'));var config=require(_0x8189('0x8'));var controller=require('./intZohoField.controller');router['get']('/',auth[_0x8189('0x9')](),controller[_0x8189('0xa')]);router[_0x8189('0xb')](_0x8189('0xc'),auth['isAuthenticated'](),controller[_0x8189('0xd')]);router[_0x8189('0xe')]('/',auth[_0x8189('0x9')](),controller[_0x8189('0xf')]);router[_0x8189('0x10')](_0x8189('0xc'),auth[_0x8189('0x9')](),controller[_0x8189('0x11')]);router[_0x8189('0x12')]('/:id',auth['isAuthenticated'](),controller[_0x8189('0x13')]);module['exports']=router;
\ No newline at end of file
+var _0x5b6c=['util','path','connect-timeout','express','./intZohoField.controller','get','isAuthenticated','show','post','create','put','/:id','update','destroy','exports'];(function(_0x116707,_0x299a3d){var _0x86e2a=function(_0x4d13f9){while(--_0x4d13f9){_0x116707['push'](_0x116707['shift']());}};_0x86e2a(++_0x299a3d);}(_0x5b6c,0x168));var _0xc5b6=function(_0x1da527,_0x2dc953){_0x1da527=_0x1da527-0x0;var _0x40fc7c=_0x5b6c[_0x1da527];return _0x40fc7c;};'use strict';var multer=require('multer');var util=require(_0xc5b6('0x0'));var path=require(_0xc5b6('0x1'));var timeout=require(_0xc5b6('0x2'));var express=require(_0xc5b6('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(_0xc5b6('0x4'));router[_0xc5b6('0x5')]('/',auth[_0xc5b6('0x6')](),controller['index']);router[_0xc5b6('0x5')]('/:id',auth[_0xc5b6('0x6')](),controller[_0xc5b6('0x7')]);router[_0xc5b6('0x8')]('/',auth['isAuthenticated'](),controller[_0xc5b6('0x9')]);router[_0xc5b6('0xa')](_0xc5b6('0xb'),auth[_0xc5b6('0x6')](),controller[_0xc5b6('0xc')]);router['delete'](_0xc5b6('0xb'),auth['isAuthenticated'](),controller[_0xc5b6('0xd')]);module[_0xc5b6('0xe')]=router;
\ No newline at end of file
index 2578f56..4025c59 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f0d=['exports','ENUM','string','variable','keyValue','STRING','BOOLEAN'];(function(_0x421725,_0x318a04){var _0x51b322=function(_0xe58018){while(--_0xe58018){_0x421725['push'](_0x421725['shift']());}};_0x51b322(++_0x318a04);}(_0x6f0d,0x16c));var _0xd6f0=function(_0x13423a,_0x23473c){_0x13423a=_0x13423a-0x0;var _0x781a9e=_0x6f0d[_0x13423a];return _0x781a9e;};'use strict';var Sequelize=require('sequelize');module[_0xd6f0('0x0')]={'type':{'type':Sequelize[_0xd6f0('0x1')](_0xd6f0('0x2'),_0xd6f0('0x3'),'customVariable',_0xd6f0('0x4')),'defaultValue':_0xd6f0('0x2')},'content':{'type':Sequelize[_0xd6f0('0x5')]},'key':{'type':Sequelize[_0xd6f0('0x5')]},'keyType':{'type':Sequelize[_0xd6f0('0x1')]('string',_0xd6f0('0x3'),'customVariable')},'keyContent':{'type':Sequelize[_0xd6f0('0x5')]},'idField':{'type':Sequelize[_0xd6f0('0x5')]},'nameField':{'type':Sequelize[_0xd6f0('0x5')]},'customField':{'type':Sequelize[_0xd6f0('0x6')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xb688=['ENUM','string','variable','customVariable','keyValue','STRING','BOOLEAN','exports'];(function(_0x53d614,_0xd73845){var _0x38ef5c=function(_0x14cc98){while(--_0x14cc98){_0x53d614['push'](_0x53d614['shift']());}};_0x38ef5c(++_0xd73845);}(_0xb688,0xcf));var _0x8b68=function(_0x5dfd3c,_0x470fa0){_0x5dfd3c=_0x5dfd3c-0x0;var _0x5ba49d=_0xb688[_0x5dfd3c];return _0x5ba49d;};'use strict';var Sequelize=require('sequelize');module[_0x8b68('0x0')]={'type':{'type':Sequelize[_0x8b68('0x1')](_0x8b68('0x2'),_0x8b68('0x3'),_0x8b68('0x4'),_0x8b68('0x5')),'defaultValue':'string'},'content':{'type':Sequelize[_0x8b68('0x6')]},'key':{'type':Sequelize[_0x8b68('0x6')]},'keyType':{'type':Sequelize[_0x8b68('0x1')](_0x8b68('0x2'),'variable',_0x8b68('0x4'))},'keyContent':{'type':Sequelize['STRING']},'idField':{'type':Sequelize[_0x8b68('0x6')]},'nameField':{'type':Sequelize[_0x8b68('0x6')]},'customField':{'type':Sequelize[_0x8b68('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x8b68('0x6')]}};
\ No newline at end of file
index d4c1c01..1bec24a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x878f=['destroy','then','error','stack','name','ZohoField','rawAttributes','model','keys','query','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','filters','pick','filter','where','map','type','key','options','includeAll','include','findAll','rows','catch','params','merge','find','create','body','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','lodash','squel','to-csv','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/environment','status','end','json','count','offset','limit','set','apply','reject','save','update'];(function(_0xf52ccd,_0x400ad5){var _0x4bc236=function(_0x23259f){while(--_0x23259f){_0xf52ccd['push'](_0xf52ccd['shift']());}};_0x4bc236(++_0x400ad5);}(_0x878f,0x173));var _0xf878=function(_0x4a8e78,_0x176f37){_0x4a8e78=_0x4a8e78-0x0;var _0xe9e352=_0x878f[_0x4a8e78];return _0xe9e352;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xf878('0x0'));var rimraf=require(_0xf878('0x1'));var zipdir=require(_0xf878('0x2'));var jsonpatch=require(_0xf878('0x3'));var rp=require(_0xf878('0x4'));var moment=require(_0xf878('0x5'));var BPromise=require(_0xf878('0x6'));var Mustache=require(_0xf878('0x7'));var util=require(_0xf878('0x8'));var path=require(_0xf878('0x9'));var sox=require(_0xf878('0xa'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xf878('0xb'));var squel=require(_0xf878('0xc'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xf878('0xd'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0xf878('0xe'));var authService=require(_0xf878('0xf'));var qs=require(_0xf878('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xf878('0x11'))(_0xf878('0x12'));var utils=require('../../config/utils');var config=require(_0xf878('0x13'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x31d3d2,_0x97c396){_0x97c396=_0x97c396||0xcc;return function(_0x339c9c){if(_0x339c9c){return _0x31d3d2['sendStatus'](_0x97c396);}return _0x31d3d2[_0xf878('0x14')](_0x97c396)[_0xf878('0x15')]();};}function respondWithResult(_0x39b1bb,_0x570dcc){_0x570dcc=_0x570dcc||0xc8;return function(_0xe2c2de){if(_0xe2c2de){return _0x39b1bb[_0xf878('0x14')](_0x570dcc)[_0xf878('0x16')](_0xe2c2de);}};}function respondWithFilteredResult(_0x492260,_0x568a3a){return function(_0x4c0948){if(_0x4c0948){var _0x35ff2d=_0x4c0948[_0xf878('0x17')],_0x31d888=_0x568a3a[_0xf878('0x18')],_0x6dbeca=_0x568a3a[_0xf878('0x18')]+_0x568a3a[_0xf878('0x19')],_0x44aacc;if(_0x6dbeca>=_0x35ff2d){_0x6dbeca=_0x35ff2d;_0x44aacc=0xc8;}else{_0x44aacc=0xce;}_0x492260[_0xf878('0x14')](_0x44aacc);return _0x492260[_0xf878('0x1a')]('Content-Range',_0x31d888+'-'+_0x6dbeca+'/'+_0x35ff2d)[_0xf878('0x16')](_0x4c0948);}return null;};}function patchUpdates(_0x34ae59){return function(_0x412de1){try{jsonpatch[_0xf878('0x1b')](_0x412de1,_0x34ae59,!![]);}catch(_0x3714f6){return BPromise[_0xf878('0x1c')](_0x3714f6);}return _0x412de1[_0xf878('0x1d')]();};}function saveUpdates(_0x5677a8,_0x73f6bf){return function(_0x140866){if(_0x140866){return _0x140866[_0xf878('0x1e')](_0x5677a8)['then'](function(_0x432e5d){return _0x432e5d;});}return null;};}function removeEntity(_0x23590c,_0xacc440){return function(_0x392822){if(_0x392822){return _0x392822[_0xf878('0x1f')]()[_0xf878('0x20')](function(){_0x23590c[_0xf878('0x14')](0xcc)[_0xf878('0x15')]();});}};}function handleEntityNotFound(_0x212436,_0x1a6506){return function(_0x45e61f){if(!_0x45e61f){_0x212436['sendStatus'](0x194);}return _0x45e61f;};}function handleError(_0x2ac38b,_0x5b0b06){_0x5b0b06=_0x5b0b06||0x1f4;return function(_0xa3d3d3){logger[_0xf878('0x21')](_0xa3d3d3[_0xf878('0x22')]);if(_0xa3d3d3[_0xf878('0x23')]){delete _0xa3d3d3[_0xf878('0x23')];}_0x2ac38b['status'](_0x5b0b06)['send'](_0xa3d3d3);};}exports['index']=function(_0x242926,_0x3baba4){var _0x38fa87={},_0x5af87f={},_0xfa3e11={'count':0x0,'rows':[]};var _0x2e2256=db[_0xf878('0x24')][_0xf878('0x25')];_0x5af87f[_0xf878('0x26')]=_['keys'](_0x2e2256);_0x5af87f['query']=_[_0xf878('0x27')](_0x242926[_0xf878('0x28')]);_0x5af87f['filters']=_[_0xf878('0x29')](_0x5af87f['model'],_0x5af87f[_0xf878('0x28')]);_0x38fa87['attributes']=_[_0xf878('0x29')](_0x5af87f['model'],qs[_0xf878('0x2a')](_0x242926['query'][_0xf878('0x2a')]));_0x38fa87[_0xf878('0x2b')]=_0x38fa87[_0xf878('0x2b')][_0xf878('0x2c')]?_0x38fa87[_0xf878('0x2b')]:_0x5af87f[_0xf878('0x26')];if(!_0x242926['query'][_0xf878('0x2d')](_0xf878('0x2e'))){_0x38fa87[_0xf878('0x19')]=qs[_0xf878('0x19')](_0x242926[_0xf878('0x28')]['limit']);_0x38fa87[_0xf878('0x18')]=qs[_0xf878('0x18')](_0x242926['query'][_0xf878('0x18')]);}_0x38fa87[_0xf878('0x2f')]=qs[_0xf878('0x30')](_0x242926[_0xf878('0x28')][_0xf878('0x30')]);_0x38fa87['where']=qs[_0xf878('0x31')](_[_0xf878('0x32')](_0x242926[_0xf878('0x28')],_0x5af87f[_0xf878('0x31')]));if(_0x242926['query'][_0xf878('0x33')]){_0x38fa87['where']=_['merge'](_0x38fa87[_0xf878('0x34')],{'$or':_[_0xf878('0x35')](_0x2e2256,function(_0x8b6230){if(_0x8b6230[_0xf878('0x36')][_0xf878('0x37')]!=='VIRTUAL'){var _0xc2d7ef={};_0xc2d7ef[_0x8b6230['field']]={'$like':'%'+_0x242926[_0xf878('0x28')][_0xf878('0x33')]+'%'};return _0xc2d7ef;}})});}_0x38fa87=_['merge']({},_0x38fa87,_0x242926[_0xf878('0x38')]);var _0x365e88={'where':_0x38fa87['where']};return db[_0xf878('0x24')][_0xf878('0x17')](_0x365e88)['then'](function(_0x4129c2){_0xfa3e11[_0xf878('0x17')]=_0x4129c2;if(_0x242926[_0xf878('0x28')][_0xf878('0x39')]){_0x38fa87[_0xf878('0x3a')]=[{'all':!![]}];}return db[_0xf878('0x24')][_0xf878('0x3b')](_0x38fa87);})['then'](function(_0x1179fb){_0xfa3e11[_0xf878('0x3c')]=_0x1179fb;return _0xfa3e11;})['then'](respondWithFilteredResult(_0x3baba4,_0x38fa87))[_0xf878('0x3d')](handleError(_0x3baba4,null));};exports['show']=function(_0x489964,_0x2ec109){var _0x379fc1={'raw':!![],'where':{'id':_0x489964[_0xf878('0x3e')]['id']}},_0x43b03e={};_0x43b03e[_0xf878('0x26')]=_['keys'](db[_0xf878('0x24')]['rawAttributes']);_0x43b03e[_0xf878('0x28')]=_[_0xf878('0x27')](_0x489964['query']);_0x43b03e['filters']=_[_0xf878('0x29')](_0x43b03e[_0xf878('0x26')],_0x43b03e[_0xf878('0x28')]);_0x379fc1[_0xf878('0x2b')]=_[_0xf878('0x29')](_0x43b03e[_0xf878('0x26')],qs[_0xf878('0x2a')](_0x489964[_0xf878('0x28')][_0xf878('0x2a')]));_0x379fc1['attributes']=_0x379fc1[_0xf878('0x2b')][_0xf878('0x2c')]?_0x379fc1[_0xf878('0x2b')]:_0x43b03e[_0xf878('0x26')];if(_0x489964[_0xf878('0x28')][_0xf878('0x39')]){_0x379fc1['include']=[{'all':!![]}];}_0x379fc1=_[_0xf878('0x3f')]({},_0x379fc1,_0x489964[_0xf878('0x38')]);return db[_0xf878('0x24')][_0xf878('0x40')](_0x379fc1)[_0xf878('0x20')](handleEntityNotFound(_0x2ec109,null))['then'](respondWithResult(_0x2ec109,null))[_0xf878('0x3d')](handleError(_0x2ec109,null));};exports[_0xf878('0x41')]=function(_0x2429e6,_0x1ec3aa){return db['ZohoField'][_0xf878('0x41')](_0x2429e6[_0xf878('0x42')],{})[_0xf878('0x20')](respondWithResult(_0x1ec3aa,0xc9))['catch'](handleError(_0x1ec3aa,null));};exports['update']=function(_0x9c2fa3,_0x5bf396){if(_0x9c2fa3['body']['id']){delete _0x9c2fa3['body']['id'];}return db[_0xf878('0x24')]['find']({'where':{'id':_0x9c2fa3[_0xf878('0x3e')]['id']}})[_0xf878('0x20')](handleEntityNotFound(_0x5bf396,null))[_0xf878('0x20')](saveUpdates(_0x9c2fa3[_0xf878('0x42')],null))[_0xf878('0x20')](respondWithResult(_0x5bf396,null))[_0xf878('0x3d')](handleError(_0x5bf396,null));};exports[_0xf878('0x1f')]=function(_0x526c89,_0xb0bf4c){return db[_0xf878('0x24')][_0xf878('0x40')]({'where':{'id':_0x526c89[_0xf878('0x3e')]['id']}})[_0xf878('0x20')](handleEntityNotFound(_0xb0bf4c,null))['then'](removeEntity(_0xb0bf4c,null))['catch'](handleError(_0xb0bf4c,null));};
\ No newline at end of file
+var _0x153f=['json','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','order','sort','where','pick','filter','map','key','VIRTUAL','field','options','ZohoField','count','includeAll','findAll','rows','params','length','merge','find','catch','create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','sendStatus','status','end'];(function(_0x4e0a96,_0x531ed7){var _0x255076=function(_0x2b8ba8){while(--_0x2b8ba8){_0x4e0a96['push'](_0x4e0a96['shift']());}};_0x255076(++_0x531ed7);}(_0x153f,0x15b));var _0xf153=function(_0x2fc167,_0x295ae8){_0x2fc167=_0x2fc167-0x0;var _0x2d215f=_0x153f[_0x2fc167];return _0x2d215f;};'use strict';var pdf=require(_0xf153('0x0'));var emlformat=require(_0xf153('0x1'));var rimraf=require(_0xf153('0x2'));var zipdir=require(_0xf153('0x3'));var jsonpatch=require(_0xf153('0x4'));var rp=require(_0xf153('0x5'));var moment=require(_0xf153('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xf153('0x7'));var util=require('util');var path=require(_0xf153('0x8'));var sox=require(_0xf153('0x9'));var csv=require(_0xf153('0xa'));var ejs=require(_0xf153('0xb'));var fs=require('fs');var _=require(_0xf153('0xc'));var squel=require('squel');var crypto=require(_0xf153('0xd'));var jsforce=require(_0xf153('0xe'));var deskjs=require(_0xf153('0xf'));var toCsv=require(_0xf153('0xa'));var querystring=require(_0xf153('0x10'));var Papa=require(_0xf153('0x11'));var Redis=require(_0xf153('0x12'));var authService=require(_0xf153('0x13'));var qs=require(_0xf153('0x14'));var hardwareService=require(_0xf153('0x15'));var logger=require('../../config/logger')(_0xf153('0x16'));var utils=require(_0xf153('0x17'));var config=require(_0xf153('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3a8838,_0x292f89){_0x292f89=_0x292f89||0xcc;return function(_0x65756d){if(_0x65756d){return _0x3a8838[_0xf153('0x19')](_0x292f89);}return _0x3a8838[_0xf153('0x1a')](_0x292f89)[_0xf153('0x1b')]();};}function respondWithResult(_0x3f915c,_0x1d54c4){_0x1d54c4=_0x1d54c4||0xc8;return function(_0x3e34fb){if(_0x3e34fb){return _0x3f915c['status'](_0x1d54c4)[_0xf153('0x1c')](_0x3e34fb);}};}function respondWithFilteredResult(_0x2340f5,_0x2b666e){return function(_0x406e6f){if(_0x406e6f){var _0x3afea2=_0x406e6f['count'],_0x68f436=_0x2b666e[_0xf153('0x1d')],_0x273a90=_0x2b666e['offset']+_0x2b666e[_0xf153('0x1e')],_0x287bc6;if(_0x273a90>=_0x3afea2){_0x273a90=_0x3afea2;_0x287bc6=0xc8;}else{_0x287bc6=0xce;}_0x2340f5[_0xf153('0x1a')](_0x287bc6);return _0x2340f5[_0xf153('0x1f')](_0xf153('0x20'),_0x68f436+'-'+_0x273a90+'/'+_0x3afea2)['json'](_0x406e6f);}return null;};}function patchUpdates(_0x357d57){return function(_0x19122e){try{jsonpatch[_0xf153('0x21')](_0x19122e,_0x357d57,!![]);}catch(_0x14b83f){return BPromise[_0xf153('0x22')](_0x14b83f);}return _0x19122e[_0xf153('0x23')]();};}function saveUpdates(_0x37952f,_0x2db2c7){return function(_0x3735a7){if(_0x3735a7){return _0x3735a7[_0xf153('0x24')](_0x37952f)[_0xf153('0x25')](function(_0x3665a2){return _0x3665a2;});}return null;};}function removeEntity(_0x493e8a,_0xcd5762){return function(_0x395f28){if(_0x395f28){return _0x395f28[_0xf153('0x26')]()[_0xf153('0x25')](function(){_0x493e8a[_0xf153('0x1a')](0xcc)[_0xf153('0x1b')]();});}};}function handleEntityNotFound(_0x465d88,_0x4376f7){return function(_0xf67cde){if(!_0xf67cde){_0x465d88[_0xf153('0x19')](0x194);}return _0xf67cde;};}function handleError(_0x1570fc,_0x39f3ed){_0x39f3ed=_0x39f3ed||0x1f4;return function(_0x35cfe3){logger[_0xf153('0x27')](_0x35cfe3[_0xf153('0x28')]);if(_0x35cfe3[_0xf153('0x29')]){delete _0x35cfe3[_0xf153('0x29')];}_0x1570fc[_0xf153('0x1a')](_0x39f3ed)[_0xf153('0x2a')](_0x35cfe3);};}exports[_0xf153('0x2b')]=function(_0x48ebdc,_0x6d62ef){var _0x3f1c6f={},_0x576788={},_0x16cdcd={'count':0x0,'rows':[]};var _0x1c8590=db['ZohoField'][_0xf153('0x2c')];_0x576788[_0xf153('0x2d')]=_[_0xf153('0x2e')](_0x1c8590);_0x576788[_0xf153('0x2f')]=_[_0xf153('0x2e')](_0x48ebdc[_0xf153('0x2f')]);_0x576788[_0xf153('0x30')]=_[_0xf153('0x31')](_0x576788[_0xf153('0x2d')],_0x576788[_0xf153('0x2f')]);_0x3f1c6f[_0xf153('0x32')]=_[_0xf153('0x31')](_0x576788['model'],qs[_0xf153('0x33')](_0x48ebdc[_0xf153('0x2f')][_0xf153('0x33')]));_0x3f1c6f[_0xf153('0x32')]=_0x3f1c6f['attributes']['length']?_0x3f1c6f[_0xf153('0x32')]:_0x576788['model'];if(!_0x48ebdc['query'][_0xf153('0x34')]('nolimit')){_0x3f1c6f[_0xf153('0x1e')]=qs['limit'](_0x48ebdc[_0xf153('0x2f')][_0xf153('0x1e')]);_0x3f1c6f['offset']=qs[_0xf153('0x1d')](_0x48ebdc[_0xf153('0x2f')][_0xf153('0x1d')]);}_0x3f1c6f[_0xf153('0x35')]=qs[_0xf153('0x36')](_0x48ebdc[_0xf153('0x2f')]['sort']);_0x3f1c6f[_0xf153('0x37')]=qs['filters'](_[_0xf153('0x38')](_0x48ebdc[_0xf153('0x2f')],_0x576788[_0xf153('0x30')]));if(_0x48ebdc[_0xf153('0x2f')][_0xf153('0x39')]){_0x3f1c6f[_0xf153('0x37')]=_['merge'](_0x3f1c6f[_0xf153('0x37')],{'$or':_[_0xf153('0x3a')](_0x1c8590,function(_0x332809){if(_0x332809['type'][_0xf153('0x3b')]!==_0xf153('0x3c')){var _0xd2a763={};_0xd2a763[_0x332809[_0xf153('0x3d')]]={'$like':'%'+_0x48ebdc[_0xf153('0x2f')][_0xf153('0x39')]+'%'};return _0xd2a763;}})});}_0x3f1c6f=_['merge']({},_0x3f1c6f,_0x48ebdc[_0xf153('0x3e')]);var _0x102c76={'where':_0x3f1c6f['where']};return db[_0xf153('0x3f')][_0xf153('0x40')](_0x102c76)[_0xf153('0x25')](function(_0x40e9f0){_0x16cdcd[_0xf153('0x40')]=_0x40e9f0;if(_0x48ebdc[_0xf153('0x2f')][_0xf153('0x41')]){_0x3f1c6f['include']=[{'all':!![]}];}return db[_0xf153('0x3f')][_0xf153('0x42')](_0x3f1c6f);})[_0xf153('0x25')](function(_0x352e7c){_0x16cdcd[_0xf153('0x43')]=_0x352e7c;return _0x16cdcd;})[_0xf153('0x25')](respondWithFilteredResult(_0x6d62ef,_0x3f1c6f))['catch'](handleError(_0x6d62ef,null));};exports['show']=function(_0xa3922b,_0x5051f3){var _0x46dd09={'raw':!![],'where':{'id':_0xa3922b[_0xf153('0x44')]['id']}},_0x36c456={};_0x36c456[_0xf153('0x2d')]=_[_0xf153('0x2e')](db[_0xf153('0x3f')]['rawAttributes']);_0x36c456['query']=_[_0xf153('0x2e')](_0xa3922b[_0xf153('0x2f')]);_0x36c456['filters']=_[_0xf153('0x31')](_0x36c456[_0xf153('0x2d')],_0x36c456[_0xf153('0x2f')]);_0x46dd09[_0xf153('0x32')]=_[_0xf153('0x31')](_0x36c456[_0xf153('0x2d')],qs[_0xf153('0x33')](_0xa3922b[_0xf153('0x2f')][_0xf153('0x33')]));_0x46dd09[_0xf153('0x32')]=_0x46dd09[_0xf153('0x32')][_0xf153('0x45')]?_0x46dd09['attributes']:_0x36c456[_0xf153('0x2d')];if(_0xa3922b[_0xf153('0x2f')][_0xf153('0x41')]){_0x46dd09['include']=[{'all':!![]}];}_0x46dd09=_[_0xf153('0x46')]({},_0x46dd09,_0xa3922b[_0xf153('0x3e')]);return db['ZohoField'][_0xf153('0x47')](_0x46dd09)['then'](handleEntityNotFound(_0x5051f3,null))[_0xf153('0x25')](respondWithResult(_0x5051f3,null))[_0xf153('0x48')](handleError(_0x5051f3,null));};exports[_0xf153('0x49')]=function(_0x550d45,_0x1f540b){return db[_0xf153('0x3f')][_0xf153('0x49')](_0x550d45[_0xf153('0x4a')],{})[_0xf153('0x25')](respondWithResult(_0x1f540b,0xc9))['catch'](handleError(_0x1f540b,null));};exports[_0xf153('0x24')]=function(_0x3bc265,_0x5bbf89){if(_0x3bc265[_0xf153('0x4a')]['id']){delete _0x3bc265[_0xf153('0x4a')]['id'];}return db[_0xf153('0x3f')]['find']({'where':{'id':_0x3bc265[_0xf153('0x44')]['id']}})[_0xf153('0x25')](handleEntityNotFound(_0x5bbf89,null))[_0xf153('0x25')](saveUpdates(_0x3bc265[_0xf153('0x4a')],null))[_0xf153('0x25')](respondWithResult(_0x5bbf89,null))[_0xf153('0x48')](handleError(_0x5bbf89,null));};exports[_0xf153('0x26')]=function(_0x33e48,_0x3b91ed){return db['ZohoField'][_0xf153('0x47')]({'where':{'id':_0x33e48['params']['id']}})['then'](handleEntityNotFound(_0x3b91ed,null))['then'](removeEntity(_0x3b91ed,null))[_0xf153('0x48')](handleError(_0x3b91ed,null));};
\ No newline at end of file
index c2d5635..69c5f56 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x42b5=['lodash','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./intZohoField.attributes','exports','define','zoho_unique_index','idField'];(function(_0x1405bc,_0x59b09c){var _0x380e06=function(_0x6f3802){while(--_0x6f3802){_0x1405bc['push'](_0x1405bc['shift']());}};_0x380e06(++_0x59b09c);}(_0x42b5,0x118));var _0x542b=function(_0x57a8dc,_0x52b2b2){_0x57a8dc=_0x57a8dc-0x0;var _0x4dff43=_0x42b5[_0x57a8dc];return _0x4dff43;};'use strict';var _=require(_0x542b('0x0'));var util=require('util');var logger=require(_0x542b('0x1'))(_0x542b('0x2'));var moment=require(_0x542b('0x3'));var BPromise=require(_0x542b('0x4'));var rp=require(_0x542b('0x5'));var fs=require('fs');var path=require(_0x542b('0x6'));var rimraf=require(_0x542b('0x7'));var config=require(_0x542b('0x8'));var attributes=require(_0x542b('0x9'));module[_0x542b('0xa')]=function(_0x5283fa,_0x29f318){return _0x5283fa[_0x542b('0xb')]('ZohoField',attributes,{'tableName':'int_zoho_fields','paranoid':![],'indexes':[{'name':_0x542b('0xc'),'fields':[_0x542b('0xd'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x0553=['../../config/environment','./intZohoField.attributes','ZohoField','int_zoho_fields','FieldId','lodash','util','../../config/logger','api','moment','request-promise','rimraf'];(function(_0xd47b8e,_0x55c198){var _0x1214ce=function(_0x511ef7){while(--_0x511ef7){_0xd47b8e['push'](_0xd47b8e['shift']());}};_0x1214ce(++_0x55c198);}(_0x0553,0x149));var _0x3055=function(_0x4b55cb,_0x49791b){_0x4b55cb=_0x4b55cb-0x0;var _0x2631df=_0x0553[_0x4b55cb];return _0x2631df;};'use strict';var _=require(_0x3055('0x0'));var util=require(_0x3055('0x1'));var logger=require(_0x3055('0x2'))(_0x3055('0x3'));var moment=require(_0x3055('0x4'));var BPromise=require('bluebird');var rp=require(_0x3055('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x3055('0x6'));var config=require(_0x3055('0x7'));var attributes=require(_0x3055('0x8'));module['exports']=function(_0x2861a9,_0x8bc790){return _0x2861a9['define'](_0x3055('0x9'),attributes,{'tableName':_0x3055('0xa'),'paranoid':![],'indexes':[{'name':'zoho_unique_index','fields':['idField',_0x3055('0xb')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 769347f..51228a9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd814=['message','ZohoField,\x20%s,\x20%s','result','util','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','client','request','then','info','request\x20sent','debug','ZohoField,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x42245d,_0x51758f){var _0x4b211a=function(_0x2634e){while(--_0x2634e){_0x42245d['push'](_0x42245d['shift']());}};_0x4b211a(++_0x51758f);}(_0xd814,0xab));var _0x4d81=function(_0xf11da2,_0x4699ef){_0xf11da2=_0xf11da2-0x0;var _0x804216=_0xd814[_0xf11da2];return _0x804216;};'use strict';var _=require('lodash');var util=require(_0x4d81('0x0'));var moment=require(_0x4d81('0x1'));var BPromise=require('bluebird');var rs=require(_0x4d81('0x2'));var fs=require('fs');var Redis=require(_0x4d81('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x4d81('0x4'));var logger=require(_0x4d81('0x5'))(_0x4d81('0x6'));var config=require(_0x4d81('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x4d81('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x19832e,_0x2f4c7c,_0x390ef9){return new BPromise(function(_0x4b2e71,_0x18b1d0){return client[_0x4d81('0x9')](_0x19832e,_0x390ef9)[_0x4d81('0xa')](function(_0x26de72){logger[_0x4d81('0xb')]('ZohoField,\x20%s,\x20%s',_0x2f4c7c,_0x4d81('0xc'));logger[_0x4d81('0xd')](_0x4d81('0xe'),_0x2f4c7c,_0x4d81('0xc'),JSON[_0x4d81('0xf')](_0x26de72));if(_0x26de72[_0x4d81('0x10')]){if(_0x26de72['error'][_0x4d81('0x11')]===0x1f4){logger[_0x4d81('0x10')]('ZohoField,\x20%s,\x20%s',_0x2f4c7c,_0x26de72[_0x4d81('0x10')][_0x4d81('0x12')]);return _0x18b1d0(_0x26de72[_0x4d81('0x10')]['message']);}logger[_0x4d81('0x10')](_0x4d81('0x13'),_0x2f4c7c,_0x26de72['error'][_0x4d81('0x12')]);return _0x4b2e71(_0x26de72[_0x4d81('0x10')][_0x4d81('0x12')]);}else{logger[_0x4d81('0xb')](_0x4d81('0x13'),_0x2f4c7c,_0x4d81('0xc'));_0x4b2e71(_0x26de72[_0x4d81('0x14')]['message']);}})['catch'](function(_0x65a07c){logger[_0x4d81('0x10')](_0x4d81('0x13'),_0x2f4c7c,_0x65a07c);_0x18b1d0(_0x65a07c);});});}
\ No newline at end of file
+var _0x3702=['catch','lodash','util','moment','bluebird','randomstring','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','debug','ZohoField,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','ZohoField,\x20%s,\x20%s','message','result'];(function(_0x17142c,_0x5a4f85){var _0x128bd0=function(_0x3479f0){while(--_0x3479f0){_0x17142c['push'](_0x17142c['shift']());}};_0x128bd0(++_0x5a4f85);}(_0x3702,0x1cd));var _0x2370=function(_0x25ece3,_0x3b2e7e){_0x25ece3=_0x25ece3-0x0;var _0x4a00e2=_0x3702[_0x25ece3];return _0x4a00e2;};'use strict';var _=require(_0x2370('0x0'));var util=require(_0x2370('0x1'));var moment=require(_0x2370('0x2'));var BPromise=require(_0x2370('0x3'));var rs=require(_0x2370('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x2370('0x5'))(_0x2370('0x6'));var config=require(_0x2370('0x7'));var jayson=require(_0x2370('0x8'));var client=jayson[_0x2370('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x87cf87,_0x16a3a1,_0x4c503a){return new BPromise(function(_0x43e616,_0x29219b){return client[_0x2370('0xa')](_0x87cf87,_0x4c503a)[_0x2370('0xb')](function(_0x2c6ccb){logger[_0x2370('0xc')]('ZohoField,\x20%s,\x20%s',_0x16a3a1,'request\x20sent');logger[_0x2370('0xd')](_0x2370('0xe'),_0x16a3a1,_0x2370('0xf'),JSON[_0x2370('0x10')](_0x2c6ccb));if(_0x2c6ccb[_0x2370('0x11')]){if(_0x2c6ccb[_0x2370('0x11')][_0x2370('0x12')]===0x1f4){logger[_0x2370('0x11')](_0x2370('0x13'),_0x16a3a1,_0x2c6ccb[_0x2370('0x11')][_0x2370('0x14')]);return _0x29219b(_0x2c6ccb[_0x2370('0x11')]['message']);}logger[_0x2370('0x11')](_0x2370('0x13'),_0x16a3a1,_0x2c6ccb[_0x2370('0x11')][_0x2370('0x14')]);return _0x43e616(_0x2c6ccb[_0x2370('0x11')][_0x2370('0x14')]);}else{logger[_0x2370('0xc')](_0x2370('0x13'),_0x16a3a1,_0x2370('0xf'));_0x43e616(_0x2c6ccb[_0x2370('0x15')]['message']);}})[_0x2370('0x16')](function(_0x14556a){logger[_0x2370('0x11')]('ZohoField,\x20%s,\x20%s',_0x16a3a1,_0x14556a);_0x29219b(_0x14556a);});});}
\ No newline at end of file
index e640343..ff8bc58 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x14b2=['exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../config/environment'];(function(_0x4082fd,_0x4fb42c){var _0x4ef19b=function(_0x387cfd){while(--_0x387cfd){_0x4082fd['push'](_0x4082fd['shift']());}};_0x4ef19b(++_0x4fb42c);}(_0x14b2,0x1a1));var _0x214b=function(_0x14a703,_0x2e487f){_0x14a703=_0x14a703-0x0;var _0x5de9ea=_0x14b2[_0x14a703];return _0x5de9ea;};'use strict';var multer=require(_0x214b('0x0'));var util=require(_0x214b('0x1'));var path=require('path');var timeout=require(_0x214b('0x2'));var express=require(_0x214b('0x3'));var router=express[_0x214b('0x4')]();var auth=require(_0x214b('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x214b('0x6'));module[_0x214b('0x7')]=router;
\ No newline at end of file
+var _0x8b52=['exports','multer','util','path','express','Router','../../components/interaction/service','../../config/environment'];(function(_0x4fe19c,_0x45d0fe){var _0x952ac7=function(_0x274a16){while(--_0x274a16){_0x4fe19c['push'](_0x4fe19c['shift']());}};_0x952ac7(++_0x45d0fe);}(_0x8b52,0x151));var _0x28b5=function(_0x167cc1,_0x56ef5a){_0x167cc1=_0x167cc1-0x0;var _0x10bc4b=_0x8b52[_0x167cc1];return _0x10bc4b;};'use strict';var multer=require(_0x28b5('0x0'));var util=require(_0x28b5('0x1'));var path=require(_0x28b5('0x2'));var timeout=require('connect-timeout');var express=require(_0x28b5('0x3'));var router=express[_0x28b5('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x28b5('0x5'));var config=require(_0x28b5('0x6'));module[_0x28b5('0x7')]=router;
\ No newline at end of file
index c268256..50bb602 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9ddf=['STRING','unique_name_and_version','app.js','INTEGER','exports'];(function(_0x507c81,_0x3e1b56){var _0x368a25=function(_0x1e7519){while(--_0x1e7519){_0x507c81['push'](_0x507c81['shift']());}};_0x368a25(++_0x3e1b56);}(_0x9ddf,0x16c));var _0xf9dd=function(_0x3c5d9b,_0x16f3f1){_0x3c5d9b=_0x3c5d9b-0x0;var _0x557a6e=_0x9ddf[_0x3c5d9b];return _0x557a6e;};'use strict';var Sequelize=require('sequelize');module[_0xf9dd('0x0')]={'name':{'type':Sequelize[_0xf9dd('0x1')],'allowNull':![],'unique':'unique_name_and_version'},'version':{'type':Sequelize[_0xf9dd('0x1')],'allowNull':![],'unique':_0xf9dd('0x2')},'main':{'type':Sequelize[_0xf9dd('0x1')],'defaultValue':_0xf9dd('0x3')},'filename':{'type':Sequelize[_0xf9dd('0x1')]},'path':{'type':Sequelize['STRING']},'type':{'type':Sequelize['STRING']},'size':{'type':Sequelize[_0xf9dd('0x4')]},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'author':{'type':Sequelize[_0xf9dd('0x1')]},'logo':{'type':Sequelize[_0xf9dd('0x1')]},'state':{'type':Sequelize['STRING'],'unique':'state'},'description':{'type':Sequelize[_0xf9dd('0x1')]},'title':{'type':Sequelize[_0xf9dd('0x1')]},'remoteUri':{'type':Sequelize[_0xf9dd('0x1')]},'link':{'type':Sequelize['STRING'],'defaultValue':'#'}};
\ No newline at end of file
+var _0xbaa5=['exports','STRING','unique_name_and_version','app.js','INTEGER','BOOLEAN','state','sequelize'];(function(_0x399dab,_0x2cfbd4){var _0x4d7444=function(_0x1e19f7){while(--_0x1e19f7){_0x399dab['push'](_0x399dab['shift']());}};_0x4d7444(++_0x2cfbd4);}(_0xbaa5,0xdf));var _0x5baa=function(_0x582fdc,_0x4b1b35){_0x582fdc=_0x582fdc-0x0;var _0x2e1202=_0xbaa5[_0x582fdc];return _0x2e1202;};'use strict';var Sequelize=require(_0x5baa('0x0'));module[_0x5baa('0x1')]={'name':{'type':Sequelize[_0x5baa('0x2')],'allowNull':![],'unique':_0x5baa('0x3')},'version':{'type':Sequelize[_0x5baa('0x2')],'allowNull':![],'unique':_0x5baa('0x3')},'main':{'type':Sequelize[_0x5baa('0x2')],'defaultValue':_0x5baa('0x4')},'filename':{'type':Sequelize['STRING']},'path':{'type':Sequelize[_0x5baa('0x2')]},'type':{'type':Sequelize[_0x5baa('0x2')]},'size':{'type':Sequelize[_0x5baa('0x5')]},'active':{'type':Sequelize[_0x5baa('0x6')],'defaultValue':![]},'author':{'type':Sequelize['STRING']},'logo':{'type':Sequelize[_0x5baa('0x2')]},'state':{'type':Sequelize[_0x5baa('0x2')],'unique':_0x5baa('0x7')},'description':{'type':Sequelize['STRING']},'title':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize['STRING']},'link':{'type':Sequelize[_0x5baa('0x2')],'defaultValue':'#'}};
\ No newline at end of file
index fe7a534..32ffcc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5046=['keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','VIRTUAL','options','includeAll','rows','catch','show','params','create','body','find','html-pdf','eml-format','rimraf','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','../../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','save','update','then','destroy','error','name','send','index','Integration','rawAttributes','model'];(function(_0x1277ac,_0x437d79){var _0x583151=function(_0x2e7d6b){while(--_0x2e7d6b){_0x1277ac['push'](_0x1277ac['shift']());}};_0x583151(++_0x437d79);}(_0x5046,0x1d1));var _0x6504=function(_0x4edd34,_0x25a60d){_0x4edd34=_0x4edd34-0x0;var _0x1be049=_0x5046[_0x4edd34];return _0x1be049;};'use strict';var pdf=require(_0x6504('0x0'));var emlformat=require(_0x6504('0x1'));var rimraf=require(_0x6504('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x6504('0x3'));var rp=require('request-promise');var moment=require(_0x6504('0x4'));var BPromise=require(_0x6504('0x5'));var Mustache=require(_0x6504('0x6'));var util=require(_0x6504('0x7'));var path=require(_0x6504('0x8'));var sox=require(_0x6504('0x9'));var csv=require(_0x6504('0xa'));var ejs=require(_0x6504('0xb'));var fs=require('fs');var _=require(_0x6504('0xc'));var squel=require(_0x6504('0xd'));var crypto=require(_0x6504('0xe'));var jsforce=require(_0x6504('0xf'));var deskjs=require('desk.js');var toCsv=require(_0x6504('0xa'));var querystring=require(_0x6504('0x10'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x6504('0x11'));var qs=require(_0x6504('0x12'));var hardwareService=require(_0x6504('0x13'));var logger=require(_0x6504('0x14'))(_0x6504('0x15'));var utils=require(_0x6504('0x16'));var config=require(_0x6504('0x17'));var db=require(_0x6504('0x18'))['db'];function respondWithStatusCode(_0x581277,_0x510cf0){_0x510cf0=_0x510cf0||0xcc;return function(_0x4c0b3a){if(_0x4c0b3a){return _0x581277[_0x6504('0x19')](_0x510cf0);}return _0x581277[_0x6504('0x1a')](_0x510cf0)[_0x6504('0x1b')]();};}function respondWithResult(_0x206b1a,_0x452a0a){_0x452a0a=_0x452a0a||0xc8;return function(_0x47a3ac){if(_0x47a3ac){return _0x206b1a[_0x6504('0x1a')](_0x452a0a)[_0x6504('0x1c')](_0x47a3ac);}};}function respondWithFilteredResult(_0x3e0273,_0x283582){return function(_0x54f6e0){if(_0x54f6e0){var _0x537ee7=_0x54f6e0[_0x6504('0x1d')],_0xb5e5e9=_0x283582[_0x6504('0x1e')],_0x1aa517=_0x283582[_0x6504('0x1e')]+_0x283582[_0x6504('0x1f')],_0x38b544;if(_0x1aa517>=_0x537ee7){_0x1aa517=_0x537ee7;_0x38b544=0xc8;}else{_0x38b544=0xce;}_0x3e0273[_0x6504('0x1a')](_0x38b544);return _0x3e0273[_0x6504('0x20')](_0x6504('0x21'),_0xb5e5e9+'-'+_0x1aa517+'/'+_0x537ee7)[_0x6504('0x1c')](_0x54f6e0);}return null;};}function patchUpdates(_0x4b3658){return function(_0x5c6c4e){try{jsonpatch[_0x6504('0x22')](_0x5c6c4e,_0x4b3658,!![]);}catch(_0x4f26bd){return BPromise['reject'](_0x4f26bd);}return _0x5c6c4e[_0x6504('0x23')]();};}function saveUpdates(_0x16c3f5,_0x2d830c){return function(_0x468114){if(_0x468114){return _0x468114[_0x6504('0x24')](_0x16c3f5)[_0x6504('0x25')](function(_0xd7020){return _0xd7020;});}return null;};}function removeEntity(_0x26f0ce,_0x248e1f){return function(_0x3f43c4){if(_0x3f43c4){return _0x3f43c4[_0x6504('0x26')]()[_0x6504('0x25')](function(){_0x26f0ce['status'](0xcc)[_0x6504('0x1b')]();});}};}function handleEntityNotFound(_0x19e3e2,_0x414023){return function(_0xe1a01d){if(!_0xe1a01d){_0x19e3e2['sendStatus'](0x194);}return _0xe1a01d;};}function handleError(_0x8ce0f,_0x4432d6){_0x4432d6=_0x4432d6||0x1f4;return function(_0x3b0406){logger[_0x6504('0x27')](_0x3b0406['stack']);if(_0x3b0406['name']){delete _0x3b0406[_0x6504('0x28')];}_0x8ce0f[_0x6504('0x1a')](_0x4432d6)[_0x6504('0x29')](_0x3b0406);};}exports[_0x6504('0x2a')]=function(_0x29273e,_0x2be623){var _0x15311e={},_0x49488f={},_0x1d968={'count':0x0,'rows':[]};var _0x1ec32f=db[_0x6504('0x2b')][_0x6504('0x2c')];_0x49488f[_0x6504('0x2d')]=_[_0x6504('0x2e')](_0x1ec32f);_0x49488f[_0x6504('0x2f')]=_[_0x6504('0x2e')](_0x29273e[_0x6504('0x2f')]);_0x49488f[_0x6504('0x30')]=_[_0x6504('0x31')](_0x49488f[_0x6504('0x2d')],_0x49488f['query']);_0x15311e[_0x6504('0x32')]=_[_0x6504('0x31')](_0x49488f[_0x6504('0x2d')],qs[_0x6504('0x33')](_0x29273e['query'][_0x6504('0x33')]));_0x15311e[_0x6504('0x32')]=_0x15311e[_0x6504('0x32')][_0x6504('0x34')]?_0x15311e[_0x6504('0x32')]:_0x49488f[_0x6504('0x2d')];if(!_0x29273e['query'][_0x6504('0x35')](_0x6504('0x36'))){_0x15311e[_0x6504('0x1f')]=qs[_0x6504('0x1f')](_0x29273e[_0x6504('0x2f')][_0x6504('0x1f')]);_0x15311e[_0x6504('0x1e')]=qs[_0x6504('0x1e')](_0x29273e[_0x6504('0x2f')][_0x6504('0x1e')]);}_0x15311e[_0x6504('0x37')]=qs[_0x6504('0x38')](_0x29273e[_0x6504('0x2f')]['sort']);_0x15311e[_0x6504('0x39')]=qs[_0x6504('0x30')](_[_0x6504('0x3a')](_0x29273e[_0x6504('0x2f')],_0x49488f[_0x6504('0x30')]));if(_0x29273e[_0x6504('0x2f')][_0x6504('0x3b')]){_0x15311e[_0x6504('0x39')]=_[_0x6504('0x3c')](_0x15311e[_0x6504('0x39')],{'$or':_[_0x6504('0x3d')](_0x1ec32f,function(_0x47f454){if(_0x47f454[_0x6504('0x3e')]['key']!==_0x6504('0x3f')){var _0x54c054={};_0x54c054[_0x47f454['field']]={'$like':'%'+_0x29273e['query'][_0x6504('0x3b')]+'%'};return _0x54c054;}})});}_0x15311e=_[_0x6504('0x3c')]({},_0x15311e,_0x29273e[_0x6504('0x40')]);var _0x155346={'where':_0x15311e['where']};return db[_0x6504('0x2b')][_0x6504('0x1d')](_0x155346)['then'](function(_0x56c46d){_0x1d968[_0x6504('0x1d')]=_0x56c46d;if(_0x29273e[_0x6504('0x2f')][_0x6504('0x41')]){_0x15311e['include']=[{'all':!![]}];}return db[_0x6504('0x2b')]['findAll'](_0x15311e);})['then'](function(_0x13c8ff){_0x1d968[_0x6504('0x42')]=_0x13c8ff;return _0x1d968;})[_0x6504('0x25')](respondWithFilteredResult(_0x2be623,_0x15311e))[_0x6504('0x43')](handleError(_0x2be623,null));};exports[_0x6504('0x44')]=function(_0x217668,_0xd30d00){var _0x292adb={'raw':![],'where':{'id':_0x217668[_0x6504('0x45')]['id']}},_0xa3f345={};_0xa3f345[_0x6504('0x2d')]=_[_0x6504('0x2e')](db[_0x6504('0x2b')][_0x6504('0x2c')]);_0xa3f345[_0x6504('0x2f')]=_['keys'](_0x217668['query']);_0xa3f345[_0x6504('0x30')]=_[_0x6504('0x31')](_0xa3f345[_0x6504('0x2d')],_0xa3f345[_0x6504('0x2f')]);_0x292adb['attributes']=_[_0x6504('0x31')](_0xa3f345['model'],qs[_0x6504('0x33')](_0x217668[_0x6504('0x2f')][_0x6504('0x33')]));_0x292adb[_0x6504('0x32')]=_0x292adb[_0x6504('0x32')][_0x6504('0x34')]?_0x292adb[_0x6504('0x32')]:_0xa3f345[_0x6504('0x2d')];if(_0x217668[_0x6504('0x2f')][_0x6504('0x41')]){_0x292adb['include']=[{'all':!![]}];}_0x292adb=_[_0x6504('0x3c')]({},_0x292adb,_0x217668[_0x6504('0x40')]);return db[_0x6504('0x2b')]['find'](_0x292adb)[_0x6504('0x25')](handleEntityNotFound(_0xd30d00,null))['then'](respondWithResult(_0xd30d00,null))[_0x6504('0x43')](handleError(_0xd30d00,null));};exports[_0x6504('0x46')]=function(_0x4d4045,_0x275d7e){return db['Integration'][_0x6504('0x46')](_0x4d4045[_0x6504('0x47')],{})[_0x6504('0x25')](respondWithResult(_0x275d7e,0xc9))[_0x6504('0x43')](handleError(_0x275d7e,null));};exports[_0x6504('0x24')]=function(_0x1365c9,_0x30a0aa){if(_0x1365c9[_0x6504('0x47')]['id']){delete _0x1365c9[_0x6504('0x47')]['id'];}return db[_0x6504('0x2b')][_0x6504('0x48')]({'where':{'id':_0x1365c9[_0x6504('0x45')]['id']}})['then'](handleEntityNotFound(_0x30a0aa,null))['then'](saveUpdates(_0x1365c9[_0x6504('0x47')],null))[_0x6504('0x25')](respondWithResult(_0x30a0aa,null))['catch'](handleError(_0x30a0aa,null));};exports[_0x6504('0x26')]=function(_0x2642c0,_0x3610d4){return db['Integration'][_0x6504('0x48')]({'where':{'id':_0x2642c0[_0x6504('0x45')]['id']}})[_0x6504('0x25')](handleEntityNotFound(_0x3610d4,null))['then'](removeEntity(_0x3610d4,null))['catch'](handleError(_0x3610d4,null));};
\ No newline at end of file
+var _0xf0e9=['rawAttributes','keys','query','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','key','VIRTUAL','field','count','includeAll','include','rows','catch','show','params','find','create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','lodash','squel','crypto','jsforce','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','sendStatus','status','end','offset','set','save','update','destroy','then','stack','name','send','index','Integration'];(function(_0x24237f,_0x4cf32c){var _0x48298e=function(_0x3f7511){while(--_0x3f7511){_0x24237f['push'](_0x24237f['shift']());}};_0x48298e(++_0x4cf32c);}(_0xf0e9,0x1ee));var _0x9f0e=function(_0x38a1b9,_0x49f5da){_0x38a1b9=_0x38a1b9-0x0;var _0x39b46b=_0xf0e9[_0x38a1b9];return _0x39b46b;};'use strict';var pdf=require(_0x9f0e('0x0'));var emlformat=require(_0x9f0e('0x1'));var rimraf=require(_0x9f0e('0x2'));var zipdir=require(_0x9f0e('0x3'));var jsonpatch=require(_0x9f0e('0x4'));var rp=require(_0x9f0e('0x5'));var moment=require(_0x9f0e('0x6'));var BPromise=require(_0x9f0e('0x7'));var Mustache=require('mustache');var util=require(_0x9f0e('0x8'));var path=require(_0x9f0e('0x9'));var sox=require(_0x9f0e('0xa'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x9f0e('0xb'));var squel=require(_0x9f0e('0xc'));var crypto=require(_0x9f0e('0xd'));var jsforce=require(_0x9f0e('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0x9f0e('0xf'));var authService=require(_0x9f0e('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x9f0e('0x11'));var logger=require(_0x9f0e('0x12'))('api');var utils=require(_0x9f0e('0x13'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5c9d41,_0x4deae2){_0x4deae2=_0x4deae2||0xcc;return function(_0x2cb2aa){if(_0x2cb2aa){return _0x5c9d41[_0x9f0e('0x14')](_0x4deae2);}return _0x5c9d41[_0x9f0e('0x15')](_0x4deae2)[_0x9f0e('0x16')]();};}function respondWithResult(_0x326efd,_0x300974){_0x300974=_0x300974||0xc8;return function(_0x1897c1){if(_0x1897c1){return _0x326efd[_0x9f0e('0x15')](_0x300974)['json'](_0x1897c1);}};}function respondWithFilteredResult(_0x5b62ec,_0x44dafa){return function(_0xf69908){if(_0xf69908){var _0xfb1f31=_0xf69908['count'],_0x55a6a9=_0x44dafa[_0x9f0e('0x17')],_0x436743=_0x44dafa['offset']+_0x44dafa['limit'],_0x44e68b;if(_0x436743>=_0xfb1f31){_0x436743=_0xfb1f31;_0x44e68b=0xc8;}else{_0x44e68b=0xce;}_0x5b62ec[_0x9f0e('0x15')](_0x44e68b);return _0x5b62ec[_0x9f0e('0x18')]('Content-Range',_0x55a6a9+'-'+_0x436743+'/'+_0xfb1f31)['json'](_0xf69908);}return null;};}function patchUpdates(_0xb43565){return function(_0x41d2a3){try{jsonpatch['apply'](_0x41d2a3,_0xb43565,!![]);}catch(_0x548bbc){return BPromise['reject'](_0x548bbc);}return _0x41d2a3[_0x9f0e('0x19')]();};}function saveUpdates(_0x201b92,_0x4abcc1){return function(_0xf5d6f8){if(_0xf5d6f8){return _0xf5d6f8[_0x9f0e('0x1a')](_0x201b92)['then'](function(_0x6c5b2b){return _0x6c5b2b;});}return null;};}function removeEntity(_0x41c213,_0x5902f7){return function(_0x127567){if(_0x127567){return _0x127567[_0x9f0e('0x1b')]()[_0x9f0e('0x1c')](function(){_0x41c213[_0x9f0e('0x15')](0xcc)[_0x9f0e('0x16')]();});}};}function handleEntityNotFound(_0x3057f2,_0x305ef8){return function(_0x4820b2){if(!_0x4820b2){_0x3057f2[_0x9f0e('0x14')](0x194);}return _0x4820b2;};}function handleError(_0x5cfbe1,_0x4d461d){_0x4d461d=_0x4d461d||0x1f4;return function(_0x66cfed){logger['error'](_0x66cfed[_0x9f0e('0x1d')]);if(_0x66cfed[_0x9f0e('0x1e')]){delete _0x66cfed[_0x9f0e('0x1e')];}_0x5cfbe1[_0x9f0e('0x15')](_0x4d461d)[_0x9f0e('0x1f')](_0x66cfed);};}exports[_0x9f0e('0x20')]=function(_0x2a689e,_0xa35684){var _0x121a50={},_0x17d812={},_0x2f95a3={'count':0x0,'rows':[]};var _0x492a15=db[_0x9f0e('0x21')][_0x9f0e('0x22')];_0x17d812['model']=_[_0x9f0e('0x23')](_0x492a15);_0x17d812[_0x9f0e('0x24')]=_[_0x9f0e('0x23')](_0x2a689e[_0x9f0e('0x24')]);_0x17d812[_0x9f0e('0x25')]=_[_0x9f0e('0x26')](_0x17d812[_0x9f0e('0x27')],_0x17d812[_0x9f0e('0x24')]);_0x121a50['attributes']=_[_0x9f0e('0x26')](_0x17d812['model'],qs[_0x9f0e('0x28')](_0x2a689e[_0x9f0e('0x24')][_0x9f0e('0x28')]));_0x121a50[_0x9f0e('0x29')]=_0x121a50[_0x9f0e('0x29')][_0x9f0e('0x2a')]?_0x121a50[_0x9f0e('0x29')]:_0x17d812[_0x9f0e('0x27')];if(!_0x2a689e[_0x9f0e('0x24')][_0x9f0e('0x2b')](_0x9f0e('0x2c'))){_0x121a50[_0x9f0e('0x2d')]=qs[_0x9f0e('0x2d')](_0x2a689e[_0x9f0e('0x24')][_0x9f0e('0x2d')]);_0x121a50[_0x9f0e('0x17')]=qs[_0x9f0e('0x17')](_0x2a689e['query']['offset']);}_0x121a50[_0x9f0e('0x2e')]=qs['sort'](_0x2a689e[_0x9f0e('0x24')][_0x9f0e('0x2f')]);_0x121a50[_0x9f0e('0x30')]=qs['filters'](_[_0x9f0e('0x31')](_0x2a689e[_0x9f0e('0x24')],_0x17d812[_0x9f0e('0x25')]));if(_0x2a689e['query'][_0x9f0e('0x32')]){_0x121a50[_0x9f0e('0x30')]=_[_0x9f0e('0x33')](_0x121a50[_0x9f0e('0x30')],{'$or':_[_0x9f0e('0x34')](_0x492a15,function(_0x2d8012){if(_0x2d8012['type'][_0x9f0e('0x35')]!==_0x9f0e('0x36')){var _0x492b22={};_0x492b22[_0x2d8012[_0x9f0e('0x37')]]={'$like':'%'+_0x2a689e['query']['filter']+'%'};return _0x492b22;}})});}_0x121a50=_[_0x9f0e('0x33')]({},_0x121a50,_0x2a689e['options']);var _0x1a1ead={'where':_0x121a50['where']};return db[_0x9f0e('0x21')][_0x9f0e('0x38')](_0x1a1ead)[_0x9f0e('0x1c')](function(_0x3fa482){_0x2f95a3[_0x9f0e('0x38')]=_0x3fa482;if(_0x2a689e[_0x9f0e('0x24')][_0x9f0e('0x39')]){_0x121a50[_0x9f0e('0x3a')]=[{'all':!![]}];}return db[_0x9f0e('0x21')]['findAll'](_0x121a50);})[_0x9f0e('0x1c')](function(_0x4fc0b9){_0x2f95a3[_0x9f0e('0x3b')]=_0x4fc0b9;return _0x2f95a3;})[_0x9f0e('0x1c')](respondWithFilteredResult(_0xa35684,_0x121a50))[_0x9f0e('0x3c')](handleError(_0xa35684,null));};exports[_0x9f0e('0x3d')]=function(_0x526e69,_0x1ff945){var _0x479b70={'raw':![],'where':{'id':_0x526e69[_0x9f0e('0x3e')]['id']}},_0x4ee1a8={};_0x4ee1a8[_0x9f0e('0x27')]=_['keys'](db[_0x9f0e('0x21')][_0x9f0e('0x22')]);_0x4ee1a8['query']=_[_0x9f0e('0x23')](_0x526e69['query']);_0x4ee1a8[_0x9f0e('0x25')]=_[_0x9f0e('0x26')](_0x4ee1a8[_0x9f0e('0x27')],_0x4ee1a8['query']);_0x479b70['attributes']=_[_0x9f0e('0x26')](_0x4ee1a8['model'],qs[_0x9f0e('0x28')](_0x526e69['query'][_0x9f0e('0x28')]));_0x479b70[_0x9f0e('0x29')]=_0x479b70[_0x9f0e('0x29')][_0x9f0e('0x2a')]?_0x479b70[_0x9f0e('0x29')]:_0x4ee1a8['model'];if(_0x526e69[_0x9f0e('0x24')][_0x9f0e('0x39')]){_0x479b70[_0x9f0e('0x3a')]=[{'all':!![]}];}_0x479b70=_[_0x9f0e('0x33')]({},_0x479b70,_0x526e69['options']);return db['Integration'][_0x9f0e('0x3f')](_0x479b70)[_0x9f0e('0x1c')](handleEntityNotFound(_0x1ff945,null))['then'](respondWithResult(_0x1ff945,null))[_0x9f0e('0x3c')](handleError(_0x1ff945,null));};exports['create']=function(_0x4c1069,_0x3d1b85){return db[_0x9f0e('0x21')][_0x9f0e('0x40')](_0x4c1069[_0x9f0e('0x41')],{})[_0x9f0e('0x1c')](respondWithResult(_0x3d1b85,0xc9))[_0x9f0e('0x3c')](handleError(_0x3d1b85,null));};exports[_0x9f0e('0x1a')]=function(_0x473ac1,_0x471d3d){if(_0x473ac1['body']['id']){delete _0x473ac1[_0x9f0e('0x41')]['id'];}return db[_0x9f0e('0x21')][_0x9f0e('0x3f')]({'where':{'id':_0x473ac1['params']['id']}})[_0x9f0e('0x1c')](handleEntityNotFound(_0x471d3d,null))[_0x9f0e('0x1c')](saveUpdates(_0x473ac1['body'],null))[_0x9f0e('0x1c')](respondWithResult(_0x471d3d,null))[_0x9f0e('0x3c')](handleError(_0x471d3d,null));};exports['destroy']=function(_0x3cbb6e,_0x448d7e){return db[_0x9f0e('0x21')][_0x9f0e('0x3f')]({'where':{'id':_0x3cbb6e['params']['id']}})[_0x9f0e('0x1c')](handleEntityNotFound(_0x448d7e,null))[_0x9f0e('0x1c')](removeEntity(_0x448d7e,null))[_0x9f0e('0x3c')](handleError(_0x448d7e,null));};
\ No newline at end of file
index 1e561a1..d695f0c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x68bb=['lodash','../../config/logger','bluebird','request-promise','path','rimraf','../../config/environment','exports','Integration','integrations'];(function(_0xaa0309,_0x1c8008){var _0x5de7ce=function(_0x3aa6ae){while(--_0x3aa6ae){_0xaa0309['push'](_0xaa0309['shift']());}};_0x5de7ce(++_0x1c8008);}(_0x68bb,0x14a));var _0xb68b=function(_0x52b010,_0x3fb13c){_0x52b010=_0x52b010-0x0;var _0x3035cc=_0x68bb[_0x52b010];return _0x3035cc;};'use strict';var _=require(_0xb68b('0x0'));var util=require('util');var logger=require(_0xb68b('0x1'))('api');var moment=require('moment');var BPromise=require(_0xb68b('0x2'));var rp=require(_0xb68b('0x3'));var fs=require('fs');var path=require(_0xb68b('0x4'));var rimraf=require(_0xb68b('0x5'));var config=require(_0xb68b('0x6'));var attributes=require('./integration.attributes');module[_0xb68b('0x7')]=function(_0x221ab8,_0x59ef8f){return _0x221ab8['define'](_0xb68b('0x8'),attributes,{'tableName':_0xb68b('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xaf9d=['../../config/logger','api','moment','bluebird','request-promise','rimraf','./integration.attributes','exports','define','lodash','util'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xaf9d,0xae));var _0xdaf9=function(_0x30dcc4,_0x1b59f9){_0x30dcc4=_0x30dcc4-0x0;var _0x4d0bb6=_0xaf9d[_0x30dcc4];return _0x4d0bb6;};'use strict';var _=require(_0xdaf9('0x0'));var util=require(_0xdaf9('0x1'));var logger=require(_0xdaf9('0x2'))(_0xdaf9('0x3'));var moment=require(_0xdaf9('0x4'));var BPromise=require(_0xdaf9('0x5'));var rp=require(_0xdaf9('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0xdaf9('0x7'));var config=require('../../config/environment');var attributes=require(_0xdaf9('0x8'));module[_0xdaf9('0x9')]=function(_0x484215,_0x214698){return _0x484215[_0xdaf9('0xa')]('Integration',attributes,{'tableName':'integrations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bad8a0c..5bfa898 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d0b=['request\x20sent','debug','stringify','error','message','catch','bluebird','randomstring','ioredis','../../config/utils','rpc','../../config/environment','http','request','then','info','Integration,\x20%s,\x20%s'];(function(_0x27142e,_0x307292){var _0x5dcda0=function(_0x5c0c30){while(--_0x5c0c30){_0x27142e['push'](_0x27142e['shift']());}};_0x5dcda0(++_0x307292);}(_0x4d0b,0x1af));var _0xb4d0=function(_0x4b5d3a,_0x549cdd){_0x4b5d3a=_0x4b5d3a-0x0;var _0x293655=_0x4d0b[_0x4b5d3a];return _0x293655;};'use strict';var _=require('lodash');var util=require('util');var moment=require('moment');var BPromise=require(_0xb4d0('0x0'));var rs=require(_0xb4d0('0x1'));var fs=require('fs');var Redis=require(_0xb4d0('0x2'));var db=require('../../mysqldb')['db'];var utils=require(_0xb4d0('0x3'));var logger=require('../../config/logger')(_0xb4d0('0x4'));var config=require(_0xb4d0('0x5'));var jayson=require('jayson/promise');var client=jayson['client'][_0xb4d0('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x20020f,_0x1d6c01,_0x216812){return new BPromise(function(_0x5f3e83,_0x45f554){return client[_0xb4d0('0x7')](_0x20020f,_0x216812)[_0xb4d0('0x8')](function(_0x9f6834){logger[_0xb4d0('0x9')](_0xb4d0('0xa'),_0x1d6c01,_0xb4d0('0xb'));logger[_0xb4d0('0xc')]('Integration,\x20%s,\x20%s,\x20%s',_0x1d6c01,_0xb4d0('0xb'),JSON[_0xb4d0('0xd')](_0x9f6834));if(_0x9f6834[_0xb4d0('0xe')]){if(_0x9f6834['error']['code']===0x1f4){logger[_0xb4d0('0xe')]('Integration,\x20%s,\x20%s',_0x1d6c01,_0x9f6834['error'][_0xb4d0('0xf')]);return _0x45f554(_0x9f6834[_0xb4d0('0xe')][_0xb4d0('0xf')]);}logger[_0xb4d0('0xe')](_0xb4d0('0xa'),_0x1d6c01,_0x9f6834[_0xb4d0('0xe')][_0xb4d0('0xf')]);return _0x5f3e83(_0x9f6834[_0xb4d0('0xe')][_0xb4d0('0xf')]);}else{logger[_0xb4d0('0x9')]('Integration,\x20%s,\x20%s',_0x1d6c01,'request\x20sent');_0x5f3e83(_0x9f6834['result'][_0xb4d0('0xf')]);}})[_0xb4d0('0x10')](function(_0x4aff94){logger[_0xb4d0('0xe')]('Integration,\x20%s,\x20%s',_0x1d6c01,_0x4aff94);_0x45f554(_0x4aff94);});});}
\ No newline at end of file
+var _0xf7cb=['Integration,\x20%s,\x20%s','debug','request\x20sent','stringify','error','message','info','result','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http'];(function(_0x31c897,_0x492c42){var _0x990a5a=function(_0x2a34c0){while(--_0x2a34c0){_0x31c897['push'](_0x31c897['shift']());}};_0x990a5a(++_0x492c42);}(_0xf7cb,0x14c));var _0xbf7c=function(_0x1c4e32,_0xa79ec6){_0x1c4e32=_0x1c4e32-0x0;var _0x1e5169=_0xf7cb[_0x1c4e32];return _0x1e5169;};'use strict';var _=require('lodash');var util=require(_0xbf7c('0x0'));var moment=require(_0xbf7c('0x1'));var BPromise=require('bluebird');var rs=require(_0xbf7c('0x2'));var fs=require('fs');var Redis=require(_0xbf7c('0x3'));var db=require(_0xbf7c('0x4'))['db'];var utils=require(_0xbf7c('0x5'));var logger=require(_0xbf7c('0x6'))('rpc');var config=require(_0xbf7c('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xbf7c('0x8')][_0xbf7c('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x533d60,_0x5cedc5,_0x1da0cd){return new BPromise(function(_0xde8451,_0x1a5cc1){return client['request'](_0x533d60,_0x1da0cd)['then'](function(_0x46fcfd){logger['info'](_0xbf7c('0xa'),_0x5cedc5,'request\x20sent');logger[_0xbf7c('0xb')]('Integration,\x20%s,\x20%s,\x20%s',_0x5cedc5,_0xbf7c('0xc'),JSON[_0xbf7c('0xd')](_0x46fcfd));if(_0x46fcfd['error']){if(_0x46fcfd[_0xbf7c('0xe')]['code']===0x1f4){logger['error'](_0xbf7c('0xa'),_0x5cedc5,_0x46fcfd['error'][_0xbf7c('0xf')]);return _0x1a5cc1(_0x46fcfd['error'][_0xbf7c('0xf')]);}logger[_0xbf7c('0xe')]('Integration,\x20%s,\x20%s',_0x5cedc5,_0x46fcfd[_0xbf7c('0xe')][_0xbf7c('0xf')]);return _0xde8451(_0x46fcfd[_0xbf7c('0xe')][_0xbf7c('0xf')]);}else{logger[_0xbf7c('0x10')](_0xbf7c('0xa'),_0x5cedc5,_0xbf7c('0xc'));_0xde8451(_0x46fcfd[_0xbf7c('0x11')][_0xbf7c('0xf')]);}})['catch'](function(_0x9e5586){logger['error'](_0xbf7c('0xa'),_0x5cedc5,_0x9e5586);_0x1a5cc1(_0x9e5586);});});}
\ No newline at end of file
index 08fcdb9..6f1eb91 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0ee3=['delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./integrationReport.controller','get','isAuthenticated','index','/describe','describe','show','post','create','/:id'];(function(_0x580576,_0x2f107d){var _0x3f55a0=function(_0x2e180b){while(--_0x2e180b){_0x580576['push'](_0x580576['shift']());}};_0x3f55a0(++_0x2f107d);}(_0x0ee3,0xd5));var _0x30ee=function(_0x27a1ef,_0x2c08e2){_0x27a1ef=_0x27a1ef-0x0;var _0x3eb53b=_0x0ee3[_0x27a1ef];return _0x3eb53b;};'use strict';var multer=require(_0x30ee('0x0'));var util=require(_0x30ee('0x1'));var path=require(_0x30ee('0x2'));var timeout=require(_0x30ee('0x3'));var express=require(_0x30ee('0x4'));var router=express['Router']();var auth=require(_0x30ee('0x5'));var interaction=require(_0x30ee('0x6'));var config=require(_0x30ee('0x7'));var controller=require(_0x30ee('0x8'));router[_0x30ee('0x9')]('/',auth[_0x30ee('0xa')](),controller[_0x30ee('0xb')]);router[_0x30ee('0x9')](_0x30ee('0xc'),auth['isAuthenticated'](),controller[_0x30ee('0xd')]);router[_0x30ee('0x9')]('/:id',auth['isAuthenticated'](),controller[_0x30ee('0xe')]);router[_0x30ee('0xf')]('/',auth['isAuthenticated'](),controller[_0x30ee('0x10')]);router['put'](_0x30ee('0x11'),auth[_0x30ee('0xa')](),controller['update']);router[_0x30ee('0x12')](_0x30ee('0x11'),auth[_0x30ee('0xa')](),controller[_0x30ee('0x13')]);module[_0x30ee('0x14')]=router;
\ No newline at end of file
+var _0xfe4e=['/:id','delete','destroy','multer','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./integrationReport.controller','get','index','/describe','isAuthenticated','describe','show','create','put'];(function(_0x4b2251,_0x393f10){var _0x5d22fb=function(_0x10992c){while(--_0x10992c){_0x4b2251['push'](_0x4b2251['shift']());}};_0x5d22fb(++_0x393f10);}(_0xfe4e,0x133));var _0xefe4=function(_0x5f449e,_0x38e7a7){_0x5f449e=_0x5f449e-0x0;var _0xb4f6b2=_0xfe4e[_0x5f449e];return _0xb4f6b2;};'use strict';var multer=require(_0xefe4('0x0'));var util=require('util');var path=require(_0xefe4('0x1'));var timeout=require(_0xefe4('0x2'));var express=require(_0xefe4('0x3'));var router=express['Router']();var auth=require(_0xefe4('0x4'));var interaction=require(_0xefe4('0x5'));var config=require(_0xefe4('0x6'));var controller=require(_0xefe4('0x7'));router[_0xefe4('0x8')]('/',auth['isAuthenticated'](),controller[_0xefe4('0x9')]);router[_0xefe4('0x8')](_0xefe4('0xa'),auth[_0xefe4('0xb')](),controller[_0xefe4('0xc')]);router[_0xefe4('0x8')]('/:id',auth[_0xefe4('0xb')](),controller[_0xefe4('0xd')]);router['post']('/',auth[_0xefe4('0xb')](),controller[_0xefe4('0xe')]);router[_0xefe4('0xf')](_0xefe4('0x10'),auth[_0xefe4('0xb')](),controller['update']);router[_0xefe4('0x11')](_0xefe4('0x10'),auth[_0xefe4('0xb')](),controller[_0xefe4('0x12')]);module['exports']=router;
\ No newline at end of file
index ae7ffa0..641cacd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x79e2=['SENDING','RECEIVED','FAILED','exports','STRING','INTEGER','DATE','BOOLEAN','TEXT','ENUM','SENT'];(function(_0x4d680f,_0x5a6855){var _0x186d97=function(_0x19c2c8){while(--_0x19c2c8){_0x4d680f['push'](_0x4d680f['shift']());}};_0x186d97(++_0x5a6855);}(_0x79e2,0x158));var _0x279e=function(_0x99fec0,_0x422d3b){_0x99fec0=_0x99fec0-0x0;var _0x291fa8=_0x79e2[_0x99fec0];return _0x291fa8;};'use strict';var Sequelize=require('sequelize');module[_0x279e('0x0')]={'integration':{'type':Sequelize[_0x279e('0x1')]},'eventChannel':{'type':Sequelize[_0x279e('0x1')]},'exitStatus':{'type':Sequelize[_0x279e('0x1')]},'ticketId':{'type':Sequelize['STRING']},'integrationId':{'type':Sequelize[_0x279e('0x2')]},'contacts':{'type':Sequelize[_0x279e('0x1')]},'uniqueid':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0x279e('0x1')]},'calleridname':{'type':Sequelize[_0x279e('0x1')]},'queue':{'type':Sequelize['STRING']},'interface':{'type':Sequelize['STRING']},'membername':{'type':Sequelize[_0x279e('0x1')]},'agentcalledAt':{'type':Sequelize[_0x279e('0x3')]},'agentconnectAt':{'type':Sequelize['DATE']},'holdtime':{'type':Sequelize['INTEGER']},'agentcomplete':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentcompleteAt':{'type':Sequelize[_0x279e('0x3')]},'talktime':{'type':Sequelize[_0x279e('0x2')]},'agentacw':{'type':Sequelize[_0x279e('0x4')],'defaultValue':![]},'acwtime':{'type':Sequelize[_0x279e('0x2')]},'reason':{'type':Sequelize['STRING']},'agentringnoanswer':{'type':Sequelize[_0x279e('0x4')],'defaultValue':![]},'agentringnoanswerAt':{'type':Sequelize['DATE']},'agentdump':{'type':Sequelize[_0x279e('0x4')],'defaultValue':![]},'agentdumpAt':{'type':Sequelize[_0x279e('0x3')]},'lastevent':{'type':Sequelize[_0x279e('0x1')]},'channel':{'type':Sequelize[_0x279e('0x1')]},'channelstate':{'type':Sequelize['INTEGER']},'channelstatedesc':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize[_0x279e('0x1')]},'connectedlinename':{'type':Sequelize[_0x279e('0x1')]},'language':{'type':Sequelize[_0x279e('0x1')]},'accountcode':{'type':Sequelize[_0x279e('0x1')]},'context':{'type':Sequelize[_0x279e('0x1')]},'exten':{'type':Sequelize[_0x279e('0x1')]},'priority':{'type':Sequelize[_0x279e('0x1')]},'destchannel':{'type':Sequelize[_0x279e('0x1')]},'destchannelstate':{'type':Sequelize['INTEGER']},'destchannelstatedesc':{'type':Sequelize[_0x279e('0x1')]},'destcalleridnum':{'type':Sequelize[_0x279e('0x1')]},'destcalleridname':{'type':Sequelize[_0x279e('0x1')]},'destconnectedlinenum':{'type':Sequelize[_0x279e('0x1')]},'destconnectedlinename':{'type':Sequelize[_0x279e('0x1')]},'destlanguage':{'type':Sequelize[_0x279e('0x1')]},'destaccountcode':{'type':Sequelize[_0x279e('0x1')]},'destcontext':{'type':Sequelize[_0x279e('0x1')]},'destexten':{'type':Sequelize[_0x279e('0x1')]},'destpriority':{'type':Sequelize[_0x279e('0x1')]},'destuniqueid':{'type':Sequelize['STRING']},'messageId':{'type':Sequelize[_0x279e('0x1')]},'inReplyTo':{'type':Sequelize[_0x279e('0x1')]},'subject':{'type':Sequelize[_0x279e('0x1')]},'from':{'type':Sequelize[_0x279e('0x1')]},'to':{'type':Sequelize['STRING']},'cc':{'type':Sequelize[_0x279e('0x1')]},'attachment':{'type':Sequelize['TEXT']},'html':{'type':Sequelize[_0x279e('0x5')]},'text':{'type':Sequelize[_0x279e('0x5')]},'status':{'type':Sequelize[_0x279e('0x6')](_0x279e('0x7'),_0x279e('0x8'),_0x279e('0x9'),_0x279e('0xa'))},'url':{'type':Sequelize[_0x279e('0x1')]},'app':{'type':Sequelize['STRING']},'appdata':{'type':Sequelize[_0x279e('0x1')]},'projectId':{'type':Sequelize[_0x279e('0x2')]}};
\ No newline at end of file
+var _0x2d3b=['sequelize','exports','STRING','INTEGER','DATE','BOOLEAN','TEXT','ENUM','SENDING','RECEIVED','FAILED'];(function(_0x5ab8ca,_0x11829a){var _0x5589cc=function(_0x5107af){while(--_0x5107af){_0x5ab8ca['push'](_0x5ab8ca['shift']());}};_0x5589cc(++_0x11829a);}(_0x2d3b,0xc6));var _0xb2d3=function(_0x2ec461,_0x5f588a){_0x2ec461=_0x2ec461-0x0;var _0x28603d=_0x2d3b[_0x2ec461];return _0x28603d;};'use strict';var Sequelize=require(_0xb2d3('0x0'));module[_0xb2d3('0x1')]={'integration':{'type':Sequelize[_0xb2d3('0x2')]},'eventChannel':{'type':Sequelize[_0xb2d3('0x2')]},'exitStatus':{'type':Sequelize['STRING']},'ticketId':{'type':Sequelize[_0xb2d3('0x2')]},'integrationId':{'type':Sequelize[_0xb2d3('0x3')]},'contacts':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0xb2d3('0x2')]},'calleridnum':{'type':Sequelize[_0xb2d3('0x2')]},'calleridname':{'type':Sequelize[_0xb2d3('0x2')]},'queue':{'type':Sequelize['STRING']},'interface':{'type':Sequelize[_0xb2d3('0x2')]},'membername':{'type':Sequelize['STRING']},'agentcalledAt':{'type':Sequelize['DATE']},'agentconnectAt':{'type':Sequelize[_0xb2d3('0x4')]},'holdtime':{'type':Sequelize[_0xb2d3('0x3')]},'agentcomplete':{'type':Sequelize[_0xb2d3('0x5')],'defaultValue':![]},'agentcompleteAt':{'type':Sequelize[_0xb2d3('0x4')]},'talktime':{'type':Sequelize['INTEGER']},'agentacw':{'type':Sequelize[_0xb2d3('0x5')],'defaultValue':![]},'acwtime':{'type':Sequelize[_0xb2d3('0x3')]},'reason':{'type':Sequelize[_0xb2d3('0x2')]},'agentringnoanswer':{'type':Sequelize[_0xb2d3('0x5')],'defaultValue':![]},'agentringnoanswerAt':{'type':Sequelize[_0xb2d3('0x4')]},'agentdump':{'type':Sequelize[_0xb2d3('0x5')],'defaultValue':![]},'agentdumpAt':{'type':Sequelize[_0xb2d3('0x4')]},'lastevent':{'type':Sequelize[_0xb2d3('0x2')]},'channel':{'type':Sequelize[_0xb2d3('0x2')]},'channelstate':{'type':Sequelize[_0xb2d3('0x3')]},'channelstatedesc':{'type':Sequelize[_0xb2d3('0x2')]},'connectedlinenum':{'type':Sequelize[_0xb2d3('0x2')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0xb2d3('0x2')]},'context':{'type':Sequelize[_0xb2d3('0x2')]},'exten':{'type':Sequelize[_0xb2d3('0x2')]},'priority':{'type':Sequelize[_0xb2d3('0x2')]},'destchannel':{'type':Sequelize[_0xb2d3('0x2')]},'destchannelstate':{'type':Sequelize[_0xb2d3('0x3')]},'destchannelstatedesc':{'type':Sequelize[_0xb2d3('0x2')]},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize[_0xb2d3('0x2')]},'destconnectedlinenum':{'type':Sequelize['STRING']},'destconnectedlinename':{'type':Sequelize[_0xb2d3('0x2')]},'destlanguage':{'type':Sequelize[_0xb2d3('0x2')]},'destaccountcode':{'type':Sequelize['STRING']},'destcontext':{'type':Sequelize['STRING']},'destexten':{'type':Sequelize[_0xb2d3('0x2')]},'destpriority':{'type':Sequelize[_0xb2d3('0x2')]},'destuniqueid':{'type':Sequelize[_0xb2d3('0x2')]},'messageId':{'type':Sequelize[_0xb2d3('0x2')]},'inReplyTo':{'type':Sequelize['STRING']},'subject':{'type':Sequelize[_0xb2d3('0x2')]},'from':{'type':Sequelize['STRING']},'to':{'type':Sequelize[_0xb2d3('0x2')]},'cc':{'type':Sequelize['STRING']},'attachment':{'type':Sequelize[_0xb2d3('0x6')]},'html':{'type':Sequelize['TEXT']},'text':{'type':Sequelize['TEXT']},'status':{'type':Sequelize[_0xb2d3('0x7')]('SENT',_0xb2d3('0x8'),_0xb2d3('0x9'),_0xb2d3('0xa'))},'url':{'type':Sequelize[_0xb2d3('0x2')]},'app':{'type':Sequelize[_0xb2d3('0x2')]},'appdata':{'type':Sequelize['STRING']},'projectId':{'type':Sequelize[_0xb2d3('0x3')]}};
\ No newline at end of file
index f3f7797..4c54410 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3a8=['order','sort','filters','filter','where','merge','map','type','VIRTUAL','field','options','IntegrationReport','include','findAll','rows','catch','show','find','create','body','params','describe','html-pdf','eml-format','rimraf','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','apply','reject','update','destroy','then','end','stack','name','index','rawAttributes','model','query','keys','intersection','attributes','fields','length','nolimit','limit'];(function(_0x31a37b,_0x826249){var _0x49ae16=function(_0x2e8d52){while(--_0x2e8d52){_0x31a37b['push'](_0x31a37b['shift']());}};_0x49ae16(++_0x826249);}(_0xc3a8,0xe8));var _0x8c3a=function(_0x3d5351,_0x27bc80){_0x3d5351=_0x3d5351-0x0;var _0x1db4db=_0xc3a8[_0x3d5351];return _0x1db4db;};'use strict';var pdf=require(_0x8c3a('0x0'));var emlformat=require(_0x8c3a('0x1'));var rimraf=require(_0x8c3a('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x8c3a('0x3'));var rp=require('request-promise');var moment=require(_0x8c3a('0x4'));var BPromise=require(_0x8c3a('0x5'));var Mustache=require(_0x8c3a('0x6'));var util=require(_0x8c3a('0x7'));var path=require('path');var sox=require(_0x8c3a('0x8'));var csv=require(_0x8c3a('0x9'));var ejs=require(_0x8c3a('0xa'));var fs=require('fs');var _=require(_0x8c3a('0xb'));var squel=require(_0x8c3a('0xc'));var crypto=require(_0x8c3a('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x8c3a('0xe'));var toCsv=require(_0x8c3a('0x9'));var querystring=require(_0x8c3a('0xf'));var Papa=require(_0x8c3a('0x10'));var Redis=require(_0x8c3a('0x11'));var authService=require('../../components/auth/service');var qs=require(_0x8c3a('0x12'));var hardwareService=require(_0x8c3a('0x13'));var logger=require('../../config/logger')(_0x8c3a('0x14'));var utils=require(_0x8c3a('0x15'));var config=require(_0x8c3a('0x16'));var db=require(_0x8c3a('0x17'))['db'];function respondWithStatusCode(_0x15edbb,_0x22ef05){_0x22ef05=_0x22ef05||0xcc;return function(_0x5eb124){if(_0x5eb124){return _0x15edbb[_0x8c3a('0x18')](_0x22ef05);}return _0x15edbb['status'](_0x22ef05)['end']();};}function respondWithResult(_0x3b228a,_0x94752d){_0x94752d=_0x94752d||0xc8;return function(_0x271d3d){if(_0x271d3d){return _0x3b228a[_0x8c3a('0x19')](_0x94752d)[_0x8c3a('0x1a')](_0x271d3d);}};}function respondWithFilteredResult(_0x42604f,_0x278930){return function(_0x513e00){if(_0x513e00){var _0x43b853=_0x513e00[_0x8c3a('0x1b')],_0x5be4ea=_0x278930[_0x8c3a('0x1c')],_0x1d8b7b=_0x278930[_0x8c3a('0x1c')]+_0x278930['limit'],_0x1766b3;if(_0x1d8b7b>=_0x43b853){_0x1d8b7b=_0x43b853;_0x1766b3=0xc8;}else{_0x1766b3=0xce;}_0x42604f['status'](_0x1766b3);return _0x42604f['set']('Content-Range',_0x5be4ea+'-'+_0x1d8b7b+'/'+_0x43b853)[_0x8c3a('0x1a')](_0x513e00);}return null;};}function patchUpdates(_0x39b0dc){return function(_0x8fd89e){try{jsonpatch[_0x8c3a('0x1d')](_0x8fd89e,_0x39b0dc,!![]);}catch(_0x365ab8){return BPromise[_0x8c3a('0x1e')](_0x365ab8);}return _0x8fd89e['save']();};}function saveUpdates(_0x261c43,_0x5852f4){return function(_0x4f77df){if(_0x4f77df){return _0x4f77df[_0x8c3a('0x1f')](_0x261c43)['then'](function(_0x3efbc4){return _0x3efbc4;});}return null;};}function removeEntity(_0x1ed2c1,_0x15b441){return function(_0x58ca7a){if(_0x58ca7a){return _0x58ca7a[_0x8c3a('0x20')]()[_0x8c3a('0x21')](function(){_0x1ed2c1[_0x8c3a('0x19')](0xcc)[_0x8c3a('0x22')]();});}};}function handleEntityNotFound(_0x718982,_0x3c5f12){return function(_0x427917){if(!_0x427917){_0x718982['sendStatus'](0x194);}return _0x427917;};}function handleError(_0x4113dd,_0x5a6a42){_0x5a6a42=_0x5a6a42||0x1f4;return function(_0x2b4833){logger['error'](_0x2b4833[_0x8c3a('0x23')]);if(_0x2b4833[_0x8c3a('0x24')]){delete _0x2b4833['name'];}_0x4113dd[_0x8c3a('0x19')](_0x5a6a42)['send'](_0x2b4833);};}exports[_0x8c3a('0x25')]=function(_0x295fb9,_0x5ed0e5){var _0x47aabe={},_0x47ca8a={},_0x1228bd={'count':0x0,'rows':[]};var _0xff242b=db['IntegrationReport'][_0x8c3a('0x26')];_0x47ca8a[_0x8c3a('0x27')]=_['keys'](_0xff242b);_0x47ca8a[_0x8c3a('0x28')]=_[_0x8c3a('0x29')](_0x295fb9[_0x8c3a('0x28')]);_0x47ca8a['filters']=_[_0x8c3a('0x2a')](_0x47ca8a[_0x8c3a('0x27')],_0x47ca8a['query']);_0x47aabe[_0x8c3a('0x2b')]=_[_0x8c3a('0x2a')](_0x47ca8a['model'],qs[_0x8c3a('0x2c')](_0x295fb9[_0x8c3a('0x28')][_0x8c3a('0x2c')]));_0x47aabe['attributes']=_0x47aabe[_0x8c3a('0x2b')][_0x8c3a('0x2d')]?_0x47aabe[_0x8c3a('0x2b')]:_0x47ca8a[_0x8c3a('0x27')];if(!_0x295fb9['query']['hasOwnProperty'](_0x8c3a('0x2e'))){_0x47aabe[_0x8c3a('0x2f')]=qs[_0x8c3a('0x2f')](_0x295fb9[_0x8c3a('0x28')][_0x8c3a('0x2f')]);_0x47aabe['offset']=qs[_0x8c3a('0x1c')](_0x295fb9[_0x8c3a('0x28')][_0x8c3a('0x1c')]);}_0x47aabe[_0x8c3a('0x30')]=qs[_0x8c3a('0x31')](_0x295fb9['query'][_0x8c3a('0x31')]);_0x47aabe['where']=qs[_0x8c3a('0x32')](_['pick'](_0x295fb9[_0x8c3a('0x28')],_0x47ca8a['filters']));if(_0x295fb9[_0x8c3a('0x28')][_0x8c3a('0x33')]){_0x47aabe[_0x8c3a('0x34')]=_[_0x8c3a('0x35')](_0x47aabe['where'],{'$or':_[_0x8c3a('0x36')](_0xff242b,function(_0x3bf20b){if(_0x3bf20b[_0x8c3a('0x37')]['key']!==_0x8c3a('0x38')){var _0x94e0d6={};_0x94e0d6[_0x3bf20b[_0x8c3a('0x39')]]={'$like':'%'+_0x295fb9[_0x8c3a('0x28')][_0x8c3a('0x33')]+'%'};return _0x94e0d6;}})});}_0x47aabe=_[_0x8c3a('0x35')]({},_0x47aabe,_0x295fb9[_0x8c3a('0x3a')]);var _0x128e9c={'where':_0x47aabe[_0x8c3a('0x34')]};return db[_0x8c3a('0x3b')][_0x8c3a('0x1b')](_0x128e9c)['then'](function(_0x35a172){_0x1228bd[_0x8c3a('0x1b')]=_0x35a172;if(_0x295fb9[_0x8c3a('0x28')]['includeAll']){_0x47aabe[_0x8c3a('0x3c')]=[{'all':!![]}];}return db['IntegrationReport'][_0x8c3a('0x3d')](_0x47aabe);})['then'](function(_0xaf4959){_0x1228bd[_0x8c3a('0x3e')]=_0xaf4959;return _0x1228bd;})['then'](respondWithFilteredResult(_0x5ed0e5,_0x47aabe))[_0x8c3a('0x3f')](handleError(_0x5ed0e5,null));};exports[_0x8c3a('0x40')]=function(_0x34926e,_0x14a3c5){var _0x3f2ff9={'raw':![],'where':{'id':_0x34926e['params']['id']}},_0x5c38b9={};_0x5c38b9['model']=_[_0x8c3a('0x29')](db[_0x8c3a('0x3b')][_0x8c3a('0x26')]);_0x5c38b9[_0x8c3a('0x28')]=_['keys'](_0x34926e[_0x8c3a('0x28')]);_0x5c38b9['filters']=_[_0x8c3a('0x2a')](_0x5c38b9[_0x8c3a('0x27')],_0x5c38b9[_0x8c3a('0x28')]);_0x3f2ff9['attributes']=_[_0x8c3a('0x2a')](_0x5c38b9[_0x8c3a('0x27')],qs[_0x8c3a('0x2c')](_0x34926e[_0x8c3a('0x28')][_0x8c3a('0x2c')]));_0x3f2ff9[_0x8c3a('0x2b')]=_0x3f2ff9['attributes']['length']?_0x3f2ff9[_0x8c3a('0x2b')]:_0x5c38b9[_0x8c3a('0x27')];if(_0x34926e[_0x8c3a('0x28')]['includeAll']){_0x3f2ff9[_0x8c3a('0x3c')]=[{'all':!![]}];}_0x3f2ff9=_[_0x8c3a('0x35')]({},_0x3f2ff9,_0x34926e[_0x8c3a('0x3a')]);return db['IntegrationReport'][_0x8c3a('0x41')](_0x3f2ff9)[_0x8c3a('0x21')](handleEntityNotFound(_0x14a3c5,null))[_0x8c3a('0x21')](respondWithResult(_0x14a3c5,null))[_0x8c3a('0x3f')](handleError(_0x14a3c5,null));};exports['create']=function(_0x37ca54,_0x290f0e){return db['IntegrationReport'][_0x8c3a('0x42')](_0x37ca54['body'],{})['then'](respondWithResult(_0x290f0e,0xc9))['catch'](handleError(_0x290f0e,null));};exports[_0x8c3a('0x1f')]=function(_0x3d79fd,_0x37ce7a){if(_0x3d79fd[_0x8c3a('0x43')]['id']){delete _0x3d79fd[_0x8c3a('0x43')]['id'];}return db[_0x8c3a('0x3b')][_0x8c3a('0x41')]({'where':{'id':_0x3d79fd[_0x8c3a('0x44')]['id']}})[_0x8c3a('0x21')](handleEntityNotFound(_0x37ce7a,null))[_0x8c3a('0x21')](saveUpdates(_0x3d79fd[_0x8c3a('0x43')],null))['then'](respondWithResult(_0x37ce7a,null))[_0x8c3a('0x3f')](handleError(_0x37ce7a,null));};exports[_0x8c3a('0x20')]=function(_0xe3566b,_0x2b156c){return db[_0x8c3a('0x3b')][_0x8c3a('0x41')]({'where':{'id':_0xe3566b[_0x8c3a('0x44')]['id']}})[_0x8c3a('0x21')](handleEntityNotFound(_0x2b156c,null))[_0x8c3a('0x21')](removeEntity(_0x2b156c,null))[_0x8c3a('0x3f')](handleError(_0x2b156c,null));};exports[_0x8c3a('0x45')]=function(_0x584c05,_0x2b8c97){return db[_0x8c3a('0x3b')][_0x8c3a('0x45')]()[_0x8c3a('0x21')](respondWithResult(_0x2b8c97,null))[_0x8c3a('0x3f')](handleError(_0x2b8c97,null));};
\ No newline at end of file
+var _0x1ac2=['map','type','key','VIRTUAL','field','options','count','includeAll','include','findAll','rows','catch','show','params','find','create','body','destroy','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','offset','set','Content-Range','json','apply','reject','save','update','then','stack','name','index','IntegrationReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','limit','sort','pick','filter','where','merge'];(function(_0x3c2166,_0x41fc16){var _0x30ccc3=function(_0x689bc3){while(--_0x689bc3){_0x3c2166['push'](_0x3c2166['shift']());}};_0x30ccc3(++_0x41fc16);}(_0x1ac2,0xfd));var _0x21ac=function(_0x8a172,_0x120146){_0x8a172=_0x8a172-0x0;var _0x16e0d7=_0x1ac2[_0x8a172];return _0x16e0d7;};'use strict';var pdf=require(_0x21ac('0x0'));var emlformat=require(_0x21ac('0x1'));var rimraf=require(_0x21ac('0x2'));var zipdir=require(_0x21ac('0x3'));var jsonpatch=require(_0x21ac('0x4'));var rp=require(_0x21ac('0x5'));var moment=require(_0x21ac('0x6'));var BPromise=require(_0x21ac('0x7'));var Mustache=require(_0x21ac('0x8'));var util=require(_0x21ac('0x9'));var path=require(_0x21ac('0xa'));var sox=require('sox');var csv=require(_0x21ac('0xb'));var ejs=require(_0x21ac('0xc'));var fs=require('fs');var _=require(_0x21ac('0xd'));var squel=require('squel');var crypto=require(_0x21ac('0xe'));var jsforce=require(_0x21ac('0xf'));var deskjs=require(_0x21ac('0x10'));var toCsv=require(_0x21ac('0xb'));var querystring=require(_0x21ac('0x11'));var Papa=require(_0x21ac('0x12'));var Redis=require(_0x21ac('0x13'));var authService=require('../../components/auth/service');var qs=require(_0x21ac('0x14'));var hardwareService=require(_0x21ac('0x15'));var logger=require(_0x21ac('0x16'))(_0x21ac('0x17'));var utils=require(_0x21ac('0x18'));var config=require(_0x21ac('0x19'));var db=require(_0x21ac('0x1a'))['db'];function respondWithStatusCode(_0x47ca8e,_0x38e87e){_0x38e87e=_0x38e87e||0xcc;return function(_0x1357ef){if(_0x1357ef){return _0x47ca8e[_0x21ac('0x1b')](_0x38e87e);}return _0x47ca8e[_0x21ac('0x1c')](_0x38e87e)[_0x21ac('0x1d')]();};}function respondWithResult(_0x3deb4c,_0x169851){_0x169851=_0x169851||0xc8;return function(_0x3e2033){if(_0x3e2033){return _0x3deb4c[_0x21ac('0x1c')](_0x169851)['json'](_0x3e2033);}};}function respondWithFilteredResult(_0x3498e3,_0x3c1e0e){return function(_0xc92caa){if(_0xc92caa){var _0x3efc93=_0xc92caa['count'],_0x5bbb71=_0x3c1e0e[_0x21ac('0x1e')],_0xb1c52c=_0x3c1e0e[_0x21ac('0x1e')]+_0x3c1e0e['limit'],_0x41701d;if(_0xb1c52c>=_0x3efc93){_0xb1c52c=_0x3efc93;_0x41701d=0xc8;}else{_0x41701d=0xce;}_0x3498e3['status'](_0x41701d);return _0x3498e3[_0x21ac('0x1f')](_0x21ac('0x20'),_0x5bbb71+'-'+_0xb1c52c+'/'+_0x3efc93)[_0x21ac('0x21')](_0xc92caa);}return null;};}function patchUpdates(_0x174815){return function(_0x1b7685){try{jsonpatch[_0x21ac('0x22')](_0x1b7685,_0x174815,!![]);}catch(_0x43c2b0){return BPromise[_0x21ac('0x23')](_0x43c2b0);}return _0x1b7685[_0x21ac('0x24')]();};}function saveUpdates(_0xd82d1,_0x1266b2){return function(_0x33b784){if(_0x33b784){return _0x33b784[_0x21ac('0x25')](_0xd82d1)[_0x21ac('0x26')](function(_0x219c69){return _0x219c69;});}return null;};}function removeEntity(_0x3565ed,_0x22f864){return function(_0x2d7c2a){if(_0x2d7c2a){return _0x2d7c2a['destroy']()['then'](function(){_0x3565ed['status'](0xcc)[_0x21ac('0x1d')]();});}};}function handleEntityNotFound(_0x1dd357,_0x250300){return function(_0x326850){if(!_0x326850){_0x1dd357[_0x21ac('0x1b')](0x194);}return _0x326850;};}function handleError(_0x4618f8,_0x5bd586){_0x5bd586=_0x5bd586||0x1f4;return function(_0x2ce855){logger['error'](_0x2ce855[_0x21ac('0x27')]);if(_0x2ce855[_0x21ac('0x28')]){delete _0x2ce855['name'];}_0x4618f8[_0x21ac('0x1c')](_0x5bd586)['send'](_0x2ce855);};}exports[_0x21ac('0x29')]=function(_0x4201fe,_0xcf313e){var _0x5e0d03={},_0x516594={},_0x40dc99={'count':0x0,'rows':[]};var _0xe6c8f1=db[_0x21ac('0x2a')][_0x21ac('0x2b')];_0x516594[_0x21ac('0x2c')]=_[_0x21ac('0x2d')](_0xe6c8f1);_0x516594[_0x21ac('0x2e')]=_[_0x21ac('0x2d')](_0x4201fe['query']);_0x516594[_0x21ac('0x2f')]=_[_0x21ac('0x30')](_0x516594['model'],_0x516594['query']);_0x5e0d03[_0x21ac('0x31')]=_[_0x21ac('0x30')](_0x516594['model'],qs['fields'](_0x4201fe[_0x21ac('0x2e')][_0x21ac('0x32')]));_0x5e0d03[_0x21ac('0x31')]=_0x5e0d03[_0x21ac('0x31')][_0x21ac('0x33')]?_0x5e0d03[_0x21ac('0x31')]:_0x516594[_0x21ac('0x2c')];if(!_0x4201fe[_0x21ac('0x2e')]['hasOwnProperty'](_0x21ac('0x34'))){_0x5e0d03[_0x21ac('0x35')]=qs[_0x21ac('0x35')](_0x4201fe[_0x21ac('0x2e')]['limit']);_0x5e0d03[_0x21ac('0x1e')]=qs[_0x21ac('0x1e')](_0x4201fe['query'][_0x21ac('0x1e')]);}_0x5e0d03['order']=qs[_0x21ac('0x36')](_0x4201fe[_0x21ac('0x2e')][_0x21ac('0x36')]);_0x5e0d03['where']=qs[_0x21ac('0x2f')](_[_0x21ac('0x37')](_0x4201fe[_0x21ac('0x2e')],_0x516594[_0x21ac('0x2f')]));if(_0x4201fe[_0x21ac('0x2e')][_0x21ac('0x38')]){_0x5e0d03[_0x21ac('0x39')]=_[_0x21ac('0x3a')](_0x5e0d03[_0x21ac('0x39')],{'$or':_[_0x21ac('0x3b')](_0xe6c8f1,function(_0xc62f1b){if(_0xc62f1b[_0x21ac('0x3c')][_0x21ac('0x3d')]!==_0x21ac('0x3e')){var _0xcb597={};_0xcb597[_0xc62f1b[_0x21ac('0x3f')]]={'$like':'%'+_0x4201fe[_0x21ac('0x2e')][_0x21ac('0x38')]+'%'};return _0xcb597;}})});}_0x5e0d03=_['merge']({},_0x5e0d03,_0x4201fe[_0x21ac('0x40')]);var _0x160c6f={'where':_0x5e0d03[_0x21ac('0x39')]};return db['IntegrationReport'][_0x21ac('0x41')](_0x160c6f)[_0x21ac('0x26')](function(_0x47325a){_0x40dc99[_0x21ac('0x41')]=_0x47325a;if(_0x4201fe['query'][_0x21ac('0x42')]){_0x5e0d03[_0x21ac('0x43')]=[{'all':!![]}];}return db[_0x21ac('0x2a')][_0x21ac('0x44')](_0x5e0d03);})[_0x21ac('0x26')](function(_0x36df1c){_0x40dc99[_0x21ac('0x45')]=_0x36df1c;return _0x40dc99;})[_0x21ac('0x26')](respondWithFilteredResult(_0xcf313e,_0x5e0d03))[_0x21ac('0x46')](handleError(_0xcf313e,null));};exports[_0x21ac('0x47')]=function(_0x42106b,_0x3524e0){var _0x570612={'raw':![],'where':{'id':_0x42106b[_0x21ac('0x48')]['id']}},_0x183ec6={};_0x183ec6['model']=_[_0x21ac('0x2d')](db['IntegrationReport'][_0x21ac('0x2b')]);_0x183ec6[_0x21ac('0x2e')]=_[_0x21ac('0x2d')](_0x42106b[_0x21ac('0x2e')]);_0x183ec6[_0x21ac('0x2f')]=_[_0x21ac('0x30')](_0x183ec6[_0x21ac('0x2c')],_0x183ec6[_0x21ac('0x2e')]);_0x570612['attributes']=_[_0x21ac('0x30')](_0x183ec6['model'],qs[_0x21ac('0x32')](_0x42106b[_0x21ac('0x2e')][_0x21ac('0x32')]));_0x570612[_0x21ac('0x31')]=_0x570612['attributes'][_0x21ac('0x33')]?_0x570612['attributes']:_0x183ec6[_0x21ac('0x2c')];if(_0x42106b['query']['includeAll']){_0x570612[_0x21ac('0x43')]=[{'all':!![]}];}_0x570612=_[_0x21ac('0x3a')]({},_0x570612,_0x42106b[_0x21ac('0x40')]);return db[_0x21ac('0x2a')][_0x21ac('0x49')](_0x570612)[_0x21ac('0x26')](handleEntityNotFound(_0x3524e0,null))['then'](respondWithResult(_0x3524e0,null))[_0x21ac('0x46')](handleError(_0x3524e0,null));};exports[_0x21ac('0x4a')]=function(_0xec8763,_0x50f591){return db['IntegrationReport'][_0x21ac('0x4a')](_0xec8763[_0x21ac('0x4b')],{})[_0x21ac('0x26')](respondWithResult(_0x50f591,0xc9))['catch'](handleError(_0x50f591,null));};exports[_0x21ac('0x25')]=function(_0x1bd822,_0x4c6f54){if(_0x1bd822['body']['id']){delete _0x1bd822[_0x21ac('0x4b')]['id'];}return db[_0x21ac('0x2a')][_0x21ac('0x49')]({'where':{'id':_0x1bd822[_0x21ac('0x48')]['id']}})[_0x21ac('0x26')](handleEntityNotFound(_0x4c6f54,null))[_0x21ac('0x26')](saveUpdates(_0x1bd822[_0x21ac('0x4b')],null))[_0x21ac('0x26')](respondWithResult(_0x4c6f54,null))[_0x21ac('0x46')](handleError(_0x4c6f54,null));};exports[_0x21ac('0x4c')]=function(_0x9f0178,_0x4873e3){return db[_0x21ac('0x2a')]['find']({'where':{'id':_0x9f0178[_0x21ac('0x48')]['id']}})[_0x21ac('0x26')](handleEntityNotFound(_0x4873e3,null))['then'](removeEntity(_0x4873e3,null))[_0x21ac('0x46')](handleError(_0x4873e3,null));};exports[_0x21ac('0x4d')]=function(_0x34fdfa,_0x5925f4){return db[_0x21ac('0x2a')]['describe']()[_0x21ac('0x26')](respondWithResult(_0x5925f4,null))[_0x21ac('0x46')](handleError(_0x5925f4,null));};
\ No newline at end of file
index 210ec9d..8178019 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3561=['../../config/environment','./integrationReport.attributes','exports','define','report_integration','lodash','../../config/logger','api','moment','bluebird','request-promise','path','rimraf'];(function(_0x1da303,_0x262f10){var _0x4c58c1=function(_0x51aae7){while(--_0x51aae7){_0x1da303['push'](_0x1da303['shift']());}};_0x4c58c1(++_0x262f10);}(_0x3561,0x94));var _0x1356=function(_0x39c055,_0x21cd41){_0x39c055=_0x39c055-0x0;var _0x6a6d17=_0x3561[_0x39c055];return _0x6a6d17;};'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')]('IntegrationReport',attributes,{'tableName':_0x1356('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1c9a=['define','IntegrationReport','report_integration','lodash','util','api','moment','bluebird','request-promise','path','../../config/environment','exports'];(function(_0x11fb3f,_0x500f21){var _0x4d45bf=function(_0x40ca7a){while(--_0x40ca7a){_0x11fb3f['push'](_0x11fb3f['shift']());}};_0x4d45bf(++_0x500f21);}(_0x1c9a,0x1a7));var _0xa1c9=function(_0x8f3027,_0xf98bc7){_0x8f3027=_0x8f3027-0x0;var _0x3f967a=_0x1c9a[_0x8f3027];return _0x3f967a;};'use strict';var _=require(_0xa1c9('0x0'));var util=require(_0xa1c9('0x1'));var logger=require('../../config/logger')(_0xa1c9('0x2'));var moment=require(_0xa1c9('0x3'));var BPromise=require(_0xa1c9('0x4'));var rp=require(_0xa1c9('0x5'));var fs=require('fs');var path=require(_0xa1c9('0x6'));var rimraf=require('rimraf');var config=require(_0xa1c9('0x7'));var attributes=require('./integrationReport.attributes');module[_0xa1c9('0x8')]=function(_0xdd22bf,_0x237862){return _0xdd22bf[_0xa1c9('0x9')](_0xa1c9('0xa'),attributes,{'tableName':_0xa1c9('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a8b4d31..8848cc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a7c=['bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','request','then','info','debug','IntegrationReport,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','IntegrationReport,\x20%s,\x20%s','message','result','catch','lodash','util','moment'];(function(_0x5b2b55,_0x4faab4){var _0x38954e=function(_0x4bce21){while(--_0x4bce21){_0x5b2b55['push'](_0x5b2b55['shift']());}};_0x38954e(++_0x4faab4);}(_0x0a7c,0xb5));var _0xc0a7=function(_0x54cba8,_0x3e5114){_0x54cba8=_0x54cba8-0x0;var _0x324d1f=_0x0a7c[_0x54cba8];return _0x324d1f;};'use strict';var _=require(_0xc0a7('0x0'));var util=require(_0xc0a7('0x1'));var moment=require(_0xc0a7('0x2'));var BPromise=require(_0xc0a7('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xc0a7('0x4'));var db=require(_0xc0a7('0x5'))['db'];var utils=require(_0xc0a7('0x6'));var logger=require(_0xc0a7('0x7'))(_0xc0a7('0x8'));var config=require('../../config/environment');var jayson=require(_0xc0a7('0x9'));var client=jayson[_0xc0a7('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3c69a6,_0x25495e,_0x5a890c){return new BPromise(function(_0x114fb2,_0x46fc65){return client[_0xc0a7('0xb')](_0x3c69a6,_0x5a890c)[_0xc0a7('0xc')](function(_0x39f6ba){logger[_0xc0a7('0xd')]('IntegrationReport,\x20%s,\x20%s',_0x25495e,'request\x20sent');logger[_0xc0a7('0xe')](_0xc0a7('0xf'),_0x25495e,_0xc0a7('0x10'),JSON['stringify'](_0x39f6ba));if(_0x39f6ba[_0xc0a7('0x11')]){if(_0x39f6ba['error'][_0xc0a7('0x12')]===0x1f4){logger[_0xc0a7('0x11')](_0xc0a7('0x13'),_0x25495e,_0x39f6ba['error'][_0xc0a7('0x14')]);return _0x46fc65(_0x39f6ba[_0xc0a7('0x11')]['message']);}logger[_0xc0a7('0x11')](_0xc0a7('0x13'),_0x25495e,_0x39f6ba[_0xc0a7('0x11')][_0xc0a7('0x14')]);return _0x114fb2(_0x39f6ba[_0xc0a7('0x11')]['message']);}else{logger[_0xc0a7('0xd')]('IntegrationReport,\x20%s,\x20%s',_0x25495e,_0xc0a7('0x10'));_0x114fb2(_0x39f6ba[_0xc0a7('0x15')][_0xc0a7('0x14')]);}})[_0xc0a7('0x16')](function(_0x18ee7b){logger['error'](_0xc0a7('0x13'),_0x25495e,_0x18ee7b);_0x46fc65(_0x18ee7b);});});}
\ No newline at end of file
+var _0x7b98=['then','info','request\x20sent','debug','IntegrationReport,\x20%s,\x20%s,\x20%s','stringify','error','IntegrationReport,\x20%s,\x20%s','message','result','util','moment','ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','request'];(function(_0x58a4fe,_0x11d439){var _0x697de2=function(_0xe38c14){while(--_0xe38c14){_0x58a4fe['push'](_0x58a4fe['shift']());}};_0x697de2(++_0x11d439);}(_0x7b98,0x76));var _0x87b9=function(_0x199572,_0x33e667){_0x199572=_0x199572-0x0;var _0x13cfa3=_0x7b98[_0x199572];return _0x13cfa3;};'use strict';var _=require('lodash');var util=require(_0x87b9('0x0'));var moment=require(_0x87b9('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x87b9('0x2'));var db=require('../../mysqldb')['db'];var utils=require(_0x87b9('0x3'));var logger=require('../../config/logger')(_0x87b9('0x4'));var config=require(_0x87b9('0x5'));var jayson=require(_0x87b9('0x6'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x5dc8f2,_0x5a33ab,_0x386ace){return new BPromise(function(_0x4a1ab6,_0x4cacd4){return client[_0x87b9('0x7')](_0x5dc8f2,_0x386ace)[_0x87b9('0x8')](function(_0x236161){logger[_0x87b9('0x9')]('IntegrationReport,\x20%s,\x20%s',_0x5a33ab,_0x87b9('0xa'));logger[_0x87b9('0xb')](_0x87b9('0xc'),_0x5a33ab,'request\x20sent',JSON[_0x87b9('0xd')](_0x236161));if(_0x236161[_0x87b9('0xe')]){if(_0x236161[_0x87b9('0xe')]['code']===0x1f4){logger[_0x87b9('0xe')](_0x87b9('0xf'),_0x5a33ab,_0x236161[_0x87b9('0xe')][_0x87b9('0x10')]);return _0x4cacd4(_0x236161[_0x87b9('0xe')]['message']);}logger['error'](_0x87b9('0xf'),_0x5a33ab,_0x236161[_0x87b9('0xe')][_0x87b9('0x10')]);return _0x4a1ab6(_0x236161[_0x87b9('0xe')]['message']);}else{logger[_0x87b9('0x9')](_0x87b9('0xf'),_0x5a33ab,_0x87b9('0xa'));_0x4a1ab6(_0x236161[_0x87b9('0x11')][_0x87b9('0x10')]);}})['catch'](function(_0x237e78){logger['error']('IntegrationReport,\x20%s,\x20%s',_0x5a33ab,_0x237e78);_0x4cacd4(_0x237e78);});});}
\ No newline at end of file
index 7d5b193..8ea7efe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe98f=['delete','exports','multer','path','express','Router','../../config/environment','get','isAuthenticated','show','getIntervals','create','post','/:id/sub_intervals','addInterval','/:id/sub_intervals/create_many','addIntervals','put','/:id','update'];(function(_0xa78373,_0x56ceb9){var _0x2349fa=function(_0xefb10a){while(--_0xefb10a){_0xa78373['push'](_0xa78373['shift']());}};_0x2349fa(++_0x56ceb9);}(_0xe98f,0xde));var _0xfe98=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0xe98f[_0x4b369d];return _0x571a98;};'use strict';var multer=require(_0xfe98('0x0'));var util=require('util');var path=require(_0xfe98('0x1'));var timeout=require('connect-timeout');var express=require(_0xfe98('0x2'));var router=express[_0xfe98('0x3')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xfe98('0x4'));var controller=require('./interval.controller');router[_0xfe98('0x5')]('/',auth[_0xfe98('0x6')](),controller['index']);router[_0xfe98('0x5')]('/:id',auth[_0xfe98('0x6')](),controller[_0xfe98('0x7')]);router[_0xfe98('0x5')]('/:id/sub_intervals',auth[_0xfe98('0x6')](),controller[_0xfe98('0x8')]);router['post']('/',auth[_0xfe98('0x6')](),controller[_0xfe98('0x9')]);router[_0xfe98('0xa')](_0xfe98('0xb'),auth[_0xfe98('0x6')](),controller[_0xfe98('0xc')]);router['post'](_0xfe98('0xd'),auth[_0xfe98('0x6')](),controller[_0xfe98('0xe')]);router[_0xfe98('0xf')](_0xfe98('0x10'),auth['isAuthenticated'](),controller[_0xfe98('0x11')]);router[_0xfe98('0x12')]('/:id',auth[_0xfe98('0x6')](),controller['destroy']);module[_0xfe98('0x13')]=router;
\ No newline at end of file
+var _0xb6db=['/:id/sub_intervals/create_many','addIntervals','put','update','exports','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./interval.controller','get','isAuthenticated','index','/:id','show','getIntervals','post','/:id/sub_intervals','addInterval'];(function(_0x5bdf69,_0x30770a){var _0x19b8e0=function(_0x589a7e){while(--_0x589a7e){_0x5bdf69['push'](_0x5bdf69['shift']());}};_0x19b8e0(++_0x30770a);}(_0xb6db,0x16a));var _0xbb6d=function(_0xb76fa2,_0x3aa441){_0xb76fa2=_0xb76fa2-0x0;var _0x3916c9=_0xb6db[_0xb76fa2];return _0x3916c9;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xbb6d('0x0'));var timeout=require(_0xbb6d('0x1'));var express=require(_0xbb6d('0x2'));var router=express[_0xbb6d('0x3')]();var auth=require(_0xbb6d('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xbb6d('0x5'));var controller=require(_0xbb6d('0x6'));router[_0xbb6d('0x7')]('/',auth[_0xbb6d('0x8')](),controller[_0xbb6d('0x9')]);router[_0xbb6d('0x7')](_0xbb6d('0xa'),auth[_0xbb6d('0x8')](),controller[_0xbb6d('0xb')]);router[_0xbb6d('0x7')]('/:id/sub_intervals',auth[_0xbb6d('0x8')](),controller[_0xbb6d('0xc')]);router['post']('/',auth[_0xbb6d('0x8')](),controller['create']);router[_0xbb6d('0xd')](_0xbb6d('0xe'),auth[_0xbb6d('0x8')](),controller[_0xbb6d('0xf')]);router[_0xbb6d('0xd')](_0xbb6d('0x10'),auth[_0xbb6d('0x8')](),controller[_0xbb6d('0x11')]);router[_0xbb6d('0x12')](_0xbb6d('0xa'),auth[_0xbb6d('0x8')](),controller[_0xbb6d('0x13')]);router['delete']('/:id',auth[_0xbb6d('0x8')](),controller['destroy']);module[_0xbb6d('0x14')]=router;
\ No newline at end of file
index 7448e0f..97db33d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4cfd=['exports','STRING','sequelize'];(function(_0x1c714c,_0x3305f6){var _0x257971=function(_0x4ab2bc){while(--_0x4ab2bc){_0x1c714c['push'](_0x1c714c['shift']());}};_0x257971(++_0x3305f6);}(_0x4cfd,0x170));var _0xd4cf=function(_0x1b6311,_0x42ec20){_0x1b6311=_0x1b6311-0x0;var _0x25aab6=_0x4cfd[_0x1b6311];return _0x25aab6;};'use strict';var Sequelize=require(_0xd4cf('0x0'));module[_0xd4cf('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xd4cf('0x2')]},'interval':{'type':Sequelize[_0xd4cf('0x2')],'allowNull':!![]}};
\ No newline at end of file
+var _0xe27a=['exports','STRING','sequelize'];(function(_0x502c7d,_0x2f1285){var _0x30b7ed=function(_0x2d92f3){while(--_0x2d92f3){_0x502c7d['push'](_0x502c7d['shift']());}};_0x30b7ed(++_0x2f1285);}(_0xe27a,0x1e2));var _0xae27=function(_0xe58455,_0x2ad5ed){_0xe58455=_0xe58455-0x0;var _0x3d9b8e=_0xe27a[_0xe58455];return _0x3d9b8e;};'use strict';var Sequelize=require(_0xae27('0x0'));module[_0xae27('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xae27('0x2')]},'interval':{'type':Sequelize[_0xae27('0x2')],'allowNull':!![]}};
\ No newline at end of file
index fbb5ae8..415a52d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbc5b=['key','VIRTUAL','field','merge','options','includeAll','findAll','rows','catch','show','params','include','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','find','userProfileId','autoAssociation','name','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','IntervalId','findOne','pick','map','getIntervals','addIntervals','transaction','html-pdf','eml-format','rimraf','fast-json-patch','bluebird','mustache','ejs','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','json','count','offset','Content-Range','apply','reject','save','update','then','destroy','get','Intervals','UserProfileResource','end','error','stack','send','index','Interval','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','filter'];(function(_0x54519e,_0x1f2121){var _0xa4d788=function(_0x46cec9){while(--_0x46cec9){_0x54519e['push'](_0x54519e['shift']());}};_0xa4d788(++_0x1f2121);}(_0xbc5b,0x119));var _0xbbc5=function(_0x59ee6f,_0x450239){_0x59ee6f=_0x59ee6f-0x0;var _0x4c0979=_0xbc5b[_0x59ee6f];return _0x4c0979;};'use strict';var pdf=require(_0xbbc5('0x0'));var emlformat=require(_0xbbc5('0x1'));var rimraf=require(_0xbbc5('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xbbc5('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xbbc5('0x4'));var Mustache=require(_0xbbc5('0x5'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xbbc5('0x6'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xbbc5('0x7'));var jsforce=require(_0xbbc5('0x8'));var deskjs=require(_0xbbc5('0x9'));var toCsv=require(_0xbbc5('0xa'));var querystring=require(_0xbbc5('0xb'));var Papa=require(_0xbbc5('0xc'));var Redis=require('ioredis');var authService=require(_0xbbc5('0xd'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xbbc5('0xe'));var logger=require(_0xbbc5('0xf'))(_0xbbc5('0x10'));var utils=require(_0xbbc5('0x11'));var config=require(_0xbbc5('0x12'));var db=require('../../mysqldb')['db'];var extensions=require('../../components/extensions/rewrite');function respondWithStatusCode(_0x433436,_0x503d1a){_0x503d1a=_0x503d1a||0xcc;return function(_0x18c900){if(_0x18c900){return _0x433436[_0xbbc5('0x13')](_0x503d1a);}return _0x433436[_0xbbc5('0x14')](_0x503d1a)['end']();};}function respondWithResult(_0x1d04c6,_0xde70e6){_0xde70e6=_0xde70e6||0xc8;return function(_0x3404bb){if(_0x3404bb){return _0x1d04c6[_0xbbc5('0x14')](_0xde70e6)[_0xbbc5('0x15')](_0x3404bb);}};}function respondWithFilteredResult(_0x31ba90,_0x286b17){return function(_0x148579){if(_0x148579){var _0x1964f0=_0x148579[_0xbbc5('0x16')],_0x4370c8=_0x286b17[_0xbbc5('0x17')],_0x44e3e1=_0x286b17['offset']+_0x286b17['limit'],_0x1a3717;if(_0x44e3e1>=_0x1964f0){_0x44e3e1=_0x1964f0;_0x1a3717=0xc8;}else{_0x1a3717=0xce;}_0x31ba90['status'](_0x1a3717);return _0x31ba90['set'](_0xbbc5('0x18'),_0x4370c8+'-'+_0x44e3e1+'/'+_0x1964f0)['json'](_0x148579);}return null;};}function patchUpdates(_0x271c8d){return function(_0x29680f){try{jsonpatch[_0xbbc5('0x19')](_0x29680f,_0x271c8d,!![]);}catch(_0x58176c){return BPromise[_0xbbc5('0x1a')](_0x58176c);}return _0x29680f[_0xbbc5('0x1b')]();};}function saveUpdates(_0x2e1470,_0x83fb8d){return function(_0x259ca6){if(_0x259ca6){return _0x259ca6[_0xbbc5('0x1c')](_0x2e1470)[_0xbbc5('0x1d')](function(_0x446e7b){return _0x446e7b;});}return null;};}function removeEntity(_0x1b9e7d,_0x147833){return function(_0x4a133e){if(_0x4a133e){return _0x4a133e[_0xbbc5('0x1e')]()[_0xbbc5('0x1d')](function(){var _0x3aaf48=_0x4a133e[_0xbbc5('0x1f')]({'plain':!![]});var _0x2892e2=_0xbbc5('0x20');return db[_0xbbc5('0x21')]['destroy']({'where':{'type':_0x2892e2,'resourceId':_0x3aaf48['id']}})[_0xbbc5('0x1d')](function(){return _0x4a133e;});})[_0xbbc5('0x1d')](function(){_0x1b9e7d[_0xbbc5('0x14')](0xcc)[_0xbbc5('0x22')]();});}};}function handleEntityNotFound(_0x2807ca,_0x26bd05){return function(_0x53e5b0){if(!_0x53e5b0){_0x2807ca[_0xbbc5('0x13')](0x194);}return _0x53e5b0;};}function handleError(_0x5a12a5,_0x3f576f){_0x3f576f=_0x3f576f||0x1f4;return function(_0x4117f0){logger[_0xbbc5('0x23')](_0x4117f0[_0xbbc5('0x24')]);if(_0x4117f0['name']){delete _0x4117f0['name'];}_0x5a12a5[_0xbbc5('0x14')](_0x3f576f)[_0xbbc5('0x25')](_0x4117f0);};}exports[_0xbbc5('0x26')]=function(_0x506a6a,_0x121700){var _0x2f0e88={},_0x538abf={},_0x29d5dc={'count':0x0,'rows':[]};var _0x2e7606=db[_0xbbc5('0x27')][_0xbbc5('0x28')];_0x538abf['model']=_[_0xbbc5('0x29')](_0x2e7606);_0x538abf['query']=_['keys'](_0x506a6a[_0xbbc5('0x2a')]);_0x538abf[_0xbbc5('0x2b')]=_[_0xbbc5('0x2c')](_0x538abf[_0xbbc5('0x2d')],_0x538abf[_0xbbc5('0x2a')]);_0x2f0e88[_0xbbc5('0x2e')]=_[_0xbbc5('0x2c')](_0x538abf[_0xbbc5('0x2d')],qs[_0xbbc5('0x2f')](_0x506a6a['query'][_0xbbc5('0x2f')]));_0x2f0e88[_0xbbc5('0x2e')]=_0x2f0e88[_0xbbc5('0x2e')][_0xbbc5('0x30')]?_0x2f0e88[_0xbbc5('0x2e')]:_0x538abf[_0xbbc5('0x2d')];if(!_0x506a6a[_0xbbc5('0x2a')][_0xbbc5('0x31')](_0xbbc5('0x32'))){_0x2f0e88['limit']=qs[_0xbbc5('0x33')](_0x506a6a[_0xbbc5('0x2a')][_0xbbc5('0x33')]);_0x2f0e88[_0xbbc5('0x17')]=qs[_0xbbc5('0x17')](_0x506a6a[_0xbbc5('0x2a')][_0xbbc5('0x17')]);}_0x2f0e88['order']=qs[_0xbbc5('0x34')](_0x506a6a[_0xbbc5('0x2a')]['sort']);_0x2f0e88[_0xbbc5('0x35')]=qs[_0xbbc5('0x2b')](_['pick'](_0x506a6a['query'],_0x538abf[_0xbbc5('0x2b')]));if(_0x506a6a[_0xbbc5('0x2a')][_0xbbc5('0x36')]){_0x2f0e88[_0xbbc5('0x35')]=_['merge'](_0x2f0e88[_0xbbc5('0x35')],{'$or':_['map'](_0x2e7606,function(_0x56dff2){if(_0x56dff2['type'][_0xbbc5('0x37')]!==_0xbbc5('0x38')){var _0x5f6833={};_0x5f6833[_0x56dff2[_0xbbc5('0x39')]]={'$like':'%'+_0x506a6a[_0xbbc5('0x2a')][_0xbbc5('0x36')]+'%'};return _0x5f6833;}})});}_0x2f0e88=_[_0xbbc5('0x3a')]({},_0x2f0e88,_0x506a6a[_0xbbc5('0x3b')]);var _0x368bcd={'where':_0x2f0e88['where']};return db[_0xbbc5('0x27')][_0xbbc5('0x16')](_0x368bcd)[_0xbbc5('0x1d')](function(_0xaddb1d){_0x29d5dc['count']=_0xaddb1d;if(_0x506a6a[_0xbbc5('0x2a')][_0xbbc5('0x3c')]){_0x2f0e88['include']=[{'all':!![]}];}return db[_0xbbc5('0x27')][_0xbbc5('0x3d')](_0x2f0e88);})[_0xbbc5('0x1d')](function(_0xdd1a33){_0x29d5dc[_0xbbc5('0x3e')]=_0xdd1a33;return _0x29d5dc;})[_0xbbc5('0x1d')](respondWithFilteredResult(_0x121700,_0x2f0e88))[_0xbbc5('0x3f')](handleError(_0x121700,null));};exports[_0xbbc5('0x40')]=function(_0x545aeb,_0x30ef65){var _0x50b48c={'raw':!![],'where':{'id':_0x545aeb[_0xbbc5('0x41')]['id']}},_0x54db62={};_0x54db62[_0xbbc5('0x2d')]=_[_0xbbc5('0x29')](db['Interval'][_0xbbc5('0x28')]);_0x54db62['query']=_['keys'](_0x545aeb['query']);_0x54db62[_0xbbc5('0x2b')]=_['intersection'](_0x54db62[_0xbbc5('0x2d')],_0x54db62[_0xbbc5('0x2a')]);_0x50b48c['attributes']=_['intersection'](_0x54db62[_0xbbc5('0x2d')],qs[_0xbbc5('0x2f')](_0x545aeb[_0xbbc5('0x2a')][_0xbbc5('0x2f')]));_0x50b48c['attributes']=_0x50b48c[_0xbbc5('0x2e')][_0xbbc5('0x30')]?_0x50b48c[_0xbbc5('0x2e')]:_0x54db62[_0xbbc5('0x2d')];if(_0x545aeb[_0xbbc5('0x2a')][_0xbbc5('0x3c')]){_0x50b48c[_0xbbc5('0x42')]=[{'all':!![]}];}_0x50b48c=_[_0xbbc5('0x3a')]({},_0x50b48c,_0x545aeb[_0xbbc5('0x3b')]);return db[_0xbbc5('0x27')]['find'](_0x50b48c)[_0xbbc5('0x1d')](handleEntityNotFound(_0x30ef65,null))['then'](respondWithResult(_0x30ef65,null))['catch'](handleError(_0x30ef65,null));};exports['create']=function(_0x3fa46e,_0x1bfe74){return db[_0xbbc5('0x27')][_0xbbc5('0x43')](_0x3fa46e[_0xbbc5('0x44')],{})[_0xbbc5('0x1d')](function(_0x471759){var _0x521d77=_0x3fa46e['user']['get']({'plain':!![]});if(!_0x521d77)throw new Error(_0xbbc5('0x45'));if(_0x521d77[_0xbbc5('0x46')]==='user'){var _0x93bf32=_0x471759[_0xbbc5('0x1f')]({'plain':!![]});var _0xdfbde8=_0xbbc5('0x20');return db[_0xbbc5('0x47')][_0xbbc5('0x48')]({'where':{'name':_0xdfbde8,'userProfileId':_0x521d77[_0xbbc5('0x49')]},'raw':!![]})[_0xbbc5('0x1d')](function(_0x4c7106){if(_0x4c7106&&_0x4c7106[_0xbbc5('0x4a')]===0x0){return db['UserProfileResource'][_0xbbc5('0x43')]({'name':_0x93bf32[_0xbbc5('0x4b')],'resourceId':_0x93bf32['id'],'type':_0x4c7106[_0xbbc5('0x4b')],'sectionId':_0x4c7106['id']},{})[_0xbbc5('0x1d')](function(){return _0x471759;});}else{return _0x471759;}})[_0xbbc5('0x3f')](function(_0x1a40d6){logger['error'](_0xbbc5('0x4c'),_0x1a40d6);throw _0x1a40d6;});}return _0x471759;})[_0xbbc5('0x1d')](respondWithResult(_0x1bfe74,0xc9))[_0xbbc5('0x3f')](handleError(_0x1bfe74,null));};exports[_0xbbc5('0x1c')]=function(_0x66b165,_0x5616f3){if(_0x66b165[_0xbbc5('0x44')]['id']){delete _0x66b165[_0xbbc5('0x44')]['id'];}return db[_0xbbc5('0x27')]['find']({'where':{'id':_0x66b165['params']['id']}})[_0xbbc5('0x1d')](handleEntityNotFound(_0x5616f3,null))[_0xbbc5('0x1d')](saveUpdates(_0x66b165[_0xbbc5('0x44')],null))[_0xbbc5('0x1d')](respondWithResult(_0x5616f3,null))[_0xbbc5('0x3f')](handleError(_0x5616f3,null));};exports[_0xbbc5('0x1e')]=function(_0x418ad8,_0xc6fe42){return db['Interval'][_0xbbc5('0x48')]({'where':{'id':_0x418ad8['params']['id']}})[_0xbbc5('0x1d')](handleEntityNotFound(_0xc6fe42,null))[_0xbbc5('0x1d')](removeEntity(_0xc6fe42,null))[_0xbbc5('0x3f')](handleError(_0xc6fe42,null));};exports['addInterval']=function(_0xb29491,_0x515c3b,_0x143623){if(_0xb29491[_0xbbc5('0x44')]['id']){delete _0xb29491[_0xbbc5('0x44')]['id'];}return db['Interval']['find']({'where':{'id':_0xb29491['params']['id']}})[_0xbbc5('0x1d')](handleEntityNotFound(_0x515c3b,null))[_0xbbc5('0x1d')](function(_0x5bc853){if(_0x5bc853){_0xb29491[_0xbbc5('0x44')][_0xbbc5('0x4d')]=_0x5bc853['id'];return db[_0xbbc5('0x27')][_0xbbc5('0x43')](_0xb29491[_0xbbc5('0x44')]);}})[_0xbbc5('0x1d')](respondWithResult(_0x515c3b,null))[_0xbbc5('0x3f')](handleError(_0x515c3b,null));};exports['getIntervals']=function(_0x31a932,_0x229eca,_0x3e6dc5){var _0x22e28b={};var _0x1d7627={};var _0x196285;var _0x281cb7;return db[_0xbbc5('0x27')][_0xbbc5('0x4e')]({'where':{'id':_0x31a932[_0xbbc5('0x41')]['id']}})[_0xbbc5('0x1d')](handleEntityNotFound(_0x229eca,null))[_0xbbc5('0x1d')](function(_0x26b035){if(_0x26b035){_0x196285=_0x26b035;_0x1d7627[_0xbbc5('0x2d')]=_['keys'](db[_0xbbc5('0x27')][_0xbbc5('0x28')]);_0x1d7627[_0xbbc5('0x2a')]=_[_0xbbc5('0x29')](_0x31a932[_0xbbc5('0x2a')]);_0x1d7627[_0xbbc5('0x2b')]=_[_0xbbc5('0x2c')](_0x1d7627[_0xbbc5('0x2d')],_0x1d7627[_0xbbc5('0x2a')]);_0x22e28b['attributes']=_[_0xbbc5('0x2c')](_0x1d7627[_0xbbc5('0x2d')],qs['fields'](_0x31a932[_0xbbc5('0x2a')]['fields']));_0x22e28b['attributes']=_0x22e28b[_0xbbc5('0x2e')][_0xbbc5('0x30')]?_0x22e28b[_0xbbc5('0x2e')]:_0x1d7627[_0xbbc5('0x2d')];_0x22e28b['order']=qs[_0xbbc5('0x34')](_0x31a932[_0xbbc5('0x2a')]['sort']);_0x22e28b[_0xbbc5('0x35')]=qs[_0xbbc5('0x2b')](_[_0xbbc5('0x4f')](_0x31a932[_0xbbc5('0x2a')],_0x1d7627[_0xbbc5('0x2b')]));if(_0x31a932['query'][_0xbbc5('0x36')]){_0x22e28b[_0xbbc5('0x35')]=_['merge'](_0x22e28b[_0xbbc5('0x35')],{'$or':_[_0xbbc5('0x50')](_0x22e28b[_0xbbc5('0x2e')],function(_0x322b46){var _0x40574c={};_0x40574c[_0x322b46]={'$like':'%'+_0x31a932[_0xbbc5('0x2a')][_0xbbc5('0x36')]+'%'};return _0x40574c;})});}_0x22e28b=_['merge']({},_0x22e28b,_0x31a932[_0xbbc5('0x3b')]);return _0x196285[_0xbbc5('0x51')](_0x22e28b);}})[_0xbbc5('0x1d')](function(_0x412914){if(_0x412914){_0x281cb7=_0x412914[_0xbbc5('0x30')];if(!_0x31a932[_0xbbc5('0x2a')][_0xbbc5('0x31')](_0xbbc5('0x32'))){_0x22e28b['limit']=qs['limit'](_0x31a932[_0xbbc5('0x2a')][_0xbbc5('0x33')]);_0x22e28b[_0xbbc5('0x17')]=qs['offset'](_0x31a932[_0xbbc5('0x2a')][_0xbbc5('0x17')]);}return _0x196285['getIntervals'](_0x22e28b);}})[_0xbbc5('0x1d')](function(_0x472c90){if(_0x472c90){return _0x472c90?{'count':_0x281cb7,'rows':_0x472c90}:null;}})[_0xbbc5('0x1d')](respondWithResult(_0x229eca,null))[_0xbbc5('0x3f')](handleError(_0x229eca,null));};exports[_0xbbc5('0x52')]=function(_0x4e5747,_0x47200c,_0x5e2cb5){return db[_0xbbc5('0x27')][_0xbbc5('0x4e')]({'where':{'id':_0x4e5747[_0xbbc5('0x41')]['id']}})[_0xbbc5('0x1d')](handleEntityNotFound(_0x47200c,null))[_0xbbc5('0x1d')](function(_0x3b7d73){if(_0x3b7d73){return db['sequelize'][_0xbbc5('0x53')](function(_0x2fb952){return db[_0xbbc5('0x27')][_0xbbc5('0x1e')]({'where':{'IntervalId':_0x4e5747[_0xbbc5('0x41')]['id']},'transaction':_0x2fb952})['then'](function(_0x8e8faf){var _0x45de87=_[_0xbbc5('0x50')](_0x4e5747[_0xbbc5('0x44')],function(_0x47acfa){delete _0x47acfa['id'];_0x47acfa[_0xbbc5('0x4d')]=_0x4e5747['params']['id'];return _0x47acfa;});return db[_0xbbc5('0x27')]['bulkCreate'](_0x45de87,{'transaction':_0x2fb952});});})[_0xbbc5('0x1d')](function(){return db[_0xbbc5('0x27')][_0xbbc5('0x3d')]({'where':{'IntervalId':_0x4e5747['params']['id']}});});}})[_0xbbc5('0x1d')](respondWithResult(_0x47200c,null))[_0xbbc5('0x3f')](handleError(_0x47200c,null));};
\ No newline at end of file
+var _0x44a0=['show','params','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Intervals','UserProfileSection','userProfileId','autoAssociation','find','addInterval','IntervalId','getIntervals','order','filter','nolimit','addIntervals','findOne','sequelize','map','html-pdf','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../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','reject','update','then','destroy','get','UserProfileResource','error','stack','name','Interval','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','limit','sort','pick','where','merge','type','field','options','include','findAll','catch'];(function(_0x503564,_0x55867e){var _0x4be9fd=function(_0x41c543){while(--_0x41c543){_0x503564['push'](_0x503564['shift']());}};_0x4be9fd(++_0x55867e);}(_0x44a0,0x16d));var _0x044a=function(_0x31ff80,_0xe64325){_0x31ff80=_0x31ff80-0x0;var _0x2a2e2b=_0x44a0[_0x31ff80];return _0x2a2e2b;};'use strict';var pdf=require(_0x044a('0x0'));var emlformat=require(_0x044a('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x044a('0x2'));var jsonpatch=require(_0x044a('0x3'));var rp=require('request-promise');var moment=require(_0x044a('0x4'));var BPromise=require(_0x044a('0x5'));var Mustache=require(_0x044a('0x6'));var util=require(_0x044a('0x7'));var path=require('path');var sox=require(_0x044a('0x8'));var csv=require(_0x044a('0x9'));var ejs=require(_0x044a('0xa'));var fs=require('fs');var _=require(_0x044a('0xb'));var squel=require(_0x044a('0xc'));var crypto=require(_0x044a('0xd'));var jsforce=require(_0x044a('0xe'));var deskjs=require(_0x044a('0xf'));var toCsv=require(_0x044a('0x9'));var querystring=require(_0x044a('0x10'));var Papa=require(_0x044a('0x11'));var Redis=require('ioredis');var authService=require(_0x044a('0x12'));var qs=require(_0x044a('0x13'));var hardwareService=require(_0x044a('0x14'));var logger=require('../../config/logger')(_0x044a('0x15'));var utils=require(_0x044a('0x16'));var config=require('../../config/environment');var db=require(_0x044a('0x17'))['db'];var extensions=require(_0x044a('0x18'));function respondWithStatusCode(_0x16f43f,_0x21f55a){_0x21f55a=_0x21f55a||0xcc;return function(_0x42492e){if(_0x42492e){return _0x16f43f[_0x044a('0x19')](_0x21f55a);}return _0x16f43f[_0x044a('0x1a')](_0x21f55a)[_0x044a('0x1b')]();};}function respondWithResult(_0x2d3eec,_0x3f8f47){_0x3f8f47=_0x3f8f47||0xc8;return function(_0x1012ff){if(_0x1012ff){return _0x2d3eec[_0x044a('0x1a')](_0x3f8f47)[_0x044a('0x1c')](_0x1012ff);}};}function respondWithFilteredResult(_0x5f1cff,_0x163f8d){return function(_0x46981e){if(_0x46981e){var _0x498c26=_0x46981e[_0x044a('0x1d')],_0x3e132=_0x163f8d[_0x044a('0x1e')],_0x1c0ea9=_0x163f8d[_0x044a('0x1e')]+_0x163f8d['limit'],_0x201e78;if(_0x1c0ea9>=_0x498c26){_0x1c0ea9=_0x498c26;_0x201e78=0xc8;}else{_0x201e78=0xce;}_0x5f1cff[_0x044a('0x1a')](_0x201e78);return _0x5f1cff[_0x044a('0x1f')](_0x044a('0x20'),_0x3e132+'-'+_0x1c0ea9+'/'+_0x498c26)[_0x044a('0x1c')](_0x46981e);}return null;};}function patchUpdates(_0x161515){return function(_0x28d8a4){try{jsonpatch[_0x044a('0x21')](_0x28d8a4,_0x161515,!![]);}catch(_0xeb388d){return BPromise[_0x044a('0x22')](_0xeb388d);}return _0x28d8a4['save']();};}function saveUpdates(_0x2da7a7,_0x4ab33e){return function(_0x593c4d){if(_0x593c4d){return _0x593c4d[_0x044a('0x23')](_0x2da7a7)[_0x044a('0x24')](function(_0x153579){return _0x153579;});}return null;};}function removeEntity(_0x5e2680,_0x3a6115){return function(_0x2eeab9){if(_0x2eeab9){return _0x2eeab9[_0x044a('0x25')]()[_0x044a('0x24')](function(){var _0x43e306=_0x2eeab9[_0x044a('0x26')]({'plain':!![]});var _0x493ac6='Intervals';return db[_0x044a('0x27')][_0x044a('0x25')]({'where':{'type':_0x493ac6,'resourceId':_0x43e306['id']}})[_0x044a('0x24')](function(){return _0x2eeab9;});})['then'](function(){_0x5e2680[_0x044a('0x1a')](0xcc)[_0x044a('0x1b')]();});}};}function handleEntityNotFound(_0x16e6a6,_0x357d54){return function(_0x4f92c1){if(!_0x4f92c1){_0x16e6a6['sendStatus'](0x194);}return _0x4f92c1;};}function handleError(_0x32ffc4,_0x3ff93){_0x3ff93=_0x3ff93||0x1f4;return function(_0x21ba9c){logger[_0x044a('0x28')](_0x21ba9c[_0x044a('0x29')]);if(_0x21ba9c[_0x044a('0x2a')]){delete _0x21ba9c[_0x044a('0x2a')];}_0x32ffc4[_0x044a('0x1a')](_0x3ff93)['send'](_0x21ba9c);};}exports['index']=function(_0x596a1a,_0x19f58a){var _0x3f0ec7={},_0x2f6a45={},_0x3379a2={'count':0x0,'rows':[]};var _0x34e0cf=db[_0x044a('0x2b')][_0x044a('0x2c')];_0x2f6a45[_0x044a('0x2d')]=_[_0x044a('0x2e')](_0x34e0cf);_0x2f6a45[_0x044a('0x2f')]=_['keys'](_0x596a1a[_0x044a('0x2f')]);_0x2f6a45[_0x044a('0x30')]=_[_0x044a('0x31')](_0x2f6a45[_0x044a('0x2d')],_0x2f6a45[_0x044a('0x2f')]);_0x3f0ec7[_0x044a('0x32')]=_[_0x044a('0x31')](_0x2f6a45[_0x044a('0x2d')],qs[_0x044a('0x33')](_0x596a1a[_0x044a('0x2f')]['fields']));_0x3f0ec7[_0x044a('0x32')]=_0x3f0ec7[_0x044a('0x32')][_0x044a('0x34')]?_0x3f0ec7[_0x044a('0x32')]:_0x2f6a45['model'];if(!_0x596a1a[_0x044a('0x2f')][_0x044a('0x35')]('nolimit')){_0x3f0ec7['limit']=qs['limit'](_0x596a1a['query'][_0x044a('0x36')]);_0x3f0ec7[_0x044a('0x1e')]=qs[_0x044a('0x1e')](_0x596a1a[_0x044a('0x2f')]['offset']);}_0x3f0ec7['order']=qs[_0x044a('0x37')](_0x596a1a['query'][_0x044a('0x37')]);_0x3f0ec7['where']=qs[_0x044a('0x30')](_[_0x044a('0x38')](_0x596a1a[_0x044a('0x2f')],_0x2f6a45[_0x044a('0x30')]));if(_0x596a1a['query']['filter']){_0x3f0ec7[_0x044a('0x39')]=_[_0x044a('0x3a')](_0x3f0ec7[_0x044a('0x39')],{'$or':_['map'](_0x34e0cf,function(_0x389d15){if(_0x389d15[_0x044a('0x3b')]['key']!=='VIRTUAL'){var _0x3fff90={};_0x3fff90[_0x389d15[_0x044a('0x3c')]]={'$like':'%'+_0x596a1a['query']['filter']+'%'};return _0x3fff90;}})});}_0x3f0ec7=_[_0x044a('0x3a')]({},_0x3f0ec7,_0x596a1a[_0x044a('0x3d')]);var _0x43c7f1={'where':_0x3f0ec7['where']};return db[_0x044a('0x2b')][_0x044a('0x1d')](_0x43c7f1)[_0x044a('0x24')](function(_0x510334){_0x3379a2['count']=_0x510334;if(_0x596a1a['query']['includeAll']){_0x3f0ec7[_0x044a('0x3e')]=[{'all':!![]}];}return db['Interval'][_0x044a('0x3f')](_0x3f0ec7);})[_0x044a('0x24')](function(_0x1c7414){_0x3379a2['rows']=_0x1c7414;return _0x3379a2;})[_0x044a('0x24')](respondWithFilteredResult(_0x19f58a,_0x3f0ec7))[_0x044a('0x40')](handleError(_0x19f58a,null));};exports[_0x044a('0x41')]=function(_0x2bb101,_0x43692b){var _0x55fa1a={'raw':!![],'where':{'id':_0x2bb101[_0x044a('0x42')]['id']}},_0x5ed321={};_0x5ed321['model']=_[_0x044a('0x2e')](db[_0x044a('0x2b')]['rawAttributes']);_0x5ed321['query']=_[_0x044a('0x2e')](_0x2bb101[_0x044a('0x2f')]);_0x5ed321['filters']=_[_0x044a('0x31')](_0x5ed321[_0x044a('0x2d')],_0x5ed321[_0x044a('0x2f')]);_0x55fa1a[_0x044a('0x32')]=_['intersection'](_0x5ed321['model'],qs[_0x044a('0x33')](_0x2bb101[_0x044a('0x2f')][_0x044a('0x33')]));_0x55fa1a[_0x044a('0x32')]=_0x55fa1a[_0x044a('0x32')][_0x044a('0x34')]?_0x55fa1a[_0x044a('0x32')]:_0x5ed321[_0x044a('0x2d')];if(_0x2bb101[_0x044a('0x2f')]['includeAll']){_0x55fa1a[_0x044a('0x3e')]=[{'all':!![]}];}_0x55fa1a=_['merge']({},_0x55fa1a,_0x2bb101[_0x044a('0x3d')]);return db['Interval']['find'](_0x55fa1a)['then'](handleEntityNotFound(_0x43692b,null))[_0x044a('0x24')](respondWithResult(_0x43692b,null))[_0x044a('0x40')](handleError(_0x43692b,null));};exports['create']=function(_0x37d8c6,_0x5b0364){return db[_0x044a('0x2b')][_0x044a('0x43')](_0x37d8c6[_0x044a('0x44')],{})[_0x044a('0x24')](function(_0x4f3c3d){var _0x4892b4=_0x37d8c6['user']['get']({'plain':!![]});if(!_0x4892b4)throw new Error(_0x044a('0x45'));if(_0x4892b4[_0x044a('0x46')]==='user'){var _0x5ed982=_0x4f3c3d[_0x044a('0x26')]({'plain':!![]});var _0x65f111=_0x044a('0x47');return db[_0x044a('0x48')]['find']({'where':{'name':_0x65f111,'userProfileId':_0x4892b4[_0x044a('0x49')]},'raw':!![]})[_0x044a('0x24')](function(_0x50c9d0){if(_0x50c9d0&&_0x50c9d0[_0x044a('0x4a')]===0x0){return db[_0x044a('0x27')][_0x044a('0x43')]({'name':_0x5ed982['name'],'resourceId':_0x5ed982['id'],'type':_0x50c9d0['name'],'sectionId':_0x50c9d0['id']},{})['then'](function(){return _0x4f3c3d;});}else{return _0x4f3c3d;}})[_0x044a('0x40')](function(_0x1f1ea1){logger[_0x044a('0x28')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x1f1ea1);throw _0x1f1ea1;});}return _0x4f3c3d;})[_0x044a('0x24')](respondWithResult(_0x5b0364,0xc9))[_0x044a('0x40')](handleError(_0x5b0364,null));};exports['update']=function(_0x450464,_0x11b1b3){if(_0x450464[_0x044a('0x44')]['id']){delete _0x450464[_0x044a('0x44')]['id'];}return db['Interval'][_0x044a('0x4b')]({'where':{'id':_0x450464['params']['id']}})[_0x044a('0x24')](handleEntityNotFound(_0x11b1b3,null))['then'](saveUpdates(_0x450464[_0x044a('0x44')],null))['then'](respondWithResult(_0x11b1b3,null))[_0x044a('0x40')](handleError(_0x11b1b3,null));};exports[_0x044a('0x25')]=function(_0x4fa217,_0x22fe73){return db[_0x044a('0x2b')]['find']({'where':{'id':_0x4fa217[_0x044a('0x42')]['id']}})[_0x044a('0x24')](handleEntityNotFound(_0x22fe73,null))['then'](removeEntity(_0x22fe73,null))[_0x044a('0x40')](handleError(_0x22fe73,null));};exports[_0x044a('0x4c')]=function(_0x51a556,_0x308d44,_0x211ba0){if(_0x51a556['body']['id']){delete _0x51a556[_0x044a('0x44')]['id'];}return db[_0x044a('0x2b')]['find']({'where':{'id':_0x51a556[_0x044a('0x42')]['id']}})['then'](handleEntityNotFound(_0x308d44,null))['then'](function(_0x50ab1e){if(_0x50ab1e){_0x51a556[_0x044a('0x44')][_0x044a('0x4d')]=_0x50ab1e['id'];return db[_0x044a('0x2b')]['create'](_0x51a556[_0x044a('0x44')]);}})['then'](respondWithResult(_0x308d44,null))['catch'](handleError(_0x308d44,null));};exports[_0x044a('0x4e')]=function(_0x4cd058,_0x144778,_0x1b6f1e){var _0x4b0a49={};var _0x2f0904={};var _0xc2f56;var _0x2b99c1;return db[_0x044a('0x2b')]['findOne']({'where':{'id':_0x4cd058['params']['id']}})[_0x044a('0x24')](handleEntityNotFound(_0x144778,null))['then'](function(_0x41289b){if(_0x41289b){_0xc2f56=_0x41289b;_0x2f0904[_0x044a('0x2d')]=_['keys'](db['Interval'][_0x044a('0x2c')]);_0x2f0904['query']=_['keys'](_0x4cd058[_0x044a('0x2f')]);_0x2f0904[_0x044a('0x30')]=_['intersection'](_0x2f0904[_0x044a('0x2d')],_0x2f0904[_0x044a('0x2f')]);_0x4b0a49['attributes']=_[_0x044a('0x31')](_0x2f0904['model'],qs[_0x044a('0x33')](_0x4cd058[_0x044a('0x2f')]['fields']));_0x4b0a49['attributes']=_0x4b0a49[_0x044a('0x32')]['length']?_0x4b0a49[_0x044a('0x32')]:_0x2f0904[_0x044a('0x2d')];_0x4b0a49[_0x044a('0x4f')]=qs[_0x044a('0x37')](_0x4cd058[_0x044a('0x2f')][_0x044a('0x37')]);_0x4b0a49[_0x044a('0x39')]=qs[_0x044a('0x30')](_[_0x044a('0x38')](_0x4cd058[_0x044a('0x2f')],_0x2f0904[_0x044a('0x30')]));if(_0x4cd058['query'][_0x044a('0x50')]){_0x4b0a49[_0x044a('0x39')]=_['merge'](_0x4b0a49[_0x044a('0x39')],{'$or':_['map'](_0x4b0a49['attributes'],function(_0x34ddcb){var _0x29d079={};_0x29d079[_0x34ddcb]={'$like':'%'+_0x4cd058[_0x044a('0x2f')][_0x044a('0x50')]+'%'};return _0x29d079;})});}_0x4b0a49=_['merge']({},_0x4b0a49,_0x4cd058[_0x044a('0x3d')]);return _0xc2f56['getIntervals'](_0x4b0a49);}})[_0x044a('0x24')](function(_0x1c62b8){if(_0x1c62b8){_0x2b99c1=_0x1c62b8[_0x044a('0x34')];if(!_0x4cd058[_0x044a('0x2f')]['hasOwnProperty'](_0x044a('0x51'))){_0x4b0a49[_0x044a('0x36')]=qs[_0x044a('0x36')](_0x4cd058['query']['limit']);_0x4b0a49[_0x044a('0x1e')]=qs[_0x044a('0x1e')](_0x4cd058['query']['offset']);}return _0xc2f56['getIntervals'](_0x4b0a49);}})[_0x044a('0x24')](function(_0x5dcad8){if(_0x5dcad8){return _0x5dcad8?{'count':_0x2b99c1,'rows':_0x5dcad8}:null;}})[_0x044a('0x24')](respondWithResult(_0x144778,null))['catch'](handleError(_0x144778,null));};exports[_0x044a('0x52')]=function(_0x32d7ed,_0xd52838,_0x3da4da){return db['Interval'][_0x044a('0x53')]({'where':{'id':_0x32d7ed[_0x044a('0x42')]['id']}})[_0x044a('0x24')](handleEntityNotFound(_0xd52838,null))[_0x044a('0x24')](function(_0x2a5d67){if(_0x2a5d67){return db[_0x044a('0x54')]['transaction'](function(_0x15331c){return db[_0x044a('0x2b')][_0x044a('0x25')]({'where':{'IntervalId':_0x32d7ed['params']['id']},'transaction':_0x15331c})[_0x044a('0x24')](function(_0x123027){var _0x1e636b=_[_0x044a('0x55')](_0x32d7ed['body'],function(_0x13b259){delete _0x13b259['id'];_0x13b259['IntervalId']=_0x32d7ed[_0x044a('0x42')]['id'];return _0x13b259;});return db[_0x044a('0x2b')]['bulkCreate'](_0x1e636b,{'transaction':_0x15331c});});})[_0x044a('0x24')](function(){return db[_0x044a('0x2b')][_0x044a('0x3f')]({'where':{'IntervalId':_0x32d7ed['params']['id']}});});}})[_0x044a('0x24')](respondWithResult(_0xd52838,null))[_0x044a('0x40')](handleError(_0xd52838,null));};
\ No newline at end of file
index 73498be..649dc71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb42a=['Interval','tools_intervals','rewrite','lodash','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./interval.attributes','../../components/extensions/rewrite','define'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0xb42a,0x1d4));var _0xab42=function(_0x493b56,_0x14c55a){_0x493b56=_0x493b56-0x0;var _0x2a64e7=_0xb42a[_0x493b56];return _0x2a64e7;};'use strict';var _=require(_0xab42('0x0'));var util=require(_0xab42('0x1'));var logger=require(_0xab42('0x2'))(_0xab42('0x3'));var moment=require(_0xab42('0x4'));var BPromise=require(_0xab42('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xab42('0x6'));var rimraf=require(_0xab42('0x7'));var config=require(_0xab42('0x8'));var attributes=require(_0xab42('0x9'));var extensions=require(_0xab42('0xa'));module['exports']=function(_0x3fa741,_0x457344){return _0x3fa741[_0xab42('0xb')](_0xab42('0xc'),attributes,{'tableName':_0xab42('0xd'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x4597d2,_0x5ef073){extensions[_0xab42('0xe')](_0x3fa741,_0x4597d2);},'afterBulkCreate':function(_0x5e6b6a,_0x5aaf4c,_0x2d6f43){_0x2d6f43();extensions[_0xab42('0xe')](_0x3fa741,_0x5e6b6a[0x0]);},'afterUpdate':function(_0x12abaf,_0x3b0b70){extensions[_0xab42('0xe')](_0x3fa741,_0x12abaf);},'afterDestroy':function(_0x2f9a86,_0x382d19){extensions[_0xab42('0xe')](_0x3fa741,_0x2f9a86);}}});};
\ No newline at end of file
+var _0x677e=['exports','Interval','tools_intervals','rewrite','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./interval.attributes','../../components/extensions/rewrite'];(function(_0x24ecae,_0x102ad4){var _0x3a2b26=function(_0x387be7){while(--_0x387be7){_0x24ecae['push'](_0x24ecae['shift']());}};_0x3a2b26(++_0x102ad4);}(_0x677e,0xf4));var _0xe677=function(_0x15942a,_0x13b58c){_0x15942a=_0x15942a-0x0;var _0x36a9fb=_0x677e[_0x15942a];return _0x36a9fb;};'use strict';var _=require(_0xe677('0x0'));var util=require(_0xe677('0x1'));var logger=require(_0xe677('0x2'))(_0xe677('0x3'));var moment=require(_0xe677('0x4'));var BPromise=require(_0xe677('0x5'));var rp=require(_0xe677('0x6'));var fs=require('fs');var path=require(_0xe677('0x7'));var rimraf=require(_0xe677('0x8'));var config=require(_0xe677('0x9'));var attributes=require(_0xe677('0xa'));var extensions=require(_0xe677('0xb'));module[_0xe677('0xc')]=function(_0x574908,_0x586b51){return _0x574908['define'](_0xe677('0xd'),attributes,{'tableName':_0xe677('0xe'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x187a17,_0x31871a){extensions[_0xe677('0xf')](_0x574908,_0x187a17);},'afterBulkCreate':function(_0x281897,_0x48eecf,_0x57308d){_0x57308d();extensions[_0xe677('0xf')](_0x574908,_0x281897[0x0]);},'afterUpdate':function(_0x550c9b,_0x5a051d){extensions[_0xe677('0xf')](_0x574908,_0x550c9b);},'afterDestroy':function(_0x3674d2,_0x305875){extensions[_0xe677('0xf')](_0x574908,_0x3674d2);}}});};
\ No newline at end of file
index 9ca8688..fbbac12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca9e=['message','info','catch','Interval','options','where','attributes','limit','include','map','model','GetInterval','ShowInterval','raw','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','Interval,\x20%s,\x20%s','request\x20sent','debug','Interval,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x1d6a82,_0x37c315){var _0x5834ac=function(_0x2402ba){while(--_0x2402ba){_0x1d6a82['push'](_0x1d6a82['shift']());}};_0x5834ac(++_0x37c315);}(_0xca9e,0x136));var _0xeca9=function(_0x2ecb59,_0x56c0b2){_0x2ecb59=_0x2ecb59-0x0;var _0x146a17=_0xca9e[_0x2ecb59];return _0x146a17;};'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);});});}exports['GetInterval']=function(_0x517060){var _0x579421=this;return new Promise(function(_0x132008,_0x304f8f){return db[_0xeca9('0x1a')]['findAll']({'raw':_0x517060[_0xeca9('0x1b')]?_0x517060['options']['raw']===undefined?!![]:![]:!![],'where':_0x517060[_0xeca9('0x1b')]?_0x517060['options'][_0xeca9('0x1c')]||null:null,'attributes':_0x517060[_0xeca9('0x1b')]?_0x517060['options'][_0xeca9('0x1d')]||null:null,'limit':_0x517060[_0xeca9('0x1b')]?_0x517060['options'][_0xeca9('0x1e')]||null:null,'include':_0x517060['options']?_0x517060[_0xeca9('0x1b')][_0xeca9('0x1f')]?_[_0xeca9('0x20')](_0x517060['options'][_0xeca9('0x1f')],function(_0x466883){return{'model':db[_0x466883['model']],'as':_0x466883['as'],'attributes':_0x466883[_0xeca9('0x1d')],'include':_0x466883[_0xeca9('0x1f')]?_[_0xeca9('0x20')](_0x466883[_0xeca9('0x1f')],function(_0x498f4a){return{'model':db[_0x498f4a[_0xeca9('0x21')]],'as':_0x498f4a['as'],'attributes':_0x498f4a['attributes'],'include':_0x498f4a[_0xeca9('0x1f')]?_[_0xeca9('0x20')](_0x498f4a[_0xeca9('0x1f')],function(_0x3e41df){return{'model':db[_0x3e41df[_0xeca9('0x21')]],'as':_0x3e41df['as'],'attributes':_0x3e41df[_0xeca9('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xeca9('0xf')](function(_0x7fcf4b){logger[_0xeca9('0x18')](_0xeca9('0x22'),_0x517060);logger[_0xeca9('0x12')](_0xeca9('0x22'),_0x517060,JSON[_0xeca9('0x14')](_0x7fcf4b));_0x132008(_0x7fcf4b);})[_0xeca9('0x19')](function(_0x8d9a8d){logger['error']('GetInterval',_0x8d9a8d['message'],_0x517060);_0x304f8f(_0x579421[_0xeca9('0x15')](0x1f4,_0x8d9a8d['message']));});});};exports[_0xeca9('0x23')]=function(_0x1993ba){var _0x2898dc=this;return new Promise(function(_0x36e75e,_0x24e96e){return db[_0xeca9('0x1a')]['find']({'raw':_0x1993ba[_0xeca9('0x1b')]?_0x1993ba['options'][_0xeca9('0x24')]===undefined?!![]:![]:!![],'where':_0x1993ba[_0xeca9('0x1b')]?_0x1993ba[_0xeca9('0x1b')]['where']||null:null,'attributes':_0x1993ba[_0xeca9('0x1b')]?_0x1993ba[_0xeca9('0x1b')][_0xeca9('0x1d')]||null:null,'include':_0x1993ba[_0xeca9('0x1b')]?_0x1993ba['options'][_0xeca9('0x1f')]?_['map'](_0x1993ba[_0xeca9('0x1b')][_0xeca9('0x1f')],function(_0x20c89d){return{'model':db[_0x20c89d[_0xeca9('0x21')]],'as':_0x20c89d['as'],'attributes':_0x20c89d[_0xeca9('0x1d')],'include':_0x20c89d[_0xeca9('0x1f')]?_['map'](_0x20c89d[_0xeca9('0x1f')],function(_0x2424df){return{'model':db[_0x2424df[_0xeca9('0x21')]],'as':_0x2424df['as'],'attributes':_0x2424df[_0xeca9('0x1d')],'include':_0x2424df[_0xeca9('0x1f')]?_[_0xeca9('0x20')](_0x2424df[_0xeca9('0x1f')],function(_0x54d9cf){return{'model':db[_0x54d9cf[_0xeca9('0x21')]],'as':_0x54d9cf['as'],'attributes':_0x54d9cf[_0xeca9('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xeca9('0xf')](function(_0x178bd4){logger[_0xeca9('0x18')](_0xeca9('0x23'),_0x1993ba);logger['debug'](_0xeca9('0x23'),_0x1993ba,JSON['stringify'](_0x178bd4));_0x36e75e(_0x178bd4);})[_0xeca9('0x19')](function(_0x4f7f25){logger[_0xeca9('0x15')](_0xeca9('0x23'),_0x4f7f25['message'],_0x1993ba);_0x24e96e(_0x2898dc[_0xeca9('0x15')](0x1f4,_0x4f7f25['message']));});});};
\ No newline at end of file
+var _0x84ab=['limit','include','map','model','ShowInterval','find','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','then','info','Interval,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','GetInterval','Interval','findAll','options','raw','where','attributes'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x84ab,0x12f));var _0xb84a=function(_0x3c6dce,_0x5424dd){_0x3c6dce=_0x3c6dce-0x0;var _0x1450e9=_0x84ab[_0x3c6dce];return _0x1450e9;};'use strict';var _=require(_0xb84a('0x0'));var util=require(_0xb84a('0x1'));var moment=require(_0xb84a('0x2'));var BPromise=require(_0xb84a('0x3'));var rs=require(_0xb84a('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xb84a('0x5'))['db'];var utils=require(_0xb84a('0x6'));var logger=require('../../config/logger')(_0xb84a('0x7'));var config=require(_0xb84a('0x8'));var jayson=require(_0xb84a('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x4dc496,_0xd445b5,_0x4fac4d){return new BPromise(function(_0x3e9086,_0x8d9dbe){return client['request'](_0x4dc496,_0x4fac4d)[_0xb84a('0xa')](function(_0x525cb7){logger[_0xb84a('0xb')](_0xb84a('0xc'),_0xd445b5,_0xb84a('0xd'));logger['debug']('Interval,\x20%s,\x20%s,\x20%s',_0xd445b5,'request\x20sent',JSON[_0xb84a('0xe')](_0x525cb7));if(_0x525cb7[_0xb84a('0xf')]){if(_0x525cb7[_0xb84a('0xf')][_0xb84a('0x10')]===0x1f4){logger[_0xb84a('0xf')]('Interval,\x20%s,\x20%s',_0xd445b5,_0x525cb7[_0xb84a('0xf')][_0xb84a('0x11')]);return _0x8d9dbe(_0x525cb7[_0xb84a('0xf')][_0xb84a('0x11')]);}logger[_0xb84a('0xf')](_0xb84a('0xc'),_0xd445b5,_0x525cb7[_0xb84a('0xf')][_0xb84a('0x11')]);return _0x3e9086(_0x525cb7[_0xb84a('0xf')][_0xb84a('0x11')]);}else{logger[_0xb84a('0xb')](_0xb84a('0xc'),_0xd445b5,'request\x20sent');_0x3e9086(_0x525cb7[_0xb84a('0x12')][_0xb84a('0x11')]);}})[_0xb84a('0x13')](function(_0x3c0b54){logger[_0xb84a('0xf')](_0xb84a('0xc'),_0xd445b5,_0x3c0b54);_0x8d9dbe(_0x3c0b54);});});}exports[_0xb84a('0x14')]=function(_0x34d82f){var _0x28fe46=this;return new Promise(function(_0x3f7437,_0x11d5a0){return db[_0xb84a('0x15')][_0xb84a('0x16')]({'raw':_0x34d82f[_0xb84a('0x17')]?_0x34d82f['options'][_0xb84a('0x18')]===undefined?!![]:![]:!![],'where':_0x34d82f[_0xb84a('0x17')]?_0x34d82f['options'][_0xb84a('0x19')]||null:null,'attributes':_0x34d82f[_0xb84a('0x17')]?_0x34d82f[_0xb84a('0x17')][_0xb84a('0x1a')]||null:null,'limit':_0x34d82f['options']?_0x34d82f['options'][_0xb84a('0x1b')]||null:null,'include':_0x34d82f[_0xb84a('0x17')]?_0x34d82f[_0xb84a('0x17')][_0xb84a('0x1c')]?_[_0xb84a('0x1d')](_0x34d82f[_0xb84a('0x17')][_0xb84a('0x1c')],function(_0x21d0d3){return{'model':db[_0x21d0d3[_0xb84a('0x1e')]],'as':_0x21d0d3['as'],'attributes':_0x21d0d3[_0xb84a('0x1a')],'include':_0x21d0d3[_0xb84a('0x1c')]?_[_0xb84a('0x1d')](_0x21d0d3[_0xb84a('0x1c')],function(_0x409df0){return{'model':db[_0x409df0[_0xb84a('0x1e')]],'as':_0x409df0['as'],'attributes':_0x409df0[_0xb84a('0x1a')],'include':_0x409df0[_0xb84a('0x1c')]?_[_0xb84a('0x1d')](_0x409df0[_0xb84a('0x1c')],function(_0xd468c3){return{'model':db[_0xd468c3[_0xb84a('0x1e')]],'as':_0xd468c3['as'],'attributes':_0xd468c3[_0xb84a('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xb84a('0xa')](function(_0x35d1f7){logger[_0xb84a('0xb')](_0xb84a('0x14'),_0x34d82f);logger['debug']('GetInterval',_0x34d82f,JSON[_0xb84a('0xe')](_0x35d1f7));_0x3f7437(_0x35d1f7);})[_0xb84a('0x13')](function(_0x4dab4e){logger[_0xb84a('0xf')](_0xb84a('0x14'),_0x4dab4e['message'],_0x34d82f);_0x11d5a0(_0x28fe46['error'](0x1f4,_0x4dab4e[_0xb84a('0x11')]));});});};exports[_0xb84a('0x1f')]=function(_0x49ba3d){var _0x251778=this;return new Promise(function(_0xba1147,_0x3abc22){return db[_0xb84a('0x15')][_0xb84a('0x20')]({'raw':_0x49ba3d[_0xb84a('0x17')]?_0x49ba3d[_0xb84a('0x17')][_0xb84a('0x18')]===undefined?!![]:![]:!![],'where':_0x49ba3d['options']?_0x49ba3d[_0xb84a('0x17')]['where']||null:null,'attributes':_0x49ba3d['options']?_0x49ba3d[_0xb84a('0x17')][_0xb84a('0x1a')]||null:null,'include':_0x49ba3d['options']?_0x49ba3d['options'][_0xb84a('0x1c')]?_[_0xb84a('0x1d')](_0x49ba3d[_0xb84a('0x17')][_0xb84a('0x1c')],function(_0x3735fb){return{'model':db[_0x3735fb[_0xb84a('0x1e')]],'as':_0x3735fb['as'],'attributes':_0x3735fb[_0xb84a('0x1a')],'include':_0x3735fb[_0xb84a('0x1c')]?_['map'](_0x3735fb[_0xb84a('0x1c')],function(_0xa655da){return{'model':db[_0xa655da[_0xb84a('0x1e')]],'as':_0xa655da['as'],'attributes':_0xa655da[_0xb84a('0x1a')],'include':_0xa655da[_0xb84a('0x1c')]?_[_0xb84a('0x1d')](_0xa655da[_0xb84a('0x1c')],function(_0x5aa2ae){return{'model':db[_0x5aa2ae[_0xb84a('0x1e')]],'as':_0x5aa2ae['as'],'attributes':_0x5aa2ae['attributes']};}):[]};}):[]};}):[]:[]})[_0xb84a('0xa')](function(_0xb93cca){logger[_0xb84a('0xb')]('ShowInterval',_0x49ba3d);logger['debug'](_0xb84a('0x1f'),_0x49ba3d,JSON[_0xb84a('0xe')](_0xb93cca));_0xba1147(_0xb93cca);})[_0xb84a('0x13')](function(_0x2d3e08){logger[_0xb84a('0xf')]('ShowInterval',_0x2d3e08[_0xb84a('0x11')],_0x49ba3d);_0x3abc22(_0x251778[_0xb84a('0xf')](0x1f4,_0x2d3e08['message']));});});};
\ No newline at end of file
index 18343a8..9bef358 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2032=['isAuthenticated','send','Router','../../components/auth/service','./jira.controller'];(function(_0x27d9c6,_0x21f9ae){var _0xda838d=function(_0x6a37f6){while(--_0x6a37f6){_0x27d9c6['push'](_0x27d9c6['shift']());}};_0xda838d(++_0x21f9ae);}(_0x2032,0xd9));var _0x2203=function(_0x5f98af,_0x55793a){_0x5f98af=_0x5f98af-0x0;var _0x51c22c=_0x2032[_0x5f98af];return _0x51c22c;};'use strict';var express=require('express');var router=express[_0x2203('0x0')]();var auth=require(_0x2203('0x1'));var controller=require(_0x2203('0x2'));router['post']('/',auth[_0x2203('0x3')](),controller[_0x2203('0x4')]);module['exports']=router;
\ No newline at end of file
+var _0x2ef3=['./jira.controller','post','isAuthenticated','exports','express','Router','../../components/auth/service'];(function(_0x2cbb64,_0x3005f2){var _0x44870e=function(_0x17ebd3){while(--_0x17ebd3){_0x2cbb64['push'](_0x2cbb64['shift']());}};_0x44870e(++_0x3005f2);}(_0x2ef3,0xba));var _0x32ef=function(_0x517b11,_0x25d468){_0x517b11=_0x517b11-0x0;var _0x5975b8=_0x2ef3[_0x517b11];return _0x5975b8;};'use strict';var express=require(_0x32ef('0x0'));var router=express[_0x32ef('0x1')]();var auth=require(_0x32ef('0x2'));var controller=require(_0x32ef('0x3'));router[_0x32ef('0x4')]('/',auth[_0x32ef('0x5')](),controller['send']);module[_0x32ef('0x6')]=router;
\ No newline at end of file
index 0af9c2a..00fe6be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7e7=['reason','track.xcallymotion.com','POST','toString','base64','setEncoding','utf8','data','end','status','statusCode','json','parse','error','Error\x20during\x20license\x20request.\x20Please\x20contact\x20our\x20license\x20team\x20at\x20license@xcally.com\x20with\x20your\x20request','api.jira','write','openIssue','send','body','headers','x-forwarded-for','connection','remoteAddress','socket','bluebird','../../config/logger','support','key','MOTGUI','\x20from\x20','description','stringify','Bug','fields','customfield_11500','email','customfield_11501','oldToken','customfield_11502','newToken','customfield_11503','name','customfield_11504'];(function(_0x502c7d,_0x2f1285){var _0x30b7ed=function(_0x2d92f3){while(--_0x2d92f3){_0x502c7d['push'](_0x502c7d['shift']());}};_0x30b7ed(++_0x2f1285);}(_0xb7e7,0x121));var _0x7b7e=function(_0x9df060,_0x253d33){_0x9df060=_0x9df060-0x0;var _0x338dfe=_0xb7e7[_0x9df060];return _0x338dfe;};'use strict';var BPromise=require(_0x7b7e('0x0'));var https=require('https');var logger=require(_0x7b7e('0x1'))('api');var USERNAME=_0x7b7e('0x2');var PASSWORD='3eAmWpBVP0';function openIssue(_0x3f5804,_0x556d68){var _0x31d0ed={'fields':{'project':{'key':_0x3f5804[_0x7b7e('0x3')]||_0x7b7e('0x4')},'summary':(_0x3f5804['summary']||'Report')+_0x7b7e('0x5')+_0x3f5804['ip'],'description':_0x3f5804[_0x7b7e('0x6')]||JSON[_0x7b7e('0x7')](_0x3f5804),'issuetype':{'name':_0x3f5804['issuetype']||_0x7b7e('0x8')}}};_0x31d0ed[_0x7b7e('0x9')][_0x7b7e('0xa')]=_0x3f5804[_0x7b7e('0xb')];_0x31d0ed[_0x7b7e('0x9')][_0x7b7e('0xc')]=_0x3f5804[_0x7b7e('0xd')];_0x31d0ed['fields'][_0x7b7e('0xe')]=_0x3f5804[_0x7b7e('0xf')];_0x31d0ed[_0x7b7e('0x9')][_0x7b7e('0x10')]=_0x3f5804[_0x7b7e('0x11')];_0x31d0ed[_0x7b7e('0x9')][_0x7b7e('0x12')]=_0x3f5804[_0x7b7e('0x13')];_0x31d0ed[_0x7b7e('0x9')]['customfield_10102']=_0x3f5804['ip'];var _0x267446={'host':_0x7b7e('0x14'),'port':0x1bb,'path':'/rest/api/2/issue','method':_0x7b7e('0x15'),'timeout':0x4e20,'headers':{'Content-Type':'application/json','Authorization':'Basic\x20'+new Buffer(USERNAME+':'+PASSWORD)[_0x7b7e('0x16')](_0x7b7e('0x17'))}};var _0xf067da=JSON[_0x7b7e('0x7')](_0x31d0ed);var _0x3d2fb2=https['request'](_0x267446,function(_0x51baf6){_0x51baf6[_0x7b7e('0x18')](_0x7b7e('0x19'));var _0x27f999='';_0x51baf6['on'](_0x7b7e('0x1a'),function(_0x2cc400){_0x27f999+=_0x2cc400;});_0x51baf6['on'](_0x7b7e('0x1b'),function(){if(_0x556d68){return _0x556d68[_0x7b7e('0x1c')](_0x51baf6[_0x7b7e('0x1d')])[_0x7b7e('0x1e')](JSON[_0x7b7e('0x1f')](_0x27f999));}});});_0x3d2fb2['on'](_0x7b7e('0x20'),function(_0x14f4fe){if(_0x556d68){return _0x556d68[_0x7b7e('0x1c')](0x1f4)[_0x7b7e('0x1e')]({'errors':[{'message':_0x7b7e('0x21'),'type':_0x7b7e('0x22')}]});}});_0x3d2fb2[_0x7b7e('0x23')](_0xf067da);_0x3d2fb2['end']();}exports[_0x7b7e('0x24')]=openIssue;exports[_0x7b7e('0x25')]=function(_0x24718c,_0x4c0647){_0x24718c[_0x7b7e('0x26')]['ip']=_0x24718c[_0x7b7e('0x27')][_0x7b7e('0x28')]||_0x24718c[_0x7b7e('0x29')][_0x7b7e('0x2a')]||_0x24718c[_0x7b7e('0x2b')][_0x7b7e('0x2a')]||_0x24718c[_0x7b7e('0x29')]['socket']['remoteAddress'];return openIssue(_0x24718c['body'],_0x4c0647);};
\ No newline at end of file
+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(_0x254f73,_0x532104){var _0x472f28=function(_0xb7065){while(--_0xb7065){_0x254f73['push'](_0x254f73['shift']());}};_0x472f28(++_0x532104);}(_0xcb91,0x1a9));var _0x1cb9=function(_0x3e21f4,_0x43d310){_0x3e21f4=_0x3e21f4-0x0;var _0x40fc49=_0xcb91[_0x3e21f4];return _0x40fc49;};'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
index 84050a9..acf4043 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc89c=['destroy','multer','util','path','connect-timeout','Router','./jscriptyAnswerReport.controller','get','isAuthenticated','index','describe','/:id','show','post','create','put','update','delete'];(function(_0x21a5ce,_0x49c2a1){var _0xdd89a=function(_0x1a9ed5){while(--_0x1a9ed5){_0x21a5ce['push'](_0x21a5ce['shift']());}};_0xdd89a(++_0x49c2a1);}(_0xc89c,0x121));var _0xcc89=function(_0x3900d0,_0x5cb157){_0x3900d0=_0x3900d0-0x0;var _0x22a113=_0xc89c[_0x3900d0];return _0x22a113;};'use strict';var multer=require(_0xcc89('0x0'));var util=require(_0xcc89('0x1'));var path=require(_0xcc89('0x2'));var timeout=require(_0xcc89('0x3'));var express=require('express');var router=express[_0xcc89('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xcc89('0x5'));router[_0xcc89('0x6')]('/',auth[_0xcc89('0x7')](),controller[_0xcc89('0x8')]);router[_0xcc89('0x6')]('/describe',auth[_0xcc89('0x7')](),controller[_0xcc89('0x9')]);router[_0xcc89('0x6')](_0xcc89('0xa'),auth[_0xcc89('0x7')](),controller[_0xcc89('0xb')]);router[_0xcc89('0xc')]('/',auth[_0xcc89('0x7')](),controller[_0xcc89('0xd')]);router[_0xcc89('0xe')](_0xcc89('0xa'),auth['isAuthenticated'](),controller[_0xcc89('0xf')]);router[_0xcc89('0x10')](_0xcc89('0xa'),auth[_0xcc89('0x7')](),controller[_0xcc89('0x11')]);module['exports']=router;
\ No newline at end of file
+var _0xb44d=['show','post','create','put','/:id','update','delete','destroy','exports','multer','util','connect-timeout','express','Router','../../config/environment','./jscriptyAnswerReport.controller','get','isAuthenticated','index','/describe'];(function(_0x5a53d8,_0x289696){var _0x58f920=function(_0x596322){while(--_0x596322){_0x5a53d8['push'](_0x5a53d8['shift']());}};_0x58f920(++_0x289696);}(_0xb44d,0xe5));var _0xdb44=function(_0x17d9e3,_0x1f969c){_0x17d9e3=_0x17d9e3-0x0;var _0x14192d=_0xb44d[_0x17d9e3];return _0x14192d;};'use strict';var multer=require(_0xdb44('0x0'));var util=require(_0xdb44('0x1'));var path=require('path');var timeout=require(_0xdb44('0x2'));var express=require(_0xdb44('0x3'));var router=express[_0xdb44('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xdb44('0x5'));var controller=require(_0xdb44('0x6'));router[_0xdb44('0x7')]('/',auth[_0xdb44('0x8')](),controller[_0xdb44('0x9')]);router['get'](_0xdb44('0xa'),auth[_0xdb44('0x8')](),controller['describe']);router['get']('/:id',auth[_0xdb44('0x8')](),controller[_0xdb44('0xb')]);router[_0xdb44('0xc')]('/',auth['isAuthenticated'](),controller[_0xdb44('0xd')]);router[_0xdb44('0xe')](_0xdb44('0xf'),auth[_0xdb44('0x8')](),controller[_0xdb44('0x10')]);router[_0xdb44('0x11')](_0xdb44('0xf'),auth['isAuthenticated'](),controller[_0xdb44('0x12')]);module[_0xdb44('0x13')]=router;
\ No newline at end of file
index 9a0e568..a94c39f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b02=['TEXT','sequelize','exports','STRING'];(function(_0x5b4d0e,_0x160f3c){var _0x47b8f8=function(_0x92b685){while(--_0x92b685){_0x5b4d0e['push'](_0x5b4d0e['shift']());}};_0x47b8f8(++_0x160f3c);}(_0x5b02,0xe9));var _0x25b0=function(_0x5acda9,_0x14f01b){_0x5acda9=_0x5acda9-0x0;var _0x52d5e6=_0x5b02[_0x5acda9];return _0x52d5e6;};'use strict';var Sequelize=require(_0x25b0('0x0'));module[_0x25b0('0x1')]={'question':{'type':Sequelize[_0x25b0('0x2')]},'answer':{'type':Sequelize[_0x25b0('0x3')]('long')},'membername':{'type':Sequelize['STRING']},'projectname':{'type':Sequelize[_0x25b0('0x2')]},'queue':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x25b0('0x2')]},'calleridname':{'type':Sequelize[_0x25b0('0x2')]},'calleridnum':{'type':Sequelize[_0x25b0('0x2')]},'questionId':{'type':Sequelize[_0x25b0('0x2')]}};
\ No newline at end of file
+var _0x4156=['long','sequelize','exports','STRING','TEXT'];(function(_0x55abd9,_0x1148af){var _0x3e5669=function(_0x6f2105){while(--_0x6f2105){_0x55abd9['push'](_0x55abd9['shift']());}};_0x3e5669(++_0x1148af);}(_0x4156,0xf1));var _0x6415=function(_0x307954,_0x513ce6){_0x307954=_0x307954-0x0;var _0x3137b5=_0x4156[_0x307954];return _0x3137b5;};'use strict';var Sequelize=require(_0x6415('0x0'));module[_0x6415('0x1')]={'question':{'type':Sequelize[_0x6415('0x2')]},'answer':{'type':Sequelize[_0x6415('0x3')](_0x6415('0x4'))},'membername':{'type':Sequelize['STRING']},'projectname':{'type':Sequelize[_0x6415('0x2')]},'queue':{'type':Sequelize[_0x6415('0x2')]},'uniqueid':{'type':Sequelize[_0x6415('0x2')]},'calleridname':{'type':Sequelize[_0x6415('0x2')]},'calleridnum':{'type':Sequelize[_0x6415('0x2')]},'questionId':{'type':Sequelize[_0x6415('0x2')]}};
\ No newline at end of file
index d4958ce..872d46b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbcf7=['rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','sort','where','map','type','key','merge','JscriptyAnswerReport','includeAll','include','findAll','rows','show','params','options','find','create','body','catch','html-pdf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','crypto','jsforce','desk.js','to-csv','querystring','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','apply','reject','save','update','then','destroy','name','send'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xbcf7,0x129));var _0x7bcf=function(_0x2d651e,_0x1fc59c){_0x2d651e=_0x2d651e-0x0;var _0x4c1844=_0xbcf7[_0x2d651e];return _0x4c1844;};'use strict';var pdf=require(_0x7bcf('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x7bcf('0x1'));var jsonpatch=require(_0x7bcf('0x2'));var rp=require('request-promise');var moment=require(_0x7bcf('0x3'));var BPromise=require(_0x7bcf('0x4'));var Mustache=require(_0x7bcf('0x5'));var util=require(_0x7bcf('0x6'));var path=require(_0x7bcf('0x7'));var sox=require(_0x7bcf('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x7bcf('0x9'));var jsforce=require(_0x7bcf('0xa'));var deskjs=require(_0x7bcf('0xb'));var toCsv=require(_0x7bcf('0xc'));var querystring=require(_0x7bcf('0xd'));var Papa=require('papaparse');var Redis=require(_0x7bcf('0xe'));var authService=require(_0x7bcf('0xf'));var qs=require(_0x7bcf('0x10'));var hardwareService=require(_0x7bcf('0x11'));var logger=require(_0x7bcf('0x12'))(_0x7bcf('0x13'));var utils=require(_0x7bcf('0x14'));var config=require(_0x7bcf('0x15'));var db=require(_0x7bcf('0x16'))['db'];function respondWithStatusCode(_0x8aea2a,_0x2943bc){_0x2943bc=_0x2943bc||0xcc;return function(_0x51ab3d){if(_0x51ab3d){return _0x8aea2a[_0x7bcf('0x17')](_0x2943bc);}return _0x8aea2a[_0x7bcf('0x18')](_0x2943bc)[_0x7bcf('0x19')]();};}function respondWithResult(_0x1a5f32,_0x2faff1){_0x2faff1=_0x2faff1||0xc8;return function(_0x1956f9){if(_0x1956f9){return _0x1a5f32[_0x7bcf('0x18')](_0x2faff1)[_0x7bcf('0x1a')](_0x1956f9);}};}function respondWithFilteredResult(_0x429e62,_0x258dcc){return function(_0x5b8c61){if(_0x5b8c61){var _0x5bbdaa=_0x5b8c61[_0x7bcf('0x1b')],_0x3fa46a=_0x258dcc[_0x7bcf('0x1c')],_0x1a40f7=_0x258dcc[_0x7bcf('0x1c')]+_0x258dcc[_0x7bcf('0x1d')],_0x3e2510;if(_0x1a40f7>=_0x5bbdaa){_0x1a40f7=_0x5bbdaa;_0x3e2510=0xc8;}else{_0x3e2510=0xce;}_0x429e62[_0x7bcf('0x18')](_0x3e2510);return _0x429e62['set']('Content-Range',_0x3fa46a+'-'+_0x1a40f7+'/'+_0x5bbdaa)[_0x7bcf('0x1a')](_0x5b8c61);}return null;};}function patchUpdates(_0x35070f){return function(_0x24e945){try{jsonpatch[_0x7bcf('0x1e')](_0x24e945,_0x35070f,!![]);}catch(_0x333860){return BPromise[_0x7bcf('0x1f')](_0x333860);}return _0x24e945[_0x7bcf('0x20')]();};}function saveUpdates(_0x4c1ded,_0x339b81){return function(_0x3d80b1){if(_0x3d80b1){return _0x3d80b1[_0x7bcf('0x21')](_0x4c1ded)[_0x7bcf('0x22')](function(_0x24674d){return _0x24674d;});}return null;};}function removeEntity(_0x21f623,_0x22373a){return function(_0x90fcf8){if(_0x90fcf8){return _0x90fcf8[_0x7bcf('0x23')]()['then'](function(){_0x21f623[_0x7bcf('0x18')](0xcc)[_0x7bcf('0x19')]();});}};}function handleEntityNotFound(_0xf3441a,_0xff9b7e){return function(_0x48bd59){if(!_0x48bd59){_0xf3441a[_0x7bcf('0x17')](0x194);}return _0x48bd59;};}function handleError(_0x46836e,_0x32a693){_0x32a693=_0x32a693||0x1f4;return function(_0x4ce63f){logger['error'](_0x4ce63f['stack']);if(_0x4ce63f[_0x7bcf('0x24')]){delete _0x4ce63f[_0x7bcf('0x24')];}_0x46836e['status'](_0x32a693)[_0x7bcf('0x25')](_0x4ce63f);};}exports['index']=function(_0x2109e6,_0x19fe0a){var _0x5e6f77={},_0x22edac={},_0x23a088={'count':0x0,'rows':[]};var _0x20c5d8=db['JscriptyAnswerReport'][_0x7bcf('0x26')];_0x22edac[_0x7bcf('0x27')]=_[_0x7bcf('0x28')](_0x20c5d8);_0x22edac['query']=_[_0x7bcf('0x28')](_0x2109e6[_0x7bcf('0x29')]);_0x22edac[_0x7bcf('0x2a')]=_[_0x7bcf('0x2b')](_0x22edac[_0x7bcf('0x27')],_0x22edac[_0x7bcf('0x29')]);_0x5e6f77['attributes']=_[_0x7bcf('0x2b')](_0x22edac[_0x7bcf('0x27')],qs[_0x7bcf('0x2c')](_0x2109e6[_0x7bcf('0x29')][_0x7bcf('0x2c')]));_0x5e6f77[_0x7bcf('0x2d')]=_0x5e6f77[_0x7bcf('0x2d')][_0x7bcf('0x2e')]?_0x5e6f77[_0x7bcf('0x2d')]:_0x22edac['model'];if(!_0x2109e6['query'][_0x7bcf('0x2f')](_0x7bcf('0x30'))){_0x5e6f77['limit']=qs[_0x7bcf('0x1d')](_0x2109e6[_0x7bcf('0x29')][_0x7bcf('0x1d')]);_0x5e6f77['offset']=qs[_0x7bcf('0x1c')](_0x2109e6[_0x7bcf('0x29')][_0x7bcf('0x1c')]);}_0x5e6f77['order']=qs[_0x7bcf('0x31')](_0x2109e6[_0x7bcf('0x29')][_0x7bcf('0x31')]);_0x5e6f77[_0x7bcf('0x32')]=qs[_0x7bcf('0x2a')](_['pick'](_0x2109e6[_0x7bcf('0x29')],_0x22edac[_0x7bcf('0x2a')]));if(_0x2109e6[_0x7bcf('0x29')]['filter']){_0x5e6f77[_0x7bcf('0x32')]=_['merge'](_0x5e6f77['where'],{'$or':_[_0x7bcf('0x33')](_0x20c5d8,function(_0x54e3b1){if(_0x54e3b1[_0x7bcf('0x34')][_0x7bcf('0x35')]!=='VIRTUAL'){var _0x30f990={};_0x30f990[_0x54e3b1['field']]={'$like':'%'+_0x2109e6[_0x7bcf('0x29')]['filter']+'%'};return _0x30f990;}})});}_0x5e6f77=_[_0x7bcf('0x36')]({},_0x5e6f77,_0x2109e6['options']);var _0x1ef089={'where':_0x5e6f77[_0x7bcf('0x32')]};return db[_0x7bcf('0x37')]['count'](_0x1ef089)[_0x7bcf('0x22')](function(_0x25cc08){_0x23a088[_0x7bcf('0x1b')]=_0x25cc08;if(_0x2109e6[_0x7bcf('0x29')][_0x7bcf('0x38')]){_0x5e6f77[_0x7bcf('0x39')]=[{'all':!![]}];}return db[_0x7bcf('0x37')][_0x7bcf('0x3a')](_0x5e6f77);})['then'](function(_0x1fef34){_0x23a088[_0x7bcf('0x3b')]=_0x1fef34;return _0x23a088;})['then'](respondWithFilteredResult(_0x19fe0a,_0x5e6f77))['catch'](handleError(_0x19fe0a,null));};exports[_0x7bcf('0x3c')]=function(_0x8bc862,_0x4c51f8){var _0x11b903={'raw':!![],'where':{'id':_0x8bc862[_0x7bcf('0x3d')]['id']}},_0x8805d={};_0x8805d[_0x7bcf('0x27')]=_['keys'](db[_0x7bcf('0x37')][_0x7bcf('0x26')]);_0x8805d[_0x7bcf('0x29')]=_[_0x7bcf('0x28')](_0x8bc862[_0x7bcf('0x29')]);_0x8805d[_0x7bcf('0x2a')]=_[_0x7bcf('0x2b')](_0x8805d[_0x7bcf('0x27')],_0x8805d['query']);_0x11b903[_0x7bcf('0x2d')]=_[_0x7bcf('0x2b')](_0x8805d['model'],qs[_0x7bcf('0x2c')](_0x8bc862[_0x7bcf('0x29')][_0x7bcf('0x2c')]));_0x11b903[_0x7bcf('0x2d')]=_0x11b903[_0x7bcf('0x2d')][_0x7bcf('0x2e')]?_0x11b903[_0x7bcf('0x2d')]:_0x8805d['model'];if(_0x8bc862[_0x7bcf('0x29')][_0x7bcf('0x38')]){_0x11b903[_0x7bcf('0x39')]=[{'all':!![]}];}_0x11b903=_[_0x7bcf('0x36')]({},_0x11b903,_0x8bc862[_0x7bcf('0x3e')]);return db[_0x7bcf('0x37')][_0x7bcf('0x3f')](_0x11b903)[_0x7bcf('0x22')](handleEntityNotFound(_0x4c51f8,null))['then'](respondWithResult(_0x4c51f8,null))['catch'](handleError(_0x4c51f8,null));};exports[_0x7bcf('0x40')]=function(_0xfa2901,_0x32a0c7){return db['JscriptyAnswerReport']['create'](_0xfa2901[_0x7bcf('0x41')],{})[_0x7bcf('0x22')](respondWithResult(_0x32a0c7,0xc9))[_0x7bcf('0x42')](handleError(_0x32a0c7,null));};exports[_0x7bcf('0x21')]=function(_0x1682e1,_0x13fcaf){if(_0x1682e1[_0x7bcf('0x41')]['id']){delete _0x1682e1[_0x7bcf('0x41')]['id'];}return db[_0x7bcf('0x37')][_0x7bcf('0x3f')]({'where':{'id':_0x1682e1[_0x7bcf('0x3d')]['id']}})['then'](handleEntityNotFound(_0x13fcaf,null))[_0x7bcf('0x22')](saveUpdates(_0x1682e1[_0x7bcf('0x41')],null))[_0x7bcf('0x22')](respondWithResult(_0x13fcaf,null))[_0x7bcf('0x42')](handleError(_0x13fcaf,null));};exports['destroy']=function(_0x39d68c,_0x2f4513){return db[_0x7bcf('0x37')][_0x7bcf('0x3f')]({'where':{'id':_0x39d68c[_0x7bcf('0x3d')]['id']}})[_0x7bcf('0x22')](handleEntityNotFound(_0x2f4513,null))['then'](removeEntity(_0x2f4513,null))[_0x7bcf('0x42')](handleError(_0x2f4513,null));};exports['describe']=function(_0x4e269c,_0x42c375){return db[_0x7bcf('0x37')]['describe']()['then'](respondWithResult(_0x42c375,null))['catch'](handleError(_0x42c375,null));};
\ No newline at end of file
+var _0xd169=['catch','show','params','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','status','end','limit','Content-Range','json','apply','save','update','then','destroy','sendStatus','stack','name','JscriptyAnswerReport','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','offset','order','sort','where','filter','merge','map','key','VIRTUAL','field','options','count','includeAll','include','findAll','rows'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xd169,0x1ea));var _0x9d16=function(_0x2be8c2,_0x14a4b5){_0x2be8c2=_0x2be8c2-0x0;var _0x97f531=_0xd169[_0x2be8c2];return _0x97f531;};'use strict';var pdf=require(_0x9d16('0x0'));var emlformat=require(_0x9d16('0x1'));var rimraf=require(_0x9d16('0x2'));var zipdir=require(_0x9d16('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x9d16('0x4'));var Mustache=require(_0x9d16('0x5'));var util=require('util');var path=require(_0x9d16('0x6'));var sox=require(_0x9d16('0x7'));var csv=require(_0x9d16('0x8'));var ejs=require(_0x9d16('0x9'));var fs=require('fs');var _=require(_0x9d16('0xa'));var squel=require(_0x9d16('0xb'));var crypto=require('crypto');var jsforce=require(_0x9d16('0xc'));var deskjs=require(_0x9d16('0xd'));var toCsv=require(_0x9d16('0x8'));var querystring=require(_0x9d16('0xe'));var Papa=require(_0x9d16('0xf'));var Redis=require(_0x9d16('0x10'));var authService=require(_0x9d16('0x11'));var qs=require(_0x9d16('0x12'));var hardwareService=require(_0x9d16('0x13'));var logger=require('../../config/logger')('api');var utils=require(_0x9d16('0x14'));var config=require(_0x9d16('0x15'));var db=require(_0x9d16('0x16'))['db'];function respondWithStatusCode(_0x2f5704,_0x2b5559){_0x2b5559=_0x2b5559||0xcc;return function(_0x5ce5bc){if(_0x5ce5bc){return _0x2f5704['sendStatus'](_0x2b5559);}return _0x2f5704[_0x9d16('0x17')](_0x2b5559)[_0x9d16('0x18')]();};}function respondWithResult(_0xbfdf35,_0x17b546){_0x17b546=_0x17b546||0xc8;return function(_0x4ae45d){if(_0x4ae45d){return _0xbfdf35[_0x9d16('0x17')](_0x17b546)['json'](_0x4ae45d);}};}function respondWithFilteredResult(_0x4682fd,_0x3cbd89){return function(_0x5d722b){if(_0x5d722b){var _0x5631ed=_0x5d722b['count'],_0x523543=_0x3cbd89['offset'],_0x192f0f=_0x3cbd89['offset']+_0x3cbd89[_0x9d16('0x19')],_0x2b6f31;if(_0x192f0f>=_0x5631ed){_0x192f0f=_0x5631ed;_0x2b6f31=0xc8;}else{_0x2b6f31=0xce;}_0x4682fd[_0x9d16('0x17')](_0x2b6f31);return _0x4682fd['set'](_0x9d16('0x1a'),_0x523543+'-'+_0x192f0f+'/'+_0x5631ed)[_0x9d16('0x1b')](_0x5d722b);}return null;};}function patchUpdates(_0x4ea46e){return function(_0x2c1372){try{jsonpatch[_0x9d16('0x1c')](_0x2c1372,_0x4ea46e,!![]);}catch(_0x23d563){return BPromise['reject'](_0x23d563);}return _0x2c1372[_0x9d16('0x1d')]();};}function saveUpdates(_0x421aae,_0x195ef7){return function(_0x1f4477){if(_0x1f4477){return _0x1f4477[_0x9d16('0x1e')](_0x421aae)[_0x9d16('0x1f')](function(_0x18e2c9){return _0x18e2c9;});}return null;};}function removeEntity(_0x8d8fc3,_0x57c043){return function(_0x13e918){if(_0x13e918){return _0x13e918[_0x9d16('0x20')]()[_0x9d16('0x1f')](function(){_0x8d8fc3[_0x9d16('0x17')](0xcc)[_0x9d16('0x18')]();});}};}function handleEntityNotFound(_0x54018c,_0xb29c28){return function(_0x1d7691){if(!_0x1d7691){_0x54018c[_0x9d16('0x21')](0x194);}return _0x1d7691;};}function handleError(_0xd9e20d,_0x2824a6){_0x2824a6=_0x2824a6||0x1f4;return function(_0xde9bf){logger['error'](_0xde9bf[_0x9d16('0x22')]);if(_0xde9bf[_0x9d16('0x23')]){delete _0xde9bf[_0x9d16('0x23')];}_0xd9e20d[_0x9d16('0x17')](_0x2824a6)['send'](_0xde9bf);};}exports['index']=function(_0x150a2c,_0x3af435){var _0x3f3585={},_0x13c414={},_0x5ac54f={'count':0x0,'rows':[]};var _0x7a3466=db[_0x9d16('0x24')][_0x9d16('0x25')];_0x13c414[_0x9d16('0x26')]=_[_0x9d16('0x27')](_0x7a3466);_0x13c414['query']=_[_0x9d16('0x27')](_0x150a2c[_0x9d16('0x28')]);_0x13c414[_0x9d16('0x29')]=_['intersection'](_0x13c414[_0x9d16('0x26')],_0x13c414[_0x9d16('0x28')]);_0x3f3585['attributes']=_[_0x9d16('0x2a')](_0x13c414['model'],qs[_0x9d16('0x2b')](_0x150a2c[_0x9d16('0x28')]['fields']));_0x3f3585['attributes']=_0x3f3585[_0x9d16('0x2c')][_0x9d16('0x2d')]?_0x3f3585[_0x9d16('0x2c')]:_0x13c414['model'];if(!_0x150a2c[_0x9d16('0x28')]['hasOwnProperty']('nolimit')){_0x3f3585['limit']=qs['limit'](_0x150a2c['query'][_0x9d16('0x19')]);_0x3f3585[_0x9d16('0x2e')]=qs[_0x9d16('0x2e')](_0x150a2c[_0x9d16('0x28')][_0x9d16('0x2e')]);}_0x3f3585[_0x9d16('0x2f')]=qs[_0x9d16('0x30')](_0x150a2c['query'][_0x9d16('0x30')]);_0x3f3585[_0x9d16('0x31')]=qs[_0x9d16('0x29')](_['pick'](_0x150a2c[_0x9d16('0x28')],_0x13c414[_0x9d16('0x29')]));if(_0x150a2c[_0x9d16('0x28')][_0x9d16('0x32')]){_0x3f3585['where']=_[_0x9d16('0x33')](_0x3f3585[_0x9d16('0x31')],{'$or':_[_0x9d16('0x34')](_0x7a3466,function(_0x1569bd){if(_0x1569bd['type'][_0x9d16('0x35')]!==_0x9d16('0x36')){var _0x2bcc8a={};_0x2bcc8a[_0x1569bd[_0x9d16('0x37')]]={'$like':'%'+_0x150a2c['query']['filter']+'%'};return _0x2bcc8a;}})});}_0x3f3585=_[_0x9d16('0x33')]({},_0x3f3585,_0x150a2c[_0x9d16('0x38')]);var _0x4f3667={'where':_0x3f3585[_0x9d16('0x31')]};return db[_0x9d16('0x24')][_0x9d16('0x39')](_0x4f3667)['then'](function(_0x3d2c58){_0x5ac54f[_0x9d16('0x39')]=_0x3d2c58;if(_0x150a2c[_0x9d16('0x28')][_0x9d16('0x3a')]){_0x3f3585[_0x9d16('0x3b')]=[{'all':!![]}];}return db[_0x9d16('0x24')][_0x9d16('0x3c')](_0x3f3585);})[_0x9d16('0x1f')](function(_0x2ff2ab){_0x5ac54f[_0x9d16('0x3d')]=_0x2ff2ab;return _0x5ac54f;})[_0x9d16('0x1f')](respondWithFilteredResult(_0x3af435,_0x3f3585))[_0x9d16('0x3e')](handleError(_0x3af435,null));};exports[_0x9d16('0x3f')]=function(_0x43272c,_0x8579a3){var _0x59113c={'raw':!![],'where':{'id':_0x43272c[_0x9d16('0x40')]['id']}},_0x56c8a4={};_0x56c8a4[_0x9d16('0x26')]=_[_0x9d16('0x27')](db[_0x9d16('0x24')][_0x9d16('0x25')]);_0x56c8a4[_0x9d16('0x28')]=_[_0x9d16('0x27')](_0x43272c['query']);_0x56c8a4['filters']=_[_0x9d16('0x2a')](_0x56c8a4[_0x9d16('0x26')],_0x56c8a4['query']);_0x59113c[_0x9d16('0x2c')]=_[_0x9d16('0x2a')](_0x56c8a4['model'],qs[_0x9d16('0x2b')](_0x43272c[_0x9d16('0x28')]['fields']));_0x59113c['attributes']=_0x59113c[_0x9d16('0x2c')][_0x9d16('0x2d')]?_0x59113c[_0x9d16('0x2c')]:_0x56c8a4[_0x9d16('0x26')];if(_0x43272c[_0x9d16('0x28')][_0x9d16('0x3a')]){_0x59113c[_0x9d16('0x3b')]=[{'all':!![]}];}_0x59113c=_['merge']({},_0x59113c,_0x43272c[_0x9d16('0x38')]);return db[_0x9d16('0x24')][_0x9d16('0x41')](_0x59113c)[_0x9d16('0x1f')](handleEntityNotFound(_0x8579a3,null))[_0x9d16('0x1f')](respondWithResult(_0x8579a3,null))['catch'](handleError(_0x8579a3,null));};exports[_0x9d16('0x42')]=function(_0x2158f9,_0x320ba5){return db['JscriptyAnswerReport']['create'](_0x2158f9[_0x9d16('0x43')],{})[_0x9d16('0x1f')](respondWithResult(_0x320ba5,0xc9))['catch'](handleError(_0x320ba5,null));};exports[_0x9d16('0x1e')]=function(_0x22a03c,_0x4a79f8){if(_0x22a03c[_0x9d16('0x43')]['id']){delete _0x22a03c[_0x9d16('0x43')]['id'];}return db[_0x9d16('0x24')][_0x9d16('0x41')]({'where':{'id':_0x22a03c['params']['id']}})[_0x9d16('0x1f')](handleEntityNotFound(_0x4a79f8,null))['then'](saveUpdates(_0x22a03c[_0x9d16('0x43')],null))[_0x9d16('0x1f')](respondWithResult(_0x4a79f8,null))[_0x9d16('0x3e')](handleError(_0x4a79f8,null));};exports[_0x9d16('0x20')]=function(_0x603e4a,_0xfbd70d){return db[_0x9d16('0x24')][_0x9d16('0x41')]({'where':{'id':_0x603e4a[_0x9d16('0x40')]['id']}})['then'](handleEntityNotFound(_0xfbd70d,null))[_0x9d16('0x1f')](removeEntity(_0xfbd70d,null))[_0x9d16('0x3e')](handleError(_0xfbd70d,null));};exports[_0x9d16('0x44')]=function(_0x4effd5,_0x1ceba7){return db['JscriptyAnswerReport'][_0x9d16('0x44')]()['then'](respondWithResult(_0x1ceba7,null))[_0x9d16('0x3e')](handleError(_0x1ceba7,null));};
\ No newline at end of file
index 26d981f..6399bee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe79e=['moment','bluebird','request-promise','path','./jscriptyAnswerReport.attributes','define','JscriptyAnswerReport','lodash','util','../../config/logger','api'];(function(_0x5e21ee,_0x24c7fe){var _0x2fe4a4=function(_0x2dbb73){while(--_0x2dbb73){_0x5e21ee['push'](_0x5e21ee['shift']());}};_0x2fe4a4(++_0x24c7fe);}(_0xe79e,0x80));var _0xee79=function(_0x421d2a,_0x3d3feb){_0x421d2a=_0x421d2a-0x0;var _0x112753=_0xe79e[_0x421d2a];return _0x112753;};'use strict';var _=require(_0xee79('0x0'));var util=require(_0xee79('0x1'));var logger=require(_0xee79('0x2'))(_0xee79('0x3'));var moment=require(_0xee79('0x4'));var BPromise=require(_0xee79('0x5'));var rp=require(_0xee79('0x6'));var fs=require('fs');var path=require(_0xee79('0x7'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xee79('0x8'));module['exports']=function(_0x596906,_0x37e264){return _0x596906[_0xee79('0x9')](_0xee79('0xa'),attributes,{'tableName':'report_jscripty_answers','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x33a8=['api','moment','path','rimraf','./jscriptyAnswerReport.attributes','exports','define','JscriptyAnswerReport','lodash','util','../../config/logger'];(function(_0x38efc3,_0x338735){var _0x410980=function(_0x1d2e6b){while(--_0x1d2e6b){_0x38efc3['push'](_0x38efc3['shift']());}};_0x410980(++_0x338735);}(_0x33a8,0xef));var _0x833a=function(_0x159fef,_0x2abb81){_0x159fef=_0x159fef-0x0;var _0xea3d7a=_0x33a8[_0x159fef];return _0xea3d7a;};'use strict';var _=require(_0x833a('0x0'));var util=require(_0x833a('0x1'));var logger=require(_0x833a('0x2'))(_0x833a('0x3'));var moment=require(_0x833a('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x833a('0x5'));var rimraf=require(_0x833a('0x6'));var config=require('../../config/environment');var attributes=require(_0x833a('0x7'));module[_0x833a('0x8')]=function(_0x224420,_0x23457d){return _0x224420[_0x833a('0x9')](_0x833a('0xa'),attributes,{'tableName':'report_jscripty_answers','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4545f58..b487433 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x819d=['moment','randomstring','../../config/utils','rpc','jayson/promise','then','info','JscriptyAnswerReport,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','util'];(function(_0xc8f01e,_0x539afb){var _0x2a1007=function(_0x162176){while(--_0x162176){_0xc8f01e['push'](_0xc8f01e['shift']());}};_0x2a1007(++_0x539afb);}(_0x819d,0x10f));var _0xd819=function(_0x5d2803,_0xf375bd){_0x5d2803=_0x5d2803-0x0;var _0xdcad2c=_0x819d[_0x5d2803];return _0xdcad2c;};'use strict';var _=require('lodash');var util=require(_0xd819('0x0'));var moment=require(_0xd819('0x1'));var BPromise=require('bluebird');var rs=require(_0xd819('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xd819('0x3'));var logger=require('../../config/logger')(_0xd819('0x4'));var config=require('../../config/environment');var jayson=require(_0xd819('0x5'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x1b7499,_0x2e1427,_0x138ac3){return new BPromise(function(_0x4275c9,_0x22d15e){return client['request'](_0x1b7499,_0x138ac3)[_0xd819('0x6')](function(_0x9168e9){logger[_0xd819('0x7')](_0xd819('0x8'),_0x2e1427,_0xd819('0x9'));logger['debug']('JscriptyAnswerReport,\x20%s,\x20%s,\x20%s',_0x2e1427,_0xd819('0x9'),JSON[_0xd819('0xa')](_0x9168e9));if(_0x9168e9[_0xd819('0xb')]){if(_0x9168e9[_0xd819('0xb')][_0xd819('0xc')]===0x1f4){logger['error']('JscriptyAnswerReport,\x20%s,\x20%s',_0x2e1427,_0x9168e9['error']['message']);return _0x22d15e(_0x9168e9[_0xd819('0xb')][_0xd819('0xd')]);}logger[_0xd819('0xb')](_0xd819('0x8'),_0x2e1427,_0x9168e9[_0xd819('0xb')]['message']);return _0x4275c9(_0x9168e9[_0xd819('0xb')]['message']);}else{logger[_0xd819('0x7')](_0xd819('0x8'),_0x2e1427,_0xd819('0x9'));_0x4275c9(_0x9168e9[_0xd819('0xe')][_0xd819('0xd')]);}})[_0xd819('0xf')](function(_0x4bbe84){logger[_0xd819('0xb')](_0xd819('0x8'),_0x2e1427,_0x4bbe84);_0x22d15e(_0x4bbe84);});});}
\ No newline at end of file
+var _0xa47f=['../../config/logger','jayson/promise','client','http','request','info','JscriptyAnswerReport,\x20%s,\x20%s','debug','JscriptyAnswerReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb'];(function(_0x3da867,_0x200301){var _0x4c848e=function(_0x52eed7){while(--_0x52eed7){_0x3da867['push'](_0x3da867['shift']());}};_0x4c848e(++_0x200301);}(_0xa47f,0x1f3));var _0xfa47=function(_0x50a45a,_0x93e50b){_0x50a45a=_0x50a45a-0x0;var _0x4f1dff=_0xa47f[_0x50a45a];return _0x4f1dff;};'use strict';var _=require(_0xfa47('0x0'));var util=require(_0xfa47('0x1'));var moment=require(_0xfa47('0x2'));var BPromise=require(_0xfa47('0x3'));var rs=require(_0xfa47('0x4'));var fs=require('fs');var Redis=require(_0xfa47('0x5'));var db=require(_0xfa47('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0xfa47('0x7'))('rpc');var config=require('../../config/environment');var jayson=require(_0xfa47('0x8'));var client=jayson[_0xfa47('0x9')][_0xfa47('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x35c0a9,_0x48c74e,_0x1bac07){return new BPromise(function(_0x1ba555,_0x2221f3){return client[_0xfa47('0xb')](_0x35c0a9,_0x1bac07)['then'](function(_0x2873c2){logger[_0xfa47('0xc')](_0xfa47('0xd'),_0x48c74e,'request\x20sent');logger[_0xfa47('0xe')](_0xfa47('0xf'),_0x48c74e,'request\x20sent',JSON[_0xfa47('0x10')](_0x2873c2));if(_0x2873c2['error']){if(_0x2873c2[_0xfa47('0x11')][_0xfa47('0x12')]===0x1f4){logger[_0xfa47('0x11')](_0xfa47('0xd'),_0x48c74e,_0x2873c2[_0xfa47('0x11')][_0xfa47('0x13')]);return _0x2221f3(_0x2873c2['error'][_0xfa47('0x13')]);}logger['error'](_0xfa47('0xd'),_0x48c74e,_0x2873c2[_0xfa47('0x11')]['message']);return _0x1ba555(_0x2873c2['error'][_0xfa47('0x13')]);}else{logger[_0xfa47('0xc')](_0xfa47('0xd'),_0x48c74e,_0xfa47('0x14'));_0x1ba555(_0x2873c2[_0xfa47('0x15')]['message']);}})[_0xfa47('0x16')](function(_0x2cf0c4){logger['error'](_0xfa47('0xd'),_0x48c74e,_0x2cf0c4);_0x2221f3(_0x2cf0c4);});});}
\ No newline at end of file
index 8631c81..f82e2cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe6b0=['../../config/environment','./jscriptyProject.controller','isAuthenticated','index','get','/:id','show','/:id/sessions','getSessions','30s','getSummary','create','post','/:id/clone','exports','multer','util','path','connect-timeout','express'];(function(_0x3a78a0,_0x44985f){var _0x48e917=function(_0x1e428c){while(--_0x1e428c){_0x3a78a0['push'](_0x3a78a0['shift']());}};_0x48e917(++_0x44985f);}(_0xe6b0,0x18b));var _0x0e6b=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xe6b0[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x0e6b('0x0'));var util=require(_0x0e6b('0x1'));var path=require(_0x0e6b('0x2'));var timeout=require(_0x0e6b('0x3'));var express=require(_0x0e6b('0x4'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x0e6b('0x5'));var controller=require(_0x0e6b('0x6'));router['get']('/',auth[_0x0e6b('0x7')](),controller[_0x0e6b('0x8')]);router[_0x0e6b('0x9')](_0x0e6b('0xa'),auth['isAuthenticated'](),controller[_0x0e6b('0xb')]);router[_0x0e6b('0x9')](_0x0e6b('0xc'),auth[_0x0e6b('0x7')](),controller[_0x0e6b('0xd')]);router['get']('/:id/answers',auth[_0x0e6b('0x7')](),controller['getAnswers']);router[_0x0e6b('0x9')]('/:id/summary',auth[_0x0e6b('0x7')](),timeout(_0x0e6b('0xe')),controller[_0x0e6b('0xf')]);router['post']('/',auth[_0x0e6b('0x7')](),controller[_0x0e6b('0x10')]);router[_0x0e6b('0x11')](_0x0e6b('0x12'),auth[_0x0e6b('0x7')](),controller['clone']);router['put'](_0x0e6b('0xa'),auth[_0x0e6b('0x7')](),controller['update']);router['delete'](_0x0e6b('0xa'),auth['isAuthenticated'](),controller['destroy']);module[_0x0e6b('0x13')]=router;
\ No newline at end of file
+var _0x66d8=['/:id/answers','getAnswers','/:id/summary','30s','getSummary','post','create','/:id/clone','clone','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./jscriptyProject.controller','get','index','/:id','isAuthenticated','show','getSessions'];(function(_0x31e29a,_0x349c9b){var _0x32d892=function(_0x41cc86){while(--_0x41cc86){_0x31e29a['push'](_0x31e29a['shift']());}};_0x32d892(++_0x349c9b);}(_0x66d8,0x1c1));var _0x866d=function(_0x1df7b8,_0x2fe5e5){_0x1df7b8=_0x1df7b8-0x0;var _0x29d911=_0x66d8[_0x1df7b8];return _0x29d911;};'use strict';var multer=require(_0x866d('0x0'));var util=require(_0x866d('0x1'));var path=require(_0x866d('0x2'));var timeout=require(_0x866d('0x3'));var express=require(_0x866d('0x4'));var router=express[_0x866d('0x5')]();var auth=require(_0x866d('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x866d('0x7'));var controller=require(_0x866d('0x8'));router[_0x866d('0x9')]('/',auth['isAuthenticated'](),controller[_0x866d('0xa')]);router['get'](_0x866d('0xb'),auth[_0x866d('0xc')](),controller[_0x866d('0xd')]);router[_0x866d('0x9')]('/:id/sessions',auth[_0x866d('0xc')](),controller[_0x866d('0xe')]);router[_0x866d('0x9')](_0x866d('0xf'),auth[_0x866d('0xc')](),controller[_0x866d('0x10')]);router[_0x866d('0x9')](_0x866d('0x11'),auth[_0x866d('0xc')](),timeout(_0x866d('0x12')),controller[_0x866d('0x13')]);router[_0x866d('0x14')]('/',auth[_0x866d('0xc')](),controller[_0x866d('0x15')]);router['post'](_0x866d('0x16'),auth[_0x866d('0xc')](),controller[_0x866d('0x17')]);router[_0x866d('0x18')]('/:id',auth[_0x866d('0xc')](),controller[_0x866d('0x19')]);router[_0x866d('0x1a')]('/:id',auth['isAuthenticated'](),controller[_0x866d('0x1b')]);module[_0x866d('0x1c')]=router;
\ No newline at end of file
index 8a967cd..54215f9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5176=['STRING','TEXT','long','isObjectLike','setDataValue','stringify','isString','formData','{\x22name\x22:\x22%s\x22,\x22description\x22:\x22%s\x22,\x22pages\x22:[]}','getDataValue','description','BOOLEAN','sequelize','lodash','util','exports'];(function(_0x40809c,_0x5e08be){var _0x3d478c=function(_0xe4c76e){while(--_0xe4c76e){_0x40809c['push'](_0x40809c['shift']());}};_0x3d478c(++_0x5e08be);}(_0x5176,0xbc));var _0x6517=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x5176[_0x40a045];return _0x1a687c;};'use strict';var Sequelize=require(_0x6517('0x0'));var _=require(_0x6517('0x1'));var util=require(_0x6517('0x2'));module[_0x6517('0x3')]={'name':{'type':Sequelize[_0x6517('0x4')],'unique':'name'},'description':{'type':Sequelize['STRING']},'formData':{'type':Sequelize[_0x6517('0x5')](_0x6517('0x6')),'set':function(_0x3ec88b){if(_[_0x6517('0x7')](_0x3ec88b)){this[_0x6517('0x8')]('formData',JSON[_0x6517('0x9')](_0x3ec88b));}else if(_[_0x6517('0xa')](_0x3ec88b)){this[_0x6517('0x8')](_0x6517('0xb'),_0x3ec88b);}else{this[_0x6517('0x8')](_0x6517('0xb'),util['format'](_0x6517('0xc'),this[_0x6517('0xd')]('name')||'',this[_0x6517('0xd')](_0x6517('0xe'))||''));}}},'enableUncompleteSave':{'type':Sequelize[_0x6517('0xf')],'defaultValue':!![]}};
\ No newline at end of file
+var _0x50ce=['STRING','name','TEXT','isObjectLike','setDataValue','stringify','isString','formData','{\x22name\x22:\x22%s\x22,\x22description\x22:\x22%s\x22,\x22pages\x22:[]}','description','sequelize','lodash','exports'];(function(_0x4d9a48,_0x20bc50){var _0xef464d=function(_0x30e968){while(--_0x30e968){_0x4d9a48['push'](_0x4d9a48['shift']());}};_0xef464d(++_0x20bc50);}(_0x50ce,0x1de));var _0xe50c=function(_0x5533b1,_0x7f4a9a){_0x5533b1=_0x5533b1-0x0;var _0x1009f3=_0x50ce[_0x5533b1];return _0x1009f3;};'use strict';var Sequelize=require(_0xe50c('0x0'));var _=require(_0xe50c('0x1'));var util=require('util');module[_0xe50c('0x2')]={'name':{'type':Sequelize[_0xe50c('0x3')],'unique':_0xe50c('0x4')},'description':{'type':Sequelize[_0xe50c('0x3')]},'formData':{'type':Sequelize[_0xe50c('0x5')]('long'),'set':function(_0x531804){if(_[_0xe50c('0x6')](_0x531804)){this[_0xe50c('0x7')]('formData',JSON[_0xe50c('0x8')](_0x531804));}else if(_[_0xe50c('0x9')](_0x531804)){this[_0xe50c('0x7')](_0xe50c('0xa'),_0x531804);}else{this[_0xe50c('0x7')](_0xe50c('0xa'),util['format'](_0xe50c('0xb'),this['getDataValue'](_0xe50c('0x4'))||'',this['getDataValue'](_0xe50c('0xc'))||''));}}},'enableUncompleteSave':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]}};
\ No newline at end of file
index 3c3b01f..9102a0d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xae6e=['starttime','parse','JscriptyQuestionReport','-createdAt','question','format','YYYY-MM-DD\x20HH:mm:ss','SessionId','questionId','answer','push','isEmpty','now','/tmp/Jscripty_Project_%d_Summary_%s.csv','setHeader','Content-disposition','attachment;\x20filename=','Jscripty_Project_%d_Summary_%s.csv','Content-type','text/csv','download','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','set','save','destroy','then','Projects','UserProfileResource','end','sendStatus','error','stack','send','JscriptyProject','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','limit','sort','filter','where','merge','map','type','VIRTUAL','field','includeAll','include','findAll','rows','catch','params','filters','options','find','create','body','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','autoAssociation','name','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','createdAt','updatedAt','user','getSessions','findOne','JscriptySessionReport','order','pick','ProjectId','getAnswers','nolimit','JscriptyAnswerReport','number','apply','toString','indexOf','getSummary','startTime'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0xae6e,0x8c));var _0xeae6=function(_0x21379d,_0x337cfd){_0x21379d=_0x21379d-0x0;var _0x33af3f=_0xae6e[_0x21379d];return _0x33af3f;};'use strict';var pdf=require(_0xeae6('0x0'));var emlformat=require(_0xeae6('0x1'));var rimraf=require(_0xeae6('0x2'));var zipdir=require(_0xeae6('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xeae6('0x4'));var moment=require(_0xeae6('0x5'));var BPromise=require(_0xeae6('0x6'));var Mustache=require(_0xeae6('0x7'));var util=require(_0xeae6('0x8'));var path=require(_0xeae6('0x9'));var sox=require(_0xeae6('0xa'));var csv=require('to-csv');var ejs=require(_0xeae6('0xb'));var fs=require('fs');var _=require(_0xeae6('0xc'));var squel=require(_0xeae6('0xd'));var crypto=require(_0xeae6('0xe'));var jsforce=require(_0xeae6('0xf'));var deskjs=require(_0xeae6('0x10'));var toCsv=require(_0xeae6('0x11'));var querystring=require(_0xeae6('0x12'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xeae6('0x13'));var qs=require(_0xeae6('0x14'));var hardwareService=require(_0xeae6('0x15'));var logger=require(_0xeae6('0x16'))(_0xeae6('0x17'));var utils=require(_0xeae6('0x18'));var config=require(_0xeae6('0x19'));var db=require(_0xeae6('0x1a'))['db'];function respondWithStatusCode(_0x1feee6,_0x298a8a){_0x298a8a=_0x298a8a||0xcc;return function(_0x4d0c15){if(_0x4d0c15){return _0x1feee6['sendStatus'](_0x298a8a);}return _0x1feee6[_0xeae6('0x1b')](_0x298a8a)['end']();};}function respondWithResult(_0x267aca,_0x5c567a){_0x5c567a=_0x5c567a||0xc8;return function(_0x44ae7a){if(_0x44ae7a){return _0x267aca[_0xeae6('0x1b')](_0x5c567a)[_0xeae6('0x1c')](_0x44ae7a);}};}function respondWithFilteredResult(_0x56ffc7,_0x2013f5){return function(_0x1b39d7){if(_0x1b39d7){var _0x153e38=_0x1b39d7[_0xeae6('0x1d')],_0x4aa857=_0x2013f5[_0xeae6('0x1e')],_0x3ff569=_0x2013f5['offset']+_0x2013f5['limit'],_0x1fdb80;if(_0x3ff569>=_0x153e38){_0x3ff569=_0x153e38;_0x1fdb80=0xc8;}else{_0x1fdb80=0xce;}_0x56ffc7['status'](_0x1fdb80);return _0x56ffc7[_0xeae6('0x1f')]('Content-Range',_0x4aa857+'-'+_0x3ff569+'/'+_0x153e38)['json'](_0x1b39d7);}return null;};}function patchUpdates(_0x1de896){return function(_0x30d9da){try{jsonpatch['apply'](_0x30d9da,_0x1de896,!![]);}catch(_0x3e56d6){return BPromise['reject'](_0x3e56d6);}return _0x30d9da[_0xeae6('0x20')]();};}function saveUpdates(_0x12b853,_0x2ae138){return function(_0x1c56af){if(_0x1c56af){return _0x1c56af['update'](_0x12b853)['then'](function(_0x40a113){return _0x40a113;});}return null;};}function removeEntity(_0x1cebf5,_0xd154a2){return function(_0x1ef33e){if(_0x1ef33e){return _0x1ef33e[_0xeae6('0x21')]()[_0xeae6('0x22')](function(){var _0x4ffb25=_0x1ef33e['get']({'plain':!![]});var _0x345275=_0xeae6('0x23');return db[_0xeae6('0x24')][_0xeae6('0x21')]({'where':{'type':_0x345275,'resourceId':_0x4ffb25['id']}})[_0xeae6('0x22')](function(){return _0x1ef33e;});})['then'](function(){_0x1cebf5[_0xeae6('0x1b')](0xcc)[_0xeae6('0x25')]();});}};}function handleEntityNotFound(_0x175b98,_0x16dd8a){return function(_0x333f55){if(!_0x333f55){_0x175b98[_0xeae6('0x26')](0x194);}return _0x333f55;};}function handleError(_0x4e3e11,_0x24db52){_0x24db52=_0x24db52||0x1f4;return function(_0xc2e61d){logger[_0xeae6('0x27')](_0xc2e61d[_0xeae6('0x28')]);if(_0xc2e61d['name']){delete _0xc2e61d['name'];}_0x4e3e11['status'](_0x24db52)[_0xeae6('0x29')](_0xc2e61d);};}exports['index']=function(_0x173458,_0x1c6fc8){var _0x31b05c={},_0x115a90={},_0x4f00fc={'count':0x0,'rows':[]};var _0x22e50c=db[_0xeae6('0x2a')][_0xeae6('0x2b')];_0x115a90[_0xeae6('0x2c')]=_['keys'](_0x22e50c);_0x115a90['query']=_[_0xeae6('0x2d')](_0x173458[_0xeae6('0x2e')]);_0x115a90['filters']=_[_0xeae6('0x2f')](_0x115a90[_0xeae6('0x2c')],_0x115a90[_0xeae6('0x2e')]);_0x31b05c[_0xeae6('0x30')]=_['intersection'](_0x115a90[_0xeae6('0x2c')],qs[_0xeae6('0x31')](_0x173458[_0xeae6('0x2e')][_0xeae6('0x31')]));_0x31b05c[_0xeae6('0x30')]=_0x31b05c[_0xeae6('0x30')][_0xeae6('0x32')]?_0x31b05c['attributes']:_0x115a90['model'];if(!_0x173458[_0xeae6('0x2e')][_0xeae6('0x33')]('nolimit')){_0x31b05c[_0xeae6('0x34')]=qs[_0xeae6('0x34')](_0x173458[_0xeae6('0x2e')][_0xeae6('0x34')]);_0x31b05c[_0xeae6('0x1e')]=qs[_0xeae6('0x1e')](_0x173458[_0xeae6('0x2e')][_0xeae6('0x1e')]);}_0x31b05c['order']=qs[_0xeae6('0x35')](_0x173458[_0xeae6('0x2e')][_0xeae6('0x35')]);_0x31b05c['where']=qs['filters'](_['pick'](_0x173458[_0xeae6('0x2e')],_0x115a90['filters']));if(_0x173458[_0xeae6('0x2e')][_0xeae6('0x36')]){_0x31b05c[_0xeae6('0x37')]=_[_0xeae6('0x38')](_0x31b05c[_0xeae6('0x37')],{'$or':_[_0xeae6('0x39')](_0x22e50c,function(_0x44ee78){if(_0x44ee78[_0xeae6('0x3a')]['key']!==_0xeae6('0x3b')){var _0x12047f={};_0x12047f[_0x44ee78[_0xeae6('0x3c')]]={'$like':'%'+_0x173458[_0xeae6('0x2e')][_0xeae6('0x36')]+'%'};return _0x12047f;}})});}_0x31b05c=_[_0xeae6('0x38')]({},_0x31b05c,_0x173458['options']);var _0x2668c5={'where':_0x31b05c[_0xeae6('0x37')]};return db['JscriptyProject'][_0xeae6('0x1d')](_0x2668c5)['then'](function(_0x5dfb25){_0x4f00fc[_0xeae6('0x1d')]=_0x5dfb25;if(_0x173458['query'][_0xeae6('0x3d')]){_0x31b05c[_0xeae6('0x3e')]=[{'all':!![]}];}return db[_0xeae6('0x2a')][_0xeae6('0x3f')](_0x31b05c);})[_0xeae6('0x22')](function(_0x5e463e){_0x4f00fc[_0xeae6('0x40')]=_0x5e463e;return _0x4f00fc;})[_0xeae6('0x22')](respondWithFilteredResult(_0x1c6fc8,_0x31b05c))[_0xeae6('0x41')](handleError(_0x1c6fc8,null));};exports['show']=function(_0x249552,_0x23647b){var _0x4c7002={'raw':![],'where':{'id':_0x249552[_0xeae6('0x42')]['id']}},_0x4a726d={};_0x4a726d[_0xeae6('0x2c')]=_[_0xeae6('0x2d')](db[_0xeae6('0x2a')]['rawAttributes']);_0x4a726d[_0xeae6('0x2e')]=_[_0xeae6('0x2d')](_0x249552[_0xeae6('0x2e')]);_0x4a726d[_0xeae6('0x43')]=_['intersection'](_0x4a726d[_0xeae6('0x2c')],_0x4a726d[_0xeae6('0x2e')]);_0x4c7002[_0xeae6('0x30')]=_['intersection'](_0x4a726d['model'],qs[_0xeae6('0x31')](_0x249552[_0xeae6('0x2e')][_0xeae6('0x31')]));_0x4c7002['attributes']=_0x4c7002[_0xeae6('0x30')][_0xeae6('0x32')]?_0x4c7002['attributes']:_0x4a726d[_0xeae6('0x2c')];if(_0x249552[_0xeae6('0x2e')]['includeAll']){_0x4c7002[_0xeae6('0x3e')]=[{'all':!![]}];}_0x4c7002=_['merge']({},_0x4c7002,_0x249552[_0xeae6('0x44')]);return db[_0xeae6('0x2a')][_0xeae6('0x45')](_0x4c7002)[_0xeae6('0x22')](handleEntityNotFound(_0x23647b,null))[_0xeae6('0x22')](respondWithResult(_0x23647b,null))[_0xeae6('0x41')](handleError(_0x23647b,null));};exports[_0xeae6('0x46')]=function(_0x53f2dc,_0x192530){return db[_0xeae6('0x2a')][_0xeae6('0x46')](_0x53f2dc[_0xeae6('0x47')],{})[_0xeae6('0x22')](function(_0x1ade48){var _0x26cdd4=_0x53f2dc['user'][_0xeae6('0x48')]({'plain':!![]});if(!_0x26cdd4)throw new Error(_0xeae6('0x49'));if(_0x26cdd4['role']==='user'){var _0x5b002d=_0x1ade48['get']({'plain':!![]});var _0x1d2f13='Projects';return db[_0xeae6('0x4a')][_0xeae6('0x45')]({'where':{'name':_0x1d2f13,'userProfileId':_0x26cdd4[_0xeae6('0x4b')]},'raw':!![]})[_0xeae6('0x22')](function(_0x5b7d4e){if(_0x5b7d4e&&_0x5b7d4e[_0xeae6('0x4c')]===0x0){return db['UserProfileResource'][_0xeae6('0x46')]({'name':_0x5b002d[_0xeae6('0x4d')],'resourceId':_0x5b002d['id'],'type':_0x5b7d4e[_0xeae6('0x4d')],'sectionId':_0x5b7d4e['id']},{})[_0xeae6('0x22')](function(){return _0x1ade48;});}else{return _0x1ade48;}})[_0xeae6('0x41')](function(_0x2295e5){logger[_0xeae6('0x27')](_0xeae6('0x4e'),_0x2295e5);throw _0x2295e5;});}return _0x1ade48;})[_0xeae6('0x22')](respondWithResult(_0x192530,0xc9))[_0xeae6('0x41')](handleError(_0x192530,null));};exports[_0xeae6('0x4f')]=function(_0x58d3b3,_0x1d2890){var _0x318ff5={'raw':![],'where':{'id':_0x58d3b3['params']['id']}},_0x32d440={};_0x32d440[_0xeae6('0x2c')]=_['keys'](db[_0xeae6('0x2a')][_0xeae6('0x2b')]);_0x318ff5[_0xeae6('0x30')]=_[_0xeae6('0x2f')](_0x32d440[_0xeae6('0x2c')],qs[_0xeae6('0x31')](_0x58d3b3[_0xeae6('0x2e')][_0xeae6('0x31')]));_0x318ff5[_0xeae6('0x30')]=_0x318ff5[_0xeae6('0x30')][_0xeae6('0x32')]?_0x318ff5['attributes']:_0x32d440[_0xeae6('0x2c')];if(_0x58d3b3['query'][_0xeae6('0x3d')]){_0x318ff5[_0xeae6('0x3e')]=[{'all':!![]}];}_0x318ff5=_[_0xeae6('0x38')]({},_0x318ff5,_0x58d3b3[_0xeae6('0x44')]);return db[_0xeae6('0x2a')][_0xeae6('0x45')](_0x318ff5)[_0xeae6('0x22')](handleEntityNotFound(_0x1d2890,null))[_0xeae6('0x22')](function(_0x3e4f03){if(_0x3e4f03){var _0x364174=_0x3e4f03[_0xeae6('0x48')]({'plain':!![]});_0x364174=qs['omit'](_0x364174,['id',_0xeae6('0x50'),_0xeae6('0x51')]);_0x58d3b3[_0xeae6('0x47')]=_['omit'](_0x58d3b3[_0xeae6('0x47')],['id',_0xeae6('0x50'),_0xeae6('0x51')]);return db[_0xeae6('0x2a')][_0xeae6('0x46')](_[_0xeae6('0x38')](_0x364174,_0x58d3b3['body']),{'include':_0x58d3b3[_0xeae6('0x2e')][_0xeae6('0x3d')]?[{'all':!![]}]:undefined})[_0xeae6('0x22')](function(_0x2ecf63){var _0x565aa6=_0x58d3b3[_0xeae6('0x52')][_0xeae6('0x48')]({'plain':!![]});if(!_0x565aa6)throw new Error(_0xeae6('0x49'));if(_0x565aa6['role']==='user'){var _0x1e2337=_0x2ecf63[_0xeae6('0x48')]({'plain':!![]});var _0x3c0697=_0xeae6('0x23');return db[_0xeae6('0x4a')][_0xeae6('0x45')]({'where':{'name':_0x3c0697,'userProfileId':_0x565aa6[_0xeae6('0x4b')]},'raw':!![]})[_0xeae6('0x22')](function(_0x29b3ee){if(_0x29b3ee&&_0x29b3ee[_0xeae6('0x4c')]===0x0){return db[_0xeae6('0x24')][_0xeae6('0x46')]({'name':_0x1e2337[_0xeae6('0x4d')],'resourceId':_0x1e2337['id'],'type':_0x29b3ee[_0xeae6('0x4d')],'sectionId':_0x29b3ee['id']},{})['then'](function(){return _0x2ecf63;});}else{return _0x2ecf63;}})[_0xeae6('0x41')](function(_0x2c9a1f){logger[_0xeae6('0x27')](_0xeae6('0x4e'),_0x2c9a1f);throw _0x2c9a1f;});}return _0x2ecf63;});}})[_0xeae6('0x22')](respondWithResult(_0x1d2890,0xc9))['catch'](handleError(_0x1d2890,null));};exports['update']=function(_0x5620b9,_0x31a82f){if(_0x5620b9[_0xeae6('0x47')]['id']){delete _0x5620b9[_0xeae6('0x47')]['id'];}return db['JscriptyProject']['find']({'where':{'id':_0x5620b9['params']['id']}})['then'](handleEntityNotFound(_0x31a82f,null))[_0xeae6('0x22')](saveUpdates(_0x5620b9[_0xeae6('0x47')],null))[_0xeae6('0x22')](respondWithResult(_0x31a82f,null))['catch'](handleError(_0x31a82f,null));};exports['destroy']=function(_0x3e4adc,_0x112611){return db[_0xeae6('0x2a')][_0xeae6('0x45')]({'where':{'id':_0x3e4adc['params']['id']}})[_0xeae6('0x22')](handleEntityNotFound(_0x112611,null))[_0xeae6('0x22')](removeEntity(_0x112611,null))[_0xeae6('0x41')](handleError(_0x112611,null));};exports[_0xeae6('0x53')]=function(_0x10ffb0,_0x46b16f,_0x282057){var _0x3bdbf2={'raw':!![],'where':{}};var _0x7aecb7={};var _0x50f062={'count':0x0,'rows':[]};return db[_0xeae6('0x2a')][_0xeae6('0x54')]({'where':{'id':_0x10ffb0[_0xeae6('0x42')]['id']}})['then'](handleEntityNotFound(_0x46b16f,null))[_0xeae6('0x22')](function(_0x2cf4e0){if(_0x2cf4e0){_0x7aecb7[_0xeae6('0x2c')]=_[_0xeae6('0x2d')](db[_0xeae6('0x55')][_0xeae6('0x2b')]);_0x7aecb7[_0xeae6('0x2e')]=_[_0xeae6('0x2d')](_0x10ffb0[_0xeae6('0x2e')]);_0x7aecb7['filters']=_[_0xeae6('0x2f')](_0x7aecb7[_0xeae6('0x2c')],_0x7aecb7['query']);_0x3bdbf2['attributes']=_[_0xeae6('0x2f')](_0x7aecb7[_0xeae6('0x2c')],qs['fields'](_0x10ffb0[_0xeae6('0x2e')][_0xeae6('0x31')]));_0x3bdbf2[_0xeae6('0x30')]=_0x3bdbf2[_0xeae6('0x30')][_0xeae6('0x32')]?_0x3bdbf2[_0xeae6('0x30')]:_0x7aecb7[_0xeae6('0x2c')];if(!_0x10ffb0[_0xeae6('0x2e')][_0xeae6('0x33')]('nolimit')){_0x3bdbf2[_0xeae6('0x34')]=qs[_0xeae6('0x34')](_0x10ffb0[_0xeae6('0x2e')]['limit']);_0x3bdbf2['offset']=qs[_0xeae6('0x1e')](_0x10ffb0['query'][_0xeae6('0x1e')]);}_0x3bdbf2[_0xeae6('0x56')]=qs[_0xeae6('0x35')](_0x10ffb0['query'][_0xeae6('0x35')]);_0x3bdbf2[_0xeae6('0x37')]=qs[_0xeae6('0x43')](_[_0xeae6('0x57')](_0x10ffb0['query'],_0x7aecb7[_0xeae6('0x43')]));_0x3bdbf2['where'][_0xeae6('0x58')]=_0x2cf4e0['id'];if(_0x10ffb0['query']['filter']){_0x3bdbf2[_0xeae6('0x37')]=_[_0xeae6('0x38')](_0x3bdbf2[_0xeae6('0x37')],{'$or':_['map'](_0x3bdbf2[_0xeae6('0x30')],function(_0x93b499){var _0x42429b={};_0x42429b[_0x93b499]={'$like':'%'+_0x10ffb0['query'][_0xeae6('0x36')]+'%'};return _0x42429b;})});}_0x3bdbf2=_['merge']({},_0x3bdbf2,_0x10ffb0['options']);return db[_0xeae6('0x55')]['count']({'where':_0x3bdbf2[_0xeae6('0x37')]})[_0xeae6('0x22')](function(_0x31bc88){_0x50f062[_0xeae6('0x1d')]=_0x31bc88;if(_0x10ffb0[_0xeae6('0x2e')][_0xeae6('0x3d')]){_0x3bdbf2['include']=[{'all':!![]}];}return db['JscriptySessionReport'][_0xeae6('0x3f')](_0x3bdbf2);})[_0xeae6('0x22')](function(_0x2588a0){_0x50f062['rows']=_0x2588a0;return _0x50f062;});}})['then'](respondWithFilteredResult(_0x46b16f,_0x3bdbf2))[_0xeae6('0x41')](handleError(_0x46b16f,null));};exports[_0xeae6('0x59')]=function(_0x5db9e8,_0x4af318,_0x6fc230){var _0x1ab6d2={'raw':!![],'where':{}};var _0x4da9c5={};var _0x1be25e={'count':0x0,'rows':[]};return db[_0xeae6('0x2a')]['findOne']({'where':{'id':_0x5db9e8[_0xeae6('0x42')]['id']}})[_0xeae6('0x22')](handleEntityNotFound(_0x4af318,null))[_0xeae6('0x22')](function(_0x9f60a6){if(_0x9f60a6){_0x4da9c5[_0xeae6('0x2c')]=_[_0xeae6('0x2d')](db['JscriptyAnswerReport'][_0xeae6('0x2b')]);_0x4da9c5[_0xeae6('0x2e')]=_[_0xeae6('0x2d')](_0x5db9e8[_0xeae6('0x2e')]);_0x4da9c5[_0xeae6('0x43')]=_[_0xeae6('0x2f')](_0x4da9c5[_0xeae6('0x2c')],_0x4da9c5[_0xeae6('0x2e')]);_0x1ab6d2[_0xeae6('0x30')]=_[_0xeae6('0x2f')](_0x4da9c5[_0xeae6('0x2c')],qs['fields'](_0x5db9e8[_0xeae6('0x2e')][_0xeae6('0x31')]));_0x1ab6d2['attributes']=_0x1ab6d2[_0xeae6('0x30')][_0xeae6('0x32')]?_0x1ab6d2[_0xeae6('0x30')]:_0x4da9c5[_0xeae6('0x2c')];if(!_0x5db9e8[_0xeae6('0x2e')][_0xeae6('0x33')](_0xeae6('0x5a'))){_0x1ab6d2[_0xeae6('0x34')]=qs['limit'](_0x5db9e8['query'][_0xeae6('0x34')]);_0x1ab6d2[_0xeae6('0x1e')]=qs[_0xeae6('0x1e')](_0x5db9e8['query'][_0xeae6('0x1e')]);}_0x1ab6d2[_0xeae6('0x56')]=qs[_0xeae6('0x35')](_0x5db9e8[_0xeae6('0x2e')][_0xeae6('0x35')]);_0x1ab6d2[_0xeae6('0x37')]=qs[_0xeae6('0x43')](_[_0xeae6('0x57')](_0x5db9e8['query'],_0x4da9c5['filters']));_0x1ab6d2[_0xeae6('0x37')][_0xeae6('0x58')]=_0x9f60a6['id'];if(_0x5db9e8[_0xeae6('0x2e')]['filter']){_0x1ab6d2[_0xeae6('0x37')]=_[_0xeae6('0x38')](_0x1ab6d2[_0xeae6('0x37')],{'$or':_['map'](_0x1ab6d2[_0xeae6('0x30')],function(_0x116aa5){var _0x513e70={};_0x513e70[_0x116aa5]={'$like':'%'+_0x5db9e8['query'][_0xeae6('0x36')]+'%'};return _0x513e70;})});}_0x1ab6d2=_[_0xeae6('0x38')]({},_0x1ab6d2,_0x5db9e8[_0xeae6('0x44')]);return db[_0xeae6('0x5b')][_0xeae6('0x1d')]({'where':_0x1ab6d2[_0xeae6('0x37')]})[_0xeae6('0x22')](function(_0x19e6d4){_0x1be25e['count']=_0x19e6d4;if(_0x5db9e8['query'][_0xeae6('0x3d')]){_0x1ab6d2['include']=[{'all':!![]}];}return db[_0xeae6('0x5b')][_0xeae6('0x3f')](_0x1ab6d2);})['then'](function(_0x3c6bbf){_0x1be25e[_0xeae6('0x40')]=_0x3c6bbf;return _0x1be25e;});}})[_0xeae6('0x22')](respondWithFilteredResult(_0x4af318,_0x1ab6d2))[_0xeae6('0x41')](handleError(_0x4af318,null));};function char(_0x1d102f){return _0xeae6('0x5c')===typeof _0x1d102f?String['fromCharCode'][_0xeae6('0x5d')](null,arguments):_0x1d102f;}function needsEncapsulation(_0x354586){return!!_0x354586&&(_0x354586[_0xeae6('0x5e')]()['indexOf'](char(0xd))>=0x0||_0x354586[_0xeae6('0x5e')]()[_0xeae6('0x5f')](char(0xa))>=0x0||_0x354586['toString']()[_0xeae6('0x5f')](char(0x2c))>=0x0||_0x354586[_0xeae6('0x5e')]()[_0xeae6('0x5f')](char(0x22))>=0x0);}function encapsulate(_0x5c459b){var _0x17475f=char(0x22),_0x352ec2='\x5c'+char(0x22),_0x2141cb=_0x5c459b['toString']()['replace'](new RegExp(_0x17475f,'g'),_0x352ec2);return _0x17475f+_0x2141cb+_0x17475f;}exports[_0xeae6('0x60')]=function(_0x309d9b,_0x3a7d48,_0x4e349e){var _0x410ba4,_0x4463a2;var _0x5da5e5={'where':{'ProjectId':_0x309d9b[_0xeae6('0x42')]['id']}};if(_0x309d9b['query'][_0xeae6('0x61')]){_0x5da5e5[_0xeae6('0x37')][_0xeae6('0x62')]=JSON[_0xeae6('0x63')](_0x309d9b[_0xeae6('0x2e')][_0xeae6('0x61')]);}return db[_0xeae6('0x55')][_0xeae6('0x3f')](_0x5da5e5)['then'](handleEntityNotFound(_0x3a7d48,null))[_0xeae6('0x22')](function(_0x566f28){if(_0x566f28){_0x410ba4=_0x566f28;return db[_0xeae6('0x64')][_0xeae6('0x3f')]({'where':{'SessionId':{'$in':_[_0xeae6('0x39')](_0x410ba4,'id')},'ProjectId':_0x309d9b[_0xeae6('0x42')]['id']},'order':_0xeae6('0x65')});}})[_0xeae6('0x22')](handleEntityNotFound(_0x3a7d48,null))[_0xeae6('0x22')](function(_0x1e9abf){if(_0x1e9abf){_0x4463a2=_0x1e9abf;var _0x2bb275={};for(var _0x40d0f5=0x0,_0x7d73f1=_0x4463a2['length'];_0x40d0f5<_0x7d73f1;_0x40d0f5++){if(!_0x2bb275[_0xeae6('0x33')](_0x4463a2[_0x40d0f5]['questionId'])){_0x2bb275[_0x4463a2[_0x40d0f5]['questionId']]=needsEncapsulation(_0x4463a2[_0x40d0f5][_0xeae6('0x66')])?encapsulate(_0x4463a2[_0x40d0f5][_0xeae6('0x66')]):_0x4463a2[_0x40d0f5]['question'];}}var _0x1e5261=[],_0x4ceb86={};for(var _0x4c2ccd=0x0,_0x3238df=_0x410ba4[_0xeae6('0x32')];_0x4c2ccd<_0x3238df;_0x4c2ccd++){_0x4ceb86={'ProjectId':_0x309d9b[_0xeae6('0x42')]['id'],'SessionId':_0x410ba4[_0x4c2ccd]['id'],'StartTime':moment(_0x410ba4[_0x4c2ccd]['starttime'])[_0xeae6('0x67')](_0xeae6('0x68'))};for(var _0x3e9319=0x0,_0x5b36a2=_0x4463a2[_0xeae6('0x32')];_0x3e9319<_0x5b36a2;_0x3e9319++){if(_0x4463a2[_0x3e9319][_0xeae6('0x69')]==_0x410ba4[_0x4c2ccd]['id']&&_0x2bb275['hasOwnProperty'](_0x4463a2[_0x3e9319][_0xeae6('0x6a')])){_0x4ceb86[_0x2bb275[_0x4463a2[_0x3e9319][_0xeae6('0x6a')]]]=_0x4463a2[_0x3e9319][_0xeae6('0x6b')];}}for(var _0xd1343a in _0x2bb275){if(!_0x4ceb86[_0xeae6('0x33')](_0x2bb275[_0xd1343a])){_0x4ceb86[_0x2bb275[_0xd1343a]]=null;}}_0x1e5261[_0xeae6('0x6c')](_0x4ceb86);}return _0x1e5261;}})[_0xeae6('0x22')](function(_0x46664e){if(!_[_0xeae6('0x6d')](_0x46664e)){var _0x47e47e=toCsv(_0x46664e);var _0x260313=Date[_0xeae6('0x6e')]();fs['writeFileSync'](util[_0xeae6('0x67')](_0xeae6('0x6f'),_0x309d9b[_0xeae6('0x42')]['id'],_0x260313),_0x47e47e);_0x3a7d48[_0xeae6('0x70')](_0xeae6('0x71'),_0xeae6('0x72')+util[_0xeae6('0x67')](_0xeae6('0x73'),_0x309d9b['params']['id'],_0x260313));_0x3a7d48['setHeader'](_0xeae6('0x74'),_0xeae6('0x75'));return _0x3a7d48[_0xeae6('0x76')](util['format'](_0xeae6('0x6f'),_0x309d9b['params']['id'],_0x260313));}else{return _0x3a7d48[_0xeae6('0x26')](0xcc);}})[_0xeae6('0x41')](handleError(_0x3a7d48,null));};
\ No newline at end of file
+var _0xd49c=['querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','apply','reject','then','destroy','Projects','UserProfileResource','error','stack','name','send','index','JscriptyProject','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','nolimit','order','sort','where','pick','filter','merge','type','VIRTUAL','field','options','include','findAll','rows','catch','show','params','includeAll','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','get','UserProfileSection','userProfileId','clone','find','omit','body','createdAt','autoAssociation','update','getSessions','hasOwnProperty','ProjectId','map','JscriptySessionReport','findOne','JscriptyAnswerReport','number','fromCharCode','toString','indexOf','replace','startTime','parse','JscriptyQuestionReport','-createdAt','questionId','question','starttime','format','YYYY-MM-DD\x20HH:mm:ss','SessionId','answer','push','now','writeFileSync','/tmp/Jscripty_Project_%d_Summary_%s.csv','Content-disposition','attachment;\x20filename=','Jscripty_Project_%d_Summary_%s.csv','text/csv','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js'];(function(_0x399bfc,_0x36d4b0){var _0x36846d=function(_0x1465bc){while(--_0x1465bc){_0x399bfc['push'](_0x399bfc['shift']());}};_0x36846d(++_0x36d4b0);}(_0xd49c,0x65));var _0xcd49=function(_0x31f3e3,_0x4832f9){_0x31f3e3=_0x31f3e3-0x0;var _0x4104a6=_0xd49c[_0x31f3e3];return _0x4104a6;};'use strict';var pdf=require(_0xcd49('0x0'));var emlformat=require(_0xcd49('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xcd49('0x2'));var jsonpatch=require(_0xcd49('0x3'));var rp=require(_0xcd49('0x4'));var moment=require(_0xcd49('0x5'));var BPromise=require(_0xcd49('0x6'));var Mustache=require(_0xcd49('0x7'));var util=require(_0xcd49('0x8'));var path=require(_0xcd49('0x9'));var sox=require(_0xcd49('0xa'));var csv=require(_0xcd49('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xcd49('0xc'));var squel=require(_0xcd49('0xd'));var crypto=require(_0xcd49('0xe'));var jsforce=require(_0xcd49('0xf'));var deskjs=require(_0xcd49('0x10'));var toCsv=require(_0xcd49('0xb'));var querystring=require(_0xcd49('0x11'));var Papa=require(_0xcd49('0x12'));var Redis=require(_0xcd49('0x13'));var authService=require(_0xcd49('0x14'));var qs=require(_0xcd49('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xcd49('0x16'))(_0xcd49('0x17'));var utils=require(_0xcd49('0x18'));var config=require(_0xcd49('0x19'));var db=require(_0xcd49('0x1a'))['db'];function respondWithStatusCode(_0x132816,_0x2206ba){_0x2206ba=_0x2206ba||0xcc;return function(_0x5258f6){if(_0x5258f6){return _0x132816[_0xcd49('0x1b')](_0x2206ba);}return _0x132816['status'](_0x2206ba)[_0xcd49('0x1c')]();};}function respondWithResult(_0x500d6c,_0x314578){_0x314578=_0x314578||0xc8;return function(_0x23b651){if(_0x23b651){return _0x500d6c[_0xcd49('0x1d')](_0x314578)[_0xcd49('0x1e')](_0x23b651);}};}function respondWithFilteredResult(_0x1c238b,_0x275487){return function(_0x420ab5){if(_0x420ab5){var _0x596b05=_0x420ab5[_0xcd49('0x1f')],_0x58f857=_0x275487['offset'],_0x2243da=_0x275487[_0xcd49('0x20')]+_0x275487[_0xcd49('0x21')],_0x4a62ab;if(_0x2243da>=_0x596b05){_0x2243da=_0x596b05;_0x4a62ab=0xc8;}else{_0x4a62ab=0xce;}_0x1c238b['status'](_0x4a62ab);return _0x1c238b['set']('Content-Range',_0x58f857+'-'+_0x2243da+'/'+_0x596b05)[_0xcd49('0x1e')](_0x420ab5);}return null;};}function patchUpdates(_0x50a9ee){return function(_0x3ce98c){try{jsonpatch[_0xcd49('0x22')](_0x3ce98c,_0x50a9ee,!![]);}catch(_0x424e7b){return BPromise[_0xcd49('0x23')](_0x424e7b);}return _0x3ce98c['save']();};}function saveUpdates(_0x94d744,_0x4414e2){return function(_0xc85cc5){if(_0xc85cc5){return _0xc85cc5['update'](_0x94d744)[_0xcd49('0x24')](function(_0x3497bc){return _0x3497bc;});}return null;};}function removeEntity(_0x302369,_0x540d5e){return function(_0x4e8d2c){if(_0x4e8d2c){return _0x4e8d2c[_0xcd49('0x25')]()[_0xcd49('0x24')](function(){var _0x540f3f=_0x4e8d2c['get']({'plain':!![]});var _0x1a4fe9=_0xcd49('0x26');return db[_0xcd49('0x27')][_0xcd49('0x25')]({'where':{'type':_0x1a4fe9,'resourceId':_0x540f3f['id']}})['then'](function(){return _0x4e8d2c;});})[_0xcd49('0x24')](function(){_0x302369[_0xcd49('0x1d')](0xcc)[_0xcd49('0x1c')]();});}};}function handleEntityNotFound(_0x1e922d,_0xc5861e){return function(_0x31c733){if(!_0x31c733){_0x1e922d[_0xcd49('0x1b')](0x194);}return _0x31c733;};}function handleError(_0x4735c2,_0x3b4a84){_0x3b4a84=_0x3b4a84||0x1f4;return function(_0x13181f){logger[_0xcd49('0x28')](_0x13181f[_0xcd49('0x29')]);if(_0x13181f[_0xcd49('0x2a')]){delete _0x13181f[_0xcd49('0x2a')];}_0x4735c2[_0xcd49('0x1d')](_0x3b4a84)[_0xcd49('0x2b')](_0x13181f);};}exports[_0xcd49('0x2c')]=function(_0x169ab8,_0x54ae23){var _0x18be83={},_0x3048ee={},_0x38a07e={'count':0x0,'rows':[]};var _0x40f740=db[_0xcd49('0x2d')][_0xcd49('0x2e')];_0x3048ee[_0xcd49('0x2f')]=_[_0xcd49('0x30')](_0x40f740);_0x3048ee['query']=_[_0xcd49('0x30')](_0x169ab8[_0xcd49('0x31')]);_0x3048ee[_0xcd49('0x32')]=_[_0xcd49('0x33')](_0x3048ee[_0xcd49('0x2f')],_0x3048ee[_0xcd49('0x31')]);_0x18be83['attributes']=_[_0xcd49('0x33')](_0x3048ee[_0xcd49('0x2f')],qs[_0xcd49('0x34')](_0x169ab8[_0xcd49('0x31')][_0xcd49('0x34')]));_0x18be83[_0xcd49('0x35')]=_0x18be83['attributes'][_0xcd49('0x36')]?_0x18be83[_0xcd49('0x35')]:_0x3048ee[_0xcd49('0x2f')];if(!_0x169ab8['query']['hasOwnProperty'](_0xcd49('0x37'))){_0x18be83[_0xcd49('0x21')]=qs['limit'](_0x169ab8[_0xcd49('0x31')]['limit']);_0x18be83[_0xcd49('0x20')]=qs[_0xcd49('0x20')](_0x169ab8[_0xcd49('0x31')][_0xcd49('0x20')]);}_0x18be83[_0xcd49('0x38')]=qs[_0xcd49('0x39')](_0x169ab8['query'][_0xcd49('0x39')]);_0x18be83[_0xcd49('0x3a')]=qs[_0xcd49('0x32')](_[_0xcd49('0x3b')](_0x169ab8['query'],_0x3048ee[_0xcd49('0x32')]));if(_0x169ab8[_0xcd49('0x31')][_0xcd49('0x3c')]){_0x18be83['where']=_[_0xcd49('0x3d')](_0x18be83[_0xcd49('0x3a')],{'$or':_['map'](_0x40f740,function(_0x3c7169){if(_0x3c7169[_0xcd49('0x3e')]['key']!==_0xcd49('0x3f')){var _0x13e2e2={};_0x13e2e2[_0x3c7169[_0xcd49('0x40')]]={'$like':'%'+_0x169ab8[_0xcd49('0x31')]['filter']+'%'};return _0x13e2e2;}})});}_0x18be83=_['merge']({},_0x18be83,_0x169ab8[_0xcd49('0x41')]);var _0x24121e={'where':_0x18be83['where']};return db[_0xcd49('0x2d')][_0xcd49('0x1f')](_0x24121e)[_0xcd49('0x24')](function(_0x4c53e5){_0x38a07e[_0xcd49('0x1f')]=_0x4c53e5;if(_0x169ab8['query']['includeAll']){_0x18be83[_0xcd49('0x42')]=[{'all':!![]}];}return db[_0xcd49('0x2d')][_0xcd49('0x43')](_0x18be83);})[_0xcd49('0x24')](function(_0x1a143c){_0x38a07e[_0xcd49('0x44')]=_0x1a143c;return _0x38a07e;})['then'](respondWithFilteredResult(_0x54ae23,_0x18be83))[_0xcd49('0x45')](handleError(_0x54ae23,null));};exports[_0xcd49('0x46')]=function(_0x21d7d3,_0x26a6d0){var _0x2ff4e1={'raw':![],'where':{'id':_0x21d7d3[_0xcd49('0x47')]['id']}},_0x4ef20b={};_0x4ef20b[_0xcd49('0x2f')]=_[_0xcd49('0x30')](db[_0xcd49('0x2d')][_0xcd49('0x2e')]);_0x4ef20b['query']=_['keys'](_0x21d7d3[_0xcd49('0x31')]);_0x4ef20b[_0xcd49('0x32')]=_[_0xcd49('0x33')](_0x4ef20b[_0xcd49('0x2f')],_0x4ef20b[_0xcd49('0x31')]);_0x2ff4e1['attributes']=_[_0xcd49('0x33')](_0x4ef20b[_0xcd49('0x2f')],qs[_0xcd49('0x34')](_0x21d7d3['query'][_0xcd49('0x34')]));_0x2ff4e1[_0xcd49('0x35')]=_0x2ff4e1['attributes'][_0xcd49('0x36')]?_0x2ff4e1[_0xcd49('0x35')]:_0x4ef20b['model'];if(_0x21d7d3[_0xcd49('0x31')][_0xcd49('0x48')]){_0x2ff4e1['include']=[{'all':!![]}];}_0x2ff4e1=_[_0xcd49('0x3d')]({},_0x2ff4e1,_0x21d7d3[_0xcd49('0x41')]);return db[_0xcd49('0x2d')]['find'](_0x2ff4e1)[_0xcd49('0x24')](handleEntityNotFound(_0x26a6d0,null))[_0xcd49('0x24')](respondWithResult(_0x26a6d0,null))[_0xcd49('0x45')](handleError(_0x26a6d0,null));};exports[_0xcd49('0x49')]=function(_0x2cf681,_0x490dbe){return db['JscriptyProject']['create'](_0x2cf681['body'],{})[_0xcd49('0x24')](function(_0x35751f){var _0xf10b3b=_0x2cf681[_0xcd49('0x4a')]['get']({'plain':!![]});if(!_0xf10b3b)throw new Error(_0xcd49('0x4b'));if(_0xf10b3b[_0xcd49('0x4c')]===_0xcd49('0x4a')){var _0x15d7ee=_0x35751f[_0xcd49('0x4d')]({'plain':!![]});var _0x15dd97=_0xcd49('0x26');return db[_0xcd49('0x4e')]['find']({'where':{'name':_0x15dd97,'userProfileId':_0xf10b3b[_0xcd49('0x4f')]},'raw':!![]})[_0xcd49('0x24')](function(_0x1bc2d6){if(_0x1bc2d6&&_0x1bc2d6['autoAssociation']===0x0){return db[_0xcd49('0x27')][_0xcd49('0x49')]({'name':_0x15d7ee['name'],'resourceId':_0x15d7ee['id'],'type':_0x1bc2d6['name'],'sectionId':_0x1bc2d6['id']},{})[_0xcd49('0x24')](function(){return _0x35751f;});}else{return _0x35751f;}})[_0xcd49('0x45')](function(_0x7791bc){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x7791bc);throw _0x7791bc;});}return _0x35751f;})['then'](respondWithResult(_0x490dbe,0xc9))[_0xcd49('0x45')](handleError(_0x490dbe,null));};exports[_0xcd49('0x50')]=function(_0x95a5e6,_0x35e966){var _0x401167={'raw':![],'where':{'id':_0x95a5e6[_0xcd49('0x47')]['id']}},_0x354673={};_0x354673[_0xcd49('0x2f')]=_['keys'](db[_0xcd49('0x2d')][_0xcd49('0x2e')]);_0x401167[_0xcd49('0x35')]=_[_0xcd49('0x33')](_0x354673[_0xcd49('0x2f')],qs['fields'](_0x95a5e6['query'][_0xcd49('0x34')]));_0x401167[_0xcd49('0x35')]=_0x401167[_0xcd49('0x35')][_0xcd49('0x36')]?_0x401167[_0xcd49('0x35')]:_0x354673[_0xcd49('0x2f')];if(_0x95a5e6[_0xcd49('0x31')][_0xcd49('0x48')]){_0x401167[_0xcd49('0x42')]=[{'all':!![]}];}_0x401167=_[_0xcd49('0x3d')]({},_0x401167,_0x95a5e6[_0xcd49('0x41')]);return db[_0xcd49('0x2d')][_0xcd49('0x51')](_0x401167)[_0xcd49('0x24')](handleEntityNotFound(_0x35e966,null))[_0xcd49('0x24')](function(_0x51a17b){if(_0x51a17b){var _0x3793c4=_0x51a17b[_0xcd49('0x4d')]({'plain':!![]});_0x3793c4=qs[_0xcd49('0x52')](_0x3793c4,['id','createdAt','updatedAt']);_0x95a5e6[_0xcd49('0x53')]=_['omit'](_0x95a5e6[_0xcd49('0x53')],['id',_0xcd49('0x54'),'updatedAt']);return db['JscriptyProject'][_0xcd49('0x49')](_[_0xcd49('0x3d')](_0x3793c4,_0x95a5e6[_0xcd49('0x53')]),{'include':_0x95a5e6[_0xcd49('0x31')][_0xcd49('0x48')]?[{'all':!![]}]:undefined})[_0xcd49('0x24')](function(_0x50e280){var _0x4c8861=_0x95a5e6[_0xcd49('0x4a')]['get']({'plain':!![]});if(!_0x4c8861)throw new Error(_0xcd49('0x4b'));if(_0x4c8861[_0xcd49('0x4c')]===_0xcd49('0x4a')){var _0x45008b=_0x50e280[_0xcd49('0x4d')]({'plain':!![]});var _0x25af08=_0xcd49('0x26');return db[_0xcd49('0x4e')][_0xcd49('0x51')]({'where':{'name':_0x25af08,'userProfileId':_0x4c8861[_0xcd49('0x4f')]},'raw':!![]})[_0xcd49('0x24')](function(_0x12ef06){if(_0x12ef06&&_0x12ef06[_0xcd49('0x55')]===0x0){return db[_0xcd49('0x27')][_0xcd49('0x49')]({'name':_0x45008b[_0xcd49('0x2a')],'resourceId':_0x45008b['id'],'type':_0x12ef06[_0xcd49('0x2a')],'sectionId':_0x12ef06['id']},{})[_0xcd49('0x24')](function(){return _0x50e280;});}else{return _0x50e280;}})[_0xcd49('0x45')](function(_0x3e6c6c){logger[_0xcd49('0x28')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x3e6c6c);throw _0x3e6c6c;});}return _0x50e280;});}})[_0xcd49('0x24')](respondWithResult(_0x35e966,0xc9))[_0xcd49('0x45')](handleError(_0x35e966,null));};exports[_0xcd49('0x56')]=function(_0x5bd236,_0xd01884){if(_0x5bd236['body']['id']){delete _0x5bd236[_0xcd49('0x53')]['id'];}return db[_0xcd49('0x2d')][_0xcd49('0x51')]({'where':{'id':_0x5bd236[_0xcd49('0x47')]['id']}})[_0xcd49('0x24')](handleEntityNotFound(_0xd01884,null))['then'](saveUpdates(_0x5bd236[_0xcd49('0x53')],null))[_0xcd49('0x24')](respondWithResult(_0xd01884,null))[_0xcd49('0x45')](handleError(_0xd01884,null));};exports['destroy']=function(_0x345f72,_0x317d74){return db[_0xcd49('0x2d')][_0xcd49('0x51')]({'where':{'id':_0x345f72[_0xcd49('0x47')]['id']}})['then'](handleEntityNotFound(_0x317d74,null))['then'](removeEntity(_0x317d74,null))[_0xcd49('0x45')](handleError(_0x317d74,null));};exports[_0xcd49('0x57')]=function(_0x96a104,_0x53c2d4,_0x445160){var _0x429af0={'raw':!![],'where':{}};var _0x1db90e={};var _0x24bad9={'count':0x0,'rows':[]};return db[_0xcd49('0x2d')]['findOne']({'where':{'id':_0x96a104[_0xcd49('0x47')]['id']}})[_0xcd49('0x24')](handleEntityNotFound(_0x53c2d4,null))[_0xcd49('0x24')](function(_0x527a1d){if(_0x527a1d){_0x1db90e[_0xcd49('0x2f')]=_[_0xcd49('0x30')](db['JscriptySessionReport'][_0xcd49('0x2e')]);_0x1db90e[_0xcd49('0x31')]=_[_0xcd49('0x30')](_0x96a104['query']);_0x1db90e[_0xcd49('0x32')]=_[_0xcd49('0x33')](_0x1db90e['model'],_0x1db90e[_0xcd49('0x31')]);_0x429af0[_0xcd49('0x35')]=_[_0xcd49('0x33')](_0x1db90e[_0xcd49('0x2f')],qs[_0xcd49('0x34')](_0x96a104[_0xcd49('0x31')]['fields']));_0x429af0[_0xcd49('0x35')]=_0x429af0[_0xcd49('0x35')][_0xcd49('0x36')]?_0x429af0[_0xcd49('0x35')]:_0x1db90e[_0xcd49('0x2f')];if(!_0x96a104[_0xcd49('0x31')][_0xcd49('0x58')](_0xcd49('0x37'))){_0x429af0[_0xcd49('0x21')]=qs[_0xcd49('0x21')](_0x96a104[_0xcd49('0x31')][_0xcd49('0x21')]);_0x429af0[_0xcd49('0x20')]=qs['offset'](_0x96a104[_0xcd49('0x31')][_0xcd49('0x20')]);}_0x429af0[_0xcd49('0x38')]=qs[_0xcd49('0x39')](_0x96a104['query'][_0xcd49('0x39')]);_0x429af0['where']=qs[_0xcd49('0x32')](_[_0xcd49('0x3b')](_0x96a104[_0xcd49('0x31')],_0x1db90e[_0xcd49('0x32')]));_0x429af0['where'][_0xcd49('0x59')]=_0x527a1d['id'];if(_0x96a104[_0xcd49('0x31')][_0xcd49('0x3c')]){_0x429af0[_0xcd49('0x3a')]=_[_0xcd49('0x3d')](_0x429af0[_0xcd49('0x3a')],{'$or':_[_0xcd49('0x5a')](_0x429af0[_0xcd49('0x35')],function(_0x3e20c5){var _0x5b5c93={};_0x5b5c93[_0x3e20c5]={'$like':'%'+_0x96a104[_0xcd49('0x31')]['filter']+'%'};return _0x5b5c93;})});}_0x429af0=_[_0xcd49('0x3d')]({},_0x429af0,_0x96a104['options']);return db['JscriptySessionReport'][_0xcd49('0x1f')]({'where':_0x429af0['where']})[_0xcd49('0x24')](function(_0x410ceb){_0x24bad9[_0xcd49('0x1f')]=_0x410ceb;if(_0x96a104[_0xcd49('0x31')]['includeAll']){_0x429af0[_0xcd49('0x42')]=[{'all':!![]}];}return db[_0xcd49('0x5b')][_0xcd49('0x43')](_0x429af0);})[_0xcd49('0x24')](function(_0x310ea4){_0x24bad9['rows']=_0x310ea4;return _0x24bad9;});}})[_0xcd49('0x24')](respondWithFilteredResult(_0x53c2d4,_0x429af0))[_0xcd49('0x45')](handleError(_0x53c2d4,null));};exports['getAnswers']=function(_0x590369,_0x523171,_0x59ca7){var _0x18df6a={'raw':!![],'where':{}};var _0x3b7c2f={};var _0x260826={'count':0x0,'rows':[]};return db['JscriptyProject'][_0xcd49('0x5c')]({'where':{'id':_0x590369[_0xcd49('0x47')]['id']}})['then'](handleEntityNotFound(_0x523171,null))[_0xcd49('0x24')](function(_0x3fea08){if(_0x3fea08){_0x3b7c2f['model']=_[_0xcd49('0x30')](db['JscriptyAnswerReport']['rawAttributes']);_0x3b7c2f[_0xcd49('0x31')]=_['keys'](_0x590369['query']);_0x3b7c2f[_0xcd49('0x32')]=_['intersection'](_0x3b7c2f[_0xcd49('0x2f')],_0x3b7c2f['query']);_0x18df6a[_0xcd49('0x35')]=_[_0xcd49('0x33')](_0x3b7c2f[_0xcd49('0x2f')],qs['fields'](_0x590369[_0xcd49('0x31')][_0xcd49('0x34')]));_0x18df6a[_0xcd49('0x35')]=_0x18df6a['attributes'][_0xcd49('0x36')]?_0x18df6a[_0xcd49('0x35')]:_0x3b7c2f['model'];if(!_0x590369[_0xcd49('0x31')]['hasOwnProperty'](_0xcd49('0x37'))){_0x18df6a[_0xcd49('0x21')]=qs[_0xcd49('0x21')](_0x590369[_0xcd49('0x31')]['limit']);_0x18df6a['offset']=qs[_0xcd49('0x20')](_0x590369[_0xcd49('0x31')][_0xcd49('0x20')]);}_0x18df6a[_0xcd49('0x38')]=qs[_0xcd49('0x39')](_0x590369[_0xcd49('0x31')][_0xcd49('0x39')]);_0x18df6a[_0xcd49('0x3a')]=qs[_0xcd49('0x32')](_[_0xcd49('0x3b')](_0x590369['query'],_0x3b7c2f[_0xcd49('0x32')]));_0x18df6a['where'][_0xcd49('0x59')]=_0x3fea08['id'];if(_0x590369[_0xcd49('0x31')][_0xcd49('0x3c')]){_0x18df6a['where']=_[_0xcd49('0x3d')](_0x18df6a['where'],{'$or':_['map'](_0x18df6a[_0xcd49('0x35')],function(_0x5452e5){var _0x4b6a89={};_0x4b6a89[_0x5452e5]={'$like':'%'+_0x590369[_0xcd49('0x31')][_0xcd49('0x3c')]+'%'};return _0x4b6a89;})});}_0x18df6a=_['merge']({},_0x18df6a,_0x590369[_0xcd49('0x41')]);return db[_0xcd49('0x5d')][_0xcd49('0x1f')]({'where':_0x18df6a[_0xcd49('0x3a')]})[_0xcd49('0x24')](function(_0x23fbbf){_0x260826[_0xcd49('0x1f')]=_0x23fbbf;if(_0x590369[_0xcd49('0x31')][_0xcd49('0x48')]){_0x18df6a['include']=[{'all':!![]}];}return db[_0xcd49('0x5d')]['findAll'](_0x18df6a);})[_0xcd49('0x24')](function(_0xd07a27){_0x260826[_0xcd49('0x44')]=_0xd07a27;return _0x260826;});}})['then'](respondWithFilteredResult(_0x523171,_0x18df6a))['catch'](handleError(_0x523171,null));};function char(_0xf06372){return _0xcd49('0x5e')===typeof _0xf06372?String[_0xcd49('0x5f')][_0xcd49('0x22')](null,arguments):_0xf06372;}function needsEncapsulation(_0xbb40d5){return!!_0xbb40d5&&(_0xbb40d5[_0xcd49('0x60')]()[_0xcd49('0x61')](char(0xd))>=0x0||_0xbb40d5[_0xcd49('0x60')]()[_0xcd49('0x61')](char(0xa))>=0x0||_0xbb40d5['toString']()[_0xcd49('0x61')](char(0x2c))>=0x0||_0xbb40d5[_0xcd49('0x60')]()[_0xcd49('0x61')](char(0x22))>=0x0);}function encapsulate(_0x33c9b0){var _0x5f09bb=char(0x22),_0x37b301='\x5c'+char(0x22),_0x98061b=_0x33c9b0[_0xcd49('0x60')]()[_0xcd49('0x62')](new RegExp(_0x5f09bb,'g'),_0x37b301);return _0x5f09bb+_0x98061b+_0x5f09bb;}exports['getSummary']=function(_0x5b9b9f,_0x54a7b6,_0x9da9cb){var _0x37d4a2,_0x21fdfb;var _0x420763={'where':{'ProjectId':_0x5b9b9f[_0xcd49('0x47')]['id']}};if(_0x5b9b9f['query'][_0xcd49('0x63')]){_0x420763[_0xcd49('0x3a')]['starttime']=JSON[_0xcd49('0x64')](_0x5b9b9f[_0xcd49('0x31')]['startTime']);}return db[_0xcd49('0x5b')][_0xcd49('0x43')](_0x420763)[_0xcd49('0x24')](handleEntityNotFound(_0x54a7b6,null))[_0xcd49('0x24')](function(_0x1478b3){if(_0x1478b3){_0x37d4a2=_0x1478b3;return db[_0xcd49('0x65')]['findAll']({'where':{'SessionId':{'$in':_[_0xcd49('0x5a')](_0x37d4a2,'id')},'ProjectId':_0x5b9b9f[_0xcd49('0x47')]['id']},'order':_0xcd49('0x66')});}})['then'](handleEntityNotFound(_0x54a7b6,null))[_0xcd49('0x24')](function(_0x2cff67){if(_0x2cff67){_0x21fdfb=_0x2cff67;var _0x54b89d={};for(var _0x448d99=0x0,_0x13b88a=_0x21fdfb[_0xcd49('0x36')];_0x448d99<_0x13b88a;_0x448d99++){if(!_0x54b89d[_0xcd49('0x58')](_0x21fdfb[_0x448d99]['questionId'])){_0x54b89d[_0x21fdfb[_0x448d99][_0xcd49('0x67')]]=needsEncapsulation(_0x21fdfb[_0x448d99][_0xcd49('0x68')])?encapsulate(_0x21fdfb[_0x448d99]['question']):_0x21fdfb[_0x448d99][_0xcd49('0x68')];}}var _0x30b994=[],_0x155b07={};for(var _0x266767=0x0,_0x38e3d2=_0x37d4a2[_0xcd49('0x36')];_0x266767<_0x38e3d2;_0x266767++){_0x155b07={'ProjectId':_0x5b9b9f[_0xcd49('0x47')]['id'],'SessionId':_0x37d4a2[_0x266767]['id'],'StartTime':moment(_0x37d4a2[_0x266767][_0xcd49('0x69')])[_0xcd49('0x6a')](_0xcd49('0x6b'))};for(var _0x58916b=0x0,_0x64e890=_0x21fdfb['length'];_0x58916b<_0x64e890;_0x58916b++){if(_0x21fdfb[_0x58916b][_0xcd49('0x6c')]==_0x37d4a2[_0x266767]['id']&&_0x54b89d['hasOwnProperty'](_0x21fdfb[_0x58916b][_0xcd49('0x67')])){_0x155b07[_0x54b89d[_0x21fdfb[_0x58916b][_0xcd49('0x67')]]]=_0x21fdfb[_0x58916b][_0xcd49('0x6d')];}}for(var _0x7810ef in _0x54b89d){if(!_0x155b07[_0xcd49('0x58')](_0x54b89d[_0x7810ef])){_0x155b07[_0x54b89d[_0x7810ef]]=null;}}_0x30b994[_0xcd49('0x6e')](_0x155b07);}return _0x30b994;}})[_0xcd49('0x24')](function(_0x33247b){if(!_['isEmpty'](_0x33247b)){var _0x23d662=toCsv(_0x33247b);var _0x5f2733=Date[_0xcd49('0x6f')]();fs[_0xcd49('0x70')](util[_0xcd49('0x6a')](_0xcd49('0x71'),_0x5b9b9f[_0xcd49('0x47')]['id'],_0x5f2733),_0x23d662);_0x54a7b6['setHeader'](_0xcd49('0x72'),_0xcd49('0x73')+util[_0xcd49('0x6a')](_0xcd49('0x74'),_0x5b9b9f['params']['id'],_0x5f2733));_0x54a7b6['setHeader']('Content-type',_0xcd49('0x75'));return _0x54a7b6['download'](util[_0xcd49('0x6a')](_0xcd49('0x71'),_0x5b9b9f[_0xcd49('0x47')]['id'],_0x5f2733));}else{return _0x54a7b6[_0xcd49('0x1b')](0xcc);}})[_0xcd49('0x45')](handleError(_0x54a7b6,null));};
\ No newline at end of file
index 8c79679..941800a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x38ec=['../../config/logger','api','moment','bluebird','request-promise','path','rimraf','./jscriptyProject.attributes','exports','define','JscriptyProject','jscripty_projects','lodash','util'];(function(_0x485bad,_0x21c418){var _0x523c91=function(_0x7393a4){while(--_0x7393a4){_0x485bad['push'](_0x485bad['shift']());}};_0x523c91(++_0x21c418);}(_0x38ec,0xfa));var _0xc38e=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x38ec[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0xc38e('0x0'));var util=require(_0xc38e('0x1'));var logger=require(_0xc38e('0x2'))(_0xc38e('0x3'));var moment=require(_0xc38e('0x4'));var BPromise=require(_0xc38e('0x5'));var rp=require(_0xc38e('0x6'));var fs=require('fs');var path=require(_0xc38e('0x7'));var rimraf=require(_0xc38e('0x8'));var config=require('../../config/environment');var attributes=require(_0xc38e('0x9'));module[_0xc38e('0xa')]=function(_0x1e9de4,_0x17e109){return _0x1e9de4[_0xc38e('0xb')](_0xc38e('0xc'),attributes,{'tableName':_0xc38e('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe626=['../../config/environment','define','jscripty_projects','lodash','util','../../config/logger','api','bluebird','request-promise','path','rimraf'];(function(_0x490661,_0x3f25cc){var _0x1408ca=function(_0x127446){while(--_0x127446){_0x490661['push'](_0x490661['shift']());}};_0x1408ca(++_0x3f25cc);}(_0xe626,0x9d));var _0x6e62=function(_0x731557,_0x5b1576){_0x731557=_0x731557-0x0;var _0x47e9c1=_0xe626[_0x731557];return _0x47e9c1;};'use strict';var _=require(_0x6e62('0x0'));var util=require(_0x6e62('0x1'));var logger=require(_0x6e62('0x2'))(_0x6e62('0x3'));var moment=require('moment');var BPromise=require(_0x6e62('0x4'));var rp=require(_0x6e62('0x5'));var fs=require('fs');var path=require(_0x6e62('0x6'));var rimraf=require(_0x6e62('0x7'));var config=require(_0x6e62('0x8'));var attributes=require('./jscriptyProject.attributes');module['exports']=function(_0x4a778d,_0x2ee927){return _0x4a778d[_0x6e62('0x9')]('JscriptyProject',attributes,{'tableName':_0x6e62('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 0b091f9..7ff4115 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3767=['http','then','JscriptyProject,\x20%s,\x20%s','request\x20sent','debug','JscriptyProject,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','util','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment'];(function(_0x31a371,_0x50828e){var _0x2a5bd6=function(_0x2fb481){while(--_0x2fb481){_0x31a371['push'](_0x31a371['shift']());}};_0x2a5bd6(++_0x50828e);}(_0x3767,0x77));var _0x7376=function(_0x2e0566,_0x4b8308){_0x2e0566=_0x2e0566-0x0;var _0x2ef7e9=_0x3767[_0x2e0566];return _0x2ef7e9;};'use strict';var _=require('lodash');var util=require(_0x7376('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7376('0x1'));var db=require(_0x7376('0x2'))['db'];var utils=require(_0x7376('0x3'));var logger=require(_0x7376('0x4'))(_0x7376('0x5'));var config=require(_0x7376('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0x7376('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x1b9925,_0x8fc0f9,_0x4ce298){return new BPromise(function(_0x1df5f0,_0x2a35a4){return client['request'](_0x1b9925,_0x4ce298)[_0x7376('0x8')](function(_0xe2fd88){logger['info'](_0x7376('0x9'),_0x8fc0f9,_0x7376('0xa'));logger[_0x7376('0xb')](_0x7376('0xc'),_0x8fc0f9,'request\x20sent',JSON[_0x7376('0xd')](_0xe2fd88));if(_0xe2fd88['error']){if(_0xe2fd88[_0x7376('0xe')]['code']===0x1f4){logger[_0x7376('0xe')]('JscriptyProject,\x20%s,\x20%s',_0x8fc0f9,_0xe2fd88[_0x7376('0xe')][_0x7376('0xf')]);return _0x2a35a4(_0xe2fd88['error'][_0x7376('0xf')]);}logger[_0x7376('0xe')]('JscriptyProject,\x20%s,\x20%s',_0x8fc0f9,_0xe2fd88[_0x7376('0xe')]['message']);return _0x1df5f0(_0xe2fd88[_0x7376('0xe')][_0x7376('0xf')]);}else{logger['info'](_0x7376('0x9'),_0x8fc0f9,'request\x20sent');_0x1df5f0(_0xe2fd88[_0x7376('0x10')]['message']);}})[_0x7376('0x11')](function(_0x4c2c15){logger['error']('JscriptyProject,\x20%s,\x20%s',_0x8fc0f9,_0x4c2c15);_0x2a35a4(_0x4c2c15);});});}
\ No newline at end of file
+var _0xc392=['../../config/logger','rpc','../../config/environment','jayson/promise','client','request','info','JscriptyProject,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','util','moment','bluebird','randomstring','ioredis','../../config/utils'];(function(_0x1928c9,_0x13a6d1){var _0x51b5fb=function(_0x24cf70){while(--_0x24cf70){_0x1928c9['push'](_0x1928c9['shift']());}};_0x51b5fb(++_0x13a6d1);}(_0xc392,0x1de));var _0x2c39=function(_0xeab850,_0x3c2a01){_0xeab850=_0xeab850-0x0;var _0x3f68d4=_0xc392[_0xeab850];return _0x3f68d4;};'use strict';var _=require('lodash');var util=require(_0x2c39('0x0'));var moment=require(_0x2c39('0x1'));var BPromise=require(_0x2c39('0x2'));var rs=require(_0x2c39('0x3'));var fs=require('fs');var Redis=require(_0x2c39('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x2c39('0x5'));var logger=require(_0x2c39('0x6'))(_0x2c39('0x7'));var config=require(_0x2c39('0x8'));var jayson=require(_0x2c39('0x9'));var client=jayson[_0x2c39('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1e8107,_0x5ed68d,_0x34d54d){return new BPromise(function(_0x549420,_0x4bf0f6){return client[_0x2c39('0xb')](_0x1e8107,_0x34d54d)['then'](function(_0x5dcbb3){logger[_0x2c39('0xc')](_0x2c39('0xd'),_0x5ed68d,_0x2c39('0xe'));logger[_0x2c39('0xf')]('JscriptyProject,\x20%s,\x20%s,\x20%s',_0x5ed68d,'request\x20sent',JSON[_0x2c39('0x10')](_0x5dcbb3));if(_0x5dcbb3[_0x2c39('0x11')]){if(_0x5dcbb3['error'][_0x2c39('0x12')]===0x1f4){logger[_0x2c39('0x11')](_0x2c39('0xd'),_0x5ed68d,_0x5dcbb3[_0x2c39('0x11')][_0x2c39('0x13')]);return _0x4bf0f6(_0x5dcbb3[_0x2c39('0x11')][_0x2c39('0x13')]);}logger[_0x2c39('0x11')](_0x2c39('0xd'),_0x5ed68d,_0x5dcbb3['error'][_0x2c39('0x13')]);return _0x549420(_0x5dcbb3[_0x2c39('0x11')]['message']);}else{logger[_0x2c39('0xc')](_0x2c39('0xd'),_0x5ed68d,_0x2c39('0xe'));_0x549420(_0x5dcbb3[_0x2c39('0x14')]['message']);}})[_0x2c39('0x15')](function(_0x152d35){logger[_0x2c39('0x11')](_0x2c39('0xd'),_0x5ed68d,_0x152d35);_0x4bf0f6(_0x152d35);});});}
\ No newline at end of file
index 1cc9502..5a6977f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x45f9=['util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./jscriptyQuestionReport.controller','get','isAuthenticated','index','/describe','describe','/:id','post','create','update','delete','destroy','exports','multer'];(function(_0x5a2f11,_0x2e706f){var _0x464984=function(_0x15cf53){while(--_0x15cf53){_0x5a2f11['push'](_0x5a2f11['shift']());}};_0x464984(++_0x2e706f);}(_0x45f9,0x1a3));var _0x945f=function(_0x403f4c,_0x34f9a7){_0x403f4c=_0x403f4c-0x0;var _0x4a94c8=_0x45f9[_0x403f4c];return _0x4a94c8;};'use strict';var multer=require(_0x945f('0x0'));var util=require(_0x945f('0x1'));var path=require(_0x945f('0x2'));var timeout=require('connect-timeout');var express=require(_0x945f('0x3'));var router=express[_0x945f('0x4')]();var auth=require(_0x945f('0x5'));var interaction=require(_0x945f('0x6'));var config=require(_0x945f('0x7'));var controller=require(_0x945f('0x8'));router[_0x945f('0x9')]('/',auth[_0x945f('0xa')](),controller[_0x945f('0xb')]);router[_0x945f('0x9')](_0x945f('0xc'),auth[_0x945f('0xa')](),controller[_0x945f('0xd')]);router['get'](_0x945f('0xe'),auth[_0x945f('0xa')](),controller['show']);router[_0x945f('0xf')]('/',auth[_0x945f('0xa')](),controller[_0x945f('0x10')]);router['put'](_0x945f('0xe'),auth[_0x945f('0xa')](),controller[_0x945f('0x11')]);router[_0x945f('0x12')]('/:id',auth['isAuthenticated'](),controller[_0x945f('0x13')]);module[_0x945f('0x14')]=router;
\ No newline at end of file
+var _0xc1ba=['destroy','exports','multer','util','path','connect-timeout','express','../../config/environment','./jscriptyQuestionReport.controller','get','isAuthenticated','post','create','put','/:id','update','delete'];(function(_0x5541ae,_0x4a902d){var _0x42adf6=function(_0x571a53){while(--_0x571a53){_0x5541ae['push'](_0x5541ae['shift']());}};_0x42adf6(++_0x4a902d);}(_0xc1ba,0x1bc));var _0xac1b=function(_0x4cdb2a,_0x34e4ec){_0x4cdb2a=_0x4cdb2a-0x0;var _0x1e0e2a=_0xc1ba[_0x4cdb2a];return _0x1e0e2a;};'use strict';var multer=require(_0xac1b('0x0'));var util=require(_0xac1b('0x1'));var path=require(_0xac1b('0x2'));var timeout=require(_0xac1b('0x3'));var express=require(_0xac1b('0x4'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xac1b('0x5'));var controller=require(_0xac1b('0x6'));router[_0xac1b('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0xac1b('0x7')]('/describe',auth[_0xac1b('0x8')](),controller['describe']);router['get']('/:id',auth[_0xac1b('0x8')](),controller['show']);router[_0xac1b('0x9')]('/',auth[_0xac1b('0x8')](),controller[_0xac1b('0xa')]);router[_0xac1b('0xb')](_0xac1b('0xc'),auth[_0xac1b('0x8')](),controller[_0xac1b('0xd')]);router[_0xac1b('0xe')](_0xac1b('0xc'),auth[_0xac1b('0x8')](),controller[_0xac1b('0xf')]);module[_0xac1b('0x10')]=router;
\ No newline at end of file
index 4b5ddf9..d83b7d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1491=['TEXT','sequelize','exports','STRING'];(function(_0x50c1ce,_0x5b35f2){var _0x45eb9d=function(_0x38111c){while(--_0x38111c){_0x50c1ce['push'](_0x50c1ce['shift']());}};_0x45eb9d(++_0x5b35f2);}(_0x1491,0x1b1));var _0x1149=function(_0x4c450c,_0x4de01a){_0x4c450c=_0x4c450c-0x0;var _0x139574=_0x1491[_0x4c450c];return _0x139574;};'use strict';var Sequelize=require(_0x1149('0x0'));module[_0x1149('0x1')]={'question':{'type':Sequelize[_0x1149('0x2')]},'answer':{'type':Sequelize[_0x1149('0x3')]('long')},'membername':{'type':Sequelize[_0x1149('0x2')]},'projectname':{'type':Sequelize[_0x1149('0x2')]},'queue':{'type':Sequelize[_0x1149('0x2')]},'uniqueid':{'type':Sequelize[_0x1149('0x2')]},'calleridname':{'type':Sequelize[_0x1149('0x2')]},'calleridnum':{'type':Sequelize[_0x1149('0x2')]},'questionId':{'type':Sequelize[_0x1149('0x2')]}};
\ No newline at end of file
+var _0x24cf=['long','STRING','TEXT'];(function(_0x35acb3,_0x8c74d7){var _0x3e2de8=function(_0x16f956){while(--_0x16f956){_0x35acb3['push'](_0x35acb3['shift']());}};_0x3e2de8(++_0x8c74d7);}(_0x24cf,0x1d5));var _0xf24c=function(_0x3395e0,_0x298a41){_0x3395e0=_0x3395e0-0x0;var _0x3882dc=_0x24cf[_0x3395e0];return _0x3882dc;};'use strict';var Sequelize=require('sequelize');module['exports']={'question':{'type':Sequelize[_0xf24c('0x0')]},'answer':{'type':Sequelize[_0xf24c('0x1')](_0xf24c('0x2'))},'membername':{'type':Sequelize[_0xf24c('0x0')]},'projectname':{'type':Sequelize[_0xf24c('0x0')]},'queue':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0xf24c('0x0')]},'calleridname':{'type':Sequelize[_0xf24c('0x0')]},'calleridnum':{'type':Sequelize[_0xf24c('0x0')]},'questionId':{'type':Sequelize[_0xf24c('0x0')]}};
\ No newline at end of file
index ad7a4ce..cff3fb9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc9c3=['include','findAll','catch','show','params','find','create','update','body','describe','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','json','limit','status','set','Content-Range','save','then','destroy','end','error','name','send','index','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','offset','order','sort','pick','filter','where','merge','type','key','field','options','JscriptyQuestionReport','count','includeAll'];(function(_0x150404,_0x52eb3c){var _0x3aa287=function(_0x586eb4){while(--_0x586eb4){_0x150404['push'](_0x150404['shift']());}};_0x3aa287(++_0x52eb3c);}(_0xc9c3,0x96));var _0x3c9c=function(_0x28b838,_0x2eb0d5){_0x28b838=_0x28b838-0x0;var _0x4b57d6=_0xc9c3[_0x28b838];return _0x4b57d6;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x3c9c('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0x3c9c('0x1'));var rp=require(_0x3c9c('0x2'));var moment=require(_0x3c9c('0x3'));var BPromise=require(_0x3c9c('0x4'));var Mustache=require(_0x3c9c('0x5'));var util=require(_0x3c9c('0x6'));var path=require(_0x3c9c('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x3c9c('0x8'));var squel=require(_0x3c9c('0x9'));var crypto=require(_0x3c9c('0xa'));var jsforce=require(_0x3c9c('0xb'));var deskjs=require(_0x3c9c('0xc'));var toCsv=require(_0x3c9c('0xd'));var querystring=require(_0x3c9c('0xe'));var Papa=require(_0x3c9c('0xf'));var Redis=require(_0x3c9c('0x10'));var authService=require(_0x3c9c('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x3c9c('0x12'));var logger=require(_0x3c9c('0x13'))('api');var utils=require(_0x3c9c('0x14'));var config=require('../../config/environment');var db=require(_0x3c9c('0x15'))['db'];function respondWithStatusCode(_0xff516c,_0x157c6c){_0x157c6c=_0x157c6c||0xcc;return function(_0x3f464d){if(_0x3f464d){return _0xff516c['sendStatus'](_0x157c6c);}return _0xff516c['status'](_0x157c6c)['end']();};}function respondWithResult(_0x857b1f,_0x59bbc6){_0x59bbc6=_0x59bbc6||0xc8;return function(_0x5e8c0e){if(_0x5e8c0e){return _0x857b1f['status'](_0x59bbc6)[_0x3c9c('0x16')](_0x5e8c0e);}};}function respondWithFilteredResult(_0x59d169,_0x3f1881){return function(_0xf16337){if(_0xf16337){var _0x1f725b=_0xf16337['count'],_0x824e63=_0x3f1881['offset'],_0x4a43d2=_0x3f1881['offset']+_0x3f1881[_0x3c9c('0x17')],_0x265cc2;if(_0x4a43d2>=_0x1f725b){_0x4a43d2=_0x1f725b;_0x265cc2=0xc8;}else{_0x265cc2=0xce;}_0x59d169[_0x3c9c('0x18')](_0x265cc2);return _0x59d169[_0x3c9c('0x19')](_0x3c9c('0x1a'),_0x824e63+'-'+_0x4a43d2+'/'+_0x1f725b)[_0x3c9c('0x16')](_0xf16337);}return null;};}function patchUpdates(_0x220b23){return function(_0x319f19){try{jsonpatch['apply'](_0x319f19,_0x220b23,!![]);}catch(_0x15a90a){return BPromise['reject'](_0x15a90a);}return _0x319f19[_0x3c9c('0x1b')]();};}function saveUpdates(_0x5a8502,_0x164fde){return function(_0x1152d5){if(_0x1152d5){return _0x1152d5['update'](_0x5a8502)[_0x3c9c('0x1c')](function(_0x29e4ac){return _0x29e4ac;});}return null;};}function removeEntity(_0x1e52a4,_0x50359a){return function(_0x3faad1){if(_0x3faad1){return _0x3faad1[_0x3c9c('0x1d')]()[_0x3c9c('0x1c')](function(){_0x1e52a4[_0x3c9c('0x18')](0xcc)[_0x3c9c('0x1e')]();});}};}function handleEntityNotFound(_0x3bc5c4,_0x338c2d){return function(_0x32e4c2){if(!_0x32e4c2){_0x3bc5c4['sendStatus'](0x194);}return _0x32e4c2;};}function handleError(_0x6ed08a,_0x4d58b9){_0x4d58b9=_0x4d58b9||0x1f4;return function(_0x497145){logger[_0x3c9c('0x1f')](_0x497145['stack']);if(_0x497145['name']){delete _0x497145[_0x3c9c('0x20')];}_0x6ed08a[_0x3c9c('0x18')](_0x4d58b9)[_0x3c9c('0x21')](_0x497145);};}exports[_0x3c9c('0x22')]=function(_0x4c283d,_0x32513f){var _0x65b831={},_0x4f69ed={},_0xafa3aa={'count':0x0,'rows':[]};var _0x4c97a3=db['JscriptyQuestionReport'][_0x3c9c('0x23')];_0x4f69ed[_0x3c9c('0x24')]=_[_0x3c9c('0x25')](_0x4c97a3);_0x4f69ed[_0x3c9c('0x26')]=_[_0x3c9c('0x25')](_0x4c283d['query']);_0x4f69ed[_0x3c9c('0x27')]=_['intersection'](_0x4f69ed[_0x3c9c('0x24')],_0x4f69ed[_0x3c9c('0x26')]);_0x65b831[_0x3c9c('0x28')]=_[_0x3c9c('0x29')](_0x4f69ed['model'],qs[_0x3c9c('0x2a')](_0x4c283d[_0x3c9c('0x26')][_0x3c9c('0x2a')]));_0x65b831[_0x3c9c('0x28')]=_0x65b831[_0x3c9c('0x28')][_0x3c9c('0x2b')]?_0x65b831[_0x3c9c('0x28')]:_0x4f69ed[_0x3c9c('0x24')];if(!_0x4c283d['query'][_0x3c9c('0x2c')](_0x3c9c('0x2d'))){_0x65b831[_0x3c9c('0x17')]=qs[_0x3c9c('0x17')](_0x4c283d[_0x3c9c('0x26')][_0x3c9c('0x17')]);_0x65b831[_0x3c9c('0x2e')]=qs[_0x3c9c('0x2e')](_0x4c283d[_0x3c9c('0x26')][_0x3c9c('0x2e')]);}_0x65b831[_0x3c9c('0x2f')]=qs[_0x3c9c('0x30')](_0x4c283d[_0x3c9c('0x26')][_0x3c9c('0x30')]);_0x65b831['where']=qs[_0x3c9c('0x27')](_[_0x3c9c('0x31')](_0x4c283d[_0x3c9c('0x26')],_0x4f69ed['filters']));if(_0x4c283d[_0x3c9c('0x26')][_0x3c9c('0x32')]){_0x65b831[_0x3c9c('0x33')]=_[_0x3c9c('0x34')](_0x65b831['where'],{'$or':_['map'](_0x4c97a3,function(_0x402420){if(_0x402420[_0x3c9c('0x35')][_0x3c9c('0x36')]!=='VIRTUAL'){var _0x5e1582={};_0x5e1582[_0x402420[_0x3c9c('0x37')]]={'$like':'%'+_0x4c283d['query']['filter']+'%'};return _0x5e1582;}})});}_0x65b831=_[_0x3c9c('0x34')]({},_0x65b831,_0x4c283d[_0x3c9c('0x38')]);var _0x228c3c={'where':_0x65b831['where']};return db[_0x3c9c('0x39')][_0x3c9c('0x3a')](_0x228c3c)[_0x3c9c('0x1c')](function(_0x5203b4){_0xafa3aa['count']=_0x5203b4;if(_0x4c283d['query'][_0x3c9c('0x3b')]){_0x65b831[_0x3c9c('0x3c')]=[{'all':!![]}];}return db[_0x3c9c('0x39')][_0x3c9c('0x3d')](_0x65b831);})[_0x3c9c('0x1c')](function(_0x1125ff){_0xafa3aa['rows']=_0x1125ff;return _0xafa3aa;})['then'](respondWithFilteredResult(_0x32513f,_0x65b831))[_0x3c9c('0x3e')](handleError(_0x32513f,null));};exports[_0x3c9c('0x3f')]=function(_0xe23844,_0x5258ba){var _0xc7823a={'raw':!![],'where':{'id':_0xe23844[_0x3c9c('0x40')]['id']}},_0x1037e7={};_0x1037e7['model']=_['keys'](db[_0x3c9c('0x39')][_0x3c9c('0x23')]);_0x1037e7[_0x3c9c('0x26')]=_['keys'](_0xe23844[_0x3c9c('0x26')]);_0x1037e7[_0x3c9c('0x27')]=_[_0x3c9c('0x29')](_0x1037e7[_0x3c9c('0x24')],_0x1037e7['query']);_0xc7823a[_0x3c9c('0x28')]=_[_0x3c9c('0x29')](_0x1037e7['model'],qs['fields'](_0xe23844[_0x3c9c('0x26')][_0x3c9c('0x2a')]));_0xc7823a['attributes']=_0xc7823a[_0x3c9c('0x28')][_0x3c9c('0x2b')]?_0xc7823a[_0x3c9c('0x28')]:_0x1037e7[_0x3c9c('0x24')];if(_0xe23844[_0x3c9c('0x26')][_0x3c9c('0x3b')]){_0xc7823a['include']=[{'all':!![]}];}_0xc7823a=_[_0x3c9c('0x34')]({},_0xc7823a,_0xe23844[_0x3c9c('0x38')]);return db[_0x3c9c('0x39')][_0x3c9c('0x41')](_0xc7823a)[_0x3c9c('0x1c')](handleEntityNotFound(_0x5258ba,null))['then'](respondWithResult(_0x5258ba,null))['catch'](handleError(_0x5258ba,null));};exports[_0x3c9c('0x42')]=function(_0x3ff47a,_0x1da3e7){return db[_0x3c9c('0x39')][_0x3c9c('0x42')](_0x3ff47a['body'],{})[_0x3c9c('0x1c')](respondWithResult(_0x1da3e7,0xc9))[_0x3c9c('0x3e')](handleError(_0x1da3e7,null));};exports[_0x3c9c('0x43')]=function(_0x222ffa,_0xcd7ebc){if(_0x222ffa['body']['id']){delete _0x222ffa[_0x3c9c('0x44')]['id'];}return db[_0x3c9c('0x39')][_0x3c9c('0x41')]({'where':{'id':_0x222ffa[_0x3c9c('0x40')]['id']}})[_0x3c9c('0x1c')](handleEntityNotFound(_0xcd7ebc,null))[_0x3c9c('0x1c')](saveUpdates(_0x222ffa[_0x3c9c('0x44')],null))['then'](respondWithResult(_0xcd7ebc,null))[_0x3c9c('0x3e')](handleError(_0xcd7ebc,null));};exports[_0x3c9c('0x1d')]=function(_0xbcf5fb,_0x278f77){return db[_0x3c9c('0x39')][_0x3c9c('0x41')]({'where':{'id':_0xbcf5fb['params']['id']}})[_0x3c9c('0x1c')](handleEntityNotFound(_0x278f77,null))[_0x3c9c('0x1c')](removeEntity(_0x278f77,null))[_0x3c9c('0x3e')](handleError(_0x278f77,null));};exports[_0x3c9c('0x45')]=function(_0x28399b,_0x438a73){return db[_0x3c9c('0x39')][_0x3c9c('0x45')]()[_0x3c9c('0x1c')](respondWithResult(_0x438a73,null))[_0x3c9c('0x3e')](handleError(_0x438a73,null));};
\ No newline at end of file
+var _0x770d=['sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','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','save','update','then','end','error','stack','send','index','JscriptyQuestionReport','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','options','count','includeAll','include','findAll','catch','show','rawAttributes','create','body','params','destroy','find','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path'];(function(_0x48c713,_0x3139bb){var _0x59c6f3=function(_0x3723c3){while(--_0x3723c3){_0x48c713['push'](_0x48c713['shift']());}};_0x59c6f3(++_0x3139bb);}(_0x770d,0x122));var _0xd770=function(_0x49689f,_0x3f19cf){_0x49689f=_0x49689f-0x0;var _0x23d755=_0x770d[_0x49689f];return _0x23d755;};'use strict';var pdf=require(_0xd770('0x0'));var emlformat=require(_0xd770('0x1'));var rimraf=require(_0xd770('0x2'));var zipdir=require(_0xd770('0x3'));var jsonpatch=require(_0xd770('0x4'));var rp=require(_0xd770('0x5'));var moment=require(_0xd770('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xd770('0x7'));var util=require(_0xd770('0x8'));var path=require(_0xd770('0x9'));var sox=require(_0xd770('0xa'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xd770('0xb'));var squel=require(_0xd770('0xc'));var crypto=require(_0xd770('0xd'));var jsforce=require(_0xd770('0xe'));var deskjs=require(_0xd770('0xf'));var toCsv=require(_0xd770('0x10'));var querystring=require(_0xd770('0x11'));var Papa=require('papaparse');var Redis=require(_0xd770('0x12'));var authService=require(_0xd770('0x13'));var qs=require(_0xd770('0x14'));var hardwareService=require(_0xd770('0x15'));var logger=require(_0xd770('0x16'))('api');var utils=require(_0xd770('0x17'));var config=require(_0xd770('0x18'));var db=require(_0xd770('0x19'))['db'];function respondWithStatusCode(_0x3ef9d8,_0x285521){_0x285521=_0x285521||0xcc;return function(_0x25f443){if(_0x25f443){return _0x3ef9d8[_0xd770('0x1a')](_0x285521);}return _0x3ef9d8[_0xd770('0x1b')](_0x285521)['end']();};}function respondWithResult(_0x4875f1,_0x28120b){_0x28120b=_0x28120b||0xc8;return function(_0x2b415c){if(_0x2b415c){return _0x4875f1[_0xd770('0x1b')](_0x28120b)[_0xd770('0x1c')](_0x2b415c);}};}function respondWithFilteredResult(_0x51dacf,_0x2f6832){return function(_0x3babaf){if(_0x3babaf){var _0x323dec=_0x3babaf['count'],_0x1249f2=_0x2f6832[_0xd770('0x1d')],_0x47a84f=_0x2f6832[_0xd770('0x1d')]+_0x2f6832[_0xd770('0x1e')],_0xb759ea;if(_0x47a84f>=_0x323dec){_0x47a84f=_0x323dec;_0xb759ea=0xc8;}else{_0xb759ea=0xce;}_0x51dacf[_0xd770('0x1b')](_0xb759ea);return _0x51dacf[_0xd770('0x1f')](_0xd770('0x20'),_0x1249f2+'-'+_0x47a84f+'/'+_0x323dec)[_0xd770('0x1c')](_0x3babaf);}return null;};}function patchUpdates(_0x247cbb){return function(_0x42964b){try{jsonpatch['apply'](_0x42964b,_0x247cbb,!![]);}catch(_0x22968f){return BPromise['reject'](_0x22968f);}return _0x42964b[_0xd770('0x21')]();};}function saveUpdates(_0x5d802e,_0x28ac07){return function(_0x25e076){if(_0x25e076){return _0x25e076[_0xd770('0x22')](_0x5d802e)[_0xd770('0x23')](function(_0x434c4f){return _0x434c4f;});}return null;};}function removeEntity(_0x499dc1,_0x178b3c){return function(_0x108841){if(_0x108841){return _0x108841['destroy']()[_0xd770('0x23')](function(){_0x499dc1[_0xd770('0x1b')](0xcc)[_0xd770('0x24')]();});}};}function handleEntityNotFound(_0x1b9aa4,_0x53907e){return function(_0x9f81ea){if(!_0x9f81ea){_0x1b9aa4[_0xd770('0x1a')](0x194);}return _0x9f81ea;};}function handleError(_0x1b404d,_0x398ebf){_0x398ebf=_0x398ebf||0x1f4;return function(_0x48b423){logger[_0xd770('0x25')](_0x48b423[_0xd770('0x26')]);if(_0x48b423['name']){delete _0x48b423['name'];}_0x1b404d[_0xd770('0x1b')](_0x398ebf)[_0xd770('0x27')](_0x48b423);};}exports[_0xd770('0x28')]=function(_0x266e80,_0x15d849){var _0x112aaf={},_0x46bf88={},_0x49ef4d={'count':0x0,'rows':[]};var _0x1094c0=db[_0xd770('0x29')]['rawAttributes'];_0x46bf88['model']=_[_0xd770('0x2a')](_0x1094c0);_0x46bf88[_0xd770('0x2b')]=_['keys'](_0x266e80[_0xd770('0x2b')]);_0x46bf88[_0xd770('0x2c')]=_[_0xd770('0x2d')](_0x46bf88[_0xd770('0x2e')],_0x46bf88['query']);_0x112aaf[_0xd770('0x2f')]=_['intersection'](_0x46bf88['model'],qs[_0xd770('0x30')](_0x266e80[_0xd770('0x2b')]['fields']));_0x112aaf['attributes']=_0x112aaf[_0xd770('0x2f')][_0xd770('0x31')]?_0x112aaf['attributes']:_0x46bf88[_0xd770('0x2e')];if(!_0x266e80[_0xd770('0x2b')][_0xd770('0x32')](_0xd770('0x33'))){_0x112aaf['limit']=qs[_0xd770('0x1e')](_0x266e80['query'][_0xd770('0x1e')]);_0x112aaf[_0xd770('0x1d')]=qs[_0xd770('0x1d')](_0x266e80[_0xd770('0x2b')][_0xd770('0x1d')]);}_0x112aaf[_0xd770('0x34')]=qs[_0xd770('0x35')](_0x266e80[_0xd770('0x2b')]['sort']);_0x112aaf[_0xd770('0x36')]=qs['filters'](_[_0xd770('0x37')](_0x266e80['query'],_0x46bf88[_0xd770('0x2c')]));if(_0x266e80[_0xd770('0x2b')][_0xd770('0x38')]){_0x112aaf[_0xd770('0x36')]=_[_0xd770('0x39')](_0x112aaf[_0xd770('0x36')],{'$or':_[_0xd770('0x3a')](_0x1094c0,function(_0x15d7d0){if(_0x15d7d0[_0xd770('0x3b')][_0xd770('0x3c')]!==_0xd770('0x3d')){var _0x28277b={};_0x28277b[_0x15d7d0['field']]={'$like':'%'+_0x266e80[_0xd770('0x2b')][_0xd770('0x38')]+'%'};return _0x28277b;}})});}_0x112aaf=_['merge']({},_0x112aaf,_0x266e80[_0xd770('0x3e')]);var _0x1bb4b1={'where':_0x112aaf['where']};return db['JscriptyQuestionReport'][_0xd770('0x3f')](_0x1bb4b1)[_0xd770('0x23')](function(_0x5cdec9){_0x49ef4d[_0xd770('0x3f')]=_0x5cdec9;if(_0x266e80[_0xd770('0x2b')][_0xd770('0x40')]){_0x112aaf[_0xd770('0x41')]=[{'all':!![]}];}return db[_0xd770('0x29')][_0xd770('0x42')](_0x112aaf);})[_0xd770('0x23')](function(_0x52bddd){_0x49ef4d['rows']=_0x52bddd;return _0x49ef4d;})[_0xd770('0x23')](respondWithFilteredResult(_0x15d849,_0x112aaf))[_0xd770('0x43')](handleError(_0x15d849,null));};exports[_0xd770('0x44')]=function(_0x98a8a8,_0x14ff51){var _0x9dbb63={'raw':!![],'where':{'id':_0x98a8a8['params']['id']}},_0x4ae685={};_0x4ae685[_0xd770('0x2e')]=_[_0xd770('0x2a')](db[_0xd770('0x29')][_0xd770('0x45')]);_0x4ae685['query']=_[_0xd770('0x2a')](_0x98a8a8['query']);_0x4ae685[_0xd770('0x2c')]=_['intersection'](_0x4ae685[_0xd770('0x2e')],_0x4ae685['query']);_0x9dbb63[_0xd770('0x2f')]=_[_0xd770('0x2d')](_0x4ae685[_0xd770('0x2e')],qs[_0xd770('0x30')](_0x98a8a8[_0xd770('0x2b')][_0xd770('0x30')]));_0x9dbb63[_0xd770('0x2f')]=_0x9dbb63[_0xd770('0x2f')][_0xd770('0x31')]?_0x9dbb63['attributes']:_0x4ae685['model'];if(_0x98a8a8[_0xd770('0x2b')]['includeAll']){_0x9dbb63[_0xd770('0x41')]=[{'all':!![]}];}_0x9dbb63=_[_0xd770('0x39')]({},_0x9dbb63,_0x98a8a8[_0xd770('0x3e')]);return db[_0xd770('0x29')]['find'](_0x9dbb63)[_0xd770('0x23')](handleEntityNotFound(_0x14ff51,null))[_0xd770('0x23')](respondWithResult(_0x14ff51,null))[_0xd770('0x43')](handleError(_0x14ff51,null));};exports[_0xd770('0x46')]=function(_0x40ceff,_0x3c3e25){return db[_0xd770('0x29')][_0xd770('0x46')](_0x40ceff['body'],{})[_0xd770('0x23')](respondWithResult(_0x3c3e25,0xc9))[_0xd770('0x43')](handleError(_0x3c3e25,null));};exports[_0xd770('0x22')]=function(_0x3e3650,_0x2bce6d){if(_0x3e3650['body']['id']){delete _0x3e3650[_0xd770('0x47')]['id'];}return db[_0xd770('0x29')]['find']({'where':{'id':_0x3e3650[_0xd770('0x48')]['id']}})[_0xd770('0x23')](handleEntityNotFound(_0x2bce6d,null))['then'](saveUpdates(_0x3e3650[_0xd770('0x47')],null))[_0xd770('0x23')](respondWithResult(_0x2bce6d,null))[_0xd770('0x43')](handleError(_0x2bce6d,null));};exports[_0xd770('0x49')]=function(_0x4de5e4,_0x312e63){return db[_0xd770('0x29')][_0xd770('0x4a')]({'where':{'id':_0x4de5e4[_0xd770('0x48')]['id']}})[_0xd770('0x23')](handleEntityNotFound(_0x312e63,null))[_0xd770('0x23')](removeEntity(_0x312e63,null))[_0xd770('0x43')](handleError(_0x312e63,null));};exports['describe']=function(_0xcda308,_0xa91b71){return db[_0xd770('0x29')]['describe']()[_0xd770('0x23')](respondWithResult(_0xa91b71,null))[_0xd770('0x43')](handleError(_0xa91b71,null));};
\ No newline at end of file
index 70c2773..b5ceec8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf44a=['exports','define','JscriptyQuestionReport','report_jscripty_questions','lodash','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./jscriptyQuestionReport.attributes'];(function(_0x243cca,_0x5009bf){var _0xce4f84=function(_0x5d5b78){while(--_0x5d5b78){_0x243cca['push'](_0x243cca['shift']());}};_0xce4f84(++_0x5009bf);}(_0xf44a,0x1c4));var _0xaf44=function(_0x25cfc2,_0x5a5776){_0x25cfc2=_0x25cfc2-0x0;var _0x34ffba=_0xf44a[_0x25cfc2];return _0x34ffba;};'use strict';var _=require(_0xaf44('0x0'));var util=require('util');var logger=require(_0xaf44('0x1'))(_0xaf44('0x2'));var moment=require(_0xaf44('0x3'));var BPromise=require(_0xaf44('0x4'));var rp=require(_0xaf44('0x5'));var fs=require('fs');var path=require(_0xaf44('0x6'));var rimraf=require(_0xaf44('0x7'));var config=require(_0xaf44('0x8'));var attributes=require(_0xaf44('0x9'));module[_0xaf44('0xa')]=function(_0x1d1b5f,_0x3f7a28){return _0x1d1b5f[_0xaf44('0xb')](_0xaf44('0xc'),attributes,{'tableName':_0xaf44('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x49bb=['../../config/environment','./jscriptyQuestionReport.attributes','define','JscriptyQuestionReport','report_jscripty_questions','../../config/logger','bluebird','request-promise','path','rimraf'];(function(_0x3c7784,_0x3ded77){var _0x270d4a=function(_0xc3d6cf){while(--_0xc3d6cf){_0x3c7784['push'](_0x3c7784['shift']());}};_0x270d4a(++_0x3ded77);}(_0x49bb,0x13b));var _0xb49b=function(_0x311b17,_0x11d42c){_0x311b17=_0x311b17-0x0;var _0x46014a=_0x49bb[_0x311b17];return _0x46014a;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xb49b('0x0'))('api');var moment=require('moment');var BPromise=require(_0xb49b('0x1'));var rp=require(_0xb49b('0x2'));var fs=require('fs');var path=require(_0xb49b('0x3'));var rimraf=require(_0xb49b('0x4'));var config=require(_0xb49b('0x5'));var attributes=require(_0xb49b('0x6'));module['exports']=function(_0x1963b7,_0x4d5f29){return _0x1963b7[_0xb49b('0x7')](_0xb49b('0x8'),attributes,{'tableName':_0xb49b('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 836e782..ed5a574 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb69c=['request','then','info','JscriptyQuestionReport,\x20%s,\x20%s','request\x20sent','JscriptyQuestionReport,\x20%s,\x20%s,\x20%s','error','code','message','result','util','moment','bluebird','randomstring','../../config/logger','rpc','../../config/environment','jayson/promise','client','http'];(function(_0x2b4411,_0x2625ed){var _0x8e41ef=function(_0x2aa8c1){while(--_0x2aa8c1){_0x2b4411['push'](_0x2b4411['shift']());}};_0x8e41ef(++_0x2625ed);}(_0xb69c,0x14a));var _0xcb69=function(_0x513a58,_0x10a01e){_0x513a58=_0x513a58-0x0;var _0x16f938=_0xb69c[_0x513a58];return _0x16f938;};'use strict';var _=require('lodash');var util=require(_0xcb69('0x0'));var moment=require(_0xcb69('0x1'));var BPromise=require(_0xcb69('0x2'));var rs=require(_0xcb69('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xcb69('0x4'))(_0xcb69('0x5'));var config=require(_0xcb69('0x6'));var jayson=require(_0xcb69('0x7'));var client=jayson[_0xcb69('0x8')][_0xcb69('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x192532,_0xe5a956,_0x474fee){return new BPromise(function(_0x352d19,_0x36ad72){return client[_0xcb69('0xa')](_0x192532,_0x474fee)[_0xcb69('0xb')](function(_0xf627e2){logger[_0xcb69('0xc')](_0xcb69('0xd'),_0xe5a956,_0xcb69('0xe'));logger['debug'](_0xcb69('0xf'),_0xe5a956,_0xcb69('0xe'),JSON['stringify'](_0xf627e2));if(_0xf627e2[_0xcb69('0x10')]){if(_0xf627e2['error'][_0xcb69('0x11')]===0x1f4){logger[_0xcb69('0x10')](_0xcb69('0xd'),_0xe5a956,_0xf627e2['error'][_0xcb69('0x12')]);return _0x36ad72(_0xf627e2[_0xcb69('0x10')][_0xcb69('0x12')]);}logger[_0xcb69('0x10')]('JscriptyQuestionReport,\x20%s,\x20%s',_0xe5a956,_0xf627e2[_0xcb69('0x10')][_0xcb69('0x12')]);return _0x352d19(_0xf627e2[_0xcb69('0x10')][_0xcb69('0x12')]);}else{logger[_0xcb69('0xc')](_0xcb69('0xd'),_0xe5a956,_0xcb69('0xe'));_0x352d19(_0xf627e2[_0xcb69('0x13')][_0xcb69('0x12')]);}})['catch'](function(_0x1f7ee4){logger[_0xcb69('0x10')](_0xcb69('0xd'),_0xe5a956,_0x1f7ee4);_0x36ad72(_0x1f7ee4);});});}
\ No newline at end of file
+var _0x962c=['jayson/promise','client','http','request','then','info','request\x20sent','JscriptyQuestionReport,\x20%s,\x20%s,\x20%s','stringify','error','code','JscriptyQuestionReport,\x20%s,\x20%s','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/environment'];(function(_0xe4d6c6,_0x3bdbf2){var _0x3a8935=function(_0x131483){while(--_0x131483){_0xe4d6c6['push'](_0xe4d6c6['shift']());}};_0x3a8935(++_0x3bdbf2);}(_0x962c,0xe7));var _0xc962=function(_0x35dfe4,_0x41b59a){_0x35dfe4=_0x35dfe4-0x0;var _0x3a2197=_0x962c[_0x35dfe4];return _0x3a2197;};'use strict';var _=require(_0xc962('0x0'));var util=require(_0xc962('0x1'));var moment=require(_0xc962('0x2'));var BPromise=require(_0xc962('0x3'));var rs=require(_0xc962('0x4'));var fs=require('fs');var Redis=require(_0xc962('0x5'));var db=require(_0xc962('0x6'))['db'];var utils=require(_0xc962('0x7'));var logger=require('../../config/logger')('rpc');var config=require(_0xc962('0x8'));var jayson=require(_0xc962('0x9'));var client=jayson[_0xc962('0xa')][_0xc962('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x4cd824,_0x17b4f4,_0x5a1075){return new BPromise(function(_0x5dbc17,_0x1b66c3){return client[_0xc962('0xc')](_0x4cd824,_0x5a1075)[_0xc962('0xd')](function(_0x4612fd){logger[_0xc962('0xe')]('JscriptyQuestionReport,\x20%s,\x20%s',_0x17b4f4,_0xc962('0xf'));logger['debug'](_0xc962('0x10'),_0x17b4f4,_0xc962('0xf'),JSON[_0xc962('0x11')](_0x4612fd));if(_0x4612fd[_0xc962('0x12')]){if(_0x4612fd[_0xc962('0x12')][_0xc962('0x13')]===0x1f4){logger[_0xc962('0x12')](_0xc962('0x14'),_0x17b4f4,_0x4612fd[_0xc962('0x12')][_0xc962('0x15')]);return _0x1b66c3(_0x4612fd[_0xc962('0x12')][_0xc962('0x15')]);}logger[_0xc962('0x12')](_0xc962('0x14'),_0x17b4f4,_0x4612fd[_0xc962('0x12')][_0xc962('0x15')]);return _0x5dbc17(_0x4612fd[_0xc962('0x12')][_0xc962('0x15')]);}else{logger[_0xc962('0xe')](_0xc962('0x14'),_0x17b4f4,'request\x20sent');_0x5dbc17(_0x4612fd[_0xc962('0x16')][_0xc962('0x15')]);}})[_0xc962('0x17')](function(_0x4f81a8){logger['error'](_0xc962('0x14'),_0x17b4f4,_0x4f81a8);_0x1b66c3(_0x4f81a8);});});}
\ No newline at end of file
index b4faf29..1187828 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6312=['create','put','update','delete','/:id','destroy','exports','multer','util','connect-timeout','express','../../components/auth/service','../../config/environment','./jscriptySessionReport.controller','isAuthenticated','get','/describe','describe','show','getQuestions','post'];(function(_0x837dad,_0x1d9098){var _0x1d62d3=function(_0x40b7c1){while(--_0x40b7c1){_0x837dad['push'](_0x837dad['shift']());}};_0x1d62d3(++_0x1d9098);}(_0x6312,0x1d5));var _0x2631=function(_0xb7bd86,_0x5d1ecb){_0xb7bd86=_0xb7bd86-0x0;var _0x3ab692=_0x6312[_0xb7bd86];return _0x3ab692;};'use strict';var multer=require(_0x2631('0x0'));var util=require(_0x2631('0x1'));var path=require('path');var timeout=require(_0x2631('0x2'));var express=require(_0x2631('0x3'));var router=express['Router']();var auth=require(_0x2631('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x2631('0x5'));var controller=require(_0x2631('0x6'));router['get']('/',auth[_0x2631('0x7')](),controller['index']);router[_0x2631('0x8')](_0x2631('0x9'),auth[_0x2631('0x7')](),controller[_0x2631('0xa')]);router['get']('/:id',auth[_0x2631('0x7')](),controller[_0x2631('0xb')]);router[_0x2631('0x8')]('/:id/questions',auth[_0x2631('0x7')](),controller[_0x2631('0xc')]);router[_0x2631('0xd')]('/',auth[_0x2631('0x7')](),controller[_0x2631('0xe')]);router[_0x2631('0xf')]('/:id',auth[_0x2631('0x7')](),controller[_0x2631('0x10')]);router[_0x2631('0x11')](_0x2631('0x12'),auth[_0x2631('0x7')](),controller[_0x2631('0x13')]);module[_0x2631('0x14')]=router;
\ No newline at end of file
+var _0x976c=['connect-timeout','../../components/interaction/service','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/questions','getQuestions','post','create','put','update','delete','multer','util','path'];(function(_0xfd1fcd,_0x3182b7){var _0x1e0646=function(_0x4f4fa4){while(--_0x4f4fa4){_0xfd1fcd['push'](_0xfd1fcd['shift']());}};_0x1e0646(++_0x3182b7);}(_0x976c,0x11a));var _0xc976=function(_0x2a7e98,_0x54fdc6){_0x2a7e98=_0x2a7e98-0x0;var _0x5a1f6d=_0x976c[_0x2a7e98];return _0x5a1f6d;};'use strict';var multer=require(_0xc976('0x0'));var util=require(_0xc976('0x1'));var path=require(_0xc976('0x2'));var timeout=require(_0xc976('0x3'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xc976('0x4'));var config=require('../../config/environment');var controller=require('./jscriptySessionReport.controller');router[_0xc976('0x5')]('/',auth[_0xc976('0x6')](),controller[_0xc976('0x7')]);router[_0xc976('0x5')](_0xc976('0x8'),auth['isAuthenticated'](),controller[_0xc976('0x9')]);router['get'](_0xc976('0xa'),auth[_0xc976('0x6')](),controller[_0xc976('0xb')]);router[_0xc976('0x5')](_0xc976('0xc'),auth['isAuthenticated'](),controller[_0xc976('0xd')]);router[_0xc976('0xe')]('/',auth[_0xc976('0x6')](),controller[_0xc976('0xf')]);router[_0xc976('0x10')](_0xc976('0xa'),auth[_0xc976('0x6')](),controller[_0xc976('0x11')]);router[_0xc976('0x12')](_0xc976('0xa'),auth[_0xc976('0x6')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index e14a4b3..a3c7bf6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x361a=['exports','DATE','setDataValue','starttime','endtime','format','YYYY-MM-DD\x20HH:mm:ss','STRING','moment','sequelize'];(function(_0x1d9aa0,_0x272488){var _0x226868=function(_0x17127c){while(--_0x17127c){_0x1d9aa0['push'](_0x1d9aa0['shift']());}};_0x226868(++_0x272488);}(_0x361a,0x102));var _0xa361=function(_0x862bf5,_0x2d04e8){_0x862bf5=_0x862bf5-0x0;var _0x27151a=_0x361a[_0x862bf5];return _0x27151a;};'use strict';var moment=require(_0xa361('0x0'));var Sequelize=require(_0xa361('0x1'));module[_0xa361('0x2')]={'starttime':{'type':Sequelize[_0xa361('0x3')],'set':function(_0x531e30){this[_0xa361('0x4')](_0xa361('0x5'),_0x531e30);this[_0xa361('0x4')](_0xa361('0x6'),moment()[_0xa361('0x7')](_0xa361('0x8')));}},'endtime':{'type':Sequelize[_0xa361('0x3')]},'membername':{'type':Sequelize[_0xa361('0x9')]},'projectname':{'type':Sequelize[_0xa361('0x9')]},'queue':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0xa361('0x9')]},'calleridname':{'type':Sequelize[_0xa361('0x9')]},'calleridnum':{'type':Sequelize[_0xa361('0x9')]},'completed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
+var _0x70f9=['starttime','endtime','YYYY-MM-DD\x20HH:mm:ss','STRING','BOOLEAN','exports','DATE'];(function(_0x2e572c,_0xade08d){var _0x8576b7=function(_0x5ed659){while(--_0x5ed659){_0x2e572c['push'](_0x2e572c['shift']());}};_0x8576b7(++_0xade08d);}(_0x70f9,0x14e));var _0x970f=function(_0x101ccf,_0x37e172){_0x101ccf=_0x101ccf-0x0;var _0x99b0f1=_0x70f9[_0x101ccf];return _0x99b0f1;};'use strict';var moment=require('moment');var Sequelize=require('sequelize');module[_0x970f('0x0')]={'starttime':{'type':Sequelize[_0x970f('0x1')],'set':function(_0x36648e){this['setDataValue'](_0x970f('0x2'),_0x36648e);this['setDataValue'](_0x970f('0x3'),moment()['format'](_0x970f('0x4')));}},'endtime':{'type':Sequelize[_0x970f('0x1')]},'membername':{'type':Sequelize[_0x970f('0x5')]},'projectname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0x970f('0x5')]},'uniqueid':{'type':Sequelize[_0x970f('0x5')]},'calleridname':{'type':Sequelize[_0x970f('0x5')]},'calleridnum':{'type':Sequelize[_0x970f('0x5')]},'completed':{'type':Sequelize[_0x970f('0x6')],'defaultValue':![]}};
\ No newline at end of file
index c3e9289..787d10f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc73d=['findAll','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','Content-Range','update','then','error','stack','name','send','index','JscriptySessionReport','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','merge','map','type','key','VIRTUAL','field','options','includeAll','include','rows','catch','show','params','find','create','body','destroy','describe','getQuestions','findOne','order','SessionId','filter','JscriptyQuestionReport'];(function(_0x510159,_0x34d45e){var _0x40ca11=function(_0x165bbb){while(--_0x165bbb){_0x510159['push'](_0x510159['shift']());}};_0x40ca11(++_0x34d45e);}(_0xc73d,0x9f));var _0xdc73=function(_0x3a965a,_0x432e3a){_0x3a965a=_0x3a965a-0x0;var _0x31c1d2=_0xc73d[_0x3a965a];return _0x31c1d2;};'use strict';var pdf=require(_0xdc73('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xdc73('0x1'));var zipdir=require(_0xdc73('0x2'));var jsonpatch=require(_0xdc73('0x3'));var rp=require(_0xdc73('0x4'));var moment=require('moment');var BPromise=require(_0xdc73('0x5'));var Mustache=require(_0xdc73('0x6'));var util=require('util');var path=require(_0xdc73('0x7'));var sox=require(_0xdc73('0x8'));var csv=require(_0xdc73('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xdc73('0xa'));var squel=require(_0xdc73('0xb'));var crypto=require(_0xdc73('0xc'));var jsforce=require(_0xdc73('0xd'));var deskjs=require(_0xdc73('0xe'));var toCsv=require('to-csv');var querystring=require(_0xdc73('0xf'));var Papa=require(_0xdc73('0x10'));var Redis=require(_0xdc73('0x11'));var authService=require(_0xdc73('0x12'));var qs=require(_0xdc73('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xdc73('0x14'))(_0xdc73('0x15'));var utils=require('../../config/utils');var config=require(_0xdc73('0x16'));var db=require(_0xdc73('0x17'))['db'];function respondWithStatusCode(_0x2e4bc4,_0x310763){_0x310763=_0x310763||0xcc;return function(_0x121290){if(_0x121290){return _0x2e4bc4[_0xdc73('0x18')](_0x310763);}return _0x2e4bc4[_0xdc73('0x19')](_0x310763)[_0xdc73('0x1a')]();};}function respondWithResult(_0x19a9ca,_0x57bcdb){_0x57bcdb=_0x57bcdb||0xc8;return function(_0x49837e){if(_0x49837e){return _0x19a9ca[_0xdc73('0x19')](_0x57bcdb)[_0xdc73('0x1b')](_0x49837e);}};}function respondWithFilteredResult(_0x79a0d3,_0x474d60){return function(_0xfcf746){if(_0xfcf746){var _0x541354=_0xfcf746[_0xdc73('0x1c')],_0x2cee68=_0x474d60[_0xdc73('0x1d')],_0x3af5bc=_0x474d60[_0xdc73('0x1d')]+_0x474d60[_0xdc73('0x1e')],_0x23a466;if(_0x3af5bc>=_0x541354){_0x3af5bc=_0x541354;_0x23a466=0xc8;}else{_0x23a466=0xce;}_0x79a0d3[_0xdc73('0x19')](_0x23a466);return _0x79a0d3['set'](_0xdc73('0x1f'),_0x2cee68+'-'+_0x3af5bc+'/'+_0x541354)[_0xdc73('0x1b')](_0xfcf746);}return null;};}function patchUpdates(_0x160352){return function(_0xcc3d30){try{jsonpatch['apply'](_0xcc3d30,_0x160352,!![]);}catch(_0x261cee){return BPromise['reject'](_0x261cee);}return _0xcc3d30['save']();};}function saveUpdates(_0x4c28b4,_0x1f1674){return function(_0x5e74f1){if(_0x5e74f1){return _0x5e74f1[_0xdc73('0x20')](_0x4c28b4)[_0xdc73('0x21')](function(_0x4773c7){return _0x4773c7;});}return null;};}function removeEntity(_0x4c0617,_0xd89c34){return function(_0x2dbeb9){if(_0x2dbeb9){return _0x2dbeb9['destroy']()[_0xdc73('0x21')](function(){_0x4c0617['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0xe57bb9,_0x44a5ad){return function(_0x485285){if(!_0x485285){_0xe57bb9[_0xdc73('0x18')](0x194);}return _0x485285;};}function handleError(_0x24ee45,_0x3793f9){_0x3793f9=_0x3793f9||0x1f4;return function(_0x30f374){logger[_0xdc73('0x22')](_0x30f374[_0xdc73('0x23')]);if(_0x30f374['name']){delete _0x30f374[_0xdc73('0x24')];}_0x24ee45[_0xdc73('0x19')](_0x3793f9)[_0xdc73('0x25')](_0x30f374);};}exports[_0xdc73('0x26')]=function(_0x98d07e,_0x3f1daa){var _0x58139d={},_0x2a397c={},_0x1d1095={'count':0x0,'rows':[]};var _0xe9b59a=db[_0xdc73('0x27')][_0xdc73('0x28')];_0x2a397c[_0xdc73('0x29')]=_['keys'](_0xe9b59a);_0x2a397c[_0xdc73('0x2a')]=_[_0xdc73('0x2b')](_0x98d07e[_0xdc73('0x2a')]);_0x2a397c[_0xdc73('0x2c')]=_[_0xdc73('0x2d')](_0x2a397c[_0xdc73('0x29')],_0x2a397c['query']);_0x58139d[_0xdc73('0x2e')]=_[_0xdc73('0x2d')](_0x2a397c[_0xdc73('0x29')],qs[_0xdc73('0x2f')](_0x98d07e['query'][_0xdc73('0x2f')]));_0x58139d[_0xdc73('0x2e')]=_0x58139d['attributes'][_0xdc73('0x30')]?_0x58139d['attributes']:_0x2a397c[_0xdc73('0x29')];if(!_0x98d07e[_0xdc73('0x2a')][_0xdc73('0x31')](_0xdc73('0x32'))){_0x58139d['limit']=qs[_0xdc73('0x1e')](_0x98d07e[_0xdc73('0x2a')][_0xdc73('0x1e')]);_0x58139d[_0xdc73('0x1d')]=qs[_0xdc73('0x1d')](_0x98d07e['query'][_0xdc73('0x1d')]);}_0x58139d['order']=qs['sort'](_0x98d07e['query'][_0xdc73('0x33')]);_0x58139d[_0xdc73('0x34')]=qs[_0xdc73('0x2c')](_[_0xdc73('0x35')](_0x98d07e['query'],_0x2a397c['filters']));if(_0x98d07e['query']['filter']){_0x58139d['where']=_[_0xdc73('0x36')](_0x58139d[_0xdc73('0x34')],{'$or':_[_0xdc73('0x37')](_0xe9b59a,function(_0x3bc0a3){if(_0x3bc0a3[_0xdc73('0x38')][_0xdc73('0x39')]!==_0xdc73('0x3a')){var _0x1432a5={};_0x1432a5[_0x3bc0a3[_0xdc73('0x3b')]]={'$like':'%'+_0x98d07e[_0xdc73('0x2a')]['filter']+'%'};return _0x1432a5;}})});}_0x58139d=_['merge']({},_0x58139d,_0x98d07e[_0xdc73('0x3c')]);var _0x4e408c={'where':_0x58139d[_0xdc73('0x34')]};return db[_0xdc73('0x27')]['count'](_0x4e408c)[_0xdc73('0x21')](function(_0x580a54){_0x1d1095[_0xdc73('0x1c')]=_0x580a54;if(_0x98d07e[_0xdc73('0x2a')][_0xdc73('0x3d')]){_0x58139d[_0xdc73('0x3e')]=[{'all':!![]}];}return db[_0xdc73('0x27')]['findAll'](_0x58139d);})[_0xdc73('0x21')](function(_0x35227a){_0x1d1095[_0xdc73('0x3f')]=_0x35227a;return _0x1d1095;})[_0xdc73('0x21')](respondWithFilteredResult(_0x3f1daa,_0x58139d))[_0xdc73('0x40')](handleError(_0x3f1daa,null));};exports[_0xdc73('0x41')]=function(_0x196eb2,_0x3cb760){var _0x4de6ce={'raw':!![],'where':{'id':_0x196eb2[_0xdc73('0x42')]['id']}},_0x195909={};_0x195909['model']=_[_0xdc73('0x2b')](db[_0xdc73('0x27')][_0xdc73('0x28')]);_0x195909[_0xdc73('0x2a')]=_[_0xdc73('0x2b')](_0x196eb2[_0xdc73('0x2a')]);_0x195909['filters']=_['intersection'](_0x195909[_0xdc73('0x29')],_0x195909[_0xdc73('0x2a')]);_0x4de6ce[_0xdc73('0x2e')]=_[_0xdc73('0x2d')](_0x195909[_0xdc73('0x29')],qs['fields'](_0x196eb2['query']['fields']));_0x4de6ce[_0xdc73('0x2e')]=_0x4de6ce[_0xdc73('0x2e')][_0xdc73('0x30')]?_0x4de6ce[_0xdc73('0x2e')]:_0x195909[_0xdc73('0x29')];if(_0x196eb2[_0xdc73('0x2a')]['includeAll']){_0x4de6ce[_0xdc73('0x3e')]=[{'all':!![]}];}_0x4de6ce=_[_0xdc73('0x36')]({},_0x4de6ce,_0x196eb2[_0xdc73('0x3c')]);return db[_0xdc73('0x27')][_0xdc73('0x43')](_0x4de6ce)[_0xdc73('0x21')](handleEntityNotFound(_0x3cb760,null))[_0xdc73('0x21')](respondWithResult(_0x3cb760,null))[_0xdc73('0x40')](handleError(_0x3cb760,null));};exports['create']=function(_0x13162a,_0xd4fea){return db[_0xdc73('0x27')][_0xdc73('0x44')](_0x13162a[_0xdc73('0x45')],{})[_0xdc73('0x21')](respondWithResult(_0xd4fea,0xc9))[_0xdc73('0x40')](handleError(_0xd4fea,null));};exports[_0xdc73('0x20')]=function(_0x22f60a,_0x438858){if(_0x22f60a[_0xdc73('0x45')]['id']){delete _0x22f60a[_0xdc73('0x45')]['id'];}return db['JscriptySessionReport'][_0xdc73('0x43')]({'where':{'id':_0x22f60a[_0xdc73('0x42')]['id']}})[_0xdc73('0x21')](handleEntityNotFound(_0x438858,null))[_0xdc73('0x21')](saveUpdates(_0x22f60a[_0xdc73('0x45')],null))['then'](respondWithResult(_0x438858,null))[_0xdc73('0x40')](handleError(_0x438858,null));};exports[_0xdc73('0x46')]=function(_0x585670,_0x598643){return db[_0xdc73('0x27')]['find']({'where':{'id':_0x585670['params']['id']}})[_0xdc73('0x21')](handleEntityNotFound(_0x598643,null))[_0xdc73('0x21')](removeEntity(_0x598643,null))[_0xdc73('0x40')](handleError(_0x598643,null));};exports[_0xdc73('0x47')]=function(_0xb798d,_0x294c5c){return db[_0xdc73('0x27')]['describe']()['then'](respondWithResult(_0x294c5c,null))['catch'](handleError(_0x294c5c,null));};exports[_0xdc73('0x48')]=function(_0x5271ad,_0x1d7a9d,_0x4021bc){var _0x476df9={'raw':!![],'where':{}};var _0x4d2bab={};var _0x4ae1ef={'count':0x0,'rows':[]};return db['JscriptySessionReport'][_0xdc73('0x49')]({'where':{'id':_0x5271ad[_0xdc73('0x42')]['id']}})[_0xdc73('0x21')](handleEntityNotFound(_0x1d7a9d,null))[_0xdc73('0x21')](function(_0xe444c5){if(_0xe444c5){_0x4d2bab[_0xdc73('0x29')]=_[_0xdc73('0x2b')](db['JscriptyQuestionReport']['rawAttributes']);_0x4d2bab['query']=_['keys'](_0x5271ad['query']);_0x4d2bab[_0xdc73('0x2c')]=_[_0xdc73('0x2d')](_0x4d2bab[_0xdc73('0x29')],_0x4d2bab[_0xdc73('0x2a')]);_0x476df9[_0xdc73('0x2e')]=_[_0xdc73('0x2d')](_0x4d2bab[_0xdc73('0x29')],qs[_0xdc73('0x2f')](_0x5271ad['query'][_0xdc73('0x2f')]));_0x476df9[_0xdc73('0x2e')]=_0x476df9[_0xdc73('0x2e')][_0xdc73('0x30')]?_0x476df9[_0xdc73('0x2e')]:_0x4d2bab[_0xdc73('0x29')];if(!_0x5271ad[_0xdc73('0x2a')][_0xdc73('0x31')](_0xdc73('0x32'))){_0x476df9[_0xdc73('0x1e')]=qs[_0xdc73('0x1e')](_0x5271ad['query'][_0xdc73('0x1e')]);_0x476df9[_0xdc73('0x1d')]=qs['offset'](_0x5271ad['query'][_0xdc73('0x1d')]);}_0x476df9[_0xdc73('0x4a')]=qs['sort'](_0x5271ad['query'][_0xdc73('0x33')]);_0x476df9['where']=qs[_0xdc73('0x2c')](_[_0xdc73('0x35')](_0x5271ad['query'],_0x4d2bab[_0xdc73('0x2c')]));_0x476df9['where'][_0xdc73('0x4b')]=_0xe444c5['id'];if(_0x5271ad['query'][_0xdc73('0x4c')]){_0x476df9['where']=_[_0xdc73('0x36')](_0x476df9[_0xdc73('0x34')],{'$or':_[_0xdc73('0x37')](_0x476df9[_0xdc73('0x2e')],function(_0x97041d){var _0x44df53={};_0x44df53[_0x97041d]={'$like':'%'+_0x5271ad['query'][_0xdc73('0x4c')]+'%'};return _0x44df53;})});}_0x476df9=_[_0xdc73('0x36')]({},_0x476df9,_0x5271ad[_0xdc73('0x3c')]);return db[_0xdc73('0x4d')]['count']({'where':_0x476df9[_0xdc73('0x34')]})[_0xdc73('0x21')](function(_0x15dcd1){_0x4ae1ef[_0xdc73('0x1c')]=_0x15dcd1;if(_0x5271ad[_0xdc73('0x2a')][_0xdc73('0x3d')]){_0x476df9[_0xdc73('0x3e')]=[{'all':!![]}];}return db[_0xdc73('0x4d')][_0xdc73('0x4e')](_0x476df9);})[_0xdc73('0x21')](function(_0x321f81){_0x4ae1ef[_0xdc73('0x3f')]=_0x321f81;return _0x4ae1ef;});}})['then'](respondWithFilteredResult(_0x1d7a9d,_0x476df9))[_0xdc73('0x40')](handleError(_0x1d7a9d,null));};
\ No newline at end of file
+var _0xa60f=['getQuestions','findOne','JscriptyQuestionReport','nolimit','SessionId','findAll','rows','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','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','status','offset','set','reject','save','update','then','destroy','end','sendStatus','error','stack','name','send','index','JscriptySessionReport','rawAttributes','keys','query','filters','model','attributes','intersection','fields','length','hasOwnProperty','limit','order','sort','pick','filter','merge','map','type','key','VIRTUAL','field','options','where','count','includeAll','include','show','params','find','catch','create','body','describe'];(function(_0x324b3f,_0x2776a3){var _0x1c5581=function(_0x10fd92){while(--_0x10fd92){_0x324b3f['push'](_0x324b3f['shift']());}};_0x1c5581(++_0x2776a3);}(_0xa60f,0x153));var _0xfa60=function(_0x5c777f,_0x42b428){_0x5c777f=_0x5c777f-0x0;var _0x58e753=_0xa60f[_0x5c777f];return _0x58e753;};'use strict';var pdf=require(_0xfa60('0x0'));var emlformat=require(_0xfa60('0x1'));var rimraf=require(_0xfa60('0x2'));var zipdir=require(_0xfa60('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xfa60('0x4'));var moment=require(_0xfa60('0x5'));var BPromise=require(_0xfa60('0x6'));var Mustache=require(_0xfa60('0x7'));var util=require(_0xfa60('0x8'));var path=require(_0xfa60('0x9'));var sox=require(_0xfa60('0xa'));var csv=require(_0xfa60('0xb'));var ejs=require(_0xfa60('0xc'));var fs=require('fs');var _=require(_0xfa60('0xd'));var squel=require(_0xfa60('0xe'));var crypto=require(_0xfa60('0xf'));var jsforce=require(_0xfa60('0x10'));var deskjs=require('desk.js');var toCsv=require(_0xfa60('0xb'));var querystring=require('querystring');var Papa=require(_0xfa60('0x11'));var Redis=require(_0xfa60('0x12'));var authService=require(_0xfa60('0x13'));var qs=require(_0xfa60('0x14'));var hardwareService=require(_0xfa60('0x15'));var logger=require(_0xfa60('0x16'))(_0xfa60('0x17'));var utils=require(_0xfa60('0x18'));var config=require(_0xfa60('0x19'));var db=require(_0xfa60('0x1a'))['db'];function respondWithStatusCode(_0x59a1e7,_0x201027){_0x201027=_0x201027||0xcc;return function(_0x809ade){if(_0x809ade){return _0x59a1e7['sendStatus'](_0x201027);}return _0x59a1e7['status'](_0x201027)['end']();};}function respondWithResult(_0x54d0a2,_0x281617){_0x281617=_0x281617||0xc8;return function(_0x20f31e){if(_0x20f31e){return _0x54d0a2[_0xfa60('0x1b')](_0x281617)['json'](_0x20f31e);}};}function respondWithFilteredResult(_0x235543,_0x4c86ad){return function(_0x40994d){if(_0x40994d){var _0x5b77ca=_0x40994d['count'],_0x513bd9=_0x4c86ad[_0xfa60('0x1c')],_0x3caf23=_0x4c86ad[_0xfa60('0x1c')]+_0x4c86ad['limit'],_0x1c7f9f;if(_0x3caf23>=_0x5b77ca){_0x3caf23=_0x5b77ca;_0x1c7f9f=0xc8;}else{_0x1c7f9f=0xce;}_0x235543[_0xfa60('0x1b')](_0x1c7f9f);return _0x235543[_0xfa60('0x1d')]('Content-Range',_0x513bd9+'-'+_0x3caf23+'/'+_0x5b77ca)['json'](_0x40994d);}return null;};}function patchUpdates(_0x401bdd){return function(_0x3099ea){try{jsonpatch['apply'](_0x3099ea,_0x401bdd,!![]);}catch(_0x273022){return BPromise[_0xfa60('0x1e')](_0x273022);}return _0x3099ea[_0xfa60('0x1f')]();};}function saveUpdates(_0x5becd2,_0x34ab5d){return function(_0x54165d){if(_0x54165d){return _0x54165d[_0xfa60('0x20')](_0x5becd2)[_0xfa60('0x21')](function(_0x5e88fa){return _0x5e88fa;});}return null;};}function removeEntity(_0x3d82ec,_0x28539a){return function(_0x4ed2cc){if(_0x4ed2cc){return _0x4ed2cc[_0xfa60('0x22')]()[_0xfa60('0x21')](function(){_0x3d82ec[_0xfa60('0x1b')](0xcc)[_0xfa60('0x23')]();});}};}function handleEntityNotFound(_0x15be96,_0x37576e){return function(_0x5af3de){if(!_0x5af3de){_0x15be96[_0xfa60('0x24')](0x194);}return _0x5af3de;};}function handleError(_0x87c9a,_0x45307f){_0x45307f=_0x45307f||0x1f4;return function(_0x56542a){logger[_0xfa60('0x25')](_0x56542a[_0xfa60('0x26')]);if(_0x56542a[_0xfa60('0x27')]){delete _0x56542a[_0xfa60('0x27')];}_0x87c9a['status'](_0x45307f)[_0xfa60('0x28')](_0x56542a);};}exports[_0xfa60('0x29')]=function(_0x59a348,_0x2591ea){var _0x363ed2={},_0x51d29a={},_0x4d9809={'count':0x0,'rows':[]};var _0x3068b2=db[_0xfa60('0x2a')][_0xfa60('0x2b')];_0x51d29a['model']=_[_0xfa60('0x2c')](_0x3068b2);_0x51d29a[_0xfa60('0x2d')]=_[_0xfa60('0x2c')](_0x59a348[_0xfa60('0x2d')]);_0x51d29a[_0xfa60('0x2e')]=_['intersection'](_0x51d29a[_0xfa60('0x2f')],_0x51d29a[_0xfa60('0x2d')]);_0x363ed2[_0xfa60('0x30')]=_[_0xfa60('0x31')](_0x51d29a['model'],qs[_0xfa60('0x32')](_0x59a348['query'][_0xfa60('0x32')]));_0x363ed2[_0xfa60('0x30')]=_0x363ed2[_0xfa60('0x30')][_0xfa60('0x33')]?_0x363ed2['attributes']:_0x51d29a[_0xfa60('0x2f')];if(!_0x59a348[_0xfa60('0x2d')][_0xfa60('0x34')]('nolimit')){_0x363ed2['limit']=qs[_0xfa60('0x35')](_0x59a348[_0xfa60('0x2d')][_0xfa60('0x35')]);_0x363ed2[_0xfa60('0x1c')]=qs[_0xfa60('0x1c')](_0x59a348['query'][_0xfa60('0x1c')]);}_0x363ed2[_0xfa60('0x36')]=qs['sort'](_0x59a348[_0xfa60('0x2d')][_0xfa60('0x37')]);_0x363ed2['where']=qs[_0xfa60('0x2e')](_[_0xfa60('0x38')](_0x59a348[_0xfa60('0x2d')],_0x51d29a[_0xfa60('0x2e')]));if(_0x59a348['query'][_0xfa60('0x39')]){_0x363ed2['where']=_[_0xfa60('0x3a')](_0x363ed2['where'],{'$or':_[_0xfa60('0x3b')](_0x3068b2,function(_0x36e763){if(_0x36e763[_0xfa60('0x3c')][_0xfa60('0x3d')]!==_0xfa60('0x3e')){var _0x209062={};_0x209062[_0x36e763[_0xfa60('0x3f')]]={'$like':'%'+_0x59a348[_0xfa60('0x2d')][_0xfa60('0x39')]+'%'};return _0x209062;}})});}_0x363ed2=_['merge']({},_0x363ed2,_0x59a348[_0xfa60('0x40')]);var _0x12052c={'where':_0x363ed2[_0xfa60('0x41')]};return db['JscriptySessionReport'][_0xfa60('0x42')](_0x12052c)[_0xfa60('0x21')](function(_0x4db1f1){_0x4d9809[_0xfa60('0x42')]=_0x4db1f1;if(_0x59a348[_0xfa60('0x2d')][_0xfa60('0x43')]){_0x363ed2[_0xfa60('0x44')]=[{'all':!![]}];}return db[_0xfa60('0x2a')]['findAll'](_0x363ed2);})[_0xfa60('0x21')](function(_0x3488a3){_0x4d9809['rows']=_0x3488a3;return _0x4d9809;})[_0xfa60('0x21')](respondWithFilteredResult(_0x2591ea,_0x363ed2))['catch'](handleError(_0x2591ea,null));};exports[_0xfa60('0x45')]=function(_0x2ece65,_0x1ddf67){var _0x77e495={'raw':!![],'where':{'id':_0x2ece65[_0xfa60('0x46')]['id']}},_0x9c3bdb={};_0x9c3bdb[_0xfa60('0x2f')]=_[_0xfa60('0x2c')](db['JscriptySessionReport']['rawAttributes']);_0x9c3bdb[_0xfa60('0x2d')]=_[_0xfa60('0x2c')](_0x2ece65[_0xfa60('0x2d')]);_0x9c3bdb[_0xfa60('0x2e')]=_[_0xfa60('0x31')](_0x9c3bdb[_0xfa60('0x2f')],_0x9c3bdb[_0xfa60('0x2d')]);_0x77e495['attributes']=_[_0xfa60('0x31')](_0x9c3bdb[_0xfa60('0x2f')],qs['fields'](_0x2ece65[_0xfa60('0x2d')][_0xfa60('0x32')]));_0x77e495['attributes']=_0x77e495['attributes'][_0xfa60('0x33')]?_0x77e495['attributes']:_0x9c3bdb[_0xfa60('0x2f')];if(_0x2ece65[_0xfa60('0x2d')]['includeAll']){_0x77e495['include']=[{'all':!![]}];}_0x77e495=_[_0xfa60('0x3a')]({},_0x77e495,_0x2ece65[_0xfa60('0x40')]);return db['JscriptySessionReport'][_0xfa60('0x47')](_0x77e495)[_0xfa60('0x21')](handleEntityNotFound(_0x1ddf67,null))['then'](respondWithResult(_0x1ddf67,null))[_0xfa60('0x48')](handleError(_0x1ddf67,null));};exports[_0xfa60('0x49')]=function(_0x27a509,_0xbf7f24){return db[_0xfa60('0x2a')][_0xfa60('0x49')](_0x27a509['body'],{})[_0xfa60('0x21')](respondWithResult(_0xbf7f24,0xc9))['catch'](handleError(_0xbf7f24,null));};exports[_0xfa60('0x20')]=function(_0x121298,_0x2175cd){if(_0x121298[_0xfa60('0x4a')]['id']){delete _0x121298[_0xfa60('0x4a')]['id'];}return db[_0xfa60('0x2a')][_0xfa60('0x47')]({'where':{'id':_0x121298[_0xfa60('0x46')]['id']}})[_0xfa60('0x21')](handleEntityNotFound(_0x2175cd,null))[_0xfa60('0x21')](saveUpdates(_0x121298[_0xfa60('0x4a')],null))[_0xfa60('0x21')](respondWithResult(_0x2175cd,null))[_0xfa60('0x48')](handleError(_0x2175cd,null));};exports['destroy']=function(_0xdcfd55,_0x1e5790){return db[_0xfa60('0x2a')][_0xfa60('0x47')]({'where':{'id':_0xdcfd55[_0xfa60('0x46')]['id']}})['then'](handleEntityNotFound(_0x1e5790,null))['then'](removeEntity(_0x1e5790,null))['catch'](handleError(_0x1e5790,null));};exports[_0xfa60('0x4b')]=function(_0x1672b1,_0x5d6b76){return db[_0xfa60('0x2a')][_0xfa60('0x4b')]()['then'](respondWithResult(_0x5d6b76,null))[_0xfa60('0x48')](handleError(_0x5d6b76,null));};exports[_0xfa60('0x4c')]=function(_0x5a7fee,_0x488a24,_0x3417e0){var _0x538d8e={'raw':!![],'where':{}};var _0x53f77a={};var _0x324762={'count':0x0,'rows':[]};return db[_0xfa60('0x2a')][_0xfa60('0x4d')]({'where':{'id':_0x5a7fee['params']['id']}})[_0xfa60('0x21')](handleEntityNotFound(_0x488a24,null))[_0xfa60('0x21')](function(_0x2644a2){if(_0x2644a2){_0x53f77a[_0xfa60('0x2f')]=_['keys'](db[_0xfa60('0x4e')][_0xfa60('0x2b')]);_0x53f77a[_0xfa60('0x2d')]=_['keys'](_0x5a7fee[_0xfa60('0x2d')]);_0x53f77a['filters']=_[_0xfa60('0x31')](_0x53f77a[_0xfa60('0x2f')],_0x53f77a[_0xfa60('0x2d')]);_0x538d8e['attributes']=_['intersection'](_0x53f77a['model'],qs[_0xfa60('0x32')](_0x5a7fee[_0xfa60('0x2d')][_0xfa60('0x32')]));_0x538d8e[_0xfa60('0x30')]=_0x538d8e[_0xfa60('0x30')]['length']?_0x538d8e[_0xfa60('0x30')]:_0x53f77a[_0xfa60('0x2f')];if(!_0x5a7fee[_0xfa60('0x2d')][_0xfa60('0x34')](_0xfa60('0x4f'))){_0x538d8e[_0xfa60('0x35')]=qs[_0xfa60('0x35')](_0x5a7fee[_0xfa60('0x2d')][_0xfa60('0x35')]);_0x538d8e['offset']=qs[_0xfa60('0x1c')](_0x5a7fee[_0xfa60('0x2d')]['offset']);}_0x538d8e['order']=qs['sort'](_0x5a7fee[_0xfa60('0x2d')][_0xfa60('0x37')]);_0x538d8e[_0xfa60('0x41')]=qs['filters'](_[_0xfa60('0x38')](_0x5a7fee[_0xfa60('0x2d')],_0x53f77a['filters']));_0x538d8e[_0xfa60('0x41')][_0xfa60('0x50')]=_0x2644a2['id'];if(_0x5a7fee['query'][_0xfa60('0x39')]){_0x538d8e[_0xfa60('0x41')]=_['merge'](_0x538d8e[_0xfa60('0x41')],{'$or':_[_0xfa60('0x3b')](_0x538d8e['attributes'],function(_0x158cb3){var _0x378a4f={};_0x378a4f[_0x158cb3]={'$like':'%'+_0x5a7fee[_0xfa60('0x2d')][_0xfa60('0x39')]+'%'};return _0x378a4f;})});}_0x538d8e=_[_0xfa60('0x3a')]({},_0x538d8e,_0x5a7fee['options']);return db[_0xfa60('0x4e')][_0xfa60('0x42')]({'where':_0x538d8e[_0xfa60('0x41')]})[_0xfa60('0x21')](function(_0x26a65e){_0x324762[_0xfa60('0x42')]=_0x26a65e;if(_0x5a7fee[_0xfa60('0x2d')][_0xfa60('0x43')]){_0x538d8e[_0xfa60('0x44')]=[{'all':!![]}];}return db[_0xfa60('0x4e')][_0xfa60('0x51')](_0x538d8e);})[_0xfa60('0x21')](function(_0x559ff9){_0x324762[_0xfa60('0x52')]=_0x559ff9;return _0x324762;});}})['then'](respondWithFilteredResult(_0x488a24,_0x538d8e))[_0xfa60('0x48')](handleError(_0x488a24,null));};
\ No newline at end of file
index 8de34ce..61ee87b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6687=['request-promise','path','rimraf','../../config/environment','exports','JscriptySessionReport','report_jscripty_sessions','lodash','../../config/logger','api','moment'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x6687,0x1d5));var _0x7668=function(_0x12a2b1,_0x5d39d9){_0x12a2b1=_0x12a2b1-0x0;var _0x2907fc=_0x6687[_0x12a2b1];return _0x2907fc;};'use strict';var _=require(_0x7668('0x0'));var util=require('util');var logger=require(_0x7668('0x1'))(_0x7668('0x2'));var moment=require(_0x7668('0x3'));var BPromise=require('bluebird');var rp=require(_0x7668('0x4'));var fs=require('fs');var path=require(_0x7668('0x5'));var rimraf=require(_0x7668('0x6'));var config=require(_0x7668('0x7'));var attributes=require('./jscriptySessionReport.attributes');module[_0x7668('0x8')]=function(_0x578b0f,_0x265036){return _0x578b0f['define'](_0x7668('0x9'),attributes,{'tableName':_0x7668('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xbdfc=['../../config/logger','api','request-promise','rimraf','./jscriptySessionReport.attributes','define','JscriptySessionReport','report_jscripty_sessions','lodash'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xbdfc,0xaa));var _0xcbdf=function(_0x58c319,_0x454120){_0x58c319=_0x58c319-0x0;var _0x110e02=_0xbdfc[_0x58c319];return _0x110e02;};'use strict';var _=require(_0xcbdf('0x0'));var util=require('util');var logger=require(_0xcbdf('0x1'))(_0xcbdf('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xcbdf('0x3'));var fs=require('fs');var path=require('path');var rimraf=require(_0xcbdf('0x4'));var config=require('../../config/environment');var attributes=require(_0xcbdf('0x5'));module['exports']=function(_0x38f0cc,_0x7cafb7){return _0x38f0cc[_0xcbdf('0x6')](_0xcbdf('0x7'),attributes,{'tableName':_0xcbdf('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 349fdd6..2df96b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc1c6=['lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','http','then','JscriptySessionReport,\x20%s,\x20%s','request\x20sent','debug','JscriptySessionReport,\x20%s,\x20%s,\x20%s','stringify','error','message','info','catch'];(function(_0x4342e2,_0x2f063c){var _0x3e83df=function(_0x4a95cd){while(--_0x4a95cd){_0x4342e2['push'](_0x4342e2['shift']());}};_0x3e83df(++_0x2f063c);}(_0xc1c6,0xf7));var _0x6c1c=function(_0x346d01,_0x3de5c9){_0x346d01=_0x346d01-0x0;var _0x59d41d=_0xc1c6[_0x346d01];return _0x59d41d;};'use strict';var _=require(_0x6c1c('0x0'));var util=require(_0x6c1c('0x1'));var moment=require(_0x6c1c('0x2'));var BPromise=require('bluebird');var rs=require(_0x6c1c('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x6c1c('0x4'))['db'];var utils=require(_0x6c1c('0x5'));var logger=require(_0x6c1c('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x6c1c('0x7'));var client=jayson['client'][_0x6c1c('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x582bec,_0xe510ca,_0x2eb1ba){return new BPromise(function(_0x38369d,_0x2cec58){return client['request'](_0x582bec,_0x2eb1ba)[_0x6c1c('0x9')](function(_0x3ca985){logger['info'](_0x6c1c('0xa'),_0xe510ca,_0x6c1c('0xb'));logger[_0x6c1c('0xc')](_0x6c1c('0xd'),_0xe510ca,'request\x20sent',JSON[_0x6c1c('0xe')](_0x3ca985));if(_0x3ca985[_0x6c1c('0xf')]){if(_0x3ca985[_0x6c1c('0xf')]['code']===0x1f4){logger[_0x6c1c('0xf')](_0x6c1c('0xa'),_0xe510ca,_0x3ca985[_0x6c1c('0xf')]['message']);return _0x2cec58(_0x3ca985[_0x6c1c('0xf')]['message']);}logger[_0x6c1c('0xf')](_0x6c1c('0xa'),_0xe510ca,_0x3ca985[_0x6c1c('0xf')][_0x6c1c('0x10')]);return _0x38369d(_0x3ca985[_0x6c1c('0xf')][_0x6c1c('0x10')]);}else{logger[_0x6c1c('0x11')](_0x6c1c('0xa'),_0xe510ca,_0x6c1c('0xb'));_0x38369d(_0x3ca985['result'][_0x6c1c('0x10')]);}})[_0x6c1c('0x12')](function(_0x5214ee){logger[_0x6c1c('0xf')](_0x6c1c('0xa'),_0xe510ca,_0x5214ee);_0x2cec58(_0x5214ee);});});}
\ No newline at end of file
+var _0xeae8=['rpc','../../config/environment','jayson/promise','client','http','info','JscriptySessionReport,\x20%s,\x20%s','request\x20sent','debug','error','message','result','lodash','util','moment','randomstring','../../mysqldb','../../config/logger'];(function(_0xbebf50,_0x44ec09){var _0xce1496=function(_0x1bf94d){while(--_0x1bf94d){_0xbebf50['push'](_0xbebf50['shift']());}};_0xce1496(++_0x44ec09);}(_0xeae8,0x66));var _0x8eae=function(_0x1181f1,_0x441c28){_0x1181f1=_0x1181f1-0x0;var _0x2b67e1=_0xeae8[_0x1181f1];return _0x2b67e1;};'use strict';var _=require(_0x8eae('0x0'));var util=require(_0x8eae('0x1'));var moment=require(_0x8eae('0x2'));var BPromise=require('bluebird');var rs=require(_0x8eae('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x8eae('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x8eae('0x5'))(_0x8eae('0x6'));var config=require(_0x8eae('0x7'));var jayson=require(_0x8eae('0x8'));var client=jayson[_0x8eae('0x9')][_0x8eae('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x32c67f,_0xd2b0,_0x2dcd90){return new BPromise(function(_0x2ae6e7,_0x476ba1){return client['request'](_0x32c67f,_0x2dcd90)['then'](function(_0x1cd68f){logger[_0x8eae('0xb')](_0x8eae('0xc'),_0xd2b0,_0x8eae('0xd'));logger[_0x8eae('0xe')]('JscriptySessionReport,\x20%s,\x20%s,\x20%s',_0xd2b0,'request\x20sent',JSON['stringify'](_0x1cd68f));if(_0x1cd68f[_0x8eae('0xf')]){if(_0x1cd68f[_0x8eae('0xf')]['code']===0x1f4){logger[_0x8eae('0xf')]('JscriptySessionReport,\x20%s,\x20%s',_0xd2b0,_0x1cd68f[_0x8eae('0xf')][_0x8eae('0x10')]);return _0x476ba1(_0x1cd68f[_0x8eae('0xf')][_0x8eae('0x10')]);}logger[_0x8eae('0xf')]('JscriptySessionReport,\x20%s,\x20%s',_0xd2b0,_0x1cd68f[_0x8eae('0xf')][_0x8eae('0x10')]);return _0x2ae6e7(_0x1cd68f[_0x8eae('0xf')][_0x8eae('0x10')]);}else{logger[_0x8eae('0xb')](_0x8eae('0xc'),_0xd2b0,_0x8eae('0xd'));_0x2ae6e7(_0x1cd68f[_0x8eae('0x11')][_0x8eae('0x10')]);}})['catch'](function(_0x5e214e){logger['error'](_0x8eae('0xc'),_0xd2b0,_0x5e214e);_0x476ba1(_0x5e214e);});});}
\ No newline at end of file
index 04bccf2..23b4501 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7528=['exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./license.controller','get','index','/:id','isAuthenticated'];(function(_0x271db3,_0x84b9a2){var _0x214d92=function(_0x35c639){while(--_0x35c639){_0x271db3['push'](_0x271db3['shift']());}};_0x214d92(++_0x84b9a2);}(_0x7528,0x8d));var _0x8752=function(_0x64843d,_0x448303){_0x64843d=_0x64843d-0x0;var _0x49cf74=_0x7528[_0x64843d];return _0x49cf74;};'use strict';var multer=require(_0x8752('0x0'));var util=require('util');var path=require(_0x8752('0x1'));var timeout=require(_0x8752('0x2'));var express=require(_0x8752('0x3'));var router=express[_0x8752('0x4')]();var auth=require(_0x8752('0x5'));var interaction=require(_0x8752('0x6'));var config=require(_0x8752('0x7'));var controller=require(_0x8752('0x8'));router[_0x8752('0x9')]('/',controller[_0x8752('0xa')]);router['put'](_0x8752('0xb'),auth[_0x8752('0xc')](),controller['update']);module[_0x8752('0xd')]=router;
\ No newline at end of file
+var _0x6cc6=['express','Router','./license.controller','get','index','isAuthenticated','update','exports','multer','util','path'];(function(_0x30b9b6,_0x56a3ac){var _0x25f357=function(_0x49d5a0){while(--_0x49d5a0){_0x30b9b6['push'](_0x30b9b6['shift']());}};_0x25f357(++_0x56a3ac);}(_0x6cc6,0x131));var _0x66cc=function(_0x2f11b2,_0x3b2cc2){_0x2f11b2=_0x2f11b2-0x0;var _0x150e2a=_0x6cc6[_0x2f11b2];return _0x150e2a;};'use strict';var multer=require(_0x66cc('0x0'));var util=require(_0x66cc('0x1'));var path=require(_0x66cc('0x2'));var timeout=require('connect-timeout');var express=require(_0x66cc('0x3'));var router=express[_0x66cc('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x66cc('0x5'));router[_0x66cc('0x6')]('/',controller[_0x66cc('0x7')]);router['put']('/:id',auth[_0x66cc('0x8')](),controller[_0x66cc('0x9')]);module[_0x66cc('0xa')]=router;
\ No newline at end of file
index f9a9a47..a181c73 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbeb0=['TEXT','INTEGER','exports'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0xbeb0,0x1a0));var _0x0beb=function(_0x53e138,_0x1e15eb){_0x53e138=_0x53e138-0x0;var _0xaab824=_0xbeb0[_0x53e138];return _0xaab824;};'use strict';var Sequelize=require('sequelize');module[_0x0beb('0x0')]={'license':{'type':Sequelize[_0x0beb('0x1')]},'data1':{'type':Sequelize['STRING']},'data2':{'type':Sequelize['STRING']},'chatLicenseExceeded':{'type':Sequelize[_0x0beb('0x2')],'defaultValue':0x0}};
\ No newline at end of file
+var _0xfb96=['TEXT','STRING'];(function(_0x471fc3,_0x577225){var _0x130436=function(_0x5f5208){while(--_0x5f5208){_0x471fc3['push'](_0x471fc3['shift']());}};_0x130436(++_0x577225);}(_0xfb96,0x1d8));var _0x6fb9=function(_0x2e88ad,_0x5b3184){_0x2e88ad=_0x2e88ad-0x0;var _0xf179c4=_0xfb96[_0x2e88ad];return _0xf179c4;};'use strict';var Sequelize=require('sequelize');module['exports']={'license':{'type':Sequelize[_0x6fb9('0x0')]},'data1':{'type':Sequelize[_0x6fb9('0x1')]},'data2':{'type':Sequelize[_0x6fb9('0x1')]},'chatLicenseExceeded':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index 3e84304..82b5d4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc99e=['crypto','jsforce','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','limit','status','set','Content-Range','reject','save','update','destroy','then','error','send','../../config/license/util','index','model','keys','License','rawAttributes','query','filters','intersection','fields','attributes','length','options','getLicense','body','find','params','get','checkLicense','key','demo','catch','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash'];(function(_0x48e2c6,_0x44224f){var _0x2355d6=function(_0x26235f){while(--_0x26235f){_0x48e2c6['push'](_0x48e2c6['shift']());}};_0x2355d6(++_0x44224f);}(_0xc99e,0x6e));var _0xec99=function(_0x4a18d4,_0x143d17){_0x4a18d4=_0x4a18d4-0x0;var _0x303b5a=_0xc99e[_0x4a18d4];return _0x303b5a;};'use strict';var pdf=require(_0xec99('0x0'));var emlformat=require(_0xec99('0x1'));var rimraf=require(_0xec99('0x2'));var zipdir=require(_0xec99('0x3'));var jsonpatch=require(_0xec99('0x4'));var rp=require(_0xec99('0x5'));var moment=require('moment');var BPromise=require(_0xec99('0x6'));var Mustache=require(_0xec99('0x7'));var util=require(_0xec99('0x8'));var path=require(_0xec99('0x9'));var sox=require(_0xec99('0xa'));var csv=require(_0xec99('0xb'));var ejs=require(_0xec99('0xc'));var fs=require('fs');var _=require(_0xec99('0xd'));var squel=require('squel');var crypto=require(_0xec99('0xe'));var jsforce=require(_0xec99('0xf'));var deskjs=require('desk.js');var toCsv=require(_0xec99('0xb'));var querystring=require(_0xec99('0x10'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xec99('0x11'));var qs=require(_0xec99('0x12'));var hardwareService=require(_0xec99('0x13'));var logger=require('../../config/logger')(_0xec99('0x14'));var utils=require(_0xec99('0x15'));var config=require(_0xec99('0x16'));var db=require(_0xec99('0x17'))['db'];function respondWithStatusCode(_0x45947c,_0x364db1){_0x364db1=_0x364db1||0xcc;return function(_0x580b34){if(_0x580b34){return _0x45947c[_0xec99('0x18')](_0x364db1);}return _0x45947c['status'](_0x364db1)[_0xec99('0x19')]();};}function respondWithResult(_0x53d44e,_0x2c7cc9){_0x2c7cc9=_0x2c7cc9||0xc8;return function(_0x57bf4c){if(_0x57bf4c){return _0x53d44e['status'](_0x2c7cc9)[_0xec99('0x1a')](_0x57bf4c);}};}function respondWithFilteredResult(_0x569825,_0x3234f2){return function(_0x159c47){if(_0x159c47){var _0x3946b3=_0x159c47[_0xec99('0x1b')],_0x3d70fb=_0x3234f2['offset'],_0x3350f9=_0x3234f2[_0xec99('0x1c')]+_0x3234f2[_0xec99('0x1d')],_0x3efd6d;if(_0x3350f9>=_0x3946b3){_0x3350f9=_0x3946b3;_0x3efd6d=0xc8;}else{_0x3efd6d=0xce;}_0x569825[_0xec99('0x1e')](_0x3efd6d);return _0x569825[_0xec99('0x1f')](_0xec99('0x20'),_0x3d70fb+'-'+_0x3350f9+'/'+_0x3946b3)[_0xec99('0x1a')](_0x159c47);}return null;};}function patchUpdates(_0x50ae54){return function(_0x5ca76c){try{jsonpatch['apply'](_0x5ca76c,_0x50ae54,!![]);}catch(_0x1a6d8e){return BPromise[_0xec99('0x21')](_0x1a6d8e);}return _0x5ca76c[_0xec99('0x22')]();};}function saveUpdates(_0x46a09d,_0x2257f7){return function(_0x1edaf9){if(_0x1edaf9){return _0x1edaf9[_0xec99('0x23')](_0x46a09d)['then'](function(_0x56b54b){return _0x56b54b;});}return null;};}function removeEntity(_0xbc8090,_0x200630){return function(_0x5364ee){if(_0x5364ee){return _0x5364ee[_0xec99('0x24')]()[_0xec99('0x25')](function(){_0xbc8090[_0xec99('0x1e')](0xcc)[_0xec99('0x19')]();});}};}function handleEntityNotFound(_0x18e065,_0x3c2e16){return function(_0x1b32c6){if(!_0x1b32c6){_0x18e065[_0xec99('0x18')](0x194);}return _0x1b32c6;};}function handleError(_0x31387c,_0x1cf165){_0x1cf165=_0x1cf165||0x1f4;return function(_0x5c374e){logger[_0xec99('0x26')](_0x5c374e['stack']);if(_0x5c374e['name']){delete _0x5c374e['name'];}_0x31387c[_0xec99('0x1e')](_0x1cf165)[_0xec99('0x27')](_0x5c374e);};}var utilLicense=require(_0xec99('0x28'));exports[_0xec99('0x29')]=function(_0x4821b7,_0x2baf58){var _0x43b01b={'raw':!![],'where':{'id':0x1}},_0x162f2b={};_0x162f2b[_0xec99('0x2a')]=_[_0xec99('0x2b')](db[_0xec99('0x2c')][_0xec99('0x2d')]);_0x162f2b[_0xec99('0x2e')]=_[_0xec99('0x2b')](_0x4821b7[_0xec99('0x2e')]);_0x162f2b[_0xec99('0x2f')]=_['intersection'](_0x162f2b[_0xec99('0x2a')],_0x162f2b[_0xec99('0x2e')]);_0x43b01b['attributes']=_[_0xec99('0x30')](_0x162f2b[_0xec99('0x2a')],qs[_0xec99('0x31')](_0x4821b7['query'][_0xec99('0x31')]));_0x43b01b[_0xec99('0x32')]=_0x43b01b[_0xec99('0x32')][_0xec99('0x33')]?_0x43b01b[_0xec99('0x32')]:_0x162f2b[_0xec99('0x2a')];_0x43b01b=_['merge']({},_0x43b01b,_0x4821b7[_0xec99('0x34')]);return utilLicense[_0xec99('0x35')](_0x43b01b)[_0xec99('0x25')](respondWithResult(_0x2baf58,null))['catch'](handleError(_0x2baf58,null));};exports['update']=function(_0x545450,_0x278daa){if(_0x545450['body']['id']){delete _0x545450[_0xec99('0x36')]['id'];}return db[_0xec99('0x2c')][_0xec99('0x37')]({'where':{'id':_0x545450[_0xec99('0x38')]['id']}})[_0xec99('0x25')](handleEntityNotFound(_0x278daa,null))['then'](function(_0x26f065){var _0x238b66=_0x26f065[_0xec99('0x39')]({'plain':!![]});return utilLicense[_0xec99('0x3a')](_0x238b66,_0x545450['body'][_0xec99('0x3b')]);})['then'](function(_0x49d503){if(!_0x49d503[_0xec99('0x3c')]){return saveUpdates(_0x545450['body'],null);}return _0x49d503;})[_0xec99('0x25')](respondWithResult(_0x278daa,null))[_0xec99('0x3d')](handleError(_0x278daa,null));};
\ No newline at end of file
+var _0xf5cd=['eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','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','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','stack','name','send','../../config/license/util','index','keys','rawAttributes','query','filters','intersection','model','attributes','fields','length','merge','options','getLicense','body','License','find','params','get','key','demo','html-pdf'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0xf5cd,0x1bf));var _0xdf5c=function(_0x360ecf,_0x12186b){_0x360ecf=_0x360ecf-0x0;var _0x4aa9e3=_0xf5cd[_0x360ecf];return _0x4aa9e3;};'use strict';var pdf=require(_0xdf5c('0x0'));var emlformat=require(_0xdf5c('0x1'));var rimraf=require(_0xdf5c('0x2'));var zipdir=require(_0xdf5c('0x3'));var jsonpatch=require(_0xdf5c('0x4'));var rp=require(_0xdf5c('0x5'));var moment=require('moment');var BPromise=require(_0xdf5c('0x6'));var Mustache=require(_0xdf5c('0x7'));var util=require(_0xdf5c('0x8'));var path=require(_0xdf5c('0x9'));var sox=require(_0xdf5c('0xa'));var csv=require(_0xdf5c('0xb'));var ejs=require(_0xdf5c('0xc'));var fs=require('fs');var _=require(_0xdf5c('0xd'));var squel=require(_0xdf5c('0xe'));var crypto=require(_0xdf5c('0xf'));var jsforce=require(_0xdf5c('0x10'));var deskjs=require(_0xdf5c('0x11'));var toCsv=require(_0xdf5c('0xb'));var querystring=require(_0xdf5c('0x12'));var Papa=require(_0xdf5c('0x13'));var Redis=require('ioredis');var authService=require(_0xdf5c('0x14'));var qs=require(_0xdf5c('0x15'));var hardwareService=require(_0xdf5c('0x16'));var logger=require(_0xdf5c('0x17'))(_0xdf5c('0x18'));var utils=require(_0xdf5c('0x19'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x6cd52f,_0x2925ff){_0x2925ff=_0x2925ff||0xcc;return function(_0x5809a5){if(_0x5809a5){return _0x6cd52f[_0xdf5c('0x1a')](_0x2925ff);}return _0x6cd52f[_0xdf5c('0x1b')](_0x2925ff)[_0xdf5c('0x1c')]();};}function respondWithResult(_0xe11204,_0x3eded3){_0x3eded3=_0x3eded3||0xc8;return function(_0x460647){if(_0x460647){return _0xe11204[_0xdf5c('0x1b')](_0x3eded3)[_0xdf5c('0x1d')](_0x460647);}};}function respondWithFilteredResult(_0x110dc0,_0x4d4c66){return function(_0x436b88){if(_0x436b88){var _0x12a546=_0x436b88[_0xdf5c('0x1e')],_0x3d6ebc=_0x4d4c66[_0xdf5c('0x1f')],_0xc0889f=_0x4d4c66[_0xdf5c('0x1f')]+_0x4d4c66[_0xdf5c('0x20')],_0x49978e;if(_0xc0889f>=_0x12a546){_0xc0889f=_0x12a546;_0x49978e=0xc8;}else{_0x49978e=0xce;}_0x110dc0[_0xdf5c('0x1b')](_0x49978e);return _0x110dc0[_0xdf5c('0x21')](_0xdf5c('0x22'),_0x3d6ebc+'-'+_0xc0889f+'/'+_0x12a546)['json'](_0x436b88);}return null;};}function patchUpdates(_0x4d7df5){return function(_0x2bd378){try{jsonpatch[_0xdf5c('0x23')](_0x2bd378,_0x4d7df5,!![]);}catch(_0x32e211){return BPromise[_0xdf5c('0x24')](_0x32e211);}return _0x2bd378['save']();};}function saveUpdates(_0x18f58b,_0x296037){return function(_0x1bcbc9){if(_0x1bcbc9){return _0x1bcbc9[_0xdf5c('0x25')](_0x18f58b)[_0xdf5c('0x26')](function(_0x4c7b94){return _0x4c7b94;});}return null;};}function removeEntity(_0x5a6461,_0x413b92){return function(_0x547fae){if(_0x547fae){return _0x547fae[_0xdf5c('0x27')]()[_0xdf5c('0x26')](function(){_0x5a6461[_0xdf5c('0x1b')](0xcc)[_0xdf5c('0x1c')]();});}};}function handleEntityNotFound(_0x1e8c1d,_0x390a3c){return function(_0x937403){if(!_0x937403){_0x1e8c1d[_0xdf5c('0x1a')](0x194);}return _0x937403;};}function handleError(_0x568201,_0x3d48cd){_0x3d48cd=_0x3d48cd||0x1f4;return function(_0x432611){logger['error'](_0x432611[_0xdf5c('0x28')]);if(_0x432611[_0xdf5c('0x29')]){delete _0x432611['name'];}_0x568201[_0xdf5c('0x1b')](_0x3d48cd)[_0xdf5c('0x2a')](_0x432611);};}var utilLicense=require(_0xdf5c('0x2b'));exports[_0xdf5c('0x2c')]=function(_0xf4e78d,_0x426c5){var _0x59923d={'raw':!![],'where':{'id':0x1}},_0x1d15e7={};_0x1d15e7['model']=_[_0xdf5c('0x2d')](db['License'][_0xdf5c('0x2e')]);_0x1d15e7[_0xdf5c('0x2f')]=_['keys'](_0xf4e78d[_0xdf5c('0x2f')]);_0x1d15e7[_0xdf5c('0x30')]=_[_0xdf5c('0x31')](_0x1d15e7[_0xdf5c('0x32')],_0x1d15e7[_0xdf5c('0x2f')]);_0x59923d[_0xdf5c('0x33')]=_[_0xdf5c('0x31')](_0x1d15e7[_0xdf5c('0x32')],qs[_0xdf5c('0x34')](_0xf4e78d[_0xdf5c('0x2f')][_0xdf5c('0x34')]));_0x59923d[_0xdf5c('0x33')]=_0x59923d['attributes'][_0xdf5c('0x35')]?_0x59923d[_0xdf5c('0x33')]:_0x1d15e7[_0xdf5c('0x32')];_0x59923d=_[_0xdf5c('0x36')]({},_0x59923d,_0xf4e78d[_0xdf5c('0x37')]);return utilLicense[_0xdf5c('0x38')](_0x59923d)[_0xdf5c('0x26')](respondWithResult(_0x426c5,null))['catch'](handleError(_0x426c5,null));};exports[_0xdf5c('0x25')]=function(_0x515a12,_0x2df4ea){if(_0x515a12[_0xdf5c('0x39')]['id']){delete _0x515a12[_0xdf5c('0x39')]['id'];}return db[_0xdf5c('0x3a')][_0xdf5c('0x3b')]({'where':{'id':_0x515a12[_0xdf5c('0x3c')]['id']}})[_0xdf5c('0x26')](handleEntityNotFound(_0x2df4ea,null))[_0xdf5c('0x26')](function(_0x6648fa){var _0x1d04c7=_0x6648fa[_0xdf5c('0x3d')]({'plain':!![]});return utilLicense['checkLicense'](_0x1d04c7,_0x515a12[_0xdf5c('0x39')][_0xdf5c('0x3e')]);})['then'](function(_0x5796e2){if(!_0x5796e2[_0xdf5c('0x3f')]){return saveUpdates(_0x515a12['body'],null);}return _0x5796e2;})[_0xdf5c('0x26')](respondWithResult(_0x2df4ea,null))['catch'](handleError(_0x2df4ea,null));};
\ No newline at end of file
index 5c9b94d..e189367 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4746=['rimraf','../../config/environment','exports','define','License','license','lodash','util','api','bluebird','request-promise','path'];(function(_0xef8146,_0x459c34){var _0x5a6cb0=function(_0x2f84ec){while(--_0x2f84ec){_0xef8146['push'](_0xef8146['shift']());}};_0x5a6cb0(++_0x459c34);}(_0x4746,0xc6));var _0x6474=function(_0x172905,_0xcf84c2){_0x172905=_0x172905-0x0;var _0x501870=_0x4746[_0x172905];return _0x501870;};'use strict';var _=require(_0x6474('0x0'));var util=require(_0x6474('0x1'));var logger=require('../../config/logger')(_0x6474('0x2'));var moment=require('moment');var BPromise=require(_0x6474('0x3'));var rp=require(_0x6474('0x4'));var fs=require('fs');var path=require(_0x6474('0x5'));var rimraf=require(_0x6474('0x6'));var config=require(_0x6474('0x7'));var attributes=require('./license.attributes');module[_0x6474('0x8')]=function(_0x2bcf7c,_0x4cadd7){return _0x2bcf7c[_0x6474('0x9')](_0x6474('0xa'),attributes,{'tableName':_0x6474('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x049e=['License','license','lodash','util','api','bluebird','request-promise','path','rimraf','../../config/environment','exports','define'];(function(_0x28b560,_0x53fa33){var _0x24671f=function(_0x4ca1e4){while(--_0x4ca1e4){_0x28b560['push'](_0x28b560['shift']());}};_0x24671f(++_0x53fa33);}(_0x049e,0x16a));var _0xe049=function(_0x5c4e16,_0x113035){_0x5c4e16=_0x5c4e16-0x0;var _0x36044a=_0x049e[_0x5c4e16];return _0x36044a;};'use strict';var _=require(_0xe049('0x0'));var util=require(_0xe049('0x1'));var logger=require('../../config/logger')(_0xe049('0x2'));var moment=require('moment');var BPromise=require(_0xe049('0x3'));var rp=require(_0xe049('0x4'));var fs=require('fs');var path=require(_0xe049('0x5'));var rimraf=require(_0xe049('0x6'));var config=require(_0xe049('0x7'));var attributes=require('./license.attributes');module[_0xe049('0x8')]=function(_0x196af2,_0x22e8f5){return _0x196af2[_0xe049('0x9')](_0xe049('0xa'),attributes,{'tableName':_0xe049('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 3fe47ee..aa385fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ded=['lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','info','License,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch'];(function(_0x550674,_0x1bdb6c){var _0x171551=function(_0x4ec71c){while(--_0x4ec71c){_0x550674['push'](_0x550674['shift']());}};_0x171551(++_0x1bdb6c);}(_0x4ded,0x180));var _0xd4de=function(_0x5961ce,_0x127017){_0x5961ce=_0x5961ce-0x0;var _0x3fb044=_0x4ded[_0x5961ce];return _0x3fb044;};'use strict';var _=require(_0xd4de('0x0'));var util=require(_0xd4de('0x1'));var moment=require(_0xd4de('0x2'));var BPromise=require(_0xd4de('0x3'));var rs=require(_0xd4de('0x4'));var fs=require('fs');var Redis=require(_0xd4de('0x5'));var db=require(_0xd4de('0x6'))['db'];var utils=require(_0xd4de('0x7'));var logger=require('../../config/logger')(_0xd4de('0x8'));var config=require(_0xd4de('0x9'));var jayson=require(_0xd4de('0xa'));var client=jayson[_0xd4de('0xb')][_0xd4de('0xc')]({'port':0x232a});function respondWithRpcPromise(_0xf45223,_0x54a6a4,_0x291fca){return new BPromise(function(_0x4f76c6,_0x352b28){return client[_0xd4de('0xd')](_0xf45223,_0x291fca)['then'](function(_0x13a748){logger[_0xd4de('0xe')](_0xd4de('0xf'),_0x54a6a4,_0xd4de('0x10'));logger[_0xd4de('0x11')]('License,\x20%s,\x20%s,\x20%s',_0x54a6a4,_0xd4de('0x10'),JSON[_0xd4de('0x12')](_0x13a748));if(_0x13a748[_0xd4de('0x13')]){if(_0x13a748['error'][_0xd4de('0x14')]===0x1f4){logger[_0xd4de('0x13')](_0xd4de('0xf'),_0x54a6a4,_0x13a748[_0xd4de('0x13')][_0xd4de('0x15')]);return _0x352b28(_0x13a748[_0xd4de('0x13')][_0xd4de('0x15')]);}logger[_0xd4de('0x13')](_0xd4de('0xf'),_0x54a6a4,_0x13a748['error'][_0xd4de('0x15')]);return _0x4f76c6(_0x13a748['error'][_0xd4de('0x15')]);}else{logger[_0xd4de('0xe')](_0xd4de('0xf'),_0x54a6a4,_0xd4de('0x10'));_0x4f76c6(_0x13a748[_0xd4de('0x16')][_0xd4de('0x15')]);}})[_0xd4de('0x17')](function(_0x20f577){logger[_0xd4de('0x13')](_0xd4de('0xf'),_0x54a6a4,_0x20f577);_0x352b28(_0x20f577);});});}
\ No newline at end of file
+var _0x2c9b=['rpc','../../config/environment','jayson/promise','client','http','then','License,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','lodash','util','moment','bluebird','randomstring','../../config/utils'];(function(_0x5bcb6b,_0xa25f23){var _0x44dd1f=function(_0x5ac9eb){while(--_0x5ac9eb){_0x5bcb6b['push'](_0x5bcb6b['shift']());}};_0x44dd1f(++_0xa25f23);}(_0x2c9b,0x18a));var _0xb2c9=function(_0xd7c670,_0x4f406d){_0xd7c670=_0xd7c670-0x0;var _0x58fd10=_0x2c9b[_0xd7c670];return _0x58fd10;};'use strict';var _=require(_0xb2c9('0x0'));var util=require(_0xb2c9('0x1'));var moment=require(_0xb2c9('0x2'));var BPromise=require(_0xb2c9('0x3'));var rs=require(_0xb2c9('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xb2c9('0x5'));var logger=require('../../config/logger')(_0xb2c9('0x6'));var config=require(_0xb2c9('0x7'));var jayson=require(_0xb2c9('0x8'));var client=jayson[_0xb2c9('0x9')][_0xb2c9('0xa')]({'port':0x232a});function respondWithRpcPromise(_0xcdf331,_0x38a509,_0x1bcf64){return new BPromise(function(_0x38628e,_0x5d8745){return client['request'](_0xcdf331,_0x1bcf64)[_0xb2c9('0xb')](function(_0x91a94b){logger['info'](_0xb2c9('0xc'),_0x38a509,_0xb2c9('0xd'));logger[_0xb2c9('0xe')]('License,\x20%s,\x20%s,\x20%s',_0x38a509,_0xb2c9('0xd'),JSON[_0xb2c9('0xf')](_0x91a94b));if(_0x91a94b[_0xb2c9('0x10')]){if(_0x91a94b['error'][_0xb2c9('0x11')]===0x1f4){logger[_0xb2c9('0x10')]('License,\x20%s,\x20%s',_0x38a509,_0x91a94b[_0xb2c9('0x10')]['message']);return _0x5d8745(_0x91a94b[_0xb2c9('0x10')][_0xb2c9('0x12')]);}logger['error']('License,\x20%s,\x20%s',_0x38a509,_0x91a94b[_0xb2c9('0x10')]['message']);return _0x38628e(_0x91a94b[_0xb2c9('0x10')][_0xb2c9('0x12')]);}else{logger['info'](_0xb2c9('0xc'),_0x38a509,_0xb2c9('0xd'));_0x38628e(_0x91a94b[_0xb2c9('0x13')]['message']);}})['catch'](function(_0x1a1631){logger[_0xb2c9('0x10')]('License,\x20%s,\x20%s',_0x38a509,_0x1a1631);_0x5d8745(_0x1a1631);});});}
\ No newline at end of file
index eae403b..04c635f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc770=['/:id/users','getAgents','/:id/dispositions','addAnswer','post','create','addSmtp','addInteraction','/:id/send','addAgents','put','update','delete','removeDispositions','removeAnswers','removeImap','removeSmtp','removeAgents','exports','multer','util','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailAccount.controller','get','/describe','isAuthenticated','describe','/:id','show','getDispositions','/:id/canned_answers','/:id/in_servers','getImap','/:id/out_servers','getSmtp','/:id/interactions','getInteractions','/:id/applications','getApplications','getMessages','/:id/verify'];(function(_0x46b19c,_0x49921e){var _0x3a004c=function(_0x186605){while(--_0x186605){_0x46b19c['push'](_0x46b19c['shift']());}};_0x3a004c(++_0x49921e);}(_0xc770,0x17b));var _0x0c77=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xc770[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x0c77('0x0'));var util=require(_0x0c77('0x1'));var path=require('path');var timeout=require(_0x0c77('0x2'));var express=require('express');var router=express[_0x0c77('0x3')]();var auth=require(_0x0c77('0x4'));var interaction=require(_0x0c77('0x5'));var config=require(_0x0c77('0x6'));var controller=require(_0x0c77('0x7'));router[_0x0c77('0x8')]('/',auth['isAuthenticated'](),controller['index']);router[_0x0c77('0x8')](_0x0c77('0x9'),auth[_0x0c77('0xa')](),controller[_0x0c77('0xb')]);router['get'](_0x0c77('0xc'),auth[_0x0c77('0xa')](),controller[_0x0c77('0xd')]);router[_0x0c77('0x8')]('/:id/dispositions',auth[_0x0c77('0xa')](),controller[_0x0c77('0xe')]);router['get'](_0x0c77('0xf'),auth[_0x0c77('0xa')](),controller['getAnswers']);router['get'](_0x0c77('0x10'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x11')]);router[_0x0c77('0x8')](_0x0c77('0x12'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x13')]);router[_0x0c77('0x8')](_0x0c77('0x14'),auth['isAuthenticated'](),controller[_0x0c77('0x15')]);router['get'](_0x0c77('0x16'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x17')]);router['get']('/:id/messages',auth[_0x0c77('0xa')](),controller[_0x0c77('0x18')]);router['get'](_0x0c77('0x19'),auth[_0x0c77('0xa')](),controller['verifySmtp']);router[_0x0c77('0x8')](_0x0c77('0x1a'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x1b')]);router['post'](_0x0c77('0x1c'),auth[_0x0c77('0xa')](),controller['addDisposition']);router['post'](_0x0c77('0xf'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x1d')]);router[_0x0c77('0x1e')]('/',auth[_0x0c77('0xa')](),controller[_0x0c77('0x1f')]);router[_0x0c77('0x1e')]('/:id/in_servers',auth[_0x0c77('0xa')](),controller['addImap']);router[_0x0c77('0x1e')](_0x0c77('0x12'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x20')]);router['post'](_0x0c77('0x14'),auth['isAuthenticated'](),controller[_0x0c77('0x21')]);router['post']('/:id/applications',auth[_0x0c77('0xa')](),controller['addApplications']);router[_0x0c77('0x1e')](_0x0c77('0x22'),auth[_0x0c77('0xa')](),controller['send']);router['post'](_0x0c77('0x1a'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x23')]);router[_0x0c77('0x24')](_0x0c77('0xc'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x25')]);router[_0x0c77('0x26')](_0x0c77('0x1c'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x27')]);router[_0x0c77('0x26')](_0x0c77('0xf'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x28')]);router[_0x0c77('0x26')](_0x0c77('0x10'),auth[_0x0c77('0xa')](),controller[_0x0c77('0x29')]);router['delete']('/:id/out_servers',auth['isAuthenticated'](),controller[_0x0c77('0x2a')]);router[_0x0c77('0x26')](_0x0c77('0xc'),auth[_0x0c77('0xa')](),controller['destroy']);router[_0x0c77('0x26')](_0x0c77('0x1a'),auth['isAuthenticated'](),controller[_0x0c77('0x2b')]);module[_0x0c77('0x2c')]=router;
\ No newline at end of file
+var _0xba4e=['connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailAccount.controller','get','/describe','isAuthenticated','describe','/:id','show','/:id/canned_answers','getAnswers','/:id/in_servers','getImap','/:id/out_servers','getSmtp','/:id/interactions','getInteractions','/:id/applications','getApplications','/:id/verify','/:id/users','getAgents','post','addDisposition','addAnswer','create','addImap','addSmtp','addInteraction','/:id/send','put','update','delete','removeAnswers','removeAgents','exports','util','path'];(function(_0x30b094,_0x555417){var _0x4337f3=function(_0x593f40){while(--_0x593f40){_0x30b094['push'](_0x30b094['shift']());}};_0x4337f3(++_0x555417);}(_0xba4e,0x9e));var _0xeba4=function(_0x584da8,_0x4944c4){_0x584da8=_0x584da8-0x0;var _0x4da924=_0xba4e[_0x584da8];return _0x4da924;};'use strict';var multer=require('multer');var util=require(_0xeba4('0x0'));var path=require(_0xeba4('0x1'));var timeout=require(_0xeba4('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0xeba4('0x3'));var interaction=require(_0xeba4('0x4'));var config=require(_0xeba4('0x5'));var controller=require(_0xeba4('0x6'));router[_0xeba4('0x7')]('/',auth['isAuthenticated'](),controller['index']);router['get'](_0xeba4('0x8'),auth[_0xeba4('0x9')](),controller[_0xeba4('0xa')]);router[_0xeba4('0x7')](_0xeba4('0xb'),auth[_0xeba4('0x9')](),controller[_0xeba4('0xc')]);router[_0xeba4('0x7')]('/:id/dispositions',auth[_0xeba4('0x9')](),controller['getDispositions']);router[_0xeba4('0x7')](_0xeba4('0xd'),auth[_0xeba4('0x9')](),controller[_0xeba4('0xe')]);router[_0xeba4('0x7')](_0xeba4('0xf'),auth[_0xeba4('0x9')](),controller[_0xeba4('0x10')]);router[_0xeba4('0x7')](_0xeba4('0x11'),auth[_0xeba4('0x9')](),controller[_0xeba4('0x12')]);router['get'](_0xeba4('0x13'),auth[_0xeba4('0x9')](),controller[_0xeba4('0x14')]);router[_0xeba4('0x7')](_0xeba4('0x15'),auth['isAuthenticated'](),controller[_0xeba4('0x16')]);router[_0xeba4('0x7')]('/:id/messages',auth[_0xeba4('0x9')](),controller['getMessages']);router[_0xeba4('0x7')](_0xeba4('0x17'),auth[_0xeba4('0x9')](),controller['verifySmtp']);router[_0xeba4('0x7')](_0xeba4('0x18'),auth['isAuthenticated'](),controller[_0xeba4('0x19')]);router[_0xeba4('0x1a')]('/:id/dispositions',auth[_0xeba4('0x9')](),controller[_0xeba4('0x1b')]);router['post'](_0xeba4('0xd'),auth[_0xeba4('0x9')](),controller[_0xeba4('0x1c')]);router['post']('/',auth[_0xeba4('0x9')](),controller[_0xeba4('0x1d')]);router[_0xeba4('0x1a')](_0xeba4('0xf'),auth[_0xeba4('0x9')](),controller[_0xeba4('0x1e')]);router['post'](_0xeba4('0x11'),auth['isAuthenticated'](),controller[_0xeba4('0x1f')]);router[_0xeba4('0x1a')](_0xeba4('0x13'),auth['isAuthenticated'](),controller[_0xeba4('0x20')]);router[_0xeba4('0x1a')](_0xeba4('0x15'),auth['isAuthenticated'](),controller['addApplications']);router[_0xeba4('0x1a')](_0xeba4('0x21'),auth[_0xeba4('0x9')](),controller['send']);router[_0xeba4('0x1a')](_0xeba4('0x18'),auth[_0xeba4('0x9')](),controller['addAgents']);router[_0xeba4('0x22')]('/:id',auth['isAuthenticated'](),controller[_0xeba4('0x23')]);router[_0xeba4('0x24')]('/:id/dispositions',auth[_0xeba4('0x9')](),controller['removeDispositions']);router[_0xeba4('0x24')](_0xeba4('0xd'),auth[_0xeba4('0x9')](),controller[_0xeba4('0x25')]);router[_0xeba4('0x24')](_0xeba4('0xf'),auth[_0xeba4('0x9')](),controller['removeImap']);router['delete'](_0xeba4('0x11'),auth[_0xeba4('0x9')](),controller['removeSmtp']);router[_0xeba4('0x24')](_0xeba4('0xb'),auth['isAuthenticated'](),controller['destroy']);router[_0xeba4('0x24')](_0xeba4('0x18'),auth[_0xeba4('0x9')](),controller[_0xeba4('0x26')]);module[_0xeba4('0x27')]=router;
\ No newline at end of file
index 76ccde3..51642f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a28=['STRING','BOOLEAN','TEXT','INTEGER','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}<br/>Subject\x20:\x20{{message.subject}}','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','setDataValue','mandatoryDispositionPauseId','sequelize','exports'];(function(_0x1d6516,_0x4be7a4){var _0x3b560b=function(_0x8bdec3){while(--_0x8bdec3){_0x1d6516['push'](_0x1d6516['shift']());}};_0x3b560b(++_0x4be7a4);}(_0x7a28,0xbc));var _0x87a2=function(_0x519550,_0xb40c75){_0x519550=_0x519550-0x0;var _0x589172=_0x7a28[_0x519550];return _0x589172;};'use strict';var Sequelize=require(_0x87a2('0x0'));module[_0x87a2('0x1')]={'description':{'type':Sequelize[_0x87a2('0x2')]},'name':{'type':Sequelize[_0x87a2('0x2')],'allowNull':![]},'service':{'type':Sequelize[_0x87a2('0x3')],'defaultValue':![]},'email':{'type':Sequelize['STRING'],'validate':{'isEmail':!![]}},'active':{'type':Sequelize[_0x87a2('0x3')],'defaultValue':!![]},'key':{'type':Sequelize['STRING'],'allowNull':![]},'template':{'type':Sequelize[_0x87a2('0x4')]},'markAsUnread':{'type':Sequelize[_0x87a2('0x3')],'defaultValue':![]},'fontFamily':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'Arial,Helvetica,sans-serif'},'fontSize':{'type':Sequelize[_0x87a2('0x5')](0x2)['UNSIGNED'],'defaultValue':0xd,'validate':{'min':0x8,'max':0x48}},'notificationTemplate':{'type':Sequelize[_0x87a2('0x4')],'defaultValue':function(){return _0x87a2('0x6');}},'notificationSound':{'type':Sequelize[_0x87a2('0x3')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x87a2('0x3')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x87a2('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0x87a2('0x3')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x87a2('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[_0x87a2('0x5')],'allowNull':!![],'defaultValue':null,'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'comment':_0x87a2('0x7'),'set':function(_0x5d8ec6){if(!_0x5d8ec6)this[_0x87a2('0x8')](_0x87a2('0x9'),null);this['setDataValue']('mandatoryDisposition',_0x5d8ec6);}}};
\ No newline at end of file
+var _0xcd55=['Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}<br/>Subject\x20:\x20{{message.subject}}','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','setDataValue','mandatoryDispositionPauseId','exports','STRING','TEXT','BOOLEAN','Arial,Helvetica,sans-serif','INTEGER','UNSIGNED'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xcd55,0x14e));var _0x5cd5=function(_0x4a53d,_0x58a95e){_0x4a53d=_0x4a53d-0x0;var _0x27410e=_0xcd55[_0x4a53d];return _0x27410e;};'use strict';var Sequelize=require('sequelize');module[_0x5cd5('0x0')]={'description':{'type':Sequelize[_0x5cd5('0x1')]},'name':{'type':Sequelize[_0x5cd5('0x1')],'allowNull':![]},'service':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'email':{'type':Sequelize[_0x5cd5('0x1')],'validate':{'isEmail':!![]}},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'key':{'type':Sequelize[_0x5cd5('0x1')],'allowNull':![]},'template':{'type':Sequelize[_0x5cd5('0x2')]},'markAsUnread':{'type':Sequelize[_0x5cd5('0x3')],'defaultValue':![]},'fontFamily':{'type':Sequelize[_0x5cd5('0x1')],'allowNull':![],'defaultValue':_0x5cd5('0x4')},'fontSize':{'type':Sequelize[_0x5cd5('0x5')](0x2)[_0x5cd5('0x6')],'defaultValue':0xd,'validate':{'min':0x8,'max':0x48}},'notificationTemplate':{'type':Sequelize[_0x5cd5('0x2')],'defaultValue':function(){return _0x5cd5('0x7');}},'notificationSound':{'type':Sequelize[_0x5cd5('0x3')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x5cd5('0x3')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x5cd5('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0x5cd5('0x3')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x5cd5('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x5cd5('0x5')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0x5cd5('0x5')],'allowNull':!![],'defaultValue':null,'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize[_0x5cd5('0x3')],'defaultValue':![],'comment':_0x5cd5('0x8'),'set':function(_0x1d32a5){if(!_0x1d32a5)this[_0x5cd5('0x9')](_0x5cd5('0xa'),null);this[_0x5cd5('0x9')]('mandatoryDisposition',_0x1d32a5);}}};
\ No newline at end of file
index ac30f03..6d522a6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b6f=['desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','redis','defaults','localhost','socket.io-emitter','register','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~!@#$%^&-_=+[{]}.','MailAccount,\x20%s,\x20%s','debug','MailAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','sendStatus','status','json','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','get','MailAccounts','end','stack','name','send','Imap','MailServerOut','rawAttributes','model','keys','query','filters','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','map','type','key','field','options','count','includeAll','include','MailAccount','findAll','rows','catch','show','params','MailServerIn','Smtp','Pause','mandatoryDispositionPause','find','body','describe','Disposition','create','findOne','intersection','MailAccountId','removeDispositions','ids','CannedAnswer','getAnswers','removeAnswers','email','isNil','active','description','cservice','cauthentication','user','cuser','password','pass','cpassword','authentication','host','port','service','role','UserProfileSection','autoAssociation','UserProfileResource','getImap','addImap','getSmtp','removeSmtp','setSmtp','MailInteraction','addInteraction','omit','Contact','User','Owner','fullname','internal','Tag','tag','addApplications','sequelize','transaction','MailApplication','bulkCreate','findAndCountAll','priority','getApplications','getMessages','MailMessage','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','CmList','List','CmContact','Contacts','updatedAt','from','%s\x20<%s>','attachments','join','root','basename','auth','secure','SendMail','sendMail','List\x20not\x20found','ListId','messageId','subject','attach','out','Interaction','verifySmtp','VerifySmtp','Sequelize','You\x20can\x27t\x20remove\x20the\x20mail\x20service\x20account','addAgents','spread','emit','userMailAccount:save','removeAgents','isArray','userMailAccount:remove','getAgents','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce'];(function(_0x114abb,_0x494687){var _0x2314d8=function(_0x1d954c){while(--_0x1d954c){_0x114abb['push'](_0x114abb['shift']());}};_0x2314d8(++_0x494687);}(_0x8b6f,0x177));var _0xf8b6=function(_0x2e7c5b,_0x2e37f4){_0x2e7c5b=_0x2e7c5b-0x0;var _0x3ad5fd=_0x8b6f[_0x2e7c5b];return _0x3ad5fd;};'use strict';var pdf=require(_0xf8b6('0x0'));var emlformat=require(_0xf8b6('0x1'));var rimraf=require(_0xf8b6('0x2'));var zipdir=require(_0xf8b6('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xf8b6('0x4'));var moment=require(_0xf8b6('0x5'));var BPromise=require(_0xf8b6('0x6'));var Mustache=require('mustache');var util=require('util');var path=require(_0xf8b6('0x7'));var sox=require(_0xf8b6('0x8'));var csv=require(_0xf8b6('0x9'));var ejs=require(_0xf8b6('0xa'));var fs=require('fs');var _=require(_0xf8b6('0xb'));var squel=require(_0xf8b6('0xc'));var crypto=require(_0xf8b6('0xd'));var jsforce=require(_0xf8b6('0xe'));var deskjs=require(_0xf8b6('0xf'));var toCsv=require(_0xf8b6('0x9'));var querystring=require(_0xf8b6('0x10'));var Papa=require(_0xf8b6('0x11'));var Redis=require(_0xf8b6('0x12'));var authService=require(_0xf8b6('0x13'));var qs=require(_0xf8b6('0x14'));var hardwareService=require(_0xf8b6('0x15'));var logger=require(_0xf8b6('0x16'))(_0xf8b6('0x17'));var utils=require(_0xf8b6('0x18'));var config=require(_0xf8b6('0x19'));var db=require('../../mysqldb')['db'];config[_0xf8b6('0x1a')]=_[_0xf8b6('0x1b')](config['redis'],{'host':_0xf8b6('0x1c'),'port':0x18eb});var socket=require(_0xf8b6('0x1d'))(new Redis(config['redis']));require('./mailAccount.socket')[_0xf8b6('0x1e')](socket);var jayson=require(_0xf8b6('0x1f'));var client=jayson[_0xf8b6('0x20')][_0xf8b6('0x21')]({'port':0x232b});function checkPasswordPattern(_0x11752b,_0x49ad1e,_0x2019e7){if(_0x2019e7){var _0x53af9e=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x53af9e['test'](_0x49ad1e)){return _0x11752b;}else{throw new Error(_0xf8b6('0x22'));}}else{return _0x11752b;}}function respondWithRpcPromise(_0x50ebd0,_0x23bd49,_0x5e7001,_0xae6ad7){return new BPromise(function(_0x40350d,_0x375ed4){var _0x198c61=_0xae6ad7||client;return _0x198c61['request'](_0x50ebd0,_0x5e7001)['then'](function(_0x3436de){logger['info'](_0xf8b6('0x23'),_0x23bd49,'request\x20sent');logger[_0xf8b6('0x24')](_0xf8b6('0x25'),_0x23bd49,_0xf8b6('0x26'),JSON[_0xf8b6('0x27')](_0x3436de));if(_0x3436de[_0xf8b6('0x28')]){if(_0x3436de[_0xf8b6('0x28')][_0xf8b6('0x29')]===0x1f4){logger[_0xf8b6('0x28')](_0xf8b6('0x23'),_0x23bd49,_0x3436de[_0xf8b6('0x28')][_0xf8b6('0x2a')]);return _0x375ed4(_0x3436de['error'][_0xf8b6('0x2a')]);}logger[_0xf8b6('0x28')](_0xf8b6('0x23'),_0x23bd49,_0x3436de['error'][_0xf8b6('0x2a')]);return _0x40350d(_0x3436de[_0xf8b6('0x28')][_0xf8b6('0x2a')]);}else{logger[_0xf8b6('0x2b')](_0xf8b6('0x23'),_0x23bd49,_0xf8b6('0x26'));_0x40350d(_0x3436de[_0xf8b6('0x2c')][_0xf8b6('0x2a')]);}})['catch'](function(_0x410c9a){logger[_0xf8b6('0x28')](_0xf8b6('0x23'),_0x23bd49,_0x410c9a);_0x375ed4(_0x410c9a);});});}function respondWithStatusCode(_0xf0bcef,_0x20bc99){_0x20bc99=_0x20bc99||0xcc;return function(_0x13a239){if(_0x13a239){return _0xf0bcef[_0xf8b6('0x2d')](_0x20bc99);}return _0xf0bcef[_0xf8b6('0x2e')](_0x20bc99)['end']();};}function respondWithResult(_0x3a2dbc,_0x4a3802){_0x4a3802=_0x4a3802||0xc8;return function(_0x428d37){if(_0x428d37){return _0x3a2dbc['status'](_0x4a3802)[_0xf8b6('0x2f')](_0x428d37);}};}function respondWithFilteredResult(_0x1acf71,_0x5d357f){return function(_0x770534){if(_0x770534){var _0x4a979c=_0x770534['count'],_0x1189d5=_0x5d357f[_0xf8b6('0x30')],_0x38bb06=_0x5d357f[_0xf8b6('0x30')]+_0x5d357f[_0xf8b6('0x31')],_0x1fb807;if(_0x38bb06>=_0x4a979c){_0x38bb06=_0x4a979c;_0x1fb807=0xc8;}else{_0x1fb807=0xce;}_0x1acf71[_0xf8b6('0x2e')](_0x1fb807);return _0x1acf71[_0xf8b6('0x32')](_0xf8b6('0x33'),_0x1189d5+'-'+_0x38bb06+'/'+_0x4a979c)[_0xf8b6('0x2f')](_0x770534);}return null;};}function patchUpdates(_0x5ead1e){return function(_0x4cc242){try{jsonpatch[_0xf8b6('0x34')](_0x4cc242,_0x5ead1e,!![]);}catch(_0xb6363c){return BPromise[_0xf8b6('0x35')](_0xb6363c);}return _0x4cc242[_0xf8b6('0x36')]();};}function saveUpdates(_0x228868,_0x527090){return function(_0x24945e){if(_0x24945e){return _0x24945e[_0xf8b6('0x37')](_0x228868)[_0xf8b6('0x38')](function(_0x4e4e6b){return _0x4e4e6b;});}return null;};}function removeEntity(_0x5e13ef,_0x4c7287){return function(_0x574bb5){if(_0x574bb5){return _0x574bb5[_0xf8b6('0x39')]()[_0xf8b6('0x38')](function(){var _0x146421=_0x574bb5[_0xf8b6('0x3a')]({'plain':!![]});var _0x1d4d7d=_0xf8b6('0x3b');return db['UserProfileResource']['destroy']({'where':{'type':_0x1d4d7d,'resourceId':_0x146421['id']}})[_0xf8b6('0x38')](function(){return _0x574bb5;});})['then'](function(){_0x5e13ef[_0xf8b6('0x2e')](0xcc)[_0xf8b6('0x3c')]();});}};}function handleEntityNotFound(_0x1f24f1,_0x79b3c){return function(_0x15ab5d){if(!_0x15ab5d){_0x1f24f1['sendStatus'](0x194);}return _0x15ab5d;};}function handleError(_0x4593ef,_0x2147a8){_0x2147a8=_0x2147a8||0x1f4;return function(_0x80de25){logger[_0xf8b6('0x28')](_0x80de25[_0xf8b6('0x3d')]);if(_0x80de25[_0xf8b6('0x3e')]){delete _0x80de25[_0xf8b6('0x3e')];}_0x4593ef[_0xf8b6('0x2e')](_0x2147a8)[_0xf8b6('0x3f')](_0x80de25);};}exports['index']=function(_0x498d12,_0x2f74a1){var _0x5878f0={'include':[{'model':db['MailServerIn'],'as':_0xf8b6('0x40')},{'model':db[_0xf8b6('0x41')],'as':'Smtp'},{'model':db['Pause'],'as':'mandatoryDispositionPause'}]},_0x4beabd={},_0x1b47e3={'count':0x0,'rows':[]};var _0x22f8d0=db['MailAccount'][_0xf8b6('0x42')];_0x4beabd[_0xf8b6('0x43')]=_[_0xf8b6('0x44')](_0x22f8d0);_0x4beabd[_0xf8b6('0x45')]=_[_0xf8b6('0x44')](_0x498d12[_0xf8b6('0x45')]);_0x4beabd[_0xf8b6('0x46')]=_['intersection'](_0x4beabd[_0xf8b6('0x43')],_0x4beabd[_0xf8b6('0x45')]);_0x5878f0[_0xf8b6('0x47')]=_['intersection'](_0x4beabd[_0xf8b6('0x43')],qs[_0xf8b6('0x48')](_0x498d12[_0xf8b6('0x45')][_0xf8b6('0x48')]));_0x5878f0['attributes']=_0x5878f0['attributes'][_0xf8b6('0x49')]?_0x5878f0[_0xf8b6('0x47')]:_0x4beabd['model'];if(!_0x498d12['query'][_0xf8b6('0x4a')](_0xf8b6('0x4b'))){_0x5878f0[_0xf8b6('0x31')]=qs[_0xf8b6('0x31')](_0x498d12[_0xf8b6('0x45')][_0xf8b6('0x31')]);_0x5878f0[_0xf8b6('0x30')]=qs[_0xf8b6('0x30')](_0x498d12[_0xf8b6('0x45')]['offset']);}_0x5878f0[_0xf8b6('0x4c')]=qs[_0xf8b6('0x4d')](_0x498d12['query'][_0xf8b6('0x4d')]);_0x5878f0['where']=qs['filters'](_[_0xf8b6('0x4e')](_0x498d12['query'],_0x4beabd[_0xf8b6('0x46')]));if(_0x498d12[_0xf8b6('0x45')][_0xf8b6('0x4f')]){_0x5878f0[_0xf8b6('0x50')]=_[_0xf8b6('0x51')](_0x5878f0[_0xf8b6('0x50')],{'$or':_[_0xf8b6('0x52')](_0x22f8d0,function(_0xbabeb7){if(_0xbabeb7[_0xf8b6('0x53')][_0xf8b6('0x54')]!=='VIRTUAL'){var _0x6afd64={};_0x6afd64[_0xbabeb7[_0xf8b6('0x55')]]={'$like':'%'+_0x498d12[_0xf8b6('0x45')][_0xf8b6('0x4f')]+'%'};return _0x6afd64;}})});}_0x5878f0=_[_0xf8b6('0x51')]({},_0x5878f0,_0x498d12[_0xf8b6('0x56')]);var _0x2e2b79={'where':_0x5878f0['where']};return db['MailAccount'][_0xf8b6('0x57')](_0x2e2b79)['then'](function(_0x1a8bb9){_0x1b47e3[_0xf8b6('0x57')]=_0x1a8bb9;if(_0x498d12['query'][_0xf8b6('0x58')]){_0x5878f0[_0xf8b6('0x59')]=[{'all':!![]}];}return db[_0xf8b6('0x5a')][_0xf8b6('0x5b')](_0x5878f0);})[_0xf8b6('0x38')](function(_0x58a1b6){_0x1b47e3[_0xf8b6('0x5c')]=_0x58a1b6;return _0x1b47e3;})[_0xf8b6('0x38')](respondWithFilteredResult(_0x2f74a1,_0x5878f0))[_0xf8b6('0x5d')](handleError(_0x2f74a1,null));};exports[_0xf8b6('0x5e')]=function(_0x48e622,_0x644898){var _0x333343={'raw':![],'where':{'id':_0x48e622[_0xf8b6('0x5f')]['id']},'include':[{'model':db[_0xf8b6('0x60')],'as':_0xf8b6('0x40')},{'model':db[_0xf8b6('0x41')],'as':_0xf8b6('0x61')},{'model':db[_0xf8b6('0x62')],'as':_0xf8b6('0x63')}]},_0x6558a7={};_0x6558a7[_0xf8b6('0x43')]=_['keys'](db[_0xf8b6('0x5a')][_0xf8b6('0x42')]);_0x6558a7['query']=_[_0xf8b6('0x44')](_0x48e622[_0xf8b6('0x45')]);_0x6558a7[_0xf8b6('0x46')]=_['intersection'](_0x6558a7[_0xf8b6('0x43')],_0x6558a7[_0xf8b6('0x45')]);_0x333343['attributes']=_['intersection'](_0x6558a7[_0xf8b6('0x43')],qs['fields'](_0x48e622[_0xf8b6('0x45')][_0xf8b6('0x48')]));_0x333343['attributes']=_0x333343[_0xf8b6('0x47')][_0xf8b6('0x49')]?_0x333343[_0xf8b6('0x47')]:_0x6558a7[_0xf8b6('0x43')];if(_0x48e622[_0xf8b6('0x45')]['includeAll']){_0x333343['include']=[{'all':!![]}];}_0x333343=_[_0xf8b6('0x51')]({},_0x333343,_0x48e622[_0xf8b6('0x56')]);return db[_0xf8b6('0x5a')][_0xf8b6('0x64')](_0x333343)[_0xf8b6('0x38')](handleEntityNotFound(_0x644898,null))[_0xf8b6('0x38')](respondWithResult(_0x644898,null))[_0xf8b6('0x5d')](handleError(_0x644898,null));};exports[_0xf8b6('0x37')]=function(_0x5195ca,_0x1540e1){if(_0x5195ca[_0xf8b6('0x65')]['id']){delete _0x5195ca[_0xf8b6('0x65')]['id'];}return db[_0xf8b6('0x5a')][_0xf8b6('0x64')]({'where':{'id':_0x5195ca['params']['id']},'include':[{'model':db['MailServerIn'],'as':_0xf8b6('0x40')},{'model':db[_0xf8b6('0x41')],'as':_0xf8b6('0x61')},{'model':db['Pause'],'as':_0xf8b6('0x63')}]})[_0xf8b6('0x38')](handleEntityNotFound(_0x1540e1,null))['then'](saveUpdates(_0x5195ca[_0xf8b6('0x65')],null))['then'](function(_0x2eeb31){if(_0x2eeb31&&_0x5195ca[_0xf8b6('0x65')]['Imap']){return db[_0xf8b6('0x60')]['update'](_0x5195ca['body'][_0xf8b6('0x40')],{'where':{'MailAccountId':_0x2eeb31['id']}})[_0xf8b6('0x38')](function(){return _0x2eeb31;});}return _0x2eeb31;})[_0xf8b6('0x38')](function(_0x108d5a){if(_0x108d5a&&_0x5195ca[_0xf8b6('0x65')]['Smtp']){return db[_0xf8b6('0x41')]['update'](_0x5195ca[_0xf8b6('0x65')][_0xf8b6('0x61')],{'where':{'MailAccountId':_0x108d5a['id']}})[_0xf8b6('0x38')](function(){return _0x108d5a;});}return _0x108d5a;})['then'](respondWithResult(_0x1540e1,null))[_0xf8b6('0x5d')](handleError(_0x1540e1,null));};exports[_0xf8b6('0x66')]=function(_0xd3ebb,_0x393ca6){return db['MailAccount'][_0xf8b6('0x66')]()[_0xf8b6('0x38')](respondWithResult(_0x393ca6,null))[_0xf8b6('0x5d')](handleError(_0x393ca6,null));};exports['addDisposition']=function(_0x53d9d3,_0x4f4f1e,_0x368d99){if(_0x53d9d3[_0xf8b6('0x65')]['id']){delete _0x53d9d3[_0xf8b6('0x65')]['id'];}return db[_0xf8b6('0x5a')]['find']({'where':{'id':_0x53d9d3[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x4f4f1e,null))[_0xf8b6('0x38')](function(_0x233d04){if(_0x233d04){_0x53d9d3[_0xf8b6('0x65')]['MailAccountId']=_0x233d04['id'];return db[_0xf8b6('0x67')][_0xf8b6('0x68')](_0x53d9d3[_0xf8b6('0x65')]);}})['then'](respondWithResult(_0x4f4f1e,null))[_0xf8b6('0x5d')](handleError(_0x4f4f1e,null));};exports['getDispositions']=function(_0x74caa6,_0x344f67,_0x599277){var _0xa95c8c={'raw':![],'where':{}};var _0x50b7df={};var _0x401a33={'count':0x0,'rows':[]};return db[_0xf8b6('0x5a')][_0xf8b6('0x69')]({'where':{'id':_0x74caa6[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x344f67,null))[_0xf8b6('0x38')](function(_0x42117e){if(_0x42117e){_0x50b7df[_0xf8b6('0x43')]=_[_0xf8b6('0x44')](db[_0xf8b6('0x67')][_0xf8b6('0x42')]);_0x50b7df['query']=_[_0xf8b6('0x44')](_0x74caa6['query']);_0x50b7df[_0xf8b6('0x46')]=_[_0xf8b6('0x6a')](_0x50b7df[_0xf8b6('0x43')],_0x50b7df[_0xf8b6('0x45')]);_0xa95c8c[_0xf8b6('0x47')]=_[_0xf8b6('0x6a')](_0x50b7df[_0xf8b6('0x43')],qs['fields'](_0x74caa6[_0xf8b6('0x45')][_0xf8b6('0x48')]));_0xa95c8c[_0xf8b6('0x47')]=_0xa95c8c['attributes'][_0xf8b6('0x49')]?_0xa95c8c[_0xf8b6('0x47')]:_0x50b7df['model'];if(!_0x74caa6[_0xf8b6('0x45')][_0xf8b6('0x4a')]('nolimit')){_0xa95c8c['limit']=qs[_0xf8b6('0x31')](_0x74caa6['query'][_0xf8b6('0x31')]);_0xa95c8c['offset']=qs[_0xf8b6('0x30')](_0x74caa6['query'][_0xf8b6('0x30')]);}_0xa95c8c[_0xf8b6('0x4c')]=qs[_0xf8b6('0x4d')](_0x74caa6[_0xf8b6('0x45')][_0xf8b6('0x4d')]);_0xa95c8c['where']=qs[_0xf8b6('0x46')](_[_0xf8b6('0x4e')](_0x74caa6[_0xf8b6('0x45')],_0x50b7df[_0xf8b6('0x46')]));_0xa95c8c['where'][_0xf8b6('0x6b')]=_0x42117e['id'];if(_0x74caa6[_0xf8b6('0x45')][_0xf8b6('0x4f')]){_0xa95c8c[_0xf8b6('0x50')]=_[_0xf8b6('0x51')](_0xa95c8c['where'],{'$or':_[_0xf8b6('0x52')](_0xa95c8c['attributes'],function(_0x2ed28c){var _0x410ab9={};_0x410ab9[_0x2ed28c]={'$like':'%'+_0x74caa6[_0xf8b6('0x45')]['filter']+'%'};return _0x410ab9;})});}_0xa95c8c=_[_0xf8b6('0x51')]({},_0xa95c8c,_0x74caa6[_0xf8b6('0x56')]);return db['Disposition']['count']({'where':_0xa95c8c[_0xf8b6('0x50')]})[_0xf8b6('0x38')](function(_0x4f48dc){_0x401a33['count']=_0x4f48dc;if(_0x74caa6['query'][_0xf8b6('0x58')]){_0xa95c8c[_0xf8b6('0x59')]=[{'all':!![]}];}return db['Disposition']['findAll'](_0xa95c8c);})['then'](function(_0x5986f6){_0x401a33[_0xf8b6('0x5c')]=_0x5986f6;return _0x401a33;});}})[_0xf8b6('0x38')](respondWithFilteredResult(_0x344f67,_0xa95c8c))['catch'](handleError(_0x344f67,null));};exports[_0xf8b6('0x6c')]=function(_0x25ce70,_0x32bfa9,_0x5036a3){return db[_0xf8b6('0x5a')][_0xf8b6('0x64')]({'where':{'id':_0x25ce70[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x32bfa9,null))[_0xf8b6('0x38')](function(_0x150c65){if(_0x150c65){return _0x150c65[_0xf8b6('0x6c')](_0x25ce70[_0xf8b6('0x45')][_0xf8b6('0x6d')]);}})[_0xf8b6('0x38')](respondWithStatusCode(_0x32bfa9,null))['catch'](handleError(_0x32bfa9,null));};exports['addAnswer']=function(_0x1c0255,_0x1631ad,_0x23077a){if(_0x1c0255[_0xf8b6('0x65')]['id']){delete _0x1c0255[_0xf8b6('0x65')]['id'];}return db[_0xf8b6('0x5a')]['find']({'where':{'id':_0x1c0255[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x1631ad,null))[_0xf8b6('0x38')](function(_0x5e2287){if(_0x5e2287){_0x1c0255['body'][_0xf8b6('0x6b')]=_0x5e2287['id'];return db[_0xf8b6('0x6e')][_0xf8b6('0x68')](_0x1c0255[_0xf8b6('0x65')]);}})[_0xf8b6('0x38')](respondWithResult(_0x1631ad,null))[_0xf8b6('0x5d')](handleError(_0x1631ad,null));};exports[_0xf8b6('0x6f')]=function(_0x3e3bc8,_0x1b79c9,_0x5e17aa){var _0x4e7a1b={'raw':![],'where':{}};var _0x191b63={};var _0x2dfcf3={'count':0x0,'rows':[]};return db['MailAccount'][_0xf8b6('0x69')]({'where':{'id':_0x3e3bc8[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x1b79c9,null))['then'](function(_0x1dc404){if(_0x1dc404){_0x191b63['model']=_[_0xf8b6('0x44')](db[_0xf8b6('0x6e')][_0xf8b6('0x42')]);_0x191b63[_0xf8b6('0x45')]=_['keys'](_0x3e3bc8[_0xf8b6('0x45')]);_0x191b63['filters']=_[_0xf8b6('0x6a')](_0x191b63[_0xf8b6('0x43')],_0x191b63[_0xf8b6('0x45')]);_0x4e7a1b['attributes']=_[_0xf8b6('0x6a')](_0x191b63[_0xf8b6('0x43')],qs[_0xf8b6('0x48')](_0x3e3bc8['query'][_0xf8b6('0x48')]));_0x4e7a1b['attributes']=_0x4e7a1b[_0xf8b6('0x47')][_0xf8b6('0x49')]?_0x4e7a1b[_0xf8b6('0x47')]:_0x191b63['model'];if(!_0x3e3bc8[_0xf8b6('0x45')]['hasOwnProperty'](_0xf8b6('0x4b'))){_0x4e7a1b[_0xf8b6('0x31')]=qs['limit'](_0x3e3bc8[_0xf8b6('0x45')][_0xf8b6('0x31')]);_0x4e7a1b[_0xf8b6('0x30')]=qs[_0xf8b6('0x30')](_0x3e3bc8['query'][_0xf8b6('0x30')]);}_0x4e7a1b[_0xf8b6('0x4c')]=qs['sort'](_0x3e3bc8['query'][_0xf8b6('0x4d')]);_0x4e7a1b[_0xf8b6('0x50')]=qs['filters'](_[_0xf8b6('0x4e')](_0x3e3bc8[_0xf8b6('0x45')],_0x191b63[_0xf8b6('0x46')]));_0x4e7a1b['where'][_0xf8b6('0x6b')]=_0x1dc404['id'];if(_0x3e3bc8['query'][_0xf8b6('0x4f')]){_0x4e7a1b[_0xf8b6('0x50')]=_[_0xf8b6('0x51')](_0x4e7a1b[_0xf8b6('0x50')],{'$or':_[_0xf8b6('0x52')](_0x4e7a1b[_0xf8b6('0x47')],function(_0x2fe63d){var _0x389902={};_0x389902[_0x2fe63d]={'$like':'%'+_0x3e3bc8[_0xf8b6('0x45')]['filter']+'%'};return _0x389902;})});}_0x4e7a1b=_[_0xf8b6('0x51')]({},_0x4e7a1b,_0x3e3bc8['options']);return db[_0xf8b6('0x6e')][_0xf8b6('0x57')]({'where':_0x4e7a1b[_0xf8b6('0x50')]})[_0xf8b6('0x38')](function(_0x260782){_0x2dfcf3[_0xf8b6('0x57')]=_0x260782;if(_0x3e3bc8[_0xf8b6('0x45')][_0xf8b6('0x58')]){_0x4e7a1b[_0xf8b6('0x59')]=[{'all':!![]}];}return db[_0xf8b6('0x6e')][_0xf8b6('0x5b')](_0x4e7a1b);})['then'](function(_0x8be4fc){_0x2dfcf3[_0xf8b6('0x5c')]=_0x8be4fc;return _0x2dfcf3;});}})[_0xf8b6('0x38')](respondWithFilteredResult(_0x1b79c9,_0x4e7a1b))[_0xf8b6('0x5d')](handleError(_0x1b79c9,null));};exports[_0xf8b6('0x70')]=function(_0x58b357,_0x4426ed,_0x26a653){return db['MailAccount'][_0xf8b6('0x64')]({'where':{'id':_0x58b357[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x4426ed,null))[_0xf8b6('0x38')](function(_0x4de963){if(_0x4de963){return _0x4de963[_0xf8b6('0x70')](_0x58b357['query']['ids']);}})[_0xf8b6('0x38')](respondWithStatusCode(_0x4426ed,null))[_0xf8b6('0x5d')](handleError(_0x4426ed,null));};exports[_0xf8b6('0x68')]=function(_0x11976f,_0x379754){var _0x5a89d4={'name':_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x3e')],'key':_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x54')],'email':_0x11976f['body'][_0xf8b6('0x71')],'ListId':_0x11976f[_0xf8b6('0x65')]['ListId'],'active':!_[_0xf8b6('0x72')](_0x11976f[_0xf8b6('0x65')]['active'])?_0x11976f['body'][_0xf8b6('0x73')]:!![],'description':_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x74')]||null,'Imap':{},'Smtp':{}};if(_['isNil'](_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x75')])){if(_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x76')]){_0x5a89d4[_0xf8b6('0x40')]['user']=_0x5a89d4[_0xf8b6('0x61')][_0xf8b6('0x77')]=_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x78')];_0x5a89d4[_0xf8b6('0x40')][_0xf8b6('0x79')]=_0x5a89d4['Smtp'][_0xf8b6('0x7a')]=_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x7b')];}else{_0x5a89d4['Imap'][_0xf8b6('0x7c')]=_0x5a89d4[_0xf8b6('0x61')]['authentication']=![];}_0x5a89d4[_0xf8b6('0x40')][_0xf8b6('0x7d')]=_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x40')]['host'];_0x5a89d4[_0xf8b6('0x40')][_0xf8b6('0x7e')]=_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x40')][_0xf8b6('0x7e')];_0x5a89d4['Smtp'][_0xf8b6('0x7d')]=_0x11976f['body'][_0xf8b6('0x61')][_0xf8b6('0x7d')];_0x5a89d4[_0xf8b6('0x61')][_0xf8b6('0x7e')]=_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x61')]['port'];}else{_0x5a89d4[_0xf8b6('0x40')][_0xf8b6('0x7f')]=_0x5a89d4['Smtp'][_0xf8b6('0x7f')]=_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x75')];_0x5a89d4[_0xf8b6('0x40')]['user']=_0x5a89d4[_0xf8b6('0x61')][_0xf8b6('0x77')]=_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x78')];_0x5a89d4[_0xf8b6('0x40')][_0xf8b6('0x79')]=_0x5a89d4[_0xf8b6('0x61')][_0xf8b6('0x7a')]=_0x11976f[_0xf8b6('0x65')][_0xf8b6('0x7b')];}return db[_0xf8b6('0x5a')][_0xf8b6('0x68')](_0x5a89d4,{'include':[{'model':db[_0xf8b6('0x41')],'as':_0xf8b6('0x61')},{'model':db[_0xf8b6('0x60')],'as':_0xf8b6('0x40')}]})['then'](function(_0x317783){var _0x5620e9=_0x11976f[_0xf8b6('0x77')]['get']({'plain':!![]});if(!_0x5620e9)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x5620e9[_0xf8b6('0x80')]===_0xf8b6('0x77')){var _0x100a9d=_0x317783[_0xf8b6('0x3a')]({'plain':!![]});return db[_0xf8b6('0x81')]['find']({'where':{'name':'MailAccounts','userProfileId':_0x5620e9['userProfileId']},'raw':!![]})[_0xf8b6('0x38')](function(_0xc03cfd){if(_0xc03cfd&&_0xc03cfd[_0xf8b6('0x82')]===0x0){return db[_0xf8b6('0x83')][_0xf8b6('0x68')]({'name':_0x100a9d[_0xf8b6('0x3e')],'resourceId':_0x100a9d['id'],'type':_0xc03cfd[_0xf8b6('0x3e')],'sectionId':_0xc03cfd['id']},{})['then'](function(){return _0x317783;});}else{return _0x317783;}})[_0xf8b6('0x5d')](function(_0x154c1e){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x154c1e);throw _0x154c1e;});}return _0x317783;})[_0xf8b6('0x38')](respondWithResult(_0x379754,0xc9))['catch'](handleError(_0x379754,null));};exports['getImap']=function(_0x498a3f,_0xf8e70e,_0xafd895){return db[_0xf8b6('0x5a')][_0xf8b6('0x69')]({'where':{'id':_0x498a3f[_0xf8b6('0x5f')]['id']}})['then'](handleEntityNotFound(_0xf8e70e,null))[_0xf8b6('0x38')](function(_0x54524c){if(_0x54524c){return _0x54524c[_0xf8b6('0x84')]();}return null;})['then'](respondWithResult(_0xf8e70e,null))['catch'](handleError(_0xf8e70e,null));};exports[_0xf8b6('0x85')]=function(_0xb9165d,_0x210cde,_0x3b917e){if(_0xb9165d['body']['id']){delete _0xb9165d['body']['id'];}return db['MailAccount'][_0xf8b6('0x64')]({'where':{'id':_0xb9165d[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x210cde,null))['then'](function(_0x1375a7){if(_0x1375a7){_0xb9165d[_0xf8b6('0x65')][_0xf8b6('0x6b')]=_0x1375a7['id'];return db[_0xf8b6('0x60')][_0xf8b6('0x68')](_0xb9165d[_0xf8b6('0x65')]);}})[_0xf8b6('0x38')](respondWithResult(_0x210cde,null))[_0xf8b6('0x5d')](handleError(_0x210cde,null));};exports['removeImap']=function(_0x28176f,_0x5c97d0,_0x19648b){return db[_0xf8b6('0x5a')][_0xf8b6('0x69')]({'where':{'id':_0x28176f['params']['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x5c97d0,null))[_0xf8b6('0x38')](function(_0x32b156){if(_0x32b156){return _0x32b156['setImap'](null);}return null;})[_0xf8b6('0x38')](respondWithStatusCode(_0x5c97d0,null))[_0xf8b6('0x5d')](handleError(_0x5c97d0,null));};exports[_0xf8b6('0x86')]=function(_0x224458,_0x338bf2,_0x3de31e){return db[_0xf8b6('0x5a')][_0xf8b6('0x69')]({'where':{'id':_0x224458['params']['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x338bf2,null))[_0xf8b6('0x38')](function(_0x2a4ecd){if(_0x2a4ecd){return _0x2a4ecd[_0xf8b6('0x86')]();}return null;})[_0xf8b6('0x38')](respondWithResult(_0x338bf2,null))[_0xf8b6('0x5d')](handleError(_0x338bf2,null));};exports['addSmtp']=function(_0x56387c,_0x55393a,_0x4b3ecb){if(_0x56387c[_0xf8b6('0x65')]['id']){delete _0x56387c[_0xf8b6('0x65')]['id'];}return db[_0xf8b6('0x5a')][_0xf8b6('0x64')]({'where':{'id':_0x56387c[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x55393a,null))[_0xf8b6('0x38')](function(_0x3b2143){if(_0x3b2143){_0x56387c['body'][_0xf8b6('0x6b')]=_0x3b2143['id'];return db[_0xf8b6('0x41')][_0xf8b6('0x68')](_0x56387c['body']);}})[_0xf8b6('0x38')](respondWithResult(_0x55393a,null))[_0xf8b6('0x5d')](handleError(_0x55393a,null));};exports[_0xf8b6('0x87')]=function(_0x4ec189,_0x594044,_0x3ba507){return db[_0xf8b6('0x5a')]['findOne']({'where':{'id':_0x4ec189[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x594044,null))[_0xf8b6('0x38')](function(_0x18a3c3){if(_0x18a3c3){return _0x18a3c3[_0xf8b6('0x88')](null);}return null;})[_0xf8b6('0x38')](respondWithStatusCode(_0x594044,null))['catch'](handleError(_0x594044,null));};exports['addInteraction']=function(_0x215df0,_0x4629fd,_0x2c0ca9){return db[_0xf8b6('0x89')]['find']({'where':{'id':_0x215df0['params']['id']}})['then'](handleEntityNotFound(_0x4629fd,null))['then'](function(_0x54f939){if(_0x54f939){return _0x54f939[_0xf8b6('0x8a')](_0x215df0[_0xf8b6('0x65')][_0xf8b6('0x6d')],_[_0xf8b6('0x8b')](_0x215df0['body'],[_0xf8b6('0x6d'),'id'])||{});}})['then'](respondWithResult(_0x4629fd,null))[_0xf8b6('0x5d')](handleError(_0x4629fd,null));};exports['getInteractions']=function(_0x45c107,_0x33f5a8,_0x1679e9){var _0x5a016a={'raw':![],'where':{}};var _0x4e609e={};var _0x4bc98f={'count':0x0,'rows':[]};return db[_0xf8b6('0x5a')]['findOne']({'where':{'id':_0x45c107[_0xf8b6('0x5f')]['id']}})['then'](handleEntityNotFound(_0x33f5a8,null))['then'](function(_0x5d2fd3){if(_0x5d2fd3){_0x4e609e['model']=_[_0xf8b6('0x44')](db[_0xf8b6('0x89')][_0xf8b6('0x42')]);_0x4e609e[_0xf8b6('0x45')]=_[_0xf8b6('0x44')](_0x45c107[_0xf8b6('0x45')]);_0x4e609e['filters']=_[_0xf8b6('0x6a')](_0x4e609e[_0xf8b6('0x43')],_0x4e609e[_0xf8b6('0x45')]);_0x5a016a[_0xf8b6('0x47')]=_[_0xf8b6('0x6a')](_0x4e609e[_0xf8b6('0x43')],qs['fields'](_0x45c107[_0xf8b6('0x45')]['fields']));_0x5a016a[_0xf8b6('0x47')]=_0x5a016a['attributes']['length']?_0x5a016a[_0xf8b6('0x47')]:_0x4e609e[_0xf8b6('0x43')];if(!_0x45c107['query']['hasOwnProperty']('nolimit')){_0x5a016a[_0xf8b6('0x31')]=qs['limit'](_0x45c107[_0xf8b6('0x45')][_0xf8b6('0x31')]);_0x5a016a[_0xf8b6('0x30')]=qs['offset'](_0x45c107[_0xf8b6('0x45')][_0xf8b6('0x30')]);}_0x5a016a[_0xf8b6('0x4c')]=qs[_0xf8b6('0x4d')](_0x45c107[_0xf8b6('0x45')][_0xf8b6('0x4d')]);_0x5a016a[_0xf8b6('0x50')]=qs[_0xf8b6('0x46')](_[_0xf8b6('0x4e')](_0x45c107['query'],_0x4e609e[_0xf8b6('0x46')]));_0x5a016a[_0xf8b6('0x50')][_0xf8b6('0x6b')]=_0x5d2fd3['id'];if(_0x45c107[_0xf8b6('0x45')][_0xf8b6('0x4f')]){_0x5a016a[_0xf8b6('0x50')]=_[_0xf8b6('0x51')](_0x5a016a['where'],{'$or':_[_0xf8b6('0x52')](_0x5a016a['attributes'],function(_0x5d8d22){var _0x11d3b8={};_0x11d3b8[_0x5d8d22]={'$like':'%'+_0x45c107[_0xf8b6('0x45')][_0xf8b6('0x4f')]+'%'};return _0x11d3b8;})});}_0x5a016a=_[_0xf8b6('0x51')]({},_0x5a016a,_0x45c107[_0xf8b6('0x56')]);return db[_0xf8b6('0x89')]['count']({'where':_0x5a016a[_0xf8b6('0x50')]})['then'](function(_0x2472c7){_0x4bc98f[_0xf8b6('0x57')]=_0x2472c7;if(_0x45c107[_0xf8b6('0x45')]['includeAll']){_0x5a016a[_0xf8b6('0x59')]=[{'model':db['CmContact'],'as':_0xf8b6('0x8c'),'required':![]},{'model':db[_0xf8b6('0x8d')],'as':_0xf8b6('0x8e'),'attributes':[_0xf8b6('0x3e'),_0xf8b6('0x8f'),_0xf8b6('0x90')],'required':![]},{'model':db[_0xf8b6('0x91')],'as':'Tags','attributes':['id',_0xf8b6('0x3e'),'color'],'where':_0x45c107[_0xf8b6('0x45')][_0xf8b6('0x92')]?{'id':_0x45c107[_0xf8b6('0x45')][_0xf8b6('0x92')]}:undefined,'required':_0x45c107[_0xf8b6('0x45')][_0xf8b6('0x92')]?!![]:![]}];}return db[_0xf8b6('0x89')][_0xf8b6('0x5b')](_0x5a016a);})[_0xf8b6('0x38')](function(_0x3e8036){_0x4bc98f[_0xf8b6('0x5c')]=_0x3e8036;return _0x4bc98f;});}})[_0xf8b6('0x38')](respondWithFilteredResult(_0x33f5a8,_0x5a016a))[_0xf8b6('0x5d')](handleError(_0x33f5a8,null));};exports[_0xf8b6('0x93')]=function(_0x43ca4e,_0x239694,_0xea1921){return db[_0xf8b6('0x5a')][_0xf8b6('0x69')]({'where':{'id':_0x43ca4e[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x239694,null))[_0xf8b6('0x38')](function(_0xbf3d20){if(_0xbf3d20){return db[_0xf8b6('0x94')][_0xf8b6('0x95')](function(_0x34efe5){return db[_0xf8b6('0x96')]['destroy']({'where':{'MailAccountId':_0x43ca4e[_0xf8b6('0x5f')]['id']},'transaction':_0x34efe5})[_0xf8b6('0x38')](function(_0x2c41ee){var _0x32480b=_['map'](_0x43ca4e[_0xf8b6('0x65')],function(_0x38817b){_0x38817b['MailAccountId']=_0x43ca4e[_0xf8b6('0x5f')]['id'];return _0x38817b;});return db[_0xf8b6('0x96')][_0xf8b6('0x97')](_0x32480b,{'transaction':_0x34efe5});});})[_0xf8b6('0x38')](function(){return db[_0xf8b6('0x96')][_0xf8b6('0x98')]({'where':{'MailAccountId':_0x43ca4e[_0xf8b6('0x5f')]['id']},'order':_0xf8b6('0x99')});});}})[_0xf8b6('0x38')](respondWithResult(_0x239694,null))['catch'](handleError(_0x239694,null));};exports[_0xf8b6('0x9a')]=function(_0x1db335,_0x1e5fec,_0x3d5020){var _0x41d760={};var _0x2bd3a6={};var _0x3738b6;var _0x274e7e;return db[_0xf8b6('0x5a')]['findOne']({'where':{'id':_0x1db335[_0xf8b6('0x5f')]['id']}})['then'](handleEntityNotFound(_0x1e5fec,null))[_0xf8b6('0x38')](function(_0xe450e8){if(_0xe450e8){_0x3738b6=_0xe450e8;_0x2bd3a6[_0xf8b6('0x43')]=_['keys'](db[_0xf8b6('0x96')]['rawAttributes']);_0x2bd3a6[_0xf8b6('0x45')]=_['keys'](_0x1db335[_0xf8b6('0x45')]);_0x2bd3a6[_0xf8b6('0x46')]=_['intersection'](_0x2bd3a6['model'],_0x2bd3a6['query']);_0x41d760[_0xf8b6('0x47')]=_[_0xf8b6('0x6a')](_0x2bd3a6[_0xf8b6('0x43')],qs[_0xf8b6('0x48')](_0x1db335[_0xf8b6('0x45')]['fields']));_0x41d760['attributes']=_0x41d760['attributes'][_0xf8b6('0x49')]?_0x41d760['attributes']:_0x2bd3a6[_0xf8b6('0x43')];_0x41d760['order']=qs[_0xf8b6('0x4d')](_0x1db335['query'][_0xf8b6('0x4d')]);_0x41d760[_0xf8b6('0x50')]=qs[_0xf8b6('0x46')](_['pick'](_0x1db335[_0xf8b6('0x45')],_0x2bd3a6['filters']));if(_0x1db335['query'][_0xf8b6('0x4f')]){_0x41d760[_0xf8b6('0x50')]=_[_0xf8b6('0x51')](_0x41d760[_0xf8b6('0x50')],{'$or':_[_0xf8b6('0x52')](_0x41d760['attributes'],function(_0xb0d4d1){var _0x3bf6fb={};_0x3bf6fb[_0xb0d4d1]={'$like':'%'+_0x1db335[_0xf8b6('0x45')][_0xf8b6('0x4f')]+'%'};return _0x3bf6fb;})});}_0x41d760=_[_0xf8b6('0x51')]({},_0x41d760,_0x1db335['options']);return _0x3738b6[_0xf8b6('0x9a')](_0x41d760);}})[_0xf8b6('0x38')](function(_0x44d76f){if(_0x44d76f){_0x274e7e=_0x44d76f[_0xf8b6('0x49')];if(!_0x1db335[_0xf8b6('0x45')][_0xf8b6('0x4a')]('nolimit')){_0x41d760[_0xf8b6('0x31')]=qs[_0xf8b6('0x31')](_0x1db335[_0xf8b6('0x45')]['limit']);_0x41d760[_0xf8b6('0x30')]=qs[_0xf8b6('0x30')](_0x1db335[_0xf8b6('0x45')][_0xf8b6('0x30')]);}return _0x3738b6[_0xf8b6('0x9a')](_0x41d760);}})[_0xf8b6('0x38')](function(_0x4417dd){if(_0x4417dd){return _0x4417dd?{'count':_0x274e7e,'rows':_0x4417dd}:null;}})['then'](respondWithResult(_0x1e5fec,null))[_0xf8b6('0x5d')](handleError(_0x1e5fec,null));};exports[_0xf8b6('0x9b')]=function(_0x34d76c,_0x479fa6,_0x36523b){var _0x323bda={'raw':!![],'where':{}};var _0x51dd81={};var _0x41cb1f={'count':0x0,'rows':[]};return db[_0xf8b6('0x5a')][_0xf8b6('0x69')]({'where':{'id':_0x34d76c[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x479fa6,null))[_0xf8b6('0x38')](function(_0x4be5ed){if(_0x4be5ed){_0x51dd81[_0xf8b6('0x43')]=_['keys'](db[_0xf8b6('0x9c')][_0xf8b6('0x42')]);_0x51dd81[_0xf8b6('0x45')]=_[_0xf8b6('0x44')](_0x34d76c[_0xf8b6('0x45')]);_0x51dd81[_0xf8b6('0x46')]=_[_0xf8b6('0x6a')](_0x51dd81[_0xf8b6('0x43')],_0x51dd81[_0xf8b6('0x45')]);_0x323bda['attributes']=_['intersection'](_0x51dd81[_0xf8b6('0x43')],qs[_0xf8b6('0x48')](_0x34d76c[_0xf8b6('0x45')][_0xf8b6('0x48')]));_0x323bda[_0xf8b6('0x47')]=_0x323bda[_0xf8b6('0x47')][_0xf8b6('0x49')]?_0x323bda['attributes']:_0x51dd81[_0xf8b6('0x43')];if(!_0x34d76c[_0xf8b6('0x45')]['hasOwnProperty'](_0xf8b6('0x4b'))){_0x323bda[_0xf8b6('0x31')]=qs['limit'](_0x34d76c[_0xf8b6('0x45')][_0xf8b6('0x31')]);_0x323bda['offset']=qs['offset'](_0x34d76c['query'][_0xf8b6('0x30')]);}_0x323bda[_0xf8b6('0x4c')]=qs[_0xf8b6('0x4d')](_0x34d76c['query'][_0xf8b6('0x4d')]);_0x323bda[_0xf8b6('0x50')]=qs[_0xf8b6('0x46')](_[_0xf8b6('0x4e')](_0x34d76c[_0xf8b6('0x45')],_0x51dd81[_0xf8b6('0x46')]));_0x323bda['where'][_0xf8b6('0x6b')]=_0x4be5ed['id'];if(_0x34d76c['query'][_0xf8b6('0x4f')]){_0x323bda['where']=_[_0xf8b6('0x51')](_0x323bda[_0xf8b6('0x50')],{'$or':_[_0xf8b6('0x52')](_0x323bda[_0xf8b6('0x47')],function(_0x2be641){var _0x93b2ef={};_0x93b2ef[_0x2be641]={'$like':'%'+_0x34d76c[_0xf8b6('0x45')]['filter']+'%'};return _0x93b2ef;})});}if(_0x34d76c[_0xf8b6('0x45')][_0xf8b6('0x9d')]){var _0xa0497a=_0x34d76c[_0xf8b6('0x45')][_0xf8b6('0x9d')][_0xf8b6('0x9e')](',');var _0xb48d8d={};_0xb48d8d[_0xa0497a[0x0]]={'$gte':moment(_0xa0497a[0x1])[_0xf8b6('0x9f')](_0xf8b6('0xa0'))};_0x323bda[_0xf8b6('0x50')]=_['merge'](_0x323bda[_0xf8b6('0x50')],_0xb48d8d);}_0x323bda=_[_0xf8b6('0x51')]({},_0x323bda,_0x34d76c[_0xf8b6('0x56')]);return db[_0xf8b6('0x9c')][_0xf8b6('0x57')]({'where':_0x323bda[_0xf8b6('0x50')]})[_0xf8b6('0x38')](function(_0x19e57f){_0x41cb1f[_0xf8b6('0x57')]=_0x19e57f;if(_0x34d76c[_0xf8b6('0x45')][_0xf8b6('0x58')]){_0x323bda[_0xf8b6('0x59')]=[{'all':!![]}];}return db[_0xf8b6('0x9c')]['findAll'](_0x323bda);})[_0xf8b6('0x38')](function(_0x1dc279){_0x41cb1f['rows']=_0x1dc279;return _0x41cb1f;});}})[_0xf8b6('0x38')](respondWithFilteredResult(_0x479fa6,_0x323bda))[_0xf8b6('0x5d')](handleError(_0x479fa6,null));};exports[_0xf8b6('0x3f')]=function(_0x27e2ae,_0x5824a5,_0x52037c){var _0x198300,_0x22f093={},_0x14c79b;if(_0x27e2ae[_0xf8b6('0x65')]['to']){_0x14c79b=_0x27e2ae['body']['to']['split'](',')[0x0];}return db[_0xf8b6('0x5a')][_0xf8b6('0x64')]({'where':{'id':_0x27e2ae['params']['id']},'include':[{'model':db[_0xf8b6('0xa1')],'as':_0xf8b6('0xa2'),'include':[{'model':db[_0xf8b6('0xa3')],'as':_0xf8b6('0xa4'),'where':{'email':_0x14c79b},'limit':0x1,'order':[[_0xf8b6('0xa5'),'DESC']]}]},{'model':db[_0xf8b6('0x41')],'as':_0xf8b6('0x61'),'raw':!![]}]})[_0xf8b6('0x38')](handleEntityNotFound(_0x5824a5,null))['then'](function(_0x1e355f){if(_0x1e355f){_0x198300=_0x1e355f;if(_0x1e355f[_0xf8b6('0x61')]){if(_[_0xf8b6('0x72')](_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xa6')])){_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xa6')]=util[_0xf8b6('0x9f')](_0xf8b6('0xa7'),_0x1e355f[_0xf8b6('0x3e')],_0x1e355f[_0xf8b6('0x71')]||_0x1e355f[_0xf8b6('0x61')][_0xf8b6('0x77')]);}if(_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xa8')]&&_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xa8')]['length']){for(var _0x2f8bc7=0x0;_0x2f8bc7<_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xa8')][_0xf8b6('0x49')];_0x2f8bc7+=0x1){_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xa8')][_0x2f8bc7]={'filename':_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xa8')][_0x2f8bc7][_0xf8b6('0x3e')],'path':path[_0xf8b6('0xa9')](config[_0xf8b6('0xaa')],'server/files/attachments',_0x27e2ae['body'][_0xf8b6('0xa8')][_0x2f8bc7][_0xf8b6('0xab')])};}}var _0x5dbf28={'tls':{'rejectUnauthorized':![]}};if(_[_0xf8b6('0x72')](_0x1e355f[_0xf8b6('0x61')][_0xf8b6('0x7f')])){if(_0x1e355f[_0xf8b6('0x61')]['authentication']){_0x5dbf28[_0xf8b6('0xac')]={'user':_0x1e355f[_0xf8b6('0x61')][_0xf8b6('0x77')],'pass':_0x1e355f[_0xf8b6('0x61')][_0xf8b6('0x7a')]};}_0x5dbf28['host']=_0x1e355f[_0xf8b6('0x61')][_0xf8b6('0x7d')];_0x5dbf28[_0xf8b6('0x7e')]=_0x1e355f[_0xf8b6('0x61')][_0xf8b6('0x7e')];_0x5dbf28[_0xf8b6('0xad')]=_0x1e355f['Smtp'][_0xf8b6('0xad')];}else{_0x5dbf28[_0xf8b6('0x7f')]=_0x1e355f[_0xf8b6('0x61')][_0xf8b6('0x7f')];_0x5dbf28[_0xf8b6('0xac')]={'user':_0x1e355f[_0xf8b6('0x61')]['user'],'pass':_0x1e355f['Smtp']['pass']};}return respondWithRpcPromise(_0xf8b6('0xae'),_0xf8b6('0xaf'),{'account':_0x5dbf28,'message':_0x27e2ae[_0xf8b6('0x65')]});}else{throw new Error(_0xf8b6('0xb0'));}}})[_0xf8b6('0x38')](function(_0x39a8b6){if(_0x39a8b6){_0x22f093=_0x39a8b6;if(_0x198300[_0xf8b6('0xa2')]){if(_0x198300['List']['Contacts'][_0xf8b6('0x49')]){return _0x198300['List'][_0xf8b6('0xa4')][0x0];}else{return db[_0xf8b6('0xa3')][_0xf8b6('0x68')](_[_0xf8b6('0x1b')](_0x27e2ae[_0xf8b6('0x65')],{'firstName':_0x27e2ae['body']['to'],'email':_0x27e2ae[_0xf8b6('0x65')]['to'],'phone':_0x27e2ae[_0xf8b6('0x65')]['to'],'ListId':_0x198300[_0xf8b6('0xb1')]}));}}else{throw new Error('List\x20not\x20found');}}})[_0xf8b6('0x38')](function(_0xa52ead){if(_0xa52ead){var _0x4c99fa={'UserId':_0x27e2ae[_0xf8b6('0x77')]['id'],'ContactId':_0xa52ead['id'],'MailAccountId':_0x198300['id'],'inReplyTo':_0x22f093[_0xf8b6('0xb2')],'to':_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xa6')],'cc':_0x27e2ae[_0xf8b6('0x65')]['cc'],'subject':_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xb3')],'attach':_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xb4')],'firstMsgDirection':_0xf8b6('0xb5'),'lastMsgAt':moment()[_0xf8b6('0x9f')](_0xf8b6('0xa0')),'lastMsgDirection':'out','lastMsgBody':_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0x65')],'Messages':[_[_0xf8b6('0x51')](_0x27e2ae[_0xf8b6('0x65')],{'messageId':_0x22f093['messageId'],'sentAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'read':!![],'MailAccountId':_0x198300['id'],'UserId':_0x27e2ae[_0xf8b6('0x77')]['id'],'ContactId':_0xa52ead['id']})]};if(_0x27e2ae[_0xf8b6('0x65')][_0xf8b6('0xb6')]){_0x4c99fa=_[_0xf8b6('0x51')](_0x4c99fa,_0x27e2ae['body'][_0xf8b6('0xb6')]);}return db[_0xf8b6('0x89')][_0xf8b6('0x68')](_0x4c99fa,{'include':[{'model':db['MailMessage'],'as':'Messages'}]});}})[_0xf8b6('0x38')](respondWithResult(_0x5824a5,null))[_0xf8b6('0x5d')](handleError(_0x5824a5,null));};exports[_0xf8b6('0xb7')]=function(_0x286eea,_0x4fc681,_0x32e412){return db[_0xf8b6('0x5a')]['find']({'where':{'id':_0x286eea[_0xf8b6('0x5f')]['id']},'include':[{'model':db['MailServerOut'],'as':_0xf8b6('0x61'),'raw':!![]}]})['then'](handleEntityNotFound(_0x4fc681,null))[_0xf8b6('0x38')](function(_0x560e05){if(_0x560e05&&_0x560e05['Smtp']){var _0x7b7db0={'id':_0x560e05['id'],'tls':{'rejectUnauthorized':![]}};if(_0x560e05[_0xf8b6('0x61')][_0xf8b6('0x7f')]){_0x7b7db0[_0xf8b6('0x7f')]=_0x560e05[_0xf8b6('0x61')]['service'];}else{_0x7b7db0[_0xf8b6('0x7d')]=_0x560e05[_0xf8b6('0x61')][_0xf8b6('0x7d')];_0x7b7db0[_0xf8b6('0x7e')]=_0x560e05[_0xf8b6('0x61')]['port'];_0x7b7db0[_0xf8b6('0xad')]=_0x560e05[_0xf8b6('0x61')][_0xf8b6('0xad')];}if(_0x560e05['Smtp'][_0xf8b6('0x7c')]){_0x7b7db0['auth']={'user':_0x560e05[_0xf8b6('0x61')]['user'],'pass':_0x560e05[_0xf8b6('0x61')]['pass']};}return respondWithRpcPromise(_0xf8b6('0xb8'),_0xf8b6('0xb7'),{'account':_0x7b7db0});}})['then'](respondWithResult(_0x4fc681,null))[_0xf8b6('0x5d')](handleError(_0x4fc681,null));};exports['destroy']=function(_0x476911,_0x54829c){return db[_0xf8b6('0x5a')][_0xf8b6('0x64')]({'where':{'id':_0x476911[_0xf8b6('0x5f')]['id']}})['then'](handleEntityNotFound(_0x54829c,null))[_0xf8b6('0x38')](function(_0x517487){if(_0x517487&&_0x517487['service']){throw new db[(_0xf8b6('0xb9'))]['ValidationError'](_0xf8b6('0xba'));}return _0x517487;})[_0xf8b6('0x38')](removeEntity(_0x54829c,null))[_0xf8b6('0x5d')](handleError(_0x54829c,null));};exports[_0xf8b6('0xbb')]=function(_0x2936e2,_0x26bd66,_0x3d6c1d){return db['MailAccount'][_0xf8b6('0x64')]({'where':{'id':_0x2936e2[_0xf8b6('0x5f')]['id']}})[_0xf8b6('0x38')](handleEntityNotFound(_0x26bd66,null))[_0xf8b6('0x38')](function(_0x306510){if(_0x306510){return _0x306510[_0xf8b6('0xbb')](_0x2936e2[_0xf8b6('0x65')][_0xf8b6('0x6d')],_[_0xf8b6('0x8b')](_0x2936e2[_0xf8b6('0x65')],[_0xf8b6('0x6d'),'id'])||{})[_0xf8b6('0xbc')](function(_0x3d5e6a){for(var _0xe81940=0x0;_0xe81940<_0x2936e2[_0xf8b6('0x65')][_0xf8b6('0x6d')][_0xf8b6('0x49')];_0xe81940+=0x1){socket[_0xf8b6('0xbd')](_0xf8b6('0xbe'),{'UserId':_0x2936e2[_0xf8b6('0x65')][_0xf8b6('0x6d')][_0xe81940],'MailAccountId':_0x2936e2['params']['id']});}return _0x3d5e6a;});}})[_0xf8b6('0x38')](respondWithResult(_0x26bd66,null))[_0xf8b6('0x5d')](handleError(_0x26bd66,null));};exports[_0xf8b6('0xbf')]=function(_0x209cd2,_0x5dbf8d,_0x1f3da7){return db[_0xf8b6('0x5a')][_0xf8b6('0x64')]({'where':{'id':_0x209cd2[_0xf8b6('0x5f')]['id']}})['then'](handleEntityNotFound(_0x5dbf8d,null))['then'](function(_0x125853){if(_0x125853){return _0x125853['removeAgents'](_0x209cd2[_0xf8b6('0x45')][_0xf8b6('0x6d')])['then'](function(){if(_[_0xf8b6('0xc0')](_0x209cd2[_0xf8b6('0x45')][_0xf8b6('0x6d')])){for(var _0x38d206=0x0;_0x38d206<_0x209cd2[_0xf8b6('0x45')][_0xf8b6('0x6d')][_0xf8b6('0x49')];_0x38d206+=0x1){socket[_0xf8b6('0xbd')]('userMailAccount:remove',{'UserId':Number(_0x209cd2[_0xf8b6('0x45')][_0xf8b6('0x6d')][_0x38d206]),'MailAccountId':Number(_0x209cd2[_0xf8b6('0x5f')]['id'])});}}else{socket[_0xf8b6('0xbd')](_0xf8b6('0xc1'),{'UserId':Number(_0x209cd2[_0xf8b6('0x45')][_0xf8b6('0x6d')]),'MailAccountId':Number(_0x209cd2['params']['id'])});}});}})[_0xf8b6('0x38')](respondWithStatusCode(_0x5dbf8d,null))['catch'](handleError(_0x5dbf8d,null));};exports[_0xf8b6('0xc2')]=function(_0x649cea,_0x373586,_0x74f14a){var _0x2f9018={};var _0x57d2df={};var _0x5495d6;var _0x4413e8;return db[_0xf8b6('0x5a')][_0xf8b6('0x69')]({'where':{'id':_0x649cea[_0xf8b6('0x5f')]['id']}})['then'](handleEntityNotFound(_0x373586,null))[_0xf8b6('0x38')](function(_0x419a72){if(_0x419a72){_0x5495d6=_0x419a72;_0x57d2df[_0xf8b6('0x43')]=_[_0xf8b6('0x44')](db['User']['rawAttributes']);_0x57d2df[_0xf8b6('0x45')]=_[_0xf8b6('0x44')](_0x649cea[_0xf8b6('0x45')]);_0x57d2df[_0xf8b6('0x46')]=_[_0xf8b6('0x6a')](_0x57d2df[_0xf8b6('0x43')],_0x57d2df[_0xf8b6('0x45')]);_0x2f9018[_0xf8b6('0x47')]=_['intersection'](_0x57d2df[_0xf8b6('0x43')],qs[_0xf8b6('0x48')](_0x649cea['query']['fields']));_0x2f9018[_0xf8b6('0x47')]=_0x2f9018[_0xf8b6('0x47')][_0xf8b6('0x49')]?_0x2f9018[_0xf8b6('0x47')]:_0x57d2df[_0xf8b6('0x43')];_0x2f9018[_0xf8b6('0x4c')]=qs[_0xf8b6('0x4d')](_0x649cea[_0xf8b6('0x45')][_0xf8b6('0x4d')]);_0x2f9018['where']=qs[_0xf8b6('0x46')](_['pick'](_0x649cea[_0xf8b6('0x45')],_0x57d2df[_0xf8b6('0x46')]));if(_0x649cea[_0xf8b6('0x45')][_0xf8b6('0x4f')]){_0x2f9018[_0xf8b6('0x50')]=_['merge'](_0x2f9018[_0xf8b6('0x50')],{'$or':_[_0xf8b6('0x52')](_0x2f9018[_0xf8b6('0x47')],function(_0x4a1168){var _0xe228df={};_0xe228df[_0x4a1168]={'$like':'%'+_0x649cea['query'][_0xf8b6('0x4f')]+'%'};return _0xe228df;})});}_0x2f9018=_['merge']({},_0x2f9018,_0x649cea[_0xf8b6('0x56')]);return _0x5495d6[_0xf8b6('0xc2')](_0x2f9018);}})[_0xf8b6('0x38')](function(_0x55f12f){if(_0x55f12f){_0x4413e8=_0x55f12f[_0xf8b6('0x49')];if(!_0x649cea[_0xf8b6('0x45')][_0xf8b6('0x4a')](_0xf8b6('0x4b'))){_0x2f9018['limit']=qs[_0xf8b6('0x31')](_0x649cea[_0xf8b6('0x45')][_0xf8b6('0x31')]);_0x2f9018[_0xf8b6('0x30')]=qs[_0xf8b6('0x30')](_0x649cea[_0xf8b6('0x45')][_0xf8b6('0x30')]);}return _0x5495d6[_0xf8b6('0xc2')](_0x2f9018);}})['then'](function(_0x662944){if(_0x662944){return _0x662944?{'count':_0x4413e8,'rows':_0x662944}:null;}})[_0xf8b6('0x38')](respondWithResult(_0x373586,null))[_0xf8b6('0x5d')](handleError(_0x373586,null));};
\ No newline at end of file
+var _0xb9a0=['userMailAccount:remove','getAgents','html-pdf','eml-format','rimraf','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/logger','../../config/utils','../../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~!@#$%^&-_=+[{]}.','info','MailAccount,\x20%s,\x20%s','request\x20sent','debug','MailAccount,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','sendStatus','end','status','json','offset','limit','Content-Range','apply','reject','update','then','destroy','get','MailAccounts','UserProfileResource','stack','name','send','index','MailServerIn','MailServerOut','Pause','MailAccount','rawAttributes','keys','query','model','attributes','fields','length','hasOwnProperty','sort','filters','pick','filter','where','merge','map','key','VIRTUAL','options','count','includeAll','include','findAll','rows','show','params','Imap','Smtp','mandatoryDispositionPause','intersection','find','body','describe','MailAccountId','Disposition','create','nolimit','order','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','removeAnswers','ListId','isNil','active','description','cservice','cauthentication','user','cuser','password','pass','cpassword','authentication','host','port','service','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','findOne','getImap','addImap','removeImap','setImap','getSmtp','removeSmtp','setSmtp','addInteraction','omit','MailInteraction','Contact','User','Owner','internal','Tag','Tags','color','tag','addApplications','sequelize','MailApplication','bulkCreate','findAndCountAll','priority','getApplications','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','MailMessage','CmList','CmContact','DESC','from','attachments','join','server/files/attachments','auth','secure','sendMail','List\x20not\x20found','List','Contacts','defaults','messageId','subject','attach','out','Interaction','VerifySmtp','verifySmtp','Sequelize','ValidationError','You\x20can\x27t\x20remove\x20the\x20mail\x20service\x20account','addAgents','spread','emit','userMailAccount:save','removeAgents','isArray'];(function(_0x178a99,_0x125901){var _0x8b63ed=function(_0x2ba591){while(--_0x2ba591){_0x178a99['push'](_0x178a99['shift']());}};_0x8b63ed(++_0x125901);}(_0xb9a0,0x186));var _0x0b9a=function(_0x238c67,_0x4c409e){_0x238c67=_0x238c67-0x0;var _0x51d179=_0xb9a0[_0x238c67];return _0x51d179;};'use strict';var pdf=require(_0x0b9a('0x0'));var emlformat=require(_0x0b9a('0x1'));var rimraf=require(_0x0b9a('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x0b9a('0x3'));var rp=require(_0x0b9a('0x4'));var moment=require(_0x0b9a('0x5'));var BPromise=require(_0x0b9a('0x6'));var Mustache=require(_0x0b9a('0x7'));var util=require(_0x0b9a('0x8'));var path=require(_0x0b9a('0x9'));var sox=require('sox');var csv=require(_0x0b9a('0xa'));var ejs=require(_0x0b9a('0xb'));var fs=require('fs');var _=require(_0x0b9a('0xc'));var squel=require(_0x0b9a('0xd'));var crypto=require(_0x0b9a('0xe'));var jsforce=require(_0x0b9a('0xf'));var deskjs=require(_0x0b9a('0x10'));var toCsv=require(_0x0b9a('0xa'));var querystring=require(_0x0b9a('0x11'));var Papa=require(_0x0b9a('0x12'));var Redis=require(_0x0b9a('0x13'));var authService=require(_0x0b9a('0x14'));var qs=require(_0x0b9a('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x0b9a('0x16'))('api');var utils=require(_0x0b9a('0x17'));var config=require('../../config/environment');var db=require(_0x0b9a('0x18'))['db'];config['redis']=_['defaults'](config[_0x0b9a('0x19')],{'host':_0x0b9a('0x1a'),'port':0x18eb});var socket=require(_0x0b9a('0x1b'))(new Redis(config[_0x0b9a('0x19')]));require('./mailAccount.socket')[_0x0b9a('0x1c')](socket);var jayson=require(_0x0b9a('0x1d'));var client=jayson[_0x0b9a('0x1e')][_0x0b9a('0x1f')]({'port':0x232b});function checkPasswordPattern(_0x1de36d,_0xcdef1c,_0x55801e){if(_0x55801e){var _0x2e3fc0=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2e3fc0[_0x0b9a('0x20')](_0xcdef1c)){return _0x1de36d;}else{throw new Error(_0x0b9a('0x21'));}}else{return _0x1de36d;}}function respondWithRpcPromise(_0x1b8380,_0x4fef3f,_0x102d2e,_0x2c94fe){return new BPromise(function(_0xcaa5d0,_0x5f102b){var _0x3fb823=_0x2c94fe||client;return _0x3fb823['request'](_0x1b8380,_0x102d2e)['then'](function(_0x1df5d9){logger[_0x0b9a('0x22')](_0x0b9a('0x23'),_0x4fef3f,_0x0b9a('0x24'));logger[_0x0b9a('0x25')](_0x0b9a('0x26'),_0x4fef3f,_0x0b9a('0x24'),JSON[_0x0b9a('0x27')](_0x1df5d9));if(_0x1df5d9['error']){if(_0x1df5d9['error'][_0x0b9a('0x28')]===0x1f4){logger['error'](_0x0b9a('0x23'),_0x4fef3f,_0x1df5d9[_0x0b9a('0x29')][_0x0b9a('0x2a')]);return _0x5f102b(_0x1df5d9[_0x0b9a('0x29')][_0x0b9a('0x2a')]);}logger[_0x0b9a('0x29')](_0x0b9a('0x23'),_0x4fef3f,_0x1df5d9[_0x0b9a('0x29')]['message']);return _0xcaa5d0(_0x1df5d9[_0x0b9a('0x29')][_0x0b9a('0x2a')]);}else{logger[_0x0b9a('0x22')](_0x0b9a('0x23'),_0x4fef3f,_0x0b9a('0x24'));_0xcaa5d0(_0x1df5d9[_0x0b9a('0x2b')][_0x0b9a('0x2a')]);}})[_0x0b9a('0x2c')](function(_0x538287){logger['error'](_0x0b9a('0x23'),_0x4fef3f,_0x538287);_0x5f102b(_0x538287);});});}function respondWithStatusCode(_0x52e059,_0x2cca68){_0x2cca68=_0x2cca68||0xcc;return function(_0xcb4d6a){if(_0xcb4d6a){return _0x52e059[_0x0b9a('0x2d')](_0x2cca68);}return _0x52e059['status'](_0x2cca68)[_0x0b9a('0x2e')]();};}function respondWithResult(_0x44cd0d,_0x191cd9){_0x191cd9=_0x191cd9||0xc8;return function(_0x1b8f85){if(_0x1b8f85){return _0x44cd0d[_0x0b9a('0x2f')](_0x191cd9)[_0x0b9a('0x30')](_0x1b8f85);}};}function respondWithFilteredResult(_0x4bd629,_0x3bfe08){return function(_0x21ebae){if(_0x21ebae){var _0x3a260e=_0x21ebae['count'],_0x3eaa74=_0x3bfe08[_0x0b9a('0x31')],_0x2effcf=_0x3bfe08[_0x0b9a('0x31')]+_0x3bfe08[_0x0b9a('0x32')],_0x890d1d;if(_0x2effcf>=_0x3a260e){_0x2effcf=_0x3a260e;_0x890d1d=0xc8;}else{_0x890d1d=0xce;}_0x4bd629['status'](_0x890d1d);return _0x4bd629['set'](_0x0b9a('0x33'),_0x3eaa74+'-'+_0x2effcf+'/'+_0x3a260e)['json'](_0x21ebae);}return null;};}function patchUpdates(_0x316f96){return function(_0x4ca09c){try{jsonpatch[_0x0b9a('0x34')](_0x4ca09c,_0x316f96,!![]);}catch(_0x5cf4e3){return BPromise[_0x0b9a('0x35')](_0x5cf4e3);}return _0x4ca09c['save']();};}function saveUpdates(_0x55dda0,_0x1be1e5){return function(_0x330fd6){if(_0x330fd6){return _0x330fd6[_0x0b9a('0x36')](_0x55dda0)[_0x0b9a('0x37')](function(_0x3c6c83){return _0x3c6c83;});}return null;};}function removeEntity(_0x12174d,_0x475871){return function(_0x504fe6){if(_0x504fe6){return _0x504fe6[_0x0b9a('0x38')]()['then'](function(){var _0x51530c=_0x504fe6[_0x0b9a('0x39')]({'plain':!![]});var _0x48b996=_0x0b9a('0x3a');return db[_0x0b9a('0x3b')][_0x0b9a('0x38')]({'where':{'type':_0x48b996,'resourceId':_0x51530c['id']}})['then'](function(){return _0x504fe6;});})[_0x0b9a('0x37')](function(){_0x12174d['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x4ea248,_0x104f8c){return function(_0x1e8f4f){if(!_0x1e8f4f){_0x4ea248['sendStatus'](0x194);}return _0x1e8f4f;};}function handleError(_0x373da7,_0x22ed80){_0x22ed80=_0x22ed80||0x1f4;return function(_0x58c746){logger['error'](_0x58c746[_0x0b9a('0x3c')]);if(_0x58c746[_0x0b9a('0x3d')]){delete _0x58c746[_0x0b9a('0x3d')];}_0x373da7['status'](_0x22ed80)[_0x0b9a('0x3e')](_0x58c746);};}exports[_0x0b9a('0x3f')]=function(_0x2de66d,_0x219eaa){var _0x3c47a4={'include':[{'model':db[_0x0b9a('0x40')],'as':'Imap'},{'model':db[_0x0b9a('0x41')],'as':'Smtp'},{'model':db[_0x0b9a('0x42')],'as':'mandatoryDispositionPause'}]},_0x3b6538={},_0x5c1b55={'count':0x0,'rows':[]};var _0x25042f=db[_0x0b9a('0x43')][_0x0b9a('0x44')];_0x3b6538['model']=_[_0x0b9a('0x45')](_0x25042f);_0x3b6538[_0x0b9a('0x46')]=_[_0x0b9a('0x45')](_0x2de66d[_0x0b9a('0x46')]);_0x3b6538['filters']=_['intersection'](_0x3b6538[_0x0b9a('0x47')],_0x3b6538['query']);_0x3c47a4[_0x0b9a('0x48')]=_['intersection'](_0x3b6538[_0x0b9a('0x47')],qs[_0x0b9a('0x49')](_0x2de66d[_0x0b9a('0x46')][_0x0b9a('0x49')]));_0x3c47a4[_0x0b9a('0x48')]=_0x3c47a4[_0x0b9a('0x48')][_0x0b9a('0x4a')]?_0x3c47a4[_0x0b9a('0x48')]:_0x3b6538['model'];if(!_0x2de66d['query'][_0x0b9a('0x4b')]('nolimit')){_0x3c47a4[_0x0b9a('0x32')]=qs['limit'](_0x2de66d[_0x0b9a('0x46')]['limit']);_0x3c47a4[_0x0b9a('0x31')]=qs['offset'](_0x2de66d[_0x0b9a('0x46')][_0x0b9a('0x31')]);}_0x3c47a4['order']=qs[_0x0b9a('0x4c')](_0x2de66d[_0x0b9a('0x46')][_0x0b9a('0x4c')]);_0x3c47a4['where']=qs[_0x0b9a('0x4d')](_[_0x0b9a('0x4e')](_0x2de66d[_0x0b9a('0x46')],_0x3b6538[_0x0b9a('0x4d')]));if(_0x2de66d[_0x0b9a('0x46')][_0x0b9a('0x4f')]){_0x3c47a4[_0x0b9a('0x50')]=_[_0x0b9a('0x51')](_0x3c47a4[_0x0b9a('0x50')],{'$or':_[_0x0b9a('0x52')](_0x25042f,function(_0x5ab99a){if(_0x5ab99a['type'][_0x0b9a('0x53')]!==_0x0b9a('0x54')){var _0x52db74={};_0x52db74[_0x5ab99a['field']]={'$like':'%'+_0x2de66d[_0x0b9a('0x46')][_0x0b9a('0x4f')]+'%'};return _0x52db74;}})});}_0x3c47a4=_[_0x0b9a('0x51')]({},_0x3c47a4,_0x2de66d[_0x0b9a('0x55')]);var _0x595f45={'where':_0x3c47a4[_0x0b9a('0x50')]};return db[_0x0b9a('0x43')][_0x0b9a('0x56')](_0x595f45)['then'](function(_0x3cf4f1){_0x5c1b55[_0x0b9a('0x56')]=_0x3cf4f1;if(_0x2de66d['query'][_0x0b9a('0x57')]){_0x3c47a4[_0x0b9a('0x58')]=[{'all':!![]}];}return db[_0x0b9a('0x43')][_0x0b9a('0x59')](_0x3c47a4);})[_0x0b9a('0x37')](function(_0x2cc5cf){_0x5c1b55[_0x0b9a('0x5a')]=_0x2cc5cf;return _0x5c1b55;})['then'](respondWithFilteredResult(_0x219eaa,_0x3c47a4))[_0x0b9a('0x2c')](handleError(_0x219eaa,null));};exports[_0x0b9a('0x5b')]=function(_0x3bc449,_0x2e5760){var _0xa6ecf2={'raw':![],'where':{'id':_0x3bc449[_0x0b9a('0x5c')]['id']},'include':[{'model':db[_0x0b9a('0x40')],'as':_0x0b9a('0x5d')},{'model':db[_0x0b9a('0x41')],'as':_0x0b9a('0x5e')},{'model':db[_0x0b9a('0x42')],'as':_0x0b9a('0x5f')}]},_0xb16260={};_0xb16260['model']=_['keys'](db['MailAccount'][_0x0b9a('0x44')]);_0xb16260[_0x0b9a('0x46')]=_['keys'](_0x3bc449[_0x0b9a('0x46')]);_0xb16260[_0x0b9a('0x4d')]=_['intersection'](_0xb16260['model'],_0xb16260[_0x0b9a('0x46')]);_0xa6ecf2[_0x0b9a('0x48')]=_[_0x0b9a('0x60')](_0xb16260[_0x0b9a('0x47')],qs[_0x0b9a('0x49')](_0x3bc449['query'][_0x0b9a('0x49')]));_0xa6ecf2[_0x0b9a('0x48')]=_0xa6ecf2['attributes'][_0x0b9a('0x4a')]?_0xa6ecf2['attributes']:_0xb16260[_0x0b9a('0x47')];if(_0x3bc449['query'][_0x0b9a('0x57')]){_0xa6ecf2['include']=[{'all':!![]}];}_0xa6ecf2=_[_0x0b9a('0x51')]({},_0xa6ecf2,_0x3bc449[_0x0b9a('0x55')]);return db[_0x0b9a('0x43')][_0x0b9a('0x61')](_0xa6ecf2)[_0x0b9a('0x37')](handleEntityNotFound(_0x2e5760,null))[_0x0b9a('0x37')](respondWithResult(_0x2e5760,null))[_0x0b9a('0x2c')](handleError(_0x2e5760,null));};exports[_0x0b9a('0x36')]=function(_0x1640a4,_0x23efce){if(_0x1640a4[_0x0b9a('0x62')]['id']){delete _0x1640a4[_0x0b9a('0x62')]['id'];}return db[_0x0b9a('0x43')]['find']({'where':{'id':_0x1640a4['params']['id']},'include':[{'model':db[_0x0b9a('0x40')],'as':_0x0b9a('0x5d')},{'model':db[_0x0b9a('0x41')],'as':_0x0b9a('0x5e')},{'model':db[_0x0b9a('0x42')],'as':_0x0b9a('0x5f')}]})[_0x0b9a('0x37')](handleEntityNotFound(_0x23efce,null))[_0x0b9a('0x37')](saveUpdates(_0x1640a4['body'],null))[_0x0b9a('0x37')](function(_0x4f0504){if(_0x4f0504&&_0x1640a4['body']['Imap']){return db['MailServerIn'][_0x0b9a('0x36')](_0x1640a4[_0x0b9a('0x62')]['Imap'],{'where':{'MailAccountId':_0x4f0504['id']}})[_0x0b9a('0x37')](function(){return _0x4f0504;});}return _0x4f0504;})[_0x0b9a('0x37')](function(_0x2d282c){if(_0x2d282c&&_0x1640a4[_0x0b9a('0x62')][_0x0b9a('0x5e')]){return db['MailServerOut'][_0x0b9a('0x36')](_0x1640a4[_0x0b9a('0x62')][_0x0b9a('0x5e')],{'where':{'MailAccountId':_0x2d282c['id']}})[_0x0b9a('0x37')](function(){return _0x2d282c;});}return _0x2d282c;})[_0x0b9a('0x37')](respondWithResult(_0x23efce,null))[_0x0b9a('0x2c')](handleError(_0x23efce,null));};exports[_0x0b9a('0x63')]=function(_0x17b0e5,_0x2dcefd){return db[_0x0b9a('0x43')][_0x0b9a('0x63')]()[_0x0b9a('0x37')](respondWithResult(_0x2dcefd,null))['catch'](handleError(_0x2dcefd,null));};exports['addDisposition']=function(_0x27d30b,_0x1e5dbb,_0x44497e){if(_0x27d30b[_0x0b9a('0x62')]['id']){delete _0x27d30b[_0x0b9a('0x62')]['id'];}return db[_0x0b9a('0x43')][_0x0b9a('0x61')]({'where':{'id':_0x27d30b[_0x0b9a('0x5c')]['id']}})['then'](handleEntityNotFound(_0x1e5dbb,null))[_0x0b9a('0x37')](function(_0x380220){if(_0x380220){_0x27d30b[_0x0b9a('0x62')][_0x0b9a('0x64')]=_0x380220['id'];return db[_0x0b9a('0x65')][_0x0b9a('0x66')](_0x27d30b['body']);}})[_0x0b9a('0x37')](respondWithResult(_0x1e5dbb,null))['catch'](handleError(_0x1e5dbb,null));};exports['getDispositions']=function(_0x4aca7b,_0x193922,_0x4c4baf){var _0x4ad8d3={'raw':![],'where':{}};var _0x3b5826={};var _0x120d96={'count':0x0,'rows':[]};return db[_0x0b9a('0x43')]['findOne']({'where':{'id':_0x4aca7b[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x193922,null))[_0x0b9a('0x37')](function(_0xde5e88){if(_0xde5e88){_0x3b5826[_0x0b9a('0x47')]=_[_0x0b9a('0x45')](db[_0x0b9a('0x65')][_0x0b9a('0x44')]);_0x3b5826['query']=_[_0x0b9a('0x45')](_0x4aca7b[_0x0b9a('0x46')]);_0x3b5826[_0x0b9a('0x4d')]=_[_0x0b9a('0x60')](_0x3b5826[_0x0b9a('0x47')],_0x3b5826[_0x0b9a('0x46')]);_0x4ad8d3[_0x0b9a('0x48')]=_[_0x0b9a('0x60')](_0x3b5826[_0x0b9a('0x47')],qs[_0x0b9a('0x49')](_0x4aca7b['query'][_0x0b9a('0x49')]));_0x4ad8d3[_0x0b9a('0x48')]=_0x4ad8d3[_0x0b9a('0x48')][_0x0b9a('0x4a')]?_0x4ad8d3[_0x0b9a('0x48')]:_0x3b5826['model'];if(!_0x4aca7b[_0x0b9a('0x46')]['hasOwnProperty'](_0x0b9a('0x67'))){_0x4ad8d3[_0x0b9a('0x32')]=qs[_0x0b9a('0x32')](_0x4aca7b['query'][_0x0b9a('0x32')]);_0x4ad8d3[_0x0b9a('0x31')]=qs[_0x0b9a('0x31')](_0x4aca7b[_0x0b9a('0x46')][_0x0b9a('0x31')]);}_0x4ad8d3[_0x0b9a('0x68')]=qs[_0x0b9a('0x4c')](_0x4aca7b[_0x0b9a('0x46')][_0x0b9a('0x4c')]);_0x4ad8d3[_0x0b9a('0x50')]=qs['filters'](_['pick'](_0x4aca7b[_0x0b9a('0x46')],_0x3b5826[_0x0b9a('0x4d')]));_0x4ad8d3[_0x0b9a('0x50')]['MailAccountId']=_0xde5e88['id'];if(_0x4aca7b[_0x0b9a('0x46')][_0x0b9a('0x4f')]){_0x4ad8d3[_0x0b9a('0x50')]=_['merge'](_0x4ad8d3['where'],{'$or':_[_0x0b9a('0x52')](_0x4ad8d3[_0x0b9a('0x48')],function(_0x573bac){var _0x9deb74={};_0x9deb74[_0x573bac]={'$like':'%'+_0x4aca7b[_0x0b9a('0x46')]['filter']+'%'};return _0x9deb74;})});}_0x4ad8d3=_[_0x0b9a('0x51')]({},_0x4ad8d3,_0x4aca7b['options']);return db[_0x0b9a('0x65')]['count']({'where':_0x4ad8d3[_0x0b9a('0x50')]})[_0x0b9a('0x37')](function(_0x3c066f){_0x120d96[_0x0b9a('0x56')]=_0x3c066f;if(_0x4aca7b[_0x0b9a('0x46')][_0x0b9a('0x57')]){_0x4ad8d3['include']=[{'all':!![]}];}return db[_0x0b9a('0x65')][_0x0b9a('0x59')](_0x4ad8d3);})[_0x0b9a('0x37')](function(_0x584cbd){_0x120d96['rows']=_0x584cbd;return _0x120d96;});}})[_0x0b9a('0x37')](respondWithFilteredResult(_0x193922,_0x4ad8d3))[_0x0b9a('0x2c')](handleError(_0x193922,null));};exports[_0x0b9a('0x69')]=function(_0x4dbeec,_0x27a9af,_0x11bcad){return db[_0x0b9a('0x43')][_0x0b9a('0x61')]({'where':{'id':_0x4dbeec[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x27a9af,null))[_0x0b9a('0x37')](function(_0x110f77){if(_0x110f77){return _0x110f77[_0x0b9a('0x69')](_0x4dbeec[_0x0b9a('0x46')][_0x0b9a('0x6a')]);}})[_0x0b9a('0x37')](respondWithStatusCode(_0x27a9af,null))[_0x0b9a('0x2c')](handleError(_0x27a9af,null));};exports[_0x0b9a('0x6b')]=function(_0x4599c9,_0x51cdb1,_0x105961){if(_0x4599c9[_0x0b9a('0x62')]['id']){delete _0x4599c9[_0x0b9a('0x62')]['id'];}return db[_0x0b9a('0x43')]['find']({'where':{'id':_0x4599c9[_0x0b9a('0x5c')]['id']}})['then'](handleEntityNotFound(_0x51cdb1,null))[_0x0b9a('0x37')](function(_0x1a3bcd){if(_0x1a3bcd){_0x4599c9[_0x0b9a('0x62')][_0x0b9a('0x64')]=_0x1a3bcd['id'];return db[_0x0b9a('0x6c')][_0x0b9a('0x66')](_0x4599c9['body']);}})[_0x0b9a('0x37')](respondWithResult(_0x51cdb1,null))['catch'](handleError(_0x51cdb1,null));};exports[_0x0b9a('0x6d')]=function(_0x4c304d,_0x2e15fb,_0x1fcbea){var _0x6a492c={'raw':![],'where':{}};var _0x151037={};var _0x1a5575={'count':0x0,'rows':[]};return db[_0x0b9a('0x43')]['findOne']({'where':{'id':_0x4c304d[_0x0b9a('0x5c')]['id']}})['then'](handleEntityNotFound(_0x2e15fb,null))['then'](function(_0x261b44){if(_0x261b44){_0x151037['model']=_[_0x0b9a('0x45')](db[_0x0b9a('0x6c')][_0x0b9a('0x44')]);_0x151037[_0x0b9a('0x46')]=_['keys'](_0x4c304d['query']);_0x151037[_0x0b9a('0x4d')]=_[_0x0b9a('0x60')](_0x151037[_0x0b9a('0x47')],_0x151037[_0x0b9a('0x46')]);_0x6a492c[_0x0b9a('0x48')]=_['intersection'](_0x151037[_0x0b9a('0x47')],qs[_0x0b9a('0x49')](_0x4c304d['query'][_0x0b9a('0x49')]));_0x6a492c['attributes']=_0x6a492c[_0x0b9a('0x48')][_0x0b9a('0x4a')]?_0x6a492c[_0x0b9a('0x48')]:_0x151037['model'];if(!_0x4c304d['query'][_0x0b9a('0x4b')]('nolimit')){_0x6a492c['limit']=qs[_0x0b9a('0x32')](_0x4c304d[_0x0b9a('0x46')][_0x0b9a('0x32')]);_0x6a492c[_0x0b9a('0x31')]=qs['offset'](_0x4c304d['query'][_0x0b9a('0x31')]);}_0x6a492c[_0x0b9a('0x68')]=qs['sort'](_0x4c304d[_0x0b9a('0x46')][_0x0b9a('0x4c')]);_0x6a492c[_0x0b9a('0x50')]=qs[_0x0b9a('0x4d')](_[_0x0b9a('0x4e')](_0x4c304d[_0x0b9a('0x46')],_0x151037['filters']));_0x6a492c[_0x0b9a('0x50')][_0x0b9a('0x64')]=_0x261b44['id'];if(_0x4c304d[_0x0b9a('0x46')]['filter']){_0x6a492c[_0x0b9a('0x50')]=_[_0x0b9a('0x51')](_0x6a492c[_0x0b9a('0x50')],{'$or':_[_0x0b9a('0x52')](_0x6a492c[_0x0b9a('0x48')],function(_0x3f2d88){var _0x54d53b={};_0x54d53b[_0x3f2d88]={'$like':'%'+_0x4c304d['query'][_0x0b9a('0x4f')]+'%'};return _0x54d53b;})});}_0x6a492c=_['merge']({},_0x6a492c,_0x4c304d[_0x0b9a('0x55')]);return db['CannedAnswer'][_0x0b9a('0x56')]({'where':_0x6a492c[_0x0b9a('0x50')]})[_0x0b9a('0x37')](function(_0x55f67e){_0x1a5575['count']=_0x55f67e;if(_0x4c304d[_0x0b9a('0x46')][_0x0b9a('0x57')]){_0x6a492c[_0x0b9a('0x58')]=[{'all':!![]}];}return db[_0x0b9a('0x6c')][_0x0b9a('0x59')](_0x6a492c);})[_0x0b9a('0x37')](function(_0x62dc78){_0x1a5575[_0x0b9a('0x5a')]=_0x62dc78;return _0x1a5575;});}})[_0x0b9a('0x37')](respondWithFilteredResult(_0x2e15fb,_0x6a492c))[_0x0b9a('0x2c')](handleError(_0x2e15fb,null));};exports[_0x0b9a('0x6e')]=function(_0x23b9d8,_0x1be50,_0xae9eab){return db[_0x0b9a('0x43')][_0x0b9a('0x61')]({'where':{'id':_0x23b9d8[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x1be50,null))['then'](function(_0xc19640){if(_0xc19640){return _0xc19640['removeAnswers'](_0x23b9d8['query'][_0x0b9a('0x6a')]);}})[_0x0b9a('0x37')](respondWithStatusCode(_0x1be50,null))[_0x0b9a('0x2c')](handleError(_0x1be50,null));};exports[_0x0b9a('0x66')]=function(_0x3f8c40,_0x16c524){var _0x27a2ef={'name':_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x3d')],'key':_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x53')],'email':_0x3f8c40[_0x0b9a('0x62')]['email'],'ListId':_0x3f8c40['body'][_0x0b9a('0x6f')],'active':!_[_0x0b9a('0x70')](_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x71')])?_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x71')]:!![],'description':_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x72')]||null,'Imap':{},'Smtp':{}};if(_[_0x0b9a('0x70')](_0x3f8c40['body'][_0x0b9a('0x73')])){if(_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x74')]){_0x27a2ef['Imap']['user']=_0x27a2ef[_0x0b9a('0x5e')][_0x0b9a('0x75')]=_0x3f8c40['body'][_0x0b9a('0x76')];_0x27a2ef[_0x0b9a('0x5d')][_0x0b9a('0x77')]=_0x27a2ef['Smtp'][_0x0b9a('0x78')]=_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x79')];}else{_0x27a2ef[_0x0b9a('0x5d')][_0x0b9a('0x7a')]=_0x27a2ef[_0x0b9a('0x5e')][_0x0b9a('0x7a')]=![];}_0x27a2ef['Imap']['host']=_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x5d')][_0x0b9a('0x7b')];_0x27a2ef['Imap'][_0x0b9a('0x7c')]=_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x5d')]['port'];_0x27a2ef[_0x0b9a('0x5e')]['host']=_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x5e')][_0x0b9a('0x7b')];_0x27a2ef[_0x0b9a('0x5e')]['port']=_0x3f8c40[_0x0b9a('0x62')]['Smtp'][_0x0b9a('0x7c')];}else{_0x27a2ef[_0x0b9a('0x5d')][_0x0b9a('0x7d')]=_0x27a2ef[_0x0b9a('0x5e')][_0x0b9a('0x7d')]=_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x73')];_0x27a2ef[_0x0b9a('0x5d')][_0x0b9a('0x75')]=_0x27a2ef[_0x0b9a('0x5e')][_0x0b9a('0x75')]=_0x3f8c40[_0x0b9a('0x62')][_0x0b9a('0x76')];_0x27a2ef[_0x0b9a('0x5d')]['password']=_0x27a2ef[_0x0b9a('0x5e')]['pass']=_0x3f8c40['body'][_0x0b9a('0x79')];}return db['MailAccount'][_0x0b9a('0x66')](_0x27a2ef,{'include':[{'model':db[_0x0b9a('0x41')],'as':_0x0b9a('0x5e')},{'model':db[_0x0b9a('0x40')],'as':'Imap'}]})[_0x0b9a('0x37')](function(_0x344755){var _0x6072af=_0x3f8c40[_0x0b9a('0x75')][_0x0b9a('0x39')]({'plain':!![]});if(!_0x6072af)throw new Error(_0x0b9a('0x7e'));if(_0x6072af[_0x0b9a('0x7f')]===_0x0b9a('0x75')){var _0x5adf0b=_0x344755[_0x0b9a('0x39')]({'plain':!![]});return db[_0x0b9a('0x80')][_0x0b9a('0x61')]({'where':{'name':'MailAccounts','userProfileId':_0x6072af['userProfileId']},'raw':!![]})[_0x0b9a('0x37')](function(_0x5c000b){if(_0x5c000b&&_0x5c000b[_0x0b9a('0x81')]===0x0){return db[_0x0b9a('0x3b')][_0x0b9a('0x66')]({'name':_0x5adf0b[_0x0b9a('0x3d')],'resourceId':_0x5adf0b['id'],'type':_0x5c000b[_0x0b9a('0x3d')],'sectionId':_0x5c000b['id']},{})[_0x0b9a('0x37')](function(){return _0x344755;});}else{return _0x344755;}})[_0x0b9a('0x2c')](function(_0x3540b0){logger[_0x0b9a('0x29')](_0x0b9a('0x82'),_0x3540b0);throw _0x3540b0;});}return _0x344755;})['then'](respondWithResult(_0x16c524,0xc9))[_0x0b9a('0x2c')](handleError(_0x16c524,null));};exports['getImap']=function(_0x534ca7,_0xf36bfa,_0x336b6c){return db[_0x0b9a('0x43')][_0x0b9a('0x83')]({'where':{'id':_0x534ca7[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0xf36bfa,null))[_0x0b9a('0x37')](function(_0x22b031){if(_0x22b031){return _0x22b031[_0x0b9a('0x84')]();}return null;})['then'](respondWithResult(_0xf36bfa,null))[_0x0b9a('0x2c')](handleError(_0xf36bfa,null));};exports[_0x0b9a('0x85')]=function(_0x33fe2f,_0x5b81bf,_0x2acee2){if(_0x33fe2f[_0x0b9a('0x62')]['id']){delete _0x33fe2f[_0x0b9a('0x62')]['id'];}return db[_0x0b9a('0x43')][_0x0b9a('0x61')]({'where':{'id':_0x33fe2f['params']['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x5b81bf,null))[_0x0b9a('0x37')](function(_0x31fa24){if(_0x31fa24){_0x33fe2f['body'][_0x0b9a('0x64')]=_0x31fa24['id'];return db[_0x0b9a('0x40')]['create'](_0x33fe2f[_0x0b9a('0x62')]);}})[_0x0b9a('0x37')](respondWithResult(_0x5b81bf,null))[_0x0b9a('0x2c')](handleError(_0x5b81bf,null));};exports[_0x0b9a('0x86')]=function(_0x16253c,_0x3acfe7,_0xd791c6){return db['MailAccount'][_0x0b9a('0x83')]({'where':{'id':_0x16253c[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x3acfe7,null))['then'](function(_0x272532){if(_0x272532){return _0x272532[_0x0b9a('0x87')](null);}return null;})[_0x0b9a('0x37')](respondWithStatusCode(_0x3acfe7,null))[_0x0b9a('0x2c')](handleError(_0x3acfe7,null));};exports[_0x0b9a('0x88')]=function(_0x1ef421,_0x7ecb4b,_0xc5b4da){return db[_0x0b9a('0x43')][_0x0b9a('0x83')]({'where':{'id':_0x1ef421[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x7ecb4b,null))[_0x0b9a('0x37')](function(_0x476f22){if(_0x476f22){return _0x476f22[_0x0b9a('0x88')]();}return null;})[_0x0b9a('0x37')](respondWithResult(_0x7ecb4b,null))[_0x0b9a('0x2c')](handleError(_0x7ecb4b,null));};exports['addSmtp']=function(_0x5eb26d,_0x5a4ebf,_0x3ca104){if(_0x5eb26d[_0x0b9a('0x62')]['id']){delete _0x5eb26d[_0x0b9a('0x62')]['id'];}return db[_0x0b9a('0x43')][_0x0b9a('0x61')]({'where':{'id':_0x5eb26d['params']['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x5a4ebf,null))['then'](function(_0x57bf76){if(_0x57bf76){_0x5eb26d[_0x0b9a('0x62')]['MailAccountId']=_0x57bf76['id'];return db['MailServerOut'][_0x0b9a('0x66')](_0x5eb26d[_0x0b9a('0x62')]);}})['then'](respondWithResult(_0x5a4ebf,null))['catch'](handleError(_0x5a4ebf,null));};exports[_0x0b9a('0x89')]=function(_0x245276,_0x3855b8,_0x3703b4){return db[_0x0b9a('0x43')][_0x0b9a('0x83')]({'where':{'id':_0x245276[_0x0b9a('0x5c')]['id']}})['then'](handleEntityNotFound(_0x3855b8,null))[_0x0b9a('0x37')](function(_0x1b8b1b){if(_0x1b8b1b){return _0x1b8b1b[_0x0b9a('0x8a')](null);}return null;})['then'](respondWithStatusCode(_0x3855b8,null))['catch'](handleError(_0x3855b8,null));};exports[_0x0b9a('0x8b')]=function(_0x581216,_0x410dd5,_0x55d3b5){return db['MailInteraction'][_0x0b9a('0x61')]({'where':{'id':_0x581216['params']['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x410dd5,null))[_0x0b9a('0x37')](function(_0x52e61a){if(_0x52e61a){return _0x52e61a[_0x0b9a('0x8b')](_0x581216[_0x0b9a('0x62')][_0x0b9a('0x6a')],_[_0x0b9a('0x8c')](_0x581216[_0x0b9a('0x62')],[_0x0b9a('0x6a'),'id'])||{});}})['then'](respondWithResult(_0x410dd5,null))[_0x0b9a('0x2c')](handleError(_0x410dd5,null));};exports['getInteractions']=function(_0x43e592,_0x173f81,_0x1519ec){var _0x27d64d={'raw':![],'where':{}};var _0x5f3e46={};var _0x4b2334={'count':0x0,'rows':[]};return db[_0x0b9a('0x43')][_0x0b9a('0x83')]({'where':{'id':_0x43e592['params']['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x173f81,null))['then'](function(_0x5588f6){if(_0x5588f6){_0x5f3e46[_0x0b9a('0x47')]=_[_0x0b9a('0x45')](db[_0x0b9a('0x8d')][_0x0b9a('0x44')]);_0x5f3e46[_0x0b9a('0x46')]=_['keys'](_0x43e592[_0x0b9a('0x46')]);_0x5f3e46[_0x0b9a('0x4d')]=_['intersection'](_0x5f3e46[_0x0b9a('0x47')],_0x5f3e46[_0x0b9a('0x46')]);_0x27d64d[_0x0b9a('0x48')]=_[_0x0b9a('0x60')](_0x5f3e46[_0x0b9a('0x47')],qs[_0x0b9a('0x49')](_0x43e592[_0x0b9a('0x46')][_0x0b9a('0x49')]));_0x27d64d[_0x0b9a('0x48')]=_0x27d64d[_0x0b9a('0x48')]['length']?_0x27d64d['attributes']:_0x5f3e46[_0x0b9a('0x47')];if(!_0x43e592['query'][_0x0b9a('0x4b')](_0x0b9a('0x67'))){_0x27d64d[_0x0b9a('0x32')]=qs[_0x0b9a('0x32')](_0x43e592['query']['limit']);_0x27d64d[_0x0b9a('0x31')]=qs['offset'](_0x43e592[_0x0b9a('0x46')][_0x0b9a('0x31')]);}_0x27d64d[_0x0b9a('0x68')]=qs[_0x0b9a('0x4c')](_0x43e592['query'][_0x0b9a('0x4c')]);_0x27d64d[_0x0b9a('0x50')]=qs[_0x0b9a('0x4d')](_[_0x0b9a('0x4e')](_0x43e592[_0x0b9a('0x46')],_0x5f3e46['filters']));_0x27d64d[_0x0b9a('0x50')]['MailAccountId']=_0x5588f6['id'];if(_0x43e592['query']['filter']){_0x27d64d[_0x0b9a('0x50')]=_[_0x0b9a('0x51')](_0x27d64d[_0x0b9a('0x50')],{'$or':_[_0x0b9a('0x52')](_0x27d64d['attributes'],function(_0x5691db){var _0x477106={};_0x477106[_0x5691db]={'$like':'%'+_0x43e592[_0x0b9a('0x46')][_0x0b9a('0x4f')]+'%'};return _0x477106;})});}_0x27d64d=_['merge']({},_0x27d64d,_0x43e592[_0x0b9a('0x55')]);return db[_0x0b9a('0x8d')][_0x0b9a('0x56')]({'where':_0x27d64d['where']})[_0x0b9a('0x37')](function(_0x5acc15){_0x4b2334[_0x0b9a('0x56')]=_0x5acc15;if(_0x43e592['query'][_0x0b9a('0x57')]){_0x27d64d['include']=[{'model':db['CmContact'],'as':_0x0b9a('0x8e'),'required':![]},{'model':db[_0x0b9a('0x8f')],'as':_0x0b9a('0x90'),'attributes':[_0x0b9a('0x3d'),'fullname',_0x0b9a('0x91')],'required':![]},{'model':db[_0x0b9a('0x92')],'as':_0x0b9a('0x93'),'attributes':['id',_0x0b9a('0x3d'),_0x0b9a('0x94')],'where':_0x43e592['query'][_0x0b9a('0x95')]?{'id':_0x43e592[_0x0b9a('0x46')][_0x0b9a('0x95')]}:undefined,'required':_0x43e592['query']['tag']?!![]:![]}];}return db[_0x0b9a('0x8d')]['findAll'](_0x27d64d);})[_0x0b9a('0x37')](function(_0x534b6f){_0x4b2334[_0x0b9a('0x5a')]=_0x534b6f;return _0x4b2334;});}})['then'](respondWithFilteredResult(_0x173f81,_0x27d64d))[_0x0b9a('0x2c')](handleError(_0x173f81,null));};exports[_0x0b9a('0x96')]=function(_0x59be2f,_0x1c03b9,_0x2f021f){return db[_0x0b9a('0x43')]['findOne']({'where':{'id':_0x59be2f[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x1c03b9,null))[_0x0b9a('0x37')](function(_0x290dfb){if(_0x290dfb){return db[_0x0b9a('0x97')]['transaction'](function(_0x58c36f){return db[_0x0b9a('0x98')][_0x0b9a('0x38')]({'where':{'MailAccountId':_0x59be2f[_0x0b9a('0x5c')]['id']},'transaction':_0x58c36f})['then'](function(_0x309cb6){var _0x19391f=_[_0x0b9a('0x52')](_0x59be2f[_0x0b9a('0x62')],function(_0x49558f){_0x49558f[_0x0b9a('0x64')]=_0x59be2f[_0x0b9a('0x5c')]['id'];return _0x49558f;});return db[_0x0b9a('0x98')][_0x0b9a('0x99')](_0x19391f,{'transaction':_0x58c36f});});})['then'](function(){return db[_0x0b9a('0x98')][_0x0b9a('0x9a')]({'where':{'MailAccountId':_0x59be2f[_0x0b9a('0x5c')]['id']},'order':_0x0b9a('0x9b')});});}})['then'](respondWithResult(_0x1c03b9,null))[_0x0b9a('0x2c')](handleError(_0x1c03b9,null));};exports['getApplications']=function(_0x439444,_0x2a020a,_0x30fe62){var _0x3ba3e2={};var _0x13af21={};var _0x1d0146;var _0x3f43b2;return db[_0x0b9a('0x43')][_0x0b9a('0x83')]({'where':{'id':_0x439444['params']['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x2a020a,null))[_0x0b9a('0x37')](function(_0x50e335){if(_0x50e335){_0x1d0146=_0x50e335;_0x13af21[_0x0b9a('0x47')]=_[_0x0b9a('0x45')](db[_0x0b9a('0x98')][_0x0b9a('0x44')]);_0x13af21[_0x0b9a('0x46')]=_[_0x0b9a('0x45')](_0x439444[_0x0b9a('0x46')]);_0x13af21[_0x0b9a('0x4d')]=_['intersection'](_0x13af21[_0x0b9a('0x47')],_0x13af21[_0x0b9a('0x46')]);_0x3ba3e2[_0x0b9a('0x48')]=_[_0x0b9a('0x60')](_0x13af21[_0x0b9a('0x47')],qs[_0x0b9a('0x49')](_0x439444[_0x0b9a('0x46')][_0x0b9a('0x49')]));_0x3ba3e2[_0x0b9a('0x48')]=_0x3ba3e2[_0x0b9a('0x48')][_0x0b9a('0x4a')]?_0x3ba3e2[_0x0b9a('0x48')]:_0x13af21[_0x0b9a('0x47')];_0x3ba3e2[_0x0b9a('0x68')]=qs[_0x0b9a('0x4c')](_0x439444['query'][_0x0b9a('0x4c')]);_0x3ba3e2[_0x0b9a('0x50')]=qs[_0x0b9a('0x4d')](_[_0x0b9a('0x4e')](_0x439444[_0x0b9a('0x46')],_0x13af21[_0x0b9a('0x4d')]));if(_0x439444[_0x0b9a('0x46')]['filter']){_0x3ba3e2[_0x0b9a('0x50')]=_['merge'](_0x3ba3e2[_0x0b9a('0x50')],{'$or':_[_0x0b9a('0x52')](_0x3ba3e2[_0x0b9a('0x48')],function(_0x4e1d29){var _0x20b1a4={};_0x20b1a4[_0x4e1d29]={'$like':'%'+_0x439444['query'][_0x0b9a('0x4f')]+'%'};return _0x20b1a4;})});}_0x3ba3e2=_[_0x0b9a('0x51')]({},_0x3ba3e2,_0x439444[_0x0b9a('0x55')]);return _0x1d0146['getApplications'](_0x3ba3e2);}})['then'](function(_0x3bb03b){if(_0x3bb03b){_0x3f43b2=_0x3bb03b[_0x0b9a('0x4a')];if(!_0x439444['query'][_0x0b9a('0x4b')](_0x0b9a('0x67'))){_0x3ba3e2[_0x0b9a('0x32')]=qs['limit'](_0x439444['query']['limit']);_0x3ba3e2[_0x0b9a('0x31')]=qs[_0x0b9a('0x31')](_0x439444[_0x0b9a('0x46')][_0x0b9a('0x31')]);}return _0x1d0146[_0x0b9a('0x9c')](_0x3ba3e2);}})[_0x0b9a('0x37')](function(_0x5b9763){if(_0x5b9763){return _0x5b9763?{'count':_0x3f43b2,'rows':_0x5b9763}:null;}})[_0x0b9a('0x37')](respondWithResult(_0x2a020a,null))[_0x0b9a('0x2c')](handleError(_0x2a020a,null));};exports['getMessages']=function(_0x1de5e2,_0x505696,_0x57d357){var _0x26ce84={'raw':!![],'where':{}};var _0x479b7a={};var _0x368212={'count':0x0,'rows':[]};return db['MailAccount'][_0x0b9a('0x83')]({'where':{'id':_0x1de5e2[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x505696,null))['then'](function(_0x47a4d4){if(_0x47a4d4){_0x479b7a[_0x0b9a('0x47')]=_[_0x0b9a('0x45')](db['MailMessage'][_0x0b9a('0x44')]);_0x479b7a[_0x0b9a('0x46')]=_[_0x0b9a('0x45')](_0x1de5e2[_0x0b9a('0x46')]);_0x479b7a[_0x0b9a('0x4d')]=_[_0x0b9a('0x60')](_0x479b7a[_0x0b9a('0x47')],_0x479b7a[_0x0b9a('0x46')]);_0x26ce84[_0x0b9a('0x48')]=_[_0x0b9a('0x60')](_0x479b7a[_0x0b9a('0x47')],qs['fields'](_0x1de5e2[_0x0b9a('0x46')][_0x0b9a('0x49')]));_0x26ce84[_0x0b9a('0x48')]=_0x26ce84['attributes'][_0x0b9a('0x4a')]?_0x26ce84[_0x0b9a('0x48')]:_0x479b7a['model'];if(!_0x1de5e2[_0x0b9a('0x46')][_0x0b9a('0x4b')]('nolimit')){_0x26ce84[_0x0b9a('0x32')]=qs[_0x0b9a('0x32')](_0x1de5e2['query'][_0x0b9a('0x32')]);_0x26ce84['offset']=qs[_0x0b9a('0x31')](_0x1de5e2[_0x0b9a('0x46')][_0x0b9a('0x31')]);}_0x26ce84[_0x0b9a('0x68')]=qs[_0x0b9a('0x4c')](_0x1de5e2[_0x0b9a('0x46')][_0x0b9a('0x4c')]);_0x26ce84[_0x0b9a('0x50')]=qs[_0x0b9a('0x4d')](_[_0x0b9a('0x4e')](_0x1de5e2['query'],_0x479b7a[_0x0b9a('0x4d')]));_0x26ce84[_0x0b9a('0x50')][_0x0b9a('0x64')]=_0x47a4d4['id'];if(_0x1de5e2[_0x0b9a('0x46')]['filter']){_0x26ce84['where']=_['merge'](_0x26ce84[_0x0b9a('0x50')],{'$or':_[_0x0b9a('0x52')](_0x26ce84[_0x0b9a('0x48')],function(_0x1316e5){var _0x534358={};_0x534358[_0x1316e5]={'$like':'%'+_0x1de5e2[_0x0b9a('0x46')][_0x0b9a('0x4f')]+'%'};return _0x534358;})});}if(_0x1de5e2[_0x0b9a('0x46')][_0x0b9a('0x9d')]){var _0x30eebd=_0x1de5e2['query']['$gte'][_0x0b9a('0x9e')](',');var _0x2be12c={};_0x2be12c[_0x30eebd[0x0]]={'$gte':moment(_0x30eebd[0x1])[_0x0b9a('0x9f')](_0x0b9a('0xa0'))};_0x26ce84[_0x0b9a('0x50')]=_[_0x0b9a('0x51')](_0x26ce84[_0x0b9a('0x50')],_0x2be12c);}_0x26ce84=_['merge']({},_0x26ce84,_0x1de5e2[_0x0b9a('0x55')]);return db[_0x0b9a('0xa1')][_0x0b9a('0x56')]({'where':_0x26ce84[_0x0b9a('0x50')]})['then'](function(_0x54bd1c){_0x368212[_0x0b9a('0x56')]=_0x54bd1c;if(_0x1de5e2[_0x0b9a('0x46')][_0x0b9a('0x57')]){_0x26ce84[_0x0b9a('0x58')]=[{'all':!![]}];}return db['MailMessage'][_0x0b9a('0x59')](_0x26ce84);})[_0x0b9a('0x37')](function(_0x19fa59){_0x368212[_0x0b9a('0x5a')]=_0x19fa59;return _0x368212;});}})[_0x0b9a('0x37')](respondWithFilteredResult(_0x505696,_0x26ce84))['catch'](handleError(_0x505696,null));};exports[_0x0b9a('0x3e')]=function(_0x2fca1e,_0x5df072,_0x153cc1){var _0x344006,_0x527286={},_0x39d1bc;if(_0x2fca1e[_0x0b9a('0x62')]['to']){_0x39d1bc=_0x2fca1e[_0x0b9a('0x62')]['to'][_0x0b9a('0x9e')](',')[0x0];}return db['MailAccount'][_0x0b9a('0x61')]({'where':{'id':_0x2fca1e[_0x0b9a('0x5c')]['id']},'include':[{'model':db[_0x0b9a('0xa2')],'as':'List','include':[{'model':db[_0x0b9a('0xa3')],'as':'Contacts','where':{'email':_0x39d1bc},'limit':0x1,'order':[['updatedAt',_0x0b9a('0xa4')]]}]},{'model':db['MailServerOut'],'as':'Smtp','raw':!![]}]})[_0x0b9a('0x37')](handleEntityNotFound(_0x5df072,null))[_0x0b9a('0x37')](function(_0x917268){if(_0x917268){_0x344006=_0x917268;if(_0x917268[_0x0b9a('0x5e')]){if(_[_0x0b9a('0x70')](_0x2fca1e[_0x0b9a('0x62')][_0x0b9a('0xa5')])){_0x2fca1e[_0x0b9a('0x62')][_0x0b9a('0xa5')]=util[_0x0b9a('0x9f')]('%s\x20<%s>',_0x917268[_0x0b9a('0x3d')],_0x917268['email']||_0x917268['Smtp'][_0x0b9a('0x75')]);}if(_0x2fca1e[_0x0b9a('0x62')]['attachments']&&_0x2fca1e['body'][_0x0b9a('0xa6')]['length']){for(var _0x53f117=0x0;_0x53f117<_0x2fca1e[_0x0b9a('0x62')][_0x0b9a('0xa6')][_0x0b9a('0x4a')];_0x53f117+=0x1){_0x2fca1e[_0x0b9a('0x62')][_0x0b9a('0xa6')][_0x53f117]={'filename':_0x2fca1e[_0x0b9a('0x62')][_0x0b9a('0xa6')][_0x53f117][_0x0b9a('0x3d')],'path':path[_0x0b9a('0xa7')](config['root'],_0x0b9a('0xa8'),_0x2fca1e[_0x0b9a('0x62')][_0x0b9a('0xa6')][_0x53f117]['basename'])};}}var _0x371ac1={'tls':{'rejectUnauthorized':![]}};if(_[_0x0b9a('0x70')](_0x917268['Smtp']['service'])){if(_0x917268[_0x0b9a('0x5e')][_0x0b9a('0x7a')]){_0x371ac1[_0x0b9a('0xa9')]={'user':_0x917268[_0x0b9a('0x5e')][_0x0b9a('0x75')],'pass':_0x917268[_0x0b9a('0x5e')][_0x0b9a('0x78')]};}_0x371ac1[_0x0b9a('0x7b')]=_0x917268[_0x0b9a('0x5e')][_0x0b9a('0x7b')];_0x371ac1[_0x0b9a('0x7c')]=_0x917268[_0x0b9a('0x5e')][_0x0b9a('0x7c')];_0x371ac1[_0x0b9a('0xaa')]=_0x917268[_0x0b9a('0x5e')]['secure'];}else{_0x371ac1[_0x0b9a('0x7d')]=_0x917268[_0x0b9a('0x5e')][_0x0b9a('0x7d')];_0x371ac1[_0x0b9a('0xa9')]={'user':_0x917268[_0x0b9a('0x5e')][_0x0b9a('0x75')],'pass':_0x917268[_0x0b9a('0x5e')][_0x0b9a('0x78')]};}return respondWithRpcPromise('SendMail',_0x0b9a('0xab'),{'account':_0x371ac1,'message':_0x2fca1e[_0x0b9a('0x62')]});}else{throw new Error(_0x0b9a('0xac'));}}})[_0x0b9a('0x37')](function(_0x20a413){if(_0x20a413){_0x527286=_0x20a413;if(_0x344006[_0x0b9a('0xad')]){if(_0x344006[_0x0b9a('0xad')][_0x0b9a('0xae')][_0x0b9a('0x4a')]){return _0x344006[_0x0b9a('0xad')][_0x0b9a('0xae')][0x0];}else{return db[_0x0b9a('0xa3')][_0x0b9a('0x66')](_[_0x0b9a('0xaf')](_0x2fca1e['body'],{'firstName':_0x2fca1e[_0x0b9a('0x62')]['to'],'email':_0x2fca1e['body']['to'],'phone':_0x2fca1e[_0x0b9a('0x62')]['to'],'ListId':_0x344006[_0x0b9a('0x6f')]}));}}else{throw new Error(_0x0b9a('0xac'));}}})[_0x0b9a('0x37')](function(_0x240ac0){if(_0x240ac0){var _0x178a24={'UserId':_0x2fca1e['user']['id'],'ContactId':_0x240ac0['id'],'MailAccountId':_0x344006['id'],'inReplyTo':_0x527286[_0x0b9a('0xb0')],'to':_0x2fca1e['body']['from'],'cc':_0x2fca1e['body']['cc'],'subject':_0x2fca1e[_0x0b9a('0x62')][_0x0b9a('0xb1')],'attach':_0x2fca1e[_0x0b9a('0x62')][_0x0b9a('0xb2')],'firstMsgDirection':_0x0b9a('0xb3'),'lastMsgAt':moment()[_0x0b9a('0x9f')](_0x0b9a('0xa0')),'lastMsgDirection':_0x0b9a('0xb3'),'lastMsgBody':_0x2fca1e['body']['body'],'Messages':[_[_0x0b9a('0x51')](_0x2fca1e['body'],{'messageId':_0x527286[_0x0b9a('0xb0')],'sentAt':moment()['format'](_0x0b9a('0xa0')),'read':!![],'MailAccountId':_0x344006['id'],'UserId':_0x2fca1e[_0x0b9a('0x75')]['id'],'ContactId':_0x240ac0['id']})]};if(_0x2fca1e['body'][_0x0b9a('0xb4')]){_0x178a24=_['merge'](_0x178a24,_0x2fca1e[_0x0b9a('0x62')][_0x0b9a('0xb4')]);}return db[_0x0b9a('0x8d')][_0x0b9a('0x66')](_0x178a24,{'include':[{'model':db[_0x0b9a('0xa1')],'as':'Messages'}]});}})[_0x0b9a('0x37')](respondWithResult(_0x5df072,null))[_0x0b9a('0x2c')](handleError(_0x5df072,null));};exports['verifySmtp']=function(_0x9145f2,_0x75a536,_0x1b0533){return db[_0x0b9a('0x43')][_0x0b9a('0x61')]({'where':{'id':_0x9145f2[_0x0b9a('0x5c')]['id']},'include':[{'model':db['MailServerOut'],'as':_0x0b9a('0x5e'),'raw':!![]}]})[_0x0b9a('0x37')](handleEntityNotFound(_0x75a536,null))[_0x0b9a('0x37')](function(_0x13204d){if(_0x13204d&&_0x13204d[_0x0b9a('0x5e')]){var _0x151ce2={'id':_0x13204d['id'],'tls':{'rejectUnauthorized':![]}};if(_0x13204d['Smtp']['service']){_0x151ce2[_0x0b9a('0x7d')]=_0x13204d[_0x0b9a('0x5e')][_0x0b9a('0x7d')];}else{_0x151ce2[_0x0b9a('0x7b')]=_0x13204d['Smtp'][_0x0b9a('0x7b')];_0x151ce2[_0x0b9a('0x7c')]=_0x13204d[_0x0b9a('0x5e')]['port'];_0x151ce2['secure']=_0x13204d[_0x0b9a('0x5e')][_0x0b9a('0xaa')];}if(_0x13204d['Smtp'][_0x0b9a('0x7a')]){_0x151ce2['auth']={'user':_0x13204d[_0x0b9a('0x5e')][_0x0b9a('0x75')],'pass':_0x13204d[_0x0b9a('0x5e')]['pass']};}return respondWithRpcPromise(_0x0b9a('0xb5'),_0x0b9a('0xb6'),{'account':_0x151ce2});}})[_0x0b9a('0x37')](respondWithResult(_0x75a536,null))[_0x0b9a('0x2c')](handleError(_0x75a536,null));};exports[_0x0b9a('0x38')]=function(_0x33cc77,_0x2c0026){return db[_0x0b9a('0x43')][_0x0b9a('0x61')]({'where':{'id':_0x33cc77[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x2c0026,null))[_0x0b9a('0x37')](function(_0x2f3086){if(_0x2f3086&&_0x2f3086['service']){throw new db[(_0x0b9a('0xb7'))][(_0x0b9a('0xb8'))](_0x0b9a('0xb9'));}return _0x2f3086;})[_0x0b9a('0x37')](removeEntity(_0x2c0026,null))[_0x0b9a('0x2c')](handleError(_0x2c0026,null));};exports[_0x0b9a('0xba')]=function(_0x1f4ca0,_0x598b3e,_0x9a0c3b){return db[_0x0b9a('0x43')][_0x0b9a('0x61')]({'where':{'id':_0x1f4ca0[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x598b3e,null))['then'](function(_0x5b83cb){if(_0x5b83cb){return _0x5b83cb['addAgents'](_0x1f4ca0[_0x0b9a('0x62')][_0x0b9a('0x6a')],_[_0x0b9a('0x8c')](_0x1f4ca0['body'],[_0x0b9a('0x6a'),'id'])||{})[_0x0b9a('0xbb')](function(_0x5e3840){for(var _0x2be2a1=0x0;_0x2be2a1<_0x1f4ca0['body']['ids'][_0x0b9a('0x4a')];_0x2be2a1+=0x1){socket[_0x0b9a('0xbc')](_0x0b9a('0xbd'),{'UserId':_0x1f4ca0['body']['ids'][_0x2be2a1],'MailAccountId':_0x1f4ca0['params']['id']});}return _0x5e3840;});}})[_0x0b9a('0x37')](respondWithResult(_0x598b3e,null))[_0x0b9a('0x2c')](handleError(_0x598b3e,null));};exports[_0x0b9a('0xbe')]=function(_0x322bbc,_0x212f5e,_0x3799af){return db[_0x0b9a('0x43')][_0x0b9a('0x61')]({'where':{'id':_0x322bbc[_0x0b9a('0x5c')]['id']}})[_0x0b9a('0x37')](handleEntityNotFound(_0x212f5e,null))[_0x0b9a('0x37')](function(_0x3e63a3){if(_0x3e63a3){return _0x3e63a3[_0x0b9a('0xbe')](_0x322bbc[_0x0b9a('0x46')][_0x0b9a('0x6a')])[_0x0b9a('0x37')](function(){if(_[_0x0b9a('0xbf')](_0x322bbc['query'][_0x0b9a('0x6a')])){for(var _0x3eacb0=0x0;_0x3eacb0<_0x322bbc[_0x0b9a('0x46')][_0x0b9a('0x6a')][_0x0b9a('0x4a')];_0x3eacb0+=0x1){socket[_0x0b9a('0xbc')]('userMailAccount:remove',{'UserId':Number(_0x322bbc[_0x0b9a('0x46')][_0x0b9a('0x6a')][_0x3eacb0]),'MailAccountId':Number(_0x322bbc[_0x0b9a('0x5c')]['id'])});}}else{socket[_0x0b9a('0xbc')](_0x0b9a('0xc0'),{'UserId':Number(_0x322bbc['query'][_0x0b9a('0x6a')]),'MailAccountId':Number(_0x322bbc[_0x0b9a('0x5c')]['id'])});}});}})[_0x0b9a('0x37')](respondWithStatusCode(_0x212f5e,null))[_0x0b9a('0x2c')](handleError(_0x212f5e,null));};exports[_0x0b9a('0xc1')]=function(_0x30d9b8,_0x190f1b,_0x140e43){var _0x4fcb48={};var _0x5e4f47={};var _0x2c4daf;var _0x25e813;return db['MailAccount'][_0x0b9a('0x83')]({'where':{'id':_0x30d9b8[_0x0b9a('0x5c')]['id']}})['then'](handleEntityNotFound(_0x190f1b,null))[_0x0b9a('0x37')](function(_0x14ce60){if(_0x14ce60){_0x2c4daf=_0x14ce60;_0x5e4f47['model']=_[_0x0b9a('0x45')](db['User'][_0x0b9a('0x44')]);_0x5e4f47[_0x0b9a('0x46')]=_[_0x0b9a('0x45')](_0x30d9b8[_0x0b9a('0x46')]);_0x5e4f47[_0x0b9a('0x4d')]=_[_0x0b9a('0x60')](_0x5e4f47[_0x0b9a('0x47')],_0x5e4f47['query']);_0x4fcb48[_0x0b9a('0x48')]=_[_0x0b9a('0x60')](_0x5e4f47[_0x0b9a('0x47')],qs[_0x0b9a('0x49')](_0x30d9b8['query'][_0x0b9a('0x49')]));_0x4fcb48[_0x0b9a('0x48')]=_0x4fcb48[_0x0b9a('0x48')][_0x0b9a('0x4a')]?_0x4fcb48[_0x0b9a('0x48')]:_0x5e4f47[_0x0b9a('0x47')];_0x4fcb48[_0x0b9a('0x68')]=qs[_0x0b9a('0x4c')](_0x30d9b8[_0x0b9a('0x46')]['sort']);_0x4fcb48['where']=qs[_0x0b9a('0x4d')](_['pick'](_0x30d9b8[_0x0b9a('0x46')],_0x5e4f47['filters']));if(_0x30d9b8[_0x0b9a('0x46')][_0x0b9a('0x4f')]){_0x4fcb48['where']=_[_0x0b9a('0x51')](_0x4fcb48[_0x0b9a('0x50')],{'$or':_[_0x0b9a('0x52')](_0x4fcb48[_0x0b9a('0x48')],function(_0x382320){var _0x5695e9={};_0x5695e9[_0x382320]={'$like':'%'+_0x30d9b8[_0x0b9a('0x46')]['filter']+'%'};return _0x5695e9;})});}_0x4fcb48=_[_0x0b9a('0x51')]({},_0x4fcb48,_0x30d9b8['options']);return _0x2c4daf[_0x0b9a('0xc1')](_0x4fcb48);}})['then'](function(_0x519854){if(_0x519854){_0x25e813=_0x519854[_0x0b9a('0x4a')];if(!_0x30d9b8[_0x0b9a('0x46')]['hasOwnProperty']('nolimit')){_0x4fcb48[_0x0b9a('0x32')]=qs['limit'](_0x30d9b8['query']['limit']);_0x4fcb48['offset']=qs[_0x0b9a('0x31')](_0x30d9b8[_0x0b9a('0x46')][_0x0b9a('0x31')]);}return _0x2c4daf[_0x0b9a('0xc1')](_0x4fcb48);}})[_0x0b9a('0x37')](function(_0x31787c){if(_0x31787c){return _0x31787c?{'count':_0x25e813,'rows':_0x31787c}:null;}})[_0x0b9a('0x37')](respondWithResult(_0x190f1b,null))[_0x0b9a('0x2c')](handleError(_0x190f1b,null));};
\ No newline at end of file
index e324c24..af0222e 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(_0x368bba,_0x1f625b){var _0x409f8f=function(_0x463373){while(--_0x463373){_0x368bba['push'](_0x368bba['shift']());}};_0x409f8f(++_0x1f625b);}(_0xa9e0,0x123));var _0x0a9e=function(_0x34bf97,_0xc60f9d){_0x34bf97=_0x34bf97-0x0;var _0x292719=_0xa9e0[_0x34bf97];return _0x292719;};'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(_0x1d9aa0,_0x272488){var _0x226868=function(_0x17127c){while(--_0x17127c){_0x1d9aa0['push'](_0x1d9aa0['shift']());}};_0x226868(++_0x272488);}(_0xa9e0,0x123));var _0x0a9e=function(_0x373dee,_0x1a8c45){_0x373dee=_0x373dee-0x0;var _0x46798f=_0xa9e0[_0x373dee];return _0x46798f;};'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 ca3cafe..530d97d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x288a=['define','MailAccount','util','../../config/logger','api','moment','path','../../config/environment','./mailAccount.attributes','exports'];(function(_0x27d958,_0x29ef87){var _0x53e63e=function(_0x4130ec){while(--_0x4130ec){_0x27d958['push'](_0x27d958['shift']());}};_0x53e63e(++_0x29ef87);}(_0x288a,0x188));var _0xa288=function(_0x356270,_0x588a4d){_0x356270=_0x356270-0x0;var _0x8360f4=_0x288a[_0x356270];return _0x8360f4;};'use strict';var _=require('lodash');var util=require(_0xa288('0x0'));var logger=require(_0xa288('0x1'))(_0xa288('0x2'));var moment=require(_0xa288('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0xa288('0x4'));var rimraf=require('rimraf');var config=require(_0xa288('0x5'));var attributes=require(_0xa288('0x6'));module[_0xa288('0x7')]=function(_0x4ad8fb,_0x1e2c4b){return _0x4ad8fb[_0xa288('0x8')](_0xa288('0x9'),attributes,{'tableName':'mail_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x781d=['rimraf','../../config/environment','./mailAccount.attributes','exports','MailAccount','mail_accounts','lodash','util','moment','bluebird','request-promise','path'];(function(_0x5dfe43,_0x295c51){var _0x5996c1=function(_0x255860){while(--_0x255860){_0x5dfe43['push'](_0x5dfe43['shift']());}};_0x5996c1(++_0x295c51);}(_0x781d,0x14a));var _0xd781=function(_0xbca1b1,_0x33f0ce){_0xbca1b1=_0xbca1b1-0x0;var _0x4e1686=_0x781d[_0xbca1b1];return _0x4e1686;};'use strict';var _=require(_0xd781('0x0'));var util=require(_0xd781('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xd781('0x2'));var BPromise=require(_0xd781('0x3'));var rp=require(_0xd781('0x4'));var fs=require('fs');var path=require(_0xd781('0x5'));var rimraf=require(_0xd781('0x6'));var config=require(_0xd781('0x7'));var attributes=require(_0xd781('0x8'));module[_0xd781('0x9')]=function(_0x830b,_0x2f98ee){return _0x830b['define'](_0xd781('0xa'),attributes,{'tableName':_0xd781('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 159191b..cd119be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7247=['message','request\x20sent','result','catch','GetMailAccount','findAll','options','raw','where','attributes','limit','model','include','map','ShowMailAccount','MailAccount','NotifyMailAccount','mail','rawAttributes','createdAt','updatedAt','CompanyId','ListId','body','isNil','from\x20is\x20mandatory','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','List','Contacts','DESC','MailApplication','Applications','MailServerOut','Smtp','get','account','omit','list','applications','priority','asc','push','close','autoclose','*,*,*,*','length','from','List\x20not\x20found','messageId','subject','attach','format','YYYY-MM-DD\x20HH:mm:ss','find','MailMessage','Messages','inReplyTo','MailInteraction','create','Contact\x20not\x20found','spread','update','interaction','contact','attachments','originTo','originCc','bcc','Attachments','UserId','User','name','unshift','agent','waitForTheAssignedAgent','Start','startRouting','lodash','moment','bluebird','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','redis','defaults','localhost','./mailAccount.socket','register','then','info','debug','MailAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','MailAccount,\x20%s,\x20%s'];(function(_0x2bc533,_0x39c67f){var _0x66c3b0=function(_0x32f366){while(--_0x32f366){_0x2bc533['push'](_0x2bc533['shift']());}};_0x66c3b0(++_0x39c67f);}(_0x7247,0x1ed));var _0x7724=function(_0x19d7bf,_0x265436){_0x19d7bf=_0x19d7bf-0x0;var _0x46494c=_0x7247[_0x19d7bf];return _0x46494c;};'use strict';var _=require(_0x7724('0x0'));var util=require('util');var moment=require(_0x7724('0x1'));var BPromise=require(_0x7724('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x7724('0x3'));var logger=require(_0x7724('0x4'))(_0x7724('0x5'));var config=require('../../config/environment');var jayson=require(_0x7724('0x6'));var client=jayson[_0x7724('0x7')][_0x7724('0x8')]({'port':0x232c});config[_0x7724('0x9')]=_[_0x7724('0xa')](config['redis'],{'host':_0x7724('0xb'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x7724('0x9')]));require(_0x7724('0xc'))[_0x7724('0xd')](socket);function respondWithRpcPromise(_0x20c3d2,_0x1a5e44,_0x387ef7){return new BPromise(function(_0xd3f374,_0x4faced){return client['request'](_0x20c3d2,_0x387ef7)[_0x7724('0xe')](function(_0xd4149e){logger[_0x7724('0xf')]('MailAccount,\x20%s,\x20%s',_0x1a5e44,'request\x20sent');logger[_0x7724('0x10')](_0x7724('0x11'),_0x1a5e44,'request\x20sent',JSON[_0x7724('0x12')](_0xd4149e));if(_0xd4149e[_0x7724('0x13')]){if(_0xd4149e[_0x7724('0x13')][_0x7724('0x14')]===0x1f4){logger[_0x7724('0x13')](_0x7724('0x15'),_0x1a5e44,_0xd4149e['error'][_0x7724('0x16')]);return _0x4faced(_0xd4149e[_0x7724('0x13')][_0x7724('0x16')]);}logger[_0x7724('0x13')](_0x7724('0x15'),_0x1a5e44,_0xd4149e[_0x7724('0x13')]['message']);return _0xd3f374(_0xd4149e[_0x7724('0x13')][_0x7724('0x16')]);}else{logger['info'](_0x7724('0x15'),_0x1a5e44,_0x7724('0x17'));_0xd3f374(_0xd4149e[_0x7724('0x18')][_0x7724('0x16')]);}})[_0x7724('0x19')](function(_0x13fe5e){logger[_0x7724('0x13')](_0x7724('0x15'),_0x1a5e44,_0x13fe5e);_0x4faced(_0x13fe5e);});});}exports[_0x7724('0x1a')]=function(_0x11bd8c){var _0x1e93ad=this;return new Promise(function(_0x4378ab,_0x3f6984){return db['MailAccount'][_0x7724('0x1b')]({'raw':_0x11bd8c[_0x7724('0x1c')]?_0x11bd8c[_0x7724('0x1c')][_0x7724('0x1d')]===undefined?!![]:![]:!![],'where':_0x11bd8c[_0x7724('0x1c')]?_0x11bd8c[_0x7724('0x1c')][_0x7724('0x1e')]||null:null,'attributes':_0x11bd8c['options']?_0x11bd8c[_0x7724('0x1c')][_0x7724('0x1f')]||null:null,'limit':_0x11bd8c[_0x7724('0x1c')]?_0x11bd8c[_0x7724('0x1c')][_0x7724('0x20')]||null:null,'include':_0x11bd8c[_0x7724('0x1c')]?_0x11bd8c[_0x7724('0x1c')]['include']?_['map'](_0x11bd8c[_0x7724('0x1c')]['include'],function(_0x56e4c6){return{'model':db[_0x56e4c6[_0x7724('0x21')]],'as':_0x56e4c6['as'],'attributes':_0x56e4c6[_0x7724('0x1f')],'include':_0x56e4c6[_0x7724('0x22')]?_[_0x7724('0x23')](_0x56e4c6[_0x7724('0x22')],function(_0xce990e){return{'model':db[_0xce990e['model']],'as':_0xce990e['as'],'attributes':_0xce990e[_0x7724('0x1f')],'include':_0xce990e[_0x7724('0x22')]?_[_0x7724('0x23')](_0xce990e[_0x7724('0x22')],function(_0x32eff9){return{'model':db[_0x32eff9[_0x7724('0x21')]],'as':_0x32eff9['as'],'attributes':_0x32eff9[_0x7724('0x1f')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x355c60){logger['info'](_0x7724('0x1a'),_0x11bd8c);logger['debug']('GetMailAccount',_0x11bd8c,JSON[_0x7724('0x12')](_0x355c60));_0x4378ab(_0x355c60);})[_0x7724('0x19')](function(_0x118105){logger[_0x7724('0x13')](_0x7724('0x1a'),_0x118105['message'],_0x11bd8c);_0x3f6984(_0x1e93ad[_0x7724('0x13')](0x1f4,_0x118105[_0x7724('0x16')]));});});};exports[_0x7724('0x24')]=function(_0x491ac5){var _0xffc5b=this;return new Promise(function(_0x4a2e2f,_0x41165e){return db[_0x7724('0x25')]['find']({'raw':_0x491ac5['options']?_0x491ac5[_0x7724('0x1c')][_0x7724('0x1d')]===undefined?!![]:![]:!![],'where':_0x491ac5[_0x7724('0x1c')]?_0x491ac5[_0x7724('0x1c')][_0x7724('0x1e')]||null:null,'attributes':_0x491ac5[_0x7724('0x1c')]?_0x491ac5[_0x7724('0x1c')][_0x7724('0x1f')]||null:null,'include':_0x491ac5[_0x7724('0x1c')]?_0x491ac5[_0x7724('0x1c')]['include']?_[_0x7724('0x23')](_0x491ac5[_0x7724('0x1c')][_0x7724('0x22')],function(_0x47be56){return{'model':db[_0x47be56['model']],'as':_0x47be56['as'],'attributes':_0x47be56[_0x7724('0x1f')],'include':_0x47be56[_0x7724('0x22')]?_[_0x7724('0x23')](_0x47be56[_0x7724('0x22')],function(_0x58b07d){return{'model':db[_0x58b07d[_0x7724('0x21')]],'as':_0x58b07d['as'],'attributes':_0x58b07d['attributes'],'include':_0x58b07d['include']?_[_0x7724('0x23')](_0x58b07d[_0x7724('0x22')],function(_0x5311f7){return{'model':db[_0x5311f7[_0x7724('0x21')]],'as':_0x5311f7['as'],'attributes':_0x5311f7[_0x7724('0x1f')]};}):[]};}):[]};}):[]:[]})[_0x7724('0xe')](function(_0x339ca9){logger[_0x7724('0xf')]('ShowMailAccount',_0x491ac5);logger[_0x7724('0x10')]('ShowMailAccount',_0x491ac5,JSON[_0x7724('0x12')](_0x339ca9));_0x4a2e2f(_0x339ca9);})[_0x7724('0x19')](function(_0x460bd3){logger[_0x7724('0x13')](_0x7724('0x24'),_0x460bd3[_0x7724('0x16')],_0x491ac5);_0x41165e(_0xffc5b['error'](0x1f4,_0x460bd3[_0x7724('0x16')]));});});};exports[_0x7724('0x26')]=function(_0x177cd4){var _0xeef653=this;return new Promise(function(_0x513d7f,_0x38be23){var _0x2cc690={'body':_0x177cd4['body'],'channel':_0x7724('0x27')};var _0x5f2bd3=_['difference'](_['keys'](db['CmContact'][_0x7724('0x28')]),[_0x7724('0x29'),_0x7724('0x2a'),_0x7724('0x2b'),_0x7724('0x2c')]);var _0x5ef8f6=![];if(_0x177cd4[_0x7724('0x2d')]['id']){delete _0x177cd4[_0x7724('0x2d')]['id'];}if(_[_0x7724('0x2e')](_0x177cd4[_0x7724('0x2d')]['from'])){return _0x38be23(_0xeef653['error'](0x1f4,_0x7724('0x2f')));}if(_[_0x7724('0x2e')](_0x177cd4['body']['body'])||_0x177cd4[_0x7724('0x2d')][_0x7724('0x2d')]===''){return _0x38be23(_0xeef653[_0x7724('0x13')](0x1f4,'body\x20is\x20mandatory\x20and\x20not\x20empty'));}if(_['isNil'](_0x177cd4['body'][_0x7724('0x30')])){return _0x38be23(_0xeef653[_0x7724('0x13')](0x1f4,_0x7724('0x31')+_0x5f2bd3));}if(!_[_0x7724('0x32')](_0x5f2bd3,_0x177cd4[_0x7724('0x2d')]['mapKey'])){return _0x38be23(_0xeef653[_0x7724('0x13')](0x1f4,_0x7724('0x33')+_0x5f2bd3));}var _0x3ffd62={};_0x3ffd62[_0x177cd4[_0x7724('0x2d')][_0x7724('0x30')]]=_0x177cd4[_0x7724('0x2d')]['from'];return db[_0x7724('0x25')]['find']({'where':{'id':_0x177cd4['account']['id']},'include':[{'model':db[_0x7724('0x34')],'as':_0x7724('0x35'),'include':[{'model':db['CmContact'],'as':_0x7724('0x36'),'where':_0x3ffd62,'limit':0x1,'order':[[_0x7724('0x2a'),_0x7724('0x37')]]}]},{'model':db[_0x7724('0x38')],'as':_0x7724('0x39')},{'model':db[_0x7724('0x3a')],'as':_0x7724('0x3b')}]})[_0x7724('0xe')](function(_0x1e88a6){if(_0x1e88a6&&_0x1e88a6[_0x7724('0x35')]){var _0x572617=_0x1e88a6[_0x7724('0x3c')]({'plain':!![]});_0x2cc690[_0x7724('0x3d')]=_[_0x7724('0x3e')](_0x572617,[_0x7724('0x39'),_0x7724('0x35')]);_0x2cc690['applications']=_0x572617[_0x7724('0x39')];_0x2cc690[_0x7724('0x3f')]=_0x572617[_0x7724('0x35')];_0x2cc690[_0x7724('0x40')]=_['orderBy'](_0x2cc690[_0x7724('0x40')],[_0x7724('0x41')],[_0x7724('0x42')]);if(_0x2cc690[_0x7724('0x3d')]&&_0x2cc690[_0x7724('0x3d')]['autoclose']){_0x2cc690[_0x7724('0x40')][_0x7724('0x43')]({'id':0x0,'priority':_0x2cc690[_0x7724('0x40')]['length']+0x1,'app':_0x7724('0x44'),'appdata':_0x7724('0x45'),'interval':_0x7724('0x46')});}if(_0x2cc690[_0x7724('0x3d')]['Applications']){delete _0x2cc690[_0x7724('0x3d')][_0x7724('0x39')];}if(_0x2cc690[_0x7724('0x3d')][_0x7724('0x35')]){delete _0x2cc690[_0x7724('0x3d')]['List'];}if(_0x572617[_0x7724('0x35')]['Contacts'][_0x7724('0x47')]){return _0x572617[_0x7724('0x35')][_0x7724('0x36')][0x0];}var _0x258b20=_[_0x7724('0xa')](_0x177cd4[_0x7724('0x2d')],{'firstName':_0x177cd4[_0x7724('0x2d')][_0x7724('0x48')],'ListId':_0x572617[_0x7724('0x2c')]});_0x258b20[_0x177cd4[_0x7724('0x2d')][_0x7724('0x30')]]=_0x177cd4[_0x7724('0x2d')]['from'];return db['CmContact']['create'](_0x258b20);}else{throw new Error(_0x7724('0x49'));}})['then'](function(_0x4fa32e){_0x2cc690['contact']=_0x4fa32e;if(_0x4fa32e){if(!_0x177cd4['body'][_0x7724('0x16')]['messageId']){_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x4a')]=rs['generate']()+'\x20'+_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')]['from'];}var _0x4c9c8b={'ContactId':_0x4fa32e['id'],'MailAccountId':_0x177cd4[_0x7724('0x3d')]['id'],'inReplyTo':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x4a')],'to':_0x177cd4['body'][_0x7724('0x16')][_0x7724('0x48')],'cc':_0x177cd4[_0x7724('0x2d')]['message']['cc'],'subject':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x4b')],'attach':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x4c')],'lastMsgAt':moment()[_0x7724('0x4d')](_0x7724('0x4e')),'lastMsgDirection':'in','lastMsgBody':_0x177cd4[_0x7724('0x2d')]['body']};return db['MailInteraction'][_0x7724('0x4f')]({'where':{'closed':![],'MailAccountId':_0x177cd4[_0x7724('0x3d')]['id']},'include':[{'model':db[_0x7724('0x50')],'as':_0x7724('0x51'),'attributes':['messageId'],'where':{'messageId':_0x177cd4['body'][_0x7724('0x16')][_0x7724('0x52')]}}]})[_0x7724('0xe')](function(_0x56ec28){if(_0x56ec28){return[_0x56ec28,![]];}return db[_0x7724('0x53')][_0x7724('0x54')](_0x4c9c8b)['then'](function(_0x5e49fa){return[_0x5e49fa,!![]];});});}else{throw new Error(_0x7724('0x55'));}})[_0x7724('0x56')](function(_0x34f2fc,_0x1c80f9){if(_0x34f2fc){_0x5ef8f6=_0x1c80f9;if(!_0x1c80f9){return _0x34f2fc[_0x7724('0x57')]({'inReplyTo':_0x177cd4['body']['message'][_0x7724('0x4a')],'to':_0x177cd4[_0x7724('0x2d')]['message'][_0x7724('0x48')],'cc':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')]['cc'],'subject':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x4b')],'attach':_0x34f2fc['attach']?_0x34f2fc[_0x7724('0x4c')]:_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x4c')],'substatus':null,'substatusAt':moment()[_0x7724('0x4d')](_0x7724('0x4e')),'lastMsgAt':moment()[_0x7724('0x4d')](_0x7724('0x4e')),'lastMsgDirection':'in','lastMsgBody':_0x177cd4[_0x7724('0x2d')][_0x7724('0x2d')]});}else{return _0x34f2fc;}}})[_0x7724('0xe')](function(_0x515736){_0x2cc690[_0x7724('0x58')]=_0x515736[_0x7724('0x3c')]({'plain':!![]});_0x2cc690[_0x7724('0x58')]['created']=_0x5ef8f6;return db['MailMessage'][_0x7724('0x54')]({'body':_0x177cd4[_0x7724('0x2d')][_0x7724('0x2d')],'MailAccountId':_0x177cd4[_0x7724('0x3d')]['id'],'MailInteractionId':_0x515736['id'],'direction':'in','ContactId':_0x2cc690[_0x7724('0x59')]['id'],'messageId':_0x177cd4[_0x7724('0x2d')]['message']['messageId'],'from':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x48')],'to':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')]['to'],'cc':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')]['cc'],'subject':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')]['subject'],'attach':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x4c')],'Attachments':_0x177cd4[_0x7724('0x2d')]['message'][_0x7724('0x5a')],'originTo':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x5b')],'originCc':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x5c')],'bcc':_0x177cd4[_0x7724('0x2d')][_0x7724('0x16')][_0x7724('0x5d')]},{'include':[{'model':db['Attachment'],'as':_0x7724('0x5e')}]});})['then'](function(_0x467ce2){_0x2cc690[_0x7724('0x16')]=_0x467ce2;if(_0x2cc690['interaction'][_0x7724('0x5f')]){return db[_0x7724('0x60')][_0x7724('0x4f')]({'attributes':['id',_0x7724('0x61')],'where':{'id':_0x2cc690[_0x7724('0x58')]['UserId']}})[_0x7724('0xe')](function(_0x1d2fbe){if(_0x1d2fbe){_0x2cc690[_0x7724('0x40')][_0x7724('0x62')]({'id':0x0,'priority':0x0,'app':_0x7724('0x63'),'appdata':_0x1d2fbe['name']+','+(_0x2cc690[_0x7724('0x3d')][_0x7724('0x64')]||0xa),'interval':_0x7724('0x46')});}return respondWithRpcPromise(_0x7724('0x65'),_0x7724('0x66'),_0x2cc690);});}return respondWithRpcPromise(_0x7724('0x65'),_0x7724('0x66'),_0x2cc690);})[_0x7724('0xe')](function(_0x506a39){_0x513d7f(_0x506a39);})[_0x7724('0x19')](function(_0x15900b){_0x38be23(_0xeef653[_0x7724('0x13')](0x1f4,_0x15900b[_0x7724('0x16')]));});});};
\ No newline at end of file
+var _0xe380=['GetMailAccount','MailAccount','findAll','options','where','attributes','include','map','model','find','raw','ShowMailAccount','body','mail','CmContact','createdAt','updatedAt','CompanyId','isNil','from','from\x20is\x20mandatory','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','account','CmList','List','Contacts','DESC','MailApplication','Applications','MailServerOut','Smtp','get','omit','applications','list','orderBy','priority','autoclose','length','*,*,*,*','ListId','contact','messageId','generate','subject','attach','format','YYYY-MM-DD\x20HH:mm:ss','MailInteraction','MailMessage','Messages','inReplyTo','create','Contact\x20not\x20found','spread','update','interaction','attachments','originTo','originCc','bcc','Attachment','UserId','User','name','unshift','agent','waitForTheAssignedAgent','Start','startRouting','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','client','defaults','localhost','socket.io-emitter','./mailAccount.socket','register','request','then','info','MailAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','catch'];(function(_0x2442b9,_0x3d87e9){var _0x31b571=function(_0x1e10ee){while(--_0x1e10ee){_0x2442b9['push'](_0x2442b9['shift']());}};_0x31b571(++_0x3d87e9);}(_0xe380,0xab));var _0x0e38=function(_0x565ed7,_0x398228){_0x565ed7=_0x565ed7-0x0;var _0x183ad7=_0xe380[_0x565ed7];return _0x183ad7;};'use strict';var _=require(_0x0e38('0x0'));var util=require(_0x0e38('0x1'));var moment=require('moment');var BPromise=require(_0x0e38('0x2'));var rs=require(_0x0e38('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x0e38('0x4'))['db'];var utils=require(_0x0e38('0x5'));var logger=require('../../config/logger')(_0x0e38('0x6'));var config=require(_0x0e38('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x0e38('0x8')]['http']({'port':0x232c});config['redis']=_[_0x0e38('0x9')](config['redis'],{'host':_0x0e38('0xa'),'port':0x18eb});var socket=require(_0x0e38('0xb'))(new Redis(config['redis']));require(_0x0e38('0xc'))[_0x0e38('0xd')](socket);function respondWithRpcPromise(_0x36fdc5,_0x532ab2,_0x15afd3){return new BPromise(function(_0x4ad3c7,_0x4a7c5d){return client[_0x0e38('0xe')](_0x36fdc5,_0x15afd3)[_0x0e38('0xf')](function(_0x5b037b){logger[_0x0e38('0x10')](_0x0e38('0x11'),_0x532ab2,_0x0e38('0x12'));logger[_0x0e38('0x13')]('MailAccount,\x20%s,\x20%s,\x20%s',_0x532ab2,_0x0e38('0x12'),JSON[_0x0e38('0x14')](_0x5b037b));if(_0x5b037b[_0x0e38('0x15')]){if(_0x5b037b[_0x0e38('0x15')][_0x0e38('0x16')]===0x1f4){logger[_0x0e38('0x15')]('MailAccount,\x20%s,\x20%s',_0x532ab2,_0x5b037b[_0x0e38('0x15')][_0x0e38('0x17')]);return _0x4a7c5d(_0x5b037b[_0x0e38('0x15')]['message']);}logger[_0x0e38('0x15')](_0x0e38('0x11'),_0x532ab2,_0x5b037b['error'][_0x0e38('0x17')]);return _0x4ad3c7(_0x5b037b[_0x0e38('0x15')][_0x0e38('0x17')]);}else{logger[_0x0e38('0x10')]('MailAccount,\x20%s,\x20%s',_0x532ab2,_0x0e38('0x12'));_0x4ad3c7(_0x5b037b['result']['message']);}})[_0x0e38('0x18')](function(_0x54e16b){logger[_0x0e38('0x15')]('MailAccount,\x20%s,\x20%s',_0x532ab2,_0x54e16b);_0x4a7c5d(_0x54e16b);});});}exports[_0x0e38('0x19')]=function(_0x4e45ff){var _0x2c3ac6=this;return new Promise(function(_0x4f98c0,_0x584db5){return db[_0x0e38('0x1a')][_0x0e38('0x1b')]({'raw':_0x4e45ff[_0x0e38('0x1c')]?_0x4e45ff[_0x0e38('0x1c')]['raw']===undefined?!![]:![]:!![],'where':_0x4e45ff[_0x0e38('0x1c')]?_0x4e45ff[_0x0e38('0x1c')][_0x0e38('0x1d')]||null:null,'attributes':_0x4e45ff[_0x0e38('0x1c')]?_0x4e45ff[_0x0e38('0x1c')][_0x0e38('0x1e')]||null:null,'limit':_0x4e45ff[_0x0e38('0x1c')]?_0x4e45ff['options']['limit']||null:null,'include':_0x4e45ff['options']?_0x4e45ff[_0x0e38('0x1c')][_0x0e38('0x1f')]?_[_0x0e38('0x20')](_0x4e45ff['options']['include'],function(_0x46a554){return{'model':db[_0x46a554[_0x0e38('0x21')]],'as':_0x46a554['as'],'attributes':_0x46a554[_0x0e38('0x1e')],'include':_0x46a554[_0x0e38('0x1f')]?_[_0x0e38('0x20')](_0x46a554['include'],function(_0x636ebb){return{'model':db[_0x636ebb['model']],'as':_0x636ebb['as'],'attributes':_0x636ebb[_0x0e38('0x1e')],'include':_0x636ebb['include']?_[_0x0e38('0x20')](_0x636ebb[_0x0e38('0x1f')],function(_0x59e284){return{'model':db[_0x59e284[_0x0e38('0x21')]],'as':_0x59e284['as'],'attributes':_0x59e284[_0x0e38('0x1e')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x3963f3){logger[_0x0e38('0x10')](_0x0e38('0x19'),_0x4e45ff);logger[_0x0e38('0x13')]('GetMailAccount',_0x4e45ff,JSON[_0x0e38('0x14')](_0x3963f3));_0x4f98c0(_0x3963f3);})[_0x0e38('0x18')](function(_0x130298){logger[_0x0e38('0x15')](_0x0e38('0x19'),_0x130298['message'],_0x4e45ff);_0x584db5(_0x2c3ac6[_0x0e38('0x15')](0x1f4,_0x130298[_0x0e38('0x17')]));});});};exports['ShowMailAccount']=function(_0xfc9376){var _0x1c8b0=this;return new Promise(function(_0xbdeda1,_0x541f00){return db[_0x0e38('0x1a')][_0x0e38('0x22')]({'raw':_0xfc9376['options']?_0xfc9376[_0x0e38('0x1c')][_0x0e38('0x23')]===undefined?!![]:![]:!![],'where':_0xfc9376[_0x0e38('0x1c')]?_0xfc9376[_0x0e38('0x1c')]['where']||null:null,'attributes':_0xfc9376['options']?_0xfc9376[_0x0e38('0x1c')]['attributes']||null:null,'include':_0xfc9376[_0x0e38('0x1c')]?_0xfc9376[_0x0e38('0x1c')][_0x0e38('0x1f')]?_[_0x0e38('0x20')](_0xfc9376['options'][_0x0e38('0x1f')],function(_0x103fc4){return{'model':db[_0x103fc4[_0x0e38('0x21')]],'as':_0x103fc4['as'],'attributes':_0x103fc4[_0x0e38('0x1e')],'include':_0x103fc4[_0x0e38('0x1f')]?_[_0x0e38('0x20')](_0x103fc4[_0x0e38('0x1f')],function(_0x3a6dc7){return{'model':db[_0x3a6dc7['model']],'as':_0x3a6dc7['as'],'attributes':_0x3a6dc7[_0x0e38('0x1e')],'include':_0x3a6dc7['include']?_['map'](_0x3a6dc7['include'],function(_0x1fcf73){return{'model':db[_0x1fcf73[_0x0e38('0x21')]],'as':_0x1fcf73['as'],'attributes':_0x1fcf73[_0x0e38('0x1e')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x4e0d51){logger[_0x0e38('0x10')](_0x0e38('0x24'),_0xfc9376);logger[_0x0e38('0x13')](_0x0e38('0x24'),_0xfc9376,JSON['stringify'](_0x4e0d51));_0xbdeda1(_0x4e0d51);})[_0x0e38('0x18')](function(_0x149c9d){logger['error'](_0x0e38('0x24'),_0x149c9d[_0x0e38('0x17')],_0xfc9376);_0x541f00(_0x1c8b0['error'](0x1f4,_0x149c9d['message']));});});};exports['NotifyMailAccount']=function(_0xdd9847){var _0x3295b2=this;return new Promise(function(_0x27bac1,_0x13ca68){var _0x420d1b={'body':_0xdd9847[_0x0e38('0x25')],'channel':_0x0e38('0x26')};var _0x1041f0=_['difference'](_['keys'](db[_0x0e38('0x27')]['rawAttributes']),[_0x0e38('0x28'),_0x0e38('0x29'),_0x0e38('0x2a'),'ListId']);var _0x3cacd5=![];if(_0xdd9847['body']['id']){delete _0xdd9847[_0x0e38('0x25')]['id'];}if(_[_0x0e38('0x2b')](_0xdd9847[_0x0e38('0x25')][_0x0e38('0x2c')])){return _0x13ca68(_0x3295b2[_0x0e38('0x15')](0x1f4,_0x0e38('0x2d')));}if(_[_0x0e38('0x2b')](_0xdd9847['body']['body'])||_0xdd9847[_0x0e38('0x25')][_0x0e38('0x25')]===''){return _0x13ca68(_0x3295b2[_0x0e38('0x15')](0x1f4,_0x0e38('0x2e')));}if(_[_0x0e38('0x2b')](_0xdd9847['body'][_0x0e38('0x2f')])){return _0x13ca68(_0x3295b2[_0x0e38('0x15')](0x1f4,'mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x1041f0));}if(!_[_0x0e38('0x30')](_0x1041f0,_0xdd9847['body'][_0x0e38('0x2f')])){return _0x13ca68(_0x3295b2['error'](0x1f4,_0x0e38('0x31')+_0x1041f0));}var _0x12b8e8={};_0x12b8e8[_0xdd9847['body'][_0x0e38('0x2f')]]=_0xdd9847['body']['from'];return db[_0x0e38('0x1a')][_0x0e38('0x22')]({'where':{'id':_0xdd9847[_0x0e38('0x32')]['id']},'include':[{'model':db[_0x0e38('0x33')],'as':_0x0e38('0x34'),'include':[{'model':db['CmContact'],'as':_0x0e38('0x35'),'where':_0x12b8e8,'limit':0x1,'order':[['updatedAt',_0x0e38('0x36')]]}]},{'model':db[_0x0e38('0x37')],'as':_0x0e38('0x38')},{'model':db[_0x0e38('0x39')],'as':_0x0e38('0x3a')}]})['then'](function(_0x393d21){if(_0x393d21&&_0x393d21['List']){var _0x5a2897=_0x393d21[_0x0e38('0x3b')]({'plain':!![]});_0x420d1b[_0x0e38('0x32')]=_[_0x0e38('0x3c')](_0x5a2897,[_0x0e38('0x38'),_0x0e38('0x34')]);_0x420d1b[_0x0e38('0x3d')]=_0x5a2897['Applications'];_0x420d1b[_0x0e38('0x3e')]=_0x5a2897['List'];_0x420d1b[_0x0e38('0x3d')]=_[_0x0e38('0x3f')](_0x420d1b['applications'],[_0x0e38('0x40')],['asc']);if(_0x420d1b[_0x0e38('0x32')]&&_0x420d1b['account'][_0x0e38('0x41')]){_0x420d1b[_0x0e38('0x3d')]['push']({'id':0x0,'priority':_0x420d1b[_0x0e38('0x3d')][_0x0e38('0x42')]+0x1,'app':'close','appdata':_0x0e38('0x41'),'interval':_0x0e38('0x43')});}if(_0x420d1b[_0x0e38('0x32')]['Applications']){delete _0x420d1b[_0x0e38('0x32')]['Applications'];}if(_0x420d1b[_0x0e38('0x32')]['List']){delete _0x420d1b[_0x0e38('0x32')][_0x0e38('0x34')];}if(_0x5a2897[_0x0e38('0x34')]['Contacts'][_0x0e38('0x42')]){return _0x5a2897['List'][_0x0e38('0x35')][0x0];}var _0x4778cc=_[_0x0e38('0x9')](_0xdd9847['body'],{'firstName':_0xdd9847[_0x0e38('0x25')]['from'],'ListId':_0x5a2897[_0x0e38('0x44')]});_0x4778cc[_0xdd9847[_0x0e38('0x25')]['mapKey']]=_0xdd9847[_0x0e38('0x25')][_0x0e38('0x2c')];return db[_0x0e38('0x27')]['create'](_0x4778cc);}else{throw new Error('List\x20not\x20found');}})[_0x0e38('0xf')](function(_0x71be00){_0x420d1b[_0x0e38('0x45')]=_0x71be00;if(_0x71be00){if(!_0xdd9847['body'][_0x0e38('0x17')][_0x0e38('0x46')]){_0xdd9847['body']['message'][_0x0e38('0x46')]=rs[_0x0e38('0x47')]()+'\x20'+_0xdd9847['body']['message'][_0x0e38('0x2c')];}var _0x21f83d={'ContactId':_0x71be00['id'],'MailAccountId':_0xdd9847[_0x0e38('0x32')]['id'],'inReplyTo':_0xdd9847['body'][_0x0e38('0x17')][_0x0e38('0x46')],'to':_0xdd9847['body'][_0x0e38('0x17')][_0x0e38('0x2c')],'cc':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')]['cc'],'subject':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')][_0x0e38('0x48')],'attach':_0xdd9847['body']['message'][_0x0e38('0x49')],'lastMsgAt':moment()[_0x0e38('0x4a')](_0x0e38('0x4b')),'lastMsgDirection':'in','lastMsgBody':_0xdd9847['body'][_0x0e38('0x25')]};return db[_0x0e38('0x4c')]['find']({'where':{'closed':![],'MailAccountId':_0xdd9847['account']['id']},'include':[{'model':db[_0x0e38('0x4d')],'as':_0x0e38('0x4e'),'attributes':[_0x0e38('0x46')],'where':{'messageId':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')][_0x0e38('0x4f')]}}]})['then'](function(_0x8c1ed4){if(_0x8c1ed4){return[_0x8c1ed4,![]];}return db[_0x0e38('0x4c')][_0x0e38('0x50')](_0x21f83d)['then'](function(_0x518604){return[_0x518604,!![]];});});}else{throw new Error(_0x0e38('0x51'));}})[_0x0e38('0x52')](function(_0x17e14c,_0x4ffae9){if(_0x17e14c){_0x3cacd5=_0x4ffae9;if(!_0x4ffae9){return _0x17e14c[_0x0e38('0x53')]({'inReplyTo':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')]['messageId'],'to':_0xdd9847[_0x0e38('0x25')]['message'][_0x0e38('0x2c')],'cc':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')]['cc'],'subject':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')][_0x0e38('0x48')],'attach':_0x17e14c['attach']?_0x17e14c['attach']:_0xdd9847['body']['message'][_0x0e38('0x49')],'substatus':null,'substatusAt':moment()[_0x0e38('0x4a')](_0x0e38('0x4b')),'lastMsgAt':moment()[_0x0e38('0x4a')]('YYYY-MM-DD\x20HH:mm:ss'),'lastMsgDirection':'in','lastMsgBody':_0xdd9847['body'][_0x0e38('0x25')]});}else{return _0x17e14c;}}})[_0x0e38('0xf')](function(_0x41d9da){_0x420d1b[_0x0e38('0x54')]=_0x41d9da['get']({'plain':!![]});_0x420d1b[_0x0e38('0x54')]['created']=_0x3cacd5;return db[_0x0e38('0x4d')][_0x0e38('0x50')]({'body':_0xdd9847['body'][_0x0e38('0x25')],'MailAccountId':_0xdd9847[_0x0e38('0x32')]['id'],'MailInteractionId':_0x41d9da['id'],'direction':'in','ContactId':_0x420d1b[_0x0e38('0x45')]['id'],'messageId':_0xdd9847['body'][_0x0e38('0x17')][_0x0e38('0x46')],'from':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')]['from'],'to':_0xdd9847['body'][_0x0e38('0x17')]['to'],'cc':_0xdd9847['body'][_0x0e38('0x17')]['cc'],'subject':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')]['subject'],'attach':_0xdd9847['body'][_0x0e38('0x17')][_0x0e38('0x49')],'Attachments':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')][_0x0e38('0x55')],'originTo':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')][_0x0e38('0x56')],'originCc':_0xdd9847['body'][_0x0e38('0x17')][_0x0e38('0x57')],'bcc':_0xdd9847[_0x0e38('0x25')][_0x0e38('0x17')][_0x0e38('0x58')]},{'include':[{'model':db[_0x0e38('0x59')],'as':'Attachments'}]});})[_0x0e38('0xf')](function(_0x52bf65){_0x420d1b[_0x0e38('0x17')]=_0x52bf65;if(_0x420d1b[_0x0e38('0x54')][_0x0e38('0x5a')]){return db[_0x0e38('0x5b')][_0x0e38('0x22')]({'attributes':['id',_0x0e38('0x5c')],'where':{'id':_0x420d1b[_0x0e38('0x54')][_0x0e38('0x5a')]}})[_0x0e38('0xf')](function(_0x46ab04){if(_0x46ab04){_0x420d1b['applications'][_0x0e38('0x5d')]({'id':0x0,'priority':0x0,'app':_0x0e38('0x5e'),'appdata':_0x46ab04['name']+','+(_0x420d1b[_0x0e38('0x32')][_0x0e38('0x5f')]||0xa),'interval':_0x0e38('0x43')});}return respondWithRpcPromise(_0x0e38('0x60'),_0x0e38('0x61'),_0x420d1b);});}return respondWithRpcPromise('Start',_0x0e38('0x61'),_0x420d1b);})['then'](function(_0xfb14f7){_0x27bac1(_0xfb14f7);})[_0x0e38('0x18')](function(_0x2ecc39){_0x13ca68(_0x3295b2['error'](0x1f4,_0x2ecc39[_0x0e38('0x17')]));});});};
\ No newline at end of file
index b8e34a8..7b64c2e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8fd8=['register','length','mailAccount:','./mailAccount.events','save','emit'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x8fd8,0x1d7));var _0x88fd=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x8fd8[_0x3dd15e];return _0x231fd0;};'use strict';var MailAccountEvents=require(_0x88fd('0x0'));var events=[_0x88fd('0x1'),'remove','update'];function createListener(_0x3f7773,_0x1852a5){return function(_0x9a73b1){_0x1852a5[_0x88fd('0x2')](_0x3f7773,_0x9a73b1);};}function removeListener(_0x3d56cf,_0x120c3b){return function(){MailAccountEvents['removeListener'](_0x3d56cf,_0x120c3b);};}exports[_0x88fd('0x3')]=function(_0x29b5cb){for(var _0x340792=0x0,_0x2b181e=events[_0x88fd('0x4')];_0x340792<_0x2b181e;_0x340792++){var _0x50e152=events[_0x340792];var _0x17f2d2=createListener(_0x88fd('0x5')+_0x50e152,_0x29b5cb);MailAccountEvents['on'](_0x50e152,_0x17f2d2);}};
\ No newline at end of file
+var _0xde34=['length','./mailAccount.events','save','remove','update','emit','register'];(function(_0x111e8c,_0x4aed6d){var _0xe489b8=function(_0x5d8f04){while(--_0x5d8f04){_0x111e8c['push'](_0x111e8c['shift']());}};_0xe489b8(++_0x4aed6d);}(_0xde34,0x94));var _0x4de3=function(_0xf5ef4f,_0x5de92b){_0xf5ef4f=_0xf5ef4f-0x0;var _0x54d582=_0xde34[_0xf5ef4f];return _0x54d582;};'use strict';var MailAccountEvents=require(_0x4de3('0x0'));var events=[_0x4de3('0x1'),_0x4de3('0x2'),_0x4de3('0x3')];function createListener(_0xc7c2de,_0x6c9e6e){return function(_0x4c88c3){_0x6c9e6e[_0x4de3('0x4')](_0xc7c2de,_0x4c88c3);};}function removeListener(_0x143986,_0x28180a){return function(){MailAccountEvents['removeListener'](_0x143986,_0x28180a);};}exports[_0x4de3('0x5')]=function(_0x451e73){for(var _0x2a044b=0x0,_0x4f22f9=events[_0x4de3('0x6')];_0x2a044b<_0x4f22f9;_0x2a044b++){var _0x33eb84=events[_0x2a044b];var _0x1dcfa3=createListener('mailAccount:'+_0x33eb84,_0x451e73);MailAccountEvents['on'](_0x33eb84,_0x1dcfa3);}};
\ No newline at end of file
index 7ca2108..a5d79c0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd58c=['multer','util','path','express','../../components/auth/service','../../config/environment','./mailApplication.controller','get','/:id','isAuthenticated','update','delete','destroy','exports'];(function(_0x262fcd,_0x351b8c){var _0x220549=function(_0x49cf08){while(--_0x49cf08){_0x262fcd['push'](_0x262fcd['shift']());}};_0x220549(++_0x351b8c);}(_0xd58c,0xb6));var _0xcd58=function(_0xfbc891,_0x2a7b65){_0xfbc891=_0xfbc891-0x0;var _0x2a9edf=_0xd58c[_0xfbc891];return _0x2a9edf;};'use strict';var multer=require(_0xcd58('0x0'));var util=require(_0xcd58('0x1'));var path=require(_0xcd58('0x2'));var timeout=require('connect-timeout');var express=require(_0xcd58('0x3'));var router=express['Router']();var auth=require(_0xcd58('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xcd58('0x5'));var controller=require(_0xcd58('0x6'));router[_0xcd58('0x7')](_0xcd58('0x8'),auth[_0xcd58('0x9')](),controller['show']);router['put'](_0xcd58('0x8'),auth[_0xcd58('0x9')](),controller[_0xcd58('0xa')]);router[_0xcd58('0xb')](_0xcd58('0x8'),auth['isAuthenticated'](),controller[_0xcd58('0xc')]);module[_0xcd58('0xd')]=router;
\ No newline at end of file
+var _0xc3fe=['util','path','express','Router','../../components/auth/service','../../config/environment','./mailApplication.controller','get','show','put','update','/:id','isAuthenticated','destroy','exports','multer'];(function(_0xe11549,_0x39638f){var _0x373931=function(_0x5296e1){while(--_0x5296e1){_0xe11549['push'](_0xe11549['shift']());}};_0x373931(++_0x39638f);}(_0xc3fe,0xff));var _0xec3f=function(_0x178064,_0x249914){_0x178064=_0x178064-0x0;var _0xa4e07e=_0xc3fe[_0x178064];return _0xa4e07e;};'use strict';var multer=require(_0xec3f('0x0'));var util=require(_0xec3f('0x1'));var path=require(_0xec3f('0x2'));var timeout=require('connect-timeout');var express=require(_0xec3f('0x3'));var router=express[_0xec3f('0x4')]();var auth=require(_0xec3f('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xec3f('0x6'));var controller=require(_0xec3f('0x7'));router[_0xec3f('0x8')]('/:id',auth['isAuthenticated'](),controller[_0xec3f('0x9')]);router[_0xec3f('0xa')]('/:id',auth['isAuthenticated'](),controller[_0xec3f('0xb')]);router['delete'](_0xec3f('0xc'),auth[_0xec3f('0xd')](),controller[_0xec3f('0xe')]);module[_0xec3f('0xf')]=router;
\ No newline at end of file
index 8c7e056..2473c35 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc924=['sequelize','exports','INTEGER','STRING','*,*,*,*'];(function(_0x152aa0,_0x5d4baa){var _0x1b4fda=function(_0xf6d43b){while(--_0xf6d43b){_0x152aa0['push'](_0x152aa0['shift']());}};_0x1b4fda(++_0x5d4baa);}(_0xc924,0x136));var _0x4c92=function(_0x23cba3,_0x3fd1a5){_0x23cba3=_0x23cba3-0x0;var _0x1721db=_0xc924[_0x23cba3];return _0x1721db;};'use strict';var Sequelize=require(_0x4c92('0x0'));module[_0x4c92('0x1')]={'priority':{'type':Sequelize[_0x4c92('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0x4c92('0x3')],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize['TEXT']()},'description':{'type':Sequelize[_0x4c92('0x3')]},'interval':{'type':Sequelize[_0x4c92('0x3')],'defaultValue':_0x4c92('0x4')}};
\ No newline at end of file
+var _0xdbc6=['INTEGER','noop','TEXT','STRING','*,*,*,*'];(function(_0x46efd8,_0x1572a4){var _0x70c3dc=function(_0x4cb0c5){while(--_0x4cb0c5){_0x46efd8['push'](_0x46efd8['shift']());}};_0x70c3dc(++_0x1572a4);}(_0xdbc6,0x13b));var _0x6dbc=function(_0x302eda,_0x5fc65d){_0x302eda=_0x302eda-0x0;var _0x5eabbc=_0xdbc6[_0x302eda];return _0x5eabbc;};'use strict';var Sequelize=require('sequelize');module['exports']={'priority':{'type':Sequelize[_0x6dbc('0x0')],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x6dbc('0x1')},'appdata':{'type':Sequelize[_0x6dbc('0x2')]()},'description':{'type':Sequelize[_0x6dbc('0x3')]},'interval':{'type':Sequelize[_0x6dbc('0x3')],'defaultValue':_0x6dbc('0x4')}};
\ No newline at end of file
index 761d29b..4d4e54d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc65b=['find','catch','body','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','to-csv','ejs','lodash','squel','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','set','apply','reject','update','then','destroy','error','stack','name','show','params','model','keys','MailApplication','rawAttributes','query','filters','attributes','intersection','fields','length','includeAll','include','merge','options'];(function(_0x2a78c8,_0x340185){var _0x45a638=function(_0x2f6bae){while(--_0x2f6bae){_0x2a78c8['push'](_0x2a78c8['shift']());}};_0x45a638(++_0x340185);}(_0xc65b,0x12f));var _0xbc65=function(_0x4fd540,_0x4de6c7){_0x4fd540=_0x4fd540-0x0;var _0x735bb2=_0xc65b[_0x4fd540];return _0x735bb2;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xbc65('0x0'));var rimraf=require(_0xbc65('0x1'));var zipdir=require(_0xbc65('0x2'));var jsonpatch=require(_0xbc65('0x3'));var rp=require(_0xbc65('0x4'));var moment=require(_0xbc65('0x5'));var BPromise=require(_0xbc65('0x6'));var Mustache=require('mustache');var util=require(_0xbc65('0x7'));var path=require(_0xbc65('0x8'));var sox=require('sox');var csv=require(_0xbc65('0x9'));var ejs=require(_0xbc65('0xa'));var fs=require('fs');var _=require(_0xbc65('0xb'));var squel=require(_0xbc65('0xc'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xbc65('0xd'));var toCsv=require(_0xbc65('0x9'));var querystring=require(_0xbc65('0xe'));var Papa=require(_0xbc65('0xf'));var Redis=require(_0xbc65('0x10'));var authService=require(_0xbc65('0x11'));var qs=require(_0xbc65('0x12'));var hardwareService=require(_0xbc65('0x13'));var logger=require(_0xbc65('0x14'))(_0xbc65('0x15'));var utils=require(_0xbc65('0x16'));var config=require(_0xbc65('0x17'));var db=require(_0xbc65('0x18'))['db'];function respondWithStatusCode(_0x5db27d,_0x6866d1){_0x6866d1=_0x6866d1||0xcc;return function(_0x7deba2){if(_0x7deba2){return _0x5db27d[_0xbc65('0x19')](_0x6866d1);}return _0x5db27d[_0xbc65('0x1a')](_0x6866d1)[_0xbc65('0x1b')]();};}function respondWithResult(_0x54663c,_0x4ee45d){_0x4ee45d=_0x4ee45d||0xc8;return function(_0x214bf8){if(_0x214bf8){return _0x54663c[_0xbc65('0x1a')](_0x4ee45d)[_0xbc65('0x1c')](_0x214bf8);}};}function respondWithFilteredResult(_0x1b23bd,_0x130d41){return function(_0x33a9bc){if(_0x33a9bc){var _0x5c8b5a=_0x33a9bc[_0xbc65('0x1d')],_0x5e5b4d=_0x130d41['offset'],_0x33bf42=_0x130d41[_0xbc65('0x1e')]+_0x130d41[_0xbc65('0x1f')],_0x239fb1;if(_0x33bf42>=_0x5c8b5a){_0x33bf42=_0x5c8b5a;_0x239fb1=0xc8;}else{_0x239fb1=0xce;}_0x1b23bd[_0xbc65('0x1a')](_0x239fb1);return _0x1b23bd[_0xbc65('0x20')]('Content-Range',_0x5e5b4d+'-'+_0x33bf42+'/'+_0x5c8b5a)['json'](_0x33a9bc);}return null;};}function patchUpdates(_0x2cfa43){return function(_0x481199){try{jsonpatch[_0xbc65('0x21')](_0x481199,_0x2cfa43,!![]);}catch(_0x21d82f){return BPromise[_0xbc65('0x22')](_0x21d82f);}return _0x481199['save']();};}function saveUpdates(_0x3e6dfa,_0xea173e){return function(_0x47f3be){if(_0x47f3be){return _0x47f3be[_0xbc65('0x23')](_0x3e6dfa)[_0xbc65('0x24')](function(_0x567973){return _0x567973;});}return null;};}function removeEntity(_0x465203,_0x4c4815){return function(_0x2d5b90){if(_0x2d5b90){return _0x2d5b90[_0xbc65('0x25')]()[_0xbc65('0x24')](function(){_0x465203[_0xbc65('0x1a')](0xcc)[_0xbc65('0x1b')]();});}};}function handleEntityNotFound(_0x186aa0,_0x58a076){return function(_0x74015){if(!_0x74015){_0x186aa0[_0xbc65('0x19')](0x194);}return _0x74015;};}function handleError(_0x1a8fe7,_0x816cc0){_0x816cc0=_0x816cc0||0x1f4;return function(_0xdd039a){logger[_0xbc65('0x26')](_0xdd039a[_0xbc65('0x27')]);if(_0xdd039a[_0xbc65('0x28')]){delete _0xdd039a[_0xbc65('0x28')];}_0x1a8fe7[_0xbc65('0x1a')](_0x816cc0)['send'](_0xdd039a);};}exports[_0xbc65('0x29')]=function(_0x2190e3,_0x2cda71){var _0x51a55d={'raw':!![],'where':{'id':_0x2190e3[_0xbc65('0x2a')]['id']}},_0x2ea7d5={};_0x2ea7d5[_0xbc65('0x2b')]=_[_0xbc65('0x2c')](db[_0xbc65('0x2d')][_0xbc65('0x2e')]);_0x2ea7d5[_0xbc65('0x2f')]=_[_0xbc65('0x2c')](_0x2190e3[_0xbc65('0x2f')]);_0x2ea7d5[_0xbc65('0x30')]=_['intersection'](_0x2ea7d5[_0xbc65('0x2b')],_0x2ea7d5[_0xbc65('0x2f')]);_0x51a55d[_0xbc65('0x31')]=_[_0xbc65('0x32')](_0x2ea7d5[_0xbc65('0x2b')],qs[_0xbc65('0x33')](_0x2190e3[_0xbc65('0x2f')][_0xbc65('0x33')]));_0x51a55d[_0xbc65('0x31')]=_0x51a55d[_0xbc65('0x31')][_0xbc65('0x34')]?_0x51a55d[_0xbc65('0x31')]:_0x2ea7d5['model'];if(_0x2190e3[_0xbc65('0x2f')][_0xbc65('0x35')]){_0x51a55d[_0xbc65('0x36')]=[{'all':!![]}];}_0x51a55d=_[_0xbc65('0x37')]({},_0x51a55d,_0x2190e3[_0xbc65('0x38')]);return db[_0xbc65('0x2d')][_0xbc65('0x39')](_0x51a55d)[_0xbc65('0x24')](handleEntityNotFound(_0x2cda71,null))[_0xbc65('0x24')](respondWithResult(_0x2cda71,null))[_0xbc65('0x3a')](handleError(_0x2cda71,null));};exports[_0xbc65('0x23')]=function(_0x2e1e5a,_0x904315){if(_0x2e1e5a[_0xbc65('0x3b')]['id']){delete _0x2e1e5a[_0xbc65('0x3b')]['id'];}return db[_0xbc65('0x2d')][_0xbc65('0x39')]({'where':{'id':_0x2e1e5a['params']['id']}})[_0xbc65('0x24')](handleEntityNotFound(_0x904315,null))[_0xbc65('0x24')](saveUpdates(_0x2e1e5a[_0xbc65('0x3b')],null))[_0xbc65('0x24')](respondWithResult(_0x904315,null))[_0xbc65('0x3a')](handleError(_0x904315,null));};exports[_0xbc65('0x25')]=function(_0x3e6c2b,_0x5adcd3){return db[_0xbc65('0x2d')]['find']({'where':{'id':_0x3e6c2b['params']['id']}})[_0xbc65('0x24')](handleEntityNotFound(_0x5adcd3,null))[_0xbc65('0x24')](removeEntity(_0x5adcd3,null))['catch'](handleError(_0x5adcd3,null));};
\ No newline at end of file
+var _0x8313=['limit','set','apply','reject','save','update','then','destroy','error','stack','send','show','model','keys','MailApplication','query','filters','intersection','attributes','fields','length','includeAll','include','merge','options','find','catch','body','params','html-pdf','eml-format','rimraf','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','sendStatus','status','end','json','offset'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x8313,0x19e));var _0x3831=function(_0x631a04,_0x1391b8){_0x631a04=_0x631a04-0x0;var _0x663a92=_0x8313[_0x631a04];return _0x663a92;};'use strict';var pdf=require(_0x3831('0x0'));var emlformat=require(_0x3831('0x1'));var rimraf=require(_0x3831('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x3831('0x3'));var rp=require('request-promise');var moment=require(_0x3831('0x4'));var BPromise=require(_0x3831('0x5'));var Mustache=require(_0x3831('0x6'));var util=require(_0x3831('0x7'));var path=require(_0x3831('0x8'));var sox=require(_0x3831('0x9'));var csv=require(_0x3831('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x3831('0xb'));var squel=require(_0x3831('0xc'));var crypto=require(_0x3831('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x3831('0xa'));var querystring=require(_0x3831('0xe'));var Papa=require(_0x3831('0xf'));var Redis=require(_0x3831('0x10'));var authService=require(_0x3831('0x11'));var qs=require(_0x3831('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x3831('0x13'))(_0x3831('0x14'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xacc2c7,_0x2cba98){_0x2cba98=_0x2cba98||0xcc;return function(_0x178c62){if(_0x178c62){return _0xacc2c7[_0x3831('0x15')](_0x2cba98);}return _0xacc2c7[_0x3831('0x16')](_0x2cba98)[_0x3831('0x17')]();};}function respondWithResult(_0x17e344,_0x3442f6){_0x3442f6=_0x3442f6||0xc8;return function(_0x3af9be){if(_0x3af9be){return _0x17e344[_0x3831('0x16')](_0x3442f6)[_0x3831('0x18')](_0x3af9be);}};}function respondWithFilteredResult(_0x1f4f33,_0x4658bb){return function(_0x11cabe){if(_0x11cabe){var _0x5d12ca=_0x11cabe['count'],_0x1df003=_0x4658bb[_0x3831('0x19')],_0x3b31a9=_0x4658bb[_0x3831('0x19')]+_0x4658bb[_0x3831('0x1a')],_0x1f8332;if(_0x3b31a9>=_0x5d12ca){_0x3b31a9=_0x5d12ca;_0x1f8332=0xc8;}else{_0x1f8332=0xce;}_0x1f4f33[_0x3831('0x16')](_0x1f8332);return _0x1f4f33[_0x3831('0x1b')]('Content-Range',_0x1df003+'-'+_0x3b31a9+'/'+_0x5d12ca)[_0x3831('0x18')](_0x11cabe);}return null;};}function patchUpdates(_0x1d2110){return function(_0xf52833){try{jsonpatch[_0x3831('0x1c')](_0xf52833,_0x1d2110,!![]);}catch(_0x4e1619){return BPromise[_0x3831('0x1d')](_0x4e1619);}return _0xf52833[_0x3831('0x1e')]();};}function saveUpdates(_0x31c338,_0x571151){return function(_0x11af0b){if(_0x11af0b){return _0x11af0b[_0x3831('0x1f')](_0x31c338)[_0x3831('0x20')](function(_0x435236){return _0x435236;});}return null;};}function removeEntity(_0xfe4523,_0x47b10f){return function(_0x5e9ab1){if(_0x5e9ab1){return _0x5e9ab1[_0x3831('0x21')]()[_0x3831('0x20')](function(){_0xfe4523[_0x3831('0x16')](0xcc)[_0x3831('0x17')]();});}};}function handleEntityNotFound(_0x410072,_0x27f638){return function(_0xd506d5){if(!_0xd506d5){_0x410072[_0x3831('0x15')](0x194);}return _0xd506d5;};}function handleError(_0x3ebacb,_0x8e4fe){_0x8e4fe=_0x8e4fe||0x1f4;return function(_0x56bf7c){logger[_0x3831('0x22')](_0x56bf7c[_0x3831('0x23')]);if(_0x56bf7c['name']){delete _0x56bf7c['name'];}_0x3ebacb[_0x3831('0x16')](_0x8e4fe)[_0x3831('0x24')](_0x56bf7c);};}exports[_0x3831('0x25')]=function(_0x346479,_0x42ac31){var _0x1dd90d={'raw':!![],'where':{'id':_0x346479['params']['id']}},_0x42fdec={};_0x42fdec[_0x3831('0x26')]=_[_0x3831('0x27')](db[_0x3831('0x28')]['rawAttributes']);_0x42fdec['query']=_[_0x3831('0x27')](_0x346479[_0x3831('0x29')]);_0x42fdec[_0x3831('0x2a')]=_[_0x3831('0x2b')](_0x42fdec['model'],_0x42fdec[_0x3831('0x29')]);_0x1dd90d[_0x3831('0x2c')]=_['intersection'](_0x42fdec[_0x3831('0x26')],qs['fields'](_0x346479[_0x3831('0x29')][_0x3831('0x2d')]));_0x1dd90d[_0x3831('0x2c')]=_0x1dd90d[_0x3831('0x2c')][_0x3831('0x2e')]?_0x1dd90d['attributes']:_0x42fdec['model'];if(_0x346479[_0x3831('0x29')][_0x3831('0x2f')]){_0x1dd90d[_0x3831('0x30')]=[{'all':!![]}];}_0x1dd90d=_[_0x3831('0x31')]({},_0x1dd90d,_0x346479[_0x3831('0x32')]);return db[_0x3831('0x28')][_0x3831('0x33')](_0x1dd90d)[_0x3831('0x20')](handleEntityNotFound(_0x42ac31,null))[_0x3831('0x20')](respondWithResult(_0x42ac31,null))[_0x3831('0x34')](handleError(_0x42ac31,null));};exports[_0x3831('0x1f')]=function(_0xae2c95,_0x5be41d){if(_0xae2c95[_0x3831('0x35')]['id']){delete _0xae2c95[_0x3831('0x35')]['id'];}return db[_0x3831('0x28')]['find']({'where':{'id':_0xae2c95[_0x3831('0x36')]['id']}})[_0x3831('0x20')](handleEntityNotFound(_0x5be41d,null))[_0x3831('0x20')](saveUpdates(_0xae2c95[_0x3831('0x35')],null))[_0x3831('0x20')](respondWithResult(_0x5be41d,null))['catch'](handleError(_0x5be41d,null));};exports[_0x3831('0x21')]=function(_0x243968,_0x2bd299){return db[_0x3831('0x28')][_0x3831('0x33')]({'where':{'id':_0x243968['params']['id']}})[_0x3831('0x20')](handleEntityNotFound(_0x2bd299,null))['then'](removeEntity(_0x2bd299,null))['catch'](handleError(_0x2bd299,null));};
\ No newline at end of file
index ea431a4..c051c81 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf7e2=['./mailApplication.attributes','define','mail_applications','utf8mb4','utf8mb4_unicode_ci','util','../../config/logger','moment','request-promise','path','../../config/environment'];(function(_0x431ff8,_0x4085dd){var _0x84ccd4=function(_0x1fd1b5){while(--_0x1fd1b5){_0x431ff8['push'](_0x431ff8['shift']());}};_0x84ccd4(++_0x4085dd);}(_0xf7e2,0x191));var _0x2f7e=function(_0x1298f1,_0x109676){_0x1298f1=_0x1298f1-0x0;var _0x16b255=_0xf7e2[_0x1298f1];return _0x16b255;};'use strict';var _=require('lodash');var util=require(_0x2f7e('0x0'));var logger=require(_0x2f7e('0x1'))('api');var moment=require(_0x2f7e('0x2'));var BPromise=require('bluebird');var rp=require(_0x2f7e('0x3'));var fs=require('fs');var path=require(_0x2f7e('0x4'));var rimraf=require('rimraf');var config=require(_0x2f7e('0x5'));var attributes=require(_0x2f7e('0x6'));module['exports']=function(_0x13d6d3,_0x10532e){return _0x13d6d3[_0x2f7e('0x7')]('MailApplication',attributes,{'tableName':_0x2f7e('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x2f7e('0x9'),'collate':_0x2f7e('0xa')});};
\ No newline at end of file
+var _0x7c88=['MailApplication','mail_applications','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./mailApplication.attributes','exports'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x7c88,0x194));var _0x87c8=function(_0x369d60,_0xdcd66){_0x369d60=_0x369d60-0x0;var _0x8e8e97=_0x7c88[_0x369d60];return _0x8e8e97;};'use strict';var _=require(_0x87c8('0x0'));var util=require(_0x87c8('0x1'));var logger=require(_0x87c8('0x2'))(_0x87c8('0x3'));var moment=require(_0x87c8('0x4'));var BPromise=require(_0x87c8('0x5'));var rp=require(_0x87c8('0x6'));var fs=require('fs');var path=require(_0x87c8('0x7'));var rimraf=require(_0x87c8('0x8'));var config=require(_0x87c8('0x9'));var attributes=require(_0x87c8('0xa'));module[_0x87c8('0xb')]=function(_0x2c59aa,_0x879e0f){return _0x2c59aa['define'](_0x87c8('0xc'),attributes,{'tableName':_0x87c8('0xd'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x87c8('0xe'),'collate':_0x87c8('0xf')});};
\ No newline at end of file
index 6ff21f0..1e4180f 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(_0x5d9352,_0x4f9199){var _0x390d5a=function(_0x23875a){while(--_0x23875a){_0x5d9352['push'](_0x5d9352['shift']());}};_0x390d5a(++_0x4f9199);}(_0x7a54,0x106));var _0x47a5=function(_0x3a589b,_0x2b8ec5){_0x3a589b=_0x3a589b-0x0;var _0x3a16cb=_0x7a54[_0x3a589b];return _0x3a16cb;};'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 _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(_0x43e4be,_0x4f9d2d){var _0x26fd4b=function(_0x57fd96){while(--_0x57fd96){_0x43e4be['push'](_0x43e4be['shift']());}};_0x26fd4b(++_0x4f9d2d);}(_0x7a54,0x106));var _0x47a5=function(_0x2bff61,_0x585c91){_0x2bff61=_0x2bff61-0x0;var _0x287b21=_0x7a54[_0x2bff61];return _0x287b21;};'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
index 9896475..1aa5032 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailInteraction.controller','get','isAuthenticated','index','/describe','describe','/:id','/:id/messages','/:id/download','post','create','addMessage','mail','mailinteraction:addtags','addTags','put','mailinteraction:update','update','delete','destroy'];(function(_0x2d6c31,_0x376588){var _0x9a98d1=function(_0x10aaaf){while(--_0x10aaaf){_0x2d6c31['push'](_0x2d6c31['shift']());}};_0x9a98d1(++_0x376588);}(_0x008c,0x188));var _0xc008=function(_0x28a180,_0x5bb5b0){_0x28a180=_0x28a180-0x0;var _0x1161d3=_0x008c[_0x28a180];return _0x1161d3;};'use strict';var multer=require(_0xc008('0x0'));var util=require(_0xc008('0x1'));var path=require(_0xc008('0x2'));var timeout=require(_0xc008('0x3'));var express=require(_0xc008('0x4'));var router=express['Router']();var auth=require(_0xc008('0x5'));var interaction=require(_0xc008('0x6'));var config=require(_0xc008('0x7'));var controller=require(_0xc008('0x8'));router[_0xc008('0x9')]('/',auth[_0xc008('0xa')](),controller[_0xc008('0xb')]);router[_0xc008('0x9')](_0xc008('0xc'),auth['isAuthenticated'](),controller[_0xc008('0xd')]);router['get'](_0xc008('0xe'),auth['isAuthenticated'](),controller['show']);router[_0xc008('0x9')](_0xc008('0xf'),auth['isAuthenticated'](),controller['getMessages']);router['get'](_0xc008('0x10'),auth[_0xc008('0xa')](),controller['download']);router[_0xc008('0x11')]('/',auth[_0xc008('0xa')](),controller[_0xc008('0x12')]);router[_0xc008('0x11')](_0xc008('0xf'),auth[_0xc008('0xa')](),controller[_0xc008('0x13')]);router['post']('/:id/tags',auth[_0xc008('0xa')](),interaction['tracked'](_0xc008('0x14'),_0xc008('0x15')),controller[_0xc008('0x16')]);router[_0xc008('0x17')](_0xc008('0xe'),auth['isAuthenticated'](),interaction['tracked']('mail',_0xc008('0x18')),controller[_0xc008('0x19')]);router[_0xc008('0x1a')](_0xc008('0xe'),auth['isAuthenticated'](),interaction['tracked']('mail','mailinteraction:destroy'),controller[_0xc008('0x1b')]);router[_0xc008('0x1a')]('/:id/tags',auth[_0xc008('0xa')](),controller['removeTags']);module['exports']=router;
\ No newline at end of file
+var _0x9bde=['removeTags','util','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailInteraction.controller','get','isAuthenticated','/describe','describe','/:id','show','/:id/messages','/:id/download','post','create','/:id/tags','mailinteraction:addtags','addTags','put','tracked','mail','update','delete','mailinteraction:destroy','destroy'];(function(_0x4382f7,_0x469668){var _0x46f0f2=function(_0x218261){while(--_0x218261){_0x4382f7['push'](_0x4382f7['shift']());}};_0x46f0f2(++_0x469668);}(_0x9bde,0xe1));var _0xe9bd=function(_0x4dc8d1,_0x452c67){_0x4dc8d1=_0x4dc8d1-0x0;var _0x2af8ae=_0x9bde[_0x4dc8d1];return _0x2af8ae;};'use strict';var multer=require('multer');var util=require(_0xe9bd('0x0'));var path=require('path');var timeout=require(_0xe9bd('0x1'));var express=require('express');var router=express[_0xe9bd('0x2')]();var auth=require(_0xe9bd('0x3'));var interaction=require(_0xe9bd('0x4'));var config=require(_0xe9bd('0x5'));var controller=require(_0xe9bd('0x6'));router[_0xe9bd('0x7')]('/',auth[_0xe9bd('0x8')](),controller['index']);router[_0xe9bd('0x7')](_0xe9bd('0x9'),auth[_0xe9bd('0x8')](),controller[_0xe9bd('0xa')]);router[_0xe9bd('0x7')](_0xe9bd('0xb'),auth[_0xe9bd('0x8')](),controller[_0xe9bd('0xc')]);router[_0xe9bd('0x7')](_0xe9bd('0xd'),auth['isAuthenticated'](),controller['getMessages']);router[_0xe9bd('0x7')](_0xe9bd('0xe'),auth[_0xe9bd('0x8')](),controller['download']);router[_0xe9bd('0xf')]('/',auth[_0xe9bd('0x8')](),controller[_0xe9bd('0x10')]);router[_0xe9bd('0xf')]('/:id/messages',auth[_0xe9bd('0x8')](),controller['addMessage']);router[_0xe9bd('0xf')](_0xe9bd('0x11'),auth[_0xe9bd('0x8')](),interaction['tracked']('mail',_0xe9bd('0x12')),controller[_0xe9bd('0x13')]);router[_0xe9bd('0x14')](_0xe9bd('0xb'),auth[_0xe9bd('0x8')](),interaction[_0xe9bd('0x15')](_0xe9bd('0x16'),'mailinteraction:update'),controller[_0xe9bd('0x17')]);router[_0xe9bd('0x18')](_0xe9bd('0xb'),auth['isAuthenticated'](),interaction[_0xe9bd('0x15')](_0xe9bd('0x16'),_0xe9bd('0x19')),controller[_0xe9bd('0x1a')]);router['delete'](_0xe9bd('0x11'),auth['isAuthenticated'](),controller[_0xe9bd('0x1b')]);module['exports']=router;
\ No newline at end of file
index e584629..cc0d3e6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfd54=['DATE','ENUM','out','sequelize','exports','BOOLEAN','STRING','TEXT','long'];(function(_0x3aaaa6,_0x2f442d){var _0xba79b=function(_0x45733e){while(--_0x45733e){_0x3aaaa6['push'](_0x3aaaa6['shift']());}};_0xba79b(++_0x2f442d);}(_0xfd54,0x1f2));var _0x4fd5=function(_0x22b4e1,_0x3633c8){_0x22b4e1=_0x22b4e1-0x0;var _0x390189=_0xfd54[_0x22b4e1];return _0x390189;};'use strict';var Sequelize=require(_0x4fd5('0x0'));var iconv=require('iconv');module[_0x4fd5('0x1')]={'closed':{'type':Sequelize[_0x4fd5('0x2')],'defaultValue':![]},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize[_0x4fd5('0x3')]},'inReplyTo':{'type':Sequelize['STRING'](0x1fe)},'to':{'type':Sequelize[_0x4fd5('0x3')]},'cc':{'type':Sequelize[_0x4fd5('0x4')](_0x4fd5('0x5'))},'subject':{'type':Sequelize[_0x4fd5('0x4')]()},'attach':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'read1stAt':{'type':Sequelize[_0x4fd5('0x6')]},'substatus':{'type':Sequelize['STRING'](0x3c)},'substatusAt':{'type':Sequelize[_0x4fd5('0x6')]},'firstMsgDirection':{'type':Sequelize[_0x4fd5('0x7')]('in',_0x4fd5('0x8')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize['DATE']},'lastMsgDirection':{'type':Sequelize[_0x4fd5('0x7')]('in',_0x4fd5('0x8')),'defaultValue':'in','allowNull':![]},'lastMsgBody':{'type':Sequelize[_0x4fd5('0x4')](_0x4fd5('0x5'))},'lastMsgText':{'type':Sequelize['TEXT'](_0x4fd5('0x5'))}};
\ No newline at end of file
+var _0x4278=['ENUM','out','sequelize','iconv','DATE','STRING','TEXT','long','BOOLEAN'];(function(_0x4f9bca,_0x41dac2){var _0xd5b482=function(_0x53a7b0){while(--_0x53a7b0){_0x4f9bca['push'](_0x4f9bca['shift']());}};_0xd5b482(++_0x41dac2);}(_0x4278,0xad));var _0x8427=function(_0x369ca3,_0x45df00){_0x369ca3=_0x369ca3-0x0;var _0x56a39d=_0x4278[_0x369ca3];return _0x56a39d;};'use strict';var Sequelize=require(_0x8427('0x0'));var iconv=require(_0x8427('0x1'));module['exports']={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x8427('0x2')]},'disposition':{'type':Sequelize[_0x8427('0x3')]},'note':{'type':Sequelize['STRING']},'inReplyTo':{'type':Sequelize[_0x8427('0x3')](0x1fe)},'to':{'type':Sequelize['STRING']},'cc':{'type':Sequelize[_0x8427('0x4')](_0x8427('0x5'))},'subject':{'type':Sequelize['TEXT']()},'attach':{'type':Sequelize[_0x8427('0x6')],'defaultValue':![]},'read1stAt':{'type':Sequelize[_0x8427('0x2')]},'substatus':{'type':Sequelize[_0x8427('0x3')](0x3c)},'substatusAt':{'type':Sequelize[_0x8427('0x2')]},'firstMsgDirection':{'type':Sequelize[_0x8427('0x7')]('in',_0x8427('0x8')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x8427('0x2')]},'lastMsgDirection':{'type':Sequelize[_0x8427('0x7')]('in',_0x8427('0x8')),'defaultValue':'in','allowNull':![]},'lastMsgBody':{'type':Sequelize['TEXT']('long')},'lastMsgText':{'type':Sequelize[_0x8427('0x4')]('long')}};
\ No newline at end of file
index 2700158..74440ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3611=['DESC','group','i.id','QueryTypes','SELECT','clone','read','%s\x20=\x200','having','`Messages.count`\x20=\x200','%s\x20>\x200','toString','`Messages.count`\x20>\x200','tag','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','tools_tags','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','sequelize','keyBy','merge','a.key','Account.key','i.createdAt','i.updatedAt','i.closed','i.attach','i.lastMsgAt','i.lastMsgDirection','i.subject','i.disposition','i.substatus','i.to','i.ContactId','i.MailAccountId','i.UserId','Contact.firstName','Contact.lastName','c.phone','Contact.phone','c.mobile','Contact.mobile','c.fax','Contact.fax','GROUP_CONCAT(DISTINCT\x20t.id)','ui.MailInteractionId\x20IN\x20?','groupBy','Setting','findOne','enableEmailPreview','push','all','rows','params','include','find','create','body','describe','addMessage','omit','ids','getMessages','nolimit','MailInteractionId','options','includeAll','findAll','addTags','setTags','Tag','color','emit','removeTags','unix','root','server','files','attachments','tmp','bcc','subject','Attachments','mkdirSync','each','headers','Bcc','basename','build','download','log','err','html-pdf','zip-dir','moment','bluebird','mustache','util','sox','to-csv','lodash','crypto','querystring','papaparse','html-to-text','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/environment','redis','defaults','localhost','socket.io-emitter','./mailInteraction.socket','register','end','json','offset','limit','status','set','apply','save','update','then','destroy','sendStatus','error','stack','name','closed','unreadMessages','MailMessage','count','Users','map','TagIds','Tags','split','forEach','MailInteraction','lastMsgBody','lastMsgText','fromString','catch','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','sort','pick','select','field','from','COUNT(*)','mail_messages','me.MailInteractionId\x20=\x20i.id','where','ui.MailInteractionId','users','u.id\x20=\x20ui.UserId','mail_interactions','left_join','cm_contacts','o.id\x20=\x20i.UserId','mail_accounts','a.id\x20=\x20i.MailAccountId','expr','advancedFilter','parse','createdAt','value','dateStart','day','utc','format','and','isArray','condition','TagId','Messages.count','tableAlias','\x20IN\x20?','c.firstName','\x20LIKE\x20?','c.lastName','c.email','\x20<\x20?','\x20=\x20?','LIKE','\x20>\x20?','filter','isNil','MailAccountId','concat','$gte','$lte','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','null','replace','\x27\x27\x27\x27','i.id\x20LIKE\x20?','c.email\x20LIKE\x20?','join','MATCH\x20(me.plainBody,\x20me.subject)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','order'];(function(_0x162104,_0x52faaf){var _0x2ec540=function(_0x37d38b){while(--_0x37d38b){_0x162104['push'](_0x162104['shift']());}};_0x2ec540(++_0x52faaf);}(_0x3611,0x136));var _0x1361=function(_0x14242b,_0x4b05ba){_0x14242b=_0x14242b-0x0;var _0x411655=_0x3611[_0x14242b];return _0x411655;};'use strict';var pdf=require(_0x1361('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x1361('0x1'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x1361('0x2'));var BPromise=require(_0x1361('0x3'));var Mustache=require(_0x1361('0x4'));var util=require(_0x1361('0x5'));var path=require('path');var sox=require(_0x1361('0x6'));var csv=require(_0x1361('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x1361('0x8'));var squel=require('squel');var crypto=require(_0x1361('0x9'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x1361('0x7'));var querystring=require(_0x1361('0xa'));var Papa=require(_0x1361('0xb'));var htmlToText=require(_0x1361('0xc'));var Redis=require(_0x1361('0xd'));var authService=require(_0x1361('0xe'));var qs=require(_0x1361('0xf'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x1361('0x10'))('api');var utils=require('../../config/utils');var config=require(_0x1361('0x11'));var db=require('../../mysqldb')['db'];config[_0x1361('0x12')]=_[_0x1361('0x13')](config[_0x1361('0x12')],{'host':_0x1361('0x14'),'port':0x18eb});var socket=require(_0x1361('0x15'))(new Redis(config[_0x1361('0x12')]));require(_0x1361('0x16'))[_0x1361('0x17')](socket);function respondWithStatusCode(_0x4a8345,_0x4c33e0){_0x4c33e0=_0x4c33e0||0xcc;return function(_0x286504){if(_0x286504){return _0x4a8345['sendStatus'](_0x4c33e0);}return _0x4a8345['status'](_0x4c33e0)[_0x1361('0x18')]();};}function respondWithResult(_0x18a1fc,_0x31e1c7){_0x31e1c7=_0x31e1c7||0xc8;return function(_0x16b7dc){if(_0x16b7dc){return _0x18a1fc['status'](_0x31e1c7)[_0x1361('0x19')](_0x16b7dc);}};}function respondWithFilteredResult(_0x14f5a2,_0x23dc0b){return function(_0x1d42ae){if(_0x1d42ae){var _0x3c01f1=_0x1d42ae['count'],_0x3cafb4=_0x23dc0b[_0x1361('0x1a')],_0x59c9e7=_0x23dc0b[_0x1361('0x1a')]+_0x23dc0b[_0x1361('0x1b')],_0x7e22e7;if(_0x59c9e7>=_0x3c01f1){_0x59c9e7=_0x3c01f1;_0x7e22e7=0xc8;}else{_0x7e22e7=0xce;}_0x14f5a2[_0x1361('0x1c')](_0x7e22e7);return _0x14f5a2[_0x1361('0x1d')]('Content-Range',_0x3cafb4+'-'+_0x59c9e7+'/'+_0x3c01f1)[_0x1361('0x19')](_0x1d42ae);}return null;};}function patchUpdates(_0x17f576){return function(_0x2f0a93){try{jsonpatch[_0x1361('0x1e')](_0x2f0a93,_0x17f576,!![]);}catch(_0x588ca6){return BPromise['reject'](_0x588ca6);}return _0x2f0a93[_0x1361('0x1f')]();};}function saveUpdates(_0x52bbff,_0x314b77){return function(_0x3bb2fb){if(_0x3bb2fb){return _0x3bb2fb[_0x1361('0x20')](_0x52bbff)[_0x1361('0x21')](function(_0x4406e2){return _0x4406e2;});}return null;};}function removeEntity(_0x5c3c4b,_0x1420e3){return function(_0x461244){if(_0x461244){return _0x461244[_0x1361('0x22')]()[_0x1361('0x21')](function(){_0x5c3c4b['status'](0xcc)[_0x1361('0x18')]();});}};}function handleEntityNotFound(_0x50372c,_0x8c65a6){return function(_0x49219e){if(!_0x49219e){_0x50372c[_0x1361('0x23')](0x194);}return _0x49219e;};}function handleError(_0x24667d,_0x5492eb){_0x5492eb=_0x5492eb||0x1f4;return function(_0x18f787){logger[_0x1361('0x24')](_0x18f787[_0x1361('0x25')]);if(_0x18f787[_0x1361('0x26')]){delete _0x18f787['name'];}_0x24667d[_0x1361('0x1c')](_0x5492eb)['send'](_0x18f787);};}function getInteractionUnreadMessages(_0x51b6be){return new BPromise(function(_0x1cfd3b,_0x2111bf){try{if(_0x51b6be[_0x1361('0x27')]){_0x51b6be[_0x1361('0x28')]=0x0;_0x1cfd3b(_0x51b6be);}else{return db[_0x1361('0x29')][_0x1361('0x2a')]({'where':{'MailInteractionId':_0x51b6be['id'],'direction':'in','read':![]}})[_0x1361('0x21')](function(_0x3fe34a){_0x51b6be[_0x1361('0x28')]=_0x3fe34a;_0x1cfd3b(_0x51b6be);});}}catch(_0x39957b){_0x2111bf(_0x39957b);}});}function getInteractionUsers(_0x398902,_0x4f0829){return new BPromise(function(_0x6abb56,_0x102cb8){try{if(_0x4f0829[_0x398902['id']]){_0x398902[_0x1361('0x2b')]=_[_0x1361('0x2c')](_0x4f0829[_0x398902['id']],function(_0x234311){return{'id':_0x234311['id']};});}}catch(_0x3dc10d){_0x102cb8(_0x3dc10d);}_0x6abb56(_0x398902);});}function getInteractionTags(_0xd2888f,_0x245cb6){return new BPromise(function(_0x26661f,_0x14679e){try{if(_0xd2888f[_0x1361('0x2d')]){_0xd2888f[_0x1361('0x2e')]=[];_0xd2888f[_0x1361('0x2d')][_0x1361('0x2f')](',')[_0x1361('0x30')](function(_0x1b0bbb){_0xd2888f[_0x1361('0x2e')]['push'](_0x245cb6[_0x1b0bbb]);});}delete _0xd2888f[_0x1361('0x2d')];}catch(_0x475b9c){_0x14679e(_0x475b9c);}_0x26661f(_0xd2888f);});}function getLastMessageText(_0x48c423){return new BPromise(function(_0x234be2,_0x766a07){return db[_0x1361('0x31')]['findOne']({'where':{'id':_0x48c423['id']},'attributes':[_0x1361('0x32'),'lastMsgText'],'raw':!![]})[_0x1361('0x21')](function(_0x5b03bf){if(!_0x5b03bf['lastMsgText']){_0x48c423[_0x1361('0x33')]=_['trimStart'](htmlToText[_0x1361('0x34')](_0x5b03bf[_0x1361('0x32')],{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'uppercaseHeadings':![],'noLinkBrackets':!![],'ignoreImage':!![]}));}else{_0x48c423[_0x1361('0x33')]=_0x5b03bf[_0x1361('0x33')];}_0x234be2(_0x48c423);})['catch'](function(_0x395216){_0x766a07(_0x395216);});});}function updateMailInteraction(_0xf622f,_0x496e15,_0x1e494e,_0x5f2198){return new BPromise(function(_0x217b03,_0x509967){return getInteractionUnreadMessages(_0xf622f)['then'](function(_0x309c9a){return getInteractionUsers(_0x309c9a,_0x1e494e);})[_0x1361('0x21')](function(_0x501045){return getInteractionTags(_0x501045,_0x496e15);})[_0x1361('0x21')](function(_0x601b9d){if(_0x5f2198){_0x217b03(getLastMessageText(_0x601b9d));}else{_0x217b03(_0x601b9d);}})[_0x1361('0x35')](function(_0x1b7ee6){_0x509967(_0x1b7ee6);});});}exports[_0x1361('0x36')]=function(_0x2b9edd,_0x4af34a){var _0x22c494={},_0x549c0c={},_0x4f9982={'count':0x0,'rows':[]};var _0x4136c3=db[_0x1361('0x31')][_0x1361('0x37')];_0x549c0c[_0x1361('0x38')]=_[_0x1361('0x39')](_0x4136c3);_0x549c0c['query']=_[_0x1361('0x39')](_0x2b9edd[_0x1361('0x3a')]);_0x549c0c[_0x1361('0x3b')]=_[_0x1361('0x3c')](_0x549c0c['model'],_0x549c0c[_0x1361('0x3a')]);_0x22c494[_0x1361('0x3d')]=_[_0x1361('0x3c')](_0x549c0c['model'],qs[_0x1361('0x3e')](_0x2b9edd[_0x1361('0x3a')]['fields']));_0x22c494['attributes']=_0x22c494['attributes'][_0x1361('0x3f')]?_0x22c494[_0x1361('0x3d')]:_0x549c0c['model'];if(!_0x2b9edd[_0x1361('0x3a')][_0x1361('0x40')]('nolimit')){_0x22c494['limit']=qs[_0x1361('0x1b')](_0x2b9edd[_0x1361('0x3a')][_0x1361('0x1b')]);_0x22c494[_0x1361('0x1a')]=qs[_0x1361('0x1a')](_0x2b9edd[_0x1361('0x3a')][_0x1361('0x1a')]);}_0x22c494['order']=qs['sort'](_0x2b9edd[_0x1361('0x3a')][_0x1361('0x41')]);_0x22c494['where']=qs['filters'](_[_0x1361('0x42')](_0x2b9edd[_0x1361('0x3a')],_0x549c0c[_0x1361('0x3b')]));var _0x2c6011=[];var _0x52e183=squel[_0x1361('0x43')]()[_0x1361('0x44')]('id')['field'](_0x1361('0x26'))[_0x1361('0x44')]('color')[_0x1361('0x45')]('tools_tags');var _0x22d0f3=squel[_0x1361('0x43')]()[_0x1361('0x44')](_0x1361('0x46'))[_0x1361('0x45')](_0x1361('0x47'),'me')['where'](_0x1361('0x48'))[_0x1361('0x49')]('me.direction\x20=\x20\x27in\x27')[_0x1361('0x49')]('me.read\x20=\x20false');var _0x397646=squel['select']()[_0x1361('0x44')]('u.id')['field'](_0x1361('0x4a'))[_0x1361('0x45')]('user_has_mail_interactions','ui')['left_join'](_0x1361('0x4b'),'u',_0x1361('0x4c'));var _0xfcc3d1=squel[_0x1361('0x43')]()[_0x1361('0x45')](_0x1361('0x4d'),'i')[_0x1361('0x4e')](_0x1361('0x4f'),'c','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL')['left_join'](_0x1361('0x4b'),'o',_0x1361('0x50'))[_0x1361('0x4e')](_0x1361('0x51'),'a',_0x1361('0x52'))[_0x1361('0x4e')]('mail_messages','me',_0x1361('0x48'));var _0x4bc062=squel[_0x1361('0x53')]();if(_0x2b9edd[_0x1361('0x3a')][_0x1361('0x54')]){var _0x2cdaa8=JSON[_0x1361('0x55')](_0x2b9edd[_0x1361('0x3a')][_0x1361('0x54')]);_[_0x1361('0x39')](_0x2cdaa8)[_0x1361('0x30')](function(_0x5ec794){var _0x4c6817=_0x2cdaa8[_0x5ec794];if(_0x5ec794===_0x1361('0x56')){var _0x20d3d5=moment(_0x4c6817[_0x1361('0x57')][_0x1361('0x58')])['startOf'](_0x1361('0x59'))[_0x1361('0x5a')]()[_0x1361('0x5b')]();var _0x195ca9=moment(_0x195ca9)[_0x1361('0x5a')]()['endOf'](_0x1361('0x59'))[_0x1361('0x5b')]();_0x4bc062[_0x1361('0x5c')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x20d3d5,_0x195ca9);}else{if(_[_0x1361('0x5d')](_0x4c6817['condition'])){_0x4c6817[_0x1361('0x5e')]['forEach'](function(_0x5554bd){switch(_0x4c6817[_0x1361('0x5e')][_0x1361('0x57')]){case'IS':if(_0x5ec794!==_0x1361('0x5f')&&_0x5ec794!==_0x1361('0x60')){if(_['isArray'](_0x4c6817[_0x1361('0x57')])&&_0x4c6817[_0x1361('0x57')]['length']>0x1){_0x4bc062['and'](_0x4c6817[_0x1361('0x61')]+'.'+_0x5ec794+_0x1361('0x62'),_0x4c6817['value']);}else{_0x4bc062['and'](_0x4c6817['tableAlias']+'.'+_0x5ec794+'\x20=\x20?',_0x4c6817[_0x1361('0x57')][0x0]);}}break;case'=':_0x4bc062[_0x1361('0x5c')](_0x4c6817[_0x1361('0x61')]+'.'+_0x5ec794+'\x20=\x20?',_0x4c6817[_0x1361('0x57')]);break;case'LIKE':if(_0x5ec794==='ContactId'){_0x4bc062['and'](_0x1361('0x63')+_0x1361('0x64'),'%'+_0x4c6817[_0x1361('0x57')]+'%');_0x4bc062['or'](_0x1361('0x65')+_0x1361('0x64'),'%'+_0x4c6817[_0x1361('0x57')]+'%');_0x4bc062['or'](_0x1361('0x66')+'\x20LIKE\x20?','%'+_0x4c6817[_0x1361('0x57')]+'%');}else{_0x4bc062[_0x1361('0x5c')](_0x4c6817[_0x1361('0x61')]+'.'+_0x5ec794+_0x1361('0x64'),'%'+_0x4c6817[_0x1361('0x57')]+'%');}break;case'>':_0x4bc062[_0x1361('0x5c')](_0x4c6817[_0x1361('0x61')]+'.'+_0x5ec794+'\x20>\x20?',_0x4c6817[_0x1361('0x57')]);break;case'<':_0x4bc062[_0x1361('0x5c')](_0x4c6817[_0x1361('0x61')]+'.'+_0x5ec794+_0x1361('0x67'),_0x4c6817[_0x1361('0x57')]);break;}});}else{switch(_0x4c6817[_0x1361('0x5e')][_0x1361('0x57')]){case'IS':if(_0x5ec794!==_0x1361('0x5f')&&_0x5ec794!==_0x1361('0x60')){if(_[_0x1361('0x5d')](_0x4c6817['value'])&&_0x4c6817['value'][_0x1361('0x3f')]>0x1){_0x4bc062[_0x1361('0x5c')](_0x4c6817['tableAlias']+'.'+_0x5ec794+_0x1361('0x62'),_0x4c6817[_0x1361('0x57')]);}else{_0x4bc062[_0x1361('0x5c')](_0x4c6817[_0x1361('0x61')]+'.'+_0x5ec794+_0x1361('0x68'),_0x4c6817[_0x1361('0x57')][0x0]);}}break;case'=':_0x4bc062[_0x1361('0x5c')](_0x4c6817[_0x1361('0x61')]+'.'+_0x5ec794+_0x1361('0x68'),_0x4c6817['value']);break;case _0x1361('0x69'):if(_0x5ec794==='ContactId'){_0x4bc062[_0x1361('0x5c')](_0x1361('0x63')+_0x1361('0x64'),'%'+_0x4c6817[_0x1361('0x57')]+'%');_0x4bc062['or'](_0x1361('0x65')+'\x20LIKE\x20?','%'+_0x4c6817[_0x1361('0x57')]+'%');_0x4bc062['or'](_0x1361('0x66')+_0x1361('0x64'),'%'+_0x4c6817[_0x1361('0x57')]+'%');}else{_0x4bc062['and'](_0x4c6817[_0x1361('0x61')]+'.'+_0x5ec794+_0x1361('0x64'),'%'+_0x4c6817['value']+'%');}break;case'>':_0x4bc062['and'](_0x4c6817['tableAlias']+'.'+_0x5ec794+_0x1361('0x6a'),_0x4c6817['value']);break;case'<':_0x4bc062[_0x1361('0x5c')](_0x4c6817[_0x1361('0x61')]+'.'+_0x5ec794+'\x20<\x20?',_0x4c6817[_0x1361('0x57')]);break;}}}});}else{var _0x75ce42=_(Object[_0x1361('0x39')](_0x2b9edd[_0x1361('0x3a')]))['map'](function(_0xb3ead5){return _0x4136c3[_0x1361('0x40')](_0xb3ead5)?_0xb3ead5:undefined;})[_0x1361('0x6b')](function(_0x1c1283){return!_[_0x1361('0x6c')](_0x1c1283);})[_0x1361('0x57')]();if(!_['isEmpty'](_0x75ce42)){_0x75ce42[_0x1361('0x30')](function(_0x5904c1){if(_0x5904c1===_0x1361('0x6d')){_0xfcc3d1[_0x1361('0x49')]('i.MailAccountId\x20IN\x20?',[][_0x1361('0x6e')](_0x2b9edd[_0x1361('0x3a')][_0x5904c1]));}else if(_0x5904c1===_0x1361('0x56')){var _0x2d7681=JSON[_0x1361('0x55')](_0x2b9edd[_0x1361('0x3a')][_0x5904c1])[_0x1361('0x6f')];var _0x4ddaaf=JSON[_0x1361('0x55')](_0x2b9edd['query'][_0x5904c1])[_0x1361('0x70')];_0xfcc3d1['where'](_0x1361('0x71'),_0x2d7681,_0x4ddaaf);}else{if(_0x2b9edd['query'][_0x5904c1]===_0x1361('0x72')){_0xfcc3d1['where']('i.'+_0x5904c1+'\x20IS\x20NULL');}else{_0xfcc3d1[_0x1361('0x49')]('i.'+_0x5904c1+_0x1361('0x68'),_0x2b9edd[_0x1361('0x3a')][_0x5904c1]);}}});}if(_0x2b9edd[_0x1361('0x3a')][_0x1361('0x6b')]){var _0x4f953a=_0x2b9edd['query']['filter'][_0x1361('0x73')]('\x5c','\x5c\x5c')[_0x1361('0x73')]('\x27\x27',_0x1361('0x74'));if(qs['isNumeric'](_0x4f953a)){_0x4bc062['or'](_0x1361('0x75'),_0x4f953a+'%');}else if(qs['isEmail'](_0x4f953a)){_0x4bc062['or'](_0x1361('0x76'),_0x4f953a+'%');}else{var _0x2e8c6c=[];_0x4f953a[_0x1361('0x2f')]('\x20')[_0x1361('0x30')](function(_0x2e508d){_0x2e8c6c['push']('+'+_0x2e508d['toString']());});var _0x1f7091=_0x2e8c6c[_0x1361('0x77')]('\x20');_0x4bc062['or']('MATCH\x20(i.to,\x20i.subject)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)',_0x1f7091)['or'](_0x1361('0x78'),_0x1f7091);}}}_0xfcc3d1[_0x1361('0x49')](_0x4bc062);if(_0x22c494['order']){_0x22c494[_0x1361('0x79')]['forEach'](function(_0x5b9ee2){_0xfcc3d1[_0x1361('0x79')]('i.'+_0x5b9ee2[0x0],_0x5b9ee2[0x1]===_0x1361('0x7a')?![]:!![]);});}_0xfcc3d1[_0x1361('0x7b')](_0x1361('0x7c'));var _0x550842={'type':db['Sequelize'][_0x1361('0x7d')][_0x1361('0x7e')],'raw':!![]};var _0x18fc7b=_0xfcc3d1[_0x1361('0x7f')]()[_0x1361('0x44')](_0x1361('0x46'));if(!_0x2b9edd[_0x1361('0x3a')][_0x1361('0x54')]){if(_0x2b9edd[_0x1361('0x3a')][_0x1361('0x80')]){if(_0x2b9edd[_0x1361('0x3a')][_0x1361('0x80')]==0x1){_0x18fc7b[_0x1361('0x49')](util[_0x1361('0x5b')](_0x1361('0x81'),_0x22d0f3['toString']()));_0xfcc3d1[_0x1361('0x82')](_0x1361('0x83'));}else{_0x18fc7b['where'](util[_0x1361('0x5b')](_0x1361('0x84'),_0x22d0f3[_0x1361('0x85')]()));_0xfcc3d1[_0x1361('0x82')](_0x1361('0x86'));}}if(_0x2b9edd[_0x1361('0x3a')][_0x1361('0x87')]){var _0x3e7b07=_[_0x1361('0x5d')](_0x2b9edd[_0x1361('0x3a')][_0x1361('0x87')])?_0x2b9edd['query'][_0x1361('0x87')]:new Array(_0x2b9edd['query'][_0x1361('0x87')]);var _0x1b0ae9=squel[_0x1361('0x53')]();_0x3e7b07[_0x1361('0x30')](function(_0x3a950d){_0x1b0ae9['or'](_0x1361('0x88'),'%,'+_0x3a950d+',%');});_0xfcc3d1[_0x1361('0x82')](_0x1b0ae9);_0x18fc7b['left_join'](_0x1361('0x89'),'it',_0x1361('0x8a'));_0x18fc7b[_0x1361('0x4e')](_0x1361('0x8b'),'t',_0x1361('0x8c'));_0x18fc7b[_0x1361('0x49')](_0x1361('0x8d'),_0x3e7b07);}}else{var _0x2cdaa8=JSON[_0x1361('0x55')](_0x2b9edd['query'][_0x1361('0x54')]);_['keys'](_0x2cdaa8)[_0x1361('0x30')](function(_0x53444a){var _0x10687b=_0x2cdaa8[_0x53444a];if(_0x53444a===_0x1361('0x5f')){var _0x141d68=_0x10687b['value'];var _0x27fd8d=squel[_0x1361('0x53')]();_0x141d68['forEach'](function(_0x56fd07){_0x27fd8d['or'](_0x1361('0x88'),'%,'+_0x56fd07+',%');});_0xfcc3d1[_0x1361('0x82')](_0x27fd8d);_0x18fc7b[_0x1361('0x4e')](_0x1361('0x89'),'it','it.MailInteractionId\x20=\x20i.id');_0x18fc7b['left_join'](_0x1361('0x8b'),'t',_0x1361('0x8c'));_0x18fc7b[_0x1361('0x49')](_0x1361('0x8d'),_0x141d68);}else if(_0x53444a==='Messages.count'){if(_0x10687b[_0x1361('0x57')]['length']===0x1){if(_0x10687b['value'][0x0]===0x1){_0x18fc7b[_0x1361('0x49')](util[_0x1361('0x5b')](_0x1361('0x81'),_0x22d0f3['toString']()));_0xfcc3d1['having']('`Messages.count`\x20=\x200');}else{_0x18fc7b[_0x1361('0x49')](util['format'](_0x1361('0x84'),_0x22d0f3[_0x1361('0x85')]()));_0xfcc3d1[_0x1361('0x82')](_0x1361('0x86'));}}}});}db[_0x1361('0x8e')][_0x1361('0x3a')](_0x18fc7b['toString'](),_0x550842)['then'](function(_0x8dd7fc){_0x4f9982[_0x1361('0x2a')]=_0x8dd7fc[_0x1361('0x3f')];if(_0x4f9982['count']===0x0)return[];return db['sequelize'][_0x1361('0x3a')](_0x52e183[_0x1361('0x85')](),_0x550842)[_0x1361('0x21')](function(_0x155823){_0x2c6011=_[_0x1361('0x8f')](_0x155823,'id');_0x550842=_[_0x1361('0x90')](_0x550842,{'model':db['MailInteraction'],'mapToModel':!![],'raw':!![],'nest':!![]});_0xfcc3d1[_0x1361('0x44')](_0x1361('0x91'),_0x1361('0x92'));_0xfcc3d1[_0x1361('0x44')]('i.id');_0xfcc3d1['field'](_0x1361('0x93'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x94'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x95'));_0xfcc3d1['field']('i.closedAt');_0xfcc3d1[_0x1361('0x44')](_0x1361('0x96'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x97'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x98'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x99'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x9a'));_0xfcc3d1['field'](_0x1361('0x9b'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x9c'));_0xfcc3d1['field'](_0x1361('0x9d'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x9e'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x9f'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x63'),_0x1361('0xa0'));_0xfcc3d1['field'](_0x1361('0x65'),_0x1361('0xa1'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0x66'),'Contact.email');_0xfcc3d1[_0x1361('0x44')](_0x1361('0xa2'),_0x1361('0xa3'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0xa4'),_0x1361('0xa5'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0xa6'),_0x1361('0xa7'));_0xfcc3d1[_0x1361('0x44')](_0x1361('0xa8'),_0x1361('0x2d'));_0xfcc3d1['left_join'](_0x1361('0x89'),'it',_0x1361('0x8a'));_0xfcc3d1[_0x1361('0x4e')](_0x1361('0x8b'),'t',_0x1361('0x8c'));_0xfcc3d1[_0x1361('0x1b')](_0x22c494[_0x1361('0x1b')]);_0xfcc3d1[_0x1361('0x1a')](_0x22c494['offset']);return db[_0x1361('0x8e')][_0x1361('0x3a')](_0xfcc3d1[_0x1361('0x85')](),_0x550842);})[_0x1361('0x21')](function(_0x446c63){_0x397646[_0x1361('0x49')](_0x1361('0xa9'),_['map'](_0x446c63,'id'));return db['sequelize'][_0x1361('0x3a')](_0x397646[_0x1361('0x85')](),_0x550842)[_0x1361('0x21')](function(_0x49be0a){var _0x2570bf=_[_0x1361('0xaa')](_0x49be0a,'MailInteractionId');var _0x521abb=[];return db[_0x1361('0xab')][_0x1361('0xac')]({'attributes':[_0x1361('0xad')],'raw':!![]})[_0x1361('0x21')](function(_0x415e31){var _0x59c0b0=_0x415e31[_0x1361('0xad')];_0x446c63[_0x1361('0x30')](function(_0x17930d){_0x521abb[_0x1361('0xae')](updateMailInteraction(_0x17930d,_0x2c6011,_0x2570bf,_0x59c0b0));});return BPromise[_0x1361('0xaf')](_0x521abb);});});});})['then'](function(_0x1ae8e1){_0x4f9982[_0x1361('0xb0')]=_0x1ae8e1;return _0x4f9982;})['then'](respondWithFilteredResult(_0x4af34a,_0x22c494))[_0x1361('0x35')](handleError(_0x4af34a,null));};exports['show']=function(_0x3e114a,_0x5d820a){var _0x5bfbf3={'raw':![],'where':{'id':_0x3e114a[_0x1361('0xb1')]['id']}},_0x46d4c9={};_0x46d4c9['model']=_['keys'](db[_0x1361('0x31')][_0x1361('0x37')]);_0x46d4c9[_0x1361('0x3a')]=_[_0x1361('0x39')](_0x3e114a[_0x1361('0x3a')]);_0x46d4c9['filters']=_[_0x1361('0x3c')](_0x46d4c9['model'],_0x46d4c9['query']);_0x5bfbf3[_0x1361('0x3d')]=_[_0x1361('0x3c')](_0x46d4c9[_0x1361('0x38')],qs[_0x1361('0x3e')](_0x3e114a['query'][_0x1361('0x3e')]));_0x5bfbf3[_0x1361('0x3d')]=_0x5bfbf3[_0x1361('0x3d')][_0x1361('0x3f')]?_0x5bfbf3['attributes']:_0x46d4c9[_0x1361('0x38')];if(_0x3e114a['query']['includeAll']){_0x5bfbf3[_0x1361('0xb2')]=[{'all':!![]}];}_0x5bfbf3=_[_0x1361('0x90')]({},_0x5bfbf3,_0x3e114a['options']);return db[_0x1361('0x31')][_0x1361('0xb3')](_0x5bfbf3)[_0x1361('0x21')](handleEntityNotFound(_0x5d820a,null))[_0x1361('0x21')](respondWithResult(_0x5d820a,null))[_0x1361('0x35')](handleError(_0x5d820a,null));};exports['create']=function(_0xbf7297,_0x514224){return db[_0x1361('0x31')][_0x1361('0xb4')](_0xbf7297[_0x1361('0xb5')],{})[_0x1361('0x21')](respondWithResult(_0x514224,0xc9))[_0x1361('0x35')](handleError(_0x514224,null));};exports[_0x1361('0x20')]=function(_0x3514c3,_0x24882c){if(_0x3514c3[_0x1361('0xb5')]['id']){delete _0x3514c3[_0x1361('0xb5')]['id'];}return db[_0x1361('0x31')][_0x1361('0xb3')]({'where':{'id':_0x3514c3[_0x1361('0xb1')]['id']}})[_0x1361('0x21')](handleEntityNotFound(_0x24882c,null))[_0x1361('0x21')](saveUpdates(_0x3514c3[_0x1361('0xb5')],null))[_0x1361('0x21')](respondWithResult(_0x24882c,null))[_0x1361('0x35')](handleError(_0x24882c,null));};exports[_0x1361('0x22')]=function(_0x1fcf9b,_0x1bb978){return db['MailInteraction']['find']({'where':{'id':_0x1fcf9b[_0x1361('0xb1')]['id']}})['then'](handleEntityNotFound(_0x1bb978,null))[_0x1361('0x21')](removeEntity(_0x1bb978,null))[_0x1361('0x35')](handleError(_0x1bb978,null));};exports['describe']=function(_0x4272f2,_0xa4ea8a){return db[_0x1361('0x31')][_0x1361('0xb6')]()[_0x1361('0x21')](respondWithResult(_0xa4ea8a,null))[_0x1361('0x35')](handleError(_0xa4ea8a,null));};exports[_0x1361('0xb7')]=function(_0x3c54ac,_0x2b050c,_0x59c5a9){return db[_0x1361('0x29')][_0x1361('0xb3')]({'where':{'id':_0x3c54ac[_0x1361('0xb1')]['id']}})[_0x1361('0x21')](handleEntityNotFound(_0x2b050c,null))[_0x1361('0x21')](function(_0x40bdea){if(_0x40bdea){return _0x40bdea['addMessage'](_0x3c54ac[_0x1361('0xb5')]['ids'],_[_0x1361('0xb8')](_0x3c54ac[_0x1361('0xb5')],[_0x1361('0xb9'),'id'])||{});}})[_0x1361('0x21')](respondWithResult(_0x2b050c,null))['catch'](handleError(_0x2b050c,null));};exports[_0x1361('0xba')]=function(_0x17a6a3,_0x5ad80c,_0x125815){var _0x48447e={'raw':![],'where':{}};var _0x54daad={};var _0x45adc4={'count':0x0,'rows':[]};return db[_0x1361('0x31')][_0x1361('0xac')]({'where':{'id':_0x17a6a3['params']['id']}})[_0x1361('0x21')](handleEntityNotFound(_0x5ad80c,null))['then'](function(_0x43cfe0){if(_0x43cfe0){_0x54daad['model']=_[_0x1361('0x39')](db[_0x1361('0x29')][_0x1361('0x37')]);_0x54daad[_0x1361('0x3a')]=_[_0x1361('0x39')](_0x17a6a3[_0x1361('0x3a')]);_0x54daad[_0x1361('0x3b')]=_[_0x1361('0x3c')](_0x54daad['model'],_0x54daad[_0x1361('0x3a')]);_0x48447e[_0x1361('0x3d')]=_[_0x1361('0x3c')](_0x54daad[_0x1361('0x38')],qs['fields'](_0x17a6a3[_0x1361('0x3a')]['fields']));_0x48447e['attributes']=_0x48447e['attributes'][_0x1361('0x3f')]?_0x48447e[_0x1361('0x3d')]:_0x54daad[_0x1361('0x38')];if(!_0x17a6a3[_0x1361('0x3a')][_0x1361('0x40')](_0x1361('0xbb'))){_0x48447e[_0x1361('0x1b')]=qs[_0x1361('0x1b')](_0x17a6a3[_0x1361('0x3a')][_0x1361('0x1b')]);_0x48447e[_0x1361('0x1a')]=qs[_0x1361('0x1a')](_0x17a6a3['query'][_0x1361('0x1a')]);}_0x48447e[_0x1361('0x79')]=qs[_0x1361('0x41')](_0x17a6a3[_0x1361('0x3a')][_0x1361('0x41')]);_0x48447e[_0x1361('0x49')]=qs[_0x1361('0x3b')](_[_0x1361('0x42')](_0x17a6a3[_0x1361('0x3a')],_0x54daad[_0x1361('0x3b')]));_0x48447e[_0x1361('0x49')][_0x1361('0xbc')]=_0x43cfe0['id'];if(_0x17a6a3[_0x1361('0x3a')][_0x1361('0x6b')]){_0x48447e[_0x1361('0x49')]=_[_0x1361('0x90')](_0x48447e[_0x1361('0x49')],{'$or':_[_0x1361('0x2c')](_0x48447e[_0x1361('0x3d')],function(_0x4d19cf){var _0x40aa49={};_0x40aa49[_0x4d19cf]={'$like':'%'+_0x17a6a3[_0x1361('0x3a')]['filter']+'%'};return _0x40aa49;})});}if(_0x17a6a3[_0x1361('0x3a')][_0x1361('0x6f')]){var _0x47f6a0=_0x17a6a3[_0x1361('0x3a')][_0x1361('0x6f')][_0x1361('0x2f')](',');var _0x29f6c1={};_0x29f6c1[_0x47f6a0[0x0]]={'$gte':moment(_0x47f6a0[0x1])[_0x1361('0x5b')]('YYYY-MM-DD\x20HH:mm:ss')};_0x48447e[_0x1361('0x49')]=_['merge'](_0x48447e[_0x1361('0x49')],_0x29f6c1);}_0x48447e=_[_0x1361('0x90')]({},_0x48447e,_0x17a6a3[_0x1361('0xbd')]);return db[_0x1361('0x29')][_0x1361('0x2a')]({'where':_0x48447e[_0x1361('0x49')]})[_0x1361('0x21')](function(_0xdae0e2){_0x45adc4['count']=_0xdae0e2;if(_0x17a6a3[_0x1361('0x3a')][_0x1361('0xbe')]){_0x48447e[_0x1361('0xb2')]=[{'all':!![]}];}return db['MailMessage'][_0x1361('0xbf')](_0x48447e);})[_0x1361('0x21')](function(_0x42f238){_0x45adc4[_0x1361('0xb0')]=_0x42f238;return _0x45adc4;});}})[_0x1361('0x21')](respondWithFilteredResult(_0x5ad80c,_0x48447e))['catch'](handleError(_0x5ad80c,null));};exports[_0x1361('0xc0')]=function(_0x16adfe,_0x4c314d,_0x34357d){return db[_0x1361('0x31')][_0x1361('0xb3')]({'where':{'id':_0x16adfe[_0x1361('0xb1')]['id']}})[_0x1361('0x21')](handleEntityNotFound(_0x4c314d,null))['then'](function(_0x4bf2be){if(_0x4bf2be){return _0x4bf2be[_0x1361('0xc1')](_0x16adfe[_0x1361('0xb5')]['ids'],_[_0x1361('0xb8')](_0x16adfe['body'],[_0x1361('0xb9'),'id'])||{})['spread'](function(){return db[_0x1361('0xc2')][_0x1361('0xbf')]({'attributes':['id','name',_0x1361('0xc3')],'where':{'id':_0x16adfe[_0x1361('0xb5')][_0x1361('0xb9')]}});})[_0x1361('0x21')](function(_0x3f38b7){socket[_0x1361('0xc4')]('mailInteractionTags:save',{'id':Number(_0x16adfe[_0x1361('0xb1')]['id']),'tags':_0x3f38b7||[]});return{'id':Number(_0x16adfe['params']['id']),'tags':_0x3f38b7||[]};});}})[_0x1361('0x21')](respondWithResult(_0x4c314d,null))['catch'](handleError(_0x4c314d,null));};exports[_0x1361('0xc5')]=function(_0x4ffd19,_0x2b8113,_0x9f5345){return db['MailInteraction']['find']({'where':{'id':_0x4ffd19['params']['id']}})[_0x1361('0x21')](handleEntityNotFound(_0x2b8113,null))[_0x1361('0x21')](function(_0x5b0a16){if(_0x5b0a16){return _0x5b0a16[_0x1361('0xc5')](_0x4ffd19[_0x1361('0x3a')]['ids']);}})['then'](respondWithStatusCode(_0x2b8113,null))['catch'](handleError(_0x2b8113,null));};exports['download']=function(_0x1d9f8c,_0x6e1dc5){var _0x15793a=moment()[_0x1361('0xc6')]()[_0x1361('0x85')]();var _0xb632bb=path[_0x1361('0x77')](config[_0x1361('0xc7')],_0x1361('0xc8'),_0x1361('0xc9'),_0x1361('0xca'));var _0x772c19=path[_0x1361('0x77')](config[_0x1361('0xc7')],_0x1361('0xc8'),_0x1361('0xc9'),_0x1361('0xcb'));var _0x12c7b6=path['join'](_0x772c19,_0x15793a);var _0x1ffb7e=util[_0x1361('0x5b')]('interaction-%s.zip',_0x15793a);var _0x868a9=path[_0x1361('0x77')](_0x772c19,_0x1ffb7e);var _0x137864=![];return db[_0x1361('0x31')]['find']({'where':{'id':_0x1d9f8c[_0x1361('0xb1')]['id']}})[_0x1361('0x21')](handleEntityNotFound(_0x6e1dc5,null))[_0x1361('0x21')](function(_0x2e3566){if(_0x2e3566){return _0x2e3566['getMessages']({'attributes':['id',_0x1361('0xb5'),_0x1361('0x45'),'to','cc',_0x1361('0xcc'),_0x1361('0xcd'),_0x1361('0x56')],'where':{'secret':![]},'include':_0x1d9f8c['query']['attachments']?[{'model':db['Attachment'],'as':_0x1361('0xce')}]:undefined,'order':qs[_0x1361('0x41')]('id')});}return[];})[_0x1361('0x21')](function(_0x450a2d){_0x137864=_0x450a2d[_0x1361('0x3f')];if(_0x450a2d[_0x1361('0x3f')]){fs[_0x1361('0xcf')](_0x12c7b6);return BPromise[_0x1361('0xd0')](_0x450a2d,function(_0x494470,_0x432abe){var _0x20d722=_0x494470;var _0x5af1b1={'from':_0x20d722[_0x1361('0x45')],'to':_0x20d722['to'],'subject':_0x20d722[_0x1361('0xcd')],'html':_0x20d722[_0x1361('0xb5')],'headers':{'Date':moment(_0x20d722[_0x1361('0x56')])[_0x1361('0x5b')]('ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ')},'attachments':[]};if(_0x494470['cc']){_0x5af1b1[_0x1361('0xd1')]['Cc']=_0x494470['cc'];}if(_0x494470[_0x1361('0xcc')]){_0x5af1b1[_0x1361('0xd1')][_0x1361('0xd2')]=_0x494470[_0x1361('0xcc')];}return new BPromise(function(_0x309f46,_0x374e1d){if(_0x494470[_0x1361('0xce')]){for(var _0x242771=0x0;_0x242771<_0x494470[_0x1361('0xce')][_0x1361('0x3f')];_0x242771++){var _0x536bf6=_0x494470['Attachments'][_0x242771];var _0xe5af48=path[_0x1361('0x77')](_0xb632bb,_0x536bf6[_0x1361('0xd3')]);if(fs['existsSync'](_0xe5af48)){_0x5af1b1[_0x1361('0xca')][_0x1361('0xae')]({'name':_0x536bf6[_0x1361('0x26')],'contentType':_0x536bf6['type'],'data':fs['readFileSync'](_0xe5af48)});}}}emlformat[_0x1361('0xd4')](_0x5af1b1,function(_0x501df2,_0x2315e4){if(_0x501df2)return _0x374e1d(_0x501df2);fs['writeFileSync'](path['join'](_0x12c7b6,util[_0x1361('0x5b')]('message%d.eml',_0x432abe)),_0x2315e4);return _0x309f46(_0x2315e4);});});});}})[_0x1361('0x21')](function(){if(_0x137864){return new BPromise(function(_0x184f91,_0x3f2e01){zipdir(_0x12c7b6,{'saveTo':_0x868a9},function(_0x3ba4ce,_0x14ef51){if(_0x3ba4ce)return _0x3f2e01(_0x3ba4ce);return _0x184f91(_0x14ef51);});});}})[_0x1361('0x21')](function(){if(_0x137864){return new BPromise(function(_0x122546,_0x234e24){rimraf(_0x12c7b6,function(_0x1ee52c){if(_0x1ee52c)_0x234e24(_0x1ee52c);return _0x122546();});});}})['then'](function(){if(_0x137864){return _0x6e1dc5[_0x1361('0xd5')](_0x868a9,_0x1ffb7e,function(_0x409f42){if(_0x409f42){console[_0x1361('0xd6')](_0x1361('0xd7'),_0x409f42);}else{fs['unlinkSync'](_0x868a9);}});}else{return _0x6e1dc5[_0x1361('0x23')](0xc8);}})['catch'](handleError(_0x6e1dc5,null));};
\ No newline at end of file
+var _0xb43b=['path','ejs','squel','crypto','jsforce','desk.js','to-csv','papaparse','html-to-text','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','redis','localhost','./mailInteraction.socket','end','status','count','offset','set','Content-Range','json','save','then','sendStatus','stack','name','send','Users','split','Tags','push','MailInteraction','findOne','lastMsgBody','lastMsgText','trimStart','fromString','catch','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','limit','order','sort','where','pick','select','field','color','from','tools_tags','me.direction\x20=\x20\x27in\x27','me.read\x20=\x20false','u.id','ui.MailInteractionId','user_has_mail_interactions','left_join','users','u.id\x20=\x20ui.UserId','cm_contacts','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','o.id\x20=\x20i.UserId','mail_accounts','a.id\x20=\x20i.MailAccountId','mail_messages','me.MailInteractionId\x20=\x20i.id\x20AND\x20me.direction\x20=\x20\x27in\x27\x20AND\x20me.read\x20=\x20false','advancedFilter','parse','forEach','createdAt','value','dateStart','startOf','day','utc','format','and','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','isArray','condition','TagId','unreadMessages','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','ContactId','c.firstName','\x20LIKE\x20?','\x20<\x20?','length','c.lastName','map','filter','isNil','isEmpty','i.MailAccountId\x20IN\x20?','concat','$gte','$lte','null','\x20IS\x20NULL','replace','\x27\x27\x27\x27','isNumeric','toString','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','COUNT(*)','COUNT(me.id)','read','having','`unreadMessages`\x20=\x200','`unreadMessages`\x20>\x200','tag','expr','mail_interaction_has_tags','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','sequelize','keyBy','merge','a.key','Account.key','i.createdAt','i.updatedAt','i.closed','i.closedAt','i.attach','i.lastMsgDirection','i.substatus','i.to','i.ContactId','i.MailAccountId','i.UserId','Contact.firstName','Contact.lastName','c.email','Contact.email','c.phone','Contact.phone','c.mobile','Contact.mobile','Contact.fax','TagIds','it.MailInteractionId\x20=\x20i.id','ui.MailInteractionId\x20IN\x20?','groupBy','MailInteractionId','enableEmailPreview','all','rows','show','params','includeAll','include','options','create','body','find','destroy','describe','addMessage','omit','ids','getMessages','MailMessage','nolimit','YYYY-MM-DD\x20HH:mm:ss','Tag','findAll','emit','mailInteractionTags:save','removeTags','download','unix','join','server','files','attachments','interaction-%s.zip','subject','Attachment','Attachments','mkdirSync','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','bcc','Bcc','basename','build','writeFileSync','message%d.eml','unlinkSync','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util'];(function(_0x48f648,_0x9f4be7){var _0x4fce44=function(_0x526231){while(--_0x526231){_0x48f648['push'](_0x48f648['shift']());}};_0x4fce44(++_0x9f4be7);}(_0xb43b,0x1b2));var _0xbb43=function(_0x1153c4,_0x3a4562){_0x1153c4=_0x1153c4-0x0;var _0x47c38c=_0xb43b[_0x1153c4];return _0x47c38c;};'use strict';var pdf=require(_0xbb43('0x0'));var emlformat=require(_0xbb43('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xbb43('0x2'));var jsonpatch=require(_0xbb43('0x3'));var rp=require(_0xbb43('0x4'));var moment=require('moment');var BPromise=require(_0xbb43('0x5'));var Mustache=require(_0xbb43('0x6'));var util=require(_0xbb43('0x7'));var path=require(_0xbb43('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xbb43('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0xbb43('0xa'));var crypto=require(_0xbb43('0xb'));var jsforce=require(_0xbb43('0xc'));var deskjs=require(_0xbb43('0xd'));var toCsv=require(_0xbb43('0xe'));var querystring=require('querystring');var Papa=require(_0xbb43('0xf'));var htmlToText=require(_0xbb43('0x10'));var Redis=require('ioredis');var authService=require(_0xbb43('0x11'));var qs=require(_0xbb43('0x12'));var hardwareService=require(_0xbb43('0x13'));var logger=require(_0xbb43('0x14'))(_0xbb43('0x15'));var utils=require(_0xbb43('0x16'));var config=require('../../config/environment');var db=require(_0xbb43('0x17'))['db'];config[_0xbb43('0x18')]=_['defaults'](config['redis'],{'host':_0xbb43('0x19'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0xbb43('0x1a'))['register'](socket);function respondWithStatusCode(_0x68d45d,_0x43021d){_0x43021d=_0x43021d||0xcc;return function(_0x55926f){if(_0x55926f){return _0x68d45d['sendStatus'](_0x43021d);}return _0x68d45d['status'](_0x43021d)[_0xbb43('0x1b')]();};}function respondWithResult(_0x2abce0,_0x57bd1d){_0x57bd1d=_0x57bd1d||0xc8;return function(_0x526330){if(_0x526330){return _0x2abce0[_0xbb43('0x1c')](_0x57bd1d)['json'](_0x526330);}};}function respondWithFilteredResult(_0x5923dc,_0x2b0797){return function(_0x8242ab){if(_0x8242ab){var _0x2e3b43=_0x8242ab[_0xbb43('0x1d')],_0x55dd73=_0x2b0797[_0xbb43('0x1e')],_0x1c16d7=_0x2b0797['offset']+_0x2b0797['limit'],_0x4f28b8;if(_0x1c16d7>=_0x2e3b43){_0x1c16d7=_0x2e3b43;_0x4f28b8=0xc8;}else{_0x4f28b8=0xce;}_0x5923dc[_0xbb43('0x1c')](_0x4f28b8);return _0x5923dc[_0xbb43('0x1f')](_0xbb43('0x20'),_0x55dd73+'-'+_0x1c16d7+'/'+_0x2e3b43)[_0xbb43('0x21')](_0x8242ab);}return null;};}function patchUpdates(_0x5bcce7){return function(_0x40a650){try{jsonpatch['apply'](_0x40a650,_0x5bcce7,!![]);}catch(_0x3a257d){return BPromise['reject'](_0x3a257d);}return _0x40a650[_0xbb43('0x22')]();};}function saveUpdates(_0x565256,_0x3f323e){return function(_0x451cbd){if(_0x451cbd){return _0x451cbd['update'](_0x565256)[_0xbb43('0x23')](function(_0x4dfb7f){return _0x4dfb7f;});}return null;};}function removeEntity(_0xf24e60,_0x298ce2){return function(_0x16384e){if(_0x16384e){return _0x16384e['destroy']()['then'](function(){_0xf24e60['status'](0xcc)[_0xbb43('0x1b')]();});}};}function handleEntityNotFound(_0x32d7f0,_0x5d8310){return function(_0x3b3083){if(!_0x3b3083){_0x32d7f0[_0xbb43('0x24')](0x194);}return _0x3b3083;};}function handleError(_0x226827,_0x3874fb){_0x3874fb=_0x3874fb||0x1f4;return function(_0x4ed43f){logger['error'](_0x4ed43f[_0xbb43('0x25')]);if(_0x4ed43f[_0xbb43('0x26')]){delete _0x4ed43f[_0xbb43('0x26')];}_0x226827[_0xbb43('0x1c')](_0x3874fb)[_0xbb43('0x27')](_0x4ed43f);};}function getInteractionUsers(_0x40b04b,_0x21d386){return new BPromise(function(_0x473828,_0x539730){try{if(_0x21d386[_0x40b04b['id']]){_0x40b04b[_0xbb43('0x28')]=_['map'](_0x21d386[_0x40b04b['id']],function(_0x31fbc8){return{'id':_0x31fbc8['id']};});}}catch(_0x436fd5){_0x539730(_0x436fd5);}_0x473828(_0x40b04b);});}function getInteractionTags(_0x34f5b2,_0x1880cd){return new BPromise(function(_0x555b99,_0x157d62){try{if(_0x34f5b2['TagIds']){_0x34f5b2['Tags']=[];_0x34f5b2['TagIds'][_0xbb43('0x29')](',')['forEach'](function(_0xa7e144){_0x34f5b2[_0xbb43('0x2a')][_0xbb43('0x2b')](_0x1880cd[_0xa7e144]);});}delete _0x34f5b2['TagIds'];}catch(_0x205011){_0x157d62(_0x205011);}_0x555b99(_0x34f5b2);});}function getLastMessageText(_0x1bdf91){return new BPromise(function(_0x46650c,_0xd987fa){return db[_0xbb43('0x2c')][_0xbb43('0x2d')]({'where':{'id':_0x1bdf91['id']},'attributes':[_0xbb43('0x2e'),_0xbb43('0x2f')],'raw':!![]})['then'](function(_0x2109aa){if(!_0x2109aa[_0xbb43('0x2f')]){_0x1bdf91[_0xbb43('0x2f')]=_[_0xbb43('0x30')](htmlToText[_0xbb43('0x31')](_0x2109aa[_0xbb43('0x2e')],{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'uppercaseHeadings':![],'noLinkBrackets':!![],'ignoreImage':!![]}));}else{_0x1bdf91[_0xbb43('0x2f')]=_0x2109aa[_0xbb43('0x2f')];}_0x46650c(_0x1bdf91);})[_0xbb43('0x32')](function(_0x57105c){_0xd987fa(_0x57105c);});});}function updateMailInteraction(_0x21346a,_0x18debb,_0x2b87c7,_0x33f45c){return new BPromise(function(_0x39062a,_0x405f36){return getInteractionUsers(_0x21346a,_0x2b87c7)['then'](function(_0x39cbd7){return getInteractionTags(_0x39cbd7,_0x18debb);})[_0xbb43('0x23')](function(_0x52a694){if(_0x33f45c){_0x39062a(getLastMessageText(_0x52a694));}else{_0x39062a(_0x52a694);}})[_0xbb43('0x32')](function(_0x2c9a7c){_0x405f36(_0x2c9a7c);});});}exports[_0xbb43('0x33')]=function(_0x5374a2,_0x5f4601){var _0x5833bb={},_0x40df31={},_0x26915a={'count':0x0,'rows':[]};var _0x4a95c3=db['MailInteraction'][_0xbb43('0x34')];_0x40df31[_0xbb43('0x35')]=_[_0xbb43('0x36')](_0x4a95c3);_0x40df31[_0xbb43('0x37')]=_[_0xbb43('0x36')](_0x5374a2['query']);_0x40df31[_0xbb43('0x38')]=_[_0xbb43('0x39')](_0x40df31[_0xbb43('0x35')],_0x40df31[_0xbb43('0x37')]);_0x5833bb[_0xbb43('0x3a')]=_['intersection'](_0x40df31[_0xbb43('0x35')],qs['fields'](_0x5374a2[_0xbb43('0x37')][_0xbb43('0x3b')]));_0x5833bb['attributes']=_0x5833bb[_0xbb43('0x3a')]['length']?_0x5833bb[_0xbb43('0x3a')]:_0x40df31[_0xbb43('0x35')];if(!_0x5374a2[_0xbb43('0x37')][_0xbb43('0x3c')]('nolimit')){_0x5833bb[_0xbb43('0x3d')]=qs[_0xbb43('0x3d')](_0x5374a2['query'][_0xbb43('0x3d')]);_0x5833bb['offset']=qs[_0xbb43('0x1e')](_0x5374a2[_0xbb43('0x37')][_0xbb43('0x1e')]);}_0x5833bb[_0xbb43('0x3e')]=qs[_0xbb43('0x3f')](_0x5374a2[_0xbb43('0x37')]['sort']);_0x5833bb[_0xbb43('0x40')]=qs['filters'](_[_0xbb43('0x41')](_0x5374a2[_0xbb43('0x37')],_0x40df31[_0xbb43('0x38')]));var _0x16833b=[];var _0x4970fb=squel[_0xbb43('0x42')]()[_0xbb43('0x43')]('id')[_0xbb43('0x43')](_0xbb43('0x26'))[_0xbb43('0x43')](_0xbb43('0x44'))[_0xbb43('0x45')](_0xbb43('0x46'));var _0x5a662b=squel[_0xbb43('0x42')]()[_0xbb43('0x43')]('COUNT(*)')[_0xbb43('0x45')]('mail_messages','me')['where']('me.MailInteractionId\x20=\x20i.id')['where'](_0xbb43('0x47'))['where'](_0xbb43('0x48'));var _0x5e5c86=squel[_0xbb43('0x42')]()[_0xbb43('0x43')](_0xbb43('0x49'))['field'](_0xbb43('0x4a'))['from'](_0xbb43('0x4b'),'ui')[_0xbb43('0x4c')](_0xbb43('0x4d'),'u',_0xbb43('0x4e'));var _0x417ad9=squel[_0xbb43('0x42')]()[_0xbb43('0x45')]('mail_interactions','i')[_0xbb43('0x4c')](_0xbb43('0x4f'),'c',_0xbb43('0x50'))[_0xbb43('0x4c')]('users','o',_0xbb43('0x51'))[_0xbb43('0x4c')](_0xbb43('0x52'),'a',_0xbb43('0x53'))['left_join'](_0xbb43('0x54'),'me',_0xbb43('0x55'));var _0x427618=squel['expr']();if(_0x5374a2[_0xbb43('0x37')][_0xbb43('0x56')]){var _0x529c5a=JSON[_0xbb43('0x57')](_0x5374a2[_0xbb43('0x37')]['advancedFilter']);_['keys'](_0x529c5a)[_0xbb43('0x58')](function(_0x5c75ba){var _0xf5d5c=_0x529c5a[_0x5c75ba];if(_0x5c75ba===_0xbb43('0x59')){var _0x5d043d=moment(_0xf5d5c[_0xbb43('0x5a')][_0xbb43('0x5b')])[_0xbb43('0x5c')](_0xbb43('0x5d'))[_0xbb43('0x5e')]()['format']();var _0x124f88=moment(_0x124f88)['utc']()['endOf'](_0xbb43('0x5d'))[_0xbb43('0x5f')]();_0x427618[_0xbb43('0x60')](_0xbb43('0x61'),_0x5d043d,_0x124f88);}else{if(_[_0xbb43('0x62')](_0xf5d5c['condition'])){_0xf5d5c['condition'][_0xbb43('0x58')](function(_0x157824){switch(_0xf5d5c[_0xbb43('0x63')][_0xbb43('0x5a')]){case'IS':if(_0x5c75ba!==_0xbb43('0x64')&&_0x5c75ba!==_0xbb43('0x65')){if(_[_0xbb43('0x62')](_0xf5d5c[_0xbb43('0x5a')])&&_0xf5d5c[_0xbb43('0x5a')]['length']>0x1){_0x427618[_0xbb43('0x60')](_0xf5d5c[_0xbb43('0x66')]+'.'+_0x5c75ba+_0xbb43('0x67'),_0xf5d5c[_0xbb43('0x5a')]);}else{_0x427618[_0xbb43('0x60')](_0xf5d5c[_0xbb43('0x66')]+'.'+_0x5c75ba+_0xbb43('0x68'),_0xf5d5c[_0xbb43('0x5a')][0x0]);}}break;case'=':_0x427618[_0xbb43('0x60')](_0xf5d5c['tableAlias']+'.'+_0x5c75ba+'\x20=\x20?',_0xf5d5c[_0xbb43('0x5a')]);break;case _0xbb43('0x69'):if(_0x5c75ba===_0xbb43('0x6a')){_0x427618[_0xbb43('0x60')](_0xbb43('0x6b')+_0xbb43('0x6c'),'%'+_0xf5d5c[_0xbb43('0x5a')]+'%');_0x427618['or']('c.lastName'+_0xbb43('0x6c'),'%'+_0xf5d5c['value']+'%');_0x427618['or']('c.email'+_0xbb43('0x6c'),'%'+_0xf5d5c[_0xbb43('0x5a')]+'%');}else{_0x427618[_0xbb43('0x60')](_0xf5d5c[_0xbb43('0x66')]+'.'+_0x5c75ba+_0xbb43('0x6c'),'%'+_0xf5d5c[_0xbb43('0x5a')]+'%');}break;case'>':_0x427618[_0xbb43('0x60')](_0xf5d5c[_0xbb43('0x66')]+'.'+_0x5c75ba+'\x20>\x20?',_0xf5d5c['value']);break;case'<':_0x427618[_0xbb43('0x60')](_0xf5d5c[_0xbb43('0x66')]+'.'+_0x5c75ba+_0xbb43('0x6d'),_0xf5d5c[_0xbb43('0x5a')]);break;}});}else{switch(_0xf5d5c[_0xbb43('0x63')][_0xbb43('0x5a')]){case'IS':if(_0x5c75ba!==_0xbb43('0x64')&&_0x5c75ba!==_0xbb43('0x65')){if(_[_0xbb43('0x62')](_0xf5d5c['value'])&&_0xf5d5c[_0xbb43('0x5a')][_0xbb43('0x6e')]>0x1){_0x427618[_0xbb43('0x60')](_0xf5d5c[_0xbb43('0x66')]+'.'+_0x5c75ba+_0xbb43('0x67'),_0xf5d5c[_0xbb43('0x5a')]);}else{_0x427618['and'](_0xf5d5c[_0xbb43('0x66')]+'.'+_0x5c75ba+_0xbb43('0x68'),_0xf5d5c[_0xbb43('0x5a')][0x0]);}}break;case'=':_0x427618[_0xbb43('0x60')](_0xf5d5c[_0xbb43('0x66')]+'.'+_0x5c75ba+'\x20=\x20?',_0xf5d5c[_0xbb43('0x5a')]);break;case _0xbb43('0x69'):if(_0x5c75ba===_0xbb43('0x6a')){_0x427618[_0xbb43('0x60')](_0xbb43('0x6b')+_0xbb43('0x6c'),'%'+_0xf5d5c[_0xbb43('0x5a')]+'%');_0x427618['or'](_0xbb43('0x6f')+_0xbb43('0x6c'),'%'+_0xf5d5c[_0xbb43('0x5a')]+'%');_0x427618['or']('c.email'+_0xbb43('0x6c'),'%'+_0xf5d5c['value']+'%');}else{_0x427618[_0xbb43('0x60')](_0xf5d5c[_0xbb43('0x66')]+'.'+_0x5c75ba+_0xbb43('0x6c'),'%'+_0xf5d5c[_0xbb43('0x5a')]+'%');}break;case'>':_0x427618[_0xbb43('0x60')](_0xf5d5c['tableAlias']+'.'+_0x5c75ba+'\x20>\x20?',_0xf5d5c[_0xbb43('0x5a')]);break;case'<':_0x427618[_0xbb43('0x60')](_0xf5d5c['tableAlias']+'.'+_0x5c75ba+_0xbb43('0x6d'),_0xf5d5c[_0xbb43('0x5a')]);break;}}}});}else{var _0x41d26a=_(Object[_0xbb43('0x36')](_0x5374a2[_0xbb43('0x37')]))[_0xbb43('0x70')](function(_0x3b89ec){return _0x4a95c3[_0xbb43('0x3c')](_0x3b89ec)?_0x3b89ec:undefined;})[_0xbb43('0x71')](function(_0xf2b3b0){return!_[_0xbb43('0x72')](_0xf2b3b0);})[_0xbb43('0x5a')]();if(!_[_0xbb43('0x73')](_0x41d26a)){_0x41d26a[_0xbb43('0x58')](function(_0x566268){if(_0x566268==='MailAccountId'){_0x417ad9[_0xbb43('0x40')](_0xbb43('0x74'),[][_0xbb43('0x75')](_0x5374a2['query'][_0x566268]));}else if(_0x566268===_0xbb43('0x59')){var _0x1eaebe=JSON[_0xbb43('0x57')](_0x5374a2[_0xbb43('0x37')][_0x566268])[_0xbb43('0x76')];var _0x4923c0=JSON[_0xbb43('0x57')](_0x5374a2[_0xbb43('0x37')][_0x566268])[_0xbb43('0x77')];_0x417ad9['where'](_0xbb43('0x61'),_0x1eaebe,_0x4923c0);}else{if(_0x5374a2[_0xbb43('0x37')][_0x566268]===_0xbb43('0x78')){_0x417ad9[_0xbb43('0x40')]('i.'+_0x566268+_0xbb43('0x79'));}else{_0x417ad9[_0xbb43('0x40')]('i.'+_0x566268+_0xbb43('0x68'),_0x5374a2[_0xbb43('0x37')][_0x566268]);}}});}if(_0x5374a2[_0xbb43('0x37')][_0xbb43('0x71')]){var _0x445219=_0x5374a2['query'][_0xbb43('0x71')][_0xbb43('0x7a')]('\x5c','\x5c\x5c')[_0xbb43('0x7a')]('\x27\x27',_0xbb43('0x7b'));if(qs[_0xbb43('0x7c')](_0x445219)){_0x427618['or']('i.id\x20LIKE\x20?',_0x445219+'%');}else if(qs['isEmail'](_0x445219)){_0x427618['or']('c.email\x20LIKE\x20?',_0x445219+'%');}else{var _0x915a0a=[];_0x445219[_0xbb43('0x29')]('\x20')[_0xbb43('0x58')](function(_0x3e7858){_0x915a0a[_0xbb43('0x2b')]('+'+_0x3e7858[_0xbb43('0x7d')]());});var _0x53cd0b=_0x915a0a['join']('\x20');_0x427618['or'](_0xbb43('0x7e'),_0x53cd0b)['or'](_0xbb43('0x7f'),_0x53cd0b);}}}_0x417ad9[_0xbb43('0x40')](_0x427618);if(_0x5833bb['order']){_0x5833bb[_0xbb43('0x3e')]['forEach'](function(_0x36f94e){_0x417ad9['order']('i.'+_0x36f94e[0x0],_0x36f94e[0x1]===_0xbb43('0x80')?![]:!![]);});}_0x417ad9[_0xbb43('0x81')](_0xbb43('0x82'));var _0x1510f5={'type':db[_0xbb43('0x83')][_0xbb43('0x84')][_0xbb43('0x85')],'raw':!![]};var _0x2a2e7d=_0x417ad9['clone']()[_0xbb43('0x43')](_0xbb43('0x86'))['field'](_0xbb43('0x87'),_0xbb43('0x65'));if(!_0x5374a2[_0xbb43('0x37')]['advancedFilter']){if(_0x5374a2[_0xbb43('0x37')][_0xbb43('0x88')]){if(_0x5374a2[_0xbb43('0x37')][_0xbb43('0x88')]==0x1){_0x2a2e7d[_0xbb43('0x89')](_0xbb43('0x8a'));_0x417ad9['having'](_0xbb43('0x8a'));}else{_0x2a2e7d['having'](_0xbb43('0x8b'));_0x417ad9[_0xbb43('0x89')]('`unreadMessages`\x20>\x200');}}if(_0x5374a2[_0xbb43('0x37')][_0xbb43('0x8c')]){var _0x4d9668=_['isArray'](_0x5374a2[_0xbb43('0x37')][_0xbb43('0x8c')])?_0x5374a2[_0xbb43('0x37')][_0xbb43('0x8c')]:new Array(_0x5374a2[_0xbb43('0x37')][_0xbb43('0x8c')]);var _0x42bc0f=squel[_0xbb43('0x8d')]();_0x4d9668[_0xbb43('0x58')](function(_0xe568a3){_0x42bc0f['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0xe568a3+',%');});_0x417ad9[_0xbb43('0x89')](_0x42bc0f);_0x2a2e7d[_0xbb43('0x4c')](_0xbb43('0x8e'),'it','it.MailInteractionId\x20=\x20i.id');_0x2a2e7d['left_join'](_0xbb43('0x46'),'t',_0xbb43('0x8f'));_0x2a2e7d[_0xbb43('0x40')](_0xbb43('0x90'),_0x4d9668);}}else{var _0x529c5a=JSON[_0xbb43('0x57')](_0x5374a2['query'][_0xbb43('0x56')]);_[_0xbb43('0x36')](_0x529c5a)[_0xbb43('0x58')](function(_0x5d606f){var _0x1451ec=_0x529c5a[_0x5d606f];if(_0x5d606f===_0xbb43('0x64')){var _0x47b468=_0x1451ec['value'];var _0x2810b4=squel[_0xbb43('0x8d')]();_0x47b468[_0xbb43('0x58')](function(_0x91e289){_0x2810b4['or'](_0xbb43('0x91'),'%,'+_0x91e289+',%');});_0x417ad9[_0xbb43('0x89')](_0x2810b4);_0x2a2e7d[_0xbb43('0x4c')](_0xbb43('0x8e'),'it','it.MailInteractionId\x20=\x20i.id');_0x2a2e7d[_0xbb43('0x4c')](_0xbb43('0x46'),'t',_0xbb43('0x8f'));_0x2a2e7d[_0xbb43('0x40')]('t.id\x20IN\x20?',_0x47b468);}else if(_0x5d606f===_0xbb43('0x65')){if(_0x1451ec['value']['length']===0x1){if(_0x1451ec[_0xbb43('0x5a')][0x0]===0x1){_0x2a2e7d[_0xbb43('0x89')](_0xbb43('0x8a'));_0x417ad9['having']('`unreadMessages`\x20=\x200');}else{_0x2a2e7d['having'](_0xbb43('0x8b'));_0x417ad9[_0xbb43('0x89')](_0xbb43('0x8b'));}}}});}db[_0xbb43('0x92')][_0xbb43('0x37')](_0x2a2e7d['toString'](),_0x1510f5)[_0xbb43('0x23')](function(_0x53b2c8){_0x26915a[_0xbb43('0x1d')]=_0x53b2c8['length'];if(_0x26915a['count']===0x0)return[];return db['sequelize'][_0xbb43('0x37')](_0x4970fb[_0xbb43('0x7d')](),_0x1510f5)['then'](function(_0x12e669){_0x16833b=_[_0xbb43('0x93')](_0x12e669,'id');_0x1510f5=_[_0xbb43('0x94')](_0x1510f5,{'model':db[_0xbb43('0x2c')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x417ad9[_0xbb43('0x43')](_0xbb43('0x87'),_0xbb43('0x65'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0x95'),_0xbb43('0x96'));_0x417ad9[_0xbb43('0x43')]('i.id');_0x417ad9[_0xbb43('0x43')](_0xbb43('0x97'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0x98'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0x99'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0x9a'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0x9b'));_0x417ad9[_0xbb43('0x43')]('i.lastMsgAt');_0x417ad9['field'](_0xbb43('0x9c'));_0x417ad9[_0xbb43('0x43')]('i.subject');_0x417ad9[_0xbb43('0x43')]('i.disposition');_0x417ad9[_0xbb43('0x43')](_0xbb43('0x9d'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0x9e'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0x9f'));_0x417ad9['field'](_0xbb43('0xa0'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0xa1'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0x6b'),_0xbb43('0xa2'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0x6f'),_0xbb43('0xa3'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0xa4'),_0xbb43('0xa5'));_0x417ad9[_0xbb43('0x43')](_0xbb43('0xa6'),_0xbb43('0xa7'));_0x417ad9['field'](_0xbb43('0xa8'),_0xbb43('0xa9'));_0x417ad9['field']('c.fax',_0xbb43('0xaa'));_0x417ad9['field']('GROUP_CONCAT(DISTINCT\x20t.id)',_0xbb43('0xab'));_0x417ad9['left_join'](_0xbb43('0x8e'),'it',_0xbb43('0xac'));_0x417ad9[_0xbb43('0x4c')](_0xbb43('0x46'),'t','t.id\x20=\x20it.TagId');_0x417ad9[_0xbb43('0x3d')](_0x5833bb[_0xbb43('0x3d')]);_0x417ad9[_0xbb43('0x1e')](_0x5833bb['offset']);return db[_0xbb43('0x92')][_0xbb43('0x37')](_0x417ad9['toString'](),_0x1510f5);})[_0xbb43('0x23')](function(_0x54317a){_0x5e5c86[_0xbb43('0x40')](_0xbb43('0xad'),_[_0xbb43('0x70')](_0x54317a,'id'));return db[_0xbb43('0x92')][_0xbb43('0x37')](_0x5e5c86[_0xbb43('0x7d')](),_0x1510f5)[_0xbb43('0x23')](function(_0x2703cf){var _0xda0e5d=_[_0xbb43('0xae')](_0x2703cf,_0xbb43('0xaf'));var _0x3acc89=[];return db['Setting'][_0xbb43('0x2d')]({'attributes':[_0xbb43('0xb0')],'raw':!![]})[_0xbb43('0x23')](function(_0x15d755){var _0x50be32=_0x15d755[_0xbb43('0xb0')];_0x54317a[_0xbb43('0x58')](function(_0x44f9a8){_0x3acc89[_0xbb43('0x2b')](updateMailInteraction(_0x44f9a8,_0x16833b,_0xda0e5d,_0x50be32));});return BPromise[_0xbb43('0xb1')](_0x3acc89);});});});})['then'](function(_0x12757c){_0x26915a[_0xbb43('0xb2')]=_0x12757c;return _0x26915a;})['then'](respondWithFilteredResult(_0x5f4601,_0x5833bb))[_0xbb43('0x32')](handleError(_0x5f4601,null));};exports[_0xbb43('0xb3')]=function(_0x53400d,_0x220774){var _0x417cbd={'raw':![],'where':{'id':_0x53400d[_0xbb43('0xb4')]['id']}},_0x314faa={};_0x314faa[_0xbb43('0x35')]=_['keys'](db[_0xbb43('0x2c')][_0xbb43('0x34')]);_0x314faa[_0xbb43('0x37')]=_[_0xbb43('0x36')](_0x53400d[_0xbb43('0x37')]);_0x314faa['filters']=_[_0xbb43('0x39')](_0x314faa['model'],_0x314faa['query']);_0x417cbd[_0xbb43('0x3a')]=_[_0xbb43('0x39')](_0x314faa[_0xbb43('0x35')],qs[_0xbb43('0x3b')](_0x53400d[_0xbb43('0x37')][_0xbb43('0x3b')]));_0x417cbd['attributes']=_0x417cbd['attributes']['length']?_0x417cbd[_0xbb43('0x3a')]:_0x314faa[_0xbb43('0x35')];if(_0x53400d[_0xbb43('0x37')][_0xbb43('0xb5')]){_0x417cbd[_0xbb43('0xb6')]=[{'all':!![]}];}_0x417cbd=_[_0xbb43('0x94')]({},_0x417cbd,_0x53400d[_0xbb43('0xb7')]);return db[_0xbb43('0x2c')]['find'](_0x417cbd)[_0xbb43('0x23')](handleEntityNotFound(_0x220774,null))['then'](respondWithResult(_0x220774,null))[_0xbb43('0x32')](handleError(_0x220774,null));};exports[_0xbb43('0xb8')]=function(_0x1a4089,_0x47135b){return db[_0xbb43('0x2c')][_0xbb43('0xb8')](_0x1a4089[_0xbb43('0xb9')],{})[_0xbb43('0x23')](respondWithResult(_0x47135b,0xc9))[_0xbb43('0x32')](handleError(_0x47135b,null));};exports['update']=function(_0x115fef,_0x38cf36){if(_0x115fef[_0xbb43('0xb9')]['id']){delete _0x115fef[_0xbb43('0xb9')]['id'];}return db[_0xbb43('0x2c')][_0xbb43('0xba')]({'where':{'id':_0x115fef['params']['id']}})[_0xbb43('0x23')](handleEntityNotFound(_0x38cf36,null))[_0xbb43('0x23')](saveUpdates(_0x115fef[_0xbb43('0xb9')],null))[_0xbb43('0x23')](respondWithResult(_0x38cf36,null))[_0xbb43('0x32')](handleError(_0x38cf36,null));};exports[_0xbb43('0xbb')]=function(_0xe0b935,_0x1c03cf){return db[_0xbb43('0x2c')]['find']({'where':{'id':_0xe0b935[_0xbb43('0xb4')]['id']}})[_0xbb43('0x23')](handleEntityNotFound(_0x1c03cf,null))[_0xbb43('0x23')](removeEntity(_0x1c03cf,null))['catch'](handleError(_0x1c03cf,null));};exports[_0xbb43('0xbc')]=function(_0x4c00d1,_0x50c68e){return db[_0xbb43('0x2c')][_0xbb43('0xbc')]()['then'](respondWithResult(_0x50c68e,null))[_0xbb43('0x32')](handleError(_0x50c68e,null));};exports['addMessage']=function(_0x2d1b62,_0xdc226f,_0x34976b){return db['MailMessage']['find']({'where':{'id':_0x2d1b62['params']['id']}})[_0xbb43('0x23')](handleEntityNotFound(_0xdc226f,null))[_0xbb43('0x23')](function(_0x3c7f41){if(_0x3c7f41){return _0x3c7f41[_0xbb43('0xbd')](_0x2d1b62[_0xbb43('0xb9')]['ids'],_[_0xbb43('0xbe')](_0x2d1b62[_0xbb43('0xb9')],[_0xbb43('0xbf'),'id'])||{});}})[_0xbb43('0x23')](respondWithResult(_0xdc226f,null))[_0xbb43('0x32')](handleError(_0xdc226f,null));};exports[_0xbb43('0xc0')]=function(_0x5ce453,_0x47bf6b,_0xdf285b){var _0x306b1c={'raw':![],'where':{}};var _0x4c6b2b={};var _0x4879b1={'count':0x0,'rows':[]};return db[_0xbb43('0x2c')]['findOne']({'where':{'id':_0x5ce453[_0xbb43('0xb4')]['id']}})[_0xbb43('0x23')](handleEntityNotFound(_0x47bf6b,null))[_0xbb43('0x23')](function(_0x45798b){if(_0x45798b){_0x4c6b2b['model']=_[_0xbb43('0x36')](db[_0xbb43('0xc1')][_0xbb43('0x34')]);_0x4c6b2b[_0xbb43('0x37')]=_[_0xbb43('0x36')](_0x5ce453[_0xbb43('0x37')]);_0x4c6b2b['filters']=_['intersection'](_0x4c6b2b[_0xbb43('0x35')],_0x4c6b2b[_0xbb43('0x37')]);_0x306b1c[_0xbb43('0x3a')]=_[_0xbb43('0x39')](_0x4c6b2b[_0xbb43('0x35')],qs['fields'](_0x5ce453['query'][_0xbb43('0x3b')]));_0x306b1c[_0xbb43('0x3a')]=_0x306b1c[_0xbb43('0x3a')]['length']?_0x306b1c[_0xbb43('0x3a')]:_0x4c6b2b[_0xbb43('0x35')];if(!_0x5ce453[_0xbb43('0x37')]['hasOwnProperty'](_0xbb43('0xc2'))){_0x306b1c['limit']=qs[_0xbb43('0x3d')](_0x5ce453[_0xbb43('0x37')][_0xbb43('0x3d')]);_0x306b1c['offset']=qs[_0xbb43('0x1e')](_0x5ce453[_0xbb43('0x37')][_0xbb43('0x1e')]);}_0x306b1c[_0xbb43('0x3e')]=qs[_0xbb43('0x3f')](_0x5ce453[_0xbb43('0x37')][_0xbb43('0x3f')]);_0x306b1c[_0xbb43('0x40')]=qs[_0xbb43('0x38')](_[_0xbb43('0x41')](_0x5ce453[_0xbb43('0x37')],_0x4c6b2b[_0xbb43('0x38')]));_0x306b1c[_0xbb43('0x40')][_0xbb43('0xaf')]=_0x45798b['id'];if(_0x5ce453['query'][_0xbb43('0x71')]){_0x306b1c[_0xbb43('0x40')]=_[_0xbb43('0x94')](_0x306b1c[_0xbb43('0x40')],{'$or':_[_0xbb43('0x70')](_0x306b1c[_0xbb43('0x3a')],function(_0x1091fa){var _0x1a9c77={};_0x1a9c77[_0x1091fa]={'$like':'%'+_0x5ce453[_0xbb43('0x37')][_0xbb43('0x71')]+'%'};return _0x1a9c77;})});}if(_0x5ce453[_0xbb43('0x37')][_0xbb43('0x76')]){var _0x3c537a=_0x5ce453[_0xbb43('0x37')][_0xbb43('0x76')][_0xbb43('0x29')](',');var _0x2ad2ca={};_0x2ad2ca[_0x3c537a[0x0]]={'$gte':moment(_0x3c537a[0x1])['format'](_0xbb43('0xc3'))};_0x306b1c['where']=_['merge'](_0x306b1c[_0xbb43('0x40')],_0x2ad2ca);}_0x306b1c=_[_0xbb43('0x94')]({},_0x306b1c,_0x5ce453['options']);return db['MailMessage'][_0xbb43('0x1d')]({'where':_0x306b1c[_0xbb43('0x40')]})['then'](function(_0x35c678){_0x4879b1['count']=_0x35c678;if(_0x5ce453[_0xbb43('0x37')]['includeAll']){_0x306b1c[_0xbb43('0xb6')]=[{'all':!![]}];}return db[_0xbb43('0xc1')]['findAll'](_0x306b1c);})[_0xbb43('0x23')](function(_0x2633cb){_0x4879b1[_0xbb43('0xb2')]=_0x2633cb;return _0x4879b1;});}})[_0xbb43('0x23')](respondWithFilteredResult(_0x47bf6b,_0x306b1c))[_0xbb43('0x32')](handleError(_0x47bf6b,null));};exports['addTags']=function(_0x6b0dd,_0x240d76,_0x236f40){return db[_0xbb43('0x2c')][_0xbb43('0xba')]({'where':{'id':_0x6b0dd['params']['id']}})[_0xbb43('0x23')](handleEntityNotFound(_0x240d76,null))[_0xbb43('0x23')](function(_0x27c371){if(_0x27c371){return _0x27c371['setTags'](_0x6b0dd['body'][_0xbb43('0xbf')],_[_0xbb43('0xbe')](_0x6b0dd[_0xbb43('0xb9')],['ids','id'])||{})['spread'](function(){return db[_0xbb43('0xc4')][_0xbb43('0xc5')]({'attributes':['id',_0xbb43('0x26'),_0xbb43('0x44')],'where':{'id':_0x6b0dd[_0xbb43('0xb9')]['ids']}});})[_0xbb43('0x23')](function(_0x47406b){socket[_0xbb43('0xc6')](_0xbb43('0xc7'),{'id':Number(_0x6b0dd[_0xbb43('0xb4')]['id']),'tags':_0x47406b||[]});return{'id':Number(_0x6b0dd[_0xbb43('0xb4')]['id']),'tags':_0x47406b||[]};});}})['then'](respondWithResult(_0x240d76,null))[_0xbb43('0x32')](handleError(_0x240d76,null));};exports[_0xbb43('0xc8')]=function(_0x12f7a9,_0x5166b9,_0x3a3990){return db['MailInteraction'][_0xbb43('0xba')]({'where':{'id':_0x12f7a9[_0xbb43('0xb4')]['id']}})[_0xbb43('0x23')](handleEntityNotFound(_0x5166b9,null))[_0xbb43('0x23')](function(_0x59bb83){if(_0x59bb83){return _0x59bb83[_0xbb43('0xc8')](_0x12f7a9['query'][_0xbb43('0xbf')]);}})[_0xbb43('0x23')](respondWithStatusCode(_0x5166b9,null))[_0xbb43('0x32')](handleError(_0x5166b9,null));};exports[_0xbb43('0xc9')]=function(_0xf24f48,_0x532596){var _0x767db5=moment()[_0xbb43('0xca')]()[_0xbb43('0x7d')]();var _0x19b75d=path[_0xbb43('0xcb')](config['root'],_0xbb43('0xcc'),_0xbb43('0xcd'),_0xbb43('0xce'));var _0x4e6ac5=path[_0xbb43('0xcb')](config['root'],'server','files','tmp');var _0x44b3de=path['join'](_0x4e6ac5,_0x767db5);var _0x3928ec=util[_0xbb43('0x5f')](_0xbb43('0xcf'),_0x767db5);var _0xc0b356=path['join'](_0x4e6ac5,_0x3928ec);var _0x51e054=![];return db[_0xbb43('0x2c')]['find']({'where':{'id':_0xf24f48[_0xbb43('0xb4')]['id']}})[_0xbb43('0x23')](handleEntityNotFound(_0x532596,null))['then'](function(_0x4df644){if(_0x4df644){return _0x4df644[_0xbb43('0xc0')]({'attributes':['id',_0xbb43('0xb9'),_0xbb43('0x45'),'to','cc','bcc',_0xbb43('0xd0'),'createdAt'],'where':{'secret':![]},'include':_0xf24f48[_0xbb43('0x37')][_0xbb43('0xce')]?[{'model':db[_0xbb43('0xd1')],'as':_0xbb43('0xd2')}]:undefined,'order':qs['sort']('id')});}return[];})[_0xbb43('0x23')](function(_0x2b1e02){_0x51e054=_0x2b1e02[_0xbb43('0x6e')];if(_0x2b1e02[_0xbb43('0x6e')]){fs[_0xbb43('0xd3')](_0x44b3de);return BPromise['each'](_0x2b1e02,function(_0x726f4e,_0x26eed7){var _0x4e070e=_0x726f4e;var _0x5a87b3={'from':_0x4e070e[_0xbb43('0x45')],'to':_0x4e070e['to'],'subject':_0x4e070e['subject'],'html':_0x4e070e[_0xbb43('0xb9')],'headers':{'Date':moment(_0x4e070e[_0xbb43('0x59')])[_0xbb43('0x5f')](_0xbb43('0xd4'))},'attachments':[]};if(_0x726f4e['cc']){_0x5a87b3[_0xbb43('0xd5')]['Cc']=_0x726f4e['cc'];}if(_0x726f4e[_0xbb43('0xd6')]){_0x5a87b3[_0xbb43('0xd5')][_0xbb43('0xd7')]=_0x726f4e[_0xbb43('0xd6')];}return new BPromise(function(_0x4482e0,_0x572c9d){if(_0x726f4e[_0xbb43('0xd2')]){for(var _0x30be3=0x0;_0x30be3<_0x726f4e[_0xbb43('0xd2')]['length'];_0x30be3++){var _0x341065=_0x726f4e[_0xbb43('0xd2')][_0x30be3];var _0x9bf998=path[_0xbb43('0xcb')](_0x19b75d,_0x341065[_0xbb43('0xd8')]);if(fs['existsSync'](_0x9bf998)){_0x5a87b3[_0xbb43('0xce')]['push']({'name':_0x341065['name'],'contentType':_0x341065['type'],'data':fs['readFileSync'](_0x9bf998)});}}}emlformat[_0xbb43('0xd9')](_0x5a87b3,function(_0x35b9c5,_0x2c2cd5){if(_0x35b9c5)return _0x572c9d(_0x35b9c5);fs[_0xbb43('0xda')](path[_0xbb43('0xcb')](_0x44b3de,util[_0xbb43('0x5f')](_0xbb43('0xdb'),_0x26eed7)),_0x2c2cd5);return _0x4482e0(_0x2c2cd5);});});});}})['then'](function(){if(_0x51e054){return new BPromise(function(_0x8b9b10,_0x465de5){zipdir(_0x44b3de,{'saveTo':_0xc0b356},function(_0x3226f0,_0x16e6d0){if(_0x3226f0)return _0x465de5(_0x3226f0);return _0x8b9b10(_0x16e6d0);});});}})[_0xbb43('0x23')](function(){if(_0x51e054){return new BPromise(function(_0x311a52,_0x408754){rimraf(_0x44b3de,function(_0x33c4cb){if(_0x33c4cb)_0x408754(_0x33c4cb);return _0x311a52();});});}})[_0xbb43('0x23')](function(){if(_0x51e054){return _0x532596[_0xbb43('0xc9')](_0xc0b356,_0x3928ec,function(_0x168d58){if(_0x168d58){console['log']('err',_0x168d58);}else{fs[_0xbb43('0xdc')](_0xc0b356);}});}else{return _0x532596[_0xbb43('0x24')](0xc8);}})[_0xbb43('0x32')](handleError(_0x532596,null));};
\ No newline at end of file
index 7e5802f..04f9041 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1af0=['remove','getUsers','then','setDataValue','Users','map','findAll','unreadMessages','length','emit','hasOwnProperty','events','../../mysqldb','MailInteraction','save','update'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x1af0,0x14b));var _0x01af=function(_0x53ccf2,_0x13cb67){_0x53ccf2=_0x53ccf2-0x0;var _0x5a2964=_0x1af0[_0x53ccf2];return _0x5a2964;};'use strict';var EventEmitter=require(_0x01af('0x0'));var MailInteraction=require(_0x01af('0x1'))['db'][_0x01af('0x2')];var MailMessage=require(_0x01af('0x1'))['db']['MailMessage'];var MailInteractionEvents=new EventEmitter();MailInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x01af('0x3'),'afterUpdate':_0x01af('0x4'),'afterDestroy':_0x01af('0x5')};function emitEvent(_0x5bc731){return function(_0xb58eac,_0x23977e,_0x2a5283){_0xb58eac[_0x01af('0x6')]({'attributes':['id'],'raw':!![]})[_0x01af('0x7')](function(_0x433c75){_0xb58eac[_0x01af('0x8')](_0x01af('0x9'),_0x433c75[_0x01af('0xa')](function(_0x3f546e){return{'id':_0x3f546e['id']};}));return MailMessage[_0x01af('0xb')]({'where':{'MailInteractionId':_0xb58eac['id'],'direction':'in','read':![]},'raw':!![]});})[_0x01af('0x7')](function(_0xb722ad){_0xb58eac[_0x01af('0x8')](_0x01af('0xc'),_0xb722ad[_0x01af('0xd')]);MailInteractionEvents[_0x01af('0xe')](_0x5bc731+':'+_0xb58eac['id'],_0xb58eac);MailInteractionEvents['emit'](_0x5bc731,_0xb58eac);_0x2a5283(null);})['catch'](_0x2a5283(null));};}for(var e in events){if(events[_0x01af('0xf')](e)){var event=events[e];MailInteraction['hook'](e,emitEvent(event));}}module['exports']=MailInteractionEvents;
\ No newline at end of file
+var _0x703a=['findAll','unreadMessages','length','emit','hasOwnProperty','hook','MailInteraction','../../mysqldb','MailMessage','setMaxListeners','save','remove','getUsers','then','setDataValue','Users'];(function(_0x15e51c,_0x3fcd7c){var _0x4940b8=function(_0x5827d5){while(--_0x5827d5){_0x15e51c['push'](_0x15e51c['shift']());}};_0x4940b8(++_0x3fcd7c);}(_0x703a,0x1d6));var _0xa703=function(_0x117a3b,_0x2d66a0){_0x117a3b=_0x117a3b-0x0;var _0x480d93=_0x703a[_0x117a3b];return _0x480d93;};'use strict';var EventEmitter=require('events');var MailInteraction=require('../../mysqldb')['db'][_0xa703('0x0')];var MailMessage=require(_0xa703('0x1'))['db'][_0xa703('0x2')];var MailInteractionEvents=new EventEmitter();MailInteractionEvents[_0xa703('0x3')](0x0);var events={'afterCreate':_0xa703('0x4'),'afterUpdate':'update','afterDestroy':_0xa703('0x5')};function emitEvent(_0x2675a1){return function(_0x5aefb9,_0x27f36a,_0x3cfe2e){_0x5aefb9[_0xa703('0x6')]({'attributes':['id'],'raw':!![]})[_0xa703('0x7')](function(_0x376e62){_0x5aefb9[_0xa703('0x8')](_0xa703('0x9'),_0x376e62['map'](function(_0x32f84d){return{'id':_0x32f84d['id']};}));return MailMessage[_0xa703('0xa')]({'where':{'MailInteractionId':_0x5aefb9['id'],'direction':'in','read':![]},'raw':!![]});})[_0xa703('0x7')](function(_0x317116){_0x5aefb9[_0xa703('0x8')](_0xa703('0xb'),_0x317116[_0xa703('0xc')]);MailInteractionEvents[_0xa703('0xd')](_0x2675a1+':'+_0x5aefb9['id'],_0x5aefb9);MailInteractionEvents['emit'](_0x2675a1,_0x5aefb9);_0x3cfe2e(null);})['catch'](_0x3cfe2e(null));};}for(var e in events){if(events[_0xa703('0xe')](e)){var event=events[e];MailInteraction[_0xa703('0xf')](e,emitEvent(event));}}module['exports']=MailInteractionEvents;
\ No newline at end of file
index 2edd5af..bc3bb10 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd0c7=['YYYY-MM-DD\x20HH:mm:ss','changed','models','get','MailMessage','then','utf8mb4_unicode_ci','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./mailInteraction.attributes','exports','define','MailInteraction','fti_mail_interactions','subject','FULLTEXT','substatus','substatusAt','format','closed','closedAt'];(function(_0x2dcc49,_0x552a52){var _0x203204=function(_0x28e746){while(--_0x28e746){_0x2dcc49['push'](_0x2dcc49['shift']());}};_0x203204(++_0x552a52);}(_0xd0c7,0x1db));var _0x7d0c=function(_0x1bd622,_0x3e2d4c){_0x1bd622=_0x1bd622-0x0;var _0x32fe7b=_0xd0c7[_0x1bd622];return _0x32fe7b;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x7d0c('0x0'))(_0x7d0c('0x1'));var moment=require(_0x7d0c('0x2'));var BPromise=require(_0x7d0c('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x7d0c('0x4'));var rimraf=require(_0x7d0c('0x5'));var config=require(_0x7d0c('0x6'));var attributes=require(_0x7d0c('0x7'));module[_0x7d0c('0x8')]=function(_0x24f077,_0x46379a){return _0x24f077[_0x7d0c('0x9')](_0x7d0c('0xa'),attributes,{'tableName':'mail_interactions','paranoid':![],'indexes':[{'name':_0x7d0c('0xb'),'fields':[_0x7d0c('0xc'),'to'],'type':_0x7d0c('0xd')}],'timestamps':!![],'hooks':{'beforeCreate':function(_0x341932,_0x109ad6,_0xd3598){if(_0x341932[_0x7d0c('0xe')]){_0x341932[_0x7d0c('0xf')]=moment()[_0x7d0c('0x10')]('YYYY-MM-DD\x20HH:mm:ss');}if(_0x341932[_0x7d0c('0x11')]){_0x341932[_0x7d0c('0x12')]=moment()[_0x7d0c('0x10')](_0x7d0c('0x13'));}_0xd3598(null,_0x109ad6);},'beforeUpdate':function(_0x186df2,_0xc8f49d,_0x141560){if(_0x186df2[_0x7d0c('0x14')](_0x7d0c('0xe'))){_0x186df2[_0x7d0c('0xf')]=moment()[_0x7d0c('0x10')](_0x7d0c('0x13'));}if(_0x186df2[_0x7d0c('0x14')]('closed')){_0x186df2[_0x7d0c('0x12')]=moment()[_0x7d0c('0x10')](_0x7d0c('0x13'));}_0x141560(null,_0x186df2);},'afterUpdate':function(_0x4a4ddd,_0x428479,_0x4e932d){var _0x5b7d33=_0x24f077[_0x7d0c('0x15')];var _0x1d71e9=_0x4a4ddd[_0x7d0c('0x16')]({'plain':!![]});if(_0x1d71e9['closed']){return _0x5b7d33[_0x7d0c('0x17')]['update']({'read':!![]},{'where':{'MailInteractionId':_0x1d71e9['id']}})[_0x7d0c('0x18')](function(){_0x4e932d();})['catch'](function(_0x57f237){_0x4e932d(_0x57f237);});}else{_0x4e932d();}}},'charset':'utf8mb4','collate':_0x7d0c('0x19')});};
\ No newline at end of file
+var _0x0599=['../../config/environment','./mailInteraction.attributes','exports','MailInteraction','mail_interactions','FULLTEXT','substatus','substatusAt','format','YYYY-MM-DD\x20HH:mm:ss','closed','closedAt','changed','MailMessage','update','catch','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','path'];(function(_0x2735b2,_0x46aeed){var _0x3b62a9=function(_0x812cc3){while(--_0x812cc3){_0x2735b2['push'](_0x2735b2['shift']());}};_0x3b62a9(++_0x46aeed);}(_0x0599,0xa2));var _0x9059=function(_0x1f5ef3,_0x1fef7c){_0x1f5ef3=_0x1f5ef3-0x0;var _0x3ee480=_0x0599[_0x1f5ef3];return _0x3ee480;};'use strict';var _=require(_0x9059('0x0'));var util=require(_0x9059('0x1'));var logger=require(_0x9059('0x2'))(_0x9059('0x3'));var moment=require(_0x9059('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x9059('0x5'));var rimraf=require('rimraf');var config=require(_0x9059('0x6'));var attributes=require(_0x9059('0x7'));module[_0x9059('0x8')]=function(_0x382907,_0x7316bf){return _0x382907['define'](_0x9059('0x9'),attributes,{'tableName':_0x9059('0xa'),'paranoid':![],'indexes':[{'name':'fti_mail_interactions','fields':['subject','to'],'type':_0x9059('0xb')}],'timestamps':!![],'hooks':{'beforeCreate':function(_0x297fe8,_0x259467,_0x52311b){if(_0x297fe8[_0x9059('0xc')]){_0x297fe8[_0x9059('0xd')]=moment()[_0x9059('0xe')](_0x9059('0xf'));}if(_0x297fe8[_0x9059('0x10')]){_0x297fe8[_0x9059('0x11')]=moment()[_0x9059('0xe')](_0x9059('0xf'));}_0x52311b(null,_0x259467);},'beforeUpdate':function(_0xfa99d2,_0x3ca404,_0x2750b3){if(_0xfa99d2[_0x9059('0x12')](_0x9059('0xc'))){_0xfa99d2[_0x9059('0xd')]=moment()['format'](_0x9059('0xf'));}if(_0xfa99d2[_0x9059('0x12')](_0x9059('0x10'))){_0xfa99d2['closedAt']=moment()['format'](_0x9059('0xf'));}_0x2750b3(null,_0xfa99d2);},'afterUpdate':function(_0x411ebb,_0x171c16,_0x388e8f){var _0x3bee1a=_0x382907['models'];var _0x325656=_0x411ebb['get']({'plain':!![]});if(_0x325656[_0x9059('0x10')]){return _0x3bee1a[_0x9059('0x13')][_0x9059('0x14')]({'read':!![]},{'where':{'MailInteractionId':_0x325656['id']}})['then'](function(){_0x388e8f();})[_0x9059('0x15')](function(_0x23613a){_0x388e8f(_0x23613a);});}else{_0x388e8f();}}},'charset':_0x9059('0x16'),'collate':_0x9059('0x17')});};
\ No newline at end of file
index dc41bfe..084cddd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde3a=['jayson/promise','client','http','defaults','redis','localhost','socket.io-emitter','./mailInteraction.socket','register','request','info','MailInteraction,\x20%s,\x20%s','request\x20sent','debug','MailInteraction,\x20%s,\x20%s,\x20%s','stringify','error','message','UpdateMailInteraction','MailInteraction','update','body','options','raw','where','attributes','limit','then','catch','addTags','omit','spread','AddTags','lodash','util','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment'];(function(_0x59475f,_0xd426e){var _0x5d94d1=function(_0x136b9f){while(--_0x136b9f){_0x59475f['push'](_0x59475f['shift']());}};_0x5d94d1(++_0xd426e);}(_0xde3a,0x140));var _0xade3=function(_0x178ef0,_0x3e27f9){_0x178ef0=_0x178ef0-0x0;var _0x5de8f4=_0xde3a[_0x178ef0];return _0x5de8f4;};'use strict';var _=require(_0xade3('0x0'));var util=require(_0xade3('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xade3('0x2'));var db=require(_0xade3('0x3'))['db'];var utils=require(_0xade3('0x4'));var logger=require(_0xade3('0x5'))(_0xade3('0x6'));var config=require(_0xade3('0x7'));var jayson=require(_0xade3('0x8'));var client=jayson[_0xade3('0x9')][_0xade3('0xa')]({'port':0x232a});config['redis']=_[_0xade3('0xb')](config[_0xade3('0xc')],{'host':_0xade3('0xd'),'port':0x18eb});var socket=require(_0xade3('0xe'))(new Redis(config[_0xade3('0xc')]));require(_0xade3('0xf'))[_0xade3('0x10')](socket);function respondWithRpcPromise(_0x4f133f,_0x3aeac4,_0x190211){return new BPromise(function(_0x4b2a40,_0x3ff1f5){return client[_0xade3('0x11')](_0x4f133f,_0x190211)['then'](function(_0x40cb7d){logger[_0xade3('0x12')](_0xade3('0x13'),_0x3aeac4,_0xade3('0x14'));logger[_0xade3('0x15')](_0xade3('0x16'),_0x3aeac4,_0xade3('0x14'),JSON[_0xade3('0x17')](_0x40cb7d));if(_0x40cb7d['error']){if(_0x40cb7d[_0xade3('0x18')]['code']===0x1f4){logger[_0xade3('0x18')](_0xade3('0x13'),_0x3aeac4,_0x40cb7d[_0xade3('0x18')]['message']);return _0x3ff1f5(_0x40cb7d['error'][_0xade3('0x19')]);}logger[_0xade3('0x18')]('MailInteraction,\x20%s,\x20%s',_0x3aeac4,_0x40cb7d[_0xade3('0x18')]['message']);return _0x4b2a40(_0x40cb7d[_0xade3('0x18')][_0xade3('0x19')]);}else{logger['info'](_0xade3('0x13'),_0x3aeac4,_0xade3('0x14'));_0x4b2a40(_0x40cb7d['result'][_0xade3('0x19')]);}})['catch'](function(_0x536041){logger[_0xade3('0x18')](_0xade3('0x13'),_0x3aeac4,_0x536041);_0x3ff1f5(_0x536041);});});}exports[_0xade3('0x1a')]=function(_0x179b11){var _0x2a4a7c=this;return new Promise(function(_0x98c74,_0x5e78b8){return db[_0xade3('0x1b')][_0xade3('0x1c')](_0x179b11[_0xade3('0x1d')],{'raw':_0x179b11[_0xade3('0x1e')]?_0x179b11[_0xade3('0x1e')][_0xade3('0x1f')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x179b11['options']?_0x179b11[_0xade3('0x1e')][_0xade3('0x20')]||null:null,'attributes':_0x179b11[_0xade3('0x1e')]?_0x179b11[_0xade3('0x1e')][_0xade3('0x21')]||null:null,'limit':_0x179b11[_0xade3('0x1e')]?_0x179b11[_0xade3('0x1e')][_0xade3('0x22')]||null:null})[_0xade3('0x23')](function(_0x54dc1a){logger['info'](_0xade3('0x1a'),_0x179b11);logger['debug']('UpdateMailInteraction',_0x179b11,JSON[_0xade3('0x17')](_0x54dc1a));_0x98c74(_0x54dc1a);})[_0xade3('0x24')](function(_0x212d3b){logger[_0xade3('0x18')]('UpdateMailInteraction',_0x212d3b[_0xade3('0x19')],_0x179b11);_0x5e78b8(_0x2a4a7c[_0xade3('0x18')](0x1f4,_0x212d3b[_0xade3('0x19')]));});});};exports['AddTagsToMailInteraction']=function(_0x4f6e06){return new Promise(function(_0x8eeab,_0x14b149){return db[_0xade3('0x1b')]['find']({'where':_0x4f6e06[_0xade3('0x1e')]?_0x4f6e06[_0xade3('0x1e')][_0xade3('0x20')]||null:null})[_0xade3('0x23')](function(_0x5aa007){if(_0x5aa007){return _0x5aa007[_0xade3('0x25')](_0x4f6e06[_0xade3('0x1d')]['ids'],_[_0xade3('0x26')](_0x4f6e06[_0xade3('0x1d')],['ids','id'])||{});}})[_0xade3('0x27')](function(_0x42af5d){logger[_0xade3('0x12')](_0xade3('0x28'),_0x4f6e06);logger[_0xade3('0x15')](_0xade3('0x28'),_0x4f6e06,JSON['stringify'](_0x42af5d));_0x8eeab(_0x42af5d);})[_0xade3('0x24')](function(_0x2337a6){logger['error'](_0xade3('0x28'),_0x2337a6[_0xade3('0x19')],_0x4f6e06);_0x14b149(_this[_0xade3('0x18')](0x1f4,_0x2337a6[_0xade3('0x19')]));});});};
\ No newline at end of file
+var _0x7958=['lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','redis','socket.io-emitter','./mailInteraction.socket','register','request','then','info','request\x20sent','debug','MailInteraction,\x20%s,\x20%s,\x20%s','stringify','error','message','MailInteraction,\x20%s,\x20%s','result','catch','UpdateMailInteraction','MailInteraction','body','raw','options','where','attributes','limit','AddTagsToMailInteraction','find','ids','omit','spread','AddTags'];(function(_0x255dba,_0x363b3c){var _0x4764e2=function(_0x44b0d6){while(--_0x44b0d6){_0x255dba['push'](_0x255dba['shift']());}};_0x4764e2(++_0x363b3c);}(_0x7958,0x126));var _0x8795=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x7958[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0x8795('0x0'));var util=require(_0x8795('0x1'));var moment=require('moment');var BPromise=require(_0x8795('0x2'));var rs=require(_0x8795('0x3'));var fs=require('fs');var Redis=require(_0x8795('0x4'));var db=require(_0x8795('0x5'))['db'];var utils=require(_0x8795('0x6'));var logger=require(_0x8795('0x7'))(_0x8795('0x8'));var config=require(_0x8795('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x8795('0xa')][_0x8795('0xb')]({'port':0x232a});config[_0x8795('0xc')]=_['defaults'](config[_0x8795('0xc')],{'host':'localhost','port':0x18eb});var socket=require(_0x8795('0xd'))(new Redis(config[_0x8795('0xc')]));require(_0x8795('0xe'))[_0x8795('0xf')](socket);function respondWithRpcPromise(_0x1bcd9c,_0x2191fb,_0x191cb0){return new BPromise(function(_0x441669,_0x416a3a){return client[_0x8795('0x10')](_0x1bcd9c,_0x191cb0)[_0x8795('0x11')](function(_0x2118ff){logger[_0x8795('0x12')]('MailInteraction,\x20%s,\x20%s',_0x2191fb,_0x8795('0x13'));logger[_0x8795('0x14')](_0x8795('0x15'),_0x2191fb,_0x8795('0x13'),JSON[_0x8795('0x16')](_0x2118ff));if(_0x2118ff[_0x8795('0x17')]){if(_0x2118ff[_0x8795('0x17')]['code']===0x1f4){logger['error']('MailInteraction,\x20%s,\x20%s',_0x2191fb,_0x2118ff[_0x8795('0x17')][_0x8795('0x18')]);return _0x416a3a(_0x2118ff[_0x8795('0x17')][_0x8795('0x18')]);}logger[_0x8795('0x17')](_0x8795('0x19'),_0x2191fb,_0x2118ff[_0x8795('0x17')]['message']);return _0x441669(_0x2118ff[_0x8795('0x17')]['message']);}else{logger[_0x8795('0x12')](_0x8795('0x19'),_0x2191fb,_0x8795('0x13'));_0x441669(_0x2118ff[_0x8795('0x1a')][_0x8795('0x18')]);}})[_0x8795('0x1b')](function(_0x353290){logger['error'](_0x8795('0x19'),_0x2191fb,_0x353290);_0x416a3a(_0x353290);});});}exports[_0x8795('0x1c')]=function(_0x4a65f0){var _0x377dde=this;return new Promise(function(_0x2a9501,_0x458787){return db[_0x8795('0x1d')]['update'](_0x4a65f0[_0x8795('0x1e')],{'raw':_0x4a65f0['options']?_0x4a65f0['options'][_0x8795('0x1f')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x4a65f0['options']?_0x4a65f0[_0x8795('0x20')][_0x8795('0x21')]||null:null,'attributes':_0x4a65f0['options']?_0x4a65f0[_0x8795('0x20')][_0x8795('0x22')]||null:null,'limit':_0x4a65f0[_0x8795('0x20')]?_0x4a65f0[_0x8795('0x20')][_0x8795('0x23')]||null:null})[_0x8795('0x11')](function(_0x5ebd65){logger['info'](_0x8795('0x1c'),_0x4a65f0);logger['debug'](_0x8795('0x1c'),_0x4a65f0,JSON[_0x8795('0x16')](_0x5ebd65));_0x2a9501(_0x5ebd65);})[_0x8795('0x1b')](function(_0x1df11f){logger[_0x8795('0x17')]('UpdateMailInteraction',_0x1df11f[_0x8795('0x18')],_0x4a65f0);_0x458787(_0x377dde[_0x8795('0x17')](0x1f4,_0x1df11f['message']));});});};exports[_0x8795('0x24')]=function(_0x1baa26){return new Promise(function(_0x3ce361,_0x28770c){return db[_0x8795('0x1d')][_0x8795('0x25')]({'where':_0x1baa26[_0x8795('0x20')]?_0x1baa26[_0x8795('0x20')][_0x8795('0x21')]||null:null})[_0x8795('0x11')](function(_0x1095a7){if(_0x1095a7){return _0x1095a7['addTags'](_0x1baa26[_0x8795('0x1e')][_0x8795('0x26')],_[_0x8795('0x27')](_0x1baa26[_0x8795('0x1e')],['ids','id'])||{});}})[_0x8795('0x28')](function(_0x184bed){logger[_0x8795('0x12')](_0x8795('0x29'),_0x1baa26);logger[_0x8795('0x14')](_0x8795('0x29'),_0x1baa26,JSON[_0x8795('0x16')](_0x184bed));_0x3ce361(_0x184bed);})[_0x8795('0x1b')](function(_0x49c1fc){logger['error'](_0x8795('0x29'),_0x49c1fc[_0x8795('0x18')],_0x1baa26);_0x28770c(_this[_0x8795('0x17')](0x1f4,_0x49c1fc[_0x8795('0x18')]));});});};
\ No newline at end of file
index a72d333..e3dec4c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ed9=['register','length','mailInteraction:','save','remove','update','emit','removeListener'];(function(_0x3ccac6,_0xd6b81b){var _0x5da1e0=function(_0x34231a){while(--_0x34231a){_0x3ccac6['push'](_0x3ccac6['shift']());}};_0x5da1e0(++_0xd6b81b);}(_0x1ed9,0x103));var _0x91ed=function(_0x41688a,_0x1e7bc){_0x41688a=_0x41688a-0x0;var _0x248cc8=_0x1ed9[_0x41688a];return _0x248cc8;};'use strict';var MailInteractionEvents=require('./mailInteraction.events');var events=[_0x91ed('0x0'),_0x91ed('0x1'),_0x91ed('0x2')];function createListener(_0x42420c,_0x459797){return function(_0x3dfc30){_0x459797[_0x91ed('0x3')](_0x42420c,_0x3dfc30);};}function removeListener(_0x38a765,_0x2190aa){return function(){MailInteractionEvents[_0x91ed('0x4')](_0x38a765,_0x2190aa);};}exports[_0x91ed('0x5')]=function(_0x46d076){for(var _0x577e42=0x0,_0x2eb220=events[_0x91ed('0x6')];_0x577e42<_0x2eb220;_0x577e42++){var _0x20433e=events[_0x577e42];var _0x5de87a=createListener(_0x91ed('0x7')+_0x20433e,_0x46d076);MailInteractionEvents['on'](_0x20433e,_0x5de87a);}};
\ No newline at end of file
+var _0x7a4b=['save','remove','update','emit','removeListener','register','mailInteraction:','./mailInteraction.events'];(function(_0x3c3433,_0x1f6ce1){var _0x17eb29=function(_0x3bd316){while(--_0x3bd316){_0x3c3433['push'](_0x3c3433['shift']());}};_0x17eb29(++_0x1f6ce1);}(_0x7a4b,0x197));var _0xb7a4=function(_0x1f538e,_0x56f0f1){_0x1f538e=_0x1f538e-0x0;var _0xa96cb5=_0x7a4b[_0x1f538e];return _0xa96cb5;};'use strict';var MailInteractionEvents=require(_0xb7a4('0x0'));var events=[_0xb7a4('0x1'),_0xb7a4('0x2'),_0xb7a4('0x3')];function createListener(_0x2de8fa,_0x10129e){return function(_0x27d6e3){_0x10129e[_0xb7a4('0x4')](_0x2de8fa,_0x27d6e3);};}function removeListener(_0x23dbe3,_0x277751){return function(){MailInteractionEvents[_0xb7a4('0x5')](_0x23dbe3,_0x277751);};}exports[_0xb7a4('0x6')]=function(_0x4dea4b){for(var _0x4de977=0x0,_0x3c9f67=events['length'];_0x4de977<_0x3c9f67;_0x4de977++){var _0xb0a037=events[_0x4de977];var _0x1bc2dc=createListener(_0xb7a4('0x7')+_0xb0a037,_0x4dea4b);MailInteractionEvents['on'](_0xb0a037,_0x1bc2dc);}};
\ No newline at end of file
index 88962cc..3aad939 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7217=['mailmessage:create','create','put','update','accept','/:id/reject','reject','delete','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','./mailMessage.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/download','post','tracked','mail'];(function(_0x38cf6e,_0x4a6e9d){var _0x75fda=function(_0x3a479f){while(--_0x3a479f){_0x38cf6e['push'](_0x38cf6e['shift']());}};_0x75fda(++_0x4a6e9d);}(_0x7217,0x19e));var _0x7721=function(_0x29b609,_0x19d388){_0x29b609=_0x29b609-0x0;var _0x54c952=_0x7217[_0x29b609];return _0x54c952;};'use strict';var multer=require(_0x7721('0x0'));var util=require('util');var path=require(_0x7721('0x1'));var timeout=require(_0x7721('0x2'));var express=require(_0x7721('0x3'));var router=express[_0x7721('0x4')]();var auth=require(_0x7721('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x7721('0x6'));router[_0x7721('0x7')]('/',auth[_0x7721('0x8')](),controller[_0x7721('0x9')]);router[_0x7721('0x7')](_0x7721('0xa'),auth[_0x7721('0x8')](),controller[_0x7721('0xb')]);router[_0x7721('0x7')](_0x7721('0xc'),auth[_0x7721('0x8')](),controller[_0x7721('0xd')]);router[_0x7721('0x7')](_0x7721('0xe'),auth[_0x7721('0x8')](),controller['download']);router[_0x7721('0xf')]('/',auth[_0x7721('0x8')](),interaction[_0x7721('0x10')](_0x7721('0x11'),_0x7721('0x12')),controller[_0x7721('0x13')]);router[_0x7721('0x14')](_0x7721('0xc'),auth['isAuthenticated'](),controller[_0x7721('0x15')]);router[_0x7721('0x14')]('/:id/accept',auth[_0x7721('0x8')](),controller[_0x7721('0x16')]);router[_0x7721('0x14')](_0x7721('0x17'),auth['isAuthenticated'](),controller[_0x7721('0x18')]);router[_0x7721('0x19')]('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0x7721('0x1a')]=router;
\ No newline at end of file
+var _0xae24=['/:id/download','download','post','tracked','mailmessage:create','create','put','update','/:id/accept','accept','/:id/reject','destroy','multer','path','express','Router','../../config/environment','get','isAuthenticated','index','/describe','/:id'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0xae24,0x182));var _0x4ae2=function(_0x4d204b,_0x386375){_0x4d204b=_0x4d204b-0x0;var _0x43fe01=_0xae24[_0x4d204b];return _0x43fe01;};'use strict';var multer=require(_0x4ae2('0x0'));var util=require('util');var path=require(_0x4ae2('0x1'));var timeout=require('connect-timeout');var express=require(_0x4ae2('0x2'));var router=express[_0x4ae2('0x3')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x4ae2('0x4'));var controller=require('./mailMessage.controller');router[_0x4ae2('0x5')]('/',auth[_0x4ae2('0x6')](),controller[_0x4ae2('0x7')]);router[_0x4ae2('0x5')](_0x4ae2('0x8'),auth[_0x4ae2('0x6')](),controller['describe']);router['get'](_0x4ae2('0x9'),auth['isAuthenticated'](),controller['show']);router[_0x4ae2('0x5')](_0x4ae2('0xa'),auth['isAuthenticated'](),controller[_0x4ae2('0xb')]);router[_0x4ae2('0xc')]('/',auth[_0x4ae2('0x6')](),interaction[_0x4ae2('0xd')]('mail',_0x4ae2('0xe')),controller[_0x4ae2('0xf')]);router[_0x4ae2('0x10')]('/:id',auth[_0x4ae2('0x6')](),controller[_0x4ae2('0x11')]);router[_0x4ae2('0x10')](_0x4ae2('0x12'),auth[_0x4ae2('0x6')](),controller[_0x4ae2('0x13')]);router[_0x4ae2('0x10')](_0x4ae2('0x14'),auth[_0x4ae2('0x6')](),controller['reject']);router['delete']('/:id',auth[_0x4ae2('0x6')](),controller[_0x4ae2('0x15')]);module['exports']=router;
\ No newline at end of file
index 35c6d91..e2562c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeffd=['long','medium','BOOLEAN','ENUM','out','STRING','DATE','INTEGER','sequelize','exports','TEXT'];(function(_0x2c41af,_0x502470){var _0x223186=function(_0x4be14a){while(--_0x4be14a){_0x2c41af['push'](_0x2c41af['shift']());}};_0x223186(++_0x502470);}(_0xeffd,0x6b));var _0xdeff=function(_0x10e3f9,_0x41523a){_0x10e3f9=_0x10e3f9-0x0;var _0x33e5ae=_0xeffd[_0x10e3f9];return _0x33e5ae;};'use strict';var Sequelize=require(_0xdeff('0x0'));var _=require('lodash');module[_0xdeff('0x1')]={'body':{'type':Sequelize[_0xdeff('0x2')](_0xdeff('0x3')),'allowNull':![]},'plainBody':{'type':Sequelize[_0xdeff('0x2')](_0xdeff('0x4'))},'read':{'type':Sequelize[_0xdeff('0x5')],'defaultValue':![]},'direction':{'type':Sequelize[_0xdeff('0x6')]('in',_0xdeff('0x7')),'defaultValue':_0xdeff('0x7'),'allowNull':![]},'messageId':{'type':Sequelize[_0xdeff('0x8')](0x1fe)},'from':{'type':Sequelize[_0xdeff('0x8')]},'to':{'type':Sequelize[_0xdeff('0x2')](_0xdeff('0x3'))},'cc':{'type':Sequelize[_0xdeff('0x2')](_0xdeff('0x3'))},'bcc':{'type':Sequelize[_0xdeff('0x2')](_0xdeff('0x3'))},'subject':{'type':Sequelize['TEXT']},'sentAt':{'type':Sequelize[_0xdeff('0x9')]},'attach':{'type':Sequelize[_0xdeff('0xa')],'defaultValue':0x0},'secret':{'type':Sequelize[_0xdeff('0x5')],'defaultValue':![]},'readAt':{'type':Sequelize['DATE']},'originTo':{'type':Sequelize[_0xdeff('0x2')](_0xdeff('0x3'))},'originCc':{'type':Sequelize[_0xdeff('0x2')](_0xdeff('0x3'))}};
\ No newline at end of file
+var _0x534f=['lodash','exports','TEXT','long','medium','BOOLEAN','ENUM','out','STRING','DATE','INTEGER','sequelize'];(function(_0x2d1a0c,_0x263dc3){var _0x22c0b6=function(_0x9b1ffb){while(--_0x9b1ffb){_0x2d1a0c['push'](_0x2d1a0c['shift']());}};_0x22c0b6(++_0x263dc3);}(_0x534f,0x1a3));var _0xf534=function(_0x449279,_0xded7e2){_0x449279=_0x449279-0x0;var _0x1b4cb5=_0x534f[_0x449279];return _0x1b4cb5;};'use strict';var Sequelize=require(_0xf534('0x0'));var _=require(_0xf534('0x1'));module[_0xf534('0x2')]={'body':{'type':Sequelize[_0xf534('0x3')](_0xf534('0x4')),'allowNull':![]},'plainBody':{'type':Sequelize[_0xf534('0x3')](_0xf534('0x5'))},'read':{'type':Sequelize[_0xf534('0x6')],'defaultValue':![]},'direction':{'type':Sequelize[_0xf534('0x7')]('in',_0xf534('0x8')),'defaultValue':'out','allowNull':![]},'messageId':{'type':Sequelize[_0xf534('0x9')](0x1fe)},'from':{'type':Sequelize[_0xf534('0x9')]},'to':{'type':Sequelize['TEXT'](_0xf534('0x4'))},'cc':{'type':Sequelize[_0xf534('0x3')](_0xf534('0x4'))},'bcc':{'type':Sequelize[_0xf534('0x3')](_0xf534('0x4'))},'subject':{'type':Sequelize[_0xf534('0x3')]},'sentAt':{'type':Sequelize[_0xf534('0xa')]},'attach':{'type':Sequelize[_0xf534('0xb')],'defaultValue':0x0},'secret':{'type':Sequelize[_0xf534('0x6')],'defaultValue':![]},'readAt':{'type':Sequelize['DATE']},'originTo':{'type':Sequelize['TEXT']('long')},'originCc':{'type':Sequelize[_0xf534('0x3')](_0xf534('0x4'))}};
\ No newline at end of file
index 621d356..43301fd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fb2=['destroy','describe','create','direction','secret','findOne','MailServerOut','Smtp','isNil','service','host','port','secure','authentication','auth','user','pass','attachments','root','SendMail','YYYY-MM-DD\x20HH:mm:ss','mail-interactions','accept','mail','format','UserId','CmContact','get','MailInteraction','MailInteractionId','read1stAt','interaction','[MAILMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','null','acceptMessage','manual','SIP/%s','channel','EventManager','acceptmessage','[MAILMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','interface','event','rejectmessage','unix','server','files','tmp','message-%s.eml','from','subject','createdAt','Attachment','Attachments','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','bcc','Bcc','join','existsSync','push','type','writeFileSync','log','err','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','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','redis','defaults','./mailMessage.socket','register','client','http','test','request','info','MailMessage,\x20%s,\x20%s','request\x20sent','debug','MailMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','sendStatus','status','count','offset','limit','set','Content-Range','json','apply','reject','save','then','end','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','merge','key','field','filter','options','MailMessage','includeAll','findAll','rows','catch','params','include','update','body','find'];(function(_0x5d3cd3,_0x28f817){var _0x512a76=function(_0x1e7fa8){while(--_0x1e7fa8){_0x5d3cd3['push'](_0x5d3cd3['shift']());}};_0x512a76(++_0x28f817);}(_0x5fb2,0x17f));var _0x25fb=function(_0x3a364a,_0x3a33a4){_0x3a364a=_0x3a364a-0x0;var _0x47ffdf=_0x5fb2[_0x3a364a];return _0x47ffdf;};'use strict';var pdf=require(_0x25fb('0x0'));var emlformat=require(_0x25fb('0x1'));var rimraf=require(_0x25fb('0x2'));var zipdir=require(_0x25fb('0x3'));var jsonpatch=require(_0x25fb('0x4'));var rp=require(_0x25fb('0x5'));var moment=require(_0x25fb('0x6'));var BPromise=require(_0x25fb('0x7'));var Mustache=require(_0x25fb('0x8'));var util=require(_0x25fb('0x9'));var path=require('path');var sox=require('sox');var csv=require(_0x25fb('0xa'));var ejs=require(_0x25fb('0xb'));var fs=require('fs');var _=require(_0x25fb('0xc'));var squel=require(_0x25fb('0xd'));var crypto=require(_0x25fb('0xe'));var jsforce=require(_0x25fb('0xf'));var deskjs=require(_0x25fb('0x10'));var toCsv=require(_0x25fb('0xa'));var querystring=require(_0x25fb('0x11'));var Papa=require(_0x25fb('0x12'));var Redis=require(_0x25fb('0x13'));var authService=require(_0x25fb('0x14'));var qs=require(_0x25fb('0x15'));var hardwareService=require(_0x25fb('0x16'));var logger=require(_0x25fb('0x17'))(_0x25fb('0x18'));var utils=require(_0x25fb('0x19'));var config=require(_0x25fb('0x1a'));var db=require(_0x25fb('0x1b'))['db'];config[_0x25fb('0x1c')]=_[_0x25fb('0x1d')](config[_0x25fb('0x1c')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x25fb('0x1c')]));require(_0x25fb('0x1e'))[_0x25fb('0x1f')](socket);var jayson=require('jayson/promise');var client=jayson[_0x25fb('0x20')][_0x25fb('0x21')]({'port':0x232c});var client9003=jayson[_0x25fb('0x20')][_0x25fb('0x21')]({'port':0x232b});var client9002=jayson[_0x25fb('0x20')][_0x25fb('0x21')]({'port':0x232a});function checkPasswordPattern(_0x9f43a4,_0x446f4e,_0x46123f){if(_0x46123f){var _0x130289=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x130289[_0x25fb('0x22')](_0x446f4e)){return _0x9f43a4;}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 _0x9f43a4;}}function respondWithRpcPromise(_0x46c839,_0x20d206,_0x4c108f,_0xabf9f8){return new BPromise(function(_0x4d23be,_0x497a88){var _0x2fc89d=_0xabf9f8||client;return _0x2fc89d[_0x25fb('0x23')](_0x46c839,_0x4c108f)['then'](function(_0x52836d){logger[_0x25fb('0x24')](_0x25fb('0x25'),_0x20d206,_0x25fb('0x26'));logger[_0x25fb('0x27')](_0x25fb('0x28'),_0x20d206,_0x25fb('0x26'),JSON[_0x25fb('0x29')](_0x52836d));if(_0x52836d[_0x25fb('0x2a')]){if(_0x52836d[_0x25fb('0x2a')][_0x25fb('0x2b')]===0x1f4){logger[_0x25fb('0x2a')](_0x25fb('0x25'),_0x20d206,_0x52836d[_0x25fb('0x2a')][_0x25fb('0x2c')]);return _0x497a88(_0x52836d[_0x25fb('0x2a')]['message']);}logger[_0x25fb('0x2a')](_0x25fb('0x25'),_0x20d206,_0x52836d[_0x25fb('0x2a')][_0x25fb('0x2c')]);return _0x4d23be(_0x52836d[_0x25fb('0x2a')][_0x25fb('0x2c')]);}else{logger[_0x25fb('0x24')](_0x25fb('0x25'),_0x20d206,_0x25fb('0x26'));_0x4d23be(_0x52836d['result']['message']);}})['catch'](function(_0x270bb4){logger[_0x25fb('0x2a')](_0x25fb('0x25'),_0x20d206,_0x270bb4);_0x497a88(_0x270bb4);});});}function respondWithStatusCode(_0xb19c97,_0x4a5875){_0x4a5875=_0x4a5875||0xcc;return function(_0x378744){if(_0x378744){return _0xb19c97[_0x25fb('0x2d')](_0x4a5875);}return _0xb19c97[_0x25fb('0x2e')](_0x4a5875)['end']();};}function respondWithResult(_0x25db09,_0x5ba8b0){_0x5ba8b0=_0x5ba8b0||0xc8;return function(_0x4a8235){if(_0x4a8235){return _0x25db09['status'](_0x5ba8b0)['json'](_0x4a8235);}};}function respondWithFilteredResult(_0x1aa592,_0x447087){return function(_0x336602){if(_0x336602){var _0x51cda8=_0x336602[_0x25fb('0x2f')],_0x113692=_0x447087[_0x25fb('0x30')],_0x1d03da=_0x447087[_0x25fb('0x30')]+_0x447087[_0x25fb('0x31')],_0x37dc86;if(_0x1d03da>=_0x51cda8){_0x1d03da=_0x51cda8;_0x37dc86=0xc8;}else{_0x37dc86=0xce;}_0x1aa592[_0x25fb('0x2e')](_0x37dc86);return _0x1aa592[_0x25fb('0x32')](_0x25fb('0x33'),_0x113692+'-'+_0x1d03da+'/'+_0x51cda8)[_0x25fb('0x34')](_0x336602);}return null;};}function patchUpdates(_0x232942){return function(_0x337ef3){try{jsonpatch[_0x25fb('0x35')](_0x337ef3,_0x232942,!![]);}catch(_0xb9021d){return BPromise[_0x25fb('0x36')](_0xb9021d);}return _0x337ef3[_0x25fb('0x37')]();};}function saveUpdates(_0x2d4d7b,_0x536318){return function(_0x3ad43f){if(_0x3ad43f){return _0x3ad43f['update'](_0x2d4d7b)[_0x25fb('0x38')](function(_0x2ccedd){return _0x2ccedd;});}return null;};}function removeEntity(_0x29b919,_0x24513e){return function(_0x1298ab){if(_0x1298ab){return _0x1298ab['destroy']()[_0x25fb('0x38')](function(){_0x29b919[_0x25fb('0x2e')](0xcc)[_0x25fb('0x39')]();});}};}function handleEntityNotFound(_0x2d9eef,_0x5863a8){return function(_0x5961a4){if(!_0x5961a4){_0x2d9eef['sendStatus'](0x194);}return _0x5961a4;};}function handleError(_0x3d2137,_0x3dcbfc){_0x3dcbfc=_0x3dcbfc||0x1f4;return function(_0x22dfb1){logger['error'](_0x22dfb1[_0x25fb('0x3a')]);if(_0x22dfb1[_0x25fb('0x3b')]){delete _0x22dfb1['name'];}_0x3d2137[_0x25fb('0x2e')](_0x3dcbfc)[_0x25fb('0x3c')](_0x22dfb1);};}exports[_0x25fb('0x3d')]=function(_0x5d49c5,_0x57792b){var _0x56180d={},_0x106e1e={},_0x4b784e={'count':0x0,'rows':[]};var _0x76ddfb=db['MailMessage'][_0x25fb('0x3e')];_0x106e1e[_0x25fb('0x3f')]=_[_0x25fb('0x40')](_0x76ddfb);_0x106e1e[_0x25fb('0x41')]=_[_0x25fb('0x40')](_0x5d49c5[_0x25fb('0x41')]);_0x106e1e[_0x25fb('0x42')]=_[_0x25fb('0x43')](_0x106e1e[_0x25fb('0x3f')],_0x106e1e[_0x25fb('0x41')]);_0x56180d[_0x25fb('0x44')]=_[_0x25fb('0x43')](_0x106e1e[_0x25fb('0x3f')],qs[_0x25fb('0x45')](_0x5d49c5[_0x25fb('0x41')][_0x25fb('0x45')]));_0x56180d[_0x25fb('0x44')]=_0x56180d[_0x25fb('0x44')][_0x25fb('0x46')]?_0x56180d['attributes']:_0x106e1e['model'];if(!_0x5d49c5[_0x25fb('0x41')][_0x25fb('0x47')]('nolimit')){_0x56180d[_0x25fb('0x31')]=qs[_0x25fb('0x31')](_0x5d49c5[_0x25fb('0x41')][_0x25fb('0x31')]);_0x56180d[_0x25fb('0x30')]=qs[_0x25fb('0x30')](_0x5d49c5[_0x25fb('0x41')]['offset']);}_0x56180d[_0x25fb('0x48')]=qs[_0x25fb('0x49')](_0x5d49c5[_0x25fb('0x41')][_0x25fb('0x49')]);_0x56180d[_0x25fb('0x4a')]=qs[_0x25fb('0x42')](_[_0x25fb('0x4b')](_0x5d49c5[_0x25fb('0x41')],_0x106e1e[_0x25fb('0x42')]));if(_0x5d49c5[_0x25fb('0x41')]['filter']){_0x56180d[_0x25fb('0x4a')]=_[_0x25fb('0x4c')](_0x56180d[_0x25fb('0x4a')],{'$or':_['map'](_0x76ddfb,function(_0x3a34f9){if(_0x3a34f9['type'][_0x25fb('0x4d')]!=='VIRTUAL'){var _0x3cd070={};_0x3cd070[_0x3a34f9[_0x25fb('0x4e')]]={'$like':'%'+_0x5d49c5['query'][_0x25fb('0x4f')]+'%'};return _0x3cd070;}})});}_0x56180d=_[_0x25fb('0x4c')]({},_0x56180d,_0x5d49c5[_0x25fb('0x50')]);var _0x18ac21={'where':_0x56180d[_0x25fb('0x4a')]};return db[_0x25fb('0x51')]['count'](_0x18ac21)['then'](function(_0x1b6991){_0x4b784e[_0x25fb('0x2f')]=_0x1b6991;if(_0x5d49c5['query'][_0x25fb('0x52')]){_0x56180d['include']=[{'all':!![]}];}return db[_0x25fb('0x51')][_0x25fb('0x53')](_0x56180d);})[_0x25fb('0x38')](function(_0x5b422f){_0x4b784e[_0x25fb('0x54')]=_0x5b422f;return _0x4b784e;})[_0x25fb('0x38')](respondWithFilteredResult(_0x57792b,_0x56180d))[_0x25fb('0x55')](handleError(_0x57792b,null));};exports['show']=function(_0x380eb2,_0x3a79d4){var _0x47c840={'raw':!![],'where':{'id':_0x380eb2[_0x25fb('0x56')]['id']}},_0x10da77={};_0x10da77[_0x25fb('0x3f')]=_[_0x25fb('0x40')](db[_0x25fb('0x51')][_0x25fb('0x3e')]);_0x10da77['query']=_['keys'](_0x380eb2[_0x25fb('0x41')]);_0x10da77[_0x25fb('0x42')]=_[_0x25fb('0x43')](_0x10da77['model'],_0x10da77['query']);_0x47c840['attributes']=_[_0x25fb('0x43')](_0x10da77[_0x25fb('0x3f')],qs[_0x25fb('0x45')](_0x380eb2['query'][_0x25fb('0x45')]));_0x47c840['attributes']=_0x47c840[_0x25fb('0x44')][_0x25fb('0x46')]?_0x47c840[_0x25fb('0x44')]:_0x10da77[_0x25fb('0x3f')];if(_0x380eb2[_0x25fb('0x41')][_0x25fb('0x52')]){_0x47c840[_0x25fb('0x57')]=[{'all':!![]}];}_0x47c840=_[_0x25fb('0x4c')]({},_0x47c840,_0x380eb2['options']);return db[_0x25fb('0x51')]['find'](_0x47c840)['then'](handleEntityNotFound(_0x3a79d4,null))['then'](respondWithResult(_0x3a79d4,null))['catch'](handleError(_0x3a79d4,null));};exports[_0x25fb('0x58')]=function(_0x1ed7b0,_0x424ac0){if(_0x1ed7b0[_0x25fb('0x59')]['id']){delete _0x1ed7b0[_0x25fb('0x59')]['id'];}return db[_0x25fb('0x51')][_0x25fb('0x5a')]({'where':{'id':_0x1ed7b0['params']['id']}})['then'](handleEntityNotFound(_0x424ac0,null))['then'](saveUpdates(_0x1ed7b0[_0x25fb('0x59')],null))[_0x25fb('0x38')](respondWithResult(_0x424ac0,null))[_0x25fb('0x55')](handleError(_0x424ac0,null));};exports[_0x25fb('0x5b')]=function(_0x244fba,_0x2ec92a){return db[_0x25fb('0x51')]['find']({'where':{'id':_0x244fba[_0x25fb('0x56')]['id']}})[_0x25fb('0x38')](handleEntityNotFound(_0x2ec92a,null))['then'](removeEntity(_0x2ec92a,null))[_0x25fb('0x55')](handleError(_0x2ec92a,null));};exports[_0x25fb('0x5c')]=function(_0x1cc526,_0x3050dc){return db[_0x25fb('0x51')][_0x25fb('0x5c')]()[_0x25fb('0x38')](respondWithResult(_0x3050dc,null))[_0x25fb('0x55')](handleError(_0x3050dc,null));};exports['create']=function(_0x4b493c,_0xc3898a){return db[_0x25fb('0x51')][_0x25fb('0x5d')](_0x4b493c[_0x25fb('0x59')])[_0x25fb('0x38')](function(_0x150a8d){if(_0x150a8d){if(_0x150a8d[_0x25fb('0x5e')]==='out'&&!_0x150a8d[_0x25fb('0x5f')]){return db['MailAccount'][_0x25fb('0x60')]({'where':{'id':_0x150a8d['MailAccountId']},'include':[{'model':db[_0x25fb('0x61')],'as':_0x25fb('0x62'),'raw':!![]}]})[_0x25fb('0x38')](function(_0x129523){if(_0x129523&&_0x129523[_0x25fb('0x62')]){var _0x16f066={'tls':{'rejectUnauthorized':![]}};if(_[_0x25fb('0x63')](_0x129523['Smtp'][_0x25fb('0x64')])){_0x16f066[_0x25fb('0x65')]=_0x129523[_0x25fb('0x62')][_0x25fb('0x65')];_0x16f066[_0x25fb('0x66')]=_0x129523[_0x25fb('0x62')][_0x25fb('0x66')];_0x16f066[_0x25fb('0x67')]=_0x129523['Smtp'][_0x25fb('0x67')];if(_0x129523['Smtp'][_0x25fb('0x68')]){_0x16f066[_0x25fb('0x69')]={'user':_0x129523[_0x25fb('0x62')][_0x25fb('0x6a')],'pass':_0x129523[_0x25fb('0x62')][_0x25fb('0x6b')]};}}else{_0x16f066[_0x25fb('0x64')]=_0x129523['Smtp'][_0x25fb('0x64')];_0x16f066['auth']={'user':_0x129523[_0x25fb('0x62')][_0x25fb('0x6a')],'pass':_0x129523[_0x25fb('0x62')]['pass']};_0x16f066[_0x25fb('0x67')]=_0x129523[_0x25fb('0x62')][_0x25fb('0x67')];}if(_0x4b493c[_0x25fb('0x59')][_0x25fb('0x6c')]&&_0x4b493c['body'][_0x25fb('0x6c')]['length']){for(var _0x1edb0c=0x0;_0x1edb0c<_0x4b493c[_0x25fb('0x59')][_0x25fb('0x6c')][_0x25fb('0x46')];_0x1edb0c+=0x1){_0x4b493c[_0x25fb('0x59')][_0x25fb('0x6c')][_0x1edb0c]={'filename':_0x4b493c[_0x25fb('0x59')][_0x25fb('0x6c')][_0x1edb0c][_0x25fb('0x3b')],'path':path['join'](config[_0x25fb('0x6d')],'server/files/attachments',_0x4b493c[_0x25fb('0x59')]['attachments'][_0x1edb0c]['basename'])};}}return{'account':_0x16f066,'message':_0x4b493c[_0x25fb('0x59')]};}})[_0x25fb('0x38')](function(_0x8f9e81){if(_0x8f9e81){return respondWithRpcPromise(_0x25fb('0x6e'),'sendMail',_0x8f9e81,client9003)[_0x25fb('0x38')](function(_0x3e826b){return _0x150a8d[_0x25fb('0x58')]({'read':!![],'messageId':_0x3e826b['messageId'],'sentAt':moment()['format'](_0x25fb('0x6f'))});})['catch'](function(_0xb1615){logger[_0x25fb('0x2a')]('%s',JSON['stringify'](_0xb1615));return _0x150a8d;});}return _0x150a8d;});}return _0x150a8d;}})[_0x25fb('0x38')](respondWithResult(_0xc3898a,0xc9))[_0x25fb('0x55')](handleError(_0xc3898a,null));};var interaction_log=require(_0x25fb('0x17'))(_0x25fb('0x70'));exports[_0x25fb('0x71')]=function(_0x40ba62,_0x46c9e0,_0x353320){var _0x555586={'channel':_0x25fb('0x72')};if(_0x40ba62[_0x25fb('0x59')]['id']){delete _0x40ba62[_0x25fb('0x59')]['id'];}_0x40ba62[_0x25fb('0x59')]['read']=!![];_0x40ba62[_0x25fb('0x59')]['readAt']=moment()[_0x25fb('0x73')](_0x25fb('0x6f'));_0x40ba62[_0x25fb('0x59')][_0x25fb('0x74')]=_0x40ba62[_0x25fb('0x59')]['UserId']||_0x40ba62['user']['id'];return db[_0x25fb('0x51')][_0x25fb('0x5a')]({'where':{'id':_0x40ba62[_0x25fb('0x56')]['id'],'UserId':null},'include':[{'model':db[_0x25fb('0x75')],'as':'Contact'}]})[_0x25fb('0x38')](handleEntityNotFound(_0x46c9e0,null))[_0x25fb('0x38')](saveUpdates(_0x40ba62[_0x25fb('0x59')],null))['then'](function(_0x10bd79){if(_0x10bd79){_0x555586[_0x25fb('0x2c')]=_0x10bd79[_0x25fb('0x76')]({'plain':!![]});return db[_0x25fb('0x77')][_0x25fb('0x5a')]({'where':{'id':_0x10bd79[_0x25fb('0x78')]}});}return null;})['then'](handleEntityNotFound(_0x46c9e0,null))['then'](function(_0x61c05c){if(_0x61c05c){return _0x61c05c[_0x25fb('0x58')]({'UserId':_0x40ba62[_0x25fb('0x59')][_0x25fb('0x74')],'read1stAt':_[_0x25fb('0x63')](_0x61c05c[_0x25fb('0x79')])?moment()[_0x25fb('0x73')](_0x25fb('0x6f')):undefined});}return null;})[_0x25fb('0x38')](function(_0x1efd7c){if(_0x1efd7c){_0x555586[_0x25fb('0x7a')]=_0x1efd7c[_0x25fb('0x76')]({'plain':!![]});interaction_log[_0x25fb('0x24')](_0x25fb('0x7b'),_0x40ba62[_0x25fb('0x6a')]['id'],_0x40ba62[_0x25fb('0x6a')]['name'],_0x40ba62[_0x25fb('0x6a')][_0x25fb('0x7c')],_0x555586[_0x25fb('0x7a')]['id'],_0x40ba62[_0x25fb('0x59')]?JSON[_0x25fb('0x29')](_0x40ba62[_0x25fb('0x59')]):_0x25fb('0x7d'));return respondWithRpcPromise('AcceptMessage',_0x25fb('0x7e'),_0x555586);}return null;})[_0x25fb('0x38')](function(_0x4f7811){if(_0x4f7811){if(_0x40ba62[_0x25fb('0x59')][_0x25fb('0x7f')]){_0x555586[_0x25fb('0x2c')]['interface']=util[_0x25fb('0x73')](_0x25fb('0x80'),_0x40ba62[_0x25fb('0x6a')][_0x25fb('0x3b')]);_0x555586[_0x25fb('0x2c')][_0x25fb('0x81')]=_0x555586['channel'];_0x555586[_0x25fb('0x2c')]['event']='accept';return respondWithRpcPromise(_0x25fb('0x82'),'EventManager',{'event':_0x25fb('0x83'),'message':_0x555586[_0x25fb('0x2c')]},client9002)['then'](function(){return _0x555586;});}return _0x555586;}return null;})[_0x25fb('0x38')](respondWithResult(_0x46c9e0,null))['catch'](handleError(_0x46c9e0,null));};var interaction_log=require(_0x25fb('0x17'))(_0x25fb('0x70'));exports[_0x25fb('0x36')]=function(_0x11df67,_0x288fcd,_0x4852bc){var _0x1332de={'agent':{},'channel':_0x25fb('0x72')};if(_0x11df67[_0x25fb('0x59')]['id']){delete _0x11df67[_0x25fb('0x59')]['id'];}_0x11df67['body']['UserId']=_0x11df67['body'][_0x25fb('0x74')]||_0x11df67[_0x25fb('0x6a')]['id'];_0x1332de['agent']['id']=_0x11df67[_0x25fb('0x59')][_0x25fb('0x74')];return db[_0x25fb('0x51')][_0x25fb('0x5a')]({'where':{'id':_0x11df67[_0x25fb('0x56')]['id'],'UserId':null}})[_0x25fb('0x38')](handleEntityNotFound(_0x288fcd,null))[_0x25fb('0x38')](function(_0x5bcd93){if(_0x5bcd93){_0x1332de[_0x25fb('0x2c')]=_0x5bcd93[_0x25fb('0x76')]({'plain':!![]});return db[_0x25fb('0x77')][_0x25fb('0x5a')]({'where':{'id':_0x5bcd93[_0x25fb('0x78')]}});}return null;})['then'](handleEntityNotFound(_0x288fcd,null))[_0x25fb('0x38')](function(_0x521cbb){if(_0x521cbb){_0x1332de[_0x25fb('0x7a')]=_0x521cbb[_0x25fb('0x76')]({'plain':!![]});interaction_log[_0x25fb('0x24')](_0x25fb('0x84'),_0x11df67[_0x25fb('0x6a')]['id'],_0x11df67[_0x25fb('0x6a')][_0x25fb('0x3b')],_0x11df67[_0x25fb('0x6a')]['role'],_0x1332de[_0x25fb('0x7a')]['id'],_0x11df67[_0x25fb('0x59')]?JSON[_0x25fb('0x29')](_0x11df67['body']):_0x25fb('0x7d'));return respondWithRpcPromise(_0x25fb('0x85'),'rejectMessage',_0x1332de);}return null;})['then'](function(_0x379ab3){if(_0x379ab3){_0x379ab3[_0x25fb('0x2c')][_0x25fb('0x86')]=util[_0x25fb('0x73')](_0x25fb('0x80'),_0x11df67[_0x25fb('0x6a')][_0x25fb('0x3b')]);_0x379ab3[_0x25fb('0x2c')]['channel']=_0x1332de[_0x25fb('0x81')];_0x379ab3[_0x25fb('0x2c')][_0x25fb('0x87')]=_0x25fb('0x36');respondWithRpcPromise(_0x25fb('0x82'),_0x25fb('0x82'),{'event':_0x25fb('0x88'),'message':_0x379ab3[_0x25fb('0x2c')]},client9002);return _0x1332de;}return null;})['then'](respondWithResult(_0x288fcd,null))['catch'](handleError(_0x288fcd,null));};exports['download']=function(_0x47eab3,_0x2f09f8){var _0x35ac08=moment()[_0x25fb('0x89')]()['toString']();var _0x5c8c07=path['join'](config[_0x25fb('0x6d')],_0x25fb('0x8a'),_0x25fb('0x8b'),_0x25fb('0x8c'));var _0x44eade=path['join'](config[_0x25fb('0x6d')],'server',_0x25fb('0x8b'),_0x25fb('0x6c'));var _0x10975b=util[_0x25fb('0x73')](_0x25fb('0x8d'),_0x35ac08);return db['MailMessage'][_0x25fb('0x5a')]({'where':{'id':_0x47eab3[_0x25fb('0x56')]['id']},'attributes':['id',_0x25fb('0x59'),_0x25fb('0x8e'),'to','cc','bcc',_0x25fb('0x8f'),_0x25fb('0x90')],'include':_0x47eab3[_0x25fb('0x41')][_0x25fb('0x6c')]?[{'model':db[_0x25fb('0x91')],'as':_0x25fb('0x92')}]:undefined})[_0x25fb('0x38')](handleEntityNotFound(_0x2f09f8,null))[_0x25fb('0x38')](function(_0x5f3911){if(_0x5f3911){var _0x304ae7=_0x5f3911;var _0x2e2f23={'from':_0x304ae7['from'],'to':_0x304ae7['to'],'subject':_0x304ae7[_0x25fb('0x8f')],'html':_0x304ae7[_0x25fb('0x59')],'headers':{'Date':moment(_0x304ae7[_0x25fb('0x90')])['format'](_0x25fb('0x93'))},'attachments':[]};if(_0x5f3911['cc']){_0x2e2f23[_0x25fb('0x94')]['Cc']=_0x5f3911['cc'];}if(_0x5f3911[_0x25fb('0x95')]){_0x2e2f23[_0x25fb('0x94')][_0x25fb('0x96')]=_0x5f3911['bcc'];}return new BPromise(function(_0x20343e,_0x4753e2){if(_0x5f3911[_0x25fb('0x92')]){for(var _0x51cd56=0x0;_0x51cd56<_0x5f3911[_0x25fb('0x92')]['length'];_0x51cd56++){var _0x1b9481=_0x5f3911['Attachments'][_0x51cd56];var _0x868217=path[_0x25fb('0x97')](_0x44eade,_0x1b9481['basename']);if(fs[_0x25fb('0x98')](_0x868217)){_0x2e2f23[_0x25fb('0x6c')][_0x25fb('0x99')]({'name':_0x1b9481[_0x25fb('0x3b')],'contentType':_0x1b9481[_0x25fb('0x9a')],'data':fs['readFileSync'](_0x868217)});}}}emlformat['build'](_0x2e2f23,function(_0x2ffa69,_0x280843){if(_0x2ffa69)return _0x4753e2(_0x2ffa69);fs[_0x25fb('0x9b')](path[_0x25fb('0x97')](_0x5c8c07,_0x10975b),_0x280843);return _0x20343e(_0x280843);});});}})[_0x25fb('0x38')](function(_0x2ab2f4){if(_0x2ab2f4){return _0x2f09f8['download'](path[_0x25fb('0x97')](_0x5c8c07,_0x10975b),_0x10975b,function(_0x3c4228){if(_0x3c4228){console[_0x25fb('0x9c')](_0x25fb('0x9d'),_0x3c4228);}else{fs['unlinkSync'](path['join'](_0x5c8c07,_0x10975b));}});}})[_0x25fb('0x55')](handleError(_0x2f09f8,null));};
\ No newline at end of file
+var _0x899f=['attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','filter','merge','type','key','VIRTUAL','field','options','includeAll','include','rows','show','params','find','body','describe','create','direction','secret','MailAccount','findOne','MailAccountId','MailServerOut','Smtp','isNil','service','host','port','secure','authentication','auth','user','pass','attachments','join','root','server/files/attachments','basename','SendMail','YYYY-MM-DD\x20HH:mm:ss','../../config/logger','mail-interactions','mail','readAt','format','UserId','CmContact','Contact','get','MailInteraction','MailInteractionId','read1stAt','interaction','[MAILMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','acceptMessage','manual','interface','channel','event','accept','EventManager','acceptmessage','agent','[MAILMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','null','RejectMessage','rejectMessage','toString','server','files','tmp','message-%s.eml','from','bcc','subject','createdAt','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','Bcc','Attachments','existsSync','push','readFileSync','build','writeFileSync','download','err','unlinkSync','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','jsforce','desk.js','ioredis','../../components/auth/service','../../config/license/hardware','../../config/utils','../../config/environment','redis','localhost','socket.io-emitter','./mailMessage.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','MailMessage,\x20%s,\x20%s','request\x20sent','debug','MailMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','update','destroy','stack','name','send','index','MailMessage','rawAttributes','model','keys','query','filters','intersection','fields'];(function(_0x21a034,_0x1d55d9){var _0x52d6c2=function(_0x2ec4a2){while(--_0x2ec4a2){_0x21a034['push'](_0x21a034['shift']());}};_0x52d6c2(++_0x1d55d9);}(_0x899f,0x1a2));var _0xf899=function(_0x3cfd57,_0x537cf5){_0x3cfd57=_0x3cfd57-0x0;var _0x527d26=_0x899f[_0x3cfd57];return _0x527d26;};'use strict';var pdf=require(_0xf899('0x0'));var emlformat=require(_0xf899('0x1'));var rimraf=require(_0xf899('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xf899('0x3'));var rp=require(_0xf899('0x4'));var moment=require('moment');var BPromise=require(_0xf899('0x5'));var Mustache=require(_0xf899('0x6'));var util=require(_0xf899('0x7'));var path=require(_0xf899('0x8'));var sox=require(_0xf899('0x9'));var csv=require(_0xf899('0xa'));var ejs=require(_0xf899('0xb'));var fs=require('fs');var _=require(_0xf899('0xc'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xf899('0xd'));var deskjs=require(_0xf899('0xe'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0xf899('0xf'));var authService=require(_0xf899('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xf899('0x11'));var logger=require('../../config/logger')('api');var utils=require(_0xf899('0x12'));var config=require(_0xf899('0x13'));var db=require('../../mysqldb')['db'];config[_0xf899('0x14')]=_['defaults'](config[_0xf899('0x14')],{'host':_0xf899('0x15'),'port':0x18eb});var socket=require(_0xf899('0x16'))(new Redis(config[_0xf899('0x14')]));require(_0xf899('0x17'))['register'](socket);var jayson=require(_0xf899('0x18'));var client=jayson[_0xf899('0x19')][_0xf899('0x1a')]({'port':0x232c});var client9003=jayson[_0xf899('0x19')][_0xf899('0x1a')]({'port':0x232b});var client9002=jayson[_0xf899('0x19')][_0xf899('0x1a')]({'port':0x232a});function checkPasswordPattern(_0x12757f,_0xdabeb,_0x267be3){if(_0x267be3){var _0x3beefa=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3beefa[_0xf899('0x1b')](_0xdabeb)){return _0x12757f;}else{throw new Error(_0xf899('0x1c'));}}else{return _0x12757f;}}function respondWithRpcPromise(_0x5d70df,_0x6e3e4d,_0x140689,_0x451e17){return new BPromise(function(_0x2c8b35,_0x1d25d8){var _0x297394=_0x451e17||client;return _0x297394['request'](_0x5d70df,_0x140689)[_0xf899('0x1d')](function(_0x42d338){logger[_0xf899('0x1e')](_0xf899('0x1f'),_0x6e3e4d,_0xf899('0x20'));logger[_0xf899('0x21')](_0xf899('0x22'),_0x6e3e4d,'request\x20sent',JSON[_0xf899('0x23')](_0x42d338));if(_0x42d338[_0xf899('0x24')]){if(_0x42d338[_0xf899('0x24')][_0xf899('0x25')]===0x1f4){logger['error']('MailMessage,\x20%s,\x20%s',_0x6e3e4d,_0x42d338[_0xf899('0x24')][_0xf899('0x26')]);return _0x1d25d8(_0x42d338[_0xf899('0x24')][_0xf899('0x26')]);}logger[_0xf899('0x24')](_0xf899('0x1f'),_0x6e3e4d,_0x42d338[_0xf899('0x24')][_0xf899('0x26')]);return _0x2c8b35(_0x42d338[_0xf899('0x24')]['message']);}else{logger[_0xf899('0x1e')](_0xf899('0x1f'),_0x6e3e4d,'request\x20sent');_0x2c8b35(_0x42d338[_0xf899('0x27')][_0xf899('0x26')]);}})[_0xf899('0x28')](function(_0x6ba9c5){logger[_0xf899('0x24')](_0xf899('0x1f'),_0x6e3e4d,_0x6ba9c5);_0x1d25d8(_0x6ba9c5);});});}function respondWithStatusCode(_0x4ce3b9,_0x2ef0bc){_0x2ef0bc=_0x2ef0bc||0xcc;return function(_0x1147ee){if(_0x1147ee){return _0x4ce3b9[_0xf899('0x29')](_0x2ef0bc);}return _0x4ce3b9[_0xf899('0x2a')](_0x2ef0bc)[_0xf899('0x2b')]();};}function respondWithResult(_0x50c080,_0x988ce5){_0x988ce5=_0x988ce5||0xc8;return function(_0x5d9f2d){if(_0x5d9f2d){return _0x50c080[_0xf899('0x2a')](_0x988ce5)[_0xf899('0x2c')](_0x5d9f2d);}};}function respondWithFilteredResult(_0x6ca705,_0xcda662){return function(_0x56e761){if(_0x56e761){var _0x43ccdf=_0x56e761[_0xf899('0x2d')],_0x154888=_0xcda662['offset'],_0x1a49d4=_0xcda662[_0xf899('0x2e')]+_0xcda662['limit'],_0x513614;if(_0x1a49d4>=_0x43ccdf){_0x1a49d4=_0x43ccdf;_0x513614=0xc8;}else{_0x513614=0xce;}_0x6ca705['status'](_0x513614);return _0x6ca705[_0xf899('0x2f')](_0xf899('0x30'),_0x154888+'-'+_0x1a49d4+'/'+_0x43ccdf)[_0xf899('0x2c')](_0x56e761);}return null;};}function patchUpdates(_0x1a99fa){return function(_0x4b18b6){try{jsonpatch['apply'](_0x4b18b6,_0x1a99fa,!![]);}catch(_0xa7eaf8){return BPromise[_0xf899('0x31')](_0xa7eaf8);}return _0x4b18b6[_0xf899('0x32')]();};}function saveUpdates(_0x5239ff,_0x6a291d){return function(_0x2ccb36){if(_0x2ccb36){return _0x2ccb36[_0xf899('0x33')](_0x5239ff)[_0xf899('0x1d')](function(_0x18b42a){return _0x18b42a;});}return null;};}function removeEntity(_0x4ab57a,_0x110ce8){return function(_0x32a414){if(_0x32a414){return _0x32a414[_0xf899('0x34')]()['then'](function(){_0x4ab57a['status'](0xcc)[_0xf899('0x2b')]();});}};}function handleEntityNotFound(_0x175d8d,_0x4c4bcc){return function(_0x550471){if(!_0x550471){_0x175d8d['sendStatus'](0x194);}return _0x550471;};}function handleError(_0x162c18,_0x898807){_0x898807=_0x898807||0x1f4;return function(_0x242924){logger['error'](_0x242924[_0xf899('0x35')]);if(_0x242924[_0xf899('0x36')]){delete _0x242924[_0xf899('0x36')];}_0x162c18['status'](_0x898807)[_0xf899('0x37')](_0x242924);};}exports[_0xf899('0x38')]=function(_0x321124,_0x49f5ea){var _0x400d1b={},_0x5ab18d={},_0xfdf521={'count':0x0,'rows':[]};var _0x3aabd8=db[_0xf899('0x39')][_0xf899('0x3a')];_0x5ab18d[_0xf899('0x3b')]=_[_0xf899('0x3c')](_0x3aabd8);_0x5ab18d['query']=_['keys'](_0x321124[_0xf899('0x3d')]);_0x5ab18d[_0xf899('0x3e')]=_[_0xf899('0x3f')](_0x5ab18d['model'],_0x5ab18d[_0xf899('0x3d')]);_0x400d1b['attributes']=_[_0xf899('0x3f')](_0x5ab18d[_0xf899('0x3b')],qs[_0xf899('0x40')](_0x321124[_0xf899('0x3d')][_0xf899('0x40')]));_0x400d1b[_0xf899('0x41')]=_0x400d1b['attributes'][_0xf899('0x42')]?_0x400d1b['attributes']:_0x5ab18d[_0xf899('0x3b')];if(!_0x321124['query'][_0xf899('0x43')](_0xf899('0x44'))){_0x400d1b[_0xf899('0x45')]=qs['limit'](_0x321124[_0xf899('0x3d')][_0xf899('0x45')]);_0x400d1b[_0xf899('0x2e')]=qs[_0xf899('0x2e')](_0x321124['query'][_0xf899('0x2e')]);}_0x400d1b[_0xf899('0x46')]=qs[_0xf899('0x47')](_0x321124[_0xf899('0x3d')][_0xf899('0x47')]);_0x400d1b[_0xf899('0x48')]=qs[_0xf899('0x3e')](_['pick'](_0x321124[_0xf899('0x3d')],_0x5ab18d[_0xf899('0x3e')]));if(_0x321124[_0xf899('0x3d')][_0xf899('0x49')]){_0x400d1b[_0xf899('0x48')]=_[_0xf899('0x4a')](_0x400d1b['where'],{'$or':_['map'](_0x3aabd8,function(_0x271110){if(_0x271110[_0xf899('0x4b')][_0xf899('0x4c')]!==_0xf899('0x4d')){var _0x194c15={};_0x194c15[_0x271110[_0xf899('0x4e')]]={'$like':'%'+_0x321124[_0xf899('0x3d')]['filter']+'%'};return _0x194c15;}})});}_0x400d1b=_['merge']({},_0x400d1b,_0x321124[_0xf899('0x4f')]);var _0x404a38={'where':_0x400d1b[_0xf899('0x48')]};return db['MailMessage'][_0xf899('0x2d')](_0x404a38)['then'](function(_0x4af2b7){_0xfdf521[_0xf899('0x2d')]=_0x4af2b7;if(_0x321124[_0xf899('0x3d')][_0xf899('0x50')]){_0x400d1b[_0xf899('0x51')]=[{'all':!![]}];}return db['MailMessage']['findAll'](_0x400d1b);})[_0xf899('0x1d')](function(_0x1a2096){_0xfdf521[_0xf899('0x52')]=_0x1a2096;return _0xfdf521;})[_0xf899('0x1d')](respondWithFilteredResult(_0x49f5ea,_0x400d1b))[_0xf899('0x28')](handleError(_0x49f5ea,null));};exports[_0xf899('0x53')]=function(_0x11f02d,_0xb531f4){var _0xa469b1={'raw':!![],'where':{'id':_0x11f02d[_0xf899('0x54')]['id']}},_0xc6d0d5={};_0xc6d0d5['model']=_[_0xf899('0x3c')](db[_0xf899('0x39')]['rawAttributes']);_0xc6d0d5[_0xf899('0x3d')]=_[_0xf899('0x3c')](_0x11f02d[_0xf899('0x3d')]);_0xc6d0d5[_0xf899('0x3e')]=_[_0xf899('0x3f')](_0xc6d0d5[_0xf899('0x3b')],_0xc6d0d5[_0xf899('0x3d')]);_0xa469b1[_0xf899('0x41')]=_['intersection'](_0xc6d0d5['model'],qs[_0xf899('0x40')](_0x11f02d[_0xf899('0x3d')][_0xf899('0x40')]));_0xa469b1['attributes']=_0xa469b1['attributes'][_0xf899('0x42')]?_0xa469b1[_0xf899('0x41')]:_0xc6d0d5[_0xf899('0x3b')];if(_0x11f02d[_0xf899('0x3d')][_0xf899('0x50')]){_0xa469b1[_0xf899('0x51')]=[{'all':!![]}];}_0xa469b1=_[_0xf899('0x4a')]({},_0xa469b1,_0x11f02d[_0xf899('0x4f')]);return db['MailMessage'][_0xf899('0x55')](_0xa469b1)[_0xf899('0x1d')](handleEntityNotFound(_0xb531f4,null))[_0xf899('0x1d')](respondWithResult(_0xb531f4,null))[_0xf899('0x28')](handleError(_0xb531f4,null));};exports[_0xf899('0x33')]=function(_0x493298,_0x43e675){if(_0x493298['body']['id']){delete _0x493298[_0xf899('0x56')]['id'];}return db['MailMessage'][_0xf899('0x55')]({'where':{'id':_0x493298[_0xf899('0x54')]['id']}})['then'](handleEntityNotFound(_0x43e675,null))[_0xf899('0x1d')](saveUpdates(_0x493298[_0xf899('0x56')],null))['then'](respondWithResult(_0x43e675,null))[_0xf899('0x28')](handleError(_0x43e675,null));};exports['destroy']=function(_0x19f0a2,_0x4bda00){return db[_0xf899('0x39')][_0xf899('0x55')]({'where':{'id':_0x19f0a2['params']['id']}})[_0xf899('0x1d')](handleEntityNotFound(_0x4bda00,null))['then'](removeEntity(_0x4bda00,null))['catch'](handleError(_0x4bda00,null));};exports[_0xf899('0x57')]=function(_0xdaaca5,_0x316595){return db['MailMessage']['describe']()[_0xf899('0x1d')](respondWithResult(_0x316595,null))[_0xf899('0x28')](handleError(_0x316595,null));};exports[_0xf899('0x58')]=function(_0x26e472,_0x123fe9){return db[_0xf899('0x39')]['create'](_0x26e472['body'])[_0xf899('0x1d')](function(_0x38a600){if(_0x38a600){if(_0x38a600[_0xf899('0x59')]==='out'&&!_0x38a600[_0xf899('0x5a')]){return db[_0xf899('0x5b')][_0xf899('0x5c')]({'where':{'id':_0x38a600[_0xf899('0x5d')]},'include':[{'model':db[_0xf899('0x5e')],'as':'Smtp','raw':!![]}]})[_0xf899('0x1d')](function(_0x17271f){if(_0x17271f&&_0x17271f[_0xf899('0x5f')]){var _0x57a67f={'tls':{'rejectUnauthorized':![]}};if(_[_0xf899('0x60')](_0x17271f[_0xf899('0x5f')][_0xf899('0x61')])){_0x57a67f[_0xf899('0x62')]=_0x17271f[_0xf899('0x5f')][_0xf899('0x62')];_0x57a67f[_0xf899('0x63')]=_0x17271f['Smtp'][_0xf899('0x63')];_0x57a67f[_0xf899('0x64')]=_0x17271f[_0xf899('0x5f')][_0xf899('0x64')];if(_0x17271f[_0xf899('0x5f')][_0xf899('0x65')]){_0x57a67f[_0xf899('0x66')]={'user':_0x17271f[_0xf899('0x5f')][_0xf899('0x67')],'pass':_0x17271f['Smtp'][_0xf899('0x68')]};}}else{_0x57a67f[_0xf899('0x61')]=_0x17271f[_0xf899('0x5f')][_0xf899('0x61')];_0x57a67f[_0xf899('0x66')]={'user':_0x17271f[_0xf899('0x5f')][_0xf899('0x67')],'pass':_0x17271f[_0xf899('0x5f')][_0xf899('0x68')]};_0x57a67f[_0xf899('0x64')]=_0x17271f[_0xf899('0x5f')]['secure'];}if(_0x26e472['body'][_0xf899('0x69')]&&_0x26e472[_0xf899('0x56')][_0xf899('0x69')]['length']){for(var _0x240325=0x0;_0x240325<_0x26e472[_0xf899('0x56')][_0xf899('0x69')][_0xf899('0x42')];_0x240325+=0x1){_0x26e472[_0xf899('0x56')]['attachments'][_0x240325]={'filename':_0x26e472[_0xf899('0x56')]['attachments'][_0x240325]['name'],'path':path[_0xf899('0x6a')](config[_0xf899('0x6b')],_0xf899('0x6c'),_0x26e472[_0xf899('0x56')][_0xf899('0x69')][_0x240325][_0xf899('0x6d')])};}}return{'account':_0x57a67f,'message':_0x26e472[_0xf899('0x56')]};}})['then'](function(_0x520922){if(_0x520922){return respondWithRpcPromise(_0xf899('0x6e'),'sendMail',_0x520922,client9003)[_0xf899('0x1d')](function(_0x356c2a){return _0x38a600[_0xf899('0x33')]({'read':!![],'messageId':_0x356c2a['messageId'],'sentAt':moment()['format'](_0xf899('0x6f'))});})['catch'](function(_0x387b34){logger[_0xf899('0x24')]('%s',JSON[_0xf899('0x23')](_0x387b34));return _0x38a600;});}return _0x38a600;});}return _0x38a600;}})[_0xf899('0x1d')](respondWithResult(_0x123fe9,0xc9))[_0xf899('0x28')](handleError(_0x123fe9,null));};var interaction_log=require(_0xf899('0x70'))(_0xf899('0x71'));exports['accept']=function(_0x47e9e0,_0x451f6d,_0x19ca76){var _0x3a9560={'channel':_0xf899('0x72')};if(_0x47e9e0[_0xf899('0x56')]['id']){delete _0x47e9e0[_0xf899('0x56')]['id'];}_0x47e9e0[_0xf899('0x56')]['read']=!![];_0x47e9e0[_0xf899('0x56')][_0xf899('0x73')]=moment()[_0xf899('0x74')](_0xf899('0x6f'));_0x47e9e0[_0xf899('0x56')][_0xf899('0x75')]=_0x47e9e0[_0xf899('0x56')][_0xf899('0x75')]||_0x47e9e0['user']['id'];return db[_0xf899('0x39')][_0xf899('0x55')]({'where':{'id':_0x47e9e0[_0xf899('0x54')]['id'],'UserId':null},'include':[{'model':db[_0xf899('0x76')],'as':_0xf899('0x77')}]})[_0xf899('0x1d')](handleEntityNotFound(_0x451f6d,null))[_0xf899('0x1d')](saveUpdates(_0x47e9e0[_0xf899('0x56')],null))['then'](function(_0xae1a1b){if(_0xae1a1b){_0x3a9560[_0xf899('0x26')]=_0xae1a1b[_0xf899('0x78')]({'plain':!![]});return db[_0xf899('0x79')][_0xf899('0x55')]({'where':{'id':_0xae1a1b[_0xf899('0x7a')]}});}return null;})[_0xf899('0x1d')](handleEntityNotFound(_0x451f6d,null))[_0xf899('0x1d')](function(_0x145478){if(_0x145478){return _0x145478['update']({'UserId':_0x47e9e0[_0xf899('0x56')][_0xf899('0x75')],'read1stAt':_[_0xf899('0x60')](_0x145478[_0xf899('0x7b')])?moment()[_0xf899('0x74')](_0xf899('0x6f')):undefined});}return null;})[_0xf899('0x1d')](function(_0x5706a1){if(_0x5706a1){_0x3a9560[_0xf899('0x7c')]=_0x5706a1['get']({'plain':!![]});interaction_log[_0xf899('0x1e')](_0xf899('0x7d'),_0x47e9e0[_0xf899('0x67')]['id'],_0x47e9e0[_0xf899('0x67')]['name'],_0x47e9e0['user'][_0xf899('0x7e')],_0x3a9560['interaction']['id'],_0x47e9e0['body']?JSON['stringify'](_0x47e9e0[_0xf899('0x56')]):'null');return respondWithRpcPromise('AcceptMessage',_0xf899('0x7f'),_0x3a9560);}return null;})[_0xf899('0x1d')](function(_0x554923){if(_0x554923){if(_0x47e9e0[_0xf899('0x56')][_0xf899('0x80')]){_0x3a9560['message'][_0xf899('0x81')]=util[_0xf899('0x74')]('SIP/%s',_0x47e9e0['user'][_0xf899('0x36')]);_0x3a9560[_0xf899('0x26')]['channel']=_0x3a9560[_0xf899('0x82')];_0x3a9560[_0xf899('0x26')][_0xf899('0x83')]=_0xf899('0x84');return respondWithRpcPromise(_0xf899('0x85'),_0xf899('0x85'),{'event':_0xf899('0x86'),'message':_0x3a9560[_0xf899('0x26')]},client9002)[_0xf899('0x1d')](function(){return _0x3a9560;});}return _0x3a9560;}return null;})[_0xf899('0x1d')](respondWithResult(_0x451f6d,null))[_0xf899('0x28')](handleError(_0x451f6d,null));};var interaction_log=require(_0xf899('0x70'))(_0xf899('0x71'));exports[_0xf899('0x31')]=function(_0x2f00b3,_0x19bb23,_0x134b1e){var _0x1a3ed0={'agent':{},'channel':_0xf899('0x72')};if(_0x2f00b3[_0xf899('0x56')]['id']){delete _0x2f00b3[_0xf899('0x56')]['id'];}_0x2f00b3['body']['UserId']=_0x2f00b3[_0xf899('0x56')][_0xf899('0x75')]||_0x2f00b3[_0xf899('0x67')]['id'];_0x1a3ed0[_0xf899('0x87')]['id']=_0x2f00b3[_0xf899('0x56')][_0xf899('0x75')];return db[_0xf899('0x39')][_0xf899('0x55')]({'where':{'id':_0x2f00b3[_0xf899('0x54')]['id'],'UserId':null}})[_0xf899('0x1d')](handleEntityNotFound(_0x19bb23,null))[_0xf899('0x1d')](function(_0x4b027c){if(_0x4b027c){_0x1a3ed0[_0xf899('0x26')]=_0x4b027c['get']({'plain':!![]});return db[_0xf899('0x79')][_0xf899('0x55')]({'where':{'id':_0x4b027c[_0xf899('0x7a')]}});}return null;})[_0xf899('0x1d')](handleEntityNotFound(_0x19bb23,null))[_0xf899('0x1d')](function(_0x45e0d7){if(_0x45e0d7){_0x1a3ed0[_0xf899('0x7c')]=_0x45e0d7[_0xf899('0x78')]({'plain':!![]});interaction_log[_0xf899('0x1e')](_0xf899('0x88'),_0x2f00b3[_0xf899('0x67')]['id'],_0x2f00b3[_0xf899('0x67')][_0xf899('0x36')],_0x2f00b3[_0xf899('0x67')][_0xf899('0x7e')],_0x1a3ed0[_0xf899('0x7c')]['id'],_0x2f00b3['body']?JSON[_0xf899('0x23')](_0x2f00b3['body']):_0xf899('0x89'));return respondWithRpcPromise(_0xf899('0x8a'),_0xf899('0x8b'),_0x1a3ed0);}return null;})['then'](function(_0x3f1f9d){if(_0x3f1f9d){_0x3f1f9d[_0xf899('0x26')][_0xf899('0x81')]=util['format']('SIP/%s',_0x2f00b3[_0xf899('0x67')][_0xf899('0x36')]);_0x3f1f9d[_0xf899('0x26')][_0xf899('0x82')]=_0x1a3ed0[_0xf899('0x82')];_0x3f1f9d['message'][_0xf899('0x83')]=_0xf899('0x31');respondWithRpcPromise(_0xf899('0x85'),_0xf899('0x85'),{'event':'rejectmessage','message':_0x3f1f9d[_0xf899('0x26')]},client9002);return _0x1a3ed0;}return null;})['then'](respondWithResult(_0x19bb23,null))[_0xf899('0x28')](handleError(_0x19bb23,null));};exports['download']=function(_0x4cecbb,_0xe6f9e8){var _0x5f29fb=moment()['unix']()[_0xf899('0x8c')]();var _0x2d43c6=path['join'](config[_0xf899('0x6b')],_0xf899('0x8d'),_0xf899('0x8e'),_0xf899('0x8f'));var _0x35ab3c=path[_0xf899('0x6a')](config[_0xf899('0x6b')],'server',_0xf899('0x8e'),'attachments');var _0x48b8a1=util[_0xf899('0x74')](_0xf899('0x90'),_0x5f29fb);return db[_0xf899('0x39')][_0xf899('0x55')]({'where':{'id':_0x4cecbb['params']['id']},'attributes':['id',_0xf899('0x56'),_0xf899('0x91'),'to','cc',_0xf899('0x92'),_0xf899('0x93'),_0xf899('0x94')],'include':_0x4cecbb[_0xf899('0x3d')][_0xf899('0x69')]?[{'model':db['Attachment'],'as':'Attachments'}]:undefined})[_0xf899('0x1d')](handleEntityNotFound(_0xe6f9e8,null))[_0xf899('0x1d')](function(_0x239cbb){if(_0x239cbb){var _0x11175c=_0x239cbb;var _0x32f2d4={'from':_0x11175c[_0xf899('0x91')],'to':_0x11175c['to'],'subject':_0x11175c[_0xf899('0x93')],'html':_0x11175c[_0xf899('0x56')],'headers':{'Date':moment(_0x11175c[_0xf899('0x94')])['format'](_0xf899('0x95'))},'attachments':[]};if(_0x239cbb['cc']){_0x32f2d4[_0xf899('0x96')]['Cc']=_0x239cbb['cc'];}if(_0x239cbb[_0xf899('0x92')]){_0x32f2d4[_0xf899('0x96')][_0xf899('0x97')]=_0x239cbb[_0xf899('0x92')];}return new BPromise(function(_0x3f0570,_0x437836){if(_0x239cbb['Attachments']){for(var _0x4cfbd6=0x0;_0x4cfbd6<_0x239cbb[_0xf899('0x98')][_0xf899('0x42')];_0x4cfbd6++){var _0x227fc5=_0x239cbb[_0xf899('0x98')][_0x4cfbd6];var _0x325b54=path['join'](_0x35ab3c,_0x227fc5[_0xf899('0x6d')]);if(fs[_0xf899('0x99')](_0x325b54)){_0x32f2d4[_0xf899('0x69')][_0xf899('0x9a')]({'name':_0x227fc5['name'],'contentType':_0x227fc5[_0xf899('0x4b')],'data':fs[_0xf899('0x9b')](_0x325b54)});}}}emlformat[_0xf899('0x9c')](_0x32f2d4,function(_0x548a81,_0x15182c){if(_0x548a81)return _0x437836(_0x548a81);fs[_0xf899('0x9d')](path[_0xf899('0x6a')](_0x2d43c6,_0x48b8a1),_0x15182c);return _0x3f0570(_0x15182c);});});}})[_0xf899('0x1d')](function(_0x1b69f7){if(_0x1b69f7){return _0xe6f9e8[_0xf899('0x9e')](path[_0xf899('0x6a')](_0x2d43c6,_0x48b8a1),_0x48b8a1,function(_0x24182d){if(_0x24182d){console['log'](_0xf899('0x9f'),_0x24182d);}else{fs[_0xf899('0xa0')](path['join'](_0x2d43c6,_0x48b8a1));}});}})['catch'](handleError(_0xe6f9e8,null));};
\ No newline at end of file
index 6c12fb8..e5a1ff0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x033a=['emit','hasOwnProperty','hook','exports','events','MailMessage','setMaxListeners','save','update','remove'];(function(_0x59ed8c,_0x497c0f){var _0x2ae760=function(_0x5e0c08){while(--_0x5e0c08){_0x59ed8c['push'](_0x59ed8c['shift']());}};_0x2ae760(++_0x497c0f);}(_0x033a,0xcc));var _0xa033=function(_0x53f964,_0x3b52b8){_0x53f964=_0x53f964-0x0;var _0x17be6c=_0x033a[_0x53f964];return _0x17be6c;};'use strict';var EventEmitter=require(_0xa033('0x0'));var MailMessage=require('../../mysqldb')['db'][_0xa033('0x1')];var MailMessageEvents=new EventEmitter();MailMessageEvents[_0xa033('0x2')](0x0);var events={'afterCreate':_0xa033('0x3'),'afterUpdate':_0xa033('0x4'),'afterDestroy':_0xa033('0x5')};function emitEvent(_0x29d843){return function(_0x206267,_0x189908,_0x2a23b7){MailMessageEvents[_0xa033('0x6')](_0x29d843+':'+_0x206267['id'],_0x206267);MailMessageEvents['emit'](_0x29d843,_0x206267);_0x2a23b7(null);};}for(var e in events){if(events[_0xa033('0x7')](e)){var event=events[e];MailMessage[_0xa033('0x8')](e,emitEvent(event));}}module[_0xa033('0x9')]=MailMessageEvents;
\ No newline at end of file
+var _0x4cf1=['update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','MailMessage','save'];(function(_0x138adb,_0x193fee){var _0x1b27f2=function(_0x5e97a2){while(--_0x5e97a2){_0x138adb['push'](_0x138adb['shift']());}};_0x1b27f2(++_0x193fee);}(_0x4cf1,0x1dc));var _0x14cf=function(_0x359377,_0x1a63ef){_0x359377=_0x359377-0x0;var _0x8be18a=_0x4cf1[_0x359377];return _0x8be18a;};'use strict';var EventEmitter=require(_0x14cf('0x0'));var MailMessage=require(_0x14cf('0x1'))['db'][_0x14cf('0x2')];var MailMessageEvents=new EventEmitter();MailMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x14cf('0x3'),'afterUpdate':_0x14cf('0x4'),'afterDestroy':_0x14cf('0x5')};function emitEvent(_0x41154c){return function(_0x1a408f,_0x1b05cc,_0x21df4e){MailMessageEvents[_0x14cf('0x6')](_0x41154c+':'+_0x1a408f['id'],_0x1a408f);MailMessageEvents['emit'](_0x41154c,_0x1a408f);_0x21df4e(null);};}for(var e in events){if(events[_0x14cf('0x7')](e)){var event=events[e];MailMessage[_0x14cf('0x8')](e,emitEvent(event));}}module[_0x14cf('0x9')]=MailMessageEvents;
\ No newline at end of file
index f1e34d1..c10f281 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x63e6=['rimraf','../../config/environment','./mailMessage.attributes','exports','MailMessage','mail_messages','messageId','plainBody','FULLTEXT','body','fromString','models','direction','toLowerCase','out','secret','UserId','MailInteractionId','then','createdAt','catch','lodash','util','../../config/logger','api','moment','bluebird','html-to-text','path'];(function(_0x3b0999,_0x3c9835){var _0x585226=function(_0x3314f9){while(--_0x3314f9){_0x3b0999['push'](_0x3b0999['shift']());}};_0x585226(++_0x3c9835);}(_0x63e6,0x6c));var _0x663e=function(_0x4db506,_0xa25466){_0x4db506=_0x4db506-0x0;var _0x596d18=_0x63e6[_0x4db506];return _0x596d18;};'use strict';var _=require(_0x663e('0x0'));var util=require(_0x663e('0x1'));var logger=require(_0x663e('0x2'))(_0x663e('0x3'));var moment=require(_0x663e('0x4'));var BPromise=require(_0x663e('0x5'));var rp=require('request-promise');var htmlToText=require(_0x663e('0x6'));var fs=require('fs');var path=require(_0x663e('0x7'));var rimraf=require(_0x663e('0x8'));var config=require(_0x663e('0x9'));var attributes=require(_0x663e('0xa'));module[_0x663e('0xb')]=function(_0x29a9aa,_0x43c236){return _0x29a9aa['define'](_0x663e('0xc'),attributes,{'tableName':_0x663e('0xd'),'paranoid':![],'indexes':[{'name':_0x663e('0xe'),'fields':[_0x663e('0xe')]},{'name':'fti_mail_messages','fields':[_0x663e('0xf'),'subject'],'type':_0x663e('0x10')}],'timestamps':!![],'hooks':{'beforeCreate':function(_0x12cec2,_0x59f7e3,_0x5f4584){if(_0x12cec2[_0x663e('0x11')]){_0x12cec2[_0x663e('0xf')]=htmlToText[_0x663e('0x12')](_0x12cec2[_0x663e('0x11')],{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'uppercaseHeadings':![],'noLinkBrackets':!![],'ignoreImage':!![]});}_0x5f4584(null,_0x59f7e3);},'afterCreate':function(_0x4cbd26,_0x1fb694,_0x25602c){var _0x1fb037=_0x29a9aa[_0x663e('0x13')];var _0x296ba5=_0x4cbd26['get']({'plain':!![]});if(_0x296ba5[_0x663e('0x14')][_0x663e('0x15')]()==='in'||_0x296ba5[_0x663e('0x14')][_0x663e('0x15')]()===_0x663e('0x16')&&!_0x296ba5[_0x663e('0x17')]&&!_['isNil'](_0x296ba5[_0x663e('0x18')])){_0x1fb037['MailInteraction']['findOne']({'where':{'id':_0x296ba5[_0x663e('0x19')]}})[_0x663e('0x1a')](function(_0x496493){if(_0x496493){_0x496493['update']({'lastMsgAt':_0x296ba5[_0x663e('0x1b')],'lastMsgDirection':_0x296ba5[_0x663e('0x14')]['toLowerCase'](),'lastMsgBody':_0x296ba5[_0x663e('0x11')]});}})[_0x663e('0x1c')](function(_0x134ed3){console['error'](_0x134ed3);});}_0x25602c();}},'charset':'utf8mb4','collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0x29b7=['findOne','MailInteractionId','then','update','createdAt','catch','error','utf8mb4','utf8mb4_unicode_ci','util','../../config/logger','moment','request-promise','html-to-text','path','rimraf','../../config/environment','./mailMessage.attributes','exports','mail_messages','messageId','fti_mail_messages','plainBody','subject','FULLTEXT','fromString','body','models','direction','toLowerCase','out','MailInteraction'];(function(_0x565ed7,_0x398228){var _0x183ad7=function(_0x5a43d7){while(--_0x5a43d7){_0x565ed7['push'](_0x565ed7['shift']());}};_0x183ad7(++_0x398228);}(_0x29b7,0x1c9));var _0x729b=function(_0x514843,_0x42268f){_0x514843=_0x514843-0x0;var _0x195694=_0x29b7[_0x514843];return _0x195694;};'use strict';var _=require('lodash');var util=require(_0x729b('0x0'));var logger=require(_0x729b('0x1'))('api');var moment=require(_0x729b('0x2'));var BPromise=require('bluebird');var rp=require(_0x729b('0x3'));var htmlToText=require(_0x729b('0x4'));var fs=require('fs');var path=require(_0x729b('0x5'));var rimraf=require(_0x729b('0x6'));var config=require(_0x729b('0x7'));var attributes=require(_0x729b('0x8'));module[_0x729b('0x9')]=function(_0x4f575a,_0x3cd158){return _0x4f575a['define']('MailMessage',attributes,{'tableName':_0x729b('0xa'),'paranoid':![],'indexes':[{'name':_0x729b('0xb'),'fields':[_0x729b('0xb')]},{'name':_0x729b('0xc'),'fields':[_0x729b('0xd'),_0x729b('0xe')],'type':_0x729b('0xf')}],'timestamps':!![],'hooks':{'beforeCreate':function(_0x4724ab,_0x1fe199,_0x3ee4ac){if(_0x4724ab['body']){_0x4724ab[_0x729b('0xd')]=htmlToText[_0x729b('0x10')](_0x4724ab[_0x729b('0x11')],{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'uppercaseHeadings':![],'noLinkBrackets':!![],'ignoreImage':!![]});}_0x3ee4ac(null,_0x1fe199);},'afterCreate':function(_0x300d9d,_0x1865c2,_0x31215b){var _0x3b91d1=_0x4f575a[_0x729b('0x12')];var _0xa0ce88=_0x300d9d['get']({'plain':!![]});if(_0xa0ce88[_0x729b('0x13')][_0x729b('0x14')]()==='in'||_0xa0ce88[_0x729b('0x13')]['toLowerCase']()===_0x729b('0x15')&&!_0xa0ce88['secret']&&!_['isNil'](_0xa0ce88['UserId'])){_0x3b91d1[_0x729b('0x16')][_0x729b('0x17')]({'where':{'id':_0xa0ce88[_0x729b('0x18')]}})[_0x729b('0x19')](function(_0x1a57c1){if(_0x1a57c1){_0x1a57c1[_0x729b('0x1a')]({'lastMsgAt':_0xa0ce88[_0x729b('0x1b')],'lastMsgDirection':_0xa0ce88[_0x729b('0x13')][_0x729b('0x14')](),'lastMsgBody':_0xa0ce88['body']});}})[_0x729b('0x1c')](function(_0xb20c91){console[_0x729b('0x1d')](_0xb20c91);});}_0x31215b();}},'charset':_0x729b('0x1e'),'collate':_0x729b('0x1f')});};
\ No newline at end of file
index a320277..0614ab9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x43fd=['ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','client','redis','defaults','localhost','./mailMessage.socket','then','info','MailMessage,\x20%s,\x20%s','request\x20sent','debug','MailMessage,\x20%s,\x20%s,\x20%s','stringify','error','message','result','CreateMailMessage','options','raw','catch','util','randomstring'];(function(_0x2cde2a,_0x4325c4){var _0x110f55=function(_0x4927f5){while(--_0x4927f5){_0x2cde2a['push'](_0x2cde2a['shift']());}};_0x110f55(++_0x4325c4);}(_0x43fd,0x1ec));var _0xd43f=function(_0xb21cbe,_0x298065){_0xb21cbe=_0xb21cbe-0x0;var _0x754ca=_0x43fd[_0xb21cbe];return _0x754ca;};'use strict';var _=require('lodash');var util=require(_0xd43f('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xd43f('0x1'));var fs=require('fs');var Redis=require(_0xd43f('0x2'));var db=require('../../mysqldb')['db'];var utils=require(_0xd43f('0x3'));var logger=require('../../config/logger')(_0xd43f('0x4'));var config=require(_0xd43f('0x5'));var jayson=require(_0xd43f('0x6'));var client=jayson[_0xd43f('0x7')]['http']({'port':0x232a});config[_0xd43f('0x8')]=_[_0xd43f('0x9')](config[_0xd43f('0x8')],{'host':_0xd43f('0xa'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xd43f('0x8')]));require(_0xd43f('0xb'))['register'](socket);function respondWithRpcPromise(_0x474216,_0x2d5011,_0x114c2e){return new BPromise(function(_0x1a91e9,_0x461711){return client['request'](_0x474216,_0x114c2e)[_0xd43f('0xc')](function(_0x32e210){logger[_0xd43f('0xd')](_0xd43f('0xe'),_0x2d5011,_0xd43f('0xf'));logger[_0xd43f('0x10')](_0xd43f('0x11'),_0x2d5011,_0xd43f('0xf'),JSON[_0xd43f('0x12')](_0x32e210));if(_0x32e210[_0xd43f('0x13')]){if(_0x32e210[_0xd43f('0x13')]['code']===0x1f4){logger[_0xd43f('0x13')](_0xd43f('0xe'),_0x2d5011,_0x32e210[_0xd43f('0x13')]['message']);return _0x461711(_0x32e210['error']['message']);}logger[_0xd43f('0x13')](_0xd43f('0xe'),_0x2d5011,_0x32e210['error'][_0xd43f('0x14')]);return _0x1a91e9(_0x32e210[_0xd43f('0x13')]['message']);}else{logger['info']('MailMessage,\x20%s,\x20%s',_0x2d5011,'request\x20sent');_0x1a91e9(_0x32e210[_0xd43f('0x15')][_0xd43f('0x14')]);}})['catch'](function(_0x2d2a3b){logger[_0xd43f('0x13')](_0xd43f('0xe'),_0x2d5011,_0x2d2a3b);_0x461711(_0x2d2a3b);});});}exports[_0xd43f('0x16')]=function(_0x5deaed){var _0xa86810=this;return new Promise(function(_0xd3933,_0xb37d52){return db['MailMessage']['create'](_0x5deaed['body'],{'raw':_0x5deaed[_0xd43f('0x17')]?_0x5deaed[_0xd43f('0x17')][_0xd43f('0x18')]===undefined?!![]:![]:!![]})[_0xd43f('0xc')](function(_0x3b1094){logger[_0xd43f('0xd')](_0xd43f('0x16'),_0x5deaed);logger['debug'](_0xd43f('0x16'),_0x5deaed,JSON['stringify'](_0x3b1094));_0xd3933(_0x3b1094);})[_0xd43f('0x19')](function(_0x47f960){logger['error'](_0xd43f('0x16'),_0x47f960[_0xd43f('0x14')],_0x5deaed);_0xb37d52(_0xa86810[_0xd43f('0x13')](0x1f4,_0x47f960[_0xd43f('0x14')]));});});};
\ No newline at end of file
+var _0x3561=['stringify','error','code','MailMessage,\x20%s,\x20%s','message','result','catch','CreateMailMessage','create','options','raw','then','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','localhost','socket.io-emitter','register','request','info','request\x20sent','debug','MailMessage,\x20%s,\x20%s,\x20%s'];(function(_0x10dc5d,_0x4b62cc){var _0x2c1e6f=function(_0x5f7307){while(--_0x5f7307){_0x10dc5d['push'](_0x10dc5d['shift']());}};_0x2c1e6f(++_0x4b62cc);}(_0x3561,0x94));var _0x1356=function(_0x23502d,_0x4a8b4b){_0x23502d=_0x23502d-0x0;var _0x4dfad4=_0x3561[_0x23502d];return _0x4dfad4;};'use strict';var _=require(_0x1356('0x0'));var util=require('util');var moment=require(_0x1356('0x1'));var BPromise=require(_0x1356('0x2'));var rs=require(_0x1356('0x3'));var fs=require('fs');var Redis=require(_0x1356('0x4'));var db=require(_0x1356('0x5'))['db'];var utils=require(_0x1356('0x6'));var logger=require(_0x1356('0x7'))(_0x1356('0x8'));var config=require(_0x1356('0x9'));var jayson=require(_0x1356('0xa'));var client=jayson[_0x1356('0xb')][_0x1356('0xc')]({'port':0x232a});config[_0x1356('0xd')]=_['defaults'](config[_0x1356('0xd')],{'host':_0x1356('0xe'),'port':0x18eb});var socket=require(_0x1356('0xf'))(new Redis(config['redis']));require('./mailMessage.socket')[_0x1356('0x10')](socket);function respondWithRpcPromise(_0x101c23,_0x4f2abe,_0x46349e){return new BPromise(function(_0x4b3afa,_0x301f64){return client[_0x1356('0x11')](_0x101c23,_0x46349e)['then'](function(_0x3bbd0c){logger[_0x1356('0x12')]('MailMessage,\x20%s,\x20%s',_0x4f2abe,_0x1356('0x13'));logger[_0x1356('0x14')](_0x1356('0x15'),_0x4f2abe,_0x1356('0x13'),JSON[_0x1356('0x16')](_0x3bbd0c));if(_0x3bbd0c[_0x1356('0x17')]){if(_0x3bbd0c[_0x1356('0x17')][_0x1356('0x18')]===0x1f4){logger[_0x1356('0x17')](_0x1356('0x19'),_0x4f2abe,_0x3bbd0c[_0x1356('0x17')][_0x1356('0x1a')]);return _0x301f64(_0x3bbd0c[_0x1356('0x17')]['message']);}logger['error'](_0x1356('0x19'),_0x4f2abe,_0x3bbd0c[_0x1356('0x17')][_0x1356('0x1a')]);return _0x4b3afa(_0x3bbd0c['error'][_0x1356('0x1a')]);}else{logger[_0x1356('0x12')](_0x1356('0x19'),_0x4f2abe,_0x1356('0x13'));_0x4b3afa(_0x3bbd0c[_0x1356('0x1b')][_0x1356('0x1a')]);}})[_0x1356('0x1c')](function(_0x210b85){logger[_0x1356('0x17')](_0x1356('0x19'),_0x4f2abe,_0x210b85);_0x301f64(_0x210b85);});});}exports[_0x1356('0x1d')]=function(_0x1cb49e){var _0x1915b5=this;return new Promise(function(_0x54c1a6,_0x368fea){return db['MailMessage'][_0x1356('0x1e')](_0x1cb49e['body'],{'raw':_0x1cb49e[_0x1356('0x1f')]?_0x1cb49e[_0x1356('0x1f')][_0x1356('0x20')]===undefined?!![]:![]:!![]})[_0x1356('0x21')](function(_0x10d756){logger[_0x1356('0x12')]('CreateMailMessage',_0x1cb49e);logger[_0x1356('0x14')](_0x1356('0x1d'),_0x1cb49e,JSON['stringify'](_0x10d756));_0x54c1a6(_0x10d756);})[_0x1356('0x1c')](function(_0x13d30b){logger[_0x1356('0x17')]('CreateMailMessage',_0x13d30b[_0x1356('0x1a')],_0x1cb49e);_0x368fea(_0x1915b5[_0x1356('0x17')](0x1f4,_0x13d30b[_0x1356('0x1a')]));});});};
\ No newline at end of file
index 4739554..1824a3b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfb11=['length','mailMessage:','./mailMessage.events','remove','update','emit','removeListener'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0xfb11,0x1ad));var _0x1fb1=function(_0x397cfb,_0xb8f317){_0x397cfb=_0x397cfb-0x0;var _0x15fed9=_0xfb11[_0x397cfb];return _0x15fed9;};'use strict';var MailMessageEvents=require(_0x1fb1('0x0'));var events=['save',_0x1fb1('0x1'),_0x1fb1('0x2')];function createListener(_0x51c055,_0x1461ad){return function(_0x5af9cc){_0x1461ad[_0x1fb1('0x3')](_0x51c055,_0x5af9cc);};}function removeListener(_0x5a830e,_0x190f74){return function(){MailMessageEvents[_0x1fb1('0x4')](_0x5a830e,_0x190f74);};}exports['register']=function(_0x25d44f){for(var _0x133727=0x0,_0x4c098d=events[_0x1fb1('0x5')];_0x133727<_0x4c098d;_0x133727++){var _0x2596c2=events[_0x133727];var _0x34e61a=createListener(_0x1fb1('0x6')+_0x2596c2,_0x25d44f);MailMessageEvents['on'](_0x2596c2,_0x34e61a);}};
\ No newline at end of file
+var _0x0369=['emit','removeListener','register','length','mailMessage:','./mailMessage.events','save','remove','update'];(function(_0x2b9fc1,_0x36bedd){var _0x2cb957=function(_0x1cd4b0){while(--_0x1cd4b0){_0x2b9fc1['push'](_0x2b9fc1['shift']());}};_0x2cb957(++_0x36bedd);}(_0x0369,0x113));var _0x9036=function(_0xa64f44,_0x3484aa){_0xa64f44=_0xa64f44-0x0;var _0x1b615e=_0x0369[_0xa64f44];return _0x1b615e;};'use strict';var MailMessageEvents=require(_0x9036('0x0'));var events=[_0x9036('0x1'),_0x9036('0x2'),_0x9036('0x3')];function createListener(_0x484d92,_0x55c39b){return function(_0x42dea2){_0x55c39b[_0x9036('0x4')](_0x484d92,_0x42dea2);};}function removeListener(_0xa1ae28,_0x355e96){return function(){MailMessageEvents[_0x9036('0x5')](_0xa1ae28,_0x355e96);};}exports[_0x9036('0x6')]=function(_0x41210a){for(var _0x3372f7=0x0,_0x448da3=events[_0x9036('0x7')];_0x3372f7<_0x448da3;_0x3372f7++){var _0x33b0d5=events[_0x3372f7];var _0x1e00f0=createListener(_0x9036('0x8')+_0x33b0d5,_0x41210a);MailMessageEvents['on'](_0x33b0d5,_0x1e00f0);}};
\ No newline at end of file
index 9d7f5ac..5086a50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4493=['describe','/:id','show','getMembers','getTeams','/:id/users','getAgents','post','put','update','delete','removeTeams','removeAgents','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailQueue.controller','get','isAuthenticated'];(function(_0x13ac27,_0x5863b1){var _0x5b395e=function(_0x138c0e){while(--_0x138c0e){_0x13ac27['push'](_0x13ac27['shift']());}};_0x5b395e(++_0x5863b1);}(_0x4493,0x153));var _0x3449=function(_0x509430,_0x2da9b0){_0x509430=_0x509430-0x0;var _0x40f134=_0x4493[_0x509430];return _0x40f134;};'use strict';var multer=require(_0x3449('0x0'));var util=require(_0x3449('0x1'));var path=require(_0x3449('0x2'));var timeout=require('connect-timeout');var express=require(_0x3449('0x3'));var router=express[_0x3449('0x4')]();var auth=require(_0x3449('0x5'));var interaction=require(_0x3449('0x6'));var config=require(_0x3449('0x7'));var controller=require(_0x3449('0x8'));router[_0x3449('0x9')]('/',auth[_0x3449('0xa')](),controller['index']);router[_0x3449('0x9')]('/describe',auth['isAuthenticated'](),controller[_0x3449('0xb')]);router[_0x3449('0x9')](_0x3449('0xc'),auth[_0x3449('0xa')](),controller[_0x3449('0xd')]);router[_0x3449('0x9')]('/:id/members',auth[_0x3449('0xa')](),controller[_0x3449('0xe')]);router[_0x3449('0x9')]('/:id/teams',auth[_0x3449('0xa')](),controller[_0x3449('0xf')]);router['get'](_0x3449('0x10'),auth[_0x3449('0xa')](),controller[_0x3449('0x11')]);router[_0x3449('0x12')]('/',auth[_0x3449('0xa')](),controller['create']);router['post']('/:id/teams',auth[_0x3449('0xa')](),controller['addTeams']);router[_0x3449('0x12')](_0x3449('0x10'),auth[_0x3449('0xa')](),controller['addAgents']);router[_0x3449('0x13')](_0x3449('0xc'),auth[_0x3449('0xa')](),controller[_0x3449('0x14')]);router[_0x3449('0x15')](_0x3449('0xc'),auth[_0x3449('0xa')](),controller['destroy']);router[_0x3449('0x15')]('/:id/teams',auth[_0x3449('0xa')](),controller[_0x3449('0x16')]);router['delete'](_0x3449('0x10'),auth[_0x3449('0xa')](),controller[_0x3449('0x17')]);module[_0x3449('0x18')]=router;
\ No newline at end of file
+var _0x4d70=['/describe','describe','/:id','show','/:id/members','getMembers','/:id/teams','getTeams','/:id/users','getAgents','create','post','addTeams','addAgents','put','delete','destroy','removeTeams','removeAgents','exports','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailQueue.controller','isAuthenticated','index','get'];(function(_0x5eb0f8,_0x454c04){var _0x4a051d=function(_0x8acc5d){while(--_0x8acc5d){_0x5eb0f8['push'](_0x5eb0f8['shift']());}};_0x4a051d(++_0x454c04);}(_0x4d70,0x188));var _0x04d7=function(_0xd31b2c,_0x2bccdd){_0xd31b2c=_0xd31b2c-0x0;var _0x5ec823=_0x4d70[_0xd31b2c];return _0x5ec823;};'use strict';var multer=require('multer');var util=require(_0x04d7('0x0'));var path=require('path');var timeout=require(_0x04d7('0x1'));var express=require(_0x04d7('0x2'));var router=express[_0x04d7('0x3')]();var auth=require(_0x04d7('0x4'));var interaction=require(_0x04d7('0x5'));var config=require(_0x04d7('0x6'));var controller=require(_0x04d7('0x7'));router['get']('/',auth[_0x04d7('0x8')](),controller[_0x04d7('0x9')]);router[_0x04d7('0xa')](_0x04d7('0xb'),auth[_0x04d7('0x8')](),controller[_0x04d7('0xc')]);router[_0x04d7('0xa')](_0x04d7('0xd'),auth['isAuthenticated'](),controller[_0x04d7('0xe')]);router['get'](_0x04d7('0xf'),auth[_0x04d7('0x8')](),controller[_0x04d7('0x10')]);router[_0x04d7('0xa')](_0x04d7('0x11'),auth[_0x04d7('0x8')](),controller[_0x04d7('0x12')]);router[_0x04d7('0xa')](_0x04d7('0x13'),auth[_0x04d7('0x8')](),controller[_0x04d7('0x14')]);router['post']('/',auth[_0x04d7('0x8')](),controller[_0x04d7('0x15')]);router[_0x04d7('0x16')](_0x04d7('0x11'),auth[_0x04d7('0x8')](),controller[_0x04d7('0x17')]);router['post']('/:id/users',auth['isAuthenticated'](),controller[_0x04d7('0x18')]);router[_0x04d7('0x19')](_0x04d7('0xd'),auth[_0x04d7('0x8')](),controller['update']);router[_0x04d7('0x1a')](_0x04d7('0xd'),auth[_0x04d7('0x8')](),controller[_0x04d7('0x1b')]);router[_0x04d7('0x1a')](_0x04d7('0x11'),auth[_0x04d7('0x8')](),controller[_0x04d7('0x1c')]);router[_0x04d7('0x1a')]('/:id/users',auth[_0x04d7('0x8')](),controller[_0x04d7('0x1d')]);module[_0x04d7('0x1e')]=router;
\ No newline at end of file
index 7ebcc62..782c1e1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8aed=['STRING','name','ENUM','rrmemory','beepall','sequelize','exports'];(function(_0x3ea0b4,_0x4aa7e2){var _0x57a1b9=function(_0x5a8731){while(--_0x5a8731){_0x3ea0b4['push'](_0x3ea0b4['shift']());}};_0x57a1b9(++_0x4aa7e2);}(_0x8aed,0x91));var _0xd8ae=function(_0xd62a09,_0x7f9c61){_0xd62a09=_0xd62a09-0x0;var _0x322890=_0x8aed[_0xd62a09];return _0x322890;};'use strict';var Sequelize=require(_0xd8ae('0x0'));module[_0xd8ae('0x1')]={'name':{'type':Sequelize[_0xd8ae('0x2')],'unique':_0xd8ae('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xd8ae('0x4')](_0xd8ae('0x5'),_0xd8ae('0x6'),'roundrobin')}};
\ No newline at end of file
+var _0x960f=['ENUM','rrmemory','beepall','roundrobin','sequelize','exports','name','STRING'];(function(_0x33b864,_0x417f54){var _0x66bde0=function(_0x5c449c){while(--_0x5c449c){_0x33b864['push'](_0x33b864['shift']());}};_0x66bde0(++_0x417f54);}(_0x960f,0x114));var _0xf960=function(_0x22d655,_0x3941dd){_0x22d655=_0x22d655-0x0;var _0x257739=_0x960f[_0x22d655];return _0x257739;};'use strict';var Sequelize=require(_0xf960('0x0'));module[_0xf960('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0xf960('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xf960('0x3')]},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xf960('0x4')](_0xf960('0x5'),_0xf960('0x6'),_0xf960('0x7'))}};
\ No newline at end of file
index 848bfa7..2c69bb8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa12c=['api','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./mailQueue.socket','register','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','destroy','get','UserProfileResource','error','stack','name','index','MailQueue','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','order','sort','where','pick','filter','merge','map','key','VIRTUAL','options','includeAll','include','findAll','rows','params','find','catch','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','MailQueues','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','body','describe','UserMailQueue','nolimit','MailQueueId','User','findAndCountAll','UserId','agent','mailPause','updatedAt','createdAt','format','%s/%s','SIP','findOne','Team','getTeams','addTeams','teams','Agents','voicePause','interface','transaction','forEach','emit','userMailQueue:save','removeTeams','ids','field','from','team_has_mail_queues','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','ut.UserId\x20=\x20?','push','sequelize','toString','QueryTypes','SELECT','every','all','union','compact','value','removeAgents','addAgents','omit','spread','isArray','userMailQueue:remove','getAgents','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','squel','crypto','jsforce','desk.js','ioredis','../../components/auth/service','../../components/parsers/qs'];(function(_0x205e5a,_0x5c19fb){var _0x10da58=function(_0x1ba35d){while(--_0x1ba35d){_0x205e5a['push'](_0x205e5a['shift']());}};_0x10da58(++_0x5c19fb);}(_0xa12c,0x76));var _0xca12=function(_0x2cb8f5,_0x434f38){_0x2cb8f5=_0x2cb8f5-0x0;var _0x87410a=_0xa12c[_0x2cb8f5];return _0x87410a;};'use strict';var pdf=require(_0xca12('0x0'));var emlformat=require(_0xca12('0x1'));var rimraf=require(_0xca12('0x2'));var zipdir=require(_0xca12('0x3'));var jsonpatch=require(_0xca12('0x4'));var rp=require('request-promise');var moment=require(_0xca12('0x5'));var BPromise=require(_0xca12('0x6'));var Mustache=require(_0xca12('0x7'));var util=require(_0xca12('0x8'));var path=require(_0xca12('0x9'));var sox=require(_0xca12('0xa'));var csv=require(_0xca12('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xca12('0xc'));var crypto=require(_0xca12('0xd'));var jsforce=require(_0xca12('0xe'));var deskjs=require(_0xca12('0xf'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0xca12('0x10'));var authService=require(_0xca12('0x11'));var qs=require(_0xca12('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xca12('0x13'));var utils=require('../../config/utils');var config=require(_0xca12('0x14'));var db=require(_0xca12('0x15'))['db'];config[_0xca12('0x16')]=_[_0xca12('0x17')](config[_0xca12('0x16')],{'host':_0xca12('0x18'),'port':0x18eb});var socket=require(_0xca12('0x19'))(new Redis(config['redis']));require(_0xca12('0x1a'))[_0xca12('0x1b')](socket);function respondWithStatusCode(_0x7b2e65,_0x3f6dfb){_0x3f6dfb=_0x3f6dfb||0xcc;return function(_0x29adcc){if(_0x29adcc){return _0x7b2e65[_0xca12('0x1c')](_0x3f6dfb);}return _0x7b2e65[_0xca12('0x1d')](_0x3f6dfb)[_0xca12('0x1e')]();};}function respondWithResult(_0x5a6d7c,_0x5d42f1){_0x5d42f1=_0x5d42f1||0xc8;return function(_0xc0c9c6){if(_0xc0c9c6){return _0x5a6d7c[_0xca12('0x1d')](_0x5d42f1)[_0xca12('0x1f')](_0xc0c9c6);}};}function respondWithFilteredResult(_0x1e577f,_0x2d6569){return function(_0x48175b){if(_0x48175b){var _0x93f9a=_0x48175b[_0xca12('0x20')],_0x1265ad=_0x2d6569[_0xca12('0x21')],_0x193d0b=_0x2d6569[_0xca12('0x21')]+_0x2d6569[_0xca12('0x22')],_0x4c20ff;if(_0x193d0b>=_0x93f9a){_0x193d0b=_0x93f9a;_0x4c20ff=0xc8;}else{_0x4c20ff=0xce;}_0x1e577f[_0xca12('0x1d')](_0x4c20ff);return _0x1e577f[_0xca12('0x23')](_0xca12('0x24'),_0x1265ad+'-'+_0x193d0b+'/'+_0x93f9a)[_0xca12('0x1f')](_0x48175b);}return null;};}function patchUpdates(_0x597410){return function(_0x5598e0){try{jsonpatch[_0xca12('0x25')](_0x5598e0,_0x597410,!![]);}catch(_0x1a8343){return BPromise[_0xca12('0x26')](_0x1a8343);}return _0x5598e0[_0xca12('0x27')]();};}function saveUpdates(_0x22a354,_0x434077){return function(_0x56ff34){if(_0x56ff34){return _0x56ff34['update'](_0x22a354)[_0xca12('0x28')](function(_0x56c8d0){return _0x56c8d0;});}return null;};}function removeEntity(_0x47a510,_0x48c80c){return function(_0x71eac1){if(_0x71eac1){return _0x71eac1[_0xca12('0x29')]()[_0xca12('0x28')](function(){var _0x2b404e=_0x71eac1[_0xca12('0x2a')]({'plain':!![]});var _0x2e5dc9='MailQueues';return db[_0xca12('0x2b')][_0xca12('0x29')]({'where':{'type':_0x2e5dc9,'resourceId':_0x2b404e['id']}})['then'](function(){return _0x71eac1;});})['then'](function(){_0x47a510[_0xca12('0x1d')](0xcc)[_0xca12('0x1e')]();});}};}function handleEntityNotFound(_0x5eb65c,_0x5a8f3f){return function(_0x75fe6e){if(!_0x75fe6e){_0x5eb65c['sendStatus'](0x194);}return _0x75fe6e;};}function handleError(_0x1e4cc3,_0xfc5771){_0xfc5771=_0xfc5771||0x1f4;return function(_0x3deb7e){logger[_0xca12('0x2c')](_0x3deb7e[_0xca12('0x2d')]);if(_0x3deb7e[_0xca12('0x2e')]){delete _0x3deb7e['name'];}_0x1e4cc3[_0xca12('0x1d')](_0xfc5771)['send'](_0x3deb7e);};}exports[_0xca12('0x2f')]=function(_0x38181b,_0x46516f){var _0x232cf3={},_0x1d9847={},_0x4ebcf8={'count':0x0,'rows':[]};var _0x16d6a9=db[_0xca12('0x30')][_0xca12('0x31')];_0x1d9847[_0xca12('0x32')]=_['keys'](_0x16d6a9);_0x1d9847['query']=_[_0xca12('0x33')](_0x38181b[_0xca12('0x34')]);_0x1d9847[_0xca12('0x35')]=_[_0xca12('0x36')](_0x1d9847[_0xca12('0x32')],_0x1d9847[_0xca12('0x34')]);_0x232cf3['attributes']=_[_0xca12('0x36')](_0x1d9847[_0xca12('0x32')],qs[_0xca12('0x37')](_0x38181b[_0xca12('0x34')]['fields']));_0x232cf3[_0xca12('0x38')]=_0x232cf3['attributes'][_0xca12('0x39')]?_0x232cf3['attributes']:_0x1d9847['model'];if(!_0x38181b[_0xca12('0x34')][_0xca12('0x3a')]('nolimit')){_0x232cf3[_0xca12('0x22')]=qs[_0xca12('0x22')](_0x38181b[_0xca12('0x34')]['limit']);_0x232cf3[_0xca12('0x21')]=qs[_0xca12('0x21')](_0x38181b[_0xca12('0x34')]['offset']);}_0x232cf3[_0xca12('0x3b')]=qs['sort'](_0x38181b[_0xca12('0x34')][_0xca12('0x3c')]);_0x232cf3[_0xca12('0x3d')]=qs[_0xca12('0x35')](_[_0xca12('0x3e')](_0x38181b[_0xca12('0x34')],_0x1d9847[_0xca12('0x35')]));if(_0x38181b[_0xca12('0x34')][_0xca12('0x3f')]){_0x232cf3[_0xca12('0x3d')]=_[_0xca12('0x40')](_0x232cf3['where'],{'$or':_[_0xca12('0x41')](_0x16d6a9,function(_0x27693f){if(_0x27693f['type'][_0xca12('0x42')]!==_0xca12('0x43')){var _0x32bf5d={};_0x32bf5d[_0x27693f['field']]={'$like':'%'+_0x38181b['query'][_0xca12('0x3f')]+'%'};return _0x32bf5d;}})});}_0x232cf3=_[_0xca12('0x40')]({},_0x232cf3,_0x38181b[_0xca12('0x44')]);var _0x26bc10={'where':_0x232cf3[_0xca12('0x3d')]};return db['MailQueue'][_0xca12('0x20')](_0x26bc10)[_0xca12('0x28')](function(_0x3791de){_0x4ebcf8['count']=_0x3791de;if(_0x38181b[_0xca12('0x34')][_0xca12('0x45')]){_0x232cf3[_0xca12('0x46')]=[{'all':!![]}];}return db['MailQueue'][_0xca12('0x47')](_0x232cf3);})[_0xca12('0x28')](function(_0x4b45a4){_0x4ebcf8[_0xca12('0x48')]=_0x4b45a4;return _0x4ebcf8;})[_0xca12('0x28')](respondWithFilteredResult(_0x46516f,_0x232cf3))['catch'](handleError(_0x46516f,null));};exports['show']=function(_0x2bcea3,_0xcaf4ac){var _0x15fbf5={'raw':!![],'where':{'id':_0x2bcea3[_0xca12('0x49')]['id']}},_0x68b5d2={};_0x68b5d2[_0xca12('0x32')]=_['keys'](db[_0xca12('0x30')][_0xca12('0x31')]);_0x68b5d2['query']=_[_0xca12('0x33')](_0x2bcea3[_0xca12('0x34')]);_0x68b5d2[_0xca12('0x35')]=_[_0xca12('0x36')](_0x68b5d2[_0xca12('0x32')],_0x68b5d2[_0xca12('0x34')]);_0x15fbf5[_0xca12('0x38')]=_[_0xca12('0x36')](_0x68b5d2[_0xca12('0x32')],qs[_0xca12('0x37')](_0x2bcea3['query'][_0xca12('0x37')]));_0x15fbf5[_0xca12('0x38')]=_0x15fbf5[_0xca12('0x38')][_0xca12('0x39')]?_0x15fbf5[_0xca12('0x38')]:_0x68b5d2['model'];if(_0x2bcea3['query'][_0xca12('0x45')]){_0x15fbf5[_0xca12('0x46')]=[{'all':!![]}];}_0x15fbf5=_['merge']({},_0x15fbf5,_0x2bcea3['options']);return db[_0xca12('0x30')][_0xca12('0x4a')](_0x15fbf5)[_0xca12('0x28')](handleEntityNotFound(_0xcaf4ac,null))[_0xca12('0x28')](respondWithResult(_0xcaf4ac,null))[_0xca12('0x4b')](handleError(_0xcaf4ac,null));};exports[_0xca12('0x4c')]=function(_0x2181ad,_0x32687a){return db[_0xca12('0x30')][_0xca12('0x4c')](_0x2181ad['body'],{})[_0xca12('0x28')](function(_0x2b8a20){var _0x2d3661=_0x2181ad[_0xca12('0x4d')]['get']({'plain':!![]});if(!_0x2d3661)throw new Error(_0xca12('0x4e'));if(_0x2d3661[_0xca12('0x4f')]===_0xca12('0x4d')){var _0x45fdea=_0x2b8a20[_0xca12('0x2a')]({'plain':!![]});var _0x5fe9d=_0xca12('0x50');return db[_0xca12('0x51')][_0xca12('0x4a')]({'where':{'name':_0x5fe9d,'userProfileId':_0x2d3661[_0xca12('0x52')]},'raw':!![]})[_0xca12('0x28')](function(_0x394c78){if(_0x394c78&&_0x394c78['autoAssociation']===0x0){return db[_0xca12('0x2b')][_0xca12('0x4c')]({'name':_0x45fdea[_0xca12('0x2e')],'resourceId':_0x45fdea['id'],'type':_0x394c78[_0xca12('0x2e')],'sectionId':_0x394c78['id']},{})[_0xca12('0x28')](function(){return _0x2b8a20;});}else{return _0x2b8a20;}})['catch'](function(_0x5f2c46){logger[_0xca12('0x2c')](_0xca12('0x53'),_0x5f2c46);throw _0x5f2c46;});}return _0x2b8a20;})['then'](respondWithResult(_0x32687a,0xc9))['catch'](handleError(_0x32687a,null));};exports[_0xca12('0x54')]=function(_0x35a4a3,_0x19e376){if(_0x35a4a3[_0xca12('0x55')]['id']){delete _0x35a4a3['body']['id'];}return db[_0xca12('0x30')][_0xca12('0x4a')]({'where':{'id':_0x35a4a3['params']['id']}})['then'](handleEntityNotFound(_0x19e376,null))[_0xca12('0x28')](saveUpdates(_0x35a4a3['body'],null))[_0xca12('0x28')](respondWithResult(_0x19e376,null))['catch'](handleError(_0x19e376,null));};exports[_0xca12('0x29')]=function(_0x1308df,_0x50b2ec){return db[_0xca12('0x30')]['find']({'where':{'id':_0x1308df[_0xca12('0x49')]['id']}})[_0xca12('0x28')](handleEntityNotFound(_0x50b2ec,null))['then'](removeEntity(_0x50b2ec,null))['catch'](handleError(_0x50b2ec,null));};exports['describe']=function(_0x168fc5,_0x3db914){return db['MailQueue'][_0xca12('0x56')]()[_0xca12('0x28')](respondWithResult(_0x3db914,null))[_0xca12('0x4b')](handleError(_0x3db914,null));};exports['getMembers']=function(_0x55c9c6,_0xb12e66,_0xbcf9db){var _0x396591={'raw':!![],'where':{}},_0x46e153={},_0x2134c0;return db[_0xca12('0x30')]['findOne']({'where':{'id':_0x55c9c6[_0xca12('0x49')]['id']}})['then'](handleEntityNotFound(_0xb12e66,null))[_0xca12('0x28')](function(_0x18051c){if(_0x18051c){_0x2134c0=_0x18051c[_0xca12('0x2a')]({'plain':!![]});_0x46e153[_0xca12('0x32')]=_[_0xca12('0x33')](db[_0xca12('0x57')]['rawAttributes']);_0x46e153[_0xca12('0x34')]=_['keys'](_0x55c9c6[_0xca12('0x34')]);_0x46e153['filters']=_[_0xca12('0x36')](_0x46e153[_0xca12('0x32')],_0x46e153['query']);_0x396591[_0xca12('0x38')]=_[_0xca12('0x36')](_0x46e153[_0xca12('0x32')],qs[_0xca12('0x37')](_0x55c9c6[_0xca12('0x34')][_0xca12('0x37')]));_0x396591[_0xca12('0x38')]=_0x396591['attributes'][_0xca12('0x39')]?_0x396591['attributes']:_0x46e153[_0xca12('0x32')];if(!_0x55c9c6[_0xca12('0x34')][_0xca12('0x3a')](_0xca12('0x58'))){_0x396591[_0xca12('0x22')]=qs[_0xca12('0x22')](_0x55c9c6['query'][_0xca12('0x22')]);_0x396591[_0xca12('0x21')]=qs[_0xca12('0x21')](_0x55c9c6['query'][_0xca12('0x21')]);}_0x396591['order']=qs[_0xca12('0x3c')](_0x55c9c6[_0xca12('0x34')][_0xca12('0x3c')]);_0x396591[_0xca12('0x3d')]=qs[_0xca12('0x35')](_[_0xca12('0x3e')](_0x55c9c6[_0xca12('0x34')],_0x46e153[_0xca12('0x35')]));_0x396591['where'][_0xca12('0x59')]=_0x18051c['id'];if(_0x55c9c6['query']['filter']){_0x396591[_0xca12('0x3d')]=_[_0xca12('0x40')](_0x396591[_0xca12('0x3d')],{'$or':_['map'](_0x396591[_0xca12('0x38')],function(_0x3d91e5){var _0x45559b={};_0x45559b[_0x3d91e5]={'$like':'%'+_0x55c9c6[_0xca12('0x34')][_0xca12('0x3f')]+'%'};return _0x45559b;})});}_0x396591=_[_0xca12('0x40')]({},_0x396591,_0x55c9c6[_0xca12('0x44')]);return db['UserMailQueue'][_0xca12('0x47')](_0x396591);}})['then'](function(_0xa5f2f8){if(_0xa5f2f8){return db[_0xca12('0x5a')][_0xca12('0x5b')]({'where':{'id':_['map'](_0xa5f2f8,_0xca12('0x5c')),'role':_0xca12('0x5d')},'attributes':['id',_0xca12('0x2e'),_0xca12('0x5e'),_0xca12('0x5f'),_0xca12('0x60')]});}})[_0xca12('0x28')](function(_0x4cbda3){if(_0x4cbda3){return{'count':_0x4cbda3[_0xca12('0x20')],'rows':_[_0xca12('0x41')](_0x4cbda3[_0xca12('0x48')],function(_0x187b26){return{'membername':_0x187b26[_0xca12('0x2e')],'UserId':_0x187b26['id'],'queue_name':_0x2134c0[_0xca12('0x2e')],'MailQueueId':_0x2134c0['id'],'interface':util[_0xca12('0x61')](_0xca12('0x62'),_0xca12('0x63'),_0x187b26[_0xca12('0x2e')]),'penalty':0x0,'paused':_0x187b26[_0xca12('0x5e')],'createdAt':_0x187b26[_0xca12('0x60')],'updatedAt':_0x187b26[_0xca12('0x5f')]};})};}else{return{'count':0x0,'rows':[]};}})[_0xca12('0x28')](respondWithFilteredResult(_0xb12e66,_0x396591))['catch'](handleError(_0xb12e66,null));};exports['getTeams']=function(_0x323a71,_0x49c99f,_0x216dcf){var _0x79a56c={};var _0x1ac991={};var _0x2b24c4;var _0x18fe6f;return db[_0xca12('0x30')][_0xca12('0x64')]({'where':{'id':_0x323a71[_0xca12('0x49')]['id']}})[_0xca12('0x28')](handleEntityNotFound(_0x49c99f,null))[_0xca12('0x28')](function(_0xe2e753){if(_0xe2e753){_0x2b24c4=_0xe2e753;_0x1ac991[_0xca12('0x32')]=_['keys'](db[_0xca12('0x65')][_0xca12('0x31')]);_0x1ac991['query']=_[_0xca12('0x33')](_0x323a71['query']);_0x1ac991[_0xca12('0x35')]=_[_0xca12('0x36')](_0x1ac991[_0xca12('0x32')],_0x1ac991[_0xca12('0x34')]);_0x79a56c[_0xca12('0x38')]=_[_0xca12('0x36')](_0x1ac991[_0xca12('0x32')],qs[_0xca12('0x37')](_0x323a71[_0xca12('0x34')][_0xca12('0x37')]));_0x79a56c[_0xca12('0x38')]=_0x79a56c[_0xca12('0x38')]['length']?_0x79a56c[_0xca12('0x38')]:_0x1ac991['model'];_0x79a56c[_0xca12('0x3b')]=qs[_0xca12('0x3c')](_0x323a71['query'][_0xca12('0x3c')]);_0x79a56c[_0xca12('0x3d')]=qs[_0xca12('0x35')](_[_0xca12('0x3e')](_0x323a71[_0xca12('0x34')],_0x1ac991[_0xca12('0x35')]));if(_0x323a71[_0xca12('0x34')][_0xca12('0x3f')]){_0x79a56c[_0xca12('0x3d')]=_['merge'](_0x79a56c[_0xca12('0x3d')],{'$or':_['map'](_0x79a56c[_0xca12('0x38')],function(_0x11a458){var _0x4e7f45={};_0x4e7f45[_0x11a458]={'$like':'%'+_0x323a71[_0xca12('0x34')]['filter']+'%'};return _0x4e7f45;})});}_0x79a56c=_['merge']({},_0x79a56c,_0x323a71[_0xca12('0x44')]);return _0x2b24c4['getTeams'](_0x79a56c);}})['then'](function(_0x5367ff){if(_0x5367ff){_0x18fe6f=_0x5367ff['length'];if(!_0x323a71[_0xca12('0x34')]['hasOwnProperty']('nolimit')){_0x79a56c['limit']=qs[_0xca12('0x22')](_0x323a71[_0xca12('0x34')][_0xca12('0x22')]);_0x79a56c[_0xca12('0x21')]=qs[_0xca12('0x21')](_0x323a71[_0xca12('0x34')][_0xca12('0x21')]);}return _0x2b24c4[_0xca12('0x66')](_0x79a56c);}})['then'](function(_0x16fa33){if(_0x16fa33){return _0x16fa33?{'count':_0x18fe6f,'rows':_0x16fa33}:null;}})[_0xca12('0x28')](respondWithResult(_0x49c99f,null))['catch'](handleError(_0x49c99f,null));};exports[_0xca12('0x67')]=function(_0x111099,_0x2cc737,_0x5de2f9){var _0x2bc785=_0x111099[_0xca12('0x55')][_0xca12('0x68')];return db['Team'][_0xca12('0x47')]({'where':{'id':_[_0xca12('0x41')](_0x2bc785,'id')},'attributes':['id'],'include':[{'model':db[_0xca12('0x5a')],'as':_0xca12('0x69'),'attributes':['id',_0xca12('0x2e'),'online',_0xca12('0x6a'),_0xca12('0x6b')],'raw':!![]}]})[_0xca12('0x28')](function(_0x2b7050){if(_0x2b7050){var _0x1f77df=_['flatMap'](_0x2b7050,function(_0x562343){var _0x4b0a77=_0x562343[_0xca12('0x2a')]({'plain':!![]});return _0x4b0a77['Agents'];});return db[_0xca12('0x30')]['find']({'where':{'id':_0x111099['params']['id']}})[_0xca12('0x28')](function(_0x39a004){return db['sequelize'][_0xca12('0x6c')](function(_0x5773eb){return _0x39a004[_0xca12('0x67')](_[_0xca12('0x41')](_0x2bc785,'id'),{'transaction':_0x5773eb})['then'](function(){return BPromise['each'](_0x1f77df,function(_0xf96e71){return db['UserMailQueue']['findOrCreate']({'where':{'UserId':_0xf96e71['id'],'MailQueueId':_0x111099[_0xca12('0x49')]['id']},'transaction':_0x5773eb});});})[_0xca12('0x28')](function(){_0x1f77df[_0xca12('0x6d')](function(_0x46694a){socket[_0xca12('0x6e')](_0xca12('0x6f'),{'UserId':_0x46694a['id'],'MailQueueId':_0x39a004['id']});});});});});}})[_0xca12('0x28')](respondWithStatusCode(_0x2cc737,null))[_0xca12('0x4b')](handleError(_0x2cc737,null));};exports[_0xca12('0x70')]=function(_0x53c21a,_0x3b1469,_0x285872){return db[_0xca12('0x65')]['findAll']({'where':{'id':_0x53c21a[_0xca12('0x34')][_0xca12('0x71')]},'attributes':['id'],'include':[{'model':db[_0xca12('0x5a')],'as':_0xca12('0x69'),'attributes':['id'],'raw':!![]}]})[_0xca12('0x28')](handleEntityNotFound(_0x3b1469,null))[_0xca12('0x28')](function(_0x96bb20){var _0x539eb0=_[_0xca12('0x41')](_0x96bb20,'id');var _0x7e6cbf=[];var _0xf2c035=[];var _0x22a2d8=squel['select']();_0x22a2d8[_0xca12('0x72')]('tq.TeamId')[_0xca12('0x73')](_0xca12('0x74'),'tq')['join'](_0xca12('0x75'),'ut',_0xca12('0x76'))[_0xca12('0x3d')]('MailQueueId\x20=\x20?',_0x53c21a[_0xca12('0x49')]['id']);for(var _0x59a392=0x0;_0x59a392<_0x96bb20[_0xca12('0x39')];_0x59a392+=0x1){let _0x41e28f=_0x96bb20[_0x59a392];for(var _0x315ad6=0x0;_0x315ad6<_0x41e28f[_0xca12('0x69')]['length'];_0x315ad6+=0x1){let _0x212626=_0x41e28f[_0xca12('0x69')][_0x315ad6];var _0x71512b=_0x22a2d8['clone']();_0x71512b['where'](_0xca12('0x77'),_0x212626['id']);_0xf2c035[_0xca12('0x78')](db[_0xca12('0x79')][_0xca12('0x34')](_0x71512b[_0xca12('0x7a')](),{'type':db[_0xca12('0x79')][_0xca12('0x7b')][_0xca12('0x7c')]})['then'](function(_0x4833e1){if(_0x4833e1['length']===0x1){return _0x212626['id'];}else{var _0x1dbff0=_[_0xca12('0x7d')](_[_0xca12('0x41')](_0x4833e1,'TeamId'),function(_0x2f8867){return _['includes'](_0x539eb0,_0x2f8867);});if(_0x1dbff0){return _0x212626['id'];}}}));}}return BPromise[_0xca12('0x7e')](_0xf2c035)[_0xca12('0x28')](function(_0x1a4a00){_0x7e6cbf=_(_0x7e6cbf)[_0xca12('0x7f')](_0x1a4a00)[_0xca12('0x80')]()[_0xca12('0x81')]();return db['MailQueue'][_0xca12('0x4a')]({'where':{'id':_0x53c21a[_0xca12('0x49')]['id']}})[_0xca12('0x28')](function(_0x1b6b8e){return db[_0xca12('0x79')]['transaction'](function(_0x5395de){return _0x1b6b8e[_0xca12('0x70')](_0x53c21a[_0xca12('0x34')][_0xca12('0x71')],{'transaction':_0x5395de})[_0xca12('0x28')](function(){if(!_['isEmpty'](_0x7e6cbf)){return _0x1b6b8e[_0xca12('0x82')](_0x7e6cbf,{'transaction':_0x5395de});}})['then'](function(){_0x7e6cbf['forEach'](function(_0x4edd7a){socket[_0xca12('0x6e')]('userMailQueue:remove',{'UserId':_0x4edd7a,'MailQueueId':_0x1b6b8e['id']});});});});});});})[_0xca12('0x28')](respondWithStatusCode(_0x3b1469,null))[_0xca12('0x4b')](handleError(_0x3b1469,null));};exports[_0xca12('0x83')]=function(_0xb658f6,_0x18474b,_0x3ec31f){return db[_0xca12('0x30')][_0xca12('0x4a')]({'where':{'id':_0xb658f6[_0xca12('0x49')]['id']}})[_0xca12('0x28')](handleEntityNotFound(_0x18474b,null))['then'](function(_0x239aa9){if(_0x239aa9){return _0x239aa9[_0xca12('0x83')](_0xb658f6[_0xca12('0x55')][_0xca12('0x71')],_[_0xca12('0x84')](_0xb658f6[_0xca12('0x55')],['ids','id'])||{})[_0xca12('0x85')](function(_0x10ec8f){for(var _0x27f2a9=0x0;_0x27f2a9<_0xb658f6[_0xca12('0x55')][_0xca12('0x71')][_0xca12('0x39')];_0x27f2a9+=0x1){socket[_0xca12('0x6e')]('userMailQueue:save',{'UserId':_0xb658f6['body'][_0xca12('0x71')][_0x27f2a9],'MailQueueId':_0xb658f6[_0xca12('0x49')]['id']});}return _0x10ec8f;});}})[_0xca12('0x28')](respondWithResult(_0x18474b,null))[_0xca12('0x4b')](handleError(_0x18474b,null));};exports[_0xca12('0x82')]=function(_0xabdd9,_0x543894,_0x426c05){return db[_0xca12('0x30')][_0xca12('0x4a')]({'where':{'id':_0xabdd9['params']['id']}})[_0xca12('0x28')](handleEntityNotFound(_0x543894,null))[_0xca12('0x28')](function(_0x7c8cba){if(_0x7c8cba){return _0x7c8cba['removeAgents'](_0xabdd9[_0xca12('0x34')][_0xca12('0x71')])[_0xca12('0x28')](function(){if(_[_0xca12('0x86')](_0xabdd9['query'][_0xca12('0x71')])){for(var _0x2f3422=0x0;_0x2f3422<_0xabdd9[_0xca12('0x34')][_0xca12('0x71')][_0xca12('0x39')];_0x2f3422+=0x1){socket['emit']('userMailQueue:remove',{'UserId':Number(_0xabdd9[_0xca12('0x34')][_0xca12('0x71')][_0x2f3422]),'MailQueueId':Number(_0xabdd9['params']['id'])});}}else{socket['emit'](_0xca12('0x87'),{'UserId':Number(_0xabdd9[_0xca12('0x34')][_0xca12('0x71')]),'MailQueueId':Number(_0xabdd9[_0xca12('0x49')]['id'])});}});}})[_0xca12('0x28')](respondWithStatusCode(_0x543894,null))[_0xca12('0x4b')](handleError(_0x543894,null));};exports[_0xca12('0x88')]=function(_0x140ae0,_0x95d4a4,_0x55e139){var _0x591857={};var _0x53ea7a={};var _0x10c7b6;var _0x4528ac;return db[_0xca12('0x30')][_0xca12('0x64')]({'where':{'id':_0x140ae0[_0xca12('0x49')]['id']}})[_0xca12('0x28')](handleEntityNotFound(_0x95d4a4,null))['then'](function(_0x49cfdf){if(_0x49cfdf){_0x10c7b6=_0x49cfdf;_0x53ea7a[_0xca12('0x32')]=_[_0xca12('0x33')](db[_0xca12('0x5a')][_0xca12('0x31')]);_0x53ea7a[_0xca12('0x34')]=_[_0xca12('0x33')](_0x140ae0[_0xca12('0x34')]);_0x53ea7a[_0xca12('0x35')]=_[_0xca12('0x36')](_0x53ea7a[_0xca12('0x32')],_0x53ea7a[_0xca12('0x34')]);_0x591857[_0xca12('0x38')]=_['intersection'](_0x53ea7a[_0xca12('0x32')],qs['fields'](_0x140ae0[_0xca12('0x34')]['fields']));_0x591857[_0xca12('0x38')]=_0x591857[_0xca12('0x38')][_0xca12('0x39')]?_0x591857[_0xca12('0x38')]:_0x53ea7a[_0xca12('0x32')];_0x591857[_0xca12('0x3b')]=qs[_0xca12('0x3c')](_0x140ae0[_0xca12('0x34')][_0xca12('0x3c')]);_0x591857['where']=qs[_0xca12('0x35')](_[_0xca12('0x3e')](_0x140ae0['query'],_0x53ea7a[_0xca12('0x35')]));if(_0x140ae0['query']['filter']){_0x591857['where']=_[_0xca12('0x40')](_0x591857[_0xca12('0x3d')],{'$or':_['map'](_0x591857[_0xca12('0x38')],function(_0x2266f8){var _0x36b810={};_0x36b810[_0x2266f8]={'$like':'%'+_0x140ae0['query']['filter']+'%'};return _0x36b810;})});}_0x591857=_[_0xca12('0x40')]({},_0x591857,_0x140ae0[_0xca12('0x44')]);return _0x10c7b6[_0xca12('0x88')](_0x591857);}})[_0xca12('0x28')](function(_0x52f4ec){if(_0x52f4ec){_0x4528ac=_0x52f4ec[_0xca12('0x39')];if(!_0x140ae0[_0xca12('0x34')][_0xca12('0x3a')](_0xca12('0x58'))){_0x591857[_0xca12('0x22')]=qs['limit'](_0x140ae0[_0xca12('0x34')][_0xca12('0x22')]);_0x591857[_0xca12('0x21')]=qs[_0xca12('0x21')](_0x140ae0['query'][_0xca12('0x21')]);}return _0x10c7b6[_0xca12('0x88')](_0x591857);}})[_0xca12('0x28')](function(_0x12c4d1){if(_0x12c4d1){return _0x12c4d1?{'count':_0x4528ac,'rows':_0x12c4d1}:null;}})[_0xca12('0x28')](respondWithResult(_0x95d4a4,null))['catch'](handleError(_0x95d4a4,null));};
\ No newline at end of file
+var _0x2ccb=['findAndCountAll','mailPause','SIP','createdAt','updatedAt','getTeams','findOne','Team','teams','Agents','online','voicePause','interface','sequelize','transaction','addTeams','each','forEach','emit','userMailQueue:save','ids','select','team_has_mail_queues','MailQueueId\x20=\x20?','clone','push','toString','SELECT','every','TeamId','includes','union','compact','value','isEmpty','removeAgents','userMailQueue:remove','addAgents','spread','getAgents','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','then','get','MailQueues','UserProfileResource','destroy','error','stack','send','index','MailQueue','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','params','length','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','autoAssociation','name','rawAttributes','map','UserMailQueue','User'];(function(_0x512bd5,_0x2372c7){var _0x11d728=function(_0x5f292c){while(--_0x5f292c){_0x512bd5['push'](_0x512bd5['shift']());}};_0x11d728(++_0x2372c7);}(_0x2ccb,0x1a5));var _0xb2cc=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0x2ccb[_0x4b369d];return _0x571a98;};'use strict';var pdf=require(_0xb2cc('0x0'));var emlformat=require(_0xb2cc('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xb2cc('0x2'));var jsonpatch=require(_0xb2cc('0x3'));var rp=require(_0xb2cc('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0xb2cc('0x5'));var sox=require(_0xb2cc('0x6'));var csv=require(_0xb2cc('0x7'));var ejs=require(_0xb2cc('0x8'));var fs=require('fs');var _=require(_0xb2cc('0x9'));var squel=require(_0xb2cc('0xa'));var crypto=require(_0xb2cc('0xb'));var jsforce=require(_0xb2cc('0xc'));var deskjs=require(_0xb2cc('0xd'));var toCsv=require('to-csv');var querystring=require(_0xb2cc('0xe'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xb2cc('0xf'));var qs=require(_0xb2cc('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xb2cc('0x11'))(_0xb2cc('0x12'));var utils=require('../../config/utils');var config=require(_0xb2cc('0x13'));var db=require(_0xb2cc('0x14'))['db'];config[_0xb2cc('0x15')]=_[_0xb2cc('0x16')](config[_0xb2cc('0x15')],{'host':_0xb2cc('0x17'),'port':0x18eb});var socket=require(_0xb2cc('0x18'))(new Redis(config[_0xb2cc('0x15')]));require('./mailQueue.socket')['register'](socket);function respondWithStatusCode(_0x32b2f0,_0x5d0113){_0x5d0113=_0x5d0113||0xcc;return function(_0x15afb9){if(_0x15afb9){return _0x32b2f0[_0xb2cc('0x19')](_0x5d0113);}return _0x32b2f0[_0xb2cc('0x1a')](_0x5d0113)[_0xb2cc('0x1b')]();};}function respondWithResult(_0x5a0760,_0x451118){_0x451118=_0x451118||0xc8;return function(_0x148c09){if(_0x148c09){return _0x5a0760[_0xb2cc('0x1a')](_0x451118)[_0xb2cc('0x1c')](_0x148c09);}};}function respondWithFilteredResult(_0x5e9ced,_0x1f36ea){return function(_0x4f84c){if(_0x4f84c){var _0x35f141=_0x4f84c[_0xb2cc('0x1d')],_0x517a30=_0x1f36ea['offset'],_0x47dca3=_0x1f36ea[_0xb2cc('0x1e')]+_0x1f36ea[_0xb2cc('0x1f')],_0x4e485d;if(_0x47dca3>=_0x35f141){_0x47dca3=_0x35f141;_0x4e485d=0xc8;}else{_0x4e485d=0xce;}_0x5e9ced[_0xb2cc('0x1a')](_0x4e485d);return _0x5e9ced[_0xb2cc('0x20')]('Content-Range',_0x517a30+'-'+_0x47dca3+'/'+_0x35f141)[_0xb2cc('0x1c')](_0x4f84c);}return null;};}function patchUpdates(_0x587c0e){return function(_0x4ac9ec){try{jsonpatch[_0xb2cc('0x21')](_0x4ac9ec,_0x587c0e,!![]);}catch(_0xcf5cd0){return BPromise[_0xb2cc('0x22')](_0xcf5cd0);}return _0x4ac9ec[_0xb2cc('0x23')]();};}function saveUpdates(_0x5e6da9,_0x198e22){return function(_0x5634e0){if(_0x5634e0){return _0x5634e0[_0xb2cc('0x24')](_0x5e6da9)[_0xb2cc('0x25')](function(_0x3c8158){return _0x3c8158;});}return null;};}function removeEntity(_0x542191,_0x3ebab2){return function(_0x25fcf5){if(_0x25fcf5){return _0x25fcf5['destroy']()[_0xb2cc('0x25')](function(){var _0x3f1a7d=_0x25fcf5[_0xb2cc('0x26')]({'plain':!![]});var _0x396a00=_0xb2cc('0x27');return db[_0xb2cc('0x28')][_0xb2cc('0x29')]({'where':{'type':_0x396a00,'resourceId':_0x3f1a7d['id']}})[_0xb2cc('0x25')](function(){return _0x25fcf5;});})[_0xb2cc('0x25')](function(){_0x542191[_0xb2cc('0x1a')](0xcc)[_0xb2cc('0x1b')]();});}};}function handleEntityNotFound(_0x16ddac,_0x5c4002){return function(_0x3df513){if(!_0x3df513){_0x16ddac['sendStatus'](0x194);}return _0x3df513;};}function handleError(_0x1200b3,_0x1469b2){_0x1469b2=_0x1469b2||0x1f4;return function(_0x408706){logger[_0xb2cc('0x2a')](_0x408706[_0xb2cc('0x2b')]);if(_0x408706['name']){delete _0x408706['name'];}_0x1200b3[_0xb2cc('0x1a')](_0x1469b2)[_0xb2cc('0x2c')](_0x408706);};}exports[_0xb2cc('0x2d')]=function(_0x4b81a6,_0x3ee8e1){var _0xbc355d={},_0x511648={},_0x2367fe={'count':0x0,'rows':[]};var _0x27d4e5=db[_0xb2cc('0x2e')]['rawAttributes'];_0x511648[_0xb2cc('0x2f')]=_[_0xb2cc('0x30')](_0x27d4e5);_0x511648[_0xb2cc('0x31')]=_[_0xb2cc('0x30')](_0x4b81a6[_0xb2cc('0x31')]);_0x511648[_0xb2cc('0x32')]=_[_0xb2cc('0x33')](_0x511648['model'],_0x511648[_0xb2cc('0x31')]);_0xbc355d[_0xb2cc('0x34')]=_['intersection'](_0x511648[_0xb2cc('0x2f')],qs[_0xb2cc('0x35')](_0x4b81a6[_0xb2cc('0x31')][_0xb2cc('0x35')]));_0xbc355d[_0xb2cc('0x34')]=_0xbc355d[_0xb2cc('0x34')]['length']?_0xbc355d[_0xb2cc('0x34')]:_0x511648[_0xb2cc('0x2f')];if(!_0x4b81a6[_0xb2cc('0x31')][_0xb2cc('0x36')](_0xb2cc('0x37'))){_0xbc355d[_0xb2cc('0x1f')]=qs[_0xb2cc('0x1f')](_0x4b81a6[_0xb2cc('0x31')]['limit']);_0xbc355d[_0xb2cc('0x1e')]=qs[_0xb2cc('0x1e')](_0x4b81a6[_0xb2cc('0x31')][_0xb2cc('0x1e')]);}_0xbc355d[_0xb2cc('0x38')]=qs[_0xb2cc('0x39')](_0x4b81a6['query'][_0xb2cc('0x39')]);_0xbc355d['where']=qs[_0xb2cc('0x32')](_[_0xb2cc('0x3a')](_0x4b81a6[_0xb2cc('0x31')],_0x511648[_0xb2cc('0x32')]));if(_0x4b81a6[_0xb2cc('0x31')][_0xb2cc('0x3b')]){_0xbc355d[_0xb2cc('0x3c')]=_[_0xb2cc('0x3d')](_0xbc355d['where'],{'$or':_['map'](_0x27d4e5,function(_0x1b151b){if(_0x1b151b[_0xb2cc('0x3e')][_0xb2cc('0x3f')]!==_0xb2cc('0x40')){var _0x1d9dfe={};_0x1d9dfe[_0x1b151b[_0xb2cc('0x41')]]={'$like':'%'+_0x4b81a6[_0xb2cc('0x31')][_0xb2cc('0x3b')]+'%'};return _0x1d9dfe;}})});}_0xbc355d=_[_0xb2cc('0x3d')]({},_0xbc355d,_0x4b81a6[_0xb2cc('0x42')]);var _0xdb9138={'where':_0xbc355d[_0xb2cc('0x3c')]};return db['MailQueue']['count'](_0xdb9138)[_0xb2cc('0x25')](function(_0x5b9de1){_0x2367fe[_0xb2cc('0x1d')]=_0x5b9de1;if(_0x4b81a6[_0xb2cc('0x31')][_0xb2cc('0x43')]){_0xbc355d[_0xb2cc('0x44')]=[{'all':!![]}];}return db[_0xb2cc('0x2e')][_0xb2cc('0x45')](_0xbc355d);})[_0xb2cc('0x25')](function(_0x4efcae){_0x2367fe[_0xb2cc('0x46')]=_0x4efcae;return _0x2367fe;})['then'](respondWithFilteredResult(_0x3ee8e1,_0xbc355d))[_0xb2cc('0x47')](handleError(_0x3ee8e1,null));};exports['show']=function(_0x3e1c20,_0x259d18){var _0x3a252a={'raw':!![],'where':{'id':_0x3e1c20[_0xb2cc('0x48')]['id']}},_0x3be8e7={};_0x3be8e7['model']=_['keys'](db['MailQueue']['rawAttributes']);_0x3be8e7['query']=_[_0xb2cc('0x30')](_0x3e1c20['query']);_0x3be8e7['filters']=_[_0xb2cc('0x33')](_0x3be8e7[_0xb2cc('0x2f')],_0x3be8e7[_0xb2cc('0x31')]);_0x3a252a[_0xb2cc('0x34')]=_[_0xb2cc('0x33')](_0x3be8e7[_0xb2cc('0x2f')],qs[_0xb2cc('0x35')](_0x3e1c20[_0xb2cc('0x31')][_0xb2cc('0x35')]));_0x3a252a[_0xb2cc('0x34')]=_0x3a252a['attributes'][_0xb2cc('0x49')]?_0x3a252a['attributes']:_0x3be8e7[_0xb2cc('0x2f')];if(_0x3e1c20[_0xb2cc('0x31')][_0xb2cc('0x43')]){_0x3a252a['include']=[{'all':!![]}];}_0x3a252a=_[_0xb2cc('0x3d')]({},_0x3a252a,_0x3e1c20['options']);return db[_0xb2cc('0x2e')][_0xb2cc('0x4a')](_0x3a252a)['then'](handleEntityNotFound(_0x259d18,null))['then'](respondWithResult(_0x259d18,null))['catch'](handleError(_0x259d18,null));};exports['create']=function(_0x3e62cc,_0x2c21cb){return db[_0xb2cc('0x2e')][_0xb2cc('0x4b')](_0x3e62cc[_0xb2cc('0x4c')],{})[_0xb2cc('0x25')](function(_0x37f45d){var _0x3b7cb5=_0x3e62cc[_0xb2cc('0x4d')][_0xb2cc('0x26')]({'plain':!![]});if(!_0x3b7cb5)throw new Error(_0xb2cc('0x4e'));if(_0x3b7cb5['role']===_0xb2cc('0x4d')){var _0x13862e=_0x37f45d['get']({'plain':!![]});var _0x272053='MailQueues';return db[_0xb2cc('0x4f')][_0xb2cc('0x4a')]({'where':{'name':_0x272053,'userProfileId':_0x3b7cb5[_0xb2cc('0x50')]},'raw':!![]})[_0xb2cc('0x25')](function(_0x41f195){if(_0x41f195&&_0x41f195[_0xb2cc('0x51')]===0x0){return db['UserProfileResource']['create']({'name':_0x13862e['name'],'resourceId':_0x13862e['id'],'type':_0x41f195[_0xb2cc('0x52')],'sectionId':_0x41f195['id']},{})[_0xb2cc('0x25')](function(){return _0x37f45d;});}else{return _0x37f45d;}})['catch'](function(_0x341d2e){logger[_0xb2cc('0x2a')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x341d2e);throw _0x341d2e;});}return _0x37f45d;})[_0xb2cc('0x25')](respondWithResult(_0x2c21cb,0xc9))[_0xb2cc('0x47')](handleError(_0x2c21cb,null));};exports['update']=function(_0x4e1572,_0x48ebb2){if(_0x4e1572[_0xb2cc('0x4c')]['id']){delete _0x4e1572[_0xb2cc('0x4c')]['id'];}return db[_0xb2cc('0x2e')][_0xb2cc('0x4a')]({'where':{'id':_0x4e1572[_0xb2cc('0x48')]['id']}})[_0xb2cc('0x25')](handleEntityNotFound(_0x48ebb2,null))['then'](saveUpdates(_0x4e1572[_0xb2cc('0x4c')],null))[_0xb2cc('0x25')](respondWithResult(_0x48ebb2,null))[_0xb2cc('0x47')](handleError(_0x48ebb2,null));};exports[_0xb2cc('0x29')]=function(_0x5161c3,_0x112be1){return db[_0xb2cc('0x2e')]['find']({'where':{'id':_0x5161c3['params']['id']}})[_0xb2cc('0x25')](handleEntityNotFound(_0x112be1,null))[_0xb2cc('0x25')](removeEntity(_0x112be1,null))[_0xb2cc('0x47')](handleError(_0x112be1,null));};exports['describe']=function(_0x139ea0,_0x4d6b08){return db[_0xb2cc('0x2e')]['describe']()['then'](respondWithResult(_0x4d6b08,null))[_0xb2cc('0x47')](handleError(_0x4d6b08,null));};exports['getMembers']=function(_0x27a213,_0x51c09b,_0xd70fa4){var _0x18fa83={'raw':!![],'where':{}},_0x404a75={},_0x8111e6;return db[_0xb2cc('0x2e')]['findOne']({'where':{'id':_0x27a213['params']['id']}})[_0xb2cc('0x25')](handleEntityNotFound(_0x51c09b,null))['then'](function(_0x532e2a){if(_0x532e2a){_0x8111e6=_0x532e2a[_0xb2cc('0x26')]({'plain':!![]});_0x404a75[_0xb2cc('0x2f')]=_[_0xb2cc('0x30')](db['UserMailQueue'][_0xb2cc('0x53')]);_0x404a75[_0xb2cc('0x31')]=_[_0xb2cc('0x30')](_0x27a213[_0xb2cc('0x31')]);_0x404a75[_0xb2cc('0x32')]=_[_0xb2cc('0x33')](_0x404a75[_0xb2cc('0x2f')],_0x404a75[_0xb2cc('0x31')]);_0x18fa83['attributes']=_[_0xb2cc('0x33')](_0x404a75['model'],qs[_0xb2cc('0x35')](_0x27a213[_0xb2cc('0x31')][_0xb2cc('0x35')]));_0x18fa83[_0xb2cc('0x34')]=_0x18fa83['attributes']['length']?_0x18fa83[_0xb2cc('0x34')]:_0x404a75[_0xb2cc('0x2f')];if(!_0x27a213['query']['hasOwnProperty']('nolimit')){_0x18fa83[_0xb2cc('0x1f')]=qs[_0xb2cc('0x1f')](_0x27a213[_0xb2cc('0x31')][_0xb2cc('0x1f')]);_0x18fa83[_0xb2cc('0x1e')]=qs[_0xb2cc('0x1e')](_0x27a213[_0xb2cc('0x31')]['offset']);}_0x18fa83[_0xb2cc('0x38')]=qs[_0xb2cc('0x39')](_0x27a213[_0xb2cc('0x31')][_0xb2cc('0x39')]);_0x18fa83[_0xb2cc('0x3c')]=qs[_0xb2cc('0x32')](_[_0xb2cc('0x3a')](_0x27a213[_0xb2cc('0x31')],_0x404a75[_0xb2cc('0x32')]));_0x18fa83['where']['MailQueueId']=_0x532e2a['id'];if(_0x27a213['query'][_0xb2cc('0x3b')]){_0x18fa83[_0xb2cc('0x3c')]=_[_0xb2cc('0x3d')](_0x18fa83['where'],{'$or':_[_0xb2cc('0x54')](_0x18fa83[_0xb2cc('0x34')],function(_0x114375){var _0x2e56a7={};_0x2e56a7[_0x114375]={'$like':'%'+_0x27a213[_0xb2cc('0x31')]['filter']+'%'};return _0x2e56a7;})});}_0x18fa83=_[_0xb2cc('0x3d')]({},_0x18fa83,_0x27a213[_0xb2cc('0x42')]);return db[_0xb2cc('0x55')][_0xb2cc('0x45')](_0x18fa83);}})['then'](function(_0x1442e0){if(_0x1442e0){return db[_0xb2cc('0x56')][_0xb2cc('0x57')]({'where':{'id':_['map'](_0x1442e0,'UserId'),'role':'agent'},'attributes':['id',_0xb2cc('0x52'),_0xb2cc('0x58'),'updatedAt','createdAt']});}})[_0xb2cc('0x25')](function(_0x167280){if(_0x167280){return{'count':_0x167280[_0xb2cc('0x1d')],'rows':_[_0xb2cc('0x54')](_0x167280[_0xb2cc('0x46')],function(_0x475e40){return{'membername':_0x475e40[_0xb2cc('0x52')],'UserId':_0x475e40['id'],'queue_name':_0x8111e6[_0xb2cc('0x52')],'MailQueueId':_0x8111e6['id'],'interface':util['format']('%s/%s',_0xb2cc('0x59'),_0x475e40[_0xb2cc('0x52')]),'penalty':0x0,'paused':_0x475e40[_0xb2cc('0x58')],'createdAt':_0x475e40[_0xb2cc('0x5a')],'updatedAt':_0x475e40[_0xb2cc('0x5b')]};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x51c09b,_0x18fa83))[_0xb2cc('0x47')](handleError(_0x51c09b,null));};exports[_0xb2cc('0x5c')]=function(_0x331ac6,_0x46b3a1,_0x264efb){var _0x41d790={};var _0x4b9276={};var _0xcf3c57;var _0x5d6335;return db['MailQueue'][_0xb2cc('0x5d')]({'where':{'id':_0x331ac6['params']['id']}})[_0xb2cc('0x25')](handleEntityNotFound(_0x46b3a1,null))['then'](function(_0x57c400){if(_0x57c400){_0xcf3c57=_0x57c400;_0x4b9276[_0xb2cc('0x2f')]=_[_0xb2cc('0x30')](db[_0xb2cc('0x5e')]['rawAttributes']);_0x4b9276[_0xb2cc('0x31')]=_[_0xb2cc('0x30')](_0x331ac6[_0xb2cc('0x31')]);_0x4b9276[_0xb2cc('0x32')]=_['intersection'](_0x4b9276[_0xb2cc('0x2f')],_0x4b9276[_0xb2cc('0x31')]);_0x41d790[_0xb2cc('0x34')]=_[_0xb2cc('0x33')](_0x4b9276[_0xb2cc('0x2f')],qs['fields'](_0x331ac6['query'][_0xb2cc('0x35')]));_0x41d790[_0xb2cc('0x34')]=_0x41d790[_0xb2cc('0x34')]['length']?_0x41d790[_0xb2cc('0x34')]:_0x4b9276['model'];_0x41d790[_0xb2cc('0x38')]=qs[_0xb2cc('0x39')](_0x331ac6[_0xb2cc('0x31')][_0xb2cc('0x39')]);_0x41d790['where']=qs[_0xb2cc('0x32')](_[_0xb2cc('0x3a')](_0x331ac6[_0xb2cc('0x31')],_0x4b9276['filters']));if(_0x331ac6[_0xb2cc('0x31')][_0xb2cc('0x3b')]){_0x41d790[_0xb2cc('0x3c')]=_[_0xb2cc('0x3d')](_0x41d790[_0xb2cc('0x3c')],{'$or':_[_0xb2cc('0x54')](_0x41d790[_0xb2cc('0x34')],function(_0x127fb6){var _0x56a2c9={};_0x56a2c9[_0x127fb6]={'$like':'%'+_0x331ac6['query'][_0xb2cc('0x3b')]+'%'};return _0x56a2c9;})});}_0x41d790=_[_0xb2cc('0x3d')]({},_0x41d790,_0x331ac6[_0xb2cc('0x42')]);return _0xcf3c57[_0xb2cc('0x5c')](_0x41d790);}})[_0xb2cc('0x25')](function(_0x1ccecd){if(_0x1ccecd){_0x5d6335=_0x1ccecd[_0xb2cc('0x49')];if(!_0x331ac6[_0xb2cc('0x31')][_0xb2cc('0x36')](_0xb2cc('0x37'))){_0x41d790[_0xb2cc('0x1f')]=qs[_0xb2cc('0x1f')](_0x331ac6[_0xb2cc('0x31')]['limit']);_0x41d790[_0xb2cc('0x1e')]=qs[_0xb2cc('0x1e')](_0x331ac6['query'][_0xb2cc('0x1e')]);}return _0xcf3c57[_0xb2cc('0x5c')](_0x41d790);}})[_0xb2cc('0x25')](function(_0x12f0dd){if(_0x12f0dd){return _0x12f0dd?{'count':_0x5d6335,'rows':_0x12f0dd}:null;}})[_0xb2cc('0x25')](respondWithResult(_0x46b3a1,null))['catch'](handleError(_0x46b3a1,null));};exports['addTeams']=function(_0x59e7d1,_0xb12879,_0x1e5f3c){var _0x2bf06a=_0x59e7d1['body'][_0xb2cc('0x5f')];return db[_0xb2cc('0x5e')][_0xb2cc('0x45')]({'where':{'id':_[_0xb2cc('0x54')](_0x2bf06a,'id')},'attributes':['id'],'include':[{'model':db[_0xb2cc('0x56')],'as':_0xb2cc('0x60'),'attributes':['id',_0xb2cc('0x52'),_0xb2cc('0x61'),_0xb2cc('0x62'),_0xb2cc('0x63')],'raw':!![]}]})[_0xb2cc('0x25')](function(_0x5b6eca){if(_0x5b6eca){var _0x20f379=_['flatMap'](_0x5b6eca,function(_0x2ffe31){var _0x8ad613=_0x2ffe31[_0xb2cc('0x26')]({'plain':!![]});return _0x8ad613[_0xb2cc('0x60')];});return db[_0xb2cc('0x2e')][_0xb2cc('0x4a')]({'where':{'id':_0x59e7d1[_0xb2cc('0x48')]['id']}})[_0xb2cc('0x25')](function(_0x2b7b16){return db[_0xb2cc('0x64')][_0xb2cc('0x65')](function(_0xdc45da){return _0x2b7b16[_0xb2cc('0x66')](_['map'](_0x2bf06a,'id'),{'transaction':_0xdc45da})[_0xb2cc('0x25')](function(){return BPromise[_0xb2cc('0x67')](_0x20f379,function(_0x556b4c){return db[_0xb2cc('0x55')]['findOrCreate']({'where':{'UserId':_0x556b4c['id'],'MailQueueId':_0x59e7d1[_0xb2cc('0x48')]['id']},'transaction':_0xdc45da});});})[_0xb2cc('0x25')](function(){_0x20f379[_0xb2cc('0x68')](function(_0x50cc00){socket[_0xb2cc('0x69')](_0xb2cc('0x6a'),{'UserId':_0x50cc00['id'],'MailQueueId':_0x2b7b16['id']});});});});});}})[_0xb2cc('0x25')](respondWithStatusCode(_0xb12879,null))[_0xb2cc('0x47')](handleError(_0xb12879,null));};exports['removeTeams']=function(_0x2c2e23,_0x30f0ab,_0x510b37){return db[_0xb2cc('0x5e')][_0xb2cc('0x45')]({'where':{'id':_0x2c2e23[_0xb2cc('0x31')][_0xb2cc('0x6b')]},'attributes':['id'],'include':[{'model':db[_0xb2cc('0x56')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0xb2cc('0x25')](handleEntityNotFound(_0x30f0ab,null))[_0xb2cc('0x25')](function(_0x5271b7){var _0x158657=_[_0xb2cc('0x54')](_0x5271b7,'id');var _0x3c7ee3=[];var _0x4c898e=[];var _0x7548d5=squel[_0xb2cc('0x6c')]();_0x7548d5[_0xb2cc('0x41')]('tq.TeamId')['from'](_0xb2cc('0x6d'),'tq')['join']('user_has_teams','ut','ut.TeamId\x20=\x20tq.TeamId')[_0xb2cc('0x3c')](_0xb2cc('0x6e'),_0x2c2e23[_0xb2cc('0x48')]['id']);for(var _0xfb969b=0x0;_0xfb969b<_0x5271b7['length'];_0xfb969b+=0x1){let _0x59a77a=_0x5271b7[_0xfb969b];for(var _0x4e9a74=0x0;_0x4e9a74<_0x59a77a[_0xb2cc('0x60')][_0xb2cc('0x49')];_0x4e9a74+=0x1){let _0x2a809f=_0x59a77a[_0xb2cc('0x60')][_0x4e9a74];var _0x4a85ca=_0x7548d5[_0xb2cc('0x6f')]();_0x4a85ca[_0xb2cc('0x3c')]('ut.UserId\x20=\x20?',_0x2a809f['id']);_0x4c898e[_0xb2cc('0x70')](db[_0xb2cc('0x64')]['query'](_0x4a85ca[_0xb2cc('0x71')](),{'type':db[_0xb2cc('0x64')]['QueryTypes'][_0xb2cc('0x72')]})['then'](function(_0x2d7ae0){if(_0x2d7ae0[_0xb2cc('0x49')]===0x1){return _0x2a809f['id'];}else{var _0x22cc8c=_[_0xb2cc('0x73')](_[_0xb2cc('0x54')](_0x2d7ae0,_0xb2cc('0x74')),function(_0x512455){return _[_0xb2cc('0x75')](_0x158657,_0x512455);});if(_0x22cc8c){return _0x2a809f['id'];}}}));}}return BPromise['all'](_0x4c898e)['then'](function(_0x186e17){_0x3c7ee3=_(_0x3c7ee3)[_0xb2cc('0x76')](_0x186e17)[_0xb2cc('0x77')]()[_0xb2cc('0x78')]();return db[_0xb2cc('0x2e')]['find']({'where':{'id':_0x2c2e23[_0xb2cc('0x48')]['id']}})[_0xb2cc('0x25')](function(_0x33ba0a){return db[_0xb2cc('0x64')][_0xb2cc('0x65')](function(_0x43b406){return _0x33ba0a['removeTeams'](_0x2c2e23[_0xb2cc('0x31')][_0xb2cc('0x6b')],{'transaction':_0x43b406})[_0xb2cc('0x25')](function(){if(!_[_0xb2cc('0x79')](_0x3c7ee3)){return _0x33ba0a[_0xb2cc('0x7a')](_0x3c7ee3,{'transaction':_0x43b406});}})[_0xb2cc('0x25')](function(){_0x3c7ee3['forEach'](function(_0xe0cc34){socket[_0xb2cc('0x69')](_0xb2cc('0x7b'),{'UserId':_0xe0cc34,'MailQueueId':_0x33ba0a['id']});});});});});});})[_0xb2cc('0x25')](respondWithStatusCode(_0x30f0ab,null))['catch'](handleError(_0x30f0ab,null));};exports[_0xb2cc('0x7c')]=function(_0x13827a,_0x2ec42b,_0x3fe702){return db[_0xb2cc('0x2e')][_0xb2cc('0x4a')]({'where':{'id':_0x13827a['params']['id']}})['then'](handleEntityNotFound(_0x2ec42b,null))['then'](function(_0x4c120d){if(_0x4c120d){return _0x4c120d[_0xb2cc('0x7c')](_0x13827a[_0xb2cc('0x4c')][_0xb2cc('0x6b')],_['omit'](_0x13827a['body'],['ids','id'])||{})[_0xb2cc('0x7d')](function(_0x20b056){for(var _0x2660c6=0x0;_0x2660c6<_0x13827a[_0xb2cc('0x4c')][_0xb2cc('0x6b')][_0xb2cc('0x49')];_0x2660c6+=0x1){socket[_0xb2cc('0x69')](_0xb2cc('0x6a'),{'UserId':_0x13827a[_0xb2cc('0x4c')]['ids'][_0x2660c6],'MailQueueId':_0x13827a['params']['id']});}return _0x20b056;});}})['then'](respondWithResult(_0x2ec42b,null))[_0xb2cc('0x47')](handleError(_0x2ec42b,null));};exports[_0xb2cc('0x7a')]=function(_0x554887,_0x5407bb,_0x74be7f){return db['MailQueue'][_0xb2cc('0x4a')]({'where':{'id':_0x554887[_0xb2cc('0x48')]['id']}})['then'](handleEntityNotFound(_0x5407bb,null))[_0xb2cc('0x25')](function(_0x338ee8){if(_0x338ee8){return _0x338ee8[_0xb2cc('0x7a')](_0x554887[_0xb2cc('0x31')][_0xb2cc('0x6b')])[_0xb2cc('0x25')](function(){if(_['isArray'](_0x554887[_0xb2cc('0x31')][_0xb2cc('0x6b')])){for(var _0x4c1914=0x0;_0x4c1914<_0x554887[_0xb2cc('0x31')]['ids']['length'];_0x4c1914+=0x1){socket[_0xb2cc('0x69')](_0xb2cc('0x7b'),{'UserId':Number(_0x554887[_0xb2cc('0x31')][_0xb2cc('0x6b')][_0x4c1914]),'MailQueueId':Number(_0x554887[_0xb2cc('0x48')]['id'])});}}else{socket[_0xb2cc('0x69')](_0xb2cc('0x7b'),{'UserId':Number(_0x554887[_0xb2cc('0x31')][_0xb2cc('0x6b')]),'MailQueueId':Number(_0x554887[_0xb2cc('0x48')]['id'])});}});}})[_0xb2cc('0x25')](respondWithStatusCode(_0x5407bb,null))[_0xb2cc('0x47')](handleError(_0x5407bb,null));};exports[_0xb2cc('0x7e')]=function(_0x39d32f,_0x222906,_0x41359e){var _0x4d345b={};var _0x345cff={};var _0x5c4be5;var _0x5eb164;return db[_0xb2cc('0x2e')][_0xb2cc('0x5d')]({'where':{'id':_0x39d32f[_0xb2cc('0x48')]['id']}})[_0xb2cc('0x25')](handleEntityNotFound(_0x222906,null))['then'](function(_0x5291d6){if(_0x5291d6){_0x5c4be5=_0x5291d6;_0x345cff[_0xb2cc('0x2f')]=_[_0xb2cc('0x30')](db['User'][_0xb2cc('0x53')]);_0x345cff[_0xb2cc('0x31')]=_[_0xb2cc('0x30')](_0x39d32f['query']);_0x345cff[_0xb2cc('0x32')]=_[_0xb2cc('0x33')](_0x345cff[_0xb2cc('0x2f')],_0x345cff['query']);_0x4d345b['attributes']=_['intersection'](_0x345cff[_0xb2cc('0x2f')],qs[_0xb2cc('0x35')](_0x39d32f[_0xb2cc('0x31')]['fields']));_0x4d345b[_0xb2cc('0x34')]=_0x4d345b[_0xb2cc('0x34')]['length']?_0x4d345b[_0xb2cc('0x34')]:_0x345cff['model'];_0x4d345b[_0xb2cc('0x38')]=qs['sort'](_0x39d32f[_0xb2cc('0x31')]['sort']);_0x4d345b['where']=qs[_0xb2cc('0x32')](_[_0xb2cc('0x3a')](_0x39d32f['query'],_0x345cff[_0xb2cc('0x32')]));if(_0x39d32f[_0xb2cc('0x31')][_0xb2cc('0x3b')]){_0x4d345b[_0xb2cc('0x3c')]=_['merge'](_0x4d345b[_0xb2cc('0x3c')],{'$or':_['map'](_0x4d345b['attributes'],function(_0x31dc9d){var _0xab470c={};_0xab470c[_0x31dc9d]={'$like':'%'+_0x39d32f[_0xb2cc('0x31')][_0xb2cc('0x3b')]+'%'};return _0xab470c;})});}_0x4d345b=_[_0xb2cc('0x3d')]({},_0x4d345b,_0x39d32f[_0xb2cc('0x42')]);return _0x5c4be5[_0xb2cc('0x7e')](_0x4d345b);}})[_0xb2cc('0x25')](function(_0x37e771){if(_0x37e771){_0x5eb164=_0x37e771[_0xb2cc('0x49')];if(!_0x39d32f[_0xb2cc('0x31')][_0xb2cc('0x36')](_0xb2cc('0x37'))){_0x4d345b[_0xb2cc('0x1f')]=qs[_0xb2cc('0x1f')](_0x39d32f[_0xb2cc('0x31')]['limit']);_0x4d345b['offset']=qs[_0xb2cc('0x1e')](_0x39d32f['query']['offset']);}return _0x5c4be5[_0xb2cc('0x7e')](_0x4d345b);}})['then'](function(_0x311a24){if(_0x311a24){return _0x311a24?{'count':_0x5eb164,'rows':_0x311a24}:null;}})[_0xb2cc('0x25')](respondWithResult(_0x222906,null))[_0xb2cc('0x47')](handleError(_0x222906,null));};
\ No newline at end of file
index 6859118..00e1450 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d5d=['../../mysqldb','MailQueue','setMaxListeners','save','remove','emit','hook','exports','events'];(function(_0x2ba6c8,_0x1f4526){var _0x5c95cc=function(_0x5bab7d){while(--_0x5bab7d){_0x2ba6c8['push'](_0x2ba6c8['shift']());}};_0x5c95cc(++_0x1f4526);}(_0x4d5d,0xd7));var _0xd4d5=function(_0x91964a,_0x2dc2f6){_0x91964a=_0x91964a-0x0;var _0x4490b1=_0x4d5d[_0x91964a];return _0x4490b1;};'use strict';var EventEmitter=require(_0xd4d5('0x0'));var MailQueue=require(_0xd4d5('0x1'))['db'][_0xd4d5('0x2')];var MailQueueEvents=new EventEmitter();MailQueueEvents[_0xd4d5('0x3')](0x0);var events={'afterCreate':_0xd4d5('0x4'),'afterUpdate':'update','afterDestroy':_0xd4d5('0x5')};function emitEvent(_0x2b0b41){return function(_0x56d187,_0x5cd190,_0x1b2a90){MailQueueEvents[_0xd4d5('0x6')](_0x2b0b41+':'+_0x56d187['id'],_0x56d187);MailQueueEvents[_0xd4d5('0x6')](_0x2b0b41,_0x56d187);_0x1b2a90(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];MailQueue[_0xd4d5('0x7')](e,emitEvent(event));}}module[_0xd4d5('0x8')]=MailQueueEvents;
\ No newline at end of file
+var _0xcf44=['../../mysqldb','MailQueue','setMaxListeners','save','remove','emit','hasOwnProperty','hook','events'];(function(_0x54defc,_0x627178){var _0x1955d3=function(_0x299afe){while(--_0x299afe){_0x54defc['push'](_0x54defc['shift']());}};_0x1955d3(++_0x627178);}(_0xcf44,0x15e));var _0x4cf4=function(_0x1ff2ef,_0x2d439c){_0x1ff2ef=_0x1ff2ef-0x0;var _0x36d093=_0xcf44[_0x1ff2ef];return _0x36d093;};'use strict';var EventEmitter=require(_0x4cf4('0x0'));var MailQueue=require(_0x4cf4('0x1'))['db'][_0x4cf4('0x2')];var MailQueueEvents=new EventEmitter();MailQueueEvents[_0x4cf4('0x3')](0x0);var events={'afterCreate':_0x4cf4('0x4'),'afterUpdate':'update','afterDestroy':_0x4cf4('0x5')};function emitEvent(_0xe7ffab){return function(_0x50694f,_0x49e132,_0xf38e74){MailQueueEvents[_0x4cf4('0x6')](_0xe7ffab+':'+_0x50694f['id'],_0x50694f);MailQueueEvents[_0x4cf4('0x6')](_0xe7ffab,_0x50694f);_0xf38e74(null);};}for(var e in events){if(events[_0x4cf4('0x7')](e)){var event=events[e];MailQueue[_0x4cf4('0x8')](e,emitEvent(event));}}module['exports']=MailQueueEvents;
\ No newline at end of file
index 5bb03b3..a8ff0a3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x70e0=['mail_queues','lodash','util','../../config/logger','bluebird','request-promise','path','rimraf','./mailQueue.attributes'];(function(_0x1a15d0,_0xfd2b6a){var _0x42f1f7=function(_0x441759){while(--_0x441759){_0x1a15d0['push'](_0x1a15d0['shift']());}};_0x42f1f7(++_0xfd2b6a);}(_0x70e0,0x17b));var _0x070e=function(_0x4c6ef3,_0x46a394){_0x4c6ef3=_0x4c6ef3-0x0;var _0x485cab=_0x70e0[_0x4c6ef3];return _0x485cab;};'use strict';var _=require(_0x070e('0x0'));var util=require(_0x070e('0x1'));var logger=require(_0x070e('0x2'))('api');var moment=require('moment');var BPromise=require(_0x070e('0x3'));var rp=require(_0x070e('0x4'));var fs=require('fs');var path=require(_0x070e('0x5'));var rimraf=require(_0x070e('0x6'));var config=require('../../config/environment');var attributes=require(_0x070e('0x7'));module['exports']=function(_0x46fe68,_0x4b041d){return _0x46fe68['define']('MailQueue',attributes,{'tableName':_0x070e('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9c44=['request-promise','path','./mailQueue.attributes','define','MailQueue','mail_queues','../../config/logger','api','moment','bluebird'];(function(_0x29acbc,_0x515523){var _0x2dee81=function(_0x3fb46e){while(--_0x3fb46e){_0x29acbc['push'](_0x29acbc['shift']());}};_0x2dee81(++_0x515523);}(_0x9c44,0x178));var _0x49c4=function(_0x334841,_0x2bbc4c){_0x334841=_0x334841-0x0;var _0x5beb4b=_0x9c44[_0x334841];return _0x5beb4b;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x49c4('0x0'))(_0x49c4('0x1'));var moment=require(_0x49c4('0x2'));var BPromise=require(_0x49c4('0x3'));var rp=require(_0x49c4('0x4'));var fs=require('fs');var path=require(_0x49c4('0x5'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x49c4('0x6'));module['exports']=function(_0xc1278f,_0x6030ae){return _0xc1278f[_0x49c4('0x7')](_0x49c4('0x8'),attributes,{'tableName':_0x49c4('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2522545..5c03059 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa1ef=['../../config/logger','rpc','../../config/environment','client','http','defaults','redis','localhost','./mailQueue.socket','register','request','then','info','MailQueue,\x20%s,\x20%s','request\x20sent','debug','MailQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetMailQueue','MailQueue','options','where','attributes','limit','map','include','model','ShowMailQueue','raw','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils'];(function(_0x1a8a87,_0x1a142d){var _0x1681b7=function(_0x552c5e){while(--_0x552c5e){_0x1a8a87['push'](_0x1a8a87['shift']());}};_0x1681b7(++_0x1a142d);}(_0xa1ef,0x9d));var _0xfa1e=function(_0x1dcbc6,_0x219d61){_0x1dcbc6=_0x1dcbc6-0x0;var _0x1a0893=_0xa1ef[_0x1dcbc6];return _0x1a0893;};'use strict';var _=require(_0xfa1e('0x0'));var util=require(_0xfa1e('0x1'));var moment=require(_0xfa1e('0x2'));var BPromise=require(_0xfa1e('0x3'));var rs=require(_0xfa1e('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xfa1e('0x5'))['db'];var utils=require(_0xfa1e('0x6'));var logger=require(_0xfa1e('0x7'))(_0xfa1e('0x8'));var config=require(_0xfa1e('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xfa1e('0xa')][_0xfa1e('0xb')]({'port':0x232a});config['redis']=_[_0xfa1e('0xc')](config[_0xfa1e('0xd')],{'host':_0xfa1e('0xe'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xfa1e('0xd')]));require(_0xfa1e('0xf'))[_0xfa1e('0x10')](socket);function respondWithRpcPromise(_0x10092c,_0x99074c,_0xba6bd6){return new BPromise(function(_0x5bc8c3,_0x51bdad){return client[_0xfa1e('0x11')](_0x10092c,_0xba6bd6)[_0xfa1e('0x12')](function(_0x124c49){logger[_0xfa1e('0x13')](_0xfa1e('0x14'),_0x99074c,_0xfa1e('0x15'));logger[_0xfa1e('0x16')](_0xfa1e('0x17'),_0x99074c,'request\x20sent',JSON[_0xfa1e('0x18')](_0x124c49));if(_0x124c49[_0xfa1e('0x19')]){if(_0x124c49[_0xfa1e('0x19')][_0xfa1e('0x1a')]===0x1f4){logger[_0xfa1e('0x19')](_0xfa1e('0x14'),_0x99074c,_0x124c49[_0xfa1e('0x19')][_0xfa1e('0x1b')]);return _0x51bdad(_0x124c49[_0xfa1e('0x19')][_0xfa1e('0x1b')]);}logger[_0xfa1e('0x19')]('MailQueue,\x20%s,\x20%s',_0x99074c,_0x124c49[_0xfa1e('0x19')][_0xfa1e('0x1b')]);return _0x5bc8c3(_0x124c49[_0xfa1e('0x19')][_0xfa1e('0x1b')]);}else{logger[_0xfa1e('0x13')]('MailQueue,\x20%s,\x20%s',_0x99074c,_0xfa1e('0x15'));_0x5bc8c3(_0x124c49[_0xfa1e('0x1c')][_0xfa1e('0x1b')]);}})[_0xfa1e('0x1d')](function(_0x11c8ef){logger[_0xfa1e('0x19')](_0xfa1e('0x14'),_0x99074c,_0x11c8ef);_0x51bdad(_0x11c8ef);});});}exports[_0xfa1e('0x1e')]=function(_0x30d029){var _0x2bba4b=this;return new Promise(function(_0x8929f0,_0x35ab1f){return db[_0xfa1e('0x1f')]['findAll']({'raw':_0x30d029[_0xfa1e('0x20')]?_0x30d029[_0xfa1e('0x20')]['raw']===undefined?!![]:![]:!![],'where':_0x30d029[_0xfa1e('0x20')]?_0x30d029[_0xfa1e('0x20')][_0xfa1e('0x21')]||null:null,'attributes':_0x30d029[_0xfa1e('0x20')]?_0x30d029['options'][_0xfa1e('0x22')]||null:null,'limit':_0x30d029[_0xfa1e('0x20')]?_0x30d029[_0xfa1e('0x20')][_0xfa1e('0x23')]||null:null,'include':_0x30d029[_0xfa1e('0x20')]?_0x30d029[_0xfa1e('0x20')]['include']?_[_0xfa1e('0x24')](_0x30d029[_0xfa1e('0x20')][_0xfa1e('0x25')],function(_0x2b00c1){return{'model':db[_0x2b00c1[_0xfa1e('0x26')]],'as':_0x2b00c1['as'],'attributes':_0x2b00c1[_0xfa1e('0x22')],'include':_0x2b00c1[_0xfa1e('0x25')]?_[_0xfa1e('0x24')](_0x2b00c1[_0xfa1e('0x25')],function(_0xbd3bc9){return{'model':db[_0xbd3bc9['model']],'as':_0xbd3bc9['as'],'attributes':_0xbd3bc9['attributes'],'include':_0xbd3bc9[_0xfa1e('0x25')]?_[_0xfa1e('0x24')](_0xbd3bc9[_0xfa1e('0x25')],function(_0x15a2dd){return{'model':db[_0x15a2dd[_0xfa1e('0x26')]],'as':_0x15a2dd['as'],'attributes':_0x15a2dd['attributes']};}):[]};}):[]};}):[]:[]})[_0xfa1e('0x12')](function(_0x38cff3){logger[_0xfa1e('0x13')](_0xfa1e('0x1e'),_0x30d029);logger['debug'](_0xfa1e('0x1e'),_0x30d029,JSON[_0xfa1e('0x18')](_0x38cff3));_0x8929f0(_0x38cff3);})[_0xfa1e('0x1d')](function(_0x46f8c){logger[_0xfa1e('0x19')]('GetMailQueue',_0x46f8c[_0xfa1e('0x1b')],_0x30d029);_0x35ab1f(_0x2bba4b[_0xfa1e('0x19')](0x1f4,_0x46f8c['message']));});});};exports[_0xfa1e('0x27')]=function(_0x6a45b0){var _0x2a3491=this;return new Promise(function(_0x3e2164,_0xaf4922){return db[_0xfa1e('0x1f')]['find']({'raw':_0x6a45b0[_0xfa1e('0x20')]?_0x6a45b0['options'][_0xfa1e('0x28')]===undefined?!![]:![]:!![],'where':_0x6a45b0[_0xfa1e('0x20')]?_0x6a45b0[_0xfa1e('0x20')][_0xfa1e('0x21')]||null:null,'attributes':_0x6a45b0['options']?_0x6a45b0[_0xfa1e('0x20')][_0xfa1e('0x22')]||null:null,'include':_0x6a45b0[_0xfa1e('0x20')]?_0x6a45b0[_0xfa1e('0x20')][_0xfa1e('0x25')]?_[_0xfa1e('0x24')](_0x6a45b0[_0xfa1e('0x20')]['include'],function(_0x452d99){return{'model':db[_0x452d99['model']],'as':_0x452d99['as'],'attributes':_0x452d99[_0xfa1e('0x22')],'include':_0x452d99[_0xfa1e('0x25')]?_[_0xfa1e('0x24')](_0x452d99[_0xfa1e('0x25')],function(_0xe9011f){return{'model':db[_0xe9011f[_0xfa1e('0x26')]],'as':_0xe9011f['as'],'attributes':_0xe9011f[_0xfa1e('0x22')],'include':_0xe9011f[_0xfa1e('0x25')]?_[_0xfa1e('0x24')](_0xe9011f[_0xfa1e('0x25')],function(_0x5ec5de){return{'model':db[_0x5ec5de[_0xfa1e('0x26')]],'as':_0x5ec5de['as'],'attributes':_0x5ec5de[_0xfa1e('0x22')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x3b4a4c){logger[_0xfa1e('0x13')]('ShowMailQueue',_0x6a45b0);logger[_0xfa1e('0x16')]('ShowMailQueue',_0x6a45b0,JSON['stringify'](_0x3b4a4c));_0x3e2164(_0x3b4a4c);})[_0xfa1e('0x1d')](function(_0x3a04ec){logger[_0xfa1e('0x19')]('ShowMailQueue',_0x3a04ec['message'],_0x6a45b0);_0xaf4922(_0x2a3491[_0xfa1e('0x19')](0x1f4,_0x3a04ec[_0xfa1e('0x1b')]));});});};
\ No newline at end of file
+var _0xa2f5=['bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','client','http','redis','defaults','localhost','socket.io-emitter','./mailQueue.socket','register','request','then','info','MailQueue,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','MailQueue','raw','options','where','attributes','include','map','model','GetMailQueue','stringify','catch','ShowMailQueue','find','moment'];(function(_0x507299,_0x28aecd){var _0x5f410c=function(_0x288f0d){while(--_0x288f0d){_0x507299['push'](_0x507299['shift']());}};_0x5f410c(++_0x28aecd);}(_0xa2f5,0x14c));var _0x5a2f=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0xa2f5[_0x6c993a];return _0x27f547;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x5a2f('0x0'));var BPromise=require(_0x5a2f('0x1'));var rs=require(_0x5a2f('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x5a2f('0x3'))['db'];var utils=require(_0x5a2f('0x4'));var logger=require('../../config/logger')('rpc');var config=require(_0x5a2f('0x5'));var jayson=require('jayson/promise');var client=jayson[_0x5a2f('0x6')][_0x5a2f('0x7')]({'port':0x232a});config[_0x5a2f('0x8')]=_[_0x5a2f('0x9')](config[_0x5a2f('0x8')],{'host':_0x5a2f('0xa'),'port':0x18eb});var socket=require(_0x5a2f('0xb'))(new Redis(config['redis']));require(_0x5a2f('0xc'))[_0x5a2f('0xd')](socket);function respondWithRpcPromise(_0x5d7beb,_0x2a5d01,_0x2abe1b){return new BPromise(function(_0x46594f,_0x5918ce){return client[_0x5a2f('0xe')](_0x5d7beb,_0x2abe1b)[_0x5a2f('0xf')](function(_0x4eab8f){logger[_0x5a2f('0x10')](_0x5a2f('0x11'),_0x2a5d01,_0x5a2f('0x12'));logger[_0x5a2f('0x13')]('MailQueue,\x20%s,\x20%s,\x20%s',_0x2a5d01,_0x5a2f('0x12'),JSON['stringify'](_0x4eab8f));if(_0x4eab8f[_0x5a2f('0x14')]){if(_0x4eab8f[_0x5a2f('0x14')][_0x5a2f('0x15')]===0x1f4){logger[_0x5a2f('0x14')](_0x5a2f('0x11'),_0x2a5d01,_0x4eab8f[_0x5a2f('0x14')][_0x5a2f('0x16')]);return _0x5918ce(_0x4eab8f['error'][_0x5a2f('0x16')]);}logger[_0x5a2f('0x14')](_0x5a2f('0x11'),_0x2a5d01,_0x4eab8f[_0x5a2f('0x14')][_0x5a2f('0x16')]);return _0x46594f(_0x4eab8f[_0x5a2f('0x14')][_0x5a2f('0x16')]);}else{logger[_0x5a2f('0x10')](_0x5a2f('0x11'),_0x2a5d01,_0x5a2f('0x12'));_0x46594f(_0x4eab8f[_0x5a2f('0x17')]['message']);}})['catch'](function(_0x342a38){logger[_0x5a2f('0x14')]('MailQueue,\x20%s,\x20%s',_0x2a5d01,_0x342a38);_0x5918ce(_0x342a38);});});}exports['GetMailQueue']=function(_0x3e5e5a){var _0x4228a8=this;return new Promise(function(_0x437518,_0x16a8f3){return db[_0x5a2f('0x18')]['findAll']({'raw':_0x3e5e5a['options']?_0x3e5e5a['options'][_0x5a2f('0x19')]===undefined?!![]:![]:!![],'where':_0x3e5e5a[_0x5a2f('0x1a')]?_0x3e5e5a[_0x5a2f('0x1a')][_0x5a2f('0x1b')]||null:null,'attributes':_0x3e5e5a['options']?_0x3e5e5a[_0x5a2f('0x1a')][_0x5a2f('0x1c')]||null:null,'limit':_0x3e5e5a['options']?_0x3e5e5a[_0x5a2f('0x1a')]['limit']||null:null,'include':_0x3e5e5a[_0x5a2f('0x1a')]?_0x3e5e5a[_0x5a2f('0x1a')][_0x5a2f('0x1d')]?_[_0x5a2f('0x1e')](_0x3e5e5a[_0x5a2f('0x1a')][_0x5a2f('0x1d')],function(_0x657458){return{'model':db[_0x657458[_0x5a2f('0x1f')]],'as':_0x657458['as'],'attributes':_0x657458[_0x5a2f('0x1c')],'include':_0x657458[_0x5a2f('0x1d')]?_[_0x5a2f('0x1e')](_0x657458[_0x5a2f('0x1d')],function(_0x3bcb6f){return{'model':db[_0x3bcb6f[_0x5a2f('0x1f')]],'as':_0x3bcb6f['as'],'attributes':_0x3bcb6f['attributes'],'include':_0x3bcb6f['include']?_[_0x5a2f('0x1e')](_0x3bcb6f[_0x5a2f('0x1d')],function(_0x2143f7){return{'model':db[_0x2143f7['model']],'as':_0x2143f7['as'],'attributes':_0x2143f7[_0x5a2f('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x5a2f('0xf')](function(_0x4cdb7c){logger[_0x5a2f('0x10')](_0x5a2f('0x20'),_0x3e5e5a);logger['debug'](_0x5a2f('0x20'),_0x3e5e5a,JSON[_0x5a2f('0x21')](_0x4cdb7c));_0x437518(_0x4cdb7c);})[_0x5a2f('0x22')](function(_0x725837){logger[_0x5a2f('0x14')](_0x5a2f('0x20'),_0x725837[_0x5a2f('0x16')],_0x3e5e5a);_0x16a8f3(_0x4228a8['error'](0x1f4,_0x725837['message']));});});};exports[_0x5a2f('0x23')]=function(_0x537dac){var _0x753f5f=this;return new Promise(function(_0x37baf2,_0x33fec7){return db[_0x5a2f('0x18')][_0x5a2f('0x24')]({'raw':_0x537dac[_0x5a2f('0x1a')]?_0x537dac['options'][_0x5a2f('0x19')]===undefined?!![]:![]:!![],'where':_0x537dac[_0x5a2f('0x1a')]?_0x537dac[_0x5a2f('0x1a')][_0x5a2f('0x1b')]||null:null,'attributes':_0x537dac[_0x5a2f('0x1a')]?_0x537dac[_0x5a2f('0x1a')][_0x5a2f('0x1c')]||null:null,'include':_0x537dac[_0x5a2f('0x1a')]?_0x537dac[_0x5a2f('0x1a')]['include']?_[_0x5a2f('0x1e')](_0x537dac[_0x5a2f('0x1a')][_0x5a2f('0x1d')],function(_0x552194){return{'model':db[_0x552194[_0x5a2f('0x1f')]],'as':_0x552194['as'],'attributes':_0x552194[_0x5a2f('0x1c')],'include':_0x552194['include']?_[_0x5a2f('0x1e')](_0x552194[_0x5a2f('0x1d')],function(_0x2a7777){return{'model':db[_0x2a7777[_0x5a2f('0x1f')]],'as':_0x2a7777['as'],'attributes':_0x2a7777[_0x5a2f('0x1c')],'include':_0x2a7777['include']?_[_0x5a2f('0x1e')](_0x2a7777['include'],function(_0x1a1434){return{'model':db[_0x1a1434[_0x5a2f('0x1f')]],'as':_0x1a1434['as'],'attributes':_0x1a1434[_0x5a2f('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x5a2f('0xf')](function(_0x58db9a){logger['info']('ShowMailQueue',_0x537dac);logger[_0x5a2f('0x13')](_0x5a2f('0x23'),_0x537dac,JSON[_0x5a2f('0x21')](_0x58db9a));_0x37baf2(_0x58db9a);})[_0x5a2f('0x22')](function(_0x50c6ce){logger['error'](_0x5a2f('0x23'),_0x50c6ce['message'],_0x537dac);_0x33fec7(_0x753f5f[_0x5a2f('0x14')](0x1f4,_0x50c6ce[_0x5a2f('0x16')]));});});};
\ No newline at end of file
index 5b070e0..25a659e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe5fe=['update','emit','removeListener','register','length','mailQueue:','./mailQueue.events','remove'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0xe5fe,0x8e));var _0xee5f=function(_0x323b24,_0x2152d9){_0x323b24=_0x323b24-0x0;var _0x5692fa=_0xe5fe[_0x323b24];return _0x5692fa;};'use strict';var MailQueueEvents=require(_0xee5f('0x0'));var events=['save',_0xee5f('0x1'),_0xee5f('0x2')];function createListener(_0x3da85e,_0x4e207a){return function(_0x36dba7){_0x4e207a[_0xee5f('0x3')](_0x3da85e,_0x36dba7);};}function removeListener(_0x48b131,_0x17e7ae){return function(){MailQueueEvents[_0xee5f('0x4')](_0x48b131,_0x17e7ae);};}exports[_0xee5f('0x5')]=function(_0x26a0b3){for(var _0x7c8f50=0x0,_0xff8e67=events[_0xee5f('0x6')];_0x7c8f50<_0xff8e67;_0x7c8f50++){var _0x33d29f=events[_0x7c8f50];var _0x4e6a9e=createListener(_0xee5f('0x7')+_0x33d29f,_0x26a0b3);MailQueueEvents['on'](_0x33d29f,_0x4e6a9e);}};
\ No newline at end of file
+var _0x09f1=['remove','update','emit','removeListener','register','length','mailQueue:','./mailQueue.events'];(function(_0x2112d4,_0x3c863c){var _0x434972=function(_0x477020){while(--_0x477020){_0x2112d4['push'](_0x2112d4['shift']());}};_0x434972(++_0x3c863c);}(_0x09f1,0x117));var _0x109f=function(_0x3bdc5a,_0x2ac7d8){_0x3bdc5a=_0x3bdc5a-0x0;var _0x5d49af=_0x09f1[_0x3bdc5a];return _0x5d49af;};'use strict';var MailQueueEvents=require(_0x109f('0x0'));var events=['save',_0x109f('0x1'),_0x109f('0x2')];function createListener(_0x56c79a,_0x30fbb2){return function(_0x59484d){_0x30fbb2[_0x109f('0x3')](_0x56c79a,_0x59484d);};}function removeListener(_0x464974,_0x66f4c7){return function(){MailQueueEvents[_0x109f('0x4')](_0x464974,_0x66f4c7);};}exports[_0x109f('0x5')]=function(_0x155bcb){for(var _0x1f1f0a=0x0,_0x5d0b70=events[_0x109f('0x6')];_0x1f1f0a<_0x5d0b70;_0x1f1f0a++){var _0x2c42e2=events[_0x1f1f0a];var _0x4aa9fc=createListener(_0x109f('0x7')+_0x2c42e2,_0x155bcb);MailQueueEvents['on'](_0x2c42e2,_0x4aa9fc);}};
\ No newline at end of file
index de82e22..d2c1e25 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf204=['describe','get','/:id','show','update','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','index','/describe','isAuthenticated'];(function(_0x11a515,_0x14c1f9){var _0x48329b=function(_0x5d1f72){while(--_0x5d1f72){_0x11a515['push'](_0x11a515['shift']());}};_0x48329b(++_0x14c1f9);}(_0xf204,0x1c9));var _0x4f20=function(_0x2e3d86,_0x28af05){_0x2e3d86=_0x2e3d86-0x0;var _0x1e034d=_0xf204[_0x2e3d86];return _0x1e034d;};'use strict';var multer=require(_0x4f20('0x0'));var util=require(_0x4f20('0x1'));var path=require(_0x4f20('0x2'));var timeout=require(_0x4f20('0x3'));var express=require('express');var router=express[_0x4f20('0x4')]();var auth=require(_0x4f20('0x5'));var interaction=require(_0x4f20('0x6'));var config=require(_0x4f20('0x7'));var controller=require('./mailQueueReport.controller');router['get']('/',auth['isAuthenticated'](),controller[_0x4f20('0x8')]);router['get'](_0x4f20('0x9'),auth[_0x4f20('0xa')](),controller[_0x4f20('0xb')]);router[_0x4f20('0xc')](_0x4f20('0xd'),auth['isAuthenticated'](),controller[_0x4f20('0xe')]);router['post']('/',auth[_0x4f20('0xa')](),controller['create']);router['put'](_0x4f20('0xd'),auth['isAuthenticated'](),controller[_0x4f20('0xf')]);router['delete'](_0x4f20('0xd'),auth['isAuthenticated'](),controller[_0x4f20('0x10')]);module[_0x4f20('0x11')]=router;
\ No newline at end of file
+var _0xa2a2=['/describe','describe','show','create','put','delete','/:id','multer','util','path','connect-timeout','Router','../../components/interaction/service','../../config/environment','./mailQueueReport.controller','get','isAuthenticated','index'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0xa2a2,0x115));var _0x2a2a=function(_0x2aa251,_0x5c6e6b){_0x2aa251=_0x2aa251-0x0;var _0x5f5b44=_0xa2a2[_0x2aa251];return _0x5f5b44;};'use strict';var multer=require(_0x2a2a('0x0'));var util=require(_0x2a2a('0x1'));var path=require(_0x2a2a('0x2'));var timeout=require(_0x2a2a('0x3'));var express=require('express');var router=express[_0x2a2a('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x2a2a('0x5'));var config=require(_0x2a2a('0x6'));var controller=require(_0x2a2a('0x7'));router[_0x2a2a('0x8')]('/',auth[_0x2a2a('0x9')](),controller[_0x2a2a('0xa')]);router[_0x2a2a('0x8')](_0x2a2a('0xb'),auth[_0x2a2a('0x9')](),controller[_0x2a2a('0xc')]);router['get']('/:id',auth[_0x2a2a('0x9')](),controller[_0x2a2a('0xd')]);router['post']('/',auth['isAuthenticated'](),controller[_0x2a2a('0xe')]);router[_0x2a2a('0xf')]('/:id',auth[_0x2a2a('0x9')](),controller['update']);router[_0x2a2a('0x10')](_0x2a2a('0x11'),auth[_0x2a2a('0x9')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 8362756..1facc06 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xae89=['sequelize','exports','STRING','DATE','moment'];(function(_0x525397,_0x2bacdc){var _0x5f32d0=function(_0xb3619e){while(--_0xb3619e){_0x525397['push'](_0x525397['shift']());}};_0x5f32d0(++_0x2bacdc);}(_0xae89,0x112));var _0x9ae8=function(_0x515e9f,_0xff9586){_0x515e9f=_0x515e9f-0x0;var _0x19cbf0=_0xae89[_0x515e9f];return _0x19cbf0;};'use strict';var moment=require(_0x9ae8('0x0'));var Sequelize=require(_0x9ae8('0x1'));module[_0x9ae8('0x2')]={'uniqueid':{'type':Sequelize[_0x9ae8('0x3')],'allowNull':![]},'from':{'type':Sequelize[_0x9ae8('0x3')]},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize[_0x9ae8('0x4')]},'acceptAt':{'type':Sequelize[_0x9ae8('0x4')]},'exitAt':{'type':Sequelize[_0x9ae8('0x4')]},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x447f=['exports','STRING','DATE','moment','sequelize'];(function(_0x136689,_0x31e6e4){var _0xb68f49=function(_0x1aa64d){while(--_0x1aa64d){_0x136689['push'](_0x136689['shift']());}};_0xb68f49(++_0x31e6e4);}(_0x447f,0xad));var _0xf447=function(_0xda10f3,_0x5e42dd){_0xda10f3=_0xda10f3-0x0;var _0x3d229a=_0x447f[_0xda10f3];return _0x3d229a;};'use strict';var moment=require(_0xf447('0x0'));var Sequelize=require(_0xf447('0x1'));module[_0xf447('0x2')]={'uniqueid':{'type':Sequelize[_0xf447('0x3')],'allowNull':![]},'from':{'type':Sequelize[_0xf447('0x3')]},'joinAt':{'type':Sequelize[_0xf447('0x4')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0xf447('0x4')]},'exitAt':{'type':Sequelize[_0xf447('0x4')]},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
index b77431e..214f7f5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe5f9=['bluebird','mustache','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','sendStatus','status','end','json','count','limit','set','Content-Range','apply','reject','save','update','then','destroy','stack','name','send','index','MailQueueReport','rawAttributes','model','keys','query','filters','attributes','intersection','fields','hasOwnProperty','nolimit','offset','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','include','findAll','rows','show','length','includeAll','catch','create','body','find','params','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment'];(function(_0x49d45a,_0x274b3e){var _0x2a61b7=function(_0x461b39){while(--_0x461b39){_0x49d45a['push'](_0x49d45a['shift']());}};_0x2a61b7(++_0x274b3e);}(_0xe5f9,0x1e5));var _0x9e5f=function(_0x1045a6,_0x3ab9f6){_0x1045a6=_0x1045a6-0x0;var _0x2acbb5=_0xe5f9[_0x1045a6];return _0x2acbb5;};'use strict';var pdf=require(_0x9e5f('0x0'));var emlformat=require(_0x9e5f('0x1'));var rimraf=require(_0x9e5f('0x2'));var zipdir=require(_0x9e5f('0x3'));var jsonpatch=require(_0x9e5f('0x4'));var rp=require(_0x9e5f('0x5'));var moment=require(_0x9e5f('0x6'));var BPromise=require(_0x9e5f('0x7'));var Mustache=require(_0x9e5f('0x8'));var util=require('util');var path=require(_0x9e5f('0x9'));var sox=require(_0x9e5f('0xa'));var csv=require(_0x9e5f('0xb'));var ejs=require(_0x9e5f('0xc'));var fs=require('fs');var _=require(_0x9e5f('0xd'));var squel=require(_0x9e5f('0xe'));var crypto=require(_0x9e5f('0xf'));var jsforce=require(_0x9e5f('0x10'));var deskjs=require(_0x9e5f('0x11'));var toCsv=require(_0x9e5f('0xb'));var querystring=require(_0x9e5f('0x12'));var Papa=require(_0x9e5f('0x13'));var Redis=require(_0x9e5f('0x14'));var authService=require(_0x9e5f('0x15'));var qs=require(_0x9e5f('0x16'));var hardwareService=require(_0x9e5f('0x17'));var logger=require('../../config/logger')(_0x9e5f('0x18'));var utils=require(_0x9e5f('0x19'));var config=require(_0x9e5f('0x1a'));var db=require(_0x9e5f('0x1b'))['db'];function respondWithStatusCode(_0x1edf07,_0x5cff20){_0x5cff20=_0x5cff20||0xcc;return function(_0x54dd4e){if(_0x54dd4e){return _0x1edf07[_0x9e5f('0x1c')](_0x5cff20);}return _0x1edf07[_0x9e5f('0x1d')](_0x5cff20)[_0x9e5f('0x1e')]();};}function respondWithResult(_0x3319a8,_0x332b7f){_0x332b7f=_0x332b7f||0xc8;return function(_0x28a4f8){if(_0x28a4f8){return _0x3319a8[_0x9e5f('0x1d')](_0x332b7f)[_0x9e5f('0x1f')](_0x28a4f8);}};}function respondWithFilteredResult(_0x59504d,_0x2decf3){return function(_0x2d6118){if(_0x2d6118){var _0x5b1ba6=_0x2d6118[_0x9e5f('0x20')],_0x1e2f56=_0x2decf3['offset'],_0xb98dae=_0x2decf3['offset']+_0x2decf3[_0x9e5f('0x21')],_0x313319;if(_0xb98dae>=_0x5b1ba6){_0xb98dae=_0x5b1ba6;_0x313319=0xc8;}else{_0x313319=0xce;}_0x59504d['status'](_0x313319);return _0x59504d[_0x9e5f('0x22')](_0x9e5f('0x23'),_0x1e2f56+'-'+_0xb98dae+'/'+_0x5b1ba6)[_0x9e5f('0x1f')](_0x2d6118);}return null;};}function patchUpdates(_0x3b71aa){return function(_0x26f091){try{jsonpatch[_0x9e5f('0x24')](_0x26f091,_0x3b71aa,!![]);}catch(_0x1c94ec){return BPromise[_0x9e5f('0x25')](_0x1c94ec);}return _0x26f091[_0x9e5f('0x26')]();};}function saveUpdates(_0x21f488,_0x171b3d){return function(_0x14fc0b){if(_0x14fc0b){return _0x14fc0b[_0x9e5f('0x27')](_0x21f488)[_0x9e5f('0x28')](function(_0x34b78){return _0x34b78;});}return null;};}function removeEntity(_0x4bbd65,_0x449183){return function(_0x15c408){if(_0x15c408){return _0x15c408[_0x9e5f('0x29')]()[_0x9e5f('0x28')](function(){_0x4bbd65['status'](0xcc)[_0x9e5f('0x1e')]();});}};}function handleEntityNotFound(_0x56fcc8,_0x3304b7){return function(_0xcdf94a){if(!_0xcdf94a){_0x56fcc8[_0x9e5f('0x1c')](0x194);}return _0xcdf94a;};}function handleError(_0x1b28c1,_0x3bb397){_0x3bb397=_0x3bb397||0x1f4;return function(_0x323e2a){logger['error'](_0x323e2a[_0x9e5f('0x2a')]);if(_0x323e2a[_0x9e5f('0x2b')]){delete _0x323e2a[_0x9e5f('0x2b')];}_0x1b28c1['status'](_0x3bb397)[_0x9e5f('0x2c')](_0x323e2a);};}exports[_0x9e5f('0x2d')]=function(_0x2771a8,_0x26e302){var _0x3277a9={},_0x46f6eb={},_0x4ed83b={'count':0x0,'rows':[]};var _0x149472=db[_0x9e5f('0x2e')][_0x9e5f('0x2f')];_0x46f6eb[_0x9e5f('0x30')]=_[_0x9e5f('0x31')](_0x149472);_0x46f6eb['query']=_[_0x9e5f('0x31')](_0x2771a8[_0x9e5f('0x32')]);_0x46f6eb[_0x9e5f('0x33')]=_['intersection'](_0x46f6eb[_0x9e5f('0x30')],_0x46f6eb['query']);_0x3277a9[_0x9e5f('0x34')]=_[_0x9e5f('0x35')](_0x46f6eb[_0x9e5f('0x30')],qs['fields'](_0x2771a8[_0x9e5f('0x32')][_0x9e5f('0x36')]));_0x3277a9[_0x9e5f('0x34')]=_0x3277a9['attributes']['length']?_0x3277a9[_0x9e5f('0x34')]:_0x46f6eb[_0x9e5f('0x30')];if(!_0x2771a8[_0x9e5f('0x32')][_0x9e5f('0x37')](_0x9e5f('0x38'))){_0x3277a9[_0x9e5f('0x21')]=qs[_0x9e5f('0x21')](_0x2771a8['query'][_0x9e5f('0x21')]);_0x3277a9[_0x9e5f('0x39')]=qs[_0x9e5f('0x39')](_0x2771a8[_0x9e5f('0x32')]['offset']);}_0x3277a9[_0x9e5f('0x3a')]=qs[_0x9e5f('0x3b')](_0x2771a8[_0x9e5f('0x32')]['sort']);_0x3277a9[_0x9e5f('0x3c')]=qs[_0x9e5f('0x33')](_[_0x9e5f('0x3d')](_0x2771a8[_0x9e5f('0x32')],_0x46f6eb[_0x9e5f('0x33')]));if(_0x2771a8[_0x9e5f('0x32')][_0x9e5f('0x3e')]){_0x3277a9[_0x9e5f('0x3c')]=_[_0x9e5f('0x3f')](_0x3277a9[_0x9e5f('0x3c')],{'$or':_[_0x9e5f('0x40')](_0x149472,function(_0x1949aa){if(_0x1949aa[_0x9e5f('0x41')][_0x9e5f('0x42')]!==_0x9e5f('0x43')){var _0x27fddb={};_0x27fddb[_0x1949aa[_0x9e5f('0x44')]]={'$like':'%'+_0x2771a8['query']['filter']+'%'};return _0x27fddb;}})});}_0x3277a9=_[_0x9e5f('0x3f')]({},_0x3277a9,_0x2771a8[_0x9e5f('0x45')]);var _0x5eafbb={'where':_0x3277a9[_0x9e5f('0x3c')]};return db[_0x9e5f('0x2e')][_0x9e5f('0x20')](_0x5eafbb)[_0x9e5f('0x28')](function(_0x5726a2){_0x4ed83b[_0x9e5f('0x20')]=_0x5726a2;if(_0x2771a8[_0x9e5f('0x32')]['includeAll']){_0x3277a9[_0x9e5f('0x46')]=[{'all':!![]}];}return db['MailQueueReport'][_0x9e5f('0x47')](_0x3277a9);})[_0x9e5f('0x28')](function(_0x55bcd6){_0x4ed83b[_0x9e5f('0x48')]=_0x55bcd6;return _0x4ed83b;})[_0x9e5f('0x28')](respondWithFilteredResult(_0x26e302,_0x3277a9))['catch'](handleError(_0x26e302,null));};exports[_0x9e5f('0x49')]=function(_0x3826e8,_0x51a025){var _0x553104={'raw':!![],'where':{'id':_0x3826e8['params']['id']}},_0x18096c={};_0x18096c['model']=_['keys'](db[_0x9e5f('0x2e')][_0x9e5f('0x2f')]);_0x18096c['query']=_[_0x9e5f('0x31')](_0x3826e8[_0x9e5f('0x32')]);_0x18096c['filters']=_[_0x9e5f('0x35')](_0x18096c[_0x9e5f('0x30')],_0x18096c[_0x9e5f('0x32')]);_0x553104['attributes']=_[_0x9e5f('0x35')](_0x18096c['model'],qs[_0x9e5f('0x36')](_0x3826e8[_0x9e5f('0x32')][_0x9e5f('0x36')]));_0x553104[_0x9e5f('0x34')]=_0x553104['attributes'][_0x9e5f('0x4a')]?_0x553104[_0x9e5f('0x34')]:_0x18096c[_0x9e5f('0x30')];if(_0x3826e8[_0x9e5f('0x32')][_0x9e5f('0x4b')]){_0x553104['include']=[{'all':!![]}];}_0x553104=_[_0x9e5f('0x3f')]({},_0x553104,_0x3826e8[_0x9e5f('0x45')]);return db[_0x9e5f('0x2e')]['find'](_0x553104)[_0x9e5f('0x28')](handleEntityNotFound(_0x51a025,null))['then'](respondWithResult(_0x51a025,null))[_0x9e5f('0x4c')](handleError(_0x51a025,null));};exports[_0x9e5f('0x4d')]=function(_0x2f3c93,_0x421350){return db['MailQueueReport'][_0x9e5f('0x4d')](_0x2f3c93[_0x9e5f('0x4e')],{})[_0x9e5f('0x28')](respondWithResult(_0x421350,0xc9))[_0x9e5f('0x4c')](handleError(_0x421350,null));};exports[_0x9e5f('0x27')]=function(_0xad451c,_0x19927b){if(_0xad451c[_0x9e5f('0x4e')]['id']){delete _0xad451c[_0x9e5f('0x4e')]['id'];}return db[_0x9e5f('0x2e')][_0x9e5f('0x4f')]({'where':{'id':_0xad451c[_0x9e5f('0x50')]['id']}})[_0x9e5f('0x28')](handleEntityNotFound(_0x19927b,null))[_0x9e5f('0x28')](saveUpdates(_0xad451c[_0x9e5f('0x4e')],null))[_0x9e5f('0x28')](respondWithResult(_0x19927b,null))['catch'](handleError(_0x19927b,null));};exports[_0x9e5f('0x29')]=function(_0x15f673,_0x6ecf45){return db[_0x9e5f('0x2e')][_0x9e5f('0x4f')]({'where':{'id':_0x15f673['params']['id']}})['then'](handleEntityNotFound(_0x6ecf45,null))[_0x9e5f('0x28')](removeEntity(_0x6ecf45,null))['catch'](handleError(_0x6ecf45,null));};exports['describe']=function(_0x1f33f1,_0x1202f9){return db[_0x9e5f('0x2e')][_0x9e5f('0x51')]()['then'](respondWithResult(_0x1202f9,null))[_0x9e5f('0x4c')](handleError(_0x1202f9,null));};
\ No newline at end of file
+var _0x1814=['path','sox','ejs','lodash','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','set','Content-Range','apply','save','update','then','destroy','stack','name','index','MailQueueReport','rawAttributes','model','keys','filters','intersection','query','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','filter','where','type','key','VIRTUAL','options','findAll','catch','show','params','include','merge','find','create','body','describe','eml-format','rimraf','fast-json-patch','moment','bluebird','util'];(function(_0x160c73,_0x2ee678){var _0xd9302=function(_0x169454){while(--_0x169454){_0x160c73['push'](_0x160c73['shift']());}};_0xd9302(++_0x2ee678);}(_0x1814,0xc9));var _0x4181=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x1814[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x4181('0x0'));var rimraf=require(_0x4181('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x4181('0x2'));var rp=require('request-promise');var moment=require(_0x4181('0x3'));var BPromise=require(_0x4181('0x4'));var Mustache=require('mustache');var util=require(_0x4181('0x5'));var path=require(_0x4181('0x6'));var sox=require(_0x4181('0x7'));var csv=require('to-csv');var ejs=require(_0x4181('0x8'));var fs=require('fs');var _=require(_0x4181('0x9'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x4181('0xa'));var deskjs=require(_0x4181('0xb'));var toCsv=require(_0x4181('0xc'));var querystring=require(_0x4181('0xd'));var Papa=require(_0x4181('0xe'));var Redis=require(_0x4181('0xf'));var authService=require(_0x4181('0x10'));var qs=require(_0x4181('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x4181('0x12'))(_0x4181('0x13'));var utils=require(_0x4181('0x14'));var config=require(_0x4181('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3dd332,_0x19ca25){_0x19ca25=_0x19ca25||0xcc;return function(_0x1a516e){if(_0x1a516e){return _0x3dd332[_0x4181('0x16')](_0x19ca25);}return _0x3dd332['status'](_0x19ca25)[_0x4181('0x17')]();};}function respondWithResult(_0x11e64e,_0x3255c8){_0x3255c8=_0x3255c8||0xc8;return function(_0x1e6d8b){if(_0x1e6d8b){return _0x11e64e[_0x4181('0x18')](_0x3255c8)[_0x4181('0x19')](_0x1e6d8b);}};}function respondWithFilteredResult(_0x29e079,_0x38fabd){return function(_0x21c174){if(_0x21c174){var _0x3f1978=_0x21c174[_0x4181('0x1a')],_0xe321f0=_0x38fabd[_0x4181('0x1b')],_0x2c7116=_0x38fabd[_0x4181('0x1b')]+_0x38fabd['limit'],_0x49ed39;if(_0x2c7116>=_0x3f1978){_0x2c7116=_0x3f1978;_0x49ed39=0xc8;}else{_0x49ed39=0xce;}_0x29e079['status'](_0x49ed39);return _0x29e079[_0x4181('0x1c')](_0x4181('0x1d'),_0xe321f0+'-'+_0x2c7116+'/'+_0x3f1978)[_0x4181('0x19')](_0x21c174);}return null;};}function patchUpdates(_0x3c48ac){return function(_0x52af5f){try{jsonpatch[_0x4181('0x1e')](_0x52af5f,_0x3c48ac,!![]);}catch(_0x4638bb){return BPromise['reject'](_0x4638bb);}return _0x52af5f[_0x4181('0x1f')]();};}function saveUpdates(_0x346011,_0x496f73){return function(_0xed62fa){if(_0xed62fa){return _0xed62fa[_0x4181('0x20')](_0x346011)[_0x4181('0x21')](function(_0x1e3a31){return _0x1e3a31;});}return null;};}function removeEntity(_0x274a57,_0x125fde){return function(_0x378176){if(_0x378176){return _0x378176[_0x4181('0x22')]()['then'](function(){_0x274a57[_0x4181('0x18')](0xcc)[_0x4181('0x17')]();});}};}function handleEntityNotFound(_0x40501c,_0x286a4d){return function(_0x15ad4b){if(!_0x15ad4b){_0x40501c['sendStatus'](0x194);}return _0x15ad4b;};}function handleError(_0x5cf93c,_0x2d8241){_0x2d8241=_0x2d8241||0x1f4;return function(_0x4c0f88){logger['error'](_0x4c0f88[_0x4181('0x23')]);if(_0x4c0f88[_0x4181('0x24')]){delete _0x4c0f88[_0x4181('0x24')];}_0x5cf93c[_0x4181('0x18')](_0x2d8241)['send'](_0x4c0f88);};}exports[_0x4181('0x25')]=function(_0x174ed2,_0x1a9baf){var _0x2733c3={},_0x14b124={},_0x303c9a={'count':0x0,'rows':[]};var _0x5b1e23=db[_0x4181('0x26')][_0x4181('0x27')];_0x14b124[_0x4181('0x28')]=_['keys'](_0x5b1e23);_0x14b124['query']=_[_0x4181('0x29')](_0x174ed2['query']);_0x14b124[_0x4181('0x2a')]=_[_0x4181('0x2b')](_0x14b124['model'],_0x14b124[_0x4181('0x2c')]);_0x2733c3[_0x4181('0x2d')]=_['intersection'](_0x14b124[_0x4181('0x28')],qs[_0x4181('0x2e')](_0x174ed2[_0x4181('0x2c')][_0x4181('0x2e')]));_0x2733c3['attributes']=_0x2733c3[_0x4181('0x2d')][_0x4181('0x2f')]?_0x2733c3['attributes']:_0x14b124[_0x4181('0x28')];if(!_0x174ed2[_0x4181('0x2c')][_0x4181('0x30')](_0x4181('0x31'))){_0x2733c3[_0x4181('0x32')]=qs[_0x4181('0x32')](_0x174ed2[_0x4181('0x2c')][_0x4181('0x32')]);_0x2733c3[_0x4181('0x1b')]=qs[_0x4181('0x1b')](_0x174ed2['query']['offset']);}_0x2733c3[_0x4181('0x33')]=qs[_0x4181('0x34')](_0x174ed2[_0x4181('0x2c')][_0x4181('0x34')]);_0x2733c3['where']=qs[_0x4181('0x2a')](_['pick'](_0x174ed2[_0x4181('0x2c')],_0x14b124['filters']));if(_0x174ed2['query'][_0x4181('0x35')]){_0x2733c3[_0x4181('0x36')]=_['merge'](_0x2733c3['where'],{'$or':_['map'](_0x5b1e23,function(_0x50069a){if(_0x50069a[_0x4181('0x37')][_0x4181('0x38')]!==_0x4181('0x39')){var _0x40beec={};_0x40beec[_0x50069a['field']]={'$like':'%'+_0x174ed2[_0x4181('0x2c')]['filter']+'%'};return _0x40beec;}})});}_0x2733c3=_['merge']({},_0x2733c3,_0x174ed2[_0x4181('0x3a')]);var _0x3ed81a={'where':_0x2733c3[_0x4181('0x36')]};return db['MailQueueReport'][_0x4181('0x1a')](_0x3ed81a)[_0x4181('0x21')](function(_0x135927){_0x303c9a[_0x4181('0x1a')]=_0x135927;if(_0x174ed2[_0x4181('0x2c')]['includeAll']){_0x2733c3['include']=[{'all':!![]}];}return db[_0x4181('0x26')][_0x4181('0x3b')](_0x2733c3);})[_0x4181('0x21')](function(_0x4433fc){_0x303c9a['rows']=_0x4433fc;return _0x303c9a;})['then'](respondWithFilteredResult(_0x1a9baf,_0x2733c3))[_0x4181('0x3c')](handleError(_0x1a9baf,null));};exports[_0x4181('0x3d')]=function(_0xcdd0c,_0x5a1616){var _0x2f70b2={'raw':!![],'where':{'id':_0xcdd0c[_0x4181('0x3e')]['id']}},_0x305f6e={};_0x305f6e['model']=_[_0x4181('0x29')](db[_0x4181('0x26')][_0x4181('0x27')]);_0x305f6e[_0x4181('0x2c')]=_[_0x4181('0x29')](_0xcdd0c[_0x4181('0x2c')]);_0x305f6e['filters']=_['intersection'](_0x305f6e[_0x4181('0x28')],_0x305f6e[_0x4181('0x2c')]);_0x2f70b2[_0x4181('0x2d')]=_[_0x4181('0x2b')](_0x305f6e[_0x4181('0x28')],qs['fields'](_0xcdd0c[_0x4181('0x2c')][_0x4181('0x2e')]));_0x2f70b2['attributes']=_0x2f70b2[_0x4181('0x2d')][_0x4181('0x2f')]?_0x2f70b2[_0x4181('0x2d')]:_0x305f6e[_0x4181('0x28')];if(_0xcdd0c[_0x4181('0x2c')]['includeAll']){_0x2f70b2[_0x4181('0x3f')]=[{'all':!![]}];}_0x2f70b2=_[_0x4181('0x40')]({},_0x2f70b2,_0xcdd0c[_0x4181('0x3a')]);return db[_0x4181('0x26')][_0x4181('0x41')](_0x2f70b2)[_0x4181('0x21')](handleEntityNotFound(_0x5a1616,null))[_0x4181('0x21')](respondWithResult(_0x5a1616,null))[_0x4181('0x3c')](handleError(_0x5a1616,null));};exports['create']=function(_0x58811d,_0x14b4cf){return db[_0x4181('0x26')][_0x4181('0x42')](_0x58811d[_0x4181('0x43')],{})['then'](respondWithResult(_0x14b4cf,0xc9))[_0x4181('0x3c')](handleError(_0x14b4cf,null));};exports[_0x4181('0x20')]=function(_0x40d7ef,_0x232f9b){if(_0x40d7ef['body']['id']){delete _0x40d7ef[_0x4181('0x43')]['id'];}return db['MailQueueReport'][_0x4181('0x41')]({'where':{'id':_0x40d7ef[_0x4181('0x3e')]['id']}})[_0x4181('0x21')](handleEntityNotFound(_0x232f9b,null))[_0x4181('0x21')](saveUpdates(_0x40d7ef[_0x4181('0x43')],null))[_0x4181('0x21')](respondWithResult(_0x232f9b,null))[_0x4181('0x3c')](handleError(_0x232f9b,null));};exports[_0x4181('0x22')]=function(_0x12fea4,_0x1588e3){return db[_0x4181('0x26')]['find']({'where':{'id':_0x12fea4[_0x4181('0x3e')]['id']}})[_0x4181('0x21')](handleEntityNotFound(_0x1588e3,null))[_0x4181('0x21')](removeEntity(_0x1588e3,null))[_0x4181('0x3c')](handleError(_0x1588e3,null));};exports[_0x4181('0x44')]=function(_0xc5acad,_0x571c29){return db[_0x4181('0x26')][_0x4181('0x44')]()[_0x4181('0x21')](respondWithResult(_0x571c29,null))[_0x4181('0x3c')](handleError(_0x571c29,null));};
\ No newline at end of file
index 9da5b19..911b280 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x83e1=['bluebird','rimraf','../../config/environment','define','MailQueueReport','uniqueid','lodash','util','api'];(function(_0x3e0628,_0x511646){var _0x4e1918=function(_0xe98ca7){while(--_0xe98ca7){_0x3e0628['push'](_0x3e0628['shift']());}};_0x4e1918(++_0x511646);}(_0x83e1,0x1ad));var _0x183e=function(_0x4dcc8f,_0x5da09b){_0x4dcc8f=_0x4dcc8f-0x0;var _0x454c40=_0x83e1[_0x4dcc8f];return _0x454c40;};'use strict';var _=require(_0x183e('0x0'));var util=require(_0x183e('0x1'));var logger=require('../../config/logger')(_0x183e('0x2'));var moment=require('moment');var BPromise=require(_0x183e('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x183e('0x4'));var config=require(_0x183e('0x5'));var attributes=require('./mailQueueReport.attributes');module['exports']=function(_0x4d7710,_0x2e3bbd){return _0x4d7710[_0x183e('0x6')](_0x183e('0x7'),attributes,{'tableName':'report_mail_queue','paranoid':![],'indexes':[{'name':_0x183e('0x8'),'fields':[_0x183e('0x8')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x7033=['../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./mailQueueReport.attributes','exports','define','uniqueid','lodash','util'];(function(_0x36091d,_0x553f43){var _0x4dab68=function(_0x159134){while(--_0x159134){_0x36091d['push'](_0x36091d['shift']());}};_0x4dab68(++_0x553f43);}(_0x7033,0x19e));var _0x3703=function(_0x1d1779,_0x284147){_0x1d1779=_0x1d1779-0x0;var _0x2377e9=_0x7033[_0x1d1779];return _0x2377e9;};'use strict';var _=require(_0x3703('0x0'));var util=require(_0x3703('0x1'));var logger=require(_0x3703('0x2'))(_0x3703('0x3'));var moment=require('moment');var BPromise=require(_0x3703('0x4'));var rp=require(_0x3703('0x5'));var fs=require('fs');var path=require(_0x3703('0x6'));var rimraf=require(_0x3703('0x7'));var config=require(_0x3703('0x8'));var attributes=require(_0x3703('0x9'));module[_0x3703('0xa')]=function(_0x283af9,_0x1170b6){return _0x283af9[_0x3703('0xb')]('MailQueueReport',attributes,{'tableName':'report_mail_queue','paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x3703('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
index d7b8744..35293d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e6=['debug','MailQueueReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','MailQueueReport,\x20%s,\x20%s','result','catch','CreateMailQueueReport','MailQueueReport','create','options','raw','then','attributes','UpdateMailQueueReport','lodash','moment','randomstring','../../config/utils','../../config/logger','jayson/promise','client','http','request','info'];(function(_0x45bf86,_0x75586e){var _0x1f02b7=function(_0x1ea8a3){while(--_0x1ea8a3){_0x45bf86['push'](_0x45bf86['shift']());}};_0x1f02b7(++_0x75586e);}(_0x34e6,0x162));var _0x634e=function(_0x491941,_0x470b71){_0x491941=_0x491941-0x0;var _0x522bb2=_0x34e6[_0x491941];return _0x522bb2;};'use strict';var _=require(_0x634e('0x0'));var util=require('util');var moment=require(_0x634e('0x1'));var BPromise=require('bluebird');var rs=require(_0x634e('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x634e('0x3'));var logger=require(_0x634e('0x4'))('rpc');var config=require('../../config/environment');var jayson=require(_0x634e('0x5'));var client=jayson[_0x634e('0x6')][_0x634e('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x4cdd58,_0x160484,_0x3a92e2){return new BPromise(function(_0x4c4b12,_0x21afe5){return client[_0x634e('0x8')](_0x4cdd58,_0x3a92e2)['then'](function(_0x36a97e){logger[_0x634e('0x9')]('MailQueueReport,\x20%s,\x20%s',_0x160484,'request\x20sent');logger[_0x634e('0xa')](_0x634e('0xb'),_0x160484,_0x634e('0xc'),JSON[_0x634e('0xd')](_0x36a97e));if(_0x36a97e[_0x634e('0xe')]){if(_0x36a97e['error'][_0x634e('0xf')]===0x1f4){logger[_0x634e('0xe')]('MailQueueReport,\x20%s,\x20%s',_0x160484,_0x36a97e[_0x634e('0xe')][_0x634e('0x10')]);return _0x21afe5(_0x36a97e[_0x634e('0xe')]['message']);}logger[_0x634e('0xe')]('MailQueueReport,\x20%s,\x20%s',_0x160484,_0x36a97e[_0x634e('0xe')][_0x634e('0x10')]);return _0x4c4b12(_0x36a97e[_0x634e('0xe')][_0x634e('0x10')]);}else{logger[_0x634e('0x9')](_0x634e('0x11'),_0x160484,_0x634e('0xc'));_0x4c4b12(_0x36a97e[_0x634e('0x12')]['message']);}})[_0x634e('0x13')](function(_0x1239c){logger['error'](_0x634e('0x11'),_0x160484,_0x1239c);_0x21afe5(_0x1239c);});});}exports[_0x634e('0x14')]=function(_0x117123){var _0x9239a0=this;return new Promise(function(_0x4bb529,_0x3d78ab){return db[_0x634e('0x15')][_0x634e('0x16')](_0x117123['body'],{'raw':_0x117123[_0x634e('0x17')]?_0x117123[_0x634e('0x17')][_0x634e('0x18')]===undefined?!![]:![]:!![]})[_0x634e('0x19')](function(_0x5230c6){logger[_0x634e('0x9')](_0x634e('0x14'),_0x117123);logger[_0x634e('0xa')](_0x634e('0x14'),_0x117123,JSON[_0x634e('0xd')](_0x5230c6));_0x4bb529(_0x5230c6);})[_0x634e('0x13')](function(_0x4821a7){logger[_0x634e('0xe')]('CreateMailQueueReport',_0x4821a7[_0x634e('0x10')],_0x117123);_0x3d78ab(_0x9239a0['error'](0x1f4,_0x4821a7['message']));});});};exports['UpdateMailQueueReport']=function(_0x478f46){var _0x425e67=this;return new Promise(function(_0x438fc3,_0x1273c9){return db[_0x634e('0x15')]['update'](_0x478f46['body'],{'raw':_0x478f46[_0x634e('0x17')]?_0x478f46['options'][_0x634e('0x18')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x478f46[_0x634e('0x17')]?_0x478f46[_0x634e('0x17')]['where']||null:null,'attributes':_0x478f46[_0x634e('0x17')]?_0x478f46[_0x634e('0x17')][_0x634e('0x1a')]||null:null,'limit':_0x478f46[_0x634e('0x17')]?_0x478f46[_0x634e('0x17')]['limit']||null:null})[_0x634e('0x19')](function(_0x3ccd11){logger[_0x634e('0x9')]('UpdateMailQueueReport',_0x478f46);logger[_0x634e('0xa')](_0x634e('0x1b'),_0x478f46,JSON[_0x634e('0xd')](_0x3ccd11));_0x438fc3(_0x3ccd11);})[_0x634e('0x13')](function(_0x5e2992){logger[_0x634e('0xe')](_0x634e('0x1b'),_0x5e2992[_0x634e('0x10')],_0x478f46);_0x1273c9(_0x425e67[_0x634e('0xe')](0x1f4,_0x5e2992[_0x634e('0x10')]));});});};
\ No newline at end of file
+var _0x2f61=['where','attributes','lodash','util','bluebird','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','MailQueueReport,\x20%s,\x20%s','request\x20sent','debug','MailQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','message','catch','MailQueueReport','create','body','options','raw','CreateMailQueueReport','UpdateMailQueueReport','update'];(function(_0xb9f36,_0x15f8e4){var _0x54023a=function(_0x4137b6){while(--_0x4137b6){_0xb9f36['push'](_0xb9f36['shift']());}};_0x54023a(++_0x15f8e4);}(_0x2f61,0x182));var _0x12f6=function(_0x4f16c7,_0xeda785){_0x4f16c7=_0x4f16c7-0x0;var _0x9f83a4=_0x2f61[_0x4f16c7];return _0x9f83a4;};'use strict';var _=require(_0x12f6('0x0'));var util=require(_0x12f6('0x1'));var moment=require('moment');var BPromise=require(_0x12f6('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x12f6('0x3'));var db=require(_0x12f6('0x4'))['db'];var utils=require(_0x12f6('0x5'));var logger=require('../../config/logger')(_0x12f6('0x6'));var config=require(_0x12f6('0x7'));var jayson=require(_0x12f6('0x8'));var client=jayson[_0x12f6('0x9')][_0x12f6('0xa')]({'port':0x232a});function respondWithRpcPromise(_0xee4d38,_0x285eb7,_0x4966ce){return new BPromise(function(_0x19fd46,_0x2b5612){return client[_0x12f6('0xb')](_0xee4d38,_0x4966ce)[_0x12f6('0xc')](function(_0x1130f0){logger[_0x12f6('0xd')](_0x12f6('0xe'),_0x285eb7,_0x12f6('0xf'));logger[_0x12f6('0x10')](_0x12f6('0x11'),_0x285eb7,_0x12f6('0xf'),JSON[_0x12f6('0x12')](_0x1130f0));if(_0x1130f0[_0x12f6('0x13')]){if(_0x1130f0['error']['code']===0x1f4){logger['error'](_0x12f6('0xe'),_0x285eb7,_0x1130f0[_0x12f6('0x13')][_0x12f6('0x14')]);return _0x2b5612(_0x1130f0[_0x12f6('0x13')][_0x12f6('0x14')]);}logger[_0x12f6('0x13')](_0x12f6('0xe'),_0x285eb7,_0x1130f0[_0x12f6('0x13')]['message']);return _0x19fd46(_0x1130f0[_0x12f6('0x13')][_0x12f6('0x14')]);}else{logger['info'](_0x12f6('0xe'),_0x285eb7,_0x12f6('0xf'));_0x19fd46(_0x1130f0['result'][_0x12f6('0x14')]);}})[_0x12f6('0x15')](function(_0x4c80f7){logger[_0x12f6('0x13')](_0x12f6('0xe'),_0x285eb7,_0x4c80f7);_0x2b5612(_0x4c80f7);});});}exports['CreateMailQueueReport']=function(_0x163a30){var _0x465938=this;return new Promise(function(_0x2f7633,_0x353df1){return db[_0x12f6('0x16')][_0x12f6('0x17')](_0x163a30[_0x12f6('0x18')],{'raw':_0x163a30[_0x12f6('0x19')]?_0x163a30[_0x12f6('0x19')][_0x12f6('0x1a')]===undefined?!![]:![]:!![]})['then'](function(_0xd2350f){logger['info'](_0x12f6('0x1b'),_0x163a30);logger['debug'](_0x12f6('0x1b'),_0x163a30,JSON[_0x12f6('0x12')](_0xd2350f));_0x2f7633(_0xd2350f);})[_0x12f6('0x15')](function(_0x3e8543){logger[_0x12f6('0x13')](_0x12f6('0x1b'),_0x3e8543[_0x12f6('0x14')],_0x163a30);_0x353df1(_0x465938[_0x12f6('0x13')](0x1f4,_0x3e8543[_0x12f6('0x14')]));});});};exports[_0x12f6('0x1c')]=function(_0x404c3e){var _0xf441cf=this;return new Promise(function(_0xdf41d8,_0x4d68e1){return db['MailQueueReport'][_0x12f6('0x1d')](_0x404c3e[_0x12f6('0x18')],{'raw':_0x404c3e['options']?_0x404c3e[_0x12f6('0x19')][_0x12f6('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x404c3e[_0x12f6('0x19')]?_0x404c3e[_0x12f6('0x19')][_0x12f6('0x1e')]||null:null,'attributes':_0x404c3e[_0x12f6('0x19')]?_0x404c3e[_0x12f6('0x19')][_0x12f6('0x1f')]||null:null,'limit':_0x404c3e['options']?_0x404c3e[_0x12f6('0x19')]['limit']||null:null})['then'](function(_0x69ecf8){logger['info'](_0x12f6('0x1c'),_0x404c3e);logger['debug'](_0x12f6('0x1c'),_0x404c3e,JSON[_0x12f6('0x12')](_0x69ecf8));_0xdf41d8(_0x69ecf8);})[_0x12f6('0x15')](function(_0x487820){logger[_0x12f6('0x13')]('UpdateMailQueueReport',_0x487820[_0x12f6('0x14')],_0x404c3e);_0x4d68e1(_0xf441cf[_0x12f6('0x13')](0x1f4,_0x487820[_0x12f6('0x14')]));});});};
\ No newline at end of file
index 54bd5d4..212c029 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa899=['util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer'];(function(_0x397f37,_0x3cf86d){var _0x31cae6=function(_0x5cddb9){while(--_0x5cddb9){_0x397f37['push'](_0x397f37['shift']());}};_0x31cae6(++_0x3cf86d);}(_0xa899,0x155));var _0x9a89=function(_0x2718c7,_0x5a1636){_0x2718c7=_0x2718c7-0x0;var _0x59d89c=_0xa899[_0x2718c7];return _0x59d89c;};'use strict';var multer=require(_0x9a89('0x0'));var util=require(_0x9a89('0x1'));var path=require(_0x9a89('0x2'));var timeout=require('connect-timeout');var express=require(_0x9a89('0x3'));var router=express[_0x9a89('0x4')]();var auth=require(_0x9a89('0x5'));var interaction=require(_0x9a89('0x6'));var config=require(_0x9a89('0x7'));module[_0x9a89('0x8')]=router;
\ No newline at end of file
+var _0x1db9=['path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','multer','util'];(function(_0xb83ec2,_0x18e73b){var _0x4d2fbf=function(_0x16538a){while(--_0x16538a){_0xb83ec2['push'](_0xb83ec2['shift']());}};_0x4d2fbf(++_0x18e73b);}(_0x1db9,0x176));var _0x91db=function(_0x35a830,_0x1c9d3c){_0x35a830=_0x35a830-0x0;var _0x4b06e0=_0x1db9[_0x35a830];return _0x4b06e0;};'use strict';var multer=require(_0x91db('0x0'));var util=require(_0x91db('0x1'));var path=require(_0x91db('0x2'));var timeout=require(_0x91db('0x3'));var express=require(_0x91db('0x4'));var router=express[_0x91db('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x91db('0x6'));var config=require(_0x91db('0x7'));module['exports']=router;
\ No newline at end of file
index 7407415..614efb0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c2c=['STRING','INTEGER','INBOX','sequelize','exports'];(function(_0x565c49,_0x54acd0){var _0x20ca34=function(_0x42f7e1){while(--_0x42f7e1){_0x565c49['push'](_0x565c49['shift']());}};_0x20ca34(++_0x54acd0);}(_0x9c2c,0x1c0));var _0xc9c2=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x9c2c[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xc9c2('0x0'));module[_0xc9c2('0x1')]={'description':{'type':Sequelize['STRING']},'host':{'type':Sequelize['STRING']},'authentication':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'user':{'type':Sequelize[_0xc9c2('0x2')],'unique':'username'},'password':{'type':Sequelize[_0xc9c2('0x2')]},'port':{'type':Sequelize[_0xc9c2('0x3')]},'tls':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'mailbox':{'type':Sequelize['STRING'],'defaultValue':_0xc9c2('0x4')},'connTimeout':{'type':Sequelize['INTEGER'],'defaultValue':0xa},'authTimeout':{'type':Sequelize[_0xc9c2('0x3')],'defaultValue':0x5},'service':{'type':Sequelize[_0xc9c2('0x2')]}};
\ No newline at end of file
+var _0x1339=['username','INTEGER','INBOX','STRING','BOOLEAN'];(function(_0x43daea,_0x57bff3){var _0x3172b4=function(_0x3e166e){while(--_0x3e166e){_0x43daea['push'](_0x43daea['shift']());}};_0x3172b4(++_0x57bff3);}(_0x1339,0x1ed));var _0x9133=function(_0x110d1c,_0x512d77){_0x110d1c=_0x110d1c-0x0;var _0x519f92=_0x1339[_0x110d1c];return _0x519f92;};'use strict';var Sequelize=require('sequelize');module['exports']={'description':{'type':Sequelize[_0x9133('0x0')]},'host':{'type':Sequelize[_0x9133('0x0')]},'authentication':{'type':Sequelize[_0x9133('0x1')],'defaultValue':!![]},'user':{'type':Sequelize[_0x9133('0x0')],'unique':_0x9133('0x2')},'password':{'type':Sequelize[_0x9133('0x0')]},'port':{'type':Sequelize[_0x9133('0x3')]},'tls':{'type':Sequelize[_0x9133('0x1')],'defaultValue':!![]},'mailbox':{'type':Sequelize['STRING'],'defaultValue':_0x9133('0x4')},'connTimeout':{'type':Sequelize[_0x9133('0x3')],'defaultValue':0xa},'authTimeout':{'type':Sequelize[_0x9133('0x3')],'defaultValue':0x5},'service':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 9df560a..2d76fbd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7bca=['path','./mailServerIn.attributes','exports','define','mail_servers_in','util','../../config/logger','api','moment','bluebird'];(function(_0x1bfd24,_0x16d70d){var _0x35d16f=function(_0x54ac4d){while(--_0x54ac4d){_0x1bfd24['push'](_0x1bfd24['shift']());}};_0x35d16f(++_0x16d70d);}(_0x7bca,0x163));var _0xa7bc=function(_0xd4d4aa,_0x5db1f0){_0xd4d4aa=_0xd4d4aa-0x0;var _0x3f2237=_0x7bca[_0xd4d4aa];return _0x3f2237;};'use strict';var _=require('lodash');var util=require(_0xa7bc('0x0'));var logger=require(_0xa7bc('0x1'))(_0xa7bc('0x2'));var moment=require(_0xa7bc('0x3'));var BPromise=require(_0xa7bc('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xa7bc('0x5'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xa7bc('0x6'));module[_0xa7bc('0x7')]=function(_0x1d4dfd,_0x5e3617){return _0x1d4dfd[_0xa7bc('0x8')]('MailServerIn',attributes,{'tableName':_0xa7bc('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xbe8f=['util','../../config/logger','api','moment','bluebird','request-promise','rimraf','../../config/environment','exports','define','mail_servers_in'];(function(_0x4154a6,_0x2c0b8e){var _0x3b2786=function(_0x2f5936){while(--_0x2f5936){_0x4154a6['push'](_0x4154a6['shift']());}};_0x3b2786(++_0x2c0b8e);}(_0xbe8f,0x1e4));var _0xfbe8=function(_0x18cd5b,_0x10240b){_0x18cd5b=_0x18cd5b-0x0;var _0x5eaa52=_0xbe8f[_0x18cd5b];return _0x5eaa52;};'use strict';var _=require('lodash');var util=require(_0xfbe8('0x0'));var logger=require(_0xfbe8('0x1'))(_0xfbe8('0x2'));var moment=require(_0xfbe8('0x3'));var BPromise=require(_0xfbe8('0x4'));var rp=require(_0xfbe8('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0xfbe8('0x6'));var config=require(_0xfbe8('0x7'));var attributes=require('./mailServerIn.attributes');module[_0xfbe8('0x8')]=function(_0x5719cb,_0x57507a){return _0x5719cb[_0xfbe8('0x9')]('MailServerIn',attributes,{'tableName':_0xfbe8('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 43dfcad..476de40 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdd0a=['request\x20sent','result','catch','GetMailServerIn','MailServerIn','findAll','options','limit','map','model','attributes','include','stringify','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','request','then','info','MailServerIn,\x20%s,\x20%s','debug','MailServerIn,\x20%s,\x20%s,\x20%s','error','code','message'];(function(_0x318715,_0x298836){var _0x5f6509=function(_0x40fc9a){while(--_0x40fc9a){_0x318715['push'](_0x318715['shift']());}};_0x5f6509(++_0x298836);}(_0xdd0a,0x73));var _0xadd0=function(_0x52dd90,_0x132712){_0x52dd90=_0x52dd90-0x0;var _0x2e16bb=_0xdd0a[_0x52dd90];return _0x2e16bb;};'use strict';var _=require(_0xadd0('0x0'));var util=require(_0xadd0('0x1'));var moment=require(_0xadd0('0x2'));var BPromise=require(_0xadd0('0x3'));var rs=require(_0xadd0('0x4'));var fs=require('fs');var Redis=require(_0xadd0('0x5'));var db=require(_0xadd0('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0xadd0('0x7'))(_0xadd0('0x8'));var config=require(_0xadd0('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xadd0('0xa')][_0xadd0('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x1bd880,_0xb30c8c,_0x542b9a){return new BPromise(function(_0x48dba5,_0x221984){return client[_0xadd0('0xc')](_0x1bd880,_0x542b9a)[_0xadd0('0xd')](function(_0x1c9c00){logger[_0xadd0('0xe')](_0xadd0('0xf'),_0xb30c8c,'request\x20sent');logger[_0xadd0('0x10')](_0xadd0('0x11'),_0xb30c8c,'request\x20sent',JSON['stringify'](_0x1c9c00));if(_0x1c9c00[_0xadd0('0x12')]){if(_0x1c9c00[_0xadd0('0x12')][_0xadd0('0x13')]===0x1f4){logger[_0xadd0('0x12')]('MailServerIn,\x20%s,\x20%s',_0xb30c8c,_0x1c9c00['error'][_0xadd0('0x14')]);return _0x221984(_0x1c9c00[_0xadd0('0x12')][_0xadd0('0x14')]);}logger['error'](_0xadd0('0xf'),_0xb30c8c,_0x1c9c00[_0xadd0('0x12')]['message']);return _0x48dba5(_0x1c9c00[_0xadd0('0x12')][_0xadd0('0x14')]);}else{logger[_0xadd0('0xe')](_0xadd0('0xf'),_0xb30c8c,_0xadd0('0x15'));_0x48dba5(_0x1c9c00[_0xadd0('0x16')][_0xadd0('0x14')]);}})[_0xadd0('0x17')](function(_0x2de594){logger[_0xadd0('0x12')](_0xadd0('0xf'),_0xb30c8c,_0x2de594);_0x221984(_0x2de594);});});}exports[_0xadd0('0x18')]=function(_0x1c5dab){var _0x437beb=this;return new Promise(function(_0x20b2c1,_0x202839){return db[_0xadd0('0x19')][_0xadd0('0x1a')]({'raw':_0x1c5dab[_0xadd0('0x1b')]?_0x1c5dab[_0xadd0('0x1b')]['raw']===undefined?!![]:![]:!![],'where':_0x1c5dab[_0xadd0('0x1b')]?_0x1c5dab[_0xadd0('0x1b')]['where']||null:null,'attributes':_0x1c5dab[_0xadd0('0x1b')]?_0x1c5dab[_0xadd0('0x1b')]['attributes']||null:null,'limit':_0x1c5dab[_0xadd0('0x1b')]?_0x1c5dab[_0xadd0('0x1b')][_0xadd0('0x1c')]||null:null,'include':_0x1c5dab[_0xadd0('0x1b')]?_0x1c5dab[_0xadd0('0x1b')]['include']?_[_0xadd0('0x1d')](_0x1c5dab[_0xadd0('0x1b')]['include'],function(_0x464123){return{'model':db[_0x464123[_0xadd0('0x1e')]],'as':_0x464123['as'],'attributes':_0x464123[_0xadd0('0x1f')],'include':_0x464123[_0xadd0('0x20')]?_['map'](_0x464123[_0xadd0('0x20')],function(_0x4a25c1){return{'model':db[_0x4a25c1[_0xadd0('0x1e')]],'as':_0x4a25c1['as'],'attributes':_0x4a25c1['attributes'],'include':_0x4a25c1['include']?_[_0xadd0('0x1d')](_0x4a25c1[_0xadd0('0x20')],function(_0x4c93c1){return{'model':db[_0x4c93c1[_0xadd0('0x1e')]],'as':_0x4c93c1['as'],'attributes':_0x4c93c1['attributes']};}):[]};}):[]};}):[]:[]})[_0xadd0('0xd')](function(_0x5e4f27){logger[_0xadd0('0xe')]('GetMailServerIn',_0x1c5dab);logger[_0xadd0('0x10')](_0xadd0('0x18'),_0x1c5dab,JSON[_0xadd0('0x21')](_0x5e4f27));_0x20b2c1(_0x5e4f27);})[_0xadd0('0x17')](function(_0x4cb45e){logger['error'](_0xadd0('0x18'),_0x4cb45e[_0xadd0('0x14')],_0x1c5dab);_0x202839(_0x437beb['error'](0x1f4,_0x4cb45e[_0xadd0('0x14')]));});});};
\ No newline at end of file
+var _0x1900=['error','code','message','MailServerIn,\x20%s,\x20%s','MailServerIn','findAll','options','raw','attributes','limit','include','map','model','then','GetMailServerIn','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','request','info','debug','MailServerIn,\x20%s,\x20%s,\x20%s','request\x20sent','stringify'];(function(_0x35fabd,_0x825452){var _0x61a8ee=function(_0x218f4c){while(--_0x218f4c){_0x35fabd['push'](_0x35fabd['shift']());}};_0x61a8ee(++_0x825452);}(_0x1900,0xba));var _0x0190=function(_0x4412bd,_0x1d02df){_0x4412bd=_0x4412bd-0x0;var _0x2b56b8=_0x1900[_0x4412bd];return _0x2b56b8;};'use strict';var _=require(_0x0190('0x0'));var util=require(_0x0190('0x1'));var moment=require(_0x0190('0x2'));var BPromise=require(_0x0190('0x3'));var rs=require(_0x0190('0x4'));var fs=require('fs');var Redis=require(_0x0190('0x5'));var db=require(_0x0190('0x6'))['db'];var utils=require(_0x0190('0x7'));var logger=require(_0x0190('0x8'))('rpc');var config=require(_0x0190('0x9'));var jayson=require(_0x0190('0xa'));var client=jayson['client'][_0x0190('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x56706b,_0x4f891b,_0x497b4c){return new BPromise(function(_0x465b3c,_0x1e0f78){return client[_0x0190('0xc')](_0x56706b,_0x497b4c)['then'](function(_0x52373c){logger[_0x0190('0xd')]('MailServerIn,\x20%s,\x20%s',_0x4f891b,'request\x20sent');logger[_0x0190('0xe')](_0x0190('0xf'),_0x4f891b,_0x0190('0x10'),JSON[_0x0190('0x11')](_0x52373c));if(_0x52373c[_0x0190('0x12')]){if(_0x52373c['error'][_0x0190('0x13')]===0x1f4){logger['error']('MailServerIn,\x20%s,\x20%s',_0x4f891b,_0x52373c['error'][_0x0190('0x14')]);return _0x1e0f78(_0x52373c['error'][_0x0190('0x14')]);}logger[_0x0190('0x12')](_0x0190('0x15'),_0x4f891b,_0x52373c[_0x0190('0x12')][_0x0190('0x14')]);return _0x465b3c(_0x52373c['error'][_0x0190('0x14')]);}else{logger[_0x0190('0xd')](_0x0190('0x15'),_0x4f891b,_0x0190('0x10'));_0x465b3c(_0x52373c['result'][_0x0190('0x14')]);}})['catch'](function(_0x17fdff){logger[_0x0190('0x12')](_0x0190('0x15'),_0x4f891b,_0x17fdff);_0x1e0f78(_0x17fdff);});});}exports['GetMailServerIn']=function(_0x2b4980){var _0x141a09=this;return new Promise(function(_0xec931,_0x381ff9){return db[_0x0190('0x16')][_0x0190('0x17')]({'raw':_0x2b4980[_0x0190('0x18')]?_0x2b4980[_0x0190('0x18')][_0x0190('0x19')]===undefined?!![]:![]:!![],'where':_0x2b4980[_0x0190('0x18')]?_0x2b4980['options']['where']||null:null,'attributes':_0x2b4980[_0x0190('0x18')]?_0x2b4980[_0x0190('0x18')][_0x0190('0x1a')]||null:null,'limit':_0x2b4980[_0x0190('0x18')]?_0x2b4980[_0x0190('0x18')][_0x0190('0x1b')]||null:null,'include':_0x2b4980['options']?_0x2b4980[_0x0190('0x18')][_0x0190('0x1c')]?_[_0x0190('0x1d')](_0x2b4980[_0x0190('0x18')][_0x0190('0x1c')],function(_0x4cda00){return{'model':db[_0x4cda00[_0x0190('0x1e')]],'as':_0x4cda00['as'],'attributes':_0x4cda00[_0x0190('0x1a')],'include':_0x4cda00[_0x0190('0x1c')]?_[_0x0190('0x1d')](_0x4cda00[_0x0190('0x1c')],function(_0x2df690){return{'model':db[_0x2df690['model']],'as':_0x2df690['as'],'attributes':_0x2df690['attributes'],'include':_0x2df690[_0x0190('0x1c')]?_['map'](_0x2df690[_0x0190('0x1c')],function(_0x415328){return{'model':db[_0x415328[_0x0190('0x1e')]],'as':_0x415328['as'],'attributes':_0x415328[_0x0190('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x0190('0x1f')](function(_0x5305d4){logger[_0x0190('0xd')](_0x0190('0x20'),_0x2b4980);logger[_0x0190('0xe')](_0x0190('0x20'),_0x2b4980,JSON[_0x0190('0x11')](_0x5305d4));_0xec931(_0x5305d4);})[_0x0190('0x21')](function(_0x327c0d){logger[_0x0190('0x12')]('GetMailServerIn',_0x327c0d[_0x0190('0x14')],_0x2b4980);_0x381ff9(_0x141a09[_0x0190('0x12')](0x1f4,_0x327c0d[_0x0190('0x14')]));});});};
\ No newline at end of file
index c1db1c0..d98c2a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe581=['put','update','destroy','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailServerOut.controller','index','/:id','show','post','isAuthenticated','create'];(function(_0x2d2c16,_0x4e88b6){var _0x53f2fb=function(_0x6b6dac){while(--_0x6b6dac){_0x2d2c16['push'](_0x2d2c16['shift']());}};_0x53f2fb(++_0x4e88b6);}(_0xe581,0xaf));var _0x1e58=function(_0x2a0987,_0x2d1a32){_0x2a0987=_0x2a0987-0x0;var _0x588d6f=_0xe581[_0x2a0987];return _0x588d6f;};'use strict';var multer=require(_0x1e58('0x0'));var util=require('util');var path=require(_0x1e58('0x1'));var timeout=require(_0x1e58('0x2'));var express=require(_0x1e58('0x3'));var router=express[_0x1e58('0x4')]();var auth=require(_0x1e58('0x5'));var interaction=require(_0x1e58('0x6'));var config=require(_0x1e58('0x7'));var controller=require(_0x1e58('0x8'));router['get']('/',auth['isAuthenticated'](),controller[_0x1e58('0x9')]);router['get'](_0x1e58('0xa'),auth['isAuthenticated'](),controller[_0x1e58('0xb')]);router[_0x1e58('0xc')]('/',auth[_0x1e58('0xd')](),controller[_0x1e58('0xe')]);router[_0x1e58('0xf')](_0x1e58('0xa'),auth[_0x1e58('0xd')](),controller[_0x1e58('0x10')]);router['delete']('/:id',auth['isAuthenticated'](),controller[_0x1e58('0x11')]);module[_0x1e58('0x12')]=router;
\ No newline at end of file
+var _0x2f03=['../../components/auth/service','../../components/interaction/service','./mailServerOut.controller','get','isAuthenticated','/:id','show','post','create','delete','destroy','exports','util','connect-timeout','express','Router'];(function(_0x5da00c,_0x1f1e0f){var _0x379332=function(_0x4ebc04){while(--_0x4ebc04){_0x5da00c['push'](_0x5da00c['shift']());}};_0x379332(++_0x1f1e0f);}(_0x2f03,0x10c));var _0x32f0=function(_0x402d46,_0x47f3bd){_0x402d46=_0x402d46-0x0;var _0x4d829c=_0x2f03[_0x402d46];return _0x4d829c;};'use strict';var multer=require('multer');var util=require(_0x32f0('0x0'));var path=require('path');var timeout=require(_0x32f0('0x1'));var express=require(_0x32f0('0x2'));var router=express[_0x32f0('0x3')]();var auth=require(_0x32f0('0x4'));var interaction=require(_0x32f0('0x5'));var config=require('../../config/environment');var controller=require(_0x32f0('0x6'));router[_0x32f0('0x7')]('/',auth[_0x32f0('0x8')](),controller['index']);router[_0x32f0('0x7')](_0x32f0('0x9'),auth['isAuthenticated'](),controller[_0x32f0('0xa')]);router[_0x32f0('0xb')]('/',auth[_0x32f0('0x8')](),controller[_0x32f0('0xc')]);router['put'](_0x32f0('0x9'),auth['isAuthenticated'](),controller['update']);router[_0x32f0('0xd')](_0x32f0('0x9'),auth[_0x32f0('0x8')](),controller[_0x32f0('0xe')]);module[_0x32f0('0xf')]=router;
\ No newline at end of file
index d24c373..e76b8b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fdb=['sequelize','exports','STRING','INTEGER','BOOLEAN'];(function(_0x5d6270,_0x83b57a){var _0x168f26=function(_0x258a27){while(--_0x258a27){_0x5d6270['push'](_0x5d6270['shift']());}};_0x168f26(++_0x83b57a);}(_0x3fdb,0x1bd));var _0xb3fd=function(_0x5940ff,_0x17bfd1){_0x5940ff=_0x5940ff-0x0;var _0x37f326=_0x3fdb[_0x5940ff];return _0x37f326;};'use strict';var Sequelize=require(_0xb3fd('0x0'));module[_0xb3fd('0x1')]={'description':{'type':Sequelize[_0xb3fd('0x2')]},'host':{'type':Sequelize['STRING']},'user':{'type':Sequelize[_0xb3fd('0x2')]},'pass':{'type':Sequelize[_0xb3fd('0x2')]},'port':{'type':Sequelize[_0xb3fd('0x3')]},'secure':{'type':Sequelize[_0xb3fd('0x4')],'defaultValue':![]},'service':{'type':Sequelize[_0xb3fd('0x2')]},'authentication':{'type':Sequelize[_0xb3fd('0x4')],'defaultValue':!![]}};
\ No newline at end of file
+var _0x7a38=['STRING','INTEGER','BOOLEAN','exports'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0x7a38,0xeb));var _0x87a3=function(_0x8d8045,_0x113853){_0x8d8045=_0x8d8045-0x0;var _0x4b636e=_0x7a38[_0x8d8045];return _0x4b636e;};'use strict';var Sequelize=require('sequelize');module[_0x87a3('0x0')]={'description':{'type':Sequelize['STRING']},'host':{'type':Sequelize['STRING']},'user':{'type':Sequelize[_0x87a3('0x1')]},'pass':{'type':Sequelize['STRING']},'port':{'type':Sequelize[_0x87a3('0x2')]},'secure':{'type':Sequelize[_0x87a3('0x3')],'defaultValue':![]},'service':{'type':Sequelize['STRING']},'authentication':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]}};
\ No newline at end of file
index 8069f66..6797cf0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfa43=['query','intersection','attributes','fields','length','hasOwnProperty','sort','where','filters','pick','filter','type','key','VIRTUAL','merge','options','MailServerOut','includeAll','findAll','rows','catch','show','find','create','body','params','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','path','sox','to-csv','lodash','crypto','desk.js','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','reject','save','update','then','destroy','end','error','stack','name','index','rawAttributes','model','keys'];(function(_0x14d07a,_0x417789){var _0x8e307c=function(_0x409f9f){while(--_0x409f9f){_0x14d07a['push'](_0x14d07a['shift']());}};_0x8e307c(++_0x417789);}(_0xfa43,0x1e8));var _0x3fa4=function(_0x23debc,_0x300d47){_0x23debc=_0x23debc-0x0;var _0x3a227b=_0xfa43[_0x23debc];return _0x3a227b;};'use strict';var pdf=require(_0x3fa4('0x0'));var emlformat=require(_0x3fa4('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x3fa4('0x2'));var jsonpatch=require(_0x3fa4('0x3'));var rp=require(_0x3fa4('0x4'));var moment=require(_0x3fa4('0x5'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x3fa4('0x6'));var sox=require(_0x3fa4('0x7'));var csv=require(_0x3fa4('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x3fa4('0x9'));var squel=require('squel');var crypto=require(_0x3fa4('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x3fa4('0xb'));var toCsv=require(_0x3fa4('0x8'));var querystring=require(_0x3fa4('0xc'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x3fa4('0xd'));var qs=require(_0x3fa4('0xe'));var hardwareService=require(_0x3fa4('0xf'));var logger=require(_0x3fa4('0x10'))('api');var utils=require(_0x3fa4('0x11'));var config=require(_0x3fa4('0x12'));var db=require(_0x3fa4('0x13'))['db'];function respondWithStatusCode(_0x21a745,_0x19b0f7){_0x19b0f7=_0x19b0f7||0xcc;return function(_0x1aa6c5){if(_0x1aa6c5){return _0x21a745[_0x3fa4('0x14')](_0x19b0f7);}return _0x21a745[_0x3fa4('0x15')](_0x19b0f7)['end']();};}function respondWithResult(_0x2e6791,_0x4831cc){_0x4831cc=_0x4831cc||0xc8;return function(_0x4e4acb){if(_0x4e4acb){return _0x2e6791['status'](_0x4831cc)[_0x3fa4('0x16')](_0x4e4acb);}};}function respondWithFilteredResult(_0x5bfe09,_0x52b2b6){return function(_0x9818cf){if(_0x9818cf){var _0x1178d2=_0x9818cf[_0x3fa4('0x17')],_0x14b74e=_0x52b2b6[_0x3fa4('0x18')],_0x3be660=_0x52b2b6[_0x3fa4('0x18')]+_0x52b2b6[_0x3fa4('0x19')],_0x33aee8;if(_0x3be660>=_0x1178d2){_0x3be660=_0x1178d2;_0x33aee8=0xc8;}else{_0x33aee8=0xce;}_0x5bfe09['status'](_0x33aee8);return _0x5bfe09[_0x3fa4('0x1a')]('Content-Range',_0x14b74e+'-'+_0x3be660+'/'+_0x1178d2)[_0x3fa4('0x16')](_0x9818cf);}return null;};}function patchUpdates(_0x1c8139){return function(_0x494d21){try{jsonpatch['apply'](_0x494d21,_0x1c8139,!![]);}catch(_0x33d9a6){return BPromise[_0x3fa4('0x1b')](_0x33d9a6);}return _0x494d21[_0x3fa4('0x1c')]();};}function saveUpdates(_0x444010,_0x5666bc){return function(_0x243a97){if(_0x243a97){return _0x243a97[_0x3fa4('0x1d')](_0x444010)[_0x3fa4('0x1e')](function(_0x12560d){return _0x12560d;});}return null;};}function removeEntity(_0x486a44,_0x42f94e){return function(_0x2d3363){if(_0x2d3363){return _0x2d3363[_0x3fa4('0x1f')]()['then'](function(){_0x486a44[_0x3fa4('0x15')](0xcc)[_0x3fa4('0x20')]();});}};}function handleEntityNotFound(_0x53c8b4,_0x59970e){return function(_0x3e4b07){if(!_0x3e4b07){_0x53c8b4[_0x3fa4('0x14')](0x194);}return _0x3e4b07;};}function handleError(_0x443531,_0x29fb9c){_0x29fb9c=_0x29fb9c||0x1f4;return function(_0xb0bb28){logger[_0x3fa4('0x21')](_0xb0bb28[_0x3fa4('0x22')]);if(_0xb0bb28[_0x3fa4('0x23')]){delete _0xb0bb28[_0x3fa4('0x23')];}_0x443531['status'](_0x29fb9c)['send'](_0xb0bb28);};}exports[_0x3fa4('0x24')]=function(_0x1a2a8c,_0xff011b){var _0x11d4e1={},_0x3cd286={},_0x1b8b18={'count':0x0,'rows':[]};var _0x1c955a=db['MailServerOut'][_0x3fa4('0x25')];_0x3cd286[_0x3fa4('0x26')]=_[_0x3fa4('0x27')](_0x1c955a);_0x3cd286[_0x3fa4('0x28')]=_['keys'](_0x1a2a8c[_0x3fa4('0x28')]);_0x3cd286['filters']=_[_0x3fa4('0x29')](_0x3cd286[_0x3fa4('0x26')],_0x3cd286[_0x3fa4('0x28')]);_0x11d4e1[_0x3fa4('0x2a')]=_[_0x3fa4('0x29')](_0x3cd286[_0x3fa4('0x26')],qs['fields'](_0x1a2a8c['query'][_0x3fa4('0x2b')]));_0x11d4e1['attributes']=_0x11d4e1[_0x3fa4('0x2a')][_0x3fa4('0x2c')]?_0x11d4e1[_0x3fa4('0x2a')]:_0x3cd286['model'];if(!_0x1a2a8c[_0x3fa4('0x28')][_0x3fa4('0x2d')]('nolimit')){_0x11d4e1[_0x3fa4('0x19')]=qs[_0x3fa4('0x19')](_0x1a2a8c[_0x3fa4('0x28')]['limit']);_0x11d4e1[_0x3fa4('0x18')]=qs[_0x3fa4('0x18')](_0x1a2a8c['query']['offset']);}_0x11d4e1['order']=qs['sort'](_0x1a2a8c[_0x3fa4('0x28')][_0x3fa4('0x2e')]);_0x11d4e1[_0x3fa4('0x2f')]=qs[_0x3fa4('0x30')](_[_0x3fa4('0x31')](_0x1a2a8c[_0x3fa4('0x28')],_0x3cd286[_0x3fa4('0x30')]));if(_0x1a2a8c[_0x3fa4('0x28')][_0x3fa4('0x32')]){_0x11d4e1[_0x3fa4('0x2f')]=_['merge'](_0x11d4e1[_0x3fa4('0x2f')],{'$or':_['map'](_0x1c955a,function(_0x484563){if(_0x484563[_0x3fa4('0x33')][_0x3fa4('0x34')]!==_0x3fa4('0x35')){var _0x3c5b08={};_0x3c5b08[_0x484563['field']]={'$like':'%'+_0x1a2a8c[_0x3fa4('0x28')][_0x3fa4('0x32')]+'%'};return _0x3c5b08;}})});}_0x11d4e1=_[_0x3fa4('0x36')]({},_0x11d4e1,_0x1a2a8c[_0x3fa4('0x37')]);var _0x1d7e47={'where':_0x11d4e1[_0x3fa4('0x2f')]};return db[_0x3fa4('0x38')][_0x3fa4('0x17')](_0x1d7e47)[_0x3fa4('0x1e')](function(_0x3cd02a){_0x1b8b18['count']=_0x3cd02a;if(_0x1a2a8c[_0x3fa4('0x28')][_0x3fa4('0x39')]){_0x11d4e1['include']=[{'all':!![]}];}return db[_0x3fa4('0x38')][_0x3fa4('0x3a')](_0x11d4e1);})[_0x3fa4('0x1e')](function(_0x3b068d){_0x1b8b18[_0x3fa4('0x3b')]=_0x3b068d;return _0x1b8b18;})[_0x3fa4('0x1e')](respondWithFilteredResult(_0xff011b,_0x11d4e1))[_0x3fa4('0x3c')](handleError(_0xff011b,null));};exports[_0x3fa4('0x3d')]=function(_0x3319c7,_0x206929){var _0x5218df={'raw':!![],'where':{'id':_0x3319c7['params']['id']}},_0x378888={};_0x378888['model']=_[_0x3fa4('0x27')](db[_0x3fa4('0x38')][_0x3fa4('0x25')]);_0x378888[_0x3fa4('0x28')]=_[_0x3fa4('0x27')](_0x3319c7[_0x3fa4('0x28')]);_0x378888['filters']=_[_0x3fa4('0x29')](_0x378888[_0x3fa4('0x26')],_0x378888['query']);_0x5218df[_0x3fa4('0x2a')]=_[_0x3fa4('0x29')](_0x378888[_0x3fa4('0x26')],qs[_0x3fa4('0x2b')](_0x3319c7[_0x3fa4('0x28')][_0x3fa4('0x2b')]));_0x5218df['attributes']=_0x5218df[_0x3fa4('0x2a')][_0x3fa4('0x2c')]?_0x5218df[_0x3fa4('0x2a')]:_0x378888[_0x3fa4('0x26')];if(_0x3319c7[_0x3fa4('0x28')][_0x3fa4('0x39')]){_0x5218df['include']=[{'all':!![]}];}_0x5218df=_[_0x3fa4('0x36')]({},_0x5218df,_0x3319c7[_0x3fa4('0x37')]);return db[_0x3fa4('0x38')][_0x3fa4('0x3e')](_0x5218df)[_0x3fa4('0x1e')](handleEntityNotFound(_0x206929,null))['then'](respondWithResult(_0x206929,null))[_0x3fa4('0x3c')](handleError(_0x206929,null));};exports[_0x3fa4('0x3f')]=function(_0xae243c,_0x28a028){return db[_0x3fa4('0x38')][_0x3fa4('0x3f')](_0xae243c[_0x3fa4('0x40')],{})['then'](respondWithResult(_0x28a028,0xc9))[_0x3fa4('0x3c')](handleError(_0x28a028,null));};exports[_0x3fa4('0x1d')]=function(_0x11fc7f,_0x508fd6){if(_0x11fc7f[_0x3fa4('0x40')]['id']){delete _0x11fc7f[_0x3fa4('0x40')]['id'];}return db[_0x3fa4('0x38')][_0x3fa4('0x3e')]({'where':{'id':_0x11fc7f['params']['id']}})[_0x3fa4('0x1e')](handleEntityNotFound(_0x508fd6,null))[_0x3fa4('0x1e')](saveUpdates(_0x11fc7f['body'],null))[_0x3fa4('0x1e')](respondWithResult(_0x508fd6,null))[_0x3fa4('0x3c')](handleError(_0x508fd6,null));};exports['destroy']=function(_0x14c2ff,_0x54867a){return db[_0x3fa4('0x38')]['find']({'where':{'id':_0x14c2ff[_0x3fa4('0x41')]['id']}})[_0x3fa4('0x1e')](handleEntityNotFound(_0x54867a,null))[_0x3fa4('0x1e')](removeEntity(_0x54867a,null))[_0x3fa4('0x3c')](handleError(_0x54867a,null));};
\ No newline at end of file
+var _0x4f47=['../../config/license/hardware','../../config/logger','../../config/environment','../../mysqldb','status','end','count','offset','Content-Range','json','apply','reject','update','then','sendStatus','error','stack','name','send','index','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','pick','filter','merge','map','key','includeAll','MailServerOut','rows','catch','params','rawAttributes','include','options','find','create','body','destroy','eml-format','request-promise','mustache','util','path','sox','to-csv','ejs','crypto','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs'];(function(_0x122cc1,_0x5c956e){var _0x1e33af=function(_0x949b75){while(--_0x949b75){_0x122cc1['push'](_0x122cc1['shift']());}};_0x1e33af(++_0x5c956e);}(_0x4f47,0x72));var _0x74f4=function(_0x18af8f,_0x35926f){_0x18af8f=_0x18af8f-0x0;var _0x41e9c9=_0x4f47[_0x18af8f];return _0x41e9c9;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x74f4('0x0'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x74f4('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x74f4('0x2'));var util=require(_0x74f4('0x3'));var path=require(_0x74f4('0x4'));var sox=require(_0x74f4('0x5'));var csv=require(_0x74f4('0x6'));var ejs=require(_0x74f4('0x7'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x74f4('0x8'));var jsforce=require('jsforce');var deskjs=require(_0x74f4('0x9'));var toCsv=require(_0x74f4('0x6'));var querystring=require('querystring');var Papa=require(_0x74f4('0xa'));var Redis=require(_0x74f4('0xb'));var authService=require(_0x74f4('0xc'));var qs=require(_0x74f4('0xd'));var hardwareService=require(_0x74f4('0xe'));var logger=require(_0x74f4('0xf'))('api');var utils=require('../../config/utils');var config=require(_0x74f4('0x10'));var db=require(_0x74f4('0x11'))['db'];function respondWithStatusCode(_0x1f9fdf,_0x4ba085){_0x4ba085=_0x4ba085||0xcc;return function(_0x2e9f40){if(_0x2e9f40){return _0x1f9fdf['sendStatus'](_0x4ba085);}return _0x1f9fdf[_0x74f4('0x12')](_0x4ba085)[_0x74f4('0x13')]();};}function respondWithResult(_0x42c03c,_0x4a8c56){_0x4a8c56=_0x4a8c56||0xc8;return function(_0x5136bc){if(_0x5136bc){return _0x42c03c[_0x74f4('0x12')](_0x4a8c56)['json'](_0x5136bc);}};}function respondWithFilteredResult(_0x59d7bb,_0x47391){return function(_0x19ba26){if(_0x19ba26){var _0x176835=_0x19ba26[_0x74f4('0x14')],_0x1aa65c=_0x47391[_0x74f4('0x15')],_0x2fc3a2=_0x47391[_0x74f4('0x15')]+_0x47391['limit'],_0x2c4a20;if(_0x2fc3a2>=_0x176835){_0x2fc3a2=_0x176835;_0x2c4a20=0xc8;}else{_0x2c4a20=0xce;}_0x59d7bb[_0x74f4('0x12')](_0x2c4a20);return _0x59d7bb['set'](_0x74f4('0x16'),_0x1aa65c+'-'+_0x2fc3a2+'/'+_0x176835)[_0x74f4('0x17')](_0x19ba26);}return null;};}function patchUpdates(_0x32ed07){return function(_0x434709){try{jsonpatch[_0x74f4('0x18')](_0x434709,_0x32ed07,!![]);}catch(_0x164e21){return BPromise[_0x74f4('0x19')](_0x164e21);}return _0x434709['save']();};}function saveUpdates(_0x49ae10,_0x58788b){return function(_0x285519){if(_0x285519){return _0x285519[_0x74f4('0x1a')](_0x49ae10)[_0x74f4('0x1b')](function(_0x2078f1){return _0x2078f1;});}return null;};}function removeEntity(_0x4f3d82,_0x433443){return function(_0x273d34){if(_0x273d34){return _0x273d34['destroy']()[_0x74f4('0x1b')](function(){_0x4f3d82['status'](0xcc)[_0x74f4('0x13')]();});}};}function handleEntityNotFound(_0x211bc4,_0x1410c9){return function(_0x31ea61){if(!_0x31ea61){_0x211bc4[_0x74f4('0x1c')](0x194);}return _0x31ea61;};}function handleError(_0x3f1e82,_0x247ece){_0x247ece=_0x247ece||0x1f4;return function(_0x4d08f1){logger[_0x74f4('0x1d')](_0x4d08f1[_0x74f4('0x1e')]);if(_0x4d08f1[_0x74f4('0x1f')]){delete _0x4d08f1[_0x74f4('0x1f')];}_0x3f1e82[_0x74f4('0x12')](_0x247ece)[_0x74f4('0x20')](_0x4d08f1);};}exports[_0x74f4('0x21')]=function(_0x160e27,_0x8bde56){var _0x39de08={},_0x360dbd={},_0x5051fa={'count':0x0,'rows':[]};var _0x216430=db['MailServerOut']['rawAttributes'];_0x360dbd[_0x74f4('0x22')]=_[_0x74f4('0x23')](_0x216430);_0x360dbd[_0x74f4('0x24')]=_['keys'](_0x160e27[_0x74f4('0x24')]);_0x360dbd[_0x74f4('0x25')]=_[_0x74f4('0x26')](_0x360dbd['model'],_0x360dbd[_0x74f4('0x24')]);_0x39de08[_0x74f4('0x27')]=_[_0x74f4('0x26')](_0x360dbd['model'],qs[_0x74f4('0x28')](_0x160e27['query']['fields']));_0x39de08[_0x74f4('0x27')]=_0x39de08[_0x74f4('0x27')][_0x74f4('0x29')]?_0x39de08[_0x74f4('0x27')]:_0x360dbd['model'];if(!_0x160e27[_0x74f4('0x24')][_0x74f4('0x2a')](_0x74f4('0x2b'))){_0x39de08[_0x74f4('0x2c')]=qs['limit'](_0x160e27[_0x74f4('0x24')]['limit']);_0x39de08[_0x74f4('0x15')]=qs[_0x74f4('0x15')](_0x160e27[_0x74f4('0x24')]['offset']);}_0x39de08['order']=qs[_0x74f4('0x2d')](_0x160e27[_0x74f4('0x24')][_0x74f4('0x2d')]);_0x39de08[_0x74f4('0x2e')]=qs[_0x74f4('0x25')](_[_0x74f4('0x2f')](_0x160e27['query'],_0x360dbd[_0x74f4('0x25')]));if(_0x160e27[_0x74f4('0x24')][_0x74f4('0x30')]){_0x39de08[_0x74f4('0x2e')]=_[_0x74f4('0x31')](_0x39de08[_0x74f4('0x2e')],{'$or':_[_0x74f4('0x32')](_0x216430,function(_0x510945){if(_0x510945['type'][_0x74f4('0x33')]!=='VIRTUAL'){var _0xfe2a4f={};_0xfe2a4f[_0x510945['field']]={'$like':'%'+_0x160e27[_0x74f4('0x24')][_0x74f4('0x30')]+'%'};return _0xfe2a4f;}})});}_0x39de08=_[_0x74f4('0x31')]({},_0x39de08,_0x160e27['options']);var _0x58c66d={'where':_0x39de08[_0x74f4('0x2e')]};return db['MailServerOut'][_0x74f4('0x14')](_0x58c66d)['then'](function(_0x4fdb8e){_0x5051fa[_0x74f4('0x14')]=_0x4fdb8e;if(_0x160e27['query'][_0x74f4('0x34')]){_0x39de08['include']=[{'all':!![]}];}return db[_0x74f4('0x35')]['findAll'](_0x39de08);})[_0x74f4('0x1b')](function(_0x558c03){_0x5051fa[_0x74f4('0x36')]=_0x558c03;return _0x5051fa;})[_0x74f4('0x1b')](respondWithFilteredResult(_0x8bde56,_0x39de08))[_0x74f4('0x37')](handleError(_0x8bde56,null));};exports['show']=function(_0x2ad788,_0x138822){var _0x58f8bd={'raw':!![],'where':{'id':_0x2ad788[_0x74f4('0x38')]['id']}},_0x3aaccc={};_0x3aaccc['model']=_[_0x74f4('0x23')](db[_0x74f4('0x35')][_0x74f4('0x39')]);_0x3aaccc[_0x74f4('0x24')]=_[_0x74f4('0x23')](_0x2ad788['query']);_0x3aaccc[_0x74f4('0x25')]=_[_0x74f4('0x26')](_0x3aaccc['model'],_0x3aaccc[_0x74f4('0x24')]);_0x58f8bd[_0x74f4('0x27')]=_[_0x74f4('0x26')](_0x3aaccc[_0x74f4('0x22')],qs[_0x74f4('0x28')](_0x2ad788['query'][_0x74f4('0x28')]));_0x58f8bd[_0x74f4('0x27')]=_0x58f8bd['attributes']['length']?_0x58f8bd[_0x74f4('0x27')]:_0x3aaccc[_0x74f4('0x22')];if(_0x2ad788[_0x74f4('0x24')]['includeAll']){_0x58f8bd[_0x74f4('0x3a')]=[{'all':!![]}];}_0x58f8bd=_['merge']({},_0x58f8bd,_0x2ad788[_0x74f4('0x3b')]);return db['MailServerOut'][_0x74f4('0x3c')](_0x58f8bd)[_0x74f4('0x1b')](handleEntityNotFound(_0x138822,null))[_0x74f4('0x1b')](respondWithResult(_0x138822,null))['catch'](handleError(_0x138822,null));};exports['create']=function(_0x2146bb,_0x5115c8){return db[_0x74f4('0x35')][_0x74f4('0x3d')](_0x2146bb[_0x74f4('0x3e')],{})[_0x74f4('0x1b')](respondWithResult(_0x5115c8,0xc9))[_0x74f4('0x37')](handleError(_0x5115c8,null));};exports[_0x74f4('0x1a')]=function(_0x42ed17,_0x525a4b){if(_0x42ed17[_0x74f4('0x3e')]['id']){delete _0x42ed17[_0x74f4('0x3e')]['id'];}return db['MailServerOut'][_0x74f4('0x3c')]({'where':{'id':_0x42ed17[_0x74f4('0x38')]['id']}})[_0x74f4('0x1b')](handleEntityNotFound(_0x525a4b,null))['then'](saveUpdates(_0x42ed17[_0x74f4('0x3e')],null))['then'](respondWithResult(_0x525a4b,null))[_0x74f4('0x37')](handleError(_0x525a4b,null));};exports[_0x74f4('0x3f')]=function(_0x124554,_0x1b4cae){return db[_0x74f4('0x35')][_0x74f4('0x3c')]({'where':{'id':_0x124554['params']['id']}})[_0x74f4('0x1b')](handleEntityNotFound(_0x1b4cae,null))[_0x74f4('0x1b')](removeEntity(_0x1b4cae,null))[_0x74f4('0x37')](handleError(_0x1b4cae,null));};
\ No newline at end of file
index bfa9686..11f1f1b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe605=['exports','define','mail_servers_out','lodash','util','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./mailServerOut.attributes'];(function(_0x57fcc9,_0x48ac6c){var _0x347e13=function(_0x3b70d5){while(--_0x3b70d5){_0x57fcc9['push'](_0x57fcc9['shift']());}};_0x347e13(++_0x48ac6c);}(_0xe605,0x92));var _0x5e60=function(_0x4d6b04,_0x3fdabe){_0x4d6b04=_0x4d6b04-0x0;var _0x21cd81=_0xe605[_0x4d6b04];return _0x21cd81;};'use strict';var _=require(_0x5e60('0x0'));var util=require(_0x5e60('0x1'));var logger=require('../../config/logger')(_0x5e60('0x2'));var moment=require(_0x5e60('0x3'));var BPromise=require(_0x5e60('0x4'));var rp=require(_0x5e60('0x5'));var fs=require('fs');var path=require(_0x5e60('0x6'));var rimraf=require(_0x5e60('0x7'));var config=require(_0x5e60('0x8'));var attributes=require(_0x5e60('0x9'));module[_0x5e60('0xa')]=function(_0xc41535,_0x1d4a08){return _0xc41535[_0x5e60('0xb')]('MailServerOut',attributes,{'tableName':_0x5e60('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1339=['moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','MailServerOut','mail_servers_out','../../config/logger','api'];(function(_0x4a08fa,_0x31dd62){var _0x406fff=function(_0x250878){while(--_0x250878){_0x4a08fa['push'](_0x4a08fa['shift']());}};_0x406fff(++_0x31dd62);}(_0x1339,0x1ed));var _0x9133=function(_0x968fbb,_0x262184){_0x968fbb=_0x968fbb-0x0;var _0x1e2f17=_0x1339[_0x968fbb];return _0x1e2f17;};'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('./mailServerOut.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
index 6177c00..c1418c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3847=['message','result','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','info','request\x20sent','debug','MailServerOut,\x20%s,\x20%s,\x20%s','error','code','MailServerOut,\x20%s,\x20%s'];(function(_0x4cfc1d,_0x2c0927){var _0x1c01a0=function(_0x264a74){while(--_0x264a74){_0x4cfc1d['push'](_0x4cfc1d['shift']());}};_0x1c01a0(++_0x2c0927);}(_0x3847,0x152));var _0x7384=function(_0x9b9005,_0x12ef3b){_0x9b9005=_0x9b9005-0x0;var _0x223ee1=_0x3847[_0x9b9005];return _0x223ee1;};'use strict';var _=require(_0x7384('0x0'));var util=require(_0x7384('0x1'));var moment=require(_0x7384('0x2'));var BPromise=require(_0x7384('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x7384('0x4'))['db'];var utils=require(_0x7384('0x5'));var logger=require(_0x7384('0x6'))(_0x7384('0x7'));var config=require(_0x7384('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x7384('0x9')][_0x7384('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4461d0,_0x1b7cdf,_0x10eae3){return new BPromise(function(_0x56a47c,_0x348fa6){return client[_0x7384('0xb')](_0x4461d0,_0x10eae3)['then'](function(_0x1e5647){logger[_0x7384('0xc')]('MailServerOut,\x20%s,\x20%s',_0x1b7cdf,_0x7384('0xd'));logger[_0x7384('0xe')](_0x7384('0xf'),_0x1b7cdf,'request\x20sent',JSON['stringify'](_0x1e5647));if(_0x1e5647['error']){if(_0x1e5647[_0x7384('0x10')][_0x7384('0x11')]===0x1f4){logger['error'](_0x7384('0x12'),_0x1b7cdf,_0x1e5647['error'][_0x7384('0x13')]);return _0x348fa6(_0x1e5647[_0x7384('0x10')][_0x7384('0x13')]);}logger[_0x7384('0x10')]('MailServerOut,\x20%s,\x20%s',_0x1b7cdf,_0x1e5647[_0x7384('0x10')][_0x7384('0x13')]);return _0x56a47c(_0x1e5647['error'][_0x7384('0x13')]);}else{logger[_0x7384('0xc')]('MailServerOut,\x20%s,\x20%s',_0x1b7cdf,_0x7384('0xd'));_0x56a47c(_0x1e5647[_0x7384('0x14')][_0x7384('0x13')]);}})['catch'](function(_0xb61dfe){logger[_0x7384('0x10')]('MailServerOut,\x20%s,\x20%s',_0x1b7cdf,_0xb61dfe);_0x348fa6(_0xb61dfe);});});}
\ No newline at end of file
+var _0xda8c=['randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','info','MailServerOut,\x20%s,\x20%s','debug','MailServerOut,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash','util','moment','bluebird'];(function(_0x5b7288,_0x2382b2){var _0x370468=function(_0x58a964){while(--_0x58a964){_0x5b7288['push'](_0x5b7288['shift']());}};_0x370468(++_0x2382b2);}(_0xda8c,0x15a));var _0xcda8=function(_0x564f8e,_0x61f2c0){_0x564f8e=_0x564f8e-0x0;var _0x21b11c=_0xda8c[_0x564f8e];return _0x21b11c;};'use strict';var _=require(_0xcda8('0x0'));var util=require(_0xcda8('0x1'));var moment=require(_0xcda8('0x2'));var BPromise=require(_0xcda8('0x3'));var rs=require(_0xcda8('0x4'));var fs=require('fs');var Redis=require(_0xcda8('0x5'));var db=require(_0xcda8('0x6'))['db'];var utils=require(_0xcda8('0x7'));var logger=require(_0xcda8('0x8'))(_0xcda8('0x9'));var config=require(_0xcda8('0xa'));var jayson=require(_0xcda8('0xb'));var client=jayson[_0xcda8('0xc')][_0xcda8('0xd')]({'port':0x232a});function respondWithRpcPromise(_0x42c362,_0x286aa8,_0xc65819){return new BPromise(function(_0xc5dfed,_0x58e7ac){return client['request'](_0x42c362,_0xc65819)['then'](function(_0x36ffc5){logger[_0xcda8('0xe')](_0xcda8('0xf'),_0x286aa8,'request\x20sent');logger[_0xcda8('0x10')](_0xcda8('0x11'),_0x286aa8,_0xcda8('0x12'),JSON[_0xcda8('0x13')](_0x36ffc5));if(_0x36ffc5[_0xcda8('0x14')]){if(_0x36ffc5[_0xcda8('0x14')][_0xcda8('0x15')]===0x1f4){logger[_0xcda8('0x14')](_0xcda8('0xf'),_0x286aa8,_0x36ffc5[_0xcda8('0x14')][_0xcda8('0x16')]);return _0x58e7ac(_0x36ffc5['error'][_0xcda8('0x16')]);}logger['error'](_0xcda8('0xf'),_0x286aa8,_0x36ffc5[_0xcda8('0x14')][_0xcda8('0x16')]);return _0xc5dfed(_0x36ffc5[_0xcda8('0x14')][_0xcda8('0x16')]);}else{logger[_0xcda8('0xe')](_0xcda8('0xf'),_0x286aa8,_0xcda8('0x12'));_0xc5dfed(_0x36ffc5[_0xcda8('0x17')][_0xcda8('0x16')]);}})[_0xcda8('0x18')](function(_0x51862c){logger[_0xcda8('0x14')](_0xcda8('0xf'),_0x286aa8,_0x51862c);_0x58e7ac(_0x51862c);});});}
\ No newline at end of file
index 5ad0a3d..db3121c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2b2e=['show','post','create','put','update','delete','destroy','multer','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailSubstatus.controller','index','get','/describe','describe','/:id','isAuthenticated'];(function(_0x491d89,_0x506dbe){var _0x1dc420=function(_0x558b5a){while(--_0x558b5a){_0x491d89['push'](_0x491d89['shift']());}};_0x1dc420(++_0x506dbe);}(_0x2b2e,0xf7));var _0xe2b2=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0x2b2e[_0x6131cd];return _0x47e916;};'use strict';var multer=require(_0xe2b2('0x0'));var util=require('util');var path=require(_0xe2b2('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xe2b2('0x2')]();var auth=require(_0xe2b2('0x3'));var interaction=require(_0xe2b2('0x4'));var config=require(_0xe2b2('0x5'));var controller=require(_0xe2b2('0x6'));router['get']('/',auth['isAuthenticated'](),controller[_0xe2b2('0x7')]);router[_0xe2b2('0x8')](_0xe2b2('0x9'),auth['isAuthenticated'](),controller[_0xe2b2('0xa')]);router[_0xe2b2('0x8')](_0xe2b2('0xb'),auth[_0xe2b2('0xc')](),controller[_0xe2b2('0xd')]);router[_0xe2b2('0xe')]('/',auth[_0xe2b2('0xc')](),controller[_0xe2b2('0xf')]);router[_0xe2b2('0x10')](_0xe2b2('0xb'),auth['isAuthenticated'](),controller[_0xe2b2('0x11')]);router[_0xe2b2('0x12')](_0xe2b2('0xb'),auth['isAuthenticated'](),controller[_0xe2b2('0x13')]);module['exports']=router;
\ No newline at end of file
+var _0xaa5f=['path','connect-timeout','Router','../../components/interaction/service','../../config/environment','./mailSubstatus.controller','isAuthenticated','get','/describe','describe','/:id','post','create','put','delete','destroy','multer','util'];(function(_0x59159f,_0x2e9999){var _0xc9a7e1=function(_0x174da5){while(--_0x174da5){_0x59159f['push'](_0x59159f['shift']());}};_0xc9a7e1(++_0x2e9999);}(_0xaa5f,0xfa));var _0xfaa5=function(_0x46f263,_0x5354b3){_0x46f263=_0x46f263-0x0;var _0x57e1b3=_0xaa5f[_0x46f263];return _0x57e1b3;};'use strict';var multer=require(_0xfaa5('0x0'));var util=require(_0xfaa5('0x1'));var path=require(_0xfaa5('0x2'));var timeout=require(_0xfaa5('0x3'));var express=require('express');var router=express[_0xfaa5('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xfaa5('0x5'));var config=require(_0xfaa5('0x6'));var controller=require(_0xfaa5('0x7'));router['get']('/',auth[_0xfaa5('0x8')](),controller['index']);router[_0xfaa5('0x9')](_0xfaa5('0xa'),auth[_0xfaa5('0x8')](),controller[_0xfaa5('0xb')]);router[_0xfaa5('0x9')](_0xfaa5('0xc'),auth[_0xfaa5('0x8')](),controller['show']);router[_0xfaa5('0xd')]('/',auth[_0xfaa5('0x8')](),controller[_0xfaa5('0xe')]);router[_0xfaa5('0xf')](_0xfaa5('0xc'),auth[_0xfaa5('0x8')](),controller['update']);router[_0xfaa5('0x10')](_0xfaa5('0xc'),auth[_0xfaa5('0x8')](),controller[_0xfaa5('0x11')]);module['exports']=router;
\ No newline at end of file
index cdae59b..64808e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf14=['STRING','name','sequelize'];(function(_0x2b78ee,_0x46bac1){var _0x5d2f06=function(_0x2b57e0){while(--_0x2b57e0){_0x2b78ee['push'](_0x2b78ee['shift']());}};_0x5d2f06(++_0x46bac1);}(_0xcf14,0xa1));var _0x4cf1=function(_0x45cf95,_0x11e423){_0x45cf95=_0x45cf95-0x0;var _0x5ba844=_0xcf14[_0x45cf95];return _0x5ba844;};'use strict';var Sequelize=require(_0x4cf1('0x0'));module['exports']={'name':{'type':Sequelize[_0x4cf1('0x1')],'unique':_0x4cf1('0x2'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x777d=['STRING','name','exports'];(function(_0x17072a,_0x5aa999){var _0x215ba7=function(_0x442c6f){while(--_0x442c6f){_0x17072a['push'](_0x17072a['shift']());}};_0x215ba7(++_0x5aa999);}(_0x777d,0xe9));var _0xd777=function(_0x5f382f,_0x3f1432){_0x5f382f=_0x5f382f-0x0;var _0x3bb11b=_0x777d[_0x5f382f];return _0x3bb11b;};'use strict';var Sequelize=require('sequelize');module[_0xd777('0x0')]={'name':{'type':Sequelize[_0xd777('0x1')],'unique':_0xd777('0x2'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 886bcaf..cf1a1ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaeef=['update','then','destroy','end','name','index','MailSubstatus','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','options','includeAll','rows','catch','show','include','params','body','describe','html-pdf','eml-format','zip-dir','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','api','../../config/utils','sendStatus','status','json','count','offset','limit','set','Content-Range','reject','save'];(function(_0x5dfe68,_0x5c2f23){var _0x58b81f=function(_0xb60c79){while(--_0xb60c79){_0x5dfe68['push'](_0x5dfe68['shift']());}};_0x58b81f(++_0x5c2f23);}(_0xaeef,0x6c));var _0xfaee=function(_0x1da6d5,_0x1e7015){_0x1da6d5=_0x1da6d5-0x0;var _0x200cca=_0xaeef[_0x1da6d5];return _0x200cca;};'use strict';var pdf=require(_0xfaee('0x0'));var emlformat=require(_0xfaee('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xfaee('0x2'));var jsonpatch=require(_0xfaee('0x3'));var rp=require(_0xfaee('0x4'));var moment=require(_0xfaee('0x5'));var BPromise=require(_0xfaee('0x6'));var Mustache=require(_0xfaee('0x7'));var util=require(_0xfaee('0x8'));var path=require(_0xfaee('0x9'));var sox=require(_0xfaee('0xa'));var csv=require(_0xfaee('0xb'));var ejs=require(_0xfaee('0xc'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xfaee('0xd'));var jsforce=require(_0xfaee('0xe'));var deskjs=require(_0xfaee('0xf'));var toCsv=require(_0xfaee('0xb'));var querystring=require(_0xfaee('0x10'));var Papa=require(_0xfaee('0x11'));var Redis=require('ioredis');var authService=require(_0xfaee('0x12'));var qs=require(_0xfaee('0x13'));var hardwareService=require(_0xfaee('0x14'));var logger=require(_0xfaee('0x15'))(_0xfaee('0x16'));var utils=require(_0xfaee('0x17'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5de1b2,_0x58b4db){_0x58b4db=_0x58b4db||0xcc;return function(_0x220196){if(_0x220196){return _0x5de1b2[_0xfaee('0x18')](_0x58b4db);}return _0x5de1b2['status'](_0x58b4db)['end']();};}function respondWithResult(_0x417fd5,_0x47f466){_0x47f466=_0x47f466||0xc8;return function(_0x24501f){if(_0x24501f){return _0x417fd5[_0xfaee('0x19')](_0x47f466)[_0xfaee('0x1a')](_0x24501f);}};}function respondWithFilteredResult(_0x4ef581,_0x129519){return function(_0x46ac66){if(_0x46ac66){var _0x5f2f38=_0x46ac66[_0xfaee('0x1b')],_0x3f495e=_0x129519[_0xfaee('0x1c')],_0x53aa93=_0x129519[_0xfaee('0x1c')]+_0x129519[_0xfaee('0x1d')],_0x1336a5;if(_0x53aa93>=_0x5f2f38){_0x53aa93=_0x5f2f38;_0x1336a5=0xc8;}else{_0x1336a5=0xce;}_0x4ef581[_0xfaee('0x19')](_0x1336a5);return _0x4ef581[_0xfaee('0x1e')](_0xfaee('0x1f'),_0x3f495e+'-'+_0x53aa93+'/'+_0x5f2f38)[_0xfaee('0x1a')](_0x46ac66);}return null;};}function patchUpdates(_0x32b673){return function(_0x196f34){try{jsonpatch['apply'](_0x196f34,_0x32b673,!![]);}catch(_0x5bbd36){return BPromise[_0xfaee('0x20')](_0x5bbd36);}return _0x196f34[_0xfaee('0x21')]();};}function saveUpdates(_0x377b3f,_0x3f978d){return function(_0x47315d){if(_0x47315d){return _0x47315d[_0xfaee('0x22')](_0x377b3f)[_0xfaee('0x23')](function(_0x22d955){return _0x22d955;});}return null;};}function removeEntity(_0x1ebb35,_0x2763d0){return function(_0x122a3e){if(_0x122a3e){return _0x122a3e[_0xfaee('0x24')]()[_0xfaee('0x23')](function(){_0x1ebb35[_0xfaee('0x19')](0xcc)[_0xfaee('0x25')]();});}};}function handleEntityNotFound(_0x2293e3,_0x1e4331){return function(_0xb92fd8){if(!_0xb92fd8){_0x2293e3[_0xfaee('0x18')](0x194);}return _0xb92fd8;};}function handleError(_0x2544b6,_0x303395){_0x303395=_0x303395||0x1f4;return function(_0x49a779){logger['error'](_0x49a779['stack']);if(_0x49a779[_0xfaee('0x26')]){delete _0x49a779[_0xfaee('0x26')];}_0x2544b6['status'](_0x303395)['send'](_0x49a779);};}exports[_0xfaee('0x27')]=function(_0x348b2a,_0x52ecd6){var _0x41c7a2={},_0x491a83={},_0x592433={'count':0x0,'rows':[]};var _0x2cd6ac=db[_0xfaee('0x28')][_0xfaee('0x29')];_0x491a83[_0xfaee('0x2a')]=_[_0xfaee('0x2b')](_0x2cd6ac);_0x491a83[_0xfaee('0x2c')]=_['keys'](_0x348b2a[_0xfaee('0x2c')]);_0x491a83[_0xfaee('0x2d')]=_[_0xfaee('0x2e')](_0x491a83[_0xfaee('0x2a')],_0x491a83['query']);_0x41c7a2[_0xfaee('0x2f')]=_[_0xfaee('0x2e')](_0x491a83[_0xfaee('0x2a')],qs[_0xfaee('0x30')](_0x348b2a['query'][_0xfaee('0x30')]));_0x41c7a2[_0xfaee('0x2f')]=_0x41c7a2['attributes']['length']?_0x41c7a2[_0xfaee('0x2f')]:_0x491a83[_0xfaee('0x2a')];if(!_0x348b2a[_0xfaee('0x2c')][_0xfaee('0x31')](_0xfaee('0x32'))){_0x41c7a2[_0xfaee('0x1d')]=qs[_0xfaee('0x1d')](_0x348b2a['query']['limit']);_0x41c7a2[_0xfaee('0x1c')]=qs[_0xfaee('0x1c')](_0x348b2a[_0xfaee('0x2c')]['offset']);}_0x41c7a2[_0xfaee('0x33')]=qs['sort'](_0x348b2a[_0xfaee('0x2c')][_0xfaee('0x34')]);_0x41c7a2[_0xfaee('0x35')]=qs[_0xfaee('0x2d')](_[_0xfaee('0x36')](_0x348b2a[_0xfaee('0x2c')],_0x491a83[_0xfaee('0x2d')]));if(_0x348b2a[_0xfaee('0x2c')][_0xfaee('0x37')]){_0x41c7a2[_0xfaee('0x35')]=_['merge'](_0x41c7a2[_0xfaee('0x35')],{'$or':_[_0xfaee('0x38')](_0x2cd6ac,function(_0x20bdff){if(_0x20bdff[_0xfaee('0x39')][_0xfaee('0x3a')]!==_0xfaee('0x3b')){var _0x5df201={};_0x5df201[_0x20bdff[_0xfaee('0x3c')]]={'$like':'%'+_0x348b2a[_0xfaee('0x2c')]['filter']+'%'};return _0x5df201;}})});}_0x41c7a2=_[_0xfaee('0x3d')]({},_0x41c7a2,_0x348b2a[_0xfaee('0x3e')]);var _0x230f74={'where':_0x41c7a2[_0xfaee('0x35')]};return db['MailSubstatus'][_0xfaee('0x1b')](_0x230f74)[_0xfaee('0x23')](function(_0xa78f19){_0x592433['count']=_0xa78f19;if(_0x348b2a[_0xfaee('0x2c')][_0xfaee('0x3f')]){_0x41c7a2['include']=[{'all':!![]}];}return db[_0xfaee('0x28')]['findAll'](_0x41c7a2);})[_0xfaee('0x23')](function(_0x32e1d9){_0x592433[_0xfaee('0x40')]=_0x32e1d9;return _0x592433;})[_0xfaee('0x23')](respondWithFilteredResult(_0x52ecd6,_0x41c7a2))[_0xfaee('0x41')](handleError(_0x52ecd6,null));};exports[_0xfaee('0x42')]=function(_0x57b324,_0x3b9751){var _0x5d14d4={'raw':!![],'where':{'id':_0x57b324['params']['id']}},_0x27f2df={};_0x27f2df['model']=_[_0xfaee('0x2b')](db[_0xfaee('0x28')][_0xfaee('0x29')]);_0x27f2df[_0xfaee('0x2c')]=_[_0xfaee('0x2b')](_0x57b324[_0xfaee('0x2c')]);_0x27f2df[_0xfaee('0x2d')]=_[_0xfaee('0x2e')](_0x27f2df[_0xfaee('0x2a')],_0x27f2df[_0xfaee('0x2c')]);_0x5d14d4[_0xfaee('0x2f')]=_['intersection'](_0x27f2df[_0xfaee('0x2a')],qs[_0xfaee('0x30')](_0x57b324[_0xfaee('0x2c')][_0xfaee('0x30')]));_0x5d14d4[_0xfaee('0x2f')]=_0x5d14d4[_0xfaee('0x2f')]['length']?_0x5d14d4[_0xfaee('0x2f')]:_0x27f2df['model'];if(_0x57b324[_0xfaee('0x2c')][_0xfaee('0x3f')]){_0x5d14d4[_0xfaee('0x43')]=[{'all':!![]}];}_0x5d14d4=_[_0xfaee('0x3d')]({},_0x5d14d4,_0x57b324[_0xfaee('0x3e')]);return db[_0xfaee('0x28')]['find'](_0x5d14d4)[_0xfaee('0x23')](handleEntityNotFound(_0x3b9751,null))[_0xfaee('0x23')](respondWithResult(_0x3b9751,null))['catch'](handleError(_0x3b9751,null));};exports['create']=function(_0x22188e,_0x17cdcf){return db[_0xfaee('0x28')]['create'](_0x22188e['body'],{})['then'](respondWithResult(_0x17cdcf,0xc9))['catch'](handleError(_0x17cdcf,null));};exports[_0xfaee('0x22')]=function(_0x97834,_0x4164a7){if(_0x97834['body']['id']){delete _0x97834['body']['id'];}return db[_0xfaee('0x28')]['find']({'where':{'id':_0x97834[_0xfaee('0x44')]['id']}})[_0xfaee('0x23')](handleEntityNotFound(_0x4164a7,null))[_0xfaee('0x23')](saveUpdates(_0x97834[_0xfaee('0x45')],null))[_0xfaee('0x23')](respondWithResult(_0x4164a7,null))[_0xfaee('0x41')](handleError(_0x4164a7,null));};exports[_0xfaee('0x24')]=function(_0x18b18e,_0x28da0a){return db[_0xfaee('0x28')]['find']({'where':{'id':_0x18b18e[_0xfaee('0x44')]['id']}})[_0xfaee('0x23')](handleEntityNotFound(_0x28da0a,null))[_0xfaee('0x23')](removeEntity(_0x28da0a,null))['catch'](handleError(_0x28da0a,null));};exports[_0xfaee('0x46')]=function(_0x433dbc,_0x4cbbc9){return db[_0xfaee('0x28')][_0xfaee('0x46')]()[_0xfaee('0x23')](respondWithResult(_0x4cbbc9,null))[_0xfaee('0x41')](handleError(_0x4cbbc9,null));};
\ No newline at end of file
+var _0x42ff=['offset','limit','set','Content-Range','json','apply','reject','save','then','destroy','end','name','send','index','MailSubstatus','rawAttributes','model','query','keys','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','pick','where','merge','map','type','key','field','options','includeAll','include','findAll','rows','catch','params','find','create','body','update','describe','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','lodash','crypto','jsforce','desk.js','querystring','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','count'];(function(_0x40797a,_0xaab5a1){var _0x49c9c9=function(_0x26abc2){while(--_0x26abc2){_0x40797a['push'](_0x40797a['shift']());}};_0x49c9c9(++_0xaab5a1);}(_0x42ff,0x77));var _0xf42f=function(_0x2be8c2,_0x14a4b5){_0x2be8c2=_0x2be8c2-0x0;var _0x97f531=_0x42ff[_0x2be8c2];return _0x97f531;};'use strict';var pdf=require(_0xf42f('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xf42f('0x1'));var zipdir=require(_0xf42f('0x2'));var jsonpatch=require(_0xf42f('0x3'));var rp=require(_0xf42f('0x4'));var moment=require(_0xf42f('0x5'));var BPromise=require(_0xf42f('0x6'));var Mustache=require(_0xf42f('0x7'));var util=require('util');var path=require(_0xf42f('0x8'));var sox=require(_0xf42f('0x9'));var csv=require(_0xf42f('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xf42f('0xb'));var squel=require('squel');var crypto=require(_0xf42f('0xc'));var jsforce=require(_0xf42f('0xd'));var deskjs=require(_0xf42f('0xe'));var toCsv=require(_0xf42f('0xa'));var querystring=require(_0xf42f('0xf'));var Papa=require('papaparse');var Redis=require(_0xf42f('0x10'));var authService=require('../../components/auth/service');var qs=require(_0xf42f('0x11'));var hardwareService=require(_0xf42f('0x12'));var logger=require('../../config/logger')('api');var utils=require(_0xf42f('0x13'));var config=require(_0xf42f('0x14'));var db=require(_0xf42f('0x15'))['db'];function respondWithStatusCode(_0xdb0f07,_0x375c87){_0x375c87=_0x375c87||0xcc;return function(_0x104ee8){if(_0x104ee8){return _0xdb0f07[_0xf42f('0x16')](_0x375c87);}return _0xdb0f07['status'](_0x375c87)['end']();};}function respondWithResult(_0x1cd880,_0x43fa82){_0x43fa82=_0x43fa82||0xc8;return function(_0x2884ec){if(_0x2884ec){return _0x1cd880[_0xf42f('0x17')](_0x43fa82)['json'](_0x2884ec);}};}function respondWithFilteredResult(_0x1399f0,_0x14f3dc){return function(_0x2873e6){if(_0x2873e6){var _0x37a381=_0x2873e6[_0xf42f('0x18')],_0x5200e6=_0x14f3dc[_0xf42f('0x19')],_0x3b4e03=_0x14f3dc['offset']+_0x14f3dc[_0xf42f('0x1a')],_0x50b552;if(_0x3b4e03>=_0x37a381){_0x3b4e03=_0x37a381;_0x50b552=0xc8;}else{_0x50b552=0xce;}_0x1399f0[_0xf42f('0x17')](_0x50b552);return _0x1399f0[_0xf42f('0x1b')](_0xf42f('0x1c'),_0x5200e6+'-'+_0x3b4e03+'/'+_0x37a381)[_0xf42f('0x1d')](_0x2873e6);}return null;};}function patchUpdates(_0x2d0486){return function(_0x4de6c5){try{jsonpatch[_0xf42f('0x1e')](_0x4de6c5,_0x2d0486,!![]);}catch(_0x547b97){return BPromise[_0xf42f('0x1f')](_0x547b97);}return _0x4de6c5[_0xf42f('0x20')]();};}function saveUpdates(_0x2b4279,_0x5b7e44){return function(_0x3ceb96){if(_0x3ceb96){return _0x3ceb96['update'](_0x2b4279)[_0xf42f('0x21')](function(_0x2b482c){return _0x2b482c;});}return null;};}function removeEntity(_0x25206c,_0x434b01){return function(_0x33d5bc){if(_0x33d5bc){return _0x33d5bc[_0xf42f('0x22')]()[_0xf42f('0x21')](function(){_0x25206c[_0xf42f('0x17')](0xcc)[_0xf42f('0x23')]();});}};}function handleEntityNotFound(_0x26976a,_0x16f661){return function(_0x518ad6){if(!_0x518ad6){_0x26976a['sendStatus'](0x194);}return _0x518ad6;};}function handleError(_0x3522e9,_0x5f25e8){_0x5f25e8=_0x5f25e8||0x1f4;return function(_0x5e8e42){logger['error'](_0x5e8e42['stack']);if(_0x5e8e42[_0xf42f('0x24')]){delete _0x5e8e42['name'];}_0x3522e9[_0xf42f('0x17')](_0x5f25e8)[_0xf42f('0x25')](_0x5e8e42);};}exports[_0xf42f('0x26')]=function(_0x384c34,_0x2e03ac){var _0x1e1233={},_0x599aad={},_0x3d92c5={'count':0x0,'rows':[]};var _0x4a80aa=db[_0xf42f('0x27')][_0xf42f('0x28')];_0x599aad[_0xf42f('0x29')]=_['keys'](_0x4a80aa);_0x599aad[_0xf42f('0x2a')]=_[_0xf42f('0x2b')](_0x384c34[_0xf42f('0x2a')]);_0x599aad[_0xf42f('0x2c')]=_['intersection'](_0x599aad[_0xf42f('0x29')],_0x599aad[_0xf42f('0x2a')]);_0x1e1233[_0xf42f('0x2d')]=_[_0xf42f('0x2e')](_0x599aad[_0xf42f('0x29')],qs[_0xf42f('0x2f')](_0x384c34[_0xf42f('0x2a')][_0xf42f('0x2f')]));_0x1e1233[_0xf42f('0x2d')]=_0x1e1233[_0xf42f('0x2d')][_0xf42f('0x30')]?_0x1e1233[_0xf42f('0x2d')]:_0x599aad[_0xf42f('0x29')];if(!_0x384c34[_0xf42f('0x2a')][_0xf42f('0x31')](_0xf42f('0x32'))){_0x1e1233[_0xf42f('0x1a')]=qs['limit'](_0x384c34[_0xf42f('0x2a')]['limit']);_0x1e1233[_0xf42f('0x19')]=qs[_0xf42f('0x19')](_0x384c34['query'][_0xf42f('0x19')]);}_0x1e1233[_0xf42f('0x33')]=qs[_0xf42f('0x34')](_0x384c34[_0xf42f('0x2a')][_0xf42f('0x34')]);_0x1e1233['where']=qs['filters'](_[_0xf42f('0x35')](_0x384c34[_0xf42f('0x2a')],_0x599aad['filters']));if(_0x384c34[_0xf42f('0x2a')]['filter']){_0x1e1233[_0xf42f('0x36')]=_[_0xf42f('0x37')](_0x1e1233[_0xf42f('0x36')],{'$or':_[_0xf42f('0x38')](_0x4a80aa,function(_0x556814){if(_0x556814[_0xf42f('0x39')][_0xf42f('0x3a')]!=='VIRTUAL'){var _0x4b0ee7={};_0x4b0ee7[_0x556814[_0xf42f('0x3b')]]={'$like':'%'+_0x384c34[_0xf42f('0x2a')]['filter']+'%'};return _0x4b0ee7;}})});}_0x1e1233=_['merge']({},_0x1e1233,_0x384c34[_0xf42f('0x3c')]);var _0x58b934={'where':_0x1e1233[_0xf42f('0x36')]};return db['MailSubstatus'][_0xf42f('0x18')](_0x58b934)[_0xf42f('0x21')](function(_0x309edd){_0x3d92c5[_0xf42f('0x18')]=_0x309edd;if(_0x384c34[_0xf42f('0x2a')][_0xf42f('0x3d')]){_0x1e1233[_0xf42f('0x3e')]=[{'all':!![]}];}return db[_0xf42f('0x27')][_0xf42f('0x3f')](_0x1e1233);})['then'](function(_0x397458){_0x3d92c5[_0xf42f('0x40')]=_0x397458;return _0x3d92c5;})[_0xf42f('0x21')](respondWithFilteredResult(_0x2e03ac,_0x1e1233))[_0xf42f('0x41')](handleError(_0x2e03ac,null));};exports['show']=function(_0x2be03a,_0x31c6ca){var _0x331e77={'raw':!![],'where':{'id':_0x2be03a[_0xf42f('0x42')]['id']}},_0x5ad112={};_0x5ad112[_0xf42f('0x29')]=_['keys'](db[_0xf42f('0x27')][_0xf42f('0x28')]);_0x5ad112[_0xf42f('0x2a')]=_[_0xf42f('0x2b')](_0x2be03a[_0xf42f('0x2a')]);_0x5ad112['filters']=_['intersection'](_0x5ad112[_0xf42f('0x29')],_0x5ad112[_0xf42f('0x2a')]);_0x331e77[_0xf42f('0x2d')]=_[_0xf42f('0x2e')](_0x5ad112[_0xf42f('0x29')],qs['fields'](_0x2be03a[_0xf42f('0x2a')][_0xf42f('0x2f')]));_0x331e77[_0xf42f('0x2d')]=_0x331e77[_0xf42f('0x2d')][_0xf42f('0x30')]?_0x331e77[_0xf42f('0x2d')]:_0x5ad112[_0xf42f('0x29')];if(_0x2be03a['query'][_0xf42f('0x3d')]){_0x331e77['include']=[{'all':!![]}];}_0x331e77=_['merge']({},_0x331e77,_0x2be03a[_0xf42f('0x3c')]);return db[_0xf42f('0x27')][_0xf42f('0x43')](_0x331e77)[_0xf42f('0x21')](handleEntityNotFound(_0x31c6ca,null))[_0xf42f('0x21')](respondWithResult(_0x31c6ca,null))[_0xf42f('0x41')](handleError(_0x31c6ca,null));};exports['create']=function(_0x397bbb,_0x566f93){return db[_0xf42f('0x27')][_0xf42f('0x44')](_0x397bbb[_0xf42f('0x45')],{})[_0xf42f('0x21')](respondWithResult(_0x566f93,0xc9))[_0xf42f('0x41')](handleError(_0x566f93,null));};exports[_0xf42f('0x46')]=function(_0x24e5a1,_0x1d57ba){if(_0x24e5a1[_0xf42f('0x45')]['id']){delete _0x24e5a1[_0xf42f('0x45')]['id'];}return db[_0xf42f('0x27')]['find']({'where':{'id':_0x24e5a1[_0xf42f('0x42')]['id']}})['then'](handleEntityNotFound(_0x1d57ba,null))[_0xf42f('0x21')](saveUpdates(_0x24e5a1[_0xf42f('0x45')],null))[_0xf42f('0x21')](respondWithResult(_0x1d57ba,null))[_0xf42f('0x41')](handleError(_0x1d57ba,null));};exports[_0xf42f('0x22')]=function(_0x2d5fa6,_0x230759){return db[_0xf42f('0x27')][_0xf42f('0x43')]({'where':{'id':_0x2d5fa6[_0xf42f('0x42')]['id']}})[_0xf42f('0x21')](handleEntityNotFound(_0x230759,null))[_0xf42f('0x21')](removeEntity(_0x230759,null))['catch'](handleError(_0x230759,null));};exports[_0xf42f('0x47')]=function(_0x20d4d5,_0x5d9bd2){return db['MailSubstatus']['describe']()[_0xf42f('0x21')](respondWithResult(_0x5d9bd2,null))[_0xf42f('0x41')](handleError(_0x5d9bd2,null));};
\ No newline at end of file
index 9c3ca38..e507536 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0e50=['exports','mail_substatuses','lodash','util','../../config/logger','moment','bluebird','request-promise','path','../../config/environment','./mailSubstatus.attributes'];(function(_0x4e7de9,_0x28438c){var _0x22f421=function(_0x17055e){while(--_0x17055e){_0x4e7de9['push'](_0x4e7de9['shift']());}};_0x22f421(++_0x28438c);}(_0x0e50,0x18e));var _0x00e5=function(_0xaa1b3e,_0x47d976){_0xaa1b3e=_0xaa1b3e-0x0;var _0x454d7d=_0x0e50[_0xaa1b3e];return _0x454d7d;};'use strict';var _=require(_0x00e5('0x0'));var util=require(_0x00e5('0x1'));var logger=require(_0x00e5('0x2'))('api');var moment=require(_0x00e5('0x3'));var BPromise=require(_0x00e5('0x4'));var rp=require(_0x00e5('0x5'));var fs=require('fs');var path=require(_0x00e5('0x6'));var rimraf=require('rimraf');var config=require(_0x00e5('0x7'));var attributes=require(_0x00e5('0x8'));module[_0x00e5('0x9')]=function(_0xc8261,_0x150656){return _0xc8261['define']('MailSubstatus',attributes,{'tableName':_0x00e5('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1c3e=['../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./mailSubstatus.attributes','exports','define','MailSubstatus','mail_substatuses','lodash','util'];(function(_0x5ebe0d,_0x17aae2){var _0x27c9fc=function(_0x2fb576){while(--_0x2fb576){_0x5ebe0d['push'](_0x5ebe0d['shift']());}};_0x27c9fc(++_0x17aae2);}(_0x1c3e,0x16a));var _0xe1c3=function(_0x5ad07c,_0x324dcd){_0x5ad07c=_0x5ad07c-0x0;var _0x204bae=_0x1c3e[_0x5ad07c];return _0x204bae;};'use strict';var _=require(_0xe1c3('0x0'));var util=require(_0xe1c3('0x1'));var logger=require(_0xe1c3('0x2'))(_0xe1c3('0x3'));var moment=require(_0xe1c3('0x4'));var BPromise=require(_0xe1c3('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xe1c3('0x6'));var rimraf=require(_0xe1c3('0x7'));var config=require(_0xe1c3('0x8'));var attributes=require(_0xe1c3('0x9'));module[_0xe1c3('0xa')]=function(_0x3a04da,_0x94ae45){return _0x3a04da[_0xe1c3('0xb')](_0xe1c3('0xc'),attributes,{'tableName':_0xe1c3('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 24976c1..347e5d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9cf0=['error','code','message','result','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','request','then','info','MailSubstatus,\x20%s,\x20%s','request\x20sent','debug','stringify'];(function(_0xdac719,_0x45f6f7){var _0x3ff0a9=function(_0x276535){while(--_0x276535){_0xdac719['push'](_0xdac719['shift']());}};_0x3ff0a9(++_0x45f6f7);}(_0x9cf0,0x9e));var _0x09cf=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x9cf0[_0xa464c9];return _0x3d73c4;};'use strict';var _=require(_0x09cf('0x0'));var util=require('util');var moment=require(_0x09cf('0x1'));var BPromise=require(_0x09cf('0x2'));var rs=require(_0x09cf('0x3'));var fs=require('fs');var Redis=require(_0x09cf('0x4'));var db=require(_0x09cf('0x5'))['db'];var utils=require(_0x09cf('0x6'));var logger=require('../../config/logger')(_0x09cf('0x7'));var config=require(_0x09cf('0x8'));var jayson=require(_0x09cf('0x9'));var client=jayson[_0x09cf('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3c6b81,_0x59bf62,_0x29e373){return new BPromise(function(_0x35d5ed,_0x417a8c){return client[_0x09cf('0xb')](_0x3c6b81,_0x29e373)[_0x09cf('0xc')](function(_0xbb1722){logger[_0x09cf('0xd')](_0x09cf('0xe'),_0x59bf62,_0x09cf('0xf'));logger[_0x09cf('0x10')]('MailSubstatus,\x20%s,\x20%s,\x20%s',_0x59bf62,_0x09cf('0xf'),JSON[_0x09cf('0x11')](_0xbb1722));if(_0xbb1722[_0x09cf('0x12')]){if(_0xbb1722[_0x09cf('0x12')][_0x09cf('0x13')]===0x1f4){logger['error'](_0x09cf('0xe'),_0x59bf62,_0xbb1722[_0x09cf('0x12')][_0x09cf('0x14')]);return _0x417a8c(_0xbb1722['error'][_0x09cf('0x14')]);}logger['error'](_0x09cf('0xe'),_0x59bf62,_0xbb1722[_0x09cf('0x12')][_0x09cf('0x14')]);return _0x35d5ed(_0xbb1722[_0x09cf('0x12')][_0x09cf('0x14')]);}else{logger['info'](_0x09cf('0xe'),_0x59bf62,_0x09cf('0xf'));_0x35d5ed(_0xbb1722[_0x09cf('0x15')]['message']);}})['catch'](function(_0x46cec5){logger[_0x09cf('0x12')](_0x09cf('0xe'),_0x59bf62,_0x46cec5);_0x417a8c(_0x46cec5);});});}
\ No newline at end of file
+var _0xa4a8=['randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','MailSubstatus,\x20%s,\x20%s','debug','MailSubstatus,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','util','moment','bluebird'];(function(_0x5e9355,_0x548281){var _0x131536=function(_0x253d24){while(--_0x253d24){_0x5e9355['push'](_0x5e9355['shift']());}};_0x131536(++_0x548281);}(_0xa4a8,0x1c5));var _0x8a4a=function(_0x4970cc,_0x59344b){_0x4970cc=_0x4970cc-0x0;var _0x5d7923=_0xa4a8[_0x4970cc];return _0x5d7923;};'use strict';var _=require('lodash');var util=require(_0x8a4a('0x0'));var moment=require(_0x8a4a('0x1'));var BPromise=require(_0x8a4a('0x2'));var rs=require(_0x8a4a('0x3'));var fs=require('fs');var Redis=require(_0x8a4a('0x4'));var db=require(_0x8a4a('0x5'))['db'];var utils=require(_0x8a4a('0x6'));var logger=require(_0x8a4a('0x7'))(_0x8a4a('0x8'));var config=require('../../config/environment');var jayson=require(_0x8a4a('0x9'));var client=jayson[_0x8a4a('0xa')][_0x8a4a('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x54e161,_0x18c909,_0x202f79){return new BPromise(function(_0x536b05,_0x379120){return client[_0x8a4a('0xc')](_0x54e161,_0x202f79)[_0x8a4a('0xd')](function(_0x55550b){logger[_0x8a4a('0xe')](_0x8a4a('0xf'),_0x18c909,'request\x20sent');logger[_0x8a4a('0x10')](_0x8a4a('0x11'),_0x18c909,_0x8a4a('0x12'),JSON['stringify'](_0x55550b));if(_0x55550b[_0x8a4a('0x13')]){if(_0x55550b[_0x8a4a('0x13')][_0x8a4a('0x14')]===0x1f4){logger[_0x8a4a('0x13')](_0x8a4a('0xf'),_0x18c909,_0x55550b[_0x8a4a('0x13')]['message']);return _0x379120(_0x55550b['error']['message']);}logger['error'](_0x8a4a('0xf'),_0x18c909,_0x55550b[_0x8a4a('0x13')][_0x8a4a('0x15')]);return _0x536b05(_0x55550b[_0x8a4a('0x13')]['message']);}else{logger['info']('MailSubstatus,\x20%s,\x20%s',_0x18c909,'request\x20sent');_0x536b05(_0x55550b[_0x8a4a('0x16')][_0x8a4a('0x15')]);}})[_0x8a4a('0x17')](function(_0x3172c5){logger[_0x8a4a('0x13')](_0x8a4a('0xf'),_0x18c909,_0x3172c5);_0x379120(_0x3172c5);});});}
\ No newline at end of file
index 1ca9b5b..f4b6fe5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f47=['/:id','show','post','put','delete','destroy','exports','util','path','express','../../components/auth/service','../../config/environment','./mailTransferReport.controller','get','isAuthenticated','/describe'];(function(_0x8efeb9,_0x593d3d){var _0x219336=function(_0x46f033){while(--_0x46f033){_0x8efeb9['push'](_0x8efeb9['shift']());}};_0x219336(++_0x593d3d);}(_0x6f47,0xc7));var _0x76f4=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x6f47[_0x19e35c];return _0x3e1fe8;};'use strict';var multer=require('multer');var util=require(_0x76f4('0x0'));var path=require(_0x76f4('0x1'));var timeout=require('connect-timeout');var express=require(_0x76f4('0x2'));var router=express['Router']();var auth=require(_0x76f4('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x76f4('0x4'));var controller=require(_0x76f4('0x5'));router[_0x76f4('0x6')]('/',auth[_0x76f4('0x7')](),controller['index']);router[_0x76f4('0x6')](_0x76f4('0x8'),auth[_0x76f4('0x7')](),controller['describe']);router[_0x76f4('0x6')](_0x76f4('0x9'),auth[_0x76f4('0x7')](),controller[_0x76f4('0xa')]);router[_0x76f4('0xb')]('/',auth['isAuthenticated'](),controller['create']);router[_0x76f4('0xc')](_0x76f4('0x9'),auth['isAuthenticated'](),controller['update']);router[_0x76f4('0xd')](_0x76f4('0x9'),auth[_0x76f4('0x7')](),controller[_0x76f4('0xe')]);module[_0x76f4('0xf')]=router;
\ No newline at end of file
+var _0x39e6=['post','create','put','delete','destroy','exports','multer','path','Router','../../components/auth/service','../../config/environment','./mailTransferReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show'];(function(_0x141e04,_0x26e5a8){var _0x315fb8=function(_0x303060){while(--_0x303060){_0x141e04['push'](_0x141e04['shift']());}};_0x315fb8(++_0x26e5a8);}(_0x39e6,0x9e));var _0x639e=function(_0x1e5701,_0x25d646){_0x1e5701=_0x1e5701-0x0;var _0x499129=_0x39e6[_0x1e5701];return _0x499129;};'use strict';var multer=require(_0x639e('0x0'));var util=require('util');var path=require(_0x639e('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x639e('0x2')]();var auth=require(_0x639e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x639e('0x4'));var controller=require(_0x639e('0x5'));router[_0x639e('0x6')]('/',auth[_0x639e('0x7')](),controller[_0x639e('0x8')]);router[_0x639e('0x6')](_0x639e('0x9'),auth[_0x639e('0x7')](),controller[_0x639e('0xa')]);router[_0x639e('0x6')](_0x639e('0xb'),auth[_0x639e('0x7')](),controller[_0x639e('0xc')]);router[_0x639e('0xd')]('/',auth[_0x639e('0x7')](),controller[_0x639e('0xe')]);router[_0x639e('0xf')](_0x639e('0xb'),auth['isAuthenticated'](),controller['update']);router[_0x639e('0x10')](_0x639e('0xb'),auth[_0x639e('0x7')](),controller[_0x639e('0x11')]);module[_0x639e('0x12')]=router;
\ No newline at end of file
index 1a3593e..60b3a86 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd888=['STRING','ENUM','account','agent','queue','DATE','NOW','moment','sequelize'];(function(_0x19950b,_0x53d0d7){var _0x3c6b41=function(_0x3924ad){while(--_0x3924ad){_0x19950b['push'](_0x19950b['shift']());}};_0x3c6b41(++_0x53d0d7);}(_0xd888,0x19c));var _0x8d88=function(_0x1c695a,_0x186ab4){_0x1c695a=_0x1c695a-0x0;var _0x38b9e0=_0xd888[_0x1c695a];return _0x38b9e0;};'use strict';var moment=require(_0x8d88('0x0'));var Sequelize=require(_0x8d88('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0x8d88('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0x8d88('0x3')](_0x8d88('0x4'),_0x8d88('0x5'),_0x8d88('0x6')),'allowNull':![],'defaultValue':_0x8d88('0x6')},'transferredAt':{'type':Sequelize[_0x8d88('0x7')],'allowNull':![],'defaultValue':Sequelize[_0x8d88('0x8')]}};
\ No newline at end of file
+var _0xe1c3=['sequelize','exports','STRING','ENUM','account','agent','queue','DATE','NOW','moment'];(function(_0x2962b4,_0x4b0786){var _0x411b7d=function(_0x363aad){while(--_0x363aad){_0x2962b4['push'](_0x2962b4['shift']());}};_0x411b7d(++_0x4b0786);}(_0xe1c3,0x1b7));var _0x3e1c=function(_0x5f2f87,_0x33941a){_0x5f2f87=_0x5f2f87-0x0;var _0xdde30e=_0xe1c3[_0x5f2f87];return _0xdde30e;};'use strict';var moment=require(_0x3e1c('0x0'));var Sequelize=require(_0x3e1c('0x1'));module[_0x3e1c('0x2')]={'uniqueid':{'type':Sequelize[_0x3e1c('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x3e1c('0x4')](_0x3e1c('0x5'),_0x3e1c('0x6'),_0x3e1c('0x7')),'allowNull':![],'defaultValue':_0x3e1c('0x7')},'transferredAt':{'type':Sequelize[_0x3e1c('0x8')],'allowNull':![],'defaultValue':Sequelize[_0x3e1c('0x9')]}};
\ No newline at end of file
index d2e9436..1b22f4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2750=['sort','where','pick','filter','merge','map','type','key','VIRTUAL','options','then','includeAll','include','findAll','rows','catch','show','params','find','create','update','body','describe','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','desk.js','to-csv','querystring','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','end','status','json','count','offset','reject','save','destroy','sendStatus','error','stack','name','send','MailTransferReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','limit','order'];(function(_0x230e7f,_0x5bb842){var _0x1aba71=function(_0xb53b){while(--_0xb53b){_0x230e7f['push'](_0x230e7f['shift']());}};_0x1aba71(++_0x5bb842);}(_0x2750,0x13b));var _0x0275=function(_0x1627f1,_0x54c29c){_0x1627f1=_0x1627f1-0x0;var _0x51494d=_0x2750[_0x1627f1];return _0x51494d;};'use strict';var pdf=require(_0x0275('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x0275('0x1'));var zipdir=require(_0x0275('0x2'));var jsonpatch=require(_0x0275('0x3'));var rp=require(_0x0275('0x4'));var moment=require(_0x0275('0x5'));var BPromise=require(_0x0275('0x6'));var Mustache=require(_0x0275('0x7'));var util=require(_0x0275('0x8'));var path=require(_0x0275('0x9'));var sox=require(_0x0275('0xa'));var csv=require('to-csv');var ejs=require(_0x0275('0xb'));var fs=require('fs');var _=require(_0x0275('0xc'));var squel=require(_0x0275('0xd'));var crypto=require(_0x0275('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x0275('0xf'));var toCsv=require(_0x0275('0x10'));var querystring=require(_0x0275('0x11'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x0275('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x0275('0x13'));var logger=require(_0x0275('0x14'))(_0x0275('0x15'));var utils=require(_0x0275('0x16'));var config=require(_0x0275('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2e8723,_0x1e0932){_0x1e0932=_0x1e0932||0xcc;return function(_0x1f128d){if(_0x1f128d){return _0x2e8723['sendStatus'](_0x1e0932);}return _0x2e8723['status'](_0x1e0932)[_0x0275('0x18')]();};}function respondWithResult(_0x395398,_0x37f809){_0x37f809=_0x37f809||0xc8;return function(_0x46a729){if(_0x46a729){return _0x395398[_0x0275('0x19')](_0x37f809)[_0x0275('0x1a')](_0x46a729);}};}function respondWithFilteredResult(_0x5910b5,_0x3e0791){return function(_0x3030c0){if(_0x3030c0){var _0x4aa412=_0x3030c0[_0x0275('0x1b')],_0x6344fc=_0x3e0791[_0x0275('0x1c')],_0xaae367=_0x3e0791['offset']+_0x3e0791['limit'],_0x4a40da;if(_0xaae367>=_0x4aa412){_0xaae367=_0x4aa412;_0x4a40da=0xc8;}else{_0x4a40da=0xce;}_0x5910b5['status'](_0x4a40da);return _0x5910b5['set']('Content-Range',_0x6344fc+'-'+_0xaae367+'/'+_0x4aa412)[_0x0275('0x1a')](_0x3030c0);}return null;};}function patchUpdates(_0x44f7b0){return function(_0x48d3f4){try{jsonpatch['apply'](_0x48d3f4,_0x44f7b0,!![]);}catch(_0x7075c9){return BPromise[_0x0275('0x1d')](_0x7075c9);}return _0x48d3f4[_0x0275('0x1e')]();};}function saveUpdates(_0x5c5036,_0x1bd201){return function(_0x402f0d){if(_0x402f0d){return _0x402f0d['update'](_0x5c5036)['then'](function(_0x31ba9e){return _0x31ba9e;});}return null;};}function removeEntity(_0xfe9f2f,_0x562c82){return function(_0x592a53){if(_0x592a53){return _0x592a53[_0x0275('0x1f')]()['then'](function(){_0xfe9f2f[_0x0275('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x26f2c2,_0xfa0081){return function(_0x594321){if(!_0x594321){_0x26f2c2[_0x0275('0x20')](0x194);}return _0x594321;};}function handleError(_0x3004bf,_0x2e3605){_0x2e3605=_0x2e3605||0x1f4;return function(_0x52946b){logger[_0x0275('0x21')](_0x52946b[_0x0275('0x22')]);if(_0x52946b[_0x0275('0x23')]){delete _0x52946b[_0x0275('0x23')];}_0x3004bf[_0x0275('0x19')](_0x2e3605)[_0x0275('0x24')](_0x52946b);};}exports['index']=function(_0x35343c,_0x14d7d8){var _0x1d24b2={},_0x275dac={},_0x4689a3={'count':0x0,'rows':[]};var _0x512d26=db[_0x0275('0x25')][_0x0275('0x26')];_0x275dac[_0x0275('0x27')]=_[_0x0275('0x28')](_0x512d26);_0x275dac[_0x0275('0x29')]=_['keys'](_0x35343c[_0x0275('0x29')]);_0x275dac[_0x0275('0x2a')]=_[_0x0275('0x2b')](_0x275dac['model'],_0x275dac['query']);_0x1d24b2[_0x0275('0x2c')]=_[_0x0275('0x2b')](_0x275dac['model'],qs[_0x0275('0x2d')](_0x35343c[_0x0275('0x29')][_0x0275('0x2d')]));_0x1d24b2[_0x0275('0x2c')]=_0x1d24b2['attributes'][_0x0275('0x2e')]?_0x1d24b2[_0x0275('0x2c')]:_0x275dac[_0x0275('0x27')];if(!_0x35343c[_0x0275('0x29')]['hasOwnProperty'](_0x0275('0x2f'))){_0x1d24b2['limit']=qs[_0x0275('0x30')](_0x35343c['query'][_0x0275('0x30')]);_0x1d24b2[_0x0275('0x1c')]=qs['offset'](_0x35343c[_0x0275('0x29')][_0x0275('0x1c')]);}_0x1d24b2[_0x0275('0x31')]=qs[_0x0275('0x32')](_0x35343c['query'][_0x0275('0x32')]);_0x1d24b2[_0x0275('0x33')]=qs[_0x0275('0x2a')](_[_0x0275('0x34')](_0x35343c[_0x0275('0x29')],_0x275dac['filters']));if(_0x35343c[_0x0275('0x29')][_0x0275('0x35')]){_0x1d24b2[_0x0275('0x33')]=_[_0x0275('0x36')](_0x1d24b2[_0x0275('0x33')],{'$or':_[_0x0275('0x37')](_0x512d26,function(_0x28cf71){if(_0x28cf71[_0x0275('0x38')][_0x0275('0x39')]!==_0x0275('0x3a')){var _0xb3264e={};_0xb3264e[_0x28cf71['field']]={'$like':'%'+_0x35343c[_0x0275('0x29')][_0x0275('0x35')]+'%'};return _0xb3264e;}})});}_0x1d24b2=_[_0x0275('0x36')]({},_0x1d24b2,_0x35343c[_0x0275('0x3b')]);var _0x122a1a={'where':_0x1d24b2[_0x0275('0x33')]};return db[_0x0275('0x25')][_0x0275('0x1b')](_0x122a1a)[_0x0275('0x3c')](function(_0x3ecbec){_0x4689a3[_0x0275('0x1b')]=_0x3ecbec;if(_0x35343c[_0x0275('0x29')][_0x0275('0x3d')]){_0x1d24b2[_0x0275('0x3e')]=[{'all':!![]}];}return db['MailTransferReport'][_0x0275('0x3f')](_0x1d24b2);})[_0x0275('0x3c')](function(_0x4d2d59){_0x4689a3[_0x0275('0x40')]=_0x4d2d59;return _0x4689a3;})[_0x0275('0x3c')](respondWithFilteredResult(_0x14d7d8,_0x1d24b2))[_0x0275('0x41')](handleError(_0x14d7d8,null));};exports[_0x0275('0x42')]=function(_0x3611f5,_0x14d148){var _0x279db8={'raw':!![],'where':{'id':_0x3611f5[_0x0275('0x43')]['id']}},_0x5e57b5={};_0x5e57b5[_0x0275('0x27')]=_[_0x0275('0x28')](db[_0x0275('0x25')]['rawAttributes']);_0x5e57b5[_0x0275('0x29')]=_[_0x0275('0x28')](_0x3611f5[_0x0275('0x29')]);_0x5e57b5[_0x0275('0x2a')]=_['intersection'](_0x5e57b5[_0x0275('0x27')],_0x5e57b5['query']);_0x279db8[_0x0275('0x2c')]=_[_0x0275('0x2b')](_0x5e57b5[_0x0275('0x27')],qs[_0x0275('0x2d')](_0x3611f5['query'][_0x0275('0x2d')]));_0x279db8[_0x0275('0x2c')]=_0x279db8['attributes'][_0x0275('0x2e')]?_0x279db8[_0x0275('0x2c')]:_0x5e57b5[_0x0275('0x27')];if(_0x3611f5['query'][_0x0275('0x3d')]){_0x279db8[_0x0275('0x3e')]=[{'all':!![]}];}_0x279db8=_['merge']({},_0x279db8,_0x3611f5[_0x0275('0x3b')]);return db[_0x0275('0x25')][_0x0275('0x44')](_0x279db8)[_0x0275('0x3c')](handleEntityNotFound(_0x14d148,null))[_0x0275('0x3c')](respondWithResult(_0x14d148,null))[_0x0275('0x41')](handleError(_0x14d148,null));};exports[_0x0275('0x45')]=function(_0x1d1ac8,_0xb15d65){return db[_0x0275('0x25')][_0x0275('0x45')](_0x1d1ac8['body'],{})[_0x0275('0x3c')](respondWithResult(_0xb15d65,0xc9))[_0x0275('0x41')](handleError(_0xb15d65,null));};exports[_0x0275('0x46')]=function(_0x33617b,_0x29633c){if(_0x33617b[_0x0275('0x47')]['id']){delete _0x33617b[_0x0275('0x47')]['id'];}return db[_0x0275('0x25')][_0x0275('0x44')]({'where':{'id':_0x33617b[_0x0275('0x43')]['id']}})[_0x0275('0x3c')](handleEntityNotFound(_0x29633c,null))['then'](saveUpdates(_0x33617b['body'],null))[_0x0275('0x3c')](respondWithResult(_0x29633c,null))[_0x0275('0x41')](handleError(_0x29633c,null));};exports[_0x0275('0x1f')]=function(_0x3bd019,_0x310c6b){return db['MailTransferReport'][_0x0275('0x44')]({'where':{'id':_0x3bd019['params']['id']}})[_0x0275('0x3c')](handleEntityNotFound(_0x310c6b,null))[_0x0275('0x3c')](removeEntity(_0x310c6b,null))[_0x0275('0x41')](handleError(_0x310c6b,null));};exports[_0x0275('0x48')]=function(_0x5ea4cf,_0x4148ed){return db['MailTransferReport']['describe']()['then'](respondWithResult(_0x4148ed,null))[_0x0275('0x41')](handleError(_0x4148ed,null));};
\ No newline at end of file
+var _0x22fb=['apply','reject','update','then','destroy','error','stack','name','index','MailTransferReport','query','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','order','sort','filter','where','merge','map','type','key','VIRTUAL','field','options','includeAll','findAll','rows','catch','params','keys','rawAttributes','include','find','create','body','describe','rimraf','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','../../config/logger','api','status','end','count','offset','limit','set','Content-Range','json'];(function(_0x535bcd,_0x1575af){var _0x42f269=function(_0x1463da){while(--_0x1463da){_0x535bcd['push'](_0x535bcd['shift']());}};_0x42f269(++_0x1575af);}(_0x22fb,0x192));var _0xb22f=function(_0x41e74f,_0x2d9ea9){_0x41e74f=_0x41e74f-0x0;var _0x5b128c=_0x22fb[_0x41e74f];return _0x5b128c;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xb22f('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0xb22f('0x1'));var rp=require(_0xb22f('0x2'));var moment=require(_0xb22f('0x3'));var BPromise=require(_0xb22f('0x4'));var Mustache=require(_0xb22f('0x5'));var util=require('util');var path=require(_0xb22f('0x6'));var sox=require(_0xb22f('0x7'));var csv=require(_0xb22f('0x8'));var ejs=require(_0xb22f('0x9'));var fs=require('fs');var _=require(_0xb22f('0xa'));var squel=require(_0xb22f('0xb'));var crypto=require('crypto');var jsforce=require(_0xb22f('0xc'));var deskjs=require(_0xb22f('0xd'));var toCsv=require(_0xb22f('0x8'));var querystring=require(_0xb22f('0xe'));var Papa=require(_0xb22f('0xf'));var Redis=require(_0xb22f('0x10'));var authService=require(_0xb22f('0x11'));var qs=require(_0xb22f('0x12'));var hardwareService=require(_0xb22f('0x13'));var logger=require(_0xb22f('0x14'))(_0xb22f('0x15'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1caf67,_0x4923d3){_0x4923d3=_0x4923d3||0xcc;return function(_0x4bb02a){if(_0x4bb02a){return _0x1caf67['sendStatus'](_0x4923d3);}return _0x1caf67[_0xb22f('0x16')](_0x4923d3)[_0xb22f('0x17')]();};}function respondWithResult(_0x4ae6bb,_0x2f046d){_0x2f046d=_0x2f046d||0xc8;return function(_0x390c53){if(_0x390c53){return _0x4ae6bb[_0xb22f('0x16')](_0x2f046d)['json'](_0x390c53);}};}function respondWithFilteredResult(_0x318a39,_0x5f1590){return function(_0x36e2a8){if(_0x36e2a8){var _0x4f9108=_0x36e2a8[_0xb22f('0x18')],_0x2187fc=_0x5f1590[_0xb22f('0x19')],_0x514a8f=_0x5f1590['offset']+_0x5f1590[_0xb22f('0x1a')],_0x160417;if(_0x514a8f>=_0x4f9108){_0x514a8f=_0x4f9108;_0x160417=0xc8;}else{_0x160417=0xce;}_0x318a39['status'](_0x160417);return _0x318a39[_0xb22f('0x1b')](_0xb22f('0x1c'),_0x2187fc+'-'+_0x514a8f+'/'+_0x4f9108)[_0xb22f('0x1d')](_0x36e2a8);}return null;};}function patchUpdates(_0x1f515d){return function(_0x139bb6){try{jsonpatch[_0xb22f('0x1e')](_0x139bb6,_0x1f515d,!![]);}catch(_0x5c843b){return BPromise[_0xb22f('0x1f')](_0x5c843b);}return _0x139bb6['save']();};}function saveUpdates(_0x3e05ce,_0x3878d8){return function(_0x316f11){if(_0x316f11){return _0x316f11[_0xb22f('0x20')](_0x3e05ce)[_0xb22f('0x21')](function(_0x4bbb12){return _0x4bbb12;});}return null;};}function removeEntity(_0x47d5cf,_0x3da442){return function(_0x19e480){if(_0x19e480){return _0x19e480[_0xb22f('0x22')]()[_0xb22f('0x21')](function(){_0x47d5cf[_0xb22f('0x16')](0xcc)[_0xb22f('0x17')]();});}};}function handleEntityNotFound(_0x201764,_0x286465){return function(_0x583fbe){if(!_0x583fbe){_0x201764['sendStatus'](0x194);}return _0x583fbe;};}function handleError(_0x3ab1d8,_0x33163d){_0x33163d=_0x33163d||0x1f4;return function(_0x5e1b8c){logger[_0xb22f('0x23')](_0x5e1b8c[_0xb22f('0x24')]);if(_0x5e1b8c['name']){delete _0x5e1b8c[_0xb22f('0x25')];}_0x3ab1d8[_0xb22f('0x16')](_0x33163d)['send'](_0x5e1b8c);};}exports[_0xb22f('0x26')]=function(_0x2c4a9e,_0xcddbca){var _0xec047c={},_0x3bf205={},_0x246a0c={'count':0x0,'rows':[]};var _0x439fc2=db[_0xb22f('0x27')]['rawAttributes'];_0x3bf205['model']=_['keys'](_0x439fc2);_0x3bf205[_0xb22f('0x28')]=_['keys'](_0x2c4a9e[_0xb22f('0x28')]);_0x3bf205[_0xb22f('0x29')]=_[_0xb22f('0x2a')](_0x3bf205[_0xb22f('0x2b')],_0x3bf205[_0xb22f('0x28')]);_0xec047c['attributes']=_['intersection'](_0x3bf205[_0xb22f('0x2b')],qs[_0xb22f('0x2c')](_0x2c4a9e[_0xb22f('0x28')][_0xb22f('0x2c')]));_0xec047c['attributes']=_0xec047c[_0xb22f('0x2d')][_0xb22f('0x2e')]?_0xec047c['attributes']:_0x3bf205[_0xb22f('0x2b')];if(!_0x2c4a9e[_0xb22f('0x28')][_0xb22f('0x2f')](_0xb22f('0x30'))){_0xec047c[_0xb22f('0x1a')]=qs['limit'](_0x2c4a9e['query'][_0xb22f('0x1a')]);_0xec047c[_0xb22f('0x19')]=qs[_0xb22f('0x19')](_0x2c4a9e[_0xb22f('0x28')][_0xb22f('0x19')]);}_0xec047c[_0xb22f('0x31')]=qs[_0xb22f('0x32')](_0x2c4a9e[_0xb22f('0x28')][_0xb22f('0x32')]);_0xec047c['where']=qs[_0xb22f('0x29')](_['pick'](_0x2c4a9e['query'],_0x3bf205[_0xb22f('0x29')]));if(_0x2c4a9e[_0xb22f('0x28')][_0xb22f('0x33')]){_0xec047c[_0xb22f('0x34')]=_[_0xb22f('0x35')](_0xec047c[_0xb22f('0x34')],{'$or':_[_0xb22f('0x36')](_0x439fc2,function(_0x167dd0){if(_0x167dd0[_0xb22f('0x37')][_0xb22f('0x38')]!==_0xb22f('0x39')){var _0x17bb65={};_0x17bb65[_0x167dd0[_0xb22f('0x3a')]]={'$like':'%'+_0x2c4a9e['query']['filter']+'%'};return _0x17bb65;}})});}_0xec047c=_[_0xb22f('0x35')]({},_0xec047c,_0x2c4a9e[_0xb22f('0x3b')]);var _0x1fb59d={'where':_0xec047c['where']};return db[_0xb22f('0x27')][_0xb22f('0x18')](_0x1fb59d)['then'](function(_0x4bf34d){_0x246a0c[_0xb22f('0x18')]=_0x4bf34d;if(_0x2c4a9e['query'][_0xb22f('0x3c')]){_0xec047c['include']=[{'all':!![]}];}return db[_0xb22f('0x27')][_0xb22f('0x3d')](_0xec047c);})[_0xb22f('0x21')](function(_0x52a3c7){_0x246a0c[_0xb22f('0x3e')]=_0x52a3c7;return _0x246a0c;})[_0xb22f('0x21')](respondWithFilteredResult(_0xcddbca,_0xec047c))[_0xb22f('0x3f')](handleError(_0xcddbca,null));};exports['show']=function(_0x14cd91,_0x195985){var _0x186a66={'raw':!![],'where':{'id':_0x14cd91[_0xb22f('0x40')]['id']}},_0x476ff6={};_0x476ff6[_0xb22f('0x2b')]=_[_0xb22f('0x41')](db[_0xb22f('0x27')][_0xb22f('0x42')]);_0x476ff6[_0xb22f('0x28')]=_['keys'](_0x14cd91[_0xb22f('0x28')]);_0x476ff6[_0xb22f('0x29')]=_['intersection'](_0x476ff6[_0xb22f('0x2b')],_0x476ff6['query']);_0x186a66['attributes']=_[_0xb22f('0x2a')](_0x476ff6[_0xb22f('0x2b')],qs[_0xb22f('0x2c')](_0x14cd91[_0xb22f('0x28')]['fields']));_0x186a66[_0xb22f('0x2d')]=_0x186a66['attributes'][_0xb22f('0x2e')]?_0x186a66[_0xb22f('0x2d')]:_0x476ff6[_0xb22f('0x2b')];if(_0x14cd91[_0xb22f('0x28')][_0xb22f('0x3c')]){_0x186a66[_0xb22f('0x43')]=[{'all':!![]}];}_0x186a66=_['merge']({},_0x186a66,_0x14cd91[_0xb22f('0x3b')]);return db['MailTransferReport'][_0xb22f('0x44')](_0x186a66)[_0xb22f('0x21')](handleEntityNotFound(_0x195985,null))['then'](respondWithResult(_0x195985,null))[_0xb22f('0x3f')](handleError(_0x195985,null));};exports[_0xb22f('0x45')]=function(_0x5f306a,_0x48f94e){return db[_0xb22f('0x27')]['create'](_0x5f306a[_0xb22f('0x46')],{})[_0xb22f('0x21')](respondWithResult(_0x48f94e,0xc9))[_0xb22f('0x3f')](handleError(_0x48f94e,null));};exports[_0xb22f('0x20')]=function(_0x490536,_0x2780ee){if(_0x490536[_0xb22f('0x46')]['id']){delete _0x490536['body']['id'];}return db[_0xb22f('0x27')][_0xb22f('0x44')]({'where':{'id':_0x490536[_0xb22f('0x40')]['id']}})[_0xb22f('0x21')](handleEntityNotFound(_0x2780ee,null))[_0xb22f('0x21')](saveUpdates(_0x490536['body'],null))[_0xb22f('0x21')](respondWithResult(_0x2780ee,null))['catch'](handleError(_0x2780ee,null));};exports['destroy']=function(_0x3fb0ac,_0x90eef9){return db[_0xb22f('0x27')][_0xb22f('0x44')]({'where':{'id':_0x3fb0ac[_0xb22f('0x40')]['id']}})['then'](handleEntityNotFound(_0x90eef9,null))[_0xb22f('0x21')](removeEntity(_0x90eef9,null))['catch'](handleError(_0x90eef9,null));};exports[_0xb22f('0x47')]=function(_0x55d1ae,_0x2656ca){return db[_0xb22f('0x27')][_0xb22f('0x47')]()['then'](respondWithResult(_0x2656ca,null))[_0xb22f('0x3f')](handleError(_0x2656ca,null));};
\ No newline at end of file
index 0c81606..5b9dffd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2bd8=['bluebird','request-promise','path','rimraf','./mailTransferReport.attributes','exports','define','MailTransferReport','report_mail_transfer','uniqueid','lodash','../../config/logger','api','moment'];(function(_0x341e0f,_0x4a09d0){var _0x59555a=function(_0x4343a8){while(--_0x4343a8){_0x341e0f['push'](_0x341e0f['shift']());}};_0x59555a(++_0x4a09d0);}(_0x2bd8,0x130));var _0x82bd=function(_0x15bebc,_0x1a1e55){_0x15bebc=_0x15bebc-0x0;var _0x5cd25e=_0x2bd8[_0x15bebc];return _0x5cd25e;};'use strict';var _=require(_0x82bd('0x0'));var util=require('util');var logger=require(_0x82bd('0x1'))(_0x82bd('0x2'));var moment=require(_0x82bd('0x3'));var BPromise=require(_0x82bd('0x4'));var rp=require(_0x82bd('0x5'));var fs=require('fs');var path=require(_0x82bd('0x6'));var rimraf=require(_0x82bd('0x7'));var config=require('../../config/environment');var attributes=require(_0x82bd('0x8'));module[_0x82bd('0x9')]=function(_0x3bf810,_0x5ceb60){return _0x3bf810[_0x82bd('0xa')](_0x82bd('0xb'),attributes,{'tableName':_0x82bd('0xc'),'paranoid':![],'indexes':[{'name':_0x82bd('0xd'),'fields':['uniqueid']}],'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(_0x4f1c35,_0x1ccf30){var _0x2c91fc=function(_0x2bb9f8){while(--_0x2bb9f8){_0x4f1c35['push'](_0x4f1c35['shift']());}};_0x2c91fc(++_0x1ccf30);}(_0x31f0,0xb7));var _0x031f=function(_0xfe7f7c,_0x5eebc8){_0xfe7f7c=_0xfe7f7c-0x0;var _0x43078f=_0x31f0[_0xfe7f7c];return _0x43078f;};'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 57ff524..38ef58f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b07=['rpc','jayson/promise','client','http','info','MailTransferReport,\x20%s,\x20%s','request\x20sent','debug','MailTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x12b8ec,_0x1655be){var _0x21af77=function(_0xe59f){while(--_0xe59f){_0x12b8ec['push'](_0x12b8ec['shift']());}};_0x21af77(++_0x1655be);}(_0x5b07,0x1dc));var _0x75b0=function(_0x2d1858,_0xf2a1f1){_0x2d1858=_0x2d1858-0x0;var _0x45cb9d=_0x5b07[_0x2d1858];return _0x45cb9d;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x75b0('0x0'));var BPromise=require(_0x75b0('0x1'));var rs=require(_0x75b0('0x2'));var fs=require('fs');var Redis=require(_0x75b0('0x3'));var db=require(_0x75b0('0x4'))['db'];var utils=require(_0x75b0('0x5'));var logger=require(_0x75b0('0x6'))(_0x75b0('0x7'));var config=require('../../config/environment');var jayson=require(_0x75b0('0x8'));var client=jayson[_0x75b0('0x9')][_0x75b0('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2919af,_0x1ff521,_0x2b52a0){return new BPromise(function(_0x44af6f,_0x51029d){return client['request'](_0x2919af,_0x2b52a0)['then'](function(_0x274e87){logger[_0x75b0('0xb')](_0x75b0('0xc'),_0x1ff521,_0x75b0('0xd'));logger[_0x75b0('0xe')](_0x75b0('0xf'),_0x1ff521,_0x75b0('0xd'),JSON[_0x75b0('0x10')](_0x274e87));if(_0x274e87['error']){if(_0x274e87[_0x75b0('0x11')][_0x75b0('0x12')]===0x1f4){logger['error'](_0x75b0('0xc'),_0x1ff521,_0x274e87[_0x75b0('0x11')][_0x75b0('0x13')]);return _0x51029d(_0x274e87['error'][_0x75b0('0x13')]);}logger[_0x75b0('0x11')](_0x75b0('0xc'),_0x1ff521,_0x274e87[_0x75b0('0x11')]['message']);return _0x44af6f(_0x274e87['error']['message']);}else{logger[_0x75b0('0xb')](_0x75b0('0xc'),_0x1ff521,'request\x20sent');_0x44af6f(_0x274e87[_0x75b0('0x14')][_0x75b0('0x13')]);}})['catch'](function(_0x5ee00d){logger['error']('MailTransferReport,\x20%s,\x20%s',_0x1ff521,_0x5ee00d);_0x51029d(_0x5ee00d);});});}
\ No newline at end of file
+var _0xf364=['error','code','MailTransferReport,\x20%s,\x20%s','message','result','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','info','request\x20sent','debug','MailTransferReport,\x20%s,\x20%s,\x20%s'];(function(_0x310dc2,_0x2299c4){var _0x24980f=function(_0xde9b88){while(--_0xde9b88){_0x310dc2['push'](_0x310dc2['shift']());}};_0x24980f(++_0x2299c4);}(_0xf364,0xe2));var _0x4f36=function(_0x2763f2,_0x416af8){_0x2763f2=_0x2763f2-0x0;var _0x3ef471=_0xf364[_0x2763f2];return _0x3ef471;};'use strict';var _=require('lodash');var util=require(_0x4f36('0x0'));var moment=require(_0x4f36('0x1'));var BPromise=require(_0x4f36('0x2'));var rs=require(_0x4f36('0x3'));var fs=require('fs');var Redis=require(_0x4f36('0x4'));var db=require(_0x4f36('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x4f36('0x6'))(_0x4f36('0x7'));var config=require(_0x4f36('0x8'));var jayson=require(_0x4f36('0x9'));var client=jayson[_0x4f36('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4fe670,_0x273d34,_0xe875a8){return new BPromise(function(_0x56f3da,_0x5b5637){return client[_0x4f36('0xb')](_0x4fe670,_0xe875a8)['then'](function(_0x554dc8){logger[_0x4f36('0xc')]('MailTransferReport,\x20%s,\x20%s',_0x273d34,_0x4f36('0xd'));logger[_0x4f36('0xe')](_0x4f36('0xf'),_0x273d34,_0x4f36('0xd'),JSON['stringify'](_0x554dc8));if(_0x554dc8[_0x4f36('0x10')]){if(_0x554dc8['error'][_0x4f36('0x11')]===0x1f4){logger[_0x4f36('0x10')](_0x4f36('0x12'),_0x273d34,_0x554dc8[_0x4f36('0x10')]['message']);return _0x5b5637(_0x554dc8['error']['message']);}logger[_0x4f36('0x10')](_0x4f36('0x12'),_0x273d34,_0x554dc8[_0x4f36('0x10')][_0x4f36('0x13')]);return _0x56f3da(_0x554dc8[_0x4f36('0x10')][_0x4f36('0x13')]);}else{logger[_0x4f36('0xc')](_0x4f36('0x12'),_0x273d34,_0x4f36('0xd'));_0x56f3da(_0x554dc8[_0x4f36('0x14')][_0x4f36('0x13')]);}})[_0x4f36('0x15')](function(_0x1639da){logger[_0x4f36('0x10')]('MailTransferReport,\x20%s,\x20%s',_0x273d34,_0x1639da);_0x5b5637(_0x1639da);});});}
\ No newline at end of file
index 0853b10..f04b473 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x62b8=['destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','index','get','/:id','show','post','create','put','delete'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0x62b8,0xc0));var _0x862b=function(_0x7dbd65,_0x18da49){_0x7dbd65=_0x7dbd65-0x0;var _0x33d551=_0x62b8[_0x7dbd65];return _0x33d551;};'use strict';var multer=require(_0x862b('0x0'));var util=require(_0x862b('0x1'));var path=require(_0x862b('0x2'));var timeout=require('connect-timeout');var express=require(_0x862b('0x3'));var router=express[_0x862b('0x4')]();var auth=require(_0x862b('0x5'));var interaction=require(_0x862b('0x6'));var config=require(_0x862b('0x7'));var controller=require('./memberReport.controller');router['get']('/',auth[_0x862b('0x8')](),controller[_0x862b('0x9')]);router[_0x862b('0xa')]('/describe',auth[_0x862b('0x8')](),controller['describe']);router['get'](_0x862b('0xb'),auth[_0x862b('0x8')](),controller[_0x862b('0xc')]);router[_0x862b('0xd')]('/',auth[_0x862b('0x8')](),controller[_0x862b('0xe')]);router[_0x862b('0xf')]('/:id',auth[_0x862b('0x8')](),controller['update']);router[_0x862b('0x10')](_0x862b('0xb'),auth[_0x862b('0x8')](),controller[_0x862b('0x11')]);module[_0x862b('0x12')]=router;
\ No newline at end of file
+var _0x871c=['post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','Router','../../components/interaction/service','../../config/environment','get','isAuthenticated','/describe','describe','/:id','show'];(function(_0x54c10d,_0x2f2251){var _0x1fa703=function(_0x508eb4){while(--_0x508eb4){_0x54c10d['push'](_0x54c10d['shift']());}};_0x1fa703(++_0x2f2251);}(_0x871c,0x1ab));var _0xc871=function(_0x1cb7a1,_0x2770e1){_0x1cb7a1=_0x1cb7a1-0x0;var _0x44b8e2=_0x871c[_0x1cb7a1];return _0x44b8e2;};'use strict';var multer=require(_0xc871('0x0'));var util=require(_0xc871('0x1'));var path=require(_0xc871('0x2'));var timeout=require(_0xc871('0x3'));var express=require('express');var router=express[_0xc871('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xc871('0x5'));var config=require(_0xc871('0x6'));var controller=require('./memberReport.controller');router[_0xc871('0x7')]('/',auth[_0xc871('0x8')](),controller['index']);router['get'](_0xc871('0x9'),auth[_0xc871('0x8')](),controller[_0xc871('0xa')]);router[_0xc871('0x7')](_0xc871('0xb'),auth['isAuthenticated'](),controller[_0xc871('0xc')]);router[_0xc871('0xd')]('/',auth['isAuthenticated'](),controller[_0xc871('0xe')]);router[_0xc871('0xf')](_0xc871('0xb'),auth[_0xc871('0x8')](),controller[_0xc871('0x10')]);router[_0xc871('0x11')](_0xc871('0xb'),auth[_0xc871('0x8')](),controller[_0xc871('0x12')]);module[_0xc871('0x13')]=router;
\ No newline at end of file
index f97863f..959d8d4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6a52=['DEFAULT\x20PAUSE','LOGIN,\x20PAUSE,\x20TALKING','INTEGER','DATE','getDataValue','enterAt','diff','seconds','exitAt','setDataValue','duration','talk:[inbound,\x20outbound],\x20pause:[reason]','talk:[start]','talk:[destination]','talk:[dial\x20string]','moment','exports','STRING'];(function(_0x1779fe,_0x5d05c9){var _0x25756f=function(_0x5d3e71){while(--_0x5d3e71){_0x1779fe['push'](_0x1779fe['shift']());}};_0x25756f(++_0x5d05c9);}(_0x6a52,0xc3));var _0x26a5=function(_0x37a9d7,_0x2b6fde){_0x37a9d7=_0x37a9d7-0x0;var _0x1343d3=_0x6a52[_0x37a9d7];return _0x1343d3;};'use strict';var Sequelize=require('sequelize');var moment=require(_0x26a5('0x0'));module[_0x26a5('0x1')]={'channel':{'type':Sequelize[_0x26a5('0x2')]},'membername':{'type':Sequelize[_0x26a5('0x2')]},'interface':{'type':Sequelize[_0x26a5('0x2')]},'type':{'type':Sequelize[_0x26a5('0x2')],'defaultValue':_0x26a5('0x3'),'comment':_0x26a5('0x4')},'duration':{'type':Sequelize[_0x26a5('0x5')]},'enterAt':{'type':Sequelize[_0x26a5('0x6')]},'exitAt':{'type':Sequelize['DATE'],'set':function(_0x5e3b80){var _0x35f0a5=moment(_0x5e3b80);var _0x89ba95=moment(this[_0x26a5('0x7')](_0x26a5('0x8')));var _0x50cbf9=_0x35f0a5[_0x26a5('0x9')](_0x89ba95,_0x26a5('0xa'));this['setDataValue'](_0x26a5('0xb'),_0x5e3b80);this[_0x26a5('0xc')](_0x26a5('0xd'),_0x50cbf9||null);}},'data1':{'type':Sequelize['STRING'],'comment':_0x26a5('0xe')},'data2':{'type':Sequelize[_0x26a5('0x2')],'comment':_0x26a5('0xf')},'data3':{'type':Sequelize['STRING'],'comment':_0x26a5('0x10')},'data4':{'type':Sequelize[_0x26a5('0x2')],'comment':_0x26a5('0x11')},'data5':{'type':Sequelize[_0x26a5('0x2')],'comment':'talk:[queue]'},'role':{'type':Sequelize[_0x26a5('0x2')]},'internal':{'type':Sequelize[_0x26a5('0x5')]},'uniqueid':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x4fd3=['STRING','INTEGER','DATE','enterAt','diff','seconds','setDataValue','exitAt','talk:[inbound,\x20outbound],\x20pause:[reason]','talk:[start]','talk:[dial\x20string]','talk:[queue]','sequelize','moment'];(function(_0x1d8f95,_0xcd1d0e){var _0x4cb618=function(_0xddea13){while(--_0xddea13){_0x1d8f95['push'](_0x1d8f95['shift']());}};_0x4cb618(++_0xcd1d0e);}(_0x4fd3,0x6e));var _0x34fd=function(_0x4f1874,_0x2aff4d){_0x4f1874=_0x4f1874-0x0;var _0x5e8a73=_0x4fd3[_0x4f1874];return _0x5e8a73;};'use strict';var Sequelize=require(_0x34fd('0x0'));var moment=require(_0x34fd('0x1'));module['exports']={'channel':{'type':Sequelize[_0x34fd('0x2')]},'membername':{'type':Sequelize['STRING']},'interface':{'type':Sequelize[_0x34fd('0x2')]},'type':{'type':Sequelize['STRING'],'defaultValue':'DEFAULT\x20PAUSE','comment':'LOGIN,\x20PAUSE,\x20TALKING'},'duration':{'type':Sequelize[_0x34fd('0x3')]},'enterAt':{'type':Sequelize[_0x34fd('0x4')]},'exitAt':{'type':Sequelize[_0x34fd('0x4')],'set':function(_0x338003){var _0x11e884=moment(_0x338003);var _0x3ef92c=moment(this['getDataValue'](_0x34fd('0x5')));var _0x22a674=_0x11e884[_0x34fd('0x6')](_0x3ef92c,_0x34fd('0x7'));this[_0x34fd('0x8')](_0x34fd('0x9'),_0x338003);this[_0x34fd('0x8')]('duration',_0x22a674||null);}},'data1':{'type':Sequelize[_0x34fd('0x2')],'comment':_0x34fd('0xa')},'data2':{'type':Sequelize[_0x34fd('0x2')],'comment':_0x34fd('0xb')},'data3':{'type':Sequelize[_0x34fd('0x2')],'comment':'talk:[destination]'},'data4':{'type':Sequelize[_0x34fd('0x2')],'comment':_0x34fd('0xc')},'data5':{'type':Sequelize[_0x34fd('0x2')],'comment':_0x34fd('0xd')},'role':{'type':Sequelize[_0x34fd('0x2')]},'internal':{'type':Sequelize[_0x34fd('0x3')]},'uniqueid':{'type':Sequelize[_0x34fd('0x2')]}};
\ No newline at end of file
index 07ea9df..9890a36 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6350=['pick','filters','filter','map','key','VIRTUAL','field','merge','options','findAll','catch','show','length','include','find','body','params','describe','zip-dir','fast-json-patch','request-promise','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','../../mysqldb','status','json','count','offset','limit','Content-Range','apply','reject','save','update','then','destroy','end','stack','name','send','MemberReport','rawAttributes','model','keys','query','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where'];(function(_0x2e655a,_0x6d5799){var _0x26f13b=function(_0x2dd535){while(--_0x2dd535){_0x2e655a['push'](_0x2e655a['shift']());}};_0x26f13b(++_0x6d5799);}(_0x6350,0xa2));var _0x0635=function(_0x5c0a53,_0x2a9e4f){_0x5c0a53=_0x5c0a53-0x0;var _0x523e19=_0x6350[_0x5c0a53];return _0x523e19;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x0635('0x0'));var jsonpatch=require(_0x0635('0x1'));var rp=require(_0x0635('0x2'));var moment=require('moment');var BPromise=require(_0x0635('0x3'));var Mustache=require(_0x0635('0x4'));var util=require(_0x0635('0x5'));var path=require(_0x0635('0x6'));var sox=require(_0x0635('0x7'));var csv=require(_0x0635('0x8'));var ejs=require(_0x0635('0x9'));var fs=require('fs');var _=require(_0x0635('0xa'));var squel=require(_0x0635('0xb'));var crypto=require(_0x0635('0xc'));var jsforce=require(_0x0635('0xd'));var deskjs=require(_0x0635('0xe'));var toCsv=require(_0x0635('0x8'));var querystring=require(_0x0635('0xf'));var Papa=require(_0x0635('0x10'));var Redis=require(_0x0635('0x11'));var authService=require(_0x0635('0x12'));var qs=require(_0x0635('0x13'));var hardwareService=require(_0x0635('0x14'));var logger=require(_0x0635('0x15'))(_0x0635('0x16'));var utils=require(_0x0635('0x17'));var config=require('../../config/environment');var db=require(_0x0635('0x18'))['db'];function respondWithStatusCode(_0x1aac2f,_0x4a2d92){_0x4a2d92=_0x4a2d92||0xcc;return function(_0x593c62){if(_0x593c62){return _0x1aac2f['sendStatus'](_0x4a2d92);}return _0x1aac2f[_0x0635('0x19')](_0x4a2d92)['end']();};}function respondWithResult(_0x478079,_0x2f2009){_0x2f2009=_0x2f2009||0xc8;return function(_0xcef909){if(_0xcef909){return _0x478079[_0x0635('0x19')](_0x2f2009)[_0x0635('0x1a')](_0xcef909);}};}function respondWithFilteredResult(_0x16c07f,_0x7e0084){return function(_0x5a5148){if(_0x5a5148){var _0x3a1623=_0x5a5148[_0x0635('0x1b')],_0x56f95a=_0x7e0084[_0x0635('0x1c')],_0x388a60=_0x7e0084[_0x0635('0x1c')]+_0x7e0084[_0x0635('0x1d')],_0x570154;if(_0x388a60>=_0x3a1623){_0x388a60=_0x3a1623;_0x570154=0xc8;}else{_0x570154=0xce;}_0x16c07f[_0x0635('0x19')](_0x570154);return _0x16c07f['set'](_0x0635('0x1e'),_0x56f95a+'-'+_0x388a60+'/'+_0x3a1623)[_0x0635('0x1a')](_0x5a5148);}return null;};}function patchUpdates(_0x2b32b8){return function(_0x305df2){try{jsonpatch[_0x0635('0x1f')](_0x305df2,_0x2b32b8,!![]);}catch(_0x4943c7){return BPromise[_0x0635('0x20')](_0x4943c7);}return _0x305df2[_0x0635('0x21')]();};}function saveUpdates(_0x251154,_0x278a80){return function(_0x5844e2){if(_0x5844e2){return _0x5844e2[_0x0635('0x22')](_0x251154)[_0x0635('0x23')](function(_0x5bca79){return _0x5bca79;});}return null;};}function removeEntity(_0x1787e1,_0xd5863e){return function(_0x2b3b8e){if(_0x2b3b8e){return _0x2b3b8e[_0x0635('0x24')]()[_0x0635('0x23')](function(){_0x1787e1[_0x0635('0x19')](0xcc)[_0x0635('0x25')]();});}};}function handleEntityNotFound(_0x41ce14,_0x41be11){return function(_0x2e0eb0){if(!_0x2e0eb0){_0x41ce14['sendStatus'](0x194);}return _0x2e0eb0;};}function handleError(_0x47e3e0,_0x29ce27){_0x29ce27=_0x29ce27||0x1f4;return function(_0x2f682b){logger['error'](_0x2f682b[_0x0635('0x26')]);if(_0x2f682b[_0x0635('0x27')]){delete _0x2f682b[_0x0635('0x27')];}_0x47e3e0['status'](_0x29ce27)[_0x0635('0x28')](_0x2f682b);};}exports['index']=function(_0x38336d,_0x39e0f6){var _0x2421f3={},_0x1d4d69={},_0x6222af={'count':0x0,'rows':[]};var _0x22361c=db[_0x0635('0x29')][_0x0635('0x2a')];_0x1d4d69[_0x0635('0x2b')]=_[_0x0635('0x2c')](_0x22361c);_0x1d4d69[_0x0635('0x2d')]=_[_0x0635('0x2c')](_0x38336d[_0x0635('0x2d')]);_0x1d4d69['filters']=_[_0x0635('0x2e')](_0x1d4d69[_0x0635('0x2b')],_0x1d4d69[_0x0635('0x2d')]);_0x2421f3[_0x0635('0x2f')]=_[_0x0635('0x2e')](_0x1d4d69[_0x0635('0x2b')],qs[_0x0635('0x30')](_0x38336d[_0x0635('0x2d')][_0x0635('0x30')]));_0x2421f3['attributes']=_0x2421f3[_0x0635('0x2f')]['length']?_0x2421f3['attributes']:_0x1d4d69[_0x0635('0x2b')];if(!_0x38336d[_0x0635('0x2d')][_0x0635('0x31')](_0x0635('0x32'))){_0x2421f3[_0x0635('0x1d')]=qs['limit'](_0x38336d[_0x0635('0x2d')][_0x0635('0x1d')]);_0x2421f3[_0x0635('0x1c')]=qs['offset'](_0x38336d[_0x0635('0x2d')][_0x0635('0x1c')]);}_0x2421f3[_0x0635('0x33')]=qs[_0x0635('0x34')](_0x38336d[_0x0635('0x2d')]['sort']);_0x2421f3[_0x0635('0x35')]=qs['filters'](_[_0x0635('0x36')](_0x38336d[_0x0635('0x2d')],_0x1d4d69[_0x0635('0x37')]));if(_0x38336d[_0x0635('0x2d')][_0x0635('0x38')]){_0x2421f3[_0x0635('0x35')]=_['merge'](_0x2421f3[_0x0635('0x35')],{'$or':_[_0x0635('0x39')](_0x22361c,function(_0x28b272){if(_0x28b272['type'][_0x0635('0x3a')]!==_0x0635('0x3b')){var _0x2e0fac={};_0x2e0fac[_0x28b272[_0x0635('0x3c')]]={'$like':'%'+_0x38336d[_0x0635('0x2d')][_0x0635('0x38')]+'%'};return _0x2e0fac;}})});}_0x2421f3=_[_0x0635('0x3d')]({},_0x2421f3,_0x38336d[_0x0635('0x3e')]);var _0x1d9752={'where':_0x2421f3['where']};return db['MemberReport'][_0x0635('0x1b')](_0x1d9752)[_0x0635('0x23')](function(_0x43d012){_0x6222af[_0x0635('0x1b')]=_0x43d012;if(_0x38336d[_0x0635('0x2d')]['includeAll']){_0x2421f3['include']=[{'all':!![]}];}return db[_0x0635('0x29')][_0x0635('0x3f')](_0x2421f3);})[_0x0635('0x23')](function(_0x438fd6){_0x6222af['rows']=_0x438fd6;return _0x6222af;})['then'](respondWithFilteredResult(_0x39e0f6,_0x2421f3))[_0x0635('0x40')](handleError(_0x39e0f6,null));};exports[_0x0635('0x41')]=function(_0x2efc39,_0x1c8e8b){var _0x171cda={'raw':!![],'where':{'id':_0x2efc39['params']['id']}},_0x1619c1={};_0x1619c1[_0x0635('0x2b')]=_[_0x0635('0x2c')](db[_0x0635('0x29')][_0x0635('0x2a')]);_0x1619c1[_0x0635('0x2d')]=_[_0x0635('0x2c')](_0x2efc39[_0x0635('0x2d')]);_0x1619c1[_0x0635('0x37')]=_[_0x0635('0x2e')](_0x1619c1[_0x0635('0x2b')],_0x1619c1[_0x0635('0x2d')]);_0x171cda[_0x0635('0x2f')]=_[_0x0635('0x2e')](_0x1619c1[_0x0635('0x2b')],qs[_0x0635('0x30')](_0x2efc39['query'][_0x0635('0x30')]));_0x171cda[_0x0635('0x2f')]=_0x171cda[_0x0635('0x2f')][_0x0635('0x42')]?_0x171cda['attributes']:_0x1619c1[_0x0635('0x2b')];if(_0x2efc39[_0x0635('0x2d')]['includeAll']){_0x171cda[_0x0635('0x43')]=[{'all':!![]}];}_0x171cda=_['merge']({},_0x171cda,_0x2efc39['options']);return db[_0x0635('0x29')][_0x0635('0x44')](_0x171cda)[_0x0635('0x23')](handleEntityNotFound(_0x1c8e8b,null))[_0x0635('0x23')](respondWithResult(_0x1c8e8b,null))[_0x0635('0x40')](handleError(_0x1c8e8b,null));};exports['create']=function(_0x1ba357,_0xcf6f03){return db[_0x0635('0x29')]['create'](_0x1ba357[_0x0635('0x45')],{})[_0x0635('0x23')](respondWithResult(_0xcf6f03,0xc9))[_0x0635('0x40')](handleError(_0xcf6f03,null));};exports['update']=function(_0x52c588,_0x19aa78){if(_0x52c588[_0x0635('0x45')]['id']){delete _0x52c588['body']['id'];}return db[_0x0635('0x29')][_0x0635('0x44')]({'where':{'id':_0x52c588[_0x0635('0x46')]['id']}})[_0x0635('0x23')](handleEntityNotFound(_0x19aa78,null))['then'](saveUpdates(_0x52c588['body'],null))[_0x0635('0x23')](respondWithResult(_0x19aa78,null))[_0x0635('0x40')](handleError(_0x19aa78,null));};exports[_0x0635('0x24')]=function(_0x554ddc,_0x32ff5a){return db[_0x0635('0x29')][_0x0635('0x44')]({'where':{'id':_0x554ddc[_0x0635('0x46')]['id']}})[_0x0635('0x23')](handleEntityNotFound(_0x32ff5a,null))[_0x0635('0x23')](removeEntity(_0x32ff5a,null))[_0x0635('0x40')](handleError(_0x32ff5a,null));};exports[_0x0635('0x47')]=function(_0x433abe,_0x3ec940){return db[_0x0635('0x29')][_0x0635('0x47')]()[_0x0635('0x23')](respondWithResult(_0x3ec940,null))[_0x0635('0x40')](handleError(_0x3ec940,null));};
\ No newline at end of file
+var _0xea5a=['sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','Content-Range','apply','update','destroy','then','end','sendStatus','error','stack','name','index','MemberReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','includeAll','findAll','show','catch','create','body','describe','eml-format','rimraf','fast-json-patch','request-promise','moment','mustache','util'];(function(_0x1f141f,_0x4313a5){var _0x5aee2a=function(_0xbbf799){while(--_0xbbf799){_0x1f141f['push'](_0x1f141f['shift']());}};_0x5aee2a(++_0x4313a5);}(_0xea5a,0x1e3));var _0xaea5=function(_0x533d5d,_0x400122){_0x533d5d=_0x533d5d-0x0;var _0x5518a1=_0xea5a[_0x533d5d];return _0x5518a1;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xaea5('0x0'));var rimraf=require(_0xaea5('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xaea5('0x2'));var rp=require(_0xaea5('0x3'));var moment=require(_0xaea5('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xaea5('0x5'));var util=require(_0xaea5('0x6'));var path=require('path');var sox=require(_0xaea5('0x7'));var csv=require(_0xaea5('0x8'));var ejs=require(_0xaea5('0x9'));var fs=require('fs');var _=require(_0xaea5('0xa'));var squel=require(_0xaea5('0xb'));var crypto=require(_0xaea5('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xaea5('0xd'));var toCsv=require(_0xaea5('0x8'));var querystring=require(_0xaea5('0xe'));var Papa=require(_0xaea5('0xf'));var Redis=require(_0xaea5('0x10'));var authService=require('../../components/auth/service');var qs=require(_0xaea5('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xaea5('0x12'))(_0xaea5('0x13'));var utils=require(_0xaea5('0x14'));var config=require(_0xaea5('0x15'));var db=require(_0xaea5('0x16'))['db'];function respondWithStatusCode(_0x6e8139,_0x4b350f){_0x4b350f=_0x4b350f||0xcc;return function(_0x4ae9a2){if(_0x4ae9a2){return _0x6e8139['sendStatus'](_0x4b350f);}return _0x6e8139['status'](_0x4b350f)['end']();};}function respondWithResult(_0x1cd61d,_0x194513){_0x194513=_0x194513||0xc8;return function(_0x339ce8){if(_0x339ce8){return _0x1cd61d[_0xaea5('0x17')](_0x194513)[_0xaea5('0x18')](_0x339ce8);}};}function respondWithFilteredResult(_0x49f46d,_0x107bc5){return function(_0x1db8a3){if(_0x1db8a3){var _0x411d41=_0x1db8a3[_0xaea5('0x19')],_0x5ad937=_0x107bc5[_0xaea5('0x1a')],_0x2a6447=_0x107bc5[_0xaea5('0x1a')]+_0x107bc5[_0xaea5('0x1b')],_0xf51310;if(_0x2a6447>=_0x411d41){_0x2a6447=_0x411d41;_0xf51310=0xc8;}else{_0xf51310=0xce;}_0x49f46d[_0xaea5('0x17')](_0xf51310);return _0x49f46d[_0xaea5('0x1c')](_0xaea5('0x1d'),_0x5ad937+'-'+_0x2a6447+'/'+_0x411d41)[_0xaea5('0x18')](_0x1db8a3);}return null;};}function patchUpdates(_0x1b3360){return function(_0x1fd078){try{jsonpatch[_0xaea5('0x1e')](_0x1fd078,_0x1b3360,!![]);}catch(_0x28c470){return BPromise['reject'](_0x28c470);}return _0x1fd078['save']();};}function saveUpdates(_0x4b8412,_0x95a46){return function(_0x2cccca){if(_0x2cccca){return _0x2cccca[_0xaea5('0x1f')](_0x4b8412)['then'](function(_0x7d44ab){return _0x7d44ab;});}return null;};}function removeEntity(_0x2be041,_0x5d1e1a){return function(_0x52d180){if(_0x52d180){return _0x52d180[_0xaea5('0x20')]()[_0xaea5('0x21')](function(){_0x2be041['status'](0xcc)[_0xaea5('0x22')]();});}};}function handleEntityNotFound(_0x414883,_0x102ab5){return function(_0x34b905){if(!_0x34b905){_0x414883[_0xaea5('0x23')](0x194);}return _0x34b905;};}function handleError(_0x14241d,_0x53bda2){_0x53bda2=_0x53bda2||0x1f4;return function(_0x18aaf3){logger[_0xaea5('0x24')](_0x18aaf3[_0xaea5('0x25')]);if(_0x18aaf3[_0xaea5('0x26')]){delete _0x18aaf3[_0xaea5('0x26')];}_0x14241d[_0xaea5('0x17')](_0x53bda2)['send'](_0x18aaf3);};}exports[_0xaea5('0x27')]=function(_0x501043,_0x37f1e8){var _0x5d01b6={},_0x415fd8={},_0x35c57f={'count':0x0,'rows':[]};var _0x345344=db[_0xaea5('0x28')][_0xaea5('0x29')];_0x415fd8[_0xaea5('0x2a')]=_[_0xaea5('0x2b')](_0x345344);_0x415fd8[_0xaea5('0x2c')]=_['keys'](_0x501043['query']);_0x415fd8[_0xaea5('0x2d')]=_[_0xaea5('0x2e')](_0x415fd8['model'],_0x415fd8[_0xaea5('0x2c')]);_0x5d01b6[_0xaea5('0x2f')]=_[_0xaea5('0x2e')](_0x415fd8[_0xaea5('0x2a')],qs[_0xaea5('0x30')](_0x501043[_0xaea5('0x2c')][_0xaea5('0x30')]));_0x5d01b6[_0xaea5('0x2f')]=_0x5d01b6[_0xaea5('0x2f')][_0xaea5('0x31')]?_0x5d01b6[_0xaea5('0x2f')]:_0x415fd8[_0xaea5('0x2a')];if(!_0x501043['query'][_0xaea5('0x32')](_0xaea5('0x33'))){_0x5d01b6[_0xaea5('0x1b')]=qs[_0xaea5('0x1b')](_0x501043[_0xaea5('0x2c')][_0xaea5('0x1b')]);_0x5d01b6[_0xaea5('0x1a')]=qs['offset'](_0x501043[_0xaea5('0x2c')][_0xaea5('0x1a')]);}_0x5d01b6[_0xaea5('0x34')]=qs[_0xaea5('0x35')](_0x501043[_0xaea5('0x2c')][_0xaea5('0x35')]);_0x5d01b6[_0xaea5('0x36')]=qs[_0xaea5('0x2d')](_[_0xaea5('0x37')](_0x501043[_0xaea5('0x2c')],_0x415fd8[_0xaea5('0x2d')]));if(_0x501043[_0xaea5('0x2c')][_0xaea5('0x38')]){_0x5d01b6['where']=_[_0xaea5('0x39')](_0x5d01b6[_0xaea5('0x36')],{'$or':_[_0xaea5('0x3a')](_0x345344,function(_0x4a9ee0){if(_0x4a9ee0[_0xaea5('0x3b')][_0xaea5('0x3c')]!==_0xaea5('0x3d')){var _0x1a406b={};_0x1a406b[_0x4a9ee0[_0xaea5('0x3e')]]={'$like':'%'+_0x501043['query'][_0xaea5('0x38')]+'%'};return _0x1a406b;}})});}_0x5d01b6=_[_0xaea5('0x39')]({},_0x5d01b6,_0x501043['options']);var _0x14f76c={'where':_0x5d01b6[_0xaea5('0x36')]};return db[_0xaea5('0x28')][_0xaea5('0x19')](_0x14f76c)[_0xaea5('0x21')](function(_0x15cce5){_0x35c57f[_0xaea5('0x19')]=_0x15cce5;if(_0x501043[_0xaea5('0x2c')][_0xaea5('0x3f')]){_0x5d01b6['include']=[{'all':!![]}];}return db[_0xaea5('0x28')][_0xaea5('0x40')](_0x5d01b6);})['then'](function(_0x202915){_0x35c57f['rows']=_0x202915;return _0x35c57f;})[_0xaea5('0x21')](respondWithFilteredResult(_0x37f1e8,_0x5d01b6))['catch'](handleError(_0x37f1e8,null));};exports[_0xaea5('0x41')]=function(_0x2ce091,_0x2b70ff){var _0x525e42={'raw':!![],'where':{'id':_0x2ce091['params']['id']}},_0xcafe24={};_0xcafe24['model']=_[_0xaea5('0x2b')](db[_0xaea5('0x28')]['rawAttributes']);_0xcafe24[_0xaea5('0x2c')]=_['keys'](_0x2ce091[_0xaea5('0x2c')]);_0xcafe24[_0xaea5('0x2d')]=_[_0xaea5('0x2e')](_0xcafe24[_0xaea5('0x2a')],_0xcafe24['query']);_0x525e42[_0xaea5('0x2f')]=_['intersection'](_0xcafe24['model'],qs['fields'](_0x2ce091[_0xaea5('0x2c')][_0xaea5('0x30')]));_0x525e42[_0xaea5('0x2f')]=_0x525e42[_0xaea5('0x2f')][_0xaea5('0x31')]?_0x525e42['attributes']:_0xcafe24['model'];if(_0x2ce091[_0xaea5('0x2c')][_0xaea5('0x3f')]){_0x525e42['include']=[{'all':!![]}];}_0x525e42=_[_0xaea5('0x39')]({},_0x525e42,_0x2ce091['options']);return db[_0xaea5('0x28')]['find'](_0x525e42)[_0xaea5('0x21')](handleEntityNotFound(_0x2b70ff,null))['then'](respondWithResult(_0x2b70ff,null))[_0xaea5('0x42')](handleError(_0x2b70ff,null));};exports[_0xaea5('0x43')]=function(_0x528962,_0x467125){return db[_0xaea5('0x28')][_0xaea5('0x43')](_0x528962[_0xaea5('0x44')],{})['then'](respondWithResult(_0x467125,0xc9))[_0xaea5('0x42')](handleError(_0x467125,null));};exports[_0xaea5('0x1f')]=function(_0x2998a7,_0x4029c6){if(_0x2998a7[_0xaea5('0x44')]['id']){delete _0x2998a7['body']['id'];}return db[_0xaea5('0x28')]['find']({'where':{'id':_0x2998a7['params']['id']}})['then'](handleEntityNotFound(_0x4029c6,null))[_0xaea5('0x21')](saveUpdates(_0x2998a7['body'],null))[_0xaea5('0x21')](respondWithResult(_0x4029c6,null))[_0xaea5('0x42')](handleError(_0x4029c6,null));};exports['destroy']=function(_0x308ee9,_0x261d1b){return db[_0xaea5('0x28')]['find']({'where':{'id':_0x308ee9['params']['id']}})['then'](handleEntityNotFound(_0x261d1b,null))['then'](removeEntity(_0x261d1b,null))[_0xaea5('0x42')](handleError(_0x261d1b,null));};exports[_0xaea5('0x45')]=function(_0x5e9708,_0x357ba6){return db[_0xaea5('0x28')][_0xaea5('0x45')]()['then'](respondWithResult(_0x357ba6,null))['catch'](handleError(_0x357ba6,null));};
\ No newline at end of file
index 6a7a763..3833372 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfa25=['request-promise','path','rimraf','exports','define','report_member','membername_interface','membername','interface','lodash','util','moment','bluebird'];(function(_0xfda0cd,_0x16acf4){var _0x308023=function(_0x14323f){while(--_0x14323f){_0xfda0cd['push'](_0xfda0cd['shift']());}};_0x308023(++_0x16acf4);}(_0xfa25,0x175));var _0x5fa2=function(_0xb53f55,_0x1f20d5){_0xb53f55=_0xb53f55-0x0;var _0x978a84=_0xfa25[_0xb53f55];return _0x978a84;};'use strict';var _=require(_0x5fa2('0x0'));var util=require(_0x5fa2('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x5fa2('0x2'));var BPromise=require(_0x5fa2('0x3'));var rp=require(_0x5fa2('0x4'));var fs=require('fs');var path=require(_0x5fa2('0x5'));var rimraf=require(_0x5fa2('0x6'));var config=require('../../config/environment');var attributes=require('./memberReport.attributes');module[_0x5fa2('0x7')]=function(_0x946fd4,_0xef635d){return _0x946fd4[_0x5fa2('0x8')]('MemberReport',attributes,{'tableName':_0x5fa2('0x9'),'paranoid':![],'indexes':[{'name':_0x5fa2('0xa'),'fields':[_0x5fa2('0xb'),_0x5fa2('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x60ec=['rimraf','../../config/environment','./memberReport.attributes','exports','define','MemberReport','report_member','membername','interface','lodash','util','../../config/logger','api','moment','request-promise','path'];(function(_0x30a3a8,_0x249f26){var _0x2ee174=function(_0x5210a1){while(--_0x5210a1){_0x30a3a8['push'](_0x30a3a8['shift']());}};_0x2ee174(++_0x249f26);}(_0x60ec,0x129));var _0xc60e=function(_0x4d4624,_0x390be6){_0x4d4624=_0x4d4624-0x0;var _0xa0d8ab=_0x60ec[_0x4d4624];return _0xa0d8ab;};'use strict';var _=require(_0xc60e('0x0'));var util=require(_0xc60e('0x1'));var logger=require(_0xc60e('0x2'))(_0xc60e('0x3'));var moment=require(_0xc60e('0x4'));var BPromise=require('bluebird');var rp=require(_0xc60e('0x5'));var fs=require('fs');var path=require(_0xc60e('0x6'));var rimraf=require(_0xc60e('0x7'));var config=require(_0xc60e('0x8'));var attributes=require(_0xc60e('0x9'));module[_0xc60e('0xa')]=function(_0x599f35,_0x130937){return _0x599f35[_0xc60e('0xb')](_0xc60e('0xc'),attributes,{'tableName':_0xc60e('0xd'),'paranoid':![],'indexes':[{'name':'membername_interface','fields':[_0xc60e('0xe'),_0xc60e('0xf')]}],'timestamps':!![]});};
\ No newline at end of file
index 32fef0a..1153827 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc424=['include','model','then','debug','GetMemberReport','stringify','catch','CreateMemberReport','create','body','UpdateMemberReport','lodash','bluebird','randomstring','../../config/logger','rpc','../../config/environment','client','request','request\x20sent','MemberReport,\x20%s,\x20%s,\x20%s','error','MemberReport,\x20%s,\x20%s','message','info','result','MemberReport','findAll','options','raw','where','attributes','limit','map'];(function(_0x17c195,_0x41ee45){var _0x1528d5=function(_0x2497fa){while(--_0x2497fa){_0x17c195['push'](_0x17c195['shift']());}};_0x1528d5(++_0x41ee45);}(_0xc424,0xf9));var _0x4c42=function(_0x10e4ff,_0x4a6476){_0x10e4ff=_0x10e4ff-0x0;var _0xaa0db8=_0xc424[_0x10e4ff];return _0xaa0db8;};'use strict';var _=require(_0x4c42('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x4c42('0x1'));var rs=require(_0x4c42('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x4c42('0x3'))(_0x4c42('0x4'));var config=require(_0x4c42('0x5'));var jayson=require('jayson/promise');var client=jayson[_0x4c42('0x6')]['http']({'port':0x232a});function respondWithRpcPromise(_0x455573,_0x5218d7,_0x1c6347){return new BPromise(function(_0x5dc1c4,_0x2fe051){return client[_0x4c42('0x7')](_0x455573,_0x1c6347)['then'](function(_0x3e273c){logger['info']('MemberReport,\x20%s,\x20%s',_0x5218d7,_0x4c42('0x8'));logger['debug'](_0x4c42('0x9'),_0x5218d7,_0x4c42('0x8'),JSON['stringify'](_0x3e273c));if(_0x3e273c[_0x4c42('0xa')]){if(_0x3e273c[_0x4c42('0xa')]['code']===0x1f4){logger[_0x4c42('0xa')]('MemberReport,\x20%s,\x20%s',_0x5218d7,_0x3e273c[_0x4c42('0xa')]['message']);return _0x2fe051(_0x3e273c[_0x4c42('0xa')]['message']);}logger['error'](_0x4c42('0xb'),_0x5218d7,_0x3e273c['error'][_0x4c42('0xc')]);return _0x5dc1c4(_0x3e273c[_0x4c42('0xa')]['message']);}else{logger[_0x4c42('0xd')]('MemberReport,\x20%s,\x20%s',_0x5218d7,_0x4c42('0x8'));_0x5dc1c4(_0x3e273c[_0x4c42('0xe')][_0x4c42('0xc')]);}})['catch'](function(_0x2d52dc){logger[_0x4c42('0xa')](_0x4c42('0xb'),_0x5218d7,_0x2d52dc);_0x2fe051(_0x2d52dc);});});}exports['GetMemberReport']=function(_0x4bb03a){var _0x43b4b9=this;return new Promise(function(_0x395aa0,_0x2c6313){return db[_0x4c42('0xf')][_0x4c42('0x10')]({'raw':_0x4bb03a[_0x4c42('0x11')]?_0x4bb03a[_0x4c42('0x11')][_0x4c42('0x12')]===undefined?!![]:![]:!![],'where':_0x4bb03a[_0x4c42('0x11')]?_0x4bb03a[_0x4c42('0x11')][_0x4c42('0x13')]||null:null,'attributes':_0x4bb03a[_0x4c42('0x11')]?_0x4bb03a[_0x4c42('0x11')][_0x4c42('0x14')]||null:null,'limit':_0x4bb03a[_0x4c42('0x11')]?_0x4bb03a['options'][_0x4c42('0x15')]||null:null,'include':_0x4bb03a['options']?_0x4bb03a[_0x4c42('0x11')]['include']?_[_0x4c42('0x16')](_0x4bb03a['options'][_0x4c42('0x17')],function(_0x4ac994){return{'model':db[_0x4ac994[_0x4c42('0x18')]],'as':_0x4ac994['as'],'attributes':_0x4ac994['attributes'],'include':_0x4ac994[_0x4c42('0x17')]?_[_0x4c42('0x16')](_0x4ac994['include'],function(_0x162477){return{'model':db[_0x162477[_0x4c42('0x18')]],'as':_0x162477['as'],'attributes':_0x162477['attributes'],'include':_0x162477[_0x4c42('0x17')]?_['map'](_0x162477[_0x4c42('0x17')],function(_0x58f27f){return{'model':db[_0x58f27f['model']],'as':_0x58f27f['as'],'attributes':_0x58f27f[_0x4c42('0x14')]};}):[]};}):[]};}):[]:[]})[_0x4c42('0x19')](function(_0x5afb4d){logger[_0x4c42('0xd')]('GetMemberReport',_0x4bb03a);logger[_0x4c42('0x1a')](_0x4c42('0x1b'),_0x4bb03a,JSON[_0x4c42('0x1c')](_0x5afb4d));_0x395aa0(_0x5afb4d);})[_0x4c42('0x1d')](function(_0x274164){logger[_0x4c42('0xa')](_0x4c42('0x1b'),_0x274164[_0x4c42('0xc')],_0x4bb03a);_0x2c6313(_0x43b4b9[_0x4c42('0xa')](0x1f4,_0x274164[_0x4c42('0xc')]));});});};exports[_0x4c42('0x1e')]=function(_0x5a6702){var _0x44cbea=this;return new Promise(function(_0x2f8e13,_0x25b4b0){return db[_0x4c42('0xf')][_0x4c42('0x1f')](_0x5a6702[_0x4c42('0x20')],{'raw':_0x5a6702[_0x4c42('0x11')]?_0x5a6702[_0x4c42('0x11')]['raw']===undefined?!![]:![]:!![]})[_0x4c42('0x19')](function(_0x52f924){logger['info'](_0x4c42('0x1e'),_0x5a6702);logger[_0x4c42('0x1a')](_0x4c42('0x1e'),_0x5a6702,JSON[_0x4c42('0x1c')](_0x52f924));_0x2f8e13(_0x52f924);})[_0x4c42('0x1d')](function(_0x56f2e0){logger[_0x4c42('0xa')](_0x4c42('0x1e'),_0x56f2e0['message'],_0x5a6702);_0x25b4b0(_0x44cbea[_0x4c42('0xa')](0x1f4,_0x56f2e0[_0x4c42('0xc')]));});});};exports[_0x4c42('0x21')]=function(_0x2e8a38){var _0x19e7d0=this;return new Promise(function(_0x7e8894,_0x55e1e3){return db['MemberReport']['update'](_0x2e8a38[_0x4c42('0x20')],{'raw':_0x2e8a38[_0x4c42('0x11')]?_0x2e8a38[_0x4c42('0x11')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2e8a38[_0x4c42('0x11')]?_0x2e8a38[_0x4c42('0x11')][_0x4c42('0x13')]||null:null,'attributes':_0x2e8a38[_0x4c42('0x11')]?_0x2e8a38[_0x4c42('0x11')][_0x4c42('0x14')]||null:null,'limit':_0x2e8a38['options']?_0x2e8a38[_0x4c42('0x11')]['limit']||null:null})[_0x4c42('0x19')](function(_0x35f84c){logger[_0x4c42('0xd')](_0x4c42('0x21'),_0x2e8a38);logger['debug'](_0x4c42('0x21'),_0x2e8a38,JSON[_0x4c42('0x1c')](_0x35f84c));_0x7e8894(_0x35f84c);})[_0x4c42('0x1d')](function(_0x4b4df6){logger['error'](_0x4c42('0x21'),_0x4b4df6[_0x4c42('0xc')],_0x2e8a38);_0x55e1e3(_0x19e7d0['error'](0x1f4,_0x4b4df6[_0x4c42('0xc')]));});});};
\ No newline at end of file
+var _0x7fe5=['MemberReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','MemberReport,\x20%s,\x20%s','message','result','catch','GetMemberReport','MemberReport','findAll','options','raw','where','map','include','model','attributes','CreateMemberReport','create','body','update','limit','UpdateMemberReport','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','debug'];(function(_0x2b500c,_0x3db069){var _0x301283=function(_0x599996){while(--_0x599996){_0x2b500c['push'](_0x2b500c['shift']());}};_0x301283(++_0x3db069);}(_0x7fe5,0x66));var _0x57fe=function(_0x4507c1,_0xa8d71a){_0x4507c1=_0x4507c1-0x0;var _0x3d3b03=_0x7fe5[_0x4507c1];return _0x3d3b03;};'use strict';var _=require(_0x57fe('0x0'));var util=require(_0x57fe('0x1'));var moment=require(_0x57fe('0x2'));var BPromise=require('bluebird');var rs=require(_0x57fe('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x57fe('0x4'))['db'];var utils=require(_0x57fe('0x5'));var logger=require(_0x57fe('0x6'))(_0x57fe('0x7'));var config=require('../../config/environment');var jayson=require(_0x57fe('0x8'));var client=jayson[_0x57fe('0x9')][_0x57fe('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x120024,_0x168300,_0x41e70f){return new BPromise(function(_0x198743,_0x4326ae){return client[_0x57fe('0xb')](_0x120024,_0x41e70f)[_0x57fe('0xc')](function(_0x51c68b){logger[_0x57fe('0xd')]('MemberReport,\x20%s,\x20%s',_0x168300,'request\x20sent');logger[_0x57fe('0xe')](_0x57fe('0xf'),_0x168300,_0x57fe('0x10'),JSON[_0x57fe('0x11')](_0x51c68b));if(_0x51c68b[_0x57fe('0x12')]){if(_0x51c68b['error']['code']===0x1f4){logger[_0x57fe('0x12')](_0x57fe('0x13'),_0x168300,_0x51c68b[_0x57fe('0x12')][_0x57fe('0x14')]);return _0x4326ae(_0x51c68b[_0x57fe('0x12')][_0x57fe('0x14')]);}logger[_0x57fe('0x12')](_0x57fe('0x13'),_0x168300,_0x51c68b[_0x57fe('0x12')][_0x57fe('0x14')]);return _0x198743(_0x51c68b[_0x57fe('0x12')][_0x57fe('0x14')]);}else{logger[_0x57fe('0xd')](_0x57fe('0x13'),_0x168300,_0x57fe('0x10'));_0x198743(_0x51c68b[_0x57fe('0x15')][_0x57fe('0x14')]);}})[_0x57fe('0x16')](function(_0x9a4f5c){logger[_0x57fe('0x12')](_0x57fe('0x13'),_0x168300,_0x9a4f5c);_0x4326ae(_0x9a4f5c);});});}exports[_0x57fe('0x17')]=function(_0x2293c3){var _0x5c5e0e=this;return new Promise(function(_0x10eb36,_0x454147){return db[_0x57fe('0x18')][_0x57fe('0x19')]({'raw':_0x2293c3[_0x57fe('0x1a')]?_0x2293c3['options'][_0x57fe('0x1b')]===undefined?!![]:![]:!![],'where':_0x2293c3[_0x57fe('0x1a')]?_0x2293c3[_0x57fe('0x1a')][_0x57fe('0x1c')]||null:null,'attributes':_0x2293c3[_0x57fe('0x1a')]?_0x2293c3[_0x57fe('0x1a')]['attributes']||null:null,'limit':_0x2293c3['options']?_0x2293c3['options']['limit']||null:null,'include':_0x2293c3['options']?_0x2293c3[_0x57fe('0x1a')]['include']?_[_0x57fe('0x1d')](_0x2293c3['options'][_0x57fe('0x1e')],function(_0x297943){return{'model':db[_0x297943[_0x57fe('0x1f')]],'as':_0x297943['as'],'attributes':_0x297943[_0x57fe('0x20')],'include':_0x297943[_0x57fe('0x1e')]?_[_0x57fe('0x1d')](_0x297943[_0x57fe('0x1e')],function(_0x3f9fed){return{'model':db[_0x3f9fed[_0x57fe('0x1f')]],'as':_0x3f9fed['as'],'attributes':_0x3f9fed[_0x57fe('0x20')],'include':_0x3f9fed['include']?_['map'](_0x3f9fed['include'],function(_0x3c5cf1){return{'model':db[_0x3c5cf1['model']],'as':_0x3c5cf1['as'],'attributes':_0x3c5cf1[_0x57fe('0x20')]};}):[]};}):[]};}):[]:[]})[_0x57fe('0xc')](function(_0x1b1bfa){logger[_0x57fe('0xd')](_0x57fe('0x17'),_0x2293c3);logger['debug'](_0x57fe('0x17'),_0x2293c3,JSON[_0x57fe('0x11')](_0x1b1bfa));_0x10eb36(_0x1b1bfa);})[_0x57fe('0x16')](function(_0x1f39a3){logger[_0x57fe('0x12')](_0x57fe('0x17'),_0x1f39a3[_0x57fe('0x14')],_0x2293c3);_0x454147(_0x5c5e0e['error'](0x1f4,_0x1f39a3[_0x57fe('0x14')]));});});};exports[_0x57fe('0x21')]=function(_0x5c797a){var _0x246f89=this;return new Promise(function(_0x25d8ce,_0x467dc2){return db['MemberReport'][_0x57fe('0x22')](_0x5c797a[_0x57fe('0x23')],{'raw':_0x5c797a[_0x57fe('0x1a')]?_0x5c797a[_0x57fe('0x1a')][_0x57fe('0x1b')]===undefined?!![]:![]:!![]})[_0x57fe('0xc')](function(_0x5d6b6e){logger[_0x57fe('0xd')](_0x57fe('0x21'),_0x5c797a);logger[_0x57fe('0xe')](_0x57fe('0x21'),_0x5c797a,JSON[_0x57fe('0x11')](_0x5d6b6e));_0x25d8ce(_0x5d6b6e);})[_0x57fe('0x16')](function(_0x135042){logger[_0x57fe('0x12')]('CreateMemberReport',_0x135042[_0x57fe('0x14')],_0x5c797a);_0x467dc2(_0x246f89[_0x57fe('0x12')](0x1f4,_0x135042[_0x57fe('0x14')]));});});};exports['UpdateMemberReport']=function(_0x5a81aa){var _0x27740b=this;return new Promise(function(_0x109c56,_0x2bcd1b){return db[_0x57fe('0x18')][_0x57fe('0x24')](_0x5a81aa[_0x57fe('0x23')],{'raw':_0x5a81aa[_0x57fe('0x1a')]?_0x5a81aa[_0x57fe('0x1a')][_0x57fe('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5a81aa[_0x57fe('0x1a')]?_0x5a81aa['options'][_0x57fe('0x1c')]||null:null,'attributes':_0x5a81aa['options']?_0x5a81aa[_0x57fe('0x1a')][_0x57fe('0x20')]||null:null,'limit':_0x5a81aa['options']?_0x5a81aa[_0x57fe('0x1a')][_0x57fe('0x25')]||null:null})[_0x57fe('0xc')](function(_0x361f9c){logger['info'](_0x57fe('0x26'),_0x5a81aa);logger[_0x57fe('0xe')]('UpdateMemberReport',_0x5a81aa,JSON['stringify'](_0x361f9c));_0x109c56(_0x361f9c);})['catch'](function(_0x4f35df){logger[_0x57fe('0x12')](_0x57fe('0x26'),_0x4f35df['message'],_0x5a81aa);_0x2bcd1b(_0x27740b[_0x57fe('0x12')](0x1f4,_0x4f35df[_0x57fe('0x14')]));});});};
\ No newline at end of file
index 00619f3..7888d89 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9242=['multer','path','connect-timeout','express','Router','../../components/interaction/service','get','index','exports'];(function(_0x245afe,_0x319cde){var _0x4eefde=function(_0x15a1fa){while(--_0x15a1fa){_0x245afe['push'](_0x245afe['shift']());}};_0x4eefde(++_0x319cde);}(_0x9242,0xd8));var _0x2924=function(_0x29632e,_0x5ecba4){_0x29632e=_0x29632e-0x0;var _0x426e04=_0x9242[_0x29632e];return _0x426e04;};'use strict';var multer=require(_0x2924('0x0'));var util=require('util');var path=require(_0x2924('0x1'));var timeout=require(_0x2924('0x2'));var express=require(_0x2924('0x3'));var router=express[_0x2924('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x2924('0x5'));var config=require('../../config/environment');var controller=require('./migration.controller');router[_0x2924('0x6')]('/',controller[_0x2924('0x7')]);module[_0x2924('0x8')]=router;
\ No newline at end of file
+var _0x3be1=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','exports','multer','util','path','connect-timeout'];(function(_0x622958,_0x1ab7ec){var _0x18bba6=function(_0x3f49dc){while(--_0x3f49dc){_0x622958['push'](_0x622958['shift']());}};_0x18bba6(++_0x1ab7ec);}(_0x3be1,0x17c));var _0x13be=function(_0x13a8ea,_0x43ed96){_0x13a8ea=_0x13a8ea-0x0;var _0x164ddd=_0x3be1[_0x13a8ea];return _0x164ddd;};'use strict';var multer=require(_0x13be('0x0'));var util=require(_0x13be('0x1'));var path=require(_0x13be('0x2'));var timeout=require(_0x13be('0x3'));var express=require(_0x13be('0x4'));var router=express[_0x13be('0x5')]();var auth=require(_0x13be('0x6'));var interaction=require(_0x13be('0x7'));var config=require(_0x13be('0x8'));var controller=require('./migration.controller');router[_0x13be('0x9')]('/',controller[_0x13be('0xa')]);module[_0x13be('0xb')]=router;
\ No newline at end of file
index 2663d1f..145bc65 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x853b=['version','exports','STRING'];(function(_0x3489f4,_0x2bc3dc){var _0x353e86=function(_0x241d21){while(--_0x241d21){_0x3489f4['push'](_0x3489f4['shift']());}};_0x353e86(++_0x2bc3dc);}(_0x853b,0x19f));var _0xb853=function(_0x432682,_0x253044){_0x432682=_0x432682-0x0;var _0x463d05=_0x853b[_0x432682];return _0x463d05;};'use strict';var Sequelize=require('sequelize');module[_0xb853('0x0')]={'version':{'type':Sequelize[_0xb853('0x1')],'unique':_0xb853('0x2')}};
\ No newline at end of file
+var _0xab20=['STRING','sequelize','exports'];(function(_0x3e5086,_0x48f4a2){var _0xfeb102=function(_0x5a945f){while(--_0x5a945f){_0x3e5086['push'](_0x3e5086['shift']());}};_0xfeb102(++_0x48f4a2);}(_0xab20,0x139));var _0x0ab2=function(_0x203ef8,_0x514416){_0x203ef8=_0x203ef8-0x0;var _0x24c824=_0xab20[_0x203ef8];return _0x24c824;};'use strict';var Sequelize=require(_0x0ab2('0x0'));module[_0x0ab2('0x1')]={'version':{'type':Sequelize[_0x0ab2('0x2')],'unique':'version'}};
\ No newline at end of file
index c2eb4f8..f9252f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b27=['../../mysqldb','sendStatus','end','count','offset','set','apply','reject','save','update','then','destroy','status','error','stack','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','limit','sort','filter','merge','where','Migration','include','findAll','rows','catch','fast-json-patch','request-promise','moment','bluebird','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'];(function(_0x2c08e1,_0x22bdf5){var _0x511e72=function(_0x10a92d){while(--_0x10a92d){_0x2c08e1['push'](_0x2c08e1['shift']());}};_0x511e72(++_0x22bdf5);}(_0x4b27,0xc9));var _0x74b2=function(_0x29a50d,_0x1319e8){_0x29a50d=_0x29a50d-0x0;var _0x3811d8=_0x4b27[_0x29a50d];return _0x3811d8;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x74b2('0x0'));var rp=require(_0x74b2('0x1'));var moment=require(_0x74b2('0x2'));var BPromise=require(_0x74b2('0x3'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0x74b2('0x4'));var ejs=require(_0x74b2('0x5'));var fs=require('fs');var _=require(_0x74b2('0x6'));var squel=require(_0x74b2('0x7'));var crypto=require(_0x74b2('0x8'));var jsforce=require(_0x74b2('0x9'));var deskjs=require('desk.js');var toCsv=require(_0x74b2('0x4'));var querystring=require('querystring');var Papa=require(_0x74b2('0xa'));var Redis=require(_0x74b2('0xb'));var authService=require(_0x74b2('0xc'));var qs=require(_0x74b2('0xd'));var hardwareService=require(_0x74b2('0xe'));var logger=require(_0x74b2('0xf'))(_0x74b2('0x10'));var utils=require(_0x74b2('0x11'));var config=require(_0x74b2('0x12'));var db=require(_0x74b2('0x13'))['db'];function respondWithStatusCode(_0x2e3c2e,_0x1cbdb4){_0x1cbdb4=_0x1cbdb4||0xcc;return function(_0x396da2){if(_0x396da2){return _0x2e3c2e[_0x74b2('0x14')](_0x1cbdb4);}return _0x2e3c2e['status'](_0x1cbdb4)[_0x74b2('0x15')]();};}function respondWithResult(_0x44a34b,_0x35d434){_0x35d434=_0x35d434||0xc8;return function(_0x532b33){if(_0x532b33){return _0x44a34b['status'](_0x35d434)['json'](_0x532b33);}};}function respondWithFilteredResult(_0x425d3d,_0x23138c){return function(_0x42a6c1){if(_0x42a6c1){var _0x3cebda=_0x42a6c1[_0x74b2('0x16')],_0x1c1753=_0x23138c[_0x74b2('0x17')],_0x4dc20c=_0x23138c[_0x74b2('0x17')]+_0x23138c['limit'],_0x1b0ed8;if(_0x4dc20c>=_0x3cebda){_0x4dc20c=_0x3cebda;_0x1b0ed8=0xc8;}else{_0x1b0ed8=0xce;}_0x425d3d['status'](_0x1b0ed8);return _0x425d3d[_0x74b2('0x18')]('Content-Range',_0x1c1753+'-'+_0x4dc20c+'/'+_0x3cebda)['json'](_0x42a6c1);}return null;};}function patchUpdates(_0x4f024f){return function(_0x4608a4){try{jsonpatch[_0x74b2('0x19')](_0x4608a4,_0x4f024f,!![]);}catch(_0x19b334){return BPromise[_0x74b2('0x1a')](_0x19b334);}return _0x4608a4[_0x74b2('0x1b')]();};}function saveUpdates(_0x287644,_0x4b9c34){return function(_0x208bdd){if(_0x208bdd){return _0x208bdd[_0x74b2('0x1c')](_0x287644)[_0x74b2('0x1d')](function(_0xc029a){return _0xc029a;});}return null;};}function removeEntity(_0x126e65,_0x3b5188){return function(_0x141d84){if(_0x141d84){return _0x141d84[_0x74b2('0x1e')]()[_0x74b2('0x1d')](function(){_0x126e65[_0x74b2('0x1f')](0xcc)[_0x74b2('0x15')]();});}};}function handleEntityNotFound(_0x30a9d1,_0x366d0f){return function(_0x5ecf84){if(!_0x5ecf84){_0x30a9d1[_0x74b2('0x14')](0x194);}return _0x5ecf84;};}function handleError(_0x1269a7,_0x1ce97d){_0x1ce97d=_0x1ce97d||0x1f4;return function(_0x4d6cfa){logger[_0x74b2('0x20')](_0x4d6cfa[_0x74b2('0x21')]);if(_0x4d6cfa['name']){delete _0x4d6cfa['name'];}_0x1269a7[_0x74b2('0x1f')](_0x1ce97d)[_0x74b2('0x22')](_0x4d6cfa);};}exports[_0x74b2('0x23')]=function(_0x5a3a92,_0x4dfb13){var _0x29a9f4={},_0x42ec15={},_0x57c6eb={'count':0x0,'rows':[]};var _0x284609=db['Migration'][_0x74b2('0x24')];_0x42ec15[_0x74b2('0x25')]=_[_0x74b2('0x26')](_0x284609);_0x42ec15[_0x74b2('0x27')]=_['keys'](_0x5a3a92['query']);_0x42ec15[_0x74b2('0x28')]=_[_0x74b2('0x29')](_0x42ec15[_0x74b2('0x25')],_0x42ec15[_0x74b2('0x27')]);_0x29a9f4[_0x74b2('0x2a')]=_[_0x74b2('0x29')](_0x42ec15[_0x74b2('0x25')],qs[_0x74b2('0x2b')](_0x5a3a92['query'][_0x74b2('0x2b')]));_0x29a9f4[_0x74b2('0x2a')]=_0x29a9f4['attributes'][_0x74b2('0x2c')]?_0x29a9f4[_0x74b2('0x2a')]:_0x42ec15[_0x74b2('0x25')];if(!_0x5a3a92[_0x74b2('0x27')]['hasOwnProperty']('nolimit')){_0x29a9f4[_0x74b2('0x2d')]=qs[_0x74b2('0x2d')](_0x5a3a92[_0x74b2('0x27')][_0x74b2('0x2d')]);_0x29a9f4[_0x74b2('0x17')]=qs[_0x74b2('0x17')](_0x5a3a92[_0x74b2('0x27')][_0x74b2('0x17')]);}_0x29a9f4['order']=qs[_0x74b2('0x2e')](_0x5a3a92[_0x74b2('0x27')][_0x74b2('0x2e')]);_0x29a9f4['where']=qs[_0x74b2('0x28')](_['pick'](_0x5a3a92[_0x74b2('0x27')],_0x42ec15['filters']));if(_0x5a3a92[_0x74b2('0x27')][_0x74b2('0x2f')]){_0x29a9f4['where']=_[_0x74b2('0x30')](_0x29a9f4[_0x74b2('0x31')],{'$or':_['map'](_0x284609,function(_0x23b3b5){if(_0x23b3b5['type']['key']!=='VIRTUAL'){var _0x4e9a4f={};_0x4e9a4f[_0x23b3b5['field']]={'$like':'%'+_0x5a3a92[_0x74b2('0x27')][_0x74b2('0x2f')]+'%'};return _0x4e9a4f;}})});}_0x29a9f4=_['merge']({},_0x29a9f4,_0x5a3a92['options']);var _0x39d20f={'where':_0x29a9f4[_0x74b2('0x31')]};return db[_0x74b2('0x32')][_0x74b2('0x16')](_0x39d20f)[_0x74b2('0x1d')](function(_0x386358){_0x57c6eb[_0x74b2('0x16')]=_0x386358;if(_0x5a3a92['query']['includeAll']){_0x29a9f4[_0x74b2('0x33')]=[{'all':!![]}];}return db['Migration'][_0x74b2('0x34')](_0x29a9f4);})[_0x74b2('0x1d')](function(_0x4bf568){_0x57c6eb[_0x74b2('0x35')]=_0x4bf568;return _0x57c6eb;})[_0x74b2('0x1d')](respondWithFilteredResult(_0x4dfb13,_0x29a9f4))[_0x74b2('0x36')](handleError(_0x4dfb13,null));};
\ No newline at end of file
+var _0x224d=['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','then','destroy','stack','name','send','Migration','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','map','VIRTUAL','field','merge','options','includeAll','include','rows','catch','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','path','sox','to-csv','ejs','lodash','crypto'];(function(_0x1ac016,_0x35c025){var _0x5a9c30=function(_0x50e9b2){while(--_0x50e9b2){_0x1ac016['push'](_0x1ac016['shift']());}};_0x5a9c30(++_0x35c025);}(_0x224d,0xf6));var _0xd224=function(_0x3d7de8,_0x2a2ec4){_0x3d7de8=_0x3d7de8-0x0;var _0x5e9a0c=_0x224d[_0x3d7de8];return _0x5e9a0c;};'use strict';var pdf=require(_0xd224('0x0'));var emlformat=require(_0xd224('0x1'));var rimraf=require(_0xd224('0x2'));var zipdir=require(_0xd224('0x3'));var jsonpatch=require(_0xd224('0x4'));var rp=require(_0xd224('0x5'));var moment=require('moment');var BPromise=require(_0xd224('0x6'));var Mustache=require(_0xd224('0x7'));var util=require('util');var path=require(_0xd224('0x8'));var sox=require(_0xd224('0x9'));var csv=require(_0xd224('0xa'));var ejs=require(_0xd224('0xb'));var fs=require('fs');var _=require(_0xd224('0xc'));var squel=require('squel');var crypto=require(_0xd224('0xd'));var jsforce=require('jsforce');var deskjs=require(_0xd224('0xe'));var toCsv=require(_0xd224('0xa'));var querystring=require(_0xd224('0xf'));var Papa=require(_0xd224('0x10'));var Redis=require(_0xd224('0x11'));var authService=require('../../components/auth/service');var qs=require(_0xd224('0x12'));var hardwareService=require(_0xd224('0x13'));var logger=require(_0xd224('0x14'))(_0xd224('0x15'));var utils=require(_0xd224('0x16'));var config=require(_0xd224('0x17'));var db=require(_0xd224('0x18'))['db'];function respondWithStatusCode(_0x30cfec,_0xd2fb64){_0xd2fb64=_0xd2fb64||0xcc;return function(_0x93a19){if(_0x93a19){return _0x30cfec[_0xd224('0x19')](_0xd2fb64);}return _0x30cfec[_0xd224('0x1a')](_0xd2fb64)[_0xd224('0x1b')]();};}function respondWithResult(_0x477baf,_0x131d78){_0x131d78=_0x131d78||0xc8;return function(_0x1c0800){if(_0x1c0800){return _0x477baf[_0xd224('0x1a')](_0x131d78)[_0xd224('0x1c')](_0x1c0800);}};}function respondWithFilteredResult(_0x543dd9,_0x44ae3f){return function(_0xad20bd){if(_0xad20bd){var _0x5c4299=_0xad20bd[_0xd224('0x1d')],_0x42afa3=_0x44ae3f[_0xd224('0x1e')],_0x8f9a44=_0x44ae3f['offset']+_0x44ae3f[_0xd224('0x1f')],_0x3929e1;if(_0x8f9a44>=_0x5c4299){_0x8f9a44=_0x5c4299;_0x3929e1=0xc8;}else{_0x3929e1=0xce;}_0x543dd9[_0xd224('0x1a')](_0x3929e1);return _0x543dd9[_0xd224('0x20')](_0xd224('0x21'),_0x42afa3+'-'+_0x8f9a44+'/'+_0x5c4299)[_0xd224('0x1c')](_0xad20bd);}return null;};}function patchUpdates(_0x34265c){return function(_0x3a0dd0){try{jsonpatch[_0xd224('0x22')](_0x3a0dd0,_0x34265c,!![]);}catch(_0x1e0da3){return BPromise[_0xd224('0x23')](_0x1e0da3);}return _0x3a0dd0['save']();};}function saveUpdates(_0x3acf3c,_0x4a51ff){return function(_0x35a7be){if(_0x35a7be){return _0x35a7be['update'](_0x3acf3c)[_0xd224('0x24')](function(_0x4e5fd7){return _0x4e5fd7;});}return null;};}function removeEntity(_0x14fa2c,_0x2122de){return function(_0x5b8af0){if(_0x5b8af0){return _0x5b8af0[_0xd224('0x25')]()[_0xd224('0x24')](function(){_0x14fa2c[_0xd224('0x1a')](0xcc)[_0xd224('0x1b')]();});}};}function handleEntityNotFound(_0x57ebb4,_0x5e610e){return function(_0x58a8f3){if(!_0x58a8f3){_0x57ebb4['sendStatus'](0x194);}return _0x58a8f3;};}function handleError(_0x4ffcd7,_0x53be66){_0x53be66=_0x53be66||0x1f4;return function(_0x195865){logger['error'](_0x195865[_0xd224('0x26')]);if(_0x195865[_0xd224('0x27')]){delete _0x195865[_0xd224('0x27')];}_0x4ffcd7[_0xd224('0x1a')](_0x53be66)[_0xd224('0x28')](_0x195865);};}exports['index']=function(_0x61587f,_0x951317){var _0x17766f={},_0x2ad5f9={},_0x30c3cb={'count':0x0,'rows':[]};var _0x2dfd27=db[_0xd224('0x29')]['rawAttributes'];_0x2ad5f9[_0xd224('0x2a')]=_[_0xd224('0x2b')](_0x2dfd27);_0x2ad5f9[_0xd224('0x2c')]=_[_0xd224('0x2b')](_0x61587f[_0xd224('0x2c')]);_0x2ad5f9[_0xd224('0x2d')]=_['intersection'](_0x2ad5f9[_0xd224('0x2a')],_0x2ad5f9[_0xd224('0x2c')]);_0x17766f[_0xd224('0x2e')]=_[_0xd224('0x2f')](_0x2ad5f9[_0xd224('0x2a')],qs[_0xd224('0x30')](_0x61587f[_0xd224('0x2c')][_0xd224('0x30')]));_0x17766f[_0xd224('0x2e')]=_0x17766f[_0xd224('0x2e')][_0xd224('0x31')]?_0x17766f[_0xd224('0x2e')]:_0x2ad5f9[_0xd224('0x2a')];if(!_0x61587f['query'][_0xd224('0x32')](_0xd224('0x33'))){_0x17766f[_0xd224('0x1f')]=qs['limit'](_0x61587f[_0xd224('0x2c')]['limit']);_0x17766f[_0xd224('0x1e')]=qs[_0xd224('0x1e')](_0x61587f['query']['offset']);}_0x17766f[_0xd224('0x34')]=qs[_0xd224('0x35')](_0x61587f[_0xd224('0x2c')][_0xd224('0x35')]);_0x17766f[_0xd224('0x36')]=qs['filters'](_['pick'](_0x61587f['query'],_0x2ad5f9['filters']));if(_0x61587f[_0xd224('0x2c')][_0xd224('0x37')]){_0x17766f[_0xd224('0x36')]=_['merge'](_0x17766f[_0xd224('0x36')],{'$or':_[_0xd224('0x38')](_0x2dfd27,function(_0x3d285f){if(_0x3d285f['type']['key']!==_0xd224('0x39')){var _0x25221e={};_0x25221e[_0x3d285f[_0xd224('0x3a')]]={'$like':'%'+_0x61587f[_0xd224('0x2c')][_0xd224('0x37')]+'%'};return _0x25221e;}})});}_0x17766f=_[_0xd224('0x3b')]({},_0x17766f,_0x61587f[_0xd224('0x3c')]);var _0x32d593={'where':_0x17766f[_0xd224('0x36')]};return db[_0xd224('0x29')][_0xd224('0x1d')](_0x32d593)[_0xd224('0x24')](function(_0xbf4d7b){_0x30c3cb['count']=_0xbf4d7b;if(_0x61587f['query'][_0xd224('0x3d')]){_0x17766f[_0xd224('0x3e')]=[{'all':!![]}];}return db[_0xd224('0x29')]['findAll'](_0x17766f);})[_0xd224('0x24')](function(_0x464d95){_0x30c3cb[_0xd224('0x3f')]=_0x464d95;return _0x30c3cb;})[_0xd224('0x24')](respondWithFilteredResult(_0x951317,_0x17766f))[_0xd224('0x40')](handleError(_0x951317,null));};
\ No newline at end of file
index eaff6c1..8b4b20d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7205=['util','../../config/logger','api','moment','request-promise','rimraf','../../config/environment','./migration.attributes','exports','define','Migration','migrations'];(function(_0x625b5a,_0x11fff9){var _0x5cb2fc=function(_0x1cf16a){while(--_0x1cf16a){_0x625b5a['push'](_0x625b5a['shift']());}};_0x5cb2fc(++_0x11fff9);}(_0x7205,0x108));var _0x5720=function(_0xcaca00,_0x4259e7){_0xcaca00=_0xcaca00-0x0;var _0x557338=_0x7205[_0xcaca00];return _0x557338;};'use strict';var _=require('lodash');var util=require(_0x5720('0x0'));var logger=require(_0x5720('0x1'))(_0x5720('0x2'));var moment=require(_0x5720('0x3'));var BPromise=require('bluebird');var rp=require(_0x5720('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x5720('0x5'));var config=require(_0x5720('0x6'));var attributes=require(_0x5720('0x7'));module[_0x5720('0x8')]=function(_0x321dcd,_0x5c917e){return _0x321dcd[_0x5720('0x9')](_0x5720('0xa'),attributes,{'tableName':_0x5720('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6ede=['../../config/environment','./migration.attributes','exports','define','migrations','lodash','util','api','moment','bluebird','path','rimraf'];(function(_0x3ce174,_0x25fc4b){var _0x454db5=function(_0x4944c2){while(--_0x4944c2){_0x3ce174['push'](_0x3ce174['shift']());}};_0x454db5(++_0x25fc4b);}(_0x6ede,0x1c1));var _0xe6ed=function(_0x28be72,_0x2b83af){_0x28be72=_0x28be72-0x0;var _0x46c5da=_0x6ede[_0x28be72];return _0x46c5da;};'use strict';var _=require(_0xe6ed('0x0'));var util=require(_0xe6ed('0x1'));var logger=require('../../config/logger')(_0xe6ed('0x2'));var moment=require(_0xe6ed('0x3'));var BPromise=require(_0xe6ed('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xe6ed('0x5'));var rimraf=require(_0xe6ed('0x6'));var config=require(_0xe6ed('0x7'));var attributes=require(_0xe6ed('0x8'));module[_0xe6ed('0x9')]=function(_0x490609,_0x271bab){return _0x490609[_0xe6ed('0xa')]('Migration',attributes,{'tableName':_0xe6ed('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2428503..b121c57 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x29d4=['request\x20sent','Migration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','Migration,\x20%s,\x20%s'];(function(_0x10af1b,_0x42f5c3){var _0x11b012=function(_0x32b2de){while(--_0x32b2de){_0x10af1b['push'](_0x10af1b['shift']());}};_0x11b012(++_0x42f5c3);}(_0x29d4,0x1a1));var _0x429d=function(_0x3b5250,_0x7a0b2c){_0x3b5250=_0x3b5250-0x0;var _0xc844a1=_0x29d4[_0x3b5250];return _0xc844a1;};'use strict';var _=require(_0x429d('0x0'));var util=require('util');var moment=require(_0x429d('0x1'));var BPromise=require(_0x429d('0x2'));var rs=require(_0x429d('0x3'));var fs=require('fs');var Redis=require(_0x429d('0x4'));var db=require(_0x429d('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x429d('0x6'))(_0x429d('0x7'));var config=require(_0x429d('0x8'));var jayson=require(_0x429d('0x9'));var client=jayson[_0x429d('0xa')][_0x429d('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x56aa2f,_0x1ede3f,_0x4befb9){return new BPromise(function(_0x9fc337,_0x47cb29){return client[_0x429d('0xc')](_0x56aa2f,_0x4befb9)[_0x429d('0xd')](function(_0xe6f5b4){logger['info'](_0x429d('0xe'),_0x1ede3f,_0x429d('0xf'));logger['debug'](_0x429d('0x10'),_0x1ede3f,_0x429d('0xf'),JSON[_0x429d('0x11')](_0xe6f5b4));if(_0xe6f5b4['error']){if(_0xe6f5b4[_0x429d('0x12')][_0x429d('0x13')]===0x1f4){logger[_0x429d('0x12')](_0x429d('0xe'),_0x1ede3f,_0xe6f5b4['error'][_0x429d('0x14')]);return _0x47cb29(_0xe6f5b4[_0x429d('0x12')][_0x429d('0x14')]);}logger['error'](_0x429d('0xe'),_0x1ede3f,_0xe6f5b4[_0x429d('0x12')]['message']);return _0x9fc337(_0xe6f5b4[_0x429d('0x12')][_0x429d('0x14')]);}else{logger[_0x429d('0x15')](_0x429d('0xe'),_0x1ede3f,_0x429d('0xf'));_0x9fc337(_0xe6f5b4[_0x429d('0x16')]['message']);}})[_0x429d('0x17')](function(_0x53d19d){logger[_0x429d('0x12')](_0x429d('0xe'),_0x1ede3f,_0x53d19d);_0x47cb29(_0x53d19d);});});}
\ No newline at end of file
+var _0x72b1=['stringify','error','Migration,\x20%s,\x20%s','message','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','Migration,\x20%s,\x20%s,\x20%s'];(function(_0x5b4378,_0x9a8bde){var _0x14ca0e=function(_0x3ab78c){while(--_0x3ab78c){_0x5b4378['push'](_0x5b4378['shift']());}};_0x14ca0e(++_0x9a8bde);}(_0x72b1,0x16e));var _0x172b=function(_0x4ab0f0,_0x1e72dc){_0x4ab0f0=_0x4ab0f0-0x0;var _0x5cebfb=_0x72b1[_0x4ab0f0];return _0x5cebfb;};'use strict';var _=require(_0x172b('0x0'));var util=require('util');var moment=require(_0x172b('0x1'));var BPromise=require(_0x172b('0x2'));var rs=require(_0x172b('0x3'));var fs=require('fs');var Redis=require(_0x172b('0x4'));var db=require(_0x172b('0x5'))['db'];var utils=require(_0x172b('0x6'));var logger=require(_0x172b('0x7'))('rpc');var config=require(_0x172b('0x8'));var jayson=require(_0x172b('0x9'));var client=jayson[_0x172b('0xa')][_0x172b('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x571994,_0x345e5e,_0x517363){return new BPromise(function(_0x1f98e9,_0x531b10){return client[_0x172b('0xc')](_0x571994,_0x517363)[_0x172b('0xd')](function(_0x977f18){logger[_0x172b('0xe')]('Migration,\x20%s,\x20%s',_0x345e5e,_0x172b('0xf'));logger[_0x172b('0x10')](_0x172b('0x11'),_0x345e5e,_0x172b('0xf'),JSON[_0x172b('0x12')](_0x977f18));if(_0x977f18[_0x172b('0x13')]){if(_0x977f18[_0x172b('0x13')]['code']===0x1f4){logger[_0x172b('0x13')](_0x172b('0x14'),_0x345e5e,_0x977f18[_0x172b('0x13')]['message']);return _0x531b10(_0x977f18[_0x172b('0x13')]['message']);}logger[_0x172b('0x13')](_0x172b('0x14'),_0x345e5e,_0x977f18['error'][_0x172b('0x15')]);return _0x1f98e9(_0x977f18[_0x172b('0x13')][_0x172b('0x15')]);}else{logger[_0x172b('0xe')]('Migration,\x20%s,\x20%s',_0x345e5e,'request\x20sent');_0x1f98e9(_0x977f18[_0x172b('0x16')][_0x172b('0x15')]);}})[_0x172b('0x17')](function(_0x3c7fff){logger['error']('Migration,\x20%s,\x20%s',_0x345e5e,_0x3c7fff);_0x531b10(_0x3c7fff);});});}
\ No newline at end of file
index 09938bf..f2c08d6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b7f=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./network.controller','get','isAuthenticated','index','/:id','show','post','update','delete','destroy','exports'];(function(_0x2c7618,_0x26be9c){var _0x5ce3f0=function(_0x1837b3){while(--_0x1837b3){_0x2c7618['push'](_0x2c7618['shift']());}};_0x5ce3f0(++_0x26be9c);}(_0x5b7f,0x8c));var _0xf5b7=function(_0x31224e,_0x28457d){_0x31224e=_0x31224e-0x0;var _0x499ff7=_0x5b7f[_0x31224e];return _0x499ff7;};'use strict';var multer=require(_0xf5b7('0x0'));var util=require(_0xf5b7('0x1'));var path=require(_0xf5b7('0x2'));var timeout=require(_0xf5b7('0x3'));var express=require(_0xf5b7('0x4'));var router=express[_0xf5b7('0x5')]();var auth=require(_0xf5b7('0x6'));var interaction=require(_0xf5b7('0x7'));var config=require(_0xf5b7('0x8'));var controller=require(_0xf5b7('0x9'));router[_0xf5b7('0xa')]('/',auth[_0xf5b7('0xb')](),controller[_0xf5b7('0xc')]);router[_0xf5b7('0xa')](_0xf5b7('0xd'),auth[_0xf5b7('0xb')](),controller[_0xf5b7('0xe')]);router[_0xf5b7('0xf')]('/',auth['isAuthenticated'](),controller['create']);router['put'](_0xf5b7('0xd'),auth[_0xf5b7('0xb')](),controller[_0xf5b7('0x10')]);router[_0xf5b7('0x11')](_0xf5b7('0xd'),auth[_0xf5b7('0xb')](),controller[_0xf5b7('0x12')]);module[_0xf5b7('0x13')]=router;
\ No newline at end of file
+var _0x9dd0=['../../components/interaction/service','../../config/environment','./network.controller','get','isAuthenticated','/:id','show','post','put','update','exports','multer','util','express','Router','../../components/auth/service'];(function(_0x27cc9d,_0x418e88){var _0x4c1360=function(_0x55569b){while(--_0x55569b){_0x27cc9d['push'](_0x27cc9d['shift']());}};_0x4c1360(++_0x418e88);}(_0x9dd0,0x1bb));var _0x09dd=function(_0x245a7d,_0x253c2f){_0x245a7d=_0x245a7d-0x0;var _0x24789d=_0x9dd0[_0x245a7d];return _0x24789d;};'use strict';var multer=require(_0x09dd('0x0'));var util=require(_0x09dd('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x09dd('0x2'));var router=express[_0x09dd('0x3')]();var auth=require(_0x09dd('0x4'));var interaction=require(_0x09dd('0x5'));var config=require(_0x09dd('0x6'));var controller=require(_0x09dd('0x7'));router[_0x09dd('0x8')]('/',auth[_0x09dd('0x9')](),controller['index']);router['get'](_0x09dd('0xa'),auth[_0x09dd('0x9')](),controller[_0x09dd('0xb')]);router[_0x09dd('0xc')]('/',auth[_0x09dd('0x9')](),controller['create']);router[_0x09dd('0xd')](_0x09dd('0xa'),auth[_0x09dd('0x9')](),controller[_0x09dd('0xe')]);router['delete'](_0x09dd('0xa'),auth[_0x09dd('0x9')](),controller['destroy']);module[_0x09dd('0xf')]=router;
\ No newline at end of file
index 8b8d3db..00665c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd994=['localnet','STRING','sequelize','ENUM'];(function(_0x2c4c06,_0x2a3f11){var _0x3cbd18=function(_0x30a9bd){while(--_0x30a9bd){_0x2c4c06['push'](_0x2c4c06['shift']());}};_0x3cbd18(++_0x2a3f11);}(_0xd994,0xda));var _0x4d99=function(_0x265dcf,_0x32ab85){_0x265dcf=_0x265dcf-0x0;var _0x47d3d8=_0xd994[_0x265dcf];return _0x47d3d8;};'use strict';var Sequelize=require(_0x4d99('0x0'));module['exports']={'type':{'type':Sequelize[_0x4d99('0x1')](_0x4d99('0x2'),'externip')},'value':{'type':Sequelize[_0x4d99('0x3')]}};
\ No newline at end of file
+var _0xa4c7=['localnet','externip','STRING','sequelize','ENUM'];(function(_0x105e07,_0x28fc57){var _0x1975c7=function(_0x420539){while(--_0x420539){_0x105e07['push'](_0x105e07['shift']());}};_0x1975c7(++_0x28fc57);}(_0xa4c7,0x1c5));var _0x7a4c=function(_0x3235e1,_0x5824c5){_0x3235e1=_0x3235e1-0x0;var _0x5bee47=_0xa4c7[_0x3235e1];return _0x5bee47;};'use strict';var Sequelize=require(_0x7a4c('0x0'));module['exports']={'type':{'type':Sequelize[_0x7a4c('0x1')](_0x7a4c('0x2'),_0x7a4c('0x3'))},'value':{'type':Sequelize[_0x7a4c('0x4')]}};
\ No newline at end of file
index f1d9ca7..16e9ee8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b0e=['find','catch','create','transaction','body','join','root','server/files/templates/network.ejs','utf8','render','format','/etc/asterisk/sip_xcally_%s.conf','toLowerCase','Reload','chan_sip.so','sequelize','params','readFileSync','writeFileSync','html-pdf','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','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','Network,\x20%s,\x20%s','request\x20sent','code','error','message','result','sendStatus','end','status','json','offset','limit','set','Content-Range','apply','save','update','destroy','stack','name','send','Network','keys','query','filters','model','attributes','intersection','fields','length','nolimit','order','sort','where','merge','map','type','key','VIRTUAL','filter','count','then','includeAll','include','findAll','rows'];(function(_0x215e65,_0x183f97){var _0xa85842=function(_0x43bf45){while(--_0x43bf45){_0x215e65['push'](_0x215e65['shift']());}};_0xa85842(++_0x183f97);}(_0x0b0e,0x187));var _0xe0b0=function(_0x246890,_0x46b964){_0x246890=_0x246890-0x0;var _0x2b2a5a=_0x0b0e[_0x246890];return _0x2b2a5a;};'use strict';var pdf=require(_0xe0b0('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xe0b0('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xe0b0('0x2'));var rp=require(_0xe0b0('0x3'));var moment=require(_0xe0b0('0x4'));var BPromise=require(_0xe0b0('0x5'));var Mustache=require(_0xe0b0('0x6'));var util=require(_0xe0b0('0x7'));var path=require(_0xe0b0('0x8'));var sox=require(_0xe0b0('0x9'));var csv=require(_0xe0b0('0xa'));var ejs=require(_0xe0b0('0xb'));var fs=require('fs');var _=require(_0xe0b0('0xc'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xe0b0('0xd'));var deskjs=require(_0xe0b0('0xe'));var toCsv=require(_0xe0b0('0xa'));var querystring=require(_0xe0b0('0xf'));var Papa=require('papaparse');var Redis=require(_0xe0b0('0x10'));var authService=require(_0xe0b0('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xe0b0('0x12'));var logger=require(_0xe0b0('0x13'))('api');var utils=require(_0xe0b0('0x14'));var config=require(_0xe0b0('0x15'));var db=require(_0xe0b0('0x16'))['db'];var jayson=require('jayson/promise');var client=jayson[_0xe0b0('0x17')][_0xe0b0('0x18')]({'port':0x232a});function checkPasswordPattern(_0x3cc19a,_0x45f914,_0x34fed4){if(_0x34fed4){var _0x4d2bf7=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x4d2bf7[_0xe0b0('0x19')](_0x45f914)){return _0x3cc19a;}else{throw new Error(_0xe0b0('0x1a'));}}else{return _0x3cc19a;}}function respondWithRpcPromise(_0x743318,_0x24babd,_0x177c24,_0x55d884){return new BPromise(function(_0x41a7e2,_0x5adb01){var _0x35cb40=_0x55d884||client;return _0x35cb40[_0xe0b0('0x1b')](_0x743318,_0x177c24)['then'](function(_0x11fdca){logger['info'](_0xe0b0('0x1c'),_0x24babd,_0xe0b0('0x1d'));logger['debug']('Network,\x20%s,\x20%s,\x20%s',_0x24babd,_0xe0b0('0x1d'),JSON['stringify'](_0x11fdca));if(_0x11fdca['error']){if(_0x11fdca['error'][_0xe0b0('0x1e')]===0x1f4){logger['error']('Network,\x20%s,\x20%s',_0x24babd,_0x11fdca[_0xe0b0('0x1f')]['message']);return _0x5adb01(_0x11fdca[_0xe0b0('0x1f')]['message']);}logger[_0xe0b0('0x1f')](_0xe0b0('0x1c'),_0x24babd,_0x11fdca[_0xe0b0('0x1f')][_0xe0b0('0x20')]);return _0x41a7e2(_0x11fdca[_0xe0b0('0x1f')]['message']);}else{logger['info'](_0xe0b0('0x1c'),_0x24babd,'request\x20sent');_0x41a7e2(_0x11fdca[_0xe0b0('0x21')][_0xe0b0('0x20')]);}})['catch'](function(_0x170ad8){logger['error'](_0xe0b0('0x1c'),_0x24babd,_0x170ad8);_0x5adb01(_0x170ad8);});});}function respondWithStatusCode(_0x49a727,_0x28586d){_0x28586d=_0x28586d||0xcc;return function(_0x576352){if(_0x576352){return _0x49a727[_0xe0b0('0x22')](_0x28586d);}return _0x49a727['status'](_0x28586d)[_0xe0b0('0x23')]();};}function respondWithResult(_0x4aafbe,_0x3c221d){_0x3c221d=_0x3c221d||0xc8;return function(_0x5c5317){if(_0x5c5317){return _0x4aafbe[_0xe0b0('0x24')](_0x3c221d)[_0xe0b0('0x25')](_0x5c5317);}};}function respondWithFilteredResult(_0x1f1ebd,_0x1d91ad){return function(_0x3ec2){if(_0x3ec2){var _0x10745d=_0x3ec2['count'],_0x5200a6=_0x1d91ad[_0xe0b0('0x26')],_0x1444b9=_0x1d91ad[_0xe0b0('0x26')]+_0x1d91ad[_0xe0b0('0x27')],_0x1b8aa8;if(_0x1444b9>=_0x10745d){_0x1444b9=_0x10745d;_0x1b8aa8=0xc8;}else{_0x1b8aa8=0xce;}_0x1f1ebd[_0xe0b0('0x24')](_0x1b8aa8);return _0x1f1ebd[_0xe0b0('0x28')](_0xe0b0('0x29'),_0x5200a6+'-'+_0x1444b9+'/'+_0x10745d)[_0xe0b0('0x25')](_0x3ec2);}return null;};}function patchUpdates(_0x4fb3b7){return function(_0x1854b8){try{jsonpatch[_0xe0b0('0x2a')](_0x1854b8,_0x4fb3b7,!![]);}catch(_0x48a9b5){return BPromise['reject'](_0x48a9b5);}return _0x1854b8[_0xe0b0('0x2b')]();};}function saveUpdates(_0x33e672,_0x422575){return function(_0x3f81d5){if(_0x3f81d5){return _0x3f81d5[_0xe0b0('0x2c')](_0x33e672)['then'](function(_0x32acfe){return _0x32acfe;});}return null;};}function removeEntity(_0x3231fc,_0x7867c4){return function(_0x29d725){if(_0x29d725){return _0x29d725[_0xe0b0('0x2d')]()['then'](function(){_0x3231fc[_0xe0b0('0x24')](0xcc)[_0xe0b0('0x23')]();});}};}function handleEntityNotFound(_0xfc51d3,_0x31c6f5){return function(_0x3575bc){if(!_0x3575bc){_0xfc51d3[_0xe0b0('0x22')](0x194);}return _0x3575bc;};}function handleError(_0xf54999,_0x20908f){_0x20908f=_0x20908f||0x1f4;return function(_0x2125d5){logger[_0xe0b0('0x1f')](_0x2125d5[_0xe0b0('0x2e')]);if(_0x2125d5[_0xe0b0('0x2f')]){delete _0x2125d5[_0xe0b0('0x2f')];}_0xf54999[_0xe0b0('0x24')](_0x20908f)[_0xe0b0('0x30')](_0x2125d5);};}exports['index']=function(_0x121608,_0x135be5){var _0xace58a={},_0x1eb3f9={},_0x1a2d24={'count':0x0,'rows':[]};var _0x2c6e60=db[_0xe0b0('0x31')]['rawAttributes'];_0x1eb3f9['model']=_['keys'](_0x2c6e60);_0x1eb3f9['query']=_[_0xe0b0('0x32')](_0x121608[_0xe0b0('0x33')]);_0x1eb3f9[_0xe0b0('0x34')]=_['intersection'](_0x1eb3f9[_0xe0b0('0x35')],_0x1eb3f9[_0xe0b0('0x33')]);_0xace58a[_0xe0b0('0x36')]=_[_0xe0b0('0x37')](_0x1eb3f9['model'],qs[_0xe0b0('0x38')](_0x121608[_0xe0b0('0x33')][_0xe0b0('0x38')]));_0xace58a[_0xe0b0('0x36')]=_0xace58a[_0xe0b0('0x36')][_0xe0b0('0x39')]?_0xace58a[_0xe0b0('0x36')]:_0x1eb3f9[_0xe0b0('0x35')];if(!_0x121608[_0xe0b0('0x33')]['hasOwnProperty'](_0xe0b0('0x3a'))){_0xace58a['limit']=qs[_0xe0b0('0x27')](_0x121608[_0xe0b0('0x33')][_0xe0b0('0x27')]);_0xace58a[_0xe0b0('0x26')]=qs['offset'](_0x121608[_0xe0b0('0x33')][_0xe0b0('0x26')]);}_0xace58a[_0xe0b0('0x3b')]=qs[_0xe0b0('0x3c')](_0x121608[_0xe0b0('0x33')][_0xe0b0('0x3c')]);_0xace58a[_0xe0b0('0x3d')]=qs[_0xe0b0('0x34')](_['pick'](_0x121608[_0xe0b0('0x33')],_0x1eb3f9[_0xe0b0('0x34')]));if(_0x121608['query']['filter']){_0xace58a[_0xe0b0('0x3d')]=_[_0xe0b0('0x3e')](_0xace58a['where'],{'$or':_[_0xe0b0('0x3f')](_0x2c6e60,function(_0x285d61){if(_0x285d61[_0xe0b0('0x40')][_0xe0b0('0x41')]!==_0xe0b0('0x42')){var _0x5c31b5={};_0x5c31b5[_0x285d61['field']]={'$like':'%'+_0x121608['query'][_0xe0b0('0x43')]+'%'};return _0x5c31b5;}})});}_0xace58a=_[_0xe0b0('0x3e')]({},_0xace58a,_0x121608['options']);var _0x9f7459={'where':_0xace58a[_0xe0b0('0x3d')]};return db[_0xe0b0('0x31')][_0xe0b0('0x44')](_0x9f7459)[_0xe0b0('0x45')](function(_0x5c6f94){_0x1a2d24['count']=_0x5c6f94;if(_0x121608[_0xe0b0('0x33')][_0xe0b0('0x46')]){_0xace58a[_0xe0b0('0x47')]=[{'all':!![]}];}return db[_0xe0b0('0x31')][_0xe0b0('0x48')](_0xace58a);})['then'](function(_0x3b1474){_0x1a2d24[_0xe0b0('0x49')]=_0x3b1474;return _0x1a2d24;})['then'](respondWithFilteredResult(_0x135be5,_0xace58a))['catch'](handleError(_0x135be5,null));};exports['show']=function(_0x1b7777,_0x2184d3){var _0x2419ce={'raw':!![],'where':{'id':_0x1b7777['params']['id']}},_0x364877={};_0x364877[_0xe0b0('0x35')]=_[_0xe0b0('0x32')](db['Network']['rawAttributes']);_0x364877[_0xe0b0('0x33')]=_[_0xe0b0('0x32')](_0x1b7777['query']);_0x364877[_0xe0b0('0x34')]=_[_0xe0b0('0x37')](_0x364877['model'],_0x364877['query']);_0x2419ce[_0xe0b0('0x36')]=_['intersection'](_0x364877[_0xe0b0('0x35')],qs[_0xe0b0('0x38')](_0x1b7777[_0xe0b0('0x33')][_0xe0b0('0x38')]));_0x2419ce[_0xe0b0('0x36')]=_0x2419ce[_0xe0b0('0x36')]['length']?_0x2419ce['attributes']:_0x364877[_0xe0b0('0x35')];if(_0x1b7777['query']['includeAll']){_0x2419ce[_0xe0b0('0x47')]=[{'all':!![]}];}_0x2419ce=_[_0xe0b0('0x3e')]({},_0x2419ce,_0x1b7777['options']);return db['Network'][_0xe0b0('0x4a')](_0x2419ce)[_0xe0b0('0x45')](handleEntityNotFound(_0x2184d3,null))[_0xe0b0('0x45')](respondWithResult(_0x2184d3,null))[_0xe0b0('0x4b')](handleError(_0x2184d3,null));};exports[_0xe0b0('0x4c')]=function(_0x24115f,_0x84fabb,_0x4ebb0f){var _0x22c7bc;return db['sequelize'][_0xe0b0('0x4d')](function(_0x54106c){return db['Network'][_0xe0b0('0x4c')](_0x24115f[_0xe0b0('0x4e')],{'raw':!![]})[_0xe0b0('0x45')](function(_0x2f1712){_0x22c7bc=_0x2f1712;return db[_0xe0b0('0x31')][_0xe0b0('0x48')]({'where':{'type':_0x24115f[_0xe0b0('0x4e')][_0xe0b0('0x40')]},'raw':!![]});})[_0xe0b0('0x45')](function(_0x4e0d87){var _0x253ab0=fs['readFileSync'](path[_0xe0b0('0x4f')](config[_0xe0b0('0x50')],_0xe0b0('0x51')),_0xe0b0('0x52'));var _0x2c7fb0=ejs[_0xe0b0('0x53')](_0x253ab0,{'networks':_0x4e0d87||[]});fs['writeFileSync'](util[_0xe0b0('0x54')](_0xe0b0('0x55'),_0x24115f[_0xe0b0('0x4e')][_0xe0b0('0x40')][_0xe0b0('0x56')]()),_0x2c7fb0);})[_0xe0b0('0x45')](function(){return respondWithRpcPromise(_0xe0b0('0x57'),_0xe0b0('0x4c'),{'module':_0xe0b0('0x58')});})[_0xe0b0('0x45')](function(){return _0x22c7bc;});})[_0xe0b0('0x45')](respondWithResult(_0x84fabb,0xc9))[_0xe0b0('0x4b')](handleError(_0x84fabb,null));};exports[_0xe0b0('0x2c')]=function(_0x10eb99,_0xcdf97,_0x34c642){var _0x4c7661;return db[_0xe0b0('0x59')]['transaction'](function(_0x46627e){return db[_0xe0b0('0x31')][_0xe0b0('0x4a')]({'where':{'id':_0x10eb99[_0xe0b0('0x5a')]['id']}})[_0xe0b0('0x45')](handleEntityNotFound(_0xcdf97,null))[_0xe0b0('0x45')](saveUpdates(_0x10eb99[_0xe0b0('0x4e')],null))['then'](function(_0x47dcc4){if(_0x47dcc4){_0x4c7661=_0x47dcc4;return db[_0xe0b0('0x31')][_0xe0b0('0x48')]({'where':{'type':_0x4c7661[_0xe0b0('0x40')]},'raw':!![]});}return null;})['then'](function(_0x117d20){if(_0x117d20){var _0x13fb4b=fs[_0xe0b0('0x5b')](path[_0xe0b0('0x4f')](config[_0xe0b0('0x50')],'server/files/templates/network.ejs'),_0xe0b0('0x52'));var _0x242120=ejs[_0xe0b0('0x53')](_0x13fb4b,{'networks':_0x117d20||[]});fs['writeFileSync'](util[_0xe0b0('0x54')](_0xe0b0('0x55'),_0x4c7661['type'][_0xe0b0('0x56')]()),_0x242120);return respondWithRpcPromise('Reload','update',{'module':_0xe0b0('0x58')});}return null;})['then'](function(_0x4d75e4){if(_0x4d75e4){return _0x4c7661;}return null;});})[_0xe0b0('0x45')](respondWithResult(_0xcdf97,null))[_0xe0b0('0x4b')](handleError(_0xcdf97,null));};exports[_0xe0b0('0x2d')]=function(_0x1a4fad,_0x5a7913,_0x3679e0){var _0x2287a5;return db[_0xe0b0('0x31')][_0xe0b0('0x4a')]({'where':{'id':_0x1a4fad[_0xe0b0('0x5a')]['id']}})[_0xe0b0('0x45')](function(_0xc5e88c){_0x2287a5=_0xc5e88c;return _0xc5e88c;})[_0xe0b0('0x45')](handleEntityNotFound(_0x5a7913,null))['then'](removeEntity(_0x5a7913,null))['then'](function(){if(_0x2287a5){return db[_0xe0b0('0x31')][_0xe0b0('0x48')]({'where':{'type':_0x2287a5[_0xe0b0('0x40')]},'raw':!![]});}})['then'](function(_0x49b754){if(_0x49b754){var _0x2eb16f=fs[_0xe0b0('0x5b')](path['join'](config['root'],_0xe0b0('0x51')),_0xe0b0('0x52'));var _0x38eb8e=ejs[_0xe0b0('0x53')](_0x2eb16f,{'networks':_0x49b754||[]});fs[_0xe0b0('0x5c')](util[_0xe0b0('0x54')](_0xe0b0('0x55'),_0x2287a5[_0xe0b0('0x40')]['toLowerCase']()),_0x38eb8e);return respondWithRpcPromise(_0xe0b0('0x57'),_0xe0b0('0x2d'),{'module':_0xe0b0('0x58')});}})['catch'](handleError(_0x5a7913,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(_0x5c3c0b,_0x4ee35e){var _0x52ecd2=function(_0x3cf575){while(--_0x3cf575){_0x5c3c0b['push'](_0x5c3c0b['shift']());}};_0x52ecd2(++_0x4ee35e);}(_0xadb5,0xad));var _0x5adb=function(_0x1c99b0,_0x2fa792){_0x1c99b0=_0x1c99b0-0x0;var _0x41a947=_0xadb5[_0x1c99b0];return _0x41a947;};'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 87da9ce..e359cbf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0899=['define','Network','network','util','../../config/logger','bluebird','path','../../config/environment','./network.attributes','exports'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x0899,0xb7));var _0x9089=function(_0x5285f9,_0x2bd7d7){_0x5285f9=_0x5285f9-0x0;var _0x6edc0c=_0x0899[_0x5285f9];return _0x6edc0c;};'use strict';var _=require('lodash');var util=require(_0x9089('0x0'));var logger=require(_0x9089('0x1'))('api');var moment=require('moment');var BPromise=require(_0x9089('0x2'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x9089('0x3'));var rimraf=require('rimraf');var config=require(_0x9089('0x4'));var attributes=require(_0x9089('0x5'));module[_0x9089('0x6')]=function(_0x58bc42,_0x2c639c){return _0x58bc42[_0x9089('0x7')](_0x9089('0x8'),attributes,{'tableName':_0x9089('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1583=['./network.attributes','exports','network','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','../../config/environment'];(function(_0x6c993a,_0x5ea3ab){var _0x27f547=function(_0x22df20){while(--_0x22df20){_0x6c993a['push'](_0x6c993a['shift']());}};_0x27f547(++_0x5ea3ab);}(_0x1583,0x13b));var _0x3158=function(_0xc269d5,_0x5bf5fd){_0xc269d5=_0xc269d5-0x0;var _0x4f1e1c=_0x1583[_0xc269d5];return _0x4f1e1c;};'use strict';var _=require(_0x3158('0x0'));var util=require(_0x3158('0x1'));var logger=require(_0x3158('0x2'))(_0x3158('0x3'));var moment=require(_0x3158('0x4'));var BPromise=require(_0x3158('0x5'));var rp=require(_0x3158('0x6'));var fs=require('fs');var path=require(_0x3158('0x7'));var rimraf=require('rimraf');var config=require(_0x3158('0x8'));var attributes=require(_0x3158('0x9'));module[_0x3158('0xa')]=function(_0x197394,_0x2802ae){return _0x197394['define']('Network',attributes,{'tableName':_0x3158('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 031eb16..89deaa1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x741c=['Network,\x20%s,\x20%s,\x20%s','stringify','error','message','info','Network,\x20%s,\x20%s','result','lodash','util','moment','bluebird','randomstring','ioredis','../../config/logger','../../config/environment','jayson/promise','client','http','request','request\x20sent','debug'];(function(_0x85a57,_0x4016e4){var _0x497176=function(_0x31e240){while(--_0x31e240){_0x85a57['push'](_0x85a57['shift']());}};_0x497176(++_0x4016e4);}(_0x741c,0x196));var _0xc741=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x741c[_0x40a045];return _0x1a687c;};'use strict';var _=require(_0xc741('0x0'));var util=require(_0xc741('0x1'));var moment=require(_0xc741('0x2'));var BPromise=require(_0xc741('0x3'));var rs=require(_0xc741('0x4'));var fs=require('fs');var Redis=require(_0xc741('0x5'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xc741('0x6'))('rpc');var config=require(_0xc741('0x7'));var jayson=require(_0xc741('0x8'));var client=jayson[_0xc741('0x9')][_0xc741('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3f3d82,_0x216e60,_0x46b743){return new BPromise(function(_0x598ead,_0x1ad6d9){return client[_0xc741('0xb')](_0x3f3d82,_0x46b743)['then'](function(_0xc6555){logger['info']('Network,\x20%s,\x20%s',_0x216e60,_0xc741('0xc'));logger[_0xc741('0xd')](_0xc741('0xe'),_0x216e60,_0xc741('0xc'),JSON[_0xc741('0xf')](_0xc6555));if(_0xc6555[_0xc741('0x10')]){if(_0xc6555[_0xc741('0x10')]['code']===0x1f4){logger['error']('Network,\x20%s,\x20%s',_0x216e60,_0xc6555[_0xc741('0x10')][_0xc741('0x11')]);return _0x1ad6d9(_0xc6555[_0xc741('0x10')][_0xc741('0x11')]);}logger[_0xc741('0x10')]('Network,\x20%s,\x20%s',_0x216e60,_0xc6555[_0xc741('0x10')][_0xc741('0x11')]);return _0x598ead(_0xc6555['error'][_0xc741('0x11')]);}else{logger[_0xc741('0x12')](_0xc741('0x13'),_0x216e60,_0xc741('0xc'));_0x598ead(_0xc6555[_0xc741('0x14')]['message']);}})['catch'](function(_0x341f54){logger['error'](_0xc741('0x13'),_0x216e60,_0x341f54);_0x1ad6d9(_0x341f54);});});}
\ No newline at end of file
+var _0x5d17=['request','info','debug','Network,\x20%s,\x20%s,\x20%s','stringify','error','code','Network,\x20%s,\x20%s','message','request\x20sent','result','catch','lodash','util','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http'];(function(_0x414d86,_0x32abf3){var _0x4170d6=function(_0x5abcb2){while(--_0x5abcb2){_0x414d86['push'](_0x414d86['shift']());}};_0x4170d6(++_0x32abf3);}(_0x5d17,0x114));var _0x75d1=function(_0x1139d0,_0x41e5f8){_0x1139d0=_0x1139d0-0x0;var _0xcc01a6=_0x5d17[_0x1139d0];return _0xcc01a6;};'use strict';var _=require(_0x75d1('0x0'));var util=require(_0x75d1('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x75d1('0x2'));var fs=require('fs');var Redis=require(_0x75d1('0x3'));var db=require(_0x75d1('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x75d1('0x5'))(_0x75d1('0x6'));var config=require(_0x75d1('0x7'));var jayson=require(_0x75d1('0x8'));var client=jayson['client'][_0x75d1('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x116a51,_0x5c957a,_0x1ee61b){return new BPromise(function(_0x3a9d5e,_0x105607){return client[_0x75d1('0xa')](_0x116a51,_0x1ee61b)['then'](function(_0x4cf632){logger[_0x75d1('0xb')]('Network,\x20%s,\x20%s',_0x5c957a,'request\x20sent');logger[_0x75d1('0xc')](_0x75d1('0xd'),_0x5c957a,'request\x20sent',JSON[_0x75d1('0xe')](_0x4cf632));if(_0x4cf632[_0x75d1('0xf')]){if(_0x4cf632[_0x75d1('0xf')][_0x75d1('0x10')]===0x1f4){logger[_0x75d1('0xf')](_0x75d1('0x11'),_0x5c957a,_0x4cf632['error'][_0x75d1('0x12')]);return _0x105607(_0x4cf632[_0x75d1('0xf')][_0x75d1('0x12')]);}logger[_0x75d1('0xf')]('Network,\x20%s,\x20%s',_0x5c957a,_0x4cf632['error']['message']);return _0x3a9d5e(_0x4cf632[_0x75d1('0xf')][_0x75d1('0x12')]);}else{logger[_0x75d1('0xb')]('Network,\x20%s,\x20%s',_0x5c957a,_0x75d1('0x13'));_0x3a9d5e(_0x4cf632[_0x75d1('0x14')][_0x75d1('0x12')]);}})[_0x75d1('0x15')](function(_0x1160ca){logger[_0x75d1('0xf')](_0x75d1('0x11'),_0x5c957a,_0x1160ca);_0x105607(_0x1160ca);});});}
\ No newline at end of file
index e4d6250..cc694de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbbd0=['/:id','show','/:id/dispositions','getDispositions','/:id/canned_answers','getAnswers','/:id/applications','getApplications','/:id/interactions','getInteractions','/:id/users','post','create','addAnswer','/:id/notify','notify','addApplications','addAgents','/:id/send','send','update','delete','destroy','removeDispositions','removeAnswers','removeAgents','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./openchannelAccount.controller','get','isAuthenticated','index','/describe','describe'];(function(_0x191557,_0x4ddf83){var _0x172152=function(_0x528d9e){while(--_0x528d9e){_0x191557['push'](_0x191557['shift']());}};_0x172152(++_0x4ddf83);}(_0xbbd0,0x96));var _0x0bbd=function(_0x97e800,_0x5708bb){_0x97e800=_0x97e800-0x0;var _0x357bdc=_0xbbd0[_0x97e800];return _0x357bdc;};'use strict';var multer=require(_0x0bbd('0x0'));var util=require(_0x0bbd('0x1'));var path=require(_0x0bbd('0x2'));var timeout=require(_0x0bbd('0x3'));var express=require(_0x0bbd('0x4'));var router=express[_0x0bbd('0x5')]();var auth=require(_0x0bbd('0x6'));var interaction=require(_0x0bbd('0x7'));var config=require('../../config/environment');var controller=require(_0x0bbd('0x8'));router[_0x0bbd('0x9')]('/',auth[_0x0bbd('0xa')](),controller[_0x0bbd('0xb')]);router[_0x0bbd('0x9')](_0x0bbd('0xc'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0xd')]);router[_0x0bbd('0x9')](_0x0bbd('0xe'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0xf')]);router['get'](_0x0bbd('0x10'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x11')]);router[_0x0bbd('0x9')](_0x0bbd('0x12'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x13')]);router[_0x0bbd('0x9')](_0x0bbd('0x14'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x15')]);router[_0x0bbd('0x9')](_0x0bbd('0x16'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x17')]);router[_0x0bbd('0x9')](_0x0bbd('0x18'),auth[_0x0bbd('0xa')](),controller['getAgents']);router[_0x0bbd('0x19')]('/',auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x1a')]);router[_0x0bbd('0x19')]('/:id/dispositions',auth[_0x0bbd('0xa')](),controller['addDisposition']);router[_0x0bbd('0x19')](_0x0bbd('0x12'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x1b')]);router[_0x0bbd('0x19')](_0x0bbd('0x1c'),controller[_0x0bbd('0x1d')]);router[_0x0bbd('0x19')](_0x0bbd('0x14'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x1e')]);router[_0x0bbd('0x19')](_0x0bbd('0x18'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x1f')]);router['post'](_0x0bbd('0x20'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x21')]);router['put'](_0x0bbd('0xe'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x22')]);router[_0x0bbd('0x23')]('/:id',auth['isAuthenticated'](),controller[_0x0bbd('0x24')]);router[_0x0bbd('0x23')]('/:id/dispositions',auth['isAuthenticated'](),controller[_0x0bbd('0x25')]);router[_0x0bbd('0x23')](_0x0bbd('0x12'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x26')]);router[_0x0bbd('0x23')](_0x0bbd('0x18'),auth[_0x0bbd('0xa')](),controller[_0x0bbd('0x27')]);module[_0x0bbd('0x28')]=router;
\ No newline at end of file
+var _0x5bed=['destroy','removeDispositions','delete','removeAnswers','removeAgents','exports','multer','util','path','connect-timeout','express','Router','../../config/environment','./openchannelAccount.controller','isAuthenticated','index','describe','get','show','/:id/dispositions','getDispositions','/:id/applications','getApplications','/:id/interactions','/:id/users','post','create','/:id/canned_answers','addAnswer','notify','/:id/send','send','put','/:id'];(function(_0x516fbc,_0x5e2df3){var _0x455ed2=function(_0xed8d37){while(--_0xed8d37){_0x516fbc['push'](_0x516fbc['shift']());}};_0x455ed2(++_0x5e2df3);}(_0x5bed,0x116));var _0xd5be=function(_0x13d07a,_0x41efc3){_0x13d07a=_0x13d07a-0x0;var _0x5ee0ee=_0x5bed[_0x13d07a];return _0x5ee0ee;};'use strict';var multer=require(_0xd5be('0x0'));var util=require(_0xd5be('0x1'));var path=require(_0xd5be('0x2'));var timeout=require(_0xd5be('0x3'));var express=require(_0xd5be('0x4'));var router=express[_0xd5be('0x5')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xd5be('0x6'));var controller=require(_0xd5be('0x7'));router['get']('/',auth[_0xd5be('0x8')](),controller[_0xd5be('0x9')]);router['get']('/describe',auth[_0xd5be('0x8')](),controller[_0xd5be('0xa')]);router[_0xd5be('0xb')]('/:id',auth['isAuthenticated'](),controller[_0xd5be('0xc')]);router[_0xd5be('0xb')](_0xd5be('0xd'),auth[_0xd5be('0x8')](),controller[_0xd5be('0xe')]);router[_0xd5be('0xb')]('/:id/canned_answers',auth[_0xd5be('0x8')](),controller['getAnswers']);router[_0xd5be('0xb')](_0xd5be('0xf'),auth[_0xd5be('0x8')](),controller[_0xd5be('0x10')]);router[_0xd5be('0xb')](_0xd5be('0x11'),auth[_0xd5be('0x8')](),controller['getInteractions']);router[_0xd5be('0xb')](_0xd5be('0x12'),auth[_0xd5be('0x8')](),controller['getAgents']);router[_0xd5be('0x13')]('/',auth[_0xd5be('0x8')](),controller[_0xd5be('0x14')]);router['post']('/:id/dispositions',auth[_0xd5be('0x8')](),controller['addDisposition']);router[_0xd5be('0x13')](_0xd5be('0x15'),auth[_0xd5be('0x8')](),controller[_0xd5be('0x16')]);router[_0xd5be('0x13')]('/:id/notify',controller[_0xd5be('0x17')]);router[_0xd5be('0x13')](_0xd5be('0xf'),auth[_0xd5be('0x8')](),controller['addApplications']);router['post']('/:id/users',auth['isAuthenticated'](),controller['addAgents']);router[_0xd5be('0x13')](_0xd5be('0x18'),auth['isAuthenticated'](),controller[_0xd5be('0x19')]);router[_0xd5be('0x1a')]('/:id',auth[_0xd5be('0x8')](),controller['update']);router['delete'](_0xd5be('0x1b'),auth[_0xd5be('0x8')](),controller[_0xd5be('0x1c')]);router['delete']('/:id/dispositions',auth[_0xd5be('0x8')](),controller[_0xd5be('0x1d')]);router[_0xd5be('0x1e')](_0xd5be('0x15'),auth[_0xd5be('0x8')](),controller[_0xd5be('0x1f')]);router[_0xd5be('0x1e')](_0xd5be('0x12'),auth[_0xd5be('0x8')](),controller[_0xd5be('0x20')]);module[_0xd5be('0x21')]=router;
\ No newline at end of file
index af7b088..fd8a029 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x004c=['INTEGER','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','setDataValue','mandatoryDispositionPauseId','mandatoryDisposition','randomstring','exports','STRING','name','generate','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','BOOLEAN'];(function(_0x2ea2c5,_0x40dbf8){var _0x2dc804=function(_0x18f6a3){while(--_0x18f6a3){_0x2ea2c5['push'](_0x2ea2c5['shift']());}};_0x2dc804(++_0x40dbf8);}(_0x004c,0x76));var _0xc004=function(_0x4c445a,_0x4ee80f){_0x4c445a=_0x4c445a-0x0;var _0x2f611c=_0x004c[_0x4c445a];return _0x2f611c;};'use strict';var Sequelize=require('sequelize');var rs=require(_0xc004('0x0'));module[_0xc004('0x1')]={'name':{'type':Sequelize[_0xc004('0x2')],'unique':_0xc004('0x3'),'allowNull':![]},'description':{'type':Sequelize['STRING']},'token':{'type':Sequelize[_0xc004('0x2')],'defaultValue':function(){return rs[_0xc004('0x4')]();}},'replyUri':{'type':Sequelize[_0xc004('0x2')],'validate':{'isUrl':!![]}},'key':{'type':Sequelize[_0xc004('0x2')],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0xc004('0x5')],'defaultValue':function(){return _0xc004('0x6');}},'notificationSound':{'type':Sequelize[_0xc004('0x7')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xc004('0x7')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0xc004('0x8')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'mapKey':{'type':Sequelize[_0xc004('0x2')]},'queueTransfer':{'type':Sequelize[_0xc004('0x7')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xc004('0x7')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0xc004('0x8')],'allowNull':!![],'defaultValue':null,'comment':_0xc004('0x9')},'mandatoryDisposition':{'type':Sequelize[_0xc004('0x7')],'defaultValue':![],'comment':_0xc004('0xa'),'set':function(_0xddc68a){if(!_0xddc68a)this[_0xc004('0xb')](_0xc004('0xc'),null);this['setDataValue'](_0xc004('0xd'),_0xddc68a);}}};
\ No newline at end of file
+var _0xea63=['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','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','mandatoryDispositionPauseId','mandatoryDisposition','sequelize','randomstring','exports','STRING','name','TEXT'];(function(_0x47c7ea,_0xa900bd){var _0x4bbd4b=function(_0x1aceb5){while(--_0x1aceb5){_0x47c7ea['push'](_0x47c7ea['shift']());}};_0x4bbd4b(++_0xa900bd);}(_0xea63,0xca));var _0x3ea6=function(_0x176320,_0x580526){_0x176320=_0x176320-0x0;var _0x270af5=_0xea63[_0x176320];return _0x270af5;};'use strict';var Sequelize=require(_0x3ea6('0x0'));var rs=require(_0x3ea6('0x1'));module[_0x3ea6('0x2')]={'name':{'type':Sequelize[_0x3ea6('0x3')],'unique':_0x3ea6('0x4'),'allowNull':![]},'description':{'type':Sequelize[_0x3ea6('0x3')]},'token':{'type':Sequelize[_0x3ea6('0x3')],'defaultValue':function(){return rs['generate']();}},'replyUri':{'type':Sequelize['STRING'],'validate':{'isUrl':!![]}},'key':{'type':Sequelize[_0x3ea6('0x3')],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0x3ea6('0x5')],'defaultValue':function(){return _0x3ea6('0x6');}},'notificationSound':{'type':Sequelize[_0x3ea6('0x7')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x3ea6('0x7')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x3ea6('0x8')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'mapKey':{'type':Sequelize[_0x3ea6('0x3')]},'queueTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x3ea6('0x8')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x3ea6('0x8')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0x3ea6('0x8')],'allowNull':!![],'defaultValue':null,'comment':_0x3ea6('0x9')},'mandatoryDisposition':{'type':Sequelize[_0x3ea6('0x7')],'defaultValue':![],'comment':_0x3ea6('0xa'),'set':function(_0x1c8d5c){if(!_0x1c8d5c)this['setDataValue'](_0x3ea6('0xb'),null);this['setDataValue'](_0x3ea6('0xc'),_0x1c8d5c);}}};
\ No newline at end of file
index 8b896ce..5008ec6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6c5f=['pick','merge','map','type','key','VIRTUAL','field','filter','includeAll','include','params','rawAttributes','length','options','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','Pause','describe','findOne','OpenchannelAccountId','Disposition','findAll','rows','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','removeAnswers','notify','openchannel','ValidationError','no\x20available\x20attributes','difference','createdAt','updatedAt','CompanyId','ListId','isNil','from','Sequelize','from\x20is\x20mandatory','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','mapKey','CmList','List','CmContact','Contacts','DESC','Applications','applications','priority','account','defaults','contact','firstName','lastName','threadId','OpenchannelInteraction','externalUrl','ContactId','spread','messageId','interaction','created','autoclose','push','close','unmanaged','*,*,*,*','AttachmentId','UserId','User','unshift','agent','waitForTheAssignedAgent','forcedOwnership','Start','startRouting','EventManager','sequelize','transaction','OpenchannelApplication','bulkCreate','findAndCountAll','getApplications','getInteractions','Contact','Owner','fullname','Tag','Tags','color','tag','omit','emit','userOpenchannelAccount:save','removeAgents','isArray','getAgents','user','out','OpenchannelMessage','Messages','dataValues','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','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','redis','socket.io-emitter','./openchannelAccount.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','then','info','OpenchannelAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','destroy','get','UserProfileResource','stack','name','send','index','mandatoryDispositionPause','OpenchannelAccount','model','query','keys','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where'];(function(_0x2bb888,_0x1017d3){var _0x46119a=function(_0x274d2a){while(--_0x274d2a){_0x2bb888['push'](_0x2bb888['shift']());}};_0x46119a(++_0x1017d3);}(_0x6c5f,0x1f3));var _0xf6c5=function(_0x23a5d7,_0x329fc5){_0x23a5d7=_0x23a5d7-0x0;var _0x102c33=_0x6c5f[_0x23a5d7];return _0x102c33;};'use strict';var pdf=require(_0xf6c5('0x0'));var emlformat=require(_0xf6c5('0x1'));var rimraf=require(_0xf6c5('0x2'));var zipdir=require(_0xf6c5('0x3'));var jsonpatch=require(_0xf6c5('0x4'));var rp=require(_0xf6c5('0x5'));var moment=require(_0xf6c5('0x6'));var BPromise=require(_0xf6c5('0x7'));var Mustache=require(_0xf6c5('0x8'));var util=require(_0xf6c5('0x9'));var path=require('path');var sox=require(_0xf6c5('0xa'));var csv=require(_0xf6c5('0xb'));var ejs=require(_0xf6c5('0xc'));var fs=require('fs');var _=require(_0xf6c5('0xd'));var squel=require(_0xf6c5('0xe'));var crypto=require(_0xf6c5('0xf'));var jsforce=require(_0xf6c5('0x10'));var deskjs=require(_0xf6c5('0x11'));var toCsv=require(_0xf6c5('0xb'));var querystring=require(_0xf6c5('0x12'));var Papa=require(_0xf6c5('0x13'));var Redis=require('ioredis');var authService=require(_0xf6c5('0x14'));var qs=require(_0xf6c5('0x15'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xf6c5('0x16'))('api');var utils=require(_0xf6c5('0x17'));var config=require(_0xf6c5('0x18'));var db=require(_0xf6c5('0x19'))['db'];config[_0xf6c5('0x1a')]=_['defaults'](config[_0xf6c5('0x1a')],{'host':'localhost','port':0x18eb});var socket=require(_0xf6c5('0x1b'))(new Redis(config[_0xf6c5('0x1a')]));require(_0xf6c5('0x1c'))[_0xf6c5('0x1d')](socket);var jayson=require(_0xf6c5('0x1e'));var client=jayson[_0xf6c5('0x1f')][_0xf6c5('0x20')]({'port':0x232c});var client9002=jayson[_0xf6c5('0x1f')]['http']({'port':0x232a});function checkPasswordPattern(_0x229255,_0x46b9c0,_0x28656b){if(_0x28656b){var _0x3e96c5=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x3e96c5[_0xf6c5('0x21')](_0x46b9c0)){return _0x229255;}else{throw new Error(_0xf6c5('0x22'));}}else{return _0x229255;}}function respondWithRpcPromise(_0x45d358,_0x56b12d,_0x17b874,_0x1d46b4){return new BPromise(function(_0x15048d,_0x5371fc){var _0x25afee=_0x1d46b4||client;return _0x25afee[_0xf6c5('0x23')](_0x45d358,_0x17b874)[_0xf6c5('0x24')](function(_0x14cb32){logger[_0xf6c5('0x25')](_0xf6c5('0x26'),_0x56b12d,_0xf6c5('0x27'));logger[_0xf6c5('0x28')]('OpenchannelAccount,\x20%s,\x20%s,\x20%s',_0x56b12d,_0xf6c5('0x27'),JSON[_0xf6c5('0x29')](_0x14cb32));if(_0x14cb32[_0xf6c5('0x2a')]){if(_0x14cb32[_0xf6c5('0x2a')][_0xf6c5('0x2b')]===0x1f4){logger[_0xf6c5('0x2a')](_0xf6c5('0x26'),_0x56b12d,_0x14cb32[_0xf6c5('0x2a')][_0xf6c5('0x2c')]);return _0x5371fc(_0x14cb32[_0xf6c5('0x2a')][_0xf6c5('0x2c')]);}logger[_0xf6c5('0x2a')]('OpenchannelAccount,\x20%s,\x20%s',_0x56b12d,_0x14cb32[_0xf6c5('0x2a')][_0xf6c5('0x2c')]);return _0x15048d(_0x14cb32[_0xf6c5('0x2a')][_0xf6c5('0x2c')]);}else{logger[_0xf6c5('0x25')](_0xf6c5('0x26'),_0x56b12d,'request\x20sent');_0x15048d(_0x14cb32[_0xf6c5('0x2d')][_0xf6c5('0x2c')]);}})[_0xf6c5('0x2e')](function(_0x1978dc){logger['error'](_0xf6c5('0x26'),_0x56b12d,_0x1978dc);_0x5371fc(_0x1978dc);});});}function respondWithStatusCode(_0x3d75bc,_0x11066c){_0x11066c=_0x11066c||0xcc;return function(_0x23bf8d){if(_0x23bf8d){return _0x3d75bc[_0xf6c5('0x2f')](_0x11066c);}return _0x3d75bc[_0xf6c5('0x30')](_0x11066c)[_0xf6c5('0x31')]();};}function respondWithResult(_0x231e14,_0x1d1263){_0x1d1263=_0x1d1263||0xc8;return function(_0x5d0b66){if(_0x5d0b66){return _0x231e14[_0xf6c5('0x30')](_0x1d1263)[_0xf6c5('0x32')](_0x5d0b66);}};}function respondWithFilteredResult(_0x3fea3d,_0x4a0422){return function(_0xf7b861){if(_0xf7b861){var _0x335c5b=_0xf7b861[_0xf6c5('0x33')],_0xce4744=_0x4a0422[_0xf6c5('0x34')],_0x1da2f1=_0x4a0422[_0xf6c5('0x34')]+_0x4a0422[_0xf6c5('0x35')],_0x2b102f;if(_0x1da2f1>=_0x335c5b){_0x1da2f1=_0x335c5b;_0x2b102f=0xc8;}else{_0x2b102f=0xce;}_0x3fea3d['status'](_0x2b102f);return _0x3fea3d[_0xf6c5('0x36')]('Content-Range',_0xce4744+'-'+_0x1da2f1+'/'+_0x335c5b)['json'](_0xf7b861);}return null;};}function patchUpdates(_0x115053){return function(_0x2f3039){try{jsonpatch[_0xf6c5('0x37')](_0x2f3039,_0x115053,!![]);}catch(_0x9c4032){return BPromise[_0xf6c5('0x38')](_0x9c4032);}return _0x2f3039[_0xf6c5('0x39')]();};}function saveUpdates(_0x485f5c,_0xf95590){return function(_0x5327a9){if(_0x5327a9){return _0x5327a9[_0xf6c5('0x3a')](_0x485f5c)[_0xf6c5('0x24')](function(_0x2b159d){return _0x2b159d;});}return null;};}function removeEntity(_0x3230cc,_0x40af84){return function(_0x536f05){if(_0x536f05){return _0x536f05[_0xf6c5('0x3b')]()['then'](function(){var _0x4102c5=_0x536f05[_0xf6c5('0x3c')]({'plain':!![]});var _0x485b83='OpenchannelAccounts';return db[_0xf6c5('0x3d')]['destroy']({'where':{'type':_0x485b83,'resourceId':_0x4102c5['id']}})[_0xf6c5('0x24')](function(){return _0x536f05;});})['then'](function(){_0x3230cc[_0xf6c5('0x30')](0xcc)[_0xf6c5('0x31')]();});}};}function handleEntityNotFound(_0x3679f9,_0x5e070d){return function(_0xce2734){if(!_0xce2734){_0x3679f9[_0xf6c5('0x2f')](0x194);}return _0xce2734;};}function handleError(_0x1c5a9a,_0x51712c){_0x51712c=_0x51712c||0x1f4;return function(_0x5e5e8c){logger[_0xf6c5('0x2a')](_0x5e5e8c[_0xf6c5('0x3e')]);if(_0x5e5e8c['name']){delete _0x5e5e8c[_0xf6c5('0x3f')];}_0x1c5a9a[_0xf6c5('0x30')](_0x51712c)[_0xf6c5('0x40')](_0x5e5e8c);};}exports[_0xf6c5('0x41')]=function(_0x5e1e63,_0x38edb9){var _0x1dd434={'include':[{'model':db['Pause'],'as':_0xf6c5('0x42')}]},_0x319231={},_0x247f85={'count':0x0,'rows':[]};var _0x2e8377=db[_0xf6c5('0x43')]['rawAttributes'];_0x319231[_0xf6c5('0x44')]=_['keys'](_0x2e8377);_0x319231[_0xf6c5('0x45')]=_[_0xf6c5('0x46')](_0x5e1e63[_0xf6c5('0x45')]);_0x319231[_0xf6c5('0x47')]=_['intersection'](_0x319231[_0xf6c5('0x44')],_0x319231['query']);_0x1dd434['attributes']=_[_0xf6c5('0x48')](_0x319231['model'],qs['fields'](_0x5e1e63['query'][_0xf6c5('0x49')]));_0x1dd434['attributes']=_0x1dd434[_0xf6c5('0x4a')]['length']?_0x1dd434[_0xf6c5('0x4a')]:_0x319231['model'];if(!_0x5e1e63[_0xf6c5('0x45')][_0xf6c5('0x4b')](_0xf6c5('0x4c'))){_0x1dd434['limit']=qs[_0xf6c5('0x35')](_0x5e1e63[_0xf6c5('0x45')]['limit']);_0x1dd434[_0xf6c5('0x34')]=qs[_0xf6c5('0x34')](_0x5e1e63[_0xf6c5('0x45')][_0xf6c5('0x34')]);}_0x1dd434[_0xf6c5('0x4d')]=qs['sort'](_0x5e1e63[_0xf6c5('0x45')][_0xf6c5('0x4e')]);_0x1dd434[_0xf6c5('0x4f')]=qs[_0xf6c5('0x47')](_[_0xf6c5('0x50')](_0x5e1e63[_0xf6c5('0x45')],_0x319231['filters']));if(_0x5e1e63['query']['filter']){_0x1dd434['where']=_[_0xf6c5('0x51')](_0x1dd434[_0xf6c5('0x4f')],{'$or':_[_0xf6c5('0x52')](_0x2e8377,function(_0x5c3179){if(_0x5c3179[_0xf6c5('0x53')][_0xf6c5('0x54')]!==_0xf6c5('0x55')){var _0x5e8a56={};_0x5e8a56[_0x5c3179[_0xf6c5('0x56')]]={'$like':'%'+_0x5e1e63[_0xf6c5('0x45')][_0xf6c5('0x57')]+'%'};return _0x5e8a56;}})});}_0x1dd434=_[_0xf6c5('0x51')]({},_0x1dd434,_0x5e1e63['options']);var _0x4c3928={'where':_0x1dd434['where']};return db[_0xf6c5('0x43')][_0xf6c5('0x33')](_0x4c3928)[_0xf6c5('0x24')](function(_0x49e35f){_0x247f85[_0xf6c5('0x33')]=_0x49e35f;if(_0x5e1e63[_0xf6c5('0x45')][_0xf6c5('0x58')]){_0x1dd434[_0xf6c5('0x59')]=[{'all':!![]}];}return db[_0xf6c5('0x43')]['findAll'](_0x1dd434);})[_0xf6c5('0x24')](function(_0x48ba9a){_0x247f85['rows']=_0x48ba9a;return _0x247f85;})[_0xf6c5('0x24')](respondWithFilteredResult(_0x38edb9,_0x1dd434))[_0xf6c5('0x2e')](handleError(_0x38edb9,null));};exports['show']=function(_0x435561,_0x3d6646){var _0x66e0b4={'raw':![],'where':{'id':_0x435561[_0xf6c5('0x5a')]['id']},'include':[{'model':db['Pause'],'as':_0xf6c5('0x42')}]},_0x1eb99a={};_0x1eb99a[_0xf6c5('0x44')]=_[_0xf6c5('0x46')](db['OpenchannelAccount'][_0xf6c5('0x5b')]);_0x1eb99a[_0xf6c5('0x45')]=_[_0xf6c5('0x46')](_0x435561[_0xf6c5('0x45')]);_0x1eb99a[_0xf6c5('0x47')]=_[_0xf6c5('0x48')](_0x1eb99a[_0xf6c5('0x44')],_0x1eb99a[_0xf6c5('0x45')]);_0x66e0b4[_0xf6c5('0x4a')]=_[_0xf6c5('0x48')](_0x1eb99a[_0xf6c5('0x44')],qs[_0xf6c5('0x49')](_0x435561[_0xf6c5('0x45')][_0xf6c5('0x49')]));_0x66e0b4['attributes']=_0x66e0b4['attributes'][_0xf6c5('0x5c')]?_0x66e0b4['attributes']:_0x1eb99a['model'];if(_0x435561[_0xf6c5('0x45')][_0xf6c5('0x58')]){_0x66e0b4[_0xf6c5('0x59')]=[{'all':!![]}];}_0x66e0b4=_[_0xf6c5('0x51')]({},_0x66e0b4,_0x435561[_0xf6c5('0x5d')]);return db[_0xf6c5('0x43')][_0xf6c5('0x5e')](_0x66e0b4)[_0xf6c5('0x24')](handleEntityNotFound(_0x3d6646,null))['then'](respondWithResult(_0x3d6646,null))[_0xf6c5('0x2e')](handleError(_0x3d6646,null));};exports[_0xf6c5('0x5f')]=function(_0x2059f4,_0x83b0f){return db[_0xf6c5('0x43')][_0xf6c5('0x5f')](_0x2059f4[_0xf6c5('0x60')],{})[_0xf6c5('0x24')](function(_0x2186f4){var _0x1c20f6=_0x2059f4['user'][_0xf6c5('0x3c')]({'plain':!![]});if(!_0x1c20f6)throw new Error(_0xf6c5('0x61'));if(_0x1c20f6[_0xf6c5('0x62')]==='user'){var _0x385f9d=_0x2186f4[_0xf6c5('0x3c')]({'plain':!![]});var _0x94d1ec='OpenchannelAccounts';return db[_0xf6c5('0x63')][_0xf6c5('0x5e')]({'where':{'name':_0x94d1ec,'userProfileId':_0x1c20f6[_0xf6c5('0x64')]},'raw':!![]})['then'](function(_0x49f734){if(_0x49f734&&_0x49f734[_0xf6c5('0x65')]===0x0){return db[_0xf6c5('0x3d')]['create']({'name':_0x385f9d[_0xf6c5('0x3f')],'resourceId':_0x385f9d['id'],'type':_0x49f734[_0xf6c5('0x3f')],'sectionId':_0x49f734['id']},{})[_0xf6c5('0x24')](function(){return _0x2186f4;});}else{return _0x2186f4;}})[_0xf6c5('0x2e')](function(_0x275250){logger[_0xf6c5('0x2a')](_0xf6c5('0x66'),_0x275250);throw _0x275250;});}return _0x2186f4;})[_0xf6c5('0x24')](respondWithResult(_0x83b0f,0xc9))[_0xf6c5('0x2e')](handleError(_0x83b0f,null));};exports[_0xf6c5('0x3a')]=function(_0x138866,_0x4ed3df){if(_0x138866[_0xf6c5('0x60')]['id']){delete _0x138866['body']['id'];}return db[_0xf6c5('0x43')][_0xf6c5('0x5e')]({'where':{'id':_0x138866[_0xf6c5('0x5a')]['id']},'include':[{'model':db[_0xf6c5('0x67')],'as':_0xf6c5('0x42')}]})[_0xf6c5('0x24')](handleEntityNotFound(_0x4ed3df,null))[_0xf6c5('0x24')](saveUpdates(_0x138866[_0xf6c5('0x60')],null))['then'](respondWithResult(_0x4ed3df,null))[_0xf6c5('0x2e')](handleError(_0x4ed3df,null));};exports[_0xf6c5('0x3b')]=function(_0x5d9e74,_0x3923a8){return db[_0xf6c5('0x43')]['find']({'where':{'id':_0x5d9e74[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x3923a8,null))[_0xf6c5('0x24')](removeEntity(_0x3923a8,null))[_0xf6c5('0x2e')](handleError(_0x3923a8,null));};exports['describe']=function(_0x5d6d72,_0x44047a){return db[_0xf6c5('0x43')][_0xf6c5('0x68')]()[_0xf6c5('0x24')](respondWithResult(_0x44047a,null))['catch'](handleError(_0x44047a,null));};exports['addDisposition']=function(_0x3a3e42,_0x1c402b,_0x52d4c6){if(_0x3a3e42[_0xf6c5('0x60')]['id']){delete _0x3a3e42[_0xf6c5('0x60')]['id'];}return db[_0xf6c5('0x43')][_0xf6c5('0x5e')]({'where':{'id':_0x3a3e42[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x1c402b,null))['then'](function(_0x2b4340){if(_0x2b4340){_0x3a3e42[_0xf6c5('0x60')]['OpnechannelAccountId']=_0x2b4340['id'];return db['Disposition']['create'](_0x3a3e42[_0xf6c5('0x60')]);}})['then'](respondWithResult(_0x1c402b,null))['catch'](handleError(_0x1c402b,null));};exports['getDispositions']=function(_0x35f90a,_0x24c89e,_0x22d15e){var _0x26a318={'raw':![],'where':{}};var _0xe32e57={};var _0x400454={'count':0x0,'rows':[]};return db[_0xf6c5('0x43')][_0xf6c5('0x69')]({'where':{'id':_0x35f90a[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x24c89e,null))['then'](function(_0x5cb67d){if(_0x5cb67d){_0xe32e57[_0xf6c5('0x44')]=_[_0xf6c5('0x46')](db['Disposition'][_0xf6c5('0x5b')]);_0xe32e57[_0xf6c5('0x45')]=_[_0xf6c5('0x46')](_0x35f90a['query']);_0xe32e57[_0xf6c5('0x47')]=_['intersection'](_0xe32e57[_0xf6c5('0x44')],_0xe32e57[_0xf6c5('0x45')]);_0x26a318[_0xf6c5('0x4a')]=_[_0xf6c5('0x48')](_0xe32e57[_0xf6c5('0x44')],qs[_0xf6c5('0x49')](_0x35f90a[_0xf6c5('0x45')][_0xf6c5('0x49')]));_0x26a318[_0xf6c5('0x4a')]=_0x26a318[_0xf6c5('0x4a')][_0xf6c5('0x5c')]?_0x26a318[_0xf6c5('0x4a')]:_0xe32e57[_0xf6c5('0x44')];if(!_0x35f90a[_0xf6c5('0x45')][_0xf6c5('0x4b')](_0xf6c5('0x4c'))){_0x26a318[_0xf6c5('0x35')]=qs[_0xf6c5('0x35')](_0x35f90a[_0xf6c5('0x45')][_0xf6c5('0x35')]);_0x26a318[_0xf6c5('0x34')]=qs[_0xf6c5('0x34')](_0x35f90a[_0xf6c5('0x45')][_0xf6c5('0x34')]);}_0x26a318[_0xf6c5('0x4d')]=qs['sort'](_0x35f90a[_0xf6c5('0x45')][_0xf6c5('0x4e')]);_0x26a318[_0xf6c5('0x4f')]=qs[_0xf6c5('0x47')](_[_0xf6c5('0x50')](_0x35f90a[_0xf6c5('0x45')],_0xe32e57[_0xf6c5('0x47')]));_0x26a318['where'][_0xf6c5('0x6a')]=_0x5cb67d['id'];if(_0x35f90a['query'][_0xf6c5('0x57')]){_0x26a318[_0xf6c5('0x4f')]=_[_0xf6c5('0x51')](_0x26a318[_0xf6c5('0x4f')],{'$or':_[_0xf6c5('0x52')](_0x26a318[_0xf6c5('0x4a')],function(_0x406a9a){var _0x5d40c8={};_0x5d40c8[_0x406a9a]={'$like':'%'+_0x35f90a['query'][_0xf6c5('0x57')]+'%'};return _0x5d40c8;})});}_0x26a318=_['merge']({},_0x26a318,_0x35f90a[_0xf6c5('0x5d')]);return db['Disposition'][_0xf6c5('0x33')]({'where':_0x26a318[_0xf6c5('0x4f')]})[_0xf6c5('0x24')](function(_0x2dc3ad){_0x400454['count']=_0x2dc3ad;if(_0x35f90a[_0xf6c5('0x45')][_0xf6c5('0x58')]){_0x26a318[_0xf6c5('0x59')]=[{'all':!![]}];}return db[_0xf6c5('0x6b')][_0xf6c5('0x6c')](_0x26a318);})[_0xf6c5('0x24')](function(_0x2a22dd){_0x400454[_0xf6c5('0x6d')]=_0x2a22dd;return _0x400454;});}})['then'](respondWithFilteredResult(_0x24c89e,_0x26a318))[_0xf6c5('0x2e')](handleError(_0x24c89e,null));};exports[_0xf6c5('0x6e')]=function(_0xa5f315,_0x5d489e,_0x5bd6b5){return db['OpenchannelAccount'][_0xf6c5('0x5e')]({'where':{'id':_0xa5f315['params']['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x5d489e,null))[_0xf6c5('0x24')](function(_0x4d0804){if(_0x4d0804){return _0x4d0804[_0xf6c5('0x6e')](_0xa5f315[_0xf6c5('0x45')][_0xf6c5('0x6f')]);}})['then'](respondWithStatusCode(_0x5d489e,null))[_0xf6c5('0x2e')](handleError(_0x5d489e,null));};exports[_0xf6c5('0x70')]=function(_0x130a8a,_0x5daea0,_0x16592e){if(_0x130a8a[_0xf6c5('0x60')]['id']){delete _0x130a8a[_0xf6c5('0x60')]['id'];}return db['OpenchannelAccount'][_0xf6c5('0x5e')]({'where':{'id':_0x130a8a['params']['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x5daea0,null))[_0xf6c5('0x24')](function(_0x467c85){if(_0x467c85){_0x130a8a[_0xf6c5('0x60')]['OpenchannelAccountId']=_0x467c85['id'];return db[_0xf6c5('0x71')][_0xf6c5('0x5f')](_0x130a8a[_0xf6c5('0x60')]);}})[_0xf6c5('0x24')](respondWithResult(_0x5daea0,null))['catch'](handleError(_0x5daea0,null));};exports[_0xf6c5('0x72')]=function(_0x5d0948,_0x5cfa11,_0x2da678){var _0x967e82={'raw':![],'where':{}};var _0x22d8f3={};var _0x507c58={'count':0x0,'rows':[]};return db[_0xf6c5('0x43')][_0xf6c5('0x69')]({'where':{'id':_0x5d0948[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x5cfa11,null))[_0xf6c5('0x24')](function(_0x4e3713){if(_0x4e3713){_0x22d8f3[_0xf6c5('0x44')]=_[_0xf6c5('0x46')](db[_0xf6c5('0x71')][_0xf6c5('0x5b')]);_0x22d8f3[_0xf6c5('0x45')]=_[_0xf6c5('0x46')](_0x5d0948[_0xf6c5('0x45')]);_0x22d8f3['filters']=_[_0xf6c5('0x48')](_0x22d8f3['model'],_0x22d8f3['query']);_0x967e82[_0xf6c5('0x4a')]=_[_0xf6c5('0x48')](_0x22d8f3[_0xf6c5('0x44')],qs[_0xf6c5('0x49')](_0x5d0948[_0xf6c5('0x45')][_0xf6c5('0x49')]));_0x967e82[_0xf6c5('0x4a')]=_0x967e82[_0xf6c5('0x4a')][_0xf6c5('0x5c')]?_0x967e82['attributes']:_0x22d8f3['model'];if(!_0x5d0948['query']['hasOwnProperty'](_0xf6c5('0x4c'))){_0x967e82[_0xf6c5('0x35')]=qs[_0xf6c5('0x35')](_0x5d0948[_0xf6c5('0x45')][_0xf6c5('0x35')]);_0x967e82[_0xf6c5('0x34')]=qs[_0xf6c5('0x34')](_0x5d0948[_0xf6c5('0x45')][_0xf6c5('0x34')]);}_0x967e82['order']=qs[_0xf6c5('0x4e')](_0x5d0948[_0xf6c5('0x45')][_0xf6c5('0x4e')]);_0x967e82['where']=qs[_0xf6c5('0x47')](_[_0xf6c5('0x50')](_0x5d0948[_0xf6c5('0x45')],_0x22d8f3[_0xf6c5('0x47')]));_0x967e82[_0xf6c5('0x4f')][_0xf6c5('0x6a')]=_0x4e3713['id'];if(_0x5d0948[_0xf6c5('0x45')][_0xf6c5('0x57')]){_0x967e82[_0xf6c5('0x4f')]=_[_0xf6c5('0x51')](_0x967e82[_0xf6c5('0x4f')],{'$or':_[_0xf6c5('0x52')](_0x967e82['attributes'],function(_0x4e0c11){var _0xe8f15a={};_0xe8f15a[_0x4e0c11]={'$like':'%'+_0x5d0948['query'][_0xf6c5('0x57')]+'%'};return _0xe8f15a;})});}_0x967e82=_['merge']({},_0x967e82,_0x5d0948[_0xf6c5('0x5d')]);return db[_0xf6c5('0x71')][_0xf6c5('0x33')]({'where':_0x967e82['where']})[_0xf6c5('0x24')](function(_0x5d15ab){_0x507c58[_0xf6c5('0x33')]=_0x5d15ab;if(_0x5d0948['query'][_0xf6c5('0x58')]){_0x967e82[_0xf6c5('0x59')]=[{'all':!![]}];}return db[_0xf6c5('0x71')][_0xf6c5('0x6c')](_0x967e82);})[_0xf6c5('0x24')](function(_0x41f7fa){_0x507c58['rows']=_0x41f7fa;return _0x507c58;});}})['then'](respondWithFilteredResult(_0x5cfa11,_0x967e82))[_0xf6c5('0x2e')](handleError(_0x5cfa11,null));};exports[_0xf6c5('0x73')]=function(_0x31c884,_0x549a11,_0x6f8318){return db[_0xf6c5('0x43')][_0xf6c5('0x5e')]({'where':{'id':_0x31c884[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x549a11,null))[_0xf6c5('0x24')](function(_0x1517b6){if(_0x1517b6){return _0x1517b6[_0xf6c5('0x73')](_0x31c884['query'][_0xf6c5('0x6f')]);}})[_0xf6c5('0x24')](respondWithStatusCode(_0x549a11,null))[_0xf6c5('0x2e')](handleError(_0x549a11,null));};exports[_0xf6c5('0x74')]=function(_0x126b49,_0xc01832,_0x308107){var _0x19e5ba={'body':_0x126b49[_0xf6c5('0x60')],'channel':_0xf6c5('0x75')};var _0x4e777b=[];var _0x1d47f0=[];var _0x133aa4={};var _0x2e683a=![];return db['CmContact'][_0xf6c5('0x68')]()[_0xf6c5('0x24')](function(_0x4add12){if(!_0x4add12){throw new db['Sequelize'][(_0xf6c5('0x76'))](_0xf6c5('0x77'));}_0x4e777b=_[_0xf6c5('0x78')](_[_0xf6c5('0x46')](_0x4add12),[_0xf6c5('0x79'),_0xf6c5('0x7a')]);_0x1d47f0=_['difference'](_[_0xf6c5('0x46')](_0x4add12),[_0xf6c5('0x79'),_0xf6c5('0x7a'),_0xf6c5('0x7b'),_0xf6c5('0x7c')]);if(_0x126b49[_0xf6c5('0x60')]['id']){delete _0x126b49[_0xf6c5('0x60')]['id'];}if(_[_0xf6c5('0x7d')](_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x7e')])){throw new db[(_0xf6c5('0x7f'))]['ValidationError'](_0xf6c5('0x80'));}if(_[_0xf6c5('0x7d')](_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x60')])||_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x60')]===''){throw new db[(_0xf6c5('0x7f'))][(_0xf6c5('0x76'))](_0xf6c5('0x81'));}if(_['isNil'](_0x126b49[_0xf6c5('0x60')]['mapKey'])){throw new db[(_0xf6c5('0x7f'))]['ValidationError'](_0xf6c5('0x82')+_0x1d47f0);}if(!_['includes'](_0x1d47f0,_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x83')])){throw new db['Sequelize']['ValidationError']('mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x1d47f0);}_0x133aa4[_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x83')]]=_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x7e')];})[_0xf6c5('0x24')](function(){return db[_0xf6c5('0x43')][_0xf6c5('0x5e')]({'where':{'id':_0x126b49[_0xf6c5('0x5a')]['id']},'include':[{'model':db[_0xf6c5('0x84')],'as':_0xf6c5('0x85'),'include':[{'model':db[_0xf6c5('0x86')],'as':_0xf6c5('0x87'),'where':_0x133aa4,'limit':0x1,'order':[['updatedAt',_0xf6c5('0x88')]]}]},{'model':db['OpenchannelApplication'],'as':_0xf6c5('0x89')}]});})['then'](handleEntityNotFound(_0xc01832,null))['then'](function(_0x3638b6){if(_0x3638b6&&_0x3638b6[_0xf6c5('0x85')]){_0x19e5ba['account']=_0x3638b6;_0x19e5ba['applications']=_0x3638b6[_0xf6c5('0x89')];_0x19e5ba['list']=_0x3638b6[_0xf6c5('0x85')];_0x19e5ba[_0xf6c5('0x8a')]=_['orderBy'](_0x19e5ba['applications'],[_0xf6c5('0x8b')],['asc']);if(_0x19e5ba['account'][_0xf6c5('0x89')]){delete _0x19e5ba['account'][_0xf6c5('0x89')];}if(_0x19e5ba[_0xf6c5('0x8c')]['List']&&_0x19e5ba['account'][_0xf6c5('0x85')][_0xf6c5('0x87')][_0xf6c5('0x5c')]){return _0x19e5ba['account'][_0xf6c5('0x85')][_0xf6c5('0x87')][0x0];}var _0x96467a=_[_0xf6c5('0x8d')](_0x126b49[_0xf6c5('0x60')],{'firstName':_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x7e')],'ListId':_0x3638b6[_0xf6c5('0x7c')]});_0x96467a[_0x126b49[_0xf6c5('0x60')]['mapKey']]=_0x126b49[_0xf6c5('0x60')]['from'];return db[_0xf6c5('0x86')][_0xf6c5('0x5f')](_0x96467a,{'fields':_0x4e777b,'raw':!![]});}})[_0xf6c5('0x24')](handleEntityNotFound(_0xc01832,null))['then'](function(_0x164315){_0x19e5ba[_0xf6c5('0x8e')]=_0x164315;if(_0x164315){var _0x27bd29={'ContactId':_0x164315['id'],'OpenchannelAccountId':_0x126b49[_0xf6c5('0x5a')]['id'],'from':(_0x164315[_0xf6c5('0x8f')]||'')+'\x20'+(_0x164315[_0xf6c5('0x90')]||'')};var _0x8b4c82={'OpenchannelAccountId':_0x126b49['params']['id'],'closed':![]};if(_0x126b49[_0xf6c5('0x60')]['threadId']){_0x8b4c82[_0xf6c5('0x91')]=_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x91')];return db[_0xf6c5('0x92')]['find']({'where':_0x8b4c82})[_0xf6c5('0x24')](function(_0x3101d6){if(_0x3101d6){return[_0x3101d6,![]];}_0x27bd29[_0xf6c5('0x91')]=_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x91')];_0x27bd29[_0xf6c5('0x93')]=_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x93')];return db[_0xf6c5('0x92')][_0xf6c5('0x5f')](_0x27bd29)['then'](function(_0x156729){return[_0x156729,!![]];});});}else{_0x8b4c82[_0xf6c5('0x91')]=null;}_0x8b4c82[_0xf6c5('0x94')]=_0x164315['id'];return db[_0xf6c5('0x92')][_0xf6c5('0x5e')]({'where':_0x8b4c82})[_0xf6c5('0x24')](function(_0x2d43fc){if(_0x2d43fc){return[_0x2d43fc,![]];}return db[_0xf6c5('0x92')][_0xf6c5('0x5f')](_0x27bd29)[_0xf6c5('0x24')](function(_0x5e6372){return[_0x5e6372,!![]];});});}})[_0xf6c5('0x95')](function(_0x11fa6f,_0x53caa4){if(_0x11fa6f){_0x2e683a=_0x53caa4;if(!_0x53caa4){var _0x212bb6={'from':(_0x19e5ba['contact']['firstName']||'')+'\x20'+(_0x19e5ba[_0xf6c5('0x8e')][_0xf6c5('0x90')]||'')};if(_0x126b49[_0xf6c5('0x60')]['threadId']&&_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x96')]&&_0x126b49[_0xf6c5('0x60')]['threadId']!=_0x126b49['body']['messageId']){_0x212bb6[_0xf6c5('0x91')]=_0x126b49['body'][_0xf6c5('0x96')];}return _0x11fa6f[_0xf6c5('0x3a')](_0x212bb6);}else{return _0x11fa6f;}}})[_0xf6c5('0x24')](function(_0x457a94){_0x19e5ba[_0xf6c5('0x97')]=_0x457a94['get']({'plain':!![]});_0x19e5ba['interaction'][_0xf6c5('0x98')]=_0x2e683a;if(_0x19e5ba[_0xf6c5('0x97')][_0xf6c5('0x98')]){if(_0x19e5ba[_0xf6c5('0x8c')][_0xf6c5('0x99')]){_0x19e5ba[_0xf6c5('0x8a')][_0xf6c5('0x9a')]({'id':0x0,'priority':_0x19e5ba['applications']['length']+0x1,'app':_0xf6c5('0x9b'),'appdata':_0xf6c5('0x9c'),'interval':_0xf6c5('0x9d')});}}return db['OpenchannelMessage']['create']({'body':_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x60')],'OpenchannelAccountId':_0x126b49[_0xf6c5('0x5a')]['id'],'OpenchannelInteractionId':_0x457a94['id'],'direction':'in','ContactId':_0x19e5ba[_0xf6c5('0x8e')]['id'],'AttachmentId':_0x126b49[_0xf6c5('0x60')][_0xf6c5('0x9e')]});})['then'](function(_0x1b9f5c){_0x19e5ba[_0xf6c5('0x2c')]=_0x1b9f5c;if(_0x19e5ba['interaction'][_0xf6c5('0x9f')]){return db[_0xf6c5('0xa0')][_0xf6c5('0x5e')]({'attributes':['id',_0xf6c5('0x3f')],'where':{'id':_0x19e5ba[_0xf6c5('0x97')][_0xf6c5('0x9f')]}})[_0xf6c5('0x24')](function(_0x23e235){if(_0x23e235){_0x19e5ba['applications'][_0xf6c5('0xa1')]({'id':0x0,'priority':0x0,'app':_0xf6c5('0xa2'),'appdata':_0x23e235[_0xf6c5('0x3f')]+','+(_0x19e5ba[_0xf6c5('0x8c')][_0xf6c5('0xa3')]||0xa),'interval':_0xf6c5('0x9d')});_0x19e5ba[_0xf6c5('0xa4')]=![];}return respondWithRpcPromise(_0xf6c5('0xa5'),_0xf6c5('0xa6'),_0x19e5ba);});}return respondWithRpcPromise(_0xf6c5('0xa5'),_0xf6c5('0xa6'),_0x19e5ba);})[_0xf6c5('0x24')](function(_0x4dad03){respondWithRpcPromise(_0xf6c5('0xa7'),_0xf6c5('0xa7'),{'event':_0xf6c5('0x74'),'message':_0x4dad03},client9002);return _0x4dad03;})['then'](respondWithResult(_0xc01832,null))[_0xf6c5('0x2e')](handleError(_0xc01832,null));};exports['addApplications']=function(_0x33aed3,_0x328ca0,_0x25ec80){return db[_0xf6c5('0x43')]['findOne']({'where':{'id':_0x33aed3[_0xf6c5('0x5a')]['id']}})['then'](handleEntityNotFound(_0x328ca0,null))['then'](function(_0x5132ea){if(_0x5132ea){return db[_0xf6c5('0xa8')][_0xf6c5('0xa9')](function(_0x25a1ed){return db['OpenchannelApplication'][_0xf6c5('0x3b')]({'where':{'OpenchannelAccountId':_0x33aed3[_0xf6c5('0x5a')]['id']},'transaction':_0x25a1ed})[_0xf6c5('0x24')](function(_0x43e777){var _0x462324=_[_0xf6c5('0x52')](_0x33aed3['body'],function(_0x329993){_0x329993[_0xf6c5('0x6a')]=_0x33aed3[_0xf6c5('0x5a')]['id'];return _0x329993;});return db[_0xf6c5('0xaa')][_0xf6c5('0xab')](_0x462324,{'transaction':_0x25a1ed});});})['then'](function(){return db[_0xf6c5('0xaa')][_0xf6c5('0xac')]({'where':{'OpenchannelAccountId':_0x33aed3[_0xf6c5('0x5a')]['id']},'order':_0xf6c5('0x8b')});});}})[_0xf6c5('0x24')](respondWithResult(_0x328ca0,null))[_0xf6c5('0x2e')](handleError(_0x328ca0,null));};exports[_0xf6c5('0xad')]=function(_0x54a9d7,_0xcd3de3,_0x17eecd){var _0x248ddf={};var _0xc3fccf={};var _0x2f5453;var _0x342ed3;return db['OpenchannelAccount'][_0xf6c5('0x69')]({'where':{'id':_0x54a9d7[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0xcd3de3,null))[_0xf6c5('0x24')](function(_0x589d38){if(_0x589d38){_0x2f5453=_0x589d38;_0xc3fccf['model']=_[_0xf6c5('0x46')](db[_0xf6c5('0xaa')][_0xf6c5('0x5b')]);_0xc3fccf[_0xf6c5('0x45')]=_['keys'](_0x54a9d7[_0xf6c5('0x45')]);_0xc3fccf['filters']=_['intersection'](_0xc3fccf['model'],_0xc3fccf[_0xf6c5('0x45')]);_0x248ddf[_0xf6c5('0x4a')]=_[_0xf6c5('0x48')](_0xc3fccf[_0xf6c5('0x44')],qs[_0xf6c5('0x49')](_0x54a9d7[_0xf6c5('0x45')][_0xf6c5('0x49')]));_0x248ddf[_0xf6c5('0x4a')]=_0x248ddf['attributes'][_0xf6c5('0x5c')]?_0x248ddf['attributes']:_0xc3fccf[_0xf6c5('0x44')];_0x248ddf['order']=qs[_0xf6c5('0x4e')](_0x54a9d7[_0xf6c5('0x45')]['sort']);_0x248ddf[_0xf6c5('0x4f')]=qs[_0xf6c5('0x47')](_[_0xf6c5('0x50')](_0x54a9d7[_0xf6c5('0x45')],_0xc3fccf[_0xf6c5('0x47')]));if(_0x54a9d7[_0xf6c5('0x45')][_0xf6c5('0x57')]){_0x248ddf[_0xf6c5('0x4f')]=_['merge'](_0x248ddf[_0xf6c5('0x4f')],{'$or':_[_0xf6c5('0x52')](_0x248ddf[_0xf6c5('0x4a')],function(_0x9e44cd){var _0x30f77f={};_0x30f77f[_0x9e44cd]={'$like':'%'+_0x54a9d7[_0xf6c5('0x45')][_0xf6c5('0x57')]+'%'};return _0x30f77f;})});}_0x248ddf=_[_0xf6c5('0x51')]({},_0x248ddf,_0x54a9d7[_0xf6c5('0x5d')]);return _0x2f5453[_0xf6c5('0xad')](_0x248ddf);}})[_0xf6c5('0x24')](function(_0x36b2ef){if(_0x36b2ef){_0x342ed3=_0x36b2ef['length'];if(!_0x54a9d7[_0xf6c5('0x45')]['hasOwnProperty']('nolimit')){_0x248ddf[_0xf6c5('0x35')]=qs['limit'](_0x54a9d7[_0xf6c5('0x45')]['limit']);_0x248ddf['offset']=qs[_0xf6c5('0x34')](_0x54a9d7['query']['offset']);}return _0x2f5453[_0xf6c5('0xad')](_0x248ddf);}})['then'](function(_0x5e0d69){if(_0x5e0d69){return _0x5e0d69?{'count':_0x342ed3,'rows':_0x5e0d69}:null;}})[_0xf6c5('0x24')](respondWithResult(_0xcd3de3,null))[_0xf6c5('0x2e')](handleError(_0xcd3de3,null));};exports[_0xf6c5('0xae')]=function(_0x233c97,_0x40e792,_0xf98bfe){var _0x1785ff={'raw':![],'where':{}};var _0x3e8f9a={};var _0x4be37f={'count':0x0,'rows':[]};return db[_0xf6c5('0x43')][_0xf6c5('0x69')]({'where':{'id':_0x233c97[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x40e792,null))[_0xf6c5('0x24')](function(_0x12f12d){if(_0x12f12d){_0x3e8f9a[_0xf6c5('0x44')]=_['keys'](db['OpenchannelInteraction'][_0xf6c5('0x5b')]);_0x3e8f9a['query']=_[_0xf6c5('0x46')](_0x233c97[_0xf6c5('0x45')]);_0x3e8f9a[_0xf6c5('0x47')]=_[_0xf6c5('0x48')](_0x3e8f9a[_0xf6c5('0x44')],_0x3e8f9a[_0xf6c5('0x45')]);_0x1785ff[_0xf6c5('0x4a')]=_['intersection'](_0x3e8f9a[_0xf6c5('0x44')],qs[_0xf6c5('0x49')](_0x233c97[_0xf6c5('0x45')][_0xf6c5('0x49')]));_0x1785ff[_0xf6c5('0x4a')]=_0x1785ff[_0xf6c5('0x4a')][_0xf6c5('0x5c')]?_0x1785ff['attributes']:_0x3e8f9a['model'];if(!_0x233c97[_0xf6c5('0x45')][_0xf6c5('0x4b')](_0xf6c5('0x4c'))){_0x1785ff[_0xf6c5('0x35')]=qs[_0xf6c5('0x35')](_0x233c97[_0xf6c5('0x45')]['limit']);_0x1785ff['offset']=qs[_0xf6c5('0x34')](_0x233c97['query'][_0xf6c5('0x34')]);}_0x1785ff['order']=qs[_0xf6c5('0x4e')](_0x233c97[_0xf6c5('0x45')]['sort']);_0x1785ff['where']=qs[_0xf6c5('0x47')](_[_0xf6c5('0x50')](_0x233c97[_0xf6c5('0x45')],_0x3e8f9a['filters']));_0x1785ff['where'][_0xf6c5('0x6a')]=_0x12f12d['id'];if(_0x233c97[_0xf6c5('0x45')]['filter']){_0x1785ff[_0xf6c5('0x4f')]=_[_0xf6c5('0x51')](_0x1785ff[_0xf6c5('0x4f')],{'$or':_['map'](_0x1785ff['attributes'],function(_0x2dad4e){var _0x44baed={};_0x44baed[_0x2dad4e]={'$like':'%'+_0x233c97[_0xf6c5('0x45')]['filter']+'%'};return _0x44baed;})});}_0x1785ff=_['merge']({},_0x1785ff,_0x233c97[_0xf6c5('0x5d')]);return db[_0xf6c5('0x92')][_0xf6c5('0x33')]({'where':_0x1785ff[_0xf6c5('0x4f')]})['then'](function(_0x5078f8){_0x4be37f[_0xf6c5('0x33')]=_0x5078f8;if(_0x233c97[_0xf6c5('0x45')][_0xf6c5('0x58')]){_0x1785ff['include']=[{'model':db['CmContact'],'as':_0xf6c5('0xaf'),'required':![]},{'model':db[_0xf6c5('0xa0')],'as':_0xf6c5('0xb0'),'attributes':[_0xf6c5('0x3f'),_0xf6c5('0xb1'),'internal'],'required':![]},{'model':db[_0xf6c5('0xb2')],'as':_0xf6c5('0xb3'),'attributes':['id','name',_0xf6c5('0xb4')],'where':_0x233c97[_0xf6c5('0x45')][_0xf6c5('0xb5')]?{'id':_0x233c97['query'][_0xf6c5('0xb5')]}:undefined,'required':_0x233c97['query'][_0xf6c5('0xb5')]?!![]:![]}];}return db['OpenchannelInteraction']['findAll'](_0x1785ff);})['then'](function(_0x42f9ba){_0x4be37f['rows']=_0x42f9ba;return _0x4be37f;});}})[_0xf6c5('0x24')](respondWithFilteredResult(_0x40e792,_0x1785ff))['catch'](handleError(_0x40e792,null));};exports['addAgents']=function(_0x25e110,_0x9b6bce,_0x4ebe84){return db['OpenchannelAccount'][_0xf6c5('0x5e')]({'where':{'id':_0x25e110[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x9b6bce,null))[_0xf6c5('0x24')](function(_0x18d48f){if(_0x18d48f){return _0x18d48f['addAgents'](_0x25e110[_0xf6c5('0x60')]['ids'],_[_0xf6c5('0xb6')](_0x25e110['body'],[_0xf6c5('0x6f'),'id'])||{})[_0xf6c5('0x95')](function(_0x3f5317){for(var _0x861085=0x0;_0x861085<_0x25e110[_0xf6c5('0x60')]['ids'][_0xf6c5('0x5c')];_0x861085+=0x1){socket[_0xf6c5('0xb7')](_0xf6c5('0xb8'),{'UserId':_0x25e110[_0xf6c5('0x60')][_0xf6c5('0x6f')][_0x861085],'OpenchannelAccountId':_0x25e110['params']['id']});}return _0x3f5317;});}})[_0xf6c5('0x24')](respondWithResult(_0x9b6bce,null))['catch'](handleError(_0x9b6bce,null));};exports[_0xf6c5('0xb9')]=function(_0x373cfb,_0x2a94e7,_0x33e6b4){return db[_0xf6c5('0x43')][_0xf6c5('0x5e')]({'where':{'id':_0x373cfb[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x2a94e7,null))[_0xf6c5('0x24')](function(_0x859ec8){if(_0x859ec8){return _0x859ec8['removeAgents'](_0x373cfb[_0xf6c5('0x45')][_0xf6c5('0x6f')])[_0xf6c5('0x24')](function(){if(_[_0xf6c5('0xba')](_0x373cfb[_0xf6c5('0x45')][_0xf6c5('0x6f')])){for(var _0x280e3e=0x0;_0x280e3e<_0x373cfb[_0xf6c5('0x45')][_0xf6c5('0x6f')][_0xf6c5('0x5c')];_0x280e3e+=0x1){socket[_0xf6c5('0xb7')]('userOpenchannelAccount:remove',{'UserId':Number(_0x373cfb['query']['ids'][_0x280e3e]),'OpenchannelAccountId':Number(_0x373cfb[_0xf6c5('0x5a')]['id'])});}}else{socket[_0xf6c5('0xb7')]('userOpenchannelAccount:remove',{'UserId':Number(_0x373cfb['query']['ids']),'OpenchannelAccountId':Number(_0x373cfb[_0xf6c5('0x5a')]['id'])});}});}})[_0xf6c5('0x24')](respondWithStatusCode(_0x2a94e7,null))[_0xf6c5('0x2e')](handleError(_0x2a94e7,null));};exports[_0xf6c5('0xbb')]=function(_0x20544a,_0x45c7ec,_0x3abd1d){var _0x4cad6e={};var _0x4117d4={};var _0x996d52;var _0x167329;return db['OpenchannelAccount']['findOne']({'where':{'id':_0x20544a[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x45c7ec,null))[_0xf6c5('0x24')](function(_0x3869f4){if(_0x3869f4){_0x996d52=_0x3869f4;_0x4117d4[_0xf6c5('0x44')]=_['keys'](db[_0xf6c5('0xa0')][_0xf6c5('0x5b')]);_0x4117d4[_0xf6c5('0x45')]=_[_0xf6c5('0x46')](_0x20544a[_0xf6c5('0x45')]);_0x4117d4[_0xf6c5('0x47')]=_[_0xf6c5('0x48')](_0x4117d4[_0xf6c5('0x44')],_0x4117d4[_0xf6c5('0x45')]);_0x4cad6e[_0xf6c5('0x4a')]=_[_0xf6c5('0x48')](_0x4117d4['model'],qs['fields'](_0x20544a[_0xf6c5('0x45')]['fields']));_0x4cad6e[_0xf6c5('0x4a')]=_0x4cad6e[_0xf6c5('0x4a')]['length']?_0x4cad6e[_0xf6c5('0x4a')]:_0x4117d4['model'];_0x4cad6e['order']=qs['sort'](_0x20544a[_0xf6c5('0x45')][_0xf6c5('0x4e')]);_0x4cad6e[_0xf6c5('0x4f')]=qs[_0xf6c5('0x47')](_['pick'](_0x20544a['query'],_0x4117d4[_0xf6c5('0x47')]));if(_0x20544a[_0xf6c5('0x45')][_0xf6c5('0x57')]){_0x4cad6e[_0xf6c5('0x4f')]=_['merge'](_0x4cad6e[_0xf6c5('0x4f')],{'$or':_[_0xf6c5('0x52')](_0x4cad6e[_0xf6c5('0x4a')],function(_0x4eafb2){var _0x58af81={};_0x58af81[_0x4eafb2]={'$like':'%'+_0x20544a[_0xf6c5('0x45')][_0xf6c5('0x57')]+'%'};return _0x58af81;})});}_0x4cad6e=_[_0xf6c5('0x51')]({},_0x4cad6e,_0x20544a[_0xf6c5('0x5d')]);return _0x996d52[_0xf6c5('0xbb')](_0x4cad6e);}})[_0xf6c5('0x24')](function(_0x37deb9){if(_0x37deb9){_0x167329=_0x37deb9[_0xf6c5('0x5c')];if(!_0x20544a[_0xf6c5('0x45')][_0xf6c5('0x4b')](_0xf6c5('0x4c'))){_0x4cad6e[_0xf6c5('0x35')]=qs['limit'](_0x20544a[_0xf6c5('0x45')][_0xf6c5('0x35')]);_0x4cad6e['offset']=qs[_0xf6c5('0x34')](_0x20544a['query'][_0xf6c5('0x34')]);}return _0x996d52[_0xf6c5('0xbb')](_0x4cad6e);}})[_0xf6c5('0x24')](function(_0x3c1661){if(_0x3c1661){return _0x3c1661?{'count':_0x167329,'rows':_0x3c1661}:null;}})[_0xf6c5('0x24')](respondWithResult(_0x45c7ec,null))[_0xf6c5('0x2e')](handleError(_0x45c7ec,null));};exports['send']=function(_0xa93985,_0x473603,_0x278b6d){var _0x473ee0,_0x5df64f,_0x3e31d5;if(_[_0xf6c5('0x7d')](_0xa93985[_0xf6c5('0x60')][_0xf6c5('0x60')])||_0xa93985[_0xf6c5('0x60')][_0xf6c5('0x60')]===''){throw new db[(_0xf6c5('0x7f'))][(_0xf6c5('0x76'))](_0xf6c5('0x81'));}if(_[_0xf6c5('0x7d')](_0xa93985['body']['to'])){}_0x473ee0=_0xa93985[_0xf6c5('0x60')]['to'];return db['OpenchannelAccount'][_0xf6c5('0x69')]({'where':{'id':_0xa93985[_0xf6c5('0x5a')]['id']}})[_0xf6c5('0x24')](handleEntityNotFound(_0x473603,null))[_0xf6c5('0x24')](function(_0x262351){if(_0x262351){return db[_0xf6c5('0x43')][_0xf6c5('0x5e')]({'where':{'id':_0x262351['id']},'include':[{'model':db[_0xf6c5('0x84')],'as':_0xf6c5('0x85'),'include':[{'model':db[_0xf6c5('0x86')],'as':_0xf6c5('0x87'),'where':{[_0x262351['mapKey']]:_0x473ee0},'limit':0x1,'order':[[_0xf6c5('0x7a'),_0xf6c5('0x88')]]}]}]})[_0xf6c5('0x24')](handleEntityNotFound(_0x473603,null))['then'](function(_0x11f030){if(_0x11f030&&_0x11f030[_0xf6c5('0x85')]){_0x5df64f=_0x11f030['get']({'plain':!![]});if(_0x5df64f['List']&&_0x5df64f[_0xf6c5('0x85')][_0xf6c5('0x87')][_0xf6c5('0x5c')]){return _0x5df64f['List'][_0xf6c5('0x87')][0x0];}return db[_0xf6c5('0x86')][_0xf6c5('0x5f')](_[_0xf6c5('0x8d')](_0xa93985[_0xf6c5('0x60')],{'firstName':_0x473ee0,[_0x11f030['mapKey']]:_0x473ee0,'phone':_0x473ee0,'ListId':_0x5df64f[_0xf6c5('0x7c')]}));}})[_0xf6c5('0x24')](handleEntityNotFound(_0x473603,null))[_0xf6c5('0x24')](function(_0x49ae04){if(_0x49ae04){_0x3e31d5=_0x49ae04;return db[_0xf6c5('0x92')][_0xf6c5('0x5e')]({'where':{'ContactId':_0x3e31d5['id'],'closed':![],'OpenchannelAccountId':_0x5df64f['id']}})[_0xf6c5('0x24')](function(_0x471827){if(_0x471827){return[_0x471827,![]];}return db[_0xf6c5('0x92')][_0xf6c5('0x5f')]({'UserId':_0xa93985[_0xf6c5('0xbc')]['id'],'ContactId':_0x3e31d5['id'],'OpenchannelAccountId':_0x5df64f['id'],'lastMsgDirection':_0xf6c5('0xbd'),'Messages':[_[_0xf6c5('0x51')](_0xa93985['body'],{'read':![],'body':_0xa93985[_0xf6c5('0x60')][_0xf6c5('0x60')],'OpenchannelAccountId':_0x5df64f['id'],'UserId':_0xa93985[_0xf6c5('0xbc')]['id'],'ContactId':_0x3e31d5['id']})]},{'include':[{'model':db[_0xf6c5('0xbe')],'as':_0xf6c5('0xbf')}]})[_0xf6c5('0x24')](function(_0x5c4503){return[_0x5c4503,!![]];});});}})[_0xf6c5('0x95')](function(_0x186c65,_0x5e04d3){if(_0x5e04d3){return _0x186c65;}return db[_0xf6c5('0xbe')][_0xf6c5('0x5f')](_[_0xf6c5('0x51')](_0xa93985[_0xf6c5('0x60')],{'read':![],'body':_0xa93985[_0xf6c5('0x60')][_0xf6c5('0x60')],'OpenchannelAccountId':_0x5df64f['id'],'OpenchannelInteractionId':_0x186c65['id'],'UserId':_0xa93985[_0xf6c5('0xbc')]['id'],'ContactId':_0x3e31d5['id']}))[_0xf6c5('0x24')](function(_0x541a66){_0x186c65[_0xf6c5('0xc0')][_0xf6c5('0xbf')]=[];_0x186c65[_0xf6c5('0xc0')][_0xf6c5('0xbf')]['push'](_0x541a66[_0xf6c5('0xc0')]);return _0x186c65;});});}})[_0xf6c5('0x24')](respondWithResult(_0x473603,null))['catch'](handleError(_0x473603,null));};
\ No newline at end of file
+var _0xbadd=['agent','forcedOwnership','startRouting','Start','EventManager','notify','sequelize','OpenchannelApplication','bulkCreate','getApplications','getInteractions','Contact','Owner','fullname','internal','Tag','Tags','tag','addAgents','omit','emit','userOpenchannelAccount:save','removeAgents','isArray','userOpenchannelAccount:remove','getAgents','out','Messages','dataValues','html-pdf','zip-dir','request-promise','moment','bluebird','mustache','path','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','redis','./openchannelAccount.socket','register','jayson/promise','client','http','test','request','then','info','OpenchannelAccount,\x20%s,\x20%s','debug','stringify','error','code','message','result','catch','status','end','json','count','offset','limit','set','apply','reject','save','update','destroy','get','UserProfileResource','stack','name','send','index','Pause','OpenchannelAccount','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','where','filter','map','type','key','VIRTUAL','merge','options','includeAll','findAll','rows','show','params','mandatoryDispositionPause','rawAttributes','filters','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','addDisposition','OpnechannelAccountId','findOne','Disposition','nolimit','order','sort','pick','OpenchannelAccountId','include','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','removeAnswers','openchannel','CmContact','Sequelize','ValidationError','no\x20available\x20attributes','createdAt','difference','ListId','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','from','CmList','Contacts','DESC','Applications','account','applications','orderBy','priority','asc','List','defaults','contact','firstName','lastName','threadId','OpenchannelInteraction','externalUrl','ContactId','spread','messageId','interaction','created','autoclose','push','close','*,*,*,*','OpenchannelMessage','AttachmentId','User','UserId','unshift'];(function(_0x243217,_0x522951){var _0x478029=function(_0x18d053){while(--_0x18d053){_0x243217['push'](_0x243217['shift']());}};_0x478029(++_0x522951);}(_0xbadd,0x193));var _0xdbad=function(_0x34a14d,_0xc49d24){_0x34a14d=_0x34a14d-0x0;var _0x2015f2=_0xbadd[_0x34a14d];return _0x2015f2;};'use strict';var pdf=require(_0xdbad('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xdbad('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0xdbad('0x2'));var moment=require(_0xdbad('0x3'));var BPromise=require(_0xdbad('0x4'));var Mustache=require(_0xdbad('0x5'));var util=require('util');var path=require(_0xdbad('0x6'));var sox=require(_0xdbad('0x7'));var csv=require('to-csv');var ejs=require(_0xdbad('0x8'));var fs=require('fs');var _=require(_0xdbad('0x9'));var squel=require(_0xdbad('0xa'));var crypto=require('crypto');var jsforce=require(_0xdbad('0xb'));var deskjs=require(_0xdbad('0xc'));var toCsv=require(_0xdbad('0xd'));var querystring=require(_0xdbad('0xe'));var Papa=require(_0xdbad('0xf'));var Redis=require(_0xdbad('0x10'));var authService=require(_0xdbad('0x11'));var qs=require(_0xdbad('0x12'));var hardwareService=require(_0xdbad('0x13'));var logger=require(_0xdbad('0x14'))(_0xdbad('0x15'));var utils=require('../../config/utils');var config=require(_0xdbad('0x16'));var db=require('../../mysqldb')['db'];config[_0xdbad('0x17')]=_['defaults'](config['redis'],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xdbad('0x17')]));require(_0xdbad('0x18'))[_0xdbad('0x19')](socket);var jayson=require(_0xdbad('0x1a'));var client=jayson[_0xdbad('0x1b')][_0xdbad('0x1c')]({'port':0x232c});var client9002=jayson[_0xdbad('0x1b')]['http']({'port':0x232a});function checkPasswordPattern(_0x5aaae9,_0x39ad24,_0x4c89fe){if(_0x4c89fe){var _0x24cf98=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x24cf98[_0xdbad('0x1d')](_0x39ad24)){return _0x5aaae9;}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 _0x5aaae9;}}function respondWithRpcPromise(_0x24f21c,_0x47d603,_0x4bd6ed,_0x38d2a4){return new BPromise(function(_0x5e6bff,_0x3ab9ac){var _0x45c523=_0x38d2a4||client;return _0x45c523[_0xdbad('0x1e')](_0x24f21c,_0x4bd6ed)[_0xdbad('0x1f')](function(_0x29cb0c){logger[_0xdbad('0x20')](_0xdbad('0x21'),_0x47d603,'request\x20sent');logger[_0xdbad('0x22')]('OpenchannelAccount,\x20%s,\x20%s,\x20%s',_0x47d603,'request\x20sent',JSON[_0xdbad('0x23')](_0x29cb0c));if(_0x29cb0c['error']){if(_0x29cb0c[_0xdbad('0x24')][_0xdbad('0x25')]===0x1f4){logger['error']('OpenchannelAccount,\x20%s,\x20%s',_0x47d603,_0x29cb0c['error'][_0xdbad('0x26')]);return _0x3ab9ac(_0x29cb0c['error'][_0xdbad('0x26')]);}logger[_0xdbad('0x24')]('OpenchannelAccount,\x20%s,\x20%s',_0x47d603,_0x29cb0c[_0xdbad('0x24')]['message']);return _0x5e6bff(_0x29cb0c[_0xdbad('0x24')][_0xdbad('0x26')]);}else{logger['info'](_0xdbad('0x21'),_0x47d603,'request\x20sent');_0x5e6bff(_0x29cb0c[_0xdbad('0x27')][_0xdbad('0x26')]);}})[_0xdbad('0x28')](function(_0x184a01){logger[_0xdbad('0x24')](_0xdbad('0x21'),_0x47d603,_0x184a01);_0x3ab9ac(_0x184a01);});});}function respondWithStatusCode(_0x1c6530,_0x396088){_0x396088=_0x396088||0xcc;return function(_0xa37444){if(_0xa37444){return _0x1c6530['sendStatus'](_0x396088);}return _0x1c6530[_0xdbad('0x29')](_0x396088)[_0xdbad('0x2a')]();};}function respondWithResult(_0xdd21cf,_0x4405ef){_0x4405ef=_0x4405ef||0xc8;return function(_0x47ba78){if(_0x47ba78){return _0xdd21cf[_0xdbad('0x29')](_0x4405ef)[_0xdbad('0x2b')](_0x47ba78);}};}function respondWithFilteredResult(_0x2ff4ff,_0x453349){return function(_0x4f97c5){if(_0x4f97c5){var _0x50de9d=_0x4f97c5[_0xdbad('0x2c')],_0x308338=_0x453349[_0xdbad('0x2d')],_0x3292cb=_0x453349[_0xdbad('0x2d')]+_0x453349[_0xdbad('0x2e')],_0xfa6420;if(_0x3292cb>=_0x50de9d){_0x3292cb=_0x50de9d;_0xfa6420=0xc8;}else{_0xfa6420=0xce;}_0x2ff4ff[_0xdbad('0x29')](_0xfa6420);return _0x2ff4ff[_0xdbad('0x2f')]('Content-Range',_0x308338+'-'+_0x3292cb+'/'+_0x50de9d)[_0xdbad('0x2b')](_0x4f97c5);}return null;};}function patchUpdates(_0x7e63c6){return function(_0x224ca3){try{jsonpatch[_0xdbad('0x30')](_0x224ca3,_0x7e63c6,!![]);}catch(_0x11b293){return BPromise[_0xdbad('0x31')](_0x11b293);}return _0x224ca3[_0xdbad('0x32')]();};}function saveUpdates(_0x4354d9,_0x522025){return function(_0x381f8f){if(_0x381f8f){return _0x381f8f[_0xdbad('0x33')](_0x4354d9)['then'](function(_0x43d32d){return _0x43d32d;});}return null;};}function removeEntity(_0x48c9a7,_0x41f0f3){return function(_0x3c44a8){if(_0x3c44a8){return _0x3c44a8[_0xdbad('0x34')]()[_0xdbad('0x1f')](function(){var _0x5b5dd9=_0x3c44a8[_0xdbad('0x35')]({'plain':!![]});var _0x4ed78a='OpenchannelAccounts';return db[_0xdbad('0x36')][_0xdbad('0x34')]({'where':{'type':_0x4ed78a,'resourceId':_0x5b5dd9['id']}})['then'](function(){return _0x3c44a8;});})[_0xdbad('0x1f')](function(){_0x48c9a7[_0xdbad('0x29')](0xcc)['end']();});}};}function handleEntityNotFound(_0xb41474,_0x330c21){return function(_0x95cfc3){if(!_0x95cfc3){_0xb41474['sendStatus'](0x194);}return _0x95cfc3;};}function handleError(_0xf673d3,_0x5496d8){_0x5496d8=_0x5496d8||0x1f4;return function(_0xf97c37){logger[_0xdbad('0x24')](_0xf97c37[_0xdbad('0x37')]);if(_0xf97c37[_0xdbad('0x38')]){delete _0xf97c37['name'];}_0xf673d3[_0xdbad('0x29')](_0x5496d8)[_0xdbad('0x39')](_0xf97c37);};}exports[_0xdbad('0x3a')]=function(_0x3a4318,_0x23b3f4){var _0x55a1da={'include':[{'model':db[_0xdbad('0x3b')],'as':'mandatoryDispositionPause'}]},_0x5b3230={},_0x2cb543={'count':0x0,'rows':[]};var _0x257132=db[_0xdbad('0x3c')]['rawAttributes'];_0x5b3230[_0xdbad('0x3d')]=_[_0xdbad('0x3e')](_0x257132);_0x5b3230[_0xdbad('0x3f')]=_[_0xdbad('0x3e')](_0x3a4318[_0xdbad('0x3f')]);_0x5b3230['filters']=_[_0xdbad('0x40')](_0x5b3230[_0xdbad('0x3d')],_0x5b3230[_0xdbad('0x3f')]);_0x55a1da[_0xdbad('0x41')]=_[_0xdbad('0x40')](_0x5b3230[_0xdbad('0x3d')],qs[_0xdbad('0x42')](_0x3a4318[_0xdbad('0x3f')][_0xdbad('0x42')]));_0x55a1da['attributes']=_0x55a1da[_0xdbad('0x41')][_0xdbad('0x43')]?_0x55a1da[_0xdbad('0x41')]:_0x5b3230[_0xdbad('0x3d')];if(!_0x3a4318[_0xdbad('0x3f')][_0xdbad('0x44')]('nolimit')){_0x55a1da['limit']=qs[_0xdbad('0x2e')](_0x3a4318[_0xdbad('0x3f')][_0xdbad('0x2e')]);_0x55a1da['offset']=qs[_0xdbad('0x2d')](_0x3a4318[_0xdbad('0x3f')]['offset']);}_0x55a1da['order']=qs['sort'](_0x3a4318['query']['sort']);_0x55a1da[_0xdbad('0x45')]=qs['filters'](_['pick'](_0x3a4318['query'],_0x5b3230['filters']));if(_0x3a4318[_0xdbad('0x3f')][_0xdbad('0x46')]){_0x55a1da[_0xdbad('0x45')]=_['merge'](_0x55a1da[_0xdbad('0x45')],{'$or':_[_0xdbad('0x47')](_0x257132,function(_0x148155){if(_0x148155[_0xdbad('0x48')][_0xdbad('0x49')]!==_0xdbad('0x4a')){var _0x1918de={};_0x1918de[_0x148155['field']]={'$like':'%'+_0x3a4318[_0xdbad('0x3f')][_0xdbad('0x46')]+'%'};return _0x1918de;}})});}_0x55a1da=_[_0xdbad('0x4b')]({},_0x55a1da,_0x3a4318[_0xdbad('0x4c')]);var _0x46c934={'where':_0x55a1da[_0xdbad('0x45')]};return db[_0xdbad('0x3c')][_0xdbad('0x2c')](_0x46c934)[_0xdbad('0x1f')](function(_0x5e09f6){_0x2cb543['count']=_0x5e09f6;if(_0x3a4318['query'][_0xdbad('0x4d')]){_0x55a1da['include']=[{'all':!![]}];}return db['OpenchannelAccount'][_0xdbad('0x4e')](_0x55a1da);})[_0xdbad('0x1f')](function(_0x593c4e){_0x2cb543[_0xdbad('0x4f')]=_0x593c4e;return _0x2cb543;})[_0xdbad('0x1f')](respondWithFilteredResult(_0x23b3f4,_0x55a1da))['catch'](handleError(_0x23b3f4,null));};exports[_0xdbad('0x50')]=function(_0x483422,_0x2bdb41){var _0xce483c={'raw':![],'where':{'id':_0x483422[_0xdbad('0x51')]['id']},'include':[{'model':db[_0xdbad('0x3b')],'as':_0xdbad('0x52')}]},_0x2177e3={};_0x2177e3[_0xdbad('0x3d')]=_[_0xdbad('0x3e')](db[_0xdbad('0x3c')][_0xdbad('0x53')]);_0x2177e3['query']=_['keys'](_0x483422[_0xdbad('0x3f')]);_0x2177e3[_0xdbad('0x54')]=_[_0xdbad('0x40')](_0x2177e3[_0xdbad('0x3d')],_0x2177e3[_0xdbad('0x3f')]);_0xce483c[_0xdbad('0x41')]=_[_0xdbad('0x40')](_0x2177e3['model'],qs[_0xdbad('0x42')](_0x483422['query'][_0xdbad('0x42')]));_0xce483c[_0xdbad('0x41')]=_0xce483c[_0xdbad('0x41')][_0xdbad('0x43')]?_0xce483c[_0xdbad('0x41')]:_0x2177e3[_0xdbad('0x3d')];if(_0x483422[_0xdbad('0x3f')][_0xdbad('0x4d')]){_0xce483c['include']=[{'all':!![]}];}_0xce483c=_[_0xdbad('0x4b')]({},_0xce483c,_0x483422['options']);return db['OpenchannelAccount'][_0xdbad('0x55')](_0xce483c)[_0xdbad('0x1f')](handleEntityNotFound(_0x2bdb41,null))[_0xdbad('0x1f')](respondWithResult(_0x2bdb41,null))[_0xdbad('0x28')](handleError(_0x2bdb41,null));};exports[_0xdbad('0x56')]=function(_0x4e4b7f,_0x355cd6){return db[_0xdbad('0x3c')]['create'](_0x4e4b7f[_0xdbad('0x57')],{})['then'](function(_0x2ff690){var _0xc19a6a=_0x4e4b7f[_0xdbad('0x58')][_0xdbad('0x35')]({'plain':!![]});if(!_0xc19a6a)throw new Error(_0xdbad('0x59'));if(_0xc19a6a[_0xdbad('0x5a')]==='user'){var _0x557e3a=_0x2ff690[_0xdbad('0x35')]({'plain':!![]});var _0x538981='OpenchannelAccounts';return db[_0xdbad('0x5b')][_0xdbad('0x55')]({'where':{'name':_0x538981,'userProfileId':_0xc19a6a[_0xdbad('0x5c')]},'raw':!![]})[_0xdbad('0x1f')](function(_0x408629){if(_0x408629&&_0x408629[_0xdbad('0x5d')]===0x0){return db[_0xdbad('0x36')][_0xdbad('0x56')]({'name':_0x557e3a[_0xdbad('0x38')],'resourceId':_0x557e3a['id'],'type':_0x408629[_0xdbad('0x38')],'sectionId':_0x408629['id']},{})['then'](function(){return _0x2ff690;});}else{return _0x2ff690;}})['catch'](function(_0x5a7988){logger[_0xdbad('0x24')](_0xdbad('0x5e'),_0x5a7988);throw _0x5a7988;});}return _0x2ff690;})['then'](respondWithResult(_0x355cd6,0xc9))[_0xdbad('0x28')](handleError(_0x355cd6,null));};exports[_0xdbad('0x33')]=function(_0x574a48,_0x35d15a){if(_0x574a48[_0xdbad('0x57')]['id']){delete _0x574a48[_0xdbad('0x57')]['id'];}return db[_0xdbad('0x3c')][_0xdbad('0x55')]({'where':{'id':_0x574a48[_0xdbad('0x51')]['id']},'include':[{'model':db[_0xdbad('0x3b')],'as':_0xdbad('0x52')}]})[_0xdbad('0x1f')](handleEntityNotFound(_0x35d15a,null))[_0xdbad('0x1f')](saveUpdates(_0x574a48[_0xdbad('0x57')],null))['then'](respondWithResult(_0x35d15a,null))['catch'](handleError(_0x35d15a,null));};exports['destroy']=function(_0x4bbbff,_0x274d3b){return db['OpenchannelAccount'][_0xdbad('0x55')]({'where':{'id':_0x4bbbff[_0xdbad('0x51')]['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x274d3b,null))[_0xdbad('0x1f')](removeEntity(_0x274d3b,null))[_0xdbad('0x28')](handleError(_0x274d3b,null));};exports[_0xdbad('0x5f')]=function(_0x4ac83e,_0x361475){return db[_0xdbad('0x3c')][_0xdbad('0x5f')]()[_0xdbad('0x1f')](respondWithResult(_0x361475,null))[_0xdbad('0x28')](handleError(_0x361475,null));};exports[_0xdbad('0x60')]=function(_0xbe33a3,_0x1d8d87,_0x37354a){if(_0xbe33a3['body']['id']){delete _0xbe33a3['body']['id'];}return db[_0xdbad('0x3c')]['find']({'where':{'id':_0xbe33a3[_0xdbad('0x51')]['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x1d8d87,null))[_0xdbad('0x1f')](function(_0x901eb0){if(_0x901eb0){_0xbe33a3['body'][_0xdbad('0x61')]=_0x901eb0['id'];return db['Disposition'][_0xdbad('0x56')](_0xbe33a3[_0xdbad('0x57')]);}})[_0xdbad('0x1f')](respondWithResult(_0x1d8d87,null))['catch'](handleError(_0x1d8d87,null));};exports['getDispositions']=function(_0x364aa3,_0x586ef7,_0x2c59b0){var _0x5b4888={'raw':![],'where':{}};var _0xa9e6a1={};var _0x2bd5d7={'count':0x0,'rows':[]};return db[_0xdbad('0x3c')][_0xdbad('0x62')]({'where':{'id':_0x364aa3['params']['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x586ef7,null))[_0xdbad('0x1f')](function(_0x2325f4){if(_0x2325f4){_0xa9e6a1[_0xdbad('0x3d')]=_['keys'](db[_0xdbad('0x63')][_0xdbad('0x53')]);_0xa9e6a1[_0xdbad('0x3f')]=_[_0xdbad('0x3e')](_0x364aa3[_0xdbad('0x3f')]);_0xa9e6a1[_0xdbad('0x54')]=_[_0xdbad('0x40')](_0xa9e6a1[_0xdbad('0x3d')],_0xa9e6a1[_0xdbad('0x3f')]);_0x5b4888['attributes']=_[_0xdbad('0x40')](_0xa9e6a1[_0xdbad('0x3d')],qs[_0xdbad('0x42')](_0x364aa3[_0xdbad('0x3f')]['fields']));_0x5b4888['attributes']=_0x5b4888[_0xdbad('0x41')][_0xdbad('0x43')]?_0x5b4888[_0xdbad('0x41')]:_0xa9e6a1[_0xdbad('0x3d')];if(!_0x364aa3['query'][_0xdbad('0x44')](_0xdbad('0x64'))){_0x5b4888[_0xdbad('0x2e')]=qs[_0xdbad('0x2e')](_0x364aa3[_0xdbad('0x3f')][_0xdbad('0x2e')]);_0x5b4888['offset']=qs[_0xdbad('0x2d')](_0x364aa3[_0xdbad('0x3f')][_0xdbad('0x2d')]);}_0x5b4888[_0xdbad('0x65')]=qs[_0xdbad('0x66')](_0x364aa3[_0xdbad('0x3f')]['sort']);_0x5b4888[_0xdbad('0x45')]=qs[_0xdbad('0x54')](_[_0xdbad('0x67')](_0x364aa3['query'],_0xa9e6a1[_0xdbad('0x54')]));_0x5b4888[_0xdbad('0x45')][_0xdbad('0x68')]=_0x2325f4['id'];if(_0x364aa3[_0xdbad('0x3f')]['filter']){_0x5b4888[_0xdbad('0x45')]=_[_0xdbad('0x4b')](_0x5b4888['where'],{'$or':_[_0xdbad('0x47')](_0x5b4888[_0xdbad('0x41')],function(_0x3aa077){var _0x3185ae={};_0x3185ae[_0x3aa077]={'$like':'%'+_0x364aa3[_0xdbad('0x3f')][_0xdbad('0x46')]+'%'};return _0x3185ae;})});}_0x5b4888=_[_0xdbad('0x4b')]({},_0x5b4888,_0x364aa3[_0xdbad('0x4c')]);return db['Disposition'][_0xdbad('0x2c')]({'where':_0x5b4888[_0xdbad('0x45')]})[_0xdbad('0x1f')](function(_0x200346){_0x2bd5d7[_0xdbad('0x2c')]=_0x200346;if(_0x364aa3[_0xdbad('0x3f')]['includeAll']){_0x5b4888[_0xdbad('0x69')]=[{'all':!![]}];}return db[_0xdbad('0x63')][_0xdbad('0x4e')](_0x5b4888);})[_0xdbad('0x1f')](function(_0x55a213){_0x2bd5d7['rows']=_0x55a213;return _0x2bd5d7;});}})['then'](respondWithFilteredResult(_0x586ef7,_0x5b4888))[_0xdbad('0x28')](handleError(_0x586ef7,null));};exports['removeDispositions']=function(_0x56627f,_0x27eafe,_0x235886){return db[_0xdbad('0x3c')][_0xdbad('0x55')]({'where':{'id':_0x56627f['params']['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x27eafe,null))[_0xdbad('0x1f')](function(_0x270832){if(_0x270832){return _0x270832[_0xdbad('0x6a')](_0x56627f[_0xdbad('0x3f')][_0xdbad('0x6b')]);}})['then'](respondWithStatusCode(_0x27eafe,null))['catch'](handleError(_0x27eafe,null));};exports[_0xdbad('0x6c')]=function(_0x49a86c,_0x4fa3b2,_0x1b170e){if(_0x49a86c[_0xdbad('0x57')]['id']){delete _0x49a86c[_0xdbad('0x57')]['id'];}return db['OpenchannelAccount'][_0xdbad('0x55')]({'where':{'id':_0x49a86c['params']['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x4fa3b2,null))['then'](function(_0x7912a0){if(_0x7912a0){_0x49a86c['body'][_0xdbad('0x68')]=_0x7912a0['id'];return db[_0xdbad('0x6d')][_0xdbad('0x56')](_0x49a86c['body']);}})['then'](respondWithResult(_0x4fa3b2,null))[_0xdbad('0x28')](handleError(_0x4fa3b2,null));};exports[_0xdbad('0x6e')]=function(_0x474531,_0x4e46e5,_0x5c6693){var _0x4d45c1={'raw':![],'where':{}};var _0x1e4211={};var _0x3459a4={'count':0x0,'rows':[]};return db[_0xdbad('0x3c')]['findOne']({'where':{'id':_0x474531[_0xdbad('0x51')]['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x4e46e5,null))[_0xdbad('0x1f')](function(_0x6fa6a1){if(_0x6fa6a1){_0x1e4211[_0xdbad('0x3d')]=_['keys'](db[_0xdbad('0x6d')]['rawAttributes']);_0x1e4211[_0xdbad('0x3f')]=_[_0xdbad('0x3e')](_0x474531[_0xdbad('0x3f')]);_0x1e4211['filters']=_['intersection'](_0x1e4211['model'],_0x1e4211[_0xdbad('0x3f')]);_0x4d45c1[_0xdbad('0x41')]=_[_0xdbad('0x40')](_0x1e4211['model'],qs['fields'](_0x474531['query'][_0xdbad('0x42')]));_0x4d45c1[_0xdbad('0x41')]=_0x4d45c1[_0xdbad('0x41')][_0xdbad('0x43')]?_0x4d45c1[_0xdbad('0x41')]:_0x1e4211['model'];if(!_0x474531[_0xdbad('0x3f')][_0xdbad('0x44')](_0xdbad('0x64'))){_0x4d45c1[_0xdbad('0x2e')]=qs[_0xdbad('0x2e')](_0x474531[_0xdbad('0x3f')][_0xdbad('0x2e')]);_0x4d45c1[_0xdbad('0x2d')]=qs[_0xdbad('0x2d')](_0x474531['query'][_0xdbad('0x2d')]);}_0x4d45c1[_0xdbad('0x65')]=qs[_0xdbad('0x66')](_0x474531[_0xdbad('0x3f')][_0xdbad('0x66')]);_0x4d45c1['where']=qs['filters'](_[_0xdbad('0x67')](_0x474531[_0xdbad('0x3f')],_0x1e4211['filters']));_0x4d45c1[_0xdbad('0x45')][_0xdbad('0x68')]=_0x6fa6a1['id'];if(_0x474531[_0xdbad('0x3f')][_0xdbad('0x46')]){_0x4d45c1[_0xdbad('0x45')]=_[_0xdbad('0x4b')](_0x4d45c1['where'],{'$or':_[_0xdbad('0x47')](_0x4d45c1[_0xdbad('0x41')],function(_0x4b5e42){var _0x40620e={};_0x40620e[_0x4b5e42]={'$like':'%'+_0x474531[_0xdbad('0x3f')][_0xdbad('0x46')]+'%'};return _0x40620e;})});}_0x4d45c1=_[_0xdbad('0x4b')]({},_0x4d45c1,_0x474531[_0xdbad('0x4c')]);return db['CannedAnswer'][_0xdbad('0x2c')]({'where':_0x4d45c1['where']})['then'](function(_0x1b5319){_0x3459a4['count']=_0x1b5319;if(_0x474531[_0xdbad('0x3f')][_0xdbad('0x4d')]){_0x4d45c1[_0xdbad('0x69')]=[{'all':!![]}];}return db[_0xdbad('0x6d')][_0xdbad('0x4e')](_0x4d45c1);})['then'](function(_0x649ac){_0x3459a4[_0xdbad('0x4f')]=_0x649ac;return _0x3459a4;});}})['then'](respondWithFilteredResult(_0x4e46e5,_0x4d45c1))[_0xdbad('0x28')](handleError(_0x4e46e5,null));};exports['removeAnswers']=function(_0x2324d9,_0x4c1897,_0x5b418e){return db[_0xdbad('0x3c')][_0xdbad('0x55')]({'where':{'id':_0x2324d9['params']['id']}})['then'](handleEntityNotFound(_0x4c1897,null))[_0xdbad('0x1f')](function(_0x69c3a5){if(_0x69c3a5){return _0x69c3a5[_0xdbad('0x6f')](_0x2324d9[_0xdbad('0x3f')][_0xdbad('0x6b')]);}})[_0xdbad('0x1f')](respondWithStatusCode(_0x4c1897,null))[_0xdbad('0x28')](handleError(_0x4c1897,null));};exports['notify']=function(_0x31317c,_0x2a8027,_0x563ea0){var _0x46ee70={'body':_0x31317c[_0xdbad('0x57')],'channel':_0xdbad('0x70')};var _0x497fab=[];var _0x53cccd=[];var _0x431a63={};var _0x53cd29=![];return db[_0xdbad('0x71')][_0xdbad('0x5f')]()['then'](function(_0x5063d1){if(!_0x5063d1){throw new db[(_0xdbad('0x72'))][(_0xdbad('0x73'))](_0xdbad('0x74'));}_0x497fab=_['difference'](_[_0xdbad('0x3e')](_0x5063d1),[_0xdbad('0x75'),'updatedAt']);_0x53cccd=_[_0xdbad('0x76')](_[_0xdbad('0x3e')](_0x5063d1),[_0xdbad('0x75'),'updatedAt','CompanyId',_0xdbad('0x77')]);if(_0x31317c['body']['id']){delete _0x31317c[_0xdbad('0x57')]['id'];}if(_[_0xdbad('0x78')](_0x31317c[_0xdbad('0x57')]['from'])){throw new db[(_0xdbad('0x72'))][(_0xdbad('0x73'))]('from\x20is\x20mandatory');}if(_[_0xdbad('0x78')](_0x31317c[_0xdbad('0x57')][_0xdbad('0x57')])||_0x31317c['body'][_0xdbad('0x57')]===''){throw new db[(_0xdbad('0x72'))]['ValidationError'](_0xdbad('0x79'));}if(_[_0xdbad('0x78')](_0x31317c[_0xdbad('0x57')][_0xdbad('0x7a')])){throw new db['Sequelize'][(_0xdbad('0x73'))](_0xdbad('0x7b')+_0x53cccd);}if(!_[_0xdbad('0x7c')](_0x53cccd,_0x31317c[_0xdbad('0x57')][_0xdbad('0x7a')])){throw new db[(_0xdbad('0x72'))][(_0xdbad('0x73'))](_0xdbad('0x7d')+_0x53cccd);}_0x431a63[_0x31317c[_0xdbad('0x57')][_0xdbad('0x7a')]]=_0x31317c[_0xdbad('0x57')][_0xdbad('0x7e')];})[_0xdbad('0x1f')](function(){return db[_0xdbad('0x3c')][_0xdbad('0x55')]({'where':{'id':_0x31317c['params']['id']},'include':[{'model':db[_0xdbad('0x7f')],'as':'List','include':[{'model':db['CmContact'],'as':_0xdbad('0x80'),'where':_0x431a63,'limit':0x1,'order':[['updatedAt',_0xdbad('0x81')]]}]},{'model':db['OpenchannelApplication'],'as':_0xdbad('0x82')}]});})['then'](handleEntityNotFound(_0x2a8027,null))['then'](function(_0x35123b){if(_0x35123b&&_0x35123b['List']){_0x46ee70[_0xdbad('0x83')]=_0x35123b;_0x46ee70[_0xdbad('0x84')]=_0x35123b[_0xdbad('0x82')];_0x46ee70['list']=_0x35123b['List'];_0x46ee70['applications']=_[_0xdbad('0x85')](_0x46ee70[_0xdbad('0x84')],[_0xdbad('0x86')],[_0xdbad('0x87')]);if(_0x46ee70[_0xdbad('0x83')][_0xdbad('0x82')]){delete _0x46ee70['account'][_0xdbad('0x82')];}if(_0x46ee70[_0xdbad('0x83')][_0xdbad('0x88')]&&_0x46ee70['account'][_0xdbad('0x88')][_0xdbad('0x80')][_0xdbad('0x43')]){return _0x46ee70[_0xdbad('0x83')][_0xdbad('0x88')][_0xdbad('0x80')][0x0];}var _0xe22127=_[_0xdbad('0x89')](_0x31317c[_0xdbad('0x57')],{'firstName':_0x31317c['body'][_0xdbad('0x7e')],'ListId':_0x35123b[_0xdbad('0x77')]});_0xe22127[_0x31317c[_0xdbad('0x57')][_0xdbad('0x7a')]]=_0x31317c[_0xdbad('0x57')][_0xdbad('0x7e')];return db[_0xdbad('0x71')][_0xdbad('0x56')](_0xe22127,{'fields':_0x497fab,'raw':!![]});}})[_0xdbad('0x1f')](handleEntityNotFound(_0x2a8027,null))[_0xdbad('0x1f')](function(_0x1375df){_0x46ee70[_0xdbad('0x8a')]=_0x1375df;if(_0x1375df){var _0x4bbf23={'ContactId':_0x1375df['id'],'OpenchannelAccountId':_0x31317c[_0xdbad('0x51')]['id'],'from':(_0x1375df[_0xdbad('0x8b')]||'')+'\x20'+(_0x1375df[_0xdbad('0x8c')]||'')};var _0x4f2474={'OpenchannelAccountId':_0x31317c[_0xdbad('0x51')]['id'],'closed':![]};if(_0x31317c['body'][_0xdbad('0x8d')]){_0x4f2474[_0xdbad('0x8d')]=_0x31317c[_0xdbad('0x57')][_0xdbad('0x8d')];return db[_0xdbad('0x8e')][_0xdbad('0x55')]({'where':_0x4f2474})[_0xdbad('0x1f')](function(_0x4c68fb){if(_0x4c68fb){return[_0x4c68fb,![]];}_0x4bbf23['threadId']=_0x31317c[_0xdbad('0x57')][_0xdbad('0x8d')];_0x4bbf23[_0xdbad('0x8f')]=_0x31317c[_0xdbad('0x57')][_0xdbad('0x8f')];return db[_0xdbad('0x8e')][_0xdbad('0x56')](_0x4bbf23)[_0xdbad('0x1f')](function(_0x47ddc9){return[_0x47ddc9,!![]];});});}else{_0x4f2474[_0xdbad('0x8d')]=null;}_0x4f2474[_0xdbad('0x90')]=_0x1375df['id'];return db['OpenchannelInteraction']['find']({'where':_0x4f2474})[_0xdbad('0x1f')](function(_0x28c606){if(_0x28c606){return[_0x28c606,![]];}return db[_0xdbad('0x8e')][_0xdbad('0x56')](_0x4bbf23)[_0xdbad('0x1f')](function(_0x3ba959){return[_0x3ba959,!![]];});});}})[_0xdbad('0x91')](function(_0x48a27c,_0x7006e){if(_0x48a27c){_0x53cd29=_0x7006e;if(!_0x7006e){var _0x17f963={'from':(_0x46ee70[_0xdbad('0x8a')]['firstName']||'')+'\x20'+(_0x46ee70['contact']['lastName']||'')};if(_0x31317c['body'][_0xdbad('0x8d')]&&_0x31317c[_0xdbad('0x57')][_0xdbad('0x92')]&&_0x31317c[_0xdbad('0x57')][_0xdbad('0x8d')]!=_0x31317c['body']['messageId']){_0x17f963[_0xdbad('0x8d')]=_0x31317c['body'][_0xdbad('0x92')];}return _0x48a27c[_0xdbad('0x33')](_0x17f963);}else{return _0x48a27c;}}})[_0xdbad('0x1f')](function(_0x8b093e){_0x46ee70['interaction']=_0x8b093e[_0xdbad('0x35')]({'plain':!![]});_0x46ee70[_0xdbad('0x93')]['created']=_0x53cd29;if(_0x46ee70[_0xdbad('0x93')][_0xdbad('0x94')]){if(_0x46ee70[_0xdbad('0x83')][_0xdbad('0x95')]){_0x46ee70['applications'][_0xdbad('0x96')]({'id':0x0,'priority':_0x46ee70[_0xdbad('0x84')][_0xdbad('0x43')]+0x1,'app':_0xdbad('0x97'),'appdata':'unmanaged','interval':_0xdbad('0x98')});}}return db[_0xdbad('0x99')]['create']({'body':_0x31317c[_0xdbad('0x57')]['body'],'OpenchannelAccountId':_0x31317c[_0xdbad('0x51')]['id'],'OpenchannelInteractionId':_0x8b093e['id'],'direction':'in','ContactId':_0x46ee70[_0xdbad('0x8a')]['id'],'AttachmentId':_0x31317c[_0xdbad('0x57')][_0xdbad('0x9a')]});})[_0xdbad('0x1f')](function(_0xd57f7c){_0x46ee70[_0xdbad('0x26')]=_0xd57f7c;if(_0x46ee70['interaction']['UserId']){return db[_0xdbad('0x9b')][_0xdbad('0x55')]({'attributes':['id',_0xdbad('0x38')],'where':{'id':_0x46ee70[_0xdbad('0x93')][_0xdbad('0x9c')]}})['then'](function(_0x5c0877){if(_0x5c0877){_0x46ee70['applications'][_0xdbad('0x9d')]({'id':0x0,'priority':0x0,'app':_0xdbad('0x9e'),'appdata':_0x5c0877['name']+','+(_0x46ee70['account']['waitForTheAssignedAgent']||0xa),'interval':_0xdbad('0x98')});_0x46ee70[_0xdbad('0x9f')]=![];}return respondWithRpcPromise('Start',_0xdbad('0xa0'),_0x46ee70);});}return respondWithRpcPromise(_0xdbad('0xa1'),_0xdbad('0xa0'),_0x46ee70);})[_0xdbad('0x1f')](function(_0x2933c5){respondWithRpcPromise(_0xdbad('0xa2'),'EventManager',{'event':_0xdbad('0xa3'),'message':_0x2933c5},client9002);return _0x2933c5;})[_0xdbad('0x1f')](respondWithResult(_0x2a8027,null))[_0xdbad('0x28')](handleError(_0x2a8027,null));};exports['addApplications']=function(_0x43d406,_0x19a47a,_0x1567c4){return db[_0xdbad('0x3c')][_0xdbad('0x62')]({'where':{'id':_0x43d406[_0xdbad('0x51')]['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x19a47a,null))[_0xdbad('0x1f')](function(_0x4610d1){if(_0x4610d1){return db[_0xdbad('0xa4')]['transaction'](function(_0x255a66){return db[_0xdbad('0xa5')][_0xdbad('0x34')]({'where':{'OpenchannelAccountId':_0x43d406[_0xdbad('0x51')]['id']},'transaction':_0x255a66})[_0xdbad('0x1f')](function(_0xe13f8e){var _0x37defe=_[_0xdbad('0x47')](_0x43d406[_0xdbad('0x57')],function(_0x31a142){_0x31a142['OpenchannelAccountId']=_0x43d406[_0xdbad('0x51')]['id'];return _0x31a142;});return db[_0xdbad('0xa5')][_0xdbad('0xa6')](_0x37defe,{'transaction':_0x255a66});});})[_0xdbad('0x1f')](function(){return db[_0xdbad('0xa5')]['findAndCountAll']({'where':{'OpenchannelAccountId':_0x43d406[_0xdbad('0x51')]['id']},'order':_0xdbad('0x86')});});}})[_0xdbad('0x1f')](respondWithResult(_0x19a47a,null))[_0xdbad('0x28')](handleError(_0x19a47a,null));};exports['getApplications']=function(_0x1eb496,_0x1b8d2d,_0x21060a){var _0xe4c1ce={};var _0x374596={};var _0x4fec20;var _0x251da8;return db[_0xdbad('0x3c')][_0xdbad('0x62')]({'where':{'id':_0x1eb496['params']['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x1b8d2d,null))['then'](function(_0x24c87f){if(_0x24c87f){_0x4fec20=_0x24c87f;_0x374596[_0xdbad('0x3d')]=_[_0xdbad('0x3e')](db['OpenchannelApplication'][_0xdbad('0x53')]);_0x374596[_0xdbad('0x3f')]=_['keys'](_0x1eb496[_0xdbad('0x3f')]);_0x374596[_0xdbad('0x54')]=_['intersection'](_0x374596[_0xdbad('0x3d')],_0x374596[_0xdbad('0x3f')]);_0xe4c1ce['attributes']=_[_0xdbad('0x40')](_0x374596[_0xdbad('0x3d')],qs[_0xdbad('0x42')](_0x1eb496[_0xdbad('0x3f')][_0xdbad('0x42')]));_0xe4c1ce[_0xdbad('0x41')]=_0xe4c1ce[_0xdbad('0x41')][_0xdbad('0x43')]?_0xe4c1ce[_0xdbad('0x41')]:_0x374596[_0xdbad('0x3d')];_0xe4c1ce[_0xdbad('0x65')]=qs['sort'](_0x1eb496[_0xdbad('0x3f')][_0xdbad('0x66')]);_0xe4c1ce[_0xdbad('0x45')]=qs[_0xdbad('0x54')](_[_0xdbad('0x67')](_0x1eb496[_0xdbad('0x3f')],_0x374596[_0xdbad('0x54')]));if(_0x1eb496['query']['filter']){_0xe4c1ce[_0xdbad('0x45')]=_[_0xdbad('0x4b')](_0xe4c1ce['where'],{'$or':_[_0xdbad('0x47')](_0xe4c1ce[_0xdbad('0x41')],function(_0x22d0e3){var _0x5db9d1={};_0x5db9d1[_0x22d0e3]={'$like':'%'+_0x1eb496[_0xdbad('0x3f')][_0xdbad('0x46')]+'%'};return _0x5db9d1;})});}_0xe4c1ce=_[_0xdbad('0x4b')]({},_0xe4c1ce,_0x1eb496[_0xdbad('0x4c')]);return _0x4fec20[_0xdbad('0xa7')](_0xe4c1ce);}})[_0xdbad('0x1f')](function(_0x5740b0){if(_0x5740b0){_0x251da8=_0x5740b0['length'];if(!_0x1eb496[_0xdbad('0x3f')][_0xdbad('0x44')](_0xdbad('0x64'))){_0xe4c1ce[_0xdbad('0x2e')]=qs[_0xdbad('0x2e')](_0x1eb496[_0xdbad('0x3f')][_0xdbad('0x2e')]);_0xe4c1ce[_0xdbad('0x2d')]=qs[_0xdbad('0x2d')](_0x1eb496['query'][_0xdbad('0x2d')]);}return _0x4fec20[_0xdbad('0xa7')](_0xe4c1ce);}})[_0xdbad('0x1f')](function(_0x4be56f){if(_0x4be56f){return _0x4be56f?{'count':_0x251da8,'rows':_0x4be56f}:null;}})[_0xdbad('0x1f')](respondWithResult(_0x1b8d2d,null))[_0xdbad('0x28')](handleError(_0x1b8d2d,null));};exports[_0xdbad('0xa8')]=function(_0x89037e,_0x193321,_0x3a5fd0){var _0x1815c4={'raw':![],'where':{}};var _0x3822ed={};var _0x26e500={'count':0x0,'rows':[]};return db[_0xdbad('0x3c')][_0xdbad('0x62')]({'where':{'id':_0x89037e[_0xdbad('0x51')]['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x193321,null))['then'](function(_0x33fd49){if(_0x33fd49){_0x3822ed[_0xdbad('0x3d')]=_[_0xdbad('0x3e')](db[_0xdbad('0x8e')][_0xdbad('0x53')]);_0x3822ed['query']=_['keys'](_0x89037e['query']);_0x3822ed[_0xdbad('0x54')]=_[_0xdbad('0x40')](_0x3822ed[_0xdbad('0x3d')],_0x3822ed[_0xdbad('0x3f')]);_0x1815c4[_0xdbad('0x41')]=_[_0xdbad('0x40')](_0x3822ed[_0xdbad('0x3d')],qs[_0xdbad('0x42')](_0x89037e[_0xdbad('0x3f')][_0xdbad('0x42')]));_0x1815c4[_0xdbad('0x41')]=_0x1815c4[_0xdbad('0x41')]['length']?_0x1815c4[_0xdbad('0x41')]:_0x3822ed['model'];if(!_0x89037e['query'][_0xdbad('0x44')](_0xdbad('0x64'))){_0x1815c4[_0xdbad('0x2e')]=qs['limit'](_0x89037e[_0xdbad('0x3f')][_0xdbad('0x2e')]);_0x1815c4[_0xdbad('0x2d')]=qs[_0xdbad('0x2d')](_0x89037e['query'][_0xdbad('0x2d')]);}_0x1815c4['order']=qs[_0xdbad('0x66')](_0x89037e[_0xdbad('0x3f')][_0xdbad('0x66')]);_0x1815c4[_0xdbad('0x45')]=qs[_0xdbad('0x54')](_[_0xdbad('0x67')](_0x89037e[_0xdbad('0x3f')],_0x3822ed['filters']));_0x1815c4[_0xdbad('0x45')][_0xdbad('0x68')]=_0x33fd49['id'];if(_0x89037e[_0xdbad('0x3f')][_0xdbad('0x46')]){_0x1815c4['where']=_[_0xdbad('0x4b')](_0x1815c4[_0xdbad('0x45')],{'$or':_['map'](_0x1815c4[_0xdbad('0x41')],function(_0x2ee347){var _0xa64ad9={};_0xa64ad9[_0x2ee347]={'$like':'%'+_0x89037e[_0xdbad('0x3f')][_0xdbad('0x46')]+'%'};return _0xa64ad9;})});}_0x1815c4=_[_0xdbad('0x4b')]({},_0x1815c4,_0x89037e[_0xdbad('0x4c')]);return db[_0xdbad('0x8e')][_0xdbad('0x2c')]({'where':_0x1815c4[_0xdbad('0x45')]})['then'](function(_0x41cd60){_0x26e500['count']=_0x41cd60;if(_0x89037e[_0xdbad('0x3f')][_0xdbad('0x4d')]){_0x1815c4[_0xdbad('0x69')]=[{'model':db['CmContact'],'as':_0xdbad('0xa9'),'required':![]},{'model':db[_0xdbad('0x9b')],'as':_0xdbad('0xaa'),'attributes':[_0xdbad('0x38'),_0xdbad('0xab'),_0xdbad('0xac')],'required':![]},{'model':db[_0xdbad('0xad')],'as':_0xdbad('0xae'),'attributes':['id',_0xdbad('0x38'),'color'],'where':_0x89037e[_0xdbad('0x3f')][_0xdbad('0xaf')]?{'id':_0x89037e['query']['tag']}:undefined,'required':_0x89037e[_0xdbad('0x3f')][_0xdbad('0xaf')]?!![]:![]}];}return db[_0xdbad('0x8e')][_0xdbad('0x4e')](_0x1815c4);})['then'](function(_0x3bcd2d){_0x26e500[_0xdbad('0x4f')]=_0x3bcd2d;return _0x26e500;});}})[_0xdbad('0x1f')](respondWithFilteredResult(_0x193321,_0x1815c4))[_0xdbad('0x28')](handleError(_0x193321,null));};exports[_0xdbad('0xb0')]=function(_0x27ff7b,_0x36cfd9,_0x2a863a){return db[_0xdbad('0x3c')]['find']({'where':{'id':_0x27ff7b[_0xdbad('0x51')]['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x36cfd9,null))[_0xdbad('0x1f')](function(_0x5710a4){if(_0x5710a4){return _0x5710a4['addAgents'](_0x27ff7b[_0xdbad('0x57')][_0xdbad('0x6b')],_[_0xdbad('0xb1')](_0x27ff7b[_0xdbad('0x57')],['ids','id'])||{})['spread'](function(_0x39fe5e){for(var _0x3ec427=0x0;_0x3ec427<_0x27ff7b[_0xdbad('0x57')]['ids']['length'];_0x3ec427+=0x1){socket[_0xdbad('0xb2')](_0xdbad('0xb3'),{'UserId':_0x27ff7b[_0xdbad('0x57')]['ids'][_0x3ec427],'OpenchannelAccountId':_0x27ff7b[_0xdbad('0x51')]['id']});}return _0x39fe5e;});}})[_0xdbad('0x1f')](respondWithResult(_0x36cfd9,null))[_0xdbad('0x28')](handleError(_0x36cfd9,null));};exports[_0xdbad('0xb4')]=function(_0x2a1333,_0x267f90,_0x282c72){return db['OpenchannelAccount']['find']({'where':{'id':_0x2a1333['params']['id']}})[_0xdbad('0x1f')](handleEntityNotFound(_0x267f90,null))[_0xdbad('0x1f')](function(_0x127b97){if(_0x127b97){return _0x127b97[_0xdbad('0xb4')](_0x2a1333[_0xdbad('0x3f')][_0xdbad('0x6b')])[_0xdbad('0x1f')](function(){if(_[_0xdbad('0xb5')](_0x2a1333['query'][_0xdbad('0x6b')])){for(var _0x58e070=0x0;_0x58e070<_0x2a1333[_0xdbad('0x3f')][_0xdbad('0x6b')][_0xdbad('0x43')];_0x58e070+=0x1){socket[_0xdbad('0xb2')](_0xdbad('0xb6'),{'UserId':Number(_0x2a1333[_0xdbad('0x3f')][_0xdbad('0x6b')][_0x58e070]),'OpenchannelAccountId':Number(_0x2a1333['params']['id'])});}}else{socket[_0xdbad('0xb2')](_0xdbad('0xb6'),{'UserId':Number(_0x2a1333[_0xdbad('0x3f')][_0xdbad('0x6b')]),'OpenchannelAccountId':Number(_0x2a1333[_0xdbad('0x51')]['id'])});}});}})['then'](respondWithStatusCode(_0x267f90,null))['catch'](handleError(_0x267f90,null));};exports[_0xdbad('0xb7')]=function(_0x24e87b,_0x1489f8,_0x4fe945){var _0x20c232={};var _0x277e26={};var _0x301151;var _0x1ae113;return db['OpenchannelAccount'][_0xdbad('0x62')]({'where':{'id':_0x24e87b[_0xdbad('0x51')]['id']}})['then'](handleEntityNotFound(_0x1489f8,null))[_0xdbad('0x1f')](function(_0x3a2410){if(_0x3a2410){_0x301151=_0x3a2410;_0x277e26[_0xdbad('0x3d')]=_['keys'](db[_0xdbad('0x9b')][_0xdbad('0x53')]);_0x277e26[_0xdbad('0x3f')]=_[_0xdbad('0x3e')](_0x24e87b[_0xdbad('0x3f')]);_0x277e26[_0xdbad('0x54')]=_['intersection'](_0x277e26['model'],_0x277e26[_0xdbad('0x3f')]);_0x20c232[_0xdbad('0x41')]=_['intersection'](_0x277e26['model'],qs[_0xdbad('0x42')](_0x24e87b[_0xdbad('0x3f')][_0xdbad('0x42')]));_0x20c232[_0xdbad('0x41')]=_0x20c232['attributes'][_0xdbad('0x43')]?_0x20c232[_0xdbad('0x41')]:_0x277e26[_0xdbad('0x3d')];_0x20c232[_0xdbad('0x65')]=qs[_0xdbad('0x66')](_0x24e87b[_0xdbad('0x3f')][_0xdbad('0x66')]);_0x20c232[_0xdbad('0x45')]=qs[_0xdbad('0x54')](_[_0xdbad('0x67')](_0x24e87b[_0xdbad('0x3f')],_0x277e26[_0xdbad('0x54')]));if(_0x24e87b[_0xdbad('0x3f')]['filter']){_0x20c232[_0xdbad('0x45')]=_[_0xdbad('0x4b')](_0x20c232[_0xdbad('0x45')],{'$or':_[_0xdbad('0x47')](_0x20c232[_0xdbad('0x41')],function(_0x213db4){var _0x43b8d0={};_0x43b8d0[_0x213db4]={'$like':'%'+_0x24e87b['query']['filter']+'%'};return _0x43b8d0;})});}_0x20c232=_[_0xdbad('0x4b')]({},_0x20c232,_0x24e87b[_0xdbad('0x4c')]);return _0x301151['getAgents'](_0x20c232);}})[_0xdbad('0x1f')](function(_0x3e5c09){if(_0x3e5c09){_0x1ae113=_0x3e5c09[_0xdbad('0x43')];if(!_0x24e87b[_0xdbad('0x3f')][_0xdbad('0x44')](_0xdbad('0x64'))){_0x20c232['limit']=qs[_0xdbad('0x2e')](_0x24e87b['query'][_0xdbad('0x2e')]);_0x20c232['offset']=qs[_0xdbad('0x2d')](_0x24e87b['query'][_0xdbad('0x2d')]);}return _0x301151[_0xdbad('0xb7')](_0x20c232);}})[_0xdbad('0x1f')](function(_0x4706f2){if(_0x4706f2){return _0x4706f2?{'count':_0x1ae113,'rows':_0x4706f2}:null;}})['then'](respondWithResult(_0x1489f8,null))[_0xdbad('0x28')](handleError(_0x1489f8,null));};exports[_0xdbad('0x39')]=function(_0x3795d1,_0x3e584f,_0x48b295){var _0x1f3ec9,_0x2713e4,_0x5b673e;if(_[_0xdbad('0x78')](_0x3795d1['body'][_0xdbad('0x57')])||_0x3795d1[_0xdbad('0x57')][_0xdbad('0x57')]===''){throw new db[(_0xdbad('0x72'))][(_0xdbad('0x73'))](_0xdbad('0x79'));}if(_['isNil'](_0x3795d1['body']['to'])){}_0x1f3ec9=_0x3795d1[_0xdbad('0x57')]['to'];return db[_0xdbad('0x3c')]['findOne']({'where':{'id':_0x3795d1[_0xdbad('0x51')]['id']}})['then'](handleEntityNotFound(_0x3e584f,null))[_0xdbad('0x1f')](function(_0x2c631c){if(_0x2c631c){return db['OpenchannelAccount']['find']({'where':{'id':_0x2c631c['id']},'include':[{'model':db[_0xdbad('0x7f')],'as':'List','include':[{'model':db[_0xdbad('0x71')],'as':_0xdbad('0x80'),'where':{[_0x2c631c['mapKey']]:_0x1f3ec9},'limit':0x1,'order':[['updatedAt','DESC']]}]}]})['then'](handleEntityNotFound(_0x3e584f,null))[_0xdbad('0x1f')](function(_0x37cb07){if(_0x37cb07&&_0x37cb07[_0xdbad('0x88')]){_0x2713e4=_0x37cb07[_0xdbad('0x35')]({'plain':!![]});if(_0x2713e4['List']&&_0x2713e4[_0xdbad('0x88')][_0xdbad('0x80')][_0xdbad('0x43')]){return _0x2713e4[_0xdbad('0x88')][_0xdbad('0x80')][0x0];}return db['CmContact'][_0xdbad('0x56')](_[_0xdbad('0x89')](_0x3795d1[_0xdbad('0x57')],{'firstName':_0x1f3ec9,[_0x37cb07['mapKey']]:_0x1f3ec9,'phone':_0x1f3ec9,'ListId':_0x2713e4[_0xdbad('0x77')]}));}})[_0xdbad('0x1f')](handleEntityNotFound(_0x3e584f,null))[_0xdbad('0x1f')](function(_0x1e8adb){if(_0x1e8adb){_0x5b673e=_0x1e8adb;return db[_0xdbad('0x8e')][_0xdbad('0x55')]({'where':{'ContactId':_0x5b673e['id'],'closed':![],'OpenchannelAccountId':_0x2713e4['id']}})['then'](function(_0x2f7db3){if(_0x2f7db3){return[_0x2f7db3,![]];}return db[_0xdbad('0x8e')][_0xdbad('0x56')]({'UserId':_0x3795d1[_0xdbad('0x58')]['id'],'ContactId':_0x5b673e['id'],'OpenchannelAccountId':_0x2713e4['id'],'lastMsgDirection':_0xdbad('0xb8'),'Messages':[_[_0xdbad('0x4b')](_0x3795d1[_0xdbad('0x57')],{'read':![],'body':_0x3795d1[_0xdbad('0x57')]['body'],'OpenchannelAccountId':_0x2713e4['id'],'UserId':_0x3795d1[_0xdbad('0x58')]['id'],'ContactId':_0x5b673e['id']})]},{'include':[{'model':db['OpenchannelMessage'],'as':_0xdbad('0xb9')}]})[_0xdbad('0x1f')](function(_0x15993d){return[_0x15993d,!![]];});});}})[_0xdbad('0x91')](function(_0x1610eb,_0x5e39dc){if(_0x5e39dc){return _0x1610eb;}return db[_0xdbad('0x99')][_0xdbad('0x56')](_[_0xdbad('0x4b')](_0x3795d1[_0xdbad('0x57')],{'read':![],'body':_0x3795d1[_0xdbad('0x57')][_0xdbad('0x57')],'OpenchannelAccountId':_0x2713e4['id'],'OpenchannelInteractionId':_0x1610eb['id'],'UserId':_0x3795d1[_0xdbad('0x58')]['id'],'ContactId':_0x5b673e['id']}))[_0xdbad('0x1f')](function(_0x10e5af){_0x1610eb[_0xdbad('0xba')][_0xdbad('0xb9')]=[];_0x1610eb[_0xdbad('0xba')][_0xdbad('0xb9')][_0xdbad('0x96')](_0x10e5af[_0xdbad('0xba')]);return _0x1610eb;});});}})[_0xdbad('0x1f')](respondWithResult(_0x3e584f,null))[_0xdbad('0x28')](handleError(_0x3e584f,null));};
\ No newline at end of file
index ff7271e..dce358c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1f8e=['save','hasOwnProperty','hook','exports','events','../../mysqldb','OpenchannelAccount','setMaxListeners'];(function(_0x4d3329,_0x53e55b){var _0x3abb35=function(_0x10e135){while(--_0x10e135){_0x4d3329['push'](_0x4d3329['shift']());}};_0x3abb35(++_0x53e55b);}(_0x1f8e,0xa4));var _0xe1f8=function(_0x37c22c,_0x28a70d){_0x37c22c=_0x37c22c-0x0;var _0x119d79=_0x1f8e[_0x37c22c];return _0x119d79;};'use strict';var EventEmitter=require(_0xe1f8('0x0'));var OpenchannelAccount=require(_0xe1f8('0x1'))['db'][_0xe1f8('0x2')];var OpenchannelAccountEvents=new EventEmitter();OpenchannelAccountEvents[_0xe1f8('0x3')](0x0);var events={'afterCreate':_0xe1f8('0x4'),'afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x9488cc){return function(_0x1ef3a1,_0x5bcbf7,_0x2b7478){OpenchannelAccountEvents['emit'](_0x9488cc+':'+_0x1ef3a1['id'],_0x1ef3a1);OpenchannelAccountEvents['emit'](_0x9488cc,_0x1ef3a1);_0x2b7478(null);};}for(var e in events){if(events[_0xe1f8('0x5')](e)){var event=events[e];OpenchannelAccount[_0xe1f8('0x6')](e,emitEvent(event));}}module[_0xe1f8('0x7')]=OpenchannelAccountEvents;
\ No newline at end of file
+var _0x0a22=['save','update','hasOwnProperty','hook','exports','events','../../mysqldb','OpenchannelAccount','setMaxListeners'];(function(_0x2db3a9,_0x38480a){var _0x434503=function(_0x3218a0){while(--_0x3218a0){_0x2db3a9['push'](_0x2db3a9['shift']());}};_0x434503(++_0x38480a);}(_0x0a22,0x1eb));var _0x20a2=function(_0x41a8f5,_0x2ab807){_0x41a8f5=_0x41a8f5-0x0;var _0x25fb25=_0x0a22[_0x41a8f5];return _0x25fb25;};'use strict';var EventEmitter=require(_0x20a2('0x0'));var OpenchannelAccount=require(_0x20a2('0x1'))['db'][_0x20a2('0x2')];var OpenchannelAccountEvents=new EventEmitter();OpenchannelAccountEvents[_0x20a2('0x3')](0x0);var events={'afterCreate':_0x20a2('0x4'),'afterUpdate':_0x20a2('0x5'),'afterDestroy':'remove'};function emitEvent(_0x299314){return function(_0x1c36da,_0x297b80,_0x246440){OpenchannelAccountEvents['emit'](_0x299314+':'+_0x1c36da['id'],_0x1c36da);OpenchannelAccountEvents['emit'](_0x299314,_0x1c36da);_0x246440(null);};}for(var e in events){if(events[_0x20a2('0x6')](e)){var event=events[e];OpenchannelAccount[_0x20a2('0x7')](e,emitEvent(event));}}module[_0x20a2('0x8')]=OpenchannelAccountEvents;
\ No newline at end of file
index e285a3e..1e6c8ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcc58=['openchannel_accounts','lodash','api','moment','bluebird','request-promise','../../config/environment','./openchannelAccount.attributes','exports','define'];(function(_0x304d07,_0x575850){var _0x2269b5=function(_0x491daf){while(--_0x491daf){_0x304d07['push'](_0x304d07['shift']());}};_0x2269b5(++_0x575850);}(_0xcc58,0xab));var _0x8cc5=function(_0x55b836,_0x2a7bc2){_0x55b836=_0x55b836-0x0;var _0x1e71b1=_0xcc58[_0x55b836];return _0x1e71b1;};'use strict';var _=require(_0x8cc5('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x8cc5('0x1'));var moment=require(_0x8cc5('0x2'));var BPromise=require(_0x8cc5('0x3'));var rp=require(_0x8cc5('0x4'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x8cc5('0x5'));var attributes=require(_0x8cc5('0x6'));module[_0x8cc5('0x7')]=function(_0x251ea2,_0x44e4fb){return _0x251ea2[_0x8cc5('0x8')]('OpenchannelAccount',attributes,{'tableName':_0x8cc5('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1012=['openchannel_accounts','../../config/logger','moment','bluebird','request-promise','path','../../config/environment','define','OpenchannelAccount'];(function(_0x4e5552,_0x19ec4e){var _0x60a338=function(_0x40c70e){while(--_0x40c70e){_0x4e5552['push'](_0x4e5552['shift']());}};_0x60a338(++_0x19ec4e);}(_0x1012,0x1f0));var _0x2101=function(_0x29d94e,_0xf386d6){_0x29d94e=_0x29d94e-0x0;var _0x106237=_0x1012[_0x29d94e];return _0x106237;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x2101('0x0'))('api');var moment=require(_0x2101('0x1'));var BPromise=require(_0x2101('0x2'));var rp=require(_0x2101('0x3'));var fs=require('fs');var path=require(_0x2101('0x4'));var rimraf=require('rimraf');var config=require(_0x2101('0x5'));var attributes=require('./openchannelAccount.attributes');module['exports']=function(_0x1d91cd,_0x4a2188){return _0x1d91cd[_0x2101('0x6')](_0x2101('0x7'),attributes,{'tableName':_0x2101('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6a5397c..e37938f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fc3=['register','request','then','info','OpenchannelAccount,\x20%s,\x20%s','OpenchannelAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','redis','localhost','socket.io-emitter','./openchannelAccount.socket'];(function(_0xe45adc,_0x3b85a3){var _0x11c9ae=function(_0x87f2da){while(--_0x87f2da){_0xe45adc['push'](_0xe45adc['shift']());}};_0x11c9ae(++_0x3b85a3);}(_0x5fc3,0xa8));var _0x35fc=function(_0x34d275,_0x5d84ee){_0x34d275=_0x34d275-0x0;var _0x1379cc=_0x5fc3[_0x34d275];return _0x1379cc;};'use strict';var _=require(_0x35fc('0x0'));var util=require(_0x35fc('0x1'));var moment=require('moment');var BPromise=require(_0x35fc('0x2'));var rs=require(_0x35fc('0x3'));var fs=require('fs');var Redis=require(_0x35fc('0x4'));var db=require(_0x35fc('0x5'))['db'];var utils=require(_0x35fc('0x6'));var logger=require('../../config/logger')(_0x35fc('0x7'));var config=require(_0x35fc('0x8'));var jayson=require(_0x35fc('0x9'));var client=jayson['client']['http']({'port':0x232a});config[_0x35fc('0xa')]=_['defaults'](config[_0x35fc('0xa')],{'host':_0x35fc('0xb'),'port':0x18eb});var socket=require(_0x35fc('0xc'))(new Redis(config[_0x35fc('0xa')]));require(_0x35fc('0xd'))[_0x35fc('0xe')](socket);function respondWithRpcPromise(_0x2051ab,_0x565f95,_0x1083a9){return new BPromise(function(_0x2a1084,_0x4fdca1){return client[_0x35fc('0xf')](_0x2051ab,_0x1083a9)[_0x35fc('0x10')](function(_0x5021d4){logger[_0x35fc('0x11')](_0x35fc('0x12'),_0x565f95,'request\x20sent');logger['debug'](_0x35fc('0x13'),_0x565f95,'request\x20sent',JSON[_0x35fc('0x14')](_0x5021d4));if(_0x5021d4[_0x35fc('0x15')]){if(_0x5021d4[_0x35fc('0x15')][_0x35fc('0x16')]===0x1f4){logger[_0x35fc('0x15')]('OpenchannelAccount,\x20%s,\x20%s',_0x565f95,_0x5021d4['error']['message']);return _0x4fdca1(_0x5021d4['error'][_0x35fc('0x17')]);}logger[_0x35fc('0x15')](_0x35fc('0x12'),_0x565f95,_0x5021d4[_0x35fc('0x15')][_0x35fc('0x17')]);return _0x2a1084(_0x5021d4[_0x35fc('0x15')]['message']);}else{logger[_0x35fc('0x11')](_0x35fc('0x12'),_0x565f95,'request\x20sent');_0x2a1084(_0x5021d4[_0x35fc('0x18')][_0x35fc('0x17')]);}})[_0x35fc('0x19')](function(_0x5f56c6){logger[_0x35fc('0x15')](_0x35fc('0x12'),_0x565f95,_0x5f56c6);_0x4fdca1(_0x5f56c6);});});}
\ No newline at end of file
+var _0x5fc3=['register','request','then','info','OpenchannelAccount,\x20%s,\x20%s','OpenchannelAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','redis','localhost','socket.io-emitter','./openchannelAccount.socket'];(function(_0x5882ae,_0x3529ba){var _0x536d0c=function(_0x4e370c){while(--_0x4e370c){_0x5882ae['push'](_0x5882ae['shift']());}};_0x536d0c(++_0x3529ba);}(_0x5fc3,0xa8));var _0x35fc=function(_0x259d17,_0x220710){_0x259d17=_0x259d17-0x0;var _0x407535=_0x5fc3[_0x259d17];return _0x407535;};'use strict';var _=require(_0x35fc('0x0'));var util=require(_0x35fc('0x1'));var moment=require('moment');var BPromise=require(_0x35fc('0x2'));var rs=require(_0x35fc('0x3'));var fs=require('fs');var Redis=require(_0x35fc('0x4'));var db=require(_0x35fc('0x5'))['db'];var utils=require(_0x35fc('0x6'));var logger=require('../../config/logger')(_0x35fc('0x7'));var config=require(_0x35fc('0x8'));var jayson=require(_0x35fc('0x9'));var client=jayson['client']['http']({'port':0x232a});config[_0x35fc('0xa')]=_['defaults'](config[_0x35fc('0xa')],{'host':_0x35fc('0xb'),'port':0x18eb});var socket=require(_0x35fc('0xc'))(new Redis(config[_0x35fc('0xa')]));require(_0x35fc('0xd'))[_0x35fc('0xe')](socket);function respondWithRpcPromise(_0x2051ab,_0x565f95,_0x1083a9){return new BPromise(function(_0x2a1084,_0x4fdca1){return client[_0x35fc('0xf')](_0x2051ab,_0x1083a9)[_0x35fc('0x10')](function(_0x5021d4){logger[_0x35fc('0x11')](_0x35fc('0x12'),_0x565f95,'request\x20sent');logger['debug'](_0x35fc('0x13'),_0x565f95,'request\x20sent',JSON[_0x35fc('0x14')](_0x5021d4));if(_0x5021d4[_0x35fc('0x15')]){if(_0x5021d4[_0x35fc('0x15')][_0x35fc('0x16')]===0x1f4){logger[_0x35fc('0x15')]('OpenchannelAccount,\x20%s,\x20%s',_0x565f95,_0x5021d4['error']['message']);return _0x4fdca1(_0x5021d4['error'][_0x35fc('0x17')]);}logger[_0x35fc('0x15')](_0x35fc('0x12'),_0x565f95,_0x5021d4[_0x35fc('0x15')][_0x35fc('0x17')]);return _0x2a1084(_0x5021d4[_0x35fc('0x15')]['message']);}else{logger[_0x35fc('0x11')](_0x35fc('0x12'),_0x565f95,'request\x20sent');_0x2a1084(_0x5021d4[_0x35fc('0x18')][_0x35fc('0x17')]);}})[_0x35fc('0x19')](function(_0x5f56c6){logger[_0x35fc('0x15')](_0x35fc('0x12'),_0x565f95,_0x5f56c6);_0x4fdca1(_0x5f56c6);});});}
\ No newline at end of file
index ac2748b..d160a75 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb788=['update','removeListener','register','length','openchannelAccount:','./openchannelAccount.events','save','remove'];(function(_0x35db9b,_0x2e26e3){var _0x495ec1=function(_0x3a3b90){while(--_0x3a3b90){_0x35db9b['push'](_0x35db9b['shift']());}};_0x495ec1(++_0x2e26e3);}(_0xb788,0xcd));var _0x8b78=function(_0x27bcf5,_0x236765){_0x27bcf5=_0x27bcf5-0x0;var _0x4ce4cf=_0xb788[_0x27bcf5];return _0x4ce4cf;};'use strict';var OpenchannelAccountEvents=require(_0x8b78('0x0'));var events=[_0x8b78('0x1'),_0x8b78('0x2'),_0x8b78('0x3')];function createListener(_0x353db4,_0x54cfe1){return function(_0x2989a2){_0x54cfe1['emit'](_0x353db4,_0x2989a2);};}function removeListener(_0x336bd,_0x36fa49){return function(){OpenchannelAccountEvents[_0x8b78('0x4')](_0x336bd,_0x36fa49);};}exports[_0x8b78('0x5')]=function(_0x53077a){for(var _0x58a67=0x0,_0x60de98=events[_0x8b78('0x6')];_0x58a67<_0x60de98;_0x58a67++){var _0x2de1f2=events[_0x58a67];var _0x1d8f57=createListener(_0x8b78('0x7')+_0x2de1f2,_0x53077a);OpenchannelAccountEvents['on'](_0x2de1f2,_0x1d8f57);}};
\ No newline at end of file
+var _0xb804=['removeListener','register','length','openchannelAccount:','./openchannelAccount.events','save','remove','update','emit'];(function(_0x57d5c1,_0x55a5ef){var _0x4347c1=function(_0x4bf418){while(--_0x4bf418){_0x57d5c1['push'](_0x57d5c1['shift']());}};_0x4347c1(++_0x55a5ef);}(_0xb804,0x15a));var _0x4b80=function(_0x165a8a,_0x69cfa7){_0x165a8a=_0x165a8a-0x0;var _0x161471=_0xb804[_0x165a8a];return _0x161471;};'use strict';var OpenchannelAccountEvents=require(_0x4b80('0x0'));var events=[_0x4b80('0x1'),_0x4b80('0x2'),_0x4b80('0x3')];function createListener(_0xd4f5e8,_0x4c47bc){return function(_0x3cf64a){_0x4c47bc[_0x4b80('0x4')](_0xd4f5e8,_0x3cf64a);};}function removeListener(_0x706c1d,_0x51b7a4){return function(){OpenchannelAccountEvents[_0x4b80('0x5')](_0x706c1d,_0x51b7a4);};}exports[_0x4b80('0x6')]=function(_0x6b2ce){for(var _0x3a2546=0x0,_0x483bb0=events[_0x4b80('0x7')];_0x3a2546<_0x483bb0;_0x3a2546++){var _0x33bb0a=events[_0x3a2546];var _0x273cec=createListener(_0x4b80('0x8')+_0x33bb0a,_0x6b2ce);OpenchannelAccountEvents['on'](_0x33bb0a,_0x273cec);}};
\ No newline at end of file
index ab457ae..e535839 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4514=['show','put','delete','destroy','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelApplication.controller','get','isAuthenticated','index','/:id'];(function(_0x500010,_0xc72371){var _0x4679d4=function(_0x375d7a){while(--_0x375d7a){_0x500010['push'](_0x500010['shift']());}};_0x4679d4(++_0xc72371);}(_0x4514,0x169));var _0x4451=function(_0xd1fefc,_0x37144b){_0xd1fefc=_0xd1fefc-0x0;var _0x4d3e82=_0x4514[_0xd1fefc];return _0x4d3e82;};'use strict';var multer=require(_0x4451('0x0'));var util=require(_0x4451('0x1'));var path=require('path');var timeout=require(_0x4451('0x2'));var express=require(_0x4451('0x3'));var router=express[_0x4451('0x4')]();var auth=require(_0x4451('0x5'));var interaction=require(_0x4451('0x6'));var config=require(_0x4451('0x7'));var controller=require(_0x4451('0x8'));router[_0x4451('0x9')]('/',auth[_0x4451('0xa')](),controller[_0x4451('0xb')]);router['get'](_0x4451('0xc'),auth[_0x4451('0xa')](),controller[_0x4451('0xd')]);router['post']('/',auth[_0x4451('0xa')](),controller['create']);router[_0x4451('0xe')](_0x4451('0xc'),auth[_0x4451('0xa')](),controller['update']);router[_0x4451('0xf')](_0x4451('0xc'),auth[_0x4451('0xa')](),controller[_0x4451('0x10')]);module['exports']=router;
\ No newline at end of file
+var _0xdbac=['/:id','show','post','put','update','delete','destroy','exports','multer','util','path','connect-timeout','Router','../../components/interaction/service','../../config/environment','get','isAuthenticated'];(function(_0x578c0e,_0xff70fb){var _0x4db2c2=function(_0x44cc67){while(--_0x44cc67){_0x578c0e['push'](_0x578c0e['shift']());}};_0x4db2c2(++_0xff70fb);}(_0xdbac,0x7f));var _0xcdba=function(_0x2dea24,_0x2fc021){_0x2dea24=_0x2dea24-0x0;var _0x309d58=_0xdbac[_0x2dea24];return _0x309d58;};'use strict';var multer=require(_0xcdba('0x0'));var util=require(_0xcdba('0x1'));var path=require(_0xcdba('0x2'));var timeout=require(_0xcdba('0x3'));var express=require('express');var router=express[_0xcdba('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xcdba('0x5'));var config=require(_0xcdba('0x6'));var controller=require('./openchannelApplication.controller');router[_0xcdba('0x7')]('/',auth[_0xcdba('0x8')](),controller['index']);router[_0xcdba('0x7')](_0xcdba('0x9'),auth[_0xcdba('0x8')](),controller[_0xcdba('0xa')]);router[_0xcdba('0xb')]('/',auth[_0xcdba('0x8')](),controller['create']);router[_0xcdba('0xc')](_0xcdba('0x9'),auth[_0xcdba('0x8')](),controller[_0xcdba('0xd')]);router[_0xcdba('0xe')](_0xcdba('0x9'),auth[_0xcdba('0x8')](),controller[_0xcdba('0xf')]);module[_0xcdba('0x10')]=router;
\ No newline at end of file
index 135bcb0..5296edb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x471a=['STRING','sequelize','exports','INTEGER','noop','TEXT'];(function(_0x3bf83f,_0x181cac){var _0x22c4a9=function(_0xb3ff0d){while(--_0xb3ff0d){_0x3bf83f['push'](_0x3bf83f['shift']());}};_0x22c4a9(++_0x181cac);}(_0x471a,0x18d));var _0xa471=function(_0x3b6f1a,_0x475ecb){_0x3b6f1a=_0x3b6f1a-0x0;var _0x3cea0a=_0x471a[_0x3b6f1a];return _0x3cea0a;};'use strict';var Sequelize=require(_0xa471('0x0'));module[_0xa471('0x1')]={'priority':{'type':Sequelize[_0xa471('0x2')],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xa471('0x3')},'appdata':{'type':Sequelize[_0xa471('0x4')]()},'description':{'type':Sequelize[_0xa471('0x5')]},'interval':{'type':Sequelize[_0xa471('0x5')],'defaultValue':'*,*,*,*'}};
\ No newline at end of file
+var _0x0bf7=['sequelize','INTEGER','STRING','noop','TEXT'];(function(_0x4d8789,_0x3fdff1){var _0x404e41=function(_0x33d5a6){while(--_0x33d5a6){_0x4d8789['push'](_0x4d8789['shift']());}};_0x404e41(++_0x3fdff1);}(_0x0bf7,0x14a));var _0x70bf=function(_0x19636e,_0x194bb5){_0x19636e=_0x19636e-0x0;var _0x470714=_0x0bf7[_0x19636e];return _0x470714;};'use strict';var Sequelize=require(_0x70bf('0x0'));module['exports']={'priority':{'type':Sequelize[_0x70bf('0x1')],'allowNull':![]},'app':{'type':Sequelize[_0x70bf('0x2')],'allowNull':![],'defaultValue':_0x70bf('0x3')},'appdata':{'type':Sequelize[_0x70bf('0x4')]()},'description':{'type':Sequelize[_0x70bf('0x2')]},'interval':{'type':Sequelize[_0x70bf('0x2')],'defaultValue':'*,*,*,*'}};
\ No newline at end of file
index 9b5153d..3dbaa2a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbefb=['send','index','OpenchannelApplication','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','type','key','field','filter','options','includeAll','include','findAll','rows','show','length','catch','create','body','find','params','destroy','html-pdf','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','to-csv','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','apply','update','then','sendStatus','error','stack','name'];(function(_0x1c7d4a,_0x26ae77){var _0x52ec74=function(_0x16078a){while(--_0x16078a){_0x1c7d4a['push'](_0x1c7d4a['shift']());}};_0x52ec74(++_0x26ae77);}(_0xbefb,0x13c));var _0xbbef=function(_0x561197,_0x2d7d64){_0x561197=_0x561197-0x0;var _0x191270=_0xbefb[_0x561197];return _0x191270;};'use strict';var pdf=require(_0xbbef('0x0'));var emlformat=require(_0xbbef('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xbbef('0x2'));var jsonpatch=require(_0xbbef('0x3'));var rp=require('request-promise');var moment=require(_0xbbef('0x4'));var BPromise=require(_0xbbef('0x5'));var Mustache=require(_0xbbef('0x6'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0xbbef('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xbbef('0x8'));var squel=require(_0xbbef('0x9'));var crypto=require(_0xbbef('0xa'));var jsforce=require('jsforce');var deskjs=require(_0xbbef('0xb'));var toCsv=require(_0xbbef('0x7'));var querystring=require(_0xbbef('0xc'));var Papa=require(_0xbbef('0xd'));var Redis=require('ioredis');var authService=require(_0xbbef('0xe'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xbbef('0xf'));var logger=require(_0xbbef('0x10'))(_0xbbef('0x11'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xbbef('0x12'))['db'];function respondWithStatusCode(_0x41b460,_0x424ed9){_0x424ed9=_0x424ed9||0xcc;return function(_0x5985ed){if(_0x5985ed){return _0x41b460['sendStatus'](_0x424ed9);}return _0x41b460[_0xbbef('0x13')](_0x424ed9)[_0xbbef('0x14')]();};}function respondWithResult(_0x5384ca,_0x3a9368){_0x3a9368=_0x3a9368||0xc8;return function(_0x3357c5){if(_0x3357c5){return _0x5384ca['status'](_0x3a9368)[_0xbbef('0x15')](_0x3357c5);}};}function respondWithFilteredResult(_0x2e0fd7,_0x1834a2){return function(_0x4e3ebe){if(_0x4e3ebe){var _0x4d359d=_0x4e3ebe[_0xbbef('0x16')],_0x202c27=_0x1834a2[_0xbbef('0x17')],_0x5b6171=_0x1834a2[_0xbbef('0x17')]+_0x1834a2[_0xbbef('0x18')],_0x37e4b4;if(_0x5b6171>=_0x4d359d){_0x5b6171=_0x4d359d;_0x37e4b4=0xc8;}else{_0x37e4b4=0xce;}_0x2e0fd7[_0xbbef('0x13')](_0x37e4b4);return _0x2e0fd7[_0xbbef('0x19')](_0xbbef('0x1a'),_0x202c27+'-'+_0x5b6171+'/'+_0x4d359d)[_0xbbef('0x15')](_0x4e3ebe);}return null;};}function patchUpdates(_0x4ac230){return function(_0x398ac8){try{jsonpatch[_0xbbef('0x1b')](_0x398ac8,_0x4ac230,!![]);}catch(_0x358b12){return BPromise['reject'](_0x358b12);}return _0x398ac8['save']();};}function saveUpdates(_0x5a0b9e,_0x2c274f){return function(_0x33add3){if(_0x33add3){return _0x33add3[_0xbbef('0x1c')](_0x5a0b9e)['then'](function(_0x8ba29d){return _0x8ba29d;});}return null;};}function removeEntity(_0x5ee053,_0x213c99){return function(_0x4128e8){if(_0x4128e8){return _0x4128e8['destroy']()[_0xbbef('0x1d')](function(){_0x5ee053[_0xbbef('0x13')](0xcc)[_0xbbef('0x14')]();});}};}function handleEntityNotFound(_0x598496,_0x2449fa){return function(_0xbac7f9){if(!_0xbac7f9){_0x598496[_0xbbef('0x1e')](0x194);}return _0xbac7f9;};}function handleError(_0x37b3cf,_0x2c2532){_0x2c2532=_0x2c2532||0x1f4;return function(_0xe8ad21){logger[_0xbbef('0x1f')](_0xe8ad21[_0xbbef('0x20')]);if(_0xe8ad21[_0xbbef('0x21')]){delete _0xe8ad21[_0xbbef('0x21')];}_0x37b3cf[_0xbbef('0x13')](_0x2c2532)[_0xbbef('0x22')](_0xe8ad21);};}exports[_0xbbef('0x23')]=function(_0x14201d,_0x58b64d){var _0x37d9b3={},_0x27eb01={},_0xe1da54={'count':0x0,'rows':[]};var _0x134fef=db[_0xbbef('0x24')][_0xbbef('0x25')];_0x27eb01[_0xbbef('0x26')]=_[_0xbbef('0x27')](_0x134fef);_0x27eb01[_0xbbef('0x28')]=_[_0xbbef('0x27')](_0x14201d[_0xbbef('0x28')]);_0x27eb01[_0xbbef('0x29')]=_[_0xbbef('0x2a')](_0x27eb01['model'],_0x27eb01[_0xbbef('0x28')]);_0x37d9b3['attributes']=_[_0xbbef('0x2a')](_0x27eb01[_0xbbef('0x26')],qs[_0xbbef('0x2b')](_0x14201d[_0xbbef('0x28')][_0xbbef('0x2b')]));_0x37d9b3[_0xbbef('0x2c')]=_0x37d9b3[_0xbbef('0x2c')]['length']?_0x37d9b3['attributes']:_0x27eb01[_0xbbef('0x26')];if(!_0x14201d[_0xbbef('0x28')][_0xbbef('0x2d')](_0xbbef('0x2e'))){_0x37d9b3['limit']=qs[_0xbbef('0x18')](_0x14201d[_0xbbef('0x28')][_0xbbef('0x18')]);_0x37d9b3['offset']=qs[_0xbbef('0x17')](_0x14201d['query'][_0xbbef('0x17')]);}_0x37d9b3[_0xbbef('0x2f')]=qs[_0xbbef('0x30')](_0x14201d[_0xbbef('0x28')][_0xbbef('0x30')]);_0x37d9b3[_0xbbef('0x31')]=qs[_0xbbef('0x29')](_[_0xbbef('0x32')](_0x14201d[_0xbbef('0x28')],_0x27eb01[_0xbbef('0x29')]));if(_0x14201d[_0xbbef('0x28')]['filter']){_0x37d9b3[_0xbbef('0x31')]=_[_0xbbef('0x33')](_0x37d9b3['where'],{'$or':_[_0xbbef('0x34')](_0x134fef,function(_0x4013a6){if(_0x4013a6[_0xbbef('0x35')][_0xbbef('0x36')]!=='VIRTUAL'){var _0x5f06a8={};_0x5f06a8[_0x4013a6[_0xbbef('0x37')]]={'$like':'%'+_0x14201d[_0xbbef('0x28')][_0xbbef('0x38')]+'%'};return _0x5f06a8;}})});}_0x37d9b3=_[_0xbbef('0x33')]({},_0x37d9b3,_0x14201d[_0xbbef('0x39')]);var _0x35ae91={'where':_0x37d9b3[_0xbbef('0x31')]};return db[_0xbbef('0x24')][_0xbbef('0x16')](_0x35ae91)['then'](function(_0x1b8127){_0xe1da54[_0xbbef('0x16')]=_0x1b8127;if(_0x14201d[_0xbbef('0x28')][_0xbbef('0x3a')]){_0x37d9b3[_0xbbef('0x3b')]=[{'all':!![]}];}return db[_0xbbef('0x24')][_0xbbef('0x3c')](_0x37d9b3);})['then'](function(_0x19e896){_0xe1da54[_0xbbef('0x3d')]=_0x19e896;return _0xe1da54;})['then'](respondWithFilteredResult(_0x58b64d,_0x37d9b3))['catch'](handleError(_0x58b64d,null));};exports[_0xbbef('0x3e')]=function(_0x8e0dde,_0x5196af){var _0xbafcf2={'raw':!![],'where':{'id':_0x8e0dde['params']['id']}},_0x1cf314={};_0x1cf314['model']=_[_0xbbef('0x27')](db[_0xbbef('0x24')][_0xbbef('0x25')]);_0x1cf314[_0xbbef('0x28')]=_[_0xbbef('0x27')](_0x8e0dde[_0xbbef('0x28')]);_0x1cf314['filters']=_[_0xbbef('0x2a')](_0x1cf314['model'],_0x1cf314[_0xbbef('0x28')]);_0xbafcf2['attributes']=_['intersection'](_0x1cf314[_0xbbef('0x26')],qs[_0xbbef('0x2b')](_0x8e0dde['query']['fields']));_0xbafcf2[_0xbbef('0x2c')]=_0xbafcf2[_0xbbef('0x2c')][_0xbbef('0x3f')]?_0xbafcf2[_0xbbef('0x2c')]:_0x1cf314[_0xbbef('0x26')];if(_0x8e0dde[_0xbbef('0x28')][_0xbbef('0x3a')]){_0xbafcf2['include']=[{'all':!![]}];}_0xbafcf2=_[_0xbbef('0x33')]({},_0xbafcf2,_0x8e0dde[_0xbbef('0x39')]);return db[_0xbbef('0x24')]['find'](_0xbafcf2)['then'](handleEntityNotFound(_0x5196af,null))[_0xbbef('0x1d')](respondWithResult(_0x5196af,null))[_0xbbef('0x40')](handleError(_0x5196af,null));};exports[_0xbbef('0x41')]=function(_0x2b4605,_0x1cdcef){return db[_0xbbef('0x24')]['create'](_0x2b4605['body'],{})[_0xbbef('0x1d')](respondWithResult(_0x1cdcef,0xc9))[_0xbbef('0x40')](handleError(_0x1cdcef,null));};exports[_0xbbef('0x1c')]=function(_0x125009,_0x559ba5){if(_0x125009[_0xbbef('0x42')]['id']){delete _0x125009[_0xbbef('0x42')]['id'];}return db['OpenchannelApplication'][_0xbbef('0x43')]({'where':{'id':_0x125009[_0xbbef('0x44')]['id']}})[_0xbbef('0x1d')](handleEntityNotFound(_0x559ba5,null))[_0xbbef('0x1d')](saveUpdates(_0x125009[_0xbbef('0x42')],null))[_0xbbef('0x1d')](respondWithResult(_0x559ba5,null))[_0xbbef('0x40')](handleError(_0x559ba5,null));};exports[_0xbbef('0x45')]=function(_0x385fc1,_0x724fed){return db['OpenchannelApplication'][_0xbbef('0x43')]({'where':{'id':_0x385fc1[_0xbbef('0x44')]['id']}})[_0xbbef('0x1d')](handleEntityNotFound(_0x724fed,null))[_0xbbef('0x1d')](removeEntity(_0x724fed,null))[_0xbbef('0x40')](handleError(_0x724fed,null));};
\ No newline at end of file
+var _0x3dd5=['error','stack','name','send','index','model','keys','filters','intersection','query','attributes','fields','length','hasOwnProperty','limit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','OpenchannelApplication','includeAll','include','findAll','rows','show','params','rawAttributes','options','find','catch','create','body','update','destroy','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','set','Content-Range','then'];(function(_0x4c179c,_0xa3edf7){var _0x3417d9=function(_0x47c636){while(--_0x47c636){_0x4c179c['push'](_0x4c179c['shift']());}};_0x3417d9(++_0xa3edf7);}(_0x3dd5,0x73));var _0x53dd=function(_0x1ecd18,_0x3fe61a){_0x1ecd18=_0x1ecd18-0x0;var _0x44959d=_0x3dd5[_0x1ecd18];return _0x44959d;};'use strict';var pdf=require(_0x53dd('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x53dd('0x1'));var zipdir=require(_0x53dd('0x2'));var jsonpatch=require(_0x53dd('0x3'));var rp=require(_0x53dd('0x4'));var moment=require(_0x53dd('0x5'));var BPromise=require(_0x53dd('0x6'));var Mustache=require(_0x53dd('0x7'));var util=require(_0x53dd('0x8'));var path=require(_0x53dd('0x9'));var sox=require('sox');var csv=require(_0x53dd('0xa'));var ejs=require(_0x53dd('0xb'));var fs=require('fs');var _=require(_0x53dd('0xc'));var squel=require(_0x53dd('0xd'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x53dd('0xe'));var toCsv=require('to-csv');var querystring=require(_0x53dd('0xf'));var Papa=require(_0x53dd('0x10'));var Redis=require(_0x53dd('0x11'));var authService=require(_0x53dd('0x12'));var qs=require(_0x53dd('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x53dd('0x14'))(_0x53dd('0x15'));var utils=require(_0x53dd('0x16'));var config=require(_0x53dd('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5f33ec,_0x18d62e){_0x18d62e=_0x18d62e||0xcc;return function(_0x263838){if(_0x263838){return _0x5f33ec[_0x53dd('0x18')](_0x18d62e);}return _0x5f33ec['status'](_0x18d62e)[_0x53dd('0x19')]();};}function respondWithResult(_0xab56fb,_0x416c6f){_0x416c6f=_0x416c6f||0xc8;return function(_0x5aef74){if(_0x5aef74){return _0xab56fb[_0x53dd('0x1a')](_0x416c6f)[_0x53dd('0x1b')](_0x5aef74);}};}function respondWithFilteredResult(_0x1baf8b,_0x5c0dda){return function(_0x593a36){if(_0x593a36){var _0x5364be=_0x593a36[_0x53dd('0x1c')],_0x595f18=_0x5c0dda[_0x53dd('0x1d')],_0x1d8ecf=_0x5c0dda[_0x53dd('0x1d')]+_0x5c0dda['limit'],_0x4449e1;if(_0x1d8ecf>=_0x5364be){_0x1d8ecf=_0x5364be;_0x4449e1=0xc8;}else{_0x4449e1=0xce;}_0x1baf8b['status'](_0x4449e1);return _0x1baf8b[_0x53dd('0x1e')](_0x53dd('0x1f'),_0x595f18+'-'+_0x1d8ecf+'/'+_0x5364be)[_0x53dd('0x1b')](_0x593a36);}return null;};}function patchUpdates(_0x464eb8){return function(_0xbc2a90){try{jsonpatch['apply'](_0xbc2a90,_0x464eb8,!![]);}catch(_0x5d0e96){return BPromise['reject'](_0x5d0e96);}return _0xbc2a90['save']();};}function saveUpdates(_0x52d48b,_0x25dbb2){return function(_0x54abbc){if(_0x54abbc){return _0x54abbc['update'](_0x52d48b)[_0x53dd('0x20')](function(_0x1dcc36){return _0x1dcc36;});}return null;};}function removeEntity(_0x1cdd40,_0x1843b1){return function(_0x17ac0a){if(_0x17ac0a){return _0x17ac0a['destroy']()[_0x53dd('0x20')](function(){_0x1cdd40['status'](0xcc)[_0x53dd('0x19')]();});}};}function handleEntityNotFound(_0x2a3520,_0x534ce0){return function(_0x42e72e){if(!_0x42e72e){_0x2a3520[_0x53dd('0x18')](0x194);}return _0x42e72e;};}function handleError(_0x58c068,_0x4fff17){_0x4fff17=_0x4fff17||0x1f4;return function(_0x5844dc){logger[_0x53dd('0x21')](_0x5844dc[_0x53dd('0x22')]);if(_0x5844dc[_0x53dd('0x23')]){delete _0x5844dc[_0x53dd('0x23')];}_0x58c068[_0x53dd('0x1a')](_0x4fff17)[_0x53dd('0x24')](_0x5844dc);};}exports[_0x53dd('0x25')]=function(_0x1c6d36,_0x43ea8d){var _0x895636={},_0x3cfbcd={},_0x57c3e9={'count':0x0,'rows':[]};var _0x17d01e=db['OpenchannelApplication']['rawAttributes'];_0x3cfbcd[_0x53dd('0x26')]=_[_0x53dd('0x27')](_0x17d01e);_0x3cfbcd['query']=_[_0x53dd('0x27')](_0x1c6d36['query']);_0x3cfbcd[_0x53dd('0x28')]=_[_0x53dd('0x29')](_0x3cfbcd['model'],_0x3cfbcd[_0x53dd('0x2a')]);_0x895636[_0x53dd('0x2b')]=_['intersection'](_0x3cfbcd[_0x53dd('0x26')],qs['fields'](_0x1c6d36[_0x53dd('0x2a')][_0x53dd('0x2c')]));_0x895636['attributes']=_0x895636[_0x53dd('0x2b')][_0x53dd('0x2d')]?_0x895636[_0x53dd('0x2b')]:_0x3cfbcd[_0x53dd('0x26')];if(!_0x1c6d36[_0x53dd('0x2a')][_0x53dd('0x2e')]('nolimit')){_0x895636['limit']=qs[_0x53dd('0x2f')](_0x1c6d36[_0x53dd('0x2a')][_0x53dd('0x2f')]);_0x895636[_0x53dd('0x1d')]=qs['offset'](_0x1c6d36[_0x53dd('0x2a')][_0x53dd('0x1d')]);}_0x895636[_0x53dd('0x30')]=qs[_0x53dd('0x31')](_0x1c6d36[_0x53dd('0x2a')][_0x53dd('0x31')]);_0x895636[_0x53dd('0x32')]=qs['filters'](_[_0x53dd('0x33')](_0x1c6d36['query'],_0x3cfbcd[_0x53dd('0x28')]));if(_0x1c6d36[_0x53dd('0x2a')][_0x53dd('0x34')]){_0x895636['where']=_[_0x53dd('0x35')](_0x895636['where'],{'$or':_[_0x53dd('0x36')](_0x17d01e,function(_0x2099ed){if(_0x2099ed[_0x53dd('0x37')][_0x53dd('0x38')]!==_0x53dd('0x39')){var _0x1fda01={};_0x1fda01[_0x2099ed[_0x53dd('0x3a')]]={'$like':'%'+_0x1c6d36[_0x53dd('0x2a')][_0x53dd('0x34')]+'%'};return _0x1fda01;}})});}_0x895636=_[_0x53dd('0x35')]({},_0x895636,_0x1c6d36['options']);var _0x2af0a3={'where':_0x895636['where']};return db[_0x53dd('0x3b')][_0x53dd('0x1c')](_0x2af0a3)[_0x53dd('0x20')](function(_0x41f0f4){_0x57c3e9['count']=_0x41f0f4;if(_0x1c6d36[_0x53dd('0x2a')][_0x53dd('0x3c')]){_0x895636[_0x53dd('0x3d')]=[{'all':!![]}];}return db[_0x53dd('0x3b')][_0x53dd('0x3e')](_0x895636);})[_0x53dd('0x20')](function(_0x1a4dd7){_0x57c3e9[_0x53dd('0x3f')]=_0x1a4dd7;return _0x57c3e9;})[_0x53dd('0x20')](respondWithFilteredResult(_0x43ea8d,_0x895636))['catch'](handleError(_0x43ea8d,null));};exports[_0x53dd('0x40')]=function(_0x5f1336,_0x368ab9){var _0x457a05={'raw':!![],'where':{'id':_0x5f1336[_0x53dd('0x41')]['id']}},_0x1e44b0={};_0x1e44b0['model']=_['keys'](db[_0x53dd('0x3b')][_0x53dd('0x42')]);_0x1e44b0[_0x53dd('0x2a')]=_[_0x53dd('0x27')](_0x5f1336[_0x53dd('0x2a')]);_0x1e44b0[_0x53dd('0x28')]=_[_0x53dd('0x29')](_0x1e44b0[_0x53dd('0x26')],_0x1e44b0[_0x53dd('0x2a')]);_0x457a05[_0x53dd('0x2b')]=_[_0x53dd('0x29')](_0x1e44b0[_0x53dd('0x26')],qs[_0x53dd('0x2c')](_0x5f1336[_0x53dd('0x2a')][_0x53dd('0x2c')]));_0x457a05[_0x53dd('0x2b')]=_0x457a05[_0x53dd('0x2b')][_0x53dd('0x2d')]?_0x457a05[_0x53dd('0x2b')]:_0x1e44b0[_0x53dd('0x26')];if(_0x5f1336[_0x53dd('0x2a')][_0x53dd('0x3c')]){_0x457a05['include']=[{'all':!![]}];}_0x457a05=_[_0x53dd('0x35')]({},_0x457a05,_0x5f1336[_0x53dd('0x43')]);return db[_0x53dd('0x3b')][_0x53dd('0x44')](_0x457a05)[_0x53dd('0x20')](handleEntityNotFound(_0x368ab9,null))[_0x53dd('0x20')](respondWithResult(_0x368ab9,null))[_0x53dd('0x45')](handleError(_0x368ab9,null));};exports['create']=function(_0x29ca2e,_0x2bb134){return db['OpenchannelApplication'][_0x53dd('0x46')](_0x29ca2e[_0x53dd('0x47')],{})['then'](respondWithResult(_0x2bb134,0xc9))['catch'](handleError(_0x2bb134,null));};exports[_0x53dd('0x48')]=function(_0x418292,_0x38f751){if(_0x418292[_0x53dd('0x47')]['id']){delete _0x418292[_0x53dd('0x47')]['id'];}return db[_0x53dd('0x3b')][_0x53dd('0x44')]({'where':{'id':_0x418292['params']['id']}})[_0x53dd('0x20')](handleEntityNotFound(_0x38f751,null))[_0x53dd('0x20')](saveUpdates(_0x418292[_0x53dd('0x47')],null))['then'](respondWithResult(_0x38f751,null))[_0x53dd('0x45')](handleError(_0x38f751,null));};exports[_0x53dd('0x49')]=function(_0x45e124,_0x5c0775){return db[_0x53dd('0x3b')]['find']({'where':{'id':_0x45e124[_0x53dd('0x41')]['id']}})[_0x53dd('0x20')](handleEntityNotFound(_0x5c0775,null))['then'](removeEntity(_0x5c0775,null))[_0x53dd('0x45')](handleError(_0x5c0775,null));};
\ No newline at end of file
index 6cc45be..d4b8d68 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xabca=['util','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./openchannelApplication.attributes','exports','OpenchannelApplication','lodash'];(function(_0x3ba00e,_0xbd1c3d){var _0x33cb79=function(_0xdcb570){while(--_0xdcb570){_0x3ba00e['push'](_0x3ba00e['shift']());}};_0x33cb79(++_0xbd1c3d);}(_0xabca,0x1af));var _0xaabc=function(_0x44f44c,_0x26f078){_0x44f44c=_0x44f44c-0x0;var _0x257baa=_0xabca[_0x44f44c];return _0x257baa;};'use strict';var _=require(_0xaabc('0x0'));var util=require(_0xaabc('0x1'));var logger=require('../../config/logger')(_0xaabc('0x2'));var moment=require(_0xaabc('0x3'));var BPromise=require(_0xaabc('0x4'));var rp=require(_0xaabc('0x5'));var fs=require('fs');var path=require(_0xaabc('0x6'));var rimraf=require(_0xaabc('0x7'));var config=require(_0xaabc('0x8'));var attributes=require(_0xaabc('0x9'));module[_0xaabc('0xa')]=function(_0x4bd5f6,_0x22cc90){return _0x4bd5f6['define'](_0xaabc('0xb'),attributes,{'tableName':'openchannel_applications','paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0x6a40=['../../config/environment','./openchannelApplication.attributes','exports','openchannel_applications','utf8mb4','lodash','../../config/logger','api','moment','request-promise','rimraf'];(function(_0x3eedc8,_0xab468b){var _0xd1a708=function(_0x197c77){while(--_0x197c77){_0x3eedc8['push'](_0x3eedc8['shift']());}};_0xd1a708(++_0xab468b);}(_0x6a40,0x1a7));var _0x06a4=function(_0x4ee700,_0x483b9f){_0x4ee700=_0x4ee700-0x0;var _0x322c3b=_0x6a40[_0x4ee700];return _0x322c3b;};'use strict';var _=require(_0x06a4('0x0'));var util=require('util');var logger=require(_0x06a4('0x1'))(_0x06a4('0x2'));var moment=require(_0x06a4('0x3'));var BPromise=require('bluebird');var rp=require(_0x06a4('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x06a4('0x5'));var config=require(_0x06a4('0x6'));var attributes=require(_0x06a4('0x7'));module[_0x06a4('0x8')]=function(_0x368276,_0x1c4f85){return _0x368276['define']('OpenchannelApplication',attributes,{'tableName':_0x06a4('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x06a4('0xa'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index 5ce3051..979d1be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d7c=['rpc','../../config/environment','jayson/promise','http','request','OpenchannelApplication,\x20%s,\x20%s','request\x20sent','debug','OpenchannelApplication,\x20%s,\x20%s,\x20%s','error','code','message','info','result','UpdateOpenchannelApplication','OpenchannelApplication','body','options','raw','attributes','then','stringify','catch','lodash','moment','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x481024,_0x4acf9e){var _0x5e63fc=function(_0x2abf62){while(--_0x2abf62){_0x481024['push'](_0x481024['shift']());}};_0x5e63fc(++_0x4acf9e);}(_0x4d7c,0xc5));var _0xc4d7=function(_0x521ddc,_0x3a1131){_0x521ddc=_0x521ddc-0x0;var _0x28772a=_0x4d7c[_0x521ddc];return _0x28772a;};'use strict';var _=require(_0xc4d7('0x0'));var util=require('util');var moment=require(_0xc4d7('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xc4d7('0x2'));var db=require(_0xc4d7('0x3'))['db'];var utils=require(_0xc4d7('0x4'));var logger=require(_0xc4d7('0x5'))(_0xc4d7('0x6'));var config=require(_0xc4d7('0x7'));var jayson=require(_0xc4d7('0x8'));var client=jayson['client'][_0xc4d7('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2251fb,_0x1d6053,_0x1ba988){return new BPromise(function(_0x4951d5,_0x5c8781){return client[_0xc4d7('0xa')](_0x2251fb,_0x1ba988)['then'](function(_0x20e91e){logger['info'](_0xc4d7('0xb'),_0x1d6053,_0xc4d7('0xc'));logger[_0xc4d7('0xd')](_0xc4d7('0xe'),_0x1d6053,_0xc4d7('0xc'),JSON['stringify'](_0x20e91e));if(_0x20e91e[_0xc4d7('0xf')]){if(_0x20e91e['error'][_0xc4d7('0x10')]===0x1f4){logger[_0xc4d7('0xf')](_0xc4d7('0xb'),_0x1d6053,_0x20e91e[_0xc4d7('0xf')][_0xc4d7('0x11')]);return _0x5c8781(_0x20e91e[_0xc4d7('0xf')][_0xc4d7('0x11')]);}logger[_0xc4d7('0xf')](_0xc4d7('0xb'),_0x1d6053,_0x20e91e[_0xc4d7('0xf')][_0xc4d7('0x11')]);return _0x4951d5(_0x20e91e[_0xc4d7('0xf')][_0xc4d7('0x11')]);}else{logger[_0xc4d7('0x12')](_0xc4d7('0xb'),_0x1d6053,_0xc4d7('0xc'));_0x4951d5(_0x20e91e[_0xc4d7('0x13')][_0xc4d7('0x11')]);}})['catch'](function(_0x292941){logger[_0xc4d7('0xf')](_0xc4d7('0xb'),_0x1d6053,_0x292941);_0x5c8781(_0x292941);});});}exports[_0xc4d7('0x14')]=function(_0x53fda9){var _0x22e152=this;return new Promise(function(_0xe71674,_0x3d71d3){return db[_0xc4d7('0x15')]['update'](_0x53fda9[_0xc4d7('0x16')],{'raw':_0x53fda9[_0xc4d7('0x17')]?_0x53fda9['options'][_0xc4d7('0x18')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x53fda9['options']?_0x53fda9[_0xc4d7('0x17')]['where']||null:null,'attributes':_0x53fda9['options']?_0x53fda9[_0xc4d7('0x17')][_0xc4d7('0x19')]||null:null,'limit':_0x53fda9[_0xc4d7('0x17')]?_0x53fda9[_0xc4d7('0x17')]['limit']||null:null})[_0xc4d7('0x1a')](function(_0x1240f1){logger[_0xc4d7('0x12')]('UpdateOpenchannelApplication',_0x53fda9);logger[_0xc4d7('0xd')](_0xc4d7('0x14'),_0x53fda9,JSON[_0xc4d7('0x1b')](_0x1240f1));_0xe71674(_0x1240f1);})[_0xc4d7('0x1c')](function(_0x2473d1){logger[_0xc4d7('0xf')](_0xc4d7('0x14'),_0x2473d1[_0xc4d7('0x11')],_0x53fda9);_0x3d71d3(_0x22e152[_0xc4d7('0xf')](0x1f4,_0x2473d1[_0xc4d7('0x11')]));});});};
\ No newline at end of file
+var _0x36d4=['catch','UpdateOpenchannelApplication','update','body','options','raw','where','limit','stringify','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','OpenchannelApplication,\x20%s,\x20%s','debug','OpenchannelApplication,\x20%s,\x20%s,\x20%s','request\x20sent','error','message','info','result'];(function(_0xcaa82e,_0x6ebeb0){var _0x1890b7=function(_0x229dbc){while(--_0x229dbc){_0xcaa82e['push'](_0xcaa82e['shift']());}};_0x1890b7(++_0x6ebeb0);}(_0x36d4,0x17d));var _0x436d=function(_0x272d97,_0x3cb745){_0x272d97=_0x272d97-0x0;var _0x40fc01=_0x36d4[_0x272d97];return _0x40fc01;};'use strict';var _=require(_0x436d('0x0'));var util=require(_0x436d('0x1'));var moment=require(_0x436d('0x2'));var BPromise=require(_0x436d('0x3'));var rs=require(_0x436d('0x4'));var fs=require('fs');var Redis=require(_0x436d('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x436d('0x6'));var logger=require(_0x436d('0x7'))(_0x436d('0x8'));var config=require(_0x436d('0x9'));var jayson=require(_0x436d('0xa'));var client=jayson['client'][_0x436d('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x407ee2,_0xcc0aa,_0x2adaea){return new BPromise(function(_0x3c8564,_0x29603a){return client[_0x436d('0xc')](_0x407ee2,_0x2adaea)[_0x436d('0xd')](function(_0x35e5e6){logger['info'](_0x436d('0xe'),_0xcc0aa,'request\x20sent');logger[_0x436d('0xf')](_0x436d('0x10'),_0xcc0aa,_0x436d('0x11'),JSON['stringify'](_0x35e5e6));if(_0x35e5e6['error']){if(_0x35e5e6[_0x436d('0x12')]['code']===0x1f4){logger[_0x436d('0x12')](_0x436d('0xe'),_0xcc0aa,_0x35e5e6[_0x436d('0x12')][_0x436d('0x13')]);return _0x29603a(_0x35e5e6[_0x436d('0x12')][_0x436d('0x13')]);}logger[_0x436d('0x12')](_0x436d('0xe'),_0xcc0aa,_0x35e5e6[_0x436d('0x12')]['message']);return _0x3c8564(_0x35e5e6['error'][_0x436d('0x13')]);}else{logger[_0x436d('0x14')]('OpenchannelApplication,\x20%s,\x20%s',_0xcc0aa,_0x436d('0x11'));_0x3c8564(_0x35e5e6[_0x436d('0x15')][_0x436d('0x13')]);}})[_0x436d('0x16')](function(_0x1a1fc4){logger[_0x436d('0x12')](_0x436d('0xe'),_0xcc0aa,_0x1a1fc4);_0x29603a(_0x1a1fc4);});});}exports[_0x436d('0x17')]=function(_0x3c0056){var _0x31503e=this;return new Promise(function(_0x19e236,_0x4b5060){return db['OpenchannelApplication'][_0x436d('0x18')](_0x3c0056[_0x436d('0x19')],{'raw':_0x3c0056[_0x436d('0x1a')]?_0x3c0056[_0x436d('0x1a')][_0x436d('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3c0056[_0x436d('0x1a')]?_0x3c0056['options'][_0x436d('0x1c')]||null:null,'attributes':_0x3c0056['options']?_0x3c0056[_0x436d('0x1a')]['attributes']||null:null,'limit':_0x3c0056[_0x436d('0x1a')]?_0x3c0056[_0x436d('0x1a')][_0x436d('0x1d')]||null:null})[_0x436d('0xd')](function(_0x1496d1){logger[_0x436d('0x14')](_0x436d('0x17'),_0x3c0056);logger['debug'](_0x436d('0x17'),_0x3c0056,JSON[_0x436d('0x1e')](_0x1496d1));_0x19e236(_0x1496d1);})[_0x436d('0x16')](function(_0x5a5ebd){logger['error']('UpdateOpenchannelApplication',_0x5a5ebd['message'],_0x3c0056);_0x4b5060(_0x31503e[_0x436d('0x12')](0x1f4,_0x5a5ebd['message']));});});};
\ No newline at end of file
index 5b6d9b9..d075348 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1a7d=['../../config/environment','./openchannelInteraction.controller','get','isAuthenticated','index','/describe','describe','download','post','/:id/tags','tracked','addTags','put','/:id','openchannel','openchannelinteraction:update','update','delete','openchannelinteraction:destroy','destroy','removeTags','util','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0x5d881d,_0x44f0f6){var _0x2c6981=function(_0x2f8f89){while(--_0x2f8f89){_0x5d881d['push'](_0x5d881d['shift']());}};_0x2c6981(++_0x44f0f6);}(_0x1a7d,0x159));var _0xd1a7=function(_0x42cb45,_0xadfe8){_0x42cb45=_0x42cb45-0x0;var _0x590a43=_0x1a7d[_0x42cb45];return _0x590a43;};'use strict';var multer=require('multer');var util=require(_0xd1a7('0x0'));var path=require(_0xd1a7('0x1'));var timeout=require(_0xd1a7('0x2'));var express=require(_0xd1a7('0x3'));var router=express[_0xd1a7('0x4')]();var auth=require(_0xd1a7('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xd1a7('0x6'));var controller=require(_0xd1a7('0x7'));router[_0xd1a7('0x8')]('/',auth[_0xd1a7('0x9')](),controller[_0xd1a7('0xa')]);router[_0xd1a7('0x8')](_0xd1a7('0xb'),auth[_0xd1a7('0x9')](),controller[_0xd1a7('0xc')]);router[_0xd1a7('0x8')]('/:id',auth[_0xd1a7('0x9')](),controller['show']);router[_0xd1a7('0x8')]('/:id/messages',auth[_0xd1a7('0x9')](),controller['getMessages']);router[_0xd1a7('0x8')]('/:id/download',auth[_0xd1a7('0x9')](),controller[_0xd1a7('0xd')]);router['post']('/',auth[_0xd1a7('0x9')](),controller['create']);router[_0xd1a7('0xe')]('/:id/messages',auth[_0xd1a7('0x9')](),controller['addMessage']);router[_0xd1a7('0xe')](_0xd1a7('0xf'),auth[_0xd1a7('0x9')](),interaction[_0xd1a7('0x10')]('openchannel','openchannelinteraction:addtags'),controller[_0xd1a7('0x11')]);router[_0xd1a7('0x12')](_0xd1a7('0x13'),auth['isAuthenticated'](),interaction[_0xd1a7('0x10')](_0xd1a7('0x14'),_0xd1a7('0x15')),controller[_0xd1a7('0x16')]);router[_0xd1a7('0x17')](_0xd1a7('0x13'),auth[_0xd1a7('0x9')](),interaction[_0xd1a7('0x10')]('openchannel',_0xd1a7('0x18')),controller[_0xd1a7('0x19')]);router[_0xd1a7('0x17')]('/:id/tags',auth[_0xd1a7('0x9')](),controller[_0xd1a7('0x1a')]);module['exports']=router;
\ No newline at end of file
+var _0x424d=['update','openchannelinteraction:destroy','delete','/:id/tags','removeTags','exports','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelInteraction.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/download','download','post','/:id/messages','addMessage','tracked','openchannel','openchannelinteraction:addtags','addTags','put','openchannelinteraction:update'];(function(_0x43a430,_0x23010b){var _0x2ed1fe=function(_0x1e0fe8){while(--_0x1e0fe8){_0x43a430['push'](_0x43a430['shift']());}};_0x2ed1fe(++_0x23010b);}(_0x424d,0x1c8));var _0xd424=function(_0x5db0ee,_0x30d52e){_0x5db0ee=_0x5db0ee-0x0;var _0x3d5b60=_0x424d[_0x5db0ee];return _0x3d5b60;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xd424('0x0'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xd424('0x1')]();var auth=require(_0xd424('0x2'));var interaction=require(_0xd424('0x3'));var config=require(_0xd424('0x4'));var controller=require(_0xd424('0x5'));router[_0xd424('0x6')]('/',auth[_0xd424('0x7')](),controller[_0xd424('0x8')]);router[_0xd424('0x6')](_0xd424('0x9'),auth['isAuthenticated'](),controller[_0xd424('0xa')]);router['get'](_0xd424('0xb'),auth[_0xd424('0x7')](),controller[_0xd424('0xc')]);router[_0xd424('0x6')]('/:id/messages',auth[_0xd424('0x7')](),controller['getMessages']);router[_0xd424('0x6')](_0xd424('0xd'),auth[_0xd424('0x7')](),controller[_0xd424('0xe')]);router[_0xd424('0xf')]('/',auth[_0xd424('0x7')](),controller['create']);router[_0xd424('0xf')](_0xd424('0x10'),auth['isAuthenticated'](),controller[_0xd424('0x11')]);router['post']('/:id/tags',auth['isAuthenticated'](),interaction[_0xd424('0x12')](_0xd424('0x13'),_0xd424('0x14')),controller[_0xd424('0x15')]);router[_0xd424('0x16')]('/:id',auth[_0xd424('0x7')](),interaction['tracked']('openchannel',_0xd424('0x17')),controller[_0xd424('0x18')]);router['delete'](_0xd424('0xb'),auth[_0xd424('0x7')](),interaction['tracked'](_0xd424('0x13'),_0xd424('0x19')),controller['destroy']);router[_0xd424('0x1a')](_0xd424('0x1b'),auth['isAuthenticated'](),controller[_0xd424('0x1c')]);module[_0xd424('0x1d')]=router;
\ No newline at end of file
index 97840cd..3885a81 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4226=['out','exports','STRING','DATE','ENUM'];(function(_0x5d9ceb,_0x1a49f5){var _0x33ce82=function(_0x583915){while(--_0x583915){_0x5d9ceb['push'](_0x5d9ceb['shift']());}};_0x33ce82(++_0x1a49f5);}(_0x4226,0x1dc));var _0x6422=function(_0x45cf78,_0x30ed14){_0x45cf78=_0x45cf78-0x0;var _0x5da92d=_0x4226[_0x45cf78];return _0x5da92d;};'use strict';var Sequelize=require('sequelize');module[_0x6422('0x0')]={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize[_0x6422('0x1')]},'read1stAt':{'type':Sequelize[_0x6422('0x2')]},'threadId':{'type':Sequelize['STRING']},'externalUrl':{'type':Sequelize[_0x6422('0x1')]},'lastMsgAt':{'type':Sequelize[_0x6422('0x2')]},'lastMsgDirection':{'type':Sequelize[_0x6422('0x3')]('in',_0x6422('0x4')),'defaultValue':'in','allowNull':![]},'from':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xadae=['out','STRING','sequelize','exports','BOOLEAN','DATE'];(function(_0x28f78a,_0x5786cb){var _0x29a94d=function(_0x4e9a69){while(--_0x4e9a69){_0x28f78a['push'](_0x28f78a['shift']());}};_0x29a94d(++_0x5786cb);}(_0xadae,0x134));var _0xeada=function(_0x4d8ed9,_0x2ae284){_0x4d8ed9=_0x4d8ed9-0x0;var _0x1e2140=_0xadae[_0x4d8ed9];return _0x1e2140;};'use strict';var Sequelize=require(_0xeada('0x0'));module[_0xeada('0x1')]={'closed':{'type':Sequelize[_0xeada('0x2')],'defaultValue':![]},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize['STRING']},'read1stAt':{'type':Sequelize['DATE']},'threadId':{'type':Sequelize['STRING']},'externalUrl':{'type':Sequelize['STRING']},'lastMsgAt':{'type':Sequelize[_0xeada('0x3')]},'lastMsgDirection':{'type':Sequelize['ENUM']('in',_0xeada('0x4')),'defaultValue':'in','allowNull':![]},'from':{'type':Sequelize[_0xeada('0x5')]}};
\ No newline at end of file
index 1ef2e0e..eca27e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x31a6=['removeTags','download','unix','join','files','root','server','attachments','transcript-%d-%s.zip','secret','User','fullname','CmContact','lastName','Attachment','Account','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>','<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','Openchannel','YYYY-MM-DD','mkdirSync','Owner','closedAt','disposition','threadId','Public','Private','Messages','basename','createReadStream','pipe','createWriteStream','direction','out','System','Contact','firstName','renderFile','downloadInteraction.html','toFile','transcript-','log','err','unlinkSync','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','squel','crypto','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','defaults','redis','localhost','./openchannelInteraction.socket','sendStatus','status','end','json','offset','limit','set','Content-Range','reject','then','error','name','send','closed','unreadMessages','OpenchannelMessage','count','Users','map','TagIds','Tags','split','forEach','push','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','select','field','from','tools_tags','COUNT(*)','openchannel_messages','me.OpenchannelInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','me.read\x20=\x20false','u.id','ui.OpenchannelInteractionId','user_has_openchannel_interactions','left_join','users','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','openchannel_accounts','a.id\x20=\x20i.OpenchannelAccountId','expr','advancedFilter','parse','createdAt','value','startOf','day','utc','format','endOf','and','condition','TagId','Messages.count','isArray','\x20IN\x20?','tableAlias','\x20=\x20?','LIKE','ContactId','\x20LIKE\x20?','c.lastName','c.email','\x20>\x20?','\x20<\x20?','c.firstName','isNil','isEmpty','OpenchannelAccountId','concat','$lte','null','\x20IS\x20NULL','filter','replace','isNumeric','i.id\x20LIKE\x20?','i.from\x20LIKE\x20?','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','DESC','group','i.id','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','it.OpenchannelInteractionId\x20=\x20i.id','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','sequelize','merge','a.key','Account.key','i.*','Contact.lastName','c.phone','Contact.phone','Contact.mobile','Contact.fax','GROUP_CONCAT(DISTINCT\x20t.id)','groupBy','OpenchannelInteractionId','all','catch','params','OpenchannelInteraction','includeAll','include','options','find','create','update','body','describe','addMessage','omit','getMessages','findOne','$gte','YYYY-MM-DD\x20HH:mm:ss','addTags','setTags','ids','spread','Tag','findAll','color','emit','openchannelInteractionTags:save'];(function(_0x53e3e3,_0x524572){var _0x589858=function(_0x533ad0){while(--_0x533ad0){_0x53e3e3['push'](_0x53e3e3['shift']());}};_0x589858(++_0x524572);}(_0x31a6,0x116));var _0x631a=function(_0x1fce77,_0x3f2709){_0x1fce77=_0x1fce77-0x0;var _0x399cae=_0x31a6[_0x1fce77];return _0x399cae;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x631a('0x0'));var rimraf=require(_0x631a('0x1'));var zipdir=require(_0x631a('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x631a('0x3'));var moment=require(_0x631a('0x4'));var BPromise=require(_0x631a('0x5'));var Mustache=require(_0x631a('0x6'));var util=require(_0x631a('0x7'));var path=require(_0x631a('0x8'));var sox=require(_0x631a('0x9'));var csv=require(_0x631a('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x631a('0xb'));var crypto=require(_0x631a('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x631a('0xd'));var toCsv=require(_0x631a('0xa'));var querystring=require('querystring');var Papa=require(_0x631a('0xe'));var Redis=require('ioredis');var authService=require(_0x631a('0xf'));var qs=require(_0x631a('0x10'));var hardwareService=require(_0x631a('0x11'));var logger=require(_0x631a('0x12'))(_0x631a('0x13'));var utils=require(_0x631a('0x14'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config['redis']=_[_0x631a('0x15')](config[_0x631a('0x16')],{'host':_0x631a('0x17'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x631a('0x18'))['register'](socket);function respondWithStatusCode(_0x2337df,_0x51d145){_0x51d145=_0x51d145||0xcc;return function(_0x110e6b){if(_0x110e6b){return _0x2337df[_0x631a('0x19')](_0x51d145);}return _0x2337df[_0x631a('0x1a')](_0x51d145)[_0x631a('0x1b')]();};}function respondWithResult(_0x275379,_0x46d9b6){_0x46d9b6=_0x46d9b6||0xc8;return function(_0x508f9d){if(_0x508f9d){return _0x275379[_0x631a('0x1a')](_0x46d9b6)[_0x631a('0x1c')](_0x508f9d);}};}function respondWithFilteredResult(_0x4686b6,_0x4b3d46){return function(_0xb6cc58){if(_0xb6cc58){var _0x19af9a=_0xb6cc58['count'],_0xc538c4=_0x4b3d46[_0x631a('0x1d')],_0x56d08e=_0x4b3d46[_0x631a('0x1d')]+_0x4b3d46[_0x631a('0x1e')],_0x5142f5;if(_0x56d08e>=_0x19af9a){_0x56d08e=_0x19af9a;_0x5142f5=0xc8;}else{_0x5142f5=0xce;}_0x4686b6['status'](_0x5142f5);return _0x4686b6[_0x631a('0x1f')](_0x631a('0x20'),_0xc538c4+'-'+_0x56d08e+'/'+_0x19af9a)[_0x631a('0x1c')](_0xb6cc58);}return null;};}function patchUpdates(_0x3734e1){return function(_0x3deb7c){try{jsonpatch['apply'](_0x3deb7c,_0x3734e1,!![]);}catch(_0x2d3f8b){return BPromise[_0x631a('0x21')](_0x2d3f8b);}return _0x3deb7c['save']();};}function saveUpdates(_0x22c755,_0x3f9136){return function(_0x289b66){if(_0x289b66){return _0x289b66['update'](_0x22c755)['then'](function(_0x1217fa){return _0x1217fa;});}return null;};}function removeEntity(_0x28c818,_0x497037){return function(_0x8ac121){if(_0x8ac121){return _0x8ac121['destroy']()[_0x631a('0x22')](function(){_0x28c818['status'](0xcc)[_0x631a('0x1b')]();});}};}function handleEntityNotFound(_0x453862,_0x1c15dd){return function(_0x115b38){if(!_0x115b38){_0x453862[_0x631a('0x19')](0x194);}return _0x115b38;};}function handleError(_0x1e6406,_0x5eb646){_0x5eb646=_0x5eb646||0x1f4;return function(_0x408ee1){logger[_0x631a('0x23')](_0x408ee1['stack']);if(_0x408ee1[_0x631a('0x24')]){delete _0x408ee1[_0x631a('0x24')];}_0x1e6406[_0x631a('0x1a')](_0x5eb646)[_0x631a('0x25')](_0x408ee1);};}function getInteractionUnreadMessages(_0x5ec4c1){return new BPromise(function(_0x1aa96e,_0xf63d5f){try{if(_0x5ec4c1[_0x631a('0x26')]){_0x5ec4c1[_0x631a('0x27')]=0x0;_0x1aa96e(_0x5ec4c1);}else{return db[_0x631a('0x28')][_0x631a('0x29')]({'where':{'OpenchannelInteractionId':_0x5ec4c1['id'],'direction':'in','read':![]}})[_0x631a('0x22')](function(_0x56fb07){_0x5ec4c1[_0x631a('0x27')]=_0x56fb07;_0x1aa96e(_0x5ec4c1);});}}catch(_0x31f53a){_0xf63d5f(_0x31f53a);}});}function getInteractionUsers(_0x2640a4,_0x24148e){return new BPromise(function(_0x5f2a45,_0x3bb5f4){try{if(_0x24148e[_0x2640a4['id']]){_0x2640a4[_0x631a('0x2a')]=_[_0x631a('0x2b')](_0x24148e[_0x2640a4['id']],function(_0x412c7c){return{'id':_0x412c7c['id']};});}}catch(_0x374a07){_0x3bb5f4(_0x374a07);}_0x5f2a45(_0x2640a4);});}function getInteractionTags(_0x47c045,_0x31b148){return new BPromise(function(_0x5299fc,_0x1a6423){try{if(_0x47c045[_0x631a('0x2c')]){_0x47c045[_0x631a('0x2d')]=[];_0x47c045['TagIds'][_0x631a('0x2e')](',')[_0x631a('0x2f')](function(_0x375b60){_0x47c045[_0x631a('0x2d')][_0x631a('0x30')](_0x31b148[_0x375b60]);});}delete _0x47c045[_0x631a('0x2c')];}catch(_0x56ca1a){_0x1a6423(_0x56ca1a);}_0x5299fc(_0x47c045);});}function updateOpenchannelInteraction(_0x17433f,_0x1d4205,_0x231b4a){return new BPromise(function(_0x224c58,_0x5f4f79){return getInteractionUnreadMessages(_0x17433f)[_0x631a('0x22')](function(_0x5ed2da){return getInteractionUsers(_0x5ed2da,_0x231b4a);})['then'](function(_0x18df7c){return getInteractionTags(_0x18df7c,_0x1d4205);})[_0x631a('0x22')](function(_0xfde7df){_0x224c58(_0xfde7df);})['catch'](function(_0x4c1970){_0x5f4f79(_0x4c1970);});});}exports[_0x631a('0x31')]=function(_0x2c486d,_0x4b003f){var _0x4665c4={},_0x110196={},_0x373e4d={'count':0x0,'rows':[]};var _0xc1f25f=db['OpenchannelInteraction'][_0x631a('0x32')];_0x110196[_0x631a('0x33')]=_[_0x631a('0x34')](_0xc1f25f);_0x110196[_0x631a('0x35')]=_[_0x631a('0x34')](_0x2c486d[_0x631a('0x35')]);_0x110196[_0x631a('0x36')]=_[_0x631a('0x37')](_0x110196[_0x631a('0x33')],_0x110196['query']);_0x4665c4[_0x631a('0x38')]=_[_0x631a('0x37')](_0x110196[_0x631a('0x33')],qs[_0x631a('0x39')](_0x2c486d[_0x631a('0x35')][_0x631a('0x39')]));_0x4665c4['attributes']=_0x4665c4['attributes'][_0x631a('0x3a')]?_0x4665c4[_0x631a('0x38')]:_0x110196[_0x631a('0x33')];if(!_0x2c486d[_0x631a('0x35')][_0x631a('0x3b')](_0x631a('0x3c'))){_0x4665c4[_0x631a('0x1e')]=qs[_0x631a('0x1e')](_0x2c486d[_0x631a('0x35')]['limit']);_0x4665c4[_0x631a('0x1d')]=qs[_0x631a('0x1d')](_0x2c486d['query'][_0x631a('0x1d')]);}_0x4665c4[_0x631a('0x3d')]=qs[_0x631a('0x3e')](_0x2c486d['query'][_0x631a('0x3e')]);_0x4665c4[_0x631a('0x3f')]=qs[_0x631a('0x36')](_[_0x631a('0x40')](_0x2c486d[_0x631a('0x35')],_0x110196[_0x631a('0x36')]));var _0x4c5512=[];var _0x251fbe=squel[_0x631a('0x41')]()[_0x631a('0x42')]('id')[_0x631a('0x42')](_0x631a('0x24'))[_0x631a('0x42')]('color')[_0x631a('0x43')](_0x631a('0x44'));var _0x3c132e=squel[_0x631a('0x41')]()[_0x631a('0x42')](_0x631a('0x45'))['from'](_0x631a('0x46'),'me')['where'](_0x631a('0x47'))[_0x631a('0x3f')](_0x631a('0x48'))[_0x631a('0x3f')](_0x631a('0x49'));var _0x3a3556=squel['select']()[_0x631a('0x42')](_0x631a('0x4a'))[_0x631a('0x42')](_0x631a('0x4b'))[_0x631a('0x43')](_0x631a('0x4c'),'ui')[_0x631a('0x4d')](_0x631a('0x4e'),'u','u.id\x20=\x20ui.UserId');var _0x394e6e=squel['select']()[_0x631a('0x43')]('openchannel_interactions','i')['left_join']('cm_contacts','c',_0x631a('0x4f'))[_0x631a('0x4d')](_0x631a('0x4e'),'o','o.id\x20=\x20i.UserId')[_0x631a('0x4d')](_0x631a('0x50'),'a',_0x631a('0x51'))[_0x631a('0x4d')](_0x631a('0x46'),'me',_0x631a('0x47'));var _0x2fa0df=squel[_0x631a('0x52')]();if(_0x2c486d['query'][_0x631a('0x53')]){var _0x42499b=JSON[_0x631a('0x54')](_0x2c486d[_0x631a('0x35')][_0x631a('0x53')]);_[_0x631a('0x34')](_0x42499b)[_0x631a('0x2f')](function(_0x3d2e68){var _0x3a5415=_0x42499b[_0x3d2e68];if(_0x3d2e68===_0x631a('0x55')){var _0x107a31=moment(_0x3a5415[_0x631a('0x56')]['dateStart'])[_0x631a('0x57')](_0x631a('0x58'))[_0x631a('0x59')]()[_0x631a('0x5a')]();var _0x5e991f=moment(_0x5e991f)['utc']()[_0x631a('0x5b')](_0x631a('0x58'))['format']();_0x2fa0df[_0x631a('0x5c')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x107a31,_0x5e991f);}else{if(_['isArray'](_0x3a5415[_0x631a('0x5d')])){_0x3a5415[_0x631a('0x5d')][_0x631a('0x2f')](function(_0x50c686){switch(_0x3a5415[_0x631a('0x5d')][_0x631a('0x56')]){case'IS':if(_0x3d2e68!==_0x631a('0x5e')&&_0x3d2e68!==_0x631a('0x5f')){if(_[_0x631a('0x60')](_0x3a5415[_0x631a('0x56')])&&_0x3a5415[_0x631a('0x56')][_0x631a('0x3a')]>0x1){_0x2fa0df[_0x631a('0x5c')](_0x3a5415['tableAlias']+'.'+_0x3d2e68+_0x631a('0x61'),_0x3a5415[_0x631a('0x56')]);}else{_0x2fa0df[_0x631a('0x5c')](_0x3a5415[_0x631a('0x62')]+'.'+_0x3d2e68+_0x631a('0x63'),_0x3a5415['value'][0x0]);}}break;case'=':_0x2fa0df[_0x631a('0x5c')](_0x3a5415[_0x631a('0x62')]+'.'+_0x3d2e68+'\x20=\x20?',_0x3a5415[_0x631a('0x56')]);break;case _0x631a('0x64'):if(_0x3d2e68===_0x631a('0x65')){_0x2fa0df[_0x631a('0x5c')]('c.firstName'+_0x631a('0x66'),'%'+_0x3a5415['value']+'%');_0x2fa0df['or'](_0x631a('0x67')+_0x631a('0x66'),'%'+_0x3a5415[_0x631a('0x56')]+'%');_0x2fa0df['or'](_0x631a('0x68')+_0x631a('0x66'),'%'+_0x3a5415[_0x631a('0x56')]+'%');}else{_0x2fa0df['and'](_0x3a5415[_0x631a('0x62')]+'.'+_0x3d2e68+'\x20LIKE\x20?','%'+_0x3a5415[_0x631a('0x56')]+'%');}break;case'>':_0x2fa0df[_0x631a('0x5c')](_0x3a5415[_0x631a('0x62')]+'.'+_0x3d2e68+_0x631a('0x69'),_0x3a5415['value']);break;case'<':_0x2fa0df[_0x631a('0x5c')](_0x3a5415[_0x631a('0x62')]+'.'+_0x3d2e68+_0x631a('0x6a'),_0x3a5415['value']);break;}});}else{switch(_0x3a5415[_0x631a('0x5d')]['value']){case'IS':if(_0x3d2e68!=='TagId'&&_0x3d2e68!==_0x631a('0x5f')){if(_[_0x631a('0x60')](_0x3a5415[_0x631a('0x56')])&&_0x3a5415[_0x631a('0x56')]['length']>0x1){_0x2fa0df['and'](_0x3a5415['tableAlias']+'.'+_0x3d2e68+_0x631a('0x61'),_0x3a5415[_0x631a('0x56')]);}else{_0x2fa0df['and'](_0x3a5415['tableAlias']+'.'+_0x3d2e68+_0x631a('0x63'),_0x3a5415[_0x631a('0x56')][0x0]);}}break;case'=':_0x2fa0df[_0x631a('0x5c')](_0x3a5415['tableAlias']+'.'+_0x3d2e68+_0x631a('0x63'),_0x3a5415[_0x631a('0x56')]);break;case _0x631a('0x64'):if(_0x3d2e68===_0x631a('0x65')){_0x2fa0df['and'](_0x631a('0x6b')+_0x631a('0x66'),'%'+_0x3a5415[_0x631a('0x56')]+'%');_0x2fa0df['or'](_0x631a('0x67')+_0x631a('0x66'),'%'+_0x3a5415[_0x631a('0x56')]+'%');_0x2fa0df['or'](_0x631a('0x68')+_0x631a('0x66'),'%'+_0x3a5415[_0x631a('0x56')]+'%');}else{_0x2fa0df[_0x631a('0x5c')](_0x3a5415[_0x631a('0x62')]+'.'+_0x3d2e68+'\x20LIKE\x20?','%'+_0x3a5415['value']+'%');}break;case'>':_0x2fa0df['and'](_0x3a5415[_0x631a('0x62')]+'.'+_0x3d2e68+_0x631a('0x69'),_0x3a5415['value']);break;case'<':_0x2fa0df[_0x631a('0x5c')](_0x3a5415[_0x631a('0x62')]+'.'+_0x3d2e68+_0x631a('0x6a'),_0x3a5415['value']);break;}}}});}else{var _0x1f529f=_(Object[_0x631a('0x34')](_0x2c486d[_0x631a('0x35')]))[_0x631a('0x2b')](function(_0x41a9a0){return _0xc1f25f[_0x631a('0x3b')](_0x41a9a0)?_0x41a9a0:undefined;})['filter'](function(_0x3b1850){return!_[_0x631a('0x6c')](_0x3b1850);})[_0x631a('0x56')]();if(!_[_0x631a('0x6d')](_0x1f529f)){_0x1f529f[_0x631a('0x2f')](function(_0x4e8496){if(_0x4e8496===_0x631a('0x6e')){_0x394e6e[_0x631a('0x3f')]('i.OpenchannelAccountId\x20IN\x20?',[][_0x631a('0x6f')](_0x2c486d['query'][_0x4e8496]));}else if(_0x4e8496===_0x631a('0x55')){var _0x40e9d8=JSON[_0x631a('0x54')](_0x2c486d[_0x631a('0x35')][_0x4e8496])['$gte'];var _0x15a4a3=JSON[_0x631a('0x54')](_0x2c486d[_0x631a('0x35')][_0x4e8496])[_0x631a('0x70')];_0x394e6e[_0x631a('0x3f')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x40e9d8,_0x15a4a3);}else{if(_0x2c486d['query'][_0x4e8496]===_0x631a('0x71')){_0x394e6e[_0x631a('0x3f')]('i.'+_0x4e8496+_0x631a('0x72'));}else{_0x394e6e['where']('i.'+_0x4e8496+'\x20=\x20?',_0x2c486d[_0x631a('0x35')][_0x4e8496]);}}});}if(_0x2c486d[_0x631a('0x35')][_0x631a('0x73')]){var _0x2bf410=_0x2c486d[_0x631a('0x35')][_0x631a('0x73')][_0x631a('0x74')]('\x5c','\x5c\x5c')['replace']('\x27\x27','\x27\x27\x27\x27');if(qs[_0x631a('0x75')](_0x2bf410)){_0x2fa0df['or'](_0x631a('0x76'),_0x2bf410+'%');}else{var _0x672a50=[];_0x2bf410[_0x631a('0x2e')]('\x20')[_0x631a('0x2f')](function(_0x190acc){_0x672a50['push']('+'+_0x190acc['toString']());});var _0x204a3a=_0x672a50['join']('\x20');_0x2fa0df['or']('MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)',_0x204a3a)['or'](_0x631a('0x77'),_0x2bf410+'%')['or'](_0x631a('0x78'),_0x2bf410+'%');}}}_0x394e6e['where'](_0x2fa0df);if(_0x4665c4['order']){_0x4665c4['order'][_0x631a('0x2f')](function(_0x3b6fc9){_0x394e6e[_0x631a('0x3d')]('i.'+_0x3b6fc9[0x0],_0x3b6fc9[0x1]===_0x631a('0x79')?![]:!![]);});}_0x394e6e[_0x631a('0x7a')](_0x631a('0x7b'));var _0x44c8a1={'type':db['Sequelize'][_0x631a('0x7c')][_0x631a('0x7d')],'raw':!![]};var _0x328e88=_0x394e6e[_0x631a('0x7e')]()['field']('COUNT(*)');if(!_0x2c486d[_0x631a('0x35')][_0x631a('0x53')]){if(_0x2c486d[_0x631a('0x35')][_0x631a('0x7f')]){if(_0x2c486d['query'][_0x631a('0x7f')]==0x1){_0x328e88[_0x631a('0x3f')](util[_0x631a('0x5a')](_0x631a('0x80'),_0x3c132e[_0x631a('0x81')]()));_0x394e6e[_0x631a('0x82')](_0x631a('0x83'));}else{_0x328e88[_0x631a('0x3f')](util[_0x631a('0x5a')](_0x631a('0x84'),_0x3c132e[_0x631a('0x81')]()));_0x394e6e[_0x631a('0x82')](_0x631a('0x85'));}}if(_0x2c486d[_0x631a('0x35')]['tag']){var _0x368df=_[_0x631a('0x60')](_0x2c486d['query'][_0x631a('0x86')])?_0x2c486d[_0x631a('0x35')][_0x631a('0x86')]:new Array(_0x2c486d[_0x631a('0x35')][_0x631a('0x86')]);var _0x2cc87f=squel[_0x631a('0x52')]();_0x368df[_0x631a('0x2f')](function(_0x497c74){_0x2cc87f['or'](_0x631a('0x87'),'%,'+_0x497c74+',%');});_0x394e6e[_0x631a('0x82')](_0x2cc87f);_0x328e88['left_join'](_0x631a('0x88'),'it',_0x631a('0x89'));_0x328e88[_0x631a('0x4d')](_0x631a('0x44'),'t',_0x631a('0x8a'));_0x328e88[_0x631a('0x3f')](_0x631a('0x8b'),_0x368df);}}else{var _0x42499b=JSON[_0x631a('0x54')](_0x2c486d[_0x631a('0x35')][_0x631a('0x53')]);_['keys'](_0x42499b)[_0x631a('0x2f')](function(_0x49c421){var _0x38cb40=_0x42499b[_0x49c421];if(_0x49c421==='TagId'){var _0x156673=_0x38cb40[_0x631a('0x56')];var _0x460632=squel[_0x631a('0x52')]();_0x156673['forEach'](function(_0x18bc3c){_0x460632['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x18bc3c+',%');});_0x394e6e[_0x631a('0x82')](_0x460632);_0x328e88[_0x631a('0x4d')](_0x631a('0x8c'),'it',_0x631a('0x8d'));_0x328e88[_0x631a('0x4d')](_0x631a('0x44'),'t',_0x631a('0x8a'));_0x328e88[_0x631a('0x3f')]('t.id\x20IN\x20?',_0x156673);}else if(_0x49c421===_0x631a('0x5f')){if(_0x38cb40[_0x631a('0x56')][_0x631a('0x3a')]===0x1){if(_0x38cb40['value'][0x0]===0x1){_0x328e88[_0x631a('0x3f')](util['format'](_0x631a('0x80'),_0x3c132e[_0x631a('0x81')]()));_0x394e6e[_0x631a('0x82')]('`Messages.count`\x20=\x200');}else{_0x328e88['where'](util['format'](_0x631a('0x84'),_0x3c132e[_0x631a('0x81')]()));_0x394e6e[_0x631a('0x82')](_0x631a('0x85'));}}}});}db[_0x631a('0x8e')][_0x631a('0x35')](_0x328e88['toString'](),_0x44c8a1)['then'](function(_0x43b5a0){_0x373e4d[_0x631a('0x29')]=_0x43b5a0[_0x631a('0x3a')];if(_0x373e4d[_0x631a('0x29')]===0x0)return[];return db[_0x631a('0x8e')]['query'](_0x251fbe[_0x631a('0x81')](),_0x44c8a1)[_0x631a('0x22')](function(_0x2f6855){_0x4c5512=_['keyBy'](_0x2f6855,'id');_0x44c8a1=_[_0x631a('0x8f')](_0x44c8a1,{'model':db['OpenchannelInteraction'],'mapToModel':!![],'raw':!![],'nest':!![]});_0x394e6e[_0x631a('0x42')](_0x631a('0x90'),_0x631a('0x91'));_0x394e6e[_0x631a('0x42')](_0x631a('0x92'));_0x394e6e[_0x631a('0x42')](_0x631a('0x6b'),'Contact.firstName');_0x394e6e[_0x631a('0x42')]('c.lastName',_0x631a('0x93'));_0x394e6e['field'](_0x631a('0x68'),'Contact.email');_0x394e6e['field'](_0x631a('0x94'),_0x631a('0x95'));_0x394e6e[_0x631a('0x42')]('c.mobile',_0x631a('0x96'));_0x394e6e[_0x631a('0x42')]('c.fax',_0x631a('0x97'));_0x394e6e[_0x631a('0x42')](_0x631a('0x98'),'TagIds');_0x394e6e[_0x631a('0x4d')](_0x631a('0x88'),'it',_0x631a('0x89'));_0x394e6e[_0x631a('0x4d')](_0x631a('0x44'),'t','t.id\x20=\x20it.TagId');_0x394e6e[_0x631a('0x1e')](_0x4665c4['limit']);_0x394e6e[_0x631a('0x1d')](_0x4665c4['offset']);return db[_0x631a('0x8e')][_0x631a('0x35')](_0x394e6e[_0x631a('0x81')](),_0x44c8a1);})[_0x631a('0x22')](function(_0x47f689){_0x3a3556[_0x631a('0x3f')]('ui.OpenchannelInteractionId\x20IN\x20?',_[_0x631a('0x2b')](_0x47f689,'id'));return db[_0x631a('0x8e')][_0x631a('0x35')](_0x3a3556['toString'](),_0x44c8a1)['then'](function(_0x10a5f7){var _0x2c0a13=_[_0x631a('0x99')](_0x10a5f7,_0x631a('0x9a'));var _0x1e3417=[];_0x47f689[_0x631a('0x2f')](function(_0x594d3c){_0x1e3417['push'](updateOpenchannelInteraction(_0x594d3c,_0x4c5512,_0x2c0a13));});return BPromise[_0x631a('0x9b')](_0x1e3417);});});})['then'](function(_0x2dbb00){_0x373e4d['rows']=_0x2dbb00;return _0x373e4d;})[_0x631a('0x22')](respondWithFilteredResult(_0x4b003f,_0x4665c4))[_0x631a('0x9c')](handleError(_0x4b003f,null));};exports['show']=function(_0x5cf51d,_0x57eb98){var _0x454612={'raw':![],'where':{'id':_0x5cf51d[_0x631a('0x9d')]['id']}},_0x345ca1={};_0x345ca1['model']=_[_0x631a('0x34')](db[_0x631a('0x9e')]['rawAttributes']);_0x345ca1[_0x631a('0x35')]=_[_0x631a('0x34')](_0x5cf51d['query']);_0x345ca1[_0x631a('0x36')]=_[_0x631a('0x37')](_0x345ca1[_0x631a('0x33')],_0x345ca1[_0x631a('0x35')]);_0x454612[_0x631a('0x38')]=_[_0x631a('0x37')](_0x345ca1[_0x631a('0x33')],qs[_0x631a('0x39')](_0x5cf51d[_0x631a('0x35')][_0x631a('0x39')]));_0x454612['attributes']=_0x454612[_0x631a('0x38')][_0x631a('0x3a')]?_0x454612['attributes']:_0x345ca1['model'];if(_0x5cf51d[_0x631a('0x35')][_0x631a('0x9f')]){_0x454612[_0x631a('0xa0')]=[{'all':!![]}];}_0x454612=_[_0x631a('0x8f')]({},_0x454612,_0x5cf51d[_0x631a('0xa1')]);return db['OpenchannelInteraction'][_0x631a('0xa2')](_0x454612)[_0x631a('0x22')](handleEntityNotFound(_0x57eb98,null))[_0x631a('0x22')](respondWithResult(_0x57eb98,null))[_0x631a('0x9c')](handleError(_0x57eb98,null));};exports[_0x631a('0xa3')]=function(_0x1bdca6,_0x56f256){return db[_0x631a('0x9e')][_0x631a('0xa3')](_0x1bdca6['body'],{})['then'](respondWithResult(_0x56f256,0xc9))[_0x631a('0x9c')](handleError(_0x56f256,null));};exports[_0x631a('0xa4')]=function(_0xfaa634,_0x30f526){if(_0xfaa634[_0x631a('0xa5')]['id']){delete _0xfaa634[_0x631a('0xa5')]['id'];}return db[_0x631a('0x9e')][_0x631a('0xa2')]({'where':{'id':_0xfaa634[_0x631a('0x9d')]['id']}})[_0x631a('0x22')](handleEntityNotFound(_0x30f526,null))[_0x631a('0x22')](saveUpdates(_0xfaa634['body'],null))[_0x631a('0x22')](respondWithResult(_0x30f526,null))[_0x631a('0x9c')](handleError(_0x30f526,null));};exports['destroy']=function(_0x4f2827,_0x3b6611){return db[_0x631a('0x9e')][_0x631a('0xa2')]({'where':{'id':_0x4f2827[_0x631a('0x9d')]['id']}})[_0x631a('0x22')](handleEntityNotFound(_0x3b6611,null))[_0x631a('0x22')](removeEntity(_0x3b6611,null))[_0x631a('0x9c')](handleError(_0x3b6611,null));};exports[_0x631a('0xa6')]=function(_0x36ba8d,_0x147118){return db[_0x631a('0x9e')]['describe']()[_0x631a('0x22')](respondWithResult(_0x147118,null))[_0x631a('0x9c')](handleError(_0x147118,null));};exports['addMessage']=function(_0x1f60f4,_0xccfd6e,_0x341176){return db['OpenchannelMessage'][_0x631a('0xa2')]({'where':{'id':_0x1f60f4[_0x631a('0x9d')]['id']}})['then'](handleEntityNotFound(_0xccfd6e,null))[_0x631a('0x22')](function(_0x9af8c5){if(_0x9af8c5){return _0x9af8c5[_0x631a('0xa7')](_0x1f60f4[_0x631a('0xa5')]['ids'],_[_0x631a('0xa8')](_0x1f60f4[_0x631a('0xa5')],['ids','id'])||{});}})['then'](respondWithResult(_0xccfd6e,null))[_0x631a('0x9c')](handleError(_0xccfd6e,null));};exports[_0x631a('0xa9')]=function(_0x1cf333,_0x45ca5b,_0x59c097){var _0x330c59={'raw':![],'where':{}};var _0x1ff979={};var _0x537700={'count':0x0,'rows':[]};return db[_0x631a('0x9e')][_0x631a('0xaa')]({'where':{'id':_0x1cf333['params']['id']}})[_0x631a('0x22')](handleEntityNotFound(_0x45ca5b,null))['then'](function(_0xd9bd1d){if(_0xd9bd1d){_0x1ff979[_0x631a('0x33')]=_[_0x631a('0x34')](db[_0x631a('0x28')]['rawAttributes']);_0x1ff979['query']=_['keys'](_0x1cf333['query']);_0x1ff979[_0x631a('0x36')]=_[_0x631a('0x37')](_0x1ff979[_0x631a('0x33')],_0x1ff979['query']);_0x330c59[_0x631a('0x38')]=_[_0x631a('0x37')](_0x1ff979[_0x631a('0x33')],qs[_0x631a('0x39')](_0x1cf333[_0x631a('0x35')]['fields']));_0x330c59[_0x631a('0x38')]=_0x330c59[_0x631a('0x38')][_0x631a('0x3a')]?_0x330c59[_0x631a('0x38')]:_0x1ff979[_0x631a('0x33')];if(!_0x1cf333['query'][_0x631a('0x3b')](_0x631a('0x3c'))){_0x330c59[_0x631a('0x1e')]=qs['limit'](_0x1cf333[_0x631a('0x35')][_0x631a('0x1e')]);_0x330c59[_0x631a('0x1d')]=qs[_0x631a('0x1d')](_0x1cf333[_0x631a('0x35')][_0x631a('0x1d')]);}_0x330c59[_0x631a('0x3d')]=qs['sort'](_0x1cf333['query']['sort']);_0x330c59[_0x631a('0x3f')]=qs[_0x631a('0x36')](_[_0x631a('0x40')](_0x1cf333[_0x631a('0x35')],_0x1ff979[_0x631a('0x36')]));_0x330c59[_0x631a('0x3f')][_0x631a('0x9a')]=_0xd9bd1d['id'];if(_0x1cf333['query']['filter']){_0x330c59['where']=_[_0x631a('0x8f')](_0x330c59[_0x631a('0x3f')],{'$or':_[_0x631a('0x2b')](_0x330c59[_0x631a('0x38')],function(_0x2f2dd0){var _0x16d5ff={};_0x16d5ff[_0x2f2dd0]={'$like':'%'+_0x1cf333['query'][_0x631a('0x73')]+'%'};return _0x16d5ff;})});}if(_0x1cf333[_0x631a('0x35')]['$gte']){var _0x279435=_0x1cf333[_0x631a('0x35')][_0x631a('0xab')][_0x631a('0x2e')](',');var _0x1cd956={};_0x1cd956[_0x279435[0x0]]={'$gte':moment(_0x279435[0x1])[_0x631a('0x5a')](_0x631a('0xac'))};_0x330c59[_0x631a('0x3f')]=_['merge'](_0x330c59[_0x631a('0x3f')],_0x1cd956);}_0x330c59=_[_0x631a('0x8f')]({},_0x330c59,_0x1cf333[_0x631a('0xa1')]);return db[_0x631a('0x28')][_0x631a('0x29')]({'where':_0x330c59[_0x631a('0x3f')]})[_0x631a('0x22')](function(_0x543a5a){_0x537700['count']=_0x543a5a;if(_0x1cf333[_0x631a('0x35')][_0x631a('0x9f')]){_0x330c59['include']=[{'all':!![]}];}return db[_0x631a('0x28')]['findAll'](_0x330c59);})[_0x631a('0x22')](function(_0x3f6f8f){_0x537700['rows']=_0x3f6f8f;return _0x537700;});}})[_0x631a('0x22')](respondWithFilteredResult(_0x45ca5b,_0x330c59))[_0x631a('0x9c')](handleError(_0x45ca5b,null));};exports[_0x631a('0xad')]=function(_0x1e3a88,_0x4d58c9,_0x1fe314){return db[_0x631a('0x9e')][_0x631a('0xa2')]({'where':{'id':_0x1e3a88[_0x631a('0x9d')]['id']}})['then'](handleEntityNotFound(_0x4d58c9,null))[_0x631a('0x22')](function(_0x27bc0b){if(_0x27bc0b){return _0x27bc0b[_0x631a('0xae')](_0x1e3a88[_0x631a('0xa5')][_0x631a('0xaf')],_['omit'](_0x1e3a88[_0x631a('0xa5')],['ids','id'])||{})[_0x631a('0xb0')](function(){return db[_0x631a('0xb1')][_0x631a('0xb2')]({'attributes':['id',_0x631a('0x24'),_0x631a('0xb3')],'where':{'id':_0x1e3a88[_0x631a('0xa5')][_0x631a('0xaf')]}});})[_0x631a('0x22')](function(_0x57981d){socket[_0x631a('0xb4')](_0x631a('0xb5'),{'id':Number(_0x1e3a88[_0x631a('0x9d')]['id']),'tags':_0x57981d||[]});return{'id':Number(_0x1e3a88['params']['id']),'tags':_0x57981d||[]};});}})[_0x631a('0x22')](respondWithResult(_0x4d58c9,null))[_0x631a('0x9c')](handleError(_0x4d58c9,null));};exports[_0x631a('0xb6')]=function(_0x564731,_0xf3b444,_0x5b63dd){return db[_0x631a('0x9e')][_0x631a('0xa2')]({'where':{'id':_0x564731['params']['id']}})[_0x631a('0x22')](handleEntityNotFound(_0xf3b444,null))[_0x631a('0x22')](function(_0x584600){if(_0x584600){return _0x584600[_0x631a('0xb6')](_0x564731['query'][_0x631a('0xaf')]);}})[_0x631a('0x22')](respondWithStatusCode(_0xf3b444,null))[_0x631a('0x9c')](handleError(_0xf3b444,null));};exports[_0x631a('0xb7')]=function(_0x3e8607,_0x5c58df){var _0x31f79a=moment()[_0x631a('0xb8')]()[_0x631a('0x81')]();var _0x245989=path[_0x631a('0xb9')](config['root'],'server',_0x631a('0xba'),'tmp');var _0x3c2e14=path['join'](config[_0x631a('0xbb')],_0x631a('0xbc'),_0x631a('0xba'),_0x631a('0xbd'));var _0x4a5cb2=path[_0x631a('0xb9')](_0x245989,_0x31f79a);var _0x25fa9d=util[_0x631a('0x5a')](_0x631a('0xbe'),_0x3e8607[_0x631a('0x9d')]['id'],_0x31f79a);var _0xb35060=path[_0x631a('0xb9')](_0x245989,_0x25fa9d);var _0x52d068=![];return db[_0x631a('0x9e')]['find']({'where':{'id':_0x3e8607[_0x631a('0x9d')]['id']},'include':[{'model':db[_0x631a('0x28')],'as':'Messages','attributes':['id',_0x631a('0xa5'),'createdAt','direction',_0x631a('0xbf')],'include':[{'model':db[_0x631a('0xc0')],'as':_0x631a('0xc0'),'attributes':['id',_0x631a('0xc1')],'raw':!![]},{'model':db[_0x631a('0xc2')],'as':'Contact','attributes':['id','firstName',_0x631a('0xc3')],'raw':!![]},{'model':db[_0x631a('0xc4')],'as':_0x631a('0xc4'),'raw':!![]}]},{'model':db['OpenchannelAccount'],'as':_0x631a('0xc5'),'attributes':['id',_0x631a('0x24')]},{'model':db['User'],'as':'Owner','attributes':['id',_0x631a('0xc1')]}]})['then'](handleEntityNotFound(_0x5c58df,null))[_0x631a('0x22')](function(_0x18375b){if(_0x18375b){var _0x2f4d0e=_0x18375b[_0x631a('0xc6')]({'plain':!![]});_0x52d068=!![];var _0x75c2a2={'format':'A4','border':_0x631a('0xc7'),'header':{'height':_0x631a('0xc8'),'contents':{'first':_0x631a('0xc9')}},'footer':{'height':'30px','contents':{'default':util[_0x631a('0x5a')](_0x631a('0xca'),util['format'](_0x631a('0xcb'),_0x631a('0xcc'),_0x2f4d0e['id']),moment()[_0x631a('0x5a')](_0x631a('0xcd'))[_0x631a('0x81')]())}}};fs[_0x631a('0xce')](_0x4a5cb2);var _0x5d0d14={'channel':'Openchannel','account':_0x2f4d0e[_0x631a('0xc5')][_0x631a('0x24')],'agent':_0x2f4d0e[_0x631a('0xcf')]?_0x2f4d0e['Owner'][_0x631a('0xc1')]:'N.A.','createdAt':moment(_0x2f4d0e[_0x631a('0x55')])[_0x631a('0x5a')](_0x631a('0xac'))[_0x631a('0x81')](),'closedAt':_0x2f4d0e[_0x631a('0x26')]?moment(_0x2f4d0e[_0x631a('0xd0')])[_0x631a('0x5a')]('YYYY-MM-DD\x20HH:mm:ss')['toString']():'','disposition':_0x2f4d0e[_0x631a('0xd1')],'visibility':_0x2f4d0e[_0x631a('0xd2')]?_0x631a('0xd3'):_0x631a('0xd4'),'messages':_(_0x2f4d0e[_0x631a('0xd5')])['filter']({'secret':![]})[_0x631a('0x2b')](function(_0x2eaea9){if(_0x2eaea9[_0x631a('0xc4')]){var _0x1ed8bd=path[_0x631a('0xb9')](_0x3c2e14,_0x2eaea9['Attachment'][_0x631a('0xd6')]);if(fs['existsSync'](_0x1ed8bd)){fs[_0x631a('0xd7')](_0x1ed8bd)[_0x631a('0xd8')](fs[_0x631a('0xd9')](path[_0x631a('0xb9')](_0x4a5cb2,_0x2eaea9[_0x631a('0xc4')][_0x631a('0xd6')])));}}return{'date':moment(_0x2eaea9[_0x631a('0x55')])[_0x631a('0x5a')](_0x631a('0xac'))[_0x631a('0x81')](),'sender':_0x2eaea9[_0x631a('0xda')]===_0x631a('0xdb')?_0x2eaea9[_0x631a('0xc0')]?_0x2eaea9[_0x631a('0xc0')][_0x631a('0xc1')]:_0x631a('0xdc'):_0x2eaea9[_0x631a('0xdd')][_0x631a('0xde')]+(_0x2eaea9[_0x631a('0xdd')]['lastName']?'\x20'+_0x2eaea9['Contact']['lastName']:''),'body':_0x2eaea9[_0x631a('0xc4')]?_0x2eaea9[_0x631a('0xc4')]['basename']:_0x2eaea9[_0x631a('0xa5')],'direction':_0x2eaea9[_0x631a('0xda')]===_0x631a('0xdb')?'A':'C','secret':_0x2eaea9[_0x631a('0xbf')],'attachment':_0x2eaea9[_0x631a('0xc4')]};})['value']()};return ejs[_0x631a('0xdf')](path[_0x631a('0xb9')](config[_0x631a('0xbb')],_0x631a('0xbc'),'views',_0x631a('0xe0')),{'interaction':_0x5d0d14})['then'](function(_0x1cf69b){return new BPromise(function(_0xf42d24,_0x27c134){pdf[_0x631a('0xa3')](_0x1cf69b,_0x75c2a2)[_0x631a('0xe1')](path['join'](_0x4a5cb2,_0x631a('0xe2')+_0x2f4d0e['id']+'-'+_0x31f79a+'.pdf'),function(_0x4c4ee3,_0x588e8e){if(_0x4c4ee3)return _0x27c134(_0x4c4ee3);_0xf42d24(_0x588e8e);});});});}})['then'](function(){if(_0x52d068){return new BPromise(function(_0x2956e9,_0x13b8cb){zipdir(_0x4a5cb2,{'saveTo':_0xb35060},function(_0x50a1d6,_0x25324a){if(_0x50a1d6)return _0x13b8cb(_0x50a1d6);return _0x2956e9(_0x25324a);});})[_0x631a('0x22')](function(){return new BPromise(function(_0x16fcae,_0x3f7e95){rimraf(_0x4a5cb2,function(_0x19e5be){if(_0x19e5be)_0x3f7e95(_0x19e5be);return _0x16fcae();});});})['then'](function(){return _0x5c58df[_0x631a('0xb7')](_0xb35060,_0x25fa9d,function(_0x17599c){if(_0x17599c){console[_0x631a('0xe3')](_0x631a('0xe4'),_0x17599c);}else{fs[_0x631a('0xe5')](_0xb35060);}});});}else{return _0x5c58df[_0x631a('0x19')](0xc8);}})[_0x631a('0x9c')](handleError(_0x5c58df,null));};
\ No newline at end of file
+var _0x5986=['renderFile','server','views','downloadInteraction.html','toFile','log','err','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','util','path','sox','ejs','lodash','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./openchannelInteraction.socket','sendStatus','end','status','json','offset','limit','set','Content-Range','apply','save','update','then','destroy','error','name','send','Users','map','Tags','split','forEach','push','catch','index','OpenchannelInteraction','rawAttributes','model','keys','query','filters','intersection','fields','attributes','order','sort','where','pick','select','field','color','tools_tags','from','openchannel_messages','me.OpenchannelInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','me.read\x20=\x20false','u.id','ui.OpenchannelInteractionId','user_has_openchannel_interactions','left_join','users','u.id\x20=\x20ui.UserId','openchannel_interactions','cm_contacts','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','a.id\x20=\x20i.OpenchannelAccountId','expr','advancedFilter','parse','createdAt','value','dateStart','startOf','day','utc','format','endOf','and','isArray','condition','TagId','unreadMessages','length','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','ContactId','c.firstName','\x20LIKE\x20?','c.lastName','\x20>\x20?','hasOwnProperty','filter','isNil','OpenchannelAccountId','i.OpenchannelAccountId\x20IN\x20?','concat','$lte','replace','\x27\x27\x27\x27','isNumeric','join','MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','i.from\x20LIKE\x20?','CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?','DESC','i.id','SELECT','clone','COUNT(*)','read','having','`unreadMessages`\x20=\x200','`unreadMessages`\x20>\x200','tag','openchannel_interaction_has_tags','t.id\x20=\x20it.TagId','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','t.id\x20IN\x20?','sequelize','count','keyBy','COUNT(me.id)','Account.key','i.*','Contact.firstName','Contact.lastName','c.email','Contact.email','Contact.phone','c.mobile','Contact.mobile','c.fax','Contact.fax','GROUP_CONCAT(DISTINCT\x20t.id)','TagIds','it.OpenchannelInteractionId\x20=\x20i.id','toString','ui.OpenchannelInteractionId\x20IN\x20?','OpenchannelInteractionId','rows','includeAll','include','merge','find','create','body','params','describe','addMessage','OpenchannelMessage','omit','ids','findOne','nolimit','$gte','YYYY-MM-DD\x20HH:mm:ss','addTags','setTags','spread','Tag','findAll','emit','openchannelInteractionTags:save','removeTags','download','unix','files','tmp','root','attachments','transcript-%d-%s.zip','Messages','direction','secret','User','fullname','CmContact','Contact','firstName','lastName','Attachment','Account','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','<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','Openchannel','YYYY-MM-DD','mkdirSync','N.A.','closed','closedAt','disposition','threadId','Public','Private','existsSync','pipe','createWriteStream','out','System','basename'];(function(_0x5cc00b,_0x4d635d){var _0x19fa7d=function(_0x505034){while(--_0x505034){_0x5cc00b['push'](_0x5cc00b['shift']());}};_0x19fa7d(++_0x4d635d);}(_0x5986,0x1dd));var _0x6598=function(_0x4780f5,_0x31d9ae){_0x4780f5=_0x4780f5-0x0;var _0x35aa08=_0x5986[_0x4780f5];return _0x35aa08;};'use strict';var pdf=require(_0x6598('0x0'));var emlformat=require(_0x6598('0x1'));var rimraf=require(_0x6598('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x6598('0x3'));var rp=require(_0x6598('0x4'));var moment=require(_0x6598('0x5'));var BPromise=require(_0x6598('0x6'));var Mustache=require('mustache');var util=require(_0x6598('0x7'));var path=require(_0x6598('0x8'));var sox=require(_0x6598('0x9'));var csv=require('to-csv');var ejs=require(_0x6598('0xa'));var fs=require('fs');var _=require(_0x6598('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x6598('0xc'));var toCsv=require(_0x6598('0xd'));var querystring=require(_0x6598('0xe'));var Papa=require(_0x6598('0xf'));var Redis=require(_0x6598('0x10'));var authService=require(_0x6598('0x11'));var qs=require(_0x6598('0x12'));var hardwareService=require(_0x6598('0x13'));var logger=require(_0x6598('0x14'))(_0x6598('0x15'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x6598('0x16'))['db'];config[_0x6598('0x17')]=_[_0x6598('0x18')](config[_0x6598('0x17')],{'host':_0x6598('0x19'),'port':0x18eb});var socket=require(_0x6598('0x1a'))(new Redis(config[_0x6598('0x17')]));require(_0x6598('0x1b'))['register'](socket);function respondWithStatusCode(_0x4a69d6,_0x10e6c6){_0x10e6c6=_0x10e6c6||0xcc;return function(_0x24baa1){if(_0x24baa1){return _0x4a69d6[_0x6598('0x1c')](_0x10e6c6);}return _0x4a69d6['status'](_0x10e6c6)[_0x6598('0x1d')]();};}function respondWithResult(_0x57c050,_0x42c926){_0x42c926=_0x42c926||0xc8;return function(_0x4290c8){if(_0x4290c8){return _0x57c050[_0x6598('0x1e')](_0x42c926)[_0x6598('0x1f')](_0x4290c8);}};}function respondWithFilteredResult(_0x231ed8,_0x1198f2){return function(_0x1d5f83){if(_0x1d5f83){var _0x357c1b=_0x1d5f83['count'],_0x13d890=_0x1198f2[_0x6598('0x20')],_0x2a3c5b=_0x1198f2[_0x6598('0x20')]+_0x1198f2[_0x6598('0x21')],_0x34ef49;if(_0x2a3c5b>=_0x357c1b){_0x2a3c5b=_0x357c1b;_0x34ef49=0xc8;}else{_0x34ef49=0xce;}_0x231ed8[_0x6598('0x1e')](_0x34ef49);return _0x231ed8[_0x6598('0x22')](_0x6598('0x23'),_0x13d890+'-'+_0x2a3c5b+'/'+_0x357c1b)[_0x6598('0x1f')](_0x1d5f83);}return null;};}function patchUpdates(_0x461e65){return function(_0x390812){try{jsonpatch[_0x6598('0x24')](_0x390812,_0x461e65,!![]);}catch(_0x4c4315){return BPromise['reject'](_0x4c4315);}return _0x390812[_0x6598('0x25')]();};}function saveUpdates(_0x1ce459,_0x268d9d){return function(_0x2ff02c){if(_0x2ff02c){return _0x2ff02c[_0x6598('0x26')](_0x1ce459)[_0x6598('0x27')](function(_0x48bd6f){return _0x48bd6f;});}return null;};}function removeEntity(_0x4c8659,_0x5b44ae){return function(_0x47e254){if(_0x47e254){return _0x47e254[_0x6598('0x28')]()['then'](function(){_0x4c8659[_0x6598('0x1e')](0xcc)[_0x6598('0x1d')]();});}};}function handleEntityNotFound(_0x2bca8c,_0x82d11d){return function(_0x2fa660){if(!_0x2fa660){_0x2bca8c[_0x6598('0x1c')](0x194);}return _0x2fa660;};}function handleError(_0x4978ff,_0x1eb61e){_0x1eb61e=_0x1eb61e||0x1f4;return function(_0x49dc34){logger[_0x6598('0x29')](_0x49dc34['stack']);if(_0x49dc34[_0x6598('0x2a')]){delete _0x49dc34[_0x6598('0x2a')];}_0x4978ff[_0x6598('0x1e')](_0x1eb61e)[_0x6598('0x2b')](_0x49dc34);};}function getInteractionUsers(_0x4a7538,_0x362dfc){return new BPromise(function(_0x2f8ca5,_0xe38c43){try{if(_0x362dfc[_0x4a7538['id']]){_0x4a7538[_0x6598('0x2c')]=_[_0x6598('0x2d')](_0x362dfc[_0x4a7538['id']],function(_0x184b99){return{'id':_0x184b99['id']};});}}catch(_0x208cef){_0xe38c43(_0x208cef);}_0x2f8ca5(_0x4a7538);});}function getInteractionTags(_0x1a601b,_0x281249){return new BPromise(function(_0x284797,_0x21673e){try{if(_0x1a601b['TagIds']){_0x1a601b[_0x6598('0x2e')]=[];_0x1a601b['TagIds'][_0x6598('0x2f')](',')[_0x6598('0x30')](function(_0x3cf6f5){_0x1a601b[_0x6598('0x2e')][_0x6598('0x31')](_0x281249[_0x3cf6f5]);});}delete _0x1a601b['TagIds'];}catch(_0x2f5d96){_0x21673e(_0x2f5d96);}_0x284797(_0x1a601b);});}function updateOpenchannelInteraction(_0x43c4d7,_0xdc8b74,_0x28f22d){return new BPromise(function(_0x5e42c8,_0x5c3b5d){return getInteractionUsers(_0x43c4d7,_0x28f22d)[_0x6598('0x27')](function(_0x44d01f){return getInteractionTags(_0x44d01f,_0xdc8b74);})['then'](function(_0x72c26d){_0x5e42c8(_0x72c26d);})[_0x6598('0x32')](function(_0x40afc7){_0x5c3b5d(_0x40afc7);});});}exports[_0x6598('0x33')]=function(_0x4afa0d,_0x3b19ef){var _0x264e21={},_0x1458c0={},_0x1d943f={'count':0x0,'rows':[]};var _0x194725=db[_0x6598('0x34')][_0x6598('0x35')];_0x1458c0[_0x6598('0x36')]=_[_0x6598('0x37')](_0x194725);_0x1458c0[_0x6598('0x38')]=_[_0x6598('0x37')](_0x4afa0d[_0x6598('0x38')]);_0x1458c0[_0x6598('0x39')]=_[_0x6598('0x3a')](_0x1458c0[_0x6598('0x36')],_0x1458c0[_0x6598('0x38')]);_0x264e21['attributes']=_[_0x6598('0x3a')](_0x1458c0['model'],qs[_0x6598('0x3b')](_0x4afa0d[_0x6598('0x38')][_0x6598('0x3b')]));_0x264e21['attributes']=_0x264e21[_0x6598('0x3c')]['length']?_0x264e21[_0x6598('0x3c')]:_0x1458c0['model'];if(!_0x4afa0d[_0x6598('0x38')]['hasOwnProperty']('nolimit')){_0x264e21[_0x6598('0x21')]=qs[_0x6598('0x21')](_0x4afa0d[_0x6598('0x38')][_0x6598('0x21')]);_0x264e21[_0x6598('0x20')]=qs[_0x6598('0x20')](_0x4afa0d[_0x6598('0x38')][_0x6598('0x20')]);}_0x264e21[_0x6598('0x3d')]=qs[_0x6598('0x3e')](_0x4afa0d[_0x6598('0x38')][_0x6598('0x3e')]);_0x264e21[_0x6598('0x3f')]=qs['filters'](_[_0x6598('0x40')](_0x4afa0d['query'],_0x1458c0[_0x6598('0x39')]));var _0x55d0d8=[];var _0x1334f1=squel[_0x6598('0x41')]()[_0x6598('0x42')]('id')[_0x6598('0x42')](_0x6598('0x2a'))[_0x6598('0x42')](_0x6598('0x43'))['from'](_0x6598('0x44'));var _0xdf1650=squel['select']()[_0x6598('0x42')]('COUNT(*)')[_0x6598('0x45')](_0x6598('0x46'),'me')[_0x6598('0x3f')](_0x6598('0x47'))[_0x6598('0x3f')](_0x6598('0x48'))[_0x6598('0x3f')](_0x6598('0x49'));var _0x8ebdc9=squel[_0x6598('0x41')]()[_0x6598('0x42')](_0x6598('0x4a'))[_0x6598('0x42')](_0x6598('0x4b'))[_0x6598('0x45')](_0x6598('0x4c'),'ui')[_0x6598('0x4d')](_0x6598('0x4e'),'u',_0x6598('0x4f'));var _0x1772fa=squel[_0x6598('0x41')]()['from'](_0x6598('0x50'),'i')[_0x6598('0x4d')](_0x6598('0x51'),'c',_0x6598('0x52'))[_0x6598('0x4d')](_0x6598('0x4e'),'o','o.id\x20=\x20i.UserId')['left_join']('openchannel_accounts','a',_0x6598('0x53'))[_0x6598('0x4d')](_0x6598('0x46'),'me','me.OpenchannelInteractionId\x20=\x20i.id\x20AND\x20me.direction\x20=\x20\x27in\x27\x20AND\x20me.read\x20=\x20false');var _0x164730=squel[_0x6598('0x54')]();if(_0x4afa0d[_0x6598('0x38')][_0x6598('0x55')]){var _0x1dc08c=JSON[_0x6598('0x56')](_0x4afa0d[_0x6598('0x38')][_0x6598('0x55')]);_[_0x6598('0x37')](_0x1dc08c)['forEach'](function(_0x51d25e){var _0x5d129b=_0x1dc08c[_0x51d25e];if(_0x51d25e===_0x6598('0x57')){var _0x43e6ff=moment(_0x5d129b[_0x6598('0x58')][_0x6598('0x59')])[_0x6598('0x5a')](_0x6598('0x5b'))[_0x6598('0x5c')]()[_0x6598('0x5d')]();var _0x4b9f0f=moment(_0x4b9f0f)[_0x6598('0x5c')]()[_0x6598('0x5e')](_0x6598('0x5b'))[_0x6598('0x5d')]();_0x164730[_0x6598('0x5f')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x43e6ff,_0x4b9f0f);}else{if(_[_0x6598('0x60')](_0x5d129b[_0x6598('0x61')])){_0x5d129b[_0x6598('0x61')][_0x6598('0x30')](function(_0x18d0e9){switch(_0x5d129b['condition'][_0x6598('0x58')]){case'IS':if(_0x51d25e!==_0x6598('0x62')&&_0x51d25e!==_0x6598('0x63')){if(_[_0x6598('0x60')](_0x5d129b[_0x6598('0x58')])&&_0x5d129b['value'][_0x6598('0x64')]>0x1){_0x164730[_0x6598('0x5f')](_0x5d129b[_0x6598('0x65')]+'.'+_0x51d25e+_0x6598('0x66'),_0x5d129b[_0x6598('0x58')]);}else{_0x164730['and'](_0x5d129b[_0x6598('0x65')]+'.'+_0x51d25e+'\x20=\x20?',_0x5d129b[_0x6598('0x58')][0x0]);}}break;case'=':_0x164730[_0x6598('0x5f')](_0x5d129b[_0x6598('0x65')]+'.'+_0x51d25e+_0x6598('0x67'),_0x5d129b['value']);break;case _0x6598('0x68'):if(_0x51d25e===_0x6598('0x69')){_0x164730['and'](_0x6598('0x6a')+_0x6598('0x6b'),'%'+_0x5d129b[_0x6598('0x58')]+'%');_0x164730['or'](_0x6598('0x6c')+_0x6598('0x6b'),'%'+_0x5d129b['value']+'%');_0x164730['or']('c.email'+_0x6598('0x6b'),'%'+_0x5d129b[_0x6598('0x58')]+'%');}else{_0x164730[_0x6598('0x5f')](_0x5d129b[_0x6598('0x65')]+'.'+_0x51d25e+_0x6598('0x6b'),'%'+_0x5d129b[_0x6598('0x58')]+'%');}break;case'>':_0x164730['and'](_0x5d129b['tableAlias']+'.'+_0x51d25e+_0x6598('0x6d'),_0x5d129b[_0x6598('0x58')]);break;case'<':_0x164730[_0x6598('0x5f')](_0x5d129b[_0x6598('0x65')]+'.'+_0x51d25e+'\x20<\x20?',_0x5d129b['value']);break;}});}else{switch(_0x5d129b['condition'][_0x6598('0x58')]){case'IS':if(_0x51d25e!=='TagId'&&_0x51d25e!=='unreadMessages'){if(_[_0x6598('0x60')](_0x5d129b[_0x6598('0x58')])&&_0x5d129b['value'][_0x6598('0x64')]>0x1){_0x164730['and'](_0x5d129b[_0x6598('0x65')]+'.'+_0x51d25e+_0x6598('0x66'),_0x5d129b[_0x6598('0x58')]);}else{_0x164730[_0x6598('0x5f')](_0x5d129b['tableAlias']+'.'+_0x51d25e+'\x20=\x20?',_0x5d129b[_0x6598('0x58')][0x0]);}}break;case'=':_0x164730[_0x6598('0x5f')](_0x5d129b[_0x6598('0x65')]+'.'+_0x51d25e+_0x6598('0x67'),_0x5d129b[_0x6598('0x58')]);break;case _0x6598('0x68'):if(_0x51d25e===_0x6598('0x69')){_0x164730[_0x6598('0x5f')]('c.firstName'+_0x6598('0x6b'),'%'+_0x5d129b[_0x6598('0x58')]+'%');_0x164730['or'](_0x6598('0x6c')+_0x6598('0x6b'),'%'+_0x5d129b['value']+'%');_0x164730['or']('c.email'+'\x20LIKE\x20?','%'+_0x5d129b[_0x6598('0x58')]+'%');}else{_0x164730[_0x6598('0x5f')](_0x5d129b[_0x6598('0x65')]+'.'+_0x51d25e+_0x6598('0x6b'),'%'+_0x5d129b[_0x6598('0x58')]+'%');}break;case'>':_0x164730['and'](_0x5d129b[_0x6598('0x65')]+'.'+_0x51d25e+_0x6598('0x6d'),_0x5d129b[_0x6598('0x58')]);break;case'<':_0x164730['and'](_0x5d129b['tableAlias']+'.'+_0x51d25e+'\x20<\x20?',_0x5d129b[_0x6598('0x58')]);break;}}}});}else{var _0x15b22e=_(Object[_0x6598('0x37')](_0x4afa0d['query']))['map'](function(_0x1a34dc){return _0x194725[_0x6598('0x6e')](_0x1a34dc)?_0x1a34dc:undefined;})[_0x6598('0x6f')](function(_0x354485){return!_[_0x6598('0x70')](_0x354485);})['value']();if(!_['isEmpty'](_0x15b22e)){_0x15b22e[_0x6598('0x30')](function(_0x2af7f0){if(_0x2af7f0===_0x6598('0x71')){_0x1772fa[_0x6598('0x3f')](_0x6598('0x72'),[][_0x6598('0x73')](_0x4afa0d[_0x6598('0x38')][_0x2af7f0]));}else if(_0x2af7f0===_0x6598('0x57')){var _0x363a3c=JSON[_0x6598('0x56')](_0x4afa0d['query'][_0x2af7f0])['$gte'];var _0x583b99=JSON[_0x6598('0x56')](_0x4afa0d[_0x6598('0x38')][_0x2af7f0])[_0x6598('0x74')];_0x1772fa['where']('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x363a3c,_0x583b99);}else{if(_0x4afa0d[_0x6598('0x38')][_0x2af7f0]==='null'){_0x1772fa[_0x6598('0x3f')]('i.'+_0x2af7f0+'\x20IS\x20NULL');}else{_0x1772fa[_0x6598('0x3f')]('i.'+_0x2af7f0+'\x20=\x20?',_0x4afa0d[_0x6598('0x38')][_0x2af7f0]);}}});}if(_0x4afa0d[_0x6598('0x38')][_0x6598('0x6f')]){var _0x2c844b=_0x4afa0d['query']['filter'][_0x6598('0x75')]('\x5c','\x5c\x5c')['replace']('\x27\x27',_0x6598('0x76'));if(qs[_0x6598('0x77')](_0x2c844b)){_0x164730['or']('i.id\x20LIKE\x20?',_0x2c844b+'%');}else{var _0x3849af=[];_0x2c844b[_0x6598('0x2f')]('\x20')[_0x6598('0x30')](function(_0x3c1cff){_0x3849af[_0x6598('0x31')]('+'+_0x3c1cff['toString']());});var _0x39f4c3=_0x3849af[_0x6598('0x78')]('\x20');_0x164730['or'](_0x6598('0x79'),_0x39f4c3)['or'](_0x6598('0x7a'),_0x2c844b+'%')['or'](_0x6598('0x7b'),_0x2c844b+'%');}}}_0x1772fa[_0x6598('0x3f')](_0x164730);if(_0x264e21[_0x6598('0x3d')]){_0x264e21[_0x6598('0x3d')][_0x6598('0x30')](function(_0x26124d){_0x1772fa['order']('i.'+_0x26124d[0x0],_0x26124d[0x1]===_0x6598('0x7c')?![]:!![]);});}_0x1772fa['group'](_0x6598('0x7d'));var _0x5bbb7c={'type':db['Sequelize']['QueryTypes'][_0x6598('0x7e')],'raw':!![]};var _0x25cd3a=_0x1772fa[_0x6598('0x7f')]()[_0x6598('0x42')](_0x6598('0x80'))[_0x6598('0x42')]('COUNT(me.id)','unreadMessages');if(!_0x4afa0d[_0x6598('0x38')][_0x6598('0x55')]){if(_0x4afa0d['query'][_0x6598('0x81')]){if(_0x4afa0d[_0x6598('0x38')][_0x6598('0x81')]==0x1){_0x25cd3a[_0x6598('0x82')](_0x6598('0x83'));_0x1772fa['having'](_0x6598('0x83'));}else{_0x25cd3a[_0x6598('0x82')](_0x6598('0x84'));_0x1772fa[_0x6598('0x82')](_0x6598('0x84'));}}if(_0x4afa0d[_0x6598('0x38')][_0x6598('0x85')]){var _0x35b7a4=_[_0x6598('0x60')](_0x4afa0d[_0x6598('0x38')][_0x6598('0x85')])?_0x4afa0d[_0x6598('0x38')][_0x6598('0x85')]:new Array(_0x4afa0d[_0x6598('0x38')][_0x6598('0x85')]);var _0xb2cbaf=squel['expr']();_0x35b7a4[_0x6598('0x30')](function(_0x2daef1){_0xb2cbaf['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x2daef1+',%');});_0x1772fa[_0x6598('0x82')](_0xb2cbaf);_0x25cd3a[_0x6598('0x4d')](_0x6598('0x86'),'it','it.OpenchannelInteractionId\x20=\x20i.id');_0x25cd3a['left_join'](_0x6598('0x44'),'t',_0x6598('0x87'));_0x25cd3a['where']('t.id\x20IN\x20?',_0x35b7a4);}}else{var _0x1dc08c=JSON['parse'](_0x4afa0d[_0x6598('0x38')][_0x6598('0x55')]);_['keys'](_0x1dc08c)[_0x6598('0x30')](function(_0x580f5e){var _0x236267=_0x1dc08c[_0x580f5e];if(_0x580f5e===_0x6598('0x62')){var _0x5d43e4=_0x236267[_0x6598('0x58')];var _0x39d704=squel[_0x6598('0x54')]();_0x5d43e4[_0x6598('0x30')](function(_0x25618d){_0x39d704['or'](_0x6598('0x88'),'%,'+_0x25618d+',%');});_0x1772fa[_0x6598('0x82')](_0x39d704);_0x25cd3a[_0x6598('0x4d')](_0x6598('0x89'),'it',_0x6598('0x8a'));_0x25cd3a[_0x6598('0x4d')](_0x6598('0x44'),'t','t.id\x20=\x20it.TagId');_0x25cd3a[_0x6598('0x3f')](_0x6598('0x8b'),_0x5d43e4);}else if(_0x580f5e==='unreadMessages'){if(_0x236267[_0x6598('0x58')][_0x6598('0x64')]===0x1){if(_0x236267[_0x6598('0x58')][0x0]===0x1){_0x25cd3a['having'](_0x6598('0x83'));_0x1772fa['having'](_0x6598('0x83'));}else{_0x25cd3a[_0x6598('0x82')](_0x6598('0x84'));_0x1772fa[_0x6598('0x82')](_0x6598('0x84'));}}}});}db[_0x6598('0x8c')][_0x6598('0x38')](_0x25cd3a['toString'](),_0x5bbb7c)[_0x6598('0x27')](function(_0x2f2095){_0x1d943f[_0x6598('0x8d')]=_0x2f2095[_0x6598('0x64')];if(_0x1d943f[_0x6598('0x8d')]===0x0)return[];return db[_0x6598('0x8c')]['query'](_0x1334f1['toString'](),_0x5bbb7c)[_0x6598('0x27')](function(_0x35d696){_0x55d0d8=_[_0x6598('0x8e')](_0x35d696,'id');_0x5bbb7c=_['merge'](_0x5bbb7c,{'model':db[_0x6598('0x34')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x1772fa[_0x6598('0x42')](_0x6598('0x8f'),_0x6598('0x63'));_0x1772fa[_0x6598('0x42')]('a.key',_0x6598('0x90'));_0x1772fa[_0x6598('0x42')](_0x6598('0x91'));_0x1772fa[_0x6598('0x42')](_0x6598('0x6a'),_0x6598('0x92'));_0x1772fa[_0x6598('0x42')]('c.lastName',_0x6598('0x93'));_0x1772fa['field'](_0x6598('0x94'),_0x6598('0x95'));_0x1772fa[_0x6598('0x42')]('c.phone',_0x6598('0x96'));_0x1772fa['field'](_0x6598('0x97'),_0x6598('0x98'));_0x1772fa['field'](_0x6598('0x99'),_0x6598('0x9a'));_0x1772fa[_0x6598('0x42')](_0x6598('0x9b'),_0x6598('0x9c'));_0x1772fa['left_join'](_0x6598('0x86'),'it',_0x6598('0x9d'));_0x1772fa[_0x6598('0x4d')]('tools_tags','t',_0x6598('0x87'));_0x1772fa[_0x6598('0x21')](_0x264e21[_0x6598('0x21')]);_0x1772fa[_0x6598('0x20')](_0x264e21[_0x6598('0x20')]);return db[_0x6598('0x8c')][_0x6598('0x38')](_0x1772fa[_0x6598('0x9e')](),_0x5bbb7c);})[_0x6598('0x27')](function(_0x5787e8){_0x8ebdc9[_0x6598('0x3f')](_0x6598('0x9f'),_[_0x6598('0x2d')](_0x5787e8,'id'));return db[_0x6598('0x8c')][_0x6598('0x38')](_0x8ebdc9[_0x6598('0x9e')](),_0x5bbb7c)[_0x6598('0x27')](function(_0xea22d9){var _0x234a23=_['groupBy'](_0xea22d9,_0x6598('0xa0'));var _0xe697e3=[];_0x5787e8[_0x6598('0x30')](function(_0x4b9444){_0xe697e3[_0x6598('0x31')](updateOpenchannelInteraction(_0x4b9444,_0x55d0d8,_0x234a23));});return BPromise['all'](_0xe697e3);});});})[_0x6598('0x27')](function(_0x1b3903){_0x1d943f[_0x6598('0xa1')]=_0x1b3903;return _0x1d943f;})[_0x6598('0x27')](respondWithFilteredResult(_0x3b19ef,_0x264e21))[_0x6598('0x32')](handleError(_0x3b19ef,null));};exports['show']=function(_0x5bb1ae,_0x4244bf){var _0x1236e9={'raw':![],'where':{'id':_0x5bb1ae['params']['id']}},_0x319ac6={};_0x319ac6[_0x6598('0x36')]=_[_0x6598('0x37')](db['OpenchannelInteraction'][_0x6598('0x35')]);_0x319ac6[_0x6598('0x38')]=_['keys'](_0x5bb1ae[_0x6598('0x38')]);_0x319ac6[_0x6598('0x39')]=_[_0x6598('0x3a')](_0x319ac6[_0x6598('0x36')],_0x319ac6[_0x6598('0x38')]);_0x1236e9[_0x6598('0x3c')]=_[_0x6598('0x3a')](_0x319ac6[_0x6598('0x36')],qs['fields'](_0x5bb1ae['query']['fields']));_0x1236e9[_0x6598('0x3c')]=_0x1236e9['attributes']['length']?_0x1236e9[_0x6598('0x3c')]:_0x319ac6[_0x6598('0x36')];if(_0x5bb1ae[_0x6598('0x38')][_0x6598('0xa2')]){_0x1236e9[_0x6598('0xa3')]=[{'all':!![]}];}_0x1236e9=_[_0x6598('0xa4')]({},_0x1236e9,_0x5bb1ae['options']);return db['OpenchannelInteraction'][_0x6598('0xa5')](_0x1236e9)[_0x6598('0x27')](handleEntityNotFound(_0x4244bf,null))['then'](respondWithResult(_0x4244bf,null))['catch'](handleError(_0x4244bf,null));};exports[_0x6598('0xa6')]=function(_0x38d458,_0x1424cd){return db[_0x6598('0x34')][_0x6598('0xa6')](_0x38d458['body'],{})['then'](respondWithResult(_0x1424cd,0xc9))[_0x6598('0x32')](handleError(_0x1424cd,null));};exports['update']=function(_0x59d26e,_0x9024e5){if(_0x59d26e[_0x6598('0xa7')]['id']){delete _0x59d26e[_0x6598('0xa7')]['id'];}return db[_0x6598('0x34')][_0x6598('0xa5')]({'where':{'id':_0x59d26e[_0x6598('0xa8')]['id']}})[_0x6598('0x27')](handleEntityNotFound(_0x9024e5,null))[_0x6598('0x27')](saveUpdates(_0x59d26e['body'],null))[_0x6598('0x27')](respondWithResult(_0x9024e5,null))[_0x6598('0x32')](handleError(_0x9024e5,null));};exports['destroy']=function(_0x2bdc5a,_0x183f9b){return db[_0x6598('0x34')]['find']({'where':{'id':_0x2bdc5a['params']['id']}})[_0x6598('0x27')](handleEntityNotFound(_0x183f9b,null))[_0x6598('0x27')](removeEntity(_0x183f9b,null))[_0x6598('0x32')](handleError(_0x183f9b,null));};exports[_0x6598('0xa9')]=function(_0x2b661a,_0x2da963){return db['OpenchannelInteraction'][_0x6598('0xa9')]()['then'](respondWithResult(_0x2da963,null))[_0x6598('0x32')](handleError(_0x2da963,null));};exports[_0x6598('0xaa')]=function(_0x3c1ec6,_0x1ef7ed,_0xf7e1fd){return db[_0x6598('0xab')][_0x6598('0xa5')]({'where':{'id':_0x3c1ec6['params']['id']}})[_0x6598('0x27')](handleEntityNotFound(_0x1ef7ed,null))[_0x6598('0x27')](function(_0x5494ed){if(_0x5494ed){return _0x5494ed[_0x6598('0xaa')](_0x3c1ec6[_0x6598('0xa7')]['ids'],_[_0x6598('0xac')](_0x3c1ec6[_0x6598('0xa7')],[_0x6598('0xad'),'id'])||{});}})['then'](respondWithResult(_0x1ef7ed,null))['catch'](handleError(_0x1ef7ed,null));};exports['getMessages']=function(_0x4bb5f4,_0x4d202a,_0x831121){var _0x515f6d={'raw':![],'where':{}};var _0x15f936={};var _0x3d0b7a={'count':0x0,'rows':[]};return db[_0x6598('0x34')][_0x6598('0xae')]({'where':{'id':_0x4bb5f4[_0x6598('0xa8')]['id']}})[_0x6598('0x27')](handleEntityNotFound(_0x4d202a,null))['then'](function(_0x249a8a){if(_0x249a8a){_0x15f936[_0x6598('0x36')]=_[_0x6598('0x37')](db[_0x6598('0xab')][_0x6598('0x35')]);_0x15f936['query']=_[_0x6598('0x37')](_0x4bb5f4[_0x6598('0x38')]);_0x15f936[_0x6598('0x39')]=_['intersection'](_0x15f936[_0x6598('0x36')],_0x15f936[_0x6598('0x38')]);_0x515f6d[_0x6598('0x3c')]=_[_0x6598('0x3a')](_0x15f936[_0x6598('0x36')],qs[_0x6598('0x3b')](_0x4bb5f4['query'][_0x6598('0x3b')]));_0x515f6d['attributes']=_0x515f6d[_0x6598('0x3c')][_0x6598('0x64')]?_0x515f6d['attributes']:_0x15f936[_0x6598('0x36')];if(!_0x4bb5f4['query'][_0x6598('0x6e')](_0x6598('0xaf'))){_0x515f6d[_0x6598('0x21')]=qs[_0x6598('0x21')](_0x4bb5f4[_0x6598('0x38')]['limit']);_0x515f6d[_0x6598('0x20')]=qs['offset'](_0x4bb5f4[_0x6598('0x38')][_0x6598('0x20')]);}_0x515f6d[_0x6598('0x3d')]=qs['sort'](_0x4bb5f4[_0x6598('0x38')][_0x6598('0x3e')]);_0x515f6d['where']=qs[_0x6598('0x39')](_[_0x6598('0x40')](_0x4bb5f4[_0x6598('0x38')],_0x15f936[_0x6598('0x39')]));_0x515f6d[_0x6598('0x3f')][_0x6598('0xa0')]=_0x249a8a['id'];if(_0x4bb5f4[_0x6598('0x38')][_0x6598('0x6f')]){_0x515f6d[_0x6598('0x3f')]=_[_0x6598('0xa4')](_0x515f6d[_0x6598('0x3f')],{'$or':_['map'](_0x515f6d['attributes'],function(_0x4e5504){var _0x5b8726={};_0x5b8726[_0x4e5504]={'$like':'%'+_0x4bb5f4['query']['filter']+'%'};return _0x5b8726;})});}if(_0x4bb5f4[_0x6598('0x38')][_0x6598('0xb0')]){var _0x2ba04b=_0x4bb5f4['query']['$gte'][_0x6598('0x2f')](',');var _0x368355={};_0x368355[_0x2ba04b[0x0]]={'$gte':moment(_0x2ba04b[0x1])[_0x6598('0x5d')](_0x6598('0xb1'))};_0x515f6d['where']=_[_0x6598('0xa4')](_0x515f6d[_0x6598('0x3f')],_0x368355);}_0x515f6d=_['merge']({},_0x515f6d,_0x4bb5f4['options']);return db[_0x6598('0xab')][_0x6598('0x8d')]({'where':_0x515f6d[_0x6598('0x3f')]})[_0x6598('0x27')](function(_0x4f233d){_0x3d0b7a[_0x6598('0x8d')]=_0x4f233d;if(_0x4bb5f4['query'][_0x6598('0xa2')]){_0x515f6d[_0x6598('0xa3')]=[{'all':!![]}];}return db[_0x6598('0xab')]['findAll'](_0x515f6d);})[_0x6598('0x27')](function(_0xc91ccf){_0x3d0b7a[_0x6598('0xa1')]=_0xc91ccf;return _0x3d0b7a;});}})[_0x6598('0x27')](respondWithFilteredResult(_0x4d202a,_0x515f6d))[_0x6598('0x32')](handleError(_0x4d202a,null));};exports[_0x6598('0xb2')]=function(_0x5e48a5,_0x491536,_0x2a8c42){return db[_0x6598('0x34')][_0x6598('0xa5')]({'where':{'id':_0x5e48a5['params']['id']}})[_0x6598('0x27')](handleEntityNotFound(_0x491536,null))[_0x6598('0x27')](function(_0x1f6659){if(_0x1f6659){return _0x1f6659[_0x6598('0xb3')](_0x5e48a5[_0x6598('0xa7')]['ids'],_[_0x6598('0xac')](_0x5e48a5[_0x6598('0xa7')],['ids','id'])||{})[_0x6598('0xb4')](function(){return db[_0x6598('0xb5')][_0x6598('0xb6')]({'attributes':['id',_0x6598('0x2a'),_0x6598('0x43')],'where':{'id':_0x5e48a5[_0x6598('0xa7')]['ids']}});})[_0x6598('0x27')](function(_0xbaec62){socket[_0x6598('0xb7')](_0x6598('0xb8'),{'id':Number(_0x5e48a5[_0x6598('0xa8')]['id']),'tags':_0xbaec62||[]});return{'id':Number(_0x5e48a5['params']['id']),'tags':_0xbaec62||[]};});}})[_0x6598('0x27')](respondWithResult(_0x491536,null))['catch'](handleError(_0x491536,null));};exports[_0x6598('0xb9')]=function(_0x45c80a,_0x207961,_0x5e5900){return db['OpenchannelInteraction'][_0x6598('0xa5')]({'where':{'id':_0x45c80a[_0x6598('0xa8')]['id']}})[_0x6598('0x27')](handleEntityNotFound(_0x207961,null))[_0x6598('0x27')](function(_0x3c1e95){if(_0x3c1e95){return _0x3c1e95['removeTags'](_0x45c80a['query'][_0x6598('0xad')]);}})['then'](respondWithStatusCode(_0x207961,null))['catch'](handleError(_0x207961,null));};exports[_0x6598('0xba')]=function(_0x44e67b,_0x58f708){var _0x18518b=moment()[_0x6598('0xbb')]()[_0x6598('0x9e')]();var _0x2ff475=path[_0x6598('0x78')](config['root'],'server',_0x6598('0xbc'),_0x6598('0xbd'));var _0x27f1d4=path[_0x6598('0x78')](config[_0x6598('0xbe')],'server',_0x6598('0xbc'),_0x6598('0xbf'));var _0x52fdd8=path[_0x6598('0x78')](_0x2ff475,_0x18518b);var _0xe43572=util['format'](_0x6598('0xc0'),_0x44e67b[_0x6598('0xa8')]['id'],_0x18518b);var _0x481fee=path[_0x6598('0x78')](_0x2ff475,_0xe43572);var _0x5e1408=![];return db[_0x6598('0x34')][_0x6598('0xa5')]({'where':{'id':_0x44e67b['params']['id']},'include':[{'model':db['OpenchannelMessage'],'as':_0x6598('0xc1'),'attributes':['id',_0x6598('0xa7'),_0x6598('0x57'),_0x6598('0xc2'),_0x6598('0xc3')],'include':[{'model':db[_0x6598('0xc4')],'as':'User','attributes':['id',_0x6598('0xc5')],'raw':!![]},{'model':db[_0x6598('0xc6')],'as':_0x6598('0xc7'),'attributes':['id',_0x6598('0xc8'),_0x6598('0xc9')],'raw':!![]},{'model':db['Attachment'],'as':_0x6598('0xca'),'raw':!![]}]},{'model':db['OpenchannelAccount'],'as':_0x6598('0xcb'),'attributes':['id',_0x6598('0x2a')]},{'model':db[_0x6598('0xc4')],'as':_0x6598('0xcc'),'attributes':['id',_0x6598('0xc5')]}]})['then'](handleEntityNotFound(_0x58f708,null))['then'](function(_0xad77f0){if(_0xad77f0){var _0x5c2957=_0xad77f0[_0x6598('0xcd')]({'plain':!![]});_0x5e1408=!![];var _0xea7ac3={'format':'A4','border':_0x6598('0xce'),'header':{'height':_0x6598('0xcf'),'contents':{'first':_0x6598('0xd0')}},'footer':{'height':_0x6598('0xd1'),'contents':{'default':util['format'](_0x6598('0xd2'),util[_0x6598('0x5d')](_0x6598('0xd3'),_0x6598('0xd4'),_0x5c2957['id']),moment()[_0x6598('0x5d')](_0x6598('0xd5'))[_0x6598('0x9e')]())}}};fs[_0x6598('0xd6')](_0x52fdd8);var _0x214e62={'channel':'Openchannel','account':_0x5c2957[_0x6598('0xcb')]['name'],'agent':_0x5c2957['Owner']?_0x5c2957[_0x6598('0xcc')][_0x6598('0xc5')]:_0x6598('0xd7'),'createdAt':moment(_0x5c2957['createdAt'])[_0x6598('0x5d')](_0x6598('0xb1'))[_0x6598('0x9e')](),'closedAt':_0x5c2957[_0x6598('0xd8')]?moment(_0x5c2957[_0x6598('0xd9')])[_0x6598('0x5d')](_0x6598('0xb1'))[_0x6598('0x9e')]():'','disposition':_0x5c2957[_0x6598('0xda')],'visibility':_0x5c2957[_0x6598('0xdb')]?_0x6598('0xdc'):_0x6598('0xdd'),'messages':_(_0x5c2957['Messages'])['filter']({'secret':![]})['map'](function(_0x428bed){if(_0x428bed['Attachment']){var _0x3dd890=path['join'](_0x27f1d4,_0x428bed[_0x6598('0xca')]['basename']);if(fs[_0x6598('0xde')](_0x3dd890)){fs['createReadStream'](_0x3dd890)[_0x6598('0xdf')](fs[_0x6598('0xe0')](path[_0x6598('0x78')](_0x52fdd8,_0x428bed['Attachment']['basename'])));}}return{'date':moment(_0x428bed['createdAt'])['format']('YYYY-MM-DD\x20HH:mm:ss')[_0x6598('0x9e')](),'sender':_0x428bed[_0x6598('0xc2')]===_0x6598('0xe1')?_0x428bed['User']?_0x428bed[_0x6598('0xc4')][_0x6598('0xc5')]:_0x6598('0xe2'):_0x428bed[_0x6598('0xc7')]['firstName']+(_0x428bed[_0x6598('0xc7')]['lastName']?'\x20'+_0x428bed['Contact'][_0x6598('0xc9')]:''),'body':_0x428bed['Attachment']?_0x428bed[_0x6598('0xca')][_0x6598('0xe3')]:_0x428bed['body'],'direction':_0x428bed[_0x6598('0xc2')]==='out'?'A':'C','secret':_0x428bed['secret'],'attachment':_0x428bed[_0x6598('0xca')]};})['value']()};return ejs[_0x6598('0xe4')](path[_0x6598('0x78')](config['root'],_0x6598('0xe5'),_0x6598('0xe6'),_0x6598('0xe7')),{'interaction':_0x214e62})[_0x6598('0x27')](function(_0x3766db){return new BPromise(function(_0x3afdff,_0x16897a){pdf[_0x6598('0xa6')](_0x3766db,_0xea7ac3)[_0x6598('0xe8')](path['join'](_0x52fdd8,'transcript-'+_0x5c2957['id']+'-'+_0x18518b+'.pdf'),function(_0x2da366,_0x53e571){if(_0x2da366)return _0x16897a(_0x2da366);_0x3afdff(_0x53e571);});});});}})['then'](function(){if(_0x5e1408){return new BPromise(function(_0x43693b,_0x2fb6ab){zipdir(_0x52fdd8,{'saveTo':_0x481fee},function(_0x26511b,_0x30db2c){if(_0x26511b)return _0x2fb6ab(_0x26511b);return _0x43693b(_0x30db2c);});})['then'](function(){return new BPromise(function(_0x5c115a,_0x2d6dfd){rimraf(_0x52fdd8,function(_0x5d925c){if(_0x5d925c)_0x2d6dfd(_0x5d925c);return _0x5c115a();});});})['then'](function(){return _0x58f708[_0x6598('0xba')](_0x481fee,_0xe43572,function(_0x5a4337){if(_0x5a4337){console[_0x6598('0xe9')](_0x6598('0xea'),_0x5a4337);}else{fs['unlinkSync'](_0x481fee);}});});}else{return _0x58f708[_0x6598('0x1c')](0xc8);}})['catch'](handleError(_0x58f708,null));};
\ No newline at end of file
index ec33fdb..273e342 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9356=['emit','catch','hook','exports','OpenchannelMessage','save','remove','getUsers','then','setDataValue','map','findAll','length'];(function(_0x184a9c,_0x1ccfb3){var _0x121a2e=function(_0x2a8272){while(--_0x2a8272){_0x184a9c['push'](_0x184a9c['shift']());}};_0x121a2e(++_0x1ccfb3);}(_0x9356,0x13c));var _0x6935=function(_0x2763f2,_0x416af8){_0x2763f2=_0x2763f2-0x0;var _0x3ef471=_0x9356[_0x2763f2];return _0x3ef471;};'use strict';var EventEmitter=require('events');var OpenchannelInteraction=require('../../mysqldb')['db']['OpenchannelInteraction'];var OpenchannelMessage=require('../../mysqldb')['db'][_0x6935('0x0')];var OpenchannelInteractionEvents=new EventEmitter();OpenchannelInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x6935('0x1'),'afterUpdate':'update','afterDestroy':_0x6935('0x2')};function emitEvent(_0x46f505){return function(_0x3b08a8,_0x2384cf,_0x431e62){_0x3b08a8[_0x6935('0x3')]({'attributes':['id'],'raw':!![]})[_0x6935('0x4')](function(_0x4b238a){_0x3b08a8[_0x6935('0x5')]('Users',_0x4b238a[_0x6935('0x6')](function(_0x3b493c){return{'id':_0x3b493c['id']};}));return OpenchannelMessage[_0x6935('0x7')]({'where':{'OpenchannelInteractionId':_0x3b08a8['id'],'direction':'in','read':![]},'raw':!![]});})[_0x6935('0x4')](function(_0x1dfb48){_0x3b08a8['setDataValue']('unreadMessages',_0x1dfb48[_0x6935('0x8')]);OpenchannelInteractionEvents[_0x6935('0x9')](_0x46f505+':'+_0x3b08a8['id'],_0x3b08a8);OpenchannelInteractionEvents[_0x6935('0x9')](_0x46f505,_0x3b08a8);_0x431e62(null);})[_0x6935('0xa')](_0x431e62(null));};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];OpenchannelInteraction[_0x6935('0xb')](e,emitEvent(event));}}module[_0x6935('0xc')]=OpenchannelInteractionEvents;
\ No newline at end of file
+var _0x95e3=['Users','map','unreadMessages','length','emit','hasOwnProperty','hook','events','OpenchannelInteraction','../../mysqldb','OpenchannelMessage','save','getUsers','then','setDataValue'];(function(_0x5a60a7,_0x4750b1){var _0x381691=function(_0x35b4f7){while(--_0x35b4f7){_0x5a60a7['push'](_0x5a60a7['shift']());}};_0x381691(++_0x4750b1);}(_0x95e3,0xf7));var _0x395e=function(_0x4a747d,_0x3b747f){_0x4a747d=_0x4a747d-0x0;var _0x3a5b5c=_0x95e3[_0x4a747d];return _0x3a5b5c;};'use strict';var EventEmitter=require(_0x395e('0x0'));var OpenchannelInteraction=require('../../mysqldb')['db'][_0x395e('0x1')];var OpenchannelMessage=require(_0x395e('0x2'))['db'][_0x395e('0x3')];var OpenchannelInteractionEvents=new EventEmitter();OpenchannelInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x395e('0x4'),'afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x3055ea){return function(_0x9e5460,_0x39dc63,_0x5ab8f5){_0x9e5460[_0x395e('0x5')]({'attributes':['id'],'raw':!![]})[_0x395e('0x6')](function(_0x37fee7){_0x9e5460[_0x395e('0x7')](_0x395e('0x8'),_0x37fee7[_0x395e('0x9')](function(_0x3dee06){return{'id':_0x3dee06['id']};}));return OpenchannelMessage['findAll']({'where':{'OpenchannelInteractionId':_0x9e5460['id'],'direction':'in','read':![]},'raw':!![]});})[_0x395e('0x6')](function(_0x5f3c52){_0x9e5460[_0x395e('0x7')](_0x395e('0xa'),_0x5f3c52[_0x395e('0xb')]);OpenchannelInteractionEvents[_0x395e('0xc')](_0x3055ea+':'+_0x9e5460['id'],_0x9e5460);OpenchannelInteractionEvents[_0x395e('0xc')](_0x3055ea,_0x9e5460);_0x5ab8f5(null);})['catch'](_0x5ab8f5(null));};}for(var e in events){if(events[_0x395e('0xd')](e)){var event=events[e];OpenchannelInteraction[_0x395e('0xe')](e,emitEvent(event));}}module['exports']=OpenchannelInteractionEvents;
\ No newline at end of file
index 7d10cc8..e1ec947 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeec6=['lodash','util','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./openchannelInteraction.attributes','OpenchannelInteraction','openchannel_interactions','changed','closed','closedAt'];(function(_0x28c714,_0x5882a7){var _0x42851b=function(_0x36a65e){while(--_0x36a65e){_0x28c714['push'](_0x28c714['shift']());}};_0x42851b(++_0x5882a7);}(_0xeec6,0x1c2));var _0x6eec=function(_0x26d6d9,_0x431cb8){_0x26d6d9=_0x26d6d9-0x0;var _0x1b4875=_0xeec6[_0x26d6d9];return _0x1b4875;};'use strict';var _=require(_0x6eec('0x0'));var util=require(_0x6eec('0x1'));var logger=require(_0x6eec('0x2'))(_0x6eec('0x3'));var moment=require('moment');var BPromise=require(_0x6eec('0x4'));var rp=require(_0x6eec('0x5'));var fs=require('fs');var path=require(_0x6eec('0x6'));var rimraf=require(_0x6eec('0x7'));var config=require(_0x6eec('0x8'));var attributes=require(_0x6eec('0x9'));module['exports']=function(_0x185f31,_0x3c6eda){return _0x185f31['define'](_0x6eec('0xa'),attributes,{'tableName':_0x6eec('0xb'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x3443c2,_0x834c2,_0x56e849){if(_0x3443c2[_0x6eec('0xc')](_0x6eec('0xd'))){_0x3443c2[_0x6eec('0xe')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');}_0x56e849(null,_0x3443c2);}}});};
\ No newline at end of file
+var _0xd4b6=['moment','request-promise','./openchannelInteraction.attributes','exports','define','OpenchannelInteraction','openchannel_interactions','changed','closed','closedAt','YYYY-MM-DD\x20HH:mm:ss','lodash','util','api'];(function(_0x245616,_0x312ea7){var _0x165ee7=function(_0x4aea21){while(--_0x4aea21){_0x245616['push'](_0x245616['shift']());}};_0x165ee7(++_0x312ea7);}(_0xd4b6,0x13f));var _0x6d4b=function(_0x26fb6f,_0x30b645){_0x26fb6f=_0x26fb6f-0x0;var _0x4da58b=_0xd4b6[_0x26fb6f];return _0x4da58b;};'use strict';var _=require(_0x6d4b('0x0'));var util=require(_0x6d4b('0x1'));var logger=require('../../config/logger')(_0x6d4b('0x2'));var moment=require(_0x6d4b('0x3'));var BPromise=require('bluebird');var rp=require(_0x6d4b('0x4'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x6d4b('0x5'));module[_0x6d4b('0x6')]=function(_0x442164,_0x5daf08){return _0x442164[_0x6d4b('0x7')](_0x6d4b('0x8'),attributes,{'tableName':_0x6d4b('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x262eed,_0x4dcf3d,_0x4462e4){if(_0x262eed[_0x6d4b('0xa')](_0x6d4b('0xb'))){_0x262eed[_0x6d4b('0xc')]=moment()['format'](_0x6d4b('0xd'));}_0x4462e4(null,_0x262eed);}}});};
\ No newline at end of file
index e354415..b30bc66 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x25fa=['raw','where','attributes','limit','AddTagsToOpenchannelInteraction','find','addTags','body','ids','omit','spread','AddTags','catch','lodash','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/environment','client','http','redis','defaults','localhost','socket.io-emitter','./openchannelInteraction.socket','request','then','info','OpenchannelInteraction,\x20%s,\x20%s','debug','OpenchannelInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','UpdateOpenchannelInteraction','OpenchannelInteraction','update','options'];(function(_0x160dbe,_0x46adbc){var _0x5f319e=function(_0x45eda2){while(--_0x45eda2){_0x160dbe['push'](_0x160dbe['shift']());}};_0x5f319e(++_0x46adbc);}(_0x25fa,0x109));var _0xa25f=function(_0xb4f6e2,_0x507086){_0xb4f6e2=_0xb4f6e2-0x0;var _0x46fcc4=_0x25fa[_0xb4f6e2];return _0x46fcc4;};'use strict';var _=require(_0xa25f('0x0'));var util=require('util');var moment=require(_0xa25f('0x1'));var BPromise=require(_0xa25f('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xa25f('0x3'));var db=require(_0xa25f('0x4'))['db'];var utils=require(_0xa25f('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0xa25f('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xa25f('0x7')][_0xa25f('0x8')]({'port':0x232a});config[_0xa25f('0x9')]=_[_0xa25f('0xa')](config[_0xa25f('0x9')],{'host':_0xa25f('0xb'),'port':0x18eb});var socket=require(_0xa25f('0xc'))(new Redis(config[_0xa25f('0x9')]));require(_0xa25f('0xd'))['register'](socket);function respondWithRpcPromise(_0x1bca18,_0x31bd1d,_0x507a36){return new BPromise(function(_0x22b930,_0x12c861){return client[_0xa25f('0xe')](_0x1bca18,_0x507a36)[_0xa25f('0xf')](function(_0x5168c1){logger[_0xa25f('0x10')](_0xa25f('0x11'),_0x31bd1d,'request\x20sent');logger[_0xa25f('0x12')](_0xa25f('0x13'),_0x31bd1d,'request\x20sent',JSON[_0xa25f('0x14')](_0x5168c1));if(_0x5168c1[_0xa25f('0x15')]){if(_0x5168c1[_0xa25f('0x15')][_0xa25f('0x16')]===0x1f4){logger[_0xa25f('0x15')](_0xa25f('0x11'),_0x31bd1d,_0x5168c1[_0xa25f('0x15')][_0xa25f('0x17')]);return _0x12c861(_0x5168c1[_0xa25f('0x15')][_0xa25f('0x17')]);}logger[_0xa25f('0x15')](_0xa25f('0x11'),_0x31bd1d,_0x5168c1['error'][_0xa25f('0x17')]);return _0x22b930(_0x5168c1[_0xa25f('0x15')][_0xa25f('0x17')]);}else{logger[_0xa25f('0x10')](_0xa25f('0x11'),_0x31bd1d,_0xa25f('0x18'));_0x22b930(_0x5168c1['result'][_0xa25f('0x17')]);}})['catch'](function(_0x32b868){logger['error']('OpenchannelInteraction,\x20%s,\x20%s',_0x31bd1d,_0x32b868);_0x12c861(_0x32b868);});});}exports[_0xa25f('0x19')]=function(_0x489c83){var _0x46bb31=this;return new Promise(function(_0x131c68,_0x2aaf3a){return db[_0xa25f('0x1a')][_0xa25f('0x1b')](_0x489c83['body'],{'raw':_0x489c83[_0xa25f('0x1c')]?_0x489c83[_0xa25f('0x1c')][_0xa25f('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x489c83[_0xa25f('0x1c')]?_0x489c83['options'][_0xa25f('0x1e')]||null:null,'attributes':_0x489c83[_0xa25f('0x1c')]?_0x489c83[_0xa25f('0x1c')][_0xa25f('0x1f')]||null:null,'limit':_0x489c83['options']?_0x489c83[_0xa25f('0x1c')][_0xa25f('0x20')]||null:null})[_0xa25f('0xf')](function(_0x317f0c){logger['info'](_0xa25f('0x19'),_0x489c83);logger[_0xa25f('0x12')]('UpdateOpenchannelInteraction',_0x489c83,JSON[_0xa25f('0x14')](_0x317f0c));_0x131c68(_0x317f0c);})['catch'](function(_0x2df893){logger['error'](_0xa25f('0x19'),_0x2df893[_0xa25f('0x17')],_0x489c83);_0x2aaf3a(_0x46bb31['error'](0x1f4,_0x2df893[_0xa25f('0x17')]));});});};exports[_0xa25f('0x21')]=function(_0x54d98c){return new Promise(function(_0x471e7c,_0x5d39c7){return db[_0xa25f('0x1a')][_0xa25f('0x22')]({'where':_0x54d98c[_0xa25f('0x1c')]?_0x54d98c[_0xa25f('0x1c')][_0xa25f('0x1e')]||null:null})['then'](function(_0x24e358){if(_0x24e358){return _0x24e358[_0xa25f('0x23')](_0x54d98c[_0xa25f('0x24')][_0xa25f('0x25')],_[_0xa25f('0x26')](_0x54d98c['body'],[_0xa25f('0x25'),'id'])||{});}})[_0xa25f('0x27')](function(_0x10cc65){logger[_0xa25f('0x10')](_0xa25f('0x28'),_0x54d98c);logger[_0xa25f('0x12')](_0xa25f('0x28'),_0x54d98c,JSON[_0xa25f('0x14')](_0x10cc65));_0x471e7c(_0x10cc65);})[_0xa25f('0x29')](function(_0x5621ab){logger['error']('AddTags',_0x5621ab[_0xa25f('0x17')],_0x54d98c);_0x5d39c7(_this[_0xa25f('0x15')](0x1f4,_0x5621ab[_0xa25f('0x17')]));});});};
\ No newline at end of file
+var _0x3e24=['then','find','where','addTags','ids','spread','AddTags','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./openchannelInteraction.socket','register','info','OpenchannelInteraction,\x20%s,\x20%s','request\x20sent','debug','OpenchannelInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','UpdateOpenchannelInteraction','OpenchannelInteraction','update','body','options','raw','attributes','limit'];(function(_0x6faf9a,_0x17d9e6){var _0x25f7cb=function(_0x4b146b){while(--_0x4b146b){_0x6faf9a['push'](_0x6faf9a['shift']());}};_0x25f7cb(++_0x17d9e6);}(_0x3e24,0x167));var _0x43e2=function(_0x1946e9,_0x4d9047){_0x1946e9=_0x1946e9-0x0;var _0x12237f=_0x3e24[_0x1946e9];return _0x12237f;};'use strict';var _=require(_0x43e2('0x0'));var util=require(_0x43e2('0x1'));var moment=require(_0x43e2('0x2'));var BPromise=require(_0x43e2('0x3'));var rs=require(_0x43e2('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x43e2('0x5'))['db'];var utils=require(_0x43e2('0x6'));var logger=require('../../config/logger')(_0x43e2('0x7'));var config=require(_0x43e2('0x8'));var jayson=require(_0x43e2('0x9'));var client=jayson[_0x43e2('0xa')][_0x43e2('0xb')]({'port':0x232a});config[_0x43e2('0xc')]=_[_0x43e2('0xd')](config['redis'],{'host':_0x43e2('0xe'),'port':0x18eb});var socket=require(_0x43e2('0xf'))(new Redis(config['redis']));require(_0x43e2('0x10'))[_0x43e2('0x11')](socket);function respondWithRpcPromise(_0x5375d8,_0x2ed387,_0x1ef968){return new BPromise(function(_0x52146c,_0x45848e){return client['request'](_0x5375d8,_0x1ef968)['then'](function(_0x5847f0){logger[_0x43e2('0x12')](_0x43e2('0x13'),_0x2ed387,_0x43e2('0x14'));logger[_0x43e2('0x15')](_0x43e2('0x16'),_0x2ed387,_0x43e2('0x14'),JSON[_0x43e2('0x17')](_0x5847f0));if(_0x5847f0[_0x43e2('0x18')]){if(_0x5847f0[_0x43e2('0x18')][_0x43e2('0x19')]===0x1f4){logger[_0x43e2('0x18')](_0x43e2('0x13'),_0x2ed387,_0x5847f0['error'][_0x43e2('0x1a')]);return _0x45848e(_0x5847f0[_0x43e2('0x18')][_0x43e2('0x1a')]);}logger[_0x43e2('0x18')]('OpenchannelInteraction,\x20%s,\x20%s',_0x2ed387,_0x5847f0['error'][_0x43e2('0x1a')]);return _0x52146c(_0x5847f0[_0x43e2('0x18')][_0x43e2('0x1a')]);}else{logger[_0x43e2('0x12')](_0x43e2('0x13'),_0x2ed387,_0x43e2('0x14'));_0x52146c(_0x5847f0[_0x43e2('0x1b')][_0x43e2('0x1a')]);}})[_0x43e2('0x1c')](function(_0x399cab){logger['error'](_0x43e2('0x13'),_0x2ed387,_0x399cab);_0x45848e(_0x399cab);});});}exports[_0x43e2('0x1d')]=function(_0x4de509){var _0x115c0a=this;return new Promise(function(_0x5a5df5,_0x3bc2ce){return db[_0x43e2('0x1e')][_0x43e2('0x1f')](_0x4de509[_0x43e2('0x20')],{'raw':_0x4de509[_0x43e2('0x21')]?_0x4de509['options'][_0x43e2('0x22')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x4de509[_0x43e2('0x21')]?_0x4de509[_0x43e2('0x21')]['where']||null:null,'attributes':_0x4de509[_0x43e2('0x21')]?_0x4de509[_0x43e2('0x21')][_0x43e2('0x23')]||null:null,'limit':_0x4de509[_0x43e2('0x21')]?_0x4de509['options'][_0x43e2('0x24')]||null:null})[_0x43e2('0x25')](function(_0x215cb7){logger[_0x43e2('0x12')](_0x43e2('0x1d'),_0x4de509);logger[_0x43e2('0x15')](_0x43e2('0x1d'),_0x4de509,JSON[_0x43e2('0x17')](_0x215cb7));_0x5a5df5(_0x215cb7);})[_0x43e2('0x1c')](function(_0x1ec68e){logger[_0x43e2('0x18')](_0x43e2('0x1d'),_0x1ec68e['message'],_0x4de509);_0x3bc2ce(_0x115c0a[_0x43e2('0x18')](0x1f4,_0x1ec68e[_0x43e2('0x1a')]));});});};exports['AddTagsToOpenchannelInteraction']=function(_0x163063){return new Promise(function(_0x1883c6,_0x2dffa2){return db[_0x43e2('0x1e')][_0x43e2('0x26')]({'where':_0x163063['options']?_0x163063[_0x43e2('0x21')][_0x43e2('0x27')]||null:null})[_0x43e2('0x25')](function(_0x3d8e16){if(_0x3d8e16){return _0x3d8e16[_0x43e2('0x28')](_0x163063[_0x43e2('0x20')]['ids'],_['omit'](_0x163063[_0x43e2('0x20')],[_0x43e2('0x29'),'id'])||{});}})[_0x43e2('0x2a')](function(_0x3ecb6a){logger[_0x43e2('0x12')]('AddTags',_0x163063);logger[_0x43e2('0x15')](_0x43e2('0x2b'),_0x163063,JSON[_0x43e2('0x17')](_0x3ecb6a));_0x1883c6(_0x3ecb6a);})[_0x43e2('0x1c')](function(_0x418039){logger[_0x43e2('0x18')](_0x43e2('0x2b'),_0x418039['message'],_0x163063);_0x2dffa2(_this['error'](0x1f4,_0x418039[_0x43e2('0x1a')]));});});};
\ No newline at end of file
index 1f18f04..b233476 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1813=['length','openchannelInteraction:','remove','update','emit','removeListener','register'];(function(_0x5ed222,_0x54dcd5){var _0x540ea2=function(_0xac56dd){while(--_0xac56dd){_0x5ed222['push'](_0x5ed222['shift']());}};_0x540ea2(++_0x54dcd5);}(_0x1813,0x144));var _0x3181=function(_0x47e10d,_0x308ce9){_0x47e10d=_0x47e10d-0x0;var _0x58f850=_0x1813[_0x47e10d];return _0x58f850;};'use strict';var OpenchannelInteractionEvents=require('./openchannelInteraction.events');var events=['save',_0x3181('0x0'),_0x3181('0x1')];function createListener(_0x48af68,_0x4a2eb7){return function(_0x287e20){_0x4a2eb7[_0x3181('0x2')](_0x48af68,_0x287e20);};}function removeListener(_0x4fab53,_0x2db5cf){return function(){OpenchannelInteractionEvents[_0x3181('0x3')](_0x4fab53,_0x2db5cf);};}exports[_0x3181('0x4')]=function(_0x1e4f77){for(var _0x4e47df=0x0,_0x5ae1be=events[_0x3181('0x5')];_0x4e47df<_0x5ae1be;_0x4e47df++){var _0x3dc14d=events[_0x4e47df];var _0x241eba=createListener(_0x3181('0x6')+_0x3dc14d,_0x1e4f77);OpenchannelInteractionEvents['on'](_0x3dc14d,_0x241eba);}};
\ No newline at end of file
+var _0x571c=['save','remove','update','emit','register','length','./openchannelInteraction.events'];(function(_0x3cc4c8,_0x114636){var _0xdc0123=function(_0x1c3078){while(--_0x1c3078){_0x3cc4c8['push'](_0x3cc4c8['shift']());}};_0xdc0123(++_0x114636);}(_0x571c,0xa0));var _0xc571=function(_0x1f8712,_0x42cbdd){_0x1f8712=_0x1f8712-0x0;var _0x1c4896=_0x571c[_0x1f8712];return _0x1c4896;};'use strict';var OpenchannelInteractionEvents=require(_0xc571('0x0'));var events=[_0xc571('0x1'),_0xc571('0x2'),_0xc571('0x3')];function createListener(_0x12d423,_0x599cb4){return function(_0x4ff17f){_0x599cb4[_0xc571('0x4')](_0x12d423,_0x4ff17f);};}function removeListener(_0x3c23a,_0x259383){return function(){OpenchannelInteractionEvents['removeListener'](_0x3c23a,_0x259383);};}exports[_0xc571('0x5')]=function(_0x227af2){for(var _0x24dabb=0x0,_0x4d96a5=events[_0xc571('0x6')];_0x24dabb<_0x4d96a5;_0x24dabb++){var _0x462c3a=events[_0x24dabb];var _0x6c930f=createListener('openchannelInteraction:'+_0x462c3a,_0x227af2);OpenchannelInteractionEvents['on'](_0x462c3a,_0x6c930f);}};
\ No newline at end of file
index ac664b9..be535c5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x89c3=['isAuthenticated','/describe','get','/:id','show','post','tracked','openchannel','openchannelmessage:create','put','update','accept','/:id/reject','reject','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./openchannelMessage.controller'];(function(_0x2b8722,_0x50d540){var _0x20c180=function(_0x595b40){while(--_0x595b40){_0x2b8722['push'](_0x2b8722['shift']());}};_0x20c180(++_0x50d540);}(_0x89c3,0xff));var _0x389c=function(_0x5b206d,_0x1a89de){_0x5b206d=_0x5b206d-0x0;var _0x2aa842=_0x89c3[_0x5b206d];return _0x2aa842;};'use strict';var multer=require(_0x389c('0x0'));var util=require(_0x389c('0x1'));var path=require(_0x389c('0x2'));var timeout=require(_0x389c('0x3'));var express=require(_0x389c('0x4'));var router=express[_0x389c('0x5')]();var auth=require(_0x389c('0x6'));var interaction=require(_0x389c('0x7'));var config=require('../../config/environment');var controller=require(_0x389c('0x8'));router['get']('/',auth[_0x389c('0x9')](),controller['index']);router['get'](_0x389c('0xa'),auth['isAuthenticated'](),controller['describe']);router[_0x389c('0xb')](_0x389c('0xc'),auth[_0x389c('0x9')](),controller[_0x389c('0xd')]);router[_0x389c('0xe')]('/',auth[_0x389c('0x9')](),interaction[_0x389c('0xf')](_0x389c('0x10'),_0x389c('0x11')),controller['create']);router[_0x389c('0x12')](_0x389c('0xc'),auth[_0x389c('0x9')](),controller[_0x389c('0x13')]);router[_0x389c('0x12')]('/:id/accept',auth['isAuthenticated'](),controller[_0x389c('0x14')]);router[_0x389c('0x12')](_0x389c('0x15'),auth['isAuthenticated'](),controller[_0x389c('0x16')]);router['delete'](_0x389c('0xc'),auth[_0x389c('0x9')](),controller['destroy']);module[_0x389c('0x17')]=router;
\ No newline at end of file
+var _0x5d70=['accept','/:id/reject','reject','delete','destroy','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','describe','/:id','post','tracked','openchannel','openchannelmessage:create','create','put','update','/:id/accept'];(function(_0x359bbe,_0x5b7fcc){var _0x1b3353=function(_0x34b41c){while(--_0x34b41c){_0x359bbe['push'](_0x359bbe['shift']());}};_0x1b3353(++_0x5b7fcc);}(_0x5d70,0x8d));var _0x05d7=function(_0x54b3d6,_0x274d9b){_0x54b3d6=_0x54b3d6-0x0;var _0x520a0d=_0x5d70[_0x54b3d6];return _0x520a0d;};'use strict';var multer=require(_0x05d7('0x0'));var util=require(_0x05d7('0x1'));var path=require('path');var timeout=require(_0x05d7('0x2'));var express=require(_0x05d7('0x3'));var router=express[_0x05d7('0x4')]();var auth=require(_0x05d7('0x5'));var interaction=require(_0x05d7('0x6'));var config=require(_0x05d7('0x7'));var controller=require('./openchannelMessage.controller');router[_0x05d7('0x8')]('/',auth[_0x05d7('0x9')](),controller[_0x05d7('0xa')]);router[_0x05d7('0x8')]('/describe',auth['isAuthenticated'](),controller[_0x05d7('0xb')]);router[_0x05d7('0x8')](_0x05d7('0xc'),auth['isAuthenticated'](),controller['show']);router[_0x05d7('0xd')]('/',auth[_0x05d7('0x9')](),interaction[_0x05d7('0xe')](_0x05d7('0xf'),_0x05d7('0x10')),controller[_0x05d7('0x11')]);router[_0x05d7('0x12')](_0x05d7('0xc'),auth[_0x05d7('0x9')](),controller[_0x05d7('0x13')]);router[_0x05d7('0x12')](_0x05d7('0x14'),auth[_0x05d7('0x9')](),controller[_0x05d7('0x15')]);router[_0x05d7('0x12')](_0x05d7('0x16'),auth[_0x05d7('0x9')](),controller[_0x05d7('0x17')]);router[_0x05d7('0x18')](_0x05d7('0xc'),auth[_0x05d7('0x9')](),controller[_0x05d7('0x19')]);module[_0x05d7('0x1a')]=router;
\ No newline at end of file
index bad95e0..4504f78 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x98d8=['sequelize','exports','TEXT','BOOLEAN','ENUM','out'];(function(_0x261cc7,_0x398726){var _0x7225f3=function(_0x952092){while(--_0x952092){_0x261cc7['push'](_0x261cc7['shift']());}};_0x7225f3(++_0x398726);}(_0x98d8,0x192));var _0x898d=function(_0x54af0d,_0x3e5db0){_0x54af0d=_0x54af0d-0x0;var _0x57b08d=_0x98d8[_0x54af0d];return _0x57b08d;};'use strict';var Sequelize=require(_0x898d('0x0'));module[_0x898d('0x1')]={'body':{'type':Sequelize[_0x898d('0x2')]('medium'),'allowNull':![]},'read':{'type':Sequelize[_0x898d('0x3')],'defaultValue':![]},'secret':{'type':Sequelize[_0x898d('0x3')],'defaultValue':![]},'direction':{'type':Sequelize[_0x898d('0x4')]('in',_0x898d('0x5')),'defaultValue':_0x898d('0x5'),'allowNull':![]},'readAt':{'type':Sequelize['DATE']}};
\ No newline at end of file
+var _0xede6=['sequelize','TEXT','BOOLEAN','ENUM','out','DATE'];(function(_0x53a0f5,_0x352fe4){var _0x3668ae=function(_0x432fb8){while(--_0x432fb8){_0x53a0f5['push'](_0x53a0f5['shift']());}};_0x3668ae(++_0x352fe4);}(_0xede6,0x84));var _0x6ede=function(_0x1b828b,_0x344400){_0x1b828b=_0x1b828b-0x0;var _0x98da1a=_0xede6[_0x1b828b];return _0x98da1a;};'use strict';var Sequelize=require(_0x6ede('0x0'));module['exports']={'body':{'type':Sequelize[_0x6ede('0x1')]('medium'),'allowNull':![]},'read':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'secret':{'type':Sequelize[_0x6ede('0x2')],'defaultValue':![]},'direction':{'type':Sequelize[_0x6ede('0x3')]('in','out'),'defaultValue':_0x6ede('0x4'),'allowNull':![]},'readAt':{'type':Sequelize[_0x6ede('0x5')]}};
\ No newline at end of file
index 594f214..26e4900 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f80=['apply','save','update','then','destroy','stack','name','send','index','OpenchannelMessage','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','key','VIRTUAL','count','includeAll','include','findAll','rows','show','params','rawAttributes','options','find','body','openchannel-interactions','openchannel','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','Contact','isNil','interaction','get','[OPENCHANNELMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','user','null','acceptMessage','manual','channel','event','accept','EventManager','reject','agent','[OPENCHANNELMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','rejectMessage','rejectmessage','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/environment','defaults','redis','localhost','socket.io-emitter','./openchannelMessage.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','info','OpenchannelMessage,\x20%s,\x20%s','request\x20sent','debug','OpenchannelMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','end','json','offset','limit','set','Content-Range'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x0f80,0x126));var _0x00f8=function(_0x33e9df,_0x30e858){_0x33e9df=_0x33e9df-0x0;var _0x39e67e=_0x0f80[_0x33e9df];return _0x39e67e;};'use strict';var pdf=require(_0x00f8('0x0'));var emlformat=require(_0x00f8('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x00f8('0x2'));var rp=require(_0x00f8('0x3'));var moment=require(_0x00f8('0x4'));var BPromise=require(_0x00f8('0x5'));var Mustache=require(_0x00f8('0x6'));var util=require(_0x00f8('0x7'));var path=require('path');var sox=require('sox');var csv=require(_0x00f8('0x8'));var ejs=require(_0x00f8('0x9'));var fs=require('fs');var _=require(_0x00f8('0xa'));var squel=require(_0x00f8('0xb'));var crypto=require('crypto');var jsforce=require(_0x00f8('0xc'));var deskjs=require(_0x00f8('0xd'));var toCsv=require(_0x00f8('0x8'));var querystring=require(_0x00f8('0xe'));var Papa=require(_0x00f8('0xf'));var Redis=require(_0x00f8('0x10'));var authService=require(_0x00f8('0x11'));var qs=require(_0x00f8('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x00f8('0x13'))(_0x00f8('0x14'));var utils=require('../../config/utils');var config=require(_0x00f8('0x15'));var db=require('../../mysqldb')['db'];config['redis']=_[_0x00f8('0x16')](config[_0x00f8('0x17')],{'host':_0x00f8('0x18'),'port':0x18eb});var socket=require(_0x00f8('0x19'))(new Redis(config[_0x00f8('0x17')]));require(_0x00f8('0x1a'))['register'](socket);var jayson=require(_0x00f8('0x1b'));var client=jayson[_0x00f8('0x1c')][_0x00f8('0x1d')]({'port':0x232c});var client9002=jayson[_0x00f8('0x1c')][_0x00f8('0x1d')]({'port':0x232a});function checkPasswordPattern(_0x31624d,_0x4e780c,_0x273fb8){if(_0x273fb8){var _0x2704ef=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x2704ef['test'](_0x4e780c)){return _0x31624d;}else{throw new Error(_0x00f8('0x1e'));}}else{return _0x31624d;}}function respondWithRpcPromise(_0xd59cde,_0x27840f,_0x4ce50d,_0x137754){return new BPromise(function(_0x117bdf,_0x2b4248){var _0x478244=_0x137754||client;return _0x478244[_0x00f8('0x1f')](_0xd59cde,_0x4ce50d)['then'](function(_0x4b049e){logger[_0x00f8('0x20')](_0x00f8('0x21'),_0x27840f,_0x00f8('0x22'));logger[_0x00f8('0x23')](_0x00f8('0x24'),_0x27840f,'request\x20sent',JSON[_0x00f8('0x25')](_0x4b049e));if(_0x4b049e[_0x00f8('0x26')]){if(_0x4b049e[_0x00f8('0x26')][_0x00f8('0x27')]===0x1f4){logger[_0x00f8('0x26')]('OpenchannelMessage,\x20%s,\x20%s',_0x27840f,_0x4b049e[_0x00f8('0x26')]['message']);return _0x2b4248(_0x4b049e[_0x00f8('0x26')][_0x00f8('0x28')]);}logger[_0x00f8('0x26')](_0x00f8('0x21'),_0x27840f,_0x4b049e[_0x00f8('0x26')][_0x00f8('0x28')]);return _0x117bdf(_0x4b049e[_0x00f8('0x26')][_0x00f8('0x28')]);}else{logger[_0x00f8('0x20')](_0x00f8('0x21'),_0x27840f,'request\x20sent');_0x117bdf(_0x4b049e[_0x00f8('0x29')][_0x00f8('0x28')]);}})[_0x00f8('0x2a')](function(_0x2e17ac){logger['error']('OpenchannelMessage,\x20%s,\x20%s',_0x27840f,_0x2e17ac);_0x2b4248(_0x2e17ac);});});}function respondWithStatusCode(_0x288538,_0x5c49e2){_0x5c49e2=_0x5c49e2||0xcc;return function(_0x43da6a){if(_0x43da6a){return _0x288538[_0x00f8('0x2b')](_0x5c49e2);}return _0x288538[_0x00f8('0x2c')](_0x5c49e2)[_0x00f8('0x2d')]();};}function respondWithResult(_0x115f40,_0x417d96){_0x417d96=_0x417d96||0xc8;return function(_0x3ac510){if(_0x3ac510){return _0x115f40[_0x00f8('0x2c')](_0x417d96)[_0x00f8('0x2e')](_0x3ac510);}};}function respondWithFilteredResult(_0xb59c40,_0x3a20cd){return function(_0x24a943){if(_0x24a943){var _0x208b97=_0x24a943['count'],_0x12dd00=_0x3a20cd[_0x00f8('0x2f')],_0x2b49ad=_0x3a20cd[_0x00f8('0x2f')]+_0x3a20cd[_0x00f8('0x30')],_0x2f31b3;if(_0x2b49ad>=_0x208b97){_0x2b49ad=_0x208b97;_0x2f31b3=0xc8;}else{_0x2f31b3=0xce;}_0xb59c40[_0x00f8('0x2c')](_0x2f31b3);return _0xb59c40[_0x00f8('0x31')](_0x00f8('0x32'),_0x12dd00+'-'+_0x2b49ad+'/'+_0x208b97)[_0x00f8('0x2e')](_0x24a943);}return null;};}function patchUpdates(_0x27fc00){return function(_0x42a45e){try{jsonpatch[_0x00f8('0x33')](_0x42a45e,_0x27fc00,!![]);}catch(_0x3f8105){return BPromise['reject'](_0x3f8105);}return _0x42a45e[_0x00f8('0x34')]();};}function saveUpdates(_0x310a6b,_0x27e3f7){return function(_0x55667f){if(_0x55667f){return _0x55667f[_0x00f8('0x35')](_0x310a6b)[_0x00f8('0x36')](function(_0x4d6e95){return _0x4d6e95;});}return null;};}function removeEntity(_0xeb7245,_0x30224c){return function(_0x347179){if(_0x347179){return _0x347179[_0x00f8('0x37')]()[_0x00f8('0x36')](function(){_0xeb7245[_0x00f8('0x2c')](0xcc)[_0x00f8('0x2d')]();});}};}function handleEntityNotFound(_0x48fcc7,_0x1d5000){return function(_0x482419){if(!_0x482419){_0x48fcc7['sendStatus'](0x194);}return _0x482419;};}function handleError(_0x446432,_0x34e780){_0x34e780=_0x34e780||0x1f4;return function(_0x2509c3){logger['error'](_0x2509c3[_0x00f8('0x38')]);if(_0x2509c3['name']){delete _0x2509c3[_0x00f8('0x39')];}_0x446432[_0x00f8('0x2c')](_0x34e780)[_0x00f8('0x3a')](_0x2509c3);};}exports[_0x00f8('0x3b')]=function(_0x1ff695,_0x29a247){var _0x24ce00={},_0xc966e0={},_0x3d81b0={'count':0x0,'rows':[]};var _0x3805e1=db[_0x00f8('0x3c')]['rawAttributes'];_0xc966e0[_0x00f8('0x3d')]=_[_0x00f8('0x3e')](_0x3805e1);_0xc966e0[_0x00f8('0x3f')]=_[_0x00f8('0x3e')](_0x1ff695[_0x00f8('0x3f')]);_0xc966e0[_0x00f8('0x40')]=_[_0x00f8('0x41')](_0xc966e0[_0x00f8('0x3d')],_0xc966e0['query']);_0x24ce00['attributes']=_[_0x00f8('0x41')](_0xc966e0['model'],qs[_0x00f8('0x42')](_0x1ff695[_0x00f8('0x3f')][_0x00f8('0x42')]));_0x24ce00[_0x00f8('0x43')]=_0x24ce00[_0x00f8('0x43')][_0x00f8('0x44')]?_0x24ce00[_0x00f8('0x43')]:_0xc966e0['model'];if(!_0x1ff695['query'][_0x00f8('0x45')](_0x00f8('0x46'))){_0x24ce00['limit']=qs['limit'](_0x1ff695[_0x00f8('0x3f')][_0x00f8('0x30')]);_0x24ce00[_0x00f8('0x2f')]=qs[_0x00f8('0x2f')](_0x1ff695[_0x00f8('0x3f')]['offset']);}_0x24ce00[_0x00f8('0x47')]=qs[_0x00f8('0x48')](_0x1ff695['query'][_0x00f8('0x48')]);_0x24ce00[_0x00f8('0x49')]=qs[_0x00f8('0x40')](_['pick'](_0x1ff695[_0x00f8('0x3f')],_0xc966e0['filters']));if(_0x1ff695[_0x00f8('0x3f')][_0x00f8('0x4a')]){_0x24ce00['where']=_[_0x00f8('0x4b')](_0x24ce00[_0x00f8('0x49')],{'$or':_[_0x00f8('0x4c')](_0x3805e1,function(_0x144fa9){if(_0x144fa9['type'][_0x00f8('0x4d')]!==_0x00f8('0x4e')){var _0x34baee={};_0x34baee[_0x144fa9['field']]={'$like':'%'+_0x1ff695[_0x00f8('0x3f')][_0x00f8('0x4a')]+'%'};return _0x34baee;}})});}_0x24ce00=_['merge']({},_0x24ce00,_0x1ff695['options']);var _0x44c2af={'where':_0x24ce00[_0x00f8('0x49')]};return db[_0x00f8('0x3c')][_0x00f8('0x4f')](_0x44c2af)[_0x00f8('0x36')](function(_0x9782fe){_0x3d81b0[_0x00f8('0x4f')]=_0x9782fe;if(_0x1ff695['query'][_0x00f8('0x50')]){_0x24ce00[_0x00f8('0x51')]=[{'all':!![]}];}return db[_0x00f8('0x3c')][_0x00f8('0x52')](_0x24ce00);})['then'](function(_0x3106b6){_0x3d81b0[_0x00f8('0x53')]=_0x3106b6;return _0x3d81b0;})[_0x00f8('0x36')](respondWithFilteredResult(_0x29a247,_0x24ce00))[_0x00f8('0x2a')](handleError(_0x29a247,null));};exports[_0x00f8('0x54')]=function(_0x37d8d4,_0x2c4775){var _0x3e2913={'raw':!![],'where':{'id':_0x37d8d4[_0x00f8('0x55')]['id']}},_0x1d0cf9={};_0x1d0cf9[_0x00f8('0x3d')]=_[_0x00f8('0x3e')](db['OpenchannelMessage'][_0x00f8('0x56')]);_0x1d0cf9[_0x00f8('0x3f')]=_[_0x00f8('0x3e')](_0x37d8d4[_0x00f8('0x3f')]);_0x1d0cf9[_0x00f8('0x40')]=_['intersection'](_0x1d0cf9[_0x00f8('0x3d')],_0x1d0cf9[_0x00f8('0x3f')]);_0x3e2913[_0x00f8('0x43')]=_['intersection'](_0x1d0cf9['model'],qs['fields'](_0x37d8d4[_0x00f8('0x3f')]['fields']));_0x3e2913['attributes']=_0x3e2913[_0x00f8('0x43')][_0x00f8('0x44')]?_0x3e2913[_0x00f8('0x43')]:_0x1d0cf9[_0x00f8('0x3d')];if(_0x37d8d4['query'][_0x00f8('0x50')]){_0x3e2913['include']=[{'all':!![]}];}_0x3e2913=_['merge']({},_0x3e2913,_0x37d8d4[_0x00f8('0x57')]);return db[_0x00f8('0x3c')][_0x00f8('0x58')](_0x3e2913)[_0x00f8('0x36')](handleEntityNotFound(_0x2c4775,null))['then'](respondWithResult(_0x2c4775,null))[_0x00f8('0x2a')](handleError(_0x2c4775,null));};exports['create']=function(_0x2e4167,_0x4dba19){return db[_0x00f8('0x3c')]['create'](_0x2e4167[_0x00f8('0x59')],{})['then'](respondWithResult(_0x4dba19,0xc9))[_0x00f8('0x2a')](handleError(_0x4dba19,null));};exports[_0x00f8('0x35')]=function(_0x4e4a07,_0x4308b){if(_0x4e4a07[_0x00f8('0x59')]['id']){delete _0x4e4a07[_0x00f8('0x59')]['id'];}return db[_0x00f8('0x3c')]['find']({'where':{'id':_0x4e4a07[_0x00f8('0x55')]['id']}})[_0x00f8('0x36')](handleEntityNotFound(_0x4308b,null))[_0x00f8('0x36')](saveUpdates(_0x4e4a07[_0x00f8('0x59')],null))[_0x00f8('0x36')](respondWithResult(_0x4308b,null))[_0x00f8('0x2a')](handleError(_0x4308b,null));};exports[_0x00f8('0x37')]=function(_0x1ef188,_0x554012){return db[_0x00f8('0x3c')][_0x00f8('0x58')]({'where':{'id':_0x1ef188['params']['id']}})[_0x00f8('0x36')](handleEntityNotFound(_0x554012,null))[_0x00f8('0x36')](removeEntity(_0x554012,null))[_0x00f8('0x2a')](handleError(_0x554012,null));};exports['describe']=function(_0x1d3c84,_0x2e6674){return db[_0x00f8('0x3c')]['describe']()[_0x00f8('0x36')](respondWithResult(_0x2e6674,null))[_0x00f8('0x2a')](handleError(_0x2e6674,null));};var interaction_log=require(_0x00f8('0x13'))(_0x00f8('0x5a'));exports['accept']=function(_0x41cd08,_0x416562,_0x43df8d){var _0xe0d12e={'channel':_0x00f8('0x5b')};if(_0x41cd08[_0x00f8('0x59')]['id']){delete _0x41cd08[_0x00f8('0x59')]['id'];}_0x41cd08[_0x00f8('0x59')]['read']=!![];_0x41cd08['body'][_0x00f8('0x5c')]=moment()[_0x00f8('0x5d')](_0x00f8('0x5e'));_0x41cd08[_0x00f8('0x59')]['UserId']=_0x41cd08[_0x00f8('0x59')][_0x00f8('0x5f')]||_0x41cd08['user']['id'];return db[_0x00f8('0x3c')]['find']({'where':{'id':_0x41cd08[_0x00f8('0x55')]['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0x00f8('0x60')}]})[_0x00f8('0x36')](handleEntityNotFound(_0x416562,null))[_0x00f8('0x36')](saveUpdates(_0x41cd08[_0x00f8('0x59')],null))[_0x00f8('0x36')](function(_0x532739){if(_0x532739){_0xe0d12e['message']=_0x532739['get']({'plain':!![]});return db['OpenchannelInteraction'][_0x00f8('0x58')]({'where':{'id':_0x532739['OpenchannelInteractionId']}});}return null;})[_0x00f8('0x36')](handleEntityNotFound(_0x416562,null))[_0x00f8('0x36')](function(_0xbd1dec){if(_0xbd1dec){return _0xbd1dec[_0x00f8('0x35')]({'UserId':_0x41cd08[_0x00f8('0x59')][_0x00f8('0x5f')],'read1stAt':_[_0x00f8('0x61')](_0xbd1dec['read1stAt'])?moment()[_0x00f8('0x5d')]('YYYY-MM-DD\x20HH:mm:ss'):undefined});}return null;})[_0x00f8('0x36')](function(_0x5d4352){if(_0x5d4352){_0xe0d12e[_0x00f8('0x62')]=_0x5d4352[_0x00f8('0x63')]({'plain':!![]});interaction_log[_0x00f8('0x20')](_0x00f8('0x64'),_0x41cd08['user']['id'],_0x41cd08['user'][_0x00f8('0x39')],_0x41cd08[_0x00f8('0x65')]['role'],_0xe0d12e[_0x00f8('0x62')]['id'],_0x41cd08[_0x00f8('0x59')]?JSON[_0x00f8('0x25')](_0x41cd08[_0x00f8('0x59')]):_0x00f8('0x66'));return respondWithRpcPromise('AcceptMessage',_0x00f8('0x67'),_0xe0d12e);}return null;})[_0x00f8('0x36')](function(_0x29622e){if(_0x29622e){if(_0x41cd08['body'][_0x00f8('0x68')]){_0xe0d12e[_0x00f8('0x28')]['interface']=util['format']('SIP/%s',_0x41cd08[_0x00f8('0x65')][_0x00f8('0x39')]);_0xe0d12e[_0x00f8('0x28')]['channel']=_0xe0d12e[_0x00f8('0x69')];_0xe0d12e[_0x00f8('0x28')][_0x00f8('0x6a')]=_0x00f8('0x6b');return respondWithRpcPromise(_0x00f8('0x6c'),'EventManager',{'event':'acceptmessage','message':_0xe0d12e['message']},client9002)[_0x00f8('0x36')](function(){return _0xe0d12e;});}return _0xe0d12e;}return null;})[_0x00f8('0x36')](respondWithResult(_0x416562,null))[_0x00f8('0x2a')](handleError(_0x416562,null));};var interaction_log=require(_0x00f8('0x13'))(_0x00f8('0x5a'));exports[_0x00f8('0x6d')]=function(_0x21562c,_0x25e5f9,_0x1fe14f){var _0x27b8c9={'agent':{},'channel':_0x00f8('0x5b')};if(_0x21562c[_0x00f8('0x59')]['id']){delete _0x21562c[_0x00f8('0x59')]['id'];}_0x21562c['body']['UserId']=_0x21562c[_0x00f8('0x59')]['UserId']||_0x21562c[_0x00f8('0x65')]['id'];_0x27b8c9[_0x00f8('0x6e')]['id']=_0x21562c[_0x00f8('0x59')][_0x00f8('0x5f')];return db['OpenchannelMessage'][_0x00f8('0x58')]({'where':{'id':_0x21562c['params']['id'],'UserId':null}})['then'](handleEntityNotFound(_0x25e5f9,null))[_0x00f8('0x36')](function(_0x406336){if(_0x406336){_0x27b8c9[_0x00f8('0x28')]=_0x406336[_0x00f8('0x63')]({'plain':!![]});return db['OpenchannelInteraction'][_0x00f8('0x58')]({'where':{'id':_0x406336['OpenchannelInteractionId']}});}return null;})['then'](handleEntityNotFound(_0x25e5f9,null))[_0x00f8('0x36')](function(_0x3e075c){if(_0x3e075c){_0x27b8c9[_0x00f8('0x62')]=_0x3e075c[_0x00f8('0x63')]({'plain':!![]});interaction_log[_0x00f8('0x20')](_0x00f8('0x6f'),_0x21562c[_0x00f8('0x65')]['id'],_0x21562c[_0x00f8('0x65')]['name'],_0x21562c[_0x00f8('0x65')][_0x00f8('0x70')],_0x27b8c9[_0x00f8('0x62')]['id'],_0x21562c['body']?JSON[_0x00f8('0x25')](_0x21562c[_0x00f8('0x59')]):_0x00f8('0x66'));return respondWithRpcPromise('RejectMessage',_0x00f8('0x71'),_0x27b8c9);}return null;})[_0x00f8('0x36')](function(_0x265250){if(_0x265250){_0x265250[_0x00f8('0x28')]['interface']=util[_0x00f8('0x5d')]('SIP/%s',_0x21562c[_0x00f8('0x65')][_0x00f8('0x39')]);_0x265250[_0x00f8('0x28')][_0x00f8('0x69')]=_0x27b8c9[_0x00f8('0x69')];_0x265250['message']['event']='reject';respondWithRpcPromise(_0x00f8('0x6c'),_0x00f8('0x6c'),{'event':_0x00f8('0x72'),'message':_0x265250['message']},client9002);return _0x27b8c9;}return null;})['then'](respondWithResult(_0x25e5f9,null))[_0x00f8('0x2a')](handleError(_0x25e5f9,null));};
\ No newline at end of file
+var _0xf0db=['format','YYYY-MM-DD\x20HH:mm:ss','UserId','CmContact','Contact','OpenchannelInteractionId','isNil','read1stAt','interaction','[OPENCHANNELMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','user','role','stringify','null','AcceptMessage','acceptMessage','manual','interface','SIP/%s','channel','EventManager','agent','get','OpenchannelInteraction','[OPENCHANNELMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','rejectMessage','event','rejectmessage','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','redis','defaults','socket.io-emitter','./openchannelMessage.socket','register','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','OpenchannelMessage,\x20%s,\x20%s','request\x20sent','debug','OpenchannelMessage,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','sendStatus','end','count','offset','limit','set','Content-Range','json','apply','reject','save','update','status','stack','name','send','index','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','includeAll','include','OpenchannelMessage','findAll','rows','show','params','find','create','body','destroy','describe','openchannel-interactions','openchannel','read'];(function(_0x23841b,_0x23bda1){var _0x424b66=function(_0x51ab36){while(--_0x51ab36){_0x23841b['push'](_0x23841b['shift']());}};_0x424b66(++_0x23bda1);}(_0xf0db,0x115));var _0xbf0d=function(_0x263418,_0x2555a9){_0x263418=_0x263418-0x0;var _0x2a66c4=_0xf0db[_0x263418];return _0x2a66c4;};'use strict';var pdf=require(_0xbf0d('0x0'));var emlformat=require(_0xbf0d('0x1'));var rimraf=require(_0xbf0d('0x2'));var zipdir=require(_0xbf0d('0x3'));var jsonpatch=require(_0xbf0d('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xbf0d('0x5'));var Mustache=require(_0xbf0d('0x6'));var util=require(_0xbf0d('0x7'));var path=require(_0xbf0d('0x8'));var sox=require(_0xbf0d('0x9'));var csv=require(_0xbf0d('0xa'));var ejs=require(_0xbf0d('0xb'));var fs=require('fs');var _=require(_0xbf0d('0xc'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xbf0d('0xd'));var toCsv=require(_0xbf0d('0xa'));var querystring=require(_0xbf0d('0xe'));var Papa=require(_0xbf0d('0xf'));var Redis=require('ioredis');var authService=require(_0xbf0d('0x10'));var qs=require(_0xbf0d('0x11'));var hardwareService=require(_0xbf0d('0x12'));var logger=require(_0xbf0d('0x13'))(_0xbf0d('0x14'));var utils=require('../../config/utils');var config=require(_0xbf0d('0x15'));var db=require('../../mysqldb')['db'];config[_0xbf0d('0x16')]=_[_0xbf0d('0x17')](config[_0xbf0d('0x16')],{'host':'localhost','port':0x18eb});var socket=require(_0xbf0d('0x18'))(new Redis(config[_0xbf0d('0x16')]));require(_0xbf0d('0x19'))[_0xbf0d('0x1a')](socket);var jayson=require('jayson/promise');var client=jayson[_0xbf0d('0x1b')][_0xbf0d('0x1c')]({'port':0x232c});var client9002=jayson[_0xbf0d('0x1b')][_0xbf0d('0x1c')]({'port':0x232a});function checkPasswordPattern(_0x198fb5,_0x2de4cc,_0x49b31c){if(_0x49b31c){var _0x56cda6=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x56cda6['test'](_0x2de4cc)){return _0x198fb5;}else{throw new Error(_0xbf0d('0x1d'));}}else{return _0x198fb5;}}function respondWithRpcPromise(_0x5420c2,_0x11b3ba,_0x529dfc,_0x4e1634){return new BPromise(function(_0x6cb01e,_0x464679){var _0x518e4f=_0x4e1634||client;return _0x518e4f[_0xbf0d('0x1e')](_0x5420c2,_0x529dfc)[_0xbf0d('0x1f')](function(_0x4f3797){logger[_0xbf0d('0x20')](_0xbf0d('0x21'),_0x11b3ba,_0xbf0d('0x22'));logger[_0xbf0d('0x23')](_0xbf0d('0x24'),_0x11b3ba,_0xbf0d('0x22'),JSON['stringify'](_0x4f3797));if(_0x4f3797[_0xbf0d('0x25')]){if(_0x4f3797[_0xbf0d('0x25')][_0xbf0d('0x26')]===0x1f4){logger[_0xbf0d('0x25')]('OpenchannelMessage,\x20%s,\x20%s',_0x11b3ba,_0x4f3797[_0xbf0d('0x25')][_0xbf0d('0x27')]);return _0x464679(_0x4f3797[_0xbf0d('0x25')][_0xbf0d('0x27')]);}logger[_0xbf0d('0x25')](_0xbf0d('0x21'),_0x11b3ba,_0x4f3797[_0xbf0d('0x25')][_0xbf0d('0x27')]);return _0x6cb01e(_0x4f3797[_0xbf0d('0x25')][_0xbf0d('0x27')]);}else{logger['info']('OpenchannelMessage,\x20%s,\x20%s',_0x11b3ba,_0xbf0d('0x22'));_0x6cb01e(_0x4f3797[_0xbf0d('0x28')][_0xbf0d('0x27')]);}})[_0xbf0d('0x29')](function(_0x3864f8){logger[_0xbf0d('0x25')]('OpenchannelMessage,\x20%s,\x20%s',_0x11b3ba,_0x3864f8);_0x464679(_0x3864f8);});});}function respondWithStatusCode(_0xc627b1,_0x58c290){_0x58c290=_0x58c290||0xcc;return function(_0x6ee29c){if(_0x6ee29c){return _0xc627b1[_0xbf0d('0x2a')](_0x58c290);}return _0xc627b1['status'](_0x58c290)[_0xbf0d('0x2b')]();};}function respondWithResult(_0x9f2d87,_0x30138b){_0x30138b=_0x30138b||0xc8;return function(_0x3d7e30){if(_0x3d7e30){return _0x9f2d87['status'](_0x30138b)['json'](_0x3d7e30);}};}function respondWithFilteredResult(_0x12d6c3,_0x1c400f){return function(_0x26a88e){if(_0x26a88e){var _0x2663e6=_0x26a88e[_0xbf0d('0x2c')],_0xf3bca1=_0x1c400f[_0xbf0d('0x2d')],_0x4acd49=_0x1c400f[_0xbf0d('0x2d')]+_0x1c400f[_0xbf0d('0x2e')],_0x69ea3d;if(_0x4acd49>=_0x2663e6){_0x4acd49=_0x2663e6;_0x69ea3d=0xc8;}else{_0x69ea3d=0xce;}_0x12d6c3['status'](_0x69ea3d);return _0x12d6c3[_0xbf0d('0x2f')](_0xbf0d('0x30'),_0xf3bca1+'-'+_0x4acd49+'/'+_0x2663e6)[_0xbf0d('0x31')](_0x26a88e);}return null;};}function patchUpdates(_0x47ac50){return function(_0x5da156){try{jsonpatch[_0xbf0d('0x32')](_0x5da156,_0x47ac50,!![]);}catch(_0x3bb504){return BPromise[_0xbf0d('0x33')](_0x3bb504);}return _0x5da156[_0xbf0d('0x34')]();};}function saveUpdates(_0x1875d3,_0x25951a){return function(_0x56e169){if(_0x56e169){return _0x56e169[_0xbf0d('0x35')](_0x1875d3)[_0xbf0d('0x1f')](function(_0x57b0a4){return _0x57b0a4;});}return null;};}function removeEntity(_0x2e0eba,_0x2e14c0){return function(_0x30c682){if(_0x30c682){return _0x30c682['destroy']()[_0xbf0d('0x1f')](function(){_0x2e0eba[_0xbf0d('0x36')](0xcc)[_0xbf0d('0x2b')]();});}};}function handleEntityNotFound(_0x22a0fd,_0x3a14a9){return function(_0x5d79b2){if(!_0x5d79b2){_0x22a0fd[_0xbf0d('0x2a')](0x194);}return _0x5d79b2;};}function handleError(_0x3a1146,_0x26db3b){_0x26db3b=_0x26db3b||0x1f4;return function(_0x4cd1e2){logger[_0xbf0d('0x25')](_0x4cd1e2[_0xbf0d('0x37')]);if(_0x4cd1e2[_0xbf0d('0x38')]){delete _0x4cd1e2['name'];}_0x3a1146[_0xbf0d('0x36')](_0x26db3b)[_0xbf0d('0x39')](_0x4cd1e2);};}exports[_0xbf0d('0x3a')]=function(_0x4de0ce,_0x46d7d9){var _0x2de14c={},_0x2bf40d={},_0x2b0f7a={'count':0x0,'rows':[]};var _0xc400ad=db['OpenchannelMessage'][_0xbf0d('0x3b')];_0x2bf40d[_0xbf0d('0x3c')]=_[_0xbf0d('0x3d')](_0xc400ad);_0x2bf40d[_0xbf0d('0x3e')]=_['keys'](_0x4de0ce[_0xbf0d('0x3e')]);_0x2bf40d[_0xbf0d('0x3f')]=_['intersection'](_0x2bf40d['model'],_0x2bf40d['query']);_0x2de14c[_0xbf0d('0x40')]=_[_0xbf0d('0x41')](_0x2bf40d[_0xbf0d('0x3c')],qs[_0xbf0d('0x42')](_0x4de0ce[_0xbf0d('0x3e')][_0xbf0d('0x42')]));_0x2de14c[_0xbf0d('0x40')]=_0x2de14c[_0xbf0d('0x40')][_0xbf0d('0x43')]?_0x2de14c[_0xbf0d('0x40')]:_0x2bf40d[_0xbf0d('0x3c')];if(!_0x4de0ce[_0xbf0d('0x3e')][_0xbf0d('0x44')](_0xbf0d('0x45'))){_0x2de14c['limit']=qs['limit'](_0x4de0ce[_0xbf0d('0x3e')][_0xbf0d('0x2e')]);_0x2de14c[_0xbf0d('0x2d')]=qs[_0xbf0d('0x2d')](_0x4de0ce[_0xbf0d('0x3e')]['offset']);}_0x2de14c['order']=qs[_0xbf0d('0x46')](_0x4de0ce['query'][_0xbf0d('0x46')]);_0x2de14c[_0xbf0d('0x47')]=qs[_0xbf0d('0x3f')](_[_0xbf0d('0x48')](_0x4de0ce[_0xbf0d('0x3e')],_0x2bf40d[_0xbf0d('0x3f')]));if(_0x4de0ce[_0xbf0d('0x3e')]['filter']){_0x2de14c[_0xbf0d('0x47')]=_[_0xbf0d('0x49')](_0x2de14c[_0xbf0d('0x47')],{'$or':_[_0xbf0d('0x4a')](_0xc400ad,function(_0x2fa7bf){if(_0x2fa7bf[_0xbf0d('0x4b')][_0xbf0d('0x4c')]!==_0xbf0d('0x4d')){var _0x4f7210={};_0x4f7210[_0x2fa7bf[_0xbf0d('0x4e')]]={'$like':'%'+_0x4de0ce[_0xbf0d('0x3e')][_0xbf0d('0x4f')]+'%'};return _0x4f7210;}})});}_0x2de14c=_['merge']({},_0x2de14c,_0x4de0ce['options']);var _0x35a12b={'where':_0x2de14c[_0xbf0d('0x47')]};return db['OpenchannelMessage'][_0xbf0d('0x2c')](_0x35a12b)['then'](function(_0x2923db){_0x2b0f7a[_0xbf0d('0x2c')]=_0x2923db;if(_0x4de0ce['query'][_0xbf0d('0x50')]){_0x2de14c[_0xbf0d('0x51')]=[{'all':!![]}];}return db[_0xbf0d('0x52')][_0xbf0d('0x53')](_0x2de14c);})[_0xbf0d('0x1f')](function(_0x34edfa){_0x2b0f7a[_0xbf0d('0x54')]=_0x34edfa;return _0x2b0f7a;})[_0xbf0d('0x1f')](respondWithFilteredResult(_0x46d7d9,_0x2de14c))['catch'](handleError(_0x46d7d9,null));};exports[_0xbf0d('0x55')]=function(_0x1cff02,_0xf33b12){var _0x25c0ae={'raw':!![],'where':{'id':_0x1cff02[_0xbf0d('0x56')]['id']}},_0x23e671={};_0x23e671[_0xbf0d('0x3c')]=_[_0xbf0d('0x3d')](db[_0xbf0d('0x52')]['rawAttributes']);_0x23e671[_0xbf0d('0x3e')]=_[_0xbf0d('0x3d')](_0x1cff02[_0xbf0d('0x3e')]);_0x23e671[_0xbf0d('0x3f')]=_[_0xbf0d('0x41')](_0x23e671[_0xbf0d('0x3c')],_0x23e671[_0xbf0d('0x3e')]);_0x25c0ae[_0xbf0d('0x40')]=_['intersection'](_0x23e671['model'],qs[_0xbf0d('0x42')](_0x1cff02['query'][_0xbf0d('0x42')]));_0x25c0ae['attributes']=_0x25c0ae[_0xbf0d('0x40')][_0xbf0d('0x43')]?_0x25c0ae[_0xbf0d('0x40')]:_0x23e671['model'];if(_0x1cff02['query'][_0xbf0d('0x50')]){_0x25c0ae[_0xbf0d('0x51')]=[{'all':!![]}];}_0x25c0ae=_[_0xbf0d('0x49')]({},_0x25c0ae,_0x1cff02['options']);return db['OpenchannelMessage'][_0xbf0d('0x57')](_0x25c0ae)[_0xbf0d('0x1f')](handleEntityNotFound(_0xf33b12,null))[_0xbf0d('0x1f')](respondWithResult(_0xf33b12,null))['catch'](handleError(_0xf33b12,null));};exports[_0xbf0d('0x58')]=function(_0x13bd2c,_0x2abad1){return db[_0xbf0d('0x52')]['create'](_0x13bd2c[_0xbf0d('0x59')],{})[_0xbf0d('0x1f')](respondWithResult(_0x2abad1,0xc9))[_0xbf0d('0x29')](handleError(_0x2abad1,null));};exports[_0xbf0d('0x35')]=function(_0x4cbe32,_0x191e36){if(_0x4cbe32['body']['id']){delete _0x4cbe32[_0xbf0d('0x59')]['id'];}return db['OpenchannelMessage']['find']({'where':{'id':_0x4cbe32[_0xbf0d('0x56')]['id']}})['then'](handleEntityNotFound(_0x191e36,null))[_0xbf0d('0x1f')](saveUpdates(_0x4cbe32[_0xbf0d('0x59')],null))[_0xbf0d('0x1f')](respondWithResult(_0x191e36,null))[_0xbf0d('0x29')](handleError(_0x191e36,null));};exports[_0xbf0d('0x5a')]=function(_0x39726a,_0x1d2e78){return db['OpenchannelMessage'][_0xbf0d('0x57')]({'where':{'id':_0x39726a[_0xbf0d('0x56')]['id']}})[_0xbf0d('0x1f')](handleEntityNotFound(_0x1d2e78,null))['then'](removeEntity(_0x1d2e78,null))[_0xbf0d('0x29')](handleError(_0x1d2e78,null));};exports[_0xbf0d('0x5b')]=function(_0x2def90,_0x57c519){return db['OpenchannelMessage'][_0xbf0d('0x5b')]()[_0xbf0d('0x1f')](respondWithResult(_0x57c519,null))['catch'](handleError(_0x57c519,null));};var interaction_log=require(_0xbf0d('0x13'))(_0xbf0d('0x5c'));exports['accept']=function(_0x370359,_0x58ece2,_0x3cef1b){var _0x253d95={'channel':_0xbf0d('0x5d')};if(_0x370359['body']['id']){delete _0x370359['body']['id'];}_0x370359['body'][_0xbf0d('0x5e')]=!![];_0x370359[_0xbf0d('0x59')]['readAt']=moment()[_0xbf0d('0x5f')](_0xbf0d('0x60'));_0x370359[_0xbf0d('0x59')]['UserId']=_0x370359[_0xbf0d('0x59')][_0xbf0d('0x61')]||_0x370359['user']['id'];return db[_0xbf0d('0x52')][_0xbf0d('0x57')]({'where':{'id':_0x370359['params']['id'],'UserId':null},'include':[{'model':db[_0xbf0d('0x62')],'as':_0xbf0d('0x63')}]})['then'](handleEntityNotFound(_0x58ece2,null))[_0xbf0d('0x1f')](saveUpdates(_0x370359[_0xbf0d('0x59')],null))[_0xbf0d('0x1f')](function(_0x32cef8){if(_0x32cef8){_0x253d95[_0xbf0d('0x27')]=_0x32cef8['get']({'plain':!![]});return db['OpenchannelInteraction'][_0xbf0d('0x57')]({'where':{'id':_0x32cef8[_0xbf0d('0x64')]}});}return null;})[_0xbf0d('0x1f')](handleEntityNotFound(_0x58ece2,null))[_0xbf0d('0x1f')](function(_0x5f19e6){if(_0x5f19e6){return _0x5f19e6['update']({'UserId':_0x370359[_0xbf0d('0x59')][_0xbf0d('0x61')],'read1stAt':_[_0xbf0d('0x65')](_0x5f19e6[_0xbf0d('0x66')])?moment()['format'](_0xbf0d('0x60')):undefined});}return null;})[_0xbf0d('0x1f')](function(_0x141127){if(_0x141127){_0x253d95[_0xbf0d('0x67')]=_0x141127['get']({'plain':!![]});interaction_log['info'](_0xbf0d('0x68'),_0x370359['user']['id'],_0x370359[_0xbf0d('0x69')][_0xbf0d('0x38')],_0x370359[_0xbf0d('0x69')][_0xbf0d('0x6a')],_0x253d95[_0xbf0d('0x67')]['id'],_0x370359['body']?JSON[_0xbf0d('0x6b')](_0x370359[_0xbf0d('0x59')]):_0xbf0d('0x6c'));return respondWithRpcPromise(_0xbf0d('0x6d'),_0xbf0d('0x6e'),_0x253d95);}return null;})['then'](function(_0x40ea46){if(_0x40ea46){if(_0x370359[_0xbf0d('0x59')][_0xbf0d('0x6f')]){_0x253d95['message'][_0xbf0d('0x70')]=util[_0xbf0d('0x5f')](_0xbf0d('0x71'),_0x370359[_0xbf0d('0x69')][_0xbf0d('0x38')]);_0x253d95[_0xbf0d('0x27')][_0xbf0d('0x72')]=_0x253d95[_0xbf0d('0x72')];_0x253d95[_0xbf0d('0x27')]['event']='accept';return respondWithRpcPromise(_0xbf0d('0x73'),'EventManager',{'event':'acceptmessage','message':_0x253d95[_0xbf0d('0x27')]},client9002)[_0xbf0d('0x1f')](function(){return _0x253d95;});}return _0x253d95;}return null;})[_0xbf0d('0x1f')](respondWithResult(_0x58ece2,null))[_0xbf0d('0x29')](handleError(_0x58ece2,null));};var interaction_log=require(_0xbf0d('0x13'))(_0xbf0d('0x5c'));exports[_0xbf0d('0x33')]=function(_0x3d0b66,_0x32df49,_0x32afc8){var _0x5e2703={'agent':{},'channel':_0xbf0d('0x5d')};if(_0x3d0b66[_0xbf0d('0x59')]['id']){delete _0x3d0b66['body']['id'];}_0x3d0b66[_0xbf0d('0x59')]['UserId']=_0x3d0b66[_0xbf0d('0x59')]['UserId']||_0x3d0b66[_0xbf0d('0x69')]['id'];_0x5e2703[_0xbf0d('0x74')]['id']=_0x3d0b66['body'][_0xbf0d('0x61')];return db[_0xbf0d('0x52')][_0xbf0d('0x57')]({'where':{'id':_0x3d0b66[_0xbf0d('0x56')]['id'],'UserId':null}})[_0xbf0d('0x1f')](handleEntityNotFound(_0x32df49,null))[_0xbf0d('0x1f')](function(_0x307522){if(_0x307522){_0x5e2703['message']=_0x307522[_0xbf0d('0x75')]({'plain':!![]});return db[_0xbf0d('0x76')][_0xbf0d('0x57')]({'where':{'id':_0x307522['OpenchannelInteractionId']}});}return null;})[_0xbf0d('0x1f')](handleEntityNotFound(_0x32df49,null))[_0xbf0d('0x1f')](function(_0x388748){if(_0x388748){_0x5e2703['interaction']=_0x388748['get']({'plain':!![]});interaction_log[_0xbf0d('0x20')](_0xbf0d('0x77'),_0x3d0b66[_0xbf0d('0x69')]['id'],_0x3d0b66[_0xbf0d('0x69')]['name'],_0x3d0b66['user'][_0xbf0d('0x6a')],_0x5e2703[_0xbf0d('0x67')]['id'],_0x3d0b66[_0xbf0d('0x59')]?JSON[_0xbf0d('0x6b')](_0x3d0b66[_0xbf0d('0x59')]):_0xbf0d('0x6c'));return respondWithRpcPromise(_0xbf0d('0x78'),_0xbf0d('0x79'),_0x5e2703);}return null;})[_0xbf0d('0x1f')](function(_0x1495aa){if(_0x1495aa){_0x1495aa['message'][_0xbf0d('0x70')]=util[_0xbf0d('0x5f')](_0xbf0d('0x71'),_0x3d0b66['user'][_0xbf0d('0x38')]);_0x1495aa[_0xbf0d('0x27')][_0xbf0d('0x72')]=_0x5e2703[_0xbf0d('0x72')];_0x1495aa[_0xbf0d('0x27')][_0xbf0d('0x7a')]='reject';respondWithRpcPromise(_0xbf0d('0x73'),'EventManager',{'event':_0xbf0d('0x7b'),'message':_0x1495aa['message']},client9002);return _0x5e2703;}return null;})['then'](respondWithResult(_0x32df49,null))[_0xbf0d('0x29')](handleError(_0x32df49,null));};
\ No newline at end of file
index 179b2d4..174e027 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb8db=['save','update','hasOwnProperty','exports','events','../../mysqldb','OpenchannelMessage','setMaxListeners'];(function(_0x3bf5df,_0xd2ae58){var _0x4df7cc=function(_0x4f5921){while(--_0x4f5921){_0x3bf5df['push'](_0x3bf5df['shift']());}};_0x4df7cc(++_0xd2ae58);}(_0xb8db,0x1e4));var _0xbb8d=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xb8db[_0x20a584];return _0x4b41a8;};'use strict';var EventEmitter=require(_0xbb8d('0x0'));var OpenchannelMessage=require(_0xbb8d('0x1'))['db'][_0xbb8d('0x2')];var OpenchannelMessageEvents=new EventEmitter();OpenchannelMessageEvents[_0xbb8d('0x3')](0x0);var events={'afterCreate':_0xbb8d('0x4'),'afterUpdate':_0xbb8d('0x5'),'afterDestroy':'remove'};function emitEvent(_0x2d28c5){return function(_0x4f6301,_0x17bce2,_0x2797f7){OpenchannelMessageEvents['emit'](_0x2d28c5+':'+_0x4f6301['id'],_0x4f6301);OpenchannelMessageEvents['emit'](_0x2d28c5,_0x4f6301);_0x2797f7(null);};}for(var e in events){if(events[_0xbb8d('0x6')](e)){var event=events[e];OpenchannelMessage['hook'](e,emitEvent(event));}}module[_0xbb8d('0x7')]=OpenchannelMessageEvents;
\ No newline at end of file
+var _0x7353=['exports','events','OpenchannelMessage','setMaxListeners','update','emit','hasOwnProperty','hook'];(function(_0x4eafed,_0x26e2bc){var _0x159c85=function(_0x6f129f){while(--_0x6f129f){_0x4eafed['push'](_0x4eafed['shift']());}};_0x159c85(++_0x26e2bc);}(_0x7353,0x131));var _0x3735=function(_0x38139e,_0x1651ed){_0x38139e=_0x38139e-0x0;var _0x4207f8=_0x7353[_0x38139e];return _0x4207f8;};'use strict';var EventEmitter=require(_0x3735('0x0'));var OpenchannelMessage=require('../../mysqldb')['db'][_0x3735('0x1')];var OpenchannelMessageEvents=new EventEmitter();OpenchannelMessageEvents[_0x3735('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0x3735('0x3'),'afterDestroy':'remove'};function emitEvent(_0x2f4dcd){return function(_0x2a0c59,_0xac2c9b,_0x33458d){OpenchannelMessageEvents[_0x3735('0x4')](_0x2f4dcd+':'+_0x2a0c59['id'],_0x2a0c59);OpenchannelMessageEvents[_0x3735('0x4')](_0x2f4dcd,_0x2a0c59);_0x33458d(null);};}for(var e in events){if(events[_0x3735('0x5')](e)){var event=events[e];OpenchannelMessage[_0x3735('0x6')](e,emitEvent(event));}}module[_0x3735('0x7')]=OpenchannelMessageEvents;
\ No newline at end of file
index dc4df22..20de5fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6668=['OpenchannelAccountId','CmContact','keys','info','OpenchannelMessage,\x20%s,\x20%s','afterCreate','format','Forwarding\x20message\x20%d\x20to\x20%s','replyUri','Interactions','Interaction','omit','Contact','POST','GET','Message\x20%d\x20forwarded\x20to\x20%s','threadId','update','finally','utf8mb4','utf8mb4_unicode_ci','util','api','bluebird','request-promise','path','./openchannelMessage.attributes','exports','define','OpenchannelMessage','fti_openchannel_messages','body','FULLTEXT','get','toLowerCase','out','secret','isNil','UserId','OpenchannelInteraction','findOne','OpenchannelInteractionId','then','createdAt','direction','catch','describe','OpenchannelAccount','find'];(function(_0x20cf8a,_0x44cd6b){var _0x54e165=function(_0xcce1d0){while(--_0xcce1d0){_0x20cf8a['push'](_0x20cf8a['shift']());}};_0x54e165(++_0x44cd6b);}(_0x6668,0x1ce));var _0x8666=function(_0x2b6858,_0x6830e){_0x2b6858=_0x2b6858-0x0;var _0x436b37=_0x6668[_0x2b6858];return _0x436b37;};'use strict';var _=require('lodash');var util=require(_0x8666('0x0'));var logger=require('../../config/logger')(_0x8666('0x1'));var moment=require('moment');var BPromise=require(_0x8666('0x2'));var rp=require(_0x8666('0x3'));var fs=require('fs');var path=require(_0x8666('0x4'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0x8666('0x5'));module[_0x8666('0x6')]=function(_0x4625c6,_0x50facb){return _0x4625c6[_0x8666('0x7')](_0x8666('0x8'),attributes,{'tableName':'openchannel_messages','paranoid':![],'indexes':[{'name':_0x8666('0x9'),'fields':[_0x8666('0xa')],'type':_0x8666('0xb')}],'timestamps':!![],'hooks':{'afterCreate':function(_0x450790,_0x10b330,_0xe6a392){var _0x401f31=_0x4625c6['models'];var _0x103e5e=_0x450790[_0x8666('0xc')]({'plain':!![]});if(_0x103e5e['direction'][_0x8666('0xd')]()==='in'||_0x103e5e['direction']['toLowerCase']()===_0x8666('0xe')&&!_0x103e5e[_0x8666('0xf')]&&!_[_0x8666('0x10')](_0x103e5e[_0x8666('0x11')])){_0x401f31[_0x8666('0x12')][_0x8666('0x13')]({'where':{'id':_0x103e5e[_0x8666('0x14')]}})[_0x8666('0x15')](function(_0x460e3c){if(_0x460e3c){_0x460e3c['update']({'lastMsgAt':_0x103e5e[_0x8666('0x16')],'lastMsgDirection':_0x103e5e[_0x8666('0x17')][_0x8666('0xd')]()});}})[_0x8666('0x18')](function(_0x370f3f){console['error'](_0x370f3f);});}if(_0x103e5e[_0x8666('0x17')]===_0x8666('0xe')&&!_0x103e5e[_0x8666('0xf')]){var _0x50148c;_0x401f31['CmContact'][_0x8666('0x19')]()[_0x8666('0x15')](function(_0x47cbb0){return _0x401f31[_0x8666('0x1a')][_0x8666('0x1b')]({'where':{'id':_0x103e5e[_0x8666('0x1c')]},'include':[{'model':_0x401f31[_0x8666('0x12')],'as':'Interactions','where':{'id':_0x103e5e[_0x8666('0x14')]},'limit':0x1,'include':[{'model':_0x401f31[_0x8666('0x1d')],'as':'Contact','attributes':_[_0x8666('0x1e')](_0x47cbb0)}]}]});})[_0x8666('0x15')](function(_0xa2628a){_0x50148c=_0xa2628a['get']({'plain':!![]});if(_0x50148c&&_0x50148c['replyUri']){logger[_0x8666('0x1f')](_0x8666('0x20'),_0x8666('0x21'),util[_0x8666('0x22')](_0x8666('0x23'),_0x103e5e['id'],_0x50148c[_0x8666('0x24')]));if(_0x50148c[_0x8666('0x25')]&&_0x50148c[_0x8666('0x25')]['length']){_0x103e5e[_0x8666('0x26')]=_[_0x8666('0x27')](_0x50148c[_0x8666('0x25')][0x0],_0x8666('0x28'));_0x103e5e[_0x8666('0x28')]=_0x50148c['Interactions'][0x0]['Contact'];}var _0x10b330={'method':_0x8666('0x29'),'uri':encodeURI(_0x50148c[_0x8666('0x24')]),'json':!![],'resolveWithFullResponse':!![]};switch(_0x10b330['method']){case _0x8666('0x2a'):_0x10b330['qs']=_0x103e5e;break;case _0x8666('0x29'):_0x10b330[_0x8666('0xa')]=_0x103e5e;break;}return rp(_0x10b330)['then'](function(_0x40e6b9){logger[_0x8666('0x1f')](_0x8666('0x20'),_0x8666('0x21'),util[_0x8666('0x22')](_0x8666('0x2b'),_0x103e5e['id'],_0x50148c[_0x8666('0x24')]));if(_0x40e6b9[_0x8666('0xa')][_0x8666('0x2c')]&&_0x40e6b9[_0x8666('0xa')][_0x8666('0x2c')]!=_0x103e5e[_0x8666('0x26')][_0x8666('0x2c')]){return _0x401f31[_0x8666('0x12')][_0x8666('0x2d')]({'threadId':_0x40e6b9['body']['threadId']},{'logging':!![],'where':{'id':_0x103e5e[_0x8666('0x26')]['id']}});}else{return;}})['then'](function(){return _0x450790[_0x8666('0x2d')]({'read':!![]});})[_0x8666('0x18')](function(_0x4458e8){logger['error'](_0x8666('0x20'),_0x8666('0x21'),util['inspect'](_0x4458e8,{'showHidden':![],'depth':null}));_0xe6a392();});}else{_0xe6a392();}})[_0x8666('0x2e')](function(){_0xe6a392();});}else{_0xe6a392();}}},'charset':_0x8666('0x2f'),'collate':_0x8666('0x30')});};
\ No newline at end of file
+var _0x7de1=['keys','replyUri','info','OpenchannelMessage,\x20%s,\x20%s','afterCreate','format','Forwarding\x20message\x20%d\x20to\x20%s','length','Interaction','omit','Contact','POST','method','GET','threadId','inspect','utf8mb4_unicode_ci','lodash','util','../../config/logger','bluebird','request-promise','path','rimraf','../../config/environment','./openchannelMessage.attributes','define','OpenchannelMessage','openchannel_messages','fti_openchannel_messages','body','models','get','direction','toLowerCase','out','isNil','UserId','findOne','OpenchannelInteractionId','then','update','createdAt','catch','error','secret','describe','OpenchannelAccount','find','OpenchannelAccountId','OpenchannelInteraction','Interactions','CmContact'];(function(_0x585219,_0x23ba0b){var _0x32c6fe=function(_0x463370){while(--_0x463370){_0x585219['push'](_0x585219['shift']());}};_0x32c6fe(++_0x23ba0b);}(_0x7de1,0xb0));var _0x17de=function(_0x19115e,_0x507bab){_0x19115e=_0x19115e-0x0;var _0x45bbd4=_0x7de1[_0x19115e];return _0x45bbd4;};'use strict';var _=require(_0x17de('0x0'));var util=require(_0x17de('0x1'));var logger=require(_0x17de('0x2'))('api');var moment=require('moment');var BPromise=require(_0x17de('0x3'));var rp=require(_0x17de('0x4'));var fs=require('fs');var path=require(_0x17de('0x5'));var rimraf=require(_0x17de('0x6'));var config=require(_0x17de('0x7'));var attributes=require(_0x17de('0x8'));module['exports']=function(_0x12081c,_0x51323d){return _0x12081c[_0x17de('0x9')](_0x17de('0xa'),attributes,{'tableName':_0x17de('0xb'),'paranoid':![],'indexes':[{'name':_0x17de('0xc'),'fields':[_0x17de('0xd')],'type':'FULLTEXT'}],'timestamps':!![],'hooks':{'afterCreate':function(_0x2145f8,_0x4f4727,_0x869d2c){var _0x1140c0=_0x12081c[_0x17de('0xe')];var _0x1daf94=_0x2145f8[_0x17de('0xf')]({'plain':!![]});if(_0x1daf94[_0x17de('0x10')][_0x17de('0x11')]()==='in'||_0x1daf94['direction'][_0x17de('0x11')]()===_0x17de('0x12')&&!_0x1daf94['secret']&&!_[_0x17de('0x13')](_0x1daf94[_0x17de('0x14')])){_0x1140c0['OpenchannelInteraction'][_0x17de('0x15')]({'where':{'id':_0x1daf94[_0x17de('0x16')]}})[_0x17de('0x17')](function(_0x17b7d7){if(_0x17b7d7){_0x17b7d7[_0x17de('0x18')]({'lastMsgAt':_0x1daf94[_0x17de('0x19')],'lastMsgDirection':_0x1daf94['direction']['toLowerCase']()});}})[_0x17de('0x1a')](function(_0x86186d){console[_0x17de('0x1b')](_0x86186d);});}if(_0x1daf94['direction']==='out'&&!_0x1daf94[_0x17de('0x1c')]){var _0x331ea3;_0x1140c0['CmContact'][_0x17de('0x1d')]()['then'](function(_0x2c9e0e){return _0x1140c0[_0x17de('0x1e')][_0x17de('0x1f')]({'where':{'id':_0x1daf94[_0x17de('0x20')]},'include':[{'model':_0x1140c0[_0x17de('0x21')],'as':_0x17de('0x22'),'where':{'id':_0x1daf94[_0x17de('0x16')]},'limit':0x1,'include':[{'model':_0x1140c0[_0x17de('0x23')],'as':'Contact','attributes':_[_0x17de('0x24')](_0x2c9e0e)}]}]});})[_0x17de('0x17')](function(_0x780e55){_0x331ea3=_0x780e55[_0x17de('0xf')]({'plain':!![]});if(_0x331ea3&&_0x331ea3[_0x17de('0x25')]){logger[_0x17de('0x26')](_0x17de('0x27'),_0x17de('0x28'),util[_0x17de('0x29')](_0x17de('0x2a'),_0x1daf94['id'],_0x331ea3[_0x17de('0x25')]));if(_0x331ea3[_0x17de('0x22')]&&_0x331ea3['Interactions'][_0x17de('0x2b')]){_0x1daf94[_0x17de('0x2c')]=_[_0x17de('0x2d')](_0x331ea3[_0x17de('0x22')][0x0],'Contact');_0x1daf94[_0x17de('0x2e')]=_0x331ea3['Interactions'][0x0][_0x17de('0x2e')];}var _0x4f4727={'method':_0x17de('0x2f'),'uri':encodeURI(_0x331ea3[_0x17de('0x25')]),'json':!![],'resolveWithFullResponse':!![]};switch(_0x4f4727[_0x17de('0x30')]){case _0x17de('0x31'):_0x4f4727['qs']=_0x1daf94;break;case'POST':_0x4f4727['body']=_0x1daf94;break;}return rp(_0x4f4727)[_0x17de('0x17')](function(_0x5986c8){logger[_0x17de('0x26')]('OpenchannelMessage,\x20%s,\x20%s','afterCreate',util[_0x17de('0x29')]('Message\x20%d\x20forwarded\x20to\x20%s',_0x1daf94['id'],_0x331ea3[_0x17de('0x25')]));if(_0x5986c8[_0x17de('0xd')]['threadId']&&_0x5986c8[_0x17de('0xd')]['threadId']!=_0x1daf94[_0x17de('0x2c')][_0x17de('0x32')]){return _0x1140c0[_0x17de('0x21')][_0x17de('0x18')]({'threadId':_0x5986c8['body']['threadId']},{'logging':!![],'where':{'id':_0x1daf94['Interaction']['id']}});}else{return;}})[_0x17de('0x17')](function(){return _0x2145f8[_0x17de('0x18')]({'read':!![]});})[_0x17de('0x1a')](function(_0x4d141b){logger[_0x17de('0x1b')]('OpenchannelMessage,\x20%s,\x20%s',_0x17de('0x28'),util[_0x17de('0x33')](_0x4d141b,{'showHidden':![],'depth':null}));_0x869d2c();});}else{_0x869d2c();}})['finally'](function(){_0x869d2c();});}else{_0x869d2c();}}},'charset':'utf8mb4','collate':_0x17de('0x34')});};
\ No newline at end of file
index 9412bfb..e60d885 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f0c=['../../config/logger','rpc','jayson/promise','client','http','defaults','localhost','redis','./openchannelMessage.socket','register','then','info','OpenchannelMessage,\x20%s,\x20%s','debug','OpenchannelMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','CreateOpenchannelMessage','body','util','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0xa234b6,_0x5333c7){var _0x38e2c5=function(_0x53e499){while(--_0x53e499){_0xa234b6['push'](_0xa234b6['shift']());}};_0x38e2c5(++_0x5333c7);}(_0x5f0c,0x1cb));var _0xc5f0=function(_0xa3d694,_0x4a4430){_0xa3d694=_0xa3d694-0x0;var _0x385c16=_0x5f0c[_0xa3d694];return _0x385c16;};'use strict';var _=require('lodash');var util=require(_0xc5f0('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xc5f0('0x1'));var fs=require('fs');var Redis=require(_0xc5f0('0x2'));var db=require(_0xc5f0('0x3'))['db'];var utils=require(_0xc5f0('0x4'));var logger=require(_0xc5f0('0x5'))(_0xc5f0('0x6'));var config=require('../../config/environment');var jayson=require(_0xc5f0('0x7'));var client=jayson[_0xc5f0('0x8')][_0xc5f0('0x9')]({'port':0x232a});config['redis']=_[_0xc5f0('0xa')](config['redis'],{'host':_0xc5f0('0xb'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xc5f0('0xc')]));require(_0xc5f0('0xd'))[_0xc5f0('0xe')](socket);function respondWithRpcPromise(_0x6d510b,_0x2fad96,_0x3607a7){return new BPromise(function(_0x3d828e,_0x5d4760){return client['request'](_0x6d510b,_0x3607a7)[_0xc5f0('0xf')](function(_0x53facd){logger[_0xc5f0('0x10')](_0xc5f0('0x11'),_0x2fad96,'request\x20sent');logger[_0xc5f0('0x12')](_0xc5f0('0x13'),_0x2fad96,_0xc5f0('0x14'),JSON[_0xc5f0('0x15')](_0x53facd));if(_0x53facd['error']){if(_0x53facd[_0xc5f0('0x16')][_0xc5f0('0x17')]===0x1f4){logger[_0xc5f0('0x16')](_0xc5f0('0x11'),_0x2fad96,_0x53facd['error'][_0xc5f0('0x18')]);return _0x5d4760(_0x53facd[_0xc5f0('0x16')][_0xc5f0('0x18')]);}logger['error'](_0xc5f0('0x11'),_0x2fad96,_0x53facd[_0xc5f0('0x16')][_0xc5f0('0x18')]);return _0x3d828e(_0x53facd['error'][_0xc5f0('0x18')]);}else{logger[_0xc5f0('0x10')]('OpenchannelMessage,\x20%s,\x20%s',_0x2fad96,'request\x20sent');_0x3d828e(_0x53facd[_0xc5f0('0x19')][_0xc5f0('0x18')]);}})[_0xc5f0('0x1a')](function(_0x1cd779){logger['error'](_0xc5f0('0x11'),_0x2fad96,_0x1cd779);_0x5d4760(_0x1cd779);});});}exports[_0xc5f0('0x1b')]=function(_0x48c9e5){var _0x1c5764=this;return new Promise(function(_0x1cfeca,_0x2ddc13){return db['OpenchannelMessage']['create'](_0x48c9e5[_0xc5f0('0x1c')],{'raw':_0x48c9e5['options']?_0x48c9e5['options']['raw']===undefined?!![]:![]:!![]})[_0xc5f0('0xf')](function(_0x19b880){logger['info'](_0xc5f0('0x1b'),_0x48c9e5);logger[_0xc5f0('0x12')](_0xc5f0('0x1b'),_0x48c9e5,JSON[_0xc5f0('0x15')](_0x19b880));_0x1cfeca(_0x19b880);})[_0xc5f0('0x1a')](function(_0x280b47){logger[_0xc5f0('0x16')](_0xc5f0('0x1b'),_0x280b47['message'],_0x48c9e5);_0x2ddc13(_0x1c5764[_0xc5f0('0x16')](0x1f4,_0x280b47['message']));});});};
\ No newline at end of file
+var _0x7e9e=['rpc','../../config/environment','jayson/promise','redis','defaults','localhost','socket.io-emitter','./openchannelMessage.socket','request','request\x20sent','debug','OpenchannelMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','OpenchannelMessage,\x20%s,\x20%s','message','result','OpenchannelMessage','create','body','options','raw','then','CreateOpenchannelMessage','catch','util','moment','bluebird','randomstring','ioredis','../../config/utils'];(function(_0x24ef2d,_0x2b7261){var _0x34345a=function(_0x2a438e){while(--_0x2a438e){_0x24ef2d['push'](_0x24ef2d['shift']());}};_0x34345a(++_0x2b7261);}(_0x7e9e,0x7a));var _0xe7e9=function(_0x5e1b91,_0x236f17){_0x5e1b91=_0x5e1b91-0x0;var _0x59b52f=_0x7e9e[_0x5e1b91];return _0x59b52f;};'use strict';var _=require('lodash');var util=require(_0xe7e9('0x0'));var moment=require(_0xe7e9('0x1'));var BPromise=require(_0xe7e9('0x2'));var rs=require(_0xe7e9('0x3'));var fs=require('fs');var Redis=require(_0xe7e9('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0xe7e9('0x5'));var logger=require('../../config/logger')(_0xe7e9('0x6'));var config=require(_0xe7e9('0x7'));var jayson=require(_0xe7e9('0x8'));var client=jayson['client']['http']({'port':0x232a});config[_0xe7e9('0x9')]=_[_0xe7e9('0xa')](config['redis'],{'host':_0xe7e9('0xb'),'port':0x18eb});var socket=require(_0xe7e9('0xc'))(new Redis(config['redis']));require(_0xe7e9('0xd'))['register'](socket);function respondWithRpcPromise(_0x403995,_0x930ee9,_0x3a190f){return new BPromise(function(_0x5ec106,_0x51bd7a){return client[_0xe7e9('0xe')](_0x403995,_0x3a190f)['then'](function(_0x5a5f33){logger['info']('OpenchannelMessage,\x20%s,\x20%s',_0x930ee9,_0xe7e9('0xf'));logger[_0xe7e9('0x10')](_0xe7e9('0x11'),_0x930ee9,_0xe7e9('0xf'),JSON[_0xe7e9('0x12')](_0x5a5f33));if(_0x5a5f33['error']){if(_0x5a5f33[_0xe7e9('0x13')][_0xe7e9('0x14')]===0x1f4){logger['error'](_0xe7e9('0x15'),_0x930ee9,_0x5a5f33[_0xe7e9('0x13')][_0xe7e9('0x16')]);return _0x51bd7a(_0x5a5f33[_0xe7e9('0x13')][_0xe7e9('0x16')]);}logger[_0xe7e9('0x13')](_0xe7e9('0x15'),_0x930ee9,_0x5a5f33[_0xe7e9('0x13')]['message']);return _0x5ec106(_0x5a5f33[_0xe7e9('0x13')]['message']);}else{logger['info'](_0xe7e9('0x15'),_0x930ee9,_0xe7e9('0xf'));_0x5ec106(_0x5a5f33[_0xe7e9('0x17')][_0xe7e9('0x16')]);}})['catch'](function(_0x4eabb7){logger['error'](_0xe7e9('0x15'),_0x930ee9,_0x4eabb7);_0x51bd7a(_0x4eabb7);});});}exports['CreateOpenchannelMessage']=function(_0x31ef51){var _0x5f46b4=this;return new Promise(function(_0x4fc35f,_0x5b81fd){return db[_0xe7e9('0x18')][_0xe7e9('0x19')](_0x31ef51[_0xe7e9('0x1a')],{'raw':_0x31ef51[_0xe7e9('0x1b')]?_0x31ef51[_0xe7e9('0x1b')][_0xe7e9('0x1c')]===undefined?!![]:![]:!![]})[_0xe7e9('0x1d')](function(_0xa55ea){logger['info'](_0xe7e9('0x1e'),_0x31ef51);logger[_0xe7e9('0x10')](_0xe7e9('0x1e'),_0x31ef51,JSON['stringify'](_0xa55ea));_0x4fc35f(_0xa55ea);})[_0xe7e9('0x1f')](function(_0x459cb3){logger['error'](_0xe7e9('0x1e'),_0x459cb3[_0xe7e9('0x16')],_0x31ef51);_0x5b81fd(_0x5f46b4[_0xe7e9('0x13')](0x1f4,_0x459cb3[_0xe7e9('0x16')]));});});};
\ No newline at end of file
index c9a6b57..e8da8fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4074=['./openchannelMessage.events','save','remove','emit','removeListener','register','length','openchannelMessage:'];(function(_0x3b0731,_0xcf9925){var _0x4204d7=function(_0x635ac5){while(--_0x635ac5){_0x3b0731['push'](_0x3b0731['shift']());}};_0x4204d7(++_0xcf9925);}(_0x4074,0xf0));var _0x4407=function(_0x85dcd7,_0x3aa912){_0x85dcd7=_0x85dcd7-0x0;var _0x35dc39=_0x4074[_0x85dcd7];return _0x35dc39;};'use strict';var OpenchannelMessageEvents=require(_0x4407('0x0'));var events=[_0x4407('0x1'),_0x4407('0x2'),'update'];function createListener(_0x1021e6,_0x2a756){return function(_0x14c0bc){_0x2a756[_0x4407('0x3')](_0x1021e6,_0x14c0bc);};}function removeListener(_0x188494,_0x3c9f5c){return function(){OpenchannelMessageEvents[_0x4407('0x4')](_0x188494,_0x3c9f5c);};}exports[_0x4407('0x5')]=function(_0x3f085d){for(var _0x35899d=0x0,_0x4933cf=events[_0x4407('0x6')];_0x35899d<_0x4933cf;_0x35899d++){var _0x5f0699=events[_0x35899d];var _0x414f0a=createListener(_0x4407('0x7')+_0x5f0699,_0x3f085d);OpenchannelMessageEvents['on'](_0x5f0699,_0x414f0a);}};
\ No newline at end of file
+var _0x98d3=['./openchannelMessage.events','save','update','emit','register','length','openchannelMessage:'];(function(_0x59aadb,_0xa1a598){var _0x237375=function(_0x28f686){while(--_0x28f686){_0x59aadb['push'](_0x59aadb['shift']());}};_0x237375(++_0xa1a598);}(_0x98d3,0x173));var _0x398d=function(_0x2ec06f,_0x3bb56d){_0x2ec06f=_0x2ec06f-0x0;var _0x3a1c71=_0x98d3[_0x2ec06f];return _0x3a1c71;};'use strict';var OpenchannelMessageEvents=require(_0x398d('0x0'));var events=[_0x398d('0x1'),'remove',_0x398d('0x2')];function createListener(_0x4f5ff0,_0x18da44){return function(_0x48fcf0){_0x18da44[_0x398d('0x3')](_0x4f5ff0,_0x48fcf0);};}function removeListener(_0x41f57c,_0x4f7a58){return function(){OpenchannelMessageEvents['removeListener'](_0x41f57c,_0x4f7a58);};}exports[_0x398d('0x4')]=function(_0x25d38f){for(var _0x2c3c4c=0x0,_0x502652=events[_0x398d('0x5')];_0x2c3c4c<_0x502652;_0x2c3c4c++){var _0x391d99=events[_0x2c3c4c];var _0x3029f3=createListener(_0x398d('0x6')+_0x391d99,_0x25d38f);OpenchannelMessageEvents['on'](_0x391d99,_0x3029f3);}};
\ No newline at end of file
index b5fd520..835e12a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0aac=['addTeams','addAgents','update','delete','destroy','removeTeams','removeAgents','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelQueue.controller','get','isAuthenticated','index','/describe','describe','/:id','/:id/members','getMembers','/:id/teams','getTeams','/:id/users','post','create'];(function(_0x1da04e,_0x31024b){var _0xdd8c41=function(_0x2036f9){while(--_0x2036f9){_0x1da04e['push'](_0x1da04e['shift']());}};_0xdd8c41(++_0x31024b);}(_0x0aac,0xf7));var _0xc0aa=function(_0xdd45,_0x2daf10){_0xdd45=_0xdd45-0x0;var _0x106736=_0x0aac[_0xdd45];return _0x106736;};'use strict';var multer=require(_0xc0aa('0x0'));var util=require(_0xc0aa('0x1'));var path=require(_0xc0aa('0x2'));var timeout=require(_0xc0aa('0x3'));var express=require(_0xc0aa('0x4'));var router=express[_0xc0aa('0x5')]();var auth=require(_0xc0aa('0x6'));var interaction=require(_0xc0aa('0x7'));var config=require(_0xc0aa('0x8'));var controller=require(_0xc0aa('0x9'));router[_0xc0aa('0xa')]('/',auth[_0xc0aa('0xb')](),controller[_0xc0aa('0xc')]);router['get'](_0xc0aa('0xd'),auth['isAuthenticated'](),controller[_0xc0aa('0xe')]);router[_0xc0aa('0xa')](_0xc0aa('0xf'),auth['isAuthenticated'](),controller['show']);router['get'](_0xc0aa('0x10'),auth[_0xc0aa('0xb')](),controller[_0xc0aa('0x11')]);router[_0xc0aa('0xa')](_0xc0aa('0x12'),auth[_0xc0aa('0xb')](),controller[_0xc0aa('0x13')]);router[_0xc0aa('0xa')](_0xc0aa('0x14'),auth['isAuthenticated'](),controller['getAgents']);router[_0xc0aa('0x15')]('/',auth['isAuthenticated'](),controller[_0xc0aa('0x16')]);router[_0xc0aa('0x15')](_0xc0aa('0x12'),auth['isAuthenticated'](),controller[_0xc0aa('0x17')]);router[_0xc0aa('0x15')](_0xc0aa('0x14'),auth[_0xc0aa('0xb')](),controller[_0xc0aa('0x18')]);router['put'](_0xc0aa('0xf'),auth['isAuthenticated'](),controller[_0xc0aa('0x19')]);router[_0xc0aa('0x1a')]('/:id',auth[_0xc0aa('0xb')](),controller[_0xc0aa('0x1b')]);router['delete']('/:id/teams',auth[_0xc0aa('0xb')](),controller[_0xc0aa('0x1c')]);router[_0xc0aa('0x1a')]('/:id/users',auth[_0xc0aa('0xb')](),controller[_0xc0aa('0x1d')]);module['exports']=router;
\ No newline at end of file
+var _0x7df0=['destroy','removeTeams','removeAgents','multer','util','../../components/interaction/service','../../config/environment','./openchannelQueue.controller','get','/describe','isAuthenticated','/:id/members','/:id/teams','getTeams','getAgents','post','create','addTeams','addAgents','/:id','update','delete'];(function(_0x6131cd,_0x4c26a1){var _0x47e916=function(_0x1f2bce){while(--_0x1f2bce){_0x6131cd['push'](_0x6131cd['shift']());}};_0x47e916(++_0x4c26a1);}(_0x7df0,0xc9));var _0x07df=function(_0x52121d,_0x1d1704){_0x52121d=_0x52121d-0x0;var _0x448627=_0x7df0[_0x52121d];return _0x448627;};'use strict';var multer=require(_0x07df('0x0'));var util=require(_0x07df('0x1'));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(_0x07df('0x2'));var config=require(_0x07df('0x3'));var controller=require(_0x07df('0x4'));router[_0x07df('0x5')]('/',auth['isAuthenticated'](),controller['index']);router[_0x07df('0x5')](_0x07df('0x6'),auth[_0x07df('0x7')](),controller['describe']);router[_0x07df('0x5')]('/:id',auth['isAuthenticated'](),controller['show']);router[_0x07df('0x5')](_0x07df('0x8'),auth[_0x07df('0x7')](),controller['getMembers']);router[_0x07df('0x5')](_0x07df('0x9'),auth['isAuthenticated'](),controller[_0x07df('0xa')]);router[_0x07df('0x5')]('/:id/users',auth[_0x07df('0x7')](),controller[_0x07df('0xb')]);router[_0x07df('0xc')]('/',auth[_0x07df('0x7')](),controller[_0x07df('0xd')]);router[_0x07df('0xc')](_0x07df('0x9'),auth[_0x07df('0x7')](),controller[_0x07df('0xe')]);router[_0x07df('0xc')]('/:id/users',auth['isAuthenticated'](),controller[_0x07df('0xf')]);router['put'](_0x07df('0x10'),auth[_0x07df('0x7')](),controller[_0x07df('0x11')]);router[_0x07df('0x12')](_0x07df('0x10'),auth[_0x07df('0x7')](),controller[_0x07df('0x13')]);router[_0x07df('0x12')](_0x07df('0x9'),auth[_0x07df('0x7')](),controller[_0x07df('0x14')]);router[_0x07df('0x12')]('/:id/users',auth['isAuthenticated'](),controller[_0x07df('0x15')]);module['exports']=router;
\ No newline at end of file
index 192964f..a1ee19c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe53f=['roundrobin','sequelize','exports','name','STRING','INTEGER','ENUM','rrmemory','beepall'];(function(_0xf50820,_0x56f041){var _0x2a9b10=function(_0x33f0f4){while(--_0x33f0f4){_0xf50820['push'](_0xf50820['shift']());}};_0x2a9b10(++_0x56f041);}(_0xe53f,0x1ba));var _0xfe53=function(_0x3a128c,_0x1a8392){_0x3a128c=_0x3a128c-0x0;var _0x135d04=_0xe53f[_0x3a128c];return _0x135d04;};'use strict';var Sequelize=require(_0xfe53('0x0'));module[_0xfe53('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0xfe53('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xfe53('0x3')]},'timeout':{'type':Sequelize[_0xfe53('0x4')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xfe53('0x5')](_0xfe53('0x6'),_0xfe53('0x7'),_0xfe53('0x8'))}};
\ No newline at end of file
+var _0x672f=['sequelize','exports','STRING','name','INTEGER','rrmemory'];(function(_0x569055,_0x6e9f29){var _0x2e080c=function(_0x5738b1){while(--_0x5738b1){_0x569055['push'](_0x569055['shift']());}};_0x2e080c(++_0x6e9f29);}(_0x672f,0x15c));var _0xf672=function(_0x24e36d,_0xe23691){_0x24e36d=_0x24e36d-0x0;var _0xb29919=_0x672f[_0x24e36d];return _0xb29919;};'use strict';var Sequelize=require(_0xf672('0x0'));module[_0xf672('0x1')]={'name':{'type':Sequelize[_0xf672('0x2')],'unique':_0xf672('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0xf672('0x4')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0xf672('0x5'),'beepall','roundrobin')}};
\ No newline at end of file
index 13d92e4..eb40eb1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6c2e=['every','TeamId','compact','value','removeAgents','userOpenchannelQueue:remove','addAgents','spread','getAgents','hasOwnProperty','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults','socket.io-emitter','./openchannelQueue.socket','register','end','status','json','count','offset','limit','set','apply','reject','save','update','destroy','then','OpenchannelQueues','UserProfileResource','stack','name','send','index','OpenchannelQueue','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','nolimit','order','sort','where','pick','filter','merge','map','key','VIRTUAL','field','options','includeAll','include','rows','show','params','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','catch','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','getMembers','findOne','OpenchannelQueueId','UserOpenchannelQueue','User','agent','openchannelPause','updatedAt','createdAt','format','%s/%s','SIP','getTeams','Team','addTeams','findAll','online','voicePause','flatMap','Agents','transaction','findOrCreate','forEach','emit','userOpenchannelQueue:save','removeTeams','ids','select','tq.TeamId','from','team_has_openchannel_queues','join','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','clone','ut.UserId\x20=\x20?','sequelize','toString','QueryTypes'];(function(_0x424c53,_0x4559c7){var _0x93ac6d=function(_0x408fe7){while(--_0x408fe7){_0x424c53['push'](_0x424c53['shift']());}};_0x93ac6d(++_0x4559c7);}(_0x6c2e,0x118));var _0xe6c2=function(_0x4a6c2d,_0x4f398c){_0x4a6c2d=_0x4a6c2d-0x0;var _0x38f531=_0x6c2e[_0x4a6c2d];return _0x38f531;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xe6c2('0x0'));var rimraf=require(_0xe6c2('0x1'));var zipdir=require(_0xe6c2('0x2'));var jsonpatch=require(_0xe6c2('0x3'));var rp=require(_0xe6c2('0x4'));var moment=require(_0xe6c2('0x5'));var BPromise=require(_0xe6c2('0x6'));var Mustache=require(_0xe6c2('0x7'));var util=require('util');var path=require('path');var sox=require(_0xe6c2('0x8'));var csv=require(_0xe6c2('0x9'));var ejs=require(_0xe6c2('0xa'));var fs=require('fs');var _=require(_0xe6c2('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xe6c2('0xc'));var deskjs=require(_0xe6c2('0xd'));var toCsv=require(_0xe6c2('0x9'));var querystring=require(_0xe6c2('0xe'));var Papa=require(_0xe6c2('0xf'));var Redis=require(_0xe6c2('0x10'));var authService=require(_0xe6c2('0x11'));var qs=require(_0xe6c2('0x12'));var hardwareService=require(_0xe6c2('0x13'));var logger=require(_0xe6c2('0x14'))(_0xe6c2('0x15'));var utils=require(_0xe6c2('0x16'));var config=require('../../config/environment');var db=require(_0xe6c2('0x17'))['db'];config[_0xe6c2('0x18')]=_[_0xe6c2('0x19')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0xe6c2('0x1a'))(new Redis(config['redis']));require(_0xe6c2('0x1b'))[_0xe6c2('0x1c')](socket);function respondWithStatusCode(_0x139ae9,_0x42d949){_0x42d949=_0x42d949||0xcc;return function(_0x2df010){if(_0x2df010){return _0x139ae9['sendStatus'](_0x42d949);}return _0x139ae9['status'](_0x42d949)[_0xe6c2('0x1d')]();};}function respondWithResult(_0x3e7ec1,_0x440e82){_0x440e82=_0x440e82||0xc8;return function(_0x46e044){if(_0x46e044){return _0x3e7ec1[_0xe6c2('0x1e')](_0x440e82)[_0xe6c2('0x1f')](_0x46e044);}};}function respondWithFilteredResult(_0x1b8815,_0x55b4c3){return function(_0x1eb8a7){if(_0x1eb8a7){var _0x35fdde=_0x1eb8a7[_0xe6c2('0x20')],_0x5a6e24=_0x55b4c3[_0xe6c2('0x21')],_0x4a90ca=_0x55b4c3[_0xe6c2('0x21')]+_0x55b4c3[_0xe6c2('0x22')],_0x457e3c;if(_0x4a90ca>=_0x35fdde){_0x4a90ca=_0x35fdde;_0x457e3c=0xc8;}else{_0x457e3c=0xce;}_0x1b8815[_0xe6c2('0x1e')](_0x457e3c);return _0x1b8815[_0xe6c2('0x23')]('Content-Range',_0x5a6e24+'-'+_0x4a90ca+'/'+_0x35fdde)[_0xe6c2('0x1f')](_0x1eb8a7);}return null;};}function patchUpdates(_0x2f40bf){return function(_0x115f2f){try{jsonpatch[_0xe6c2('0x24')](_0x115f2f,_0x2f40bf,!![]);}catch(_0x5d47e5){return BPromise[_0xe6c2('0x25')](_0x5d47e5);}return _0x115f2f[_0xe6c2('0x26')]();};}function saveUpdates(_0x2e0d2d,_0x5eb35a){return function(_0x3a0e15){if(_0x3a0e15){return _0x3a0e15[_0xe6c2('0x27')](_0x2e0d2d)['then'](function(_0xb1920d){return _0xb1920d;});}return null;};}function removeEntity(_0x39f4bd,_0x2202bc){return function(_0x3dcbd0){if(_0x3dcbd0){return _0x3dcbd0[_0xe6c2('0x28')]()[_0xe6c2('0x29')](function(){var _0x175d54=_0x3dcbd0['get']({'plain':!![]});var _0x26ab37=_0xe6c2('0x2a');return db[_0xe6c2('0x2b')][_0xe6c2('0x28')]({'where':{'type':_0x26ab37,'resourceId':_0x175d54['id']}})[_0xe6c2('0x29')](function(){return _0x3dcbd0;});})['then'](function(){_0x39f4bd['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x208db5,_0x1cf0cc){return function(_0x38dd5b){if(!_0x38dd5b){_0x208db5['sendStatus'](0x194);}return _0x38dd5b;};}function handleError(_0x1dbf12,_0xa5aca5){_0xa5aca5=_0xa5aca5||0x1f4;return function(_0x239dd4){logger['error'](_0x239dd4[_0xe6c2('0x2c')]);if(_0x239dd4[_0xe6c2('0x2d')]){delete _0x239dd4[_0xe6c2('0x2d')];}_0x1dbf12['status'](_0xa5aca5)[_0xe6c2('0x2e')](_0x239dd4);};}exports[_0xe6c2('0x2f')]=function(_0x337ea5,_0x4181d7){var _0x3a1a9d={},_0x19025a={},_0x439199={'count':0x0,'rows':[]};var _0x3eff68=db[_0xe6c2('0x30')][_0xe6c2('0x31')];_0x19025a[_0xe6c2('0x32')]=_[_0xe6c2('0x33')](_0x3eff68);_0x19025a[_0xe6c2('0x34')]=_[_0xe6c2('0x33')](_0x337ea5[_0xe6c2('0x34')]);_0x19025a[_0xe6c2('0x35')]=_[_0xe6c2('0x36')](_0x19025a[_0xe6c2('0x32')],_0x19025a[_0xe6c2('0x34')]);_0x3a1a9d['attributes']=_['intersection'](_0x19025a['model'],qs[_0xe6c2('0x37')](_0x337ea5['query']['fields']));_0x3a1a9d[_0xe6c2('0x38')]=_0x3a1a9d[_0xe6c2('0x38')][_0xe6c2('0x39')]?_0x3a1a9d[_0xe6c2('0x38')]:_0x19025a[_0xe6c2('0x32')];if(!_0x337ea5[_0xe6c2('0x34')]['hasOwnProperty'](_0xe6c2('0x3a'))){_0x3a1a9d[_0xe6c2('0x22')]=qs[_0xe6c2('0x22')](_0x337ea5[_0xe6c2('0x34')][_0xe6c2('0x22')]);_0x3a1a9d[_0xe6c2('0x21')]=qs[_0xe6c2('0x21')](_0x337ea5[_0xe6c2('0x34')][_0xe6c2('0x21')]);}_0x3a1a9d[_0xe6c2('0x3b')]=qs[_0xe6c2('0x3c')](_0x337ea5[_0xe6c2('0x34')][_0xe6c2('0x3c')]);_0x3a1a9d[_0xe6c2('0x3d')]=qs['filters'](_[_0xe6c2('0x3e')](_0x337ea5[_0xe6c2('0x34')],_0x19025a[_0xe6c2('0x35')]));if(_0x337ea5[_0xe6c2('0x34')][_0xe6c2('0x3f')]){_0x3a1a9d[_0xe6c2('0x3d')]=_[_0xe6c2('0x40')](_0x3a1a9d['where'],{'$or':_[_0xe6c2('0x41')](_0x3eff68,function(_0xf63d40){if(_0xf63d40['type'][_0xe6c2('0x42')]!==_0xe6c2('0x43')){var _0x1630ce={};_0x1630ce[_0xf63d40[_0xe6c2('0x44')]]={'$like':'%'+_0x337ea5[_0xe6c2('0x34')][_0xe6c2('0x3f')]+'%'};return _0x1630ce;}})});}_0x3a1a9d=_[_0xe6c2('0x40')]({},_0x3a1a9d,_0x337ea5[_0xe6c2('0x45')]);var _0x11aeb0={'where':_0x3a1a9d[_0xe6c2('0x3d')]};return db[_0xe6c2('0x30')]['count'](_0x11aeb0)[_0xe6c2('0x29')](function(_0x5b38c7){_0x439199['count']=_0x5b38c7;if(_0x337ea5[_0xe6c2('0x34')][_0xe6c2('0x46')]){_0x3a1a9d[_0xe6c2('0x47')]=[{'all':!![]}];}return db[_0xe6c2('0x30')]['findAll'](_0x3a1a9d);})['then'](function(_0x2c0909){_0x439199[_0xe6c2('0x48')]=_0x2c0909;return _0x439199;})[_0xe6c2('0x29')](respondWithFilteredResult(_0x4181d7,_0x3a1a9d))['catch'](handleError(_0x4181d7,null));};exports[_0xe6c2('0x49')]=function(_0x29ecba,_0x5a2e6e){var _0x82b29c={'raw':!![],'where':{'id':_0x29ecba[_0xe6c2('0x4a')]['id']}},_0x994b6a={};_0x994b6a['model']=_['keys'](db['OpenchannelQueue'][_0xe6c2('0x31')]);_0x994b6a[_0xe6c2('0x34')]=_[_0xe6c2('0x33')](_0x29ecba[_0xe6c2('0x34')]);_0x994b6a[_0xe6c2('0x35')]=_[_0xe6c2('0x36')](_0x994b6a[_0xe6c2('0x32')],_0x994b6a[_0xe6c2('0x34')]);_0x82b29c[_0xe6c2('0x38')]=_[_0xe6c2('0x36')](_0x994b6a[_0xe6c2('0x32')],qs[_0xe6c2('0x37')](_0x29ecba[_0xe6c2('0x34')][_0xe6c2('0x37')]));_0x82b29c[_0xe6c2('0x38')]=_0x82b29c[_0xe6c2('0x38')][_0xe6c2('0x39')]?_0x82b29c['attributes']:_0x994b6a[_0xe6c2('0x32')];if(_0x29ecba[_0xe6c2('0x34')][_0xe6c2('0x46')]){_0x82b29c[_0xe6c2('0x47')]=[{'all':!![]}];}_0x82b29c=_[_0xe6c2('0x40')]({},_0x82b29c,_0x29ecba['options']);return db[_0xe6c2('0x30')][_0xe6c2('0x4b')](_0x82b29c)[_0xe6c2('0x29')](handleEntityNotFound(_0x5a2e6e,null))[_0xe6c2('0x29')](respondWithResult(_0x5a2e6e,null))['catch'](handleError(_0x5a2e6e,null));};exports[_0xe6c2('0x4c')]=function(_0x211875,_0x4e784a){return db[_0xe6c2('0x30')][_0xe6c2('0x4c')](_0x211875[_0xe6c2('0x4d')],{})[_0xe6c2('0x29')](function(_0x4f9c0c){var _0x1afab8=_0x211875[_0xe6c2('0x4e')][_0xe6c2('0x4f')]({'plain':!![]});if(!_0x1afab8)throw new Error(_0xe6c2('0x50'));if(_0x1afab8['role']===_0xe6c2('0x4e')){var _0xc24677=_0x4f9c0c['get']({'plain':!![]});var _0x151427=_0xe6c2('0x2a');return db[_0xe6c2('0x51')]['find']({'where':{'name':_0x151427,'userProfileId':_0x1afab8[_0xe6c2('0x52')]},'raw':!![]})['then'](function(_0x4bc8be){if(_0x4bc8be&&_0x4bc8be['autoAssociation']===0x0){return db[_0xe6c2('0x2b')][_0xe6c2('0x4c')]({'name':_0xc24677[_0xe6c2('0x2d')],'resourceId':_0xc24677['id'],'type':_0x4bc8be[_0xe6c2('0x2d')],'sectionId':_0x4bc8be['id']},{})[_0xe6c2('0x29')](function(){return _0x4f9c0c;});}else{return _0x4f9c0c;}})[_0xe6c2('0x53')](function(_0x459f6d){logger['error'](_0xe6c2('0x54'),_0x459f6d);throw _0x459f6d;});}return _0x4f9c0c;})[_0xe6c2('0x29')](respondWithResult(_0x4e784a,0xc9))[_0xe6c2('0x53')](handleError(_0x4e784a,null));};exports[_0xe6c2('0x27')]=function(_0x50557a,_0x52abc3){if(_0x50557a[_0xe6c2('0x4d')]['id']){delete _0x50557a[_0xe6c2('0x4d')]['id'];}return db['OpenchannelQueue']['find']({'where':{'id':_0x50557a[_0xe6c2('0x4a')]['id']}})[_0xe6c2('0x29')](handleEntityNotFound(_0x52abc3,null))[_0xe6c2('0x29')](saveUpdates(_0x50557a[_0xe6c2('0x4d')],null))[_0xe6c2('0x29')](respondWithResult(_0x52abc3,null))[_0xe6c2('0x53')](handleError(_0x52abc3,null));};exports[_0xe6c2('0x28')]=function(_0x583aac,_0x4b5e83){return db[_0xe6c2('0x30')][_0xe6c2('0x4b')]({'where':{'id':_0x583aac['params']['id']}})[_0xe6c2('0x29')](handleEntityNotFound(_0x4b5e83,null))[_0xe6c2('0x29')](removeEntity(_0x4b5e83,null))[_0xe6c2('0x53')](handleError(_0x4b5e83,null));};exports[_0xe6c2('0x55')]=function(_0x1abe1d,_0x444113){return db['OpenchannelQueue'][_0xe6c2('0x55')]()[_0xe6c2('0x29')](respondWithResult(_0x444113,null))[_0xe6c2('0x53')](handleError(_0x444113,null));};exports[_0xe6c2('0x56')]=function(_0x372f90,_0x237fcc,_0x2b2aa9){var _0x211f45={'raw':!![],'where':{}},_0x365bd3={},_0x4c59f3;return db[_0xe6c2('0x30')][_0xe6c2('0x57')]({'where':{'id':_0x372f90[_0xe6c2('0x4a')]['id']}})[_0xe6c2('0x29')](handleEntityNotFound(_0x237fcc,null))[_0xe6c2('0x29')](function(_0x3ee96d){if(_0x3ee96d){_0x4c59f3=_0x3ee96d[_0xe6c2('0x4f')]({'plain':!![]});_0x365bd3[_0xe6c2('0x32')]=_['keys'](db['UserOpenchannelQueue'][_0xe6c2('0x31')]);_0x365bd3[_0xe6c2('0x34')]=_[_0xe6c2('0x33')](_0x372f90['query']);_0x365bd3[_0xe6c2('0x35')]=_[_0xe6c2('0x36')](_0x365bd3[_0xe6c2('0x32')],_0x365bd3['query']);_0x211f45['attributes']=_[_0xe6c2('0x36')](_0x365bd3[_0xe6c2('0x32')],qs[_0xe6c2('0x37')](_0x372f90[_0xe6c2('0x34')][_0xe6c2('0x37')]));_0x211f45[_0xe6c2('0x38')]=_0x211f45[_0xe6c2('0x38')][_0xe6c2('0x39')]?_0x211f45['attributes']:_0x365bd3[_0xe6c2('0x32')];if(!_0x372f90[_0xe6c2('0x34')]['hasOwnProperty']('nolimit')){_0x211f45['limit']=qs['limit'](_0x372f90['query'][_0xe6c2('0x22')]);_0x211f45[_0xe6c2('0x21')]=qs[_0xe6c2('0x21')](_0x372f90[_0xe6c2('0x34')][_0xe6c2('0x21')]);}_0x211f45['order']=qs[_0xe6c2('0x3c')](_0x372f90[_0xe6c2('0x34')][_0xe6c2('0x3c')]);_0x211f45[_0xe6c2('0x3d')]=qs[_0xe6c2('0x35')](_['pick'](_0x372f90[_0xe6c2('0x34')],_0x365bd3[_0xe6c2('0x35')]));_0x211f45[_0xe6c2('0x3d')][_0xe6c2('0x58')]=_0x3ee96d['id'];if(_0x372f90[_0xe6c2('0x34')][_0xe6c2('0x3f')]){_0x211f45['where']=_['merge'](_0x211f45[_0xe6c2('0x3d')],{'$or':_[_0xe6c2('0x41')](_0x211f45['attributes'],function(_0x9370ce){var _0x17a4f3={};_0x17a4f3[_0x9370ce]={'$like':'%'+_0x372f90[_0xe6c2('0x34')][_0xe6c2('0x3f')]+'%'};return _0x17a4f3;})});}_0x211f45=_[_0xe6c2('0x40')]({},_0x211f45,_0x372f90[_0xe6c2('0x45')]);return db[_0xe6c2('0x59')]['findAll'](_0x211f45);}})[_0xe6c2('0x29')](function(_0x546435){if(_0x546435){return db[_0xe6c2('0x5a')]['findAndCountAll']({'where':{'id':_['map'](_0x546435,'UserId'),'role':_0xe6c2('0x5b')},'attributes':['id',_0xe6c2('0x2d'),_0xe6c2('0x5c'),_0xe6c2('0x5d'),_0xe6c2('0x5e')]});}})[_0xe6c2('0x29')](function(_0x27f9ec){if(_0x27f9ec){return{'count':_0x27f9ec[_0xe6c2('0x20')],'rows':_['map'](_0x27f9ec[_0xe6c2('0x48')],function(_0x4dda5e){return{'membername':_0x4dda5e['name'],'UserId':_0x4dda5e['id'],'queue_name':_0x4c59f3[_0xe6c2('0x2d')],'OpenchannelQueueId':_0x4c59f3['id'],'interface':util[_0xe6c2('0x5f')](_0xe6c2('0x60'),_0xe6c2('0x61'),_0x4dda5e[_0xe6c2('0x2d')]),'penalty':0x0,'paused':_0x4dda5e[_0xe6c2('0x5c')],'createdAt':_0x4dda5e[_0xe6c2('0x5e')],'updatedAt':_0x4dda5e[_0xe6c2('0x5d')]};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x237fcc,_0x211f45))[_0xe6c2('0x53')](handleError(_0x237fcc,null));};exports[_0xe6c2('0x62')]=function(_0x588d2d,_0x475ebf,_0xf5403e){var _0x414d48={};var _0x232ff0={};var _0x4b89a5;var _0x55ff46;return db[_0xe6c2('0x30')]['findOne']({'where':{'id':_0x588d2d['params']['id']}})['then'](handleEntityNotFound(_0x475ebf,null))['then'](function(_0x3c2b78){if(_0x3c2b78){_0x4b89a5=_0x3c2b78;_0x232ff0[_0xe6c2('0x32')]=_[_0xe6c2('0x33')](db[_0xe6c2('0x63')]['rawAttributes']);_0x232ff0['query']=_['keys'](_0x588d2d['query']);_0x232ff0[_0xe6c2('0x35')]=_[_0xe6c2('0x36')](_0x232ff0['model'],_0x232ff0[_0xe6c2('0x34')]);_0x414d48['attributes']=_[_0xe6c2('0x36')](_0x232ff0[_0xe6c2('0x32')],qs[_0xe6c2('0x37')](_0x588d2d[_0xe6c2('0x34')]['fields']));_0x414d48['attributes']=_0x414d48['attributes'][_0xe6c2('0x39')]?_0x414d48['attributes']:_0x232ff0[_0xe6c2('0x32')];_0x414d48[_0xe6c2('0x3b')]=qs[_0xe6c2('0x3c')](_0x588d2d[_0xe6c2('0x34')][_0xe6c2('0x3c')]);_0x414d48[_0xe6c2('0x3d')]=qs[_0xe6c2('0x35')](_[_0xe6c2('0x3e')](_0x588d2d[_0xe6c2('0x34')],_0x232ff0[_0xe6c2('0x35')]));if(_0x588d2d['query'][_0xe6c2('0x3f')]){_0x414d48[_0xe6c2('0x3d')]=_[_0xe6c2('0x40')](_0x414d48[_0xe6c2('0x3d')],{'$or':_[_0xe6c2('0x41')](_0x414d48[_0xe6c2('0x38')],function(_0x32a5ee){var _0x27d499={};_0x27d499[_0x32a5ee]={'$like':'%'+_0x588d2d[_0xe6c2('0x34')][_0xe6c2('0x3f')]+'%'};return _0x27d499;})});}_0x414d48=_[_0xe6c2('0x40')]({},_0x414d48,_0x588d2d[_0xe6c2('0x45')]);return _0x4b89a5[_0xe6c2('0x62')](_0x414d48);}})[_0xe6c2('0x29')](function(_0x5374dc){if(_0x5374dc){_0x55ff46=_0x5374dc['length'];if(!_0x588d2d[_0xe6c2('0x34')]['hasOwnProperty'](_0xe6c2('0x3a'))){_0x414d48['limit']=qs[_0xe6c2('0x22')](_0x588d2d['query'][_0xe6c2('0x22')]);_0x414d48[_0xe6c2('0x21')]=qs[_0xe6c2('0x21')](_0x588d2d[_0xe6c2('0x34')]['offset']);}return _0x4b89a5[_0xe6c2('0x62')](_0x414d48);}})[_0xe6c2('0x29')](function(_0x111e27){if(_0x111e27){return _0x111e27?{'count':_0x55ff46,'rows':_0x111e27}:null;}})[_0xe6c2('0x29')](respondWithResult(_0x475ebf,null))['catch'](handleError(_0x475ebf,null));};exports[_0xe6c2('0x64')]=function(_0x1a0b4e,_0x1d022c,_0x4a6ed9){var _0x4555b5=_0x1a0b4e[_0xe6c2('0x4d')]['teams'];return db[_0xe6c2('0x63')][_0xe6c2('0x65')]({'where':{'id':_[_0xe6c2('0x41')](_0x4555b5,'id')},'attributes':['id'],'include':[{'model':db[_0xe6c2('0x5a')],'as':'Agents','attributes':['id',_0xe6c2('0x2d'),_0xe6c2('0x66'),_0xe6c2('0x67'),'interface'],'raw':!![]}]})[_0xe6c2('0x29')](function(_0x914dc8){if(_0x914dc8){var _0x593799=_[_0xe6c2('0x68')](_0x914dc8,function(_0x388dd0){var _0x3be17d=_0x388dd0[_0xe6c2('0x4f')]({'plain':!![]});return _0x3be17d[_0xe6c2('0x69')];});return db[_0xe6c2('0x30')][_0xe6c2('0x4b')]({'where':{'id':_0x1a0b4e['params']['id']}})[_0xe6c2('0x29')](function(_0x6c1f08){return db['sequelize'][_0xe6c2('0x6a')](function(_0x5c2edb){return _0x6c1f08['addTeams'](_[_0xe6c2('0x41')](_0x4555b5,'id'),{'transaction':_0x5c2edb})['then'](function(){return BPromise['each'](_0x593799,function(_0x61d7e4){return db[_0xe6c2('0x59')][_0xe6c2('0x6b')]({'where':{'UserId':_0x61d7e4['id'],'OpenchannelQueueId':_0x1a0b4e['params']['id']},'transaction':_0x5c2edb});});})[_0xe6c2('0x29')](function(){_0x593799[_0xe6c2('0x6c')](function(_0x23d3fc){socket[_0xe6c2('0x6d')](_0xe6c2('0x6e'),{'UserId':_0x23d3fc['id'],'OpenchannelQueueId':_0x6c1f08['id']});});});});});}})[_0xe6c2('0x29')](respondWithStatusCode(_0x1d022c,null))[_0xe6c2('0x53')](handleError(_0x1d022c,null));};exports[_0xe6c2('0x6f')]=function(_0x34ccdb,_0x511f34,_0x84f198){return db[_0xe6c2('0x63')]['findAll']({'where':{'id':_0x34ccdb[_0xe6c2('0x34')][_0xe6c2('0x70')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0xe6c2('0x69'),'attributes':['id'],'raw':!![]}]})[_0xe6c2('0x29')](handleEntityNotFound(_0x511f34,null))[_0xe6c2('0x29')](function(_0x40008d){var _0x1e9985=_['map'](_0x40008d,'id');var _0x1866fe=[];var _0x101f11=[];var _0x554fda=squel[_0xe6c2('0x71')]();_0x554fda[_0xe6c2('0x44')](_0xe6c2('0x72'))[_0xe6c2('0x73')](_0xe6c2('0x74'),'tq')[_0xe6c2('0x75')](_0xe6c2('0x76'),'ut',_0xe6c2('0x77'))[_0xe6c2('0x3d')]('OpenchannelQueueId\x20=\x20?',_0x34ccdb[_0xe6c2('0x4a')]['id']);for(var _0x1b31bb=0x0;_0x1b31bb<_0x40008d[_0xe6c2('0x39')];_0x1b31bb+=0x1){let _0x11c1c4=_0x40008d[_0x1b31bb];for(var _0x27f2f6=0x0;_0x27f2f6<_0x11c1c4['Agents']['length'];_0x27f2f6+=0x1){let _0x2bd9ce=_0x11c1c4[_0xe6c2('0x69')][_0x27f2f6];var _0x554b0c=_0x554fda[_0xe6c2('0x78')]();_0x554b0c[_0xe6c2('0x3d')](_0xe6c2('0x79'),_0x2bd9ce['id']);_0x101f11['push'](db[_0xe6c2('0x7a')][_0xe6c2('0x34')](_0x554b0c[_0xe6c2('0x7b')](),{'type':db[_0xe6c2('0x7a')][_0xe6c2('0x7c')]['SELECT']})[_0xe6c2('0x29')](function(_0xfe689b){if(_0xfe689b[_0xe6c2('0x39')]===0x1){return _0x2bd9ce['id'];}else{var _0x317d9d=_[_0xe6c2('0x7d')](_['map'](_0xfe689b,_0xe6c2('0x7e')),function(_0xb75ac7){return _['includes'](_0x1e9985,_0xb75ac7);});if(_0x317d9d){return _0x2bd9ce['id'];}}}));}}return BPromise['all'](_0x101f11)[_0xe6c2('0x29')](function(_0x3c13c4){_0x1866fe=_(_0x1866fe)['union'](_0x3c13c4)[_0xe6c2('0x7f')]()[_0xe6c2('0x80')]();return db['OpenchannelQueue'][_0xe6c2('0x4b')]({'where':{'id':_0x34ccdb[_0xe6c2('0x4a')]['id']}})[_0xe6c2('0x29')](function(_0x459669){return db[_0xe6c2('0x7a')]['transaction'](function(_0x296bc6){return _0x459669[_0xe6c2('0x6f')](_0x34ccdb[_0xe6c2('0x34')][_0xe6c2('0x70')],{'transaction':_0x296bc6})[_0xe6c2('0x29')](function(){if(!_['isEmpty'](_0x1866fe)){return _0x459669[_0xe6c2('0x81')](_0x1866fe,{'transaction':_0x296bc6});}})[_0xe6c2('0x29')](function(){_0x1866fe['forEach'](function(_0x497ef2){socket[_0xe6c2('0x6d')](_0xe6c2('0x82'),{'UserId':_0x497ef2,'OpenchannelQueueId':_0x459669['id']});});});});});});})[_0xe6c2('0x29')](respondWithStatusCode(_0x511f34,null))[_0xe6c2('0x53')](handleError(_0x511f34,null));};exports['addAgents']=function(_0x280e7b,_0x36edb7,_0x24170a){return db[_0xe6c2('0x30')][_0xe6c2('0x4b')]({'where':{'id':_0x280e7b[_0xe6c2('0x4a')]['id']}})[_0xe6c2('0x29')](handleEntityNotFound(_0x36edb7,null))[_0xe6c2('0x29')](function(_0x13dc3e){if(_0x13dc3e){return _0x13dc3e[_0xe6c2('0x83')](_0x280e7b[_0xe6c2('0x4d')][_0xe6c2('0x70')],_['omit'](_0x280e7b[_0xe6c2('0x4d')],[_0xe6c2('0x70'),'id'])||{})[_0xe6c2('0x84')](function(_0x163a23){for(var _0x2360c7=0x0;_0x2360c7<_0x280e7b[_0xe6c2('0x4d')][_0xe6c2('0x70')]['length'];_0x2360c7+=0x1){socket[_0xe6c2('0x6d')]('userOpenchannelQueue:save',{'UserId':_0x280e7b[_0xe6c2('0x4d')][_0xe6c2('0x70')][_0x2360c7],'OpenchannelQueueId':_0x280e7b[_0xe6c2('0x4a')]['id']});}return _0x163a23;});}})[_0xe6c2('0x29')](respondWithResult(_0x36edb7,null))[_0xe6c2('0x53')](handleError(_0x36edb7,null));};exports['removeAgents']=function(_0x50e365,_0x274c0c,_0x307e72){return db[_0xe6c2('0x30')][_0xe6c2('0x4b')]({'where':{'id':_0x50e365[_0xe6c2('0x4a')]['id']}})[_0xe6c2('0x29')](handleEntityNotFound(_0x274c0c,null))['then'](function(_0x190874){if(_0x190874){return _0x190874['removeAgents'](_0x50e365[_0xe6c2('0x34')][_0xe6c2('0x70')])[_0xe6c2('0x29')](function(){if(_['isArray'](_0x50e365[_0xe6c2('0x34')][_0xe6c2('0x70')])){for(var _0xd1325d=0x0;_0xd1325d<_0x50e365[_0xe6c2('0x34')][_0xe6c2('0x70')][_0xe6c2('0x39')];_0xd1325d+=0x1){socket[_0xe6c2('0x6d')](_0xe6c2('0x82'),{'UserId':Number(_0x50e365[_0xe6c2('0x34')]['ids'][_0xd1325d]),'OpenchannelQueueId':Number(_0x50e365[_0xe6c2('0x4a')]['id'])});}}else{socket[_0xe6c2('0x6d')](_0xe6c2('0x82'),{'UserId':Number(_0x50e365['query'][_0xe6c2('0x70')]),'OpenchannelQueueId':Number(_0x50e365[_0xe6c2('0x4a')]['id'])});}});}})[_0xe6c2('0x29')](respondWithStatusCode(_0x274c0c,null))[_0xe6c2('0x53')](handleError(_0x274c0c,null));};exports[_0xe6c2('0x85')]=function(_0x50f815,_0x25b8f5,_0x3330c4){var _0xa182e3={};var _0x14cdfd={};var _0x1d47f5;var _0x425292;return db[_0xe6c2('0x30')][_0xe6c2('0x57')]({'where':{'id':_0x50f815[_0xe6c2('0x4a')]['id']}})[_0xe6c2('0x29')](handleEntityNotFound(_0x25b8f5,null))['then'](function(_0x36ce5b){if(_0x36ce5b){_0x1d47f5=_0x36ce5b;_0x14cdfd['model']=_['keys'](db['User'][_0xe6c2('0x31')]);_0x14cdfd[_0xe6c2('0x34')]=_['keys'](_0x50f815['query']);_0x14cdfd[_0xe6c2('0x35')]=_[_0xe6c2('0x36')](_0x14cdfd[_0xe6c2('0x32')],_0x14cdfd['query']);_0xa182e3[_0xe6c2('0x38')]=_[_0xe6c2('0x36')](_0x14cdfd[_0xe6c2('0x32')],qs[_0xe6c2('0x37')](_0x50f815[_0xe6c2('0x34')][_0xe6c2('0x37')]));_0xa182e3[_0xe6c2('0x38')]=_0xa182e3['attributes']['length']?_0xa182e3['attributes']:_0x14cdfd[_0xe6c2('0x32')];_0xa182e3[_0xe6c2('0x3b')]=qs['sort'](_0x50f815[_0xe6c2('0x34')][_0xe6c2('0x3c')]);_0xa182e3[_0xe6c2('0x3d')]=qs[_0xe6c2('0x35')](_[_0xe6c2('0x3e')](_0x50f815[_0xe6c2('0x34')],_0x14cdfd[_0xe6c2('0x35')]));if(_0x50f815['query'][_0xe6c2('0x3f')]){_0xa182e3[_0xe6c2('0x3d')]=_[_0xe6c2('0x40')](_0xa182e3['where'],{'$or':_['map'](_0xa182e3[_0xe6c2('0x38')],function(_0x5ea4b5){var _0x48970a={};_0x48970a[_0x5ea4b5]={'$like':'%'+_0x50f815[_0xe6c2('0x34')][_0xe6c2('0x3f')]+'%'};return _0x48970a;})});}_0xa182e3=_[_0xe6c2('0x40')]({},_0xa182e3,_0x50f815['options']);return _0x1d47f5['getAgents'](_0xa182e3);}})[_0xe6c2('0x29')](function(_0x239de9){if(_0x239de9){_0x425292=_0x239de9[_0xe6c2('0x39')];if(!_0x50f815[_0xe6c2('0x34')][_0xe6c2('0x86')](_0xe6c2('0x3a'))){_0xa182e3[_0xe6c2('0x22')]=qs[_0xe6c2('0x22')](_0x50f815[_0xe6c2('0x34')][_0xe6c2('0x22')]);_0xa182e3[_0xe6c2('0x21')]=qs[_0xe6c2('0x21')](_0x50f815[_0xe6c2('0x34')]['offset']);}return _0x1d47f5[_0xe6c2('0x85')](_0xa182e3);}})[_0xe6c2('0x29')](function(_0x5d45da){if(_0x5d45da){return _0x5d45da?{'count':_0x425292,'rows':_0x5d45da}:null;}})[_0xe6c2('0x29')](respondWithResult(_0x25b8f5,null))[_0xe6c2('0x53')](handleError(_0x25b8f5,null));};
\ No newline at end of file
+var _0x5e61=['ut.UserId\x20=\x20?','toString','SELECT','every','TeamId','includes','all','union','value','isEmpty','removeAgents','addAgents','omit','isArray','userOpenchannelQueue:remove','getAgents','html-pdf','rimraf','zip-dir','request-promise','moment','bluebird','mustache','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','redis','localhost','socket.io-emitter','./openchannelQueue.socket','register','sendStatus','status','end','json','offset','limit','Content-Range','reject','save','then','destroy','get','OpenchannelQueues','UserProfileResource','error','stack','name','send','OpenchannelQueue','rawAttributes','model','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','type','key','count','include','findAll','rows','show','params','keys','includeAll','options','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','catch','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','body','describe','getMembers','findOne','OpenchannelQueueId','map','UserOpenchannelQueue','User','findAndCountAll','UserId','agent','createdAt','format','%s/%s','SIP','getTeams','Team','addTeams','teams','Agents','online','voicePause','flatMap','sequelize','transaction','each','findOrCreate','forEach','emit','userOpenchannelQueue:save','removeTeams','ids','select','field','tq.TeamId','from','join','user_has_teams','OpenchannelQueueId\x20=\x20?','clone'];(function(_0x279c7e,_0x4f3e55){var _0x2fb2bd=function(_0x13eb5f){while(--_0x13eb5f){_0x279c7e['push'](_0x279c7e['shift']());}};_0x2fb2bd(++_0x4f3e55);}(_0x5e61,0x126));var _0x15e6=function(_0x57a6d8,_0x2afeb4){_0x57a6d8=_0x57a6d8-0x0;var _0x11c2e1=_0x5e61[_0x57a6d8];return _0x11c2e1;};'use strict';var pdf=require(_0x15e6('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x15e6('0x1'));var zipdir=require(_0x15e6('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x15e6('0x3'));var moment=require(_0x15e6('0x4'));var BPromise=require(_0x15e6('0x5'));var Mustache=require(_0x15e6('0x6'));var util=require('util');var path=require(_0x15e6('0x7'));var sox=require(_0x15e6('0x8'));var csv=require(_0x15e6('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x15e6('0xa'));var squel=require(_0x15e6('0xb'));var crypto=require(_0x15e6('0xc'));var jsforce=require(_0x15e6('0xd'));var deskjs=require(_0x15e6('0xe'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0x15e6('0xf'));var authService=require(_0x15e6('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x15e6('0x11'));var logger=require(_0x15e6('0x12'))('api');var utils=require(_0x15e6('0x13'));var config=require(_0x15e6('0x14'));var db=require('../../mysqldb')['db'];config[_0x15e6('0x15')]=_['defaults'](config['redis'],{'host':_0x15e6('0x16'),'port':0x18eb});var socket=require(_0x15e6('0x17'))(new Redis(config[_0x15e6('0x15')]));require(_0x15e6('0x18'))[_0x15e6('0x19')](socket);function respondWithStatusCode(_0x331ad2,_0x522312){_0x522312=_0x522312||0xcc;return function(_0x4cdc5a){if(_0x4cdc5a){return _0x331ad2[_0x15e6('0x1a')](_0x522312);}return _0x331ad2[_0x15e6('0x1b')](_0x522312)[_0x15e6('0x1c')]();};}function respondWithResult(_0x1c78f7,_0xd70f6){_0xd70f6=_0xd70f6||0xc8;return function(_0x4ed941){if(_0x4ed941){return _0x1c78f7[_0x15e6('0x1b')](_0xd70f6)[_0x15e6('0x1d')](_0x4ed941);}};}function respondWithFilteredResult(_0x2e9d09,_0x42009d){return function(_0x56de44){if(_0x56de44){var _0x320a40=_0x56de44['count'],_0x460f66=_0x42009d[_0x15e6('0x1e')],_0x57c567=_0x42009d[_0x15e6('0x1e')]+_0x42009d[_0x15e6('0x1f')],_0x47445c;if(_0x57c567>=_0x320a40){_0x57c567=_0x320a40;_0x47445c=0xc8;}else{_0x47445c=0xce;}_0x2e9d09[_0x15e6('0x1b')](_0x47445c);return _0x2e9d09['set'](_0x15e6('0x20'),_0x460f66+'-'+_0x57c567+'/'+_0x320a40)[_0x15e6('0x1d')](_0x56de44);}return null;};}function patchUpdates(_0x3ab4b0){return function(_0x4dfdf4){try{jsonpatch['apply'](_0x4dfdf4,_0x3ab4b0,!![]);}catch(_0x5662bf){return BPromise[_0x15e6('0x21')](_0x5662bf);}return _0x4dfdf4[_0x15e6('0x22')]();};}function saveUpdates(_0x53ff6a,_0x28c151){return function(_0x1ae4dc){if(_0x1ae4dc){return _0x1ae4dc['update'](_0x53ff6a)[_0x15e6('0x23')](function(_0x5dc6b4){return _0x5dc6b4;});}return null;};}function removeEntity(_0xa14024,_0x30a399){return function(_0xb8fa1d){if(_0xb8fa1d){return _0xb8fa1d[_0x15e6('0x24')]()['then'](function(){var _0x5d383c=_0xb8fa1d[_0x15e6('0x25')]({'plain':!![]});var _0x2eb928=_0x15e6('0x26');return db[_0x15e6('0x27')][_0x15e6('0x24')]({'where':{'type':_0x2eb928,'resourceId':_0x5d383c['id']}})['then'](function(){return _0xb8fa1d;});})[_0x15e6('0x23')](function(){_0xa14024[_0x15e6('0x1b')](0xcc)[_0x15e6('0x1c')]();});}};}function handleEntityNotFound(_0x252538,_0x2a159d){return function(_0x2709d9){if(!_0x2709d9){_0x252538['sendStatus'](0x194);}return _0x2709d9;};}function handleError(_0x30256f,_0x3c08fb){_0x3c08fb=_0x3c08fb||0x1f4;return function(_0x4fab0b){logger[_0x15e6('0x28')](_0x4fab0b[_0x15e6('0x29')]);if(_0x4fab0b[_0x15e6('0x2a')]){delete _0x4fab0b[_0x15e6('0x2a')];}_0x30256f[_0x15e6('0x1b')](_0x3c08fb)[_0x15e6('0x2b')](_0x4fab0b);};}exports['index']=function(_0x260838,_0x1a3972){var _0x50e4c8={},_0x40e738={},_0x5af28f={'count':0x0,'rows':[]};var _0x236df0=db[_0x15e6('0x2c')][_0x15e6('0x2d')];_0x40e738[_0x15e6('0x2e')]=_['keys'](_0x236df0);_0x40e738['query']=_['keys'](_0x260838[_0x15e6('0x2f')]);_0x40e738[_0x15e6('0x30')]=_[_0x15e6('0x31')](_0x40e738[_0x15e6('0x2e')],_0x40e738[_0x15e6('0x2f')]);_0x50e4c8[_0x15e6('0x32')]=_['intersection'](_0x40e738[_0x15e6('0x2e')],qs[_0x15e6('0x33')](_0x260838[_0x15e6('0x2f')][_0x15e6('0x33')]));_0x50e4c8[_0x15e6('0x32')]=_0x50e4c8['attributes'][_0x15e6('0x34')]?_0x50e4c8[_0x15e6('0x32')]:_0x40e738[_0x15e6('0x2e')];if(!_0x260838[_0x15e6('0x2f')][_0x15e6('0x35')](_0x15e6('0x36'))){_0x50e4c8[_0x15e6('0x1f')]=qs[_0x15e6('0x1f')](_0x260838[_0x15e6('0x2f')][_0x15e6('0x1f')]);_0x50e4c8[_0x15e6('0x1e')]=qs[_0x15e6('0x1e')](_0x260838[_0x15e6('0x2f')][_0x15e6('0x1e')]);}_0x50e4c8[_0x15e6('0x37')]=qs[_0x15e6('0x38')](_0x260838[_0x15e6('0x2f')][_0x15e6('0x38')]);_0x50e4c8[_0x15e6('0x39')]=qs[_0x15e6('0x30')](_[_0x15e6('0x3a')](_0x260838[_0x15e6('0x2f')],_0x40e738[_0x15e6('0x30')]));if(_0x260838[_0x15e6('0x2f')][_0x15e6('0x3b')]){_0x50e4c8[_0x15e6('0x39')]=_[_0x15e6('0x3c')](_0x50e4c8[_0x15e6('0x39')],{'$or':_['map'](_0x236df0,function(_0x28a7f7){if(_0x28a7f7[_0x15e6('0x3d')][_0x15e6('0x3e')]!=='VIRTUAL'){var _0x589574={};_0x589574[_0x28a7f7['field']]={'$like':'%'+_0x260838[_0x15e6('0x2f')][_0x15e6('0x3b')]+'%'};return _0x589574;}})});}_0x50e4c8=_[_0x15e6('0x3c')]({},_0x50e4c8,_0x260838['options']);var _0x43a9f1={'where':_0x50e4c8[_0x15e6('0x39')]};return db[_0x15e6('0x2c')]['count'](_0x43a9f1)[_0x15e6('0x23')](function(_0x275dc8){_0x5af28f[_0x15e6('0x3f')]=_0x275dc8;if(_0x260838[_0x15e6('0x2f')]['includeAll']){_0x50e4c8[_0x15e6('0x40')]=[{'all':!![]}];}return db[_0x15e6('0x2c')][_0x15e6('0x41')](_0x50e4c8);})[_0x15e6('0x23')](function(_0x4b5354){_0x5af28f[_0x15e6('0x42')]=_0x4b5354;return _0x5af28f;})[_0x15e6('0x23')](respondWithFilteredResult(_0x1a3972,_0x50e4c8))['catch'](handleError(_0x1a3972,null));};exports[_0x15e6('0x43')]=function(_0xfd9c26,_0x48a5fa){var _0xb35877={'raw':!![],'where':{'id':_0xfd9c26[_0x15e6('0x44')]['id']}},_0x3dc4ee={};_0x3dc4ee[_0x15e6('0x2e')]=_['keys'](db['OpenchannelQueue'][_0x15e6('0x2d')]);_0x3dc4ee[_0x15e6('0x2f')]=_[_0x15e6('0x45')](_0xfd9c26['query']);_0x3dc4ee['filters']=_[_0x15e6('0x31')](_0x3dc4ee[_0x15e6('0x2e')],_0x3dc4ee[_0x15e6('0x2f')]);_0xb35877[_0x15e6('0x32')]=_[_0x15e6('0x31')](_0x3dc4ee[_0x15e6('0x2e')],qs[_0x15e6('0x33')](_0xfd9c26[_0x15e6('0x2f')]['fields']));_0xb35877[_0x15e6('0x32')]=_0xb35877[_0x15e6('0x32')]['length']?_0xb35877[_0x15e6('0x32')]:_0x3dc4ee['model'];if(_0xfd9c26['query'][_0x15e6('0x46')]){_0xb35877[_0x15e6('0x40')]=[{'all':!![]}];}_0xb35877=_['merge']({},_0xb35877,_0xfd9c26[_0x15e6('0x47')]);return db[_0x15e6('0x2c')][_0x15e6('0x48')](_0xb35877)['then'](handleEntityNotFound(_0x48a5fa,null))[_0x15e6('0x23')](respondWithResult(_0x48a5fa,null))['catch'](handleError(_0x48a5fa,null));};exports[_0x15e6('0x49')]=function(_0x1ae22e,_0x5e8487){return db[_0x15e6('0x2c')][_0x15e6('0x49')](_0x1ae22e['body'],{})[_0x15e6('0x23')](function(_0x55b078){var _0x404974=_0x1ae22e[_0x15e6('0x4a')]['get']({'plain':!![]});if(!_0x404974)throw new Error(_0x15e6('0x4b'));if(_0x404974[_0x15e6('0x4c')]==='user'){var _0xd9b1b0=_0x55b078[_0x15e6('0x25')]({'plain':!![]});var _0x401edf=_0x15e6('0x26');return db[_0x15e6('0x4d')][_0x15e6('0x48')]({'where':{'name':_0x401edf,'userProfileId':_0x404974[_0x15e6('0x4e')]},'raw':!![]})[_0x15e6('0x23')](function(_0x8f6eff){if(_0x8f6eff&&_0x8f6eff[_0x15e6('0x4f')]===0x0){return db[_0x15e6('0x27')][_0x15e6('0x49')]({'name':_0xd9b1b0['name'],'resourceId':_0xd9b1b0['id'],'type':_0x8f6eff[_0x15e6('0x2a')],'sectionId':_0x8f6eff['id']},{})[_0x15e6('0x23')](function(){return _0x55b078;});}else{return _0x55b078;}})[_0x15e6('0x50')](function(_0x23cf87){logger[_0x15e6('0x28')](_0x15e6('0x51'),_0x23cf87);throw _0x23cf87;});}return _0x55b078;})[_0x15e6('0x23')](respondWithResult(_0x5e8487,0xc9))[_0x15e6('0x50')](handleError(_0x5e8487,null));};exports[_0x15e6('0x52')]=function(_0x46c226,_0x44d8fb){if(_0x46c226[_0x15e6('0x53')]['id']){delete _0x46c226[_0x15e6('0x53')]['id'];}return db[_0x15e6('0x2c')][_0x15e6('0x48')]({'where':{'id':_0x46c226[_0x15e6('0x44')]['id']}})[_0x15e6('0x23')](handleEntityNotFound(_0x44d8fb,null))['then'](saveUpdates(_0x46c226[_0x15e6('0x53')],null))[_0x15e6('0x23')](respondWithResult(_0x44d8fb,null))[_0x15e6('0x50')](handleError(_0x44d8fb,null));};exports[_0x15e6('0x24')]=function(_0x1dcb0e,_0x409045){return db[_0x15e6('0x2c')][_0x15e6('0x48')]({'where':{'id':_0x1dcb0e['params']['id']}})[_0x15e6('0x23')](handleEntityNotFound(_0x409045,null))[_0x15e6('0x23')](removeEntity(_0x409045,null))[_0x15e6('0x50')](handleError(_0x409045,null));};exports[_0x15e6('0x54')]=function(_0x50bb5e,_0x13dbd6){return db[_0x15e6('0x2c')][_0x15e6('0x54')]()[_0x15e6('0x23')](respondWithResult(_0x13dbd6,null))[_0x15e6('0x50')](handleError(_0x13dbd6,null));};exports[_0x15e6('0x55')]=function(_0x8b6819,_0x52aa5e,_0x308274){var _0x25973a={'raw':!![],'where':{}},_0x2e0829={},_0x402b65;return db['OpenchannelQueue'][_0x15e6('0x56')]({'where':{'id':_0x8b6819[_0x15e6('0x44')]['id']}})[_0x15e6('0x23')](handleEntityNotFound(_0x52aa5e,null))[_0x15e6('0x23')](function(_0x47c8a8){if(_0x47c8a8){_0x402b65=_0x47c8a8[_0x15e6('0x25')]({'plain':!![]});_0x2e0829[_0x15e6('0x2e')]=_['keys'](db['UserOpenchannelQueue'][_0x15e6('0x2d')]);_0x2e0829[_0x15e6('0x2f')]=_[_0x15e6('0x45')](_0x8b6819[_0x15e6('0x2f')]);_0x2e0829[_0x15e6('0x30')]=_[_0x15e6('0x31')](_0x2e0829[_0x15e6('0x2e')],_0x2e0829[_0x15e6('0x2f')]);_0x25973a[_0x15e6('0x32')]=_[_0x15e6('0x31')](_0x2e0829['model'],qs[_0x15e6('0x33')](_0x8b6819[_0x15e6('0x2f')][_0x15e6('0x33')]));_0x25973a[_0x15e6('0x32')]=_0x25973a[_0x15e6('0x32')][_0x15e6('0x34')]?_0x25973a[_0x15e6('0x32')]:_0x2e0829[_0x15e6('0x2e')];if(!_0x8b6819[_0x15e6('0x2f')]['hasOwnProperty'](_0x15e6('0x36'))){_0x25973a[_0x15e6('0x1f')]=qs[_0x15e6('0x1f')](_0x8b6819[_0x15e6('0x2f')][_0x15e6('0x1f')]);_0x25973a['offset']=qs['offset'](_0x8b6819[_0x15e6('0x2f')][_0x15e6('0x1e')]);}_0x25973a[_0x15e6('0x37')]=qs['sort'](_0x8b6819[_0x15e6('0x2f')][_0x15e6('0x38')]);_0x25973a['where']=qs[_0x15e6('0x30')](_[_0x15e6('0x3a')](_0x8b6819['query'],_0x2e0829[_0x15e6('0x30')]));_0x25973a[_0x15e6('0x39')][_0x15e6('0x57')]=_0x47c8a8['id'];if(_0x8b6819[_0x15e6('0x2f')][_0x15e6('0x3b')]){_0x25973a[_0x15e6('0x39')]=_['merge'](_0x25973a[_0x15e6('0x39')],{'$or':_[_0x15e6('0x58')](_0x25973a[_0x15e6('0x32')],function(_0x37cf72){var _0x39866d={};_0x39866d[_0x37cf72]={'$like':'%'+_0x8b6819[_0x15e6('0x2f')][_0x15e6('0x3b')]+'%'};return _0x39866d;})});}_0x25973a=_[_0x15e6('0x3c')]({},_0x25973a,_0x8b6819[_0x15e6('0x47')]);return db[_0x15e6('0x59')]['findAll'](_0x25973a);}})[_0x15e6('0x23')](function(_0x304d6d){if(_0x304d6d){return db[_0x15e6('0x5a')][_0x15e6('0x5b')]({'where':{'id':_[_0x15e6('0x58')](_0x304d6d,_0x15e6('0x5c')),'role':_0x15e6('0x5d')},'attributes':['id',_0x15e6('0x2a'),'openchannelPause','updatedAt',_0x15e6('0x5e')]});}})[_0x15e6('0x23')](function(_0x1fafd5){if(_0x1fafd5){return{'count':_0x1fafd5[_0x15e6('0x3f')],'rows':_[_0x15e6('0x58')](_0x1fafd5[_0x15e6('0x42')],function(_0x41efe7){return{'membername':_0x41efe7[_0x15e6('0x2a')],'UserId':_0x41efe7['id'],'queue_name':_0x402b65[_0x15e6('0x2a')],'OpenchannelQueueId':_0x402b65['id'],'interface':util[_0x15e6('0x5f')](_0x15e6('0x60'),_0x15e6('0x61'),_0x41efe7[_0x15e6('0x2a')]),'penalty':0x0,'paused':_0x41efe7['openchannelPause'],'createdAt':_0x41efe7['createdAt'],'updatedAt':_0x41efe7['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})[_0x15e6('0x23')](respondWithFilteredResult(_0x52aa5e,_0x25973a))[_0x15e6('0x50')](handleError(_0x52aa5e,null));};exports[_0x15e6('0x62')]=function(_0x824f8a,_0x13bb45,_0x29571b){var _0x5cd147={};var _0x4112d2={};var _0x3e28b0;var _0x2ea6f5;return db[_0x15e6('0x2c')]['findOne']({'where':{'id':_0x824f8a[_0x15e6('0x44')]['id']}})['then'](handleEntityNotFound(_0x13bb45,null))[_0x15e6('0x23')](function(_0x1fe44b){if(_0x1fe44b){_0x3e28b0=_0x1fe44b;_0x4112d2[_0x15e6('0x2e')]=_[_0x15e6('0x45')](db[_0x15e6('0x63')]['rawAttributes']);_0x4112d2[_0x15e6('0x2f')]=_['keys'](_0x824f8a[_0x15e6('0x2f')]);_0x4112d2['filters']=_[_0x15e6('0x31')](_0x4112d2[_0x15e6('0x2e')],_0x4112d2['query']);_0x5cd147[_0x15e6('0x32')]=_[_0x15e6('0x31')](_0x4112d2['model'],qs[_0x15e6('0x33')](_0x824f8a['query'][_0x15e6('0x33')]));_0x5cd147['attributes']=_0x5cd147[_0x15e6('0x32')][_0x15e6('0x34')]?_0x5cd147[_0x15e6('0x32')]:_0x4112d2[_0x15e6('0x2e')];_0x5cd147[_0x15e6('0x37')]=qs[_0x15e6('0x38')](_0x824f8a['query'][_0x15e6('0x38')]);_0x5cd147['where']=qs[_0x15e6('0x30')](_[_0x15e6('0x3a')](_0x824f8a[_0x15e6('0x2f')],_0x4112d2[_0x15e6('0x30')]));if(_0x824f8a[_0x15e6('0x2f')][_0x15e6('0x3b')]){_0x5cd147[_0x15e6('0x39')]=_[_0x15e6('0x3c')](_0x5cd147[_0x15e6('0x39')],{'$or':_[_0x15e6('0x58')](_0x5cd147[_0x15e6('0x32')],function(_0x145867){var _0x283b73={};_0x283b73[_0x145867]={'$like':'%'+_0x824f8a[_0x15e6('0x2f')]['filter']+'%'};return _0x283b73;})});}_0x5cd147=_[_0x15e6('0x3c')]({},_0x5cd147,_0x824f8a['options']);return _0x3e28b0['getTeams'](_0x5cd147);}})[_0x15e6('0x23')](function(_0x337c41){if(_0x337c41){_0x2ea6f5=_0x337c41[_0x15e6('0x34')];if(!_0x824f8a[_0x15e6('0x2f')][_0x15e6('0x35')](_0x15e6('0x36'))){_0x5cd147['limit']=qs[_0x15e6('0x1f')](_0x824f8a['query'][_0x15e6('0x1f')]);_0x5cd147[_0x15e6('0x1e')]=qs[_0x15e6('0x1e')](_0x824f8a['query']['offset']);}return _0x3e28b0[_0x15e6('0x62')](_0x5cd147);}})[_0x15e6('0x23')](function(_0x34527f){if(_0x34527f){return _0x34527f?{'count':_0x2ea6f5,'rows':_0x34527f}:null;}})[_0x15e6('0x23')](respondWithResult(_0x13bb45,null))[_0x15e6('0x50')](handleError(_0x13bb45,null));};exports[_0x15e6('0x64')]=function(_0x42a962,_0x35c5e2,_0x21ad00){var _0x156165=_0x42a962[_0x15e6('0x53')][_0x15e6('0x65')];return db[_0x15e6('0x63')]['findAll']({'where':{'id':_['map'](_0x156165,'id')},'attributes':['id'],'include':[{'model':db[_0x15e6('0x5a')],'as':_0x15e6('0x66'),'attributes':['id',_0x15e6('0x2a'),_0x15e6('0x67'),_0x15e6('0x68'),'interface'],'raw':!![]}]})['then'](function(_0x23f1c7){if(_0x23f1c7){var _0x12872b=_[_0x15e6('0x69')](_0x23f1c7,function(_0x3c8510){var _0x2d06d2=_0x3c8510[_0x15e6('0x25')]({'plain':!![]});return _0x2d06d2[_0x15e6('0x66')];});return db[_0x15e6('0x2c')][_0x15e6('0x48')]({'where':{'id':_0x42a962[_0x15e6('0x44')]['id']}})[_0x15e6('0x23')](function(_0xe1e14d){return db[_0x15e6('0x6a')][_0x15e6('0x6b')](function(_0x5dcf63){return _0xe1e14d[_0x15e6('0x64')](_[_0x15e6('0x58')](_0x156165,'id'),{'transaction':_0x5dcf63})[_0x15e6('0x23')](function(){return BPromise[_0x15e6('0x6c')](_0x12872b,function(_0x3d429b){return db[_0x15e6('0x59')][_0x15e6('0x6d')]({'where':{'UserId':_0x3d429b['id'],'OpenchannelQueueId':_0x42a962[_0x15e6('0x44')]['id']},'transaction':_0x5dcf63});});})[_0x15e6('0x23')](function(){_0x12872b[_0x15e6('0x6e')](function(_0x13e820){socket[_0x15e6('0x6f')](_0x15e6('0x70'),{'UserId':_0x13e820['id'],'OpenchannelQueueId':_0xe1e14d['id']});});});});});}})['then'](respondWithStatusCode(_0x35c5e2,null))['catch'](handleError(_0x35c5e2,null));};exports[_0x15e6('0x71')]=function(_0x2efc20,_0x2fe9fe,_0x49111d){return db[_0x15e6('0x63')]['findAll']({'where':{'id':_0x2efc20['query'][_0x15e6('0x72')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x15e6('0x66'),'attributes':['id'],'raw':!![]}]})[_0x15e6('0x23')](handleEntityNotFound(_0x2fe9fe,null))[_0x15e6('0x23')](function(_0x39f693){var _0x2e26f7=_[_0x15e6('0x58')](_0x39f693,'id');var _0x572154=[];var _0x21f384=[];var _0x4f41ca=squel[_0x15e6('0x73')]();_0x4f41ca[_0x15e6('0x74')](_0x15e6('0x75'))[_0x15e6('0x76')]('team_has_openchannel_queues','tq')[_0x15e6('0x77')](_0x15e6('0x78'),'ut','ut.TeamId\x20=\x20tq.TeamId')['where'](_0x15e6('0x79'),_0x2efc20['params']['id']);for(var _0x473af6=0x0;_0x473af6<_0x39f693[_0x15e6('0x34')];_0x473af6+=0x1){let _0x2c3dff=_0x39f693[_0x473af6];for(var _0x2739ef=0x0;_0x2739ef<_0x2c3dff[_0x15e6('0x66')][_0x15e6('0x34')];_0x2739ef+=0x1){let _0x1a5763=_0x2c3dff[_0x15e6('0x66')][_0x2739ef];var _0x3db9c9=_0x4f41ca[_0x15e6('0x7a')]();_0x3db9c9[_0x15e6('0x39')](_0x15e6('0x7b'),_0x1a5763['id']);_0x21f384['push'](db[_0x15e6('0x6a')][_0x15e6('0x2f')](_0x3db9c9[_0x15e6('0x7c')](),{'type':db[_0x15e6('0x6a')]['QueryTypes'][_0x15e6('0x7d')]})['then'](function(_0x1a7295){if(_0x1a7295[_0x15e6('0x34')]===0x1){return _0x1a5763['id'];}else{var _0x5d3a93=_[_0x15e6('0x7e')](_[_0x15e6('0x58')](_0x1a7295,_0x15e6('0x7f')),function(_0x39c266){return _[_0x15e6('0x80')](_0x2e26f7,_0x39c266);});if(_0x5d3a93){return _0x1a5763['id'];}}}));}}return BPromise[_0x15e6('0x81')](_0x21f384)['then'](function(_0x2731ed){_0x572154=_(_0x572154)[_0x15e6('0x82')](_0x2731ed)['compact']()[_0x15e6('0x83')]();return db[_0x15e6('0x2c')][_0x15e6('0x48')]({'where':{'id':_0x2efc20[_0x15e6('0x44')]['id']}})[_0x15e6('0x23')](function(_0x422f53){return db[_0x15e6('0x6a')]['transaction'](function(_0x373abc){return _0x422f53['removeTeams'](_0x2efc20[_0x15e6('0x2f')]['ids'],{'transaction':_0x373abc})[_0x15e6('0x23')](function(){if(!_[_0x15e6('0x84')](_0x572154)){return _0x422f53[_0x15e6('0x85')](_0x572154,{'transaction':_0x373abc});}})['then'](function(){_0x572154[_0x15e6('0x6e')](function(_0x132b94){socket[_0x15e6('0x6f')]('userOpenchannelQueue:remove',{'UserId':_0x132b94,'OpenchannelQueueId':_0x422f53['id']});});});});});});})[_0x15e6('0x23')](respondWithStatusCode(_0x2fe9fe,null))[_0x15e6('0x50')](handleError(_0x2fe9fe,null));};exports[_0x15e6('0x86')]=function(_0x49a159,_0x49b955,_0x1311ee){return db[_0x15e6('0x2c')][_0x15e6('0x48')]({'where':{'id':_0x49a159['params']['id']}})[_0x15e6('0x23')](handleEntityNotFound(_0x49b955,null))[_0x15e6('0x23')](function(_0x331e45){if(_0x331e45){return _0x331e45['addAgents'](_0x49a159[_0x15e6('0x53')][_0x15e6('0x72')],_[_0x15e6('0x87')](_0x49a159[_0x15e6('0x53')],[_0x15e6('0x72'),'id'])||{})['spread'](function(_0x357c48){for(var _0x7df348=0x0;_0x7df348<_0x49a159[_0x15e6('0x53')][_0x15e6('0x72')][_0x15e6('0x34')];_0x7df348+=0x1){socket[_0x15e6('0x6f')](_0x15e6('0x70'),{'UserId':_0x49a159[_0x15e6('0x53')][_0x15e6('0x72')][_0x7df348],'OpenchannelQueueId':_0x49a159[_0x15e6('0x44')]['id']});}return _0x357c48;});}})[_0x15e6('0x23')](respondWithResult(_0x49b955,null))['catch'](handleError(_0x49b955,null));};exports[_0x15e6('0x85')]=function(_0x301ce0,_0x119a49,_0x5553f8){return db['OpenchannelQueue'][_0x15e6('0x48')]({'where':{'id':_0x301ce0[_0x15e6('0x44')]['id']}})['then'](handleEntityNotFound(_0x119a49,null))[_0x15e6('0x23')](function(_0x33511b){if(_0x33511b){return _0x33511b[_0x15e6('0x85')](_0x301ce0[_0x15e6('0x2f')][_0x15e6('0x72')])[_0x15e6('0x23')](function(){if(_[_0x15e6('0x88')](_0x301ce0[_0x15e6('0x2f')][_0x15e6('0x72')])){for(var _0x4471bd=0x0;_0x4471bd<_0x301ce0['query'][_0x15e6('0x72')][_0x15e6('0x34')];_0x4471bd+=0x1){socket[_0x15e6('0x6f')](_0x15e6('0x89'),{'UserId':Number(_0x301ce0[_0x15e6('0x2f')][_0x15e6('0x72')][_0x4471bd]),'OpenchannelQueueId':Number(_0x301ce0[_0x15e6('0x44')]['id'])});}}else{socket[_0x15e6('0x6f')](_0x15e6('0x89'),{'UserId':Number(_0x301ce0[_0x15e6('0x2f')][_0x15e6('0x72')]),'OpenchannelQueueId':Number(_0x301ce0[_0x15e6('0x44')]['id'])});}});}})['then'](respondWithStatusCode(_0x119a49,null))[_0x15e6('0x50')](handleError(_0x119a49,null));};exports[_0x15e6('0x8a')]=function(_0x217a54,_0x9917b2,_0x54ba8){var _0x22cb3c={};var _0x2f6fa6={};var _0x1035da;var _0x3a0227;return db[_0x15e6('0x2c')][_0x15e6('0x56')]({'where':{'id':_0x217a54[_0x15e6('0x44')]['id']}})[_0x15e6('0x23')](handleEntityNotFound(_0x9917b2,null))[_0x15e6('0x23')](function(_0x21178f){if(_0x21178f){_0x1035da=_0x21178f;_0x2f6fa6['model']=_[_0x15e6('0x45')](db[_0x15e6('0x5a')][_0x15e6('0x2d')]);_0x2f6fa6[_0x15e6('0x2f')]=_['keys'](_0x217a54[_0x15e6('0x2f')]);_0x2f6fa6[_0x15e6('0x30')]=_['intersection'](_0x2f6fa6[_0x15e6('0x2e')],_0x2f6fa6[_0x15e6('0x2f')]);_0x22cb3c['attributes']=_[_0x15e6('0x31')](_0x2f6fa6[_0x15e6('0x2e')],qs['fields'](_0x217a54[_0x15e6('0x2f')][_0x15e6('0x33')]));_0x22cb3c[_0x15e6('0x32')]=_0x22cb3c[_0x15e6('0x32')][_0x15e6('0x34')]?_0x22cb3c['attributes']:_0x2f6fa6['model'];_0x22cb3c[_0x15e6('0x37')]=qs[_0x15e6('0x38')](_0x217a54[_0x15e6('0x2f')][_0x15e6('0x38')]);_0x22cb3c[_0x15e6('0x39')]=qs[_0x15e6('0x30')](_[_0x15e6('0x3a')](_0x217a54[_0x15e6('0x2f')],_0x2f6fa6[_0x15e6('0x30')]));if(_0x217a54[_0x15e6('0x2f')][_0x15e6('0x3b')]){_0x22cb3c[_0x15e6('0x39')]=_['merge'](_0x22cb3c[_0x15e6('0x39')],{'$or':_[_0x15e6('0x58')](_0x22cb3c[_0x15e6('0x32')],function(_0x2e98f5){var _0x390f66={};_0x390f66[_0x2e98f5]={'$like':'%'+_0x217a54['query'][_0x15e6('0x3b')]+'%'};return _0x390f66;})});}_0x22cb3c=_['merge']({},_0x22cb3c,_0x217a54[_0x15e6('0x47')]);return _0x1035da[_0x15e6('0x8a')](_0x22cb3c);}})[_0x15e6('0x23')](function(_0x3e6e55){if(_0x3e6e55){_0x3a0227=_0x3e6e55[_0x15e6('0x34')];if(!_0x217a54[_0x15e6('0x2f')][_0x15e6('0x35')](_0x15e6('0x36'))){_0x22cb3c['limit']=qs[_0x15e6('0x1f')](_0x217a54[_0x15e6('0x2f')]['limit']);_0x22cb3c[_0x15e6('0x1e')]=qs['offset'](_0x217a54[_0x15e6('0x2f')][_0x15e6('0x1e')]);}return _0x1035da['getAgents'](_0x22cb3c);}})[_0x15e6('0x23')](function(_0xe63db6){if(_0xe63db6){return _0xe63db6?{'count':_0x3a0227,'rows':_0xe63db6}:null;}})[_0x15e6('0x23')](respondWithResult(_0x9917b2,null))[_0x15e6('0x50')](handleError(_0x9917b2,null));};
\ No newline at end of file
index ac47a1a..05300fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0e22=['save','update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','OpenchannelQueue'];(function(_0x22bdd3,_0x552e50){var _0x44d9d9=function(_0x2b4ab9){while(--_0x2b4ab9){_0x22bdd3['push'](_0x22bdd3['shift']());}};_0x44d9d9(++_0x552e50);}(_0x0e22,0x9d));var _0x20e2=function(_0x46ae5a,_0x2a38d0){_0x46ae5a=_0x46ae5a-0x0;var _0x434986=_0x0e22[_0x46ae5a];return _0x434986;};'use strict';var EventEmitter=require(_0x20e2('0x0'));var OpenchannelQueue=require(_0x20e2('0x1'))['db'][_0x20e2('0x2')];var OpenchannelQueueEvents=new EventEmitter();OpenchannelQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x20e2('0x3'),'afterUpdate':_0x20e2('0x4'),'afterDestroy':_0x20e2('0x5')};function emitEvent(_0x3b1cf8){return function(_0xfc75de,_0x3972ef,_0x27c921){OpenchannelQueueEvents[_0x20e2('0x6')](_0x3b1cf8+':'+_0xfc75de['id'],_0xfc75de);OpenchannelQueueEvents[_0x20e2('0x6')](_0x3b1cf8,_0xfc75de);_0x27c921(null);};}for(var e in events){if(events[_0x20e2('0x7')](e)){var event=events[e];OpenchannelQueue[_0x20e2('0x8')](e,emitEvent(event));}}module[_0x20e2('0x9')]=OpenchannelQueueEvents;
\ No newline at end of file
+var _0xf334=['events','OpenchannelQueue','save','update','emit','hasOwnProperty','hook'];(function(_0x39bc44,_0x1d4373){var _0x2916d8=function(_0x1767ac){while(--_0x1767ac){_0x39bc44['push'](_0x39bc44['shift']());}};_0x2916d8(++_0x1d4373);}(_0xf334,0x19d));var _0x4f33=function(_0x36c4a9,_0x4c4ec7){_0x36c4a9=_0x36c4a9-0x0;var _0x244b29=_0xf334[_0x36c4a9];return _0x244b29;};'use strict';var EventEmitter=require(_0x4f33('0x0'));var OpenchannelQueue=require('../../mysqldb')['db'][_0x4f33('0x1')];var OpenchannelQueueEvents=new EventEmitter();OpenchannelQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x4f33('0x2'),'afterUpdate':_0x4f33('0x3'),'afterDestroy':'remove'};function emitEvent(_0x6cb8f){return function(_0x394d17,_0x1b6bfb,_0x4bba59){OpenchannelQueueEvents['emit'](_0x6cb8f+':'+_0x394d17['id'],_0x394d17);OpenchannelQueueEvents[_0x4f33('0x4')](_0x6cb8f,_0x394d17);_0x4bba59(null);};}for(var e in events){if(events[_0x4f33('0x5')](e)){var event=events[e];OpenchannelQueue[_0x4f33('0x6')](e,emitEvent(event));}}module['exports']=OpenchannelQueueEvents;
\ No newline at end of file
index 0698f39..68c44f9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6f4=['util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','./openchannelQueue.attributes','exports','define','OpenchannelQueue','openchannel_queues','lodash'];(function(_0x49a0fb,_0x281b07){var _0x410849=function(_0x3c6f63){while(--_0x3c6f63){_0x49a0fb['push'](_0x49a0fb['shift']());}};_0x410849(++_0x281b07);}(_0xa6f4,0xa7));var _0x4a6f=function(_0x51545e,_0x42a477){_0x51545e=_0x51545e-0x0;var _0x406ddb=_0xa6f4[_0x51545e];return _0x406ddb;};'use strict';var _=require(_0x4a6f('0x0'));var util=require(_0x4a6f('0x1'));var logger=require(_0x4a6f('0x2'))(_0x4a6f('0x3'));var moment=require(_0x4a6f('0x4'));var BPromise=require(_0x4a6f('0x5'));var rp=require(_0x4a6f('0x6'));var fs=require('fs');var path=require(_0x4a6f('0x7'));var rimraf=require(_0x4a6f('0x8'));var config=require('../../config/environment');var attributes=require(_0x4a6f('0x9'));module[_0x4a6f('0xa')]=function(_0x5626d8,_0x169a8d){return _0x5626d8[_0x4a6f('0xb')](_0x4a6f('0xc'),attributes,{'tableName':_0x4a6f('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xed08=['../../config/logger','api','request-promise','path','../../config/environment','lodash'];(function(_0x692316,_0x16959d){var _0x425850=function(_0x478e08){while(--_0x478e08){_0x692316['push'](_0x692316['shift']());}};_0x425850(++_0x16959d);}(_0xed08,0x1d9));var _0x8ed0=function(_0x13b884,_0x12bda4){_0x13b884=_0x13b884-0x0;var _0x26b4b2=_0xed08[_0x13b884];return _0x26b4b2;};'use strict';var _=require(_0x8ed0('0x0'));var util=require('util');var logger=require(_0x8ed0('0x1'))(_0x8ed0('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x8ed0('0x3'));var fs=require('fs');var path=require(_0x8ed0('0x4'));var rimraf=require('rimraf');var config=require(_0x8ed0('0x5'));var attributes=require('./openchannelQueue.attributes');module['exports']=function(_0x7d72ac,_0x47bafa){return _0x7d72ac['define']('OpenchannelQueue',attributes,{'tableName':'openchannel_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d1e4970..1549bdc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd66c=['result','catch','GetOpenchannelQueue','OpenchannelQueue','options','raw','where','attributes','limit','include','map','model','then','ShowOpenchannelQueue','find','stringify','lodash','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','localhost','socket.io-emitter','./openchannelQueue.socket','register','request','OpenchannelQueue,\x20%s,\x20%s','request\x20sent','debug','OpenchannelQueue,\x20%s,\x20%s,\x20%s','error','message','info'];(function(_0x237cd5,_0x42fde2){var _0x5dd34e=function(_0x4cf6cd){while(--_0x4cf6cd){_0x237cd5['push'](_0x237cd5['shift']());}};_0x5dd34e(++_0x42fde2);}(_0xd66c,0x106));var _0xcd66=function(_0x2c8feb,_0x4bf857){_0x2c8feb=_0x2c8feb-0x0;var _0xcfa98d=_0xd66c[_0x2c8feb];return _0xcfa98d;};'use strict';var _=require(_0xcd66('0x0'));var util=require('util');var moment=require(_0xcd66('0x1'));var BPromise=require(_0xcd66('0x2'));var rs=require(_0xcd66('0x3'));var fs=require('fs');var Redis=require(_0xcd66('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0xcd66('0x5'));var logger=require(_0xcd66('0x6'))(_0xcd66('0x7'));var config=require(_0xcd66('0x8'));var jayson=require(_0xcd66('0x9'));var client=jayson[_0xcd66('0xa')][_0xcd66('0xb')]({'port':0x232a});config[_0xcd66('0xc')]=_['defaults'](config[_0xcd66('0xc')],{'host':_0xcd66('0xd'),'port':0x18eb});var socket=require(_0xcd66('0xe'))(new Redis(config[_0xcd66('0xc')]));require(_0xcd66('0xf'))[_0xcd66('0x10')](socket);function respondWithRpcPromise(_0x4b9661,_0x4a38c5,_0x1f3683){return new BPromise(function(_0x567edc,_0x1d79cc){return client[_0xcd66('0x11')](_0x4b9661,_0x1f3683)['then'](function(_0x19c92f){logger['info'](_0xcd66('0x12'),_0x4a38c5,_0xcd66('0x13'));logger[_0xcd66('0x14')](_0xcd66('0x15'),_0x4a38c5,_0xcd66('0x13'),JSON['stringify'](_0x19c92f));if(_0x19c92f['error']){if(_0x19c92f[_0xcd66('0x16')]['code']===0x1f4){logger[_0xcd66('0x16')]('OpenchannelQueue,\x20%s,\x20%s',_0x4a38c5,_0x19c92f['error'][_0xcd66('0x17')]);return _0x1d79cc(_0x19c92f[_0xcd66('0x16')][_0xcd66('0x17')]);}logger[_0xcd66('0x16')](_0xcd66('0x12'),_0x4a38c5,_0x19c92f[_0xcd66('0x16')]['message']);return _0x567edc(_0x19c92f[_0xcd66('0x16')]['message']);}else{logger[_0xcd66('0x18')](_0xcd66('0x12'),_0x4a38c5,_0xcd66('0x13'));_0x567edc(_0x19c92f[_0xcd66('0x19')][_0xcd66('0x17')]);}})[_0xcd66('0x1a')](function(_0x1d25d3){logger[_0xcd66('0x16')](_0xcd66('0x12'),_0x4a38c5,_0x1d25d3);_0x1d79cc(_0x1d25d3);});});}exports[_0xcd66('0x1b')]=function(_0x214e56){var _0x1a1ef0=this;return new Promise(function(_0x14b6e9,_0x2d3819){return db[_0xcd66('0x1c')]['findAll']({'raw':_0x214e56[_0xcd66('0x1d')]?_0x214e56[_0xcd66('0x1d')][_0xcd66('0x1e')]===undefined?!![]:![]:!![],'where':_0x214e56[_0xcd66('0x1d')]?_0x214e56[_0xcd66('0x1d')][_0xcd66('0x1f')]||null:null,'attributes':_0x214e56[_0xcd66('0x1d')]?_0x214e56[_0xcd66('0x1d')][_0xcd66('0x20')]||null:null,'limit':_0x214e56[_0xcd66('0x1d')]?_0x214e56['options'][_0xcd66('0x21')]||null:null,'include':_0x214e56[_0xcd66('0x1d')]?_0x214e56['options'][_0xcd66('0x22')]?_[_0xcd66('0x23')](_0x214e56[_0xcd66('0x1d')]['include'],function(_0x141a64){return{'model':db[_0x141a64[_0xcd66('0x24')]],'as':_0x141a64['as'],'attributes':_0x141a64[_0xcd66('0x20')],'include':_0x141a64['include']?_[_0xcd66('0x23')](_0x141a64[_0xcd66('0x22')],function(_0x2d0732){return{'model':db[_0x2d0732[_0xcd66('0x24')]],'as':_0x2d0732['as'],'attributes':_0x2d0732[_0xcd66('0x20')],'include':_0x2d0732[_0xcd66('0x22')]?_[_0xcd66('0x23')](_0x2d0732[_0xcd66('0x22')],function(_0x51201f){return{'model':db[_0x51201f[_0xcd66('0x24')]],'as':_0x51201f['as'],'attributes':_0x51201f[_0xcd66('0x20')]};}):[]};}):[]};}):[]:[]})[_0xcd66('0x25')](function(_0x851a5c){logger[_0xcd66('0x18')](_0xcd66('0x1b'),_0x214e56);logger[_0xcd66('0x14')](_0xcd66('0x1b'),_0x214e56,JSON['stringify'](_0x851a5c));_0x14b6e9(_0x851a5c);})[_0xcd66('0x1a')](function(_0x13a23e){logger[_0xcd66('0x16')](_0xcd66('0x1b'),_0x13a23e['message'],_0x214e56);_0x2d3819(_0x1a1ef0[_0xcd66('0x16')](0x1f4,_0x13a23e[_0xcd66('0x17')]));});});};exports[_0xcd66('0x26')]=function(_0x38172f){var _0x1484a2=this;return new Promise(function(_0x58b93f,_0x926286){return db[_0xcd66('0x1c')][_0xcd66('0x27')]({'raw':_0x38172f[_0xcd66('0x1d')]?_0x38172f['options']['raw']===undefined?!![]:![]:!![],'where':_0x38172f[_0xcd66('0x1d')]?_0x38172f['options'][_0xcd66('0x1f')]||null:null,'attributes':_0x38172f[_0xcd66('0x1d')]?_0x38172f[_0xcd66('0x1d')][_0xcd66('0x20')]||null:null,'include':_0x38172f[_0xcd66('0x1d')]?_0x38172f[_0xcd66('0x1d')][_0xcd66('0x22')]?_['map'](_0x38172f[_0xcd66('0x1d')][_0xcd66('0x22')],function(_0x37f17a){return{'model':db[_0x37f17a[_0xcd66('0x24')]],'as':_0x37f17a['as'],'attributes':_0x37f17a['attributes'],'include':_0x37f17a[_0xcd66('0x22')]?_[_0xcd66('0x23')](_0x37f17a[_0xcd66('0x22')],function(_0x20a98c){return{'model':db[_0x20a98c[_0xcd66('0x24')]],'as':_0x20a98c['as'],'attributes':_0x20a98c[_0xcd66('0x20')],'include':_0x20a98c[_0xcd66('0x22')]?_[_0xcd66('0x23')](_0x20a98c[_0xcd66('0x22')],function(_0x1f3821){return{'model':db[_0x1f3821[_0xcd66('0x24')]],'as':_0x1f3821['as'],'attributes':_0x1f3821[_0xcd66('0x20')]};}):[]};}):[]};}):[]:[]})[_0xcd66('0x25')](function(_0x1f1293){logger[_0xcd66('0x18')](_0xcd66('0x26'),_0x38172f);logger[_0xcd66('0x14')](_0xcd66('0x26'),_0x38172f,JSON[_0xcd66('0x28')](_0x1f1293));_0x58b93f(_0x1f1293);})['catch'](function(_0x50ae16){logger[_0xcd66('0x16')]('ShowOpenchannelQueue',_0x50ae16[_0xcd66('0x17')],_0x38172f);_0x926286(_0x1484a2[_0xcd66('0x16')](0x1f4,_0x50ae16[_0xcd66('0x17')]));});});};
\ No newline at end of file
+var _0xc43c=['defaults','localhost','socket.io-emitter','register','then','info','OpenchannelQueue,\x20%s,\x20%s','request\x20sent','debug','error','message','result','OpenchannelQueue','findAll','options','raw','attributes','include','map','model','GetOpenchannelQueue','stringify','catch','ShowOpenchannelQueue','find','where','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','redis'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0xc43c,0x152));var _0xcc43=function(_0x3d824b,_0x5a6ea1){_0x3d824b=_0x3d824b-0x0;var _0x3f8a74=_0xc43c[_0x3d824b];return _0x3f8a74;};'use strict';var _=require(_0xcc43('0x0'));var util=require(_0xcc43('0x1'));var moment=require(_0xcc43('0x2'));var BPromise=require(_0xcc43('0x3'));var rs=require(_0xcc43('0x4'));var fs=require('fs');var Redis=require(_0xcc43('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xcc43('0x6'));var logger=require(_0xcc43('0x7'))('rpc');var config=require(_0xcc43('0x8'));var jayson=require(_0xcc43('0x9'));var client=jayson[_0xcc43('0xa')][_0xcc43('0xb')]({'port':0x232a});config[_0xcc43('0xc')]=_[_0xcc43('0xd')](config[_0xcc43('0xc')],{'host':_0xcc43('0xe'),'port':0x18eb});var socket=require(_0xcc43('0xf'))(new Redis(config[_0xcc43('0xc')]));require('./openchannelQueue.socket')[_0xcc43('0x10')](socket);function respondWithRpcPromise(_0x70271a,_0x3e865d,_0xe9a95f){return new BPromise(function(_0x3ac1de,_0x3e6afd){return client['request'](_0x70271a,_0xe9a95f)[_0xcc43('0x11')](function(_0x3751e5){logger[_0xcc43('0x12')](_0xcc43('0x13'),_0x3e865d,_0xcc43('0x14'));logger[_0xcc43('0x15')]('OpenchannelQueue,\x20%s,\x20%s,\x20%s',_0x3e865d,_0xcc43('0x14'),JSON['stringify'](_0x3751e5));if(_0x3751e5[_0xcc43('0x16')]){if(_0x3751e5[_0xcc43('0x16')]['code']===0x1f4){logger['error'](_0xcc43('0x13'),_0x3e865d,_0x3751e5[_0xcc43('0x16')][_0xcc43('0x17')]);return _0x3e6afd(_0x3751e5[_0xcc43('0x16')][_0xcc43('0x17')]);}logger[_0xcc43('0x16')]('OpenchannelQueue,\x20%s,\x20%s',_0x3e865d,_0x3751e5['error'][_0xcc43('0x17')]);return _0x3ac1de(_0x3751e5[_0xcc43('0x16')][_0xcc43('0x17')]);}else{logger[_0xcc43('0x12')]('OpenchannelQueue,\x20%s,\x20%s',_0x3e865d,_0xcc43('0x14'));_0x3ac1de(_0x3751e5[_0xcc43('0x18')][_0xcc43('0x17')]);}})['catch'](function(_0x549c5b){logger[_0xcc43('0x16')](_0xcc43('0x13'),_0x3e865d,_0x549c5b);_0x3e6afd(_0x549c5b);});});}exports['GetOpenchannelQueue']=function(_0x596f8a){var _0x7dcf59=this;return new Promise(function(_0x34b477,_0x2418d3){return db[_0xcc43('0x19')][_0xcc43('0x1a')]({'raw':_0x596f8a[_0xcc43('0x1b')]?_0x596f8a[_0xcc43('0x1b')][_0xcc43('0x1c')]===undefined?!![]:![]:!![],'where':_0x596f8a[_0xcc43('0x1b')]?_0x596f8a[_0xcc43('0x1b')]['where']||null:null,'attributes':_0x596f8a[_0xcc43('0x1b')]?_0x596f8a[_0xcc43('0x1b')][_0xcc43('0x1d')]||null:null,'limit':_0x596f8a[_0xcc43('0x1b')]?_0x596f8a[_0xcc43('0x1b')]['limit']||null:null,'include':_0x596f8a[_0xcc43('0x1b')]?_0x596f8a[_0xcc43('0x1b')][_0xcc43('0x1e')]?_[_0xcc43('0x1f')](_0x596f8a[_0xcc43('0x1b')]['include'],function(_0x1b44ce){return{'model':db[_0x1b44ce[_0xcc43('0x20')]],'as':_0x1b44ce['as'],'attributes':_0x1b44ce[_0xcc43('0x1d')],'include':_0x1b44ce[_0xcc43('0x1e')]?_[_0xcc43('0x1f')](_0x1b44ce[_0xcc43('0x1e')],function(_0x110212){return{'model':db[_0x110212[_0xcc43('0x20')]],'as':_0x110212['as'],'attributes':_0x110212[_0xcc43('0x1d')],'include':_0x110212[_0xcc43('0x1e')]?_['map'](_0x110212['include'],function(_0x33a463){return{'model':db[_0x33a463[_0xcc43('0x20')]],'as':_0x33a463['as'],'attributes':_0x33a463[_0xcc43('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xcc43('0x11')](function(_0x987470){logger[_0xcc43('0x12')](_0xcc43('0x21'),_0x596f8a);logger[_0xcc43('0x15')]('GetOpenchannelQueue',_0x596f8a,JSON[_0xcc43('0x22')](_0x987470));_0x34b477(_0x987470);})[_0xcc43('0x23')](function(_0x1d6dc7){logger[_0xcc43('0x16')](_0xcc43('0x21'),_0x1d6dc7[_0xcc43('0x17')],_0x596f8a);_0x2418d3(_0x7dcf59[_0xcc43('0x16')](0x1f4,_0x1d6dc7[_0xcc43('0x17')]));});});};exports[_0xcc43('0x24')]=function(_0x541596){var _0x9b885b=this;return new Promise(function(_0x226825,_0x4d3067){return db[_0xcc43('0x19')][_0xcc43('0x25')]({'raw':_0x541596[_0xcc43('0x1b')]?_0x541596[_0xcc43('0x1b')][_0xcc43('0x1c')]===undefined?!![]:![]:!![],'where':_0x541596[_0xcc43('0x1b')]?_0x541596['options'][_0xcc43('0x26')]||null:null,'attributes':_0x541596[_0xcc43('0x1b')]?_0x541596[_0xcc43('0x1b')]['attributes']||null:null,'include':_0x541596['options']?_0x541596[_0xcc43('0x1b')]['include']?_[_0xcc43('0x1f')](_0x541596['options'][_0xcc43('0x1e')],function(_0x58df74){return{'model':db[_0x58df74[_0xcc43('0x20')]],'as':_0x58df74['as'],'attributes':_0x58df74['attributes'],'include':_0x58df74[_0xcc43('0x1e')]?_['map'](_0x58df74[_0xcc43('0x1e')],function(_0x566bce){return{'model':db[_0x566bce[_0xcc43('0x20')]],'as':_0x566bce['as'],'attributes':_0x566bce[_0xcc43('0x1d')],'include':_0x566bce[_0xcc43('0x1e')]?_[_0xcc43('0x1f')](_0x566bce[_0xcc43('0x1e')],function(_0x36efda){return{'model':db[_0x36efda['model']],'as':_0x36efda['as'],'attributes':_0x36efda[_0xcc43('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xcc43('0x11')](function(_0x5ac764){logger[_0xcc43('0x12')](_0xcc43('0x24'),_0x541596);logger[_0xcc43('0x15')]('ShowOpenchannelQueue',_0x541596,JSON[_0xcc43('0x22')](_0x5ac764));_0x226825(_0x5ac764);})[_0xcc43('0x23')](function(_0x46c126){logger[_0xcc43('0x16')]('ShowOpenchannelQueue',_0x46c126[_0xcc43('0x17')],_0x541596);_0x4d3067(_0x9b885b[_0xcc43('0x16')](0x1f4,_0x46c126[_0xcc43('0x17')]));});});};
\ No newline at end of file
index ee80845..17b500a 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(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xa9e0,0x123));var _0x0a9e=function(_0x187ee1,_0x3fd1e6){_0x187ee1=_0x187ee1-0x0;var _0x388160=_0xa9e0[_0x187ee1];return _0x388160;};'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(_0x3ce3c,_0x319337){_0x3ce3c=_0x3ce3c-0x0;var _0x55a2c9=_0xa9e0[_0x3ce3c];return _0x55a2c9;};'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 06a216c..30a77e0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['put','destroy','exports','multer','util','path','Router','../../components/interaction/service','../../config/environment','./openchannelQueueReport.controller','get','isAuthenticated','/describe','/:id','post','create'];(function(_0x754ab4,_0x56daa7){var _0x34079a=function(_0x295ec1){while(--_0x295ec1){_0x754ab4['push'](_0x754ab4['shift']());}};_0x34079a(++_0x56daa7);}(_0xa9e0,0x123));var _0x0a9e=function(_0x1b349a,_0x22222c){_0x1b349a=_0x1b349a-0x0;var _0x5d1f7c=_0xa9e0[_0x1b349a];return _0x5d1f7c;};'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['describe']);router['get'](_0x0a9e('0xa'),auth['isAuthenticated'](),controller['show']);router[_0x0a9e('0xb')]('/',auth[_0x0a9e('0x8')](),controller[_0x0a9e('0xc')]);router[_0x0a9e('0xd')](_0x0a9e('0xa'),auth[_0x0a9e('0x8')](),controller['update']);router['delete']('/:id',auth['isAuthenticated'](),controller[_0x0a9e('0xe')]);module[_0x0a9e('0xf')]=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(_0x171fa7,_0x587eca){var _0xc894e1=function(_0x43d7c7){while(--_0x43d7c7){_0x171fa7['push'](_0x171fa7['shift']());}};_0xc894e1(++_0x587eca);}(_0xb10b,0x12a));var _0xbb10=function(_0x2b12b7,_0x2621a1){_0x2b12b7=_0x2b12b7-0x0;var _0x2c7af3=_0xb10b[_0x2b12b7];return _0x2c7af3;};'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 f4cec8d..8f24c2d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4315=['STRING','DATE','moment','sequelize'];(function(_0x25d386,_0x108d0d){var _0x857f4a=function(_0x3eb98d){while(--_0x3eb98d){_0x25d386['push'](_0x25d386['shift']());}};_0x857f4a(++_0x108d0d);}(_0x4315,0x186));var _0x5431=function(_0xc9bc0f,_0x12e2ac){_0xc9bc0f=_0xc9bc0f-0x0;var _0x4aacbc=_0x4315[_0xc9bc0f];return _0x4aacbc;};'use strict';var moment=require(_0x5431('0x0'));var Sequelize=require(_0x5431('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0x5431('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0x5431('0x2')]},'joinAt':{'type':Sequelize[_0x5431('0x3')]},'leaveAt':{'type':Sequelize[_0x5431('0x3')]},'acceptAt':{'type':Sequelize[_0x5431('0x3')]},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize[_0x5431('0x2')]}};
\ No newline at end of file
+var _0xa166=['moment','exports','STRING','DATE'];(function(_0x546150,_0x24e5f3){var _0x370033=function(_0x286132){while(--_0x286132){_0x546150['push'](_0x546150['shift']());}};_0x370033(++_0x24e5f3);}(_0xa166,0x180));var _0x6a16=function(_0x5b369a,_0x242eb5){_0x5b369a=_0x5b369a-0x0;var _0x404a31=_0xa166[_0x5b369a];return _0x404a31;};'use strict';var moment=require(_0x6a16('0x0'));var Sequelize=require('sequelize');module[_0x6a16('0x1')]={'uniqueid':{'type':Sequelize[_0x6a16('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0x6a16('0x2')]},'joinAt':{'type':Sequelize[_0x6a16('0x3')]},'leaveAt':{'type':Sequelize[_0x6a16('0x3')]},'acceptAt':{'type':Sequelize[_0x6a16('0x3')]},'exitAt':{'type':Sequelize[_0x6a16('0x3')]},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 838cbfa..c7a4f7c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x79c9=['../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','merge','map','key','VIRTUAL','field','filter','options','OpenchannelQueueReport','includeAll','findAll','catch','show','length','include','find','create','body','params','destroy','describe','html-pdf','rimraf','fast-json-patch','request-promise','moment','bluebird','util','path','sox','lodash','squel','jsforce','querystring','papaparse'];(function(_0x107c1e,_0x5ac842){var _0x32ccab=function(_0x6cb648){while(--_0x6cb648){_0x107c1e['push'](_0x107c1e['shift']());}};_0x32ccab(++_0x5ac842);}(_0x79c9,0x10a));var _0x979c=function(_0xefb1df,_0x52354b){_0xefb1df=_0xefb1df-0x0;var _0x2cf6b9=_0x79c9[_0xefb1df];return _0x2cf6b9;};'use strict';var pdf=require(_0x979c('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x979c('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x979c('0x2'));var rp=require(_0x979c('0x3'));var moment=require(_0x979c('0x4'));var BPromise=require(_0x979c('0x5'));var Mustache=require('mustache');var util=require(_0x979c('0x6'));var path=require(_0x979c('0x7'));var sox=require(_0x979c('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x979c('0x9'));var squel=require(_0x979c('0xa'));var crypto=require('crypto');var jsforce=require(_0x979c('0xb'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x979c('0xc'));var Papa=require(_0x979c('0xd'));var Redis=require('ioredis');var authService=require(_0x979c('0xe'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0x979c('0xf'))(_0x979c('0x10'));var utils=require(_0x979c('0x11'));var config=require(_0x979c('0x12'));var db=require(_0x979c('0x13'))['db'];function respondWithStatusCode(_0x4216f6,_0x2d55c4){_0x2d55c4=_0x2d55c4||0xcc;return function(_0x20fcbb){if(_0x20fcbb){return _0x4216f6[_0x979c('0x14')](_0x2d55c4);}return _0x4216f6[_0x979c('0x15')](_0x2d55c4)[_0x979c('0x16')]();};}function respondWithResult(_0x4ab896,_0x4cc6e1){_0x4cc6e1=_0x4cc6e1||0xc8;return function(_0x56019d){if(_0x56019d){return _0x4ab896[_0x979c('0x15')](_0x4cc6e1)[_0x979c('0x17')](_0x56019d);}};}function respondWithFilteredResult(_0x1db26a,_0x2c4c79){return function(_0x381361){if(_0x381361){var _0x24a442=_0x381361[_0x979c('0x18')],_0x3e1c6d=_0x2c4c79[_0x979c('0x19')],_0x50a9b4=_0x2c4c79[_0x979c('0x19')]+_0x2c4c79[_0x979c('0x1a')],_0x333466;if(_0x50a9b4>=_0x24a442){_0x50a9b4=_0x24a442;_0x333466=0xc8;}else{_0x333466=0xce;}_0x1db26a[_0x979c('0x15')](_0x333466);return _0x1db26a[_0x979c('0x1b')](_0x979c('0x1c'),_0x3e1c6d+'-'+_0x50a9b4+'/'+_0x24a442)[_0x979c('0x17')](_0x381361);}return null;};}function patchUpdates(_0xfcc8e5){return function(_0x5b21ff){try{jsonpatch['apply'](_0x5b21ff,_0xfcc8e5,!![]);}catch(_0x7431db){return BPromise[_0x979c('0x1d')](_0x7431db);}return _0x5b21ff[_0x979c('0x1e')]();};}function saveUpdates(_0x451261,_0x290447){return function(_0x51ae14){if(_0x51ae14){return _0x51ae14[_0x979c('0x1f')](_0x451261)[_0x979c('0x20')](function(_0x1e9a3b){return _0x1e9a3b;});}return null;};}function removeEntity(_0x3a8642,_0x19e9df){return function(_0x553423){if(_0x553423){return _0x553423['destroy']()['then'](function(){_0x3a8642['status'](0xcc)[_0x979c('0x16')]();});}};}function handleEntityNotFound(_0x1e3fcd,_0x172e6b){return function(_0x52b585){if(!_0x52b585){_0x1e3fcd[_0x979c('0x14')](0x194);}return _0x52b585;};}function handleError(_0x433c9e,_0x444bf2){_0x444bf2=_0x444bf2||0x1f4;return function(_0xe77ad5){logger['error'](_0xe77ad5[_0x979c('0x21')]);if(_0xe77ad5[_0x979c('0x22')]){delete _0xe77ad5[_0x979c('0x22')];}_0x433c9e[_0x979c('0x15')](_0x444bf2)[_0x979c('0x23')](_0xe77ad5);};}exports[_0x979c('0x24')]=function(_0x4d8254,_0x345f23){var _0x531a5b={},_0x735521={},_0x27333e={'count':0x0,'rows':[]};var _0x1ff86e=db['OpenchannelQueueReport'][_0x979c('0x25')];_0x735521[_0x979c('0x26')]=_[_0x979c('0x27')](_0x1ff86e);_0x735521['query']=_['keys'](_0x4d8254[_0x979c('0x28')]);_0x735521[_0x979c('0x29')]=_[_0x979c('0x2a')](_0x735521[_0x979c('0x26')],_0x735521[_0x979c('0x28')]);_0x531a5b['attributes']=_[_0x979c('0x2a')](_0x735521[_0x979c('0x26')],qs[_0x979c('0x2b')](_0x4d8254[_0x979c('0x28')][_0x979c('0x2b')]));_0x531a5b[_0x979c('0x2c')]=_0x531a5b['attributes']['length']?_0x531a5b['attributes']:_0x735521[_0x979c('0x26')];if(!_0x4d8254[_0x979c('0x28')][_0x979c('0x2d')](_0x979c('0x2e'))){_0x531a5b['limit']=qs[_0x979c('0x1a')](_0x4d8254[_0x979c('0x28')][_0x979c('0x1a')]);_0x531a5b[_0x979c('0x19')]=qs[_0x979c('0x19')](_0x4d8254[_0x979c('0x28')][_0x979c('0x19')]);}_0x531a5b[_0x979c('0x2f')]=qs[_0x979c('0x30')](_0x4d8254[_0x979c('0x28')]['sort']);_0x531a5b['where']=qs[_0x979c('0x29')](_['pick'](_0x4d8254['query'],_0x735521[_0x979c('0x29')]));if(_0x4d8254[_0x979c('0x28')]['filter']){_0x531a5b[_0x979c('0x31')]=_[_0x979c('0x32')](_0x531a5b['where'],{'$or':_[_0x979c('0x33')](_0x1ff86e,function(_0x1fb8f4){if(_0x1fb8f4['type'][_0x979c('0x34')]!==_0x979c('0x35')){var _0x4f04b0={};_0x4f04b0[_0x1fb8f4[_0x979c('0x36')]]={'$like':'%'+_0x4d8254[_0x979c('0x28')][_0x979c('0x37')]+'%'};return _0x4f04b0;}})});}_0x531a5b=_['merge']({},_0x531a5b,_0x4d8254[_0x979c('0x38')]);var _0x4803dc={'where':_0x531a5b['where']};return db[_0x979c('0x39')]['count'](_0x4803dc)[_0x979c('0x20')](function(_0x52fc0b){_0x27333e[_0x979c('0x18')]=_0x52fc0b;if(_0x4d8254['query'][_0x979c('0x3a')]){_0x531a5b['include']=[{'all':!![]}];}return db[_0x979c('0x39')][_0x979c('0x3b')](_0x531a5b);})['then'](function(_0x22dff2){_0x27333e['rows']=_0x22dff2;return _0x27333e;})['then'](respondWithFilteredResult(_0x345f23,_0x531a5b))[_0x979c('0x3c')](handleError(_0x345f23,null));};exports[_0x979c('0x3d')]=function(_0x2f70a6,_0x2a94e8){var _0x48e2bf={'raw':!![],'where':{'id':_0x2f70a6['params']['id']}},_0x2fad61={};_0x2fad61[_0x979c('0x26')]=_[_0x979c('0x27')](db[_0x979c('0x39')][_0x979c('0x25')]);_0x2fad61[_0x979c('0x28')]=_[_0x979c('0x27')](_0x2f70a6[_0x979c('0x28')]);_0x2fad61['filters']=_[_0x979c('0x2a')](_0x2fad61[_0x979c('0x26')],_0x2fad61[_0x979c('0x28')]);_0x48e2bf[_0x979c('0x2c')]=_[_0x979c('0x2a')](_0x2fad61['model'],qs[_0x979c('0x2b')](_0x2f70a6[_0x979c('0x28')][_0x979c('0x2b')]));_0x48e2bf['attributes']=_0x48e2bf[_0x979c('0x2c')][_0x979c('0x3e')]?_0x48e2bf[_0x979c('0x2c')]:_0x2fad61[_0x979c('0x26')];if(_0x2f70a6[_0x979c('0x28')]['includeAll']){_0x48e2bf[_0x979c('0x3f')]=[{'all':!![]}];}_0x48e2bf=_['merge']({},_0x48e2bf,_0x2f70a6[_0x979c('0x38')]);return db[_0x979c('0x39')][_0x979c('0x40')](_0x48e2bf)['then'](handleEntityNotFound(_0x2a94e8,null))['then'](respondWithResult(_0x2a94e8,null))['catch'](handleError(_0x2a94e8,null));};exports[_0x979c('0x41')]=function(_0x31e6b3,_0x20eb02){return db[_0x979c('0x39')][_0x979c('0x41')](_0x31e6b3[_0x979c('0x42')],{})['then'](respondWithResult(_0x20eb02,0xc9))[_0x979c('0x3c')](handleError(_0x20eb02,null));};exports[_0x979c('0x1f')]=function(_0x28c3e1,_0x134f0e){if(_0x28c3e1[_0x979c('0x42')]['id']){delete _0x28c3e1['body']['id'];}return db[_0x979c('0x39')][_0x979c('0x40')]({'where':{'id':_0x28c3e1[_0x979c('0x43')]['id']}})[_0x979c('0x20')](handleEntityNotFound(_0x134f0e,null))[_0x979c('0x20')](saveUpdates(_0x28c3e1[_0x979c('0x42')],null))[_0x979c('0x20')](respondWithResult(_0x134f0e,null))[_0x979c('0x3c')](handleError(_0x134f0e,null));};exports[_0x979c('0x44')]=function(_0x26fa96,_0x152395){return db[_0x979c('0x39')]['find']({'where':{'id':_0x26fa96[_0x979c('0x43')]['id']}})[_0x979c('0x20')](handleEntityNotFound(_0x152395,null))[_0x979c('0x20')](removeEntity(_0x152395,null))[_0x979c('0x3c')](handleError(_0x152395,null));};exports[_0x979c('0x45')]=function(_0x43d3cf,_0x12acf4){return db[_0x979c('0x39')]['describe']()[_0x979c('0x20')](respondWithResult(_0x12acf4,null))[_0x979c('0x3c')](handleError(_0x12acf4,null));};
\ No newline at end of file
+var _0x1615=['apply','reject','save','update','destroy','error','stack','name','OpenchannelQueueReport','model','keys','query','filters','intersection','attributes','fields','length','nolimit','limit','order','sort','where','filter','map','type','key','VIRTUAL','field','merge','then','include','findAll','show','params','rawAttributes','includeAll','options','find','catch','create','body','describe','eml-format','rimraf','request-promise','bluebird','mustache','util','sox','ejs','lodash','squel','crypto','jsforce','to-csv','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range'];(function(_0xab669e,_0x5b9ba7){var _0x34fd9b=function(_0x44eabb){while(--_0x44eabb){_0xab669e['push'](_0xab669e['shift']());}};_0x34fd9b(++_0x5b9ba7);}(_0x1615,0xba));var _0x5161=function(_0x37b6f6,_0x199420){_0x37b6f6=_0x37b6f6-0x0;var _0x2138fd=_0x1615[_0x37b6f6];return _0x2138fd;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x5161('0x0'));var rimraf=require(_0x5161('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x5161('0x2'));var moment=require('moment');var BPromise=require(_0x5161('0x3'));var Mustache=require(_0x5161('0x4'));var util=require(_0x5161('0x5'));var path=require('path');var sox=require(_0x5161('0x6'));var csv=require('to-csv');var ejs=require(_0x5161('0x7'));var fs=require('fs');var _=require(_0x5161('0x8'));var squel=require(_0x5161('0x9'));var crypto=require(_0x5161('0xa'));var jsforce=require(_0x5161('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x5161('0xc'));var querystring=require('querystring');var Papa=require(_0x5161('0xd'));var Redis=require(_0x5161('0xe'));var authService=require('../../components/auth/service');var qs=require(_0x5161('0xf'));var hardwareService=require(_0x5161('0x10'));var logger=require(_0x5161('0x11'))(_0x5161('0x12'));var utils=require(_0x5161('0x13'));var config=require(_0x5161('0x14'));var db=require(_0x5161('0x15'))['db'];function respondWithStatusCode(_0xd04743,_0xd614d2){_0xd614d2=_0xd614d2||0xcc;return function(_0x1f3040){if(_0x1f3040){return _0xd04743[_0x5161('0x16')](_0xd614d2);}return _0xd04743[_0x5161('0x17')](_0xd614d2)[_0x5161('0x18')]();};}function respondWithResult(_0x1625a2,_0x46d6ba){_0x46d6ba=_0x46d6ba||0xc8;return function(_0x4c32a6){if(_0x4c32a6){return _0x1625a2[_0x5161('0x17')](_0x46d6ba)[_0x5161('0x19')](_0x4c32a6);}};}function respondWithFilteredResult(_0x52e5ea,_0x50a9d5){return function(_0x994b32){if(_0x994b32){var _0x2367e3=_0x994b32[_0x5161('0x1a')],_0x3bbdcf=_0x50a9d5[_0x5161('0x1b')],_0x49ef17=_0x50a9d5[_0x5161('0x1b')]+_0x50a9d5['limit'],_0x4aa725;if(_0x49ef17>=_0x2367e3){_0x49ef17=_0x2367e3;_0x4aa725=0xc8;}else{_0x4aa725=0xce;}_0x52e5ea[_0x5161('0x17')](_0x4aa725);return _0x52e5ea[_0x5161('0x1c')](_0x5161('0x1d'),_0x3bbdcf+'-'+_0x49ef17+'/'+_0x2367e3)['json'](_0x994b32);}return null;};}function patchUpdates(_0x433f4b){return function(_0x43d191){try{jsonpatch[_0x5161('0x1e')](_0x43d191,_0x433f4b,!![]);}catch(_0x58909b){return BPromise[_0x5161('0x1f')](_0x58909b);}return _0x43d191[_0x5161('0x20')]();};}function saveUpdates(_0x195d96,_0x2b891c){return function(_0xddb93d){if(_0xddb93d){return _0xddb93d[_0x5161('0x21')](_0x195d96)['then'](function(_0xb19d41){return _0xb19d41;});}return null;};}function removeEntity(_0x29eb81,_0x2d781a){return function(_0x298db4){if(_0x298db4){return _0x298db4[_0x5161('0x22')]()['then'](function(){_0x29eb81[_0x5161('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x309caf,_0x565321){return function(_0x48f5f3){if(!_0x48f5f3){_0x309caf[_0x5161('0x16')](0x194);}return _0x48f5f3;};}function handleError(_0x1da522,_0x3c8a6d){_0x3c8a6d=_0x3c8a6d||0x1f4;return function(_0x3d2348){logger[_0x5161('0x23')](_0x3d2348[_0x5161('0x24')]);if(_0x3d2348[_0x5161('0x25')]){delete _0x3d2348[_0x5161('0x25')];}_0x1da522[_0x5161('0x17')](_0x3c8a6d)['send'](_0x3d2348);};}exports['index']=function(_0x238ffb,_0x20658f){var _0x275909={},_0x101820={},_0x34f5b9={'count':0x0,'rows':[]};var _0x1072db=db[_0x5161('0x26')]['rawAttributes'];_0x101820[_0x5161('0x27')]=_[_0x5161('0x28')](_0x1072db);_0x101820['query']=_['keys'](_0x238ffb[_0x5161('0x29')]);_0x101820[_0x5161('0x2a')]=_[_0x5161('0x2b')](_0x101820[_0x5161('0x27')],_0x101820[_0x5161('0x29')]);_0x275909[_0x5161('0x2c')]=_[_0x5161('0x2b')](_0x101820['model'],qs[_0x5161('0x2d')](_0x238ffb[_0x5161('0x29')][_0x5161('0x2d')]));_0x275909[_0x5161('0x2c')]=_0x275909[_0x5161('0x2c')][_0x5161('0x2e')]?_0x275909[_0x5161('0x2c')]:_0x101820[_0x5161('0x27')];if(!_0x238ffb[_0x5161('0x29')]['hasOwnProperty'](_0x5161('0x2f'))){_0x275909[_0x5161('0x30')]=qs['limit'](_0x238ffb[_0x5161('0x29')][_0x5161('0x30')]);_0x275909[_0x5161('0x1b')]=qs[_0x5161('0x1b')](_0x238ffb[_0x5161('0x29')][_0x5161('0x1b')]);}_0x275909[_0x5161('0x31')]=qs[_0x5161('0x32')](_0x238ffb[_0x5161('0x29')][_0x5161('0x32')]);_0x275909[_0x5161('0x33')]=qs[_0x5161('0x2a')](_['pick'](_0x238ffb[_0x5161('0x29')],_0x101820[_0x5161('0x2a')]));if(_0x238ffb['query'][_0x5161('0x34')]){_0x275909['where']=_['merge'](_0x275909[_0x5161('0x33')],{'$or':_[_0x5161('0x35')](_0x1072db,function(_0x1bcd7a){if(_0x1bcd7a[_0x5161('0x36')][_0x5161('0x37')]!==_0x5161('0x38')){var _0x20cefc={};_0x20cefc[_0x1bcd7a[_0x5161('0x39')]]={'$like':'%'+_0x238ffb['query'][_0x5161('0x34')]+'%'};return _0x20cefc;}})});}_0x275909=_[_0x5161('0x3a')]({},_0x275909,_0x238ffb['options']);var _0x5ee4ed={'where':_0x275909[_0x5161('0x33')]};return db[_0x5161('0x26')][_0x5161('0x1a')](_0x5ee4ed)[_0x5161('0x3b')](function(_0x2c3c94){_0x34f5b9['count']=_0x2c3c94;if(_0x238ffb[_0x5161('0x29')]['includeAll']){_0x275909[_0x5161('0x3c')]=[{'all':!![]}];}return db[_0x5161('0x26')][_0x5161('0x3d')](_0x275909);})[_0x5161('0x3b')](function(_0x41d59f){_0x34f5b9['rows']=_0x41d59f;return _0x34f5b9;})[_0x5161('0x3b')](respondWithFilteredResult(_0x20658f,_0x275909))['catch'](handleError(_0x20658f,null));};exports[_0x5161('0x3e')]=function(_0x4adbe9,_0x3eda93){var _0x2c9bcb={'raw':!![],'where':{'id':_0x4adbe9[_0x5161('0x3f')]['id']}},_0x3d3e56={};_0x3d3e56[_0x5161('0x27')]=_[_0x5161('0x28')](db[_0x5161('0x26')][_0x5161('0x40')]);_0x3d3e56['query']=_['keys'](_0x4adbe9[_0x5161('0x29')]);_0x3d3e56[_0x5161('0x2a')]=_[_0x5161('0x2b')](_0x3d3e56[_0x5161('0x27')],_0x3d3e56[_0x5161('0x29')]);_0x2c9bcb[_0x5161('0x2c')]=_['intersection'](_0x3d3e56[_0x5161('0x27')],qs[_0x5161('0x2d')](_0x4adbe9['query']['fields']));_0x2c9bcb[_0x5161('0x2c')]=_0x2c9bcb[_0x5161('0x2c')]['length']?_0x2c9bcb[_0x5161('0x2c')]:_0x3d3e56[_0x5161('0x27')];if(_0x4adbe9[_0x5161('0x29')][_0x5161('0x41')]){_0x2c9bcb[_0x5161('0x3c')]=[{'all':!![]}];}_0x2c9bcb=_['merge']({},_0x2c9bcb,_0x4adbe9[_0x5161('0x42')]);return db[_0x5161('0x26')][_0x5161('0x43')](_0x2c9bcb)['then'](handleEntityNotFound(_0x3eda93,null))[_0x5161('0x3b')](respondWithResult(_0x3eda93,null))[_0x5161('0x44')](handleError(_0x3eda93,null));};exports[_0x5161('0x45')]=function(_0x1e0552,_0x218340){return db[_0x5161('0x26')][_0x5161('0x45')](_0x1e0552[_0x5161('0x46')],{})['then'](respondWithResult(_0x218340,0xc9))[_0x5161('0x44')](handleError(_0x218340,null));};exports[_0x5161('0x21')]=function(_0x222820,_0x196dce){if(_0x222820[_0x5161('0x46')]['id']){delete _0x222820[_0x5161('0x46')]['id'];}return db[_0x5161('0x26')][_0x5161('0x43')]({'where':{'id':_0x222820[_0x5161('0x3f')]['id']}})[_0x5161('0x3b')](handleEntityNotFound(_0x196dce,null))[_0x5161('0x3b')](saveUpdates(_0x222820[_0x5161('0x46')],null))[_0x5161('0x3b')](respondWithResult(_0x196dce,null))[_0x5161('0x44')](handleError(_0x196dce,null));};exports['destroy']=function(_0x4aebc1,_0x2c41b5){return db[_0x5161('0x26')][_0x5161('0x43')]({'where':{'id':_0x4aebc1[_0x5161('0x3f')]['id']}})[_0x5161('0x3b')](handleEntityNotFound(_0x2c41b5,null))['then'](removeEntity(_0x2c41b5,null))[_0x5161('0x44')](handleError(_0x2c41b5,null));};exports[_0x5161('0x47')]=function(_0x4ea297,_0x4c3571){return db[_0x5161('0x26')][_0x5161('0x47')]()[_0x5161('0x3b')](respondWithResult(_0x4c3571,null))[_0x5161('0x44')](handleError(_0x4c3571,null));};
\ No newline at end of file
index 9d18c58..4632028 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe600=['path','rimraf','../../config/environment','./openchannelQueueReport.attributes','exports','define','OpenchannelQueueReport','report_openchannel_queue','uniqueid','util','api','moment','bluebird','request-promise'];(function(_0x4a450a,_0x54d42f){var _0x28baf9=function(_0x5cb70a){while(--_0x5cb70a){_0x4a450a['push'](_0x4a450a['shift']());}};_0x28baf9(++_0x54d42f);}(_0xe600,0x159));var _0x0e60=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xe600[_0x321bb2];return _0x9c12ed;};'use strict';var _=require('lodash');var util=require(_0x0e60('0x0'));var logger=require('../../config/logger')(_0x0e60('0x1'));var moment=require(_0x0e60('0x2'));var BPromise=require(_0x0e60('0x3'));var rp=require(_0x0e60('0x4'));var fs=require('fs');var path=require(_0x0e60('0x5'));var rimraf=require(_0x0e60('0x6'));var config=require(_0x0e60('0x7'));var attributes=require(_0x0e60('0x8'));module[_0x0e60('0x9')]=function(_0x2f9c33,_0x4c5738){return _0x2f9c33[_0x0e60('0xa')](_0x0e60('0xb'),attributes,{'tableName':_0x0e60('0xc'),'paranoid':![],'indexes':[{'name':_0x0e60('0xd'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0xe5b3=['../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./openchannelQueueReport.attributes','exports','define','report_openchannel_queue','uniqueid','util'];(function(_0x186fe3,_0x3a75fb){var _0x5059cc=function(_0x3c481f){while(--_0x3c481f){_0x186fe3['push'](_0x186fe3['shift']());}};_0x5059cc(++_0x3a75fb);}(_0xe5b3,0x133));var _0x3e5b=function(_0x19af51,_0x3834ac){_0x19af51=_0x19af51-0x0;var _0x997581=_0xe5b3[_0x19af51];return _0x997581;};'use strict';var _=require('lodash');var util=require(_0x3e5b('0x0'));var logger=require(_0x3e5b('0x1'))(_0x3e5b('0x2'));var moment=require(_0x3e5b('0x3'));var BPromise=require(_0x3e5b('0x4'));var rp=require(_0x3e5b('0x5'));var fs=require('fs');var path=require(_0x3e5b('0x6'));var rimraf=require(_0x3e5b('0x7'));var config=require(_0x3e5b('0x8'));var attributes=require(_0x3e5b('0x9'));module[_0x3e5b('0xa')]=function(_0x54e1fb,_0x174923){return _0x54e1fb[_0x3e5b('0xb')]('OpenchannelQueueReport',attributes,{'tableName':_0x3e5b('0xc'),'paranoid':![],'indexes':[{'name':_0x3e5b('0xd'),'fields':[_0x3e5b('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
index 1137a35..3aa77af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd719=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','OpenchannelQueueReport,\x20%s,\x20%s','request\x20sent','debug','OpenchannelQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','CreateOpenchannelQueueReport','create','body','options','raw','then','UpdateOpenchannelQueueReport','OpenchannelQueueReport','update','where','attributes','lodash','util','bluebird','randomstring','ioredis','../../mysqldb'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xd719,0x112));var _0x9d71=function(_0x1d914a,_0x2b2429){_0x1d914a=_0x1d914a-0x0;var _0x189034=_0xd719[_0x1d914a];return _0x189034;};'use strict';var _=require(_0x9d71('0x0'));var util=require(_0x9d71('0x1'));var moment=require('moment');var BPromise=require(_0x9d71('0x2'));var rs=require(_0x9d71('0x3'));var fs=require('fs');var Redis=require(_0x9d71('0x4'));var db=require(_0x9d71('0x5'))['db'];var utils=require(_0x9d71('0x6'));var logger=require(_0x9d71('0x7'))(_0x9d71('0x8'));var config=require(_0x9d71('0x9'));var jayson=require(_0x9d71('0xa'));var client=jayson[_0x9d71('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1cf6a4,_0xeda6a4,_0x712ad8){return new BPromise(function(_0x3e4065,_0x32d2a8){return client[_0x9d71('0xc')](_0x1cf6a4,_0x712ad8)['then'](function(_0x5b2317){logger['info'](_0x9d71('0xd'),_0xeda6a4,_0x9d71('0xe'));logger[_0x9d71('0xf')](_0x9d71('0x10'),_0xeda6a4,_0x9d71('0xe'),JSON[_0x9d71('0x11')](_0x5b2317));if(_0x5b2317[_0x9d71('0x12')]){if(_0x5b2317['error'][_0x9d71('0x13')]===0x1f4){logger[_0x9d71('0x12')]('OpenchannelQueueReport,\x20%s,\x20%s',_0xeda6a4,_0x5b2317[_0x9d71('0x12')]['message']);return _0x32d2a8(_0x5b2317[_0x9d71('0x12')]['message']);}logger[_0x9d71('0x12')](_0x9d71('0xd'),_0xeda6a4,_0x5b2317[_0x9d71('0x12')][_0x9d71('0x14')]);return _0x3e4065(_0x5b2317[_0x9d71('0x12')]['message']);}else{logger[_0x9d71('0x15')](_0x9d71('0xd'),_0xeda6a4,'request\x20sent');_0x3e4065(_0x5b2317[_0x9d71('0x16')][_0x9d71('0x14')]);}})[_0x9d71('0x17')](function(_0x5281ad){logger[_0x9d71('0x12')]('OpenchannelQueueReport,\x20%s,\x20%s',_0xeda6a4,_0x5281ad);_0x32d2a8(_0x5281ad);});});}exports[_0x9d71('0x18')]=function(_0x5c4ce1){var _0x3a0316=this;return new Promise(function(_0xf184a5,_0x27ab29){return db['OpenchannelQueueReport'][_0x9d71('0x19')](_0x5c4ce1[_0x9d71('0x1a')],{'raw':_0x5c4ce1[_0x9d71('0x1b')]?_0x5c4ce1[_0x9d71('0x1b')][_0x9d71('0x1c')]===undefined?!![]:![]:!![]})[_0x9d71('0x1d')](function(_0xdbd4b4){logger[_0x9d71('0x15')](_0x9d71('0x18'),_0x5c4ce1);logger[_0x9d71('0xf')](_0x9d71('0x18'),_0x5c4ce1,JSON[_0x9d71('0x11')](_0xdbd4b4));_0xf184a5(_0xdbd4b4);})[_0x9d71('0x17')](function(_0x37a4d1){logger['error'](_0x9d71('0x18'),_0x37a4d1['message'],_0x5c4ce1);_0x27ab29(_0x3a0316[_0x9d71('0x12')](0x1f4,_0x37a4d1[_0x9d71('0x14')]));});});};exports[_0x9d71('0x1e')]=function(_0x68986d){var _0x4f9bf7=this;return new Promise(function(_0x6f4a8c,_0x361704){return db[_0x9d71('0x1f')][_0x9d71('0x20')](_0x68986d['body'],{'raw':_0x68986d[_0x9d71('0x1b')]?_0x68986d[_0x9d71('0x1b')][_0x9d71('0x1c')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x68986d[_0x9d71('0x1b')]?_0x68986d[_0x9d71('0x1b')][_0x9d71('0x21')]||null:null,'attributes':_0x68986d[_0x9d71('0x1b')]?_0x68986d[_0x9d71('0x1b')][_0x9d71('0x22')]||null:null,'limit':_0x68986d[_0x9d71('0x1b')]?_0x68986d[_0x9d71('0x1b')]['limit']||null:null})[_0x9d71('0x1d')](function(_0x31a9fb){logger[_0x9d71('0x15')](_0x9d71('0x1e'),_0x68986d);logger[_0x9d71('0xf')](_0x9d71('0x1e'),_0x68986d,JSON[_0x9d71('0x11')](_0x31a9fb));_0x6f4a8c(_0x31a9fb);})[_0x9d71('0x17')](function(_0x2e2a06){logger[_0x9d71('0x12')](_0x9d71('0x1e'),_0x2e2a06[_0x9d71('0x14')],_0x68986d);_0x361704(_0x4f9bf7[_0x9d71('0x12')](0x1f4,_0x2e2a06['message']));});});};
\ No newline at end of file
+var _0xbec6=['update','raw','limit','UpdateOpenchannelQueueReport','lodash','util','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','client','http','request','then','info','OpenchannelQueueReport,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','OpenchannelQueueReport','body','options','CreateOpenchannelQueueReport'];(function(_0x20255b,_0x52aa07){var _0x81fe0a=function(_0x161c2d){while(--_0x161c2d){_0x20255b['push'](_0x20255b['shift']());}};_0x81fe0a(++_0x52aa07);}(_0xbec6,0xba));var _0x6bec=function(_0x54c9dd,_0x233a86){_0x54c9dd=_0x54c9dd-0x0;var _0x855156=_0xbec6[_0x54c9dd];return _0x855156;};'use strict';var _=require(_0x6bec('0x0'));var util=require(_0x6bec('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x6bec('0x2'));var db=require(_0x6bec('0x3'))['db'];var utils=require(_0x6bec('0x4'));var logger=require('../../config/logger')(_0x6bec('0x5'));var config=require(_0x6bec('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x6bec('0x7')][_0x6bec('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x876b0a,_0x4b052a,_0x48f5fa){return new BPromise(function(_0x7f710a,_0x1bc90c){return client[_0x6bec('0x9')](_0x876b0a,_0x48f5fa)[_0x6bec('0xa')](function(_0x3ab292){logger[_0x6bec('0xb')](_0x6bec('0xc'),_0x4b052a,'request\x20sent');logger['debug']('OpenchannelQueueReport,\x20%s,\x20%s,\x20%s',_0x4b052a,_0x6bec('0xd'),JSON[_0x6bec('0xe')](_0x3ab292));if(_0x3ab292['error']){if(_0x3ab292[_0x6bec('0xf')]['code']===0x1f4){logger[_0x6bec('0xf')](_0x6bec('0xc'),_0x4b052a,_0x3ab292[_0x6bec('0xf')]['message']);return _0x1bc90c(_0x3ab292[_0x6bec('0xf')][_0x6bec('0x10')]);}logger[_0x6bec('0xf')](_0x6bec('0xc'),_0x4b052a,_0x3ab292[_0x6bec('0xf')]['message']);return _0x7f710a(_0x3ab292['error']['message']);}else{logger[_0x6bec('0xb')](_0x6bec('0xc'),_0x4b052a,'request\x20sent');_0x7f710a(_0x3ab292[_0x6bec('0x11')][_0x6bec('0x10')]);}})['catch'](function(_0x26e9f4){logger[_0x6bec('0xf')](_0x6bec('0xc'),_0x4b052a,_0x26e9f4);_0x1bc90c(_0x26e9f4);});});}exports['CreateOpenchannelQueueReport']=function(_0x1f1f7e){var _0x338813=this;return new Promise(function(_0x473cb4,_0x2fa6d6){return db[_0x6bec('0x12')]['create'](_0x1f1f7e[_0x6bec('0x13')],{'raw':_0x1f1f7e[_0x6bec('0x14')]?_0x1f1f7e[_0x6bec('0x14')]['raw']===undefined?!![]:![]:!![]})[_0x6bec('0xa')](function(_0x139fd7){logger[_0x6bec('0xb')](_0x6bec('0x15'),_0x1f1f7e);logger['debug'](_0x6bec('0x15'),_0x1f1f7e,JSON[_0x6bec('0xe')](_0x139fd7));_0x473cb4(_0x139fd7);})['catch'](function(_0x7af2c4){logger[_0x6bec('0xf')](_0x6bec('0x15'),_0x7af2c4[_0x6bec('0x10')],_0x1f1f7e);_0x2fa6d6(_0x338813[_0x6bec('0xf')](0x1f4,_0x7af2c4[_0x6bec('0x10')]));});});};exports['UpdateOpenchannelQueueReport']=function(_0x403236){var _0x4ceb06=this;return new Promise(function(_0x261710,_0x279992){return db[_0x6bec('0x12')][_0x6bec('0x16')](_0x403236['body'],{'raw':_0x403236[_0x6bec('0x14')]?_0x403236[_0x6bec('0x14')][_0x6bec('0x17')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x403236[_0x6bec('0x14')]?_0x403236['options']['where']||null:null,'attributes':_0x403236[_0x6bec('0x14')]?_0x403236['options']['attributes']||null:null,'limit':_0x403236['options']?_0x403236['options'][_0x6bec('0x18')]||null:null})[_0x6bec('0xa')](function(_0x116c2c){logger[_0x6bec('0xb')](_0x6bec('0x19'),_0x403236);logger['debug']('UpdateOpenchannelQueueReport',_0x403236,JSON[_0x6bec('0xe')](_0x116c2c));_0x261710(_0x116c2c);})['catch'](function(_0x2695d2){logger[_0x6bec('0xf')]('UpdateOpenchannelQueueReport',_0x2695d2[_0x6bec('0x10')],_0x403236);_0x279992(_0x4ceb06['error'](0x1f4,_0x2695d2[_0x6bec('0x10')]));});});};
\ No newline at end of file
index fb70db7..82f0d7d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1f7e=['/describe','describe','/:id','isAuthenticated','show','post','put','delete','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelTransferReport.controller','index','get'];(function(_0x2a582e,_0x1c8017){var _0x359a9f=function(_0x34c01c){while(--_0x34c01c){_0x2a582e['push'](_0x2a582e['shift']());}};_0x359a9f(++_0x1c8017);}(_0x1f7e,0xc6));var _0xe1f7=function(_0x133b5b,_0x4dbc91){_0x133b5b=_0x133b5b-0x0;var _0x2207e8=_0x1f7e[_0x133b5b];return _0x2207e8;};'use strict';var multer=require(_0xe1f7('0x0'));var util=require(_0xe1f7('0x1'));var path=require(_0xe1f7('0x2'));var timeout=require(_0xe1f7('0x3'));var express=require(_0xe1f7('0x4'));var router=express[_0xe1f7('0x5')]();var auth=require(_0xe1f7('0x6'));var interaction=require(_0xe1f7('0x7'));var config=require(_0xe1f7('0x8'));var controller=require(_0xe1f7('0x9'));router['get']('/',auth['isAuthenticated'](),controller[_0xe1f7('0xa')]);router[_0xe1f7('0xb')](_0xe1f7('0xc'),auth['isAuthenticated'](),controller[_0xe1f7('0xd')]);router[_0xe1f7('0xb')](_0xe1f7('0xe'),auth[_0xe1f7('0xf')](),controller[_0xe1f7('0x10')]);router[_0xe1f7('0x11')]('/',auth[_0xe1f7('0xf')](),controller['create']);router[_0xe1f7('0x12')](_0xe1f7('0xe'),auth[_0xe1f7('0xf')](),controller['update']);router[_0xe1f7('0x13')](_0xe1f7('0xe'),auth[_0xe1f7('0xf')](),controller['destroy']);module[_0xe1f7('0x14')]=router;
\ No newline at end of file
+var _0xc15a=['get','isAuthenticated','index','/describe','describe','show','post','create','update','/:id','destroy','multer','util','path','connect-timeout','Router','../../components/interaction/service','../../config/environment','./openchannelTransferReport.controller'];(function(_0x36a742,_0x564e7d){var _0x396ccf=function(_0x1d3df3){while(--_0x1d3df3){_0x36a742['push'](_0x36a742['shift']());}};_0x396ccf(++_0x564e7d);}(_0xc15a,0x174));var _0xac15=function(_0xec7b2d,_0x150fa2){_0xec7b2d=_0xec7b2d-0x0;var _0x5004ae=_0xc15a[_0xec7b2d];return _0x5004ae;};'use strict';var multer=require(_0xac15('0x0'));var util=require(_0xac15('0x1'));var path=require(_0xac15('0x2'));var timeout=require(_0xac15('0x3'));var express=require('express');var router=express[_0xac15('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xac15('0x5'));var config=require(_0xac15('0x6'));var controller=require(_0xac15('0x7'));router[_0xac15('0x8')]('/',auth[_0xac15('0x9')](),controller[_0xac15('0xa')]);router[_0xac15('0x8')](_0xac15('0xb'),auth['isAuthenticated'](),controller[_0xac15('0xc')]);router[_0xac15('0x8')]('/:id',auth[_0xac15('0x9')](),controller[_0xac15('0xd')]);router[_0xac15('0xe')]('/',auth[_0xac15('0x9')](),controller[_0xac15('0xf')]);router['put']('/:id',auth[_0xac15('0x9')](),controller[_0xac15('0x10')]);router['delete'](_0xac15('0x11'),auth[_0xac15('0x9')](),controller[_0xac15('0x12')]);module['exports']=router;
\ No newline at end of file
index 3869422..349853d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2649=['NOW','moment','exports','STRING','queue'];(function(_0x2fd14f,_0x4cfd4f){var _0x5a2bf8=function(_0x2d5808){while(--_0x2d5808){_0x2fd14f['push'](_0x2fd14f['shift']());}};_0x5a2bf8(++_0x4cfd4f);}(_0x2649,0x7e));var _0x9264=function(_0x413feb,_0x10477f){_0x413feb=_0x413feb-0x0;var _0x40ee88=_0x2649[_0x413feb];return _0x40ee88;};'use strict';var moment=require(_0x9264('0x0'));var Sequelize=require('sequelize');module[_0x9264('0x1')]={'uniqueid':{'type':Sequelize[_0x9264('0x2')],'allowNull':![]},'type':{'type':Sequelize['ENUM']('account','agent','queue'),'allowNull':![],'defaultValue':_0x9264('0x3')},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize[_0x9264('0x4')]}};
\ No newline at end of file
+var _0x5392=['sequelize','exports','STRING','ENUM','agent','queue','DATE'];(function(_0x579538,_0x4128e4){var _0x2d8436=function(_0x4e4bca){while(--_0x4e4bca){_0x579538['push'](_0x579538['shift']());}};_0x2d8436(++_0x4128e4);}(_0x5392,0x134));var _0x2539=function(_0x3a7114,_0x2ceedb){_0x3a7114=_0x3a7114-0x0;var _0x1c8c32=_0x5392[_0x3a7114];return _0x1c8c32;};'use strict';var moment=require('moment');var Sequelize=require(_0x2539('0x0'));module[_0x2539('0x1')]={'uniqueid':{'type':Sequelize[_0x2539('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0x2539('0x3')]('account',_0x2539('0x4'),_0x2539('0x5')),'allowNull':![],'defaultValue':_0x2539('0x5')},'transferredAt':{'type':Sequelize[_0x2539('0x6')],'allowNull':![],'defaultValue':Sequelize['NOW']}};
\ No newline at end of file
index 282cf39..8a3dbd1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6130=['../../components/auth/service','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','save','then','destroy','error','stack','name','send','index','OpenchannelTransferReport','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','nolimit','order','sort','where','pick','merge','map','type','VIRTUAL','field','filter','options','includeAll','include','findAll','catch','show','create','body','update','find','params','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','desk.js','papaparse'];(function(_0x229758,_0x5cb512){var _0x4c8b40=function(_0x31c31a){while(--_0x31c31a){_0x229758['push'](_0x229758['shift']());}};_0x4c8b40(++_0x5cb512);}(_0x6130,0xc8));var _0x0613=function(_0x4d8ed9,_0x2ae284){_0x4d8ed9=_0x4d8ed9-0x0;var _0x1e2140=_0x6130[_0x4d8ed9];return _0x1e2140;};'use strict';var pdf=require(_0x0613('0x0'));var emlformat=require(_0x0613('0x1'));var rimraf=require(_0x0613('0x2'));var zipdir=require(_0x0613('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x0613('0x4'));var moment=require('moment');var BPromise=require(_0x0613('0x5'));var Mustache=require(_0x0613('0x6'));var util=require(_0x0613('0x7'));var path=require(_0x0613('0x8'));var sox=require(_0x0613('0x9'));var csv=require(_0x0613('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x0613('0xb'));var squel=require(_0x0613('0xc'));var crypto=require(_0x0613('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x0613('0xe'));var toCsv=require(_0x0613('0xa'));var querystring=require('querystring');var Papa=require(_0x0613('0xf'));var Redis=require('ioredis');var authService=require(_0x0613('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x0613('0x11'));var logger=require('../../config/logger')('api');var utils=require(_0x0613('0x12'));var config=require(_0x0613('0x13'));var db=require(_0x0613('0x14'))['db'];function respondWithStatusCode(_0x2c74d9,_0x416761){_0x416761=_0x416761||0xcc;return function(_0x1daa14){if(_0x1daa14){return _0x2c74d9[_0x0613('0x15')](_0x416761);}return _0x2c74d9['status'](_0x416761)[_0x0613('0x16')]();};}function respondWithResult(_0x19a67f,_0x23b98a){_0x23b98a=_0x23b98a||0xc8;return function(_0x406499){if(_0x406499){return _0x19a67f[_0x0613('0x17')](_0x23b98a)[_0x0613('0x18')](_0x406499);}};}function respondWithFilteredResult(_0x309e53,_0x57b49d){return function(_0x5d2d46){if(_0x5d2d46){var _0x4b2dc6=_0x5d2d46[_0x0613('0x19')],_0x3bdfa4=_0x57b49d['offset'],_0x233526=_0x57b49d[_0x0613('0x1a')]+_0x57b49d[_0x0613('0x1b')],_0x2ca421;if(_0x233526>=_0x4b2dc6){_0x233526=_0x4b2dc6;_0x2ca421=0xc8;}else{_0x2ca421=0xce;}_0x309e53['status'](_0x2ca421);return _0x309e53[_0x0613('0x1c')](_0x0613('0x1d'),_0x3bdfa4+'-'+_0x233526+'/'+_0x4b2dc6)[_0x0613('0x18')](_0x5d2d46);}return null;};}function patchUpdates(_0x381176){return function(_0x43dbc4){try{jsonpatch[_0x0613('0x1e')](_0x43dbc4,_0x381176,!![]);}catch(_0x248b72){return BPromise['reject'](_0x248b72);}return _0x43dbc4[_0x0613('0x1f')]();};}function saveUpdates(_0x335f42,_0x19dde4){return function(_0x1492d2){if(_0x1492d2){return _0x1492d2['update'](_0x335f42)[_0x0613('0x20')](function(_0x1d48e2){return _0x1d48e2;});}return null;};}function removeEntity(_0x3af67f,_0x3d9fe3){return function(_0x554c2e){if(_0x554c2e){return _0x554c2e[_0x0613('0x21')]()[_0x0613('0x20')](function(){_0x3af67f['status'](0xcc)[_0x0613('0x16')]();});}};}function handleEntityNotFound(_0x4e373a,_0xaa4d9){return function(_0x1048df){if(!_0x1048df){_0x4e373a[_0x0613('0x15')](0x194);}return _0x1048df;};}function handleError(_0x23ad93,_0x326100){_0x326100=_0x326100||0x1f4;return function(_0x1c0479){logger[_0x0613('0x22')](_0x1c0479[_0x0613('0x23')]);if(_0x1c0479[_0x0613('0x24')]){delete _0x1c0479['name'];}_0x23ad93[_0x0613('0x17')](_0x326100)[_0x0613('0x25')](_0x1c0479);};}exports[_0x0613('0x26')]=function(_0x544c46,_0x4a19a0){var _0x4005cc={},_0x321e19={},_0x475443={'count':0x0,'rows':[]};var _0x5622de=db[_0x0613('0x27')][_0x0613('0x28')];_0x321e19[_0x0613('0x29')]=_['keys'](_0x5622de);_0x321e19['query']=_[_0x0613('0x2a')](_0x544c46[_0x0613('0x2b')]);_0x321e19[_0x0613('0x2c')]=_[_0x0613('0x2d')](_0x321e19[_0x0613('0x29')],_0x321e19['query']);_0x4005cc['attributes']=_[_0x0613('0x2d')](_0x321e19['model'],qs['fields'](_0x544c46['query'][_0x0613('0x2e')]));_0x4005cc[_0x0613('0x2f')]=_0x4005cc[_0x0613('0x2f')][_0x0613('0x30')]?_0x4005cc['attributes']:_0x321e19['model'];if(!_0x544c46[_0x0613('0x2b')]['hasOwnProperty'](_0x0613('0x31'))){_0x4005cc[_0x0613('0x1b')]=qs[_0x0613('0x1b')](_0x544c46['query'][_0x0613('0x1b')]);_0x4005cc[_0x0613('0x1a')]=qs[_0x0613('0x1a')](_0x544c46[_0x0613('0x2b')][_0x0613('0x1a')]);}_0x4005cc[_0x0613('0x32')]=qs[_0x0613('0x33')](_0x544c46[_0x0613('0x2b')][_0x0613('0x33')]);_0x4005cc[_0x0613('0x34')]=qs[_0x0613('0x2c')](_[_0x0613('0x35')](_0x544c46['query'],_0x321e19[_0x0613('0x2c')]));if(_0x544c46[_0x0613('0x2b')]['filter']){_0x4005cc[_0x0613('0x34')]=_[_0x0613('0x36')](_0x4005cc[_0x0613('0x34')],{'$or':_[_0x0613('0x37')](_0x5622de,function(_0x25b7c7){if(_0x25b7c7[_0x0613('0x38')]['key']!==_0x0613('0x39')){var _0x23fd0e={};_0x23fd0e[_0x25b7c7[_0x0613('0x3a')]]={'$like':'%'+_0x544c46['query'][_0x0613('0x3b')]+'%'};return _0x23fd0e;}})});}_0x4005cc=_[_0x0613('0x36')]({},_0x4005cc,_0x544c46[_0x0613('0x3c')]);var _0x493fdf={'where':_0x4005cc[_0x0613('0x34')]};return db[_0x0613('0x27')][_0x0613('0x19')](_0x493fdf)[_0x0613('0x20')](function(_0x41d09f){_0x475443[_0x0613('0x19')]=_0x41d09f;if(_0x544c46[_0x0613('0x2b')][_0x0613('0x3d')]){_0x4005cc[_0x0613('0x3e')]=[{'all':!![]}];}return db[_0x0613('0x27')][_0x0613('0x3f')](_0x4005cc);})[_0x0613('0x20')](function(_0x267bb5){_0x475443['rows']=_0x267bb5;return _0x475443;})[_0x0613('0x20')](respondWithFilteredResult(_0x4a19a0,_0x4005cc))[_0x0613('0x40')](handleError(_0x4a19a0,null));};exports[_0x0613('0x41')]=function(_0x45bb89,_0xd6c072){var _0x515843={'raw':!![],'where':{'id':_0x45bb89['params']['id']}},_0x55a2ff={};_0x55a2ff[_0x0613('0x29')]=_[_0x0613('0x2a')](db[_0x0613('0x27')][_0x0613('0x28')]);_0x55a2ff[_0x0613('0x2b')]=_['keys'](_0x45bb89['query']);_0x55a2ff[_0x0613('0x2c')]=_[_0x0613('0x2d')](_0x55a2ff[_0x0613('0x29')],_0x55a2ff['query']);_0x515843[_0x0613('0x2f')]=_[_0x0613('0x2d')](_0x55a2ff[_0x0613('0x29')],qs[_0x0613('0x2e')](_0x45bb89['query'][_0x0613('0x2e')]));_0x515843[_0x0613('0x2f')]=_0x515843[_0x0613('0x2f')][_0x0613('0x30')]?_0x515843['attributes']:_0x55a2ff[_0x0613('0x29')];if(_0x45bb89[_0x0613('0x2b')][_0x0613('0x3d')]){_0x515843[_0x0613('0x3e')]=[{'all':!![]}];}_0x515843=_[_0x0613('0x36')]({},_0x515843,_0x45bb89['options']);return db['OpenchannelTransferReport']['find'](_0x515843)[_0x0613('0x20')](handleEntityNotFound(_0xd6c072,null))[_0x0613('0x20')](respondWithResult(_0xd6c072,null))['catch'](handleError(_0xd6c072,null));};exports[_0x0613('0x42')]=function(_0x27351a,_0x502e17){return db[_0x0613('0x27')][_0x0613('0x42')](_0x27351a[_0x0613('0x43')],{})[_0x0613('0x20')](respondWithResult(_0x502e17,0xc9))[_0x0613('0x40')](handleError(_0x502e17,null));};exports[_0x0613('0x44')]=function(_0x199591,_0x5d446b){if(_0x199591[_0x0613('0x43')]['id']){delete _0x199591['body']['id'];}return db[_0x0613('0x27')][_0x0613('0x45')]({'where':{'id':_0x199591[_0x0613('0x46')]['id']}})['then'](handleEntityNotFound(_0x5d446b,null))[_0x0613('0x20')](saveUpdates(_0x199591[_0x0613('0x43')],null))[_0x0613('0x20')](respondWithResult(_0x5d446b,null))[_0x0613('0x40')](handleError(_0x5d446b,null));};exports['destroy']=function(_0x4b7f6c,_0x318d7c){return db[_0x0613('0x27')][_0x0613('0x45')]({'where':{'id':_0x4b7f6c[_0x0613('0x46')]['id']}})['then'](handleEntityNotFound(_0x318d7c,null))[_0x0613('0x20')](removeEntity(_0x318d7c,null))['catch'](handleError(_0x318d7c,null));};exports[_0x0613('0x47')]=function(_0x56b4a4,_0x14cf80){return db[_0x0613('0x27')][_0x0613('0x47')]()[_0x0613('0x20')](respondWithResult(_0x14cf80,null))['catch'](handleError(_0x14cf80,null));};
\ No newline at end of file
+var _0x7f7b=['../../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','save','update','then','destroy','name','index','OpenchannelTransferReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filter','where','map','type','key','VIRTUAL','field','merge','options','includeAll','rows','catch','show','params','create','body','find','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x7f7b,0x11f));var _0xb7f7=function(_0x37b8ee,_0x13c1df){_0x37b8ee=_0x37b8ee-0x0;var _0x88ef48=_0x7f7b[_0x37b8ee];return _0x88ef48;};'use strict';var pdf=require(_0xb7f7('0x0'));var emlformat=require(_0xb7f7('0x1'));var rimraf=require(_0xb7f7('0x2'));var zipdir=require(_0xb7f7('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xb7f7('0x4'));var moment=require(_0xb7f7('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xb7f7('0x6'));var util=require(_0xb7f7('0x7'));var path=require(_0xb7f7('0x8'));var sox=require(_0xb7f7('0x9'));var csv=require(_0xb7f7('0xa'));var ejs=require(_0xb7f7('0xb'));var fs=require('fs');var _=require(_0xb7f7('0xc'));var squel=require(_0xb7f7('0xd'));var crypto=require(_0xb7f7('0xe'));var jsforce=require(_0xb7f7('0xf'));var deskjs=require(_0xb7f7('0x10'));var toCsv=require(_0xb7f7('0xa'));var querystring=require(_0xb7f7('0x11'));var Papa=require(_0xb7f7('0x12'));var Redis=require(_0xb7f7('0x13'));var authService=require(_0xb7f7('0x14'));var qs=require(_0xb7f7('0x15'));var hardwareService=require(_0xb7f7('0x16'));var logger=require(_0xb7f7('0x17'))(_0xb7f7('0x18'));var utils=require(_0xb7f7('0x19'));var config=require(_0xb7f7('0x1a'));var db=require(_0xb7f7('0x1b'))['db'];function respondWithStatusCode(_0x488c9a,_0x598804){_0x598804=_0x598804||0xcc;return function(_0x5f47a0){if(_0x5f47a0){return _0x488c9a[_0xb7f7('0x1c')](_0x598804);}return _0x488c9a[_0xb7f7('0x1d')](_0x598804)[_0xb7f7('0x1e')]();};}function respondWithResult(_0x388a39,_0x1a395d){_0x1a395d=_0x1a395d||0xc8;return function(_0x4aa9c7){if(_0x4aa9c7){return _0x388a39[_0xb7f7('0x1d')](_0x1a395d)[_0xb7f7('0x1f')](_0x4aa9c7);}};}function respondWithFilteredResult(_0x36904d,_0xbbcac0){return function(_0x36cb0f){if(_0x36cb0f){var _0x4645cf=_0x36cb0f[_0xb7f7('0x20')],_0x3ced8d=_0xbbcac0[_0xb7f7('0x21')],_0x58afd4=_0xbbcac0[_0xb7f7('0x21')]+_0xbbcac0[_0xb7f7('0x22')],_0x11eb5c;if(_0x58afd4>=_0x4645cf){_0x58afd4=_0x4645cf;_0x11eb5c=0xc8;}else{_0x11eb5c=0xce;}_0x36904d[_0xb7f7('0x1d')](_0x11eb5c);return _0x36904d[_0xb7f7('0x23')](_0xb7f7('0x24'),_0x3ced8d+'-'+_0x58afd4+'/'+_0x4645cf)['json'](_0x36cb0f);}return null;};}function patchUpdates(_0x5d2a5c){return function(_0xaaf6d5){try{jsonpatch[_0xb7f7('0x25')](_0xaaf6d5,_0x5d2a5c,!![]);}catch(_0x3ab84f){return BPromise['reject'](_0x3ab84f);}return _0xaaf6d5[_0xb7f7('0x26')]();};}function saveUpdates(_0x441870,_0x5548d3){return function(_0x1e6efa){if(_0x1e6efa){return _0x1e6efa[_0xb7f7('0x27')](_0x441870)[_0xb7f7('0x28')](function(_0x5f1764){return _0x5f1764;});}return null;};}function removeEntity(_0x44482e,_0x8f78c6){return function(_0x55f5dd){if(_0x55f5dd){return _0x55f5dd[_0xb7f7('0x29')]()[_0xb7f7('0x28')](function(){_0x44482e[_0xb7f7('0x1d')](0xcc)[_0xb7f7('0x1e')]();});}};}function handleEntityNotFound(_0x38b0af,_0x108f49){return function(_0x328f02){if(!_0x328f02){_0x38b0af[_0xb7f7('0x1c')](0x194);}return _0x328f02;};}function handleError(_0x5332ad,_0x519a48){_0x519a48=_0x519a48||0x1f4;return function(_0x2789d5){logger['error'](_0x2789d5['stack']);if(_0x2789d5[_0xb7f7('0x2a')]){delete _0x2789d5[_0xb7f7('0x2a')];}_0x5332ad['status'](_0x519a48)['send'](_0x2789d5);};}exports[_0xb7f7('0x2b')]=function(_0x32927e,_0x533848){var _0xf911e2={},_0x38017e={},_0x11e765={'count':0x0,'rows':[]};var _0x1cf564=db[_0xb7f7('0x2c')][_0xb7f7('0x2d')];_0x38017e[_0xb7f7('0x2e')]=_[_0xb7f7('0x2f')](_0x1cf564);_0x38017e[_0xb7f7('0x30')]=_[_0xb7f7('0x2f')](_0x32927e['query']);_0x38017e[_0xb7f7('0x31')]=_[_0xb7f7('0x32')](_0x38017e[_0xb7f7('0x2e')],_0x38017e[_0xb7f7('0x30')]);_0xf911e2[_0xb7f7('0x33')]=_['intersection'](_0x38017e[_0xb7f7('0x2e')],qs[_0xb7f7('0x34')](_0x32927e[_0xb7f7('0x30')][_0xb7f7('0x34')]));_0xf911e2[_0xb7f7('0x33')]=_0xf911e2['attributes'][_0xb7f7('0x35')]?_0xf911e2[_0xb7f7('0x33')]:_0x38017e[_0xb7f7('0x2e')];if(!_0x32927e[_0xb7f7('0x30')][_0xb7f7('0x36')](_0xb7f7('0x37'))){_0xf911e2['limit']=qs[_0xb7f7('0x22')](_0x32927e[_0xb7f7('0x30')][_0xb7f7('0x22')]);_0xf911e2['offset']=qs[_0xb7f7('0x21')](_0x32927e[_0xb7f7('0x30')][_0xb7f7('0x21')]);}_0xf911e2[_0xb7f7('0x38')]=qs[_0xb7f7('0x39')](_0x32927e[_0xb7f7('0x30')][_0xb7f7('0x39')]);_0xf911e2['where']=qs[_0xb7f7('0x31')](_[_0xb7f7('0x3a')](_0x32927e[_0xb7f7('0x30')],_0x38017e['filters']));if(_0x32927e[_0xb7f7('0x30')][_0xb7f7('0x3b')]){_0xf911e2[_0xb7f7('0x3c')]=_['merge'](_0xf911e2[_0xb7f7('0x3c')],{'$or':_[_0xb7f7('0x3d')](_0x1cf564,function(_0x3191a5){if(_0x3191a5[_0xb7f7('0x3e')][_0xb7f7('0x3f')]!==_0xb7f7('0x40')){var _0x49cf8d={};_0x49cf8d[_0x3191a5[_0xb7f7('0x41')]]={'$like':'%'+_0x32927e['query'][_0xb7f7('0x3b')]+'%'};return _0x49cf8d;}})});}_0xf911e2=_[_0xb7f7('0x42')]({},_0xf911e2,_0x32927e[_0xb7f7('0x43')]);var _0x5af9f4={'where':_0xf911e2[_0xb7f7('0x3c')]};return db[_0xb7f7('0x2c')][_0xb7f7('0x20')](_0x5af9f4)[_0xb7f7('0x28')](function(_0x2ae3b4){_0x11e765['count']=_0x2ae3b4;if(_0x32927e[_0xb7f7('0x30')][_0xb7f7('0x44')]){_0xf911e2['include']=[{'all':!![]}];}return db[_0xb7f7('0x2c')]['findAll'](_0xf911e2);})['then'](function(_0x555825){_0x11e765[_0xb7f7('0x45')]=_0x555825;return _0x11e765;})['then'](respondWithFilteredResult(_0x533848,_0xf911e2))[_0xb7f7('0x46')](handleError(_0x533848,null));};exports[_0xb7f7('0x47')]=function(_0x3ac6e7,_0xd7efe3){var _0x82017b={'raw':!![],'where':{'id':_0x3ac6e7[_0xb7f7('0x48')]['id']}},_0x4d5e6f={};_0x4d5e6f[_0xb7f7('0x2e')]=_[_0xb7f7('0x2f')](db[_0xb7f7('0x2c')]['rawAttributes']);_0x4d5e6f[_0xb7f7('0x30')]=_[_0xb7f7('0x2f')](_0x3ac6e7[_0xb7f7('0x30')]);_0x4d5e6f['filters']=_[_0xb7f7('0x32')](_0x4d5e6f[_0xb7f7('0x2e')],_0x4d5e6f[_0xb7f7('0x30')]);_0x82017b[_0xb7f7('0x33')]=_[_0xb7f7('0x32')](_0x4d5e6f[_0xb7f7('0x2e')],qs[_0xb7f7('0x34')](_0x3ac6e7['query'][_0xb7f7('0x34')]));_0x82017b[_0xb7f7('0x33')]=_0x82017b[_0xb7f7('0x33')][_0xb7f7('0x35')]?_0x82017b['attributes']:_0x4d5e6f[_0xb7f7('0x2e')];if(_0x3ac6e7['query']['includeAll']){_0x82017b['include']=[{'all':!![]}];}_0x82017b=_['merge']({},_0x82017b,_0x3ac6e7[_0xb7f7('0x43')]);return db['OpenchannelTransferReport']['find'](_0x82017b)[_0xb7f7('0x28')](handleEntityNotFound(_0xd7efe3,null))[_0xb7f7('0x28')](respondWithResult(_0xd7efe3,null))[_0xb7f7('0x46')](handleError(_0xd7efe3,null));};exports['create']=function(_0x39788d,_0x53ad32){return db[_0xb7f7('0x2c')][_0xb7f7('0x49')](_0x39788d[_0xb7f7('0x4a')],{})[_0xb7f7('0x28')](respondWithResult(_0x53ad32,0xc9))[_0xb7f7('0x46')](handleError(_0x53ad32,null));};exports[_0xb7f7('0x27')]=function(_0x20d4c0,_0x51b138){if(_0x20d4c0[_0xb7f7('0x4a')]['id']){delete _0x20d4c0[_0xb7f7('0x4a')]['id'];}return db[_0xb7f7('0x2c')][_0xb7f7('0x4b')]({'where':{'id':_0x20d4c0[_0xb7f7('0x48')]['id']}})[_0xb7f7('0x28')](handleEntityNotFound(_0x51b138,null))['then'](saveUpdates(_0x20d4c0['body'],null))[_0xb7f7('0x28')](respondWithResult(_0x51b138,null))[_0xb7f7('0x46')](handleError(_0x51b138,null));};exports['destroy']=function(_0x4d9a47,_0x521842){return db[_0xb7f7('0x2c')][_0xb7f7('0x4b')]({'where':{'id':_0x4d9a47['params']['id']}})['then'](handleEntityNotFound(_0x521842,null))[_0xb7f7('0x28')](removeEntity(_0x521842,null))[_0xb7f7('0x46')](handleError(_0x521842,null));};exports[_0xb7f7('0x4c')]=function(_0x378a2d,_0x3095f7){return db[_0xb7f7('0x2c')][_0xb7f7('0x4c')]()[_0xb7f7('0x28')](respondWithResult(_0x3095f7,null))[_0xb7f7('0x46')](handleError(_0x3095f7,null));};
\ No newline at end of file
index 726ec1a..ebd9ffe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1771=['../../config/environment','./openchannelTransferReport.attributes','exports','OpenchannelTransferReport','report_openchannel_transfer','uniqueid','lodash','../../config/logger','api','moment','bluebird','path','rimraf'];(function(_0x43d952,_0x453ec9){var _0x1c53b5=function(_0x46a1f0){while(--_0x46a1f0){_0x43d952['push'](_0x43d952['shift']());}};_0x1c53b5(++_0x453ec9);}(_0x1771,0x17f));var _0x1177=function(_0x23bd5b,_0x24f200){_0x23bd5b=_0x23bd5b-0x0;var _0xedb5e3=_0x1771[_0x23bd5b];return _0xedb5e3;};'use strict';var _=require(_0x1177('0x0'));var util=require('util');var logger=require(_0x1177('0x1'))(_0x1177('0x2'));var moment=require(_0x1177('0x3'));var BPromise=require(_0x1177('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x1177('0x5'));var rimraf=require(_0x1177('0x6'));var config=require(_0x1177('0x7'));var attributes=require(_0x1177('0x8'));module[_0x1177('0x9')]=function(_0x37c746,_0x4c139b){return _0x37c746['define'](_0x1177('0xa'),attributes,{'tableName':_0x1177('0xb'),'paranoid':![],'indexes':[{'name':_0x1177('0xc'),'fields':[_0x1177('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xbd9d=['define','OpenchannelTransferReport','uniqueid','util','../../config/logger','moment','bluebird','request-promise','path','./openchannelTransferReport.attributes','exports'];(function(_0x5b3757,_0x51946a){var _0x5d22ca=function(_0x4271f9){while(--_0x4271f9){_0x5b3757['push'](_0x5b3757['shift']());}};_0x5d22ca(++_0x51946a);}(_0xbd9d,0x158));var _0xdbd9=function(_0x2664da,_0x3ceda8){_0x2664da=_0x2664da-0x0;var _0x16ca61=_0xbd9d[_0x2664da];return _0x16ca61;};'use strict';var _=require('lodash');var util=require(_0xdbd9('0x0'));var logger=require(_0xdbd9('0x1'))('api');var moment=require(_0xdbd9('0x2'));var BPromise=require(_0xdbd9('0x3'));var rp=require(_0xdbd9('0x4'));var fs=require('fs');var path=require(_0xdbd9('0x5'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xdbd9('0x6'));module[_0xdbd9('0x7')]=function(_0x3f9a50,_0x1b803a){return _0x3f9a50[_0xdbd9('0x8')](_0xdbd9('0x9'),attributes,{'tableName':'report_openchannel_transfer','paranoid':![],'indexes':[{'name':_0xdbd9('0xa'),'fields':[_0xdbd9('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index 723e841..8f968e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5871=['OpenchannelTransferReport,\x20%s,\x20%s','debug','OpenchannelTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then'];(function(_0x440f24,_0x1484f1){var _0x25773b=function(_0x5e24f5){while(--_0x5e24f5){_0x440f24['push'](_0x440f24['shift']());}};_0x25773b(++_0x1484f1);}(_0x5871,0x1d5));var _0x1587=function(_0x4ffe06,_0x40d87b){_0x4ffe06=_0x4ffe06-0x0;var _0x1c5d3e=_0x5871[_0x4ffe06];return _0x1c5d3e;};'use strict';var _=require(_0x1587('0x0'));var util=require(_0x1587('0x1'));var moment=require(_0x1587('0x2'));var BPromise=require(_0x1587('0x3'));var rs=require(_0x1587('0x4'));var fs=require('fs');var Redis=require(_0x1587('0x5'));var db=require(_0x1587('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0x1587('0x7'))(_0x1587('0x8'));var config=require(_0x1587('0x9'));var jayson=require(_0x1587('0xa'));var client=jayson['client'][_0x1587('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xe844d8,_0x18849e,_0x143ec0){return new BPromise(function(_0x12e597,_0x244d7f){return client[_0x1587('0xc')](_0xe844d8,_0x143ec0)[_0x1587('0xd')](function(_0x58e27c){logger['info'](_0x1587('0xe'),_0x18849e,'request\x20sent');logger[_0x1587('0xf')](_0x1587('0x10'),_0x18849e,_0x1587('0x11'),JSON[_0x1587('0x12')](_0x58e27c));if(_0x58e27c[_0x1587('0x13')]){if(_0x58e27c[_0x1587('0x13')][_0x1587('0x14')]===0x1f4){logger[_0x1587('0x13')]('OpenchannelTransferReport,\x20%s,\x20%s',_0x18849e,_0x58e27c[_0x1587('0x13')][_0x1587('0x15')]);return _0x244d7f(_0x58e27c[_0x1587('0x13')]['message']);}logger[_0x1587('0x13')]('OpenchannelTransferReport,\x20%s,\x20%s',_0x18849e,_0x58e27c['error'][_0x1587('0x15')]);return _0x12e597(_0x58e27c['error'][_0x1587('0x15')]);}else{logger['info'](_0x1587('0xe'),_0x18849e,_0x1587('0x11'));_0x12e597(_0x58e27c['result'][_0x1587('0x15')]);}})[_0x1587('0x16')](function(_0x54d2e3){logger['error']('OpenchannelTransferReport,\x20%s,\x20%s',_0x18849e,_0x54d2e3);_0x244d7f(_0x54d2e3);});});}
\ No newline at end of file
+var _0xe893=['jayson/promise','client','request','OpenchannelTransferReport,\x20%s,\x20%s','request\x20sent','error','message','info','result','catch','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xe893,0xbe));var _0x3e89=function(_0x2918fb,_0x1ac725){_0x2918fb=_0x2918fb-0x0;var _0xef01f8=_0xe893[_0x2918fb];return _0xef01f8;};'use strict';var _=require('lodash');var util=require(_0x3e89('0x0'));var moment=require(_0x3e89('0x1'));var BPromise=require('bluebird');var rs=require(_0x3e89('0x2'));var fs=require('fs');var Redis=require(_0x3e89('0x3'));var db=require(_0x3e89('0x4'))['db'];var utils=require(_0x3e89('0x5'));var logger=require(_0x3e89('0x6'))('rpc');var config=require(_0x3e89('0x7'));var jayson=require(_0x3e89('0x8'));var client=jayson[_0x3e89('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x16d340,_0x14a6ba,_0x344d91){return new BPromise(function(_0x429b8e,_0x5ae8ff){return client[_0x3e89('0xa')](_0x16d340,_0x344d91)['then'](function(_0x595080){logger['info'](_0x3e89('0xb'),_0x14a6ba,_0x3e89('0xc'));logger['debug']('OpenchannelTransferReport,\x20%s,\x20%s,\x20%s',_0x14a6ba,_0x3e89('0xc'),JSON['stringify'](_0x595080));if(_0x595080[_0x3e89('0xd')]){if(_0x595080[_0x3e89('0xd')]['code']===0x1f4){logger[_0x3e89('0xd')](_0x3e89('0xb'),_0x14a6ba,_0x595080[_0x3e89('0xd')]['message']);return _0x5ae8ff(_0x595080[_0x3e89('0xd')][_0x3e89('0xe')]);}logger[_0x3e89('0xd')](_0x3e89('0xb'),_0x14a6ba,_0x595080[_0x3e89('0xd')][_0x3e89('0xe')]);return _0x429b8e(_0x595080[_0x3e89('0xd')]['message']);}else{logger[_0x3e89('0xf')](_0x3e89('0xb'),_0x14a6ba,'request\x20sent');_0x429b8e(_0x595080[_0x3e89('0x10')][_0x3e89('0xe')]);}})[_0x3e89('0x11')](function(_0xd6aa64){logger[_0x3e89('0xd')](_0x3e89('0xb'),_0x14a6ba,_0xd6aa64);_0x5ae8ff(_0xd6aa64);});});}
\ No newline at end of file
index ecd4222..4aad8ea 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7217=['post','put','/:id','update','delete','destroy','exports','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./pause.controller','get','isAuthenticated','index','show'];(function(_0x3521e3,_0xcb878c){var _0x5298b6=function(_0x560d48){while(--_0x560d48){_0x3521e3['push'](_0x3521e3['shift']());}};_0x5298b6(++_0xcb878c);}(_0x7217,0xa9));var _0x7721=function(_0x1ac595,_0x5d2081){_0x1ac595=_0x1ac595-0x0;var _0x455fff=_0x7217[_0x1ac595];return _0x455fff;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x7721('0x0'));var timeout=require('connect-timeout');var express=require(_0x7721('0x1'));var router=express[_0x7721('0x2')]();var auth=require(_0x7721('0x3'));var interaction=require(_0x7721('0x4'));var config=require(_0x7721('0x5'));var controller=require(_0x7721('0x6'));router[_0x7721('0x7')]('/',auth[_0x7721('0x8')](),controller[_0x7721('0x9')]);router[_0x7721('0x7')]('/:id',auth[_0x7721('0x8')](),controller[_0x7721('0xa')]);router[_0x7721('0xb')]('/',auth[_0x7721('0x8')](),controller['create']);router[_0x7721('0xc')](_0x7721('0xd'),auth['isAuthenticated'](),controller[_0x7721('0xe')]);router[_0x7721('0xf')](_0x7721('0xd'),auth['isAuthenticated'](),controller[_0x7721('0x10')]);module[_0x7721('0x11')]=router;
\ No newline at end of file
+var _0xd4bd=['get','isAuthenticated','show','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./pause.controller'];(function(_0x102d45,_0x390139){var _0x308851=function(_0xaeb964){while(--_0xaeb964){_0x102d45['push'](_0x102d45['shift']());}};_0x308851(++_0x390139);}(_0xd4bd,0x15f));var _0xdd4b=function(_0x1193ea,_0xc04ef0){_0x1193ea=_0x1193ea-0x0;var _0x5e4000=_0xd4bd[_0x1193ea];return _0x5e4000;};'use strict';var multer=require(_0xdd4b('0x0'));var util=require(_0xdd4b('0x1'));var path=require(_0xdd4b('0x2'));var timeout=require(_0xdd4b('0x3'));var express=require(_0xdd4b('0x4'));var router=express['Router']();var auth=require(_0xdd4b('0x5'));var interaction=require(_0xdd4b('0x6'));var config=require(_0xdd4b('0x7'));var controller=require(_0xdd4b('0x8'));router[_0xdd4b('0x9')]('/',auth['isAuthenticated'](),controller['index']);router[_0xdd4b('0x9')]('/:id',auth[_0xdd4b('0xa')](),controller[_0xdd4b('0xb')]);router['post']('/',auth['isAuthenticated'](),controller[_0xdd4b('0xc')]);router[_0xdd4b('0xd')]('/:id',auth[_0xdd4b('0xa')](),controller[_0xdd4b('0xe')]);router[_0xdd4b('0xf')]('/:id',auth[_0xdd4b('0xa')](),controller[_0xdd4b('0x10')]);module[_0xdd4b('0x11')]=router;
\ No newline at end of file
index a9e2fab..61e708b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe0b9=['STRING','name'];(function(_0x1e16f4,_0x389628){var _0xf8b716=function(_0xfec109){while(--_0xfec109){_0x1e16f4['push'](_0x1e16f4['shift']());}};_0xf8b716(++_0x389628);}(_0xe0b9,0xb4));var _0x9e0b=function(_0x3b1b23,_0x21bccd){_0x3b1b23=_0x3b1b23-0x0;var _0x1efc85=_0xe0b9[_0x3b1b23];return _0x1efc85;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0x9e0b('0x0')],'unique':_0x9e0b('0x1'),'allowNull':![]},'description':{'type':Sequelize[_0x9e0b('0x0')]}};
\ No newline at end of file
+var _0x3580=['STRING','name','sequelize','exports'];(function(_0x308213,_0x224541){var _0x2e1619=function(_0x972b51){while(--_0x972b51){_0x308213['push'](_0x308213['shift']());}};_0x2e1619(++_0x224541);}(_0x3580,0xaa));var _0x0358=function(_0x5ae1af,_0x3a3c68){_0x5ae1af=_0x5ae1af-0x0;var _0x57769c=_0x3580[_0x5ae1af];return _0x57769c;};'use strict';var Sequelize=require(_0x0358('0x0'));module[_0x0358('0x1')]={'name':{'type':Sequelize[_0x0358('0x2')],'unique':_0x0358('0x3'),'allowNull':![]},'description':{'type':Sequelize[_0x0358('0x2')]}};
\ No newline at end of file
index b17402b..537f892 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(_0x52662b,_0x4a3c68){var _0x509c8f=function(_0x5086d8){while(--_0x5086d8){_0x52662b['push'](_0x52662b['shift']());}};_0x509c8f(++_0x4a3c68);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4243a3,_0x447337){_0x4243a3=_0x4243a3-0x0;var _0x1b2a33=_0xa9e0[_0x4243a3];return _0x1b2a33;};'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(_0x2a3412,_0x5aff1e){var _0x20e165=function(_0x36fcea){while(--_0x36fcea){_0x2a3412['push'](_0x2a3412['shift']());}};_0x20e165(++_0x5aff1e);}(_0xa9e0,0x123));var _0x0a9e=function(_0x1b828b,_0x344400){_0x1b828b=_0x1b828b-0x0;var _0x98da1a=_0xa9e0[_0x1b828b];return _0x98da1a;};'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 45e9b59..7172850 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1dd3=['moment','bluebird','request-promise','path','rimraf','../../config/environment','./pause.attributes','exports','define','tools_pauses','lodash','../../config/logger'];(function(_0xd7333b,_0x29a574){var _0x447d41=function(_0x4b9257){while(--_0x4b9257){_0xd7333b['push'](_0xd7333b['shift']());}};_0x447d41(++_0x29a574);}(_0x1dd3,0x136));var _0x31dd=function(_0x10d39e,_0x260735){_0x10d39e=_0x10d39e-0x0;var _0x27a17d=_0x1dd3[_0x10d39e];return _0x27a17d;};'use strict';var _=require(_0x31dd('0x0'));var util=require('util');var logger=require(_0x31dd('0x1'))('api');var moment=require(_0x31dd('0x2'));var BPromise=require(_0x31dd('0x3'));var rp=require(_0x31dd('0x4'));var fs=require('fs');var path=require(_0x31dd('0x5'));var rimraf=require(_0x31dd('0x6'));var config=require(_0x31dd('0x7'));var attributes=require(_0x31dd('0x8'));module[_0x31dd('0x9')]=function(_0x35b742,_0x24863e){return _0x35b742[_0x31dd('0xa')]('Pause',attributes,{'tableName':_0x31dd('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3901=['lodash','util','../../config/logger','api','moment','bluebird','rimraf','../../config/environment','./pause.attributes','exports','define','Pause'];(function(_0x2f9d88,_0x3396fa){var _0x1a286c=function(_0x447cb3){while(--_0x447cb3){_0x2f9d88['push'](_0x2f9d88['shift']());}};_0x1a286c(++_0x3396fa);}(_0x3901,0x1c8));var _0x1390=function(_0x2e78b4,_0x4e9b05){_0x2e78b4=_0x2e78b4-0x0;var _0x129f4d=_0x3901[_0x2e78b4];return _0x129f4d;};'use strict';var _=require(_0x1390('0x0'));var util=require(_0x1390('0x1'));var logger=require(_0x1390('0x2'))(_0x1390('0x3'));var moment=require(_0x1390('0x4'));var BPromise=require(_0x1390('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x1390('0x6'));var config=require(_0x1390('0x7'));var attributes=require(_0x1390('0x8'));module[_0x1390('0x9')]=function(_0x3ef39d,_0x1d60e0){return _0x3ef39d[_0x1390('0xa')](_0x1390('0xb'),attributes,{'tableName':'tools_pauses','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f529a34..6034d7c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb492=['ShowPause','Pause','options','raw','where','include','model','attributes','map','stringify','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','http','request','then','info','Pause,\x20%s,\x20%s','debug','Pause,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','catch'];(function(_0x156a0d,_0x3946ce){var _0x98a9ba=function(_0x46c1b2){while(--_0x46c1b2){_0x156a0d['push'](_0x156a0d['shift']());}};_0x98a9ba(++_0x3946ce);}(_0xb492,0x172));var _0x2b49=function(_0x21301f,_0x3cb7c2){_0x21301f=_0x21301f-0x0;var _0x111af4=_0xb492[_0x21301f];return _0x111af4;};'use strict';var _=require('lodash');var util=require(_0x2b49('0x0'));var moment=require(_0x2b49('0x1'));var BPromise=require(_0x2b49('0x2'));var rs=require(_0x2b49('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x2b49('0x4'));var logger=require(_0x2b49('0x5'))(_0x2b49('0x6'));var config=require(_0x2b49('0x7'));var jayson=require('jayson/promise');var client=jayson['client'][_0x2b49('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x363d21,_0x4b4d49,_0x2b745f){return new BPromise(function(_0x1b06c2,_0x349f69){return client[_0x2b49('0x9')](_0x363d21,_0x2b745f)[_0x2b49('0xa')](function(_0x597a3d){logger[_0x2b49('0xb')](_0x2b49('0xc'),_0x4b4d49,'request\x20sent');logger[_0x2b49('0xd')](_0x2b49('0xe'),_0x4b4d49,_0x2b49('0xf'),JSON['stringify'](_0x597a3d));if(_0x597a3d[_0x2b49('0x10')]){if(_0x597a3d[_0x2b49('0x10')][_0x2b49('0x11')]===0x1f4){logger[_0x2b49('0x10')](_0x2b49('0xc'),_0x4b4d49,_0x597a3d[_0x2b49('0x10')]['message']);return _0x349f69(_0x597a3d['error'][_0x2b49('0x12')]);}logger[_0x2b49('0x10')]('Pause,\x20%s,\x20%s',_0x4b4d49,_0x597a3d['error'][_0x2b49('0x12')]);return _0x1b06c2(_0x597a3d[_0x2b49('0x10')][_0x2b49('0x12')]);}else{logger['info'](_0x2b49('0xc'),_0x4b4d49,_0x2b49('0xf'));_0x1b06c2(_0x597a3d['result']['message']);}})[_0x2b49('0x13')](function(_0xa72527){logger[_0x2b49('0x10')](_0x2b49('0xc'),_0x4b4d49,_0xa72527);_0x349f69(_0xa72527);});});}exports[_0x2b49('0x14')]=function(_0x248de1){var _0xd51946=this;return new Promise(function(_0x25f0d8,_0x2034e5){return db[_0x2b49('0x15')]['find']({'raw':_0x248de1[_0x2b49('0x16')]?_0x248de1['options'][_0x2b49('0x17')]===undefined?!![]:![]:!![],'where':_0x248de1[_0x2b49('0x16')]?_0x248de1[_0x2b49('0x16')][_0x2b49('0x18')]||null:null,'attributes':_0x248de1[_0x2b49('0x16')]?_0x248de1[_0x2b49('0x16')]['attributes']||null:null,'include':_0x248de1[_0x2b49('0x16')]?_0x248de1[_0x2b49('0x16')][_0x2b49('0x19')]?_['map'](_0x248de1[_0x2b49('0x16')]['include'],function(_0x579d9e){return{'model':db[_0x579d9e[_0x2b49('0x1a')]],'as':_0x579d9e['as'],'attributes':_0x579d9e[_0x2b49('0x1b')],'include':_0x579d9e[_0x2b49('0x19')]?_[_0x2b49('0x1c')](_0x579d9e[_0x2b49('0x19')],function(_0x522591){return{'model':db[_0x522591[_0x2b49('0x1a')]],'as':_0x522591['as'],'attributes':_0x522591['attributes'],'include':_0x522591[_0x2b49('0x19')]?_[_0x2b49('0x1c')](_0x522591[_0x2b49('0x19')],function(_0x464754){return{'model':db[_0x464754['model']],'as':_0x464754['as'],'attributes':_0x464754[_0x2b49('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x2b49('0xa')](function(_0x1dee89){logger[_0x2b49('0xb')](_0x2b49('0x14'),_0x248de1);logger[_0x2b49('0xd')]('ShowPause',_0x248de1,JSON[_0x2b49('0x1d')](_0x1dee89));_0x25f0d8(_0x1dee89);})[_0x2b49('0x13')](function(_0x237233){logger[_0x2b49('0x10')](_0x2b49('0x14'),_0x237233[_0x2b49('0x12')],_0x248de1);_0x2034e5(_0xd51946[_0x2b49('0x10')](0x1f4,_0x237233[_0x2b49('0x12')]));});});};
\ No newline at end of file
+var _0x34f8=['http','request','then','Pause,\x20%s,\x20%s','request\x20sent','debug','Pause,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','ShowPause','Pause','options','raw','where','attributes','include','map','model','lodash','util','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','client'];(function(_0x1394a2,_0x533264){var _0x31dcd1=function(_0x58c693){while(--_0x58c693){_0x1394a2['push'](_0x1394a2['shift']());}};_0x31dcd1(++_0x533264);}(_0x34f8,0xbc));var _0x834f=function(_0x4a2183,_0x53e74d){_0x4a2183=_0x4a2183-0x0;var _0xc7c01d=_0x34f8[_0x4a2183];return _0xc7c01d;};'use strict';var _=require(_0x834f('0x0'));var util=require(_0x834f('0x1'));var moment=require('moment');var BPromise=require(_0x834f('0x2'));var rs=require(_0x834f('0x3'));var fs=require('fs');var Redis=require(_0x834f('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x834f('0x5'));var logger=require(_0x834f('0x6'))(_0x834f('0x7'));var config=require(_0x834f('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x834f('0x9')][_0x834f('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x341f3d,_0x22fb2,_0x559443){return new BPromise(function(_0x2ea0d6,_0x4f5627){return client[_0x834f('0xb')](_0x341f3d,_0x559443)[_0x834f('0xc')](function(_0x48b723){logger['info'](_0x834f('0xd'),_0x22fb2,_0x834f('0xe'));logger[_0x834f('0xf')](_0x834f('0x10'),_0x22fb2,_0x834f('0xe'),JSON[_0x834f('0x11')](_0x48b723));if(_0x48b723[_0x834f('0x12')]){if(_0x48b723['error'][_0x834f('0x13')]===0x1f4){logger[_0x834f('0x12')](_0x834f('0xd'),_0x22fb2,_0x48b723['error'][_0x834f('0x14')]);return _0x4f5627(_0x48b723[_0x834f('0x12')][_0x834f('0x14')]);}logger[_0x834f('0x12')]('Pause,\x20%s,\x20%s',_0x22fb2,_0x48b723['error'][_0x834f('0x14')]);return _0x2ea0d6(_0x48b723['error'][_0x834f('0x14')]);}else{logger[_0x834f('0x15')](_0x834f('0xd'),_0x22fb2,_0x834f('0xe'));_0x2ea0d6(_0x48b723[_0x834f('0x16')][_0x834f('0x14')]);}})[_0x834f('0x17')](function(_0x2c5768){logger['error'](_0x834f('0xd'),_0x22fb2,_0x2c5768);_0x4f5627(_0x2c5768);});});}exports[_0x834f('0x18')]=function(_0x4eb572){var _0x3e8ff6=this;return new Promise(function(_0x2722e6,_0x7788a1){return db[_0x834f('0x19')]['find']({'raw':_0x4eb572[_0x834f('0x1a')]?_0x4eb572[_0x834f('0x1a')][_0x834f('0x1b')]===undefined?!![]:![]:!![],'where':_0x4eb572[_0x834f('0x1a')]?_0x4eb572[_0x834f('0x1a')][_0x834f('0x1c')]||null:null,'attributes':_0x4eb572['options']?_0x4eb572[_0x834f('0x1a')][_0x834f('0x1d')]||null:null,'include':_0x4eb572[_0x834f('0x1a')]?_0x4eb572[_0x834f('0x1a')][_0x834f('0x1e')]?_[_0x834f('0x1f')](_0x4eb572['options'][_0x834f('0x1e')],function(_0x2b7581){return{'model':db[_0x2b7581[_0x834f('0x20')]],'as':_0x2b7581['as'],'attributes':_0x2b7581[_0x834f('0x1d')],'include':_0x2b7581[_0x834f('0x1e')]?_[_0x834f('0x1f')](_0x2b7581[_0x834f('0x1e')],function(_0x15e2f8){return{'model':db[_0x15e2f8['model']],'as':_0x15e2f8['as'],'attributes':_0x15e2f8['attributes'],'include':_0x15e2f8['include']?_[_0x834f('0x1f')](_0x15e2f8[_0x834f('0x1e')],function(_0x15da76){return{'model':db[_0x15da76[_0x834f('0x20')]],'as':_0x15da76['as'],'attributes':_0x15da76[_0x834f('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x834f('0xc')](function(_0xc3d112){logger[_0x834f('0x15')](_0x834f('0x18'),_0x4eb572);logger[_0x834f('0xf')]('ShowPause',_0x4eb572,JSON[_0x834f('0x11')](_0xc3d112));_0x2722e6(_0xc3d112);})['catch'](function(_0x4dabaa){logger[_0x834f('0x12')](_0x834f('0x18'),_0x4dabaa[_0x834f('0x14')],_0x4eb572);_0x7788a1(_0x3e8ff6['error'](0x1f4,_0x4dabaa['message']));});});};
\ No newline at end of file
index 88d918d..1d10c8f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf0ab=['server/files/plugins','format','basename','originalname','now','post','single','file','upload','webhookPost','put','update','delete','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','index','get','/webhook','webhookGet','/:id','show','/:id/download','diskStorage','join','root'];(function(_0x24eae4,_0x5d21a7){var _0x32a5ab=function(_0x2854af){while(--_0x2854af){_0x24eae4['push'](_0x24eae4['shift']());}};_0x32a5ab(++_0x5d21a7);}(_0xf0ab,0x19a));var _0xbf0a=function(_0xbe1b2d,_0xcae67c){_0xbe1b2d=_0xbe1b2d-0x0;var _0x1e38a3=_0xf0ab[_0xbe1b2d];return _0x1e38a3;};'use strict';var multer=require(_0xbf0a('0x0'));var util=require(_0xbf0a('0x1'));var path=require(_0xbf0a('0x2'));var timeout=require(_0xbf0a('0x3'));var express=require('express');var router=express[_0xbf0a('0x4')]();var auth=require(_0xbf0a('0x5'));var interaction=require(_0xbf0a('0x6'));var config=require(_0xbf0a('0x7'));var controller=require('./plugin.controller');router['get']('/',auth[_0xbf0a('0x8')](),controller[_0xbf0a('0x9')]);router[_0xbf0a('0xa')](_0xbf0a('0xb'),controller[_0xbf0a('0xc')]);router[_0xbf0a('0xa')](_0xbf0a('0xd'),auth['isAuthenticated'](),controller[_0xbf0a('0xe')]);router[_0xbf0a('0xa')](_0xbf0a('0xf'),auth['isAuthenticated'](),controller['download']);var upload=multer({'storage':multer[_0xbf0a('0x10')]({'destination':function(_0x11c08d,_0x52e06d,_0x1b84db){_0x1b84db(null,path[_0xbf0a('0x11')](config[_0xbf0a('0x12')],_0xbf0a('0x13')));},'filename':function(_0x544db9,_0x2f688f,_0x246a9b){_0x2f688f['originalname']=_0x2f688f['originalname']['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x246a9b(null,util[_0xbf0a('0x14')]('%s-%s%s',path[_0xbf0a('0x15')](_0x2f688f['originalname'],path['extname'](_0x2f688f[_0xbf0a('0x16')])),Date[_0xbf0a('0x17')](),path['extname'](_0x2f688f['originalname'])));}})});router[_0xbf0a('0x18')]('/',upload[_0xbf0a('0x19')](_0xbf0a('0x1a')),controller[_0xbf0a('0x1b')]);router[_0xbf0a('0x18')](_0xbf0a('0xb'),controller[_0xbf0a('0x1c')]);router[_0xbf0a('0x1d')](_0xbf0a('0xd'),auth[_0xbf0a('0x8')](),controller[_0xbf0a('0x1e')]);router[_0xbf0a('0x1f')](_0xbf0a('0xd'),auth[_0xbf0a('0x8')](),controller[_0xbf0a('0x1f')]);module[_0xbf0a('0x20')]=router;
\ No newline at end of file
+var _0xca45=['%s-%s%s','basename','originalname','extname','now','single','file','upload','post','webhookPost','put','update','delete','exports','multer','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/webhook','/:id','isAuthenticated','show','/:id/download','download','diskStorage','join','root','server/files/plugins','replace','format'];(function(_0x261522,_0x1adc1f){var _0x98a25a=function(_0x1b0f9c){while(--_0x1b0f9c){_0x261522['push'](_0x261522['shift']());}};_0x98a25a(++_0x1adc1f);}(_0xca45,0x74));var _0x5ca4=function(_0x5b6841,_0x4ff34b){_0x5b6841=_0x5b6841-0x0;var _0x2bdedd=_0xca45[_0x5b6841];return _0x2bdedd;};'use strict';var multer=require(_0x5ca4('0x0'));var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require(_0x5ca4('0x1'));var router=express[_0x5ca4('0x2')]();var auth=require(_0x5ca4('0x3'));var interaction=require(_0x5ca4('0x4'));var config=require(_0x5ca4('0x5'));var controller=require('./plugin.controller');router[_0x5ca4('0x6')]('/',auth['isAuthenticated'](),controller[_0x5ca4('0x7')]);router[_0x5ca4('0x6')](_0x5ca4('0x8'),controller['webhookGet']);router[_0x5ca4('0x6')](_0x5ca4('0x9'),auth[_0x5ca4('0xa')](),controller[_0x5ca4('0xb')]);router['get'](_0x5ca4('0xc'),auth[_0x5ca4('0xa')](),controller[_0x5ca4('0xd')]);var upload=multer({'storage':multer[_0x5ca4('0xe')]({'destination':function(_0x515f07,_0xc74226,_0x35b332){_0x35b332(null,path[_0x5ca4('0xf')](config[_0x5ca4('0x10')],_0x5ca4('0x11')));},'filename':function(_0x353239,_0x53dbe9,_0x23dd8d){_0x53dbe9['originalname']=_0x53dbe9['originalname'][_0x5ca4('0x12')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x23dd8d(null,util[_0x5ca4('0x13')](_0x5ca4('0x14'),path[_0x5ca4('0x15')](_0x53dbe9[_0x5ca4('0x16')],path[_0x5ca4('0x17')](_0x53dbe9[_0x5ca4('0x16')])),Date[_0x5ca4('0x18')](),path[_0x5ca4('0x17')](_0x53dbe9['originalname'])));}})});router['post']('/',upload[_0x5ca4('0x19')](_0x5ca4('0x1a')),controller[_0x5ca4('0x1b')]);router[_0x5ca4('0x1c')](_0x5ca4('0x8'),controller[_0x5ca4('0x1d')]);router[_0x5ca4('0x1e')](_0x5ca4('0x9'),auth[_0x5ca4('0xa')](),controller[_0x5ca4('0x1f')]);router[_0x5ca4('0x20')](_0x5ca4('0x9'),auth[_0x5ca4('0xa')](),controller[_0x5ca4('0x20')]);module[_0x5ca4('0x21')]=router;
\ No newline at end of file
index 77ca9a5..2e90971 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed69=['Indicates\x20whether\x20the\x20plugin\x20is\x20installed.\x20Updated\x20when\x20the\x20plugin\x20is\x20installed/uninstalled.','agentOnly','never','always','exports','STRING','ENUM','script','TEXT','The\x20physical\x20path\x20where\x20the\x20plugin\x20is\x20stored.'];(function(_0x525673,_0xb429c2){var _0x8f7574=function(_0xeb3bce){while(--_0xeb3bce){_0x525673['push'](_0x525673['shift']());}};_0x8f7574(++_0xb429c2);}(_0xed69,0x1c6));var _0x9ed6=function(_0x22b8a3,_0x2a79a7){_0x22b8a3=_0x22b8a3-0x0;var _0x199a0c=_0xed69[_0x22b8a3];return _0x199a0c;};'use strict';var Sequelize=require('sequelize');module[_0x9ed6('0x0')]={'name':{'type':Sequelize[_0x9ed6('0x1')]},'type':{'type':Sequelize[_0x9ed6('0x2')]('html',_0x9ed6('0x3'))},'description':{'type':Sequelize[_0x9ed6('0x4')]},'version':{'type':Sequelize[_0x9ed6('0x4')]},'path':{'type':Sequelize[_0x9ed6('0x1')],'comment':_0x9ed6('0x5')},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':_0x9ed6('0x6')},'sidebar':{'type':Sequelize[_0x9ed6('0x2')]('adminOnly',_0x9ed6('0x7'),'always',_0x9ed6('0x8')),'defaultValue':_0x9ed6('0x9'),'comment':'Indicates\x20whether\x20to\x20display\x20the\x20plugin\x20in\x20the\x20sidebar.'},'icon':{'type':Sequelize['STRING']},'adminUrl':{'type':Sequelize[_0x9ed6('0x1')]},'agentUrl':{'type':Sequelize[_0x9ed6('0x1')]},'scriptName':{'type':Sequelize['STRING']},'scriptPath':{'type':Sequelize[_0x9ed6('0x1')]}};
\ No newline at end of file
+var _0xb773=['The\x20physical\x20path\x20where\x20the\x20plugin\x20is\x20stored.','BOOLEAN','Indicates\x20whether\x20the\x20plugin\x20is\x20installed.\x20Updated\x20when\x20the\x20plugin\x20is\x20installed/uninstalled.','ENUM','adminOnly','agentOnly','always','never','Indicates\x20whether\x20to\x20display\x20the\x20plugin\x20in\x20the\x20sidebar.','sequelize','STRING','html','TEXT'];(function(_0x49ca18,_0x5e6d05){var _0x145d54=function(_0x30b9be){while(--_0x30b9be){_0x49ca18['push'](_0x49ca18['shift']());}};_0x145d54(++_0x5e6d05);}(_0xb773,0x182));var _0x3b77=function(_0x505b15,_0x576feb){_0x505b15=_0x505b15-0x0;var _0x3f4c13=_0xb773[_0x505b15];return _0x3f4c13;};'use strict';var Sequelize=require(_0x3b77('0x0'));module['exports']={'name':{'type':Sequelize[_0x3b77('0x1')]},'type':{'type':Sequelize['ENUM'](_0x3b77('0x2'),'script')},'description':{'type':Sequelize[_0x3b77('0x3')]},'version':{'type':Sequelize['TEXT']},'path':{'type':Sequelize[_0x3b77('0x1')],'comment':_0x3b77('0x4')},'active':{'type':Sequelize[_0x3b77('0x5')],'defaultValue':0x0,'comment':_0x3b77('0x6')},'sidebar':{'type':Sequelize[_0x3b77('0x7')](_0x3b77('0x8'),_0x3b77('0x9'),_0x3b77('0xa'),_0x3b77('0xb')),'defaultValue':_0x3b77('0xa'),'comment':_0x3b77('0xc')},'icon':{'type':Sequelize[_0x3b77('0x1')]},'adminUrl':{'type':Sequelize[_0x3b77('0x1')]},'agentUrl':{'type':Sequelize[_0x3b77('0x1')]},'scriptName':{'type':Sequelize[_0x3b77('0x1')]},'scriptPath':{'type':Sequelize['STRING']}};
\ No newline at end of file
index af6929d..adfa809 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9d89=['resolve','\x27PATH\x27\x20parameter\x20not\x20specified','port','\x27PORT\x27\x20parameter\x20not\x20specified','hostname','http://localhost:','method','%s%s','headers','content-type','statusCode','webhookPost','encoding','content-length','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','jsforce','querystring','papaparse','extract-zip','archiver','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./plugin.socket','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','get','Plugins','UserProfileResource','end','error','stack','name','send','index','Plugin','rawAttributes','model','keys','filters','query','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','filter','merge','where','type','key','VIRTUAL','options','includeAll','include','findAll','catch','show','params','find','download','join','root','server/files/plugins','format','basename','createWriteStream','zip','code','ENOENT','Sequelize','Error','Error\x20while\x20generating\x20the\x20zip\x20archive','pipe','glob','**/*','dirname','finalize','close','existsSync','%s.zip','Error\x20while\x20downloading\x20the\x20plugin','unlinkSync','Download\x20completed','info','Temporary\x20file\x20removed','upload','filename','extname','file','Plugin\x20upload\x20filepath:\x20%s','Plugin\x20upload\x20destination:\x20%s','chmodSync','0777','readdirSync','Invalid\x20plugin\x20structure','lstatSync','isFile','isDirectory','some','manifest.json','Plugin\x20manifest\x20missing','readFileSync','parse','Invalid\x20manifest:\x20name\x20missing','undefined','Invalid\x20manifest:\x20type\x20missing','version','Invalid\x20manifest:\x20version\x20not\x20specified','parameters','Invalid\x20manifest:\x20parameters\x20missing','views','Invalid\x20manifest:\x20views\x20missing','admin','agent','Invalid\x20manifest:\x20no\x20view\x20specified','script','scriptName','scriptPath','Invalid\x20manifest:\x20script\x20path\x20missing','Invalid\x20manifest:\x20invalid\x20type','description','sidebar','icon','icon-apps','test','plugins','Warning:\x20admin\x20view\x20not\x20specified','Warning:\x20agent\x20view\x20not\x20specified','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','Zip\x20archive\x20removed','Extracted\x20folder\x20removed','delete','webhookGet'];(function(_0x59cd0d,_0x593998){var _0x368be4=function(_0x3ff5aa){while(--_0x3ff5aa){_0x59cd0d['push'](_0x59cd0d['shift']());}};_0x368be4(++_0x593998);}(_0x9d89,0xc0));var _0x99d8=function(_0x1ae2be,_0x1b5de9){_0x1ae2be=_0x1ae2be-0x0;var _0x51e7df=_0x9d89[_0x1ae2be];return _0x51e7df;};'use strict';var pdf=require(_0x99d8('0x0'));var emlformat=require(_0x99d8('0x1'));var rimraf=require(_0x99d8('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x99d8('0x3'));var rp=require(_0x99d8('0x4'));var moment=require(_0x99d8('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x99d8('0x6'));var util=require(_0x99d8('0x7'));var path=require(_0x99d8('0x8'));var sox=require(_0x99d8('0x9'));var csv=require(_0x99d8('0xa'));var ejs=require(_0x99d8('0xb'));var fs=require('fs');var _=require(_0x99d8('0xc'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x99d8('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x99d8('0xa'));var querystring=require(_0x99d8('0xe'));var Papa=require(_0x99d8('0xf'));var extract=require(_0x99d8('0x10'));var rimraf=require('rimraf');var archiver=require(_0x99d8('0x11'));var Redis=require(_0x99d8('0x12'));var authService=require(_0x99d8('0x13'));var qs=require(_0x99d8('0x14'));var hardwareService=require(_0x99d8('0x15'));var logger=require(_0x99d8('0x16'))(_0x99d8('0x17'));var utils=require('../../config/utils');var config=require(_0x99d8('0x18'));var db=require(_0x99d8('0x19'))['db'];config[_0x99d8('0x1a')]=_[_0x99d8('0x1b')](config[_0x99d8('0x1a')],{'host':_0x99d8('0x1c'),'port':0x18eb});var socket=require(_0x99d8('0x1d'))(new Redis(config[_0x99d8('0x1a')]));require(_0x99d8('0x1e'))['register'](socket);function respondWithStatusCode(_0x2edf47,_0x51f076){_0x51f076=_0x51f076||0xcc;return function(_0x42159f){if(_0x42159f){return _0x2edf47[_0x99d8('0x1f')](_0x51f076);}return _0x2edf47[_0x99d8('0x20')](_0x51f076)['end']();};}function respondWithResult(_0x3c6f5a,_0x4ce28c){_0x4ce28c=_0x4ce28c||0xc8;return function(_0x31e1dc){if(_0x31e1dc){return _0x3c6f5a[_0x99d8('0x20')](_0x4ce28c)[_0x99d8('0x21')](_0x31e1dc);}};}function respondWithFilteredResult(_0x409078,_0x106cac){return function(_0x8f886a){if(_0x8f886a){var _0x25edaf=_0x8f886a[_0x99d8('0x22')],_0x4ddbb3=_0x106cac[_0x99d8('0x23')],_0x5c3888=_0x106cac['offset']+_0x106cac[_0x99d8('0x24')],_0xdd2f61;if(_0x5c3888>=_0x25edaf){_0x5c3888=_0x25edaf;_0xdd2f61=0xc8;}else{_0xdd2f61=0xce;}_0x409078[_0x99d8('0x20')](_0xdd2f61);return _0x409078[_0x99d8('0x25')](_0x99d8('0x26'),_0x4ddbb3+'-'+_0x5c3888+'/'+_0x25edaf)[_0x99d8('0x21')](_0x8f886a);}return null;};}function patchUpdates(_0x1a59ee){return function(_0x14489e){try{jsonpatch[_0x99d8('0x27')](_0x14489e,_0x1a59ee,!![]);}catch(_0x46f3be){return BPromise[_0x99d8('0x28')](_0x46f3be);}return _0x14489e[_0x99d8('0x29')]();};}function saveUpdates(_0x3a4f9d,_0x19279d){return function(_0x9904bb){if(_0x9904bb){return _0x9904bb[_0x99d8('0x2a')](_0x3a4f9d)['then'](function(_0x365b4e){return _0x365b4e;});}return null;};}function removeEntity(_0x35068d,_0x2c0fa1){return function(_0x1178a0){if(_0x1178a0){return _0x1178a0[_0x99d8('0x2b')]()[_0x99d8('0x2c')](function(){var _0x791828=_0x1178a0[_0x99d8('0x2d')]({'plain':!![]});var _0x3ca3f4=_0x99d8('0x2e');return db[_0x99d8('0x2f')][_0x99d8('0x2b')]({'where':{'type':_0x3ca3f4,'resourceId':_0x791828['id']}})[_0x99d8('0x2c')](function(){return _0x1178a0;});})[_0x99d8('0x2c')](function(){_0x35068d[_0x99d8('0x20')](0xcc)[_0x99d8('0x30')]();});}};}function handleEntityNotFound(_0x2c10ad,_0x31f251){return function(_0x45a844){if(!_0x45a844){_0x2c10ad[_0x99d8('0x1f')](0x194);}return _0x45a844;};}function handleError(_0x354ca3,_0x2a87d5){_0x2a87d5=_0x2a87d5||0x1f4;return function(_0x49aab2){logger[_0x99d8('0x31')](_0x49aab2[_0x99d8('0x32')]);if(_0x49aab2[_0x99d8('0x33')]){delete _0x49aab2[_0x99d8('0x33')];}_0x354ca3[_0x99d8('0x20')](_0x2a87d5)[_0x99d8('0x34')](_0x49aab2);};}exports[_0x99d8('0x35')]=function(_0x5b11c4,_0x3df7f2){var _0x489db7={},_0x5af105={},_0x282d14={'count':0x0,'rows':[]};var _0x4b576a=db[_0x99d8('0x36')][_0x99d8('0x37')];_0x5af105[_0x99d8('0x38')]=_[_0x99d8('0x39')](_0x4b576a);_0x5af105['query']=_[_0x99d8('0x39')](_0x5b11c4['query']);_0x5af105[_0x99d8('0x3a')]=_['intersection'](_0x5af105[_0x99d8('0x38')],_0x5af105[_0x99d8('0x3b')]);_0x489db7['attributes']=_[_0x99d8('0x3c')](_0x5af105[_0x99d8('0x38')],qs[_0x99d8('0x3d')](_0x5b11c4[_0x99d8('0x3b')][_0x99d8('0x3d')]));_0x489db7[_0x99d8('0x3e')]=_0x489db7[_0x99d8('0x3e')][_0x99d8('0x3f')]?_0x489db7['attributes']:_0x5af105[_0x99d8('0x38')];if(!_0x5b11c4['query'][_0x99d8('0x40')](_0x99d8('0x41'))){_0x489db7['limit']=qs[_0x99d8('0x24')](_0x5b11c4[_0x99d8('0x3b')][_0x99d8('0x24')]);_0x489db7[_0x99d8('0x23')]=qs[_0x99d8('0x23')](_0x5b11c4[_0x99d8('0x3b')][_0x99d8('0x23')]);}_0x489db7[_0x99d8('0x42')]=qs[_0x99d8('0x43')](_0x5b11c4[_0x99d8('0x3b')]['sort']);_0x489db7['where']=qs['filters'](_['pick'](_0x5b11c4[_0x99d8('0x3b')],_0x5af105['filters']));if(_0x5b11c4['query'][_0x99d8('0x44')]){_0x489db7['where']=_[_0x99d8('0x45')](_0x489db7[_0x99d8('0x46')],{'$or':_['map'](_0x4b576a,function(_0x41c1c9){if(_0x41c1c9[_0x99d8('0x47')][_0x99d8('0x48')]!==_0x99d8('0x49')){var _0x2b0c85={};_0x2b0c85[_0x41c1c9['field']]={'$like':'%'+_0x5b11c4['query'][_0x99d8('0x44')]+'%'};return _0x2b0c85;}})});}_0x489db7=_[_0x99d8('0x45')]({},_0x489db7,_0x5b11c4[_0x99d8('0x4a')]);var _0x42892f={'where':_0x489db7[_0x99d8('0x46')]};return db[_0x99d8('0x36')][_0x99d8('0x22')](_0x42892f)[_0x99d8('0x2c')](function(_0x5901a3){_0x282d14[_0x99d8('0x22')]=_0x5901a3;if(_0x5b11c4[_0x99d8('0x3b')][_0x99d8('0x4b')]){_0x489db7[_0x99d8('0x4c')]=[{'all':!![]}];}return db['Plugin'][_0x99d8('0x4d')](_0x489db7);})['then'](function(_0x5f42e5){_0x282d14['rows']=_0x5f42e5;return _0x282d14;})[_0x99d8('0x2c')](respondWithFilteredResult(_0x3df7f2,_0x489db7))[_0x99d8('0x4e')](handleError(_0x3df7f2,null));};exports[_0x99d8('0x4f')]=function(_0x5b2128,_0x14a073){var _0x57f10a={'raw':!![],'where':{'id':_0x5b2128[_0x99d8('0x50')]['id']}},_0x29af4d={};_0x29af4d[_0x99d8('0x38')]=_['keys'](db['Plugin'][_0x99d8('0x37')]);_0x29af4d[_0x99d8('0x3b')]=_[_0x99d8('0x39')](_0x5b2128[_0x99d8('0x3b')]);_0x29af4d[_0x99d8('0x3a')]=_['intersection'](_0x29af4d[_0x99d8('0x38')],_0x29af4d[_0x99d8('0x3b')]);_0x57f10a[_0x99d8('0x3e')]=_[_0x99d8('0x3c')](_0x29af4d[_0x99d8('0x38')],qs['fields'](_0x5b2128[_0x99d8('0x3b')][_0x99d8('0x3d')]));_0x57f10a['attributes']=_0x57f10a['attributes']['length']?_0x57f10a[_0x99d8('0x3e')]:_0x29af4d['model'];if(_0x5b2128[_0x99d8('0x3b')][_0x99d8('0x4b')]){_0x57f10a['include']=[{'all':!![]}];}_0x57f10a=_[_0x99d8('0x45')]({},_0x57f10a,_0x5b2128['options']);return db[_0x99d8('0x36')][_0x99d8('0x51')](_0x57f10a)['then'](handleEntityNotFound(_0x14a073,null))[_0x99d8('0x2c')](respondWithResult(_0x14a073,null))['catch'](handleError(_0x14a073,null));};exports[_0x99d8('0x52')]=function(_0x40f515,_0x21a539,_0x40bac){return db['Plugin'][_0x99d8('0x51')]({'where':{'id':_0x40f515['params']['id']},'attributes':[_0x99d8('0x33'),'path'],'raw':!![]})[_0x99d8('0x2c')](handleEntityNotFound(_0x21a539,null))['then'](function(_0x5a8301){if(_0x5a8301){var _0x38e40a=path[_0x99d8('0x53')](config[_0x99d8('0x54')],_0x99d8('0x55'),util[_0x99d8('0x56')]('%s.zip',path[_0x99d8('0x57')](_0x5a8301['path'])));var _0x247b52=fs[_0x99d8('0x58')](_0x38e40a);var _0x15fe8b=archiver(_0x99d8('0x59'),{'zlib':{'level':0x9}});_0x15fe8b['on']('warning',function(_0x291e8c){if(_0x291e8c[_0x99d8('0x5a')]===_0x99d8('0x5b')){logger[_0x99d8('0x31')](_0x291e8c);}else{throw new db[(_0x99d8('0x5c'))][(_0x99d8('0x5d'))](_0x99d8('0x5e'));}});_0x15fe8b['on']('error',function(_0x40241b){throw new db['Sequelize'][(_0x99d8('0x5d'))](_0x99d8('0x5e'));});_0x15fe8b[_0x99d8('0x5f')](_0x247b52);_0x15fe8b[_0x99d8('0x60')](_0x99d8('0x61'),{'cwd':path[_0x99d8('0x53')](config['root'],'server/files/plugins',path[_0x99d8('0x62')](_0x5a8301[_0x99d8('0x8')])),'ignore':[path[_0x99d8('0x53')](path[_0x99d8('0x57')](_0x5a8301[_0x99d8('0x8')]),'node_modules/**/*'),path[_0x99d8('0x53')](path['basename'](_0x5a8301[_0x99d8('0x8')]),'attachments/**/*')],'nodir':!![]})[_0x99d8('0x63')]();_0x247b52['on'](_0x99d8('0x64'),function(){if(!fs[_0x99d8('0x65')](_0x38e40a)){throw new db['Sequelize'][(_0x99d8('0x5d'))]('Plugin\x20not\x20found');}return _0x21a539[_0x99d8('0x52')](_0x38e40a,util['format'](_0x99d8('0x66'),path['basename'](_0x5a8301[_0x99d8('0x8')])),function(_0x5d651e){if(_0x5d651e){throw new db[(_0x99d8('0x5c'))][(_0x99d8('0x5d'))](_0x99d8('0x67'));}fs[_0x99d8('0x68')](_0x38e40a);logger['info'](_0x99d8('0x69'));logger[_0x99d8('0x6a')](_0x99d8('0x6b'));});});}return null;})['catch'](handleError(_0x21a539,null));};exports[_0x99d8('0x6c')]=function(_0x5a42b7,_0x10ac7a,_0x8140a1){var _0x57ce6f=path[_0x99d8('0x57')](_0x5a42b7['file'][_0x99d8('0x6d')],path[_0x99d8('0x6e')](_0x5a42b7[_0x99d8('0x6f')][_0x99d8('0x6d')]));var _0x814428=path[_0x99d8('0x53')](config[_0x99d8('0x54')],'server/files/plugins',_0x5a42b7[_0x99d8('0x6f')][_0x99d8('0x6d')]);var _0xb05064=path[_0x99d8('0x53')](config[_0x99d8('0x54')],_0x99d8('0x55'),_0x57ce6f);logger['info'](_0x99d8('0x70'),_0x814428);logger['info'](_0x99d8('0x71'),_0xb05064);try{fs[_0x99d8('0x72')](_0x814428,parseInt(_0x99d8('0x73'),0x8));extract(_0x814428,{'dir':_0xb05064},function(_0xe4d55a){if(_0xe4d55a){logger[_0x99d8('0x31')](_0xe4d55a);handleError(_0xe4d55a,!![]);};var _0x2faaf1=fs[_0x99d8('0x74')](_0xb05064);if(_0x2faaf1[_0x99d8('0x3f')]>0x1){removeReferences(_0x814428,_0xb05064);logger[_0x99d8('0x31')](_0x99d8('0x75'));return _0x8140a1(new Error('Invalid\x20plugin\x20structure'));}var _0x42808f=fs[_0x99d8('0x76')](path[_0x99d8('0x53')](_0xb05064,_0x2faaf1[0x0]));if(_0x42808f[_0x99d8('0x77')]()){removeReferences(_0x814428,_0xb05064);logger[_0x99d8('0x31')]('Invalid\x20plugin\x20structure');return _0x8140a1(new Error(_0x99d8('0x75')));}if(_0x42808f[_0x99d8('0x78')]()){var _0xbb5f36=fs['readdirSync'](path[_0x99d8('0x53')](_0xb05064,_0x2faaf1[0x0]));if(_0xbb5f36[_0x99d8('0x3f')]===0x0){removeReferences(_0x814428,_0xb05064);logger[_0x99d8('0x31')]('Invalid\x20plugin\x20structure');return _0x8140a1(new Error(_0x99d8('0x75')));}var _0xd1b698=_0xbb5f36[_0x99d8('0x79')](function(_0x428296){return _0x428296===_0x99d8('0x7a');});if(!_0xd1b698){return _0x8140a1(new Error(_0x99d8('0x7b')));}var _0x5c9038=fs[_0x99d8('0x7c')](path[_0x99d8('0x53')](_0xb05064,_0x2faaf1[0x0],_0x99d8('0x7a')));var _0x1e13a=JSON[_0x99d8('0x7d')](_0x5c9038);if('undefined'==typeof _0x1e13a['name']){return _0x8140a1(new Error(_0x99d8('0x7e')));}if(_0x99d8('0x7f')==typeof _0x1e13a[_0x99d8('0x47')]){return _0x8140a1(new Error(_0x99d8('0x80')));}if('undefined'==typeof _0x1e13a[_0x99d8('0x81')]){return _0x8140a1(new Error(_0x99d8('0x82')));}if('undefined'==typeof _0x1e13a[_0x99d8('0x83')]){return _0x8140a1(new Error(_0x99d8('0x84')));}if(_0x1e13a[_0x99d8('0x47')]==='html'){if('undefined'==typeof _0x1e13a[_0x99d8('0x83')][_0x99d8('0x85')]){return _0x8140a1(new Error(_0x99d8('0x86')));}if(_0x99d8('0x7f')==typeof _0x1e13a[_0x99d8('0x83')][_0x99d8('0x85')][_0x99d8('0x87')]&&'undefined'==typeof _0x1e13a[_0x99d8('0x83')][_0x99d8('0x85')][_0x99d8('0x88')]){return _0x8140a1(new Error(_0x99d8('0x89')));}}else if(_0x1e13a['type']===_0x99d8('0x8a')){if(_0x99d8('0x7f')==typeof _0x1e13a[_0x99d8('0x83')][_0x99d8('0x8b')]){return _0x8140a1(new Error('Invalid\x20manifest:\x20script\x20name\x20missing'));}if(_0x99d8('0x7f')==typeof _0x1e13a[_0x99d8('0x83')][_0x99d8('0x8c')]){return _0x8140a1(new Error(_0x99d8('0x8d')));}}else{return _0x8140a1(new Error(_0x99d8('0x8e')));}var _0x1d1522=_0x1e13a[_0x99d8('0x33')];var _0x12d8c8=_0x1e13a[_0x99d8('0x8f')];var _0x3efa2b=_0x1e13a[_0x99d8('0x47')];var _0x4e2d36=_0x1e13a[_0x99d8('0x90')]?_0x1e13a[_0x99d8('0x90')]:'always';var _0x4f05e6=_0x1e13a['icon']?_0x1e13a[_0x99d8('0x91')]:_0x99d8('0x92');var _0x25fe72='';var _0x3f1fbf='';var _0xa393da='';var _0x221958='';var _0x1620a9=_0x1e13a[_0x99d8('0x81')];if(_0x3efa2b==='html'){if(_0x99d8('0x7f')!=typeof _0x1e13a[_0x99d8('0x83')][_0x99d8('0x85')][_0x99d8('0x87')]){var _0x128725=_0x1e13a['parameters'][_0x99d8('0x85')][_0x99d8('0x87')];if(!/^(f|ht)tps?:\/\//i[_0x99d8('0x93')](_0x128725)){_0x25fe72=path[_0x99d8('0x53')](_0x99d8('0x94'),_0x57ce6f,_0x2faaf1[0x0],_0x128725);}else{_0x25fe72=_0x128725;}}else{logger[_0x99d8('0x6a')](_0x99d8('0x95'));}if(_0x99d8('0x7f')!=typeof _0x1e13a[_0x99d8('0x83')][_0x99d8('0x85')][_0x99d8('0x88')]){var _0x393b56=_0x1e13a[_0x99d8('0x83')][_0x99d8('0x85')]['agent'];if(!/^(f|ht)tps?:\/\//i[_0x99d8('0x93')](_0x393b56)){_0x3f1fbf=path[_0x99d8('0x53')]('plugins',_0x57ce6f,_0x2faaf1[0x0],_0x393b56);}else{_0x3f1fbf=_0x393b56;}}else{logger['info'](_0x99d8('0x96'));}}else if(_0x3efa2b===_0x99d8('0x8a')){_0xa393da=_0x1e13a['parameters'][_0x99d8('0x8b')];_0x221958=_0x1e13a[_0x99d8('0x83')][_0x99d8('0x8c')];if(_0x99d8('0x7f')!=typeof _0x1e13a[_0x99d8('0x83')]['views']){if(_0x99d8('0x7f')!=typeof _0x1e13a[_0x99d8('0x83')][_0x99d8('0x85')][_0x99d8('0x87')]){var _0x128725=_0x1e13a[_0x99d8('0x83')][_0x99d8('0x85')][_0x99d8('0x87')];if(!/^(f|ht)tps?:\/\//i[_0x99d8('0x93')](_0x128725)){_0x25fe72=path[_0x99d8('0x53')](_0x99d8('0x94'),_0x57ce6f,_0x2faaf1[0x0],_0x128725);}else{_0x25fe72=_0x128725;}}if(_0x99d8('0x7f')!=typeof _0x1e13a[_0x99d8('0x83')][_0x99d8('0x85')][_0x99d8('0x88')]){var _0x393b56=_0x1e13a['parameters']['views'][_0x99d8('0x88')];if(!/^(f|ht)tps?:\/\//i['test'](_0x393b56)){_0x3f1fbf=path[_0x99d8('0x53')](_0x99d8('0x94'),_0x57ce6f,_0x2faaf1[0x0],_0x393b56);}else{_0x3f1fbf=_0x393b56;}}}}var _0x3dfb0a={'name':_0x1d1522,'description':_0x12d8c8,'path':path[_0x99d8('0x53')](_0x57ce6f,_0x2faaf1[0x0]),'type':_0x3efa2b,'sidebar':_0x4e2d36,'icon':_0x4f05e6,'adminUrl':_0x25fe72,'agentUrl':_0x3f1fbf,'scriptName':_0xa393da,'scriptPath':_0x221958,'version':_0x1620a9};removeReferences(_0x814428,null);return db[_0x99d8('0x36')][_0x99d8('0x97')](_0x3dfb0a)[_0x99d8('0x2c')](function(_0x4a53d0){var _0x37c5a7={'role':_0x5a42b7[_0x99d8('0x98')]['role'],'userProfileId':_0x5a42b7[_0x99d8('0x98')]['userProfileId']};if(!_0x37c5a7)throw new Error(_0x99d8('0x99'));if(_0x37c5a7[_0x99d8('0x9a')]===_0x99d8('0x9b')){var _0x2dc013=_0x4a53d0[_0x99d8('0x2d')]({'plain':!![]});return db[_0x99d8('0x9c')][_0x99d8('0x51')]({'where':{'name':'Plugins','userProfileId':_0x37c5a7[_0x99d8('0x9d')]},'raw':!![]})[_0x99d8('0x2c')](function(_0x12154b){if(_0x12154b&&_0x12154b[_0x99d8('0x9e')]===0x0){return db[_0x99d8('0x2f')]['create']({'name':_0x2dc013[_0x99d8('0x33')],'resourceId':_0x2dc013['id'],'type':_0x12154b[_0x99d8('0x33')],'sectionId':_0x12154b['id']},{})[_0x99d8('0x2c')](function(){return _0x4a53d0;});}else{return _0x4a53d0;}})['catch'](function(_0x5e13b6){logger[_0x99d8('0x31')](_0x99d8('0x9f'),_0x5e13b6);throw _0x5e13b6;});}return _0x4a53d0;})[_0x99d8('0x2c')](respondWithResult(_0x10ac7a,null))['catch'](handleError(_0x10ac7a,null));}});}catch(_0x34ea34){_0x10ac7a[_0x99d8('0x20')](0x1f4)['send'](_0x34ea34);}};function removeReferences(_0xf8a254,_0x133606){try{if(_0xf8a254){fs[_0x99d8('0x68')](_0xf8a254);logger[_0x99d8('0x6a')](_0x99d8('0xa0'));}if(_0x133606){rimraf(_0x133606,function(){});logger[_0x99d8('0x6a')](_0x99d8('0xa1'));}}catch(_0x5a34a3){logger[_0x99d8('0x31')](_0x5a34a3);}}exports[_0x99d8('0x2a')]=function(_0x19c10d,_0x46a43d,_0x393261){return db['Plugin']['find']({'where':{'id':_0x19c10d[_0x99d8('0x50')]['id']}})[_0x99d8('0x2c')](handleEntityNotFound(_0x46a43d,null))[_0x99d8('0x2c')](saveUpdates(_0x19c10d[_0x99d8('0x98')],null))['then'](respondWithResult(_0x46a43d,null))[_0x99d8('0x4e')](handleError(_0x46a43d,null));};exports[_0x99d8('0xa2')]=function(_0x2f310a,_0x28fc7c,_0x5e3822){return db[_0x99d8('0x36')][_0x99d8('0x51')]({'where':{'id':_0x2f310a['params']['id']}})['then'](function(_0x1bcd38){if(_0x1bcd38){return _0x1bcd38['destroy']();}})[_0x99d8('0x2c')](function(_0x407e95){rimraf(path[_0x99d8('0x53')](config[_0x99d8('0x54')],_0x99d8('0x55'),path[_0x99d8('0x62')](_0x407e95[_0x99d8('0x8')])),function(){});return _0x407e95;})['then'](handleEntityNotFound(_0x28fc7c,null))[_0x99d8('0x2c')](respondWithStatusCode(_0x28fc7c,null))['catch'](handleError(_0x28fc7c,null));};exports[_0x99d8('0xa3')]=function(_0x22cc40,_0x1f6a7b,_0xe7196e){return BPromise[_0x99d8('0xa4')]()[_0x99d8('0x2c')](function(){if(!_0x22cc40[_0x99d8('0x3b')][_0x99d8('0x8')]){throw new Error(_0x99d8('0xa5'));}if(!_0x22cc40[_0x99d8('0x3b')][_0x99d8('0xa6')]){throw new Error(_0x99d8('0xa7'));}var _0x3b1a4f=_0x22cc40['query'][_0x99d8('0xa8')]?_0x22cc40['query'][_0x99d8('0xa8')]+':'+_0x22cc40[_0x99d8('0x3b')][_0x99d8('0xa6')]:_0x99d8('0xa9')+_0x22cc40[_0x99d8('0x3b')][_0x99d8('0xa6')];var _0x2367d0=_0x22cc40[_0x99d8('0x3b')][_0x99d8('0x21')]?_0x22cc40[_0x99d8('0x3b')][_0x99d8('0x21')]:!![];var _0x5c8a45=_0x22cc40['query']['encoding']?_0x22cc40[_0x99d8('0x3b')]['encoding']:null;var _0x364e24={'method':_0x22cc40[_0x99d8('0xaa')],'uri':util['format'](_0x99d8('0xab'),_0x3b1a4f,_0x22cc40['query'][_0x99d8('0x8')]),'json':_0x2367d0,'resolveWithFullResponse':!![],'encoding':_0x5c8a45,'qs':_0x22cc40[_0x99d8('0x3b')]};if(_0x22cc40['headers']){_0x364e24[_0x99d8('0xac')]=_0x22cc40[_0x99d8('0xac')];if(_0x364e24[_0x99d8('0xac')]['content-length']){delete _0x364e24[_0x99d8('0xac')]['content-length'];}}if(_0x364e24[_0x99d8('0xac')][_0x99d8('0xad')]){delete _0x364e24['headers'][_0x99d8('0xad')];}return rp(_0x364e24);})[_0x99d8('0x2c')](function(_0x48f092){if(_0x48f092){_0x1f6a7b[_0x99d8('0x25')](_0x48f092['headers']);logger[_0x99d8('0x6a')](_0x48f092[_0x99d8('0x98')]);if(_['endsWith'](_0x22cc40[_0x99d8('0x3b')][_0x99d8('0x8')],'download')&&_0x48f092[_0x99d8('0xae')]==0x1f4){return _0x1f6a7b[_0x99d8('0x1f')](_0x48f092['statusCode']);}else{return _0x1f6a7b[_0x99d8('0x20')](_0x48f092[_0x99d8('0xae')])[_0x99d8('0x34')](_0x48f092[_0x99d8('0x98')]);}}else{return _0x1f6a7b[_0x99d8('0x1f')](0xc8);}})['catch'](handleError(_0x1f6a7b,null));};exports[_0x99d8('0xaf')]=function(_0x30ba30,_0x42ae71,_0x2714e4){return BPromise[_0x99d8('0xa4')]()[_0x99d8('0x2c')](function(){if(!_0x30ba30[_0x99d8('0x3b')][_0x99d8('0x8')]){throw new Error(_0x99d8('0xa5'));}if(!_0x30ba30[_0x99d8('0x3b')][_0x99d8('0xa6')]){throw new Error(_0x99d8('0xa7'));}var _0xcf7466=_0x30ba30['query'][_0x99d8('0xa8')]?_0x30ba30[_0x99d8('0x3b')][_0x99d8('0xa8')]+':'+_0x30ba30[_0x99d8('0x3b')][_0x99d8('0xa6')]:_0x99d8('0xa9')+_0x30ba30[_0x99d8('0x3b')]['port'];var _0x256d1b=_0x30ba30['query'][_0x99d8('0x21')]?_0x30ba30[_0x99d8('0x3b')]['json']:!![];var _0x501db3=_0x30ba30[_0x99d8('0x3b')][_0x99d8('0xb0')]?_0x30ba30[_0x99d8('0x3b')][_0x99d8('0xb0')]:null;var _0x4c393c={'method':_0x30ba30[_0x99d8('0xaa')],'uri':util[_0x99d8('0x56')](_0x99d8('0xab'),_0xcf7466,_0x30ba30[_0x99d8('0x3b')][_0x99d8('0x8')]),'json':_0x256d1b,'resolveWithFullResponse':!![],'encoding':_0x501db3,'body':_0x30ba30[_0x99d8('0x98')]};if(_0x30ba30[_0x99d8('0xac')]){_0x4c393c[_0x99d8('0xac')]=_0x30ba30['headers'];if(_0x4c393c[_0x99d8('0xac')][_0x99d8('0xb1')]){delete _0x4c393c[_0x99d8('0xac')][_0x99d8('0xb1')];}}if(_0x4c393c[_0x99d8('0xac')][_0x99d8('0xad')]){delete _0x4c393c[_0x99d8('0xac')][_0x99d8('0xad')];}return rp(_0x4c393c);})[_0x99d8('0x2c')](function(_0x2b974e){if(_0x2b974e){_0x42ae71[_0x99d8('0x25')](_0x2b974e['headers']);logger[_0x99d8('0x6a')](_0x2b974e[_0x99d8('0x98')]);return _0x42ae71[_0x99d8('0x20')](_0x2b974e['statusCode'])['send'](_0x2b974e[_0x99d8('0x98')]);}else{return _0x42ae71['sendStatus'](0xc8);}})['catch'](handleError(_0x42ae71,null));};
\ No newline at end of file
+var _0x5488=['mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','extract-zip','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','redis','./plugin.socket','register','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','save','then','Plugins','UserProfileResource','destroy','error','stack','name','send','index','Plugin','rawAttributes','model','query','filters','attributes','fields','length','hasOwnProperty','order','pick','where','map','type','key','VIRTUAL','field','filter','merge','options','include','findAll','rows','catch','show','params','keys','intersection','includeAll','find','download','join','root','server/files/plugins','format','%s.zip','createWriteStream','zip','warning','code','ENOENT','Sequelize','Error','Error\x20while\x20generating\x20the\x20zip\x20archive','glob','**/*','basename','attachments/**/*','finalize','close','existsSync','Plugin\x20not\x20found','Error\x20while\x20downloading\x20the\x20plugin','unlinkSync','info','Download\x20completed','upload','file','filename','extname','Plugin\x20upload\x20filepath:\x20%s','Plugin\x20upload\x20destination:\x20%s','0777','readdirSync','Invalid\x20plugin\x20structure','lstatSync','isDirectory','some','manifest.json','Plugin\x20manifest\x20missing','readFileSync','undefined','Invalid\x20manifest:\x20type\x20missing','version','parameters','views','Invalid\x20manifest:\x20views\x20missing','admin','agent','Invalid\x20manifest:\x20no\x20view\x20specified','script','scriptName','Invalid\x20manifest:\x20script\x20name\x20missing','scriptPath','Invalid\x20manifest:\x20script\x20path\x20missing','description','sidebar','always','icon','html','test','plugins','Warning:\x20agent\x20view\x20not\x20specified','create','body','role','userProfileId','Unable\x20to\x20retrieve\x20the\x20current\x20user','user','get','UserProfileSection','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','Extracted\x20folder\x20removed','update','resolve','\x27PORT\x27\x20parameter\x20not\x20specified','hostname','port','http://localhost:','encoding','method','%s%s','headers','content-length','content-type','endsWith','statusCode','webhookPost','\x27PATH\x27\x20parameter\x20not\x20specified','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment'];(function(_0x7d36a8,_0x2aefc6){var _0x4505ea=function(_0x2b4c19){while(--_0x2b4c19){_0x7d36a8['push'](_0x7d36a8['shift']());}};_0x4505ea(++_0x2aefc6);}(_0x5488,0x149));var _0x8548=function(_0xd8aad0,_0x4da2cd){_0xd8aad0=_0xd8aad0-0x0;var _0x570860=_0x5488[_0xd8aad0];return _0x570860;};'use strict';var pdf=require(_0x8548('0x0'));var emlformat=require(_0x8548('0x1'));var rimraf=require(_0x8548('0x2'));var zipdir=require(_0x8548('0x3'));var jsonpatch=require(_0x8548('0x4'));var rp=require(_0x8548('0x5'));var moment=require(_0x8548('0x6'));var BPromise=require('bluebird');var Mustache=require(_0x8548('0x7'));var util=require(_0x8548('0x8'));var path=require(_0x8548('0x9'));var sox=require(_0x8548('0xa'));var csv=require(_0x8548('0xb'));var ejs=require(_0x8548('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0x8548('0xd'));var crypto=require(_0x8548('0xe'));var jsforce=require(_0x8548('0xf'));var deskjs=require(_0x8548('0x10'));var toCsv=require(_0x8548('0xb'));var querystring=require(_0x8548('0x11'));var Papa=require(_0x8548('0x12'));var extract=require(_0x8548('0x13'));var rimraf=require(_0x8548('0x2'));var archiver=require('archiver');var Redis=require('ioredis');var authService=require(_0x8548('0x14'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x8548('0x15'));var logger=require(_0x8548('0x16'))(_0x8548('0x17'));var utils=require(_0x8548('0x18'));var config=require(_0x8548('0x19'));var db=require('../../mysqldb')['db'];config[_0x8548('0x1a')]=_['defaults'](config[_0x8548('0x1a')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x8548('0x1a')]));require(_0x8548('0x1b'))[_0x8548('0x1c')](socket);function respondWithStatusCode(_0x298375,_0x2939bc){_0x2939bc=_0x2939bc||0xcc;return function(_0xad22c3){if(_0xad22c3){return _0x298375[_0x8548('0x1d')](_0x2939bc);}return _0x298375['status'](_0x2939bc)[_0x8548('0x1e')]();};}function respondWithResult(_0x391a22,_0x4ab6f4){_0x4ab6f4=_0x4ab6f4||0xc8;return function(_0x290ae7){if(_0x290ae7){return _0x391a22[_0x8548('0x1f')](_0x4ab6f4)[_0x8548('0x20')](_0x290ae7);}};}function respondWithFilteredResult(_0x139199,_0x4065b1){return function(_0x48662e){if(_0x48662e){var _0x469805=_0x48662e[_0x8548('0x21')],_0x5ec0fc=_0x4065b1[_0x8548('0x22')],_0x1ecc3e=_0x4065b1[_0x8548('0x22')]+_0x4065b1[_0x8548('0x23')],_0x2285da;if(_0x1ecc3e>=_0x469805){_0x1ecc3e=_0x469805;_0x2285da=0xc8;}else{_0x2285da=0xce;}_0x139199[_0x8548('0x1f')](_0x2285da);return _0x139199[_0x8548('0x24')](_0x8548('0x25'),_0x5ec0fc+'-'+_0x1ecc3e+'/'+_0x469805)[_0x8548('0x20')](_0x48662e);}return null;};}function patchUpdates(_0x2af253){return function(_0xaba774){try{jsonpatch[_0x8548('0x26')](_0xaba774,_0x2af253,!![]);}catch(_0x1ec86f){return BPromise['reject'](_0x1ec86f);}return _0xaba774[_0x8548('0x27')]();};}function saveUpdates(_0x5be6cf,_0x46c229){return function(_0x3145ff){if(_0x3145ff){return _0x3145ff['update'](_0x5be6cf)[_0x8548('0x28')](function(_0x53e08b){return _0x53e08b;});}return null;};}function removeEntity(_0x56838a,_0xd9f746){return function(_0x4026ed){if(_0x4026ed){return _0x4026ed['destroy']()[_0x8548('0x28')](function(){var _0x352a82=_0x4026ed['get']({'plain':!![]});var _0x4262c5=_0x8548('0x29');return db[_0x8548('0x2a')][_0x8548('0x2b')]({'where':{'type':_0x4262c5,'resourceId':_0x352a82['id']}})[_0x8548('0x28')](function(){return _0x4026ed;});})[_0x8548('0x28')](function(){_0x56838a['status'](0xcc)[_0x8548('0x1e')]();});}};}function handleEntityNotFound(_0x49cc95,_0x274e86){return function(_0x23e938){if(!_0x23e938){_0x49cc95[_0x8548('0x1d')](0x194);}return _0x23e938;};}function handleError(_0x59e882,_0x52bea8){_0x52bea8=_0x52bea8||0x1f4;return function(_0x4e7217){logger[_0x8548('0x2c')](_0x4e7217[_0x8548('0x2d')]);if(_0x4e7217[_0x8548('0x2e')]){delete _0x4e7217[_0x8548('0x2e')];}_0x59e882[_0x8548('0x1f')](_0x52bea8)[_0x8548('0x2f')](_0x4e7217);};}exports[_0x8548('0x30')]=function(_0x2fe9cc,_0x2d7334){var _0x2913bf={},_0x2031a1={},_0x4d0442={'count':0x0,'rows':[]};var _0x357972=db[_0x8548('0x31')][_0x8548('0x32')];_0x2031a1[_0x8548('0x33')]=_['keys'](_0x357972);_0x2031a1[_0x8548('0x34')]=_['keys'](_0x2fe9cc[_0x8548('0x34')]);_0x2031a1[_0x8548('0x35')]=_['intersection'](_0x2031a1[_0x8548('0x33')],_0x2031a1[_0x8548('0x34')]);_0x2913bf[_0x8548('0x36')]=_['intersection'](_0x2031a1['model'],qs[_0x8548('0x37')](_0x2fe9cc[_0x8548('0x34')][_0x8548('0x37')]));_0x2913bf[_0x8548('0x36')]=_0x2913bf[_0x8548('0x36')][_0x8548('0x38')]?_0x2913bf[_0x8548('0x36')]:_0x2031a1[_0x8548('0x33')];if(!_0x2fe9cc[_0x8548('0x34')][_0x8548('0x39')]('nolimit')){_0x2913bf[_0x8548('0x23')]=qs['limit'](_0x2fe9cc[_0x8548('0x34')][_0x8548('0x23')]);_0x2913bf[_0x8548('0x22')]=qs['offset'](_0x2fe9cc[_0x8548('0x34')][_0x8548('0x22')]);}_0x2913bf[_0x8548('0x3a')]=qs['sort'](_0x2fe9cc[_0x8548('0x34')]['sort']);_0x2913bf['where']=qs[_0x8548('0x35')](_[_0x8548('0x3b')](_0x2fe9cc[_0x8548('0x34')],_0x2031a1[_0x8548('0x35')]));if(_0x2fe9cc[_0x8548('0x34')]['filter']){_0x2913bf[_0x8548('0x3c')]=_['merge'](_0x2913bf[_0x8548('0x3c')],{'$or':_[_0x8548('0x3d')](_0x357972,function(_0x79e431){if(_0x79e431[_0x8548('0x3e')][_0x8548('0x3f')]!==_0x8548('0x40')){var _0x7b552b={};_0x7b552b[_0x79e431[_0x8548('0x41')]]={'$like':'%'+_0x2fe9cc['query'][_0x8548('0x42')]+'%'};return _0x7b552b;}})});}_0x2913bf=_[_0x8548('0x43')]({},_0x2913bf,_0x2fe9cc[_0x8548('0x44')]);var _0x34fd90={'where':_0x2913bf['where']};return db[_0x8548('0x31')]['count'](_0x34fd90)['then'](function(_0xf6d466){_0x4d0442[_0x8548('0x21')]=_0xf6d466;if(_0x2fe9cc[_0x8548('0x34')]['includeAll']){_0x2913bf[_0x8548('0x45')]=[{'all':!![]}];}return db[_0x8548('0x31')][_0x8548('0x46')](_0x2913bf);})['then'](function(_0x365990){_0x4d0442[_0x8548('0x47')]=_0x365990;return _0x4d0442;})['then'](respondWithFilteredResult(_0x2d7334,_0x2913bf))[_0x8548('0x48')](handleError(_0x2d7334,null));};exports[_0x8548('0x49')]=function(_0x530eb0,_0x895211){var _0x438182={'raw':!![],'where':{'id':_0x530eb0[_0x8548('0x4a')]['id']}},_0x17fd33={};_0x17fd33[_0x8548('0x33')]=_[_0x8548('0x4b')](db[_0x8548('0x31')][_0x8548('0x32')]);_0x17fd33[_0x8548('0x34')]=_[_0x8548('0x4b')](_0x530eb0['query']);_0x17fd33[_0x8548('0x35')]=_[_0x8548('0x4c')](_0x17fd33[_0x8548('0x33')],_0x17fd33[_0x8548('0x34')]);_0x438182['attributes']=_[_0x8548('0x4c')](_0x17fd33[_0x8548('0x33')],qs['fields'](_0x530eb0['query'][_0x8548('0x37')]));_0x438182[_0x8548('0x36')]=_0x438182[_0x8548('0x36')][_0x8548('0x38')]?_0x438182[_0x8548('0x36')]:_0x17fd33[_0x8548('0x33')];if(_0x530eb0[_0x8548('0x34')][_0x8548('0x4d')]){_0x438182[_0x8548('0x45')]=[{'all':!![]}];}_0x438182=_['merge']({},_0x438182,_0x530eb0['options']);return db['Plugin'][_0x8548('0x4e')](_0x438182)['then'](handleEntityNotFound(_0x895211,null))[_0x8548('0x28')](respondWithResult(_0x895211,null))[_0x8548('0x48')](handleError(_0x895211,null));};exports[_0x8548('0x4f')]=function(_0x106e8f,_0x555991,_0x334599){return db['Plugin'][_0x8548('0x4e')]({'where':{'id':_0x106e8f[_0x8548('0x4a')]['id']},'attributes':[_0x8548('0x2e'),_0x8548('0x9')],'raw':!![]})[_0x8548('0x28')](handleEntityNotFound(_0x555991,null))[_0x8548('0x28')](function(_0x484ef2){if(_0x484ef2){var _0x671cb7=path[_0x8548('0x50')](config[_0x8548('0x51')],_0x8548('0x52'),util[_0x8548('0x53')](_0x8548('0x54'),path['basename'](_0x484ef2['path'])));var _0x5bf0e4=fs[_0x8548('0x55')](_0x671cb7);var _0x33e936=archiver(_0x8548('0x56'),{'zlib':{'level':0x9}});_0x33e936['on'](_0x8548('0x57'),function(_0x2e8ef1){if(_0x2e8ef1[_0x8548('0x58')]===_0x8548('0x59')){logger['error'](_0x2e8ef1);}else{throw new db[(_0x8548('0x5a'))][(_0x8548('0x5b'))]('Error\x20while\x20generating\x20the\x20zip\x20archive');}});_0x33e936['on'](_0x8548('0x2c'),function(_0x5d41f5){throw new db[(_0x8548('0x5a'))][(_0x8548('0x5b'))](_0x8548('0x5c'));});_0x33e936['pipe'](_0x5bf0e4);_0x33e936[_0x8548('0x5d')](_0x8548('0x5e'),{'cwd':path['join'](config[_0x8548('0x51')],_0x8548('0x52'),path['dirname'](_0x484ef2[_0x8548('0x9')])),'ignore':[path[_0x8548('0x50')](path[_0x8548('0x5f')](_0x484ef2[_0x8548('0x9')]),'node_modules/**/*'),path[_0x8548('0x50')](path['basename'](_0x484ef2[_0x8548('0x9')]),_0x8548('0x60'))],'nodir':!![]})[_0x8548('0x61')]();_0x5bf0e4['on'](_0x8548('0x62'),function(){if(!fs[_0x8548('0x63')](_0x671cb7)){throw new db[(_0x8548('0x5a'))][(_0x8548('0x5b'))](_0x8548('0x64'));}return _0x555991['download'](_0x671cb7,util[_0x8548('0x53')](_0x8548('0x54'),path[_0x8548('0x5f')](_0x484ef2[_0x8548('0x9')])),function(_0xa33483){if(_0xa33483){throw new db[(_0x8548('0x5a'))][(_0x8548('0x5b'))](_0x8548('0x65'));}fs[_0x8548('0x66')](_0x671cb7);logger[_0x8548('0x67')](_0x8548('0x68'));logger['info']('Temporary\x20file\x20removed');});});}return null;})[_0x8548('0x48')](handleError(_0x555991,null));};exports[_0x8548('0x69')]=function(_0x566224,_0x5936ef,_0x38ccaa){var _0x145bfb=path['basename'](_0x566224[_0x8548('0x6a')][_0x8548('0x6b')],path[_0x8548('0x6c')](_0x566224[_0x8548('0x6a')][_0x8548('0x6b')]));var _0x35f7ee=path[_0x8548('0x50')](config[_0x8548('0x51')],'server/files/plugins',_0x566224['file'][_0x8548('0x6b')]);var _0x25dcb4=path[_0x8548('0x50')](config['root'],_0x8548('0x52'),_0x145bfb);logger[_0x8548('0x67')](_0x8548('0x6d'),_0x35f7ee);logger[_0x8548('0x67')](_0x8548('0x6e'),_0x25dcb4);try{fs['chmodSync'](_0x35f7ee,parseInt(_0x8548('0x6f'),0x8));extract(_0x35f7ee,{'dir':_0x25dcb4},function(_0x5975df){if(_0x5975df){logger['error'](_0x5975df);handleError(_0x5975df,!![]);};var _0x21858e=fs[_0x8548('0x70')](_0x25dcb4);if(_0x21858e[_0x8548('0x38')]>0x1){removeReferences(_0x35f7ee,_0x25dcb4);logger[_0x8548('0x2c')](_0x8548('0x71'));return _0x38ccaa(new Error(_0x8548('0x71')));}var _0x2efd59=fs[_0x8548('0x72')](path[_0x8548('0x50')](_0x25dcb4,_0x21858e[0x0]));if(_0x2efd59['isFile']()){removeReferences(_0x35f7ee,_0x25dcb4);logger[_0x8548('0x2c')](_0x8548('0x71'));return _0x38ccaa(new Error('Invalid\x20plugin\x20structure'));}if(_0x2efd59[_0x8548('0x73')]()){var _0xa79554=fs[_0x8548('0x70')](path[_0x8548('0x50')](_0x25dcb4,_0x21858e[0x0]));if(_0xa79554[_0x8548('0x38')]===0x0){removeReferences(_0x35f7ee,_0x25dcb4);logger[_0x8548('0x2c')]('Invalid\x20plugin\x20structure');return _0x38ccaa(new Error(_0x8548('0x71')));}var _0x311713=_0xa79554[_0x8548('0x74')](function(_0x1fc16c){return _0x1fc16c===_0x8548('0x75');});if(!_0x311713){return _0x38ccaa(new Error(_0x8548('0x76')));}var _0x5ab566=fs[_0x8548('0x77')](path['join'](_0x25dcb4,_0x21858e[0x0],_0x8548('0x75')));var _0x4dcbad=JSON['parse'](_0x5ab566);if(_0x8548('0x78')==typeof _0x4dcbad[_0x8548('0x2e')]){return _0x38ccaa(new Error('Invalid\x20manifest:\x20name\x20missing'));}if(_0x8548('0x78')==typeof _0x4dcbad[_0x8548('0x3e')]){return _0x38ccaa(new Error(_0x8548('0x79')));}if(_0x8548('0x78')==typeof _0x4dcbad[_0x8548('0x7a')]){return _0x38ccaa(new Error('Invalid\x20manifest:\x20version\x20not\x20specified'));}if('undefined'==typeof _0x4dcbad[_0x8548('0x7b')]){return _0x38ccaa(new Error('Invalid\x20manifest:\x20parameters\x20missing'));}if(_0x4dcbad[_0x8548('0x3e')]==='html'){if(_0x8548('0x78')==typeof _0x4dcbad['parameters'][_0x8548('0x7c')]){return _0x38ccaa(new Error(_0x8548('0x7d')));}if(_0x8548('0x78')==typeof _0x4dcbad['parameters'][_0x8548('0x7c')][_0x8548('0x7e')]&&_0x8548('0x78')==typeof _0x4dcbad['parameters']['views'][_0x8548('0x7f')]){return _0x38ccaa(new Error(_0x8548('0x80')));}}else if(_0x4dcbad[_0x8548('0x3e')]===_0x8548('0x81')){if('undefined'==typeof _0x4dcbad['parameters'][_0x8548('0x82')]){return _0x38ccaa(new Error(_0x8548('0x83')));}if(_0x8548('0x78')==typeof _0x4dcbad[_0x8548('0x7b')][_0x8548('0x84')]){return _0x38ccaa(new Error(_0x8548('0x85')));}}else{return _0x38ccaa(new Error('Invalid\x20manifest:\x20invalid\x20type'));}var _0x3ba24a=_0x4dcbad[_0x8548('0x2e')];var _0xf9ef9a=_0x4dcbad[_0x8548('0x86')];var _0x3911c5=_0x4dcbad['type'];var _0x2300db=_0x4dcbad['sidebar']?_0x4dcbad[_0x8548('0x87')]:_0x8548('0x88');var _0x5f2d32=_0x4dcbad[_0x8548('0x89')]?_0x4dcbad['icon']:'icon-apps';var _0x52413c='';var _0x21a7e9='';var _0x302bbe='';var _0xbba177='';var _0x3dba86=_0x4dcbad[_0x8548('0x7a')];if(_0x3911c5===_0x8548('0x8a')){if(_0x8548('0x78')!=typeof _0x4dcbad[_0x8548('0x7b')]['views']['admin']){var _0x553761=_0x4dcbad[_0x8548('0x7b')][_0x8548('0x7c')]['admin'];if(!/^(f|ht)tps?:\/\//i[_0x8548('0x8b')](_0x553761)){_0x52413c=path['join'](_0x8548('0x8c'),_0x145bfb,_0x21858e[0x0],_0x553761);}else{_0x52413c=_0x553761;}}else{logger[_0x8548('0x67')]('Warning:\x20admin\x20view\x20not\x20specified');}if(_0x8548('0x78')!=typeof _0x4dcbad[_0x8548('0x7b')][_0x8548('0x7c')][_0x8548('0x7f')]){var _0x5ab2c2=_0x4dcbad[_0x8548('0x7b')]['views'][_0x8548('0x7f')];if(!/^(f|ht)tps?:\/\//i['test'](_0x5ab2c2)){_0x21a7e9=path[_0x8548('0x50')](_0x8548('0x8c'),_0x145bfb,_0x21858e[0x0],_0x5ab2c2);}else{_0x21a7e9=_0x5ab2c2;}}else{logger[_0x8548('0x67')](_0x8548('0x8d'));}}else if(_0x3911c5===_0x8548('0x81')){_0x302bbe=_0x4dcbad[_0x8548('0x7b')][_0x8548('0x82')];_0xbba177=_0x4dcbad[_0x8548('0x7b')]['scriptPath'];if(_0x8548('0x78')!=typeof _0x4dcbad[_0x8548('0x7b')][_0x8548('0x7c')]){if(_0x8548('0x78')!=typeof _0x4dcbad[_0x8548('0x7b')][_0x8548('0x7c')][_0x8548('0x7e')]){var _0x553761=_0x4dcbad[_0x8548('0x7b')][_0x8548('0x7c')][_0x8548('0x7e')];if(!/^(f|ht)tps?:\/\//i['test'](_0x553761)){_0x52413c=path[_0x8548('0x50')](_0x8548('0x8c'),_0x145bfb,_0x21858e[0x0],_0x553761);}else{_0x52413c=_0x553761;}}if(_0x8548('0x78')!=typeof _0x4dcbad[_0x8548('0x7b')][_0x8548('0x7c')][_0x8548('0x7f')]){var _0x5ab2c2=_0x4dcbad['parameters'][_0x8548('0x7c')]['agent'];if(!/^(f|ht)tps?:\/\//i[_0x8548('0x8b')](_0x5ab2c2)){_0x21a7e9=path['join'](_0x8548('0x8c'),_0x145bfb,_0x21858e[0x0],_0x5ab2c2);}else{_0x21a7e9=_0x5ab2c2;}}}}var _0x1977e5={'name':_0x3ba24a,'description':_0xf9ef9a,'path':path[_0x8548('0x50')](_0x145bfb,_0x21858e[0x0]),'type':_0x3911c5,'sidebar':_0x2300db,'icon':_0x5f2d32,'adminUrl':_0x52413c,'agentUrl':_0x21a7e9,'scriptName':_0x302bbe,'scriptPath':_0xbba177,'version':_0x3dba86};removeReferences(_0x35f7ee,null);return db[_0x8548('0x31')][_0x8548('0x8e')](_0x1977e5)[_0x8548('0x28')](function(_0xe0fc22){var _0x16149e={'role':_0x566224[_0x8548('0x8f')][_0x8548('0x90')],'userProfileId':_0x566224[_0x8548('0x8f')][_0x8548('0x91')]};if(!_0x16149e)throw new Error(_0x8548('0x92'));if(_0x16149e[_0x8548('0x90')]===_0x8548('0x93')){var _0x413049=_0xe0fc22[_0x8548('0x94')]({'plain':!![]});return db[_0x8548('0x95')]['find']({'where':{'name':_0x8548('0x29'),'userProfileId':_0x16149e[_0x8548('0x91')]},'raw':!![]})[_0x8548('0x28')](function(_0x3b15ac){if(_0x3b15ac&&_0x3b15ac['autoAssociation']===0x0){return db[_0x8548('0x2a')][_0x8548('0x8e')]({'name':_0x413049[_0x8548('0x2e')],'resourceId':_0x413049['id'],'type':_0x3b15ac[_0x8548('0x2e')],'sectionId':_0x3b15ac['id']},{})[_0x8548('0x28')](function(){return _0xe0fc22;});}else{return _0xe0fc22;}})[_0x8548('0x48')](function(_0x124bde){logger[_0x8548('0x2c')](_0x8548('0x96'),_0x124bde);throw _0x124bde;});}return _0xe0fc22;})[_0x8548('0x28')](respondWithResult(_0x5936ef,null))['catch'](handleError(_0x5936ef,null));}});}catch(_0x38a9e6){_0x5936ef[_0x8548('0x1f')](0x1f4)[_0x8548('0x2f')](_0x38a9e6);}};function removeReferences(_0x441861,_0x1b878d){try{if(_0x441861){fs[_0x8548('0x66')](_0x441861);logger[_0x8548('0x67')]('Zip\x20archive\x20removed');}if(_0x1b878d){rimraf(_0x1b878d,function(){});logger[_0x8548('0x67')](_0x8548('0x97'));}}catch(_0x2dda9c){logger[_0x8548('0x2c')](_0x2dda9c);}}exports[_0x8548('0x98')]=function(_0x1eee8c,_0xbacaf5,_0x730077){return db[_0x8548('0x31')][_0x8548('0x4e')]({'where':{'id':_0x1eee8c[_0x8548('0x4a')]['id']}})['then'](handleEntityNotFound(_0xbacaf5,null))['then'](saveUpdates(_0x1eee8c[_0x8548('0x8f')],null))[_0x8548('0x28')](respondWithResult(_0xbacaf5,null))[_0x8548('0x48')](handleError(_0xbacaf5,null));};exports['delete']=function(_0x299135,_0x10e025,_0x4304ec){return db[_0x8548('0x31')][_0x8548('0x4e')]({'where':{'id':_0x299135[_0x8548('0x4a')]['id']}})['then'](function(_0x216fbd){if(_0x216fbd){return _0x216fbd[_0x8548('0x2b')]();}})['then'](function(_0x24a3cf){rimraf(path[_0x8548('0x50')](config[_0x8548('0x51')],_0x8548('0x52'),path['dirname'](_0x24a3cf[_0x8548('0x9')])),function(){});return _0x24a3cf;})[_0x8548('0x28')](handleEntityNotFound(_0x10e025,null))['then'](respondWithStatusCode(_0x10e025,null))[_0x8548('0x48')](handleError(_0x10e025,null));};exports['webhookGet']=function(_0x5942c5,_0x9b829,_0x3b3e39){return BPromise[_0x8548('0x99')]()[_0x8548('0x28')](function(){if(!_0x5942c5[_0x8548('0x34')][_0x8548('0x9')]){throw new Error('\x27PATH\x27\x20parameter\x20not\x20specified');}if(!_0x5942c5[_0x8548('0x34')]['port']){throw new Error(_0x8548('0x9a'));}var _0x16b745=_0x5942c5['query'][_0x8548('0x9b')]?_0x5942c5[_0x8548('0x34')][_0x8548('0x9b')]+':'+_0x5942c5[_0x8548('0x34')][_0x8548('0x9c')]:_0x8548('0x9d')+_0x5942c5[_0x8548('0x34')][_0x8548('0x9c')];var _0x459541=_0x5942c5[_0x8548('0x34')][_0x8548('0x20')]?_0x5942c5[_0x8548('0x34')][_0x8548('0x20')]:!![];var _0x3fedb7=_0x5942c5[_0x8548('0x34')][_0x8548('0x9e')]?_0x5942c5[_0x8548('0x34')][_0x8548('0x9e')]:null;var _0x2f57b9={'method':_0x5942c5[_0x8548('0x9f')],'uri':util[_0x8548('0x53')](_0x8548('0xa0'),_0x16b745,_0x5942c5['query'][_0x8548('0x9')]),'json':_0x459541,'resolveWithFullResponse':!![],'encoding':_0x3fedb7,'qs':_0x5942c5[_0x8548('0x34')]};if(_0x5942c5[_0x8548('0xa1')]){_0x2f57b9[_0x8548('0xa1')]=_0x5942c5[_0x8548('0xa1')];if(_0x2f57b9['headers'][_0x8548('0xa2')]){delete _0x2f57b9[_0x8548('0xa1')][_0x8548('0xa2')];}}if(_0x2f57b9[_0x8548('0xa1')][_0x8548('0xa3')]){delete _0x2f57b9[_0x8548('0xa1')][_0x8548('0xa3')];}return rp(_0x2f57b9);})['then'](function(_0x7bda02){if(_0x7bda02){_0x9b829[_0x8548('0x24')](_0x7bda02[_0x8548('0xa1')]);logger[_0x8548('0x67')](_0x7bda02[_0x8548('0x8f')]);if(_[_0x8548('0xa4')](_0x5942c5[_0x8548('0x34')][_0x8548('0x9')],_0x8548('0x4f'))&&_0x7bda02[_0x8548('0xa5')]==0x1f4){return _0x9b829['sendStatus'](_0x7bda02[_0x8548('0xa5')]);}else{return _0x9b829['status'](_0x7bda02['statusCode'])['send'](_0x7bda02[_0x8548('0x8f')]);}}else{return _0x9b829[_0x8548('0x1d')](0xc8);}})[_0x8548('0x48')](handleError(_0x9b829,null));};exports[_0x8548('0xa6')]=function(_0x4e47a2,_0x56ac7b,_0x41e9fd){return BPromise[_0x8548('0x99')]()[_0x8548('0x28')](function(){if(!_0x4e47a2[_0x8548('0x34')][_0x8548('0x9')]){throw new Error(_0x8548('0xa7'));}if(!_0x4e47a2[_0x8548('0x34')][_0x8548('0x9c')]){throw new Error(_0x8548('0x9a'));}var _0x184a4c=_0x4e47a2['query'][_0x8548('0x9b')]?_0x4e47a2[_0x8548('0x34')][_0x8548('0x9b')]+':'+_0x4e47a2[_0x8548('0x34')][_0x8548('0x9c')]:_0x8548('0x9d')+_0x4e47a2['query'][_0x8548('0x9c')];var _0x4c4614=_0x4e47a2[_0x8548('0x34')][_0x8548('0x20')]?_0x4e47a2['query'][_0x8548('0x20')]:!![];var _0x376d7e=_0x4e47a2[_0x8548('0x34')]['encoding']?_0x4e47a2['query'][_0x8548('0x9e')]:null;var _0x5c17ee={'method':_0x4e47a2[_0x8548('0x9f')],'uri':util['format'](_0x8548('0xa0'),_0x184a4c,_0x4e47a2['query']['path']),'json':_0x4c4614,'resolveWithFullResponse':!![],'encoding':_0x376d7e,'body':_0x4e47a2['body']};if(_0x4e47a2[_0x8548('0xa1')]){_0x5c17ee[_0x8548('0xa1')]=_0x4e47a2[_0x8548('0xa1')];if(_0x5c17ee[_0x8548('0xa1')][_0x8548('0xa2')]){delete _0x5c17ee[_0x8548('0xa1')][_0x8548('0xa2')];}}if(_0x5c17ee[_0x8548('0xa1')][_0x8548('0xa3')]){delete _0x5c17ee[_0x8548('0xa1')][_0x8548('0xa3')];}return rp(_0x5c17ee);})[_0x8548('0x28')](function(_0x46eee7){if(_0x46eee7){_0x56ac7b[_0x8548('0x24')](_0x46eee7['headers']);logger[_0x8548('0x67')](_0x46eee7['body']);return _0x56ac7b[_0x8548('0x1f')](_0x46eee7['statusCode'])[_0x8548('0x2f')](_0x46eee7['body']);}else{return _0x56ac7b[_0x8548('0x1d')](0xc8);}})['catch'](handleError(_0x56ac7b,null));};
\ No newline at end of file
index 590d1b7..5e6677b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a28=['remove','emit','hasOwnProperty','exports','events','../../mysqldb','Plugin','setMaxListeners','save','update'];(function(_0x358fb5,_0x4407b8){var _0x4abfeb=function(_0x55c45d){while(--_0x55c45d){_0x358fb5['push'](_0x358fb5['shift']());}};_0x4abfeb(++_0x4407b8);}(_0x8a28,0x9a));var _0x88a2=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0x8a28[_0x397e5f];return _0x5302b8;};'use strict';var EventEmitter=require(_0x88a2('0x0'));var Plugin=require(_0x88a2('0x1'))['db'][_0x88a2('0x2')];var PluginEvents=new EventEmitter();PluginEvents[_0x88a2('0x3')](0x0);var events={'afterCreate':_0x88a2('0x4'),'afterUpdate':_0x88a2('0x5'),'afterDestroy':_0x88a2('0x6')};function emitEvent(_0x3469d8){return function(_0x51c429,_0x4dbe37,_0x249428){PluginEvents[_0x88a2('0x7')](_0x3469d8+':'+_0x51c429['id'],_0x51c429);PluginEvents[_0x88a2('0x7')](_0x3469d8,_0x51c429);_0x249428(null);};}for(var e in events){if(events[_0x88a2('0x8')](e)){var event=events[e];Plugin['hook'](e,emitEvent(event));}}module[_0x88a2('0x9')]=PluginEvents;
\ No newline at end of file
+var _0xff83=['emit','hasOwnProperty','hook','exports','../../mysqldb','Plugin','save','update','remove'];(function(_0x32751a,_0xef1d25){var _0x6ce164=function(_0x7c8bf6){while(--_0x7c8bf6){_0x32751a['push'](_0x32751a['shift']());}};_0x6ce164(++_0xef1d25);}(_0xff83,0xee));var _0x3ff8=function(_0x5c351c,_0x2046d8){_0x5c351c=_0x5c351c-0x0;var _0x26f3b3=_0xff83[_0x5c351c];return _0x26f3b3;};'use strict';var EventEmitter=require('events');var Plugin=require(_0x3ff8('0x0'))['db'][_0x3ff8('0x1')];var PluginEvents=new EventEmitter();PluginEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x3ff8('0x2'),'afterUpdate':_0x3ff8('0x3'),'afterDestroy':_0x3ff8('0x4')};function emitEvent(_0x447aeb){return function(_0x4e1937,_0x3de1dc,_0x587039){PluginEvents['emit'](_0x447aeb+':'+_0x4e1937['id'],_0x4e1937);PluginEvents[_0x3ff8('0x5')](_0x447aeb,_0x4e1937);_0x587039(null);};}for(var e in events){if(events[_0x3ff8('0x6')](e)){var event=events[e];Plugin[_0x3ff8('0x7')](e,emitEvent(event));}}module[_0x3ff8('0x8')]=PluginEvents;
\ No newline at end of file
index 657c238..3323d71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfa93=['lodash','../../config/logger','api','moment','rimraf','exports','define'];(function(_0x12709a,_0x1ab9c1){var _0x51ee33=function(_0x254975){while(--_0x254975){_0x12709a['push'](_0x12709a['shift']());}};_0x51ee33(++_0x1ab9c1);}(_0xfa93,0x11f));var _0x3fa9=function(_0x2be786,_0x26699c){_0x2be786=_0x2be786-0x0;var _0x26a7b2=_0xfa93[_0x2be786];return _0x26a7b2;};'use strict';var _=require(_0x3fa9('0x0'));var util=require('util');var logger=require(_0x3fa9('0x1'))(_0x3fa9('0x2'));var moment=require(_0x3fa9('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x3fa9('0x4'));var config=require('../../config/environment');var attributes=require('./plugin.attributes');module[_0x3fa9('0x5')]=function(_0x442708,_0x4631a2){return _0x442708[_0x3fa9('0x6')]('Plugin',attributes,{'tableName':'plugins','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa3e8=['request-promise','path','rimraf','define','plugins','lodash','util','../../config/logger','moment','bluebird'];(function(_0x52a7e2,_0xad11d5){var _0xc59bc6=function(_0x38e805){while(--_0x38e805){_0x52a7e2['push'](_0x52a7e2['shift']());}};_0xc59bc6(++_0xad11d5);}(_0xa3e8,0x127));var _0x8a3e=function(_0x5eea13,_0x1b0d58){_0x5eea13=_0x5eea13-0x0;var _0x4bfc4f=_0xa3e8[_0x5eea13];return _0x4bfc4f;};'use strict';var _=require(_0x8a3e('0x0'));var util=require(_0x8a3e('0x1'));var logger=require(_0x8a3e('0x2'))('api');var moment=require(_0x8a3e('0x3'));var BPromise=require(_0x8a3e('0x4'));var rp=require(_0x8a3e('0x5'));var fs=require('fs');var path=require(_0x8a3e('0x6'));var rimraf=require(_0x8a3e('0x7'));var config=require('../../config/environment');var attributes=require('./plugin.attributes');module['exports']=function(_0x920901,_0xe682f5){return _0x920901[_0x8a3e('0x8')]('Plugin',attributes,{'tableName':_0x8a3e('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 79522ea..e1e6df6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2a4a=['request','info','Plugin,\x20%s,\x20%s','request\x20sent','debug','Plugin,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','CreatePlugin','create','body','options','raw','then','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','http','redis','localhost','socket.io-emitter','./plugin.socket'];(function(_0x480cc2,_0x40ced7){var _0x3645a7=function(_0x4100a5){while(--_0x4100a5){_0x480cc2['push'](_0x480cc2['shift']());}};_0x3645a7(++_0x40ced7);}(_0x2a4a,0x192));var _0xa2a4=function(_0x3c9ecf,_0x46c89f){_0x3c9ecf=_0x3c9ecf-0x0;var _0x1b96d8=_0x2a4a[_0x3c9ecf];return _0x1b96d8;};'use strict';var _=require(_0xa2a4('0x0'));var util=require(_0xa2a4('0x1'));var moment=require(_0xa2a4('0x2'));var BPromise=require('bluebird');var rs=require(_0xa2a4('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xa2a4('0x4'))['db'];var utils=require(_0xa2a4('0x5'));var logger=require(_0xa2a4('0x6'))(_0xa2a4('0x7'));var config=require('../../config/environment');var jayson=require(_0xa2a4('0x8'));var client=jayson['client'][_0xa2a4('0x9')]({'port':0x232a});config[_0xa2a4('0xa')]=_['defaults'](config['redis'],{'host':_0xa2a4('0xb'),'port':0x18eb});var socket=require(_0xa2a4('0xc'))(new Redis(config['redis']));require(_0xa2a4('0xd'))['register'](socket);function respondWithRpcPromise(_0x513efd,_0x509496,_0x46f2d5){return new BPromise(function(_0x1da538,_0xdedb46){return client[_0xa2a4('0xe')](_0x513efd,_0x46f2d5)['then'](function(_0x24860f){logger[_0xa2a4('0xf')](_0xa2a4('0x10'),_0x509496,_0xa2a4('0x11'));logger[_0xa2a4('0x12')](_0xa2a4('0x13'),_0x509496,_0xa2a4('0x11'),JSON[_0xa2a4('0x14')](_0x24860f));if(_0x24860f[_0xa2a4('0x15')]){if(_0x24860f['error'][_0xa2a4('0x16')]===0x1f4){logger[_0xa2a4('0x15')]('Plugin,\x20%s,\x20%s',_0x509496,_0x24860f[_0xa2a4('0x15')][_0xa2a4('0x17')]);return _0xdedb46(_0x24860f[_0xa2a4('0x15')][_0xa2a4('0x17')]);}logger[_0xa2a4('0x15')](_0xa2a4('0x10'),_0x509496,_0x24860f[_0xa2a4('0x15')][_0xa2a4('0x17')]);return _0x1da538(_0x24860f['error'][_0xa2a4('0x17')]);}else{logger['info'](_0xa2a4('0x10'),_0x509496,'request\x20sent');_0x1da538(_0x24860f[_0xa2a4('0x18')][_0xa2a4('0x17')]);}})[_0xa2a4('0x19')](function(_0x23eaeb){logger[_0xa2a4('0x15')](_0xa2a4('0x10'),_0x509496,_0x23eaeb);_0xdedb46(_0x23eaeb);});});}exports[_0xa2a4('0x1a')]=function(_0x2bc199){var _0x4a4127=this;return new Promise(function(_0x5964f0,_0x44f312){return db['Plugin'][_0xa2a4('0x1b')](_0x2bc199[_0xa2a4('0x1c')],{'raw':_0x2bc199['options']?_0x2bc199[_0xa2a4('0x1d')][_0xa2a4('0x1e')]===undefined?!![]:![]:!![]})[_0xa2a4('0x1f')](function(_0x228162){logger[_0xa2a4('0xf')]('CreatePlugin',_0x2bc199);logger[_0xa2a4('0x12')](_0xa2a4('0x1a'),_0x2bc199,JSON['stringify'](_0x228162));_0x5964f0(_0x228162);})[_0xa2a4('0x19')](function(_0x233940){logger[_0xa2a4('0x15')](_0xa2a4('0x1a'),_0x233940['message'],_0x2bc199);_0x44f312(_0x4a4127[_0xa2a4('0x15')](0x1f4,_0x233940[_0xa2a4('0x17')]));});});};
\ No newline at end of file
+var _0xfbc7=['defaults','localhost','socket.io-emitter','register','then','info','request\x20sent','debug','Plugin,\x20%s,\x20%s,\x20%s','error','code','Plugin,\x20%s,\x20%s','message','result','Plugin','create','body','options','raw','CreatePlugin','stringify','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xfbc7,0xb5));var _0x7fbc=function(_0x5186fa,_0x5a5124){_0x5186fa=_0x5186fa-0x0;var _0x582cb4=_0xfbc7[_0x5186fa];return _0x582cb4;};'use strict';var _=require('lodash');var util=require('util');var moment=require('moment');var BPromise=require(_0x7fbc('0x0'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7fbc('0x1'));var db=require(_0x7fbc('0x2'))['db'];var utils=require(_0x7fbc('0x3'));var logger=require(_0x7fbc('0x4'))(_0x7fbc('0x5'));var config=require(_0x7fbc('0x6'));var jayson=require(_0x7fbc('0x7'));var client=jayson[_0x7fbc('0x8')][_0x7fbc('0x9')]({'port':0x232a});config[_0x7fbc('0xa')]=_[_0x7fbc('0xb')](config['redis'],{'host':_0x7fbc('0xc'),'port':0x18eb});var socket=require(_0x7fbc('0xd'))(new Redis(config[_0x7fbc('0xa')]));require('./plugin.socket')[_0x7fbc('0xe')](socket);function respondWithRpcPromise(_0x1dc09b,_0x4564f4,_0x4d9145){return new BPromise(function(_0x1258bd,_0x27b48a){return client['request'](_0x1dc09b,_0x4d9145)[_0x7fbc('0xf')](function(_0x5db96b){logger[_0x7fbc('0x10')]('Plugin,\x20%s,\x20%s',_0x4564f4,_0x7fbc('0x11'));logger[_0x7fbc('0x12')](_0x7fbc('0x13'),_0x4564f4,_0x7fbc('0x11'),JSON['stringify'](_0x5db96b));if(_0x5db96b['error']){if(_0x5db96b[_0x7fbc('0x14')][_0x7fbc('0x15')]===0x1f4){logger[_0x7fbc('0x14')](_0x7fbc('0x16'),_0x4564f4,_0x5db96b[_0x7fbc('0x14')][_0x7fbc('0x17')]);return _0x27b48a(_0x5db96b[_0x7fbc('0x14')][_0x7fbc('0x17')]);}logger[_0x7fbc('0x14')](_0x7fbc('0x16'),_0x4564f4,_0x5db96b[_0x7fbc('0x14')][_0x7fbc('0x17')]);return _0x1258bd(_0x5db96b[_0x7fbc('0x14')][_0x7fbc('0x17')]);}else{logger[_0x7fbc('0x10')](_0x7fbc('0x16'),_0x4564f4,'request\x20sent');_0x1258bd(_0x5db96b[_0x7fbc('0x18')]['message']);}})['catch'](function(_0x4bc838){logger[_0x7fbc('0x14')](_0x7fbc('0x16'),_0x4564f4,_0x4bc838);_0x27b48a(_0x4bc838);});});}exports['CreatePlugin']=function(_0x2ffb56){var _0x2ebac8=this;return new Promise(function(_0xb0c57e,_0xbde8e1){return db[_0x7fbc('0x19')][_0x7fbc('0x1a')](_0x2ffb56[_0x7fbc('0x1b')],{'raw':_0x2ffb56[_0x7fbc('0x1c')]?_0x2ffb56[_0x7fbc('0x1c')][_0x7fbc('0x1d')]===undefined?!![]:![]:!![]})['then'](function(_0x7b946){logger[_0x7fbc('0x10')](_0x7fbc('0x1e'),_0x2ffb56);logger[_0x7fbc('0x12')]('CreatePlugin',_0x2ffb56,JSON[_0x7fbc('0x1f')](_0x7b946));_0xb0c57e(_0x7b946);})['catch'](function(_0x1480ac){logger[_0x7fbc('0x14')](_0x7fbc('0x1e'),_0x1480ac[_0x7fbc('0x17')],_0x2ffb56);_0xbde8e1(_0x2ebac8[_0x7fbc('0x14')](0x1f4,_0x1480ac['message']));});});};
\ No newline at end of file
index 4c0f8ca..1d99949 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf50c=['length','save','remove','update','emit','removeListener','register'];(function(_0x11ced3,_0x4c7bcf){var _0x272a0e=function(_0xc45d9e){while(--_0xc45d9e){_0x11ced3['push'](_0x11ced3['shift']());}};_0x272a0e(++_0x4c7bcf);}(_0xf50c,0x16d));var _0xcf50=function(_0x1f613b,_0x3b4b2e){_0x1f613b=_0x1f613b-0x0;var _0xd90370=_0xf50c[_0x1f613b];return _0xd90370;};'use strict';var PluginEvents=require('./plugin.events');var events=[_0xcf50('0x0'),_0xcf50('0x1'),_0xcf50('0x2')];function createListener(_0x5e06f5,_0x49db4f){return function(_0x368b63){_0x49db4f[_0xcf50('0x3')](_0x5e06f5,_0x368b63);};}function removeListener(_0x45c192,_0x12e705){return function(){PluginEvents[_0xcf50('0x4')](_0x45c192,_0x12e705);};}exports[_0xcf50('0x5')]=function(_0x48c47a){for(var _0x191358=0x0,_0x3bfd69=events[_0xcf50('0x6')];_0x191358<_0x3bfd69;_0x191358++){var _0x4c3f63=events[_0x191358];var _0xfd361d=createListener('plugin:'+_0x4c3f63,_0x48c47a);PluginEvents['on'](_0x4c3f63,_0xfd361d);}};
\ No newline at end of file
+var _0x1908=['length','plugin:','./plugin.events','save','remove','update','emit','removeListener','register'];(function(_0x562127,_0x131a57){var _0x449dab=function(_0x326fb3){while(--_0x326fb3){_0x562127['push'](_0x562127['shift']());}};_0x449dab(++_0x131a57);}(_0x1908,0x14f));var _0x8190=function(_0x41ca78,_0x26ca7e){_0x41ca78=_0x41ca78-0x0;var _0x45fb21=_0x1908[_0x41ca78];return _0x45fb21;};'use strict';var PluginEvents=require(_0x8190('0x0'));var events=[_0x8190('0x1'),_0x8190('0x2'),_0x8190('0x3')];function createListener(_0x5f1d57,_0x57f591){return function(_0x554a26){_0x57f591[_0x8190('0x4')](_0x5f1d57,_0x554a26);};}function removeListener(_0x11b7cc,_0x4597b7){return function(){PluginEvents[_0x8190('0x5')](_0x11b7cc,_0x4597b7);};}exports[_0x8190('0x6')]=function(_0x53d177){for(var _0x149f09=0x0,_0x41414e=events[_0x8190('0x7')];_0x149f09<_0x41414e;_0x149f09++){var _0x314b76=events[_0x149f09];var _0x2ca5e2=createListener(_0x8190('0x8')+_0x314b76,_0x53d177);PluginEvents['on'](_0x314b76,_0x2ca5e2);}};
\ No newline at end of file
index b659574..0670a42 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(_0x263e9b,_0x442ddb){var _0x1a45d2=function(_0x68436f){while(--_0x68436f){_0x263e9b['push'](_0x263e9b['shift']());}};_0x1a45d2(++_0x442ddb);}(_0xa9e0,0x123));var _0x0a9e=function(_0x220dbb,_0x99328d){_0x220dbb=_0x220dbb-0x0;var _0x2b77de=_0xa9e0[_0x220dbb];return _0x2b77de;};'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(_0xb89cac,_0x5e0601){var _0x32419a=function(_0x55b536){while(--_0x55b536){_0xb89cac['push'](_0xb89cac['shift']());}};_0x32419a(++_0x5e0601);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0xa9e0[_0x2dafbe];return _0x58a45a;};'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 ccd0f67..23474c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5eca=['npm\x20install','info','index','list','reject','express','motion2','then','catch','show','describe','params','body','script','join','../../files/plugins','cwd','chdir','dirname','start','dump','send','update','restart','stop','hasOwnProperty','Unknown\x20status','destroy','delete','Unknown\x20id','lodash','../../config/pm2','../../config/logger','api','path','exec','sendStatus','status','error','name'];(function(_0xfe380c,_0x362083){var _0x5a2ee1=function(_0x49fc20){while(--_0x49fc20){_0xfe380c['push'](_0xfe380c['shift']());}};_0x5a2ee1(++_0x362083);}(_0x5eca,0x10e));var _0xa5ec=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0x5eca[_0x57b54c];return _0x59cc19;};'use strict';var _=require(_0xa5ec('0x0'));var pm2=require(_0xa5ec('0x1'));var logger=require(_0xa5ec('0x2'))(_0xa5ec('0x3'));var path=require(_0xa5ec('0x4'));var exec=require('child_process')[_0xa5ec('0x5')];var BPromise=require('bluebird');function handleEntityNotFound(_0x5b13a5,_0x304555){return function(_0x1bf8f2){if(!_0x1bf8f2){_0x5b13a5[_0xa5ec('0x6')](0x194);;}return _0x1bf8f2;};}function respondWithResult(_0x41beff,_0x46ab2c){_0x46ab2c=_0x46ab2c||0xc8;return function(_0x2cdf5e){if(_0x2cdf5e){return _0x41beff[_0xa5ec('0x7')](_0x46ab2c)['json'](_0x2cdf5e);}return null;};}function handleError(_0x436828,_0x65aa33){_0x65aa33=_0x65aa33||0x1f4;return function(_0x5a48b4){logger[_0xa5ec('0x8')](_0x5a48b4['stack']);if(_0x5a48b4[_0xa5ec('0x9')]){delete _0x5a48b4[_0xa5ec('0x9')];}_0x436828[_0xa5ec('0x7')](_0x65aa33)['send'](_0x5a48b4);};}function execChildProcess(){return new BPromise(function(_0x266c43,_0x45b6f5){exec(_0xa5ec('0xa'),function(_0x1ae8de,_0x164b81,_0x31e4bb){logger[_0xa5ec('0xb')](_0x164b81);logger[_0xa5ec('0xb')](_0x31e4bb);if(_0x1ae8de){logger[_0xa5ec('0x8')](_0x1ae8de);return _0x45b6f5(_0x1ae8de);}return _0x266c43(_0x164b81);});});}exports[_0xa5ec('0xc')]=function(_0xf9f633,_0x1cb71b){return pm2[_0xa5ec('0xd')]()['then'](function(_0x21c65a){if(_0x21c65a){var _0x241d2b=_[_0xa5ec('0xe')](_0x21c65a,function(_0x2432b8){return _0x2432b8[_0xa5ec('0x9')]===_0xa5ec('0xf')||_0x2432b8['name']===_0xa5ec('0x10');});return{'rows':_0x241d2b,'count':_0x241d2b['length']};}return null;})[_0xa5ec('0x11')](respondWithResult(_0x1cb71b,null))[_0xa5ec('0x12')](handleError(_0x1cb71b,null));};exports[_0xa5ec('0x13')]=function(_0x32281e,_0x11aac3){return pm2[_0xa5ec('0x14')](_0x32281e[_0xa5ec('0x15')]['id'])[_0xa5ec('0x11')](respondWithResult(_0x11aac3,null))[_0xa5ec('0x11')](handleEntityNotFound(_0x11aac3,null))[_0xa5ec('0x12')](handleError(_0x11aac3,null));};exports['create']=function(_0x7613,_0x19910d){if(_0x7613[_0xa5ec('0x16')][_0xa5ec('0x9')]&&_0x7613[_0xa5ec('0x16')][_0xa5ec('0x17')]){var _0x1255bc=path[_0xa5ec('0x18')](__dirname,_0xa5ec('0x19'),_0x7613['body'][_0xa5ec('0x17')]);var _0x3581b7=process[_0xa5ec('0x1a')]();process[_0xa5ec('0x1b')](path[_0xa5ec('0x1c')](_0x1255bc));return execChildProcess()[_0xa5ec('0x11')](function(_0x1995f4){process[_0xa5ec('0x1b')](_0x3581b7);return pm2[_0xa5ec('0x1d')]({'name':_0x7613['body']['name'],'script':_0x1255bc});})[_0xa5ec('0x11')](function(_0x59fa12){pm2[_0xa5ec('0x1e')]();return _0x59fa12[0x0];})[_0xa5ec('0x11')](respondWithResult(_0x19910d,0xc9))['catch'](handleError(_0x19910d,null));}else{return _0x19910d[_0xa5ec('0x7')](0x1f4)[_0xa5ec('0x1f')]({'message':'Missing\x20name\x20and/or\x20path'});}};exports[_0xa5ec('0x20')]=function(_0x12bfbb,_0x59b076){if(_0x12bfbb[_0xa5ec('0x16')]['id']){delete _0x12bfbb['body']['id'];}var _0x252d65={'online':_0xa5ec('0x21'),'stopped':_0xa5ec('0x22')};if(_0x252d65[_0xa5ec('0x23')](_0x12bfbb[_0xa5ec('0x16')][_0xa5ec('0x7')])){return pm2[_0x252d65[_0x12bfbb[_0xa5ec('0x16')][_0xa5ec('0x7')]]](_0x12bfbb[_0xa5ec('0x15')]['id'])[_0xa5ec('0x11')](respondWithResult(_0x59b076,0xc8))[_0xa5ec('0x12')](handleError(_0x59b076,null));}else{return _0x59b076['status'](0x1f4)['send']({'message':_0xa5ec('0x24')});}};exports[_0xa5ec('0x25')]=function(_0x434909,_0x2fd6f2){if(_0x434909[_0xa5ec('0x16')]['id']){delete _0x434909[_0xa5ec('0x16')]['id'];}if(_0x434909['params']['id']){return pm2[_0xa5ec('0x26')](_0x434909[_0xa5ec('0x15')]['id'])['then'](function(_0x24ad85){pm2[_0xa5ec('0x1e')]();return _0x24ad85[0x0];})[_0xa5ec('0x11')](respondWithResult(_0x2fd6f2,null))[_0xa5ec('0x12')](handleError(_0x2fd6f2,null));}else{return _0x2fd6f2['status'](0x1f4)[_0xa5ec('0x1f')]({'message':_0xa5ec('0x27')});}};
\ No newline at end of file
+var _0x8cb8=['restart','stop','hasOwnProperty','Unknown\x20status','delete','Unknown\x20id','../../config/pm2','api','exec','bluebird','sendStatus','status','stack','name','npm\x20install','info','error','index','list','then','express','motion2','length','catch','describe','params','body','script','../../files/plugins','cwd','chdir','dirname','dump','send','Missing\x20name\x20and/or\x20path','update'];(function(_0x45f3ac,_0x140668){var _0x40a42a=function(_0x4bae86){while(--_0x4bae86){_0x45f3ac['push'](_0x45f3ac['shift']());}};_0x40a42a(++_0x140668);}(_0x8cb8,0x1da));var _0x88cb=function(_0x21de89,_0x367053){_0x21de89=_0x21de89-0x0;var _0x290b7e=_0x8cb8[_0x21de89];return _0x290b7e;};'use strict';var _=require('lodash');var pm2=require(_0x88cb('0x0'));var logger=require('../../config/logger')(_0x88cb('0x1'));var path=require('path');var exec=require('child_process')[_0x88cb('0x2')];var BPromise=require(_0x88cb('0x3'));function handleEntityNotFound(_0x3d0714,_0x535248){return function(_0x5298d8){if(!_0x5298d8){_0x3d0714[_0x88cb('0x4')](0x194);;}return _0x5298d8;};}function respondWithResult(_0x31cbd9,_0x5bd916){_0x5bd916=_0x5bd916||0xc8;return function(_0x47a263){if(_0x47a263){return _0x31cbd9[_0x88cb('0x5')](_0x5bd916)['json'](_0x47a263);}return null;};}function handleError(_0x549b92,_0x163174){_0x163174=_0x163174||0x1f4;return function(_0x5eb110){logger['error'](_0x5eb110[_0x88cb('0x6')]);if(_0x5eb110[_0x88cb('0x7')]){delete _0x5eb110[_0x88cb('0x7')];}_0x549b92[_0x88cb('0x5')](_0x163174)['send'](_0x5eb110);};}function execChildProcess(){return new BPromise(function(_0xab9b56,_0x263024){exec(_0x88cb('0x8'),function(_0x1d1870,_0x302e7f,_0x49e429){logger['info'](_0x302e7f);logger[_0x88cb('0x9')](_0x49e429);if(_0x1d1870){logger[_0x88cb('0xa')](_0x1d1870);return _0x263024(_0x1d1870);}return _0xab9b56(_0x302e7f);});});}exports[_0x88cb('0xb')]=function(_0x3736c2,_0xa3854c){return pm2[_0x88cb('0xc')]()[_0x88cb('0xd')](function(_0x29568b){if(_0x29568b){var _0xe53986=_['reject'](_0x29568b,function(_0x312f7e){return _0x312f7e[_0x88cb('0x7')]===_0x88cb('0xe')||_0x312f7e[_0x88cb('0x7')]===_0x88cb('0xf');});return{'rows':_0xe53986,'count':_0xe53986[_0x88cb('0x10')]};}return null;})[_0x88cb('0xd')](respondWithResult(_0xa3854c,null))[_0x88cb('0x11')](handleError(_0xa3854c,null));};exports['show']=function(_0x1accc8,_0x5cfffe){return pm2[_0x88cb('0x12')](_0x1accc8[_0x88cb('0x13')]['id'])['then'](respondWithResult(_0x5cfffe,null))[_0x88cb('0xd')](handleEntityNotFound(_0x5cfffe,null))[_0x88cb('0x11')](handleError(_0x5cfffe,null));};exports['create']=function(_0x4cdf9a,_0xd82147){if(_0x4cdf9a[_0x88cb('0x14')][_0x88cb('0x7')]&&_0x4cdf9a['body'][_0x88cb('0x15')]){var _0x496230=path['join'](__dirname,_0x88cb('0x16'),_0x4cdf9a['body'][_0x88cb('0x15')]);var _0x331e00=process[_0x88cb('0x17')]();process[_0x88cb('0x18')](path[_0x88cb('0x19')](_0x496230));return execChildProcess()[_0x88cb('0xd')](function(_0x457cea){process['chdir'](_0x331e00);return pm2['start']({'name':_0x4cdf9a['body'][_0x88cb('0x7')],'script':_0x496230});})[_0x88cb('0xd')](function(_0x4db16e){pm2[_0x88cb('0x1a')]();return _0x4db16e[0x0];})[_0x88cb('0xd')](respondWithResult(_0xd82147,0xc9))[_0x88cb('0x11')](handleError(_0xd82147,null));}else{return _0xd82147[_0x88cb('0x5')](0x1f4)[_0x88cb('0x1b')]({'message':_0x88cb('0x1c')});}};exports[_0x88cb('0x1d')]=function(_0x1b17de,_0x9d8863){if(_0x1b17de[_0x88cb('0x14')]['id']){delete _0x1b17de['body']['id'];}var _0x158b11={'online':_0x88cb('0x1e'),'stopped':_0x88cb('0x1f')};if(_0x158b11[_0x88cb('0x20')](_0x1b17de[_0x88cb('0x14')][_0x88cb('0x5')])){return pm2[_0x158b11[_0x1b17de['body'][_0x88cb('0x5')]]](_0x1b17de['params']['id'])[_0x88cb('0xd')](respondWithResult(_0x9d8863,0xc8))[_0x88cb('0x11')](handleError(_0x9d8863,null));}else{return _0x9d8863['status'](0x1f4)['send']({'message':_0x88cb('0x21')});}};exports['destroy']=function(_0x4dd8c6,_0x4ee0ee){if(_0x4dd8c6[_0x88cb('0x14')]['id']){delete _0x4dd8c6['body']['id'];}if(_0x4dd8c6['params']['id']){return pm2[_0x88cb('0x22')](_0x4dd8c6[_0x88cb('0x13')]['id'])[_0x88cb('0xd')](function(_0x366b8b){pm2[_0x88cb('0x1a')]();return _0x366b8b[0x0];})[_0x88cb('0xd')](respondWithResult(_0x4ee0ee,null))[_0x88cb('0x11')](handleError(_0x4ee0ee,null));}else{return _0x4ee0ee[_0x88cb('0x5')](0x1f4)[_0x88cb('0x1b')]({'message':_0x88cb('0x23')});}};
\ No newline at end of file
index bc99866..4f3ab41 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1883=['exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x23c651,_0x143982){var _0xbe7bdb=function(_0x1979e2){while(--_0x1979e2){_0x23c651['push'](_0x23c651['shift']());}};_0xbe7bdb(++_0x143982);}(_0x1883,0xab));var _0x3188=function(_0x3eaf50,_0x63c064){_0x3eaf50=_0x3eaf50-0x0;var _0x4cc499=_0x1883[_0x3eaf50];return _0x4cc499;};'use strict';var multer=require(_0x3188('0x0'));var util=require(_0x3188('0x1'));var path=require(_0x3188('0x2'));var timeout=require(_0x3188('0x3'));var express=require(_0x3188('0x4'));var router=express[_0x3188('0x5')]();var auth=require(_0x3188('0x6'));var interaction=require(_0x3188('0x7'));var config=require(_0x3188('0x8'));module[_0x3188('0x9')]=router;
\ No newline at end of file
+var _0x6d19=['exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment'];(function(_0x199572,_0x33e667){var _0x13cfa3=function(_0x53c075){while(--_0x53c075){_0x199572['push'](_0x199572['shift']());}};_0x13cfa3(++_0x33e667);}(_0x6d19,0x160));var _0x96d1=function(_0x36c6eb,_0x4fb127){_0x36c6eb=_0x36c6eb-0x0;var _0x30675b=_0x6d19[_0x36c6eb];return _0x30675b;};'use strict';var multer=require(_0x96d1('0x0'));var util=require(_0x96d1('0x1'));var path=require(_0x96d1('0x2'));var timeout=require(_0x96d1('0x3'));var express=require(_0x96d1('0x4'));var router=express[_0x96d1('0x5')]();var auth=require(_0x96d1('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x96d1('0x7'));module[_0x96d1('0x8')]=router;
\ No newline at end of file
index f4fbc7f..e781ad5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x579c=['DATE','sequelize','exports','INTEGER','STRING'];(function(_0x5db74f,_0x4d74e7){var _0x319bec=function(_0x4c7414){while(--_0x4c7414){_0x5db74f['push'](_0x5db74f['shift']());}};_0x319bec(++_0x4d74e7);}(_0x579c,0x1dc));var _0xc579=function(_0x403497,_0x16c5b0){_0x403497=_0x403497-0x0;var _0x2371b8=_0x579c[_0x403497];return _0x2371b8;};'use strict';var Sequelize=require(_0xc579('0x0'));module[_0xc579('0x1')]={'state':{'type':Sequelize[_0xc579('0x2')](0x2)},'statedesc':{'type':Sequelize[_0xc579('0x3')]},'scheduledat':{'type':Sequelize['DATE']},'uniqueid':{'type':Sequelize['STRING']},'starttime':{'type':Sequelize['DATE']},'responsetime':{'type':Sequelize[_0xc579('0x4')]},'ringtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'campaign':{'type':Sequelize['STRING']},'campaigntype':{'type':Sequelize[_0xc579('0x3')]},'membername':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xaa82=['INTEGER','sequelize','STRING','DATE'];(function(_0x2c0dc0,_0x19900d){var _0x4c0990=function(_0x530791){while(--_0x530791){_0x2c0dc0['push'](_0x2c0dc0['shift']());}};_0x4c0990(++_0x19900d);}(_0xaa82,0x69));var _0x2aa8=function(_0x431fcc,_0x34f915){_0x431fcc=_0x431fcc-0x0;var _0xcf187e=_0xaa82[_0x431fcc];return _0xcf187e;};'use strict';var Sequelize=require(_0x2aa8('0x0'));module['exports']={'state':{'type':Sequelize['INTEGER'](0x2)},'statedesc':{'type':Sequelize[_0x2aa8('0x1')]},'scheduledat':{'type':Sequelize[_0x2aa8('0x2')]},'uniqueid':{'type':Sequelize[_0x2aa8('0x1')]},'starttime':{'type':Sequelize[_0x2aa8('0x2')]},'responsetime':{'type':Sequelize[_0x2aa8('0x2')]},'ringtime':{'type':Sequelize[_0x2aa8('0x3')],'defaultValue':0x0},'campaign':{'type':Sequelize[_0x2aa8('0x1')]},'campaigntype':{'type':Sequelize['STRING']},'membername':{'type':Sequelize[_0x2aa8('0x1')]}};
\ No newline at end of file
index 2beb7a6..0580d53 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x65f5=['bluebird','request-promise','rimraf','../../config/environment','./reportAgentPreview.attributes','define','ReportAgentPreview','report_agent_preview','lodash','../../config/logger','api','moment'];(function(_0x4b369d,_0x265eb8){var _0x571a98=function(_0x56341a){while(--_0x56341a){_0x4b369d['push'](_0x4b369d['shift']());}};_0x571a98(++_0x265eb8);}(_0x65f5,0x1f4));var _0x565f=function(_0x18d248,_0xc46f35){_0x18d248=_0x18d248-0x0;var _0x21d8f8=_0x65f5[_0x18d248];return _0x21d8f8;};'use strict';var _=require(_0x565f('0x0'));var util=require('util');var logger=require(_0x565f('0x1'))(_0x565f('0x2'));var moment=require(_0x565f('0x3'));var BPromise=require(_0x565f('0x4'));var rp=require(_0x565f('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x565f('0x6'));var config=require(_0x565f('0x7'));var attributes=require(_0x565f('0x8'));module['exports']=function(_0x40c7fb,_0x2c2347){return _0x40c7fb[_0x565f('0x9')](_0x565f('0xa'),attributes,{'tableName':_0x565f('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf63c=['request-promise','path','rimraf','../../config/environment','./reportAgentPreview.attributes','exports','define','ReportAgentPreview','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0xf63c,0x14a));var _0xcf63=function(_0x447983,_0x4ba9c0){_0x447983=_0x447983-0x0;var _0x1e42ae=_0xf63c[_0x447983];return _0x1e42ae;};'use strict';var _=require(_0xcf63('0x0'));var util=require(_0xcf63('0x1'));var logger=require(_0xcf63('0x2'))(_0xcf63('0x3'));var moment=require(_0xcf63('0x4'));var BPromise=require(_0xcf63('0x5'));var rp=require(_0xcf63('0x6'));var fs=require('fs');var path=require(_0xcf63('0x7'));var rimraf=require(_0xcf63('0x8'));var config=require(_0xcf63('0x9'));var attributes=require(_0xcf63('0xa'));module[_0xcf63('0xb')]=function(_0x347b49,_0x3a5e52){return _0x347b49[_0xcf63('0xc')](_0xcf63('0xd'),attributes,{'tableName':'report_agent_preview','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 282889d..f537c04 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe0c9=['catch','lodash','util','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','request\x20sent','debug','stringify','error','code','ReportAgentPreview,\x20%s,\x20%s','message','result','CreateReportAgentPreview','ReportAgentPreview','create','body','options','raw'];(function(_0x46eee8,_0x550585){var _0x2b8ce1=function(_0x12e093){while(--_0x12e093){_0x46eee8['push'](_0x46eee8['shift']());}};_0x2b8ce1(++_0x550585);}(_0xe0c9,0x135));var _0x9e0c=function(_0x5a39e7,_0x3426b4){_0x5a39e7=_0x5a39e7-0x0;var _0x5b230b=_0xe0c9[_0x5a39e7];return _0x5b230b;};'use strict';var _=require(_0x9e0c('0x0'));var util=require(_0x9e0c('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x9e0c('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x9e0c('0x3'))['db'];var utils=require(_0x9e0c('0x4'));var logger=require(_0x9e0c('0x5'))(_0x9e0c('0x6'));var config=require('../../config/environment');var jayson=require(_0x9e0c('0x7'));var client=jayson[_0x9e0c('0x8')][_0x9e0c('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2e696d,_0x516b56,_0x291ada){return new BPromise(function(_0x26154c,_0x3bd639){return client[_0x9e0c('0xa')](_0x2e696d,_0x291ada)[_0x9e0c('0xb')](function(_0x4404a5){logger[_0x9e0c('0xc')]('ReportAgentPreview,\x20%s,\x20%s',_0x516b56,_0x9e0c('0xd'));logger[_0x9e0c('0xe')]('ReportAgentPreview,\x20%s,\x20%s,\x20%s',_0x516b56,_0x9e0c('0xd'),JSON[_0x9e0c('0xf')](_0x4404a5));if(_0x4404a5[_0x9e0c('0x10')]){if(_0x4404a5['error'][_0x9e0c('0x11')]===0x1f4){logger['error'](_0x9e0c('0x12'),_0x516b56,_0x4404a5[_0x9e0c('0x10')][_0x9e0c('0x13')]);return _0x3bd639(_0x4404a5[_0x9e0c('0x10')][_0x9e0c('0x13')]);}logger[_0x9e0c('0x10')](_0x9e0c('0x12'),_0x516b56,_0x4404a5[_0x9e0c('0x10')][_0x9e0c('0x13')]);return _0x26154c(_0x4404a5[_0x9e0c('0x10')][_0x9e0c('0x13')]);}else{logger[_0x9e0c('0xc')](_0x9e0c('0x12'),_0x516b56,_0x9e0c('0xd'));_0x26154c(_0x4404a5[_0x9e0c('0x14')]['message']);}})['catch'](function(_0xb9c3fd){logger[_0x9e0c('0x10')]('ReportAgentPreview,\x20%s,\x20%s',_0x516b56,_0xb9c3fd);_0x3bd639(_0xb9c3fd);});});}exports[_0x9e0c('0x15')]=function(_0xc171f){var _0x5c782a=this;return new Promise(function(_0x5e24c0,_0x2978b1){return db[_0x9e0c('0x16')][_0x9e0c('0x17')](_0xc171f[_0x9e0c('0x18')],{'raw':_0xc171f[_0x9e0c('0x19')]?_0xc171f[_0x9e0c('0x19')][_0x9e0c('0x1a')]===undefined?!![]:![]:!![]})[_0x9e0c('0xb')](function(_0x14f139){logger[_0x9e0c('0xc')](_0x9e0c('0x15'),_0xc171f);logger[_0x9e0c('0xe')](_0x9e0c('0x15'),_0xc171f,JSON[_0x9e0c('0xf')](_0x14f139));_0x5e24c0(_0x14f139);})[_0x9e0c('0x1b')](function(_0x5af5f6){logger[_0x9e0c('0x10')](_0x9e0c('0x15'),_0x5af5f6[_0x9e0c('0x13')],_0xc171f);_0x2978b1(_0x5c782a[_0x9e0c('0x10')](0x1f4,_0x5af5f6[_0x9e0c('0x13')]));});});};
\ No newline at end of file
+var _0x4722=['lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','info','ReportAgentPreview,\x20%s,\x20%s','request\x20sent','ReportAgentPreview,\x20%s,\x20%s,\x20%s','stringify','error','message','catch','CreateReportAgentPreview','ReportAgentPreview','options','raw','debug'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x4722,0x120));var _0x2472=function(_0x229a78,_0x4523cb){_0x229a78=_0x229a78-0x0;var _0x4b7657=_0x4722[_0x229a78];return _0x4b7657;};'use strict';var _=require(_0x2472('0x0'));var util=require(_0x2472('0x1'));var moment=require(_0x2472('0x2'));var BPromise=require('bluebird');var rs=require(_0x2472('0x3'));var fs=require('fs');var Redis=require(_0x2472('0x4'));var db=require(_0x2472('0x5'))['db'];var utils=require(_0x2472('0x6'));var logger=require(_0x2472('0x7'))(_0x2472('0x8'));var config=require(_0x2472('0x9'));var jayson=require('jayson/promise');var client=jayson['client'][_0x2472('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4f3f9a,_0x1a70b4,_0x12218f){return new BPromise(function(_0x396463,_0x349936){return client['request'](_0x4f3f9a,_0x12218f)['then'](function(_0x47fb3d){logger[_0x2472('0xb')](_0x2472('0xc'),_0x1a70b4,_0x2472('0xd'));logger['debug'](_0x2472('0xe'),_0x1a70b4,_0x2472('0xd'),JSON[_0x2472('0xf')](_0x47fb3d));if(_0x47fb3d['error']){if(_0x47fb3d[_0x2472('0x10')]['code']===0x1f4){logger[_0x2472('0x10')](_0x2472('0xc'),_0x1a70b4,_0x47fb3d[_0x2472('0x10')][_0x2472('0x11')]);return _0x349936(_0x47fb3d[_0x2472('0x10')][_0x2472('0x11')]);}logger[_0x2472('0x10')](_0x2472('0xc'),_0x1a70b4,_0x47fb3d[_0x2472('0x10')][_0x2472('0x11')]);return _0x396463(_0x47fb3d[_0x2472('0x10')]['message']);}else{logger[_0x2472('0xb')](_0x2472('0xc'),_0x1a70b4,_0x2472('0xd'));_0x396463(_0x47fb3d['result']['message']);}})[_0x2472('0x12')](function(_0x519c2e){logger[_0x2472('0x10')](_0x2472('0xc'),_0x1a70b4,_0x519c2e);_0x349936(_0x519c2e);});});}exports[_0x2472('0x13')]=function(_0x3f7576){var _0x350553=this;return new Promise(function(_0x5ec47e,_0x3db777){return db[_0x2472('0x14')]['create'](_0x3f7576['body'],{'raw':_0x3f7576[_0x2472('0x15')]?_0x3f7576[_0x2472('0x15')][_0x2472('0x16')]===undefined?!![]:![]:!![]})['then'](function(_0x2c1508){logger['info'](_0x2472('0x13'),_0x3f7576);logger[_0x2472('0x17')](_0x2472('0x13'),_0x3f7576,JSON[_0x2472('0xf')](_0x2c1508));_0x5ec47e(_0x2c1508);})['catch'](function(_0x2da169){logger[_0x2472('0x10')](_0x2472('0x13'),_0x2da169[_0x2472('0x11')],_0x3f7576);_0x3db777(_0x350553[_0x2472('0x10')](0x1f4,_0x2da169[_0x2472('0x11')]));});});};
\ No newline at end of file
index cf64c31..3fcdf1c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x42f4=['/chat/queues','chatQueues','/mail/queues','mailQueues','/mail/accounts','/openchannel/queues','openchannelQueues','/sms/queues','smsQueues','/fax/queues','faxQueues','/voice/queues/preview/:id','voiceQueuesPreview','/voice/queues/channels','voiceQueuesChannel','/voice/queues/channels/:uniqueid/hangup','voiceQueuesChannelHangup','/voice/queues/channels/:uniqueid/redirect/:exten','voiceQueuesChannelRedirect','/voice/queues/:id','showVoiceQueues','outbound','/outbound/channels','outboundChannels','/agents','agents','/agents/:id/capacity','agentCapacity','telephones','/trunks','trunks','/campaigns','campaigns','/fax/accounts','faxAccounts','/chat/queues/waitinginteractions','chatQueuesWaitingInteractions','/mail/queues/waitinginteractions','openchannelQueuesWaitingInteractions','/sms/queues/waitinginteractions','smsQueuesWaitingInteractions','/fax/queues/waitinginteractions','post','queueNotify','/mail/queues/:id','showMailQueues','chat','/chat/queues/:id','showChatQueues','/fax/queues/:id','showFaxQueues','/openchannel/queues/:id/notify','openchannel','/sms/queues/:id/notify','/sms/queues/:id','showSmsQueues','/agents/:id/notify','exports','multer','path','express','Router','../../components/auth/service','./rpc.controller','voiceChannels','get','isAuthenticated','voiceChannelMixMonitor','/voice/channels/:uniqueid/stopmixmonitor','voiceChannelStopMixMonitor','/voice/queues'];(function(_0x45e98e,_0x169b60){var _0x374dba=function(_0x597612){while(--_0x597612){_0x45e98e['push'](_0x45e98e['shift']());}};_0x374dba(++_0x169b60);}(_0x42f4,0x19d));var _0x442f=function(_0x310504,_0x26ad95){_0x310504=_0x310504-0x0;var _0x5b36d0=_0x42f4[_0x310504];return _0x5b36d0;};'use strict';var multer=require(_0x442f('0x0'));var util=require('util');var path=require(_0x442f('0x1'));var express=require(_0x442f('0x2'));var router=express[_0x442f('0x3')]();var auth=require(_0x442f('0x4'));var controller=require(_0x442f('0x5'));router['get']('/voice/channels',auth['isAuthenticated'](),controller[_0x442f('0x6')]);router[_0x442f('0x7')]('/voice/channels/:uniqueid/mixmonitor',auth[_0x442f('0x8')](),controller[_0x442f('0x9')]);router[_0x442f('0x7')](_0x442f('0xa'),auth[_0x442f('0x8')](),controller[_0x442f('0xb')]);router['get'](_0x442f('0xc'),auth['isAuthenticated'](),controller['voiceQueues']);router['get'](_0x442f('0xd'),auth[_0x442f('0x8')](),controller[_0x442f('0xe')]);router[_0x442f('0x7')](_0x442f('0xf'),auth[_0x442f('0x8')](),controller[_0x442f('0x10')]);router[_0x442f('0x7')](_0x442f('0x11'),auth[_0x442f('0x8')](),controller['mailAccounts']);router[_0x442f('0x7')](_0x442f('0x12'),auth[_0x442f('0x8')](),controller[_0x442f('0x13')]);router[_0x442f('0x7')](_0x442f('0x14'),auth[_0x442f('0x8')](),controller[_0x442f('0x15')]);router[_0x442f('0x7')](_0x442f('0x16'),auth[_0x442f('0x8')](),controller[_0x442f('0x17')]);router[_0x442f('0x7')](_0x442f('0x18'),auth[_0x442f('0x8')](),controller[_0x442f('0x19')]);router['get'](_0x442f('0x1a'),auth['isAuthenticated'](),controller['voiceQueuesChannels']);router['get']('/voice/queues/channels/:uniqueid',auth[_0x442f('0x8')](),controller[_0x442f('0x1b')]);router[_0x442f('0x7')](_0x442f('0x1c'),auth[_0x442f('0x8')](),controller[_0x442f('0x1d')]);router['get'](_0x442f('0x1e'),auth['isAuthenticated'](),controller[_0x442f('0x1f')]);router[_0x442f('0x7')](_0x442f('0x20'),auth['isAuthenticated'](),controller[_0x442f('0x21')]);router[_0x442f('0x7')]('/outbound',auth['isAuthenticated'](),controller[_0x442f('0x22')]);router[_0x442f('0x7')](_0x442f('0x23'),auth[_0x442f('0x8')](),controller[_0x442f('0x24')]);router[_0x442f('0x7')](_0x442f('0x25'),auth[_0x442f('0x8')](),controller[_0x442f('0x26')]);router['put'](_0x442f('0x27'),auth[_0x442f('0x8')](),controller[_0x442f('0x28')]);router[_0x442f('0x7')]('/telephones',auth[_0x442f('0x8')](),controller[_0x442f('0x29')]);router[_0x442f('0x7')](_0x442f('0x2a'),auth['isAuthenticated'](),controller[_0x442f('0x2b')]);router[_0x442f('0x7')](_0x442f('0x2c'),auth['isAuthenticated'](),controller[_0x442f('0x2d')]);router['get'](_0x442f('0x2e'),auth[_0x442f('0x8')](),controller[_0x442f('0x2f')]);router['get'](_0x442f('0x30'),auth[_0x442f('0x8')](),controller[_0x442f('0x31')]);router[_0x442f('0x7')](_0x442f('0x32'),auth['isAuthenticated'](),controller['mailQueuesWaitingInteractions']);router[_0x442f('0x7')]('/openchannel/queues/waitinginteractions',auth[_0x442f('0x8')](),controller[_0x442f('0x33')]);router[_0x442f('0x7')](_0x442f('0x34'),auth[_0x442f('0x8')](),controller[_0x442f('0x35')]);router[_0x442f('0x7')](_0x442f('0x36'),auth[_0x442f('0x8')](),controller['faxQueuesWaitingInteractions']);router[_0x442f('0x37')]('/mail/queues/:id/notify',auth[_0x442f('0x8')](),controller[_0x442f('0x38')]('mail'));router[_0x442f('0x7')](_0x442f('0x39'),auth[_0x442f('0x8')](),controller[_0x442f('0x3a')]);router[_0x442f('0x37')]('/chat/queues/:id/notify',auth[_0x442f('0x8')](),controller[_0x442f('0x38')](_0x442f('0x3b')));router[_0x442f('0x7')](_0x442f('0x3c'),auth['isAuthenticated'](),controller[_0x442f('0x3d')]);router[_0x442f('0x37')]('/fax/queues/:id/notify',auth[_0x442f('0x8')](),controller[_0x442f('0x38')]('fax'));router[_0x442f('0x7')](_0x442f('0x3e'),auth[_0x442f('0x8')](),controller[_0x442f('0x3f')]);router[_0x442f('0x37')](_0x442f('0x40'),auth[_0x442f('0x8')](),controller['queueNotify'](_0x442f('0x41')));router[_0x442f('0x7')]('/openchannel/queues/:id',auth[_0x442f('0x8')](),controller['showOpenchannelQueues']);router[_0x442f('0x37')](_0x442f('0x42'),auth[_0x442f('0x8')](),controller['queueNotify']('sms'));router['get'](_0x442f('0x43'),auth[_0x442f('0x8')](),controller[_0x442f('0x44')]);router[_0x442f('0x37')](_0x442f('0x45'),auth[_0x442f('0x8')](),controller['agentNotify']);module[_0x442f('0x46')]=router;
\ No newline at end of file
+var _0x6b21=['/voice/queues/:id','showVoiceQueues','/outbound','outbound','outboundChannels','/agents','agents','put','/agents/:id/capacity','agentCapacity','/telephones','telephones','/trunks','trunks','/campaigns','campaigns','/fax/accounts','faxAccounts','/chat/queues/waitinginteractions','chatQueuesWaitingInteractions','/mail/queues/waitinginteractions','/openchannel/queues/waitinginteractions','/sms/queues/waitinginteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','post','queueNotify','mail','/mail/queues/:id','/chat/queues/:id/notify','chat','/chat/queues/:id','showChatQueues','/fax/queues/:id/notify','fax','/fax/queues/:id','showFaxQueues','openchannel','/openchannel/queues/:id','sms','showSmsQueues','/agents/:id/notify','exports','multer','util','path','express','../../components/auth/service','./rpc.controller','get','isAuthenticated','voiceChannels','/voice/queues','voiceQueues','/chat/queues','chatQueues','mailQueues','/mail/accounts','/openchannel/queues','openchannelQueues','/sms/queues','smsQueues','/fax/queues','faxQueues','/voice/queues/preview/:id','voiceQueuesPreview','/voice/queues/channels','voiceQueuesChannels','/voice/queues/channels/:uniqueid','voiceQueuesChannel','/voice/queues/channels/:uniqueid/hangup','voiceQueuesChannelHangup','/voice/queues/channels/:uniqueid/redirect/:exten','voiceQueuesChannelRedirect'];(function(_0x324645,_0xdc9c60){var _0x518909=function(_0x48a9f9){while(--_0x48a9f9){_0x324645['push'](_0x324645['shift']());}};_0x518909(++_0xdc9c60);}(_0x6b21,0x75));var _0x16b2=function(_0x13358c,_0x283b98){_0x13358c=_0x13358c-0x0;var _0x3bebba=_0x6b21[_0x13358c];return _0x3bebba;};'use strict';var multer=require(_0x16b2('0x0'));var util=require(_0x16b2('0x1'));var path=require(_0x16b2('0x2'));var express=require(_0x16b2('0x3'));var router=express['Router']();var auth=require(_0x16b2('0x4'));var controller=require(_0x16b2('0x5'));router[_0x16b2('0x6')]('/voice/channels',auth[_0x16b2('0x7')](),controller[_0x16b2('0x8')]);router[_0x16b2('0x6')]('/voice/channels/:uniqueid/mixmonitor',auth['isAuthenticated'](),controller['voiceChannelMixMonitor']);router[_0x16b2('0x6')]('/voice/channels/:uniqueid/stopmixmonitor',auth[_0x16b2('0x7')](),controller['voiceChannelStopMixMonitor']);router['get'](_0x16b2('0x9'),auth[_0x16b2('0x7')](),controller[_0x16b2('0xa')]);router[_0x16b2('0x6')](_0x16b2('0xb'),auth[_0x16b2('0x7')](),controller[_0x16b2('0xc')]);router[_0x16b2('0x6')]('/mail/queues',auth[_0x16b2('0x7')](),controller[_0x16b2('0xd')]);router[_0x16b2('0x6')](_0x16b2('0xe'),auth[_0x16b2('0x7')](),controller['mailAccounts']);router['get'](_0x16b2('0xf'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x10')]);router[_0x16b2('0x6')](_0x16b2('0x11'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x12')]);router['get'](_0x16b2('0x13'),auth['isAuthenticated'](),controller[_0x16b2('0x14')]);router['get'](_0x16b2('0x15'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x16')]);router['get'](_0x16b2('0x17'),auth['isAuthenticated'](),controller[_0x16b2('0x18')]);router['get'](_0x16b2('0x19'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x1a')]);router['get'](_0x16b2('0x1b'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x1c')]);router[_0x16b2('0x6')](_0x16b2('0x1d'),auth['isAuthenticated'](),controller[_0x16b2('0x1e')]);router[_0x16b2('0x6')](_0x16b2('0x1f'),auth['isAuthenticated'](),controller[_0x16b2('0x20')]);router[_0x16b2('0x6')](_0x16b2('0x21'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x22')]);router[_0x16b2('0x6')]('/outbound/channels',auth['isAuthenticated'](),controller[_0x16b2('0x23')]);router[_0x16b2('0x6')](_0x16b2('0x24'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x25')]);router[_0x16b2('0x26')](_0x16b2('0x27'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x28')]);router[_0x16b2('0x6')](_0x16b2('0x29'),auth['isAuthenticated'](),controller[_0x16b2('0x2a')]);router[_0x16b2('0x6')](_0x16b2('0x2b'),auth['isAuthenticated'](),controller[_0x16b2('0x2c')]);router[_0x16b2('0x6')](_0x16b2('0x2d'),auth['isAuthenticated'](),controller[_0x16b2('0x2e')]);router[_0x16b2('0x6')](_0x16b2('0x2f'),auth['isAuthenticated'](),controller[_0x16b2('0x30')]);router[_0x16b2('0x6')](_0x16b2('0x31'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x32')]);router[_0x16b2('0x6')](_0x16b2('0x33'),auth['isAuthenticated'](),controller['mailQueuesWaitingInteractions']);router[_0x16b2('0x6')](_0x16b2('0x34'),auth[_0x16b2('0x7')](),controller['openchannelQueuesWaitingInteractions']);router[_0x16b2('0x6')](_0x16b2('0x35'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x36')]);router[_0x16b2('0x6')]('/fax/queues/waitinginteractions',auth['isAuthenticated'](),controller[_0x16b2('0x37')]);router[_0x16b2('0x38')]('/mail/queues/:id/notify',auth['isAuthenticated'](),controller[_0x16b2('0x39')](_0x16b2('0x3a')));router[_0x16b2('0x6')](_0x16b2('0x3b'),auth[_0x16b2('0x7')](),controller['showMailQueues']);router[_0x16b2('0x38')](_0x16b2('0x3c'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x39')](_0x16b2('0x3d')));router[_0x16b2('0x6')](_0x16b2('0x3e'),auth[_0x16b2('0x7')](),controller[_0x16b2('0x3f')]);router[_0x16b2('0x38')](_0x16b2('0x40'),auth['isAuthenticated'](),controller[_0x16b2('0x39')](_0x16b2('0x41')));router['get'](_0x16b2('0x42'),auth['isAuthenticated'](),controller[_0x16b2('0x43')]);router['post']('/openchannel/queues/:id/notify',auth[_0x16b2('0x7')](),controller['queueNotify'](_0x16b2('0x44')));router['get'](_0x16b2('0x45'),auth[_0x16b2('0x7')](),controller['showOpenchannelQueues']);router['post']('/sms/queues/:id/notify',auth[_0x16b2('0x7')](),controller[_0x16b2('0x39')](_0x16b2('0x46')));router['get']('/sms/queues/:id',auth[_0x16b2('0x7')](),controller[_0x16b2('0x47')]);router[_0x16b2('0x38')](_0x16b2('0x48'),auth[_0x16b2('0x7')](),controller['agentNotify']);module[_0x16b2('0x49')]=router;
\ No newline at end of file
index 824ddbc..8dfe6fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7c52=['Queue','findOne','\x20Queue\x20not\x20found','Message','messageId','Interaction','\x20Message\x20not\x20found','update','queue','MessageId','InteractionId','TransferReport','create','Start','queueTransferTimeout','agentNotify','Channel\x20field\x20is\x20mandatory','channel','chat','User','From','agentTransferTimeout','*,*,*,*','bluebird','lodash','util','../../config/logger','api','http','client','request','then','code','error','status','json','sendStatus','stack','name','send','isNil','find','rows','query','catch','voiceChannelMixMonitor','VoiceChannelMixMonitor','params','voiceChannelStopMixMonitor','VoiceChannelStopMixMonitor','voiceQueues','VoiceQueues','showVoiceQueues','voiceQueuesPreview','VoiceQueuesPreview','merge','VoiceQueuesChannels','voiceQueuesChannel','voiceQueuesChannelHangup','VoiceQueuesChannelHangup','outbound','outboundChannels','OutboundChannels','agents','Agents','agentCapacity','body','interaction','user','hasOwnProperty','MemberReport','findAll','INTERACTION','length','updateAttributes','format','SIP/%s','interface','agent','internal','AgentCapacity','capacity','telephones','trunks','Trunks','campaigns','Campaigns','ChatQueues','showChatQueues','showMailQueues','MailQueues','mailAccounts','MailAccounts','showOpenchannelQueues','smsQueues','SmsQueues','showSmsQueues','faxQueues','FaxQueues','showFaxQueues','faxAccounts','chatQueuesWaitingInteractions','ChatQueuesWaitingInteractions','mailQueuesWaitingInteractions','MailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','OpenchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','SmsQueuesWaitingInteractions','faxQueuesWaitingInteractions','FaxQueuesWaitingInteractions','queueNotify','capitalize','Account'];(function(_0x3826ad,_0x49a30d){var _0x17b900=function(_0x38474f){while(--_0x38474f){_0x3826ad['push'](_0x3826ad['shift']());}};_0x17b900(++_0x49a30d);}(_0x7c52,0x16d));var _0x27c5=function(_0x3cc20b,_0x42eadd){_0x3cc20b=_0x3cc20b-0x0;var _0xb7ebac=_0x7c52[_0x3cc20b];return _0xb7ebac;};'use strict';var BPromise=require(_0x27c5('0x0'));var moment=require('moment');var _=require(_0x27c5('0x1'));var util=require(_0x27c5('0x2'));var db=require('../../mysqldb')['db'];var logger=require(_0x27c5('0x3'))(_0x27c5('0x4'));var jayson=require('jayson/promise');var amiClient=jayson['client'][_0x27c5('0x5')]({'port':0x232a});var mailClient=jayson[_0x27c5('0x6')]['http']({'port':0x232b});var routingClient=jayson[_0x27c5('0x6')][_0x27c5('0x5')]({'port':0x232c});function respondWithRpcPromise(_0x473a77,_0x5c7e72,_0x485368){return new BPromise(function(_0x3aac60,_0x585931){var _0x1876f7=_0x485368?_0x485368:amiClient;return _0x1876f7[_0x27c5('0x7')](_0x473a77,_0x5c7e72)[_0x27c5('0x8')](function(_0x527fb1){if(_0x527fb1['error']){if(_0x527fb1['error'][_0x27c5('0x9')]===0x1f4){return _0x585931(_0x527fb1[_0x27c5('0xa')]['message']);}return _0x3aac60(_0x527fb1[_0x27c5('0xa')]['message']);}else{_0x3aac60(_0x527fb1['result']);}})['catch'](function(_0xa8db6e){_0x585931(_0xa8db6e);});});}function respondWithResult(_0x441c04,_0x16a7ca){_0x16a7ca=_0x16a7ca||0xc8;return function(_0x3b3848){if(_0x3b3848){return _0x441c04[_0x27c5('0xb')](_0x16a7ca)[_0x27c5('0xc')](_0x3b3848);}return _0x441c04[_0x27c5('0xd')](0x194);};}function handleError(_0x3eccb8,_0x5c8e75){_0x5c8e75=_0x5c8e75||0x1f4;return function(_0xdef836){logger[_0x27c5('0xa')](_0xdef836[_0x27c5('0xe')]);if(_0xdef836[_0x27c5('0xf')]){delete _0xdef836[_0x27c5('0xf')];}_0x3eccb8[_0x27c5('0xb')](_0x5c8e75)[_0x27c5('0x10')](_0xdef836);};}function findById(_0x529746){return function(_0x201f8f){if(!_[_0x27c5('0x11')](_0x529746)&&!_[_0x27c5('0x11')](_0x201f8f)&&!_[_0x27c5('0x11')](_0x201f8f['rows'])){return _[_0x27c5('0x12')](_0x201f8f[_0x27c5('0x13')],function(_0x38ec96){return _0x38ec96['id']==_0x529746;});}return null;};}exports['voiceChannels']=function(_0x12dfe9,_0x14aec2){return respondWithRpcPromise('VoiceChannels',_0x12dfe9[_0x27c5('0x14')])[_0x27c5('0x8')](respondWithResult(_0x14aec2,null))[_0x27c5('0x15')](handleError(_0x14aec2,null));};exports[_0x27c5('0x16')]=function(_0x5d2fe6,_0x2906fd){return respondWithRpcPromise(_0x27c5('0x17'),_['merge'](_0x5d2fe6[_0x27c5('0x14')],_0x5d2fe6[_0x27c5('0x18')]))[_0x27c5('0x8')](respondWithResult(_0x2906fd,null))[_0x27c5('0x15')](handleError(_0x2906fd,null));};exports[_0x27c5('0x19')]=function(_0x5dcd58,_0x1dd9bd){return respondWithRpcPromise(_0x27c5('0x1a'),_['merge'](_0x5dcd58[_0x27c5('0x14')],_0x5dcd58[_0x27c5('0x18')]))[_0x27c5('0x8')](respondWithResult(_0x1dd9bd,null))[_0x27c5('0x15')](handleError(_0x1dd9bd,null));};exports[_0x27c5('0x1b')]=function(_0x1aac26,_0x559288){return respondWithRpcPromise(_0x27c5('0x1c'),_0x1aac26[_0x27c5('0x14')])[_0x27c5('0x8')](respondWithResult(_0x559288,null))[_0x27c5('0x15')](handleError(_0x559288,null));};exports[_0x27c5('0x1d')]=function(_0x141dfe,_0x981d2a){return respondWithRpcPromise('VoiceQueues',_0x141dfe[_0x27c5('0x14')])[_0x27c5('0x8')](findById(_0x141dfe['params']['id']))[_0x27c5('0x8')](respondWithResult(_0x981d2a,null))[_0x27c5('0x15')](handleError(_0x981d2a,null));};exports[_0x27c5('0x1e')]=function(_0x20b2d4,_0x43722b){return respondWithRpcPromise(_0x27c5('0x1f'),_[_0x27c5('0x20')](_0x20b2d4['query'],_0x20b2d4[_0x27c5('0x18')]))[_0x27c5('0x8')](respondWithResult(_0x43722b,null))[_0x27c5('0x15')](handleError(_0x43722b,null));};exports['voiceQueuesChannels']=function(_0x26d7af,_0x4d10a2){return respondWithRpcPromise(_0x27c5('0x21'),_0x26d7af['query'])['then'](respondWithResult(_0x4d10a2,null))[_0x27c5('0x15')](handleError(_0x4d10a2,null));};exports[_0x27c5('0x22')]=function(_0x1b25d8,_0x481c8c){return respondWithRpcPromise('VoiceQueuesChannel',_[_0x27c5('0x20')](_0x1b25d8[_0x27c5('0x14')],_0x1b25d8[_0x27c5('0x18')]))['then'](respondWithResult(_0x481c8c,null))[_0x27c5('0x15')](handleError(_0x481c8c,null));};exports[_0x27c5('0x23')]=function(_0x330f14,_0x36e173){return respondWithRpcPromise(_0x27c5('0x24'),_[_0x27c5('0x20')](_0x330f14[_0x27c5('0x14')],_0x330f14[_0x27c5('0x18')]))['then'](respondWithResult(_0x36e173,null))[_0x27c5('0x15')](handleError(_0x36e173,null));};exports['voiceQueuesChannelRedirect']=function(_0x360c56,_0x2f21c2){return respondWithRpcPromise('VoiceQueuesChannelRedirect',_[_0x27c5('0x20')](_0x360c56['query'],_0x360c56[_0x27c5('0x18')]))['then'](respondWithResult(_0x2f21c2,null))[_0x27c5('0x15')](handleError(_0x2f21c2,null));};exports[_0x27c5('0x25')]=function(_0x152a62,_0x3f9bf0){return respondWithRpcPromise('Outbound',_0x152a62[_0x27c5('0x14')])['then'](respondWithResult(_0x3f9bf0,null))['catch'](handleError(_0x3f9bf0,null));};exports[_0x27c5('0x26')]=function(_0x1d5c53,_0x24901f){return respondWithRpcPromise(_0x27c5('0x27'),_0x1d5c53[_0x27c5('0x14')])[_0x27c5('0x8')](respondWithResult(_0x24901f,null))[_0x27c5('0x15')](handleError(_0x24901f,null));};exports[_0x27c5('0x28')]=function(_0xfc36cf,_0x2027ee){var _0x4624a1;return respondWithRpcPromise(_0x27c5('0x29'),_0xfc36cf[_0x27c5('0x14')])['then'](function(_0x2a4149){_0x4624a1=_0x2a4149;return respondWithRpcPromise(_0x27c5('0x29'),_0xfc36cf['query'],routingClient);})[_0x27c5('0x8')](function(_0x471348){return _['merge']({},_0x471348,_0x4624a1);})['then'](respondWithResult(_0x2027ee,null))[_0x27c5('0x15')](handleError(_0x2027ee,null));};exports[_0x27c5('0x2a')]=function(_0x21af90,_0x653bbc){if(_0x21af90[_0x27c5('0x2b')]&&_0x21af90[_0x27c5('0x2b')][_0x27c5('0x2c')]&&_0x21af90['user']&&_0x21af90[_0x27c5('0x2d')]['name']){for(var _0x2497fd in _0x21af90['body'][_0x27c5('0x2c')]){if(_0x21af90[_0x27c5('0x2b')][_0x27c5('0x2c')][_0x27c5('0x2e')](_0x2497fd)){db[_0x27c5('0x2f')][_0x27c5('0x30')]({'where':{'channel':_0x2497fd,'membername':_0x21af90[_0x27c5('0x2d')]['name'],'type':_0x27c5('0x31'),'exitAt':null,'uniqueid':_0x21af90['body'][_0x27c5('0x2c')][_0x2497fd]&&_0x21af90[_0x27c5('0x2b')]['interaction'][_0x2497fd][_0x27c5('0x32')]?{'$notIn':_0x21af90[_0x27c5('0x2b')]['interaction'][_0x2497fd]}:{'$ne':null}}})[_0x27c5('0x8')](function(_0x4636e0){var _0x44b4f2=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');for(var _0x1d0913=0x0,_0xe95a34=_0x4636e0[_0x27c5('0x32')];_0x1d0913<_0xe95a34;_0x1d0913+=0x1){_0x4636e0[_0x1d0913][_0x27c5('0x33')]({'exitAt':_0x44b4f2});}});for(var _0x3ca741=0x0;_0x3ca741<_0x21af90[_0x27c5('0x2b')]['interaction'][_0x2497fd][_0x27c5('0x32')];_0x3ca741+=0x1){db['MemberReport']['findOrCreate']({'where':{'channel':_0x2497fd,'membername':_0x21af90['user'][_0x27c5('0xf')],'type':_0x27c5('0x31'),'uniqueid':_0x21af90[_0x27c5('0x2b')][_0x27c5('0x2c')][_0x2497fd][_0x3ca741],'exitAt':null},'defaults':{'channel':_0x2497fd,'membername':_0x21af90[_0x27c5('0x2d')]['name'],'interface':_['isNil'](_0x21af90['user']['interface'])?util[_0x27c5('0x34')](_0x27c5('0x35'),_0x21af90[_0x27c5('0x2d')][_0x27c5('0xf')]):_0x21af90[_0x27c5('0x2d')][_0x27c5('0x36')],'type':'INTERACTION','enterAt':moment()[_0x27c5('0x34')]('YYYY-MM-DD\x20HH:mm:ss'),'role':_0x27c5('0x37'),'internal':_0x21af90[_0x27c5('0x2d')][_0x27c5('0x38')],'uniqueid':_0x21af90[_0x27c5('0x2b')][_0x27c5('0x2c')][_0x2497fd][_0x3ca741]}});}}}}return respondWithRpcPromise(_0x27c5('0x39'),{'id':_0x21af90[_0x27c5('0x18')]['id'],'capacity':_0x21af90[_0x27c5('0x2b')][_0x27c5('0x3a')]},routingClient)[_0x27c5('0x8')](respondWithResult(_0x653bbc,null))[_0x27c5('0x15')](handleError(_0x653bbc,null));};exports[_0x27c5('0x3b')]=function(_0x436953,_0x258758){return respondWithRpcPromise('Telephones',_0x436953[_0x27c5('0x14')])[_0x27c5('0x8')](respondWithResult(_0x258758,null))['catch'](handleError(_0x258758,null));};exports[_0x27c5('0x3c')]=function(_0x595322,_0x17caa8){return respondWithRpcPromise(_0x27c5('0x3d'),_0x595322[_0x27c5('0x14')])[_0x27c5('0x8')](respondWithResult(_0x17caa8,null))[_0x27c5('0x15')](handleError(_0x17caa8,null));};exports[_0x27c5('0x3e')]=function(_0x4f7f3a,_0x3b79f4){return respondWithRpcPromise(_0x27c5('0x3f'),_0x4f7f3a[_0x27c5('0x14')])[_0x27c5('0x8')](respondWithResult(_0x3b79f4,null))[_0x27c5('0x15')](handleError(_0x3b79f4,null));};exports['chatQueues']=function(_0x523590,_0x104e53){return respondWithRpcPromise(_0x27c5('0x40'),_0x523590[_0x27c5('0x14')],routingClient)[_0x27c5('0x8')](respondWithResult(_0x104e53,null))[_0x27c5('0x15')](handleError(_0x104e53,null));};exports[_0x27c5('0x41')]=function(_0x5632a4,_0x310e6f){return respondWithRpcPromise(_0x27c5('0x40'),_0x5632a4[_0x27c5('0x14')],routingClient)[_0x27c5('0x8')](findById(_0x5632a4['params']['id']))[_0x27c5('0x8')](respondWithResult(_0x310e6f,null))[_0x27c5('0x15')](handleError(_0x310e6f,null));};exports['mailQueues']=function(_0x122237,_0x340dc8){return respondWithRpcPromise('MailQueues',_0x122237['query'],routingClient)['then'](respondWithResult(_0x340dc8,null))[_0x27c5('0x15')](handleError(_0x340dc8,null));};exports[_0x27c5('0x42')]=function(_0x5c0483,_0x4dab07){return respondWithRpcPromise(_0x27c5('0x43'),_0x5c0483['query'],routingClient)[_0x27c5('0x8')](findById(_0x5c0483[_0x27c5('0x18')]['id']))['then'](respondWithResult(_0x4dab07,null))[_0x27c5('0x15')](handleError(_0x4dab07,null));};exports[_0x27c5('0x44')]=function(_0x983e,_0xad55a3){return respondWithRpcPromise(_0x27c5('0x45'),_0x983e[_0x27c5('0x14')],mailClient)[_0x27c5('0x8')](respondWithResult(_0xad55a3,null))[_0x27c5('0x15')](handleError(_0xad55a3,null));};exports['openchannelQueues']=function(_0x4a735c,_0x53c2f2){return respondWithRpcPromise('OpenchannelQueues',_0x4a735c['query'],routingClient)[_0x27c5('0x8')](respondWithResult(_0x53c2f2,null))[_0x27c5('0x15')](handleError(_0x53c2f2,null));};exports[_0x27c5('0x46')]=function(_0x3afdfd,_0x586827){return respondWithRpcPromise('OpenchannelQueues',_0x3afdfd[_0x27c5('0x14')],routingClient)['then'](findById(_0x3afdfd[_0x27c5('0x18')]['id']))[_0x27c5('0x8')](respondWithResult(_0x586827,null))[_0x27c5('0x15')](handleError(_0x586827,null));};exports[_0x27c5('0x47')]=function(_0x402f90,_0x2c2402){return respondWithRpcPromise(_0x27c5('0x48'),_0x402f90['query'],routingClient)['then'](respondWithResult(_0x2c2402,null))['catch'](handleError(_0x2c2402,null));};exports[_0x27c5('0x49')]=function(_0x58efe3,_0x22866c){return respondWithRpcPromise(_0x27c5('0x48'),_0x58efe3[_0x27c5('0x14')],routingClient)[_0x27c5('0x8')](findById(_0x58efe3[_0x27c5('0x18')]['id']))['then'](respondWithResult(_0x22866c,null))[_0x27c5('0x15')](handleError(_0x22866c,null));};exports[_0x27c5('0x4a')]=function(_0x1da0b2,_0xa10a3a){return respondWithRpcPromise(_0x27c5('0x4b'),_0x1da0b2['query'],routingClient)['then'](respondWithResult(_0xa10a3a,null))[_0x27c5('0x15')](handleError(_0xa10a3a,null));};exports[_0x27c5('0x4c')]=function(_0x30e442,_0x5605aa){return respondWithRpcPromise(_0x27c5('0x4b'),_0x30e442[_0x27c5('0x14')],routingClient)[_0x27c5('0x8')](findById(_0x30e442['params']['id']))[_0x27c5('0x8')](respondWithResult(_0x5605aa,null))[_0x27c5('0x15')](handleError(_0x5605aa,null));};exports[_0x27c5('0x4d')]=function(_0x48958c,_0xce445a){return respondWithRpcPromise('FaxAccounts',_0x48958c[_0x27c5('0x14')])[_0x27c5('0x8')](respondWithResult(_0xce445a,null))[_0x27c5('0x15')](handleError(_0xce445a,null));};exports[_0x27c5('0x4e')]=function(_0x3153e0,_0x27bb65){return respondWithRpcPromise(_0x27c5('0x4f'),_0x3153e0[_0x27c5('0x14')],routingClient)[_0x27c5('0x8')](respondWithResult(_0x27bb65,null))[_0x27c5('0x15')](handleError(_0x27bb65,null));};exports[_0x27c5('0x50')]=function(_0x429ee1,_0x229718){return respondWithRpcPromise(_0x27c5('0x51'),_0x429ee1[_0x27c5('0x14')],routingClient)['then'](respondWithResult(_0x229718,null))[_0x27c5('0x15')](handleError(_0x229718,null));};exports[_0x27c5('0x52')]=function(_0x3a13a3,_0x2b750a){return respondWithRpcPromise(_0x27c5('0x53'),_0x3a13a3['query'],routingClient)['then'](respondWithResult(_0x2b750a,null))[_0x27c5('0x15')](handleError(_0x2b750a,null));};exports[_0x27c5('0x54')]=function(_0x40ee0d,_0x15e0e2){return respondWithRpcPromise(_0x27c5('0x55'),_0x40ee0d[_0x27c5('0x14')],routingClient)[_0x27c5('0x8')](respondWithResult(_0x15e0e2,null))['catch'](handleError(_0x15e0e2,null));};exports[_0x27c5('0x56')]=function(_0xf695a7,_0x3d2ce5){return respondWithRpcPromise(_0x27c5('0x57'),_0xf695a7[_0x27c5('0x14')],routingClient)[_0x27c5('0x8')](respondWithResult(_0x3d2ce5,null))[_0x27c5('0x15')](handleError(_0x3d2ce5,null));};exports[_0x27c5('0x58')]=function(_0x52bda1){return function(_0x124632,_0x21c8dd){var _0x52e29f,_0xad8ac6;var _0x2057d6=_[_0x27c5('0x59')](_0x52bda1);var _0x59f0ee=_0x52bda1==='chat'?'Website':_0x27c5('0x5a');return db[_0x2057d6+_0x27c5('0x5b')][_0x27c5('0x5c')]({'raw':!![],'where':{'id':_0x124632[_0x27c5('0x18')]['id']}})[_0x27c5('0x8')](function(_0x400973){if(_['isNil'](_0x400973)){throw new Error(_0x2057d6+_0x27c5('0x5d'));}_0x52e29f=_0x400973;return db[_0x2057d6+_0x27c5('0x5e')][_0x27c5('0x5c')]({'where':{'id':_0x124632['body'][_0x27c5('0x5f')]},'include':[{'model':db[_0x2057d6+_0x27c5('0x60')],'as':_0x27c5('0x60')},{'model':db[_0x2057d6+_0x59f0ee],'as':_0x27c5('0x5a')}]});})[_0x27c5('0x8')](function(_0x3dbe9f){if(_[_0x27c5('0x11')](_0x3dbe9f)){throw new Error(_0x2057d6+_0x27c5('0x61'));}_0xad8ac6=_0x3dbe9f;return _0x3dbe9f[_0x27c5('0x62')]({'read':0x0,'readAt':null,'UserId':null});})[_0x27c5('0x8')](function(){var _0x3adb63={'uniqueid':_0x52bda1+'.'+_0xad8ac6['id']+'.'+_0xad8ac6['Interaction']['id'],'FromUserId':_0x124632['user']['id'],'type':_0x27c5('0x63')};_0x3adb63[_0x2057d6+_0x27c5('0x64')]=_0xad8ac6['id'];_0x3adb63[_0x2057d6+_0x27c5('0x65')]=_0xad8ac6[_0x27c5('0x60')]['id'];_0x3adb63['From'+_0x2057d6+_0x59f0ee+'Id']=_0xad8ac6[_0x27c5('0x5a')]['id'];_0x3adb63['To'+_0x2057d6+'QueueId']=_0x52e29f['id'];return db[_0x2057d6+_0x27c5('0x66')][_0x27c5('0x67')](_0x3adb63);})[_0x27c5('0x8')](function(){return respondWithRpcPromise(_0x27c5('0x68'),{'channel':_0x52bda1,'interaction':_0xad8ac6[_0x27c5('0x60')],'message':_0xad8ac6,'account':_0xad8ac6[_0x27c5('0x5a')],'applications':[{'id':0x0,'priority':0x1,'app':_0x27c5('0x63'),'appdata':_0x52e29f[_0x27c5('0xf')]+','+(_0xad8ac6[_0x27c5('0x5a')][_0x27c5('0x69')]||0x12c),'interval':'*,*,*,*'}]},routingClient);})[_0x27c5('0x8')](respondWithResult(_0x21c8dd,null))[_0x27c5('0x15')](handleError(_0x21c8dd,null));};};exports[_0x27c5('0x6a')]=function(_0x323a4f,_0x3ab048){var _0xf0c902,_0x1bd00e;if(_[_0x27c5('0x11')](_0x323a4f['body']['channel'])){throw new Error(_0x27c5('0x6b'));}var _0xad2997=_0x323a4f[_0x27c5('0x2b')][_0x27c5('0x6c')];var _0x5a3b13=_['capitalize'](_0xad2997);var _0x41effd=_0xad2997===_0x27c5('0x6d')?'Website':_0x27c5('0x5a');return db[_0x27c5('0x6e')][_0x27c5('0x5c')]({'raw':!![],'where':{'id':_0x323a4f['params']['id'],'role':_0x27c5('0x37')}})[_0x27c5('0x8')](function(_0x3a48bb){if(_[_0x27c5('0x11')](_0x3a48bb)){throw new Error('Agent\x20not\x20found');}_0xf0c902=_0x3a48bb;return db[_0x5a3b13+_0x27c5('0x5e')]['findOne']({'where':{'id':_0x323a4f[_0x27c5('0x2b')][_0x27c5('0x5f')]},'include':[{'model':db[_0x5a3b13+_0x27c5('0x60')],'as':_0x27c5('0x60')},{'model':db[_0x5a3b13+_0x41effd],'as':_0x27c5('0x5a')}]});})['then'](function(_0x4d5355){if(_[_0x27c5('0x11')](_0x4d5355)){throw new Error(_0x5a3b13+_0x27c5('0x61'));}_0x1bd00e=_0x4d5355;return _0x4d5355[_0x27c5('0x62')]({'read':0x0,'readAt':null,'UserId':null});})[_0x27c5('0x8')](function(){var _0x131c78={'uniqueid':_0xad2997+'.'+_0x1bd00e['id']+'.'+_0x1bd00e[_0x27c5('0x60')]['id'],'FromUserId':_0x323a4f[_0x27c5('0x2d')]['id'],'type':'queue','ToUserId':_0xf0c902['id']};_0x131c78[_0x5a3b13+'MessageId']=_0x1bd00e['id'];_0x131c78[_0x5a3b13+_0x27c5('0x65')]=_0x1bd00e[_0x27c5('0x60')]['id'];_0x131c78[_0x27c5('0x6f')+_0x5a3b13+_0x41effd+'Id']=_0x1bd00e['Account']['id'];return db[_0x5a3b13+_0x27c5('0x66')][_0x27c5('0x67')](_0x131c78);})['then'](function(){return respondWithRpcPromise(_0x27c5('0x68'),{'channel':_0xad2997,'interaction':_0x1bd00e['Interaction'],'message':_0x1bd00e,'account':_0x1bd00e['Account'],'applications':[{'id':0x0,'priority':0x1,'app':_0x27c5('0x37'),'appdata':_0xf0c902[_0x27c5('0xf')]+','+(_0x1bd00e[_0x27c5('0x5a')][_0x27c5('0x70')]||0x12c),'interval':_0x27c5('0x71')}]},routingClient);})[_0x27c5('0x8')](respondWithResult(_0x3ab048,null))[_0x27c5('0x15')](handleError(_0x3ab048,null));};
\ No newline at end of file
+var _0x74ef=['ChatQueuesWaitingInteractions','mailQueuesWaitingInteractions','MailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','SmsQueuesWaitingInteractions','faxQueuesWaitingInteractions','FaxQueuesWaitingInteractions','queueNotify','capitalize','Account','Queue','findOne','Message','messageId','Interaction','\x20Message\x20not\x20found','update','MessageId','InteractionId','QueueId','Start','queueTransferTimeout','*,*,*,*','agentNotify','channel','Channel\x20field\x20is\x20mandatory','chat','Website','User','Agent\x20not\x20found','From','bluebird','moment','lodash','util','../../mysqldb','../../config/logger','api','jayson/promise','client','http','request','then','error','code','message','catch','status','stack','name','send','isNil','find','rows','voiceChannels','VoiceChannels','query','VoiceChannelMixMonitor','params','voiceChannelStopMixMonitor','VoiceChannelStopMixMonitor','merge','VoiceQueues','showVoiceQueues','voiceQueuesPreview','VoiceQueuesPreview','VoiceQueuesChannels','voiceQueuesChannel','VoiceQueuesChannel','voiceQueuesChannelHangup','VoiceQueuesChannelHangup','voiceQueuesChannelRedirect','VoiceQueuesChannelRedirect','outbound','Outbound','OutboundChannels','agentCapacity','body','interaction','user','hasOwnProperty','MemberReport','findAll','INTERACTION','YYYY-MM-DD\x20HH:mm:ss','length','findOrCreate','interface','SIP/%s','format','agent','internal','Telephones','trunks','Trunks','campaigns','chatQueues','ChatQueues','showChatQueues','mailQueues','MailQueues','showMailQueues','MailAccounts','openchannelQueues','showOpenchannelQueues','OpenchannelQueues','smsQueues','showSmsQueues','SmsQueues','FaxQueues','faxAccounts','FaxAccounts','chatQueuesWaitingInteractions'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x74ef,0x90));var _0xf74e=function(_0x47f587,_0x33ec3a){_0x47f587=_0x47f587-0x0;var _0x2a26d3=_0x74ef[_0x47f587];return _0x2a26d3;};'use strict';var BPromise=require(_0xf74e('0x0'));var moment=require(_0xf74e('0x1'));var _=require(_0xf74e('0x2'));var util=require(_0xf74e('0x3'));var db=require(_0xf74e('0x4'))['db'];var logger=require(_0xf74e('0x5'))(_0xf74e('0x6'));var jayson=require(_0xf74e('0x7'));var amiClient=jayson[_0xf74e('0x8')][_0xf74e('0x9')]({'port':0x232a});var mailClient=jayson[_0xf74e('0x8')][_0xf74e('0x9')]({'port':0x232b});var routingClient=jayson[_0xf74e('0x8')][_0xf74e('0x9')]({'port':0x232c});function respondWithRpcPromise(_0x2eab87,_0x389792,_0x579092){return new BPromise(function(_0x5216e5,_0x148c89){var _0x197a78=_0x579092?_0x579092:amiClient;return _0x197a78[_0xf74e('0xa')](_0x2eab87,_0x389792)[_0xf74e('0xb')](function(_0x465b93){if(_0x465b93[_0xf74e('0xc')]){if(_0x465b93[_0xf74e('0xc')][_0xf74e('0xd')]===0x1f4){return _0x148c89(_0x465b93[_0xf74e('0xc')][_0xf74e('0xe')]);}return _0x5216e5(_0x465b93[_0xf74e('0xc')][_0xf74e('0xe')]);}else{_0x5216e5(_0x465b93['result']);}})[_0xf74e('0xf')](function(_0x4cb0c5){_0x148c89(_0x4cb0c5);});});}function respondWithResult(_0x1c3d8c,_0x3e9db7){_0x3e9db7=_0x3e9db7||0xc8;return function(_0x41fe35){if(_0x41fe35){return _0x1c3d8c[_0xf74e('0x10')](_0x3e9db7)['json'](_0x41fe35);}return _0x1c3d8c['sendStatus'](0x194);};}function handleError(_0x4ac3b6,_0x127d67){_0x127d67=_0x127d67||0x1f4;return function(_0x543a79){logger[_0xf74e('0xc')](_0x543a79[_0xf74e('0x11')]);if(_0x543a79[_0xf74e('0x12')]){delete _0x543a79[_0xf74e('0x12')];}_0x4ac3b6[_0xf74e('0x10')](_0x127d67)[_0xf74e('0x13')](_0x543a79);};}function findById(_0x539ce1){return function(_0x27dfd0){if(!_['isNil'](_0x539ce1)&&!_['isNil'](_0x27dfd0)&&!_[_0xf74e('0x14')](_0x27dfd0['rows'])){return _[_0xf74e('0x15')](_0x27dfd0[_0xf74e('0x16')],function(_0x254e88){return _0x254e88['id']==_0x539ce1;});}return null;};}exports[_0xf74e('0x17')]=function(_0x279485,_0x4cee5e){return respondWithRpcPromise(_0xf74e('0x18'),_0x279485[_0xf74e('0x19')])[_0xf74e('0xb')](respondWithResult(_0x4cee5e,null))['catch'](handleError(_0x4cee5e,null));};exports['voiceChannelMixMonitor']=function(_0x147668,_0x4a7ec6){return respondWithRpcPromise(_0xf74e('0x1a'),_['merge'](_0x147668['query'],_0x147668[_0xf74e('0x1b')]))['then'](respondWithResult(_0x4a7ec6,null))[_0xf74e('0xf')](handleError(_0x4a7ec6,null));};exports[_0xf74e('0x1c')]=function(_0x24ca7d,_0x5c05b2){return respondWithRpcPromise(_0xf74e('0x1d'),_[_0xf74e('0x1e')](_0x24ca7d['query'],_0x24ca7d[_0xf74e('0x1b')]))[_0xf74e('0xb')](respondWithResult(_0x5c05b2,null))[_0xf74e('0xf')](handleError(_0x5c05b2,null));};exports['voiceQueues']=function(_0x2f8929,_0x27c372){return respondWithRpcPromise(_0xf74e('0x1f'),_0x2f8929[_0xf74e('0x19')])['then'](respondWithResult(_0x27c372,null))[_0xf74e('0xf')](handleError(_0x27c372,null));};exports[_0xf74e('0x20')]=function(_0x2e3c38,_0x4a51a1){return respondWithRpcPromise('VoiceQueues',_0x2e3c38[_0xf74e('0x19')])[_0xf74e('0xb')](findById(_0x2e3c38[_0xf74e('0x1b')]['id']))[_0xf74e('0xb')](respondWithResult(_0x4a51a1,null))[_0xf74e('0xf')](handleError(_0x4a51a1,null));};exports[_0xf74e('0x21')]=function(_0x24c6cd,_0x55f937){return respondWithRpcPromise(_0xf74e('0x22'),_[_0xf74e('0x1e')](_0x24c6cd['query'],_0x24c6cd[_0xf74e('0x1b')]))['then'](respondWithResult(_0x55f937,null))[_0xf74e('0xf')](handleError(_0x55f937,null));};exports['voiceQueuesChannels']=function(_0x1fe57e,_0x4d2330){return respondWithRpcPromise(_0xf74e('0x23'),_0x1fe57e['query'])[_0xf74e('0xb')](respondWithResult(_0x4d2330,null))[_0xf74e('0xf')](handleError(_0x4d2330,null));};exports[_0xf74e('0x24')]=function(_0x4a7651,_0x3f1bca){return respondWithRpcPromise(_0xf74e('0x25'),_['merge'](_0x4a7651[_0xf74e('0x19')],_0x4a7651[_0xf74e('0x1b')]))[_0xf74e('0xb')](respondWithResult(_0x3f1bca,null))[_0xf74e('0xf')](handleError(_0x3f1bca,null));};exports[_0xf74e('0x26')]=function(_0x3a334a,_0x3af536){return respondWithRpcPromise(_0xf74e('0x27'),_[_0xf74e('0x1e')](_0x3a334a[_0xf74e('0x19')],_0x3a334a['params']))['then'](respondWithResult(_0x3af536,null))[_0xf74e('0xf')](handleError(_0x3af536,null));};exports[_0xf74e('0x28')]=function(_0x8f7f44,_0x468698){return respondWithRpcPromise(_0xf74e('0x29'),_[_0xf74e('0x1e')](_0x8f7f44[_0xf74e('0x19')],_0x8f7f44[_0xf74e('0x1b')]))['then'](respondWithResult(_0x468698,null))[_0xf74e('0xf')](handleError(_0x468698,null));};exports[_0xf74e('0x2a')]=function(_0x31c441,_0x55b687){return respondWithRpcPromise(_0xf74e('0x2b'),_0x31c441['query'])['then'](respondWithResult(_0x55b687,null))['catch'](handleError(_0x55b687,null));};exports['outboundChannels']=function(_0x3ad051,_0x264ec8){return respondWithRpcPromise(_0xf74e('0x2c'),_0x3ad051[_0xf74e('0x19')])[_0xf74e('0xb')](respondWithResult(_0x264ec8,null))['catch'](handleError(_0x264ec8,null));};exports['agents']=function(_0x46a518,_0x4083d7){var _0x35c912;return respondWithRpcPromise('Agents',_0x46a518['query'])[_0xf74e('0xb')](function(_0x13545f){_0x35c912=_0x13545f;return respondWithRpcPromise('Agents',_0x46a518[_0xf74e('0x19')],routingClient);})[_0xf74e('0xb')](function(_0x1cbe2f){return _[_0xf74e('0x1e')]({},_0x1cbe2f,_0x35c912);})[_0xf74e('0xb')](respondWithResult(_0x4083d7,null))[_0xf74e('0xf')](handleError(_0x4083d7,null));};exports[_0xf74e('0x2d')]=function(_0x414de9,_0x2cd548){if(_0x414de9[_0xf74e('0x2e')]&&_0x414de9[_0xf74e('0x2e')][_0xf74e('0x2f')]&&_0x414de9[_0xf74e('0x30')]&&_0x414de9[_0xf74e('0x30')][_0xf74e('0x12')]){for(var _0x49bf62 in _0x414de9['body'][_0xf74e('0x2f')]){if(_0x414de9[_0xf74e('0x2e')][_0xf74e('0x2f')][_0xf74e('0x31')](_0x49bf62)){db[_0xf74e('0x32')][_0xf74e('0x33')]({'where':{'channel':_0x49bf62,'membername':_0x414de9[_0xf74e('0x30')]['name'],'type':_0xf74e('0x34'),'exitAt':null,'uniqueid':_0x414de9[_0xf74e('0x2e')][_0xf74e('0x2f')][_0x49bf62]&&_0x414de9[_0xf74e('0x2e')][_0xf74e('0x2f')][_0x49bf62]['length']?{'$notIn':_0x414de9[_0xf74e('0x2e')][_0xf74e('0x2f')][_0x49bf62]}:{'$ne':null}}})['then'](function(_0x49fba9){var _0x171ef9=moment()['format'](_0xf74e('0x35'));for(var _0x3dd261=0x0,_0x578531=_0x49fba9[_0xf74e('0x36')];_0x3dd261<_0x578531;_0x3dd261+=0x1){_0x49fba9[_0x3dd261]['updateAttributes']({'exitAt':_0x171ef9});}});for(var _0xc5f304=0x0;_0xc5f304<_0x414de9[_0xf74e('0x2e')]['interaction'][_0x49bf62][_0xf74e('0x36')];_0xc5f304+=0x1){db[_0xf74e('0x32')][_0xf74e('0x37')]({'where':{'channel':_0x49bf62,'membername':_0x414de9['user']['name'],'type':_0xf74e('0x34'),'uniqueid':_0x414de9[_0xf74e('0x2e')][_0xf74e('0x2f')][_0x49bf62][_0xc5f304],'exitAt':null},'defaults':{'channel':_0x49bf62,'membername':_0x414de9[_0xf74e('0x30')][_0xf74e('0x12')],'interface':_[_0xf74e('0x14')](_0x414de9[_0xf74e('0x30')][_0xf74e('0x38')])?util['format'](_0xf74e('0x39'),_0x414de9[_0xf74e('0x30')]['name']):_0x414de9['user']['interface'],'type':_0xf74e('0x34'),'enterAt':moment()[_0xf74e('0x3a')](_0xf74e('0x35')),'role':_0xf74e('0x3b'),'internal':_0x414de9['user'][_0xf74e('0x3c')],'uniqueid':_0x414de9[_0xf74e('0x2e')][_0xf74e('0x2f')][_0x49bf62][_0xc5f304]}});}}}}return respondWithRpcPromise('AgentCapacity',{'id':_0x414de9[_0xf74e('0x1b')]['id'],'capacity':_0x414de9[_0xf74e('0x2e')]['capacity']},routingClient)['then'](respondWithResult(_0x2cd548,null))[_0xf74e('0xf')](handleError(_0x2cd548,null));};exports['telephones']=function(_0x15b6dd,_0x3d7e6f){return respondWithRpcPromise(_0xf74e('0x3d'),_0x15b6dd[_0xf74e('0x19')])[_0xf74e('0xb')](respondWithResult(_0x3d7e6f,null))[_0xf74e('0xf')](handleError(_0x3d7e6f,null));};exports[_0xf74e('0x3e')]=function(_0x7f76b,_0x32eec3){return respondWithRpcPromise(_0xf74e('0x3f'),_0x7f76b[_0xf74e('0x19')])[_0xf74e('0xb')](respondWithResult(_0x32eec3,null))['catch'](handleError(_0x32eec3,null));};exports[_0xf74e('0x40')]=function(_0x43c914,_0x5354ac){return respondWithRpcPromise('Campaigns',_0x43c914[_0xf74e('0x19')])['then'](respondWithResult(_0x5354ac,null))[_0xf74e('0xf')](handleError(_0x5354ac,null));};exports[_0xf74e('0x41')]=function(_0x4f2576,_0xe03f7b){return respondWithRpcPromise(_0xf74e('0x42'),_0x4f2576[_0xf74e('0x19')],routingClient)[_0xf74e('0xb')](respondWithResult(_0xe03f7b,null))[_0xf74e('0xf')](handleError(_0xe03f7b,null));};exports[_0xf74e('0x43')]=function(_0x4e6cde,_0x5dadbb){return respondWithRpcPromise(_0xf74e('0x42'),_0x4e6cde[_0xf74e('0x19')],routingClient)[_0xf74e('0xb')](findById(_0x4e6cde['params']['id']))['then'](respondWithResult(_0x5dadbb,null))[_0xf74e('0xf')](handleError(_0x5dadbb,null));};exports[_0xf74e('0x44')]=function(_0x297b18,_0x4f6ec9){return respondWithRpcPromise(_0xf74e('0x45'),_0x297b18['query'],routingClient)['then'](respondWithResult(_0x4f6ec9,null))[_0xf74e('0xf')](handleError(_0x4f6ec9,null));};exports[_0xf74e('0x46')]=function(_0x210509,_0x2e8d67){return respondWithRpcPromise('MailQueues',_0x210509[_0xf74e('0x19')],routingClient)[_0xf74e('0xb')](findById(_0x210509[_0xf74e('0x1b')]['id']))['then'](respondWithResult(_0x2e8d67,null))[_0xf74e('0xf')](handleError(_0x2e8d67,null));};exports['mailAccounts']=function(_0x596099,_0x4a3b9b){return respondWithRpcPromise(_0xf74e('0x47'),_0x596099[_0xf74e('0x19')],mailClient)['then'](respondWithResult(_0x4a3b9b,null))[_0xf74e('0xf')](handleError(_0x4a3b9b,null));};exports[_0xf74e('0x48')]=function(_0x56422e,_0x2c5f93){return respondWithRpcPromise('OpenchannelQueues',_0x56422e['query'],routingClient)[_0xf74e('0xb')](respondWithResult(_0x2c5f93,null))[_0xf74e('0xf')](handleError(_0x2c5f93,null));};exports[_0xf74e('0x49')]=function(_0x180645,_0x316a84){return respondWithRpcPromise(_0xf74e('0x4a'),_0x180645[_0xf74e('0x19')],routingClient)[_0xf74e('0xb')](findById(_0x180645[_0xf74e('0x1b')]['id']))[_0xf74e('0xb')](respondWithResult(_0x316a84,null))[_0xf74e('0xf')](handleError(_0x316a84,null));};exports[_0xf74e('0x4b')]=function(_0xc5140a,_0x551168){return respondWithRpcPromise('SmsQueues',_0xc5140a['query'],routingClient)['then'](respondWithResult(_0x551168,null))['catch'](handleError(_0x551168,null));};exports[_0xf74e('0x4c')]=function(_0x359987,_0x45c387){return respondWithRpcPromise(_0xf74e('0x4d'),_0x359987[_0xf74e('0x19')],routingClient)[_0xf74e('0xb')](findById(_0x359987[_0xf74e('0x1b')]['id']))[_0xf74e('0xb')](respondWithResult(_0x45c387,null))[_0xf74e('0xf')](handleError(_0x45c387,null));};exports['faxQueues']=function(_0x4f8bd6,_0x245894){return respondWithRpcPromise(_0xf74e('0x4e'),_0x4f8bd6['query'],routingClient)[_0xf74e('0xb')](respondWithResult(_0x245894,null))['catch'](handleError(_0x245894,null));};exports['showFaxQueues']=function(_0x5c7ace,_0x41175a){return respondWithRpcPromise(_0xf74e('0x4e'),_0x5c7ace[_0xf74e('0x19')],routingClient)[_0xf74e('0xb')](findById(_0x5c7ace[_0xf74e('0x1b')]['id']))['then'](respondWithResult(_0x41175a,null))[_0xf74e('0xf')](handleError(_0x41175a,null));};exports[_0xf74e('0x4f')]=function(_0x26431b,_0x287780){return respondWithRpcPromise(_0xf74e('0x50'),_0x26431b[_0xf74e('0x19')])[_0xf74e('0xb')](respondWithResult(_0x287780,null))[_0xf74e('0xf')](handleError(_0x287780,null));};exports[_0xf74e('0x51')]=function(_0x57dee6,_0x4842fc){return respondWithRpcPromise(_0xf74e('0x52'),_0x57dee6[_0xf74e('0x19')],routingClient)[_0xf74e('0xb')](respondWithResult(_0x4842fc,null))[_0xf74e('0xf')](handleError(_0x4842fc,null));};exports[_0xf74e('0x53')]=function(_0x21d85c,_0x67d610){return respondWithRpcPromise(_0xf74e('0x54'),_0x21d85c['query'],routingClient)[_0xf74e('0xb')](respondWithResult(_0x67d610,null))[_0xf74e('0xf')](handleError(_0x67d610,null));};exports[_0xf74e('0x55')]=function(_0x39da15,_0x1e0317){return respondWithRpcPromise('OpenchannelQueuesWaitingInteractions',_0x39da15[_0xf74e('0x19')],routingClient)[_0xf74e('0xb')](respondWithResult(_0x1e0317,null))['catch'](handleError(_0x1e0317,null));};exports['smsQueuesWaitingInteractions']=function(_0x2326c1,_0x567feb){return respondWithRpcPromise(_0xf74e('0x56'),_0x2326c1['query'],routingClient)[_0xf74e('0xb')](respondWithResult(_0x567feb,null))[_0xf74e('0xf')](handleError(_0x567feb,null));};exports[_0xf74e('0x57')]=function(_0x59c8f7,_0x2cc130){return respondWithRpcPromise(_0xf74e('0x58'),_0x59c8f7[_0xf74e('0x19')],routingClient)[_0xf74e('0xb')](respondWithResult(_0x2cc130,null))[_0xf74e('0xf')](handleError(_0x2cc130,null));};exports[_0xf74e('0x59')]=function(_0x458abd){return function(_0x57b6c2,_0x1f9126){var _0x5843bc,_0x5d342f;var _0x188762=_[_0xf74e('0x5a')](_0x458abd);var _0x2fa60a=_0x458abd==='chat'?'Website':_0xf74e('0x5b');return db[_0x188762+_0xf74e('0x5c')][_0xf74e('0x5d')]({'raw':!![],'where':{'id':_0x57b6c2[_0xf74e('0x1b')]['id']}})[_0xf74e('0xb')](function(_0x11da1a){if(_[_0xf74e('0x14')](_0x11da1a)){throw new Error(_0x188762+'\x20Queue\x20not\x20found');}_0x5843bc=_0x11da1a;return db[_0x188762+_0xf74e('0x5e')][_0xf74e('0x5d')]({'where':{'id':_0x57b6c2['body'][_0xf74e('0x5f')]},'include':[{'model':db[_0x188762+_0xf74e('0x60')],'as':_0xf74e('0x60')},{'model':db[_0x188762+_0x2fa60a],'as':_0xf74e('0x5b')}]});})[_0xf74e('0xb')](function(_0x143c98){if(_['isNil'](_0x143c98)){throw new Error(_0x188762+_0xf74e('0x61'));}_0x5d342f=_0x143c98;return _0x143c98[_0xf74e('0x62')]({'read':0x0,'readAt':null,'UserId':null});})[_0xf74e('0xb')](function(){var _0x1ba1c1={'uniqueid':_0x458abd+'.'+_0x5d342f['id']+'.'+_0x5d342f[_0xf74e('0x60')]['id'],'FromUserId':_0x57b6c2[_0xf74e('0x30')]['id'],'type':'queue'};_0x1ba1c1[_0x188762+_0xf74e('0x63')]=_0x5d342f['id'];_0x1ba1c1[_0x188762+_0xf74e('0x64')]=_0x5d342f[_0xf74e('0x60')]['id'];_0x1ba1c1['From'+_0x188762+_0x2fa60a+'Id']=_0x5d342f[_0xf74e('0x5b')]['id'];_0x1ba1c1['To'+_0x188762+_0xf74e('0x65')]=_0x5843bc['id'];return db[_0x188762+'TransferReport']['create'](_0x1ba1c1);})[_0xf74e('0xb')](function(){return respondWithRpcPromise(_0xf74e('0x66'),{'channel':_0x458abd,'interaction':_0x5d342f[_0xf74e('0x60')],'message':_0x5d342f,'account':_0x5d342f[_0xf74e('0x5b')],'applications':[{'id':0x0,'priority':0x1,'app':'queue','appdata':_0x5843bc[_0xf74e('0x12')]+','+(_0x5d342f[_0xf74e('0x5b')][_0xf74e('0x67')]||0x12c),'interval':_0xf74e('0x68')}]},routingClient);})[_0xf74e('0xb')](respondWithResult(_0x1f9126,null))[_0xf74e('0xf')](handleError(_0x1f9126,null));};};exports[_0xf74e('0x69')]=function(_0x54bf0c,_0x5df4d3){var _0x2ec4fd,_0x2be539;if(_[_0xf74e('0x14')](_0x54bf0c[_0xf74e('0x2e')][_0xf74e('0x6a')])){throw new Error(_0xf74e('0x6b'));}var _0x28d084=_0x54bf0c[_0xf74e('0x2e')]['channel'];var _0x42f870=_[_0xf74e('0x5a')](_0x28d084);var _0x255b8f=_0x28d084===_0xf74e('0x6c')?_0xf74e('0x6d'):_0xf74e('0x5b');return db[_0xf74e('0x6e')][_0xf74e('0x5d')]({'raw':!![],'where':{'id':_0x54bf0c[_0xf74e('0x1b')]['id'],'role':_0xf74e('0x3b')}})[_0xf74e('0xb')](function(_0x22c097){if(_[_0xf74e('0x14')](_0x22c097)){throw new Error(_0xf74e('0x6f'));}_0x2ec4fd=_0x22c097;return db[_0x42f870+_0xf74e('0x5e')][_0xf74e('0x5d')]({'where':{'id':_0x54bf0c['body'][_0xf74e('0x5f')]},'include':[{'model':db[_0x42f870+'Interaction'],'as':_0xf74e('0x60')},{'model':db[_0x42f870+_0x255b8f],'as':_0xf74e('0x5b')}]});})['then'](function(_0x368834){if(_[_0xf74e('0x14')](_0x368834)){throw new Error(_0x42f870+_0xf74e('0x61'));}_0x2be539=_0x368834;return _0x368834[_0xf74e('0x62')]({'read':0x0,'readAt':null,'UserId':null});})[_0xf74e('0xb')](function(){var _0x902ce8={'uniqueid':_0x28d084+'.'+_0x2be539['id']+'.'+_0x2be539[_0xf74e('0x60')]['id'],'FromUserId':_0x54bf0c['user']['id'],'type':'queue','ToUserId':_0x2ec4fd['id']};_0x902ce8[_0x42f870+_0xf74e('0x63')]=_0x2be539['id'];_0x902ce8[_0x42f870+_0xf74e('0x64')]=_0x2be539['Interaction']['id'];_0x902ce8[_0xf74e('0x70')+_0x42f870+_0x255b8f+'Id']=_0x2be539[_0xf74e('0x5b')]['id'];return db[_0x42f870+'TransferReport']['create'](_0x902ce8);})[_0xf74e('0xb')](function(){return respondWithRpcPromise(_0xf74e('0x66'),{'channel':_0x28d084,'interaction':_0x2be539['Interaction'],'message':_0x2be539,'account':_0x2be539[_0xf74e('0x5b')],'applications':[{'id':0x0,'priority':0x1,'app':'agent','appdata':_0x2ec4fd[_0xf74e('0x12')]+','+(_0x2be539[_0xf74e('0x5b')]['agentTransferTimeout']||0x12c),'interval':'*,*,*,*'}]},routingClient);})[_0xf74e('0xb')](respondWithResult(_0x5df4d3,null))[_0xf74e('0xf')](handleError(_0x5df4d3,null));};
\ No newline at end of file
index 1db3b7b..305ee82 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1f23=['isAuthenticated','show','run','create','put','/:id','update','destroy','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','./schedule.controller','get'];(function(_0x37bab2,_0x27378c){var _0x454c85=function(_0x580bdc){while(--_0x580bdc){_0x37bab2['push'](_0x37bab2['shift']());}};_0x454c85(++_0x27378c);}(_0x1f23,0x1c3));var _0x31f2=function(_0x2db3cb,_0x356f49){_0x2db3cb=_0x2db3cb-0x0;var _0x3a06ea=_0x1f23[_0x2db3cb];return _0x3a06ea;};'use strict';var multer=require(_0x31f2('0x0'));var util=require(_0x31f2('0x1'));var path=require('path');var timeout=require(_0x31f2('0x2'));var express=require(_0x31f2('0x3'));var router=express[_0x31f2('0x4')]();var auth=require(_0x31f2('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x31f2('0x6'));router[_0x31f2('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0x31f2('0x7')]('/:id',auth[_0x31f2('0x8')](),controller[_0x31f2('0x9')]);router['get']('/:id/run',auth[_0x31f2('0x8')](),controller[_0x31f2('0xa')]);router['post']('/',auth[_0x31f2('0x8')](),controller[_0x31f2('0xb')]);router[_0x31f2('0xc')](_0x31f2('0xd'),auth['isAuthenticated'](),controller[_0x31f2('0xe')]);router['delete'](_0x31f2('0xd'),auth[_0x31f2('0x8')](),controller[_0x31f2('0xf')]);module[_0x31f2('0x10')]=router;
\ No newline at end of file
+var _0x94a8=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','index','get','/:id','show','/:id/run','run','create','put','update','delete','destroy','exports','multer','util','connect-timeout','express'];(function(_0xf99583,_0x309dc6){var _0x3761a1=function(_0x28eef8){while(--_0x28eef8){_0xf99583['push'](_0xf99583['shift']());}};_0x3761a1(++_0x309dc6);}(_0x94a8,0xe3));var _0x894a=function(_0xd0b415,_0x149675){_0xd0b415=_0xd0b415-0x0;var _0x2bdf2c=_0x94a8[_0xd0b415];return _0x2bdf2c;};'use strict';var multer=require(_0x894a('0x0'));var util=require(_0x894a('0x1'));var path=require('path');var timeout=require(_0x894a('0x2'));var express=require(_0x894a('0x3'));var router=express[_0x894a('0x4')]();var auth=require(_0x894a('0x5'));var interaction=require(_0x894a('0x6'));var config=require(_0x894a('0x7'));var controller=require('./schedule.controller');router['get']('/',auth[_0x894a('0x8')](),controller[_0x894a('0x9')]);router[_0x894a('0xa')](_0x894a('0xb'),auth['isAuthenticated'](),controller[_0x894a('0xc')]);router[_0x894a('0xa')](_0x894a('0xd'),auth[_0x894a('0x8')](),controller[_0x894a('0xe')]);router['post']('/',auth[_0x894a('0x8')](),controller[_0x894a('0xf')]);router[_0x894a('0x10')](_0x894a('0xb'),auth['isAuthenticated'](),controller[_0x894a('0x11')]);router[_0x894a('0x12')](_0x894a('0xb'),auth['isAuthenticated'](),controller[_0x894a('0x13')]);module[_0x894a('0x14')]=router;
\ No newline at end of file
index c843bcb..4fc2331 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe5ce=['sequelize','exports','STRING','BOOLEAN','0\x200\x20*\x20*\x20*','DATE','INTEGER','ENUM','years','quarters','months','days','hours','minutes','csv','pdf','custom','default','TEXT'];(function(_0x351848,_0x348c3d){var _0x20864b=function(_0x1ecb9a){while(--_0x1ecb9a){_0x351848['push'](_0x351848['shift']());}};_0x20864b(++_0x348c3d);}(_0xe5ce,0x18f));var _0xee5c=function(_0x10661d,_0x1a4a2e){_0x10661d=_0x10661d-0x0;var _0x54650a=_0xe5ce[_0x10661d];return _0x54650a;};'use strict';var Sequelize=require(_0xee5c('0x0'));module[_0xee5c('0x1')]={'name':{'type':Sequelize[_0xee5c('0x2')],'allowNull':![]},'description':{'type':Sequelize['STRING']},'active':{'type':Sequelize[_0xee5c('0x3')],'allowNull':![],'defaultValue':![]},'cron':{'type':Sequelize[_0xee5c('0x2')],'allowNull':![],'defaultValue':_0xee5c('0x4')},'startAt':{'type':Sequelize[_0xee5c('0x5')],'allowNull':![]},'endAt':{'type':Sequelize[_0xee5c('0x5')],'allowNull':![]},'subtractNumber':{'type':Sequelize[_0xee5c('0x6')],'allowNull':![],'defaultValue':0x1,'validate':{'min':0x1}},'subtractUnit':{'type':Sequelize[_0xee5c('0x7')](_0xee5c('0x8'),_0xee5c('0x9'),_0xee5c('0xa'),'weeks',_0xee5c('0xb'),_0xee5c('0xc'),_0xee5c('0xd')),'allowNull':![],'defaultValue':_0xee5c('0xb')},'output':{'type':Sequelize[_0xee5c('0x7')](_0xee5c('0xe'),_0xee5c('0xf'),'xlsx'),'allowNull':![],'defaultValue':_0xee5c('0xe')},'type':{'type':Sequelize[_0xee5c('0x7')](_0xee5c('0x10'),_0xee5c('0x11')),'allowNull':![],'defaultValue':_0xee5c('0x10')},'sendMail':{'type':Sequelize[_0xee5c('0x3')],'defaultValue':![]},'email':{'type':Sequelize[_0xee5c('0x2')]},'cc':{'type':Sequelize[_0xee5c('0x12')]},'bcc':{'type':Sequelize['TEXT']},'sendIfEmpty':{'type':Sequelize[_0xee5c('0x3')],'defaultValue':!![]}};
\ No newline at end of file
+var _0x10b6=['sequelize','exports','STRING','BOOLEAN','0\x200\x20*\x20*\x20*','DATE','INTEGER','years','quarters','weeks','days','hours','minutes','ENUM','csv','xlsx','default','custom','TEXT'];(function(_0x144edb,_0xf82a1c){var _0xe802f8=function(_0x5cbfaa){while(--_0x5cbfaa){_0x144edb['push'](_0x144edb['shift']());}};_0xe802f8(++_0xf82a1c);}(_0x10b6,0x169));var _0x610b=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0x10b6[_0x1facfa];return _0x9ec701;};'use strict';var Sequelize=require(_0x610b('0x0'));module[_0x610b('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'description':{'type':Sequelize[_0x610b('0x2')]},'active':{'type':Sequelize[_0x610b('0x3')],'allowNull':![],'defaultValue':![]},'cron':{'type':Sequelize[_0x610b('0x2')],'allowNull':![],'defaultValue':_0x610b('0x4')},'startAt':{'type':Sequelize[_0x610b('0x5')],'allowNull':![]},'endAt':{'type':Sequelize['DATE'],'allowNull':![]},'subtractNumber':{'type':Sequelize[_0x610b('0x6')],'allowNull':![],'defaultValue':0x1,'validate':{'min':0x1}},'subtractUnit':{'type':Sequelize['ENUM'](_0x610b('0x7'),_0x610b('0x8'),'months',_0x610b('0x9'),_0x610b('0xa'),_0x610b('0xb'),_0x610b('0xc')),'allowNull':![],'defaultValue':_0x610b('0xa')},'output':{'type':Sequelize[_0x610b('0xd')](_0x610b('0xe'),'pdf',_0x610b('0xf')),'allowNull':![],'defaultValue':_0x610b('0xe')},'type':{'type':Sequelize[_0x610b('0xd')]('custom',_0x610b('0x10')),'allowNull':![],'defaultValue':_0x610b('0x11')},'sendMail':{'type':Sequelize[_0x610b('0x3')],'defaultValue':![]},'email':{'type':Sequelize['STRING']},'cc':{'type':Sequelize[_0x610b('0x12')]},'bcc':{'type':Sequelize['TEXT']},'sendIfEmpty':{'type':Sequelize[_0x610b('0x3')],'defaultValue':!![]}};
\ No newline at end of file
index 7facd67..a724008 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2495=['end','sendStatus','error','stack','send','index','Schedule','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','show','params','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','Scheduler','UserProfileSection','find','userProfileId','autoAssociation','name','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','run','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','mustache','util','path','sox','to-csv','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','get','UserProfileResource','destroy'];(function(_0x5d0609,_0x127562){var _0xaa3fd1=function(_0x47f457){while(--_0x47f457){_0x5d0609['push'](_0x5d0609['shift']());}};_0xaa3fd1(++_0x127562);}(_0x2495,0xdb));var _0x5249=function(_0x5254ea,_0x1af3fd){_0x5254ea=_0x5254ea-0x0;var _0x192890=_0x2495[_0x5254ea];return _0x192890;};'use strict';var pdf=require(_0x5249('0x0'));var emlformat=require(_0x5249('0x1'));var rimraf=require(_0x5249('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x5249('0x3'));var rp=require(_0x5249('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x5249('0x5'));var util=require(_0x5249('0x6'));var path=require(_0x5249('0x7'));var sox=require(_0x5249('0x8'));var csv=require(_0x5249('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x5249('0xa'));var squel=require(_0x5249('0xb'));var crypto=require(_0x5249('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x5249('0xd'));var toCsv=require(_0x5249('0x9'));var querystring=require(_0x5249('0xe'));var Papa=require(_0x5249('0xf'));var Redis=require(_0x5249('0x10'));var authService=require(_0x5249('0x11'));var qs=require(_0x5249('0x12'));var hardwareService=require(_0x5249('0x13'));var logger=require('../../config/logger')(_0x5249('0x14'));var utils=require(_0x5249('0x15'));var config=require(_0x5249('0x16'));var db=require(_0x5249('0x17'))['db'];function respondWithStatusCode(_0x5c8e71,_0x3b6e95){_0x3b6e95=_0x3b6e95||0xcc;return function(_0xc36b36){if(_0xc36b36){return _0x5c8e71['sendStatus'](_0x3b6e95);}return _0x5c8e71[_0x5249('0x18')](_0x3b6e95)['end']();};}function respondWithResult(_0x3bb475,_0x3eaccd){_0x3eaccd=_0x3eaccd||0xc8;return function(_0x4ebe43){if(_0x4ebe43){return _0x3bb475['status'](_0x3eaccd)[_0x5249('0x19')](_0x4ebe43);}};}function respondWithFilteredResult(_0xa3cc53,_0x2593ea){return function(_0x2f8ef2){if(_0x2f8ef2){var _0x1fe529=_0x2f8ef2[_0x5249('0x1a')],_0x276853=_0x2593ea[_0x5249('0x1b')],_0x2bd731=_0x2593ea['offset']+_0x2593ea[_0x5249('0x1c')],_0x36646e;if(_0x2bd731>=_0x1fe529){_0x2bd731=_0x1fe529;_0x36646e=0xc8;}else{_0x36646e=0xce;}_0xa3cc53[_0x5249('0x18')](_0x36646e);return _0xa3cc53[_0x5249('0x1d')](_0x5249('0x1e'),_0x276853+'-'+_0x2bd731+'/'+_0x1fe529)[_0x5249('0x19')](_0x2f8ef2);}return null;};}function patchUpdates(_0xd3f565){return function(_0x569660){try{jsonpatch[_0x5249('0x1f')](_0x569660,_0xd3f565,!![]);}catch(_0xc219d0){return BPromise[_0x5249('0x20')](_0xc219d0);}return _0x569660[_0x5249('0x21')]();};}function saveUpdates(_0x5bb556,_0xb00ef2){return function(_0x5cf5b0){if(_0x5cf5b0){return _0x5cf5b0[_0x5249('0x22')](_0x5bb556)[_0x5249('0x23')](function(_0x489bcb){return _0x489bcb;});}return null;};}function removeEntity(_0x224319,_0x57b8e8){return function(_0x1e8862){if(_0x1e8862){return _0x1e8862['destroy']()['then'](function(){var _0x342c86=_0x1e8862[_0x5249('0x24')]({'plain':!![]});var _0x5257cd='Scheduler';return db[_0x5249('0x25')][_0x5249('0x26')]({'where':{'type':_0x5257cd,'resourceId':_0x342c86['id']}})[_0x5249('0x23')](function(){return _0x1e8862;});})[_0x5249('0x23')](function(){_0x224319['status'](0xcc)[_0x5249('0x27')]();});}};}function handleEntityNotFound(_0x29db52,_0x4f2447){return function(_0x26ef75){if(!_0x26ef75){_0x29db52[_0x5249('0x28')](0x194);}return _0x26ef75;};}function handleError(_0x78e314,_0x66e308){_0x66e308=_0x66e308||0x1f4;return function(_0x280ab1){logger[_0x5249('0x29')](_0x280ab1[_0x5249('0x2a')]);if(_0x280ab1['name']){delete _0x280ab1['name'];}_0x78e314['status'](_0x66e308)[_0x5249('0x2b')](_0x280ab1);};}exports[_0x5249('0x2c')]=function(_0x50f0e8,_0x1834ea){var _0x50d1c={},_0x209540={},_0x46a19f={'count':0x0,'rows':[]};var _0x26a15b=db[_0x5249('0x2d')][_0x5249('0x2e')];_0x209540['model']=_[_0x5249('0x2f')](_0x26a15b);_0x209540['query']=_[_0x5249('0x2f')](_0x50f0e8[_0x5249('0x30')]);_0x209540[_0x5249('0x31')]=_[_0x5249('0x32')](_0x209540[_0x5249('0x33')],_0x209540['query']);_0x50d1c[_0x5249('0x34')]=_[_0x5249('0x32')](_0x209540[_0x5249('0x33')],qs[_0x5249('0x35')](_0x50f0e8['query'][_0x5249('0x35')]));_0x50d1c['attributes']=_0x50d1c[_0x5249('0x34')][_0x5249('0x36')]?_0x50d1c[_0x5249('0x34')]:_0x209540[_0x5249('0x33')];if(!_0x50f0e8[_0x5249('0x30')][_0x5249('0x37')](_0x5249('0x38'))){_0x50d1c[_0x5249('0x1c')]=qs[_0x5249('0x1c')](_0x50f0e8[_0x5249('0x30')][_0x5249('0x1c')]);_0x50d1c['offset']=qs['offset'](_0x50f0e8[_0x5249('0x30')]['offset']);}_0x50d1c[_0x5249('0x39')]=qs[_0x5249('0x3a')](_0x50f0e8[_0x5249('0x30')]['sort']);_0x50d1c[_0x5249('0x3b')]=qs['filters'](_[_0x5249('0x3c')](_0x50f0e8[_0x5249('0x30')],_0x209540[_0x5249('0x31')]));if(_0x50f0e8[_0x5249('0x30')]['filter']){_0x50d1c[_0x5249('0x3b')]=_[_0x5249('0x3d')](_0x50d1c[_0x5249('0x3b')],{'$or':_[_0x5249('0x3e')](_0x26a15b,function(_0x416dba){if(_0x416dba[_0x5249('0x3f')][_0x5249('0x40')]!==_0x5249('0x41')){var _0x27f327={};_0x27f327[_0x416dba[_0x5249('0x42')]]={'$like':'%'+_0x50f0e8[_0x5249('0x30')]['filter']+'%'};return _0x27f327;}})});}_0x50d1c=_['merge']({},_0x50d1c,_0x50f0e8[_0x5249('0x43')]);var _0x39aa29={'where':_0x50d1c[_0x5249('0x3b')]};return db[_0x5249('0x2d')][_0x5249('0x1a')](_0x39aa29)['then'](function(_0x223950){_0x46a19f[_0x5249('0x1a')]=_0x223950;if(_0x50f0e8[_0x5249('0x30')][_0x5249('0x44')]){_0x50d1c[_0x5249('0x45')]=[{'all':!![]}];}return db[_0x5249('0x2d')][_0x5249('0x46')](_0x50d1c);})['then'](function(_0x23e84e){_0x46a19f['rows']=_0x23e84e;return _0x46a19f;})[_0x5249('0x23')](respondWithFilteredResult(_0x1834ea,_0x50d1c))['catch'](handleError(_0x1834ea,null));};exports[_0x5249('0x47')]=function(_0x20d891,_0xee9292){var _0x110654={'raw':![],'where':{'id':_0x20d891[_0x5249('0x48')]['id']}},_0x5e494e={};_0x5e494e['model']=_[_0x5249('0x2f')](db[_0x5249('0x2d')][_0x5249('0x2e')]);_0x5e494e[_0x5249('0x30')]=_['keys'](_0x20d891[_0x5249('0x30')]);_0x5e494e[_0x5249('0x31')]=_[_0x5249('0x32')](_0x5e494e[_0x5249('0x33')],_0x5e494e[_0x5249('0x30')]);_0x110654[_0x5249('0x34')]=_['intersection'](_0x5e494e[_0x5249('0x33')],qs[_0x5249('0x35')](_0x20d891[_0x5249('0x30')]['fields']));_0x110654['attributes']=_0x110654['attributes'][_0x5249('0x36')]?_0x110654[_0x5249('0x34')]:_0x5e494e[_0x5249('0x33')];if(_0x20d891[_0x5249('0x30')][_0x5249('0x44')]){_0x110654['include']=[{'all':!![]}];}_0x110654=_[_0x5249('0x3d')]({},_0x110654,_0x20d891[_0x5249('0x43')]);return db[_0x5249('0x2d')]['find'](_0x110654)[_0x5249('0x23')](handleEntityNotFound(_0xee9292,null))[_0x5249('0x23')](respondWithResult(_0xee9292,null))[_0x5249('0x49')](handleError(_0xee9292,null));};exports[_0x5249('0x4a')]=function(_0x541170,_0x2d527d){return db['Schedule'][_0x5249('0x4a')](_0x541170[_0x5249('0x4b')],{})[_0x5249('0x23')](function(_0x1787fd){var _0x37f83c=_0x541170[_0x5249('0x4c')][_0x5249('0x24')]({'plain':!![]});if(!_0x37f83c)throw new Error(_0x5249('0x4d'));if(_0x37f83c['role']===_0x5249('0x4c')){var _0x54e4ea=_0x1787fd[_0x5249('0x24')]({'plain':!![]});var _0x1edf54=_0x5249('0x4e');return db[_0x5249('0x4f')][_0x5249('0x50')]({'where':{'name':_0x1edf54,'userProfileId':_0x37f83c[_0x5249('0x51')]},'raw':!![]})[_0x5249('0x23')](function(_0x583eab){if(_0x583eab&&_0x583eab[_0x5249('0x52')]===0x0){return db[_0x5249('0x25')][_0x5249('0x4a')]({'name':_0x54e4ea['name'],'resourceId':_0x54e4ea['id'],'type':_0x583eab[_0x5249('0x53')],'sectionId':_0x583eab['id']},{})[_0x5249('0x23')](function(){return _0x1787fd;});}else{return _0x1787fd;}})[_0x5249('0x49')](function(_0x206dcb){logger[_0x5249('0x29')](_0x5249('0x54'),_0x206dcb);throw _0x206dcb;});}return _0x1787fd;})[_0x5249('0x23')](respondWithResult(_0x2d527d,0xc9))[_0x5249('0x49')](handleError(_0x2d527d,null));};exports['update']=function(_0xdaad77,_0x2da6b2){if(_0xdaad77[_0x5249('0x4b')]['id']){delete _0xdaad77['body']['id'];}return db[_0x5249('0x2d')][_0x5249('0x50')]({'where':{'id':_0xdaad77['params']['id']}})[_0x5249('0x23')](handleEntityNotFound(_0x2da6b2,null))[_0x5249('0x23')](saveUpdates(_0xdaad77[_0x5249('0x4b')],null))['then'](respondWithResult(_0x2da6b2,null))['catch'](handleError(_0x2da6b2,null));};exports[_0x5249('0x26')]=function(_0x3cee94,_0x31d08f){return db[_0x5249('0x2d')][_0x5249('0x50')]({'where':{'id':_0x3cee94['params']['id']}})[_0x5249('0x23')](handleEntityNotFound(_0x31d08f,null))[_0x5249('0x23')](removeEntity(_0x31d08f,null))[_0x5249('0x49')](handleError(_0x31d08f,null));};exports[_0x5249('0x55')]=function(_0x172f55,_0x5cdad5,_0x5bcd0d){var _0x57da99=require('../../config/schedule');return db[_0x5249('0x2d')]['find']({'where':{'id':_0x172f55[_0x5249('0x48')]['id']},'raw':!![]})[_0x5249('0x23')](handleEntityNotFound(_0x5cdad5,null))['then'](function(){_0x57da99[_0x5249('0x55')](_0x172f55[_0x5249('0x48')]['id']);})[_0x5249('0x23')](respondWithStatusCode(_0x5cdad5,null))['catch'](handleError(_0x5cdad5,null));};
\ No newline at end of file
+var _0xb369=['findAll','rows','show','params','includeAll','include','find','catch','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','body','run','../../config/schedule','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','path','sox','to-csv','ejs','lodash','crypto','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','get','Scheduler','error','name','send','Schedule','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','sort','where','pick','filter','merge','map','type','VIRTUAL','field','options'];(function(_0x2cde74,_0x55cf68){var _0x39ee49=function(_0x1e312e){while(--_0x1e312e){_0x2cde74['push'](_0x2cde74['shift']());}};_0x39ee49(++_0x55cf68);}(_0xb369,0xb3));var _0x9b36=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xb369[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require(_0x9b36('0x0'));var emlformat=require(_0x9b36('0x1'));var rimraf=require(_0x9b36('0x2'));var zipdir=require(_0x9b36('0x3'));var jsonpatch=require(_0x9b36('0x4'));var rp=require(_0x9b36('0x5'));var moment=require(_0x9b36('0x6'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x9b36('0x7'));var sox=require(_0x9b36('0x8'));var csv=require(_0x9b36('0x9'));var ejs=require(_0x9b36('0xa'));var fs=require('fs');var _=require(_0x9b36('0xb'));var squel=require('squel');var crypto=require(_0x9b36('0xc'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x9b36('0x9'));var querystring=require(_0x9b36('0xd'));var Papa=require(_0x9b36('0xe'));var Redis=require(_0x9b36('0xf'));var authService=require('../../components/auth/service');var qs=require(_0x9b36('0x10'));var hardwareService=require(_0x9b36('0x11'));var logger=require('../../config/logger')(_0x9b36('0x12'));var utils=require(_0x9b36('0x13'));var config=require(_0x9b36('0x14'));var db=require(_0x9b36('0x15'))['db'];function respondWithStatusCode(_0x1d3ada,_0x3b4b2e){_0x3b4b2e=_0x3b4b2e||0xcc;return function(_0x15aa07){if(_0x15aa07){return _0x1d3ada[_0x9b36('0x16')](_0x3b4b2e);}return _0x1d3ada['status'](_0x3b4b2e)[_0x9b36('0x17')]();};}function respondWithResult(_0x1f811e,_0x3ef61f){_0x3ef61f=_0x3ef61f||0xc8;return function(_0x23fbce){if(_0x23fbce){return _0x1f811e[_0x9b36('0x18')](_0x3ef61f)[_0x9b36('0x19')](_0x23fbce);}};}function respondWithFilteredResult(_0x34c595,_0x2602c2){return function(_0xc88b99){if(_0xc88b99){var _0x1767da=_0xc88b99[_0x9b36('0x1a')],_0x4bf527=_0x2602c2[_0x9b36('0x1b')],_0x55b35f=_0x2602c2[_0x9b36('0x1b')]+_0x2602c2[_0x9b36('0x1c')],_0x5cf036;if(_0x55b35f>=_0x1767da){_0x55b35f=_0x1767da;_0x5cf036=0xc8;}else{_0x5cf036=0xce;}_0x34c595[_0x9b36('0x18')](_0x5cf036);return _0x34c595[_0x9b36('0x1d')](_0x9b36('0x1e'),_0x4bf527+'-'+_0x55b35f+'/'+_0x1767da)[_0x9b36('0x19')](_0xc88b99);}return null;};}function patchUpdates(_0x1768d8){return function(_0x46bd90){try{jsonpatch[_0x9b36('0x1f')](_0x46bd90,_0x1768d8,!![]);}catch(_0x405556){return BPromise['reject'](_0x405556);}return _0x46bd90[_0x9b36('0x20')]();};}function saveUpdates(_0x12b355,_0x480163){return function(_0x2d8d0a){if(_0x2d8d0a){return _0x2d8d0a[_0x9b36('0x21')](_0x12b355)[_0x9b36('0x22')](function(_0x1c4278){return _0x1c4278;});}return null;};}function removeEntity(_0x2d482a,_0xaf534e){return function(_0xc7f11){if(_0xc7f11){return _0xc7f11[_0x9b36('0x23')]()[_0x9b36('0x22')](function(){var _0x523c2a=_0xc7f11[_0x9b36('0x24')]({'plain':!![]});var _0x1d3818=_0x9b36('0x25');return db['UserProfileResource'][_0x9b36('0x23')]({'where':{'type':_0x1d3818,'resourceId':_0x523c2a['id']}})[_0x9b36('0x22')](function(){return _0xc7f11;});})[_0x9b36('0x22')](function(){_0x2d482a[_0x9b36('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5a7827,_0x19c1f1){return function(_0x4ae6cf){if(!_0x4ae6cf){_0x5a7827[_0x9b36('0x16')](0x194);}return _0x4ae6cf;};}function handleError(_0x1a106f,_0x51dfe1){_0x51dfe1=_0x51dfe1||0x1f4;return function(_0x5cb360){logger[_0x9b36('0x26')](_0x5cb360['stack']);if(_0x5cb360[_0x9b36('0x27')]){delete _0x5cb360[_0x9b36('0x27')];}_0x1a106f[_0x9b36('0x18')](_0x51dfe1)[_0x9b36('0x28')](_0x5cb360);};}exports['index']=function(_0x2aa836,_0x54ec5b){var _0x1091a8={},_0x4ceb0e={},_0x2f1ae2={'count':0x0,'rows':[]};var _0x43f2e0=db[_0x9b36('0x29')][_0x9b36('0x2a')];_0x4ceb0e[_0x9b36('0x2b')]=_['keys'](_0x43f2e0);_0x4ceb0e[_0x9b36('0x2c')]=_[_0x9b36('0x2d')](_0x2aa836[_0x9b36('0x2c')]);_0x4ceb0e[_0x9b36('0x2e')]=_[_0x9b36('0x2f')](_0x4ceb0e[_0x9b36('0x2b')],_0x4ceb0e['query']);_0x1091a8[_0x9b36('0x30')]=_['intersection'](_0x4ceb0e['model'],qs[_0x9b36('0x31')](_0x2aa836['query'][_0x9b36('0x31')]));_0x1091a8[_0x9b36('0x30')]=_0x1091a8[_0x9b36('0x30')][_0x9b36('0x32')]?_0x1091a8[_0x9b36('0x30')]:_0x4ceb0e[_0x9b36('0x2b')];if(!_0x2aa836['query']['hasOwnProperty']('nolimit')){_0x1091a8[_0x9b36('0x1c')]=qs[_0x9b36('0x1c')](_0x2aa836[_0x9b36('0x2c')]['limit']);_0x1091a8[_0x9b36('0x1b')]=qs[_0x9b36('0x1b')](_0x2aa836[_0x9b36('0x2c')][_0x9b36('0x1b')]);}_0x1091a8['order']=qs[_0x9b36('0x33')](_0x2aa836['query'][_0x9b36('0x33')]);_0x1091a8[_0x9b36('0x34')]=qs['filters'](_[_0x9b36('0x35')](_0x2aa836['query'],_0x4ceb0e[_0x9b36('0x2e')]));if(_0x2aa836[_0x9b36('0x2c')][_0x9b36('0x36')]){_0x1091a8['where']=_[_0x9b36('0x37')](_0x1091a8[_0x9b36('0x34')],{'$or':_[_0x9b36('0x38')](_0x43f2e0,function(_0x16e03c){if(_0x16e03c[_0x9b36('0x39')]['key']!==_0x9b36('0x3a')){var _0x259a28={};_0x259a28[_0x16e03c[_0x9b36('0x3b')]]={'$like':'%'+_0x2aa836[_0x9b36('0x2c')]['filter']+'%'};return _0x259a28;}})});}_0x1091a8=_[_0x9b36('0x37')]({},_0x1091a8,_0x2aa836[_0x9b36('0x3c')]);var _0x55d163={'where':_0x1091a8[_0x9b36('0x34')]};return db[_0x9b36('0x29')][_0x9b36('0x1a')](_0x55d163)['then'](function(_0x477d64){_0x2f1ae2[_0x9b36('0x1a')]=_0x477d64;if(_0x2aa836[_0x9b36('0x2c')]['includeAll']){_0x1091a8['include']=[{'all':!![]}];}return db[_0x9b36('0x29')][_0x9b36('0x3d')](_0x1091a8);})[_0x9b36('0x22')](function(_0x594572){_0x2f1ae2[_0x9b36('0x3e')]=_0x594572;return _0x2f1ae2;})[_0x9b36('0x22')](respondWithFilteredResult(_0x54ec5b,_0x1091a8))['catch'](handleError(_0x54ec5b,null));};exports[_0x9b36('0x3f')]=function(_0x44cd39,_0x56efdb){var _0x42c4e2={'raw':![],'where':{'id':_0x44cd39[_0x9b36('0x40')]['id']}},_0x5dfcbf={};_0x5dfcbf[_0x9b36('0x2b')]=_[_0x9b36('0x2d')](db[_0x9b36('0x29')][_0x9b36('0x2a')]);_0x5dfcbf[_0x9b36('0x2c')]=_[_0x9b36('0x2d')](_0x44cd39[_0x9b36('0x2c')]);_0x5dfcbf[_0x9b36('0x2e')]=_[_0x9b36('0x2f')](_0x5dfcbf[_0x9b36('0x2b')],_0x5dfcbf[_0x9b36('0x2c')]);_0x42c4e2['attributes']=_[_0x9b36('0x2f')](_0x5dfcbf[_0x9b36('0x2b')],qs[_0x9b36('0x31')](_0x44cd39[_0x9b36('0x2c')][_0x9b36('0x31')]));_0x42c4e2[_0x9b36('0x30')]=_0x42c4e2[_0x9b36('0x30')]['length']?_0x42c4e2['attributes']:_0x5dfcbf[_0x9b36('0x2b')];if(_0x44cd39['query'][_0x9b36('0x41')]){_0x42c4e2[_0x9b36('0x42')]=[{'all':!![]}];}_0x42c4e2=_[_0x9b36('0x37')]({},_0x42c4e2,_0x44cd39[_0x9b36('0x3c')]);return db['Schedule'][_0x9b36('0x43')](_0x42c4e2)[_0x9b36('0x22')](handleEntityNotFound(_0x56efdb,null))[_0x9b36('0x22')](respondWithResult(_0x56efdb,null))[_0x9b36('0x44')](handleError(_0x56efdb,null));};exports['create']=function(_0x173d13,_0x4d1853){return db['Schedule'][_0x9b36('0x45')](_0x173d13['body'],{})[_0x9b36('0x22')](function(_0x3fc7a5){var _0x298a89=_0x173d13[_0x9b36('0x46')]['get']({'plain':!![]});if(!_0x298a89)throw new Error(_0x9b36('0x47'));if(_0x298a89[_0x9b36('0x48')]===_0x9b36('0x46')){var _0xe2c6a6=_0x3fc7a5['get']({'plain':!![]});var _0x2a5f6b=_0x9b36('0x25');return db[_0x9b36('0x49')][_0x9b36('0x43')]({'where':{'name':_0x2a5f6b,'userProfileId':_0x298a89[_0x9b36('0x4a')]},'raw':!![]})[_0x9b36('0x22')](function(_0x290942){if(_0x290942&&_0x290942[_0x9b36('0x4b')]===0x0){return db[_0x9b36('0x4c')][_0x9b36('0x45')]({'name':_0xe2c6a6['name'],'resourceId':_0xe2c6a6['id'],'type':_0x290942['name'],'sectionId':_0x290942['id']},{})['then'](function(){return _0x3fc7a5;});}else{return _0x3fc7a5;}})[_0x9b36('0x44')](function(_0x1e818e){logger[_0x9b36('0x26')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x1e818e);throw _0x1e818e;});}return _0x3fc7a5;})[_0x9b36('0x22')](respondWithResult(_0x4d1853,0xc9))[_0x9b36('0x44')](handleError(_0x4d1853,null));};exports[_0x9b36('0x21')]=function(_0x20ca3b,_0x38fd41){if(_0x20ca3b['body']['id']){delete _0x20ca3b[_0x9b36('0x4d')]['id'];}return db[_0x9b36('0x29')][_0x9b36('0x43')]({'where':{'id':_0x20ca3b[_0x9b36('0x40')]['id']}})[_0x9b36('0x22')](handleEntityNotFound(_0x38fd41,null))[_0x9b36('0x22')](saveUpdates(_0x20ca3b[_0x9b36('0x4d')],null))[_0x9b36('0x22')](respondWithResult(_0x38fd41,null))[_0x9b36('0x44')](handleError(_0x38fd41,null));};exports['destroy']=function(_0x3ce06,_0x1b3e64){return db[_0x9b36('0x29')][_0x9b36('0x43')]({'where':{'id':_0x3ce06[_0x9b36('0x40')]['id']}})['then'](handleEntityNotFound(_0x1b3e64,null))[_0x9b36('0x22')](removeEntity(_0x1b3e64,null))[_0x9b36('0x44')](handleError(_0x1b3e64,null));};exports[_0x9b36('0x4e')]=function(_0x3d77d0,_0x414c8f,_0x2682ce){var _0x1116c7=require(_0x9b36('0x4f'));return db[_0x9b36('0x29')][_0x9b36('0x43')]({'where':{'id':_0x3d77d0[_0x9b36('0x40')]['id']},'raw':!![]})[_0x9b36('0x22')](handleEntityNotFound(_0x414c8f,null))[_0x9b36('0x22')](function(){_0x1116c7[_0x9b36('0x4e')](_0x3d77d0['params']['id']);})['then'](respondWithStatusCode(_0x414c8f,null))[_0x9b36('0x44')](handleError(_0x414c8f,null));};
\ No newline at end of file
index 6e168ad..1842557 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x077f=['Schedule','tools_schedules','lodash','util','../../config/logger','moment','request-promise','path','../../config/environment','exports'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0x077f,0x98));var _0xf077=function(_0x10aa78,_0x1a6955){_0x10aa78=_0x10aa78-0x0;var _0x199be3=_0x077f[_0x10aa78];return _0x199be3;};'use strict';var _=require(_0xf077('0x0'));var util=require(_0xf077('0x1'));var logger=require(_0xf077('0x2'))('api');var moment=require(_0xf077('0x3'));var BPromise=require('bluebird');var rp=require(_0xf077('0x4'));var fs=require('fs');var path=require(_0xf077('0x5'));var rimraf=require('rimraf');var config=require(_0xf077('0x6'));var attributes=require('./schedule.attributes');module[_0xf077('0x7')]=function(_0x21eccc,_0x3e207a){return _0x21eccc['define'](_0xf077('0x8'),attributes,{'tableName':_0xf077('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xeb34=['lodash','util','moment','bluebird','request-promise','path','../../config/environment','./schedule.attributes','define','tools_schedules'];(function(_0x105dda,_0x3169c8){var _0xef0dc9=function(_0x641d35){while(--_0x641d35){_0x105dda['push'](_0x105dda['shift']());}};_0xef0dc9(++_0x3169c8);}(_0xeb34,0x168));var _0x4eb3=function(_0x2a56ad,_0x2b94bf){_0x2a56ad=_0x2a56ad-0x0;var _0x425175=_0xeb34[_0x2a56ad];return _0x425175;};'use strict';var _=require(_0x4eb3('0x0'));var util=require(_0x4eb3('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x4eb3('0x2'));var BPromise=require(_0x4eb3('0x3'));var rp=require(_0x4eb3('0x4'));var fs=require('fs');var path=require(_0x4eb3('0x5'));var rimraf=require('rimraf');var config=require(_0x4eb3('0x6'));var attributes=require(_0x4eb3('0x7'));module['exports']=function(_0x5f1116,_0x5ea949){return _0x5f1116[_0x4eb3('0x8')]('Schedule',attributes,{'tableName':_0x4eb3('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 04fe18e..2f448c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x65d3=['request','then','info','Schedule,\x20%s,\x20%s','request\x20sent','Schedule,\x20%s,\x20%s,\x20%s','stringify','error','message','result','lodash','moment','bluebird','randomstring','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http'];(function(_0x1bd411,_0x2b2ca2){var _0x5dcc9f=function(_0x12d987){while(--_0x12d987){_0x1bd411['push'](_0x1bd411['shift']());}};_0x5dcc9f(++_0x2b2ca2);}(_0x65d3,0xd2));var _0x365d=function(_0x9d5153,_0x3ee99f){_0x9d5153=_0x9d5153-0x0;var _0x67488e=_0x65d3[_0x9d5153];return _0x67488e;};'use strict';var _=require(_0x365d('0x0'));var util=require('util');var moment=require(_0x365d('0x1'));var BPromise=require(_0x365d('0x2'));var rs=require(_0x365d('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x365d('0x4'));var logger=require(_0x365d('0x5'))('rpc');var config=require(_0x365d('0x6'));var jayson=require(_0x365d('0x7'));var client=jayson[_0x365d('0x8')][_0x365d('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x185c07,_0xe04c8e,_0x144b27){return new BPromise(function(_0x318515,_0x15f9be){return client[_0x365d('0xa')](_0x185c07,_0x144b27)[_0x365d('0xb')](function(_0x1d22a8){logger[_0x365d('0xc')](_0x365d('0xd'),_0xe04c8e,_0x365d('0xe'));logger['debug'](_0x365d('0xf'),_0xe04c8e,_0x365d('0xe'),JSON[_0x365d('0x10')](_0x1d22a8));if(_0x1d22a8['error']){if(_0x1d22a8[_0x365d('0x11')]['code']===0x1f4){logger[_0x365d('0x11')](_0x365d('0xd'),_0xe04c8e,_0x1d22a8[_0x365d('0x11')][_0x365d('0x12')]);return _0x15f9be(_0x1d22a8[_0x365d('0x11')][_0x365d('0x12')]);}logger[_0x365d('0x11')]('Schedule,\x20%s,\x20%s',_0xe04c8e,_0x1d22a8['error'][_0x365d('0x12')]);return _0x318515(_0x1d22a8[_0x365d('0x11')][_0x365d('0x12')]);}else{logger[_0x365d('0xc')](_0x365d('0xd'),_0xe04c8e,_0x365d('0xe'));_0x318515(_0x1d22a8[_0x365d('0x13')]['message']);}})['catch'](function(_0x189160){logger[_0x365d('0x11')](_0x365d('0xd'),_0xe04c8e,_0x189160);_0x15f9be(_0x189160);});});}
\ No newline at end of file
+var _0x971c=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request\x20sent','debug','error','Schedule,\x20%s,\x20%s','message','info','catch','util','bluebird','randomstring','ioredis'];(function(_0xedd460,_0x1c1a2f){var _0x3528d5=function(_0x561855){while(--_0x561855){_0xedd460['push'](_0xedd460['shift']());}};_0x3528d5(++_0x1c1a2f);}(_0x971c,0xd4));var _0xc971=function(_0x433a86,_0x175b5c){_0x433a86=_0x433a86-0x0;var _0x23000c=_0x971c[_0x433a86];return _0x23000c;};'use strict';var _=require('lodash');var util=require(_0xc971('0x0'));var moment=require('moment');var BPromise=require(_0xc971('0x1'));var rs=require(_0xc971('0x2'));var fs=require('fs');var Redis=require(_0xc971('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xc971('0x4'));var logger=require(_0xc971('0x5'))(_0xc971('0x6'));var config=require(_0xc971('0x7'));var jayson=require(_0xc971('0x8'));var client=jayson[_0xc971('0x9')][_0xc971('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3ad664,_0x1b0740,_0x16f639){return new BPromise(function(_0x53eee7,_0x5baf9b){return client['request'](_0x3ad664,_0x16f639)['then'](function(_0x31c211){logger['info']('Schedule,\x20%s,\x20%s',_0x1b0740,_0xc971('0xb'));logger[_0xc971('0xc')]('Schedule,\x20%s,\x20%s,\x20%s',_0x1b0740,_0xc971('0xb'),JSON['stringify'](_0x31c211));if(_0x31c211['error']){if(_0x31c211[_0xc971('0xd')]['code']===0x1f4){logger[_0xc971('0xd')]('Schedule,\x20%s,\x20%s',_0x1b0740,_0x31c211[_0xc971('0xd')]['message']);return _0x5baf9b(_0x31c211[_0xc971('0xd')]['message']);}logger['error'](_0xc971('0xe'),_0x1b0740,_0x31c211[_0xc971('0xd')][_0xc971('0xf')]);return _0x53eee7(_0x31c211[_0xc971('0xd')][_0xc971('0xf')]);}else{logger[_0xc971('0x10')](_0xc971('0xe'),_0x1b0740,_0xc971('0xb'));_0x53eee7(_0x31c211['result'][_0xc971('0xf')]);}})[_0xc971('0x11')](function(_0x1eb742){logger[_0xc971('0xd')](_0xc971('0xe'),_0x1b0740,_0x1eb742);_0x5baf9b(_0x1eb742);});});}
\ No newline at end of file
index 86239d0..467a535 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb9f9=['../../config/environment','./screenRecording.controller','get','index','isAuthenticated','describe','/:id','show','/:id/download','download','post','create','put','delete','destroy','connect-timeout','express','../../components/auth/service','../../components/interaction/service'];(function(_0x2b74e5,_0x373870){var _0x58589a=function(_0x479260){while(--_0x479260){_0x2b74e5['push'](_0x2b74e5['shift']());}};_0x58589a(++_0x373870);}(_0xb9f9,0x12c));var _0x9b9f=function(_0x383ca1,_0x1ebb14){_0x383ca1=_0x383ca1-0x0;var _0x4bb134=_0xb9f9[_0x383ca1];return _0x4bb134;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var timeout=require(_0x9b9f('0x0'));var express=require(_0x9b9f('0x1'));var router=express['Router']();var auth=require(_0x9b9f('0x2'));var interaction=require(_0x9b9f('0x3'));var config=require(_0x9b9f('0x4'));var controller=require(_0x9b9f('0x5'));router[_0x9b9f('0x6')]('/',auth['isAuthenticated'](),controller[_0x9b9f('0x7')]);router['get']('/describe',auth[_0x9b9f('0x8')](),controller[_0x9b9f('0x9')]);router[_0x9b9f('0x6')](_0x9b9f('0xa'),auth[_0x9b9f('0x8')](),controller[_0x9b9f('0xb')]);router['get'](_0x9b9f('0xc'),auth['isAuthenticated'](),controller[_0x9b9f('0xd')]);router[_0x9b9f('0xe')]('/',auth[_0x9b9f('0x8')](),controller[_0x9b9f('0xf')]);router[_0x9b9f('0x10')](_0x9b9f('0xa'),auth[_0x9b9f('0x8')](),controller['update']);router[_0x9b9f('0x11')](_0x9b9f('0xa'),auth['isAuthenticated'](),controller[_0x9b9f('0x12')]);module['exports']=router;
\ No newline at end of file
+var _0x1d3a=['describe','/:id','show','/:id/download','download','create','put','delete','destroy','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./screenRecording.controller','get','index','/describe','isAuthenticated'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x1d3a,0xe6));var _0xa1d3=function(_0x502c7d,_0x2f1285){_0x502c7d=_0x502c7d-0x0;var _0x30b7ed=_0x1d3a[_0x502c7d];return _0x30b7ed;};'use strict';var multer=require(_0xa1d3('0x0'));var util=require('util');var path=require(_0xa1d3('0x1'));var timeout=require('connect-timeout');var express=require(_0xa1d3('0x2'));var router=express[_0xa1d3('0x3')]();var auth=require(_0xa1d3('0x4'));var interaction=require(_0xa1d3('0x5'));var config=require(_0xa1d3('0x6'));var controller=require(_0xa1d3('0x7'));router[_0xa1d3('0x8')]('/',auth['isAuthenticated'](),controller[_0xa1d3('0x9')]);router[_0xa1d3('0x8')](_0xa1d3('0xa'),auth[_0xa1d3('0xb')](),controller[_0xa1d3('0xc')]);router[_0xa1d3('0x8')](_0xa1d3('0xd'),auth[_0xa1d3('0xb')](),controller[_0xa1d3('0xe')]);router[_0xa1d3('0x8')](_0xa1d3('0xf'),auth[_0xa1d3('0xb')](),controller[_0xa1d3('0x10')]);router['post']('/',auth[_0xa1d3('0xb')](),controller[_0xa1d3('0x11')]);router[_0xa1d3('0x12')](_0xa1d3('0xd'),auth[_0xa1d3('0xb')](),controller['update']);router[_0xa1d3('0x13')](_0xa1d3('0xd'),auth[_0xa1d3('0xb')](),controller[_0xa1d3('0x14')]);module[_0xa1d3('0x15')]=router;
\ No newline at end of file
index f3aa46b..9ace677 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2739=['getDataValue','toString','format','createdAt','MM-DD-YYYY\x20HH:mm','updatedAt','sequelize','exports','value','extname','STRING','replace','INTEGER','startedAt','subtract','setDataValue','closedAt','duration','DATE'];(function(_0x46a634,_0x439b70){var _0x42007a=function(_0x2a9e29){while(--_0x2a9e29){_0x46a634['push'](_0x46a634['shift']());}};_0x42007a(++_0x439b70);}(_0x2739,0x8b));var _0x9273=function(_0x360e66,_0xf5b28b){_0x360e66=_0x360e66-0x0;var _0x18bd04=_0x2739[_0x360e66];return _0x18bd04;};'use strict';var Sequelize=require(_0x9273('0x0'));var moment=require('moment');var path=require('path');var config=require('../../config/environment');module[_0x9273('0x1')]={'format':{'type':Sequelize['VIRTUAL'],'get':function(){return this['getDataValue'](_0x9273('0x2'))?path[_0x9273('0x3')](this['getDataValue'](_0x9273('0x2'))):undefined;}},'interactionid':{'type':Sequelize[_0x9273('0x4')]},'channel':{'type':Sequelize[_0x9273('0x4')]},'value':{'type':Sequelize[_0x9273('0x4')],'set':function(_0xfe2742){var _0x2f56cb=_0xfe2742[_0x9273('0x5')](/\\/g,'/');this['setDataValue'](_0x9273('0x2'),_0x2f56cb);}},'rating':{'type':Sequelize[_0x9273('0x6')],'validate':{'max':0x5,'min':0x0}},'duration':{'type':Sequelize['INTEGER'],'set':function(_0x538c6f){this['setDataValue'](_0x9273('0x7'),moment()[_0x9273('0x8')](_0x538c6f,'ms'));this[_0x9273('0x9')](_0x9273('0xa'),moment());this[_0x9273('0x9')](_0x9273('0xb'),_0x538c6f);}},'startedAt':{'type':Sequelize[_0x9273('0xc')],'get':function(){return moment(this[_0x9273('0xd')](_0x9273('0x7')))['format']('MM-DD-YYYY\x20HH:mm')[_0x9273('0xe')]();}},'closedAt':{'type':Sequelize[_0x9273('0xc')],'get':function(){return moment(this[_0x9273('0xd')]('closedAt'))[_0x9273('0xf')]('MM-DD-YYYY\x20HH:mm')['toString']();}},'createdAt':{'type':Sequelize[_0x9273('0xc')],'get':function(){return moment(this[_0x9273('0xd')](_0x9273('0x10')))['format'](_0x9273('0x11'))[_0x9273('0xe')]();}},'updatedAt':{'type':Sequelize[_0x9273('0xc')],'get':function(){return moment(this[_0x9273('0xd')](_0x9273('0x12')))[_0x9273('0xf')](_0x9273('0x11'))[_0x9273('0xe')]();}}};
\ No newline at end of file
+var _0x655b=['../../config/environment','exports','VIRTUAL','extname','getDataValue','value','STRING','replace','setDataValue','INTEGER','startedAt','subtract','duration','DATE','format','MM-DD-YYYY\x20HH:mm','toString','closedAt','updatedAt','sequelize','moment','path'];(function(_0x436aa1,_0x35b05c){var _0x48b8cb=function(_0x1ef5ce){while(--_0x1ef5ce){_0x436aa1['push'](_0x436aa1['shift']());}};_0x48b8cb(++_0x35b05c);}(_0x655b,0x147));var _0xb655=function(_0x2d7f0e,_0x3e6fbd){_0x2d7f0e=_0x2d7f0e-0x0;var _0x110b07=_0x655b[_0x2d7f0e];return _0x110b07;};'use strict';var Sequelize=require(_0xb655('0x0'));var moment=require(_0xb655('0x1'));var path=require(_0xb655('0x2'));var config=require(_0xb655('0x3'));module[_0xb655('0x4')]={'format':{'type':Sequelize[_0xb655('0x5')],'get':function(){return this['getDataValue']('value')?path[_0xb655('0x6')](this[_0xb655('0x7')](_0xb655('0x8'))):undefined;}},'interactionid':{'type':Sequelize['STRING']},'channel':{'type':Sequelize[_0xb655('0x9')]},'value':{'type':Sequelize[_0xb655('0x9')],'set':function(_0xcc16c5){var _0x222450=_0xcc16c5[_0xb655('0xa')](/\\/g,'/');this[_0xb655('0xb')](_0xb655('0x8'),_0x222450);}},'rating':{'type':Sequelize[_0xb655('0xc')],'validate':{'max':0x5,'min':0x0}},'duration':{'type':Sequelize[_0xb655('0xc')],'set':function(_0x4f198a){this['setDataValue'](_0xb655('0xd'),moment()[_0xb655('0xe')](_0x4f198a,'ms'));this[_0xb655('0xb')]('closedAt',moment());this[_0xb655('0xb')](_0xb655('0xf'),_0x4f198a);}},'startedAt':{'type':Sequelize[_0xb655('0x10')],'get':function(){return moment(this[_0xb655('0x7')](_0xb655('0xd')))[_0xb655('0x11')](_0xb655('0x12'))[_0xb655('0x13')]();}},'closedAt':{'type':Sequelize[_0xb655('0x10')],'get':function(){return moment(this[_0xb655('0x7')](_0xb655('0x14')))['format']('MM-DD-YYYY\x20HH:mm')[_0xb655('0x13')]();}},'createdAt':{'type':Sequelize[_0xb655('0x10')],'get':function(){return moment(this[_0xb655('0x7')]('createdAt'))[_0xb655('0x11')](_0xb655('0x12'))[_0xb655('0x13')]();}},'updatedAt':{'type':Sequelize[_0xb655('0x10')],'get':function(){return moment(this[_0xb655('0x7')](_0xb655('0x15')))[_0xb655('0x11')](_0xb655('0x12'))[_0xb655('0x13')]();}}};
\ No newline at end of file
index 39db235..9e27cda 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x90c0=['findAll','rows','catch','show','params','find','create','body','duration','closedAt','value','describe','download','../../components/encryptor','join','root','server/files/screen_recordings','existsSync','decryptFile','recording','Sequelize','ValidationError','ScreenRecording\x20not\x20found','filename','unlink','message','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','to-csv','ejs','squel','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','set','Content-Range','apply','save','update','then','destroy','stack','name','send','index','ScreenRecording','rawAttributes','differenceBy','keys','format','query','filters','model','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','offset','sort','where','pick','filter','merge','map','type','key','VIRTUAL','options','includeAll','include'];(function(_0x548dc7,_0xcefd94){var _0x5072c9=function(_0xc5f0bf){while(--_0xc5f0bf){_0x548dc7['push'](_0x548dc7['shift']());}};_0x5072c9(++_0xcefd94);}(_0x90c0,0xd4));var _0x090c=function(_0x2ae489,_0x9f8183){_0x2ae489=_0x2ae489-0x0;var _0x144cd2=_0x90c0[_0x2ae489];return _0x144cd2;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x090c('0x0'));var rimraf=require(_0x090c('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x090c('0x2'));var rp=require(_0x090c('0x3'));var moment=require('moment');var BPromise=require(_0x090c('0x4'));var Mustache=require(_0x090c('0x5'));var util=require(_0x090c('0x6'));var path=require(_0x090c('0x7'));var sox=require('sox');var csv=require(_0x090c('0x8'));var ejs=require(_0x090c('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x090c('0xa'));var crypto=require('crypto');var jsforce=require(_0x090c('0xb'));var deskjs=require(_0x090c('0xc'));var toCsv=require(_0x090c('0x8'));var querystring=require(_0x090c('0xd'));var Papa=require(_0x090c('0xe'));var Redis=require(_0x090c('0xf'));var authService=require(_0x090c('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x090c('0x11'));var logger=require(_0x090c('0x12'))(_0x090c('0x13'));var utils=require(_0x090c('0x14'));var config=require(_0x090c('0x15'));var db=require(_0x090c('0x16'))['db'];function respondWithStatusCode(_0x424a3e,_0x2a05ac){_0x2a05ac=_0x2a05ac||0xcc;return function(_0xf1ccec){if(_0xf1ccec){return _0x424a3e[_0x090c('0x17')](_0x2a05ac);}return _0x424a3e[_0x090c('0x18')](_0x2a05ac)[_0x090c('0x19')]();};}function respondWithResult(_0x1a4b20,_0xb8fa3f){_0xb8fa3f=_0xb8fa3f||0xc8;return function(_0x16d96a){if(_0x16d96a){return _0x1a4b20[_0x090c('0x18')](_0xb8fa3f)[_0x090c('0x1a')](_0x16d96a);}};}function respondWithFilteredResult(_0xded21a,_0x13eede){return function(_0x3f61b1){if(_0x3f61b1){var _0x12fcaf=_0x3f61b1[_0x090c('0x1b')],_0x53df00=_0x13eede['offset'],_0x4151b0=_0x13eede['offset']+_0x13eede['limit'],_0x26e513;if(_0x4151b0>=_0x12fcaf){_0x4151b0=_0x12fcaf;_0x26e513=0xc8;}else{_0x26e513=0xce;}_0xded21a['status'](_0x26e513);return _0xded21a[_0x090c('0x1c')](_0x090c('0x1d'),_0x53df00+'-'+_0x4151b0+'/'+_0x12fcaf)[_0x090c('0x1a')](_0x3f61b1);}return null;};}function patchUpdates(_0x51b2b8){return function(_0x5f539c){try{jsonpatch[_0x090c('0x1e')](_0x5f539c,_0x51b2b8,!![]);}catch(_0x5a676f){return BPromise['reject'](_0x5a676f);}return _0x5f539c[_0x090c('0x1f')]();};}function saveUpdates(_0x1afefa,_0x7e8177){return function(_0x438237){if(_0x438237){return _0x438237[_0x090c('0x20')](_0x1afefa)[_0x090c('0x21')](function(_0x104e38){return _0x104e38;});}return null;};}function removeEntity(_0x3aeb80,_0x49fcc9){return function(_0x369d09){if(_0x369d09){return _0x369d09[_0x090c('0x22')]()[_0x090c('0x21')](function(){_0x3aeb80[_0x090c('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5f07ba,_0x58ced3){return function(_0x55f008){if(!_0x55f008){_0x5f07ba[_0x090c('0x17')](0x194);}return _0x55f008;};}function handleError(_0x52e630,_0x41bfdd){_0x41bfdd=_0x41bfdd||0x1f4;return function(_0x45ff39){logger['error'](_0x45ff39[_0x090c('0x23')]);if(_0x45ff39[_0x090c('0x24')]){delete _0x45ff39[_0x090c('0x24')];}_0x52e630[_0x090c('0x18')](_0x41bfdd)[_0x090c('0x25')](_0x45ff39);};}exports[_0x090c('0x26')]=function(_0x3ebb16,_0x1b688e){var _0x3ac654={},_0x1ca1d4={},_0x1c0a8e={'count':0x0,'rows':[]};var _0x2cbc83=db[_0x090c('0x27')][_0x090c('0x28')];_0x1ca1d4['model']=_[_0x090c('0x29')](_[_0x090c('0x2a')](_0x2cbc83),[_0x090c('0x2b')]);_0x1ca1d4[_0x090c('0x2c')]=_[_0x090c('0x2a')](_0x3ebb16[_0x090c('0x2c')]);_0x1ca1d4[_0x090c('0x2d')]=_['intersection'](_0x1ca1d4[_0x090c('0x2e')],_0x1ca1d4[_0x090c('0x2c')]);_0x3ac654[_0x090c('0x2f')]=_[_0x090c('0x30')](_0x1ca1d4[_0x090c('0x2e')],qs[_0x090c('0x31')](_0x3ebb16[_0x090c('0x2c')]['fields']));_0x3ac654['attributes']=_0x3ac654[_0x090c('0x2f')][_0x090c('0x32')]?_0x3ac654[_0x090c('0x2f')]:_0x1ca1d4['model'];if(!_0x3ebb16['query'][_0x090c('0x33')](_0x090c('0x34'))){_0x3ac654[_0x090c('0x35')]=qs['limit'](_0x3ebb16[_0x090c('0x2c')]['limit']);_0x3ac654[_0x090c('0x36')]=qs[_0x090c('0x36')](_0x3ebb16[_0x090c('0x2c')][_0x090c('0x36')]);}_0x3ac654['order']=qs[_0x090c('0x37')](_0x3ebb16[_0x090c('0x2c')]['sort']);_0x3ac654[_0x090c('0x38')]=qs[_0x090c('0x2d')](_[_0x090c('0x39')](_0x3ebb16[_0x090c('0x2c')],_0x1ca1d4['filters']));if(_0x3ebb16[_0x090c('0x2c')][_0x090c('0x3a')]){_0x3ac654[_0x090c('0x38')]=_[_0x090c('0x3b')](_0x3ac654[_0x090c('0x38')],{'$or':_[_0x090c('0x3c')](_0x2cbc83,function(_0x20ad15){if(_0x20ad15[_0x090c('0x3d')][_0x090c('0x3e')]!==_0x090c('0x3f')){var _0xac4a38={};_0xac4a38[_0x20ad15['field']]={'$like':'%'+_0x3ebb16['query'][_0x090c('0x3a')]+'%'};return _0xac4a38;}})});}_0x3ac654=_[_0x090c('0x3b')]({},_0x3ac654,_0x3ebb16[_0x090c('0x40')]);var _0x915f4d={'where':_0x3ac654['where']};return db[_0x090c('0x27')]['count'](_0x915f4d)[_0x090c('0x21')](function(_0x295bff){_0x1c0a8e[_0x090c('0x1b')]=_0x295bff;if(_0x3ebb16[_0x090c('0x2c')][_0x090c('0x41')]){_0x3ac654[_0x090c('0x42')]=[{'all':!![]}];}return db['ScreenRecording'][_0x090c('0x43')](_0x3ac654);})[_0x090c('0x21')](function(_0x3d9ff4){_0x1c0a8e[_0x090c('0x44')]=_0x3d9ff4;return _0x1c0a8e;})[_0x090c('0x21')](respondWithFilteredResult(_0x1b688e,_0x3ac654))[_0x090c('0x45')](handleError(_0x1b688e,null));};exports[_0x090c('0x46')]=function(_0x3613d5,_0x2f1b30){var _0x32b9b4={'raw':![],'where':{'id':_0x3613d5[_0x090c('0x47')]['id']}},_0x48d3d1={};_0x48d3d1[_0x090c('0x2e')]=_['keys'](db[_0x090c('0x27')][_0x090c('0x28')]);_0x48d3d1['query']=_[_0x090c('0x2a')](_0x3613d5[_0x090c('0x2c')]);_0x48d3d1[_0x090c('0x2d')]=_[_0x090c('0x30')](_0x48d3d1[_0x090c('0x2e')],_0x48d3d1[_0x090c('0x2c')]);_0x32b9b4[_0x090c('0x2f')]=_[_0x090c('0x30')](_0x48d3d1[_0x090c('0x2e')],qs['fields'](_0x3613d5[_0x090c('0x2c')][_0x090c('0x31')]));_0x32b9b4['attributes']=_0x32b9b4['attributes'][_0x090c('0x32')]?_0x32b9b4['attributes']:_0x48d3d1[_0x090c('0x2e')];if(_0x3613d5[_0x090c('0x2c')][_0x090c('0x41')]){_0x32b9b4['include']=[{'all':!![]}];}_0x32b9b4=_[_0x090c('0x3b')]({},_0x32b9b4,_0x3613d5[_0x090c('0x40')]);return db[_0x090c('0x27')][_0x090c('0x48')](_0x32b9b4)[_0x090c('0x21')](handleEntityNotFound(_0x2f1b30,null))[_0x090c('0x21')](respondWithResult(_0x2f1b30,null))[_0x090c('0x45')](handleError(_0x2f1b30,null));};exports['create']=function(_0x34804e,_0x43e2e5){return db['ScreenRecording'][_0x090c('0x49')](_0x34804e[_0x090c('0x4a')],{})[_0x090c('0x21')](respondWithResult(_0x43e2e5,0xc9))[_0x090c('0x45')](handleError(_0x43e2e5,null));};exports[_0x090c('0x20')]=function(_0x22d145,_0x8dd5d3){if(_0x22d145[_0x090c('0x4a')]['id']){delete _0x22d145[_0x090c('0x4a')]['id'];}delete _0x22d145[_0x090c('0x4a')][_0x090c('0x4b')];delete _0x22d145[_0x090c('0x4a')]['createdAt'];delete _0x22d145[_0x090c('0x4a')][_0x090c('0x4c')];delete _0x22d145['body'][_0x090c('0x4d')];return db[_0x090c('0x27')][_0x090c('0x48')]({'where':{'id':_0x22d145['params']['id']}})[_0x090c('0x21')](handleEntityNotFound(_0x8dd5d3,null))[_0x090c('0x21')](saveUpdates(_0x22d145[_0x090c('0x4a')],null))['then'](respondWithResult(_0x8dd5d3,null))['catch'](handleError(_0x8dd5d3,null));};exports[_0x090c('0x22')]=function(_0x56cba1,_0x4887a2){return db[_0x090c('0x27')]['find']({'where':{'id':_0x56cba1['params']['id']}})[_0x090c('0x21')](handleEntityNotFound(_0x4887a2,null))[_0x090c('0x21')](removeEntity(_0x4887a2,null))[_0x090c('0x45')](handleError(_0x4887a2,null));};exports['describe']=function(_0x1b2bf1,_0xcda8da){return db[_0x090c('0x27')][_0x090c('0x4e')]()['then'](respondWithResult(_0xcda8da,null))[_0x090c('0x45')](handleError(_0xcda8da,null));};exports[_0x090c('0x4f')]=function(_0x53f094,_0x1fe3da,_0x1688f0){var _0x433f77=require(_0x090c('0x50'));var _0x4ffb33=![];var _0xd509fc={};if(_0x53f094[_0x090c('0x2c')][_0x090c('0x3d')]&&_0x53f094['query']['type']==='uniqueid'){_0xd509fc['uniqueid']=_0x53f094[_0x090c('0x47')]['id'];}else{_0xd509fc['id']=_0x53f094[_0x090c('0x47')]['id'];}return db['ScreenRecording'][_0x090c('0x48')]({'where':_0xd509fc,'attributes':['id',_0x090c('0x4d')],'raw':!![]})[_0x090c('0x21')](handleEntityNotFound(_0x1fe3da,null))['then'](function(_0x4fb172){if(_0x4fb172){var _0x5ab0b6=path[_0x090c('0x51')](config[_0x090c('0x52')],_0x090c('0x53'),_0x4fb172[_0x090c('0x4d')]);var _0x152814=util['format']('%s.cypher',_0x5ab0b6);if(fs[_0x090c('0x54')](_0x152814)){_0x4ffb33=!![];return _0x433f77[_0x090c('0x55')](_0x152814,_0x5ab0b6,config['secrets'][_0x090c('0x56')])[_0x090c('0x21')](function(){return _0x4fb172;});}return _0x4fb172;}})[_0x090c('0x21')](function(_0xe3a860){if(_0xe3a860){var _0x2bfaa8=path[_0x090c('0x51')](config[_0x090c('0x52')],'server/files/screen_recordings',_0xe3a860[_0x090c('0x4d')]);if(!fs[_0x090c('0x54')](_0x2bfaa8)){throw new db[(_0x090c('0x57'))][(_0x090c('0x58'))](_0x090c('0x59'));}if(_0xe3a860['filename']){return _0x1fe3da[_0x090c('0x4f')](_0x2bfaa8,_0xe3a860[_0x090c('0x5a')]+path['extname'](_0x2bfaa8),function(){if(_0x4ffb33){fs['unlink'](_0x2bfaa8);}});}else{return _0x1fe3da[_0x090c('0x4f')](_0x2bfaa8,function(_0x21f516){if(_0x4ffb33){fs[_0x090c('0x5b')](_0x2bfaa8);}});}}})[_0x090c('0x45')](function(_0x1836a3){if(_0x1836a3[_0x090c('0x5c')]==='ScreenRecording\x20not\x20found'){_0x1fe3da[_0x090c('0x18')](0x194)[_0x090c('0x25')]('Not\x20found');}else{return handleError(_0x1fe3da,null);}});};
\ No newline at end of file
+var _0x3db3=['eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','path','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','set','Content-Range','apply','reject','save','update','then','stack','name','send','index','ScreenRecording','model','keys','format','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','map','key','field','filter','merge','options','count','includeAll','include','findAll','rows','params','rawAttributes','catch','create','body','duration','closedAt','value','find','describe','download','../../components/encryptor','type','uniqueid','join','server/files/screen_recordings','%s.cypher','existsSync','decryptFile','recording','root','Sequelize','ValidationError','filename','extname','unlink','ScreenRecording\x20not\x20found','Not\x20found','html-pdf'];(function(_0x12b7ff,_0x59c1ae){var _0x38189d=function(_0x5491a0){while(--_0x5491a0){_0x12b7ff['push'](_0x12b7ff['shift']());}};_0x38189d(++_0x59c1ae);}(_0x3db3,0x11c));var _0x33db=function(_0x59911a,_0x1cdc83){_0x59911a=_0x59911a-0x0;var _0x7ce01a=_0x3db3[_0x59911a];return _0x7ce01a;};'use strict';var pdf=require(_0x33db('0x0'));var emlformat=require(_0x33db('0x1'));var rimraf=require(_0x33db('0x2'));var zipdir=require(_0x33db('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x33db('0x4'));var moment=require(_0x33db('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x33db('0x6'));var util=require(_0x33db('0x7'));var path=require(_0x33db('0x8'));var sox=require(_0x33db('0x9'));var csv=require(_0x33db('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x33db('0xb'));var squel=require(_0x33db('0xc'));var crypto=require('crypto');var jsforce=require(_0x33db('0xd'));var deskjs=require(_0x33db('0xe'));var toCsv=require(_0x33db('0xa'));var querystring=require(_0x33db('0xf'));var Papa=require(_0x33db('0x10'));var Redis=require(_0x33db('0x11'));var authService=require(_0x33db('0x12'));var qs=require(_0x33db('0x13'));var hardwareService=require(_0x33db('0x14'));var logger=require('../../config/logger')(_0x33db('0x15'));var utils=require(_0x33db('0x16'));var config=require(_0x33db('0x17'));var db=require(_0x33db('0x18'))['db'];function respondWithStatusCode(_0x4a2b8e,_0x454b33){_0x454b33=_0x454b33||0xcc;return function(_0x169947){if(_0x169947){return _0x4a2b8e[_0x33db('0x19')](_0x454b33);}return _0x4a2b8e[_0x33db('0x1a')](_0x454b33)[_0x33db('0x1b')]();};}function respondWithResult(_0x2d7f6e,_0x7b9e42){_0x7b9e42=_0x7b9e42||0xc8;return function(_0x27f61a){if(_0x27f61a){return _0x2d7f6e[_0x33db('0x1a')](_0x7b9e42)[_0x33db('0x1c')](_0x27f61a);}};}function respondWithFilteredResult(_0x939f69,_0x3a4263){return function(_0x4f482a){if(_0x4f482a){var _0x489117=_0x4f482a['count'],_0x5d6777=_0x3a4263[_0x33db('0x1d')],_0x43ce42=_0x3a4263['offset']+_0x3a4263['limit'],_0x185dc0;if(_0x43ce42>=_0x489117){_0x43ce42=_0x489117;_0x185dc0=0xc8;}else{_0x185dc0=0xce;}_0x939f69[_0x33db('0x1a')](_0x185dc0);return _0x939f69[_0x33db('0x1e')](_0x33db('0x1f'),_0x5d6777+'-'+_0x43ce42+'/'+_0x489117)[_0x33db('0x1c')](_0x4f482a);}return null;};}function patchUpdates(_0xa92715){return function(_0x573ef8){try{jsonpatch[_0x33db('0x20')](_0x573ef8,_0xa92715,!![]);}catch(_0x103e35){return BPromise[_0x33db('0x21')](_0x103e35);}return _0x573ef8[_0x33db('0x22')]();};}function saveUpdates(_0x31a6ac,_0x750cdc){return function(_0x4e2caf){if(_0x4e2caf){return _0x4e2caf[_0x33db('0x23')](_0x31a6ac)[_0x33db('0x24')](function(_0x36c3af){return _0x36c3af;});}return null;};}function removeEntity(_0x2b476d,_0x4e1d2e){return function(_0xf2bffa){if(_0xf2bffa){return _0xf2bffa['destroy']()['then'](function(){_0x2b476d[_0x33db('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x573de6,_0x465c45){return function(_0x16de11){if(!_0x16de11){_0x573de6[_0x33db('0x19')](0x194);}return _0x16de11;};}function handleError(_0x32c9ce,_0x7ac2e6){_0x7ac2e6=_0x7ac2e6||0x1f4;return function(_0x175794){logger['error'](_0x175794[_0x33db('0x25')]);if(_0x175794[_0x33db('0x26')]){delete _0x175794[_0x33db('0x26')];}_0x32c9ce[_0x33db('0x1a')](_0x7ac2e6)[_0x33db('0x27')](_0x175794);};}exports[_0x33db('0x28')]=function(_0xa5bd81,_0x45e012){var _0x3b9dd7={},_0x4c2cc6={},_0x145f10={'count':0x0,'rows':[]};var _0x67035f=db[_0x33db('0x29')]['rawAttributes'];_0x4c2cc6[_0x33db('0x2a')]=_['differenceBy'](_[_0x33db('0x2b')](_0x67035f),[_0x33db('0x2c')]);_0x4c2cc6[_0x33db('0x2d')]=_[_0x33db('0x2b')](_0xa5bd81[_0x33db('0x2d')]);_0x4c2cc6[_0x33db('0x2e')]=_[_0x33db('0x2f')](_0x4c2cc6['model'],_0x4c2cc6['query']);_0x3b9dd7[_0x33db('0x30')]=_['intersection'](_0x4c2cc6[_0x33db('0x2a')],qs[_0x33db('0x31')](_0xa5bd81['query']['fields']));_0x3b9dd7['attributes']=_0x3b9dd7['attributes'][_0x33db('0x32')]?_0x3b9dd7['attributes']:_0x4c2cc6[_0x33db('0x2a')];if(!_0xa5bd81['query'][_0x33db('0x33')](_0x33db('0x34'))){_0x3b9dd7[_0x33db('0x35')]=qs[_0x33db('0x35')](_0xa5bd81['query'][_0x33db('0x35')]);_0x3b9dd7[_0x33db('0x1d')]=qs[_0x33db('0x1d')](_0xa5bd81[_0x33db('0x2d')]['offset']);}_0x3b9dd7['order']=qs[_0x33db('0x36')](_0xa5bd81[_0x33db('0x2d')][_0x33db('0x36')]);_0x3b9dd7[_0x33db('0x37')]=qs[_0x33db('0x2e')](_['pick'](_0xa5bd81['query'],_0x4c2cc6[_0x33db('0x2e')]));if(_0xa5bd81[_0x33db('0x2d')]['filter']){_0x3b9dd7[_0x33db('0x37')]=_['merge'](_0x3b9dd7['where'],{'$or':_[_0x33db('0x38')](_0x67035f,function(_0xfbde55){if(_0xfbde55['type'][_0x33db('0x39')]!=='VIRTUAL'){var _0x26da02={};_0x26da02[_0xfbde55[_0x33db('0x3a')]]={'$like':'%'+_0xa5bd81[_0x33db('0x2d')][_0x33db('0x3b')]+'%'};return _0x26da02;}})});}_0x3b9dd7=_[_0x33db('0x3c')]({},_0x3b9dd7,_0xa5bd81[_0x33db('0x3d')]);var _0x4a46f9={'where':_0x3b9dd7['where']};return db[_0x33db('0x29')][_0x33db('0x3e')](_0x4a46f9)[_0x33db('0x24')](function(_0x2b9a71){_0x145f10['count']=_0x2b9a71;if(_0xa5bd81['query'][_0x33db('0x3f')]){_0x3b9dd7[_0x33db('0x40')]=[{'all':!![]}];}return db['ScreenRecording'][_0x33db('0x41')](_0x3b9dd7);})['then'](function(_0x1ee4d9){_0x145f10[_0x33db('0x42')]=_0x1ee4d9;return _0x145f10;})[_0x33db('0x24')](respondWithFilteredResult(_0x45e012,_0x3b9dd7))['catch'](handleError(_0x45e012,null));};exports['show']=function(_0x1e8269,_0x4321ec){var _0x3a7ab2={'raw':![],'where':{'id':_0x1e8269[_0x33db('0x43')]['id']}},_0x4a97e2={};_0x4a97e2['model']=_['keys'](db['ScreenRecording'][_0x33db('0x44')]);_0x4a97e2[_0x33db('0x2d')]=_['keys'](_0x1e8269['query']);_0x4a97e2[_0x33db('0x2e')]=_[_0x33db('0x2f')](_0x4a97e2['model'],_0x4a97e2['query']);_0x3a7ab2[_0x33db('0x30')]=_[_0x33db('0x2f')](_0x4a97e2[_0x33db('0x2a')],qs[_0x33db('0x31')](_0x1e8269[_0x33db('0x2d')][_0x33db('0x31')]));_0x3a7ab2[_0x33db('0x30')]=_0x3a7ab2[_0x33db('0x30')][_0x33db('0x32')]?_0x3a7ab2[_0x33db('0x30')]:_0x4a97e2[_0x33db('0x2a')];if(_0x1e8269[_0x33db('0x2d')][_0x33db('0x3f')]){_0x3a7ab2[_0x33db('0x40')]=[{'all':!![]}];}_0x3a7ab2=_[_0x33db('0x3c')]({},_0x3a7ab2,_0x1e8269[_0x33db('0x3d')]);return db[_0x33db('0x29')]['find'](_0x3a7ab2)[_0x33db('0x24')](handleEntityNotFound(_0x4321ec,null))['then'](respondWithResult(_0x4321ec,null))[_0x33db('0x45')](handleError(_0x4321ec,null));};exports[_0x33db('0x46')]=function(_0x2c1e4c,_0x1d4b11){return db[_0x33db('0x29')][_0x33db('0x46')](_0x2c1e4c[_0x33db('0x47')],{})['then'](respondWithResult(_0x1d4b11,0xc9))[_0x33db('0x45')](handleError(_0x1d4b11,null));};exports[_0x33db('0x23')]=function(_0x432c6b,_0x1fb8e5){if(_0x432c6b['body']['id']){delete _0x432c6b[_0x33db('0x47')]['id'];}delete _0x432c6b[_0x33db('0x47')][_0x33db('0x48')];delete _0x432c6b[_0x33db('0x47')]['createdAt'];delete _0x432c6b['body'][_0x33db('0x49')];delete _0x432c6b['body'][_0x33db('0x4a')];return db[_0x33db('0x29')][_0x33db('0x4b')]({'where':{'id':_0x432c6b[_0x33db('0x43')]['id']}})['then'](handleEntityNotFound(_0x1fb8e5,null))['then'](saveUpdates(_0x432c6b[_0x33db('0x47')],null))[_0x33db('0x24')](respondWithResult(_0x1fb8e5,null))[_0x33db('0x45')](handleError(_0x1fb8e5,null));};exports['destroy']=function(_0x549736,_0x3c02a5){return db[_0x33db('0x29')][_0x33db('0x4b')]({'where':{'id':_0x549736['params']['id']}})[_0x33db('0x24')](handleEntityNotFound(_0x3c02a5,null))[_0x33db('0x24')](removeEntity(_0x3c02a5,null))['catch'](handleError(_0x3c02a5,null));};exports[_0x33db('0x4c')]=function(_0x400dd7,_0x28129c){return db[_0x33db('0x29')][_0x33db('0x4c')]()['then'](respondWithResult(_0x28129c,null))[_0x33db('0x45')](handleError(_0x28129c,null));};exports[_0x33db('0x4d')]=function(_0x194d43,_0x2860ce,_0x222698){var _0x3c77d1=require(_0x33db('0x4e'));var _0x33bef6=![];var _0xf7242d={};if(_0x194d43[_0x33db('0x2d')][_0x33db('0x4f')]&&_0x194d43[_0x33db('0x2d')][_0x33db('0x4f')]==='uniqueid'){_0xf7242d[_0x33db('0x50')]=_0x194d43[_0x33db('0x43')]['id'];}else{_0xf7242d['id']=_0x194d43[_0x33db('0x43')]['id'];}return db[_0x33db('0x29')][_0x33db('0x4b')]({'where':_0xf7242d,'attributes':['id',_0x33db('0x4a')],'raw':!![]})[_0x33db('0x24')](handleEntityNotFound(_0x2860ce,null))[_0x33db('0x24')](function(_0x295d2e){if(_0x295d2e){var _0x8af6d4=path[_0x33db('0x51')](config['root'],_0x33db('0x52'),_0x295d2e[_0x33db('0x4a')]);var _0x54c7da=util[_0x33db('0x2c')](_0x33db('0x53'),_0x8af6d4);if(fs[_0x33db('0x54')](_0x54c7da)){_0x33bef6=!![];return _0x3c77d1[_0x33db('0x55')](_0x54c7da,_0x8af6d4,config['secrets'][_0x33db('0x56')])[_0x33db('0x24')](function(){return _0x295d2e;});}return _0x295d2e;}})[_0x33db('0x24')](function(_0x4cbad2){if(_0x4cbad2){var _0x53bdd6=path[_0x33db('0x51')](config[_0x33db('0x57')],_0x33db('0x52'),_0x4cbad2['value']);if(!fs[_0x33db('0x54')](_0x53bdd6)){throw new db[(_0x33db('0x58'))][(_0x33db('0x59'))]('ScreenRecording\x20not\x20found');}if(_0x4cbad2[_0x33db('0x5a')]){return _0x2860ce['download'](_0x53bdd6,_0x4cbad2[_0x33db('0x5a')]+path[_0x33db('0x5b')](_0x53bdd6),function(){if(_0x33bef6){fs['unlink'](_0x53bdd6);}});}else{return _0x2860ce['download'](_0x53bdd6,function(_0x1b0e3c){if(_0x33bef6){fs[_0x33db('0x5c')](_0x53bdd6);}});}}})[_0x33db('0x45')](function(_0x2fedc4){if(_0x2fedc4['message']===_0x33db('0x5d')){_0x2860ce[_0x33db('0x1a')](0x194)[_0x33db('0x27')](_0x33db('0x5e'));}else{return handleError(_0x2860ce,null);}});};
\ No newline at end of file
index da56005..f0cb67d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c61=['exports','screen_recordings','interactionid','isNil','value','join','root','log','catch','lodash','util','../../config/logger','api','moment','bluebird','request-promise','rimraf','../../config/environment'];(function(_0x3a951e,_0x35eade){var _0x142e63=function(_0x377c54){while(--_0x377c54){_0x3a951e['push'](_0x3a951e['shift']());}};_0x142e63(++_0x35eade);}(_0x1c61,0xf3));var _0x11c6=function(_0x346737,_0x3e6081){_0x346737=_0x346737-0x0;var _0x1ade2e=_0x1c61[_0x346737];return _0x1ade2e;};'use strict';var _=require(_0x11c6('0x0'));var util=require(_0x11c6('0x1'));var logger=require(_0x11c6('0x2'))(_0x11c6('0x3'));var moment=require(_0x11c6('0x4'));var BPromise=require(_0x11c6('0x5'));var rp=require(_0x11c6('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0x11c6('0x7'));var config=require(_0x11c6('0x8'));var attributes=require('./screenRecording.attributes');module[_0x11c6('0x9')]=function(_0x31ad0c,_0x429481){return _0x31ad0c['define']('ScreenRecording',attributes,{'tableName':_0x11c6('0xa'),'paranoid':![],'indexes':[{'name':'interactionid','fields':[_0x11c6('0xb')]}],'timestamps':!![],'hooks':{'afterDestroy':function(_0x2579f7,_0x447b94,_0x456b99){return new BPromise(function(_0x570a89,_0x563ea0){if(!_[_0x11c6('0xc')](_0x2579f7[_0x11c6('0xd')])){var _0x3c57b0=path[_0x11c6('0xe')](config[_0x11c6('0xf')],'server','files',_0x11c6('0xa'),_0x2579f7[_0x11c6('0xd')]);if(fs['existsSync'](_0x3c57b0)){rimraf(_0x3c57b0,function(_0x596c87){if(_0x596c87){console[_0x11c6('0x10')](_0x596c87);}});}}_0x570a89();})[_0x11c6('0x11')](function(_0x5d5686){BPromise['resolve']();})['finally'](function(){_0x456b99();});}}});};
\ No newline at end of file
+var _0x16b0=['isNil','join','root','server','value','log','catch','resolve','util','api','bluebird','path','rimraf','../../config/environment','./screenRecording.attributes','define','screen_recordings','interactionid'];(function(_0x3a570b,_0x1cd75f){var _0x5f2bb7=function(_0x49ff3e){while(--_0x49ff3e){_0x3a570b['push'](_0x3a570b['shift']());}};_0x5f2bb7(++_0x1cd75f);}(_0x16b0,0x116));var _0x016b=function(_0x4ba2d5,_0x300175){_0x4ba2d5=_0x4ba2d5-0x0;var _0x1139b7=_0x16b0[_0x4ba2d5];return _0x1139b7;};'use strict';var _=require('lodash');var util=require(_0x016b('0x0'));var logger=require('../../config/logger')(_0x016b('0x1'));var moment=require('moment');var BPromise=require(_0x016b('0x2'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x016b('0x3'));var rimraf=require(_0x016b('0x4'));var config=require(_0x016b('0x5'));var attributes=require(_0x016b('0x6'));module['exports']=function(_0x572bd9,_0x192258){return _0x572bd9[_0x016b('0x7')]('ScreenRecording',attributes,{'tableName':_0x016b('0x8'),'paranoid':![],'indexes':[{'name':_0x016b('0x9'),'fields':['interactionid']}],'timestamps':!![],'hooks':{'afterDestroy':function(_0x43069a,_0x5cf3cc,_0x168ac4){return new BPromise(function(_0x4cd50c,_0x1245a7){if(!_[_0x016b('0xa')](_0x43069a['value'])){var _0x39ff45=path[_0x016b('0xb')](config[_0x016b('0xc')],_0x016b('0xd'),'files','screen_recordings',_0x43069a[_0x016b('0xe')]);if(fs['existsSync'](_0x39ff45)){rimraf(_0x39ff45,function(_0x47da04){if(_0x47da04){console[_0x016b('0xf')](_0x47da04);}});}}_0x4cd50c();})[_0x016b('0x10')](function(_0x2b1cef){BPromise[_0x016b('0x11')]();})['finally'](function(){_0x168ac4();});}}});};
\ No newline at end of file
index d5743b2..c794dca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x84ab=['message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','then','info','ScreenRecording,\x20%s,\x20%s','request\x20sent','stringify','error','code'];(function(_0x3006db,_0x5d2a9b){var _0x2ecb92=function(_0x56621f){while(--_0x56621f){_0x3006db['push'](_0x3006db['shift']());}};_0x2ecb92(++_0x5d2a9b);}(_0x84ab,0x12f));var _0xb84a=function(_0x4bb581,_0x6f7037){_0x4bb581=_0x4bb581-0x0;var _0x316bf5=_0x84ab[_0x4bb581];return _0x316bf5;};'use strict';var _=require(_0xb84a('0x0'));var util=require(_0xb84a('0x1'));var moment=require(_0xb84a('0x2'));var BPromise=require(_0xb84a('0x3'));var rs=require(_0xb84a('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xb84a('0x5'))['db'];var utils=require(_0xb84a('0x6'));var logger=require('../../config/logger')(_0xb84a('0x7'));var config=require(_0xb84a('0x8'));var jayson=require(_0xb84a('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x4dc496,_0xd445b5,_0x4fac4d){return new BPromise(function(_0x3e9086,_0x8d9dbe){return client['request'](_0x4dc496,_0x4fac4d)[_0xb84a('0xa')](function(_0x525cb7){logger[_0xb84a('0xb')](_0xb84a('0xc'),_0xd445b5,_0xb84a('0xd'));logger['debug']('ScreenRecording,\x20%s,\x20%s,\x20%s',_0xd445b5,'request\x20sent',JSON[_0xb84a('0xe')](_0x525cb7));if(_0x525cb7[_0xb84a('0xf')]){if(_0x525cb7[_0xb84a('0xf')][_0xb84a('0x10')]===0x1f4){logger[_0xb84a('0xf')]('ScreenRecording,\x20%s,\x20%s',_0xd445b5,_0x525cb7[_0xb84a('0xf')][_0xb84a('0x11')]);return _0x8d9dbe(_0x525cb7[_0xb84a('0xf')][_0xb84a('0x11')]);}logger[_0xb84a('0xf')](_0xb84a('0xc'),_0xd445b5,_0x525cb7[_0xb84a('0xf')][_0xb84a('0x11')]);return _0x3e9086(_0x525cb7[_0xb84a('0xf')][_0xb84a('0x11')]);}else{logger[_0xb84a('0xb')](_0xb84a('0xc'),_0xd445b5,'request\x20sent');_0x3e9086(_0x525cb7[_0xb84a('0x12')][_0xb84a('0x11')]);}})[_0xb84a('0x13')](function(_0x3c0b54){logger[_0xb84a('0xf')](_0xb84a('0xc'),_0xd445b5,_0x3c0b54);_0x8d9dbe(_0x3c0b54);});});}
\ No newline at end of file
+var _0xe0ae=['debug','ScreenRecording,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','catch','moment','bluebird','ioredis','../../config/utils','../../config/logger','../../config/environment','http','info','ScreenRecording,\x20%s,\x20%s'];(function(_0x56fe98,_0x43dc16){var _0x212f4f=function(_0xc3427d){while(--_0xc3427d){_0x56fe98['push'](_0x56fe98['shift']());}};_0x212f4f(++_0x43dc16);}(_0xe0ae,0xa1));var _0xee0a=function(_0x2112d4,_0x3c863c){_0x2112d4=_0x2112d4-0x0;var _0x434972=_0xe0ae[_0x2112d4];return _0x434972;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xee0a('0x0'));var BPromise=require(_0xee0a('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xee0a('0x2'));var db=require('../../mysqldb')['db'];var utils=require(_0xee0a('0x3'));var logger=require(_0xee0a('0x4'))('rpc');var config=require(_0xee0a('0x5'));var jayson=require('jayson/promise');var client=jayson['client'][_0xee0a('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x1c5071,_0x347cb3,_0x344355){return new BPromise(function(_0x5e6d2e,_0x2296b9){return client['request'](_0x1c5071,_0x344355)['then'](function(_0x1f9d42){logger[_0xee0a('0x7')](_0xee0a('0x8'),_0x347cb3,'request\x20sent');logger[_0xee0a('0x9')](_0xee0a('0xa'),_0x347cb3,'request\x20sent',JSON[_0xee0a('0xb')](_0x1f9d42));if(_0x1f9d42['error']){if(_0x1f9d42[_0xee0a('0xc')][_0xee0a('0xd')]===0x1f4){logger['error'](_0xee0a('0x8'),_0x347cb3,_0x1f9d42['error'][_0xee0a('0xe')]);return _0x2296b9(_0x1f9d42[_0xee0a('0xc')]['message']);}logger['error'](_0xee0a('0x8'),_0x347cb3,_0x1f9d42[_0xee0a('0xc')][_0xee0a('0xe')]);return _0x5e6d2e(_0x1f9d42[_0xee0a('0xc')][_0xee0a('0xe')]);}else{logger['info'](_0xee0a('0x8'),_0x347cb3,_0xee0a('0xf'));_0x5e6d2e(_0x1f9d42['result'][_0xee0a('0xe')]);}})[_0xee0a('0x10')](function(_0x1bc8e1){logger[_0xee0a('0xc')]('ScreenRecording,\x20%s,\x20%s',_0x347cb3,_0x1bc8e1);_0x2296b9(_0x1bc8e1);});});}
\ No newline at end of file
index 0a82933..870a9e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b42=['addLogoLogin','preferred','addPreferred','put','/:id','update','exports','multer','util','connect-timeout','express','../../components/interaction/service','../../config/environment','./setting.controller','get','isAuthenticated','index','show','/:id/logo','getLogo','gdpr','/:id/preferred','getPreferred','diskStorage','join','root','server/files/images/logos/','format','%s%s','logo','extname','originalname','post','single','file','addLogo','logologin','/:id/logo_login'];(function(_0x6e8070,_0x4b83a3){var _0x17f9a6=function(_0x3ee0f1){while(--_0x3ee0f1){_0x6e8070['push'](_0x6e8070['shift']());}};_0x17f9a6(++_0x4b83a3);}(_0x0b42,0x1a9));var _0x20b4=function(_0x24023d,_0x27e755){_0x24023d=_0x24023d-0x0;var _0x4f7dff=_0x0b42[_0x24023d];return _0x4f7dff;};'use strict';var multer=require(_0x20b4('0x0'));var util=require(_0x20b4('0x1'));var path=require('path');var timeout=require(_0x20b4('0x2'));var express=require(_0x20b4('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x20b4('0x4'));var config=require(_0x20b4('0x5'));var controller=require(_0x20b4('0x6'));router[_0x20b4('0x7')]('/',auth[_0x20b4('0x8')](),controller[_0x20b4('0x9')]);router[_0x20b4('0x7')]('/:id',controller[_0x20b4('0xa')]);router[_0x20b4('0x7')](_0x20b4('0xb'),controller[_0x20b4('0xc')]);router['get']('/:id/logo_login',controller['getLogoLogin']);router[_0x20b4('0x7')]('/:id/gdpr',controller[_0x20b4('0xd')]);router[_0x20b4('0x7')](_0x20b4('0xe'),controller[_0x20b4('0xf')]);var upload=multer({'storage':multer[_0x20b4('0x10')]({'destination':function(_0x38af58,_0x56d44f,_0x5c5e29){_0x5c5e29(null,path[_0x20b4('0x11')](config[_0x20b4('0x12')],_0x20b4('0x13')));},'filename':function(_0x35bf0b,_0x3529ab,_0x29a1b9){_0x29a1b9(null,util[_0x20b4('0x14')](_0x20b4('0x15'),_0x20b4('0x16'),path[_0x20b4('0x17')](_0x3529ab[_0x20b4('0x18')])));}})});router[_0x20b4('0x19')](_0x20b4('0xb'),upload[_0x20b4('0x1a')](_0x20b4('0x1b')),controller[_0x20b4('0x1c')]);var upload=multer({'storage':multer[_0x20b4('0x10')]({'destination':function(_0x43d1c1,_0x3f14ec,_0x39ef9e){_0x39ef9e(null,path[_0x20b4('0x11')](config[_0x20b4('0x12')],_0x20b4('0x13')));},'filename':function(_0x592f63,_0x315432,_0x40e050){_0x40e050(null,util['format']('%s%s',_0x20b4('0x1d'),path[_0x20b4('0x17')](_0x315432[_0x20b4('0x18')])));}})});router['post'](_0x20b4('0x1e'),upload[_0x20b4('0x1a')](_0x20b4('0x1b')),controller[_0x20b4('0x1f')]);var upload=multer({'storage':multer[_0x20b4('0x10')]({'destination':function(_0x326545,_0x37f993,_0x83848){_0x83848(null,path[_0x20b4('0x11')](config[_0x20b4('0x12')],_0x20b4('0x13')));},'filename':function(_0x159bd3,_0x88034a,_0x49e995){_0x49e995(null,util['format']('%s%s',_0x20b4('0x20'),path[_0x20b4('0x17')](_0x88034a[_0x20b4('0x18')])));}})});router[_0x20b4('0x19')](_0x20b4('0xe'),upload[_0x20b4('0x1a')]('file'),controller[_0x20b4('0x21')]);router[_0x20b4('0x22')](_0x20b4('0x23'),auth['isAuthenticated'](),controller[_0x20b4('0x24')]);module[_0x20b4('0x25')]=router;
\ No newline at end of file
+var _0x741f=['join','root','server/files/images/logos/','format','%s%s','logo','extname','originalname','post','single','file','addLogo','logologin','addLogoLogin','preferred','/:id/preferred','addPreferred','put','update','exports','util','path','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','/:id','show','getLogo','/:id/logo_login','/:id/gdpr','getPreferred','diskStorage'];(function(_0x32f91b,_0x460016){var _0x3ee8f3=function(_0x39b27d){while(--_0x39b27d){_0x32f91b['push'](_0x32f91b['shift']());}};_0x3ee8f3(++_0x460016);}(_0x741f,0x1ac));var _0xf741=function(_0x336025,_0x390bbc){_0x336025=_0x336025-0x0;var _0x53e5ea=_0x741f[_0x336025];return _0x53e5ea;};'use strict';var multer=require('multer');var util=require(_0xf741('0x0'));var path=require(_0xf741('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require(_0xf741('0x2'));var interaction=require(_0xf741('0x3'));var config=require(_0xf741('0x4'));var controller=require('./setting.controller');router[_0xf741('0x5')]('/',auth[_0xf741('0x6')](),controller['index']);router[_0xf741('0x5')](_0xf741('0x7'),controller[_0xf741('0x8')]);router['get']('/:id/logo',controller[_0xf741('0x9')]);router[_0xf741('0x5')](_0xf741('0xa'),controller['getLogoLogin']);router[_0xf741('0x5')](_0xf741('0xb'),controller['gdpr']);router['get']('/:id/preferred',controller[_0xf741('0xc')]);var upload=multer({'storage':multer[_0xf741('0xd')]({'destination':function(_0x5680d8,_0x3c2cfd,_0x579237){_0x579237(null,path[_0xf741('0xe')](config[_0xf741('0xf')],_0xf741('0x10')));},'filename':function(_0x34474b,_0x5ebcb1,_0x3e0ba9){_0x3e0ba9(null,util[_0xf741('0x11')](_0xf741('0x12'),_0xf741('0x13'),path[_0xf741('0x14')](_0x5ebcb1[_0xf741('0x15')])));}})});router[_0xf741('0x16')]('/:id/logo',upload[_0xf741('0x17')](_0xf741('0x18')),controller[_0xf741('0x19')]);var upload=multer({'storage':multer[_0xf741('0xd')]({'destination':function(_0x50b5f1,_0x5b9b8e,_0x18b7e7){_0x18b7e7(null,path['join'](config[_0xf741('0xf')],_0xf741('0x10')));},'filename':function(_0xec78d0,_0x35d685,_0x574864){_0x574864(null,util[_0xf741('0x11')]('%s%s',_0xf741('0x1a'),path['extname'](_0x35d685[_0xf741('0x15')])));}})});router['post'](_0xf741('0xa'),upload[_0xf741('0x17')](_0xf741('0x18')),controller[_0xf741('0x1b')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x353547,_0x4d1a86,_0x5dc8f5){_0x5dc8f5(null,path[_0xf741('0xe')](config[_0xf741('0xf')],_0xf741('0x10')));},'filename':function(_0x3cbe84,_0x33c653,_0x1c5c09){_0x1c5c09(null,util[_0xf741('0x11')](_0xf741('0x12'),_0xf741('0x1c'),path['extname'](_0x33c653[_0xf741('0x15')])));}})});router[_0xf741('0x16')](_0xf741('0x1d'),upload[_0xf741('0x17')]('file'),controller[_0xf741('0x1e')]);router[_0xf741('0x1f')]('/:id',auth['isAuthenticated'](),controller[_0xf741('0x20')]);module[_0xf741('0x21')]=router;
\ No newline at end of file
index 112e7ed..a79b22c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf45e=['STRING','/var/opt/motion2/server/files/sounds/converted','BOOLEAN','https://www.xcally.com/bar/phonebar/autoupdater.xml','alternate','sequelize','INTEGER','min_mailbox'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xf45e,0x115));var _0xef45=function(_0x2000a0,_0x527ccf){_0x2000a0=_0x2000a0-0x0;var _0x18dacc=_0xf45e[_0x2000a0];return _0x18dacc;};'use strict';var Sequelize=require(_0xef45('0x0'));module['exports']={'min_internal':{'type':Sequelize[_0xef45('0x1')](0xb),'unique':'min_internal','defaultValue':0x3e8},'min_mailbox':{'type':Sequelize[_0xef45('0x1')](0xb),'unique':_0xef45('0x2'),'defaultValue':0x3e8},'agi_port':{'type':Sequelize[_0xef45('0x1')](0xb),'defaultValue':0x11dd},'soundPath':{'type':Sequelize[_0xef45('0x3')],'defaultValue':_0xef45('0x4')},'logo':{'type':Sequelize[_0xef45('0x3')]},'defaultLogo':{'type':Sequelize[_0xef45('0x5')],'defaultValue':!![]},'loginLogo':{'type':Sequelize[_0xef45('0x3')]},'defaultLoginLogo':{'type':Sequelize[_0xef45('0x5')],'defaultValue':!![]},'headerWhiteLabel':{'type':Sequelize[_0xef45('0x3')]},'defaultHeaderWhiteLabel':{'type':Sequelize[_0xef45('0x5')],'defaultValue':!![]},'securePassword':{'type':Sequelize[_0xef45('0x5')],'defaultValue':!![]},'firstSetup':{'type':Sequelize[_0xef45('0x5')],'defaultValue':!![]},'stunaddr':{'type':Sequelize[_0xef45('0x3')]},'turnaddr':{'type':Sequelize[_0xef45('0x3')]},'turnusername':{'type':Sequelize[_0xef45('0x3')]},'turnpassword':{'type':Sequelize[_0xef45('0x3')]},'pageTitle':{'type':Sequelize[_0xef45('0x3')]},'defaultPageTitle':{'type':Sequelize[_0xef45('0x5')],'defaultValue':!![]},'callRecordingEncryption':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'passwordExpiresDays':{'type':Sequelize[_0xef45('0x1')](0xb),'defaultValue':0x5a},'phoneBarAutoUpdater':{'type':Sequelize[_0xef45('0x5')],'defaultValue':!![]},'phoneBarAutoUpdaterUrl':{'type':Sequelize[_0xef45('0x3')],'defaultValue':_0xef45('0x6')},'enableEmailPreview':{'type':Sequelize[_0xef45('0x5')],'defaultValue':![]},'split':{'type':Sequelize[_0xef45('0x5')],'defaultValue':!![]},'splitSizeCsv':{'type':Sequelize['INTEGER'],'defaultValue':0x1388},'splitSizePdf':{'type':Sequelize[_0xef45('0x1')],'defaultValue':0x1388},'splitSizeXlsx':{'type':Sequelize[_0xef45('0x1')],'defaultValue':0x1388},'messagesAlignment':{'type':Sequelize[_0xef45('0x3')],'defaultValue':_0xef45('0x7')},'chatTimeout':{'type':Sequelize[_0xef45('0x1')],'defaultValue':0x1e},'phoneBarRememberMeEnabled':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'preferred':{'type':Sequelize['STRING']},'defaultPreferred':{'type':Sequelize[_0xef45('0x5')],'defaultValue':!![]},'rtlSupport':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'defaultScreenRecordingPath':{'type':Sequelize[_0xef45('0x3')]},'allowedLoginAttempts':{'type':Sequelize[_0xef45('0x1')],'defaultValue':0x5},'blockDuration':{'type':Sequelize[_0xef45('0x1')],'defaultValue':0xa}};
\ No newline at end of file
+var _0x928c=['min_internal','min_mailbox','STRING','/var/opt/motion2/server/files/sounds/converted','BOOLEAN','https://www.xcally.com/bar/phonebar/autoupdater.xml','alternate','INTEGER'];(function(_0x2e0f6e,_0x180951){var _0x1b6d68=function(_0x194a57){while(--_0x194a57){_0x2e0f6e['push'](_0x2e0f6e['shift']());}};_0x1b6d68(++_0x180951);}(_0x928c,0x17f));var _0xc928=function(_0x29eebf,_0x1eff81){_0x29eebf=_0x29eebf-0x0;var _0x1ba692=_0x928c[_0x29eebf];return _0x1ba692;};'use strict';var Sequelize=require('sequelize');module['exports']={'min_internal':{'type':Sequelize[_0xc928('0x0')](0xb),'unique':_0xc928('0x1'),'defaultValue':0x3e8},'min_mailbox':{'type':Sequelize['INTEGER'](0xb),'unique':_0xc928('0x2'),'defaultValue':0x3e8},'agi_port':{'type':Sequelize[_0xc928('0x0')](0xb),'defaultValue':0x11dd},'soundPath':{'type':Sequelize[_0xc928('0x3')],'defaultValue':_0xc928('0x4')},'logo':{'type':Sequelize[_0xc928('0x3')]},'defaultLogo':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'loginLogo':{'type':Sequelize[_0xc928('0x3')]},'defaultLoginLogo':{'type':Sequelize[_0xc928('0x5')],'defaultValue':!![]},'headerWhiteLabel':{'type':Sequelize[_0xc928('0x3')]},'defaultHeaderWhiteLabel':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'securePassword':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'firstSetup':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'stunaddr':{'type':Sequelize[_0xc928('0x3')]},'turnaddr':{'type':Sequelize[_0xc928('0x3')]},'turnusername':{'type':Sequelize[_0xc928('0x3')]},'turnpassword':{'type':Sequelize[_0xc928('0x3')]},'pageTitle':{'type':Sequelize[_0xc928('0x3')]},'defaultPageTitle':{'type':Sequelize[_0xc928('0x5')],'defaultValue':!![]},'callRecordingEncryption':{'type':Sequelize[_0xc928('0x5')],'defaultValue':![]},'passwordExpiresDays':{'type':Sequelize[_0xc928('0x0')](0xb),'defaultValue':0x5a},'phoneBarAutoUpdater':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'phoneBarAutoUpdaterUrl':{'type':Sequelize[_0xc928('0x3')],'defaultValue':_0xc928('0x6')},'enableEmailPreview':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'split':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'splitSizeCsv':{'type':Sequelize[_0xc928('0x0')],'defaultValue':0x1388},'splitSizePdf':{'type':Sequelize['INTEGER'],'defaultValue':0x1388},'splitSizeXlsx':{'type':Sequelize[_0xc928('0x0')],'defaultValue':0x1388},'messagesAlignment':{'type':Sequelize['STRING'],'defaultValue':_0xc928('0x7')},'chatTimeout':{'type':Sequelize[_0xc928('0x0')],'defaultValue':0x1e},'phoneBarRememberMeEnabled':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'preferred':{'type':Sequelize[_0xc928('0x3')]},'defaultPreferred':{'type':Sequelize[_0xc928('0x5')],'defaultValue':!![]},'rtlSupport':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'defaultScreenRecordingPath':{'type':Sequelize[_0xc928('0x3')]},'allowedLoginAttempts':{'type':Sequelize[_0xc928('0x0')],'defaultValue':0x5},'blockDuration':{'type':Sequelize[_0xc928('0x0')],'defaultValue':0xa}};
\ No newline at end of file
index 98565de..d1f058e 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(_0x3c0b02,_0x29e080){var _0x1d8a71=function(_0x1c0e66){while(--_0x1c0e66){_0x3c0b02['push'](_0x3c0b02['shift']());}};_0x1d8a71(++_0x29e080);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0xa9e0[_0x2f5ac5];return _0x37c9a8;};'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(_0x3612e9,_0x1e2cde){var _0x148aaa=function(_0x27389a){while(--_0x27389a){_0x3612e9['push'](_0x3612e9['shift']());}};_0x148aaa(++_0x1e2cde);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4baae2,_0x487ab6){_0x4baae2=_0x4baae2-0x0;var _0x1a2285=_0xa9e0[_0x4baae2];return _0x1a2285;};'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 fdbc3e4..42d1b6e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9210=['bluebird','request-promise','path','rimraf','../../config/environment','./setting.attributes','exports','define','lodash','util','api','moment'];(function(_0x1bf8f5,_0x28f62c){var _0x36a54e=function(_0x43ba61){while(--_0x43ba61){_0x1bf8f5['push'](_0x1bf8f5['shift']());}};_0x36a54e(++_0x28f62c);}(_0x9210,0x1a0));var _0x0921=function(_0x35d4c0,_0x2993fb){_0x35d4c0=_0x35d4c0-0x0;var _0x2324ed=_0x9210[_0x35d4c0];return _0x2324ed;};'use strict';var _=require(_0x0921('0x0'));var util=require(_0x0921('0x1'));var logger=require('../../config/logger')(_0x0921('0x2'));var moment=require(_0x0921('0x3'));var BPromise=require(_0x0921('0x4'));var rp=require(_0x0921('0x5'));var fs=require('fs');var path=require(_0x0921('0x6'));var rimraf=require(_0x0921('0x7'));var config=require(_0x0921('0x8'));var attributes=require(_0x0921('0x9'));module[_0x0921('0xa')]=function(_0x1e58fb,_0x151f9b){return _0x1e58fb[_0x0921('0xb')]('Setting',attributes,{'tableName':'settings','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xaf35=['path','rimraf','../../config/environment','./setting.attributes','exports','Setting','lodash','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x5ce3c8,_0x2503bd){var _0xa76867=function(_0x52815e){while(--_0x52815e){_0x5ce3c8['push'](_0x5ce3c8['shift']());}};_0xa76867(++_0x2503bd);}(_0xaf35,0x1c2));var _0x5af3=function(_0x36ed48,_0x1ee0d4){_0x36ed48=_0x36ed48-0x0;var _0x51c63a=_0xaf35[_0x36ed48];return _0x51c63a;};'use strict';var _=require(_0x5af3('0x0'));var util=require('util');var logger=require(_0x5af3('0x1'))(_0x5af3('0x2'));var moment=require(_0x5af3('0x3'));var BPromise=require(_0x5af3('0x4'));var rp=require(_0x5af3('0x5'));var fs=require('fs');var path=require(_0x5af3('0x6'));var rimraf=require(_0x5af3('0x7'));var config=require(_0x5af3('0x8'));var attributes=require(_0x5af3('0x9'));module[_0x5af3('0xa')]=function(_0x3efd7f,_0x257e13){return _0x3efd7f['define'](_0x5af3('0xb'),attributes,{'tableName':'settings','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index abea1f8..db2e134 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6496=['ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','info','Setting,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','catch','lodash','moment','bluebird'];(function(_0x11e01e,_0x4255e2){var _0x2fb56c=function(_0x483296){while(--_0x483296){_0x11e01e['push'](_0x11e01e['shift']());}};_0x2fb56c(++_0x4255e2);}(_0x6496,0x129));var _0x6649=function(_0x2e24d0,_0x34db1d){_0x2e24d0=_0x2e24d0-0x0;var _0x5aec4a=_0x6496[_0x2e24d0];return _0x5aec4a;};'use strict';var _=require(_0x6649('0x0'));var util=require('util');var moment=require(_0x6649('0x1'));var BPromise=require(_0x6649('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x6649('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x6649('0x4'));var logger=require(_0x6649('0x5'))('rpc');var config=require(_0x6649('0x6'));var jayson=require(_0x6649('0x7'));var client=jayson[_0x6649('0x8')][_0x6649('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3365c7,_0x17695a,_0x279613){return new BPromise(function(_0x2a71e6,_0x38c9fc){return client[_0x6649('0xa')](_0x3365c7,_0x279613)['then'](function(_0x14043f){logger[_0x6649('0xb')](_0x6649('0xc'),_0x17695a,_0x6649('0xd'));logger[_0x6649('0xe')]('Setting,\x20%s,\x20%s,\x20%s',_0x17695a,'request\x20sent',JSON[_0x6649('0xf')](_0x14043f));if(_0x14043f[_0x6649('0x10')]){if(_0x14043f['error'][_0x6649('0x11')]===0x1f4){logger[_0x6649('0x10')](_0x6649('0xc'),_0x17695a,_0x14043f[_0x6649('0x10')]['message']);return _0x38c9fc(_0x14043f['error']['message']);}logger[_0x6649('0x10')]('Setting,\x20%s,\x20%s',_0x17695a,_0x14043f['error']['message']);return _0x2a71e6(_0x14043f[_0x6649('0x10')]['message']);}else{logger['info'](_0x6649('0xc'),_0x17695a,'request\x20sent');_0x2a71e6(_0x14043f['result'][_0x6649('0x12')]);}})[_0x6649('0x13')](function(_0x3c0f18){logger[_0x6649('0x10')](_0x6649('0xc'),_0x17695a,_0x3c0f18);_0x38c9fc(_0x3c0f18);});});}
\ No newline at end of file
+var _0xdcee=['debug','Setting,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','util','moment','randomstring','ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','Setting,\x20%s,\x20%s','request\x20sent'];(function(_0x303830,_0x265ce1){var _0x42e606=function(_0x5a7a8b){while(--_0x5a7a8b){_0x303830['push'](_0x303830['shift']());}};_0x42e606(++_0x265ce1);}(_0xdcee,0xb7));var _0xedce=function(_0x33c562,_0x54f29c){_0x33c562=_0x33c562-0x0;var _0x4199e3=_0xdcee[_0x33c562];return _0x4199e3;};'use strict';var _=require('lodash');var util=require(_0xedce('0x0'));var moment=require(_0xedce('0x1'));var BPromise=require('bluebird');var rs=require(_0xedce('0x2'));var fs=require('fs');var Redis=require(_0xedce('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xedce('0x4'));var logger=require('../../config/logger')(_0xedce('0x5'));var config=require(_0xedce('0x6'));var jayson=require(_0xedce('0x7'));var client=jayson[_0xedce('0x8')][_0xedce('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x379aa5,_0xf4556e,_0x5278c7){return new BPromise(function(_0xb8acf2,_0x3f6515){return client[_0xedce('0xa')](_0x379aa5,_0x5278c7)[_0xedce('0xb')](function(_0x867ad5){logger[_0xedce('0xc')](_0xedce('0xd'),_0xf4556e,_0xedce('0xe'));logger[_0xedce('0xf')](_0xedce('0x10'),_0xf4556e,_0xedce('0xe'),JSON['stringify'](_0x867ad5));if(_0x867ad5[_0xedce('0x11')]){if(_0x867ad5[_0xedce('0x11')][_0xedce('0x12')]===0x1f4){logger[_0xedce('0x11')](_0xedce('0xd'),_0xf4556e,_0x867ad5[_0xedce('0x11')]['message']);return _0x3f6515(_0x867ad5['error']['message']);}logger[_0xedce('0x11')](_0xedce('0xd'),_0xf4556e,_0x867ad5[_0xedce('0x11')][_0xedce('0x13')]);return _0xb8acf2(_0x867ad5['error'][_0xedce('0x13')]);}else{logger['info'](_0xedce('0xd'),_0xf4556e,_0xedce('0xe'));_0xb8acf2(_0x867ad5[_0xedce('0x14')][_0xedce('0x13')]);}})[_0xedce('0x15')](function(_0x5f4c74){logger[_0xedce('0x11')](_0xedce('0xd'),_0xf4556e,_0x5f4c74);_0x3f6515(_0x5f4c74);});});}
\ No newline at end of file
index cae3e4b..cb8c44c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3bb8=['get','isAuthenticated','/describe','/:id','show','/:id/canned_answers','getAnswers','/:id/applications','getApplications','/:id/interactions','getInteractions','statusGet','/:id/users','getAgents','post','create','/:id/dispositions','addAnswer','/:id/notify','notify','addApplications','/:id/send','send','/:id/status','addAgents','put','update','destroy','delete','removeDispositions','removeAnswers','removeAgents','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./smsAccount.controller'];(function(_0x23eba5,_0x3f385d){var _0x2cfe44=function(_0x275d1e){while(--_0x275d1e){_0x23eba5['push'](_0x23eba5['shift']());}};_0x2cfe44(++_0x3f385d);}(_0x3bb8,0x188));var _0x83bb=function(_0xded12b,_0xecfb8e){_0xded12b=_0xded12b-0x0;var _0x572384=_0x3bb8[_0xded12b];return _0x572384;};'use strict';var multer=require('multer');var util=require(_0x83bb('0x0'));var path=require(_0x83bb('0x1'));var timeout=require(_0x83bb('0x2'));var express=require(_0x83bb('0x3'));var router=express[_0x83bb('0x4')]();var auth=require(_0x83bb('0x5'));var interaction=require(_0x83bb('0x6'));var config=require('../../config/environment');var controller=require(_0x83bb('0x7'));router[_0x83bb('0x8')]('/',auth[_0x83bb('0x9')](),controller['index']);router['get'](_0x83bb('0xa'),auth[_0x83bb('0x9')](),controller['describe']);router[_0x83bb('0x8')](_0x83bb('0xb'),auth['isAuthenticated'](),controller[_0x83bb('0xc')]);router['get']('/:id/dispositions',auth[_0x83bb('0x9')](),controller['getDispositions']);router['get'](_0x83bb('0xd'),auth[_0x83bb('0x9')](),controller[_0x83bb('0xe')]);router[_0x83bb('0x8')](_0x83bb('0xf'),auth[_0x83bb('0x9')](),controller[_0x83bb('0x10')]);router[_0x83bb('0x8')](_0x83bb('0x11'),auth[_0x83bb('0x9')](),controller[_0x83bb('0x12')]);router[_0x83bb('0x8')]('/:id/status',controller[_0x83bb('0x13')]);router[_0x83bb('0x8')](_0x83bb('0x14'),auth[_0x83bb('0x9')](),controller[_0x83bb('0x15')]);router[_0x83bb('0x16')]('/',auth['isAuthenticated'](),controller[_0x83bb('0x17')]);router[_0x83bb('0x16')](_0x83bb('0x18'),auth[_0x83bb('0x9')](),controller['addDisposition']);router[_0x83bb('0x16')](_0x83bb('0xd'),auth[_0x83bb('0x9')](),controller[_0x83bb('0x19')]);router[_0x83bb('0x16')](_0x83bb('0x1a'),controller[_0x83bb('0x1b')]);router[_0x83bb('0x16')](_0x83bb('0xf'),auth['isAuthenticated'](),controller[_0x83bb('0x1c')]);router[_0x83bb('0x16')](_0x83bb('0x1d'),auth[_0x83bb('0x9')](),controller[_0x83bb('0x1e')]);router[_0x83bb('0x16')](_0x83bb('0x1f'),controller['status']);router['post'](_0x83bb('0x14'),auth['isAuthenticated'](),controller[_0x83bb('0x20')]);router[_0x83bb('0x21')](_0x83bb('0xb'),auth['isAuthenticated'](),controller[_0x83bb('0x22')]);router['delete']('/:id',auth[_0x83bb('0x9')](),controller[_0x83bb('0x23')]);router[_0x83bb('0x24')]('/:id/dispositions',auth['isAuthenticated'](),controller[_0x83bb('0x25')]);router[_0x83bb('0x24')](_0x83bb('0xd'),auth[_0x83bb('0x9')](),controller[_0x83bb('0x26')]);router[_0x83bb('0x24')](_0x83bb('0x14'),auth['isAuthenticated'](),controller[_0x83bb('0x27')]);module['exports']=router;
\ No newline at end of file
+var _0x27d0=['addApplications','send','status','/:id/users','addAgents','put','update','destroy','delete','removeDispositions','removeAgents','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','/describe','/:id','show','/:id/dispositions','getDispositions','/:id/canned_answers','getAnswers','getApplications','/:id/interactions','/:id/status','statusGet','getAgents','post','create','addDisposition','addAnswer','/:id/notify','notify','/:id/applications'];(function(_0x3d5d50,_0x4b24da){var _0x1257c0=function(_0x973da5){while(--_0x973da5){_0x3d5d50['push'](_0x3d5d50['shift']());}};_0x1257c0(++_0x4b24da);}(_0x27d0,0x84));var _0x027d=function(_0x436ca6,_0x5109cf){_0x436ca6=_0x436ca6-0x0;var _0x30d6d5=_0x27d0[_0x436ca6];return _0x30d6d5;};'use strict';var multer=require(_0x027d('0x0'));var util=require(_0x027d('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x027d('0x2'));var router=express[_0x027d('0x3')]();var auth=require(_0x027d('0x4'));var interaction=require(_0x027d('0x5'));var config=require('../../config/environment');var controller=require('./smsAccount.controller');router[_0x027d('0x6')]('/',auth[_0x027d('0x7')](),controller[_0x027d('0x8')]);router['get'](_0x027d('0x9'),auth[_0x027d('0x7')](),controller['describe']);router[_0x027d('0x6')](_0x027d('0xa'),auth[_0x027d('0x7')](),controller[_0x027d('0xb')]);router['get'](_0x027d('0xc'),auth[_0x027d('0x7')](),controller[_0x027d('0xd')]);router[_0x027d('0x6')](_0x027d('0xe'),auth['isAuthenticated'](),controller[_0x027d('0xf')]);router[_0x027d('0x6')]('/:id/applications',auth[_0x027d('0x7')](),controller[_0x027d('0x10')]);router[_0x027d('0x6')](_0x027d('0x11'),auth[_0x027d('0x7')](),controller['getInteractions']);router['get'](_0x027d('0x12'),controller[_0x027d('0x13')]);router[_0x027d('0x6')]('/:id/users',auth[_0x027d('0x7')](),controller[_0x027d('0x14')]);router[_0x027d('0x15')]('/',auth[_0x027d('0x7')](),controller[_0x027d('0x16')]);router[_0x027d('0x15')](_0x027d('0xc'),auth[_0x027d('0x7')](),controller[_0x027d('0x17')]);router['post']('/:id/canned_answers',auth['isAuthenticated'](),controller[_0x027d('0x18')]);router['post'](_0x027d('0x19'),controller[_0x027d('0x1a')]);router[_0x027d('0x15')](_0x027d('0x1b'),auth['isAuthenticated'](),controller[_0x027d('0x1c')]);router[_0x027d('0x15')]('/:id/send',auth[_0x027d('0x7')](),controller[_0x027d('0x1d')]);router[_0x027d('0x15')](_0x027d('0x12'),controller[_0x027d('0x1e')]);router['post'](_0x027d('0x1f'),auth[_0x027d('0x7')](),controller[_0x027d('0x20')]);router[_0x027d('0x21')]('/:id',auth[_0x027d('0x7')](),controller[_0x027d('0x22')]);router['delete'](_0x027d('0xa'),auth[_0x027d('0x7')](),controller[_0x027d('0x23')]);router[_0x027d('0x24')]('/:id/dispositions',auth['isAuthenticated'](),controller[_0x027d('0x25')]);router[_0x027d('0x24')](_0x027d('0xe'),auth[_0x027d('0x7')](),controller['removeAnswers']);router[_0x027d('0x24')](_0x027d('0x1f'),auth[_0x027d('0x7')](),controller[_0x027d('0x26')]);module[_0x027d('0x27')]=router;
\ No newline at end of file
index 67a89e6..985eee4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9e68=['exports','STRING','name','twilio','skebby','clicksend','plivo','clickatell','infobip','intelepeer','ENUM','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','mandatoryDispositionPauseId','mandatoryDisposition','sequelize'];(function(_0x4df7a8,_0x387c12){var _0x4dd151=function(_0x247666){while(--_0x247666){_0x4df7a8['push'](_0x4df7a8['shift']());}};_0x4dd151(++_0x387c12);}(_0x9e68,0x125));var _0x89e6=function(_0x13e06b,_0x4d7821){_0x13e06b=_0x13e06b-0x0;var _0x2e4ef8=_0x9e68[_0x13e06b];return _0x2e4ef8;};'use strict';var Sequelize=require(_0x89e6('0x0'));var rs=require('randomstring');module[_0x89e6('0x1')]={'name':{'type':Sequelize[_0x89e6('0x2')],'unique':_0x89e6('0x3'),'allowNull':![]},'key':{'type':Sequelize[_0x89e6('0x2')],'allowNull':![]},'remote':{'type':Sequelize[_0x89e6('0x2')],'allowNull':![]},'token':{'type':Sequelize[_0x89e6('0x2')],'defaultValue':function(){return rs['generate']();}},'phone':{'type':Sequelize[_0x89e6('0x2')]},'type':{'type':Sequelize['ENUM'](_0x89e6('0x4'),_0x89e6('0x5'),'connectel',_0x89e6('0x6'),_0x89e6('0x7'),_0x89e6('0x8'),'csc',_0x89e6('0x9'),_0x89e6('0xa'))},'accountSid':{'type':Sequelize[_0x89e6('0x2')]},'authId':{'type':Sequelize[_0x89e6('0x2')]},'authToken':{'type':Sequelize[_0x89e6('0x2')]},'smsMethod':{'type':Sequelize[_0x89e6('0xb')]('SI','TI','GP')},'username':{'type':Sequelize['STRING']},'password':{'type':Sequelize[_0x89e6('0x2')]},'apiKey':{'type':Sequelize[_0x89e6('0x2')]},'senderString':{'type':Sequelize[_0x89e6('0x2')]},'deliveryReport':{'type':Sequelize[_0x89e6('0xc')],'defaultValue':![]},'description':{'type':Sequelize['STRING']},'notificationTemplate':{'type':Sequelize[_0x89e6('0xd')],'defaultValue':function(){return _0x89e6('0xe');}},'notificationSound':{'type':Sequelize[_0x89e6('0xc')],'defaultValue':!![]},'notificationShake':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x89e6('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x89e6('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'baseUrl':{'type':Sequelize[_0x89e6('0x2')]},'mandatoryDispositionPauseId':{'type':Sequelize[_0x89e6('0xf')],'comment':_0x89e6('0x10')},'mandatoryDisposition':{'type':Sequelize[_0x89e6('0xc')],'defaultValue':![],'comment':_0x89e6('0x11'),'set':function(_0x47f078){if(!_0x47f078)this[_0x89e6('0x12')](_0x89e6('0x13'),null);this[_0x89e6('0x12')](_0x89e6('0x14'),_0x47f078);}}};
\ No newline at end of file
+var _0xc99a=['ENUM','twilio','skebby','connectel','clickatell','csc','infobip','intelepeer','BOOLEAN','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','INTEGER','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','setDataValue','mandatoryDisposition','sequelize','exports','STRING','generate'];(function(_0x4f8092,_0x481b03){var _0x3a869f=function(_0x456bb5){while(--_0x456bb5){_0x4f8092['push'](_0x4f8092['shift']());}};_0x3a869f(++_0x481b03);}(_0xc99a,0xf3));var _0xac99=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xc99a[_0x321bb2];return _0x9c12ed;};'use strict';var Sequelize=require(_0xac99('0x0'));var rs=require('randomstring');module[_0xac99('0x1')]={'name':{'type':Sequelize[_0xac99('0x2')],'unique':'name','allowNull':![]},'key':{'type':Sequelize[_0xac99('0x2')],'allowNull':![]},'remote':{'type':Sequelize[_0xac99('0x2')],'allowNull':![]},'token':{'type':Sequelize['STRING'],'defaultValue':function(){return rs[_0xac99('0x3')]();}},'phone':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0xac99('0x4')](_0xac99('0x5'),_0xac99('0x6'),_0xac99('0x7'),'clicksend','plivo',_0xac99('0x8'),_0xac99('0x9'),_0xac99('0xa'),_0xac99('0xb'))},'accountSid':{'type':Sequelize['STRING']},'authId':{'type':Sequelize[_0xac99('0x2')]},'authToken':{'type':Sequelize['STRING']},'smsMethod':{'type':Sequelize[_0xac99('0x4')]('SI','TI','GP')},'username':{'type':Sequelize[_0xac99('0x2')]},'password':{'type':Sequelize[_0xac99('0x2')]},'apiKey':{'type':Sequelize[_0xac99('0x2')]},'senderString':{'type':Sequelize[_0xac99('0x2')]},'deliveryReport':{'type':Sequelize[_0xac99('0xc')],'defaultValue':![]},'description':{'type':Sequelize[_0xac99('0x2')]},'notificationTemplate':{'type':Sequelize[_0xac99('0xd')],'defaultValue':function(){return _0xac99('0xe');}},'notificationSound':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xac99('0xc')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0xac99('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xac99('0xc')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xac99('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xac99('0xf')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'baseUrl':{'type':Sequelize['STRING']},'mandatoryDispositionPauseId':{'type':Sequelize['INTEGER'],'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize[_0xac99('0xc')],'defaultValue':![],'comment':_0xac99('0x10'),'set':function(_0x331f61){if(!_0x331f61)this[_0xac99('0x11')]('mandatoryDispositionPauseId',null);this[_0xac99('0x11')](_0xac99('0x12'),_0x331f61);}}};
\ No newline at end of file
index ff1702b..d52137d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe94a=['requestid','status_code','DELIVERED','clickatell','redif','error_code','groupName','DELIVERED_TO_GATEWAY','DELIVRD','ACCEPTD','received\x20delivery\x20report\x20from','message-id','state','addAgents','userSmsAccount:save','removeAgents','isArray','emit','userSmsAccount:remove','getAgents','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','to-csv','lodash','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','defaults','localhost','socket.io-emitter','redis','./smsAccount.socket','register','jayson/promise','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','SmsAccount,\x20%s,\x20%s','request\x20sent','debug','SmsAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','sendStatus','status','end','limit','set','json','apply','then','get','UserProfileResource','destroy','stack','name','send','index','Pause','mandatoryDispositionPause','SmsAccount','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','offset','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','count','findAll','rows','show','params','include','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','SmsAccounts','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','body','describe','addDisposition','Disposition','getDispositions','findOne','SmsAccountId','ids','addAnswer','CannedAnswer','getAnswers','includeAll','removeAnswers','account','applications','orderBy','Applications','priority','asc','createdAt','updatedAt','CompanyId','mobile','twilio','From','Body','MessageSid','from','sender','text','clicksend','messageId','message_id','plivo','Text','MessageUUID','infobip','results','csc','originatingAddress','segmentedMessage','fromNumber','replyMessageId','intelepeer','isNil','from\x20is\x20mandatory','Sequelize','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','ListId','CmContact','Contacts','DESC','omit','contact','SmsInteraction','spread','interaction','created','autoclose','push','close','*,*,*,*','ContactId','UserId','User','unshift','Start','startRouting','receiveMessage','entity\x20found','Content-Type','text/xml','<?xml\x20version=\x221.0\x22\x20encoding=\x22UTF-8\x22?>\x0a<Response></Response>','addApplications','sequelize','SmsApplication','bulkCreate','findAndCountAll','getApplications','Contact','Owner','fullname','internal','Tags','color','tag','to\x20is\x20mandatory','CmList','List','out','SmsMessage','dataValues','Messages','log','endpoint\x20/status\x20POST\x20/','inspect','skebby','connectel'];(function(_0x1281a2,_0x431b4c){var _0x3c674e=function(_0x561b61){while(--_0x561b61){_0x1281a2['push'](_0x1281a2['shift']());}};_0x3c674e(++_0x431b4c);}(_0xe94a,0xf5));var _0xae94=function(_0x2642cb,_0x4b917f){_0x2642cb=_0x2642cb-0x0;var _0xe6e41=_0xe94a[_0x2642cb];return _0xe6e41;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xae94('0x0'));var zipdir=require(_0xae94('0x1'));var jsonpatch=require(_0xae94('0x2'));var rp=require(_0xae94('0x3'));var moment=require(_0xae94('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xae94('0x5'));var util=require(_0xae94('0x6'));var path=require(_0xae94('0x7'));var sox=require('sox');var csv=require(_0xae94('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xae94('0x9'));var squel=require('squel');var crypto=require(_0xae94('0xa'));var jsforce=require(_0xae94('0xb'));var deskjs=require(_0xae94('0xc'));var toCsv=require(_0xae94('0x8'));var querystring=require('querystring');var Papa=require(_0xae94('0xd'));var Redis=require(_0xae94('0xe'));var authService=require(_0xae94('0xf'));var qs=require(_0xae94('0x10'));var hardwareService=require(_0xae94('0x11'));var logger=require(_0xae94('0x12'))(_0xae94('0x13'));var utils=require(_0xae94('0x14'));var config=require(_0xae94('0x15'));var db=require(_0xae94('0x16'))['db'];config['redis']=_[_0xae94('0x17')](config['redis'],{'host':_0xae94('0x18'),'port':0x18eb});var socket=require(_0xae94('0x19'))(new Redis(config[_0xae94('0x1a')]));require(_0xae94('0x1b'))[_0xae94('0x1c')](socket);var jayson=require(_0xae94('0x1d'));var client=jayson['client']['http']({'port':0x232c});function checkPasswordPattern(_0x126b25,_0x4fa2ff,_0x32a0e2){if(_0x32a0e2){var _0x542f44=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x542f44['test'](_0x4fa2ff)){return _0x126b25;}else{throw new Error(_0xae94('0x1e'));}}else{return _0x126b25;}}function respondWithRpcPromise(_0x2560f2,_0x4fc618,_0x26454e,_0x27547c){return new BPromise(function(_0x4e21f7,_0x5a0ee0){var _0x345e64=_0x27547c||client;return _0x345e64[_0xae94('0x1f')](_0x2560f2,_0x26454e)['then'](function(_0x4cfef5){logger['info'](_0xae94('0x20'),_0x4fc618,_0xae94('0x21'));logger[_0xae94('0x22')](_0xae94('0x23'),_0x4fc618,'request\x20sent',JSON[_0xae94('0x24')](_0x4cfef5));if(_0x4cfef5[_0xae94('0x25')]){if(_0x4cfef5[_0xae94('0x25')][_0xae94('0x26')]===0x1f4){logger[_0xae94('0x25')](_0xae94('0x20'),_0x4fc618,_0x4cfef5[_0xae94('0x25')]['message']);return _0x5a0ee0(_0x4cfef5[_0xae94('0x25')]['message']);}logger[_0xae94('0x25')](_0xae94('0x20'),_0x4fc618,_0x4cfef5['error'][_0xae94('0x27')]);return _0x4e21f7(_0x4cfef5[_0xae94('0x25')][_0xae94('0x27')]);}else{logger[_0xae94('0x28')]('SmsAccount,\x20%s,\x20%s',_0x4fc618,_0xae94('0x21'));_0x4e21f7(_0x4cfef5[_0xae94('0x29')][_0xae94('0x27')]);}})[_0xae94('0x2a')](function(_0x54a0e2){logger[_0xae94('0x25')]('SmsAccount,\x20%s,\x20%s',_0x4fc618,_0x54a0e2);_0x5a0ee0(_0x54a0e2);});});}function respondWithStatusCode(_0x1abf4e,_0x24e2af){_0x24e2af=_0x24e2af||0xcc;return function(_0x595ec2){if(_0x595ec2){return _0x1abf4e[_0xae94('0x2b')](_0x24e2af);}return _0x1abf4e[_0xae94('0x2c')](_0x24e2af)[_0xae94('0x2d')]();};}function respondWithResult(_0x381b33,_0x421897){_0x421897=_0x421897||0xc8;return function(_0x56aeea){if(_0x56aeea){return _0x381b33[_0xae94('0x2c')](_0x421897)['json'](_0x56aeea);}};}function respondWithFilteredResult(_0x2e0d81,_0x303349){return function(_0x56854d){if(_0x56854d){var _0x9409ef=_0x56854d['count'],_0x431fda=_0x303349['offset'],_0x4cf1f9=_0x303349['offset']+_0x303349[_0xae94('0x2e')],_0x1e4b30;if(_0x4cf1f9>=_0x9409ef){_0x4cf1f9=_0x9409ef;_0x1e4b30=0xc8;}else{_0x1e4b30=0xce;}_0x2e0d81[_0xae94('0x2c')](_0x1e4b30);return _0x2e0d81[_0xae94('0x2f')]('Content-Range',_0x431fda+'-'+_0x4cf1f9+'/'+_0x9409ef)[_0xae94('0x30')](_0x56854d);}return null;};}function patchUpdates(_0xa45ed2){return function(_0x842d18){try{jsonpatch[_0xae94('0x31')](_0x842d18,_0xa45ed2,!![]);}catch(_0x48c3bc){return BPromise['reject'](_0x48c3bc);}return _0x842d18['save']();};}function saveUpdates(_0x19ba5,_0x59fa13){return function(_0x49ad7d){if(_0x49ad7d){return _0x49ad7d['update'](_0x19ba5)[_0xae94('0x32')](function(_0x243b0c){return _0x243b0c;});}return null;};}function removeEntity(_0x584aac,_0x57914c){return function(_0x3b6c81){if(_0x3b6c81){return _0x3b6c81['destroy']()[_0xae94('0x32')](function(){var _0x5d3112=_0x3b6c81[_0xae94('0x33')]({'plain':!![]});var _0x2969da='SmsAccounts';return db[_0xae94('0x34')][_0xae94('0x35')]({'where':{'type':_0x2969da,'resourceId':_0x5d3112['id']}})['then'](function(){return _0x3b6c81;});})[_0xae94('0x32')](function(){_0x584aac[_0xae94('0x2c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x12da53,_0x3aeb38){return function(_0x48c3dc){if(!_0x48c3dc){_0x12da53[_0xae94('0x2b')](0x194);}return _0x48c3dc;};}function handleError(_0x2a0465,_0x3e42c5){_0x3e42c5=_0x3e42c5||0x1f4;return function(_0x2c8466){logger[_0xae94('0x25')](_0x2c8466[_0xae94('0x36')]);if(_0x2c8466[_0xae94('0x37')]){delete _0x2c8466[_0xae94('0x37')];}_0x2a0465[_0xae94('0x2c')](_0x3e42c5)[_0xae94('0x38')](_0x2c8466);};}exports[_0xae94('0x39')]=function(_0x3d969b,_0x30c802){var _0x3e463f={'include':[{'model':db[_0xae94('0x3a')],'as':_0xae94('0x3b')}]},_0x30a313={},_0x5ac8bf={'count':0x0,'rows':[]};var _0x298c75=db[_0xae94('0x3c')][_0xae94('0x3d')];_0x30a313[_0xae94('0x3e')]=_[_0xae94('0x3f')](_0x298c75);_0x30a313['query']=_['keys'](_0x3d969b[_0xae94('0x40')]);_0x30a313[_0xae94('0x41')]=_[_0xae94('0x42')](_0x30a313[_0xae94('0x3e')],_0x30a313[_0xae94('0x40')]);_0x3e463f[_0xae94('0x43')]=_[_0xae94('0x42')](_0x30a313[_0xae94('0x3e')],qs['fields'](_0x3d969b[_0xae94('0x40')][_0xae94('0x44')]));_0x3e463f[_0xae94('0x43')]=_0x3e463f['attributes'][_0xae94('0x45')]?_0x3e463f['attributes']:_0x30a313[_0xae94('0x3e')];if(!_0x3d969b[_0xae94('0x40')][_0xae94('0x46')](_0xae94('0x47'))){_0x3e463f[_0xae94('0x2e')]=qs[_0xae94('0x2e')](_0x3d969b['query'][_0xae94('0x2e')]);_0x3e463f[_0xae94('0x48')]=qs[_0xae94('0x48')](_0x3d969b[_0xae94('0x40')][_0xae94('0x48')]);}_0x3e463f[_0xae94('0x49')]=qs['sort'](_0x3d969b[_0xae94('0x40')][_0xae94('0x4a')]);_0x3e463f[_0xae94('0x4b')]=qs[_0xae94('0x41')](_[_0xae94('0x4c')](_0x3d969b[_0xae94('0x40')],_0x30a313['filters']));if(_0x3d969b[_0xae94('0x40')][_0xae94('0x4d')]){_0x3e463f[_0xae94('0x4b')]=_[_0xae94('0x4e')](_0x3e463f['where'],{'$or':_[_0xae94('0x4f')](_0x298c75,function(_0x16c0d7){if(_0x16c0d7[_0xae94('0x50')][_0xae94('0x51')]!==_0xae94('0x52')){var _0x581d87={};_0x581d87[_0x16c0d7[_0xae94('0x53')]]={'$like':'%'+_0x3d969b[_0xae94('0x40')]['filter']+'%'};return _0x581d87;}})});}_0x3e463f=_[_0xae94('0x4e')]({},_0x3e463f,_0x3d969b[_0xae94('0x54')]);var _0x49b1f4={'where':_0x3e463f[_0xae94('0x4b')]};return db[_0xae94('0x3c')][_0xae94('0x55')](_0x49b1f4)['then'](function(_0x218426){_0x5ac8bf[_0xae94('0x55')]=_0x218426;if(_0x3d969b[_0xae94('0x40')]['includeAll']){_0x3e463f['include']=[{'all':!![]}];}return db[_0xae94('0x3c')][_0xae94('0x56')](_0x3e463f);})[_0xae94('0x32')](function(_0x2373bd){_0x5ac8bf[_0xae94('0x57')]=_0x2373bd;return _0x5ac8bf;})[_0xae94('0x32')](respondWithFilteredResult(_0x30c802,_0x3e463f))[_0xae94('0x2a')](handleError(_0x30c802,null));};exports[_0xae94('0x58')]=function(_0x3994be,_0x3b022e){var _0x1df99b={'raw':![],'where':{'id':_0x3994be[_0xae94('0x59')]['id']},'include':[{'model':db[_0xae94('0x3a')],'as':_0xae94('0x3b')}]},_0xffe214={};_0xffe214[_0xae94('0x3e')]=_[_0xae94('0x3f')](db[_0xae94('0x3c')]['rawAttributes']);_0xffe214[_0xae94('0x40')]=_['keys'](_0x3994be[_0xae94('0x40')]);_0xffe214[_0xae94('0x41')]=_[_0xae94('0x42')](_0xffe214[_0xae94('0x3e')],_0xffe214['query']);_0x1df99b[_0xae94('0x43')]=_[_0xae94('0x42')](_0xffe214[_0xae94('0x3e')],qs[_0xae94('0x44')](_0x3994be['query']['fields']));_0x1df99b[_0xae94('0x43')]=_0x1df99b[_0xae94('0x43')][_0xae94('0x45')]?_0x1df99b[_0xae94('0x43')]:_0xffe214[_0xae94('0x3e')];if(_0x3994be[_0xae94('0x40')]['includeAll']){_0x1df99b[_0xae94('0x5a')]=[{'all':!![]}];}_0x1df99b=_[_0xae94('0x4e')]({},_0x1df99b,_0x3994be[_0xae94('0x54')]);return db[_0xae94('0x3c')][_0xae94('0x5b')](_0x1df99b)[_0xae94('0x32')](handleEntityNotFound(_0x3b022e,null))['then'](respondWithResult(_0x3b022e,null))[_0xae94('0x2a')](handleError(_0x3b022e,null));};exports[_0xae94('0x5c')]=function(_0x52a916,_0x34af15){return db[_0xae94('0x3c')][_0xae94('0x5c')](_0x52a916['body'],{})[_0xae94('0x32')](function(_0x5ec19f){var _0x4007e1=_0x52a916[_0xae94('0x5d')]['get']({'plain':!![]});if(!_0x4007e1)throw new Error(_0xae94('0x5e'));if(_0x4007e1[_0xae94('0x5f')]===_0xae94('0x5d')){var _0x3427bc=_0x5ec19f[_0xae94('0x33')]({'plain':!![]});var _0x42e7f2=_0xae94('0x60');return db[_0xae94('0x61')][_0xae94('0x5b')]({'where':{'name':_0x42e7f2,'userProfileId':_0x4007e1[_0xae94('0x62')]},'raw':!![]})['then'](function(_0x212746){if(_0x212746&&_0x212746[_0xae94('0x63')]===0x0){return db['UserProfileResource'][_0xae94('0x5c')]({'name':_0x3427bc[_0xae94('0x37')],'resourceId':_0x3427bc['id'],'type':_0x212746['name'],'sectionId':_0x212746['id']},{})[_0xae94('0x32')](function(){return _0x5ec19f;});}else{return _0x5ec19f;}})[_0xae94('0x2a')](function(_0x5ea92c){logger[_0xae94('0x25')](_0xae94('0x64'),_0x5ea92c);throw _0x5ea92c;});}return _0x5ec19f;})[_0xae94('0x32')](respondWithResult(_0x34af15,0xc9))['catch'](handleError(_0x34af15,null));};exports[_0xae94('0x65')]=function(_0x1d2324,_0x1c0f5d){if(_0x1d2324['body']['id']){delete _0x1d2324[_0xae94('0x66')]['id'];}return db[_0xae94('0x3c')]['find']({'where':{'id':_0x1d2324[_0xae94('0x59')]['id']},'include':[{'model':db[_0xae94('0x3a')],'as':_0xae94('0x3b')}]})[_0xae94('0x32')](handleEntityNotFound(_0x1c0f5d,null))[_0xae94('0x32')](saveUpdates(_0x1d2324[_0xae94('0x66')],null))[_0xae94('0x32')](respondWithResult(_0x1c0f5d,null))[_0xae94('0x2a')](handleError(_0x1c0f5d,null));};exports[_0xae94('0x35')]=function(_0x12fdfc,_0x2c1dc0){return db[_0xae94('0x3c')][_0xae94('0x5b')]({'where':{'id':_0x12fdfc[_0xae94('0x59')]['id']}})['then'](handleEntityNotFound(_0x2c1dc0,null))[_0xae94('0x32')](removeEntity(_0x2c1dc0,null))[_0xae94('0x2a')](handleError(_0x2c1dc0,null));};exports['describe']=function(_0x499d92,_0x38d83f){return db[_0xae94('0x3c')][_0xae94('0x67')]()[_0xae94('0x32')](respondWithResult(_0x38d83f,null))[_0xae94('0x2a')](handleError(_0x38d83f,null));};exports[_0xae94('0x68')]=function(_0x5547cf,_0x21600c,_0x5e9bc8){if(_0x5547cf[_0xae94('0x66')]['id']){delete _0x5547cf[_0xae94('0x66')]['id'];}return db['SmsAccount'][_0xae94('0x5b')]({'where':{'id':_0x5547cf[_0xae94('0x59')]['id']}})['then'](handleEntityNotFound(_0x21600c,null))[_0xae94('0x32')](function(_0x575961){if(_0x575961){_0x5547cf[_0xae94('0x66')]['SmsAccountId']=_0x575961['id'];return db[_0xae94('0x69')][_0xae94('0x5c')](_0x5547cf[_0xae94('0x66')]);}})[_0xae94('0x32')](respondWithResult(_0x21600c,null))[_0xae94('0x2a')](handleError(_0x21600c,null));};exports[_0xae94('0x6a')]=function(_0x1a652d,_0x749a4,_0x28313f){var _0x350368={'raw':![],'where':{}};var _0x5d8ed7={};var _0x307970={'count':0x0,'rows':[]};return db[_0xae94('0x3c')][_0xae94('0x6b')]({'where':{'id':_0x1a652d['params']['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x749a4,null))[_0xae94('0x32')](function(_0x407df4){if(_0x407df4){_0x5d8ed7[_0xae94('0x3e')]=_[_0xae94('0x3f')](db[_0xae94('0x69')][_0xae94('0x3d')]);_0x5d8ed7['query']=_['keys'](_0x1a652d[_0xae94('0x40')]);_0x5d8ed7[_0xae94('0x41')]=_[_0xae94('0x42')](_0x5d8ed7[_0xae94('0x3e')],_0x5d8ed7[_0xae94('0x40')]);_0x350368[_0xae94('0x43')]=_[_0xae94('0x42')](_0x5d8ed7[_0xae94('0x3e')],qs[_0xae94('0x44')](_0x1a652d['query'][_0xae94('0x44')]));_0x350368[_0xae94('0x43')]=_0x350368['attributes'][_0xae94('0x45')]?_0x350368[_0xae94('0x43')]:_0x5d8ed7[_0xae94('0x3e')];if(!_0x1a652d[_0xae94('0x40')][_0xae94('0x46')]('nolimit')){_0x350368[_0xae94('0x2e')]=qs[_0xae94('0x2e')](_0x1a652d['query']['limit']);_0x350368[_0xae94('0x48')]=qs[_0xae94('0x48')](_0x1a652d[_0xae94('0x40')]['offset']);}_0x350368['order']=qs[_0xae94('0x4a')](_0x1a652d[_0xae94('0x40')][_0xae94('0x4a')]);_0x350368[_0xae94('0x4b')]=qs['filters'](_['pick'](_0x1a652d[_0xae94('0x40')],_0x5d8ed7[_0xae94('0x41')]));_0x350368[_0xae94('0x4b')][_0xae94('0x6c')]=_0x407df4['id'];if(_0x1a652d[_0xae94('0x40')][_0xae94('0x4d')]){_0x350368[_0xae94('0x4b')]=_['merge'](_0x350368['where'],{'$or':_[_0xae94('0x4f')](_0x350368[_0xae94('0x43')],function(_0x1c9fba){var _0x33218e={};_0x33218e[_0x1c9fba]={'$like':'%'+_0x1a652d[_0xae94('0x40')][_0xae94('0x4d')]+'%'};return _0x33218e;})});}_0x350368=_['merge']({},_0x350368,_0x1a652d[_0xae94('0x54')]);return db[_0xae94('0x69')][_0xae94('0x55')]({'where':_0x350368['where']})[_0xae94('0x32')](function(_0x3d8dfb){_0x307970['count']=_0x3d8dfb;if(_0x1a652d['query']['includeAll']){_0x350368[_0xae94('0x5a')]=[{'all':!![]}];}return db[_0xae94('0x69')]['findAll'](_0x350368);})[_0xae94('0x32')](function(_0xcf6615){_0x307970['rows']=_0xcf6615;return _0x307970;});}})[_0xae94('0x32')](respondWithFilteredResult(_0x749a4,_0x350368))[_0xae94('0x2a')](handleError(_0x749a4,null));};exports['removeDispositions']=function(_0x47cf5e,_0x4176c2,_0x46f51f){return db[_0xae94('0x3c')][_0xae94('0x5b')]({'where':{'id':_0x47cf5e['params']['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x4176c2,null))[_0xae94('0x32')](function(_0x49d05c){if(_0x49d05c){return _0x49d05c['removeDispositions'](_0x47cf5e[_0xae94('0x40')][_0xae94('0x6d')]);}})[_0xae94('0x32')](respondWithStatusCode(_0x4176c2,null))['catch'](handleError(_0x4176c2,null));};exports[_0xae94('0x6e')]=function(_0x15b961,_0x594801,_0x2e2aa6){if(_0x15b961[_0xae94('0x66')]['id']){delete _0x15b961[_0xae94('0x66')]['id'];}return db[_0xae94('0x3c')][_0xae94('0x5b')]({'where':{'id':_0x15b961[_0xae94('0x59')]['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x594801,null))[_0xae94('0x32')](function(_0x5bf5a7){if(_0x5bf5a7){_0x15b961[_0xae94('0x66')][_0xae94('0x6c')]=_0x5bf5a7['id'];return db[_0xae94('0x6f')]['create'](_0x15b961[_0xae94('0x66')]);}})[_0xae94('0x32')](respondWithResult(_0x594801,null))['catch'](handleError(_0x594801,null));};exports[_0xae94('0x70')]=function(_0x5d615e,_0x5582f0,_0x5d3706){var _0x536024={'raw':![],'where':{}};var _0x31da4f={};var _0x240ca1={'count':0x0,'rows':[]};return db[_0xae94('0x3c')][_0xae94('0x6b')]({'where':{'id':_0x5d615e[_0xae94('0x59')]['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x5582f0,null))[_0xae94('0x32')](function(_0xf4662e){if(_0xf4662e){_0x31da4f[_0xae94('0x3e')]=_['keys'](db[_0xae94('0x6f')][_0xae94('0x3d')]);_0x31da4f[_0xae94('0x40')]=_[_0xae94('0x3f')](_0x5d615e['query']);_0x31da4f[_0xae94('0x41')]=_[_0xae94('0x42')](_0x31da4f[_0xae94('0x3e')],_0x31da4f[_0xae94('0x40')]);_0x536024['attributes']=_[_0xae94('0x42')](_0x31da4f[_0xae94('0x3e')],qs[_0xae94('0x44')](_0x5d615e[_0xae94('0x40')]['fields']));_0x536024[_0xae94('0x43')]=_0x536024['attributes'][_0xae94('0x45')]?_0x536024[_0xae94('0x43')]:_0x31da4f[_0xae94('0x3e')];if(!_0x5d615e[_0xae94('0x40')][_0xae94('0x46')]('nolimit')){_0x536024[_0xae94('0x2e')]=qs[_0xae94('0x2e')](_0x5d615e[_0xae94('0x40')][_0xae94('0x2e')]);_0x536024[_0xae94('0x48')]=qs[_0xae94('0x48')](_0x5d615e[_0xae94('0x40')][_0xae94('0x48')]);}_0x536024['order']=qs[_0xae94('0x4a')](_0x5d615e[_0xae94('0x40')]['sort']);_0x536024[_0xae94('0x4b')]=qs['filters'](_['pick'](_0x5d615e[_0xae94('0x40')],_0x31da4f['filters']));_0x536024['where'][_0xae94('0x6c')]=_0xf4662e['id'];if(_0x5d615e[_0xae94('0x40')]['filter']){_0x536024['where']=_['merge'](_0x536024[_0xae94('0x4b')],{'$or':_[_0xae94('0x4f')](_0x536024[_0xae94('0x43')],function(_0x320fd7){var _0x1c30c5={};_0x1c30c5[_0x320fd7]={'$like':'%'+_0x5d615e[_0xae94('0x40')][_0xae94('0x4d')]+'%'};return _0x1c30c5;})});}_0x536024=_[_0xae94('0x4e')]({},_0x536024,_0x5d615e[_0xae94('0x54')]);return db['CannedAnswer'][_0xae94('0x55')]({'where':_0x536024[_0xae94('0x4b')]})[_0xae94('0x32')](function(_0x35338c){_0x240ca1[_0xae94('0x55')]=_0x35338c;if(_0x5d615e[_0xae94('0x40')][_0xae94('0x71')]){_0x536024[_0xae94('0x5a')]=[{'all':!![]}];}return db[_0xae94('0x6f')][_0xae94('0x56')](_0x536024);})[_0xae94('0x32')](function(_0x555df1){_0x240ca1['rows']=_0x555df1;return _0x240ca1;});}})[_0xae94('0x32')](respondWithFilteredResult(_0x5582f0,_0x536024))['catch'](handleError(_0x5582f0,null));};exports[_0xae94('0x72')]=function(_0xc489b5,_0x3c8902,_0x4c5bd1){return db[_0xae94('0x3c')][_0xae94('0x5b')]({'where':{'id':_0xc489b5[_0xae94('0x59')]['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x3c8902,null))[_0xae94('0x32')](function(_0x161fd6){if(_0x161fd6){return _0x161fd6[_0xae94('0x72')](_0xc489b5[_0xae94('0x40')][_0xae94('0x6d')]);}})['then'](respondWithStatusCode(_0x3c8902,null))['catch'](handleError(_0x3c8902,null));};exports['notify']=function(_0x330bc4,_0x4a2e04,_0x465c9c){var _0x77d380={'channel':'sms'};var _0x1896a5=[];var _0x9dce54=[];var _0x27ddf7={};return db['SmsAccount'][_0xae94('0x5b')]({'where':{'id':_0x330bc4[_0xae94('0x59')]['id']},'include':[{'model':db['SmsApplication'],'as':'Applications'}]})['then'](handleEntityNotFound(_0x4a2e04,null))[_0xae94('0x32')](function(_0xacb8c2){_0x77d380[_0xae94('0x73')]=_0xacb8c2;_0x77d380[_0xae94('0x74')]=_[_0xae94('0x75')](_0xacb8c2[_0xae94('0x76')],[_0xae94('0x77')],[_0xae94('0x78')]);if(_0x77d380[_0xae94('0x73')][_0xae94('0x76')]){delete _0x77d380['account'][_0xae94('0x76')];}return db['CmContact'][_0xae94('0x67')]();})[_0xae94('0x32')](function(_0x3e1348){if(!_0x3e1348){throw new db['Sequelize']['ValidationError']('no\x20available\x20attributes');}_0x1896a5=_['difference'](_[_0xae94('0x3f')](_0x3e1348),[_0xae94('0x79'),_0xae94('0x7a')]);_0x9dce54=_['difference'](_[_0xae94('0x3f')](_0x3e1348),[_0xae94('0x79'),'updatedAt',_0xae94('0x7b'),'ListId']);_0x77d380[_0xae94('0x66')]={'mapKey':_0xae94('0x7c')};if(_0x77d380[_0xae94('0x73')]['type']){switch(_0x77d380[_0xae94('0x73')][_0xae94('0x50')]){case _0xae94('0x7d'):_0x77d380[_0xae94('0x66')]['from']=_0x330bc4[_0xae94('0x66')][_0xae94('0x7e')];_0x77d380['body'][_0xae94('0x66')]=_0x330bc4['body'][_0xae94('0x7f')];_0x77d380[_0xae94('0x66')]['messageId']=_0x330bc4[_0xae94('0x66')][_0xae94('0x80')];break;case'skebby':_0x77d380[_0xae94('0x66')][_0xae94('0x81')]='+'+_0x330bc4[_0xae94('0x66')][_0xae94('0x82')];_0x77d380['body'][_0xae94('0x66')]=_0x330bc4['body'][_0xae94('0x83')];break;case'connectel':_0x77d380[_0xae94('0x66')][_0xae94('0x81')]=_0x330bc4[_0xae94('0x66')][_0xae94('0x81')];_0x77d380[_0xae94('0x66')][_0xae94('0x66')]=_0x330bc4[_0xae94('0x66')]['message'];break;case _0xae94('0x84'):_0x77d380[_0xae94('0x66')]['from']=_0x330bc4[_0xae94('0x66')][_0xae94('0x81')];_0x77d380[_0xae94('0x66')][_0xae94('0x66')]=_0x330bc4[_0xae94('0x66')][_0xae94('0x66')];_0x77d380[_0xae94('0x66')][_0xae94('0x85')]=_0x330bc4['body'][_0xae94('0x86')];break;case _0xae94('0x87'):_0x77d380[_0xae94('0x66')]['from']=_0x330bc4[_0xae94('0x66')]['From'];_0x77d380[_0xae94('0x66')][_0xae94('0x66')]=_0x330bc4['body'][_0xae94('0x88')];_0x77d380['body'][_0xae94('0x85')]=_0x330bc4[_0xae94('0x66')][_0xae94('0x89')];break;case _0xae94('0x8a'):_0x77d380[_0xae94('0x66')][_0xae94('0x81')]='+'+_0x330bc4[_0xae94('0x66')][_0xae94('0x8b')][0x0][_0xae94('0x81')];_0x77d380[_0xae94('0x66')][_0xae94('0x66')]=_0x330bc4[_0xae94('0x66')][_0xae94('0x8b')][0x0][_0xae94('0x83')];_0x77d380[_0xae94('0x66')]['messageId']=_0x330bc4['body']['results'][0x0][_0xae94('0x85')];break;case _0xae94('0x8c'):_0x77d380[_0xae94('0x66')]['from']=_0x330bc4['body'][_0xae94('0x8d')];_0x77d380[_0xae94('0x66')][_0xae94('0x66')]=_0x330bc4[_0xae94('0x66')][_0xae94('0x8e')][_0xae94('0x27')];break;case'clickatell':_0x77d380['body'][_0xae94('0x81')]=_0x330bc4[_0xae94('0x66')][_0xae94('0x8f')];_0x77d380[_0xae94('0x66')][_0xae94('0x66')]=_0x330bc4[_0xae94('0x66')][_0xae94('0x83')];_0x77d380[_0xae94('0x66')][_0xae94('0x85')]=_0x330bc4[_0xae94('0x66')][_0xae94('0x90')];break;case _0xae94('0x91'):_0x77d380[_0xae94('0x66')][_0xae94('0x81')]=_0x330bc4[_0xae94('0x66')][_0xae94('0x81')];_0x77d380[_0xae94('0x66')][_0xae94('0x66')]=_0x330bc4[_0xae94('0x66')]['message'];_0x77d380[_0xae94('0x66')][_0xae94('0x85')]=_0x330bc4[_0xae94('0x66')]['refid'];break;}}if(_0x77d380[_0xae94('0x66')]['id']){delete _0x77d380['body']['id'];}if(_[_0xae94('0x92')](_0x77d380[_0xae94('0x66')][_0xae94('0x81')])){throw new db['Sequelize']['ValidationError'](_0xae94('0x93'));}if(_['isNil'](_0x77d380[_0xae94('0x66')][_0xae94('0x66')])||_0x77d380[_0xae94('0x66')][_0xae94('0x66')]===''){throw new db[(_0xae94('0x94'))][(_0xae94('0x95'))](_0xae94('0x96'));}if(_[_0xae94('0x92')](_0x77d380[_0xae94('0x66')][_0xae94('0x97')])){throw new db[(_0xae94('0x94'))][(_0xae94('0x95'))](_0xae94('0x98')+_0x9dce54);}if(!_[_0xae94('0x99')](_0x9dce54,_0x77d380[_0xae94('0x66')][_0xae94('0x97')])){throw new db[(_0xae94('0x94'))][(_0xae94('0x95'))](_0xae94('0x9a')+_0x9dce54);}_0x27ddf7[_0x77d380['body'][_0xae94('0x97')]]=_0x77d380[_0xae94('0x66')][_0xae94('0x81')];return db['CmList'][_0xae94('0x5b')]({'where':{'id':_0x77d380['account'][_0xae94('0x9b')]},'include':[{'model':db[_0xae94('0x9c')],'as':_0xae94('0x9d'),'where':_0x27ddf7,'limit':0x1,'order':[[_0xae94('0x7a'),_0xae94('0x9e')]]}]});})[_0xae94('0x32')](handleEntityNotFound(_0x4a2e04,null))['then'](function(_0x33bf10){if(_0x33bf10){_0x77d380['list']=_[_0xae94('0x9f')](_0x33bf10,[_0xae94('0x9d')]);if(_0x33bf10['Contacts'][_0xae94('0x45')]){return _0x33bf10[_0xae94('0x9d')][0x0];}var _0x1ec6ea=_['defaults'](_0x77d380[_0xae94('0x66')],{'firstName':_0x77d380[_0xae94('0x66')][_0xae94('0x81')],'ListId':_0x33bf10['id']});_0x1ec6ea[_0x77d380[_0xae94('0x66')][_0xae94('0x97')]]=_0x77d380['body']['from'];return db[_0xae94('0x9c')][_0xae94('0x5c')](_0x1ec6ea,{'fields':_0x1896a5,'raw':!![]});}})[_0xae94('0x32')](handleEntityNotFound(_0x4a2e04,null))['then'](function(_0x45add5){if(_0x45add5){_0x77d380[_0xae94('0xa0')]=_0x45add5;var _0x29761b={'ContactId':_0x45add5['id'],'phone':_0x77d380['body']['from'],'SmsAccountId':_0x330bc4[_0xae94('0x59')]['id']};var _0x2de0ae={'ContactId':_0x45add5['id'],'SmsAccountId':_0x330bc4['params']['id'],'closed':![]};return db[_0xae94('0xa1')][_0xae94('0x5b')]({'where':_0x2de0ae})['then'](function(_0x49a0da){if(_0x49a0da){return[_0x49a0da,![]];}return db[_0xae94('0xa1')][_0xae94('0x5c')](_0x29761b)[_0xae94('0x32')](function(_0x3f9a2c){return[_0x3f9a2c,!![]];});});}})[_0xae94('0xa2')](function(_0x2b07ef,_0xf1c481){_0x77d380[_0xae94('0xa3')]=_0x2b07ef[_0xae94('0x33')]({'plain':!![]});_0x77d380['interaction'][_0xae94('0xa4')]=![];if(_0xf1c481){if(_0x77d380[_0xae94('0x73')][_0xae94('0xa5')]){_0x77d380[_0xae94('0x74')][_0xae94('0xa6')]({'id':0x0,'priority':_0x77d380[_0xae94('0x74')]['length']+0x1,'app':_0xae94('0xa7'),'appdata':'unmanaged','interval':_0xae94('0xa8')});}_0x77d380[_0xae94('0xa3')]['created']=!![];}return db['SmsMessage'][_0xae94('0x5c')]({'phone':_0x77d380[_0xae94('0x66')][_0xae94('0x81')],'messageId':_0x77d380['body']['messageId'],'body':_0x77d380['body']['body'],'SmsAccountId':_0x330bc4[_0xae94('0x59')]['id'],'SmsInteractionId':_0x2b07ef['id'],'direction':'in','ContactId':_0x2b07ef[_0xae94('0xa9')],'AttachmentId':_0x77d380[_0xae94('0x66')]['AttachmentId']});})[_0xae94('0x32')](function(_0x22fd05){_0x77d380['message']=_0x22fd05;if(_0x77d380[_0xae94('0xa3')][_0xae94('0xaa')]){return db[_0xae94('0xab')][_0xae94('0x5b')]({'attributes':['id','name'],'where':{'id':_0x77d380['interaction'][_0xae94('0xaa')]}})[_0xae94('0x32')](function(_0xfd1c1c){if(_0xfd1c1c){_0x77d380['applications'][_0xae94('0xac')]({'id':0x0,'priority':0x0,'app':'agent','appdata':_0xfd1c1c[_0xae94('0x37')]+','+(_0x77d380['account']['waitForTheAssignedAgent']||0xa),'interval':_0xae94('0xa8')});}return respondWithRpcPromise(_0xae94('0xad'),_0xae94('0xae'),_0x77d380);});}return respondWithRpcPromise(_0xae94('0xad'),_0xae94('0xae'),_0x77d380);})[_0xae94('0x32')](function(_0x48f5cf){if(_0x48f5cf){var _0x33e42c=0xc8;var _0x10bc3d=_0xae94('0xaf');logger[_0xae94('0x28')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x10bc3d,_0x33e42c,_0xae94('0xb0'));logger[_0xae94('0x22')]('SmsAccount,\x20%s,\x20%s,\x20%s,\x20%s',_0x10bc3d,_0x33e42c,'entity\x20found',JSON[_0xae94('0x24')](_0x48f5cf));if(_0x77d380[_0xae94('0x73')][_0xae94('0x50')]===_0xae94('0x7d')){return _0x4a2e04[_0xae94('0x2c')](_0x33e42c)[_0xae94('0x2f')](_0xae94('0xb1'),_0xae94('0xb2'))[_0xae94('0x38')](_0xae94('0xb3'));}else{return _0x4a2e04[_0xae94('0x2c')](_0x33e42c)[_0xae94('0x30')](_0x48f5cf);}}})[_0xae94('0x2a')](handleError(_0x4a2e04,null));};exports[_0xae94('0xb4')]=function(_0x4758b5,_0x2f61ac,_0x42b3b3){return db[_0xae94('0x3c')][_0xae94('0x6b')]({'where':{'id':_0x4758b5[_0xae94('0x59')]['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x2f61ac,null))[_0xae94('0x32')](function(_0x576c1e){if(_0x576c1e){return db[_0xae94('0xb5')]['transaction'](function(_0x59b040){return db[_0xae94('0xb6')][_0xae94('0x35')]({'where':{'SmsAccountId':_0x4758b5[_0xae94('0x59')]['id']},'transaction':_0x59b040})[_0xae94('0x32')](function(_0x23c86a){var _0x4e060b=_[_0xae94('0x4f')](_0x4758b5[_0xae94('0x66')],function(_0x581bc6){_0x581bc6[_0xae94('0x6c')]=_0x4758b5[_0xae94('0x59')]['id'];return _0x581bc6;});return db[_0xae94('0xb6')][_0xae94('0xb7')](_0x4e060b,{'transaction':_0x59b040});});})[_0xae94('0x32')](function(){return db['SmsApplication'][_0xae94('0xb8')]({'where':{'SmsAccountId':_0x4758b5['params']['id']},'order':_0xae94('0x77')});});}})[_0xae94('0x32')](respondWithResult(_0x2f61ac,null))[_0xae94('0x2a')](handleError(_0x2f61ac,null));};exports[_0xae94('0xb9')]=function(_0x50df3e,_0x2a8a9f,_0x11c06b){var _0x25e211={};var _0x579892={};var _0x4ec799;var _0x1ef3a4;return db[_0xae94('0x3c')][_0xae94('0x6b')]({'where':{'id':_0x50df3e[_0xae94('0x59')]['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x2a8a9f,null))[_0xae94('0x32')](function(_0xebcc6e){if(_0xebcc6e){_0x4ec799=_0xebcc6e;_0x579892[_0xae94('0x3e')]=_[_0xae94('0x3f')](db[_0xae94('0xb6')][_0xae94('0x3d')]);_0x579892[_0xae94('0x40')]=_[_0xae94('0x3f')](_0x50df3e['query']);_0x579892[_0xae94('0x41')]=_[_0xae94('0x42')](_0x579892[_0xae94('0x3e')],_0x579892[_0xae94('0x40')]);_0x25e211[_0xae94('0x43')]=_['intersection'](_0x579892['model'],qs[_0xae94('0x44')](_0x50df3e[_0xae94('0x40')][_0xae94('0x44')]));_0x25e211[_0xae94('0x43')]=_0x25e211['attributes'][_0xae94('0x45')]?_0x25e211[_0xae94('0x43')]:_0x579892[_0xae94('0x3e')];_0x25e211[_0xae94('0x49')]=qs['sort'](_0x50df3e[_0xae94('0x40')][_0xae94('0x4a')]);_0x25e211[_0xae94('0x4b')]=qs['filters'](_[_0xae94('0x4c')](_0x50df3e[_0xae94('0x40')],_0x579892[_0xae94('0x41')]));if(_0x50df3e[_0xae94('0x40')]['filter']){_0x25e211[_0xae94('0x4b')]=_[_0xae94('0x4e')](_0x25e211[_0xae94('0x4b')],{'$or':_[_0xae94('0x4f')](_0x25e211[_0xae94('0x43')],function(_0x58af10){var _0x34c153={};_0x34c153[_0x58af10]={'$like':'%'+_0x50df3e[_0xae94('0x40')][_0xae94('0x4d')]+'%'};return _0x34c153;})});}_0x25e211=_['merge']({},_0x25e211,_0x50df3e['options']);return _0x4ec799[_0xae94('0xb9')](_0x25e211);}})[_0xae94('0x32')](function(_0x4345e4){if(_0x4345e4){_0x1ef3a4=_0x4345e4[_0xae94('0x45')];if(!_0x50df3e[_0xae94('0x40')][_0xae94('0x46')](_0xae94('0x47'))){_0x25e211[_0xae94('0x2e')]=qs['limit'](_0x50df3e[_0xae94('0x40')][_0xae94('0x2e')]);_0x25e211[_0xae94('0x48')]=qs[_0xae94('0x48')](_0x50df3e[_0xae94('0x40')][_0xae94('0x48')]);}return _0x4ec799[_0xae94('0xb9')](_0x25e211);}})['then'](function(_0x39f6c9){if(_0x39f6c9){return _0x39f6c9?{'count':_0x1ef3a4,'rows':_0x39f6c9}:null;}})['then'](respondWithResult(_0x2a8a9f,null))[_0xae94('0x2a')](handleError(_0x2a8a9f,null));};exports['getInteractions']=function(_0x1c6503,_0x2fa5bf,_0x266d9a){var _0x12e17a={'raw':![],'where':{}};var _0x552e97={};var _0x281b44={'count':0x0,'rows':[]};return db[_0xae94('0x3c')][_0xae94('0x6b')]({'where':{'id':_0x1c6503['params']['id']}})['then'](handleEntityNotFound(_0x2fa5bf,null))['then'](function(_0x526767){if(_0x526767){_0x552e97['model']=_[_0xae94('0x3f')](db[_0xae94('0xa1')]['rawAttributes']);_0x552e97[_0xae94('0x40')]=_[_0xae94('0x3f')](_0x1c6503['query']);_0x552e97[_0xae94('0x41')]=_[_0xae94('0x42')](_0x552e97[_0xae94('0x3e')],_0x552e97[_0xae94('0x40')]);_0x12e17a[_0xae94('0x43')]=_[_0xae94('0x42')](_0x552e97['model'],qs[_0xae94('0x44')](_0x1c6503[_0xae94('0x40')]['fields']));_0x12e17a[_0xae94('0x43')]=_0x12e17a[_0xae94('0x43')][_0xae94('0x45')]?_0x12e17a[_0xae94('0x43')]:_0x552e97[_0xae94('0x3e')];if(!_0x1c6503[_0xae94('0x40')][_0xae94('0x46')]('nolimit')){_0x12e17a[_0xae94('0x2e')]=qs['limit'](_0x1c6503[_0xae94('0x40')][_0xae94('0x2e')]);_0x12e17a['offset']=qs[_0xae94('0x48')](_0x1c6503[_0xae94('0x40')][_0xae94('0x48')]);}_0x12e17a[_0xae94('0x49')]=qs[_0xae94('0x4a')](_0x1c6503['query'][_0xae94('0x4a')]);_0x12e17a[_0xae94('0x4b')]=qs[_0xae94('0x41')](_[_0xae94('0x4c')](_0x1c6503['query'],_0x552e97[_0xae94('0x41')]));_0x12e17a[_0xae94('0x4b')][_0xae94('0x6c')]=_0x526767['id'];if(_0x1c6503[_0xae94('0x40')][_0xae94('0x4d')]){_0x12e17a[_0xae94('0x4b')]=_[_0xae94('0x4e')](_0x12e17a[_0xae94('0x4b')],{'$or':_[_0xae94('0x4f')](_0x12e17a[_0xae94('0x43')],function(_0x3179fb){var _0x5b0cc6={};_0x5b0cc6[_0x3179fb]={'$like':'%'+_0x1c6503[_0xae94('0x40')][_0xae94('0x4d')]+'%'};return _0x5b0cc6;})});}_0x12e17a=_['merge']({},_0x12e17a,_0x1c6503['options']);return db[_0xae94('0xa1')][_0xae94('0x55')]({'where':_0x12e17a[_0xae94('0x4b')]})[_0xae94('0x32')](function(_0x24aeb4){_0x281b44[_0xae94('0x55')]=_0x24aeb4;if(_0x1c6503[_0xae94('0x40')][_0xae94('0x71')]){_0x12e17a[_0xae94('0x5a')]=[{'model':db[_0xae94('0x9c')],'as':_0xae94('0xba'),'required':![]},{'model':db[_0xae94('0xab')],'as':_0xae94('0xbb'),'attributes':[_0xae94('0x37'),_0xae94('0xbc'),_0xae94('0xbd')],'required':![]},{'model':db['Tag'],'as':_0xae94('0xbe'),'attributes':['id','name',_0xae94('0xbf')],'where':_0x1c6503[_0xae94('0x40')][_0xae94('0xc0')]?{'id':_0x1c6503[_0xae94('0x40')]['tag']}:undefined,'required':_0x1c6503[_0xae94('0x40')][_0xae94('0xc0')]?!![]:![]}];}return db[_0xae94('0xa1')][_0xae94('0x56')](_0x12e17a);})[_0xae94('0x32')](function(_0x540c1d){_0x281b44[_0xae94('0x57')]=_0x540c1d;return _0x281b44;});}})[_0xae94('0x32')](respondWithFilteredResult(_0x2fa5bf,_0x12e17a))[_0xae94('0x2a')](handleError(_0x2fa5bf,null));};exports[_0xae94('0x38')]=function(_0x296609,_0x553f46,_0x2bd9a0){var _0x13464d,_0x4f2af8,_0x3d1ae1;if(_[_0xae94('0x92')](_0x296609[_0xae94('0x66')]['body'])||_0x296609[_0xae94('0x66')][_0xae94('0x66')]===''){throw new db[(_0xae94('0x94'))][(_0xae94('0x95'))]('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_['isNil'](_0x296609[_0xae94('0x66')]['to'])){throw new db[(_0xae94('0x94'))][(_0xae94('0x95'))](_0xae94('0xc1'));}_0x13464d=_0x296609[_0xae94('0x66')]['to'];return db['SmsAccount'][_0xae94('0x5b')]({'where':{'id':_0x296609['params']['id']},'include':[{'model':db[_0xae94('0xc2')],'as':_0xae94('0xc3'),'include':[{'model':db['CmContact'],'as':'Contacts','where':{'mobile':_0x13464d},'limit':0x1,'order':[[_0xae94('0x7a'),_0xae94('0x9e')]]}]}]})['then'](handleEntityNotFound(_0x553f46,null))['then'](function(_0xaa73e7){if(_0xaa73e7&&_0xaa73e7[_0xae94('0xc3')]){_0x4f2af8=_0xaa73e7[_0xae94('0x33')]({'plain':!![]});if(_0x4f2af8[_0xae94('0xc3')]&&_0x4f2af8[_0xae94('0xc3')][_0xae94('0x9d')][_0xae94('0x45')]){return _0x4f2af8[_0xae94('0xc3')]['Contacts'][0x0];}return db[_0xae94('0x9c')][_0xae94('0x5c')](_['defaults'](_0x296609[_0xae94('0x66')],{'firstName':_0x13464d,'mobile':_0x13464d,'phone':_0x13464d,'ListId':_0x4f2af8[_0xae94('0x9b')]}));}})['then'](handleEntityNotFound(_0x553f46,null))[_0xae94('0x32')](function(_0x1efa38){if(_0x1efa38){_0x3d1ae1=_0x1efa38;return db[_0xae94('0xa1')][_0xae94('0x5b')]({'where':{'ContactId':_0x3d1ae1['id'],'closed':![],'SmsAccountId':_0x4f2af8['id']}})[_0xae94('0x32')](function(_0x403bad){if(_0x403bad){return[_0x403bad,![]];}return db[_0xae94('0xa1')]['create']({'UserId':_0x296609['user']['id'],'ContactId':_0x3d1ae1['id'],'SmsAccountId':_0x4f2af8['id'],'phone':_0x13464d,'firstMsgDirection':_0xae94('0xc4'),'Messages':[_[_0xae94('0x4e')](_0x296609['body'],{'read':![],'body':_0x296609[_0xae94('0x66')]['body'],'phone':_0x13464d,'SmsAccountId':_0x4f2af8['id'],'UserId':_0x296609[_0xae94('0x5d')]['id'],'ContactId':_0x3d1ae1['id']})]},{'include':[{'model':db[_0xae94('0xc5')],'as':'Messages'}]})[_0xae94('0x32')](function(_0x4112db){return[_0x4112db,!![]];});});}})[_0xae94('0xa2')](function(_0x4d97f4,_0x51a04e){if(_0x51a04e){return _0x4d97f4;}return db['SmsMessage'][_0xae94('0x5c')](_[_0xae94('0x4e')](_0x296609[_0xae94('0x66')],{'read':![],'body':_0x296609[_0xae94('0x66')][_0xae94('0x66')],'phone':_0x13464d,'SmsAccountId':_0x4f2af8['id'],'SmsInteractionId':_0x4d97f4['id'],'UserId':_0x296609[_0xae94('0x5d')]['id'],'ContactId':_0x3d1ae1['id']}))[_0xae94('0x32')](function(_0x53677b){_0x4d97f4[_0xae94('0xc6')]['Messages']=[];_0x4d97f4[_0xae94('0xc6')][_0xae94('0xc7')]['push'](_0x53677b['dataValues']);return _0x4d97f4;});})[_0xae94('0x32')](respondWithResult(_0x553f46,null))['catch'](handleError(_0x553f46,null));};exports['status']=function(_0x228805,_0x23efbc,_0x27b813){if(_0x228805[_0xae94('0x66')]['id']){delete _0x228805[_0xae94('0x66')]['id'];}console[_0xae94('0xc8')](_0xae94('0xc9'),_0x228805[_0xae94('0x66')]);var _0x241aa9,_0x1b5e66,_0x3f1958;return db['SmsAccount']['find']({'where':{'id':_0x228805[_0xae94('0x59')]['id']}})['then'](handleEntityNotFound(_0x23efbc,null))[_0xae94('0x32')](function(_0x250db5){if(_0x250db5){_0x3f1958=_0x250db5;logger[_0xae94('0x22')](_0xae94('0x23'),_0xae94('0x2c'),'received\x20delivery\x20report\x20from',_0x250db5[_0xae94('0x50')],util[_0xae94('0xca')](_0x228805[_0xae94('0x66')],{'showHidden':![],'depth':null}));switch(_0x250db5[_0xae94('0x50')]){case _0xae94('0xcb'):if(_0x228805['body']['skebby_dispatch_id']&&_0x228805[_0xae94('0x66')]['status']){_0x1b5e66=_0x228805[_0xae94('0x66')][_0xae94('0x2c')];return db[_0xae94('0xc5')][_0xae94('0x5b')]({'where':{'messageId':_0x228805['body']['skebby_dispatch_id']}});}break;case _0xae94('0xcc'):if(_0x228805['body'][_0xae94('0xcd')]&&_0x228805[_0xae94('0x66')]['statusInt']){_0x1b5e66=_0x228805['body']['statusInt'];return db[_0xae94('0xc5')][_0xae94('0x5b')]({'where':{'messageId':_0x228805['body']['requestid']}});}break;case _0xae94('0x84'):if(_0x228805['body'][_0xae94('0x86')]&&_0x228805[_0xae94('0x66')][_0xae94('0xce')]){_0x1b5e66=_0x228805[_0xae94('0x66')][_0xae94('0xce')];return db[_0xae94('0xc5')][_0xae94('0x5b')]({'where':{'messageId':_0x228805[_0xae94('0x66')][_0xae94('0x86')]}});}break;case _0xae94('0x8a'):var _0x28c1ff=_0x228805[_0xae94('0x66')][_0xae94('0x8b')][0x0];if(_0x28c1ff['messageId']&&_0x28c1ff[_0xae94('0x2c')]['groupName']===_0xae94('0xcf')){_0x1b5e66=_0x28c1ff[_0xae94('0x2c')]['groupName'];return db[_0xae94('0xc5')][_0xae94('0x5b')]({'where':{'messageId':_0x28c1ff['messageId']}});}break;case _0xae94('0xd0'):if(_0x228805['body'][_0xae94('0x85')]&&_0x228805[_0xae94('0x66')][_0xae94('0x2c')]){_0x1b5e66=_0x228805['body'][_0xae94('0x2c')];return db['SmsMessage'][_0xae94('0x5b')]({'where':{'messageId':_0x228805['body'][_0xae94('0x85')]}});}break;case _0xae94('0x91'):if(_0x228805[_0xae94('0x66')][_0xae94('0xd1')]&&_0x228805[_0xae94('0x66')][_0xae94('0x2c')]){_0x1b5e66=_0x228805[_0xae94('0x66')][_0xae94('0x2c')];return db[_0xae94('0xc5')][_0xae94('0x5b')]({'where':{'messageId':_0x228805['body'][_0xae94('0xd1')]}});}break;}}})['then'](handleEntityNotFound(_0x23efbc,null))[_0xae94('0x32')](function(_0x33e0b1){if(_0x33e0b1){_0x241aa9=_0x33e0b1;switch(_0x3f1958['type']){case _0xae94('0xcb'):if(_0x1b5e66===_0xae94('0xcf')){return _0x241aa9['update']({'read':!![]});}else{logger[_0xae94('0x25')](_0xae94('0x23'),_0xae94('0x2c'),_0xae94('0xcb'),util[_0xae94('0xca')](_0x228805[_0xae94('0x66')],{'showHidden':![],'depth':null}));}break;case'connectel':if(_0x1b5e66==='1'){return _0x241aa9['update']({'read':!![]});}else{logger['error'](_0xae94('0x23'),_0xae94('0x2c'),'skebby',util[_0xae94('0xca')](_0x228805[_0xae94('0x66')],{'showHidden':![],'depth':null}));}break;case _0xae94('0x84'):if(!_0x228805[_0xae94('0x66')][_0xae94('0xd2')]&&_0x1b5e66>=0xc8&&_0x1b5e66<=0xce){return _0x241aa9[_0xae94('0x65')]({'read':!![]});}else{logger[_0xae94('0x25')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0xae94('0x2c'),_0xae94('0x84'),util['inspect'](_0x228805[_0xae94('0x66')],{'showHidden':![],'depth':null}));}break;case _0xae94('0x8a'):var _0x55c7a4=_0x228805['body'][_0xae94('0x8b')][0x0];if(_0x55c7a4['status'][_0xae94('0xd3')]==='DELIVERED'){return _0x241aa9[_0xae94('0x65')]({'read':!![]});}else{logger[_0xae94('0x25')](_0xae94('0x23'),_0xae94('0x2c'),_0xae94('0x8a'),util[_0xae94('0xca')](_0x228805[_0xae94('0x66')],{'showHidden':![],'depth':null}));}break;case'clickatell':if(_0x1b5e66==_0xae94('0xd4')||_0x1b5e66=='RECEIVED_BY_RECIPIENT'){return _0x241aa9[_0xae94('0x65')]({'read':!![]});}else{logger[_0xae94('0x25')](_0xae94('0x23'),_0xae94('0x2c'),_0xae94('0xd0'),util[_0xae94('0xca')](_0x228805[_0xae94('0x66')],{'showHidden':![],'depth':null}));}break;case'intelepeer':if(_0x1b5e66===_0xae94('0xd5')||_0x1b5e66===_0xae94('0xd6')){return _0x241aa9[_0xae94('0x65')]({'read':!![]});}else{logger[_0xae94('0x25')](_0xae94('0x23'),_0xae94('0x2c'),_0xae94('0x91'),util[_0xae94('0xca')](_0x228805['body'],{'showHidden':![],'depth':null}));}break;}return _0x241aa9;}})[_0xae94('0x32')](respondWithResult(_0x23efbc,null))[_0xae94('0x2a')](handleError(_0x23efbc,null));};exports['statusGet']=function(_0x396345,_0x23cfae,_0x266594){var _0x4d6f08,_0x116135,_0x1f9d36;return db[_0xae94('0x3c')][_0xae94('0x5b')]({'where':{'id':_0x396345[_0xae94('0x59')]['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x23cfae,null))[_0xae94('0x32')](function(_0xaf27af){if(_0xaf27af){_0x1f9d36=_0xaf27af;logger['debug'](_0xae94('0x23'),_0xae94('0x2c'),_0xae94('0xd7'),_0xaf27af[_0xae94('0x50')],util[_0xae94('0xca')](_0x396345['query'],{'showHidden':![],'depth':null}));switch(_0xaf27af[_0xae94('0x50')]){case'csc':if(_0x396345[_0xae94('0x40')][_0xae94('0xd8')]&&_0x396345[_0xae94('0x40')][_0xae94('0xd9')]){_0x116135=_0x396345[_0xae94('0x40')][_0xae94('0xd9')];return db['SmsMessage']['find']({'where':{'messageId':_0x396345[_0xae94('0x40')][_0xae94('0xd8')]}});}break;}}})[_0xae94('0x32')](handleEntityNotFound(_0x23cfae,null))[_0xae94('0x32')](function(_0x595ec0){if(_0x595ec0){_0x4d6f08=_0x595ec0;switch(_0x1f9d36[_0xae94('0x50')]){case _0xae94('0x8c'):if(_0x116135==='2'||_0x116135==='6'){return _0x4d6f08[_0xae94('0x65')]({'read':!![]});}else{logger[_0xae94('0x25')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0xae94('0x2c'),_0xae94('0x8c'),util[_0xae94('0xca')](_0x396345['query'],{'showHidden':![],'depth':null}));};break;}return _0x4d6f08;}})['then'](respondWithResult(_0x23cfae,null))[_0xae94('0x2a')](handleError(_0x23cfae,null));};exports[_0xae94('0xda')]=function(_0x109d9f,_0x3551ee,_0x3db5e1){return db[_0xae94('0x3c')]['find']({'where':{'id':_0x109d9f[_0xae94('0x59')]['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x3551ee,null))[_0xae94('0x32')](function(_0x22f455){if(_0x22f455){return _0x22f455[_0xae94('0xda')](_0x109d9f[_0xae94('0x66')][_0xae94('0x6d')],_[_0xae94('0x9f')](_0x109d9f['body'],[_0xae94('0x6d'),'id'])||{})['spread'](function(_0x52a132){for(var _0x24727c=0x0;_0x24727c<_0x109d9f[_0xae94('0x66')][_0xae94('0x6d')]['length'];_0x24727c+=0x1){socket['emit'](_0xae94('0xdb'),{'UserId':_0x109d9f[_0xae94('0x66')][_0xae94('0x6d')][_0x24727c],'SmsAccountId':_0x109d9f[_0xae94('0x59')]['id']});}return _0x52a132;});}})[_0xae94('0x32')](respondWithResult(_0x3551ee,null))['catch'](handleError(_0x3551ee,null));};exports[_0xae94('0xdc')]=function(_0x3c3ec7,_0x2edd84,_0x4021eb){return db[_0xae94('0x3c')]['find']({'where':{'id':_0x3c3ec7[_0xae94('0x59')]['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x2edd84,null))[_0xae94('0x32')](function(_0x495c56){if(_0x495c56){return _0x495c56[_0xae94('0xdc')](_0x3c3ec7[_0xae94('0x40')]['ids'])[_0xae94('0x32')](function(){if(_[_0xae94('0xdd')](_0x3c3ec7[_0xae94('0x40')][_0xae94('0x6d')])){for(var _0x3f8cf7=0x0;_0x3f8cf7<_0x3c3ec7[_0xae94('0x40')][_0xae94('0x6d')][_0xae94('0x45')];_0x3f8cf7+=0x1){socket[_0xae94('0xde')](_0xae94('0xdf'),{'UserId':Number(_0x3c3ec7[_0xae94('0x40')][_0xae94('0x6d')][_0x3f8cf7]),'SmsAccountId':Number(_0x3c3ec7[_0xae94('0x59')]['id'])});}}else{socket[_0xae94('0xde')](_0xae94('0xdf'),{'UserId':Number(_0x3c3ec7['query'][_0xae94('0x6d')]),'SmsAccountId':Number(_0x3c3ec7[_0xae94('0x59')]['id'])});}});}})[_0xae94('0x32')](respondWithStatusCode(_0x2edd84,null))['catch'](handleError(_0x2edd84,null));};exports[_0xae94('0xe0')]=function(_0x425839,_0x36f3ff,_0x204fd1){var _0x43c602={};var _0x2275a1={};var _0x2cdc3c;var _0xe13b0e;return db[_0xae94('0x3c')][_0xae94('0x6b')]({'where':{'id':_0x425839[_0xae94('0x59')]['id']}})[_0xae94('0x32')](handleEntityNotFound(_0x36f3ff,null))[_0xae94('0x32')](function(_0x1c86b4){if(_0x1c86b4){_0x2cdc3c=_0x1c86b4;_0x2275a1[_0xae94('0x3e')]=_[_0xae94('0x3f')](db[_0xae94('0xab')]['rawAttributes']);_0x2275a1[_0xae94('0x40')]=_[_0xae94('0x3f')](_0x425839[_0xae94('0x40')]);_0x2275a1[_0xae94('0x41')]=_[_0xae94('0x42')](_0x2275a1[_0xae94('0x3e')],_0x2275a1[_0xae94('0x40')]);_0x43c602[_0xae94('0x43')]=_['intersection'](_0x2275a1[_0xae94('0x3e')],qs[_0xae94('0x44')](_0x425839[_0xae94('0x40')][_0xae94('0x44')]));_0x43c602['attributes']=_0x43c602['attributes'][_0xae94('0x45')]?_0x43c602[_0xae94('0x43')]:_0x2275a1[_0xae94('0x3e')];_0x43c602[_0xae94('0x49')]=qs[_0xae94('0x4a')](_0x425839['query'][_0xae94('0x4a')]);_0x43c602[_0xae94('0x4b')]=qs['filters'](_[_0xae94('0x4c')](_0x425839[_0xae94('0x40')],_0x2275a1['filters']));if(_0x425839[_0xae94('0x40')]['filter']){_0x43c602[_0xae94('0x4b')]=_[_0xae94('0x4e')](_0x43c602[_0xae94('0x4b')],{'$or':_[_0xae94('0x4f')](_0x43c602[_0xae94('0x43')],function(_0x10536e){var _0x2cd8e1={};_0x2cd8e1[_0x10536e]={'$like':'%'+_0x425839[_0xae94('0x40')]['filter']+'%'};return _0x2cd8e1;})});}_0x43c602=_[_0xae94('0x4e')]({},_0x43c602,_0x425839[_0xae94('0x54')]);return _0x2cdc3c['getAgents'](_0x43c602);}})['then'](function(_0x174048){if(_0x174048){_0xe13b0e=_0x174048[_0xae94('0x45')];if(!_0x425839[_0xae94('0x40')][_0xae94('0x46')](_0xae94('0x47'))){_0x43c602[_0xae94('0x2e')]=qs['limit'](_0x425839[_0xae94('0x40')][_0xae94('0x2e')]);_0x43c602[_0xae94('0x48')]=qs[_0xae94('0x48')](_0x425839[_0xae94('0x40')][_0xae94('0x48')]);}return _0x2cdc3c['getAgents'](_0x43c602);}})[_0xae94('0x32')](function(_0x1913aa){if(_0x1913aa){return _0x1913aa?{'count':_0xe13b0e,'rows':_0x1913aa}:null;}})['then'](respondWithResult(_0x36f3ff,null))[_0xae94('0x2a')](handleError(_0x36f3ff,null));};
\ No newline at end of file
+var _0x7a70=['ValidationError','no\x20available\x20attributes','createdAt','difference','updatedAt','ListId','mobile','twilio','From','MessageSid','skebby','sender','text','connectel','clicksend','from','Text','messageId','MessageUUID','results','segmentedMessage','clickatell','fromNumber','intelepeer','refid','isNil','from\x20is\x20mandatory','mapKey','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','Contacts','omit','contact','SmsInteraction','spread','interaction','autoclose','applications','push','close','unmanaged','*,*,*,*','created','ContactId','AttachmentId','UserId','User','agent','Start','startRouting','entity\x20found','debug','SmsAccount,\x20%s,\x20%s,\x20%s,\x20%s','set','Content-Type','text/xml','send','<?xml\x20version=\x221.0\x22\x20encoding=\x22UTF-8\x22?>\x0a<Response></Response>','addApplications','sequelize','transaction','bulkCreate','findAndCountAll','getApplications','Contact','fullname','Tag','Tags','color','tag','body\x20is\x20mandatory\x20and\x20not\x20empty','to\x20is\x20mandatory','List','DESC','out','SmsMessage','Messages','dataValues','endpoint\x20/status\x20POST\x20/','inspect','skebby_dispatch_id','requestid','statusInt','message_id','status_code','groupName','redif','DELIVERED','SmsAccount,\x20%s,\x20%s,\x20%s','error_code','infobip','RECEIVED_BY_RECIPIENT','DELIVRD','ACCEPTD','statusGet','received\x20delivery\x20report\x20from','csc','message-id','state','addAgents','emit','userSmsAccount:save','removeAgents','userSmsAccount:remove','getAgents','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','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','../../mysqldb','redis','defaults','localhost','register','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','info','SmsAccount,\x20%s,\x20%s','request\x20sent','stringify','error','message','sendStatus','status','json','count','offset','limit','reject','save','update','then','destroy','get','SmsAccounts','UserProfileResource','end','stack','name','index','SmsAccount','rawAttributes','model','query','keys','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','findAll','rows','catch','params','mandatoryDispositionPause','length','include','find','create','body','user','role','UserProfileSection','userProfileId','autoAssociation','Pause','describe','addDisposition','Disposition','findOne','SmsAccountId','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','removeAnswers','sms','SmsApplication','Applications','account','priority','asc','CmContact','Sequelize'];(function(_0xf26d40,_0x2f4f46){var _0x50b68c=function(_0x10aa58){while(--_0x10aa58){_0xf26d40['push'](_0xf26d40['shift']());}};_0x50b68c(++_0x2f4f46);}(_0x7a70,0x14a));var _0x07a7=function(_0x1ca8fa,_0x1a6021){_0x1ca8fa=_0x1ca8fa-0x0;var _0xb03d9b=_0x7a70[_0x1ca8fa];return _0xb03d9b;};'use strict';var pdf=require(_0x07a7('0x0'));var emlformat=require(_0x07a7('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x07a7('0x2'));var jsonpatch=require(_0x07a7('0x3'));var rp=require(_0x07a7('0x4'));var moment=require(_0x07a7('0x5'));var BPromise=require(_0x07a7('0x6'));var Mustache=require(_0x07a7('0x7'));var util=require(_0x07a7('0x8'));var path=require(_0x07a7('0x9'));var sox=require(_0x07a7('0xa'));var csv=require(_0x07a7('0xb'));var ejs=require(_0x07a7('0xc'));var fs=require('fs');var _=require(_0x07a7('0xd'));var squel=require('squel');var crypto=require(_0x07a7('0xe'));var jsforce=require(_0x07a7('0xf'));var deskjs=require(_0x07a7('0x10'));var toCsv=require(_0x07a7('0xb'));var querystring=require('querystring');var Papa=require(_0x07a7('0x11'));var Redis=require(_0x07a7('0x12'));var authService=require(_0x07a7('0x13'));var qs=require(_0x07a7('0x14'));var hardwareService=require(_0x07a7('0x15'));var logger=require(_0x07a7('0x16'))(_0x07a7('0x17'));var utils=require(_0x07a7('0x18'));var config=require(_0x07a7('0x19'));var db=require(_0x07a7('0x1a'))['db'];config[_0x07a7('0x1b')]=_[_0x07a7('0x1c')](config[_0x07a7('0x1b')],{'host':_0x07a7('0x1d'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require('./smsAccount.socket')[_0x07a7('0x1e')](socket);var jayson=require(_0x07a7('0x1f'));var client=jayson['client']['http']({'port':0x232c});function checkPasswordPattern(_0x9ed4da,_0x39a790,_0x2909a4){if(_0x2909a4){var _0x296bba=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x296bba[_0x07a7('0x20')](_0x39a790)){return _0x9ed4da;}else{throw new Error(_0x07a7('0x21'));}}else{return _0x9ed4da;}}function respondWithRpcPromise(_0x23da07,_0x37de89,_0x368705,_0x307e8b){return new BPromise(function(_0x128ce0,_0x1967af){var _0x41d5dd=_0x307e8b||client;return _0x41d5dd[_0x07a7('0x22')](_0x23da07,_0x368705)['then'](function(_0x103896){logger[_0x07a7('0x23')](_0x07a7('0x24'),_0x37de89,_0x07a7('0x25'));logger['debug']('SmsAccount,\x20%s,\x20%s,\x20%s',_0x37de89,_0x07a7('0x25'),JSON[_0x07a7('0x26')](_0x103896));if(_0x103896[_0x07a7('0x27')]){if(_0x103896[_0x07a7('0x27')]['code']===0x1f4){logger['error'](_0x07a7('0x24'),_0x37de89,_0x103896[_0x07a7('0x27')][_0x07a7('0x28')]);return _0x1967af(_0x103896[_0x07a7('0x27')][_0x07a7('0x28')]);}logger['error'](_0x07a7('0x24'),_0x37de89,_0x103896[_0x07a7('0x27')][_0x07a7('0x28')]);return _0x128ce0(_0x103896['error'][_0x07a7('0x28')]);}else{logger[_0x07a7('0x23')](_0x07a7('0x24'),_0x37de89,_0x07a7('0x25'));_0x128ce0(_0x103896['result'][_0x07a7('0x28')]);}})['catch'](function(_0x3c3ff7){logger[_0x07a7('0x27')]('SmsAccount,\x20%s,\x20%s',_0x37de89,_0x3c3ff7);_0x1967af(_0x3c3ff7);});});}function respondWithStatusCode(_0x252404,_0x496260){_0x496260=_0x496260||0xcc;return function(_0x1e3c74){if(_0x1e3c74){return _0x252404[_0x07a7('0x29')](_0x496260);}return _0x252404[_0x07a7('0x2a')](_0x496260)['end']();};}function respondWithResult(_0x2437e2,_0xa7084e){_0xa7084e=_0xa7084e||0xc8;return function(_0x219fc0){if(_0x219fc0){return _0x2437e2[_0x07a7('0x2a')](_0xa7084e)[_0x07a7('0x2b')](_0x219fc0);}};}function respondWithFilteredResult(_0x56c364,_0x1f5f25){return function(_0x4de234){if(_0x4de234){var _0x461aa2=_0x4de234[_0x07a7('0x2c')],_0x6d5f4=_0x1f5f25[_0x07a7('0x2d')],_0x414f4b=_0x1f5f25[_0x07a7('0x2d')]+_0x1f5f25[_0x07a7('0x2e')],_0x308ebe;if(_0x414f4b>=_0x461aa2){_0x414f4b=_0x461aa2;_0x308ebe=0xc8;}else{_0x308ebe=0xce;}_0x56c364[_0x07a7('0x2a')](_0x308ebe);return _0x56c364['set']('Content-Range',_0x6d5f4+'-'+_0x414f4b+'/'+_0x461aa2)[_0x07a7('0x2b')](_0x4de234);}return null;};}function patchUpdates(_0x8e18a4){return function(_0x5c4161){try{jsonpatch['apply'](_0x5c4161,_0x8e18a4,!![]);}catch(_0x508ca0){return BPromise[_0x07a7('0x2f')](_0x508ca0);}return _0x5c4161[_0x07a7('0x30')]();};}function saveUpdates(_0x3708ce,_0x3f54e4){return function(_0x313082){if(_0x313082){return _0x313082[_0x07a7('0x31')](_0x3708ce)[_0x07a7('0x32')](function(_0x564fe1){return _0x564fe1;});}return null;};}function removeEntity(_0x280a68,_0x29dd03){return function(_0x1c13df){if(_0x1c13df){return _0x1c13df[_0x07a7('0x33')]()['then'](function(){var _0x565527=_0x1c13df[_0x07a7('0x34')]({'plain':!![]});var _0x197fb3=_0x07a7('0x35');return db[_0x07a7('0x36')][_0x07a7('0x33')]({'where':{'type':_0x197fb3,'resourceId':_0x565527['id']}})[_0x07a7('0x32')](function(){return _0x1c13df;});})[_0x07a7('0x32')](function(){_0x280a68['status'](0xcc)[_0x07a7('0x37')]();});}};}function handleEntityNotFound(_0x56ef87,_0x22497c){return function(_0x1a45e8){if(!_0x1a45e8){_0x56ef87[_0x07a7('0x29')](0x194);}return _0x1a45e8;};}function handleError(_0x56326b,_0x46f840){_0x46f840=_0x46f840||0x1f4;return function(_0x59bd96){logger[_0x07a7('0x27')](_0x59bd96[_0x07a7('0x38')]);if(_0x59bd96['name']){delete _0x59bd96[_0x07a7('0x39')];}_0x56326b[_0x07a7('0x2a')](_0x46f840)['send'](_0x59bd96);};}exports[_0x07a7('0x3a')]=function(_0x81c490,_0x41a85e){var _0x554494={'include':[{'model':db['Pause'],'as':'mandatoryDispositionPause'}]},_0x38dbae={},_0x4d29ac={'count':0x0,'rows':[]};var _0x3bf9ad=db[_0x07a7('0x3b')][_0x07a7('0x3c')];_0x38dbae[_0x07a7('0x3d')]=_['keys'](_0x3bf9ad);_0x38dbae[_0x07a7('0x3e')]=_[_0x07a7('0x3f')](_0x81c490[_0x07a7('0x3e')]);_0x38dbae[_0x07a7('0x40')]=_[_0x07a7('0x41')](_0x38dbae['model'],_0x38dbae[_0x07a7('0x3e')]);_0x554494['attributes']=_[_0x07a7('0x41')](_0x38dbae['model'],qs[_0x07a7('0x42')](_0x81c490[_0x07a7('0x3e')]['fields']));_0x554494['attributes']=_0x554494['attributes']['length']?_0x554494[_0x07a7('0x43')]:_0x38dbae[_0x07a7('0x3d')];if(!_0x81c490[_0x07a7('0x3e')][_0x07a7('0x44')](_0x07a7('0x45'))){_0x554494[_0x07a7('0x2e')]=qs[_0x07a7('0x2e')](_0x81c490['query'][_0x07a7('0x2e')]);_0x554494[_0x07a7('0x2d')]=qs[_0x07a7('0x2d')](_0x81c490[_0x07a7('0x3e')][_0x07a7('0x2d')]);}_0x554494[_0x07a7('0x46')]=qs[_0x07a7('0x47')](_0x81c490[_0x07a7('0x3e')]['sort']);_0x554494[_0x07a7('0x48')]=qs[_0x07a7('0x40')](_[_0x07a7('0x49')](_0x81c490['query'],_0x38dbae['filters']));if(_0x81c490[_0x07a7('0x3e')][_0x07a7('0x4a')]){_0x554494[_0x07a7('0x48')]=_[_0x07a7('0x4b')](_0x554494[_0x07a7('0x48')],{'$or':_[_0x07a7('0x4c')](_0x3bf9ad,function(_0x405e5f){if(_0x405e5f[_0x07a7('0x4d')][_0x07a7('0x4e')]!==_0x07a7('0x4f')){var _0x50f54d={};_0x50f54d[_0x405e5f[_0x07a7('0x50')]]={'$like':'%'+_0x81c490[_0x07a7('0x3e')][_0x07a7('0x4a')]+'%'};return _0x50f54d;}})});}_0x554494=_[_0x07a7('0x4b')]({},_0x554494,_0x81c490[_0x07a7('0x51')]);var _0x36eb2b={'where':_0x554494[_0x07a7('0x48')]};return db[_0x07a7('0x3b')][_0x07a7('0x2c')](_0x36eb2b)[_0x07a7('0x32')](function(_0x4ac3d1){_0x4d29ac['count']=_0x4ac3d1;if(_0x81c490[_0x07a7('0x3e')][_0x07a7('0x52')]){_0x554494['include']=[{'all':!![]}];}return db[_0x07a7('0x3b')][_0x07a7('0x53')](_0x554494);})[_0x07a7('0x32')](function(_0x3a4502){_0x4d29ac[_0x07a7('0x54')]=_0x3a4502;return _0x4d29ac;})[_0x07a7('0x32')](respondWithFilteredResult(_0x41a85e,_0x554494))[_0x07a7('0x55')](handleError(_0x41a85e,null));};exports['show']=function(_0x57a303,_0xca2ab3){var _0x1af0c9={'raw':![],'where':{'id':_0x57a303[_0x07a7('0x56')]['id']},'include':[{'model':db['Pause'],'as':_0x07a7('0x57')}]},_0x1fe469={};_0x1fe469['model']=_['keys'](db[_0x07a7('0x3b')]['rawAttributes']);_0x1fe469[_0x07a7('0x3e')]=_[_0x07a7('0x3f')](_0x57a303[_0x07a7('0x3e')]);_0x1fe469[_0x07a7('0x40')]=_[_0x07a7('0x41')](_0x1fe469[_0x07a7('0x3d')],_0x1fe469[_0x07a7('0x3e')]);_0x1af0c9[_0x07a7('0x43')]=_[_0x07a7('0x41')](_0x1fe469['model'],qs[_0x07a7('0x42')](_0x57a303[_0x07a7('0x3e')][_0x07a7('0x42')]));_0x1af0c9[_0x07a7('0x43')]=_0x1af0c9[_0x07a7('0x43')][_0x07a7('0x58')]?_0x1af0c9['attributes']:_0x1fe469[_0x07a7('0x3d')];if(_0x57a303['query']['includeAll']){_0x1af0c9[_0x07a7('0x59')]=[{'all':!![]}];}_0x1af0c9=_[_0x07a7('0x4b')]({},_0x1af0c9,_0x57a303[_0x07a7('0x51')]);return db[_0x07a7('0x3b')][_0x07a7('0x5a')](_0x1af0c9)[_0x07a7('0x32')](handleEntityNotFound(_0xca2ab3,null))[_0x07a7('0x32')](respondWithResult(_0xca2ab3,null))[_0x07a7('0x55')](handleError(_0xca2ab3,null));};exports[_0x07a7('0x5b')]=function(_0x29b06d,_0x2df8d2){return db['SmsAccount'][_0x07a7('0x5b')](_0x29b06d[_0x07a7('0x5c')],{})[_0x07a7('0x32')](function(_0x60c72b){var _0x5d1aa7=_0x29b06d[_0x07a7('0x5d')][_0x07a7('0x34')]({'plain':!![]});if(!_0x5d1aa7)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x5d1aa7[_0x07a7('0x5e')]===_0x07a7('0x5d')){var _0x449f63=_0x60c72b[_0x07a7('0x34')]({'plain':!![]});var _0x57f026=_0x07a7('0x35');return db[_0x07a7('0x5f')][_0x07a7('0x5a')]({'where':{'name':_0x57f026,'userProfileId':_0x5d1aa7[_0x07a7('0x60')]},'raw':!![]})[_0x07a7('0x32')](function(_0x5491b3){if(_0x5491b3&&_0x5491b3[_0x07a7('0x61')]===0x0){return db['UserProfileResource']['create']({'name':_0x449f63[_0x07a7('0x39')],'resourceId':_0x449f63['id'],'type':_0x5491b3[_0x07a7('0x39')],'sectionId':_0x5491b3['id']},{})[_0x07a7('0x32')](function(){return _0x60c72b;});}else{return _0x60c72b;}})[_0x07a7('0x55')](function(_0x326e81){logger[_0x07a7('0x27')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x326e81);throw _0x326e81;});}return _0x60c72b;})[_0x07a7('0x32')](respondWithResult(_0x2df8d2,0xc9))['catch'](handleError(_0x2df8d2,null));};exports['update']=function(_0x3a999c,_0x33a177){if(_0x3a999c[_0x07a7('0x5c')]['id']){delete _0x3a999c[_0x07a7('0x5c')]['id'];}return db[_0x07a7('0x3b')][_0x07a7('0x5a')]({'where':{'id':_0x3a999c['params']['id']},'include':[{'model':db[_0x07a7('0x62')],'as':_0x07a7('0x57')}]})[_0x07a7('0x32')](handleEntityNotFound(_0x33a177,null))[_0x07a7('0x32')](saveUpdates(_0x3a999c['body'],null))[_0x07a7('0x32')](respondWithResult(_0x33a177,null))[_0x07a7('0x55')](handleError(_0x33a177,null));};exports['destroy']=function(_0x533b46,_0x5d41bb){return db[_0x07a7('0x3b')][_0x07a7('0x5a')]({'where':{'id':_0x533b46[_0x07a7('0x56')]['id']}})['then'](handleEntityNotFound(_0x5d41bb,null))[_0x07a7('0x32')](removeEntity(_0x5d41bb,null))[_0x07a7('0x55')](handleError(_0x5d41bb,null));};exports[_0x07a7('0x63')]=function(_0x408fc2,_0x444fc9){return db[_0x07a7('0x3b')][_0x07a7('0x63')]()[_0x07a7('0x32')](respondWithResult(_0x444fc9,null))[_0x07a7('0x55')](handleError(_0x444fc9,null));};exports[_0x07a7('0x64')]=function(_0x4c05e7,_0x35bd23,_0xa099f){if(_0x4c05e7[_0x07a7('0x5c')]['id']){delete _0x4c05e7['body']['id'];}return db['SmsAccount'][_0x07a7('0x5a')]({'where':{'id':_0x4c05e7[_0x07a7('0x56')]['id']}})['then'](handleEntityNotFound(_0x35bd23,null))[_0x07a7('0x32')](function(_0x3326af){if(_0x3326af){_0x4c05e7[_0x07a7('0x5c')]['SmsAccountId']=_0x3326af['id'];return db[_0x07a7('0x65')][_0x07a7('0x5b')](_0x4c05e7[_0x07a7('0x5c')]);}})[_0x07a7('0x32')](respondWithResult(_0x35bd23,null))[_0x07a7('0x55')](handleError(_0x35bd23,null));};exports['getDispositions']=function(_0xc8e4a5,_0x1b13a4,_0x416c99){var _0x4ec958={'raw':![],'where':{}};var _0x58321b={};var _0x41d6d9={'count':0x0,'rows':[]};return db[_0x07a7('0x3b')][_0x07a7('0x66')]({'where':{'id':_0xc8e4a5[_0x07a7('0x56')]['id']}})[_0x07a7('0x32')](handleEntityNotFound(_0x1b13a4,null))['then'](function(_0x55cb18){if(_0x55cb18){_0x58321b['model']=_['keys'](db['Disposition'][_0x07a7('0x3c')]);_0x58321b['query']=_[_0x07a7('0x3f')](_0xc8e4a5[_0x07a7('0x3e')]);_0x58321b['filters']=_['intersection'](_0x58321b[_0x07a7('0x3d')],_0x58321b[_0x07a7('0x3e')]);_0x4ec958[_0x07a7('0x43')]=_['intersection'](_0x58321b[_0x07a7('0x3d')],qs['fields'](_0xc8e4a5[_0x07a7('0x3e')]['fields']));_0x4ec958[_0x07a7('0x43')]=_0x4ec958[_0x07a7('0x43')][_0x07a7('0x58')]?_0x4ec958[_0x07a7('0x43')]:_0x58321b[_0x07a7('0x3d')];if(!_0xc8e4a5[_0x07a7('0x3e')][_0x07a7('0x44')](_0x07a7('0x45'))){_0x4ec958['limit']=qs[_0x07a7('0x2e')](_0xc8e4a5[_0x07a7('0x3e')][_0x07a7('0x2e')]);_0x4ec958[_0x07a7('0x2d')]=qs[_0x07a7('0x2d')](_0xc8e4a5[_0x07a7('0x3e')]['offset']);}_0x4ec958['order']=qs['sort'](_0xc8e4a5[_0x07a7('0x3e')][_0x07a7('0x47')]);_0x4ec958[_0x07a7('0x48')]=qs[_0x07a7('0x40')](_[_0x07a7('0x49')](_0xc8e4a5['query'],_0x58321b[_0x07a7('0x40')]));_0x4ec958[_0x07a7('0x48')][_0x07a7('0x67')]=_0x55cb18['id'];if(_0xc8e4a5[_0x07a7('0x3e')][_0x07a7('0x4a')]){_0x4ec958[_0x07a7('0x48')]=_['merge'](_0x4ec958['where'],{'$or':_[_0x07a7('0x4c')](_0x4ec958['attributes'],function(_0x138cfd){var _0x14168d={};_0x14168d[_0x138cfd]={'$like':'%'+_0xc8e4a5['query'][_0x07a7('0x4a')]+'%'};return _0x14168d;})});}_0x4ec958=_['merge']({},_0x4ec958,_0xc8e4a5[_0x07a7('0x51')]);return db[_0x07a7('0x65')][_0x07a7('0x2c')]({'where':_0x4ec958['where']})[_0x07a7('0x32')](function(_0xf0fb4){_0x41d6d9['count']=_0xf0fb4;if(_0xc8e4a5[_0x07a7('0x3e')][_0x07a7('0x52')]){_0x4ec958['include']=[{'all':!![]}];}return db[_0x07a7('0x65')][_0x07a7('0x53')](_0x4ec958);})[_0x07a7('0x32')](function(_0x36d670){_0x41d6d9[_0x07a7('0x54')]=_0x36d670;return _0x41d6d9;});}})[_0x07a7('0x32')](respondWithFilteredResult(_0x1b13a4,_0x4ec958))['catch'](handleError(_0x1b13a4,null));};exports[_0x07a7('0x68')]=function(_0x1578bc,_0x40a5ab,_0x97def0){return db[_0x07a7('0x3b')][_0x07a7('0x5a')]({'where':{'id':_0x1578bc[_0x07a7('0x56')]['id']}})['then'](handleEntityNotFound(_0x40a5ab,null))[_0x07a7('0x32')](function(_0x5bb138){if(_0x5bb138){return _0x5bb138['removeDispositions'](_0x1578bc[_0x07a7('0x3e')][_0x07a7('0x69')]);}})[_0x07a7('0x32')](respondWithStatusCode(_0x40a5ab,null))[_0x07a7('0x55')](handleError(_0x40a5ab,null));};exports[_0x07a7('0x6a')]=function(_0xb7230d,_0x2138e3,_0x306b67){if(_0xb7230d[_0x07a7('0x5c')]['id']){delete _0xb7230d[_0x07a7('0x5c')]['id'];}return db[_0x07a7('0x3b')][_0x07a7('0x5a')]({'where':{'id':_0xb7230d[_0x07a7('0x56')]['id']}})['then'](handleEntityNotFound(_0x2138e3,null))['then'](function(_0x27e01f){if(_0x27e01f){_0xb7230d[_0x07a7('0x5c')]['SmsAccountId']=_0x27e01f['id'];return db[_0x07a7('0x6b')][_0x07a7('0x5b')](_0xb7230d[_0x07a7('0x5c')]);}})[_0x07a7('0x32')](respondWithResult(_0x2138e3,null))['catch'](handleError(_0x2138e3,null));};exports[_0x07a7('0x6c')]=function(_0x5e6131,_0x2930c9,_0x167072){var _0x3a9c88={'raw':![],'where':{}};var _0xe9e1c2={};var _0x11b205={'count':0x0,'rows':[]};return db['SmsAccount'][_0x07a7('0x66')]({'where':{'id':_0x5e6131['params']['id']}})[_0x07a7('0x32')](handleEntityNotFound(_0x2930c9,null))[_0x07a7('0x32')](function(_0x5b5b4f){if(_0x5b5b4f){_0xe9e1c2[_0x07a7('0x3d')]=_['keys'](db[_0x07a7('0x6b')][_0x07a7('0x3c')]);_0xe9e1c2[_0x07a7('0x3e')]=_['keys'](_0x5e6131[_0x07a7('0x3e')]);_0xe9e1c2['filters']=_[_0x07a7('0x41')](_0xe9e1c2[_0x07a7('0x3d')],_0xe9e1c2[_0x07a7('0x3e')]);_0x3a9c88[_0x07a7('0x43')]=_['intersection'](_0xe9e1c2[_0x07a7('0x3d')],qs['fields'](_0x5e6131['query'][_0x07a7('0x42')]));_0x3a9c88[_0x07a7('0x43')]=_0x3a9c88['attributes'][_0x07a7('0x58')]?_0x3a9c88['attributes']:_0xe9e1c2[_0x07a7('0x3d')];if(!_0x5e6131['query']['hasOwnProperty']('nolimit')){_0x3a9c88['limit']=qs[_0x07a7('0x2e')](_0x5e6131['query'][_0x07a7('0x2e')]);_0x3a9c88[_0x07a7('0x2d')]=qs[_0x07a7('0x2d')](_0x5e6131[_0x07a7('0x3e')][_0x07a7('0x2d')]);}_0x3a9c88[_0x07a7('0x46')]=qs[_0x07a7('0x47')](_0x5e6131[_0x07a7('0x3e')][_0x07a7('0x47')]);_0x3a9c88['where']=qs['filters'](_[_0x07a7('0x49')](_0x5e6131[_0x07a7('0x3e')],_0xe9e1c2[_0x07a7('0x40')]));_0x3a9c88['where']['SmsAccountId']=_0x5b5b4f['id'];if(_0x5e6131['query'][_0x07a7('0x4a')]){_0x3a9c88[_0x07a7('0x48')]=_[_0x07a7('0x4b')](_0x3a9c88[_0x07a7('0x48')],{'$or':_['map'](_0x3a9c88[_0x07a7('0x43')],function(_0x1c95af){var _0xf220c0={};_0xf220c0[_0x1c95af]={'$like':'%'+_0x5e6131['query']['filter']+'%'};return _0xf220c0;})});}_0x3a9c88=_[_0x07a7('0x4b')]({},_0x3a9c88,_0x5e6131[_0x07a7('0x51')]);return db[_0x07a7('0x6b')][_0x07a7('0x2c')]({'where':_0x3a9c88[_0x07a7('0x48')]})[_0x07a7('0x32')](function(_0xfee95a){_0x11b205[_0x07a7('0x2c')]=_0xfee95a;if(_0x5e6131['query']['includeAll']){_0x3a9c88['include']=[{'all':!![]}];}return db['CannedAnswer'][_0x07a7('0x53')](_0x3a9c88);})['then'](function(_0x48161b){_0x11b205['rows']=_0x48161b;return _0x11b205;});}})[_0x07a7('0x32')](respondWithFilteredResult(_0x2930c9,_0x3a9c88))['catch'](handleError(_0x2930c9,null));};exports[_0x07a7('0x6d')]=function(_0x342fbd,_0xbeaca7,_0x29ab1d){return db[_0x07a7('0x3b')][_0x07a7('0x5a')]({'where':{'id':_0x342fbd['params']['id']}})[_0x07a7('0x32')](handleEntityNotFound(_0xbeaca7,null))[_0x07a7('0x32')](function(_0x18a24b){if(_0x18a24b){return _0x18a24b[_0x07a7('0x6d')](_0x342fbd[_0x07a7('0x3e')][_0x07a7('0x69')]);}})['then'](respondWithStatusCode(_0xbeaca7,null))[_0x07a7('0x55')](handleError(_0xbeaca7,null));};exports['notify']=function(_0x49b11e,_0x30f402,_0x4be88c){var _0xed69e5={'channel':_0x07a7('0x6e')};var _0x3c0c2e=[];var _0x5110cf=[];var _0x2531ae={};return db[_0x07a7('0x3b')][_0x07a7('0x5a')]({'where':{'id':_0x49b11e[_0x07a7('0x56')]['id']},'include':[{'model':db[_0x07a7('0x6f')],'as':_0x07a7('0x70')}]})[_0x07a7('0x32')](handleEntityNotFound(_0x30f402,null))[_0x07a7('0x32')](function(_0x4b0ef7){_0xed69e5[_0x07a7('0x71')]=_0x4b0ef7;_0xed69e5['applications']=_['orderBy'](_0x4b0ef7[_0x07a7('0x70')],[_0x07a7('0x72')],[_0x07a7('0x73')]);if(_0xed69e5[_0x07a7('0x71')]['Applications']){delete _0xed69e5[_0x07a7('0x71')][_0x07a7('0x70')];}return db[_0x07a7('0x74')]['describe']();})[_0x07a7('0x32')](function(_0x1456f6){if(!_0x1456f6){throw new db[(_0x07a7('0x75'))][(_0x07a7('0x76'))](_0x07a7('0x77'));}_0x3c0c2e=_['difference'](_['keys'](_0x1456f6),[_0x07a7('0x78'),'updatedAt']);_0x5110cf=_[_0x07a7('0x79')](_[_0x07a7('0x3f')](_0x1456f6),['createdAt',_0x07a7('0x7a'),'CompanyId',_0x07a7('0x7b')]);_0xed69e5[_0x07a7('0x5c')]={'mapKey':_0x07a7('0x7c')};if(_0xed69e5[_0x07a7('0x71')][_0x07a7('0x4d')]){switch(_0xed69e5[_0x07a7('0x71')][_0x07a7('0x4d')]){case _0x07a7('0x7d'):_0xed69e5[_0x07a7('0x5c')]['from']=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x7e')];_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x5c')]=_0x49b11e[_0x07a7('0x5c')]['Body'];_0xed69e5[_0x07a7('0x5c')]['messageId']=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x7f')];break;case _0x07a7('0x80'):_0xed69e5[_0x07a7('0x5c')]['from']='+'+_0x49b11e['body'][_0x07a7('0x81')];_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x5c')]=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x82')];break;case _0x07a7('0x83'):_0xed69e5[_0x07a7('0x5c')]['from']=_0x49b11e[_0x07a7('0x5c')]['from'];_0xed69e5['body']['body']=_0x49b11e[_0x07a7('0x5c')]['message'];break;case _0x07a7('0x84'):_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x85')]=_0x49b11e['body'][_0x07a7('0x85')];_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x5c')]=_0x49b11e['body']['body'];_0xed69e5[_0x07a7('0x5c')]['messageId']=_0x49b11e[_0x07a7('0x5c')]['message_id'];break;case'plivo':_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x85')]=_0x49b11e['body'][_0x07a7('0x7e')];_0xed69e5[_0x07a7('0x5c')]['body']=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x86')];_0xed69e5['body'][_0x07a7('0x87')]=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x88')];break;case'infobip':_0xed69e5['body'][_0x07a7('0x85')]='+'+_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x89')][0x0][_0x07a7('0x85')];_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x5c')]=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x89')][0x0][_0x07a7('0x82')];_0xed69e5['body'][_0x07a7('0x87')]=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x89')][0x0][_0x07a7('0x87')];break;case'csc':_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x85')]=_0x49b11e[_0x07a7('0x5c')]['originatingAddress'];_0xed69e5['body'][_0x07a7('0x5c')]=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x8a')][_0x07a7('0x28')];break;case _0x07a7('0x8b'):_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x85')]=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x8c')];_0xed69e5[_0x07a7('0x5c')]['body']=_0x49b11e['body']['text'];_0xed69e5[_0x07a7('0x5c')]['messageId']=_0x49b11e['body']['replyMessageId'];break;case _0x07a7('0x8d'):_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x85')]=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x85')];_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x5c')]=_0x49b11e[_0x07a7('0x5c')][_0x07a7('0x28')];_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x87')]=_0x49b11e['body'][_0x07a7('0x8e')];break;}}if(_0xed69e5[_0x07a7('0x5c')]['id']){delete _0xed69e5['body']['id'];}if(_[_0x07a7('0x8f')](_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x85')])){throw new db[(_0x07a7('0x75'))][(_0x07a7('0x76'))](_0x07a7('0x90'));}if(_[_0x07a7('0x8f')](_0xed69e5[_0x07a7('0x5c')]['body'])||_0xed69e5[_0x07a7('0x5c')]['body']===''){throw new db[(_0x07a7('0x75'))]['ValidationError']('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_['isNil'](_0xed69e5['body'][_0x07a7('0x91')])){throw new db[(_0x07a7('0x75'))][(_0x07a7('0x76'))]('mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x5110cf);}if(!_[_0x07a7('0x92')](_0x5110cf,_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x91')])){throw new db[(_0x07a7('0x75'))][(_0x07a7('0x76'))](_0x07a7('0x93')+_0x5110cf);}_0x2531ae[_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x91')]]=_0xed69e5[_0x07a7('0x5c')]['from'];return db[_0x07a7('0x94')][_0x07a7('0x5a')]({'where':{'id':_0xed69e5[_0x07a7('0x71')]['ListId']},'include':[{'model':db['CmContact'],'as':_0x07a7('0x95'),'where':_0x2531ae,'limit':0x1,'order':[[_0x07a7('0x7a'),'DESC']]}]});})[_0x07a7('0x32')](handleEntityNotFound(_0x30f402,null))[_0x07a7('0x32')](function(_0x146bb8){if(_0x146bb8){_0xed69e5['list']=_[_0x07a7('0x96')](_0x146bb8,[_0x07a7('0x95')]);if(_0x146bb8[_0x07a7('0x95')][_0x07a7('0x58')]){return _0x146bb8[_0x07a7('0x95')][0x0];}var _0x3e06b0=_[_0x07a7('0x1c')](_0xed69e5['body'],{'firstName':_0xed69e5[_0x07a7('0x5c')]['from'],'ListId':_0x146bb8['id']});_0x3e06b0[_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x91')]]=_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x85')];return db[_0x07a7('0x74')][_0x07a7('0x5b')](_0x3e06b0,{'fields':_0x3c0c2e,'raw':!![]});}})[_0x07a7('0x32')](handleEntityNotFound(_0x30f402,null))['then'](function(_0x2cb4fb){if(_0x2cb4fb){_0xed69e5[_0x07a7('0x97')]=_0x2cb4fb;var _0x23690d={'ContactId':_0x2cb4fb['id'],'phone':_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x85')],'SmsAccountId':_0x49b11e[_0x07a7('0x56')]['id']};var _0x421b90={'ContactId':_0x2cb4fb['id'],'SmsAccountId':_0x49b11e[_0x07a7('0x56')]['id'],'closed':![]};return db[_0x07a7('0x98')][_0x07a7('0x5a')]({'where':_0x421b90})[_0x07a7('0x32')](function(_0x563506){if(_0x563506){return[_0x563506,![]];}return db['SmsInteraction'][_0x07a7('0x5b')](_0x23690d)[_0x07a7('0x32')](function(_0x1daa5a){return[_0x1daa5a,!![]];});});}})[_0x07a7('0x99')](function(_0x599bc0,_0x1bfcdf){_0xed69e5[_0x07a7('0x9a')]=_0x599bc0[_0x07a7('0x34')]({'plain':!![]});_0xed69e5[_0x07a7('0x9a')]['created']=![];if(_0x1bfcdf){if(_0xed69e5['account'][_0x07a7('0x9b')]){_0xed69e5[_0x07a7('0x9c')][_0x07a7('0x9d')]({'id':0x0,'priority':_0xed69e5[_0x07a7('0x9c')]['length']+0x1,'app':_0x07a7('0x9e'),'appdata':_0x07a7('0x9f'),'interval':_0x07a7('0xa0')});}_0xed69e5[_0x07a7('0x9a')][_0x07a7('0xa1')]=!![];}return db['SmsMessage']['create']({'phone':_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x85')],'messageId':_0xed69e5[_0x07a7('0x5c')]['messageId'],'body':_0xed69e5[_0x07a7('0x5c')][_0x07a7('0x5c')],'SmsAccountId':_0x49b11e['params']['id'],'SmsInteractionId':_0x599bc0['id'],'direction':'in','ContactId':_0x599bc0[_0x07a7('0xa2')],'AttachmentId':_0xed69e5[_0x07a7('0x5c')][_0x07a7('0xa3')]});})[_0x07a7('0x32')](function(_0x12ec0e){_0xed69e5['message']=_0x12ec0e;if(_0xed69e5['interaction'][_0x07a7('0xa4')]){return db[_0x07a7('0xa5')][_0x07a7('0x5a')]({'attributes':['id','name'],'where':{'id':_0xed69e5['interaction'][_0x07a7('0xa4')]}})[_0x07a7('0x32')](function(_0xedca96){if(_0xedca96){_0xed69e5[_0x07a7('0x9c')]['unshift']({'id':0x0,'priority':0x0,'app':_0x07a7('0xa6'),'appdata':_0xedca96['name']+','+(_0xed69e5[_0x07a7('0x71')]['waitForTheAssignedAgent']||0xa),'interval':_0x07a7('0xa0')});}return respondWithRpcPromise(_0x07a7('0xa7'),'startRouting',_0xed69e5);});}return respondWithRpcPromise(_0x07a7('0xa7'),_0x07a7('0xa8'),_0xed69e5);})[_0x07a7('0x32')](function(_0x10d9a4){if(_0x10d9a4){var _0x5d0f31=0xc8;var _0xfa22a1='receiveMessage';logger[_0x07a7('0x23')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0xfa22a1,_0x5d0f31,_0x07a7('0xa9'));logger[_0x07a7('0xaa')](_0x07a7('0xab'),_0xfa22a1,_0x5d0f31,_0x07a7('0xa9'),JSON[_0x07a7('0x26')](_0x10d9a4));if(_0xed69e5['account'][_0x07a7('0x4d')]===_0x07a7('0x7d')){return _0x30f402[_0x07a7('0x2a')](_0x5d0f31)[_0x07a7('0xac')](_0x07a7('0xad'),_0x07a7('0xae'))[_0x07a7('0xaf')](_0x07a7('0xb0'));}else{return _0x30f402[_0x07a7('0x2a')](_0x5d0f31)[_0x07a7('0x2b')](_0x10d9a4);}}})[_0x07a7('0x55')](handleError(_0x30f402,null));};exports[_0x07a7('0xb1')]=function(_0x2bb80b,_0x41cdf6,_0x42b29b){return db['SmsAccount'][_0x07a7('0x66')]({'where':{'id':_0x2bb80b[_0x07a7('0x56')]['id']}})[_0x07a7('0x32')](handleEntityNotFound(_0x41cdf6,null))[_0x07a7('0x32')](function(_0x2cba4e){if(_0x2cba4e){return db[_0x07a7('0xb2')][_0x07a7('0xb3')](function(_0x44048f){return db[_0x07a7('0x6f')][_0x07a7('0x33')]({'where':{'SmsAccountId':_0x2bb80b[_0x07a7('0x56')]['id']},'transaction':_0x44048f})[_0x07a7('0x32')](function(_0x3ab8cc){var _0x221def=_[_0x07a7('0x4c')](_0x2bb80b[_0x07a7('0x5c')],function(_0x1640e7){_0x1640e7[_0x07a7('0x67')]=_0x2bb80b['params']['id'];return _0x1640e7;});return db[_0x07a7('0x6f')][_0x07a7('0xb4')](_0x221def,{'transaction':_0x44048f});});})[_0x07a7('0x32')](function(){return db[_0x07a7('0x6f')][_0x07a7('0xb5')]({'where':{'SmsAccountId':_0x2bb80b['params']['id']},'order':_0x07a7('0x72')});});}})[_0x07a7('0x32')](respondWithResult(_0x41cdf6,null))[_0x07a7('0x55')](handleError(_0x41cdf6,null));};exports[_0x07a7('0xb6')]=function(_0x50be93,_0x5c8cd5,_0x4e7384){var _0x3c967a={};var _0x1df89c={};var _0x50e852;var _0xb4c2f5;return db[_0x07a7('0x3b')][_0x07a7('0x66')]({'where':{'id':_0x50be93['params']['id']}})[_0x07a7('0x32')](handleEntityNotFound(_0x5c8cd5,null))[_0x07a7('0x32')](function(_0x2babf5){if(_0x2babf5){_0x50e852=_0x2babf5;_0x1df89c[_0x07a7('0x3d')]=_[_0x07a7('0x3f')](db[_0x07a7('0x6f')][_0x07a7('0x3c')]);_0x1df89c[_0x07a7('0x3e')]=_['keys'](_0x50be93[_0x07a7('0x3e')]);_0x1df89c[_0x07a7('0x40')]=_[_0x07a7('0x41')](_0x1df89c[_0x07a7('0x3d')],_0x1df89c[_0x07a7('0x3e')]);_0x3c967a[_0x07a7('0x43')]=_['intersection'](_0x1df89c[_0x07a7('0x3d')],qs[_0x07a7('0x42')](_0x50be93['query'][_0x07a7('0x42')]));_0x3c967a['attributes']=_0x3c967a[_0x07a7('0x43')][_0x07a7('0x58')]?_0x3c967a[_0x07a7('0x43')]:_0x1df89c[_0x07a7('0x3d')];_0x3c967a[_0x07a7('0x46')]=qs[_0x07a7('0x47')](_0x50be93[_0x07a7('0x3e')][_0x07a7('0x47')]);_0x3c967a['where']=qs[_0x07a7('0x40')](_[_0x07a7('0x49')](_0x50be93[_0x07a7('0x3e')],_0x1df89c[_0x07a7('0x40')]));if(_0x50be93[_0x07a7('0x3e')]['filter']){_0x3c967a['where']=_[_0x07a7('0x4b')](_0x3c967a[_0x07a7('0x48')],{'$or':_[_0x07a7('0x4c')](_0x3c967a[_0x07a7('0x43')],function(_0x37b6a0){var _0x43be60={};_0x43be60[_0x37b6a0]={'$like':'%'+_0x50be93[_0x07a7('0x3e')][_0x07a7('0x4a')]+'%'};return _0x43be60;})});}_0x3c967a=_[_0x07a7('0x4b')]({},_0x3c967a,_0x50be93[_0x07a7('0x51')]);return _0x50e852[_0x07a7('0xb6')](_0x3c967a);}})['then'](function(_0x2562b2){if(_0x2562b2){_0xb4c2f5=_0x2562b2['length'];if(!_0x50be93[_0x07a7('0x3e')]['hasOwnProperty']('nolimit')){_0x3c967a[_0x07a7('0x2e')]=qs[_0x07a7('0x2e')](_0x50be93[_0x07a7('0x3e')][_0x07a7('0x2e')]);_0x3c967a['offset']=qs[_0x07a7('0x2d')](_0x50be93[_0x07a7('0x3e')][_0x07a7('0x2d')]);}return _0x50e852[_0x07a7('0xb6')](_0x3c967a);}})[_0x07a7('0x32')](function(_0x4c5d43){if(_0x4c5d43){return _0x4c5d43?{'count':_0xb4c2f5,'rows':_0x4c5d43}:null;}})['then'](respondWithResult(_0x5c8cd5,null))['catch'](handleError(_0x5c8cd5,null));};exports['getInteractions']=function(_0xfe1fef,_0x334930,_0x5e8d68){var _0x23260d={'raw':![],'where':{}};var _0x3f3e00={};var _0x452b21={'count':0x0,'rows':[]};return db[_0x07a7('0x3b')][_0x07a7('0x66')]({'where':{'id':_0xfe1fef[_0x07a7('0x56')]['id']}})[_0x07a7('0x32')](handleEntityNotFound(_0x334930,null))['then'](function(_0x49f934){if(_0x49f934){_0x3f3e00[_0x07a7('0x3d')]=_[_0x07a7('0x3f')](db[_0x07a7('0x98')][_0x07a7('0x3c')]);_0x3f3e00[_0x07a7('0x3e')]=_[_0x07a7('0x3f')](_0xfe1fef[_0x07a7('0x3e')]);_0x3f3e00[_0x07a7('0x40')]=_[_0x07a7('0x41')](_0x3f3e00[_0x07a7('0x3d')],_0x3f3e00[_0x07a7('0x3e')]);_0x23260d['attributes']=_['intersection'](_0x3f3e00[_0x07a7('0x3d')],qs['fields'](_0xfe1fef['query'][_0x07a7('0x42')]));_0x23260d[_0x07a7('0x43')]=_0x23260d[_0x07a7('0x43')][_0x07a7('0x58')]?_0x23260d[_0x07a7('0x43')]:_0x3f3e00[_0x07a7('0x3d')];if(!_0xfe1fef[_0x07a7('0x3e')][_0x07a7('0x44')]('nolimit')){_0x23260d[_0x07a7('0x2e')]=qs[_0x07a7('0x2e')](_0xfe1fef['query'][_0x07a7('0x2e')]);_0x23260d[_0x07a7('0x2d')]=qs[_0x07a7('0x2d')](_0xfe1fef[_0x07a7('0x3e')][_0x07a7('0x2d')]);}_0x23260d[_0x07a7('0x46')]=qs[_0x07a7('0x47')](_0xfe1fef[_0x07a7('0x3e')][_0x07a7('0x47')]);_0x23260d[_0x07a7('0x48')]=qs[_0x07a7('0x40')](_[_0x07a7('0x49')](_0xfe1fef[_0x07a7('0x3e')],_0x3f3e00['filters']));_0x23260d[_0x07a7('0x48')][_0x07a7('0x67')]=_0x49f934['id'];if(_0xfe1fef[_0x07a7('0x3e')][_0x07a7('0x4a')]){_0x23260d[_0x07a7('0x48')]=_['merge'](_0x23260d[_0x07a7('0x48')],{'$or':_['map'](_0x23260d['attributes'],function(_0x176479){var _0x3b0869={};_0x3b0869[_0x176479]={'$like':'%'+_0xfe1fef['query'][_0x07a7('0x4a')]+'%'};return _0x3b0869;})});}_0x23260d=_[_0x07a7('0x4b')]({},_0x23260d,_0xfe1fef[_0x07a7('0x51')]);return db['SmsInteraction'][_0x07a7('0x2c')]({'where':_0x23260d[_0x07a7('0x48')]})[_0x07a7('0x32')](function(_0x2f8dc1){_0x452b21['count']=_0x2f8dc1;if(_0xfe1fef[_0x07a7('0x3e')]['includeAll']){_0x23260d['include']=[{'model':db[_0x07a7('0x74')],'as':_0x07a7('0xb7'),'required':![]},{'model':db[_0x07a7('0xa5')],'as':'Owner','attributes':[_0x07a7('0x39'),_0x07a7('0xb8'),'internal'],'required':![]},{'model':db[_0x07a7('0xb9')],'as':_0x07a7('0xba'),'attributes':['id',_0x07a7('0x39'),_0x07a7('0xbb')],'where':_0xfe1fef[_0x07a7('0x3e')]['tag']?{'id':_0xfe1fef[_0x07a7('0x3e')]['tag']}:undefined,'required':_0xfe1fef[_0x07a7('0x3e')][_0x07a7('0xbc')]?!![]:![]}];}return db['SmsInteraction'][_0x07a7('0x53')](_0x23260d);})[_0x07a7('0x32')](function(_0x52a822){_0x452b21[_0x07a7('0x54')]=_0x52a822;return _0x452b21;});}})['then'](respondWithFilteredResult(_0x334930,_0x23260d))['catch'](handleError(_0x334930,null));};exports['send']=function(_0x5927cc,_0x496307,_0x513f58){var _0x2af2cb,_0xe21687,_0xc0bcfd;if(_[_0x07a7('0x8f')](_0x5927cc[_0x07a7('0x5c')][_0x07a7('0x5c')])||_0x5927cc[_0x07a7('0x5c')][_0x07a7('0x5c')]===''){throw new db['Sequelize'][(_0x07a7('0x76'))](_0x07a7('0xbd'));}if(_[_0x07a7('0x8f')](_0x5927cc[_0x07a7('0x5c')]['to'])){throw new db[(_0x07a7('0x75'))][(_0x07a7('0x76'))](_0x07a7('0xbe'));}_0x2af2cb=_0x5927cc['body']['to'];return db[_0x07a7('0x3b')][_0x07a7('0x5a')]({'where':{'id':_0x5927cc['params']['id']},'include':[{'model':db[_0x07a7('0x94')],'as':_0x07a7('0xbf'),'include':[{'model':db[_0x07a7('0x74')],'as':_0x07a7('0x95'),'where':{'mobile':_0x2af2cb},'limit':0x1,'order':[[_0x07a7('0x7a'),_0x07a7('0xc0')]]}]}]})['then'](handleEntityNotFound(_0x496307,null))[_0x07a7('0x32')](function(_0x18ee08){if(_0x18ee08&&_0x18ee08['List']){_0xe21687=_0x18ee08[_0x07a7('0x34')]({'plain':!![]});if(_0xe21687[_0x07a7('0xbf')]&&_0xe21687[_0x07a7('0xbf')][_0x07a7('0x95')][_0x07a7('0x58')]){return _0xe21687[_0x07a7('0xbf')][_0x07a7('0x95')][0x0];}return db[_0x07a7('0x74')][_0x07a7('0x5b')](_['defaults'](_0x5927cc[_0x07a7('0x5c')],{'firstName':_0x2af2cb,'mobile':_0x2af2cb,'phone':_0x2af2cb,'ListId':_0xe21687[_0x07a7('0x7b')]}));}})['then'](handleEntityNotFound(_0x496307,null))[_0x07a7('0x32')](function(_0x174bfc){if(_0x174bfc){_0xc0bcfd=_0x174bfc;return db[_0x07a7('0x98')]['find']({'where':{'ContactId':_0xc0bcfd['id'],'closed':![],'SmsAccountId':_0xe21687['id']}})['then'](function(_0x2d6863){if(_0x2d6863){return[_0x2d6863,![]];}return db[_0x07a7('0x98')][_0x07a7('0x5b')]({'UserId':_0x5927cc['user']['id'],'ContactId':_0xc0bcfd['id'],'SmsAccountId':_0xe21687['id'],'phone':_0x2af2cb,'firstMsgDirection':_0x07a7('0xc1'),'Messages':[_[_0x07a7('0x4b')](_0x5927cc[_0x07a7('0x5c')],{'read':![],'body':_0x5927cc[_0x07a7('0x5c')][_0x07a7('0x5c')],'phone':_0x2af2cb,'SmsAccountId':_0xe21687['id'],'UserId':_0x5927cc[_0x07a7('0x5d')]['id'],'ContactId':_0xc0bcfd['id']})]},{'include':[{'model':db[_0x07a7('0xc2')],'as':_0x07a7('0xc3')}]})[_0x07a7('0x32')](function(_0x279b8c){return[_0x279b8c,!![]];});});}})[_0x07a7('0x99')](function(_0x4ac53d,_0x111253){if(_0x111253){return _0x4ac53d;}return db[_0x07a7('0xc2')][_0x07a7('0x5b')](_[_0x07a7('0x4b')](_0x5927cc[_0x07a7('0x5c')],{'read':![],'body':_0x5927cc[_0x07a7('0x5c')][_0x07a7('0x5c')],'phone':_0x2af2cb,'SmsAccountId':_0xe21687['id'],'SmsInteractionId':_0x4ac53d['id'],'UserId':_0x5927cc[_0x07a7('0x5d')]['id'],'ContactId':_0xc0bcfd['id']}))[_0x07a7('0x32')](function(_0x1899d0){_0x4ac53d[_0x07a7('0xc4')][_0x07a7('0xc3')]=[];_0x4ac53d['dataValues'][_0x07a7('0xc3')][_0x07a7('0x9d')](_0x1899d0[_0x07a7('0xc4')]);return _0x4ac53d;});})[_0x07a7('0x32')](respondWithResult(_0x496307,null))[_0x07a7('0x55')](handleError(_0x496307,null));};exports[_0x07a7('0x2a')]=function(_0x47f30e,_0x24c04b,_0x148e05){if(_0x47f30e[_0x07a7('0x5c')]['id']){delete _0x47f30e['body']['id'];}console['log'](_0x07a7('0xc5'),_0x47f30e[_0x07a7('0x5c')]);var _0x46c6e8,_0x1b5e80,_0x5c263f;return db[_0x07a7('0x3b')]['find']({'where':{'id':_0x47f30e[_0x07a7('0x56')]['id']}})[_0x07a7('0x32')](handleEntityNotFound(_0x24c04b,null))[_0x07a7('0x32')](function(_0x39a8e2){if(_0x39a8e2){_0x5c263f=_0x39a8e2;logger[_0x07a7('0xaa')]('SmsAccount,\x20%s,\x20%s,\x20%s','status','received\x20delivery\x20report\x20from',_0x39a8e2[_0x07a7('0x4d')],util[_0x07a7('0xc6')](_0x47f30e['body'],{'showHidden':![],'depth':null}));switch(_0x39a8e2['type']){case _0x07a7('0x80'):if(_0x47f30e['body'][_0x07a7('0xc7')]&&_0x47f30e['body'][_0x07a7('0x2a')]){_0x1b5e80=_0x47f30e[_0x07a7('0x5c')]['status'];return db[_0x07a7('0xc2')][_0x07a7('0x5a')]({'where':{'messageId':_0x47f30e[_0x07a7('0x5c')][_0x07a7('0xc7')]}});}break;case _0x07a7('0x83'):if(_0x47f30e['body'][_0x07a7('0xc8')]&&_0x47f30e[_0x07a7('0x5c')][_0x07a7('0xc9')]){_0x1b5e80=_0x47f30e['body'][_0x07a7('0xc9')];return db[_0x07a7('0xc2')][_0x07a7('0x5a')]({'where':{'messageId':_0x47f30e['body']['requestid']}});}break;case _0x07a7('0x84'):if(_0x47f30e[_0x07a7('0x5c')][_0x07a7('0xca')]&&_0x47f30e['body'][_0x07a7('0xcb')]){_0x1b5e80=_0x47f30e[_0x07a7('0x5c')][_0x07a7('0xcb')];return db[_0x07a7('0xc2')][_0x07a7('0x5a')]({'where':{'messageId':_0x47f30e['body'][_0x07a7('0xca')]}});}break;case'infobip':var _0x1f9da8=_0x47f30e[_0x07a7('0x5c')][_0x07a7('0x89')][0x0];if(_0x1f9da8[_0x07a7('0x87')]&&_0x1f9da8[_0x07a7('0x2a')]['groupName']==='DELIVERED'){_0x1b5e80=_0x1f9da8[_0x07a7('0x2a')][_0x07a7('0xcc')];return db['SmsMessage']['find']({'where':{'messageId':_0x1f9da8[_0x07a7('0x87')]}});}break;case'clickatell':if(_0x47f30e['body']['messageId']&&_0x47f30e[_0x07a7('0x5c')][_0x07a7('0x2a')]){_0x1b5e80=_0x47f30e[_0x07a7('0x5c')]['status'];return db[_0x07a7('0xc2')][_0x07a7('0x5a')]({'where':{'messageId':_0x47f30e[_0x07a7('0x5c')][_0x07a7('0x87')]}});}break;case _0x07a7('0x8d'):if(_0x47f30e[_0x07a7('0x5c')][_0x07a7('0xcd')]&&_0x47f30e['body'][_0x07a7('0x2a')]){_0x1b5e80=_0x47f30e['body'][_0x07a7('0x2a')];return db[_0x07a7('0xc2')][_0x07a7('0x5a')]({'where':{'messageId':_0x47f30e[_0x07a7('0x5c')][_0x07a7('0xcd')]}});}break;}}})['then'](handleEntityNotFound(_0x24c04b,null))['then'](function(_0x21cda3){if(_0x21cda3){_0x46c6e8=_0x21cda3;switch(_0x5c263f[_0x07a7('0x4d')]){case _0x07a7('0x80'):if(_0x1b5e80===_0x07a7('0xce')){return _0x46c6e8['update']({'read':!![]});}else{logger[_0x07a7('0x27')](_0x07a7('0xcf'),'status',_0x07a7('0x80'),util[_0x07a7('0xc6')](_0x47f30e['body'],{'showHidden':![],'depth':null}));}break;case _0x07a7('0x83'):if(_0x1b5e80==='1'){return _0x46c6e8[_0x07a7('0x31')]({'read':!![]});}else{logger[_0x07a7('0x27')](_0x07a7('0xcf'),_0x07a7('0x2a'),_0x07a7('0x80'),util[_0x07a7('0xc6')](_0x47f30e[_0x07a7('0x5c')],{'showHidden':![],'depth':null}));}break;case _0x07a7('0x84'):if(!_0x47f30e['body'][_0x07a7('0xd0')]&&_0x1b5e80>=0xc8&&_0x1b5e80<=0xce){return _0x46c6e8[_0x07a7('0x31')]({'read':!![]});}else{logger[_0x07a7('0x27')](_0x07a7('0xcf'),_0x07a7('0x2a'),_0x07a7('0x84'),util[_0x07a7('0xc6')](_0x47f30e['body'],{'showHidden':![],'depth':null}));}break;case _0x07a7('0xd1'):var _0xaed385=_0x47f30e[_0x07a7('0x5c')][_0x07a7('0x89')][0x0];if(_0xaed385['status']['groupName']===_0x07a7('0xce')){return _0x46c6e8[_0x07a7('0x31')]({'read':!![]});}else{logger[_0x07a7('0x27')](_0x07a7('0xcf'),_0x07a7('0x2a'),_0x07a7('0xd1'),util[_0x07a7('0xc6')](_0x47f30e['body'],{'showHidden':![],'depth':null}));}break;case'clickatell':if(_0x1b5e80=='DELIVERED_TO_GATEWAY'||_0x1b5e80==_0x07a7('0xd2')){return _0x46c6e8['update']({'read':!![]});}else{logger[_0x07a7('0x27')](_0x07a7('0xcf'),_0x07a7('0x2a'),_0x07a7('0x8b'),util[_0x07a7('0xc6')](_0x47f30e['body'],{'showHidden':![],'depth':null}));}break;case'intelepeer':if(_0x1b5e80===_0x07a7('0xd3')||_0x1b5e80===_0x07a7('0xd4')){return _0x46c6e8[_0x07a7('0x31')]({'read':!![]});}else{logger[_0x07a7('0x27')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x07a7('0x2a'),'intelepeer',util['inspect'](_0x47f30e['body'],{'showHidden':![],'depth':null}));}break;}return _0x46c6e8;}})[_0x07a7('0x32')](respondWithResult(_0x24c04b,null))[_0x07a7('0x55')](handleError(_0x24c04b,null));};exports[_0x07a7('0xd5')]=function(_0x32721a,_0x15ece3,_0x3c8199){var _0x25d1a8,_0x501c6,_0x3bb529;return db[_0x07a7('0x3b')]['find']({'where':{'id':_0x32721a['params']['id']}})[_0x07a7('0x32')](handleEntityNotFound(_0x15ece3,null))['then'](function(_0x4fb97b){if(_0x4fb97b){_0x3bb529=_0x4fb97b;logger[_0x07a7('0xaa')](_0x07a7('0xcf'),_0x07a7('0x2a'),_0x07a7('0xd6'),_0x4fb97b[_0x07a7('0x4d')],util['inspect'](_0x32721a[_0x07a7('0x3e')],{'showHidden':![],'depth':null}));switch(_0x4fb97b[_0x07a7('0x4d')]){case _0x07a7('0xd7'):if(_0x32721a[_0x07a7('0x3e')][_0x07a7('0xd8')]&&_0x32721a[_0x07a7('0x3e')][_0x07a7('0xd9')]){_0x501c6=_0x32721a[_0x07a7('0x3e')]['state'];return db[_0x07a7('0xc2')][_0x07a7('0x5a')]({'where':{'messageId':_0x32721a[_0x07a7('0x3e')][_0x07a7('0xd8')]}});}break;}}})[_0x07a7('0x32')](handleEntityNotFound(_0x15ece3,null))[_0x07a7('0x32')](function(_0x2df4d7){if(_0x2df4d7){_0x25d1a8=_0x2df4d7;switch(_0x3bb529[_0x07a7('0x4d')]){case'csc':if(_0x501c6==='2'||_0x501c6==='6'){return _0x25d1a8[_0x07a7('0x31')]({'read':!![]});}else{logger[_0x07a7('0x27')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x07a7('0x2a'),_0x07a7('0xd7'),util[_0x07a7('0xc6')](_0x32721a[_0x07a7('0x3e')],{'showHidden':![],'depth':null}));};break;}return _0x25d1a8;}})[_0x07a7('0x32')](respondWithResult(_0x15ece3,null))[_0x07a7('0x55')](handleError(_0x15ece3,null));};exports[_0x07a7('0xda')]=function(_0x528bcf,_0xdc7086,_0x4886b8){return db[_0x07a7('0x3b')][_0x07a7('0x5a')]({'where':{'id':_0x528bcf[_0x07a7('0x56')]['id']}})['then'](handleEntityNotFound(_0xdc7086,null))[_0x07a7('0x32')](function(_0x4e9fa3){if(_0x4e9fa3){return _0x4e9fa3[_0x07a7('0xda')](_0x528bcf[_0x07a7('0x5c')][_0x07a7('0x69')],_['omit'](_0x528bcf[_0x07a7('0x5c')],['ids','id'])||{})[_0x07a7('0x99')](function(_0x34c515){for(var _0x2a5f56=0x0;_0x2a5f56<_0x528bcf['body'][_0x07a7('0x69')]['length'];_0x2a5f56+=0x1){socket[_0x07a7('0xdb')](_0x07a7('0xdc'),{'UserId':_0x528bcf[_0x07a7('0x5c')][_0x07a7('0x69')][_0x2a5f56],'SmsAccountId':_0x528bcf[_0x07a7('0x56')]['id']});}return _0x34c515;});}})[_0x07a7('0x32')](respondWithResult(_0xdc7086,null))[_0x07a7('0x55')](handleError(_0xdc7086,null));};exports[_0x07a7('0xdd')]=function(_0xd709e3,_0x21da40,_0x513262){return db['SmsAccount'][_0x07a7('0x5a')]({'where':{'id':_0xd709e3['params']['id']}})[_0x07a7('0x32')](handleEntityNotFound(_0x21da40,null))['then'](function(_0x2e7557){if(_0x2e7557){return _0x2e7557[_0x07a7('0xdd')](_0xd709e3[_0x07a7('0x3e')][_0x07a7('0x69')])[_0x07a7('0x32')](function(){if(_['isArray'](_0xd709e3[_0x07a7('0x3e')][_0x07a7('0x69')])){for(var _0x4828d7=0x0;_0x4828d7<_0xd709e3['query'][_0x07a7('0x69')]['length'];_0x4828d7+=0x1){socket[_0x07a7('0xdb')](_0x07a7('0xde'),{'UserId':Number(_0xd709e3[_0x07a7('0x3e')][_0x07a7('0x69')][_0x4828d7]),'SmsAccountId':Number(_0xd709e3[_0x07a7('0x56')]['id'])});}}else{socket[_0x07a7('0xdb')]('userSmsAccount:remove',{'UserId':Number(_0xd709e3[_0x07a7('0x3e')][_0x07a7('0x69')]),'SmsAccountId':Number(_0xd709e3[_0x07a7('0x56')]['id'])});}});}})['then'](respondWithStatusCode(_0x21da40,null))[_0x07a7('0x55')](handleError(_0x21da40,null));};exports[_0x07a7('0xdf')]=function(_0x442361,_0x5c8660,_0x5042a4){var _0x4520de={};var _0xce1e73={};var _0x99676;var _0x358fed;return db['SmsAccount'][_0x07a7('0x66')]({'where':{'id':_0x442361[_0x07a7('0x56')]['id']}})[_0x07a7('0x32')](handleEntityNotFound(_0x5c8660,null))[_0x07a7('0x32')](function(_0x581e60){if(_0x581e60){_0x99676=_0x581e60;_0xce1e73[_0x07a7('0x3d')]=_[_0x07a7('0x3f')](db[_0x07a7('0xa5')][_0x07a7('0x3c')]);_0xce1e73['query']=_[_0x07a7('0x3f')](_0x442361[_0x07a7('0x3e')]);_0xce1e73[_0x07a7('0x40')]=_[_0x07a7('0x41')](_0xce1e73[_0x07a7('0x3d')],_0xce1e73[_0x07a7('0x3e')]);_0x4520de[_0x07a7('0x43')]=_[_0x07a7('0x41')](_0xce1e73[_0x07a7('0x3d')],qs['fields'](_0x442361['query'][_0x07a7('0x42')]));_0x4520de[_0x07a7('0x43')]=_0x4520de[_0x07a7('0x43')][_0x07a7('0x58')]?_0x4520de[_0x07a7('0x43')]:_0xce1e73['model'];_0x4520de[_0x07a7('0x46')]=qs['sort'](_0x442361[_0x07a7('0x3e')][_0x07a7('0x47')]);_0x4520de['where']=qs[_0x07a7('0x40')](_[_0x07a7('0x49')](_0x442361['query'],_0xce1e73[_0x07a7('0x40')]));if(_0x442361[_0x07a7('0x3e')][_0x07a7('0x4a')]){_0x4520de[_0x07a7('0x48')]=_[_0x07a7('0x4b')](_0x4520de[_0x07a7('0x48')],{'$or':_[_0x07a7('0x4c')](_0x4520de[_0x07a7('0x43')],function(_0x2caddb){var _0x38016d={};_0x38016d[_0x2caddb]={'$like':'%'+_0x442361[_0x07a7('0x3e')]['filter']+'%'};return _0x38016d;})});}_0x4520de=_['merge']({},_0x4520de,_0x442361[_0x07a7('0x51')]);return _0x99676[_0x07a7('0xdf')](_0x4520de);}})[_0x07a7('0x32')](function(_0x49f59f){if(_0x49f59f){_0x358fed=_0x49f59f[_0x07a7('0x58')];if(!_0x442361[_0x07a7('0x3e')][_0x07a7('0x44')](_0x07a7('0x45'))){_0x4520de['limit']=qs['limit'](_0x442361[_0x07a7('0x3e')][_0x07a7('0x2e')]);_0x4520de[_0x07a7('0x2d')]=qs['offset'](_0x442361[_0x07a7('0x3e')][_0x07a7('0x2d')]);}return _0x99676[_0x07a7('0xdf')](_0x4520de);}})[_0x07a7('0x32')](function(_0x2c5430){if(_0x2c5430){return _0x2c5430?{'count':_0x358fed,'rows':_0x2c5430}:null;}})[_0x07a7('0x32')](respondWithResult(_0x5c8660,null))[_0x07a7('0x55')](handleError(_0x5c8660,null));};
\ No newline at end of file
index 607ab03..fd95be5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x815b=['events','../../mysqldb','SmsAccount','setMaxListeners','save','remove','emit','hasOwnProperty','hook'];(function(_0x21a098,_0x204c09){var _0x3233a5=function(_0x192c82){while(--_0x192c82){_0x21a098['push'](_0x21a098['shift']());}};_0x3233a5(++_0x204c09);}(_0x815b,0xb4));var _0xb815=function(_0x1d2593,_0x454782){_0x1d2593=_0x1d2593-0x0;var _0xcd63d6=_0x815b[_0x1d2593];return _0xcd63d6;};'use strict';var EventEmitter=require(_0xb815('0x0'));var SmsAccount=require(_0xb815('0x1'))['db'][_0xb815('0x2')];var SmsAccountEvents=new EventEmitter();SmsAccountEvents[_0xb815('0x3')](0x0);var events={'afterCreate':_0xb815('0x4'),'afterUpdate':'update','afterDestroy':_0xb815('0x5')};function emitEvent(_0x5352a9){return function(_0x5b4516,_0x16c25e,_0xed30fe){SmsAccountEvents[_0xb815('0x6')](_0x5352a9+':'+_0x5b4516['id'],_0x5b4516);SmsAccountEvents['emit'](_0x5352a9,_0x5b4516);_0xed30fe(null);};}for(var e in events){if(events[_0xb815('0x7')](e)){var event=events[e];SmsAccount[_0xb815('0x8')](e,emitEvent(event));}}module['exports']=SmsAccountEvents;
\ No newline at end of file
+var _0xe002=['save','update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','SmsAccount'];(function(_0x1d57e2,_0x5a54a5){var _0x3f1650=function(_0x3470ad){while(--_0x3470ad){_0x1d57e2['push'](_0x1d57e2['shift']());}};_0x3f1650(++_0x5a54a5);}(_0xe002,0xf7));var _0x2e00=function(_0xce6f11,_0x3c3137){_0xce6f11=_0xce6f11-0x0;var _0x35b709=_0xe002[_0xce6f11];return _0x35b709;};'use strict';var EventEmitter=require(_0x2e00('0x0'));var SmsAccount=require(_0x2e00('0x1'))['db'][_0x2e00('0x2')];var SmsAccountEvents=new EventEmitter();SmsAccountEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x2e00('0x3'),'afterUpdate':_0x2e00('0x4'),'afterDestroy':_0x2e00('0x5')};function emitEvent(_0x5ea0f5){return function(_0x34f964,_0xba44f2,_0x2cb0ac){SmsAccountEvents[_0x2e00('0x6')](_0x5ea0f5+':'+_0x34f964['id'],_0x34f964);SmsAccountEvents[_0x2e00('0x6')](_0x5ea0f5,_0x34f964);_0x2cb0ac(null);};}for(var e in events){if(events[_0x2e00('0x7')](e)){var event=events[e];SmsAccount[_0x2e00('0x8')](e,emitEvent(event));}}module[_0x2e00('0x9')]=SmsAccountEvents;
\ No newline at end of file
index a9523d0..e0d0776 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xadeb=['api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./smsAccount.attributes','define','SmsAccount','sms_accounts','lodash','util','../../config/logger'];(function(_0x5a56fc,_0x366712){var _0xa77a54=function(_0x530102){while(--_0x530102){_0x5a56fc['push'](_0x5a56fc['shift']());}};_0xa77a54(++_0x366712);}(_0xadeb,0xcf));var _0xbade=function(_0x5506c9,_0x5a12c7){_0x5506c9=_0x5506c9-0x0;var _0x511ac4=_0xadeb[_0x5506c9];return _0x511ac4;};'use strict';var _=require(_0xbade('0x0'));var util=require(_0xbade('0x1'));var logger=require(_0xbade('0x2'))(_0xbade('0x3'));var moment=require(_0xbade('0x4'));var BPromise=require(_0xbade('0x5'));var rp=require(_0xbade('0x6'));var fs=require('fs');var path=require(_0xbade('0x7'));var rimraf=require(_0xbade('0x8'));var config=require(_0xbade('0x9'));var attributes=require(_0xbade('0xa'));module['exports']=function(_0x2eb133,_0x2c71a9){return _0x2eb133[_0xbade('0xb')](_0xbade('0xc'),attributes,{'tableName':_0xbade('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x01f0=['sms_accounts','lodash','util','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','exports','define','SmsAccount'];(function(_0x332a4e,_0x14b0f6){var _0x2ed829=function(_0xe0e69b){while(--_0xe0e69b){_0x332a4e['push'](_0x332a4e['shift']());}};_0x2ed829(++_0x14b0f6);}(_0x01f0,0x139));var _0x001f=function(_0x1c7192,_0x2993d1){_0x1c7192=_0x1c7192-0x0;var _0x3fe247=_0x01f0[_0x1c7192];return _0x3fe247;};'use strict';var _=require(_0x001f('0x0'));var util=require(_0x001f('0x1'));var logger=require('../../config/logger')(_0x001f('0x2'));var moment=require(_0x001f('0x3'));var BPromise=require(_0x001f('0x4'));var rp=require(_0x001f('0x5'));var fs=require('fs');var path=require(_0x001f('0x6'));var rimraf=require(_0x001f('0x7'));var config=require(_0x001f('0x8'));var attributes=require('./smsAccount.attributes');module[_0x001f('0x9')]=function(_0x1c97d5,_0x408dbe){return _0x1c97d5[_0x001f('0xa')](_0x001f('0xb'),attributes,{'tableName':_0x001f('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index aea4d44..3369cec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca29=['client','redis','defaults','socket.io-emitter','./smsAccount.socket','request','then','SmsAccount,\x20%s,\x20%s','request\x20sent','debug','SmsAccount,\x20%s,\x20%s,\x20%s','error','code','message','info','SmsAccount','find','options','raw','where','include','map','attributes','model','ShowSmsAccount','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xca29,0x1a6));var _0x9ca2=function(_0x5275b8,_0x51e5dd){_0x5275b8=_0x5275b8-0x0;var _0x568a9b=_0xca29[_0x5275b8];return _0x568a9b;};'use strict';var _=require(_0x9ca2('0x0'));var util=require(_0x9ca2('0x1'));var moment=require('moment');var BPromise=require(_0x9ca2('0x2'));var rs=require(_0x9ca2('0x3'));var fs=require('fs');var Redis=require(_0x9ca2('0x4'));var db=require(_0x9ca2('0x5'))['db'];var utils=require(_0x9ca2('0x6'));var logger=require(_0x9ca2('0x7'))(_0x9ca2('0x8'));var config=require(_0x9ca2('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x9ca2('0xa')]['http']({'port':0x232a});config[_0x9ca2('0xb')]=_[_0x9ca2('0xc')](config[_0x9ca2('0xb')],{'host':'localhost','port':0x18eb});var socket=require(_0x9ca2('0xd'))(new Redis(config[_0x9ca2('0xb')]));require(_0x9ca2('0xe'))['register'](socket);function respondWithRpcPromise(_0x173857,_0xc8b616,_0x566780){return new BPromise(function(_0x4d4373,_0x11aee5){return client[_0x9ca2('0xf')](_0x173857,_0x566780)[_0x9ca2('0x10')](function(_0x49b924){logger['info'](_0x9ca2('0x11'),_0xc8b616,_0x9ca2('0x12'));logger[_0x9ca2('0x13')](_0x9ca2('0x14'),_0xc8b616,_0x9ca2('0x12'),JSON['stringify'](_0x49b924));if(_0x49b924[_0x9ca2('0x15')]){if(_0x49b924[_0x9ca2('0x15')][_0x9ca2('0x16')]===0x1f4){logger[_0x9ca2('0x15')]('SmsAccount,\x20%s,\x20%s',_0xc8b616,_0x49b924[_0x9ca2('0x15')][_0x9ca2('0x17')]);return _0x11aee5(_0x49b924[_0x9ca2('0x15')]['message']);}logger[_0x9ca2('0x15')]('SmsAccount,\x20%s,\x20%s',_0xc8b616,_0x49b924[_0x9ca2('0x15')][_0x9ca2('0x17')]);return _0x4d4373(_0x49b924[_0x9ca2('0x15')][_0x9ca2('0x17')]);}else{logger[_0x9ca2('0x18')](_0x9ca2('0x11'),_0xc8b616,_0x9ca2('0x12'));_0x4d4373(_0x49b924['result'][_0x9ca2('0x17')]);}})['catch'](function(_0x37c535){logger[_0x9ca2('0x15')](_0x9ca2('0x11'),_0xc8b616,_0x37c535);_0x11aee5(_0x37c535);});});}exports['ShowSmsAccount']=function(_0x40a05c){var _0x205534=this;return new Promise(function(_0x574d08,_0x13f6b1){return db[_0x9ca2('0x19')][_0x9ca2('0x1a')]({'raw':_0x40a05c[_0x9ca2('0x1b')]?_0x40a05c[_0x9ca2('0x1b')][_0x9ca2('0x1c')]===undefined?!![]:![]:!![],'where':_0x40a05c['options']?_0x40a05c[_0x9ca2('0x1b')][_0x9ca2('0x1d')]||null:null,'attributes':_0x40a05c[_0x9ca2('0x1b')]?_0x40a05c[_0x9ca2('0x1b')]['attributes']||null:null,'include':_0x40a05c[_0x9ca2('0x1b')]?_0x40a05c[_0x9ca2('0x1b')][_0x9ca2('0x1e')]?_[_0x9ca2('0x1f')](_0x40a05c[_0x9ca2('0x1b')][_0x9ca2('0x1e')],function(_0x2adc66){return{'model':db[_0x2adc66['model']],'as':_0x2adc66['as'],'attributes':_0x2adc66[_0x9ca2('0x20')],'include':_0x2adc66[_0x9ca2('0x1e')]?_[_0x9ca2('0x1f')](_0x2adc66[_0x9ca2('0x1e')],function(_0x4cf03f){return{'model':db[_0x4cf03f[_0x9ca2('0x21')]],'as':_0x4cf03f['as'],'attributes':_0x4cf03f['attributes'],'include':_0x4cf03f[_0x9ca2('0x1e')]?_[_0x9ca2('0x1f')](_0x4cf03f['include'],function(_0x46e664){return{'model':db[_0x46e664[_0x9ca2('0x21')]],'as':_0x46e664['as'],'attributes':_0x46e664[_0x9ca2('0x20')]};}):[]};}):[]};}):[]:[]})[_0x9ca2('0x10')](function(_0x2544d4){logger['info'](_0x9ca2('0x22'),_0x40a05c);logger[_0x9ca2('0x13')](_0x9ca2('0x22'),_0x40a05c,JSON['stringify'](_0x2544d4));_0x574d08(_0x2544d4);})[_0x9ca2('0x23')](function(_0x589152){logger[_0x9ca2('0x15')](_0x9ca2('0x22'),_0x589152['message'],_0x40a05c);_0x13f6b1(_0x205534['error'](0x1f4,_0x589152[_0x9ca2('0x17')]));});});};
\ No newline at end of file
+var _0x09ef=['result','catch','SmsAccount','find','options','raw','where','attributes','map','include','model','ShowSmsAccount','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','register','then','info','SmsAccount,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message'];(function(_0x208d75,_0x92d742){var _0x382d27=function(_0x3aaba3){while(--_0x3aaba3){_0x208d75['push'](_0x208d75['shift']());}};_0x382d27(++_0x92d742);}(_0x09ef,0x81));var _0xf09e=function(_0x2d50ef,_0x225c12){_0x2d50ef=_0x2d50ef-0x0;var _0x587786=_0x09ef[_0x2d50ef];return _0x587786;};'use strict';var _=require(_0xf09e('0x0'));var util=require(_0xf09e('0x1'));var moment=require(_0xf09e('0x2'));var BPromise=require(_0xf09e('0x3'));var rs=require(_0xf09e('0x4'));var fs=require('fs');var Redis=require(_0xf09e('0x5'));var db=require(_0xf09e('0x6'))['db'];var utils=require(_0xf09e('0x7'));var logger=require('../../config/logger')(_0xf09e('0x8'));var config=require(_0xf09e('0x9'));var jayson=require(_0xf09e('0xa'));var client=jayson[_0xf09e('0xb')][_0xf09e('0xc')]({'port':0x232a});config[_0xf09e('0xd')]=_[_0xf09e('0xe')](config['redis'],{'host':_0xf09e('0xf'),'port':0x18eb});var socket=require(_0xf09e('0x10'))(new Redis(config['redis']));require('./smsAccount.socket')[_0xf09e('0x11')](socket);function respondWithRpcPromise(_0xe75a3,_0x4f60d4,_0x2a90de){return new BPromise(function(_0x2a9cf4,_0x3cac99){return client['request'](_0xe75a3,_0x2a90de)[_0xf09e('0x12')](function(_0x1b94e2){logger[_0xf09e('0x13')](_0xf09e('0x14'),_0x4f60d4,'request\x20sent');logger[_0xf09e('0x15')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x4f60d4,_0xf09e('0x16'),JSON[_0xf09e('0x17')](_0x1b94e2));if(_0x1b94e2['error']){if(_0x1b94e2[_0xf09e('0x18')][_0xf09e('0x19')]===0x1f4){logger[_0xf09e('0x18')](_0xf09e('0x14'),_0x4f60d4,_0x1b94e2['error'][_0xf09e('0x1a')]);return _0x3cac99(_0x1b94e2[_0xf09e('0x18')][_0xf09e('0x1a')]);}logger[_0xf09e('0x18')](_0xf09e('0x14'),_0x4f60d4,_0x1b94e2[_0xf09e('0x18')][_0xf09e('0x1a')]);return _0x2a9cf4(_0x1b94e2[_0xf09e('0x18')][_0xf09e('0x1a')]);}else{logger[_0xf09e('0x13')](_0xf09e('0x14'),_0x4f60d4,_0xf09e('0x16'));_0x2a9cf4(_0x1b94e2[_0xf09e('0x1b')][_0xf09e('0x1a')]);}})[_0xf09e('0x1c')](function(_0x25682b){logger[_0xf09e('0x18')](_0xf09e('0x14'),_0x4f60d4,_0x25682b);_0x3cac99(_0x25682b);});});}exports['ShowSmsAccount']=function(_0x51f1ee){var _0x379b91=this;return new Promise(function(_0x4ecbf9,_0x2991f9){return db[_0xf09e('0x1d')][_0xf09e('0x1e')]({'raw':_0x51f1ee['options']?_0x51f1ee[_0xf09e('0x1f')][_0xf09e('0x20')]===undefined?!![]:![]:!![],'where':_0x51f1ee[_0xf09e('0x1f')]?_0x51f1ee['options'][_0xf09e('0x21')]||null:null,'attributes':_0x51f1ee[_0xf09e('0x1f')]?_0x51f1ee[_0xf09e('0x1f')][_0xf09e('0x22')]||null:null,'include':_0x51f1ee[_0xf09e('0x1f')]?_0x51f1ee['options']['include']?_[_0xf09e('0x23')](_0x51f1ee[_0xf09e('0x1f')][_0xf09e('0x24')],function(_0x114140){return{'model':db[_0x114140[_0xf09e('0x25')]],'as':_0x114140['as'],'attributes':_0x114140['attributes'],'include':_0x114140[_0xf09e('0x24')]?_[_0xf09e('0x23')](_0x114140[_0xf09e('0x24')],function(_0x334d91){return{'model':db[_0x334d91['model']],'as':_0x334d91['as'],'attributes':_0x334d91[_0xf09e('0x22')],'include':_0x334d91['include']?_[_0xf09e('0x23')](_0x334d91[_0xf09e('0x24')],function(_0x2dc279){return{'model':db[_0x2dc279[_0xf09e('0x25')]],'as':_0x2dc279['as'],'attributes':_0x2dc279['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x56f35e){logger[_0xf09e('0x13')](_0xf09e('0x26'),_0x51f1ee);logger[_0xf09e('0x15')](_0xf09e('0x26'),_0x51f1ee,JSON[_0xf09e('0x17')](_0x56f35e));_0x4ecbf9(_0x56f35e);})[_0xf09e('0x1c')](function(_0x4cc9d8){logger['error'](_0xf09e('0x26'),_0x4cc9d8[_0xf09e('0x1a')],_0x51f1ee);_0x2991f9(_0x379b91[_0xf09e('0x18')](0x1f4,_0x4cc9d8[_0xf09e('0x1a')]));});});};
\ No newline at end of file
index 53d8640..3913854 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf1f7=['./smsAccount.events','save','remove','update','emit','removeListener','length','smsAccount:'];(function(_0x208d75,_0x92d742){var _0x382d27=function(_0x3aaba3){while(--_0x3aaba3){_0x208d75['push'](_0x208d75['shift']());}};_0x382d27(++_0x92d742);}(_0xf1f7,0x160));var _0x7f1f=function(_0x5f1979,_0x19567c){_0x5f1979=_0x5f1979-0x0;var _0xca1c19=_0xf1f7[_0x5f1979];return _0xca1c19;};'use strict';var SmsAccountEvents=require(_0x7f1f('0x0'));var events=[_0x7f1f('0x1'),_0x7f1f('0x2'),_0x7f1f('0x3')];function createListener(_0x49d240,_0x513d33){return function(_0x1e5bab){_0x513d33[_0x7f1f('0x4')](_0x49d240,_0x1e5bab);};}function removeListener(_0x3e7e65,_0x406780){return function(){SmsAccountEvents[_0x7f1f('0x5')](_0x3e7e65,_0x406780);};}exports['register']=function(_0x16cbea){for(var _0x24e2cf=0x0,_0x220065=events[_0x7f1f('0x6')];_0x24e2cf<_0x220065;_0x24e2cf++){var _0x46aec1=events[_0x24e2cf];var _0x158b80=createListener(_0x7f1f('0x7')+_0x46aec1,_0x16cbea);SmsAccountEvents['on'](_0x46aec1,_0x158b80);}};
\ No newline at end of file
+var _0x3a36=['length','smsAccount:','save','remove','update'];(function(_0xe429f8,_0xb5ddb4){var _0x439723=function(_0x3e20ab){while(--_0x3e20ab){_0xe429f8['push'](_0xe429f8['shift']());}};_0x439723(++_0xb5ddb4);}(_0x3a36,0x1c4));var _0x63a3=function(_0x326e71,_0x4dd026){_0x326e71=_0x326e71-0x0;var _0x2a8faf=_0x3a36[_0x326e71];return _0x2a8faf;};'use strict';var SmsAccountEvents=require('./smsAccount.events');var events=[_0x63a3('0x0'),_0x63a3('0x1'),_0x63a3('0x2')];function createListener(_0x5986ad,_0xe74d9d){return function(_0x238ac8){_0xe74d9d['emit'](_0x5986ad,_0x238ac8);};}function removeListener(_0x1dd225,_0x25d590){return function(){SmsAccountEvents['removeListener'](_0x1dd225,_0x25d590);};}exports['register']=function(_0x5b5ab4){for(var _0x5d699c=0x0,_0x296f28=events[_0x63a3('0x3')];_0x5d699c<_0x296f28;_0x5d699c++){var _0x4449c0=events[_0x5d699c];var _0x4c6b2e=createListener(_0x63a3('0x4')+_0x4449c0,_0x5b5ab4);SmsAccountEvents['on'](_0x4449c0,_0x4c6b2e);}};
\ No newline at end of file
index 73284fc..b5a7522 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6a77=['update','delete','multer','path','connect-timeout','express','Router','get','isAuthenticated','index','/:id','post','put'];(function(_0x2980de,_0x1426a4){var _0x81a4ca=function(_0x19040e){while(--_0x19040e){_0x2980de['push'](_0x2980de['shift']());}};_0x81a4ca(++_0x1426a4);}(_0x6a77,0x91));var _0x76a7=function(_0x373842,_0x839ac0){_0x373842=_0x373842-0x0;var _0x21c09e=_0x6a77[_0x373842];return _0x21c09e;};'use strict';var multer=require(_0x76a7('0x0'));var util=require('util');var path=require(_0x76a7('0x1'));var timeout=require(_0x76a7('0x2'));var express=require(_0x76a7('0x3'));var router=express[_0x76a7('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./smsApplication.controller');router[_0x76a7('0x5')]('/',auth[_0x76a7('0x6')](),controller[_0x76a7('0x7')]);router[_0x76a7('0x5')](_0x76a7('0x8'),auth['isAuthenticated'](),controller['show']);router[_0x76a7('0x9')]('/',auth[_0x76a7('0x6')](),controller['create']);router[_0x76a7('0xa')]('/:id',auth[_0x76a7('0x6')](),controller[_0x76a7('0xb')]);router[_0x76a7('0xc')]('/:id',auth[_0x76a7('0x6')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0xd7b5=['create','put','update','delete','destroy','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','show','post'];(function(_0x437380,_0x272fdc){var _0x271842=function(_0x5898f5){while(--_0x5898f5){_0x437380['push'](_0x437380['shift']());}};_0x271842(++_0x272fdc);}(_0xd7b5,0xfd));var _0x5d7b=function(_0x20c4aa,_0x524d00){_0x20c4aa=_0x20c4aa-0x0;var _0x14f929=_0xd7b5[_0x20c4aa];return _0x14f929;};'use strict';var multer=require(_0x5d7b('0x0'));var util=require(_0x5d7b('0x1'));var path=require(_0x5d7b('0x2'));var timeout=require('connect-timeout');var express=require(_0x5d7b('0x3'));var router=express['Router']();var auth=require(_0x5d7b('0x4'));var interaction=require(_0x5d7b('0x5'));var config=require(_0x5d7b('0x6'));var controller=require('./smsApplication.controller');router[_0x5d7b('0x7')]('/',auth[_0x5d7b('0x8')](),controller[_0x5d7b('0x9')]);router['get'](_0x5d7b('0xa'),auth[_0x5d7b('0x8')](),controller[_0x5d7b('0xb')]);router[_0x5d7b('0xc')]('/',auth[_0x5d7b('0x8')](),controller[_0x5d7b('0xd')]);router[_0x5d7b('0xe')](_0x5d7b('0xa'),auth[_0x5d7b('0x8')](),controller[_0x5d7b('0xf')]);router[_0x5d7b('0x10')](_0x5d7b('0xa'),auth[_0x5d7b('0x8')](),controller[_0x5d7b('0x11')]);module[_0x5d7b('0x12')]=router;
\ No newline at end of file
index 9a13a77..fe9af8f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x023e=['*,*,*,*','sequelize','TEXT','STRING'];(function(_0x1d9c8f,_0x46587d){var _0x3142a8=function(_0x2ef5a1){while(--_0x2ef5a1){_0x1d9c8f['push'](_0x1d9c8f['shift']());}};_0x3142a8(++_0x46587d);}(_0x023e,0xc5));var _0xe023=function(_0xb47ad7,_0x38df42){_0xb47ad7=_0xb47ad7-0x0;var _0x44d500=_0x023e[_0xb47ad7];return _0x44d500;};'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
+var _0x0e5a=['TEXT','STRING','sequelize','exports','noop'];(function(_0x2cec02,_0x570e04){var _0x30f1ac=function(_0x34d15f){while(--_0x34d15f){_0x2cec02['push'](_0x2cec02['shift']());}};_0x30f1ac(++_0x570e04);}(_0x0e5a,0x70));var _0xa0e5=function(_0x5d61f8,_0xa16c7){_0x5d61f8=_0x5d61f8-0x0;var _0x920d78=_0x0e5a[_0x5d61f8];return _0x920d78;};'use strict';var Sequelize=require(_0xa0e5('0x0'));module[_0xa0e5('0x1')]={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xa0e5('0x2')},'appdata':{'type':Sequelize[_0xa0e5('0x3')]()},'description':{'type':Sequelize[_0xa0e5('0x4')]},'interval':{'type':Sequelize[_0xa0e5('0x4')],'defaultValue':'*,*,*,*'}};
\ No newline at end of file
index b91c6d7..f01a15c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbe10=['bluebird','mustache','util','path','sox','to-csv','lodash','squel','jsforce','desk.js','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','status','end','json','offset','limit','Content-Range','apply','reject','save','update','then','destroy','sendStatus','error','stack','name','index','SmsApplication','rawAttributes','query','keys','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','map','type','VIRTUAL','field','count','includeAll','include','findAll','rows','catch','show','params','options','find','create','body','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment'];(function(_0x43ce4a,_0x53a552){var _0x386a08=function(_0x3275d9){while(--_0x3275d9){_0x43ce4a['push'](_0x43ce4a['shift']());}};_0x386a08(++_0x53a552);}(_0xbe10,0x1b6));var _0x0be1=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xbe10[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0be1('0x0'));var rimraf=require(_0x0be1('0x1'));var zipdir=require(_0x0be1('0x2'));var jsonpatch=require(_0x0be1('0x3'));var rp=require(_0x0be1('0x4'));var moment=require(_0x0be1('0x5'));var BPromise=require(_0x0be1('0x6'));var Mustache=require(_0x0be1('0x7'));var util=require(_0x0be1('0x8'));var path=require(_0x0be1('0x9'));var sox=require(_0x0be1('0xa'));var csv=require(_0x0be1('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x0be1('0xc'));var squel=require(_0x0be1('0xd'));var crypto=require('crypto');var jsforce=require(_0x0be1('0xe'));var deskjs=require(_0x0be1('0xf'));var toCsv=require(_0x0be1('0xb'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require(_0x0be1('0x10'));var authService=require('../../components/auth/service');var qs=require(_0x0be1('0x11'));var hardwareService=require(_0x0be1('0x12'));var logger=require(_0x0be1('0x13'))(_0x0be1('0x14'));var utils=require('../../config/utils');var config=require(_0x0be1('0x15'));var db=require(_0x0be1('0x16'))['db'];function respondWithStatusCode(_0x37b406,_0x584ccf){_0x584ccf=_0x584ccf||0xcc;return function(_0x3a5765){if(_0x3a5765){return _0x37b406['sendStatus'](_0x584ccf);}return _0x37b406[_0x0be1('0x17')](_0x584ccf)[_0x0be1('0x18')]();};}function respondWithResult(_0x1a3b66,_0x217956){_0x217956=_0x217956||0xc8;return function(_0x2e9325){if(_0x2e9325){return _0x1a3b66[_0x0be1('0x17')](_0x217956)[_0x0be1('0x19')](_0x2e9325);}};}function respondWithFilteredResult(_0x2109d9,_0x39599a){return function(_0x1d98d7){if(_0x1d98d7){var _0x5b4b2e=_0x1d98d7['count'],_0x2b3f42=_0x39599a['offset'],_0x2333af=_0x39599a[_0x0be1('0x1a')]+_0x39599a[_0x0be1('0x1b')],_0x5dcae6;if(_0x2333af>=_0x5b4b2e){_0x2333af=_0x5b4b2e;_0x5dcae6=0xc8;}else{_0x5dcae6=0xce;}_0x2109d9['status'](_0x5dcae6);return _0x2109d9['set'](_0x0be1('0x1c'),_0x2b3f42+'-'+_0x2333af+'/'+_0x5b4b2e)[_0x0be1('0x19')](_0x1d98d7);}return null;};}function patchUpdates(_0x577cfd){return function(_0x53ed05){try{jsonpatch[_0x0be1('0x1d')](_0x53ed05,_0x577cfd,!![]);}catch(_0x1ceb29){return BPromise[_0x0be1('0x1e')](_0x1ceb29);}return _0x53ed05[_0x0be1('0x1f')]();};}function saveUpdates(_0x463b1d,_0x1ae5fe){return function(_0x17e6eb){if(_0x17e6eb){return _0x17e6eb[_0x0be1('0x20')](_0x463b1d)[_0x0be1('0x21')](function(_0x24e702){return _0x24e702;});}return null;};}function removeEntity(_0x206005,_0xd93dcf){return function(_0x39f081){if(_0x39f081){return _0x39f081[_0x0be1('0x22')]()[_0x0be1('0x21')](function(){_0x206005['status'](0xcc)[_0x0be1('0x18')]();});}};}function handleEntityNotFound(_0xad8142,_0x10ceca){return function(_0x259d19){if(!_0x259d19){_0xad8142[_0x0be1('0x23')](0x194);}return _0x259d19;};}function handleError(_0x3d081f,_0x3c313c){_0x3c313c=_0x3c313c||0x1f4;return function(_0x133aaf){logger[_0x0be1('0x24')](_0x133aaf[_0x0be1('0x25')]);if(_0x133aaf['name']){delete _0x133aaf[_0x0be1('0x26')];}_0x3d081f[_0x0be1('0x17')](_0x3c313c)['send'](_0x133aaf);};}exports[_0x0be1('0x27')]=function(_0x1234f7,_0x12ae6f){var _0xb161b6={},_0xcba637={},_0x27bb8a={'count':0x0,'rows':[]};var _0x3720d0=db[_0x0be1('0x28')][_0x0be1('0x29')];_0xcba637['model']=_['keys'](_0x3720d0);_0xcba637[_0x0be1('0x2a')]=_[_0x0be1('0x2b')](_0x1234f7['query']);_0xcba637[_0x0be1('0x2c')]=_[_0x0be1('0x2d')](_0xcba637[_0x0be1('0x2e')],_0xcba637[_0x0be1('0x2a')]);_0xb161b6['attributes']=_['intersection'](_0xcba637[_0x0be1('0x2e')],qs[_0x0be1('0x2f')](_0x1234f7[_0x0be1('0x2a')][_0x0be1('0x2f')]));_0xb161b6[_0x0be1('0x30')]=_0xb161b6[_0x0be1('0x30')][_0x0be1('0x31')]?_0xb161b6[_0x0be1('0x30')]:_0xcba637[_0x0be1('0x2e')];if(!_0x1234f7[_0x0be1('0x2a')][_0x0be1('0x32')](_0x0be1('0x33'))){_0xb161b6['limit']=qs[_0x0be1('0x1b')](_0x1234f7[_0x0be1('0x2a')][_0x0be1('0x1b')]);_0xb161b6[_0x0be1('0x1a')]=qs['offset'](_0x1234f7[_0x0be1('0x2a')][_0x0be1('0x1a')]);}_0xb161b6[_0x0be1('0x34')]=qs[_0x0be1('0x35')](_0x1234f7[_0x0be1('0x2a')]['sort']);_0xb161b6['where']=qs[_0x0be1('0x2c')](_[_0x0be1('0x36')](_0x1234f7['query'],_0xcba637[_0x0be1('0x2c')]));if(_0x1234f7[_0x0be1('0x2a')][_0x0be1('0x37')]){_0xb161b6[_0x0be1('0x38')]=_[_0x0be1('0x39')](_0xb161b6[_0x0be1('0x38')],{'$or':_[_0x0be1('0x3a')](_0x3720d0,function(_0xfbf634){if(_0xfbf634[_0x0be1('0x3b')]['key']!==_0x0be1('0x3c')){var _0x4341d8={};_0x4341d8[_0xfbf634[_0x0be1('0x3d')]]={'$like':'%'+_0x1234f7[_0x0be1('0x2a')][_0x0be1('0x37')]+'%'};return _0x4341d8;}})});}_0xb161b6=_[_0x0be1('0x39')]({},_0xb161b6,_0x1234f7['options']);var _0x496043={'where':_0xb161b6['where']};return db[_0x0be1('0x28')][_0x0be1('0x3e')](_0x496043)[_0x0be1('0x21')](function(_0x299fab){_0x27bb8a['count']=_0x299fab;if(_0x1234f7[_0x0be1('0x2a')][_0x0be1('0x3f')]){_0xb161b6[_0x0be1('0x40')]=[{'all':!![]}];}return db[_0x0be1('0x28')][_0x0be1('0x41')](_0xb161b6);})['then'](function(_0x4b5ffe){_0x27bb8a[_0x0be1('0x42')]=_0x4b5ffe;return _0x27bb8a;})[_0x0be1('0x21')](respondWithFilteredResult(_0x12ae6f,_0xb161b6))[_0x0be1('0x43')](handleError(_0x12ae6f,null));};exports[_0x0be1('0x44')]=function(_0x5e95cf,_0x2fd2ce){var _0x4a4165={'raw':!![],'where':{'id':_0x5e95cf[_0x0be1('0x45')]['id']}},_0x269339={};_0x269339['model']=_['keys'](db[_0x0be1('0x28')][_0x0be1('0x29')]);_0x269339['query']=_[_0x0be1('0x2b')](_0x5e95cf[_0x0be1('0x2a')]);_0x269339[_0x0be1('0x2c')]=_['intersection'](_0x269339[_0x0be1('0x2e')],_0x269339[_0x0be1('0x2a')]);_0x4a4165[_0x0be1('0x30')]=_['intersection'](_0x269339[_0x0be1('0x2e')],qs[_0x0be1('0x2f')](_0x5e95cf[_0x0be1('0x2a')][_0x0be1('0x2f')]));_0x4a4165['attributes']=_0x4a4165[_0x0be1('0x30')][_0x0be1('0x31')]?_0x4a4165[_0x0be1('0x30')]:_0x269339[_0x0be1('0x2e')];if(_0x5e95cf['query'][_0x0be1('0x3f')]){_0x4a4165['include']=[{'all':!![]}];}_0x4a4165=_['merge']({},_0x4a4165,_0x5e95cf[_0x0be1('0x46')]);return db[_0x0be1('0x28')][_0x0be1('0x47')](_0x4a4165)[_0x0be1('0x21')](handleEntityNotFound(_0x2fd2ce,null))['then'](respondWithResult(_0x2fd2ce,null))[_0x0be1('0x43')](handleError(_0x2fd2ce,null));};exports['create']=function(_0x2b6d71,_0xa441cb){return db['SmsApplication'][_0x0be1('0x48')](_0x2b6d71[_0x0be1('0x49')],{})['then'](respondWithResult(_0xa441cb,0xc9))[_0x0be1('0x43')](handleError(_0xa441cb,null));};exports['update']=function(_0x5c730b,_0x97c710){if(_0x5c730b[_0x0be1('0x49')]['id']){delete _0x5c730b[_0x0be1('0x49')]['id'];}return db[_0x0be1('0x28')][_0x0be1('0x47')]({'where':{'id':_0x5c730b[_0x0be1('0x45')]['id']}})['then'](handleEntityNotFound(_0x97c710,null))[_0x0be1('0x21')](saveUpdates(_0x5c730b['body'],null))['then'](respondWithResult(_0x97c710,null))['catch'](handleError(_0x97c710,null));};exports[_0x0be1('0x22')]=function(_0x119ac4,_0x421415){return db[_0x0be1('0x28')][_0x0be1('0x47')]({'where':{'id':_0x119ac4[_0x0be1('0x45')]['id']}})[_0x0be1('0x21')](handleEntityNotFound(_0x421415,null))['then'](removeEntity(_0x421415,null))[_0x0be1('0x43')](handleError(_0x421415,null));};
\ No newline at end of file
+var _0x62d8=['options','includeAll','include','findAll','rows','catch','show','rawAttributes','create','body','find','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','lodash','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','apply','reject','save','update','then','error','stack','name','send','SmsApplication','model','query','keys','filters','intersection','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','key','field'];(function(_0x349a9e,_0x473cb8){var _0x24c207=function(_0x22f148){while(--_0x22f148){_0x349a9e['push'](_0x349a9e['shift']());}};_0x24c207(++_0x473cb8);}(_0x62d8,0xdb));var _0x862d=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x62d8[_0x501510];return _0x1e6ee5;};'use strict';var pdf=require(_0x862d('0x0'));var emlformat=require(_0x862d('0x1'));var rimraf=require(_0x862d('0x2'));var zipdir=require(_0x862d('0x3'));var jsonpatch=require(_0x862d('0x4'));var rp=require(_0x862d('0x5'));var moment=require(_0x862d('0x6'));var BPromise=require(_0x862d('0x7'));var Mustache=require(_0x862d('0x8'));var util=require(_0x862d('0x9'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x862d('0xa'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x862d('0xb'));var deskjs=require(_0x862d('0xc'));var toCsv=require('to-csv');var querystring=require(_0x862d('0xd'));var Papa=require(_0x862d('0xe'));var Redis=require('ioredis');var authService=require(_0x862d('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x862d('0x10'));var logger=require('../../config/logger')(_0x862d('0x11'));var utils=require(_0x862d('0x12'));var config=require(_0x862d('0x13'));var db=require(_0x862d('0x14'))['db'];function respondWithStatusCode(_0x1df7ad,_0x960a10){_0x960a10=_0x960a10||0xcc;return function(_0x4db4c0){if(_0x4db4c0){return _0x1df7ad[_0x862d('0x15')](_0x960a10);}return _0x1df7ad[_0x862d('0x16')](_0x960a10)[_0x862d('0x17')]();};}function respondWithResult(_0x11a1f3,_0x1c2b9c){_0x1c2b9c=_0x1c2b9c||0xc8;return function(_0x11ed77){if(_0x11ed77){return _0x11a1f3[_0x862d('0x16')](_0x1c2b9c)[_0x862d('0x18')](_0x11ed77);}};}function respondWithFilteredResult(_0x382584,_0x207533){return function(_0x45cb35){if(_0x45cb35){var _0x3fc245=_0x45cb35[_0x862d('0x19')],_0x488007=_0x207533[_0x862d('0x1a')],_0x454637=_0x207533[_0x862d('0x1a')]+_0x207533['limit'],_0xd2cbe3;if(_0x454637>=_0x3fc245){_0x454637=_0x3fc245;_0xd2cbe3=0xc8;}else{_0xd2cbe3=0xce;}_0x382584[_0x862d('0x16')](_0xd2cbe3);return _0x382584['set']('Content-Range',_0x488007+'-'+_0x454637+'/'+_0x3fc245)[_0x862d('0x18')](_0x45cb35);}return null;};}function patchUpdates(_0xc7f93c){return function(_0x47805c){try{jsonpatch[_0x862d('0x1b')](_0x47805c,_0xc7f93c,!![]);}catch(_0xb09d8){return BPromise[_0x862d('0x1c')](_0xb09d8);}return _0x47805c[_0x862d('0x1d')]();};}function saveUpdates(_0x5a672a,_0x538609){return function(_0x440933){if(_0x440933){return _0x440933[_0x862d('0x1e')](_0x5a672a)[_0x862d('0x1f')](function(_0x3b123f){return _0x3b123f;});}return null;};}function removeEntity(_0x5c4175,_0x409d44){return function(_0x475236){if(_0x475236){return _0x475236['destroy']()[_0x862d('0x1f')](function(){_0x5c4175[_0x862d('0x16')](0xcc)[_0x862d('0x17')]();});}};}function handleEntityNotFound(_0x40bf3a,_0x4f1788){return function(_0x4e20be){if(!_0x4e20be){_0x40bf3a[_0x862d('0x15')](0x194);}return _0x4e20be;};}function handleError(_0x253994,_0x29bf9b){_0x29bf9b=_0x29bf9b||0x1f4;return function(_0x225da1){logger[_0x862d('0x20')](_0x225da1[_0x862d('0x21')]);if(_0x225da1[_0x862d('0x22')]){delete _0x225da1[_0x862d('0x22')];}_0x253994[_0x862d('0x16')](_0x29bf9b)[_0x862d('0x23')](_0x225da1);};}exports['index']=function(_0x52c7f2,_0x278b4b){var _0x500668={},_0x3f71d5={},_0x5c485c={'count':0x0,'rows':[]};var _0xeed67c=db[_0x862d('0x24')]['rawAttributes'];_0x3f71d5[_0x862d('0x25')]=_['keys'](_0xeed67c);_0x3f71d5[_0x862d('0x26')]=_[_0x862d('0x27')](_0x52c7f2[_0x862d('0x26')]);_0x3f71d5[_0x862d('0x28')]=_[_0x862d('0x29')](_0x3f71d5[_0x862d('0x25')],_0x3f71d5[_0x862d('0x26')]);_0x500668[_0x862d('0x2a')]=_[_0x862d('0x29')](_0x3f71d5['model'],qs['fields'](_0x52c7f2['query'][_0x862d('0x2b')]));_0x500668[_0x862d('0x2a')]=_0x500668[_0x862d('0x2a')]['length']?_0x500668[_0x862d('0x2a')]:_0x3f71d5[_0x862d('0x25')];if(!_0x52c7f2[_0x862d('0x26')][_0x862d('0x2c')](_0x862d('0x2d'))){_0x500668[_0x862d('0x2e')]=qs[_0x862d('0x2e')](_0x52c7f2[_0x862d('0x26')][_0x862d('0x2e')]);_0x500668['offset']=qs[_0x862d('0x1a')](_0x52c7f2[_0x862d('0x26')][_0x862d('0x1a')]);}_0x500668[_0x862d('0x2f')]=qs[_0x862d('0x30')](_0x52c7f2[_0x862d('0x26')][_0x862d('0x30')]);_0x500668[_0x862d('0x31')]=qs[_0x862d('0x28')](_[_0x862d('0x32')](_0x52c7f2[_0x862d('0x26')],_0x3f71d5[_0x862d('0x28')]));if(_0x52c7f2[_0x862d('0x26')][_0x862d('0x33')]){_0x500668['where']=_[_0x862d('0x34')](_0x500668[_0x862d('0x31')],{'$or':_[_0x862d('0x35')](_0xeed67c,function(_0x5577af){if(_0x5577af[_0x862d('0x36')][_0x862d('0x37')]!=='VIRTUAL'){var _0x12090e={};_0x12090e[_0x5577af[_0x862d('0x38')]]={'$like':'%'+_0x52c7f2[_0x862d('0x26')][_0x862d('0x33')]+'%'};return _0x12090e;}})});}_0x500668=_['merge']({},_0x500668,_0x52c7f2[_0x862d('0x39')]);var _0x254d04={'where':_0x500668[_0x862d('0x31')]};return db[_0x862d('0x24')][_0x862d('0x19')](_0x254d04)[_0x862d('0x1f')](function(_0x36178c){_0x5c485c['count']=_0x36178c;if(_0x52c7f2[_0x862d('0x26')][_0x862d('0x3a')]){_0x500668[_0x862d('0x3b')]=[{'all':!![]}];}return db[_0x862d('0x24')][_0x862d('0x3c')](_0x500668);})[_0x862d('0x1f')](function(_0x4d74ec){_0x5c485c[_0x862d('0x3d')]=_0x4d74ec;return _0x5c485c;})[_0x862d('0x1f')](respondWithFilteredResult(_0x278b4b,_0x500668))[_0x862d('0x3e')](handleError(_0x278b4b,null));};exports[_0x862d('0x3f')]=function(_0x4fea1e,_0x42d6af){var _0x5f2d12={'raw':!![],'where':{'id':_0x4fea1e['params']['id']}},_0x143808={};_0x143808[_0x862d('0x25')]=_['keys'](db[_0x862d('0x24')][_0x862d('0x40')]);_0x143808[_0x862d('0x26')]=_[_0x862d('0x27')](_0x4fea1e[_0x862d('0x26')]);_0x143808['filters']=_[_0x862d('0x29')](_0x143808[_0x862d('0x25')],_0x143808[_0x862d('0x26')]);_0x5f2d12[_0x862d('0x2a')]=_[_0x862d('0x29')](_0x143808['model'],qs[_0x862d('0x2b')](_0x4fea1e[_0x862d('0x26')][_0x862d('0x2b')]));_0x5f2d12[_0x862d('0x2a')]=_0x5f2d12[_0x862d('0x2a')]['length']?_0x5f2d12[_0x862d('0x2a')]:_0x143808[_0x862d('0x25')];if(_0x4fea1e[_0x862d('0x26')][_0x862d('0x3a')]){_0x5f2d12[_0x862d('0x3b')]=[{'all':!![]}];}_0x5f2d12=_[_0x862d('0x34')]({},_0x5f2d12,_0x4fea1e[_0x862d('0x39')]);return db[_0x862d('0x24')]['find'](_0x5f2d12)[_0x862d('0x1f')](handleEntityNotFound(_0x42d6af,null))['then'](respondWithResult(_0x42d6af,null))['catch'](handleError(_0x42d6af,null));};exports[_0x862d('0x41')]=function(_0x2470d7,_0x1378a6){return db[_0x862d('0x24')]['create'](_0x2470d7['body'],{})[_0x862d('0x1f')](respondWithResult(_0x1378a6,0xc9))[_0x862d('0x3e')](handleError(_0x1378a6,null));};exports[_0x862d('0x1e')]=function(_0x40a674,_0x3f0d37){if(_0x40a674[_0x862d('0x42')]['id']){delete _0x40a674[_0x862d('0x42')]['id'];}return db['SmsApplication'][_0x862d('0x43')]({'where':{'id':_0x40a674[_0x862d('0x44')]['id']}})['then'](handleEntityNotFound(_0x3f0d37,null))[_0x862d('0x1f')](saveUpdates(_0x40a674[_0x862d('0x42')],null))[_0x862d('0x1f')](respondWithResult(_0x3f0d37,null))['catch'](handleError(_0x3f0d37,null));};exports['destroy']=function(_0x2aef08,_0x3a3ab0){return db[_0x862d('0x24')][_0x862d('0x43')]({'where':{'id':_0x2aef08[_0x862d('0x44')]['id']}})[_0x862d('0x1f')](handleEntityNotFound(_0x3a3ab0,null))[_0x862d('0x1f')](removeEntity(_0x3a3ab0,null))[_0x862d('0x3e')](handleError(_0x3a3ab0,null));};
\ No newline at end of file
index 966c6f8..bb669e7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['sms_applications','utf8mb4_unicode_ci','lodash','util','../../config/logger','moment','bluebird','path','rimraf','../../config/environment','./smsApplication.attributes','exports','SmsApplication'];(function(_0x43254e,_0x552f99){var _0x927e9d=function(_0x4f0aec){while(--_0x4f0aec){_0x43254e['push'](_0x43254e['shift']());}};_0x927e9d(++_0x552f99);}(_0x7a54,0x106));var _0x47a5=function(_0x170eeb,_0x511181){_0x170eeb=_0x170eeb-0x0;var _0x28b5a5=_0x7a54[_0x170eeb];return _0x28b5a5;};'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':[],'timestamps':!![],'charset':'utf8mb4','collate':_0x47a5('0xc')});};
\ 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(_0x2c697f,_0x39cb6a){var _0x18d8bb=function(_0x58dd0b){while(--_0x58dd0b){_0x2c697f['push'](_0x2c697f['shift']());}};_0x18d8bb(++_0x39cb6a);}(_0x5fab,0x177));var _0xb5fa=function(_0xc838b8,_0x2f4309){_0xc838b8=_0xc838b8-0x0;var _0x18c0be=_0x5fab[_0xc838b8];return _0x18c0be;};'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 2ae6932..c84de7d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9a4=['../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','request\x20sent','debug','SmsApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','SmsApplication,\x20%s,\x20%s','message','catch','lodash','util','moment','randomstring','ioredis'];(function(_0x3986af,_0x3ebb0c){var _0x44dc64=function(_0x536712){while(--_0x536712){_0x3986af['push'](_0x3986af['shift']());}};_0x44dc64(++_0x3ebb0c);}(_0xe9a4,0x133));var _0x4e9a=function(_0xd467d7,_0x2f13cd){_0xd467d7=_0xd467d7-0x0;var _0x23b23d=_0xe9a4[_0xd467d7];return _0x23b23d;};'use strict';var _=require(_0x4e9a('0x0'));var util=require(_0x4e9a('0x1'));var moment=require(_0x4e9a('0x2'));var BPromise=require('bluebird');var rs=require(_0x4e9a('0x3'));var fs=require('fs');var Redis=require(_0x4e9a('0x4'));var db=require(_0x4e9a('0x5'))['db'];var utils=require(_0x4e9a('0x6'));var logger=require(_0x4e9a('0x7'))(_0x4e9a('0x8'));var config=require(_0x4e9a('0x9'));var jayson=require(_0x4e9a('0xa'));var client=jayson[_0x4e9a('0xb')][_0x4e9a('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x4950f5,_0x2cb9f2,_0x813734){return new BPromise(function(_0x128076,_0x54e2bf){return client['request'](_0x4950f5,_0x813734)[_0x4e9a('0xd')](function(_0x44ff94){logger[_0x4e9a('0xe')]('SmsApplication,\x20%s,\x20%s',_0x2cb9f2,_0x4e9a('0xf'));logger[_0x4e9a('0x10')](_0x4e9a('0x11'),_0x2cb9f2,_0x4e9a('0xf'),JSON[_0x4e9a('0x12')](_0x44ff94));if(_0x44ff94['error']){if(_0x44ff94[_0x4e9a('0x13')][_0x4e9a('0x14')]===0x1f4){logger[_0x4e9a('0x13')](_0x4e9a('0x15'),_0x2cb9f2,_0x44ff94['error'][_0x4e9a('0x16')]);return _0x54e2bf(_0x44ff94[_0x4e9a('0x13')][_0x4e9a('0x16')]);}logger[_0x4e9a('0x13')](_0x4e9a('0x15'),_0x2cb9f2,_0x44ff94[_0x4e9a('0x13')][_0x4e9a('0x16')]);return _0x128076(_0x44ff94[_0x4e9a('0x13')]['message']);}else{logger[_0x4e9a('0xe')]('SmsApplication,\x20%s,\x20%s',_0x2cb9f2,_0x4e9a('0xf'));_0x128076(_0x44ff94['result'][_0x4e9a('0x16')]);}})[_0x4e9a('0x17')](function(_0x508c06){logger['error'](_0x4e9a('0x15'),_0x2cb9f2,_0x508c06);_0x54e2bf(_0x508c06);});});}
\ No newline at end of file
+var _0x4974=['../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','then','info','request\x20sent','debug','stringify','error','code','SmsApplication,\x20%s,\x20%s','message','result','catch','util','moment','bluebird','randomstring','ioredis'];(function(_0x4c2623,_0x4838bb){var _0x2be431=function(_0x55829d){while(--_0x55829d){_0x4c2623['push'](_0x4c2623['shift']());}};_0x2be431(++_0x4838bb);}(_0x4974,0x18a));var _0x4497=function(_0x2e7718,_0x1d41a2){_0x2e7718=_0x2e7718-0x0;var _0x5707d0=_0x4974[_0x2e7718];return _0x5707d0;};'use strict';var _=require('lodash');var util=require(_0x4497('0x0'));var moment=require(_0x4497('0x1'));var BPromise=require(_0x4497('0x2'));var rs=require(_0x4497('0x3'));var fs=require('fs');var Redis=require(_0x4497('0x4'));var db=require(_0x4497('0x5'))['db'];var utils=require(_0x4497('0x6'));var logger=require('../../config/logger')(_0x4497('0x7'));var config=require(_0x4497('0x8'));var jayson=require(_0x4497('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x5338ed,_0x259820,_0x424db3){return new BPromise(function(_0x58c9f3,_0x5cabf7){return client['request'](_0x5338ed,_0x424db3)[_0x4497('0xa')](function(_0x78207){logger[_0x4497('0xb')]('SmsApplication,\x20%s,\x20%s',_0x259820,_0x4497('0xc'));logger[_0x4497('0xd')]('SmsApplication,\x20%s,\x20%s,\x20%s',_0x259820,_0x4497('0xc'),JSON[_0x4497('0xe')](_0x78207));if(_0x78207[_0x4497('0xf')]){if(_0x78207[_0x4497('0xf')][_0x4497('0x10')]===0x1f4){logger['error'](_0x4497('0x11'),_0x259820,_0x78207[_0x4497('0xf')][_0x4497('0x12')]);return _0x5cabf7(_0x78207[_0x4497('0xf')][_0x4497('0x12')]);}logger[_0x4497('0xf')]('SmsApplication,\x20%s,\x20%s',_0x259820,_0x78207[_0x4497('0xf')][_0x4497('0x12')]);return _0x58c9f3(_0x78207[_0x4497('0xf')][_0x4497('0x12')]);}else{logger[_0x4497('0xb')](_0x4497('0x11'),_0x259820,'request\x20sent');_0x58c9f3(_0x78207[_0x4497('0x13')][_0x4497('0x12')]);}})[_0x4497('0x14')](function(_0x43b268){logger['error'](_0x4497('0x11'),_0x259820,_0x43b268);_0x5cabf7(_0x43b268);});});}
\ No newline at end of file
index 2f63ea2..31415ef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6a19=['describe','show','getMessages','download','create','/:id/messages','addMessage','post','/:id/tags','tracked','smsinteraction:addtags','addTags','put','/:id','smsinteraction:update','delete','smsinteraction:destroy','destroy','exports','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsInteraction.controller','get','isAuthenticated','index','/describe'];(function(_0x2f50ab,_0x4dfe90){var _0x1e9b19=function(_0x4c4ab3){while(--_0x4c4ab3){_0x2f50ab['push'](_0x2f50ab['shift']());}};_0x1e9b19(++_0x4dfe90);}(_0x6a19,0xcd));var _0x96a1=function(_0x195d9e,_0x4fc668){_0x195d9e=_0x195d9e-0x0;var _0x18fde5=_0x6a19[_0x195d9e];return _0x18fde5;};'use strict';var multer=require('multer');var util=require(_0x96a1('0x0'));var path=require(_0x96a1('0x1'));var timeout=require('connect-timeout');var express=require(_0x96a1('0x2'));var router=express[_0x96a1('0x3')]();var auth=require(_0x96a1('0x4'));var interaction=require(_0x96a1('0x5'));var config=require(_0x96a1('0x6'));var controller=require(_0x96a1('0x7'));router[_0x96a1('0x8')]('/',auth[_0x96a1('0x9')](),controller[_0x96a1('0xa')]);router['get'](_0x96a1('0xb'),auth[_0x96a1('0x9')](),controller[_0x96a1('0xc')]);router['get']('/:id',auth['isAuthenticated'](),controller[_0x96a1('0xd')]);router[_0x96a1('0x8')]('/:id/messages',auth['isAuthenticated'](),controller[_0x96a1('0xe')]);router[_0x96a1('0x8')]('/:id/download',auth[_0x96a1('0x9')](),controller[_0x96a1('0xf')]);router['post']('/',auth[_0x96a1('0x9')](),controller[_0x96a1('0x10')]);router['post'](_0x96a1('0x11'),auth[_0x96a1('0x9')](),controller[_0x96a1('0x12')]);router[_0x96a1('0x13')](_0x96a1('0x14'),auth[_0x96a1('0x9')](),interaction[_0x96a1('0x15')]('sms',_0x96a1('0x16')),controller[_0x96a1('0x17')]);router[_0x96a1('0x18')](_0x96a1('0x19'),auth[_0x96a1('0x9')](),interaction['tracked']('sms',_0x96a1('0x1a')),controller['update']);router[_0x96a1('0x1b')](_0x96a1('0x19'),auth[_0x96a1('0x9')](),interaction[_0x96a1('0x15')]('sms',_0x96a1('0x1c')),controller[_0x96a1('0x1d')]);router[_0x96a1('0x1b')](_0x96a1('0x14'),auth[_0x96a1('0x9')](),controller['removeTags']);module[_0x96a1('0x1e')]=router;
\ No newline at end of file
+var _0xcc9e=['put','update','delete','sms','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsInteraction.controller','get','isAuthenticated','index','describe','/:id','show','getMessages','/:id/download','download','post','create','addMessage','tracked','smsinteraction:addtags','addTags'];(function(_0x28a41f,_0x40d6f9){var _0x5275b8=function(_0x129a13){while(--_0x129a13){_0x28a41f['push'](_0x28a41f['shift']());}};_0x5275b8(++_0x40d6f9);}(_0xcc9e,0x9c));var _0xecc9=function(_0x5ea39f,_0x47e47d){_0x5ea39f=_0x5ea39f-0x0;var _0x3d19d0=_0xcc9e[_0x5ea39f];return _0x3d19d0;};'use strict';var multer=require(_0xecc9('0x0'));var util=require(_0xecc9('0x1'));var path=require(_0xecc9('0x2'));var timeout=require(_0xecc9('0x3'));var express=require('express');var router=express[_0xecc9('0x4')]();var auth=require(_0xecc9('0x5'));var interaction=require(_0xecc9('0x6'));var config=require(_0xecc9('0x7'));var controller=require(_0xecc9('0x8'));router[_0xecc9('0x9')]('/',auth[_0xecc9('0xa')](),controller[_0xecc9('0xb')]);router[_0xecc9('0x9')]('/describe',auth[_0xecc9('0xa')](),controller[_0xecc9('0xc')]);router[_0xecc9('0x9')](_0xecc9('0xd'),auth[_0xecc9('0xa')](),controller[_0xecc9('0xe')]);router[_0xecc9('0x9')]('/:id/messages',auth[_0xecc9('0xa')](),controller[_0xecc9('0xf')]);router[_0xecc9('0x9')](_0xecc9('0x10'),auth['isAuthenticated'](),controller[_0xecc9('0x11')]);router[_0xecc9('0x12')]('/',auth['isAuthenticated'](),controller[_0xecc9('0x13')]);router[_0xecc9('0x12')]('/:id/messages',auth[_0xecc9('0xa')](),controller[_0xecc9('0x14')]);router[_0xecc9('0x12')]('/:id/tags',auth[_0xecc9('0xa')](),interaction[_0xecc9('0x15')]('sms',_0xecc9('0x16')),controller[_0xecc9('0x17')]);router[_0xecc9('0x18')](_0xecc9('0xd'),auth[_0xecc9('0xa')](),interaction[_0xecc9('0x15')]('sms','smsinteraction:update'),controller[_0xecc9('0x19')]);router[_0xecc9('0x1a')]('/:id',auth[_0xecc9('0xa')](),interaction[_0xecc9('0x15')](_0xecc9('0x1b'),'smsinteraction:destroy'),controller[_0xecc9('0x1c')]);router['delete']('/:id/tags',auth[_0xecc9('0xa')](),controller['removeTags']);module[_0xecc9('0x1d')]=router;
\ No newline at end of file
index 114fd01..b821abb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x554d=['STRING','ENUM','out','sequelize','moment','exports','BOOLEAN','DATE'];(function(_0x58fca7,_0x25f48c){var _0x4a1e14=function(_0x2c2d1b){while(--_0x2c2d1b){_0x58fca7['push'](_0x58fca7['shift']());}};_0x4a1e14(++_0x25f48c);}(_0x554d,0xe3));var _0xd554=function(_0x4edeee,_0x591186){_0x4edeee=_0x4edeee-0x0;var _0x277532=_0x554d[_0x4edeee];return _0x277532;};'use strict';var Sequelize=require(_0xd554('0x0'));var moment=require(_0xd554('0x1'));module[_0xd554('0x2')]={'closed':{'type':Sequelize[_0xd554('0x3')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0xd554('0x4')]},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize[_0xd554('0x5')]},'phone':{'type':Sequelize[_0xd554('0x5')]},'read1stAt':{'type':Sequelize[_0xd554('0x4')]},'firstMsgDirection':{'type':Sequelize[_0xd554('0x6')]('in',_0xd554('0x7')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0xd554('0x4')]},'lastMsgDirection':{'type':Sequelize[_0xd554('0x6')]('in',_0xd554('0x7')),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
+var _0x5f18=['moment','exports','BOOLEAN','DATE','STRING','ENUM','out'];(function(_0x302dc8,_0x3902dc){var _0x1a6d7f=function(_0x4b6579){while(--_0x4b6579){_0x302dc8['push'](_0x302dc8['shift']());}};_0x1a6d7f(++_0x3902dc);}(_0x5f18,0x173));var _0x85f1=function(_0x752d8d,_0x1b6b59){_0x752d8d=_0x752d8d-0x0;var _0x379a27=_0x5f18[_0x752d8d];return _0x379a27;};'use strict';var Sequelize=require('sequelize');var moment=require(_0x85f1('0x0'));module[_0x85f1('0x1')]={'closed':{'type':Sequelize[_0x85f1('0x2')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x85f1('0x3')]},'disposition':{'type':Sequelize[_0x85f1('0x4')]},'note':{'type':Sequelize['STRING']},'phone':{'type':Sequelize[_0x85f1('0x4')]},'read1stAt':{'type':Sequelize[_0x85f1('0x3')]},'firstMsgDirection':{'type':Sequelize[_0x85f1('0x5')]('in',_0x85f1('0x6')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x85f1('0x3')]},'lastMsgDirection':{'type':Sequelize['ENUM']('in',_0x85f1('0x6')),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
index 2e447e1..36df84a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x90a0=['TagId','Messages.count','tableAlias','LIKE','ContactId','c.firstName','\x20LIKE\x20?','c.lastName','c.email','\x20>\x20?','length','\x20=\x20?','\x20<\x20?','map','filter','isEmpty','SmsAccountId','i.SmsAccountId\x20IN\x20?','concat','$gte','$lte','null','\x20IS\x20NULL','replace','isNumeric','push','toString','join','MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','group','i.id','Sequelize','QueryTypes','SELECT','clone','read','%s\x20=\x200','having','`Messages.count`\x20=\x200','`Messages.count`\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','t.id\x20IN\x20?','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','%s\x20>\x200','sequelize','keyBy','merge','Account.key','Contact.firstName','Contact.email','c.phone','Contact.phone','c.mobile','Contact.mobile','c.fax','GROUP_CONCAT(DISTINCT\x20t.id)','ui.SmsInteractionId\x20IN\x20?','groupBy','SmsInteractionId','all','rows','catch','show','params','options','find','create','body','describe','addMessage','ids','findOne','hasOwnProperty','YYYY-MM-DD\x20HH:mm:ss','includeAll','include','findAll','addTags','omit','spread','Tag','name','emit','smsInteractionTags:save','removeTags','download','unix','server','files','tmp','attachments','transcript-%d-%s.zip','Messages','direction','secret','User','fullname','CmContact','Contact','firstName','SmsAccount','Account','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','Sms','YYYY-MM-DD','mkdirSync','N.A.','closedAt','disposition','System','lastName','out','root','views','downloadInteraction.html','toFile','transcript-','.pdf','log','err','unlinkSync','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','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','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./smsInteraction.socket','register','sendStatus','status','end','json','offset','limit','set','apply','reject','save','update','then','destroy','error','stack','closed','unreadMessages','SmsMessage','count','Users','Tags','TagIds','split','forEach','index','SmsInteraction','rawAttributes','model','keys','query','intersection','fields','attributes','nolimit','order','sort','where','filters','pick','select','field','color','from','tools_tags','COUNT(*)','sms_messages','me.SmsInteractionId\x20=\x20i.id','me.direction\x20=\x20\x27in\x27','me.read\x20=\x20false','u.id','ui.SmsInteractionId','user_has_sms_interactions','left_join','u.id\x20=\x20ui.UserId','sms_interactions','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL','users','a.id\x20=\x20i.SmsAccountId','expr','advancedFilter','parse','createdAt','dateStart','startOf','day','utc','format','and','i.createdAt\x20BETWEEN\x20?\x20AND\x20?','isArray','condition','value'];(function(_0x1c885f,_0x3e5c60){var _0x25c151=function(_0x5169dc){while(--_0x5169dc){_0x1c885f['push'](_0x1c885f['shift']());}};_0x25c151(++_0x3e5c60);}(_0x90a0,0x84));var _0x090a=function(_0x37bd26,_0x5ad346){_0x37bd26=_0x37bd26-0x0;var _0xe83dc4=_0x90a0[_0x37bd26];return _0xe83dc4;};'use strict';var pdf=require(_0x090a('0x0'));var emlformat=require(_0x090a('0x1'));var rimraf=require(_0x090a('0x2'));var zipdir=require(_0x090a('0x3'));var jsonpatch=require(_0x090a('0x4'));var rp=require(_0x090a('0x5'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x090a('0x6'));var util=require(_0x090a('0x7'));var path=require(_0x090a('0x8'));var sox=require(_0x090a('0x9'));var csv=require(_0x090a('0xa'));var ejs=require(_0x090a('0xb'));var fs=require('fs');var _=require(_0x090a('0xc'));var squel=require('squel');var crypto=require(_0x090a('0xd'));var jsforce=require(_0x090a('0xe'));var deskjs=require(_0x090a('0xf'));var toCsv=require(_0x090a('0xa'));var querystring=require(_0x090a('0x10'));var Papa=require('papaparse');var Redis=require(_0x090a('0x11'));var authService=require(_0x090a('0x12'));var qs=require(_0x090a('0x13'));var hardwareService=require(_0x090a('0x14'));var logger=require(_0x090a('0x15'))(_0x090a('0x16'));var utils=require(_0x090a('0x17'));var config=require(_0x090a('0x18'));var db=require(_0x090a('0x19'))['db'];config[_0x090a('0x1a')]=_[_0x090a('0x1b')](config[_0x090a('0x1a')],{'host':_0x090a('0x1c'),'port':0x18eb});var socket=require(_0x090a('0x1d'))(new Redis(config[_0x090a('0x1a')]));require(_0x090a('0x1e'))[_0x090a('0x1f')](socket);function respondWithStatusCode(_0x2f4af2,_0x385378){_0x385378=_0x385378||0xcc;return function(_0x4a0347){if(_0x4a0347){return _0x2f4af2[_0x090a('0x20')](_0x385378);}return _0x2f4af2[_0x090a('0x21')](_0x385378)[_0x090a('0x22')]();};}function respondWithResult(_0x3351c,_0x17c026){_0x17c026=_0x17c026||0xc8;return function(_0x512fae){if(_0x512fae){return _0x3351c[_0x090a('0x21')](_0x17c026)[_0x090a('0x23')](_0x512fae);}};}function respondWithFilteredResult(_0xc0954d,_0x2700d9){return function(_0x4a90ad){if(_0x4a90ad){var _0x578c3b=_0x4a90ad['count'],_0x3bf29c=_0x2700d9[_0x090a('0x24')],_0xc63ebd=_0x2700d9[_0x090a('0x24')]+_0x2700d9[_0x090a('0x25')],_0x27a42e;if(_0xc63ebd>=_0x578c3b){_0xc63ebd=_0x578c3b;_0x27a42e=0xc8;}else{_0x27a42e=0xce;}_0xc0954d[_0x090a('0x21')](_0x27a42e);return _0xc0954d[_0x090a('0x26')]('Content-Range',_0x3bf29c+'-'+_0xc63ebd+'/'+_0x578c3b)[_0x090a('0x23')](_0x4a90ad);}return null;};}function patchUpdates(_0x19f862){return function(_0x14ef2c){try{jsonpatch[_0x090a('0x27')](_0x14ef2c,_0x19f862,!![]);}catch(_0x56ff24){return BPromise[_0x090a('0x28')](_0x56ff24);}return _0x14ef2c[_0x090a('0x29')]();};}function saveUpdates(_0x2b845a,_0x2b48ae){return function(_0x4c92bf){if(_0x4c92bf){return _0x4c92bf[_0x090a('0x2a')](_0x2b845a)[_0x090a('0x2b')](function(_0x4ac162){return _0x4ac162;});}return null;};}function removeEntity(_0x4a181e,_0x39d004){return function(_0x1d7c1c){if(_0x1d7c1c){return _0x1d7c1c[_0x090a('0x2c')]()[_0x090a('0x2b')](function(){_0x4a181e[_0x090a('0x21')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2f4097,_0x473ddd){return function(_0x45caec){if(!_0x45caec){_0x2f4097[_0x090a('0x20')](0x194);}return _0x45caec;};}function handleError(_0x47f9c8,_0x43f9ce){_0x43f9ce=_0x43f9ce||0x1f4;return function(_0x572078){logger[_0x090a('0x2d')](_0x572078[_0x090a('0x2e')]);if(_0x572078['name']){delete _0x572078['name'];}_0x47f9c8[_0x090a('0x21')](_0x43f9ce)['send'](_0x572078);};}function getInteractionUnreadMessages(_0x151361){return new BPromise(function(_0x4399e3,_0x501bd2){try{if(_0x151361[_0x090a('0x2f')]){_0x151361[_0x090a('0x30')]=0x0;_0x4399e3(_0x151361);}else{return db[_0x090a('0x31')][_0x090a('0x32')]({'where':{'SmsInteractionId':_0x151361['id'],'direction':'in','read':![]}})[_0x090a('0x2b')](function(_0x58cd19){_0x151361[_0x090a('0x30')]=_0x58cd19;_0x4399e3(_0x151361);});}}catch(_0x750bc6){_0x501bd2(_0x750bc6);}});}function getInteractionUsers(_0x4f2b79,_0x1f1376){return new BPromise(function(_0x458177,_0xf4abc4){try{if(_0x1f1376[_0x4f2b79['id']]){_0x4f2b79[_0x090a('0x33')]=_['map'](_0x1f1376[_0x4f2b79['id']],function(_0x20780c){return{'id':_0x20780c['id']};});}}catch(_0x43acc8){_0xf4abc4(_0x43acc8);}_0x458177(_0x4f2b79);});}function getInteractionTags(_0x41b79e,_0x5c44ce){return new BPromise(function(_0x21afdf,_0x14d3b5){try{if(_0x41b79e['TagIds']){_0x41b79e[_0x090a('0x34')]=[];_0x41b79e[_0x090a('0x35')][_0x090a('0x36')](',')[_0x090a('0x37')](function(_0x361044){_0x41b79e['Tags']['push'](_0x5c44ce[_0x361044]);});}delete _0x41b79e[_0x090a('0x35')];}catch(_0x974ef0){_0x14d3b5(_0x974ef0);}_0x21afdf(_0x41b79e);});}function updateSmsInteraction(_0x3c18bc,_0x5f2435,_0x5a3ee4){return new BPromise(function(_0x2c02e7,_0x24199d){return getInteractionUnreadMessages(_0x3c18bc)[_0x090a('0x2b')](function(_0x290d11){return getInteractionUsers(_0x290d11,_0x5a3ee4);})['then'](function(_0x4bf962){return getInteractionTags(_0x4bf962,_0x5f2435);})[_0x090a('0x2b')](function(_0x57bf9d){_0x2c02e7(_0x57bf9d);})['catch'](function(_0x2ad986){_0x24199d(_0x2ad986);});});}exports[_0x090a('0x38')]=function(_0x32069f,_0x1a7252){var _0x5072d7={},_0x27beba={},_0x2ac99b={'count':0x0,'rows':[]};var _0x3cd06c=db[_0x090a('0x39')][_0x090a('0x3a')];_0x27beba[_0x090a('0x3b')]=_[_0x090a('0x3c')](_0x3cd06c);_0x27beba[_0x090a('0x3d')]=_['keys'](_0x32069f['query']);_0x27beba['filters']=_['intersection'](_0x27beba[_0x090a('0x3b')],_0x27beba[_0x090a('0x3d')]);_0x5072d7['attributes']=_[_0x090a('0x3e')](_0x27beba['model'],qs[_0x090a('0x3f')](_0x32069f[_0x090a('0x3d')][_0x090a('0x3f')]));_0x5072d7[_0x090a('0x40')]=_0x5072d7['attributes']['length']?_0x5072d7[_0x090a('0x40')]:_0x27beba[_0x090a('0x3b')];if(!_0x32069f['query']['hasOwnProperty'](_0x090a('0x41'))){_0x5072d7['limit']=qs['limit'](_0x32069f[_0x090a('0x3d')][_0x090a('0x25')]);_0x5072d7[_0x090a('0x24')]=qs[_0x090a('0x24')](_0x32069f[_0x090a('0x3d')]['offset']);}_0x5072d7[_0x090a('0x42')]=qs[_0x090a('0x43')](_0x32069f[_0x090a('0x3d')][_0x090a('0x43')]);_0x5072d7[_0x090a('0x44')]=qs[_0x090a('0x45')](_[_0x090a('0x46')](_0x32069f['query'],_0x27beba[_0x090a('0x45')]));var _0x27e08d=[];var _0x4fd6ba=squel[_0x090a('0x47')]()[_0x090a('0x48')]('id')[_0x090a('0x48')]('name')[_0x090a('0x48')](_0x090a('0x49'))[_0x090a('0x4a')](_0x090a('0x4b'));var _0x426848=squel[_0x090a('0x47')]()[_0x090a('0x48')](_0x090a('0x4c'))['from'](_0x090a('0x4d'),'me')[_0x090a('0x44')](_0x090a('0x4e'))[_0x090a('0x44')](_0x090a('0x4f'))[_0x090a('0x44')](_0x090a('0x50'));var _0x21f69f=squel['select']()[_0x090a('0x48')](_0x090a('0x51'))['field'](_0x090a('0x52'))['from'](_0x090a('0x53'),'ui')[_0x090a('0x54')]('users','u',_0x090a('0x55'));var _0x7b0ff=squel[_0x090a('0x47')]()[_0x090a('0x4a')](_0x090a('0x56'),'i')[_0x090a('0x54')]('cm_contacts','c',_0x090a('0x57'))[_0x090a('0x54')](_0x090a('0x58'),'o','o.id\x20=\x20i.UserId')[_0x090a('0x54')]('sms_accounts','a',_0x090a('0x59'))[_0x090a('0x54')](_0x090a('0x4d'),'me','me.SmsInteractionId\x20=\x20i.id');var _0x490a39=squel[_0x090a('0x5a')]();if(_0x32069f['query'][_0x090a('0x5b')]){var _0x36c666=JSON[_0x090a('0x5c')](_0x32069f[_0x090a('0x3d')]['advancedFilter']);_[_0x090a('0x3c')](_0x36c666)[_0x090a('0x37')](function(_0x27a5f7){var _0x1372c1=_0x36c666[_0x27a5f7];if(_0x27a5f7===_0x090a('0x5d')){var _0x5f38c0=moment(_0x1372c1['value'][_0x090a('0x5e')])[_0x090a('0x5f')](_0x090a('0x60'))[_0x090a('0x61')]()[_0x090a('0x62')]();var _0x3aada8=moment(_0x3aada8)[_0x090a('0x61')]()['endOf'](_0x090a('0x60'))['format']();_0x490a39[_0x090a('0x63')](_0x090a('0x64'),_0x5f38c0,_0x3aada8);}else{if(_[_0x090a('0x65')](_0x1372c1['condition'])){_0x1372c1[_0x090a('0x66')][_0x090a('0x37')](function(_0x3de42b){switch(_0x1372c1[_0x090a('0x66')][_0x090a('0x67')]){case'IS':if(_0x27a5f7!==_0x090a('0x68')&&_0x27a5f7!==_0x090a('0x69')){if(_[_0x090a('0x65')](_0x1372c1[_0x090a('0x67')])&&_0x1372c1[_0x090a('0x67')]['length']>0x1){_0x490a39[_0x090a('0x63')](_0x1372c1[_0x090a('0x6a')]+'.'+_0x27a5f7+'\x20IN\x20?',_0x1372c1['value']);}else{_0x490a39[_0x090a('0x63')](_0x1372c1[_0x090a('0x6a')]+'.'+_0x27a5f7+'\x20=\x20?',_0x1372c1[_0x090a('0x67')][0x0]);}}break;case'=':_0x490a39[_0x090a('0x63')](_0x1372c1['tableAlias']+'.'+_0x27a5f7+'\x20=\x20?',_0x1372c1[_0x090a('0x67')]);break;case _0x090a('0x6b'):if(_0x27a5f7===_0x090a('0x6c')){_0x490a39[_0x090a('0x63')](_0x090a('0x6d')+_0x090a('0x6e'),'%'+_0x1372c1['value']+'%');_0x490a39['or'](_0x090a('0x6f')+_0x090a('0x6e'),'%'+_0x1372c1[_0x090a('0x67')]+'%');_0x490a39['or'](_0x090a('0x70')+_0x090a('0x6e'),'%'+_0x1372c1['value']+'%');}else{_0x490a39[_0x090a('0x63')](_0x1372c1[_0x090a('0x6a')]+'.'+_0x27a5f7+_0x090a('0x6e'),'%'+_0x1372c1[_0x090a('0x67')]+'%');}break;case'>':_0x490a39[_0x090a('0x63')](_0x1372c1[_0x090a('0x6a')]+'.'+_0x27a5f7+_0x090a('0x71'),_0x1372c1[_0x090a('0x67')]);break;case'<':_0x490a39[_0x090a('0x63')](_0x1372c1[_0x090a('0x6a')]+'.'+_0x27a5f7+'\x20<\x20?',_0x1372c1[_0x090a('0x67')]);break;}});}else{switch(_0x1372c1[_0x090a('0x66')][_0x090a('0x67')]){case'IS':if(_0x27a5f7!==_0x090a('0x68')&&_0x27a5f7!=='Messages.count'){if(_[_0x090a('0x65')](_0x1372c1[_0x090a('0x67')])&&_0x1372c1[_0x090a('0x67')][_0x090a('0x72')]>0x1){_0x490a39[_0x090a('0x63')](_0x1372c1[_0x090a('0x6a')]+'.'+_0x27a5f7+'\x20IN\x20?',_0x1372c1[_0x090a('0x67')]);}else{_0x490a39[_0x090a('0x63')](_0x1372c1[_0x090a('0x6a')]+'.'+_0x27a5f7+'\x20=\x20?',_0x1372c1[_0x090a('0x67')][0x0]);}}break;case'=':_0x490a39[_0x090a('0x63')](_0x1372c1[_0x090a('0x6a')]+'.'+_0x27a5f7+_0x090a('0x73'),_0x1372c1[_0x090a('0x67')]);break;case _0x090a('0x6b'):if(_0x27a5f7===_0x090a('0x6c')){_0x490a39['and'](_0x090a('0x6d')+_0x090a('0x6e'),'%'+_0x1372c1['value']+'%');_0x490a39['or'](_0x090a('0x6f')+_0x090a('0x6e'),'%'+_0x1372c1[_0x090a('0x67')]+'%');_0x490a39['or'](_0x090a('0x70')+_0x090a('0x6e'),'%'+_0x1372c1[_0x090a('0x67')]+'%');}else{_0x490a39[_0x090a('0x63')](_0x1372c1['tableAlias']+'.'+_0x27a5f7+_0x090a('0x6e'),'%'+_0x1372c1['value']+'%');}break;case'>':_0x490a39[_0x090a('0x63')](_0x1372c1[_0x090a('0x6a')]+'.'+_0x27a5f7+_0x090a('0x71'),_0x1372c1['value']);break;case'<':_0x490a39[_0x090a('0x63')](_0x1372c1[_0x090a('0x6a')]+'.'+_0x27a5f7+_0x090a('0x74'),_0x1372c1['value']);break;}}}});}else{var _0x3a74cc=_(Object['keys'](_0x32069f[_0x090a('0x3d')]))[_0x090a('0x75')](function(_0x137724){return _0x3cd06c['hasOwnProperty'](_0x137724)?_0x137724:undefined;})[_0x090a('0x76')](function(_0x1c4aa8){return!_['isNil'](_0x1c4aa8);})['value']();if(!_[_0x090a('0x77')](_0x3a74cc)){_0x3a74cc[_0x090a('0x37')](function(_0xfa7232){if(_0xfa7232===_0x090a('0x78')){_0x7b0ff[_0x090a('0x44')](_0x090a('0x79'),[][_0x090a('0x7a')](_0x32069f['query'][_0xfa7232]));}else if(_0xfa7232===_0x090a('0x5d')){var _0x68d3a8=JSON[_0x090a('0x5c')](_0x32069f[_0x090a('0x3d')][_0xfa7232])[_0x090a('0x7b')];var _0x498e9f=JSON[_0x090a('0x5c')](_0x32069f[_0x090a('0x3d')][_0xfa7232])[_0x090a('0x7c')];_0x7b0ff[_0x090a('0x44')](_0x090a('0x64'),_0x68d3a8,_0x498e9f);}else{if(_0x32069f[_0x090a('0x3d')][_0xfa7232]===_0x090a('0x7d')){_0x7b0ff['where']('i.'+_0xfa7232+_0x090a('0x7e'));}else{_0x7b0ff[_0x090a('0x44')]('i.'+_0xfa7232+_0x090a('0x73'),_0x32069f[_0x090a('0x3d')][_0xfa7232]);}}});}if(_0x32069f[_0x090a('0x3d')]['filter']){var _0x562c60=_0x32069f['query'][_0x090a('0x76')][_0x090a('0x7f')]('\x5c','\x5c\x5c')[_0x090a('0x7f')]('\x27\x27','\x27\x27\x27\x27');if(qs[_0x090a('0x80')](_0x562c60)){_0x490a39['or']('i.id\x20LIKE\x20?',_0x562c60+'%')['or']('i.phone\x20LIKE\x20?',_0x562c60+'%');}else{var _0x1faddb=[];_0x562c60[_0x090a('0x36')]('\x20')['forEach'](function(_0x4799bf){_0x1faddb[_0x090a('0x81')]('+'+_0x4799bf[_0x090a('0x82')]());});var _0x37c377=_0x1faddb[_0x090a('0x83')]('\x20');_0x490a39['or'](_0x090a('0x84'),_0x37c377)['or']('CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?',_0x562c60+'%');}}}_0x7b0ff[_0x090a('0x44')](_0x490a39);if(_0x5072d7[_0x090a('0x42')]){_0x5072d7['order'][_0x090a('0x37')](function(_0x508e87){_0x7b0ff[_0x090a('0x42')]('i.'+_0x508e87[0x0],_0x508e87[0x1]==='DESC'?![]:!![]);});}_0x7b0ff[_0x090a('0x85')](_0x090a('0x86'));var _0x12cb8c={'type':db[_0x090a('0x87')][_0x090a('0x88')][_0x090a('0x89')],'raw':!![]};var _0x34d6b1=_0x7b0ff[_0x090a('0x8a')]()['field'](_0x090a('0x4c'));if(!_0x32069f[_0x090a('0x3d')][_0x090a('0x5b')]){if(_0x32069f['query'][_0x090a('0x8b')]){if(_0x32069f[_0x090a('0x3d')]['read']==0x1){_0x34d6b1[_0x090a('0x44')](util[_0x090a('0x62')](_0x090a('0x8c'),_0x426848[_0x090a('0x82')]()));_0x7b0ff[_0x090a('0x8d')](_0x090a('0x8e'));}else{_0x34d6b1['where'](util[_0x090a('0x62')]('%s\x20>\x200',_0x426848['toString']()));_0x7b0ff['having'](_0x090a('0x8f'));}}if(_0x32069f[_0x090a('0x3d')][_0x090a('0x90')]){var _0x4f0aaa=_[_0x090a('0x65')](_0x32069f[_0x090a('0x3d')][_0x090a('0x90')])?_0x32069f[_0x090a('0x3d')][_0x090a('0x90')]:new Array(_0x32069f['query'][_0x090a('0x90')]);var _0x1bd038=squel[_0x090a('0x5a')]();_0x4f0aaa[_0x090a('0x37')](function(_0x22695f){_0x1bd038['or'](_0x090a('0x91'),'%,'+_0x22695f+',%');});_0x7b0ff[_0x090a('0x8d')](_0x1bd038);_0x34d6b1['left_join'](_0x090a('0x92'),'it',_0x090a('0x93'));_0x34d6b1[_0x090a('0x54')](_0x090a('0x4b'),'t',_0x090a('0x94'));_0x34d6b1[_0x090a('0x44')](_0x090a('0x95'),_0x4f0aaa);}}else{var _0x36c666=JSON['parse'](_0x32069f[_0x090a('0x3d')]['advancedFilter']);_[_0x090a('0x3c')](_0x36c666)[_0x090a('0x37')](function(_0x59cb99){var _0x53e4a5=_0x36c666[_0x59cb99];if(_0x59cb99==='TagId'){var _0x3080eb=_0x53e4a5[_0x090a('0x67')];var _0x20a7bb=squel[_0x090a('0x5a')]();_0x3080eb['forEach'](function(_0x3ed191){_0x20a7bb['or'](_0x090a('0x91'),'%,'+_0x3ed191+',%');});_0x7b0ff[_0x090a('0x8d')](_0x20a7bb);_0x34d6b1[_0x090a('0x54')](_0x090a('0x96'),'it',_0x090a('0x97'));_0x34d6b1[_0x090a('0x54')](_0x090a('0x4b'),'t',_0x090a('0x94'));_0x34d6b1[_0x090a('0x44')](_0x090a('0x95'),_0x3080eb);}else if(_0x59cb99==='Messages.count'){if(_0x53e4a5[_0x090a('0x67')][_0x090a('0x72')]===0x1){if(_0x53e4a5['value'][0x0]===0x1){_0x34d6b1[_0x090a('0x44')](util[_0x090a('0x62')]('%s\x20=\x200',_0x426848[_0x090a('0x82')]()));_0x7b0ff['having']('`Messages.count`\x20=\x200');}else{_0x34d6b1['where'](util['format'](_0x090a('0x98'),_0x426848[_0x090a('0x82')]()));_0x7b0ff[_0x090a('0x8d')](_0x090a('0x8f'));}}}});}db[_0x090a('0x99')][_0x090a('0x3d')](_0x34d6b1['toString'](),_0x12cb8c)[_0x090a('0x2b')](function(_0x5916b3){_0x2ac99b['count']=_0x5916b3['length'];if(_0x2ac99b[_0x090a('0x32')]===0x0)return[];return db[_0x090a('0x99')]['query'](_0x4fd6ba[_0x090a('0x82')](),_0x12cb8c)[_0x090a('0x2b')](function(_0xb64c5d){_0x27e08d=_[_0x090a('0x9a')](_0xb64c5d,'id');_0x12cb8c=_[_0x090a('0x9b')](_0x12cb8c,{'model':db[_0x090a('0x39')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x7b0ff[_0x090a('0x48')]('a.key',_0x090a('0x9c'));_0x7b0ff[_0x090a('0x48')]('i.*');_0x7b0ff[_0x090a('0x48')]('c.firstName',_0x090a('0x9d'));_0x7b0ff[_0x090a('0x48')]('c.lastName','Contact.lastName');_0x7b0ff['field'](_0x090a('0x70'),_0x090a('0x9e'));_0x7b0ff[_0x090a('0x48')](_0x090a('0x9f'),_0x090a('0xa0'));_0x7b0ff[_0x090a('0x48')](_0x090a('0xa1'),_0x090a('0xa2'));_0x7b0ff[_0x090a('0x48')](_0x090a('0xa3'),'Contact.fax');_0x7b0ff[_0x090a('0x48')](_0x090a('0xa4'),_0x090a('0x35'));_0x7b0ff[_0x090a('0x54')]('sms_interaction_has_tags','it',_0x090a('0x93'));_0x7b0ff['left_join'](_0x090a('0x4b'),'t',_0x090a('0x94'));_0x7b0ff[_0x090a('0x25')](_0x5072d7['limit']);_0x7b0ff[_0x090a('0x24')](_0x5072d7['offset']);return db[_0x090a('0x99')]['query'](_0x7b0ff['toString'](),_0x12cb8c);})[_0x090a('0x2b')](function(_0x52f380){_0x21f69f[_0x090a('0x44')](_0x090a('0xa5'),_['map'](_0x52f380,'id'));return db[_0x090a('0x99')][_0x090a('0x3d')](_0x21f69f[_0x090a('0x82')](),_0x12cb8c)['then'](function(_0x11abdf){var _0x2f55fd=_[_0x090a('0xa6')](_0x11abdf,_0x090a('0xa7'));var _0x199508=[];_0x52f380[_0x090a('0x37')](function(_0x1e7b4f){_0x199508[_0x090a('0x81')](updateSmsInteraction(_0x1e7b4f,_0x27e08d,_0x2f55fd));});return BPromise[_0x090a('0xa8')](_0x199508);});});})[_0x090a('0x2b')](function(_0x28d27a){_0x2ac99b[_0x090a('0xa9')]=_0x28d27a;return _0x2ac99b;})['then'](respondWithFilteredResult(_0x1a7252,_0x5072d7))[_0x090a('0xaa')](handleError(_0x1a7252,null));};exports[_0x090a('0xab')]=function(_0x1723df,_0x2d9a4d){var _0x2d8fd7={'raw':![],'where':{'id':_0x1723df[_0x090a('0xac')]['id']}},_0x32a0ef={};_0x32a0ef[_0x090a('0x3b')]=_[_0x090a('0x3c')](db['SmsInteraction'][_0x090a('0x3a')]);_0x32a0ef[_0x090a('0x3d')]=_['keys'](_0x1723df[_0x090a('0x3d')]);_0x32a0ef[_0x090a('0x45')]=_['intersection'](_0x32a0ef[_0x090a('0x3b')],_0x32a0ef[_0x090a('0x3d')]);_0x2d8fd7[_0x090a('0x40')]=_[_0x090a('0x3e')](_0x32a0ef['model'],qs[_0x090a('0x3f')](_0x1723df[_0x090a('0x3d')][_0x090a('0x3f')]));_0x2d8fd7['attributes']=_0x2d8fd7[_0x090a('0x40')][_0x090a('0x72')]?_0x2d8fd7[_0x090a('0x40')]:_0x32a0ef[_0x090a('0x3b')];if(_0x1723df[_0x090a('0x3d')]['includeAll']){_0x2d8fd7['include']=[{'all':!![]}];}_0x2d8fd7=_[_0x090a('0x9b')]({},_0x2d8fd7,_0x1723df[_0x090a('0xad')]);return db[_0x090a('0x39')][_0x090a('0xae')](_0x2d8fd7)[_0x090a('0x2b')](handleEntityNotFound(_0x2d9a4d,null))[_0x090a('0x2b')](respondWithResult(_0x2d9a4d,null))['catch'](handleError(_0x2d9a4d,null));};exports[_0x090a('0xaf')]=function(_0x5aa037,_0x2f34be){return db[_0x090a('0x39')][_0x090a('0xaf')](_0x5aa037['body'],{})[_0x090a('0x2b')](respondWithResult(_0x2f34be,0xc9))[_0x090a('0xaa')](handleError(_0x2f34be,null));};exports[_0x090a('0x2a')]=function(_0x2199f9,_0x3db116){if(_0x2199f9[_0x090a('0xb0')]['id']){delete _0x2199f9['body']['id'];}return db['SmsInteraction']['find']({'where':{'id':_0x2199f9[_0x090a('0xac')]['id']}})['then'](handleEntityNotFound(_0x3db116,null))[_0x090a('0x2b')](saveUpdates(_0x2199f9['body'],null))[_0x090a('0x2b')](respondWithResult(_0x3db116,null))[_0x090a('0xaa')](handleError(_0x3db116,null));};exports[_0x090a('0x2c')]=function(_0x54029b,_0x2bdb68){return db[_0x090a('0x39')][_0x090a('0xae')]({'where':{'id':_0x54029b[_0x090a('0xac')]['id']}})[_0x090a('0x2b')](handleEntityNotFound(_0x2bdb68,null))[_0x090a('0x2b')](removeEntity(_0x2bdb68,null))[_0x090a('0xaa')](handleError(_0x2bdb68,null));};exports[_0x090a('0xb1')]=function(_0x86524d,_0xa1fdd1){return db['SmsInteraction'][_0x090a('0xb1')]()[_0x090a('0x2b')](respondWithResult(_0xa1fdd1,null))[_0x090a('0xaa')](handleError(_0xa1fdd1,null));};exports[_0x090a('0xb2')]=function(_0x11eecb,_0xe9cdab,_0x4776ee){return db[_0x090a('0x31')][_0x090a('0xae')]({'where':{'id':_0x11eecb[_0x090a('0xac')]['id']}})[_0x090a('0x2b')](handleEntityNotFound(_0xe9cdab,null))[_0x090a('0x2b')](function(_0x4d3144){if(_0x4d3144){return _0x4d3144[_0x090a('0xb2')](_0x11eecb[_0x090a('0xb0')][_0x090a('0xb3')],_['omit'](_0x11eecb['body'],['ids','id'])||{});}})[_0x090a('0x2b')](respondWithResult(_0xe9cdab,null))[_0x090a('0xaa')](handleError(_0xe9cdab,null));};exports['getMessages']=function(_0x2d6d55,_0x8fb3a5,_0x13b136){var _0x2e1194={'raw':![],'where':{}};var _0x32fdfb={};var _0x313e59={'count':0x0,'rows':[]};return db['SmsInteraction'][_0x090a('0xb4')]({'where':{'id':_0x2d6d55[_0x090a('0xac')]['id']}})[_0x090a('0x2b')](handleEntityNotFound(_0x8fb3a5,null))[_0x090a('0x2b')](function(_0x4042bc){if(_0x4042bc){_0x32fdfb[_0x090a('0x3b')]=_['keys'](db[_0x090a('0x31')][_0x090a('0x3a')]);_0x32fdfb[_0x090a('0x3d')]=_[_0x090a('0x3c')](_0x2d6d55[_0x090a('0x3d')]);_0x32fdfb[_0x090a('0x45')]=_['intersection'](_0x32fdfb[_0x090a('0x3b')],_0x32fdfb[_0x090a('0x3d')]);_0x2e1194[_0x090a('0x40')]=_['intersection'](_0x32fdfb[_0x090a('0x3b')],qs[_0x090a('0x3f')](_0x2d6d55['query'][_0x090a('0x3f')]));_0x2e1194[_0x090a('0x40')]=_0x2e1194[_0x090a('0x40')][_0x090a('0x72')]?_0x2e1194[_0x090a('0x40')]:_0x32fdfb['model'];if(!_0x2d6d55[_0x090a('0x3d')][_0x090a('0xb5')](_0x090a('0x41'))){_0x2e1194['limit']=qs[_0x090a('0x25')](_0x2d6d55[_0x090a('0x3d')][_0x090a('0x25')]);_0x2e1194[_0x090a('0x24')]=qs[_0x090a('0x24')](_0x2d6d55['query']['offset']);}_0x2e1194['order']=qs['sort'](_0x2d6d55[_0x090a('0x3d')][_0x090a('0x43')]);_0x2e1194[_0x090a('0x44')]=qs['filters'](_[_0x090a('0x46')](_0x2d6d55['query'],_0x32fdfb[_0x090a('0x45')]));_0x2e1194['where'][_0x090a('0xa7')]=_0x4042bc['id'];if(_0x2d6d55[_0x090a('0x3d')]['filter']){_0x2e1194['where']=_[_0x090a('0x9b')](_0x2e1194[_0x090a('0x44')],{'$or':_[_0x090a('0x75')](_0x2e1194[_0x090a('0x40')],function(_0x16c811){var _0x34c58c={};_0x34c58c[_0x16c811]={'$like':'%'+_0x2d6d55[_0x090a('0x3d')][_0x090a('0x76')]+'%'};return _0x34c58c;})});}if(_0x2d6d55[_0x090a('0x3d')][_0x090a('0x7b')]){var _0x34db9d=_0x2d6d55[_0x090a('0x3d')]['$gte'][_0x090a('0x36')](',');var _0x2c438f={};_0x2c438f[_0x34db9d[0x0]]={'$gte':moment(_0x34db9d[0x1])[_0x090a('0x62')](_0x090a('0xb6'))};_0x2e1194[_0x090a('0x44')]=_[_0x090a('0x9b')](_0x2e1194['where'],_0x2c438f);}_0x2e1194=_['merge']({},_0x2e1194,_0x2d6d55[_0x090a('0xad')]);return db[_0x090a('0x31')][_0x090a('0x32')]({'where':_0x2e1194[_0x090a('0x44')]})[_0x090a('0x2b')](function(_0x21cdd2){_0x313e59[_0x090a('0x32')]=_0x21cdd2;if(_0x2d6d55[_0x090a('0x3d')][_0x090a('0xb7')]){_0x2e1194[_0x090a('0xb8')]=[{'all':!![]}];}return db[_0x090a('0x31')][_0x090a('0xb9')](_0x2e1194);})[_0x090a('0x2b')](function(_0x25bf6c){_0x313e59[_0x090a('0xa9')]=_0x25bf6c;return _0x313e59;});}})[_0x090a('0x2b')](respondWithFilteredResult(_0x8fb3a5,_0x2e1194))['catch'](handleError(_0x8fb3a5,null));};exports[_0x090a('0xba')]=function(_0x5365aa,_0x5c6921,_0x2e74be){return db['SmsInteraction'][_0x090a('0xae')]({'where':{'id':_0x5365aa['params']['id']}})['then'](handleEntityNotFound(_0x5c6921,null))[_0x090a('0x2b')](function(_0x430e35){if(_0x430e35){return _0x430e35['setTags'](_0x5365aa[_0x090a('0xb0')]['ids'],_[_0x090a('0xbb')](_0x5365aa[_0x090a('0xb0')],[_0x090a('0xb3'),'id'])||{})[_0x090a('0xbc')](function(){return db[_0x090a('0xbd')]['findAll']({'attributes':['id',_0x090a('0xbe'),'color'],'where':{'id':_0x5365aa[_0x090a('0xb0')][_0x090a('0xb3')]}});})[_0x090a('0x2b')](function(_0x45b977){socket[_0x090a('0xbf')](_0x090a('0xc0'),{'id':Number(_0x5365aa[_0x090a('0xac')]['id']),'tags':_0x45b977||[]});return{'id':Number(_0x5365aa[_0x090a('0xac')]['id']),'tags':_0x45b977||[]};});}})[_0x090a('0x2b')](respondWithResult(_0x5c6921,null))['catch'](handleError(_0x5c6921,null));};exports[_0x090a('0xc1')]=function(_0x59ed16,_0x4b7552,_0x388d96){return db[_0x090a('0x39')]['find']({'where':{'id':_0x59ed16['params']['id']}})[_0x090a('0x2b')](handleEntityNotFound(_0x4b7552,null))[_0x090a('0x2b')](function(_0x23c327){if(_0x23c327){return _0x23c327[_0x090a('0xc1')](_0x59ed16[_0x090a('0x3d')]['ids']);}})[_0x090a('0x2b')](respondWithStatusCode(_0x4b7552,null))['catch'](handleError(_0x4b7552,null));};exports[_0x090a('0xc2')]=function(_0x3842a4,_0x2fbdf0){var _0x59eebe=moment()[_0x090a('0xc3')]()[_0x090a('0x82')]();var _0x361abd=path[_0x090a('0x83')](config['root'],_0x090a('0xc4'),_0x090a('0xc5'),_0x090a('0xc6'));var _0x4672db=path[_0x090a('0x83')](config['root'],_0x090a('0xc4'),_0x090a('0xc5'),_0x090a('0xc7'));var _0x10bf49=path['join'](_0x361abd,_0x59eebe);var _0x5c7455=util[_0x090a('0x62')](_0x090a('0xc8'),_0x3842a4['params']['id'],_0x59eebe);var _0x54d643=path[_0x090a('0x83')](_0x361abd,_0x5c7455);var _0xe9789f=![];return db[_0x090a('0x39')][_0x090a('0xae')]({'where':{'id':_0x3842a4['params']['id']},'include':[{'model':db['SmsMessage'],'as':_0x090a('0xc9'),'attributes':['id',_0x090a('0xb0'),_0x090a('0x5d'),_0x090a('0xca'),_0x090a('0xcb')],'include':[{'model':db['User'],'as':_0x090a('0xcc'),'attributes':['id',_0x090a('0xcd')],'raw':!![]},{'model':db[_0x090a('0xce')],'as':_0x090a('0xcf'),'attributes':['id',_0x090a('0xd0'),'lastName'],'raw':!![]}]},{'model':db[_0x090a('0xd1')],'as':_0x090a('0xd2'),'attributes':['id','name']},{'model':db[_0x090a('0xcc')],'as':_0x090a('0xd3'),'attributes':['id','fullname']}]})[_0x090a('0x2b')](handleEntityNotFound(_0x2fbdf0,null))[_0x090a('0x2b')](function(_0x980e4f){if(_0x980e4f){var _0x257fb4=_0x980e4f[_0x090a('0xd4')]({'plain':!![]});_0xe9789f=!![];var _0x2725b4={'format':'A4','border':_0x090a('0xd5'),'header':{'height':_0x090a('0xd6'),'contents':{'first':_0x090a('0xd7')}},'footer':{'height':_0x090a('0xd8'),'contents':{'default':util[_0x090a('0x62')]('<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[_0x090a('0x62')](_0x090a('0xd9'),_0x090a('0xda'),_0x257fb4['id']),moment()['format'](_0x090a('0xdb'))[_0x090a('0x82')]())}}};fs[_0x090a('0xdc')](_0x10bf49);var _0x568856={'channel':_0x090a('0xda'),'account':_0x257fb4[_0x090a('0xd2')][_0x090a('0xbe')],'agent':_0x257fb4[_0x090a('0xd3')]?_0x257fb4[_0x090a('0xd3')][_0x090a('0xcd')]:_0x090a('0xdd'),'createdAt':moment(_0x257fb4[_0x090a('0x5d')])[_0x090a('0x62')](_0x090a('0xb6'))[_0x090a('0x82')](),'closedAt':_0x257fb4['closed']?moment(_0x257fb4[_0x090a('0xde')])[_0x090a('0x62')](_0x090a('0xb6'))['toString']():'','disposition':_0x257fb4[_0x090a('0xdf')],'messages':_(_0x257fb4['Messages'])[_0x090a('0x76')]({'secret':![]})['map'](function(_0x3b2224){return{'date':moment(_0x3b2224[_0x090a('0x5d')])[_0x090a('0x62')](_0x090a('0xb6'))[_0x090a('0x82')](),'sender':_0x3b2224[_0x090a('0xca')]==='out'?_0x3b2224[_0x090a('0xcc')]?_0x3b2224[_0x090a('0xcc')]['fullname']:_0x090a('0xe0'):_0x3b2224['Contact'][_0x090a('0xd0')]+(_0x3b2224[_0x090a('0xcf')][_0x090a('0xe1')]?'\x20'+_0x3b2224[_0x090a('0xcf')]['lastName']:''),'body':_0x3b2224[_0x090a('0xb0')],'direction':_0x3b2224['direction']===_0x090a('0xe2')?'A':'C','secret':_0x3b2224[_0x090a('0xcb')]};})['value']()};return ejs['renderFile'](path[_0x090a('0x83')](config[_0x090a('0xe3')],'server',_0x090a('0xe4'),_0x090a('0xe5')),{'interaction':_0x568856})['then'](function(_0x515057){return new BPromise(function(_0x5a4fe8,_0x45de28){pdf[_0x090a('0xaf')](_0x515057,_0x2725b4)[_0x090a('0xe6')](path['join'](_0x10bf49,_0x090a('0xe7')+_0x257fb4['id']+'-'+_0x59eebe+_0x090a('0xe8')),function(_0x5d83f7,_0x47ac52){if(_0x5d83f7)return _0x45de28(_0x5d83f7);_0x5a4fe8(_0x47ac52);});});});}})[_0x090a('0x2b')](function(){if(_0xe9789f){return new BPromise(function(_0x78f48f,_0x5365e4){zipdir(_0x10bf49,{'saveTo':_0x54d643},function(_0xad953c,_0x599964){if(_0xad953c)return _0x5365e4(_0xad953c);return _0x78f48f(_0x599964);});})['then'](function(){return new BPromise(function(_0x268559,_0x164b35){rimraf(_0x10bf49,function(_0x378dcf){if(_0x378dcf)_0x164b35(_0x378dcf);return _0x268559();});});})[_0x090a('0x2b')](function(){return _0x2fbdf0['download'](_0x54d643,_0x5c7455,function(_0x3ff1bf){if(_0x3ff1bf){console[_0x090a('0xe9')](_0x090a('0xea'),_0x3ff1bf);}else{fs[_0x090a('0xeb')](_0x54d643);}});});}else{return _0x2fbdf0[_0x090a('0x20')](0xc8);}})[_0x090a('0xaa')](handleError(_0x2fbdf0,null));};
\ No newline at end of file
+var _0x8416=['length','tableAlias','\x20IN\x20?','\x20=\x20?','LIKE','ContactId','\x20LIKE\x20?','c.lastName','c.email','\x20>\x20?','\x20<\x20?','TagId','isNil','isEmpty','i.SmsAccountId\x20IN\x20?','concat','parse','$lte','null','\x20IS\x20NULL','filter','replace','\x27\x27\x27\x27','isNumeric','i.phone\x20LIKE\x20?','toString','MATCH\x20(me.body)\x20AGAINST\x20(?\x20IN\x20BOOLEAN\x20MODE)','DESC','i.id','Sequelize','QueryTypes','SELECT','COUNT(me.id)','read','having','`unreadMessages`\x20=\x200','tag','sms_interaction_has_tags','it.SmsInteractionId\x20=\x20i.id','tools_tags','t.id\x20=\x20it.TagId','t.id\x20IN\x20?','CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','mail_interaction_has_tags','it.MailInteractionId\x20=\x20i.id','`unreadMessages`\x20>\x200','sequelize','count','merge','a.key','i.*','c.firstName','Contact.firstName','Contact.lastName','c.mobile','Contact.mobile','GROUP_CONCAT(DISTINCT\x20t.id)','ui.SmsInteractionId\x20IN\x20?','groupBy','SmsInteractionId','all','rows','params','includeAll','include','find','create','body','describe','addMessage','SmsMessage','ids','getMessages','findOne','sort','$gte','YYYY-MM-DD\x20HH:mm:ss','options','addTags','setTags','spread','Tag','findAll','emit','removeTags','unix','join','server','tmp','attachments','Messages','direction','fullname','CmContact','Contact','firstName','lastName','SmsAccount','Account','Owner','get','10px','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.','User','System','out','secret','root','views','downloadInteraction.html','transcript-','.pdf','download','log','err','unlinkSync','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','path','sox','jsforce','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','defaults','localhost','socket.io-emitter','register','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','update','then','error','name','Users','map','TagIds','split','forEach','Tags','push','catch','index','SmsInteraction','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','where','pick','select','field','color','from','sms_messages','me.SmsInteractionId\x20=\x20i.id','me.read\x20=\x20false','u.id','ui.SmsInteractionId','user_has_sms_interactions','left_join','u.id\x20=\x20ui.UserId','cm_contacts','users','o.id\x20=\x20i.UserId','sms_accounts','a.id\x20=\x20i.SmsAccountId','me.SmsInteractionId\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?','unreadMessages','isArray'];(function(_0x2dadb9,_0x42cfe6){var _0x2f0097=function(_0x21163f){while(--_0x21163f){_0x2dadb9['push'](_0x2dadb9['shift']());}};_0x2f0097(++_0x42cfe6);}(_0x8416,0x150));var _0x6841=function(_0x3a23b4,_0x49d839){_0x3a23b4=_0x3a23b4-0x0;var _0x302bca=_0x8416[_0x3a23b4];return _0x302bca;};'use strict';var pdf=require(_0x6841('0x0'));var emlformat=require(_0x6841('0x1'));var rimraf=require(_0x6841('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x6841('0x3'));var rp=require(_0x6841('0x4'));var moment=require('moment');var BPromise=require(_0x6841('0x5'));var Mustache=require(_0x6841('0x6'));var util=require('util');var path=require(_0x6841('0x7'));var sox=require(_0x6841('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x6841('0x9'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x6841('0xa'));var Papa=require(_0x6841('0xb'));var Redis=require('ioredis');var authService=require(_0x6841('0xc'));var qs=require(_0x6841('0xd'));var hardwareService=require(_0x6841('0xe'));var logger=require(_0x6841('0xf'))(_0x6841('0x10'));var utils=require(_0x6841('0x11'));var config=require(_0x6841('0x12'));var db=require(_0x6841('0x13'))['db'];config['redis']=_[_0x6841('0x14')](config['redis'],{'host':_0x6841('0x15'),'port':0x18eb});var socket=require(_0x6841('0x16'))(new Redis(config['redis']));require('./smsInteraction.socket')[_0x6841('0x17')](socket);function respondWithStatusCode(_0x4b8a37,_0x1f6b0d){_0x1f6b0d=_0x1f6b0d||0xcc;return function(_0x5e89f3){if(_0x5e89f3){return _0x4b8a37[_0x6841('0x18')](_0x1f6b0d);}return _0x4b8a37[_0x6841('0x19')](_0x1f6b0d)[_0x6841('0x1a')]();};}function respondWithResult(_0x4eabf7,_0x59a0b8){_0x59a0b8=_0x59a0b8||0xc8;return function(_0x8eb310){if(_0x8eb310){return _0x4eabf7['status'](_0x59a0b8)[_0x6841('0x1b')](_0x8eb310);}};}function respondWithFilteredResult(_0x1a3d69,_0x5779ea){return function(_0x43cd35){if(_0x43cd35){var _0x2a19e9=_0x43cd35['count'],_0x39ad7e=_0x5779ea['offset'],_0xa1c066=_0x5779ea[_0x6841('0x1c')]+_0x5779ea[_0x6841('0x1d')],_0x94c076;if(_0xa1c066>=_0x2a19e9){_0xa1c066=_0x2a19e9;_0x94c076=0xc8;}else{_0x94c076=0xce;}_0x1a3d69[_0x6841('0x19')](_0x94c076);return _0x1a3d69[_0x6841('0x1e')](_0x6841('0x1f'),_0x39ad7e+'-'+_0xa1c066+'/'+_0x2a19e9)['json'](_0x43cd35);}return null;};}function patchUpdates(_0x27fd64){return function(_0x263bae){try{jsonpatch[_0x6841('0x20')](_0x263bae,_0x27fd64,!![]);}catch(_0x3e5180){return BPromise['reject'](_0x3e5180);}return _0x263bae['save']();};}function saveUpdates(_0x33edbd,_0x4ab05f){return function(_0x518df5){if(_0x518df5){return _0x518df5[_0x6841('0x21')](_0x33edbd)[_0x6841('0x22')](function(_0xbb10a1){return _0xbb10a1;});}return null;};}function removeEntity(_0x35c1f8,_0x29043b){return function(_0x2ed4d1){if(_0x2ed4d1){return _0x2ed4d1['destroy']()[_0x6841('0x22')](function(){_0x35c1f8['status'](0xcc)[_0x6841('0x1a')]();});}};}function handleEntityNotFound(_0x8e5b7b,_0x426d63){return function(_0x375263){if(!_0x375263){_0x8e5b7b['sendStatus'](0x194);}return _0x375263;};}function handleError(_0x120c45,_0x9d1d6e){_0x9d1d6e=_0x9d1d6e||0x1f4;return function(_0x25869f){logger[_0x6841('0x23')](_0x25869f['stack']);if(_0x25869f[_0x6841('0x24')]){delete _0x25869f[_0x6841('0x24')];}_0x120c45[_0x6841('0x19')](_0x9d1d6e)['send'](_0x25869f);};}function getInteractionUsers(_0x1987a9,_0x29500d){return new BPromise(function(_0x256a32,_0x476683){try{if(_0x29500d[_0x1987a9['id']]){_0x1987a9[_0x6841('0x25')]=_[_0x6841('0x26')](_0x29500d[_0x1987a9['id']],function(_0x43dcee){return{'id':_0x43dcee['id']};});}}catch(_0x547ff9){_0x476683(_0x547ff9);}_0x256a32(_0x1987a9);});}function getInteractionTags(_0x210696,_0x33751a){return new BPromise(function(_0x5cf80e,_0x13c55c){try{if(_0x210696['TagIds']){_0x210696['Tags']=[];_0x210696[_0x6841('0x27')][_0x6841('0x28')](',')[_0x6841('0x29')](function(_0x489f30){_0x210696[_0x6841('0x2a')][_0x6841('0x2b')](_0x33751a[_0x489f30]);});}delete _0x210696[_0x6841('0x27')];}catch(_0x2d918f){_0x13c55c(_0x2d918f);}_0x5cf80e(_0x210696);});}function updateSmsInteraction(_0x4d0b52,_0xd0e57b,_0x59c50f){return new BPromise(function(_0x3f1602,_0x51761c){return getInteractionUsers(_0x4d0b52,_0x59c50f)[_0x6841('0x22')](function(_0x264068){return getInteractionTags(_0x264068,_0xd0e57b);})[_0x6841('0x22')](function(_0x47fe6a){_0x3f1602(_0x47fe6a);})[_0x6841('0x2c')](function(_0x56f2e0){_0x51761c(_0x56f2e0);});});}exports[_0x6841('0x2d')]=function(_0x4baae7,_0x4a456e){var _0x317564={},_0x25954d={},_0x41ae2d={'count':0x0,'rows':[]};var _0x3b15ee=db[_0x6841('0x2e')][_0x6841('0x2f')];_0x25954d[_0x6841('0x30')]=_[_0x6841('0x31')](_0x3b15ee);_0x25954d[_0x6841('0x32')]=_[_0x6841('0x31')](_0x4baae7[_0x6841('0x32')]);_0x25954d[_0x6841('0x33')]=_[_0x6841('0x34')](_0x25954d[_0x6841('0x30')],_0x25954d[_0x6841('0x32')]);_0x317564[_0x6841('0x35')]=_[_0x6841('0x34')](_0x25954d[_0x6841('0x30')],qs[_0x6841('0x36')](_0x4baae7[_0x6841('0x32')][_0x6841('0x36')]));_0x317564[_0x6841('0x35')]=_0x317564[_0x6841('0x35')]['length']?_0x317564[_0x6841('0x35')]:_0x25954d['model'];if(!_0x4baae7[_0x6841('0x32')][_0x6841('0x37')](_0x6841('0x38'))){_0x317564[_0x6841('0x1d')]=qs['limit'](_0x4baae7[_0x6841('0x32')][_0x6841('0x1d')]);_0x317564[_0x6841('0x1c')]=qs[_0x6841('0x1c')](_0x4baae7['query'][_0x6841('0x1c')]);}_0x317564[_0x6841('0x39')]=qs['sort'](_0x4baae7[_0x6841('0x32')]['sort']);_0x317564[_0x6841('0x3a')]=qs[_0x6841('0x33')](_[_0x6841('0x3b')](_0x4baae7[_0x6841('0x32')],_0x25954d[_0x6841('0x33')]));var _0x573d20=[];var _0x19efa8=squel[_0x6841('0x3c')]()['field']('id')[_0x6841('0x3d')](_0x6841('0x24'))['field'](_0x6841('0x3e'))[_0x6841('0x3f')]('tools_tags');var _0x1166eb=squel[_0x6841('0x3c')]()[_0x6841('0x3d')]('COUNT(*)')[_0x6841('0x3f')](_0x6841('0x40'),'me')[_0x6841('0x3a')](_0x6841('0x41'))['where']('me.direction\x20=\x20\x27in\x27')[_0x6841('0x3a')](_0x6841('0x42'));var _0x38ba9f=squel[_0x6841('0x3c')]()[_0x6841('0x3d')](_0x6841('0x43'))['field'](_0x6841('0x44'))['from'](_0x6841('0x45'),'ui')[_0x6841('0x46')]('users','u',_0x6841('0x47'));var _0x5c4133=squel[_0x6841('0x3c')]()[_0x6841('0x3f')]('sms_interactions','i')['left_join'](_0x6841('0x48'),'c','c.id\x20=\x20i.ContactId\x20AND\x20c.deletedAt\x20IS\x20NULL')[_0x6841('0x46')](_0x6841('0x49'),'o',_0x6841('0x4a'))[_0x6841('0x46')](_0x6841('0x4b'),'a',_0x6841('0x4c'))['left_join'](_0x6841('0x40'),'me',_0x6841('0x4d'));var _0x1f58fa=squel[_0x6841('0x4e')]();if(_0x4baae7[_0x6841('0x32')][_0x6841('0x4f')]){var _0x389065=JSON['parse'](_0x4baae7['query'][_0x6841('0x4f')]);_[_0x6841('0x31')](_0x389065)['forEach'](function(_0x1f813e){var _0x3b9228=_0x389065[_0x1f813e];if(_0x1f813e===_0x6841('0x50')){var _0x494334=moment(_0x3b9228[_0x6841('0x51')][_0x6841('0x52')])[_0x6841('0x53')](_0x6841('0x54'))[_0x6841('0x55')]()[_0x6841('0x56')]();var _0x526c4c=moment(_0x526c4c)[_0x6841('0x55')]()[_0x6841('0x57')](_0x6841('0x54'))[_0x6841('0x56')]();_0x1f58fa[_0x6841('0x58')](_0x6841('0x59'),_0x494334,_0x526c4c);}else{if(_['isArray'](_0x3b9228['condition'])){_0x3b9228['condition'][_0x6841('0x29')](function(_0x2dc77e){switch(_0x3b9228['condition'][_0x6841('0x51')]){case'IS':if(_0x1f813e!=='TagId'&&_0x1f813e!==_0x6841('0x5a')){if(_[_0x6841('0x5b')](_0x3b9228['value'])&&_0x3b9228[_0x6841('0x51')][_0x6841('0x5c')]>0x1){_0x1f58fa[_0x6841('0x58')](_0x3b9228[_0x6841('0x5d')]+'.'+_0x1f813e+_0x6841('0x5e'),_0x3b9228['value']);}else{_0x1f58fa[_0x6841('0x58')](_0x3b9228[_0x6841('0x5d')]+'.'+_0x1f813e+_0x6841('0x5f'),_0x3b9228[_0x6841('0x51')][0x0]);}}break;case'=':_0x1f58fa[_0x6841('0x58')](_0x3b9228[_0x6841('0x5d')]+'.'+_0x1f813e+'\x20=\x20?',_0x3b9228[_0x6841('0x51')]);break;case _0x6841('0x60'):if(_0x1f813e===_0x6841('0x61')){_0x1f58fa['and']('c.firstName'+_0x6841('0x62'),'%'+_0x3b9228['value']+'%');_0x1f58fa['or'](_0x6841('0x63')+'\x20LIKE\x20?','%'+_0x3b9228[_0x6841('0x51')]+'%');_0x1f58fa['or'](_0x6841('0x64')+_0x6841('0x62'),'%'+_0x3b9228[_0x6841('0x51')]+'%');}else{_0x1f58fa[_0x6841('0x58')](_0x3b9228['tableAlias']+'.'+_0x1f813e+_0x6841('0x62'),'%'+_0x3b9228[_0x6841('0x51')]+'%');}break;case'>':_0x1f58fa[_0x6841('0x58')](_0x3b9228[_0x6841('0x5d')]+'.'+_0x1f813e+_0x6841('0x65'),_0x3b9228[_0x6841('0x51')]);break;case'<':_0x1f58fa[_0x6841('0x58')](_0x3b9228['tableAlias']+'.'+_0x1f813e+_0x6841('0x66'),_0x3b9228[_0x6841('0x51')]);break;}});}else{switch(_0x3b9228['condition'][_0x6841('0x51')]){case'IS':if(_0x1f813e!==_0x6841('0x67')&&_0x1f813e!==_0x6841('0x5a')){if(_[_0x6841('0x5b')](_0x3b9228['value'])&&_0x3b9228[_0x6841('0x51')][_0x6841('0x5c')]>0x1){_0x1f58fa['and'](_0x3b9228['tableAlias']+'.'+_0x1f813e+_0x6841('0x5e'),_0x3b9228[_0x6841('0x51')]);}else{_0x1f58fa[_0x6841('0x58')](_0x3b9228[_0x6841('0x5d')]+'.'+_0x1f813e+_0x6841('0x5f'),_0x3b9228[_0x6841('0x51')][0x0]);}}break;case'=':_0x1f58fa[_0x6841('0x58')](_0x3b9228[_0x6841('0x5d')]+'.'+_0x1f813e+'\x20=\x20?',_0x3b9228['value']);break;case _0x6841('0x60'):if(_0x1f813e==='ContactId'){_0x1f58fa[_0x6841('0x58')]('c.firstName'+_0x6841('0x62'),'%'+_0x3b9228['value']+'%');_0x1f58fa['or'](_0x6841('0x63')+_0x6841('0x62'),'%'+_0x3b9228[_0x6841('0x51')]+'%');_0x1f58fa['or'](_0x6841('0x64')+_0x6841('0x62'),'%'+_0x3b9228['value']+'%');}else{_0x1f58fa['and'](_0x3b9228[_0x6841('0x5d')]+'.'+_0x1f813e+_0x6841('0x62'),'%'+_0x3b9228[_0x6841('0x51')]+'%');}break;case'>':_0x1f58fa[_0x6841('0x58')](_0x3b9228['tableAlias']+'.'+_0x1f813e+_0x6841('0x65'),_0x3b9228[_0x6841('0x51')]);break;case'<':_0x1f58fa[_0x6841('0x58')](_0x3b9228[_0x6841('0x5d')]+'.'+_0x1f813e+'\x20<\x20?',_0x3b9228['value']);break;}}}});}else{var _0x39ab59=_(Object['keys'](_0x4baae7[_0x6841('0x32')]))[_0x6841('0x26')](function(_0x4e3bc4){return _0x3b15ee[_0x6841('0x37')](_0x4e3bc4)?_0x4e3bc4:undefined;})['filter'](function(_0x5d94d7){return!_[_0x6841('0x68')](_0x5d94d7);})[_0x6841('0x51')]();if(!_[_0x6841('0x69')](_0x39ab59)){_0x39ab59['forEach'](function(_0x56b359){if(_0x56b359==='SmsAccountId'){_0x5c4133[_0x6841('0x3a')](_0x6841('0x6a'),[][_0x6841('0x6b')](_0x4baae7[_0x6841('0x32')][_0x56b359]));}else if(_0x56b359===_0x6841('0x50')){var _0x64eb48=JSON[_0x6841('0x6c')](_0x4baae7[_0x6841('0x32')][_0x56b359])['$gte'];var _0x1d13e8=JSON[_0x6841('0x6c')](_0x4baae7[_0x6841('0x32')][_0x56b359])[_0x6841('0x6d')];_0x5c4133[_0x6841('0x3a')]('i.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x64eb48,_0x1d13e8);}else{if(_0x4baae7['query'][_0x56b359]===_0x6841('0x6e')){_0x5c4133['where']('i.'+_0x56b359+_0x6841('0x6f'));}else{_0x5c4133[_0x6841('0x3a')]('i.'+_0x56b359+_0x6841('0x5f'),_0x4baae7[_0x6841('0x32')][_0x56b359]);}}});}if(_0x4baae7[_0x6841('0x32')][_0x6841('0x70')]){var _0x283903=_0x4baae7[_0x6841('0x32')]['filter'][_0x6841('0x71')]('\x5c','\x5c\x5c')['replace']('\x27\x27',_0x6841('0x72'));if(qs[_0x6841('0x73')](_0x283903)){_0x1f58fa['or']('i.id\x20LIKE\x20?',_0x283903+'%')['or'](_0x6841('0x74'),_0x283903+'%');}else{var _0x27e14b=[];_0x283903['split']('\x20')[_0x6841('0x29')](function(_0xec548b){_0x27e14b[_0x6841('0x2b')]('+'+_0xec548b[_0x6841('0x75')]());});var _0x2adc3f=_0x27e14b['join']('\x20');_0x1f58fa['or'](_0x6841('0x76'),_0x2adc3f)['or']('CONCAT(c.firstName,\x20\x27\x20\x27,\x20c.lastName)\x20LIKE\x20?',_0x283903+'%');}}}_0x5c4133[_0x6841('0x3a')](_0x1f58fa);if(_0x317564[_0x6841('0x39')]){_0x317564['order'][_0x6841('0x29')](function(_0x426de4){_0x5c4133[_0x6841('0x39')]('i.'+_0x426de4[0x0],_0x426de4[0x1]===_0x6841('0x77')?![]:!![]);});}_0x5c4133['group'](_0x6841('0x78'));var _0x395d4b={'type':db[_0x6841('0x79')][_0x6841('0x7a')][_0x6841('0x7b')],'raw':!![]};var _0x49339c=_0x5c4133['clone']()[_0x6841('0x3d')]('COUNT(*)')[_0x6841('0x3d')](_0x6841('0x7c'),_0x6841('0x5a'));if(!_0x4baae7[_0x6841('0x32')]['advancedFilter']){if(_0x4baae7[_0x6841('0x32')]['read']){if(_0x4baae7[_0x6841('0x32')][_0x6841('0x7d')]==0x1){_0x49339c['having']('`unreadMessages`\x20=\x200');_0x5c4133[_0x6841('0x7e')](_0x6841('0x7f'));}else{_0x49339c['having']('`unreadMessages`\x20>\x200');_0x5c4133['having']('`unreadMessages`\x20>\x200');}}if(_0x4baae7[_0x6841('0x32')][_0x6841('0x80')]){var _0x343d15=_[_0x6841('0x5b')](_0x4baae7[_0x6841('0x32')][_0x6841('0x80')])?_0x4baae7[_0x6841('0x32')][_0x6841('0x80')]:new Array(_0x4baae7[_0x6841('0x32')][_0x6841('0x80')]);var _0x5126d3=squel[_0x6841('0x4e')]();_0x343d15[_0x6841('0x29')](function(_0x1c7729){_0x5126d3['or']('CONCAT(\x27,\x27,\x20`TagIds`,\x20\x27,\x27)\x20LIKE\x20?','%,'+_0x1c7729+',%');});_0x5c4133[_0x6841('0x7e')](_0x5126d3);_0x49339c[_0x6841('0x46')](_0x6841('0x81'),'it',_0x6841('0x82'));_0x49339c[_0x6841('0x46')](_0x6841('0x83'),'t',_0x6841('0x84'));_0x49339c[_0x6841('0x3a')](_0x6841('0x85'),_0x343d15);}}else{var _0x389065=JSON['parse'](_0x4baae7[_0x6841('0x32')][_0x6841('0x4f')]);_[_0x6841('0x31')](_0x389065)['forEach'](function(_0x115243){var _0x1b93a5=_0x389065[_0x115243];if(_0x115243===_0x6841('0x67')){var _0x3dbf07=_0x1b93a5['value'];var _0xfb4b92=squel['expr']();_0x3dbf07[_0x6841('0x29')](function(_0x4193e4){_0xfb4b92['or'](_0x6841('0x86'),'%,'+_0x4193e4+',%');});_0x5c4133[_0x6841('0x7e')](_0xfb4b92);_0x49339c[_0x6841('0x46')](_0x6841('0x87'),'it',_0x6841('0x88'));_0x49339c[_0x6841('0x46')](_0x6841('0x83'),'t',_0x6841('0x84'));_0x49339c['where'](_0x6841('0x85'),_0x3dbf07);}else if(_0x115243==='unreadMessages'){if(_0x1b93a5[_0x6841('0x51')]['length']===0x1){if(_0x1b93a5[_0x6841('0x51')][0x0]===0x1){_0x49339c[_0x6841('0x7e')](_0x6841('0x7f'));_0x5c4133[_0x6841('0x7e')](_0x6841('0x7f'));}else{_0x49339c[_0x6841('0x7e')](_0x6841('0x89'));_0x5c4133[_0x6841('0x7e')]('`unreadMessages`\x20>\x200');}}}});}db[_0x6841('0x8a')][_0x6841('0x32')](_0x49339c['toString'](),_0x395d4b)[_0x6841('0x22')](function(_0x2bb600){_0x41ae2d[_0x6841('0x8b')]=_0x2bb600['length'];if(_0x41ae2d['count']===0x0)return[];return db[_0x6841('0x8a')]['query'](_0x19efa8[_0x6841('0x75')](),_0x395d4b)[_0x6841('0x22')](function(_0x3e3541){_0x573d20=_['keyBy'](_0x3e3541,'id');_0x395d4b=_[_0x6841('0x8c')](_0x395d4b,{'model':db[_0x6841('0x2e')],'mapToModel':!![],'raw':!![],'nest':!![]});_0x5c4133['field'](_0x6841('0x7c'),_0x6841('0x5a'));_0x5c4133[_0x6841('0x3d')](_0x6841('0x8d'),'Account.key');_0x5c4133[_0x6841('0x3d')](_0x6841('0x8e'));_0x5c4133[_0x6841('0x3d')](_0x6841('0x8f'),_0x6841('0x90'));_0x5c4133['field']('c.lastName',_0x6841('0x91'));_0x5c4133[_0x6841('0x3d')]('c.email','Contact.email');_0x5c4133[_0x6841('0x3d')]('c.phone','Contact.phone');_0x5c4133[_0x6841('0x3d')](_0x6841('0x92'),_0x6841('0x93'));_0x5c4133['field']('c.fax','Contact.fax');_0x5c4133[_0x6841('0x3d')](_0x6841('0x94'),'TagIds');_0x5c4133[_0x6841('0x46')](_0x6841('0x81'),'it',_0x6841('0x82'));_0x5c4133[_0x6841('0x46')](_0x6841('0x83'),'t',_0x6841('0x84'));_0x5c4133['limit'](_0x317564['limit']);_0x5c4133['offset'](_0x317564[_0x6841('0x1c')]);return db['sequelize'][_0x6841('0x32')](_0x5c4133[_0x6841('0x75')](),_0x395d4b);})[_0x6841('0x22')](function(_0xc6e6a9){_0x38ba9f['where'](_0x6841('0x95'),_[_0x6841('0x26')](_0xc6e6a9,'id'));return db[_0x6841('0x8a')][_0x6841('0x32')](_0x38ba9f[_0x6841('0x75')](),_0x395d4b)[_0x6841('0x22')](function(_0x302add){var _0x7d5eab=_[_0x6841('0x96')](_0x302add,_0x6841('0x97'));var _0x27c4e5=[];_0xc6e6a9[_0x6841('0x29')](function(_0x582c20){_0x27c4e5['push'](updateSmsInteraction(_0x582c20,_0x573d20,_0x7d5eab));});return BPromise[_0x6841('0x98')](_0x27c4e5);});});})[_0x6841('0x22')](function(_0x515877){_0x41ae2d[_0x6841('0x99')]=_0x515877;return _0x41ae2d;})[_0x6841('0x22')](respondWithFilteredResult(_0x4a456e,_0x317564))[_0x6841('0x2c')](handleError(_0x4a456e,null));};exports['show']=function(_0x198724,_0x53b0a0){var _0x302574={'raw':![],'where':{'id':_0x198724[_0x6841('0x9a')]['id']}},_0x5c7059={};_0x5c7059[_0x6841('0x30')]=_[_0x6841('0x31')](db[_0x6841('0x2e')][_0x6841('0x2f')]);_0x5c7059[_0x6841('0x32')]=_[_0x6841('0x31')](_0x198724[_0x6841('0x32')]);_0x5c7059['filters']=_[_0x6841('0x34')](_0x5c7059[_0x6841('0x30')],_0x5c7059[_0x6841('0x32')]);_0x302574['attributes']=_[_0x6841('0x34')](_0x5c7059['model'],qs['fields'](_0x198724[_0x6841('0x32')]['fields']));_0x302574[_0x6841('0x35')]=_0x302574[_0x6841('0x35')]['length']?_0x302574[_0x6841('0x35')]:_0x5c7059[_0x6841('0x30')];if(_0x198724[_0x6841('0x32')][_0x6841('0x9b')]){_0x302574[_0x6841('0x9c')]=[{'all':!![]}];}_0x302574=_[_0x6841('0x8c')]({},_0x302574,_0x198724['options']);return db['SmsInteraction'][_0x6841('0x9d')](_0x302574)[_0x6841('0x22')](handleEntityNotFound(_0x53b0a0,null))[_0x6841('0x22')](respondWithResult(_0x53b0a0,null))[_0x6841('0x2c')](handleError(_0x53b0a0,null));};exports['create']=function(_0x3d0a76,_0x2c2f62){return db['SmsInteraction'][_0x6841('0x9e')](_0x3d0a76[_0x6841('0x9f')],{})[_0x6841('0x22')](respondWithResult(_0x2c2f62,0xc9))[_0x6841('0x2c')](handleError(_0x2c2f62,null));};exports['update']=function(_0x4b4c90,_0x54cde0){if(_0x4b4c90[_0x6841('0x9f')]['id']){delete _0x4b4c90[_0x6841('0x9f')]['id'];}return db[_0x6841('0x2e')][_0x6841('0x9d')]({'where':{'id':_0x4b4c90[_0x6841('0x9a')]['id']}})[_0x6841('0x22')](handleEntityNotFound(_0x54cde0,null))['then'](saveUpdates(_0x4b4c90['body'],null))[_0x6841('0x22')](respondWithResult(_0x54cde0,null))[_0x6841('0x2c')](handleError(_0x54cde0,null));};exports['destroy']=function(_0x9c877c,_0x1c8788){return db[_0x6841('0x2e')][_0x6841('0x9d')]({'where':{'id':_0x9c877c[_0x6841('0x9a')]['id']}})[_0x6841('0x22')](handleEntityNotFound(_0x1c8788,null))['then'](removeEntity(_0x1c8788,null))[_0x6841('0x2c')](handleError(_0x1c8788,null));};exports[_0x6841('0xa0')]=function(_0x11ae41,_0x5b8114){return db['SmsInteraction'][_0x6841('0xa0')]()[_0x6841('0x22')](respondWithResult(_0x5b8114,null))[_0x6841('0x2c')](handleError(_0x5b8114,null));};exports[_0x6841('0xa1')]=function(_0x181168,_0x4a1c30,_0x1ac3ca){return db[_0x6841('0xa2')][_0x6841('0x9d')]({'where':{'id':_0x181168[_0x6841('0x9a')]['id']}})[_0x6841('0x22')](handleEntityNotFound(_0x4a1c30,null))[_0x6841('0x22')](function(_0x442d77){if(_0x442d77){return _0x442d77['addMessage'](_0x181168[_0x6841('0x9f')][_0x6841('0xa3')],_['omit'](_0x181168['body'],[_0x6841('0xa3'),'id'])||{});}})['then'](respondWithResult(_0x4a1c30,null))['catch'](handleError(_0x4a1c30,null));};exports[_0x6841('0xa4')]=function(_0x11068b,_0x16cc0c,_0x54c762){var _0x17cc0f={'raw':![],'where':{}};var _0x4eac97={};var _0x2fc03e={'count':0x0,'rows':[]};return db[_0x6841('0x2e')][_0x6841('0xa5')]({'where':{'id':_0x11068b[_0x6841('0x9a')]['id']}})[_0x6841('0x22')](handleEntityNotFound(_0x16cc0c,null))[_0x6841('0x22')](function(_0x385c9b){if(_0x385c9b){_0x4eac97[_0x6841('0x30')]=_[_0x6841('0x31')](db[_0x6841('0xa2')][_0x6841('0x2f')]);_0x4eac97[_0x6841('0x32')]=_[_0x6841('0x31')](_0x11068b[_0x6841('0x32')]);_0x4eac97[_0x6841('0x33')]=_[_0x6841('0x34')](_0x4eac97['model'],_0x4eac97[_0x6841('0x32')]);_0x17cc0f[_0x6841('0x35')]=_[_0x6841('0x34')](_0x4eac97[_0x6841('0x30')],qs[_0x6841('0x36')](_0x11068b[_0x6841('0x32')]['fields']));_0x17cc0f[_0x6841('0x35')]=_0x17cc0f[_0x6841('0x35')][_0x6841('0x5c')]?_0x17cc0f[_0x6841('0x35')]:_0x4eac97['model'];if(!_0x11068b['query'][_0x6841('0x37')](_0x6841('0x38'))){_0x17cc0f['limit']=qs['limit'](_0x11068b[_0x6841('0x32')][_0x6841('0x1d')]);_0x17cc0f[_0x6841('0x1c')]=qs['offset'](_0x11068b['query']['offset']);}_0x17cc0f['order']=qs[_0x6841('0xa6')](_0x11068b[_0x6841('0x32')][_0x6841('0xa6')]);_0x17cc0f[_0x6841('0x3a')]=qs[_0x6841('0x33')](_[_0x6841('0x3b')](_0x11068b[_0x6841('0x32')],_0x4eac97[_0x6841('0x33')]));_0x17cc0f[_0x6841('0x3a')]['SmsInteractionId']=_0x385c9b['id'];if(_0x11068b[_0x6841('0x32')][_0x6841('0x70')]){_0x17cc0f[_0x6841('0x3a')]=_[_0x6841('0x8c')](_0x17cc0f['where'],{'$or':_[_0x6841('0x26')](_0x17cc0f['attributes'],function(_0x2dc696){var _0x46ecff={};_0x46ecff[_0x2dc696]={'$like':'%'+_0x11068b[_0x6841('0x32')][_0x6841('0x70')]+'%'};return _0x46ecff;})});}if(_0x11068b['query'][_0x6841('0xa7')]){var _0x365089=_0x11068b[_0x6841('0x32')]['$gte'][_0x6841('0x28')](',');var _0x1cfd27={};_0x1cfd27[_0x365089[0x0]]={'$gte':moment(_0x365089[0x1])[_0x6841('0x56')](_0x6841('0xa8'))};_0x17cc0f['where']=_[_0x6841('0x8c')](_0x17cc0f[_0x6841('0x3a')],_0x1cfd27);}_0x17cc0f=_[_0x6841('0x8c')]({},_0x17cc0f,_0x11068b[_0x6841('0xa9')]);return db['SmsMessage'][_0x6841('0x8b')]({'where':_0x17cc0f[_0x6841('0x3a')]})[_0x6841('0x22')](function(_0x492283){_0x2fc03e[_0x6841('0x8b')]=_0x492283;if(_0x11068b[_0x6841('0x32')][_0x6841('0x9b')]){_0x17cc0f[_0x6841('0x9c')]=[{'all':!![]}];}return db[_0x6841('0xa2')]['findAll'](_0x17cc0f);})['then'](function(_0x5e6b7e){_0x2fc03e['rows']=_0x5e6b7e;return _0x2fc03e;});}})[_0x6841('0x22')](respondWithFilteredResult(_0x16cc0c,_0x17cc0f))[_0x6841('0x2c')](handleError(_0x16cc0c,null));};exports[_0x6841('0xaa')]=function(_0x4026ec,_0x18e184,_0x11d196){return db['SmsInteraction'][_0x6841('0x9d')]({'where':{'id':_0x4026ec[_0x6841('0x9a')]['id']}})[_0x6841('0x22')](handleEntityNotFound(_0x18e184,null))[_0x6841('0x22')](function(_0x319a0a){if(_0x319a0a){return _0x319a0a[_0x6841('0xab')](_0x4026ec[_0x6841('0x9f')][_0x6841('0xa3')],_['omit'](_0x4026ec[_0x6841('0x9f')],['ids','id'])||{})[_0x6841('0xac')](function(){return db[_0x6841('0xad')][_0x6841('0xae')]({'attributes':['id',_0x6841('0x24'),_0x6841('0x3e')],'where':{'id':_0x4026ec[_0x6841('0x9f')][_0x6841('0xa3')]}});})[_0x6841('0x22')](function(_0x4c9279){socket[_0x6841('0xaf')]('smsInteractionTags:save',{'id':Number(_0x4026ec[_0x6841('0x9a')]['id']),'tags':_0x4c9279||[]});return{'id':Number(_0x4026ec[_0x6841('0x9a')]['id']),'tags':_0x4c9279||[]};});}})['then'](respondWithResult(_0x18e184,null))[_0x6841('0x2c')](handleError(_0x18e184,null));};exports[_0x6841('0xb0')]=function(_0x12835c,_0x27d24f,_0x41397){return db[_0x6841('0x2e')][_0x6841('0x9d')]({'where':{'id':_0x12835c['params']['id']}})['then'](handleEntityNotFound(_0x27d24f,null))[_0x6841('0x22')](function(_0x5a4a5e){if(_0x5a4a5e){return _0x5a4a5e[_0x6841('0xb0')](_0x12835c[_0x6841('0x32')][_0x6841('0xa3')]);}})[_0x6841('0x22')](respondWithStatusCode(_0x27d24f,null))[_0x6841('0x2c')](handleError(_0x27d24f,null));};exports['download']=function(_0x281070,_0x7f7be2){var _0xbcb50a=moment()[_0x6841('0xb1')]()[_0x6841('0x75')]();var _0x59bc33=path[_0x6841('0xb2')](config['root'],_0x6841('0xb3'),'files',_0x6841('0xb4'));var _0x4cb791=path['join'](config['root'],'server','files',_0x6841('0xb5'));var _0x482554=path[_0x6841('0xb2')](_0x59bc33,_0xbcb50a);var _0x260abf=util[_0x6841('0x56')]('transcript-%d-%s.zip',_0x281070[_0x6841('0x9a')]['id'],_0xbcb50a);var _0x3aeee4=path[_0x6841('0xb2')](_0x59bc33,_0x260abf);var _0x3c8360=![];return db[_0x6841('0x2e')][_0x6841('0x9d')]({'where':{'id':_0x281070[_0x6841('0x9a')]['id']},'include':[{'model':db[_0x6841('0xa2')],'as':_0x6841('0xb6'),'attributes':['id',_0x6841('0x9f'),'createdAt',_0x6841('0xb7'),'secret'],'include':[{'model':db['User'],'as':'User','attributes':['id',_0x6841('0xb8')],'raw':!![]},{'model':db[_0x6841('0xb9')],'as':_0x6841('0xba'),'attributes':['id',_0x6841('0xbb'),_0x6841('0xbc')],'raw':!![]}]},{'model':db[_0x6841('0xbd')],'as':_0x6841('0xbe'),'attributes':['id',_0x6841('0x24')]},{'model':db['User'],'as':_0x6841('0xbf'),'attributes':['id','fullname']}]})[_0x6841('0x22')](handleEntityNotFound(_0x7f7be2,null))[_0x6841('0x22')](function(_0x4c02f1){if(_0x4c02f1){var _0x552904=_0x4c02f1[_0x6841('0xc0')]({'plain':!![]});_0x3c8360=!![];var _0xc20a0c={'format':'A4','border':_0x6841('0xc1'),'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':_0x6841('0xc2'),'contents':{'default':util[_0x6841('0x56')](_0x6841('0xc3'),util[_0x6841('0x56')](_0x6841('0xc4'),'Sms',_0x552904['id']),moment()[_0x6841('0x56')](_0x6841('0xc5'))[_0x6841('0x75')]())}}};fs[_0x6841('0xc6')](_0x482554);var _0x1e5095={'channel':_0x6841('0xc7'),'account':_0x552904['Account'][_0x6841('0x24')],'agent':_0x552904[_0x6841('0xbf')]?_0x552904[_0x6841('0xbf')][_0x6841('0xb8')]:_0x6841('0xc8'),'createdAt':moment(_0x552904[_0x6841('0x50')])[_0x6841('0x56')](_0x6841('0xa8'))['toString'](),'closedAt':_0x552904['closed']?moment(_0x552904['closedAt'])['format'](_0x6841('0xa8'))['toString']():'','disposition':_0x552904['disposition'],'messages':_(_0x552904[_0x6841('0xb6')])[_0x6841('0x70')]({'secret':![]})[_0x6841('0x26')](function(_0x3a717e){return{'date':moment(_0x3a717e[_0x6841('0x50')])[_0x6841('0x56')](_0x6841('0xa8'))[_0x6841('0x75')](),'sender':_0x3a717e['direction']==='out'?_0x3a717e['User']?_0x3a717e[_0x6841('0xc9')][_0x6841('0xb8')]:_0x6841('0xca'):_0x3a717e['Contact'][_0x6841('0xbb')]+(_0x3a717e[_0x6841('0xba')]['lastName']?'\x20'+_0x3a717e[_0x6841('0xba')][_0x6841('0xbc')]:''),'body':_0x3a717e['body'],'direction':_0x3a717e['direction']===_0x6841('0xcb')?'A':'C','secret':_0x3a717e[_0x6841('0xcc')]};})[_0x6841('0x51')]()};return ejs['renderFile'](path[_0x6841('0xb2')](config[_0x6841('0xcd')],_0x6841('0xb3'),_0x6841('0xce'),_0x6841('0xcf')),{'interaction':_0x1e5095})[_0x6841('0x22')](function(_0x4325be){return new BPromise(function(_0x118a29,_0x8a813){pdf[_0x6841('0x9e')](_0x4325be,_0xc20a0c)['toFile'](path[_0x6841('0xb2')](_0x482554,_0x6841('0xd0')+_0x552904['id']+'-'+_0xbcb50a+_0x6841('0xd1')),function(_0xb61add,_0x566f79){if(_0xb61add)return _0x8a813(_0xb61add);_0x118a29(_0x566f79);});});});}})[_0x6841('0x22')](function(){if(_0x3c8360){return new BPromise(function(_0x54b111,_0x2705e0){zipdir(_0x482554,{'saveTo':_0x3aeee4},function(_0x3f3a3a,_0x29a5e4){if(_0x3f3a3a)return _0x2705e0(_0x3f3a3a);return _0x54b111(_0x29a5e4);});})[_0x6841('0x22')](function(){return new BPromise(function(_0x464312,_0x4cc28b){rimraf(_0x482554,function(_0x2b2416){if(_0x2b2416)_0x4cc28b(_0x2b2416);return _0x464312();});});})['then'](function(){return _0x7f7be2[_0x6841('0xd2')](_0x3aeee4,_0x260abf,function(_0x41741a){if(_0x41741a){console[_0x6841('0xd3')](_0x6841('0xd4'),_0x41741a);}else{fs[_0x6841('0xd5')](_0x3aeee4);}});});}else{return _0x7f7be2[_0x6841('0x18')](0xc8);}})[_0x6841('0x2c')](handleError(_0x7f7be2,null));};
\ No newline at end of file
index 1f68e82..c0b3016 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3f51=['setDataValue','Users','map','length','emit','catch','hasOwnProperty','hook','exports','events','../../mysqldb','SmsMessage','setMaxListeners','save','update','remove','getUsers'];(function(_0x1a36a5,_0x746928){var _0x746243=function(_0x481966){while(--_0x481966){_0x1a36a5['push'](_0x1a36a5['shift']());}};_0x746243(++_0x746928);}(_0x3f51,0xe6));var _0x13f5=function(_0x360f69,_0x395f7f){_0x360f69=_0x360f69-0x0;var _0x2d2760=_0x3f51[_0x360f69];return _0x2d2760;};'use strict';var EventEmitter=require(_0x13f5('0x0'));var SmsInteraction=require(_0x13f5('0x1'))['db']['SmsInteraction'];var SmsMessage=require(_0x13f5('0x1'))['db'][_0x13f5('0x2')];var SmsInteractionEvents=new EventEmitter();SmsInteractionEvents[_0x13f5('0x3')](0x0);var events={'afterCreate':_0x13f5('0x4'),'afterUpdate':_0x13f5('0x5'),'afterDestroy':_0x13f5('0x6')};function emitEvent(_0x393d49){return function(_0x56c134,_0x449100,_0x26b8c6){_0x56c134[_0x13f5('0x7')]({'attributes':['id'],'raw':!![]})['then'](function(_0x3f30d8){_0x56c134[_0x13f5('0x8')](_0x13f5('0x9'),_0x3f30d8[_0x13f5('0xa')](function(_0x11e523){return{'id':_0x11e523['id']};}));return SmsMessage['findAll']({'where':{'SmsInteractionId':_0x56c134['id'],'direction':'in','read':![]},'raw':!![]});})['then'](function(_0x149cbb){_0x56c134[_0x13f5('0x8')]('unreadMessages',_0x149cbb[_0x13f5('0xb')]);SmsInteractionEvents['emit'](_0x393d49+':'+_0x56c134['id'],_0x56c134);SmsInteractionEvents[_0x13f5('0xc')](_0x393d49,_0x56c134);_0x26b8c6(null);})[_0x13f5('0xd')](_0x26b8c6(null));};}for(var e in events){if(events[_0x13f5('0xe')](e)){var event=events[e];SmsInteraction[_0x13f5('0xf')](e,emitEvent(event));}}module[_0x13f5('0x10')]=SmsInteractionEvents;
\ No newline at end of file
+var _0x72c2=['exports','events','../../mysqldb','SmsInteraction','SmsMessage','setMaxListeners','save','update','remove','then','setDataValue','Users','map','findAll','unreadMessages','length','emit','catch','hasOwnProperty','hook'];(function(_0xca5d10,_0x251c6d){var _0x3b5d08=function(_0x2376b2){while(--_0x2376b2){_0xca5d10['push'](_0xca5d10['shift']());}};_0x3b5d08(++_0x251c6d);}(_0x72c2,0x65));var _0x272c=function(_0x31ed9b,_0x715115){_0x31ed9b=_0x31ed9b-0x0;var _0x3796b4=_0x72c2[_0x31ed9b];return _0x3796b4;};'use strict';var EventEmitter=require(_0x272c('0x0'));var SmsInteraction=require(_0x272c('0x1'))['db'][_0x272c('0x2')];var SmsMessage=require(_0x272c('0x1'))['db'][_0x272c('0x3')];var SmsInteractionEvents=new EventEmitter();SmsInteractionEvents[_0x272c('0x4')](0x0);var events={'afterCreate':_0x272c('0x5'),'afterUpdate':_0x272c('0x6'),'afterDestroy':_0x272c('0x7')};function emitEvent(_0x595947){return function(_0x3daf65,_0x63f85c,_0x4d5946){_0x3daf65['getUsers']({'attributes':['id'],'raw':!![]})[_0x272c('0x8')](function(_0x526072){_0x3daf65[_0x272c('0x9')](_0x272c('0xa'),_0x526072[_0x272c('0xb')](function(_0x17cdec){return{'id':_0x17cdec['id']};}));return SmsMessage[_0x272c('0xc')]({'where':{'SmsInteractionId':_0x3daf65['id'],'direction':'in','read':![]},'raw':!![]});})[_0x272c('0x8')](function(_0x5f0684){_0x3daf65[_0x272c('0x9')](_0x272c('0xd'),_0x5f0684[_0x272c('0xe')]);SmsInteractionEvents[_0x272c('0xf')](_0x595947+':'+_0x3daf65['id'],_0x3daf65);SmsInteractionEvents['emit'](_0x595947,_0x3daf65);_0x4d5946(null);})[_0x272c('0x10')](_0x4d5946(null));};}for(var e in events){if(events[_0x272c('0x11')](e)){var event=events[e];SmsInteraction[_0x272c('0x12')](e,emitEvent(event));}}module[_0x272c('0x13')]=SmsInteractionEvents;
\ No newline at end of file
index 1338c07..e552bca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2909=['sms_interactions','closed','format','util','api','moment','request-promise','path','rimraf','../../config/environment','./smsInteraction.attributes','define','SmsInteraction'];(function(_0x25dc41,_0x41a32e){var _0xe6e706=function(_0x12f52b){while(--_0x12f52b){_0x25dc41['push'](_0x25dc41['shift']());}};_0xe6e706(++_0x41a32e);}(_0x2909,0x16f));var _0x9290=function(_0xca8ca8,_0x5b3991){_0xca8ca8=_0xca8ca8-0x0;var _0x31e38b=_0x2909[_0xca8ca8];return _0x31e38b;};'use strict';var _=require('lodash');var util=require(_0x9290('0x0'));var logger=require('../../config/logger')(_0x9290('0x1'));var moment=require(_0x9290('0x2'));var BPromise=require('bluebird');var rp=require(_0x9290('0x3'));var fs=require('fs');var path=require(_0x9290('0x4'));var rimraf=require(_0x9290('0x5'));var config=require(_0x9290('0x6'));var attributes=require(_0x9290('0x7'));module['exports']=function(_0x541d6d,_0x19359f){return _0x541d6d[_0x9290('0x8')](_0x9290('0x9'),attributes,{'tableName':_0x9290('0xa'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x31a0e1,_0x39918a,_0x162920){if(_0x31a0e1['changed'](_0x9290('0xb'))){_0x31a0e1['closedAt']=moment()[_0x9290('0xc')]('YYYY-MM-DD\x20HH:mm:ss');}_0x162920(null,_0x31a0e1);}}});};
\ No newline at end of file
+var _0x69d0=['../../config/environment','exports','SmsInteraction','changed','closedAt','format','lodash','../../config/logger','moment','bluebird','request-promise','path','rimraf'];(function(_0x316efa,_0x20a1e1){var _0x4d96cc=function(_0x4a0648){while(--_0x4a0648){_0x316efa['push'](_0x316efa['shift']());}};_0x4d96cc(++_0x20a1e1);}(_0x69d0,0x18c));var _0x069d=function(_0x599aac,_0x29b30b){_0x599aac=_0x599aac-0x0;var _0x514560=_0x69d0[_0x599aac];return _0x514560;};'use strict';var _=require(_0x069d('0x0'));var util=require('util');var logger=require(_0x069d('0x1'))('api');var moment=require(_0x069d('0x2'));var BPromise=require(_0x069d('0x3'));var rp=require(_0x069d('0x4'));var fs=require('fs');var path=require(_0x069d('0x5'));var rimraf=require(_0x069d('0x6'));var config=require(_0x069d('0x7'));var attributes=require('./smsInteraction.attributes');module[_0x069d('0x8')]=function(_0x5f3f08,_0x3dce72){return _0x5f3f08['define'](_0x069d('0x9'),attributes,{'tableName':'sms_interactions','paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0xc46b65,_0x2d6e7d,_0x31ef8c){if(_0xc46b65[_0x069d('0xa')]('closed')){_0xc46b65[_0x069d('0xb')]=moment()[_0x069d('0xc')]('YYYY-MM-DD\x20HH:mm:ss');}_0x31ef8c(null,_0xc46b65);}}});};
\ No newline at end of file
index c968bf5..dd00ae3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x56bf=['util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','redis','localhost','socket.io-emitter','./smsInteraction.socket','register','request','then','info','debug','request\x20sent','error','code','SmsInteraction,\x20%s,\x20%s','message','result','catch','UpdateSmsInteraction','SmsInteraction','update','options','raw','where','attributes','limit','stringify','AddTagsToSmsInteraction','addTags','body','omit','ids','spread','AddTags'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x56bf,0x1d9));var _0xf56b=function(_0x1fdb40,_0x51351c){_0x1fdb40=_0x1fdb40-0x0;var _0x281f93=_0x56bf[_0x1fdb40];return _0x281f93;};'use strict';var _=require('lodash');var util=require(_0xf56b('0x0'));var moment=require(_0xf56b('0x1'));var BPromise=require(_0xf56b('0x2'));var rs=require(_0xf56b('0x3'));var fs=require('fs');var Redis=require(_0xf56b('0x4'));var db=require(_0xf56b('0x5'))['db'];var utils=require(_0xf56b('0x6'));var logger=require(_0xf56b('0x7'))(_0xf56b('0x8'));var config=require('../../config/environment');var jayson=require(_0xf56b('0x9'));var client=jayson[_0xf56b('0xa')]['http']({'port':0x232a});config[_0xf56b('0xb')]=_['defaults'](config[_0xf56b('0xb')],{'host':_0xf56b('0xc'),'port':0x18eb});var socket=require(_0xf56b('0xd'))(new Redis(config[_0xf56b('0xb')]));require(_0xf56b('0xe'))[_0xf56b('0xf')](socket);function respondWithRpcPromise(_0x10c1c9,_0xf6c38e,_0x37aa85){return new BPromise(function(_0x3a1b7a,_0x435488){return client[_0xf56b('0x10')](_0x10c1c9,_0x37aa85)[_0xf56b('0x11')](function(_0x172b3d){logger[_0xf56b('0x12')]('SmsInteraction,\x20%s,\x20%s',_0xf6c38e,'request\x20sent');logger[_0xf56b('0x13')]('SmsInteraction,\x20%s,\x20%s,\x20%s',_0xf6c38e,_0xf56b('0x14'),JSON['stringify'](_0x172b3d));if(_0x172b3d[_0xf56b('0x15')]){if(_0x172b3d[_0xf56b('0x15')][_0xf56b('0x16')]===0x1f4){logger[_0xf56b('0x15')](_0xf56b('0x17'),_0xf6c38e,_0x172b3d[_0xf56b('0x15')][_0xf56b('0x18')]);return _0x435488(_0x172b3d[_0xf56b('0x15')][_0xf56b('0x18')]);}logger[_0xf56b('0x15')](_0xf56b('0x17'),_0xf6c38e,_0x172b3d[_0xf56b('0x15')][_0xf56b('0x18')]);return _0x3a1b7a(_0x172b3d[_0xf56b('0x15')][_0xf56b('0x18')]);}else{logger[_0xf56b('0x12')](_0xf56b('0x17'),_0xf6c38e,_0xf56b('0x14'));_0x3a1b7a(_0x172b3d[_0xf56b('0x19')][_0xf56b('0x18')]);}})[_0xf56b('0x1a')](function(_0x502a3e){logger[_0xf56b('0x15')]('SmsInteraction,\x20%s,\x20%s',_0xf6c38e,_0x502a3e);_0x435488(_0x502a3e);});});}exports[_0xf56b('0x1b')]=function(_0xe42418){var _0x3e1a18=this;return new Promise(function(_0x444d9e,_0x5eb163){return db[_0xf56b('0x1c')][_0xf56b('0x1d')](_0xe42418['body'],{'raw':_0xe42418['options']?_0xe42418[_0xf56b('0x1e')][_0xf56b('0x1f')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0xe42418[_0xf56b('0x1e')]?_0xe42418['options'][_0xf56b('0x20')]||null:null,'attributes':_0xe42418[_0xf56b('0x1e')]?_0xe42418[_0xf56b('0x1e')][_0xf56b('0x21')]||null:null,'limit':_0xe42418['options']?_0xe42418[_0xf56b('0x1e')][_0xf56b('0x22')]||null:null})[_0xf56b('0x11')](function(_0x11ef31){logger[_0xf56b('0x12')](_0xf56b('0x1b'),_0xe42418);logger[_0xf56b('0x13')](_0xf56b('0x1b'),_0xe42418,JSON[_0xf56b('0x23')](_0x11ef31));_0x444d9e(_0x11ef31);})[_0xf56b('0x1a')](function(_0x57781d){logger[_0xf56b('0x15')]('UpdateSmsInteraction',_0x57781d['message'],_0xe42418);_0x5eb163(_0x3e1a18[_0xf56b('0x15')](0x1f4,_0x57781d[_0xf56b('0x18')]));});});};exports[_0xf56b('0x24')]=function(_0x2a1dcf){return new Promise(function(_0x48fc4a,_0x5d8e60){return db[_0xf56b('0x1c')]['find']({'where':_0x2a1dcf['options']?_0x2a1dcf[_0xf56b('0x1e')][_0xf56b('0x20')]||null:null})['then'](function(_0x599f2b){if(_0x599f2b){return _0x599f2b[_0xf56b('0x25')](_0x2a1dcf[_0xf56b('0x26')]['ids'],_[_0xf56b('0x27')](_0x2a1dcf['body'],[_0xf56b('0x28'),'id'])||{});}})[_0xf56b('0x29')](function(_0x416738){logger[_0xf56b('0x12')](_0xf56b('0x2a'),_0x2a1dcf);logger[_0xf56b('0x13')]('AddTags',_0x2a1dcf,JSON[_0xf56b('0x23')](_0x416738));_0x48fc4a(_0x416738);})[_0xf56b('0x1a')](function(_0x17688f){logger[_0xf56b('0x15')](_0xf56b('0x2a'),_0x17688f['message'],_0x2a1dcf);_0x5d8e60(_this[_0xf56b('0x15')](0x1f4,_0x17688f['message']));});});};
\ No newline at end of file
+var _0x301a=['where','limit','then','UpdateSmsInteraction','stringify','find','addTags','omit','AddTags','debug','lodash','util','moment','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./smsInteraction.socket','request','info','SmsInteraction,\x20%s,\x20%s','request\x20sent','SmsInteraction,\x20%s,\x20%s,\x20%s','error','code','message','catch','SmsInteraction','update','body','raw','options'];(function(_0x5e9232,_0x70026c){var _0x2c865a=function(_0x2d4ad2){while(--_0x2d4ad2){_0x5e9232['push'](_0x5e9232['shift']());}};_0x2c865a(++_0x70026c);}(_0x301a,0x1c2));var _0xa301=function(_0x3eeeb0,_0x4c0c11){_0x3eeeb0=_0x3eeeb0-0x0;var _0x42f1b5=_0x301a[_0x3eeeb0];return _0x42f1b5;};'use strict';var _=require(_0xa301('0x0'));var util=require(_0xa301('0x1'));var moment=require(_0xa301('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0xa301('0x3'))['db'];var utils=require(_0xa301('0x4'));var logger=require(_0xa301('0x5'))(_0xa301('0x6'));var config=require(_0xa301('0x7'));var jayson=require(_0xa301('0x8'));var client=jayson[_0xa301('0x9')][_0xa301('0xa')]({'port':0x232a});config[_0xa301('0xb')]=_[_0xa301('0xc')](config[_0xa301('0xb')],{'host':_0xa301('0xd'),'port':0x18eb});var socket=require(_0xa301('0xe'))(new Redis(config[_0xa301('0xb')]));require(_0xa301('0xf'))['register'](socket);function respondWithRpcPromise(_0x55a092,_0x508576,_0x5137f1){return new BPromise(function(_0x59b842,_0x5400f3){return client[_0xa301('0x10')](_0x55a092,_0x5137f1)['then'](function(_0x8eef0d){logger[_0xa301('0x11')](_0xa301('0x12'),_0x508576,_0xa301('0x13'));logger['debug'](_0xa301('0x14'),_0x508576,_0xa301('0x13'),JSON['stringify'](_0x8eef0d));if(_0x8eef0d[_0xa301('0x15')]){if(_0x8eef0d['error'][_0xa301('0x16')]===0x1f4){logger[_0xa301('0x15')](_0xa301('0x12'),_0x508576,_0x8eef0d[_0xa301('0x15')][_0xa301('0x17')]);return _0x5400f3(_0x8eef0d[_0xa301('0x15')][_0xa301('0x17')]);}logger[_0xa301('0x15')](_0xa301('0x12'),_0x508576,_0x8eef0d[_0xa301('0x15')][_0xa301('0x17')]);return _0x59b842(_0x8eef0d['error']['message']);}else{logger[_0xa301('0x11')](_0xa301('0x12'),_0x508576,'request\x20sent');_0x59b842(_0x8eef0d['result'][_0xa301('0x17')]);}})[_0xa301('0x18')](function(_0x2559aa){logger[_0xa301('0x15')](_0xa301('0x12'),_0x508576,_0x2559aa);_0x5400f3(_0x2559aa);});});}exports['UpdateSmsInteraction']=function(_0x555eaf){var _0x1dd7bf=this;return new Promise(function(_0x123d2a,_0x52d35c){return db[_0xa301('0x19')][_0xa301('0x1a')](_0x555eaf[_0xa301('0x1b')],{'raw':_0x555eaf['options']?_0x555eaf['options'][_0xa301('0x1c')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x555eaf[_0xa301('0x1d')]?_0x555eaf[_0xa301('0x1d')][_0xa301('0x1e')]||null:null,'attributes':_0x555eaf[_0xa301('0x1d')]?_0x555eaf[_0xa301('0x1d')]['attributes']||null:null,'limit':_0x555eaf['options']?_0x555eaf[_0xa301('0x1d')][_0xa301('0x1f')]||null:null})[_0xa301('0x20')](function(_0x3045d4){logger[_0xa301('0x11')](_0xa301('0x21'),_0x555eaf);logger['debug']('UpdateSmsInteraction',_0x555eaf,JSON[_0xa301('0x22')](_0x3045d4));_0x123d2a(_0x3045d4);})['catch'](function(_0x57a4ac){logger[_0xa301('0x15')]('UpdateSmsInteraction',_0x57a4ac['message'],_0x555eaf);_0x52d35c(_0x1dd7bf[_0xa301('0x15')](0x1f4,_0x57a4ac['message']));});});};exports['AddTagsToSmsInteraction']=function(_0x573a9c){return new Promise(function(_0x3dccd5,_0xa4deaa){return db[_0xa301('0x19')][_0xa301('0x23')]({'where':_0x573a9c['options']?_0x573a9c[_0xa301('0x1d')][_0xa301('0x1e')]||null:null})[_0xa301('0x20')](function(_0x1171e3){if(_0x1171e3){return _0x1171e3[_0xa301('0x24')](_0x573a9c['body']['ids'],_[_0xa301('0x25')](_0x573a9c['body'],['ids','id'])||{});}})['spread'](function(_0x142d9c){logger[_0xa301('0x11')](_0xa301('0x26'),_0x573a9c);logger[_0xa301('0x27')](_0xa301('0x26'),_0x573a9c,JSON[_0xa301('0x22')](_0x142d9c));_0x3dccd5(_0x142d9c);})[_0xa301('0x18')](function(_0x56f23f){logger[_0xa301('0x15')](_0xa301('0x26'),_0x56f23f[_0xa301('0x17')],_0x573a9c);_0xa4deaa(_this['error'](0x1f4,_0x56f23f[_0xa301('0x17')]));});});};
\ No newline at end of file
index 149fb18..1dba50c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9ef3=['./smsInteraction.events','save','update','removeListener','register','length','smsInteraction:'];(function(_0x7bf6ca,_0x148ecc){var _0xe5201c=function(_0x4a7da8){while(--_0x4a7da8){_0x7bf6ca['push'](_0x7bf6ca['shift']());}};_0xe5201c(++_0x148ecc);}(_0x9ef3,0x1dc));var _0x39ef=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x9ef3[_0x3dd15e];return _0x231fd0;};'use strict';var SmsInteractionEvents=require(_0x39ef('0x0'));var events=[_0x39ef('0x1'),'remove',_0x39ef('0x2')];function createListener(_0x1ca28e,_0x1ad11a){return function(_0xb1ed8e){_0x1ad11a['emit'](_0x1ca28e,_0xb1ed8e);};}function removeListener(_0x17e443,_0x3d9343){return function(){SmsInteractionEvents[_0x39ef('0x3')](_0x17e443,_0x3d9343);};}exports[_0x39ef('0x4')]=function(_0x480405){for(var _0x1b6f08=0x0,_0xee3143=events[_0x39ef('0x5')];_0x1b6f08<_0xee3143;_0x1b6f08++){var _0x4ba253=events[_0x1b6f08];var _0x2b96e8=createListener(_0x39ef('0x6')+_0x4ba253,_0x480405);SmsInteractionEvents['on'](_0x4ba253,_0x2b96e8);}};
\ No newline at end of file
+var _0x7e32=['save','remove','update','emit','removeListener','register','length','smsInteraction:'];(function(_0x59fc54,_0x530249){var _0x386c9e=function(_0x580a6e){while(--_0x580a6e){_0x59fc54['push'](_0x59fc54['shift']());}};_0x386c9e(++_0x530249);}(_0x7e32,0xf0));var _0x27e3=function(_0xe035d9,_0x503074){_0xe035d9=_0xe035d9-0x0;var _0x3214d6=_0x7e32[_0xe035d9];return _0x3214d6;};'use strict';var SmsInteractionEvents=require('./smsInteraction.events');var events=[_0x27e3('0x0'),_0x27e3('0x1'),_0x27e3('0x2')];function createListener(_0x46a06e,_0x3f908e){return function(_0x3ca23a){_0x3f908e[_0x27e3('0x3')](_0x46a06e,_0x3ca23a);};}function removeListener(_0x5f22d1,_0x1756d3){return function(){SmsInteractionEvents[_0x27e3('0x4')](_0x5f22d1,_0x1756d3);};}exports[_0x27e3('0x5')]=function(_0x4c4389){for(var _0x52b810=0x0,_0x5a3d7b=events[_0x27e3('0x6')];_0x52b810<_0x5a3d7b;_0x52b810++){var _0x49f456=events[_0x52b810];var _0x419686=createListener(_0x27e3('0x7')+_0x49f456,_0x4c4389);SmsInteractionEvents['on'](_0x49f456,_0x419686);}};
\ No newline at end of file
index 07860aa..ced9e09 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4184=['describe','/:id','show','tracked','sms','smsmessage:create','create','post','/:id/status','status','put','update','accept','/:id/reject','reject','delete','destroy','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','/describe'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x4184,0xb9));var _0x4418=function(_0x45667c,_0x29a38e){_0x45667c=_0x45667c-0x0;var _0xb36afc=_0x4184[_0x45667c];return _0xb36afc;};'use strict';var multer=require('multer');var util=require(_0x4418('0x0'));var path=require(_0x4418('0x1'));var timeout=require(_0x4418('0x2'));var express=require(_0x4418('0x3'));var router=express[_0x4418('0x4')]();var auth=require(_0x4418('0x5'));var interaction=require(_0x4418('0x6'));var config=require('../../config/environment');var controller=require('./smsMessage.controller');router[_0x4418('0x7')]('/',auth[_0x4418('0x8')](),controller[_0x4418('0x9')]);router[_0x4418('0x7')](_0x4418('0xa'),auth[_0x4418('0x8')](),controller[_0x4418('0xb')]);router[_0x4418('0x7')](_0x4418('0xc'),auth[_0x4418('0x8')](),controller[_0x4418('0xd')]);router['post']('/',auth[_0x4418('0x8')](),interaction[_0x4418('0xe')](_0x4418('0xf'),_0x4418('0x10')),controller[_0x4418('0x11')]);router[_0x4418('0x12')](_0x4418('0x13'),controller[_0x4418('0x14')]);router[_0x4418('0x15')](_0x4418('0xc'),auth[_0x4418('0x8')](),controller[_0x4418('0x16')]);router[_0x4418('0x15')]('/:id/accept',auth['isAuthenticated'](),controller[_0x4418('0x17')]);router[_0x4418('0x15')](_0x4418('0x18'),auth[_0x4418('0x8')](),controller[_0x4418('0x19')]);router[_0x4418('0x1a')](_0x4418('0xc'),auth['isAuthenticated'](),controller[_0x4418('0x1b')]);module['exports']=router;
\ No newline at end of file
+var _0x844d=['create','/:id/status','status','update','/:id/accept','/:id/reject','reject','multer','util','path','connect-timeout','express','Router','../../components/auth/service','./smsMessage.controller','get','isAuthenticated','/describe','/:id','show','smsmessage:create'];(function(_0x3c24fe,_0x5178e9){var _0x1e7020=function(_0xfd82ac){while(--_0xfd82ac){_0x3c24fe['push'](_0x3c24fe['shift']());}};_0x1e7020(++_0x5178e9);}(_0x844d,0xaf));var _0xd844=function(_0x36909d,_0x2795f1){_0x36909d=_0x36909d-0x0;var _0x1fd29d=_0x844d[_0x36909d];return _0x1fd29d;};'use strict';var multer=require(_0xd844('0x0'));var util=require(_0xd844('0x1'));var path=require(_0xd844('0x2'));var timeout=require(_0xd844('0x3'));var express=require(_0xd844('0x4'));var router=express[_0xd844('0x5')]();var auth=require(_0xd844('0x6'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xd844('0x7'));router[_0xd844('0x8')]('/',auth[_0xd844('0x9')](),controller['index']);router[_0xd844('0x8')](_0xd844('0xa'),auth[_0xd844('0x9')](),controller['describe']);router[_0xd844('0x8')](_0xd844('0xb'),auth[_0xd844('0x9')](),controller[_0xd844('0xc')]);router['post']('/',auth[_0xd844('0x9')](),interaction['tracked']('sms',_0xd844('0xd')),controller[_0xd844('0xe')]);router['post'](_0xd844('0xf'),controller[_0xd844('0x10')]);router['put'](_0xd844('0xb'),auth[_0xd844('0x9')](),controller[_0xd844('0x11')]);router['put'](_0xd844('0x12'),auth[_0xd844('0x9')](),controller['accept']);router['put'](_0xd844('0x13'),auth[_0xd844('0x9')](),controller[_0xd844('0x14')]);router['delete'](_0xd844('0xb'),auth[_0xd844('0x9')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 8d7c25d..977b42a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5292=['STRING','DATE','sequelize','exports','medium','ENUM','out'];(function(_0x576170,_0x1712ae){var _0x397c70=function(_0x2eb9de){while(--_0x2eb9de){_0x576170['push'](_0x576170['shift']());}};_0x397c70(++_0x1712ae);}(_0x5292,0xf7));var _0x2529=function(_0xa2c0a3,_0x5bbac0){_0xa2c0a3=_0xa2c0a3-0x0;var _0x52c618=_0x5292[_0xa2c0a3];return _0x52c618;};'use strict';var Sequelize=require(_0x2529('0x0'));module[_0x2529('0x1')]={'body':{'type':Sequelize['TEXT'](_0x2529('0x2')),'allowNull':![]},'read':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'direction':{'type':Sequelize[_0x2529('0x3')]('in',_0x2529('0x4')),'defaultValue':_0x2529('0x4'),'allowNull':![]},'messageId':{'type':Sequelize[_0x2529('0x5')](0xbe)},'phone':{'type':Sequelize['STRING']},'readAt':{'type':Sequelize[_0x2529('0x6')]},'secret':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
+var _0xbacd=['BOOLEAN','ENUM','out','STRING','DATE','sequelize','exports','medium'];(function(_0x1ca761,_0x341ed6){var _0x25104e=function(_0x46e734){while(--_0x46e734){_0x1ca761['push'](_0x1ca761['shift']());}};_0x25104e(++_0x341ed6);}(_0xbacd,0x1c5));var _0xdbac=function(_0x5d0a8c,_0x57de2d){_0x5d0a8c=_0x5d0a8c-0x0;var _0x3f850e=_0xbacd[_0x5d0a8c];return _0x3f850e;};'use strict';var Sequelize=require(_0xdbac('0x0'));module[_0xdbac('0x1')]={'body':{'type':Sequelize['TEXT'](_0xdbac('0x2')),'allowNull':![]},'read':{'type':Sequelize[_0xdbac('0x3')],'defaultValue':![]},'direction':{'type':Sequelize[_0xdbac('0x4')]('in','out'),'defaultValue':_0xdbac('0x5'),'allowNull':![]},'messageId':{'type':Sequelize[_0xdbac('0x6')](0xbe)},'phone':{'type':Sequelize[_0xdbac('0x6')]},'readAt':{'type':Sequelize[_0xdbac('0x7')]},'secret':{'type':Sequelize[_0xdbac('0x3')],'defaultValue':![]}};
\ No newline at end of file
index b5a80b9..417ea7a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x227f=['./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~!@#$%^&-_=+[{]}.','request','info','SmsMessage,\x20%s,\x20%s','request\x20sent','debug','SmsMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','sendStatus','status','end','json','count','offset','limit','set','apply','save','then','stack','name','send','index','SmsMessage','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','nolimit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','options','include','findAll','rows','catch','show','includeAll','find','create','body','update','params','destroy','describe','sms-interactions','accept','sms','read','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact','Contact','get','SmsInteractionId','isNil','read1stAt','interaction','[SMSMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','acceptMessage','manual','interface','SIP/%s','channel','event','EventManager','acceptmessage','reject','agent','SmsInteraction','RejectMessage','rejectMessage','received\x20delivery\x20report\x20from','twilio','MessageSid','messageId','SmsAccount,\x20%s,\x20%s,\x20%s','inspect','plivo','MessageUUID','indexOf','sent','delivered','Status','plivio','groupName','DELIVERED','infobip','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','redis','localhost','socket.io-emitter'];(function(_0x3f6eea,_0x137c19){var _0x268336=function(_0x175592){while(--_0x175592){_0x3f6eea['push'](_0x3f6eea['shift']());}};_0x268336(++_0x137c19);}(_0x227f,0x71));var _0xf227=function(_0x1c5a83,_0x42e15c){_0x1c5a83=_0x1c5a83-0x0;var _0x46aede=_0x227f[_0x1c5a83];return _0x46aede;};'use strict';var pdf=require(_0xf227('0x0'));var emlformat=require(_0xf227('0x1'));var rimraf=require(_0xf227('0x2'));var zipdir=require(_0xf227('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xf227('0x4'));var moment=require(_0xf227('0x5'));var BPromise=require(_0xf227('0x6'));var Mustache=require(_0xf227('0x7'));var util=require('util');var path=require('path');var sox=require(_0xf227('0x8'));var csv=require(_0xf227('0x9'));var ejs=require(_0xf227('0xa'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xf227('0xb'));var jsforce=require(_0xf227('0xc'));var deskjs=require(_0xf227('0xd'));var toCsv=require(_0xf227('0x9'));var querystring=require(_0xf227('0xe'));var Papa=require(_0xf227('0xf'));var Redis=require(_0xf227('0x10'));var authService=require('../../components/auth/service');var qs=require(_0xf227('0x11'));var hardwareService=require(_0xf227('0x12'));var logger=require(_0xf227('0x13'))(_0xf227('0x14'));var utils=require('../../config/utils');var config=require(_0xf227('0x15'));var db=require(_0xf227('0x16'))['db'];config[_0xf227('0x17')]=_['defaults'](config[_0xf227('0x17')],{'host':_0xf227('0x18'),'port':0x18eb});var socket=require(_0xf227('0x19'))(new Redis(config[_0xf227('0x17')]));require(_0xf227('0x1a'))['register'](socket);var jayson=require(_0xf227('0x1b'));var client=jayson[_0xf227('0x1c')][_0xf227('0x1d')]({'port':0x232c});var client9002=jayson[_0xf227('0x1c')][_0xf227('0x1d')]({'port':0x232a});function checkPasswordPattern(_0xfbbf17,_0x553dd7,_0x1b42a2){if(_0x1b42a2){var _0x45ade4=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x45ade4[_0xf227('0x1e')](_0x553dd7)){return _0xfbbf17;}else{throw new Error(_0xf227('0x1f'));}}else{return _0xfbbf17;}}function respondWithRpcPromise(_0x2ff761,_0x2b9207,_0x5bd58d,_0x30091f){return new BPromise(function(_0x1cf180,_0xc2db40){var _0x55ac8e=_0x30091f||client;return _0x55ac8e[_0xf227('0x20')](_0x2ff761,_0x5bd58d)['then'](function(_0x2d0c1c){logger[_0xf227('0x21')](_0xf227('0x22'),_0x2b9207,_0xf227('0x23'));logger[_0xf227('0x24')](_0xf227('0x25'),_0x2b9207,_0xf227('0x23'),JSON[_0xf227('0x26')](_0x2d0c1c));if(_0x2d0c1c[_0xf227('0x27')]){if(_0x2d0c1c['error'][_0xf227('0x28')]===0x1f4){logger['error']('SmsMessage,\x20%s,\x20%s',_0x2b9207,_0x2d0c1c[_0xf227('0x27')]['message']);return _0xc2db40(_0x2d0c1c[_0xf227('0x27')]['message']);}logger['error'](_0xf227('0x22'),_0x2b9207,_0x2d0c1c[_0xf227('0x27')][_0xf227('0x29')]);return _0x1cf180(_0x2d0c1c[_0xf227('0x27')]['message']);}else{logger[_0xf227('0x21')](_0xf227('0x22'),_0x2b9207,_0xf227('0x23'));_0x1cf180(_0x2d0c1c[_0xf227('0x2a')][_0xf227('0x29')]);}})['catch'](function(_0x37784c){logger[_0xf227('0x27')](_0xf227('0x22'),_0x2b9207,_0x37784c);_0xc2db40(_0x37784c);});});}function respondWithStatusCode(_0x540323,_0x598255){_0x598255=_0x598255||0xcc;return function(_0xe6dbd3){if(_0xe6dbd3){return _0x540323[_0xf227('0x2b')](_0x598255);}return _0x540323[_0xf227('0x2c')](_0x598255)[_0xf227('0x2d')]();};}function respondWithResult(_0xa07897,_0x54915c){_0x54915c=_0x54915c||0xc8;return function(_0x27e4c7){if(_0x27e4c7){return _0xa07897['status'](_0x54915c)[_0xf227('0x2e')](_0x27e4c7);}};}function respondWithFilteredResult(_0xee5eb6,_0x4a40be){return function(_0x225fa1){if(_0x225fa1){var _0x10614f=_0x225fa1[_0xf227('0x2f')],_0x447acd=_0x4a40be[_0xf227('0x30')],_0x2badaa=_0x4a40be['offset']+_0x4a40be[_0xf227('0x31')],_0x359d01;if(_0x2badaa>=_0x10614f){_0x2badaa=_0x10614f;_0x359d01=0xc8;}else{_0x359d01=0xce;}_0xee5eb6[_0xf227('0x2c')](_0x359d01);return _0xee5eb6[_0xf227('0x32')]('Content-Range',_0x447acd+'-'+_0x2badaa+'/'+_0x10614f)[_0xf227('0x2e')](_0x225fa1);}return null;};}function patchUpdates(_0x3652fb){return function(_0x4b2212){try{jsonpatch[_0xf227('0x33')](_0x4b2212,_0x3652fb,!![]);}catch(_0x1d2776){return BPromise['reject'](_0x1d2776);}return _0x4b2212[_0xf227('0x34')]();};}function saveUpdates(_0x37fd32,_0x17229f){return function(_0x514470){if(_0x514470){return _0x514470['update'](_0x37fd32)['then'](function(_0x526f31){return _0x526f31;});}return null;};}function removeEntity(_0x577535,_0x252e45){return function(_0x556f07){if(_0x556f07){return _0x556f07['destroy']()[_0xf227('0x35')](function(){_0x577535[_0xf227('0x2c')](0xcc)[_0xf227('0x2d')]();});}};}function handleEntityNotFound(_0x5bcb53,_0x4122b7){return function(_0x3e992f){if(!_0x3e992f){_0x5bcb53['sendStatus'](0x194);}return _0x3e992f;};}function handleError(_0x1e6c5b,_0x2364d9){_0x2364d9=_0x2364d9||0x1f4;return function(_0x1a5cf5){logger[_0xf227('0x27')](_0x1a5cf5[_0xf227('0x36')]);if(_0x1a5cf5['name']){delete _0x1a5cf5[_0xf227('0x37')];}_0x1e6c5b[_0xf227('0x2c')](_0x2364d9)[_0xf227('0x38')](_0x1a5cf5);};}exports[_0xf227('0x39')]=function(_0x54a380,_0x48c098){var _0x5b12da={},_0x1419bb={},_0xf2ddb={'count':0x0,'rows':[]};var _0x5b00d2=db[_0xf227('0x3a')][_0xf227('0x3b')];_0x1419bb[_0xf227('0x3c')]=_[_0xf227('0x3d')](_0x5b00d2);_0x1419bb['query']=_[_0xf227('0x3d')](_0x54a380[_0xf227('0x3e')]);_0x1419bb[_0xf227('0x3f')]=_['intersection'](_0x1419bb[_0xf227('0x3c')],_0x1419bb[_0xf227('0x3e')]);_0x5b12da[_0xf227('0x40')]=_[_0xf227('0x41')](_0x1419bb[_0xf227('0x3c')],qs[_0xf227('0x42')](_0x54a380[_0xf227('0x3e')][_0xf227('0x42')]));_0x5b12da['attributes']=_0x5b12da[_0xf227('0x40')][_0xf227('0x43')]?_0x5b12da[_0xf227('0x40')]:_0x1419bb[_0xf227('0x3c')];if(!_0x54a380[_0xf227('0x3e')]['hasOwnProperty'](_0xf227('0x44'))){_0x5b12da[_0xf227('0x31')]=qs[_0xf227('0x31')](_0x54a380[_0xf227('0x3e')][_0xf227('0x31')]);_0x5b12da[_0xf227('0x30')]=qs[_0xf227('0x30')](_0x54a380[_0xf227('0x3e')][_0xf227('0x30')]);}_0x5b12da[_0xf227('0x45')]=qs[_0xf227('0x46')](_0x54a380[_0xf227('0x3e')][_0xf227('0x46')]);_0x5b12da[_0xf227('0x47')]=qs[_0xf227('0x3f')](_[_0xf227('0x48')](_0x54a380[_0xf227('0x3e')],_0x1419bb[_0xf227('0x3f')]));if(_0x54a380[_0xf227('0x3e')][_0xf227('0x49')]){_0x5b12da[_0xf227('0x47')]=_[_0xf227('0x4a')](_0x5b12da[_0xf227('0x47')],{'$or':_['map'](_0x5b00d2,function(_0x11d40a){if(_0x11d40a[_0xf227('0x4b')][_0xf227('0x4c')]!==_0xf227('0x4d')){var _0x295846={};_0x295846[_0x11d40a[_0xf227('0x4e')]]={'$like':'%'+_0x54a380[_0xf227('0x3e')][_0xf227('0x49')]+'%'};return _0x295846;}})});}_0x5b12da=_[_0xf227('0x4a')]({},_0x5b12da,_0x54a380[_0xf227('0x4f')]);var _0x31976a={'where':_0x5b12da[_0xf227('0x47')]};return db['SmsMessage'][_0xf227('0x2f')](_0x31976a)[_0xf227('0x35')](function(_0x31b931){_0xf2ddb[_0xf227('0x2f')]=_0x31b931;if(_0x54a380[_0xf227('0x3e')]['includeAll']){_0x5b12da[_0xf227('0x50')]=[{'all':!![]}];}return db[_0xf227('0x3a')][_0xf227('0x51')](_0x5b12da);})[_0xf227('0x35')](function(_0x1e9180){_0xf2ddb[_0xf227('0x52')]=_0x1e9180;return _0xf2ddb;})['then'](respondWithFilteredResult(_0x48c098,_0x5b12da))[_0xf227('0x53')](handleError(_0x48c098,null));};exports[_0xf227('0x54')]=function(_0x186975,_0x4f1112){var _0x13b40c={'raw':!![],'where':{'id':_0x186975['params']['id']}},_0x4eb8aa={};_0x4eb8aa[_0xf227('0x3c')]=_[_0xf227('0x3d')](db[_0xf227('0x3a')][_0xf227('0x3b')]);_0x4eb8aa[_0xf227('0x3e')]=_[_0xf227('0x3d')](_0x186975['query']);_0x4eb8aa['filters']=_[_0xf227('0x41')](_0x4eb8aa[_0xf227('0x3c')],_0x4eb8aa[_0xf227('0x3e')]);_0x13b40c[_0xf227('0x40')]=_[_0xf227('0x41')](_0x4eb8aa['model'],qs[_0xf227('0x42')](_0x186975[_0xf227('0x3e')][_0xf227('0x42')]));_0x13b40c[_0xf227('0x40')]=_0x13b40c['attributes']['length']?_0x13b40c[_0xf227('0x40')]:_0x4eb8aa['model'];if(_0x186975[_0xf227('0x3e')][_0xf227('0x55')]){_0x13b40c[_0xf227('0x50')]=[{'all':!![]}];}_0x13b40c=_[_0xf227('0x4a')]({},_0x13b40c,_0x186975[_0xf227('0x4f')]);return db[_0xf227('0x3a')][_0xf227('0x56')](_0x13b40c)['then'](handleEntityNotFound(_0x4f1112,null))[_0xf227('0x35')](respondWithResult(_0x4f1112,null))['catch'](handleError(_0x4f1112,null));};exports[_0xf227('0x57')]=function(_0x4127f2,_0x392f34){return db[_0xf227('0x3a')][_0xf227('0x57')](_0x4127f2[_0xf227('0x58')],{})[_0xf227('0x35')](respondWithResult(_0x392f34,0xc9))[_0xf227('0x53')](handleError(_0x392f34,null));};exports[_0xf227('0x59')]=function(_0x1302e7,_0x53bea7){if(_0x1302e7[_0xf227('0x58')]['id']){delete _0x1302e7[_0xf227('0x58')]['id'];}return db['SmsMessage'][_0xf227('0x56')]({'where':{'id':_0x1302e7[_0xf227('0x5a')]['id']}})['then'](handleEntityNotFound(_0x53bea7,null))[_0xf227('0x35')](saveUpdates(_0x1302e7[_0xf227('0x58')],null))[_0xf227('0x35')](respondWithResult(_0x53bea7,null))['catch'](handleError(_0x53bea7,null));};exports[_0xf227('0x5b')]=function(_0x3e1175,_0x2dc7b3){return db[_0xf227('0x3a')][_0xf227('0x56')]({'where':{'id':_0x3e1175['params']['id']}})['then'](handleEntityNotFound(_0x2dc7b3,null))['then'](removeEntity(_0x2dc7b3,null))[_0xf227('0x53')](handleError(_0x2dc7b3,null));};exports['describe']=function(_0x1f3984,_0x172110){return db[_0xf227('0x3a')][_0xf227('0x5c')]()[_0xf227('0x35')](respondWithResult(_0x172110,null))[_0xf227('0x53')](handleError(_0x172110,null));};var interaction_log=require(_0xf227('0x13'))(_0xf227('0x5d'));exports[_0xf227('0x5e')]=function(_0x4298be,_0x28280f,_0x32250c){var _0x345a9b={'channel':_0xf227('0x5f')};if(_0x4298be[_0xf227('0x58')]['id']){delete _0x4298be[_0xf227('0x58')]['id'];}_0x4298be['body'][_0xf227('0x60')]=!![];_0x4298be[_0xf227('0x58')]['readAt']=moment()[_0xf227('0x61')](_0xf227('0x62'));_0x4298be[_0xf227('0x58')][_0xf227('0x63')]=_0x4298be[_0xf227('0x58')][_0xf227('0x63')]||_0x4298be[_0xf227('0x64')]['id'];return db[_0xf227('0x3a')][_0xf227('0x56')]({'where':{'id':_0x4298be[_0xf227('0x5a')]['id'],'UserId':null},'include':[{'model':db[_0xf227('0x65')],'as':_0xf227('0x66')}]})[_0xf227('0x35')](handleEntityNotFound(_0x28280f,null))[_0xf227('0x35')](saveUpdates(_0x4298be['body'],null))[_0xf227('0x35')](function(_0x33b5b3){if(_0x33b5b3){_0x345a9b[_0xf227('0x29')]=_0x33b5b3[_0xf227('0x67')]({'plain':!![]});return db['SmsInteraction']['find']({'where':{'id':_0x33b5b3[_0xf227('0x68')]}});}return null;})[_0xf227('0x35')](handleEntityNotFound(_0x28280f,null))[_0xf227('0x35')](function(_0x44ecb5){if(_0x44ecb5){return _0x44ecb5['update']({'UserId':_0x4298be[_0xf227('0x58')]['UserId'],'read1stAt':_[_0xf227('0x69')](_0x44ecb5[_0xf227('0x6a')])?moment()[_0xf227('0x61')](_0xf227('0x62')):undefined});}return null;})[_0xf227('0x35')](function(_0x1dbdb0){if(_0x1dbdb0){_0x345a9b[_0xf227('0x6b')]=_0x1dbdb0['get']({'plain':!![]});interaction_log[_0xf227('0x21')](_0xf227('0x6c'),_0x4298be[_0xf227('0x64')]['id'],_0x4298be[_0xf227('0x64')]['name'],_0x4298be[_0xf227('0x64')][_0xf227('0x6d')],_0x345a9b[_0xf227('0x6b')]['id'],_0x4298be[_0xf227('0x58')]?JSON['stringify'](_0x4298be[_0xf227('0x58')]):'null');return respondWithRpcPromise('AcceptMessage',_0xf227('0x6e'),_0x345a9b);}return null;})[_0xf227('0x35')](function(_0x5f2c3c){if(_0x5f2c3c){if(_0x4298be[_0xf227('0x58')][_0xf227('0x6f')]){_0x345a9b['message'][_0xf227('0x70')]=util[_0xf227('0x61')](_0xf227('0x71'),_0x4298be[_0xf227('0x64')][_0xf227('0x37')]);_0x345a9b['message'][_0xf227('0x72')]=_0x345a9b[_0xf227('0x72')];_0x345a9b[_0xf227('0x29')][_0xf227('0x73')]=_0xf227('0x5e');return respondWithRpcPromise(_0xf227('0x74'),'EventManager',{'event':_0xf227('0x75'),'message':_0x345a9b['message']},client9002)[_0xf227('0x35')](function(){return _0x345a9b;});}return _0x345a9b;}return null;})['then'](respondWithResult(_0x28280f,null))['catch'](handleError(_0x28280f,null));};var interaction_log=require(_0xf227('0x13'))(_0xf227('0x5d'));exports[_0xf227('0x76')]=function(_0x2efc09,_0x2ace15,_0xc43371){var _0x102720={'agent':{},'channel':_0xf227('0x5f')};if(_0x2efc09[_0xf227('0x58')]['id']){delete _0x2efc09[_0xf227('0x58')]['id'];}_0x2efc09['body'][_0xf227('0x63')]=_0x2efc09['body']['UserId']||_0x2efc09[_0xf227('0x64')]['id'];_0x102720[_0xf227('0x77')]['id']=_0x2efc09[_0xf227('0x58')][_0xf227('0x63')];return db[_0xf227('0x3a')]['find']({'where':{'id':_0x2efc09[_0xf227('0x5a')]['id'],'UserId':null}})[_0xf227('0x35')](handleEntityNotFound(_0x2ace15,null))[_0xf227('0x35')](function(_0x38d706){if(_0x38d706){_0x102720[_0xf227('0x29')]=_0x38d706[_0xf227('0x67')]({'plain':!![]});return db[_0xf227('0x78')][_0xf227('0x56')]({'where':{'id':_0x38d706['SmsInteractionId']}});}return null;})[_0xf227('0x35')](handleEntityNotFound(_0x2ace15,null))[_0xf227('0x35')](function(_0x1700f5){if(_0x1700f5){_0x102720[_0xf227('0x6b')]=_0x1700f5[_0xf227('0x67')]({'plain':!![]});interaction_log[_0xf227('0x21')]('[SMSMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x2efc09[_0xf227('0x64')]['id'],_0x2efc09[_0xf227('0x64')][_0xf227('0x37')],_0x2efc09[_0xf227('0x64')]['role'],_0x102720['interaction']['id'],_0x2efc09[_0xf227('0x58')]?JSON[_0xf227('0x26')](_0x2efc09[_0xf227('0x58')]):'null');return respondWithRpcPromise(_0xf227('0x79'),_0xf227('0x7a'),_0x102720);}return null;})[_0xf227('0x35')](function(_0x699071){if(_0x699071){_0x699071[_0xf227('0x29')][_0xf227('0x70')]=util[_0xf227('0x61')](_0xf227('0x71'),_0x2efc09[_0xf227('0x64')][_0xf227('0x37')]);_0x699071[_0xf227('0x29')]['channel']=_0x102720[_0xf227('0x72')];_0x699071['message']['event']=_0xf227('0x76');respondWithRpcPromise('EventManager','EventManager',{'event':'rejectmessage','message':_0x699071[_0xf227('0x29')]},client9002);return _0x102720;}return null;})[_0xf227('0x35')](respondWithResult(_0x2ace15,null))['catch'](handleError(_0x2ace15,null));};exports[_0xf227('0x2c')]=function(_0x24f188,_0x471f18,_0x27e447){if(_0x24f188['body']['id']){delete _0x24f188[_0xf227('0x58')]['id'];}var _0x2069bd;return db[_0xf227('0x3a')][_0xf227('0x56')]({'where':{'id':_0x24f188[_0xf227('0x5a')]['id']}})['then'](handleEntityNotFound(_0x471f18,null))[_0xf227('0x35')](function(_0x5a07c7){if(_0x5a07c7){_0x2069bd=_0x5a07c7;return db['SmsAccount'][_0xf227('0x56')]({'where':{'id':_0x5a07c7['SmsAccountId']}});}})[_0xf227('0x35')](handleEntityNotFound(_0x471f18,null))[_0xf227('0x35')](function(_0xbcad4e){if(_0xbcad4e){logger[_0xf227('0x24')](_0xf227('0x25'),'status',_0xf227('0x7b'),_0xbcad4e[_0xf227('0x4b')],util['inspect'](_0x24f188[_0xf227('0x58')],{'showHidden':![],'depth':null}));switch(_0xbcad4e['type']){case _0xf227('0x7c'):if(_0x24f188[_0xf227('0x58')][_0xf227('0x7d')]&&_0x24f188[_0xf227('0x58')][_0xf227('0x7d')]===_0x2069bd[_0xf227('0x7e')]){return _0x2069bd['update']({'read':!![]});}else{logger[_0xf227('0x27')](_0xf227('0x7f'),'status',_0xf227('0x7c'),util[_0xf227('0x80')](_0x24f188[_0xf227('0x58')],{'showHidden':![],'depth':null}));}break;case _0xf227('0x81'):if(_0x24f188['body'][_0xf227('0x82')]&&_0x24f188['body']['MessageUUID']===_0x2069bd['messageId']&&_[_0xf227('0x83')]([_0xf227('0x84'),_0xf227('0x85')],_0x24f188[_0xf227('0x58')][_0xf227('0x86')])>=0x0){return _0x2069bd[_0xf227('0x59')]({'read':!![]});}else{logger['error']('SmsAccount,\x20%s,\x20%s,\x20%s',_0xf227('0x2c'),_0xf227('0x87'),util['inspect'](_0x24f188[_0xf227('0x58')],{'showHidden':![],'depth':null}));}break;case'infobip':var _0x3afe3d=_0x24f188[_0xf227('0x58')]['results'][0x0];if(_0x3afe3d['status'][_0xf227('0x88')]===_0xf227('0x89')){return _0x2069bd[_0xf227('0x59')]({'read':!![]});}else{logger['error'](_0xf227('0x7f'),_0xf227('0x2c'),_0xf227('0x8a'),util[_0xf227('0x80')](_0x24f188['body'],{'showHidden':![],'depth':null}));}break;}return _0x2069bd;}})[_0xf227('0x35')](respondWithResult(_0x471f18,null))[_0xf227('0x53')](handleError(_0x471f18,null));};
\ No newline at end of file
+var _0xa630=['params','includeAll','create','body','find','describe','sms-interactions','accept','sms','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','CmContact','Contact','get','SmsInteraction','SmsInteractionId','isNil','read1stAt','interaction','[SMSMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','user','role','null','AcceptMessage','acceptMessage','manual','interface','SIP/%s','channel','event','EventManager','acceptmessage','reject','agent','[SMSMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','rejectmessage','SmsAccount','received\x20delivery\x20report\x20from','twilio','MessageSid','messageId','inspect','MessageUUID','indexOf','Status','SmsAccount,\x20%s,\x20%s,\x20%s','plivio','infobip','DELIVERED','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','path','sox','to-csv','crypto','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','defaults','redis','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~!@#$%^&-_=+[{]}.','request','then','info','request\x20sent','debug','SmsMessage,\x20%s,\x20%s,\x20%s','stringify','error','SmsMessage,\x20%s,\x20%s','message','result','catch','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','save','update','destroy','end','stack','name','send','index','SmsMessage','rawAttributes','keys','query','intersection','model','attributes','fields','length','hasOwnProperty','sort','where','filters','pick','merge','map','type','key','field','filter','options','include','findAll','show'];(function(_0x172747,_0x1732bd){var _0x509692=function(_0x448c56){while(--_0x448c56){_0x172747['push'](_0x172747['shift']());}};_0x509692(++_0x1732bd);}(_0xa630,0x1d3));var _0x0a63=function(_0x4a4b2b,_0x2741c3){_0x4a4b2b=_0x4a4b2b-0x0;var _0x5894a0=_0xa630[_0x4a4b2b];return _0x5894a0;};'use strict';var pdf=require(_0x0a63('0x0'));var emlformat=require(_0x0a63('0x1'));var rimraf=require(_0x0a63('0x2'));var zipdir=require(_0x0a63('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x0a63('0x4'));var moment=require(_0x0a63('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x0a63('0x6'));var util=require(_0x0a63('0x7'));var path=require(_0x0a63('0x8'));var sox=require(_0x0a63('0x9'));var csv=require(_0x0a63('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x0a63('0xb'));var jsforce=require(_0x0a63('0xc'));var deskjs=require(_0x0a63('0xd'));var toCsv=require(_0x0a63('0xa'));var querystring=require(_0x0a63('0xe'));var Papa=require(_0x0a63('0xf'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x0a63('0x10'));var logger=require(_0x0a63('0x11'))(_0x0a63('0x12'));var utils=require(_0x0a63('0x13'));var config=require(_0x0a63('0x14'));var db=require(_0x0a63('0x15'))['db'];config['redis']=_[_0x0a63('0x16')](config[_0x0a63('0x17')],{'host':_0x0a63('0x18'),'port':0x18eb});var socket=require(_0x0a63('0x19'))(new Redis(config[_0x0a63('0x17')]));require(_0x0a63('0x1a'))['register'](socket);var jayson=require(_0x0a63('0x1b'));var client=jayson[_0x0a63('0x1c')][_0x0a63('0x1d')]({'port':0x232c});var client9002=jayson[_0x0a63('0x1c')][_0x0a63('0x1d')]({'port':0x232a});function checkPasswordPattern(_0x486537,_0x370c3f,_0x3207d7){if(_0x3207d7){var _0x299fb9=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x299fb9[_0x0a63('0x1e')](_0x370c3f)){return _0x486537;}else{throw new Error(_0x0a63('0x1f'));}}else{return _0x486537;}}function respondWithRpcPromise(_0x4548ac,_0x5d7b68,_0x16a865,_0x5c8c0a){return new BPromise(function(_0xd64419,_0x1b2f3f){var _0x4774fe=_0x5c8c0a||client;return _0x4774fe[_0x0a63('0x20')](_0x4548ac,_0x16a865)[_0x0a63('0x21')](function(_0x1da6b0){logger[_0x0a63('0x22')]('SmsMessage,\x20%s,\x20%s',_0x5d7b68,_0x0a63('0x23'));logger[_0x0a63('0x24')](_0x0a63('0x25'),_0x5d7b68,_0x0a63('0x23'),JSON[_0x0a63('0x26')](_0x1da6b0));if(_0x1da6b0[_0x0a63('0x27')]){if(_0x1da6b0[_0x0a63('0x27')]['code']===0x1f4){logger['error'](_0x0a63('0x28'),_0x5d7b68,_0x1da6b0[_0x0a63('0x27')][_0x0a63('0x29')]);return _0x1b2f3f(_0x1da6b0[_0x0a63('0x27')][_0x0a63('0x29')]);}logger['error']('SmsMessage,\x20%s,\x20%s',_0x5d7b68,_0x1da6b0[_0x0a63('0x27')][_0x0a63('0x29')]);return _0xd64419(_0x1da6b0[_0x0a63('0x27')][_0x0a63('0x29')]);}else{logger[_0x0a63('0x22')](_0x0a63('0x28'),_0x5d7b68,_0x0a63('0x23'));_0xd64419(_0x1da6b0[_0x0a63('0x2a')][_0x0a63('0x29')]);}})[_0x0a63('0x2b')](function(_0x128e2b){logger['error']('SmsMessage,\x20%s,\x20%s',_0x5d7b68,_0x128e2b);_0x1b2f3f(_0x128e2b);});});}function respondWithStatusCode(_0x142e56,_0x230008){_0x230008=_0x230008||0xcc;return function(_0x50aaeb){if(_0x50aaeb){return _0x142e56[_0x0a63('0x2c')](_0x230008);}return _0x142e56[_0x0a63('0x2d')](_0x230008)['end']();};}function respondWithResult(_0x1ba06e,_0xfbbf36){_0xfbbf36=_0xfbbf36||0xc8;return function(_0x219aac){if(_0x219aac){return _0x1ba06e[_0x0a63('0x2d')](_0xfbbf36)[_0x0a63('0x2e')](_0x219aac);}};}function respondWithFilteredResult(_0xb8bb1c,_0x1eb8a1){return function(_0x34601a){if(_0x34601a){var _0x39ffdd=_0x34601a[_0x0a63('0x2f')],_0x36739b=_0x1eb8a1[_0x0a63('0x30')],_0x442290=_0x1eb8a1[_0x0a63('0x30')]+_0x1eb8a1[_0x0a63('0x31')],_0x128eb9;if(_0x442290>=_0x39ffdd){_0x442290=_0x39ffdd;_0x128eb9=0xc8;}else{_0x128eb9=0xce;}_0xb8bb1c[_0x0a63('0x2d')](_0x128eb9);return _0xb8bb1c[_0x0a63('0x32')](_0x0a63('0x33'),_0x36739b+'-'+_0x442290+'/'+_0x39ffdd)[_0x0a63('0x2e')](_0x34601a);}return null;};}function patchUpdates(_0x3ef11d){return function(_0x46d980){try{jsonpatch[_0x0a63('0x34')](_0x46d980,_0x3ef11d,!![]);}catch(_0xbb8542){return BPromise['reject'](_0xbb8542);}return _0x46d980[_0x0a63('0x35')]();};}function saveUpdates(_0x361334,_0x499919){return function(_0x57f64d){if(_0x57f64d){return _0x57f64d[_0x0a63('0x36')](_0x361334)[_0x0a63('0x21')](function(_0x5c0717){return _0x5c0717;});}return null;};}function removeEntity(_0x3811a5,_0x5085aa){return function(_0x49b0c0){if(_0x49b0c0){return _0x49b0c0[_0x0a63('0x37')]()[_0x0a63('0x21')](function(){_0x3811a5['status'](0xcc)[_0x0a63('0x38')]();});}};}function handleEntityNotFound(_0x21b6bc,_0x56b863){return function(_0x104245){if(!_0x104245){_0x21b6bc[_0x0a63('0x2c')](0x194);}return _0x104245;};}function handleError(_0x27c86b,_0x37de1b){_0x37de1b=_0x37de1b||0x1f4;return function(_0x5b3720){logger[_0x0a63('0x27')](_0x5b3720[_0x0a63('0x39')]);if(_0x5b3720[_0x0a63('0x3a')]){delete _0x5b3720[_0x0a63('0x3a')];}_0x27c86b[_0x0a63('0x2d')](_0x37de1b)[_0x0a63('0x3b')](_0x5b3720);};}exports[_0x0a63('0x3c')]=function(_0x1f5b7b,_0x3ddbb3){var _0x312eb2={},_0x383905={},_0x549422={'count':0x0,'rows':[]};var _0x586ebb=db[_0x0a63('0x3d')][_0x0a63('0x3e')];_0x383905['model']=_[_0x0a63('0x3f')](_0x586ebb);_0x383905[_0x0a63('0x40')]=_['keys'](_0x1f5b7b[_0x0a63('0x40')]);_0x383905['filters']=_[_0x0a63('0x41')](_0x383905[_0x0a63('0x42')],_0x383905[_0x0a63('0x40')]);_0x312eb2[_0x0a63('0x43')]=_[_0x0a63('0x41')](_0x383905[_0x0a63('0x42')],qs[_0x0a63('0x44')](_0x1f5b7b[_0x0a63('0x40')][_0x0a63('0x44')]));_0x312eb2[_0x0a63('0x43')]=_0x312eb2[_0x0a63('0x43')][_0x0a63('0x45')]?_0x312eb2[_0x0a63('0x43')]:_0x383905['model'];if(!_0x1f5b7b['query'][_0x0a63('0x46')]('nolimit')){_0x312eb2['limit']=qs['limit'](_0x1f5b7b['query'][_0x0a63('0x31')]);_0x312eb2[_0x0a63('0x30')]=qs[_0x0a63('0x30')](_0x1f5b7b['query']['offset']);}_0x312eb2['order']=qs[_0x0a63('0x47')](_0x1f5b7b[_0x0a63('0x40')][_0x0a63('0x47')]);_0x312eb2[_0x0a63('0x48')]=qs[_0x0a63('0x49')](_[_0x0a63('0x4a')](_0x1f5b7b['query'],_0x383905['filters']));if(_0x1f5b7b[_0x0a63('0x40')]['filter']){_0x312eb2['where']=_[_0x0a63('0x4b')](_0x312eb2['where'],{'$or':_[_0x0a63('0x4c')](_0x586ebb,function(_0x63d70b){if(_0x63d70b[_0x0a63('0x4d')][_0x0a63('0x4e')]!=='VIRTUAL'){var _0x483de8={};_0x483de8[_0x63d70b[_0x0a63('0x4f')]]={'$like':'%'+_0x1f5b7b[_0x0a63('0x40')][_0x0a63('0x50')]+'%'};return _0x483de8;}})});}_0x312eb2=_[_0x0a63('0x4b')]({},_0x312eb2,_0x1f5b7b[_0x0a63('0x51')]);var _0x1150f6={'where':_0x312eb2[_0x0a63('0x48')]};return db[_0x0a63('0x3d')][_0x0a63('0x2f')](_0x1150f6)[_0x0a63('0x21')](function(_0x15bc30){_0x549422[_0x0a63('0x2f')]=_0x15bc30;if(_0x1f5b7b[_0x0a63('0x40')]['includeAll']){_0x312eb2[_0x0a63('0x52')]=[{'all':!![]}];}return db[_0x0a63('0x3d')][_0x0a63('0x53')](_0x312eb2);})[_0x0a63('0x21')](function(_0x29b732){_0x549422['rows']=_0x29b732;return _0x549422;})['then'](respondWithFilteredResult(_0x3ddbb3,_0x312eb2))[_0x0a63('0x2b')](handleError(_0x3ddbb3,null));};exports[_0x0a63('0x54')]=function(_0x30b5ad,_0x21b741){var _0x173a65={'raw':!![],'where':{'id':_0x30b5ad[_0x0a63('0x55')]['id']}},_0x52f6ea={};_0x52f6ea['model']=_[_0x0a63('0x3f')](db[_0x0a63('0x3d')][_0x0a63('0x3e')]);_0x52f6ea[_0x0a63('0x40')]=_[_0x0a63('0x3f')](_0x30b5ad['query']);_0x52f6ea[_0x0a63('0x49')]=_['intersection'](_0x52f6ea[_0x0a63('0x42')],_0x52f6ea[_0x0a63('0x40')]);_0x173a65[_0x0a63('0x43')]=_[_0x0a63('0x41')](_0x52f6ea[_0x0a63('0x42')],qs[_0x0a63('0x44')](_0x30b5ad[_0x0a63('0x40')][_0x0a63('0x44')]));_0x173a65['attributes']=_0x173a65['attributes'][_0x0a63('0x45')]?_0x173a65[_0x0a63('0x43')]:_0x52f6ea[_0x0a63('0x42')];if(_0x30b5ad[_0x0a63('0x40')][_0x0a63('0x56')]){_0x173a65[_0x0a63('0x52')]=[{'all':!![]}];}_0x173a65=_[_0x0a63('0x4b')]({},_0x173a65,_0x30b5ad['options']);return db['SmsMessage']['find'](_0x173a65)[_0x0a63('0x21')](handleEntityNotFound(_0x21b741,null))[_0x0a63('0x21')](respondWithResult(_0x21b741,null))[_0x0a63('0x2b')](handleError(_0x21b741,null));};exports[_0x0a63('0x57')]=function(_0x4ced9c,_0x227aea){return db[_0x0a63('0x3d')][_0x0a63('0x57')](_0x4ced9c[_0x0a63('0x58')],{})[_0x0a63('0x21')](respondWithResult(_0x227aea,0xc9))['catch'](handleError(_0x227aea,null));};exports['update']=function(_0x25f775,_0x200ba6){if(_0x25f775[_0x0a63('0x58')]['id']){delete _0x25f775[_0x0a63('0x58')]['id'];}return db[_0x0a63('0x3d')][_0x0a63('0x59')]({'where':{'id':_0x25f775[_0x0a63('0x55')]['id']}})['then'](handleEntityNotFound(_0x200ba6,null))[_0x0a63('0x21')](saveUpdates(_0x25f775['body'],null))[_0x0a63('0x21')](respondWithResult(_0x200ba6,null))[_0x0a63('0x2b')](handleError(_0x200ba6,null));};exports[_0x0a63('0x37')]=function(_0x582163,_0xf75f9){return db[_0x0a63('0x3d')][_0x0a63('0x59')]({'where':{'id':_0x582163[_0x0a63('0x55')]['id']}})[_0x0a63('0x21')](handleEntityNotFound(_0xf75f9,null))[_0x0a63('0x21')](removeEntity(_0xf75f9,null))[_0x0a63('0x2b')](handleError(_0xf75f9,null));};exports[_0x0a63('0x5a')]=function(_0x379cd3,_0x1068de){return db[_0x0a63('0x3d')][_0x0a63('0x5a')]()[_0x0a63('0x21')](respondWithResult(_0x1068de,null))[_0x0a63('0x2b')](handleError(_0x1068de,null));};var interaction_log=require(_0x0a63('0x11'))(_0x0a63('0x5b'));exports[_0x0a63('0x5c')]=function(_0x211caa,_0x5c2fd8,_0x985f33){var _0x4667cb={'channel':_0x0a63('0x5d')};if(_0x211caa[_0x0a63('0x58')]['id']){delete _0x211caa[_0x0a63('0x58')]['id'];}_0x211caa[_0x0a63('0x58')][_0x0a63('0x5e')]=!![];_0x211caa[_0x0a63('0x58')][_0x0a63('0x5f')]=moment()[_0x0a63('0x60')](_0x0a63('0x61'));_0x211caa[_0x0a63('0x58')][_0x0a63('0x62')]=_0x211caa['body'][_0x0a63('0x62')]||_0x211caa['user']['id'];return db[_0x0a63('0x3d')][_0x0a63('0x59')]({'where':{'id':_0x211caa[_0x0a63('0x55')]['id'],'UserId':null},'include':[{'model':db[_0x0a63('0x63')],'as':_0x0a63('0x64')}]})[_0x0a63('0x21')](handleEntityNotFound(_0x5c2fd8,null))[_0x0a63('0x21')](saveUpdates(_0x211caa[_0x0a63('0x58')],null))[_0x0a63('0x21')](function(_0x4925a0){if(_0x4925a0){_0x4667cb[_0x0a63('0x29')]=_0x4925a0[_0x0a63('0x65')]({'plain':!![]});return db[_0x0a63('0x66')][_0x0a63('0x59')]({'where':{'id':_0x4925a0[_0x0a63('0x67')]}});}return null;})[_0x0a63('0x21')](handleEntityNotFound(_0x5c2fd8,null))['then'](function(_0x4d4e87){if(_0x4d4e87){return _0x4d4e87[_0x0a63('0x36')]({'UserId':_0x211caa[_0x0a63('0x58')][_0x0a63('0x62')],'read1stAt':_[_0x0a63('0x68')](_0x4d4e87[_0x0a63('0x69')])?moment()[_0x0a63('0x60')](_0x0a63('0x61')):undefined});}return null;})[_0x0a63('0x21')](function(_0x3fef78){if(_0x3fef78){_0x4667cb[_0x0a63('0x6a')]=_0x3fef78['get']({'plain':!![]});interaction_log[_0x0a63('0x22')](_0x0a63('0x6b'),_0x211caa['user']['id'],_0x211caa['user'][_0x0a63('0x3a')],_0x211caa[_0x0a63('0x6c')][_0x0a63('0x6d')],_0x4667cb[_0x0a63('0x6a')]['id'],_0x211caa[_0x0a63('0x58')]?JSON[_0x0a63('0x26')](_0x211caa[_0x0a63('0x58')]):_0x0a63('0x6e'));return respondWithRpcPromise(_0x0a63('0x6f'),_0x0a63('0x70'),_0x4667cb);}return null;})[_0x0a63('0x21')](function(_0x3cddfa){if(_0x3cddfa){if(_0x211caa[_0x0a63('0x58')][_0x0a63('0x71')]){_0x4667cb[_0x0a63('0x29')][_0x0a63('0x72')]=util[_0x0a63('0x60')](_0x0a63('0x73'),_0x211caa[_0x0a63('0x6c')]['name']);_0x4667cb[_0x0a63('0x29')][_0x0a63('0x74')]=_0x4667cb[_0x0a63('0x74')];_0x4667cb[_0x0a63('0x29')][_0x0a63('0x75')]='accept';return respondWithRpcPromise(_0x0a63('0x76'),_0x0a63('0x76'),{'event':_0x0a63('0x77'),'message':_0x4667cb[_0x0a63('0x29')]},client9002)[_0x0a63('0x21')](function(){return _0x4667cb;});}return _0x4667cb;}return null;})['then'](respondWithResult(_0x5c2fd8,null))[_0x0a63('0x2b')](handleError(_0x5c2fd8,null));};var interaction_log=require(_0x0a63('0x11'))('sms-interactions');exports[_0x0a63('0x78')]=function(_0x3be387,_0x150a3e,_0xa2270){var _0x3bd90d={'agent':{},'channel':_0x0a63('0x5d')};if(_0x3be387[_0x0a63('0x58')]['id']){delete _0x3be387[_0x0a63('0x58')]['id'];}_0x3be387[_0x0a63('0x58')][_0x0a63('0x62')]=_0x3be387[_0x0a63('0x58')][_0x0a63('0x62')]||_0x3be387['user']['id'];_0x3bd90d[_0x0a63('0x79')]['id']=_0x3be387[_0x0a63('0x58')][_0x0a63('0x62')];return db['SmsMessage'][_0x0a63('0x59')]({'where':{'id':_0x3be387[_0x0a63('0x55')]['id'],'UserId':null}})[_0x0a63('0x21')](handleEntityNotFound(_0x150a3e,null))[_0x0a63('0x21')](function(_0x362493){if(_0x362493){_0x3bd90d[_0x0a63('0x29')]=_0x362493[_0x0a63('0x65')]({'plain':!![]});return db[_0x0a63('0x66')][_0x0a63('0x59')]({'where':{'id':_0x362493[_0x0a63('0x67')]}});}return null;})[_0x0a63('0x21')](handleEntityNotFound(_0x150a3e,null))[_0x0a63('0x21')](function(_0x1d66ae){if(_0x1d66ae){_0x3bd90d[_0x0a63('0x6a')]=_0x1d66ae['get']({'plain':!![]});interaction_log[_0x0a63('0x22')](_0x0a63('0x7a'),_0x3be387[_0x0a63('0x6c')]['id'],_0x3be387[_0x0a63('0x6c')][_0x0a63('0x3a')],_0x3be387[_0x0a63('0x6c')][_0x0a63('0x6d')],_0x3bd90d[_0x0a63('0x6a')]['id'],_0x3be387[_0x0a63('0x58')]?JSON[_0x0a63('0x26')](_0x3be387[_0x0a63('0x58')]):_0x0a63('0x6e'));return respondWithRpcPromise(_0x0a63('0x7b'),'rejectMessage',_0x3bd90d);}return null;})['then'](function(_0x4ff32c){if(_0x4ff32c){_0x4ff32c['message'][_0x0a63('0x72')]=util[_0x0a63('0x60')](_0x0a63('0x73'),_0x3be387[_0x0a63('0x6c')][_0x0a63('0x3a')]);_0x4ff32c[_0x0a63('0x29')][_0x0a63('0x74')]=_0x3bd90d['channel'];_0x4ff32c['message'][_0x0a63('0x75')]='reject';respondWithRpcPromise(_0x0a63('0x76'),'EventManager',{'event':_0x0a63('0x7c'),'message':_0x4ff32c['message']},client9002);return _0x3bd90d;}return null;})[_0x0a63('0x21')](respondWithResult(_0x150a3e,null))[_0x0a63('0x2b')](handleError(_0x150a3e,null));};exports[_0x0a63('0x2d')]=function(_0x799ea2,_0x443cce,_0x314909){if(_0x799ea2['body']['id']){delete _0x799ea2[_0x0a63('0x58')]['id'];}var _0x2b347b;return db[_0x0a63('0x3d')][_0x0a63('0x59')]({'where':{'id':_0x799ea2[_0x0a63('0x55')]['id']}})[_0x0a63('0x21')](handleEntityNotFound(_0x443cce,null))[_0x0a63('0x21')](function(_0x1b6ef3){if(_0x1b6ef3){_0x2b347b=_0x1b6ef3;return db[_0x0a63('0x7d')][_0x0a63('0x59')]({'where':{'id':_0x1b6ef3['SmsAccountId']}});}})['then'](handleEntityNotFound(_0x443cce,null))[_0x0a63('0x21')](function(_0x39c2c1){if(_0x39c2c1){logger[_0x0a63('0x24')](_0x0a63('0x25'),_0x0a63('0x2d'),_0x0a63('0x7e'),_0x39c2c1['type'],util['inspect'](_0x799ea2[_0x0a63('0x58')],{'showHidden':![],'depth':null}));switch(_0x39c2c1[_0x0a63('0x4d')]){case _0x0a63('0x7f'):if(_0x799ea2[_0x0a63('0x58')][_0x0a63('0x80')]&&_0x799ea2[_0x0a63('0x58')][_0x0a63('0x80')]===_0x2b347b[_0x0a63('0x81')]){return _0x2b347b[_0x0a63('0x36')]({'read':!![]});}else{logger['error']('SmsAccount,\x20%s,\x20%s,\x20%s',_0x0a63('0x2d'),_0x0a63('0x7f'),util[_0x0a63('0x82')](_0x799ea2[_0x0a63('0x58')],{'showHidden':![],'depth':null}));}break;case'plivo':if(_0x799ea2[_0x0a63('0x58')]['MessageUUID']&&_0x799ea2['body'][_0x0a63('0x83')]===_0x2b347b[_0x0a63('0x81')]&&_[_0x0a63('0x84')](['sent','delivered'],_0x799ea2[_0x0a63('0x58')][_0x0a63('0x85')])>=0x0){return _0x2b347b[_0x0a63('0x36')]({'read':!![]});}else{logger[_0x0a63('0x27')](_0x0a63('0x86'),_0x0a63('0x2d'),_0x0a63('0x87'),util[_0x0a63('0x82')](_0x799ea2[_0x0a63('0x58')],{'showHidden':![],'depth':null}));}break;case _0x0a63('0x88'):var _0x125356=_0x799ea2[_0x0a63('0x58')]['results'][0x0];if(_0x125356['status']['groupName']===_0x0a63('0x89')){return _0x2b347b[_0x0a63('0x36')]({'read':!![]});}else{logger[_0x0a63('0x27')]('SmsAccount,\x20%s,\x20%s,\x20%s','status',_0x0a63('0x88'),util[_0x0a63('0x82')](_0x799ea2['body'],{'showHidden':![],'depth':null}));}break;}return _0x2b347b;}})[_0x0a63('0x21')](respondWithResult(_0x443cce,null))['catch'](handleError(_0x443cce,null));};
\ No newline at end of file
index 0b544b6..7845d41 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xab40=['hook','exports','events','../../mysqldb','update','remove','emit'];(function(_0x51c463,_0x1313c2){var _0x4666a7=function(_0x437a77){while(--_0x437a77){_0x51c463['push'](_0x51c463['shift']());}};_0x4666a7(++_0x1313c2);}(_0xab40,0xcd));var _0x0ab4=function(_0x3c2ec2,_0x841557){_0x3c2ec2=_0x3c2ec2-0x0;var _0x48be86=_0xab40[_0x3c2ec2];return _0x48be86;};'use strict';var EventEmitter=require(_0x0ab4('0x0'));var SmsMessage=require(_0x0ab4('0x1'))['db']['SmsMessage'];var SmsMessageEvents=new EventEmitter();SmsMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0x0ab4('0x2'),'afterDestroy':_0x0ab4('0x3')};function emitEvent(_0xa340d8){return function(_0x2bf1ba,_0x14634a,_0x57fac1){SmsMessageEvents['emit'](_0xa340d8+':'+_0x2bf1ba['id'],_0x2bf1ba);SmsMessageEvents[_0x0ab4('0x4')](_0xa340d8,_0x2bf1ba);_0x57fac1(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SmsMessage[_0x0ab4('0x5')](e,emitEvent(event));}}module[_0x0ab4('0x6')]=SmsMessageEvents;
\ No newline at end of file
+var _0xc2da=['emit','hasOwnProperty','hook','exports','events','SmsMessage','save','remove'];(function(_0x3e15f4,_0x2d29a1){var _0x3bb93d=function(_0x396c8b){while(--_0x396c8b){_0x3e15f4['push'](_0x3e15f4['shift']());}};_0x3bb93d(++_0x2d29a1);}(_0xc2da,0x124));var _0xac2d=function(_0x3bcb39,_0x2e1bd0){_0x3bcb39=_0x3bcb39-0x0;var _0x158bc4=_0xc2da[_0x3bcb39];return _0x158bc4;};'use strict';var EventEmitter=require(_0xac2d('0x0'));var SmsMessage=require('../../mysqldb')['db'][_0xac2d('0x1')];var SmsMessageEvents=new EventEmitter();SmsMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xac2d('0x2'),'afterUpdate':'update','afterDestroy':_0xac2d('0x3')};function emitEvent(_0xb261fc){return function(_0xff0fff,_0x332f28,_0x120263){SmsMessageEvents[_0xac2d('0x4')](_0xb261fc+':'+_0xff0fff['id'],_0xff0fff);SmsMessageEvents[_0xac2d('0x4')](_0xb261fc,_0xff0fff);_0x120263(null);};}for(var e in events){if(events[_0xac2d('0x5')](e)){var event=events[e];SmsMessage[_0xac2d('0x6')](e,emitEvent(event));}}module[_0xac2d('0x7')]=SmsMessageEvents;
\ No newline at end of file
index f885d4b..771d802 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb261=['smsMethod','sender','login?username=','&password=','GET','split','sms','POST','user_key','session_key','total_sent','deliveryReport','read','Missing\x20parameters:\x20username,\x20password','senderString','connectel','Missing\x20parameters:\x20authToken','clicksend','xCALLY\x20Motion','format','%s:%s','https://rest.clicksend.com/v3/sms/send','Basic\x20%s','toString','base64','http_code','data','head','message_id','clickSend','plivo','token','authId','https://api.plivo.com/v1/Account/%s/Message/','Missing\x20parameters:\x20authId,\x20authToken','infobip','baseUrl','/auth/1/session','application/json','Missing\x20parameters:\x20base_url','csc','crypto','login','timestamp','keys','sort','length','apiKey','createHash','md5','digest','hex','https://sms.csc.lv/external/get/send.php?','id_sms','clickatell','https://platform.clickatell.com/messages','uuid','UTF-8','Missing\x20parameters:\x20apiKey','intelepeer','https://api.intelepeer.com/_rest/v4/app/sms/send','Bearer\x20','code','message','https://api.intelepeer.com/_rest/v4/app/sms/mdr','refid','status','utf8mb4','lodash','util','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','exports','define','sms_messages','messageId','fti_sms_messages','body','FULLTEXT','models','direction','toLowerCase','out','secret','isNil','findOne','SmsInteractionId','update','createdAt','catch','error','SmsAccount','find','SmsAccountId','then','type','twilio','accountSid','authToken','phone','messages','create','remote','/api/sms/messages/','/status?token=','sid','SmsMessage,\x20%s,\x20%s,\x20%s','inspect','afterCreate','Missing\x20parameters:\x20phone,\x20accountSid\x20or\x20authToken','skebby','https://api.skebby.it/API/v1.0/REST/','username','password'];(function(_0x5499a2,_0x18746e){var _0xce9cdd=function(_0xfd00fc){while(--_0xfd00fc){_0x5499a2['push'](_0x5499a2['shift']());}};_0xce9cdd(++_0x18746e);}(_0xb261,0xbb));var _0x1b26=function(_0x26b8b5,_0xf5c2c1){_0x26b8b5=_0x26b8b5-0x0;var _0x2150a9=_0xb261[_0x26b8b5];return _0x2150a9;};'use strict';var _=require(_0x1b26('0x0'));var util=require(_0x1b26('0x1'));var logger=require(_0x1b26('0x2'))(_0x1b26('0x3'));var moment=require('moment');var BPromise=require(_0x1b26('0x4'));var rp=require(_0x1b26('0x5'));var fs=require('fs');var path=require(_0x1b26('0x6'));var rimraf=require(_0x1b26('0x7'));var config=require(_0x1b26('0x8'));var attributes=require('./smsMessage.attributes');module[_0x1b26('0x9')]=function(_0xb099b8,_0x1afce5){return _0xb099b8[_0x1b26('0xa')]('SmsMessage',attributes,{'tableName':_0x1b26('0xb'),'paranoid':![],'indexes':[{'name':_0x1b26('0xc'),'fields':[_0x1b26('0xc')]},{'name':_0x1b26('0xd'),'fields':[_0x1b26('0xe')],'type':_0x1b26('0xf')}],'timestamps':!![],'hooks':{'afterCreate':function(_0x46a27f,_0x404be7,_0x511f64){var _0x24f439=_0xb099b8[_0x1b26('0x10')];var _0x5c640a=_0x46a27f['get']({'plain':!![]});if(_0x5c640a[_0x1b26('0x11')]['toLowerCase']()==='in'||_0x5c640a[_0x1b26('0x11')][_0x1b26('0x12')]()===_0x1b26('0x13')&&!_0x5c640a[_0x1b26('0x14')]&&!_[_0x1b26('0x15')](_0x5c640a['UserId'])){_0x24f439['SmsInteraction'][_0x1b26('0x16')]({'where':{'id':_0x5c640a[_0x1b26('0x17')]}})['then'](function(_0x1bd6ee){if(_0x1bd6ee){_0x1bd6ee[_0x1b26('0x18')]({'lastMsgAt':_0x5c640a[_0x1b26('0x19')],'lastMsgDirection':_0x5c640a['direction'][_0x1b26('0x12')]()});}})[_0x1b26('0x1a')](function(_0x2a3be5){console[_0x1b26('0x1b')](_0x2a3be5);});}if(_0x5c640a['direction']===_0x1b26('0x13')&&!_0x5c640a[_0x1b26('0x14')]){var _0x56f617;_0x24f439[_0x1b26('0x1c')][_0x1b26('0x1d')]({'where':{'id':_0x5c640a[_0x1b26('0x1e')]},'raw':!![]})[_0x1b26('0x1f')](function(_0x3d752b){_0x56f617=_0x3d752b;if(_0x56f617&&_0x56f617[_0x1b26('0x20')]){switch(_0x56f617['type']){case _0x1b26('0x21'):var _0x591c3b=require(_0x1b26('0x21'));if(_0x56f617[_0x1b26('0x22')]&&_0x56f617[_0x1b26('0x23')]&&_0x56f617[_0x1b26('0x24')]){var _0x678abe=new _0x591c3b(_0x56f617[_0x1b26('0x22')],_0x56f617[_0x1b26('0x23')]);_0x678abe[_0x1b26('0x25')][_0x1b26('0x26')]({'body':_0x5c640a[_0x1b26('0xe')],'to':_0x5c640a[_0x1b26('0x24')],'from':_0x56f617['phone'],'statusCallback':_0x56f617[_0x1b26('0x27')]+_0x1b26('0x28')+_0x5c640a['id']+_0x1b26('0x29')+_0x56f617['token']})[_0x1b26('0x1f')](function(_0x2c66ef){if(_0x2c66ef[_0x1b26('0x2a')]){return _0x46a27f[_0x1b26('0x18')]({'messageId':_0x2c66ef[_0x1b26('0x2a')]});}})['catch'](function(_0x52a283){logger[_0x1b26('0x1b')](_0x1b26('0x2b'),'afterCreate','twilio',util[_0x1b26('0x2c')](_0x52a283,{'showHidden':![],'depth':null}));});}else{logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),_0x1b26('0x21'),_0x1b26('0x2e'));}break;case _0x1b26('0x2f'):var _0x289107=_0x1b26('0x30');if(_0x56f617[_0x1b26('0x31')]&&_0x56f617[_0x1b26('0x32')]){var _0x38ffec={'recipient':[_0x5c640a[_0x1b26('0x24')]],'message':_0x5c640a['body'],'message_type':_0x56f617[_0x1b26('0x33')]};if(_0x56f617['smsMethod']&&_0x56f617[_0x1b26('0x33')]!=='SI'){_0x38ffec[_0x1b26('0x34')]=_0x56f617[_0x1b26('0x24')];}var _0x48ca85={'url':_0x289107+_0x1b26('0x35')+_0x56f617[_0x1b26('0x31')]+_0x1b26('0x36')+_0x56f617[_0x1b26('0x32')],'method':_0x1b26('0x37')};rp(_0x48ca85)[_0x1b26('0x1f')](function(_0x40dabd){var _0x61220d=_0x40dabd[_0x1b26('0x38')](';');var _0x52f89f={'user_key':_0x61220d[0x0],'session_key':_0x61220d[0x1]};_0x48ca85={'url':_0x289107+_0x1b26('0x39'),'method':_0x1b26('0x3a'),'headers':{'user_key':_0x52f89f[_0x1b26('0x3b')],'Session_key':_0x52f89f[_0x1b26('0x3c')]},'json':!![],'body':_0x38ffec};return rp(_0x48ca85);})[_0x1b26('0x1f')](function(_0x3475c6){if(_0x3475c6[_0x1b26('0x3d')]>=0x1){var _0x54f7c1={'messageId':_0x3475c6['internal_order_id']};if(_0x56f617['smsMethod']!=='GP'||!_0x56f617[_0x1b26('0x3e')]){_0x54f7c1[_0x1b26('0x3f')]=!![];}return _0x46a27f[_0x1b26('0x18')](_0x54f7c1);}else{return logger['error'](_0x1b26('0x2b'),'afterCreate',_0x1b26('0x2f'),util[_0x1b26('0x2c')](_0x3475c6,{'showHidden':![],'depth':null}));}})[_0x1b26('0x1a')](function(_0x112e7d){return logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),'skebby',util[_0x1b26('0x2c')](_0x112e7d,{'showHidden':![],'depth':null}));});}else{logger[_0x1b26('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x1b26('0x2d'),'skebby',_0x1b26('0x40'));}break;case'connectel':if(_0x56f617[_0x1b26('0x23')]){var _0x95dd2d={'recipient':_0x5c640a[_0x1b26('0x24')],'message':_0x5c640a[_0x1b26('0xe')],'sender':_0x56f617[_0x1b26('0x41')]||_0x56f617[_0x1b26('0x24')],'authorization':_0x56f617[_0x1b26('0x23')]};var _0x404be7={'method':_0x1b26('0x3a'),'uri':'https://smsapi.connectel.se/api/send/','body':_0x95dd2d,'json':!![]};rp(_0x404be7)[_0x1b26('0x1f')](function(_0x3b3c24){var _0x2b8ef1={'messageId':_0x3b3c24['requestid']};if(!_0x56f617['deliveryReport']){_0x2b8ef1[_0x1b26('0x3f')]=!![];}return _0x46a27f[_0x1b26('0x18')](_0x2b8ef1);})['catch'](function(_0x342d5f){logger['error'](_0x1b26('0x2b'),_0x1b26('0x2d'),_0x1b26('0x42'),util[_0x1b26('0x2c')](_0x342d5f,{'showHidden':![],'depth':null}));});}else{logger[_0x1b26('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x1b26('0x2d'),_0x1b26('0x42'),_0x1b26('0x43'));}break;case _0x1b26('0x44'):if(_0x56f617[_0x1b26('0x31')]&&_0x56f617[_0x1b26('0x32')]){var _0x95dd2d={'messages':[{'source':_0x1b26('0x45'),'to':_0x5c640a[_0x1b26('0x24')],'body':_0x5c640a[_0x1b26('0xe')],'from':_0x56f617[_0x1b26('0x41')]||_0x56f617['phone']}]};var _0x461cba=util[_0x1b26('0x46')](_0x1b26('0x47'),_0x56f617[_0x1b26('0x31')],_0x56f617[_0x1b26('0x32')]);var _0x404be7={'method':_0x1b26('0x3a'),'uri':_0x1b26('0x48'),'body':_0x95dd2d,'headers':{'Authorization':util[_0x1b26('0x46')](_0x1b26('0x49'),new Buffer(_0x461cba)[_0x1b26('0x4a')](_0x1b26('0x4b')))},'json':!![]};rp(_0x404be7)[_0x1b26('0x1f')](function(_0x5576b3){if(_0x5576b3[_0x1b26('0x4c')]>=0xc8&&_0x5576b3['http_code']<=0xce){if(_0x5576b3[_0x1b26('0x4d')]&&_0x5576b3['data']['queued_count']>0x0){var _0x5132a4=_[_0x1b26('0x4e')](_0x5576b3['data'][_0x1b26('0x25')]);var _0x42ddc7={'messageId':_0x5132a4[_0x1b26('0x4f')]};if(!_0x56f617[_0x1b26('0x3e')]){_0x42ddc7[_0x1b26('0x3f')]=!![];}return _0x46a27f[_0x1b26('0x18')](_0x42ddc7);}else{logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),_0x1b26('0x50'),util[_0x1b26('0x2c')](_0x5576b3,{'showHidden':![],'depth':null}));}}else{logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),_0x1b26('0x50'),util[_0x1b26('0x2c')](_0x5576b3,{'showHidden':![],'depth':null}));}})['catch'](function(_0x41782b){logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),_0x1b26('0x50'),util[_0x1b26('0x2c')](_0x41782b,{'showHidden':![],'depth':null}));});}else{logger[_0x1b26('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x1b26('0x2d'),'clickSend','Missing\x20parameters:\x20username,\x20password');}break;case _0x1b26('0x51'):if(_0x56f617['authId']&&_0x56f617['authToken']){var _0x95dd2d={'dst':_0x5c640a['phone'],'text':_0x5c640a['body'],'src':_0x56f617[_0x1b26('0x41')]||_0x56f617[_0x1b26('0x24')],'url':_0x56f617[_0x1b26('0x27')]+'/api/sms/messages/'+_0x5c640a['id']+_0x1b26('0x29')+_0x56f617[_0x1b26('0x52')]};var _0x461cba=util[_0x1b26('0x46')]('%s:%s',_0x56f617[_0x1b26('0x53')],_0x56f617[_0x1b26('0x23')]);var _0x404be7={'method':'POST','uri':util[_0x1b26('0x46')](_0x1b26('0x54'),_0x56f617[_0x1b26('0x53')]),'body':_0x95dd2d,'headers':{'Authorization':util['format'](_0x1b26('0x49'),new Buffer(_0x461cba)[_0x1b26('0x4a')](_0x1b26('0x4b')))},'json':!![]};rp(_0x404be7)[_0x1b26('0x1f')](function(_0x44b05e){var _0x1551e4={'messageId':_0x44b05e['message_uuid'][0x0]};return _0x46a27f[_0x1b26('0x18')](_0x1551e4);})['catch'](function(_0x2ab2d1){logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),'plivo',util[_0x1b26('0x2c')](_0x2ab2d1,{'showHidden':![],'depth':null}));});}else{logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),'plivo',_0x1b26('0x55'));}break;case _0x1b26('0x56'):if(_0x56f617[_0x1b26('0x31')]&&_0x56f617[_0x1b26('0x32')]){if(_0x56f617['baseUrl']){var _0x4fc611={'method':_0x1b26('0x3a'),'uri':_0x56f617[_0x1b26('0x57')]+_0x1b26('0x58'),'body':{'username':_0x56f617[_0x1b26('0x31')],'password':_0x56f617[_0x1b26('0x32')]},'json':!![]};return rp(_0x4fc611)[_0x1b26('0x1f')](function(_0x198f86){var _0xc85e0={'method':_0x1b26('0x3a'),'uri':_0x56f617[_0x1b26('0x57')]+'/sms/2/text/advanced','body':{'messages':[{'from':_0x56f617[_0x1b26('0x24')],'destinations':[{'to':_0x5c640a[_0x1b26('0x24')]}],'text':_0x5c640a[_0x1b26('0xe')],'notifyUrl':_0x56f617[_0x1b26('0x27')]+'/api/sms/messages/'+_0x5c640a['id']+_0x1b26('0x29')+_0x56f617[_0x1b26('0x52')],'notifyContentType':_0x1b26('0x59'),'callbackData':_0x56f617[_0x1b26('0x24')]+';'+_0x5c640a[_0x1b26('0xe')]}]},'headers':{'Authorization':'IBSSO\x20'+_0x198f86[_0x1b26('0x52')]},'json':!![]};return rp(_0xc85e0)[_0x1b26('0x1f')](function(_0x5be69a){if(_0x5be69a[_0x1b26('0x25')]){var _0x21a71c={'messageId':_0x5be69a['messages'][0x0][_0x1b26('0xc')]};if(!_0x56f617[_0x1b26('0x3e')]){_0x21a71c[_0x1b26('0x3f')]=!![];}return _0x46a27f[_0x1b26('0x18')](_0x21a71c);}else{return logger[_0x1b26('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x1b26('0x2d'),_0x1b26('0x56'),util['inspect'](_0x5be69a,{'showHidden':![],'depth':null}));}});})['catch'](function(_0x1b91e4){return logger[_0x1b26('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x1b26('0x2d'),_0x1b26('0x56'),util[_0x1b26('0x2c')](_0x1b91e4,{'showHidden':![],'depth':null}));});}else{logger[_0x1b26('0x1b')](_0x1b26('0x2b'),'afterCreate',_0x1b26('0x56'),_0x1b26('0x5a'));}}else{logger['error'](_0x1b26('0x2b'),_0x1b26('0x2d'),'infobip',_0x1b26('0x40'));}break;case _0x1b26('0x5b'):var _0x157c77=require(_0x1b26('0x5c'));if(_0x56f617['apiKey']){var _0x5113c4={};_0x5113c4[_0x1b26('0x5d')]=_0x56f617[_0x1b26('0x31')];_0x5113c4[_0x1b26('0x24')]=_0x5c640a[_0x1b26('0x24')];_0x5113c4[_0x1b26('0x34')]=_0x56f617[_0x1b26('0x24')];_0x5113c4['text']=_0x5c640a[_0x1b26('0xe')];_0x5113c4[_0x1b26('0x5e')]=+new Date();var _0x4fae82='';var _0x35cde8='';var _0x5cdf16=Object[_0x1b26('0x5f')](_0x5113c4);_0x5cdf16[_0x1b26('0x60')]();for(var _0x5c3e04=0x0;_0x5c3e04<_0x5cdf16[_0x1b26('0x61')];_0x5c3e04++){if(_0x4fae82!=''){_0x4fae82+='&';}_0x4fae82+=_0x5cdf16[_0x5c3e04]+'='+encodeURIComponent(_0x5113c4[_0x5cdf16[_0x5c3e04]]);_0x35cde8+=_0x5113c4[_0x5cdf16[_0x5c3e04]];}_0x35cde8+=_0x56f617[_0x1b26('0x62')];_0x35cde8=_0x157c77[_0x1b26('0x63')](_0x1b26('0x64'))['update'](_0x35cde8)[_0x1b26('0x65')](_0x1b26('0x66'));if(_0x4fae82!==''){_0x4fae82+='&';}_0x4fae82+='signature='+_0x35cde8;var _0x48ca85={'method':'GET','uri':_0x1b26('0x67')+_0x4fae82,'json':!![]};return rp(_0x48ca85)[_0x1b26('0x1f')](function(_0x240fbb){var _0x43ac4e=Object['keys'](_0x240fbb);if(_0x240fbb[_0x43ac4e[0x0]][_0x1b26('0x1b')]&&parseInt(_0x240fbb[_0x43ac4e[0x0]][_0x1b26('0x1b')])===0x0){var _0x2756bf={'messageId':_0x240fbb[_0x43ac4e[0x0]][_0x1b26('0x68')]};if(!_0x56f617[_0x1b26('0x3e')]){_0x2756bf[_0x1b26('0x3f')]=!![];}return _0x46a27f[_0x1b26('0x18')](_0x2756bf);}else{return logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),_0x1b26('0x5b'),util[_0x1b26('0x2c')](_0x240fbb[_0x1b26('0x1b')],{'showHidden':![],'depth':null}));}})['catch'](function(_0x185cb6){return logger['error']('SmsMessage,\x20%s,\x20%s,\x20%s',_0x1b26('0x2d'),_0x1b26('0x5b'),util[_0x1b26('0x2c')](_0x185cb6,{'showHidden':![],'depth':null}));});}else{logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),_0x1b26('0x5b'),'Missing\x20parameters:\x20apiKey');}break;case _0x1b26('0x69'):if(_0x56f617[_0x1b26('0x62')]){var _0x501b98={'method':_0x1b26('0x3a'),'uri':_0x1b26('0x6a'),'headers':{'Authorization':_0x56f617[_0x1b26('0x62')]},'body':{'content':_0x5c640a['body'],'to':[_0x5c640a['phone']],'from':_0x56f617[_0x1b26('0x24')],'binary':![],'clientMessageId':_0x1b26('0x6b'),'charset':_0x1b26('0x6c')},'json':!![]};rp(_0x501b98)[_0x1b26('0x1f')](function(_0x5957ec){if(!_0x5957ec['error']){var _0xe6e359={'messageId':_0x5957ec['messages'][0x0]['apiMessageId']};if(!_0x56f617[_0x1b26('0x3e')]){_0xe6e359[_0x1b26('0x3f')]=!![];}return _0x46a27f[_0x1b26('0x18')](_0xe6e359);}else{return logger[_0x1b26('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x1b26('0x2d'),_0x1b26('0x69'),util[_0x1b26('0x2c')](_0x5957ec[_0x1b26('0x1b')],{'showHidden':![],'depth':null}));}})[_0x1b26('0x1a')](function(_0x2a31e9){return logger[_0x1b26('0x1b')](_0x1b26('0x2b'),'afterCreate',_0x1b26('0x69'),util[_0x1b26('0x2c')](_0x2a31e9,{'showHidden':![],'depth':null}));});}else{logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),_0x1b26('0x69'),_0x1b26('0x6d'));}break;case _0x1b26('0x6e'):if(_0x56f617['apiKey']){var _0x420e99={};var _0x48ca85={'method':_0x1b26('0x3a'),'uri':_0x1b26('0x6f'),'headers':{'Authorization':_0x1b26('0x70')+_0x56f617[_0x1b26('0x62')],'Content-Type':_0x1b26('0x59')},'body':{'from':_0x56f617[_0x1b26('0x24')],'to':_0x5c640a[_0x1b26('0x24')],'text':_0x5c640a['body']},'json':!![]};return rp(_0x48ca85)[_0x1b26('0x1f')](function(_0x3e97f9){if(_0x3e97f9[_0x1b26('0x71')]==0xca){_0x420e99[_0x1b26('0x72')]=_0x3e97f9;var _0x5a0722={'method':'POST','uri':_0x1b26('0x73'),'headers':{'Authorization':'Bearer\x20'+_0x56f617[_0x1b26('0x62')],'Content-Type':_0x1b26('0x59')},'body':{'refid':_0x420e99[_0x1b26('0x72')][_0x1b26('0x74')]},'json':!![]};return rp(_0x5a0722)[_0x1b26('0x1f')](function(_0x2a8b25){_0x420e99[_0x1b26('0x75')]=_0x2a8b25;var _0x166958={'messageId':_0x420e99[_0x1b26('0x72')][_0x1b26('0x74')],'read':!![]};return _0x46a27f[_0x1b26('0x18')](_0x166958);});}else{return logger[_0x1b26('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x1b26('0x6e'),util[_0x1b26('0x2c')](_0x3e97f9,{'showHidden':![],'depth':null}));}})['catch'](function(_0xccc8b8){return logger[_0x1b26('0x1b')](_0x1b26('0x2b'),_0x1b26('0x2d'),_0x1b26('0x6e'),util[_0x1b26('0x2c')](_0xccc8b8,{'showHidden':![],'depth':null}));});}else{return logger[_0x1b26('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x1b26('0x2d'),_0x1b26('0x6e'),'Token\x20not\x20received');}break;}}})['finally'](function(){_0x511f64();});}else{_0x511f64();}}},'charset':_0x1b26('0x76'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0xcd82=['Missing\x20parameters:\x20username,\x20password','connectel','senderString','https://smsapi.connectel.se/api/send/','clicksend','xCALLY\x20Motion','%s:%s','https://rest.clicksend.com/v3/sms/send','format','toString','base64','http_code','data','head','clickSend','plivo','authId','/status?token=','POST','https://api.plivo.com/v1/Account/%s/Message/','Basic\x20%s','message_uuid','Missing\x20parameters:\x20authId,\x20authToken','baseUrl','/auth/1/session','/sms/2/text/advanced','application/json','IBSSO\x20','infobip','Missing\x20parameters:\x20base_url','csc','apiKey','login','text','timestamp','sort','length','createHash','md5','digest','signature=','GET','https://sms.csc.lv/external/get/send.php?','keys','Missing\x20parameters:\x20apiKey','clickatell','https://platform.clickatell.com/messages','uuid','UTF-8','apiMessageId','intelepeer','https://api.intelepeer.com/_rest/v4/app/sms/send','Bearer\x20','message','status','refid','finally','lodash','util','../../config/logger','api','moment','request-promise','path','rimraf','../../config/environment','./smsMessage.attributes','exports','SmsMessage','messageId','fti_sms_messages','body','get','direction','toLowerCase','out','secret','UserId','SmsInteraction','SmsInteractionId','then','update','createdAt','catch','error','SmsAccount','type','twilio','accountSid','authToken','phone','messages','create','remote','/api/sms/messages/','token','sid','SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate','inspect','Missing\x20parameters:\x20phone,\x20accountSid\x20or\x20authToken','skebby','https://api.skebby.it/API/v1.0/REST/','username','smsMethod','sender','&password=','password','split','user_key','total_sent','internal_order_id','deliveryReport','read'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0xcd82,0x11d));var _0x2cd8=function(_0x58e1e7,_0x4504e8){_0x58e1e7=_0x58e1e7-0x0;var _0x265d36=_0xcd82[_0x58e1e7];return _0x265d36;};'use strict';var _=require(_0x2cd8('0x0'));var util=require(_0x2cd8('0x1'));var logger=require(_0x2cd8('0x2'))(_0x2cd8('0x3'));var moment=require(_0x2cd8('0x4'));var BPromise=require('bluebird');var rp=require(_0x2cd8('0x5'));var fs=require('fs');var path=require(_0x2cd8('0x6'));var rimraf=require(_0x2cd8('0x7'));var config=require(_0x2cd8('0x8'));var attributes=require(_0x2cd8('0x9'));module[_0x2cd8('0xa')]=function(_0x403fdb,_0x243102){return _0x403fdb['define'](_0x2cd8('0xb'),attributes,{'tableName':'sms_messages','paranoid':![],'indexes':[{'name':_0x2cd8('0xc'),'fields':['messageId']},{'name':_0x2cd8('0xd'),'fields':[_0x2cd8('0xe')],'type':'FULLTEXT'}],'timestamps':!![],'hooks':{'afterCreate':function(_0xf0d8f3,_0x1b0c0c,_0x5c04c9){var _0x2d1df9=_0x403fdb['models'];var _0x16612c=_0xf0d8f3[_0x2cd8('0xf')]({'plain':!![]});if(_0x16612c[_0x2cd8('0x10')][_0x2cd8('0x11')]()==='in'||_0x16612c[_0x2cd8('0x10')][_0x2cd8('0x11')]()===_0x2cd8('0x12')&&!_0x16612c[_0x2cd8('0x13')]&&!_['isNil'](_0x16612c[_0x2cd8('0x14')])){_0x2d1df9[_0x2cd8('0x15')]['findOne']({'where':{'id':_0x16612c[_0x2cd8('0x16')]}})[_0x2cd8('0x17')](function(_0x295f48){if(_0x295f48){_0x295f48[_0x2cd8('0x18')]({'lastMsgAt':_0x16612c[_0x2cd8('0x19')],'lastMsgDirection':_0x16612c[_0x2cd8('0x10')]['toLowerCase']()});}})[_0x2cd8('0x1a')](function(_0x42e431){console[_0x2cd8('0x1b')](_0x42e431);});}if(_0x16612c[_0x2cd8('0x10')]===_0x2cd8('0x12')&&!_0x16612c[_0x2cd8('0x13')]){var _0x1e2732;_0x2d1df9[_0x2cd8('0x1c')]['find']({'where':{'id':_0x16612c['SmsAccountId']},'raw':!![]})['then'](function(_0x1f71ac){_0x1e2732=_0x1f71ac;if(_0x1e2732&&_0x1e2732[_0x2cd8('0x1d')]){switch(_0x1e2732[_0x2cd8('0x1d')]){case _0x2cd8('0x1e'):var _0x45e032=require('twilio');if(_0x1e2732[_0x2cd8('0x1f')]&&_0x1e2732[_0x2cd8('0x20')]&&_0x1e2732[_0x2cd8('0x21')]){var _0x4474e6=new _0x45e032(_0x1e2732['accountSid'],_0x1e2732['authToken']);_0x4474e6[_0x2cd8('0x22')][_0x2cd8('0x23')]({'body':_0x16612c[_0x2cd8('0xe')],'to':_0x16612c[_0x2cd8('0x21')],'from':_0x1e2732[_0x2cd8('0x21')],'statusCallback':_0x1e2732[_0x2cd8('0x24')]+_0x2cd8('0x25')+_0x16612c['id']+'/status?token='+_0x1e2732[_0x2cd8('0x26')]})[_0x2cd8('0x17')](function(_0x56a512){if(_0x56a512[_0x2cd8('0x27')]){return _0xf0d8f3[_0x2cd8('0x18')]({'messageId':_0x56a512[_0x2cd8('0x27')]});}})[_0x2cd8('0x1a')](function(_0x340580){logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x1e'),util[_0x2cd8('0x2a')](_0x340580,{'showHidden':![],'depth':null}));});}else{logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x1e'),_0x2cd8('0x2b'));}break;case _0x2cd8('0x2c'):var _0x4176d7=_0x2cd8('0x2d');if(_0x1e2732[_0x2cd8('0x2e')]&&_0x1e2732['password']){var _0x3ba3ad={'recipient':[_0x16612c[_0x2cd8('0x21')]],'message':_0x16612c[_0x2cd8('0xe')],'message_type':_0x1e2732[_0x2cd8('0x2f')]};if(_0x1e2732[_0x2cd8('0x2f')]&&_0x1e2732[_0x2cd8('0x2f')]!=='SI'){_0x3ba3ad[_0x2cd8('0x30')]=_0x1e2732[_0x2cd8('0x21')];}var _0x2230e6={'url':_0x4176d7+'login?username='+_0x1e2732[_0x2cd8('0x2e')]+_0x2cd8('0x31')+_0x1e2732[_0x2cd8('0x32')],'method':'GET'};rp(_0x2230e6)['then'](function(_0x5044a2){var _0x19773e=_0x5044a2[_0x2cd8('0x33')](';');var _0x2da614={'user_key':_0x19773e[0x0],'session_key':_0x19773e[0x1]};_0x2230e6={'url':_0x4176d7+'sms','method':'POST','headers':{'user_key':_0x2da614[_0x2cd8('0x34')],'Session_key':_0x2da614['session_key']},'json':!![],'body':_0x3ba3ad};return rp(_0x2230e6);})[_0x2cd8('0x17')](function(_0x935ad4){if(_0x935ad4[_0x2cd8('0x35')]>=0x1){var _0x8c3c01={'messageId':_0x935ad4[_0x2cd8('0x36')]};if(_0x1e2732[_0x2cd8('0x2f')]!=='GP'||!_0x1e2732[_0x2cd8('0x37')]){_0x8c3c01[_0x2cd8('0x38')]=!![];}return _0xf0d8f3[_0x2cd8('0x18')](_0x8c3c01);}else{return logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),'afterCreate',_0x2cd8('0x2c'),util['inspect'](_0x935ad4,{'showHidden':![],'depth':null}));}})['catch'](function(_0x35f9a3){return logger['error'](_0x2cd8('0x28'),_0x2cd8('0x29'),'skebby',util[_0x2cd8('0x2a')](_0x35f9a3,{'showHidden':![],'depth':null}));});}else{logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x2c'),_0x2cd8('0x39'));}break;case _0x2cd8('0x3a'):if(_0x1e2732[_0x2cd8('0x20')]){var _0x2a6705={'recipient':_0x16612c[_0x2cd8('0x21')],'message':_0x16612c[_0x2cd8('0xe')],'sender':_0x1e2732[_0x2cd8('0x3b')]||_0x1e2732[_0x2cd8('0x21')],'authorization':_0x1e2732[_0x2cd8('0x20')]};var _0x1b0c0c={'method':'POST','uri':_0x2cd8('0x3c'),'body':_0x2a6705,'json':!![]};rp(_0x1b0c0c)[_0x2cd8('0x17')](function(_0x206be6){var _0x703879={'messageId':_0x206be6['requestid']};if(!_0x1e2732['deliveryReport']){_0x703879[_0x2cd8('0x38')]=!![];}return _0xf0d8f3['update'](_0x703879);})[_0x2cd8('0x1a')](function(_0x1c4036){logger[_0x2cd8('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x2cd8('0x29'),_0x2cd8('0x3a'),util[_0x2cd8('0x2a')](_0x1c4036,{'showHidden':![],'depth':null}));});}else{logger[_0x2cd8('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x2cd8('0x29'),_0x2cd8('0x3a'),'Missing\x20parameters:\x20authToken');}break;case _0x2cd8('0x3d'):if(_0x1e2732['username']&&_0x1e2732[_0x2cd8('0x32')]){var _0x2a6705={'messages':[{'source':_0x2cd8('0x3e'),'to':_0x16612c[_0x2cd8('0x21')],'body':_0x16612c[_0x2cd8('0xe')],'from':_0x1e2732[_0x2cd8('0x3b')]||_0x1e2732[_0x2cd8('0x21')]}]};var _0x3e67c5=util['format'](_0x2cd8('0x3f'),_0x1e2732[_0x2cd8('0x2e')],_0x1e2732['password']);var _0x1b0c0c={'method':'POST','uri':_0x2cd8('0x40'),'body':_0x2a6705,'headers':{'Authorization':util[_0x2cd8('0x41')]('Basic\x20%s',new Buffer(_0x3e67c5)[_0x2cd8('0x42')](_0x2cd8('0x43')))},'json':!![]};rp(_0x1b0c0c)[_0x2cd8('0x17')](function(_0x4e8423){if(_0x4e8423[_0x2cd8('0x44')]>=0xc8&&_0x4e8423[_0x2cd8('0x44')]<=0xce){if(_0x4e8423['data']&&_0x4e8423[_0x2cd8('0x45')]['queued_count']>0x0){var _0x3c62e7=_[_0x2cd8('0x46')](_0x4e8423[_0x2cd8('0x45')]['messages']);var _0x49b44f={'messageId':_0x3c62e7['message_id']};if(!_0x1e2732[_0x2cd8('0x37')]){_0x49b44f[_0x2cd8('0x38')]=!![];}return _0xf0d8f3['update'](_0x49b44f);}else{logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x47'),util['inspect'](_0x4e8423,{'showHidden':![],'depth':null}));}}else{logger['error'](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x47'),util[_0x2cd8('0x2a')](_0x4e8423,{'showHidden':![],'depth':null}));}})[_0x2cd8('0x1a')](function(_0x4bff8c){logger[_0x2cd8('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x2cd8('0x29'),_0x2cd8('0x47'),util[_0x2cd8('0x2a')](_0x4bff8c,{'showHidden':![],'depth':null}));});}else{logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x47'),_0x2cd8('0x39'));}break;case _0x2cd8('0x48'):if(_0x1e2732[_0x2cd8('0x49')]&&_0x1e2732[_0x2cd8('0x20')]){var _0x2a6705={'dst':_0x16612c[_0x2cd8('0x21')],'text':_0x16612c[_0x2cd8('0xe')],'src':_0x1e2732[_0x2cd8('0x3b')]||_0x1e2732[_0x2cd8('0x21')],'url':_0x1e2732[_0x2cd8('0x24')]+_0x2cd8('0x25')+_0x16612c['id']+_0x2cd8('0x4a')+_0x1e2732[_0x2cd8('0x26')]};var _0x3e67c5=util[_0x2cd8('0x41')](_0x2cd8('0x3f'),_0x1e2732[_0x2cd8('0x49')],_0x1e2732[_0x2cd8('0x20')]);var _0x1b0c0c={'method':_0x2cd8('0x4b'),'uri':util[_0x2cd8('0x41')](_0x2cd8('0x4c'),_0x1e2732[_0x2cd8('0x49')]),'body':_0x2a6705,'headers':{'Authorization':util[_0x2cd8('0x41')](_0x2cd8('0x4d'),new Buffer(_0x3e67c5)[_0x2cd8('0x42')](_0x2cd8('0x43')))},'json':!![]};rp(_0x1b0c0c)[_0x2cd8('0x17')](function(_0x53b667){var _0x482713={'messageId':_0x53b667[_0x2cd8('0x4e')][0x0]};return _0xf0d8f3[_0x2cd8('0x18')](_0x482713);})['catch'](function(_0x513ddf){logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),'afterCreate',_0x2cd8('0x48'),util[_0x2cd8('0x2a')](_0x513ddf,{'showHidden':![],'depth':null}));});}else{logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x48'),_0x2cd8('0x4f'));}break;case'infobip':if(_0x1e2732[_0x2cd8('0x2e')]&&_0x1e2732[_0x2cd8('0x32')]){if(_0x1e2732[_0x2cd8('0x50')]){var _0xa98655={'method':_0x2cd8('0x4b'),'uri':_0x1e2732[_0x2cd8('0x50')]+_0x2cd8('0x51'),'body':{'username':_0x1e2732['username'],'password':_0x1e2732[_0x2cd8('0x32')]},'json':!![]};return rp(_0xa98655)['then'](function(_0x4d9e32){var _0x24e967={'method':'POST','uri':_0x1e2732[_0x2cd8('0x50')]+_0x2cd8('0x52'),'body':{'messages':[{'from':_0x1e2732[_0x2cd8('0x21')],'destinations':[{'to':_0x16612c['phone']}],'text':_0x16612c[_0x2cd8('0xe')],'notifyUrl':_0x1e2732['remote']+_0x2cd8('0x25')+_0x16612c['id']+_0x2cd8('0x4a')+_0x1e2732[_0x2cd8('0x26')],'notifyContentType':_0x2cd8('0x53'),'callbackData':_0x1e2732[_0x2cd8('0x21')]+';'+_0x16612c[_0x2cd8('0xe')]}]},'headers':{'Authorization':_0x2cd8('0x54')+_0x4d9e32['token']},'json':!![]};return rp(_0x24e967)[_0x2cd8('0x17')](function(_0x11d6f1){if(_0x11d6f1[_0x2cd8('0x22')]){var _0x31de71={'messageId':_0x11d6f1[_0x2cd8('0x22')][0x0][_0x2cd8('0xc')]};if(!_0x1e2732[_0x2cd8('0x37')]){_0x31de71[_0x2cd8('0x38')]=!![];}return _0xf0d8f3[_0x2cd8('0x18')](_0x31de71);}else{return logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x55'),util[_0x2cd8('0x2a')](_0x11d6f1,{'showHidden':![],'depth':null}));}});})[_0x2cd8('0x1a')](function(_0x4849ab){return logger[_0x2cd8('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x2cd8('0x29'),'infobip',util['inspect'](_0x4849ab,{'showHidden':![],'depth':null}));});}else{logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),'afterCreate',_0x2cd8('0x55'),_0x2cd8('0x56'));}}else{logger[_0x2cd8('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x2cd8('0x29'),_0x2cd8('0x55'),'Missing\x20parameters:\x20username,\x20password');}break;case _0x2cd8('0x57'):var _0x4daa27=require('crypto');if(_0x1e2732[_0x2cd8('0x58')]){var _0x5ddabb={};_0x5ddabb[_0x2cd8('0x59')]=_0x1e2732[_0x2cd8('0x2e')];_0x5ddabb['phone']=_0x16612c['phone'];_0x5ddabb[_0x2cd8('0x30')]=_0x1e2732[_0x2cd8('0x21')];_0x5ddabb[_0x2cd8('0x5a')]=_0x16612c[_0x2cd8('0xe')];_0x5ddabb[_0x2cd8('0x5b')]=+new Date();var _0x16427e='';var _0x5b7bcf='';var _0x596f92=Object['keys'](_0x5ddabb);_0x596f92[_0x2cd8('0x5c')]();for(var _0x451c54=0x0;_0x451c54<_0x596f92[_0x2cd8('0x5d')];_0x451c54++){if(_0x16427e!=''){_0x16427e+='&';}_0x16427e+=_0x596f92[_0x451c54]+'='+encodeURIComponent(_0x5ddabb[_0x596f92[_0x451c54]]);_0x5b7bcf+=_0x5ddabb[_0x596f92[_0x451c54]];}_0x5b7bcf+=_0x1e2732[_0x2cd8('0x58')];_0x5b7bcf=_0x4daa27[_0x2cd8('0x5e')](_0x2cd8('0x5f'))[_0x2cd8('0x18')](_0x5b7bcf)[_0x2cd8('0x60')]('hex');if(_0x16427e!==''){_0x16427e+='&';}_0x16427e+=_0x2cd8('0x61')+_0x5b7bcf;var _0x2230e6={'method':_0x2cd8('0x62'),'uri':_0x2cd8('0x63')+_0x16427e,'json':!![]};return rp(_0x2230e6)[_0x2cd8('0x17')](function(_0x3e3b85){var _0x1b48f2=Object[_0x2cd8('0x64')](_0x3e3b85);if(_0x3e3b85[_0x1b48f2[0x0]][_0x2cd8('0x1b')]&&parseInt(_0x3e3b85[_0x1b48f2[0x0]]['error'])===0x0){var _0xbf9abe={'messageId':_0x3e3b85[_0x1b48f2[0x0]]['id_sms']};if(!_0x1e2732[_0x2cd8('0x37')]){_0xbf9abe['read']=!![];}return _0xf0d8f3['update'](_0xbf9abe);}else{return logger['error'](_0x2cd8('0x28'),'afterCreate',_0x2cd8('0x57'),util[_0x2cd8('0x2a')](_0x3e3b85[_0x2cd8('0x1b')],{'showHidden':![],'depth':null}));}})[_0x2cd8('0x1a')](function(_0x1a8cd3){return logger[_0x2cd8('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate','csc',util[_0x2cd8('0x2a')](_0x1a8cd3,{'showHidden':![],'depth':null}));});}else{logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x57'),_0x2cd8('0x65'));}break;case _0x2cd8('0x66'):if(_0x1e2732['apiKey']){var _0x5253e5={'method':_0x2cd8('0x4b'),'uri':_0x2cd8('0x67'),'headers':{'Authorization':_0x1e2732[_0x2cd8('0x58')]},'body':{'content':_0x16612c[_0x2cd8('0xe')],'to':[_0x16612c[_0x2cd8('0x21')]],'from':_0x1e2732[_0x2cd8('0x21')],'binary':![],'clientMessageId':_0x2cd8('0x68'),'charset':_0x2cd8('0x69')},'json':!![]};rp(_0x5253e5)['then'](function(_0x377712){if(!_0x377712[_0x2cd8('0x1b')]){var _0x7f5c3f={'messageId':_0x377712[_0x2cd8('0x22')][0x0][_0x2cd8('0x6a')]};if(!_0x1e2732[_0x2cd8('0x37')]){_0x7f5c3f[_0x2cd8('0x38')]=!![];}return _0xf0d8f3[_0x2cd8('0x18')](_0x7f5c3f);}else{return logger[_0x2cd8('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x2cd8('0x29'),_0x2cd8('0x66'),util[_0x2cd8('0x2a')](_0x377712[_0x2cd8('0x1b')],{'showHidden':![],'depth':null}));}})[_0x2cd8('0x1a')](function(_0x1da3f4){return logger['error'](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x66'),util['inspect'](_0x1da3f4,{'showHidden':![],'depth':null}));});}else{logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),'clickatell',_0x2cd8('0x65'));}break;case _0x2cd8('0x6b'):if(_0x1e2732['apiKey']){var _0x1e9e73={};var _0x2230e6={'method':'POST','uri':_0x2cd8('0x6c'),'headers':{'Authorization':_0x2cd8('0x6d')+_0x1e2732[_0x2cd8('0x58')],'Content-Type':_0x2cd8('0x53')},'body':{'from':_0x1e2732[_0x2cd8('0x21')],'to':_0x16612c[_0x2cd8('0x21')],'text':_0x16612c[_0x2cd8('0xe')]},'json':!![]};return rp(_0x2230e6)[_0x2cd8('0x17')](function(_0x1184ec){if(_0x1184ec['code']==0xca){_0x1e9e73[_0x2cd8('0x6e')]=_0x1184ec;var _0x3ec3d8={'method':'POST','uri':'https://api.intelepeer.com/_rest/v4/app/sms/mdr','headers':{'Authorization':'Bearer\x20'+_0x1e2732[_0x2cd8('0x58')],'Content-Type':_0x2cd8('0x53')},'body':{'refid':_0x1e9e73[_0x2cd8('0x6e')]['refid']},'json':!![]};return rp(_0x3ec3d8)[_0x2cd8('0x17')](function(_0x25914a){_0x1e9e73[_0x2cd8('0x6f')]=_0x25914a;var _0x1c047d={'messageId':_0x1e9e73[_0x2cd8('0x6e')][_0x2cd8('0x70')],'read':!![]};return _0xf0d8f3[_0x2cd8('0x18')](_0x1c047d);});}else{return logger['error']('SmsMessage,\x20%s,\x20%s,\x20%s',_0x2cd8('0x29'),_0x2cd8('0x6b'),util[_0x2cd8('0x2a')](_0x1184ec,{'showHidden':![],'depth':null}));}})[_0x2cd8('0x1a')](function(_0x42549c){return logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x6b'),util[_0x2cd8('0x2a')](_0x42549c,{'showHidden':![],'depth':null}));});}else{return logger[_0x2cd8('0x1b')](_0x2cd8('0x28'),_0x2cd8('0x29'),_0x2cd8('0x6b'),'Token\x20not\x20received');}break;}}})[_0x2cd8('0x71')](function(){_0x5c04c9();});}else{_0x5c04c9();}}},'charset':'utf8mb4','collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index e93650a..3935f6e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x01f3=['SmsMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','SmsMessage,\x20%s,\x20%s','message','result','create','options','raw','CreateSmsMessage','debug','catch','lodash','moment','bluebird','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','defaults','redis','localhost','socket.io-emitter','./smsMessage.socket','request','then','info','request\x20sent'];(function(_0x5e8a77,_0x2317ca){var _0x2f16a0=function(_0x209da3){while(--_0x209da3){_0x5e8a77['push'](_0x5e8a77['shift']());}};_0x2f16a0(++_0x2317ca);}(_0x01f3,0x16d));var _0x301f=function(_0x398294,_0x5ceb9d){_0x398294=_0x398294-0x0;var _0x2a872d=_0x01f3[_0x398294];return _0x2a872d;};'use strict';var _=require(_0x301f('0x0'));var util=require('util');var moment=require(_0x301f('0x1'));var BPromise=require(_0x301f('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x301f('0x3'));var db=require(_0x301f('0x4'))['db'];var utils=require(_0x301f('0x5'));var logger=require('../../config/logger')(_0x301f('0x6'));var config=require(_0x301f('0x7'));var jayson=require(_0x301f('0x8'));var client=jayson[_0x301f('0x9')]['http']({'port':0x232a});config['redis']=_[_0x301f('0xa')](config[_0x301f('0xb')],{'host':_0x301f('0xc'),'port':0x18eb});var socket=require(_0x301f('0xd'))(new Redis(config[_0x301f('0xb')]));require(_0x301f('0xe'))['register'](socket);function respondWithRpcPromise(_0x44add4,_0xa6c05d,_0x391457){return new BPromise(function(_0x3e1ee6,_0x3b04f5){return client[_0x301f('0xf')](_0x44add4,_0x391457)[_0x301f('0x10')](function(_0x4cac7c){logger[_0x301f('0x11')]('SmsMessage,\x20%s,\x20%s',_0xa6c05d,_0x301f('0x12'));logger['debug'](_0x301f('0x13'),_0xa6c05d,'request\x20sent',JSON[_0x301f('0x14')](_0x4cac7c));if(_0x4cac7c[_0x301f('0x15')]){if(_0x4cac7c[_0x301f('0x15')][_0x301f('0x16')]===0x1f4){logger[_0x301f('0x15')](_0x301f('0x17'),_0xa6c05d,_0x4cac7c[_0x301f('0x15')][_0x301f('0x18')]);return _0x3b04f5(_0x4cac7c[_0x301f('0x15')]['message']);}logger[_0x301f('0x15')](_0x301f('0x17'),_0xa6c05d,_0x4cac7c['error'][_0x301f('0x18')]);return _0x3e1ee6(_0x4cac7c['error'][_0x301f('0x18')]);}else{logger['info']('SmsMessage,\x20%s,\x20%s',_0xa6c05d,'request\x20sent');_0x3e1ee6(_0x4cac7c[_0x301f('0x19')][_0x301f('0x18')]);}})['catch'](function(_0x2a4cf9){logger[_0x301f('0x15')](_0x301f('0x17'),_0xa6c05d,_0x2a4cf9);_0x3b04f5(_0x2a4cf9);});});}exports['CreateSmsMessage']=function(_0x3dc036){var _0x705e21=this;return new Promise(function(_0x5e7563,_0x55d5d7){return db['SmsMessage'][_0x301f('0x1a')](_0x3dc036['body'],{'raw':_0x3dc036[_0x301f('0x1b')]?_0x3dc036[_0x301f('0x1b')][_0x301f('0x1c')]===undefined?!![]:![]:!![]})['then'](function(_0x2c05df){logger[_0x301f('0x11')](_0x301f('0x1d'),_0x3dc036);logger[_0x301f('0x1e')]('CreateSmsMessage',_0x3dc036,JSON['stringify'](_0x2c05df));_0x5e7563(_0x2c05df);})[_0x301f('0x1f')](function(_0x443c82){logger['error'](_0x301f('0x1d'),_0x443c82[_0x301f('0x18')],_0x3dc036);_0x55d5d7(_0x705e21[_0x301f('0x15')](0x1f4,_0x443c82['message']));});});};
\ No newline at end of file
+var _0x157c=['../../config/environment','http','redis','defaults','register','request','then','request\x20sent','debug','SmsMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','SmsMessage,\x20%s,\x20%s','info','catch','SmsMessage','create','body','raw','CreateSmsMessage','lodash','util','moment','bluebird','randomstring','../../mysqldb'];(function(_0x4aedc6,_0x2ab56a){var _0x48ff9d=function(_0x4b56ac){while(--_0x4b56ac){_0x4aedc6['push'](_0x4aedc6['shift']());}};_0x48ff9d(++_0x2ab56a);}(_0x157c,0x86));var _0xc157=function(_0x3e3217,_0x518c13){_0x3e3217=_0x3e3217-0x0;var _0x425fac=_0x157c[_0x3e3217];return _0x425fac;};'use strict';var _=require(_0xc157('0x0'));var util=require(_0xc157('0x1'));var moment=require(_0xc157('0x2'));var BPromise=require(_0xc157('0x3'));var rs=require(_0xc157('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xc157('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require(_0xc157('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0xc157('0x7')]({'port':0x232a});config[_0xc157('0x8')]=_[_0xc157('0x9')](config[_0xc157('0x8')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require('./smsMessage.socket')[_0xc157('0xa')](socket);function respondWithRpcPromise(_0x59ced5,_0x529496,_0x2ad198){return new BPromise(function(_0x5c994b,_0x1434ab){return client[_0xc157('0xb')](_0x59ced5,_0x2ad198)[_0xc157('0xc')](function(_0xbe6f4e){logger['info']('SmsMessage,\x20%s,\x20%s',_0x529496,_0xc157('0xd'));logger[_0xc157('0xe')](_0xc157('0xf'),_0x529496,_0xc157('0xd'),JSON[_0xc157('0x10')](_0xbe6f4e));if(_0xbe6f4e[_0xc157('0x11')]){if(_0xbe6f4e[_0xc157('0x11')][_0xc157('0x12')]===0x1f4){logger[_0xc157('0x11')]('SmsMessage,\x20%s,\x20%s',_0x529496,_0xbe6f4e[_0xc157('0x11')]['message']);return _0x1434ab(_0xbe6f4e[_0xc157('0x11')][_0xc157('0x13')]);}logger[_0xc157('0x11')](_0xc157('0x14'),_0x529496,_0xbe6f4e[_0xc157('0x11')][_0xc157('0x13')]);return _0x5c994b(_0xbe6f4e[_0xc157('0x11')]['message']);}else{logger[_0xc157('0x15')](_0xc157('0x14'),_0x529496,_0xc157('0xd'));_0x5c994b(_0xbe6f4e['result'][_0xc157('0x13')]);}})[_0xc157('0x16')](function(_0x59c503){logger['error'](_0xc157('0x14'),_0x529496,_0x59c503);_0x1434ab(_0x59c503);});});}exports['CreateSmsMessage']=function(_0x5c90be){var _0xe1696e=this;return new Promise(function(_0x2700af,_0x5b81d6){return db[_0xc157('0x17')][_0xc157('0x18')](_0x5c90be[_0xc157('0x19')],{'raw':_0x5c90be['options']?_0x5c90be['options'][_0xc157('0x1a')]===undefined?!![]:![]:!![]})[_0xc157('0xc')](function(_0x357d54){logger[_0xc157('0x15')](_0xc157('0x1b'),_0x5c90be);logger[_0xc157('0xe')](_0xc157('0x1b'),_0x5c90be,JSON[_0xc157('0x10')](_0x357d54));_0x2700af(_0x357d54);})[_0xc157('0x16')](function(_0x5bb359){logger[_0xc157('0x11')](_0xc157('0x1b'),_0x5bb359[_0xc157('0x13')],_0x5c90be);_0x5b81d6(_0xe1696e[_0xc157('0x11')](0x1f4,_0x5bb359[_0xc157('0x13')]));});});};
\ No newline at end of file
index 800cbc6..0cf748d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb00a=['remove','emit','removeListener','register','save'];(function(_0x48b5f9,_0x585cfb){var _0x55ae7a=function(_0x5b86a4){while(--_0x5b86a4){_0x48b5f9['push'](_0x48b5f9['shift']());}};_0x55ae7a(++_0x585cfb);}(_0xb00a,0x1d5));var _0xab00=function(_0x13793d,_0x251c6e){_0x13793d=_0x13793d-0x0;var _0x5d28ce=_0xb00a[_0x13793d];return _0x5d28ce;};'use strict';var SmsMessageEvents=require('./smsMessage.events');var events=[_0xab00('0x0'),_0xab00('0x1'),'update'];function createListener(_0x938dc9,_0xeb6d21){return function(_0x3810ec){_0xeb6d21[_0xab00('0x2')](_0x938dc9,_0x3810ec);};}function removeListener(_0x4bf27b,_0x1178d7){return function(){SmsMessageEvents[_0xab00('0x3')](_0x4bf27b,_0x1178d7);};}exports[_0xab00('0x4')]=function(_0x104427){for(var _0x4f1350=0x0,_0x3f5847=events['length'];_0x4f1350<_0x3f5847;_0x4f1350++){var _0x53773d=events[_0x4f1350];var _0x3ace2e=createListener('smsMessage:'+_0x53773d,_0x104427);SmsMessageEvents['on'](_0x53773d,_0x3ace2e);}};
\ No newline at end of file
+var _0xd537=['save','update','emit','removeListener','length','smsMessage:','./smsMessage.events'];(function(_0x49a0b9,_0x8201dd){var _0x457f3e=function(_0x4abffd){while(--_0x4abffd){_0x49a0b9['push'](_0x49a0b9['shift']());}};_0x457f3e(++_0x8201dd);}(_0xd537,0xa0));var _0x7d53=function(_0x46e363,_0x45d7e2){_0x46e363=_0x46e363-0x0;var _0x3fb059=_0xd537[_0x46e363];return _0x3fb059;};'use strict';var SmsMessageEvents=require(_0x7d53('0x0'));var events=[_0x7d53('0x1'),'remove',_0x7d53('0x2')];function createListener(_0x2d9bcb,_0x3631c3){return function(_0x272769){_0x3631c3[_0x7d53('0x3')](_0x2d9bcb,_0x272769);};}function removeListener(_0x4a2eaa,_0x5cb7a4){return function(){SmsMessageEvents[_0x7d53('0x4')](_0x4a2eaa,_0x5cb7a4);};}exports['register']=function(_0x176453){for(var _0x250735=0x0,_0xf1b8eb=events[_0x7d53('0x5')];_0x250735<_0xf1b8eb;_0x250735++){var _0x41e98b=events[_0x250735];var _0x99e650=createListener(_0x7d53('0x6')+_0x41e98b,_0x176453);SmsMessageEvents['on'](_0x41e98b,_0x99e650);}};
\ No newline at end of file
index f3175bc..225d959 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2205=['/:id/users','getAgents','post','addTeams','addAgents','put','update','delete','/:id','/:id/teams','removeAgents','exports','multer','path','connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsQueue.controller','isAuthenticated','index','/describe','describe','get','show','/:id/members','getMembers','getTeams'];(function(_0x10e912,_0x4212a9){var _0x2b2e2b=function(_0x5b516b){while(--_0x5b516b){_0x10e912['push'](_0x10e912['shift']());}};_0x2b2e2b(++_0x4212a9);}(_0x2205,0x140));var _0x5220=function(_0x4a1786,_0x547f47){_0x4a1786=_0x4a1786-0x0;var _0x40136b=_0x2205[_0x4a1786];return _0x40136b;};'use strict';var multer=require(_0x5220('0x0'));var util=require('util');var path=require(_0x5220('0x1'));var timeout=require(_0x5220('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0x5220('0x3'));var interaction=require(_0x5220('0x4'));var config=require(_0x5220('0x5'));var controller=require(_0x5220('0x6'));router['get']('/',auth[_0x5220('0x7')](),controller[_0x5220('0x8')]);router['get'](_0x5220('0x9'),auth[_0x5220('0x7')](),controller[_0x5220('0xa')]);router[_0x5220('0xb')]('/:id',auth[_0x5220('0x7')](),controller[_0x5220('0xc')]);router[_0x5220('0xb')](_0x5220('0xd'),auth['isAuthenticated'](),controller[_0x5220('0xe')]);router['get']('/:id/teams',auth['isAuthenticated'](),controller[_0x5220('0xf')]);router[_0x5220('0xb')](_0x5220('0x10'),auth['isAuthenticated'](),controller[_0x5220('0x11')]);router[_0x5220('0x12')]('/',auth['isAuthenticated'](),controller['create']);router[_0x5220('0x12')]('/:id/teams',auth[_0x5220('0x7')](),controller[_0x5220('0x13')]);router[_0x5220('0x12')](_0x5220('0x10'),auth['isAuthenticated'](),controller[_0x5220('0x14')]);router[_0x5220('0x15')]('/:id',auth[_0x5220('0x7')](),controller[_0x5220('0x16')]);router[_0x5220('0x17')](_0x5220('0x18'),auth[_0x5220('0x7')](),controller['destroy']);router[_0x5220('0x17')](_0x5220('0x19'),auth['isAuthenticated'](),controller['removeTeams']);router[_0x5220('0x17')]('/:id/users',auth[_0x5220('0x7')](),controller[_0x5220('0x1a')]);module[_0x5220('0x1b')]=router;
\ No newline at end of file
+var _0x3b61=['show','getMembers','/:id/teams','getTeams','/:id/users','getAgents','post','create','addTeams','put','update','delete','removeAgents','exports','multer','util','path','connect-timeout','Router','../../components/interaction/service','../../config/environment','./smsQueue.controller','get','index','/describe','isAuthenticated','describe','/:id'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x3b61,0x196));var _0x13b6=function(_0x45d8b1,_0x78a090){_0x45d8b1=_0x45d8b1-0x0;var _0x50334d=_0x3b61[_0x45d8b1];return _0x50334d;};'use strict';var multer=require(_0x13b6('0x0'));var util=require(_0x13b6('0x1'));var path=require(_0x13b6('0x2'));var timeout=require(_0x13b6('0x3'));var express=require('express');var router=express[_0x13b6('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x13b6('0x5'));var config=require(_0x13b6('0x6'));var controller=require(_0x13b6('0x7'));router[_0x13b6('0x8')]('/',auth['isAuthenticated'](),controller[_0x13b6('0x9')]);router['get'](_0x13b6('0xa'),auth[_0x13b6('0xb')](),controller[_0x13b6('0xc')]);router['get'](_0x13b6('0xd'),auth[_0x13b6('0xb')](),controller[_0x13b6('0xe')]);router[_0x13b6('0x8')]('/:id/members',auth[_0x13b6('0xb')](),controller[_0x13b6('0xf')]);router['get'](_0x13b6('0x10'),auth['isAuthenticated'](),controller[_0x13b6('0x11')]);router[_0x13b6('0x8')](_0x13b6('0x12'),auth['isAuthenticated'](),controller[_0x13b6('0x13')]);router[_0x13b6('0x14')]('/',auth[_0x13b6('0xb')](),controller[_0x13b6('0x15')]);router[_0x13b6('0x14')](_0x13b6('0x10'),auth[_0x13b6('0xb')](),controller[_0x13b6('0x16')]);router['post']('/:id/users',auth[_0x13b6('0xb')](),controller['addAgents']);router[_0x13b6('0x17')]('/:id',auth[_0x13b6('0xb')](),controller[_0x13b6('0x18')]);router[_0x13b6('0x19')]('/:id',auth['isAuthenticated'](),controller['destroy']);router[_0x13b6('0x19')](_0x13b6('0x10'),auth['isAuthenticated'](),controller['removeTeams']);router[_0x13b6('0x19')](_0x13b6('0x12'),auth[_0x13b6('0xb')](),controller[_0x13b6('0x1a')]);module[_0x13b6('0x1b')]=router;
\ No newline at end of file
index 4e3a361..9ce3a51 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x42f2=['sequelize','exports','STRING','name','INTEGER','ENUM','rrmemory','beepall','roundrobin'];(function(_0x23f5df,_0x4537de){var _0x271d7e=function(_0x2eb062){while(--_0x2eb062){_0x23f5df['push'](_0x23f5df['shift']());}};_0x271d7e(++_0x4537de);}(_0x42f2,0x117));var _0x242f=function(_0x5c9307,_0x5b97e4){_0x5c9307=_0x5c9307-0x0;var _0x373e29=_0x42f2[_0x5c9307];return _0x373e29;};'use strict';var Sequelize=require(_0x242f('0x0'));module[_0x242f('0x1')]={'name':{'type':Sequelize[_0x242f('0x2')],'unique':_0x242f('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0x242f('0x4')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x242f('0x5')](_0x242f('0x6'),_0x242f('0x7'),_0x242f('0x8'))}};
\ No newline at end of file
+var _0x9864=['name','INTEGER','ENUM','rrmemory','roundrobin','sequelize','STRING'];(function(_0x3fa614,_0x4d1968){var _0x80e2e6=function(_0x187ca8){while(--_0x187ca8){_0x3fa614['push'](_0x3fa614['shift']());}};_0x80e2e6(++_0x4d1968);}(_0x9864,0x6e));var _0x4986=function(_0x4ddf1f,_0x5cf9ea){_0x4ddf1f=_0x4ddf1f-0x0;var _0x4ccbd2=_0x9864[_0x4ddf1f];return _0x4ccbd2;};'use strict';var Sequelize=require(_0x4986('0x0'));module['exports']={'name':{'type':Sequelize[_0x4986('0x1')],'unique':_0x4986('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0x4986('0x3')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x4986('0x4')](_0x4986('0x5'),'beepall',_0x4986('0x6'))}};
\ No newline at end of file
index 1e0b024..2f0276e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x98c6=['../../mysqldb','redis','defaults','register','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','SmsQueues','destroy','end','stack','name','send','SmsQueue','rawAttributes','model','query','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','merge','type','key','VIRTUAL','field','options','include','findAll','catch','show','includeAll','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','autoAssociation','UserProfileResource','error','params','describe','getMembers','SmsQueueId','map','UserSmsQueue','User','findAndCountAll','UserId','agent','smsPause','updatedAt','createdAt','rows','format','%s/%s','SIP','getTeams','findOne','Team','teams','Agents','voicePause','flatMap','sequelize','transaction','addTeams','each','findOrCreate','forEach','emit','removeTeams','ids','tq.TeamId','join','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','clone','ut.UserId\x20=\x20?','push','toString','SELECT','TeamId','includes','union','value','isEmpty','userSmsQueue:remove','addAgents','omit','spread','userSmsQueue:save','removeAgents','isArray','getAgents','html-pdf','eml-format','zip-dir','request-promise','moment','bluebird','mustache','util','path','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment'];(function(_0x31a671,_0x3490ce){var _0x3cbeee=function(_0x2bf0ab){while(--_0x2bf0ab){_0x31a671['push'](_0x31a671['shift']());}};_0x3cbeee(++_0x3490ce);}(_0x98c6,0x74));var _0x698c=function(_0x208b0a,_0xcb0040){_0x208b0a=_0x208b0a-0x0;var _0x3ce555=_0x98c6[_0x208b0a];return _0x3ce555;};'use strict';var pdf=require(_0x698c('0x0'));var emlformat=require(_0x698c('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x698c('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x698c('0x3'));var moment=require(_0x698c('0x4'));var BPromise=require(_0x698c('0x5'));var Mustache=require(_0x698c('0x6'));var util=require(_0x698c('0x7'));var path=require(_0x698c('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x698c('0x9'));var fs=require('fs');var _=require(_0x698c('0xa'));var squel=require(_0x698c('0xb'));var crypto=require(_0x698c('0xc'));var jsforce=require(_0x698c('0xd'));var deskjs=require(_0x698c('0xe'));var toCsv=require(_0x698c('0xf'));var querystring=require('querystring');var Papa=require(_0x698c('0x10'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x698c('0x11'));var hardwareService=require(_0x698c('0x12'));var logger=require(_0x698c('0x13'))(_0x698c('0x14'));var utils=require(_0x698c('0x15'));var config=require(_0x698c('0x16'));var db=require(_0x698c('0x17'))['db'];config[_0x698c('0x18')]=_[_0x698c('0x19')](config[_0x698c('0x18')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require('./smsQueue.socket')[_0x698c('0x1a')](socket);function respondWithStatusCode(_0x4815c2,_0x52e051){_0x52e051=_0x52e051||0xcc;return function(_0x28cd27){if(_0x28cd27){return _0x4815c2[_0x698c('0x1b')](_0x52e051);}return _0x4815c2[_0x698c('0x1c')](_0x52e051)['end']();};}function respondWithResult(_0x3f0f35,_0x2dcf15){_0x2dcf15=_0x2dcf15||0xc8;return function(_0x561776){if(_0x561776){return _0x3f0f35[_0x698c('0x1c')](_0x2dcf15)[_0x698c('0x1d')](_0x561776);}};}function respondWithFilteredResult(_0xf9152d,_0x2c70ee){return function(_0x39cbbb){if(_0x39cbbb){var _0x65fb9c=_0x39cbbb[_0x698c('0x1e')],_0x2546ae=_0x2c70ee[_0x698c('0x1f')],_0x5712f9=_0x2c70ee['offset']+_0x2c70ee[_0x698c('0x20')],_0x1fef6d;if(_0x5712f9>=_0x65fb9c){_0x5712f9=_0x65fb9c;_0x1fef6d=0xc8;}else{_0x1fef6d=0xce;}_0xf9152d[_0x698c('0x1c')](_0x1fef6d);return _0xf9152d[_0x698c('0x21')](_0x698c('0x22'),_0x2546ae+'-'+_0x5712f9+'/'+_0x65fb9c)[_0x698c('0x1d')](_0x39cbbb);}return null;};}function patchUpdates(_0x328e7e){return function(_0x162150){try{jsonpatch[_0x698c('0x23')](_0x162150,_0x328e7e,!![]);}catch(_0xc1ba6c){return BPromise[_0x698c('0x24')](_0xc1ba6c);}return _0x162150[_0x698c('0x25')]();};}function saveUpdates(_0x156508,_0x18faa0){return function(_0x3115bf){if(_0x3115bf){return _0x3115bf[_0x698c('0x26')](_0x156508)['then'](function(_0x2117dd){return _0x2117dd;});}return null;};}function removeEntity(_0x7049b3,_0x39770b){return function(_0x4db932){if(_0x4db932){return _0x4db932['destroy']()[_0x698c('0x27')](function(){var _0x4e641d=_0x4db932['get']({'plain':!![]});var _0x51a2dc=_0x698c('0x28');return db['UserProfileResource'][_0x698c('0x29')]({'where':{'type':_0x51a2dc,'resourceId':_0x4e641d['id']}})[_0x698c('0x27')](function(){return _0x4db932;});})[_0x698c('0x27')](function(){_0x7049b3['status'](0xcc)[_0x698c('0x2a')]();});}};}function handleEntityNotFound(_0x55dda7,_0x59a9e3){return function(_0x5904e3){if(!_0x5904e3){_0x55dda7[_0x698c('0x1b')](0x194);}return _0x5904e3;};}function handleError(_0x22ad2e,_0x4f8218){_0x4f8218=_0x4f8218||0x1f4;return function(_0x345a41){logger['error'](_0x345a41[_0x698c('0x2b')]);if(_0x345a41[_0x698c('0x2c')]){delete _0x345a41[_0x698c('0x2c')];}_0x22ad2e[_0x698c('0x1c')](_0x4f8218)[_0x698c('0x2d')](_0x345a41);};}exports['index']=function(_0x461eec,_0xdeba42){var _0x4c2649={},_0x72f98c={},_0x540336={'count':0x0,'rows':[]};var _0x36a8c5=db[_0x698c('0x2e')][_0x698c('0x2f')];_0x72f98c[_0x698c('0x30')]=_['keys'](_0x36a8c5);_0x72f98c[_0x698c('0x31')]=_[_0x698c('0x32')](_0x461eec[_0x698c('0x31')]);_0x72f98c['filters']=_[_0x698c('0x33')](_0x72f98c['model'],_0x72f98c[_0x698c('0x31')]);_0x4c2649[_0x698c('0x34')]=_[_0x698c('0x33')](_0x72f98c[_0x698c('0x30')],qs[_0x698c('0x35')](_0x461eec['query'][_0x698c('0x35')]));_0x4c2649['attributes']=_0x4c2649[_0x698c('0x34')][_0x698c('0x36')]?_0x4c2649['attributes']:_0x72f98c['model'];if(!_0x461eec[_0x698c('0x31')][_0x698c('0x37')](_0x698c('0x38'))){_0x4c2649[_0x698c('0x20')]=qs[_0x698c('0x20')](_0x461eec[_0x698c('0x31')]['limit']);_0x4c2649[_0x698c('0x1f')]=qs[_0x698c('0x1f')](_0x461eec['query'][_0x698c('0x1f')]);}_0x4c2649[_0x698c('0x39')]=qs[_0x698c('0x3a')](_0x461eec['query'][_0x698c('0x3a')]);_0x4c2649[_0x698c('0x3b')]=qs[_0x698c('0x3c')](_[_0x698c('0x3d')](_0x461eec[_0x698c('0x31')],_0x72f98c[_0x698c('0x3c')]));if(_0x461eec[_0x698c('0x31')][_0x698c('0x3e')]){_0x4c2649['where']=_[_0x698c('0x3f')](_0x4c2649[_0x698c('0x3b')],{'$or':_['map'](_0x36a8c5,function(_0xa53241){if(_0xa53241[_0x698c('0x40')][_0x698c('0x41')]!==_0x698c('0x42')){var _0x27e7c6={};_0x27e7c6[_0xa53241[_0x698c('0x43')]]={'$like':'%'+_0x461eec[_0x698c('0x31')][_0x698c('0x3e')]+'%'};return _0x27e7c6;}})});}_0x4c2649=_[_0x698c('0x3f')]({},_0x4c2649,_0x461eec[_0x698c('0x44')]);var _0x6d5a04={'where':_0x4c2649['where']};return db[_0x698c('0x2e')][_0x698c('0x1e')](_0x6d5a04)[_0x698c('0x27')](function(_0x42f987){_0x540336[_0x698c('0x1e')]=_0x42f987;if(_0x461eec[_0x698c('0x31')]['includeAll']){_0x4c2649[_0x698c('0x45')]=[{'all':!![]}];}return db[_0x698c('0x2e')][_0x698c('0x46')](_0x4c2649);})['then'](function(_0x34ab5a){_0x540336['rows']=_0x34ab5a;return _0x540336;})[_0x698c('0x27')](respondWithFilteredResult(_0xdeba42,_0x4c2649))[_0x698c('0x47')](handleError(_0xdeba42,null));};exports[_0x698c('0x48')]=function(_0x5cee1d,_0x264010){var _0x144ea5={'raw':!![],'where':{'id':_0x5cee1d['params']['id']}},_0x3b6640={};_0x3b6640[_0x698c('0x30')]=_['keys'](db[_0x698c('0x2e')][_0x698c('0x2f')]);_0x3b6640[_0x698c('0x31')]=_[_0x698c('0x32')](_0x5cee1d[_0x698c('0x31')]);_0x3b6640['filters']=_[_0x698c('0x33')](_0x3b6640[_0x698c('0x30')],_0x3b6640[_0x698c('0x31')]);_0x144ea5[_0x698c('0x34')]=_[_0x698c('0x33')](_0x3b6640['model'],qs[_0x698c('0x35')](_0x5cee1d['query']['fields']));_0x144ea5[_0x698c('0x34')]=_0x144ea5[_0x698c('0x34')][_0x698c('0x36')]?_0x144ea5[_0x698c('0x34')]:_0x3b6640[_0x698c('0x30')];if(_0x5cee1d[_0x698c('0x31')][_0x698c('0x49')]){_0x144ea5[_0x698c('0x45')]=[{'all':!![]}];}_0x144ea5=_[_0x698c('0x3f')]({},_0x144ea5,_0x5cee1d[_0x698c('0x44')]);return db[_0x698c('0x2e')][_0x698c('0x4a')](_0x144ea5)[_0x698c('0x27')](handleEntityNotFound(_0x264010,null))[_0x698c('0x27')](respondWithResult(_0x264010,null))[_0x698c('0x47')](handleError(_0x264010,null));};exports[_0x698c('0x4b')]=function(_0x29f401,_0x20f5cd){return db['SmsQueue'][_0x698c('0x4b')](_0x29f401[_0x698c('0x4c')],{})[_0x698c('0x27')](function(_0x47f4b3){var _0x2c35f2=_0x29f401[_0x698c('0x4d')][_0x698c('0x4e')]({'plain':!![]});if(!_0x2c35f2)throw new Error(_0x698c('0x4f'));if(_0x2c35f2['role']===_0x698c('0x4d')){var _0x7b4079=_0x47f4b3[_0x698c('0x4e')]({'plain':!![]});var _0x412866=_0x698c('0x28');return db[_0x698c('0x50')]['find']({'where':{'name':_0x412866,'userProfileId':_0x2c35f2['userProfileId']},'raw':!![]})[_0x698c('0x27')](function(_0x4f4ae8){if(_0x4f4ae8&&_0x4f4ae8[_0x698c('0x51')]===0x0){return db[_0x698c('0x52')][_0x698c('0x4b')]({'name':_0x7b4079[_0x698c('0x2c')],'resourceId':_0x7b4079['id'],'type':_0x4f4ae8[_0x698c('0x2c')],'sectionId':_0x4f4ae8['id']},{})[_0x698c('0x27')](function(){return _0x47f4b3;});}else{return _0x47f4b3;}})[_0x698c('0x47')](function(_0x3be2a8){logger[_0x698c('0x53')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x3be2a8);throw _0x3be2a8;});}return _0x47f4b3;})[_0x698c('0x27')](respondWithResult(_0x20f5cd,0xc9))[_0x698c('0x47')](handleError(_0x20f5cd,null));};exports[_0x698c('0x26')]=function(_0x2e0ed7,_0xbecd42){if(_0x2e0ed7[_0x698c('0x4c')]['id']){delete _0x2e0ed7[_0x698c('0x4c')]['id'];}return db[_0x698c('0x2e')]['find']({'where':{'id':_0x2e0ed7[_0x698c('0x54')]['id']}})[_0x698c('0x27')](handleEntityNotFound(_0xbecd42,null))[_0x698c('0x27')](saveUpdates(_0x2e0ed7['body'],null))['then'](respondWithResult(_0xbecd42,null))[_0x698c('0x47')](handleError(_0xbecd42,null));};exports[_0x698c('0x29')]=function(_0x581d92,_0x165bd4){return db[_0x698c('0x2e')][_0x698c('0x4a')]({'where':{'id':_0x581d92[_0x698c('0x54')]['id']}})[_0x698c('0x27')](handleEntityNotFound(_0x165bd4,null))[_0x698c('0x27')](removeEntity(_0x165bd4,null))[_0x698c('0x47')](handleError(_0x165bd4,null));};exports['describe']=function(_0x11cdce,_0x318378){return db['SmsQueue'][_0x698c('0x55')]()[_0x698c('0x27')](respondWithResult(_0x318378,null))[_0x698c('0x47')](handleError(_0x318378,null));};exports[_0x698c('0x56')]=function(_0x2b2d24,_0x18ff97,_0x439a26){var _0x5ecf95={'raw':!![],'where':{}},_0x28eb2f={},_0x13e960;return db[_0x698c('0x2e')]['findOne']({'where':{'id':_0x2b2d24[_0x698c('0x54')]['id']}})[_0x698c('0x27')](handleEntityNotFound(_0x18ff97,null))[_0x698c('0x27')](function(_0x345167){if(_0x345167){_0x13e960=_0x345167['get']({'plain':!![]});_0x28eb2f[_0x698c('0x30')]=_['keys'](db['UserSmsQueue'][_0x698c('0x2f')]);_0x28eb2f[_0x698c('0x31')]=_['keys'](_0x2b2d24[_0x698c('0x31')]);_0x28eb2f['filters']=_[_0x698c('0x33')](_0x28eb2f[_0x698c('0x30')],_0x28eb2f[_0x698c('0x31')]);_0x5ecf95['attributes']=_[_0x698c('0x33')](_0x28eb2f[_0x698c('0x30')],qs[_0x698c('0x35')](_0x2b2d24[_0x698c('0x31')]['fields']));_0x5ecf95[_0x698c('0x34')]=_0x5ecf95[_0x698c('0x34')][_0x698c('0x36')]?_0x5ecf95[_0x698c('0x34')]:_0x28eb2f[_0x698c('0x30')];if(!_0x2b2d24['query'][_0x698c('0x37')](_0x698c('0x38'))){_0x5ecf95['limit']=qs[_0x698c('0x20')](_0x2b2d24[_0x698c('0x31')]['limit']);_0x5ecf95['offset']=qs[_0x698c('0x1f')](_0x2b2d24[_0x698c('0x31')][_0x698c('0x1f')]);}_0x5ecf95[_0x698c('0x39')]=qs[_0x698c('0x3a')](_0x2b2d24['query'][_0x698c('0x3a')]);_0x5ecf95['where']=qs[_0x698c('0x3c')](_['pick'](_0x2b2d24[_0x698c('0x31')],_0x28eb2f[_0x698c('0x3c')]));_0x5ecf95[_0x698c('0x3b')][_0x698c('0x57')]=_0x345167['id'];if(_0x2b2d24['query'][_0x698c('0x3e')]){_0x5ecf95[_0x698c('0x3b')]=_[_0x698c('0x3f')](_0x5ecf95[_0x698c('0x3b')],{'$or':_[_0x698c('0x58')](_0x5ecf95[_0x698c('0x34')],function(_0x51bc10){var _0xf827f7={};_0xf827f7[_0x51bc10]={'$like':'%'+_0x2b2d24[_0x698c('0x31')]['filter']+'%'};return _0xf827f7;})});}_0x5ecf95=_[_0x698c('0x3f')]({},_0x5ecf95,_0x2b2d24['options']);return db[_0x698c('0x59')][_0x698c('0x46')](_0x5ecf95);}})[_0x698c('0x27')](function(_0x402d02){if(_0x402d02){return db[_0x698c('0x5a')][_0x698c('0x5b')]({'where':{'id':_[_0x698c('0x58')](_0x402d02,_0x698c('0x5c')),'role':_0x698c('0x5d')},'attributes':['id',_0x698c('0x2c'),_0x698c('0x5e'),_0x698c('0x5f'),_0x698c('0x60')]});}})[_0x698c('0x27')](function(_0x1ca007){if(_0x1ca007){return{'count':_0x1ca007['count'],'rows':_[_0x698c('0x58')](_0x1ca007[_0x698c('0x61')],function(_0x171199){return{'membername':_0x171199[_0x698c('0x2c')],'UserId':_0x171199['id'],'queue_name':_0x13e960[_0x698c('0x2c')],'SmsQueueId':_0x13e960['id'],'interface':util[_0x698c('0x62')](_0x698c('0x63'),_0x698c('0x64'),_0x171199[_0x698c('0x2c')]),'penalty':0x0,'paused':_0x171199[_0x698c('0x5e')],'createdAt':_0x171199[_0x698c('0x60')],'updatedAt':_0x171199[_0x698c('0x5f')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x698c('0x27')](respondWithFilteredResult(_0x18ff97,_0x5ecf95))['catch'](handleError(_0x18ff97,null));};exports[_0x698c('0x65')]=function(_0x30f328,_0x24037b,_0x259a71){var _0x202fff={};var _0x580fdb={};var _0x1b425f;var _0x3d0dfe;return db[_0x698c('0x2e')][_0x698c('0x66')]({'where':{'id':_0x30f328[_0x698c('0x54')]['id']}})[_0x698c('0x27')](handleEntityNotFound(_0x24037b,null))['then'](function(_0x58d918){if(_0x58d918){_0x1b425f=_0x58d918;_0x580fdb[_0x698c('0x30')]=_[_0x698c('0x32')](db[_0x698c('0x67')][_0x698c('0x2f')]);_0x580fdb['query']=_[_0x698c('0x32')](_0x30f328['query']);_0x580fdb[_0x698c('0x3c')]=_[_0x698c('0x33')](_0x580fdb[_0x698c('0x30')],_0x580fdb[_0x698c('0x31')]);_0x202fff[_0x698c('0x34')]=_[_0x698c('0x33')](_0x580fdb[_0x698c('0x30')],qs[_0x698c('0x35')](_0x30f328['query'][_0x698c('0x35')]));_0x202fff[_0x698c('0x34')]=_0x202fff[_0x698c('0x34')]['length']?_0x202fff[_0x698c('0x34')]:_0x580fdb['model'];_0x202fff[_0x698c('0x39')]=qs[_0x698c('0x3a')](_0x30f328[_0x698c('0x31')][_0x698c('0x3a')]);_0x202fff[_0x698c('0x3b')]=qs[_0x698c('0x3c')](_[_0x698c('0x3d')](_0x30f328[_0x698c('0x31')],_0x580fdb[_0x698c('0x3c')]));if(_0x30f328['query'][_0x698c('0x3e')]){_0x202fff['where']=_[_0x698c('0x3f')](_0x202fff[_0x698c('0x3b')],{'$or':_[_0x698c('0x58')](_0x202fff[_0x698c('0x34')],function(_0x5085b9){var _0x1e5784={};_0x1e5784[_0x5085b9]={'$like':'%'+_0x30f328[_0x698c('0x31')][_0x698c('0x3e')]+'%'};return _0x1e5784;})});}_0x202fff=_['merge']({},_0x202fff,_0x30f328[_0x698c('0x44')]);return _0x1b425f[_0x698c('0x65')](_0x202fff);}})[_0x698c('0x27')](function(_0x38a35e){if(_0x38a35e){_0x3d0dfe=_0x38a35e[_0x698c('0x36')];if(!_0x30f328[_0x698c('0x31')][_0x698c('0x37')](_0x698c('0x38'))){_0x202fff[_0x698c('0x20')]=qs[_0x698c('0x20')](_0x30f328['query'][_0x698c('0x20')]);_0x202fff[_0x698c('0x1f')]=qs[_0x698c('0x1f')](_0x30f328['query'][_0x698c('0x1f')]);}return _0x1b425f[_0x698c('0x65')](_0x202fff);}})['then'](function(_0x495a7b){if(_0x495a7b){return _0x495a7b?{'count':_0x3d0dfe,'rows':_0x495a7b}:null;}})[_0x698c('0x27')](respondWithResult(_0x24037b,null))[_0x698c('0x47')](handleError(_0x24037b,null));};exports['addTeams']=function(_0x146918,_0x5938b2,_0x4dc12c){var _0x4ebfd3=_0x146918['body'][_0x698c('0x68')];return db['Team'][_0x698c('0x46')]({'where':{'id':_[_0x698c('0x58')](_0x4ebfd3,'id')},'attributes':['id'],'include':[{'model':db[_0x698c('0x5a')],'as':_0x698c('0x69'),'attributes':['id',_0x698c('0x2c'),'online',_0x698c('0x6a'),'interface'],'raw':!![]}]})['then'](function(_0x3323c5){if(_0x3323c5){var _0x383437=_[_0x698c('0x6b')](_0x3323c5,function(_0x283ca8){var _0x4a2e42=_0x283ca8[_0x698c('0x4e')]({'plain':!![]});return _0x4a2e42[_0x698c('0x69')];});return db[_0x698c('0x2e')][_0x698c('0x4a')]({'where':{'id':_0x146918[_0x698c('0x54')]['id']}})[_0x698c('0x27')](function(_0x2f146c){return db[_0x698c('0x6c')][_0x698c('0x6d')](function(_0x248fbf){return _0x2f146c[_0x698c('0x6e')](_['map'](_0x4ebfd3,'id'),{'transaction':_0x248fbf})[_0x698c('0x27')](function(){return BPromise[_0x698c('0x6f')](_0x383437,function(_0x2825c9){return db['UserSmsQueue'][_0x698c('0x70')]({'where':{'UserId':_0x2825c9['id'],'SmsQueueId':_0x146918['params']['id']},'transaction':_0x248fbf});});})[_0x698c('0x27')](function(){_0x383437[_0x698c('0x71')](function(_0x39a62c){socket[_0x698c('0x72')]('userSmsQueue:save',{'UserId':_0x39a62c['id'],'SmsQueueId':_0x2f146c['id']});});});});});}})['then'](respondWithStatusCode(_0x5938b2,null))[_0x698c('0x47')](handleError(_0x5938b2,null));};exports[_0x698c('0x73')]=function(_0x85bfa1,_0x503394,_0x2f69cf){return db[_0x698c('0x67')][_0x698c('0x46')]({'where':{'id':_0x85bfa1[_0x698c('0x31')][_0x698c('0x74')]},'attributes':['id'],'include':[{'model':db[_0x698c('0x5a')],'as':_0x698c('0x69'),'attributes':['id'],'raw':!![]}]})[_0x698c('0x27')](handleEntityNotFound(_0x503394,null))['then'](function(_0x5c1ecb){var _0x560b27=_[_0x698c('0x58')](_0x5c1ecb,'id');var _0xccbb5f=[];var _0x101a74=[];var _0x1288cb=squel['select']();_0x1288cb['field'](_0x698c('0x75'))['from']('team_has_sms_queues','tq')[_0x698c('0x76')](_0x698c('0x77'),'ut',_0x698c('0x78'))[_0x698c('0x3b')]('SmsQueueId\x20=\x20?',_0x85bfa1[_0x698c('0x54')]['id']);for(var _0x4f8980=0x0;_0x4f8980<_0x5c1ecb[_0x698c('0x36')];_0x4f8980+=0x1){let _0x149ced=_0x5c1ecb[_0x4f8980];for(var _0x19797e=0x0;_0x19797e<_0x149ced[_0x698c('0x69')][_0x698c('0x36')];_0x19797e+=0x1){let _0x133666=_0x149ced[_0x698c('0x69')][_0x19797e];var _0x49b1a9=_0x1288cb[_0x698c('0x79')]();_0x49b1a9['where'](_0x698c('0x7a'),_0x133666['id']);_0x101a74[_0x698c('0x7b')](db[_0x698c('0x6c')][_0x698c('0x31')](_0x49b1a9[_0x698c('0x7c')](),{'type':db[_0x698c('0x6c')]['QueryTypes'][_0x698c('0x7d')]})[_0x698c('0x27')](function(_0x152563){if(_0x152563[_0x698c('0x36')]===0x1){return _0x133666['id'];}else{var _0xb205b4=_['every'](_[_0x698c('0x58')](_0x152563,_0x698c('0x7e')),function(_0x2358cb){return _[_0x698c('0x7f')](_0x560b27,_0x2358cb);});if(_0xb205b4){return _0x133666['id'];}}}));}}return BPromise['all'](_0x101a74)[_0x698c('0x27')](function(_0x264b10){_0xccbb5f=_(_0xccbb5f)[_0x698c('0x80')](_0x264b10)['compact']()[_0x698c('0x81')]();return db[_0x698c('0x2e')][_0x698c('0x4a')]({'where':{'id':_0x85bfa1[_0x698c('0x54')]['id']}})[_0x698c('0x27')](function(_0x5dcd9a){return db[_0x698c('0x6c')][_0x698c('0x6d')](function(_0xff4e99){return _0x5dcd9a[_0x698c('0x73')](_0x85bfa1[_0x698c('0x31')][_0x698c('0x74')],{'transaction':_0xff4e99})[_0x698c('0x27')](function(){if(!_[_0x698c('0x82')](_0xccbb5f)){return _0x5dcd9a['removeAgents'](_0xccbb5f,{'transaction':_0xff4e99});}})['then'](function(){_0xccbb5f[_0x698c('0x71')](function(_0x4691cc){socket['emit'](_0x698c('0x83'),{'UserId':_0x4691cc,'SmsQueueId':_0x5dcd9a['id']});});});});});});})[_0x698c('0x27')](respondWithStatusCode(_0x503394,null))['catch'](handleError(_0x503394,null));};exports[_0x698c('0x84')]=function(_0x8b41e2,_0x4aba70,_0x2f30f3){return db[_0x698c('0x2e')][_0x698c('0x4a')]({'where':{'id':_0x8b41e2[_0x698c('0x54')]['id']}})[_0x698c('0x27')](handleEntityNotFound(_0x4aba70,null))[_0x698c('0x27')](function(_0x361ead){if(_0x361ead){return _0x361ead[_0x698c('0x84')](_0x8b41e2[_0x698c('0x4c')][_0x698c('0x74')],_[_0x698c('0x85')](_0x8b41e2[_0x698c('0x4c')],[_0x698c('0x74'),'id'])||{})[_0x698c('0x86')](function(_0x27134d){for(var _0x2c57d1=0x0;_0x2c57d1<_0x8b41e2[_0x698c('0x4c')][_0x698c('0x74')][_0x698c('0x36')];_0x2c57d1+=0x1){socket[_0x698c('0x72')](_0x698c('0x87'),{'UserId':_0x8b41e2['body'][_0x698c('0x74')][_0x2c57d1],'SmsQueueId':_0x8b41e2[_0x698c('0x54')]['id']});}return _0x27134d;});}})['then'](respondWithResult(_0x4aba70,null))[_0x698c('0x47')](handleError(_0x4aba70,null));};exports[_0x698c('0x88')]=function(_0x5f4d74,_0x54488a,_0x2b1afb){return db['SmsQueue'][_0x698c('0x4a')]({'where':{'id':_0x5f4d74[_0x698c('0x54')]['id']}})[_0x698c('0x27')](handleEntityNotFound(_0x54488a,null))[_0x698c('0x27')](function(_0x54e3ef){if(_0x54e3ef){return _0x54e3ef[_0x698c('0x88')](_0x5f4d74[_0x698c('0x31')][_0x698c('0x74')])[_0x698c('0x27')](function(){if(_[_0x698c('0x89')](_0x5f4d74[_0x698c('0x31')]['ids'])){for(var _0x158cbd=0x0;_0x158cbd<_0x5f4d74['query'][_0x698c('0x74')][_0x698c('0x36')];_0x158cbd+=0x1){socket[_0x698c('0x72')](_0x698c('0x83'),{'UserId':Number(_0x5f4d74[_0x698c('0x31')][_0x698c('0x74')][_0x158cbd]),'SmsQueueId':Number(_0x5f4d74[_0x698c('0x54')]['id'])});}}else{socket[_0x698c('0x72')](_0x698c('0x83'),{'UserId':Number(_0x5f4d74[_0x698c('0x31')][_0x698c('0x74')]),'SmsQueueId':Number(_0x5f4d74['params']['id'])});}});}})[_0x698c('0x27')](respondWithStatusCode(_0x54488a,null))[_0x698c('0x47')](handleError(_0x54488a,null));};exports[_0x698c('0x8a')]=function(_0x58c456,_0x25338f,_0x45a33e){var _0x37737e={};var _0x1a7dd5={};var _0xd99504;var _0x348245;return db[_0x698c('0x2e')][_0x698c('0x66')]({'where':{'id':_0x58c456[_0x698c('0x54')]['id']}})[_0x698c('0x27')](handleEntityNotFound(_0x25338f,null))[_0x698c('0x27')](function(_0x528bd4){if(_0x528bd4){_0xd99504=_0x528bd4;_0x1a7dd5['model']=_[_0x698c('0x32')](db[_0x698c('0x5a')][_0x698c('0x2f')]);_0x1a7dd5[_0x698c('0x31')]=_[_0x698c('0x32')](_0x58c456[_0x698c('0x31')]);_0x1a7dd5[_0x698c('0x3c')]=_['intersection'](_0x1a7dd5['model'],_0x1a7dd5[_0x698c('0x31')]);_0x37737e[_0x698c('0x34')]=_[_0x698c('0x33')](_0x1a7dd5['model'],qs[_0x698c('0x35')](_0x58c456[_0x698c('0x31')]['fields']));_0x37737e[_0x698c('0x34')]=_0x37737e[_0x698c('0x34')][_0x698c('0x36')]?_0x37737e[_0x698c('0x34')]:_0x1a7dd5[_0x698c('0x30')];_0x37737e[_0x698c('0x39')]=qs[_0x698c('0x3a')](_0x58c456[_0x698c('0x31')]['sort']);_0x37737e[_0x698c('0x3b')]=qs[_0x698c('0x3c')](_[_0x698c('0x3d')](_0x58c456['query'],_0x1a7dd5[_0x698c('0x3c')]));if(_0x58c456[_0x698c('0x31')][_0x698c('0x3e')]){_0x37737e[_0x698c('0x3b')]=_['merge'](_0x37737e[_0x698c('0x3b')],{'$or':_[_0x698c('0x58')](_0x37737e['attributes'],function(_0x106a50){var _0x4699e5={};_0x4699e5[_0x106a50]={'$like':'%'+_0x58c456[_0x698c('0x31')]['filter']+'%'};return _0x4699e5;})});}_0x37737e=_[_0x698c('0x3f')]({},_0x37737e,_0x58c456['options']);return _0xd99504[_0x698c('0x8a')](_0x37737e);}})[_0x698c('0x27')](function(_0x19f533){if(_0x19f533){_0x348245=_0x19f533['length'];if(!_0x58c456[_0x698c('0x31')]['hasOwnProperty'](_0x698c('0x38'))){_0x37737e[_0x698c('0x20')]=qs[_0x698c('0x20')](_0x58c456[_0x698c('0x31')][_0x698c('0x20')]);_0x37737e['offset']=qs[_0x698c('0x1f')](_0x58c456[_0x698c('0x31')][_0x698c('0x1f')]);}return _0xd99504[_0x698c('0x8a')](_0x37737e);}})['then'](function(_0xbd6e04){if(_0xbd6e04){return _0xbd6e04?{'count':_0x348245,'rows':_0xbd6e04}:null;}})['then'](respondWithResult(_0x25338f,null))[_0x698c('0x47')](handleError(_0x25338f,null));};
\ No newline at end of file
+var _0x5366=['type','key','VIRTUAL','field','SmsQueue','includeAll','findAll','rows','catch','show','params','rawAttributes','include','options','find','create','body','user','role','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','getMembers','findOne','nolimit','SmsQueueId','UserSmsQueue','User','findAndCountAll','UserId','agent','smsPause','updatedAt','createdAt','%s/%s','SIP','getTeams','teams','Agents','interface','flatMap','sequelize','transaction','addTeams','each','findOrCreate','forEach','userSmsQueue:save','removeTeams','Team','select','tq.TeamId','from','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','clone','ut.UserId\x20=\x20?','push','toString','QueryTypes','TeamId','includes','all','union','compact','value','ids','removeAgents','emit','addAgents','omit','spread','isArray','userSmsQueue:remove','order','getAgents','html-pdf','zip-dir','fast-json-patch','request-promise','bluebird','path','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','redis','localhost','socket.io-emitter','register','sendStatus','status','end','json','count','offset','limit','Content-Range','apply','save','update','then','get','SmsQueues','UserProfileResource','destroy','error','stack','name','send','index','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','sort','where','pick','filter','merge','map'];(function(_0x333714,_0x3370ac){var _0x4c211e=function(_0x34219b){while(--_0x34219b){_0x333714['push'](_0x333714['shift']());}};_0x4c211e(++_0x3370ac);}(_0x5366,0xd6));var _0x6536=function(_0x3b0731,_0xcf9925){_0x3b0731=_0x3b0731-0x0;var _0x4204d7=_0x5366[_0x3b0731];return _0x4204d7;};'use strict';var pdf=require(_0x6536('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x6536('0x1'));var jsonpatch=require(_0x6536('0x2'));var rp=require(_0x6536('0x3'));var moment=require('moment');var BPromise=require(_0x6536('0x4'));var Mustache=require('mustache');var util=require('util');var path=require(_0x6536('0x5'));var sox=require(_0x6536('0x6'));var csv=require(_0x6536('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x6536('0x8'));var squel=require(_0x6536('0x9'));var crypto=require('crypto');var jsforce=require(_0x6536('0xa'));var deskjs=require(_0x6536('0xb'));var toCsv=require(_0x6536('0x7'));var querystring=require(_0x6536('0xc'));var Papa=require(_0x6536('0xd'));var Redis=require(_0x6536('0xe'));var authService=require(_0x6536('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x6536('0x10'));var logger=require('../../config/logger')(_0x6536('0x11'));var utils=require(_0x6536('0x12'));var config=require(_0x6536('0x13'));var db=require('../../mysqldb')['db'];config[_0x6536('0x14')]=_['defaults'](config[_0x6536('0x14')],{'host':_0x6536('0x15'),'port':0x18eb});var socket=require(_0x6536('0x16'))(new Redis(config['redis']));require('./smsQueue.socket')[_0x6536('0x17')](socket);function respondWithStatusCode(_0x3add37,_0x17ed25){_0x17ed25=_0x17ed25||0xcc;return function(_0x5c59b2){if(_0x5c59b2){return _0x3add37[_0x6536('0x18')](_0x17ed25);}return _0x3add37[_0x6536('0x19')](_0x17ed25)[_0x6536('0x1a')]();};}function respondWithResult(_0x3042c3,_0x2937d3){_0x2937d3=_0x2937d3||0xc8;return function(_0x3f1e22){if(_0x3f1e22){return _0x3042c3[_0x6536('0x19')](_0x2937d3)[_0x6536('0x1b')](_0x3f1e22);}};}function respondWithFilteredResult(_0x7a97de,_0x4f7c27){return function(_0x5b7409){if(_0x5b7409){var _0x762fd0=_0x5b7409[_0x6536('0x1c')],_0x37d077=_0x4f7c27['offset'],_0x2067e6=_0x4f7c27[_0x6536('0x1d')]+_0x4f7c27[_0x6536('0x1e')],_0x3582b4;if(_0x2067e6>=_0x762fd0){_0x2067e6=_0x762fd0;_0x3582b4=0xc8;}else{_0x3582b4=0xce;}_0x7a97de[_0x6536('0x19')](_0x3582b4);return _0x7a97de['set'](_0x6536('0x1f'),_0x37d077+'-'+_0x2067e6+'/'+_0x762fd0)['json'](_0x5b7409);}return null;};}function patchUpdates(_0x169be3){return function(_0x2da794){try{jsonpatch[_0x6536('0x20')](_0x2da794,_0x169be3,!![]);}catch(_0x556efd){return BPromise['reject'](_0x556efd);}return _0x2da794[_0x6536('0x21')]();};}function saveUpdates(_0x200a83,_0x5d5abb){return function(_0x31822a){if(_0x31822a){return _0x31822a[_0x6536('0x22')](_0x200a83)[_0x6536('0x23')](function(_0x48fb1e){return _0x48fb1e;});}return null;};}function removeEntity(_0x48f324,_0x5a7cf7){return function(_0xa2f7cd){if(_0xa2f7cd){return _0xa2f7cd['destroy']()[_0x6536('0x23')](function(){var _0x4409cc=_0xa2f7cd[_0x6536('0x24')]({'plain':!![]});var _0x388139=_0x6536('0x25');return db[_0x6536('0x26')][_0x6536('0x27')]({'where':{'type':_0x388139,'resourceId':_0x4409cc['id']}})['then'](function(){return _0xa2f7cd;});})['then'](function(){_0x48f324[_0x6536('0x19')](0xcc)[_0x6536('0x1a')]();});}};}function handleEntityNotFound(_0x68586a,_0x2cfb8f){return function(_0x496cdb){if(!_0x496cdb){_0x68586a[_0x6536('0x18')](0x194);}return _0x496cdb;};}function handleError(_0x4176c6,_0x51c7b0){_0x51c7b0=_0x51c7b0||0x1f4;return function(_0x15480e){logger[_0x6536('0x28')](_0x15480e[_0x6536('0x29')]);if(_0x15480e[_0x6536('0x2a')]){delete _0x15480e[_0x6536('0x2a')];}_0x4176c6[_0x6536('0x19')](_0x51c7b0)[_0x6536('0x2b')](_0x15480e);};}exports[_0x6536('0x2c')]=function(_0x2fd596,_0x6038b1){var _0x1eb366={},_0x397054={},_0x114443={'count':0x0,'rows':[]};var _0x4c6889=db['SmsQueue']['rawAttributes'];_0x397054[_0x6536('0x2d')]=_['keys'](_0x4c6889);_0x397054['query']=_[_0x6536('0x2e')](_0x2fd596[_0x6536('0x2f')]);_0x397054[_0x6536('0x30')]=_[_0x6536('0x31')](_0x397054[_0x6536('0x2d')],_0x397054[_0x6536('0x2f')]);_0x1eb366[_0x6536('0x32')]=_[_0x6536('0x31')](_0x397054['model'],qs[_0x6536('0x33')](_0x2fd596[_0x6536('0x2f')]['fields']));_0x1eb366['attributes']=_0x1eb366[_0x6536('0x32')][_0x6536('0x34')]?_0x1eb366[_0x6536('0x32')]:_0x397054[_0x6536('0x2d')];if(!_0x2fd596[_0x6536('0x2f')][_0x6536('0x35')]('nolimit')){_0x1eb366[_0x6536('0x1e')]=qs['limit'](_0x2fd596[_0x6536('0x2f')]['limit']);_0x1eb366[_0x6536('0x1d')]=qs[_0x6536('0x1d')](_0x2fd596['query'][_0x6536('0x1d')]);}_0x1eb366['order']=qs[_0x6536('0x36')](_0x2fd596[_0x6536('0x2f')][_0x6536('0x36')]);_0x1eb366[_0x6536('0x37')]=qs[_0x6536('0x30')](_[_0x6536('0x38')](_0x2fd596[_0x6536('0x2f')],_0x397054[_0x6536('0x30')]));if(_0x2fd596[_0x6536('0x2f')][_0x6536('0x39')]){_0x1eb366[_0x6536('0x37')]=_[_0x6536('0x3a')](_0x1eb366['where'],{'$or':_[_0x6536('0x3b')](_0x4c6889,function(_0x143733){if(_0x143733[_0x6536('0x3c')][_0x6536('0x3d')]!==_0x6536('0x3e')){var _0x35b02a={};_0x35b02a[_0x143733[_0x6536('0x3f')]]={'$like':'%'+_0x2fd596[_0x6536('0x2f')][_0x6536('0x39')]+'%'};return _0x35b02a;}})});}_0x1eb366=_['merge']({},_0x1eb366,_0x2fd596['options']);var _0x11eb2a={'where':_0x1eb366[_0x6536('0x37')]};return db[_0x6536('0x40')]['count'](_0x11eb2a)[_0x6536('0x23')](function(_0x2b7027){_0x114443['count']=_0x2b7027;if(_0x2fd596[_0x6536('0x2f')][_0x6536('0x41')]){_0x1eb366['include']=[{'all':!![]}];}return db[_0x6536('0x40')][_0x6536('0x42')](_0x1eb366);})[_0x6536('0x23')](function(_0x450f2b){_0x114443[_0x6536('0x43')]=_0x450f2b;return _0x114443;})[_0x6536('0x23')](respondWithFilteredResult(_0x6038b1,_0x1eb366))[_0x6536('0x44')](handleError(_0x6038b1,null));};exports[_0x6536('0x45')]=function(_0x3ab79e,_0x110dc8){var _0x536553={'raw':!![],'where':{'id':_0x3ab79e[_0x6536('0x46')]['id']}},_0x356fba={};_0x356fba[_0x6536('0x2d')]=_[_0x6536('0x2e')](db[_0x6536('0x40')][_0x6536('0x47')]);_0x356fba[_0x6536('0x2f')]=_['keys'](_0x3ab79e[_0x6536('0x2f')]);_0x356fba[_0x6536('0x30')]=_[_0x6536('0x31')](_0x356fba[_0x6536('0x2d')],_0x356fba[_0x6536('0x2f')]);_0x536553['attributes']=_[_0x6536('0x31')](_0x356fba[_0x6536('0x2d')],qs[_0x6536('0x33')](_0x3ab79e[_0x6536('0x2f')]['fields']));_0x536553[_0x6536('0x32')]=_0x536553['attributes'][_0x6536('0x34')]?_0x536553[_0x6536('0x32')]:_0x356fba['model'];if(_0x3ab79e[_0x6536('0x2f')][_0x6536('0x41')]){_0x536553[_0x6536('0x48')]=[{'all':!![]}];}_0x536553=_[_0x6536('0x3a')]({},_0x536553,_0x3ab79e[_0x6536('0x49')]);return db[_0x6536('0x40')][_0x6536('0x4a')](_0x536553)[_0x6536('0x23')](handleEntityNotFound(_0x110dc8,null))[_0x6536('0x23')](respondWithResult(_0x110dc8,null))[_0x6536('0x44')](handleError(_0x110dc8,null));};exports[_0x6536('0x4b')]=function(_0x1d6e87,_0x48e200){return db[_0x6536('0x40')][_0x6536('0x4b')](_0x1d6e87[_0x6536('0x4c')],{})['then'](function(_0x16e566){var _0x2deec1=_0x1d6e87[_0x6536('0x4d')][_0x6536('0x24')]({'plain':!![]});if(!_0x2deec1)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x2deec1[_0x6536('0x4e')]==='user'){var _0x10add9=_0x16e566[_0x6536('0x24')]({'plain':!![]});var _0x304273=_0x6536('0x25');return db[_0x6536('0x4f')]['find']({'where':{'name':_0x304273,'userProfileId':_0x2deec1['userProfileId']},'raw':!![]})[_0x6536('0x23')](function(_0x492d54){if(_0x492d54&&_0x492d54[_0x6536('0x50')]===0x0){return db['UserProfileResource']['create']({'name':_0x10add9[_0x6536('0x2a')],'resourceId':_0x10add9['id'],'type':_0x492d54['name'],'sectionId':_0x492d54['id']},{})[_0x6536('0x23')](function(){return _0x16e566;});}else{return _0x16e566;}})['catch'](function(_0x4f6031){logger[_0x6536('0x28')](_0x6536('0x51'),_0x4f6031);throw _0x4f6031;});}return _0x16e566;})[_0x6536('0x23')](respondWithResult(_0x48e200,0xc9))[_0x6536('0x44')](handleError(_0x48e200,null));};exports[_0x6536('0x22')]=function(_0x3e1b61,_0x442b9d){if(_0x3e1b61[_0x6536('0x4c')]['id']){delete _0x3e1b61[_0x6536('0x4c')]['id'];}return db[_0x6536('0x40')][_0x6536('0x4a')]({'where':{'id':_0x3e1b61[_0x6536('0x46')]['id']}})[_0x6536('0x23')](handleEntityNotFound(_0x442b9d,null))[_0x6536('0x23')](saveUpdates(_0x3e1b61[_0x6536('0x4c')],null))['then'](respondWithResult(_0x442b9d,null))[_0x6536('0x44')](handleError(_0x442b9d,null));};exports[_0x6536('0x27')]=function(_0x5d9fc7,_0x4b2413){return db['SmsQueue'][_0x6536('0x4a')]({'where':{'id':_0x5d9fc7[_0x6536('0x46')]['id']}})[_0x6536('0x23')](handleEntityNotFound(_0x4b2413,null))[_0x6536('0x23')](removeEntity(_0x4b2413,null))[_0x6536('0x44')](handleError(_0x4b2413,null));};exports[_0x6536('0x52')]=function(_0x3a7bbc,_0x5c9a81){return db[_0x6536('0x40')][_0x6536('0x52')]()[_0x6536('0x23')](respondWithResult(_0x5c9a81,null))[_0x6536('0x44')](handleError(_0x5c9a81,null));};exports[_0x6536('0x53')]=function(_0x3a2713,_0x31b20f,_0x4e21b8){var _0x46fb99={'raw':!![],'where':{}},_0xe262e1={},_0x30f51f;return db[_0x6536('0x40')][_0x6536('0x54')]({'where':{'id':_0x3a2713[_0x6536('0x46')]['id']}})['then'](handleEntityNotFound(_0x31b20f,null))[_0x6536('0x23')](function(_0x17fb36){if(_0x17fb36){_0x30f51f=_0x17fb36[_0x6536('0x24')]({'plain':!![]});_0xe262e1[_0x6536('0x2d')]=_[_0x6536('0x2e')](db['UserSmsQueue'][_0x6536('0x47')]);_0xe262e1[_0x6536('0x2f')]=_[_0x6536('0x2e')](_0x3a2713['query']);_0xe262e1[_0x6536('0x30')]=_[_0x6536('0x31')](_0xe262e1[_0x6536('0x2d')],_0xe262e1[_0x6536('0x2f')]);_0x46fb99[_0x6536('0x32')]=_[_0x6536('0x31')](_0xe262e1[_0x6536('0x2d')],qs[_0x6536('0x33')](_0x3a2713[_0x6536('0x2f')][_0x6536('0x33')]));_0x46fb99[_0x6536('0x32')]=_0x46fb99['attributes']['length']?_0x46fb99[_0x6536('0x32')]:_0xe262e1[_0x6536('0x2d')];if(!_0x3a2713[_0x6536('0x2f')][_0x6536('0x35')](_0x6536('0x55'))){_0x46fb99[_0x6536('0x1e')]=qs[_0x6536('0x1e')](_0x3a2713[_0x6536('0x2f')][_0x6536('0x1e')]);_0x46fb99[_0x6536('0x1d')]=qs[_0x6536('0x1d')](_0x3a2713[_0x6536('0x2f')][_0x6536('0x1d')]);}_0x46fb99['order']=qs[_0x6536('0x36')](_0x3a2713[_0x6536('0x2f')][_0x6536('0x36')]);_0x46fb99['where']=qs[_0x6536('0x30')](_[_0x6536('0x38')](_0x3a2713[_0x6536('0x2f')],_0xe262e1[_0x6536('0x30')]));_0x46fb99['where'][_0x6536('0x56')]=_0x17fb36['id'];if(_0x3a2713['query'][_0x6536('0x39')]){_0x46fb99[_0x6536('0x37')]=_[_0x6536('0x3a')](_0x46fb99['where'],{'$or':_[_0x6536('0x3b')](_0x46fb99[_0x6536('0x32')],function(_0x21f603){var _0x50a16f={};_0x50a16f[_0x21f603]={'$like':'%'+_0x3a2713[_0x6536('0x2f')][_0x6536('0x39')]+'%'};return _0x50a16f;})});}_0x46fb99=_[_0x6536('0x3a')]({},_0x46fb99,_0x3a2713['options']);return db[_0x6536('0x57')][_0x6536('0x42')](_0x46fb99);}})[_0x6536('0x23')](function(_0x40f7c2){if(_0x40f7c2){return db[_0x6536('0x58')][_0x6536('0x59')]({'where':{'id':_[_0x6536('0x3b')](_0x40f7c2,_0x6536('0x5a')),'role':_0x6536('0x5b')},'attributes':['id',_0x6536('0x2a'),_0x6536('0x5c'),_0x6536('0x5d'),_0x6536('0x5e')]});}})['then'](function(_0x52ce3a){if(_0x52ce3a){return{'count':_0x52ce3a[_0x6536('0x1c')],'rows':_[_0x6536('0x3b')](_0x52ce3a['rows'],function(_0x2db625){return{'membername':_0x2db625['name'],'UserId':_0x2db625['id'],'queue_name':_0x30f51f[_0x6536('0x2a')],'SmsQueueId':_0x30f51f['id'],'interface':util['format'](_0x6536('0x5f'),_0x6536('0x60'),_0x2db625[_0x6536('0x2a')]),'penalty':0x0,'paused':_0x2db625[_0x6536('0x5c')],'createdAt':_0x2db625['createdAt'],'updatedAt':_0x2db625[_0x6536('0x5d')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x6536('0x23')](respondWithFilteredResult(_0x31b20f,_0x46fb99))[_0x6536('0x44')](handleError(_0x31b20f,null));};exports[_0x6536('0x61')]=function(_0x26f8dc,_0x510651,_0x4ddd13){var _0x149b74={};var _0x19ecb2={};var _0x55045c;var _0x4bd24a;return db['SmsQueue'][_0x6536('0x54')]({'where':{'id':_0x26f8dc[_0x6536('0x46')]['id']}})[_0x6536('0x23')](handleEntityNotFound(_0x510651,null))[_0x6536('0x23')](function(_0x1d0cf8){if(_0x1d0cf8){_0x55045c=_0x1d0cf8;_0x19ecb2[_0x6536('0x2d')]=_[_0x6536('0x2e')](db['Team'][_0x6536('0x47')]);_0x19ecb2['query']=_[_0x6536('0x2e')](_0x26f8dc[_0x6536('0x2f')]);_0x19ecb2[_0x6536('0x30')]=_[_0x6536('0x31')](_0x19ecb2[_0x6536('0x2d')],_0x19ecb2[_0x6536('0x2f')]);_0x149b74['attributes']=_['intersection'](_0x19ecb2['model'],qs['fields'](_0x26f8dc['query'][_0x6536('0x33')]));_0x149b74[_0x6536('0x32')]=_0x149b74[_0x6536('0x32')][_0x6536('0x34')]?_0x149b74[_0x6536('0x32')]:_0x19ecb2[_0x6536('0x2d')];_0x149b74['order']=qs[_0x6536('0x36')](_0x26f8dc[_0x6536('0x2f')]['sort']);_0x149b74[_0x6536('0x37')]=qs[_0x6536('0x30')](_[_0x6536('0x38')](_0x26f8dc[_0x6536('0x2f')],_0x19ecb2[_0x6536('0x30')]));if(_0x26f8dc['query'][_0x6536('0x39')]){_0x149b74[_0x6536('0x37')]=_[_0x6536('0x3a')](_0x149b74[_0x6536('0x37')],{'$or':_['map'](_0x149b74[_0x6536('0x32')],function(_0x5cecdd){var _0x544459={};_0x544459[_0x5cecdd]={'$like':'%'+_0x26f8dc['query']['filter']+'%'};return _0x544459;})});}_0x149b74=_[_0x6536('0x3a')]({},_0x149b74,_0x26f8dc[_0x6536('0x49')]);return _0x55045c[_0x6536('0x61')](_0x149b74);}})[_0x6536('0x23')](function(_0x6ac50c){if(_0x6ac50c){_0x4bd24a=_0x6ac50c[_0x6536('0x34')];if(!_0x26f8dc[_0x6536('0x2f')][_0x6536('0x35')](_0x6536('0x55'))){_0x149b74[_0x6536('0x1e')]=qs[_0x6536('0x1e')](_0x26f8dc[_0x6536('0x2f')][_0x6536('0x1e')]);_0x149b74['offset']=qs['offset'](_0x26f8dc[_0x6536('0x2f')][_0x6536('0x1d')]);}return _0x55045c['getTeams'](_0x149b74);}})[_0x6536('0x23')](function(_0x3092ae){if(_0x3092ae){return _0x3092ae?{'count':_0x4bd24a,'rows':_0x3092ae}:null;}})[_0x6536('0x23')](respondWithResult(_0x510651,null))[_0x6536('0x44')](handleError(_0x510651,null));};exports['addTeams']=function(_0x5c0b42,_0xbfddab,_0x4f4362){var _0x3b7f12=_0x5c0b42[_0x6536('0x4c')][_0x6536('0x62')];return db['Team'][_0x6536('0x42')]({'where':{'id':_[_0x6536('0x3b')](_0x3b7f12,'id')},'attributes':['id'],'include':[{'model':db[_0x6536('0x58')],'as':_0x6536('0x63'),'attributes':['id',_0x6536('0x2a'),'online','voicePause',_0x6536('0x64')],'raw':!![]}]})[_0x6536('0x23')](function(_0x38953d){if(_0x38953d){var _0x5945e3=_[_0x6536('0x65')](_0x38953d,function(_0xa22e6a){var _0x47d362=_0xa22e6a['get']({'plain':!![]});return _0x47d362[_0x6536('0x63')];});return db[_0x6536('0x40')][_0x6536('0x4a')]({'where':{'id':_0x5c0b42[_0x6536('0x46')]['id']}})[_0x6536('0x23')](function(_0x5c58fe){return db[_0x6536('0x66')][_0x6536('0x67')](function(_0x177132){return _0x5c58fe[_0x6536('0x68')](_['map'](_0x3b7f12,'id'),{'transaction':_0x177132})['then'](function(){return BPromise[_0x6536('0x69')](_0x5945e3,function(_0x3dbd2d){return db['UserSmsQueue'][_0x6536('0x6a')]({'where':{'UserId':_0x3dbd2d['id'],'SmsQueueId':_0x5c0b42[_0x6536('0x46')]['id']},'transaction':_0x177132});});})[_0x6536('0x23')](function(){_0x5945e3[_0x6536('0x6b')](function(_0x3e4be2){socket['emit'](_0x6536('0x6c'),{'UserId':_0x3e4be2['id'],'SmsQueueId':_0x5c58fe['id']});});});});});}})[_0x6536('0x23')](respondWithStatusCode(_0xbfddab,null))[_0x6536('0x44')](handleError(_0xbfddab,null));};exports[_0x6536('0x6d')]=function(_0x34c7ad,_0x3bbe4e,_0x2fc0f2){return db[_0x6536('0x6e')]['findAll']({'where':{'id':_0x34c7ad[_0x6536('0x2f')]['ids']},'attributes':['id'],'include':[{'model':db['User'],'as':_0x6536('0x63'),'attributes':['id'],'raw':!![]}]})[_0x6536('0x23')](handleEntityNotFound(_0x3bbe4e,null))[_0x6536('0x23')](function(_0x215e69){var _0x1af4f8=_[_0x6536('0x3b')](_0x215e69,'id');var _0x15abf0=[];var _0x6fba61=[];var _0x2467d2=squel[_0x6536('0x6f')]();_0x2467d2[_0x6536('0x3f')](_0x6536('0x70'))[_0x6536('0x71')]('team_has_sms_queues','tq')['join'](_0x6536('0x72'),'ut',_0x6536('0x73'))[_0x6536('0x37')]('SmsQueueId\x20=\x20?',_0x34c7ad['params']['id']);for(var _0x3764c2=0x0;_0x3764c2<_0x215e69[_0x6536('0x34')];_0x3764c2+=0x1){let _0x48c37a=_0x215e69[_0x3764c2];for(var _0x40a109=0x0;_0x40a109<_0x48c37a[_0x6536('0x63')][_0x6536('0x34')];_0x40a109+=0x1){let _0x50e40c=_0x48c37a[_0x6536('0x63')][_0x40a109];var _0x37790f=_0x2467d2[_0x6536('0x74')]();_0x37790f['where'](_0x6536('0x75'),_0x50e40c['id']);_0x6fba61[_0x6536('0x76')](db['sequelize'][_0x6536('0x2f')](_0x37790f[_0x6536('0x77')](),{'type':db[_0x6536('0x66')][_0x6536('0x78')]['SELECT']})[_0x6536('0x23')](function(_0x385dad){if(_0x385dad[_0x6536('0x34')]===0x1){return _0x50e40c['id'];}else{var _0x47de43=_['every'](_['map'](_0x385dad,_0x6536('0x79')),function(_0x235658){return _[_0x6536('0x7a')](_0x1af4f8,_0x235658);});if(_0x47de43){return _0x50e40c['id'];}}}));}}return BPromise[_0x6536('0x7b')](_0x6fba61)['then'](function(_0x16817d){_0x15abf0=_(_0x15abf0)[_0x6536('0x7c')](_0x16817d)[_0x6536('0x7d')]()[_0x6536('0x7e')]();return db[_0x6536('0x40')]['find']({'where':{'id':_0x34c7ad['params']['id']}})[_0x6536('0x23')](function(_0x382f4e){return db['sequelize']['transaction'](function(_0x389fcf){return _0x382f4e[_0x6536('0x6d')](_0x34c7ad[_0x6536('0x2f')][_0x6536('0x7f')],{'transaction':_0x389fcf})[_0x6536('0x23')](function(){if(!_['isEmpty'](_0x15abf0)){return _0x382f4e[_0x6536('0x80')](_0x15abf0,{'transaction':_0x389fcf});}})['then'](function(){_0x15abf0[_0x6536('0x6b')](function(_0x5c0a04){socket[_0x6536('0x81')]('userSmsQueue:remove',{'UserId':_0x5c0a04,'SmsQueueId':_0x382f4e['id']});});});});});});})[_0x6536('0x23')](respondWithStatusCode(_0x3bbe4e,null))[_0x6536('0x44')](handleError(_0x3bbe4e,null));};exports[_0x6536('0x82')]=function(_0x1cf277,_0x55ca87,_0x3d7734){return db[_0x6536('0x40')][_0x6536('0x4a')]({'where':{'id':_0x1cf277[_0x6536('0x46')]['id']}})['then'](handleEntityNotFound(_0x55ca87,null))[_0x6536('0x23')](function(_0x4dca44){if(_0x4dca44){return _0x4dca44[_0x6536('0x82')](_0x1cf277['body'][_0x6536('0x7f')],_[_0x6536('0x83')](_0x1cf277['body'],[_0x6536('0x7f'),'id'])||{})[_0x6536('0x84')](function(_0x1a0f4e){for(var _0x5421ff=0x0;_0x5421ff<_0x1cf277[_0x6536('0x4c')][_0x6536('0x7f')][_0x6536('0x34')];_0x5421ff+=0x1){socket[_0x6536('0x81')](_0x6536('0x6c'),{'UserId':_0x1cf277[_0x6536('0x4c')][_0x6536('0x7f')][_0x5421ff],'SmsQueueId':_0x1cf277[_0x6536('0x46')]['id']});}return _0x1a0f4e;});}})[_0x6536('0x23')](respondWithResult(_0x55ca87,null))[_0x6536('0x44')](handleError(_0x55ca87,null));};exports['removeAgents']=function(_0x2fc3d8,_0x17d6b3,_0x559f2d){return db[_0x6536('0x40')][_0x6536('0x4a')]({'where':{'id':_0x2fc3d8[_0x6536('0x46')]['id']}})['then'](handleEntityNotFound(_0x17d6b3,null))[_0x6536('0x23')](function(_0x5c6924){if(_0x5c6924){return _0x5c6924[_0x6536('0x80')](_0x2fc3d8[_0x6536('0x2f')]['ids'])[_0x6536('0x23')](function(){if(_[_0x6536('0x85')](_0x2fc3d8['query'][_0x6536('0x7f')])){for(var _0x53b189=0x0;_0x53b189<_0x2fc3d8['query'][_0x6536('0x7f')][_0x6536('0x34')];_0x53b189+=0x1){socket['emit'](_0x6536('0x86'),{'UserId':Number(_0x2fc3d8[_0x6536('0x2f')][_0x6536('0x7f')][_0x53b189]),'SmsQueueId':Number(_0x2fc3d8['params']['id'])});}}else{socket[_0x6536('0x81')](_0x6536('0x86'),{'UserId':Number(_0x2fc3d8[_0x6536('0x2f')][_0x6536('0x7f')]),'SmsQueueId':Number(_0x2fc3d8[_0x6536('0x46')]['id'])});}});}})[_0x6536('0x23')](respondWithStatusCode(_0x17d6b3,null))[_0x6536('0x44')](handleError(_0x17d6b3,null));};exports['getAgents']=function(_0x28a8eb,_0x94e00c,_0x584539){var _0x1b25bc={};var _0x1c03b2={};var _0x17bb37;var _0x71f10;return db[_0x6536('0x40')][_0x6536('0x54')]({'where':{'id':_0x28a8eb[_0x6536('0x46')]['id']}})[_0x6536('0x23')](handleEntityNotFound(_0x94e00c,null))[_0x6536('0x23')](function(_0x4fdf76){if(_0x4fdf76){_0x17bb37=_0x4fdf76;_0x1c03b2[_0x6536('0x2d')]=_[_0x6536('0x2e')](db[_0x6536('0x58')][_0x6536('0x47')]);_0x1c03b2[_0x6536('0x2f')]=_[_0x6536('0x2e')](_0x28a8eb['query']);_0x1c03b2[_0x6536('0x30')]=_[_0x6536('0x31')](_0x1c03b2[_0x6536('0x2d')],_0x1c03b2[_0x6536('0x2f')]);_0x1b25bc[_0x6536('0x32')]=_[_0x6536('0x31')](_0x1c03b2[_0x6536('0x2d')],qs[_0x6536('0x33')](_0x28a8eb[_0x6536('0x2f')]['fields']));_0x1b25bc[_0x6536('0x32')]=_0x1b25bc[_0x6536('0x32')][_0x6536('0x34')]?_0x1b25bc['attributes']:_0x1c03b2[_0x6536('0x2d')];_0x1b25bc[_0x6536('0x87')]=qs[_0x6536('0x36')](_0x28a8eb[_0x6536('0x2f')][_0x6536('0x36')]);_0x1b25bc[_0x6536('0x37')]=qs[_0x6536('0x30')](_[_0x6536('0x38')](_0x28a8eb['query'],_0x1c03b2['filters']));if(_0x28a8eb[_0x6536('0x2f')][_0x6536('0x39')]){_0x1b25bc['where']=_[_0x6536('0x3a')](_0x1b25bc[_0x6536('0x37')],{'$or':_[_0x6536('0x3b')](_0x1b25bc['attributes'],function(_0x56fa1f){var _0x3a3549={};_0x3a3549[_0x56fa1f]={'$like':'%'+_0x28a8eb['query'][_0x6536('0x39')]+'%'};return _0x3a3549;})});}_0x1b25bc=_[_0x6536('0x3a')]({},_0x1b25bc,_0x28a8eb['options']);return _0x17bb37[_0x6536('0x88')](_0x1b25bc);}})[_0x6536('0x23')](function(_0x3651fa){if(_0x3651fa){_0x71f10=_0x3651fa[_0x6536('0x34')];if(!_0x28a8eb['query'][_0x6536('0x35')](_0x6536('0x55'))){_0x1b25bc['limit']=qs[_0x6536('0x1e')](_0x28a8eb[_0x6536('0x2f')]['limit']);_0x1b25bc[_0x6536('0x1d')]=qs[_0x6536('0x1d')](_0x28a8eb[_0x6536('0x2f')][_0x6536('0x1d')]);}return _0x17bb37[_0x6536('0x88')](_0x1b25bc);}})[_0x6536('0x23')](function(_0x46b12c){if(_0x46b12c){return _0x46b12c?{'count':_0x71f10,'rows':_0x46b12c}:null;}})['then'](respondWithResult(_0x94e00c,null))['catch'](handleError(_0x94e00c,null));};
\ No newline at end of file
index b925968..966b15e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc281=['../../mysqldb','save','emit','hasOwnProperty','hook','exports'];(function(_0xe66cf2,_0x32ba5f){var _0x2d84e7=function(_0x58a7d8){while(--_0x58a7d8){_0xe66cf2['push'](_0xe66cf2['shift']());}};_0x2d84e7(++_0x32ba5f);}(_0xc281,0x10e));var _0x1c28=function(_0x19fc64,_0x3cc450){_0x19fc64=_0x19fc64-0x0;var _0x5b2a74=_0xc281[_0x19fc64];return _0x5b2a74;};'use strict';var EventEmitter=require('events');var SmsQueue=require(_0x1c28('0x0'))['db']['SmsQueue'];var SmsQueueEvents=new EventEmitter();SmsQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x1c28('0x1'),'afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x563e71){return function(_0x30ca52,_0x5145d1,_0x3c5c21){SmsQueueEvents[_0x1c28('0x2')](_0x563e71+':'+_0x30ca52['id'],_0x30ca52);SmsQueueEvents[_0x1c28('0x2')](_0x563e71,_0x30ca52);_0x3c5c21(null);};}for(var e in events){if(events[_0x1c28('0x3')](e)){var event=events[e];SmsQueue[_0x1c28('0x4')](e,emitEvent(event));}}module[_0x1c28('0x5')]=SmsQueueEvents;
\ No newline at end of file
+var _0x1793=['update','emit','hook','exports','../../mysqldb','SmsQueue','setMaxListeners'];(function(_0x465a0c,_0x19d4d5){var _0x1e202e=function(_0x27bd8a){while(--_0x27bd8a){_0x465a0c['push'](_0x465a0c['shift']());}};_0x1e202e(++_0x19d4d5);}(_0x1793,0x7b));var _0x3179=function(_0x21f035,_0xee30e){_0x21f035=_0x21f035-0x0;var _0x55de4d=_0x1793[_0x21f035];return _0x55de4d;};'use strict';var EventEmitter=require('events');var SmsQueue=require(_0x3179('0x0'))['db'][_0x3179('0x1')];var SmsQueueEvents=new EventEmitter();SmsQueueEvents[_0x3179('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0x3179('0x3'),'afterDestroy':'remove'};function emitEvent(_0x20b7e0){return function(_0x434d5a,_0x258b78,_0x22c3bf){SmsQueueEvents[_0x3179('0x4')](_0x20b7e0+':'+_0x434d5a['id'],_0x434d5a);SmsQueueEvents[_0x3179('0x4')](_0x20b7e0,_0x434d5a);_0x22c3bf(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SmsQueue[_0x3179('0x5')](e,emitEvent(event));}}module[_0x3179('0x6')]=SmsQueueEvents;
\ No newline at end of file
index 78d8677..fde068e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f4d=['api','bluebird','request-promise','path','rimraf','../../config/environment','./smsQueue.attributes','exports','define','SmsQueue'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x0f4d,0x12c));var _0xd0f4=function(_0x5e6bd9,_0x5f0441){_0x5e6bd9=_0x5e6bd9-0x0;var _0x3fa13c=_0x0f4d[_0x5e6bd9];return _0x3fa13c;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')(_0xd0f4('0x0'));var moment=require('moment');var BPromise=require(_0xd0f4('0x1'));var rp=require(_0xd0f4('0x2'));var fs=require('fs');var path=require(_0xd0f4('0x3'));var rimraf=require(_0xd0f4('0x4'));var config=require(_0xd0f4('0x5'));var attributes=require(_0xd0f4('0x6'));module[_0xd0f4('0x7')]=function(_0x1d9a9d,_0x531f85){return _0x1d9a9d[_0xd0f4('0x8')](_0xd0f4('0x9'),attributes,{'tableName':'sms_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x33af=['request-promise','path','rimraf','./smsQueue.attributes','exports','define','SmsQueue','sms_queues','util','api','moment','bluebird'];(function(_0x5466ab,_0x227b13){var _0x40751a=function(_0x477f9e){while(--_0x477f9e){_0x5466ab['push'](_0x5466ab['shift']());}};_0x40751a(++_0x227b13);}(_0x33af,0xec));var _0xf33a=function(_0x56dc8c,_0x1b15ca){_0x56dc8c=_0x56dc8c-0x0;var _0x166838=_0x33af[_0x56dc8c];return _0x166838;};'use strict';var _=require('lodash');var util=require(_0xf33a('0x0'));var logger=require('../../config/logger')(_0xf33a('0x1'));var moment=require(_0xf33a('0x2'));var BPromise=require(_0xf33a('0x3'));var rp=require(_0xf33a('0x4'));var fs=require('fs');var path=require(_0xf33a('0x5'));var rimraf=require(_0xf33a('0x6'));var config=require('../../config/environment');var attributes=require(_0xf33a('0x7'));module[_0xf33a('0x8')]=function(_0x583e54,_0xc0dd13){return _0x583e54[_0xf33a('0x9')](_0xf33a('0xa'),attributes,{'tableName':_0xf33a('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 66b9ba6..cbf7aa6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd5d2=['GetSmsQueue','catch','ShowSmsQueue','find','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./smsQueue.socket','register','request','then','info','request\x20sent','debug','SmsQueue,\x20%s,\x20%s,\x20%s','stringify','error','SmsQueue,\x20%s,\x20%s','message','result','SmsQueue','options','raw','where','limit','map','model','include','attributes'];(function(_0x2d8fc2,_0x1c461d){var _0x3a9e53=function(_0x18941c){while(--_0x18941c){_0x2d8fc2['push'](_0x2d8fc2['shift']());}};_0x3a9e53(++_0x1c461d);}(_0xd5d2,0x154));var _0x2d5d=function(_0x51951b,_0x5d1a16){_0x51951b=_0x51951b-0x0;var _0x17dc1a=_0xd5d2[_0x51951b];return _0x17dc1a;};'use strict';var _=require('lodash');var util=require(_0x2d5d('0x0'));var moment=require(_0x2d5d('0x1'));var BPromise=require(_0x2d5d('0x2'));var rs=require(_0x2d5d('0x3'));var fs=require('fs');var Redis=require(_0x2d5d('0x4'));var db=require(_0x2d5d('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x2d5d('0x6'))(_0x2d5d('0x7'));var config=require(_0x2d5d('0x8'));var jayson=require(_0x2d5d('0x9'));var client=jayson[_0x2d5d('0xa')][_0x2d5d('0xb')]({'port':0x232a});config[_0x2d5d('0xc')]=_[_0x2d5d('0xd')](config['redis'],{'host':_0x2d5d('0xe'),'port':0x18eb});var socket=require(_0x2d5d('0xf'))(new Redis(config[_0x2d5d('0xc')]));require(_0x2d5d('0x10'))[_0x2d5d('0x11')](socket);function respondWithRpcPromise(_0x24a4c3,_0x3b78cf,_0x33c625){return new BPromise(function(_0x4dbe4c,_0x1048d7){return client[_0x2d5d('0x12')](_0x24a4c3,_0x33c625)[_0x2d5d('0x13')](function(_0x33985f){logger[_0x2d5d('0x14')]('SmsQueue,\x20%s,\x20%s',_0x3b78cf,_0x2d5d('0x15'));logger[_0x2d5d('0x16')](_0x2d5d('0x17'),_0x3b78cf,_0x2d5d('0x15'),JSON[_0x2d5d('0x18')](_0x33985f));if(_0x33985f[_0x2d5d('0x19')]){if(_0x33985f[_0x2d5d('0x19')]['code']===0x1f4){logger['error'](_0x2d5d('0x1a'),_0x3b78cf,_0x33985f[_0x2d5d('0x19')][_0x2d5d('0x1b')]);return _0x1048d7(_0x33985f[_0x2d5d('0x19')][_0x2d5d('0x1b')]);}logger[_0x2d5d('0x19')](_0x2d5d('0x1a'),_0x3b78cf,_0x33985f[_0x2d5d('0x19')]['message']);return _0x4dbe4c(_0x33985f['error'][_0x2d5d('0x1b')]);}else{logger[_0x2d5d('0x14')](_0x2d5d('0x1a'),_0x3b78cf,_0x2d5d('0x15'));_0x4dbe4c(_0x33985f[_0x2d5d('0x1c')][_0x2d5d('0x1b')]);}})['catch'](function(_0x2ef4d2){logger[_0x2d5d('0x19')](_0x2d5d('0x1a'),_0x3b78cf,_0x2ef4d2);_0x1048d7(_0x2ef4d2);});});}exports['GetSmsQueue']=function(_0x15bc09){var _0x4f4c85=this;return new Promise(function(_0x1d3f88,_0xe25b84){return db[_0x2d5d('0x1d')]['findAll']({'raw':_0x15bc09[_0x2d5d('0x1e')]?_0x15bc09[_0x2d5d('0x1e')][_0x2d5d('0x1f')]===undefined?!![]:![]:!![],'where':_0x15bc09['options']?_0x15bc09[_0x2d5d('0x1e')][_0x2d5d('0x20')]||null:null,'attributes':_0x15bc09[_0x2d5d('0x1e')]?_0x15bc09['options']['attributes']||null:null,'limit':_0x15bc09[_0x2d5d('0x1e')]?_0x15bc09[_0x2d5d('0x1e')][_0x2d5d('0x21')]||null:null,'include':_0x15bc09[_0x2d5d('0x1e')]?_0x15bc09[_0x2d5d('0x1e')]['include']?_[_0x2d5d('0x22')](_0x15bc09[_0x2d5d('0x1e')]['include'],function(_0x2924dd){return{'model':db[_0x2924dd[_0x2d5d('0x23')]],'as':_0x2924dd['as'],'attributes':_0x2924dd['attributes'],'include':_0x2924dd[_0x2d5d('0x24')]?_['map'](_0x2924dd[_0x2d5d('0x24')],function(_0x20c261){return{'model':db[_0x20c261[_0x2d5d('0x23')]],'as':_0x20c261['as'],'attributes':_0x20c261[_0x2d5d('0x25')],'include':_0x20c261[_0x2d5d('0x24')]?_['map'](_0x20c261[_0x2d5d('0x24')],function(_0x43d962){return{'model':db[_0x43d962['model']],'as':_0x43d962['as'],'attributes':_0x43d962[_0x2d5d('0x25')]};}):[]};}):[]};}):[]:[]})[_0x2d5d('0x13')](function(_0x1e19a5){logger[_0x2d5d('0x14')](_0x2d5d('0x26'),_0x15bc09);logger['debug'](_0x2d5d('0x26'),_0x15bc09,JSON[_0x2d5d('0x18')](_0x1e19a5));_0x1d3f88(_0x1e19a5);})[_0x2d5d('0x27')](function(_0x18b270){logger[_0x2d5d('0x19')]('GetSmsQueue',_0x18b270[_0x2d5d('0x1b')],_0x15bc09);_0xe25b84(_0x4f4c85['error'](0x1f4,_0x18b270[_0x2d5d('0x1b')]));});});};exports[_0x2d5d('0x28')]=function(_0x54aa20){var _0x108127=this;return new Promise(function(_0x217170,_0x1c10ca){return db[_0x2d5d('0x1d')][_0x2d5d('0x29')]({'raw':_0x54aa20['options']?_0x54aa20[_0x2d5d('0x1e')]['raw']===undefined?!![]:![]:!![],'where':_0x54aa20[_0x2d5d('0x1e')]?_0x54aa20[_0x2d5d('0x1e')][_0x2d5d('0x20')]||null:null,'attributes':_0x54aa20[_0x2d5d('0x1e')]?_0x54aa20[_0x2d5d('0x1e')][_0x2d5d('0x25')]||null:null,'include':_0x54aa20[_0x2d5d('0x1e')]?_0x54aa20['options'][_0x2d5d('0x24')]?_[_0x2d5d('0x22')](_0x54aa20[_0x2d5d('0x1e')]['include'],function(_0x30d049){return{'model':db[_0x30d049[_0x2d5d('0x23')]],'as':_0x30d049['as'],'attributes':_0x30d049['attributes'],'include':_0x30d049[_0x2d5d('0x24')]?_[_0x2d5d('0x22')](_0x30d049[_0x2d5d('0x24')],function(_0xe25797){return{'model':db[_0xe25797['model']],'as':_0xe25797['as'],'attributes':_0xe25797[_0x2d5d('0x25')],'include':_0xe25797['include']?_[_0x2d5d('0x22')](_0xe25797[_0x2d5d('0x24')],function(_0x27f3ac){return{'model':db[_0x27f3ac[_0x2d5d('0x23')]],'as':_0x27f3ac['as'],'attributes':_0x27f3ac[_0x2d5d('0x25')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x2182ff){logger[_0x2d5d('0x14')](_0x2d5d('0x28'),_0x54aa20);logger[_0x2d5d('0x16')](_0x2d5d('0x28'),_0x54aa20,JSON[_0x2d5d('0x18')](_0x2182ff));_0x217170(_0x2182ff);})[_0x2d5d('0x27')](function(_0x4ea372){logger[_0x2d5d('0x19')](_0x2d5d('0x28'),_0x4ea372[_0x2d5d('0x1b')],_0x54aa20);_0x1c10ca(_0x108127[_0x2d5d('0x19')](0x1f4,_0x4ea372[_0x2d5d('0x1b')]));});});};
\ No newline at end of file
+var _0x1f28=['where','limit','include','model','attributes','map','ShowSmsQueue','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','redis','defaults','socket.io-emitter','./smsQueue.socket','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'];(function(_0x487b0c,_0x14ff74){var _0x1adbdc=function(_0x2e7b9d){while(--_0x2e7b9d){_0x487b0c['push'](_0x487b0c['shift']());}};_0x1adbdc(++_0x14ff74);}(_0x1f28,0x1db));var _0x81f2=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x1f28[_0x42cae2];return _0x5f256f;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x81f2('0x0'));var BPromise=require(_0x81f2('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x81f2('0x2'));var db=require(_0x81f2('0x3'))['db'];var utils=require(_0x81f2('0x4'));var logger=require(_0x81f2('0x5'))(_0x81f2('0x6'));var config=require('../../config/environment');var jayson=require(_0x81f2('0x7'));var client=jayson[_0x81f2('0x8')][_0x81f2('0x9')]({'port':0x232a});config[_0x81f2('0xa')]=_[_0x81f2('0xb')](config[_0x81f2('0xa')],{'host':'localhost','port':0x18eb});var socket=require(_0x81f2('0xc'))(new Redis(config['redis']));require(_0x81f2('0xd'))['register'](socket);function respondWithRpcPromise(_0x3cb77e,_0x45274e,_0x2e0730){return new BPromise(function(_0x14647e,_0x243584){return client[_0x81f2('0xe')](_0x3cb77e,_0x2e0730)[_0x81f2('0xf')](function(_0x2abf78){logger[_0x81f2('0x10')](_0x81f2('0x11'),_0x45274e,_0x81f2('0x12'));logger[_0x81f2('0x13')](_0x81f2('0x14'),_0x45274e,_0x81f2('0x12'),JSON[_0x81f2('0x15')](_0x2abf78));if(_0x2abf78[_0x81f2('0x16')]){if(_0x2abf78[_0x81f2('0x16')][_0x81f2('0x17')]===0x1f4){logger[_0x81f2('0x16')](_0x81f2('0x11'),_0x45274e,_0x2abf78[_0x81f2('0x16')]['message']);return _0x243584(_0x2abf78[_0x81f2('0x16')][_0x81f2('0x18')]);}logger[_0x81f2('0x16')](_0x81f2('0x11'),_0x45274e,_0x2abf78[_0x81f2('0x16')][_0x81f2('0x18')]);return _0x14647e(_0x2abf78['error'][_0x81f2('0x18')]);}else{logger[_0x81f2('0x10')](_0x81f2('0x11'),_0x45274e,'request\x20sent');_0x14647e(_0x2abf78[_0x81f2('0x19')][_0x81f2('0x18')]);}})[_0x81f2('0x1a')](function(_0x5d8262){logger['error'](_0x81f2('0x11'),_0x45274e,_0x5d8262);_0x243584(_0x5d8262);});});}exports[_0x81f2('0x1b')]=function(_0xa9f20c){var _0x5e682d=this;return new Promise(function(_0x24001f,_0xfd1baf){return db[_0x81f2('0x1c')][_0x81f2('0x1d')]({'raw':_0xa9f20c[_0x81f2('0x1e')]?_0xa9f20c['options'][_0x81f2('0x1f')]===undefined?!![]:![]:!![],'where':_0xa9f20c[_0x81f2('0x1e')]?_0xa9f20c[_0x81f2('0x1e')][_0x81f2('0x20')]||null:null,'attributes':_0xa9f20c[_0x81f2('0x1e')]?_0xa9f20c[_0x81f2('0x1e')]['attributes']||null:null,'limit':_0xa9f20c[_0x81f2('0x1e')]?_0xa9f20c['options'][_0x81f2('0x21')]||null:null,'include':_0xa9f20c['options']?_0xa9f20c[_0x81f2('0x1e')][_0x81f2('0x22')]?_['map'](_0xa9f20c['options'][_0x81f2('0x22')],function(_0x31a5cc){return{'model':db[_0x31a5cc[_0x81f2('0x23')]],'as':_0x31a5cc['as'],'attributes':_0x31a5cc[_0x81f2('0x24')],'include':_0x31a5cc['include']?_[_0x81f2('0x25')](_0x31a5cc[_0x81f2('0x22')],function(_0x192450){return{'model':db[_0x192450[_0x81f2('0x23')]],'as':_0x192450['as'],'attributes':_0x192450[_0x81f2('0x24')],'include':_0x192450[_0x81f2('0x22')]?_['map'](_0x192450['include'],function(_0xa7ace4){return{'model':db[_0xa7ace4[_0x81f2('0x23')]],'as':_0xa7ace4['as'],'attributes':_0xa7ace4[_0x81f2('0x24')]};}):[]};}):[]};}):[]:[]})[_0x81f2('0xf')](function(_0x3db24b){logger[_0x81f2('0x10')](_0x81f2('0x1b'),_0xa9f20c);logger['debug']('GetSmsQueue',_0xa9f20c,JSON['stringify'](_0x3db24b));_0x24001f(_0x3db24b);})[_0x81f2('0x1a')](function(_0x1b676f){logger[_0x81f2('0x16')]('GetSmsQueue',_0x1b676f[_0x81f2('0x18')],_0xa9f20c);_0xfd1baf(_0x5e682d[_0x81f2('0x16')](0x1f4,_0x1b676f[_0x81f2('0x18')]));});});};exports['ShowSmsQueue']=function(_0x401150){var _0x1dd2a8=this;return new Promise(function(_0x4c7803,_0x1e9bd6){return db[_0x81f2('0x1c')]['find']({'raw':_0x401150[_0x81f2('0x1e')]?_0x401150[_0x81f2('0x1e')]['raw']===undefined?!![]:![]:!![],'where':_0x401150[_0x81f2('0x1e')]?_0x401150['options'][_0x81f2('0x20')]||null:null,'attributes':_0x401150[_0x81f2('0x1e')]?_0x401150[_0x81f2('0x1e')]['attributes']||null:null,'include':_0x401150[_0x81f2('0x1e')]?_0x401150[_0x81f2('0x1e')][_0x81f2('0x22')]?_[_0x81f2('0x25')](_0x401150[_0x81f2('0x1e')][_0x81f2('0x22')],function(_0x1a90ab){return{'model':db[_0x1a90ab[_0x81f2('0x23')]],'as':_0x1a90ab['as'],'attributes':_0x1a90ab[_0x81f2('0x24')],'include':_0x1a90ab['include']?_[_0x81f2('0x25')](_0x1a90ab[_0x81f2('0x22')],function(_0x1b701a){return{'model':db[_0x1b701a['model']],'as':_0x1b701a['as'],'attributes':_0x1b701a[_0x81f2('0x24')],'include':_0x1b701a[_0x81f2('0x22')]?_[_0x81f2('0x25')](_0x1b701a[_0x81f2('0x22')],function(_0x399d18){return{'model':db[_0x399d18[_0x81f2('0x23')]],'as':_0x399d18['as'],'attributes':_0x399d18['attributes']};}):[]};}):[]};}):[]:[]})[_0x81f2('0xf')](function(_0x4a81a6){logger['info'](_0x81f2('0x26'),_0x401150);logger[_0x81f2('0x13')]('ShowSmsQueue',_0x401150,JSON['stringify'](_0x4a81a6));_0x4c7803(_0x4a81a6);})['catch'](function(_0xc08b2a){logger[_0x81f2('0x16')]('ShowSmsQueue',_0xc08b2a[_0x81f2('0x18')],_0x401150);_0x1e9bd6(_0x1dd2a8[_0x81f2('0x16')](0x1f4,_0xc08b2a['message']));});});};
\ No newline at end of file
index 1368976..0583816 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf4e=['smsQueue:','./smsQueue.events','save','remove','update','emit','removeListener','register','length'];(function(_0x3b5049,_0x495a94){var _0x12454e=function(_0x3988d3){while(--_0x3988d3){_0x3b5049['push'](_0x3b5049['shift']());}};_0x12454e(++_0x495a94);}(_0xbf4e,0x172));var _0xebf4=function(_0x11ffde,_0x209f43){_0x11ffde=_0x11ffde-0x0;var _0x549c2b=_0xbf4e[_0x11ffde];return _0x549c2b;};'use strict';var SmsQueueEvents=require(_0xebf4('0x0'));var events=[_0xebf4('0x1'),_0xebf4('0x2'),_0xebf4('0x3')];function createListener(_0x3a521c,_0xf442ec){return function(_0x48dfb5){_0xf442ec[_0xebf4('0x4')](_0x3a521c,_0x48dfb5);};}function removeListener(_0x5d2ad5,_0x59cc54){return function(){SmsQueueEvents[_0xebf4('0x5')](_0x5d2ad5,_0x59cc54);};}exports[_0xebf4('0x6')]=function(_0x5adea8){for(var _0x412bbe=0x0,_0x995254=events[_0xebf4('0x7')];_0x412bbe<_0x995254;_0x412bbe++){var _0x48764f=events[_0x412bbe];var _0x2f17c0=createListener(_0xebf4('0x8')+_0x48764f,_0x5adea8);SmsQueueEvents['on'](_0x48764f,_0x2f17c0);}};
\ No newline at end of file
+var _0x43a2=['update','emit','removeListener','smsQueue:','save','remove'];(function(_0x324dba,_0x5664b9){var _0x14533c=function(_0x55973f){while(--_0x55973f){_0x324dba['push'](_0x324dba['shift']());}};_0x14533c(++_0x5664b9);}(_0x43a2,0xd0));var _0x243a=function(_0x40a56c,_0x3868d2){_0x40a56c=_0x40a56c-0x0;var _0x246ef9=_0x43a2[_0x40a56c];return _0x246ef9;};'use strict';var SmsQueueEvents=require('./smsQueue.events');var events=[_0x243a('0x0'),_0x243a('0x1'),_0x243a('0x2')];function createListener(_0x559c6f,_0x3e38fb){return function(_0x48fe2f){_0x3e38fb[_0x243a('0x3')](_0x559c6f,_0x48fe2f);};}function removeListener(_0x29fb13,_0x3da3b5){return function(){SmsQueueEvents[_0x243a('0x4')](_0x29fb13,_0x3da3b5);};}exports['register']=function(_0x1e0a5f){for(var _0x52de38=0x0,_0x5c9192=events['length'];_0x52de38<_0x5c9192;_0x52de38++){var _0x491354=events[_0x52de38];var _0x59e0db=createListener(_0x243a('0x5')+_0x491354,_0x1e0a5f);SmsQueueEvents['on'](_0x491354,_0x59e0db);}};
\ No newline at end of file
index 31f7881..5263a5e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6dc0=['Router','../../components/auth/service','./smsQueueReport.controller','get','index','isAuthenticated','/:id','show','post','create','delete','destroy','multer','path','connect-timeout','express'];(function(_0xfc5e22,_0x4c9af2){var _0x1150d2=function(_0x10661d){while(--_0x10661d){_0xfc5e22['push'](_0xfc5e22['shift']());}};_0x1150d2(++_0x4c9af2);}(_0x6dc0,0x18c));var _0x06dc=function(_0x1b00d0,_0x265b67){_0x1b00d0=_0x1b00d0-0x0;var _0x31446c=_0x6dc0[_0x1b00d0];return _0x31446c;};'use strict';var multer=require(_0x06dc('0x0'));var util=require('util');var path=require(_0x06dc('0x1'));var timeout=require(_0x06dc('0x2'));var express=require(_0x06dc('0x3'));var router=express[_0x06dc('0x4')]();var auth=require(_0x06dc('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x06dc('0x6'));router[_0x06dc('0x7')]('/',auth['isAuthenticated'](),controller[_0x06dc('0x8')]);router[_0x06dc('0x7')]('/describe',auth[_0x06dc('0x9')](),controller['describe']);router[_0x06dc('0x7')](_0x06dc('0xa'),auth[_0x06dc('0x9')](),controller[_0x06dc('0xb')]);router[_0x06dc('0xc')]('/',auth['isAuthenticated'](),controller[_0x06dc('0xd')]);router['put'](_0x06dc('0xa'),auth[_0x06dc('0x9')](),controller['update']);router[_0x06dc('0xe')](_0x06dc('0xa'),auth[_0x06dc('0x9')](),controller[_0x06dc('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0x1b65=['util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsQueueReport.controller','get','isAuthenticated','/describe','describe','/:id','post','put','update','delete','destroy','multer'];(function(_0x4432bc,_0x50dc03){var _0x589770=function(_0xa5a137){while(--_0xa5a137){_0x4432bc['push'](_0x4432bc['shift']());}};_0x589770(++_0x50dc03);}(_0x1b65,0x1b4));var _0x51b6=function(_0x103c64,_0x148b2d){_0x103c64=_0x103c64-0x0;var _0x23607c=_0x1b65[_0x103c64];return _0x23607c;};'use strict';var multer=require(_0x51b6('0x0'));var util=require(_0x51b6('0x1'));var path=require(_0x51b6('0x2'));var timeout=require(_0x51b6('0x3'));var express=require('express');var router=express[_0x51b6('0x4')]();var auth=require(_0x51b6('0x5'));var interaction=require(_0x51b6('0x6'));var config=require(_0x51b6('0x7'));var controller=require(_0x51b6('0x8'));router[_0x51b6('0x9')]('/',auth[_0x51b6('0xa')](),controller['index']);router[_0x51b6('0x9')](_0x51b6('0xb'),auth[_0x51b6('0xa')](),controller[_0x51b6('0xc')]);router['get'](_0x51b6('0xd'),auth[_0x51b6('0xa')](),controller['show']);router[_0x51b6('0xe')]('/',auth['isAuthenticated'](),controller['create']);router[_0x51b6('0xf')](_0x51b6('0xd'),auth[_0x51b6('0xa')](),controller[_0x51b6('0x10')]);router[_0x51b6('0x11')]('/:id',auth['isAuthenticated'](),controller[_0x51b6('0x12')]);module['exports']=router;
\ No newline at end of file
index 3f9b05c..a3bac71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2341=['sequelize','STRING','DATE','moment'];(function(_0x254c0f,_0x5f438e){var _0x33a5b1=function(_0x190535){while(--_0x190535){_0x254c0f['push'](_0x254c0f['shift']());}};_0x33a5b1(++_0x5f438e);}(_0x2341,0x1a3));var _0x1234=function(_0x4a307c,_0x3f7549){_0x4a307c=_0x4a307c-0x0;var _0x2db72d=_0x2341[_0x4a307c];return _0x2db72d;};'use strict';var moment=require(_0x1234('0x0'));var Sequelize=require(_0x1234('0x1'));module['exports']={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'from':{'type':Sequelize[_0x1234('0x2')]},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize[_0x1234('0x3')]},'acceptAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize[_0x1234('0x2')]}};
\ No newline at end of file
+var _0x6f7b=['moment','sequelize','STRING','DATE'];(function(_0x51ad38,_0x45e9f7){var _0x21f60c=function(_0x3db600){while(--_0x3db600){_0x51ad38['push'](_0x51ad38['shift']());}};_0x21f60c(++_0x45e9f7);}(_0x6f7b,0x68));var _0xb6f7=function(_0x421fdc,_0x3b0689){_0x421fdc=_0x421fdc-0x0;var _0x2c1e53=_0x6f7b[_0x421fdc];return _0x2c1e53;};'use strict';var moment=require(_0xb6f7('0x0'));var Sequelize=require(_0xb6f7('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0xb6f7('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0xb6f7('0x2')]},'joinAt':{'type':Sequelize[_0xb6f7('0x3')]},'leaveAt':{'type':Sequelize[_0xb6f7('0x3')]},'acceptAt':{'type':Sequelize[_0xb6f7('0x3')]},'exitAt':{'type':Sequelize[_0xb6f7('0x3')]},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 8d422b0..0c6e655 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf60=['rows','catch','show','params','rawAttributes','create','body','find','describe','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','json','reject','save','update','then','error','stack','name','send','index','SmsQueueReport','query','keys','filters','model','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','pick','where','merge','map','key','VIRTUAL','field','filter','options','includeAll','include','findAll'];(function(_0x20ef42,_0x511459){var _0x509694=function(_0x13dc92){while(--_0x13dc92){_0x20ef42['push'](_0x20ef42['shift']());}};_0x509694(++_0x511459);}(_0xbf60,0x17b));var _0x0bf6=function(_0x421e36,_0x18776e){_0x421e36=_0x421e36-0x0;var _0x20b3e3=_0xbf60[_0x421e36];return _0x20b3e3;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0bf6('0x0'));var rimraf=require(_0x0bf6('0x1'));var zipdir=require(_0x0bf6('0x2'));var jsonpatch=require(_0x0bf6('0x3'));var rp=require(_0x0bf6('0x4'));var moment=require('moment');var BPromise=require(_0x0bf6('0x5'));var Mustache=require(_0x0bf6('0x6'));var util=require('util');var path=require('path');var sox=require(_0x0bf6('0x7'));var csv=require(_0x0bf6('0x8'));var ejs=require(_0x0bf6('0x9'));var fs=require('fs');var _=require(_0x0bf6('0xa'));var squel=require(_0x0bf6('0xb'));var crypto=require('crypto');var jsforce=require(_0x0bf6('0xc'));var deskjs=require(_0x0bf6('0xd'));var toCsv=require(_0x0bf6('0x8'));var querystring=require(_0x0bf6('0xe'));var Papa=require('papaparse');var Redis=require(_0x0bf6('0xf'));var authService=require(_0x0bf6('0x10'));var qs=require(_0x0bf6('0x11'));var hardwareService=require(_0x0bf6('0x12'));var logger=require(_0x0bf6('0x13'))(_0x0bf6('0x14'));var utils=require('../../config/utils');var config=require(_0x0bf6('0x15'));var db=require(_0x0bf6('0x16'))['db'];function respondWithStatusCode(_0x4b63de,_0x37ded0){_0x37ded0=_0x37ded0||0xcc;return function(_0x5b446e){if(_0x5b446e){return _0x4b63de[_0x0bf6('0x17')](_0x37ded0);}return _0x4b63de[_0x0bf6('0x18')](_0x37ded0)[_0x0bf6('0x19')]();};}function respondWithResult(_0x4c9216,_0x1847ee){_0x1847ee=_0x1847ee||0xc8;return function(_0x483022){if(_0x483022){return _0x4c9216[_0x0bf6('0x18')](_0x1847ee)['json'](_0x483022);}};}function respondWithFilteredResult(_0x21141d,_0x236127){return function(_0x3044b2){if(_0x3044b2){var _0x3752eb=_0x3044b2[_0x0bf6('0x1a')],_0x2584fe=_0x236127[_0x0bf6('0x1b')],_0x5051c9=_0x236127[_0x0bf6('0x1b')]+_0x236127[_0x0bf6('0x1c')],_0x3dca38;if(_0x5051c9>=_0x3752eb){_0x5051c9=_0x3752eb;_0x3dca38=0xc8;}else{_0x3dca38=0xce;}_0x21141d[_0x0bf6('0x18')](_0x3dca38);return _0x21141d[_0x0bf6('0x1d')]('Content-Range',_0x2584fe+'-'+_0x5051c9+'/'+_0x3752eb)[_0x0bf6('0x1e')](_0x3044b2);}return null;};}function patchUpdates(_0x13d23e){return function(_0x2c7548){try{jsonpatch['apply'](_0x2c7548,_0x13d23e,!![]);}catch(_0x315b0e){return BPromise[_0x0bf6('0x1f')](_0x315b0e);}return _0x2c7548[_0x0bf6('0x20')]();};}function saveUpdates(_0x486258,_0x537565){return function(_0x2b526c){if(_0x2b526c){return _0x2b526c[_0x0bf6('0x21')](_0x486258)[_0x0bf6('0x22')](function(_0xebfe54){return _0xebfe54;});}return null;};}function removeEntity(_0x18d637,_0x889edb){return function(_0x2946d3){if(_0x2946d3){return _0x2946d3['destroy']()[_0x0bf6('0x22')](function(){_0x18d637[_0x0bf6('0x18')](0xcc)[_0x0bf6('0x19')]();});}};}function handleEntityNotFound(_0x411f83,_0x407640){return function(_0x5c29f0){if(!_0x5c29f0){_0x411f83[_0x0bf6('0x17')](0x194);}return _0x5c29f0;};}function handleError(_0xd10a85,_0x1fca76){_0x1fca76=_0x1fca76||0x1f4;return function(_0x5c9d45){logger[_0x0bf6('0x23')](_0x5c9d45[_0x0bf6('0x24')]);if(_0x5c9d45[_0x0bf6('0x25')]){delete _0x5c9d45[_0x0bf6('0x25')];}_0xd10a85[_0x0bf6('0x18')](_0x1fca76)[_0x0bf6('0x26')](_0x5c9d45);};}exports[_0x0bf6('0x27')]=function(_0x3b632e,_0x435105){var _0x213851={},_0x23a25c={},_0x4ec666={'count':0x0,'rows':[]};var _0x753b1d=db[_0x0bf6('0x28')]['rawAttributes'];_0x23a25c['model']=_['keys'](_0x753b1d);_0x23a25c[_0x0bf6('0x29')]=_[_0x0bf6('0x2a')](_0x3b632e[_0x0bf6('0x29')]);_0x23a25c[_0x0bf6('0x2b')]=_['intersection'](_0x23a25c[_0x0bf6('0x2c')],_0x23a25c[_0x0bf6('0x29')]);_0x213851[_0x0bf6('0x2d')]=_[_0x0bf6('0x2e')](_0x23a25c[_0x0bf6('0x2c')],qs['fields'](_0x3b632e[_0x0bf6('0x29')][_0x0bf6('0x2f')]));_0x213851[_0x0bf6('0x2d')]=_0x213851[_0x0bf6('0x2d')][_0x0bf6('0x30')]?_0x213851[_0x0bf6('0x2d')]:_0x23a25c['model'];if(!_0x3b632e[_0x0bf6('0x29')][_0x0bf6('0x31')](_0x0bf6('0x32'))){_0x213851[_0x0bf6('0x1c')]=qs[_0x0bf6('0x1c')](_0x3b632e['query'][_0x0bf6('0x1c')]);_0x213851[_0x0bf6('0x1b')]=qs[_0x0bf6('0x1b')](_0x3b632e[_0x0bf6('0x29')][_0x0bf6('0x1b')]);}_0x213851[_0x0bf6('0x33')]=qs[_0x0bf6('0x34')](_0x3b632e[_0x0bf6('0x29')][_0x0bf6('0x34')]);_0x213851['where']=qs[_0x0bf6('0x2b')](_[_0x0bf6('0x35')](_0x3b632e[_0x0bf6('0x29')],_0x23a25c[_0x0bf6('0x2b')]));if(_0x3b632e[_0x0bf6('0x29')]['filter']){_0x213851[_0x0bf6('0x36')]=_[_0x0bf6('0x37')](_0x213851[_0x0bf6('0x36')],{'$or':_[_0x0bf6('0x38')](_0x753b1d,function(_0x1c6b2d){if(_0x1c6b2d['type'][_0x0bf6('0x39')]!==_0x0bf6('0x3a')){var _0x1dcb75={};_0x1dcb75[_0x1c6b2d[_0x0bf6('0x3b')]]={'$like':'%'+_0x3b632e[_0x0bf6('0x29')][_0x0bf6('0x3c')]+'%'};return _0x1dcb75;}})});}_0x213851=_['merge']({},_0x213851,_0x3b632e[_0x0bf6('0x3d')]);var _0x2b3c9c={'where':_0x213851[_0x0bf6('0x36')]};return db[_0x0bf6('0x28')]['count'](_0x2b3c9c)[_0x0bf6('0x22')](function(_0x4be357){_0x4ec666[_0x0bf6('0x1a')]=_0x4be357;if(_0x3b632e[_0x0bf6('0x29')][_0x0bf6('0x3e')]){_0x213851[_0x0bf6('0x3f')]=[{'all':!![]}];}return db[_0x0bf6('0x28')][_0x0bf6('0x40')](_0x213851);})[_0x0bf6('0x22')](function(_0x121f4d){_0x4ec666[_0x0bf6('0x41')]=_0x121f4d;return _0x4ec666;})[_0x0bf6('0x22')](respondWithFilteredResult(_0x435105,_0x213851))[_0x0bf6('0x42')](handleError(_0x435105,null));};exports[_0x0bf6('0x43')]=function(_0x43f53e,_0x1fa9b4){var _0x1e215f={'raw':!![],'where':{'id':_0x43f53e[_0x0bf6('0x44')]['id']}},_0x4dfd6d={};_0x4dfd6d[_0x0bf6('0x2c')]=_[_0x0bf6('0x2a')](db[_0x0bf6('0x28')][_0x0bf6('0x45')]);_0x4dfd6d[_0x0bf6('0x29')]=_['keys'](_0x43f53e[_0x0bf6('0x29')]);_0x4dfd6d[_0x0bf6('0x2b')]=_['intersection'](_0x4dfd6d['model'],_0x4dfd6d[_0x0bf6('0x29')]);_0x1e215f[_0x0bf6('0x2d')]=_[_0x0bf6('0x2e')](_0x4dfd6d['model'],qs[_0x0bf6('0x2f')](_0x43f53e[_0x0bf6('0x29')][_0x0bf6('0x2f')]));_0x1e215f[_0x0bf6('0x2d')]=_0x1e215f[_0x0bf6('0x2d')][_0x0bf6('0x30')]?_0x1e215f[_0x0bf6('0x2d')]:_0x4dfd6d[_0x0bf6('0x2c')];if(_0x43f53e[_0x0bf6('0x29')][_0x0bf6('0x3e')]){_0x1e215f[_0x0bf6('0x3f')]=[{'all':!![]}];}_0x1e215f=_['merge']({},_0x1e215f,_0x43f53e[_0x0bf6('0x3d')]);return db[_0x0bf6('0x28')]['find'](_0x1e215f)['then'](handleEntityNotFound(_0x1fa9b4,null))[_0x0bf6('0x22')](respondWithResult(_0x1fa9b4,null))[_0x0bf6('0x42')](handleError(_0x1fa9b4,null));};exports[_0x0bf6('0x46')]=function(_0x3b7609,_0x3756c2){return db['SmsQueueReport'][_0x0bf6('0x46')](_0x3b7609[_0x0bf6('0x47')],{})[_0x0bf6('0x22')](respondWithResult(_0x3756c2,0xc9))[_0x0bf6('0x42')](handleError(_0x3756c2,null));};exports[_0x0bf6('0x21')]=function(_0x127672,_0x5a38c2){if(_0x127672[_0x0bf6('0x47')]['id']){delete _0x127672[_0x0bf6('0x47')]['id'];}return db[_0x0bf6('0x28')][_0x0bf6('0x48')]({'where':{'id':_0x127672['params']['id']}})['then'](handleEntityNotFound(_0x5a38c2,null))[_0x0bf6('0x22')](saveUpdates(_0x127672[_0x0bf6('0x47')],null))['then'](respondWithResult(_0x5a38c2,null))['catch'](handleError(_0x5a38c2,null));};exports['destroy']=function(_0x4cc9fe,_0x399c9c){return db[_0x0bf6('0x28')][_0x0bf6('0x48')]({'where':{'id':_0x4cc9fe['params']['id']}})[_0x0bf6('0x22')](handleEntityNotFound(_0x399c9c,null))[_0x0bf6('0x22')](removeEntity(_0x399c9c,null))['catch'](handleError(_0x399c9c,null));};exports[_0x0bf6('0x49')]=function(_0x5a5b2a,_0x21a5e3){return db['SmsQueueReport'][_0x0bf6('0x49')]()[_0x0bf6('0x22')](respondWithResult(_0x21a5e3,null))[_0x0bf6('0x42')](handleError(_0x21a5e3,null));};
\ No newline at end of file
+var _0xa44f=['ioredis','../../config/license/hardware','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','count','offset','set','Content-Range','json','apply','reject','save','update','then','destroy','end','error','name','index','SmsQueueReport','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','key','field','includeAll','include','findAll','rows','catch','show','params','rawAttributes','options','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','moment','mustache','path','to-csv','jsforce','desk.js','querystring','papaparse'];(function(_0x4b4277,_0x22676f){var _0x1ff405=function(_0x2fa9e2){while(--_0x2fa9e2){_0x4b4277['push'](_0x4b4277['shift']());}};_0x1ff405(++_0x22676f);}(_0xa44f,0x192));var _0xfa44=function(_0x6a2793,_0x5031d3){_0x6a2793=_0x6a2793-0x0;var _0x58deea=_0xa44f[_0x6a2793];return _0x58deea;};'use strict';var pdf=require(_0xfa44('0x0'));var emlformat=require(_0xfa44('0x1'));var rimraf=require(_0xfa44('0x2'));var zipdir=require(_0xfa44('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xfa44('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xfa44('0x5'));var util=require('util');var path=require(_0xfa44('0x6'));var sox=require('sox');var csv=require(_0xfa44('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xfa44('0x8'));var deskjs=require(_0xfa44('0x9'));var toCsv=require(_0xfa44('0x7'));var querystring=require(_0xfa44('0xa'));var Papa=require(_0xfa44('0xb'));var Redis=require(_0xfa44('0xc'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xfa44('0xd'));var logger=require('../../config/logger')('api');var utils=require(_0xfa44('0xe'));var config=require(_0xfa44('0xf'));var db=require(_0xfa44('0x10'))['db'];function respondWithStatusCode(_0x5eddb9,_0x27702c){_0x27702c=_0x27702c||0xcc;return function(_0x5e11fb){if(_0x5e11fb){return _0x5eddb9[_0xfa44('0x11')](_0x27702c);}return _0x5eddb9['status'](_0x27702c)['end']();};}function respondWithResult(_0x5d551b,_0x1c7e49){_0x1c7e49=_0x1c7e49||0xc8;return function(_0xd28e7e){if(_0xd28e7e){return _0x5d551b[_0xfa44('0x12')](_0x1c7e49)['json'](_0xd28e7e);}};}function respondWithFilteredResult(_0x5a6e3f,_0x3e4e06){return function(_0x1165fa){if(_0x1165fa){var _0x52ccba=_0x1165fa[_0xfa44('0x13')],_0x55f2d3=_0x3e4e06[_0xfa44('0x14')],_0x3745c0=_0x3e4e06[_0xfa44('0x14')]+_0x3e4e06['limit'],_0x2844d0;if(_0x3745c0>=_0x52ccba){_0x3745c0=_0x52ccba;_0x2844d0=0xc8;}else{_0x2844d0=0xce;}_0x5a6e3f[_0xfa44('0x12')](_0x2844d0);return _0x5a6e3f[_0xfa44('0x15')](_0xfa44('0x16'),_0x55f2d3+'-'+_0x3745c0+'/'+_0x52ccba)[_0xfa44('0x17')](_0x1165fa);}return null;};}function patchUpdates(_0x438e41){return function(_0x3bbbad){try{jsonpatch[_0xfa44('0x18')](_0x3bbbad,_0x438e41,!![]);}catch(_0x301eb7){return BPromise[_0xfa44('0x19')](_0x301eb7);}return _0x3bbbad[_0xfa44('0x1a')]();};}function saveUpdates(_0x47d750,_0x9d87f9){return function(_0x226d4c){if(_0x226d4c){return _0x226d4c[_0xfa44('0x1b')](_0x47d750)[_0xfa44('0x1c')](function(_0x1ca688){return _0x1ca688;});}return null;};}function removeEntity(_0x17b572,_0xb6fade){return function(_0x28b10b){if(_0x28b10b){return _0x28b10b[_0xfa44('0x1d')]()[_0xfa44('0x1c')](function(){_0x17b572['status'](0xcc)[_0xfa44('0x1e')]();});}};}function handleEntityNotFound(_0x5dcf78,_0x288334){return function(_0x844555){if(!_0x844555){_0x5dcf78[_0xfa44('0x11')](0x194);}return _0x844555;};}function handleError(_0x1ea0da,_0xfa061a){_0xfa061a=_0xfa061a||0x1f4;return function(_0x207cf8){logger[_0xfa44('0x1f')](_0x207cf8['stack']);if(_0x207cf8[_0xfa44('0x20')]){delete _0x207cf8[_0xfa44('0x20')];}_0x1ea0da[_0xfa44('0x12')](_0xfa061a)['send'](_0x207cf8);};}exports[_0xfa44('0x21')]=function(_0x5ce8f1,_0x1d57df){var _0x3d4a7e={},_0x4f3c9f={},_0x175510={'count':0x0,'rows':[]};var _0x5e7f0b=db[_0xfa44('0x22')]['rawAttributes'];_0x4f3c9f[_0xfa44('0x23')]=_[_0xfa44('0x24')](_0x5e7f0b);_0x4f3c9f[_0xfa44('0x25')]=_['keys'](_0x5ce8f1[_0xfa44('0x25')]);_0x4f3c9f[_0xfa44('0x26')]=_[_0xfa44('0x27')](_0x4f3c9f[_0xfa44('0x23')],_0x4f3c9f[_0xfa44('0x25')]);_0x3d4a7e[_0xfa44('0x28')]=_[_0xfa44('0x27')](_0x4f3c9f[_0xfa44('0x23')],qs[_0xfa44('0x29')](_0x5ce8f1[_0xfa44('0x25')][_0xfa44('0x29')]));_0x3d4a7e[_0xfa44('0x28')]=_0x3d4a7e[_0xfa44('0x28')][_0xfa44('0x2a')]?_0x3d4a7e['attributes']:_0x4f3c9f[_0xfa44('0x23')];if(!_0x5ce8f1[_0xfa44('0x25')][_0xfa44('0x2b')](_0xfa44('0x2c'))){_0x3d4a7e[_0xfa44('0x2d')]=qs[_0xfa44('0x2d')](_0x5ce8f1[_0xfa44('0x25')]['limit']);_0x3d4a7e[_0xfa44('0x14')]=qs[_0xfa44('0x14')](_0x5ce8f1[_0xfa44('0x25')][_0xfa44('0x14')]);}_0x3d4a7e[_0xfa44('0x2e')]=qs['sort'](_0x5ce8f1[_0xfa44('0x25')][_0xfa44('0x2f')]);_0x3d4a7e[_0xfa44('0x30')]=qs[_0xfa44('0x26')](_[_0xfa44('0x31')](_0x5ce8f1['query'],_0x4f3c9f['filters']));if(_0x5ce8f1[_0xfa44('0x25')][_0xfa44('0x32')]){_0x3d4a7e[_0xfa44('0x30')]=_[_0xfa44('0x33')](_0x3d4a7e[_0xfa44('0x30')],{'$or':_[_0xfa44('0x34')](_0x5e7f0b,function(_0x12217e){if(_0x12217e[_0xfa44('0x35')][_0xfa44('0x36')]!=='VIRTUAL'){var _0x4a6ab7={};_0x4a6ab7[_0x12217e[_0xfa44('0x37')]]={'$like':'%'+_0x5ce8f1[_0xfa44('0x25')]['filter']+'%'};return _0x4a6ab7;}})});}_0x3d4a7e=_[_0xfa44('0x33')]({},_0x3d4a7e,_0x5ce8f1['options']);var _0x2c74e2={'where':_0x3d4a7e[_0xfa44('0x30')]};return db[_0xfa44('0x22')][_0xfa44('0x13')](_0x2c74e2)[_0xfa44('0x1c')](function(_0x4e467d){_0x175510[_0xfa44('0x13')]=_0x4e467d;if(_0x5ce8f1[_0xfa44('0x25')][_0xfa44('0x38')]){_0x3d4a7e[_0xfa44('0x39')]=[{'all':!![]}];}return db['SmsQueueReport'][_0xfa44('0x3a')](_0x3d4a7e);})['then'](function(_0x14573d){_0x175510[_0xfa44('0x3b')]=_0x14573d;return _0x175510;})['then'](respondWithFilteredResult(_0x1d57df,_0x3d4a7e))[_0xfa44('0x3c')](handleError(_0x1d57df,null));};exports[_0xfa44('0x3d')]=function(_0x3b01d9,_0xeb87cb){var _0x179e4b={'raw':!![],'where':{'id':_0x3b01d9[_0xfa44('0x3e')]['id']}},_0x3da831={};_0x3da831[_0xfa44('0x23')]=_[_0xfa44('0x24')](db[_0xfa44('0x22')][_0xfa44('0x3f')]);_0x3da831[_0xfa44('0x25')]=_[_0xfa44('0x24')](_0x3b01d9[_0xfa44('0x25')]);_0x3da831['filters']=_[_0xfa44('0x27')](_0x3da831['model'],_0x3da831[_0xfa44('0x25')]);_0x179e4b[_0xfa44('0x28')]=_[_0xfa44('0x27')](_0x3da831[_0xfa44('0x23')],qs[_0xfa44('0x29')](_0x3b01d9[_0xfa44('0x25')]['fields']));_0x179e4b[_0xfa44('0x28')]=_0x179e4b['attributes']['length']?_0x179e4b[_0xfa44('0x28')]:_0x3da831[_0xfa44('0x23')];if(_0x3b01d9[_0xfa44('0x25')][_0xfa44('0x38')]){_0x179e4b['include']=[{'all':!![]}];}_0x179e4b=_[_0xfa44('0x33')]({},_0x179e4b,_0x3b01d9[_0xfa44('0x40')]);return db[_0xfa44('0x22')][_0xfa44('0x41')](_0x179e4b)[_0xfa44('0x1c')](handleEntityNotFound(_0xeb87cb,null))[_0xfa44('0x1c')](respondWithResult(_0xeb87cb,null))[_0xfa44('0x3c')](handleError(_0xeb87cb,null));};exports[_0xfa44('0x42')]=function(_0x12be20,_0x2769f2){return db[_0xfa44('0x22')][_0xfa44('0x42')](_0x12be20[_0xfa44('0x43')],{})[_0xfa44('0x1c')](respondWithResult(_0x2769f2,0xc9))[_0xfa44('0x3c')](handleError(_0x2769f2,null));};exports['update']=function(_0x4fee86,_0x51de0b){if(_0x4fee86['body']['id']){delete _0x4fee86['body']['id'];}return db[_0xfa44('0x22')][_0xfa44('0x41')]({'where':{'id':_0x4fee86[_0xfa44('0x3e')]['id']}})[_0xfa44('0x1c')](handleEntityNotFound(_0x51de0b,null))['then'](saveUpdates(_0x4fee86[_0xfa44('0x43')],null))['then'](respondWithResult(_0x51de0b,null))[_0xfa44('0x3c')](handleError(_0x51de0b,null));};exports[_0xfa44('0x1d')]=function(_0x9c1e,_0x5353e1){return db['SmsQueueReport'][_0xfa44('0x41')]({'where':{'id':_0x9c1e[_0xfa44('0x3e')]['id']}})[_0xfa44('0x1c')](handleEntityNotFound(_0x5353e1,null))['then'](removeEntity(_0x5353e1,null))[_0xfa44('0x3c')](handleError(_0x5353e1,null));};exports[_0xfa44('0x44')]=function(_0x3cf7fd,_0x1eba1d){return db[_0xfa44('0x22')]['describe']()['then'](respondWithResult(_0x1eba1d,null))[_0xfa44('0x3c')](handleError(_0x1eba1d,null));};
\ No newline at end of file
index 003a3fa..f6456ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5034=['api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./smsQueueReport.attributes','exports','define','SmsQueueReport','report_sms_queue','uniqueid','../../config/logger'];(function(_0x138303,_0x3538ff){var _0xeb16fa=function(_0xe82df8){while(--_0xe82df8){_0x138303['push'](_0x138303['shift']());}};_0xeb16fa(++_0x3538ff);}(_0x5034,0x1bf));var _0x4503=function(_0x3d65a3,_0x401bb0){_0x3d65a3=_0x3d65a3-0x0;var _0x45a874=_0x5034[_0x3d65a3];return _0x45a874;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x4503('0x0'))(_0x4503('0x1'));var moment=require(_0x4503('0x2'));var BPromise=require(_0x4503('0x3'));var rp=require(_0x4503('0x4'));var fs=require('fs');var path=require(_0x4503('0x5'));var rimraf=require(_0x4503('0x6'));var config=require(_0x4503('0x7'));var attributes=require(_0x4503('0x8'));module[_0x4503('0x9')]=function(_0x1dafc3,_0x15c152){return _0x1dafc3[_0x4503('0xa')](_0x4503('0xb'),attributes,{'tableName':_0x4503('0xc'),'paranoid':![],'indexes':[{'name':_0x4503('0xd'),'fields':[_0x4503('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xad24=['report_sms_queue','uniqueid','lodash','../../config/logger','moment','path','rimraf','../../config/environment','exports','define','SmsQueueReport'];(function(_0x517539,_0x3833c0){var _0x34ccf8=function(_0x2a1729){while(--_0x2a1729){_0x517539['push'](_0x517539['shift']());}};_0x34ccf8(++_0x3833c0);}(_0xad24,0x1e6));var _0x4ad2=function(_0x5d79d5,_0x2d02b8){_0x5d79d5=_0x5d79d5-0x0;var _0x34f86e=_0xad24[_0x5d79d5];return _0x34f86e;};'use strict';var _=require(_0x4ad2('0x0'));var util=require('util');var logger=require(_0x4ad2('0x1'))('api');var moment=require(_0x4ad2('0x2'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x4ad2('0x3'));var rimraf=require(_0x4ad2('0x4'));var config=require(_0x4ad2('0x5'));var attributes=require('./smsQueueReport.attributes');module[_0x4ad2('0x6')]=function(_0x4fc36a,_0x1149e0){return _0x4fc36a[_0x4ad2('0x7')](_0x4ad2('0x8'),attributes,{'tableName':_0x4ad2('0x9'),'paranoid':![],'indexes':[{'name':_0x4ad2('0xa'),'fields':[_0x4ad2('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index b244c60..c8a9afe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb4ab=['util','moment','randomstring','ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','client','request','then','SmsQueueReport,\x20%s,\x20%s','request\x20sent','debug','SmsQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','SmsQueueReport','body','options','raw','CreateSmsQueueReport','update','where','attributes','limit','UpdateSmsQueueReport','catch'];(function(_0x29a48f,_0x19a708){var _0x4f5602=function(_0xec5622){while(--_0xec5622){_0x29a48f['push'](_0x29a48f['shift']());}};_0x4f5602(++_0x19a708);}(_0xb4ab,0x9b));var _0xbb4a=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xb4ab[_0x321bb2];return _0x9c12ed;};'use strict';var _=require('lodash');var util=require(_0xbb4a('0x0'));var moment=require(_0xbb4a('0x1'));var BPromise=require('bluebird');var rs=require(_0xbb4a('0x2'));var fs=require('fs');var Redis=require(_0xbb4a('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xbb4a('0x4'));var logger=require('../../config/logger')(_0xbb4a('0x5'));var config=require(_0xbb4a('0x6'));var jayson=require(_0xbb4a('0x7'));var client=jayson[_0xbb4a('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0xaf2b16,_0x51be61,_0x1512a3){return new BPromise(function(_0x1d1433,_0x4a67c2){return client[_0xbb4a('0x9')](_0xaf2b16,_0x1512a3)[_0xbb4a('0xa')](function(_0x3dd806){logger['info'](_0xbb4a('0xb'),_0x51be61,_0xbb4a('0xc'));logger[_0xbb4a('0xd')](_0xbb4a('0xe'),_0x51be61,'request\x20sent',JSON[_0xbb4a('0xf')](_0x3dd806));if(_0x3dd806[_0xbb4a('0x10')]){if(_0x3dd806[_0xbb4a('0x10')][_0xbb4a('0x11')]===0x1f4){logger[_0xbb4a('0x10')](_0xbb4a('0xb'),_0x51be61,_0x3dd806['error'][_0xbb4a('0x12')]);return _0x4a67c2(_0x3dd806['error'][_0xbb4a('0x12')]);}logger['error']('SmsQueueReport,\x20%s,\x20%s',_0x51be61,_0x3dd806[_0xbb4a('0x10')][_0xbb4a('0x12')]);return _0x1d1433(_0x3dd806[_0xbb4a('0x10')][_0xbb4a('0x12')]);}else{logger[_0xbb4a('0x13')](_0xbb4a('0xb'),_0x51be61,'request\x20sent');_0x1d1433(_0x3dd806['result'][_0xbb4a('0x12')]);}})['catch'](function(_0x627ce5){logger[_0xbb4a('0x10')](_0xbb4a('0xb'),_0x51be61,_0x627ce5);_0x4a67c2(_0x627ce5);});});}exports['CreateSmsQueueReport']=function(_0x368c14){var _0x458d29=this;return new Promise(function(_0xac1dee,_0x3c0e0f){return db[_0xbb4a('0x14')]['create'](_0x368c14[_0xbb4a('0x15')],{'raw':_0x368c14[_0xbb4a('0x16')]?_0x368c14[_0xbb4a('0x16')][_0xbb4a('0x17')]===undefined?!![]:![]:!![]})[_0xbb4a('0xa')](function(_0x4baa00){logger[_0xbb4a('0x13')](_0xbb4a('0x18'),_0x368c14);logger[_0xbb4a('0xd')]('CreateSmsQueueReport',_0x368c14,JSON[_0xbb4a('0xf')](_0x4baa00));_0xac1dee(_0x4baa00);})['catch'](function(_0x494fa6){logger[_0xbb4a('0x10')](_0xbb4a('0x18'),_0x494fa6[_0xbb4a('0x12')],_0x368c14);_0x3c0e0f(_0x458d29[_0xbb4a('0x10')](0x1f4,_0x494fa6[_0xbb4a('0x12')]));});});};exports['UpdateSmsQueueReport']=function(_0x3c12cc){var _0x45c71e=this;return new Promise(function(_0x42dd6d,_0x33e0fe){return db[_0xbb4a('0x14')][_0xbb4a('0x19')](_0x3c12cc[_0xbb4a('0x15')],{'raw':_0x3c12cc[_0xbb4a('0x16')]?_0x3c12cc[_0xbb4a('0x16')][_0xbb4a('0x17')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3c12cc[_0xbb4a('0x16')]?_0x3c12cc['options'][_0xbb4a('0x1a')]||null:null,'attributes':_0x3c12cc['options']?_0x3c12cc['options'][_0xbb4a('0x1b')]||null:null,'limit':_0x3c12cc['options']?_0x3c12cc['options'][_0xbb4a('0x1c')]||null:null})['then'](function(_0x37a31f){logger[_0xbb4a('0x13')](_0xbb4a('0x1d'),_0x3c12cc);logger[_0xbb4a('0xd')]('UpdateSmsQueueReport',_0x3c12cc,JSON[_0xbb4a('0xf')](_0x37a31f));_0x42dd6d(_0x37a31f);})[_0xbb4a('0x1e')](function(_0x24ffbf){logger[_0xbb4a('0x10')](_0xbb4a('0x1d'),_0x24ffbf[_0xbb4a('0x12')],_0x3c12cc);_0x33e0fe(_0x45c71e['error'](0x1f4,_0x24ffbf[_0xbb4a('0x12')]));});});};
\ No newline at end of file
+var _0x65dd=['../../config/environment','jayson/promise','client','http','then','info','SmsQueueReport,\x20%s,\x20%s','request\x20sent','SmsQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','SmsQueueReport','create','body','options','raw','debug','update','where','limit','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x449877,_0x4b776d){var _0x53a338=function(_0x5dd02){while(--_0x5dd02){_0x449877['push'](_0x449877['shift']());}};_0x53a338(++_0x4b776d);}(_0x65dd,0x143));var _0xd65d=function(_0x1065e8,_0xa4d8e2){_0x1065e8=_0x1065e8-0x0;var _0x70328a=_0x65dd[_0x1065e8];return _0x70328a;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xd65d('0x0'));var BPromise=require(_0xd65d('0x1'));var rs=require(_0xd65d('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xd65d('0x3'))['db'];var utils=require(_0xd65d('0x4'));var logger=require(_0xd65d('0x5'))(_0xd65d('0x6'));var config=require(_0xd65d('0x7'));var jayson=require(_0xd65d('0x8'));var client=jayson[_0xd65d('0x9')][_0xd65d('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x40f15c,_0x476b16,_0x4e7ad5){return new BPromise(function(_0x1b5d4f,_0x3bf3ba){return client['request'](_0x40f15c,_0x4e7ad5)[_0xd65d('0xb')](function(_0x25944b){logger[_0xd65d('0xc')](_0xd65d('0xd'),_0x476b16,_0xd65d('0xe'));logger['debug'](_0xd65d('0xf'),_0x476b16,_0xd65d('0xe'),JSON[_0xd65d('0x10')](_0x25944b));if(_0x25944b[_0xd65d('0x11')]){if(_0x25944b[_0xd65d('0x11')][_0xd65d('0x12')]===0x1f4){logger[_0xd65d('0x11')](_0xd65d('0xd'),_0x476b16,_0x25944b[_0xd65d('0x11')][_0xd65d('0x13')]);return _0x3bf3ba(_0x25944b[_0xd65d('0x11')]['message']);}logger[_0xd65d('0x11')](_0xd65d('0xd'),_0x476b16,_0x25944b[_0xd65d('0x11')][_0xd65d('0x13')]);return _0x1b5d4f(_0x25944b['error'][_0xd65d('0x13')]);}else{logger[_0xd65d('0xc')]('SmsQueueReport,\x20%s,\x20%s',_0x476b16,_0xd65d('0xe'));_0x1b5d4f(_0x25944b['result'][_0xd65d('0x13')]);}})[_0xd65d('0x14')](function(_0x3f1f15){logger[_0xd65d('0x11')](_0xd65d('0xd'),_0x476b16,_0x3f1f15);_0x3bf3ba(_0x3f1f15);});});}exports['CreateSmsQueueReport']=function(_0x1fcc44){var _0x586c34=this;return new Promise(function(_0x234d5c,_0x59957d){return db[_0xd65d('0x15')][_0xd65d('0x16')](_0x1fcc44[_0xd65d('0x17')],{'raw':_0x1fcc44[_0xd65d('0x18')]?_0x1fcc44['options'][_0xd65d('0x19')]===undefined?!![]:![]:!![]})['then'](function(_0x54741f){logger['info']('CreateSmsQueueReport',_0x1fcc44);logger[_0xd65d('0x1a')]('CreateSmsQueueReport',_0x1fcc44,JSON[_0xd65d('0x10')](_0x54741f));_0x234d5c(_0x54741f);})['catch'](function(_0x50b38e){logger[_0xd65d('0x11')]('CreateSmsQueueReport',_0x50b38e[_0xd65d('0x13')],_0x1fcc44);_0x59957d(_0x586c34['error'](0x1f4,_0x50b38e['message']));});});};exports['UpdateSmsQueueReport']=function(_0x496c2c){var _0x29e3eb=this;return new Promise(function(_0x248038,_0x5e5a2f){return db[_0xd65d('0x15')][_0xd65d('0x1b')](_0x496c2c['body'],{'raw':_0x496c2c['options']?_0x496c2c[_0xd65d('0x18')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x496c2c[_0xd65d('0x18')]?_0x496c2c[_0xd65d('0x18')][_0xd65d('0x1c')]||null:null,'attributes':_0x496c2c['options']?_0x496c2c['options']['attributes']||null:null,'limit':_0x496c2c[_0xd65d('0x18')]?_0x496c2c['options'][_0xd65d('0x1d')]||null:null})[_0xd65d('0xb')](function(_0x3fc9f3){logger[_0xd65d('0xc')]('UpdateSmsQueueReport',_0x496c2c);logger[_0xd65d('0x1a')]('UpdateSmsQueueReport',_0x496c2c,JSON[_0xd65d('0x10')](_0x3fc9f3));_0x248038(_0x3fc9f3);})[_0xd65d('0x14')](function(_0x4eaa73){logger[_0xd65d('0x11')]('UpdateSmsQueueReport',_0x4eaa73[_0xd65d('0x13')],_0x496c2c);_0x5e5a2f(_0x29e3eb[_0xd65d('0x11')](0x1f4,_0x4eaa73[_0xd65d('0x13')]));});});};
\ No newline at end of file
index 320dbe5..7374b31 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8014=['../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','update','delete','destroy','exports','path','connect-timeout'];(function(_0x1bd4f9,_0x2bc2ae){var _0x53983b=function(_0x5ac1d0){while(--_0x5ac1d0){_0x1bd4f9['push'](_0x1bd4f9['shift']());}};_0x53983b(++_0x2bc2ae);}(_0x8014,0xec));var _0x4801=function(_0x1de43c,_0xaa29de){_0x1de43c=_0x1de43c-0x0;var _0x296d3e=_0x8014[_0x1de43c];return _0x296d3e;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x4801('0x0'));var timeout=require(_0x4801('0x1'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x4801('0x2'));var config=require(_0x4801('0x3'));var controller=require('./smsTransferReport.controller');router[_0x4801('0x4')]('/',auth[_0x4801('0x5')](),controller[_0x4801('0x6')]);router['get'](_0x4801('0x7'),auth[_0x4801('0x5')](),controller[_0x4801('0x8')]);router[_0x4801('0x4')](_0x4801('0x9'),auth[_0x4801('0x5')](),controller[_0x4801('0xa')]);router[_0x4801('0xb')]('/',auth[_0x4801('0x5')](),controller[_0x4801('0xc')]);router['put'](_0x4801('0x9'),auth[_0x4801('0x5')](),controller[_0x4801('0xd')]);router[_0x4801('0xe')](_0x4801('0x9'),auth[_0x4801('0x5')](),controller[_0x4801('0xf')]);module[_0x4801('0x10')]=router;
\ No newline at end of file
+var _0x8395=['show','post','create','put','delete','destroy','exports','util','connect-timeout','../../components/auth/service','./smsTransferReport.controller','get','index','isAuthenticated','/:id'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x8395,0x151));var _0x5839=function(_0xb833b1,_0x1c3d3f){_0xb833b1=_0xb833b1-0x0;var _0x1ab87a=_0x8395[_0xb833b1];return _0x1ab87a;};'use strict';var multer=require('multer');var util=require(_0x5839('0x0'));var path=require('path');var timeout=require(_0x5839('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0x5839('0x2'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x5839('0x3'));router[_0x5839('0x4')]('/',auth['isAuthenticated'](),controller[_0x5839('0x5')]);router[_0x5839('0x4')]('/describe',auth[_0x5839('0x6')](),controller['describe']);router[_0x5839('0x4')](_0x5839('0x7'),auth[_0x5839('0x6')](),controller[_0x5839('0x8')]);router[_0x5839('0x9')]('/',auth[_0x5839('0x6')](),controller[_0x5839('0xa')]);router[_0x5839('0xb')]('/:id',auth[_0x5839('0x6')](),controller['update']);router[_0x5839('0xc')](_0x5839('0x7'),auth[_0x5839('0x6')](),controller[_0x5839('0xd')]);module[_0x5839('0xe')]=router;
\ No newline at end of file
index 6dc7676..a149bc5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6c8=['moment','sequelize','exports','STRING','ENUM','account','agent','queue','DATE','NOW'];(function(_0x3bf83f,_0x181cac){var _0x22c4a9=function(_0xb3ff0d){while(--_0xb3ff0d){_0x3bf83f['push'](_0x3bf83f['shift']());}};_0x22c4a9(++_0x181cac);}(_0xc6c8,0x1d6));var _0x8c6c=function(_0x4d031e,_0x43b2f5){_0x4d031e=_0x4d031e-0x0;var _0x2bc2a1=_0xc6c8[_0x4d031e];return _0x2bc2a1;};'use strict';var moment=require(_0x8c6c('0x0'));var Sequelize=require(_0x8c6c('0x1'));module[_0x8c6c('0x2')]={'uniqueid':{'type':Sequelize[_0x8c6c('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x8c6c('0x4')](_0x8c6c('0x5'),_0x8c6c('0x6'),_0x8c6c('0x7')),'allowNull':![],'defaultValue':_0x8c6c('0x7')},'transferredAt':{'type':Sequelize[_0x8c6c('0x8')],'allowNull':![],'defaultValue':Sequelize[_0x8c6c('0x9')]}};
\ No newline at end of file
+var _0x3146=['NOW','exports','STRING','ENUM','account','agent','queue','DATE'];(function(_0x1738b,_0x272b11){var _0x62c2a6=function(_0x21d4e0){while(--_0x21d4e0){_0x1738b['push'](_0x1738b['shift']());}};_0x62c2a6(++_0x272b11);}(_0x3146,0x71));var _0x6314=function(_0x58e896,_0x36897d){_0x58e896=_0x58e896-0x0;var _0x52553e=_0x3146[_0x58e896];return _0x52553e;};'use strict';var moment=require('moment');var Sequelize=require('sequelize');module[_0x6314('0x0')]={'uniqueid':{'type':Sequelize[_0x6314('0x1')],'allowNull':![]},'type':{'type':Sequelize[_0x6314('0x2')](_0x6314('0x3'),_0x6314('0x4'),'queue'),'allowNull':![],'defaultValue':_0x6314('0x5')},'transferredAt':{'type':Sequelize[_0x6314('0x6')],'allowNull':![],'defaultValue':Sequelize[_0x6314('0x7')]}};
\ No newline at end of file
index a3526a1..02f6fa1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c6c=['status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','index','SmsTransferReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','field','includeAll','findAll','rows','catch','show','params','include','options','find','create','body','describe','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','ejs','to-csv','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','sendStatus'];(function(_0xd13bc7,_0x4cede3){var _0x408215=function(_0x2b0fa7){while(--_0x2b0fa7){_0xd13bc7['push'](_0xd13bc7['shift']());}};_0x408215(++_0x4cede3);}(_0x3c6c,0x7b));var _0xc3c6=function(_0x841dcf,_0x277d83){_0x841dcf=_0x841dcf-0x0;var _0x255a12=_0x3c6c[_0x841dcf];return _0x255a12;};'use strict';var pdf=require(_0xc3c6('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xc3c6('0x1'));var zipdir=require(_0xc3c6('0x2'));var jsonpatch=require(_0xc3c6('0x3'));var rp=require(_0xc3c6('0x4'));var moment=require(_0xc3c6('0x5'));var BPromise=require(_0xc3c6('0x6'));var Mustache=require(_0xc3c6('0x7'));var util=require(_0xc3c6('0x8'));var path=require('path');var sox=require(_0xc3c6('0x9'));var csv=require('to-csv');var ejs=require(_0xc3c6('0xa'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xc3c6('0xb'));var querystring=require(_0xc3c6('0xc'));var Papa=require('papaparse');var Redis=require(_0xc3c6('0xd'));var authService=require(_0xc3c6('0xe'));var qs=require(_0xc3c6('0xf'));var hardwareService=require(_0xc3c6('0x10'));var logger=require('../../config/logger')(_0xc3c6('0x11'));var utils=require(_0xc3c6('0x12'));var config=require(_0xc3c6('0x13'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5f3983,_0x38c315){_0x38c315=_0x38c315||0xcc;return function(_0x407147){if(_0x407147){return _0x5f3983[_0xc3c6('0x14')](_0x38c315);}return _0x5f3983[_0xc3c6('0x15')](_0x38c315)[_0xc3c6('0x16')]();};}function respondWithResult(_0x1aa504,_0x1c6fa3){_0x1c6fa3=_0x1c6fa3||0xc8;return function(_0x28a431){if(_0x28a431){return _0x1aa504[_0xc3c6('0x15')](_0x1c6fa3)[_0xc3c6('0x17')](_0x28a431);}};}function respondWithFilteredResult(_0x5e42b8,_0xf60467){return function(_0x37a6a8){if(_0x37a6a8){var _0x25d2bd=_0x37a6a8[_0xc3c6('0x18')],_0x283506=_0xf60467[_0xc3c6('0x19')],_0x42c631=_0xf60467[_0xc3c6('0x19')]+_0xf60467[_0xc3c6('0x1a')],_0x32c52f;if(_0x42c631>=_0x25d2bd){_0x42c631=_0x25d2bd;_0x32c52f=0xc8;}else{_0x32c52f=0xce;}_0x5e42b8[_0xc3c6('0x15')](_0x32c52f);return _0x5e42b8[_0xc3c6('0x1b')](_0xc3c6('0x1c'),_0x283506+'-'+_0x42c631+'/'+_0x25d2bd)[_0xc3c6('0x17')](_0x37a6a8);}return null;};}function patchUpdates(_0x470592){return function(_0x50a39c){try{jsonpatch[_0xc3c6('0x1d')](_0x50a39c,_0x470592,!![]);}catch(_0x5a2456){return BPromise[_0xc3c6('0x1e')](_0x5a2456);}return _0x50a39c[_0xc3c6('0x1f')]();};}function saveUpdates(_0x3893c4,_0x3b95ae){return function(_0xfe2f70){if(_0xfe2f70){return _0xfe2f70[_0xc3c6('0x20')](_0x3893c4)[_0xc3c6('0x21')](function(_0x22aa76){return _0x22aa76;});}return null;};}function removeEntity(_0x33c76a,_0xe0ec5f){return function(_0x2a99a0){if(_0x2a99a0){return _0x2a99a0[_0xc3c6('0x22')]()[_0xc3c6('0x21')](function(){_0x33c76a[_0xc3c6('0x15')](0xcc)['end']();});}};}function handleEntityNotFound(_0x24fb2d,_0x40893b){return function(_0x2bced6){if(!_0x2bced6){_0x24fb2d['sendStatus'](0x194);}return _0x2bced6;};}function handleError(_0x3eab18,_0x42438d){_0x42438d=_0x42438d||0x1f4;return function(_0x400e3d){logger[_0xc3c6('0x23')](_0x400e3d[_0xc3c6('0x24')]);if(_0x400e3d[_0xc3c6('0x25')]){delete _0x400e3d[_0xc3c6('0x25')];}_0x3eab18['status'](_0x42438d)[_0xc3c6('0x26')](_0x400e3d);};}exports[_0xc3c6('0x27')]=function(_0x4ca76f,_0x24c417){var _0x3358db={},_0x1457f7={},_0xdad009={'count':0x0,'rows':[]};var _0x312539=db[_0xc3c6('0x28')][_0xc3c6('0x29')];_0x1457f7[_0xc3c6('0x2a')]=_[_0xc3c6('0x2b')](_0x312539);_0x1457f7['query']=_[_0xc3c6('0x2b')](_0x4ca76f[_0xc3c6('0x2c')]);_0x1457f7[_0xc3c6('0x2d')]=_[_0xc3c6('0x2e')](_0x1457f7['model'],_0x1457f7[_0xc3c6('0x2c')]);_0x3358db[_0xc3c6('0x2f')]=_[_0xc3c6('0x2e')](_0x1457f7[_0xc3c6('0x2a')],qs[_0xc3c6('0x30')](_0x4ca76f[_0xc3c6('0x2c')]['fields']));_0x3358db[_0xc3c6('0x2f')]=_0x3358db[_0xc3c6('0x2f')][_0xc3c6('0x31')]?_0x3358db[_0xc3c6('0x2f')]:_0x1457f7[_0xc3c6('0x2a')];if(!_0x4ca76f['query'][_0xc3c6('0x32')](_0xc3c6('0x33'))){_0x3358db[_0xc3c6('0x1a')]=qs[_0xc3c6('0x1a')](_0x4ca76f[_0xc3c6('0x2c')][_0xc3c6('0x1a')]);_0x3358db[_0xc3c6('0x19')]=qs['offset'](_0x4ca76f[_0xc3c6('0x2c')]['offset']);}_0x3358db[_0xc3c6('0x34')]=qs[_0xc3c6('0x35')](_0x4ca76f[_0xc3c6('0x2c')][_0xc3c6('0x35')]);_0x3358db[_0xc3c6('0x36')]=qs[_0xc3c6('0x2d')](_['pick'](_0x4ca76f[_0xc3c6('0x2c')],_0x1457f7[_0xc3c6('0x2d')]));if(_0x4ca76f['query'][_0xc3c6('0x37')]){_0x3358db[_0xc3c6('0x36')]=_[_0xc3c6('0x38')](_0x3358db[_0xc3c6('0x36')],{'$or':_[_0xc3c6('0x39')](_0x312539,function(_0x377a2f){if(_0x377a2f[_0xc3c6('0x3a')]['key']!=='VIRTUAL'){var _0x4513df={};_0x4513df[_0x377a2f[_0xc3c6('0x3b')]]={'$like':'%'+_0x4ca76f[_0xc3c6('0x2c')][_0xc3c6('0x37')]+'%'};return _0x4513df;}})});}_0x3358db=_[_0xc3c6('0x38')]({},_0x3358db,_0x4ca76f['options']);var _0x25c8ee={'where':_0x3358db[_0xc3c6('0x36')]};return db[_0xc3c6('0x28')][_0xc3c6('0x18')](_0x25c8ee)[_0xc3c6('0x21')](function(_0x68ff0c){_0xdad009[_0xc3c6('0x18')]=_0x68ff0c;if(_0x4ca76f[_0xc3c6('0x2c')][_0xc3c6('0x3c')]){_0x3358db['include']=[{'all':!![]}];}return db[_0xc3c6('0x28')][_0xc3c6('0x3d')](_0x3358db);})[_0xc3c6('0x21')](function(_0x316605){_0xdad009[_0xc3c6('0x3e')]=_0x316605;return _0xdad009;})[_0xc3c6('0x21')](respondWithFilteredResult(_0x24c417,_0x3358db))[_0xc3c6('0x3f')](handleError(_0x24c417,null));};exports[_0xc3c6('0x40')]=function(_0x59b2d9,_0x30692f){var _0x242e2b={'raw':!![],'where':{'id':_0x59b2d9[_0xc3c6('0x41')]['id']}},_0x58cba4={};_0x58cba4['model']=_[_0xc3c6('0x2b')](db[_0xc3c6('0x28')][_0xc3c6('0x29')]);_0x58cba4[_0xc3c6('0x2c')]=_[_0xc3c6('0x2b')](_0x59b2d9[_0xc3c6('0x2c')]);_0x58cba4[_0xc3c6('0x2d')]=_[_0xc3c6('0x2e')](_0x58cba4['model'],_0x58cba4[_0xc3c6('0x2c')]);_0x242e2b['attributes']=_[_0xc3c6('0x2e')](_0x58cba4[_0xc3c6('0x2a')],qs[_0xc3c6('0x30')](_0x59b2d9[_0xc3c6('0x2c')]['fields']));_0x242e2b['attributes']=_0x242e2b[_0xc3c6('0x2f')][_0xc3c6('0x31')]?_0x242e2b[_0xc3c6('0x2f')]:_0x58cba4[_0xc3c6('0x2a')];if(_0x59b2d9['query'][_0xc3c6('0x3c')]){_0x242e2b[_0xc3c6('0x42')]=[{'all':!![]}];}_0x242e2b=_[_0xc3c6('0x38')]({},_0x242e2b,_0x59b2d9[_0xc3c6('0x43')]);return db[_0xc3c6('0x28')][_0xc3c6('0x44')](_0x242e2b)[_0xc3c6('0x21')](handleEntityNotFound(_0x30692f,null))['then'](respondWithResult(_0x30692f,null))['catch'](handleError(_0x30692f,null));};exports[_0xc3c6('0x45')]=function(_0x281c01,_0x490bbf){return db[_0xc3c6('0x28')][_0xc3c6('0x45')](_0x281c01['body'],{})[_0xc3c6('0x21')](respondWithResult(_0x490bbf,0xc9))[_0xc3c6('0x3f')](handleError(_0x490bbf,null));};exports['update']=function(_0x227db0,_0xb3122b){if(_0x227db0[_0xc3c6('0x46')]['id']){delete _0x227db0[_0xc3c6('0x46')]['id'];}return db[_0xc3c6('0x28')][_0xc3c6('0x44')]({'where':{'id':_0x227db0[_0xc3c6('0x41')]['id']}})[_0xc3c6('0x21')](handleEntityNotFound(_0xb3122b,null))[_0xc3c6('0x21')](saveUpdates(_0x227db0[_0xc3c6('0x46')],null))[_0xc3c6('0x21')](respondWithResult(_0xb3122b,null))[_0xc3c6('0x3f')](handleError(_0xb3122b,null));};exports[_0xc3c6('0x22')]=function(_0x21b8a0,_0x55b8bc){return db['SmsTransferReport'][_0xc3c6('0x44')]({'where':{'id':_0x21b8a0[_0xc3c6('0x41')]['id']}})[_0xc3c6('0x21')](handleEntityNotFound(_0x55b8bc,null))[_0xc3c6('0x21')](removeEntity(_0x55b8bc,null))['catch'](handleError(_0x55b8bc,null));};exports['describe']=function(_0x13e4d9,_0x467c48){return db[_0xc3c6('0x28')][_0xc3c6('0x47')]()[_0xc3c6('0x21')](respondWithResult(_0x467c48,null))[_0xc3c6('0x3f')](handleError(_0x467c48,null));};
\ No newline at end of file
+var _0xcb66=['describe','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','sendStatus','end','status','count','offset','limit','Content-Range','json','update','then','destroy','error','stack','name','send','index','SmsTransferReport','rawAttributes','model','keys','filters','query','attributes','fields','length','nolimit','order','sort','where','filter','merge','map','type','VIRTUAL','field','options','rows','catch','show','intersection','includeAll','find','create','body','params'];(function(_0x40015a,_0x415db5){var _0x42f8a4=function(_0x5685ad){while(--_0x5685ad){_0x40015a['push'](_0x40015a['shift']());}};_0x42f8a4(++_0x415db5);}(_0xcb66,0x19f));var _0x6cb6=function(_0x374ccf,_0xa945c4){_0x374ccf=_0x374ccf-0x0;var _0x443cde=_0xcb66[_0x374ccf];return _0x443cde;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x6cb6('0x0'));var rimraf=require(_0x6cb6('0x1'));var zipdir=require(_0x6cb6('0x2'));var jsonpatch=require(_0x6cb6('0x3'));var rp=require(_0x6cb6('0x4'));var moment=require('moment');var BPromise=require(_0x6cb6('0x5'));var Mustache=require(_0x6cb6('0x6'));var util=require(_0x6cb6('0x7'));var path=require(_0x6cb6('0x8'));var sox=require(_0x6cb6('0x9'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x6cb6('0xa'));var squel=require(_0x6cb6('0xb'));var crypto=require(_0x6cb6('0xc'));var jsforce=require(_0x6cb6('0xd'));var deskjs=require(_0x6cb6('0xe'));var toCsv=require(_0x6cb6('0xf'));var querystring=require(_0x6cb6('0x10'));var Papa=require(_0x6cb6('0x11'));var Redis=require(_0x6cb6('0x12'));var authService=require(_0x6cb6('0x13'));var qs=require(_0x6cb6('0x14'));var hardwareService=require(_0x6cb6('0x15'));var logger=require(_0x6cb6('0x16'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x21de58,_0x2b49d9){_0x2b49d9=_0x2b49d9||0xcc;return function(_0xad49d9){if(_0xad49d9){return _0x21de58[_0x6cb6('0x17')](_0x2b49d9);}return _0x21de58['status'](_0x2b49d9)[_0x6cb6('0x18')]();};}function respondWithResult(_0x3c6267,_0x57ee3b){_0x57ee3b=_0x57ee3b||0xc8;return function(_0x1e5468){if(_0x1e5468){return _0x3c6267[_0x6cb6('0x19')](_0x57ee3b)['json'](_0x1e5468);}};}function respondWithFilteredResult(_0x107492,_0x26b46b){return function(_0x492629){if(_0x492629){var _0x5ab865=_0x492629[_0x6cb6('0x1a')],_0x505b4d=_0x26b46b[_0x6cb6('0x1b')],_0x5dd4cd=_0x26b46b[_0x6cb6('0x1b')]+_0x26b46b[_0x6cb6('0x1c')],_0x380edc;if(_0x5dd4cd>=_0x5ab865){_0x5dd4cd=_0x5ab865;_0x380edc=0xc8;}else{_0x380edc=0xce;}_0x107492[_0x6cb6('0x19')](_0x380edc);return _0x107492['set'](_0x6cb6('0x1d'),_0x505b4d+'-'+_0x5dd4cd+'/'+_0x5ab865)[_0x6cb6('0x1e')](_0x492629);}return null;};}function patchUpdates(_0x57c4f4){return function(_0x4b9da5){try{jsonpatch['apply'](_0x4b9da5,_0x57c4f4,!![]);}catch(_0x5b5dab){return BPromise['reject'](_0x5b5dab);}return _0x4b9da5['save']();};}function saveUpdates(_0x390c9b,_0xcd1afa){return function(_0x407455){if(_0x407455){return _0x407455[_0x6cb6('0x1f')](_0x390c9b)[_0x6cb6('0x20')](function(_0x5e14c8){return _0x5e14c8;});}return null;};}function removeEntity(_0x520c9e,_0x2dffa4){return function(_0x1d35d1){if(_0x1d35d1){return _0x1d35d1[_0x6cb6('0x21')]()[_0x6cb6('0x20')](function(){_0x520c9e['status'](0xcc)[_0x6cb6('0x18')]();});}};}function handleEntityNotFound(_0x19837e,_0x58a6ed){return function(_0x5ad4f2){if(!_0x5ad4f2){_0x19837e[_0x6cb6('0x17')](0x194);}return _0x5ad4f2;};}function handleError(_0x524f42,_0x5c91a2){_0x5c91a2=_0x5c91a2||0x1f4;return function(_0x457865){logger[_0x6cb6('0x22')](_0x457865[_0x6cb6('0x23')]);if(_0x457865[_0x6cb6('0x24')]){delete _0x457865[_0x6cb6('0x24')];}_0x524f42[_0x6cb6('0x19')](_0x5c91a2)[_0x6cb6('0x25')](_0x457865);};}exports[_0x6cb6('0x26')]=function(_0x112e47,_0x47a81b){var _0x5c525b={},_0x4ea573={},_0x2dc6c9={'count':0x0,'rows':[]};var _0x462dbf=db[_0x6cb6('0x27')][_0x6cb6('0x28')];_0x4ea573[_0x6cb6('0x29')]=_[_0x6cb6('0x2a')](_0x462dbf);_0x4ea573['query']=_[_0x6cb6('0x2a')](_0x112e47['query']);_0x4ea573[_0x6cb6('0x2b')]=_['intersection'](_0x4ea573[_0x6cb6('0x29')],_0x4ea573[_0x6cb6('0x2c')]);_0x5c525b[_0x6cb6('0x2d')]=_['intersection'](_0x4ea573[_0x6cb6('0x29')],qs[_0x6cb6('0x2e')](_0x112e47[_0x6cb6('0x2c')]['fields']));_0x5c525b[_0x6cb6('0x2d')]=_0x5c525b[_0x6cb6('0x2d')][_0x6cb6('0x2f')]?_0x5c525b['attributes']:_0x4ea573[_0x6cb6('0x29')];if(!_0x112e47[_0x6cb6('0x2c')]['hasOwnProperty'](_0x6cb6('0x30'))){_0x5c525b[_0x6cb6('0x1c')]=qs[_0x6cb6('0x1c')](_0x112e47[_0x6cb6('0x2c')][_0x6cb6('0x1c')]);_0x5c525b[_0x6cb6('0x1b')]=qs[_0x6cb6('0x1b')](_0x112e47[_0x6cb6('0x2c')][_0x6cb6('0x1b')]);}_0x5c525b[_0x6cb6('0x31')]=qs['sort'](_0x112e47[_0x6cb6('0x2c')][_0x6cb6('0x32')]);_0x5c525b[_0x6cb6('0x33')]=qs[_0x6cb6('0x2b')](_['pick'](_0x112e47['query'],_0x4ea573['filters']));if(_0x112e47[_0x6cb6('0x2c')][_0x6cb6('0x34')]){_0x5c525b[_0x6cb6('0x33')]=_[_0x6cb6('0x35')](_0x5c525b[_0x6cb6('0x33')],{'$or':_[_0x6cb6('0x36')](_0x462dbf,function(_0x317c84){if(_0x317c84[_0x6cb6('0x37')]['key']!==_0x6cb6('0x38')){var _0x559b1d={};_0x559b1d[_0x317c84[_0x6cb6('0x39')]]={'$like':'%'+_0x112e47[_0x6cb6('0x2c')][_0x6cb6('0x34')]+'%'};return _0x559b1d;}})});}_0x5c525b=_[_0x6cb6('0x35')]({},_0x5c525b,_0x112e47[_0x6cb6('0x3a')]);var _0x3bd60c={'where':_0x5c525b[_0x6cb6('0x33')]};return db['SmsTransferReport'][_0x6cb6('0x1a')](_0x3bd60c)['then'](function(_0x2b7c93){_0x2dc6c9[_0x6cb6('0x1a')]=_0x2b7c93;if(_0x112e47[_0x6cb6('0x2c')]['includeAll']){_0x5c525b['include']=[{'all':!![]}];}return db[_0x6cb6('0x27')]['findAll'](_0x5c525b);})[_0x6cb6('0x20')](function(_0x296a3b){_0x2dc6c9[_0x6cb6('0x3b')]=_0x296a3b;return _0x2dc6c9;})[_0x6cb6('0x20')](respondWithFilteredResult(_0x47a81b,_0x5c525b))[_0x6cb6('0x3c')](handleError(_0x47a81b,null));};exports[_0x6cb6('0x3d')]=function(_0x3652ca,_0x4ef633){var _0x359bd1={'raw':!![],'where':{'id':_0x3652ca['params']['id']}},_0x102c1b={};_0x102c1b[_0x6cb6('0x29')]=_[_0x6cb6('0x2a')](db[_0x6cb6('0x27')][_0x6cb6('0x28')]);_0x102c1b[_0x6cb6('0x2c')]=_[_0x6cb6('0x2a')](_0x3652ca['query']);_0x102c1b['filters']=_[_0x6cb6('0x3e')](_0x102c1b['model'],_0x102c1b['query']);_0x359bd1[_0x6cb6('0x2d')]=_['intersection'](_0x102c1b[_0x6cb6('0x29')],qs[_0x6cb6('0x2e')](_0x3652ca['query']['fields']));_0x359bd1[_0x6cb6('0x2d')]=_0x359bd1['attributes'][_0x6cb6('0x2f')]?_0x359bd1[_0x6cb6('0x2d')]:_0x102c1b['model'];if(_0x3652ca[_0x6cb6('0x2c')][_0x6cb6('0x3f')]){_0x359bd1['include']=[{'all':!![]}];}_0x359bd1=_[_0x6cb6('0x35')]({},_0x359bd1,_0x3652ca['options']);return db[_0x6cb6('0x27')][_0x6cb6('0x40')](_0x359bd1)['then'](handleEntityNotFound(_0x4ef633,null))[_0x6cb6('0x20')](respondWithResult(_0x4ef633,null))[_0x6cb6('0x3c')](handleError(_0x4ef633,null));};exports['create']=function(_0x5e1492,_0x165f0e){return db[_0x6cb6('0x27')][_0x6cb6('0x41')](_0x5e1492['body'],{})[_0x6cb6('0x20')](respondWithResult(_0x165f0e,0xc9))[_0x6cb6('0x3c')](handleError(_0x165f0e,null));};exports['update']=function(_0x3cf0b4,_0xb3f496){if(_0x3cf0b4[_0x6cb6('0x42')]['id']){delete _0x3cf0b4['body']['id'];}return db[_0x6cb6('0x27')][_0x6cb6('0x40')]({'where':{'id':_0x3cf0b4[_0x6cb6('0x43')]['id']}})[_0x6cb6('0x20')](handleEntityNotFound(_0xb3f496,null))[_0x6cb6('0x20')](saveUpdates(_0x3cf0b4[_0x6cb6('0x42')],null))['then'](respondWithResult(_0xb3f496,null))[_0x6cb6('0x3c')](handleError(_0xb3f496,null));};exports['destroy']=function(_0x4c3a3a,_0x29cb39){return db[_0x6cb6('0x27')]['find']({'where':{'id':_0x4c3a3a[_0x6cb6('0x43')]['id']}})['then'](handleEntityNotFound(_0x29cb39,null))[_0x6cb6('0x20')](removeEntity(_0x29cb39,null))[_0x6cb6('0x3c')](handleError(_0x29cb39,null));};exports[_0x6cb6('0x44')]=function(_0x5ee84a,_0x394f72){return db[_0x6cb6('0x27')][_0x6cb6('0x44')]()['then'](respondWithResult(_0x394f72,null))[_0x6cb6('0x3c')](handleError(_0x394f72,null));};
\ No newline at end of file
index 96bf223..17cd0de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xad65=['uniqueid','lodash','util','moment','bluebird','request-promise','rimraf','../../config/environment','./smsTransferReport.attributes','exports','define','SmsTransferReport','report_sms_transfer'];(function(_0x3a477c,_0x2c5b01){var _0xa8d287=function(_0x403baa){while(--_0x403baa){_0x3a477c['push'](_0x3a477c['shift']());}};_0xa8d287(++_0x2c5b01);}(_0xad65,0x187));var _0x5ad6=function(_0x214ed7,_0x3a938c){_0x214ed7=_0x214ed7-0x0;var _0x3f05d5=_0xad65[_0x214ed7];return _0x3f05d5;};'use strict';var _=require(_0x5ad6('0x0'));var util=require(_0x5ad6('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x5ad6('0x2'));var BPromise=require(_0x5ad6('0x3'));var rp=require(_0x5ad6('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x5ad6('0x5'));var config=require(_0x5ad6('0x6'));var attributes=require(_0x5ad6('0x7'));module[_0x5ad6('0x8')]=function(_0x386410,_0x583bb7){return _0x386410[_0x5ad6('0x9')](_0x5ad6('0xa'),attributes,{'tableName':_0x5ad6('0xb'),'paranoid':![],'indexes':[{'name':_0x5ad6('0xc'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x4905=['../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment','./smsTransferReport.attributes','define','SmsTransferReport','report_sms_transfer','uniqueid','util'];(function(_0x3d3b66,_0x26362c){var _0x36d72c=function(_0x41e0c0){while(--_0x41e0c0){_0x3d3b66['push'](_0x3d3b66['shift']());}};_0x36d72c(++_0x26362c);}(_0x4905,0x1b9));var _0x5490=function(_0x10d34b,_0x4fef76){_0x10d34b=_0x10d34b-0x0;var _0x92b0bf=_0x4905[_0x10d34b];return _0x92b0bf;};'use strict';var _=require('lodash');var util=require(_0x5490('0x0'));var logger=require(_0x5490('0x1'))('api');var moment=require(_0x5490('0x2'));var BPromise=require(_0x5490('0x3'));var rp=require(_0x5490('0x4'));var fs=require('fs');var path=require(_0x5490('0x5'));var rimraf=require(_0x5490('0x6'));var config=require(_0x5490('0x7'));var attributes=require(_0x5490('0x8'));module['exports']=function(_0x265a39,_0x27efbd){return _0x265a39[_0x5490('0x9')](_0x5490('0xa'),attributes,{'tableName':_0x5490('0xb'),'paranoid':![],'indexes':[{'name':_0x5490('0xc'),'fields':[_0x5490('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
index f11a575..68b2248 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf963=['lodash','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','client','request','request\x20sent','debug','SmsTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code','SmsTransferReport,\x20%s,\x20%s','message','result','catch'];(function(_0x3d4876,_0x366386){var _0x58ca9d=function(_0x5bd045){while(--_0x5bd045){_0x3d4876['push'](_0x3d4876['shift']());}};_0x58ca9d(++_0x366386);}(_0xf963,0x11d));var _0x3f96=function(_0x13e741,_0x5d3c24){_0x13e741=_0x13e741-0x0;var _0x3f8bb3=_0xf963[_0x13e741];return _0x3f8bb3;};'use strict';var _=require(_0x3f96('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x3f96('0x1'));var rs=require(_0x3f96('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x3f96('0x3'));var logger=require(_0x3f96('0x4'))(_0x3f96('0x5'));var config=require(_0x3f96('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x3f96('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1fa84a,_0x43633b,_0x422ffd){return new BPromise(function(_0x478a28,_0x14e2af){return client[_0x3f96('0x8')](_0x1fa84a,_0x422ffd)['then'](function(_0x50a3bf){logger['info']('SmsTransferReport,\x20%s,\x20%s',_0x43633b,_0x3f96('0x9'));logger[_0x3f96('0xa')](_0x3f96('0xb'),_0x43633b,_0x3f96('0x9'),JSON[_0x3f96('0xc')](_0x50a3bf));if(_0x50a3bf['error']){if(_0x50a3bf[_0x3f96('0xd')][_0x3f96('0xe')]===0x1f4){logger[_0x3f96('0xd')](_0x3f96('0xf'),_0x43633b,_0x50a3bf['error'][_0x3f96('0x10')]);return _0x14e2af(_0x50a3bf['error'][_0x3f96('0x10')]);}logger[_0x3f96('0xd')](_0x3f96('0xf'),_0x43633b,_0x50a3bf['error'][_0x3f96('0x10')]);return _0x478a28(_0x50a3bf['error'][_0x3f96('0x10')]);}else{logger['info']('SmsTransferReport,\x20%s,\x20%s',_0x43633b,'request\x20sent');_0x478a28(_0x50a3bf[_0x3f96('0x11')][_0x3f96('0x10')]);}})[_0x3f96('0x12')](function(_0x71cde7){logger['error'](_0x3f96('0xf'),_0x43633b,_0x71cde7);_0x14e2af(_0x71cde7);});});}
\ No newline at end of file
+var _0x3588=['rpc','../../config/environment','jayson/promise','http','request','then','SmsTransferReport,\x20%s,\x20%s','debug','SmsTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x3588,0x82));var _0x8358=function(_0x394c4c,_0x201031){_0x394c4c=_0x394c4c-0x0;var _0x5bfa5a=_0x3588[_0x394c4c];return _0x5bfa5a;};'use strict';var _=require(_0x8358('0x0'));var util=require(_0x8358('0x1'));var moment=require(_0x8358('0x2'));var BPromise=require(_0x8358('0x3'));var rs=require(_0x8358('0x4'));var fs=require('fs');var Redis=require(_0x8358('0x5'));var db=require(_0x8358('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0x8358('0x7'))(_0x8358('0x8'));var config=require(_0x8358('0x9'));var jayson=require(_0x8358('0xa'));var client=jayson['client'][_0x8358('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x846201,_0x49d515,_0x11d369){return new BPromise(function(_0x583720,_0x1bf7dc){return client[_0x8358('0xc')](_0x846201,_0x11d369)[_0x8358('0xd')](function(_0x1085d9){logger['info'](_0x8358('0xe'),_0x49d515,'request\x20sent');logger[_0x8358('0xf')](_0x8358('0x10'),_0x49d515,_0x8358('0x11'),JSON[_0x8358('0x12')](_0x1085d9));if(_0x1085d9[_0x8358('0x13')]){if(_0x1085d9[_0x8358('0x13')][_0x8358('0x14')]===0x1f4){logger[_0x8358('0x13')](_0x8358('0xe'),_0x49d515,_0x1085d9[_0x8358('0x13')][_0x8358('0x15')]);return _0x1bf7dc(_0x1085d9[_0x8358('0x13')][_0x8358('0x15')]);}logger[_0x8358('0x13')](_0x8358('0xe'),_0x49d515,_0x1085d9[_0x8358('0x13')]['message']);return _0x583720(_0x1085d9['error'][_0x8358('0x15')]);}else{logger['info'](_0x8358('0xe'),_0x49d515,'request\x20sent');_0x583720(_0x1085d9['result']['message']);}})[_0x8358('0x16')](function(_0x31d71f){logger[_0x8358('0x13')](_0x8358('0xe'),_0x49d515,_0x31d71f);_0x1bf7dc(_0x31d71f);});});}
\ No newline at end of file
index 0585d77..b18077b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1b23=['%s-%s%s','extname','now','single','file','create','put','/:id','update','delete','exports','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./sound.controller','get','isAuthenticated','show','/:id/download','diskStorage','join','server/files/sounds/original/','originalname','replace','format'];(function(_0x589fbf,_0x6be0c8){var _0x44b513=function(_0xc3b0d5){while(--_0xc3b0d5){_0x589fbf['push'](_0x589fbf['shift']());}};_0x44b513(++_0x6be0c8);}(_0x1b23,0xfe));var _0x31b2=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x1b23[_0x19e35c];return _0x3e1fe8;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var timeout=require(_0x31b2('0x0'));var express=require('express');var router=express[_0x31b2('0x1')]();var auth=require(_0x31b2('0x2'));var interaction=require(_0x31b2('0x3'));var config=require(_0x31b2('0x4'));var controller=require(_0x31b2('0x5'));router[_0x31b2('0x6')]('/',auth[_0x31b2('0x7')](),controller['index']);router[_0x31b2('0x6')]('/:id',auth[_0x31b2('0x7')](),controller[_0x31b2('0x8')]);router[_0x31b2('0x6')](_0x31b2('0x9'),auth[_0x31b2('0x7')](),controller['download']);var upload=multer({'storage':multer[_0x31b2('0xa')]({'destination':function(_0x1c3adb,_0x3220fc,_0x1d328d){_0x1d328d(null,path[_0x31b2('0xb')](config['root'],_0x31b2('0xc')));},'filename':function(_0x3b8072,_0x35a9d0,_0x522e06){_0x35a9d0[_0x31b2('0xd')]=_0x35a9d0[_0x31b2('0xd')][_0x31b2('0xe')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x522e06(null,util[_0x31b2('0xf')](_0x31b2('0x10'),path['basename'](_0x35a9d0['originalname'],path[_0x31b2('0x11')](_0x35a9d0['originalname'])),Date[_0x31b2('0x12')](),path[_0x31b2('0x11')](_0x35a9d0[_0x31b2('0xd')])));}})});router['post']('/',upload[_0x31b2('0x13')](_0x31b2('0x14')),controller[_0x31b2('0x15')]);router[_0x31b2('0x16')](_0x31b2('0x17'),auth[_0x31b2('0x7')](),controller[_0x31b2('0x18')]);router['delete'](_0x31b2('0x17'),auth[_0x31b2('0x7')](),controller[_0x31b2('0x19')]);module[_0x31b2('0x1a')]=router;
\ No newline at end of file
+var _0xaccd=['now','post','create','put','update','delete','exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','/:id','/:id/download','download','join','root','originalname','format','%s-%s%s','extname'];(function(_0x3b0731,_0xcf9925){var _0x4204d7=function(_0x635ac5){while(--_0x635ac5){_0x3b0731['push'](_0x3b0731['shift']());}};_0x4204d7(++_0xcf9925);}(_0xaccd,0xcf));var _0xdacc=function(_0x45b2ed,_0xc271d9){_0x45b2ed=_0x45b2ed-0x0;var _0x4797fb=_0xaccd[_0x45b2ed];return _0x4797fb;};'use strict';var multer=require(_0xdacc('0x0'));var util=require('util');var path=require(_0xdacc('0x1'));var timeout=require('connect-timeout');var express=require(_0xdacc('0x2'));var router=express[_0xdacc('0x3')]();var auth=require(_0xdacc('0x4'));var interaction=require(_0xdacc('0x5'));var config=require('../../config/environment');var controller=require('./sound.controller');router[_0xdacc('0x6')]('/',auth[_0xdacc('0x7')](),controller[_0xdacc('0x8')]);router[_0xdacc('0x6')](_0xdacc('0x9'),auth[_0xdacc('0x7')](),controller['show']);router[_0xdacc('0x6')](_0xdacc('0xa'),auth[_0xdacc('0x7')](),controller[_0xdacc('0xb')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x130815,_0x17bc43,_0x4c6a4a){_0x4c6a4a(null,path[_0xdacc('0xc')](config[_0xdacc('0xd')],'server/files/sounds/original/'));},'filename':function(_0x37df60,_0x10a655,_0xeb0721){_0x10a655[_0xdacc('0xe')]=_0x10a655[_0xdacc('0xe')]['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0xeb0721(null,util[_0xdacc('0xf')](_0xdacc('0x10'),path['basename'](_0x10a655[_0xdacc('0xe')],path[_0xdacc('0x11')](_0x10a655['originalname'])),Date[_0xdacc('0x12')](),path[_0xdacc('0x11')](_0x10a655[_0xdacc('0xe')])));}})});router[_0xdacc('0x13')]('/',upload['single']('file'),controller[_0xdacc('0x14')]);router[_0xdacc('0x15')]('/:id',auth[_0xdacc('0x7')](),controller[_0xdacc('0x16')]);router[_0xdacc('0x17')]('/:id',auth[_0xdacc('0x7')](),controller['delete']);module[_0xdacc('0x18')]=router;
\ No newline at end of file
index 97ff647..c187612 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x23db=['exports','STRING','name','FLOAT','BIGINT','INTEGER'];(function(_0x36c5b0,_0x5001da){var _0xf19333=function(_0x1e880a){while(--_0x1e880a){_0x36c5b0['push'](_0x36c5b0['shift']());}};_0xf19333(++_0x5001da);}(_0x23db,0xf0));var _0xb23d=function(_0x49ca18,_0x5e6d05){_0x49ca18=_0x49ca18-0x0;var _0x145d54=_0x23db[_0x49ca18];return _0x145d54;};'use strict';var Sequelize=require('sequelize');module[_0xb23d('0x0')]={'name':{'type':Sequelize[_0xb23d('0x1')],'unique':_0xb23d('0x2'),'allowNull':![]},'save_name':{'type':Sequelize[_0xb23d('0x1')]},'display_name':{'type':Sequelize[_0xb23d('0x1')],'defaultValue':''},'description':{'type':Sequelize[_0xb23d('0x1')]},'original_format':{'type':Sequelize[_0xb23d('0x1')]},'original_duration':{'type':Sequelize[_0xb23d('0x3')]},'original_sampleCount':{'type':Sequelize[_0xb23d('0x4')]},'original_channelCount':{'type':Sequelize[_0xb23d('0x5')]},'original_bitRate':{'type':Sequelize[_0xb23d('0x4')]},'original_sampleRate':{'type':Sequelize['INTEGER']},'converted_format':{'type':Sequelize[_0xb23d('0x1')]},'converted_duration':{'type':Sequelize[_0xb23d('0x3')]},'converted_sampleCount':{'type':Sequelize[_0xb23d('0x4')]},'converted_channelCount':{'type':Sequelize[_0xb23d('0x5')]},'converted_bitRate':{'type':Sequelize[_0xb23d('0x4')]},'converted_sampleRate':{'type':Sequelize['INTEGER']}};
\ No newline at end of file
+var _0x1a5d=['STRING','FLOAT','INTEGER','BIGINT','sequelize','exports'];(function(_0x23a1ac,_0x4db044){var _0x84fd94=function(_0xe576ad){while(--_0xe576ad){_0x23a1ac['push'](_0x23a1ac['shift']());}};_0x84fd94(++_0x4db044);}(_0x1a5d,0x15a));var _0xd1a5=function(_0x20e485,_0x47d35c){_0x20e485=_0x20e485-0x0;var _0x3b0c99=_0x1a5d[_0x20e485];return _0x3b0c99;};'use strict';var Sequelize=require(_0xd1a5('0x0'));module[_0xd1a5('0x1')]={'name':{'type':Sequelize[_0xd1a5('0x2')],'unique':'name','allowNull':![]},'save_name':{'type':Sequelize[_0xd1a5('0x2')]},'display_name':{'type':Sequelize[_0xd1a5('0x2')],'defaultValue':''},'description':{'type':Sequelize[_0xd1a5('0x2')]},'original_format':{'type':Sequelize['STRING']},'original_duration':{'type':Sequelize[_0xd1a5('0x3')]},'original_sampleCount':{'type':Sequelize['BIGINT']},'original_channelCount':{'type':Sequelize['INTEGER']},'original_bitRate':{'type':Sequelize['BIGINT']},'original_sampleRate':{'type':Sequelize[_0xd1a5('0x4')]},'converted_format':{'type':Sequelize['STRING']},'converted_duration':{'type':Sequelize[_0xd1a5('0x3')]},'converted_sampleCount':{'type':Sequelize[_0xd1a5('0x5')]},'converted_channelCount':{'type':Sequelize[_0xd1a5('0x4')]},'converted_bitRate':{'type':Sequelize[_0xd1a5('0x5')]},'converted_sampleRate':{'type':Sequelize[_0xd1a5('0x4')]}};
\ No newline at end of file
index 2ee92f1..2d5032e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x88fd=['params','find','download','existsSync','join','server/files/sounds/converted','save_name','converted_format','Sequelize','Sound\x20not\x20found','format','%s.%s','create','file','originalname','basename','extname','substring','root','server/files/sounds/original','filename','info','Sound\x20upload\x20filepath:\x20%s','Sound\x20upload\x20destination:\x20%s','0777','wav','unlinkSync','original_duration','duration','sampleCount','original_channelCount','channelCount','original_bitRate','bitRate','sampleRate','dest','converted_duration','converted_sampleCount','converted_channelCount','converted_bitRate','converted_sampleRate','chmodSync','body','role','Unable\x20to\x20retrieve\x20the\x20current\x20user','user','get','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','description','delete','original_format','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','util','to-csv','ejs','squel','crypto','desk.js','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','sendStatus','status','json','count','offset','set','apply','reject','save','destroy','Sounds','UserProfileResource','then','end','error','stack','name','send','index','Sound','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','limit','sort','pick','filter','merge','where','map','key','VIRTUAL','field','options','includeAll','include','findAll','catch','show'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x88fd,0x18e));var _0xd88f=function(_0x539590,_0x3a99b9){_0x539590=_0x539590-0x0;var _0x464703=_0x88fd[_0x539590];return _0x464703;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xd88f('0x0'));var rimraf=require(_0xd88f('0x1'));var zipdir=require(_0xd88f('0x2'));var jsonpatch=require(_0xd88f('0x3'));var rp=require('request-promise');var moment=require(_0xd88f('0x4'));var BPromise=require(_0xd88f('0x5'));var Mustache=require('mustache');var util=require(_0xd88f('0x6'));var path=require('path');var sox=require('sox');var csv=require(_0xd88f('0x7'));var ejs=require(_0xd88f('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0xd88f('0x9'));var crypto=require(_0xd88f('0xa'));var jsforce=require('jsforce');var deskjs=require(_0xd88f('0xb'));var toCsv=require(_0xd88f('0x7'));var querystring=require(_0xd88f('0xc'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xd88f('0xd'));var qs=require(_0xd88f('0xe'));var hardwareService=require(_0xd88f('0xf'));var logger=require(_0xd88f('0x10'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2b3fa9,_0x111af1){_0x111af1=_0x111af1||0xcc;return function(_0x24f9bf){if(_0x24f9bf){return _0x2b3fa9[_0xd88f('0x11')](_0x111af1);}return _0x2b3fa9[_0xd88f('0x12')](_0x111af1)['end']();};}function respondWithResult(_0x4d98a4,_0xa32114){_0xa32114=_0xa32114||0xc8;return function(_0x87bd00){if(_0x87bd00){return _0x4d98a4[_0xd88f('0x12')](_0xa32114)[_0xd88f('0x13')](_0x87bd00);}};}function respondWithFilteredResult(_0x1089f9,_0x56877b){return function(_0x5d6b37){if(_0x5d6b37){var _0x170be7=_0x5d6b37[_0xd88f('0x14')],_0x376b9f=_0x56877b[_0xd88f('0x15')],_0x2d73d3=_0x56877b['offset']+_0x56877b['limit'],_0x5e318e;if(_0x2d73d3>=_0x170be7){_0x2d73d3=_0x170be7;_0x5e318e=0xc8;}else{_0x5e318e=0xce;}_0x1089f9['status'](_0x5e318e);return _0x1089f9[_0xd88f('0x16')]('Content-Range',_0x376b9f+'-'+_0x2d73d3+'/'+_0x170be7)[_0xd88f('0x13')](_0x5d6b37);}return null;};}function patchUpdates(_0x45503a){return function(_0x1e66ed){try{jsonpatch[_0xd88f('0x17')](_0x1e66ed,_0x45503a,!![]);}catch(_0x4a8832){return BPromise[_0xd88f('0x18')](_0x4a8832);}return _0x1e66ed[_0xd88f('0x19')]();};}function saveUpdates(_0x203501,_0x106544){return function(_0x412c6b){if(_0x412c6b){return _0x412c6b['update'](_0x203501)['then'](function(_0x3544a9){return _0x3544a9;});}return null;};}function removeEntity(_0x37d408,_0x3d1125){return function(_0x5336d3){if(_0x5336d3){return _0x5336d3[_0xd88f('0x1a')]()['then'](function(){var _0x560dcc=_0x5336d3['get']({'plain':!![]});var _0x563dec=_0xd88f('0x1b');return db[_0xd88f('0x1c')][_0xd88f('0x1a')]({'where':{'type':_0x563dec,'resourceId':_0x560dcc['id']}})[_0xd88f('0x1d')](function(){return _0x5336d3;});})[_0xd88f('0x1d')](function(){_0x37d408['status'](0xcc)[_0xd88f('0x1e')]();});}};}function handleEntityNotFound(_0x5d6147,_0x4f416c){return function(_0x1c9658){if(!_0x1c9658){_0x5d6147[_0xd88f('0x11')](0x194);}return _0x1c9658;};}function handleError(_0x588c38,_0x40622d){_0x40622d=_0x40622d||0x1f4;return function(_0xd351be){logger[_0xd88f('0x1f')](_0xd351be[_0xd88f('0x20')]);if(_0xd351be[_0xd88f('0x21')]){delete _0xd351be[_0xd88f('0x21')];}_0x588c38['status'](_0x40622d)[_0xd88f('0x22')](_0xd351be);};}exports[_0xd88f('0x23')]=function(_0x152994,_0x5076c2){var _0x4dc233={},_0x40d9ba={},_0x380416={'count':0x0,'rows':[]};var _0x4ad4a9=db[_0xd88f('0x24')][_0xd88f('0x25')];_0x40d9ba[_0xd88f('0x26')]=_[_0xd88f('0x27')](_0x4ad4a9);_0x40d9ba['query']=_[_0xd88f('0x27')](_0x152994[_0xd88f('0x28')]);_0x40d9ba[_0xd88f('0x29')]=_[_0xd88f('0x2a')](_0x40d9ba[_0xd88f('0x26')],_0x40d9ba[_0xd88f('0x28')]);_0x4dc233[_0xd88f('0x2b')]=_[_0xd88f('0x2a')](_0x40d9ba[_0xd88f('0x26')],qs[_0xd88f('0x2c')](_0x152994[_0xd88f('0x28')]['fields']));_0x4dc233[_0xd88f('0x2b')]=_0x4dc233[_0xd88f('0x2b')][_0xd88f('0x2d')]?_0x4dc233[_0xd88f('0x2b')]:_0x40d9ba['model'];if(!_0x152994['query']['hasOwnProperty']('nolimit')){_0x4dc233[_0xd88f('0x2e')]=qs[_0xd88f('0x2e')](_0x152994['query'][_0xd88f('0x2e')]);_0x4dc233['offset']=qs[_0xd88f('0x15')](_0x152994[_0xd88f('0x28')]['offset']);}_0x4dc233['order']=qs[_0xd88f('0x2f')](_0x152994[_0xd88f('0x28')][_0xd88f('0x2f')]);_0x4dc233['where']=qs[_0xd88f('0x29')](_[_0xd88f('0x30')](_0x152994['query'],_0x40d9ba[_0xd88f('0x29')]));if(_0x152994[_0xd88f('0x28')][_0xd88f('0x31')]){_0x4dc233['where']=_[_0xd88f('0x32')](_0x4dc233[_0xd88f('0x33')],{'$or':_[_0xd88f('0x34')](_0x4ad4a9,function(_0x5accb0){if(_0x5accb0['type'][_0xd88f('0x35')]!==_0xd88f('0x36')){var _0x14c413={};_0x14c413[_0x5accb0[_0xd88f('0x37')]]={'$like':'%'+_0x152994[_0xd88f('0x28')][_0xd88f('0x31')]+'%'};return _0x14c413;}})});}_0x4dc233=_['merge']({},_0x4dc233,_0x152994[_0xd88f('0x38')]);var _0x582be3={'where':_0x4dc233[_0xd88f('0x33')]};return db[_0xd88f('0x24')][_0xd88f('0x14')](_0x582be3)[_0xd88f('0x1d')](function(_0x422187){_0x380416['count']=_0x422187;if(_0x152994['query'][_0xd88f('0x39')]){_0x4dc233[_0xd88f('0x3a')]=[{'all':!![]}];}return db[_0xd88f('0x24')][_0xd88f('0x3b')](_0x4dc233);})['then'](function(_0x42582b){_0x380416['rows']=_0x42582b;return _0x380416;})[_0xd88f('0x1d')](respondWithFilteredResult(_0x5076c2,_0x4dc233))[_0xd88f('0x3c')](handleError(_0x5076c2,null));};exports[_0xd88f('0x3d')]=function(_0x2d368e,_0x26260e){var _0x5ce21a={'raw':!![],'where':{'id':_0x2d368e[_0xd88f('0x3e')]['id']}},_0x61cd70={};_0x61cd70[_0xd88f('0x26')]=_[_0xd88f('0x27')](db[_0xd88f('0x24')][_0xd88f('0x25')]);_0x61cd70[_0xd88f('0x28')]=_[_0xd88f('0x27')](_0x2d368e[_0xd88f('0x28')]);_0x61cd70[_0xd88f('0x29')]=_[_0xd88f('0x2a')](_0x61cd70[_0xd88f('0x26')],_0x61cd70[_0xd88f('0x28')]);_0x5ce21a[_0xd88f('0x2b')]=_[_0xd88f('0x2a')](_0x61cd70[_0xd88f('0x26')],qs[_0xd88f('0x2c')](_0x2d368e[_0xd88f('0x28')][_0xd88f('0x2c')]));_0x5ce21a[_0xd88f('0x2b')]=_0x5ce21a['attributes'][_0xd88f('0x2d')]?_0x5ce21a['attributes']:_0x61cd70[_0xd88f('0x26')];if(_0x2d368e['query']['includeAll']){_0x5ce21a[_0xd88f('0x3a')]=[{'all':!![]}];}_0x5ce21a=_[_0xd88f('0x32')]({},_0x5ce21a,_0x2d368e['options']);return db[_0xd88f('0x24')][_0xd88f('0x3f')](_0x5ce21a)[_0xd88f('0x1d')](handleEntityNotFound(_0x26260e,null))[_0xd88f('0x1d')](respondWithResult(_0x26260e,null))['catch'](handleError(_0x26260e,null));};exports[_0xd88f('0x40')]=function(_0x5a7e98,_0x38e8e3,_0x134a3e){return db[_0xd88f('0x24')][_0xd88f('0x3f')]({'where':{'id':_0x5a7e98[_0xd88f('0x3e')]['id']},'attributes':[_0xd88f('0x21'),'save_name','converted_format'],'raw':!![]})['then'](handleEntityNotFound(_0x38e8e3,null))[_0xd88f('0x1d')](function(_0x56a292){if(_0x56a292){if(!fs[_0xd88f('0x41')](path[_0xd88f('0x42')](config['root'],_0xd88f('0x43'),_0x56a292[_0xd88f('0x44')]+'.'+_0x56a292[_0xd88f('0x45')]))){throw new db[(_0xd88f('0x46'))]['ValidationError'](_0xd88f('0x47'));}return _0x38e8e3[_0xd88f('0x40')](path[_0xd88f('0x42')](config['root'],_0xd88f('0x43'),util['format']('%s.%s',_0x56a292[_0xd88f('0x44')],_0x56a292['converted_format'])),util[_0xd88f('0x48')](_0xd88f('0x49'),_0x56a292[_0xd88f('0x21')],_0x56a292[_0xd88f('0x45')]));}return null;})[_0xd88f('0x3c')](handleError(_0x38e8e3,null));};exports[_0xd88f('0x4a')]=function(_0xb07581,_0x1a850d,_0xb7cec1){var _0x3ea574={'name':path['basename'](_0xb07581[_0xd88f('0x4b')][_0xd88f('0x4c')],path['extname'](_0xb07581[_0xd88f('0x4b')]['originalname'])),'save_name':path[_0xd88f('0x4d')](_0xb07581['file']['filename'],path[_0xd88f('0x4e')](_0xb07581[_0xd88f('0x4b')]['filename'])),'original_format':path[_0xd88f('0x4e')](_0xb07581[_0xd88f('0x4b')][_0xd88f('0x4c')])[_0xd88f('0x4f')](0x1),'converted_format':'wav'};var _0x57ee30=path['join'](config[_0xd88f('0x50')],_0xd88f('0x51'),_0xb07581[_0xd88f('0x4b')][_0xd88f('0x52')]);var _0x5062aa=path[_0xd88f('0x42')](config[_0xd88f('0x50')],_0xd88f('0x43'),util[_0xd88f('0x48')]('%s.%s',path[_0xd88f('0x4d')](_0xb07581[_0xd88f('0x4b')][_0xd88f('0x52')],path[_0xd88f('0x4e')](_0xb07581[_0xd88f('0x4b')][_0xd88f('0x52')])),_0x3ea574['converted_format']));logger[_0xd88f('0x53')](_0xd88f('0x54'),_0x57ee30);logger['info'](_0xd88f('0x55'),_0x5062aa);try{fs['chmodSync'](_0x57ee30,parseInt(_0xd88f('0x56'),0x8));var _0x5039f0=sox['transcode'](_0x57ee30,_0x5062aa,{'sampleRate':0x1f40,'format':_0xd88f('0x57'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x5039f0['on'](_0xd88f('0x1f'),function(_0x432fe1){fs[_0xd88f('0x58')](_0x57ee30);_0x1a850d[_0xd88f('0x12')](0x1f4)[_0xd88f('0x22')](_0x432fe1);});_0x5039f0['on']('src',function(_0x45b587){_0x3ea574[_0xd88f('0x59')]=isNaN(_0x45b587[_0xd88f('0x5a')])?null:_0x45b587['duration']*0x3e8;_0x3ea574['original_sampleCount']=isNaN(_0x45b587['sampleCount'])?null:_0x45b587[_0xd88f('0x5b')];_0x3ea574[_0xd88f('0x5c')]=isNaN(_0x45b587[_0xd88f('0x5d')])?null:_0x45b587[_0xd88f('0x5d')];_0x3ea574[_0xd88f('0x5e')]=isNaN(_0x45b587[_0xd88f('0x5f')])?null:_0x45b587[_0xd88f('0x5f')];_0x3ea574['original_sampleRate']=isNaN(_0x45b587[_0xd88f('0x60')])?null:_0x45b587[_0xd88f('0x60')];});_0x5039f0['on'](_0xd88f('0x61'),function(_0x744631){_0x3ea574[_0xd88f('0x62')]=isNaN(_0x744631[_0xd88f('0x5a')])?null:_0x744631[_0xd88f('0x5a')]*0x3e8;_0x3ea574[_0xd88f('0x63')]=isNaN(_0x744631[_0xd88f('0x5b')])?null:_0x744631[_0xd88f('0x5b')];_0x3ea574[_0xd88f('0x64')]=isNaN(_0x744631[_0xd88f('0x5d')])?null:_0x744631[_0xd88f('0x5d')];_0x3ea574[_0xd88f('0x65')]=isNaN(_0x744631[_0xd88f('0x5f')])?null:_0x744631[_0xd88f('0x5f')];_0x3ea574[_0xd88f('0x66')]=isNaN(_0x744631[_0xd88f('0x60')])?null:_0x744631[_0xd88f('0x60')];});_0x5039f0['on'](_0xd88f('0x1e'),function(){fs[_0xd88f('0x67')](_0x5062aa,parseInt('0777',0x8));return db[_0xd88f('0x24')][_0xd88f('0x4a')](_0x3ea574)[_0xd88f('0x1d')](function(_0x3e0065){var _0x4f4fe5={'role':_0xb07581[_0xd88f('0x68')][_0xd88f('0x69')],'userProfileId':_0xb07581[_0xd88f('0x68')]['userProfileId']};if(!_0x4f4fe5)throw new Error(_0xd88f('0x6a'));if(_0x4f4fe5[_0xd88f('0x69')]===_0xd88f('0x6b')){var _0x1a932b=_0x3e0065[_0xd88f('0x6c')]({'plain':!![]});return db['UserProfileSection'][_0xd88f('0x3f')]({'where':{'name':_0xd88f('0x1b'),'userProfileId':_0x4f4fe5[_0xd88f('0x6d')]},'raw':!![]})[_0xd88f('0x1d')](function(_0x1566e4){if(_0x1566e4&&_0x1566e4['autoAssociation']===0x0){return db['UserProfileResource'][_0xd88f('0x4a')]({'name':_0x1a932b[_0xd88f('0x21')],'resourceId':_0x1a932b['id'],'type':_0x1566e4[_0xd88f('0x21')],'sectionId':_0x1566e4['id']},{})[_0xd88f('0x1d')](function(){return _0x3e0065;});}else{return _0x3e0065;}})['catch'](function(_0xdd5974){logger[_0xd88f('0x1f')](_0xd88f('0x6e'),_0xdd5974);throw _0xdd5974;});}return _0x3e0065;})[_0xd88f('0x1d')](respondWithResult(_0x1a850d,null))[_0xd88f('0x3c')](handleError(_0x1a850d,null));});_0x5039f0['start']();}catch(_0x42d96a){_0x1a850d[_0xd88f('0x12')](0x1f4)[_0xd88f('0x22')](_0x42d96a);}};exports[_0xd88f('0x6f')]=function(_0x2dd6ea,_0x294f3b,_0x393e9c){return db[_0xd88f('0x24')][_0xd88f('0x3f')]({'where':{'id':_0x2dd6ea[_0xd88f('0x3e')]['id']}})['then'](handleEntityNotFound(_0x294f3b,null))[_0xd88f('0x1d')](saveUpdates(_['pick'](_0x2dd6ea[_0xd88f('0x68')],[_0xd88f('0x21'),_0xd88f('0x70')]),null))[_0xd88f('0x1d')](respondWithResult(_0x294f3b,null))[_0xd88f('0x3c')](handleError(_0x294f3b,null));};exports[_0xd88f('0x71')]=function(_0x594e72,_0x22ef33,_0x3a77cc){return db[_0xd88f('0x24')][_0xd88f('0x3f')]({'where':{'id':_0x594e72['params']['id']}})[_0xd88f('0x1d')](function(_0x3230c3){if(_0x3230c3){return _0x3230c3[_0xd88f('0x1a')]();}})['then'](function(_0x20c334){var _0x177d9b=path[_0xd88f('0x42')](config['root'],_0xd88f('0x51'),util['format'](_0xd88f('0x49'),_0x20c334[_0xd88f('0x44')],_0x20c334[_0xd88f('0x72')]));var _0x55d1f8=path['join'](config[_0xd88f('0x50')],_0xd88f('0x43'),util[_0xd88f('0x48')]('%s.%s',_0x20c334['save_name'],_0x20c334[_0xd88f('0x45')]));fs[_0xd88f('0x58')](_0x177d9b);fs[_0xd88f('0x58')](_0x55d1f8);return _0x20c334;})[_0xd88f('0x1d')](function(_0x4c7716){if(_0x4c7716){return _0x22ef33[_0xd88f('0x12')](0xcc)['end']();}})['then'](handleEntityNotFound(_0x22ef33,null))['catch'](handleError(_0x22ef33,null));};
\ No newline at end of file
+var _0x4b3c=['sampleRate','converted_duration','converted_channelCount','converted_bitRate','chmodSync','body','role','userProfileId','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','Sounds','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','send','params','description','delete','%s.%s','original_format','unlinkSync','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','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','../../config/utils','../../mysqldb','sendStatus','status','end','json','limit','set','Content-Range','apply','reject','save','update','then','destroy','get','UserProfileResource','error','stack','name','index','Sound','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','nolimit','offset','order','sort','where','pick','filter','merge','map','key','field','count','includeAll','findAll','rows','show','find','catch','download','save_name','converted_format','existsSync','join','root','server/files/sounds/converted','Sequelize','Sound\x20not\x20found','format','create','basename','file','originalname','extname','filename','substring','server/files/sounds/original','info','Sound\x20upload\x20filepath:\x20%s','Sound\x20upload\x20destination:\x20%s','0777','transcode','wav','src','original_duration','duration','sampleCount','original_channelCount','channelCount','original_bitRate','bitRate'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x4b3c,0x184));var _0xc4b3=function(_0x106214,_0x454b8d){_0x106214=_0x106214-0x0;var _0x5f5cea=_0x4b3c[_0x106214];return _0x5f5cea;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xc4b3('0x0'));var zipdir=require(_0xc4b3('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0xc4b3('0x2'));var moment=require(_0xc4b3('0x3'));var BPromise=require(_0xc4b3('0x4'));var Mustache=require(_0xc4b3('0x5'));var util=require(_0xc4b3('0x6'));var path=require(_0xc4b3('0x7'));var sox=require(_0xc4b3('0x8'));var csv=require(_0xc4b3('0x9'));var ejs=require(_0xc4b3('0xa'));var fs=require('fs');var _=require(_0xc4b3('0xb'));var squel=require(_0xc4b3('0xc'));var crypto=require(_0xc4b3('0xd'));var jsforce=require('jsforce');var deskjs=require(_0xc4b3('0xe'));var toCsv=require(_0xc4b3('0x9'));var querystring=require(_0xc4b3('0xf'));var Papa=require(_0xc4b3('0x10'));var Redis=require(_0xc4b3('0x11'));var authService=require(_0xc4b3('0x12'));var qs=require(_0xc4b3('0x13'));var hardwareService=require(_0xc4b3('0x14'));var logger=require(_0xc4b3('0x15'))(_0xc4b3('0x16'));var utils=require(_0xc4b3('0x17'));var config=require('../../config/environment');var db=require(_0xc4b3('0x18'))['db'];function respondWithStatusCode(_0xb9837d,_0x52cc42){_0x52cc42=_0x52cc42||0xcc;return function(_0x1bd91e){if(_0x1bd91e){return _0xb9837d[_0xc4b3('0x19')](_0x52cc42);}return _0xb9837d[_0xc4b3('0x1a')](_0x52cc42)[_0xc4b3('0x1b')]();};}function respondWithResult(_0x3526da,_0x1faddb){_0x1faddb=_0x1faddb||0xc8;return function(_0x29da95){if(_0x29da95){return _0x3526da['status'](_0x1faddb)[_0xc4b3('0x1c')](_0x29da95);}};}function respondWithFilteredResult(_0x208c51,_0x5bbc56){return function(_0x19d2f6){if(_0x19d2f6){var _0x3ca4cc=_0x19d2f6['count'],_0x14af27=_0x5bbc56['offset'],_0x2a4b37=_0x5bbc56['offset']+_0x5bbc56[_0xc4b3('0x1d')],_0x5b6248;if(_0x2a4b37>=_0x3ca4cc){_0x2a4b37=_0x3ca4cc;_0x5b6248=0xc8;}else{_0x5b6248=0xce;}_0x208c51[_0xc4b3('0x1a')](_0x5b6248);return _0x208c51[_0xc4b3('0x1e')](_0xc4b3('0x1f'),_0x14af27+'-'+_0x2a4b37+'/'+_0x3ca4cc)[_0xc4b3('0x1c')](_0x19d2f6);}return null;};}function patchUpdates(_0x323ead){return function(_0x51f99b){try{jsonpatch[_0xc4b3('0x20')](_0x51f99b,_0x323ead,!![]);}catch(_0x478fb6){return BPromise[_0xc4b3('0x21')](_0x478fb6);}return _0x51f99b[_0xc4b3('0x22')]();};}function saveUpdates(_0x3a2449,_0x23ccaf){return function(_0xe718ab){if(_0xe718ab){return _0xe718ab[_0xc4b3('0x23')](_0x3a2449)[_0xc4b3('0x24')](function(_0x50f0de){return _0x50f0de;});}return null;};}function removeEntity(_0x45dd25,_0x1d414b){return function(_0x103cdf){if(_0x103cdf){return _0x103cdf[_0xc4b3('0x25')]()[_0xc4b3('0x24')](function(){var _0x352da6=_0x103cdf[_0xc4b3('0x26')]({'plain':!![]});var _0x435d5f='Sounds';return db[_0xc4b3('0x27')][_0xc4b3('0x25')]({'where':{'type':_0x435d5f,'resourceId':_0x352da6['id']}})[_0xc4b3('0x24')](function(){return _0x103cdf;});})[_0xc4b3('0x24')](function(){_0x45dd25[_0xc4b3('0x1a')](0xcc)[_0xc4b3('0x1b')]();});}};}function handleEntityNotFound(_0x54f435,_0x370b0f){return function(_0x302180){if(!_0x302180){_0x54f435[_0xc4b3('0x19')](0x194);}return _0x302180;};}function handleError(_0x50aab9,_0x194ae4){_0x194ae4=_0x194ae4||0x1f4;return function(_0x2d330c){logger[_0xc4b3('0x28')](_0x2d330c[_0xc4b3('0x29')]);if(_0x2d330c[_0xc4b3('0x2a')]){delete _0x2d330c[_0xc4b3('0x2a')];}_0x50aab9[_0xc4b3('0x1a')](_0x194ae4)['send'](_0x2d330c);};}exports[_0xc4b3('0x2b')]=function(_0x1823f4,_0xa4ab47){var _0x55fd87={},_0x34d0e0={},_0x20f048={'count':0x0,'rows':[]};var _0x54c5ae=db[_0xc4b3('0x2c')][_0xc4b3('0x2d')];_0x34d0e0[_0xc4b3('0x2e')]=_[_0xc4b3('0x2f')](_0x54c5ae);_0x34d0e0[_0xc4b3('0x30')]=_['keys'](_0x1823f4[_0xc4b3('0x30')]);_0x34d0e0[_0xc4b3('0x31')]=_['intersection'](_0x34d0e0[_0xc4b3('0x2e')],_0x34d0e0['query']);_0x55fd87[_0xc4b3('0x32')]=_[_0xc4b3('0x33')](_0x34d0e0[_0xc4b3('0x2e')],qs[_0xc4b3('0x34')](_0x1823f4[_0xc4b3('0x30')][_0xc4b3('0x34')]));_0x55fd87['attributes']=_0x55fd87[_0xc4b3('0x32')][_0xc4b3('0x35')]?_0x55fd87[_0xc4b3('0x32')]:_0x34d0e0[_0xc4b3('0x2e')];if(!_0x1823f4['query']['hasOwnProperty'](_0xc4b3('0x36'))){_0x55fd87[_0xc4b3('0x1d')]=qs[_0xc4b3('0x1d')](_0x1823f4[_0xc4b3('0x30')][_0xc4b3('0x1d')]);_0x55fd87[_0xc4b3('0x37')]=qs[_0xc4b3('0x37')](_0x1823f4[_0xc4b3('0x30')][_0xc4b3('0x37')]);}_0x55fd87[_0xc4b3('0x38')]=qs[_0xc4b3('0x39')](_0x1823f4[_0xc4b3('0x30')][_0xc4b3('0x39')]);_0x55fd87[_0xc4b3('0x3a')]=qs['filters'](_[_0xc4b3('0x3b')](_0x1823f4[_0xc4b3('0x30')],_0x34d0e0[_0xc4b3('0x31')]));if(_0x1823f4['query'][_0xc4b3('0x3c')]){_0x55fd87[_0xc4b3('0x3a')]=_[_0xc4b3('0x3d')](_0x55fd87[_0xc4b3('0x3a')],{'$or':_[_0xc4b3('0x3e')](_0x54c5ae,function(_0x5f4f58){if(_0x5f4f58['type'][_0xc4b3('0x3f')]!=='VIRTUAL'){var _0x486e62={};_0x486e62[_0x5f4f58[_0xc4b3('0x40')]]={'$like':'%'+_0x1823f4[_0xc4b3('0x30')][_0xc4b3('0x3c')]+'%'};return _0x486e62;}})});}_0x55fd87=_['merge']({},_0x55fd87,_0x1823f4['options']);var _0x4b15f3={'where':_0x55fd87['where']};return db['Sound'][_0xc4b3('0x41')](_0x4b15f3)['then'](function(_0x114fb2){_0x20f048[_0xc4b3('0x41')]=_0x114fb2;if(_0x1823f4[_0xc4b3('0x30')][_0xc4b3('0x42')]){_0x55fd87['include']=[{'all':!![]}];}return db['Sound'][_0xc4b3('0x43')](_0x55fd87);})[_0xc4b3('0x24')](function(_0x28652e){_0x20f048[_0xc4b3('0x44')]=_0x28652e;return _0x20f048;})[_0xc4b3('0x24')](respondWithFilteredResult(_0xa4ab47,_0x55fd87))['catch'](handleError(_0xa4ab47,null));};exports[_0xc4b3('0x45')]=function(_0x183b4f,_0x2f9deb){var _0x1f81c4={'raw':!![],'where':{'id':_0x183b4f['params']['id']}},_0x1a3fd6={};_0x1a3fd6[_0xc4b3('0x2e')]=_[_0xc4b3('0x2f')](db[_0xc4b3('0x2c')][_0xc4b3('0x2d')]);_0x1a3fd6[_0xc4b3('0x30')]=_[_0xc4b3('0x2f')](_0x183b4f[_0xc4b3('0x30')]);_0x1a3fd6['filters']=_[_0xc4b3('0x33')](_0x1a3fd6[_0xc4b3('0x2e')],_0x1a3fd6['query']);_0x1f81c4['attributes']=_[_0xc4b3('0x33')](_0x1a3fd6[_0xc4b3('0x2e')],qs[_0xc4b3('0x34')](_0x183b4f[_0xc4b3('0x30')][_0xc4b3('0x34')]));_0x1f81c4['attributes']=_0x1f81c4['attributes']['length']?_0x1f81c4[_0xc4b3('0x32')]:_0x1a3fd6[_0xc4b3('0x2e')];if(_0x183b4f[_0xc4b3('0x30')][_0xc4b3('0x42')]){_0x1f81c4['include']=[{'all':!![]}];}_0x1f81c4=_[_0xc4b3('0x3d')]({},_0x1f81c4,_0x183b4f['options']);return db['Sound'][_0xc4b3('0x46')](_0x1f81c4)[_0xc4b3('0x24')](handleEntityNotFound(_0x2f9deb,null))[_0xc4b3('0x24')](respondWithResult(_0x2f9deb,null))[_0xc4b3('0x47')](handleError(_0x2f9deb,null));};exports[_0xc4b3('0x48')]=function(_0x5caf7b,_0x7fabe2,_0x2cb6eb){return db[_0xc4b3('0x2c')]['find']({'where':{'id':_0x5caf7b['params']['id']},'attributes':[_0xc4b3('0x2a'),_0xc4b3('0x49'),_0xc4b3('0x4a')],'raw':!![]})['then'](handleEntityNotFound(_0x7fabe2,null))[_0xc4b3('0x24')](function(_0x499800){if(_0x499800){if(!fs[_0xc4b3('0x4b')](path[_0xc4b3('0x4c')](config[_0xc4b3('0x4d')],_0xc4b3('0x4e'),_0x499800['save_name']+'.'+_0x499800['converted_format']))){throw new db[(_0xc4b3('0x4f'))]['ValidationError'](_0xc4b3('0x50'));}return _0x7fabe2['download'](path[_0xc4b3('0x4c')](config[_0xc4b3('0x4d')],_0xc4b3('0x4e'),util[_0xc4b3('0x51')]('%s.%s',_0x499800[_0xc4b3('0x49')],_0x499800[_0xc4b3('0x4a')])),util[_0xc4b3('0x51')]('%s.%s',_0x499800[_0xc4b3('0x2a')],_0x499800['converted_format']));}return null;})[_0xc4b3('0x47')](handleError(_0x7fabe2,null));};exports[_0xc4b3('0x52')]=function(_0x5700e9,_0x2f3804,_0x31d9d4){var _0x4fb02a={'name':path[_0xc4b3('0x53')](_0x5700e9[_0xc4b3('0x54')][_0xc4b3('0x55')],path[_0xc4b3('0x56')](_0x5700e9[_0xc4b3('0x54')][_0xc4b3('0x55')])),'save_name':path['basename'](_0x5700e9['file'][_0xc4b3('0x57')],path[_0xc4b3('0x56')](_0x5700e9[_0xc4b3('0x54')][_0xc4b3('0x57')])),'original_format':path[_0xc4b3('0x56')](_0x5700e9[_0xc4b3('0x54')]['originalname'])[_0xc4b3('0x58')](0x1),'converted_format':'wav'};var _0x20bb24=path[_0xc4b3('0x4c')](config[_0xc4b3('0x4d')],_0xc4b3('0x59'),_0x5700e9[_0xc4b3('0x54')]['filename']);var _0x55ff99=path[_0xc4b3('0x4c')](config[_0xc4b3('0x4d')],_0xc4b3('0x4e'),util[_0xc4b3('0x51')]('%s.%s',path[_0xc4b3('0x53')](_0x5700e9['file'][_0xc4b3('0x57')],path[_0xc4b3('0x56')](_0x5700e9['file'][_0xc4b3('0x57')])),_0x4fb02a['converted_format']));logger[_0xc4b3('0x5a')](_0xc4b3('0x5b'),_0x20bb24);logger[_0xc4b3('0x5a')](_0xc4b3('0x5c'),_0x55ff99);try{fs['chmodSync'](_0x20bb24,parseInt(_0xc4b3('0x5d'),0x8));var _0x483fb1=sox[_0xc4b3('0x5e')](_0x20bb24,_0x55ff99,{'sampleRate':0x1f40,'format':_0xc4b3('0x5f'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x483fb1['on'](_0xc4b3('0x28'),function(_0xe51995){fs['unlinkSync'](_0x20bb24);_0x2f3804[_0xc4b3('0x1a')](0x1f4)['send'](_0xe51995);});_0x483fb1['on'](_0xc4b3('0x60'),function(_0x55e466){_0x4fb02a[_0xc4b3('0x61')]=isNaN(_0x55e466['duration'])?null:_0x55e466[_0xc4b3('0x62')]*0x3e8;_0x4fb02a['original_sampleCount']=isNaN(_0x55e466[_0xc4b3('0x63')])?null:_0x55e466[_0xc4b3('0x63')];_0x4fb02a[_0xc4b3('0x64')]=isNaN(_0x55e466[_0xc4b3('0x65')])?null:_0x55e466[_0xc4b3('0x65')];_0x4fb02a[_0xc4b3('0x66')]=isNaN(_0x55e466[_0xc4b3('0x67')])?null:_0x55e466[_0xc4b3('0x67')];_0x4fb02a['original_sampleRate']=isNaN(_0x55e466[_0xc4b3('0x68')])?null:_0x55e466[_0xc4b3('0x68')];});_0x483fb1['on']('dest',function(_0x533510){_0x4fb02a[_0xc4b3('0x69')]=isNaN(_0x533510[_0xc4b3('0x62')])?null:_0x533510['duration']*0x3e8;_0x4fb02a['converted_sampleCount']=isNaN(_0x533510['sampleCount'])?null:_0x533510['sampleCount'];_0x4fb02a[_0xc4b3('0x6a')]=isNaN(_0x533510[_0xc4b3('0x65')])?null:_0x533510['channelCount'];_0x4fb02a[_0xc4b3('0x6b')]=isNaN(_0x533510[_0xc4b3('0x67')])?null:_0x533510[_0xc4b3('0x67')];_0x4fb02a['converted_sampleRate']=isNaN(_0x533510[_0xc4b3('0x68')])?null:_0x533510[_0xc4b3('0x68')];});_0x483fb1['on'](_0xc4b3('0x1b'),function(){fs[_0xc4b3('0x6c')](_0x55ff99,parseInt(_0xc4b3('0x5d'),0x8));return db[_0xc4b3('0x2c')][_0xc4b3('0x52')](_0x4fb02a)[_0xc4b3('0x24')](function(_0x500e1e){var _0x133e9f={'role':_0x5700e9[_0xc4b3('0x6d')][_0xc4b3('0x6e')],'userProfileId':_0x5700e9['body'][_0xc4b3('0x6f')]};if(!_0x133e9f)throw new Error(_0xc4b3('0x70'));if(_0x133e9f['role']==='user'){var _0x16715a=_0x500e1e[_0xc4b3('0x26')]({'plain':!![]});return db[_0xc4b3('0x71')][_0xc4b3('0x46')]({'where':{'name':_0xc4b3('0x72'),'userProfileId':_0x133e9f[_0xc4b3('0x6f')]},'raw':!![]})['then'](function(_0x25c1cc){if(_0x25c1cc&&_0x25c1cc['autoAssociation']===0x0){return db[_0xc4b3('0x27')][_0xc4b3('0x52')]({'name':_0x16715a[_0xc4b3('0x2a')],'resourceId':_0x16715a['id'],'type':_0x25c1cc[_0xc4b3('0x2a')],'sectionId':_0x25c1cc['id']},{})[_0xc4b3('0x24')](function(){return _0x500e1e;});}else{return _0x500e1e;}})['catch'](function(_0x3f00a5){logger[_0xc4b3('0x28')](_0xc4b3('0x73'),_0x3f00a5);throw _0x3f00a5;});}return _0x500e1e;})[_0xc4b3('0x24')](respondWithResult(_0x2f3804,null))[_0xc4b3('0x47')](handleError(_0x2f3804,null));});_0x483fb1['start']();}catch(_0x40c869){_0x2f3804[_0xc4b3('0x1a')](0x1f4)[_0xc4b3('0x74')](_0x40c869);}};exports[_0xc4b3('0x23')]=function(_0x33e9da,_0x189fb2,_0x5947d6){return db[_0xc4b3('0x2c')]['find']({'where':{'id':_0x33e9da[_0xc4b3('0x75')]['id']}})[_0xc4b3('0x24')](handleEntityNotFound(_0x189fb2,null))['then'](saveUpdates(_[_0xc4b3('0x3b')](_0x33e9da[_0xc4b3('0x6d')],[_0xc4b3('0x2a'),_0xc4b3('0x76')]),null))['then'](respondWithResult(_0x189fb2,null))[_0xc4b3('0x47')](handleError(_0x189fb2,null));};exports[_0xc4b3('0x77')]=function(_0x2b487c,_0x508840,_0x379ab6){return db[_0xc4b3('0x2c')][_0xc4b3('0x46')]({'where':{'id':_0x2b487c[_0xc4b3('0x75')]['id']}})[_0xc4b3('0x24')](function(_0x45f3e6){if(_0x45f3e6){return _0x45f3e6[_0xc4b3('0x25')]();}})[_0xc4b3('0x24')](function(_0x27bfae){var _0x336ef4=path[_0xc4b3('0x4c')](config['root'],'server/files/sounds/original',util['format'](_0xc4b3('0x78'),_0x27bfae[_0xc4b3('0x49')],_0x27bfae[_0xc4b3('0x79')]));var _0x1761c6=path[_0xc4b3('0x4c')](config[_0xc4b3('0x4d')],_0xc4b3('0x4e'),util[_0xc4b3('0x51')](_0xc4b3('0x78'),_0x27bfae[_0xc4b3('0x49')],_0x27bfae[_0xc4b3('0x4a')]));fs[_0xc4b3('0x7a')](_0x336ef4);fs[_0xc4b3('0x7a')](_0x1761c6);return _0x27bfae;})[_0xc4b3('0x24')](function(_0x935437){if(_0x935437){return _0x508840[_0xc4b3('0x1a')](0xcc)[_0xc4b3('0x1b')]();}})['then'](handleEntityNotFound(_0x508840,null))['catch'](handleError(_0x508840,null));};
\ No newline at end of file
index 95edbd3..fa4f94f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9e88=['tools_sounds','moment','request-promise','rimraf','../../config/environment','./sound.attributes','exports','define','Sound'];(function(_0xfe328a,_0x40602a){var _0x54d9a4=function(_0x591e40){while(--_0x591e40){_0xfe328a['push'](_0xfe328a['shift']());}};_0x54d9a4(++_0x40602a);}(_0x9e88,0x1cc));var _0x89e8=function(_0x1a533d,_0x3be712){_0x1a533d=_0x1a533d-0x0;var _0x29569d=_0x9e88[_0x1a533d];return _0x29569d;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0x89e8('0x0'));var BPromise=require('bluebird');var rp=require(_0x89e8('0x1'));var fs=require('fs');var path=require('path');var rimraf=require(_0x89e8('0x2'));var config=require(_0x89e8('0x3'));var attributes=require(_0x89e8('0x4'));module[_0x89e8('0x5')]=function(_0x481b6c,_0x16e0d9){return _0x481b6c[_0x89e8('0x6')](_0x89e8('0x7'),attributes,{'tableName':_0x89e8('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x45fa=['util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./sound.attributes','exports','define','Sound','lodash'];(function(_0x2201e1,_0x50ba88){var _0x5a063f=function(_0x147463){while(--_0x147463){_0x2201e1['push'](_0x2201e1['shift']());}};_0x5a063f(++_0x50ba88);}(_0x45fa,0x141));var _0xa45f=function(_0x4aa957,_0x3d4b06){_0x4aa957=_0x4aa957-0x0;var _0x8a7b1f=_0x45fa[_0x4aa957];return _0x8a7b1f;};'use strict';var _=require(_0xa45f('0x0'));var util=require(_0xa45f('0x1'));var logger=require(_0xa45f('0x2'))(_0xa45f('0x3'));var moment=require(_0xa45f('0x4'));var BPromise=require(_0xa45f('0x5'));var rp=require(_0xa45f('0x6'));var fs=require('fs');var path=require(_0xa45f('0x7'));var rimraf=require(_0xa45f('0x8'));var config=require(_0xa45f('0x9'));var attributes=require(_0xa45f('0xa'));module[_0xa45f('0xb')]=function(_0x4bc153,_0x3bac92){return _0x4bc153[_0xa45f('0xc')](_0xa45f('0xd'),attributes,{'tableName':'tools_sounds','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 100d086..9c0deea 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['then','stringify','ShowSound','lodash','util','moment','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','info','Sound,\x20%s,\x20%s','request\x20sent','debug','Sound,\x20%s,\x20%s,\x20%s','code','error','message','result','catch','Sound','find','options','raw','where','attributes','include','model','map'];(function(_0x50007c,_0x1cbf11){var _0x5c1ec7=function(_0x52d038){while(--_0x52d038){_0x50007c['push'](_0x50007c['shift']());}};_0x5c1ec7(++_0x1cbf11);}(_0xa9e0,0x123));var _0x0a9e=function(_0x110c3d,_0x12ee06){_0x110c3d=_0x110c3d-0x0;var _0x226d67=_0xa9e0[_0x110c3d];return _0x226d67;};'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);});});}exports['ShowSound']=function(_0x459eb1){var _0x478723=this;return new Promise(function(_0x106033,_0x205fd6){return db[_0x0a9e('0x14')][_0x0a9e('0x15')]({'raw':_0x459eb1[_0x0a9e('0x16')]?_0x459eb1[_0x0a9e('0x16')][_0x0a9e('0x17')]===undefined?!![]:![]:!![],'where':_0x459eb1[_0x0a9e('0x16')]?_0x459eb1[_0x0a9e('0x16')][_0x0a9e('0x18')]||null:null,'attributes':_0x459eb1['options']?_0x459eb1[_0x0a9e('0x16')][_0x0a9e('0x19')]||null:null,'include':_0x459eb1['options']?_0x459eb1[_0x0a9e('0x16')]['include']?_['map'](_0x459eb1[_0x0a9e('0x16')][_0x0a9e('0x1a')],function(_0x38e7c4){return{'model':db[_0x38e7c4[_0x0a9e('0x1b')]],'as':_0x38e7c4['as'],'attributes':_0x38e7c4['attributes'],'include':_0x38e7c4[_0x0a9e('0x1a')]?_[_0x0a9e('0x1c')](_0x38e7c4[_0x0a9e('0x1a')],function(_0x4d00e6){return{'model':db[_0x4d00e6[_0x0a9e('0x1b')]],'as':_0x4d00e6['as'],'attributes':_0x4d00e6[_0x0a9e('0x19')],'include':_0x4d00e6[_0x0a9e('0x1a')]?_['map'](_0x4d00e6['include'],function(_0x197ec0){return{'model':db[_0x197ec0[_0x0a9e('0x1b')]],'as':_0x197ec0['as'],'attributes':_0x197ec0[_0x0a9e('0x19')]};}):[]};}):[]};}):[]:[]})[_0x0a9e('0x1d')](function(_0x526cf3){logger[_0x0a9e('0xa')]('ShowSound',_0x459eb1);logger[_0x0a9e('0xd')]('ShowSound',_0x459eb1,JSON[_0x0a9e('0x1e')](_0x526cf3));_0x106033(_0x526cf3);})[_0x0a9e('0x13')](function(_0x25fba9){logger[_0x0a9e('0x10')](_0x0a9e('0x1f'),_0x25fba9[_0x0a9e('0x11')],_0x459eb1);_0x205fd6(_0x478723[_0x0a9e('0x10')](0x1f4,_0x25fba9[_0x0a9e('0x11')]));});});};
\ 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(_0x47c095,_0x12a409){var _0x331e68=function(_0x179382){while(--_0x179382){_0x47c095['push'](_0x47c095['shift']());}};_0x331e68(++_0x12a409);}(_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 d27433e..1c16782 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf0e8=['get','isAuthenticated','index','show','create','put','update','delete','destroy','exports','multer','util','connect-timeout','Router','../../components/auth/service','../../config/environment','./squareMessage.controller'];(function(_0x4d6481,_0x537a88){var _0xb19a68=function(_0x5f1218){while(--_0x5f1218){_0x4d6481['push'](_0x4d6481['shift']());}};_0xb19a68(++_0x537a88);}(_0xf0e8,0x81));var _0x8f0e=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0xf0e8[_0x57b54c];return _0x59cc19;};'use strict';var multer=require(_0x8f0e('0x0'));var util=require(_0x8f0e('0x1'));var path=require('path');var timeout=require(_0x8f0e('0x2'));var express=require('express');var router=express[_0x8f0e('0x3')]();var auth=require(_0x8f0e('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x8f0e('0x5'));var controller=require(_0x8f0e('0x6'));router[_0x8f0e('0x7')]('/',auth[_0x8f0e('0x8')](),controller[_0x8f0e('0x9')]);router['get']('/:id',auth[_0x8f0e('0x8')](),controller[_0x8f0e('0xa')]);router['post']('/',auth[_0x8f0e('0x8')](),controller[_0x8f0e('0xb')]);router[_0x8f0e('0xc')]('/:id',auth['isAuthenticated'](),controller[_0x8f0e('0xd')]);router[_0x8f0e('0xe')]('/:id',auth[_0x8f0e('0x8')](),controller[_0x8f0e('0xf')]);module[_0x8f0e('0x10')]=router;
\ No newline at end of file
+var _0xf4eb=['../../config/environment','./squareMessage.controller','get','isAuthenticated','index','/:id','show','create','put','update','delete','exports','multer','Router'];(function(_0x27e416,_0x513100){var _0x106279=function(_0x34e8eb){while(--_0x34e8eb){_0x27e416['push'](_0x27e416['shift']());}};_0x106279(++_0x513100);}(_0xf4eb,0xec));var _0xbf4e=function(_0x9ffd79,_0x203a8e){_0x9ffd79=_0x9ffd79-0x0;var _0x1016d6=_0xf4eb[_0x9ffd79];return _0x1016d6;};'use strict';var multer=require(_0xbf4e('0x0'));var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require('express');var router=express[_0xbf4e('0x1')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xbf4e('0x2'));var controller=require(_0xbf4e('0x3'));router[_0xbf4e('0x4')]('/',auth[_0xbf4e('0x5')](),controller[_0xbf4e('0x6')]);router[_0xbf4e('0x4')](_0xbf4e('0x7'),auth['isAuthenticated'](),controller[_0xbf4e('0x8')]);router['post']('/',auth['isAuthenticated'](),controller[_0xbf4e('0x9')]);router[_0xbf4e('0xa')](_0xbf4e('0x7'),auth[_0xbf4e('0x5')](),controller[_0xbf4e('0xb')]);router[_0xbf4e('0xc')](_0xbf4e('0x7'),auth['isAuthenticated'](),controller['destroy']);module[_0xbf4e('0xd')]=router;
\ No newline at end of file
index 3fa5246..ec42611 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd233=['sequelize','exports','STRING','TEXT','medium','ENUM','out'];(function(_0x5d6457,_0x20198c){var _0x1f0191=function(_0x4f0686){while(--_0x4f0686){_0x5d6457['push'](_0x5d6457['shift']());}};_0x1f0191(++_0x20198c);}(_0xd233,0x18f));var _0x3d23=function(_0x3800e2,_0x527490){_0x3800e2=_0x3800e2-0x0;var _0x25ca8a=_0xd233[_0x3800e2];return _0x25ca8a;};'use strict';var Sequelize=require(_0x3d23('0x0'));module[_0x3d23('0x1')]={'uniqueid':{'type':Sequelize[_0x3d23('0x2')]},'body':{'type':Sequelize[_0x3d23('0x3')](_0x3d23('0x4')),'allowNull':![]},'direction':{'type':Sequelize[_0x3d23('0x5')]('in',_0x3d23('0x6')),'defaultValue':_0x3d23('0x6'),'allowNull':![]}};
\ No newline at end of file
+var _0x6859=['STRING','TEXT','medium','ENUM','out','sequelize','exports'];(function(_0x4bd67a,_0x4f9725){var _0x2be5fb=function(_0x33e132){while(--_0x33e132){_0x4bd67a['push'](_0x4bd67a['shift']());}};_0x2be5fb(++_0x4f9725);}(_0x6859,0x101));var _0x9685=function(_0x138adb,_0x193fee){_0x138adb=_0x138adb-0x0;var _0x1b27f2=_0x6859[_0x138adb];return _0x1b27f2;};'use strict';var Sequelize=require(_0x9685('0x0'));module[_0x9685('0x1')]={'uniqueid':{'type':Sequelize[_0x9685('0x2')]},'body':{'type':Sequelize[_0x9685('0x3')](_0x9685('0x4')),'allowNull':![]},'direction':{'type':Sequelize[_0x9685('0x5')]('in',_0x9685('0x6')),'defaultValue':'out','allowNull':![]}};
\ No newline at end of file
index 2b92310..03947ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc469=['reject','save','update','then','destroy','stack','name','send','SquareMessage','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','sort','pick','filter','where','map','type','key','VIRTUAL','merge','options','includeAll','include','findAll','rows','catch','show','create','body','find','params','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','ejs','lodash','crypto','jsforce','desk.js','to-csv','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','apply'];(function(_0x57d8fc,_0x168945){var _0x3e319f=function(_0x473e05){while(--_0x473e05){_0x57d8fc['push'](_0x57d8fc['shift']());}};_0x3e319f(++_0x168945);}(_0xc469,0x6e));var _0x9c46=function(_0x5d3903,_0x3d6c3e){_0x5d3903=_0x5d3903-0x0;var _0x4b8bc9=_0xc469[_0x5d3903];return _0x4b8bc9;};'use strict';var pdf=require(_0x9c46('0x0'));var emlformat=require(_0x9c46('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x9c46('0x2'));var jsonpatch=require(_0x9c46('0x3'));var rp=require(_0x9c46('0x4'));var moment=require(_0x9c46('0x5'));var BPromise=require(_0x9c46('0x6'));var Mustache=require(_0x9c46('0x7'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x9c46('0x8'));var fs=require('fs');var _=require(_0x9c46('0x9'));var squel=require('squel');var crypto=require(_0x9c46('0xa'));var jsforce=require(_0x9c46('0xb'));var deskjs=require(_0x9c46('0xc'));var toCsv=require(_0x9c46('0xd'));var querystring=require('querystring');var Papa=require(_0x9c46('0xe'));var Redis=require(_0x9c46('0xf'));var authService=require(_0x9c46('0x10'));var qs=require(_0x9c46('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x9c46('0x12'))(_0x9c46('0x13'));var utils=require(_0x9c46('0x14'));var config=require(_0x9c46('0x15'));var db=require(_0x9c46('0x16'))['db'];function respondWithStatusCode(_0x37d17d,_0x573917){_0x573917=_0x573917||0xcc;return function(_0x3127e9){if(_0x3127e9){return _0x37d17d[_0x9c46('0x17')](_0x573917);}return _0x37d17d['status'](_0x573917)[_0x9c46('0x18')]();};}function respondWithResult(_0x3f001c,_0x384e00){_0x384e00=_0x384e00||0xc8;return function(_0x39a714){if(_0x39a714){return _0x3f001c[_0x9c46('0x19')](_0x384e00)[_0x9c46('0x1a')](_0x39a714);}};}function respondWithFilteredResult(_0x3ddb5f,_0x3d7d01){return function(_0x4f5e1e){if(_0x4f5e1e){var _0x26f56=_0x4f5e1e[_0x9c46('0x1b')],_0x51dc1a=_0x3d7d01[_0x9c46('0x1c')],_0x4b0ed9=_0x3d7d01[_0x9c46('0x1c')]+_0x3d7d01[_0x9c46('0x1d')],_0x3db1ed;if(_0x4b0ed9>=_0x26f56){_0x4b0ed9=_0x26f56;_0x3db1ed=0xc8;}else{_0x3db1ed=0xce;}_0x3ddb5f[_0x9c46('0x19')](_0x3db1ed);return _0x3ddb5f[_0x9c46('0x1e')]('Content-Range',_0x51dc1a+'-'+_0x4b0ed9+'/'+_0x26f56)['json'](_0x4f5e1e);}return null;};}function patchUpdates(_0x390afa){return function(_0x3be401){try{jsonpatch[_0x9c46('0x1f')](_0x3be401,_0x390afa,!![]);}catch(_0x3c6173){return BPromise[_0x9c46('0x20')](_0x3c6173);}return _0x3be401[_0x9c46('0x21')]();};}function saveUpdates(_0x8d3696,_0x160ba9){return function(_0x4d5d08){if(_0x4d5d08){return _0x4d5d08[_0x9c46('0x22')](_0x8d3696)[_0x9c46('0x23')](function(_0x759809){return _0x759809;});}return null;};}function removeEntity(_0x5b5113,_0x3442f5){return function(_0x2efbaf){if(_0x2efbaf){return _0x2efbaf[_0x9c46('0x24')]()['then'](function(){_0x5b5113[_0x9c46('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1ca50d,_0x121645){return function(_0x5171c5){if(!_0x5171c5){_0x1ca50d[_0x9c46('0x17')](0x194);}return _0x5171c5;};}function handleError(_0x117647,_0x3c60b6){_0x3c60b6=_0x3c60b6||0x1f4;return function(_0x4eff2f){logger['error'](_0x4eff2f[_0x9c46('0x25')]);if(_0x4eff2f[_0x9c46('0x26')]){delete _0x4eff2f[_0x9c46('0x26')];}_0x117647[_0x9c46('0x19')](_0x3c60b6)[_0x9c46('0x27')](_0x4eff2f);};}exports['index']=function(_0xd1dace,_0x42ecba){var _0x2c0904={},_0x11b5d5={},_0x42e300={'count':0x0,'rows':[]};var _0x3f59ef=db[_0x9c46('0x28')][_0x9c46('0x29')];_0x11b5d5[_0x9c46('0x2a')]=_[_0x9c46('0x2b')](_0x3f59ef);_0x11b5d5[_0x9c46('0x2c')]=_[_0x9c46('0x2b')](_0xd1dace[_0x9c46('0x2c')]);_0x11b5d5[_0x9c46('0x2d')]=_[_0x9c46('0x2e')](_0x11b5d5['model'],_0x11b5d5[_0x9c46('0x2c')]);_0x2c0904[_0x9c46('0x2f')]=_[_0x9c46('0x2e')](_0x11b5d5[_0x9c46('0x2a')],qs[_0x9c46('0x30')](_0xd1dace[_0x9c46('0x2c')][_0x9c46('0x30')]));_0x2c0904[_0x9c46('0x2f')]=_0x2c0904[_0x9c46('0x2f')][_0x9c46('0x31')]?_0x2c0904['attributes']:_0x11b5d5['model'];if(!_0xd1dace[_0x9c46('0x2c')][_0x9c46('0x32')]('nolimit')){_0x2c0904[_0x9c46('0x1d')]=qs[_0x9c46('0x1d')](_0xd1dace[_0x9c46('0x2c')][_0x9c46('0x1d')]);_0x2c0904[_0x9c46('0x1c')]=qs['offset'](_0xd1dace[_0x9c46('0x2c')]['offset']);}_0x2c0904['order']=qs[_0x9c46('0x33')](_0xd1dace[_0x9c46('0x2c')][_0x9c46('0x33')]);_0x2c0904['where']=qs[_0x9c46('0x2d')](_[_0x9c46('0x34')](_0xd1dace[_0x9c46('0x2c')],_0x11b5d5['filters']));if(_0xd1dace[_0x9c46('0x2c')][_0x9c46('0x35')]){_0x2c0904[_0x9c46('0x36')]=_['merge'](_0x2c0904[_0x9c46('0x36')],{'$or':_[_0x9c46('0x37')](_0x3f59ef,function(_0x17c53a){if(_0x17c53a[_0x9c46('0x38')][_0x9c46('0x39')]!==_0x9c46('0x3a')){var _0x4051f7={};_0x4051f7[_0x17c53a['field']]={'$like':'%'+_0xd1dace[_0x9c46('0x2c')][_0x9c46('0x35')]+'%'};return _0x4051f7;}})});}_0x2c0904=_[_0x9c46('0x3b')]({},_0x2c0904,_0xd1dace[_0x9c46('0x3c')]);var _0x3218f0={'where':_0x2c0904[_0x9c46('0x36')]};return db[_0x9c46('0x28')]['count'](_0x3218f0)[_0x9c46('0x23')](function(_0x5f0377){_0x42e300[_0x9c46('0x1b')]=_0x5f0377;if(_0xd1dace[_0x9c46('0x2c')][_0x9c46('0x3d')]){_0x2c0904[_0x9c46('0x3e')]=[{'all':!![]}];}return db[_0x9c46('0x28')][_0x9c46('0x3f')](_0x2c0904);})[_0x9c46('0x23')](function(_0x21bb2){_0x42e300[_0x9c46('0x40')]=_0x21bb2;return _0x42e300;})[_0x9c46('0x23')](respondWithFilteredResult(_0x42ecba,_0x2c0904))[_0x9c46('0x41')](handleError(_0x42ecba,null));};exports[_0x9c46('0x42')]=function(_0x553ff0,_0x3c32e0){var _0x1a357b={'raw':!![],'where':{'id':_0x553ff0['params']['id']}},_0x41c727={};_0x41c727[_0x9c46('0x2a')]=_[_0x9c46('0x2b')](db[_0x9c46('0x28')][_0x9c46('0x29')]);_0x41c727[_0x9c46('0x2c')]=_[_0x9c46('0x2b')](_0x553ff0['query']);_0x41c727[_0x9c46('0x2d')]=_[_0x9c46('0x2e')](_0x41c727['model'],_0x41c727[_0x9c46('0x2c')]);_0x1a357b[_0x9c46('0x2f')]=_[_0x9c46('0x2e')](_0x41c727[_0x9c46('0x2a')],qs[_0x9c46('0x30')](_0x553ff0[_0x9c46('0x2c')][_0x9c46('0x30')]));_0x1a357b[_0x9c46('0x2f')]=_0x1a357b['attributes'][_0x9c46('0x31')]?_0x1a357b[_0x9c46('0x2f')]:_0x41c727[_0x9c46('0x2a')];if(_0x553ff0[_0x9c46('0x2c')][_0x9c46('0x3d')]){_0x1a357b['include']=[{'all':!![]}];}_0x1a357b=_[_0x9c46('0x3b')]({},_0x1a357b,_0x553ff0[_0x9c46('0x3c')]);return db['SquareMessage']['find'](_0x1a357b)[_0x9c46('0x23')](handleEntityNotFound(_0x3c32e0,null))[_0x9c46('0x23')](respondWithResult(_0x3c32e0,null))['catch'](handleError(_0x3c32e0,null));};exports[_0x9c46('0x43')]=function(_0x49526d,_0x43040b){return db[_0x9c46('0x28')][_0x9c46('0x43')](_0x49526d[_0x9c46('0x44')],{})[_0x9c46('0x23')](respondWithResult(_0x43040b,0xc9))[_0x9c46('0x41')](handleError(_0x43040b,null));};exports[_0x9c46('0x22')]=function(_0x3e991c,_0x2bc621){if(_0x3e991c[_0x9c46('0x44')]['id']){delete _0x3e991c[_0x9c46('0x44')]['id'];}return db[_0x9c46('0x28')][_0x9c46('0x45')]({'where':{'id':_0x3e991c['params']['id']}})[_0x9c46('0x23')](handleEntityNotFound(_0x2bc621,null))[_0x9c46('0x23')](saveUpdates(_0x3e991c[_0x9c46('0x44')],null))[_0x9c46('0x23')](respondWithResult(_0x2bc621,null))['catch'](handleError(_0x2bc621,null));};exports[_0x9c46('0x24')]=function(_0x261f24,_0xd03651){return db[_0x9c46('0x28')][_0x9c46('0x45')]({'where':{'id':_0x261f24[_0x9c46('0x46')]['id']}})[_0x9c46('0x23')](handleEntityNotFound(_0xd03651,null))[_0x9c46('0x23')](removeEntity(_0xd03651,null))[_0x9c46('0x41')](handleError(_0xd03651,null));};
\ No newline at end of file
+var _0x6531=['keys','query','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','type','key','VIRTUAL','field','merge','includeAll','include','rows','catch','show','params','rawAttributes','options','create','body','find','html-pdf','eml-format','zip-dir','request-promise','mustache','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','then','destroy','stack','name','SquareMessage'];(function(_0x2dae62,_0x226560){var _0x558cd5=function(_0x2de004){while(--_0x2de004){_0x2dae62['push'](_0x2dae62['shift']());}};_0x558cd5(++_0x226560);}(_0x6531,0xa7));var _0x1653=function(_0x24f1e4,_0x2ba886){_0x24f1e4=_0x24f1e4-0x0;var _0x58810a=_0x6531[_0x24f1e4];return _0x58810a;};'use strict';var pdf=require(_0x1653('0x0'));var emlformat=require(_0x1653('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x1653('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x1653('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x1653('0x4'));var util=require('util');var path=require(_0x1653('0x5'));var sox=require(_0x1653('0x6'));var csv=require('to-csv');var ejs=require(_0x1653('0x7'));var fs=require('fs');var _=require(_0x1653('0x8'));var squel=require(_0x1653('0x9'));var crypto=require(_0x1653('0xa'));var jsforce=require(_0x1653('0xb'));var deskjs=require(_0x1653('0xc'));var toCsv=require(_0x1653('0xd'));var querystring=require(_0x1653('0xe'));var Papa=require(_0x1653('0xf'));var Redis=require(_0x1653('0x10'));var authService=require(_0x1653('0x11'));var qs=require(_0x1653('0x12'));var hardwareService=require(_0x1653('0x13'));var logger=require(_0x1653('0x14'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4df7ce,_0x159770){_0x159770=_0x159770||0xcc;return function(_0x5d0671){if(_0x5d0671){return _0x4df7ce[_0x1653('0x15')](_0x159770);}return _0x4df7ce[_0x1653('0x16')](_0x159770)[_0x1653('0x17')]();};}function respondWithResult(_0x24c650,_0x6acb04){_0x6acb04=_0x6acb04||0xc8;return function(_0x5c4b68){if(_0x5c4b68){return _0x24c650[_0x1653('0x16')](_0x6acb04)[_0x1653('0x18')](_0x5c4b68);}};}function respondWithFilteredResult(_0x4c6cc1,_0x1eff88){return function(_0x54290b){if(_0x54290b){var _0x1810d7=_0x54290b[_0x1653('0x19')],_0x4bd208=_0x1eff88[_0x1653('0x1a')],_0x430beb=_0x1eff88['offset']+_0x1eff88[_0x1653('0x1b')],_0x4d037a;if(_0x430beb>=_0x1810d7){_0x430beb=_0x1810d7;_0x4d037a=0xc8;}else{_0x4d037a=0xce;}_0x4c6cc1[_0x1653('0x16')](_0x4d037a);return _0x4c6cc1[_0x1653('0x1c')]('Content-Range',_0x4bd208+'-'+_0x430beb+'/'+_0x1810d7)[_0x1653('0x18')](_0x54290b);}return null;};}function patchUpdates(_0x5ad52e){return function(_0x3e4bb4){try{jsonpatch[_0x1653('0x1d')](_0x3e4bb4,_0x5ad52e,!![]);}catch(_0x2fa864){return BPromise[_0x1653('0x1e')](_0x2fa864);}return _0x3e4bb4[_0x1653('0x1f')]();};}function saveUpdates(_0x36a061,_0x4d2b6f){return function(_0x26fc0){if(_0x26fc0){return _0x26fc0['update'](_0x36a061)[_0x1653('0x20')](function(_0x2eda49){return _0x2eda49;});}return null;};}function removeEntity(_0x5d48f4,_0x23761f){return function(_0x43118b){if(_0x43118b){return _0x43118b[_0x1653('0x21')]()[_0x1653('0x20')](function(){_0x5d48f4['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x2d031d,_0x53d430){return function(_0x54b9ef){if(!_0x54b9ef){_0x2d031d[_0x1653('0x15')](0x194);}return _0x54b9ef;};}function handleError(_0x596e51,_0x59f60f){_0x59f60f=_0x59f60f||0x1f4;return function(_0x271f7a){logger['error'](_0x271f7a[_0x1653('0x22')]);if(_0x271f7a[_0x1653('0x23')]){delete _0x271f7a['name'];}_0x596e51[_0x1653('0x16')](_0x59f60f)['send'](_0x271f7a);};}exports['index']=function(_0x395eb4,_0x28f090){var _0xfe2e26={},_0x2141f9={},_0x4a9140={'count':0x0,'rows':[]};var _0x516ba6=db[_0x1653('0x24')]['rawAttributes'];_0x2141f9['model']=_[_0x1653('0x25')](_0x516ba6);_0x2141f9['query']=_[_0x1653('0x25')](_0x395eb4[_0x1653('0x26')]);_0x2141f9['filters']=_[_0x1653('0x27')](_0x2141f9['model'],_0x2141f9[_0x1653('0x26')]);_0xfe2e26[_0x1653('0x28')]=_[_0x1653('0x27')](_0x2141f9[_0x1653('0x29')],qs[_0x1653('0x2a')](_0x395eb4[_0x1653('0x26')]['fields']));_0xfe2e26['attributes']=_0xfe2e26[_0x1653('0x28')][_0x1653('0x2b')]?_0xfe2e26[_0x1653('0x28')]:_0x2141f9['model'];if(!_0x395eb4[_0x1653('0x26')][_0x1653('0x2c')](_0x1653('0x2d'))){_0xfe2e26[_0x1653('0x1b')]=qs[_0x1653('0x1b')](_0x395eb4['query']['limit']);_0xfe2e26[_0x1653('0x1a')]=qs[_0x1653('0x1a')](_0x395eb4[_0x1653('0x26')][_0x1653('0x1a')]);}_0xfe2e26[_0x1653('0x2e')]=qs['sort'](_0x395eb4[_0x1653('0x26')][_0x1653('0x2f')]);_0xfe2e26[_0x1653('0x30')]=qs[_0x1653('0x31')](_[_0x1653('0x32')](_0x395eb4[_0x1653('0x26')],_0x2141f9['filters']));if(_0x395eb4[_0x1653('0x26')][_0x1653('0x33')]){_0xfe2e26[_0x1653('0x30')]=_['merge'](_0xfe2e26[_0x1653('0x30')],{'$or':_['map'](_0x516ba6,function(_0x35b825){if(_0x35b825[_0x1653('0x34')][_0x1653('0x35')]!==_0x1653('0x36')){var _0x1f910a={};_0x1f910a[_0x35b825[_0x1653('0x37')]]={'$like':'%'+_0x395eb4['query'][_0x1653('0x33')]+'%'};return _0x1f910a;}})});}_0xfe2e26=_[_0x1653('0x38')]({},_0xfe2e26,_0x395eb4['options']);var _0x107ffe={'where':_0xfe2e26['where']};return db[_0x1653('0x24')][_0x1653('0x19')](_0x107ffe)[_0x1653('0x20')](function(_0x375a95){_0x4a9140[_0x1653('0x19')]=_0x375a95;if(_0x395eb4[_0x1653('0x26')][_0x1653('0x39')]){_0xfe2e26[_0x1653('0x3a')]=[{'all':!![]}];}return db[_0x1653('0x24')]['findAll'](_0xfe2e26);})[_0x1653('0x20')](function(_0x5b6325){_0x4a9140[_0x1653('0x3b')]=_0x5b6325;return _0x4a9140;})[_0x1653('0x20')](respondWithFilteredResult(_0x28f090,_0xfe2e26))[_0x1653('0x3c')](handleError(_0x28f090,null));};exports[_0x1653('0x3d')]=function(_0xc06009,_0x5afb2e){var _0x1606b0={'raw':!![],'where':{'id':_0xc06009[_0x1653('0x3e')]['id']}},_0x48eaf9={};_0x48eaf9[_0x1653('0x29')]=_['keys'](db['SquareMessage'][_0x1653('0x3f')]);_0x48eaf9[_0x1653('0x26')]=_[_0x1653('0x25')](_0xc06009[_0x1653('0x26')]);_0x48eaf9[_0x1653('0x31')]=_[_0x1653('0x27')](_0x48eaf9[_0x1653('0x29')],_0x48eaf9[_0x1653('0x26')]);_0x1606b0[_0x1653('0x28')]=_[_0x1653('0x27')](_0x48eaf9[_0x1653('0x29')],qs[_0x1653('0x2a')](_0xc06009[_0x1653('0x26')]['fields']));_0x1606b0[_0x1653('0x28')]=_0x1606b0[_0x1653('0x28')]['length']?_0x1606b0[_0x1653('0x28')]:_0x48eaf9['model'];if(_0xc06009[_0x1653('0x26')][_0x1653('0x39')]){_0x1606b0[_0x1653('0x3a')]=[{'all':!![]}];}_0x1606b0=_[_0x1653('0x38')]({},_0x1606b0,_0xc06009[_0x1653('0x40')]);return db[_0x1653('0x24')]['find'](_0x1606b0)[_0x1653('0x20')](handleEntityNotFound(_0x5afb2e,null))['then'](respondWithResult(_0x5afb2e,null))[_0x1653('0x3c')](handleError(_0x5afb2e,null));};exports[_0x1653('0x41')]=function(_0x15731b,_0x273f9a){return db[_0x1653('0x24')]['create'](_0x15731b[_0x1653('0x42')],{})[_0x1653('0x20')](respondWithResult(_0x273f9a,0xc9))[_0x1653('0x3c')](handleError(_0x273f9a,null));};exports['update']=function(_0x3402fb,_0x1a474e){if(_0x3402fb[_0x1653('0x42')]['id']){delete _0x3402fb[_0x1653('0x42')]['id'];}return db['SquareMessage'][_0x1653('0x43')]({'where':{'id':_0x3402fb[_0x1653('0x3e')]['id']}})[_0x1653('0x20')](handleEntityNotFound(_0x1a474e,null))['then'](saveUpdates(_0x3402fb[_0x1653('0x42')],null))[_0x1653('0x20')](respondWithResult(_0x1a474e,null))[_0x1653('0x3c')](handleError(_0x1a474e,null));};exports[_0x1653('0x21')]=function(_0x2bdc64,_0x519da4){return db[_0x1653('0x24')][_0x1653('0x43')]({'where':{'id':_0x2bdc64[_0x1653('0x3e')]['id']}})[_0x1653('0x20')](handleEntityNotFound(_0x519da4,null))[_0x1653('0x20')](removeEntity(_0x519da4,null))[_0x1653('0x3c')](handleError(_0x519da4,null));};
\ No newline at end of file
index d76c63e..6f0d75f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc690=['util','../../config/logger','api','moment','bluebird','request-promise','rimraf','./squareMessage.attributes','exports','SquareMessage','square_messages','lodash'];(function(_0x40b723,_0x118b22){var _0x1981ad=function(_0x1dbe18){while(--_0x1dbe18){_0x40b723['push'](_0x40b723['shift']());}};_0x1981ad(++_0x118b22);}(_0xc690,0x113));var _0x0c69=function(_0x4aec62,_0x252c83){_0x4aec62=_0x4aec62-0x0;var _0x40d35e=_0xc690[_0x4aec62];return _0x40d35e;};'use strict';var _=require(_0x0c69('0x0'));var util=require(_0x0c69('0x1'));var logger=require(_0x0c69('0x2'))(_0x0c69('0x3'));var moment=require(_0x0c69('0x4'));var BPromise=require(_0x0c69('0x5'));var rp=require(_0x0c69('0x6'));var fs=require('fs');var path=require('path');var rimraf=require(_0x0c69('0x7'));var config=require('../../config/environment');var attributes=require(_0x0c69('0x8'));module[_0x0c69('0x9')]=function(_0x35542a,_0x4a0287){return _0x35542a['define'](_0x0c69('0xa'),attributes,{'tableName':_0x0c69('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xaa2e=['path','rimraf','../../config/environment','./squareMessage.attributes','exports','define','SquareMessage','square_messages','lodash','api','request-promise'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0xaa2e,0x189));var _0xeaa2=function(_0x4a8e39,_0x153231){_0x4a8e39=_0x4a8e39-0x0;var _0x4fd149=_0xaa2e[_0x4a8e39];return _0x4fd149;};'use strict';var _=require(_0xeaa2('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xeaa2('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xeaa2('0x2'));var fs=require('fs');var path=require(_0xeaa2('0x3'));var rimraf=require(_0xeaa2('0x4'));var config=require(_0xeaa2('0x5'));var attributes=require(_0xeaa2('0x6'));module[_0xeaa2('0x7')]=function(_0x33cd39,_0x1f7501){return _0x33cd39[_0xeaa2('0x8')](_0xeaa2('0x9'),attributes,{'tableName':_0xeaa2('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 58394c1..2c9a9bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0316=['request\x20sent','debug','SquareMessage,\x20%s,\x20%s,\x20%s','code','error','message','result','catch','CreateSquareMessage','SquareMessage','create','options','raw','stringify','lodash','util','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','jayson/promise','client','request','then','info','SquareMessage,\x20%s,\x20%s'];(function(_0xd1d19a,_0x1933f0){var _0x52a79d=function(_0x5199e2){while(--_0x5199e2){_0xd1d19a['push'](_0xd1d19a['shift']());}};_0x52a79d(++_0x1933f0);}(_0x0316,0x11c));var _0x6031=function(_0x3b0da0,_0x36d3db){_0x3b0da0=_0x3b0da0-0x0;var _0x32d7a3=_0x0316[_0x3b0da0];return _0x32d7a3;};'use strict';var _=require(_0x6031('0x0'));var util=require(_0x6031('0x1'));var moment=require('moment');var BPromise=require(_0x6031('0x2'));var rs=require(_0x6031('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x6031('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x6031('0x5'))(_0x6031('0x6'));var config=require('../../config/environment');var jayson=require(_0x6031('0x7'));var client=jayson[_0x6031('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4c9203,_0x19e3f0,_0x120944){return new BPromise(function(_0x283846,_0x5675b9){return client[_0x6031('0x9')](_0x4c9203,_0x120944)[_0x6031('0xa')](function(_0x59d860){logger[_0x6031('0xb')](_0x6031('0xc'),_0x19e3f0,_0x6031('0xd'));logger[_0x6031('0xe')](_0x6031('0xf'),_0x19e3f0,'request\x20sent',JSON['stringify'](_0x59d860));if(_0x59d860['error']){if(_0x59d860['error'][_0x6031('0x10')]===0x1f4){logger[_0x6031('0x11')](_0x6031('0xc'),_0x19e3f0,_0x59d860['error'][_0x6031('0x12')]);return _0x5675b9(_0x59d860[_0x6031('0x11')][_0x6031('0x12')]);}logger['error'](_0x6031('0xc'),_0x19e3f0,_0x59d860[_0x6031('0x11')][_0x6031('0x12')]);return _0x283846(_0x59d860[_0x6031('0x11')]['message']);}else{logger[_0x6031('0xb')](_0x6031('0xc'),_0x19e3f0,_0x6031('0xd'));_0x283846(_0x59d860[_0x6031('0x13')][_0x6031('0x12')]);}})[_0x6031('0x14')](function(_0x369b0d){logger[_0x6031('0x11')](_0x6031('0xc'),_0x19e3f0,_0x369b0d);_0x5675b9(_0x369b0d);});});}exports[_0x6031('0x15')]=function(_0x569599){var _0x445e32=this;return new Promise(function(_0x2e44f4,_0x5c66a0){return db[_0x6031('0x16')][_0x6031('0x17')](_0x569599['body'],{'raw':_0x569599[_0x6031('0x18')]?_0x569599[_0x6031('0x18')][_0x6031('0x19')]===undefined?!![]:![]:!![]})[_0x6031('0xa')](function(_0x3f19a9){logger[_0x6031('0xb')](_0x6031('0x15'),_0x569599);logger[_0x6031('0xe')](_0x6031('0x15'),_0x569599,JSON[_0x6031('0x1a')](_0x3f19a9));_0x2e44f4(_0x3f19a9);})[_0x6031('0x14')](function(_0xb87900){logger['error'](_0x6031('0x15'),_0xb87900['message'],_0x569599);_0x5c66a0(_0x445e32[_0x6031('0x11')](0x1f4,_0xb87900[_0x6031('0x12')]));});});};
\ No newline at end of file
+var _0xbce1=['randomstring','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','client','http','request','then','info','SquareMessage,\x20%s,\x20%s','request\x20sent','SquareMessage,\x20%s,\x20%s,\x20%s','stringify','code','error','message','catch','CreateSquareMessage','SquareMessage','body','options','raw','lodash','util','moment','bluebird'];(function(_0x2c4d6f,_0x5d0c62){var _0xd80b6d=function(_0x3626a5){while(--_0x3626a5){_0x2c4d6f['push'](_0x2c4d6f['shift']());}};_0xd80b6d(++_0x5d0c62);}(_0xbce1,0x10a));var _0x1bce=function(_0x47defb,_0xe5d0e1){_0x47defb=_0x47defb-0x0;var _0x2c065f=_0xbce1[_0x47defb];return _0x2c065f;};'use strict';var _=require(_0x1bce('0x0'));var util=require(_0x1bce('0x1'));var moment=require(_0x1bce('0x2'));var BPromise=require(_0x1bce('0x3'));var rs=require(_0x1bce('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x1bce('0x5'))['db'];var utils=require(_0x1bce('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0x1bce('0x7'));var jayson=require(_0x1bce('0x8'));var client=jayson[_0x1bce('0x9')][_0x1bce('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3bee10,_0x73b0c4,_0x173758){return new BPromise(function(_0x22652e,_0x5bb6bb){return client[_0x1bce('0xb')](_0x3bee10,_0x173758)[_0x1bce('0xc')](function(_0x36a6e0){logger[_0x1bce('0xd')](_0x1bce('0xe'),_0x73b0c4,_0x1bce('0xf'));logger['debug'](_0x1bce('0x10'),_0x73b0c4,_0x1bce('0xf'),JSON[_0x1bce('0x11')](_0x36a6e0));if(_0x36a6e0['error']){if(_0x36a6e0['error'][_0x1bce('0x12')]===0x1f4){logger[_0x1bce('0x13')](_0x1bce('0xe'),_0x73b0c4,_0x36a6e0[_0x1bce('0x13')][_0x1bce('0x14')]);return _0x5bb6bb(_0x36a6e0[_0x1bce('0x13')][_0x1bce('0x14')]);}logger[_0x1bce('0x13')]('SquareMessage,\x20%s,\x20%s',_0x73b0c4,_0x36a6e0['error'][_0x1bce('0x14')]);return _0x22652e(_0x36a6e0['error'][_0x1bce('0x14')]);}else{logger['info']('SquareMessage,\x20%s,\x20%s',_0x73b0c4,_0x1bce('0xf'));_0x22652e(_0x36a6e0['result'][_0x1bce('0x14')]);}})[_0x1bce('0x15')](function(_0x2acc6d){logger['error'](_0x1bce('0xe'),_0x73b0c4,_0x2acc6d);_0x5bb6bb(_0x2acc6d);});});}exports[_0x1bce('0x16')]=function(_0x1a3ae2){var _0x2369ab=this;return new Promise(function(_0x748138,_0x345d18){return db[_0x1bce('0x17')]['create'](_0x1a3ae2[_0x1bce('0x18')],{'raw':_0x1a3ae2['options']?_0x1a3ae2[_0x1bce('0x19')][_0x1bce('0x1a')]===undefined?!![]:![]:!![]})[_0x1bce('0xc')](function(_0x29020e){logger[_0x1bce('0xd')](_0x1bce('0x16'),_0x1a3ae2);logger['debug'](_0x1bce('0x16'),_0x1a3ae2,JSON['stringify'](_0x29020e));_0x748138(_0x29020e);})[_0x1bce('0x15')](function(_0x8bf79a){logger[_0x1bce('0x13')]('CreateSquareMessage',_0x8bf79a[_0x1bce('0x14')],_0x1a3ae2);_0x345d18(_0x2369ab[_0x1bce('0x13')](0x1f4,_0x8bf79a['message']));});});};
\ No newline at end of file
index 181d764..7ccb253 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb76=['15s','test','post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareOdbc.controller','isAuthenticated','index','get','/:id','/:id/test'];(function(_0x478087,_0x109fb2){var _0x54bff1=function(_0x4589b3){while(--_0x4589b3){_0x478087['push'](_0x478087['shift']());}};_0x54bff1(++_0x109fb2);}(_0xdb76,0x1be));var _0x6db7=function(_0x4d71a6,_0x5d3578){_0x4d71a6=_0x4d71a6-0x0;var _0x3342e8=_0xdb76[_0x4d71a6];return _0x3342e8;};'use strict';var multer=require(_0x6db7('0x0'));var util=require(_0x6db7('0x1'));var path=require(_0x6db7('0x2'));var timeout=require(_0x6db7('0x3'));var express=require(_0x6db7('0x4'));var router=express['Router']();var auth=require(_0x6db7('0x5'));var interaction=require(_0x6db7('0x6'));var config=require(_0x6db7('0x7'));var controller=require(_0x6db7('0x8'));router['get']('/',auth[_0x6db7('0x9')](),controller[_0x6db7('0xa')]);router[_0x6db7('0xb')](_0x6db7('0xc'),auth[_0x6db7('0x9')](),controller['show']);router[_0x6db7('0xb')](_0x6db7('0xd'),auth['isAuthenticated'](),timeout(_0x6db7('0xe')),controller[_0x6db7('0xf')]);router[_0x6db7('0x10')]('/',auth[_0x6db7('0x9')](),controller[_0x6db7('0x11')]);router[_0x6db7('0x12')]('/:id',auth['isAuthenticated'](),controller[_0x6db7('0x13')]);router[_0x6db7('0x14')]('/:id',auth[_0x6db7('0x9')](),controller[_0x6db7('0x15')]);module[_0x6db7('0x16')]=router;
\ No newline at end of file
+var _0xd5b6=['put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./squareOdbc.controller','get','isAuthenticated','/:id','show','15s','test','post','create'];(function(_0x58542d,_0x13524c){var _0x2cda7a=function(_0xf37c2d){while(--_0xf37c2d){_0x58542d['push'](_0x58542d['shift']());}};_0x2cda7a(++_0x13524c);}(_0xd5b6,0x73));var _0x6d5b=function(_0x5b043c,_0x748645){_0x5b043c=_0x5b043c-0x0;var _0x1b7c76=_0xd5b6[_0x5b043c];return _0x1b7c76;};'use strict';var multer=require(_0x6d5b('0x0'));var util=require(_0x6d5b('0x1'));var path=require(_0x6d5b('0x2'));var timeout=require(_0x6d5b('0x3'));var express=require(_0x6d5b('0x4'));var router=express[_0x6d5b('0x5')]();var auth=require(_0x6d5b('0x6'));var interaction=require(_0x6d5b('0x7'));var config=require('../../config/environment');var controller=require(_0x6d5b('0x8'));router[_0x6d5b('0x9')]('/',auth[_0x6d5b('0xa')](),controller['index']);router[_0x6d5b('0x9')](_0x6d5b('0xb'),auth[_0x6d5b('0xa')](),controller[_0x6d5b('0xc')]);router['get']('/:id/test',auth[_0x6d5b('0xa')](),timeout(_0x6d5b('0xd')),controller[_0x6d5b('0xe')]);router[_0x6d5b('0xf')]('/',auth[_0x6d5b('0xa')](),controller[_0x6d5b('0x10')]);router[_0x6d5b('0x11')](_0x6d5b('0xb'),auth[_0x6d5b('0xa')](),controller[_0x6d5b('0x12')]);router[_0x6d5b('0x13')](_0x6d5b('0xb'),auth[_0x6d5b('0xa')](),controller[_0x6d5b('0x14')]);module[_0x6d5b('0x15')]=router;
\ No newline at end of file
index 5f65f43..37b6998 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x418d=['exports','STRING','name','sequelize'];(function(_0x109728,_0x4b7e2f){var _0x1a0824=function(_0x49de07){while(--_0x49de07){_0x109728['push'](_0x109728['shift']());}};_0x1a0824(++_0x4b7e2f);}(_0x418d,0x11b));var _0xd418=function(_0x59bb88,_0x276061){_0x59bb88=_0x59bb88-0x0;var _0x4a1151=_0x418d[_0x59bb88];return _0x4a1151;};'use strict';var Sequelize=require(_0xd418('0x0'));module[_0xd418('0x1')]={'name':{'type':Sequelize[_0xd418('0x2')],'unique':_0xd418('0x3'),'allowNull':![]},'dsn':{'type':Sequelize[_0xd418('0x2')]},'description':{'type':Sequelize[_0xd418('0x2')]}};
\ No newline at end of file
+var _0x3511=['sequelize','exports','STRING','name'];(function(_0x1da527,_0x2dc953){var _0x40fc7c=function(_0x9949f5){while(--_0x9949f5){_0x1da527['push'](_0x1da527['shift']());}};_0x40fc7c(++_0x2dc953);}(_0x3511,0xfc));var _0x1351=function(_0xd0d70c,_0x305a87){_0xd0d70c=_0xd0d70c-0x0;var _0x2dd127=_0x3511[_0xd0d70c];return _0x2dd127;};'use strict';var Sequelize=require(_0x1351('0x0'));module[_0x1351('0x1')]={'name':{'type':Sequelize[_0x1351('0x2')],'unique':_0x1351('0x3'),'allowNull':![]},'dsn':{'type':Sequelize[_0x1351('0x2')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 0af3c5f..c608849 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf94e=['merge','map','type','VIRTUAL','field','filter','SquareOdbc','includeAll','include','findAll','rows','show','params','intersection','find','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','get','UserProfileSection','userProfileId','autoAssociation','update','test','dsn','odbc','html-pdf','eml-format','zip-dir','moment','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','count','offset','set','apply','save','destroy','then','ODBC','UserProfileResource','end','error','stack','name','send','index','rawAttributes','model','keys','query','filters','fields','attributes','length','hasOwnProperty','limit','order','sort','pick','where'];(function(_0x23dbf8,_0x4b938a){var _0x33dee4=function(_0x16ccfd){while(--_0x16ccfd){_0x23dbf8['push'](_0x23dbf8['shift']());}};_0x33dee4(++_0x4b938a);}(_0xf94e,0x15d));var _0xef94=function(_0x4d250a,_0x5cb470){_0x4d250a=_0x4d250a-0x0;var _0x2cee04=_0xf94e[_0x4d250a];return _0x2cee04;};'use strict';var pdf=require(_0xef94('0x0'));var emlformat=require(_0xef94('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xef94('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xef94('0x3'));var BPromise=require('bluebird');var Mustache=require(_0xef94('0x4'));var util=require(_0xef94('0x5'));var path=require(_0xef94('0x6'));var sox=require('sox');var csv=require(_0xef94('0x7'));var ejs=require(_0xef94('0x8'));var fs=require('fs');var _=require(_0xef94('0x9'));var squel=require(_0xef94('0xa'));var crypto=require(_0xef94('0xb'));var jsforce=require(_0xef94('0xc'));var deskjs=require('desk.js');var toCsv=require(_0xef94('0x7'));var querystring=require(_0xef94('0xd'));var Papa=require(_0xef94('0xe'));var Redis=require('ioredis');var authService=require(_0xef94('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xef94('0x10'))(_0xef94('0x11'));var utils=require(_0xef94('0x12'));var config=require('../../config/environment');var db=require(_0xef94('0x13'))['db'];function respondWithStatusCode(_0x4e2de1,_0x13a5ae){_0x13a5ae=_0x13a5ae||0xcc;return function(_0x5dddfb){if(_0x5dddfb){return _0x4e2de1[_0xef94('0x14')](_0x13a5ae);}return _0x4e2de1[_0xef94('0x15')](_0x13a5ae)['end']();};}function respondWithResult(_0xf92d1e,_0x1ba766){_0x1ba766=_0x1ba766||0xc8;return function(_0x4847b2){if(_0x4847b2){return _0xf92d1e['status'](_0x1ba766)['json'](_0x4847b2);}};}function respondWithFilteredResult(_0x5afd09,_0x45d80e){return function(_0x2f02b8){if(_0x2f02b8){var _0xd03834=_0x2f02b8[_0xef94('0x16')],_0x3daca9=_0x45d80e[_0xef94('0x17')],_0x9d9c37=_0x45d80e[_0xef94('0x17')]+_0x45d80e['limit'],_0x480046;if(_0x9d9c37>=_0xd03834){_0x9d9c37=_0xd03834;_0x480046=0xc8;}else{_0x480046=0xce;}_0x5afd09[_0xef94('0x15')](_0x480046);return _0x5afd09[_0xef94('0x18')]('Content-Range',_0x3daca9+'-'+_0x9d9c37+'/'+_0xd03834)['json'](_0x2f02b8);}return null;};}function patchUpdates(_0x57ae8e){return function(_0x25adce){try{jsonpatch[_0xef94('0x19')](_0x25adce,_0x57ae8e,!![]);}catch(_0x55848d){return BPromise['reject'](_0x55848d);}return _0x25adce[_0xef94('0x1a')]();};}function saveUpdates(_0x5bc51d,_0x2dc5ee){return function(_0x2bfdc2){if(_0x2bfdc2){return _0x2bfdc2['update'](_0x5bc51d)['then'](function(_0x567726){return _0x567726;});}return null;};}function removeEntity(_0x538a18,_0x3ceaa0){return function(_0x546ee7){if(_0x546ee7){return _0x546ee7[_0xef94('0x1b')]()[_0xef94('0x1c')](function(){var _0x54ffac=_0x546ee7['get']({'plain':!![]});var _0xebca3e=_0xef94('0x1d');return db[_0xef94('0x1e')]['destroy']({'where':{'type':_0xebca3e,'resourceId':_0x54ffac['id']}})[_0xef94('0x1c')](function(){return _0x546ee7;});})[_0xef94('0x1c')](function(){_0x538a18[_0xef94('0x15')](0xcc)[_0xef94('0x1f')]();});}};}function handleEntityNotFound(_0x3ab80b,_0x1f1a4f){return function(_0x3b52e8){if(!_0x3b52e8){_0x3ab80b['sendStatus'](0x194);}return _0x3b52e8;};}function handleError(_0x1734c4,_0x40d571){_0x40d571=_0x40d571||0x1f4;return function(_0x25931a){logger[_0xef94('0x20')](_0x25931a[_0xef94('0x21')]);if(_0x25931a[_0xef94('0x22')]){delete _0x25931a[_0xef94('0x22')];}_0x1734c4[_0xef94('0x15')](_0x40d571)[_0xef94('0x23')](_0x25931a);};}exports[_0xef94('0x24')]=function(_0x26d99e,_0x448186){var _0x5b5b0b={},_0x17fb8e={},_0x20370a={'count':0x0,'rows':[]};var _0x45a341=db['SquareOdbc'][_0xef94('0x25')];_0x17fb8e[_0xef94('0x26')]=_[_0xef94('0x27')](_0x45a341);_0x17fb8e[_0xef94('0x28')]=_[_0xef94('0x27')](_0x26d99e[_0xef94('0x28')]);_0x17fb8e[_0xef94('0x29')]=_['intersection'](_0x17fb8e[_0xef94('0x26')],_0x17fb8e['query']);_0x5b5b0b['attributes']=_['intersection'](_0x17fb8e[_0xef94('0x26')],qs[_0xef94('0x2a')](_0x26d99e[_0xef94('0x28')]['fields']));_0x5b5b0b[_0xef94('0x2b')]=_0x5b5b0b[_0xef94('0x2b')][_0xef94('0x2c')]?_0x5b5b0b[_0xef94('0x2b')]:_0x17fb8e['model'];if(!_0x26d99e[_0xef94('0x28')][_0xef94('0x2d')]('nolimit')){_0x5b5b0b['limit']=qs[_0xef94('0x2e')](_0x26d99e[_0xef94('0x28')]['limit']);_0x5b5b0b[_0xef94('0x17')]=qs['offset'](_0x26d99e[_0xef94('0x28')][_0xef94('0x17')]);}_0x5b5b0b[_0xef94('0x2f')]=qs[_0xef94('0x30')](_0x26d99e[_0xef94('0x28')][_0xef94('0x30')]);_0x5b5b0b['where']=qs[_0xef94('0x29')](_[_0xef94('0x31')](_0x26d99e[_0xef94('0x28')],_0x17fb8e[_0xef94('0x29')]));if(_0x26d99e[_0xef94('0x28')]['filter']){_0x5b5b0b[_0xef94('0x32')]=_[_0xef94('0x33')](_0x5b5b0b[_0xef94('0x32')],{'$or':_[_0xef94('0x34')](_0x45a341,function(_0x1b1730){if(_0x1b1730[_0xef94('0x35')]['key']!==_0xef94('0x36')){var _0x2c9a9f={};_0x2c9a9f[_0x1b1730[_0xef94('0x37')]]={'$like':'%'+_0x26d99e['query'][_0xef94('0x38')]+'%'};return _0x2c9a9f;}})});}_0x5b5b0b=_[_0xef94('0x33')]({},_0x5b5b0b,_0x26d99e['options']);var _0x366fc4={'where':_0x5b5b0b[_0xef94('0x32')]};return db[_0xef94('0x39')]['count'](_0x366fc4)[_0xef94('0x1c')](function(_0x24e0be){_0x20370a[_0xef94('0x16')]=_0x24e0be;if(_0x26d99e[_0xef94('0x28')][_0xef94('0x3a')]){_0x5b5b0b[_0xef94('0x3b')]=[{'all':!![]}];}return db['SquareOdbc'][_0xef94('0x3c')](_0x5b5b0b);})[_0xef94('0x1c')](function(_0xaee82){_0x20370a[_0xef94('0x3d')]=_0xaee82;return _0x20370a;})[_0xef94('0x1c')](respondWithFilteredResult(_0x448186,_0x5b5b0b))['catch'](handleError(_0x448186,null));};exports[_0xef94('0x3e')]=function(_0x2c6fee,_0x36c2dd){var _0x195b47={'raw':!![],'where':{'id':_0x2c6fee[_0xef94('0x3f')]['id']}},_0x387977={};_0x387977[_0xef94('0x26')]=_[_0xef94('0x27')](db[_0xef94('0x39')][_0xef94('0x25')]);_0x387977[_0xef94('0x28')]=_['keys'](_0x2c6fee[_0xef94('0x28')]);_0x387977[_0xef94('0x29')]=_[_0xef94('0x40')](_0x387977[_0xef94('0x26')],_0x387977[_0xef94('0x28')]);_0x195b47['attributes']=_[_0xef94('0x40')](_0x387977['model'],qs[_0xef94('0x2a')](_0x2c6fee[_0xef94('0x28')][_0xef94('0x2a')]));_0x195b47['attributes']=_0x195b47['attributes'][_0xef94('0x2c')]?_0x195b47[_0xef94('0x2b')]:_0x387977[_0xef94('0x26')];if(_0x2c6fee[_0xef94('0x28')][_0xef94('0x3a')]){_0x195b47[_0xef94('0x3b')]=[{'all':!![]}];}_0x195b47=_['merge']({},_0x195b47,_0x2c6fee['options']);return db[_0xef94('0x39')][_0xef94('0x41')](_0x195b47)[_0xef94('0x1c')](handleEntityNotFound(_0x36c2dd,null))[_0xef94('0x1c')](respondWithResult(_0x36c2dd,null))[_0xef94('0x42')](handleError(_0x36c2dd,null));};exports[_0xef94('0x43')]=function(_0x300b5c,_0x4da6de){return db[_0xef94('0x39')][_0xef94('0x43')](_0x300b5c[_0xef94('0x44')],{})[_0xef94('0x1c')](function(_0x1cd292){var _0x88c3f9=_0x300b5c[_0xef94('0x45')]['get']({'plain':!![]});if(!_0x88c3f9)throw new Error(_0xef94('0x46'));if(_0x88c3f9[_0xef94('0x47')]===_0xef94('0x45')){var _0x1037fa=_0x1cd292[_0xef94('0x48')]({'plain':!![]});var _0x43306f=_0xef94('0x1d');return db[_0xef94('0x49')][_0xef94('0x41')]({'where':{'name':_0x43306f,'userProfileId':_0x88c3f9[_0xef94('0x4a')]},'raw':!![]})['then'](function(_0x59ed2e){if(_0x59ed2e&&_0x59ed2e[_0xef94('0x4b')]===0x0){return db[_0xef94('0x1e')][_0xef94('0x43')]({'name':_0x1037fa['name'],'resourceId':_0x1037fa['id'],'type':_0x59ed2e[_0xef94('0x22')],'sectionId':_0x59ed2e['id']},{})[_0xef94('0x1c')](function(){return _0x1cd292;});}else{return _0x1cd292;}})['catch'](function(_0x5eca9e){logger[_0xef94('0x20')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x5eca9e);throw _0x5eca9e;});}return _0x1cd292;})[_0xef94('0x1c')](respondWithResult(_0x4da6de,0xc9))['catch'](handleError(_0x4da6de,null));};exports[_0xef94('0x4c')]=function(_0x3e938d,_0xc72627){if(_0x3e938d[_0xef94('0x44')]['id']){delete _0x3e938d[_0xef94('0x44')]['id'];}return db['SquareOdbc'][_0xef94('0x41')]({'where':{'id':_0x3e938d[_0xef94('0x3f')]['id']}})[_0xef94('0x1c')](handleEntityNotFound(_0xc72627,null))[_0xef94('0x1c')](saveUpdates(_0x3e938d['body'],null))[_0xef94('0x1c')](respondWithResult(_0xc72627,null))[_0xef94('0x42')](handleError(_0xc72627,null));};exports[_0xef94('0x1b')]=function(_0x8751d8,_0x1c5ac4){return db[_0xef94('0x39')][_0xef94('0x41')]({'where':{'id':_0x8751d8[_0xef94('0x3f')]['id']}})[_0xef94('0x1c')](handleEntityNotFound(_0x1c5ac4,null))[_0xef94('0x1c')](removeEntity(_0x1c5ac4,null))['catch'](handleError(_0x1c5ac4,null));};exports[_0xef94('0x4d')]=function(_0x4e8cff,_0x1cd8bd,_0x2e70bf){var _0x47d91a;return db[_0xef94('0x39')][_0xef94('0x41')]({'where':{'id':_0x4e8cff[_0xef94('0x3f')]['id']},'attributes':['id',_0xef94('0x4e')]})['then'](handleEntityNotFound(_0x1cd8bd,null))[_0xef94('0x1c')](function(_0x2aadf3){if(_0x2aadf3){var _0x22215f=require(_0xef94('0x4f'))();_0x22215f['openSync'](_0x2aadf3[_0xef94('0x4e')]);_0x22215f['closeSync']();return _0x2aadf3;}})[_0xef94('0x1c')](respondWithResult(_0x1cd8bd,null))[_0xef94('0x42')](handleError(_0x1cd8bd,null));};
\ No newline at end of file
+var _0xcdb3=['UserProfileSection','autoAssociation','UserProfileResource','update','body','test','dsn','odbc','openSync','closeSync','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','path','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','limit','status','set','Content-Range','save','then','destroy','get','ODBC','stack','name','SquareOdbc','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','params','rawAttributes','find','catch','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role'];(function(_0x5258bf,_0x419f3f){var _0x50ac89=function(_0x527477){while(--_0x527477){_0x5258bf['push'](_0x5258bf['shift']());}};_0x50ac89(++_0x419f3f);}(_0xcdb3,0xb4));var _0x3cdb=function(_0x3b8908,_0x461f7f){_0x3b8908=_0x3b8908-0x0;var _0x3366dc=_0xcdb3[_0x3b8908];return _0x3366dc;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x3cdb('0x0'));var rimraf=require(_0x3cdb('0x1'));var zipdir=require(_0x3cdb('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3cdb('0x3'));var moment=require(_0x3cdb('0x4'));var BPromise=require(_0x3cdb('0x5'));var Mustache=require(_0x3cdb('0x6'));var util=require('util');var path=require(_0x3cdb('0x7'));var sox=require(_0x3cdb('0x8'));var csv=require('to-csv');var ejs=require(_0x3cdb('0x9'));var fs=require('fs');var _=require(_0x3cdb('0xa'));var squel=require(_0x3cdb('0xb'));var crypto=require('crypto');var jsforce=require(_0x3cdb('0xc'));var deskjs=require(_0x3cdb('0xd'));var toCsv=require(_0x3cdb('0xe'));var querystring=require('querystring');var Papa=require(_0x3cdb('0xf'));var Redis=require(_0x3cdb('0x10'));var authService=require(_0x3cdb('0x11'));var qs=require(_0x3cdb('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x3cdb('0x13'))(_0x3cdb('0x14'));var utils=require(_0x3cdb('0x15'));var config=require(_0x3cdb('0x16'));var db=require(_0x3cdb('0x17'))['db'];function respondWithStatusCode(_0x55b133,_0x6b40fa){_0x6b40fa=_0x6b40fa||0xcc;return function(_0x563208){if(_0x563208){return _0x55b133[_0x3cdb('0x18')](_0x6b40fa);}return _0x55b133['status'](_0x6b40fa)[_0x3cdb('0x19')]();};}function respondWithResult(_0xed5df9,_0x5838ef){_0x5838ef=_0x5838ef||0xc8;return function(_0x21bb18){if(_0x21bb18){return _0xed5df9['status'](_0x5838ef)[_0x3cdb('0x1a')](_0x21bb18);}};}function respondWithFilteredResult(_0x9dd80a,_0xcf4acd){return function(_0x31198b){if(_0x31198b){var _0x520a3a=_0x31198b[_0x3cdb('0x1b')],_0xc2dfd5=_0xcf4acd[_0x3cdb('0x1c')],_0x1c716f=_0xcf4acd[_0x3cdb('0x1c')]+_0xcf4acd[_0x3cdb('0x1d')],_0x54e444;if(_0x1c716f>=_0x520a3a){_0x1c716f=_0x520a3a;_0x54e444=0xc8;}else{_0x54e444=0xce;}_0x9dd80a[_0x3cdb('0x1e')](_0x54e444);return _0x9dd80a[_0x3cdb('0x1f')](_0x3cdb('0x20'),_0xc2dfd5+'-'+_0x1c716f+'/'+_0x520a3a)['json'](_0x31198b);}return null;};}function patchUpdates(_0x3bff06){return function(_0x1f4352){try{jsonpatch['apply'](_0x1f4352,_0x3bff06,!![]);}catch(_0x4e8530){return BPromise['reject'](_0x4e8530);}return _0x1f4352[_0x3cdb('0x21')]();};}function saveUpdates(_0x49c19c,_0x3b2e76){return function(_0x3dee43){if(_0x3dee43){return _0x3dee43['update'](_0x49c19c)[_0x3cdb('0x22')](function(_0x221613){return _0x221613;});}return null;};}function removeEntity(_0x54d1d5,_0x248672){return function(_0x443419){if(_0x443419){return _0x443419[_0x3cdb('0x23')]()[_0x3cdb('0x22')](function(){var _0x1960f3=_0x443419[_0x3cdb('0x24')]({'plain':!![]});var _0x17fd31=_0x3cdb('0x25');return db['UserProfileResource'][_0x3cdb('0x23')]({'where':{'type':_0x17fd31,'resourceId':_0x1960f3['id']}})[_0x3cdb('0x22')](function(){return _0x443419;});})[_0x3cdb('0x22')](function(){_0x54d1d5[_0x3cdb('0x1e')](0xcc)[_0x3cdb('0x19')]();});}};}function handleEntityNotFound(_0xe1f423,_0x4fc7b5){return function(_0x464bcc){if(!_0x464bcc){_0xe1f423[_0x3cdb('0x18')](0x194);}return _0x464bcc;};}function handleError(_0x2ad477,_0x28706c){_0x28706c=_0x28706c||0x1f4;return function(_0x88ca7b){logger['error'](_0x88ca7b[_0x3cdb('0x26')]);if(_0x88ca7b[_0x3cdb('0x27')]){delete _0x88ca7b[_0x3cdb('0x27')];}_0x2ad477[_0x3cdb('0x1e')](_0x28706c)['send'](_0x88ca7b);};}exports['index']=function(_0x4df071,_0x39f67a){var _0x14a3e9={},_0x5e3948={},_0x26398f={'count':0x0,'rows':[]};var _0x35ad7f=db[_0x3cdb('0x28')]['rawAttributes'];_0x5e3948[_0x3cdb('0x29')]=_[_0x3cdb('0x2a')](_0x35ad7f);_0x5e3948[_0x3cdb('0x2b')]=_['keys'](_0x4df071[_0x3cdb('0x2b')]);_0x5e3948[_0x3cdb('0x2c')]=_[_0x3cdb('0x2d')](_0x5e3948['model'],_0x5e3948[_0x3cdb('0x2b')]);_0x14a3e9[_0x3cdb('0x2e')]=_[_0x3cdb('0x2d')](_0x5e3948[_0x3cdb('0x29')],qs[_0x3cdb('0x2f')](_0x4df071[_0x3cdb('0x2b')][_0x3cdb('0x2f')]));_0x14a3e9[_0x3cdb('0x2e')]=_0x14a3e9[_0x3cdb('0x2e')][_0x3cdb('0x30')]?_0x14a3e9[_0x3cdb('0x2e')]:_0x5e3948[_0x3cdb('0x29')];if(!_0x4df071[_0x3cdb('0x2b')][_0x3cdb('0x31')](_0x3cdb('0x32'))){_0x14a3e9['limit']=qs[_0x3cdb('0x1d')](_0x4df071[_0x3cdb('0x2b')][_0x3cdb('0x1d')]);_0x14a3e9[_0x3cdb('0x1c')]=qs[_0x3cdb('0x1c')](_0x4df071[_0x3cdb('0x2b')][_0x3cdb('0x1c')]);}_0x14a3e9['order']=qs[_0x3cdb('0x33')](_0x4df071[_0x3cdb('0x2b')]['sort']);_0x14a3e9[_0x3cdb('0x34')]=qs[_0x3cdb('0x2c')](_[_0x3cdb('0x35')](_0x4df071[_0x3cdb('0x2b')],_0x5e3948['filters']));if(_0x4df071['query'][_0x3cdb('0x36')]){_0x14a3e9[_0x3cdb('0x34')]=_[_0x3cdb('0x37')](_0x14a3e9[_0x3cdb('0x34')],{'$or':_[_0x3cdb('0x38')](_0x35ad7f,function(_0x19de01){if(_0x19de01[_0x3cdb('0x39')][_0x3cdb('0x3a')]!==_0x3cdb('0x3b')){var _0x5d42d4={};_0x5d42d4[_0x19de01[_0x3cdb('0x3c')]]={'$like':'%'+_0x4df071[_0x3cdb('0x2b')][_0x3cdb('0x36')]+'%'};return _0x5d42d4;}})});}_0x14a3e9=_['merge']({},_0x14a3e9,_0x4df071[_0x3cdb('0x3d')]);var _0x4cabea={'where':_0x14a3e9['where']};return db[_0x3cdb('0x28')][_0x3cdb('0x1b')](_0x4cabea)[_0x3cdb('0x22')](function(_0x2fcf6b){_0x26398f['count']=_0x2fcf6b;if(_0x4df071[_0x3cdb('0x2b')][_0x3cdb('0x3e')]){_0x14a3e9[_0x3cdb('0x3f')]=[{'all':!![]}];}return db[_0x3cdb('0x28')][_0x3cdb('0x40')](_0x14a3e9);})[_0x3cdb('0x22')](function(_0x4ac4bf){_0x26398f[_0x3cdb('0x41')]=_0x4ac4bf;return _0x26398f;})[_0x3cdb('0x22')](respondWithFilteredResult(_0x39f67a,_0x14a3e9))['catch'](handleError(_0x39f67a,null));};exports[_0x3cdb('0x42')]=function(_0x18b777,_0x4e8b15){var _0x19e828={'raw':!![],'where':{'id':_0x18b777[_0x3cdb('0x43')]['id']}},_0x2fd1bb={};_0x2fd1bb['model']=_['keys'](db[_0x3cdb('0x28')][_0x3cdb('0x44')]);_0x2fd1bb[_0x3cdb('0x2b')]=_[_0x3cdb('0x2a')](_0x18b777['query']);_0x2fd1bb[_0x3cdb('0x2c')]=_['intersection'](_0x2fd1bb[_0x3cdb('0x29')],_0x2fd1bb[_0x3cdb('0x2b')]);_0x19e828[_0x3cdb('0x2e')]=_[_0x3cdb('0x2d')](_0x2fd1bb[_0x3cdb('0x29')],qs[_0x3cdb('0x2f')](_0x18b777['query'][_0x3cdb('0x2f')]));_0x19e828[_0x3cdb('0x2e')]=_0x19e828[_0x3cdb('0x2e')][_0x3cdb('0x30')]?_0x19e828[_0x3cdb('0x2e')]:_0x2fd1bb['model'];if(_0x18b777['query'][_0x3cdb('0x3e')]){_0x19e828[_0x3cdb('0x3f')]=[{'all':!![]}];}_0x19e828=_[_0x3cdb('0x37')]({},_0x19e828,_0x18b777[_0x3cdb('0x3d')]);return db[_0x3cdb('0x28')][_0x3cdb('0x45')](_0x19e828)[_0x3cdb('0x22')](handleEntityNotFound(_0x4e8b15,null))['then'](respondWithResult(_0x4e8b15,null))[_0x3cdb('0x46')](handleError(_0x4e8b15,null));};exports[_0x3cdb('0x47')]=function(_0x510d6b,_0xd2534f){return db[_0x3cdb('0x28')][_0x3cdb('0x47')](_0x510d6b['body'],{})['then'](function(_0x2c4ef3){var _0x21c43e=_0x510d6b[_0x3cdb('0x48')][_0x3cdb('0x24')]({'plain':!![]});if(!_0x21c43e)throw new Error(_0x3cdb('0x49'));if(_0x21c43e[_0x3cdb('0x4a')]===_0x3cdb('0x48')){var _0x289b6b=_0x2c4ef3[_0x3cdb('0x24')]({'plain':!![]});var _0x2557a1=_0x3cdb('0x25');return db[_0x3cdb('0x4b')]['find']({'where':{'name':_0x2557a1,'userProfileId':_0x21c43e['userProfileId']},'raw':!![]})[_0x3cdb('0x22')](function(_0x51e2f6){if(_0x51e2f6&&_0x51e2f6[_0x3cdb('0x4c')]===0x0){return db[_0x3cdb('0x4d')][_0x3cdb('0x47')]({'name':_0x289b6b['name'],'resourceId':_0x289b6b['id'],'type':_0x51e2f6[_0x3cdb('0x27')],'sectionId':_0x51e2f6['id']},{})[_0x3cdb('0x22')](function(){return _0x2c4ef3;});}else{return _0x2c4ef3;}})[_0x3cdb('0x46')](function(_0x1cc0dd){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x1cc0dd);throw _0x1cc0dd;});}return _0x2c4ef3;})[_0x3cdb('0x22')](respondWithResult(_0xd2534f,0xc9))[_0x3cdb('0x46')](handleError(_0xd2534f,null));};exports[_0x3cdb('0x4e')]=function(_0xc006f0,_0x1d891e){if(_0xc006f0['body']['id']){delete _0xc006f0[_0x3cdb('0x4f')]['id'];}return db[_0x3cdb('0x28')][_0x3cdb('0x45')]({'where':{'id':_0xc006f0[_0x3cdb('0x43')]['id']}})['then'](handleEntityNotFound(_0x1d891e,null))[_0x3cdb('0x22')](saveUpdates(_0xc006f0[_0x3cdb('0x4f')],null))[_0x3cdb('0x22')](respondWithResult(_0x1d891e,null))['catch'](handleError(_0x1d891e,null));};exports[_0x3cdb('0x23')]=function(_0x3d2a25,_0x4c35a0){return db[_0x3cdb('0x28')][_0x3cdb('0x45')]({'where':{'id':_0x3d2a25[_0x3cdb('0x43')]['id']}})[_0x3cdb('0x22')](handleEntityNotFound(_0x4c35a0,null))[_0x3cdb('0x22')](removeEntity(_0x4c35a0,null))[_0x3cdb('0x46')](handleError(_0x4c35a0,null));};exports[_0x3cdb('0x50')]=function(_0x289a7e,_0x2fc3b6,_0x35dfae){var _0x3f89bc;return db['SquareOdbc'][_0x3cdb('0x45')]({'where':{'id':_0x289a7e[_0x3cdb('0x43')]['id']},'attributes':['id',_0x3cdb('0x51')]})[_0x3cdb('0x22')](handleEntityNotFound(_0x2fc3b6,null))[_0x3cdb('0x22')](function(_0x364a7c){if(_0x364a7c){var _0x33a8a5=require(_0x3cdb('0x52'))();_0x33a8a5[_0x3cdb('0x53')](_0x364a7c['dsn']);_0x33a8a5[_0x3cdb('0x54')]();return _0x364a7c;}})['then'](respondWithResult(_0x2fc3b6,null))['catch'](handleError(_0x2fc3b6,null));};
\ No newline at end of file
index d30674c..666b69e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2238=['moment','bluebird','request-promise','path','../../config/environment','./squareOdbc.attributes','define','SquareOdbc','square_odbc','lodash','util','../../config/logger','api'];(function(_0x22b798,_0xb43a9f){var _0x5e9d1b=function(_0x4ebca7){while(--_0x4ebca7){_0x22b798['push'](_0x22b798['shift']());}};_0x5e9d1b(++_0xb43a9f);}(_0x2238,0x19c));var _0x8223=function(_0x22d61c,_0x322eeb){_0x22d61c=_0x22d61c-0x0;var _0x2579bb=_0x2238[_0x22d61c];return _0x2579bb;};'use strict';var _=require(_0x8223('0x0'));var util=require(_0x8223('0x1'));var logger=require(_0x8223('0x2'))(_0x8223('0x3'));var moment=require(_0x8223('0x4'));var BPromise=require(_0x8223('0x5'));var rp=require(_0x8223('0x6'));var fs=require('fs');var path=require(_0x8223('0x7'));var rimraf=require('rimraf');var config=require(_0x8223('0x8'));var attributes=require(_0x8223('0x9'));module['exports']=function(_0x25bfe7,_0x4493ea){return _0x25bfe7[_0x8223('0xa')](_0x8223('0xb'),attributes,{'tableName':_0x8223('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6c4c=['bluebird','rimraf','../../config/environment','exports','define','SquareOdbc','util','../../config/logger','api'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x6c4c,0xba));var _0xc6c4=function(_0x31e555,_0x859c76){_0x31e555=_0x31e555-0x0;var _0xd91def=_0x6c4c[_0x31e555];return _0xd91def;};'use strict';var _=require('lodash');var util=require(_0xc6c4('0x0'));var logger=require(_0xc6c4('0x1'))(_0xc6c4('0x2'));var moment=require('moment');var BPromise=require(_0xc6c4('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xc6c4('0x4'));var config=require(_0xc6c4('0x5'));var attributes=require('./squareOdbc.attributes');module[_0xc6c4('0x6')]=function(_0x50bf17,_0x3a0a2d){return _0x50bf17[_0xc6c4('0x7')](_0xc6c4('0x8'),attributes,{'tableName':'square_odbc','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 197ef85..95290a8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9ba3=['find','options','raw','where','include','map','model','attributes','stringify','catch','util','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','SquareOdbc,\x20%s,\x20%s','debug','SquareOdbc,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','SquareOdbc'];(function(_0x40bffc,_0x3a45d7){var _0x3007e9=function(_0x4c8fda){while(--_0x4c8fda){_0x40bffc['push'](_0x40bffc['shift']());}};_0x3007e9(++_0x3a45d7);}(_0x9ba3,0x1bc));var _0x39ba=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x9ba3[_0xa464c9];return _0x3d73c4;};'use strict';var _=require('lodash');var util=require(_0x39ba('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x39ba('0x1'));var db=require(_0x39ba('0x2'))['db'];var utils=require(_0x39ba('0x3'));var logger=require(_0x39ba('0x4'))(_0x39ba('0x5'));var config=require(_0x39ba('0x6'));var jayson=require(_0x39ba('0x7'));var client=jayson['client'][_0x39ba('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x2d4798,_0x361bc6,_0x579c6d){return new BPromise(function(_0xaeeec4,_0x2546a0){return client[_0x39ba('0x9')](_0x2d4798,_0x579c6d)[_0x39ba('0xa')](function(_0x2d6388){logger[_0x39ba('0xb')](_0x39ba('0xc'),_0x361bc6,'request\x20sent');logger[_0x39ba('0xd')](_0x39ba('0xe'),_0x361bc6,_0x39ba('0xf'),JSON['stringify'](_0x2d6388));if(_0x2d6388[_0x39ba('0x10')]){if(_0x2d6388[_0x39ba('0x10')][_0x39ba('0x11')]===0x1f4){logger['error'](_0x39ba('0xc'),_0x361bc6,_0x2d6388[_0x39ba('0x10')]['message']);return _0x2546a0(_0x2d6388[_0x39ba('0x10')][_0x39ba('0x12')]);}logger[_0x39ba('0x10')](_0x39ba('0xc'),_0x361bc6,_0x2d6388[_0x39ba('0x10')]['message']);return _0xaeeec4(_0x2d6388[_0x39ba('0x10')][_0x39ba('0x12')]);}else{logger['info'](_0x39ba('0xc'),_0x361bc6,_0x39ba('0xf'));_0xaeeec4(_0x2d6388[_0x39ba('0x13')]['message']);}})['catch'](function(_0x5b8ea0){logger[_0x39ba('0x10')](_0x39ba('0xc'),_0x361bc6,_0x5b8ea0);_0x2546a0(_0x5b8ea0);});});}exports['ShowSquareOdbc']=function(_0x1e7b5a){var _0x2a691b=this;return new Promise(function(_0x2879b0,_0x45b839){return db[_0x39ba('0x14')][_0x39ba('0x15')]({'raw':_0x1e7b5a[_0x39ba('0x16')]?_0x1e7b5a['options'][_0x39ba('0x17')]===undefined?!![]:![]:!![],'where':_0x1e7b5a[_0x39ba('0x16')]?_0x1e7b5a['options'][_0x39ba('0x18')]||null:null,'attributes':_0x1e7b5a[_0x39ba('0x16')]?_0x1e7b5a[_0x39ba('0x16')]['attributes']||null:null,'include':_0x1e7b5a[_0x39ba('0x16')]?_0x1e7b5a[_0x39ba('0x16')][_0x39ba('0x19')]?_[_0x39ba('0x1a')](_0x1e7b5a[_0x39ba('0x16')][_0x39ba('0x19')],function(_0x162085){return{'model':db[_0x162085[_0x39ba('0x1b')]],'as':_0x162085['as'],'attributes':_0x162085['attributes'],'include':_0x162085[_0x39ba('0x19')]?_[_0x39ba('0x1a')](_0x162085['include'],function(_0x15b7d9){return{'model':db[_0x15b7d9[_0x39ba('0x1b')]],'as':_0x15b7d9['as'],'attributes':_0x15b7d9[_0x39ba('0x1c')],'include':_0x15b7d9[_0x39ba('0x19')]?_[_0x39ba('0x1a')](_0x15b7d9['include'],function(_0x5cbfee){return{'model':db[_0x5cbfee[_0x39ba('0x1b')]],'as':_0x5cbfee['as'],'attributes':_0x5cbfee[_0x39ba('0x1c')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x12ec32){logger[_0x39ba('0xb')]('ShowSquareOdbc',_0x1e7b5a);logger[_0x39ba('0xd')]('ShowSquareOdbc',_0x1e7b5a,JSON[_0x39ba('0x1d')](_0x12ec32));_0x2879b0(_0x12ec32);})[_0x39ba('0x1e')](function(_0x18047b){logger['error']('ShowSquareOdbc',_0x18047b[_0x39ba('0x12')],_0x1e7b5a);_0x45b839(_0x2a691b[_0x39ba('0x10')](0x1f4,_0x18047b['message']));});});};
\ No newline at end of file
+var _0x1003=['model','ShowSquareOdbc','stringify','moment','bluebird','ioredis','rpc','../../config/environment','jayson/promise','request','info','SquareOdbc,\x20%s,\x20%s','debug','error','message','request\x20sent','result','catch','SquareOdbc','find','options','raw','where','attributes','map','include'];(function(_0x273f77,_0xe5b0cb){var _0x71e147=function(_0x564056){while(--_0x564056){_0x273f77['push'](_0x273f77['shift']());}};_0x71e147(++_0xe5b0cb);}(_0x1003,0xed));var _0x3100=function(_0x312a12,_0x42c36f){_0x312a12=_0x312a12-0x0;var _0x31bc9b=_0x1003[_0x312a12];return _0x31bc9b;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x3100('0x0'));var BPromise=require(_0x3100('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x3100('0x2'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x3100('0x3'));var config=require(_0x3100('0x4'));var jayson=require(_0x3100('0x5'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x23624c,_0x45067b,_0x15b553){return new BPromise(function(_0x4b1c77,_0x3250cf){return client[_0x3100('0x6')](_0x23624c,_0x15b553)['then'](function(_0xd6c3c6){logger[_0x3100('0x7')](_0x3100('0x8'),_0x45067b,'request\x20sent');logger[_0x3100('0x9')]('SquareOdbc,\x20%s,\x20%s,\x20%s',_0x45067b,'request\x20sent',JSON['stringify'](_0xd6c3c6));if(_0xd6c3c6['error']){if(_0xd6c3c6[_0x3100('0xa')]['code']===0x1f4){logger[_0x3100('0xa')](_0x3100('0x8'),_0x45067b,_0xd6c3c6[_0x3100('0xa')][_0x3100('0xb')]);return _0x3250cf(_0xd6c3c6[_0x3100('0xa')][_0x3100('0xb')]);}logger[_0x3100('0xa')](_0x3100('0x8'),_0x45067b,_0xd6c3c6[_0x3100('0xa')][_0x3100('0xb')]);return _0x4b1c77(_0xd6c3c6[_0x3100('0xa')][_0x3100('0xb')]);}else{logger[_0x3100('0x7')](_0x3100('0x8'),_0x45067b,_0x3100('0xc'));_0x4b1c77(_0xd6c3c6[_0x3100('0xd')][_0x3100('0xb')]);}})[_0x3100('0xe')](function(_0x960c13){logger[_0x3100('0xa')]('SquareOdbc,\x20%s,\x20%s',_0x45067b,_0x960c13);_0x3250cf(_0x960c13);});});}exports['ShowSquareOdbc']=function(_0x498bc0){var _0x38293d=this;return new Promise(function(_0x46d024,_0x12b22a){return db[_0x3100('0xf')][_0x3100('0x10')]({'raw':_0x498bc0['options']?_0x498bc0[_0x3100('0x11')][_0x3100('0x12')]===undefined?!![]:![]:!![],'where':_0x498bc0[_0x3100('0x11')]?_0x498bc0[_0x3100('0x11')][_0x3100('0x13')]||null:null,'attributes':_0x498bc0[_0x3100('0x11')]?_0x498bc0['options'][_0x3100('0x14')]||null:null,'include':_0x498bc0['options']?_0x498bc0[_0x3100('0x11')]['include']?_[_0x3100('0x15')](_0x498bc0[_0x3100('0x11')][_0x3100('0x16')],function(_0x3d33a1){return{'model':db[_0x3d33a1['model']],'as':_0x3d33a1['as'],'attributes':_0x3d33a1[_0x3100('0x14')],'include':_0x3d33a1[_0x3100('0x16')]?_[_0x3100('0x15')](_0x3d33a1['include'],function(_0x32cf70){return{'model':db[_0x32cf70[_0x3100('0x17')]],'as':_0x32cf70['as'],'attributes':_0x32cf70[_0x3100('0x14')],'include':_0x32cf70[_0x3100('0x16')]?_['map'](_0x32cf70[_0x3100('0x16')],function(_0x2d3367){return{'model':db[_0x2d3367[_0x3100('0x17')]],'as':_0x2d3367['as'],'attributes':_0x2d3367[_0x3100('0x14')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x23edad){logger['info'](_0x3100('0x18'),_0x498bc0);logger[_0x3100('0x9')](_0x3100('0x18'),_0x498bc0,JSON[_0x3100('0x19')](_0x23edad));_0x46d024(_0x23edad);})['catch'](function(_0x25ef3b){logger['error']('ShowSquareOdbc',_0x25ef3b['message'],_0x498bc0);_0x12b22a(_0x38293d[_0x3100('0xa')](0x1f4,_0x25ef3b['message']));});});};
\ No newline at end of file
index aeb5f67..2db5dbb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7d8=['express','../../components/auth/service','../../config/environment','./squareProject.controller','get','isAuthenticated','/:id','/:id/users','create','post','addUsers','put','update','delete','destroy','removeUsers','exports','path'];(function(_0x54808c,_0x36e290){var _0xe9459=function(_0x55df21){while(--_0x55df21){_0x54808c['push'](_0x54808c['shift']());}};_0xe9459(++_0x36e290);}(_0xc7d8,0x167));var _0x8c7d=function(_0x4dd5b9,_0x227fec){_0x4dd5b9=_0x4dd5b9-0x0;var _0xe635b3=_0xc7d8[_0x4dd5b9];return _0xe635b3;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x8c7d('0x0'));var timeout=require('connect-timeout');var express=require(_0x8c7d('0x1'));var router=express['Router']();var auth=require(_0x8c7d('0x2'));var interaction=require('../../components/interaction/service');var config=require(_0x8c7d('0x3'));var controller=require(_0x8c7d('0x4'));router[_0x8c7d('0x5')]('/',auth[_0x8c7d('0x6')](),controller['index']);router[_0x8c7d('0x5')](_0x8c7d('0x7'),auth[_0x8c7d('0x6')](),controller['show']);router['get'](_0x8c7d('0x8'),auth[_0x8c7d('0x6')](),controller['getUsers']);router['post']('/',auth['isAuthenticated'](),controller[_0x8c7d('0x9')]);router[_0x8c7d('0xa')](_0x8c7d('0x8'),auth[_0x8c7d('0x6')](),controller[_0x8c7d('0xb')]);router[_0x8c7d('0xc')](_0x8c7d('0x7'),auth[_0x8c7d('0x6')](),controller[_0x8c7d('0xd')]);router[_0x8c7d('0xe')]('/:id',auth['isAuthenticated'](),controller[_0x8c7d('0xf')]);router[_0x8c7d('0xe')](_0x8c7d('0x8'),auth[_0x8c7d('0x6')](),controller[_0x8c7d('0x10')]);module[_0x8c7d('0x11')]=router;
\ No newline at end of file
+var _0x600d=['getUsers','post','create','put','update','destroy','delete','removeUsers','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareProject.controller','get','isAuthenticated','index','/:id','/:id/users'];(function(_0x505f55,_0x4411c5){var _0x2f4eaf=function(_0x2a609b){while(--_0x2a609b){_0x505f55['push'](_0x505f55['shift']());}};_0x2f4eaf(++_0x4411c5);}(_0x600d,0x18f));var _0xd600=function(_0x1d0135,_0x279076){_0x1d0135=_0x1d0135-0x0;var _0x3cc529=_0x600d[_0x1d0135];return _0x3cc529;};'use strict';var multer=require(_0xd600('0x0'));var util=require(_0xd600('0x1'));var path=require(_0xd600('0x2'));var timeout=require(_0xd600('0x3'));var express=require(_0xd600('0x4'));var router=express[_0xd600('0x5')]();var auth=require(_0xd600('0x6'));var interaction=require(_0xd600('0x7'));var config=require(_0xd600('0x8'));var controller=require(_0xd600('0x9'));router[_0xd600('0xa')]('/',auth[_0xd600('0xb')](),controller[_0xd600('0xc')]);router['get'](_0xd600('0xd'),auth[_0xd600('0xb')](),controller['show']);router[_0xd600('0xa')](_0xd600('0xe'),auth[_0xd600('0xb')](),controller[_0xd600('0xf')]);router[_0xd600('0x10')]('/',auth[_0xd600('0xb')](),controller[_0xd600('0x11')]);router[_0xd600('0x10')](_0xd600('0xe'),auth[_0xd600('0xb')](),controller['addUsers']);router[_0xd600('0x12')]('/:id',auth[_0xd600('0xb')](),controller[_0xd600('0x13')]);router['delete']('/:id',auth[_0xd600('0xb')](),controller[_0xd600('0x14')]);router[_0xd600('0x15')](_0xd600('0xe'),auth['isAuthenticated'](),controller[_0xd600('0x16')]);module['exports']=router;
\ No newline at end of file
index 017b688..2cef7f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed5c=['name','TEXT','BLOB','long','getDataValue','preproduction','toString','production','sequelize','exports','STRING'];(function(_0x4ed520,_0x21be63){var _0x4415a6=function(_0x14b151){while(--_0x14b151){_0x4ed520['push'](_0x4ed520['shift']());}};_0x4415a6(++_0x21be63);}(_0xed5c,0x81));var _0xced5=function(_0x1b5e96,_0x4523b0){_0x1b5e96=_0x1b5e96-0x0;var _0x5e7d73=_0xed5c[_0x1b5e96];return _0x5e7d73;};'use strict';var Sequelize=require(_0xced5('0x0'));module[_0xced5('0x1')]={'name':{'type':Sequelize[_0xced5('0x2')],'unique':_0xced5('0x3'),'allowNull':![]},'description':{'type':Sequelize[_0xced5('0x2')]},'notes':{'type':Sequelize[_0xced5('0x4')]},'preproduction':{'type':Sequelize[_0xced5('0x5')](_0xced5('0x6')),'get':function(){if(this[_0xced5('0x7')](_0xced5('0x8'))){return this['getDataValue'](_0xced5('0x8'))[_0xced5('0x9')]('utf8');}}},'production':{'type':Sequelize['BLOB'](_0xced5('0x6')),'get':function(){if(this[_0xced5('0x7')](_0xced5('0xa'))){return this[_0xced5('0x7')](_0xced5('0xa'))['toString']('utf8');}}}};
\ No newline at end of file
+var _0x8b8e=['sequelize','STRING','long','getDataValue','preproduction','toString','utf8','BLOB'];(function(_0x271716,_0x336c19){var _0x4b8533=function(_0x59967b){while(--_0x59967b){_0x271716['push'](_0x271716['shift']());}};_0x4b8533(++_0x336c19);}(_0x8b8e,0x108));var _0xe8b8=function(_0x244095,_0x36f3db){_0x244095=_0x244095-0x0;var _0x320e55=_0x8b8e[_0x244095];return _0x320e55;};'use strict';var Sequelize=require(_0xe8b8('0x0'));module['exports']={'name':{'type':Sequelize[_0xe8b8('0x1')],'unique':'name','allowNull':![]},'description':{'type':Sequelize[_0xe8b8('0x1')]},'notes':{'type':Sequelize['TEXT']},'preproduction':{'type':Sequelize['BLOB'](_0xe8b8('0x2')),'get':function(){if(this[_0xe8b8('0x3')](_0xe8b8('0x4'))){return this[_0xe8b8('0x3')](_0xe8b8('0x4'))[_0xe8b8('0x5')](_0xe8b8('0x6'));}}},'production':{'type':Sequelize[_0xe8b8('0x7')](_0xe8b8('0x2')),'get':function(){if(this[_0xe8b8('0x3')]('production')){return this[_0xe8b8('0x3')]('production')[_0xe8b8('0x5')]('utf8');}}}};
\ No newline at end of file
index 725f3a6..0aeb0c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x896e=['type','key','VIRTUAL','field','options','includeAll','include','findAll','catch','params','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','userProfileId','autoAssociation','name','addUsers','ids','omit','removeUsers','emit','userSquareProject:remove','getUsers','findOne','pick','map','hasOwnProperty','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','redis','defaults','socket.io-emitter','./squareProject.socket','end','status','json','count','offset','limit','set','Content-Range','reject','save','update','destroy','then','get','SquareProjects','UserProfileResource','error','stack','SquareProject','rawAttributes','query','keys','filters','model','intersection','fields','attributes','length','nolimit','order','sort','filter','where','merge'];(function(_0x2ee974,_0x1cceb5){var _0x20c5fb=function(_0xc54e84){while(--_0xc54e84){_0x2ee974['push'](_0x2ee974['shift']());}};_0x20c5fb(++_0x1cceb5);}(_0x896e,0x1e9));var _0xe896=function(_0x34988d,_0x1eeee9){_0x34988d=_0x34988d-0x0;var _0x4e5f78=_0x896e[_0x34988d];return _0x4e5f78;};'use strict';var pdf=require(_0xe896('0x0'));var emlformat=require(_0xe896('0x1'));var rimraf=require(_0xe896('0x2'));var zipdir=require(_0xe896('0x3'));var jsonpatch=require(_0xe896('0x4'));var rp=require(_0xe896('0x5'));var moment=require(_0xe896('0x6'));var BPromise=require(_0xe896('0x7'));var Mustache=require(_0xe896('0x8'));var util=require(_0xe896('0x9'));var path=require(_0xe896('0xa'));var sox=require(_0xe896('0xb'));var csv=require('to-csv');var ejs=require(_0xe896('0xc'));var fs=require('fs');var _=require(_0xe896('0xd'));var squel=require(_0xe896('0xe'));var crypto=require(_0xe896('0xf'));var jsforce=require(_0xe896('0x10'));var deskjs=require('desk.js');var toCsv=require(_0xe896('0x11'));var querystring=require(_0xe896('0x12'));var Papa=require(_0xe896('0x13'));var Redis=require('ioredis');var authService=require(_0xe896('0x14'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xe896('0x15'));var logger=require('../../config/logger')(_0xe896('0x16'));var utils=require(_0xe896('0x17'));var config=require(_0xe896('0x18'));var db=require('../../mysqldb')['db'];config[_0xe896('0x19')]=_[_0xe896('0x1a')](config[_0xe896('0x19')],{'host':'localhost','port':0x18eb});var socket=require(_0xe896('0x1b'))(new Redis(config[_0xe896('0x19')]));require(_0xe896('0x1c'))['register'](socket);function respondWithStatusCode(_0x2d0e46,_0x7dcf8a){_0x7dcf8a=_0x7dcf8a||0xcc;return function(_0x1e7ef8){if(_0x1e7ef8){return _0x2d0e46['sendStatus'](_0x7dcf8a);}return _0x2d0e46['status'](_0x7dcf8a)[_0xe896('0x1d')]();};}function respondWithResult(_0x25606b,_0x51e7b7){_0x51e7b7=_0x51e7b7||0xc8;return function(_0x5e78d6){if(_0x5e78d6){return _0x25606b[_0xe896('0x1e')](_0x51e7b7)[_0xe896('0x1f')](_0x5e78d6);}};}function respondWithFilteredResult(_0x57f04b,_0x50d224){return function(_0x4e062a){if(_0x4e062a){var _0x41cbd7=_0x4e062a[_0xe896('0x20')],_0x32f86d=_0x50d224[_0xe896('0x21')],_0x2d4cf0=_0x50d224[_0xe896('0x21')]+_0x50d224[_0xe896('0x22')],_0x5dc89d;if(_0x2d4cf0>=_0x41cbd7){_0x2d4cf0=_0x41cbd7;_0x5dc89d=0xc8;}else{_0x5dc89d=0xce;}_0x57f04b[_0xe896('0x1e')](_0x5dc89d);return _0x57f04b[_0xe896('0x23')](_0xe896('0x24'),_0x32f86d+'-'+_0x2d4cf0+'/'+_0x41cbd7)[_0xe896('0x1f')](_0x4e062a);}return null;};}function patchUpdates(_0x49547b){return function(_0x180d46){try{jsonpatch['apply'](_0x180d46,_0x49547b,!![]);}catch(_0x5d2c8d){return BPromise[_0xe896('0x25')](_0x5d2c8d);}return _0x180d46[_0xe896('0x26')]();};}function saveUpdates(_0x40502b,_0xeeec7c){return function(_0x498469){if(_0x498469){return _0x498469[_0xe896('0x27')](_0x40502b)['then'](function(_0x5001f7){return _0x5001f7;});}return null;};}function removeEntity(_0x45dd49,_0x41e689){return function(_0x1e952a){if(_0x1e952a){return _0x1e952a[_0xe896('0x28')]()[_0xe896('0x29')](function(){var _0x4d9f03=_0x1e952a[_0xe896('0x2a')]({'plain':!![]});var _0x4b71cc=_0xe896('0x2b');return db[_0xe896('0x2c')][_0xe896('0x28')]({'where':{'type':_0x4b71cc,'resourceId':_0x4d9f03['id']}})['then'](function(){return _0x1e952a;});})[_0xe896('0x29')](function(){_0x45dd49[_0xe896('0x1e')](0xcc)[_0xe896('0x1d')]();});}};}function handleEntityNotFound(_0xe93aa0,_0x2d8a7b){return function(_0x3f8ceb){if(!_0x3f8ceb){_0xe93aa0['sendStatus'](0x194);}return _0x3f8ceb;};}function handleError(_0x10adad,_0x34ccfd){_0x34ccfd=_0x34ccfd||0x1f4;return function(_0x201653){logger[_0xe896('0x2d')](_0x201653[_0xe896('0x2e')]);if(_0x201653['name']){delete _0x201653['name'];}_0x10adad['status'](_0x34ccfd)['send'](_0x201653);};}exports['index']=function(_0x291290,_0x29a18e){var _0x10fd26={},_0x76c781={},_0x3cd88e={'count':0x0,'rows':[]};var _0x1a6090=db[_0xe896('0x2f')][_0xe896('0x30')];_0x76c781['model']=_['keys'](_0x1a6090);_0x76c781[_0xe896('0x31')]=_[_0xe896('0x32')](_0x291290[_0xe896('0x31')]);_0x76c781[_0xe896('0x33')]=_['intersection'](_0x76c781[_0xe896('0x34')],_0x76c781['query']);_0x10fd26['attributes']=_[_0xe896('0x35')](_0x76c781[_0xe896('0x34')],qs[_0xe896('0x36')](_0x291290['query']['fields']));_0x10fd26['attributes']=_0x10fd26[_0xe896('0x37')][_0xe896('0x38')]?_0x10fd26[_0xe896('0x37')]:_0x76c781[_0xe896('0x34')];if(!_0x291290[_0xe896('0x31')]['hasOwnProperty'](_0xe896('0x39'))){_0x10fd26[_0xe896('0x22')]=qs[_0xe896('0x22')](_0x291290[_0xe896('0x31')][_0xe896('0x22')]);_0x10fd26[_0xe896('0x21')]=qs[_0xe896('0x21')](_0x291290[_0xe896('0x31')]['offset']);}_0x10fd26[_0xe896('0x3a')]=qs[_0xe896('0x3b')](_0x291290['query'][_0xe896('0x3b')]);_0x10fd26['where']=qs[_0xe896('0x33')](_['pick'](_0x291290[_0xe896('0x31')],_0x76c781['filters']));if(_0x291290[_0xe896('0x31')][_0xe896('0x3c')]){_0x10fd26[_0xe896('0x3d')]=_[_0xe896('0x3e')](_0x10fd26[_0xe896('0x3d')],{'$or':_['map'](_0x1a6090,function(_0x480b8a){if(_0x480b8a[_0xe896('0x3f')][_0xe896('0x40')]!==_0xe896('0x41')){var _0x15b6c5={};_0x15b6c5[_0x480b8a[_0xe896('0x42')]]={'$like':'%'+_0x291290['query']['filter']+'%'};return _0x15b6c5;}})});}_0x10fd26=_[_0xe896('0x3e')]({},_0x10fd26,_0x291290[_0xe896('0x43')]);var _0x5890b1={'where':_0x10fd26['where']};return db[_0xe896('0x2f')][_0xe896('0x20')](_0x5890b1)[_0xe896('0x29')](function(_0x2ab0ac){_0x3cd88e[_0xe896('0x20')]=_0x2ab0ac;if(_0x291290[_0xe896('0x31')][_0xe896('0x44')]){_0x10fd26[_0xe896('0x45')]=[{'all':!![]}];}return db[_0xe896('0x2f')][_0xe896('0x46')](_0x10fd26);})[_0xe896('0x29')](function(_0x1bc76a){_0x3cd88e['rows']=_0x1bc76a;return _0x3cd88e;})[_0xe896('0x29')](respondWithFilteredResult(_0x29a18e,_0x10fd26))[_0xe896('0x47')](handleError(_0x29a18e,null));};exports['show']=function(_0x57366b,_0x5cd5a3){var _0x36449e={'raw':![],'where':{'id':_0x57366b[_0xe896('0x48')]['id']}},_0x2a354f={};_0x2a354f['model']=_[_0xe896('0x32')](db[_0xe896('0x2f')]['rawAttributes']);_0x2a354f['query']=_['keys'](_0x57366b[_0xe896('0x31')]);_0x2a354f[_0xe896('0x33')]=_[_0xe896('0x35')](_0x2a354f[_0xe896('0x34')],_0x2a354f[_0xe896('0x31')]);_0x36449e[_0xe896('0x37')]=_['intersection'](_0x2a354f[_0xe896('0x34')],qs[_0xe896('0x36')](_0x57366b['query'][_0xe896('0x36')]));_0x36449e[_0xe896('0x37')]=_0x36449e[_0xe896('0x37')][_0xe896('0x38')]?_0x36449e['attributes']:_0x2a354f[_0xe896('0x34')];if(_0x57366b[_0xe896('0x31')][_0xe896('0x44')]){_0x36449e[_0xe896('0x45')]=[{'all':!![]}];}_0x36449e=_[_0xe896('0x3e')]({},_0x36449e,_0x57366b[_0xe896('0x43')]);return db['SquareProject'][_0xe896('0x49')](_0x36449e)['then'](handleEntityNotFound(_0x5cd5a3,null))[_0xe896('0x29')](respondWithResult(_0x5cd5a3,null))[_0xe896('0x47')](handleError(_0x5cd5a3,null));};exports[_0xe896('0x4a')]=function(_0x24b4f0,_0x252c27){return db[_0xe896('0x2f')]['create'](_0x24b4f0[_0xe896('0x4b')],{})[_0xe896('0x29')](function(_0x4818cd){var _0x3373dc=_0x24b4f0[_0xe896('0x4c')]['get']({'plain':!![]});if(!_0x3373dc)throw new Error(_0xe896('0x4d'));if(_0x3373dc['role']===_0xe896('0x4c')){var _0xb90690=_0x4818cd[_0xe896('0x2a')]({'plain':!![]});var _0x22424d=_0xe896('0x2b');return db['UserProfileSection'][_0xe896('0x49')]({'where':{'name':_0x22424d,'userProfileId':_0x3373dc[_0xe896('0x4e')]},'raw':!![]})[_0xe896('0x29')](function(_0x5e9ea6){if(_0x5e9ea6&&_0x5e9ea6[_0xe896('0x4f')]===0x0){return db['UserProfileResource']['create']({'name':_0xb90690[_0xe896('0x50')],'resourceId':_0xb90690['id'],'type':_0x5e9ea6[_0xe896('0x50')],'sectionId':_0x5e9ea6['id']},{})['then'](function(){return _0x4818cd;});}else{return _0x4818cd;}})[_0xe896('0x47')](function(_0x3d137b){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x3d137b);throw _0x3d137b;});}return _0x4818cd;})[_0xe896('0x29')](respondWithResult(_0x252c27,0xc9))[_0xe896('0x47')](handleError(_0x252c27,null));};exports['update']=function(_0x1d18f6,_0x2f1f1b){if(_0x1d18f6[_0xe896('0x4b')]['id']){delete _0x1d18f6[_0xe896('0x4b')]['id'];}return db[_0xe896('0x2f')][_0xe896('0x49')]({'where':{'id':_0x1d18f6[_0xe896('0x48')]['id']}})[_0xe896('0x29')](handleEntityNotFound(_0x2f1f1b,null))[_0xe896('0x29')](saveUpdates(_0x1d18f6[_0xe896('0x4b')],null))[_0xe896('0x29')](respondWithResult(_0x2f1f1b,null))['catch'](handleError(_0x2f1f1b,null));};exports[_0xe896('0x28')]=function(_0x2a23a2,_0x131c1c){return db[_0xe896('0x2f')][_0xe896('0x49')]({'where':{'id':_0x2a23a2[_0xe896('0x48')]['id']}})[_0xe896('0x29')](handleEntityNotFound(_0x131c1c,null))[_0xe896('0x29')](removeEntity(_0x131c1c,null))[_0xe896('0x47')](handleError(_0x131c1c,null));};exports[_0xe896('0x51')]=function(_0x3faf52,_0x26b78e,_0x5d8265){return db[_0xe896('0x2f')][_0xe896('0x49')]({'where':{'id':_0x3faf52[_0xe896('0x48')]['id']}})['then'](handleEntityNotFound(_0x26b78e,null))['then'](function(_0x4bf8d6){if(_0x4bf8d6){return _0x4bf8d6[_0xe896('0x51')](_0x3faf52[_0xe896('0x4b')][_0xe896('0x52')],_[_0xe896('0x53')](_0x3faf52['body'],[_0xe896('0x52'),'id'])||{});}})[_0xe896('0x29')](respondWithResult(_0x26b78e,null))[_0xe896('0x47')](handleError(_0x26b78e,null));};exports[_0xe896('0x54')]=function(_0x5d6c1c,_0x1d227a,_0x18d29a){return db['SquareProject'][_0xe896('0x49')]({'where':{'id':_0x5d6c1c[_0xe896('0x48')]['id']}})['then'](handleEntityNotFound(_0x1d227a,null))['then'](function(_0x2a5e68){if(_0x2a5e68){return _0x2a5e68[_0xe896('0x54')](_0x5d6c1c[_0xe896('0x31')][_0xe896('0x52')])[_0xe896('0x29')](function(){if(_['isArray'](_0x5d6c1c[_0xe896('0x31')][_0xe896('0x52')])){for(var _0x113b00=0x0;_0x113b00<_0x5d6c1c[_0xe896('0x31')]['ids']['length'];_0x113b00+=0x1){socket[_0xe896('0x55')](_0xe896('0x56'),{'UserId':Number(_0x5d6c1c['query'][_0xe896('0x52')][_0x113b00]),'SquareProjectId':Number(_0x5d6c1c['params']['id'])});}}else{socket[_0xe896('0x55')](_0xe896('0x56'),{'UserId':Number(_0x5d6c1c[_0xe896('0x31')][_0xe896('0x52')]),'SquareProjectId':Number(_0x5d6c1c[_0xe896('0x48')]['id'])});}});}})[_0xe896('0x29')](respondWithStatusCode(_0x1d227a,null))[_0xe896('0x47')](handleError(_0x1d227a,null));};exports[_0xe896('0x57')]=function(_0x1d780a,_0x14b2b9,_0xcb329a){var _0x3248e6={};var _0x41ec26={};var _0x14d88e;var _0x468fd7;return db[_0xe896('0x2f')][_0xe896('0x58')]({'where':{'id':_0x1d780a[_0xe896('0x48')]['id']}})[_0xe896('0x29')](handleEntityNotFound(_0x14b2b9,null))[_0xe896('0x29')](function(_0x216ff0){if(_0x216ff0){_0x14d88e=_0x216ff0;_0x41ec26[_0xe896('0x34')]=_['keys'](db['User'][_0xe896('0x30')]);_0x41ec26[_0xe896('0x31')]=_['keys'](_0x1d780a[_0xe896('0x31')]);_0x41ec26[_0xe896('0x33')]=_[_0xe896('0x35')](_0x41ec26[_0xe896('0x34')],_0x41ec26[_0xe896('0x31')]);_0x3248e6[_0xe896('0x37')]=_[_0xe896('0x35')](_0x41ec26[_0xe896('0x34')],qs[_0xe896('0x36')](_0x1d780a[_0xe896('0x31')][_0xe896('0x36')]));_0x3248e6['attributes']=_0x3248e6[_0xe896('0x37')][_0xe896('0x38')]?_0x3248e6['attributes']:_0x41ec26[_0xe896('0x34')];_0x3248e6['order']=qs['sort'](_0x1d780a[_0xe896('0x31')][_0xe896('0x3b')]);_0x3248e6['where']=qs['filters'](_[_0xe896('0x59')](_0x1d780a['query'],_0x41ec26['filters']));if(_0x1d780a[_0xe896('0x31')][_0xe896('0x3c')]){_0x3248e6[_0xe896('0x3d')]=_['merge'](_0x3248e6[_0xe896('0x3d')],{'$or':_[_0xe896('0x5a')](_0x3248e6[_0xe896('0x37')],function(_0x565349){var _0x1c118e={};_0x1c118e[_0x565349]={'$like':'%'+_0x1d780a[_0xe896('0x31')][_0xe896('0x3c')]+'%'};return _0x1c118e;})});}_0x3248e6=_[_0xe896('0x3e')]({},_0x3248e6,_0x1d780a['options']);return _0x14d88e[_0xe896('0x57')](_0x3248e6);}})[_0xe896('0x29')](function(_0x3b51f1){if(_0x3b51f1){_0x468fd7=_0x3b51f1[_0xe896('0x38')];if(!_0x1d780a['query'][_0xe896('0x5b')](_0xe896('0x39'))){_0x3248e6['limit']=qs[_0xe896('0x22')](_0x1d780a[_0xe896('0x31')][_0xe896('0x22')]);_0x3248e6[_0xe896('0x21')]=qs['offset'](_0x1d780a[_0xe896('0x31')][_0xe896('0x21')]);}return _0x14d88e[_0xe896('0x57')](_0x3248e6);}})[_0xe896('0x29')](function(_0x2d219f){if(_0x2d219f){return _0x2d219f?{'count':_0x468fd7,'rows':_0x2d219f}:null;}})[_0xe896('0x29')](respondWithResult(_0x14b2b9,null))['catch'](handleError(_0x14b2b9,null));};
\ No newline at end of file
+var _0xaebd=['Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','addUsers','body','ids','omit','removeUsers','isArray','emit','userSquareProject:remove','getUsers','findOne','User','map','hasOwnProperty','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','lodash','squel','desk.js','querystring','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','defaults','localhost','socket.io-emitter','redis','./squareProject.socket','register','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','get','SquareProjects','destroy','sendStatus','stack','name','send','SquareProject','rawAttributes','keys','query','filters','model','intersection','fields','attributes','length','nolimit','limit','order','sort','where','pick','filter','merge','type','key','field','includeAll','show','params','include','options','find','catch','create','user'];(function(_0x34cef7,_0x52293f){var _0x8f7873=function(_0xb0fbb2){while(--_0xb0fbb2){_0x34cef7['push'](_0x34cef7['shift']());}};_0x8f7873(++_0x52293f);}(_0xaebd,0x1e9));var _0xdaeb=function(_0x1238cd,_0x399deb){_0x1238cd=_0x1238cd-0x0;var _0x24f913=_0xaebd[_0x1238cd];return _0x24f913;};'use strict';var pdf=require(_0xdaeb('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xdaeb('0x1'));var zipdir=require(_0xdaeb('0x2'));var jsonpatch=require(_0xdaeb('0x3'));var rp=require(_0xdaeb('0x4'));var moment=require(_0xdaeb('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xdaeb('0x6'));var util=require(_0xdaeb('0x7'));var path=require(_0xdaeb('0x8'));var sox=require(_0xdaeb('0x9'));var csv=require(_0xdaeb('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xdaeb('0xb'));var squel=require(_0xdaeb('0xc'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xdaeb('0xd'));var toCsv=require(_0xdaeb('0xa'));var querystring=require(_0xdaeb('0xe'));var Papa=require('papaparse');var Redis=require(_0xdaeb('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xdaeb('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xdaeb('0x11'))('api');var utils=require(_0xdaeb('0x12'));var config=require(_0xdaeb('0x13'));var db=require('../../mysqldb')['db'];config['redis']=_[_0xdaeb('0x14')](config['redis'],{'host':_0xdaeb('0x15'),'port':0x18eb});var socket=require(_0xdaeb('0x16'))(new Redis(config[_0xdaeb('0x17')]));require(_0xdaeb('0x18'))[_0xdaeb('0x19')](socket);function respondWithStatusCode(_0x1f31be,_0xc6c611){_0xc6c611=_0xc6c611||0xcc;return function(_0x49ba9a){if(_0x49ba9a){return _0x1f31be['sendStatus'](_0xc6c611);}return _0x1f31be[_0xdaeb('0x1a')](_0xc6c611)[_0xdaeb('0x1b')]();};}function respondWithResult(_0x34b2fe,_0x18ec4e){_0x18ec4e=_0x18ec4e||0xc8;return function(_0x538a25){if(_0x538a25){return _0x34b2fe['status'](_0x18ec4e)[_0xdaeb('0x1c')](_0x538a25);}};}function respondWithFilteredResult(_0x4dd803,_0x47984b){return function(_0x42e509){if(_0x42e509){var _0x16eb2d=_0x42e509[_0xdaeb('0x1d')],_0x1b5243=_0x47984b['offset'],_0x1fe84e=_0x47984b[_0xdaeb('0x1e')]+_0x47984b['limit'],_0x2d8f11;if(_0x1fe84e>=_0x16eb2d){_0x1fe84e=_0x16eb2d;_0x2d8f11=0xc8;}else{_0x2d8f11=0xce;}_0x4dd803[_0xdaeb('0x1a')](_0x2d8f11);return _0x4dd803[_0xdaeb('0x1f')](_0xdaeb('0x20'),_0x1b5243+'-'+_0x1fe84e+'/'+_0x16eb2d)['json'](_0x42e509);}return null;};}function patchUpdates(_0x4e97e0){return function(_0x13563c){try{jsonpatch[_0xdaeb('0x21')](_0x13563c,_0x4e97e0,!![]);}catch(_0x23fccb){return BPromise[_0xdaeb('0x22')](_0x23fccb);}return _0x13563c[_0xdaeb('0x23')]();};}function saveUpdates(_0x536aae,_0x597bb7){return function(_0x2c969d){if(_0x2c969d){return _0x2c969d[_0xdaeb('0x24')](_0x536aae)[_0xdaeb('0x25')](function(_0x1d919a){return _0x1d919a;});}return null;};}function removeEntity(_0x39dfae,_0x55c825){return function(_0x254c3b){if(_0x254c3b){return _0x254c3b['destroy']()[_0xdaeb('0x25')](function(){var _0x398616=_0x254c3b[_0xdaeb('0x26')]({'plain':!![]});var _0x3b0770=_0xdaeb('0x27');return db['UserProfileResource'][_0xdaeb('0x28')]({'where':{'type':_0x3b0770,'resourceId':_0x398616['id']}})[_0xdaeb('0x25')](function(){return _0x254c3b;});})[_0xdaeb('0x25')](function(){_0x39dfae['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x43095f,_0x4e7f44){return function(_0x5045f8){if(!_0x5045f8){_0x43095f[_0xdaeb('0x29')](0x194);}return _0x5045f8;};}function handleError(_0x1ff9af,_0x3e2b8c){_0x3e2b8c=_0x3e2b8c||0x1f4;return function(_0x5eb7b5){logger['error'](_0x5eb7b5[_0xdaeb('0x2a')]);if(_0x5eb7b5[_0xdaeb('0x2b')]){delete _0x5eb7b5[_0xdaeb('0x2b')];}_0x1ff9af['status'](_0x3e2b8c)[_0xdaeb('0x2c')](_0x5eb7b5);};}exports['index']=function(_0x4da82d,_0x28812c){var _0x21f6cf={},_0x2fb019={},_0x28c15c={'count':0x0,'rows':[]};var _0x3276c2=db[_0xdaeb('0x2d')][_0xdaeb('0x2e')];_0x2fb019['model']=_[_0xdaeb('0x2f')](_0x3276c2);_0x2fb019[_0xdaeb('0x30')]=_[_0xdaeb('0x2f')](_0x4da82d[_0xdaeb('0x30')]);_0x2fb019[_0xdaeb('0x31')]=_['intersection'](_0x2fb019[_0xdaeb('0x32')],_0x2fb019[_0xdaeb('0x30')]);_0x21f6cf['attributes']=_[_0xdaeb('0x33')](_0x2fb019[_0xdaeb('0x32')],qs[_0xdaeb('0x34')](_0x4da82d[_0xdaeb('0x30')][_0xdaeb('0x34')]));_0x21f6cf[_0xdaeb('0x35')]=_0x21f6cf[_0xdaeb('0x35')][_0xdaeb('0x36')]?_0x21f6cf[_0xdaeb('0x35')]:_0x2fb019[_0xdaeb('0x32')];if(!_0x4da82d['query']['hasOwnProperty'](_0xdaeb('0x37'))){_0x21f6cf['limit']=qs[_0xdaeb('0x38')](_0x4da82d[_0xdaeb('0x30')][_0xdaeb('0x38')]);_0x21f6cf[_0xdaeb('0x1e')]=qs[_0xdaeb('0x1e')](_0x4da82d[_0xdaeb('0x30')]['offset']);}_0x21f6cf[_0xdaeb('0x39')]=qs[_0xdaeb('0x3a')](_0x4da82d[_0xdaeb('0x30')]['sort']);_0x21f6cf[_0xdaeb('0x3b')]=qs[_0xdaeb('0x31')](_[_0xdaeb('0x3c')](_0x4da82d[_0xdaeb('0x30')],_0x2fb019[_0xdaeb('0x31')]));if(_0x4da82d[_0xdaeb('0x30')][_0xdaeb('0x3d')]){_0x21f6cf['where']=_[_0xdaeb('0x3e')](_0x21f6cf[_0xdaeb('0x3b')],{'$or':_['map'](_0x3276c2,function(_0x50c6db){if(_0x50c6db[_0xdaeb('0x3f')][_0xdaeb('0x40')]!=='VIRTUAL'){var _0x1ba33c={};_0x1ba33c[_0x50c6db[_0xdaeb('0x41')]]={'$like':'%'+_0x4da82d['query'][_0xdaeb('0x3d')]+'%'};return _0x1ba33c;}})});}_0x21f6cf=_[_0xdaeb('0x3e')]({},_0x21f6cf,_0x4da82d['options']);var _0x597ae8={'where':_0x21f6cf[_0xdaeb('0x3b')]};return db[_0xdaeb('0x2d')][_0xdaeb('0x1d')](_0x597ae8)[_0xdaeb('0x25')](function(_0x2ea883){_0x28c15c[_0xdaeb('0x1d')]=_0x2ea883;if(_0x4da82d['query'][_0xdaeb('0x42')]){_0x21f6cf['include']=[{'all':!![]}];}return db[_0xdaeb('0x2d')]['findAll'](_0x21f6cf);})['then'](function(_0x2b47d7){_0x28c15c['rows']=_0x2b47d7;return _0x28c15c;})[_0xdaeb('0x25')](respondWithFilteredResult(_0x28812c,_0x21f6cf))['catch'](handleError(_0x28812c,null));};exports[_0xdaeb('0x43')]=function(_0x244369,_0x4dd4ce){var _0x2dd241={'raw':![],'where':{'id':_0x244369[_0xdaeb('0x44')]['id']}},_0x4cf4df={};_0x4cf4df['model']=_[_0xdaeb('0x2f')](db[_0xdaeb('0x2d')][_0xdaeb('0x2e')]);_0x4cf4df['query']=_[_0xdaeb('0x2f')](_0x244369[_0xdaeb('0x30')]);_0x4cf4df[_0xdaeb('0x31')]=_[_0xdaeb('0x33')](_0x4cf4df[_0xdaeb('0x32')],_0x4cf4df[_0xdaeb('0x30')]);_0x2dd241[_0xdaeb('0x35')]=_[_0xdaeb('0x33')](_0x4cf4df[_0xdaeb('0x32')],qs[_0xdaeb('0x34')](_0x244369[_0xdaeb('0x30')][_0xdaeb('0x34')]));_0x2dd241['attributes']=_0x2dd241[_0xdaeb('0x35')][_0xdaeb('0x36')]?_0x2dd241['attributes']:_0x4cf4df['model'];if(_0x244369[_0xdaeb('0x30')][_0xdaeb('0x42')]){_0x2dd241[_0xdaeb('0x45')]=[{'all':!![]}];}_0x2dd241=_['merge']({},_0x2dd241,_0x244369[_0xdaeb('0x46')]);return db[_0xdaeb('0x2d')][_0xdaeb('0x47')](_0x2dd241)[_0xdaeb('0x25')](handleEntityNotFound(_0x4dd4ce,null))[_0xdaeb('0x25')](respondWithResult(_0x4dd4ce,null))[_0xdaeb('0x48')](handleError(_0x4dd4ce,null));};exports[_0xdaeb('0x49')]=function(_0x2e4327,_0x5c3e65){return db[_0xdaeb('0x2d')][_0xdaeb('0x49')](_0x2e4327['body'],{})[_0xdaeb('0x25')](function(_0x4dd70c){var _0x403ca1=_0x2e4327[_0xdaeb('0x4a')][_0xdaeb('0x26')]({'plain':!![]});if(!_0x403ca1)throw new Error(_0xdaeb('0x4b'));if(_0x403ca1[_0xdaeb('0x4c')]===_0xdaeb('0x4a')){var _0x33a4d7=_0x4dd70c[_0xdaeb('0x26')]({'plain':!![]});var _0x2bd2fd='SquareProjects';return db['UserProfileSection'][_0xdaeb('0x47')]({'where':{'name':_0x2bd2fd,'userProfileId':_0x403ca1[_0xdaeb('0x4d')]},'raw':!![]})[_0xdaeb('0x25')](function(_0x1b742d){if(_0x1b742d&&_0x1b742d[_0xdaeb('0x4e')]===0x0){return db[_0xdaeb('0x4f')]['create']({'name':_0x33a4d7[_0xdaeb('0x2b')],'resourceId':_0x33a4d7['id'],'type':_0x1b742d[_0xdaeb('0x2b')],'sectionId':_0x1b742d['id']},{})[_0xdaeb('0x25')](function(){return _0x4dd70c;});}else{return _0x4dd70c;}})['catch'](function(_0x428b72){logger['error'](_0xdaeb('0x50'),_0x428b72);throw _0x428b72;});}return _0x4dd70c;})[_0xdaeb('0x25')](respondWithResult(_0x5c3e65,0xc9))[_0xdaeb('0x48')](handleError(_0x5c3e65,null));};exports[_0xdaeb('0x24')]=function(_0x31eca9,_0x1547c8){if(_0x31eca9['body']['id']){delete _0x31eca9['body']['id'];}return db['SquareProject'][_0xdaeb('0x47')]({'where':{'id':_0x31eca9[_0xdaeb('0x44')]['id']}})['then'](handleEntityNotFound(_0x1547c8,null))['then'](saveUpdates(_0x31eca9['body'],null))[_0xdaeb('0x25')](respondWithResult(_0x1547c8,null))[_0xdaeb('0x48')](handleError(_0x1547c8,null));};exports[_0xdaeb('0x28')]=function(_0x2afdb8,_0xb41ff5){return db['SquareProject'][_0xdaeb('0x47')]({'where':{'id':_0x2afdb8['params']['id']}})[_0xdaeb('0x25')](handleEntityNotFound(_0xb41ff5,null))[_0xdaeb('0x25')](removeEntity(_0xb41ff5,null))[_0xdaeb('0x48')](handleError(_0xb41ff5,null));};exports[_0xdaeb('0x51')]=function(_0x27dc44,_0x3a7b64,_0x51b98f){return db['SquareProject'][_0xdaeb('0x47')]({'where':{'id':_0x27dc44['params']['id']}})[_0xdaeb('0x25')](handleEntityNotFound(_0x3a7b64,null))[_0xdaeb('0x25')](function(_0xe81879){if(_0xe81879){return _0xe81879['addUsers'](_0x27dc44[_0xdaeb('0x52')][_0xdaeb('0x53')],_[_0xdaeb('0x54')](_0x27dc44[_0xdaeb('0x52')],[_0xdaeb('0x53'),'id'])||{});}})[_0xdaeb('0x25')](respondWithResult(_0x3a7b64,null))[_0xdaeb('0x48')](handleError(_0x3a7b64,null));};exports[_0xdaeb('0x55')]=function(_0x2e8bae,_0x541cd6,_0x458a19){return db[_0xdaeb('0x2d')][_0xdaeb('0x47')]({'where':{'id':_0x2e8bae[_0xdaeb('0x44')]['id']}})['then'](handleEntityNotFound(_0x541cd6,null))['then'](function(_0x3fb5b2){if(_0x3fb5b2){return _0x3fb5b2[_0xdaeb('0x55')](_0x2e8bae[_0xdaeb('0x30')][_0xdaeb('0x53')])['then'](function(){if(_[_0xdaeb('0x56')](_0x2e8bae['query'][_0xdaeb('0x53')])){for(var _0x4a0af5=0x0;_0x4a0af5<_0x2e8bae[_0xdaeb('0x30')]['ids'][_0xdaeb('0x36')];_0x4a0af5+=0x1){socket[_0xdaeb('0x57')](_0xdaeb('0x58'),{'UserId':Number(_0x2e8bae[_0xdaeb('0x30')][_0xdaeb('0x53')][_0x4a0af5]),'SquareProjectId':Number(_0x2e8bae[_0xdaeb('0x44')]['id'])});}}else{socket[_0xdaeb('0x57')](_0xdaeb('0x58'),{'UserId':Number(_0x2e8bae[_0xdaeb('0x30')][_0xdaeb('0x53')]),'SquareProjectId':Number(_0x2e8bae[_0xdaeb('0x44')]['id'])});}});}})[_0xdaeb('0x25')](respondWithStatusCode(_0x541cd6,null))['catch'](handleError(_0x541cd6,null));};exports[_0xdaeb('0x59')]=function(_0x236627,_0x54612b,_0x469781){var _0x49a111={};var _0x276fef={};var _0x2d6910;var _0x50bff5;return db[_0xdaeb('0x2d')][_0xdaeb('0x5a')]({'where':{'id':_0x236627[_0xdaeb('0x44')]['id']}})[_0xdaeb('0x25')](handleEntityNotFound(_0x54612b,null))[_0xdaeb('0x25')](function(_0x42093a){if(_0x42093a){_0x2d6910=_0x42093a;_0x276fef['model']=_[_0xdaeb('0x2f')](db[_0xdaeb('0x5b')][_0xdaeb('0x2e')]);_0x276fef[_0xdaeb('0x30')]=_[_0xdaeb('0x2f')](_0x236627[_0xdaeb('0x30')]);_0x276fef[_0xdaeb('0x31')]=_['intersection'](_0x276fef[_0xdaeb('0x32')],_0x276fef[_0xdaeb('0x30')]);_0x49a111[_0xdaeb('0x35')]=_[_0xdaeb('0x33')](_0x276fef[_0xdaeb('0x32')],qs['fields'](_0x236627[_0xdaeb('0x30')][_0xdaeb('0x34')]));_0x49a111[_0xdaeb('0x35')]=_0x49a111[_0xdaeb('0x35')]['length']?_0x49a111[_0xdaeb('0x35')]:_0x276fef[_0xdaeb('0x32')];_0x49a111[_0xdaeb('0x39')]=qs['sort'](_0x236627[_0xdaeb('0x30')][_0xdaeb('0x3a')]);_0x49a111['where']=qs[_0xdaeb('0x31')](_[_0xdaeb('0x3c')](_0x236627[_0xdaeb('0x30')],_0x276fef[_0xdaeb('0x31')]));if(_0x236627['query'][_0xdaeb('0x3d')]){_0x49a111['where']=_[_0xdaeb('0x3e')](_0x49a111[_0xdaeb('0x3b')],{'$or':_[_0xdaeb('0x5c')](_0x49a111[_0xdaeb('0x35')],function(_0x388663){var _0x456d4b={};_0x456d4b[_0x388663]={'$like':'%'+_0x236627[_0xdaeb('0x30')][_0xdaeb('0x3d')]+'%'};return _0x456d4b;})});}_0x49a111=_['merge']({},_0x49a111,_0x236627[_0xdaeb('0x46')]);return _0x2d6910[_0xdaeb('0x59')](_0x49a111);}})[_0xdaeb('0x25')](function(_0x161035){if(_0x161035){_0x50bff5=_0x161035[_0xdaeb('0x36')];if(!_0x236627[_0xdaeb('0x30')][_0xdaeb('0x5d')](_0xdaeb('0x37'))){_0x49a111['limit']=qs['limit'](_0x236627[_0xdaeb('0x30')][_0xdaeb('0x38')]);_0x49a111[_0xdaeb('0x1e')]=qs[_0xdaeb('0x1e')](_0x236627[_0xdaeb('0x30')][_0xdaeb('0x1e')]);}return _0x2d6910['getUsers'](_0x49a111);}})[_0xdaeb('0x25')](function(_0x2ac587){if(_0x2ac587){return _0x2ac587?{'count':_0x50bff5,'rows':_0x2ac587}:null;}})[_0xdaeb('0x25')](respondWithResult(_0x54612b,null))[_0xdaeb('0x48')](handleError(_0x54612b,null));};
\ No newline at end of file
index 200d4d2..c18d0f9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xea88=['update','remove','emit','hasOwnProperty','hook','events','setMaxListeners','save'];(function(_0x1e9381,_0x1e0386){var _0x2aa9f0=function(_0x102f38){while(--_0x102f38){_0x1e9381['push'](_0x1e9381['shift']());}};_0x2aa9f0(++_0x1e0386);}(_0xea88,0x19d));var _0x8ea8=function(_0x241cbc,_0x3231a9){_0x241cbc=_0x241cbc-0x0;var _0x318595=_0xea88[_0x241cbc];return _0x318595;};'use strict';var EventEmitter=require(_0x8ea8('0x0'));var SquareProject=require('../../mysqldb')['db']['SquareProject'];var SquareProjectEvents=new EventEmitter();SquareProjectEvents[_0x8ea8('0x1')](0x0);var events={'afterCreate':_0x8ea8('0x2'),'afterUpdate':_0x8ea8('0x3'),'afterDestroy':_0x8ea8('0x4')};function emitEvent(_0x5be679){return function(_0x3af2ef,_0x2f4879,_0x5a8d40){SquareProjectEvents[_0x8ea8('0x5')](_0x5be679+':'+_0x3af2ef['id'],_0x3af2ef);SquareProjectEvents['emit'](_0x5be679,_0x3af2ef);_0x5a8d40(null);};}for(var e in events){if(events[_0x8ea8('0x6')](e)){var event=events[e];SquareProject[_0x8ea8('0x7')](e,emitEvent(event));}}module['exports']=SquareProjectEvents;
\ No newline at end of file
+var _0x1c37=['emit','hasOwnProperty','hook','exports','events','../../mysqldb','setMaxListeners','update'];(function(_0x5b2b63,_0x20cab9){var _0x5d06b0=function(_0x2fa752){while(--_0x2fa752){_0x5b2b63['push'](_0x5b2b63['shift']());}};_0x5d06b0(++_0x20cab9);}(_0x1c37,0xc4));var _0x71c3=function(_0x3ddb85,_0x1aa424){_0x3ddb85=_0x3ddb85-0x0;var _0x1a7195=_0x1c37[_0x3ddb85];return _0x1a7195;};'use strict';var EventEmitter=require(_0x71c3('0x0'));var SquareProject=require(_0x71c3('0x1'))['db']['SquareProject'];var SquareProjectEvents=new EventEmitter();SquareProjectEvents[_0x71c3('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0x71c3('0x3'),'afterDestroy':'remove'};function emitEvent(_0x541437){return function(_0x175a4e,_0x552a0e,_0x112bb5){SquareProjectEvents[_0x71c3('0x4')](_0x541437+':'+_0x175a4e['id'],_0x175a4e);SquareProjectEvents['emit'](_0x541437,_0x175a4e);_0x112bb5(null);};}for(var e in events){if(events[_0x71c3('0x5')](e)){var event=events[e];SquareProject[_0x71c3('0x6')](e,emitEvent(event));}}module[_0x71c3('0x7')]=SquareProjectEvents;
\ No newline at end of file
index 46ff38d..0f1f8c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4ab8=['square_projects','lodash','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./squareProject.attributes','exports','define','SquareProject'];(function(_0x4786a1,_0x517f78){var _0x2b1287=function(_0x543785){while(--_0x543785){_0x4786a1['push'](_0x4786a1['shift']());}};_0x2b1287(++_0x517f78);}(_0x4ab8,0x15f));var _0x84ab=function(_0x3d19d5,_0x1c949a){_0x3d19d5=_0x3d19d5-0x0;var _0x48b36d=_0x4ab8[_0x3d19d5];return _0x48b36d;};'use strict';var _=require(_0x84ab('0x0'));var util=require(_0x84ab('0x1'));var logger=require(_0x84ab('0x2'))(_0x84ab('0x3'));var moment=require(_0x84ab('0x4'));var BPromise=require(_0x84ab('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x84ab('0x6'));var rimraf=require(_0x84ab('0x7'));var config=require(_0x84ab('0x8'));var attributes=require(_0x84ab('0x9'));module[_0x84ab('0xa')]=function(_0x2d727f,_0x1b9753){return _0x2d727f[_0x84ab('0xb')](_0x84ab('0xc'),attributes,{'tableName':_0x84ab('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x68d8=['../../config/environment','./squareProject.attributes','define','SquareProject','square_projects','lodash','util','api','moment','bluebird','path','rimraf'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x68d8,0x155));var _0x868d=function(_0x1165e3,_0x23e2ab){_0x1165e3=_0x1165e3-0x0;var _0xf19867=_0x68d8[_0x1165e3];return _0xf19867;};'use strict';var _=require(_0x868d('0x0'));var util=require(_0x868d('0x1'));var logger=require('../../config/logger')(_0x868d('0x2'));var moment=require(_0x868d('0x3'));var BPromise=require(_0x868d('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x868d('0x5'));var rimraf=require(_0x868d('0x6'));var config=require(_0x868d('0x7'));var attributes=require(_0x868d('0x8'));module['exports']=function(_0xfd7db9,_0x13115f){return _0xfd7db9[_0x868d('0x9')](_0x868d('0xa'),attributes,{'tableName':_0x868d('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2d76fdf..98e194d 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(_0x1fe731,_0x157ffc){var _0x4258c3=function(_0x4bbf40){while(--_0x4bbf40){_0x1fe731['push'](_0x1fe731['shift']());}};_0x4258c3(++_0x157ffc);}(_0xa9e0,0x123));var _0x0a9e=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0xa9e0[_0x6131cd];return _0x47e916;};'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(_0x1f1678,_0x45d3a6){var _0x1d4edb=function(_0x17a469){while(--_0x17a469){_0x1f1678['push'](_0x1f1678['shift']());}};_0x1d4edb(++_0x45d3a6);}(_0xa9e0,0x123));var _0x0a9e=function(_0x1da04e,_0x31024b){_0x1da04e=_0x1da04e-0x0;var _0xdd8c41=_0xa9e0[_0x1da04e];return _0xdd8c41;};'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 8ced10a..e225784 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb31a=['emit','removeListener','register','squareProject:','./squareProject.events','save','remove','update'];(function(_0x13d672,_0x5a2f85){var _0x44b4dd=function(_0x2ff26a){while(--_0x2ff26a){_0x13d672['push'](_0x13d672['shift']());}};_0x44b4dd(++_0x5a2f85);}(_0xb31a,0xd4));var _0xab31=function(_0x26dfaa,_0xcebb4f){_0x26dfaa=_0x26dfaa-0x0;var _0x310653=_0xb31a[_0x26dfaa];return _0x310653;};'use strict';var SquareProjectEvents=require(_0xab31('0x0'));var events=[_0xab31('0x1'),_0xab31('0x2'),_0xab31('0x3')];function createListener(_0xed1079,_0xba4653){return function(_0x39e724){_0xba4653[_0xab31('0x4')](_0xed1079,_0x39e724);};}function removeListener(_0x2addad,_0x37541c){return function(){SquareProjectEvents[_0xab31('0x5')](_0x2addad,_0x37541c);};}exports[_0xab31('0x6')]=function(_0x9c6740){for(var _0x2c336b=0x0,_0x2b8f95=events['length'];_0x2c336b<_0x2b8f95;_0x2c336b++){var _0x45b0ef=events[_0x2c336b];var _0x1eaa9c=createListener(_0xab31('0x7')+_0x45b0ef,_0x9c6740);SquareProjectEvents['on'](_0x45b0ef,_0x1eaa9c);}};
\ No newline at end of file
+var _0xec56=['removeListener','register','length','squareProject:','./squareProject.events','update','emit'];(function(_0x55d3e7,_0x5614c9){var _0x2f63da=function(_0x17d5a8){while(--_0x17d5a8){_0x55d3e7['push'](_0x55d3e7['shift']());}};_0x2f63da(++_0x5614c9);}(_0xec56,0x1bd));var _0x6ec5=function(_0x1ad81c,_0x51b3ce){_0x1ad81c=_0x1ad81c-0x0;var _0x4cbdfb=_0xec56[_0x1ad81c];return _0x4cbdfb;};'use strict';var SquareProjectEvents=require(_0x6ec5('0x0'));var events=['save','remove',_0x6ec5('0x1')];function createListener(_0x3b8a3f,_0x26a5af){return function(_0x240ccf){_0x26a5af[_0x6ec5('0x2')](_0x3b8a3f,_0x240ccf);};}function removeListener(_0x399441,_0x469679){return function(){SquareProjectEvents[_0x6ec5('0x3')](_0x399441,_0x469679);};}exports[_0x6ec5('0x4')]=function(_0x28b12b){for(var _0x2d0a93=0x0,_0x3bb683=events[_0x6ec5('0x5')];_0x2d0a93<_0x3bb683;_0x2d0a93++){var _0x1f59cd=events[_0x2d0a93];var _0x3dd891=createListener(_0x6ec5('0x6')+_0x1f59cd,_0x28b12b);SquareProjectEvents['on'](_0x1f59cd,_0x3dd891);}};
\ No newline at end of file
index 92e1403..e7be8ae 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c3d=['util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareRecording.controller','get','isAuthenticated','index','/:id','show','/:id/download','download','post','create','put','update','delete','multer'];(function(_0xb65e77,_0x238c3d){var _0x38134b=function(_0x39da21){while(--_0x39da21){_0xb65e77['push'](_0xb65e77['shift']());}};_0x38134b(++_0x238c3d);}(_0x1c3d,0x68));var _0xd1c3=function(_0x2ab2cc,_0xe88512){_0x2ab2cc=_0x2ab2cc-0x0;var _0x4f89f6=_0x1c3d[_0x2ab2cc];return _0x4f89f6;};'use strict';var multer=require(_0xd1c3('0x0'));var util=require(_0xd1c3('0x1'));var path=require(_0xd1c3('0x2'));var timeout=require(_0xd1c3('0x3'));var express=require(_0xd1c3('0x4'));var router=express['Router']();var auth=require(_0xd1c3('0x5'));var interaction=require(_0xd1c3('0x6'));var config=require(_0xd1c3('0x7'));var controller=require(_0xd1c3('0x8'));router[_0xd1c3('0x9')]('/',auth[_0xd1c3('0xa')](),controller[_0xd1c3('0xb')]);router[_0xd1c3('0x9')](_0xd1c3('0xc'),auth[_0xd1c3('0xa')](),controller[_0xd1c3('0xd')]);router[_0xd1c3('0x9')](_0xd1c3('0xe'),auth['isAuthenticated'](),controller[_0xd1c3('0xf')]);router[_0xd1c3('0x10')]('/',auth[_0xd1c3('0xa')](),controller[_0xd1c3('0x11')]);router[_0xd1c3('0x12')](_0xd1c3('0xc'),auth[_0xd1c3('0xa')](),controller[_0xd1c3('0x13')]);router[_0xd1c3('0x14')]('/:id',auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x29a1=['../../components/interaction/service','../../config/environment','./squareRecording.controller','get','isAuthenticated','index','show','/:id/download','post','create','put','delete','/:id','exports','multer','util','path','express','../../components/auth/service'];(function(_0x1633e9,_0x50a939){var _0x549ace=function(_0x15a157){while(--_0x15a157){_0x1633e9['push'](_0x1633e9['shift']());}};_0x549ace(++_0x50a939);}(_0x29a1,0x118));var _0x129a=function(_0x3de2bf,_0x5c3f59){_0x3de2bf=_0x3de2bf-0x0;var _0x1c1504=_0x29a1[_0x3de2bf];return _0x1c1504;};'use strict';var multer=require(_0x129a('0x0'));var util=require(_0x129a('0x1'));var path=require(_0x129a('0x2'));var timeout=require('connect-timeout');var express=require(_0x129a('0x3'));var router=express['Router']();var auth=require(_0x129a('0x4'));var interaction=require(_0x129a('0x5'));var config=require(_0x129a('0x6'));var controller=require(_0x129a('0x7'));router[_0x129a('0x8')]('/',auth[_0x129a('0x9')](),controller[_0x129a('0xa')]);router[_0x129a('0x8')]('/:id',auth[_0x129a('0x9')](),controller[_0x129a('0xb')]);router['get'](_0x129a('0xc'),auth[_0x129a('0x9')](),controller['download']);router[_0x129a('0xd')]('/',auth[_0x129a('0x9')](),controller[_0x129a('0xe')]);router[_0x129a('0xf')]('/:id',auth[_0x129a('0x9')](),controller['update']);router[_0x129a('0x10')](_0x129a('0x11'),auth['isAuthenticated'](),controller['destroy']);module[_0x129a('0x12')]=router;
\ No newline at end of file
index 6a9d75e..70654aa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf53f=['sequelize','exports','STRING'];(function(_0x218479,_0x4fb190){var _0x3b67a0=function(_0x3ee034){while(--_0x3ee034){_0x218479['push'](_0x218479['shift']());}};_0x3b67a0(++_0x4fb190);}(_0xf53f,0x18f));var _0xff53=function(_0x2f062d,_0x3cb0ef){_0x2f062d=_0x2f062d-0x0;var _0x53c040=_0xf53f[_0x2f062d];return _0x53c040;};'use strict';var Sequelize=require(_0xff53('0x0'));module[_0xff53('0x1')]={'uniqueid':{'type':Sequelize[_0xff53('0x2')]},'callerid':{'type':Sequelize[_0xff53('0x2')]},'calleridname':{'type':Sequelize[_0xff53('0x2')]},'context':{'type':Sequelize[_0xff53('0x2')]},'extension':{'type':Sequelize['STRING']},'priority':{'type':Sequelize[_0xff53('0x2')]},'accountcode':{'type':Sequelize['STRING']},'dnid':{'type':Sequelize[_0xff53('0x2')]},'projectName':{'type':Sequelize[_0xff53('0x2')]},'saveName':{'type':Sequelize['STRING']},'filename':{'type':Sequelize['STRING']},'savePath':{'type':Sequelize[_0xff53('0x2')]}};
\ No newline at end of file
+var _0x1ceb=['exports','STRING'];(function(_0x456407,_0x18a6f0){var _0x20cb43=function(_0x4e1e64){while(--_0x4e1e64){_0x456407['push'](_0x456407['shift']());}};_0x20cb43(++_0x18a6f0);}(_0x1ceb,0xf2));var _0xb1ce=function(_0xd2275e,_0x5e8413){_0xd2275e=_0xd2275e-0x0;var _0x21df04=_0x1ceb[_0xd2275e];return _0x21df04;};'use strict';var Sequelize=require('sequelize');module[_0xb1ce('0x0')]={'uniqueid':{'type':Sequelize[_0xb1ce('0x1')]},'callerid':{'type':Sequelize[_0xb1ce('0x1')]},'calleridname':{'type':Sequelize[_0xb1ce('0x1')]},'context':{'type':Sequelize[_0xb1ce('0x1')]},'extension':{'type':Sequelize[_0xb1ce('0x1')]},'priority':{'type':Sequelize[_0xb1ce('0x1')]},'accountcode':{'type':Sequelize['STRING']},'dnid':{'type':Sequelize[_0xb1ce('0x1')]},'projectName':{'type':Sequelize['STRING']},'saveName':{'type':Sequelize['STRING']},'filename':{'type':Sequelize[_0xb1ce('0x1')]},'savePath':{'type':Sequelize[_0xb1ce('0x1')]}};
\ No newline at end of file
index 64eae77..899b012 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xac0c=['length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','key','VIRTUAL','options','include','rows','catch','show','find','create','body','params','download','uniqueid','filename','savePath','format','%s.cypher','existsSync','decryptFile','secrets','recording','Sequelize','SquareRecording\x20not\x20found','extname','unlink','message','Not\x20found','html-pdf','rimraf','zip-dir','request-promise','bluebird','mustache','util','path','to-csv','ejs','lodash','crypto','jsforce','querystring','ioredis','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','index','SquareRecording','rawAttributes','model','keys','query','filters','intersection','attributes','fields'];(function(_0x47087,_0x24eadd){var _0x2fba8c=function(_0x343679){while(--_0x343679){_0x47087['push'](_0x47087['shift']());}};_0x2fba8c(++_0x24eadd);}(_0xac0c,0xcf));var _0xcac0=function(_0x5d8c3a,_0x52c448){_0x5d8c3a=_0x5d8c3a-0x0;var _0x5fbe1b=_0xac0c[_0x5d8c3a];return _0x5fbe1b;};'use strict';var pdf=require(_0xcac0('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xcac0('0x1'));var zipdir=require(_0xcac0('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xcac0('0x3'));var moment=require('moment');var BPromise=require(_0xcac0('0x4'));var Mustache=require(_0xcac0('0x5'));var util=require(_0xcac0('0x6'));var path=require(_0xcac0('0x7'));var sox=require('sox');var csv=require(_0xcac0('0x8'));var ejs=require(_0xcac0('0x9'));var fs=require('fs');var _=require(_0xcac0('0xa'));var squel=require('squel');var crypto=require(_0xcac0('0xb'));var jsforce=require(_0xcac0('0xc'));var deskjs=require('desk.js');var toCsv=require(_0xcac0('0x8'));var querystring=require(_0xcac0('0xd'));var Papa=require('papaparse');var Redis=require(_0xcac0('0xe'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xcac0('0xf'));var logger=require(_0xcac0('0x10'))('api');var utils=require(_0xcac0('0x11'));var config=require(_0xcac0('0x12'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4ac2c5,_0x1d4509){_0x1d4509=_0x1d4509||0xcc;return function(_0xe567cb){if(_0xe567cb){return _0x4ac2c5[_0xcac0('0x13')](_0x1d4509);}return _0x4ac2c5[_0xcac0('0x14')](_0x1d4509)[_0xcac0('0x15')]();};}function respondWithResult(_0x591a74,_0x4c0016){_0x4c0016=_0x4c0016||0xc8;return function(_0x388707){if(_0x388707){return _0x591a74[_0xcac0('0x14')](_0x4c0016)[_0xcac0('0x16')](_0x388707);}};}function respondWithFilteredResult(_0x11be3a,_0x8f144e){return function(_0x191669){if(_0x191669){var _0x4fba1e=_0x191669[_0xcac0('0x17')],_0x16f513=_0x8f144e[_0xcac0('0x18')],_0x1c51f3=_0x8f144e[_0xcac0('0x18')]+_0x8f144e[_0xcac0('0x19')],_0x324529;if(_0x1c51f3>=_0x4fba1e){_0x1c51f3=_0x4fba1e;_0x324529=0xc8;}else{_0x324529=0xce;}_0x11be3a[_0xcac0('0x14')](_0x324529);return _0x11be3a[_0xcac0('0x1a')](_0xcac0('0x1b'),_0x16f513+'-'+_0x1c51f3+'/'+_0x4fba1e)[_0xcac0('0x16')](_0x191669);}return null;};}function patchUpdates(_0x4bf66b){return function(_0x284529){try{jsonpatch[_0xcac0('0x1c')](_0x284529,_0x4bf66b,!![]);}catch(_0x58db0a){return BPromise[_0xcac0('0x1d')](_0x58db0a);}return _0x284529[_0xcac0('0x1e')]();};}function saveUpdates(_0x5dbdc9,_0x443145){return function(_0x1451fb){if(_0x1451fb){return _0x1451fb[_0xcac0('0x1f')](_0x5dbdc9)[_0xcac0('0x20')](function(_0x4efa5b){return _0x4efa5b;});}return null;};}function removeEntity(_0x4106f5,_0x319f4c){return function(_0x33c622){if(_0x33c622){return _0x33c622[_0xcac0('0x21')]()[_0xcac0('0x20')](function(){_0x4106f5[_0xcac0('0x14')](0xcc)[_0xcac0('0x15')]();});}};}function handleEntityNotFound(_0x259a5b,_0x23c83e){return function(_0x35805e){if(!_0x35805e){_0x259a5b[_0xcac0('0x13')](0x194);}return _0x35805e;};}function handleError(_0x3800d9,_0xc8db44){_0xc8db44=_0xc8db44||0x1f4;return function(_0x8de85c){logger[_0xcac0('0x22')](_0x8de85c[_0xcac0('0x23')]);if(_0x8de85c[_0xcac0('0x24')]){delete _0x8de85c[_0xcac0('0x24')];}_0x3800d9[_0xcac0('0x14')](_0xc8db44)[_0xcac0('0x25')](_0x8de85c);};}exports[_0xcac0('0x26')]=function(_0x4d1353,_0x11469e){var _0x2e392c={},_0xc51e46={},_0x261f1f={'count':0x0,'rows':[]};var _0x55102f=db[_0xcac0('0x27')][_0xcac0('0x28')];_0xc51e46[_0xcac0('0x29')]=_[_0xcac0('0x2a')](_0x55102f);_0xc51e46[_0xcac0('0x2b')]=_[_0xcac0('0x2a')](_0x4d1353[_0xcac0('0x2b')]);_0xc51e46[_0xcac0('0x2c')]=_[_0xcac0('0x2d')](_0xc51e46[_0xcac0('0x29')],_0xc51e46[_0xcac0('0x2b')]);_0x2e392c[_0xcac0('0x2e')]=_[_0xcac0('0x2d')](_0xc51e46['model'],qs[_0xcac0('0x2f')](_0x4d1353[_0xcac0('0x2b')][_0xcac0('0x2f')]));_0x2e392c['attributes']=_0x2e392c['attributes'][_0xcac0('0x30')]?_0x2e392c[_0xcac0('0x2e')]:_0xc51e46['model'];if(!_0x4d1353['query'][_0xcac0('0x31')](_0xcac0('0x32'))){_0x2e392c[_0xcac0('0x19')]=qs[_0xcac0('0x19')](_0x4d1353[_0xcac0('0x2b')][_0xcac0('0x19')]);_0x2e392c[_0xcac0('0x18')]=qs[_0xcac0('0x18')](_0x4d1353['query'][_0xcac0('0x18')]);}_0x2e392c[_0xcac0('0x33')]=qs[_0xcac0('0x34')](_0x4d1353[_0xcac0('0x2b')][_0xcac0('0x34')]);_0x2e392c[_0xcac0('0x35')]=qs[_0xcac0('0x2c')](_['pick'](_0x4d1353[_0xcac0('0x2b')],_0xc51e46[_0xcac0('0x2c')]));if(_0x4d1353['query'][_0xcac0('0x36')]){_0x2e392c[_0xcac0('0x35')]=_[_0xcac0('0x37')](_0x2e392c['where'],{'$or':_[_0xcac0('0x38')](_0x55102f,function(_0x417746){if(_0x417746[_0xcac0('0x39')][_0xcac0('0x3a')]!==_0xcac0('0x3b')){var _0x1c127f={};_0x1c127f[_0x417746['field']]={'$like':'%'+_0x4d1353[_0xcac0('0x2b')][_0xcac0('0x36')]+'%'};return _0x1c127f;}})});}_0x2e392c=_[_0xcac0('0x37')]({},_0x2e392c,_0x4d1353[_0xcac0('0x3c')]);var _0x52aebe={'where':_0x2e392c['where']};return db[_0xcac0('0x27')][_0xcac0('0x17')](_0x52aebe)[_0xcac0('0x20')](function(_0xd020cf){_0x261f1f[_0xcac0('0x17')]=_0xd020cf;if(_0x4d1353[_0xcac0('0x2b')]['includeAll']){_0x2e392c[_0xcac0('0x3d')]=[{'all':!![]}];}return db['SquareRecording']['findAll'](_0x2e392c);})[_0xcac0('0x20')](function(_0x2611ca){_0x261f1f[_0xcac0('0x3e')]=_0x2611ca;return _0x261f1f;})[_0xcac0('0x20')](respondWithFilteredResult(_0x11469e,_0x2e392c))[_0xcac0('0x3f')](handleError(_0x11469e,null));};exports[_0xcac0('0x40')]=function(_0x2a7f25,_0x354a91){var _0x1d7244={'raw':!![],'where':{'id':_0x2a7f25['params']['id']}},_0x3b1ce7={};_0x3b1ce7[_0xcac0('0x29')]=_[_0xcac0('0x2a')](db[_0xcac0('0x27')]['rawAttributes']);_0x3b1ce7['query']=_[_0xcac0('0x2a')](_0x2a7f25[_0xcac0('0x2b')]);_0x3b1ce7[_0xcac0('0x2c')]=_[_0xcac0('0x2d')](_0x3b1ce7[_0xcac0('0x29')],_0x3b1ce7[_0xcac0('0x2b')]);_0x1d7244[_0xcac0('0x2e')]=_[_0xcac0('0x2d')](_0x3b1ce7[_0xcac0('0x29')],qs['fields'](_0x2a7f25[_0xcac0('0x2b')]['fields']));_0x1d7244['attributes']=_0x1d7244[_0xcac0('0x2e')][_0xcac0('0x30')]?_0x1d7244['attributes']:_0x3b1ce7['model'];if(_0x2a7f25[_0xcac0('0x2b')]['includeAll']){_0x1d7244[_0xcac0('0x3d')]=[{'all':!![]}];}_0x1d7244=_[_0xcac0('0x37')]({},_0x1d7244,_0x2a7f25[_0xcac0('0x3c')]);return db[_0xcac0('0x27')][_0xcac0('0x41')](_0x1d7244)['then'](handleEntityNotFound(_0x354a91,null))[_0xcac0('0x20')](respondWithResult(_0x354a91,null))[_0xcac0('0x3f')](handleError(_0x354a91,null));};exports['create']=function(_0x507273,_0x22f4e4){return db[_0xcac0('0x27')][_0xcac0('0x42')](_0x507273[_0xcac0('0x43')],{})[_0xcac0('0x20')](respondWithResult(_0x22f4e4,0xc9))[_0xcac0('0x3f')](handleError(_0x22f4e4,null));};exports[_0xcac0('0x1f')]=function(_0x647757,_0x568b9f){if(_0x647757['body']['id']){delete _0x647757['body']['id'];}return db[_0xcac0('0x27')]['find']({'where':{'id':_0x647757[_0xcac0('0x44')]['id']}})[_0xcac0('0x20')](handleEntityNotFound(_0x568b9f,null))[_0xcac0('0x20')](saveUpdates(_0x647757['body'],null))[_0xcac0('0x20')](respondWithResult(_0x568b9f,null))['catch'](handleError(_0x568b9f,null));};exports['destroy']=function(_0x3c818a,_0x2e4df2){return db['SquareRecording'][_0xcac0('0x41')]({'where':{'id':_0x3c818a['params']['id']}})[_0xcac0('0x20')](handleEntityNotFound(_0x2e4df2,null))[_0xcac0('0x20')](removeEntity(_0x2e4df2,null))[_0xcac0('0x3f')](handleError(_0x2e4df2,null));};exports[_0xcac0('0x45')]=function(_0xaecf9e,_0x2714d5,_0xaeb76){var _0x259f66=require('../../components/encryptor');var _0x1b1bdf=![];var _0x4b1c0d={};if(_0xaecf9e[_0xcac0('0x2b')][_0xcac0('0x39')]&&_0xaecf9e[_0xcac0('0x2b')][_0xcac0('0x39')]===_0xcac0('0x46')){_0x4b1c0d[_0xcac0('0x46')]=_0xaecf9e[_0xcac0('0x44')]['id'];}else{_0x4b1c0d['id']=_0xaecf9e[_0xcac0('0x44')]['id'];}return db[_0xcac0('0x27')][_0xcac0('0x41')]({'where':_0x4b1c0d,'attributes':['id','savePath',_0xcac0('0x47')],'raw':!![]})['then'](handleEntityNotFound(_0x2714d5,null))[_0xcac0('0x20')](function(_0x4ba07d){if(_0x4ba07d){var _0x5f45b5=_0x4ba07d[_0xcac0('0x48')];var _0x5ba7e0=util[_0xcac0('0x49')](_0xcac0('0x4a'),_0x5f45b5);if(fs[_0xcac0('0x4b')](_0x5ba7e0)){_0x1b1bdf=!![];return _0x259f66[_0xcac0('0x4c')](_0x5ba7e0,_0x5f45b5,config[_0xcac0('0x4d')][_0xcac0('0x4e')])['then'](function(){return _0x4ba07d;});}return _0x4ba07d;}})['then'](function(_0x398396){if(_0x398396){var _0x55980a=_0x398396[_0xcac0('0x48')];if(!fs[_0xcac0('0x4b')](_0x55980a)){throw new db[(_0xcac0('0x4f'))]['ValidationError'](_0xcac0('0x50'));}if(_0x398396[_0xcac0('0x47')]){return _0x2714d5[_0xcac0('0x45')](_0x55980a,_0x398396[_0xcac0('0x47')]+path[_0xcac0('0x51')](_0x55980a),function(){if(_0x1b1bdf){fs[_0xcac0('0x52')](_0x55980a);}});}else{return _0x2714d5['download'](_0x55980a,function(_0x585d0e){if(_0x1b1bdf){fs[_0xcac0('0x52')](_0x55980a);}});}}})[_0xcac0('0x3f')](function(_0x500c97){if(_0x500c97[_0xcac0('0x53')]===_0xcac0('0x50')){_0x2714d5[_0xcac0('0x14')](0x194)[_0xcac0('0x25')](_0xcac0('0x54'));}else{return handleError(_0x2714d5,null);}});};
\ No newline at end of file
+var _0xa26a=['limit','Content-Range','json','apply','reject','save','update','then','error','stack','name','send','index','SquareRecording','rawAttributes','model','keys','query','filters','fields','attributes','length','hasOwnProperty','nolimit','order','sort','pick','where','map','type','key','field','filter','merge','options','include','findAll','catch','show','params','includeAll','find','create','body','destroy','../../components/encryptor','uniqueid','savePath','filename','format','%s.cypher','decryptFile','secrets','existsSync','Sequelize','ValidationError','SquareRecording\x20not\x20found','download','extname','unlink','message','html-pdf','rimraf','zip-dir','request-promise','mustache','util','path','sox','to-csv','ejs','squel','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/utils','../../mysqldb','sendStatus','status','end','count','offset'];(function(_0x397860,_0x3b3ac9){var _0x5de251=function(_0x42d299){while(--_0x42d299){_0x397860['push'](_0x397860['shift']());}};_0x5de251(++_0x3b3ac9);}(_0xa26a,0x1e6));var _0xaa26=function(_0x25b977,_0x886a0a){_0x25b977=_0x25b977-0x0;var _0x3495e7=_0xa26a[_0x25b977];return _0x3495e7;};'use strict';var pdf=require(_0xaa26('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xaa26('0x1'));var zipdir=require(_0xaa26('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xaa26('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xaa26('0x4'));var util=require(_0xaa26('0x5'));var path=require(_0xaa26('0x6'));var sox=require(_0xaa26('0x7'));var csv=require(_0xaa26('0x8'));var ejs=require(_0xaa26('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0xaa26('0xa'));var crypto=require('crypto');var jsforce=require(_0xaa26('0xb'));var deskjs=require(_0xaa26('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xaa26('0xd'));var Redis=require(_0xaa26('0xe'));var authService=require(_0xaa26('0xf'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xaa26('0x10'));var logger=require('../../config/logger')('api');var utils=require(_0xaa26('0x11'));var config=require('../../config/environment');var db=require(_0xaa26('0x12'))['db'];function respondWithStatusCode(_0x2cd07b,_0x3a24d4){_0x3a24d4=_0x3a24d4||0xcc;return function(_0xee8e6a){if(_0xee8e6a){return _0x2cd07b[_0xaa26('0x13')](_0x3a24d4);}return _0x2cd07b[_0xaa26('0x14')](_0x3a24d4)[_0xaa26('0x15')]();};}function respondWithResult(_0x11f1b4,_0x2026e9){_0x2026e9=_0x2026e9||0xc8;return function(_0x414da8){if(_0x414da8){return _0x11f1b4['status'](_0x2026e9)['json'](_0x414da8);}};}function respondWithFilteredResult(_0xdac4fe,_0xb64f7b){return function(_0x52749a){if(_0x52749a){var _0x83fa65=_0x52749a[_0xaa26('0x16')],_0x265e64=_0xb64f7b[_0xaa26('0x17')],_0x96f1a4=_0xb64f7b[_0xaa26('0x17')]+_0xb64f7b[_0xaa26('0x18')],_0x33dd6d;if(_0x96f1a4>=_0x83fa65){_0x96f1a4=_0x83fa65;_0x33dd6d=0xc8;}else{_0x33dd6d=0xce;}_0xdac4fe[_0xaa26('0x14')](_0x33dd6d);return _0xdac4fe['set'](_0xaa26('0x19'),_0x265e64+'-'+_0x96f1a4+'/'+_0x83fa65)[_0xaa26('0x1a')](_0x52749a);}return null;};}function patchUpdates(_0x11ea40){return function(_0x260dde){try{jsonpatch[_0xaa26('0x1b')](_0x260dde,_0x11ea40,!![]);}catch(_0xe4eb73){return BPromise[_0xaa26('0x1c')](_0xe4eb73);}return _0x260dde[_0xaa26('0x1d')]();};}function saveUpdates(_0x5eeaf4,_0xc61eff){return function(_0x1a61b9){if(_0x1a61b9){return _0x1a61b9[_0xaa26('0x1e')](_0x5eeaf4)[_0xaa26('0x1f')](function(_0x1af859){return _0x1af859;});}return null;};}function removeEntity(_0x3470fb,_0x52927f){return function(_0x269f5b){if(_0x269f5b){return _0x269f5b['destroy']()[_0xaa26('0x1f')](function(){_0x3470fb[_0xaa26('0x14')](0xcc)['end']();});}};}function handleEntityNotFound(_0x356f9f,_0x46af9c){return function(_0x102ee1){if(!_0x102ee1){_0x356f9f['sendStatus'](0x194);}return _0x102ee1;};}function handleError(_0xd49d23,_0xbe9be3){_0xbe9be3=_0xbe9be3||0x1f4;return function(_0x239fb8){logger[_0xaa26('0x20')](_0x239fb8[_0xaa26('0x21')]);if(_0x239fb8[_0xaa26('0x22')]){delete _0x239fb8[_0xaa26('0x22')];}_0xd49d23['status'](_0xbe9be3)[_0xaa26('0x23')](_0x239fb8);};}exports[_0xaa26('0x24')]=function(_0x102d88,_0x81c1de){var _0x6255d0={},_0x1a1a2e={},_0x4f3b32={'count':0x0,'rows':[]};var _0x4de3c2=db[_0xaa26('0x25')][_0xaa26('0x26')];_0x1a1a2e[_0xaa26('0x27')]=_[_0xaa26('0x28')](_0x4de3c2);_0x1a1a2e[_0xaa26('0x29')]=_['keys'](_0x102d88['query']);_0x1a1a2e[_0xaa26('0x2a')]=_['intersection'](_0x1a1a2e[_0xaa26('0x27')],_0x1a1a2e[_0xaa26('0x29')]);_0x6255d0['attributes']=_['intersection'](_0x1a1a2e[_0xaa26('0x27')],qs[_0xaa26('0x2b')](_0x102d88[_0xaa26('0x29')]['fields']));_0x6255d0[_0xaa26('0x2c')]=_0x6255d0['attributes'][_0xaa26('0x2d')]?_0x6255d0[_0xaa26('0x2c')]:_0x1a1a2e['model'];if(!_0x102d88['query'][_0xaa26('0x2e')](_0xaa26('0x2f'))){_0x6255d0[_0xaa26('0x18')]=qs[_0xaa26('0x18')](_0x102d88[_0xaa26('0x29')]['limit']);_0x6255d0[_0xaa26('0x17')]=qs[_0xaa26('0x17')](_0x102d88['query'][_0xaa26('0x17')]);}_0x6255d0[_0xaa26('0x30')]=qs[_0xaa26('0x31')](_0x102d88[_0xaa26('0x29')][_0xaa26('0x31')]);_0x6255d0['where']=qs[_0xaa26('0x2a')](_[_0xaa26('0x32')](_0x102d88[_0xaa26('0x29')],_0x1a1a2e['filters']));if(_0x102d88[_0xaa26('0x29')]['filter']){_0x6255d0[_0xaa26('0x33')]=_['merge'](_0x6255d0[_0xaa26('0x33')],{'$or':_[_0xaa26('0x34')](_0x4de3c2,function(_0x36756c){if(_0x36756c[_0xaa26('0x35')][_0xaa26('0x36')]!=='VIRTUAL'){var _0x33855b={};_0x33855b[_0x36756c[_0xaa26('0x37')]]={'$like':'%'+_0x102d88['query'][_0xaa26('0x38')]+'%'};return _0x33855b;}})});}_0x6255d0=_[_0xaa26('0x39')]({},_0x6255d0,_0x102d88[_0xaa26('0x3a')]);var _0x40ce0d={'where':_0x6255d0[_0xaa26('0x33')]};return db[_0xaa26('0x25')][_0xaa26('0x16')](_0x40ce0d)[_0xaa26('0x1f')](function(_0x1e7211){_0x4f3b32[_0xaa26('0x16')]=_0x1e7211;if(_0x102d88[_0xaa26('0x29')]['includeAll']){_0x6255d0[_0xaa26('0x3b')]=[{'all':!![]}];}return db[_0xaa26('0x25')][_0xaa26('0x3c')](_0x6255d0);})[_0xaa26('0x1f')](function(_0xd9b6f3){_0x4f3b32['rows']=_0xd9b6f3;return _0x4f3b32;})[_0xaa26('0x1f')](respondWithFilteredResult(_0x81c1de,_0x6255d0))[_0xaa26('0x3d')](handleError(_0x81c1de,null));};exports[_0xaa26('0x3e')]=function(_0x2ebb0a,_0x33bed8){var _0x56c150={'raw':!![],'where':{'id':_0x2ebb0a[_0xaa26('0x3f')]['id']}},_0x1710d4={};_0x1710d4['model']=_['keys'](db[_0xaa26('0x25')][_0xaa26('0x26')]);_0x1710d4[_0xaa26('0x29')]=_[_0xaa26('0x28')](_0x2ebb0a[_0xaa26('0x29')]);_0x1710d4[_0xaa26('0x2a')]=_['intersection'](_0x1710d4[_0xaa26('0x27')],_0x1710d4[_0xaa26('0x29')]);_0x56c150[_0xaa26('0x2c')]=_['intersection'](_0x1710d4[_0xaa26('0x27')],qs[_0xaa26('0x2b')](_0x2ebb0a[_0xaa26('0x29')][_0xaa26('0x2b')]));_0x56c150[_0xaa26('0x2c')]=_0x56c150[_0xaa26('0x2c')][_0xaa26('0x2d')]?_0x56c150[_0xaa26('0x2c')]:_0x1710d4[_0xaa26('0x27')];if(_0x2ebb0a[_0xaa26('0x29')][_0xaa26('0x40')]){_0x56c150[_0xaa26('0x3b')]=[{'all':!![]}];}_0x56c150=_[_0xaa26('0x39')]({},_0x56c150,_0x2ebb0a[_0xaa26('0x3a')]);return db['SquareRecording'][_0xaa26('0x41')](_0x56c150)[_0xaa26('0x1f')](handleEntityNotFound(_0x33bed8,null))[_0xaa26('0x1f')](respondWithResult(_0x33bed8,null))[_0xaa26('0x3d')](handleError(_0x33bed8,null));};exports[_0xaa26('0x42')]=function(_0x350310,_0x4fc6db){return db[_0xaa26('0x25')][_0xaa26('0x42')](_0x350310[_0xaa26('0x43')],{})[_0xaa26('0x1f')](respondWithResult(_0x4fc6db,0xc9))['catch'](handleError(_0x4fc6db,null));};exports['update']=function(_0x126120,_0x334089){if(_0x126120['body']['id']){delete _0x126120[_0xaa26('0x43')]['id'];}return db[_0xaa26('0x25')]['find']({'where':{'id':_0x126120[_0xaa26('0x3f')]['id']}})[_0xaa26('0x1f')](handleEntityNotFound(_0x334089,null))[_0xaa26('0x1f')](saveUpdates(_0x126120[_0xaa26('0x43')],null))[_0xaa26('0x1f')](respondWithResult(_0x334089,null))[_0xaa26('0x3d')](handleError(_0x334089,null));};exports[_0xaa26('0x44')]=function(_0x4f18c1,_0x2a8ad5){return db[_0xaa26('0x25')][_0xaa26('0x41')]({'where':{'id':_0x4f18c1[_0xaa26('0x3f')]['id']}})['then'](handleEntityNotFound(_0x2a8ad5,null))['then'](removeEntity(_0x2a8ad5,null))[_0xaa26('0x3d')](handleError(_0x2a8ad5,null));};exports['download']=function(_0x295353,_0x432bc7,_0x43cb39){var _0x1d08b2=require(_0xaa26('0x45'));var _0x6b6ccc=![];var _0x2b4185={};if(_0x295353[_0xaa26('0x29')][_0xaa26('0x35')]&&_0x295353[_0xaa26('0x29')][_0xaa26('0x35')]===_0xaa26('0x46')){_0x2b4185['uniqueid']=_0x295353['params']['id'];}else{_0x2b4185['id']=_0x295353['params']['id'];}return db[_0xaa26('0x25')]['find']({'where':_0x2b4185,'attributes':['id',_0xaa26('0x47'),_0xaa26('0x48')],'raw':!![]})[_0xaa26('0x1f')](handleEntityNotFound(_0x432bc7,null))['then'](function(_0x5e4fbd){if(_0x5e4fbd){var _0x3dc9a2=_0x5e4fbd[_0xaa26('0x47')];var _0x3dd86b=util[_0xaa26('0x49')](_0xaa26('0x4a'),_0x3dc9a2);if(fs['existsSync'](_0x3dd86b)){_0x6b6ccc=!![];return _0x1d08b2[_0xaa26('0x4b')](_0x3dd86b,_0x3dc9a2,config[_0xaa26('0x4c')]['recording'])[_0xaa26('0x1f')](function(){return _0x5e4fbd;});}return _0x5e4fbd;}})[_0xaa26('0x1f')](function(_0x226468){if(_0x226468){var _0x1c769c=_0x226468[_0xaa26('0x47')];if(!fs[_0xaa26('0x4d')](_0x1c769c)){throw new db[(_0xaa26('0x4e'))][(_0xaa26('0x4f'))](_0xaa26('0x50'));}if(_0x226468[_0xaa26('0x48')]){return _0x432bc7[_0xaa26('0x51')](_0x1c769c,_0x226468[_0xaa26('0x48')]+path[_0xaa26('0x52')](_0x1c769c),function(){if(_0x6b6ccc){fs[_0xaa26('0x53')](_0x1c769c);}});}else{return _0x432bc7[_0xaa26('0x51')](_0x1c769c,function(_0x6ddca3){if(_0x6b6ccc){fs['unlink'](_0x1c769c);}});}}})[_0xaa26('0x3d')](function(_0x5b4800){if(_0x5b4800[_0xaa26('0x54')]===_0xaa26('0x50')){_0x432bc7[_0xaa26('0x14')](0x194)['send']('Not\x20found');}else{return handleError(_0x432bc7,null);}});};
\ No newline at end of file
index a3a6666..032d7d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb29=['../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment','./squareRecording.attributes','exports','define','SquareRecording','square_recordings','lodash','util'];(function(_0x11bc9f,_0x14fac7){var _0x2b58e7=function(_0x829cd0){while(--_0x829cd0){_0x11bc9f['push'](_0x11bc9f['shift']());}};_0x2b58e7(++_0x14fac7);}(_0xbb29,0x1e8));var _0x9bb2=function(_0xa34564,_0x25c066){_0xa34564=_0xa34564-0x0;var _0x4c1d50=_0xbb29[_0xa34564];return _0x4c1d50;};'use strict';var _=require(_0x9bb2('0x0'));var util=require(_0x9bb2('0x1'));var logger=require(_0x9bb2('0x2'))('api');var moment=require(_0x9bb2('0x3'));var BPromise=require(_0x9bb2('0x4'));var rp=require(_0x9bb2('0x5'));var fs=require('fs');var path=require(_0x9bb2('0x6'));var rimraf=require(_0x9bb2('0x7'));var config=require(_0x9bb2('0x8'));var attributes=require(_0x9bb2('0x9'));module[_0x9bb2('0xa')]=function(_0x5234e4,_0x4d7d7b){return _0x5234e4[_0x9bb2('0xb')](_0x9bb2('0xc'),attributes,{'tableName':_0x9bb2('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x1608=['api','bluebird','request-promise','rimraf','../../config/environment','./squareRecording.attributes','exports','SquareRecording','lodash','util','../../config/logger'];(function(_0x3e45a4,_0xe69e5e){var _0x4aedc6=function(_0xb5c1a0){while(--_0xb5c1a0){_0x3e45a4['push'](_0x3e45a4['shift']());}};_0x4aedc6(++_0xe69e5e);}(_0x1608,0x194));var _0x8160=function(_0x2359b4,_0x20ff4d){_0x2359b4=_0x2359b4-0x0;var _0x2e46af=_0x1608[_0x2359b4];return _0x2e46af;};'use strict';var _=require(_0x8160('0x0'));var util=require(_0x8160('0x1'));var logger=require(_0x8160('0x2'))(_0x8160('0x3'));var moment=require('moment');var BPromise=require(_0x8160('0x4'));var rp=require(_0x8160('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x8160('0x6'));var config=require(_0x8160('0x7'));var attributes=require(_0x8160('0x8'));module[_0x8160('0x9')]=function(_0x468843,_0x13f8b6){return _0x468843['define'](_0x8160('0xa'),attributes,{'tableName':'square_recordings','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index e5cb145..5730f50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x49bc=['request\x20sent','stringify','error','code','SquareRecording,\x20%s,\x20%s','message','catch','CreateSquareRecording','create','options','lodash','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','info','debug'];(function(_0x5c89ad,_0x2e3ae0){var _0x2c45f1=function(_0x2d8965){while(--_0x2d8965){_0x5c89ad['push'](_0x5c89ad['shift']());}};_0x2c45f1(++_0x2e3ae0);}(_0x49bc,0x1a2));var _0xc49b=function(_0x4786b4,_0x392250){_0x4786b4=_0x4786b4-0x0;var _0x5360df=_0x49bc[_0x4786b4];return _0x5360df;};'use strict';var _=require(_0xc49b('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xc49b('0x1'));var rs=require(_0xc49b('0x2'));var fs=require('fs');var Redis=require(_0xc49b('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xc49b('0x4'));var logger=require(_0xc49b('0x5'))(_0xc49b('0x6'));var config=require(_0xc49b('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xc49b('0x8')][_0xc49b('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4d6b7c,_0x22ffc9,_0x1e0536){return new BPromise(function(_0x28fd10,_0x51fd41){return client[_0xc49b('0xa')](_0x4d6b7c,_0x1e0536)[_0xc49b('0xb')](function(_0x5db7d1){logger[_0xc49b('0xc')]('SquareRecording,\x20%s,\x20%s',_0x22ffc9,'request\x20sent');logger[_0xc49b('0xd')]('SquareRecording,\x20%s,\x20%s,\x20%s',_0x22ffc9,_0xc49b('0xe'),JSON[_0xc49b('0xf')](_0x5db7d1));if(_0x5db7d1['error']){if(_0x5db7d1[_0xc49b('0x10')][_0xc49b('0x11')]===0x1f4){logger[_0xc49b('0x10')](_0xc49b('0x12'),_0x22ffc9,_0x5db7d1[_0xc49b('0x10')]['message']);return _0x51fd41(_0x5db7d1[_0xc49b('0x10')][_0xc49b('0x13')]);}logger[_0xc49b('0x10')]('SquareRecording,\x20%s,\x20%s',_0x22ffc9,_0x5db7d1['error'][_0xc49b('0x13')]);return _0x28fd10(_0x5db7d1['error'][_0xc49b('0x13')]);}else{logger['info'](_0xc49b('0x12'),_0x22ffc9,_0xc49b('0xe'));_0x28fd10(_0x5db7d1['result'][_0xc49b('0x13')]);}})[_0xc49b('0x14')](function(_0x4bc83f){logger[_0xc49b('0x10')](_0xc49b('0x12'),_0x22ffc9,_0x4bc83f);_0x51fd41(_0x4bc83f);});});}exports[_0xc49b('0x15')]=function(_0x1a8b60){var _0x43fc03=this;return new Promise(function(_0x12aae7,_0x293983){return db['SquareRecording'][_0xc49b('0x16')](_0x1a8b60['body'],{'raw':_0x1a8b60[_0xc49b('0x17')]?_0x1a8b60[_0xc49b('0x17')]['raw']===undefined?!![]:![]:!![]})[_0xc49b('0xb')](function(_0x2055c7){logger[_0xc49b('0xc')](_0xc49b('0x15'),_0x1a8b60);logger['debug'](_0xc49b('0x15'),_0x1a8b60,JSON[_0xc49b('0xf')](_0x2055c7));_0x12aae7(_0x2055c7);})[_0xc49b('0x14')](function(_0xc566cb){logger[_0xc49b('0x10')](_0xc49b('0x15'),_0xc566cb[_0xc49b('0x13')],_0x1a8b60);_0x293983(_0x43fc03[_0xc49b('0x10')](0x1f4,_0xc566cb[_0xc49b('0x13')]));});});};
\ No newline at end of file
+var _0x50bc=['SquareRecording,\x20%s,\x20%s','SquareRecording,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','CreateSquareRecording','SquareRecording','create','body','options','raw','then','debug','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','rpc','jayson/promise','client','http','request','info'];(function(_0x651a13,_0x298918){var _0x242d11=function(_0x3d6f7c){while(--_0x3d6f7c){_0x651a13['push'](_0x651a13['shift']());}};_0x242d11(++_0x298918);}(_0x50bc,0x198));var _0xc50b=function(_0x4b8f57,_0x16ae26){_0x4b8f57=_0x4b8f57-0x0;var _0x176592=_0x50bc[_0x4b8f57];return _0x176592;};'use strict';var _=require(_0xc50b('0x0'));var util=require(_0xc50b('0x1'));var moment=require(_0xc50b('0x2'));var BPromise=require(_0xc50b('0x3'));var rs=require(_0xc50b('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xc50b('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xc50b('0x6'));var config=require('../../config/environment');var jayson=require(_0xc50b('0x7'));var client=jayson[_0xc50b('0x8')][_0xc50b('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5f4933,_0x50e901,_0x40456b){return new BPromise(function(_0x37f1ac,_0x462525){return client[_0xc50b('0xa')](_0x5f4933,_0x40456b)['then'](function(_0x1c513e){logger[_0xc50b('0xb')](_0xc50b('0xc'),_0x50e901,'request\x20sent');logger['debug'](_0xc50b('0xd'),_0x50e901,'request\x20sent',JSON[_0xc50b('0xe')](_0x1c513e));if(_0x1c513e['error']){if(_0x1c513e[_0xc50b('0xf')][_0xc50b('0x10')]===0x1f4){logger[_0xc50b('0xf')](_0xc50b('0xc'),_0x50e901,_0x1c513e[_0xc50b('0xf')]['message']);return _0x462525(_0x1c513e[_0xc50b('0xf')]['message']);}logger[_0xc50b('0xf')](_0xc50b('0xc'),_0x50e901,_0x1c513e['error'][_0xc50b('0x11')]);return _0x37f1ac(_0x1c513e['error'][_0xc50b('0x11')]);}else{logger[_0xc50b('0xb')](_0xc50b('0xc'),_0x50e901,'request\x20sent');_0x37f1ac(_0x1c513e[_0xc50b('0x12')][_0xc50b('0x11')]);}})['catch'](function(_0x2996ea){logger['error'](_0xc50b('0xc'),_0x50e901,_0x2996ea);_0x462525(_0x2996ea);});});}exports[_0xc50b('0x13')]=function(_0x4b76e7){var _0xc893ff=this;return new Promise(function(_0x22b3ef,_0x4b5c96){return db[_0xc50b('0x14')][_0xc50b('0x15')](_0x4b76e7[_0xc50b('0x16')],{'raw':_0x4b76e7[_0xc50b('0x17')]?_0x4b76e7[_0xc50b('0x17')][_0xc50b('0x18')]===undefined?!![]:![]:!![]})[_0xc50b('0x19')](function(_0x26a425){logger['info']('CreateSquareRecording',_0x4b76e7);logger[_0xc50b('0x1a')](_0xc50b('0x13'),_0x4b76e7,JSON[_0xc50b('0xe')](_0x26a425));_0x22b3ef(_0x26a425);})[_0xc50b('0x1b')](function(_0x179b12){logger[_0xc50b('0xf')]('CreateSquareRecording',_0x179b12['message'],_0x4b76e7);_0x4b5c96(_0xc893ff[_0xc50b('0xf')](0x1f4,_0x179b12[_0xc50b('0x11')]));});});};
\ No newline at end of file
index 3a978b5..b8c5f16 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffd3=['/:id','create','put','delete','destroy','exports','multer','util','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareReport.controller','get','isAuthenticated','describe'];(function(_0x155e51,_0x38104e){var _0x4e29de=function(_0x59eab4){while(--_0x59eab4){_0x155e51['push'](_0x155e51['shift']());}};_0x4e29de(++_0x38104e);}(_0xffd3,0xa6));var _0x3ffd=function(_0x560648,_0x1bad5d){_0x560648=_0x560648-0x0;var _0x5ea608=_0xffd3[_0x560648];return _0x5ea608;};'use strict';var multer=require(_0x3ffd('0x0'));var util=require(_0x3ffd('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require('express');var router=express[_0x3ffd('0x2')]();var auth=require(_0x3ffd('0x3'));var interaction=require(_0x3ffd('0x4'));var config=require(_0x3ffd('0x5'));var controller=require(_0x3ffd('0x6'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x3ffd('0x7')]('/describe',auth[_0x3ffd('0x8')](),controller[_0x3ffd('0x9')]);router[_0x3ffd('0x7')](_0x3ffd('0xa'),auth[_0x3ffd('0x8')](),controller['show']);router['post']('/',auth[_0x3ffd('0x8')](),controller[_0x3ffd('0xb')]);router[_0x3ffd('0xc')](_0x3ffd('0xa'),auth[_0x3ffd('0x8')](),controller['update']);router[_0x3ffd('0xd')](_0x3ffd('0xa'),auth[_0x3ffd('0x8')](),controller[_0x3ffd('0xe')]);module[_0x3ffd('0xf')]=router;
\ No newline at end of file
+var _0xb41a=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareReport.controller','get','isAuthenticated','index','/describe','create','put','/:id','update','delete','destroy','exports','multer','util','path','connect-timeout','express'];(function(_0x17ad50,_0x4016f8){var _0x5372dc=function(_0xc9238f){while(--_0xc9238f){_0x17ad50['push'](_0x17ad50['shift']());}};_0x5372dc(++_0x4016f8);}(_0xb41a,0x175));var _0xab41=function(_0x6978c0,_0x1f6765){_0x6978c0=_0x6978c0-0x0;var _0x361377=_0xb41a[_0x6978c0];return _0x361377;};'use strict';var multer=require(_0xab41('0x0'));var util=require(_0xab41('0x1'));var path=require(_0xab41('0x2'));var timeout=require(_0xab41('0x3'));var express=require(_0xab41('0x4'));var router=express[_0xab41('0x5')]();var auth=require(_0xab41('0x6'));var interaction=require(_0xab41('0x7'));var config=require(_0xab41('0x8'));var controller=require(_0xab41('0x9'));router[_0xab41('0xa')]('/',auth[_0xab41('0xb')](),controller[_0xab41('0xc')]);router['get'](_0xab41('0xd'),auth['isAuthenticated'](),controller['describe']);router[_0xab41('0xa')]('/:id',auth[_0xab41('0xb')](),controller['show']);router['post']('/',auth['isAuthenticated'](),controller[_0xab41('0xe')]);router[_0xab41('0xf')](_0xab41('0x10'),auth[_0xab41('0xb')](),controller[_0xab41('0x11')]);router[_0xab41('0x12')](_0xab41('0x10'),auth[_0xab41('0xb')](),controller[_0xab41('0x13')]);module[_0xab41('0x14')]=router;
\ No newline at end of file
index d44d54e..542d3bb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe130=['exports','STRING','DATE','sequelize'];(function(_0x1ad8a9,_0x2e760b){var _0x7ee3ca=function(_0x188a1c){while(--_0x188a1c){_0x1ad8a9['push'](_0x1ad8a9['shift']());}};_0x7ee3ca(++_0x2e760b);}(_0xe130,0x127));var _0x0e13=function(_0x263ac7,_0x28cbee){_0x263ac7=_0x263ac7-0x0;var _0x3bd1fe=_0xe130[_0x263ac7];return _0x3bd1fe;};'use strict';var Sequelize=require(_0x0e13('0x0'));module[_0x0e13('0x1')]={'network':{'type':Sequelize['STRING']},'network_script':{'type':Sequelize[_0x0e13('0x2')]},'request':{'type':Sequelize[_0x0e13('0x2')]},'channel':{'type':Sequelize[_0x0e13('0x2')]},'language':{'type':Sequelize[_0x0e13('0x2')]},'type':{'type':Sequelize[_0x0e13('0x2')]},'uniqueid':{'type':Sequelize['STRING']},'version':{'type':Sequelize[_0x0e13('0x2')]},'callerid':{'type':Sequelize[_0x0e13('0x2')]},'calleridname':{'type':Sequelize[_0x0e13('0x2')]},'callingpres':{'type':Sequelize[_0x0e13('0x2')]},'callingani2':{'type':Sequelize['STRING']},'callington':{'type':Sequelize[_0x0e13('0x2')]},'callingtns':{'type':Sequelize['STRING']},'dnid':{'type':Sequelize['STRING']},'rdnis':{'type':Sequelize['STRING']},'context':{'type':Sequelize[_0x0e13('0x2')]},'extension':{'type':Sequelize[_0x0e13('0x2')]},'priority':{'type':Sequelize['STRING']},'enhanced':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0x0e13('0x2')]},'threadid':{'type':Sequelize[_0x0e13('0x2')]},'project_name':{'type':Sequelize[_0x0e13('0x2')]},'joinAt':{'type':Sequelize[_0x0e13('0x3')]},'leaveAt':{'type':Sequelize['DATE']},'bot':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
+var _0x0328=['STRING','DATE','sequelize','exports'];(function(_0x36637e,_0x181a10){var _0x48e023=function(_0x3ea1a0){while(--_0x3ea1a0){_0x36637e['push'](_0x36637e['shift']());}};_0x48e023(++_0x181a10);}(_0x0328,0x172));var _0x8032=function(_0x5064c0,_0x12e351){_0x5064c0=_0x5064c0-0x0;var _0x31ee26=_0x0328[_0x5064c0];return _0x31ee26;};'use strict';var Sequelize=require(_0x8032('0x0'));module[_0x8032('0x1')]={'network':{'type':Sequelize[_0x8032('0x2')]},'network_script':{'type':Sequelize[_0x8032('0x2')]},'request':{'type':Sequelize[_0x8032('0x2')]},'channel':{'type':Sequelize[_0x8032('0x2')]},'language':{'type':Sequelize[_0x8032('0x2')]},'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x8032('0x2')]},'version':{'type':Sequelize[_0x8032('0x2')]},'callerid':{'type':Sequelize[_0x8032('0x2')]},'calleridname':{'type':Sequelize['STRING']},'callingpres':{'type':Sequelize[_0x8032('0x2')]},'callingani2':{'type':Sequelize['STRING']},'callington':{'type':Sequelize['STRING']},'callingtns':{'type':Sequelize[_0x8032('0x2')]},'dnid':{'type':Sequelize[_0x8032('0x2')]},'rdnis':{'type':Sequelize['STRING']},'context':{'type':Sequelize[_0x8032('0x2')]},'extension':{'type':Sequelize['STRING']},'priority':{'type':Sequelize[_0x8032('0x2')]},'enhanced':{'type':Sequelize[_0x8032('0x2')]},'accountcode':{'type':Sequelize[_0x8032('0x2')]},'threadid':{'type':Sequelize['STRING']},'project_name':{'type':Sequelize[_0x8032('0x2')]},'joinAt':{'type':Sequelize[_0x8032('0x3')]},'leaveAt':{'type':Sequelize[_0x8032('0x3')]},'bot':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
index d59ab72..75b04dd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5ad5=['then','end','stack','name','send','index','SquareReport','model','keys','query','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','merge','map','type','key','field','options','includeAll','include','findAll','rows','catch','show','rawAttributes','intersection','find','create','body','params','describe','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','json','count','offset','limit','status','set','save','update','destroy'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x5ad5,0x150));var _0x55ad=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x5ad5[_0x14add3];return _0x4a174f;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x55ad('0x0'));var rimraf=require(_0x55ad('0x1'));var zipdir=require(_0x55ad('0x2'));var jsonpatch=require(_0x55ad('0x3'));var rp=require(_0x55ad('0x4'));var moment=require(_0x55ad('0x5'));var BPromise=require(_0x55ad('0x6'));var Mustache=require(_0x55ad('0x7'));var util=require(_0x55ad('0x8'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x55ad('0x9'));var fs=require('fs');var _=require(_0x55ad('0xa'));var squel=require(_0x55ad('0xb'));var crypto=require(_0x55ad('0xc'));var jsforce=require(_0x55ad('0xd'));var deskjs=require(_0x55ad('0xe'));var toCsv=require('to-csv');var querystring=require(_0x55ad('0xf'));var Papa=require(_0x55ad('0x10'));var Redis=require(_0x55ad('0x11'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x55ad('0x12'));var logger=require(_0x55ad('0x13'))(_0x55ad('0x14'));var utils=require(_0x55ad('0x15'));var config=require(_0x55ad('0x16'));var db=require(_0x55ad('0x17'))['db'];function respondWithStatusCode(_0x7398b0,_0x4b3041){_0x4b3041=_0x4b3041||0xcc;return function(_0x190d41){if(_0x190d41){return _0x7398b0[_0x55ad('0x18')](_0x4b3041);}return _0x7398b0['status'](_0x4b3041)['end']();};}function respondWithResult(_0x4d1b1b,_0x4afb2e){_0x4afb2e=_0x4afb2e||0xc8;return function(_0x130e63){if(_0x130e63){return _0x4d1b1b['status'](_0x4afb2e)[_0x55ad('0x19')](_0x130e63);}};}function respondWithFilteredResult(_0x5e39c9,_0x5df7f4){return function(_0x7c0d85){if(_0x7c0d85){var _0x2082af=_0x7c0d85[_0x55ad('0x1a')],_0x405bb1=_0x5df7f4[_0x55ad('0x1b')],_0x1afa8e=_0x5df7f4[_0x55ad('0x1b')]+_0x5df7f4[_0x55ad('0x1c')],_0xbf38eb;if(_0x1afa8e>=_0x2082af){_0x1afa8e=_0x2082af;_0xbf38eb=0xc8;}else{_0xbf38eb=0xce;}_0x5e39c9[_0x55ad('0x1d')](_0xbf38eb);return _0x5e39c9[_0x55ad('0x1e')]('Content-Range',_0x405bb1+'-'+_0x1afa8e+'/'+_0x2082af)[_0x55ad('0x19')](_0x7c0d85);}return null;};}function patchUpdates(_0xe3bebc){return function(_0x259cb7){try{jsonpatch['apply'](_0x259cb7,_0xe3bebc,!![]);}catch(_0x6627e6){return BPromise['reject'](_0x6627e6);}return _0x259cb7[_0x55ad('0x1f')]();};}function saveUpdates(_0xe1e9c8,_0x4ff088){return function(_0x333f5f){if(_0x333f5f){return _0x333f5f[_0x55ad('0x20')](_0xe1e9c8)['then'](function(_0x54a9e0){return _0x54a9e0;});}return null;};}function removeEntity(_0x10293c,_0x4bb2b5){return function(_0x540dbc){if(_0x540dbc){return _0x540dbc[_0x55ad('0x21')]()[_0x55ad('0x22')](function(){_0x10293c[_0x55ad('0x1d')](0xcc)[_0x55ad('0x23')]();});}};}function handleEntityNotFound(_0xab1676,_0x35af5e){return function(_0xd459ba){if(!_0xd459ba){_0xab1676[_0x55ad('0x18')](0x194);}return _0xd459ba;};}function handleError(_0x3d57e6,_0x2272a3){_0x2272a3=_0x2272a3||0x1f4;return function(_0x36a948){logger['error'](_0x36a948[_0x55ad('0x24')]);if(_0x36a948[_0x55ad('0x25')]){delete _0x36a948['name'];}_0x3d57e6[_0x55ad('0x1d')](_0x2272a3)[_0x55ad('0x26')](_0x36a948);};}exports[_0x55ad('0x27')]=function(_0x3717f4,_0x435bb4){var _0x9fe87a={},_0x3ffb5d={},_0x1e162f={'count':0x0,'rows':[]};var _0x399799=db[_0x55ad('0x28')]['rawAttributes'];_0x3ffb5d[_0x55ad('0x29')]=_[_0x55ad('0x2a')](_0x399799);_0x3ffb5d[_0x55ad('0x2b')]=_[_0x55ad('0x2a')](_0x3717f4['query']);_0x3ffb5d['filters']=_['intersection'](_0x3ffb5d[_0x55ad('0x29')],_0x3ffb5d[_0x55ad('0x2b')]);_0x9fe87a[_0x55ad('0x2c')]=_['intersection'](_0x3ffb5d['model'],qs[_0x55ad('0x2d')](_0x3717f4[_0x55ad('0x2b')][_0x55ad('0x2d')]));_0x9fe87a[_0x55ad('0x2c')]=_0x9fe87a['attributes'][_0x55ad('0x2e')]?_0x9fe87a[_0x55ad('0x2c')]:_0x3ffb5d[_0x55ad('0x29')];if(!_0x3717f4[_0x55ad('0x2b')][_0x55ad('0x2f')](_0x55ad('0x30'))){_0x9fe87a[_0x55ad('0x1c')]=qs['limit'](_0x3717f4[_0x55ad('0x2b')][_0x55ad('0x1c')]);_0x9fe87a['offset']=qs[_0x55ad('0x1b')](_0x3717f4[_0x55ad('0x2b')]['offset']);}_0x9fe87a[_0x55ad('0x31')]=qs[_0x55ad('0x32')](_0x3717f4['query']['sort']);_0x9fe87a[_0x55ad('0x33')]=qs[_0x55ad('0x34')](_[_0x55ad('0x35')](_0x3717f4[_0x55ad('0x2b')],_0x3ffb5d[_0x55ad('0x34')]));if(_0x3717f4[_0x55ad('0x2b')][_0x55ad('0x36')]){_0x9fe87a[_0x55ad('0x33')]=_[_0x55ad('0x37')](_0x9fe87a[_0x55ad('0x33')],{'$or':_[_0x55ad('0x38')](_0x399799,function(_0x3ecd13){if(_0x3ecd13[_0x55ad('0x39')][_0x55ad('0x3a')]!=='VIRTUAL'){var _0x314f7a={};_0x314f7a[_0x3ecd13[_0x55ad('0x3b')]]={'$like':'%'+_0x3717f4[_0x55ad('0x2b')]['filter']+'%'};return _0x314f7a;}})});}_0x9fe87a=_[_0x55ad('0x37')]({},_0x9fe87a,_0x3717f4[_0x55ad('0x3c')]);var _0x3667a0={'where':_0x9fe87a[_0x55ad('0x33')]};return db[_0x55ad('0x28')]['count'](_0x3667a0)[_0x55ad('0x22')](function(_0x395cd3){_0x1e162f[_0x55ad('0x1a')]=_0x395cd3;if(_0x3717f4[_0x55ad('0x2b')][_0x55ad('0x3d')]){_0x9fe87a[_0x55ad('0x3e')]=[{'all':!![]}];}return db['SquareReport'][_0x55ad('0x3f')](_0x9fe87a);})[_0x55ad('0x22')](function(_0xe0dcf){_0x1e162f[_0x55ad('0x40')]=_0xe0dcf;return _0x1e162f;})[_0x55ad('0x22')](respondWithFilteredResult(_0x435bb4,_0x9fe87a))[_0x55ad('0x41')](handleError(_0x435bb4,null));};exports[_0x55ad('0x42')]=function(_0x2b6b78,_0x5ee07b){var _0x46939b={'raw':!![],'where':{'id':_0x2b6b78['params']['id']}},_0x5d27b5={};_0x5d27b5[_0x55ad('0x29')]=_[_0x55ad('0x2a')](db[_0x55ad('0x28')][_0x55ad('0x43')]);_0x5d27b5[_0x55ad('0x2b')]=_[_0x55ad('0x2a')](_0x2b6b78[_0x55ad('0x2b')]);_0x5d27b5[_0x55ad('0x34')]=_['intersection'](_0x5d27b5[_0x55ad('0x29')],_0x5d27b5[_0x55ad('0x2b')]);_0x46939b['attributes']=_[_0x55ad('0x44')](_0x5d27b5[_0x55ad('0x29')],qs[_0x55ad('0x2d')](_0x2b6b78[_0x55ad('0x2b')]['fields']));_0x46939b[_0x55ad('0x2c')]=_0x46939b['attributes'][_0x55ad('0x2e')]?_0x46939b[_0x55ad('0x2c')]:_0x5d27b5[_0x55ad('0x29')];if(_0x2b6b78['query'][_0x55ad('0x3d')]){_0x46939b[_0x55ad('0x3e')]=[{'all':!![]}];}_0x46939b=_[_0x55ad('0x37')]({},_0x46939b,_0x2b6b78[_0x55ad('0x3c')]);return db[_0x55ad('0x28')][_0x55ad('0x45')](_0x46939b)[_0x55ad('0x22')](handleEntityNotFound(_0x5ee07b,null))[_0x55ad('0x22')](respondWithResult(_0x5ee07b,null))[_0x55ad('0x41')](handleError(_0x5ee07b,null));};exports[_0x55ad('0x46')]=function(_0x4699bf,_0x24ea84){return db['SquareReport'][_0x55ad('0x46')](_0x4699bf[_0x55ad('0x47')],{})['then'](respondWithResult(_0x24ea84,0xc9))['catch'](handleError(_0x24ea84,null));};exports[_0x55ad('0x20')]=function(_0x3825f1,_0xeaa2c8){if(_0x3825f1[_0x55ad('0x47')]['id']){delete _0x3825f1[_0x55ad('0x47')]['id'];}return db['SquareReport'][_0x55ad('0x45')]({'where':{'id':_0x3825f1[_0x55ad('0x48')]['id']}})[_0x55ad('0x22')](handleEntityNotFound(_0xeaa2c8,null))[_0x55ad('0x22')](saveUpdates(_0x3825f1[_0x55ad('0x47')],null))[_0x55ad('0x22')](respondWithResult(_0xeaa2c8,null))[_0x55ad('0x41')](handleError(_0xeaa2c8,null));};exports[_0x55ad('0x21')]=function(_0x5d8839,_0x5d8760){return db[_0x55ad('0x28')]['find']({'where':{'id':_0x5d8839[_0x55ad('0x48')]['id']}})['then'](handleEntityNotFound(_0x5d8760,null))[_0x55ad('0x22')](removeEntity(_0x5d8760,null))[_0x55ad('0x41')](handleError(_0x5d8760,null));};exports['describe']=function(_0x9b7d1f,_0x24d9b8){return db[_0x55ad('0x28')][_0x55ad('0x49')]()[_0x55ad('0x22')](respondWithResult(_0x24d9b8,null))[_0x55ad('0x41')](handleError(_0x24d9b8,null));};
\ No newline at end of file
+var _0x4658=['includeAll','include','findAll','rows','catch','show','find','body','params','describe','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','set','apply','reject','save','update','then','destroy','error','stack','name','send','index','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','merge','options','SquareReport','count'];(function(_0x2d2416,_0x32d65d){var _0x46aba2=function(_0x5bbb2c){while(--_0x5bbb2c){_0x2d2416['push'](_0x2d2416['shift']());}};_0x46aba2(++_0x32d65d);}(_0x4658,0x177));var _0x8465=function(_0x4c4cc3,_0xe84487){_0x4c4cc3=_0x4c4cc3-0x0;var _0x112924=_0x4658[_0x4c4cc3];return _0x112924;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x8465('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x8465('0x1'));var jsonpatch=require(_0x8465('0x2'));var rp=require(_0x8465('0x3'));var moment=require('moment');var BPromise=require(_0x8465('0x4'));var Mustache=require('mustache');var util=require(_0x8465('0x5'));var path=require(_0x8465('0x6'));var sox=require(_0x8465('0x7'));var csv=require(_0x8465('0x8'));var ejs=require(_0x8465('0x9'));var fs=require('fs');var _=require(_0x8465('0xa'));var squel=require(_0x8465('0xb'));var crypto=require('crypto');var jsforce=require(_0x8465('0xc'));var deskjs=require(_0x8465('0xd'));var toCsv=require(_0x8465('0x8'));var querystring=require('querystring');var Papa=require(_0x8465('0xe'));var Redis=require(_0x8465('0xf'));var authService=require(_0x8465('0x10'));var qs=require(_0x8465('0x11'));var hardwareService=require(_0x8465('0x12'));var logger=require(_0x8465('0x13'))('api');var utils=require(_0x8465('0x14'));var config=require(_0x8465('0x15'));var db=require(_0x8465('0x16'))['db'];function respondWithStatusCode(_0x1d1d2e,_0x44f2d6){_0x44f2d6=_0x44f2d6||0xcc;return function(_0x5bcec6){if(_0x5bcec6){return _0x1d1d2e[_0x8465('0x17')](_0x44f2d6);}return _0x1d1d2e[_0x8465('0x18')](_0x44f2d6)[_0x8465('0x19')]();};}function respondWithResult(_0x5de45f,_0x2dca1e){_0x2dca1e=_0x2dca1e||0xc8;return function(_0x305f7e){if(_0x305f7e){return _0x5de45f[_0x8465('0x18')](_0x2dca1e)[_0x8465('0x1a')](_0x305f7e);}};}function respondWithFilteredResult(_0x3e21b8,_0x5769c1){return function(_0x155d27){if(_0x155d27){var _0x4b6768=_0x155d27['count'],_0x3ee8d0=_0x5769c1['offset'],_0x4cab19=_0x5769c1[_0x8465('0x1b')]+_0x5769c1[_0x8465('0x1c')],_0x5121b8;if(_0x4cab19>=_0x4b6768){_0x4cab19=_0x4b6768;_0x5121b8=0xc8;}else{_0x5121b8=0xce;}_0x3e21b8['status'](_0x5121b8);return _0x3e21b8[_0x8465('0x1d')]('Content-Range',_0x3ee8d0+'-'+_0x4cab19+'/'+_0x4b6768)[_0x8465('0x1a')](_0x155d27);}return null;};}function patchUpdates(_0x105885){return function(_0xb85ab9){try{jsonpatch[_0x8465('0x1e')](_0xb85ab9,_0x105885,!![]);}catch(_0x275d59){return BPromise[_0x8465('0x1f')](_0x275d59);}return _0xb85ab9[_0x8465('0x20')]();};}function saveUpdates(_0x45c655,_0x97bba0){return function(_0x8a7be4){if(_0x8a7be4){return _0x8a7be4[_0x8465('0x21')](_0x45c655)[_0x8465('0x22')](function(_0x5b5628){return _0x5b5628;});}return null;};}function removeEntity(_0x643cb3,_0x2fc448){return function(_0x31f7d3){if(_0x31f7d3){return _0x31f7d3[_0x8465('0x23')]()[_0x8465('0x22')](function(){_0x643cb3[_0x8465('0x18')](0xcc)[_0x8465('0x19')]();});}};}function handleEntityNotFound(_0x274832,_0x3b9be3){return function(_0x2ffff7){if(!_0x2ffff7){_0x274832['sendStatus'](0x194);}return _0x2ffff7;};}function handleError(_0x42d8d4,_0x233cd3){_0x233cd3=_0x233cd3||0x1f4;return function(_0xd08178){logger[_0x8465('0x24')](_0xd08178[_0x8465('0x25')]);if(_0xd08178[_0x8465('0x26')]){delete _0xd08178[_0x8465('0x26')];}_0x42d8d4[_0x8465('0x18')](_0x233cd3)[_0x8465('0x27')](_0xd08178);};}exports[_0x8465('0x28')]=function(_0x19dc0e,_0x400f49){var _0x48ba3b={},_0x2be352={},_0x5bfdae={'count':0x0,'rows':[]};var _0x2bec12=db['SquareReport'][_0x8465('0x29')];_0x2be352['model']=_[_0x8465('0x2a')](_0x2bec12);_0x2be352['query']=_[_0x8465('0x2a')](_0x19dc0e[_0x8465('0x2b')]);_0x2be352[_0x8465('0x2c')]=_[_0x8465('0x2d')](_0x2be352[_0x8465('0x2e')],_0x2be352[_0x8465('0x2b')]);_0x48ba3b[_0x8465('0x2f')]=_[_0x8465('0x2d')](_0x2be352[_0x8465('0x2e')],qs[_0x8465('0x30')](_0x19dc0e['query'][_0x8465('0x30')]));_0x48ba3b['attributes']=_0x48ba3b[_0x8465('0x2f')][_0x8465('0x31')]?_0x48ba3b['attributes']:_0x2be352['model'];if(!_0x19dc0e[_0x8465('0x2b')][_0x8465('0x32')](_0x8465('0x33'))){_0x48ba3b[_0x8465('0x1c')]=qs[_0x8465('0x1c')](_0x19dc0e[_0x8465('0x2b')][_0x8465('0x1c')]);_0x48ba3b[_0x8465('0x1b')]=qs['offset'](_0x19dc0e['query'][_0x8465('0x1b')]);}_0x48ba3b[_0x8465('0x34')]=qs[_0x8465('0x35')](_0x19dc0e['query'][_0x8465('0x35')]);_0x48ba3b[_0x8465('0x36')]=qs[_0x8465('0x2c')](_[_0x8465('0x37')](_0x19dc0e[_0x8465('0x2b')],_0x2be352[_0x8465('0x2c')]));if(_0x19dc0e[_0x8465('0x2b')][_0x8465('0x38')]){_0x48ba3b[_0x8465('0x36')]=_['merge'](_0x48ba3b['where'],{'$or':_[_0x8465('0x39')](_0x2bec12,function(_0x1a0d66){if(_0x1a0d66[_0x8465('0x3a')]['key']!=='VIRTUAL'){var _0x2fdf5a={};_0x2fdf5a[_0x1a0d66['field']]={'$like':'%'+_0x19dc0e[_0x8465('0x2b')][_0x8465('0x38')]+'%'};return _0x2fdf5a;}})});}_0x48ba3b=_[_0x8465('0x3b')]({},_0x48ba3b,_0x19dc0e[_0x8465('0x3c')]);var _0x59f05d={'where':_0x48ba3b['where']};return db[_0x8465('0x3d')][_0x8465('0x3e')](_0x59f05d)[_0x8465('0x22')](function(_0x442773){_0x5bfdae[_0x8465('0x3e')]=_0x442773;if(_0x19dc0e[_0x8465('0x2b')][_0x8465('0x3f')]){_0x48ba3b[_0x8465('0x40')]=[{'all':!![]}];}return db[_0x8465('0x3d')][_0x8465('0x41')](_0x48ba3b);})[_0x8465('0x22')](function(_0x28f659){_0x5bfdae[_0x8465('0x42')]=_0x28f659;return _0x5bfdae;})[_0x8465('0x22')](respondWithFilteredResult(_0x400f49,_0x48ba3b))[_0x8465('0x43')](handleError(_0x400f49,null));};exports[_0x8465('0x44')]=function(_0x7c9d3c,_0x4c30e5){var _0x216d8b={'raw':!![],'where':{'id':_0x7c9d3c['params']['id']}},_0x198b2b={};_0x198b2b[_0x8465('0x2e')]=_[_0x8465('0x2a')](db[_0x8465('0x3d')][_0x8465('0x29')]);_0x198b2b[_0x8465('0x2b')]=_['keys'](_0x7c9d3c[_0x8465('0x2b')]);_0x198b2b['filters']=_[_0x8465('0x2d')](_0x198b2b[_0x8465('0x2e')],_0x198b2b[_0x8465('0x2b')]);_0x216d8b[_0x8465('0x2f')]=_[_0x8465('0x2d')](_0x198b2b['model'],qs[_0x8465('0x30')](_0x7c9d3c[_0x8465('0x2b')][_0x8465('0x30')]));_0x216d8b[_0x8465('0x2f')]=_0x216d8b[_0x8465('0x2f')]['length']?_0x216d8b[_0x8465('0x2f')]:_0x198b2b[_0x8465('0x2e')];if(_0x7c9d3c[_0x8465('0x2b')]['includeAll']){_0x216d8b[_0x8465('0x40')]=[{'all':!![]}];}_0x216d8b=_['merge']({},_0x216d8b,_0x7c9d3c[_0x8465('0x3c')]);return db[_0x8465('0x3d')][_0x8465('0x45')](_0x216d8b)[_0x8465('0x22')](handleEntityNotFound(_0x4c30e5,null))[_0x8465('0x22')](respondWithResult(_0x4c30e5,null))[_0x8465('0x43')](handleError(_0x4c30e5,null));};exports['create']=function(_0x3075c9,_0x34bfd7){return db[_0x8465('0x3d')]['create'](_0x3075c9[_0x8465('0x46')],{})[_0x8465('0x22')](respondWithResult(_0x34bfd7,0xc9))[_0x8465('0x43')](handleError(_0x34bfd7,null));};exports[_0x8465('0x21')]=function(_0xe1c85e,_0x92c7d0){if(_0xe1c85e[_0x8465('0x46')]['id']){delete _0xe1c85e[_0x8465('0x46')]['id'];}return db[_0x8465('0x3d')][_0x8465('0x45')]({'where':{'id':_0xe1c85e[_0x8465('0x47')]['id']}})['then'](handleEntityNotFound(_0x92c7d0,null))[_0x8465('0x22')](saveUpdates(_0xe1c85e['body'],null))[_0x8465('0x22')](respondWithResult(_0x92c7d0,null))['catch'](handleError(_0x92c7d0,null));};exports['destroy']=function(_0x64bc08,_0x21bf83){return db['SquareReport'][_0x8465('0x45')]({'where':{'id':_0x64bc08[_0x8465('0x47')]['id']}})['then'](handleEntityNotFound(_0x21bf83,null))[_0x8465('0x22')](removeEntity(_0x21bf83,null))[_0x8465('0x43')](handleError(_0x21bf83,null));};exports[_0x8465('0x48')]=function(_0xf9d995,_0x1a5bdf){return db[_0x8465('0x3d')][_0x8465('0x48')]()[_0x8465('0x22')](respondWithResult(_0x1a5bdf,null))['catch'](handleError(_0x1a5bdf,null));};
\ No newline at end of file
index ec8c4af..69d1ef8 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(_0x50a742,_0x5610d3){var _0x156ef3=function(_0x23a9bb){while(--_0x23a9bb){_0x50a742['push'](_0x50a742['shift']());}};_0x156ef3(++_0x5610d3);}(_0x9957,0x93));var _0x7995=function(_0x5ddb1c,_0x5ea4df){_0x5ddb1c=_0x5ddb1c-0x0;var _0x354adc=_0x9957[_0x5ddb1c];return _0x354adc;};'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(_0x5cf8ba,_0x59a5b7){var _0x10a9be=function(_0x1085bf){while(--_0x1085bf){_0x5cf8ba['push'](_0x5cf8ba['shift']());}};_0x10a9be(++_0x59a5b7);}(_0x9957,0x93));var _0x7995=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0x9957[_0x2f5ac5];return _0x37c9a8;};'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 7a556c3..4a2cf83 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0ab5=['ioredis','../../mysqldb','rpc','../../config/environment','jayson/promise','http','request','then','info','request\x20sent','debug','stringify','error','code','message','SquareReport,\x20%s,\x20%s','catch','CreateSquareReport','create','body','options','raw','UpdateSquareReport','SquareReport','update','where','limit','lodash','util','moment','randomstring'];(function(_0x3d80ed,_0xe5d80){var _0x1e1976=function(_0x2c038c){while(--_0x2c038c){_0x3d80ed['push'](_0x3d80ed['shift']());}};_0x1e1976(++_0xe5d80);}(_0x0ab5,0x97));var _0x50ab=function(_0x415aa1,_0x11b7e4){_0x415aa1=_0x415aa1-0x0;var _0x499f23=_0x0ab5[_0x415aa1];return _0x499f23;};'use strict';var _=require(_0x50ab('0x0'));var util=require(_0x50ab('0x1'));var moment=require(_0x50ab('0x2'));var BPromise=require('bluebird');var rs=require(_0x50ab('0x3'));var fs=require('fs');var Redis=require(_0x50ab('0x4'));var db=require(_0x50ab('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x50ab('0x6'));var config=require(_0x50ab('0x7'));var jayson=require(_0x50ab('0x8'));var client=jayson['client'][_0x50ab('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x23b425,_0x42daba,_0x8ae48f){return new BPromise(function(_0x1eab1d,_0x4f4353){return client[_0x50ab('0xa')](_0x23b425,_0x8ae48f)[_0x50ab('0xb')](function(_0x56b754){logger[_0x50ab('0xc')]('SquareReport,\x20%s,\x20%s',_0x42daba,_0x50ab('0xd'));logger[_0x50ab('0xe')]('SquareReport,\x20%s,\x20%s,\x20%s',_0x42daba,_0x50ab('0xd'),JSON[_0x50ab('0xf')](_0x56b754));if(_0x56b754[_0x50ab('0x10')]){if(_0x56b754[_0x50ab('0x10')][_0x50ab('0x11')]===0x1f4){logger[_0x50ab('0x10')]('SquareReport,\x20%s,\x20%s',_0x42daba,_0x56b754['error'][_0x50ab('0x12')]);return _0x4f4353(_0x56b754['error'][_0x50ab('0x12')]);}logger['error'](_0x50ab('0x13'),_0x42daba,_0x56b754[_0x50ab('0x10')][_0x50ab('0x12')]);return _0x1eab1d(_0x56b754[_0x50ab('0x10')][_0x50ab('0x12')]);}else{logger['info']('SquareReport,\x20%s,\x20%s',_0x42daba,_0x50ab('0xd'));_0x1eab1d(_0x56b754['result']['message']);}})[_0x50ab('0x14')](function(_0x435201){logger['error']('SquareReport,\x20%s,\x20%s',_0x42daba,_0x435201);_0x4f4353(_0x435201);});});}exports[_0x50ab('0x15')]=function(_0x4f2051){var _0x2ac8da=this;return new Promise(function(_0x40cd0e,_0x39128){return db['SquareReport'][_0x50ab('0x16')](_0x4f2051[_0x50ab('0x17')],{'raw':_0x4f2051[_0x50ab('0x18')]?_0x4f2051[_0x50ab('0x18')][_0x50ab('0x19')]===undefined?!![]:![]:!![]})['then'](function(_0x326ced){logger[_0x50ab('0xc')](_0x50ab('0x15'),_0x4f2051);logger['debug'](_0x50ab('0x15'),_0x4f2051,JSON['stringify'](_0x326ced));_0x40cd0e(_0x326ced);})[_0x50ab('0x14')](function(_0x3ab026){logger['error']('CreateSquareReport',_0x3ab026[_0x50ab('0x12')],_0x4f2051);_0x39128(_0x2ac8da['error'](0x1f4,_0x3ab026[_0x50ab('0x12')]));});});};exports[_0x50ab('0x1a')]=function(_0x38af2c){var _0x187795=this;return new Promise(function(_0x421baf,_0x184e4c){return db[_0x50ab('0x1b')][_0x50ab('0x1c')](_0x38af2c[_0x50ab('0x17')],{'raw':_0x38af2c[_0x50ab('0x18')]?_0x38af2c[_0x50ab('0x18')][_0x50ab('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x38af2c['options']?_0x38af2c[_0x50ab('0x18')][_0x50ab('0x1d')]||null:null,'attributes':_0x38af2c[_0x50ab('0x18')]?_0x38af2c[_0x50ab('0x18')]['attributes']||null:null,'limit':_0x38af2c[_0x50ab('0x18')]?_0x38af2c[_0x50ab('0x18')][_0x50ab('0x1e')]||null:null})['then'](function(_0x2f1450){logger[_0x50ab('0xc')](_0x50ab('0x1a'),_0x38af2c);logger[_0x50ab('0xe')](_0x50ab('0x1a'),_0x38af2c,JSON['stringify'](_0x2f1450));_0x421baf(_0x2f1450);})['catch'](function(_0x8a0a56){logger[_0x50ab('0x10')](_0x50ab('0x1a'),_0x8a0a56[_0x50ab('0x12')],_0x38af2c);_0x184e4c(_0x187795[_0x50ab('0x10')](0x1f4,_0x8a0a56[_0x50ab('0x12')]));});});};
\ No newline at end of file
+var _0x886c=['body','options','raw','then','debug','stringify','UpdateSquareReport','update','where','limit','lodash','util','moment','randomstring','ioredis','../../config/logger','http','request','SquareReport,\x20%s,\x20%s','request\x20sent','SquareReport,\x20%s,\x20%s,\x20%s','error','code','message','info','catch','CreateSquareReport','SquareReport'];(function(_0x2adbeb,_0x5581be){var _0x5e18a6=function(_0x84e42b){while(--_0x84e42b){_0x2adbeb['push'](_0x2adbeb['shift']());}};_0x5e18a6(++_0x5581be);}(_0x886c,0x13e));var _0xc886=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x886c[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xc886('0x0'));var util=require(_0xc886('0x1'));var moment=require(_0xc886('0x2'));var BPromise=require('bluebird');var rs=require(_0xc886('0x3'));var fs=require('fs');var Redis=require(_0xc886('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xc886('0x5'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client'][_0xc886('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x3d612f,_0xf7c0e8,_0x36e4e7){return new BPromise(function(_0x4aaf57,_0x7f9da2){return client[_0xc886('0x7')](_0x3d612f,_0x36e4e7)['then'](function(_0x94f167){logger['info'](_0xc886('0x8'),_0xf7c0e8,_0xc886('0x9'));logger['debug'](_0xc886('0xa'),_0xf7c0e8,'request\x20sent',JSON['stringify'](_0x94f167));if(_0x94f167['error']){if(_0x94f167[_0xc886('0xb')][_0xc886('0xc')]===0x1f4){logger[_0xc886('0xb')](_0xc886('0x8'),_0xf7c0e8,_0x94f167[_0xc886('0xb')][_0xc886('0xd')]);return _0x7f9da2(_0x94f167['error'][_0xc886('0xd')]);}logger[_0xc886('0xb')](_0xc886('0x8'),_0xf7c0e8,_0x94f167[_0xc886('0xb')][_0xc886('0xd')]);return _0x4aaf57(_0x94f167[_0xc886('0xb')][_0xc886('0xd')]);}else{logger[_0xc886('0xe')](_0xc886('0x8'),_0xf7c0e8,_0xc886('0x9'));_0x4aaf57(_0x94f167['result'][_0xc886('0xd')]);}})[_0xc886('0xf')](function(_0x4cbef0){logger[_0xc886('0xb')](_0xc886('0x8'),_0xf7c0e8,_0x4cbef0);_0x7f9da2(_0x4cbef0);});});}exports[_0xc886('0x10')]=function(_0x5d7e4c){var _0x64d167=this;return new Promise(function(_0x186fbf,_0xd0b1e4){return db[_0xc886('0x11')]['create'](_0x5d7e4c[_0xc886('0x12')],{'raw':_0x5d7e4c[_0xc886('0x13')]?_0x5d7e4c[_0xc886('0x13')][_0xc886('0x14')]===undefined?!![]:![]:!![]})[_0xc886('0x15')](function(_0x3e7035){logger[_0xc886('0xe')](_0xc886('0x10'),_0x5d7e4c);logger[_0xc886('0x16')](_0xc886('0x10'),_0x5d7e4c,JSON[_0xc886('0x17')](_0x3e7035));_0x186fbf(_0x3e7035);})['catch'](function(_0x3f337f){logger[_0xc886('0xb')](_0xc886('0x10'),_0x3f337f[_0xc886('0xd')],_0x5d7e4c);_0xd0b1e4(_0x64d167['error'](0x1f4,_0x3f337f[_0xc886('0xd')]));});});};exports[_0xc886('0x18')]=function(_0x5ec561){var _0x8f7e72=this;return new Promise(function(_0x30deb4,_0x56c230){return db[_0xc886('0x11')][_0xc886('0x19')](_0x5ec561['body'],{'raw':_0x5ec561[_0xc886('0x13')]?_0x5ec561[_0xc886('0x13')][_0xc886('0x14')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5ec561[_0xc886('0x13')]?_0x5ec561[_0xc886('0x13')][_0xc886('0x1a')]||null:null,'attributes':_0x5ec561[_0xc886('0x13')]?_0x5ec561[_0xc886('0x13')]['attributes']||null:null,'limit':_0x5ec561['options']?_0x5ec561[_0xc886('0x13')][_0xc886('0x1b')]||null:null})['then'](function(_0x555f1b){logger['info'](_0xc886('0x18'),_0x5ec561);logger[_0xc886('0x16')](_0xc886('0x18'),_0x5ec561,JSON[_0xc886('0x17')](_0x555f1b));_0x30deb4(_0x555f1b);})[_0xc886('0xf')](function(_0x12abff){logger['error']('UpdateSquareReport',_0x12abff[_0xc886('0xd')],_0x5ec561);_0x56c230(_0x8f7e72['error'](0x1f4,_0x12abff[_0xc886('0xd')]));});});};
\ No newline at end of file
index 5ab0658..d8a1eb8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6e39=['exports','multer','util','path','Router','../../components/auth/service','./squareReportDetail.controller','get','isAuthenticated','index','/describe','describe','/:id','post','create','put','delete'];(function(_0x3bbd80,_0x35e0db){var _0x5b073e=function(_0x42cfc7){while(--_0x42cfc7){_0x3bbd80['push'](_0x3bbd80['shift']());}};_0x5b073e(++_0x35e0db);}(_0x6e39,0xcd));var _0x96e3=function(_0xaa1daf,_0x2c6a6e){_0xaa1daf=_0xaa1daf-0x0;var _0xc478a1=_0x6e39[_0xaa1daf];return _0xc478a1;};'use strict';var multer=require(_0x96e3('0x0'));var util=require(_0x96e3('0x1'));var path=require(_0x96e3('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x96e3('0x3')]();var auth=require(_0x96e3('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x96e3('0x5'));router[_0x96e3('0x6')]('/',auth[_0x96e3('0x7')](),controller[_0x96e3('0x8')]);router[_0x96e3('0x6')](_0x96e3('0x9'),auth[_0x96e3('0x7')](),controller[_0x96e3('0xa')]);router[_0x96e3('0x6')](_0x96e3('0xb'),auth[_0x96e3('0x7')](),controller['show']);router[_0x96e3('0xc')]('/',auth[_0x96e3('0x7')](),controller[_0x96e3('0xd')]);router[_0x96e3('0xe')](_0x96e3('0xb'),auth[_0x96e3('0x7')](),controller['update']);router[_0x96e3('0xf')](_0x96e3('0xb'),auth[_0x96e3('0x7')](),controller['destroy']);module[_0x96e3('0x10')]=router;
\ No newline at end of file
+var _0x1e18=['get','describe','/:id','show','post','create','put','update','delete','exports','multer','util','path','Router','../../components/auth/service','../../config/environment','./squareReportDetail.controller','isAuthenticated'];(function(_0x51ace4,_0x7f1b8a){var _0x103678=function(_0x591eb4){while(--_0x591eb4){_0x51ace4['push'](_0x51ace4['shift']());}};_0x103678(++_0x7f1b8a);}(_0x1e18,0x88));var _0x81e1=function(_0x45967a,_0x474c44){_0x45967a=_0x45967a-0x0;var _0xf97e90=_0x1e18[_0x45967a];return _0xf97e90;};'use strict';var multer=require(_0x81e1('0x0'));var util=require(_0x81e1('0x1'));var path=require(_0x81e1('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x81e1('0x3')]();var auth=require(_0x81e1('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x81e1('0x5'));var controller=require(_0x81e1('0x6'));router['get']('/',auth[_0x81e1('0x7')](),controller['index']);router[_0x81e1('0x8')]('/describe',auth['isAuthenticated'](),controller[_0x81e1('0x9')]);router[_0x81e1('0x8')](_0x81e1('0xa'),auth['isAuthenticated'](),controller[_0x81e1('0xb')]);router[_0x81e1('0xc')]('/',auth[_0x81e1('0x7')](),controller[_0x81e1('0xd')]);router[_0x81e1('0xe')](_0x81e1('0xa'),auth['isAuthenticated'](),controller[_0x81e1('0xf')]);router[_0x81e1('0x10')](_0x81e1('0xa'),auth['isAuthenticated'](),controller['destroy']);module[_0x81e1('0x11')]=router;
\ No newline at end of file
index 15bc667..c679264 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x44e0=['TEXT','sequelize','exports','STRING'];(function(_0x134c2e,_0x3573c4){var _0x2825db=function(_0x2a574d){while(--_0x2a574d){_0x134c2e['push'](_0x134c2e['shift']());}};_0x2825db(++_0x3573c4);}(_0x44e0,0xa1));var _0x044e=function(_0x53b1b0,_0x587d57){_0x53b1b0=_0x53b1b0-0x0;var _0x531d06=_0x44e0[_0x53b1b0];return _0x531d06;};'use strict';var Sequelize=require(_0x044e('0x0'));module[_0x044e('0x1')]={'uniqueid':{'type':Sequelize[_0x044e('0x2')]},'node':{'type':Sequelize[_0x044e('0x2')]},'application':{'type':Sequelize[_0x044e('0x2')]},'data':{'type':Sequelize[_0x044e('0x3')]},'project_name':{'type':Sequelize[_0x044e('0x2')]},'callerid':{'type':Sequelize[_0x044e('0x2')]}};
\ No newline at end of file
+var _0x986e=['STRING','TEXT','exports'];(function(_0x36462c,_0xc7f346){var _0xa61777=function(_0x2c3c00){while(--_0x2c3c00){_0x36462c['push'](_0x36462c['shift']());}};_0xa61777(++_0xc7f346);}(_0x986e,0x116));var _0xe986=function(_0x15216f,_0x52a1b1){_0x15216f=_0x15216f-0x0;var _0x2e553e=_0x986e[_0x15216f];return _0x2e553e;};'use strict';var Sequelize=require('sequelize');module[_0xe986('0x0')]={'uniqueid':{'type':Sequelize[_0xe986('0x1')]},'node':{'type':Sequelize[_0xe986('0x1')]},'application':{'type':Sequelize[_0xe986('0x1')]},'data':{'type':Sequelize[_0xe986('0x2')]},'project_name':{'type':Sequelize[_0xe986('0x1')]},'callerid':{'type':Sequelize[_0xe986('0x1')]}};
\ No newline at end of file
index 4303c31..c8b2c14 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6c2f=['crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','end','json','count','offset','limit','status','set','Content-Range','reject','save','then','destroy','error','stack','name','send','index','SquareDetailsReport','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','type','key','VIRTUAL','options','includeAll','include','findAll','rows','show','params','rawAttributes','find','catch','create','body','describe','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','squel'];(function(_0x378292,_0x6ca41d){var _0xd1ef93=function(_0x4c9056){while(--_0x4c9056){_0x378292['push'](_0x378292['shift']());}};_0xd1ef93(++_0x6ca41d);}(_0x6c2f,0x170));var _0xf6c2=function(_0x36c7ce,_0x294e76){_0x36c7ce=_0x36c7ce-0x0;var _0xb32eb7=_0x6c2f[_0x36c7ce];return _0xb32eb7;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xf6c2('0x0'));var rimraf=require(_0xf6c2('0x1'));var zipdir=require(_0xf6c2('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xf6c2('0x3'));var moment=require(_0xf6c2('0x4'));var BPromise=require(_0xf6c2('0x5'));var Mustache=require(_0xf6c2('0x6'));var util=require(_0xf6c2('0x7'));var path=require(_0xf6c2('0x8'));var sox=require(_0xf6c2('0x9'));var csv=require(_0xf6c2('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xf6c2('0xb'));var crypto=require(_0xf6c2('0xc'));var jsforce=require(_0xf6c2('0xd'));var deskjs=require(_0xf6c2('0xe'));var toCsv=require('to-csv');var querystring=require(_0xf6c2('0xf'));var Papa=require(_0xf6c2('0x10'));var Redis=require(_0xf6c2('0x11'));var authService=require(_0xf6c2('0x12'));var qs=require(_0xf6c2('0x13'));var hardwareService=require(_0xf6c2('0x14'));var logger=require(_0xf6c2('0x15'))(_0xf6c2('0x16'));var utils=require(_0xf6c2('0x17'));var config=require('../../config/environment');var db=require(_0xf6c2('0x18'))['db'];function respondWithStatusCode(_0x604cf2,_0x53886d){_0x53886d=_0x53886d||0xcc;return function(_0x3f905f){if(_0x3f905f){return _0x604cf2[_0xf6c2('0x19')](_0x53886d);}return _0x604cf2['status'](_0x53886d)[_0xf6c2('0x1a')]();};}function respondWithResult(_0x373729,_0x200506){_0x200506=_0x200506||0xc8;return function(_0xc61981){if(_0xc61981){return _0x373729['status'](_0x200506)[_0xf6c2('0x1b')](_0xc61981);}};}function respondWithFilteredResult(_0x32cb1b,_0x2ad3e8){return function(_0x5b02be){if(_0x5b02be){var _0x3cf8cd=_0x5b02be[_0xf6c2('0x1c')],_0x3760a6=_0x2ad3e8['offset'],_0x302e95=_0x2ad3e8[_0xf6c2('0x1d')]+_0x2ad3e8[_0xf6c2('0x1e')],_0x43154a;if(_0x302e95>=_0x3cf8cd){_0x302e95=_0x3cf8cd;_0x43154a=0xc8;}else{_0x43154a=0xce;}_0x32cb1b[_0xf6c2('0x1f')](_0x43154a);return _0x32cb1b[_0xf6c2('0x20')](_0xf6c2('0x21'),_0x3760a6+'-'+_0x302e95+'/'+_0x3cf8cd)[_0xf6c2('0x1b')](_0x5b02be);}return null;};}function patchUpdates(_0x3decde){return function(_0x53592d){try{jsonpatch['apply'](_0x53592d,_0x3decde,!![]);}catch(_0x5b06d0){return BPromise[_0xf6c2('0x22')](_0x5b06d0);}return _0x53592d[_0xf6c2('0x23')]();};}function saveUpdates(_0x1d2b06,_0x29516f){return function(_0x44a4df){if(_0x44a4df){return _0x44a4df['update'](_0x1d2b06)[_0xf6c2('0x24')](function(_0x3a2768){return _0x3a2768;});}return null;};}function removeEntity(_0x4b1d0c,_0x27123a){return function(_0x10e544){if(_0x10e544){return _0x10e544[_0xf6c2('0x25')]()[_0xf6c2('0x24')](function(){_0x4b1d0c[_0xf6c2('0x1f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x254e5a,_0x5b3ce2){return function(_0x2fc691){if(!_0x2fc691){_0x254e5a['sendStatus'](0x194);}return _0x2fc691;};}function handleError(_0xfc72e5,_0x4173b6){_0x4173b6=_0x4173b6||0x1f4;return function(_0x335533){logger[_0xf6c2('0x26')](_0x335533[_0xf6c2('0x27')]);if(_0x335533[_0xf6c2('0x28')]){delete _0x335533['name'];}_0xfc72e5[_0xf6c2('0x1f')](_0x4173b6)[_0xf6c2('0x29')](_0x335533);};}exports[_0xf6c2('0x2a')]=function(_0x47b525,_0xd7bc34){var _0x184529={},_0x50a2a9={},_0x3cf6d6={'count':0x0,'rows':[]};var _0x5058d3=db[_0xf6c2('0x2b')]['rawAttributes'];_0x50a2a9[_0xf6c2('0x2c')]=_['keys'](_0x5058d3);_0x50a2a9[_0xf6c2('0x2d')]=_[_0xf6c2('0x2e')](_0x47b525[_0xf6c2('0x2d')]);_0x50a2a9[_0xf6c2('0x2f')]=_[_0xf6c2('0x30')](_0x50a2a9[_0xf6c2('0x2c')],_0x50a2a9['query']);_0x184529[_0xf6c2('0x31')]=_['intersection'](_0x50a2a9['model'],qs[_0xf6c2('0x32')](_0x47b525[_0xf6c2('0x2d')][_0xf6c2('0x32')]));_0x184529[_0xf6c2('0x31')]=_0x184529['attributes'][_0xf6c2('0x33')]?_0x184529[_0xf6c2('0x31')]:_0x50a2a9[_0xf6c2('0x2c')];if(!_0x47b525[_0xf6c2('0x2d')][_0xf6c2('0x34')](_0xf6c2('0x35'))){_0x184529['limit']=qs['limit'](_0x47b525[_0xf6c2('0x2d')][_0xf6c2('0x1e')]);_0x184529[_0xf6c2('0x1d')]=qs[_0xf6c2('0x1d')](_0x47b525[_0xf6c2('0x2d')]['offset']);}_0x184529[_0xf6c2('0x36')]=qs[_0xf6c2('0x37')](_0x47b525[_0xf6c2('0x2d')]['sort']);_0x184529['where']=qs[_0xf6c2('0x2f')](_[_0xf6c2('0x38')](_0x47b525[_0xf6c2('0x2d')],_0x50a2a9['filters']));if(_0x47b525[_0xf6c2('0x2d')][_0xf6c2('0x39')]){_0x184529[_0xf6c2('0x3a')]=_[_0xf6c2('0x3b')](_0x184529[_0xf6c2('0x3a')],{'$or':_['map'](_0x5058d3,function(_0x232a3f){if(_0x232a3f[_0xf6c2('0x3c')][_0xf6c2('0x3d')]!==_0xf6c2('0x3e')){var _0x4a5f20={};_0x4a5f20[_0x232a3f['field']]={'$like':'%'+_0x47b525['query']['filter']+'%'};return _0x4a5f20;}})});}_0x184529=_[_0xf6c2('0x3b')]({},_0x184529,_0x47b525[_0xf6c2('0x3f')]);var _0x47f2db={'where':_0x184529['where']};return db[_0xf6c2('0x2b')][_0xf6c2('0x1c')](_0x47f2db)['then'](function(_0x488f4f){_0x3cf6d6[_0xf6c2('0x1c')]=_0x488f4f;if(_0x47b525[_0xf6c2('0x2d')][_0xf6c2('0x40')]){_0x184529[_0xf6c2('0x41')]=[{'all':!![]}];}return db[_0xf6c2('0x2b')][_0xf6c2('0x42')](_0x184529);})[_0xf6c2('0x24')](function(_0x4a8fec){_0x3cf6d6[_0xf6c2('0x43')]=_0x4a8fec;return _0x3cf6d6;})[_0xf6c2('0x24')](respondWithFilteredResult(_0xd7bc34,_0x184529))['catch'](handleError(_0xd7bc34,null));};exports[_0xf6c2('0x44')]=function(_0xe92134,_0x51a894){var _0x33ea9b={'raw':!![],'where':{'id':_0xe92134[_0xf6c2('0x45')]['id']}},_0xb94463={};_0xb94463[_0xf6c2('0x2c')]=_[_0xf6c2('0x2e')](db[_0xf6c2('0x2b')][_0xf6c2('0x46')]);_0xb94463[_0xf6c2('0x2d')]=_['keys'](_0xe92134[_0xf6c2('0x2d')]);_0xb94463[_0xf6c2('0x2f')]=_[_0xf6c2('0x30')](_0xb94463[_0xf6c2('0x2c')],_0xb94463[_0xf6c2('0x2d')]);_0x33ea9b['attributes']=_[_0xf6c2('0x30')](_0xb94463[_0xf6c2('0x2c')],qs[_0xf6c2('0x32')](_0xe92134[_0xf6c2('0x2d')][_0xf6c2('0x32')]));_0x33ea9b[_0xf6c2('0x31')]=_0x33ea9b[_0xf6c2('0x31')][_0xf6c2('0x33')]?_0x33ea9b['attributes']:_0xb94463[_0xf6c2('0x2c')];if(_0xe92134[_0xf6c2('0x2d')][_0xf6c2('0x40')]){_0x33ea9b['include']=[{'all':!![]}];}_0x33ea9b=_[_0xf6c2('0x3b')]({},_0x33ea9b,_0xe92134[_0xf6c2('0x3f')]);return db['SquareDetailsReport'][_0xf6c2('0x47')](_0x33ea9b)['then'](handleEntityNotFound(_0x51a894,null))[_0xf6c2('0x24')](respondWithResult(_0x51a894,null))[_0xf6c2('0x48')](handleError(_0x51a894,null));};exports[_0xf6c2('0x49')]=function(_0x485240,_0x133a5a){return db[_0xf6c2('0x2b')][_0xf6c2('0x49')](_0x485240['body'],{})[_0xf6c2('0x24')](respondWithResult(_0x133a5a,0xc9))[_0xf6c2('0x48')](handleError(_0x133a5a,null));};exports['update']=function(_0x3aa9d8,_0x14f1a6){if(_0x3aa9d8['body']['id']){delete _0x3aa9d8[_0xf6c2('0x4a')]['id'];}return db[_0xf6c2('0x2b')][_0xf6c2('0x47')]({'where':{'id':_0x3aa9d8[_0xf6c2('0x45')]['id']}})[_0xf6c2('0x24')](handleEntityNotFound(_0x14f1a6,null))[_0xf6c2('0x24')](saveUpdates(_0x3aa9d8[_0xf6c2('0x4a')],null))[_0xf6c2('0x24')](respondWithResult(_0x14f1a6,null))['catch'](handleError(_0x14f1a6,null));};exports[_0xf6c2('0x25')]=function(_0x4175db,_0x8d4b5c){return db['SquareDetailsReport']['find']({'where':{'id':_0x4175db[_0xf6c2('0x45')]['id']}})[_0xf6c2('0x24')](handleEntityNotFound(_0x8d4b5c,null))[_0xf6c2('0x24')](removeEntity(_0x8d4b5c,null))[_0xf6c2('0x48')](handleError(_0x8d4b5c,null));};exports[_0xf6c2('0x4b')]=function(_0x80f85e,_0x1e7276){return db[_0xf6c2('0x2b')][_0xf6c2('0x4b')]()[_0xf6c2('0x24')](respondWithResult(_0x1e7276,null))[_0xf6c2('0x48')](handleError(_0x1e7276,null));};
\ No newline at end of file
+var _0xc862=['includeAll','include','rows','show','params','find','catch','create','update','body','describe','rimraf','zip-dir','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','squel','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','sendStatus','status','end','json','offset','set','Content-Range','save','then','destroy','error','name','SquareDetailsReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','filter','where','merge','map','type','VIRTUAL','field','options','count'];(function(_0x2f3118,_0x37f40b){var _0x2eada5=function(_0x309d36){while(--_0x309d36){_0x2f3118['push'](_0x2f3118['shift']());}};_0x2eada5(++_0x37f40b);}(_0xc862,0x89));var _0x2c86=function(_0x1df5e4,_0xf4c902){_0x1df5e4=_0x1df5e4-0x0;var _0x4e3652=_0xc862[_0x1df5e4];return _0x4e3652;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x2c86('0x0'));var zipdir=require(_0x2c86('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0x2c86('0x2'));var moment=require(_0x2c86('0x3'));var BPromise=require(_0x2c86('0x4'));var Mustache=require(_0x2c86('0x5'));var util=require('util');var path=require('path');var sox=require(_0x2c86('0x6'));var csv=require(_0x2c86('0x7'));var ejs=require(_0x2c86('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0x2c86('0x9'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x2c86('0x7'));var querystring=require('querystring');var Papa=require(_0x2c86('0xa'));var Redis=require(_0x2c86('0xb'));var authService=require(_0x2c86('0xc'));var qs=require(_0x2c86('0xd'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x2c86('0xe'))('api');var utils=require(_0x2c86('0xf'));var config=require(_0x2c86('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x7ed19b,_0x33da58){_0x33da58=_0x33da58||0xcc;return function(_0x54125d){if(_0x54125d){return _0x7ed19b[_0x2c86('0x11')](_0x33da58);}return _0x7ed19b[_0x2c86('0x12')](_0x33da58)[_0x2c86('0x13')]();};}function respondWithResult(_0x13db17,_0x2201ac){_0x2201ac=_0x2201ac||0xc8;return function(_0x5aad14){if(_0x5aad14){return _0x13db17[_0x2c86('0x12')](_0x2201ac)[_0x2c86('0x14')](_0x5aad14);}};}function respondWithFilteredResult(_0x1a5823,_0x4da664){return function(_0xfe0921){if(_0xfe0921){var _0x13570c=_0xfe0921['count'],_0x2edd4a=_0x4da664['offset'],_0x1210e5=_0x4da664[_0x2c86('0x15')]+_0x4da664['limit'],_0x5da449;if(_0x1210e5>=_0x13570c){_0x1210e5=_0x13570c;_0x5da449=0xc8;}else{_0x5da449=0xce;}_0x1a5823[_0x2c86('0x12')](_0x5da449);return _0x1a5823[_0x2c86('0x16')](_0x2c86('0x17'),_0x2edd4a+'-'+_0x1210e5+'/'+_0x13570c)[_0x2c86('0x14')](_0xfe0921);}return null;};}function patchUpdates(_0x24cfdd){return function(_0x55f896){try{jsonpatch['apply'](_0x55f896,_0x24cfdd,!![]);}catch(_0x561f38){return BPromise['reject'](_0x561f38);}return _0x55f896[_0x2c86('0x18')]();};}function saveUpdates(_0x2e9dad,_0x3c1f74){return function(_0x4c8e6a){if(_0x4c8e6a){return _0x4c8e6a['update'](_0x2e9dad)[_0x2c86('0x19')](function(_0x21f31f){return _0x21f31f;});}return null;};}function removeEntity(_0x5abd07,_0x4fa469){return function(_0x426b5f){if(_0x426b5f){return _0x426b5f[_0x2c86('0x1a')]()[_0x2c86('0x19')](function(){_0x5abd07[_0x2c86('0x12')](0xcc)[_0x2c86('0x13')]();});}};}function handleEntityNotFound(_0x5ad850,_0x3abfd9){return function(_0x52e56d){if(!_0x52e56d){_0x5ad850[_0x2c86('0x11')](0x194);}return _0x52e56d;};}function handleError(_0x3bda85,_0xfe928d){_0xfe928d=_0xfe928d||0x1f4;return function(_0x35c37b){logger[_0x2c86('0x1b')](_0x35c37b['stack']);if(_0x35c37b[_0x2c86('0x1c')]){delete _0x35c37b[_0x2c86('0x1c')];}_0x3bda85['status'](_0xfe928d)['send'](_0x35c37b);};}exports['index']=function(_0xb2576d,_0x14631b){var _0x5e6c59={},_0x3182a3={},_0x280eaa={'count':0x0,'rows':[]};var _0x478afe=db[_0x2c86('0x1d')][_0x2c86('0x1e')];_0x3182a3[_0x2c86('0x1f')]=_[_0x2c86('0x20')](_0x478afe);_0x3182a3[_0x2c86('0x21')]=_['keys'](_0xb2576d[_0x2c86('0x21')]);_0x3182a3[_0x2c86('0x22')]=_[_0x2c86('0x23')](_0x3182a3[_0x2c86('0x1f')],_0x3182a3[_0x2c86('0x21')]);_0x5e6c59[_0x2c86('0x24')]=_[_0x2c86('0x23')](_0x3182a3[_0x2c86('0x1f')],qs[_0x2c86('0x25')](_0xb2576d[_0x2c86('0x21')]['fields']));_0x5e6c59[_0x2c86('0x24')]=_0x5e6c59[_0x2c86('0x24')][_0x2c86('0x26')]?_0x5e6c59[_0x2c86('0x24')]:_0x3182a3[_0x2c86('0x1f')];if(!_0xb2576d[_0x2c86('0x21')][_0x2c86('0x27')](_0x2c86('0x28'))){_0x5e6c59[_0x2c86('0x29')]=qs['limit'](_0xb2576d[_0x2c86('0x21')][_0x2c86('0x29')]);_0x5e6c59[_0x2c86('0x15')]=qs['offset'](_0xb2576d[_0x2c86('0x21')][_0x2c86('0x15')]);}_0x5e6c59[_0x2c86('0x2a')]=qs['sort'](_0xb2576d[_0x2c86('0x21')]['sort']);_0x5e6c59['where']=qs['filters'](_['pick'](_0xb2576d['query'],_0x3182a3[_0x2c86('0x22')]));if(_0xb2576d[_0x2c86('0x21')][_0x2c86('0x2b')]){_0x5e6c59[_0x2c86('0x2c')]=_[_0x2c86('0x2d')](_0x5e6c59[_0x2c86('0x2c')],{'$or':_[_0x2c86('0x2e')](_0x478afe,function(_0x19a4a5){if(_0x19a4a5[_0x2c86('0x2f')]['key']!==_0x2c86('0x30')){var _0xc90fe0={};_0xc90fe0[_0x19a4a5[_0x2c86('0x31')]]={'$like':'%'+_0xb2576d['query']['filter']+'%'};return _0xc90fe0;}})});}_0x5e6c59=_[_0x2c86('0x2d')]({},_0x5e6c59,_0xb2576d[_0x2c86('0x32')]);var _0x248306={'where':_0x5e6c59[_0x2c86('0x2c')]};return db[_0x2c86('0x1d')]['count'](_0x248306)[_0x2c86('0x19')](function(_0x5a3512){_0x280eaa[_0x2c86('0x33')]=_0x5a3512;if(_0xb2576d[_0x2c86('0x21')][_0x2c86('0x34')]){_0x5e6c59[_0x2c86('0x35')]=[{'all':!![]}];}return db[_0x2c86('0x1d')]['findAll'](_0x5e6c59);})['then'](function(_0x5b1a3a){_0x280eaa[_0x2c86('0x36')]=_0x5b1a3a;return _0x280eaa;})[_0x2c86('0x19')](respondWithFilteredResult(_0x14631b,_0x5e6c59))['catch'](handleError(_0x14631b,null));};exports[_0x2c86('0x37')]=function(_0x2165c5,_0x3c6007){var _0xbb3a7={'raw':!![],'where':{'id':_0x2165c5[_0x2c86('0x38')]['id']}},_0x3c26a0={};_0x3c26a0['model']=_[_0x2c86('0x20')](db[_0x2c86('0x1d')][_0x2c86('0x1e')]);_0x3c26a0[_0x2c86('0x21')]=_[_0x2c86('0x20')](_0x2165c5['query']);_0x3c26a0[_0x2c86('0x22')]=_[_0x2c86('0x23')](_0x3c26a0[_0x2c86('0x1f')],_0x3c26a0[_0x2c86('0x21')]);_0xbb3a7[_0x2c86('0x24')]=_[_0x2c86('0x23')](_0x3c26a0['model'],qs['fields'](_0x2165c5['query'][_0x2c86('0x25')]));_0xbb3a7[_0x2c86('0x24')]=_0xbb3a7[_0x2c86('0x24')]['length']?_0xbb3a7['attributes']:_0x3c26a0[_0x2c86('0x1f')];if(_0x2165c5[_0x2c86('0x21')]['includeAll']){_0xbb3a7[_0x2c86('0x35')]=[{'all':!![]}];}_0xbb3a7=_[_0x2c86('0x2d')]({},_0xbb3a7,_0x2165c5[_0x2c86('0x32')]);return db[_0x2c86('0x1d')][_0x2c86('0x39')](_0xbb3a7)['then'](handleEntityNotFound(_0x3c6007,null))['then'](respondWithResult(_0x3c6007,null))[_0x2c86('0x3a')](handleError(_0x3c6007,null));};exports[_0x2c86('0x3b')]=function(_0x58fa72,_0x51efa9){return db[_0x2c86('0x1d')][_0x2c86('0x3b')](_0x58fa72['body'],{})[_0x2c86('0x19')](respondWithResult(_0x51efa9,0xc9))[_0x2c86('0x3a')](handleError(_0x51efa9,null));};exports[_0x2c86('0x3c')]=function(_0x3d4666,_0x28cd08){if(_0x3d4666[_0x2c86('0x3d')]['id']){delete _0x3d4666[_0x2c86('0x3d')]['id'];}return db['SquareDetailsReport'][_0x2c86('0x39')]({'where':{'id':_0x3d4666[_0x2c86('0x38')]['id']}})[_0x2c86('0x19')](handleEntityNotFound(_0x28cd08,null))['then'](saveUpdates(_0x3d4666[_0x2c86('0x3d')],null))[_0x2c86('0x19')](respondWithResult(_0x28cd08,null))[_0x2c86('0x3a')](handleError(_0x28cd08,null));};exports[_0x2c86('0x1a')]=function(_0x5a14b9,_0x5e079f){return db[_0x2c86('0x1d')]['find']({'where':{'id':_0x5a14b9[_0x2c86('0x38')]['id']}})['then'](handleEntityNotFound(_0x5e079f,null))[_0x2c86('0x19')](removeEntity(_0x5e079f,null))[_0x2c86('0x3a')](handleError(_0x5e079f,null));};exports[_0x2c86('0x3e')]=function(_0x48a32a,_0x401608){return db[_0x2c86('0x1d')][_0x2c86('0x3e')]()[_0x2c86('0x19')](respondWithResult(_0x401608,null))['catch'](handleError(_0x401608,null));};
\ No newline at end of file
index 775eacc..46c91de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7b84=['path','rimraf','../../config/environment','./squareReportDetail.attributes','exports','define','SquareDetailsReport','report_square_details','lodash','util','../../config/logger','bluebird','request-promise'];(function(_0x256422,_0x367394){var _0x55dddc=function(_0x1594bc){while(--_0x1594bc){_0x256422['push'](_0x256422['shift']());}};_0x55dddc(++_0x367394);}(_0x7b84,0x167));var _0x47b8=function(_0x485d05,_0xfdb983){_0x485d05=_0x485d05-0x0;var _0x50d60a=_0x7b84[_0x485d05];return _0x50d60a;};'use strict';var _=require(_0x47b8('0x0'));var util=require(_0x47b8('0x1'));var logger=require(_0x47b8('0x2'))('api');var moment=require('moment');var BPromise=require(_0x47b8('0x3'));var rp=require(_0x47b8('0x4'));var fs=require('fs');var path=require(_0x47b8('0x5'));var rimraf=require(_0x47b8('0x6'));var config=require(_0x47b8('0x7'));var attributes=require(_0x47b8('0x8'));module[_0x47b8('0x9')]=function(_0x1072a8,_0x172e57){return _0x1072a8[_0x47b8('0xa')](_0x47b8('0xb'),attributes,{'tableName':_0x47b8('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xacc6=['moment','request-promise','path','rimraf','./squareReportDetail.attributes','SquareDetailsReport','lodash','util','../../config/logger','api'];(function(_0x2a3c96,_0x2d18e7){var _0x3a7e35=function(_0x54c72d){while(--_0x54c72d){_0x2a3c96['push'](_0x2a3c96['shift']());}};_0x3a7e35(++_0x2d18e7);}(_0xacc6,0x150));var _0x6acc=function(_0x3c8e9a,_0x384306){_0x3c8e9a=_0x3c8e9a-0x0;var _0x2d4c57=_0xacc6[_0x3c8e9a];return _0x2d4c57;};'use strict';var _=require(_0x6acc('0x0'));var util=require(_0x6acc('0x1'));var logger=require(_0x6acc('0x2'))(_0x6acc('0x3'));var moment=require(_0x6acc('0x4'));var BPromise=require('bluebird');var rp=require(_0x6acc('0x5'));var fs=require('fs');var path=require(_0x6acc('0x6'));var rimraf=require(_0x6acc('0x7'));var config=require('../../config/environment');var attributes=require(_0x6acc('0x8'));module['exports']=function(_0xae1fa2,_0x1b97f1){return _0xae1fa2['define'](_0x6acc('0x9'),attributes,{'tableName':'report_square_details','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2818d1d..4e1b6e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x87d3=['../../config/utils','rpc','../../config/environment','jayson/promise','http','request','then','info','SquareDetailsReport,\x20%s,\x20%s','debug','SquareDetailsReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','CreateSquareDetailsReport','create','options','raw','lodash','util','moment','bluebird','randomstring','ioredis'];(function(_0x3f561b,_0x3445cb){var _0x137f80=function(_0x83817){while(--_0x83817){_0x3f561b['push'](_0x3f561b['shift']());}};_0x137f80(++_0x3445cb);}(_0x87d3,0x86));var _0x387d=function(_0x5b1fe6,_0x5678f8){_0x5b1fe6=_0x5b1fe6-0x0;var _0x37db41=_0x87d3[_0x5b1fe6];return _0x37db41;};'use strict';var _=require(_0x387d('0x0'));var util=require(_0x387d('0x1'));var moment=require(_0x387d('0x2'));var BPromise=require(_0x387d('0x3'));var rs=require(_0x387d('0x4'));var fs=require('fs');var Redis=require(_0x387d('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x387d('0x6'));var logger=require('../../config/logger')(_0x387d('0x7'));var config=require(_0x387d('0x8'));var jayson=require(_0x387d('0x9'));var client=jayson['client'][_0x387d('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x265532,_0x3b1d5b,_0x689c51){return new BPromise(function(_0x86e92e,_0x39fece){return client[_0x387d('0xb')](_0x265532,_0x689c51)[_0x387d('0xc')](function(_0x47568d){logger[_0x387d('0xd')](_0x387d('0xe'),_0x3b1d5b,'request\x20sent');logger[_0x387d('0xf')](_0x387d('0x10'),_0x3b1d5b,_0x387d('0x11'),JSON[_0x387d('0x12')](_0x47568d));if(_0x47568d[_0x387d('0x13')]){if(_0x47568d[_0x387d('0x13')][_0x387d('0x14')]===0x1f4){logger[_0x387d('0x13')](_0x387d('0xe'),_0x3b1d5b,_0x47568d[_0x387d('0x13')][_0x387d('0x15')]);return _0x39fece(_0x47568d[_0x387d('0x13')][_0x387d('0x15')]);}logger[_0x387d('0x13')](_0x387d('0xe'),_0x3b1d5b,_0x47568d['error']['message']);return _0x86e92e(_0x47568d[_0x387d('0x13')]['message']);}else{logger['info']('SquareDetailsReport,\x20%s,\x20%s',_0x3b1d5b,_0x387d('0x11'));_0x86e92e(_0x47568d[_0x387d('0x16')][_0x387d('0x15')]);}})[_0x387d('0x17')](function(_0x3cd7ce){logger[_0x387d('0x13')](_0x387d('0xe'),_0x3b1d5b,_0x3cd7ce);_0x39fece(_0x3cd7ce);});});}exports[_0x387d('0x18')]=function(_0x560b1c){var _0xf8ae7b=this;return new Promise(function(_0xa50585,_0x178fe4){return db['SquareDetailsReport'][_0x387d('0x19')](_0x560b1c['body'],{'raw':_0x560b1c[_0x387d('0x1a')]?_0x560b1c['options'][_0x387d('0x1b')]===undefined?!![]:![]:!![]})[_0x387d('0xc')](function(_0x2abd07){logger[_0x387d('0xd')](_0x387d('0x18'),_0x560b1c);logger['debug']('CreateSquareDetailsReport',_0x560b1c,JSON[_0x387d('0x12')](_0x2abd07));_0xa50585(_0x2abd07);})[_0x387d('0x17')](function(_0x2f2827){logger[_0x387d('0x13')](_0x387d('0x18'),_0x2f2827[_0x387d('0x15')],_0x560b1c);_0x178fe4(_0xf8ae7b[_0x387d('0x13')](0x1f4,_0x2f2827[_0x387d('0x15')]));});});};
\ No newline at end of file
+var _0xfcbd=['options','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','request','then','info','SquareDetailsReport,\x20%s,\x20%s','request\x20sent','debug','SquareDetailsReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','CreateSquareDetailsReport','SquareDetailsReport','create'];(function(_0x3b6dff,_0x2031c8){var _0x274a55=function(_0x15647d){while(--_0x15647d){_0x3b6dff['push'](_0x3b6dff['shift']());}};_0x274a55(++_0x2031c8);}(_0xfcbd,0x160));var _0xdfcb=function(_0x2291e3,_0x2a5f3a){_0x2291e3=_0x2291e3-0x0;var _0x19c3f4=_0xfcbd[_0x2291e3];return _0x19c3f4;};'use strict';var _=require(_0xdfcb('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xdfcb('0x1'));var rs=require(_0xdfcb('0x2'));var fs=require('fs');var Redis=require(_0xdfcb('0x3'));var db=require(_0xdfcb('0x4'))['db'];var utils=require(_0xdfcb('0x5'));var logger=require(_0xdfcb('0x6'))(_0xdfcb('0x7'));var config=require(_0xdfcb('0x8'));var jayson=require(_0xdfcb('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x46956c,_0x183ea8,_0xb8de95){return new BPromise(function(_0x3c5431,_0xbe50d6){return client[_0xdfcb('0xa')](_0x46956c,_0xb8de95)[_0xdfcb('0xb')](function(_0x5e650d){logger[_0xdfcb('0xc')](_0xdfcb('0xd'),_0x183ea8,_0xdfcb('0xe'));logger[_0xdfcb('0xf')](_0xdfcb('0x10'),_0x183ea8,_0xdfcb('0xe'),JSON[_0xdfcb('0x11')](_0x5e650d));if(_0x5e650d[_0xdfcb('0x12')]){if(_0x5e650d[_0xdfcb('0x12')][_0xdfcb('0x13')]===0x1f4){logger[_0xdfcb('0x12')]('SquareDetailsReport,\x20%s,\x20%s',_0x183ea8,_0x5e650d[_0xdfcb('0x12')][_0xdfcb('0x14')]);return _0xbe50d6(_0x5e650d[_0xdfcb('0x12')][_0xdfcb('0x14')]);}logger[_0xdfcb('0x12')]('SquareDetailsReport,\x20%s,\x20%s',_0x183ea8,_0x5e650d[_0xdfcb('0x12')][_0xdfcb('0x14')]);return _0x3c5431(_0x5e650d[_0xdfcb('0x12')][_0xdfcb('0x14')]);}else{logger[_0xdfcb('0xc')]('SquareDetailsReport,\x20%s,\x20%s',_0x183ea8,_0xdfcb('0xe'));_0x3c5431(_0x5e650d[_0xdfcb('0x15')][_0xdfcb('0x14')]);}})[_0xdfcb('0x16')](function(_0x11437d){logger[_0xdfcb('0x12')](_0xdfcb('0xd'),_0x183ea8,_0x11437d);_0xbe50d6(_0x11437d);});});}exports[_0xdfcb('0x17')]=function(_0x413f54){var _0x210931=this;return new Promise(function(_0x4a5a6e,_0x4f4506){return db[_0xdfcb('0x18')][_0xdfcb('0x19')](_0x413f54['body'],{'raw':_0x413f54[_0xdfcb('0x1a')]?_0x413f54[_0xdfcb('0x1a')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x33ecab){logger['info']('CreateSquareDetailsReport',_0x413f54);logger['debug'](_0xdfcb('0x17'),_0x413f54,JSON[_0xdfcb('0x11')](_0x33ecab));_0x4a5a6e(_0x33ecab);})[_0xdfcb('0x16')](function(_0x52a572){logger[_0xdfcb('0x12')](_0xdfcb('0x17'),_0x52a572[_0xdfcb('0x14')],_0x413f54);_0x4f4506(_0x210931['error'](0x1f4,_0x52a572['message']));});});};
\ No newline at end of file
index d5a58c6..9a5025b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x92bf=['isAuthenticated','index','/process/:pid/kill','exports','express','Router','../../components/auth/service','./system.controller','get'];(function(_0x115480,_0x2a41b9){var _0x5d3fbd=function(_0x21cbe4){while(--_0x21cbe4){_0x115480['push'](_0x115480['shift']());}};_0x5d3fbd(++_0x2a41b9);}(_0x92bf,0x175));var _0xf92b=function(_0x6e6bed,_0x2685fc){_0x6e6bed=_0x6e6bed-0x0;var _0x4f6ce1=_0x92bf[_0x6e6bed];return _0x4f6ce1;};'use strict';var express=require(_0xf92b('0x0'));var router=express[_0xf92b('0x1')]();var auth=require(_0xf92b('0x2'));var controller=require(_0xf92b('0x3'));router[_0xf92b('0x4')]('/',auth[_0xf92b('0x5')](),controller[_0xf92b('0x6')]);router['get'](_0xf92b('0x7'),auth[_0xf92b('0x5')](),controller['killProcess']);module[_0xf92b('0x8')]=router;
\ No newline at end of file
+var _0x4dab=['get','isAuthenticated','index','/process/:pid/kill','killProcess','express','Router','./system.controller'];(function(_0x3bceea,_0x58af75){var _0x30a8d3=function(_0x1550b5){while(--_0x1550b5){_0x3bceea['push'](_0x3bceea['shift']());}};_0x30a8d3(++_0x58af75);}(_0x4dab,0x125));var _0xb4da=function(_0x30faee,_0x1c3794){_0x30faee=_0x30faee-0x0;var _0x3a90ab=_0x4dab[_0x30faee];return _0x3a90ab;};'use strict';var express=require(_0xb4da('0x0'));var router=express[_0xb4da('0x1')]();var auth=require('../../components/auth/service');var controller=require(_0xb4da('0x2'));router[_0xb4da('0x3')]('/',auth[_0xb4da('0x4')](),controller[_0xb4da('0x5')]);router[_0xb4da('0x3')](_0xb4da('0x6'),auth[_0xb4da('0x4')](),controller[_0xb4da('0x7')]);module['exports']=router;
\ No newline at end of file
index 2525780..7a19961 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f4c=['../../config/logger','api','bluebird','lodash','error','<%-\x20name\x20%>,\x20%s,\x20%s,\x20%s','inspect','name','status','send','index','getAllData','then','json','catch','components/import/cm','format','ps\x20-p\x20%s\x20-ww\x20-o\x20args','params','pid','split','length','Process\x20with\x20pid\x20%s\x20not\x20found!','kill','SIGINT','child_process','exec'];(function(_0x58bd0f,_0x3209b){var _0x19b61e=function(_0x1359ad){while(--_0x1359ad){_0x58bd0f['push'](_0x58bd0f['shift']());}};_0x19b61e(++_0x3209b);}(_0x4f4c,0xf1));var _0xc4f4=function(_0x4c7b0b,_0x40cf75){_0x4c7b0b=_0x4c7b0b-0x0;var _0x1570fd=_0x4f4c[_0x4c7b0b];return _0x1570fd;};'use strict';var info=require('systeminformation');var exec=require(_0xc4f4('0x0'))[_0xc4f4('0x1')];var logger=require(_0xc4f4('0x2'))(_0xc4f4('0x3'));var util=require('util');var BPromise=require(_0xc4f4('0x4'));var _=require(_0xc4f4('0x5'));function handleError(_0x1b1930,_0x698f4e,_0x16d77f){_0x698f4e=_0x698f4e||0x1f4;return function(_0xb16bf7){logger[_0xc4f4('0x6')](_0xc4f4('0x7'),_0x16d77f,_0x698f4e,util[_0xc4f4('0x8')](_0xb16bf7,{'showHidden':![],'depth':null}));delete _0xb16bf7[_0xc4f4('0x9')];_0x1b1930[_0xc4f4('0xa')](_0x698f4e)[_0xc4f4('0xb')](_0xb16bf7);};}exports[_0xc4f4('0xc')]=function(_0xca1456,_0x1303f8){return info[_0xc4f4('0xd')]()[_0xc4f4('0xe')](function(_0x19e284){return _0x1303f8[_0xc4f4('0xa')](0xc8)[_0xc4f4('0xf')](_0x19e284);})[_0xc4f4('0x10')](function(_0x2c9180){return _0x1303f8['status'](0x1f4)['json'](_0x2c9180);});};exports['killProcess']=function(_0x423bf2,_0x2f5665){var _0x57dab8=[_0xc4f4('0x11')];return new BPromise(function(_0x282260,_0x1f3eff){return exec(util[_0xc4f4('0x12')](_0xc4f4('0x13'),_0x423bf2[_0xc4f4('0x14')][_0xc4f4('0x15')]),function(_0x2c73ba,_0x2f1dd0,_0x2d7144){if(_0x2c73ba){return _0x1f3eff(_0x2c73ba);}return _0x282260(_0x2f1dd0);});})[_0xc4f4('0xe')](function(_0x17df4a){var _0x432efd=![];var _0xc26210=_0x17df4a[_0xc4f4('0x16')](/\n/);for(var _0x2b2728=0x0,_0x408258=_0x57dab8[_0xc4f4('0x17')];_0x2b2728<_0x408258,_0x432efd===![];_0x2b2728+=0x1){if(_0x17df4a['indexOf'](_0x57dab8[_0x2b2728])>=0x0){_0x432efd=!![];}}if(!_0x432efd){throw new Error(util['format'](_0xc4f4('0x18'),_0x423bf2[_0xc4f4('0x14')]['pid']));}process[_0xc4f4('0x19')](_0x423bf2[_0xc4f4('0x14')][_0xc4f4('0x15')],_0xc4f4('0x1a'));return _0x2f5665[_0xc4f4('0xa')](0xc8)['json']({'message':util[_0xc4f4('0x12')]('Process\x20with\x20pid\x20%s\x20killed\x20correctly',_0x423bf2['params'][_0xc4f4('0x15')])});})[_0xc4f4('0x10')](handleError(_0x2f5665,null,'killProcess'));};
\ No newline at end of file
+var _0xdc08=['killProcess','components/import/cm','ps\x20-p\x20%s\x20-ww\x20-o\x20args','pid','split','length','indexOf','Process\x20with\x20pid\x20%s\x20not\x20found!','params','kill','Process\x20with\x20pid\x20%s\x20killed\x20correctly','child_process','exec','../../config/logger','util','bluebird','lodash','error','<%-\x20name\x20%>,\x20%s,\x20%s,\x20%s','inspect','name','status','send','index','getAllData','then','catch','json'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xdc08,0x1e7));var _0x8dc0=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0xdc08[_0x501510];return _0x1e6ee5;};'use strict';var info=require('systeminformation');var exec=require(_0x8dc0('0x0'))[_0x8dc0('0x1')];var logger=require(_0x8dc0('0x2'))('api');var util=require(_0x8dc0('0x3'));var BPromise=require(_0x8dc0('0x4'));var _=require(_0x8dc0('0x5'));function handleError(_0x2a5c52,_0x15795f,_0x5b436a){_0x15795f=_0x15795f||0x1f4;return function(_0x5c0393){logger[_0x8dc0('0x6')](_0x8dc0('0x7'),_0x5b436a,_0x15795f,util[_0x8dc0('0x8')](_0x5c0393,{'showHidden':![],'depth':null}));delete _0x5c0393[_0x8dc0('0x9')];_0x2a5c52[_0x8dc0('0xa')](_0x15795f)[_0x8dc0('0xb')](_0x5c0393);};}exports[_0x8dc0('0xc')]=function(_0x2e046d,_0x2c110d){return info[_0x8dc0('0xd')]()[_0x8dc0('0xe')](function(_0x35cbac){return _0x2c110d[_0x8dc0('0xa')](0xc8)['json'](_0x35cbac);})[_0x8dc0('0xf')](function(_0x3d5307){return _0x2c110d[_0x8dc0('0xa')](0x1f4)[_0x8dc0('0x10')](_0x3d5307);});};exports[_0x8dc0('0x11')]=function(_0x205a97,_0x4ef743){var _0x8aa3ac=[_0x8dc0('0x12')];return new BPromise(function(_0x39a927,_0x39d30b){return exec(util['format'](_0x8dc0('0x13'),_0x205a97['params'][_0x8dc0('0x14')]),function(_0x20a1d7,_0x291521,_0x2ab7d8){if(_0x20a1d7){return _0x39d30b(_0x20a1d7);}return _0x39a927(_0x291521);});})[_0x8dc0('0xe')](function(_0x4ec614){var _0x570d2d=![];var _0x3c50dc=_0x4ec614[_0x8dc0('0x15')](/\n/);for(var _0xed3132=0x0,_0x1efc0b=_0x8aa3ac[_0x8dc0('0x16')];_0xed3132<_0x1efc0b,_0x570d2d===![];_0xed3132+=0x1){if(_0x4ec614[_0x8dc0('0x17')](_0x8aa3ac[_0xed3132])>=0x0){_0x570d2d=!![];}}if(!_0x570d2d){throw new Error(util['format'](_0x8dc0('0x18'),_0x205a97[_0x8dc0('0x19')]['pid']));}process[_0x8dc0('0x1a')](_0x205a97[_0x8dc0('0x19')][_0x8dc0('0x14')],'SIGINT');return _0x4ef743[_0x8dc0('0xa')](0xc8)[_0x8dc0('0x10')]({'message':util['format'](_0x8dc0('0x1b'),_0x205a97[_0x8dc0('0x19')][_0x8dc0('0x14')])});})[_0x8dc0('0xf')](handleError(_0x4ef743,null,_0x8dc0('0x11')));};
\ No newline at end of file
index f2e02b5..e79d6b3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4fc2=['./tag.controller','get','index','isAuthenticated','show','post','create','put','update','delete','/:id','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x3fa6c1,_0x440c72){var _0x52a927=function(_0x205b5d){while(--_0x205b5d){_0x3fa6c1['push'](_0x3fa6c1['shift']());}};_0x52a927(++_0x440c72);}(_0x4fc2,0x111));var _0x24fc=function(_0x3527be,_0x113fdb){_0x3527be=_0x3527be-0x0;var _0x5c61b8=_0x4fc2[_0x3527be];return _0x5c61b8;};'use strict';var multer=require(_0x24fc('0x0'));var util=require(_0x24fc('0x1'));var path=require(_0x24fc('0x2'));var timeout=require(_0x24fc('0x3'));var express=require('express');var router=express[_0x24fc('0x4')]();var auth=require(_0x24fc('0x5'));var interaction=require(_0x24fc('0x6'));var config=require('../../config/environment');var controller=require(_0x24fc('0x7'));router[_0x24fc('0x8')]('/',auth['isAuthenticated'](),controller[_0x24fc('0x9')]);router[_0x24fc('0x8')]('/:id',auth[_0x24fc('0xa')](),controller[_0x24fc('0xb')]);router[_0x24fc('0xc')]('/',auth[_0x24fc('0xa')](),controller[_0x24fc('0xd')]);router[_0x24fc('0xe')]('/:id',auth[_0x24fc('0xa')](),controller[_0x24fc('0xf')]);router[_0x24fc('0x10')](_0x24fc('0x11'),auth[_0x24fc('0xa')](),controller[_0x24fc('0x12')]);module[_0x24fc('0x13')]=router;
\ No newline at end of file
+var _0x14a0=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','show','post','put','/:id','destroy','exports','util','path'];(function(_0x22bee0,_0x412ecb){var _0x2d295b=function(_0x59d4b5){while(--_0x59d4b5){_0x22bee0['push'](_0x22bee0['shift']());}};_0x2d295b(++_0x412ecb);}(_0x14a0,0x8e));var _0x014a=function(_0x46b248,_0x159c3c){_0x46b248=_0x46b248-0x0;var _0x213212=_0x14a0[_0x46b248];return _0x213212;};'use strict';var multer=require('multer');var util=require(_0x014a('0x0'));var path=require(_0x014a('0x1'));var timeout=require(_0x014a('0x2'));var express=require(_0x014a('0x3'));var router=express[_0x014a('0x4')]();var auth=require(_0x014a('0x5'));var interaction=require(_0x014a('0x6'));var config=require('../../config/environment');var controller=require('./tag.controller');router[_0x014a('0x7')]('/',auth[_0x014a('0x8')](),controller[_0x014a('0x9')]);router['get']('/:id',auth[_0x014a('0x8')](),controller[_0x014a('0xa')]);router[_0x014a('0xb')]('/',auth['isAuthenticated'](),controller['create']);router[_0x014a('0xc')]('/:id',auth['isAuthenticated'](),controller['update']);router['delete'](_0x014a('0xd'),auth['isAuthenticated'](),controller[_0x014a('0xe')]);module[_0x014a('0xf')]=router;
\ No newline at end of file
index e80334b..3b45753 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa4dd=['exports','STRING','name','#0091EA','sequelize'];(function(_0x49a57c,_0x2eb02c){var _0x4e0316=function(_0x37e2e5){while(--_0x37e2e5){_0x49a57c['push'](_0x49a57c['shift']());}};_0x4e0316(++_0x2eb02c);}(_0xa4dd,0x19e));var _0xda4d=function(_0xce1a87,_0x372c44){_0xce1a87=_0xce1a87-0x0;var _0x26669d=_0xa4dd[_0xce1a87];return _0x26669d;};'use strict';var Sequelize=require(_0xda4d('0x0'));module[_0xda4d('0x1')]={'name':{'type':Sequelize[_0xda4d('0x2')],'unique':_0xda4d('0x3'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'color':{'type':Sequelize[_0xda4d('0x2')],'defaultValue':_0xda4d('0x4')},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x2280=['name','STRING','sequelize','exports'];(function(_0x5438b7,_0x341ed5){var _0x498ff7=function(_0x84e943){while(--_0x84e943){_0x5438b7['push'](_0x5438b7['shift']());}};_0x498ff7(++_0x341ed5);}(_0x2280,0x176));var _0x0228=function(_0x212c01,_0x40c9eb){_0x212c01=_0x212c01-0x0;var _0x51d13b=_0x2280[_0x212c01];return _0x51d13b;};'use strict';var Sequelize=require(_0x0228('0x0'));module[_0x0228('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0x0228('0x2'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'color':{'type':Sequelize[_0x0228('0x3')],'defaultValue':'#0091EA'},'description':{'type':Sequelize[_0x0228('0x3')]}};
\ No newline at end of file
index 401bb54..1aafd23 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x687b=['rimraf','zip-dir','moment','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','../../config/utils','../../mysqldb','end','status','json','count','offset','limit','set','apply','reject','update','destroy','get','Tags','UserProfileResource','then','sendStatus','error','stack','name','send','index','Tag','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','sort','where','pick','filter','map','type','key','field','merge','options','includeAll','findAll','rows','catch','show','params','length','include','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','eml-format'];(function(_0x166c02,_0x5b3fd6){var _0x2d435f=function(_0x58d467){while(--_0x58d467){_0x166c02['push'](_0x166c02['shift']());}};_0x2d435f(++_0x5b3fd6);}(_0x687b,0x14a));var _0xb687=function(_0x1b3a9e,_0x3b6e29){_0x1b3a9e=_0x1b3a9e-0x0;var _0x53cdc2=_0x687b[_0x1b3a9e];return _0x53cdc2;};'use strict';var pdf=require(_0xb687('0x0'));var emlformat=require(_0xb687('0x1'));var rimraf=require(_0xb687('0x2'));var zipdir=require(_0xb687('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xb687('0x4'));var BPromise=require(_0xb687('0x5'));var Mustache=require(_0xb687('0x6'));var util=require(_0xb687('0x7'));var path=require(_0xb687('0x8'));var sox=require(_0xb687('0x9'));var csv=require(_0xb687('0xa'));var ejs=require(_0xb687('0xb'));var fs=require('fs');var _=require(_0xb687('0xc'));var squel=require(_0xb687('0xd'));var crypto=require('crypto');var jsforce=require(_0xb687('0xe'));var deskjs=require(_0xb687('0xf'));var toCsv=require('to-csv');var querystring=require(_0xb687('0x10'));var Papa=require(_0xb687('0x11'));var Redis=require(_0xb687('0x12'));var authService=require(_0xb687('0x13'));var qs=require(_0xb687('0x14'));var hardwareService=require(_0xb687('0x15'));var logger=require(_0xb687('0x16'))(_0xb687('0x17'));var utils=require(_0xb687('0x18'));var config=require('../../config/environment');var db=require(_0xb687('0x19'))['db'];function respondWithStatusCode(_0xbeb5cc,_0x3ca723){_0x3ca723=_0x3ca723||0xcc;return function(_0x12a0be){if(_0x12a0be){return _0xbeb5cc['sendStatus'](_0x3ca723);}return _0xbeb5cc['status'](_0x3ca723)[_0xb687('0x1a')]();};}function respondWithResult(_0x155ebe,_0x49e233){_0x49e233=_0x49e233||0xc8;return function(_0x108fd0){if(_0x108fd0){return _0x155ebe[_0xb687('0x1b')](_0x49e233)[_0xb687('0x1c')](_0x108fd0);}};}function respondWithFilteredResult(_0x30d502,_0x838dd4){return function(_0x3ab914){if(_0x3ab914){var _0x30622f=_0x3ab914[_0xb687('0x1d')],_0x141375=_0x838dd4[_0xb687('0x1e')],_0x263085=_0x838dd4['offset']+_0x838dd4[_0xb687('0x1f')],_0x2c7a18;if(_0x263085>=_0x30622f){_0x263085=_0x30622f;_0x2c7a18=0xc8;}else{_0x2c7a18=0xce;}_0x30d502[_0xb687('0x1b')](_0x2c7a18);return _0x30d502[_0xb687('0x20')]('Content-Range',_0x141375+'-'+_0x263085+'/'+_0x30622f)['json'](_0x3ab914);}return null;};}function patchUpdates(_0x12eff1){return function(_0x3a10ef){try{jsonpatch[_0xb687('0x21')](_0x3a10ef,_0x12eff1,!![]);}catch(_0x4b593b){return BPromise[_0xb687('0x22')](_0x4b593b);}return _0x3a10ef['save']();};}function saveUpdates(_0x1bd2bf,_0x243236){return function(_0x170dc0){if(_0x170dc0){return _0x170dc0[_0xb687('0x23')](_0x1bd2bf)['then'](function(_0x3a73d5){return _0x3a73d5;});}return null;};}function removeEntity(_0x58e83c,_0x335541){return function(_0x90e892){if(_0x90e892){return _0x90e892[_0xb687('0x24')]()['then'](function(){var _0x1dc06b=_0x90e892[_0xb687('0x25')]({'plain':!![]});var _0xa95e91=_0xb687('0x26');return db[_0xb687('0x27')][_0xb687('0x24')]({'where':{'type':_0xa95e91,'resourceId':_0x1dc06b['id']}})[_0xb687('0x28')](function(){return _0x90e892;});})[_0xb687('0x28')](function(){_0x58e83c['status'](0xcc)[_0xb687('0x1a')]();});}};}function handleEntityNotFound(_0x129347,_0x1c1585){return function(_0x1a0261){if(!_0x1a0261){_0x129347[_0xb687('0x29')](0x194);}return _0x1a0261;};}function handleError(_0x4136c9,_0x17ff2b){_0x17ff2b=_0x17ff2b||0x1f4;return function(_0x3cb2f2){logger[_0xb687('0x2a')](_0x3cb2f2[_0xb687('0x2b')]);if(_0x3cb2f2['name']){delete _0x3cb2f2[_0xb687('0x2c')];}_0x4136c9[_0xb687('0x1b')](_0x17ff2b)[_0xb687('0x2d')](_0x3cb2f2);};}exports[_0xb687('0x2e')]=function(_0x2e5c8d,_0x173c58){var _0x4e9a06={},_0x28b69a={},_0x5143af={'count':0x0,'rows':[]};var _0x360429=db[_0xb687('0x2f')][_0xb687('0x30')];_0x28b69a[_0xb687('0x31')]=_[_0xb687('0x32')](_0x360429);_0x28b69a[_0xb687('0x33')]=_[_0xb687('0x32')](_0x2e5c8d['query']);_0x28b69a[_0xb687('0x34')]=_[_0xb687('0x35')](_0x28b69a[_0xb687('0x31')],_0x28b69a[_0xb687('0x33')]);_0x4e9a06[_0xb687('0x36')]=_[_0xb687('0x35')](_0x28b69a[_0xb687('0x31')],qs[_0xb687('0x37')](_0x2e5c8d[_0xb687('0x33')][_0xb687('0x37')]));_0x4e9a06[_0xb687('0x36')]=_0x4e9a06['attributes']['length']?_0x4e9a06[_0xb687('0x36')]:_0x28b69a[_0xb687('0x31')];if(!_0x2e5c8d[_0xb687('0x33')][_0xb687('0x38')]('nolimit')){_0x4e9a06['limit']=qs[_0xb687('0x1f')](_0x2e5c8d[_0xb687('0x33')]['limit']);_0x4e9a06[_0xb687('0x1e')]=qs[_0xb687('0x1e')](_0x2e5c8d['query'][_0xb687('0x1e')]);}_0x4e9a06['order']=qs[_0xb687('0x39')](_0x2e5c8d[_0xb687('0x33')][_0xb687('0x39')]);_0x4e9a06[_0xb687('0x3a')]=qs[_0xb687('0x34')](_[_0xb687('0x3b')](_0x2e5c8d['query'],_0x28b69a[_0xb687('0x34')]));if(_0x2e5c8d[_0xb687('0x33')][_0xb687('0x3c')]){_0x4e9a06[_0xb687('0x3a')]=_['merge'](_0x4e9a06[_0xb687('0x3a')],{'$or':_[_0xb687('0x3d')](_0x360429,function(_0x1f1c88){if(_0x1f1c88[_0xb687('0x3e')][_0xb687('0x3f')]!=='VIRTUAL'){var _0x17ed43={};_0x17ed43[_0x1f1c88[_0xb687('0x40')]]={'$like':'%'+_0x2e5c8d[_0xb687('0x33')][_0xb687('0x3c')]+'%'};return _0x17ed43;}})});}_0x4e9a06=_[_0xb687('0x41')]({},_0x4e9a06,_0x2e5c8d[_0xb687('0x42')]);var _0x572b5a={'where':_0x4e9a06['where']};return db[_0xb687('0x2f')]['count'](_0x572b5a)[_0xb687('0x28')](function(_0x2f4550){_0x5143af['count']=_0x2f4550;if(_0x2e5c8d[_0xb687('0x33')][_0xb687('0x43')]){_0x4e9a06['include']=[{'all':!![]}];}return db[_0xb687('0x2f')][_0xb687('0x44')](_0x4e9a06);})[_0xb687('0x28')](function(_0x5253df){_0x5143af[_0xb687('0x45')]=_0x5253df;return _0x5143af;})[_0xb687('0x28')](respondWithFilteredResult(_0x173c58,_0x4e9a06))[_0xb687('0x46')](handleError(_0x173c58,null));};exports[_0xb687('0x47')]=function(_0x140388,_0x1375f7){var _0x21b9ef={'raw':!![],'where':{'id':_0x140388[_0xb687('0x48')]['id']}},_0x4bb665={};_0x4bb665['model']=_['keys'](db[_0xb687('0x2f')][_0xb687('0x30')]);_0x4bb665['query']=_[_0xb687('0x32')](_0x140388['query']);_0x4bb665[_0xb687('0x34')]=_[_0xb687('0x35')](_0x4bb665['model'],_0x4bb665[_0xb687('0x33')]);_0x21b9ef[_0xb687('0x36')]=_['intersection'](_0x4bb665[_0xb687('0x31')],qs[_0xb687('0x37')](_0x140388[_0xb687('0x33')][_0xb687('0x37')]));_0x21b9ef[_0xb687('0x36')]=_0x21b9ef[_0xb687('0x36')][_0xb687('0x49')]?_0x21b9ef[_0xb687('0x36')]:_0x4bb665[_0xb687('0x31')];if(_0x140388[_0xb687('0x33')][_0xb687('0x43')]){_0x21b9ef[_0xb687('0x4a')]=[{'all':!![]}];}_0x21b9ef=_['merge']({},_0x21b9ef,_0x140388[_0xb687('0x42')]);return db['Tag'][_0xb687('0x4b')](_0x21b9ef)[_0xb687('0x28')](handleEntityNotFound(_0x1375f7,null))[_0xb687('0x28')](respondWithResult(_0x1375f7,null))[_0xb687('0x46')](handleError(_0x1375f7,null));};exports[_0xb687('0x4c')]=function(_0x3ff178,_0x49c2da){return db['Tag'][_0xb687('0x4c')](_0x3ff178[_0xb687('0x4d')],{})[_0xb687('0x28')](function(_0x4f3069){var _0x4f5736=_0x3ff178[_0xb687('0x4e')][_0xb687('0x25')]({'plain':!![]});if(!_0x4f5736)throw new Error(_0xb687('0x4f'));if(_0x4f5736[_0xb687('0x50')]==='user'){var _0x33a0b0=_0x4f3069[_0xb687('0x25')]({'plain':!![]});var _0x162b19=_0xb687('0x26');return db['UserProfileSection']['find']({'where':{'name':_0x162b19,'userProfileId':_0x4f5736[_0xb687('0x51')]},'raw':!![]})[_0xb687('0x28')](function(_0x42b61a){if(_0x42b61a&&_0x42b61a['autoAssociation']===0x0){return db['UserProfileResource'][_0xb687('0x4c')]({'name':_0x33a0b0[_0xb687('0x2c')],'resourceId':_0x33a0b0['id'],'type':_0x42b61a[_0xb687('0x2c')],'sectionId':_0x42b61a['id']},{})[_0xb687('0x28')](function(){return _0x4f3069;});}else{return _0x4f3069;}})[_0xb687('0x46')](function(_0x1fb31a){logger[_0xb687('0x2a')](_0xb687('0x52'),_0x1fb31a);throw _0x1fb31a;});}return _0x4f3069;})['then'](respondWithResult(_0x49c2da,0xc9))[_0xb687('0x46')](handleError(_0x49c2da,null));};exports[_0xb687('0x23')]=function(_0x2342f6,_0x4f5784){if(_0x2342f6['body']['id']){delete _0x2342f6['body']['id'];}return db['Tag'][_0xb687('0x4b')]({'where':{'id':_0x2342f6[_0xb687('0x48')]['id']}})[_0xb687('0x28')](handleEntityNotFound(_0x4f5784,null))[_0xb687('0x28')](saveUpdates(_0x2342f6[_0xb687('0x4d')],null))[_0xb687('0x28')](respondWithResult(_0x4f5784,null))[_0xb687('0x46')](handleError(_0x4f5784,null));};exports[_0xb687('0x24')]=function(_0x44ffc0,_0x13e47b){return db[_0xb687('0x2f')][_0xb687('0x4b')]({'where':{'id':_0x44ffc0[_0xb687('0x48')]['id']}})[_0xb687('0x28')](handleEntityNotFound(_0x13e47b,null))[_0xb687('0x28')](removeEntity(_0x13e47b,null))[_0xb687('0x46')](handleError(_0x13e47b,null));};
\ No newline at end of file
+var _0x4819=['rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','type','key','VIRTUAL','field','options','include','findAll','rows','show','params','includeAll','merge','find','catch','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','squel','crypto','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','apply','reject','save','update','then','destroy','get','Tags','UserProfileResource','sendStatus','stack','name','send','Tag'];(function(_0x2bf42b,_0x567413){var _0x4aa317=function(_0x3b7ffe){while(--_0x3b7ffe){_0x2bf42b['push'](_0x2bf42b['shift']());}};_0x4aa317(++_0x567413);}(_0x4819,0xcd));var _0x9481=function(_0x26dd96,_0x1e70a6){_0x26dd96=_0x26dd96-0x0;var _0x1aa18f=_0x4819[_0x26dd96];return _0x1aa18f;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x9481('0x0'));var rimraf=require(_0x9481('0x1'));var zipdir=require(_0x9481('0x2'));var jsonpatch=require(_0x9481('0x3'));var rp=require(_0x9481('0x4'));var moment=require(_0x9481('0x5'));var BPromise=require(_0x9481('0x6'));var Mustache=require(_0x9481('0x7'));var util=require(_0x9481('0x8'));var path=require(_0x9481('0x9'));var sox=require('sox');var csv=require(_0x9481('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x9481('0xb'));var crypto=require(_0x9481('0xc'));var jsforce=require(_0x9481('0xd'));var deskjs=require(_0x9481('0xe'));var toCsv=require(_0x9481('0xa'));var querystring=require('querystring');var Papa=require(_0x9481('0xf'));var Redis=require('ioredis');var authService=require(_0x9481('0x10'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x9481('0x11'));var logger=require(_0x9481('0x12'))(_0x9481('0x13'));var utils=require(_0x9481('0x14'));var config=require(_0x9481('0x15'));var db=require(_0x9481('0x16'))['db'];function respondWithStatusCode(_0xa38c93,_0xe410c3){_0xe410c3=_0xe410c3||0xcc;return function(_0xed8e9){if(_0xed8e9){return _0xa38c93['sendStatus'](_0xe410c3);}return _0xa38c93['status'](_0xe410c3)[_0x9481('0x17')]();};}function respondWithResult(_0x150276,_0x2f0032){_0x2f0032=_0x2f0032||0xc8;return function(_0x28fcb6){if(_0x28fcb6){return _0x150276[_0x9481('0x18')](_0x2f0032)[_0x9481('0x19')](_0x28fcb6);}};}function respondWithFilteredResult(_0x3fb97f,_0x495b30){return function(_0x4220f1){if(_0x4220f1){var _0x7a7ee=_0x4220f1[_0x9481('0x1a')],_0x5b1fe6=_0x495b30[_0x9481('0x1b')],_0x2266d5=_0x495b30[_0x9481('0x1b')]+_0x495b30[_0x9481('0x1c')],_0x518150;if(_0x2266d5>=_0x7a7ee){_0x2266d5=_0x7a7ee;_0x518150=0xc8;}else{_0x518150=0xce;}_0x3fb97f['status'](_0x518150);return _0x3fb97f['set'](_0x9481('0x1d'),_0x5b1fe6+'-'+_0x2266d5+'/'+_0x7a7ee)['json'](_0x4220f1);}return null;};}function patchUpdates(_0x4d0da7){return function(_0x26671c){try{jsonpatch[_0x9481('0x1e')](_0x26671c,_0x4d0da7,!![]);}catch(_0x18c6f5){return BPromise[_0x9481('0x1f')](_0x18c6f5);}return _0x26671c[_0x9481('0x20')]();};}function saveUpdates(_0x3dc33f,_0x55a1bd){return function(_0x2cf1aa){if(_0x2cf1aa){return _0x2cf1aa[_0x9481('0x21')](_0x3dc33f)[_0x9481('0x22')](function(_0x615e02){return _0x615e02;});}return null;};}function removeEntity(_0xb5cd2c,_0x56da97){return function(_0x215dd7){if(_0x215dd7){return _0x215dd7[_0x9481('0x23')]()['then'](function(){var _0x2bcf37=_0x215dd7[_0x9481('0x24')]({'plain':!![]});var _0x352b3a=_0x9481('0x25');return db[_0x9481('0x26')]['destroy']({'where':{'type':_0x352b3a,'resourceId':_0x2bcf37['id']}})[_0x9481('0x22')](function(){return _0x215dd7;});})[_0x9481('0x22')](function(){_0xb5cd2c['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x12b0c3,_0x299e28){return function(_0x550fce){if(!_0x550fce){_0x12b0c3[_0x9481('0x27')](0x194);}return _0x550fce;};}function handleError(_0x20ff9a,_0xeff0a5){_0xeff0a5=_0xeff0a5||0x1f4;return function(_0x28ae1b){logger['error'](_0x28ae1b[_0x9481('0x28')]);if(_0x28ae1b[_0x9481('0x29')]){delete _0x28ae1b[_0x9481('0x29')];}_0x20ff9a['status'](_0xeff0a5)[_0x9481('0x2a')](_0x28ae1b);};}exports['index']=function(_0x2e1eff,_0xe153ab){var _0x22ab26={},_0x13ef93={},_0x2e5e63={'count':0x0,'rows':[]};var _0x53560d=db[_0x9481('0x2b')][_0x9481('0x2c')];_0x13ef93[_0x9481('0x2d')]=_['keys'](_0x53560d);_0x13ef93['query']=_[_0x9481('0x2e')](_0x2e1eff[_0x9481('0x2f')]);_0x13ef93[_0x9481('0x30')]=_[_0x9481('0x31')](_0x13ef93['model'],_0x13ef93['query']);_0x22ab26['attributes']=_[_0x9481('0x31')](_0x13ef93['model'],qs[_0x9481('0x32')](_0x2e1eff['query'][_0x9481('0x32')]));_0x22ab26[_0x9481('0x33')]=_0x22ab26[_0x9481('0x33')][_0x9481('0x34')]?_0x22ab26[_0x9481('0x33')]:_0x13ef93['model'];if(!_0x2e1eff[_0x9481('0x2f')][_0x9481('0x35')](_0x9481('0x36'))){_0x22ab26['limit']=qs[_0x9481('0x1c')](_0x2e1eff[_0x9481('0x2f')][_0x9481('0x1c')]);_0x22ab26[_0x9481('0x1b')]=qs[_0x9481('0x1b')](_0x2e1eff[_0x9481('0x2f')]['offset']);}_0x22ab26[_0x9481('0x37')]=qs['sort'](_0x2e1eff[_0x9481('0x2f')][_0x9481('0x38')]);_0x22ab26[_0x9481('0x39')]=qs[_0x9481('0x30')](_[_0x9481('0x3a')](_0x2e1eff[_0x9481('0x2f')],_0x13ef93['filters']));if(_0x2e1eff[_0x9481('0x2f')][_0x9481('0x3b')]){_0x22ab26['where']=_['merge'](_0x22ab26[_0x9481('0x39')],{'$or':_['map'](_0x53560d,function(_0x224b88){if(_0x224b88[_0x9481('0x3c')][_0x9481('0x3d')]!==_0x9481('0x3e')){var _0x50667a={};_0x50667a[_0x224b88[_0x9481('0x3f')]]={'$like':'%'+_0x2e1eff['query'][_0x9481('0x3b')]+'%'};return _0x50667a;}})});}_0x22ab26=_['merge']({},_0x22ab26,_0x2e1eff[_0x9481('0x40')]);var _0x4d6a13={'where':_0x22ab26[_0x9481('0x39')]};return db[_0x9481('0x2b')][_0x9481('0x1a')](_0x4d6a13)[_0x9481('0x22')](function(_0x97dc3e){_0x2e5e63[_0x9481('0x1a')]=_0x97dc3e;if(_0x2e1eff[_0x9481('0x2f')]['includeAll']){_0x22ab26[_0x9481('0x41')]=[{'all':!![]}];}return db[_0x9481('0x2b')][_0x9481('0x42')](_0x22ab26);})[_0x9481('0x22')](function(_0x3f1b6f){_0x2e5e63[_0x9481('0x43')]=_0x3f1b6f;return _0x2e5e63;})[_0x9481('0x22')](respondWithFilteredResult(_0xe153ab,_0x22ab26))['catch'](handleError(_0xe153ab,null));};exports[_0x9481('0x44')]=function(_0x1872ff,_0x4b6fe0){var _0x704e81={'raw':!![],'where':{'id':_0x1872ff[_0x9481('0x45')]['id']}},_0x1a699e={};_0x1a699e[_0x9481('0x2d')]=_[_0x9481('0x2e')](db['Tag'][_0x9481('0x2c')]);_0x1a699e['query']=_[_0x9481('0x2e')](_0x1872ff[_0x9481('0x2f')]);_0x1a699e['filters']=_['intersection'](_0x1a699e[_0x9481('0x2d')],_0x1a699e[_0x9481('0x2f')]);_0x704e81[_0x9481('0x33')]=_['intersection'](_0x1a699e[_0x9481('0x2d')],qs[_0x9481('0x32')](_0x1872ff['query']['fields']));_0x704e81[_0x9481('0x33')]=_0x704e81['attributes'][_0x9481('0x34')]?_0x704e81[_0x9481('0x33')]:_0x1a699e[_0x9481('0x2d')];if(_0x1872ff[_0x9481('0x2f')][_0x9481('0x46')]){_0x704e81['include']=[{'all':!![]}];}_0x704e81=_[_0x9481('0x47')]({},_0x704e81,_0x1872ff[_0x9481('0x40')]);return db['Tag'][_0x9481('0x48')](_0x704e81)[_0x9481('0x22')](handleEntityNotFound(_0x4b6fe0,null))[_0x9481('0x22')](respondWithResult(_0x4b6fe0,null))[_0x9481('0x49')](handleError(_0x4b6fe0,null));};exports[_0x9481('0x4a')]=function(_0x3929a8,_0x3a1bee){return db[_0x9481('0x2b')][_0x9481('0x4a')](_0x3929a8['body'],{})[_0x9481('0x22')](function(_0x5d3a06){var _0x5c4d18=_0x3929a8[_0x9481('0x4b')]['get']({'plain':!![]});if(!_0x5c4d18)throw new Error(_0x9481('0x4c'));if(_0x5c4d18[_0x9481('0x4d')]==='user'){var _0x277e2a=_0x5d3a06[_0x9481('0x24')]({'plain':!![]});var _0x2f3413=_0x9481('0x25');return db[_0x9481('0x4e')][_0x9481('0x48')]({'where':{'name':_0x2f3413,'userProfileId':_0x5c4d18['userProfileId']},'raw':!![]})['then'](function(_0x424b22){if(_0x424b22&&_0x424b22[_0x9481('0x4f')]===0x0){return db[_0x9481('0x26')][_0x9481('0x4a')]({'name':_0x277e2a[_0x9481('0x29')],'resourceId':_0x277e2a['id'],'type':_0x424b22[_0x9481('0x29')],'sectionId':_0x424b22['id']},{})[_0x9481('0x22')](function(){return _0x5d3a06;});}else{return _0x5d3a06;}})[_0x9481('0x49')](function(_0x580273){logger[_0x9481('0x50')](_0x9481('0x51'),_0x580273);throw _0x580273;});}return _0x5d3a06;})[_0x9481('0x22')](respondWithResult(_0x3a1bee,0xc9))[_0x9481('0x49')](handleError(_0x3a1bee,null));};exports[_0x9481('0x21')]=function(_0x5ee59e,_0x4c3048){if(_0x5ee59e[_0x9481('0x52')]['id']){delete _0x5ee59e[_0x9481('0x52')]['id'];}return db[_0x9481('0x2b')]['find']({'where':{'id':_0x5ee59e['params']['id']}})['then'](handleEntityNotFound(_0x4c3048,null))['then'](saveUpdates(_0x5ee59e['body'],null))['then'](respondWithResult(_0x4c3048,null))['catch'](handleError(_0x4c3048,null));};exports[_0x9481('0x23')]=function(_0x136bd8,_0x588f7a){return db[_0x9481('0x2b')]['find']({'where':{'id':_0x136bd8[_0x9481('0x45')]['id']}})[_0x9481('0x22')](handleEntityNotFound(_0x588f7a,null))[_0x9481('0x22')](removeEntity(_0x588f7a,null))[_0x9481('0x49')](handleError(_0x588f7a,null));};
\ No newline at end of file
index fe6aa70..10bfcad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x38f8=['rimraf','../../config/environment','./tag.attributes','Tag','lodash','util','../../config/logger','api','moment','bluebird','path'];(function(_0x304107,_0xa47eaf){var _0x43d4af=function(_0x1d88b8){while(--_0x1d88b8){_0x304107['push'](_0x304107['shift']());}};_0x43d4af(++_0xa47eaf);}(_0x38f8,0x19b));var _0x838f=function(_0xe8eede,_0x4d2e8a){_0xe8eede=_0xe8eede-0x0;var _0x286fc2=_0x38f8[_0xe8eede];return _0x286fc2;};'use strict';var _=require(_0x838f('0x0'));var util=require(_0x838f('0x1'));var logger=require(_0x838f('0x2'))(_0x838f('0x3'));var moment=require(_0x838f('0x4'));var BPromise=require(_0x838f('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x838f('0x6'));var rimraf=require(_0x838f('0x7'));var config=require(_0x838f('0x8'));var attributes=require(_0x838f('0x9'));module['exports']=function(_0x32c1d4,_0x1ffdf8){return _0x32c1d4['define'](_0x838f('0xa'),attributes,{'tableName':'tools_tags','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x357d=['util','../../config/logger','api','moment','bluebird','rimraf','../../config/environment','Tag','tools_tags'];(function(_0x4d6499,_0x284028){var _0x47bc0d=function(_0x213e99){while(--_0x213e99){_0x4d6499['push'](_0x4d6499['shift']());}};_0x47bc0d(++_0x284028);}(_0x357d,0x19e));var _0xd357=function(_0x4c884a,_0x5dce58){_0x4c884a=_0x4c884a-0x0;var _0x168037=_0x357d[_0x4c884a];return _0x168037;};'use strict';var _=require('lodash');var util=require(_0xd357('0x0'));var logger=require(_0xd357('0x1'))(_0xd357('0x2'));var moment=require(_0xd357('0x3'));var BPromise=require(_0xd357('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0xd357('0x5'));var config=require(_0xd357('0x6'));var attributes=require('./tag.attributes');module['exports']=function(_0x3616d2,_0x5443da){return _0x3616d2['define'](_0xd357('0x7'),attributes,{'tableName':_0xd357('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ed09750..b6a7793 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6dfb=['request\x20sent','error','code','message','result','catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','request','info','Tag,\x20%s,\x20%s','debug'];(function(_0x5dda2d,_0x246296){var _0x2ad9d4=function(_0x318457){while(--_0x318457){_0x5dda2d['push'](_0x5dda2d['shift']());}};_0x2ad9d4(++_0x246296);}(_0x6dfb,0x1e9));var _0xb6df=function(_0x300d90,_0xa7a4a4){_0x300d90=_0x300d90-0x0;var _0x56e9f5=_0x6dfb[_0x300d90];return _0x56e9f5;};'use strict';var _=require(_0xb6df('0x0'));var util=require(_0xb6df('0x1'));var moment=require(_0xb6df('0x2'));var BPromise=require('bluebird');var rs=require(_0xb6df('0x3'));var fs=require('fs');var Redis=require(_0xb6df('0x4'));var db=require(_0xb6df('0x5'))['db'];var utils=require(_0xb6df('0x6'));var logger=require(_0xb6df('0x7'))(_0xb6df('0x8'));var config=require(_0xb6df('0x9'));var jayson=require(_0xb6df('0xa'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x6d6442,_0x37ad36,_0x3dffc7){return new BPromise(function(_0x1ba423,_0x5a7cbc){return client[_0xb6df('0xb')](_0x6d6442,_0x3dffc7)['then'](function(_0x561402){logger[_0xb6df('0xc')](_0xb6df('0xd'),_0x37ad36,'request\x20sent');logger[_0xb6df('0xe')]('Tag,\x20%s,\x20%s,\x20%s',_0x37ad36,_0xb6df('0xf'),JSON['stringify'](_0x561402));if(_0x561402[_0xb6df('0x10')]){if(_0x561402['error'][_0xb6df('0x11')]===0x1f4){logger[_0xb6df('0x10')](_0xb6df('0xd'),_0x37ad36,_0x561402[_0xb6df('0x10')][_0xb6df('0x12')]);return _0x5a7cbc(_0x561402[_0xb6df('0x10')][_0xb6df('0x12')]);}logger[_0xb6df('0x10')]('Tag,\x20%s,\x20%s',_0x37ad36,_0x561402['error'][_0xb6df('0x12')]);return _0x1ba423(_0x561402[_0xb6df('0x10')]['message']);}else{logger[_0xb6df('0xc')]('Tag,\x20%s,\x20%s',_0x37ad36,_0xb6df('0xf'));_0x1ba423(_0x561402[_0xb6df('0x13')][_0xb6df('0x12')]);}})[_0xb6df('0x14')](function(_0x2db6d2){logger[_0xb6df('0x10')]('Tag,\x20%s,\x20%s',_0x37ad36,_0x2db6d2);_0x5a7cbc(_0x2db6d2);});});}
\ No newline at end of file
+var _0x3b69=['info','Tag,\x20%s,\x20%s','request\x20sent','debug','Tag,\x20%s,\x20%s,\x20%s','error','message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','rpc','jayson/promise','http','request'];(function(_0x51bf07,_0x458a05){var _0x13ed88=function(_0x34310a){while(--_0x34310a){_0x51bf07['push'](_0x51bf07['shift']());}};_0x13ed88(++_0x458a05);}(_0x3b69,0xd1));var _0x93b6=function(_0x25912f,_0x4b42bb){_0x25912f=_0x25912f-0x0;var _0x3b3cb5=_0x3b69[_0x25912f];return _0x3b3cb5;};'use strict';var _=require(_0x93b6('0x0'));var util=require(_0x93b6('0x1'));var moment=require(_0x93b6('0x2'));var BPromise=require(_0x93b6('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x93b6('0x4'));var db=require(_0x93b6('0x5'))['db'];var utils=require(_0x93b6('0x6'));var logger=require('../../config/logger')(_0x93b6('0x7'));var config=require('../../config/environment');var jayson=require(_0x93b6('0x8'));var client=jayson['client'][_0x93b6('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x33d771,_0x54fbeb,_0xf79042){return new BPromise(function(_0x411c6b,_0x4d1a02){return client[_0x93b6('0xa')](_0x33d771,_0xf79042)['then'](function(_0x386853){logger[_0x93b6('0xb')](_0x93b6('0xc'),_0x54fbeb,_0x93b6('0xd'));logger[_0x93b6('0xe')](_0x93b6('0xf'),_0x54fbeb,'request\x20sent',JSON['stringify'](_0x386853));if(_0x386853[_0x93b6('0x10')]){if(_0x386853[_0x93b6('0x10')]['code']===0x1f4){logger[_0x93b6('0x10')]('Tag,\x20%s,\x20%s',_0x54fbeb,_0x386853['error'][_0x93b6('0x11')]);return _0x4d1a02(_0x386853['error'][_0x93b6('0x11')]);}logger[_0x93b6('0x10')](_0x93b6('0xc'),_0x54fbeb,_0x386853['error']['message']);return _0x411c6b(_0x386853[_0x93b6('0x10')][_0x93b6('0x11')]);}else{logger[_0x93b6('0xb')]('Tag,\x20%s,\x20%s',_0x54fbeb,_0x93b6('0xd'));_0x411c6b(_0x386853[_0x93b6('0x12')][_0x93b6('0x11')]);}})[_0x93b6('0x13')](function(_0x31cfed){logger[_0x93b6('0x10')](_0x93b6('0xc'),_0x54fbeb,_0x31cfed);_0x4d1a02(_0x31cfed);});});}
\ No newline at end of file
index b43a1fb..908b32c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x025a=['./team.controller','get','isAuthenticated','index','/:id','show','/:id/users','getAgents','post','/:id/queues','addQueues','addAgents','put','delete','destroy','removeQueues','removeAgents','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x4d20a4,_0x2b1d77){var _0x40ec80=function(_0x17c8dd){while(--_0x17c8dd){_0x4d20a4['push'](_0x4d20a4['shift']());}};_0x40ec80(++_0x2b1d77);}(_0x025a,0x1af));var _0xa025=function(_0x152405,_0x5e8952){_0x152405=_0x152405-0x0;var _0x46647a=_0x025a[_0x152405];return _0x46647a;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xa025('0x0'));var timeout=require(_0xa025('0x1'));var express=require(_0xa025('0x2'));var router=express['Router']();var auth=require(_0xa025('0x3'));var interaction=require(_0xa025('0x4'));var config=require(_0xa025('0x5'));var controller=require(_0xa025('0x6'));router[_0xa025('0x7')]('/',auth[_0xa025('0x8')](),controller[_0xa025('0x9')]);router['get'](_0xa025('0xa'),auth[_0xa025('0x8')](),controller[_0xa025('0xb')]);router['get']('/:id/queues',auth[_0xa025('0x8')](),controller['getQueues']);router[_0xa025('0x7')](_0xa025('0xc'),auth[_0xa025('0x8')](),controller[_0xa025('0xd')]);router[_0xa025('0xe')]('/',auth[_0xa025('0x8')](),controller['create']);router[_0xa025('0xe')](_0xa025('0xf'),auth[_0xa025('0x8')](),controller[_0xa025('0x10')]);router[_0xa025('0xe')](_0xa025('0xc'),auth[_0xa025('0x8')](),controller[_0xa025('0x11')]);router[_0xa025('0x12')](_0xa025('0xa'),auth['isAuthenticated'](),controller['update']);router[_0xa025('0x13')](_0xa025('0xa'),auth[_0xa025('0x8')](),controller[_0xa025('0x14')]);router['delete'](_0xa025('0xf'),auth[_0xa025('0x8')](),controller[_0xa025('0x15')]);router['delete'](_0xa025('0xc'),auth[_0xa025('0x8')](),controller[_0xa025('0x16')]);module['exports']=router;
\ No newline at end of file
+var _0x3944=['getAgents','post','create','addQueues','addAgents','put','update','delete','removeQueues','removeAgents','exports','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','index','get','/:id','isAuthenticated','/:id/queues','getQueues','/:id/users'];(function(_0xf13f3e,_0x40dcc6){var _0x448a12=function(_0x20b1dc){while(--_0x20b1dc){_0xf13f3e['push'](_0xf13f3e['shift']());}};_0x448a12(++_0x40dcc6);}(_0x3944,0x17b));var _0x4394=function(_0x143c20,_0x37921e){_0x143c20=_0x143c20-0x0;var _0x1ef606=_0x3944[_0x143c20];return _0x1ef606;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var timeout=require(_0x4394('0x0'));var express=require(_0x4394('0x1'));var router=express[_0x4394('0x2')]();var auth=require(_0x4394('0x3'));var interaction=require(_0x4394('0x4'));var config=require('../../config/environment');var controller=require('./team.controller');router['get']('/',auth['isAuthenticated'](),controller[_0x4394('0x5')]);router[_0x4394('0x6')](_0x4394('0x7'),auth[_0x4394('0x8')](),controller['show']);router['get'](_0x4394('0x9'),auth[_0x4394('0x8')](),controller[_0x4394('0xa')]);router[_0x4394('0x6')](_0x4394('0xb'),auth[_0x4394('0x8')](),controller[_0x4394('0xc')]);router[_0x4394('0xd')]('/',auth[_0x4394('0x8')](),controller[_0x4394('0xe')]);router[_0x4394('0xd')](_0x4394('0x9'),auth['isAuthenticated'](),controller[_0x4394('0xf')]);router[_0x4394('0xd')](_0x4394('0xb'),auth[_0x4394('0x8')](),controller[_0x4394('0x10')]);router[_0x4394('0x11')]('/:id',auth[_0x4394('0x8')](),controller[_0x4394('0x12')]);router['delete']('/:id',auth[_0x4394('0x8')](),controller['destroy']);router[_0x4394('0x13')](_0x4394('0x9'),auth[_0x4394('0x8')](),controller[_0x4394('0x14')]);router[_0x4394('0x13')](_0x4394('0xb'),auth[_0x4394('0x8')](),controller[_0x4394('0x15')]);module[_0x4394('0x16')]=router;
\ No newline at end of file
index 2c923cd..4c9b0e0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x355b=['STRING','name','sequelize','exports'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x355b,0x1f2));var _0xb355=function(_0x1fba63,_0x3aa036){_0x1fba63=_0x1fba63-0x0;var _0x2a188d=_0x355b[_0x1fba63];return _0x2a188d;};'use strict';var Sequelize=require(_0xb355('0x0'));module[_0xb355('0x1')]={'name':{'type':Sequelize[_0xb355('0x2')],'allowNull':![],'unique':_0xb355('0x3')},'description':{'type':Sequelize[_0xb355('0x2')]}};
\ No newline at end of file
+var _0x4e96=['exports','STRING','sequelize'];(function(_0x147b8f,_0x33e86c){var _0x457712=function(_0x577757){while(--_0x577757){_0x147b8f['push'](_0x147b8f['shift']());}};_0x457712(++_0x33e86c);}(_0x4e96,0x1ac));var _0x64e9=function(_0x10e0ce,_0x13fa6a){_0x10e0ce=_0x10e0ce-0x0;var _0x5b054b=_0x4e96[_0x10e0ce];return _0x5b054b;};'use strict';var Sequelize=require(_0x64e9('0x0'));module[_0x64e9('0x1')]={'name':{'type':Sequelize[_0x64e9('0x2')],'allowNull':![],'unique':'name'},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 283962a..cd2780d 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(_0x4babde,_0x51433d){var _0x205f37=function(_0x14b208){while(--_0x14b208){_0x4babde['push'](_0x4babde['shift']());}};_0x205f37(++_0x51433d);}(_0xa9e0,0x123));var _0x0a9e=function(_0x43d11d,_0xccff91){_0x43d11d=_0x43d11d-0x0;var _0x38cd08=_0xa9e0[_0x43d11d];return _0x38cd08;};'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(_0x4fd27b,_0x16905f){var _0x3e5b4d=function(_0x480241){while(--_0x480241){_0x4fd27b['push'](_0x4fd27b['shift']());}};_0x3e5b4d(++_0x16905f);}(_0xa9e0,0x123));var _0x0a9e=function(_0x373dee,_0x1a8c45){_0x373dee=_0x373dee-0x0;var _0x46798f=_0xa9e0[_0x373dee];return _0x46798f;};'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 3205212..dae4d5d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4317=['remove','hasOwnProperty','hook','exports','../../mysqldb','Team','setMaxListeners','update'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x4317,0x7c));var _0x7431=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0x4317[_0x3947c9];return _0x2e7871;};'use strict';var EventEmitter=require('events');var Team=require(_0x7431('0x0'))['db'][_0x7431('0x1')];var TeamEvents=new EventEmitter();TeamEvents[_0x7431('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0x7431('0x3'),'afterDestroy':_0x7431('0x4')};function emitEvent(_0x290b11){return function(_0xa4197b,_0x12c492,_0x201287){TeamEvents['emit'](_0x290b11+':'+_0xa4197b['id'],_0xa4197b);TeamEvents['emit'](_0x290b11,_0xa4197b);_0x201287(null);};}for(var e in events){if(events[_0x7431('0x5')](e)){var event=events[e];Team[_0x7431('0x6')](e,emitEvent(event));}}module[_0x7431('0x7')]=TeamEvents;
\ No newline at end of file
+var _0x4325=['hasOwnProperty','exports','events','../../mysqldb','setMaxListeners','save','update','emit'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x4325,0x1da));var _0x5432=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0x4325[_0x2641f9];return _0x585741;};'use strict';var EventEmitter=require(_0x5432('0x0'));var Team=require(_0x5432('0x1'))['db']['Team'];var TeamEvents=new EventEmitter();TeamEvents[_0x5432('0x2')](0x0);var events={'afterCreate':_0x5432('0x3'),'afterUpdate':_0x5432('0x4'),'afterDestroy':'remove'};function emitEvent(_0x4fc4e9){return function(_0x20f704,_0x36ce53,_0xad26e9){TeamEvents['emit'](_0x4fc4e9+':'+_0x20f704['id'],_0x20f704);TeamEvents[_0x5432('0x5')](_0x4fc4e9,_0x20f704);_0xad26e9(null);};}for(var e in events){if(events[_0x5432('0x6')](e)){var event=events[e];Team['hook'](e,emitEvent(event));}}module[_0x5432('0x7')]=TeamEvents;
\ No newline at end of file
index 334c3a7..b6587b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa264=['path','rimraf','../../config/environment','./team.attributes','exports','define','Team','teams','lodash','../../config/logger','api','moment','bluebird','request-promise'];(function(_0xbac9d,_0xdfa043){var _0x1febf1=function(_0x157e39){while(--_0x157e39){_0xbac9d['push'](_0xbac9d['shift']());}};_0x1febf1(++_0xdfa043);}(_0xa264,0xda));var _0x4a26=function(_0x2f9467,_0x40576f){_0x2f9467=_0x2f9467-0x0;var _0x39894c=_0xa264[_0x2f9467];return _0x39894c;};'use strict';var _=require(_0x4a26('0x0'));var util=require('util');var logger=require(_0x4a26('0x1'))(_0x4a26('0x2'));var moment=require(_0x4a26('0x3'));var BPromise=require(_0x4a26('0x4'));var rp=require(_0x4a26('0x5'));var fs=require('fs');var path=require(_0x4a26('0x6'));var rimraf=require(_0x4a26('0x7'));var config=require(_0x4a26('0x8'));var attributes=require(_0x4a26('0x9'));module[_0x4a26('0xa')]=function(_0x15f8a4,_0x4eb2d6){return _0x15f8a4[_0x4a26('0xb')](_0x4a26('0xc'),attributes,{'tableName':_0x4a26('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfc0d=['util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','define','Team','lodash'];(function(_0x6131cd,_0x4c26a1){var _0x47e916=function(_0x1f2bce){while(--_0x1f2bce){_0x6131cd['push'](_0x6131cd['shift']());}};_0x47e916(++_0x4c26a1);}(_0xfc0d,0x8e));var _0xdfc0=function(_0x380777,_0x1f8453){_0x380777=_0x380777-0x0;var _0x1890f8=_0xfc0d[_0x380777];return _0x1890f8;};'use strict';var _=require(_0xdfc0('0x0'));var util=require(_0xdfc0('0x1'));var logger=require(_0xdfc0('0x2'))(_0xdfc0('0x3'));var moment=require(_0xdfc0('0x4'));var BPromise=require(_0xdfc0('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xdfc0('0x6'));var rimraf=require(_0xdfc0('0x7'));var config=require(_0xdfc0('0x8'));var attributes=require('./team.attributes');module['exports']=function(_0x3b6351,_0x3bb7dc){return _0x3b6351[_0xdfc0('0x9')](_0xdfc0('0xa'),attributes,{'tableName':'teams','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bc9c8c9..23dc388 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6e56=['request','then','info','Team,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','redis','localhost','socket.io-emitter'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x6e56,0xe3));var _0x66e5=function(_0x205b46,_0x3ca65b){_0x205b46=_0x205b46-0x0;var _0x2b6ae8=_0x6e56[_0x205b46];return _0x2b6ae8;};'use strict';var _=require(_0x66e5('0x0'));var util=require(_0x66e5('0x1'));var moment=require(_0x66e5('0x2'));var BPromise=require(_0x66e5('0x3'));var rs=require(_0x66e5('0x4'));var fs=require('fs');var Redis=require(_0x66e5('0x5'));var db=require(_0x66e5('0x6'))['db'];var utils=require(_0x66e5('0x7'));var logger=require('../../config/logger')(_0x66e5('0x8'));var config=require(_0x66e5('0x9'));var jayson=require(_0x66e5('0xa'));var client=jayson[_0x66e5('0xb')][_0x66e5('0xc')]({'port':0x232a});config[_0x66e5('0xd')]=_['defaults'](config[_0x66e5('0xd')],{'host':_0x66e5('0xe'),'port':0x18eb});var socket=require(_0x66e5('0xf'))(new Redis(config[_0x66e5('0xd')]));require('./team.socket')['register'](socket);function respondWithRpcPromise(_0x454c67,_0x21038f,_0x2cde90){return new BPromise(function(_0x270142,_0x1d098e){return client[_0x66e5('0x10')](_0x454c67,_0x2cde90)[_0x66e5('0x11')](function(_0xf17ef1){logger[_0x66e5('0x12')](_0x66e5('0x13'),_0x21038f,_0x66e5('0x14'));logger[_0x66e5('0x15')]('Team,\x20%s,\x20%s,\x20%s',_0x21038f,_0x66e5('0x14'),JSON[_0x66e5('0x16')](_0xf17ef1));if(_0xf17ef1[_0x66e5('0x17')]){if(_0xf17ef1[_0x66e5('0x17')]['code']===0x1f4){logger['error'](_0x66e5('0x13'),_0x21038f,_0xf17ef1[_0x66e5('0x17')][_0x66e5('0x18')]);return _0x1d098e(_0xf17ef1[_0x66e5('0x17')][_0x66e5('0x18')]);}logger[_0x66e5('0x17')](_0x66e5('0x13'),_0x21038f,_0xf17ef1[_0x66e5('0x17')][_0x66e5('0x18')]);return _0x270142(_0xf17ef1['error'][_0x66e5('0x18')]);}else{logger[_0x66e5('0x12')]('Team,\x20%s,\x20%s',_0x21038f,'request\x20sent');_0x270142(_0xf17ef1[_0x66e5('0x19')][_0x66e5('0x18')]);}})[_0x66e5('0x1a')](function(_0x548f41){logger[_0x66e5('0x17')](_0x66e5('0x13'),_0x21038f,_0x548f41);_0x1d098e(_0x548f41);});});}
\ No newline at end of file
+var _0x6fc3=['ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','defaults','redis','socket.io-emitter','./team.socket','register','request','then','info','Team,\x20%s,\x20%s','debug','request\x20sent','stringify','error','message','result','catch','util','moment','bluebird','randomstring'];(function(_0x2ea4b9,_0x38cdcd){var _0x456d08=function(_0x1e3a62){while(--_0x1e3a62){_0x2ea4b9['push'](_0x2ea4b9['shift']());}};_0x456d08(++_0x38cdcd);}(_0x6fc3,0x130));var _0x36fc=function(_0x450e20,_0x14069d){_0x450e20=_0x450e20-0x0;var _0x350ea5=_0x6fc3[_0x450e20];return _0x350ea5;};'use strict';var _=require('lodash');var util=require(_0x36fc('0x0'));var moment=require(_0x36fc('0x1'));var BPromise=require(_0x36fc('0x2'));var rs=require(_0x36fc('0x3'));var fs=require('fs');var Redis=require(_0x36fc('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x36fc('0x5'));var logger=require(_0x36fc('0x6'))(_0x36fc('0x7'));var config=require(_0x36fc('0x8'));var jayson=require(_0x36fc('0x9'));var client=jayson[_0x36fc('0xa')][_0x36fc('0xb')]({'port':0x232a});config['redis']=_[_0x36fc('0xc')](config[_0x36fc('0xd')],{'host':'localhost','port':0x18eb});var socket=require(_0x36fc('0xe'))(new Redis(config[_0x36fc('0xd')]));require(_0x36fc('0xf'))[_0x36fc('0x10')](socket);function respondWithRpcPromise(_0x3accb8,_0x561d0d,_0x258ce9){return new BPromise(function(_0x163c81,_0x22f6aa){return client[_0x36fc('0x11')](_0x3accb8,_0x258ce9)[_0x36fc('0x12')](function(_0x235d90){logger[_0x36fc('0x13')](_0x36fc('0x14'),_0x561d0d,'request\x20sent');logger[_0x36fc('0x15')]('Team,\x20%s,\x20%s,\x20%s',_0x561d0d,_0x36fc('0x16'),JSON[_0x36fc('0x17')](_0x235d90));if(_0x235d90[_0x36fc('0x18')]){if(_0x235d90[_0x36fc('0x18')]['code']===0x1f4){logger[_0x36fc('0x18')](_0x36fc('0x14'),_0x561d0d,_0x235d90['error'][_0x36fc('0x19')]);return _0x22f6aa(_0x235d90[_0x36fc('0x18')][_0x36fc('0x19')]);}logger[_0x36fc('0x18')](_0x36fc('0x14'),_0x561d0d,_0x235d90[_0x36fc('0x18')][_0x36fc('0x19')]);return _0x163c81(_0x235d90[_0x36fc('0x18')][_0x36fc('0x19')]);}else{logger[_0x36fc('0x13')](_0x36fc('0x14'),_0x561d0d,_0x36fc('0x16'));_0x163c81(_0x235d90[_0x36fc('0x1a')][_0x36fc('0x19')]);}})[_0x36fc('0x1b')](function(_0x3dfa10){logger[_0x36fc('0x18')](_0x36fc('0x14'),_0x561d0d,_0x3dfa10);_0x22f6aa(_0x3dfa10);});});}
\ No newline at end of file
index a66f77a..125c722 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7ad5=['register','team:','./team.events','save','remove','update','removeListener'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0x7ad5,0x11a));var _0x57ad=function(_0x4243a3,_0x447337){_0x4243a3=_0x4243a3-0x0;var _0x1b2a33=_0x7ad5[_0x4243a3];return _0x1b2a33;};'use strict';var TeamEvents=require(_0x57ad('0x0'));var events=[_0x57ad('0x1'),_0x57ad('0x2'),_0x57ad('0x3')];function createListener(_0x3eed5b,_0x316409){return function(_0x1dcb16){_0x316409['emit'](_0x3eed5b,_0x1dcb16);};}function removeListener(_0x3bcf8f,_0x41af56){return function(){TeamEvents[_0x57ad('0x4')](_0x3bcf8f,_0x41af56);};}exports[_0x57ad('0x5')]=function(_0x2e4aa){for(var _0x2fc601=0x0,_0x1116a8=events['length'];_0x2fc601<_0x1116a8;_0x2fc601++){var _0x4a745e=events[_0x2fc601];var _0x47a04f=createListener(_0x57ad('0x6')+_0x4a745e,_0x2e4aa);TeamEvents['on'](_0x4a745e,_0x47a04f);}};
\ No newline at end of file
+var _0xd425=['team:','./team.events','remove','update','emit','removeListener','register'];(function(_0x690cca,_0x48151b){var _0x2cd2e3=function(_0x2e409a){while(--_0x2e409a){_0x690cca['push'](_0x690cca['shift']());}};_0x2cd2e3(++_0x48151b);}(_0xd425,0x104));var _0x5d42=function(_0x1bd7c0,_0x107df4){_0x1bd7c0=_0x1bd7c0-0x0;var _0x437c0d=_0xd425[_0x1bd7c0];return _0x437c0d;};'use strict';var TeamEvents=require(_0x5d42('0x0'));var events=['save',_0x5d42('0x1'),_0x5d42('0x2')];function createListener(_0x2573fc,_0x5af5a5){return function(_0x31c36e){_0x5af5a5[_0x5d42('0x3')](_0x2573fc,_0x31c36e);};}function removeListener(_0x5bde9a,_0x1a7705){return function(){TeamEvents[_0x5d42('0x4')](_0x5bde9a,_0x1a7705);};}exports[_0x5d42('0x5')]=function(_0x5f3c59){for(var _0x314428=0x0,_0x528cb1=events['length'];_0x314428<_0x528cb1;_0x314428++){var _0x1e9ad9=events[_0x314428];var _0x4be5ad=createListener(_0x5d42('0x6')+_0x1e9ad9,_0x5f3c59);TeamEvents['on'](_0x1e9ad9,_0x4be5ad);}};
\ No newline at end of file
index 6a3f6bc..8ffb121 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6f6=['put','/:id','update','delete','destroy','exports','multer','path','express','../../components/auth/service','../../config/environment','./template.controller','get','isAuthenticated','index','show','post'];(function(_0x321e72,_0x23dfcc){var _0xb956bd=function(_0x39e18e){while(--_0x39e18e){_0x321e72['push'](_0x321e72['shift']());}};_0xb956bd(++_0x23dfcc);}(_0xc6f6,0x17c));var _0x6c6f=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xc6f6[_0x14add3];return _0x4a174f;};'use strict';var multer=require(_0x6c6f('0x0'));var util=require('util');var path=require(_0x6c6f('0x1'));var timeout=require('connect-timeout');var express=require(_0x6c6f('0x2'));var router=express['Router']();var auth=require(_0x6c6f('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x6c6f('0x4'));var controller=require(_0x6c6f('0x5'));router[_0x6c6f('0x6')]('/',auth[_0x6c6f('0x7')](),controller[_0x6c6f('0x8')]);router[_0x6c6f('0x6')]('/:id',auth['isAuthenticated'](),controller[_0x6c6f('0x9')]);router[_0x6c6f('0xa')]('/',auth['isAuthenticated'](),controller['create']);router[_0x6c6f('0xb')](_0x6c6f('0xc'),auth[_0x6c6f('0x7')](),controller[_0x6c6f('0xd')]);router[_0x6c6f('0xe')]('/:id',auth[_0x6c6f('0x7')](),controller[_0x6c6f('0xf')]);module[_0x6c6f('0x10')]=router;
\ No newline at end of file
+var _0xf263=['../../components/interaction/service','../../config/environment','./template.controller','isAuthenticated','get','/:id','show','post','create','put','update','delete','destroy','util','path','express','Router'];(function(_0x1595be,_0x198b91){var _0x544651=function(_0x22d4e9){while(--_0x22d4e9){_0x1595be['push'](_0x1595be['shift']());}};_0x544651(++_0x198b91);}(_0xf263,0x12e));var _0x3f26=function(_0x5be795,_0x1cb1b8){_0x5be795=_0x5be795-0x0;var _0x4e8a3b=_0xf263[_0x5be795];return _0x4e8a3b;};'use strict';var multer=require('multer');var util=require(_0x3f26('0x0'));var path=require(_0x3f26('0x1'));var timeout=require('connect-timeout');var express=require(_0x3f26('0x2'));var router=express[_0x3f26('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x3f26('0x4'));var config=require(_0x3f26('0x5'));var controller=require(_0x3f26('0x6'));router['get']('/',auth[_0x3f26('0x7')](),controller['index']);router[_0x3f26('0x8')](_0x3f26('0x9'),auth[_0x3f26('0x7')](),controller[_0x3f26('0xa')]);router[_0x3f26('0xb')]('/',auth[_0x3f26('0x7')](),controller[_0x3f26('0xc')]);router[_0x3f26('0xd')]('/:id',auth[_0x3f26('0x7')](),controller[_0x3f26('0xe')]);router[_0x3f26('0xf')](_0x3f26('0x9'),auth[_0x3f26('0x7')](),controller[_0x3f26('0x10')]);module['exports']=router;
\ No newline at end of file
index 22d7136..3f1c9d6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x87c0=['sequelize','exports','STRING','TEXT'];(function(_0x443d59,_0x4aed6d){var _0x1e6130=function(_0x1f80ad){while(--_0x1f80ad){_0x443d59['push'](_0x443d59['shift']());}};_0x1e6130(++_0x4aed6d);}(_0x87c0,0x1b4));var _0x087c=function(_0x1bc0ae,_0x439dfe){_0x1bc0ae=_0x1bc0ae-0x0;var _0x501104=_0x87c0[_0x1bc0ae];return _0x501104;};'use strict';var Sequelize=require(_0x087c('0x0'));module[_0x087c('0x1')]={'name':{'type':Sequelize[_0x087c('0x2')]},'description':{'type':Sequelize['STRING']},'html':{'type':Sequelize[_0x087c('0x3')]}};
\ No newline at end of file
+var _0x2f18=['sequelize','exports','STRING','TEXT'];(function(_0x3fbb3a,_0x53a237){var _0xc274a3=function(_0x370c40){while(--_0x370c40){_0x3fbb3a['push'](_0x3fbb3a['shift']());}};_0xc274a3(++_0x53a237);}(_0x2f18,0x1e0));var _0x82f1=function(_0x4eabdf,_0x5ed32e){_0x4eabdf=_0x4eabdf-0x0;var _0x34c6e5=_0x2f18[_0x4eabdf];return _0x34c6e5;};'use strict';var Sequelize=require(_0x82f1('0x0'));module[_0x82f1('0x1')]={'name':{'type':Sequelize[_0x82f1('0x2')]},'description':{'type':Sequelize['STRING']},'html':{'type':Sequelize[_0x82f1('0x3')]}};
\ No newline at end of file
index 61eb68d..625c101 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d8f=['../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','set','Content-Range','apply','reject','save','update','then','destroy','get','error','stack','name','send','index','Template','model','keys','query','filters','intersection','attributes','length','nolimit','limit','pick','filter','where','merge','map','key','field','options','count','includeAll','findAll','rows','catch','params','rawAttributes','fields','include','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Templates','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','body','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','path','sox','to-csv','squel','crypto','desk.js','querystring','papaparse','ioredis','../../config/license/hardware'];(function(_0x39e37a,_0x5d9f53){var _0x20c4ef=function(_0x5382c0){while(--_0x5382c0){_0x39e37a['push'](_0x39e37a['shift']());}};_0x20c4ef(++_0x5d9f53);}(_0x5d8f,0x127));var _0xf5d8=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x5d8f[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xf5d8('0x0'));var rimraf=require(_0xf5d8('0x1'));var zipdir=require(_0xf5d8('0x2'));var jsonpatch=require(_0xf5d8('0x3'));var rp=require('request-promise');var moment=require(_0xf5d8('0x4'));var BPromise=require(_0xf5d8('0x5'));var Mustache=require(_0xf5d8('0x6'));var util=require('util');var path=require(_0xf5d8('0x7'));var sox=require(_0xf5d8('0x8'));var csv=require(_0xf5d8('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xf5d8('0xa'));var crypto=require(_0xf5d8('0xb'));var jsforce=require('jsforce');var deskjs=require(_0xf5d8('0xc'));var toCsv=require(_0xf5d8('0x9'));var querystring=require(_0xf5d8('0xd'));var Papa=require(_0xf5d8('0xe'));var Redis=require(_0xf5d8('0xf'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xf5d8('0x10'));var logger=require(_0xf5d8('0x11'))('api');var utils=require(_0xf5d8('0x12'));var config=require(_0xf5d8('0x13'));var db=require(_0xf5d8('0x14'))['db'];function respondWithStatusCode(_0x59d105,_0x4b7c9f){_0x4b7c9f=_0x4b7c9f||0xcc;return function(_0x25df40){if(_0x25df40){return _0x59d105[_0xf5d8('0x15')](_0x4b7c9f);}return _0x59d105[_0xf5d8('0x16')](_0x4b7c9f)[_0xf5d8('0x17')]();};}function respondWithResult(_0x43d624,_0x3812c0){_0x3812c0=_0x3812c0||0xc8;return function(_0x1e9175){if(_0x1e9175){return _0x43d624['status'](_0x3812c0)[_0xf5d8('0x18')](_0x1e9175);}};}function respondWithFilteredResult(_0x32e6d6,_0x1ffadc){return function(_0x28572d){if(_0x28572d){var _0x15e1ee=_0x28572d['count'],_0x1acc80=_0x1ffadc[_0xf5d8('0x19')],_0x4ff62b=_0x1ffadc[_0xf5d8('0x19')]+_0x1ffadc['limit'],_0x38a286;if(_0x4ff62b>=_0x15e1ee){_0x4ff62b=_0x15e1ee;_0x38a286=0xc8;}else{_0x38a286=0xce;}_0x32e6d6['status'](_0x38a286);return _0x32e6d6[_0xf5d8('0x1a')](_0xf5d8('0x1b'),_0x1acc80+'-'+_0x4ff62b+'/'+_0x15e1ee)[_0xf5d8('0x18')](_0x28572d);}return null;};}function patchUpdates(_0x303d87){return function(_0x4f81fc){try{jsonpatch[_0xf5d8('0x1c')](_0x4f81fc,_0x303d87,!![]);}catch(_0x3bb401){return BPromise[_0xf5d8('0x1d')](_0x3bb401);}return _0x4f81fc[_0xf5d8('0x1e')]();};}function saveUpdates(_0x568259,_0x4df7fd){return function(_0x23e62d){if(_0x23e62d){return _0x23e62d[_0xf5d8('0x1f')](_0x568259)[_0xf5d8('0x20')](function(_0x1e45f6){return _0x1e45f6;});}return null;};}function removeEntity(_0x3581c8,_0x357388){return function(_0x512083){if(_0x512083){return _0x512083[_0xf5d8('0x21')]()[_0xf5d8('0x20')](function(){var _0x3cf984=_0x512083[_0xf5d8('0x22')]({'plain':!![]});var _0x2a0f65='Templates';return db['UserProfileResource'][_0xf5d8('0x21')]({'where':{'type':_0x2a0f65,'resourceId':_0x3cf984['id']}})[_0xf5d8('0x20')](function(){return _0x512083;});})[_0xf5d8('0x20')](function(){_0x3581c8['status'](0xcc)[_0xf5d8('0x17')]();});}};}function handleEntityNotFound(_0x402845,_0x3fd7a3){return function(_0x1d6c36){if(!_0x1d6c36){_0x402845['sendStatus'](0x194);}return _0x1d6c36;};}function handleError(_0x4399c0,_0x199485){_0x199485=_0x199485||0x1f4;return function(_0x542c16){logger[_0xf5d8('0x23')](_0x542c16[_0xf5d8('0x24')]);if(_0x542c16[_0xf5d8('0x25')]){delete _0x542c16[_0xf5d8('0x25')];}_0x4399c0['status'](_0x199485)[_0xf5d8('0x26')](_0x542c16);};}exports[_0xf5d8('0x27')]=function(_0x2b16fc,_0x5a2a91){var _0x236a77={},_0x4acc4a={},_0x33e00c={'count':0x0,'rows':[]};var _0x223092=db[_0xf5d8('0x28')]['rawAttributes'];_0x4acc4a[_0xf5d8('0x29')]=_[_0xf5d8('0x2a')](_0x223092);_0x4acc4a[_0xf5d8('0x2b')]=_[_0xf5d8('0x2a')](_0x2b16fc[_0xf5d8('0x2b')]);_0x4acc4a[_0xf5d8('0x2c')]=_[_0xf5d8('0x2d')](_0x4acc4a[_0xf5d8('0x29')],_0x4acc4a[_0xf5d8('0x2b')]);_0x236a77[_0xf5d8('0x2e')]=_[_0xf5d8('0x2d')](_0x4acc4a[_0xf5d8('0x29')],qs['fields'](_0x2b16fc[_0xf5d8('0x2b')]['fields']));_0x236a77[_0xf5d8('0x2e')]=_0x236a77['attributes'][_0xf5d8('0x2f')]?_0x236a77[_0xf5d8('0x2e')]:_0x4acc4a['model'];if(!_0x2b16fc[_0xf5d8('0x2b')]['hasOwnProperty'](_0xf5d8('0x30'))){_0x236a77[_0xf5d8('0x31')]=qs[_0xf5d8('0x31')](_0x2b16fc['query']['limit']);_0x236a77[_0xf5d8('0x19')]=qs['offset'](_0x2b16fc['query']['offset']);}_0x236a77['order']=qs['sort'](_0x2b16fc[_0xf5d8('0x2b')]['sort']);_0x236a77['where']=qs['filters'](_[_0xf5d8('0x32')](_0x2b16fc[_0xf5d8('0x2b')],_0x4acc4a[_0xf5d8('0x2c')]));if(_0x2b16fc[_0xf5d8('0x2b')][_0xf5d8('0x33')]){_0x236a77[_0xf5d8('0x34')]=_[_0xf5d8('0x35')](_0x236a77[_0xf5d8('0x34')],{'$or':_[_0xf5d8('0x36')](_0x223092,function(_0x3161d0){if(_0x3161d0['type'][_0xf5d8('0x37')]!=='VIRTUAL'){var _0x16ccc3={};_0x16ccc3[_0x3161d0[_0xf5d8('0x38')]]={'$like':'%'+_0x2b16fc[_0xf5d8('0x2b')][_0xf5d8('0x33')]+'%'};return _0x16ccc3;}})});}_0x236a77=_[_0xf5d8('0x35')]({},_0x236a77,_0x2b16fc[_0xf5d8('0x39')]);var _0x339f9e={'where':_0x236a77['where']};return db[_0xf5d8('0x28')][_0xf5d8('0x3a')](_0x339f9e)[_0xf5d8('0x20')](function(_0x10e938){_0x33e00c[_0xf5d8('0x3a')]=_0x10e938;if(_0x2b16fc[_0xf5d8('0x2b')][_0xf5d8('0x3b')]){_0x236a77['include']=[{'all':!![]}];}return db[_0xf5d8('0x28')][_0xf5d8('0x3c')](_0x236a77);})[_0xf5d8('0x20')](function(_0xd2eb35){_0x33e00c[_0xf5d8('0x3d')]=_0xd2eb35;return _0x33e00c;})['then'](respondWithFilteredResult(_0x5a2a91,_0x236a77))[_0xf5d8('0x3e')](handleError(_0x5a2a91,null));};exports['show']=function(_0x2c5712,_0x458e56){var _0x32a1dd={'raw':!![],'where':{'id':_0x2c5712[_0xf5d8('0x3f')]['id']}},_0x1e5413={};_0x1e5413['model']=_['keys'](db['Template'][_0xf5d8('0x40')]);_0x1e5413[_0xf5d8('0x2b')]=_[_0xf5d8('0x2a')](_0x2c5712['query']);_0x1e5413['filters']=_[_0xf5d8('0x2d')](_0x1e5413[_0xf5d8('0x29')],_0x1e5413[_0xf5d8('0x2b')]);_0x32a1dd[_0xf5d8('0x2e')]=_['intersection'](_0x1e5413['model'],qs['fields'](_0x2c5712[_0xf5d8('0x2b')][_0xf5d8('0x41')]));_0x32a1dd['attributes']=_0x32a1dd[_0xf5d8('0x2e')][_0xf5d8('0x2f')]?_0x32a1dd[_0xf5d8('0x2e')]:_0x1e5413[_0xf5d8('0x29')];if(_0x2c5712[_0xf5d8('0x2b')][_0xf5d8('0x3b')]){_0x32a1dd[_0xf5d8('0x42')]=[{'all':!![]}];}_0x32a1dd=_[_0xf5d8('0x35')]({},_0x32a1dd,_0x2c5712[_0xf5d8('0x39')]);return db[_0xf5d8('0x28')][_0xf5d8('0x43')](_0x32a1dd)['then'](handleEntityNotFound(_0x458e56,null))['then'](respondWithResult(_0x458e56,null))[_0xf5d8('0x3e')](handleError(_0x458e56,null));};exports[_0xf5d8('0x44')]=function(_0x18e55e,_0x1f7286){return db[_0xf5d8('0x28')][_0xf5d8('0x44')](_0x18e55e['body'],{})[_0xf5d8('0x20')](function(_0x40de90){var _0x5d637d=_0x18e55e[_0xf5d8('0x45')]['get']({'plain':!![]});if(!_0x5d637d)throw new Error(_0xf5d8('0x46'));if(_0x5d637d[_0xf5d8('0x47')]===_0xf5d8('0x45')){var _0x4f424d=_0x40de90['get']({'plain':!![]});var _0x245419=_0xf5d8('0x48');return db[_0xf5d8('0x49')][_0xf5d8('0x43')]({'where':{'name':_0x245419,'userProfileId':_0x5d637d[_0xf5d8('0x4a')]},'raw':!![]})[_0xf5d8('0x20')](function(_0x16e26b){if(_0x16e26b&&_0x16e26b[_0xf5d8('0x4b')]===0x0){return db[_0xf5d8('0x4c')][_0xf5d8('0x44')]({'name':_0x4f424d['name'],'resourceId':_0x4f424d['id'],'type':_0x16e26b[_0xf5d8('0x25')],'sectionId':_0x16e26b['id']},{})[_0xf5d8('0x20')](function(){return _0x40de90;});}else{return _0x40de90;}})['catch'](function(_0x504e80){logger[_0xf5d8('0x23')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x504e80);throw _0x504e80;});}return _0x40de90;})[_0xf5d8('0x20')](respondWithResult(_0x1f7286,0xc9))[_0xf5d8('0x3e')](handleError(_0x1f7286,null));};exports[_0xf5d8('0x1f')]=function(_0x84f186,_0x3fe311){if(_0x84f186[_0xf5d8('0x4d')]['id']){delete _0x84f186[_0xf5d8('0x4d')]['id'];}return db[_0xf5d8('0x28')]['find']({'where':{'id':_0x84f186[_0xf5d8('0x3f')]['id']}})[_0xf5d8('0x20')](handleEntityNotFound(_0x3fe311,null))[_0xf5d8('0x20')](saveUpdates(_0x84f186[_0xf5d8('0x4d')],null))['then'](respondWithResult(_0x3fe311,null))[_0xf5d8('0x3e')](handleError(_0x3fe311,null));};exports[_0xf5d8('0x21')]=function(_0x14b733,_0x1c6574){return db['Template']['find']({'where':{'id':_0x14b733['params']['id']}})[_0xf5d8('0x20')](handleEntityNotFound(_0x1c6574,null))[_0xf5d8('0x20')](removeEntity(_0x1c6574,null))[_0xf5d8('0x3e')](handleError(_0x1c6574,null));};
\ No newline at end of file
+var _0xff53=['body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','find','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','ejs','lodash','jsforce','desk.js','to-csv','querystring','papaparse','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','json','offset','limit','set','Content-Range','reject','save','update','then','get','Templates','UserProfileResource','destroy','end','sendStatus','error','stack','name','send','index','keys','query','model','attributes','fields','length','nolimit','order','sort','where','pick','filters','filter','map','type','field','merge','options','Template','count','include','findAll','rows','show','params','intersection','catch','create'];(function(_0x5ea501,_0x4fcd1d){var _0x5d6456=function(_0x32061d){while(--_0x32061d){_0x5ea501['push'](_0x5ea501['shift']());}};_0x5d6456(++_0x4fcd1d);}(_0xff53,0x199));var _0x3ff5=function(_0x482878,_0x5f16f0){_0x482878=_0x482878-0x0;var _0x80ef89=_0xff53[_0x482878];return _0x80ef89;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x3ff5('0x0'));var zipdir=require(_0x3ff5('0x1'));var jsonpatch=require(_0x3ff5('0x2'));var rp=require(_0x3ff5('0x3'));var moment=require(_0x3ff5('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x3ff5('0x5'));var util=require(_0x3ff5('0x6'));var path=require(_0x3ff5('0x7'));var sox=require(_0x3ff5('0x8'));var csv=require('to-csv');var ejs=require(_0x3ff5('0x9'));var fs=require('fs');var _=require(_0x3ff5('0xa'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x3ff5('0xb'));var deskjs=require(_0x3ff5('0xc'));var toCsv=require(_0x3ff5('0xd'));var querystring=require(_0x3ff5('0xe'));var Papa=require(_0x3ff5('0xf'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0x3ff5('0x10'));var logger=require(_0x3ff5('0x11'))(_0x3ff5('0x12'));var utils=require(_0x3ff5('0x13'));var config=require(_0x3ff5('0x14'));var db=require(_0x3ff5('0x15'))['db'];function respondWithStatusCode(_0x2082ee,_0x1e8825){_0x1e8825=_0x1e8825||0xcc;return function(_0x3ce9ce){if(_0x3ce9ce){return _0x2082ee['sendStatus'](_0x1e8825);}return _0x2082ee[_0x3ff5('0x16')](_0x1e8825)['end']();};}function respondWithResult(_0x4a8e5f,_0x5366d6){_0x5366d6=_0x5366d6||0xc8;return function(_0x4f5335){if(_0x4f5335){return _0x4a8e5f['status'](_0x5366d6)[_0x3ff5('0x17')](_0x4f5335);}};}function respondWithFilteredResult(_0x2fa3db,_0x4ddc0d){return function(_0xc02fa0){if(_0xc02fa0){var _0x4c3274=_0xc02fa0['count'],_0x2ddd19=_0x4ddc0d[_0x3ff5('0x18')],_0x1b4496=_0x4ddc0d[_0x3ff5('0x18')]+_0x4ddc0d[_0x3ff5('0x19')],_0x551d8c;if(_0x1b4496>=_0x4c3274){_0x1b4496=_0x4c3274;_0x551d8c=0xc8;}else{_0x551d8c=0xce;}_0x2fa3db[_0x3ff5('0x16')](_0x551d8c);return _0x2fa3db[_0x3ff5('0x1a')](_0x3ff5('0x1b'),_0x2ddd19+'-'+_0x1b4496+'/'+_0x4c3274)['json'](_0xc02fa0);}return null;};}function patchUpdates(_0x339ac0){return function(_0x2f6a35){try{jsonpatch['apply'](_0x2f6a35,_0x339ac0,!![]);}catch(_0x32691a){return BPromise[_0x3ff5('0x1c')](_0x32691a);}return _0x2f6a35[_0x3ff5('0x1d')]();};}function saveUpdates(_0x5134ac,_0x3813d5){return function(_0x40cd41){if(_0x40cd41){return _0x40cd41[_0x3ff5('0x1e')](_0x5134ac)['then'](function(_0x431ab2){return _0x431ab2;});}return null;};}function removeEntity(_0x1ffbf4,_0x2b1738){return function(_0x551971){if(_0x551971){return _0x551971['destroy']()[_0x3ff5('0x1f')](function(){var _0x11f051=_0x551971[_0x3ff5('0x20')]({'plain':!![]});var _0xd30482=_0x3ff5('0x21');return db[_0x3ff5('0x22')][_0x3ff5('0x23')]({'where':{'type':_0xd30482,'resourceId':_0x11f051['id']}})[_0x3ff5('0x1f')](function(){return _0x551971;});})[_0x3ff5('0x1f')](function(){_0x1ffbf4[_0x3ff5('0x16')](0xcc)[_0x3ff5('0x24')]();});}};}function handleEntityNotFound(_0x4c4dc3,_0x3d71e6){return function(_0x17687b){if(!_0x17687b){_0x4c4dc3[_0x3ff5('0x25')](0x194);}return _0x17687b;};}function handleError(_0x44227e,_0x190365){_0x190365=_0x190365||0x1f4;return function(_0x428faf){logger[_0x3ff5('0x26')](_0x428faf[_0x3ff5('0x27')]);if(_0x428faf[_0x3ff5('0x28')]){delete _0x428faf[_0x3ff5('0x28')];}_0x44227e['status'](_0x190365)[_0x3ff5('0x29')](_0x428faf);};}exports[_0x3ff5('0x2a')]=function(_0x52b769,_0x41adef){var _0x3133ee={},_0x2b7315={},_0xeea7dc={'count':0x0,'rows':[]};var _0x13a95b=db['Template']['rawAttributes'];_0x2b7315['model']=_[_0x3ff5('0x2b')](_0x13a95b);_0x2b7315[_0x3ff5('0x2c')]=_[_0x3ff5('0x2b')](_0x52b769['query']);_0x2b7315['filters']=_['intersection'](_0x2b7315[_0x3ff5('0x2d')],_0x2b7315[_0x3ff5('0x2c')]);_0x3133ee[_0x3ff5('0x2e')]=_['intersection'](_0x2b7315[_0x3ff5('0x2d')],qs['fields'](_0x52b769[_0x3ff5('0x2c')][_0x3ff5('0x2f')]));_0x3133ee[_0x3ff5('0x2e')]=_0x3133ee[_0x3ff5('0x2e')][_0x3ff5('0x30')]?_0x3133ee[_0x3ff5('0x2e')]:_0x2b7315[_0x3ff5('0x2d')];if(!_0x52b769[_0x3ff5('0x2c')]['hasOwnProperty'](_0x3ff5('0x31'))){_0x3133ee['limit']=qs[_0x3ff5('0x19')](_0x52b769[_0x3ff5('0x2c')][_0x3ff5('0x19')]);_0x3133ee[_0x3ff5('0x18')]=qs[_0x3ff5('0x18')](_0x52b769['query']['offset']);}_0x3133ee[_0x3ff5('0x32')]=qs[_0x3ff5('0x33')](_0x52b769[_0x3ff5('0x2c')][_0x3ff5('0x33')]);_0x3133ee[_0x3ff5('0x34')]=qs['filters'](_[_0x3ff5('0x35')](_0x52b769[_0x3ff5('0x2c')],_0x2b7315[_0x3ff5('0x36')]));if(_0x52b769[_0x3ff5('0x2c')][_0x3ff5('0x37')]){_0x3133ee[_0x3ff5('0x34')]=_['merge'](_0x3133ee[_0x3ff5('0x34')],{'$or':_[_0x3ff5('0x38')](_0x13a95b,function(_0x413205){if(_0x413205[_0x3ff5('0x39')]['key']!=='VIRTUAL'){var _0x3cf103={};_0x3cf103[_0x413205[_0x3ff5('0x3a')]]={'$like':'%'+_0x52b769[_0x3ff5('0x2c')]['filter']+'%'};return _0x3cf103;}})});}_0x3133ee=_[_0x3ff5('0x3b')]({},_0x3133ee,_0x52b769[_0x3ff5('0x3c')]);var _0x514821={'where':_0x3133ee[_0x3ff5('0x34')]};return db[_0x3ff5('0x3d')]['count'](_0x514821)['then'](function(_0xfc0fdb){_0xeea7dc[_0x3ff5('0x3e')]=_0xfc0fdb;if(_0x52b769[_0x3ff5('0x2c')]['includeAll']){_0x3133ee[_0x3ff5('0x3f')]=[{'all':!![]}];}return db[_0x3ff5('0x3d')][_0x3ff5('0x40')](_0x3133ee);})[_0x3ff5('0x1f')](function(_0x56c626){_0xeea7dc[_0x3ff5('0x41')]=_0x56c626;return _0xeea7dc;})[_0x3ff5('0x1f')](respondWithFilteredResult(_0x41adef,_0x3133ee))['catch'](handleError(_0x41adef,null));};exports[_0x3ff5('0x42')]=function(_0x2bd4cd,_0xf94eb7){var _0x4dfe21={'raw':!![],'where':{'id':_0x2bd4cd[_0x3ff5('0x43')]['id']}},_0x2c0863={};_0x2c0863[_0x3ff5('0x2d')]=_['keys'](db['Template']['rawAttributes']);_0x2c0863[_0x3ff5('0x2c')]=_['keys'](_0x2bd4cd[_0x3ff5('0x2c')]);_0x2c0863[_0x3ff5('0x36')]=_[_0x3ff5('0x44')](_0x2c0863[_0x3ff5('0x2d')],_0x2c0863[_0x3ff5('0x2c')]);_0x4dfe21[_0x3ff5('0x2e')]=_[_0x3ff5('0x44')](_0x2c0863[_0x3ff5('0x2d')],qs[_0x3ff5('0x2f')](_0x2bd4cd[_0x3ff5('0x2c')]['fields']));_0x4dfe21['attributes']=_0x4dfe21[_0x3ff5('0x2e')][_0x3ff5('0x30')]?_0x4dfe21['attributes']:_0x2c0863[_0x3ff5('0x2d')];if(_0x2bd4cd['query']['includeAll']){_0x4dfe21[_0x3ff5('0x3f')]=[{'all':!![]}];}_0x4dfe21=_['merge']({},_0x4dfe21,_0x2bd4cd[_0x3ff5('0x3c')]);return db[_0x3ff5('0x3d')]['find'](_0x4dfe21)[_0x3ff5('0x1f')](handleEntityNotFound(_0xf94eb7,null))[_0x3ff5('0x1f')](respondWithResult(_0xf94eb7,null))[_0x3ff5('0x45')](handleError(_0xf94eb7,null));};exports['create']=function(_0x4a0896,_0x393dde){return db[_0x3ff5('0x3d')][_0x3ff5('0x46')](_0x4a0896[_0x3ff5('0x47')],{})[_0x3ff5('0x1f')](function(_0x14193e){var _0x1d1dd1=_0x4a0896[_0x3ff5('0x48')][_0x3ff5('0x20')]({'plain':!![]});if(!_0x1d1dd1)throw new Error(_0x3ff5('0x49'));if(_0x1d1dd1[_0x3ff5('0x4a')]===_0x3ff5('0x48')){var _0x234991=_0x14193e['get']({'plain':!![]});var _0x3db217=_0x3ff5('0x21');return db[_0x3ff5('0x4b')][_0x3ff5('0x4c')]({'where':{'name':_0x3db217,'userProfileId':_0x1d1dd1[_0x3ff5('0x4d')]},'raw':!![]})[_0x3ff5('0x1f')](function(_0x23c5b2){if(_0x23c5b2&&_0x23c5b2[_0x3ff5('0x4e')]===0x0){return db[_0x3ff5('0x22')][_0x3ff5('0x46')]({'name':_0x234991[_0x3ff5('0x28')],'resourceId':_0x234991['id'],'type':_0x23c5b2['name'],'sectionId':_0x23c5b2['id']},{})[_0x3ff5('0x1f')](function(){return _0x14193e;});}else{return _0x14193e;}})['catch'](function(_0x108b3e){logger[_0x3ff5('0x26')](_0x3ff5('0x4f'),_0x108b3e);throw _0x108b3e;});}return _0x14193e;})[_0x3ff5('0x1f')](respondWithResult(_0x393dde,0xc9))[_0x3ff5('0x45')](handleError(_0x393dde,null));};exports[_0x3ff5('0x1e')]=function(_0x462107,_0x5cd891){if(_0x462107[_0x3ff5('0x47')]['id']){delete _0x462107[_0x3ff5('0x47')]['id'];}return db[_0x3ff5('0x3d')]['find']({'where':{'id':_0x462107[_0x3ff5('0x43')]['id']}})[_0x3ff5('0x1f')](handleEntityNotFound(_0x5cd891,null))[_0x3ff5('0x1f')](saveUpdates(_0x462107[_0x3ff5('0x47')],null))[_0x3ff5('0x1f')](respondWithResult(_0x5cd891,null))[_0x3ff5('0x45')](handleError(_0x5cd891,null));};exports[_0x3ff5('0x23')]=function(_0x32a5ad,_0x460460){return db['Template'][_0x3ff5('0x4c')]({'where':{'id':_0x32a5ad[_0x3ff5('0x43')]['id']}})[_0x3ff5('0x1f')](handleEntityNotFound(_0x460460,null))[_0x3ff5('0x1f')](removeEntity(_0x460460,null))[_0x3ff5('0x45')](handleError(_0x460460,null));};
\ No newline at end of file
index c3e85be..b690f38 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1eba=['define','Template','tools_templates','lodash','util','../../config/logger','api','moment','path','rimraf','../../config/environment','./template.attributes','exports'];(function(_0x4c99a2,_0x4162c9){var _0x2e47e1=function(_0x2f88e0){while(--_0x2f88e0){_0x4c99a2['push'](_0x4c99a2['shift']());}};_0x2e47e1(++_0x4162c9);}(_0x1eba,0x1d7));var _0xa1eb=function(_0xd1d19a,_0x1933f0){_0xd1d19a=_0xd1d19a-0x0;var _0x52a79d=_0x1eba[_0xd1d19a];return _0x52a79d;};'use strict';var _=require(_0xa1eb('0x0'));var util=require(_0xa1eb('0x1'));var logger=require(_0xa1eb('0x2'))(_0xa1eb('0x3'));var moment=require(_0xa1eb('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0xa1eb('0x5'));var rimraf=require(_0xa1eb('0x6'));var config=require(_0xa1eb('0x7'));var attributes=require(_0xa1eb('0x8'));module[_0xa1eb('0x9')]=function(_0x2933d0,_0x1d0d67){return _0x2933d0[_0xa1eb('0xa')](_0xa1eb('0xb'),attributes,{'tableName':_0xa1eb('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x36ee=['Template','../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment','./template.attributes','exports','define'];(function(_0x4e9274,_0x49576e){var _0x8b474c=function(_0x204cca){while(--_0x204cca){_0x4e9274['push'](_0x4e9274['shift']());}};_0x8b474c(++_0x49576e);}(_0x36ee,0xe8));var _0xe36e=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x36ee[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xe36e('0x0'))('api');var moment=require(_0xe36e('0x1'));var BPromise=require(_0xe36e('0x2'));var rp=require(_0xe36e('0x3'));var fs=require('fs');var path=require(_0xe36e('0x4'));var rimraf=require(_0xe36e('0x5'));var config=require(_0xe36e('0x6'));var attributes=require(_0xe36e('0x7'));module[_0xe36e('0x8')]=function(_0x25a07d,_0x190404){return _0x25a07d[_0xe36e('0x9')](_0xe36e('0xa'),attributes,{'tableName':'tools_templates','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 20b6fdd..5b1ad32 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb1a=['options','raw','where','attributes','limit','include','map','model','GetTemplate','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','Template,\x20%s,\x20%s','request\x20sent','debug','Template,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','Template','findAll'];(function(_0x404f13,_0x4fa35f){var _0x1f9dbb=function(_0x492b33){while(--_0x492b33){_0x404f13['push'](_0x404f13['shift']());}};_0x1f9dbb(++_0x4fa35f);}(_0xcb1a,0xb8));var _0xacb1=function(_0x4fdf27,_0x406261){_0x4fdf27=_0x4fdf27-0x0;var _0x7e45e1=_0xcb1a[_0x4fdf27];return _0x7e45e1;};'use strict';var _=require(_0xacb1('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xacb1('0x1'));var rs=require(_0xacb1('0x2'));var fs=require('fs');var Redis=require(_0xacb1('0x3'));var db=require(_0xacb1('0x4'))['db'];var utils=require(_0xacb1('0x5'));var logger=require(_0xacb1('0x6'))(_0xacb1('0x7'));var config=require(_0xacb1('0x8'));var jayson=require(_0xacb1('0x9'));var client=jayson[_0xacb1('0xa')][_0xacb1('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x36fbb6,_0x469c45,_0x6d3bdf){return new BPromise(function(_0x39c8bf,_0x1c1eba){return client[_0xacb1('0xc')](_0x36fbb6,_0x6d3bdf)['then'](function(_0x2b569f){logger[_0xacb1('0xd')](_0xacb1('0xe'),_0x469c45,_0xacb1('0xf'));logger[_0xacb1('0x10')](_0xacb1('0x11'),_0x469c45,_0xacb1('0xf'),JSON[_0xacb1('0x12')](_0x2b569f));if(_0x2b569f[_0xacb1('0x13')]){if(_0x2b569f[_0xacb1('0x13')][_0xacb1('0x14')]===0x1f4){logger[_0xacb1('0x13')](_0xacb1('0xe'),_0x469c45,_0x2b569f[_0xacb1('0x13')]['message']);return _0x1c1eba(_0x2b569f[_0xacb1('0x13')]['message']);}logger[_0xacb1('0x13')](_0xacb1('0xe'),_0x469c45,_0x2b569f[_0xacb1('0x13')][_0xacb1('0x15')]);return _0x39c8bf(_0x2b569f['error'][_0xacb1('0x15')]);}else{logger[_0xacb1('0xd')](_0xacb1('0xe'),_0x469c45,_0xacb1('0xf'));_0x39c8bf(_0x2b569f[_0xacb1('0x16')][_0xacb1('0x15')]);}})[_0xacb1('0x17')](function(_0x48da82){logger[_0xacb1('0x13')](_0xacb1('0xe'),_0x469c45,_0x48da82);_0x1c1eba(_0x48da82);});});}exports['GetTemplate']=function(_0x4c9d4b){var _0x155bd4=this;return new Promise(function(_0x22e00f,_0x597fd2){return db[_0xacb1('0x18')][_0xacb1('0x19')]({'raw':_0x4c9d4b['options']?_0x4c9d4b[_0xacb1('0x1a')][_0xacb1('0x1b')]===undefined?!![]:![]:!![],'where':_0x4c9d4b[_0xacb1('0x1a')]?_0x4c9d4b['options'][_0xacb1('0x1c')]||null:null,'attributes':_0x4c9d4b[_0xacb1('0x1a')]?_0x4c9d4b[_0xacb1('0x1a')][_0xacb1('0x1d')]||null:null,'limit':_0x4c9d4b[_0xacb1('0x1a')]?_0x4c9d4b['options'][_0xacb1('0x1e')]||null:null,'include':_0x4c9d4b[_0xacb1('0x1a')]?_0x4c9d4b[_0xacb1('0x1a')][_0xacb1('0x1f')]?_[_0xacb1('0x20')](_0x4c9d4b[_0xacb1('0x1a')][_0xacb1('0x1f')],function(_0x37a1a3){return{'model':db[_0x37a1a3['model']],'as':_0x37a1a3['as'],'attributes':_0x37a1a3[_0xacb1('0x1d')],'include':_0x37a1a3[_0xacb1('0x1f')]?_['map'](_0x37a1a3[_0xacb1('0x1f')],function(_0x52f3fc){return{'model':db[_0x52f3fc[_0xacb1('0x21')]],'as':_0x52f3fc['as'],'attributes':_0x52f3fc[_0xacb1('0x1d')],'include':_0x52f3fc[_0xacb1('0x1f')]?_[_0xacb1('0x20')](_0x52f3fc[_0xacb1('0x1f')],function(_0x448ba3){return{'model':db[_0x448ba3[_0xacb1('0x21')]],'as':_0x448ba3['as'],'attributes':_0x448ba3[_0xacb1('0x1d')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x472e1b){logger[_0xacb1('0xd')](_0xacb1('0x22'),_0x4c9d4b);logger['debug']('GetTemplate',_0x4c9d4b,JSON['stringify'](_0x472e1b));_0x22e00f(_0x472e1b);})[_0xacb1('0x17')](function(_0x1bb7f6){logger[_0xacb1('0x13')]('GetTemplate',_0x1bb7f6['message'],_0x4c9d4b);_0x597fd2(_0x155bd4[_0xacb1('0x13')](0x1f4,_0x1bb7f6[_0xacb1('0x15')]));});});};
\ No newline at end of file
+var _0x273b=['map','model','then','info','GetTemplate','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http','request','Template,\x20%s,\x20%s','request\x20sent','debug','Template,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','Template','findAll','options','raw','where','attributes','limit','include'];(function(_0x1b34fb,_0x37b237){var _0xcaef28=function(_0x1ff500){while(--_0x1ff500){_0x1b34fb['push'](_0x1b34fb['shift']());}};_0xcaef28(++_0x37b237);}(_0x273b,0x91));var _0xb273=function(_0x5ebe52,_0x48b522){_0x5ebe52=_0x5ebe52-0x0;var _0x40dd35=_0x273b[_0x5ebe52];return _0x40dd35;};'use strict';var _=require(_0xb273('0x0'));var util=require(_0xb273('0x1'));var moment=require(_0xb273('0x2'));var BPromise=require(_0xb273('0x3'));var rs=require(_0xb273('0x4'));var fs=require('fs');var Redis=require(_0xb273('0x5'));var db=require(_0xb273('0x6'))['db'];var utils=require(_0xb273('0x7'));var logger=require('../../config/logger')(_0xb273('0x8'));var config=require(_0xb273('0x9'));var jayson=require(_0xb273('0xa'));var client=jayson['client'][_0xb273('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x938c5d,_0x168f33,_0x55ef7a){return new BPromise(function(_0xfb6881,_0x185c9f){return client[_0xb273('0xc')](_0x938c5d,_0x55ef7a)['then'](function(_0x258cb0){logger['info'](_0xb273('0xd'),_0x168f33,_0xb273('0xe'));logger[_0xb273('0xf')](_0xb273('0x10'),_0x168f33,_0xb273('0xe'),JSON[_0xb273('0x11')](_0x258cb0));if(_0x258cb0[_0xb273('0x12')]){if(_0x258cb0[_0xb273('0x12')][_0xb273('0x13')]===0x1f4){logger[_0xb273('0x12')](_0xb273('0xd'),_0x168f33,_0x258cb0[_0xb273('0x12')][_0xb273('0x14')]);return _0x185c9f(_0x258cb0[_0xb273('0x12')][_0xb273('0x14')]);}logger[_0xb273('0x12')](_0xb273('0xd'),_0x168f33,_0x258cb0[_0xb273('0x12')][_0xb273('0x14')]);return _0xfb6881(_0x258cb0[_0xb273('0x12')][_0xb273('0x14')]);}else{logger['info']('Template,\x20%s,\x20%s',_0x168f33,_0xb273('0xe'));_0xfb6881(_0x258cb0['result']['message']);}})[_0xb273('0x15')](function(_0xce2c7a){logger['error'](_0xb273('0xd'),_0x168f33,_0xce2c7a);_0x185c9f(_0xce2c7a);});});}exports['GetTemplate']=function(_0x142c38){var _0x3ed801=this;return new Promise(function(_0x2f5abb,_0x3c0fd6){return db[_0xb273('0x16')][_0xb273('0x17')]({'raw':_0x142c38[_0xb273('0x18')]?_0x142c38['options'][_0xb273('0x19')]===undefined?!![]:![]:!![],'where':_0x142c38[_0xb273('0x18')]?_0x142c38['options'][_0xb273('0x1a')]||null:null,'attributes':_0x142c38[_0xb273('0x18')]?_0x142c38[_0xb273('0x18')][_0xb273('0x1b')]||null:null,'limit':_0x142c38[_0xb273('0x18')]?_0x142c38[_0xb273('0x18')][_0xb273('0x1c')]||null:null,'include':_0x142c38[_0xb273('0x18')]?_0x142c38['options'][_0xb273('0x1d')]?_[_0xb273('0x1e')](_0x142c38[_0xb273('0x18')][_0xb273('0x1d')],function(_0x429a4e){return{'model':db[_0x429a4e[_0xb273('0x1f')]],'as':_0x429a4e['as'],'attributes':_0x429a4e['attributes'],'include':_0x429a4e[_0xb273('0x1d')]?_[_0xb273('0x1e')](_0x429a4e[_0xb273('0x1d')],function(_0x5849cb){return{'model':db[_0x5849cb['model']],'as':_0x5849cb['as'],'attributes':_0x5849cb[_0xb273('0x1b')],'include':_0x5849cb['include']?_[_0xb273('0x1e')](_0x5849cb[_0xb273('0x1d')],function(_0x5bdd40){return{'model':db[_0x5bdd40[_0xb273('0x1f')]],'as':_0x5bdd40['as'],'attributes':_0x5bdd40[_0xb273('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xb273('0x20')](function(_0x3381e6){logger[_0xb273('0x21')](_0xb273('0x22'),_0x142c38);logger[_0xb273('0xf')](_0xb273('0x22'),_0x142c38,JSON[_0xb273('0x11')](_0x3381e6));_0x2f5abb(_0x3381e6);})[_0xb273('0x15')](function(_0x5240d8){logger[_0xb273('0x12')]('GetTemplate',_0x5240d8[_0xb273('0x14')],_0x142c38);_0x3c0fd6(_0x3ed801['error'](0x1f4,_0x5240d8[_0xb273('0x14')]));});});};
\ No newline at end of file
index b242ca2..8d56cf8 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(_0x51cc12,_0x4fb414){var _0x56860b=function(_0x2a018a){while(--_0x2a018a){_0x51cc12['push'](_0x51cc12['shift']());}};_0x56860b(++_0x4fb414);}(_0xa9e0,0x123));var _0x0a9e=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0xa9e0[_0x19e35c];return _0x3e1fe8;};'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(_0x65771b,_0x3832e7){var _0x40fb1b=function(_0x206b82){while(--_0x206b82){_0x65771b['push'](_0x65771b['shift']());}};_0x40fb1b(++_0x3832e7);}(_0xa9e0,0x123));var _0x0a9e=function(_0x34bf97,_0xc60f9d){_0x34bf97=_0x34bf97-0x0;var _0x292719=_0xa9e0[_0x34bf97];return _0x292719;};'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 d7d1995..6008de2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3584=['sequelize','exports','STRING','BOOLEAN'];(function(_0x5960fc,_0x2b072){var _0x55218a=function(_0x197639){while(--_0x197639){_0x5960fc['push'](_0x5960fc['shift']());}};_0x55218a(++_0x2b072);}(_0x3584,0x14c));var _0x4358=function(_0x3d7d8e,_0x5ec104){_0x3d7d8e=_0x3d7d8e-0x0;var _0x1ff908=_0x3584[_0x3d7d8e];return _0x1ff908;};'use strict';var Sequelize=require(_0x4358('0x0'));module[_0x4358('0x1')]={'name':{'type':Sequelize[_0x4358('0x2')]},'channel':{'type':Sequelize[_0x4358('0x2')]},'description':{'type':Sequelize[_0x4358('0x2')]},'status':{'type':Sequelize[_0x4358('0x3')],'defaultValue':![]}};
\ No newline at end of file
+var _0x3a1b=['STRING'];(function(_0x6c35f9,_0xf68966){var _0x333da8=function(_0x45fee0){while(--_0x45fee0){_0x6c35f9['push'](_0x6c35f9['shift']());}};_0x333da8(++_0xf68966);}(_0x3a1b,0x78));var _0xb3a1=function(_0xfae23b,_0x2be4ba){_0xfae23b=_0xfae23b-0x0;var _0x200640=_0x3a1b[_0xfae23b];return _0x200640;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0xb3a1('0x0')]},'channel':{'type':Sequelize[_0xb3a1('0x0')]},'description':{'type':Sequelize['STRING']},'status':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
index 6734967..5531e4b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x80c7=['send','index','Trigger','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','key','field','includeAll','include','findAll','rows','catch','show','find','create','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','params','TriggerAllId','Condition','getAllConditions','findOne','pick','options','getAnyConditions','addAction','TriggerId','Action','getActions','html-pdf','eml-format','rimraf','zip-dir','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','then','destroy','get','Triggers','error','stack','name'];(function(_0x2fcd90,_0x4780cc){var _0x55b596=function(_0xe475f6){while(--_0xe475f6){_0x2fcd90['push'](_0x2fcd90['shift']());}};_0x55b596(++_0x4780cc);}(_0x80c7,0x8d));var _0x780c=function(_0x2560ea,_0x5f2274){_0x2560ea=_0x2560ea-0x0;var _0x107621=_0x80c7[_0x2560ea];return _0x107621;};'use strict';var pdf=require(_0x780c('0x0'));var emlformat=require(_0x780c('0x1'));var rimraf=require(_0x780c('0x2'));var zipdir=require(_0x780c('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x780c('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x780c('0x5'));var util=require(_0x780c('0x6'));var path=require(_0x780c('0x7'));var sox=require(_0x780c('0x8'));var csv=require(_0x780c('0x9'));var ejs=require(_0x780c('0xa'));var fs=require('fs');var _=require(_0x780c('0xb'));var squel=require(_0x780c('0xc'));var crypto=require(_0x780c('0xd'));var jsforce=require(_0x780c('0xe'));var deskjs=require(_0x780c('0xf'));var toCsv=require('to-csv');var querystring=require(_0x780c('0x10'));var Papa=require(_0x780c('0x11'));var Redis=require('ioredis');var authService=require(_0x780c('0x12'));var qs=require(_0x780c('0x13'));var hardwareService=require(_0x780c('0x14'));var logger=require('../../config/logger')(_0x780c('0x15'));var utils=require(_0x780c('0x16'));var config=require(_0x780c('0x17'));var db=require(_0x780c('0x18'))['db'];function respondWithStatusCode(_0x97e1de,_0x3b6cf6){_0x3b6cf6=_0x3b6cf6||0xcc;return function(_0x2b09af){if(_0x2b09af){return _0x97e1de[_0x780c('0x19')](_0x3b6cf6);}return _0x97e1de[_0x780c('0x1a')](_0x3b6cf6)[_0x780c('0x1b')]();};}function respondWithResult(_0x422e33,_0x24dc45){_0x24dc45=_0x24dc45||0xc8;return function(_0x5576e9){if(_0x5576e9){return _0x422e33['status'](_0x24dc45)[_0x780c('0x1c')](_0x5576e9);}};}function respondWithFilteredResult(_0x394822,_0x4a98c0){return function(_0x5b74fb){if(_0x5b74fb){var _0x2c8c23=_0x5b74fb[_0x780c('0x1d')],_0xccd8c=_0x4a98c0[_0x780c('0x1e')],_0x21b69b=_0x4a98c0['offset']+_0x4a98c0[_0x780c('0x1f')],_0x2f99d8;if(_0x21b69b>=_0x2c8c23){_0x21b69b=_0x2c8c23;_0x2f99d8=0xc8;}else{_0x2f99d8=0xce;}_0x394822[_0x780c('0x1a')](_0x2f99d8);return _0x394822[_0x780c('0x20')](_0x780c('0x21'),_0xccd8c+'-'+_0x21b69b+'/'+_0x2c8c23)['json'](_0x5b74fb);}return null;};}function patchUpdates(_0xcd171e){return function(_0x2449b7){try{jsonpatch[_0x780c('0x22')](_0x2449b7,_0xcd171e,!![]);}catch(_0x3d5269){return BPromise['reject'](_0x3d5269);}return _0x2449b7[_0x780c('0x23')]();};}function saveUpdates(_0x6ab4c9,_0x48ccb9){return function(_0x4f665d){if(_0x4f665d){return _0x4f665d['update'](_0x6ab4c9)[_0x780c('0x24')](function(_0xe4e284){return _0xe4e284;});}return null;};}function removeEntity(_0x105c5f,_0x2935d4){return function(_0x444905){if(_0x444905){return _0x444905[_0x780c('0x25')]()[_0x780c('0x24')](function(){var _0xe08ff7=_0x444905[_0x780c('0x26')]({'plain':!![]});var _0x21b68a=_0x780c('0x27');return db['UserProfileResource'][_0x780c('0x25')]({'where':{'type':_0x21b68a,'resourceId':_0xe08ff7['id']}})[_0x780c('0x24')](function(){return _0x444905;});})[_0x780c('0x24')](function(){_0x105c5f['status'](0xcc)[_0x780c('0x1b')]();});}};}function handleEntityNotFound(_0x121199,_0x38810b){return function(_0x27e326){if(!_0x27e326){_0x121199[_0x780c('0x19')](0x194);}return _0x27e326;};}function handleError(_0x41a58b,_0x5d675c){_0x5d675c=_0x5d675c||0x1f4;return function(_0x1cb65e){logger[_0x780c('0x28')](_0x1cb65e[_0x780c('0x29')]);if(_0x1cb65e['name']){delete _0x1cb65e[_0x780c('0x2a')];}_0x41a58b[_0x780c('0x1a')](_0x5d675c)[_0x780c('0x2b')](_0x1cb65e);};}exports[_0x780c('0x2c')]=function(_0x26708b,_0x1819bf){var _0x37d6c8={},_0x35b97a={},_0x2a19b1={'count':0x0,'rows':[]};var _0x21f84e=db[_0x780c('0x2d')][_0x780c('0x2e')];_0x35b97a[_0x780c('0x2f')]=_[_0x780c('0x30')](_0x21f84e);_0x35b97a['query']=_[_0x780c('0x30')](_0x26708b[_0x780c('0x31')]);_0x35b97a[_0x780c('0x32')]=_[_0x780c('0x33')](_0x35b97a[_0x780c('0x2f')],_0x35b97a[_0x780c('0x31')]);_0x37d6c8['attributes']=_[_0x780c('0x33')](_0x35b97a[_0x780c('0x2f')],qs[_0x780c('0x34')](_0x26708b[_0x780c('0x31')]['fields']));_0x37d6c8['attributes']=_0x37d6c8[_0x780c('0x35')][_0x780c('0x36')]?_0x37d6c8['attributes']:_0x35b97a['model'];if(!_0x26708b['query'][_0x780c('0x37')](_0x780c('0x38'))){_0x37d6c8[_0x780c('0x1f')]=qs['limit'](_0x26708b[_0x780c('0x31')]['limit']);_0x37d6c8['offset']=qs[_0x780c('0x1e')](_0x26708b[_0x780c('0x31')][_0x780c('0x1e')]);}_0x37d6c8[_0x780c('0x39')]=qs[_0x780c('0x3a')](_0x26708b[_0x780c('0x31')]['sort']);_0x37d6c8[_0x780c('0x3b')]=qs[_0x780c('0x32')](_['pick'](_0x26708b['query'],_0x35b97a[_0x780c('0x32')]));if(_0x26708b[_0x780c('0x31')][_0x780c('0x3c')]){_0x37d6c8[_0x780c('0x3b')]=_[_0x780c('0x3d')](_0x37d6c8[_0x780c('0x3b')],{'$or':_[_0x780c('0x3e')](_0x21f84e,function(_0x328ff1){if(_0x328ff1[_0x780c('0x3f')][_0x780c('0x40')]!=='VIRTUAL'){var _0x3b6c84={};_0x3b6c84[_0x328ff1[_0x780c('0x41')]]={'$like':'%'+_0x26708b['query'][_0x780c('0x3c')]+'%'};return _0x3b6c84;}})});}_0x37d6c8=_[_0x780c('0x3d')]({},_0x37d6c8,_0x26708b['options']);var _0x21b75b={'where':_0x37d6c8['where']};return db[_0x780c('0x2d')][_0x780c('0x1d')](_0x21b75b)[_0x780c('0x24')](function(_0x5b2dfb){_0x2a19b1['count']=_0x5b2dfb;if(_0x26708b[_0x780c('0x31')][_0x780c('0x42')]){_0x37d6c8[_0x780c('0x43')]=[{'all':!![]}];}return db[_0x780c('0x2d')][_0x780c('0x44')](_0x37d6c8);})[_0x780c('0x24')](function(_0x35631a){_0x2a19b1[_0x780c('0x45')]=_0x35631a;return _0x2a19b1;})['then'](respondWithFilteredResult(_0x1819bf,_0x37d6c8))[_0x780c('0x46')](handleError(_0x1819bf,null));};exports[_0x780c('0x47')]=function(_0x5db660,_0x22ceda){var _0x40bb7c={'raw':![],'where':{'id':_0x5db660['params']['id']}},_0x183225={};_0x183225[_0x780c('0x2f')]=_[_0x780c('0x30')](db[_0x780c('0x2d')]['rawAttributes']);_0x183225['query']=_[_0x780c('0x30')](_0x5db660[_0x780c('0x31')]);_0x183225[_0x780c('0x32')]=_[_0x780c('0x33')](_0x183225[_0x780c('0x2f')],_0x183225[_0x780c('0x31')]);_0x40bb7c[_0x780c('0x35')]=_['intersection'](_0x183225['model'],qs[_0x780c('0x34')](_0x5db660[_0x780c('0x31')][_0x780c('0x34')]));_0x40bb7c[_0x780c('0x35')]=_0x40bb7c[_0x780c('0x35')][_0x780c('0x36')]?_0x40bb7c[_0x780c('0x35')]:_0x183225[_0x780c('0x2f')];if(_0x5db660['query'][_0x780c('0x42')]){_0x40bb7c[_0x780c('0x43')]=[{'all':!![]}];}_0x40bb7c=_[_0x780c('0x3d')]({},_0x40bb7c,_0x5db660['options']);return db['Trigger'][_0x780c('0x48')](_0x40bb7c)[_0x780c('0x24')](handleEntityNotFound(_0x22ceda,null))[_0x780c('0x24')](respondWithResult(_0x22ceda,null))[_0x780c('0x46')](handleError(_0x22ceda,null));};exports[_0x780c('0x49')]=function(_0x4979b8,_0x1ebb9a){return db[_0x780c('0x2d')]['create'](_0x4979b8['body'],{})[_0x780c('0x24')](function(_0x59be69){var _0x545ebf=_0x4979b8['user'][_0x780c('0x26')]({'plain':!![]});if(!_0x545ebf)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x545ebf[_0x780c('0x4a')]==='user'){var _0x2deec6=_0x59be69['get']({'plain':!![]});var _0x2eb744=_0x780c('0x27');return db[_0x780c('0x4b')][_0x780c('0x48')]({'where':{'name':_0x2eb744,'userProfileId':_0x545ebf[_0x780c('0x4c')]},'raw':!![]})[_0x780c('0x24')](function(_0x1feb67){if(_0x1feb67&&_0x1feb67[_0x780c('0x4d')]===0x0){return db['UserProfileResource'][_0x780c('0x49')]({'name':_0x2deec6[_0x780c('0x2a')],'resourceId':_0x2deec6['id'],'type':_0x1feb67[_0x780c('0x2a')],'sectionId':_0x1feb67['id']},{})['then'](function(){return _0x59be69;});}else{return _0x59be69;}})[_0x780c('0x46')](function(_0x243c00){logger['error'](_0x780c('0x4e'),_0x243c00);throw _0x243c00;});}return _0x59be69;})[_0x780c('0x24')](respondWithResult(_0x1ebb9a,0xc9))[_0x780c('0x46')](handleError(_0x1ebb9a,null));};exports['update']=function(_0x43f08b,_0x539358){if(_0x43f08b[_0x780c('0x4f')]['id']){delete _0x43f08b[_0x780c('0x4f')]['id'];}return db[_0x780c('0x2d')]['find']({'where':{'id':_0x43f08b['params']['id']}})['then'](handleEntityNotFound(_0x539358,null))[_0x780c('0x24')](saveUpdates(_0x43f08b[_0x780c('0x4f')],null))[_0x780c('0x24')](respondWithResult(_0x539358,null))['catch'](handleError(_0x539358,null));};exports['destroy']=function(_0x5d8088,_0x50ea62){return db[_0x780c('0x2d')][_0x780c('0x48')]({'where':{'id':_0x5d8088[_0x780c('0x50')]['id']}})[_0x780c('0x24')](handleEntityNotFound(_0x50ea62,null))['then'](removeEntity(_0x50ea62,null))[_0x780c('0x46')](handleError(_0x50ea62,null));};exports['addAllCondition']=function(_0x94d2c3,_0xe73fb4,_0x48309d){if(_0x94d2c3[_0x780c('0x4f')]['id']){delete _0x94d2c3['body']['id'];}return db[_0x780c('0x2d')]['find']({'where':{'id':_0x94d2c3[_0x780c('0x50')]['id']}})['then'](handleEntityNotFound(_0xe73fb4,null))[_0x780c('0x24')](function(_0x2e1d35){if(_0x2e1d35){_0x94d2c3[_0x780c('0x4f')][_0x780c('0x51')]=_0x2e1d35['id'];return db[_0x780c('0x52')][_0x780c('0x49')](_0x94d2c3[_0x780c('0x4f')]);}})[_0x780c('0x24')](respondWithResult(_0xe73fb4,null))[_0x780c('0x46')](handleError(_0xe73fb4,null));};exports['addAnyCondition']=function(_0x43325b,_0x18b25e,_0x25f0a1){if(_0x43325b[_0x780c('0x4f')]['id']){delete _0x43325b['body']['id'];}return db[_0x780c('0x2d')][_0x780c('0x48')]({'where':{'id':_0x43325b['params']['id']}})[_0x780c('0x24')](handleEntityNotFound(_0x18b25e,null))[_0x780c('0x24')](function(_0xfdac0c){if(_0xfdac0c){_0x43325b[_0x780c('0x4f')]['TriggerAnyId']=_0xfdac0c['id'];return db[_0x780c('0x52')]['create'](_0x43325b['body']);}})[_0x780c('0x24')](respondWithResult(_0x18b25e,null))[_0x780c('0x46')](handleError(_0x18b25e,null));};exports[_0x780c('0x53')]=function(_0x4fa59c,_0x2671f9,_0x33a6de){var _0x2c0ba8={};var _0x72bf37={};var _0x201c97;var _0x576e22;return db[_0x780c('0x2d')][_0x780c('0x54')]({'where':{'id':_0x4fa59c[_0x780c('0x50')]['id']}})[_0x780c('0x24')](handleEntityNotFound(_0x2671f9,null))[_0x780c('0x24')](function(_0xafabc3){if(_0xafabc3){_0x201c97=_0xafabc3;_0x72bf37[_0x780c('0x2f')]=_[_0x780c('0x30')](db[_0x780c('0x52')][_0x780c('0x2e')]);_0x72bf37[_0x780c('0x31')]=_[_0x780c('0x30')](_0x4fa59c[_0x780c('0x31')]);_0x72bf37[_0x780c('0x32')]=_['intersection'](_0x72bf37['model'],_0x72bf37[_0x780c('0x31')]);_0x2c0ba8[_0x780c('0x35')]=_['intersection'](_0x72bf37[_0x780c('0x2f')],qs[_0x780c('0x34')](_0x4fa59c['query']['fields']));_0x2c0ba8[_0x780c('0x35')]=_0x2c0ba8[_0x780c('0x35')][_0x780c('0x36')]?_0x2c0ba8['attributes']:_0x72bf37['model'];_0x2c0ba8[_0x780c('0x39')]=qs[_0x780c('0x3a')](_0x4fa59c[_0x780c('0x31')]['sort']);_0x2c0ba8[_0x780c('0x3b')]=qs[_0x780c('0x32')](_[_0x780c('0x55')](_0x4fa59c[_0x780c('0x31')],_0x72bf37['filters']));if(_0x4fa59c[_0x780c('0x31')][_0x780c('0x3c')]){_0x2c0ba8[_0x780c('0x3b')]=_[_0x780c('0x3d')](_0x2c0ba8[_0x780c('0x3b')],{'$or':_[_0x780c('0x3e')](_0x2c0ba8[_0x780c('0x35')],function(_0x51f7f9){var _0x29883f={};_0x29883f[_0x51f7f9]={'$like':'%'+_0x4fa59c[_0x780c('0x31')][_0x780c('0x3c')]+'%'};return _0x29883f;})});}_0x2c0ba8=_['merge']({},_0x2c0ba8,_0x4fa59c[_0x780c('0x56')]);return _0x201c97[_0x780c('0x53')](_0x2c0ba8);}})['then'](function(_0x647296){if(_0x647296){_0x576e22=_0x647296[_0x780c('0x36')];if(!_0x4fa59c['query'][_0x780c('0x37')](_0x780c('0x38'))){_0x2c0ba8[_0x780c('0x1f')]=qs[_0x780c('0x1f')](_0x4fa59c[_0x780c('0x31')][_0x780c('0x1f')]);_0x2c0ba8[_0x780c('0x1e')]=qs['offset'](_0x4fa59c[_0x780c('0x31')][_0x780c('0x1e')]);}return _0x201c97[_0x780c('0x53')](_0x2c0ba8);}})[_0x780c('0x24')](function(_0x220a2a){if(_0x220a2a){return _0x220a2a?{'count':_0x576e22,'rows':_0x220a2a}:null;}})['then'](respondWithResult(_0x2671f9,null))['catch'](handleError(_0x2671f9,null));};exports[_0x780c('0x57')]=function(_0x23e073,_0x3e06ad,_0x424c26){var _0x23e266={};var _0x512a24={};var _0x423474;var _0xe6b841;return db[_0x780c('0x2d')][_0x780c('0x54')]({'where':{'id':_0x23e073[_0x780c('0x50')]['id']}})['then'](handleEntityNotFound(_0x3e06ad,null))['then'](function(_0xc1fab2){if(_0xc1fab2){_0x423474=_0xc1fab2;_0x512a24['model']=_['keys'](db[_0x780c('0x52')][_0x780c('0x2e')]);_0x512a24[_0x780c('0x31')]=_[_0x780c('0x30')](_0x23e073[_0x780c('0x31')]);_0x512a24[_0x780c('0x32')]=_[_0x780c('0x33')](_0x512a24[_0x780c('0x2f')],_0x512a24['query']);_0x23e266[_0x780c('0x35')]=_[_0x780c('0x33')](_0x512a24[_0x780c('0x2f')],qs['fields'](_0x23e073[_0x780c('0x31')]['fields']));_0x23e266[_0x780c('0x35')]=_0x23e266[_0x780c('0x35')][_0x780c('0x36')]?_0x23e266[_0x780c('0x35')]:_0x512a24[_0x780c('0x2f')];_0x23e266[_0x780c('0x39')]=qs['sort'](_0x23e073['query'][_0x780c('0x3a')]);_0x23e266[_0x780c('0x3b')]=qs[_0x780c('0x32')](_[_0x780c('0x55')](_0x23e073['query'],_0x512a24[_0x780c('0x32')]));if(_0x23e073['query'][_0x780c('0x3c')]){_0x23e266[_0x780c('0x3b')]=_[_0x780c('0x3d')](_0x23e266['where'],{'$or':_['map'](_0x23e266[_0x780c('0x35')],function(_0x491d40){var _0x452732={};_0x452732[_0x491d40]={'$like':'%'+_0x23e073['query'][_0x780c('0x3c')]+'%'};return _0x452732;})});}_0x23e266=_[_0x780c('0x3d')]({},_0x23e266,_0x23e073[_0x780c('0x56')]);return _0x423474['getAnyConditions'](_0x23e266);}})[_0x780c('0x24')](function(_0x43921c){if(_0x43921c){_0xe6b841=_0x43921c[_0x780c('0x36')];if(!_0x23e073[_0x780c('0x31')][_0x780c('0x37')]('nolimit')){_0x23e266[_0x780c('0x1f')]=qs['limit'](_0x23e073[_0x780c('0x31')][_0x780c('0x1f')]);_0x23e266[_0x780c('0x1e')]=qs['offset'](_0x23e073[_0x780c('0x31')][_0x780c('0x1e')]);}return _0x423474[_0x780c('0x57')](_0x23e266);}})[_0x780c('0x24')](function(_0x6a3a7b){if(_0x6a3a7b){return _0x6a3a7b?{'count':_0xe6b841,'rows':_0x6a3a7b}:null;}})[_0x780c('0x24')](respondWithResult(_0x3e06ad,null))[_0x780c('0x46')](handleError(_0x3e06ad,null));};exports[_0x780c('0x58')]=function(_0x3ff397,_0x251564,_0x5a12c5){if(_0x3ff397['body']['id']){delete _0x3ff397[_0x780c('0x4f')]['id'];}return db[_0x780c('0x2d')][_0x780c('0x48')]({'where':{'id':_0x3ff397[_0x780c('0x50')]['id']}})[_0x780c('0x24')](handleEntityNotFound(_0x251564,null))[_0x780c('0x24')](function(_0xfe66b4){if(_0xfe66b4){_0x3ff397[_0x780c('0x4f')][_0x780c('0x59')]=_0xfe66b4['id'];return db[_0x780c('0x5a')][_0x780c('0x49')](_0x3ff397['body']);}})[_0x780c('0x24')](respondWithResult(_0x251564,null))[_0x780c('0x46')](handleError(_0x251564,null));};exports['getActions']=function(_0x2b1c7e,_0x7b54af,_0x482d9c){var _0x5de7dc={};var _0xf03eba={};var _0x568521;var _0x55080e;return db['Trigger'][_0x780c('0x54')]({'where':{'id':_0x2b1c7e[_0x780c('0x50')]['id']}})[_0x780c('0x24')](handleEntityNotFound(_0x7b54af,null))[_0x780c('0x24')](function(_0x19285f){if(_0x19285f){_0x568521=_0x19285f;_0xf03eba[_0x780c('0x2f')]=_[_0x780c('0x30')](db[_0x780c('0x5a')][_0x780c('0x2e')]);_0xf03eba[_0x780c('0x31')]=_[_0x780c('0x30')](_0x2b1c7e[_0x780c('0x31')]);_0xf03eba['filters']=_[_0x780c('0x33')](_0xf03eba[_0x780c('0x2f')],_0xf03eba[_0x780c('0x31')]);_0x5de7dc['attributes']=_[_0x780c('0x33')](_0xf03eba[_0x780c('0x2f')],qs['fields'](_0x2b1c7e['query'][_0x780c('0x34')]));_0x5de7dc[_0x780c('0x35')]=_0x5de7dc[_0x780c('0x35')][_0x780c('0x36')]?_0x5de7dc[_0x780c('0x35')]:_0xf03eba[_0x780c('0x2f')];_0x5de7dc[_0x780c('0x39')]=qs[_0x780c('0x3a')](_0x2b1c7e['query'][_0x780c('0x3a')]);_0x5de7dc[_0x780c('0x3b')]=qs[_0x780c('0x32')](_[_0x780c('0x55')](_0x2b1c7e['query'],_0xf03eba[_0x780c('0x32')]));if(_0x2b1c7e[_0x780c('0x31')][_0x780c('0x3c')]){_0x5de7dc['where']=_[_0x780c('0x3d')](_0x5de7dc[_0x780c('0x3b')],{'$or':_[_0x780c('0x3e')](_0x5de7dc[_0x780c('0x35')],function(_0x2c5eb4){var _0x5436c3={};_0x5436c3[_0x2c5eb4]={'$like':'%'+_0x2b1c7e[_0x780c('0x31')][_0x780c('0x3c')]+'%'};return _0x5436c3;})});}_0x5de7dc=_[_0x780c('0x3d')]({},_0x5de7dc,_0x2b1c7e[_0x780c('0x56')]);return _0x568521['getActions'](_0x5de7dc);}})[_0x780c('0x24')](function(_0x19dfb5){if(_0x19dfb5){_0x55080e=_0x19dfb5['length'];if(!_0x2b1c7e[_0x780c('0x31')][_0x780c('0x37')](_0x780c('0x38'))){_0x5de7dc[_0x780c('0x1f')]=qs[_0x780c('0x1f')](_0x2b1c7e[_0x780c('0x31')][_0x780c('0x1f')]);_0x5de7dc[_0x780c('0x1e')]=qs[_0x780c('0x1e')](_0x2b1c7e[_0x780c('0x31')]['offset']);}return _0x568521[_0x780c('0x5b')](_0x5de7dc);}})[_0x780c('0x24')](function(_0x6e4ecd){if(_0x6e4ecd){return _0x6e4ecd?{'count':_0x55080e,'rows':_0x6e4ecd}:null;}})[_0x780c('0x24')](respondWithResult(_0x7b54af,null))[_0x780c('0x46')](handleError(_0x7b54af,null));};
\ No newline at end of file
+var _0xca1d=['getActions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','destroy','Triggers','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','fields','attributes','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','Trigger','findAll','rows','catch','show','params','length','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','update','addAllCondition','Condition','addAnyCondition','TriggerAnyId','pick','getAllConditions','hasOwnProperty','nolimit','getAnyConditions','findOne','addAction','Action'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xca1d,0x1e6));var _0xdca1=function(_0x3ba05a,_0x576730){_0x3ba05a=_0x3ba05a-0x0;var _0x7d1cbf=_0xca1d[_0x3ba05a];return _0x7d1cbf;};'use strict';var pdf=require(_0xdca1('0x0'));var emlformat=require(_0xdca1('0x1'));var rimraf=require(_0xdca1('0x2'));var zipdir=require(_0xdca1('0x3'));var jsonpatch=require(_0xdca1('0x4'));var rp=require(_0xdca1('0x5'));var moment=require(_0xdca1('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xdca1('0x7'));var util=require(_0xdca1('0x8'));var path=require('path');var sox=require(_0xdca1('0x9'));var csv=require(_0xdca1('0xa'));var ejs=require(_0xdca1('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0xdca1('0xc'));var crypto=require(_0xdca1('0xd'));var jsforce=require(_0xdca1('0xe'));var deskjs=require(_0xdca1('0xf'));var toCsv=require(_0xdca1('0xa'));var querystring=require('querystring');var Papa=require(_0xdca1('0x10'));var Redis=require(_0xdca1('0x11'));var authService=require(_0xdca1('0x12'));var qs=require(_0xdca1('0x13'));var hardwareService=require(_0xdca1('0x14'));var logger=require(_0xdca1('0x15'))('api');var utils=require(_0xdca1('0x16'));var config=require(_0xdca1('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3709ca,_0x313d48){_0x313d48=_0x313d48||0xcc;return function(_0xb3c445){if(_0xb3c445){return _0x3709ca[_0xdca1('0x18')](_0x313d48);}return _0x3709ca[_0xdca1('0x19')](_0x313d48)[_0xdca1('0x1a')]();};}function respondWithResult(_0x4c102d,_0x2272cb){_0x2272cb=_0x2272cb||0xc8;return function(_0x5aa74c){if(_0x5aa74c){return _0x4c102d[_0xdca1('0x19')](_0x2272cb)[_0xdca1('0x1b')](_0x5aa74c);}};}function respondWithFilteredResult(_0x25126b,_0x285411){return function(_0xd88192){if(_0xd88192){var _0xd65f29=_0xd88192[_0xdca1('0x1c')],_0x375590=_0x285411[_0xdca1('0x1d')],_0x4ba1e9=_0x285411[_0xdca1('0x1d')]+_0x285411[_0xdca1('0x1e')],_0x5b7399;if(_0x4ba1e9>=_0xd65f29){_0x4ba1e9=_0xd65f29;_0x5b7399=0xc8;}else{_0x5b7399=0xce;}_0x25126b[_0xdca1('0x19')](_0x5b7399);return _0x25126b[_0xdca1('0x1f')](_0xdca1('0x20'),_0x375590+'-'+_0x4ba1e9+'/'+_0xd65f29)[_0xdca1('0x1b')](_0xd88192);}return null;};}function patchUpdates(_0x3baf6a){return function(_0x28cf4f){try{jsonpatch[_0xdca1('0x21')](_0x28cf4f,_0x3baf6a,!![]);}catch(_0x44377f){return BPromise[_0xdca1('0x22')](_0x44377f);}return _0x28cf4f[_0xdca1('0x23')]();};}function saveUpdates(_0x1bc4b0,_0x72ba80){return function(_0xe84014){if(_0xe84014){return _0xe84014['update'](_0x1bc4b0)[_0xdca1('0x24')](function(_0x366e00){return _0x366e00;});}return null;};}function removeEntity(_0x418dc5,_0x34463d){return function(_0x46ec7c){if(_0x46ec7c){return _0x46ec7c[_0xdca1('0x25')]()[_0xdca1('0x24')](function(){var _0x9443ce=_0x46ec7c['get']({'plain':!![]});var _0x45a2a8=_0xdca1('0x26');return db['UserProfileResource'][_0xdca1('0x25')]({'where':{'type':_0x45a2a8,'resourceId':_0x9443ce['id']}})[_0xdca1('0x24')](function(){return _0x46ec7c;});})[_0xdca1('0x24')](function(){_0x418dc5[_0xdca1('0x19')](0xcc)[_0xdca1('0x1a')]();});}};}function handleEntityNotFound(_0x363165,_0x16bb98){return function(_0x22046d){if(!_0x22046d){_0x363165[_0xdca1('0x18')](0x194);}return _0x22046d;};}function handleError(_0x124e36,_0x55903a){_0x55903a=_0x55903a||0x1f4;return function(_0x224384){logger[_0xdca1('0x27')](_0x224384[_0xdca1('0x28')]);if(_0x224384['name']){delete _0x224384[_0xdca1('0x29')];}_0x124e36[_0xdca1('0x19')](_0x55903a)[_0xdca1('0x2a')](_0x224384);};}exports[_0xdca1('0x2b')]=function(_0x4c718b,_0x2269f5){var _0x1c7035={},_0x3bc034={},_0x1e1dd0={'count':0x0,'rows':[]};var _0x2b938e=db['Trigger'][_0xdca1('0x2c')];_0x3bc034[_0xdca1('0x2d')]=_[_0xdca1('0x2e')](_0x2b938e);_0x3bc034[_0xdca1('0x2f')]=_[_0xdca1('0x2e')](_0x4c718b[_0xdca1('0x2f')]);_0x3bc034[_0xdca1('0x30')]=_[_0xdca1('0x31')](_0x3bc034['model'],_0x3bc034[_0xdca1('0x2f')]);_0x1c7035['attributes']=_[_0xdca1('0x31')](_0x3bc034[_0xdca1('0x2d')],qs[_0xdca1('0x32')](_0x4c718b['query']['fields']));_0x1c7035[_0xdca1('0x33')]=_0x1c7035[_0xdca1('0x33')]['length']?_0x1c7035[_0xdca1('0x33')]:_0x3bc034['model'];if(!_0x4c718b[_0xdca1('0x2f')]['hasOwnProperty']('nolimit')){_0x1c7035[_0xdca1('0x1e')]=qs[_0xdca1('0x1e')](_0x4c718b[_0xdca1('0x2f')]['limit']);_0x1c7035[_0xdca1('0x1d')]=qs[_0xdca1('0x1d')](_0x4c718b['query'][_0xdca1('0x1d')]);}_0x1c7035[_0xdca1('0x34')]=qs[_0xdca1('0x35')](_0x4c718b[_0xdca1('0x2f')]['sort']);_0x1c7035[_0xdca1('0x36')]=qs[_0xdca1('0x30')](_['pick'](_0x4c718b[_0xdca1('0x2f')],_0x3bc034[_0xdca1('0x30')]));if(_0x4c718b['query'][_0xdca1('0x37')]){_0x1c7035['where']=_[_0xdca1('0x38')](_0x1c7035[_0xdca1('0x36')],{'$or':_[_0xdca1('0x39')](_0x2b938e,function(_0x2daa42){if(_0x2daa42[_0xdca1('0x3a')][_0xdca1('0x3b')]!==_0xdca1('0x3c')){var _0x33f904={};_0x33f904[_0x2daa42[_0xdca1('0x3d')]]={'$like':'%'+_0x4c718b['query'][_0xdca1('0x37')]+'%'};return _0x33f904;}})});}_0x1c7035=_['merge']({},_0x1c7035,_0x4c718b[_0xdca1('0x3e')]);var _0x34c13e={'where':_0x1c7035['where']};return db['Trigger'][_0xdca1('0x1c')](_0x34c13e)[_0xdca1('0x24')](function(_0x4b49b5){_0x1e1dd0['count']=_0x4b49b5;if(_0x4c718b[_0xdca1('0x2f')][_0xdca1('0x3f')]){_0x1c7035[_0xdca1('0x40')]=[{'all':!![]}];}return db[_0xdca1('0x41')][_0xdca1('0x42')](_0x1c7035);})[_0xdca1('0x24')](function(_0x832440){_0x1e1dd0[_0xdca1('0x43')]=_0x832440;return _0x1e1dd0;})[_0xdca1('0x24')](respondWithFilteredResult(_0x2269f5,_0x1c7035))[_0xdca1('0x44')](handleError(_0x2269f5,null));};exports[_0xdca1('0x45')]=function(_0x4cacb2,_0x2f39f6){var _0x433304={'raw':![],'where':{'id':_0x4cacb2[_0xdca1('0x46')]['id']}},_0x138c80={};_0x138c80[_0xdca1('0x2d')]=_[_0xdca1('0x2e')](db['Trigger'][_0xdca1('0x2c')]);_0x138c80['query']=_[_0xdca1('0x2e')](_0x4cacb2[_0xdca1('0x2f')]);_0x138c80['filters']=_[_0xdca1('0x31')](_0x138c80[_0xdca1('0x2d')],_0x138c80[_0xdca1('0x2f')]);_0x433304['attributes']=_[_0xdca1('0x31')](_0x138c80[_0xdca1('0x2d')],qs[_0xdca1('0x32')](_0x4cacb2[_0xdca1('0x2f')][_0xdca1('0x32')]));_0x433304[_0xdca1('0x33')]=_0x433304[_0xdca1('0x33')][_0xdca1('0x47')]?_0x433304[_0xdca1('0x33')]:_0x138c80[_0xdca1('0x2d')];if(_0x4cacb2[_0xdca1('0x2f')][_0xdca1('0x3f')]){_0x433304[_0xdca1('0x40')]=[{'all':!![]}];}_0x433304=_['merge']({},_0x433304,_0x4cacb2[_0xdca1('0x3e')]);return db[_0xdca1('0x41')][_0xdca1('0x48')](_0x433304)[_0xdca1('0x24')](handleEntityNotFound(_0x2f39f6,null))['then'](respondWithResult(_0x2f39f6,null))[_0xdca1('0x44')](handleError(_0x2f39f6,null));};exports[_0xdca1('0x49')]=function(_0x2fe64b,_0x58e862){return db['Trigger'][_0xdca1('0x49')](_0x2fe64b[_0xdca1('0x4a')],{})[_0xdca1('0x24')](function(_0x2cdf9e){var _0x3a5a98=_0x2fe64b[_0xdca1('0x4b')][_0xdca1('0x4c')]({'plain':!![]});if(!_0x3a5a98)throw new Error(_0xdca1('0x4d'));if(_0x3a5a98[_0xdca1('0x4e')]===_0xdca1('0x4b')){var _0x1a6a02=_0x2cdf9e['get']({'plain':!![]});var _0x2857bb=_0xdca1('0x26');return db[_0xdca1('0x4f')]['find']({'where':{'name':_0x2857bb,'userProfileId':_0x3a5a98[_0xdca1('0x50')]},'raw':!![]})[_0xdca1('0x24')](function(_0x1e89b0){if(_0x1e89b0&&_0x1e89b0[_0xdca1('0x51')]===0x0){return db[_0xdca1('0x52')][_0xdca1('0x49')]({'name':_0x1a6a02[_0xdca1('0x29')],'resourceId':_0x1a6a02['id'],'type':_0x1e89b0[_0xdca1('0x29')],'sectionId':_0x1e89b0['id']},{})[_0xdca1('0x24')](function(){return _0x2cdf9e;});}else{return _0x2cdf9e;}})[_0xdca1('0x44')](function(_0x5d85cd){logger[_0xdca1('0x27')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x5d85cd);throw _0x5d85cd;});}return _0x2cdf9e;})['then'](respondWithResult(_0x58e862,0xc9))[_0xdca1('0x44')](handleError(_0x58e862,null));};exports[_0xdca1('0x53')]=function(_0x1f39b8,_0x5899c0){if(_0x1f39b8['body']['id']){delete _0x1f39b8['body']['id'];}return db[_0xdca1('0x41')][_0xdca1('0x48')]({'where':{'id':_0x1f39b8['params']['id']}})[_0xdca1('0x24')](handleEntityNotFound(_0x5899c0,null))[_0xdca1('0x24')](saveUpdates(_0x1f39b8[_0xdca1('0x4a')],null))['then'](respondWithResult(_0x5899c0,null))[_0xdca1('0x44')](handleError(_0x5899c0,null));};exports[_0xdca1('0x25')]=function(_0x5593a9,_0x31d671){return db['Trigger'][_0xdca1('0x48')]({'where':{'id':_0x5593a9[_0xdca1('0x46')]['id']}})[_0xdca1('0x24')](handleEntityNotFound(_0x31d671,null))[_0xdca1('0x24')](removeEntity(_0x31d671,null))[_0xdca1('0x44')](handleError(_0x31d671,null));};exports[_0xdca1('0x54')]=function(_0x304055,_0x489ee3,_0x4fd9d2){if(_0x304055[_0xdca1('0x4a')]['id']){delete _0x304055[_0xdca1('0x4a')]['id'];}return db['Trigger'][_0xdca1('0x48')]({'where':{'id':_0x304055['params']['id']}})[_0xdca1('0x24')](handleEntityNotFound(_0x489ee3,null))['then'](function(_0x89db0e){if(_0x89db0e){_0x304055[_0xdca1('0x4a')]['TriggerAllId']=_0x89db0e['id'];return db[_0xdca1('0x55')]['create'](_0x304055['body']);}})['then'](respondWithResult(_0x489ee3,null))[_0xdca1('0x44')](handleError(_0x489ee3,null));};exports[_0xdca1('0x56')]=function(_0x28c5b7,_0x4a27b1,_0x399dec){if(_0x28c5b7[_0xdca1('0x4a')]['id']){delete _0x28c5b7[_0xdca1('0x4a')]['id'];}return db[_0xdca1('0x41')]['find']({'where':{'id':_0x28c5b7[_0xdca1('0x46')]['id']}})[_0xdca1('0x24')](handleEntityNotFound(_0x4a27b1,null))[_0xdca1('0x24')](function(_0x49e2b4){if(_0x49e2b4){_0x28c5b7[_0xdca1('0x4a')][_0xdca1('0x57')]=_0x49e2b4['id'];return db[_0xdca1('0x55')][_0xdca1('0x49')](_0x28c5b7['body']);}})[_0xdca1('0x24')](respondWithResult(_0x4a27b1,null))['catch'](handleError(_0x4a27b1,null));};exports['getAllConditions']=function(_0x560039,_0x409427,_0x3c0b2c){var _0xf7b1ad={};var _0x2139b2={};var _0x543d2f;var _0x539153;return db[_0xdca1('0x41')]['findOne']({'where':{'id':_0x560039['params']['id']}})[_0xdca1('0x24')](handleEntityNotFound(_0x409427,null))[_0xdca1('0x24')](function(_0x1a7761){if(_0x1a7761){_0x543d2f=_0x1a7761;_0x2139b2[_0xdca1('0x2d')]=_[_0xdca1('0x2e')](db[_0xdca1('0x55')][_0xdca1('0x2c')]);_0x2139b2[_0xdca1('0x2f')]=_[_0xdca1('0x2e')](_0x560039['query']);_0x2139b2[_0xdca1('0x30')]=_[_0xdca1('0x31')](_0x2139b2[_0xdca1('0x2d')],_0x2139b2[_0xdca1('0x2f')]);_0xf7b1ad['attributes']=_['intersection'](_0x2139b2[_0xdca1('0x2d')],qs[_0xdca1('0x32')](_0x560039[_0xdca1('0x2f')]['fields']));_0xf7b1ad[_0xdca1('0x33')]=_0xf7b1ad[_0xdca1('0x33')]['length']?_0xf7b1ad[_0xdca1('0x33')]:_0x2139b2[_0xdca1('0x2d')];_0xf7b1ad['order']=qs[_0xdca1('0x35')](_0x560039['query'][_0xdca1('0x35')]);_0xf7b1ad[_0xdca1('0x36')]=qs[_0xdca1('0x30')](_[_0xdca1('0x58')](_0x560039['query'],_0x2139b2['filters']));if(_0x560039[_0xdca1('0x2f')][_0xdca1('0x37')]){_0xf7b1ad[_0xdca1('0x36')]=_[_0xdca1('0x38')](_0xf7b1ad[_0xdca1('0x36')],{'$or':_[_0xdca1('0x39')](_0xf7b1ad['attributes'],function(_0x571efb){var _0x20594c={};_0x20594c[_0x571efb]={'$like':'%'+_0x560039[_0xdca1('0x2f')]['filter']+'%'};return _0x20594c;})});}_0xf7b1ad=_['merge']({},_0xf7b1ad,_0x560039['options']);return _0x543d2f[_0xdca1('0x59')](_0xf7b1ad);}})['then'](function(_0xc0bf2){if(_0xc0bf2){_0x539153=_0xc0bf2['length'];if(!_0x560039[_0xdca1('0x2f')][_0xdca1('0x5a')](_0xdca1('0x5b'))){_0xf7b1ad[_0xdca1('0x1e')]=qs['limit'](_0x560039['query'][_0xdca1('0x1e')]);_0xf7b1ad['offset']=qs[_0xdca1('0x1d')](_0x560039['query']['offset']);}return _0x543d2f[_0xdca1('0x59')](_0xf7b1ad);}})[_0xdca1('0x24')](function(_0x492cf7){if(_0x492cf7){return _0x492cf7?{'count':_0x539153,'rows':_0x492cf7}:null;}})[_0xdca1('0x24')](respondWithResult(_0x409427,null))[_0xdca1('0x44')](handleError(_0x409427,null));};exports[_0xdca1('0x5c')]=function(_0x6a5887,_0x1b6b39,_0x2c1e58){var _0x4f7f8b={};var _0x2c1aef={};var _0x6c3095;var _0x47929e;return db[_0xdca1('0x41')][_0xdca1('0x5d')]({'where':{'id':_0x6a5887[_0xdca1('0x46')]['id']}})['then'](handleEntityNotFound(_0x1b6b39,null))[_0xdca1('0x24')](function(_0x3c42ff){if(_0x3c42ff){_0x6c3095=_0x3c42ff;_0x2c1aef[_0xdca1('0x2d')]=_[_0xdca1('0x2e')](db[_0xdca1('0x55')][_0xdca1('0x2c')]);_0x2c1aef[_0xdca1('0x2f')]=_[_0xdca1('0x2e')](_0x6a5887['query']);_0x2c1aef['filters']=_[_0xdca1('0x31')](_0x2c1aef[_0xdca1('0x2d')],_0x2c1aef['query']);_0x4f7f8b['attributes']=_[_0xdca1('0x31')](_0x2c1aef[_0xdca1('0x2d')],qs[_0xdca1('0x32')](_0x6a5887['query']['fields']));_0x4f7f8b[_0xdca1('0x33')]=_0x4f7f8b[_0xdca1('0x33')][_0xdca1('0x47')]?_0x4f7f8b[_0xdca1('0x33')]:_0x2c1aef[_0xdca1('0x2d')];_0x4f7f8b[_0xdca1('0x34')]=qs[_0xdca1('0x35')](_0x6a5887['query']['sort']);_0x4f7f8b[_0xdca1('0x36')]=qs[_0xdca1('0x30')](_[_0xdca1('0x58')](_0x6a5887[_0xdca1('0x2f')],_0x2c1aef[_0xdca1('0x30')]));if(_0x6a5887['query']['filter']){_0x4f7f8b['where']=_['merge'](_0x4f7f8b[_0xdca1('0x36')],{'$or':_[_0xdca1('0x39')](_0x4f7f8b[_0xdca1('0x33')],function(_0x455507){var _0x52cabc={};_0x52cabc[_0x455507]={'$like':'%'+_0x6a5887[_0xdca1('0x2f')][_0xdca1('0x37')]+'%'};return _0x52cabc;})});}_0x4f7f8b=_['merge']({},_0x4f7f8b,_0x6a5887[_0xdca1('0x3e')]);return _0x6c3095['getAnyConditions'](_0x4f7f8b);}})[_0xdca1('0x24')](function(_0x59e56d){if(_0x59e56d){_0x47929e=_0x59e56d[_0xdca1('0x47')];if(!_0x6a5887[_0xdca1('0x2f')][_0xdca1('0x5a')](_0xdca1('0x5b'))){_0x4f7f8b[_0xdca1('0x1e')]=qs[_0xdca1('0x1e')](_0x6a5887[_0xdca1('0x2f')][_0xdca1('0x1e')]);_0x4f7f8b[_0xdca1('0x1d')]=qs[_0xdca1('0x1d')](_0x6a5887['query'][_0xdca1('0x1d')]);}return _0x6c3095[_0xdca1('0x5c')](_0x4f7f8b);}})[_0xdca1('0x24')](function(_0x370b87){if(_0x370b87){return _0x370b87?{'count':_0x47929e,'rows':_0x370b87}:null;}})['then'](respondWithResult(_0x1b6b39,null))[_0xdca1('0x44')](handleError(_0x1b6b39,null));};exports[_0xdca1('0x5e')]=function(_0x187206,_0x5e6855,_0x3a8b22){if(_0x187206['body']['id']){delete _0x187206[_0xdca1('0x4a')]['id'];}return db[_0xdca1('0x41')][_0xdca1('0x48')]({'where':{'id':_0x187206[_0xdca1('0x46')]['id']}})['then'](handleEntityNotFound(_0x5e6855,null))['then'](function(_0x3743f6){if(_0x3743f6){_0x187206[_0xdca1('0x4a')]['TriggerId']=_0x3743f6['id'];return db['Action'][_0xdca1('0x49')](_0x187206['body']);}})[_0xdca1('0x24')](respondWithResult(_0x5e6855,null))[_0xdca1('0x44')](handleError(_0x5e6855,null));};exports['getActions']=function(_0x22d733,_0x55dcc6,_0x3e112e){var _0x53d710={};var _0x1f7c35={};var _0x235baf;var _0x40bc3e;return db['Trigger']['findOne']({'where':{'id':_0x22d733['params']['id']}})[_0xdca1('0x24')](handleEntityNotFound(_0x55dcc6,null))[_0xdca1('0x24')](function(_0x270df8){if(_0x270df8){_0x235baf=_0x270df8;_0x1f7c35[_0xdca1('0x2d')]=_[_0xdca1('0x2e')](db[_0xdca1('0x5f')]['rawAttributes']);_0x1f7c35['query']=_['keys'](_0x22d733['query']);_0x1f7c35['filters']=_[_0xdca1('0x31')](_0x1f7c35[_0xdca1('0x2d')],_0x1f7c35[_0xdca1('0x2f')]);_0x53d710[_0xdca1('0x33')]=_['intersection'](_0x1f7c35[_0xdca1('0x2d')],qs['fields'](_0x22d733['query'][_0xdca1('0x32')]));_0x53d710[_0xdca1('0x33')]=_0x53d710['attributes']['length']?_0x53d710[_0xdca1('0x33')]:_0x1f7c35['model'];_0x53d710[_0xdca1('0x34')]=qs[_0xdca1('0x35')](_0x22d733[_0xdca1('0x2f')][_0xdca1('0x35')]);_0x53d710[_0xdca1('0x36')]=qs[_0xdca1('0x30')](_[_0xdca1('0x58')](_0x22d733[_0xdca1('0x2f')],_0x1f7c35[_0xdca1('0x30')]));if(_0x22d733[_0xdca1('0x2f')][_0xdca1('0x37')]){_0x53d710[_0xdca1('0x36')]=_[_0xdca1('0x38')](_0x53d710['where'],{'$or':_['map'](_0x53d710[_0xdca1('0x33')],function(_0x5f4b6e){var _0x5a7ac8={};_0x5a7ac8[_0x5f4b6e]={'$like':'%'+_0x22d733[_0xdca1('0x2f')][_0xdca1('0x37')]+'%'};return _0x5a7ac8;})});}_0x53d710=_[_0xdca1('0x38')]({},_0x53d710,_0x22d733[_0xdca1('0x3e')]);return _0x235baf[_0xdca1('0x60')](_0x53d710);}})[_0xdca1('0x24')](function(_0x4299a4){if(_0x4299a4){_0x40bc3e=_0x4299a4[_0xdca1('0x47')];if(!_0x22d733[_0xdca1('0x2f')][_0xdca1('0x5a')]('nolimit')){_0x53d710[_0xdca1('0x1e')]=qs[_0xdca1('0x1e')](_0x22d733[_0xdca1('0x2f')][_0xdca1('0x1e')]);_0x53d710[_0xdca1('0x1d')]=qs[_0xdca1('0x1d')](_0x22d733['query'][_0xdca1('0x1d')]);}return _0x235baf[_0xdca1('0x60')](_0x53d710);}})['then'](function(_0x4ea8df){if(_0x4ea8df){return _0x4ea8df?{'count':_0x40bc3e,'rows':_0x4ea8df}:null;}})[_0xdca1('0x24')](respondWithResult(_0x55dcc6,null))[_0xdca1('0x44')](handleError(_0x55dcc6,null));};
\ No newline at end of file
index 0dd5e05..66536a9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa88=['util','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment','./trigger.attributes','Trigger','tools_triggers','lodash'];(function(_0x442bdb,_0x4aeb16){var _0x2e985f=function(_0x97f1bf){while(--_0x97f1bf){_0x442bdb['push'](_0x442bdb['shift']());}};_0x2e985f(++_0x4aeb16);}(_0xaa88,0x137));var _0x8aa8=function(_0x9aada2,_0xd2d349){_0x9aada2=_0x9aada2-0x0;var _0x196dff=_0xaa88[_0x9aada2];return _0x196dff;};'use strict';var _=require(_0x8aa8('0x0'));var util=require(_0x8aa8('0x1'));var logger=require(_0x8aa8('0x2'))(_0x8aa8('0x3'));var moment=require('moment');var BPromise=require(_0x8aa8('0x4'));var rp=require(_0x8aa8('0x5'));var fs=require('fs');var path=require(_0x8aa8('0x6'));var rimraf=require(_0x8aa8('0x7'));var config=require(_0x8aa8('0x8'));var attributes=require(_0x8aa8('0x9'));module['exports']=function(_0x5bda0d,_0x460042){return _0x5bda0d['define'](_0x8aa8('0xa'),attributes,{'tableName':_0x8aa8('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9ffd=['Trigger','tools_triggers','lodash','util','../../config/logger','moment','bluebird','request-promise','path','../../config/environment','./trigger.attributes','define'];(function(_0x4b1665,_0xb0c095){var _0x5850c0=function(_0x44b7a4){while(--_0x44b7a4){_0x4b1665['push'](_0x4b1665['shift']());}};_0x5850c0(++_0xb0c095);}(_0x9ffd,0xaa));var _0xd9ff=function(_0x56f82c,_0x22ecbc){_0x56f82c=_0x56f82c-0x0;var _0x51c43d=_0x9ffd[_0x56f82c];return _0x51c43d;};'use strict';var _=require(_0xd9ff('0x0'));var util=require(_0xd9ff('0x1'));var logger=require(_0xd9ff('0x2'))('api');var moment=require(_0xd9ff('0x3'));var BPromise=require(_0xd9ff('0x4'));var rp=require(_0xd9ff('0x5'));var fs=require('fs');var path=require(_0xd9ff('0x6'));var rimraf=require('rimraf');var config=require(_0xd9ff('0x7'));var attributes=require(_0xd9ff('0x8'));module['exports']=function(_0x3aa26b,_0x2982c3){return _0x3aa26b[_0xd9ff('0x9')](_0xd9ff('0xa'),attributes,{'tableName':_0xd9ff('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a159d38..e8d18d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc78a=['model','GetTrigger','ShowTrigger','find','map','lodash','util','randomstring','ioredis','../../config/logger','rpc','jayson/promise','client','http','request','then','info','Trigger,\x20%s,\x20%s','debug','Trigger,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','Trigger','raw','options','where','attributes','include'];(function(_0x23ec06,_0x561142){var _0x2831d4=function(_0x3802bc){while(--_0x3802bc){_0x23ec06['push'](_0x23ec06['shift']());}};_0x2831d4(++_0x561142);}(_0xc78a,0x191));var _0xac78=function(_0x55fe01,_0x12ed37){_0x55fe01=_0x55fe01-0x0;var _0x5b42f0=_0xc78a[_0x55fe01];return _0x5b42f0;};'use strict';var _=require(_0xac78('0x0'));var util=require(_0xac78('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xac78('0x2'));var fs=require('fs');var Redis=require(_0xac78('0x3'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xac78('0x4'))(_0xac78('0x5'));var config=require('../../config/environment');var jayson=require(_0xac78('0x6'));var client=jayson[_0xac78('0x7')][_0xac78('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x3a49e6,_0x5f3562,_0x2635bf){return new BPromise(function(_0x1c9ee0,_0x10707b){return client[_0xac78('0x9')](_0x3a49e6,_0x2635bf)[_0xac78('0xa')](function(_0x5ebfe2){logger[_0xac78('0xb')](_0xac78('0xc'),_0x5f3562,'request\x20sent');logger[_0xac78('0xd')](_0xac78('0xe'),_0x5f3562,'request\x20sent',JSON[_0xac78('0xf')](_0x5ebfe2));if(_0x5ebfe2['error']){if(_0x5ebfe2[_0xac78('0x10')][_0xac78('0x11')]===0x1f4){logger[_0xac78('0x10')]('Trigger,\x20%s,\x20%s',_0x5f3562,_0x5ebfe2[_0xac78('0x10')][_0xac78('0x12')]);return _0x10707b(_0x5ebfe2[_0xac78('0x10')]['message']);}logger['error'](_0xac78('0xc'),_0x5f3562,_0x5ebfe2['error'][_0xac78('0x12')]);return _0x1c9ee0(_0x5ebfe2[_0xac78('0x10')][_0xac78('0x12')]);}else{logger[_0xac78('0xb')](_0xac78('0xc'),_0x5f3562,_0xac78('0x13'));_0x1c9ee0(_0x5ebfe2[_0xac78('0x14')][_0xac78('0x12')]);}})[_0xac78('0x15')](function(_0x210f52){logger[_0xac78('0x10')](_0xac78('0xc'),_0x5f3562,_0x210f52);_0x10707b(_0x210f52);});});}exports['GetTrigger']=function(_0x218f12){var _0xa55c30=this;return new Promise(function(_0x4f08cd,_0x5b2c6d){return db[_0xac78('0x16')]['findAll']({'raw':_0x218f12['options']?_0x218f12['options'][_0xac78('0x17')]===undefined?!![]:![]:!![],'where':_0x218f12[_0xac78('0x18')]?_0x218f12['options'][_0xac78('0x19')]||null:null,'attributes':_0x218f12[_0xac78('0x18')]?_0x218f12[_0xac78('0x18')][_0xac78('0x1a')]||null:null,'limit':_0x218f12['options']?_0x218f12[_0xac78('0x18')]['limit']||null:null,'include':_0x218f12[_0xac78('0x18')]?_0x218f12[_0xac78('0x18')][_0xac78('0x1b')]?_['map'](_0x218f12[_0xac78('0x18')]['include'],function(_0xf43a58){return{'model':db[_0xf43a58['model']],'as':_0xf43a58['as'],'attributes':_0xf43a58[_0xac78('0x1a')],'include':_0xf43a58[_0xac78('0x1b')]?_['map'](_0xf43a58[_0xac78('0x1b')],function(_0x4d64e3){return{'model':db[_0x4d64e3[_0xac78('0x1c')]],'as':_0x4d64e3['as'],'attributes':_0x4d64e3[_0xac78('0x1a')],'include':_0x4d64e3[_0xac78('0x1b')]?_['map'](_0x4d64e3['include'],function(_0xadf415){return{'model':db[_0xadf415[_0xac78('0x1c')]],'as':_0xadf415['as'],'attributes':_0xadf415[_0xac78('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xac78('0xa')](function(_0x34bdd1){logger[_0xac78('0xb')](_0xac78('0x1d'),_0x218f12);logger['debug'](_0xac78('0x1d'),_0x218f12,JSON[_0xac78('0xf')](_0x34bdd1));_0x4f08cd(_0x34bdd1);})['catch'](function(_0x4039b6){logger[_0xac78('0x10')](_0xac78('0x1d'),_0x4039b6['message'],_0x218f12);_0x5b2c6d(_0xa55c30['error'](0x1f4,_0x4039b6[_0xac78('0x12')]));});});};exports[_0xac78('0x1e')]=function(_0x557acd){var _0x36a7d1=this;return new Promise(function(_0x25b7a1,_0x3e0cbf){return db[_0xac78('0x16')][_0xac78('0x1f')]({'raw':_0x557acd[_0xac78('0x18')]?_0x557acd['options']['raw']===undefined?!![]:![]:!![],'where':_0x557acd[_0xac78('0x18')]?_0x557acd[_0xac78('0x18')][_0xac78('0x19')]||null:null,'attributes':_0x557acd[_0xac78('0x18')]?_0x557acd[_0xac78('0x18')][_0xac78('0x1a')]||null:null,'include':_0x557acd['options']?_0x557acd[_0xac78('0x18')][_0xac78('0x1b')]?_[_0xac78('0x20')](_0x557acd[_0xac78('0x18')]['include'],function(_0x1ae2c4){return{'model':db[_0x1ae2c4[_0xac78('0x1c')]],'as':_0x1ae2c4['as'],'attributes':_0x1ae2c4['attributes'],'include':_0x1ae2c4[_0xac78('0x1b')]?_[_0xac78('0x20')](_0x1ae2c4[_0xac78('0x1b')],function(_0x336fa9){return{'model':db[_0x336fa9['model']],'as':_0x336fa9['as'],'attributes':_0x336fa9[_0xac78('0x1a')],'include':_0x336fa9[_0xac78('0x1b')]?_[_0xac78('0x20')](_0x336fa9['include'],function(_0x5e6b8a){return{'model':db[_0x5e6b8a[_0xac78('0x1c')]],'as':_0x5e6b8a['as'],'attributes':_0x5e6b8a[_0xac78('0x1a')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x4ced5c){logger[_0xac78('0xb')](_0xac78('0x1e'),_0x557acd);logger[_0xac78('0xd')](_0xac78('0x1e'),_0x557acd,JSON[_0xac78('0xf')](_0x4ced5c));_0x25b7a1(_0x4ced5c);})[_0xac78('0x15')](function(_0x37e175){logger[_0xac78('0x10')](_0xac78('0x1e'),_0x37e175[_0xac78('0x12')],_0x557acd);_0x3e0cbf(_0x36a7d1[_0xac78('0x10')](0x1f4,_0x37e175[_0xac78('0x12')]));});});};
\ No newline at end of file
+var _0xbb24=['debug','Trigger,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','GetTrigger','findAll','options','raw','attributes','limit','include','map','model','catch','ShowTrigger','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','client','http','request','then','info','Trigger,\x20%s,\x20%s','request\x20sent'];(function(_0x5f3312,_0x24db18){var _0x29463e=function(_0x332085){while(--_0x332085){_0x5f3312['push'](_0x5f3312['shift']());}};_0x29463e(++_0x24db18);}(_0xbb24,0x1cc));var _0x4bb2=function(_0x2571ea,_0x52a95e){_0x2571ea=_0x2571ea-0x0;var _0x5805b3=_0xbb24[_0x2571ea];return _0x5805b3;};'use strict';var _=require(_0x4bb2('0x0'));var util=require(_0x4bb2('0x1'));var moment=require(_0x4bb2('0x2'));var BPromise=require(_0x4bb2('0x3'));var rs=require(_0x4bb2('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x4bb2('0x5'))['db'];var utils=require(_0x4bb2('0x6'));var logger=require('../../config/logger')(_0x4bb2('0x7'));var config=require(_0x4bb2('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x4bb2('0x9')][_0x4bb2('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x555639,_0x192ff5,_0xaeb072){return new BPromise(function(_0x585053,_0x11c861){return client[_0x4bb2('0xb')](_0x555639,_0xaeb072)[_0x4bb2('0xc')](function(_0x32b511){logger[_0x4bb2('0xd')](_0x4bb2('0xe'),_0x192ff5,_0x4bb2('0xf'));logger[_0x4bb2('0x10')](_0x4bb2('0x11'),_0x192ff5,_0x4bb2('0xf'),JSON[_0x4bb2('0x12')](_0x32b511));if(_0x32b511[_0x4bb2('0x13')]){if(_0x32b511[_0x4bb2('0x13')][_0x4bb2('0x14')]===0x1f4){logger[_0x4bb2('0x13')](_0x4bb2('0xe'),_0x192ff5,_0x32b511[_0x4bb2('0x13')][_0x4bb2('0x15')]);return _0x11c861(_0x32b511[_0x4bb2('0x13')][_0x4bb2('0x15')]);}logger[_0x4bb2('0x13')](_0x4bb2('0xe'),_0x192ff5,_0x32b511[_0x4bb2('0x13')][_0x4bb2('0x15')]);return _0x585053(_0x32b511[_0x4bb2('0x13')][_0x4bb2('0x15')]);}else{logger['info'](_0x4bb2('0xe'),_0x192ff5,_0x4bb2('0xf'));_0x585053(_0x32b511[_0x4bb2('0x16')][_0x4bb2('0x15')]);}})['catch'](function(_0x3a330b){logger['error'](_0x4bb2('0xe'),_0x192ff5,_0x3a330b);_0x11c861(_0x3a330b);});});}exports[_0x4bb2('0x17')]=function(_0x345152){var _0x2da2bb=this;return new Promise(function(_0x2cc32e,_0x3a0688){return db['Trigger'][_0x4bb2('0x18')]({'raw':_0x345152['options']?_0x345152[_0x4bb2('0x19')][_0x4bb2('0x1a')]===undefined?!![]:![]:!![],'where':_0x345152[_0x4bb2('0x19')]?_0x345152[_0x4bb2('0x19')]['where']||null:null,'attributes':_0x345152['options']?_0x345152[_0x4bb2('0x19')][_0x4bb2('0x1b')]||null:null,'limit':_0x345152[_0x4bb2('0x19')]?_0x345152[_0x4bb2('0x19')][_0x4bb2('0x1c')]||null:null,'include':_0x345152[_0x4bb2('0x19')]?_0x345152[_0x4bb2('0x19')][_0x4bb2('0x1d')]?_[_0x4bb2('0x1e')](_0x345152[_0x4bb2('0x19')][_0x4bb2('0x1d')],function(_0x2b47a0){return{'model':db[_0x2b47a0[_0x4bb2('0x1f')]],'as':_0x2b47a0['as'],'attributes':_0x2b47a0[_0x4bb2('0x1b')],'include':_0x2b47a0['include']?_[_0x4bb2('0x1e')](_0x2b47a0['include'],function(_0x272bbd){return{'model':db[_0x272bbd[_0x4bb2('0x1f')]],'as':_0x272bbd['as'],'attributes':_0x272bbd['attributes'],'include':_0x272bbd['include']?_[_0x4bb2('0x1e')](_0x272bbd[_0x4bb2('0x1d')],function(_0x4e80da){return{'model':db[_0x4e80da[_0x4bb2('0x1f')]],'as':_0x4e80da['as'],'attributes':_0x4e80da[_0x4bb2('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x4bb2('0xc')](function(_0x2f4426){logger['info'](_0x4bb2('0x17'),_0x345152);logger[_0x4bb2('0x10')]('GetTrigger',_0x345152,JSON['stringify'](_0x2f4426));_0x2cc32e(_0x2f4426);})[_0x4bb2('0x20')](function(_0x1961d8){logger[_0x4bb2('0x13')]('GetTrigger',_0x1961d8[_0x4bb2('0x15')],_0x345152);_0x3a0688(_0x2da2bb[_0x4bb2('0x13')](0x1f4,_0x1961d8['message']));});});};exports[_0x4bb2('0x21')]=function(_0x310bbf){var _0x913a0b=this;return new Promise(function(_0x3a8b05,_0xf2fed8){return db['Trigger']['find']({'raw':_0x310bbf[_0x4bb2('0x19')]?_0x310bbf[_0x4bb2('0x19')][_0x4bb2('0x1a')]===undefined?!![]:![]:!![],'where':_0x310bbf[_0x4bb2('0x19')]?_0x310bbf[_0x4bb2('0x19')]['where']||null:null,'attributes':_0x310bbf[_0x4bb2('0x19')]?_0x310bbf[_0x4bb2('0x19')][_0x4bb2('0x1b')]||null:null,'include':_0x310bbf[_0x4bb2('0x19')]?_0x310bbf[_0x4bb2('0x19')][_0x4bb2('0x1d')]?_[_0x4bb2('0x1e')](_0x310bbf['options'][_0x4bb2('0x1d')],function(_0x2e4661){return{'model':db[_0x2e4661[_0x4bb2('0x1f')]],'as':_0x2e4661['as'],'attributes':_0x2e4661[_0x4bb2('0x1b')],'include':_0x2e4661['include']?_[_0x4bb2('0x1e')](_0x2e4661[_0x4bb2('0x1d')],function(_0x1c4c35){return{'model':db[_0x1c4c35[_0x4bb2('0x1f')]],'as':_0x1c4c35['as'],'attributes':_0x1c4c35[_0x4bb2('0x1b')],'include':_0x1c4c35[_0x4bb2('0x1d')]?_['map'](_0x1c4c35[_0x4bb2('0x1d')],function(_0x1227c8){return{'model':db[_0x1227c8['model']],'as':_0x1227c8['as'],'attributes':_0x1227c8['attributes']};}):[]};}):[]};}):[]:[]})[_0x4bb2('0xc')](function(_0x457ac8){logger[_0x4bb2('0xd')](_0x4bb2('0x21'),_0x310bbf);logger[_0x4bb2('0x10')](_0x4bb2('0x21'),_0x310bbf,JSON[_0x4bb2('0x12')](_0x457ac8));_0x3a8b05(_0x457ac8);})[_0x4bb2('0x20')](function(_0x3abaf8){logger[_0x4bb2('0x13')](_0x4bb2('0x21'),_0x3abaf8[_0x4bb2('0x15')],_0x310bbf);_0xf2fed8(_0x913a0b[_0x4bb2('0x13')](0x1f4,_0x3abaf8[_0x4bb2('0x15')]));});});};
\ No newline at end of file
index 5ddbd89..053806a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2174=['express','../../components/auth/service','../../components/interaction/service','../../config/environment','./trunk.controller','get','isAuthenticated','index','/:id','show','clone','create','put','update','delete','destroy','multer','util','path'];(function(_0x2f45ea,_0x15c656){var _0x485a84=function(_0x4a1fe3){while(--_0x4a1fe3){_0x2f45ea['push'](_0x2f45ea['shift']());}};_0x485a84(++_0x15c656);}(_0x2174,0x153));var _0x4217=function(_0x18d45b,_0x54f73b){_0x18d45b=_0x18d45b-0x0;var _0x3b24b3=_0x2174[_0x18d45b];return _0x3b24b3;};'use strict';var multer=require(_0x4217('0x0'));var util=require(_0x4217('0x1'));var path=require(_0x4217('0x2'));var timeout=require('connect-timeout');var express=require(_0x4217('0x3'));var router=express['Router']();var auth=require(_0x4217('0x4'));var interaction=require(_0x4217('0x5'));var config=require(_0x4217('0x6'));var controller=require(_0x4217('0x7'));router[_0x4217('0x8')]('/',auth[_0x4217('0x9')](),controller[_0x4217('0xa')]);router[_0x4217('0x8')](_0x4217('0xb'),auth[_0x4217('0x9')](),controller[_0x4217('0xc')]);router['post']('/:id/clone',auth[_0x4217('0x9')](),controller[_0x4217('0xd')]);router['post']('/',auth[_0x4217('0x9')](),controller[_0x4217('0xe')]);router[_0x4217('0xf')](_0x4217('0xb'),auth['isAuthenticated'](),controller[_0x4217('0x10')]);router[_0x4217('0x11')]('/:id',auth[_0x4217('0x9')](),controller[_0x4217('0x12')]);module['exports']=router;
\ No newline at end of file
+var _0xc71f=['create','/:id','update','delete','destroy','multer','util','path','connect-timeout','Router','../../components/interaction/service','./trunk.controller','get','show','post','/:id/clone','isAuthenticated'];(function(_0x1e548b,_0x40d303){var _0x4d0c2a=function(_0x452872){while(--_0x452872){_0x1e548b['push'](_0x1e548b['shift']());}};_0x4d0c2a(++_0x40d303);}(_0xc71f,0x1ae));var _0xfc71=function(_0x31ce94,_0x246777){_0x31ce94=_0x31ce94-0x0;var _0x16ca31=_0xc71f[_0x31ce94];return _0x16ca31;};'use strict';var multer=require(_0xfc71('0x0'));var util=require(_0xfc71('0x1'));var path=require(_0xfc71('0x2'));var timeout=require(_0xfc71('0x3'));var express=require('express');var router=express[_0xfc71('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xfc71('0x5'));var config=require('../../config/environment');var controller=require(_0xfc71('0x6'));router[_0xfc71('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0xfc71('0x7')]('/:id',auth['isAuthenticated'](),controller[_0xfc71('0x8')]);router[_0xfc71('0x9')](_0xfc71('0xa'),auth[_0xfc71('0xb')](),controller['clone']);router['post']('/',auth[_0xfc71('0xb')](),controller[_0xfc71('0xc')]);router['put'](_0xfc71('0xd'),auth['isAuthenticated'](),controller[_0xfc71('0xe')]);router[_0xfc71('0xf')]('/:id',auth['isAuthenticated'](),controller[_0xfc71('0x10')]);module['exports']=router;
\ No newline at end of file
index 869f056..2538ea5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['udp','setDataValue','join','transport','getDataValue','split','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]','info','shortinfo','inband','auto','rfc2833','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','port,invite','insecure','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]','never','INTEGER','always','accept','refuse','uac','uas','fingerprint','active','actpass','dynamic','update,nonat','BOOLEAN','sequelize','STRING','name','ENUM','user','peer','friend','from-voip-provider','ALLOWED_PASSED_SCREEN','ALLOWED_FAILED_SCREEN','PROHIB_NOT_SCREENED','PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN','PROHIB'];(function(_0x4fc8b9,_0x28a206){var _0x32b659=function(_0x4aa6bb){while(--_0x4aa6bb){_0x4fc8b9['push'](_0x4fc8b9['shift']());}};_0x32b659(++_0x28a206);}(_0xb10b,0x12a));var _0xbb10=function(_0x5ee300,_0x59f054){_0x5ee300=_0x5ee300-0x0;var _0x15717b=_0xb10b[_0x5ee300];return _0x15717b;};'use strict';var Sequelize=require(_0xbb10('0x0'));module['exports']={'name':{'type':Sequelize[_0xbb10('0x1')],'allowNull':![],'unique':_0xbb10('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize[_0xbb10('0x3')]('friend',_0xbb10('0x4'),_0xbb10('0x5')),'allowNull':![],'defaultValue':_0xbb10('0x6')},'context':{'type':Sequelize[_0xbb10('0x1')],'allowNull':![],'defaultValue':_0xbb10('0x7')},'callingpres':{'type':Sequelize[_0xbb10('0x3')]('ALLOWED_NOT_SCREENED',_0xbb10('0x8'),_0xbb10('0x9'),'ALLOWED',_0xbb10('0xa'),_0xbb10('0xb'),_0xbb10('0xc'),_0xbb10('0xd'))},'deny':{'type':Sequelize[_0xbb10('0x1')]},'permit':{'type':Sequelize[_0xbb10('0x1')]},'secret':{'type':Sequelize[_0xbb10('0x1')]},'md5secret':{'type':Sequelize[_0xbb10('0x1')]},'remotesecret':{'type':Sequelize['STRING']},'transport':{'type':Sequelize['STRING'],'defaultValue':_0xbb10('0xe'),'set':function(_0x118a74){this[_0xbb10('0xf')]('transport',_0x118a74?_0x118a74[_0xbb10('0x10')](','):null);},'get':function(){return this['getDataValue'](_0xbb10('0x11'))?this[_0xbb10('0x12')](_0xbb10('0x11'))[_0xbb10('0x13')](','):null;},'comment':_0xbb10('0x14')},'dtmfmode':{'type':Sequelize[_0xbb10('0x3')]('rfc2833',_0xbb10('0x15'),_0xbb10('0x16'),_0xbb10('0x17'),_0xbb10('0x18')),'defaultValue':_0xbb10('0x19')},'directmedia':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no',_0xbb10('0x1b'),_0xbb10('0x1c'),_0xbb10('0x1d')),'defaultValue':'no'},'directrtpsetup':{'type':Sequelize['ENUM'](_0xbb10('0x1a'),'no'),'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0xbb10('0x1')]},'directmediadeny':{'type':Sequelize[_0xbb10('0x1')]},'nat':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':_0xbb10('0x1e'),'set':function(_0x1682a4){this[_0xbb10('0xf')](_0xbb10('0x1f'),_0x1682a4?_0x1682a4[_0xbb10('0x10')](','):null);},'get':function(){return this[_0xbb10('0x12')]('nat')?this[_0xbb10('0x12')](_0xbb10('0x1f'))[_0xbb10('0x13')](','):null;},'comment':_0xbb10('0x20')},'callgroup':{'type':Sequelize[_0xbb10('0x1')]},'namedcallgroup':{'type':Sequelize[_0xbb10('0x1')]},'pickupgroup':{'type':Sequelize['STRING']},'namedpickupgroup':{'type':Sequelize[_0xbb10('0x1')]},'language':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':'en'},'tonezone':{'type':Sequelize['STRING'],'allowNull':!![]},'disallow':{'type':Sequelize['STRING'],'defaultValue':_0xbb10('0x21')},'allow':{'type':Sequelize[_0xbb10('0x1')],'allowNull':![],'defaultValue':_0xbb10('0x22'),'set':function(_0x317da4){this[_0xbb10('0xf')](_0xbb10('0x23'),_0x317da4?_0x317da4[_0xbb10('0x10')](';'):_0xbb10('0x22'));},'get':function(){return this[_0xbb10('0x12')](_0xbb10('0x23'))?this[_0xbb10('0x12')](_0xbb10('0x23'))['split'](';'):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22alaw\x22]'},'autoframing':{'type':Sequelize['ENUM'](_0xbb10('0x1a'),'no')},'insecure':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':_0xbb10('0x24'),'set':function(_0x4e25ff){this[_0xbb10('0xf')](_0xbb10('0x25'),_0x4e25ff?_0x4e25ff[_0xbb10('0x10')](','):null);},'get':function(){return this[_0xbb10('0x12')](_0xbb10('0x25'))?this[_0xbb10('0x12')](_0xbb10('0x25'))['split'](','):null;},'comment':_0xbb10('0x26')},'trustrpid':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no'),'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no'),'defaultValue':'no'},'progressinband':{'type':Sequelize[_0xbb10('0x3')]('yes','no',_0xbb10('0x27'))},'promiscredir':{'type':Sequelize['ENUM'](_0xbb10('0x1a'),'no')},'useclientcode':{'type':Sequelize['ENUM'](_0xbb10('0x1a'),'no')},'accountcode':{'type':Sequelize[_0xbb10('0x28')](0xb)},'setvar':{'type':Sequelize[_0xbb10('0x1')]},'callerid':{'type':Sequelize['STRING'],'defaultValue':'\x22\x22\x20<>'},'amaflags':{'type':Sequelize[_0xbb10('0x1')]},'callcounter':{'type':Sequelize[_0xbb10('0x3')]('yes','no'),'defaultValue':_0xbb10('0x1a')},'busylevel':{'type':Sequelize[_0xbb10('0x28')](0xb)},'allowoverlap':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no')},'allowsubscribe':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no')},'allowtransfer':{'type':Sequelize[_0xbb10('0x3')]('yes','no')},'ignoresdpversion':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no')},'subscribecontext':{'type':Sequelize[_0xbb10('0x1')]},'template':{'type':Sequelize[_0xbb10('0x1')]},'videosupport':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no',_0xbb10('0x29')),'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0xbb10('0x28')](0xb)},'rfc2833compensate':{'type':Sequelize[_0xbb10('0x3')]('yes','no')},'mailbox':{'type':Sequelize[_0xbb10('0x1')]},'session_timers':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x2a'),_0xbb10('0x2b'),'originate')},'session_expires':{'type':Sequelize[_0xbb10('0x28')](0xb)},'session_minse':{'type':Sequelize['INTEGER'](0xb)},'session_refresher':{'type':Sequelize['ENUM'](_0xbb10('0x2c'),_0xbb10('0x2d')),'defaultValue':_0xbb10('0x2d')},'t38pt_usertpsource':{'type':Sequelize[_0xbb10('0x1')]},'regexten':{'type':Sequelize[_0xbb10('0x1')]},'fromdomain':{'type':Sequelize[_0xbb10('0x1')]},'fromuser':{'type':Sequelize['STRING']},'port':{'type':Sequelize[_0xbb10('0x28')](0x5)},'qualify':{'type':Sequelize[_0xbb10('0x3')]('yes','no'),'defaultValue':'yes'},'keepalive':{'type':Sequelize['INTEGER'](0xb)},'defaultip':{'type':Sequelize[_0xbb10('0x1')]},'defaultuser':{'type':Sequelize[_0xbb10('0x1')]},'rtptimeout':{'type':Sequelize[_0xbb10('0x28')](0xb)},'rtpholdtimeout':{'type':Sequelize['INTEGER'](0xb)},'rtpkeepalive':{'type':Sequelize[_0xbb10('0x28')](0xb)},'sendrpid':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no','pai'),'defaultValue':'no'},'outboundproxy':{'type':Sequelize[_0xbb10('0x1')]},'callbackextension':{'type':Sequelize[_0xbb10('0x1')]},'timert1':{'type':Sequelize[_0xbb10('0x28')](0xb)},'timerb':{'type':Sequelize[_0xbb10('0x28')](0xb)},'qualifyfreq':{'type':Sequelize['INTEGER'](0xb)},'contactpermit':{'type':Sequelize[_0xbb10('0x1')]},'contactdeny':{'type':Sequelize[_0xbb10('0x1')]},'contactacl':{'type':Sequelize['STRING']},'unsolicited_mailbox':{'type':Sequelize[_0xbb10('0x1')]},'use_q850_reason':{'type':Sequelize[_0xbb10('0x1')]},'maxforwards':{'type':Sequelize[_0xbb10('0x28')](0xb)},'encryption':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no'),'defaultValue':'no'},'avpf':{'type':Sequelize[_0xbb10('0x3')]('yes','no')},'force_avp':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no')},'icesupport':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no')},'dtlsenable':{'type':Sequelize['ENUM'](_0xbb10('0x1a'),'no')},'dtlsverify':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no',_0xbb10('0x2e'),'certificate')},'dtlsrekey':{'type':Sequelize[_0xbb10('0x28')](0xb)},'dtlscertfile':{'type':Sequelize[_0xbb10('0x1')]},'dtlsprivatekey':{'type':Sequelize['STRING']},'dtlscipher':{'type':Sequelize['STRING']},'dtlscafile':{'type':Sequelize[_0xbb10('0x1')]},'dtlscapath':{'type':Sequelize['STRING']},'dtlssetup':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x2f'),'passive',_0xbb10('0x30')),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0xbb10('0x1')]},'usereqphone':{'type':Sequelize[_0xbb10('0x3')]('yes','no'),'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0xbb10('0x1')]},'recordofffeature':{'type':Sequelize[_0xbb10('0x1')]},'call_limit':{'type':Sequelize[_0xbb10('0x28')](0xb),'defaultValue':0x3e8},'registertrying':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no')},'subscribemwi':{'type':Sequelize[_0xbb10('0x3')](_0xbb10('0x1a'),'no')},'vmexten':{'type':Sequelize[_0xbb10('0x1')]},'mohinterpret':{'type':Sequelize[_0xbb10('0x1')]},'mohsuggest':{'type':Sequelize[_0xbb10('0x1')]},'parkinglot':{'type':Sequelize[_0xbb10('0x1')]},'description':{'type':Sequelize[_0xbb10('0x1')]},'host':{'type':Sequelize['STRING'],'defaultValue':_0xbb10('0x31')},'canreinvite':{'type':Sequelize[_0xbb10('0x3')]('yes','no',_0xbb10('0x1b'),_0xbb10('0x1c'),_0xbb10('0x32')),'defaultValue':'no'},'registry':{'type':Sequelize[_0xbb10('0x1')]},'otherFields':{'type':Sequelize[_0xbb10('0x1')]},'active':{'type':Sequelize[_0xbb10('0x33')],'allowNull':![],'defaultValue':!![]},'t38pt_udptl':{'type':Sequelize[_0xbb10('0x1')],'defaultValue':'no'}};
\ No newline at end of file
+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(_0x36d188,_0x234e50){var _0x4f8b00=function(_0x376d0c){while(--_0x376d0c){_0x36d188['push'](_0x36d188['shift']());}};_0x4f8b00(++_0x234e50);}(_0x757a,0xde));var _0xa757=function(_0x598244,_0x27a888){_0x598244=_0x598244-0x0;var _0x43ec7d=_0x757a[_0x598244];return _0x43ec7d;};'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
index b1d64fb..a76e452 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x745d=['Reload','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','/etc/asterisk/sip_xcally_trunks.conf','chan_sip.so','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../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','Trunk,\x20%s,\x20%s','Trunk,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','end','status','count','offset','limit','set','json','apply','reject','save','update','destroy','get','Trunks','UserProfileResource','stack','name','send','index','Trunk','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','options','rows','show','params','include','find','clone','omit','createdAt','updatedAt','body','create','includeAll','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','findAll','readFileSync','root','server/files/templates/trunk.ejs','utf8','join','server/files/templates/registry.ejs','render','writeFileSync','/etc/asterisk/sip_xcally_registers.conf'];(function(_0x59c3de,_0x317698){var _0x42b216=function(_0xcaffec){while(--_0xcaffec){_0x59c3de['push'](_0x59c3de['shift']());}};_0x42b216(++_0x317698);}(_0x745d,0xec));var _0xd745=function(_0x2d4ba9,_0xd5fc96){_0x2d4ba9=_0x2d4ba9-0x0;var _0x1b7b5c=_0x745d[_0x2d4ba9];return _0x1b7b5c;};'use strict';var pdf=require(_0xd745('0x0'));var emlformat=require(_0xd745('0x1'));var rimraf=require(_0xd745('0x2'));var zipdir=require(_0xd745('0x3'));var jsonpatch=require(_0xd745('0x4'));var rp=require('request-promise');var moment=require(_0xd745('0x5'));var BPromise=require(_0xd745('0x6'));var Mustache=require(_0xd745('0x7'));var util=require(_0xd745('0x8'));var path=require(_0xd745('0x9'));var sox=require(_0xd745('0xa'));var csv=require(_0xd745('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xd745('0xc'));var squel=require(_0xd745('0xd'));var crypto=require(_0xd745('0xe'));var jsforce=require(_0xd745('0xf'));var deskjs=require(_0xd745('0x10'));var toCsv=require(_0xd745('0xb'));var querystring=require(_0xd745('0x11'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xd745('0x12'));var qs=require(_0xd745('0x13'));var hardwareService=require(_0xd745('0x14'));var logger=require(_0xd745('0x15'))(_0xd745('0x16'));var utils=require(_0xd745('0x17'));var config=require(_0xd745('0x18'));var db=require(_0xd745('0x19'))['db'];var jayson=require(_0xd745('0x1a'));var client=jayson['client'][_0xd745('0x1b')]({'port':0x232a});function checkPasswordPattern(_0x457230,_0x5b93a5,_0x2e5e2d){if(_0x2e5e2d){var _0x19fe5f=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x19fe5f[_0xd745('0x1c')](_0x5b93a5)){return _0x457230;}else{throw new Error(_0xd745('0x1d'));}}else{return _0x457230;}}function respondWithRpcPromise(_0x32fad2,_0xf26235,_0x520dc0,_0x574025){return new BPromise(function(_0xd2bedc,_0x5261d2){var _0x3ccd76=_0x574025||client;return _0x3ccd76[_0xd745('0x1e')](_0x32fad2,_0x520dc0)[_0xd745('0x1f')](function(_0x33c828){logger[_0xd745('0x20')](_0xd745('0x21'),_0xf26235,'request\x20sent');logger['debug'](_0xd745('0x22'),_0xf26235,'request\x20sent',JSON[_0xd745('0x23')](_0x33c828));if(_0x33c828[_0xd745('0x24')]){if(_0x33c828['error'][_0xd745('0x25')]===0x1f4){logger[_0xd745('0x24')](_0xd745('0x21'),_0xf26235,_0x33c828[_0xd745('0x24')][_0xd745('0x26')]);return _0x5261d2(_0x33c828['error'][_0xd745('0x26')]);}logger[_0xd745('0x24')](_0xd745('0x21'),_0xf26235,_0x33c828[_0xd745('0x24')]['message']);return _0xd2bedc(_0x33c828[_0xd745('0x24')][_0xd745('0x26')]);}else{logger[_0xd745('0x20')](_0xd745('0x21'),_0xf26235,_0xd745('0x27'));_0xd2bedc(_0x33c828[_0xd745('0x28')][_0xd745('0x26')]);}})[_0xd745('0x29')](function(_0x62d065){logger[_0xd745('0x24')](_0xd745('0x21'),_0xf26235,_0x62d065);_0x5261d2(_0x62d065);});});}function respondWithStatusCode(_0x499311,_0x5e10b5){_0x5e10b5=_0x5e10b5||0xcc;return function(_0x58feaa){if(_0x58feaa){return _0x499311['sendStatus'](_0x5e10b5);}return _0x499311['status'](_0x5e10b5)[_0xd745('0x2a')]();};}function respondWithResult(_0x4bb1ac,_0x4643fd){_0x4643fd=_0x4643fd||0xc8;return function(_0x37dc5e){if(_0x37dc5e){return _0x4bb1ac[_0xd745('0x2b')](_0x4643fd)['json'](_0x37dc5e);}};}function respondWithFilteredResult(_0x1c1003,_0x2bf2a1){return function(_0x55b7d4){if(_0x55b7d4){var _0x43149b=_0x55b7d4[_0xd745('0x2c')],_0x2c7529=_0x2bf2a1[_0xd745('0x2d')],_0x2467ca=_0x2bf2a1['offset']+_0x2bf2a1[_0xd745('0x2e')],_0x5a7f25;if(_0x2467ca>=_0x43149b){_0x2467ca=_0x43149b;_0x5a7f25=0xc8;}else{_0x5a7f25=0xce;}_0x1c1003['status'](_0x5a7f25);return _0x1c1003[_0xd745('0x2f')]('Content-Range',_0x2c7529+'-'+_0x2467ca+'/'+_0x43149b)[_0xd745('0x30')](_0x55b7d4);}return null;};}function patchUpdates(_0x3f692a){return function(_0x319e60){try{jsonpatch[_0xd745('0x31')](_0x319e60,_0x3f692a,!![]);}catch(_0x365742){return BPromise[_0xd745('0x32')](_0x365742);}return _0x319e60[_0xd745('0x33')]();};}function saveUpdates(_0x317d66,_0x3b82ed){return function(_0x4d024a){if(_0x4d024a){return _0x4d024a[_0xd745('0x34')](_0x317d66)[_0xd745('0x1f')](function(_0x3e87f7){return _0x3e87f7;});}return null;};}function removeEntity(_0x959314,_0x9bb9f9){return function(_0x49f885){if(_0x49f885){return _0x49f885[_0xd745('0x35')]()[_0xd745('0x1f')](function(){var _0x262c02=_0x49f885[_0xd745('0x36')]({'plain':!![]});var _0x5a837b=_0xd745('0x37');return db[_0xd745('0x38')][_0xd745('0x35')]({'where':{'type':_0x5a837b,'resourceId':_0x262c02['id']}})[_0xd745('0x1f')](function(){return _0x49f885;});})['then'](function(){_0x959314['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x4f250e,_0x426c95){return function(_0x47c275){if(!_0x47c275){_0x4f250e['sendStatus'](0x194);}return _0x47c275;};}function handleError(_0x2863f1,_0x544c9a){_0x544c9a=_0x544c9a||0x1f4;return function(_0x4dd631){logger['error'](_0x4dd631[_0xd745('0x39')]);if(_0x4dd631[_0xd745('0x3a')]){delete _0x4dd631[_0xd745('0x3a')];}_0x2863f1['status'](_0x544c9a)[_0xd745('0x3b')](_0x4dd631);};}exports[_0xd745('0x3c')]=function(_0x272367,_0x568986){var _0x3545d7={},_0x5dfc40={},_0x47afee={'count':0x0,'rows':[]};var _0x13357f=db[_0xd745('0x3d')][_0xd745('0x3e')];_0x5dfc40[_0xd745('0x3f')]=_[_0xd745('0x40')](_0x13357f);_0x5dfc40[_0xd745('0x41')]=_[_0xd745('0x40')](_0x272367[_0xd745('0x41')]);_0x5dfc40[_0xd745('0x42')]=_[_0xd745('0x43')](_0x5dfc40['model'],_0x5dfc40[_0xd745('0x41')]);_0x3545d7['attributes']=_[_0xd745('0x43')](_0x5dfc40[_0xd745('0x3f')],qs[_0xd745('0x44')](_0x272367[_0xd745('0x41')][_0xd745('0x44')]));_0x3545d7['attributes']=_0x3545d7[_0xd745('0x45')][_0xd745('0x46')]?_0x3545d7[_0xd745('0x45')]:_0x5dfc40[_0xd745('0x3f')];if(!_0x272367[_0xd745('0x41')][_0xd745('0x47')](_0xd745('0x48'))){_0x3545d7[_0xd745('0x2e')]=qs[_0xd745('0x2e')](_0x272367['query']['limit']);_0x3545d7[_0xd745('0x2d')]=qs[_0xd745('0x2d')](_0x272367[_0xd745('0x41')][_0xd745('0x2d')]);}_0x3545d7[_0xd745('0x49')]=qs[_0xd745('0x4a')](_0x272367[_0xd745('0x41')][_0xd745('0x4a')]);_0x3545d7[_0xd745('0x4b')]=qs[_0xd745('0x42')](_[_0xd745('0x4c')](_0x272367['query'],_0x5dfc40[_0xd745('0x42')]));if(_0x272367[_0xd745('0x41')][_0xd745('0x4d')]){_0x3545d7[_0xd745('0x4b')]=_[_0xd745('0x4e')](_0x3545d7['where'],{'$or':_['map'](_0x13357f,function(_0x4a0674){if(_0x4a0674[_0xd745('0x4f')][_0xd745('0x50')]!==_0xd745('0x51')){var _0x439107={};_0x439107[_0x4a0674[_0xd745('0x52')]]={'$like':'%'+_0x272367[_0xd745('0x41')][_0xd745('0x4d')]+'%'};return _0x439107;}})});}_0x3545d7=_[_0xd745('0x4e')]({},_0x3545d7,_0x272367[_0xd745('0x53')]);var _0x3ecb15={'where':_0x3545d7[_0xd745('0x4b')]};return db[_0xd745('0x3d')]['count'](_0x3ecb15)[_0xd745('0x1f')](function(_0x516b6b){_0x47afee[_0xd745('0x2c')]=_0x516b6b;if(_0x272367[_0xd745('0x41')]['includeAll']){_0x3545d7['include']=[{'all':!![]}];}return db[_0xd745('0x3d')]['findAll'](_0x3545d7);})['then'](function(_0x26ef12){_0x47afee[_0xd745('0x54')]=_0x26ef12;return _0x47afee;})['then'](respondWithFilteredResult(_0x568986,_0x3545d7))[_0xd745('0x29')](handleError(_0x568986,null));};exports[_0xd745('0x55')]=function(_0x1709fd,_0x2eba93){var _0x5f46d2={'raw':![],'where':{'id':_0x1709fd[_0xd745('0x56')]['id']}},_0x450704={};_0x450704[_0xd745('0x3f')]=_[_0xd745('0x40')](db[_0xd745('0x3d')][_0xd745('0x3e')]);_0x450704[_0xd745('0x41')]=_[_0xd745('0x40')](_0x1709fd[_0xd745('0x41')]);_0x450704[_0xd745('0x42')]=_[_0xd745('0x43')](_0x450704[_0xd745('0x3f')],_0x450704[_0xd745('0x41')]);_0x5f46d2[_0xd745('0x45')]=_[_0xd745('0x43')](_0x450704['model'],qs[_0xd745('0x44')](_0x1709fd[_0xd745('0x41')][_0xd745('0x44')]));_0x5f46d2[_0xd745('0x45')]=_0x5f46d2['attributes'][_0xd745('0x46')]?_0x5f46d2[_0xd745('0x45')]:_0x450704[_0xd745('0x3f')];if(_0x1709fd['query']['includeAll']){_0x5f46d2[_0xd745('0x57')]=[{'all':!![]}];}_0x5f46d2=_[_0xd745('0x4e')]({},_0x5f46d2,_0x1709fd[_0xd745('0x53')]);return db[_0xd745('0x3d')][_0xd745('0x58')](_0x5f46d2)[_0xd745('0x1f')](handleEntityNotFound(_0x2eba93,null))[_0xd745('0x1f')](respondWithResult(_0x2eba93,null))[_0xd745('0x29')](handleError(_0x2eba93,null));};exports[_0xd745('0x59')]=function(_0x140c0f,_0x571d7e){var _0x47a7a0={'raw':![],'where':{'id':_0x140c0f[_0xd745('0x56')]['id']}},_0xa5f749={};_0xa5f749[_0xd745('0x3f')]=_[_0xd745('0x40')](db['Trunk']['rawAttributes']);_0x47a7a0[_0xd745('0x45')]=_[_0xd745('0x43')](_0xa5f749[_0xd745('0x3f')],qs['fields'](_0x140c0f['query']['fields']));_0x47a7a0[_0xd745('0x45')]=_0x47a7a0[_0xd745('0x45')][_0xd745('0x46')]?_0x47a7a0['attributes']:_0xa5f749[_0xd745('0x3f')];if(_0x140c0f['query']['includeAll']){_0x47a7a0['include']=[{'all':!![]}];}_0x47a7a0=_[_0xd745('0x4e')]({},_0x47a7a0,_0x140c0f[_0xd745('0x53')]);return db[_0xd745('0x3d')]['find'](_0x47a7a0)[_0xd745('0x1f')](handleEntityNotFound(_0x571d7e,null))[_0xd745('0x1f')](function(_0x3cc998){if(_0x3cc998){var _0x1d3501=_0x3cc998[_0xd745('0x36')]({'plain':!![]});_0x1d3501=qs[_0xd745('0x5a')](_0x1d3501,['id',_0xd745('0x5b'),_0xd745('0x5c')]);_0x140c0f[_0xd745('0x5d')]=_[_0xd745('0x5a')](_0x140c0f[_0xd745('0x5d')],['id',_0xd745('0x5b'),_0xd745('0x5c')]);return db[_0xd745('0x3d')][_0xd745('0x5e')](_[_0xd745('0x4e')](_0x1d3501,_0x140c0f[_0xd745('0x5d')]),{'include':_0x140c0f[_0xd745('0x41')][_0xd745('0x5f')]?[{'all':!![]}]:undefined})[_0xd745('0x1f')](function(_0xa2269){var _0x93b408=_0x140c0f[_0xd745('0x60')][_0xd745('0x36')]({'plain':!![]});if(!_0x93b408)throw new Error(_0xd745('0x61'));if(_0x93b408[_0xd745('0x62')]==='user'){var _0xfd64fd=_0xa2269['get']({'plain':!![]});var _0x37d7ab=_0xd745('0x37');return db[_0xd745('0x63')][_0xd745('0x58')]({'where':{'name':_0x37d7ab,'userProfileId':_0x93b408[_0xd745('0x64')]},'raw':!![]})[_0xd745('0x1f')](function(_0x1977bb){if(_0x1977bb&&_0x1977bb[_0xd745('0x65')]===0x0){return db['UserProfileResource'][_0xd745('0x5e')]({'name':_0xfd64fd['name'],'resourceId':_0xfd64fd['id'],'type':_0x1977bb['name'],'sectionId':_0x1977bb['id']},{})[_0xd745('0x1f')](function(){return _0xa2269;});}else{return _0xa2269;}})['catch'](function(_0x161b9a){logger[_0xd745('0x24')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x161b9a);throw _0x161b9a;});}return _0xa2269;});}})[_0xd745('0x1f')](respondWithResult(_0x571d7e,0xc9))[_0xd745('0x29')](handleError(_0x571d7e,null));};exports[_0xd745('0x5e')]=function(_0x4f503a,_0x5bea48,_0x1ad30d){var _0x34b3b3;return db[_0xd745('0x3d')]['create'](_0x4f503a[_0xd745('0x5d')],{'raw':!![]})[_0xd745('0x1f')](function(_0x86cad2){_0x34b3b3=_0x86cad2;return db['Trunk'][_0xd745('0x66')]({'raw':!![]});})[_0xd745('0x1f')](function(_0x2ed7bb){var _0x2cec1a=fs[_0xd745('0x67')](path['join'](config[_0xd745('0x68')],_0xd745('0x69')),_0xd745('0x6a'));var _0x53d22c=fs[_0xd745('0x67')](path[_0xd745('0x6b')](config[_0xd745('0x68')],_0xd745('0x6c')),_0xd745('0x6a'));var _0x3ba864=ejs[_0xd745('0x6d')](_0x2cec1a,{'trunks':_0x2ed7bb||[]});fs[_0xd745('0x6e')]('/etc/asterisk/sip_xcally_trunks.conf',_0x3ba864);if(_0x34b3b3['registry']){var _0x16f5f8=ejs[_0xd745('0x6d')](_0x53d22c,{'trunks':_0x2ed7bb||[]});fs[_0xd745('0x6e')](_0xd745('0x6f'),_0x16f5f8);}})[_0xd745('0x1f')](function(){return respondWithRpcPromise(_0xd745('0x70'),_0xd745('0x5e'),{'module':'chan_sip.so'});})['then'](function(){var _0x5d9cc4=_0x4f503a['user'][_0xd745('0x36')]({'plain':!![]});if(!_0x5d9cc4)throw new Error(_0xd745('0x61'));if(_0x5d9cc4[_0xd745('0x62')]==='user'){var _0x43cb68=_0x34b3b3[_0xd745('0x36')]({'plain':!![]});return db[_0xd745('0x63')]['find']({'where':{'name':'Trunks','userProfileId':_0x5d9cc4[_0xd745('0x64')]},'raw':!![]})[_0xd745('0x1f')](function(_0x398ee6){if(_0x398ee6&&_0x398ee6[_0xd745('0x65')]===0x0){return db[_0xd745('0x38')]['create']({'name':_0x43cb68[_0xd745('0x3a')],'resourceId':_0x43cb68['id'],'type':_0x398ee6['name'],'sectionId':_0x398ee6['id']},{})['then'](function(){return _0x34b3b3;});}else{return _0x34b3b3;}})[_0xd745('0x29')](function(_0x8bcc1){logger[_0xd745('0x24')](_0xd745('0x71'),_0x8bcc1);throw _0x8bcc1;});}return _0x34b3b3;})[_0xd745('0x1f')](respondWithResult(_0x5bea48,0xc9))['catch'](handleError(_0x5bea48,null));};exports[_0xd745('0x34')]=function(_0x22e69d,_0x5dfcc3,_0x5c7289){var _0x165720;return db[_0xd745('0x3d')][_0xd745('0x58')]({'where':{'id':_0x22e69d[_0xd745('0x56')]['id']}})['then'](handleEntityNotFound(_0x5dfcc3,null))[_0xd745('0x1f')](saveUpdates(_0x22e69d[_0xd745('0x5d')],null))[_0xd745('0x1f')](function(_0x16cfb3){if(_0x16cfb3){_0x165720=_0x16cfb3;return db[_0xd745('0x3d')]['findAll']({'raw':!![]});}})[_0xd745('0x1f')](function(_0x4a6eff){if(_0x4a6eff){var _0x40a2b4=fs[_0xd745('0x67')](path[_0xd745('0x6b')](config['root'],_0xd745('0x69')),_0xd745('0x6a'));var _0xaf0c71=fs['readFileSync'](path[_0xd745('0x6b')](config[_0xd745('0x68')],_0xd745('0x6c')),_0xd745('0x6a'));var _0x275e84=ejs[_0xd745('0x6d')](_0x40a2b4,{'trunks':_0x4a6eff||[]});fs[_0xd745('0x6e')](_0xd745('0x72'),_0x275e84);var _0x357e15=ejs[_0xd745('0x6d')](_0xaf0c71,{'trunks':_0x4a6eff||[]});fs[_0xd745('0x6e')](_0xd745('0x6f'),_0x357e15);return respondWithRpcPromise(_0xd745('0x70'),_0xd745('0x34'),{'module':_0xd745('0x73')});}return null;})[_0xd745('0x1f')](function(_0x5d7622){if(_0x5d7622){return _0x165720;}})[_0xd745('0x1f')](respondWithResult(_0x5dfcc3,null))['catch'](handleError(_0x5dfcc3,null));};exports[_0xd745('0x35')]=function(_0x449401,_0x423dd6,_0x352dd4){var _0x29ae2a;return db[_0xd745('0x3d')][_0xd745('0x58')]({'where':{'id':_0x449401[_0xd745('0x56')]['id']}})[_0xd745('0x1f')](handleEntityNotFound(_0x423dd6,null))[_0xd745('0x1f')](removeEntity(_0x423dd6,null))[_0xd745('0x1f')](function(){return db[_0xd745('0x3d')]['findAll']({'raw':!![]});})[_0xd745('0x1f')](function(_0x221188){var _0x437488=fs[_0xd745('0x67')](path[_0xd745('0x6b')](config[_0xd745('0x68')],_0xd745('0x69')),_0xd745('0x6a'));var _0x1fd48c=fs[_0xd745('0x67')](path['join'](config[_0xd745('0x68')],_0xd745('0x6c')),_0xd745('0x6a'));var _0x280c9c=ejs[_0xd745('0x6d')](_0x437488,{'trunks':_0x221188});var _0x5a8c1d=ejs[_0xd745('0x6d')](_0x1fd48c,{'trunks':_0x221188});fs[_0xd745('0x6e')](_0xd745('0x72'),_0x280c9c);fs[_0xd745('0x6e')](_0xd745('0x6f'),_0x5a8c1d);return respondWithRpcPromise(_0xd745('0x70'),_0xd745('0x35'),{'module':_0xd745('0x73')});})['catch'](handleError(_0x423dd6,null));};
\ No newline at end of file
+var _0xb077=['server/files/templates/registry.ejs','render','writeFileSync','/etc/asterisk/sip_xcally_trunks.conf','/etc/asterisk/sip_xcally_registers.conf','chan_sip.so','UserProfileSection','update','readFileSync','Reload','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','util','path','to-csv','ejs','lodash','squel','crypto','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../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','then','info','Trunk,\x20%s,\x20%s','request\x20sent','debug','Trunk,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','status','json','count','offset','limit','set','Content-Range','apply','save','destroy','get','Trunks','end','stack','name','send','index','Trunk','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','include','findAll','show','params','options','find','clone','includeAll','omit','createdAt','updatedAt','body','role','user','userProfileId','autoAssociation','UserProfileResource','create','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','join','root','server/files/templates/trunk.ejs','utf8'];(function(_0x50a1f6,_0x238fd8){var _0x84f8d4=function(_0x2d9586){while(--_0x2d9586){_0x50a1f6['push'](_0x50a1f6['shift']());}};_0x84f8d4(++_0x238fd8);}(_0xb077,0x1c6));var _0x7b07=function(_0x44a094,_0x3fdbd7){_0x44a094=_0x44a094-0x0;var _0x33187e=_0xb077[_0x44a094];return _0x33187e;};'use strict';var pdf=require(_0x7b07('0x0'));var emlformat=require(_0x7b07('0x1'));var rimraf=require(_0x7b07('0x2'));var zipdir=require(_0x7b07('0x3'));var jsonpatch=require(_0x7b07('0x4'));var rp=require(_0x7b07('0x5'));var moment=require(_0x7b07('0x6'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x7b07('0x7'));var path=require(_0x7b07('0x8'));var sox=require('sox');var csv=require(_0x7b07('0x9'));var ejs=require(_0x7b07('0xa'));var fs=require('fs');var _=require(_0x7b07('0xb'));var squel=require(_0x7b07('0xc'));var crypto=require(_0x7b07('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x7b07('0x9'));var querystring=require(_0x7b07('0xe'));var Papa=require('papaparse');var Redis=require(_0x7b07('0xf'));var authService=require(_0x7b07('0x10'));var qs=require(_0x7b07('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x7b07('0x12'))(_0x7b07('0x13'));var utils=require(_0x7b07('0x14'));var config=require('../../config/environment');var db=require(_0x7b07('0x15'))['db'];var jayson=require(_0x7b07('0x16'));var client=jayson[_0x7b07('0x17')][_0x7b07('0x18')]({'port':0x232a});function checkPasswordPattern(_0x3d20b2,_0x47c16c,_0x4f403d){if(_0x4f403d){var _0x5a12b7=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x5a12b7[_0x7b07('0x19')](_0x47c16c)){return _0x3d20b2;}else{throw new Error(_0x7b07('0x1a'));}}else{return _0x3d20b2;}}function respondWithRpcPromise(_0x129aec,_0x49813a,_0xc2340a,_0x471b27){return new BPromise(function(_0x2bde66,_0x5d2226){var _0x2714d5=_0x471b27||client;return _0x2714d5[_0x7b07('0x1b')](_0x129aec,_0xc2340a)[_0x7b07('0x1c')](function(_0x594a5d){logger[_0x7b07('0x1d')](_0x7b07('0x1e'),_0x49813a,_0x7b07('0x1f'));logger[_0x7b07('0x20')](_0x7b07('0x21'),_0x49813a,'request\x20sent',JSON[_0x7b07('0x22')](_0x594a5d));if(_0x594a5d[_0x7b07('0x23')]){if(_0x594a5d[_0x7b07('0x23')]['code']===0x1f4){logger[_0x7b07('0x23')](_0x7b07('0x1e'),_0x49813a,_0x594a5d[_0x7b07('0x23')][_0x7b07('0x24')]);return _0x5d2226(_0x594a5d[_0x7b07('0x23')]['message']);}logger['error'](_0x7b07('0x1e'),_0x49813a,_0x594a5d[_0x7b07('0x23')]['message']);return _0x2bde66(_0x594a5d[_0x7b07('0x23')][_0x7b07('0x24')]);}else{logger['info'](_0x7b07('0x1e'),_0x49813a,'request\x20sent');_0x2bde66(_0x594a5d[_0x7b07('0x25')]['message']);}})[_0x7b07('0x26')](function(_0xadc718){logger[_0x7b07('0x23')](_0x7b07('0x1e'),_0x49813a,_0xadc718);_0x5d2226(_0xadc718);});});}function respondWithStatusCode(_0x2fb331,_0x296f14){_0x296f14=_0x296f14||0xcc;return function(_0x23295a){if(_0x23295a){return _0x2fb331['sendStatus'](_0x296f14);}return _0x2fb331[_0x7b07('0x27')](_0x296f14)['end']();};}function respondWithResult(_0x2ac8a4,_0x1b7f52){_0x1b7f52=_0x1b7f52||0xc8;return function(_0x54a448){if(_0x54a448){return _0x2ac8a4['status'](_0x1b7f52)[_0x7b07('0x28')](_0x54a448);}};}function respondWithFilteredResult(_0x11120f,_0x574362){return function(_0x3520cd){if(_0x3520cd){var _0x20af8a=_0x3520cd[_0x7b07('0x29')],_0x19a355=_0x574362[_0x7b07('0x2a')],_0x309cf1=_0x574362[_0x7b07('0x2a')]+_0x574362[_0x7b07('0x2b')],_0x416c96;if(_0x309cf1>=_0x20af8a){_0x309cf1=_0x20af8a;_0x416c96=0xc8;}else{_0x416c96=0xce;}_0x11120f['status'](_0x416c96);return _0x11120f[_0x7b07('0x2c')](_0x7b07('0x2d'),_0x19a355+'-'+_0x309cf1+'/'+_0x20af8a)['json'](_0x3520cd);}return null;};}function patchUpdates(_0x4cc17b){return function(_0x22878c){try{jsonpatch[_0x7b07('0x2e')](_0x22878c,_0x4cc17b,!![]);}catch(_0x11445c){return BPromise['reject'](_0x11445c);}return _0x22878c[_0x7b07('0x2f')]();};}function saveUpdates(_0x13d74c,_0x570df9){return function(_0x2b249d){if(_0x2b249d){return _0x2b249d['update'](_0x13d74c)[_0x7b07('0x1c')](function(_0x3d28d4){return _0x3d28d4;});}return null;};}function removeEntity(_0x39c1da,_0x213f1b){return function(_0x536df7){if(_0x536df7){return _0x536df7[_0x7b07('0x30')]()[_0x7b07('0x1c')](function(){var _0x32dc36=_0x536df7[_0x7b07('0x31')]({'plain':!![]});var _0x442ce7=_0x7b07('0x32');return db['UserProfileResource'][_0x7b07('0x30')]({'where':{'type':_0x442ce7,'resourceId':_0x32dc36['id']}})['then'](function(){return _0x536df7;});})['then'](function(){_0x39c1da[_0x7b07('0x27')](0xcc)[_0x7b07('0x33')]();});}};}function handleEntityNotFound(_0x2f4f70,_0x5430ee){return function(_0xd833ce){if(!_0xd833ce){_0x2f4f70['sendStatus'](0x194);}return _0xd833ce;};}function handleError(_0x580857,_0x1903a3){_0x1903a3=_0x1903a3||0x1f4;return function(_0x423716){logger[_0x7b07('0x23')](_0x423716[_0x7b07('0x34')]);if(_0x423716[_0x7b07('0x35')]){delete _0x423716[_0x7b07('0x35')];}_0x580857[_0x7b07('0x27')](_0x1903a3)[_0x7b07('0x36')](_0x423716);};}exports[_0x7b07('0x37')]=function(_0x2b0a6e,_0x17fcdd){var _0x58c2a4={},_0x5acb2a={},_0x473ab7={'count':0x0,'rows':[]};var _0xf5d18=db[_0x7b07('0x38')][_0x7b07('0x39')];_0x5acb2a[_0x7b07('0x3a')]=_[_0x7b07('0x3b')](_0xf5d18);_0x5acb2a['query']=_[_0x7b07('0x3b')](_0x2b0a6e[_0x7b07('0x3c')]);_0x5acb2a[_0x7b07('0x3d')]=_[_0x7b07('0x3e')](_0x5acb2a[_0x7b07('0x3a')],_0x5acb2a[_0x7b07('0x3c')]);_0x58c2a4[_0x7b07('0x3f')]=_[_0x7b07('0x3e')](_0x5acb2a[_0x7b07('0x3a')],qs[_0x7b07('0x40')](_0x2b0a6e[_0x7b07('0x3c')][_0x7b07('0x40')]));_0x58c2a4[_0x7b07('0x3f')]=_0x58c2a4[_0x7b07('0x3f')][_0x7b07('0x41')]?_0x58c2a4[_0x7b07('0x3f')]:_0x5acb2a[_0x7b07('0x3a')];if(!_0x2b0a6e['query']['hasOwnProperty'](_0x7b07('0x42'))){_0x58c2a4[_0x7b07('0x2b')]=qs['limit'](_0x2b0a6e['query'][_0x7b07('0x2b')]);_0x58c2a4[_0x7b07('0x2a')]=qs[_0x7b07('0x2a')](_0x2b0a6e[_0x7b07('0x3c')][_0x7b07('0x2a')]);}_0x58c2a4[_0x7b07('0x43')]=qs[_0x7b07('0x44')](_0x2b0a6e[_0x7b07('0x3c')][_0x7b07('0x44')]);_0x58c2a4['where']=qs['filters'](_[_0x7b07('0x45')](_0x2b0a6e[_0x7b07('0x3c')],_0x5acb2a[_0x7b07('0x3d')]));if(_0x2b0a6e['query'][_0x7b07('0x46')]){_0x58c2a4[_0x7b07('0x47')]=_[_0x7b07('0x48')](_0x58c2a4['where'],{'$or':_[_0x7b07('0x49')](_0xf5d18,function(_0x13439d){if(_0x13439d[_0x7b07('0x4a')][_0x7b07('0x4b')]!==_0x7b07('0x4c')){var _0x255ae9={};_0x255ae9[_0x13439d[_0x7b07('0x4d')]]={'$like':'%'+_0x2b0a6e[_0x7b07('0x3c')][_0x7b07('0x46')]+'%'};return _0x255ae9;}})});}_0x58c2a4=_[_0x7b07('0x48')]({},_0x58c2a4,_0x2b0a6e['options']);var _0x371abb={'where':_0x58c2a4[_0x7b07('0x47')]};return db[_0x7b07('0x38')][_0x7b07('0x29')](_0x371abb)['then'](function(_0x4dab09){_0x473ab7['count']=_0x4dab09;if(_0x2b0a6e[_0x7b07('0x3c')]['includeAll']){_0x58c2a4[_0x7b07('0x4e')]=[{'all':!![]}];}return db[_0x7b07('0x38')][_0x7b07('0x4f')](_0x58c2a4);})[_0x7b07('0x1c')](function(_0x30ba98){_0x473ab7['rows']=_0x30ba98;return _0x473ab7;})['then'](respondWithFilteredResult(_0x17fcdd,_0x58c2a4))['catch'](handleError(_0x17fcdd,null));};exports[_0x7b07('0x50')]=function(_0x55b91a,_0x2bc3da){var _0x3386d4={'raw':![],'where':{'id':_0x55b91a[_0x7b07('0x51')]['id']}},_0x581f89={};_0x581f89[_0x7b07('0x3a')]=_[_0x7b07('0x3b')](db['Trunk']['rawAttributes']);_0x581f89['query']=_['keys'](_0x55b91a[_0x7b07('0x3c')]);_0x581f89['filters']=_[_0x7b07('0x3e')](_0x581f89[_0x7b07('0x3a')],_0x581f89[_0x7b07('0x3c')]);_0x3386d4[_0x7b07('0x3f')]=_['intersection'](_0x581f89['model'],qs[_0x7b07('0x40')](_0x55b91a[_0x7b07('0x3c')][_0x7b07('0x40')]));_0x3386d4['attributes']=_0x3386d4[_0x7b07('0x3f')][_0x7b07('0x41')]?_0x3386d4[_0x7b07('0x3f')]:_0x581f89[_0x7b07('0x3a')];if(_0x55b91a[_0x7b07('0x3c')]['includeAll']){_0x3386d4[_0x7b07('0x4e')]=[{'all':!![]}];}_0x3386d4=_[_0x7b07('0x48')]({},_0x3386d4,_0x55b91a[_0x7b07('0x52')]);return db['Trunk'][_0x7b07('0x53')](_0x3386d4)[_0x7b07('0x1c')](handleEntityNotFound(_0x2bc3da,null))[_0x7b07('0x1c')](respondWithResult(_0x2bc3da,null))[_0x7b07('0x26')](handleError(_0x2bc3da,null));};exports[_0x7b07('0x54')]=function(_0x29b832,_0x5aabde){var _0x513479={'raw':![],'where':{'id':_0x29b832[_0x7b07('0x51')]['id']}},_0x167323={};_0x167323['model']=_[_0x7b07('0x3b')](db[_0x7b07('0x38')]['rawAttributes']);_0x513479[_0x7b07('0x3f')]=_['intersection'](_0x167323['model'],qs[_0x7b07('0x40')](_0x29b832[_0x7b07('0x3c')][_0x7b07('0x40')]));_0x513479['attributes']=_0x513479[_0x7b07('0x3f')]['length']?_0x513479[_0x7b07('0x3f')]:_0x167323[_0x7b07('0x3a')];if(_0x29b832[_0x7b07('0x3c')][_0x7b07('0x55')]){_0x513479[_0x7b07('0x4e')]=[{'all':!![]}];}_0x513479=_[_0x7b07('0x48')]({},_0x513479,_0x29b832[_0x7b07('0x52')]);return db[_0x7b07('0x38')][_0x7b07('0x53')](_0x513479)['then'](handleEntityNotFound(_0x5aabde,null))['then'](function(_0x15e331){if(_0x15e331){var _0x39492f=_0x15e331[_0x7b07('0x31')]({'plain':!![]});_0x39492f=qs[_0x7b07('0x56')](_0x39492f,['id',_0x7b07('0x57'),_0x7b07('0x58')]);_0x29b832[_0x7b07('0x59')]=_[_0x7b07('0x56')](_0x29b832['body'],['id',_0x7b07('0x57'),_0x7b07('0x58')]);return db[_0x7b07('0x38')]['create'](_[_0x7b07('0x48')](_0x39492f,_0x29b832[_0x7b07('0x59')]),{'include':_0x29b832[_0x7b07('0x3c')][_0x7b07('0x55')]?[{'all':!![]}]:undefined})[_0x7b07('0x1c')](function(_0x16f78f){var _0x27177b=_0x29b832['user'][_0x7b07('0x31')]({'plain':!![]});if(!_0x27177b)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x27177b[_0x7b07('0x5a')]===_0x7b07('0x5b')){var _0x4fa5d0=_0x16f78f[_0x7b07('0x31')]({'plain':!![]});var _0x49543a=_0x7b07('0x32');return db['UserProfileSection'][_0x7b07('0x53')]({'where':{'name':_0x49543a,'userProfileId':_0x27177b[_0x7b07('0x5c')]},'raw':!![]})[_0x7b07('0x1c')](function(_0x1495dc){if(_0x1495dc&&_0x1495dc[_0x7b07('0x5d')]===0x0){return db[_0x7b07('0x5e')][_0x7b07('0x5f')]({'name':_0x4fa5d0['name'],'resourceId':_0x4fa5d0['id'],'type':_0x1495dc[_0x7b07('0x35')],'sectionId':_0x1495dc['id']},{})[_0x7b07('0x1c')](function(){return _0x16f78f;});}else{return _0x16f78f;}})['catch'](function(_0x3343d7){logger[_0x7b07('0x23')](_0x7b07('0x60'),_0x3343d7);throw _0x3343d7;});}return _0x16f78f;});}})[_0x7b07('0x1c')](respondWithResult(_0x5aabde,0xc9))['catch'](handleError(_0x5aabde,null));};exports[_0x7b07('0x5f')]=function(_0x26fce9,_0x3293fe,_0x1b1c04){var _0x38392c;return db['Trunk'][_0x7b07('0x5f')](_0x26fce9['body'],{'raw':!![]})[_0x7b07('0x1c')](function(_0x58af11){_0x38392c=_0x58af11;return db[_0x7b07('0x38')][_0x7b07('0x4f')]({'raw':!![]});})[_0x7b07('0x1c')](function(_0x3b0473){var _0x2f5247=fs['readFileSync'](path[_0x7b07('0x61')](config[_0x7b07('0x62')],_0x7b07('0x63')),_0x7b07('0x64'));var _0x1de7bd=fs['readFileSync'](path[_0x7b07('0x61')](config['root'],_0x7b07('0x65')),_0x7b07('0x64'));var _0xf5c9a6=ejs[_0x7b07('0x66')](_0x2f5247,{'trunks':_0x3b0473||[]});fs[_0x7b07('0x67')](_0x7b07('0x68'),_0xf5c9a6);if(_0x38392c['registry']){var _0x11bf68=ejs['render'](_0x1de7bd,{'trunks':_0x3b0473||[]});fs[_0x7b07('0x67')](_0x7b07('0x69'),_0x11bf68);}})[_0x7b07('0x1c')](function(){return respondWithRpcPromise('Reload',_0x7b07('0x5f'),{'module':_0x7b07('0x6a')});})[_0x7b07('0x1c')](function(){var _0x3ef539=_0x26fce9[_0x7b07('0x5b')][_0x7b07('0x31')]({'plain':!![]});if(!_0x3ef539)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x3ef539[_0x7b07('0x5a')]==='user'){var _0x2a2aa7=_0x38392c[_0x7b07('0x31')]({'plain':!![]});return db[_0x7b07('0x6b')]['find']({'where':{'name':'Trunks','userProfileId':_0x3ef539[_0x7b07('0x5c')]},'raw':!![]})[_0x7b07('0x1c')](function(_0x3167c6){if(_0x3167c6&&_0x3167c6[_0x7b07('0x5d')]===0x0){return db['UserProfileResource']['create']({'name':_0x2a2aa7[_0x7b07('0x35')],'resourceId':_0x2a2aa7['id'],'type':_0x3167c6[_0x7b07('0x35')],'sectionId':_0x3167c6['id']},{})['then'](function(){return _0x38392c;});}else{return _0x38392c;}})[_0x7b07('0x26')](function(_0x1e9d5c){logger[_0x7b07('0x23')](_0x7b07('0x60'),_0x1e9d5c);throw _0x1e9d5c;});}return _0x38392c;})['then'](respondWithResult(_0x3293fe,0xc9))[_0x7b07('0x26')](handleError(_0x3293fe,null));};exports[_0x7b07('0x6c')]=function(_0x3fca33,_0x420e1e,_0x473f24){var _0x38d420;return db[_0x7b07('0x38')][_0x7b07('0x53')]({'where':{'id':_0x3fca33[_0x7b07('0x51')]['id']}})[_0x7b07('0x1c')](handleEntityNotFound(_0x420e1e,null))['then'](saveUpdates(_0x3fca33[_0x7b07('0x59')],null))[_0x7b07('0x1c')](function(_0x17dbdb){if(_0x17dbdb){_0x38d420=_0x17dbdb;return db[_0x7b07('0x38')][_0x7b07('0x4f')]({'raw':!![]});}})[_0x7b07('0x1c')](function(_0x1717c0){if(_0x1717c0){var _0x48e2e1=fs[_0x7b07('0x6d')](path['join'](config[_0x7b07('0x62')],_0x7b07('0x63')),_0x7b07('0x64'));var _0x34a24f=fs[_0x7b07('0x6d')](path[_0x7b07('0x61')](config['root'],_0x7b07('0x65')),_0x7b07('0x64'));var _0x4e379f=ejs['render'](_0x48e2e1,{'trunks':_0x1717c0||[]});fs['writeFileSync'](_0x7b07('0x68'),_0x4e379f);var _0x50e237=ejs[_0x7b07('0x66')](_0x34a24f,{'trunks':_0x1717c0||[]});fs['writeFileSync'](_0x7b07('0x69'),_0x50e237);return respondWithRpcPromise('Reload',_0x7b07('0x6c'),{'module':_0x7b07('0x6a')});}return null;})['then'](function(_0x502217){if(_0x502217){return _0x38d420;}})['then'](respondWithResult(_0x420e1e,null))[_0x7b07('0x26')](handleError(_0x420e1e,null));};exports[_0x7b07('0x30')]=function(_0x248993,_0x26a85d,_0x3243c0){var _0x4835b2;return db[_0x7b07('0x38')]['find']({'where':{'id':_0x248993['params']['id']}})[_0x7b07('0x1c')](handleEntityNotFound(_0x26a85d,null))[_0x7b07('0x1c')](removeEntity(_0x26a85d,null))[_0x7b07('0x1c')](function(){return db[_0x7b07('0x38')]['findAll']({'raw':!![]});})['then'](function(_0x3be96f){var _0x5b40ad=fs[_0x7b07('0x6d')](path['join'](config[_0x7b07('0x62')],'server/files/templates/trunk.ejs'),_0x7b07('0x64'));var _0x94202b=fs[_0x7b07('0x6d')](path[_0x7b07('0x61')](config[_0x7b07('0x62')],_0x7b07('0x65')),_0x7b07('0x64'));var _0x5214aa=ejs[_0x7b07('0x66')](_0x5b40ad,{'trunks':_0x3be96f});var _0x485f1c=ejs[_0x7b07('0x66')](_0x94202b,{'trunks':_0x3be96f});fs['writeFileSync'](_0x7b07('0x68'),_0x5214aa);fs[_0x7b07('0x67')](_0x7b07('0x69'),_0x485f1c);return respondWithRpcPromise(_0x7b07('0x6e'),_0x7b07('0x30'),{'module':_0x7b07('0x6a')});})['catch'](handleError(_0x26a85d,null));};
\ No newline at end of file
index 17032bf..064c5e1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee39=['../../config/environment','./trunk.attributes','exports','Trunk','tools_trunks','lodash','util','../../config/logger','moment','bluebird','request-promise','path','rimraf'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xee39,0x1e6));var _0x9ee3=function(_0x511dc5,_0x158e3e){_0x511dc5=_0x511dc5-0x0;var _0x195781=_0xee39[_0x511dc5];return _0x195781;};'use strict';var _=require(_0x9ee3('0x0'));var util=require(_0x9ee3('0x1'));var logger=require(_0x9ee3('0x2'))('api');var moment=require(_0x9ee3('0x3'));var BPromise=require(_0x9ee3('0x4'));var rp=require(_0x9ee3('0x5'));var fs=require('fs');var path=require(_0x9ee3('0x6'));var rimraf=require(_0x9ee3('0x7'));var config=require(_0x9ee3('0x8'));var attributes=require(_0x9ee3('0x9'));module[_0x9ee3('0xa')]=function(_0x24d93e,_0x2689bb){return _0x24d93e['define'](_0x9ee3('0xb'),attributes,{'tableName':_0x9ee3('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0f9f=['./trunk.attributes','exports','define','tools_trunks','util','../../config/logger','api','bluebird','request-promise','path','rimraf','../../config/environment'];(function(_0x587dd0,_0x273922){var _0x56f153=function(_0x27fb33){while(--_0x27fb33){_0x587dd0['push'](_0x587dd0['shift']());}};_0x56f153(++_0x273922);}(_0x0f9f,0x1cc));var _0xf0f9=function(_0xbe1b2d,_0xcae67c){_0xbe1b2d=_0xbe1b2d-0x0;var _0x1e38a3=_0x0f9f[_0xbe1b2d];return _0x1e38a3;};'use strict';var _=require('lodash');var util=require(_0xf0f9('0x0'));var logger=require(_0xf0f9('0x1'))(_0xf0f9('0x2'));var moment=require('moment');var BPromise=require(_0xf0f9('0x3'));var rp=require(_0xf0f9('0x4'));var fs=require('fs');var path=require(_0xf0f9('0x5'));var rimraf=require(_0xf0f9('0x6'));var config=require(_0xf0f9('0x7'));var attributes=require(_0xf0f9('0x8'));module[_0xf0f9('0x9')]=function(_0x3eaff3,_0x425fbe){return _0x3eaff3[_0xf0f9('0xa')]('Trunk',attributes,{'tableName':_0xf0f9('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f7e44a3..9f907d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf5db=['then','info','Trunk,\x20%s,\x20%s','request\x20sent','debug','Trunk,\x20%s,\x20%s,\x20%s','error','message','catch','Trunk','findAll','options','raw','where','include','map','model','attributes','GetTrunk','stringify','ShowTrunk','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','request'];(function(_0x10c51f,_0x11270f){var _0x56a0cd=function(_0x563ac6){while(--_0x563ac6){_0x10c51f['push'](_0x10c51f['shift']());}};_0x56a0cd(++_0x11270f);}(_0xf5db,0x180));var _0xbf5d=function(_0x2fe383,_0x15fd8e){_0x2fe383=_0x2fe383-0x0;var _0x234efe=_0xf5db[_0x2fe383];return _0x234efe;};'use strict';var _=require(_0xbf5d('0x0'));var util=require(_0xbf5d('0x1'));var moment=require('moment');var BPromise=require(_0xbf5d('0x2'));var rs=require(_0xbf5d('0x3'));var fs=require('fs');var Redis=require(_0xbf5d('0x4'));var db=require(_0xbf5d('0x5'))['db'];var utils=require(_0xbf5d('0x6'));var logger=require(_0xbf5d('0x7'))(_0xbf5d('0x8'));var config=require('../../config/environment');var jayson=require(_0xbf5d('0x9'));var client=jayson[_0xbf5d('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x20a2e8,_0x2ba9ab,_0x143a50){return new BPromise(function(_0x256494,_0x26d840){return client[_0xbf5d('0xb')](_0x20a2e8,_0x143a50)[_0xbf5d('0xc')](function(_0x3e824b){logger[_0xbf5d('0xd')](_0xbf5d('0xe'),_0x2ba9ab,_0xbf5d('0xf'));logger[_0xbf5d('0x10')](_0xbf5d('0x11'),_0x2ba9ab,_0xbf5d('0xf'),JSON['stringify'](_0x3e824b));if(_0x3e824b[_0xbf5d('0x12')]){if(_0x3e824b['error']['code']===0x1f4){logger[_0xbf5d('0x12')](_0xbf5d('0xe'),_0x2ba9ab,_0x3e824b['error']['message']);return _0x26d840(_0x3e824b['error'][_0xbf5d('0x13')]);}logger[_0xbf5d('0x12')](_0xbf5d('0xe'),_0x2ba9ab,_0x3e824b[_0xbf5d('0x12')]['message']);return _0x256494(_0x3e824b[_0xbf5d('0x12')][_0xbf5d('0x13')]);}else{logger[_0xbf5d('0xd')](_0xbf5d('0xe'),_0x2ba9ab,_0xbf5d('0xf'));_0x256494(_0x3e824b['result']['message']);}})[_0xbf5d('0x14')](function(_0x1e9647){logger[_0xbf5d('0x12')]('Trunk,\x20%s,\x20%s',_0x2ba9ab,_0x1e9647);_0x26d840(_0x1e9647);});});}exports['GetTrunk']=function(_0x4be3ed){var _0x129d4a=this;return new Promise(function(_0x42222c,_0x517b3d){return db[_0xbf5d('0x15')][_0xbf5d('0x16')]({'raw':_0x4be3ed[_0xbf5d('0x17')]?_0x4be3ed[_0xbf5d('0x17')][_0xbf5d('0x18')]===undefined?!![]:![]:!![],'where':_0x4be3ed[_0xbf5d('0x17')]?_0x4be3ed[_0xbf5d('0x17')][_0xbf5d('0x19')]||null:null,'attributes':_0x4be3ed[_0xbf5d('0x17')]?_0x4be3ed[_0xbf5d('0x17')]['attributes']||null:null,'limit':_0x4be3ed[_0xbf5d('0x17')]?_0x4be3ed[_0xbf5d('0x17')]['limit']||null:null,'include':_0x4be3ed[_0xbf5d('0x17')]?_0x4be3ed['options'][_0xbf5d('0x1a')]?_[_0xbf5d('0x1b')](_0x4be3ed['options'][_0xbf5d('0x1a')],function(_0x5e83a2){return{'model':db[_0x5e83a2[_0xbf5d('0x1c')]],'as':_0x5e83a2['as'],'attributes':_0x5e83a2[_0xbf5d('0x1d')],'include':_0x5e83a2[_0xbf5d('0x1a')]?_['map'](_0x5e83a2[_0xbf5d('0x1a')],function(_0x7e5fff){return{'model':db[_0x7e5fff[_0xbf5d('0x1c')]],'as':_0x7e5fff['as'],'attributes':_0x7e5fff[_0xbf5d('0x1d')],'include':_0x7e5fff['include']?_[_0xbf5d('0x1b')](_0x7e5fff[_0xbf5d('0x1a')],function(_0x10dd6b){return{'model':db[_0x10dd6b['model']],'as':_0x10dd6b['as'],'attributes':_0x10dd6b[_0xbf5d('0x1d')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x436df6){logger['info'](_0xbf5d('0x1e'),_0x4be3ed);logger['debug'](_0xbf5d('0x1e'),_0x4be3ed,JSON[_0xbf5d('0x1f')](_0x436df6));_0x42222c(_0x436df6);})[_0xbf5d('0x14')](function(_0x38bfcd){logger[_0xbf5d('0x12')](_0xbf5d('0x1e'),_0x38bfcd[_0xbf5d('0x13')],_0x4be3ed);_0x517b3d(_0x129d4a['error'](0x1f4,_0x38bfcd[_0xbf5d('0x13')]));});});};exports['ShowTrunk']=function(_0x1d0cc8){var _0x5f507b=this;return new Promise(function(_0x221cf5,_0x42907d){return db[_0xbf5d('0x15')]['find']({'raw':_0x1d0cc8[_0xbf5d('0x17')]?_0x1d0cc8[_0xbf5d('0x17')][_0xbf5d('0x18')]===undefined?!![]:![]:!![],'where':_0x1d0cc8[_0xbf5d('0x17')]?_0x1d0cc8['options'][_0xbf5d('0x19')]||null:null,'attributes':_0x1d0cc8[_0xbf5d('0x17')]?_0x1d0cc8['options']['attributes']||null:null,'include':_0x1d0cc8['options']?_0x1d0cc8[_0xbf5d('0x17')][_0xbf5d('0x1a')]?_['map'](_0x1d0cc8[_0xbf5d('0x17')][_0xbf5d('0x1a')],function(_0x523448){return{'model':db[_0x523448['model']],'as':_0x523448['as'],'attributes':_0x523448[_0xbf5d('0x1d')],'include':_0x523448[_0xbf5d('0x1a')]?_['map'](_0x523448['include'],function(_0x27b183){return{'model':db[_0x27b183[_0xbf5d('0x1c')]],'as':_0x27b183['as'],'attributes':_0x27b183[_0xbf5d('0x1d')],'include':_0x27b183[_0xbf5d('0x1a')]?_['map'](_0x27b183[_0xbf5d('0x1a')],function(_0x16a228){return{'model':db[_0x16a228[_0xbf5d('0x1c')]],'as':_0x16a228['as'],'attributes':_0x16a228[_0xbf5d('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xbf5d('0xc')](function(_0x3b4352){logger[_0xbf5d('0xd')]('ShowTrunk',_0x1d0cc8);logger[_0xbf5d('0x10')](_0xbf5d('0x20'),_0x1d0cc8,JSON[_0xbf5d('0x1f')](_0x3b4352));_0x221cf5(_0x3b4352);})[_0xbf5d('0x14')](function(_0xa51d4b){logger['error'](_0xbf5d('0x20'),_0xa51d4b[_0xbf5d('0x13')],_0x1d0cc8);_0x42907d(_0x5f507b[_0xbf5d('0x12')](0x1f4,_0xa51d4b[_0xbf5d('0x13')]));});});};
\ No newline at end of file
+var _0x933a=['../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','info','Trunk,\x20%s,\x20%s','request\x20sent','Trunk,\x20%s,\x20%s,\x20%s','error','message','result','options','where','attributes','include','map','model','GetTrunk','debug','catch','ShowTrunk','find','raw','stringify','lodash','util','moment','bluebird','randomstring','../../mysqldb'];(function(_0x34af1d,_0xd5700b){var _0xa22302=function(_0x5f5404){while(--_0x5f5404){_0x34af1d['push'](_0x34af1d['shift']());}};_0xa22302(++_0xd5700b);}(_0x933a,0x1d6));var _0xa933=function(_0x54a345,_0x2cf20f){_0x54a345=_0x54a345-0x0;var _0x438d46=_0x933a[_0x54a345];return _0x438d46;};'use strict';var _=require(_0xa933('0x0'));var util=require(_0xa933('0x1'));var moment=require(_0xa933('0x2'));var BPromise=require(_0xa933('0x3'));var rs=require(_0xa933('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xa933('0x5'))['db'];var utils=require(_0xa933('0x6'));var logger=require(_0xa933('0x7'))(_0xa933('0x8'));var config=require(_0xa933('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xa933('0xa')][_0xa933('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x45cc9c,_0x868e5a,_0x542687){return new BPromise(function(_0xadabd3,_0x259a30){return client[_0xa933('0xc')](_0x45cc9c,_0x542687)[_0xa933('0xd')](function(_0x56596c){logger[_0xa933('0xe')](_0xa933('0xf'),_0x868e5a,_0xa933('0x10'));logger['debug'](_0xa933('0x11'),_0x868e5a,_0xa933('0x10'),JSON['stringify'](_0x56596c));if(_0x56596c['error']){if(_0x56596c[_0xa933('0x12')]['code']===0x1f4){logger[_0xa933('0x12')](_0xa933('0xf'),_0x868e5a,_0x56596c[_0xa933('0x12')]['message']);return _0x259a30(_0x56596c[_0xa933('0x12')][_0xa933('0x13')]);}logger[_0xa933('0x12')](_0xa933('0xf'),_0x868e5a,_0x56596c[_0xa933('0x12')][_0xa933('0x13')]);return _0xadabd3(_0x56596c[_0xa933('0x12')]['message']);}else{logger['info'](_0xa933('0xf'),_0x868e5a,_0xa933('0x10'));_0xadabd3(_0x56596c[_0xa933('0x14')][_0xa933('0x13')]);}})['catch'](function(_0x584ca0){logger[_0xa933('0x12')](_0xa933('0xf'),_0x868e5a,_0x584ca0);_0x259a30(_0x584ca0);});});}exports['GetTrunk']=function(_0x14fe41){var _0x45bc97=this;return new Promise(function(_0x350255,_0x6466b4){return db['Trunk']['findAll']({'raw':_0x14fe41['options']?_0x14fe41[_0xa933('0x15')]['raw']===undefined?!![]:![]:!![],'where':_0x14fe41[_0xa933('0x15')]?_0x14fe41[_0xa933('0x15')][_0xa933('0x16')]||null:null,'attributes':_0x14fe41[_0xa933('0x15')]?_0x14fe41['options'][_0xa933('0x17')]||null:null,'limit':_0x14fe41[_0xa933('0x15')]?_0x14fe41[_0xa933('0x15')]['limit']||null:null,'include':_0x14fe41[_0xa933('0x15')]?_0x14fe41[_0xa933('0x15')][_0xa933('0x18')]?_[_0xa933('0x19')](_0x14fe41[_0xa933('0x15')]['include'],function(_0x9c1592){return{'model':db[_0x9c1592['model']],'as':_0x9c1592['as'],'attributes':_0x9c1592[_0xa933('0x17')],'include':_0x9c1592[_0xa933('0x18')]?_[_0xa933('0x19')](_0x9c1592[_0xa933('0x18')],function(_0x2c1e2e){return{'model':db[_0x2c1e2e[_0xa933('0x1a')]],'as':_0x2c1e2e['as'],'attributes':_0x2c1e2e['attributes'],'include':_0x2c1e2e[_0xa933('0x18')]?_[_0xa933('0x19')](_0x2c1e2e['include'],function(_0x36d365){return{'model':db[_0x36d365[_0xa933('0x1a')]],'as':_0x36d365['as'],'attributes':_0x36d365[_0xa933('0x17')]};}):[]};}):[]};}):[]:[]})[_0xa933('0xd')](function(_0x3a3f6c){logger[_0xa933('0xe')](_0xa933('0x1b'),_0x14fe41);logger[_0xa933('0x1c')]('GetTrunk',_0x14fe41,JSON['stringify'](_0x3a3f6c));_0x350255(_0x3a3f6c);})[_0xa933('0x1d')](function(_0xa64edc){logger[_0xa933('0x12')]('GetTrunk',_0xa64edc[_0xa933('0x13')],_0x14fe41);_0x6466b4(_0x45bc97[_0xa933('0x12')](0x1f4,_0xa64edc[_0xa933('0x13')]));});});};exports[_0xa933('0x1e')]=function(_0x3d3840){var _0x35e4e4=this;return new Promise(function(_0x41aed2,_0x2a860a){return db['Trunk'][_0xa933('0x1f')]({'raw':_0x3d3840[_0xa933('0x15')]?_0x3d3840['options'][_0xa933('0x20')]===undefined?!![]:![]:!![],'where':_0x3d3840[_0xa933('0x15')]?_0x3d3840[_0xa933('0x15')][_0xa933('0x16')]||null:null,'attributes':_0x3d3840['options']?_0x3d3840[_0xa933('0x15')][_0xa933('0x17')]||null:null,'include':_0x3d3840['options']?_0x3d3840[_0xa933('0x15')][_0xa933('0x18')]?_[_0xa933('0x19')](_0x3d3840[_0xa933('0x15')][_0xa933('0x18')],function(_0x5d5dd0){return{'model':db[_0x5d5dd0[_0xa933('0x1a')]],'as':_0x5d5dd0['as'],'attributes':_0x5d5dd0[_0xa933('0x17')],'include':_0x5d5dd0[_0xa933('0x18')]?_[_0xa933('0x19')](_0x5d5dd0[_0xa933('0x18')],function(_0x44b84a){return{'model':db[_0x44b84a['model']],'as':_0x44b84a['as'],'attributes':_0x44b84a['attributes'],'include':_0x44b84a[_0xa933('0x18')]?_[_0xa933('0x19')](_0x44b84a[_0xa933('0x18')],function(_0x3a2abb){return{'model':db[_0x3a2abb[_0xa933('0x1a')]],'as':_0x3a2abb['as'],'attributes':_0x3a2abb[_0xa933('0x17')]};}):[]};}):[]};}):[]:[]})[_0xa933('0xd')](function(_0x6e35c1){logger['info'](_0xa933('0x1e'),_0x3d3840);logger[_0xa933('0x1c')](_0xa933('0x1e'),_0x3d3840,JSON[_0xa933('0x21')](_0x6e35c1));_0x41aed2(_0x6e35c1);})[_0xa933('0x1d')](function(_0x28bfed){logger[_0xa933('0x12')]('ShowTrunk',_0x28bfed[_0xa933('0x13')],_0x3d3840);_0x2a860a(_0x35e4e4['error'](0x1f4,_0x28bfed[_0xa933('0x13')]));});});};
\ No newline at end of file
index f3e8bf7..21c65ee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc423=['/:id/square_projects','addSquareProjects','/:id/api_key','createApiKey','put','/:id','update','/:id/password','changePassword','removeQueues','delete','destroy','removeChatInteractions','removeMailInteractions','removeFaxInteractions','removeSmsInteractions','removeOpenchannelInteractions','removeFaxAccounts','removeMailAccounts','removeOpenchannelAccounts','/:id/chat_websites','removeChatWebsites','removeSquareProjects','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','describe','/:id/avatar','getAvatar','/:id/contacts','getContacts','/:id/queues','getQueues','/:id/queues_rt','getVoiceQueuesRt','/:id/groups','getGroups','/:id/recordings','getRecordings','getScreenRecordings','/:id/chat/interactions','getChatInteractions','getOpenchannelInteractions','/:id/mail/interactions','getMailInteractions','/:id/sms/interactions','/:id/fax/interactions','getFaxInteractions','/:id/teams','/:id/lists','getLists','/:id/agents','getAgents','/:id/prefixes','getVoicePrefixes','getFaxAccounts','getMailAccounts','/:id/openchannel_accounts','getOpenchannelAccounts','/:id/sms_accounts','getSmsAccounts','getChatWebsites','getSquareProjects','/:id/scheduled_calls','getApiKey','post','/create_many','bulkCreate','addContacts','create','addQueues','diskStorage','join','root','format','now','originalname','single','file','login','/:id/logout','pause','/:id/unpause','unpause','addTeams','/:id/chat_interactions','addChatInteractions','/:id/mail_interactions','/:id/fax_interactions','addFaxInteractions','/:id/sms_interactions','/:id/openchannel_interactions','addOpenchannelInteractions','/:id/fax_accounts','addFaxAccounts','addSmsAccounts','addChatWebsites'];(function(_0x31b9cf,_0x1a809b){var _0x357b8a=function(_0x50a273){while(--_0x50a273){_0x31b9cf['push'](_0x31b9cf['shift']());}};_0x357b8a(++_0x1a809b);}(_0xc423,0x159));var _0x3c42=function(_0x413feb,_0x10477f){_0x413feb=_0x413feb-0x0;var _0x40ee88=_0xc423[_0x413feb];return _0x40ee88;};'use strict';var multer=require(_0x3c42('0x0'));var util=require(_0x3c42('0x1'));var path=require(_0x3c42('0x2'));var timeout=require(_0x3c42('0x3'));var express=require(_0x3c42('0x4'));var router=express['Router']();var auth=require(_0x3c42('0x5'));var interaction=require(_0x3c42('0x6'));var config=require(_0x3c42('0x7'));var controller=require('./user.controller');router[_0x3c42('0x8')]('/',auth[_0x3c42('0x9')](),controller[_0x3c42('0xa')]);router[_0x3c42('0x8')](_0x3c42('0xb'),auth[_0x3c42('0x9')](),controller[_0x3c42('0xc')]);router[_0x3c42('0x8')]('/:id',auth[_0x3c42('0x9')](),controller['show']);router['get'](_0x3c42('0xd'),controller[_0x3c42('0xe')]);router[_0x3c42('0x8')](_0x3c42('0xf'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x10')]);router[_0x3c42('0x8')](_0x3c42('0x11'),auth['isAuthenticated'](),controller[_0x3c42('0x12')]);router[_0x3c42('0x8')](_0x3c42('0x13'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x14')]);router['get'](_0x3c42('0x15'),auth['isAuthenticated'](),controller[_0x3c42('0x16')]);router[_0x3c42('0x8')](_0x3c42('0x17'),auth['isAuthenticated'](),controller[_0x3c42('0x18')]);router[_0x3c42('0x8')]('/:id/screen_recordings',auth['isAuthenticated'](),controller[_0x3c42('0x19')]);router['get'](_0x3c42('0x1a'),auth['isAuthenticated'](),controller[_0x3c42('0x1b')]);router[_0x3c42('0x8')]('/:id/openchannel/interactions',auth[_0x3c42('0x9')](),controller[_0x3c42('0x1c')]);router[_0x3c42('0x8')](_0x3c42('0x1d'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x1e')]);router[_0x3c42('0x8')](_0x3c42('0x1f'),auth[_0x3c42('0x9')](),controller['getSmsInteractions']);router[_0x3c42('0x8')](_0x3c42('0x20'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x21')]);router['get'](_0x3c42('0x22'),auth['isAuthenticated'](),controller['getTeams']);router[_0x3c42('0x8')](_0x3c42('0x23'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x24')]);router[_0x3c42('0x8')](_0x3c42('0x25'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x26')]);router[_0x3c42('0x8')](_0x3c42('0x27'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x28')]);router[_0x3c42('0x8')]('/:id/fax_accounts',auth[_0x3c42('0x9')](),controller[_0x3c42('0x29')]);router[_0x3c42('0x8')]('/:id/mail_accounts',auth[_0x3c42('0x9')](),controller[_0x3c42('0x2a')]);router[_0x3c42('0x8')](_0x3c42('0x2b'),auth['isAuthenticated'](),controller[_0x3c42('0x2c')]);router[_0x3c42('0x8')](_0x3c42('0x2d'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x2e')]);router[_0x3c42('0x8')]('/:id/chat_websites',auth[_0x3c42('0x9')](),controller[_0x3c42('0x2f')]);router[_0x3c42('0x8')]('/:id/square_projects',auth['isAuthenticated'](),controller[_0x3c42('0x30')]);router[_0x3c42('0x8')](_0x3c42('0x31'),auth[_0x3c42('0x9')](),controller['getScheduledCalls']);router[_0x3c42('0x8')]('/:id/api_key',auth[_0x3c42('0x9')](),controller[_0x3c42('0x32')]);router[_0x3c42('0x33')](_0x3c42('0x34'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x35')]);router[_0x3c42('0x33')](_0x3c42('0xf'),auth['isAuthenticated'](),controller[_0x3c42('0x36')]);router[_0x3c42('0x33')]('/',auth[_0x3c42('0x9')](),controller[_0x3c42('0x37')]);router[_0x3c42('0x33')]('/:id/queues',auth['isAuthenticated'](),controller[_0x3c42('0x38')]);var upload=multer({'storage':multer[_0x3c42('0x39')]({'destination':function(_0x4348b9,_0x9372d1,_0x556646){_0x556646(null,path[_0x3c42('0x3a')](config[_0x3c42('0x3b')],'server/files/images/'));},'filename':function(_0x359a58,_0x5ed998,_0x5356bc){_0x5356bc(null,util[_0x3c42('0x3c')]('%s-%s',Date[_0x3c42('0x3d')](),_0x5ed998[_0x3c42('0x3e')]));}})});router['post'](_0x3c42('0xd'),upload[_0x3c42('0x3f')](_0x3c42('0x40')),controller['addAvatar']);router[_0x3c42('0x33')]('/:id/login',auth['isAuthenticated'](),controller[_0x3c42('0x41')]);router[_0x3c42('0x33')](_0x3c42('0x42'),auth['isAuthenticated'](),controller['logout']);router[_0x3c42('0x33')]('/:id/pause',auth[_0x3c42('0x9')](),controller[_0x3c42('0x43')]);router[_0x3c42('0x33')](_0x3c42('0x44'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x45')]);router['post'](_0x3c42('0x22'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x46')]);router[_0x3c42('0x33')](_0x3c42('0x47'),auth['isAuthenticated'](),controller[_0x3c42('0x48')]);router['post'](_0x3c42('0x49'),auth['isAuthenticated'](),controller['addMailInteractions']);router[_0x3c42('0x33')](_0x3c42('0x4a'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x4b')]);router[_0x3c42('0x33')](_0x3c42('0x4c'),auth[_0x3c42('0x9')](),controller['addSmsInteractions']);router[_0x3c42('0x33')](_0x3c42('0x4d'),auth['isAuthenticated'](),controller[_0x3c42('0x4e')]);router[_0x3c42('0x33')](_0x3c42('0x4f'),auth['isAuthenticated'](),controller[_0x3c42('0x50')]);router['post']('/:id/mail_accounts',auth[_0x3c42('0x9')](),controller['addMailAccounts']);router[_0x3c42('0x33')](_0x3c42('0x2b'),auth['isAuthenticated'](),controller['addOpenchannelAccounts']);router[_0x3c42('0x33')](_0x3c42('0x2d'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x51')]);router[_0x3c42('0x33')]('/:id/chat_websites',auth[_0x3c42('0x9')](),controller[_0x3c42('0x52')]);router[_0x3c42('0x33')](_0x3c42('0x53'),auth['isAuthenticated'](),controller[_0x3c42('0x54')]);router[_0x3c42('0x33')](_0x3c42('0x55'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x56')]);router[_0x3c42('0x57')](_0x3c42('0x58'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x59')]);router['put'](_0x3c42('0x5a'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x5b')]);router['delete'](_0x3c42('0x11'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x5c')]);router[_0x3c42('0x5d')]('/:id/teams',auth[_0x3c42('0x9')](),controller['removeTeams']);router[_0x3c42('0x5d')](_0x3c42('0x58'),auth['isAuthenticated'](),controller[_0x3c42('0x5e')]);router[_0x3c42('0x5d')](_0x3c42('0x47'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x5f')]);router[_0x3c42('0x5d')]('/:id/mail_interactions',auth['isAuthenticated'](),controller[_0x3c42('0x60')]);router[_0x3c42('0x5d')](_0x3c42('0x4a'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x61')]);router['delete'](_0x3c42('0x4c'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x62')]);router['delete']('/:id/openchannel_interactions',auth[_0x3c42('0x9')](),controller[_0x3c42('0x63')]);router[_0x3c42('0x5d')](_0x3c42('0x4f'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x64')]);router['delete']('/:id/mail_accounts',auth[_0x3c42('0x9')](),controller[_0x3c42('0x65')]);router['delete'](_0x3c42('0x2b'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x66')]);router[_0x3c42('0x5d')](_0x3c42('0x2d'),auth['isAuthenticated'](),controller['removeSmsAccounts']);router[_0x3c42('0x5d')](_0x3c42('0x67'),auth[_0x3c42('0x9')](),controller[_0x3c42('0x68')]);router[_0x3c42('0x5d')]('/:id/square_projects',auth[_0x3c42('0x9')](),controller[_0x3c42('0x69')]);router['delete'](_0x3c42('0x55'),auth[_0x3c42('0x9')](),controller['removeApiKey']);module[_0x3c42('0x6a')]=router;
\ No newline at end of file
+var _0xe9f9=['getVoiceQueuesRt','/:id/groups','/:id/recordings','getRecordings','/:id/screen_recordings','getOpenchannelInteractions','/:id/mail/interactions','getMailInteractions','/:id/sms/interactions','getSmsInteractions','/:id/fax/interactions','/:id/teams','/:id/lists','getLists','/:id/agents','/:id/prefixes','/:id/fax_accounts','getFaxAccounts','getMailAccounts','/:id/openchannel_accounts','/:id/sms_accounts','/:id/chat_websites','/:id/square_projects','getSquareProjects','/:id/scheduled_calls','getScheduledCalls','/:id/api_key','getApiKey','post','bulkCreate','/:id/contacts','addContacts','create','/:id/queues','addQueues','diskStorage','%s-%s','originalname','single','file','addAvatar','/:id/login','login','/:id/logout','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','addOpenchannelInteractions','addFaxAccounts','/:id/mail_accounts','addSmsAccounts','addChatWebsites','addSquareProjects','createApiKey','put','/:id','update','/:id/password','delete','removeQueues','removeTeams','destroy','removeChatInteractions','removeSmsInteractions','removeFaxAccounts','removeMailAccounts','removeSmsAccounts','removeChatWebsites','removeApiKey','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','get','isAuthenticated','describe','show','/:id/avatar','getAvatar','getContacts','getQueues','/:id/queues_rt'];(function(_0x58319a,_0x145060){var _0x4cf654=function(_0x314238){while(--_0x314238){_0x58319a['push'](_0x58319a['shift']());}};_0x4cf654(++_0x145060);}(_0xe9f9,0x174));var _0x9e9f=function(_0x562bde,_0x32e53c){_0x562bde=_0x562bde-0x0;var _0x555087=_0xe9f9[_0x562bde];return _0x555087;};'use strict';var multer=require(_0x9e9f('0x0'));var util=require('util');var path=require(_0x9e9f('0x1'));var timeout=require(_0x9e9f('0x2'));var express=require(_0x9e9f('0x3'));var router=express[_0x9e9f('0x4')]();var auth=require(_0x9e9f('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x9e9f('0x6'));var controller=require('./user.controller');router[_0x9e9f('0x7')]('/',auth[_0x9e9f('0x8')](),controller['index']);router[_0x9e9f('0x7')]('/describe',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x9')]);router[_0x9e9f('0x7')]('/:id',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0xa')]);router[_0x9e9f('0x7')](_0x9e9f('0xb'),controller[_0x9e9f('0xc')]);router[_0x9e9f('0x7')]('/:id/contacts',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0xd')]);router[_0x9e9f('0x7')]('/:id/queues',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0xe')]);router[_0x9e9f('0x7')](_0x9e9f('0xf'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x10')]);router[_0x9e9f('0x7')](_0x9e9f('0x11'),auth[_0x9e9f('0x8')](),controller['getGroups']);router['get'](_0x9e9f('0x12'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x13')]);router[_0x9e9f('0x7')](_0x9e9f('0x14'),auth[_0x9e9f('0x8')](),controller['getScreenRecordings']);router[_0x9e9f('0x7')]('/:id/chat/interactions',auth[_0x9e9f('0x8')](),controller['getChatInteractions']);router['get']('/:id/openchannel/interactions',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x15')]);router[_0x9e9f('0x7')](_0x9e9f('0x16'),auth['isAuthenticated'](),controller[_0x9e9f('0x17')]);router[_0x9e9f('0x7')](_0x9e9f('0x18'),auth['isAuthenticated'](),controller[_0x9e9f('0x19')]);router[_0x9e9f('0x7')](_0x9e9f('0x1a'),auth[_0x9e9f('0x8')](),controller['getFaxInteractions']);router['get'](_0x9e9f('0x1b'),auth[_0x9e9f('0x8')](),controller['getTeams']);router[_0x9e9f('0x7')](_0x9e9f('0x1c'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x1d')]);router['get'](_0x9e9f('0x1e'),auth[_0x9e9f('0x8')](),controller['getAgents']);router['get'](_0x9e9f('0x1f'),auth[_0x9e9f('0x8')](),controller['getVoicePrefixes']);router[_0x9e9f('0x7')](_0x9e9f('0x20'),auth['isAuthenticated'](),controller[_0x9e9f('0x21')]);router[_0x9e9f('0x7')]('/:id/mail_accounts',auth['isAuthenticated'](),controller[_0x9e9f('0x22')]);router[_0x9e9f('0x7')](_0x9e9f('0x23'),auth[_0x9e9f('0x8')](),controller['getOpenchannelAccounts']);router[_0x9e9f('0x7')](_0x9e9f('0x24'),auth[_0x9e9f('0x8')](),controller['getSmsAccounts']);router[_0x9e9f('0x7')](_0x9e9f('0x25'),auth[_0x9e9f('0x8')](),controller['getChatWebsites']);router[_0x9e9f('0x7')](_0x9e9f('0x26'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x27')]);router[_0x9e9f('0x7')](_0x9e9f('0x28'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x29')]);router['get'](_0x9e9f('0x2a'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x2b')]);router[_0x9e9f('0x2c')]('/create_many',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x2d')]);router[_0x9e9f('0x2c')](_0x9e9f('0x2e'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x2f')]);router[_0x9e9f('0x2c')]('/',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x30')]);router[_0x9e9f('0x2c')](_0x9e9f('0x31'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x32')]);var upload=multer({'storage':multer[_0x9e9f('0x33')]({'destination':function(_0x41b153,_0x225d1d,_0x2038ca){_0x2038ca(null,path['join'](config['root'],'server/files/images/'));},'filename':function(_0x567842,_0x1a138f,_0x2ec54a){_0x2ec54a(null,util['format'](_0x9e9f('0x34'),Date['now'](),_0x1a138f[_0x9e9f('0x35')]));}})});router[_0x9e9f('0x2c')](_0x9e9f('0xb'),upload[_0x9e9f('0x36')](_0x9e9f('0x37')),controller[_0x9e9f('0x38')]);router[_0x9e9f('0x2c')](_0x9e9f('0x39'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x3a')]);router[_0x9e9f('0x2c')](_0x9e9f('0x3b'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x3c')]);router[_0x9e9f('0x2c')](_0x9e9f('0x3d'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x3e')]);router[_0x9e9f('0x2c')](_0x9e9f('0x3f'),auth['isAuthenticated'](),controller[_0x9e9f('0x40')]);router[_0x9e9f('0x2c')]('/:id/teams',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x41')]);router[_0x9e9f('0x2c')](_0x9e9f('0x42'),auth[_0x9e9f('0x8')](),controller['addChatInteractions']);router['post'](_0x9e9f('0x43'),auth['isAuthenticated'](),controller[_0x9e9f('0x44')]);router[_0x9e9f('0x2c')](_0x9e9f('0x45'),auth['isAuthenticated'](),controller[_0x9e9f('0x46')]);router['post'](_0x9e9f('0x47'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x48')]);router[_0x9e9f('0x2c')](_0x9e9f('0x49'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x4a')]);router[_0x9e9f('0x2c')](_0x9e9f('0x20'),auth['isAuthenticated'](),controller[_0x9e9f('0x4b')]);router[_0x9e9f('0x2c')](_0x9e9f('0x4c'),auth[_0x9e9f('0x8')](),controller['addMailAccounts']);router['post'](_0x9e9f('0x23'),auth['isAuthenticated'](),controller['addOpenchannelAccounts']);router[_0x9e9f('0x2c')]('/:id/sms_accounts',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x4d')]);router['post'](_0x9e9f('0x25'),auth['isAuthenticated'](),controller[_0x9e9f('0x4e')]);router[_0x9e9f('0x2c')](_0x9e9f('0x26'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x4f')]);router['post'](_0x9e9f('0x2a'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x50')]);router[_0x9e9f('0x51')](_0x9e9f('0x52'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x53')]);router[_0x9e9f('0x51')](_0x9e9f('0x54'),auth['isAuthenticated'](),controller['changePassword']);router[_0x9e9f('0x55')](_0x9e9f('0x31'),auth['isAuthenticated'](),controller[_0x9e9f('0x56')]);router[_0x9e9f('0x55')](_0x9e9f('0x1b'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x57')]);router[_0x9e9f('0x55')](_0x9e9f('0x52'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x58')]);router['delete']('/:id/chat_interactions',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x59')]);router[_0x9e9f('0x55')](_0x9e9f('0x43'),auth[_0x9e9f('0x8')](),controller['removeMailInteractions']);router[_0x9e9f('0x55')](_0x9e9f('0x45'),auth[_0x9e9f('0x8')](),controller['removeFaxInteractions']);router[_0x9e9f('0x55')]('/:id/sms_interactions',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x5a')]);router['delete'](_0x9e9f('0x49'),auth['isAuthenticated'](),controller['removeOpenchannelInteractions']);router[_0x9e9f('0x55')]('/:id/fax_accounts',auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x5b')]);router[_0x9e9f('0x55')](_0x9e9f('0x4c'),auth['isAuthenticated'](),controller[_0x9e9f('0x5c')]);router[_0x9e9f('0x55')](_0x9e9f('0x23'),auth['isAuthenticated'](),controller['removeOpenchannelAccounts']);router[_0x9e9f('0x55')](_0x9e9f('0x24'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x5d')]);router[_0x9e9f('0x55')](_0x9e9f('0x25'),auth[_0x9e9f('0x8')](),controller[_0x9e9f('0x5e')]);router[_0x9e9f('0x55')]('/:id/square_projects',auth['isAuthenticated'](),controller['removeSquareProjects']);router[_0x9e9f('0x55')](_0x9e9f('0x2a'),auth['isAuthenticated'](),controller[_0x9e9f('0x5f')]);module[_0x9e9f('0x60')]=router;
\ No newline at end of file
index fbe3b5b..8f3f0c4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-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(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xd8b0[_0xa464c9];return _0x3d73c4;};'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
+var _0xbaf0=['wss','encryption','avpf','icesupport','dtlsenable','rtcp_mux','force_avp','dtlsverify','dtlssetup','dtlsprivatekey','/etc/pki/tls/private/motion.key','permissions','map','VIRTUAL','phoneBarEnableScreenRecordingByAgent','string','true','false','screenrecording','blocked','blockedAt','loginAttempts','moment','util','lodash','exports','STRING','name','setDataValue','defaultuser','The\x20name\x20of\x20the\x20user','fullname','callerid','\x22%s\x22\x20<%s>','getDataValue','internal','email','toLowerCase','ENUM','agent','telephone','INTEGER','accountcode','BOOLEAN','DATE','DEFAULT\x20PAUSE','dynamic','user','peer','friend','ALLOWED_NOT_SCREENED','ALLOWED_FAILED_SCREEN','ALLOWED','PROHIB_NOT_SCREENED','PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN','PROHIB','udp','transport','join','split','info','shortinfo','inband','auto','yes','update','outgoing','force_rport,comedia','nat','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','update,nonat','showWebBar','get'];(function(_0x50cc1b,_0x42a0f5){var _0x408e3c=function(_0x18d845){while(--_0x18d845){_0x50cc1b['push'](_0x50cc1b['shift']());}};_0x408e3c(++_0x42a0f5);}(_0xbaf0,0x12a));var _0x0baf=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0xbaf0[_0x4cf98e];return _0x1623ac;};'use strict';var Sequelize=require('sequelize');var moment=require(_0x0baf('0x0'));var util=require(_0x0baf('0x1'));var _=require(_0x0baf('0x2'));module[_0x0baf('0x3')]={'name':{'type':Sequelize[_0x0baf('0x4')],'allowNull':![],'unique':_0x0baf('0x5'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i},'set':function(_0x5a3e42){this[_0x0baf('0x6')](_0x0baf('0x5'),_0x5a3e42);this[_0x0baf('0x6')](_0x0baf('0x7'),_0x5a3e42);},'comment':_0x0baf('0x8')},'fullname':{'type':Sequelize[_0x0baf('0x4')],'allowNull':![],'set':function(_0x1a10b1){this[_0x0baf('0x6')](_0x0baf('0x9'),_0x1a10b1);this['setDataValue'](_0x0baf('0xa'),util['format'](_0x0baf('0xb'),_0x1a10b1,this[_0x0baf('0xc')](_0x0baf('0xd'))));}},'alias':{'type':Sequelize[_0x0baf('0x4')]},'email':{'type':Sequelize[_0x0baf('0x4')],'allowNull':![],'unique':_0x0baf('0xe'),'validate':{'isEmail':!![]},'set':function(_0x41cead){if(_0x41cead){this[_0x0baf('0x6')](_0x0baf('0xe'),_0x41cead[_0x0baf('0xf')]());}}},'role':{'type':Sequelize[_0x0baf('0x10')]('admin','user',_0x0baf('0x11'),_0x0baf('0x12')),'allowNull':![]},'password':{'type':Sequelize[_0x0baf('0x4')],'allowNull':![],'validate':{'notEmpty':!![]}},'provider':{'type':Sequelize[_0x0baf('0x4')],'defaultValue':'local'},'internal':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':![],'unique':'internal','set':function(_0x1c76a8){this[_0x0baf('0x6')](_0x0baf('0xd'),_0x1c76a8);this[_0x0baf('0x6')](_0x0baf('0x14'),_0x1c76a8);this[_0x0baf('0x6')]('callerid',util['format'](_0x0baf('0xb'),this[_0x0baf('0xc')](_0x0baf('0x9')),_0x1c76a8));}},'salt':{'type':Sequelize[_0x0baf('0x4')]},'phone':{'type':Sequelize[_0x0baf('0x4')]},'mobile':{'type':Sequelize[_0x0baf('0x4')]},'address':{'type':Sequelize['STRING']},'zipcode':{'type':Sequelize[_0x0baf('0x4')]},'userpic':{'type':Sequelize[_0x0baf('0x4')]},'city':{'type':Sequelize[_0x0baf('0x4')]},'country':{'type':Sequelize[_0x0baf('0x4')]},'online':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'lastLoginAt':{'type':Sequelize[_0x0baf('0x16')]},'voicePause':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'chatPause':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'mailPause':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'faxPause':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'smsPause':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'openchannelPause':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'pauseType':{'type':Sequelize[_0x0baf('0x4')],'defaultValue':_0x0baf('0x17')},'lastPauseAt':{'type':Sequelize[_0x0baf('0x16')]},'chatCapacity':{'type':Sequelize[_0x0baf('0x13')],'defaultValue':0x0},'mailCapacity':{'type':Sequelize[_0x0baf('0x13')],'defaultValue':0x0},'faxCapacity':{'type':Sequelize[_0x0baf('0x13')],'defaultValue':0x0},'smsCapacity':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'openchannelCapacity':{'type':Sequelize[_0x0baf('0x13')],'defaultValue':0x0},'phoneBarAutoAnswer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarEnableSettings':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':!![]},'phoneBarListenPort':{'type':Sequelize['INTEGER'](0x5),'defaultValue':0x1428},'phoneBarExpires':{'type':Sequelize['INTEGER'](0x5),'defaultValue':0x78},'phoneBarRemoteControl':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'phoneBarRemoteControlPort':{'type':Sequelize['INTEGER'],'defaultValue':0x26a0},'phoneBarEnableRecording':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarRingInUse':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'chanspy':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'description':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'host':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![],'defaultValue':_0x0baf('0x18')},'ipaddr':{'type':Sequelize['STRING'],'allowNull':!![]},'port':{'type':Sequelize[_0x0baf('0x13')](0x5),'allowNull':!![]},'regseconds':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'fullcontact':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'regserver':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'useragent':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'lastms':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'type':{'type':Sequelize[_0x0baf('0x10')]('friend',_0x0baf('0x19'),_0x0baf('0x1a')),'allowNull':!![],'defaultValue':_0x0baf('0x1b')},'context':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![],'defaultValue':'from-sip'},'callingpres':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x1c'),'ALLOWED_PASSED_SCREEN',_0x0baf('0x1d'),_0x0baf('0x1e'),_0x0baf('0x1f'),_0x0baf('0x20'),_0x0baf('0x21'),_0x0baf('0x22')),'allowNull':!![]},'deny':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'permit':{'type':Sequelize['STRING'],'allowNull':!![]},'secret':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'md5secret':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'remotesecret':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'transport':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![],'defaultValue':_0x0baf('0x23'),'set':function(_0x275ea1){this[_0x0baf('0x6')](_0x0baf('0x24'),_0x275ea1?_0x275ea1[_0x0baf('0x25')](','):null);},'get':function(){return this[_0x0baf('0xc')](_0x0baf('0x24'))?this[_0x0baf('0xc')](_0x0baf('0x24'))[_0x0baf('0x26')](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]'},'dtmfmode':{'type':Sequelize[_0x0baf('0x10')]('rfc2833',_0x0baf('0x27'),_0x0baf('0x28'),_0x0baf('0x29'),_0x0baf('0x2a')),'allowNull':!![],'defaultValue':'rfc2833'},'directmedia':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no','nonat',_0x0baf('0x2c'),_0x0baf('0x2d')),'allowNull':!![],'defaultValue':'no'},'directrtpsetup':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![],'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'directmediadeny':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'nat':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![],'defaultValue':_0x0baf('0x2e'),'set':function(_0x4aa6ed){this[_0x0baf('0x6')](_0x0baf('0x2f'),_0x4aa6ed?_0x4aa6ed['join'](','):null);},'get':function(){return this[_0x0baf('0xc')]('nat')?this['getDataValue'](_0x0baf('0x2f'))[_0x0baf('0x26')](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]'},'callgroup':{'type':Sequelize['STRING']},'namedcallgroup':{'type':Sequelize[_0x0baf('0x4')]},'pickupgroup':{'type':Sequelize[_0x0baf('0x4')]},'namedpickupgroup':{'type':Sequelize[_0x0baf('0x4')]},'language':{'type':Sequelize[_0x0baf('0x4')],'defaultValue':'en'},'tonezone':{'type':Sequelize[_0x0baf('0x4')]},'disallow':{'type':Sequelize[_0x0baf('0x4')],'allowNull':![],'defaultValue':_0x0baf('0x30')},'allow':{'type':Sequelize[_0x0baf('0x4')],'allowNull':![],'defaultValue':_0x0baf('0x31'),'set':function(_0x36c6d2){this[_0x0baf('0x6')](_0x0baf('0x32'),_0x36c6d2?_0x36c6d2[_0x0baf('0x25')](';'):_0x0baf('0x31'));},'get':function(){return this['getDataValue'](_0x0baf('0x32'))?this[_0x0baf('0xc')]('allow')[_0x0baf('0x26')](';'):null;},'comment':_0x0baf('0x33')},'autoframing':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![]},'insecure':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![],'set':function(_0x456d0b){this['setDataValue'](_0x0baf('0x34'),_0x456d0b?_0x456d0b[_0x0baf('0x25')](','):null);},'get':function(){return this['getDataValue'](_0x0baf('0x34'))?this[_0x0baf('0xc')](_0x0baf('0x34'))[_0x0baf('0x26')](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]'},'trustrpid':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![],'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![],'defaultValue':'no'},'progressinband':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no',_0x0baf('0x35')),'allowNull':!![]},'promiscredir':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![]},'useclientcode':{'type':Sequelize[_0x0baf('0x10')]('yes','no'),'allowNull':!![]},'accountcode':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'setvar':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'callerid':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![],'defaultValue':_0x0baf('0x36')},'amaflags':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'callcounter':{'type':Sequelize['ENUM'](_0x0baf('0x2b'),'no'),'allowNull':!![],'defaultValue':_0x0baf('0x2b')},'busylevel':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'allowoverlap':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![]},'allowsubscribe':{'type':Sequelize['ENUM'](_0x0baf('0x2b'),'no'),'allowNull':!![]},'allowtransfer':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![]},'ignoresdpversion':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![]},'subscribecontext':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'template':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'videosupport':{'type':Sequelize['ENUM'](_0x0baf('0x2b'),'no',_0x0baf('0x37')),'allowNull':!![],'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'rfc2833compensate':{'type':Sequelize['ENUM'](_0x0baf('0x2b'),'no'),'allowNull':!![]},'mailbox':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'session_timers':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x38'),_0x0baf('0x39'),_0x0baf('0x3a')),'allowNull':!![]},'session_expires':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'session_minse':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'session_refresher':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x3b'),_0x0baf('0x3c')),'allowNull':!![],'defaultValue':_0x0baf('0x3c')},'t38pt_usertpsource':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'regexten':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'fromdomain':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'fromuser':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'qualify':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![],'defaultValue':_0x0baf('0x2b')},'keepalive':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'defaultip':{'type':Sequelize['STRING'],'allowNull':!![]},'defaultuser':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'rtptimeout':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'rtpholdtimeout':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'rtpkeepalive':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'sendrpid':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![],'defaultValue':'no'},'outboundproxy':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'callbackextension':{'type':Sequelize['STRING'],'allowNull':!![]},'timert1':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'timerb':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'qualifyfreq':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'contactpermit':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'contactdeny':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'contactacl':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'unsolicited_mailbox':{'type':Sequelize['STRING'],'allowNull':!![]},'use_q850_reason':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'maxforwards':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'encryption':{'type':Sequelize[_0x0baf('0x10')]('yes','no'),'allowNull':!![],'defaultValue':'no'},'avpf':{'type':Sequelize[_0x0baf('0x10')]('yes','no'),'allowNull':!![]},'force_avp':{'type':Sequelize[_0x0baf('0x10')]('yes','no'),'allowNull':!![]},'icesupport':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![]},'dtlsenable':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![]},'dtlsverify':{'type':Sequelize[_0x0baf('0x10')]('yes','no',_0x0baf('0x3d'),_0x0baf('0x3e')),'allowNull':!![]},'dtlsrekey':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![]},'dtlscertfile':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'dtlsprivatekey':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'dtlscipher':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'dtlscafile':{'type':Sequelize['STRING'],'allowNull':!![]},'dtlscapath':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'dtlssetup':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x3f'),_0x0baf('0x40'),_0x0baf('0x41')),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'usereqphone':{'type':Sequelize[_0x0baf('0x10')]('yes','no'),'allowNull':!![],'defaultValue':'no'},'recordonfeature':{'type':Sequelize['STRING'],'allowNull':!![]},'recordofffeature':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'call_limit':{'type':Sequelize[_0x0baf('0x13')](0xb),'allowNull':!![],'defaultValue':0xa},'registertrying':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![]},'subscribemwi':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no'),'allowNull':!![]},'vmexten':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'mohinterpret':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'mohsuggest':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'parkinglot':{'type':Sequelize['STRING'],'allowNull':!![]},'canreinvite':{'type':Sequelize[_0x0baf('0x10')](_0x0baf('0x2b'),'no',_0x0baf('0x42'),_0x0baf('0x2c'),_0x0baf('0x43')),'allowNull':!![],'defaultValue':'no'},'loginInPause':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'resetPasswordToken':{'type':Sequelize[_0x0baf('0x4')]},'resetPasswordExpires':{'type':Sequelize['DATE']},'showWebBar':{'type':Sequelize[_0x0baf('0x13')],'defaultValue':0x0,'set':function(_0x27f580){this[_0x0baf('0x6')](_0x0baf('0x44'),_0x27f580);var _0x1c7d88=this[_0x0baf('0x45')]({'plain':!![]});switch(_0x27f580){case 0x0:case 0x1:var _0x14e6d0=_0x1c7d88[_0x0baf('0x24')]?_['isArray'](_0x1c7d88[_0x0baf('0x24')])?_0x1c7d88['transport'][_0x0baf('0x25')]():_0x1c7d88['transport']:'udp';if(_0x14e6d0===_0x0baf('0x46')){_0x14e6d0='udp';}this[_0x0baf('0x6')](_0x0baf('0x24'),_0x14e6d0);this['setDataValue'](_0x0baf('0x47'),'no');this[_0x0baf('0x6')](_0x0baf('0x48'),null);this['setDataValue']('force_avp',null);this[_0x0baf('0x6')](_0x0baf('0x49'),null);this[_0x0baf('0x6')](_0x0baf('0x4a'),null);this[_0x0baf('0x6')]('dtlsverify',null);this[_0x0baf('0x6')]('dtlssetup',null);this['setDataValue']('dtlscertfile',null);this[_0x0baf('0x6')]('dtlsprivatekey',null);this['setDataValue'](_0x0baf('0x4b'),'no');break;case 0x2:this[_0x0baf('0x6')](_0x0baf('0x24'),_0x0baf('0x46'));this[_0x0baf('0x6')](_0x0baf('0x47'),'yes');this[_0x0baf('0x6')](_0x0baf('0x48'),_0x0baf('0x2b'));this[_0x0baf('0x6')](_0x0baf('0x4c'),_0x0baf('0x2b'));this['setDataValue'](_0x0baf('0x49'),_0x0baf('0x2b'));this[_0x0baf('0x6')]('dtlsenable',_0x0baf('0x2b'));this[_0x0baf('0x6')](_0x0baf('0x4d'),'no');this[_0x0baf('0x6')](_0x0baf('0x4e'),_0x0baf('0x41'));this[_0x0baf('0x6')]('dtlscertfile',_0x1c7d88['dtlscertfile']||'/etc/pki/tls/certs/motion.crt');this[_0x0baf('0x6')](_0x0baf('0x4f'),_0x1c7d88[_0x0baf('0x4f')]||_0x0baf('0x50'));this[_0x0baf('0x6')](_0x0baf('0x4b'),'yes');break;default:}}},'permissions':{'type':Sequelize['TEXT'],'set':function(_0x34c1f4){this['setDataValue'](_0x0baf('0x51'),_0x34c1f4?_0x34c1f4[_0x0baf('0x25')](','):[]);},'get':function(){return this['getDataValue'](_0x0baf('0x51'))?_[_0x0baf('0x52')](this[_0x0baf('0xc')](_0x0baf('0x51'))[_0x0baf('0x26')](','),function(_0x33a5af){return parseInt(_0x33a5af,0xa);}):[];}},'phoneBarUnconditionalNumber':{'type':Sequelize[_0x0baf('0x4')]},'phoneBarNoReplyNumber':{'type':Sequelize[_0x0baf('0x4')]},'phoneBarBusyNumber':{'type':Sequelize[_0x0baf('0x4')]},'phoneBarUnconditional':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarNoReply':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarBusy':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarDnd':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'phoneBarUnansweredCallBadge':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'phoneBarEnableDtmfTone':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'phoneBarAutoAnswerDelay':{'type':Sequelize[_0x0baf('0x13')],'defaultValue':0x0},'extensionMonitor':{'type':Sequelize[_0x0baf('0x4')],'defaultValue':''},'crudPermissions':{'type':Sequelize[_0x0baf('0x13')],'defaultValue':0x0},'rtcp_mux':{'type':Sequelize['ENUM'](_0x0baf('0x2b'),'no'),'defaultValue':'no'},'allowmessenger':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':!![]},'phoneBarOutboundProxy':{'type':Sequelize['STRING']},'passwordResetAt':{'type':Sequelize['DATE'],'defaultValue':null},'phoneBarEnableJaws':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'phoneBarEnableScreenRecordingByAgent':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'phoneBarEnableVideoRecording':{'type':Sequelize[_0x0baf('0x53')],'get':function(){return this[_0x0baf('0xc')](_0x0baf('0x54'))?this[_0x0baf('0xc')](_0x0baf('0x54')):![];}},'phoneBarEnableAutomaticScreenRecording':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'phoneBarPrefixRequired':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'hotdesk':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]},'interface':{'type':Sequelize[_0x0baf('0x4')],'defaultValue':null},'privacyEnabled':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'apiKeyNonce':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'apiKeyIat':{'type':Sequelize[_0x0baf('0x4')],'allowNull':!![]},'screenrecording':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'set':function(_0x97d385){if(typeof _0x97d385===_0x0baf('0x55')){var _0x421ca0=_0x97d385==='1'?!![]:_0x97d385==='0'?![]:_0x97d385===_0x0baf('0x56')?!![]:_0x97d385===_0x0baf('0x57')?![]:![];this['setDataValue']('screenrecording',_0x421ca0);}else{this[_0x0baf('0x6')](_0x0baf('0x58'),_0x97d385);}}},'blocked':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'set':function(_0x28bc1c){this[_0x0baf('0x6')](_0x0baf('0x59'),_0x28bc1c);if(_0x28bc1c===!![]){this['setDataValue'](_0x0baf('0x5a'),moment());this[_0x0baf('0x6')](_0x0baf('0x5b'),0x0);}else{this['setDataValue'](_0x0baf('0x5a'),null);}}},'blockedAt':{'type':Sequelize['DATE'],'defaultValue':null},'loginAttempts':{'type':Sequelize[_0x0baf('0x13')],'defaultValue':0x0},'disabled':{'type':Sequelize[_0x0baf('0x15')],'defaultValue':![]}};
\ No newline at end of file
index 2c9eff2..f4e93fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa779=['update','destroy','Users','Agents','agent','Telephones','telephone','filter','ignore','map','value','includes','find','name','UserProfileResource','end','stack','send','index','User','model','keys','password','salt','intersection','query','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','merge','type','key','VIRTUAL','sequelize','lower','field','options','includeAll','include','findAll','rows','catch','show','differenceBy','bulkCreate','body','role','params','describe','addContacts','ids','omit','agent\x20role','user','../../config/license/util','getLicense','users','License\x20limit\x20reached','count\x20%s:\x20%s','create','Setting','securePassword','min_internal','max','internal','isNil','QueryTypes','SELECT','from','voicemail','mailbox','fullname','email','permissions','103','106','107','108','109','VoiceMail','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','changePassword','oldPassword','Sequelize','ValidationError','Invalid\x20body\x20format.\x20Use\x20oldPassord\x20and\x20newPassword','authenticate','Wrong\x20credentials','newPassword','New\x20password\x20must\x20be\x20different\x20from\x20old\x20password','Invalid\x20body\x20format.\x20Use\x20newPassword','Unauthorized','addQueues','channel','online','loginInPause','voicePause','interface','isValidChannel','capitalize','Queues','spread','toLowerCase','emit','voice','push','format','SIP/%s','penalty','each','UserVoiceQueueRt','upsert','removeQueues','Unknown\x20channel','remove','QueueId','addAvatar','file','filename','getAvatar','join','server/files/images/logos/default_profile.png','userpic','download','existsSync','server/files/images/','root','getContacts','findOne','CmContact','rawAttributes','CmList','List','Tag','Tags','color','tag','getQueues','Queue','admin','Unknown\x20role','getVoiceQueuesRt','ChatGroup','getGroups','getRecordings','VoiceRecording','getScreenRecordings','ScreenRecording','UserId','getChatInteractions','ChatInteraction','getOpenchannelInteractions','OpenchannelInteraction','getMailInteractions','MailInteraction','getSmsInteractions','getFaxInteractions','FaxInteraction','login','mobile','LOCAL/%s@from-sip/n','intrf','user:forcelogout','headers','connection','socket','MemberReport','forEach','YYYY-MM-DD\x20HH:mm:ss','all','LOGIN','LOGININPAUSE','isMiddleware','logout','pause','QueuePause','PAUSE','updateAttributes','getChannels','DEFAULT\x20PAUSE','unpause','mailPause','chatPause','openchannelPause','smsPause','pauseType','lastPauseAt','manual','mail','chat','fax','sms','openchannel','%s%s','Pause','getTeams','Team','addTeams','removeTeams','getLists','getAgents','getVoiceQueues','values','You\x20can\x27t\x20delete\x20yourself','addChatInteractions','user_has_chat_interactions:save','removeChatInteractions','isArray','user_has_chat_interactions:remove','addMailInteractions','removeMailInteractions','user_has_mail_interactions:remove','addFaxInteractions','user_has_fax_interactions:save','user_has_fax_interactions:remove','addSmsInteractions','user_has_sms_interactions:save','removeSmsInteractions','user_has_sms_interactions:remove','addOpenchannelInteractions','user_has_openchannel_interactions:save','removeOpenchannelInteractions','user_has_openchannel_interactions:remove','getVoicePrefixes','getFaxAccounts','FaxAccount','addFaxAccounts','removeFaxAccounts','getMailAccounts','addMailAccounts','removeMailAccounts','getOpenchannelAccounts','OpenchannelAccount','addOpenchannelAccounts','removeOpenchannelAccounts','getSmsAccounts','SmsAccount','addSmsAccounts','removeSmsAccounts','getChatWebsites','ChatWebsite','addChatWebsites','removeChatWebsites','getSquareProjects','addSquareProjects','removeSquareProjects','getScheduledCalls','CmHopper','$gte','$lt','$lte','$ne','$eq','$not','$between','$notBetween','$in','$notIn','$like','$notLike','$iLike','$overlap','$contains','$contained','$any','firstName','lastName','phone','Contact','VoiceQueue','getApiKey','retrieveApiKey','No\x20API\x20access\x20key\x20found!','You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.','createApiKey','generateApiKey','apiKeyNonce','apiKeyIat','removeApiKey','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','sox','to-csv','ejs','squel','jsforce','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','redis','defaults','./user.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','User,\x20%s,\x20%s','request\x20sent','debug','User,\x20%s,\x20%s,\x20%s','error','code','message','status','json','count','offset','limit','set','Content-Range','save'];(function(_0x517d5e,_0x2b8a8d){var _0x2731bb=function(_0x410859){while(--_0x410859){_0x517d5e['push'](_0x517d5e['shift']());}};_0x2731bb(++_0x2b8a8d);}(_0xa779,0x122));var _0x9a77=function(_0xe46941,_0x14370f){_0xe46941=_0xe46941-0x0;var _0x131b4e=_0xa779[_0xe46941];return _0x131b4e;};'use strict';var pdf=require(_0x9a77('0x0'));var emlformat=require(_0x9a77('0x1'));var rimraf=require(_0x9a77('0x2'));var zipdir=require(_0x9a77('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x9a77('0x4'));var moment=require(_0x9a77('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x9a77('0x6'));var util=require(_0x9a77('0x7'));var path=require('path');var sox=require(_0x9a77('0x8'));var csv=require(_0x9a77('0x9'));var ejs=require(_0x9a77('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x9a77('0xb'));var crypto=require('crypto');var jsforce=require(_0x9a77('0xc'));var deskjs=require(_0x9a77('0xd'));var toCsv=require(_0x9a77('0x9'));var querystring=require('querystring');var Papa=require(_0x9a77('0xe'));var Redis=require('ioredis');var authService=require(_0x9a77('0xf'));var qs=require(_0x9a77('0x10'));var hardwareService=require(_0x9a77('0x11'));var logger=require(_0x9a77('0x12'))('api');var utils=require(_0x9a77('0x13'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0x9a77('0x14')]=_[_0x9a77('0x15')](config[_0x9a77('0x14')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x9a77('0x14')]));require(_0x9a77('0x16'))[_0x9a77('0x17')](socket);var jayson=require(_0x9a77('0x18'));var client=jayson[_0x9a77('0x19')][_0x9a77('0x1a')]({'port':0x232a});function checkPasswordPattern(_0xb41a20,_0x44fdfd,_0x2d29fb){if(_0x2d29fb){var _0x6cd6f4=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x6cd6f4[_0x9a77('0x1b')](_0x44fdfd)){return _0xb41a20;}else{throw new Error(_0x9a77('0x1c'));}}else{return _0xb41a20;}}function respondWithRpcPromise(_0x4ab88d,_0x1172f4,_0x509816,_0x575bb3){return new BPromise(function(_0x6b37ec,_0x4f60fe){var _0x18436d=_0x575bb3||client;return _0x18436d['request'](_0x4ab88d,_0x509816)[_0x9a77('0x1d')](function(_0x2082ba){logger[_0x9a77('0x1e')](_0x9a77('0x1f'),_0x1172f4,_0x9a77('0x20'));logger[_0x9a77('0x21')](_0x9a77('0x22'),_0x1172f4,'request\x20sent',JSON['stringify'](_0x2082ba));if(_0x2082ba[_0x9a77('0x23')]){if(_0x2082ba[_0x9a77('0x23')][_0x9a77('0x24')]===0x1f4){logger[_0x9a77('0x23')](_0x9a77('0x1f'),_0x1172f4,_0x2082ba[_0x9a77('0x23')][_0x9a77('0x25')]);return _0x4f60fe(_0x2082ba[_0x9a77('0x23')][_0x9a77('0x25')]);}logger[_0x9a77('0x23')](_0x9a77('0x1f'),_0x1172f4,_0x2082ba['error'][_0x9a77('0x25')]);return _0x6b37ec(_0x2082ba['error'][_0x9a77('0x25')]);}else{logger[_0x9a77('0x1e')](_0x9a77('0x1f'),_0x1172f4,_0x9a77('0x20'));_0x6b37ec(_0x2082ba['result'][_0x9a77('0x25')]);}})['catch'](function(_0x26db3c){logger['error'](_0x9a77('0x1f'),_0x1172f4,_0x26db3c);_0x4f60fe(_0x26db3c);});});}function respondWithStatusCode(_0x3fa65a,_0x29b9e3){_0x29b9e3=_0x29b9e3||0xcc;return function(_0x1a9003){if(_0x1a9003){return _0x3fa65a['sendStatus'](_0x29b9e3);}return _0x3fa65a[_0x9a77('0x26')](_0x29b9e3)['end']();};}function respondWithResult(_0x223f82,_0x840c55){_0x840c55=_0x840c55||0xc8;return function(_0x1ea499){if(_0x1ea499){return _0x223f82[_0x9a77('0x26')](_0x840c55)[_0x9a77('0x27')](_0x1ea499);}};}function respondWithFilteredResult(_0x18e3e6,_0x531fc8){return function(_0x1ebaa8){if(_0x1ebaa8){var _0xfcbeb8=_0x1ebaa8[_0x9a77('0x28')],_0x584d58=_0x531fc8[_0x9a77('0x29')],_0x5bb563=_0x531fc8['offset']+_0x531fc8[_0x9a77('0x2a')],_0x5d7109;if(_0x5bb563>=_0xfcbeb8){_0x5bb563=_0xfcbeb8;_0x5d7109=0xc8;}else{_0x5d7109=0xce;}_0x18e3e6['status'](_0x5d7109);return _0x18e3e6[_0x9a77('0x2b')](_0x9a77('0x2c'),_0x584d58+'-'+_0x5bb563+'/'+_0xfcbeb8)[_0x9a77('0x27')](_0x1ebaa8);}return null;};}function patchUpdates(_0x592b07){return function(_0x4615ed){try{jsonpatch['apply'](_0x4615ed,_0x592b07,!![]);}catch(_0x42eac0){return BPromise['reject'](_0x42eac0);}return _0x4615ed[_0x9a77('0x2d')]();};}function saveUpdates(_0x143ad3,_0x263c37){return function(_0x29a813){if(_0x29a813){return _0x29a813[_0x9a77('0x2e')](_0x143ad3)[_0x9a77('0x1d')](function(_0x20687b){return _0x20687b;});}return null;};}function removeEntity(_0x4714ae,_0x4cf96b){return function(_0x10eea8){if(_0x10eea8){return _0x10eea8[_0x9a77('0x2f')]()['then'](function(){var _0x17f26a=_0x10eea8['get']({'plain':!![]});var _0x358130=[{'name':_0x9a77('0x30'),'value':'user','ignore':!![]},{'name':_0x9a77('0x31'),'value':_0x9a77('0x32'),'ignore':![]},{'name':_0x9a77('0x33'),'value':_0x9a77('0x34'),'ignore':![]}];var _0x4e2676=_(_0x358130)[_0x9a77('0x35')](_0x9a77('0x36'))[_0x9a77('0x37')](_0x9a77('0x38'))[_0x9a77('0x38')]();if(_[_0x9a77('0x39')](_0x4e2676,_0x17f26a['role'])){return;}var _0x418f5e=_[_0x9a77('0x3a')](_0x358130,['value',_0x17f26a['role']])[_0x9a77('0x3b')];return db[_0x9a77('0x3c')]['destroy']({'where':{'type':_0x418f5e,'resourceId':_0x17f26a['id']}})[_0x9a77('0x1d')](function(){return _0x10eea8;});})[_0x9a77('0x1d')](function(){_0x4714ae['status'](0xcc)[_0x9a77('0x3d')]();});}};}function handleEntityNotFound(_0x103131,_0x14aff4){return function(_0x20820e){if(!_0x20820e){_0x103131['sendStatus'](0x194);}return _0x20820e;};}function handleError(_0x54c903,_0x2c7d5c){_0x2c7d5c=_0x2c7d5c||0x1f4;return function(_0x48a153){logger[_0x9a77('0x23')](_0x48a153[_0x9a77('0x3e')]);if(_0x48a153[_0x9a77('0x3b')]){delete _0x48a153[_0x9a77('0x3b')];}_0x54c903[_0x9a77('0x26')](_0x2c7d5c)[_0x9a77('0x3f')](_0x48a153);};}exports[_0x9a77('0x40')]=function(_0x2be213,_0x465740){var _0xaaffec={},_0x2bd4db={},_0x305fe8={'count':0x0,'rows':[]};var _0xf2c887=db[_0x9a77('0x41')]['rawAttributes'];_0x2bd4db[_0x9a77('0x42')]=_['differenceBy'](_[_0x9a77('0x43')](_0xf2c887),[_0x9a77('0x44'),_0x9a77('0x45')]);_0x2bd4db['query']=_['keys'](_0x2be213['query']);_0x2bd4db['filters']=_[_0x9a77('0x46')](_0x2bd4db[_0x9a77('0x42')],_0x2bd4db[_0x9a77('0x47')]);_0xaaffec['attributes']=_['intersection'](_0x2bd4db[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x2be213[_0x9a77('0x47')][_0x9a77('0x48')]));_0xaaffec[_0x9a77('0x49')]=_0xaaffec['attributes'][_0x9a77('0x4a')]?_0xaaffec[_0x9a77('0x49')]:_0x2bd4db[_0x9a77('0x42')];if(!_0x2be213['query'][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0xaaffec[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x2be213[_0x9a77('0x47')]['limit']);_0xaaffec[_0x9a77('0x29')]=qs['offset'](_0x2be213['query'][_0x9a77('0x29')]);}_0xaaffec[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x2be213[_0x9a77('0x47')][_0x9a77('0x4e')]);_0xaaffec[_0x9a77('0x4f')]=qs[_0x9a77('0x50')](_[_0x9a77('0x51')](_0x2be213[_0x9a77('0x47')],_0x2bd4db[_0x9a77('0x50')]));if(_0x2be213[_0x9a77('0x47')][_0x9a77('0x35')]){_0xaaffec[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0xaaffec[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0xf2c887,function(_0x451ac7){if(_0x451ac7[_0x9a77('0x53')][_0x9a77('0x54')]!==_0x9a77('0x55')){return db['sequelize'][_0x9a77('0x4f')](db[_0x9a77('0x56')]['fn'](_0x9a77('0x57'),db[_0x9a77('0x56')]['col'](_0x451ac7[_0x9a77('0x58')])),{'$like':db[_0x9a77('0x56')]['fn'](_0x9a77('0x57'),'%'+_0x2be213[_0x9a77('0x47')]['filter']+'%')});}})});}_0xaaffec=_[_0x9a77('0x52')]({},_0xaaffec,_0x2be213[_0x9a77('0x59')]);var _0x46965={'where':_0xaaffec['where']};return db['User'][_0x9a77('0x28')](_0x46965)[_0x9a77('0x1d')](function(_0xf7fa92){_0x305fe8[_0x9a77('0x28')]=_0xf7fa92;if(_0x2be213[_0x9a77('0x47')][_0x9a77('0x5a')]){_0xaaffec[_0x9a77('0x5b')]=[{'all':!![]}];}return db[_0x9a77('0x41')][_0x9a77('0x5c')](_0xaaffec);})[_0x9a77('0x1d')](function(_0x12d3ab){_0x305fe8[_0x9a77('0x5d')]=_0x12d3ab;return _0x305fe8;})[_0x9a77('0x1d')](respondWithFilteredResult(_0x465740,_0xaaffec))[_0x9a77('0x5e')](handleError(_0x465740,null));};exports[_0x9a77('0x5f')]=function(_0xc1d660,_0x2432e4){var _0x33dc02={'raw':![],'where':{'id':_0xc1d660['params']['id']}},_0x2fc025={};_0x2fc025[_0x9a77('0x42')]=_[_0x9a77('0x60')](_[_0x9a77('0x43')](db[_0x9a77('0x41')]['rawAttributes']),[_0x9a77('0x44'),'salt']);_0x2fc025['query']=_[_0x9a77('0x43')](_0xc1d660[_0x9a77('0x47')]);_0x2fc025[_0x9a77('0x50')]=_['intersection'](_0x2fc025[_0x9a77('0x42')],_0x2fc025[_0x9a77('0x47')]);_0x33dc02[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x2fc025[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0xc1d660['query'][_0x9a77('0x48')]));_0x33dc02[_0x9a77('0x49')]=_0x33dc02[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x33dc02['attributes']:_0x2fc025[_0x9a77('0x42')];if(_0xc1d660[_0x9a77('0x47')][_0x9a77('0x5a')]){_0x33dc02['include']=[{'all':!![]}];}_0x33dc02=_['merge']({},_0x33dc02,_0xc1d660['options']);return db['User'][_0x9a77('0x3a')](_0x33dc02)[_0x9a77('0x1d')](handleEntityNotFound(_0x2432e4,null))[_0x9a77('0x1d')](respondWithResult(_0x2432e4,null))[_0x9a77('0x5e')](handleError(_0x2432e4,null));};exports['bulkCreate']=function(_0x3469a7,_0x90cc7){return db['User'][_0x9a77('0x61')](_0x3469a7[_0x9a77('0x62')],{'raw':![],'individualHooks':!![]})[_0x9a77('0x1d')](respondWithResult(_0x90cc7,0xc9))[_0x9a77('0x5e')](handleError(_0x90cc7,null));};exports['update']=function(_0x218332,_0x30bb97){if(_0x218332[_0x9a77('0x62')]['id']){delete _0x218332[_0x9a77('0x62')]['id'];}delete _0x218332[_0x9a77('0x62')][_0x9a77('0x63')];return db['User'][_0x9a77('0x3a')]({'where':{'id':_0x218332[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x30bb97,null))[_0x9a77('0x1d')](saveUpdates(_0x218332[_0x9a77('0x62')],null))[_0x9a77('0x1d')](respondWithResult(_0x30bb97,null))['catch'](handleError(_0x30bb97,null));};exports[_0x9a77('0x65')]=function(_0x48fe17,_0x103a36){return db[_0x9a77('0x41')][_0x9a77('0x65')]()[_0x9a77('0x1d')](respondWithResult(_0x103a36,null))[_0x9a77('0x5e')](handleError(_0x103a36,null));};exports[_0x9a77('0x66')]=function(_0x37749a,_0x2f2c0c,_0x51a0d2){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x37749a[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x2f2c0c,null))['then'](function(_0x1531fe){if(_0x1531fe){return _0x1531fe[_0x9a77('0x66')](_0x37749a[_0x9a77('0x62')][_0x9a77('0x67')],_[_0x9a77('0x68')](_0x37749a[_0x9a77('0x62')],[_0x9a77('0x67'),'id'])||{});}})['then'](respondWithResult(_0x2f2c0c,null))[_0x9a77('0x5e')](handleError(_0x2f2c0c,null));};var getLicense=function(_0x5d6e28){return new BPromise(function(_0x387675,_0x162548){var _0x3c97cf=0x0;_0x5d6e28['body'][_0x9a77('0x63')]==='agent'&&_0x387675(_0x9a77('0x69'));return db[_0x9a77('0x41')][_0x9a77('0x28')]({'where':{'$or':[{'role':_0x5d6e28[_0x9a77('0x62')][_0x9a77('0x63')]===_0x9a77('0x34')?_0x9a77('0x34'):['admin',_0x9a77('0x6a')]}]}})[_0x9a77('0x1d')](function(_0xb277cc){_0x3c97cf=_0xb277cc;return require(_0x9a77('0x6b'))[_0x9a77('0x6c')]();})[_0x9a77('0x1d')](function(_0x3f4005){var _0x3d0b3f=_0x5d6e28[_0x9a77('0x62')][_0x9a77('0x63')]===_0x9a77('0x34')?'telephones':_0x9a77('0x6d');if(!_['isNil'](_0x3f4005[_0x3d0b3f])&&_0x3c97cf>=_0x3f4005[_0x3d0b3f]){return _0x162548({'message':_0x9a77('0x6e')});}return _0x387675(util['format'](_0x9a77('0x6f'),_0x3d0b3f,_0x3c97cf));})[_0x9a77('0x5e')](function(_0x516cb0){return _0x162548(_0x516cb0);});});};exports[_0x9a77('0x70')]=function(_0x140f93,_0x2c02f9){return getLicense(_0x140f93)[_0x9a77('0x1d')](function(_0x1f3434){if(!_0x140f93['body']['internal']){var _0x1aaa35;return db[_0x9a77('0x71')]['findById'](0x1)[_0x9a77('0x1d')](function(_0x3afc9c){_0x3afc9c[_0x9a77('0x72')]=!![];return checkPasswordPattern(_0x3afc9c,_0x140f93[_0x9a77('0x62')][_0x9a77('0x44')],_0x3afc9c[_0x9a77('0x72')]);})[_0x9a77('0x1d')](function(_0x3ae7ab){_0x1aaa35=_0x3ae7ab[_0x9a77('0x73')];return db[_0x9a77('0x41')][_0x9a77('0x74')](_0x9a77('0x75'));})[_0x9a77('0x1d')](function(_0x536e60){if(_[_0x9a77('0x76')](_0x536e60)){if(_0x1aaa35){_0x140f93[_0x9a77('0x62')][_0x9a77('0x75')]=_0x1aaa35;}else{_0x140f93[_0x9a77('0x62')][_0x9a77('0x75')]=0x1;}}else{if(_[_0x9a77('0x76')](_0x1aaa35)||_0x1aaa35==_0x536e60){_0x140f93['body']['internal']=_0x536e60+0x1;}else if(_0x1aaa35>_0x536e60){_0x140f93[_0x9a77('0x62')][_0x9a77('0x75')]=_0x1aaa35;}else{return db[_0x9a77('0x56')]['query']('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)',{'type':db[_0x9a77('0x56')][_0x9a77('0x77')][_0x9a77('0x78')]})[_0x9a77('0x1d')](function(_0x57f486){if(_0x57f486&&_0x57f486[_0x9a77('0x4a')]){for(var _0x57dbb2=0x0,_0x3a91ab=_0x57f486['length'];_0x57dbb2<_0x3a91ab&&_[_0x9a77('0x76')](_0x140f93['body'][_0x9a77('0x75')]);_0x57dbb2++){if(_0x1aaa35<=_0x57f486[_0x57dbb2][_0x9a77('0x79')]){_0x140f93[_0x9a77('0x62')][_0x9a77('0x75')]=_0x57f486[_0x57dbb2]['from'];}else if(_0x1aaa35>_0x57f486[_0x57dbb2]['from']&&_0x1aaa35<=_0x57f486[_0x57dbb2]['to']){_0x140f93['body']['internal']=_0x1aaa35;}}}if(_['isNil'](_0x140f93[_0x9a77('0x62')][_0x9a77('0x75')])){_0x140f93[_0x9a77('0x62')][_0x9a77('0x75')]=_0x536e60+0x1;}});}}});}})[_0x9a77('0x1d')](function(){if(_0x140f93[_0x9a77('0x62')][_0x9a77('0x7a')]){_0x140f93['body'][_0x9a77('0x7b')]=_0x140f93[_0x9a77('0x62')][_0x9a77('0x75')];_0x140f93[_0x9a77('0x62')]['VoiceMail']={'mailbox':_0x140f93['body'][_0x9a77('0x75')],'password':_0x140f93[_0x9a77('0x62')][_0x9a77('0x44')],'fullname':_0x140f93['body'][_0x9a77('0x7c')],'email':_0x140f93[_0x9a77('0x62')][_0x9a77('0x7d')]};}if(_0x140f93['body']&&_0x140f93[_0x9a77('0x62')][_0x9a77('0x63')]===_0x9a77('0x32')){_0x140f93[_0x9a77('0x62')][_0x9a77('0x7e')]=['101','102',_0x9a77('0x7f'),'110','104','105',_0x9a77('0x80'),_0x9a77('0x81'),_0x9a77('0x82'),_0x9a77('0x83'),'100','111'];}return db[_0x9a77('0x41')][_0x9a77('0x70')](_0x140f93[_0x9a77('0x62')],{'include':[{'model':db[_0x9a77('0x84')],'as':_0x9a77('0x84')}]});})[_0x9a77('0x1d')](function(_0x1a9197){if(_0x140f93[_0x9a77('0x62')][_0x9a77('0x63')]===_0x9a77('0x6a'))return _0x1a9197;var _0x1d13ac=_0x140f93[_0x9a77('0x6a')][_0x9a77('0x85')]({'plain':!![]});if(!_0x1d13ac)throw new Error(_0x9a77('0x86'));if(_0x1d13ac[_0x9a77('0x63')]==='user'){var _0x2268d7=_0x1a9197['get']({'plain':!![]});var _0x3e6318=[{'name':_0x9a77('0x31'),'value':_0x9a77('0x32')},{'name':_0x9a77('0x33'),'value':'telephone'}];var _0x1bc862=_[_0x9a77('0x3a')](_0x3e6318,[_0x9a77('0x38'),_0x2268d7['role']])['name'];return db[_0x9a77('0x87')][_0x9a77('0x3a')]({'where':{'name':_0x1bc862,'userProfileId':_0x1d13ac['userProfileId']},'raw':!![]})[_0x9a77('0x1d')](function(_0x12f26a){if(_0x12f26a&&_0x12f26a[_0x9a77('0x88')]===0x0){return db[_0x9a77('0x3c')][_0x9a77('0x70')]({'name':_0x2268d7[_0x9a77('0x3b')],'resourceId':_0x2268d7['id'],'type':_0x12f26a[_0x9a77('0x3b')],'sectionId':_0x12f26a['id']},{})[_0x9a77('0x1d')](function(){return _0x1a9197;});}else{return _0x1a9197;}})[_0x9a77('0x5e')](function(_0x152430){logger[_0x9a77('0x23')](_0x9a77('0x89'),_0x152430);throw _0x152430;});}return _0x1a9197;})[_0x9a77('0x1d')](respondWithResult(_0x2c02f9,0xc9))[_0x9a77('0x5e')](handleError(_0x2c02f9,null));};exports[_0x9a77('0x8a')]=function(_0x5b2c88,_0x5b6a50,_0x3d5df4){var _0x1712c9=![];if(_0x5b2c88[_0x9a77('0x62')]['id']){delete _0x5b2c88[_0x9a77('0x62')]['id'];}if(!_[_0x9a77('0x76')](_0x5b2c88[_0x9a77('0x62')][_0x9a77('0x8b')])){if(_0x5b2c88[_0x9a77('0x62')][_0x9a77('0x8b')]===_0x5b2c88[_0x9a77('0x62')]['newPassword']){throw new Error('New\x20password\x20must\x20be\x20different\x20from\x20old\x20one');}}return db['User'][_0x9a77('0x3a')]({'where':{'id':_0x5b2c88[_0x9a77('0x64')]['id']}})['then'](function(_0x2ec25c){if(_0x2ec25c){if(_0x2ec25c['id']==_0x5b2c88[_0x9a77('0x6a')]['id']){if(!_0x5b2c88[_0x9a77('0x62')][_0x9a77('0x8b')]||!_0x5b2c88[_0x9a77('0x62')]['newPassword']){throw new db[(_0x9a77('0x8c'))][(_0x9a77('0x8d'))](_0x9a77('0x8e'));}if(!_0x2ec25c[_0x9a77('0x8f')](_0x5b2c88['body'][_0x9a77('0x8b')])){throw new db[(_0x9a77('0x8c'))][(_0x9a77('0x8d'))](_0x9a77('0x90'));}if(_0x5b2c88[_0x9a77('0x62')][_0x9a77('0x8b')]==_0x5b2c88['body'][_0x9a77('0x91')]){throw new db[(_0x9a77('0x8c'))][(_0x9a77('0x8d'))](_0x9a77('0x92'));}return _0x2ec25c;}else if(_0x5b2c88[_0x9a77('0x6a')]['role']=='admin'){if(!_0x5b2c88[_0x9a77('0x62')][_0x9a77('0x91')]){throw new db[(_0x9a77('0x8c'))][(_0x9a77('0x8d'))](_0x9a77('0x93'));}return _0x2ec25c;}else if(_0x5b2c88[_0x9a77('0x6a')][_0x9a77('0x63')]==_0x9a77('0x6a')){if(!_0x5b2c88[_0x9a77('0x62')][_0x9a77('0x91')]){throw new db['Sequelize']['ValidationError']('Invalid\x20body\x20format.\x20Use\x20newPassword');}if(_0x2ec25c[_0x9a77('0x63')]!=_0x9a77('0x32')){throw new db[(_0x9a77('0x8c'))][(_0x9a77('0x8d'))](_0x9a77('0x94'));}return _0x2ec25c;}else{throw new db[(_0x9a77('0x8c'))][(_0x9a77('0x8d'))]('Unauthorized');}}return null;})[_0x9a77('0x1d')](handleEntityNotFound(_0x5b6a50,null))[_0x9a77('0x1d')](function(_0x1e6f9e){return db[_0x9a77('0x71')]['findOne']({'attributes':['id',_0x9a77('0x72')]})[_0x9a77('0x1d')](function(_0x259882){_0x1712c9=_0x259882[_0x9a77('0x72')];return checkPasswordPattern(_0x1e6f9e,_0x5b2c88['body'][_0x9a77('0x91')],_0x1712c9);});})[_0x9a77('0x1d')](saveUpdates({'password':_0x5b2c88['body'][_0x9a77('0x91')],'passwordResetAt':_0x5b2c88[_0x9a77('0x6a')]['id']==_0x5b2c88['params']['id']?moment():null},null))['then'](respondWithResult(_0x5b6a50,null))[_0x9a77('0x5e')](handleError(_0x5b6a50,null));};exports[_0x9a77('0x95')]=function(_0x5ea12a,_0x44b848,_0x3a24e7){var _0x5ba7d2=_0x5ea12a['body'][_0x9a77('0x96')];return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x5ea12a[_0x9a77('0x64')]['id']},'attributes':['id',_0x9a77('0x3b'),_0x9a77('0x63'),_0x9a77('0x97'),_0x9a77('0x98'),_0x9a77('0x99'),_0x9a77('0x9a')]})[_0x9a77('0x1d')](handleEntityNotFound(_0x44b848,null))[_0x9a77('0x1d')](function(_0x2ce546){if(_0x2ce546){if(!utils[_0x9a77('0x9b')](_0x5ba7d2)){throw new db[(_0x9a77('0x8c'))][(_0x9a77('0x8d'))]('Unknown\x20channel');}return _0x2ce546['add'+_[_0x9a77('0x9c')](_0x5ba7d2['toLowerCase']())+_0x9a77('0x9d')](_0x5ea12a['body'][_0x9a77('0x67')],{'penalty':_0x5ea12a[_0x9a77('0x62')]['penalty']||0x0})[_0x9a77('0x9e')](function(_0x378b0c){for(var _0x3a6a0e=0x0;_0x3a6a0e<_0x5ea12a[_0x9a77('0x62')][_0x9a77('0x67')]['length'];_0x3a6a0e+=0x1){var _0xd7b62f={'UserId':_0x5ea12a[_0x9a77('0x64')]['id']};_0xd7b62f[_[_0x9a77('0x9c')](_0x5ba7d2[_0x9a77('0x9f')]())+'QueueId']=_0x5ea12a[_0x9a77('0x62')][_0x9a77('0x67')][_0x3a6a0e];socket[_0x9a77('0xa0')](_0x9a77('0x6a')+_[_0x9a77('0x9c')](_0x5ba7d2['toLowerCase']())+'Queue:save',_0xd7b62f);}return _0x378b0c;})[_0x9a77('0x1d')](function(){if(_0x5ba7d2===_0x9a77('0xa1')){return db['VoiceQueue'][_0x9a77('0x5c')]({'where':{'id':_0x5ea12a['body'][_0x9a77('0x67')]||[]},'raw':!![],'attributes':['id',_0x9a77('0x3b')]});}})[_0x9a77('0x1d')](function(_0xd74a11){var _0x5d816e=_0x2ce546[_0x9a77('0x85')]({'plain':!![]});var _0x5bbca4=[];if(_0x5ba7d2==='voice'&&_0x5d816e[_0x9a77('0x63')]===_0x9a77('0x32')&&_0x5d816e[_0x9a77('0x97')]){for(var _0xb0b4f1=0x0;_0xb0b4f1<_0xd74a11[_0x9a77('0x4a')];_0xb0b4f1+=0x1){_0x5bbca4[_0x9a77('0xa2')]({'membername':_0x5d816e[_0x9a77('0x3b')],'UserId':_0x5d816e['id'],'queue_name':_0xd74a11[_0xb0b4f1][_0x9a77('0x3b')],'VoiceQueueId':_0xd74a11[_0xb0b4f1]['id'],'interface':_['isNil'](_0x5d816e[_0x9a77('0x9a')])?util[_0x9a77('0xa3')](_0x9a77('0xa4'),_0x5d816e['name']):_0x5d816e[_0x9a77('0x9a')],'paused':_0x5d816e[_0x9a77('0x99')]||![],'penalty':_0x5ea12a[_0x9a77('0x62')][_0x9a77('0xa5')]||0x0});}return BPromise[_0x9a77('0xa6')](_0x5bbca4,function(_0x1f11ce){return db[_0x9a77('0xa7')][_0x9a77('0xa8')](_0x1f11ce);});}return _0x2ce546;});}})[_0x9a77('0x1d')](respondWithStatusCode(_0x44b848,null))[_0x9a77('0x5e')](handleError(_0x44b848,null));};exports[_0x9a77('0xa9')]=function(_0x3f365a,_0x2b7b55,_0x29ea7e){var _0x1f12bc;return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x3f365a[_0x9a77('0x64')]['id']},'attributes':['id',_0x9a77('0x3b'),_0x9a77('0x63')]})[_0x9a77('0x1d')](handleEntityNotFound(_0x2b7b55,null))['then'](function(_0x321043){if(_0x321043){_0x1f12bc=_0x321043;if(!_0x3f365a[_0x9a77('0x47')]['channel']||!utils[_0x9a77('0x9b')](_0x3f365a[_0x9a77('0x47')][_0x9a77('0x96')])){throw new db[(_0x9a77('0x8c'))][(_0x9a77('0x8d'))](_0x9a77('0xaa'));}return _0x321043[_0x9a77('0xab')+_[_0x9a77('0x9c')](_0x3f365a[_0x9a77('0x47')][_0x9a77('0x96')][_0x9a77('0x9f')]())+_0x9a77('0x9d')](_0x3f365a[_0x9a77('0x47')][_0x9a77('0x67')]);}})[_0x9a77('0x1d')](function(_0x422c5d){for(var _0x2e91c2=0x0;_0x2e91c2<_0x3f365a[_0x9a77('0x47')][_0x9a77('0x67')][_0x9a77('0x4a')];_0x2e91c2+=0x1){var _0x5dcc9c={'UserId':_0x3f365a[_0x9a77('0x64')]['id']};_0x5dcc9c[_['capitalize'](_0x3f365a[_0x9a77('0x47')][_0x9a77('0x96')][_0x9a77('0x9f')]())+_0x9a77('0xac')]=_0x3f365a[_0x9a77('0x47')]['ids'][_0x2e91c2];socket[_0x9a77('0xa0')]('user'+_[_0x9a77('0x9c')](_0x3f365a[_0x9a77('0x47')]['channel'][_0x9a77('0x9f')]())+'Queue:remove',_0x5dcc9c);}return _0x422c5d;})[_0x9a77('0x1d')](function(){if(_0x3f365a[_0x9a77('0x47')][_0x9a77('0x96')]===_0x9a77('0xa1')){return db['UserVoiceQueueRt'][_0x9a77('0x2f')]({'where':{'UserId':_0x3f365a[_0x9a77('0x64')]['id'],'VoiceQueueId':_0x3f365a[_0x9a77('0x47')][_0x9a77('0x67')]},'individualHooks':!![]})[_0x9a77('0x1d')](function(){return _0x1f12bc;});}return _0x1f12bc;})['then'](respondWithStatusCode(_0x2b7b55,null))['catch'](handleError(_0x2b7b55,null));};exports[_0x9a77('0xad')]=function(_0x2fe6af,_0xf76abf,_0x338cc2){_0x2fe6af[_0x9a77('0x62')]['userpic']=_0x2fe6af[_0x9a77('0xae')][_0x9a77('0xaf')];return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x2fe6af[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0xf76abf,null))[_0x9a77('0x1d')](saveUpdates(_0x2fe6af[_0x9a77('0x62')],null))[_0x9a77('0x1d')](respondWithResult(_0xf76abf,null))[_0x9a77('0x5e')](handleError(_0xf76abf,null));};exports[_0x9a77('0xb0')]=function(_0x312a89,_0x9a991f,_0x4e6c61){var _0x4545f8=path[_0x9a77('0xb1')](config['root'],_0x9a77('0xb2'));return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x312a89[_0x9a77('0x64')]['id']},'attributes':['id',_0x9a77('0xb3')],'raw':!![]})['then'](handleEntityNotFound(_0x9a991f,null))[_0x9a77('0x1d')](function(_0x2a71de){if(_0x2a71de){if(_['isNil'](_0x2a71de[_0x9a77('0xb3')])){return _0x9a991f[_0x9a77('0xb4')](_0x4545f8);}else{if(!fs[_0x9a77('0xb5')](path[_0x9a77('0xb1')](config['root'],_0x9a77('0xb6'),_0x2a71de[_0x9a77('0xb3')]))){return _0x9a991f[_0x9a77('0xb4')](_0x4545f8);}return _0x9a991f['download'](path['join'](config[_0x9a77('0xb7')],_0x9a77('0xb6'),_0x2a71de[_0x9a77('0xb3')]));}}})[_0x9a77('0x5e')](handleError(_0x9a991f,null));};exports[_0x9a77('0xb8')]=function(_0x50b291,_0x49ce05,_0x280db4){var _0x2c7595={};var _0x47d3a1={};var _0x4c6bd6;var _0x406939;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x50b291[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x49ce05,null))[_0x9a77('0x1d')](function(_0xc71784){if(_0xc71784){_0x4c6bd6=_0xc71784;_0x47d3a1[_0x9a77('0x42')]=_[_0x9a77('0x43')](db[_0x9a77('0xba')][_0x9a77('0xbb')]);_0x47d3a1[_0x9a77('0x47')]=_['keys'](_0x50b291[_0x9a77('0x47')]);_0x47d3a1[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x47d3a1[_0x9a77('0x42')],_0x47d3a1[_0x9a77('0x47')]);_0x2c7595['attributes']=_[_0x9a77('0x46')](_0x47d3a1[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x50b291[_0x9a77('0x47')][_0x9a77('0x48')]));_0x2c7595[_0x9a77('0x49')]=_0x2c7595[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x2c7595[_0x9a77('0x49')]:_0x47d3a1[_0x9a77('0x42')];_0x2c7595[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x50b291[_0x9a77('0x47')][_0x9a77('0x4e')]);_0x2c7595[_0x9a77('0x4f')]=qs[_0x9a77('0x50')](_[_0x9a77('0x51')](_0x50b291[_0x9a77('0x47')],_0x47d3a1[_0x9a77('0x50')]));if(_0x50b291['query']['filter']){_0x2c7595[_0x9a77('0x4f')]=_['merge'](_0x2c7595[_0x9a77('0x4f')],{'$or':_['map'](_0x2c7595[_0x9a77('0x49')],function(_0x381d9b){var _0x4c72fc={};_0x4c72fc[_0x381d9b]={'$like':'%'+_0x50b291[_0x9a77('0x47')]['filter']+'%'};return _0x4c72fc;})});}_0x2c7595=_[_0x9a77('0x52')]({},_0x2c7595,_0x50b291[_0x9a77('0x59')]);return _0x4c6bd6[_0x9a77('0xb8')](_0x2c7595);}})['then'](function(_0x279b43){if(_0x279b43){_0x406939=_0x279b43['length'];if(_0x50b291[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x5a'))){_0x2c7595['include']=[{'model':db[_0x9a77('0xbc')],'as':_0x9a77('0xbd'),'required':![]},{'model':db[_0x9a77('0xbe')],'as':_0x9a77('0xbf'),'attributes':['id',_0x9a77('0x3b'),_0x9a77('0xc0')],'where':_0x50b291[_0x9a77('0x47')][_0x9a77('0xc1')]?{'id':_0x50b291[_0x9a77('0x47')][_0x9a77('0xc1')]}:undefined,'required':_0x50b291[_0x9a77('0x47')][_0x9a77('0xc1')]?!![]:![]}];}if(!_0x50b291[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x2c7595['limit']=qs['limit'](_0x50b291[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x2c7595[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x50b291[_0x9a77('0x47')][_0x9a77('0x29')]);}return _0x4c6bd6[_0x9a77('0xb8')](_0x2c7595);}})[_0x9a77('0x1d')](function(_0x43c07c){if(_0x43c07c){return _0x43c07c?{'count':_0x406939,'rows':_0x43c07c}:null;}})['then'](respondWithResult(_0x49ce05,null))[_0x9a77('0x5e')](handleError(_0x49ce05,null));};exports[_0x9a77('0xc2')]=function(_0x3a9ff4,_0x235d34,_0x371f5f){var _0x2b349a;var _0x1147af;var _0x5071ab={};var _0x47f92b;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x3a9ff4['params']['id']},'attributes':['id',_0x9a77('0x3b'),_0x9a77('0x63')]})['then'](handleEntityNotFound(_0x235d34,null))[_0x9a77('0x1d')](function(_0x4e2767){if(!utils[_0x9a77('0x9b')](_0x3a9ff4[_0x9a77('0x47')][_0x9a77('0x96')])){throw new db['Sequelize'][(_0x9a77('0x8d'))](_0x9a77('0xaa'));}_0x2b349a=_0x4e2767;var _0x5dabcc={};_0x5dabcc[_0x9a77('0x42')]=_[_0x9a77('0x43')](db[_[_0x9a77('0x9c')](_0x3a9ff4[_0x9a77('0x47')][_0x9a77('0x96')])+_0x9a77('0xc3')]['rawAttributes']);_0x5dabcc[_0x9a77('0x47')]=_['keys'](_0x3a9ff4['query']);_0x5dabcc['filters']=_[_0x9a77('0x46')](_0x5dabcc[_0x9a77('0x42')],_0x5dabcc[_0x9a77('0x47')]);_0x5071ab[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x5dabcc[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x3a9ff4[_0x9a77('0x47')][_0x9a77('0x48')]));_0x5071ab[_0x9a77('0x49')]=_0x5071ab[_0x9a77('0x49')]['length']?_0x5071ab[_0x9a77('0x49')]:_0x5dabcc['model'];_0x5071ab[_0x9a77('0x4d')]=qs['sort'](_0x3a9ff4[_0x9a77('0x47')][_0x9a77('0x4e')]);_0x5071ab[_0x9a77('0x4f')]=qs['filters'](_[_0x9a77('0x51')](_0x3a9ff4[_0x9a77('0x47')],_0x5dabcc[_0x9a77('0x50')]));if(_0x3a9ff4['query'][_0x9a77('0x35')]){_0x5071ab['where']=_[_0x9a77('0x52')](_0x5071ab['where'],{'$or':_[_0x9a77('0x37')](_0x5071ab['attributes'],function(_0x40075a){var _0x308989={};_0x308989[_0x40075a]={'$like':'%'+_0x3a9ff4[_0x9a77('0x47')]['filter']+'%'};return _0x308989;})});}_0x5071ab=_[_0x9a77('0x52')]({},_0x5071ab,_0x3a9ff4['options']);switch(_0x2b349a[_0x9a77('0x63')]){case _0x9a77('0xc4'):return db[_[_0x9a77('0x9c')](_0x3a9ff4[_0x9a77('0x47')]['channel'])+_0x9a77('0xc3')]['findAll'](_0x5071ab);case _0x9a77('0x6a'):case _0x9a77('0x32'):return _0x2b349a[_0x9a77('0x85')+_['capitalize'](_0x3a9ff4[_0x9a77('0x47')][_0x9a77('0x96')])+_0x9a77('0x9d')](_0x5071ab);default:throw new db[(_0x9a77('0x8c'))]['ValidationError'](_0x9a77('0xc5'));}})[_0x9a77('0x1d')](function(_0x1ef306){_0x47f92b=_0x1ef306[_0x9a77('0x4a')];if(!_0x3a9ff4[_0x9a77('0x47')]['hasOwnProperty'](_0x9a77('0x4c'))){_0x5071ab['limit']=qs[_0x9a77('0x2a')](_0x3a9ff4[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x5071ab[_0x9a77('0x29')]=qs['offset'](_0x3a9ff4[_0x9a77('0x47')][_0x9a77('0x29')]);}switch(_0x2b349a[_0x9a77('0x63')]){case'admin':return db[_[_0x9a77('0x9c')](_0x3a9ff4[_0x9a77('0x47')][_0x9a77('0x96')])+'Queue']['findAll'](_0x5071ab);case _0x9a77('0x6a'):case'agent':return _0x2b349a[_0x9a77('0x85')+_[_0x9a77('0x9c')](_0x3a9ff4[_0x9a77('0x47')][_0x9a77('0x96')])+'Queues'](_0x5071ab);}})[_0x9a77('0x1d')](function(_0x37a49d){return{'count':_0x47f92b,'rows':_0x37a49d};})[_0x9a77('0x1d')](respondWithResult(_0x235d34,null))[_0x9a77('0x5e')](handleError(_0x235d34,null));};exports[_0x9a77('0xc6')]=function(_0x3eac64,_0x2da96d,_0x21185a){var _0x592bfa={};var _0x2406b1={};var _0x23ee2c;var _0x500309;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x3eac64[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x2da96d,null))['then'](function(_0x2b3ae0){if(_0x2b3ae0){_0x23ee2c=_0x2b3ae0;_0x2406b1[_0x9a77('0x42')]=_[_0x9a77('0x43')](db[_0x9a77('0xa7')][_0x9a77('0xbb')]);_0x2406b1['query']=_[_0x9a77('0x43')](_0x3eac64[_0x9a77('0x47')]);_0x2406b1[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x2406b1[_0x9a77('0x42')],_0x2406b1[_0x9a77('0x47')]);_0x592bfa[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x2406b1[_0x9a77('0x42')],qs['fields'](_0x3eac64[_0x9a77('0x47')][_0x9a77('0x48')]));_0x592bfa['attributes']=_0x592bfa[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x592bfa[_0x9a77('0x49')]:_0x2406b1[_0x9a77('0x42')];_0x592bfa[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x3eac64['query'][_0x9a77('0x4e')]);_0x592bfa[_0x9a77('0x4f')]=qs[_0x9a77('0x50')](_[_0x9a77('0x51')](_0x3eac64[_0x9a77('0x47')],_0x2406b1[_0x9a77('0x50')]));if(_0x3eac64['query'][_0x9a77('0x35')]){_0x592bfa[_0x9a77('0x4f')]=_['merge'](_0x592bfa[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x592bfa[_0x9a77('0x49')],function(_0x4455c9){var _0x5647c2={};_0x5647c2[_0x4455c9]={'$like':'%'+_0x3eac64[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0x5647c2;})});}_0x592bfa=_['merge']({},_0x592bfa,_0x3eac64['options']);return _0x23ee2c['getVoiceQueuesRt'](_0x592bfa);}})[_0x9a77('0x1d')](function(_0x3a6684){if(_0x3a6684){_0x500309=_0x3a6684[_0x9a77('0x4a')];if(!_0x3eac64[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x592bfa[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x3eac64[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x592bfa[_0x9a77('0x29')]=qs['offset'](_0x3eac64[_0x9a77('0x47')][_0x9a77('0x29')]);}return _0x23ee2c[_0x9a77('0xc6')](_0x592bfa);}})[_0x9a77('0x1d')](function(_0x35d390){if(_0x35d390){return _0x35d390?{'count':_0x500309,'rows':_0x35d390}:null;}})['then'](respondWithResult(_0x2da96d,null))['catch'](handleError(_0x2da96d,null));};exports['getGroups']=function(_0x2755cd,_0x4749cd,_0x2573dd){var _0x498488={};var _0x489a72={};var _0xab8fbd;var _0x592a53;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x2755cd['params']['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x4749cd,null))[_0x9a77('0x1d')](function(_0x44770d){if(_0x44770d){_0xab8fbd=_0x44770d;_0x489a72[_0x9a77('0x42')]=_[_0x9a77('0x43')](db[_0x9a77('0xc7')]['rawAttributes']);_0x489a72[_0x9a77('0x47')]=_[_0x9a77('0x43')](_0x2755cd[_0x9a77('0x47')]);_0x489a72['filters']=_[_0x9a77('0x46')](_0x489a72[_0x9a77('0x42')],_0x489a72[_0x9a77('0x47')]);_0x498488[_0x9a77('0x49')]=_['intersection'](_0x489a72[_0x9a77('0x42')],qs['fields'](_0x2755cd[_0x9a77('0x47')][_0x9a77('0x48')]));_0x498488[_0x9a77('0x49')]=_0x498488[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x498488[_0x9a77('0x49')]:_0x489a72[_0x9a77('0x42')];_0x498488[_0x9a77('0x4d')]=qs['sort'](_0x2755cd[_0x9a77('0x47')][_0x9a77('0x4e')]);_0x498488[_0x9a77('0x4f')]=qs[_0x9a77('0x50')](_['pick'](_0x2755cd[_0x9a77('0x47')],_0x489a72['filters']));if(_0x2755cd['query'][_0x9a77('0x35')]){_0x498488[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x498488[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x498488[_0x9a77('0x49')],function(_0x365631){var _0x34ec01={};_0x34ec01[_0x365631]={'$like':'%'+_0x2755cd[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0x34ec01;})});}_0x498488=_[_0x9a77('0x52')]({},_0x498488,_0x2755cd[_0x9a77('0x59')]);return _0xab8fbd[_0x9a77('0xc8')](_0x498488);}})[_0x9a77('0x1d')](function(_0x584a66){if(_0x584a66){_0x592a53=_0x584a66[_0x9a77('0x4a')];if(!_0x2755cd[_0x9a77('0x47')][_0x9a77('0x4b')]('nolimit')){_0x498488[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x2755cd['query'][_0x9a77('0x2a')]);_0x498488[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x2755cd[_0x9a77('0x47')][_0x9a77('0x29')]);}return _0xab8fbd[_0x9a77('0xc8')](_0x498488);}})[_0x9a77('0x1d')](function(_0x3a6f0c){if(_0x3a6f0c){return _0x3a6f0c?{'count':_0x592a53,'rows':_0x3a6f0c}:null;}})[_0x9a77('0x1d')](respondWithResult(_0x4749cd,null))[_0x9a77('0x5e')](handleError(_0x4749cd,null));};exports[_0x9a77('0xc9')]=function(_0x21c228,_0x4501bf,_0x2bb92a){var _0x156ccf={'raw':!![],'where':{}};var _0x18e9f2={};var _0x15bdda={'count':0x0,'rows':[]};return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x21c228[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x4501bf,null))[_0x9a77('0x1d')](function(_0x1d280d){if(_0x1d280d){_0x18e9f2[_0x9a77('0x42')]=_[_0x9a77('0x43')](db[_0x9a77('0xca')]['rawAttributes']);_0x18e9f2[_0x9a77('0x47')]=_['keys'](_0x21c228[_0x9a77('0x47')]);_0x18e9f2[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x18e9f2['model'],_0x18e9f2['query']);_0x156ccf['attributes']=_[_0x9a77('0x46')](_0x18e9f2['model'],qs[_0x9a77('0x48')](_0x21c228['query'][_0x9a77('0x48')]));_0x156ccf['attributes']=_0x156ccf[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x156ccf[_0x9a77('0x49')]:_0x18e9f2[_0x9a77('0x42')];if(!_0x21c228[_0x9a77('0x47')][_0x9a77('0x4b')]('nolimit')){_0x156ccf[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x21c228[_0x9a77('0x47')]['limit']);_0x156ccf[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x21c228[_0x9a77('0x47')][_0x9a77('0x29')]);}_0x156ccf[_0x9a77('0x4d')]=qs['sort'](_0x21c228['query'][_0x9a77('0x4e')]);_0x156ccf[_0x9a77('0x4f')]=qs['filters'](_[_0x9a77('0x51')](_0x21c228['query'],_0x18e9f2[_0x9a77('0x50')]));_0x156ccf[_0x9a77('0x4f')]['UserId']=_0x1d280d['id'];if(_0x21c228[_0x9a77('0x47')][_0x9a77('0x35')]){_0x156ccf[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x156ccf[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x156ccf[_0x9a77('0x49')],function(_0xaaa042){var _0x171d54={};_0x171d54[_0xaaa042]={'$like':'%'+_0x21c228[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0x171d54;})});}_0x156ccf=_[_0x9a77('0x52')]({},_0x156ccf,_0x21c228['options']);return db['VoiceRecording'][_0x9a77('0x28')]({'where':_0x156ccf[_0x9a77('0x4f')]})[_0x9a77('0x1d')](function(_0x4b92b1){_0x15bdda['count']=_0x4b92b1;if(_0x21c228[_0x9a77('0x47')]['includeAll']){_0x156ccf[_0x9a77('0x5b')]=[{'all':!![]}];}return db[_0x9a77('0xca')][_0x9a77('0x5c')](_0x156ccf);})[_0x9a77('0x1d')](function(_0x4689ab){_0x15bdda[_0x9a77('0x5d')]=_0x4689ab;return _0x15bdda;});}})['then'](respondWithFilteredResult(_0x4501bf,_0x156ccf))[_0x9a77('0x5e')](handleError(_0x4501bf,null));};exports[_0x9a77('0xcb')]=function(_0x1dc724,_0x4b3c63,_0x1549b5){var _0x41f8e5={'raw':!![],'where':{}};var _0x250864={};var _0x3cdde8={'count':0x0,'rows':[]};return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x1dc724['params']['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x4b3c63,null))[_0x9a77('0x1d')](function(_0x1a0e92){if(_0x1a0e92){_0x250864[_0x9a77('0x42')]=_['keys'](db[_0x9a77('0xcc')][_0x9a77('0xbb')]);_0x250864[_0x9a77('0x47')]=_[_0x9a77('0x43')](_0x1dc724[_0x9a77('0x47')]);_0x250864[_0x9a77('0x50')]=_['intersection'](_0x250864[_0x9a77('0x42')],_0x250864['query']);_0x41f8e5[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x250864['model'],qs['fields'](_0x1dc724['query'][_0x9a77('0x48')]));_0x41f8e5[_0x9a77('0x49')]=_0x41f8e5[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x41f8e5[_0x9a77('0x49')]:_0x250864[_0x9a77('0x42')];if(!_0x1dc724[_0x9a77('0x47')]['hasOwnProperty'](_0x9a77('0x4c'))){_0x41f8e5[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x1dc724['query'][_0x9a77('0x2a')]);_0x41f8e5[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x1dc724[_0x9a77('0x47')][_0x9a77('0x29')]);}_0x41f8e5[_0x9a77('0x4d')]=qs['sort'](_0x1dc724['query'][_0x9a77('0x4e')]);_0x41f8e5[_0x9a77('0x4f')]=qs[_0x9a77('0x50')](_[_0x9a77('0x51')](_0x1dc724[_0x9a77('0x47')],_0x250864[_0x9a77('0x50')]));_0x41f8e5[_0x9a77('0x4f')][_0x9a77('0xcd')]=_0x1a0e92['id'];if(_0x1dc724['query']['filter']){_0x41f8e5['where']=_[_0x9a77('0x52')](_0x41f8e5[_0x9a77('0x4f')],{'$or':_['map'](_0x41f8e5[_0x9a77('0x49')],function(_0x126d8c){var _0x3ce728={};_0x3ce728[_0x126d8c]={'$like':'%'+_0x1dc724[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0x3ce728;})});}_0x41f8e5=_[_0x9a77('0x52')]({},_0x41f8e5,_0x1dc724[_0x9a77('0x59')]);return db['ScreenRecording'][_0x9a77('0x28')]({'where':_0x41f8e5[_0x9a77('0x4f')]})[_0x9a77('0x1d')](function(_0x291db1){_0x3cdde8['count']=_0x291db1;if(_0x1dc724['query'][_0x9a77('0x5a')]){_0x41f8e5[_0x9a77('0x5b')]=[{'all':!![]}];}return db['ScreenRecording'][_0x9a77('0x5c')](_0x41f8e5);})[_0x9a77('0x1d')](function(_0x528c6a){_0x3cdde8[_0x9a77('0x5d')]=_0x528c6a;return _0x3cdde8;});}})['then'](respondWithFilteredResult(_0x4b3c63,_0x41f8e5))[_0x9a77('0x5e')](handleError(_0x4b3c63,null));};exports[_0x9a77('0xce')]=function(_0x2e25ba,_0x5e0ffe,_0x585348){var _0x59d476={};var _0x4636e5={};var _0x51d188;var _0xf4b288;return db[_0x9a77('0x41')]['findOne']({'where':{'id':_0x2e25ba['params']['id']}})['then'](handleEntityNotFound(_0x5e0ffe,null))['then'](function(_0x591af7){if(_0x591af7){_0x51d188=_0x591af7;_0x4636e5[_0x9a77('0x42')]=_[_0x9a77('0x43')](db[_0x9a77('0xcf')][_0x9a77('0xbb')]);_0x4636e5[_0x9a77('0x47')]=_['keys'](_0x2e25ba[_0x9a77('0x47')]);_0x4636e5[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x4636e5['model'],_0x4636e5['query']);_0x59d476[_0x9a77('0x49')]=_['intersection'](_0x4636e5[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x2e25ba[_0x9a77('0x47')][_0x9a77('0x48')]));_0x59d476[_0x9a77('0x49')]=_0x59d476[_0x9a77('0x49')]['length']?_0x59d476[_0x9a77('0x49')]:_0x4636e5['model'];_0x59d476[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x2e25ba[_0x9a77('0x47')][_0x9a77('0x4e')]);_0x59d476[_0x9a77('0x4f')]=qs[_0x9a77('0x50')](_['pick'](_0x2e25ba[_0x9a77('0x47')],_0x4636e5[_0x9a77('0x50')]));if(_0x2e25ba[_0x9a77('0x47')][_0x9a77('0x35')]){_0x59d476[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x59d476[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x59d476['attributes'],function(_0x4b62b0){var _0x31fea1={};_0x31fea1[_0x4b62b0]={'$like':'%'+_0x2e25ba[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0x31fea1;})});}_0x59d476=_[_0x9a77('0x52')]({},_0x59d476,_0x2e25ba['options']);return _0x51d188[_0x9a77('0xce')](_0x59d476);}})[_0x9a77('0x1d')](function(_0x9d5cb8){if(_0x9d5cb8){_0xf4b288=_0x9d5cb8['length'];if(!_0x2e25ba[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x59d476[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x2e25ba[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x59d476['offset']=qs['offset'](_0x2e25ba[_0x9a77('0x47')][_0x9a77('0x29')]);}return _0x51d188[_0x9a77('0xce')](_0x59d476);}})[_0x9a77('0x1d')](function(_0x4c42d7){if(_0x4c42d7){return _0x4c42d7?{'count':_0xf4b288,'rows':_0x4c42d7}:null;}})['then'](respondWithResult(_0x5e0ffe,null))['catch'](handleError(_0x5e0ffe,null));};exports[_0x9a77('0xd0')]=function(_0x21f19c,_0x1be205,_0x36b28a){var _0x26cb00={};var _0x2b858b={};var _0x3ad2fd;var _0x18705a;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x21f19c['params']['id']}})['then'](handleEntityNotFound(_0x1be205,null))['then'](function(_0x3f51e8){if(_0x3f51e8){_0x3ad2fd=_0x3f51e8;_0x2b858b[_0x9a77('0x42')]=_['keys'](db[_0x9a77('0xd1')][_0x9a77('0xbb')]);_0x2b858b[_0x9a77('0x47')]=_[_0x9a77('0x43')](_0x21f19c['query']);_0x2b858b[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x2b858b[_0x9a77('0x42')],_0x2b858b[_0x9a77('0x47')]);_0x26cb00['attributes']=_[_0x9a77('0x46')](_0x2b858b[_0x9a77('0x42')],qs['fields'](_0x21f19c[_0x9a77('0x47')][_0x9a77('0x48')]));_0x26cb00['attributes']=_0x26cb00['attributes']['length']?_0x26cb00[_0x9a77('0x49')]:_0x2b858b[_0x9a77('0x42')];_0x26cb00[_0x9a77('0x4d')]=qs['sort'](_0x21f19c['query']['sort']);_0x26cb00[_0x9a77('0x4f')]=qs[_0x9a77('0x50')](_[_0x9a77('0x51')](_0x21f19c['query'],_0x2b858b[_0x9a77('0x50')]));if(_0x21f19c['query'][_0x9a77('0x35')]){_0x26cb00[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x26cb00[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x26cb00['attributes'],function(_0x3e921e){var _0x545212={};_0x545212[_0x3e921e]={'$like':'%'+_0x21f19c[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0x545212;})});}_0x26cb00=_[_0x9a77('0x52')]({},_0x26cb00,_0x21f19c[_0x9a77('0x59')]);return _0x3ad2fd[_0x9a77('0xd0')](_0x26cb00);}})[_0x9a77('0x1d')](function(_0x4e346c){if(_0x4e346c){_0x18705a=_0x4e346c[_0x9a77('0x4a')];if(!_0x21f19c[_0x9a77('0x47')]['hasOwnProperty']('nolimit')){_0x26cb00[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x21f19c[_0x9a77('0x47')]['limit']);_0x26cb00[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x21f19c['query'][_0x9a77('0x29')]);}return _0x3ad2fd[_0x9a77('0xd0')](_0x26cb00);}})['then'](function(_0x297ca5){if(_0x297ca5){return _0x297ca5?{'count':_0x18705a,'rows':_0x297ca5}:null;}})['then'](respondWithResult(_0x1be205,null))[_0x9a77('0x5e')](handleError(_0x1be205,null));};exports[_0x9a77('0xd2')]=function(_0x140a7e,_0x147d11,_0x595078){var _0x549960={'raw':!![],'where':{}};var _0x48b494={};var _0xa79302={'count':0x0,'rows':[]};return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x140a7e['params']['id']}})['then'](handleEntityNotFound(_0x147d11,null))[_0x9a77('0x1d')](function(_0xd18b95){if(_0xd18b95){_0x48b494[_0x9a77('0x42')]=_[_0x9a77('0x43')](db[_0x9a77('0xd3')]['rawAttributes']);_0x48b494['query']=_[_0x9a77('0x43')](_0x140a7e['query']);_0x48b494['filters']=_[_0x9a77('0x46')](_0x48b494[_0x9a77('0x42')],_0x48b494['query']);_0x549960[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x48b494['model'],qs['fields'](_0x140a7e['query'][_0x9a77('0x48')]));_0x549960[_0x9a77('0x49')]=_0x549960[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x549960['attributes']:_0x48b494['model'];if(!_0x140a7e[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x549960[_0x9a77('0x2a')]=qs['limit'](_0x140a7e[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x549960[_0x9a77('0x29')]=qs['offset'](_0x140a7e[_0x9a77('0x47')][_0x9a77('0x29')]);}_0x549960['order']=qs[_0x9a77('0x4e')](_0x140a7e[_0x9a77('0x47')]['sort']);_0x549960[_0x9a77('0x4f')]=qs['filters'](_[_0x9a77('0x51')](_0x140a7e['query'],_0x48b494[_0x9a77('0x50')]));_0x549960['where'][_0x9a77('0xcd')]=_0xd18b95['id'];if(_0x140a7e['query'][_0x9a77('0x35')]){_0x549960[_0x9a77('0x4f')]=_['merge'](_0x549960[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x549960[_0x9a77('0x49')],function(_0x1cbf86){var _0x502965={};_0x502965[_0x1cbf86]={'$like':'%'+_0x140a7e[_0x9a77('0x47')]['filter']+'%'};return _0x502965;})});}_0x549960=_['merge']({},_0x549960,_0x140a7e[_0x9a77('0x59')]);return db[_0x9a77('0xd3')][_0x9a77('0x28')]({'where':_0x549960[_0x9a77('0x4f')]})[_0x9a77('0x1d')](function(_0x137e91){_0xa79302[_0x9a77('0x28')]=_0x137e91;if(_0x140a7e[_0x9a77('0x47')][_0x9a77('0x5a')]){_0x549960[_0x9a77('0x5b')]=[{'all':!![]}];}return db[_0x9a77('0xd3')][_0x9a77('0x5c')](_0x549960);})['then'](function(_0x13f3e6){_0xa79302[_0x9a77('0x5d')]=_0x13f3e6;return _0xa79302;});}})[_0x9a77('0x1d')](respondWithFilteredResult(_0x147d11,_0x549960))[_0x9a77('0x5e')](handleError(_0x147d11,null));};exports[_0x9a77('0xd4')]=function(_0x482a18,_0x4bcf0a,_0x4bfb40){var _0x259b87={};var _0x508f3a={};var _0x9b4ded;var _0x422a0b;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x482a18[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x4bcf0a,null))[_0x9a77('0x1d')](function(_0x16ac17){if(_0x16ac17){_0x9b4ded=_0x16ac17;_0x508f3a[_0x9a77('0x42')]=_['keys'](db['SmsInteraction'][_0x9a77('0xbb')]);_0x508f3a['query']=_[_0x9a77('0x43')](_0x482a18[_0x9a77('0x47')]);_0x508f3a[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x508f3a[_0x9a77('0x42')],_0x508f3a[_0x9a77('0x47')]);_0x259b87['attributes']=_['intersection'](_0x508f3a[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x482a18[_0x9a77('0x47')][_0x9a77('0x48')]));_0x259b87[_0x9a77('0x49')]=_0x259b87[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x259b87[_0x9a77('0x49')]:_0x508f3a[_0x9a77('0x42')];_0x259b87[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x482a18[_0x9a77('0x47')][_0x9a77('0x4e')]);_0x259b87[_0x9a77('0x4f')]=qs['filters'](_[_0x9a77('0x51')](_0x482a18[_0x9a77('0x47')],_0x508f3a[_0x9a77('0x50')]));if(_0x482a18[_0x9a77('0x47')][_0x9a77('0x35')]){_0x259b87[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x259b87[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x259b87['attributes'],function(_0x5e2748){var _0x21f6b7={};_0x21f6b7[_0x5e2748]={'$like':'%'+_0x482a18['query'][_0x9a77('0x35')]+'%'};return _0x21f6b7;})});}_0x259b87=_[_0x9a77('0x52')]({},_0x259b87,_0x482a18[_0x9a77('0x59')]);return _0x9b4ded[_0x9a77('0xd4')](_0x259b87);}})['then'](function(_0x3308b8){if(_0x3308b8){_0x422a0b=_0x3308b8['length'];if(!_0x482a18[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x259b87[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x482a18[_0x9a77('0x47')]['limit']);_0x259b87[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x482a18[_0x9a77('0x47')][_0x9a77('0x29')]);}return _0x9b4ded['getSmsInteractions'](_0x259b87);}})[_0x9a77('0x1d')](function(_0x2f291b){if(_0x2f291b){return _0x2f291b?{'count':_0x422a0b,'rows':_0x2f291b}:null;}})[_0x9a77('0x1d')](respondWithResult(_0x4bcf0a,null))[_0x9a77('0x5e')](handleError(_0x4bcf0a,null));};exports[_0x9a77('0xd5')]=function(_0x1556aa,_0x57b98b,_0x169438){var _0x2b7fdc={};var _0x41b252={};var _0x248110;var _0x2e4a4b;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x1556aa['params']['id']}})['then'](handleEntityNotFound(_0x57b98b,null))[_0x9a77('0x1d')](function(_0x492057){if(_0x492057){_0x248110=_0x492057;_0x41b252['model']=_['keys'](db[_0x9a77('0xd6')][_0x9a77('0xbb')]);_0x41b252[_0x9a77('0x47')]=_[_0x9a77('0x43')](_0x1556aa[_0x9a77('0x47')]);_0x41b252[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x41b252[_0x9a77('0x42')],_0x41b252['query']);_0x2b7fdc[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x41b252[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x1556aa[_0x9a77('0x47')]['fields']));_0x2b7fdc[_0x9a77('0x49')]=_0x2b7fdc[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x2b7fdc[_0x9a77('0x49')]:_0x41b252[_0x9a77('0x42')];_0x2b7fdc[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x1556aa['query']['sort']);_0x2b7fdc[_0x9a77('0x4f')]=qs['filters'](_[_0x9a77('0x51')](_0x1556aa[_0x9a77('0x47')],_0x41b252[_0x9a77('0x50')]));if(_0x1556aa[_0x9a77('0x47')][_0x9a77('0x35')]){_0x2b7fdc[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x2b7fdc[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x2b7fdc[_0x9a77('0x49')],function(_0x16cdc3){var _0x315b47={};_0x315b47[_0x16cdc3]={'$like':'%'+_0x1556aa[_0x9a77('0x47')]['filter']+'%'};return _0x315b47;})});}_0x2b7fdc=_[_0x9a77('0x52')]({},_0x2b7fdc,_0x1556aa[_0x9a77('0x59')]);return _0x248110[_0x9a77('0xd5')](_0x2b7fdc);}})[_0x9a77('0x1d')](function(_0xaee394){if(_0xaee394){_0x2e4a4b=_0xaee394[_0x9a77('0x4a')];if(!_0x1556aa[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x2b7fdc[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x1556aa[_0x9a77('0x47')]['limit']);_0x2b7fdc[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x1556aa['query'][_0x9a77('0x29')]);}return _0x248110['getFaxInteractions'](_0x2b7fdc);}})[_0x9a77('0x1d')](function(_0x5e95eb){if(_0x5e95eb){return _0x5e95eb?{'count':_0x2e4a4b,'rows':_0x5e95eb}:null;}})[_0x9a77('0x1d')](respondWithResult(_0x57b98b,null))[_0x9a77('0x5e')](handleError(_0x57b98b,null));};exports[_0x9a77('0xd7')]=function(_0x4f1201,_0x53bfac,_0x1ed4be){var _0x2a05a2;var _0x2ec062;var _0x4a5870;var _0x3c17f6=!_['isNil'](_0x4f1201['params']['id'])?_0x4f1201[_0x9a77('0x64')]['id']:!_[_0x9a77('0x76')](_0x4f1201[_0x9a77('0x6a')]['id'])?_0x4f1201[_0x9a77('0x6a')]['id']:null;return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x3c17f6,'role':_0x9a77('0x32')},'attributes':['id','name','phone',_0x9a77('0xd8'),_0x9a77('0x63'),'internal','loginInPause']})['then'](handleEntityNotFound(_0x53bfac,null))['then'](function(_0x15ba1f){if(_0x15ba1f){_0x2a05a2=_0x15ba1f;if(_0x4f1201[_0x9a77('0x62')][_0x9a77('0x9a')]){_0x4a5870=util[_0x9a77('0xa3')](_0x9a77('0xd9'),_0x2a05a2[_0x4f1201[_0x9a77('0x62')][_0x9a77('0x9a')]]);}else if(_0x4f1201[_0x9a77('0x62')][_0x9a77('0xda')]){_0x4a5870=util[_0x9a77('0xa3')]('SIP/%s',_0x4f1201[_0x9a77('0x62')][_0x9a77('0xda')]);}else{_0x4a5870=util['format'](_0x9a77('0xa4'),_0x2a05a2[_0x9a77('0x3b')]);}socket['to'](util[_0x9a77('0xa3')]('user:%s',_0x2a05a2['name']))[_0x9a77('0xa0')](_0x9a77('0xdb'),{'ip':_0x4f1201[_0x9a77('0xdc')]['x-forwarded-for']||_0x4f1201[_0x9a77('0xdd')]['remoteAddress']||_0x4f1201[_0x9a77('0xde')]['remoteAddress']||_0x4f1201[_0x9a77('0xdd')][_0x9a77('0xde')]['remoteAddress']});return db[_0x9a77('0xa7')][_0x9a77('0x2f')]({'where':{'membername':_0x2a05a2[_0x9a77('0x3b')]},'individualHooks':!![]});}})['then'](function(_0x189f37){if(_0x2a05a2){return _0x2a05a2['getVoiceQueues']({'raw':!![]});}})['then'](function(_0x3473d9){var _0x3f5d08=[];if(_0x3473d9){_0x2ec062=_0x3473d9;if(_0x2ec062['length']){for(var _0x22bee0=0x0;_0x22bee0<_0x2ec062[_0x9a77('0x4a')];_0x22bee0++){_0x3f5d08[_0x9a77('0xa2')]({'membername':_0x2a05a2[_0x9a77('0x3b')],'UserId':_0x2a05a2['id'],'queue_name':_0x2ec062[_0x22bee0]['name'],'VoiceQueueId':_0x2ec062[_0x22bee0]['id'],'interface':_0x4a5870,'paused':_0x2a05a2[_0x9a77('0x98')]||![],'penalty':_0x2ec062[_0x22bee0]['UserVoiceQueue.penalty']||0x0});}return BPromise[_0x9a77('0xa6')](_0x3f5d08,function(_0x15523d){return db[_0x9a77('0xa7')][_0x9a77('0xa8')](_0x15523d);});}}})['then'](function(){return db[_0x9a77('0xdf')][_0x9a77('0x5c')]({'where':{'membername':_0x2a05a2['name'],'exitAt':null}});})['then'](function(_0x5827ca){var _0x356b34=[];_0x5827ca[_0x9a77('0xe0')](function(_0x4bb177){_0x356b34['push'](_0x4bb177[_0x9a77('0x2e')]({'exitAt':moment()[_0x9a77('0xa3')](_0x9a77('0xe1'))}));});return BPromise[_0x9a77('0xe2')](_0x356b34);})[_0x9a77('0x1d')](function(){var _0x155fac=[];var _0x5b7671=[];var _0x2d007d=utils['getChannels']();var _0x5789be={'membername':_0x2a05a2[_0x9a77('0x3b')],'interface':_0x4a5870,'enterAt':moment()[_0x9a77('0xa3')](_0x9a77('0xe1')),'role':_0x2a05a2[_0x9a77('0x63')],'internal':_0x2a05a2[_0x9a77('0x75')]};_0x2d007d[_0x9a77('0xe0')](function(_0x237333){_0x155fac[_0x9a77('0xa2')](_['merge']({'channel':_0x237333,'type':_0x9a77('0xe3'),'data1':_0x4f1201['body']['device'],'data2':_0x4a5870},_0x5789be));if(_0x2a05a2['loginInPause']){_0x5b7671[_0x9a77('0xa2')](_[_0x9a77('0x52')]({'channel':_0x237333,'type':'PAUSE','data1':_0x9a77('0xe4')},_0x5789be));}});return db[_0x9a77('0xdf')][_0x9a77('0x61')](_0x155fac['concat'](_0x5b7671),{'individualHooks':!![]});})[_0x9a77('0x1d')](function(){return _0x2a05a2[_0x9a77('0x2e')]({'online':!![],'lastLoginAt':moment()[_0x9a77('0xa3')]('YYYY-MM-DD\x20HH:mm:ss'),'voicePause':_0x2a05a2[_0x9a77('0x98')]||![],'mailPause':_0x2a05a2['loginInPause']||![],'chatPause':_0x2a05a2[_0x9a77('0x98')]||![],'faxPause':_0x2a05a2['loginInPause']||![],'smsPause':_0x2a05a2[_0x9a77('0x98')]||![],'openchannelPause':_0x2a05a2['loginInPause']||![],'pauseType':_0x2a05a2[_0x9a77('0x98')]?'LOGININPAUSE':null,'interface':_0x4a5870,'lastPauseAt':moment()[_0x9a77('0xa3')](_0x9a77('0xe1'))});})[_0x9a77('0x1d')](function(_0x5a0dd9){if(_0x4f1201[_0x9a77('0xe5')]){return _0x1ed4be();}else{return BPromise['resolve'](_0x5a0dd9)[_0x9a77('0x1d')](respondWithResult(_0x53bfac,null));}})[_0x9a77('0x5e')](handleError(_0x53bfac,null));};exports[_0x9a77('0xe6')]=function(_0x11c4fc,_0x9dceee,_0x530303){var _0xaaebfb;return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x11c4fc['params']['id'],'role':_0x9a77('0x32')},'attributes':['id',_0x9a77('0x3b'),'role']})[_0x9a77('0x1d')](handleEntityNotFound(_0x9dceee,null))['then'](function(_0x495e29){if(_0x495e29){_0xaaebfb=_0x495e29;return db[_0x9a77('0xa7')][_0x9a77('0x2f')]({'where':{'membername':_0xaaebfb['name']},'individualHooks':!![]});}})[_0x9a77('0x1d')](function(){return db[_0x9a77('0xdf')][_0x9a77('0x5c')]({'where':{'membername':_0xaaebfb[_0x9a77('0x3b')],'exitAt':null}});})[_0x9a77('0x1d')](function(_0x509fc0){var _0xbb2720=[];_0x509fc0[_0x9a77('0xe0')](function(_0x11212f){_0xbb2720[_0x9a77('0xa2')](_0x11212f[_0x9a77('0x2e')]({'exitAt':moment()[_0x9a77('0xa3')](_0x9a77('0xe1'))}));});return BPromise[_0x9a77('0xe2')](_0xbb2720);})['then'](function(){return _0xaaebfb[_0x9a77('0x2e')]({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![],'interface':null});})[_0x9a77('0x1d')](respondWithResult(_0x9dceee,null))[_0x9a77('0x5e')](handleError(_0x9dceee,null));};exports[_0x9a77('0xe7')]=function(_0x4f4b3c,_0xbcbcfd,_0x1d8181){var _0xb5c601;return db['UserVoiceQueueRt']['update']({'paused':0x1},{'where':{'UserId':_0x4f4b3c[_0x9a77('0x64')]['id']},'individualHooks':!![]})[_0x9a77('0x1d')](function(){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x4f4b3c[_0x9a77('0x64')]['id'],'role':_0x9a77('0x32')},'attributes':['id',_0x9a77('0x3b'),_0x9a77('0x63'),'internal','interface']});})[_0x9a77('0x1d')](handleEntityNotFound(_0xbcbcfd,null))['then'](function(_0x619322){if(_0x619322){_0xb5c601=_0x619322;return respondWithRpcPromise(_0x9a77('0xe8'),_0x9a77('0xe7'),{'id':_0xb5c601['id'],'name':_0xb5c601[_0x9a77('0x3b')],'pause':!![]});}})[_0x9a77('0x1d')](function(){if(_0xb5c601){return db[_0x9a77('0xdf')][_0x9a77('0x5c')]({'where':{'membername':_0xb5c601[_0x9a77('0x3b')],'type':_0x9a77('0xe9'),'exitAt':null}});}})[_0x9a77('0x1d')](function(_0x31247c){if(_0x31247c[_0x9a77('0x4a')]){var _0x4f93ec=moment()['format'](_0x9a77('0xe1'));for(var _0x524a0c=0x0,_0x504585=_0x31247c[_0x9a77('0x4a')];_0x524a0c<_0x504585;_0x524a0c++){_0x31247c[_0x524a0c][_0x9a77('0xea')]({'exitAt':_0x4f93ec});}}})[_0x9a77('0x1d')](function(){var _0x4fee1d=[];var _0x5c2aea=utils[_0x9a77('0xeb')]();_0x5c2aea[_0x9a77('0xe0')](function(_0xfca498){_0x4fee1d[_0x9a77('0xa2')]({'channel':_0xfca498,'membername':_0xb5c601['name'],'interface':_['isNil'](_0xb5c601['interface'])?util[_0x9a77('0xa3')](_0x9a77('0xa4'),_0xb5c601['name']):_0xb5c601[_0x9a77('0x9a')],'type':_0x9a77('0xe9'),'enterAt':moment()[_0x9a77('0xa3')](_0x9a77('0xe1')),'data1':_0x4f4b3c[_0x9a77('0x62')][_0x9a77('0x53')]||_0x9a77('0xec'),'role':_0xb5c601[_0x9a77('0x63')],'internal':_0xb5c601[_0x9a77('0x75')]});});return db[_0x9a77('0xdf')][_0x9a77('0x61')](_0x4fee1d,{'individualHooks':!![]});})[_0x9a77('0x1d')](function(){return _0xb5c601[_0x9a77('0x2e')]({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x4f4b3c[_0x9a77('0x62')][_0x9a77('0x53')]||_0x9a77('0xec'),'lastPauseAt':moment()[_0x9a77('0xa3')](_0x9a77('0xe1'))});})[_0x9a77('0x1d')](respondWithResult(_0xbcbcfd,null))[_0x9a77('0x5e')](handleError(_0xbcbcfd,null));};exports[_0x9a77('0xed')]=function(_0xcdc29b,_0x1ab9e9,_0x592a1a){var _0x567eae;return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0xcdc29b['params']['id']},'attributes':['id',_0x9a77('0x3b'),_0x9a77('0x63'),_0x9a77('0x99'),_0x9a77('0xee'),_0x9a77('0xef'),'faxPause',_0x9a77('0xf0'),_0x9a77('0xf1'),_0x9a77('0xf2'),_0x9a77('0xf3')]})[_0x9a77('0x1d')](handleEntityNotFound(_0x1ab9e9,null))[_0x9a77('0x1d')](function(_0x5b2e63){if(_0x5b2e63){_0x567eae=_0x5b2e63;if(_0xcdc29b['body'][_0x9a77('0x96')]&&!utils[_0x9a77('0x9b')](_0xcdc29b[_0x9a77('0x62')]['channel'])){throw new db[(_0x9a77('0x8c'))][(_0x9a77('0x8d'))]('Unknown\x20channel');}switch(_0xcdc29b['body'][_0x9a77('0x96')]){case _0x9a77('0xa1'):return respondWithRpcPromise('QueuePause','unpause',{'id':_0x567eae['id'],'name':_0x567eae[_0x9a77('0x3b')],'pause':![]})[_0x9a77('0x1d')](function(){return db[_0x9a77('0xa7')][_0x9a77('0x2e')]({'paused':0x0},{'where':{'UserId':_0x567eae['id']},'individualHooks':!![]});})[_0x9a77('0x1d')](function(){return db[_0x9a77('0xdf')]['find']({'where':{'channel':_0xcdc29b[_0x9a77('0x62')][_0x9a77('0x96')],'membername':_0x567eae[_0x9a77('0x3b')],'type':'PAUSE','exitAt':null}});})[_0x9a77('0x1d')](function(_0x270867){if(_0x270867){return _0x270867['update']({'exitAt':moment()[_0x9a77('0xa3')](_0x9a77('0xe1')),'data2':_0x9a77('0xf4')},{'individualHooks':!![]});}return null;})['then'](function(){return _0x567eae[_0x9a77('0x2e')]({'voicePause':![]});});case _0x9a77('0xf5'):case _0x9a77('0xf6'):case _0x9a77('0xf7'):case _0x9a77('0xf8'):case _0x9a77('0xf9'):return db[_0x9a77('0xdf')][_0x9a77('0x3a')]({'where':{'channel':_0xcdc29b[_0x9a77('0x62')]['channel'],'membername':_0x567eae[_0x9a77('0x3b')],'type':_0x9a77('0xe9'),'exitAt':null}})[_0x9a77('0x1d')](function(_0x53df57){if(_0x53df57){return _0x53df57['update']({'exitAt':moment()[_0x9a77('0xa3')](_0x9a77('0xe1')),'data2':'manual'},{'individualHooks':!![]});}return null;})[_0x9a77('0x1d')](function(){var _0xd4025d={};_['set'](_0xd4025d,util[_0x9a77('0xa3')](_0x9a77('0xfa'),_0xcdc29b[_0x9a77('0x62')][_0x9a77('0x96')],_0x9a77('0xfb')),![]);return _0x567eae[_0x9a77('0x2e')](_0xd4025d);});default:return respondWithRpcPromise(_0x9a77('0xe8'),_0x9a77('0xed'),{'id':_0x567eae['id'],'name':_0x567eae['name'],'pause':![]})[_0x9a77('0x1d')](function(){return db[_0x9a77('0xa7')]['update']({'paused':0x0},{'where':{'UserId':_0x567eae['id']}});})['then'](function(){return db[_0x9a77('0xdf')]['findAll']({'where':{'membername':_0x567eae[_0x9a77('0x3b')],'type':'PAUSE','exitAt':null}});})[_0x9a77('0x1d')](function(_0x56711d){var _0x4ee149=[];_0x56711d[_0x9a77('0xe0')](function(_0x562cf2){_0x4ee149[_0x9a77('0xa2')](_0x562cf2[_0x9a77('0x2e')]({'exitAt':moment()[_0x9a77('0xa3')](_0x9a77('0xe1')),'data2':_0x9a77('0xf4')}));});return BPromise[_0x9a77('0xe2')](_0x4ee149);})[_0x9a77('0x1d')](function(){return _0x567eae[_0x9a77('0x2e')]({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})['then'](respondWithResult(_0x1ab9e9,null))[_0x9a77('0x5e')](handleError(_0x1ab9e9,null));};exports[_0x9a77('0xfc')]=function(_0x531e1c,_0x1de4bf,_0x356c31){var _0x38b1d6={};var _0x337c29={};var _0x4ba665;var _0x5838f7;return db[_0x9a77('0x41')]['findOne']({'where':{'id':_0x531e1c[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x1de4bf,null))['then'](function(_0x11a79f){if(_0x11a79f){_0x4ba665=_0x11a79f;_0x337c29[_0x9a77('0x42')]=_['keys'](db[_0x9a77('0xfd')][_0x9a77('0xbb')]);_0x337c29[_0x9a77('0x47')]=_[_0x9a77('0x43')](_0x531e1c[_0x9a77('0x47')]);_0x337c29[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x337c29['model'],_0x337c29['query']);_0x38b1d6['attributes']=_[_0x9a77('0x46')](_0x337c29['model'],qs[_0x9a77('0x48')](_0x531e1c[_0x9a77('0x47')][_0x9a77('0x48')]));_0x38b1d6[_0x9a77('0x49')]=_0x38b1d6['attributes'][_0x9a77('0x4a')]?_0x38b1d6['attributes']:_0x337c29[_0x9a77('0x42')];_0x38b1d6['order']=qs[_0x9a77('0x4e')](_0x531e1c['query'][_0x9a77('0x4e')]);_0x38b1d6[_0x9a77('0x4f')]=qs['filters'](_['pick'](_0x531e1c['query'],_0x337c29[_0x9a77('0x50')]));if(_0x531e1c[_0x9a77('0x47')][_0x9a77('0x35')]){_0x38b1d6[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x38b1d6[_0x9a77('0x4f')],{'$or':_['map'](_0x38b1d6[_0x9a77('0x49')],function(_0x1b60fa){var _0x52b43c={};_0x52b43c[_0x1b60fa]={'$like':'%'+_0x531e1c[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0x52b43c;})});}_0x38b1d6=_['merge']({},_0x38b1d6,_0x531e1c[_0x9a77('0x59')]);return _0x4ba665['getTeams'](_0x38b1d6);}})['then'](function(_0x233721){if(_0x233721){_0x5838f7=_0x233721[_0x9a77('0x4a')];if(!_0x531e1c[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x38b1d6[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x531e1c[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x38b1d6[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x531e1c[_0x9a77('0x47')][_0x9a77('0x29')]);}return _0x4ba665['getTeams'](_0x38b1d6);}})[_0x9a77('0x1d')](function(_0x5c76eb){if(_0x5c76eb){return _0x5c76eb?{'count':_0x5838f7,'rows':_0x5c76eb}:null;}})['then'](respondWithResult(_0x1de4bf,null))[_0x9a77('0x5e')](handleError(_0x1de4bf,null));};exports[_0x9a77('0xfe')]=function(_0x2f664b,_0x2cdefb,_0x3caba4){return db[_0x9a77('0x41')]['find']({'where':{'id':_0x2f664b['params']['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x2cdefb,null))[_0x9a77('0x1d')](function(_0x3da7b9){if(_0x3da7b9){return _0x3da7b9['addTeams'](_0x2f664b[_0x9a77('0x62')]['ids'],_[_0x9a77('0x68')](_0x2f664b[_0x9a77('0x62')],[_0x9a77('0x67'),'id'])||{});}})[_0x9a77('0x1d')](respondWithResult(_0x2cdefb,null))[_0x9a77('0x5e')](handleError(_0x2cdefb,null));};exports[_0x9a77('0xff')]=function(_0xbd6e75,_0x1cad8c,_0x2081e8){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0xbd6e75['params']['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x1cad8c,null))[_0x9a77('0x1d')](function(_0x59c394){if(_0x59c394){return _0x59c394[_0x9a77('0xff')](_0xbd6e75[_0x9a77('0x47')][_0x9a77('0x67')]);}})[_0x9a77('0x1d')](respondWithStatusCode(_0x1cad8c,null))['catch'](handleError(_0x1cad8c,null));};exports[_0x9a77('0x100')]=function(_0x2664b1,_0x7a63bf,_0x3f36e8){var _0x39a087={};var _0x2eb90d={};var _0x4961c5;var _0x394aa0;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x2664b1['params']['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x7a63bf,null))['then'](function(_0x35c7dc){if(_0x35c7dc){_0x4961c5=_0x35c7dc;_0x2eb90d[_0x9a77('0x42')]=_[_0x9a77('0x43')](db[_0x9a77('0xbc')][_0x9a77('0xbb')]);_0x2eb90d[_0x9a77('0x47')]=_[_0x9a77('0x43')](_0x2664b1[_0x9a77('0x47')]);_0x2eb90d[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x2eb90d[_0x9a77('0x42')],_0x2eb90d['query']);_0x39a087[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x2eb90d['model'],qs[_0x9a77('0x48')](_0x2664b1[_0x9a77('0x47')]['fields']));_0x39a087[_0x9a77('0x49')]=_0x39a087[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x39a087[_0x9a77('0x49')]:_0x2eb90d[_0x9a77('0x42')];_0x39a087[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x2664b1[_0x9a77('0x47')]['sort']);_0x39a087[_0x9a77('0x4f')]=qs['filters'](_[_0x9a77('0x51')](_0x2664b1[_0x9a77('0x47')],_0x2eb90d[_0x9a77('0x50')]));if(_0x2664b1[_0x9a77('0x47')]['filter']){_0x39a087[_0x9a77('0x4f')]=_['merge'](_0x39a087['where'],{'$or':_[_0x9a77('0x37')](_0x39a087[_0x9a77('0x49')],function(_0x5f449c){var _0x4d2e7f={};_0x4d2e7f[_0x5f449c]={'$like':'%'+_0x2664b1[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0x4d2e7f;})});}_0x39a087=_[_0x9a77('0x52')]({},_0x39a087,_0x2664b1[_0x9a77('0x59')]);return _0x4961c5[_0x9a77('0x100')](_0x39a087);}})[_0x9a77('0x1d')](function(_0x275d7a){if(_0x275d7a){_0x394aa0=_0x275d7a[_0x9a77('0x4a')];if(!_0x2664b1[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x39a087[_0x9a77('0x2a')]=qs['limit'](_0x2664b1[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x39a087[_0x9a77('0x29')]=qs['offset'](_0x2664b1[_0x9a77('0x47')]['offset']);}return _0x4961c5[_0x9a77('0x100')](_0x39a087);}})['then'](function(_0x4ed1f1){if(_0x4ed1f1){return _0x4ed1f1?{'count':_0x394aa0,'rows':_0x4ed1f1}:null;}})[_0x9a77('0x1d')](respondWithResult(_0x7a63bf,null))[_0x9a77('0x5e')](handleError(_0x7a63bf,null));};exports[_0x9a77('0x101')]=function(_0x53399c,_0xd89a3d,_0x1cc4f9){var _0x1304f8={};var _0x2f2ed8={};var _0x2c1829;var _0x4e3969;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x53399c['params']['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0xd89a3d,null))[_0x9a77('0x1d')](function(_0x19b086){if(_0x19b086){_0x2c1829=_0x19b086;_0x2f2ed8[_0x9a77('0x42')]=_[_0x9a77('0x43')](db['User'][_0x9a77('0xbb')]);_0x2f2ed8[_0x9a77('0x47')]=_[_0x9a77('0x43')](_0x53399c[_0x9a77('0x47')]);_0x2f2ed8[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x2f2ed8['model'],_0x2f2ed8[_0x9a77('0x47')]);_0x1304f8[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x2f2ed8[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x53399c['query'][_0x9a77('0x48')]));_0x1304f8[_0x9a77('0x49')]=_0x1304f8['attributes'][_0x9a77('0x4a')]?_0x1304f8[_0x9a77('0x49')]:_0x2f2ed8['model'];_0x1304f8['order']=qs[_0x9a77('0x4e')](_0x53399c[_0x9a77('0x47')][_0x9a77('0x4e')]);_0x1304f8['where']=qs[_0x9a77('0x50')](_[_0x9a77('0x51')](_0x53399c['query'],_0x2f2ed8[_0x9a77('0x50')]));if(_0x53399c[_0x9a77('0x47')][_0x9a77('0x35')]){_0x1304f8[_0x9a77('0x4f')]=_['merge'](_0x1304f8['where'],{'$or':_['map'](_0x1304f8[_0x9a77('0x49')],function(_0x5c1e2e){var _0x545ac2={};_0x545ac2[_0x5c1e2e]={'$like':'%'+_0x53399c[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0x545ac2;})});}_0x1304f8[_0x9a77('0x42')]=db['User'];_0x1304f8['as']=_0x9a77('0x31');_0x1304f8=_['merge']({},_0x1304f8,_0x53399c[_0x9a77('0x59')]);return _0x2c1829[_0x9a77('0x102')]({'include':[_0x1304f8]});}})['then'](function(_0x225144){if(_0x225144){var _0x9d2b74={},_0x49117d=[],_0x427443=0x0;for(var _0x125883=0x0;_0x125883<_0x225144['length'];_0x125883+=0x1){for(var _0x2db29a=0x0,_0x52f37c;_0x2db29a<_0x225144[_0x125883][_0x9a77('0x31')][_0x9a77('0x4a')];_0x2db29a+=0x1){_0x52f37c=_0x225144[_0x125883]['Agents'][_0x2db29a]['get']({'plain':!![]});_0x9d2b74[_0x52f37c['id']]=_0x52f37c;}}_0x9d2b74=_[_0x9a77('0x103')](_0x9d2b74);for(var _0xcb529e=qs[_0x9a77('0x29')](_0x53399c[_0x9a77('0x47')][_0x9a77('0x29')]);_0xcb529e<_0x9d2b74[_0x9a77('0x4a')]&&_0x49117d[_0x9a77('0x4a')]<qs[_0x9a77('0x2a')](_0x53399c[_0x9a77('0x47')][_0x9a77('0x2a')]);_0xcb529e+=0x1){if(_0x9d2b74[_0xcb529e]){_0x49117d[_0x9a77('0xa2')](_0x9d2b74[_0xcb529e]);}}return{'count':_0x9d2b74[_0x9a77('0x4a')],'rows':_0x49117d};}})[_0x9a77('0x1d')](respondWithResult(_0xd89a3d,null))[_0x9a77('0x5e')](handleError(_0xd89a3d,null));};exports[_0x9a77('0x2f')]=function(_0x551809,_0x28c278){if(_0x551809[_0x9a77('0x6a')]['id']==_0x551809[_0x9a77('0x64')]['id']){return _0x28c278[_0x9a77('0x26')](0x1f4)['send']({'message':_0x9a77('0x104')});}return db['User'][_0x9a77('0x3a')]({'where':{'id':_0x551809[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x28c278,null))[_0x9a77('0x1d')](removeEntity(_0x28c278,null))[_0x9a77('0x5e')](handleError(_0x28c278,null));};exports[_0x9a77('0x105')]=function(_0x4fce72,_0x1112de,_0x3b8d53){return db['User'][_0x9a77('0x3a')]({'where':{'id':_0x4fce72[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x1112de,null))[_0x9a77('0x1d')](function(_0x13ae94){if(_0x13ae94){return _0x13ae94[_0x9a77('0x105')](_0x4fce72[_0x9a77('0x62')]['ids'],_[_0x9a77('0x68')](_0x4fce72[_0x9a77('0x62')],[_0x9a77('0x67'),'id'])||{})[_0x9a77('0x9e')](function(){for(var _0x2b0b6f=0x0;_0x2b0b6f<_0x4fce72[_0x9a77('0x62')][_0x9a77('0x67')]['length'];_0x2b0b6f+=0x1){socket[_0x9a77('0xa0')](_0x9a77('0x106'),{'ChatInteractionId':Number(_0x4fce72[_0x9a77('0x62')][_0x9a77('0x67')][_0x2b0b6f]),'UserId':Number(_0x4fce72['params']['id'])});}return _0x4fce72['body'][_0x9a77('0x67')];});}})[_0x9a77('0x1d')](respondWithResult(_0x1112de,null))[_0x9a77('0x5e')](handleError(_0x1112de,null));};exports['removeChatInteractions']=function(_0x488a0e,_0x16e2c8,_0x269a58){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x488a0e[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x16e2c8,null))[_0x9a77('0x1d')](function(_0x3ff038){if(_0x3ff038){return _0x3ff038[_0x9a77('0x107')](_0x488a0e[_0x9a77('0x47')]['ids'])['then'](function(){if(_[_0x9a77('0x108')](_0x488a0e[_0x9a77('0x47')]['ids'])){for(var _0x39be53=0x0;_0x39be53<_0x488a0e[_0x9a77('0x47')][_0x9a77('0x67')][_0x9a77('0x4a')];_0x39be53+=0x1){socket[_0x9a77('0xa0')](_0x9a77('0x109'),{'ChatInteractionId':Number(_0x488a0e[_0x9a77('0x47')][_0x9a77('0x67')][_0x39be53]),'UserId':Number(_0x488a0e[_0x9a77('0x64')]['id'])});}}else{socket[_0x9a77('0xa0')](_0x9a77('0x109'),{'ChatInteractionId':Number(_0x488a0e[_0x9a77('0x47')]['ids']),'UserId':Number(_0x488a0e[_0x9a77('0x64')]['id'])});}});}})[_0x9a77('0x1d')](respondWithStatusCode(_0x16e2c8,null))[_0x9a77('0x5e')](handleError(_0x16e2c8,null));};exports[_0x9a77('0x10a')]=function(_0x315d46,_0xffdbf5,_0x49d8ae){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x315d46[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0xffdbf5,null))[_0x9a77('0x1d')](function(_0x436e81){if(_0x436e81){return _0x436e81[_0x9a77('0x10a')](_0x315d46[_0x9a77('0x62')]['ids'],_['omit'](_0x315d46[_0x9a77('0x62')],[_0x9a77('0x67'),'id'])||{})[_0x9a77('0x9e')](function(){for(var _0x186e44=0x0;_0x186e44<_0x315d46[_0x9a77('0x62')][_0x9a77('0x67')]['length'];_0x186e44+=0x1){socket['emit']('user_has_mail_interactions:save',{'MailInteractionId':Number(_0x315d46['body'][_0x9a77('0x67')][_0x186e44]),'UserId':Number(_0x315d46[_0x9a77('0x64')]['id'])});}return _0x315d46[_0x9a77('0x62')][_0x9a77('0x67')];});}})[_0x9a77('0x1d')](respondWithResult(_0xffdbf5,null))[_0x9a77('0x5e')](handleError(_0xffdbf5,null));};exports[_0x9a77('0x10b')]=function(_0x1651b9,_0x548db9,_0x4692f4){return db[_0x9a77('0x41')]['find']({'where':{'id':_0x1651b9[_0x9a77('0x64')]['id']}})['then'](handleEntityNotFound(_0x548db9,null))[_0x9a77('0x1d')](function(_0x527be2){if(_0x527be2){return _0x527be2[_0x9a77('0x10b')](_0x1651b9[_0x9a77('0x47')][_0x9a77('0x67')])['then'](function(){if(_['isArray'](_0x1651b9[_0x9a77('0x47')][_0x9a77('0x67')])){for(var _0x12998b=0x0;_0x12998b<_0x1651b9[_0x9a77('0x47')][_0x9a77('0x67')][_0x9a77('0x4a')];_0x12998b+=0x1){socket[_0x9a77('0xa0')](_0x9a77('0x10c'),{'MailInteractionId':Number(_0x1651b9['query'][_0x9a77('0x67')][_0x12998b]),'UserId':Number(_0x1651b9[_0x9a77('0x64')]['id'])});}}else{socket[_0x9a77('0xa0')](_0x9a77('0x10c'),{'MailInteractionId':Number(_0x1651b9[_0x9a77('0x47')][_0x9a77('0x67')]),'UserId':Number(_0x1651b9['params']['id'])});}});}})[_0x9a77('0x1d')](respondWithStatusCode(_0x548db9,null))[_0x9a77('0x5e')](handleError(_0x548db9,null));};exports[_0x9a77('0x10d')]=function(_0x1be876,_0x2cfec3,_0x463005){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x1be876[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x2cfec3,null))[_0x9a77('0x1d')](function(_0x1cbb74){if(_0x1cbb74){return _0x1cbb74[_0x9a77('0x10d')](_0x1be876[_0x9a77('0x62')][_0x9a77('0x67')],_[_0x9a77('0x68')](_0x1be876['body'],[_0x9a77('0x67'),'id'])||{})[_0x9a77('0x9e')](function(){for(var _0x3c820f=0x0;_0x3c820f<_0x1be876[_0x9a77('0x62')]['ids'][_0x9a77('0x4a')];_0x3c820f+=0x1){socket['emit'](_0x9a77('0x10e'),{'FaxInteractionId':Number(_0x1be876[_0x9a77('0x62')][_0x9a77('0x67')][_0x3c820f]),'UserId':Number(_0x1be876['params']['id'])});}return _0x1be876[_0x9a77('0x62')]['ids'];});}})['then'](respondWithResult(_0x2cfec3,null))['catch'](handleError(_0x2cfec3,null));};exports['removeFaxInteractions']=function(_0xc43c5c,_0x517f0e,_0x1ce70d){return db['User']['find']({'where':{'id':_0xc43c5c[_0x9a77('0x64')]['id']}})['then'](handleEntityNotFound(_0x517f0e,null))[_0x9a77('0x1d')](function(_0x47e2f2){if(_0x47e2f2){return _0x47e2f2['removeFaxInteractions'](_0xc43c5c['query'][_0x9a77('0x67')])['then'](function(){if(_['isArray'](_0xc43c5c['query'][_0x9a77('0x67')])){for(var _0x4ddfe2=0x0;_0x4ddfe2<_0xc43c5c[_0x9a77('0x47')]['ids'][_0x9a77('0x4a')];_0x4ddfe2+=0x1){socket['emit']('user_has_fax_interactions:remove',{'FaxInteractionId':Number(_0xc43c5c[_0x9a77('0x47')]['ids'][_0x4ddfe2]),'UserId':Number(_0xc43c5c[_0x9a77('0x64')]['id'])});}}else{socket[_0x9a77('0xa0')](_0x9a77('0x10f'),{'FaxInteractionId':Number(_0xc43c5c[_0x9a77('0x47')][_0x9a77('0x67')]),'UserId':Number(_0xc43c5c[_0x9a77('0x64')]['id'])});}});}})[_0x9a77('0x1d')](respondWithStatusCode(_0x517f0e,null))[_0x9a77('0x5e')](handleError(_0x517f0e,null));};exports[_0x9a77('0x110')]=function(_0x5943e3,_0x5e5cad,_0x109305){return db[_0x9a77('0x41')]['find']({'where':{'id':_0x5943e3['params']['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x5e5cad,null))[_0x9a77('0x1d')](function(_0x58df15){if(_0x58df15){return _0x58df15[_0x9a77('0x110')](_0x5943e3['body'][_0x9a77('0x67')],_[_0x9a77('0x68')](_0x5943e3[_0x9a77('0x62')],['ids','id'])||{})[_0x9a77('0x9e')](function(){for(var _0x1ce2fe=0x0;_0x1ce2fe<_0x5943e3[_0x9a77('0x62')][_0x9a77('0x67')][_0x9a77('0x4a')];_0x1ce2fe+=0x1){socket['emit'](_0x9a77('0x111'),{'SmsInteractionId':Number(_0x5943e3[_0x9a77('0x62')][_0x9a77('0x67')][_0x1ce2fe]),'UserId':Number(_0x5943e3['params']['id'])});}return _0x5943e3[_0x9a77('0x62')][_0x9a77('0x67')];});}})[_0x9a77('0x1d')](respondWithResult(_0x5e5cad,null))['catch'](handleError(_0x5e5cad,null));};exports[_0x9a77('0x112')]=function(_0x2bf2ab,_0x388bb7,_0x1573c1){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x2bf2ab[_0x9a77('0x64')]['id']}})['then'](handleEntityNotFound(_0x388bb7,null))['then'](function(_0x4fd096){if(_0x4fd096){return _0x4fd096[_0x9a77('0x112')](_0x2bf2ab['query']['ids'])[_0x9a77('0x1d')](function(){if(_[_0x9a77('0x108')](_0x2bf2ab[_0x9a77('0x47')][_0x9a77('0x67')])){for(var _0x11b2f4=0x0;_0x11b2f4<_0x2bf2ab[_0x9a77('0x47')][_0x9a77('0x67')][_0x9a77('0x4a')];_0x11b2f4+=0x1){socket['emit'](_0x9a77('0x113'),{'SmsInteractionId':Number(_0x2bf2ab['query'][_0x9a77('0x67')][_0x11b2f4]),'UserId':Number(_0x2bf2ab[_0x9a77('0x64')]['id'])});}}else{socket[_0x9a77('0xa0')](_0x9a77('0x113'),{'SmsInteractionId':Number(_0x2bf2ab[_0x9a77('0x47')]['ids']),'UserId':Number(_0x2bf2ab[_0x9a77('0x64')]['id'])});}});}})[_0x9a77('0x1d')](respondWithStatusCode(_0x388bb7,null))[_0x9a77('0x5e')](handleError(_0x388bb7,null));};exports['addOpenchannelInteractions']=function(_0x5af40e,_0x5caded,_0x4bca02){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x5af40e['params']['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x5caded,null))[_0x9a77('0x1d')](function(_0x593bd6){if(_0x593bd6){return _0x593bd6[_0x9a77('0x114')](_0x5af40e['body'][_0x9a77('0x67')],_[_0x9a77('0x68')](_0x5af40e[_0x9a77('0x62')],[_0x9a77('0x67'),'id'])||{})[_0x9a77('0x9e')](function(){for(var _0x3deac3=0x0;_0x3deac3<_0x5af40e[_0x9a77('0x62')][_0x9a77('0x67')]['length'];_0x3deac3+=0x1){socket[_0x9a77('0xa0')](_0x9a77('0x115'),{'OpenchannelInteractionId':Number(_0x5af40e[_0x9a77('0x62')][_0x9a77('0x67')][_0x3deac3]),'UserId':Number(_0x5af40e[_0x9a77('0x64')]['id'])});}return _0x5af40e[_0x9a77('0x62')][_0x9a77('0x67')];});}})[_0x9a77('0x1d')](respondWithResult(_0x5caded,null))[_0x9a77('0x5e')](handleError(_0x5caded,null));};exports[_0x9a77('0x116')]=function(_0x3f1875,_0x586531,_0x2c99f8){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x3f1875[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x586531,null))[_0x9a77('0x1d')](function(_0x369f77){if(_0x369f77){return _0x369f77[_0x9a77('0x116')](_0x3f1875[_0x9a77('0x47')][_0x9a77('0x67')])['then'](function(){if(_[_0x9a77('0x108')](_0x3f1875[_0x9a77('0x47')][_0x9a77('0x67')])){for(var _0x17e5c5=0x0;_0x17e5c5<_0x3f1875['query']['ids'][_0x9a77('0x4a')];_0x17e5c5+=0x1){socket['emit'](_0x9a77('0x117'),{'OpenchannelInteractionId':Number(_0x3f1875[_0x9a77('0x47')]['ids'][_0x17e5c5]),'UserId':Number(_0x3f1875[_0x9a77('0x64')]['id'])});}}else{socket[_0x9a77('0xa0')](_0x9a77('0x117'),{'OpenchannelInteractionId':Number(_0x3f1875[_0x9a77('0x47')][_0x9a77('0x67')]),'UserId':Number(_0x3f1875['params']['id'])});}});}})[_0x9a77('0x1d')](respondWithStatusCode(_0x586531,null))[_0x9a77('0x5e')](handleError(_0x586531,null));};exports[_0x9a77('0x118')]=function(_0x4f540d,_0x26f3b5,_0x5812b4){var _0x3db9f4={};var _0x7a65a7={};var _0x4aa934;var _0x5d4a8b;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x4f540d[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x26f3b5,null))[_0x9a77('0x1d')](function(_0x48a379){if(_0x48a379){_0x4aa934=_0x48a379;_0x7a65a7[_0x9a77('0x42')]=_[_0x9a77('0x43')](db['VoicePrefix'][_0x9a77('0xbb')]);_0x7a65a7[_0x9a77('0x47')]=_[_0x9a77('0x43')](_0x4f540d[_0x9a77('0x47')]);_0x7a65a7[_0x9a77('0x50')]=_['intersection'](_0x7a65a7[_0x9a77('0x42')],_0x7a65a7['query']);_0x3db9f4[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x7a65a7[_0x9a77('0x42')],qs['fields'](_0x4f540d[_0x9a77('0x47')][_0x9a77('0x48')]));_0x3db9f4[_0x9a77('0x49')]=_0x3db9f4[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x3db9f4[_0x9a77('0x49')]:_0x7a65a7[_0x9a77('0x42')];_0x3db9f4['order']=qs[_0x9a77('0x4e')](_0x4f540d[_0x9a77('0x47')][_0x9a77('0x4e')]);_0x3db9f4[_0x9a77('0x4f')]=qs[_0x9a77('0x50')](_[_0x9a77('0x51')](_0x4f540d[_0x9a77('0x47')],_0x7a65a7[_0x9a77('0x50')]));if(_0x4f540d[_0x9a77('0x47')][_0x9a77('0x35')]){_0x3db9f4[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x3db9f4['where'],{'$or':_[_0x9a77('0x37')](_0x3db9f4[_0x9a77('0x49')],function(_0x5e0dc9){var _0x58167b={};_0x58167b[_0x5e0dc9]={'$like':'%'+_0x4f540d['query'][_0x9a77('0x35')]+'%'};return _0x58167b;})});}_0x3db9f4=_[_0x9a77('0x52')]({},_0x3db9f4,_0x4f540d['options']);return _0x4aa934[_0x9a77('0x118')](_0x3db9f4);}})[_0x9a77('0x1d')](function(_0x57be22){if(_0x57be22){_0x5d4a8b=_0x57be22[_0x9a77('0x4a')];if(!_0x4f540d[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x3db9f4['limit']=qs['limit'](_0x4f540d[_0x9a77('0x47')]['limit']);_0x3db9f4[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x4f540d[_0x9a77('0x47')][_0x9a77('0x29')]);}return _0x4aa934[_0x9a77('0x118')](_0x3db9f4);}})[_0x9a77('0x1d')](function(_0x404912){if(_0x404912){return _0x404912?{'count':_0x5d4a8b,'rows':_0x404912}:null;}})[_0x9a77('0x1d')](respondWithResult(_0x26f3b5,null))[_0x9a77('0x5e')](handleError(_0x26f3b5,null));};exports[_0x9a77('0x119')]=function(_0x18735d,_0xdfd479,_0x220a48){var _0xfb1b66={};var _0x58e8be={};var _0x2c9d0e;var _0x49aab6;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x18735d['params']['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0xdfd479,null))['then'](function(_0x40cc66){if(_0x40cc66){_0x2c9d0e=_0x40cc66;_0x58e8be[_0x9a77('0x42')]=_[_0x9a77('0x43')](db[_0x9a77('0x11a')][_0x9a77('0xbb')]);_0x58e8be['query']=_[_0x9a77('0x43')](_0x18735d['query']);_0x58e8be[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x58e8be['model'],_0x58e8be[_0x9a77('0x47')]);_0xfb1b66[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x58e8be['model'],qs['fields'](_0x18735d[_0x9a77('0x47')]['fields']));_0xfb1b66['attributes']=_0xfb1b66[_0x9a77('0x49')][_0x9a77('0x4a')]?_0xfb1b66[_0x9a77('0x49')]:_0x58e8be['model'];_0xfb1b66[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x18735d[_0x9a77('0x47')][_0x9a77('0x4e')]);_0xfb1b66[_0x9a77('0x4f')]=qs[_0x9a77('0x50')](_[_0x9a77('0x51')](_0x18735d[_0x9a77('0x47')],_0x58e8be[_0x9a77('0x50')]));if(_0x18735d[_0x9a77('0x47')][_0x9a77('0x35')]){_0xfb1b66[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0xfb1b66[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0xfb1b66[_0x9a77('0x49')],function(_0x1aace6){var _0x38dd20={};_0x38dd20[_0x1aace6]={'$like':'%'+_0x18735d[_0x9a77('0x47')]['filter']+'%'};return _0x38dd20;})});}_0xfb1b66=_['merge']({},_0xfb1b66,_0x18735d['options']);return _0x2c9d0e[_0x9a77('0x119')](_0xfb1b66);}})[_0x9a77('0x1d')](function(_0x35aeab){if(_0x35aeab){_0x49aab6=_0x35aeab['length'];if(!_0x18735d[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0xfb1b66['limit']=qs[_0x9a77('0x2a')](_0x18735d[_0x9a77('0x47')][_0x9a77('0x2a')]);_0xfb1b66[_0x9a77('0x29')]=qs['offset'](_0x18735d[_0x9a77('0x47')][_0x9a77('0x29')]);}return _0x2c9d0e[_0x9a77('0x119')](_0xfb1b66);}})[_0x9a77('0x1d')](function(_0x9f6293){if(_0x9f6293){return _0x9f6293?{'count':_0x49aab6,'rows':_0x9f6293}:null;}})[_0x9a77('0x1d')](respondWithResult(_0xdfd479,null))[_0x9a77('0x5e')](handleError(_0xdfd479,null));};exports[_0x9a77('0x11b')]=function(_0x5f02df,_0x2e0138,_0x199b5b){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x5f02df[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x2e0138,null))[_0x9a77('0x1d')](function(_0x487189){if(_0x487189){return _0x487189[_0x9a77('0x11b')](_0x5f02df[_0x9a77('0x62')]['ids'],_['omit'](_0x5f02df[_0x9a77('0x62')],[_0x9a77('0x67'),'id'])||{});}})[_0x9a77('0x1d')](respondWithResult(_0x2e0138,null))['catch'](handleError(_0x2e0138,null));};exports['removeFaxAccounts']=function(_0x41e25b,_0x921461,_0x11370a){return db['User'][_0x9a77('0x3a')]({'where':{'id':_0x41e25b[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x921461,null))[_0x9a77('0x1d')](function(_0x168394){if(_0x168394){return _0x168394[_0x9a77('0x11c')](_0x41e25b['query'][_0x9a77('0x67')]);}})[_0x9a77('0x1d')](respondWithStatusCode(_0x921461,null))['catch'](handleError(_0x921461,null));};exports[_0x9a77('0x11d')]=function(_0x59b01c,_0x1d35c4,_0x560cd1){var _0x303306={};var _0x5218aa={};var _0x49204b;var _0x34a133;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x59b01c[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x1d35c4,null))[_0x9a77('0x1d')](function(_0x300fe5){if(_0x300fe5){_0x49204b=_0x300fe5;_0x5218aa[_0x9a77('0x42')]=_[_0x9a77('0x43')](db['MailAccount'][_0x9a77('0xbb')]);_0x5218aa['query']=_[_0x9a77('0x43')](_0x59b01c[_0x9a77('0x47')]);_0x5218aa['filters']=_[_0x9a77('0x46')](_0x5218aa[_0x9a77('0x42')],_0x5218aa['query']);_0x303306['attributes']=_['intersection'](_0x5218aa[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x59b01c[_0x9a77('0x47')][_0x9a77('0x48')]));_0x303306[_0x9a77('0x49')]=_0x303306['attributes'][_0x9a77('0x4a')]?_0x303306[_0x9a77('0x49')]:_0x5218aa['model'];_0x303306[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x59b01c[_0x9a77('0x47')]['sort']);_0x303306['where']=qs['filters'](_[_0x9a77('0x51')](_0x59b01c[_0x9a77('0x47')],_0x5218aa[_0x9a77('0x50')]));if(_0x59b01c['query']['filter']){_0x303306[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x303306[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x303306[_0x9a77('0x49')],function(_0x4c4fd6){var _0x5f37b1={};_0x5f37b1[_0x4c4fd6]={'$like':'%'+_0x59b01c[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0x5f37b1;})});}_0x303306=_['merge']({},_0x303306,_0x59b01c[_0x9a77('0x59')]);return _0x49204b[_0x9a77('0x11d')](_0x303306);}})['then'](function(_0x4a95a0){if(_0x4a95a0){_0x34a133=_0x4a95a0[_0x9a77('0x4a')];if(!_0x59b01c[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x303306['limit']=qs['limit'](_0x59b01c[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x303306[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x59b01c[_0x9a77('0x47')][_0x9a77('0x29')]);}return _0x49204b[_0x9a77('0x11d')](_0x303306);}})[_0x9a77('0x1d')](function(_0x3912b8){if(_0x3912b8){return _0x3912b8?{'count':_0x34a133,'rows':_0x3912b8}:null;}})[_0x9a77('0x1d')](respondWithResult(_0x1d35c4,null))['catch'](handleError(_0x1d35c4,null));};exports[_0x9a77('0x11e')]=function(_0x338456,_0x15e533,_0x30f70e){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x338456[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x15e533,null))[_0x9a77('0x1d')](function(_0x183e9e){if(_0x183e9e){return _0x183e9e[_0x9a77('0x11e')](_0x338456[_0x9a77('0x62')]['ids'],_[_0x9a77('0x68')](_0x338456['body'],['ids','id'])||{});}})[_0x9a77('0x1d')](respondWithResult(_0x15e533,null))[_0x9a77('0x5e')](handleError(_0x15e533,null));};exports[_0x9a77('0x11f')]=function(_0x1c53f1,_0x54b1c8,_0x373486){return db[_0x9a77('0x41')]['find']({'where':{'id':_0x1c53f1[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x54b1c8,null))[_0x9a77('0x1d')](function(_0x470d8c){if(_0x470d8c){return _0x470d8c[_0x9a77('0x11f')](_0x1c53f1[_0x9a77('0x47')][_0x9a77('0x67')]);}})[_0x9a77('0x1d')](respondWithStatusCode(_0x54b1c8,null))[_0x9a77('0x5e')](handleError(_0x54b1c8,null));};exports[_0x9a77('0x120')]=function(_0x31f905,_0x20651f,_0x577768){var _0x101e1b={};var _0x5e480b={};var _0x48b301;var _0x4d9a95;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x31f905[_0x9a77('0x64')]['id']}})['then'](handleEntityNotFound(_0x20651f,null))[_0x9a77('0x1d')](function(_0x19df10){if(_0x19df10){_0x48b301=_0x19df10;_0x5e480b[_0x9a77('0x42')]=_['keys'](db[_0x9a77('0x121')]['rawAttributes']);_0x5e480b[_0x9a77('0x47')]=_['keys'](_0x31f905['query']);_0x5e480b[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0x5e480b['model'],_0x5e480b['query']);_0x101e1b[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x5e480b[_0x9a77('0x42')],qs['fields'](_0x31f905[_0x9a77('0x47')][_0x9a77('0x48')]));_0x101e1b['attributes']=_0x101e1b['attributes'][_0x9a77('0x4a')]?_0x101e1b[_0x9a77('0x49')]:_0x5e480b[_0x9a77('0x42')];_0x101e1b[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x31f905[_0x9a77('0x47')]['sort']);_0x101e1b['where']=qs[_0x9a77('0x50')](_['pick'](_0x31f905[_0x9a77('0x47')],_0x5e480b[_0x9a77('0x50')]));if(_0x31f905[_0x9a77('0x47')][_0x9a77('0x35')]){_0x101e1b[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x101e1b[_0x9a77('0x4f')],{'$or':_['map'](_0x101e1b[_0x9a77('0x49')],function(_0x313693){var _0x18a251={};_0x18a251[_0x313693]={'$like':'%'+_0x31f905['query'][_0x9a77('0x35')]+'%'};return _0x18a251;})});}_0x101e1b=_[_0x9a77('0x52')]({},_0x101e1b,_0x31f905[_0x9a77('0x59')]);return _0x48b301[_0x9a77('0x120')](_0x101e1b);}})[_0x9a77('0x1d')](function(_0x29ff56){if(_0x29ff56){_0x4d9a95=_0x29ff56[_0x9a77('0x4a')];if(!_0x31f905[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x101e1b['limit']=qs[_0x9a77('0x2a')](_0x31f905[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x101e1b[_0x9a77('0x29')]=qs['offset'](_0x31f905[_0x9a77('0x47')]['offset']);}return _0x48b301[_0x9a77('0x120')](_0x101e1b);}})[_0x9a77('0x1d')](function(_0x2cfe96){if(_0x2cfe96){return _0x2cfe96?{'count':_0x4d9a95,'rows':_0x2cfe96}:null;}})['then'](respondWithResult(_0x20651f,null))[_0x9a77('0x5e')](handleError(_0x20651f,null));};exports[_0x9a77('0x122')]=function(_0x4932ab,_0xe058ab,_0x4076fd){return db['User'][_0x9a77('0x3a')]({'where':{'id':_0x4932ab[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0xe058ab,null))['then'](function(_0xae4dd6){if(_0xae4dd6){return _0xae4dd6[_0x9a77('0x122')](_0x4932ab[_0x9a77('0x62')][_0x9a77('0x67')],_[_0x9a77('0x68')](_0x4932ab['body'],[_0x9a77('0x67'),'id'])||{});}})[_0x9a77('0x1d')](respondWithResult(_0xe058ab,null))[_0x9a77('0x5e')](handleError(_0xe058ab,null));};exports[_0x9a77('0x123')]=function(_0x4775dd,_0x1121c8,_0x76ead5){return db['User'][_0x9a77('0x3a')]({'where':{'id':_0x4775dd[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x1121c8,null))['then'](function(_0x4a3e5d){if(_0x4a3e5d){return _0x4a3e5d['removeOpenchannelAccounts'](_0x4775dd[_0x9a77('0x47')]['ids']);}})[_0x9a77('0x1d')](respondWithStatusCode(_0x1121c8,null))[_0x9a77('0x5e')](handleError(_0x1121c8,null));};exports[_0x9a77('0x124')]=function(_0x539b22,_0x520e92,_0x542365){var _0x1aa7c3={};var _0x53b0b5={};var _0x1f59a4;var _0x204038;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x539b22[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x520e92,null))[_0x9a77('0x1d')](function(_0x164cec){if(_0x164cec){_0x1f59a4=_0x164cec;_0x53b0b5['model']=_[_0x9a77('0x43')](db[_0x9a77('0x125')][_0x9a77('0xbb')]);_0x53b0b5['query']=_[_0x9a77('0x43')](_0x539b22[_0x9a77('0x47')]);_0x53b0b5['filters']=_[_0x9a77('0x46')](_0x53b0b5[_0x9a77('0x42')],_0x53b0b5[_0x9a77('0x47')]);_0x1aa7c3[_0x9a77('0x49')]=_['intersection'](_0x53b0b5[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x539b22[_0x9a77('0x47')][_0x9a77('0x48')]));_0x1aa7c3[_0x9a77('0x49')]=_0x1aa7c3[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x1aa7c3[_0x9a77('0x49')]:_0x53b0b5[_0x9a77('0x42')];_0x1aa7c3['order']=qs['sort'](_0x539b22[_0x9a77('0x47')][_0x9a77('0x4e')]);_0x1aa7c3['where']=qs[_0x9a77('0x50')](_[_0x9a77('0x51')](_0x539b22[_0x9a77('0x47')],_0x53b0b5[_0x9a77('0x50')]));if(_0x539b22[_0x9a77('0x47')]['filter']){_0x1aa7c3['where']=_[_0x9a77('0x52')](_0x1aa7c3[_0x9a77('0x4f')],{'$or':_['map'](_0x1aa7c3[_0x9a77('0x49')],function(_0x438a60){var _0xf4ffd={};_0xf4ffd[_0x438a60]={'$like':'%'+_0x539b22[_0x9a77('0x47')][_0x9a77('0x35')]+'%'};return _0xf4ffd;})});}_0x1aa7c3=_[_0x9a77('0x52')]({},_0x1aa7c3,_0x539b22['options']);return _0x1f59a4[_0x9a77('0x124')](_0x1aa7c3);}})[_0x9a77('0x1d')](function(_0x3702e4){if(_0x3702e4){_0x204038=_0x3702e4[_0x9a77('0x4a')];if(!_0x539b22[_0x9a77('0x47')]['hasOwnProperty'](_0x9a77('0x4c'))){_0x1aa7c3[_0x9a77('0x2a')]=qs['limit'](_0x539b22[_0x9a77('0x47')]['limit']);_0x1aa7c3[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x539b22['query'][_0x9a77('0x29')]);}return _0x1f59a4[_0x9a77('0x124')](_0x1aa7c3);}})['then'](function(_0x525ecc){if(_0x525ecc){return _0x525ecc?{'count':_0x204038,'rows':_0x525ecc}:null;}})['then'](respondWithResult(_0x520e92,null))[_0x9a77('0x5e')](handleError(_0x520e92,null));};exports['addSmsAccounts']=function(_0x86d213,_0x18cd47,_0x58f97d){return db[_0x9a77('0x41')]['find']({'where':{'id':_0x86d213[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x18cd47,null))[_0x9a77('0x1d')](function(_0x3abc23){if(_0x3abc23){return _0x3abc23[_0x9a77('0x126')](_0x86d213[_0x9a77('0x62')][_0x9a77('0x67')],_[_0x9a77('0x68')](_0x86d213[_0x9a77('0x62')],[_0x9a77('0x67'),'id'])||{});}})[_0x9a77('0x1d')](respondWithResult(_0x18cd47,null))[_0x9a77('0x5e')](handleError(_0x18cd47,null));};exports[_0x9a77('0x127')]=function(_0x2083d6,_0x30d0f9,_0x220fbd){return db[_0x9a77('0x41')]['find']({'where':{'id':_0x2083d6[_0x9a77('0x64')]['id']}})['then'](handleEntityNotFound(_0x30d0f9,null))['then'](function(_0x40b5d6){if(_0x40b5d6){return _0x40b5d6[_0x9a77('0x127')](_0x2083d6[_0x9a77('0x47')][_0x9a77('0x67')]);}})[_0x9a77('0x1d')](respondWithStatusCode(_0x30d0f9,null))[_0x9a77('0x5e')](handleError(_0x30d0f9,null));};exports[_0x9a77('0x128')]=function(_0x3233e2,_0xbf96d3,_0x184f24){var _0x169f4a={};var _0xa5c847={};var _0x314982;var _0x3697a9;return db[_0x9a77('0x41')]['findOne']({'where':{'id':_0x3233e2[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0xbf96d3,null))[_0x9a77('0x1d')](function(_0x563c81){if(_0x563c81){_0x314982=_0x563c81;_0xa5c847[_0x9a77('0x42')]=_[_0x9a77('0x43')](db[_0x9a77('0x129')][_0x9a77('0xbb')]);_0xa5c847[_0x9a77('0x47')]=_['keys'](_0x3233e2[_0x9a77('0x47')]);_0xa5c847[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0xa5c847[_0x9a77('0x42')],_0xa5c847['query']);_0x169f4a[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0xa5c847[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x3233e2[_0x9a77('0x47')][_0x9a77('0x48')]));_0x169f4a[_0x9a77('0x49')]=_0x169f4a[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x169f4a[_0x9a77('0x49')]:_0xa5c847['model'];_0x169f4a[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x3233e2[_0x9a77('0x47')]['sort']);_0x169f4a[_0x9a77('0x4f')]=qs['filters'](_[_0x9a77('0x51')](_0x3233e2['query'],_0xa5c847[_0x9a77('0x50')]));if(_0x3233e2['query'][_0x9a77('0x35')]){_0x169f4a[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x169f4a[_0x9a77('0x4f')],{'$or':_['map'](_0x169f4a[_0x9a77('0x49')],function(_0x4ee0e7){var _0x33c007={};_0x33c007[_0x4ee0e7]={'$like':'%'+_0x3233e2['query'][_0x9a77('0x35')]+'%'};return _0x33c007;})});}_0x169f4a=_[_0x9a77('0x52')]({},_0x169f4a,_0x3233e2['options']);return _0x314982['getChatWebsites'](_0x169f4a);}})['then'](function(_0x557169){if(_0x557169){_0x3697a9=_0x557169[_0x9a77('0x4a')];if(!_0x3233e2['query']['hasOwnProperty'](_0x9a77('0x4c'))){_0x169f4a[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x3233e2[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x169f4a[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0x3233e2[_0x9a77('0x47')]['offset']);}return _0x314982[_0x9a77('0x128')](_0x169f4a);}})[_0x9a77('0x1d')](function(_0x3d07ef){if(_0x3d07ef){return _0x3d07ef?{'count':_0x3697a9,'rows':_0x3d07ef}:null;}})['then'](respondWithResult(_0xbf96d3,null))[_0x9a77('0x5e')](handleError(_0xbf96d3,null));};exports[_0x9a77('0x12a')]=function(_0x287bd0,_0x56cd37,_0x303a9c){return db[_0x9a77('0x41')]['find']({'where':{'id':_0x287bd0[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x56cd37,null))[_0x9a77('0x1d')](function(_0x3c686c){if(_0x3c686c){return _0x3c686c['addChatWebsites'](_0x287bd0['body'][_0x9a77('0x67')],_[_0x9a77('0x68')](_0x287bd0['body'],[_0x9a77('0x67'),'id'])||{});}})['then'](respondWithResult(_0x56cd37,null))['catch'](handleError(_0x56cd37,null));};exports['removeChatWebsites']=function(_0x1a9db1,_0x5785fe,_0x447928){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x1a9db1[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x5785fe,null))[_0x9a77('0x1d')](function(_0x30af0f){if(_0x30af0f){return _0x30af0f[_0x9a77('0x12b')](_0x1a9db1['query']['ids']);}})[_0x9a77('0x1d')](respondWithStatusCode(_0x5785fe,null))['catch'](handleError(_0x5785fe,null));};exports[_0x9a77('0x12c')]=function(_0x6e8ee8,_0x1e7b53,_0x5dea58){var _0x2d424f={};var _0xb29e8f={};var _0xb3102c;var _0x924779;return db[_0x9a77('0x41')][_0x9a77('0xb9')]({'where':{'id':_0x6e8ee8[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x1e7b53,null))[_0x9a77('0x1d')](function(_0x4e024d){if(_0x4e024d){_0xb3102c=_0x4e024d;_0xb29e8f[_0x9a77('0x42')]=_['keys'](db['SquareProject'][_0x9a77('0xbb')]);_0xb29e8f[_0x9a77('0x47')]=_[_0x9a77('0x43')](_0x6e8ee8[_0x9a77('0x47')]);_0xb29e8f[_0x9a77('0x50')]=_[_0x9a77('0x46')](_0xb29e8f['model'],_0xb29e8f['query']);_0x2d424f[_0x9a77('0x49')]=_['intersection'](_0xb29e8f[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0x6e8ee8[_0x9a77('0x47')][_0x9a77('0x48')]));_0x2d424f['attributes']=_0x2d424f[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x2d424f[_0x9a77('0x49')]:_0xb29e8f[_0x9a77('0x42')];_0x2d424f[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0x6e8ee8[_0x9a77('0x47')][_0x9a77('0x4e')]);_0x2d424f[_0x9a77('0x4f')]=qs[_0x9a77('0x50')](_[_0x9a77('0x51')](_0x6e8ee8['query'],_0xb29e8f[_0x9a77('0x50')]));if(_0x6e8ee8['query'][_0x9a77('0x35')]){_0x2d424f[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x2d424f[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x2d424f['attributes'],function(_0x4e330e){var _0x6b6bb1={};_0x6b6bb1[_0x4e330e]={'$like':'%'+_0x6e8ee8[_0x9a77('0x47')]['filter']+'%'};return _0x6b6bb1;})});}_0x2d424f=_[_0x9a77('0x52')]({},_0x2d424f,_0x6e8ee8[_0x9a77('0x59')]);return _0xb3102c['getSquareProjects'](_0x2d424f);}})[_0x9a77('0x1d')](function(_0x3a5c47){if(_0x3a5c47){_0x924779=_0x3a5c47[_0x9a77('0x4a')];if(!_0x6e8ee8[_0x9a77('0x47')]['hasOwnProperty'](_0x9a77('0x4c'))){_0x2d424f[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0x6e8ee8['query']['limit']);_0x2d424f['offset']=qs[_0x9a77('0x29')](_0x6e8ee8[_0x9a77('0x47')][_0x9a77('0x29')]);}return _0xb3102c[_0x9a77('0x12c')](_0x2d424f);}})[_0x9a77('0x1d')](function(_0x2b8acd){if(_0x2b8acd){return _0x2b8acd?{'count':_0x924779,'rows':_0x2b8acd}:null;}})[_0x9a77('0x1d')](respondWithResult(_0x1e7b53,null))[_0x9a77('0x5e')](handleError(_0x1e7b53,null));};exports[_0x9a77('0x12d')]=function(_0x2c81b3,_0x516ce9,_0x52c0a0){return db[_0x9a77('0x41')]['find']({'where':{'id':_0x2c81b3[_0x9a77('0x64')]['id']}})['then'](handleEntityNotFound(_0x516ce9,null))[_0x9a77('0x1d')](function(_0x5c4771){if(_0x5c4771){return _0x5c4771[_0x9a77('0x12d')](_0x2c81b3['body'][_0x9a77('0x67')],_[_0x9a77('0x68')](_0x2c81b3[_0x9a77('0x62')],[_0x9a77('0x67'),'id'])||{});}})['then'](respondWithResult(_0x516ce9,null))[_0x9a77('0x5e')](handleError(_0x516ce9,null));};exports[_0x9a77('0x12e')]=function(_0x429a08,_0x3fa66a,_0x5f37a7){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x429a08[_0x9a77('0x64')]['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x3fa66a,null))[_0x9a77('0x1d')](function(_0x55171d){if(_0x55171d){return _0x55171d[_0x9a77('0x12e')](_0x429a08[_0x9a77('0x47')][_0x9a77('0x67')]);}})[_0x9a77('0x1d')](respondWithStatusCode(_0x3fa66a,null))['catch'](handleError(_0x3fa66a,null));};exports[_0x9a77('0x12f')]=function(_0xfe28a3,_0x4124d8){var _0x329b2a={},_0x45c812={},_0x2bb8eb={'count':0x0,'rows':[]};var _0x541b84=db[_0x9a77('0x130')]['rawAttributes'];_0x45c812[_0x9a77('0x42')]=_[_0x9a77('0x43')](_0x541b84);_0x45c812[_0x9a77('0x47')]=_['keys'](_0xfe28a3['query']);_0x45c812['filters']=_[_0x9a77('0x46')](_0x45c812[_0x9a77('0x42')],_0x45c812['query']);_0x45c812[_0x9a77('0x50')]=_['concat'](_0x45c812['filters'],['$and','$or','$gt',_0x9a77('0x131'),_0x9a77('0x132'),_0x9a77('0x133'),_0x9a77('0x134'),_0x9a77('0x135'),_0x9a77('0x136'),_0x9a77('0x137'),_0x9a77('0x138'),_0x9a77('0x139'),_0x9a77('0x13a'),_0x9a77('0x13b'),_0x9a77('0x13c'),_0x9a77('0x13d'),'$notILike',_0x9a77('0x13b'),_0x9a77('0x13e'),_0x9a77('0x13f'),_0x9a77('0x140'),_0x9a77('0x141')]);_0x329b2a[_0x9a77('0x49')]=_[_0x9a77('0x46')](_0x45c812[_0x9a77('0x42')],qs[_0x9a77('0x48')](_0xfe28a3[_0x9a77('0x47')][_0x9a77('0x48')]));_0x329b2a['attributes']=_0x329b2a[_0x9a77('0x49')][_0x9a77('0x4a')]?_0x329b2a['attributes']:_0x45c812[_0x9a77('0x42')];if(!_0xfe28a3[_0x9a77('0x47')][_0x9a77('0x4b')](_0x9a77('0x4c'))){_0x329b2a[_0x9a77('0x2a')]=qs[_0x9a77('0x2a')](_0xfe28a3[_0x9a77('0x47')][_0x9a77('0x2a')]);_0x329b2a[_0x9a77('0x29')]=qs[_0x9a77('0x29')](_0xfe28a3[_0x9a77('0x47')][_0x9a77('0x29')]);}_0x329b2a[_0x9a77('0x4d')]=qs[_0x9a77('0x4e')](_0xfe28a3['query'][_0x9a77('0x4e')]);_0x329b2a[_0x9a77('0x4f')]=qs['filters'](_['pick'](_0xfe28a3['query'],_0x45c812[_0x9a77('0x50')]));if(_0xfe28a3[_0x9a77('0x47')][_0x9a77('0x35')]){_0x329b2a[_0x9a77('0x4f')]=_[_0x9a77('0x52')](_0x329b2a[_0x9a77('0x4f')],{'$or':_[_0x9a77('0x37')](_0x329b2a[_0x9a77('0x49')],function(_0x595dd9){var _0x441fc4={};_0x441fc4[_0x595dd9]={'$like':'%'+_0xfe28a3[_0x9a77('0x47')]['filter']+'%'};return _0x441fc4;})});}_0x329b2a[_0x9a77('0x4f')]={'$and':[_0x329b2a[_0x9a77('0x4f')],{'$or':[{'UserId':_0xfe28a3[_0x9a77('0x64')]['id']},{'OwnerId':_0xfe28a3[_0x9a77('0x64')]['id']}]}]};_0x329b2a=_[_0x9a77('0x52')]({},_0x329b2a,_0xfe28a3[_0x9a77('0x59')]);var _0x3d7839={'where':_0x329b2a[_0x9a77('0x4f')]};return db['CmHopper'][_0x9a77('0x28')](_0x3d7839)[_0x9a77('0x1d')](function(_0x4ad42d){_0x2bb8eb['count']=_0x4ad42d;if(_0xfe28a3['query'][_0x9a77('0x5a')]){_0x329b2a[_0x9a77('0x5b')]=[{'attributes':['id',_0x9a77('0x142'),_0x9a77('0x143'),_0x9a77('0x144')],'model':db['CmContact'],'as':_0x9a77('0x145')},{'attributes':['id',_0x9a77('0x3b'),'dialActive'],'model':db[_0x9a77('0x146')],'as':'Queue'}];}return db['CmHopper'][_0x9a77('0x5c')](_0x329b2a);})[_0x9a77('0x1d')](function(_0x1b1e6a){_0x2bb8eb[_0x9a77('0x5d')]=_0x1b1e6a;return _0x2bb8eb;})['then'](respondWithFilteredResult(_0x4124d8,_0x329b2a))[_0x9a77('0x5e')](handleError(_0x4124d8,null));};exports[_0x9a77('0x147')]=function(_0xc120b0,_0x169bf4,_0x11b563){if(!_[_0x9a77('0x76')](_0xc120b0[_0x9a77('0x6a')]['id'])&&(_0xc120b0['user']['role']==_0x9a77('0xc4')||_0xc120b0['user'][_0x9a77('0x63')]=='user')){return db['User'][_0x9a77('0x3a')]({'where':{'id':_0xc120b0['params']['id']}})[_0x9a77('0x1d')](function(_0x43e2c8){var _0x5dc982=authService[_0x9a77('0x148')](_0x43e2c8);if(_0x5dc982)return _0x169bf4[_0x9a77('0x26')](0xc8)[_0x9a77('0x27')]({'api_key':_0x5dc982});else return _0x169bf4[_0x9a77('0x26')](0xcc)[_0x9a77('0x27')]({'message':_0x9a77('0x149')});})['catch'](handleError(_0x169bf4,0x193));}else{return _0x169bf4['status'](0x191)['json']({'message':_0x9a77('0x14a')});}};exports[_0x9a77('0x14b')]=function(_0x469bf5,_0x42b836,_0xeb7e88){var _0xfe67f4;if(!_[_0x9a77('0x76')](_0x469bf5[_0x9a77('0x6a')]['id'])&&(_0x469bf5['user'][_0x9a77('0x63')]=='admin'||_0x469bf5['user'][_0x9a77('0x63')]=='user')){return db['User'][_0x9a77('0x3a')]({'where':{'id':_0x469bf5[_0x9a77('0x64')]['id']}})['then'](function(_0x9a27ba){return[_0x9a27ba,authService[_0x9a77('0x14c')](_0x9a27ba)];})['then'](function(_0x591e29){_0xfe67f4=_0x591e29;return db[_0x9a77('0x41')]['update']({'apiKeyNonce':_0xfe67f4[0x0][_0x9a77('0x14d')],'apiKeyIat':_0xfe67f4[0x0][_0x9a77('0x14e')]},{'where':{'id':_0x469bf5[_0x9a77('0x64')]['id']}});})[_0x9a77('0x1d')](function(){return _0x42b836[_0x9a77('0x26')](0xc8)['json']({'api_key':_0xfe67f4[0x1]});})['catch'](handleError(_0x42b836,0x193));}else{return _0x42b836[_0x9a77('0x26')](0x191)[_0x9a77('0x27')]({'message':_0x9a77('0x14a')});}};exports[_0x9a77('0x14f')]=function(_0x2d520b,_0x24df2d,_0x36ca87){if(!_['isNil'](_0x2d520b[_0x9a77('0x6a')]['id'])&&(_0x2d520b[_0x9a77('0x6a')][_0x9a77('0x63')]==_0x9a77('0xc4')||_0x2d520b[_0x9a77('0x6a')]['role']==_0x9a77('0x6a'))){return db[_0x9a77('0x41')][_0x9a77('0x3a')]({'where':{'id':_0x2d520b['params']['id']}})[_0x9a77('0x1d')](handleEntityNotFound(_0x24df2d,null))[_0x9a77('0x1d')](function(_0x5c7dad){if(_0x5c7dad&&_0x5c7dad['apiKeyNonce']&&_0x5c7dad[_0x9a77('0x14e')])return _0x5c7dad;else throw{'message':'API\x20key\x20not\x20available'};})[_0x9a77('0x1d')](function(_0x5073e0){return db[_0x9a77('0x41')][_0x9a77('0x2e')]({'apiKeyNonce':null,'apiKeyIat':null},{'where':{'id':_0x2d520b['params']['id']}});})[_0x9a77('0x1d')](respondWithStatusCode(_0x24df2d,0xc8))[_0x9a77('0x5e')](handleError(_0x24df2d,0x193));}else{return _0x24df2d[_0x9a77('0x26')](0x191)[_0x9a77('0x27')]({'message':_0x9a77('0x14a')});}};
\ No newline at end of file
+var _0xc402=['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','user_has_fax_interactions:save','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','getVoicePrefixes','getFaxAccounts','FaxAccount','addFaxAccounts','removeFaxAccounts','getMailAccounts','MailAccount','addMailAccounts','removeMailAccounts','getOpenchannelAccounts','OpenchannelAccount','addOpenchannelAccounts','removeOpenchannelAccounts','getSmsAccounts','addSmsAccounts','removeSmsAccounts','getChatWebsites','ChatWebsite','addChatWebsites','removeChatWebsites','SquareProject','getSquareProjects','addSquareProjects','removeSquareProjects','getScheduledCalls','$and','$lt','$lte','$eq','$notBetween','$in','$notIn','$like','$notLike','$iLike','$notILike','$overlap','$contains','$contained','$any','CmHopper','firstName','lastName','CmContact','Contact','getApiKey','No\x20API\x20access\x20key\x20found!','You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.','generateApiKey','apiKeyIat','removeApiKey','apiKeyNonce','API\x20key\x20not\x20available','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','register','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~!@#$%^&-_=+[{]}.','debug','User,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','User,\x20%s,\x20%s','status','end','json','count','limit','set','apply','reject','save','update','then','get','Users','user','Agents','agent','Telephones','map','value','includes','role','find','name','UserProfileResource','destroy','sendStatus','send','index','User','rawAttributes','model','differenceBy','keys','password','salt','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','offset','order','sort','where','pick','filter','type','VIRTUAL','sequelize','lower','col','field','merge','includeAll','include','rows','show','params','length','options','bulkCreate','body','describe','addContacts','ids','agent\x20role','telephone','admin','getLicense','telephones','users','isNil','format','count\x20%s:\x20%s','create','internal','Setting','securePassword','min_internal','max','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','from','voicemail','mailbox','VoiceMail','fullname','email','103','110','105','106','108','109','100','111','Unable\x20to\x20retrieve\x20the\x20current\x20user','userProfileId','changePassword','oldPassword','newPassword','New\x20password\x20must\x20be\x20different\x20from\x20old\x20one','Sequelize','ValidationError','Wrong\x20credentials','New\x20password\x20must\x20be\x20different\x20from\x20old\x20password','Invalid\x20body\x20format.\x20Use\x20newPassword','Unauthorized','findOne','addQueues','channel','loginInPause','voicePause','isValidChannel','add','capitalize','toLowerCase','Queues','spread','QueueId','emit','Queue:save','voice','VoiceQueue','online','push','interface','each','upsert','remove','Queue:remove','UserVoiceQueueRt','addAvatar','file','filename','getAvatar','join','root','server/files/images/logos/default_profile.png','userpic','download','server/files/images/','getContacts','CmList','List','Tags','tag','Unknown\x20channel','Queue','findAll','Unknown\x20role','getVoiceQueuesRt','getGroups','ChatGroup','VoiceRecording','UserId','ScreenRecording','getChatInteractions','ChatInteraction','getOpenchannelInteractions','OpenchannelInteraction','getMailInteractions','MailInteraction','SmsInteraction','getSmsInteractions','getFaxInteractions','FaxInteraction','login','phone','mobile','LOCAL/%s@from-sip/n','intrf','SIP/%s','user:%s','user:forcelogout','x-forwarded-for','connection','socket','remoteAddress','getVoiceQueues','UserVoiceQueue.penalty','forEach','YYYY-MM-DD\x20HH:mm:ss','all','getChannels','LOGIN','device','PAUSE','LOGININPAUSE','MemberReport','concat','isMiddleware','logout','QueuePause','pause','DEFAULT\x20PAUSE','unpause','mailPause','faxPause','openchannelPause','pauseType','lastPauseAt','manual','sms','openchannel','%s%s','Pause'];(function(_0x5bb57d,_0x1cc492){var _0x1cc430=function(_0x26d920){while(--_0x26d920){_0x5bb57d['push'](_0x5bb57d['shift']());}};_0x1cc430(++_0x1cc492);}(_0xc402,0x1a0));var _0x2c40=function(_0x31dd3e,_0x2b7a24){_0x31dd3e=_0x31dd3e-0x0;var _0x24ef72=_0xc402[_0x31dd3e];return _0x24ef72;};'use strict';var pdf=require(_0x2c40('0x0'));var emlformat=require(_0x2c40('0x1'));var rimraf=require(_0x2c40('0x2'));var zipdir=require(_0x2c40('0x3'));var jsonpatch=require(_0x2c40('0x4'));var rp=require(_0x2c40('0x5'));var moment=require(_0x2c40('0x6'));var BPromise=require(_0x2c40('0x7'));var Mustache=require(_0x2c40('0x8'));var util=require(_0x2c40('0x9'));var path=require(_0x2c40('0xa'));var sox=require(_0x2c40('0xb'));var csv=require(_0x2c40('0xc'));var ejs=require(_0x2c40('0xd'));var fs=require('fs');var _=require(_0x2c40('0xe'));var squel=require(_0x2c40('0xf'));var crypto=require(_0x2c40('0x10'));var jsforce=require('jsforce');var deskjs=require(_0x2c40('0x11'));var toCsv=require('to-csv');var querystring=require(_0x2c40('0x12'));var Papa=require(_0x2c40('0x13'));var Redis=require(_0x2c40('0x14'));var authService=require(_0x2c40('0x15'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x2c40('0x16'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0x2c40('0x17'));var db=require(_0x2c40('0x18'))['db'];config[_0x2c40('0x19')]=_[_0x2c40('0x1a')](config[_0x2c40('0x19')],{'host':_0x2c40('0x1b'),'port':0x18eb});var socket=require(_0x2c40('0x1c'))(new Redis(config[_0x2c40('0x19')]));require('./user.socket')[_0x2c40('0x1d')](socket);var jayson=require(_0x2c40('0x1e'));var client=jayson[_0x2c40('0x1f')]['http']({'port':0x232a});function checkPasswordPattern(_0x114ba1,_0x1a0b64,_0x432391){if(_0x432391){var _0x13c5fb=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x13c5fb[_0x2c40('0x20')](_0x1a0b64)){return _0x114ba1;}else{throw new Error(_0x2c40('0x21'));}}else{return _0x114ba1;}}function respondWithRpcPromise(_0x444981,_0x47c7c7,_0x36244b,_0x257b44){return new BPromise(function(_0x12d4a0,_0x8afdc0){var _0x407fce=_0x257b44||client;return _0x407fce['request'](_0x444981,_0x36244b)['then'](function(_0x386b87){logger['info']('User,\x20%s,\x20%s',_0x47c7c7,'request\x20sent');logger[_0x2c40('0x22')](_0x2c40('0x23'),_0x47c7c7,_0x2c40('0x24'),JSON[_0x2c40('0x25')](_0x386b87));if(_0x386b87[_0x2c40('0x26')]){if(_0x386b87[_0x2c40('0x26')][_0x2c40('0x27')]===0x1f4){logger[_0x2c40('0x26')]('User,\x20%s,\x20%s',_0x47c7c7,_0x386b87[_0x2c40('0x26')][_0x2c40('0x28')]);return _0x8afdc0(_0x386b87[_0x2c40('0x26')][_0x2c40('0x28')]);}logger[_0x2c40('0x26')]('User,\x20%s,\x20%s',_0x47c7c7,_0x386b87[_0x2c40('0x26')][_0x2c40('0x28')]);return _0x12d4a0(_0x386b87[_0x2c40('0x26')][_0x2c40('0x28')]);}else{logger[_0x2c40('0x29')]('User,\x20%s,\x20%s',_0x47c7c7,_0x2c40('0x24'));_0x12d4a0(_0x386b87[_0x2c40('0x2a')][_0x2c40('0x28')]);}})[_0x2c40('0x2b')](function(_0x26121c){logger[_0x2c40('0x26')](_0x2c40('0x2c'),_0x47c7c7,_0x26121c);_0x8afdc0(_0x26121c);});});}function respondWithStatusCode(_0x52627e,_0x3a2e7e){_0x3a2e7e=_0x3a2e7e||0xcc;return function(_0x3d9fdb){if(_0x3d9fdb){return _0x52627e['sendStatus'](_0x3a2e7e);}return _0x52627e[_0x2c40('0x2d')](_0x3a2e7e)[_0x2c40('0x2e')]();};}function respondWithResult(_0x1b09c3,_0x531412){_0x531412=_0x531412||0xc8;return function(_0x1b040e){if(_0x1b040e){return _0x1b09c3[_0x2c40('0x2d')](_0x531412)[_0x2c40('0x2f')](_0x1b040e);}};}function respondWithFilteredResult(_0x10677c,_0x2aad69){return function(_0x52d6d7){if(_0x52d6d7){var _0xf67dc7=_0x52d6d7[_0x2c40('0x30')],_0x5d858e=_0x2aad69['offset'],_0x385478=_0x2aad69['offset']+_0x2aad69[_0x2c40('0x31')],_0x38e1ed;if(_0x385478>=_0xf67dc7){_0x385478=_0xf67dc7;_0x38e1ed=0xc8;}else{_0x38e1ed=0xce;}_0x10677c[_0x2c40('0x2d')](_0x38e1ed);return _0x10677c[_0x2c40('0x32')]('Content-Range',_0x5d858e+'-'+_0x385478+'/'+_0xf67dc7)[_0x2c40('0x2f')](_0x52d6d7);}return null;};}function patchUpdates(_0x53c236){return function(_0x4d6eff){try{jsonpatch[_0x2c40('0x33')](_0x4d6eff,_0x53c236,!![]);}catch(_0x409227){return BPromise[_0x2c40('0x34')](_0x409227);}return _0x4d6eff[_0x2c40('0x35')]();};}function saveUpdates(_0x388ddf,_0x646242){return function(_0x32093e){if(_0x32093e){return _0x32093e[_0x2c40('0x36')](_0x388ddf)['then'](function(_0x424cd6){return _0x424cd6;});}return null;};}function removeEntity(_0x1dd92e,_0x154bda){return function(_0x52e00d){if(_0x52e00d){return _0x52e00d['destroy']()[_0x2c40('0x37')](function(){var _0xb14951=_0x52e00d[_0x2c40('0x38')]({'plain':!![]});var _0x229874=[{'name':_0x2c40('0x39'),'value':_0x2c40('0x3a'),'ignore':!![]},{'name':_0x2c40('0x3b'),'value':_0x2c40('0x3c'),'ignore':![]},{'name':_0x2c40('0x3d'),'value':'telephone','ignore':![]}];var _0x1918f3=_(_0x229874)['filter']('ignore')[_0x2c40('0x3e')](_0x2c40('0x3f'))[_0x2c40('0x3f')]();if(_[_0x2c40('0x40')](_0x1918f3,_0xb14951[_0x2c40('0x41')])){return;}var _0xde65d9=_[_0x2c40('0x42')](_0x229874,[_0x2c40('0x3f'),_0xb14951[_0x2c40('0x41')]])[_0x2c40('0x43')];return db[_0x2c40('0x44')][_0x2c40('0x45')]({'where':{'type':_0xde65d9,'resourceId':_0xb14951['id']}})['then'](function(){return _0x52e00d;});})[_0x2c40('0x37')](function(){_0x1dd92e['status'](0xcc)[_0x2c40('0x2e')]();});}};}function handleEntityNotFound(_0x1457a5,_0x2248d0){return function(_0x10d85a){if(!_0x10d85a){_0x1457a5[_0x2c40('0x46')](0x194);}return _0x10d85a;};}function handleError(_0x14f440,_0xb14fd8){_0xb14fd8=_0xb14fd8||0x1f4;return function(_0x80a0b){logger['error'](_0x80a0b['stack']);if(_0x80a0b[_0x2c40('0x43')]){delete _0x80a0b[_0x2c40('0x43')];}_0x14f440[_0x2c40('0x2d')](_0xb14fd8)[_0x2c40('0x47')](_0x80a0b);};}exports[_0x2c40('0x48')]=function(_0x4f1f8a,_0x22049b){var _0x30f984={},_0x2f5413={},_0x106359={'count':0x0,'rows':[]};var _0x2d9036=db[_0x2c40('0x49')][_0x2c40('0x4a')];_0x2f5413[_0x2c40('0x4b')]=_[_0x2c40('0x4c')](_[_0x2c40('0x4d')](_0x2d9036),[_0x2c40('0x4e'),_0x2c40('0x4f')]);_0x2f5413[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x4f1f8a['query']);_0x2f5413[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x2f5413[_0x2c40('0x4b')],_0x2f5413[_0x2c40('0x50')]);_0x30f984[_0x2c40('0x53')]=_['intersection'](_0x2f5413[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x4f1f8a[_0x2c40('0x50')][_0x2c40('0x54')]));_0x30f984[_0x2c40('0x53')]=_0x30f984[_0x2c40('0x53')]['length']?_0x30f984[_0x2c40('0x53')]:_0x2f5413['model'];if(!_0x4f1f8a['query'][_0x2c40('0x55')](_0x2c40('0x56'))){_0x30f984[_0x2c40('0x31')]=qs['limit'](_0x4f1f8a[_0x2c40('0x50')][_0x2c40('0x31')]);_0x30f984[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x4f1f8a[_0x2c40('0x50')][_0x2c40('0x57')]);}_0x30f984[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x4f1f8a[_0x2c40('0x50')][_0x2c40('0x59')]);_0x30f984[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x4f1f8a[_0x2c40('0x50')],_0x2f5413[_0x2c40('0x51')]));if(_0x4f1f8a[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x30f984[_0x2c40('0x5a')]=_['merge'](_0x30f984[_0x2c40('0x5a')],{'$or':_['map'](_0x2d9036,function(_0x3e62f3){if(_0x3e62f3[_0x2c40('0x5d')]['key']!==_0x2c40('0x5e')){return db[_0x2c40('0x5f')][_0x2c40('0x5a')](db[_0x2c40('0x5f')]['fn'](_0x2c40('0x60'),db[_0x2c40('0x5f')][_0x2c40('0x61')](_0x3e62f3[_0x2c40('0x62')])),{'$like':db[_0x2c40('0x5f')]['fn'](_0x2c40('0x60'),'%'+_0x4f1f8a[_0x2c40('0x50')][_0x2c40('0x5c')]+'%')});}})});}_0x30f984=_[_0x2c40('0x63')]({},_0x30f984,_0x4f1f8a['options']);var _0x2a66fa={'where':_0x30f984[_0x2c40('0x5a')]};return db[_0x2c40('0x49')]['count'](_0x2a66fa)[_0x2c40('0x37')](function(_0x2b3143){_0x106359['count']=_0x2b3143;if(_0x4f1f8a[_0x2c40('0x50')][_0x2c40('0x64')]){_0x30f984[_0x2c40('0x65')]=[{'all':!![]}];}return db[_0x2c40('0x49')]['findAll'](_0x30f984);})['then'](function(_0x48e3df){_0x106359[_0x2c40('0x66')]=_0x48e3df;return _0x106359;})[_0x2c40('0x37')](respondWithFilteredResult(_0x22049b,_0x30f984))[_0x2c40('0x2b')](handleError(_0x22049b,null));};exports[_0x2c40('0x67')]=function(_0x2cb476,_0x3bad23){var _0x3104f9={'raw':![],'where':{'id':_0x2cb476[_0x2c40('0x68')]['id']}},_0x17472a={};_0x17472a[_0x2c40('0x4b')]=_[_0x2c40('0x4c')](_[_0x2c40('0x4d')](db['User'][_0x2c40('0x4a')]),[_0x2c40('0x4e'),_0x2c40('0x4f')]);_0x17472a[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x2cb476[_0x2c40('0x50')]);_0x17472a[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x17472a['model'],_0x17472a[_0x2c40('0x50')]);_0x3104f9[_0x2c40('0x53')]=_['intersection'](_0x17472a[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x2cb476[_0x2c40('0x50')][_0x2c40('0x54')]));_0x3104f9[_0x2c40('0x53')]=_0x3104f9[_0x2c40('0x53')][_0x2c40('0x69')]?_0x3104f9[_0x2c40('0x53')]:_0x17472a[_0x2c40('0x4b')];if(_0x2cb476['query'][_0x2c40('0x64')]){_0x3104f9['include']=[{'all':!![]}];}_0x3104f9=_['merge']({},_0x3104f9,_0x2cb476[_0x2c40('0x6a')]);return db['User'][_0x2c40('0x42')](_0x3104f9)[_0x2c40('0x37')](handleEntityNotFound(_0x3bad23,null))[_0x2c40('0x37')](respondWithResult(_0x3bad23,null))[_0x2c40('0x2b')](handleError(_0x3bad23,null));};exports[_0x2c40('0x6b')]=function(_0x1796e0,_0xe2b028){return db['User'][_0x2c40('0x6b')](_0x1796e0[_0x2c40('0x6c')],{'raw':![],'individualHooks':!![]})['then'](respondWithResult(_0xe2b028,0xc9))[_0x2c40('0x2b')](handleError(_0xe2b028,null));};exports[_0x2c40('0x36')]=function(_0x10478a,_0x1517d3){if(_0x10478a[_0x2c40('0x6c')]['id']){delete _0x10478a[_0x2c40('0x6c')]['id'];}delete _0x10478a[_0x2c40('0x6c')][_0x2c40('0x41')];return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x10478a['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x1517d3,null))[_0x2c40('0x37')](saveUpdates(_0x10478a[_0x2c40('0x6c')],null))[_0x2c40('0x37')](respondWithResult(_0x1517d3,null))[_0x2c40('0x2b')](handleError(_0x1517d3,null));};exports[_0x2c40('0x6d')]=function(_0x3714f7,_0x4425ea){return db[_0x2c40('0x49')][_0x2c40('0x6d')]()[_0x2c40('0x37')](respondWithResult(_0x4425ea,null))[_0x2c40('0x2b')](handleError(_0x4425ea,null));};exports[_0x2c40('0x6e')]=function(_0x2d8692,_0x4a82cf,_0x24c5e8){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x2d8692[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x4a82cf,null))[_0x2c40('0x37')](function(_0x1c9c72){if(_0x1c9c72){return _0x1c9c72[_0x2c40('0x6e')](_0x2d8692[_0x2c40('0x6c')]['ids'],_['omit'](_0x2d8692[_0x2c40('0x6c')],[_0x2c40('0x6f'),'id'])||{});}})[_0x2c40('0x37')](respondWithResult(_0x4a82cf,null))[_0x2c40('0x2b')](handleError(_0x4a82cf,null));};var getLicense=function(_0x5a8ba2){return new BPromise(function(_0x3e054,_0x2d3e5f){var _0x3fe8af=0x0;_0x5a8ba2[_0x2c40('0x6c')]['role']===_0x2c40('0x3c')&&_0x3e054(_0x2c40('0x70'));return db['User'][_0x2c40('0x30')]({'where':{'$or':[{'role':_0x5a8ba2['body'][_0x2c40('0x41')]===_0x2c40('0x71')?'telephone':[_0x2c40('0x72'),'user']}]}})[_0x2c40('0x37')](function(_0x3f910f){_0x3fe8af=_0x3f910f;return require('../../config/license/util')[_0x2c40('0x73')]();})['then'](function(_0x22b5c0){var _0x17166a=_0x5a8ba2['body'][_0x2c40('0x41')]===_0x2c40('0x71')?_0x2c40('0x74'):_0x2c40('0x75');if(!_[_0x2c40('0x76')](_0x22b5c0[_0x17166a])&&_0x3fe8af>=_0x22b5c0[_0x17166a]){return _0x2d3e5f({'message':'License\x20limit\x20reached'});}return _0x3e054(util[_0x2c40('0x77')](_0x2c40('0x78'),_0x17166a,_0x3fe8af));})[_0x2c40('0x2b')](function(_0x54de17){return _0x2d3e5f(_0x54de17);});});};exports[_0x2c40('0x79')]=function(_0x28c229,_0x3d8de8){return getLicense(_0x28c229)[_0x2c40('0x37')](function(_0x2b2e2f){if(!_0x28c229[_0x2c40('0x6c')][_0x2c40('0x7a')]){var _0x14991a;return db[_0x2c40('0x7b')]['findById'](0x1)[_0x2c40('0x37')](function(_0x52c03a){_0x52c03a[_0x2c40('0x7c')]=!![];return checkPasswordPattern(_0x52c03a,_0x28c229[_0x2c40('0x6c')][_0x2c40('0x4e')],_0x52c03a[_0x2c40('0x7c')]);})[_0x2c40('0x37')](function(_0x4796ad){_0x14991a=_0x4796ad[_0x2c40('0x7d')];return db[_0x2c40('0x49')][_0x2c40('0x7e')]('internal');})[_0x2c40('0x37')](function(_0x1a4c22){if(_['isNil'](_0x1a4c22)){if(_0x14991a){_0x28c229[_0x2c40('0x6c')][_0x2c40('0x7a')]=_0x14991a;}else{_0x28c229[_0x2c40('0x6c')]['internal']=0x1;}}else{if(_[_0x2c40('0x76')](_0x14991a)||_0x14991a==_0x1a4c22){_0x28c229[_0x2c40('0x6c')][_0x2c40('0x7a')]=_0x1a4c22+0x1;}else if(_0x14991a>_0x1a4c22){_0x28c229['body'][_0x2c40('0x7a')]=_0x14991a;}else{return db[_0x2c40('0x5f')][_0x2c40('0x50')](_0x2c40('0x7f'),{'type':db[_0x2c40('0x5f')][_0x2c40('0x80')]['SELECT']})[_0x2c40('0x37')](function(_0x1f1b56){if(_0x1f1b56&&_0x1f1b56['length']){for(var _0x494e36=0x0,_0x42332c=_0x1f1b56[_0x2c40('0x69')];_0x494e36<_0x42332c&&_[_0x2c40('0x76')](_0x28c229[_0x2c40('0x6c')]['internal']);_0x494e36++){if(_0x14991a<=_0x1f1b56[_0x494e36][_0x2c40('0x81')]){_0x28c229['body'][_0x2c40('0x7a')]=_0x1f1b56[_0x494e36]['from'];}else if(_0x14991a>_0x1f1b56[_0x494e36]['from']&&_0x14991a<=_0x1f1b56[_0x494e36]['to']){_0x28c229['body']['internal']=_0x14991a;}}}if(_[_0x2c40('0x76')](_0x28c229[_0x2c40('0x6c')]['internal'])){_0x28c229['body']['internal']=_0x1a4c22+0x1;}});}}});}})[_0x2c40('0x37')](function(){if(_0x28c229[_0x2c40('0x6c')][_0x2c40('0x82')]){_0x28c229[_0x2c40('0x6c')][_0x2c40('0x83')]=_0x28c229[_0x2c40('0x6c')][_0x2c40('0x7a')];_0x28c229[_0x2c40('0x6c')][_0x2c40('0x84')]={'mailbox':_0x28c229[_0x2c40('0x6c')]['internal'],'password':_0x28c229['body'][_0x2c40('0x4e')],'fullname':_0x28c229[_0x2c40('0x6c')][_0x2c40('0x85')],'email':_0x28c229[_0x2c40('0x6c')][_0x2c40('0x86')]};}if(_0x28c229[_0x2c40('0x6c')]&&_0x28c229['body'][_0x2c40('0x41')]===_0x2c40('0x3c')){_0x28c229[_0x2c40('0x6c')]['permissions']=['101','102',_0x2c40('0x87'),_0x2c40('0x88'),'104',_0x2c40('0x89'),_0x2c40('0x8a'),'107',_0x2c40('0x8b'),_0x2c40('0x8c'),_0x2c40('0x8d'),_0x2c40('0x8e')];}return db['User']['create'](_0x28c229[_0x2c40('0x6c')],{'include':[{'model':db[_0x2c40('0x84')],'as':_0x2c40('0x84')}]});})[_0x2c40('0x37')](function(_0x388efa){if(_0x28c229[_0x2c40('0x6c')][_0x2c40('0x41')]===_0x2c40('0x3a'))return _0x388efa;var _0x280b54=_0x28c229['user'][_0x2c40('0x38')]({'plain':!![]});if(!_0x280b54)throw new Error(_0x2c40('0x8f'));if(_0x280b54[_0x2c40('0x41')]==='user'){var _0xdebb4a=_0x388efa[_0x2c40('0x38')]({'plain':!![]});var _0x13de56=[{'name':_0x2c40('0x3b'),'value':'agent'},{'name':'Telephones','value':_0x2c40('0x71')}];var _0x5b59aa=_['find'](_0x13de56,[_0x2c40('0x3f'),_0xdebb4a['role']])[_0x2c40('0x43')];return db['UserProfileSection'][_0x2c40('0x42')]({'where':{'name':_0x5b59aa,'userProfileId':_0x280b54[_0x2c40('0x90')]},'raw':!![]})[_0x2c40('0x37')](function(_0x497e80){if(_0x497e80&&_0x497e80['autoAssociation']===0x0){return db[_0x2c40('0x44')][_0x2c40('0x79')]({'name':_0xdebb4a['name'],'resourceId':_0xdebb4a['id'],'type':_0x497e80['name'],'sectionId':_0x497e80['id']},{})[_0x2c40('0x37')](function(){return _0x388efa;});}else{return _0x388efa;}})[_0x2c40('0x2b')](function(_0x289666){logger[_0x2c40('0x26')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x289666);throw _0x289666;});}return _0x388efa;})[_0x2c40('0x37')](respondWithResult(_0x3d8de8,0xc9))[_0x2c40('0x2b')](handleError(_0x3d8de8,null));};exports[_0x2c40('0x91')]=function(_0x3df787,_0x5eb468,_0x300a08){var _0x1c2a20=![];if(_0x3df787['body']['id']){delete _0x3df787['body']['id'];}if(!_[_0x2c40('0x76')](_0x3df787['body'][_0x2c40('0x92')])){if(_0x3df787[_0x2c40('0x6c')]['oldPassword']===_0x3df787['body'][_0x2c40('0x93')]){throw new Error(_0x2c40('0x94'));}}return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x3df787[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](function(_0x3021ab){if(_0x3021ab){if(_0x3021ab['id']==_0x3df787[_0x2c40('0x3a')]['id']){if(!_0x3df787['body'][_0x2c40('0x92')]||!_0x3df787[_0x2c40('0x6c')][_0x2c40('0x93')]){throw new db[(_0x2c40('0x95'))][(_0x2c40('0x96'))]('Invalid\x20body\x20format.\x20Use\x20oldPassord\x20and\x20newPassword');}if(!_0x3021ab['authenticate'](_0x3df787[_0x2c40('0x6c')][_0x2c40('0x92')])){throw new db[(_0x2c40('0x95'))][(_0x2c40('0x96'))](_0x2c40('0x97'));}if(_0x3df787['body'][_0x2c40('0x92')]==_0x3df787[_0x2c40('0x6c')][_0x2c40('0x93')]){throw new db[(_0x2c40('0x95'))][(_0x2c40('0x96'))](_0x2c40('0x98'));}return _0x3021ab;}else if(_0x3df787[_0x2c40('0x3a')][_0x2c40('0x41')]=='admin'){if(!_0x3df787[_0x2c40('0x6c')]['newPassword']){throw new db['Sequelize'][(_0x2c40('0x96'))](_0x2c40('0x99'));}return _0x3021ab;}else if(_0x3df787[_0x2c40('0x3a')][_0x2c40('0x41')]==_0x2c40('0x3a')){if(!_0x3df787[_0x2c40('0x6c')][_0x2c40('0x93')]){throw new db[(_0x2c40('0x95'))][(_0x2c40('0x96'))](_0x2c40('0x99'));}if(_0x3021ab[_0x2c40('0x41')]!=_0x2c40('0x3c')){throw new db['Sequelize'][(_0x2c40('0x96'))]('Unauthorized');}return _0x3021ab;}else{throw new db[(_0x2c40('0x95'))]['ValidationError'](_0x2c40('0x9a'));}}return null;})['then'](handleEntityNotFound(_0x5eb468,null))[_0x2c40('0x37')](function(_0x4ec164){return db[_0x2c40('0x7b')][_0x2c40('0x9b')]({'attributes':['id',_0x2c40('0x7c')]})[_0x2c40('0x37')](function(_0x32202c){_0x1c2a20=_0x32202c[_0x2c40('0x7c')];return checkPasswordPattern(_0x4ec164,_0x3df787['body']['newPassword'],_0x1c2a20);});})[_0x2c40('0x37')](saveUpdates({'password':_0x3df787[_0x2c40('0x6c')][_0x2c40('0x93')],'passwordResetAt':_0x3df787[_0x2c40('0x3a')]['id']==_0x3df787[_0x2c40('0x68')]['id']?moment():null},null))['then'](respondWithResult(_0x5eb468,null))['catch'](handleError(_0x5eb468,null));};exports[_0x2c40('0x9c')]=function(_0x1353d7,_0x26879e,_0x352b58){var _0x33add8=_0x1353d7[_0x2c40('0x6c')][_0x2c40('0x9d')];return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x1353d7[_0x2c40('0x68')]['id']},'attributes':['id',_0x2c40('0x43'),'role','online',_0x2c40('0x9e'),_0x2c40('0x9f'),'interface']})[_0x2c40('0x37')](handleEntityNotFound(_0x26879e,null))[_0x2c40('0x37')](function(_0x56b865){if(_0x56b865){if(!utils[_0x2c40('0xa0')](_0x33add8)){throw new db['Sequelize'][(_0x2c40('0x96'))]('Unknown\x20channel');}return _0x56b865[_0x2c40('0xa1')+_[_0x2c40('0xa2')](_0x33add8[_0x2c40('0xa3')]())+_0x2c40('0xa4')](_0x1353d7[_0x2c40('0x6c')][_0x2c40('0x6f')],{'penalty':_0x1353d7[_0x2c40('0x6c')]['penalty']||0x0})[_0x2c40('0xa5')](function(_0x59af94){for(var _0x532a5d=0x0;_0x532a5d<_0x1353d7[_0x2c40('0x6c')][_0x2c40('0x6f')][_0x2c40('0x69')];_0x532a5d+=0x1){var _0x4ff9f7={'UserId':_0x1353d7[_0x2c40('0x68')]['id']};_0x4ff9f7[_['capitalize'](_0x33add8['toLowerCase']())+_0x2c40('0xa6')]=_0x1353d7[_0x2c40('0x6c')][_0x2c40('0x6f')][_0x532a5d];socket[_0x2c40('0xa7')](_0x2c40('0x3a')+_[_0x2c40('0xa2')](_0x33add8[_0x2c40('0xa3')]())+_0x2c40('0xa8'),_0x4ff9f7);}return _0x59af94;})[_0x2c40('0x37')](function(){if(_0x33add8===_0x2c40('0xa9')){return db[_0x2c40('0xaa')]['findAll']({'where':{'id':_0x1353d7[_0x2c40('0x6c')][_0x2c40('0x6f')]||[]},'raw':!![],'attributes':['id',_0x2c40('0x43')]});}})[_0x2c40('0x37')](function(_0x25f550){var _0x2ab4a2=_0x56b865['get']({'plain':!![]});var _0x100079=[];if(_0x33add8===_0x2c40('0xa9')&&_0x2ab4a2['role']===_0x2c40('0x3c')&&_0x2ab4a2[_0x2c40('0xab')]){for(var _0x437dc2=0x0;_0x437dc2<_0x25f550['length'];_0x437dc2+=0x1){_0x100079[_0x2c40('0xac')]({'membername':_0x2ab4a2[_0x2c40('0x43')],'UserId':_0x2ab4a2['id'],'queue_name':_0x25f550[_0x437dc2][_0x2c40('0x43')],'VoiceQueueId':_0x25f550[_0x437dc2]['id'],'interface':_[_0x2c40('0x76')](_0x2ab4a2['interface'])?util[_0x2c40('0x77')]('SIP/%s',_0x2ab4a2[_0x2c40('0x43')]):_0x2ab4a2[_0x2c40('0xad')],'paused':_0x2ab4a2['voicePause']||![],'penalty':_0x1353d7[_0x2c40('0x6c')]['penalty']||0x0});}return BPromise[_0x2c40('0xae')](_0x100079,function(_0x41f72d){return db['UserVoiceQueueRt'][_0x2c40('0xaf')](_0x41f72d);});}return _0x56b865;});}})[_0x2c40('0x37')](respondWithStatusCode(_0x26879e,null))[_0x2c40('0x2b')](handleError(_0x26879e,null));};exports['removeQueues']=function(_0x3892f5,_0xd61531,_0x2c37d7){var _0x2b76d;return db[_0x2c40('0x49')]['find']({'where':{'id':_0x3892f5[_0x2c40('0x68')]['id']},'attributes':['id',_0x2c40('0x43'),'role']})[_0x2c40('0x37')](handleEntityNotFound(_0xd61531,null))['then'](function(_0x85fd7){if(_0x85fd7){_0x2b76d=_0x85fd7;if(!_0x3892f5[_0x2c40('0x50')]['channel']||!utils[_0x2c40('0xa0')](_0x3892f5['query'][_0x2c40('0x9d')])){throw new db[(_0x2c40('0x95'))][(_0x2c40('0x96'))]('Unknown\x20channel');}return _0x85fd7[_0x2c40('0xb0')+_[_0x2c40('0xa2')](_0x3892f5[_0x2c40('0x50')][_0x2c40('0x9d')]['toLowerCase']())+'Queues'](_0x3892f5['query'][_0x2c40('0x6f')]);}})[_0x2c40('0x37')](function(_0x4396a1){for(var _0xea1c6c=0x0;_0xea1c6c<_0x3892f5[_0x2c40('0x50')][_0x2c40('0x6f')]['length'];_0xea1c6c+=0x1){var _0x4b674e={'UserId':_0x3892f5[_0x2c40('0x68')]['id']};_0x4b674e[_[_0x2c40('0xa2')](_0x3892f5[_0x2c40('0x50')][_0x2c40('0x9d')][_0x2c40('0xa3')]())+_0x2c40('0xa6')]=_0x3892f5[_0x2c40('0x50')][_0x2c40('0x6f')][_0xea1c6c];socket[_0x2c40('0xa7')](_0x2c40('0x3a')+_[_0x2c40('0xa2')](_0x3892f5[_0x2c40('0x50')]['channel'][_0x2c40('0xa3')]())+_0x2c40('0xb1'),_0x4b674e);}return _0x4396a1;})['then'](function(){if(_0x3892f5[_0x2c40('0x50')]['channel']===_0x2c40('0xa9')){return db[_0x2c40('0xb2')][_0x2c40('0x45')]({'where':{'UserId':_0x3892f5[_0x2c40('0x68')]['id'],'VoiceQueueId':_0x3892f5[_0x2c40('0x50')][_0x2c40('0x6f')]},'individualHooks':!![]})[_0x2c40('0x37')](function(){return _0x2b76d;});}return _0x2b76d;})[_0x2c40('0x37')](respondWithStatusCode(_0xd61531,null))['catch'](handleError(_0xd61531,null));};exports[_0x2c40('0xb3')]=function(_0x4ba7e8,_0x1c8e4c,_0x2b1a70){_0x4ba7e8[_0x2c40('0x6c')]['userpic']=_0x4ba7e8[_0x2c40('0xb4')][_0x2c40('0xb5')];return db[_0x2c40('0x49')]['find']({'where':{'id':_0x4ba7e8['params']['id']}})['then'](handleEntityNotFound(_0x1c8e4c,null))[_0x2c40('0x37')](saveUpdates(_0x4ba7e8[_0x2c40('0x6c')],null))[_0x2c40('0x37')](respondWithResult(_0x1c8e4c,null))[_0x2c40('0x2b')](handleError(_0x1c8e4c,null));};exports[_0x2c40('0xb6')]=function(_0x23ff1b,_0x4eb108,_0x3eb552){var _0x5da2c0=path[_0x2c40('0xb7')](config[_0x2c40('0xb8')],_0x2c40('0xb9'));return db['User'][_0x2c40('0x42')]({'where':{'id':_0x23ff1b['params']['id']},'attributes':['id','userpic'],'raw':!![]})[_0x2c40('0x37')](handleEntityNotFound(_0x4eb108,null))['then'](function(_0x2436cb){if(_0x2436cb){if(_[_0x2c40('0x76')](_0x2436cb[_0x2c40('0xba')])){return _0x4eb108[_0x2c40('0xbb')](_0x5da2c0);}else{if(!fs['existsSync'](path[_0x2c40('0xb7')](config[_0x2c40('0xb8')],_0x2c40('0xbc'),_0x2436cb[_0x2c40('0xba')]))){return _0x4eb108[_0x2c40('0xbb')](_0x5da2c0);}return _0x4eb108[_0x2c40('0xbb')](path[_0x2c40('0xb7')](config[_0x2c40('0xb8')],_0x2c40('0xbc'),_0x2436cb[_0x2c40('0xba')]));}}})[_0x2c40('0x2b')](handleError(_0x4eb108,null));};exports[_0x2c40('0xbd')]=function(_0x337feb,_0x35d409,_0x4867fc){var _0x34215a={};var _0x57d271={};var _0x62e867;var _0x5cc955;return db['User'][_0x2c40('0x9b')]({'where':{'id':_0x337feb[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x35d409,null))['then'](function(_0x1f8b17){if(_0x1f8b17){_0x62e867=_0x1f8b17;_0x57d271[_0x2c40('0x4b')]=_['keys'](db['CmContact'][_0x2c40('0x4a')]);_0x57d271[_0x2c40('0x50')]=_['keys'](_0x337feb[_0x2c40('0x50')]);_0x57d271['filters']=_['intersection'](_0x57d271[_0x2c40('0x4b')],_0x57d271[_0x2c40('0x50')]);_0x34215a[_0x2c40('0x53')]=_['intersection'](_0x57d271[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x337feb['query'][_0x2c40('0x54')]));_0x34215a[_0x2c40('0x53')]=_0x34215a[_0x2c40('0x53')]['length']?_0x34215a[_0x2c40('0x53')]:_0x57d271['model'];_0x34215a[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x337feb['query'][_0x2c40('0x59')]);_0x34215a[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x337feb[_0x2c40('0x50')],_0x57d271[_0x2c40('0x51')]));if(_0x337feb[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x34215a[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0x34215a[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x34215a[_0x2c40('0x53')],function(_0x1e2421){var _0x37b016={};_0x37b016[_0x1e2421]={'$like':'%'+_0x337feb[_0x2c40('0x50')]['filter']+'%'};return _0x37b016;})});}_0x34215a=_[_0x2c40('0x63')]({},_0x34215a,_0x337feb['options']);return _0x62e867[_0x2c40('0xbd')](_0x34215a);}})[_0x2c40('0x37')](function(_0x5ec2f3){if(_0x5ec2f3){_0x5cc955=_0x5ec2f3[_0x2c40('0x69')];if(_0x337feb['query'][_0x2c40('0x55')](_0x2c40('0x64'))){_0x34215a[_0x2c40('0x65')]=[{'model':db[_0x2c40('0xbe')],'as':_0x2c40('0xbf'),'required':![]},{'model':db['Tag'],'as':_0x2c40('0xc0'),'attributes':['id','name','color'],'where':_0x337feb[_0x2c40('0x50')][_0x2c40('0xc1')]?{'id':_0x337feb[_0x2c40('0x50')][_0x2c40('0xc1')]}:undefined,'required':_0x337feb[_0x2c40('0x50')][_0x2c40('0xc1')]?!![]:![]}];}if(!_0x337feb[_0x2c40('0x50')][_0x2c40('0x55')]('nolimit')){_0x34215a['limit']=qs[_0x2c40('0x31')](_0x337feb[_0x2c40('0x50')]['limit']);_0x34215a[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x337feb[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x62e867['getContacts'](_0x34215a);}})[_0x2c40('0x37')](function(_0x524fbb){if(_0x524fbb){return _0x524fbb?{'count':_0x5cc955,'rows':_0x524fbb}:null;}})[_0x2c40('0x37')](respondWithResult(_0x35d409,null))[_0x2c40('0x2b')](handleError(_0x35d409,null));};exports['getQueues']=function(_0x4bc998,_0x83a847,_0x4b1917){var _0x2c080b;var _0x215fda;var _0x559bf4={};var _0x47139d;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x4bc998[_0x2c40('0x68')]['id']},'attributes':['id',_0x2c40('0x43'),'role']})['then'](handleEntityNotFound(_0x83a847,null))[_0x2c40('0x37')](function(_0x3654bf){if(!utils[_0x2c40('0xa0')](_0x4bc998[_0x2c40('0x50')]['channel'])){throw new db[(_0x2c40('0x95'))]['ValidationError'](_0x2c40('0xc2'));}_0x2c080b=_0x3654bf;var _0x14f23a={};_0x14f23a[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_[_0x2c40('0xa2')](_0x4bc998[_0x2c40('0x50')][_0x2c40('0x9d')])+'Queue'][_0x2c40('0x4a')]);_0x14f23a['query']=_[_0x2c40('0x4d')](_0x4bc998[_0x2c40('0x50')]);_0x14f23a['filters']=_[_0x2c40('0x52')](_0x14f23a[_0x2c40('0x4b')],_0x14f23a['query']);_0x559bf4['attributes']=_[_0x2c40('0x52')](_0x14f23a[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x4bc998[_0x2c40('0x50')][_0x2c40('0x54')]));_0x559bf4['attributes']=_0x559bf4[_0x2c40('0x53')][_0x2c40('0x69')]?_0x559bf4[_0x2c40('0x53')]:_0x14f23a[_0x2c40('0x4b')];_0x559bf4[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x4bc998[_0x2c40('0x50')][_0x2c40('0x59')]);_0x559bf4[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x4bc998['query'],_0x14f23a[_0x2c40('0x51')]));if(_0x4bc998[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x559bf4[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0x559bf4[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x559bf4[_0x2c40('0x53')],function(_0x100ce8){var _0x57029e={};_0x57029e[_0x100ce8]={'$like':'%'+_0x4bc998['query'][_0x2c40('0x5c')]+'%'};return _0x57029e;})});}_0x559bf4=_[_0x2c40('0x63')]({},_0x559bf4,_0x4bc998[_0x2c40('0x6a')]);switch(_0x2c080b[_0x2c40('0x41')]){case _0x2c40('0x72'):return db[_[_0x2c40('0xa2')](_0x4bc998['query'][_0x2c40('0x9d')])+_0x2c40('0xc3')][_0x2c40('0xc4')](_0x559bf4);case'user':case _0x2c40('0x3c'):return _0x2c080b['get'+_[_0x2c40('0xa2')](_0x4bc998[_0x2c40('0x50')][_0x2c40('0x9d')])+_0x2c40('0xa4')](_0x559bf4);default:throw new db[(_0x2c40('0x95'))]['ValidationError'](_0x2c40('0xc5'));}})['then'](function(_0x1ec8a4){_0x47139d=_0x1ec8a4[_0x2c40('0x69')];if(!_0x4bc998['query']['hasOwnProperty'](_0x2c40('0x56'))){_0x559bf4['limit']=qs[_0x2c40('0x31')](_0x4bc998[_0x2c40('0x50')][_0x2c40('0x31')]);_0x559bf4[_0x2c40('0x57')]=qs['offset'](_0x4bc998['query'][_0x2c40('0x57')]);}switch(_0x2c080b[_0x2c40('0x41')]){case _0x2c40('0x72'):return db[_[_0x2c40('0xa2')](_0x4bc998[_0x2c40('0x50')][_0x2c40('0x9d')])+_0x2c40('0xc3')][_0x2c40('0xc4')](_0x559bf4);case'user':case _0x2c40('0x3c'):return _0x2c080b[_0x2c40('0x38')+_[_0x2c40('0xa2')](_0x4bc998[_0x2c40('0x50')]['channel'])+_0x2c40('0xa4')](_0x559bf4);}})[_0x2c40('0x37')](function(_0x4bb847){return{'count':_0x47139d,'rows':_0x4bb847};})[_0x2c40('0x37')](respondWithResult(_0x83a847,null))[_0x2c40('0x2b')](handleError(_0x83a847,null));};exports[_0x2c40('0xc6')]=function(_0x2793da,_0x1d6d1c,_0x3e58f3){var _0x533e23={};var _0x3f898f={};var _0x68d34b;var _0x5e4a3c;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x2793da['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x1d6d1c,null))[_0x2c40('0x37')](function(_0x44e693){if(_0x44e693){_0x68d34b=_0x44e693;_0x3f898f[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_0x2c40('0xb2')]['rawAttributes']);_0x3f898f[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x2793da[_0x2c40('0x50')]);_0x3f898f[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x3f898f['model'],_0x3f898f[_0x2c40('0x50')]);_0x533e23[_0x2c40('0x53')]=_[_0x2c40('0x52')](_0x3f898f[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x2793da['query']['fields']));_0x533e23['attributes']=_0x533e23['attributes'][_0x2c40('0x69')]?_0x533e23['attributes']:_0x3f898f[_0x2c40('0x4b')];_0x533e23[_0x2c40('0x58')]=qs['sort'](_0x2793da[_0x2c40('0x50')][_0x2c40('0x59')]);_0x533e23[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x2793da[_0x2c40('0x50')],_0x3f898f[_0x2c40('0x51')]));if(_0x2793da[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x533e23[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0x533e23[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x533e23[_0x2c40('0x53')],function(_0x52dcdd){var _0xce5e02={};_0xce5e02[_0x52dcdd]={'$like':'%'+_0x2793da[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0xce5e02;})});}_0x533e23=_[_0x2c40('0x63')]({},_0x533e23,_0x2793da[_0x2c40('0x6a')]);return _0x68d34b[_0x2c40('0xc6')](_0x533e23);}})[_0x2c40('0x37')](function(_0x2cec3b){if(_0x2cec3b){_0x5e4a3c=_0x2cec3b[_0x2c40('0x69')];if(!_0x2793da[_0x2c40('0x50')][_0x2c40('0x55')](_0x2c40('0x56'))){_0x533e23[_0x2c40('0x31')]=qs['limit'](_0x2793da[_0x2c40('0x50')][_0x2c40('0x31')]);_0x533e23[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x2793da[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x68d34b[_0x2c40('0xc6')](_0x533e23);}})[_0x2c40('0x37')](function(_0x4acdc3){if(_0x4acdc3){return _0x4acdc3?{'count':_0x5e4a3c,'rows':_0x4acdc3}:null;}})[_0x2c40('0x37')](respondWithResult(_0x1d6d1c,null))['catch'](handleError(_0x1d6d1c,null));};exports[_0x2c40('0xc7')]=function(_0x1bea66,_0x40ce41,_0x1eba38){var _0x4379f0={};var _0x4e6d85={};var _0x5947be;var _0x4b5002;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x1bea66[_0x2c40('0x68')]['id']}})['then'](handleEntityNotFound(_0x40ce41,null))[_0x2c40('0x37')](function(_0x2508b2){if(_0x2508b2){_0x5947be=_0x2508b2;_0x4e6d85[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_0x2c40('0xc8')][_0x2c40('0x4a')]);_0x4e6d85[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x1bea66[_0x2c40('0x50')]);_0x4e6d85[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x4e6d85['model'],_0x4e6d85['query']);_0x4379f0['attributes']=_[_0x2c40('0x52')](_0x4e6d85[_0x2c40('0x4b')],qs['fields'](_0x1bea66[_0x2c40('0x50')][_0x2c40('0x54')]));_0x4379f0[_0x2c40('0x53')]=_0x4379f0[_0x2c40('0x53')][_0x2c40('0x69')]?_0x4379f0[_0x2c40('0x53')]:_0x4e6d85['model'];_0x4379f0[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x1bea66['query'][_0x2c40('0x59')]);_0x4379f0[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x1bea66[_0x2c40('0x50')],_0x4e6d85[_0x2c40('0x51')]));if(_0x1bea66[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x4379f0[_0x2c40('0x5a')]=_['merge'](_0x4379f0[_0x2c40('0x5a')],{'$or':_['map'](_0x4379f0[_0x2c40('0x53')],function(_0x3a1c08){var _0x2a6fec={};_0x2a6fec[_0x3a1c08]={'$like':'%'+_0x1bea66[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x2a6fec;})});}_0x4379f0=_[_0x2c40('0x63')]({},_0x4379f0,_0x1bea66[_0x2c40('0x6a')]);return _0x5947be[_0x2c40('0xc7')](_0x4379f0);}})[_0x2c40('0x37')](function(_0x53fd51){if(_0x53fd51){_0x4b5002=_0x53fd51[_0x2c40('0x69')];if(!_0x1bea66['query'][_0x2c40('0x55')]('nolimit')){_0x4379f0[_0x2c40('0x31')]=qs['limit'](_0x1bea66['query'][_0x2c40('0x31')]);_0x4379f0[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x1bea66[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x5947be[_0x2c40('0xc7')](_0x4379f0);}})[_0x2c40('0x37')](function(_0x2ead64){if(_0x2ead64){return _0x2ead64?{'count':_0x4b5002,'rows':_0x2ead64}:null;}})[_0x2c40('0x37')](respondWithResult(_0x40ce41,null))['catch'](handleError(_0x40ce41,null));};exports['getRecordings']=function(_0x19a765,_0x2929c2,_0x13f772){var _0x5cc0b5={'raw':!![],'where':{}};var _0x43b644={};var _0x3b9fc0={'count':0x0,'rows':[]};return db['User'][_0x2c40('0x9b')]({'where':{'id':_0x19a765[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x2929c2,null))['then'](function(_0x18cfb5){if(_0x18cfb5){_0x43b644[_0x2c40('0x4b')]=_['keys'](db[_0x2c40('0xc9')][_0x2c40('0x4a')]);_0x43b644[_0x2c40('0x50')]=_['keys'](_0x19a765[_0x2c40('0x50')]);_0x43b644[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x43b644[_0x2c40('0x4b')],_0x43b644[_0x2c40('0x50')]);_0x5cc0b5['attributes']=_[_0x2c40('0x52')](_0x43b644[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x19a765['query'][_0x2c40('0x54')]));_0x5cc0b5[_0x2c40('0x53')]=_0x5cc0b5[_0x2c40('0x53')][_0x2c40('0x69')]?_0x5cc0b5[_0x2c40('0x53')]:_0x43b644['model'];if(!_0x19a765[_0x2c40('0x50')][_0x2c40('0x55')](_0x2c40('0x56'))){_0x5cc0b5[_0x2c40('0x31')]=qs[_0x2c40('0x31')](_0x19a765['query'][_0x2c40('0x31')]);_0x5cc0b5[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x19a765[_0x2c40('0x50')][_0x2c40('0x57')]);}_0x5cc0b5[_0x2c40('0x58')]=qs['sort'](_0x19a765['query'][_0x2c40('0x59')]);_0x5cc0b5[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x19a765['query'],_0x43b644['filters']));_0x5cc0b5[_0x2c40('0x5a')][_0x2c40('0xca')]=_0x18cfb5['id'];if(_0x19a765[_0x2c40('0x50')]['filter']){_0x5cc0b5[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0x5cc0b5[_0x2c40('0x5a')],{'$or':_['map'](_0x5cc0b5[_0x2c40('0x53')],function(_0x1363a1){var _0x5a1f82={};_0x5a1f82[_0x1363a1]={'$like':'%'+_0x19a765[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x5a1f82;})});}_0x5cc0b5=_[_0x2c40('0x63')]({},_0x5cc0b5,_0x19a765[_0x2c40('0x6a')]);return db[_0x2c40('0xc9')][_0x2c40('0x30')]({'where':_0x5cc0b5['where']})[_0x2c40('0x37')](function(_0x285b23){_0x3b9fc0[_0x2c40('0x30')]=_0x285b23;if(_0x19a765[_0x2c40('0x50')][_0x2c40('0x64')]){_0x5cc0b5[_0x2c40('0x65')]=[{'all':!![]}];}return db[_0x2c40('0xc9')]['findAll'](_0x5cc0b5);})[_0x2c40('0x37')](function(_0x2a77cb){_0x3b9fc0[_0x2c40('0x66')]=_0x2a77cb;return _0x3b9fc0;});}})[_0x2c40('0x37')](respondWithFilteredResult(_0x2929c2,_0x5cc0b5))[_0x2c40('0x2b')](handleError(_0x2929c2,null));};exports['getScreenRecordings']=function(_0x1b7652,_0x1696b4,_0x45cb9d){var _0x42dc25={'raw':!![],'where':{}};var _0x321af6={};var _0x5938e4={'count':0x0,'rows':[]};return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x1b7652[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x1696b4,null))[_0x2c40('0x37')](function(_0x170890){if(_0x170890){_0x321af6[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_0x2c40('0xcb')][_0x2c40('0x4a')]);_0x321af6[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x1b7652['query']);_0x321af6[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x321af6['model'],_0x321af6['query']);_0x42dc25[_0x2c40('0x53')]=_[_0x2c40('0x52')](_0x321af6[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x1b7652[_0x2c40('0x50')]['fields']));_0x42dc25[_0x2c40('0x53')]=_0x42dc25['attributes'][_0x2c40('0x69')]?_0x42dc25['attributes']:_0x321af6[_0x2c40('0x4b')];if(!_0x1b7652['query'][_0x2c40('0x55')](_0x2c40('0x56'))){_0x42dc25['limit']=qs[_0x2c40('0x31')](_0x1b7652['query'][_0x2c40('0x31')]);_0x42dc25[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x1b7652[_0x2c40('0x50')][_0x2c40('0x57')]);}_0x42dc25[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x1b7652[_0x2c40('0x50')]['sort']);_0x42dc25[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x1b7652[_0x2c40('0x50')],_0x321af6[_0x2c40('0x51')]));_0x42dc25[_0x2c40('0x5a')][_0x2c40('0xca')]=_0x170890['id'];if(_0x1b7652[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x42dc25[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0x42dc25[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x42dc25[_0x2c40('0x53')],function(_0xd0fe6d){var _0x1696dc={};_0x1696dc[_0xd0fe6d]={'$like':'%'+_0x1b7652[_0x2c40('0x50')]['filter']+'%'};return _0x1696dc;})});}_0x42dc25=_[_0x2c40('0x63')]({},_0x42dc25,_0x1b7652[_0x2c40('0x6a')]);return db[_0x2c40('0xcb')]['count']({'where':_0x42dc25[_0x2c40('0x5a')]})[_0x2c40('0x37')](function(_0x1a8a29){_0x5938e4[_0x2c40('0x30')]=_0x1a8a29;if(_0x1b7652[_0x2c40('0x50')][_0x2c40('0x64')]){_0x42dc25['include']=[{'all':!![]}];}return db['ScreenRecording'][_0x2c40('0xc4')](_0x42dc25);})[_0x2c40('0x37')](function(_0x13e141){_0x5938e4[_0x2c40('0x66')]=_0x13e141;return _0x5938e4;});}})['then'](respondWithFilteredResult(_0x1696b4,_0x42dc25))[_0x2c40('0x2b')](handleError(_0x1696b4,null));};exports[_0x2c40('0xcc')]=function(_0x4024e6,_0x4b7497,_0x1817f9){var _0x1ef279={};var _0x18056b={};var _0x2233a7;var _0x5836ff;return db['User'][_0x2c40('0x9b')]({'where':{'id':_0x4024e6[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x4b7497,null))['then'](function(_0x36e11f){if(_0x36e11f){_0x2233a7=_0x36e11f;_0x18056b[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_0x2c40('0xcd')]['rawAttributes']);_0x18056b[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x4024e6[_0x2c40('0x50')]);_0x18056b['filters']=_['intersection'](_0x18056b[_0x2c40('0x4b')],_0x18056b[_0x2c40('0x50')]);_0x1ef279[_0x2c40('0x53')]=_['intersection'](_0x18056b[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x4024e6[_0x2c40('0x50')]['fields']));_0x1ef279[_0x2c40('0x53')]=_0x1ef279[_0x2c40('0x53')]['length']?_0x1ef279[_0x2c40('0x53')]:_0x18056b['model'];_0x1ef279[_0x2c40('0x58')]=qs['sort'](_0x4024e6['query'][_0x2c40('0x59')]);_0x1ef279[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x4024e6[_0x2c40('0x50')],_0x18056b['filters']));if(_0x4024e6[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x1ef279[_0x2c40('0x5a')]=_['merge'](_0x1ef279[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x1ef279[_0x2c40('0x53')],function(_0x3dfc42){var _0x57047c={};_0x57047c[_0x3dfc42]={'$like':'%'+_0x4024e6[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x57047c;})});}_0x1ef279=_[_0x2c40('0x63')]({},_0x1ef279,_0x4024e6[_0x2c40('0x6a')]);return _0x2233a7[_0x2c40('0xcc')](_0x1ef279);}})['then'](function(_0x297d45){if(_0x297d45){_0x5836ff=_0x297d45['length'];if(!_0x4024e6['query']['hasOwnProperty'](_0x2c40('0x56'))){_0x1ef279[_0x2c40('0x31')]=qs[_0x2c40('0x31')](_0x4024e6['query'][_0x2c40('0x31')]);_0x1ef279['offset']=qs[_0x2c40('0x57')](_0x4024e6[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x2233a7[_0x2c40('0xcc')](_0x1ef279);}})[_0x2c40('0x37')](function(_0x2df313){if(_0x2df313){return _0x2df313?{'count':_0x5836ff,'rows':_0x2df313}:null;}})[_0x2c40('0x37')](respondWithResult(_0x4b7497,null))[_0x2c40('0x2b')](handleError(_0x4b7497,null));};exports[_0x2c40('0xce')]=function(_0x52fa3d,_0x5ba53e,_0x4c7e94){var _0x1534a4={};var _0x2b8c23={};var _0x1ae29b;var _0x176b41;return db[_0x2c40('0x49')]['findOne']({'where':{'id':_0x52fa3d[_0x2c40('0x68')]['id']}})['then'](handleEntityNotFound(_0x5ba53e,null))[_0x2c40('0x37')](function(_0x415b36){if(_0x415b36){_0x1ae29b=_0x415b36;_0x2b8c23['model']=_['keys'](db[_0x2c40('0xcf')][_0x2c40('0x4a')]);_0x2b8c23[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x52fa3d[_0x2c40('0x50')]);_0x2b8c23['filters']=_[_0x2c40('0x52')](_0x2b8c23[_0x2c40('0x4b')],_0x2b8c23['query']);_0x1534a4[_0x2c40('0x53')]=_['intersection'](_0x2b8c23[_0x2c40('0x4b')],qs['fields'](_0x52fa3d[_0x2c40('0x50')][_0x2c40('0x54')]));_0x1534a4['attributes']=_0x1534a4[_0x2c40('0x53')]['length']?_0x1534a4[_0x2c40('0x53')]:_0x2b8c23[_0x2c40('0x4b')];_0x1534a4[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x52fa3d[_0x2c40('0x50')]['sort']);_0x1534a4[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x52fa3d['query'],_0x2b8c23[_0x2c40('0x51')]));if(_0x52fa3d['query']['filter']){_0x1534a4[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0x1534a4[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x1534a4[_0x2c40('0x53')],function(_0x5d3f83){var _0x447e71={};_0x447e71[_0x5d3f83]={'$like':'%'+_0x52fa3d[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x447e71;})});}_0x1534a4=_[_0x2c40('0x63')]({},_0x1534a4,_0x52fa3d[_0x2c40('0x6a')]);return _0x1ae29b[_0x2c40('0xce')](_0x1534a4);}})[_0x2c40('0x37')](function(_0x4cdbc9){if(_0x4cdbc9){_0x176b41=_0x4cdbc9[_0x2c40('0x69')];if(!_0x52fa3d['query']['hasOwnProperty']('nolimit')){_0x1534a4[_0x2c40('0x31')]=qs[_0x2c40('0x31')](_0x52fa3d[_0x2c40('0x50')][_0x2c40('0x31')]);_0x1534a4[_0x2c40('0x57')]=qs['offset'](_0x52fa3d[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x1ae29b['getOpenchannelInteractions'](_0x1534a4);}})[_0x2c40('0x37')](function(_0x1e494a){if(_0x1e494a){return _0x1e494a?{'count':_0x176b41,'rows':_0x1e494a}:null;}})[_0x2c40('0x37')](respondWithResult(_0x5ba53e,null))['catch'](handleError(_0x5ba53e,null));};exports[_0x2c40('0xd0')]=function(_0x3dff90,_0x23b051,_0x2f9f83){var _0x113a64={'raw':!![],'where':{}};var _0x5715ad={};var _0x59dda6={'count':0x0,'rows':[]};return db[_0x2c40('0x49')]['findOne']({'where':{'id':_0x3dff90['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x23b051,null))[_0x2c40('0x37')](function(_0x3aefa8){if(_0x3aefa8){_0x5715ad[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db['MailInteraction'][_0x2c40('0x4a')]);_0x5715ad['query']=_[_0x2c40('0x4d')](_0x3dff90['query']);_0x5715ad[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x5715ad[_0x2c40('0x4b')],_0x5715ad[_0x2c40('0x50')]);_0x113a64[_0x2c40('0x53')]=_[_0x2c40('0x52')](_0x5715ad[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x3dff90[_0x2c40('0x50')][_0x2c40('0x54')]));_0x113a64['attributes']=_0x113a64[_0x2c40('0x53')]['length']?_0x113a64[_0x2c40('0x53')]:_0x5715ad['model'];if(!_0x3dff90[_0x2c40('0x50')][_0x2c40('0x55')](_0x2c40('0x56'))){_0x113a64[_0x2c40('0x31')]=qs[_0x2c40('0x31')](_0x3dff90[_0x2c40('0x50')][_0x2c40('0x31')]);_0x113a64[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x3dff90[_0x2c40('0x50')]['offset']);}_0x113a64[_0x2c40('0x58')]=qs['sort'](_0x3dff90[_0x2c40('0x50')]['sort']);_0x113a64['where']=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x3dff90[_0x2c40('0x50')],_0x5715ad[_0x2c40('0x51')]));_0x113a64[_0x2c40('0x5a')][_0x2c40('0xca')]=_0x3aefa8['id'];if(_0x3dff90[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x113a64[_0x2c40('0x5a')]=_['merge'](_0x113a64[_0x2c40('0x5a')],{'$or':_['map'](_0x113a64[_0x2c40('0x53')],function(_0x42d9f1){var _0x1fe204={};_0x1fe204[_0x42d9f1]={'$like':'%'+_0x3dff90[_0x2c40('0x50')]['filter']+'%'};return _0x1fe204;})});}_0x113a64=_['merge']({},_0x113a64,_0x3dff90[_0x2c40('0x6a')]);return db[_0x2c40('0xd1')][_0x2c40('0x30')]({'where':_0x113a64[_0x2c40('0x5a')]})[_0x2c40('0x37')](function(_0x5373c7){_0x59dda6['count']=_0x5373c7;if(_0x3dff90[_0x2c40('0x50')][_0x2c40('0x64')]){_0x113a64[_0x2c40('0x65')]=[{'all':!![]}];}return db[_0x2c40('0xd1')][_0x2c40('0xc4')](_0x113a64);})['then'](function(_0x36df99){_0x59dda6[_0x2c40('0x66')]=_0x36df99;return _0x59dda6;});}})[_0x2c40('0x37')](respondWithFilteredResult(_0x23b051,_0x113a64))[_0x2c40('0x2b')](handleError(_0x23b051,null));};exports['getSmsInteractions']=function(_0xf4a63,_0x402409,_0x17f3e6){var _0x567e43={};var _0x437042={};var _0x14360d;var _0x51f61b;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0xf4a63['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x402409,null))[_0x2c40('0x37')](function(_0x51330d){if(_0x51330d){_0x14360d=_0x51330d;_0x437042[_0x2c40('0x4b')]=_['keys'](db[_0x2c40('0xd2')][_0x2c40('0x4a')]);_0x437042[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0xf4a63[_0x2c40('0x50')]);_0x437042['filters']=_['intersection'](_0x437042[_0x2c40('0x4b')],_0x437042[_0x2c40('0x50')]);_0x567e43[_0x2c40('0x53')]=_[_0x2c40('0x52')](_0x437042[_0x2c40('0x4b')],qs['fields'](_0xf4a63[_0x2c40('0x50')]['fields']));_0x567e43['attributes']=_0x567e43[_0x2c40('0x53')][_0x2c40('0x69')]?_0x567e43[_0x2c40('0x53')]:_0x437042[_0x2c40('0x4b')];_0x567e43['order']=qs[_0x2c40('0x59')](_0xf4a63[_0x2c40('0x50')]['sort']);_0x567e43['where']=qs[_0x2c40('0x51')](_['pick'](_0xf4a63[_0x2c40('0x50')],_0x437042[_0x2c40('0x51')]));if(_0xf4a63[_0x2c40('0x50')]['filter']){_0x567e43[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0x567e43[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x567e43[_0x2c40('0x53')],function(_0x11a68f){var _0x527ec1={};_0x527ec1[_0x11a68f]={'$like':'%'+_0xf4a63[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x527ec1;})});}_0x567e43=_['merge']({},_0x567e43,_0xf4a63['options']);return _0x14360d[_0x2c40('0xd3')](_0x567e43);}})['then'](function(_0x46a804){if(_0x46a804){_0x51f61b=_0x46a804[_0x2c40('0x69')];if(!_0xf4a63[_0x2c40('0x50')][_0x2c40('0x55')](_0x2c40('0x56'))){_0x567e43[_0x2c40('0x31')]=qs[_0x2c40('0x31')](_0xf4a63['query'][_0x2c40('0x31')]);_0x567e43['offset']=qs['offset'](_0xf4a63[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x14360d[_0x2c40('0xd3')](_0x567e43);}})['then'](function(_0x459697){if(_0x459697){return _0x459697?{'count':_0x51f61b,'rows':_0x459697}:null;}})['then'](respondWithResult(_0x402409,null))[_0x2c40('0x2b')](handleError(_0x402409,null));};exports[_0x2c40('0xd4')]=function(_0x75a463,_0x757ef5,_0x2e75a0){var _0x5d1716={};var _0x5397b7={};var _0x52c77e;var _0x222c44;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x75a463[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x757ef5,null))[_0x2c40('0x37')](function(_0x1ef634){if(_0x1ef634){_0x52c77e=_0x1ef634;_0x5397b7[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_0x2c40('0xd5')][_0x2c40('0x4a')]);_0x5397b7[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x75a463['query']);_0x5397b7[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x5397b7[_0x2c40('0x4b')],_0x5397b7[_0x2c40('0x50')]);_0x5d1716['attributes']=_[_0x2c40('0x52')](_0x5397b7[_0x2c40('0x4b')],qs['fields'](_0x75a463[_0x2c40('0x50')][_0x2c40('0x54')]));_0x5d1716[_0x2c40('0x53')]=_0x5d1716[_0x2c40('0x53')][_0x2c40('0x69')]?_0x5d1716[_0x2c40('0x53')]:_0x5397b7['model'];_0x5d1716[_0x2c40('0x58')]=qs['sort'](_0x75a463[_0x2c40('0x50')][_0x2c40('0x59')]);_0x5d1716[_0x2c40('0x5a')]=qs['filters'](_[_0x2c40('0x5b')](_0x75a463[_0x2c40('0x50')],_0x5397b7['filters']));if(_0x75a463[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x5d1716['where']=_[_0x2c40('0x63')](_0x5d1716['where'],{'$or':_[_0x2c40('0x3e')](_0x5d1716['attributes'],function(_0x3e0941){var _0x4c7c72={};_0x4c7c72[_0x3e0941]={'$like':'%'+_0x75a463['query']['filter']+'%'};return _0x4c7c72;})});}_0x5d1716=_['merge']({},_0x5d1716,_0x75a463[_0x2c40('0x6a')]);return _0x52c77e['getFaxInteractions'](_0x5d1716);}})['then'](function(_0x57b6fe){if(_0x57b6fe){_0x222c44=_0x57b6fe[_0x2c40('0x69')];if(!_0x75a463[_0x2c40('0x50')][_0x2c40('0x55')](_0x2c40('0x56'))){_0x5d1716[_0x2c40('0x31')]=qs['limit'](_0x75a463['query'][_0x2c40('0x31')]);_0x5d1716[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x75a463['query'][_0x2c40('0x57')]);}return _0x52c77e[_0x2c40('0xd4')](_0x5d1716);}})[_0x2c40('0x37')](function(_0x2c9b00){if(_0x2c9b00){return _0x2c9b00?{'count':_0x222c44,'rows':_0x2c9b00}:null;}})['then'](respondWithResult(_0x757ef5,null))[_0x2c40('0x2b')](handleError(_0x757ef5,null));};exports[_0x2c40('0xd6')]=function(_0x4600b5,_0x1bb9c9,_0x5025a1){var _0x58d368;var _0x24e136;var _0x3cc35a;var _0x2f058f=!_['isNil'](_0x4600b5[_0x2c40('0x68')]['id'])?_0x4600b5[_0x2c40('0x68')]['id']:!_[_0x2c40('0x76')](_0x4600b5['user']['id'])?_0x4600b5['user']['id']:null;return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x2f058f,'role':_0x2c40('0x3c')},'attributes':['id',_0x2c40('0x43'),_0x2c40('0xd7'),_0x2c40('0xd8'),_0x2c40('0x41'),_0x2c40('0x7a'),_0x2c40('0x9e')]})[_0x2c40('0x37')](handleEntityNotFound(_0x1bb9c9,null))[_0x2c40('0x37')](function(_0x53d95b){if(_0x53d95b){_0x58d368=_0x53d95b;if(_0x4600b5[_0x2c40('0x6c')][_0x2c40('0xad')]){_0x3cc35a=util[_0x2c40('0x77')](_0x2c40('0xd9'),_0x58d368[_0x4600b5['body'][_0x2c40('0xad')]]);}else if(_0x4600b5[_0x2c40('0x6c')][_0x2c40('0xda')]){_0x3cc35a=util['format'](_0x2c40('0xdb'),_0x4600b5['body'][_0x2c40('0xda')]);}else{_0x3cc35a=util['format'](_0x2c40('0xdb'),_0x58d368[_0x2c40('0x43')]);}socket['to'](util[_0x2c40('0x77')](_0x2c40('0xdc'),_0x58d368[_0x2c40('0x43')]))[_0x2c40('0xa7')](_0x2c40('0xdd'),{'ip':_0x4600b5['headers'][_0x2c40('0xde')]||_0x4600b5[_0x2c40('0xdf')]['remoteAddress']||_0x4600b5[_0x2c40('0xe0')][_0x2c40('0xe1')]||_0x4600b5['connection'][_0x2c40('0xe0')][_0x2c40('0xe1')]});return db['UserVoiceQueueRt'][_0x2c40('0x45')]({'where':{'membername':_0x58d368[_0x2c40('0x43')]},'individualHooks':!![]});}})[_0x2c40('0x37')](function(_0x3b09ec){if(_0x58d368){return _0x58d368[_0x2c40('0xe2')]({'raw':!![]});}})[_0x2c40('0x37')](function(_0x17ad72){var _0x4b91a7=[];if(_0x17ad72){_0x24e136=_0x17ad72;if(_0x24e136[_0x2c40('0x69')]){for(var _0x1a9fcd=0x0;_0x1a9fcd<_0x24e136['length'];_0x1a9fcd++){_0x4b91a7[_0x2c40('0xac')]({'membername':_0x58d368[_0x2c40('0x43')],'UserId':_0x58d368['id'],'queue_name':_0x24e136[_0x1a9fcd]['name'],'VoiceQueueId':_0x24e136[_0x1a9fcd]['id'],'interface':_0x3cc35a,'paused':_0x58d368[_0x2c40('0x9e')]||![],'penalty':_0x24e136[_0x1a9fcd][_0x2c40('0xe3')]||0x0});}return BPromise[_0x2c40('0xae')](_0x4b91a7,function(_0x42a699){return db[_0x2c40('0xb2')][_0x2c40('0xaf')](_0x42a699);});}}})[_0x2c40('0x37')](function(){return db['MemberReport'][_0x2c40('0xc4')]({'where':{'membername':_0x58d368[_0x2c40('0x43')],'exitAt':null}});})[_0x2c40('0x37')](function(_0x467857){var _0x578fc7=[];_0x467857[_0x2c40('0xe4')](function(_0x5c1dc1){_0x578fc7[_0x2c40('0xac')](_0x5c1dc1['update']({'exitAt':moment()[_0x2c40('0x77')](_0x2c40('0xe5'))}));});return BPromise[_0x2c40('0xe6')](_0x578fc7);})[_0x2c40('0x37')](function(){var _0x3d35c5=[];var _0x1af0a9=[];var _0x1eb227=utils[_0x2c40('0xe7')]();var _0x4261c9={'membername':_0x58d368[_0x2c40('0x43')],'interface':_0x3cc35a,'enterAt':moment()[_0x2c40('0x77')](_0x2c40('0xe5')),'role':_0x58d368[_0x2c40('0x41')],'internal':_0x58d368[_0x2c40('0x7a')]};_0x1eb227['forEach'](function(_0xd31355){_0x3d35c5[_0x2c40('0xac')](_['merge']({'channel':_0xd31355,'type':_0x2c40('0xe8'),'data1':_0x4600b5[_0x2c40('0x6c')][_0x2c40('0xe9')],'data2':_0x3cc35a},_0x4261c9));if(_0x58d368[_0x2c40('0x9e')]){_0x1af0a9[_0x2c40('0xac')](_[_0x2c40('0x63')]({'channel':_0xd31355,'type':_0x2c40('0xea'),'data1':_0x2c40('0xeb')},_0x4261c9));}});return db[_0x2c40('0xec')][_0x2c40('0x6b')](_0x3d35c5[_0x2c40('0xed')](_0x1af0a9),{'individualHooks':!![]});})['then'](function(){return _0x58d368['update']({'online':!![],'lastLoginAt':moment()['format'](_0x2c40('0xe5')),'voicePause':_0x58d368[_0x2c40('0x9e')]||![],'mailPause':_0x58d368[_0x2c40('0x9e')]||![],'chatPause':_0x58d368['loginInPause']||![],'faxPause':_0x58d368[_0x2c40('0x9e')]||![],'smsPause':_0x58d368[_0x2c40('0x9e')]||![],'openchannelPause':_0x58d368[_0x2c40('0x9e')]||![],'pauseType':_0x58d368[_0x2c40('0x9e')]?_0x2c40('0xeb'):null,'interface':_0x3cc35a,'lastPauseAt':moment()[_0x2c40('0x77')]('YYYY-MM-DD\x20HH:mm:ss')});})[_0x2c40('0x37')](function(_0x25e474){if(_0x4600b5[_0x2c40('0xee')]){return _0x5025a1();}else{return BPromise['resolve'](_0x25e474)['then'](respondWithResult(_0x1bb9c9,null));}})[_0x2c40('0x2b')](handleError(_0x1bb9c9,null));};exports[_0x2c40('0xef')]=function(_0x359588,_0x5ad9d4,_0x11f361){var _0x341e55;return db[_0x2c40('0x49')]['find']({'where':{'id':_0x359588['params']['id'],'role':_0x2c40('0x3c')},'attributes':['id',_0x2c40('0x43'),_0x2c40('0x41')]})[_0x2c40('0x37')](handleEntityNotFound(_0x5ad9d4,null))[_0x2c40('0x37')](function(_0x477062){if(_0x477062){_0x341e55=_0x477062;return db['UserVoiceQueueRt']['destroy']({'where':{'membername':_0x341e55[_0x2c40('0x43')]},'individualHooks':!![]});}})[_0x2c40('0x37')](function(){return db['MemberReport'][_0x2c40('0xc4')]({'where':{'membername':_0x341e55[_0x2c40('0x43')],'exitAt':null}});})[_0x2c40('0x37')](function(_0x573610){var _0x395504=[];_0x573610['forEach'](function(_0x5f5473){_0x395504['push'](_0x5f5473[_0x2c40('0x36')]({'exitAt':moment()[_0x2c40('0x77')](_0x2c40('0xe5'))}));});return BPromise[_0x2c40('0xe6')](_0x395504);})[_0x2c40('0x37')](function(){return _0x341e55[_0x2c40('0x36')]({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![],'interface':null});})[_0x2c40('0x37')](respondWithResult(_0x5ad9d4,null))['catch'](handleError(_0x5ad9d4,null));};exports['pause']=function(_0x1aec44,_0x57b416,_0x2afcab){var _0x4c2307;return db[_0x2c40('0xb2')][_0x2c40('0x36')]({'paused':0x1},{'where':{'UserId':_0x1aec44['params']['id']},'individualHooks':!![]})[_0x2c40('0x37')](function(){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x1aec44[_0x2c40('0x68')]['id'],'role':_0x2c40('0x3c')},'attributes':['id',_0x2c40('0x43'),'role','internal',_0x2c40('0xad')]});})['then'](handleEntityNotFound(_0x57b416,null))['then'](function(_0x13954a){if(_0x13954a){_0x4c2307=_0x13954a;return respondWithRpcPromise(_0x2c40('0xf0'),_0x2c40('0xf1'),{'id':_0x4c2307['id'],'name':_0x4c2307[_0x2c40('0x43')],'pause':!![]});}})[_0x2c40('0x37')](function(){if(_0x4c2307){return db['MemberReport']['findAll']({'where':{'membername':_0x4c2307[_0x2c40('0x43')],'type':'PAUSE','exitAt':null}});}})['then'](function(_0xf9a983){if(_0xf9a983['length']){var _0x553d30=moment()[_0x2c40('0x77')](_0x2c40('0xe5'));for(var _0x2d0e2e=0x0,_0x1cc617=_0xf9a983[_0x2c40('0x69')];_0x2d0e2e<_0x1cc617;_0x2d0e2e++){_0xf9a983[_0x2d0e2e]['updateAttributes']({'exitAt':_0x553d30});}}})[_0x2c40('0x37')](function(){var _0x431c70=[];var _0x44df7c=utils[_0x2c40('0xe7')]();_0x44df7c[_0x2c40('0xe4')](function(_0x198100){_0x431c70[_0x2c40('0xac')]({'channel':_0x198100,'membername':_0x4c2307[_0x2c40('0x43')],'interface':_[_0x2c40('0x76')](_0x4c2307[_0x2c40('0xad')])?util[_0x2c40('0x77')](_0x2c40('0xdb'),_0x4c2307[_0x2c40('0x43')]):_0x4c2307[_0x2c40('0xad')],'type':_0x2c40('0xea'),'enterAt':moment()[_0x2c40('0x77')](_0x2c40('0xe5')),'data1':_0x1aec44[_0x2c40('0x6c')]['type']||'DEFAULT\x20PAUSE','role':_0x4c2307[_0x2c40('0x41')],'internal':_0x4c2307['internal']});});return db[_0x2c40('0xec')][_0x2c40('0x6b')](_0x431c70,{'individualHooks':!![]});})[_0x2c40('0x37')](function(){return _0x4c2307[_0x2c40('0x36')]({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x1aec44[_0x2c40('0x6c')][_0x2c40('0x5d')]||_0x2c40('0xf2'),'lastPauseAt':moment()[_0x2c40('0x77')](_0x2c40('0xe5'))});})[_0x2c40('0x37')](respondWithResult(_0x57b416,null))[_0x2c40('0x2b')](handleError(_0x57b416,null));};exports[_0x2c40('0xf3')]=function(_0x10ba98,_0xd2d536,_0x41771d){var _0xf540d3;return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x10ba98[_0x2c40('0x68')]['id']},'attributes':['id','name','role',_0x2c40('0x9f'),_0x2c40('0xf4'),'chatPause',_0x2c40('0xf5'),_0x2c40('0xf6'),'smsPause',_0x2c40('0xf7'),_0x2c40('0xf8')]})[_0x2c40('0x37')](handleEntityNotFound(_0xd2d536,null))[_0x2c40('0x37')](function(_0x2bb799){if(_0x2bb799){_0xf540d3=_0x2bb799;if(_0x10ba98[_0x2c40('0x6c')][_0x2c40('0x9d')]&&!utils[_0x2c40('0xa0')](_0x10ba98[_0x2c40('0x6c')]['channel'])){throw new db[(_0x2c40('0x95'))][(_0x2c40('0x96'))](_0x2c40('0xc2'));}switch(_0x10ba98[_0x2c40('0x6c')][_0x2c40('0x9d')]){case _0x2c40('0xa9'):return respondWithRpcPromise(_0x2c40('0xf0'),_0x2c40('0xf3'),{'id':_0xf540d3['id'],'name':_0xf540d3[_0x2c40('0x43')],'pause':![]})[_0x2c40('0x37')](function(){return db[_0x2c40('0xb2')][_0x2c40('0x36')]({'paused':0x0},{'where':{'UserId':_0xf540d3['id']},'individualHooks':!![]});})['then'](function(){return db[_0x2c40('0xec')]['find']({'where':{'channel':_0x10ba98[_0x2c40('0x6c')][_0x2c40('0x9d')],'membername':_0xf540d3[_0x2c40('0x43')],'type':'PAUSE','exitAt':null}});})[_0x2c40('0x37')](function(_0x20ca26){if(_0x20ca26){return _0x20ca26[_0x2c40('0x36')]({'exitAt':moment()[_0x2c40('0x77')](_0x2c40('0xe5')),'data2':_0x2c40('0xf9')},{'individualHooks':!![]});}return null;})[_0x2c40('0x37')](function(){return _0xf540d3['update']({'voicePause':![]});});case'mail':case'chat':case'fax':case _0x2c40('0xfa'):case _0x2c40('0xfb'):return db[_0x2c40('0xec')][_0x2c40('0x42')]({'where':{'channel':_0x10ba98['body'][_0x2c40('0x9d')],'membername':_0xf540d3[_0x2c40('0x43')],'type':'PAUSE','exitAt':null}})[_0x2c40('0x37')](function(_0x443999){if(_0x443999){return _0x443999['update']({'exitAt':moment()[_0x2c40('0x77')]('YYYY-MM-DD\x20HH:mm:ss'),'data2':_0x2c40('0xf9')},{'individualHooks':!![]});}return null;})['then'](function(){var _0x6c464a={};_['set'](_0x6c464a,util[_0x2c40('0x77')](_0x2c40('0xfc'),_0x10ba98[_0x2c40('0x6c')][_0x2c40('0x9d')],_0x2c40('0xfd')),![]);return _0xf540d3[_0x2c40('0x36')](_0x6c464a);});default:return respondWithRpcPromise(_0x2c40('0xf0'),_0x2c40('0xf3'),{'id':_0xf540d3['id'],'name':_0xf540d3[_0x2c40('0x43')],'pause':![]})[_0x2c40('0x37')](function(){return db[_0x2c40('0xb2')][_0x2c40('0x36')]({'paused':0x0},{'where':{'UserId':_0xf540d3['id']}});})['then'](function(){return db[_0x2c40('0xec')][_0x2c40('0xc4')]({'where':{'membername':_0xf540d3[_0x2c40('0x43')],'type':_0x2c40('0xea'),'exitAt':null}});})['then'](function(_0x44d947){var _0x105e06=[];_0x44d947[_0x2c40('0xe4')](function(_0x5ad1b1){_0x105e06['push'](_0x5ad1b1['update']({'exitAt':moment()[_0x2c40('0x77')](_0x2c40('0xe5')),'data2':_0x2c40('0xf9')}));});return BPromise[_0x2c40('0xe6')](_0x105e06);})[_0x2c40('0x37')](function(){return _0xf540d3['update']({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0x2c40('0x37')](respondWithResult(_0xd2d536,null))[_0x2c40('0x2b')](handleError(_0xd2d536,null));};exports[_0x2c40('0xfe')]=function(_0x55057c,_0x3c19b3,_0x508d8e){var _0x17e97a={};var _0xe291c6={};var _0x54c437;var _0x14e5fe;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x55057c['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x3c19b3,null))[_0x2c40('0x37')](function(_0x371861){if(_0x371861){_0x54c437=_0x371861;_0xe291c6['model']=_[_0x2c40('0x4d')](db[_0x2c40('0xff')][_0x2c40('0x4a')]);_0xe291c6[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x55057c['query']);_0xe291c6[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0xe291c6['model'],_0xe291c6[_0x2c40('0x50')]);_0x17e97a['attributes']=_['intersection'](_0xe291c6[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x55057c[_0x2c40('0x50')]['fields']));_0x17e97a[_0x2c40('0x53')]=_0x17e97a[_0x2c40('0x53')][_0x2c40('0x69')]?_0x17e97a[_0x2c40('0x53')]:_0xe291c6[_0x2c40('0x4b')];_0x17e97a[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x55057c[_0x2c40('0x50')][_0x2c40('0x59')]);_0x17e97a['where']=qs['filters'](_[_0x2c40('0x5b')](_0x55057c[_0x2c40('0x50')],_0xe291c6[_0x2c40('0x51')]));if(_0x55057c['query'][_0x2c40('0x5c')]){_0x17e97a[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0x17e97a[_0x2c40('0x5a')],{'$or':_['map'](_0x17e97a['attributes'],function(_0x2483ad){var _0x54052a={};_0x54052a[_0x2483ad]={'$like':'%'+_0x55057c[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x54052a;})});}_0x17e97a=_['merge']({},_0x17e97a,_0x55057c['options']);return _0x54c437[_0x2c40('0xfe')](_0x17e97a);}})[_0x2c40('0x37')](function(_0x408e17){if(_0x408e17){_0x14e5fe=_0x408e17[_0x2c40('0x69')];if(!_0x55057c[_0x2c40('0x50')]['hasOwnProperty']('nolimit')){_0x17e97a[_0x2c40('0x31')]=qs['limit'](_0x55057c['query'][_0x2c40('0x31')]);_0x17e97a[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x55057c[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x54c437[_0x2c40('0xfe')](_0x17e97a);}})[_0x2c40('0x37')](function(_0x59c85b){if(_0x59c85b){return _0x59c85b?{'count':_0x14e5fe,'rows':_0x59c85b}:null;}})['then'](respondWithResult(_0x3c19b3,null))['catch'](handleError(_0x3c19b3,null));};exports['addTeams']=function(_0x24ef92,_0x276cd6,_0x140552){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x24ef92[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x276cd6,null))[_0x2c40('0x37')](function(_0x4d3515){if(_0x4d3515){return _0x4d3515[_0x2c40('0x100')](_0x24ef92['body']['ids'],_['omit'](_0x24ef92[_0x2c40('0x6c')],[_0x2c40('0x6f'),'id'])||{});}})['then'](respondWithResult(_0x276cd6,null))['catch'](handleError(_0x276cd6,null));};exports[_0x2c40('0x101')]=function(_0x608fb8,_0x5ec700,_0x495679){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x608fb8[_0x2c40('0x68')]['id']}})['then'](handleEntityNotFound(_0x5ec700,null))['then'](function(_0x227795){if(_0x227795){return _0x227795[_0x2c40('0x101')](_0x608fb8[_0x2c40('0x50')][_0x2c40('0x6f')]);}})['then'](respondWithStatusCode(_0x5ec700,null))['catch'](handleError(_0x5ec700,null));};exports['getLists']=function(_0x5d60d7,_0x47b6c6,_0x12e2f9){var _0x55b95b={};var _0x37e49e={};var _0x4443db;var _0x44ae47;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x5d60d7[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x47b6c6,null))[_0x2c40('0x37')](function(_0x3ad80c){if(_0x3ad80c){_0x4443db=_0x3ad80c;_0x37e49e[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_0x2c40('0xbe')][_0x2c40('0x4a')]);_0x37e49e[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x5d60d7['query']);_0x37e49e[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x37e49e[_0x2c40('0x4b')],_0x37e49e['query']);_0x55b95b['attributes']=_['intersection'](_0x37e49e[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x5d60d7[_0x2c40('0x50')][_0x2c40('0x54')]));_0x55b95b[_0x2c40('0x53')]=_0x55b95b[_0x2c40('0x53')][_0x2c40('0x69')]?_0x55b95b['attributes']:_0x37e49e['model'];_0x55b95b[_0x2c40('0x58')]=qs['sort'](_0x5d60d7['query'][_0x2c40('0x59')]);_0x55b95b[_0x2c40('0x5a')]=qs['filters'](_['pick'](_0x5d60d7[_0x2c40('0x50')],_0x37e49e[_0x2c40('0x51')]));if(_0x5d60d7[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x55b95b[_0x2c40('0x5a')]=_['merge'](_0x55b95b[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x55b95b[_0x2c40('0x53')],function(_0x6b32af){var _0x146b25={};_0x146b25[_0x6b32af]={'$like':'%'+_0x5d60d7[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x146b25;})});}_0x55b95b=_[_0x2c40('0x63')]({},_0x55b95b,_0x5d60d7['options']);return _0x4443db[_0x2c40('0x102')](_0x55b95b);}})[_0x2c40('0x37')](function(_0x6dd824){if(_0x6dd824){_0x44ae47=_0x6dd824[_0x2c40('0x69')];if(!_0x5d60d7[_0x2c40('0x50')]['hasOwnProperty'](_0x2c40('0x56'))){_0x55b95b[_0x2c40('0x31')]=qs[_0x2c40('0x31')](_0x5d60d7['query'][_0x2c40('0x31')]);_0x55b95b[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x5d60d7[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x4443db[_0x2c40('0x102')](_0x55b95b);}})[_0x2c40('0x37')](function(_0x2f4479){if(_0x2f4479){return _0x2f4479?{'count':_0x44ae47,'rows':_0x2f4479}:null;}})[_0x2c40('0x37')](respondWithResult(_0x47b6c6,null))['catch'](handleError(_0x47b6c6,null));};exports[_0x2c40('0x103')]=function(_0x527cd9,_0x534966,_0x348e76){var _0x41239a={};var _0x18a064={};var _0x136c03;var _0x36dc7f;return db[_0x2c40('0x49')]['findOne']({'where':{'id':_0x527cd9[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x534966,null))[_0x2c40('0x37')](function(_0x29a446){if(_0x29a446){_0x136c03=_0x29a446;_0x18a064['model']=_['keys'](db[_0x2c40('0x49')]['rawAttributes']);_0x18a064[_0x2c40('0x50')]=_['keys'](_0x527cd9['query']);_0x18a064[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x18a064[_0x2c40('0x4b')],_0x18a064[_0x2c40('0x50')]);_0x41239a[_0x2c40('0x53')]=_[_0x2c40('0x52')](_0x18a064[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x527cd9['query']['fields']));_0x41239a['attributes']=_0x41239a[_0x2c40('0x53')][_0x2c40('0x69')]?_0x41239a['attributes']:_0x18a064[_0x2c40('0x4b')];_0x41239a[_0x2c40('0x58')]=qs['sort'](_0x527cd9['query'][_0x2c40('0x59')]);_0x41239a['where']=qs['filters'](_[_0x2c40('0x5b')](_0x527cd9[_0x2c40('0x50')],_0x18a064[_0x2c40('0x51')]));if(_0x527cd9[_0x2c40('0x50')]['filter']){_0x41239a['where']=_[_0x2c40('0x63')](_0x41239a['where'],{'$or':_['map'](_0x41239a[_0x2c40('0x53')],function(_0xa86e6a){var _0x47a011={};_0x47a011[_0xa86e6a]={'$like':'%'+_0x527cd9[_0x2c40('0x50')]['filter']+'%'};return _0x47a011;})});}_0x41239a[_0x2c40('0x4b')]=db[_0x2c40('0x49')];_0x41239a['as']=_0x2c40('0x3b');_0x41239a=_[_0x2c40('0x63')]({},_0x41239a,_0x527cd9[_0x2c40('0x6a')]);return _0x136c03[_0x2c40('0xe2')]({'include':[_0x41239a]});}})[_0x2c40('0x37')](function(_0x41f02c){if(_0x41f02c){var _0x181c20={},_0x1427f7=[],_0x1c7142=0x0;for(var _0x38a16c=0x0;_0x38a16c<_0x41f02c[_0x2c40('0x69')];_0x38a16c+=0x1){for(var _0x321c55=0x0,_0x583a85;_0x321c55<_0x41f02c[_0x38a16c][_0x2c40('0x3b')][_0x2c40('0x69')];_0x321c55+=0x1){_0x583a85=_0x41f02c[_0x38a16c][_0x2c40('0x3b')][_0x321c55][_0x2c40('0x38')]({'plain':!![]});_0x181c20[_0x583a85['id']]=_0x583a85;}}_0x181c20=_['values'](_0x181c20);for(var _0x314052=qs[_0x2c40('0x57')](_0x527cd9[_0x2c40('0x50')][_0x2c40('0x57')]);_0x314052<_0x181c20[_0x2c40('0x69')]&&_0x1427f7[_0x2c40('0x69')]<qs[_0x2c40('0x31')](_0x527cd9[_0x2c40('0x50')][_0x2c40('0x31')]);_0x314052+=0x1){if(_0x181c20[_0x314052]){_0x1427f7[_0x2c40('0xac')](_0x181c20[_0x314052]);}}return{'count':_0x181c20['length'],'rows':_0x1427f7};}})[_0x2c40('0x37')](respondWithResult(_0x534966,null))['catch'](handleError(_0x534966,null));};exports[_0x2c40('0x45')]=function(_0x3620bf,_0x3241cc){if(_0x3620bf[_0x2c40('0x3a')]['id']==_0x3620bf[_0x2c40('0x68')]['id']){return _0x3241cc['status'](0x1f4)[_0x2c40('0x47')]({'message':_0x2c40('0x104')});}return db[_0x2c40('0x49')]['find']({'where':{'id':_0x3620bf[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x3241cc,null))[_0x2c40('0x37')](removeEntity(_0x3241cc,null))[_0x2c40('0x2b')](handleError(_0x3241cc,null));};exports[_0x2c40('0x105')]=function(_0x1f85a2,_0x2df9b2,_0x323375){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x1f85a2[_0x2c40('0x68')]['id']}})['then'](handleEntityNotFound(_0x2df9b2,null))[_0x2c40('0x37')](function(_0x403002){if(_0x403002){return _0x403002[_0x2c40('0x105')](_0x1f85a2['body'][_0x2c40('0x6f')],_['omit'](_0x1f85a2[_0x2c40('0x6c')],[_0x2c40('0x6f'),'id'])||{})[_0x2c40('0xa5')](function(){for(var _0x4c7b3b=0x0;_0x4c7b3b<_0x1f85a2[_0x2c40('0x6c')][_0x2c40('0x6f')][_0x2c40('0x69')];_0x4c7b3b+=0x1){socket[_0x2c40('0xa7')](_0x2c40('0x106'),{'ChatInteractionId':Number(_0x1f85a2[_0x2c40('0x6c')]['ids'][_0x4c7b3b]),'UserId':Number(_0x1f85a2[_0x2c40('0x68')]['id'])});}return _0x1f85a2[_0x2c40('0x6c')][_0x2c40('0x6f')];});}})[_0x2c40('0x37')](respondWithResult(_0x2df9b2,null))[_0x2c40('0x2b')](handleError(_0x2df9b2,null));};exports[_0x2c40('0x107')]=function(_0x59347a,_0x595cd7,_0x4e38b5){return db['User'][_0x2c40('0x42')]({'where':{'id':_0x59347a[_0x2c40('0x68')]['id']}})['then'](handleEntityNotFound(_0x595cd7,null))[_0x2c40('0x37')](function(_0x39efa9){if(_0x39efa9){return _0x39efa9[_0x2c40('0x107')](_0x59347a[_0x2c40('0x50')][_0x2c40('0x6f')])[_0x2c40('0x37')](function(){if(_[_0x2c40('0x108')](_0x59347a[_0x2c40('0x50')]['ids'])){for(var _0x2b1856=0x0;_0x2b1856<_0x59347a[_0x2c40('0x50')]['ids'][_0x2c40('0x69')];_0x2b1856+=0x1){socket[_0x2c40('0xa7')]('user_has_chat_interactions:remove',{'ChatInteractionId':Number(_0x59347a[_0x2c40('0x50')][_0x2c40('0x6f')][_0x2b1856]),'UserId':Number(_0x59347a[_0x2c40('0x68')]['id'])});}}else{socket[_0x2c40('0xa7')](_0x2c40('0x109'),{'ChatInteractionId':Number(_0x59347a['query'][_0x2c40('0x6f')]),'UserId':Number(_0x59347a[_0x2c40('0x68')]['id'])});}});}})[_0x2c40('0x37')](respondWithStatusCode(_0x595cd7,null))[_0x2c40('0x2b')](handleError(_0x595cd7,null));};exports['addMailInteractions']=function(_0x54d953,_0xe16738,_0x5c5d68){return db['User'][_0x2c40('0x42')]({'where':{'id':_0x54d953[_0x2c40('0x68')]['id']}})['then'](handleEntityNotFound(_0xe16738,null))[_0x2c40('0x37')](function(_0x450eac){if(_0x450eac){return _0x450eac[_0x2c40('0x10a')](_0x54d953['body'][_0x2c40('0x6f')],_[_0x2c40('0x10b')](_0x54d953[_0x2c40('0x6c')],['ids','id'])||{})['spread'](function(){for(var _0x3fccb1=0x0;_0x3fccb1<_0x54d953[_0x2c40('0x6c')][_0x2c40('0x6f')]['length'];_0x3fccb1+=0x1){socket[_0x2c40('0xa7')](_0x2c40('0x10c'),{'MailInteractionId':Number(_0x54d953[_0x2c40('0x6c')][_0x2c40('0x6f')][_0x3fccb1]),'UserId':Number(_0x54d953['params']['id'])});}return _0x54d953['body'][_0x2c40('0x6f')];});}})[_0x2c40('0x37')](respondWithResult(_0xe16738,null))[_0x2c40('0x2b')](handleError(_0xe16738,null));};exports[_0x2c40('0x10d')]=function(_0x54bc0c,_0x1ab932,_0x59f0dc){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x54bc0c[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x1ab932,null))[_0x2c40('0x37')](function(_0x23b95a){if(_0x23b95a){return _0x23b95a[_0x2c40('0x10d')](_0x54bc0c['query'][_0x2c40('0x6f')])['then'](function(){if(_[_0x2c40('0x108')](_0x54bc0c[_0x2c40('0x50')][_0x2c40('0x6f')])){for(var _0x357284=0x0;_0x357284<_0x54bc0c[_0x2c40('0x50')][_0x2c40('0x6f')][_0x2c40('0x69')];_0x357284+=0x1){socket['emit']('user_has_mail_interactions:remove',{'MailInteractionId':Number(_0x54bc0c[_0x2c40('0x50')][_0x2c40('0x6f')][_0x357284]),'UserId':Number(_0x54bc0c[_0x2c40('0x68')]['id'])});}}else{socket[_0x2c40('0xa7')](_0x2c40('0x10e'),{'MailInteractionId':Number(_0x54bc0c['query'][_0x2c40('0x6f')]),'UserId':Number(_0x54bc0c[_0x2c40('0x68')]['id'])});}});}})[_0x2c40('0x37')](respondWithStatusCode(_0x1ab932,null))[_0x2c40('0x2b')](handleError(_0x1ab932,null));};exports[_0x2c40('0x10f')]=function(_0x883285,_0x1c7ea7,_0x516e2c){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x883285[_0x2c40('0x68')]['id']}})['then'](handleEntityNotFound(_0x1c7ea7,null))[_0x2c40('0x37')](function(_0x2d063d){if(_0x2d063d){return _0x2d063d[_0x2c40('0x10f')](_0x883285[_0x2c40('0x6c')][_0x2c40('0x6f')],_[_0x2c40('0x10b')](_0x883285[_0x2c40('0x6c')],[_0x2c40('0x6f'),'id'])||{})[_0x2c40('0xa5')](function(){for(var _0x258378=0x0;_0x258378<_0x883285[_0x2c40('0x6c')][_0x2c40('0x6f')][_0x2c40('0x69')];_0x258378+=0x1){socket['emit'](_0x2c40('0x110'),{'FaxInteractionId':Number(_0x883285[_0x2c40('0x6c')][_0x2c40('0x6f')][_0x258378]),'UserId':Number(_0x883285[_0x2c40('0x68')]['id'])});}return _0x883285[_0x2c40('0x6c')]['ids'];});}})[_0x2c40('0x37')](respondWithResult(_0x1c7ea7,null))[_0x2c40('0x2b')](handleError(_0x1c7ea7,null));};exports[_0x2c40('0x111')]=function(_0x5ac56d,_0x2601b2,_0x1c5261){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x5ac56d[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x2601b2,null))[_0x2c40('0x37')](function(_0x4b268f){if(_0x4b268f){return _0x4b268f[_0x2c40('0x111')](_0x5ac56d[_0x2c40('0x50')][_0x2c40('0x6f')])[_0x2c40('0x37')](function(){if(_[_0x2c40('0x108')](_0x5ac56d[_0x2c40('0x50')]['ids'])){for(var _0x1b240d=0x0;_0x1b240d<_0x5ac56d['query']['ids'][_0x2c40('0x69')];_0x1b240d+=0x1){socket[_0x2c40('0xa7')](_0x2c40('0x112'),{'FaxInteractionId':Number(_0x5ac56d[_0x2c40('0x50')][_0x2c40('0x6f')][_0x1b240d]),'UserId':Number(_0x5ac56d[_0x2c40('0x68')]['id'])});}}else{socket['emit'](_0x2c40('0x112'),{'FaxInteractionId':Number(_0x5ac56d[_0x2c40('0x50')][_0x2c40('0x6f')]),'UserId':Number(_0x5ac56d['params']['id'])});}});}})[_0x2c40('0x37')](respondWithStatusCode(_0x2601b2,null))[_0x2c40('0x2b')](handleError(_0x2601b2,null));};exports['addSmsInteractions']=function(_0x126bf4,_0x45b806,_0x547a52){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x126bf4[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x45b806,null))[_0x2c40('0x37')](function(_0x5c64ac){if(_0x5c64ac){return _0x5c64ac[_0x2c40('0x113')](_0x126bf4['body']['ids'],_[_0x2c40('0x10b')](_0x126bf4[_0x2c40('0x6c')],[_0x2c40('0x6f'),'id'])||{})[_0x2c40('0xa5')](function(){for(var _0x116af7=0x0;_0x116af7<_0x126bf4[_0x2c40('0x6c')]['ids'][_0x2c40('0x69')];_0x116af7+=0x1){socket[_0x2c40('0xa7')](_0x2c40('0x114'),{'SmsInteractionId':Number(_0x126bf4[_0x2c40('0x6c')][_0x2c40('0x6f')][_0x116af7]),'UserId':Number(_0x126bf4[_0x2c40('0x68')]['id'])});}return _0x126bf4['body'][_0x2c40('0x6f')];});}})[_0x2c40('0x37')](respondWithResult(_0x45b806,null))['catch'](handleError(_0x45b806,null));};exports['removeSmsInteractions']=function(_0xf81aed,_0x107a9c,_0x230798){return db['User'][_0x2c40('0x42')]({'where':{'id':_0xf81aed['params']['id']}})['then'](handleEntityNotFound(_0x107a9c,null))[_0x2c40('0x37')](function(_0x4062fd){if(_0x4062fd){return _0x4062fd[_0x2c40('0x115')](_0xf81aed['query'][_0x2c40('0x6f')])[_0x2c40('0x37')](function(){if(_[_0x2c40('0x108')](_0xf81aed['query'][_0x2c40('0x6f')])){for(var _0x5e94d9=0x0;_0x5e94d9<_0xf81aed[_0x2c40('0x50')][_0x2c40('0x6f')]['length'];_0x5e94d9+=0x1){socket[_0x2c40('0xa7')](_0x2c40('0x116'),{'SmsInteractionId':Number(_0xf81aed[_0x2c40('0x50')][_0x2c40('0x6f')][_0x5e94d9]),'UserId':Number(_0xf81aed[_0x2c40('0x68')]['id'])});}}else{socket[_0x2c40('0xa7')](_0x2c40('0x116'),{'SmsInteractionId':Number(_0xf81aed['query'][_0x2c40('0x6f')]),'UserId':Number(_0xf81aed['params']['id'])});}});}})['then'](respondWithStatusCode(_0x107a9c,null))[_0x2c40('0x2b')](handleError(_0x107a9c,null));};exports[_0x2c40('0x117')]=function(_0x15d0ab,_0x521207,_0x26eb1c){return db[_0x2c40('0x49')]['find']({'where':{'id':_0x15d0ab[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x521207,null))[_0x2c40('0x37')](function(_0x5e1d66){if(_0x5e1d66){return _0x5e1d66[_0x2c40('0x117')](_0x15d0ab[_0x2c40('0x6c')]['ids'],_['omit'](_0x15d0ab[_0x2c40('0x6c')],['ids','id'])||{})['spread'](function(){for(var _0x5e0f3a=0x0;_0x5e0f3a<_0x15d0ab[_0x2c40('0x6c')][_0x2c40('0x6f')][_0x2c40('0x69')];_0x5e0f3a+=0x1){socket[_0x2c40('0xa7')]('user_has_openchannel_interactions:save',{'OpenchannelInteractionId':Number(_0x15d0ab['body'][_0x2c40('0x6f')][_0x5e0f3a]),'UserId':Number(_0x15d0ab[_0x2c40('0x68')]['id'])});}return _0x15d0ab[_0x2c40('0x6c')][_0x2c40('0x6f')];});}})['then'](respondWithResult(_0x521207,null))['catch'](handleError(_0x521207,null));};exports[_0x2c40('0x118')]=function(_0x397dea,_0x2dda85,_0x21c16f){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x397dea[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x2dda85,null))[_0x2c40('0x37')](function(_0x2e1291){if(_0x2e1291){return _0x2e1291[_0x2c40('0x118')](_0x397dea[_0x2c40('0x50')][_0x2c40('0x6f')])[_0x2c40('0x37')](function(){if(_['isArray'](_0x397dea[_0x2c40('0x50')]['ids'])){for(var _0x2e1b70=0x0;_0x2e1b70<_0x397dea[_0x2c40('0x50')][_0x2c40('0x6f')]['length'];_0x2e1b70+=0x1){socket[_0x2c40('0xa7')](_0x2c40('0x119'),{'OpenchannelInteractionId':Number(_0x397dea['query'][_0x2c40('0x6f')][_0x2e1b70]),'UserId':Number(_0x397dea[_0x2c40('0x68')]['id'])});}}else{socket[_0x2c40('0xa7')]('user_has_openchannel_interactions:remove',{'OpenchannelInteractionId':Number(_0x397dea['query'][_0x2c40('0x6f')]),'UserId':Number(_0x397dea[_0x2c40('0x68')]['id'])});}});}})[_0x2c40('0x37')](respondWithStatusCode(_0x2dda85,null))[_0x2c40('0x2b')](handleError(_0x2dda85,null));};exports[_0x2c40('0x11a')]=function(_0x1d92db,_0x4339e4,_0x5d4100){var _0x4c3d32={};var _0x2e5fbc={};var _0x505803;var _0xe4695d;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x1d92db['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x4339e4,null))[_0x2c40('0x37')](function(_0x5d286d){if(_0x5d286d){_0x505803=_0x5d286d;_0x2e5fbc['model']=_[_0x2c40('0x4d')](db['VoicePrefix']['rawAttributes']);_0x2e5fbc[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x1d92db[_0x2c40('0x50')]);_0x2e5fbc[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x2e5fbc[_0x2c40('0x4b')],_0x2e5fbc['query']);_0x4c3d32['attributes']=_[_0x2c40('0x52')](_0x2e5fbc[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x1d92db[_0x2c40('0x50')][_0x2c40('0x54')]));_0x4c3d32[_0x2c40('0x53')]=_0x4c3d32[_0x2c40('0x53')][_0x2c40('0x69')]?_0x4c3d32[_0x2c40('0x53')]:_0x2e5fbc[_0x2c40('0x4b')];_0x4c3d32[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x1d92db['query']['sort']);_0x4c3d32[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_['pick'](_0x1d92db[_0x2c40('0x50')],_0x2e5fbc[_0x2c40('0x51')]));if(_0x1d92db[_0x2c40('0x50')]['filter']){_0x4c3d32['where']=_['merge'](_0x4c3d32[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x4c3d32['attributes'],function(_0x5e71d1){var _0x22cbbb={};_0x22cbbb[_0x5e71d1]={'$like':'%'+_0x1d92db[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x22cbbb;})});}_0x4c3d32=_[_0x2c40('0x63')]({},_0x4c3d32,_0x1d92db[_0x2c40('0x6a')]);return _0x505803[_0x2c40('0x11a')](_0x4c3d32);}})[_0x2c40('0x37')](function(_0x19a3cf){if(_0x19a3cf){_0xe4695d=_0x19a3cf[_0x2c40('0x69')];if(!_0x1d92db['query'][_0x2c40('0x55')](_0x2c40('0x56'))){_0x4c3d32[_0x2c40('0x31')]=qs['limit'](_0x1d92db[_0x2c40('0x50')][_0x2c40('0x31')]);_0x4c3d32[_0x2c40('0x57')]=qs['offset'](_0x1d92db[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x505803[_0x2c40('0x11a')](_0x4c3d32);}})[_0x2c40('0x37')](function(_0x1d9018){if(_0x1d9018){return _0x1d9018?{'count':_0xe4695d,'rows':_0x1d9018}:null;}})[_0x2c40('0x37')](respondWithResult(_0x4339e4,null))[_0x2c40('0x2b')](handleError(_0x4339e4,null));};exports[_0x2c40('0x11b')]=function(_0x6eb3ba,_0x287ed8,_0x259fdb){var _0xad8897={};var _0x57228e={};var _0x14bd50;var _0x49e7b5;return db['User']['findOne']({'where':{'id':_0x6eb3ba['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x287ed8,null))[_0x2c40('0x37')](function(_0x29d2de){if(_0x29d2de){_0x14bd50=_0x29d2de;_0x57228e[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_0x2c40('0x11c')][_0x2c40('0x4a')]);_0x57228e['query']=_[_0x2c40('0x4d')](_0x6eb3ba['query']);_0x57228e[_0x2c40('0x51')]=_['intersection'](_0x57228e[_0x2c40('0x4b')],_0x57228e['query']);_0xad8897[_0x2c40('0x53')]=_[_0x2c40('0x52')](_0x57228e[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x6eb3ba[_0x2c40('0x50')][_0x2c40('0x54')]));_0xad8897[_0x2c40('0x53')]=_0xad8897[_0x2c40('0x53')]['length']?_0xad8897[_0x2c40('0x53')]:_0x57228e[_0x2c40('0x4b')];_0xad8897['order']=qs['sort'](_0x6eb3ba['query']['sort']);_0xad8897[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x6eb3ba[_0x2c40('0x50')],_0x57228e['filters']));if(_0x6eb3ba[_0x2c40('0x50')][_0x2c40('0x5c')]){_0xad8897['where']=_[_0x2c40('0x63')](_0xad8897[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0xad8897[_0x2c40('0x53')],function(_0xd7c03){var _0x2cb262={};_0x2cb262[_0xd7c03]={'$like':'%'+_0x6eb3ba[_0x2c40('0x50')]['filter']+'%'};return _0x2cb262;})});}_0xad8897=_[_0x2c40('0x63')]({},_0xad8897,_0x6eb3ba[_0x2c40('0x6a')]);return _0x14bd50[_0x2c40('0x11b')](_0xad8897);}})[_0x2c40('0x37')](function(_0x2aaa9e){if(_0x2aaa9e){_0x49e7b5=_0x2aaa9e[_0x2c40('0x69')];if(!_0x6eb3ba['query']['hasOwnProperty']('nolimit')){_0xad8897[_0x2c40('0x31')]=qs[_0x2c40('0x31')](_0x6eb3ba[_0x2c40('0x50')][_0x2c40('0x31')]);_0xad8897['offset']=qs['offset'](_0x6eb3ba[_0x2c40('0x50')]['offset']);}return _0x14bd50[_0x2c40('0x11b')](_0xad8897);}})[_0x2c40('0x37')](function(_0x228443){if(_0x228443){return _0x228443?{'count':_0x49e7b5,'rows':_0x228443}:null;}})[_0x2c40('0x37')](respondWithResult(_0x287ed8,null))['catch'](handleError(_0x287ed8,null));};exports[_0x2c40('0x11d')]=function(_0x16714f,_0x5711c3,_0x46864f){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x16714f[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x5711c3,null))[_0x2c40('0x37')](function(_0x295f75){if(_0x295f75){return _0x295f75[_0x2c40('0x11d')](_0x16714f[_0x2c40('0x6c')][_0x2c40('0x6f')],_[_0x2c40('0x10b')](_0x16714f[_0x2c40('0x6c')],[_0x2c40('0x6f'),'id'])||{});}})[_0x2c40('0x37')](respondWithResult(_0x5711c3,null))[_0x2c40('0x2b')](handleError(_0x5711c3,null));};exports['removeFaxAccounts']=function(_0x44d2f9,_0x8a9f8b,_0xc5adc9){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x44d2f9[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x8a9f8b,null))[_0x2c40('0x37')](function(_0x40c867){if(_0x40c867){return _0x40c867[_0x2c40('0x11e')](_0x44d2f9[_0x2c40('0x50')]['ids']);}})[_0x2c40('0x37')](respondWithStatusCode(_0x8a9f8b,null))[_0x2c40('0x2b')](handleError(_0x8a9f8b,null));};exports[_0x2c40('0x11f')]=function(_0x56a193,_0x1a1322,_0x2e11d4){var _0x41c20f={};var _0x564bbc={};var _0x35c4e0;var _0x3f4de3;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x56a193[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x1a1322,null))[_0x2c40('0x37')](function(_0x58a13b){if(_0x58a13b){_0x35c4e0=_0x58a13b;_0x564bbc[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_0x2c40('0x120')][_0x2c40('0x4a')]);_0x564bbc[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x56a193[_0x2c40('0x50')]);_0x564bbc[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x564bbc['model'],_0x564bbc[_0x2c40('0x50')]);_0x41c20f[_0x2c40('0x53')]=_['intersection'](_0x564bbc[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x56a193[_0x2c40('0x50')]['fields']));_0x41c20f[_0x2c40('0x53')]=_0x41c20f[_0x2c40('0x53')][_0x2c40('0x69')]?_0x41c20f[_0x2c40('0x53')]:_0x564bbc[_0x2c40('0x4b')];_0x41c20f[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x56a193[_0x2c40('0x50')]['sort']);_0x41c20f[_0x2c40('0x5a')]=qs['filters'](_[_0x2c40('0x5b')](_0x56a193[_0x2c40('0x50')],_0x564bbc[_0x2c40('0x51')]));if(_0x56a193[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x41c20f[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0x41c20f[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x41c20f[_0x2c40('0x53')],function(_0x29702b){var _0x2b2bd6={};_0x2b2bd6[_0x29702b]={'$like':'%'+_0x56a193[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x2b2bd6;})});}_0x41c20f=_[_0x2c40('0x63')]({},_0x41c20f,_0x56a193[_0x2c40('0x6a')]);return _0x35c4e0[_0x2c40('0x11f')](_0x41c20f);}})['then'](function(_0x51b94b){if(_0x51b94b){_0x3f4de3=_0x51b94b[_0x2c40('0x69')];if(!_0x56a193[_0x2c40('0x50')]['hasOwnProperty'](_0x2c40('0x56'))){_0x41c20f[_0x2c40('0x31')]=qs['limit'](_0x56a193[_0x2c40('0x50')][_0x2c40('0x31')]);_0x41c20f[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x56a193[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x35c4e0['getMailAccounts'](_0x41c20f);}})['then'](function(_0x147269){if(_0x147269){return _0x147269?{'count':_0x3f4de3,'rows':_0x147269}:null;}})[_0x2c40('0x37')](respondWithResult(_0x1a1322,null))[_0x2c40('0x2b')](handleError(_0x1a1322,null));};exports[_0x2c40('0x121')]=function(_0x276f2d,_0x28a772,_0x4a9be2){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x276f2d[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x28a772,null))[_0x2c40('0x37')](function(_0x2174e4){if(_0x2174e4){return _0x2174e4[_0x2c40('0x121')](_0x276f2d['body'][_0x2c40('0x6f')],_['omit'](_0x276f2d['body'],['ids','id'])||{});}})[_0x2c40('0x37')](respondWithResult(_0x28a772,null))[_0x2c40('0x2b')](handleError(_0x28a772,null));};exports['removeMailAccounts']=function(_0x251e9d,_0x5b8662,_0xd6547e){return db[_0x2c40('0x49')]['find']({'where':{'id':_0x251e9d[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x5b8662,null))[_0x2c40('0x37')](function(_0x109cf5){if(_0x109cf5){return _0x109cf5[_0x2c40('0x122')](_0x251e9d[_0x2c40('0x50')][_0x2c40('0x6f')]);}})[_0x2c40('0x37')](respondWithStatusCode(_0x5b8662,null))[_0x2c40('0x2b')](handleError(_0x5b8662,null));};exports[_0x2c40('0x123')]=function(_0x54d1de,_0x3d1c8c,_0x5d399f){var _0x58cdbb={};var _0x209f1f={};var _0x1a4650;var _0x310e51;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x54d1de['params']['id']}})['then'](handleEntityNotFound(_0x3d1c8c,null))[_0x2c40('0x37')](function(_0x461f26){if(_0x461f26){_0x1a4650=_0x461f26;_0x209f1f[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_0x2c40('0x124')]['rawAttributes']);_0x209f1f[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x54d1de[_0x2c40('0x50')]);_0x209f1f['filters']=_[_0x2c40('0x52')](_0x209f1f[_0x2c40('0x4b')],_0x209f1f[_0x2c40('0x50')]);_0x58cdbb['attributes']=_['intersection'](_0x209f1f['model'],qs[_0x2c40('0x54')](_0x54d1de[_0x2c40('0x50')]['fields']));_0x58cdbb['attributes']=_0x58cdbb[_0x2c40('0x53')][_0x2c40('0x69')]?_0x58cdbb[_0x2c40('0x53')]:_0x209f1f['model'];_0x58cdbb['order']=qs[_0x2c40('0x59')](_0x54d1de[_0x2c40('0x50')][_0x2c40('0x59')]);_0x58cdbb[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x54d1de[_0x2c40('0x50')],_0x209f1f[_0x2c40('0x51')]));if(_0x54d1de[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x58cdbb[_0x2c40('0x5a')]=_['merge'](_0x58cdbb[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x58cdbb[_0x2c40('0x53')],function(_0x25c6fe){var _0x1e0265={};_0x1e0265[_0x25c6fe]={'$like':'%'+_0x54d1de[_0x2c40('0x50')]['filter']+'%'};return _0x1e0265;})});}_0x58cdbb=_[_0x2c40('0x63')]({},_0x58cdbb,_0x54d1de[_0x2c40('0x6a')]);return _0x1a4650[_0x2c40('0x123')](_0x58cdbb);}})[_0x2c40('0x37')](function(_0x173f22){if(_0x173f22){_0x310e51=_0x173f22[_0x2c40('0x69')];if(!_0x54d1de[_0x2c40('0x50')][_0x2c40('0x55')]('nolimit')){_0x58cdbb[_0x2c40('0x31')]=qs[_0x2c40('0x31')](_0x54d1de[_0x2c40('0x50')]['limit']);_0x58cdbb[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x54d1de[_0x2c40('0x50')]['offset']);}return _0x1a4650[_0x2c40('0x123')](_0x58cdbb);}})[_0x2c40('0x37')](function(_0x436a61){if(_0x436a61){return _0x436a61?{'count':_0x310e51,'rows':_0x436a61}:null;}})[_0x2c40('0x37')](respondWithResult(_0x3d1c8c,null))[_0x2c40('0x2b')](handleError(_0x3d1c8c,null));};exports[_0x2c40('0x125')]=function(_0x4a8315,_0xc67275,_0x599ffa){return db['User']['find']({'where':{'id':_0x4a8315['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0xc67275,null))[_0x2c40('0x37')](function(_0x5198f8){if(_0x5198f8){return _0x5198f8[_0x2c40('0x125')](_0x4a8315[_0x2c40('0x6c')][_0x2c40('0x6f')],_[_0x2c40('0x10b')](_0x4a8315[_0x2c40('0x6c')],[_0x2c40('0x6f'),'id'])||{});}})[_0x2c40('0x37')](respondWithResult(_0xc67275,null))[_0x2c40('0x2b')](handleError(_0xc67275,null));};exports[_0x2c40('0x126')]=function(_0x157a4b,_0x4f97f6,_0x202ddf){return db[_0x2c40('0x49')]['find']({'where':{'id':_0x157a4b['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x4f97f6,null))[_0x2c40('0x37')](function(_0x321694){if(_0x321694){return _0x321694[_0x2c40('0x126')](_0x157a4b[_0x2c40('0x50')]['ids']);}})['then'](respondWithStatusCode(_0x4f97f6,null))['catch'](handleError(_0x4f97f6,null));};exports['getSmsAccounts']=function(_0x4f229b,_0x4ffa8a,_0x1c4091){var _0x36c7b6={};var _0x4f9d9e={};var _0x27ad49;var _0x3e0500;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x4f229b[_0x2c40('0x68')]['id']}})['then'](handleEntityNotFound(_0x4ffa8a,null))[_0x2c40('0x37')](function(_0xe61345){if(_0xe61345){_0x27ad49=_0xe61345;_0x4f9d9e[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db['SmsAccount'][_0x2c40('0x4a')]);_0x4f9d9e[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x4f229b[_0x2c40('0x50')]);_0x4f9d9e[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x4f9d9e['model'],_0x4f9d9e[_0x2c40('0x50')]);_0x36c7b6[_0x2c40('0x53')]=_[_0x2c40('0x52')](_0x4f9d9e[_0x2c40('0x4b')],qs[_0x2c40('0x54')](_0x4f229b[_0x2c40('0x50')][_0x2c40('0x54')]));_0x36c7b6[_0x2c40('0x53')]=_0x36c7b6['attributes']['length']?_0x36c7b6['attributes']:_0x4f9d9e[_0x2c40('0x4b')];_0x36c7b6[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x4f229b['query'][_0x2c40('0x59')]);_0x36c7b6[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x4f229b[_0x2c40('0x50')],_0x4f9d9e[_0x2c40('0x51')]));if(_0x4f229b[_0x2c40('0x50')]['filter']){_0x36c7b6[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0x36c7b6['where'],{'$or':_['map'](_0x36c7b6[_0x2c40('0x53')],function(_0x588c6d){var _0x5239d5={};_0x5239d5[_0x588c6d]={'$like':'%'+_0x4f229b[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x5239d5;})});}_0x36c7b6=_['merge']({},_0x36c7b6,_0x4f229b['options']);return _0x27ad49[_0x2c40('0x127')](_0x36c7b6);}})[_0x2c40('0x37')](function(_0x45f560){if(_0x45f560){_0x3e0500=_0x45f560[_0x2c40('0x69')];if(!_0x4f229b[_0x2c40('0x50')][_0x2c40('0x55')](_0x2c40('0x56'))){_0x36c7b6[_0x2c40('0x31')]=qs['limit'](_0x4f229b[_0x2c40('0x50')]['limit']);_0x36c7b6[_0x2c40('0x57')]=qs['offset'](_0x4f229b[_0x2c40('0x50')][_0x2c40('0x57')]);}return _0x27ad49[_0x2c40('0x127')](_0x36c7b6);}})['then'](function(_0x2d3374){if(_0x2d3374){return _0x2d3374?{'count':_0x3e0500,'rows':_0x2d3374}:null;}})[_0x2c40('0x37')](respondWithResult(_0x4ffa8a,null))['catch'](handleError(_0x4ffa8a,null));};exports['addSmsAccounts']=function(_0x183109,_0x3d908f,_0x3b4f52){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x183109['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x3d908f,null))['then'](function(_0x35cfdc){if(_0x35cfdc){return _0x35cfdc[_0x2c40('0x128')](_0x183109[_0x2c40('0x6c')]['ids'],_[_0x2c40('0x10b')](_0x183109[_0x2c40('0x6c')],[_0x2c40('0x6f'),'id'])||{});}})[_0x2c40('0x37')](respondWithResult(_0x3d908f,null))[_0x2c40('0x2b')](handleError(_0x3d908f,null));};exports[_0x2c40('0x129')]=function(_0x2ee1a6,_0x9995cb,_0x5aa082){return db[_0x2c40('0x49')]['find']({'where':{'id':_0x2ee1a6['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x9995cb,null))['then'](function(_0x22f1d4){if(_0x22f1d4){return _0x22f1d4['removeSmsAccounts'](_0x2ee1a6[_0x2c40('0x50')][_0x2c40('0x6f')]);}})['then'](respondWithStatusCode(_0x9995cb,null))[_0x2c40('0x2b')](handleError(_0x9995cb,null));};exports[_0x2c40('0x12a')]=function(_0x3b923b,_0xd4c129,_0x5b7dae){var _0xd6e777={};var _0x525004={};var _0x2b093c;var _0x1eb883;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x3b923b[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0xd4c129,null))[_0x2c40('0x37')](function(_0x3a3326){if(_0x3a3326){_0x2b093c=_0x3a3326;_0x525004[_0x2c40('0x4b')]=_[_0x2c40('0x4d')](db[_0x2c40('0x12b')][_0x2c40('0x4a')]);_0x525004[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x3b923b['query']);_0x525004[_0x2c40('0x51')]=_['intersection'](_0x525004[_0x2c40('0x4b')],_0x525004[_0x2c40('0x50')]);_0xd6e777[_0x2c40('0x53')]=_['intersection'](_0x525004['model'],qs['fields'](_0x3b923b[_0x2c40('0x50')]['fields']));_0xd6e777['attributes']=_0xd6e777[_0x2c40('0x53')][_0x2c40('0x69')]?_0xd6e777['attributes']:_0x525004[_0x2c40('0x4b')];_0xd6e777[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x3b923b[_0x2c40('0x50')]['sort']);_0xd6e777[_0x2c40('0x5a')]=qs['filters'](_[_0x2c40('0x5b')](_0x3b923b[_0x2c40('0x50')],_0x525004['filters']));if(_0x3b923b[_0x2c40('0x50')][_0x2c40('0x5c')]){_0xd6e777[_0x2c40('0x5a')]=_[_0x2c40('0x63')](_0xd6e777[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0xd6e777[_0x2c40('0x53')],function(_0x480d0f){var _0x2e54d2={};_0x2e54d2[_0x480d0f]={'$like':'%'+_0x3b923b[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x2e54d2;})});}_0xd6e777=_[_0x2c40('0x63')]({},_0xd6e777,_0x3b923b['options']);return _0x2b093c[_0x2c40('0x12a')](_0xd6e777);}})[_0x2c40('0x37')](function(_0xd76d5){if(_0xd76d5){_0x1eb883=_0xd76d5[_0x2c40('0x69')];if(!_0x3b923b['query'][_0x2c40('0x55')]('nolimit')){_0xd6e777[_0x2c40('0x31')]=qs[_0x2c40('0x31')](_0x3b923b[_0x2c40('0x50')][_0x2c40('0x31')]);_0xd6e777[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x3b923b['query']['offset']);}return _0x2b093c[_0x2c40('0x12a')](_0xd6e777);}})[_0x2c40('0x37')](function(_0x448809){if(_0x448809){return _0x448809?{'count':_0x1eb883,'rows':_0x448809}:null;}})[_0x2c40('0x37')](respondWithResult(_0xd4c129,null))[_0x2c40('0x2b')](handleError(_0xd4c129,null));};exports[_0x2c40('0x12c')]=function(_0x77595b,_0x17edf1,_0xaa14c6){return db['User'][_0x2c40('0x42')]({'where':{'id':_0x77595b[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x17edf1,null))['then'](function(_0x598dca){if(_0x598dca){return _0x598dca[_0x2c40('0x12c')](_0x77595b[_0x2c40('0x6c')][_0x2c40('0x6f')],_['omit'](_0x77595b[_0x2c40('0x6c')],[_0x2c40('0x6f'),'id'])||{});}})[_0x2c40('0x37')](respondWithResult(_0x17edf1,null))[_0x2c40('0x2b')](handleError(_0x17edf1,null));};exports['removeChatWebsites']=function(_0x18e715,_0x24361f,_0x487c41){return db[_0x2c40('0x49')]['find']({'where':{'id':_0x18e715[_0x2c40('0x68')]['id']}})['then'](handleEntityNotFound(_0x24361f,null))[_0x2c40('0x37')](function(_0x4fe1ac){if(_0x4fe1ac){return _0x4fe1ac[_0x2c40('0x12d')](_0x18e715['query'][_0x2c40('0x6f')]);}})[_0x2c40('0x37')](respondWithStatusCode(_0x24361f,null))[_0x2c40('0x2b')](handleError(_0x24361f,null));};exports['getSquareProjects']=function(_0x40ccb6,_0x50b5d6,_0x222c51){var _0x5830d5={};var _0x49feaf={};var _0x1f7b3d;var _0x1fb3d6;return db[_0x2c40('0x49')][_0x2c40('0x9b')]({'where':{'id':_0x40ccb6['params']['id']}})['then'](handleEntityNotFound(_0x50b5d6,null))['then'](function(_0x156c7d){if(_0x156c7d){_0x1f7b3d=_0x156c7d;_0x49feaf[_0x2c40('0x4b')]=_['keys'](db[_0x2c40('0x12e')][_0x2c40('0x4a')]);_0x49feaf[_0x2c40('0x50')]=_[_0x2c40('0x4d')](_0x40ccb6[_0x2c40('0x50')]);_0x49feaf[_0x2c40('0x51')]=_[_0x2c40('0x52')](_0x49feaf[_0x2c40('0x4b')],_0x49feaf[_0x2c40('0x50')]);_0x5830d5[_0x2c40('0x53')]=_['intersection'](_0x49feaf['model'],qs['fields'](_0x40ccb6[_0x2c40('0x50')][_0x2c40('0x54')]));_0x5830d5[_0x2c40('0x53')]=_0x5830d5['attributes']['length']?_0x5830d5['attributes']:_0x49feaf[_0x2c40('0x4b')];_0x5830d5[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x40ccb6[_0x2c40('0x50')][_0x2c40('0x59')]);_0x5830d5[_0x2c40('0x5a')]=qs['filters'](_[_0x2c40('0x5b')](_0x40ccb6[_0x2c40('0x50')],_0x49feaf[_0x2c40('0x51')]));if(_0x40ccb6[_0x2c40('0x50')]['filter']){_0x5830d5['where']=_[_0x2c40('0x63')](_0x5830d5[_0x2c40('0x5a')],{'$or':_[_0x2c40('0x3e')](_0x5830d5['attributes'],function(_0x217d9c){var _0x19627d={};_0x19627d[_0x217d9c]={'$like':'%'+_0x40ccb6[_0x2c40('0x50')]['filter']+'%'};return _0x19627d;})});}_0x5830d5=_[_0x2c40('0x63')]({},_0x5830d5,_0x40ccb6[_0x2c40('0x6a')]);return _0x1f7b3d['getSquareProjects'](_0x5830d5);}})[_0x2c40('0x37')](function(_0x37a979){if(_0x37a979){_0x1fb3d6=_0x37a979[_0x2c40('0x69')];if(!_0x40ccb6[_0x2c40('0x50')][_0x2c40('0x55')](_0x2c40('0x56'))){_0x5830d5[_0x2c40('0x31')]=qs['limit'](_0x40ccb6[_0x2c40('0x50')][_0x2c40('0x31')]);_0x5830d5[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x40ccb6['query'][_0x2c40('0x57')]);}return _0x1f7b3d[_0x2c40('0x12f')](_0x5830d5);}})['then'](function(_0x2b1481){if(_0x2b1481){return _0x2b1481?{'count':_0x1fb3d6,'rows':_0x2b1481}:null;}})[_0x2c40('0x37')](respondWithResult(_0x50b5d6,null))[_0x2c40('0x2b')](handleError(_0x50b5d6,null));};exports[_0x2c40('0x130')]=function(_0x29d098,_0x3e1dad,_0x1b14b6){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x29d098['params']['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x3e1dad,null))[_0x2c40('0x37')](function(_0x4e768f){if(_0x4e768f){return _0x4e768f[_0x2c40('0x130')](_0x29d098[_0x2c40('0x6c')]['ids'],_[_0x2c40('0x10b')](_0x29d098[_0x2c40('0x6c')],[_0x2c40('0x6f'),'id'])||{});}})[_0x2c40('0x37')](respondWithResult(_0x3e1dad,null))[_0x2c40('0x2b')](handleError(_0x3e1dad,null));};exports[_0x2c40('0x131')]=function(_0x3b2059,_0x59ce55,_0x154ba2){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x3b2059[_0x2c40('0x68')]['id']}})['then'](handleEntityNotFound(_0x59ce55,null))['then'](function(_0x147034){if(_0x147034){return _0x147034[_0x2c40('0x131')](_0x3b2059[_0x2c40('0x50')][_0x2c40('0x6f')]);}})['then'](respondWithStatusCode(_0x59ce55,null))['catch'](handleError(_0x59ce55,null));};exports[_0x2c40('0x132')]=function(_0x1e272b,_0x39e9b5){var _0x2cfc54={},_0x28591a={},_0x2da353={'count':0x0,'rows':[]};var _0x546362=db['CmHopper'][_0x2c40('0x4a')];_0x28591a['model']=_['keys'](_0x546362);_0x28591a['query']=_[_0x2c40('0x4d')](_0x1e272b[_0x2c40('0x50')]);_0x28591a['filters']=_[_0x2c40('0x52')](_0x28591a['model'],_0x28591a[_0x2c40('0x50')]);_0x28591a['filters']=_[_0x2c40('0xed')](_0x28591a[_0x2c40('0x51')],[_0x2c40('0x133'),'$or','$gt','$gte',_0x2c40('0x134'),_0x2c40('0x135'),'$ne',_0x2c40('0x136'),'$not','$between',_0x2c40('0x137'),_0x2c40('0x138'),_0x2c40('0x139'),_0x2c40('0x13a'),_0x2c40('0x13b'),_0x2c40('0x13c'),_0x2c40('0x13d'),_0x2c40('0x13a'),_0x2c40('0x13e'),_0x2c40('0x13f'),_0x2c40('0x140'),_0x2c40('0x141')]);_0x2cfc54[_0x2c40('0x53')]=_[_0x2c40('0x52')](_0x28591a['model'],qs[_0x2c40('0x54')](_0x1e272b[_0x2c40('0x50')][_0x2c40('0x54')]));_0x2cfc54[_0x2c40('0x53')]=_0x2cfc54[_0x2c40('0x53')][_0x2c40('0x69')]?_0x2cfc54[_0x2c40('0x53')]:_0x28591a[_0x2c40('0x4b')];if(!_0x1e272b[_0x2c40('0x50')][_0x2c40('0x55')](_0x2c40('0x56'))){_0x2cfc54[_0x2c40('0x31')]=qs[_0x2c40('0x31')](_0x1e272b[_0x2c40('0x50')][_0x2c40('0x31')]);_0x2cfc54[_0x2c40('0x57')]=qs[_0x2c40('0x57')](_0x1e272b[_0x2c40('0x50')][_0x2c40('0x57')]);}_0x2cfc54[_0x2c40('0x58')]=qs[_0x2c40('0x59')](_0x1e272b[_0x2c40('0x50')][_0x2c40('0x59')]);_0x2cfc54[_0x2c40('0x5a')]=qs[_0x2c40('0x51')](_[_0x2c40('0x5b')](_0x1e272b[_0x2c40('0x50')],_0x28591a[_0x2c40('0x51')]));if(_0x1e272b[_0x2c40('0x50')][_0x2c40('0x5c')]){_0x2cfc54[_0x2c40('0x5a')]=_['merge'](_0x2cfc54['where'],{'$or':_['map'](_0x2cfc54[_0x2c40('0x53')],function(_0xb9d3bc){var _0x201ea3={};_0x201ea3[_0xb9d3bc]={'$like':'%'+_0x1e272b[_0x2c40('0x50')][_0x2c40('0x5c')]+'%'};return _0x201ea3;})});}_0x2cfc54[_0x2c40('0x5a')]={'$and':[_0x2cfc54[_0x2c40('0x5a')],{'$or':[{'UserId':_0x1e272b['params']['id']},{'OwnerId':_0x1e272b[_0x2c40('0x68')]['id']}]}]};_0x2cfc54=_[_0x2c40('0x63')]({},_0x2cfc54,_0x1e272b[_0x2c40('0x6a')]);var _0x39322e={'where':_0x2cfc54[_0x2c40('0x5a')]};return db[_0x2c40('0x142')][_0x2c40('0x30')](_0x39322e)[_0x2c40('0x37')](function(_0x34c076){_0x2da353[_0x2c40('0x30')]=_0x34c076;if(_0x1e272b[_0x2c40('0x50')][_0x2c40('0x64')]){_0x2cfc54[_0x2c40('0x65')]=[{'attributes':['id',_0x2c40('0x143'),_0x2c40('0x144'),'phone'],'model':db[_0x2c40('0x145')],'as':_0x2c40('0x146')},{'attributes':['id',_0x2c40('0x43'),'dialActive'],'model':db[_0x2c40('0xaa')],'as':_0x2c40('0xc3')}];}return db[_0x2c40('0x142')][_0x2c40('0xc4')](_0x2cfc54);})[_0x2c40('0x37')](function(_0x8a6d88){_0x2da353[_0x2c40('0x66')]=_0x8a6d88;return _0x2da353;})[_0x2c40('0x37')](respondWithFilteredResult(_0x39e9b5,_0x2cfc54))['catch'](handleError(_0x39e9b5,null));};exports[_0x2c40('0x147')]=function(_0x12bdd6,_0x2caf54,_0xce08fa){if(!_[_0x2c40('0x76')](_0x12bdd6['user']['id'])&&(_0x12bdd6[_0x2c40('0x3a')][_0x2c40('0x41')]=='admin'||_0x12bdd6[_0x2c40('0x3a')][_0x2c40('0x41')]=='user')){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x12bdd6[_0x2c40('0x68')]['id']}})['then'](function(_0x50a001){var _0x1ceec7=authService['retrieveApiKey'](_0x50a001);if(_0x1ceec7)return _0x2caf54[_0x2c40('0x2d')](0xc8)[_0x2c40('0x2f')]({'api_key':_0x1ceec7});else return _0x2caf54[_0x2c40('0x2d')](0xcc)['json']({'message':_0x2c40('0x148')});})[_0x2c40('0x2b')](handleError(_0x2caf54,0x193));}else{return _0x2caf54[_0x2c40('0x2d')](0x191)[_0x2c40('0x2f')]({'message':_0x2c40('0x149')});}};exports['createApiKey']=function(_0x39267e,_0x2400cb,_0x40c206){var _0x46f81f;if(!_[_0x2c40('0x76')](_0x39267e['user']['id'])&&(_0x39267e[_0x2c40('0x3a')][_0x2c40('0x41')]=='admin'||_0x39267e[_0x2c40('0x3a')][_0x2c40('0x41')]==_0x2c40('0x3a'))){return db[_0x2c40('0x49')][_0x2c40('0x42')]({'where':{'id':_0x39267e[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](function(_0xd54902){return[_0xd54902,authService[_0x2c40('0x14a')](_0xd54902)];})[_0x2c40('0x37')](function(_0x1893ab){_0x46f81f=_0x1893ab;return db[_0x2c40('0x49')]['update']({'apiKeyNonce':_0x46f81f[0x0]['apiKeyNonce'],'apiKeyIat':_0x46f81f[0x0][_0x2c40('0x14b')]},{'where':{'id':_0x39267e[_0x2c40('0x68')]['id']}});})['then'](function(){return _0x2400cb['status'](0xc8)['json']({'api_key':_0x46f81f[0x1]});})['catch'](handleError(_0x2400cb,0x193));}else{return _0x2400cb['status'](0x191)[_0x2c40('0x2f')]({'message':'You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.'});}};exports[_0x2c40('0x14c')]=function(_0x2d1dc3,_0x205201,_0x79435f){if(!_[_0x2c40('0x76')](_0x2d1dc3[_0x2c40('0x3a')]['id'])&&(_0x2d1dc3[_0x2c40('0x3a')]['role']==_0x2c40('0x72')||_0x2d1dc3['user'][_0x2c40('0x41')]=='user')){return db['User'][_0x2c40('0x42')]({'where':{'id':_0x2d1dc3[_0x2c40('0x68')]['id']}})[_0x2c40('0x37')](handleEntityNotFound(_0x205201,null))[_0x2c40('0x37')](function(_0x4f605e){if(_0x4f605e&&_0x4f605e[_0x2c40('0x14d')]&&_0x4f605e[_0x2c40('0x14b')])return _0x4f605e;else throw{'message':_0x2c40('0x14e')};})[_0x2c40('0x37')](function(_0x176586){return db[_0x2c40('0x49')]['update']({'apiKeyNonce':null,'apiKeyIat':null},{'where':{'id':_0x2d1dc3['params']['id']}});})[_0x2c40('0x37')](respondWithStatusCode(_0x205201,0xc8))[_0x2c40('0x2b')](handleError(_0x205201,0x193));}else{return _0x205201[_0x2c40('0x2d')](0x191)[_0x2c40('0x2f')]({'message':_0x2c40('0x149')});}};
\ No newline at end of file
index aa06f63..43b8f34 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x90ec=['events','../../mysqldb','setMaxListeners','save','update','remove','emit','hasOwnProperty','exports'];(function(_0x34d4f5,_0xcf0684){var _0x1ba292=function(_0x40114a){while(--_0x40114a){_0x34d4f5['push'](_0x34d4f5['shift']());}};_0x1ba292(++_0xcf0684);}(_0x90ec,0x1d4));var _0xc90e=function(_0x467bb0,_0x1ee3f4){_0x467bb0=_0x467bb0-0x0;var _0x2dea67=_0x90ec[_0x467bb0];return _0x2dea67;};'use strict';var EventEmitter=require(_0xc90e('0x0'));var User=require(_0xc90e('0x1'))['db']['User'];var UserEvents=new EventEmitter();UserEvents[_0xc90e('0x2')](0x0);var events={'afterCreate':_0xc90e('0x3'),'afterUpdate':_0xc90e('0x4'),'afterDestroy':_0xc90e('0x5')};function emitEvent(_0x35f706){return function(_0x57acfe,_0x1c13c4,_0x207b98){UserEvents[_0xc90e('0x6')](_0x35f706+':'+_0x57acfe['id'],_0x57acfe);UserEvents['emit'](_0x35f706,_0x57acfe);_0x207b98(null);};}for(var e in events){if(events[_0xc90e('0x7')](e)){var event=events[e];User['hook'](e,emitEvent(event));}}module[_0xc90e('0x8')]=UserEvents;
\ No newline at end of file
+var _0x958a=['update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','setMaxListeners','save'];(function(_0xd8efb0,_0x2fb48b){var _0x3d962c=function(_0x2db9e4){while(--_0x2db9e4){_0xd8efb0['push'](_0xd8efb0['shift']());}};_0x3d962c(++_0x2fb48b);}(_0x958a,0x128));var _0xa958=function(_0x53b667,_0x4c7199){_0x53b667=_0x53b667-0x0;var _0x7e89d8=_0x958a[_0x53b667];return _0x7e89d8;};'use strict';var EventEmitter=require(_0xa958('0x0'));var User=require(_0xa958('0x1'))['db']['User'];var UserEvents=new EventEmitter();UserEvents[_0xa958('0x2')](0x0);var events={'afterCreate':_0xa958('0x3'),'afterUpdate':_0xa958('0x4'),'afterDestroy':_0xa958('0x5')};function emitEvent(_0x30f7c5){return function(_0x5194f8,_0x3424b0,_0x578481){UserEvents[_0xa958('0x6')](_0x30f7c5+':'+_0x5194f8['id'],_0x5194f8);UserEvents[_0xa958('0x6')](_0x30f7c5,_0x5194f8);_0x578481(null);};}for(var e in events){if(events[_0xa958('0x7')](e)){var event=events[e];User[_0xa958('0x8')](e,emitEvent(event));}}module[_0xa958('0x9')]=UserEvents;
\ No newline at end of file
index 2eaef12..61e7137 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0627=['_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','_XCALLY_MIXMONITOR_FORMAT=%s','name','SIP/%s,,tTxX','Hangup','defaults','VoiceChanSpy','findAll','then','concat','exports','models','User','users','utf8_bin','updateMd5Password','updatePassword','changed','password','internal','VoiceExtension','bulkCreate','catch','resolve','destroy','encryptPassword','function','Missing\x20Callback','randomBytes','toString','base64','salt','pbkdf2Sync','sha1','indexOf','provider','Invalid\x20password','makeSalt','md5secret',':asterisk:','bluebird','crypto','util','md5','lodash','./user.attributes','google','length','context','from-sip','system','format','push','merge','Set','CDR(type)=%s','chanspy','record','MixMonitor','${UNIQUEID}.%s,ab','recordingFormat','auth','ChanSpy','SIP/%s,%s','options','StopMixMonitor','wav','WAV','gsm','CDR(type)=internal','extensionMonitor','includes'];(function(_0x31e3cb,_0xd5ad7e){var _0x106d25=function(_0x1a5b9f){while(--_0x1a5b9f){_0x31e3cb['push'](_0x31e3cb['shift']());}};_0x106d25(++_0xd5ad7e);}(_0x0627,0x1d8));var _0x7062=function(_0x1cb18a,_0x33167a){_0x1cb18a=_0x1cb18a-0x0;var _0x22442e=_0x0627[_0x1cb18a];return _0x22442e;};'use strict';var BPromise=require(_0x7062('0x0'));var crypto=require(_0x7062('0x1'));var util=require(_0x7062('0x2'));var md5=require(_0x7062('0x3'));var _=require(_0x7062('0x4'));var attributes=require(_0x7062('0x5'));var authTypes=[_0x7062('0x6')];var validatePresenceOf=function(_0xf63df){return _0xf63df&&_0xf63df[_0x7062('0x7')];};var getChanSpyApplications=function(_0xb17aab,_0x73d82a,_0x4d6923){var _0x413df2={'context':_0xb17aab[_0x7062('0x8')]||_0x7062('0x9'),'type':_0x7062('0xa'),'isApp':![],'UserId':_0xb17aab['id']};var _0x2ca86e=[];for(var _0x50da50=0x0,_0xb531a0=0x1;_0x50da50<_0x4d6923['length'];_0x50da50++,_0xb531a0=0x1){var _0x1e40e5={'exten':util[_0x7062('0xb')]('%s%s',_0x4d6923[_0x50da50]['prefix'],_0x73d82a),'ChanSpyId':_0x4d6923[_0x50da50]['id']};_0x2ca86e[_0x7062('0xc')](_[_0x7062('0xd')]({'app':_0x7062('0xe'),'appdata':util['format'](_0x7062('0xf'),_0x7062('0x10')),'priority':_0xb531a0++},_0x413df2,_0x1e40e5));if(_0x4d6923[_0x50da50][_0x7062('0x11')]){_0x2ca86e[_0x7062('0xc')](_[_0x7062('0xd')]({'app':_0x7062('0x12'),'appdata':util[_0x7062('0xb')](_0x7062('0x13'),_0x4d6923[_0x50da50][_0x7062('0x14')]),'priority':_0xb531a0++},_0x413df2,_0x1e40e5));}if(_0x4d6923[_0x50da50][_0x7062('0x15')]){_0x2ca86e['push'](_[_0x7062('0xd')]({'app':'Authenticate','appdata':_0x4d6923[_0x50da50]['password'],'priority':_0xb531a0++},_0x413df2,_0x1e40e5));}_0x2ca86e[_0x7062('0xc')](_['merge']({'app':_0x7062('0x16'),'appdata':util[_0x7062('0xb')](_0x7062('0x17'),_0xb17aab['name'],_0x4d6923[_0x50da50][_0x7062('0x18')]?_0x4d6923[_0x50da50][_0x7062('0x18')]['join'](''):''),'priority':_0xb531a0++},_0x413df2,_0x1e40e5));if(_0x4d6923[_0x50da50][_0x7062('0x11')]){_0x2ca86e[_0x7062('0xc')](_['merge']({'app':_0x7062('0x19'),'priority':_0xb531a0++},_0x413df2,_0x1e40e5));}}return _0x2ca86e;};var getUserApplications=function(_0x3d16a2,_0x3c8afa){var _0x2d3b31=[_0x7062('0x1a'),_0x7062('0x1b'),_0x7062('0x1c')];var _0x206eb0={'context':_0x3d16a2['context']||_0x7062('0x9'),'exten':_0x3c8afa,'type':_0x7062('0xa'),'isApp':![],'UserId':_0x3d16a2['id']};var _0x15872f=[{'app':'Set','appdata':_0x7062('0x1d')}];if(_0x3d16a2[_0x7062('0x1e')]&&_[_0x7062('0x1f')](_0x2d3b31,_0x3d16a2[_0x7062('0x1e')])){_0x15872f['push']({'app':_0x7062('0xe'),'appdata':_0x7062('0x20')});_0x15872f[_0x7062('0xc')]({'app':'Set','appdata':util[_0x7062('0xb')](_0x7062('0x21'),_0x3d16a2['extensionMonitor'])});_0x15872f[_0x7062('0xc')]({'app':'Dial','appdata':util[_0x7062('0xb')]('SIP/%s,,tTxXU(xcally-mixmonitor-context)',_0x3d16a2[_0x7062('0x22')])});}else{_0x15872f[_0x7062('0xc')]({'app':'Dial','appdata':util[_0x7062('0xb')](_0x7062('0x23'),_0x3d16a2[_0x7062('0x22')])});}_0x15872f[_0x7062('0xc')]({'app':_0x7062('0x24')});for(var _0x172364=0x0;_0x172364<_0x15872f['length'];_0x172364++){_0x15872f[_0x172364]['priority']=_0x172364+0x1;_0x15872f[_0x172364]=_[_0x7062('0x25')](_0x15872f[_0x172364],_0x206eb0);}return _0x15872f;};var getChanSpyPromise=function(_0x4e5233,_0xd0a9de){return new BPromise(function(_0x5b075e,_0x2e7ff2){return _0x4e5233[_0x7062('0x26')][_0x7062('0x27')]()[_0x7062('0x28')](function(_0x3c5a77){if(_0x3c5a77){var _0x3ed404=getChanSpyApplications(_0xd0a9de,_0xd0a9de['internal'],_0x3c5a77);if(_0xd0a9de['internal']!=_0xd0a9de[_0x7062('0x22')]){_0x3ed404=_0x3ed404[_0x7062('0x29')](getChanSpyApplications(_0xd0a9de,_0xd0a9de[_0x7062('0x22')],_0x3c5a77));}return _0x5b075e(_0x3ed404);}return _0x5b075e([]);})['catch'](function(_0x4ef4f9){_0x2e7ff2(_0x4ef4f9);});});};module[_0x7062('0x2a')]=function(_0x475ec0,_0x1f8938){var _0x9f8dd2=_0x475ec0[_0x7062('0x2b')];return _0x475ec0['define'](_0x7062('0x2c'),attributes,{'tableName':_0x7062('0x2d'),'charset':'utf8','collate':_0x7062('0x2e'),'hooks':{'beforeCreate':function(_0x3763c5,_0xf73695,_0x21272a){_0x3763c5[_0x7062('0x2f')]();_0x3763c5[_0x7062('0x30')](_0x21272a);},'beforeUpdate':function(_0x41de8b,_0x1acf1b,_0x237d54){if(_0x41de8b[_0x7062('0x31')](_0x7062('0x32'))){_0x41de8b['updateMd5Password']();return _0x41de8b[_0x7062('0x30')](_0x237d54);}_0x237d54();},'afterCreate':function(_0xecc8e9,_0xa45b63,_0x2f6c4c){var _0x1cc1dc=getUserApplications(_0xecc8e9,_0xecc8e9[_0x7062('0x33')]);if(_0xecc8e9[_0x7062('0x33')]!=_0xecc8e9[_0x7062('0x22')]){_0x1cc1dc=_0x1cc1dc[_0x7062('0x29')](getUserApplications(_0xecc8e9,_0xecc8e9['name']));}return _0x9f8dd2[_0x7062('0x34')][_0x7062('0x35')](_0x1cc1dc)[_0x7062('0x28')](function(){if(_0xecc8e9[_0x7062('0x10')]){return getChanSpyPromise(_0x9f8dd2,_0xecc8e9);}})[_0x7062('0x28')](function(_0x494aa4){if(_0x494aa4&&_0x494aa4[_0x7062('0x7')]){return _0x9f8dd2[_0x7062('0x34')][_0x7062('0x35')](_0x494aa4);}})[_0x7062('0x28')](function(){_0x2f6c4c();})[_0x7062('0x36')](function(_0x4783e3){_0x2f6c4c(_0x4783e3);});},'afterUpdate':function(_0x376b94,_0x20f10e,_0x10b636){return BPromise[_0x7062('0x37')]()[_0x7062('0x28')](function(){if(_0x376b94[_0x7062('0x31')](_0x7062('0x10'))||_0x376b94[_0x7062('0x31')](_0x7062('0x8'))){return _0x9f8dd2[_0x7062('0x34')]['destroy']({'where':{'UserId':_0x376b94['id'],'type':_0x7062('0xa'),'ChanSpyId':{'$ne':null}}})[_0x7062('0x28')](function(){if(_0x376b94[_0x7062('0x10')]){return getChanSpyPromise(_0x9f8dd2,_0x376b94)['then'](function(_0x518087){if(_0x518087&&_0x518087['length']){return _0x9f8dd2[_0x7062('0x34')]['bulkCreate'](_0x518087);}});}});}})[_0x7062('0x28')](function(){if(_0x376b94['changed'](_0x7062('0x1e'))||_0x376b94[_0x7062('0x31')](_0x7062('0x8'))){return _0x9f8dd2[_0x7062('0x34')][_0x7062('0x38')]({'where':{'UserId':_0x376b94['id'],'type':'system','ChanSpyId':null}})[_0x7062('0x28')](function(){var _0x381e54=getUserApplications(_0x376b94,_0x376b94[_0x7062('0x33')]);if(_0x376b94['internal']!=_0x376b94[_0x7062('0x22')]){_0x381e54=_0x381e54['concat'](getUserApplications(_0x376b94,_0x376b94['name']));}return _0x9f8dd2[_0x7062('0x34')][_0x7062('0x35')](_0x381e54);});}})['then'](function(){_0x10b636();})[_0x7062('0x36')](function(_0x288aac){_0x10b636(_0x288aac);});},'afterDestroy':function(_0x5b42d0,_0x223727){return _0x9f8dd2['VoiceExtension']['destroy']({'where':{'UserId':_0x5b42d0['id'],'type':_0x7062('0xa')}});}},'instanceMethods':{'authenticate':function(_0x4c1119,_0x1ea119){if(!_0x1ea119){return this[_0x7062('0x32')]===this[_0x7062('0x39')](_0x4c1119);}var _0x4dcbfd=this;this['encryptPassword'](_0x4c1119,function(_0x2f8c6c,_0x1249c5){if(_0x2f8c6c){_0x1ea119(_0x2f8c6c);}if(_0x4dcbfd['password']===_0x1249c5){_0x1ea119(null,!![]);}else{_0x1ea119(null,![]);}});},'makeSalt':function(_0x3929c5,_0x53053f){var _0x55ddaa=0x10;if(typeof arguments[0x0]===_0x7062('0x3a')){_0x53053f=arguments[0x0];_0x3929c5=_0x55ddaa;}else if(typeof arguments[0x1]===_0x7062('0x3a')){_0x53053f=arguments[0x1];}else{throw new Error(_0x7062('0x3b'));}if(!_0x3929c5){_0x3929c5=_0x55ddaa;}return crypto[_0x7062('0x3c')](_0x3929c5,function(_0x5ca753,_0xeaff2a){if(_0x5ca753){_0x53053f(_0x5ca753);}return _0x53053f(null,_0xeaff2a[_0x7062('0x3d')](_0x7062('0x3e')));});},'encryptPassword':function(_0x5a1625,_0x379238){if(!_0x5a1625||!this[_0x7062('0x3f')]){return _0x379238?_0x379238(null):null;}var _0x22e04c=0x2710;var _0xecc9b7=0x40;var _0x38f495=new Buffer(this[_0x7062('0x3f')],_0x7062('0x3e'));if(!_0x379238){return crypto[_0x7062('0x40')](_0x5a1625,_0x38f495,_0x22e04c,_0xecc9b7,'sha1')[_0x7062('0x3d')]('base64');}return crypto['pbkdf2'](_0x5a1625,_0x38f495,_0x22e04c,_0xecc9b7,_0x7062('0x41'),function(_0x3beef2,_0x302126){if(_0x3beef2){_0x379238(_0x3beef2);}return _0x379238(null,_0x302126[_0x7062('0x3d')]('base64'));});},'updatePassword':function(_0x4f6a93){if(!this[_0x7062('0x32')]){return _0x4f6a93(null);}if(!validatePresenceOf(this['password'])&&authTypes[_0x7062('0x42')](this[_0x7062('0x43')])===-0x1){_0x4f6a93(new Error(_0x7062('0x44')));}var _0x454d8c=this;this[_0x7062('0x45')](function(_0x56ae18,_0x22a7fe){if(_0x56ae18){return _0x4f6a93(_0x56ae18);}_0x454d8c[_0x7062('0x3f')]=_0x22a7fe;_0x454d8c[_0x7062('0x39')](_0x454d8c[_0x7062('0x32')],function(_0x404543,_0x40f3a4){if(_0x404543){_0x4f6a93(_0x404543);}_0x454d8c[_0x7062('0x32')]=_0x40f3a4;_0x4f6a93(null);});});},'updateMd5Password':function(){this[_0x7062('0x46')]=md5(this[_0x7062('0x22')]+_0x7062('0x47')+this[_0x7062('0x32')]);return this[_0x7062('0x46')];}}});};
\ No newline at end of file
+var _0x976a=['define','User','users','utf8','utf8_bin','updateMd5Password','updatePassword','VoiceExtension','then','bulkCreate','catch','resolve','changed','destroy','encryptPassword','Missing\x20Callback','randomBytes','toString','base64','salt','pbkdf2Sync','sha1','indexOf','provider','Invalid\x20password','makeSalt','md5secret',':asterisk:','bluebird','crypto','util','lodash','./user.attributes','google','length','from-sip','system','format','%s%s','Set','CDR(type)=%s','chanspy','push','merge','MixMonitor','${UNIQUEID}.%s,ab','recordingFormat','Authenticate','password','ChanSpy','SIP/%s,%s','name','options','join','record','wav','WAV','context','extensionMonitor','includes','_XCALLY_MIXMONITOR_FORMAT=%s','Dial','SIP/%s,,tTxXU(xcally-mixmonitor-context)','Hangup','priority','defaults','VoiceChanSpy','findAll','internal','concat','exports','models'];(function(_0x2919eb,_0x39652c){var _0xd9c73b=function(_0x4a5c55){while(--_0x4a5c55){_0x2919eb['push'](_0x2919eb['shift']());}};_0xd9c73b(++_0x39652c);}(_0x976a,0xf4));var _0xa976=function(_0x459ee0,_0x1e950d){_0x459ee0=_0x459ee0-0x0;var _0x1b87c8=_0x976a[_0x459ee0];return _0x1b87c8;};'use strict';var BPromise=require(_0xa976('0x0'));var crypto=require(_0xa976('0x1'));var util=require(_0xa976('0x2'));var md5=require('md5');var _=require(_0xa976('0x3'));var attributes=require(_0xa976('0x4'));var authTypes=[_0xa976('0x5')];var validatePresenceOf=function(_0x3a593b){return _0x3a593b&&_0x3a593b[_0xa976('0x6')];};var getChanSpyApplications=function(_0x44884f,_0x3e7e23,_0x54e955){var _0x47af97={'context':_0x44884f['context']||_0xa976('0x7'),'type':_0xa976('0x8'),'isApp':![],'UserId':_0x44884f['id']};var _0x12a073=[];for(var _0x1a9983=0x0,_0xc3661d=0x1;_0x1a9983<_0x54e955[_0xa976('0x6')];_0x1a9983++,_0xc3661d=0x1){var _0x42a83a={'exten':util[_0xa976('0x9')](_0xa976('0xa'),_0x54e955[_0x1a9983]['prefix'],_0x3e7e23),'ChanSpyId':_0x54e955[_0x1a9983]['id']};_0x12a073['push'](_['merge']({'app':_0xa976('0xb'),'appdata':util[_0xa976('0x9')](_0xa976('0xc'),_0xa976('0xd')),'priority':_0xc3661d++},_0x47af97,_0x42a83a));if(_0x54e955[_0x1a9983]['record']){_0x12a073[_0xa976('0xe')](_[_0xa976('0xf')]({'app':_0xa976('0x10'),'appdata':util[_0xa976('0x9')](_0xa976('0x11'),_0x54e955[_0x1a9983][_0xa976('0x12')]),'priority':_0xc3661d++},_0x47af97,_0x42a83a));}if(_0x54e955[_0x1a9983]['auth']){_0x12a073[_0xa976('0xe')](_[_0xa976('0xf')]({'app':_0xa976('0x13'),'appdata':_0x54e955[_0x1a9983][_0xa976('0x14')],'priority':_0xc3661d++},_0x47af97,_0x42a83a));}_0x12a073[_0xa976('0xe')](_[_0xa976('0xf')]({'app':_0xa976('0x15'),'appdata':util[_0xa976('0x9')](_0xa976('0x16'),_0x44884f[_0xa976('0x17')],_0x54e955[_0x1a9983][_0xa976('0x18')]?_0x54e955[_0x1a9983]['options'][_0xa976('0x19')](''):''),'priority':_0xc3661d++},_0x47af97,_0x42a83a));if(_0x54e955[_0x1a9983][_0xa976('0x1a')]){_0x12a073[_0xa976('0xe')](_['merge']({'app':'StopMixMonitor','priority':_0xc3661d++},_0x47af97,_0x42a83a));}}return _0x12a073;};var getUserApplications=function(_0x3f2cd5,_0x36b47a){var _0x3ca2dd=[_0xa976('0x1b'),_0xa976('0x1c'),'gsm'];var _0x456e0d={'context':_0x3f2cd5[_0xa976('0x1d')]||_0xa976('0x7'),'exten':_0x36b47a,'type':_0xa976('0x8'),'isApp':![],'UserId':_0x3f2cd5['id']};var _0x44f7d4=[{'app':'Set','appdata':'CDR(type)=internal'}];if(_0x3f2cd5[_0xa976('0x1e')]&&_[_0xa976('0x1f')](_0x3ca2dd,_0x3f2cd5['extensionMonitor'])){_0x44f7d4[_0xa976('0xe')]({'app':'Set','appdata':'_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}'});_0x44f7d4[_0xa976('0xe')]({'app':_0xa976('0xb'),'appdata':util[_0xa976('0x9')](_0xa976('0x20'),_0x3f2cd5[_0xa976('0x1e')])});_0x44f7d4[_0xa976('0xe')]({'app':_0xa976('0x21'),'appdata':util['format'](_0xa976('0x22'),_0x3f2cd5['name'])});}else{_0x44f7d4[_0xa976('0xe')]({'app':_0xa976('0x21'),'appdata':util[_0xa976('0x9')]('SIP/%s,,tTxX',_0x3f2cd5['name'])});}_0x44f7d4[_0xa976('0xe')]({'app':_0xa976('0x23')});for(var _0x2d426b=0x0;_0x2d426b<_0x44f7d4[_0xa976('0x6')];_0x2d426b++){_0x44f7d4[_0x2d426b][_0xa976('0x24')]=_0x2d426b+0x1;_0x44f7d4[_0x2d426b]=_[_0xa976('0x25')](_0x44f7d4[_0x2d426b],_0x456e0d);}return _0x44f7d4;};var getChanSpyPromise=function(_0x1fc83d,_0x3072ec){return new BPromise(function(_0x55d3c5,_0x5b7b2d){return _0x1fc83d[_0xa976('0x26')][_0xa976('0x27')]()['then'](function(_0x56444b){if(_0x56444b){var _0x1e8978=getChanSpyApplications(_0x3072ec,_0x3072ec['internal'],_0x56444b);if(_0x3072ec[_0xa976('0x28')]!=_0x3072ec[_0xa976('0x17')]){_0x1e8978=_0x1e8978[_0xa976('0x29')](getChanSpyApplications(_0x3072ec,_0x3072ec[_0xa976('0x17')],_0x56444b));}return _0x55d3c5(_0x1e8978);}return _0x55d3c5([]);})['catch'](function(_0x576c45){_0x5b7b2d(_0x576c45);});});};module[_0xa976('0x2a')]=function(_0x55bd1d,_0x2b0c0a){var _0x2c915b=_0x55bd1d[_0xa976('0x2b')];return _0x55bd1d[_0xa976('0x2c')](_0xa976('0x2d'),attributes,{'tableName':_0xa976('0x2e'),'charset':_0xa976('0x2f'),'collate':_0xa976('0x30'),'hooks':{'beforeCreate':function(_0xc55ccb,_0xc4128,_0x3c3dcd){_0xc55ccb[_0xa976('0x31')]();_0xc55ccb[_0xa976('0x32')](_0x3c3dcd);},'beforeUpdate':function(_0x23a5b8,_0x49c7ae,_0x30d132){if(_0x23a5b8['changed'](_0xa976('0x14'))){_0x23a5b8[_0xa976('0x31')]();return _0x23a5b8[_0xa976('0x32')](_0x30d132);}_0x30d132();},'afterCreate':function(_0x391c84,_0xf8789f,_0x3f9996){var _0x1fde80=getUserApplications(_0x391c84,_0x391c84[_0xa976('0x28')]);if(_0x391c84[_0xa976('0x28')]!=_0x391c84[_0xa976('0x17')]){_0x1fde80=_0x1fde80[_0xa976('0x29')](getUserApplications(_0x391c84,_0x391c84[_0xa976('0x17')]));}return _0x2c915b[_0xa976('0x33')]['bulkCreate'](_0x1fde80)[_0xa976('0x34')](function(){if(_0x391c84[_0xa976('0xd')]){return getChanSpyPromise(_0x2c915b,_0x391c84);}})[_0xa976('0x34')](function(_0x545320){if(_0x545320&&_0x545320[_0xa976('0x6')]){return _0x2c915b[_0xa976('0x33')][_0xa976('0x35')](_0x545320);}})[_0xa976('0x34')](function(){_0x3f9996();})[_0xa976('0x36')](function(_0x4a2623){_0x3f9996(_0x4a2623);});},'afterUpdate':function(_0x36ff09,_0x48f82d,_0x287c65){return BPromise[_0xa976('0x37')]()['then'](function(){if(_0x36ff09[_0xa976('0x38')](_0xa976('0xd'))||_0x36ff09['changed'](_0xa976('0x1d'))){return _0x2c915b[_0xa976('0x33')]['destroy']({'where':{'UserId':_0x36ff09['id'],'type':_0xa976('0x8'),'ChanSpyId':{'$ne':null}}})['then'](function(){if(_0x36ff09[_0xa976('0xd')]){return getChanSpyPromise(_0x2c915b,_0x36ff09)[_0xa976('0x34')](function(_0x4ca748){if(_0x4ca748&&_0x4ca748['length']){return _0x2c915b[_0xa976('0x33')][_0xa976('0x35')](_0x4ca748);}});}});}})[_0xa976('0x34')](function(){if(_0x36ff09[_0xa976('0x38')](_0xa976('0x1e'))||_0x36ff09[_0xa976('0x38')](_0xa976('0x1d'))){return _0x2c915b[_0xa976('0x33')][_0xa976('0x39')]({'where':{'UserId':_0x36ff09['id'],'type':_0xa976('0x8'),'ChanSpyId':null}})[_0xa976('0x34')](function(){var _0x32073d=getUserApplications(_0x36ff09,_0x36ff09[_0xa976('0x28')]);if(_0x36ff09[_0xa976('0x28')]!=_0x36ff09[_0xa976('0x17')]){_0x32073d=_0x32073d[_0xa976('0x29')](getUserApplications(_0x36ff09,_0x36ff09[_0xa976('0x17')]));}return _0x2c915b[_0xa976('0x33')]['bulkCreate'](_0x32073d);});}})[_0xa976('0x34')](function(){_0x287c65();})[_0xa976('0x36')](function(_0x1e0086){_0x287c65(_0x1e0086);});},'afterDestroy':function(_0x206076,_0x1d5181){return _0x2c915b[_0xa976('0x33')][_0xa976('0x39')]({'where':{'UserId':_0x206076['id'],'type':'system'}});}},'instanceMethods':{'authenticate':function(_0x51ee60,_0x494424){if(!_0x494424){return this[_0xa976('0x14')]===this[_0xa976('0x3a')](_0x51ee60);}var _0x4b2558=this;this[_0xa976('0x3a')](_0x51ee60,function(_0x41a073,_0x434c85){if(_0x41a073){_0x494424(_0x41a073);}if(_0x4b2558[_0xa976('0x14')]===_0x434c85){_0x494424(null,!![]);}else{_0x494424(null,![]);}});},'makeSalt':function(_0x325399,_0x3859e1){var _0xbd305=0x10;if(typeof arguments[0x0]==='function'){_0x3859e1=arguments[0x0];_0x325399=_0xbd305;}else if(typeof arguments[0x1]==='function'){_0x3859e1=arguments[0x1];}else{throw new Error(_0xa976('0x3b'));}if(!_0x325399){_0x325399=_0xbd305;}return crypto[_0xa976('0x3c')](_0x325399,function(_0x3fd28a,_0x4920c9){if(_0x3fd28a){_0x3859e1(_0x3fd28a);}return _0x3859e1(null,_0x4920c9[_0xa976('0x3d')](_0xa976('0x3e')));});},'encryptPassword':function(_0x304c6a,_0xf547d9){if(!_0x304c6a||!this['salt']){return _0xf547d9?_0xf547d9(null):null;}var _0x37f2c3=0x2710;var _0x3017cd=0x40;var _0x565d0c=new Buffer(this[_0xa976('0x3f')],'base64');if(!_0xf547d9){return crypto[_0xa976('0x40')](_0x304c6a,_0x565d0c,_0x37f2c3,_0x3017cd,_0xa976('0x41'))[_0xa976('0x3d')](_0xa976('0x3e'));}return crypto['pbkdf2'](_0x304c6a,_0x565d0c,_0x37f2c3,_0x3017cd,_0xa976('0x41'),function(_0x6ff46e,_0x4f7c5){if(_0x6ff46e){_0xf547d9(_0x6ff46e);}return _0xf547d9(null,_0x4f7c5[_0xa976('0x3d')]('base64'));});},'updatePassword':function(_0x263e03){if(!this['password']){return _0x263e03(null);}if(!validatePresenceOf(this[_0xa976('0x14')])&&authTypes[_0xa976('0x42')](this[_0xa976('0x43')])===-0x1){_0x263e03(new Error(_0xa976('0x44')));}var _0x14969f=this;this[_0xa976('0x45')](function(_0x39901d,_0x81af3){if(_0x39901d){return _0x263e03(_0x39901d);}_0x14969f[_0xa976('0x3f')]=_0x81af3;_0x14969f[_0xa976('0x3a')](_0x14969f[_0xa976('0x14')],function(_0x2aed6b,_0x3bfd82){if(_0x2aed6b){_0x263e03(_0x2aed6b);}_0x14969f[_0xa976('0x14')]=_0x3bfd82;_0x263e03(null);});});},'updateMd5Password':function(){this[_0xa976('0x46')]=md5(this[_0xa976('0x17')]+_0xa976('0x47')+this[_0xa976('0x14')]);return this['md5secret'];}}});};
\ No newline at end of file
index 784074b..15ccd81 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-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(_0x2d1a56,_0x3d5b06){var _0x534d4a=function(_0x6a2c7b){while(--_0x6a2c7b){_0x2d1a56['push'](_0x2d1a56['shift']());}};_0x534d4a(++_0x3d5b06);}(_0xb10b,0x12a));var _0xbb10=function(_0x4599b6,_0x40c254){_0x4599b6=_0x4599b6-0x0;var _0x2e014c=_0xb10b[_0x4599b6];return _0x2e014c;};'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
+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(_0x18b701,_0x53950b){var _0x282456=function(_0x2281b6){while(--_0x2281b6){_0x18b701['push'](_0x18b701['shift']());}};_0x282456(++_0x53950b);}(_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});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
index f69e8d9..41a1be9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb1c0=['save','remove','update','removeListener','user:'];(function(_0x4ca89a,_0x33ffb8){var _0xfeb04d=function(_0x513820){while(--_0x513820){_0x4ca89a['push'](_0x4ca89a['shift']());}};_0xfeb04d(++_0x33ffb8);}(_0xb1c0,0x17c));var _0x0b1c=function(_0x3e5086,_0x48f4a2){_0x3e5086=_0x3e5086-0x0;var _0xfeb102=_0xb1c0[_0x3e5086];return _0xfeb102;};'use strict';var UserEvents=require('./user.events');var events=[_0x0b1c('0x0'),_0x0b1c('0x1'),_0x0b1c('0x2')];function createListener(_0x1f524b,_0x34ef44){return function(_0x40c3c9){_0x34ef44['emit'](_0x1f524b,_0x40c3c9);};}function removeListener(_0x5163d9,_0x203615){return function(){UserEvents[_0x0b1c('0x3')](_0x5163d9,_0x203615);};}exports['register']=function(_0x47668a){for(var _0x1ff80c=0x0,_0x8a4292=events['length'];_0x1ff80c<_0x8a4292;_0x1ff80c++){var _0x2715b1=events[_0x1ff80c];var _0x276a0d=createListener(_0x0b1c('0x4')+_0x2715b1,_0x47668a);UserEvents['on'](_0x2715b1,_0x276a0d);}};
\ No newline at end of file
+var _0xdfd7=['./user.events','save','update','emit','removeListener','register'];(function(_0x37a9d7,_0x2b6fde){var _0x1343d3=function(_0x3bde45){while(--_0x3bde45){_0x37a9d7['push'](_0x37a9d7['shift']());}};_0x1343d3(++_0x2b6fde);}(_0xdfd7,0x10e));var _0x7dfd=function(_0x1851f9,_0x53a424){_0x1851f9=_0x1851f9-0x0;var _0x1c1729=_0xdfd7[_0x1851f9];return _0x1c1729;};'use strict';var UserEvents=require(_0x7dfd('0x0'));var events=[_0x7dfd('0x1'),'remove',_0x7dfd('0x2')];function createListener(_0x1b1d1e,_0x3628ea){return function(_0x5441b4){_0x3628ea[_0x7dfd('0x3')](_0x1b1d1e,_0x5441b4);};}function removeListener(_0x1a90f5,_0x297b7e){return function(){UserEvents[_0x7dfd('0x4')](_0x1a90f5,_0x297b7e);};}exports[_0x7dfd('0x5')]=function(_0x3e4a79){for(var _0x2c8531=0x0,_0x3ce334=events['length'];_0x2c8531<_0x3ce334;_0x2c8531++){var _0x1adcd1=events[_0x2c8531];var _0x2179b9=createListener('user:'+_0x1adcd1,_0x3e4a79);UserEvents['on'](_0x1adcd1,_0x2179b9);}};
\ No newline at end of file
index 8571a8a..12ce9b7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1b20=['../../components/auth/service','../../components/interaction/service','../../config/environment','exports','util','path','Router'];(function(_0x178e48,_0x3c9509){var _0x440d7e=function(_0xc2f8a0){while(--_0xc2f8a0){_0x178e48['push'](_0x178e48['shift']());}};_0x440d7e(++_0x3c9509);}(_0x1b20,0x66));var _0x01b2=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x1b20[_0x20a584];return _0x4b41a8;};'use strict';var multer=require('multer');var util=require(_0x01b2('0x0'));var path=require(_0x01b2('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x01b2('0x2')]();var auth=require(_0x01b2('0x3'));var interaction=require(_0x01b2('0x4'));var config=require(_0x01b2('0x5'));module[_0x01b2('0x6')]=router;
\ No newline at end of file
+var _0xc838=['util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer'];(function(_0x47a18a,_0x2f7e5a){var _0x369539=function(_0x1421cf){while(--_0x1421cf){_0x47a18a['push'](_0x47a18a['shift']());}};_0x369539(++_0x2f7e5a);}(_0xc838,0xbd));var _0x8c83=function(_0x12ce1f,_0x30d3c7){_0x12ce1f=_0x12ce1f-0x0;var _0x5320eb=_0xc838[_0x12ce1f];return _0x5320eb;};'use strict';var multer=require(_0x8c83('0x0'));var util=require(_0x8c83('0x1'));var path=require(_0x8c83('0x2'));var timeout=require(_0x8c83('0x3'));var express=require(_0x8c83('0x4'));var router=express[_0x8c83('0x5')]();var auth=require(_0x8c83('0x6'));var interaction=require(_0x8c83('0x7'));var config=require(_0x8c83('0x8'));module[_0x8c83('0x9')]=router;
\ No newline at end of file
index 9492e36..e5b7b8b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x71ca=['exports','sequelize'];(function(_0x2fbac0,_0xf39c9){var _0x3f5372=function(_0x3ae75e){while(--_0x3ae75e){_0x2fbac0['push'](_0x2fbac0['shift']());}};_0x3f5372(++_0xf39c9);}(_0x71ca,0x7f));var _0xa71c=function(_0x99e828,_0x5d1498){_0x99e828=_0x99e828-0x0;var _0x4fb5f8=_0x71ca[_0x99e828];return _0x4fb5f8;};'use strict';var Sequelize=require(_0xa71c('0x0'));module[_0xa71c('0x1')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
+var _0xa277=['exports','INTEGER'];(function(_0x413e7f,_0x908f1b){var _0x4b9b88=function(_0x1d102a){while(--_0x1d102a){_0x413e7f['push'](_0x413e7f['shift']());}};_0x4b9b88(++_0x908f1b);}(_0xa277,0x13e));var _0x7a27=function(_0x23aab9,_0x10620a){_0x23aab9=_0x23aab9-0x0;var _0x298342=_0xa277[_0x23aab9];return _0x298342;};'use strict';var Sequelize=require('sequelize');module[_0x7a27('0x0')]={'penalty':{'type':Sequelize[_0x7a27('0x1')],'defaultValue':0x0}};
\ No newline at end of file
index 97c31be..b5a33f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x04a3=['util','../../config/logger','api','bluebird','request-promise','../../config/environment','exports','UserChatQueue','user_has_chat_queues','lodash'];(function(_0x22e6f0,_0x2cce01){var _0xa94dce=function(_0x3308f8){while(--_0x3308f8){_0x22e6f0['push'](_0x22e6f0['shift']());}};_0xa94dce(++_0x2cce01);}(_0x04a3,0x10d));var _0x304a=function(_0x4936e7,_0x3fc583){_0x4936e7=_0x4936e7-0x0;var _0x3e3f17=_0x04a3[_0x4936e7];return _0x3e3f17;};'use strict';var _=require(_0x304a('0x0'));var util=require(_0x304a('0x1'));var logger=require(_0x304a('0x2'))(_0x304a('0x3'));var moment=require('moment');var BPromise=require(_0x304a('0x4'));var rp=require(_0x304a('0x5'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x304a('0x6'));var attributes=require('./userChatQueue.attributes');module[_0x304a('0x7')]=function(_0x550a9f,_0x45a5e2){return _0x550a9f['define'](_0x304a('0x8'),attributes,{'tableName':_0x304a('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x01b5=['util','../../config/logger','api','moment','bluebird','rimraf','./userChatQueue.attributes','exports','UserChatQueue','user_has_chat_queues','lodash'];(function(_0x4c630b,_0x25f8ef){var _0x181259=function(_0x5d0e58){while(--_0x5d0e58){_0x4c630b['push'](_0x4c630b['shift']());}};_0x181259(++_0x25f8ef);}(_0x01b5,0xc5));var _0x501b=function(_0x126ceb,_0x244ffc){_0x126ceb=_0x126ceb-0x0;var _0x52d264=_0x01b5[_0x126ceb];return _0x52d264;};'use strict';var _=require(_0x501b('0x0'));var util=require(_0x501b('0x1'));var logger=require(_0x501b('0x2'))(_0x501b('0x3'));var moment=require(_0x501b('0x4'));var BPromise=require(_0x501b('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x501b('0x6'));var config=require('../../config/environment');var attributes=require(_0x501b('0x7'));module[_0x501b('0x8')]=function(_0xa7fd2f,_0x41c439){return _0xa7fd2f['define'](_0x501b('0x9'),attributes,{'tableName':_0x501b('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1b13c28..1b70bc9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a25=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','UserChatQueue,\x20%s,\x20%s','request\x20sent','UserChatQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb'];(function(_0x13f752,_0x29f156){var _0x45d4fb=function(_0x3d266b){while(--_0x3d266b){_0x13f752['push'](_0x13f752['shift']());}};_0x45d4fb(++_0x29f156);}(_0x8a25,0x1aa));var _0x58a2=function(_0x4b3dd4,_0x5e366e){_0x4b3dd4=_0x4b3dd4-0x0;var _0x5d6053=_0x8a25[_0x4b3dd4];return _0x5d6053;};'use strict';var _=require(_0x58a2('0x0'));var util=require(_0x58a2('0x1'));var moment=require(_0x58a2('0x2'));var BPromise=require(_0x58a2('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x58a2('0x4'));var db=require(_0x58a2('0x5'))['db'];var utils=require(_0x58a2('0x6'));var logger=require(_0x58a2('0x7'))(_0x58a2('0x8'));var config=require(_0x58a2('0x9'));var jayson=require(_0x58a2('0xa'));var client=jayson[_0x58a2('0xb')][_0x58a2('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x1ac0c5,_0x151bc8,_0x2d9e1a){return new BPromise(function(_0x4796b4,_0x46e81d){return client['request'](_0x1ac0c5,_0x2d9e1a)[_0x58a2('0xd')](function(_0x43b581){logger[_0x58a2('0xe')](_0x58a2('0xf'),_0x151bc8,_0x58a2('0x10'));logger['debug'](_0x58a2('0x11'),_0x151bc8,_0x58a2('0x10'),JSON[_0x58a2('0x12')](_0x43b581));if(_0x43b581[_0x58a2('0x13')]){if(_0x43b581[_0x58a2('0x13')][_0x58a2('0x14')]===0x1f4){logger[_0x58a2('0x13')](_0x58a2('0xf'),_0x151bc8,_0x43b581[_0x58a2('0x13')][_0x58a2('0x15')]);return _0x46e81d(_0x43b581[_0x58a2('0x13')][_0x58a2('0x15')]);}logger[_0x58a2('0x13')]('UserChatQueue,\x20%s,\x20%s',_0x151bc8,_0x43b581['error'][_0x58a2('0x15')]);return _0x4796b4(_0x43b581[_0x58a2('0x13')][_0x58a2('0x15')]);}else{logger[_0x58a2('0xe')](_0x58a2('0xf'),_0x151bc8,_0x58a2('0x10'));_0x4796b4(_0x43b581[_0x58a2('0x16')][_0x58a2('0x15')]);}})[_0x58a2('0x17')](function(_0x1f915e){logger['error'](_0x58a2('0xf'),_0x151bc8,_0x1f915e);_0x46e81d(_0x1f915e);});});}
\ No newline at end of file
+var _0x8d88=['code','UserChatQueue,\x20%s,\x20%s','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','then','info','debug','request\x20sent','stringify','error'];(function(_0x415135,_0x2d2439){var _0x54429f=function(_0x1555f9){while(--_0x1555f9){_0x415135['push'](_0x415135['shift']());}};_0x54429f(++_0x2d2439);}(_0x8d88,0x7d));var _0x88d8=function(_0x90b94e,_0x34592e){_0x90b94e=_0x90b94e-0x0;var _0x144935=_0x8d88[_0x90b94e];return _0x144935;};'use strict';var _=require(_0x88d8('0x0'));var util=require(_0x88d8('0x1'));var moment=require(_0x88d8('0x2'));var BPromise=require(_0x88d8('0x3'));var rs=require(_0x88d8('0x4'));var fs=require('fs');var Redis=require(_0x88d8('0x5'));var db=require(_0x88d8('0x6'))['db'];var utils=require(_0x88d8('0x7'));var logger=require(_0x88d8('0x8'))(_0x88d8('0x9'));var config=require(_0x88d8('0xa'));var jayson=require(_0x88d8('0xb'));var client=jayson['client'][_0x88d8('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x3288b,_0x578b92,_0x486136){return new BPromise(function(_0x4f50d4,_0x5cfb1a){return client['request'](_0x3288b,_0x486136)[_0x88d8('0xd')](function(_0x38d5ba){logger[_0x88d8('0xe')]('UserChatQueue,\x20%s,\x20%s',_0x578b92,'request\x20sent');logger[_0x88d8('0xf')]('UserChatQueue,\x20%s,\x20%s,\x20%s',_0x578b92,_0x88d8('0x10'),JSON[_0x88d8('0x11')](_0x38d5ba));if(_0x38d5ba[_0x88d8('0x12')]){if(_0x38d5ba[_0x88d8('0x12')][_0x88d8('0x13')]===0x1f4){logger['error'](_0x88d8('0x14'),_0x578b92,_0x38d5ba[_0x88d8('0x12')][_0x88d8('0x15')]);return _0x5cfb1a(_0x38d5ba[_0x88d8('0x12')][_0x88d8('0x15')]);}logger[_0x88d8('0x12')]('UserChatQueue,\x20%s,\x20%s',_0x578b92,_0x38d5ba[_0x88d8('0x12')][_0x88d8('0x15')]);return _0x4f50d4(_0x38d5ba[_0x88d8('0x12')][_0x88d8('0x15')]);}else{logger[_0x88d8('0xe')](_0x88d8('0x14'),_0x578b92,_0x88d8('0x10'));_0x4f50d4(_0x38d5ba[_0x88d8('0x16')][_0x88d8('0x15')]);}})[_0x88d8('0x17')](function(_0x4f3cb4){logger[_0x88d8('0x12')](_0x88d8('0x14'),_0x578b92,_0x4f3cb4);_0x5cfb1a(_0x4f3cb4);});});}
\ No newline at end of file
index 0b0d97d..3a51f03 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x82c4=['../../components/auth/service','../../config/environment','multer','util','path','connect-timeout','express','Router'];(function(_0x16f0af,_0x13273a){var _0x11dd87=function(_0xfe4d5b){while(--_0xfe4d5b){_0x16f0af['push'](_0x16f0af['shift']());}};_0x11dd87(++_0x13273a);}(_0x82c4,0x1ca));var _0x482c=function(_0x3577ad,_0x11e389){_0x3577ad=_0x3577ad-0x0;var _0x56c663=_0x82c4[_0x3577ad];return _0x56c663;};'use strict';var multer=require(_0x482c('0x0'));var util=require(_0x482c('0x1'));var path=require(_0x482c('0x2'));var timeout=require(_0x482c('0x3'));var express=require(_0x482c('0x4'));var router=express[_0x482c('0x5')]();var auth=require(_0x482c('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x482c('0x7'));module['exports']=router;
\ No newline at end of file
+var _0x8cad=['../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer','util','path','connect-timeout','express','Router'];(function(_0xb58542,_0xb1064){var _0x12a687=function(_0x457260){while(--_0x457260){_0xb58542['push'](_0xb58542['shift']());}};_0x12a687(++_0xb1064);}(_0x8cad,0xfe));var _0xd8ca=function(_0x2c7618,_0x26be9c){_0x2c7618=_0x2c7618-0x0;var _0x5ce3f0=_0x8cad[_0x2c7618];return _0x5ce3f0;};'use strict';var multer=require(_0xd8ca('0x0'));var util=require(_0xd8ca('0x1'));var path=require(_0xd8ca('0x2'));var timeout=require(_0xd8ca('0x3'));var express=require(_0xd8ca('0x4'));var router=express[_0xd8ca('0x5')]();var auth=require(_0xd8ca('0x6'));var interaction=require(_0xd8ca('0x7'));var config=require(_0xd8ca('0x8'));module[_0xd8ca('0x9')]=router;
\ No newline at end of file
index 565e176..ae14174 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x62f8=['INTEGER','STRING','exports'];(function(_0x3a6e4b,_0x118cd9){var _0x36572d=function(_0x2a53cf){while(--_0x2a53cf){_0x3a6e4b['push'](_0x3a6e4b['shift']());}};_0x36572d(++_0x118cd9);}(_0x62f8,0x13a));var _0x862f=function(_0x491c56,_0x3f8a3a){_0x491c56=_0x491c56-0x0;var _0x2a5f36=_0x62f8[_0x491c56];return _0x2a5f36;};'use strict';var Sequelize=require('sequelize');module[_0x862f('0x0')]={'penalty':{'type':Sequelize[_0x862f('0x1')],'defaultValue':0x0},'assigned':{'type':Sequelize[_0x862f('0x1')],'defaultValue':0x0},'queue':{'type':Sequelize[_0x862f('0x2')]}};
\ No newline at end of file
+var _0x5c42=['INTEGER','STRING','sequelize'];(function(_0x459941,_0x231876){var _0xd3052d=function(_0x4b56b3){while(--_0x4b56b3){_0x459941['push'](_0x459941['shift']());}};_0xd3052d(++_0x231876);}(_0x5c42,0x182));var _0x25c4=function(_0x48b99a,_0x368a53){_0x48b99a=_0x48b99a-0x0;var _0x3cb765=_0x5c42[_0x48b99a];return _0x3cb765;};'use strict';var Sequelize=require(_0x25c4('0x0'));module['exports']={'penalty':{'type':Sequelize[_0x25c4('0x1')],'defaultValue':0x0},'assigned':{'type':Sequelize[_0x25c4('0x1')],'defaultValue':0x0},'queue':{'type':Sequelize[_0x25c4('0x2')]}};
\ No newline at end of file
index d23b514..5369f73 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf804=['define','user_has_fax_queues','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./userFaxQueue.attributes','exports'];(function(_0x36976d,_0x8b0ddc){var _0x2ad159=function(_0x513c04){while(--_0x513c04){_0x36976d['push'](_0x36976d['shift']());}};_0x2ad159(++_0x8b0ddc);}(_0xf804,0xc6));var _0x4f80=function(_0x59ee6f,_0x450239){_0x59ee6f=_0x59ee6f-0x0;var _0x4c0979=_0xf804[_0x59ee6f];return _0x4c0979;};'use strict';var _=require(_0x4f80('0x0'));var util=require(_0x4f80('0x1'));var logger=require(_0x4f80('0x2'))(_0x4f80('0x3'));var moment=require(_0x4f80('0x4'));var BPromise=require(_0x4f80('0x5'));var rp=require(_0x4f80('0x6'));var fs=require('fs');var path=require(_0x4f80('0x7'));var rimraf=require(_0x4f80('0x8'));var config=require(_0x4f80('0x9'));var attributes=require(_0x4f80('0xa'));module[_0x4f80('0xb')]=function(_0x3f5410,_0x278f9c){return _0x3f5410[_0x4f80('0xc')]('UserFaxQueue',attributes,{'tableName':_0x4f80('0xd'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6ad0=['moment','path','../../config/environment','exports','define','UserFaxQueue','user_has_fax_queues','util','../../config/logger','api'];(function(_0x5573f2,_0x564b22){var _0x393630=function(_0x4e6abb){while(--_0x4e6abb){_0x5573f2['push'](_0x5573f2['shift']());}};_0x393630(++_0x564b22);}(_0x6ad0,0x11f));var _0x06ad=function(_0x295278,_0x5941e2){_0x295278=_0x295278-0x0;var _0x30794a=_0x6ad0[_0x295278];return _0x30794a;};'use strict';var _=require('lodash');var util=require(_0x06ad('0x0'));var logger=require(_0x06ad('0x1'))(_0x06ad('0x2'));var moment=require(_0x06ad('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x06ad('0x4'));var rimraf=require('rimraf');var config=require(_0x06ad('0x5'));var attributes=require('./userFaxQueue.attributes');module[_0x06ad('0x6')]=function(_0x1cf702,_0x5df9a1){return _0x1cf702[_0x06ad('0x7')](_0x06ad('0x8'),attributes,{'tableName':_0x06ad('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 50e2f92..92f9e13 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc737=['catch','lodash','moment','randomstring','../../mysqldb','../../config/utils','rpc','jayson/promise','client','http','request','then','info','UserFaxQueue,\x20%s,\x20%s','request\x20sent','UserFaxQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result'];(function(_0x4adf20,_0x41cc23){var _0x5e2b5b=function(_0x44414e){while(--_0x44414e){_0x4adf20['push'](_0x4adf20['shift']());}};_0x5e2b5b(++_0x41cc23);}(_0xc737,0x190));var _0x7c73=function(_0x14c6d0,_0x160a44){_0x14c6d0=_0x14c6d0-0x0;var _0x4a1b97=_0xc737[_0x14c6d0];return _0x4a1b97;};'use strict';var _=require(_0x7c73('0x0'));var util=require('util');var moment=require(_0x7c73('0x1'));var BPromise=require('bluebird');var rs=require(_0x7c73('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x7c73('0x3'))['db'];var utils=require(_0x7c73('0x4'));var logger=require('../../config/logger')(_0x7c73('0x5'));var config=require('../../config/environment');var jayson=require(_0x7c73('0x6'));var client=jayson[_0x7c73('0x7')][_0x7c73('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x36d45f,_0x12a04c,_0x4ff542){return new BPromise(function(_0x2b3ad8,_0x2fbcf8){return client[_0x7c73('0x9')](_0x36d45f,_0x4ff542)[_0x7c73('0xa')](function(_0xf7815f){logger[_0x7c73('0xb')](_0x7c73('0xc'),_0x12a04c,_0x7c73('0xd'));logger['debug'](_0x7c73('0xe'),_0x12a04c,_0x7c73('0xd'),JSON[_0x7c73('0xf')](_0xf7815f));if(_0xf7815f[_0x7c73('0x10')]){if(_0xf7815f[_0x7c73('0x10')][_0x7c73('0x11')]===0x1f4){logger[_0x7c73('0x10')](_0x7c73('0xc'),_0x12a04c,_0xf7815f[_0x7c73('0x10')]['message']);return _0x2fbcf8(_0xf7815f['error']['message']);}logger[_0x7c73('0x10')]('UserFaxQueue,\x20%s,\x20%s',_0x12a04c,_0xf7815f[_0x7c73('0x10')][_0x7c73('0x12')]);return _0x2b3ad8(_0xf7815f[_0x7c73('0x10')][_0x7c73('0x12')]);}else{logger[_0x7c73('0xb')](_0x7c73('0xc'),_0x12a04c,_0x7c73('0xd'));_0x2b3ad8(_0xf7815f[_0x7c73('0x13')][_0x7c73('0x12')]);}})[_0x7c73('0x14')](function(_0x47da25){logger[_0x7c73('0x10')](_0x7c73('0xc'),_0x12a04c,_0x47da25);_0x2fbcf8(_0x47da25);});});}
\ No newline at end of file
+var _0xf80d=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','UserFaxQueue,\x20%s,\x20%s','request\x20sent','debug','error','code','message','util','moment','randomstring'];(function(_0x47ef65,_0x1e8255){var _0x217311=function(_0x265063){while(--_0x265063){_0x47ef65['push'](_0x47ef65['shift']());}};_0x217311(++_0x1e8255);}(_0xf80d,0x165));var _0xdf80=function(_0x4001ad,_0x1e22dd){_0x4001ad=_0x4001ad-0x0;var _0x4c7ec2=_0xf80d[_0x4001ad];return _0x4c7ec2;};'use strict';var _=require('lodash');var util=require(_0xdf80('0x0'));var moment=require(_0xdf80('0x1'));var BPromise=require('bluebird');var rs=require(_0xdf80('0x2'));var fs=require('fs');var Redis=require(_0xdf80('0x3'));var db=require(_0xdf80('0x4'))['db'];var utils=require(_0xdf80('0x5'));var logger=require(_0xdf80('0x6'))(_0xdf80('0x7'));var config=require(_0xdf80('0x8'));var jayson=require(_0xdf80('0x9'));var client=jayson['client'][_0xdf80('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x45e1c1,_0x4162fc,_0x17e20a){return new BPromise(function(_0x23dd89,_0x1b1f09){return client[_0xdf80('0xb')](_0x45e1c1,_0x17e20a)[_0xdf80('0xc')](function(_0x167c93){logger[_0xdf80('0xd')](_0xdf80('0xe'),_0x4162fc,_0xdf80('0xf'));logger[_0xdf80('0x10')]('UserFaxQueue,\x20%s,\x20%s,\x20%s',_0x4162fc,_0xdf80('0xf'),JSON['stringify'](_0x167c93));if(_0x167c93[_0xdf80('0x11')]){if(_0x167c93[_0xdf80('0x11')][_0xdf80('0x12')]===0x1f4){logger[_0xdf80('0x11')](_0xdf80('0xe'),_0x4162fc,_0x167c93['error'][_0xdf80('0x13')]);return _0x1b1f09(_0x167c93[_0xdf80('0x11')][_0xdf80('0x13')]);}logger[_0xdf80('0x11')](_0xdf80('0xe'),_0x4162fc,_0x167c93['error'][_0xdf80('0x13')]);return _0x23dd89(_0x167c93[_0xdf80('0x11')][_0xdf80('0x13')]);}else{logger[_0xdf80('0xd')]('UserFaxQueue,\x20%s,\x20%s',_0x4162fc,'request\x20sent');_0x23dd89(_0x167c93['result'][_0xdf80('0x13')]);}})['catch'](function(_0x7c1652){logger[_0xdf80('0x11')](_0xdf80('0xe'),_0x4162fc,_0x7c1652);_0x1b1f09(_0x7c1652);});});}
\ No newline at end of file
index dbdc117..2d14627 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf417=['connect-timeout','Router','../../config/environment','util','path'];(function(_0x2af2c9,_0xe92460){var _0x4fd101=function(_0x36c92d){while(--_0x36c92d){_0x2af2c9['push'](_0x2af2c9['shift']());}};_0x4fd101(++_0xe92460);}(_0xf417,0x8f));var _0x7f41=function(_0x260f23,_0x2d90ee){_0x260f23=_0x260f23-0x0;var _0x222dc1=_0xf417[_0x260f23];return _0x222dc1;};'use strict';var multer=require('multer');var util=require(_0x7f41('0x0'));var path=require(_0x7f41('0x1'));var timeout=require(_0x7f41('0x2'));var express=require('express');var router=express[_0x7f41('0x3')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x7f41('0x4'));module['exports']=router;
\ No newline at end of file
+var _0x2484=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer','util'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0x2484,0x178));var _0x4248=function(_0x33a694,_0x9b6640){_0x33a694=_0x33a694-0x0;var _0x41ff01=_0x2484[_0x33a694];return _0x41ff01;};'use strict';var multer=require(_0x4248('0x0'));var util=require(_0x4248('0x1'));var path=require('path');var timeout=require(_0x4248('0x2'));var express=require(_0x4248('0x3'));var router=express[_0x4248('0x4')]();var auth=require(_0x4248('0x5'));var interaction=require(_0x4248('0x6'));var config=require(_0x4248('0x7'));module[_0x4248('0x8')]=router;
\ No newline at end of file
index c77cc39..8fda35b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6c47=['exports'];(function(_0x8cdc3c,_0x10a3c8){var _0x401b4b=function(_0x18aed4){while(--_0x18aed4){_0x8cdc3c['push'](_0x8cdc3c['shift']());}};_0x401b4b(++_0x10a3c8);}(_0x6c47,0x1ab));var _0x76c4=function(_0x5bab70,_0x39cf50){_0x5bab70=_0x5bab70-0x0;var _0x5cf836=_0x6c47[_0x5bab70];return _0x5cf836;};'use strict';var Sequelize=require('sequelize');module[_0x76c4('0x0')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
+var _0x7535=['exports','INTEGER'];(function(_0x92b4dc,_0x20f18a){var _0xe68d92=function(_0x707cc1){while(--_0x707cc1){_0x92b4dc['push'](_0x92b4dc['shift']());}};_0xe68d92(++_0x20f18a);}(_0x7535,0x196));var _0x5753=function(_0x3ceb54,_0x5bddfd){_0x3ceb54=_0x3ceb54-0x0;var _0x26d8a6=_0x7535[_0x3ceb54];return _0x26d8a6;};'use strict';var Sequelize=require('sequelize');module[_0x5753('0x0')]={'penalty':{'type':Sequelize[_0x5753('0x1')],'defaultValue':0x0}};
\ No newline at end of file
index 07b8e99..319c21d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda2d=['./userMailQueue.attributes','exports','define','UserMailQueue','user_has_mail_queues','util','../../config/logger','api','moment','bluebird','../../config/environment'];(function(_0x30b0d0,_0x561d1d){var _0xdcfc55=function(_0x51b739){while(--_0x51b739){_0x30b0d0['push'](_0x30b0d0['shift']());}};_0xdcfc55(++_0x561d1d);}(_0xda2d,0x102));var _0xdda2=function(_0x1af6e8,_0x203c53){_0x1af6e8=_0x1af6e8-0x0;var _0x709f25=_0xda2d[_0x1af6e8];return _0x709f25;};'use strict';var _=require('lodash');var util=require(_0xdda2('0x0'));var logger=require(_0xdda2('0x1'))(_0xdda2('0x2'));var moment=require(_0xdda2('0x3'));var BPromise=require(_0xdda2('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0xdda2('0x5'));var attributes=require(_0xdda2('0x6'));module[_0xdda2('0x7')]=function(_0x39f6c9,_0xc256bc){return _0x39f6c9[_0xdda2('0x8')](_0xdda2('0x9'),attributes,{'tableName':_0xdda2('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6343=['exports','define','UserMailQueue','../../config/logger','api','rimraf','../../config/environment'];(function(_0x556e39,_0xdfff9a){var _0x30ee21=function(_0x40f9a4){while(--_0x40f9a4){_0x556e39['push'](_0x556e39['shift']());}};_0x30ee21(++_0xdfff9a);}(_0x6343,0x168));var _0x3634=function(_0xcac9b2,_0x316e6b){_0xcac9b2=_0xcac9b2-0x0;var _0xb9e85a=_0x6343[_0xcac9b2];return _0xb9e85a;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x3634('0x0'))(_0x3634('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require(_0x3634('0x2'));var config=require(_0x3634('0x3'));var attributes=require('./userMailQueue.attributes');module[_0x3634('0x4')]=function(_0x388c18,_0x4bb496){return _0x388c18[_0x3634('0x5')](_0x3634('0x6'),attributes,{'tableName':'user_has_mail_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index e74edce..10495ea 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0ee5=['stringify','code','error','UserMailQueue,\x20%s,\x20%s','message','result','catch','util','bluebird','ioredis','../../mysqldb','../../config/utils','rpc','client','http','request','then','info','request\x20sent','UserMailQueue,\x20%s,\x20%s,\x20%s'];(function(_0x2cb785,_0x55e0d9){var _0x46c3c6=function(_0x27ce0c){while(--_0x27ce0c){_0x2cb785['push'](_0x2cb785['shift']());}};_0x46c3c6(++_0x55e0d9);}(_0x0ee5,0x10b));var _0x50ee=function(_0x4565bf,_0x5ad9d6){_0x4565bf=_0x4565bf-0x0;var _0x5610ba=_0x0ee5[_0x4565bf];return _0x5610ba;};'use strict';var _=require('lodash');var util=require(_0x50ee('0x0'));var moment=require('moment');var BPromise=require(_0x50ee('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x50ee('0x2'));var db=require(_0x50ee('0x3'))['db'];var utils=require(_0x50ee('0x4'));var logger=require('../../config/logger')(_0x50ee('0x5'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x50ee('0x6')][_0x50ee('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x3a6843,_0x4cc34b,_0x189495){return new BPromise(function(_0x565240,_0x2a9979){return client[_0x50ee('0x8')](_0x3a6843,_0x189495)[_0x50ee('0x9')](function(_0x1339b5){logger[_0x50ee('0xa')]('UserMailQueue,\x20%s,\x20%s',_0x4cc34b,_0x50ee('0xb'));logger['debug'](_0x50ee('0xc'),_0x4cc34b,'request\x20sent',JSON[_0x50ee('0xd')](_0x1339b5));if(_0x1339b5['error']){if(_0x1339b5['error'][_0x50ee('0xe')]===0x1f4){logger[_0x50ee('0xf')](_0x50ee('0x10'),_0x4cc34b,_0x1339b5[_0x50ee('0xf')][_0x50ee('0x11')]);return _0x2a9979(_0x1339b5[_0x50ee('0xf')][_0x50ee('0x11')]);}logger[_0x50ee('0xf')](_0x50ee('0x10'),_0x4cc34b,_0x1339b5['error'][_0x50ee('0x11')]);return _0x565240(_0x1339b5['error'][_0x50ee('0x11')]);}else{logger['info'](_0x50ee('0x10'),_0x4cc34b,_0x50ee('0xb'));_0x565240(_0x1339b5[_0x50ee('0x12')][_0x50ee('0x11')]);}})[_0x50ee('0x13')](function(_0x48840b){logger[_0x50ee('0xf')](_0x50ee('0x10'),_0x4cc34b,_0x48840b);_0x2a9979(_0x48840b);});});}
\ No newline at end of file
+var _0x710f=['../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request','then','info','UserMailQueue,\x20%s,\x20%s','debug','UserMailQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','lodash','util','moment','bluebird','randomstring','../../mysqldb'];(function(_0x117007,_0x4d3414){var _0x2e5522=function(_0x1f9459){while(--_0x1f9459){_0x117007['push'](_0x117007['shift']());}};_0x2e5522(++_0x4d3414);}(_0x710f,0x1dd));var _0xf710=function(_0x4929a8,_0x3884db){_0x4929a8=_0x4929a8-0x0;var _0x5e1681=_0x710f[_0x4929a8];return _0x5e1681;};'use strict';var _=require(_0xf710('0x0'));var util=require(_0xf710('0x1'));var moment=require(_0xf710('0x2'));var BPromise=require(_0xf710('0x3'));var rs=require(_0xf710('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xf710('0x5'))['db'];var utils=require(_0xf710('0x6'));var logger=require(_0xf710('0x7'))(_0xf710('0x8'));var config=require(_0xf710('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xf710('0xa')][_0xf710('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x1bf4e9,_0x31ada1,_0x139ea1){return new BPromise(function(_0x276f60,_0x5137d2){return client[_0xf710('0xc')](_0x1bf4e9,_0x139ea1)[_0xf710('0xd')](function(_0x5a4c7e){logger[_0xf710('0xe')](_0xf710('0xf'),_0x31ada1,'request\x20sent');logger[_0xf710('0x10')](_0xf710('0x11'),_0x31ada1,_0xf710('0x12'),JSON[_0xf710('0x13')](_0x5a4c7e));if(_0x5a4c7e['error']){if(_0x5a4c7e[_0xf710('0x14')][_0xf710('0x15')]===0x1f4){logger['error']('UserMailQueue,\x20%s,\x20%s',_0x31ada1,_0x5a4c7e['error']['message']);return _0x5137d2(_0x5a4c7e[_0xf710('0x14')][_0xf710('0x16')]);}logger[_0xf710('0x14')]('UserMailQueue,\x20%s,\x20%s',_0x31ada1,_0x5a4c7e[_0xf710('0x14')]['message']);return _0x276f60(_0x5a4c7e[_0xf710('0x14')][_0xf710('0x16')]);}else{logger['info'](_0xf710('0xf'),_0x31ada1,_0xf710('0x12'));_0x276f60(_0x5a4c7e['result'][_0xf710('0x16')]);}})['catch'](function(_0x459ff9){logger[_0xf710('0x14')](_0xf710('0xf'),_0x31ada1,_0x459ff9);_0x5137d2(_0x459ff9);});});}
\ No newline at end of file
index b7e2540..685a227 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd991=['path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer','util'];(function(_0x42bdad,_0x12836c){var _0x122626=function(_0x2eb29c){while(--_0x2eb29c){_0x42bdad['push'](_0x42bdad['shift']());}};_0x122626(++_0x12836c);}(_0xd991,0x115));var _0x1d99=function(_0x51850c,_0x169299){_0x51850c=_0x51850c-0x0;var _0x1505c3=_0xd991[_0x51850c];return _0x1505c3;};'use strict';var multer=require(_0x1d99('0x0'));var util=require(_0x1d99('0x1'));var path=require(_0x1d99('0x2'));var timeout=require(_0x1d99('0x3'));var express=require(_0x1d99('0x4'));var router=express['Router']();var auth=require(_0x1d99('0x5'));var interaction=require(_0x1d99('0x6'));var config=require(_0x1d99('0x7'));module[_0x1d99('0x8')]=router;
\ No newline at end of file
+var _0xb931=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','path'];(function(_0x3e6e08,_0xf046d0){var _0x532980=function(_0x415cfd){while(--_0x415cfd){_0x3e6e08['push'](_0x3e6e08['shift']());}};_0x532980(++_0xf046d0);}(_0xb931,0x155));var _0x1b93=function(_0x469341,_0x385011){_0x469341=_0x469341-0x0;var _0x51d063=_0xb931[_0x469341];return _0x51d063;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x1b93('0x0'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x1b93('0x1')]();var auth=require(_0x1b93('0x2'));var interaction=require(_0x1b93('0x3'));var config=require(_0x1b93('0x4'));module[_0x1b93('0x5')]=router;
\ No newline at end of file
index 46d1151..a76baca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4602=['INTEGER','sequelize','exports'];(function(_0x1dc728,_0x22fd11){var _0x10b2e6=function(_0x2f7370){while(--_0x2f7370){_0x1dc728['push'](_0x1dc728['shift']());}};_0x10b2e6(++_0x22fd11);}(_0x4602,0x1b7));var _0x2460=function(_0x594459,_0x4de3a7){_0x594459=_0x594459-0x0;var _0x3b6ebe=_0x4602[_0x594459];return _0x3b6ebe;};'use strict';var Sequelize=require(_0x2460('0x0'));module[_0x2460('0x1')]={'penalty':{'type':Sequelize[_0x2460('0x2')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x2087=['sequelize','exports','INTEGER'];(function(_0x415005,_0x595685){var _0x50002f=function(_0x68b2a2){while(--_0x68b2a2){_0x415005['push'](_0x415005['shift']());}};_0x50002f(++_0x595685);}(_0x2087,0xd2));var _0x7208=function(_0x352c13,_0x1a91cb){_0x352c13=_0x352c13-0x0;var _0x5b48e8=_0x2087[_0x352c13];return _0x5b48e8;};'use strict';var Sequelize=require(_0x7208('0x0'));module[_0x7208('0x1')]={'penalty':{'type':Sequelize[_0x7208('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index e869bb8..44857b2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf7ec=['bluebird','request-promise','rimraf','../../config/environment','./userOpenchannelQueue.attributes','exports','UserOpenchannelQueue','lodash','../../config/logger','api','moment'];(function(_0x3f3d9c,_0xe7a271){var _0x58d8c9=function(_0x570cf4){while(--_0x570cf4){_0x3f3d9c['push'](_0x3f3d9c['shift']());}};_0x58d8c9(++_0xe7a271);}(_0xf7ec,0x151));var _0xcf7e=function(_0x14490c,_0x50e8ab){_0x14490c=_0x14490c-0x0;var _0x2f6825=_0xf7ec[_0x14490c];return _0x2f6825;};'use strict';var _=require(_0xcf7e('0x0'));var util=require('util');var logger=require(_0xcf7e('0x1'))(_0xcf7e('0x2'));var moment=require(_0xcf7e('0x3'));var BPromise=require(_0xcf7e('0x4'));var rp=require(_0xcf7e('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0xcf7e('0x6'));var config=require(_0xcf7e('0x7'));var attributes=require(_0xcf7e('0x8'));module[_0xcf7e('0x9')]=function(_0x5b7eff,_0x26b5a5){return _0x5b7eff['define'](_0xcf7e('0xa'),attributes,{'tableName':'user_has_openchannel_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7668=['../../config/environment','exports','UserOpenchannelQueue','user_has_openchannel_queues','lodash','util','../../config/logger','request-promise','path','rimraf'];(function(_0x587fb5,_0x59cb3b){var _0x551105=function(_0x5bbef4){while(--_0x5bbef4){_0x587fb5['push'](_0x587fb5['shift']());}};_0x551105(++_0x59cb3b);}(_0x7668,0xea));var _0x8766=function(_0x2a5cb0,_0x4002e9){_0x2a5cb0=_0x2a5cb0-0x0;var _0x24aac8=_0x7668[_0x2a5cb0];return _0x24aac8;};'use strict';var _=require(_0x8766('0x0'));var util=require(_0x8766('0x1'));var logger=require(_0x8766('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x8766('0x3'));var fs=require('fs');var path=require(_0x8766('0x4'));var rimraf=require(_0x8766('0x5'));var config=require(_0x8766('0x6'));var attributes=require('./userOpenchannelQueue.attributes');module[_0x8766('0x7')]=function(_0x4867df,_0x59d56f){return _0x4867df['define'](_0x8766('0x8'),attributes,{'tableName':_0x8766('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 12d4ef8..583c2fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc2b3=['error','UserOpenchannelQueue,\x20%s,\x20%s','message','result','catch','lodash','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','then','info','debug','UserOpenchannelQueue,\x20%s,\x20%s,\x20%s','request\x20sent'];(function(_0x461886,_0x4fc171){var _0x295e0a=function(_0x451524){while(--_0x451524){_0x461886['push'](_0x461886['shift']());}};_0x295e0a(++_0x4fc171);}(_0xc2b3,0xe1));var _0x3c2b=function(_0x33b6e9,_0x54af9b){_0x33b6e9=_0x33b6e9-0x0;var _0x2fea27=_0xc2b3[_0x33b6e9];return _0x2fea27;};'use strict';var _=require(_0x3c2b('0x0'));var util=require('util');var moment=require(_0x3c2b('0x1'));var BPromise=require('bluebird');var rs=require(_0x3c2b('0x2'));var fs=require('fs');var Redis=require(_0x3c2b('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x3c2b('0x4'));var logger=require(_0x3c2b('0x5'))(_0x3c2b('0x6'));var config=require(_0x3c2b('0x7'));var jayson=require(_0x3c2b('0x8'));var client=jayson['client'][_0x3c2b('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4447b1,_0x1ed5ca,_0x478975){return new BPromise(function(_0x38ddab,_0x303f26){return client['request'](_0x4447b1,_0x478975)[_0x3c2b('0xa')](function(_0xc15597){logger[_0x3c2b('0xb')]('UserOpenchannelQueue,\x20%s,\x20%s',_0x1ed5ca,'request\x20sent');logger[_0x3c2b('0xc')](_0x3c2b('0xd'),_0x1ed5ca,_0x3c2b('0xe'),JSON['stringify'](_0xc15597));if(_0xc15597[_0x3c2b('0xf')]){if(_0xc15597[_0x3c2b('0xf')]['code']===0x1f4){logger[_0x3c2b('0xf')](_0x3c2b('0x10'),_0x1ed5ca,_0xc15597['error'][_0x3c2b('0x11')]);return _0x303f26(_0xc15597[_0x3c2b('0xf')][_0x3c2b('0x11')]);}logger['error']('UserOpenchannelQueue,\x20%s,\x20%s',_0x1ed5ca,_0xc15597[_0x3c2b('0xf')][_0x3c2b('0x11')]);return _0x38ddab(_0xc15597['error']['message']);}else{logger[_0x3c2b('0xb')](_0x3c2b('0x10'),_0x1ed5ca,_0x3c2b('0xe'));_0x38ddab(_0xc15597[_0x3c2b('0x12')][_0x3c2b('0x11')]);}})[_0x3c2b('0x13')](function(_0x99b4a){logger[_0x3c2b('0xf')](_0x3c2b('0x10'),_0x1ed5ca,_0x99b4a);_0x303f26(_0x99b4a);});});}
\ No newline at end of file
+var _0x793e=['../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','request','then','info','UserOpenchannelQueue,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','lodash','util','moment','randomstring','ioredis'];(function(_0x589df0,_0x35cebe){var _0x4d5275=function(_0x5763c2){while(--_0x5763c2){_0x589df0['push'](_0x589df0['shift']());}};_0x4d5275(++_0x35cebe);}(_0x793e,0x10c));var _0xe793=function(_0x17772e,_0x3d4d93){_0x17772e=_0x17772e-0x0;var _0x21e766=_0x793e[_0x17772e];return _0x21e766;};'use strict';var _=require(_0xe793('0x0'));var util=require(_0xe793('0x1'));var moment=require(_0xe793('0x2'));var BPromise=require('bluebird');var rs=require(_0xe793('0x3'));var fs=require('fs');var Redis=require(_0xe793('0x4'));var db=require(_0xe793('0x5'))['db'];var utils=require(_0xe793('0x6'));var logger=require('../../config/logger')(_0xe793('0x7'));var config=require(_0xe793('0x8'));var jayson=require(_0xe793('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x5f17a7,_0x40e4c4,_0x34a703){return new BPromise(function(_0x4f3f78,_0x10196b){return client[_0xe793('0xa')](_0x5f17a7,_0x34a703)[_0xe793('0xb')](function(_0x595996){logger[_0xe793('0xc')](_0xe793('0xd'),_0x40e4c4,'request\x20sent');logger[_0xe793('0xe')]('UserOpenchannelQueue,\x20%s,\x20%s,\x20%s',_0x40e4c4,_0xe793('0xf'),JSON[_0xe793('0x10')](_0x595996));if(_0x595996[_0xe793('0x11')]){if(_0x595996[_0xe793('0x11')][_0xe793('0x12')]===0x1f4){logger['error'](_0xe793('0xd'),_0x40e4c4,_0x595996[_0xe793('0x11')][_0xe793('0x13')]);return _0x10196b(_0x595996[_0xe793('0x11')][_0xe793('0x13')]);}logger[_0xe793('0x11')](_0xe793('0xd'),_0x40e4c4,_0x595996[_0xe793('0x11')]['message']);return _0x4f3f78(_0x595996[_0xe793('0x11')][_0xe793('0x13')]);}else{logger['info'](_0xe793('0xd'),_0x40e4c4,_0xe793('0xf'));_0x4f3f78(_0x595996[_0xe793('0x14')]['message']);}})['catch'](function(_0xaed337){logger['error'](_0xe793('0xd'),_0x40e4c4,_0xaed337);_0x10196b(_0xaed337);});});}
\ No newline at end of file
index 5397870..5bc23a5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf80f=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./userProfile.controller','get','index','isAuthenticated','show','/:id/resources','post','create','/:id/clone','clone','addSections','put','update','delete','/:id','removeResources','multer','util','path'];(function(_0x4aba15,_0x4e90aa){var _0x1c8122=function(_0x568dba){while(--_0x568dba){_0x4aba15['push'](_0x4aba15['shift']());}};_0x1c8122(++_0x4e90aa);}(_0xf80f,0x75));var _0xff80=function(_0x28ad08,_0x2b68ad){_0x28ad08=_0x28ad08-0x0;var _0x41bace=_0xf80f[_0x28ad08];return _0x41bace;};'use strict';var multer=require(_0xff80('0x0'));var util=require(_0xff80('0x1'));var path=require(_0xff80('0x2'));var timeout=require(_0xff80('0x3'));var express=require(_0xff80('0x4'));var router=express[_0xff80('0x5')]();var auth=require(_0xff80('0x6'));var interaction=require(_0xff80('0x7'));var config=require('../../config/environment');var controller=require(_0xff80('0x8'));router[_0xff80('0x9')]('/',auth['isAuthenticated'](),controller[_0xff80('0xa')]);router['get']('/describe',auth[_0xff80('0xb')](),controller['describe']);router['get']('/:id',auth[_0xff80('0xb')](),controller[_0xff80('0xc')]);router['get'](_0xff80('0xd'),auth[_0xff80('0xb')](),controller['getResources']);router[_0xff80('0xe')]('/',auth[_0xff80('0xb')](),controller[_0xff80('0xf')]);router[_0xff80('0xe')](_0xff80('0x10'),auth[_0xff80('0xb')](),controller[_0xff80('0x11')]);router[_0xff80('0xe')]('/:id/sections',auth['isAuthenticated'](),controller[_0xff80('0x12')]);router[_0xff80('0xe')]('/:id/resources',auth[_0xff80('0xb')](),controller['addResources']);router[_0xff80('0x13')]('/:id',auth[_0xff80('0xb')](),controller[_0xff80('0x14')]);router[_0xff80('0x15')](_0xff80('0x16'),auth['isAuthenticated'](),controller['destroy']);router['delete']('/:id/sections',auth['isAuthenticated'](),controller['removeSections']);router[_0xff80('0x15')](_0xff80('0xd'),auth[_0xff80('0xb')](),controller[_0xff80('0x17')]);module['exports']=router;
\ No newline at end of file
+var _0xd45d=['isAuthenticated','index','/describe','/:id','show','getResources','create','post','clone','/:id/sections','addSections','/:id/resources','addResources','put','update','destroy','removeSections','delete','removeResources','multer','path','Router','../../components/interaction/service','../../config/environment','./userProfile.controller','get'];(function(_0x291b1e,_0x5a9bfa){var _0x23065a=function(_0x295f83){while(--_0x295f83){_0x291b1e['push'](_0x291b1e['shift']());}};_0x23065a(++_0x5a9bfa);}(_0xd45d,0x1b3));var _0xdd45=function(_0x45b2f9,_0x4e4e7b){_0x45b2f9=_0x45b2f9-0x0;var _0x14a616=_0xd45d[_0x45b2f9];return _0x14a616;};'use strict';var multer=require(_0xdd45('0x0'));var util=require('util');var path=require(_0xdd45('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xdd45('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0xdd45('0x3'));var config=require(_0xdd45('0x4'));var controller=require(_0xdd45('0x5'));router[_0xdd45('0x6')]('/',auth[_0xdd45('0x7')](),controller[_0xdd45('0x8')]);router[_0xdd45('0x6')](_0xdd45('0x9'),auth[_0xdd45('0x7')](),controller['describe']);router[_0xdd45('0x6')](_0xdd45('0xa'),auth['isAuthenticated'](),controller[_0xdd45('0xb')]);router[_0xdd45('0x6')]('/:id/resources',auth['isAuthenticated'](),controller[_0xdd45('0xc')]);router['post']('/',auth[_0xdd45('0x7')](),controller[_0xdd45('0xd')]);router[_0xdd45('0xe')]('/:id/clone',auth[_0xdd45('0x7')](),controller[_0xdd45('0xf')]);router[_0xdd45('0xe')](_0xdd45('0x10'),auth['isAuthenticated'](),controller[_0xdd45('0x11')]);router[_0xdd45('0xe')](_0xdd45('0x12'),auth[_0xdd45('0x7')](),controller[_0xdd45('0x13')]);router[_0xdd45('0x14')](_0xdd45('0xa'),auth[_0xdd45('0x7')](),controller[_0xdd45('0x15')]);router['delete'](_0xdd45('0xa'),auth[_0xdd45('0x7')](),controller[_0xdd45('0x16')]);router['delete']('/:id/sections',auth[_0xdd45('0x7')](),controller[_0xdd45('0x17')]);router[_0xdd45('0x18')](_0xdd45('0x12'),auth[_0xdd45('0x7')](),controller[_0xdd45('0x19')]);module['exports']=router;
\ No newline at end of file
index 10cc02c..aa2249f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6d29=['exports','STRING','name','crudPermissions','join','getDataValue','split','sequelize'];(function(_0x27031e,_0x1eb8cd){var _0xfd46b3=function(_0x9fdcf8){while(--_0x9fdcf8){_0x27031e['push'](_0x27031e['shift']());}};_0xfd46b3(++_0x1eb8cd);}(_0x6d29,0x6f));var _0x96d2=function(_0x12f5f7,_0xa58b52){_0x12f5f7=_0x12f5f7-0x0;var _0x345c1b=_0x6d29[_0x12f5f7];return _0x345c1b;};'use strict';var Sequelize=require(_0x96d2('0x0'));module[_0x96d2('0x1')]={'name':{'type':Sequelize[_0x96d2('0x2')],'allowNull':![],'unique':_0x96d2('0x3')},'crudPermissions':{'type':Sequelize[_0x96d2('0x2')],'set':function(_0x3eb560){this['setDataValue'](_0x96d2('0x4'),_0x3eb560?_0x3eb560[_0x96d2('0x5')](''):[]);},'get':function(){return this[_0x96d2('0x6')](_0x96d2('0x4'))?this[_0x96d2('0x6')](_0x96d2('0x4'))[_0x96d2('0x7')](''):[];},'allowNull':![],'defaultValue':'r'},'description':{'type':Sequelize['STRING'],'allowNull':!![]}};
\ No newline at end of file
+var _0xcb91=['split','sequelize','STRING','name','setDataValue','join','crudPermissions'];(function(_0x2179f1,_0x21c653){var _0x176ec9=function(_0x4c4a4c){while(--_0x4c4a4c){_0x2179f1['push'](_0x2179f1['shift']());}};_0x176ec9(++_0x21c653);}(_0xcb91,0x86));var _0x1cb9=function(_0x1fa759,_0x4ecdce){_0x1fa759=_0x1fa759-0x0;var _0x2da9f4=_0xcb91[_0x1fa759];return _0x2da9f4;};'use strict';var Sequelize=require(_0x1cb9('0x0'));module['exports']={'name':{'type':Sequelize[_0x1cb9('0x1')],'allowNull':![],'unique':_0x1cb9('0x2')},'crudPermissions':{'type':Sequelize[_0x1cb9('0x1')],'set':function(_0x240710){this[_0x1cb9('0x3')]('crudPermissions',_0x240710?_0x240710[_0x1cb9('0x4')](''):[]);},'get':function(){return this['getDataValue'](_0x1cb9('0x5'))?this['getDataValue'](_0x1cb9('0x5'))[_0x1cb9('0x6')](''):[];},'allowNull':![],'defaultValue':'r'},'description':{'type':Sequelize[_0x1cb9('0x1')],'allowNull':!![]}};
\ No newline at end of file
index 38d049b..b7cb642 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0eb1=['sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','redis','localhost','./userProfile.socket','register','sendStatus','json','offset','limit','status','set','apply','reject','save','update','then','destroy','end','error','name','send','index','UserProfile','rawAttributes','keys','query','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filters','merge','type','key','VIRTUAL','field','filter','count','includeAll','include','findAll','rows','params','options','find','catch','create','clone','updatedAt','crudPermissions','body','omit','createdAt','sequelize','transaction','get','UserProfileSection','each','autoAssociation','map','userProfileId','UserProfileResource','describe','addSections','sectionId','Resources','removeSections','ids','addResources','bulkCreate','removeResources','section','undefined','Sequelize','ValidationError','Unknown\x20section','mergeResources','childModel','Invalid\x20section\x20\x27','isEmpty','parentSections','findOne','all','union','ignore','push','AnalyticExtractedReport','foreignKey','associatedResources','forEach','default','reportId','custom','CustomReports','Tag','Tags','color','tag','ThroughTags','value','resourceId','squareprojects','SquareProject','odbc','SquareOdbc','SquareRecording','projectName','projects','CmContact','Lists','CmList','companies','globalcustomfields','CmCustomField','chatqueues','chatwebsites','ChatWebsite','faxqueues','FaxQueue','faxaccounts','FaxAccount','inboundroutes','internalroutes','outboundroutes','VoiceExtension','contexts','VoiceContext','voicemails','VoiceMail','voicerecordings','VoiceRecording','membername','User','role','agent','Telephones','VoiceQueues','queue','VoiceQueue','QueueCampaigns','outbound','chanspies','voiceprefixes','VoicePrefix','ivrcampaigns','mailqueues','MailQueue','MailAccount','mailsubstatuses','MailSubstatus','openchannelqueues','OpenchannelQueue','openchannelaccounts','OpenchannelAccount','SmsQueue','smsaccounts','SmsAccount','teams','Team','voicequeues','queuecampaigns','agents','telephones','Users','user','Agents','ZendeskAccount','salesforceaccounts','SalesforceAccount','sugarcrmaccounts','SugarcrmAccount','deskaccounts','DeskAccount','ZohoAccount','vtigeraccounts','cannedanswers','Disposition','customdashboards','Dashboard','intervals','Interval','Pause','Schedule','tags','triggers','Trigger','trunks','Trunk','variables','Variable','plugins','extractedreports','Reports','metrics','AnalyticMetric','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path'];(function(_0x1fb4ff,_0x172d25){var _0x3f2d20=function(_0x358d44){while(--_0x358d44){_0x1fb4ff['push'](_0x1fb4ff['shift']());}};_0x3f2d20(++_0x172d25);}(_0x0eb1,0xda));var _0x10eb=function(_0x7a68b,_0x964789){_0x7a68b=_0x7a68b-0x0;var _0x110d37=_0x0eb1[_0x7a68b];return _0x110d37;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x10eb('0x0'));var rimraf=require(_0x10eb('0x1'));var zipdir=require(_0x10eb('0x2'));var jsonpatch=require(_0x10eb('0x3'));var rp=require(_0x10eb('0x4'));var moment=require('moment');var BPromise=require(_0x10eb('0x5'));var Mustache=require(_0x10eb('0x6'));var util=require(_0x10eb('0x7'));var path=require(_0x10eb('0x8'));var sox=require(_0x10eb('0x9'));var csv=require(_0x10eb('0xa'));var ejs=require(_0x10eb('0xb'));var fs=require('fs');var _=require(_0x10eb('0xc'));var squel=require(_0x10eb('0xd'));var crypto=require(_0x10eb('0xe'));var jsforce=require(_0x10eb('0xf'));var deskjs=require(_0x10eb('0x10'));var toCsv=require('to-csv');var querystring=require(_0x10eb('0x11'));var Papa=require(_0x10eb('0x12'));var Redis=require(_0x10eb('0x13'));var authService=require('../../components/auth/service');var qs=require(_0x10eb('0x14'));var hardwareService=require(_0x10eb('0x15'));var logger=require(_0x10eb('0x16'))(_0x10eb('0x17'));var utils=require(_0x10eb('0x18'));var config=require(_0x10eb('0x19'));var db=require('../../mysqldb')['db'];config[_0x10eb('0x1a')]=_['defaults'](config[_0x10eb('0x1a')],{'host':_0x10eb('0x1b'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x10eb('0x1c'))[_0x10eb('0x1d')](socket);function respondWithStatusCode(_0x49e290,_0x431808){_0x431808=_0x431808||0xcc;return function(_0x25ec83){if(_0x25ec83){return _0x49e290[_0x10eb('0x1e')](_0x431808);}return _0x49e290['status'](_0x431808)['end']();};}function respondWithResult(_0x22fcdd,_0x54eb08){_0x54eb08=_0x54eb08||0xc8;return function(_0x4b5315){if(_0x4b5315){return _0x22fcdd['status'](_0x54eb08)[_0x10eb('0x1f')](_0x4b5315);}};}function respondWithFilteredResult(_0x6d6a4d,_0xe72ef5){return function(_0xd48008){if(_0xd48008){var _0x271345=_0xd48008['count'],_0x39990f=_0xe72ef5['offset'],_0x3364e5=_0xe72ef5[_0x10eb('0x20')]+_0xe72ef5[_0x10eb('0x21')],_0xcc35e6;if(_0x3364e5>=_0x271345){_0x3364e5=_0x271345;_0xcc35e6=0xc8;}else{_0xcc35e6=0xce;}_0x6d6a4d[_0x10eb('0x22')](_0xcc35e6);return _0x6d6a4d[_0x10eb('0x23')]('Content-Range',_0x39990f+'-'+_0x3364e5+'/'+_0x271345)[_0x10eb('0x1f')](_0xd48008);}return null;};}function patchUpdates(_0x21b7df){return function(_0x1f7926){try{jsonpatch[_0x10eb('0x24')](_0x1f7926,_0x21b7df,!![]);}catch(_0xc14f7a){return BPromise[_0x10eb('0x25')](_0xc14f7a);}return _0x1f7926[_0x10eb('0x26')]();};}function saveUpdates(_0x2ff38c,_0x3ef6dc){return function(_0x5834f8){if(_0x5834f8){return _0x5834f8[_0x10eb('0x27')](_0x2ff38c)[_0x10eb('0x28')](function(_0x3f5cee){return _0x3f5cee;});}return null;};}function removeEntity(_0xc946dc,_0x2fdb60){return function(_0x477322){if(_0x477322){return _0x477322[_0x10eb('0x29')]()['then'](function(){_0xc946dc[_0x10eb('0x22')](0xcc)[_0x10eb('0x2a')]();});}};}function handleEntityNotFound(_0x4c57bc,_0x3bd36a){return function(_0x2d6625){if(!_0x2d6625){_0x4c57bc['sendStatus'](0x194);}return _0x2d6625;};}function handleError(_0x1953f6,_0x3711ef){_0x3711ef=_0x3711ef||0x1f4;return function(_0x284447){logger[_0x10eb('0x2b')](_0x284447['stack']);if(_0x284447[_0x10eb('0x2c')]){delete _0x284447[_0x10eb('0x2c')];}_0x1953f6['status'](_0x3711ef)[_0x10eb('0x2d')](_0x284447);};}exports[_0x10eb('0x2e')]=function(_0x35f203,_0x5586a3){var _0x482be2={},_0xd8cb5b={},_0x375744={'count':0x0,'rows':[]};var _0x6dedab=db[_0x10eb('0x2f')][_0x10eb('0x30')];_0xd8cb5b['model']=_[_0x10eb('0x31')](_0x6dedab);_0xd8cb5b[_0x10eb('0x32')]=_['keys'](_0x35f203[_0x10eb('0x32')]);_0xd8cb5b['filters']=_[_0x10eb('0x33')](_0xd8cb5b[_0x10eb('0x34')],_0xd8cb5b[_0x10eb('0x32')]);_0x482be2[_0x10eb('0x35')]=_[_0x10eb('0x33')](_0xd8cb5b[_0x10eb('0x34')],qs[_0x10eb('0x36')](_0x35f203[_0x10eb('0x32')]['fields']));_0x482be2[_0x10eb('0x35')]=_0x482be2[_0x10eb('0x35')][_0x10eb('0x37')]?_0x482be2[_0x10eb('0x35')]:_0xd8cb5b[_0x10eb('0x34')];if(!_0x35f203['query'][_0x10eb('0x38')](_0x10eb('0x39'))){_0x482be2[_0x10eb('0x21')]=qs[_0x10eb('0x21')](_0x35f203[_0x10eb('0x32')][_0x10eb('0x21')]);_0x482be2[_0x10eb('0x20')]=qs['offset'](_0x35f203[_0x10eb('0x32')][_0x10eb('0x20')]);}_0x482be2[_0x10eb('0x3a')]=qs['sort'](_0x35f203[_0x10eb('0x32')][_0x10eb('0x3b')]);_0x482be2[_0x10eb('0x3c')]=qs['filters'](_[_0x10eb('0x3d')](_0x35f203[_0x10eb('0x32')],_0xd8cb5b[_0x10eb('0x3e')]));if(_0x35f203[_0x10eb('0x32')]['filter']){_0x482be2[_0x10eb('0x3c')]=_[_0x10eb('0x3f')](_0x482be2['where'],{'$or':_['map'](_0x6dedab,function(_0x54b565){if(_0x54b565[_0x10eb('0x40')][_0x10eb('0x41')]!==_0x10eb('0x42')){var _0x5233e4={};_0x5233e4[_0x54b565[_0x10eb('0x43')]]={'$like':'%'+_0x35f203[_0x10eb('0x32')][_0x10eb('0x44')]+'%'};return _0x5233e4;}})});}_0x482be2=_[_0x10eb('0x3f')]({},_0x482be2,_0x35f203['options']);var _0x2b902e={'where':_0x482be2[_0x10eb('0x3c')]};return db[_0x10eb('0x2f')][_0x10eb('0x45')](_0x2b902e)[_0x10eb('0x28')](function(_0x25ff47){_0x375744[_0x10eb('0x45')]=_0x25ff47;if(_0x35f203[_0x10eb('0x32')][_0x10eb('0x46')]){_0x482be2[_0x10eb('0x47')]=[{'all':!![]}];}return db[_0x10eb('0x2f')][_0x10eb('0x48')](_0x482be2);})[_0x10eb('0x28')](function(_0x515865){_0x375744[_0x10eb('0x49')]=_0x515865;return _0x375744;})[_0x10eb('0x28')](respondWithFilteredResult(_0x5586a3,_0x482be2))['catch'](handleError(_0x5586a3,null));};exports['show']=function(_0x57004f,_0x991996){var _0x5b67e6={'raw':![],'where':{'id':_0x57004f[_0x10eb('0x4a')]['id']}},_0x5731b0={};_0x5731b0['model']=_[_0x10eb('0x31')](db[_0x10eb('0x2f')][_0x10eb('0x30')]);_0x5731b0[_0x10eb('0x32')]=_[_0x10eb('0x31')](_0x57004f[_0x10eb('0x32')]);_0x5731b0[_0x10eb('0x3e')]=_[_0x10eb('0x33')](_0x5731b0[_0x10eb('0x34')],_0x5731b0[_0x10eb('0x32')]);_0x5b67e6[_0x10eb('0x35')]=_[_0x10eb('0x33')](_0x5731b0[_0x10eb('0x34')],qs[_0x10eb('0x36')](_0x57004f[_0x10eb('0x32')][_0x10eb('0x36')]));_0x5b67e6['attributes']=_0x5b67e6[_0x10eb('0x35')][_0x10eb('0x37')]?_0x5b67e6[_0x10eb('0x35')]:_0x5731b0[_0x10eb('0x34')];if(_0x57004f['query']['includeAll']){_0x5b67e6[_0x10eb('0x47')]=[{'all':!![]}];}_0x5b67e6=_[_0x10eb('0x3f')]({},_0x5b67e6,_0x57004f[_0x10eb('0x4b')]);return db[_0x10eb('0x2f')][_0x10eb('0x4c')](_0x5b67e6)[_0x10eb('0x28')](handleEntityNotFound(_0x991996,null))[_0x10eb('0x28')](respondWithResult(_0x991996,null))[_0x10eb('0x4d')](handleError(_0x991996,null));};exports[_0x10eb('0x4e')]=function(_0x8fca9,_0x23138e){return db[_0x10eb('0x2f')][_0x10eb('0x4e')](_0x8fca9['body'],{})[_0x10eb('0x28')](respondWithResult(_0x23138e,0xc9))[_0x10eb('0x4d')](handleError(_0x23138e,null));};exports[_0x10eb('0x4f')]=function(_0x1f1b4b,_0x1b473f){var _0x574d1b={'raw':![],'where':{'id':_0x1f1b4b[_0x10eb('0x4a')]['id']}},_0x508090={};_0x508090[_0x10eb('0x34')]=_[_0x10eb('0x31')](db['UserProfile'][_0x10eb('0x30')]);_0x574d1b[_0x10eb('0x35')]=_[_0x10eb('0x33')](_0x508090['model'],qs['fields'](_0x1f1b4b['query'][_0x10eb('0x36')]));_0x574d1b[_0x10eb('0x35')]=_0x574d1b[_0x10eb('0x35')][_0x10eb('0x37')]?_0x574d1b['attributes']:_0x508090[_0x10eb('0x34')];if(_0x1f1b4b[_0x10eb('0x32')]['includeAll']){_0x574d1b[_0x10eb('0x47')]=[{'all':!![]}];}_0x574d1b=_['merge']({},_0x574d1b,_0x1f1b4b['options']);return db[_0x10eb('0x2f')][_0x10eb('0x4c')](_0x574d1b)[_0x10eb('0x28')](handleEntityNotFound(_0x1b473f,null))['then'](function(_0x472aeb){if(_0x472aeb){var _0x165124=_0x472aeb['get']({'plain':!![]});_0x165124=qs['omit'](_0x165124,['id','createdAt',_0x10eb('0x50'),_0x10eb('0x51')]);_0x1f1b4b[_0x10eb('0x52')]=_[_0x10eb('0x53')](_0x1f1b4b[_0x10eb('0x52')],['id',_0x10eb('0x54'),_0x10eb('0x50')]);return db[_0x10eb('0x55')][_0x10eb('0x56')](function(_0x150a40){return db[_0x10eb('0x2f')][_0x10eb('0x4e')](_[_0x10eb('0x3f')](_0x165124,_0x1f1b4b[_0x10eb('0x52')]),{'include':_0x1f1b4b[_0x10eb('0x32')][_0x10eb('0x46')]?[{'all':!![]}]:undefined,'transaction':_0x150a40})[_0x10eb('0x28')](function(_0x2b2b95){var _0x5233b9=_0x2b2b95[_0x10eb('0x57')]({'plain':!![]});return db[_0x10eb('0x58')][_0x10eb('0x48')]({'where':{'userProfileId':_0x1f1b4b['params']['id']},'raw':!![]})[_0x10eb('0x28')](function(_0x4ea245){if(_0x4ea245){return BPromise[_0x10eb('0x59')](_0x4ea245,function(_0xa411b2){return new BPromise(function(_0x49c8ad,_0x8dd582){if(_0xa411b2[_0x10eb('0x5a')]===null||_0xa411b2[_0x10eb('0x5a')]===0x1)_0x49c8ad(null);return db['UserProfileResource']['findAll']({'where':{'sectionId':_0xa411b2['id']},'raw':!![]})[_0x10eb('0x28')](function(_0x3b88dc){var _0x5be804=_[_0x10eb('0x5b')](_0x3b88dc,function(_0x49786d){return qs[_0x10eb('0x53')](_0x49786d,['id',_0x10eb('0x54'),_0x10eb('0x50'),'sectionId']);});_0x49c8ad(_0x5be804);})[_0x10eb('0x4d')](function(_0x5a1f64){_0x8dd582(_0x5a1f64);});})[_0x10eb('0x28')](function(_0x860d3){var _0x31f4b=qs[_0x10eb('0x53')](_0xa411b2,['id',_0x10eb('0x54'),'updatedAt']);_0x31f4b[_0x10eb('0x5c')]=_0x5233b9['id'];if(_0x860d3)_0x31f4b['Resources']=_0x860d3;return _0x31f4b;})[_0x10eb('0x28')](function(_0x369890){return db[_0x10eb('0x58')][_0x10eb('0x4e')](_0x369890,{'include':[{'model':db[_0x10eb('0x5d')],'as':'Resources'}],'raw':!![],'transaction':_0x150a40});});})['then'](function(){return _0x5233b9;});}});});});}})[_0x10eb('0x28')](respondWithResult(_0x1b473f,0xc9))[_0x10eb('0x4d')](handleError(_0x1b473f,null));};exports[_0x10eb('0x27')]=function(_0x1b0d66,_0x1d3039){if(_0x1b0d66['body']['id']){delete _0x1b0d66[_0x10eb('0x52')]['id'];}return db['UserProfile']['find']({'where':{'id':_0x1b0d66[_0x10eb('0x4a')]['id']}})[_0x10eb('0x28')](handleEntityNotFound(_0x1d3039,null))[_0x10eb('0x28')](saveUpdates(_0x1b0d66['body'],null))[_0x10eb('0x28')](respondWithResult(_0x1d3039,null))[_0x10eb('0x4d')](handleError(_0x1d3039,null));};exports[_0x10eb('0x29')]=function(_0x49e9c4,_0x4a57cc){return db[_0x10eb('0x2f')][_0x10eb('0x4c')]({'where':{'id':_0x49e9c4[_0x10eb('0x4a')]['id']}})['then'](handleEntityNotFound(_0x4a57cc,null))[_0x10eb('0x28')](removeEntity(_0x4a57cc,null))['catch'](handleError(_0x4a57cc,null));};exports[_0x10eb('0x5e')]=function(_0x2bb489,_0x159168){return db[_0x10eb('0x2f')][_0x10eb('0x5e')]()['then'](respondWithResult(_0x159168,null))[_0x10eb('0x4d')](handleError(_0x159168,null));};exports[_0x10eb('0x5f')]=function(_0x523d1b,_0x1a3b81){var _0x2bab5c=_0x523d1b[_0x10eb('0x52')];return db[_0x10eb('0x2f')][_0x10eb('0x4c')]({'where':{'id':_0x523d1b[_0x10eb('0x4a')]['id']}})['then'](handleEntityNotFound(_0x1a3b81,null))[_0x10eb('0x28')](function(_0x5355d2){if(_0x5355d2){return db['sequelize']['transaction'](function(_0x2fb18b){return db[_0x10eb('0x58')][_0x10eb('0x29')]({'where':{'userProfileId':_0x523d1b['params']['id'],'sectionId':_[_0x10eb('0x5b')](_0x2bab5c,function(_0xf21d8d){return _0xf21d8d[_0x10eb('0x60')];})},'transaction':_0x2fb18b})[_0x10eb('0x28')](function(){var _0x2110f6=_[_0x10eb('0x5b')](_0x2bab5c,function(_0x506e54){_0x506e54[_0x10eb('0x5c')]=_0x523d1b[_0x10eb('0x4a')]['id'];return _0x506e54;});var _0x1b3f98=[];return BPromise[_0x10eb('0x59')](_0x2110f6,function(_0x114344){return db['UserProfileSection'][_0x10eb('0x4e')](_0x114344,{'include':[{'model':db[_0x10eb('0x5d')],'as':_0x10eb('0x61')}],'raw':!![],'transaction':_0x2fb18b})[_0x10eb('0x28')](function(_0x38857e){_0x1b3f98['push'](_0x38857e[_0x10eb('0x57')]({'plain':!![]}));});})[_0x10eb('0x28')](function(){return _0x1b3f98;});});});}})[_0x10eb('0x28')](function(_0x13a1cd){return _0x13a1cd;})[_0x10eb('0x28')](respondWithResult(_0x1a3b81,null))['catch'](handleError(_0x1a3b81,null));};exports[_0x10eb('0x62')]=function(_0x2f1020,_0x1be089){var _0x2aba7a;return db[_0x10eb('0x2f')][_0x10eb('0x4c')]({'where':{'id':_0x2f1020['params']['id']},'attributes':['id',_0x10eb('0x2c')]})['then'](handleEntityNotFound(_0x1be089,null))[_0x10eb('0x28')](function(_0x489e55){if(_0x489e55){_0x2aba7a=_0x489e55;return db[_0x10eb('0x58')][_0x10eb('0x29')]({'where':{'userProfileId':_0x2f1020['params']['id'],'sectionId':_0x2f1020['query'][_0x10eb('0x63')]}});}})['then'](function(){return _0x2aba7a;})[_0x10eb('0x28')](respondWithStatusCode(_0x1be089,null))[_0x10eb('0x4d')](handleError(_0x1be089,null));};exports[_0x10eb('0x64')]=function(_0x4b9fe9,_0x57f086){return db['UserProfile'][_0x10eb('0x4c')]({'where':{'id':_0x4b9fe9[_0x10eb('0x4a')]['id']}})[_0x10eb('0x28')](handleEntityNotFound(_0x57f086,null))[_0x10eb('0x28')](function(_0x38f459){if(_0x38f459){return db['sequelize'][_0x10eb('0x56')](function(_0x2642a1){return db['UserProfileSection']['findAll']({'where':{'userProfileId':_0x4b9fe9[_0x10eb('0x4a')]['id']},'attributes':['id'],'raw':!![]})[_0x10eb('0x28')](function(_0x58a02a){if(_0x58a02a){return db[_0x10eb('0x58')]['destroy']({'where':{'userProfileId':_0x4b9fe9['params']['id'],'id':_[_0x10eb('0x5b')](_0x58a02a,function(_0x2ce09f){return _0x2ce09f['id'];})},'transaction':_0x2642a1});}})[_0x10eb('0x28')](function(_0x14a4c7){var _0x8e2173=_[_0x10eb('0x5b')](_0x4b9fe9['body'],function(_0x8c12f6){_0x8c12f6[_0x10eb('0x5c')]=_0x4b9fe9[_0x10eb('0x4a')]['id'];return _0x8c12f6;});return db[_0x10eb('0x58')]['bulkCreate'](_0x8e2173,{'raw':!![],'transaction':_0x2642a1});})[_0x10eb('0x28')](function(_0x2665a8){var _0x5d8a2a=_['filter'](_['map'](_0x2665a8,function(_0x597695){return _0x597695['get']({'plain':!![]});}),{'includeAll':![]});if(_0x5d8a2a){return db[_0x10eb('0x58')]['findAll']({'where':{'userProfileId':_0x4b9fe9[_0x10eb('0x4a')]['id'],'sectionId':_[_0x10eb('0x5b')](_0x5d8a2a,function(_0x30e4d4){return _0x30e4d4[_0x10eb('0x60')];})},'attributes':['id',_0x10eb('0x60')],'raw':!![]})['then'](function(_0x202c96){var _0x3c4e65=_[_0x10eb('0x5b')](_0x4b9fe9[_0x10eb('0x52')],function(_0x2e38cf){_0x2e38cf[_0x10eb('0x5c')]=_0x4b9fe9[_0x10eb('0x4a')]['id'];return _0x2e38cf;});return db[_0x10eb('0x5d')][_0x10eb('0x65')](_0x3c4e65,{'raw':!![],'transaction':_0x2642a1});});}})[_0x10eb('0x4d')](handleError(_0x57f086,null));});}})[_0x10eb('0x28')](function(_0x11bbd7){var _0x155d18=_[_0x10eb('0x5b')](_0x11bbd7,function(_0x28f4cc){return _0x28f4cc[_0x10eb('0x57')]({'plain':!![]});});})[_0x10eb('0x28')](respondWithResult(_0x57f086,null))[_0x10eb('0x4d')](handleError(_0x57f086,null));};exports[_0x10eb('0x66')]=function(_0xeb91c6,_0x27f779,_0x475f36){return db[_0x10eb('0x2f')][_0x10eb('0x4c')]({'where':{'id':_0xeb91c6[_0x10eb('0x4a')]['id']}})[_0x10eb('0x28')](handleEntityNotFound(_0x27f779,null))[_0x10eb('0x28')](function(_0x541260){if(_0x541260){return _0x541260['removeResources'](_0xeb91c6[_0x10eb('0x32')][_0x10eb('0x63')]);}})[_0x10eb('0x28')](respondWithStatusCode(_0x27f779,null))[_0x10eb('0x4d')](handleError(_0x27f779,null));};exports['getResources']=function(_0x5e0634,_0x558c44){var _0x279e63={'raw':![],'where':{}};var _0x19c83e={};var _0x35db6c={'count':0x0,'rows':[]};var _0x3bc392=_0x5e0634[_0x10eb('0x32')][_0x10eb('0x67')];if(typeof _0x3bc392===_0x10eb('0x68')){throw new db[(_0x10eb('0x69'))][(_0x10eb('0x6a'))](_0x10eb('0x6b'));}var _0x4dccba=_0x5e0634[_0x10eb('0x32')][_0x10eb('0x6c')]||![];var _0x5af9d8=getQueryModels(_0x3bc392,_0x4dccba);if(typeof _0x5af9d8[_0x10eb('0x6d')]===_0x10eb('0x68')){throw new db[(_0x10eb('0x69'))][(_0x10eb('0x6a'))](_0x10eb('0x6e')+_0x3bc392+'\x27');}var _0x5b1be7=[];if(!_[_0x10eb('0x6f')](_0x5af9d8[_0x10eb('0x70')])){_0x5b1be7=_0x5af9d8[_0x10eb('0x70')];}else{_0x5b1be7=[{'name':_0x3bc392}];}return db[_0x10eb('0x2f')]['findOne']({'where':{'id':_0x5e0634['params']['id']}})[_0x10eb('0x28')](handleEntityNotFound(_0x558c44,null))[_0x10eb('0x28')](function(_0x44c13d){if(_0x44c13d){var _0x570d0f=[];for(var _0x42f4af=0x0;_0x42f4af<_0x5b1be7['length'];_0x42f4af++){_0x570d0f['push'](db[_0x10eb('0x58')][_0x10eb('0x71')]({'where':{'userProfileId':_0x44c13d['id'],'name':_0x5b1be7[_0x42f4af]['name']},'raw':!![]}));}return BPromise[_0x10eb('0x72')](_0x570d0f);}})[_0x10eb('0x28')](function(_0x5e365c){var _0x28f14c=_[_0x10eb('0x44')](_0x5e365c,function(_0x25aac0){return _0x25aac0?_0x25aac0:undefined;});var _0x1c386=_['filter'](_0x5b1be7,['ignore',!![]]);var _0x3675fe=_['isEmpty'](_0x28f14c)&&_[_0x10eb('0x6f')](_0x1c386)?null:_[_0x10eb('0x73')](_0x1c386,_0x28f14c);if(_0x3675fe){var _0x52af44=[];for(var _0x2be919=0x0;_0x2be919<_0x3675fe[_0x10eb('0x37')];_0x2be919++){var _0x1a19fd=_[_0x10eb('0x4c')](_0x5b1be7,function(_0x1011a0){return _0x3675fe[_0x2be919]?_0x1011a0[_0x10eb('0x2c')]===_0x3675fe[_0x2be919][_0x10eb('0x2c')]:null;});if(_0x1a19fd){if(_0x3675fe[_0x2be919][_0x10eb('0x74')]){_0x52af44['push'](getAllResources(_0x5af9d8['childModel'],_0x3675fe[_0x2be919]));}else{if(!_0x3675fe[_0x2be919]['autoAssociation']){_0x52af44[_0x10eb('0x75')](getAllowedResources(_0x1a19fd,_0x3675fe[_0x2be919],_0x5af9d8[_0x10eb('0x6d')]));}else{if(_0x1a19fd[_0x10eb('0x34')]){_0x52af44[_0x10eb('0x75')](getAllFilteredResources(_0x1a19fd,_0x3675fe[_0x2be919]));}}}}}return BPromise[_0x10eb('0x72')](_0x52af44);}else{return null;}})['then'](function(_0xf275d0){var _0x4eecd4=_0xf275d0;var _0xe003ff=null;if(_0x4eecd4){_0xe003ff=_0x4eecd4[_0x10eb('0x37')]===0x1?_0x4eecd4[0x0]:null;}if(_0xe003ff||_0x4eecd4){var _0x17f2d3=db[_0x5af9d8[_0x10eb('0x6d')]][_0x10eb('0x30')];_0x19c83e[_0x10eb('0x34')]=_[_0x10eb('0x31')](_0x17f2d3);_0x19c83e[_0x10eb('0x32')]=_['keys'](_0x5e0634[_0x10eb('0x32')]);_0x19c83e[_0x10eb('0x3e')]=_[_0x10eb('0x33')](_0x19c83e[_0x10eb('0x34')],_0x19c83e[_0x10eb('0x32')]);_0x279e63[_0x10eb('0x35')]=_[_0x10eb('0x33')](_0x19c83e[_0x10eb('0x34')],qs['fields'](_0x5e0634[_0x10eb('0x32')][_0x10eb('0x36')]));_0x279e63[_0x10eb('0x35')]=_0x279e63[_0x10eb('0x35')]['length']?_0x279e63[_0x10eb('0x35')]:_0x19c83e[_0x10eb('0x34')];if(!_0x5e0634[_0x10eb('0x32')][_0x10eb('0x38')]('nolimit')){_0x279e63[_0x10eb('0x21')]=qs['limit'](_0x5e0634[_0x10eb('0x32')][_0x10eb('0x21')]);_0x279e63[_0x10eb('0x20')]=qs['offset'](_0x5e0634[_0x10eb('0x32')][_0x10eb('0x20')]);}_0x279e63[_0x10eb('0x3a')]=qs[_0x10eb('0x3b')](_0x5e0634['query'][_0x10eb('0x3b')]);_0x279e63[_0x10eb('0x3c')]=qs[_0x10eb('0x3e')](_[_0x10eb('0x3d')](_0x5e0634[_0x10eb('0x32')],_0x19c83e['filters']));if(_0x5e0634[_0x10eb('0x32')][_0x10eb('0x44')]){_0x279e63[_0x10eb('0x3c')]=_[_0x10eb('0x3f')](_0x279e63[_0x10eb('0x3c')],{'$or':_['map'](_0x17f2d3,function(_0x57156c){if(_0x57156c[_0x10eb('0x40')]['key']!==_0x10eb('0x42')){var _0x1bd86f={};_0x1bd86f[_0x57156c['field']]={'$like':'%'+_0x5e0634[_0x10eb('0x32')][_0x10eb('0x44')]+'%'};return _0x1bd86f;}})});}var _0x294aca=[];if(_0xe003ff){var _0x7fafd5=_[_0x10eb('0x4c')](_0x5b1be7,[_0x10eb('0x2c'),_0xe003ff['name']]);if(_0x7fafd5[_0x10eb('0x43')]){var _0x10b7d2={};if(_0x5af9d8[_0x10eb('0x6d')]===_0x10eb('0x76')){_0x10b7d2[_0x7fafd5[_0x10eb('0x77')]]=_[_0x10eb('0x5b')](_0xe003ff[_0x10eb('0x78')],'id');}else{_0x10b7d2[_0x7fafd5[_0x10eb('0x77')]]=_0xe003ff[_0x10eb('0x78')];}_0x294aca[_0x10eb('0x75')](_0x10b7d2);}else{_0x279e63[_0x10eb('0x3c')]['id']=_0xe003ff[_0x10eb('0x78')];}}else{for(var _0x1c4cd2=0x0;_0x1c4cd2<_0x4eecd4[_0x10eb('0x37')];_0x1c4cd2++){var _0x7fafd5=_[_0x10eb('0x4c')](_0x5b1be7,['name',_0x4eecd4[_0x1c4cd2][_0x10eb('0x2c')]]);if(_0x7fafd5['field']){var _0x10b7d2={};_0x10b7d2[_0x7fafd5[_0x10eb('0x77')]]=_0x4eecd4[_0x1c4cd2]['associatedResources'];_0x294aca[_0x10eb('0x75')](_0x10b7d2);}else{if(!_0x279e63['where']['id'])_0x279e63['where']['id']=[];_0x4eecd4[_0x1c4cd2]['associatedResources'][_0x10eb('0x79')](function(_0x325202){_0x279e63[_0x10eb('0x3c')]['id'][_0x10eb('0x75')](_0x325202);});}}}if(!_[_0x10eb('0x6f')](_0x294aca)){_0x279e63['where']=_[_0x10eb('0x3f')](_0x279e63['where'],{'$and':{'$or':_0x294aca}});}_0x279e63=_[_0x10eb('0x3f')]({},_0x279e63,_0x5e0634[_0x10eb('0x4b')]);if(_0xe003ff&&!_0xe003ff['autoAssociation']&&_0x5af9d8[_0x10eb('0x6d')]===_0x10eb('0x76')){if(_0x5e0634[_0x10eb('0x32')][_0x10eb('0x46')]){_0x279e63['include']=[{'all':!![]}];}return db[_0x5af9d8[_0x10eb('0x6d')]]['findAll'](_0x279e63)['then'](function(_0x14f311){var _0x48f146=[];_0x14f311[_0x10eb('0x79')](function(_0xe31a02){var _0x5a1d13;switch(_0xe31a02['reportType']){case _0x10eb('0x7a'):_0x5a1d13=_[_0x10eb('0x4c')](_0xe003ff[_0x10eb('0x78')],function(_0xb766c4){return _0xb766c4['id']===_0xe31a02[_0x10eb('0x7b')]&&_0xb766c4[_0x10eb('0x40')]==='DefaultReports';});break;case _0x10eb('0x7c'):_0x5a1d13=_[_0x10eb('0x4c')](_0xe003ff[_0x10eb('0x78')],function(_0x8258f9){return _0x8258f9['id']===_0xe31a02[_0x10eb('0x7b')]&&_0x8258f9['type']===_0x10eb('0x7d');});break;}if(_0x5a1d13)_0x48f146[_0x10eb('0x75')](_0xe31a02);});_0x35db6c[_0x10eb('0x45')]=_0x48f146[_0x10eb('0x37')];_0x35db6c['rows']=_0x48f146;return _0x35db6c;});}else{return db[_0x5af9d8[_0x10eb('0x6d')]][_0x10eb('0x45')]({'where':_0x279e63['where']})['then'](function(_0x508d20){_0x35db6c[_0x10eb('0x45')]=_0x508d20;if(_0x5e0634[_0x10eb('0x32')][_0x10eb('0x46')]){if(_0x5af9d8['childModel']==='CmContact'){_0x279e63[_0x10eb('0x47')]=[{'model':db[_0x10eb('0x7e')],'as':_0x10eb('0x7f'),'attributes':['id',_0x10eb('0x2c'),_0x10eb('0x80')],'required':_0x5e0634[_0x10eb('0x32')][_0x10eb('0x81')]?!![]:![]},{'model':db[_0x10eb('0x7e')],'as':_0x10eb('0x82'),'attributes':['id',_0x10eb('0x2c'),_0x10eb('0x80')],'through':_0x5e0634[_0x10eb('0x32')][_0x10eb('0x81')]?{'attributes':[],'where':{'TagId':_0x5e0634[_0x10eb('0x32')]['tag']||undefined}}:{},'required':_0x5e0634[_0x10eb('0x32')][_0x10eb('0x81')]?!![]:![]}];}else{_0x279e63[_0x10eb('0x47')]=[{'all':!![]}];}}return db[_0x5af9d8[_0x10eb('0x6d')]][_0x10eb('0x48')](_0x279e63);})[_0x10eb('0x28')](function(_0x354dfb){_0x35db6c[_0x10eb('0x49')]=_0x354dfb;return _0x35db6c;});}}else{return _0x35db6c;}})[_0x10eb('0x28')](respondWithFilteredResult(_0x558c44,_0x279e63))[_0x10eb('0x4d')](handleError(_0x558c44,null));};function getAllResources(_0x209ab2,_0x40a331){return new BPromise(function(_0xa2f75c,_0x20b691){if(_0x40a331){var _0x1d381e=_0x40a331[_0x10eb('0x44')]?{[_0x40a331[_0x10eb('0x44')][_0x10eb('0x43')]]:_0x40a331[_0x10eb('0x44')][_0x10eb('0x83')]}:undefined;return db[_0x209ab2][_0x10eb('0x48')]({'where':_0x1d381e,'raw':!![]})[_0x10eb('0x28')](function(_0x48b8dd){_0x40a331[_0x10eb('0x78')]=_[_0x10eb('0x5b')](_0x48b8dd,'id');_0xa2f75c(_0x40a331);})['catch'](function(_0x6cf4d7){_0x20b691(_0x6cf4d7);});}else{_0xa2f75c(null);}});}function getAllFilteredResources(_0x2b6dc5,_0x4e8331){return new BPromise(function(_0x104524,_0x513f1e){var _0x4f7e2e=_0x2b6dc5[_0x10eb('0x44')]?{[_0x2b6dc5[_0x10eb('0x44')][_0x10eb('0x43')]]:_0x2b6dc5[_0x10eb('0x44')][_0x10eb('0x83')]}:undefined;return db[_0x2b6dc5[_0x10eb('0x34')]][_0x10eb('0x48')]({'where':_0x4f7e2e,'raw':!![]})['then'](function(_0x559119){_0x4e8331[_0x10eb('0x78')]=_[_0x10eb('0x5b')](_0x559119,function(_0x4c4fbc){return _0x4c4fbc[_0x10eb('0x2c')];});_0x104524(_0x4e8331);})['catch'](function(_0xc679b5){_0x513f1e(_0xc679b5);});});}function getAllowedResources(_0x122d8d,_0x2e5672,_0x35fab1){return new BPromise(function(_0x39ab8b,_0x2bca05){if(_0x2e5672){return db[_0x10eb('0x5d')][_0x10eb('0x48')]({'where':{'sectionId':_0x2e5672['id']},'raw':!![]})[_0x10eb('0x28')](function(_0x4a29b0){if(_0x122d8d['field']&&_0x122d8d['field']!=='id'){_0x2e5672[_0x10eb('0x78')]=_['map'](_0x4a29b0,function(_0x36e465){return _0x36e465[_0x122d8d['field']];});}else{if(_0x35fab1===_0x10eb('0x76')){_0x2e5672[_0x10eb('0x78')]=_['map'](_0x4a29b0,function(_0x251426){return{'id':_0x251426[_0x10eb('0x84')],'type':_0x251426[_0x10eb('0x40')]};});}else{_0x2e5672[_0x10eb('0x78')]=_[_0x10eb('0x5b')](_0x4a29b0,function(_0x3384e1){return _0x3384e1[_0x10eb('0x84')];});}}_0x39ab8b(_0x2e5672);})['catch'](function(_0x4c5db2){_0x2bca05(_0x4c5db2);});}else{_0x39ab8b(null);}});}function getQueryModels(_0x367733,_0x1339a9){var _0x216a5b=_0x367733['toLowerCase']();var _0x345f5a={'childModel':undefined,'parentSections':[]};switch(_0x216a5b){case _0x10eb('0x85'):_0x345f5a['childModel']=_0x10eb('0x86');break;case _0x10eb('0x87'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0x88');break;case'squarerecordings':_0x345f5a['childModel']=_0x10eb('0x89');_0x345f5a['parentSections']=[{'name':'SquareProjects','field':_0x10eb('0x2c'),'foreignKey':_0x10eb('0x8a')}];break;case _0x10eb('0x8b'):_0x345f5a[_0x10eb('0x6d')]='JscriptyProject';break;case'contacts':_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0x8c');_0x345f5a['parentSections']=[{'name':_0x10eb('0x8d'),'field':'id','foreignKey':'ListId'}];break;case'lists':_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0x8e');break;case _0x10eb('0x8f'):_0x345f5a[_0x10eb('0x6d')]='CmCompany';break;case _0x10eb('0x90'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0x91');break;case _0x10eb('0x92'):_0x345f5a['childModel']='ChatQueue';break;case _0x10eb('0x93'):_0x345f5a['childModel']=_0x10eb('0x94');break;case _0x10eb('0x95'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0x96');break;case _0x10eb('0x97'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0x98');break;case _0x10eb('0x99'):case _0x10eb('0x9a'):case _0x10eb('0x9b'):_0x345f5a['childModel']=_0x10eb('0x9c');break;case _0x10eb('0x9d'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0x9e');break;case _0x10eb('0x9f'):_0x345f5a['childModel']=_0x10eb('0xa0');break;case _0x10eb('0xa1'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xa2');_0x345f5a['parentSections']=[{'name':'Agents','field':_0x10eb('0x2c'),'foreignKey':_0x10eb('0xa3'),'model':_0x10eb('0xa4'),'filter':{'field':_0x10eb('0xa5'),'value':[_0x10eb('0xa6')]}},{'name':_0x10eb('0xa7'),'field':_0x10eb('0x2c'),'foreignKey':_0x10eb('0xa3'),'model':_0x10eb('0xa4'),'filter':{'field':_0x10eb('0xa5'),'value':['telephone']}},{'name':_0x10eb('0xa8'),'field':_0x10eb('0x2c'),'foreignKey':_0x10eb('0xa9'),'model':_0x10eb('0xaa'),'filter':{'field':_0x10eb('0x40'),'value':['inbound']}},{'name':_0x10eb('0xab'),'field':_0x10eb('0x2c'),'foreignKey':_0x10eb('0xa9'),'model':'VoiceQueue','filter':{'field':_0x10eb('0x40'),'value':[_0x10eb('0xac')]}}];break;case'musiconholds':_0x345f5a[_0x10eb('0x6d')]='VoiceMusicOnHold';break;case _0x10eb('0xad'):_0x345f5a['childModel']='VoiceChanSpy';break;case _0x10eb('0xae'):_0x345f5a['childModel']=_0x10eb('0xaf');break;case _0x10eb('0xb0'):_0x345f5a[_0x10eb('0x6d')]='Campaign';break;case _0x10eb('0xb1'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xb2');break;case'mailaccounts':_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xb3');break;case _0x10eb('0xb4'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xb5');break;case _0x10eb('0xb6'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xb7');break;case _0x10eb('0xb8'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xb9');break;case'smsqueues':_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xba');break;case _0x10eb('0xbb'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xbc');break;case _0x10eb('0xbd'):_0x345f5a['childModel']=_0x10eb('0xbe');break;case _0x10eb('0xbf'):case _0x10eb('0xc0'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xaa');if(_0x1339a9){_0x345f5a['parentSections']=[{'name':'VoiceQueues'},{'name':'QueueCampaigns'}];}break;case'users':case _0x10eb('0xc1'):case _0x10eb('0xc2'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xa4');if(_0x1339a9){_0x345f5a[_0x10eb('0x70')]=[{'name':_0x10eb('0xc3'),'filter':{'field':'role','value':['admin',_0x10eb('0xc4')]},'ignore':!![]},{'name':_0x10eb('0xc5')},{'name':_0x10eb('0xa7')}];}break;case'zendeskaccounts':_0x345f5a['childModel']=_0x10eb('0xc6');break;case _0x10eb('0xc7'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xc8');break;case'freshdeskaccounts':_0x345f5a[_0x10eb('0x6d')]='FreshdeskAccount';break;case _0x10eb('0xc9'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xca');break;case _0x10eb('0xcb'):_0x345f5a['childModel']=_0x10eb('0xcc');break;case'zohoaccounts':_0x345f5a['childModel']=_0x10eb('0xcd');break;case _0x10eb('0xce'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xa4');break;case _0x10eb('0xcf'):_0x345f5a[_0x10eb('0x6d')]='CannedAnswer';break;case'dispositions':_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xd0');break;case _0x10eb('0xd1'):_0x345f5a['childModel']=_0x10eb('0xd2');break;case _0x10eb('0xd3'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xd4');break;case'pauses':_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xd5');break;case'scheduler':_0x345f5a['childModel']=_0x10eb('0xd6');break;case'sounds':_0x345f5a[_0x10eb('0x6d')]='Sound';break;case _0x10eb('0xd7'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0x7e');break;case'templates':_0x345f5a[_0x10eb('0x6d')]='Template';break;case _0x10eb('0xd8'):_0x345f5a['childModel']=_0x10eb('0xd9');break;case _0x10eb('0xda'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xdb');break;case _0x10eb('0xdc'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xdd');break;case _0x10eb('0xde'):_0x345f5a['childModel']='Plugin';break;case _0x10eb('0xdf'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0x76');_0x345f5a[_0x10eb('0x70')]=[{'name':_0x10eb('0xe0'),'field':'id','foreignKey':'reportId'}];break;case _0x10eb('0xe1'):_0x345f5a[_0x10eb('0x6d')]=_0x10eb('0xe2');break;default:return _0x345f5a;}return _0x345f5a;}
\ No newline at end of file
+var _0x8aff=['childModel','undefined','isEmpty','parentSections','findOne','push','all','ignore','union','hasOwnProperty','key','AnalyticExtractedReport','foreignKey','associatedResources','forEach','default','reportId','DefaultReports','custom','Tag','Tags','color','tag','value','resourceId','toLowerCase','squareprojects','SquareProject','odbc','squarerecordings','SquareRecording','projects','JscriptyProject','contacts','CmContact','Lists','ListId','lists','CmList','CmCompany','globalcustomfields','CmCustomField','ChatQueue','ChatWebsite','faxqueues','FaxQueue','faxaccounts','FaxAccount','inboundroutes','VoiceExtension','contexts','VoiceContext','VoiceMail','VoiceRecording','Agents','User','role','agent','membername','telephone','VoiceQueues','VoiceQueue','inbound','QueueCampaigns','queue','musiconholds','VoiceMusicOnHold','ivrcampaigns','MailQueue','mailaccounts','mailsubstatuses','openchannelqueues','openchannelaccounts','OpenchannelAccount','SmsQueue','smsaccounts','SmsAccount','teams','queuecampaigns','users','agents','Users','Telephones','zendeskaccounts','ZendeskAccount','salesforceaccounts','SalesforceAccount','freshdeskaccounts','FreshdeskAccount','sugarcrmaccounts','SugarcrmAccount','deskaccounts','zohoaccounts','ZohoAccount','cannedanswers','CannedAnswer','dispositions','Disposition','customdashboards','Dashboard','intervals','Interval','pauses','Pause','scheduler','Schedule','sounds','tags','templates','Template','triggers','trunks','Trunk','Variable','metrics','AnalyticMetric','rimraf','zip-dir','moment','bluebird','util','path','sox','to-csv','ejs','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','redis','localhost','./userProfile.socket','sendStatus','status','end','limit','set','Content-Range','apply','reject','save','update','name','send','index','UserProfile','model','keys','query','attributes','intersection','fields','length','nolimit','offset','order','sort','where','filters','pick','filter','merge','map','type','VIRTUAL','field','options','count','includeAll','include','findAll','then','rows','catch','show','params','rawAttributes','create','clone','find','get','createdAt','crudPermissions','omit','sequelize','transaction','UserProfileSection','each','autoAssociation','UserProfileResource','updatedAt','sectionId','userProfileId','Resources','body','destroy','describe','addSections','removeSections','ids','bulkCreate','removeResources','getResources','section','Sequelize','ValidationError'];(function(_0x52ed18,_0x722adb){var _0x5d0a9e=function(_0x464a){while(--_0x464a){_0x52ed18['push'](_0x52ed18['shift']());}};_0x5d0a9e(++_0x722adb);}(_0x8aff,0x146));var _0xf8af=function(_0x565ed7,_0x398228){_0x565ed7=_0x565ed7-0x0;var _0x183ad7=_0x8aff[_0x565ed7];return _0x183ad7;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xf8af('0x0'));var zipdir=require(_0xf8af('0x1'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xf8af('0x2'));var BPromise=require(_0xf8af('0x3'));var Mustache=require('mustache');var util=require(_0xf8af('0x4'));var path=require(_0xf8af('0x5'));var sox=require(_0xf8af('0x6'));var csv=require(_0xf8af('0x7'));var ejs=require(_0xf8af('0x8'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xf8af('0x7'));var querystring=require('querystring');var Papa=require(_0xf8af('0x9'));var Redis=require(_0xf8af('0xa'));var authService=require(_0xf8af('0xb'));var qs=require(_0xf8af('0xc'));var hardwareService=require(_0xf8af('0xd'));var logger=require(_0xf8af('0xe'))('api');var utils=require(_0xf8af('0xf'));var config=require('../../config/environment');var db=require(_0xf8af('0x10'))['db'];config[_0xf8af('0x11')]=_['defaults'](config[_0xf8af('0x11')],{'host':_0xf8af('0x12'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0xf8af('0x13'))['register'](socket);function respondWithStatusCode(_0x2c2be1,_0x5e01c8){_0x5e01c8=_0x5e01c8||0xcc;return function(_0x590ab9){if(_0x590ab9){return _0x2c2be1[_0xf8af('0x14')](_0x5e01c8);}return _0x2c2be1[_0xf8af('0x15')](_0x5e01c8)[_0xf8af('0x16')]();};}function respondWithResult(_0x3b2450,_0x518ee5){_0x518ee5=_0x518ee5||0xc8;return function(_0x4a5989){if(_0x4a5989){return _0x3b2450[_0xf8af('0x15')](_0x518ee5)['json'](_0x4a5989);}};}function respondWithFilteredResult(_0x42ef42,_0x34631b){return function(_0x7f12d4){if(_0x7f12d4){var _0x3958ad=_0x7f12d4['count'],_0x393fa5=_0x34631b['offset'],_0x44d587=_0x34631b['offset']+_0x34631b[_0xf8af('0x17')],_0x7874a9;if(_0x44d587>=_0x3958ad){_0x44d587=_0x3958ad;_0x7874a9=0xc8;}else{_0x7874a9=0xce;}_0x42ef42[_0xf8af('0x15')](_0x7874a9);return _0x42ef42[_0xf8af('0x18')](_0xf8af('0x19'),_0x393fa5+'-'+_0x44d587+'/'+_0x3958ad)['json'](_0x7f12d4);}return null;};}function patchUpdates(_0x7896e4){return function(_0x1ad201){try{jsonpatch[_0xf8af('0x1a')](_0x1ad201,_0x7896e4,!![]);}catch(_0x326094){return BPromise[_0xf8af('0x1b')](_0x326094);}return _0x1ad201[_0xf8af('0x1c')]();};}function saveUpdates(_0x3c68ef,_0x561cf1){return function(_0x104bd7){if(_0x104bd7){return _0x104bd7[_0xf8af('0x1d')](_0x3c68ef)['then'](function(_0x42fa98){return _0x42fa98;});}return null;};}function removeEntity(_0x45b718,_0x5f25a7){return function(_0x5ac405){if(_0x5ac405){return _0x5ac405['destroy']()['then'](function(){_0x45b718[_0xf8af('0x15')](0xcc)[_0xf8af('0x16')]();});}};}function handleEntityNotFound(_0x3d0b29,_0xe27b49){return function(_0x49eec0){if(!_0x49eec0){_0x3d0b29[_0xf8af('0x14')](0x194);}return _0x49eec0;};}function handleError(_0x6bba5,_0x95327f){_0x95327f=_0x95327f||0x1f4;return function(_0x4787a5){logger['error'](_0x4787a5['stack']);if(_0x4787a5[_0xf8af('0x1e')]){delete _0x4787a5[_0xf8af('0x1e')];}_0x6bba5[_0xf8af('0x15')](_0x95327f)[_0xf8af('0x1f')](_0x4787a5);};}exports[_0xf8af('0x20')]=function(_0x42fd81,_0x423291){var _0x2eb824={},_0x326c7e={},_0x8260ca={'count':0x0,'rows':[]};var _0x402897=db[_0xf8af('0x21')]['rawAttributes'];_0x326c7e[_0xf8af('0x22')]=_[_0xf8af('0x23')](_0x402897);_0x326c7e[_0xf8af('0x24')]=_['keys'](_0x42fd81[_0xf8af('0x24')]);_0x326c7e['filters']=_['intersection'](_0x326c7e[_0xf8af('0x22')],_0x326c7e[_0xf8af('0x24')]);_0x2eb824[_0xf8af('0x25')]=_[_0xf8af('0x26')](_0x326c7e[_0xf8af('0x22')],qs[_0xf8af('0x27')](_0x42fd81[_0xf8af('0x24')][_0xf8af('0x27')]));_0x2eb824[_0xf8af('0x25')]=_0x2eb824['attributes'][_0xf8af('0x28')]?_0x2eb824['attributes']:_0x326c7e['model'];if(!_0x42fd81[_0xf8af('0x24')]['hasOwnProperty'](_0xf8af('0x29'))){_0x2eb824[_0xf8af('0x17')]=qs[_0xf8af('0x17')](_0x42fd81[_0xf8af('0x24')]['limit']);_0x2eb824[_0xf8af('0x2a')]=qs['offset'](_0x42fd81[_0xf8af('0x24')][_0xf8af('0x2a')]);}_0x2eb824[_0xf8af('0x2b')]=qs[_0xf8af('0x2c')](_0x42fd81[_0xf8af('0x24')][_0xf8af('0x2c')]);_0x2eb824[_0xf8af('0x2d')]=qs[_0xf8af('0x2e')](_[_0xf8af('0x2f')](_0x42fd81[_0xf8af('0x24')],_0x326c7e[_0xf8af('0x2e')]));if(_0x42fd81[_0xf8af('0x24')][_0xf8af('0x30')]){_0x2eb824[_0xf8af('0x2d')]=_[_0xf8af('0x31')](_0x2eb824[_0xf8af('0x2d')],{'$or':_[_0xf8af('0x32')](_0x402897,function(_0x567ce2){if(_0x567ce2[_0xf8af('0x33')]['key']!==_0xf8af('0x34')){var _0x2d81d1={};_0x2d81d1[_0x567ce2[_0xf8af('0x35')]]={'$like':'%'+_0x42fd81[_0xf8af('0x24')]['filter']+'%'};return _0x2d81d1;}})});}_0x2eb824=_['merge']({},_0x2eb824,_0x42fd81[_0xf8af('0x36')]);var _0x21de24={'where':_0x2eb824[_0xf8af('0x2d')]};return db[_0xf8af('0x21')][_0xf8af('0x37')](_0x21de24)['then'](function(_0x57163a){_0x8260ca['count']=_0x57163a;if(_0x42fd81[_0xf8af('0x24')][_0xf8af('0x38')]){_0x2eb824[_0xf8af('0x39')]=[{'all':!![]}];}return db[_0xf8af('0x21')][_0xf8af('0x3a')](_0x2eb824);})[_0xf8af('0x3b')](function(_0x242f61){_0x8260ca[_0xf8af('0x3c')]=_0x242f61;return _0x8260ca;})[_0xf8af('0x3b')](respondWithFilteredResult(_0x423291,_0x2eb824))[_0xf8af('0x3d')](handleError(_0x423291,null));};exports[_0xf8af('0x3e')]=function(_0x2e00ba,_0x5ab459){var _0xade929={'raw':![],'where':{'id':_0x2e00ba[_0xf8af('0x3f')]['id']}},_0x57dcb3={};_0x57dcb3[_0xf8af('0x22')]=_[_0xf8af('0x23')](db[_0xf8af('0x21')][_0xf8af('0x40')]);_0x57dcb3['query']=_[_0xf8af('0x23')](_0x2e00ba[_0xf8af('0x24')]);_0x57dcb3[_0xf8af('0x2e')]=_[_0xf8af('0x26')](_0x57dcb3[_0xf8af('0x22')],_0x57dcb3[_0xf8af('0x24')]);_0xade929[_0xf8af('0x25')]=_[_0xf8af('0x26')](_0x57dcb3[_0xf8af('0x22')],qs[_0xf8af('0x27')](_0x2e00ba['query'][_0xf8af('0x27')]));_0xade929[_0xf8af('0x25')]=_0xade929[_0xf8af('0x25')]['length']?_0xade929['attributes']:_0x57dcb3[_0xf8af('0x22')];if(_0x2e00ba[_0xf8af('0x24')]['includeAll']){_0xade929[_0xf8af('0x39')]=[{'all':!![]}];}_0xade929=_[_0xf8af('0x31')]({},_0xade929,_0x2e00ba[_0xf8af('0x36')]);return db['UserProfile']['find'](_0xade929)['then'](handleEntityNotFound(_0x5ab459,null))[_0xf8af('0x3b')](respondWithResult(_0x5ab459,null))[_0xf8af('0x3d')](handleError(_0x5ab459,null));};exports['create']=function(_0x12f8cc,_0xa97a24){return db['UserProfile'][_0xf8af('0x41')](_0x12f8cc['body'],{})[_0xf8af('0x3b')](respondWithResult(_0xa97a24,0xc9))[_0xf8af('0x3d')](handleError(_0xa97a24,null));};exports[_0xf8af('0x42')]=function(_0x2430ff,_0x4053db){var _0x29c643={'raw':![],'where':{'id':_0x2430ff[_0xf8af('0x3f')]['id']}},_0x4e376b={};_0x4e376b[_0xf8af('0x22')]=_[_0xf8af('0x23')](db[_0xf8af('0x21')][_0xf8af('0x40')]);_0x29c643[_0xf8af('0x25')]=_[_0xf8af('0x26')](_0x4e376b['model'],qs[_0xf8af('0x27')](_0x2430ff[_0xf8af('0x24')]['fields']));_0x29c643[_0xf8af('0x25')]=_0x29c643[_0xf8af('0x25')][_0xf8af('0x28')]?_0x29c643[_0xf8af('0x25')]:_0x4e376b['model'];if(_0x2430ff[_0xf8af('0x24')][_0xf8af('0x38')]){_0x29c643[_0xf8af('0x39')]=[{'all':!![]}];}_0x29c643=_['merge']({},_0x29c643,_0x2430ff[_0xf8af('0x36')]);return db[_0xf8af('0x21')][_0xf8af('0x43')](_0x29c643)[_0xf8af('0x3b')](handleEntityNotFound(_0x4053db,null))['then'](function(_0x4d9817){if(_0x4d9817){var _0x5495e3=_0x4d9817[_0xf8af('0x44')]({'plain':!![]});_0x5495e3=qs['omit'](_0x5495e3,['id',_0xf8af('0x45'),'updatedAt',_0xf8af('0x46')]);_0x2430ff['body']=_[_0xf8af('0x47')](_0x2430ff['body'],['id',_0xf8af('0x45'),'updatedAt']);return db[_0xf8af('0x48')][_0xf8af('0x49')](function(_0xf68167){return db[_0xf8af('0x21')][_0xf8af('0x41')](_[_0xf8af('0x31')](_0x5495e3,_0x2430ff['body']),{'include':_0x2430ff[_0xf8af('0x24')][_0xf8af('0x38')]?[{'all':!![]}]:undefined,'transaction':_0xf68167})['then'](function(_0x392465){var _0x565660=_0x392465['get']({'plain':!![]});return db[_0xf8af('0x4a')][_0xf8af('0x3a')]({'where':{'userProfileId':_0x2430ff[_0xf8af('0x3f')]['id']},'raw':!![]})[_0xf8af('0x3b')](function(_0x1e281d){if(_0x1e281d){return BPromise[_0xf8af('0x4b')](_0x1e281d,function(_0x56ac95){return new BPromise(function(_0xdaa493,_0x4d1ce3){if(_0x56ac95[_0xf8af('0x4c')]===null||_0x56ac95['autoAssociation']===0x1)_0xdaa493(null);return db[_0xf8af('0x4d')]['findAll']({'where':{'sectionId':_0x56ac95['id']},'raw':!![]})['then'](function(_0x36a41d){var _0x4899b0=_[_0xf8af('0x32')](_0x36a41d,function(_0x1ade9f){return qs[_0xf8af('0x47')](_0x1ade9f,['id',_0xf8af('0x45'),_0xf8af('0x4e'),_0xf8af('0x4f')]);});_0xdaa493(_0x4899b0);})['catch'](function(_0x37971e){_0x4d1ce3(_0x37971e);});})[_0xf8af('0x3b')](function(_0xd28d32){var _0x282a32=qs[_0xf8af('0x47')](_0x56ac95,['id',_0xf8af('0x45'),_0xf8af('0x4e')]);_0x282a32[_0xf8af('0x50')]=_0x565660['id'];if(_0xd28d32)_0x282a32[_0xf8af('0x51')]=_0xd28d32;return _0x282a32;})[_0xf8af('0x3b')](function(_0x28964d){return db['UserProfileSection'][_0xf8af('0x41')](_0x28964d,{'include':[{'model':db[_0xf8af('0x4d')],'as':_0xf8af('0x51')}],'raw':!![],'transaction':_0xf68167});});})['then'](function(){return _0x565660;});}});});});}})['then'](respondWithResult(_0x4053db,0xc9))[_0xf8af('0x3d')](handleError(_0x4053db,null));};exports[_0xf8af('0x1d')]=function(_0x282d35,_0x1cff66){if(_0x282d35[_0xf8af('0x52')]['id']){delete _0x282d35['body']['id'];}return db[_0xf8af('0x21')][_0xf8af('0x43')]({'where':{'id':_0x282d35['params']['id']}})[_0xf8af('0x3b')](handleEntityNotFound(_0x1cff66,null))[_0xf8af('0x3b')](saveUpdates(_0x282d35[_0xf8af('0x52')],null))[_0xf8af('0x3b')](respondWithResult(_0x1cff66,null))[_0xf8af('0x3d')](handleError(_0x1cff66,null));};exports[_0xf8af('0x53')]=function(_0x5e7185,_0x5728a8){return db[_0xf8af('0x21')][_0xf8af('0x43')]({'where':{'id':_0x5e7185['params']['id']}})[_0xf8af('0x3b')](handleEntityNotFound(_0x5728a8,null))['then'](removeEntity(_0x5728a8,null))[_0xf8af('0x3d')](handleError(_0x5728a8,null));};exports[_0xf8af('0x54')]=function(_0x5665f9,_0x3b0c1c){return db['UserProfile'][_0xf8af('0x54')]()[_0xf8af('0x3b')](respondWithResult(_0x3b0c1c,null))[_0xf8af('0x3d')](handleError(_0x3b0c1c,null));};exports[_0xf8af('0x55')]=function(_0x2b73be,_0x3fa179){var _0xa41b8e=_0x2b73be[_0xf8af('0x52')];return db['UserProfile'][_0xf8af('0x43')]({'where':{'id':_0x2b73be[_0xf8af('0x3f')]['id']}})[_0xf8af('0x3b')](handleEntityNotFound(_0x3fa179,null))[_0xf8af('0x3b')](function(_0x5dc033){if(_0x5dc033){return db['sequelize'][_0xf8af('0x49')](function(_0x4bd423){return db[_0xf8af('0x4a')][_0xf8af('0x53')]({'where':{'userProfileId':_0x2b73be[_0xf8af('0x3f')]['id'],'sectionId':_[_0xf8af('0x32')](_0xa41b8e,function(_0x65e71b){return _0x65e71b[_0xf8af('0x4f')];})},'transaction':_0x4bd423})[_0xf8af('0x3b')](function(){var _0x14fc0e=_['map'](_0xa41b8e,function(_0x2f7203){_0x2f7203[_0xf8af('0x50')]=_0x2b73be[_0xf8af('0x3f')]['id'];return _0x2f7203;});var _0x131256=[];return BPromise['each'](_0x14fc0e,function(_0x5675d6){return db[_0xf8af('0x4a')][_0xf8af('0x41')](_0x5675d6,{'include':[{'model':db[_0xf8af('0x4d')],'as':_0xf8af('0x51')}],'raw':!![],'transaction':_0x4bd423})[_0xf8af('0x3b')](function(_0x519b00){_0x131256['push'](_0x519b00['get']({'plain':!![]}));});})[_0xf8af('0x3b')](function(){return _0x131256;});});});}})['then'](function(_0x51072a){return _0x51072a;})[_0xf8af('0x3b')](respondWithResult(_0x3fa179,null))[_0xf8af('0x3d')](handleError(_0x3fa179,null));};exports[_0xf8af('0x56')]=function(_0x2fef8d,_0x1be5db){var _0x37ca92;return db[_0xf8af('0x21')]['find']({'where':{'id':_0x2fef8d[_0xf8af('0x3f')]['id']},'attributes':['id','name']})[_0xf8af('0x3b')](handleEntityNotFound(_0x1be5db,null))[_0xf8af('0x3b')](function(_0x24a843){if(_0x24a843){_0x37ca92=_0x24a843;return db[_0xf8af('0x4a')][_0xf8af('0x53')]({'where':{'userProfileId':_0x2fef8d[_0xf8af('0x3f')]['id'],'sectionId':_0x2fef8d[_0xf8af('0x24')][_0xf8af('0x57')]}});}})[_0xf8af('0x3b')](function(){return _0x37ca92;})['then'](respondWithStatusCode(_0x1be5db,null))[_0xf8af('0x3d')](handleError(_0x1be5db,null));};exports['addResources']=function(_0x80b98b,_0x1c35d8){return db[_0xf8af('0x21')]['find']({'where':{'id':_0x80b98b[_0xf8af('0x3f')]['id']}})['then'](handleEntityNotFound(_0x1c35d8,null))[_0xf8af('0x3b')](function(_0x14224c){if(_0x14224c){return db['sequelize'][_0xf8af('0x49')](function(_0x4265f4){return db[_0xf8af('0x4a')]['findAll']({'where':{'userProfileId':_0x80b98b[_0xf8af('0x3f')]['id']},'attributes':['id'],'raw':!![]})[_0xf8af('0x3b')](function(_0x3c9958){if(_0x3c9958){return db[_0xf8af('0x4a')][_0xf8af('0x53')]({'where':{'userProfileId':_0x80b98b[_0xf8af('0x3f')]['id'],'id':_[_0xf8af('0x32')](_0x3c9958,function(_0x1e5ed9){return _0x1e5ed9['id'];})},'transaction':_0x4265f4});}})[_0xf8af('0x3b')](function(_0x1ffd16){var _0x33f408=_['map'](_0x80b98b[_0xf8af('0x52')],function(_0x3b21c3){_0x3b21c3[_0xf8af('0x50')]=_0x80b98b[_0xf8af('0x3f')]['id'];return _0x3b21c3;});return db['UserProfileSection']['bulkCreate'](_0x33f408,{'raw':!![],'transaction':_0x4265f4});})[_0xf8af('0x3b')](function(_0x4aa705){var _0x122914=_[_0xf8af('0x30')](_[_0xf8af('0x32')](_0x4aa705,function(_0x2b05c7){return _0x2b05c7[_0xf8af('0x44')]({'plain':!![]});}),{'includeAll':![]});if(_0x122914){return db[_0xf8af('0x4a')]['findAll']({'where':{'userProfileId':_0x80b98b[_0xf8af('0x3f')]['id'],'sectionId':_[_0xf8af('0x32')](_0x122914,function(_0x1bcda9){return _0x1bcda9[_0xf8af('0x4f')];})},'attributes':['id',_0xf8af('0x4f')],'raw':!![]})[_0xf8af('0x3b')](function(_0xcb0d96){var _0x278b7a=_[_0xf8af('0x32')](_0x80b98b['body'],function(_0x3fece2){_0x3fece2['userProfileId']=_0x80b98b['params']['id'];return _0x3fece2;});return db[_0xf8af('0x4d')][_0xf8af('0x58')](_0x278b7a,{'raw':!![],'transaction':_0x4265f4});});}})['catch'](handleError(_0x1c35d8,null));});}})[_0xf8af('0x3b')](function(_0x4321ae){var _0x79498b=_[_0xf8af('0x32')](_0x4321ae,function(_0x2adf4d){return _0x2adf4d[_0xf8af('0x44')]({'plain':!![]});});})[_0xf8af('0x3b')](respondWithResult(_0x1c35d8,null))[_0xf8af('0x3d')](handleError(_0x1c35d8,null));};exports['removeResources']=function(_0x51c7e6,_0x5568b0,_0x153b6d){return db[_0xf8af('0x21')][_0xf8af('0x43')]({'where':{'id':_0x51c7e6[_0xf8af('0x3f')]['id']}})[_0xf8af('0x3b')](handleEntityNotFound(_0x5568b0,null))[_0xf8af('0x3b')](function(_0x5a8c31){if(_0x5a8c31){return _0x5a8c31[_0xf8af('0x59')](_0x51c7e6[_0xf8af('0x24')][_0xf8af('0x57')]);}})[_0xf8af('0x3b')](respondWithStatusCode(_0x5568b0,null))['catch'](handleError(_0x5568b0,null));};exports[_0xf8af('0x5a')]=function(_0x14db98,_0x14c0ed){var _0x3863b7={'raw':![],'where':{}};var _0x1b31c4={};var _0x2d3062={'count':0x0,'rows':[]};var _0xde1853=_0x14db98[_0xf8af('0x24')][_0xf8af('0x5b')];if(typeof _0xde1853==='undefined'){throw new db[(_0xf8af('0x5c'))][(_0xf8af('0x5d'))]('Unknown\x20section');}var _0x3b9324=_0x14db98['query']['mergeResources']||![];var _0x969950=getQueryModels(_0xde1853,_0x3b9324);if(typeof _0x969950[_0xf8af('0x5e')]===_0xf8af('0x5f')){throw new db[(_0xf8af('0x5c'))]['ValidationError']('Invalid\x20section\x20\x27'+_0xde1853+'\x27');}var _0x36744d=[];if(!_[_0xf8af('0x60')](_0x969950[_0xf8af('0x61')])){_0x36744d=_0x969950[_0xf8af('0x61')];}else{_0x36744d=[{'name':_0xde1853}];}return db[_0xf8af('0x21')][_0xf8af('0x62')]({'where':{'id':_0x14db98['params']['id']}})[_0xf8af('0x3b')](handleEntityNotFound(_0x14c0ed,null))[_0xf8af('0x3b')](function(_0x4753a5){if(_0x4753a5){var _0x4bf3e7=[];for(var _0x1f2fbd=0x0;_0x1f2fbd<_0x36744d[_0xf8af('0x28')];_0x1f2fbd++){_0x4bf3e7[_0xf8af('0x63')](db[_0xf8af('0x4a')][_0xf8af('0x62')]({'where':{'userProfileId':_0x4753a5['id'],'name':_0x36744d[_0x1f2fbd][_0xf8af('0x1e')]},'raw':!![]}));}return BPromise[_0xf8af('0x64')](_0x4bf3e7);}})[_0xf8af('0x3b')](function(_0x1bd826){var _0x3a0a3e=_[_0xf8af('0x30')](_0x1bd826,function(_0x2c7e14){return _0x2c7e14?_0x2c7e14:undefined;});var _0x2af29e=_['filter'](_0x36744d,[_0xf8af('0x65'),!![]]);var _0x352e5c=_[_0xf8af('0x60')](_0x3a0a3e)&&_['isEmpty'](_0x2af29e)?null:_[_0xf8af('0x66')](_0x2af29e,_0x3a0a3e);if(_0x352e5c){var _0x80e3a5=[];for(var _0x2352c6=0x0;_0x2352c6<_0x352e5c[_0xf8af('0x28')];_0x2352c6++){var _0x579e11=_['find'](_0x36744d,function(_0x822faa){return _0x352e5c[_0x2352c6]?_0x822faa[_0xf8af('0x1e')]===_0x352e5c[_0x2352c6][_0xf8af('0x1e')]:null;});if(_0x579e11){if(_0x352e5c[_0x2352c6][_0xf8af('0x65')]){_0x80e3a5[_0xf8af('0x63')](getAllResources(_0x969950[_0xf8af('0x5e')],_0x352e5c[_0x2352c6]));}else{if(!_0x352e5c[_0x2352c6]['autoAssociation']){_0x80e3a5['push'](getAllowedResources(_0x579e11,_0x352e5c[_0x2352c6],_0x969950[_0xf8af('0x5e')]));}else{if(_0x579e11[_0xf8af('0x22')]){_0x80e3a5[_0xf8af('0x63')](getAllFilteredResources(_0x579e11,_0x352e5c[_0x2352c6]));}}}}}return BPromise[_0xf8af('0x64')](_0x80e3a5);}else{return null;}})['then'](function(_0xb787b4){var _0x10fdc8=_0xb787b4;var _0x4018b9=null;if(_0x10fdc8){_0x4018b9=_0x10fdc8[_0xf8af('0x28')]===0x1?_0x10fdc8[0x0]:null;}if(_0x4018b9||_0x10fdc8){var _0x4e9e1d=db[_0x969950[_0xf8af('0x5e')]][_0xf8af('0x40')];_0x1b31c4[_0xf8af('0x22')]=_[_0xf8af('0x23')](_0x4e9e1d);_0x1b31c4[_0xf8af('0x24')]=_[_0xf8af('0x23')](_0x14db98[_0xf8af('0x24')]);_0x1b31c4[_0xf8af('0x2e')]=_['intersection'](_0x1b31c4[_0xf8af('0x22')],_0x1b31c4[_0xf8af('0x24')]);_0x3863b7[_0xf8af('0x25')]=_[_0xf8af('0x26')](_0x1b31c4[_0xf8af('0x22')],qs[_0xf8af('0x27')](_0x14db98[_0xf8af('0x24')]['fields']));_0x3863b7[_0xf8af('0x25')]=_0x3863b7[_0xf8af('0x25')]['length']?_0x3863b7['attributes']:_0x1b31c4['model'];if(!_0x14db98['query'][_0xf8af('0x67')](_0xf8af('0x29'))){_0x3863b7[_0xf8af('0x17')]=qs[_0xf8af('0x17')](_0x14db98[_0xf8af('0x24')][_0xf8af('0x17')]);_0x3863b7[_0xf8af('0x2a')]=qs[_0xf8af('0x2a')](_0x14db98[_0xf8af('0x24')][_0xf8af('0x2a')]);}_0x3863b7[_0xf8af('0x2b')]=qs['sort'](_0x14db98[_0xf8af('0x24')][_0xf8af('0x2c')]);_0x3863b7[_0xf8af('0x2d')]=qs[_0xf8af('0x2e')](_[_0xf8af('0x2f')](_0x14db98[_0xf8af('0x24')],_0x1b31c4[_0xf8af('0x2e')]));if(_0x14db98[_0xf8af('0x24')][_0xf8af('0x30')]){_0x3863b7[_0xf8af('0x2d')]=_[_0xf8af('0x31')](_0x3863b7[_0xf8af('0x2d')],{'$or':_[_0xf8af('0x32')](_0x4e9e1d,function(_0x515cee){if(_0x515cee[_0xf8af('0x33')][_0xf8af('0x68')]!==_0xf8af('0x34')){var _0xeab598={};_0xeab598[_0x515cee[_0xf8af('0x35')]]={'$like':'%'+_0x14db98['query'][_0xf8af('0x30')]+'%'};return _0xeab598;}})});}var _0x9c8e65=[];if(_0x4018b9){var _0xcbd7b1=_[_0xf8af('0x43')](_0x36744d,[_0xf8af('0x1e'),_0x4018b9[_0xf8af('0x1e')]]);if(_0xcbd7b1[_0xf8af('0x35')]){var _0x2aee00={};if(_0x969950[_0xf8af('0x5e')]===_0xf8af('0x69')){_0x2aee00[_0xcbd7b1[_0xf8af('0x6a')]]=_[_0xf8af('0x32')](_0x4018b9[_0xf8af('0x6b')],'id');}else{_0x2aee00[_0xcbd7b1[_0xf8af('0x6a')]]=_0x4018b9['associatedResources'];}_0x9c8e65['push'](_0x2aee00);}else{_0x3863b7[_0xf8af('0x2d')]['id']=_0x4018b9[_0xf8af('0x6b')];}}else{for(var _0x157aaa=0x0;_0x157aaa<_0x10fdc8['length'];_0x157aaa++){var _0xcbd7b1=_[_0xf8af('0x43')](_0x36744d,[_0xf8af('0x1e'),_0x10fdc8[_0x157aaa][_0xf8af('0x1e')]]);if(_0xcbd7b1[_0xf8af('0x35')]){var _0x2aee00={};_0x2aee00[_0xcbd7b1[_0xf8af('0x6a')]]=_0x10fdc8[_0x157aaa][_0xf8af('0x6b')];_0x9c8e65['push'](_0x2aee00);}else{if(!_0x3863b7[_0xf8af('0x2d')]['id'])_0x3863b7['where']['id']=[];_0x10fdc8[_0x157aaa][_0xf8af('0x6b')][_0xf8af('0x6c')](function(_0x34dca9){_0x3863b7[_0xf8af('0x2d')]['id'][_0xf8af('0x63')](_0x34dca9);});}}}if(!_[_0xf8af('0x60')](_0x9c8e65)){_0x3863b7[_0xf8af('0x2d')]=_[_0xf8af('0x31')](_0x3863b7[_0xf8af('0x2d')],{'$and':{'$or':_0x9c8e65}});}_0x3863b7=_[_0xf8af('0x31')]({},_0x3863b7,_0x14db98[_0xf8af('0x36')]);if(_0x4018b9&&!_0x4018b9[_0xf8af('0x4c')]&&_0x969950['childModel']===_0xf8af('0x69')){if(_0x14db98[_0xf8af('0x24')][_0xf8af('0x38')]){_0x3863b7[_0xf8af('0x39')]=[{'all':!![]}];}return db[_0x969950[_0xf8af('0x5e')]][_0xf8af('0x3a')](_0x3863b7)['then'](function(_0x5d0c96){var _0x49507c=[];_0x5d0c96[_0xf8af('0x6c')](function(_0x24668a){var _0x2ceaf0;switch(_0x24668a['reportType']){case _0xf8af('0x6d'):_0x2ceaf0=_[_0xf8af('0x43')](_0x4018b9[_0xf8af('0x6b')],function(_0x2f1151){return _0x2f1151['id']===_0x24668a[_0xf8af('0x6e')]&&_0x2f1151[_0xf8af('0x33')]===_0xf8af('0x6f');});break;case _0xf8af('0x70'):_0x2ceaf0=_[_0xf8af('0x43')](_0x4018b9['associatedResources'],function(_0x130061){return _0x130061['id']===_0x24668a['reportId']&&_0x130061[_0xf8af('0x33')]==='CustomReports';});break;}if(_0x2ceaf0)_0x49507c[_0xf8af('0x63')](_0x24668a);});_0x2d3062[_0xf8af('0x37')]=_0x49507c[_0xf8af('0x28')];_0x2d3062[_0xf8af('0x3c')]=_0x49507c;return _0x2d3062;});}else{return db[_0x969950['childModel']][_0xf8af('0x37')]({'where':_0x3863b7['where']})['then'](function(_0x15a4f9){_0x2d3062['count']=_0x15a4f9;if(_0x14db98[_0xf8af('0x24')]['includeAll']){if(_0x969950[_0xf8af('0x5e')]==='CmContact'){_0x3863b7[_0xf8af('0x39')]=[{'model':db[_0xf8af('0x71')],'as':_0xf8af('0x72'),'attributes':['id','name',_0xf8af('0x73')],'required':_0x14db98[_0xf8af('0x24')]['tag']?!![]:![]},{'model':db['Tag'],'as':'ThroughTags','attributes':['id','name',_0xf8af('0x73')],'through':_0x14db98[_0xf8af('0x24')][_0xf8af('0x74')]?{'attributes':[],'where':{'TagId':_0x14db98[_0xf8af('0x24')][_0xf8af('0x74')]||undefined}}:{},'required':_0x14db98[_0xf8af('0x24')]['tag']?!![]:![]}];}else{_0x3863b7[_0xf8af('0x39')]=[{'all':!![]}];}}return db[_0x969950[_0xf8af('0x5e')]][_0xf8af('0x3a')](_0x3863b7);})[_0xf8af('0x3b')](function(_0x5e704c){_0x2d3062[_0xf8af('0x3c')]=_0x5e704c;return _0x2d3062;});}}else{return _0x2d3062;}})[_0xf8af('0x3b')](respondWithFilteredResult(_0x14c0ed,_0x3863b7))[_0xf8af('0x3d')](handleError(_0x14c0ed,null));};function getAllResources(_0x17333b,_0x579b79){return new BPromise(function(_0xf92757,_0x1d758b){if(_0x579b79){var _0x171288=_0x579b79[_0xf8af('0x30')]?{[_0x579b79[_0xf8af('0x30')][_0xf8af('0x35')]]:_0x579b79['filter'][_0xf8af('0x75')]}:undefined;return db[_0x17333b][_0xf8af('0x3a')]({'where':_0x171288,'raw':!![]})[_0xf8af('0x3b')](function(_0xf81c1e){_0x579b79[_0xf8af('0x6b')]=_[_0xf8af('0x32')](_0xf81c1e,'id');_0xf92757(_0x579b79);})[_0xf8af('0x3d')](function(_0x2f35cf){_0x1d758b(_0x2f35cf);});}else{_0xf92757(null);}});}function getAllFilteredResources(_0x2700a0,_0x495537){return new BPromise(function(_0x2befb4,_0x285656){var _0x255cdf=_0x2700a0[_0xf8af('0x30')]?{[_0x2700a0[_0xf8af('0x30')][_0xf8af('0x35')]]:_0x2700a0[_0xf8af('0x30')][_0xf8af('0x75')]}:undefined;return db[_0x2700a0['model']][_0xf8af('0x3a')]({'where':_0x255cdf,'raw':!![]})[_0xf8af('0x3b')](function(_0x5606eb){_0x495537[_0xf8af('0x6b')]=_['map'](_0x5606eb,function(_0x4fcfca){return _0x4fcfca[_0xf8af('0x1e')];});_0x2befb4(_0x495537);})['catch'](function(_0x237b54){_0x285656(_0x237b54);});});}function getAllowedResources(_0x4e42fa,_0x37a7c3,_0x6ad7eb){return new BPromise(function(_0x533e26,_0x2ad1e0){if(_0x37a7c3){return db[_0xf8af('0x4d')][_0xf8af('0x3a')]({'where':{'sectionId':_0x37a7c3['id']},'raw':!![]})[_0xf8af('0x3b')](function(_0x27af62){if(_0x4e42fa['field']&&_0x4e42fa[_0xf8af('0x35')]!=='id'){_0x37a7c3[_0xf8af('0x6b')]=_[_0xf8af('0x32')](_0x27af62,function(_0x1d9e13){return _0x1d9e13[_0x4e42fa['field']];});}else{if(_0x6ad7eb===_0xf8af('0x69')){_0x37a7c3[_0xf8af('0x6b')]=_[_0xf8af('0x32')](_0x27af62,function(_0x32d053){return{'id':_0x32d053['resourceId'],'type':_0x32d053[_0xf8af('0x33')]};});}else{_0x37a7c3[_0xf8af('0x6b')]=_[_0xf8af('0x32')](_0x27af62,function(_0x33d2f2){return _0x33d2f2[_0xf8af('0x76')];});}}_0x533e26(_0x37a7c3);})['catch'](function(_0xfddd56){_0x2ad1e0(_0xfddd56);});}else{_0x533e26(null);}});}function getQueryModels(_0x3131ba,_0x6ab370){var _0x148de8=_0x3131ba[_0xf8af('0x77')]();var _0x1e7147={'childModel':undefined,'parentSections':[]};switch(_0x148de8){case _0xf8af('0x78'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x79');break;case _0xf8af('0x7a'):_0x1e7147[_0xf8af('0x5e')]='SquareOdbc';break;case _0xf8af('0x7b'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x7c');_0x1e7147[_0xf8af('0x61')]=[{'name':'SquareProjects','field':_0xf8af('0x1e'),'foreignKey':'projectName'}];break;case _0xf8af('0x7d'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x7e');break;case _0xf8af('0x7f'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x80');_0x1e7147[_0xf8af('0x61')]=[{'name':_0xf8af('0x81'),'field':'id','foreignKey':_0xf8af('0x82')}];break;case _0xf8af('0x83'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x84');break;case'companies':_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x85');break;case _0xf8af('0x86'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x87');break;case'chatqueues':_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x88');break;case'chatwebsites':_0x1e7147['childModel']=_0xf8af('0x89');break;case _0xf8af('0x8a'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x8b');break;case _0xf8af('0x8c'):_0x1e7147['childModel']=_0xf8af('0x8d');break;case _0xf8af('0x8e'):case'internalroutes':case'outboundroutes':_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x8f');break;case _0xf8af('0x90'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x91');break;case'voicemails':_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x92');break;case'voicerecordings':_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x93');_0x1e7147[_0xf8af('0x61')]=[{'name':_0xf8af('0x94'),'field':_0xf8af('0x1e'),'foreignKey':'membername','model':_0xf8af('0x95'),'filter':{'field':_0xf8af('0x96'),'value':[_0xf8af('0x97')]}},{'name':'Telephones','field':_0xf8af('0x1e'),'foreignKey':_0xf8af('0x98'),'model':'User','filter':{'field':_0xf8af('0x96'),'value':[_0xf8af('0x99')]}},{'name':_0xf8af('0x9a'),'field':_0xf8af('0x1e'),'foreignKey':'queue','model':_0xf8af('0x9b'),'filter':{'field':_0xf8af('0x33'),'value':[_0xf8af('0x9c')]}},{'name':_0xf8af('0x9d'),'field':_0xf8af('0x1e'),'foreignKey':_0xf8af('0x9e'),'model':_0xf8af('0x9b'),'filter':{'field':_0xf8af('0x33'),'value':['outbound']}}];break;case _0xf8af('0x9f'):_0x1e7147['childModel']=_0xf8af('0xa0');break;case'chanspies':_0x1e7147[_0xf8af('0x5e')]='VoiceChanSpy';break;case'voiceprefixes':_0x1e7147[_0xf8af('0x5e')]='VoicePrefix';break;case _0xf8af('0xa1'):_0x1e7147[_0xf8af('0x5e')]='Campaign';break;case'mailqueues':_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xa2');break;case _0xf8af('0xa3'):_0x1e7147['childModel']='MailAccount';break;case _0xf8af('0xa4'):_0x1e7147[_0xf8af('0x5e')]='MailSubstatus';break;case _0xf8af('0xa5'):_0x1e7147[_0xf8af('0x5e')]='OpenchannelQueue';break;case _0xf8af('0xa6'):_0x1e7147['childModel']=_0xf8af('0xa7');break;case'smsqueues':_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xa8');break;case _0xf8af('0xa9'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xaa');break;case _0xf8af('0xab'):_0x1e7147[_0xf8af('0x5e')]='Team';break;case'voicequeues':case _0xf8af('0xac'):_0x1e7147['childModel']='VoiceQueue';if(_0x6ab370){_0x1e7147[_0xf8af('0x61')]=[{'name':_0xf8af('0x9a')},{'name':_0xf8af('0x9d')}];}break;case _0xf8af('0xad'):case _0xf8af('0xae'):case'telephones':_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x95');if(_0x6ab370){_0x1e7147[_0xf8af('0x61')]=[{'name':_0xf8af('0xaf'),'filter':{'field':_0xf8af('0x96'),'value':['admin','user']},'ignore':!![]},{'name':_0xf8af('0x94')},{'name':_0xf8af('0xb0')}];}break;case _0xf8af('0xb1'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xb2');break;case _0xf8af('0xb3'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xb4');break;case _0xf8af('0xb5'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xb6');break;case _0xf8af('0xb7'):_0x1e7147['childModel']=_0xf8af('0xb8');break;case _0xf8af('0xb9'):_0x1e7147[_0xf8af('0x5e')]='DeskAccount';break;case _0xf8af('0xba'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xbb');break;case'vtigeraccounts':_0x1e7147['childModel']=_0xf8af('0x95');break;case _0xf8af('0xbc'):_0x1e7147['childModel']=_0xf8af('0xbd');break;case _0xf8af('0xbe'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xbf');break;case _0xf8af('0xc0'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xc1');break;case _0xf8af('0xc2'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xc3');break;case _0xf8af('0xc4'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xc5');break;case _0xf8af('0xc6'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xc7');break;case _0xf8af('0xc8'):_0x1e7147['childModel']='Sound';break;case _0xf8af('0xc9'):_0x1e7147[_0xf8af('0x5e')]='Tag';break;case _0xf8af('0xca'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xcb');break;case _0xf8af('0xcc'):_0x1e7147[_0xf8af('0x5e')]='Trigger';break;case _0xf8af('0xcd'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xce');break;case'variables':_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xcf');break;case'plugins':_0x1e7147[_0xf8af('0x5e')]='Plugin';break;case'extractedreports':_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0x69');_0x1e7147['parentSections']=[{'name':'Reports','field':'id','foreignKey':_0xf8af('0x6e')}];break;case _0xf8af('0xd0'):_0x1e7147[_0xf8af('0x5e')]=_0xf8af('0xd1');break;default:return _0x1e7147;}return _0x1e7147;}
\ No newline at end of file
index 80c6b38..10f1fe0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x64c7=['UserProfile','setMaxListeners','save','remove','emit','hook','exports','events'];(function(_0x5b26ac,_0x652c2e){var _0x15db80=function(_0xb3629e){while(--_0xb3629e){_0x5b26ac['push'](_0x5b26ac['shift']());}};_0x15db80(++_0x652c2e);}(_0x64c7,0x17f));var _0x764c=function(_0x2f48cd,_0x46a75a){_0x2f48cd=_0x2f48cd-0x0;var _0x193ae2=_0x64c7[_0x2f48cd];return _0x193ae2;};'use strict';var EventEmitter=require(_0x764c('0x0'));var UserProfile=require('../../mysqldb')['db'][_0x764c('0x1')];var UserProfileEvents=new EventEmitter();UserProfileEvents[_0x764c('0x2')](0x0);var events={'afterCreate':_0x764c('0x3'),'afterUpdate':'update','afterDestroy':_0x764c('0x4')};function emitEvent(_0x29c597){return function(_0x27edad,_0x34e00d,_0xa8a3ab){UserProfileEvents[_0x764c('0x5')](_0x29c597+':'+_0x27edad['id'],_0x27edad);UserProfileEvents[_0x764c('0x5')](_0x29c597,_0x27edad);_0xa8a3ab(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];UserProfile[_0x764c('0x6')](e,emitEvent(event));}}module[_0x764c('0x7')]=UserProfileEvents;
\ No newline at end of file
+var _0xcc95=['events','UserProfile','setMaxListeners','save','update','remove','emit','hasOwnProperty','hook'];(function(_0x304346,_0x2a59df){var _0x3ba9fe=function(_0x39e850){while(--_0x39e850){_0x304346['push'](_0x304346['shift']());}};_0x3ba9fe(++_0x2a59df);}(_0xcc95,0x18c));var _0x5cc9=function(_0x54d4fe,_0x55e869){_0x54d4fe=_0x54d4fe-0x0;var _0x1ab5bb=_0xcc95[_0x54d4fe];return _0x1ab5bb;};'use strict';var EventEmitter=require(_0x5cc9('0x0'));var UserProfile=require('../../mysqldb')['db'][_0x5cc9('0x1')];var UserProfileEvents=new EventEmitter();UserProfileEvents[_0x5cc9('0x2')](0x0);var events={'afterCreate':_0x5cc9('0x3'),'afterUpdate':_0x5cc9('0x4'),'afterDestroy':_0x5cc9('0x5')};function emitEvent(_0x83276e){return function(_0x2429b4,_0x54a25f,_0x2ab717){UserProfileEvents[_0x5cc9('0x6')](_0x83276e+':'+_0x2429b4['id'],_0x2429b4);UserProfileEvents[_0x5cc9('0x6')](_0x83276e,_0x2429b4);_0x2ab717(null);};}for(var e in events){if(events[_0x5cc9('0x7')](e)){var event=events[e];UserProfile[_0x5cc9('0x8')](e,emitEvent(event));}}module['exports']=UserProfileEvents;
\ No newline at end of file
index 7ea46e7..26b06de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa367=['../../config/environment','./userProfile.attributes','exports','UserProfile','user_profiles','lodash','util','../../config/logger','api','moment','request-promise','path'];(function(_0x37e560,_0x30b109){var _0x5baf5c=function(_0x3ce94b){while(--_0x3ce94b){_0x37e560['push'](_0x37e560['shift']());}};_0x5baf5c(++_0x30b109);}(_0xa367,0x7d));var _0x7a36=function(_0x3e8270,_0x293590){_0x3e8270=_0x3e8270-0x0;var _0x1ccde9=_0xa367[_0x3e8270];return _0x1ccde9;};'use strict';var _=require(_0x7a36('0x0'));var util=require(_0x7a36('0x1'));var logger=require(_0x7a36('0x2'))(_0x7a36('0x3'));var moment=require(_0x7a36('0x4'));var BPromise=require('bluebird');var rp=require(_0x7a36('0x5'));var fs=require('fs');var path=require(_0x7a36('0x6'));var rimraf=require('rimraf');var config=require(_0x7a36('0x7'));var attributes=require(_0x7a36('0x8'));module[_0x7a36('0x9')]=function(_0x3afb72,_0x5377e0){return _0x3afb72['define'](_0x7a36('0xa'),attributes,{'tableName':_0x7a36('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x72e4=['../../config/environment','./userProfile.attributes','exports','define','UserProfile','user_profiles','lodash','util','bluebird','request-promise','path'];(function(_0x81edc3,_0x1275b1){var _0xa850f4=function(_0x5b547b){while(--_0x5b547b){_0x81edc3['push'](_0x81edc3['shift']());}};_0xa850f4(++_0x1275b1);}(_0x72e4,0xa0));var _0x472e=function(_0x48cc3b,_0x27d02f){_0x48cc3b=_0x48cc3b-0x0;var _0x393467=_0x72e4[_0x48cc3b];return _0x393467;};'use strict';var _=require(_0x472e('0x0'));var util=require(_0x472e('0x1'));var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0x472e('0x2'));var rp=require(_0x472e('0x3'));var fs=require('fs');var path=require(_0x472e('0x4'));var rimraf=require('rimraf');var config=require(_0x472e('0x5'));var attributes=require(_0x472e('0x6'));module[_0x472e('0x7')]=function(_0x394707,_0x2f1f9e){return _0x394707[_0x472e('0x8')](_0x472e('0x9'),attributes,{'tableName':_0x472e('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 170ea0f..7b0c77d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x739d=['register','request','info','UserProfile,\x20%s,\x20%s','request\x20sent','debug','UserProfile,\x20%s,\x20%s,\x20%s','stringify','error','message','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','redis','defaults','./userProfile.socket'];(function(_0x124d70,_0x5ee785){var _0x20bda4=function(_0x1eb414){while(--_0x1eb414){_0x124d70['push'](_0x124d70['shift']());}};_0x20bda4(++_0x5ee785);}(_0x739d,0xab));var _0xd739=function(_0x327b02,_0x223818){_0x327b02=_0x327b02-0x0;var _0x5ecf1e=_0x739d[_0x327b02];return _0x5ecf1e;};'use strict';var _=require(_0xd739('0x0'));var util=require('util');var moment=require(_0xd739('0x1'));var BPromise=require(_0xd739('0x2'));var rs=require(_0xd739('0x3'));var fs=require('fs');var Redis=require(_0xd739('0x4'));var db=require(_0xd739('0x5'))['db'];var utils=require(_0xd739('0x6'));var logger=require(_0xd739('0x7'))(_0xd739('0x8'));var config=require(_0xd739('0x9'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});config[_0xd739('0xa')]=_[_0xd739('0xb')](config[_0xd739('0xa')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xd739('0xa')]));require(_0xd739('0xc'))[_0xd739('0xd')](socket);function respondWithRpcPromise(_0x1fb942,_0x55dcfb,_0x3b95c2){return new BPromise(function(_0x2b215e,_0xe9ebd2){return client[_0xd739('0xe')](_0x1fb942,_0x3b95c2)['then'](function(_0xe4a8fb){logger[_0xd739('0xf')](_0xd739('0x10'),_0x55dcfb,_0xd739('0x11'));logger[_0xd739('0x12')](_0xd739('0x13'),_0x55dcfb,_0xd739('0x11'),JSON[_0xd739('0x14')](_0xe4a8fb));if(_0xe4a8fb[_0xd739('0x15')]){if(_0xe4a8fb[_0xd739('0x15')]['code']===0x1f4){logger[_0xd739('0x15')](_0xd739('0x10'),_0x55dcfb,_0xe4a8fb[_0xd739('0x15')][_0xd739('0x16')]);return _0xe9ebd2(_0xe4a8fb[_0xd739('0x15')][_0xd739('0x16')]);}logger[_0xd739('0x15')](_0xd739('0x10'),_0x55dcfb,_0xe4a8fb['error']['message']);return _0x2b215e(_0xe4a8fb['error'][_0xd739('0x16')]);}else{logger['info'](_0xd739('0x10'),_0x55dcfb,_0xd739('0x11'));_0x2b215e(_0xe4a8fb['result'][_0xd739('0x16')]);}})['catch'](function(_0x2f0e8d){logger[_0xd739('0x15')](_0xd739('0x10'),_0x55dcfb,_0x2f0e8d);_0xe9ebd2(_0x2f0e8d);});});}
\ No newline at end of file
+var _0x638d=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','./userProfile.socket','register','request','then','info','UserProfile,\x20%s,\x20%s','request\x20sent','debug','UserProfile,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x253014,_0x480094){var _0x21bf17=function(_0x21efc3){while(--_0x21efc3){_0x253014['push'](_0x253014['shift']());}};_0x21bf17(++_0x480094);}(_0x638d,0x124));var _0xd638=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x638d[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xd638('0x0'));var util=require(_0xd638('0x1'));var moment=require(_0xd638('0x2'));var BPromise=require(_0xd638('0x3'));var rs=require(_0xd638('0x4'));var fs=require('fs');var Redis=require(_0xd638('0x5'));var db=require(_0xd638('0x6'))['db'];var utils=require(_0xd638('0x7'));var logger=require(_0xd638('0x8'))(_0xd638('0x9'));var config=require(_0xd638('0xa'));var jayson=require(_0xd638('0xb'));var client=jayson[_0xd638('0xc')][_0xd638('0xd')]({'port':0x232a});config[_0xd638('0xe')]=_[_0xd638('0xf')](config[_0xd638('0xe')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0xd638('0x10'))[_0xd638('0x11')](socket);function respondWithRpcPromise(_0x229460,_0x4d668b,_0x5b44b6){return new BPromise(function(_0x44b51,_0x1ae385){return client[_0xd638('0x12')](_0x229460,_0x5b44b6)[_0xd638('0x13')](function(_0x337a20){logger[_0xd638('0x14')](_0xd638('0x15'),_0x4d668b,_0xd638('0x16'));logger[_0xd638('0x17')](_0xd638('0x18'),_0x4d668b,'request\x20sent',JSON[_0xd638('0x19')](_0x337a20));if(_0x337a20[_0xd638('0x1a')]){if(_0x337a20[_0xd638('0x1a')]['code']===0x1f4){logger[_0xd638('0x1a')](_0xd638('0x15'),_0x4d668b,_0x337a20[_0xd638('0x1a')][_0xd638('0x1b')]);return _0x1ae385(_0x337a20['error'][_0xd638('0x1b')]);}logger[_0xd638('0x1a')]('UserProfile,\x20%s,\x20%s',_0x4d668b,_0x337a20['error'][_0xd638('0x1b')]);return _0x44b51(_0x337a20[_0xd638('0x1a')][_0xd638('0x1b')]);}else{logger[_0xd638('0x14')](_0xd638('0x15'),_0x4d668b,_0xd638('0x16'));_0x44b51(_0x337a20[_0xd638('0x1c')][_0xd638('0x1b')]);}})[_0xd638('0x1d')](function(_0x6eeb17){logger[_0xd638('0x1a')](_0xd638('0x15'),_0x4d668b,_0x6eeb17);_0x1ae385(_0x6eeb17);});});}
\ No newline at end of file
index 173f470..366e91e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3edc=['remove','update','removeListener','register','length','userProfile:','./userProfile.events','save'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x3edc,0x1ae));var _0xc3ed=function(_0x34a118,_0xbff87c){_0x34a118=_0x34a118-0x0;var _0x18f5ed=_0x3edc[_0x34a118];return _0x18f5ed;};'use strict';var UserProfileEvents=require(_0xc3ed('0x0'));var events=[_0xc3ed('0x1'),_0xc3ed('0x2'),_0xc3ed('0x3')];function createListener(_0xae2b4f,_0x47a242){return function(_0x2a8714){_0x47a242['emit'](_0xae2b4f,_0x2a8714);};}function removeListener(_0x3519ab,_0x19d8dc){return function(){UserProfileEvents[_0xc3ed('0x4')](_0x3519ab,_0x19d8dc);};}exports[_0xc3ed('0x5')]=function(_0x3f8468){for(var _0x50b95c=0x0,_0x1b28d4=events[_0xc3ed('0x6')];_0x50b95c<_0x1b28d4;_0x50b95c++){var _0x14d194=events[_0x50b95c];var _0x2f28ce=createListener(_0xc3ed('0x7')+_0x14d194,_0x3f8468);UserProfileEvents['on'](_0x14d194,_0x2f28ce);}};
\ No newline at end of file
+var _0x1247=['register','length','./userProfile.events','save','removeListener'];(function(_0x3580bc,_0x755679){var _0x4d4a0b=function(_0x478ea9){while(--_0x478ea9){_0x3580bc['push'](_0x3580bc['shift']());}};_0x4d4a0b(++_0x755679);}(_0x1247,0xb6));var _0x7124=function(_0x5b5cde,_0x1f7c5f){_0x5b5cde=_0x5b5cde-0x0;var _0x364ad2=_0x1247[_0x5b5cde];return _0x364ad2;};'use strict';var UserProfileEvents=require(_0x7124('0x0'));var events=[_0x7124('0x1'),'remove','update'];function createListener(_0xb217bf,_0x461882){return function(_0x37ccf8){_0x461882['emit'](_0xb217bf,_0x37ccf8);};}function removeListener(_0x3bdce3,_0x3ab32e){return function(){UserProfileEvents[_0x7124('0x2')](_0x3bdce3,_0x3ab32e);};}exports[_0x7124('0x3')]=function(_0x15ba0c){for(var _0x33f61b=0x0,_0x396f11=events[_0x7124('0x4')];_0x33f61b<_0x396f11;_0x33f61b++){var _0x29d7b2=events[_0x33f61b];var _0x3b5a48=createListener('userProfile:'+_0x29d7b2,_0x15ba0c);UserProfileEvents['on'](_0x29d7b2,_0x3b5a48);}};
\ No newline at end of file
index 74126b3..a15400a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbca0=['delete','destroy','exports','multer','util','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','index','get','/describe','/:id','show','post','update'];(function(_0x44b55f,_0x498eff){var _0x239d32=function(_0x5e3398){while(--_0x5e3398){_0x44b55f['push'](_0x44b55f['shift']());}};_0x239d32(++_0x498eff);}(_0xbca0,0x8b));var _0x0bca=function(_0x481a55,_0x29959f){_0x481a55=_0x481a55-0x0;var _0x30c0ee=_0xbca0[_0x481a55];return _0x30c0ee;};'use strict';var multer=require(_0x0bca('0x0'));var util=require(_0x0bca('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require('express');var router=express[_0x0bca('0x2')]();var auth=require(_0x0bca('0x3'));var interaction=require(_0x0bca('0x4'));var config=require(_0x0bca('0x5'));var controller=require('./userProfileResource.controller');router['get']('/',auth[_0x0bca('0x6')](),controller[_0x0bca('0x7')]);router[_0x0bca('0x8')](_0x0bca('0x9'),auth['isAuthenticated'](),controller['describe']);router['get'](_0x0bca('0xa'),auth[_0x0bca('0x6')](),controller[_0x0bca('0xb')]);router[_0x0bca('0xc')]('/',auth[_0x0bca('0x6')](),controller['create']);router['put'](_0x0bca('0xa'),auth[_0x0bca('0x6')](),controller[_0x0bca('0xd')]);router[_0x0bca('0xe')](_0x0bca('0xa'),auth[_0x0bca('0x6')](),controller[_0x0bca('0xf')]);module[_0x0bca('0x10')]=router;
\ No newline at end of file
+var _0x6ac2=['describe','/:id','post','create','put','update','delete','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./userProfileResource.controller','isAuthenticated','index','get','/describe'];(function(_0x4934e3,_0x1a497d){var _0x316f4b=function(_0x51d9a3){while(--_0x51d9a3){_0x4934e3['push'](_0x4934e3['shift']());}};_0x316f4b(++_0x1a497d);}(_0x6ac2,0x184));var _0x26ac=function(_0x4ea00f,_0x139331){_0x4ea00f=_0x4ea00f-0x0;var _0x13f921=_0x6ac2[_0x4ea00f];return _0x13f921;};'use strict';var multer=require(_0x26ac('0x0'));var util=require('util');var path=require(_0x26ac('0x1'));var timeout=require(_0x26ac('0x2'));var express=require(_0x26ac('0x3'));var router=express[_0x26ac('0x4')]();var auth=require(_0x26ac('0x5'));var interaction=require(_0x26ac('0x6'));var config=require('../../config/environment');var controller=require(_0x26ac('0x7'));router['get']('/',auth[_0x26ac('0x8')](),controller[_0x26ac('0x9')]);router[_0x26ac('0xa')](_0x26ac('0xb'),auth[_0x26ac('0x8')](),controller[_0x26ac('0xc')]);router[_0x26ac('0xa')](_0x26ac('0xd'),auth['isAuthenticated'](),controller['show']);router[_0x26ac('0xe')]('/',auth[_0x26ac('0x8')](),controller[_0x26ac('0xf')]);router[_0x26ac('0x10')]('/:id',auth[_0x26ac('0x8')](),controller[_0x26ac('0x11')]);router[_0x26ac('0x12')](_0x26ac('0xd'),auth['isAuthenticated'](),controller['destroy']);module[_0x26ac('0x13')]=router;
\ No newline at end of file
index 30625ac..cf92082 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb0df=['STRING','INTEGER','sequelize'];(function(_0x3737ac,_0x1e8cab){var _0x2f8229=function(_0xf97ba1){while(--_0xf97ba1){_0x3737ac['push'](_0x3737ac['shift']());}};_0x2f8229(++_0x1e8cab);}(_0xb0df,0x9b));var _0xfb0d=function(_0x3b3a82,_0x53b5e0){_0x3b3a82=_0x3b3a82-0x0;var _0x267063=_0xb0df[_0x3b3a82];return _0x267063;};'use strict';var Sequelize=require(_0xfb0d('0x0'));module['exports']={'name':{'type':Sequelize[_0xfb0d('0x1')],'allowNull':![]},'resourceId':{'type':Sequelize[_0xfb0d('0x2')],'allowNull':![]},'type':{'type':Sequelize['STRING'],'allowNull':![]}};
\ No newline at end of file
+var _0xd2ac=['sequelize','exports','INTEGER','STRING'];(function(_0x3e32a8,_0x255953){var _0x2997b0=function(_0x2d564a){while(--_0x2d564a){_0x3e32a8['push'](_0x3e32a8['shift']());}};_0x2997b0(++_0x255953);}(_0xd2ac,0xd8));var _0xcd2a=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xd2ac[_0x14add3];return _0x4a174f;};'use strict';var Sequelize=require(_0xcd2a('0x0'));module[_0xcd2a('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'resourceId':{'type':Sequelize[_0xcd2a('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0xcd2a('0x3')],'allowNull':![]}};
\ No newline at end of file
index fa9c99f..edfae24 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b84=['end','error','stack','name','send','rawAttributes','model','query','attributes','intersection','fields','length','nolimit','order','sort','filters','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','count','includeAll','include','findAll','rows','catch','show','params','keys','UserProfileResource','find','create','body','describe','html-pdf','eml-format','fast-json-patch','bluebird','mustache','util','ejs','squel','jsforce','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','offset','limit','Content-Range','json','apply','reject','save','update','then','destroy'];(function(_0x3ff61a,_0x5cc1a7){var _0x14fd1f=function(_0xe08e18){while(--_0xe08e18){_0x3ff61a['push'](_0x3ff61a['shift']());}};_0x14fd1f(++_0x5cc1a7);}(_0x4b84,0x1cc));var _0x44b8=function(_0x5e7514,_0x30c2e1){_0x5e7514=_0x5e7514-0x0;var _0x12f472=_0x4b84[_0x5e7514];return _0x12f472;};'use strict';var pdf=require(_0x44b8('0x0'));var emlformat=require(_0x44b8('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x44b8('0x2'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x44b8('0x3'));var Mustache=require(_0x44b8('0x4'));var util=require(_0x44b8('0x5'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x44b8('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x44b8('0x7'));var crypto=require('crypto');var jsforce=require(_0x44b8('0x8'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x44b8('0x9'));var Papa=require(_0x44b8('0xa'));var Redis=require(_0x44b8('0xb'));var authService=require('../../components/auth/service');var qs=require(_0x44b8('0xc'));var hardwareService=require(_0x44b8('0xd'));var logger=require(_0x44b8('0xe'))(_0x44b8('0xf'));var utils=require(_0x44b8('0x10'));var config=require(_0x44b8('0x11'));var db=require(_0x44b8('0x12'))['db'];function respondWithStatusCode(_0x4ae8a1,_0x147529){_0x147529=_0x147529||0xcc;return function(_0x4301a6){if(_0x4301a6){return _0x4ae8a1['sendStatus'](_0x147529);}return _0x4ae8a1[_0x44b8('0x13')](_0x147529)['end']();};}function respondWithResult(_0x833ea3,_0x18d642){_0x18d642=_0x18d642||0xc8;return function(_0x4df670){if(_0x4df670){return _0x833ea3[_0x44b8('0x13')](_0x18d642)['json'](_0x4df670);}};}function respondWithFilteredResult(_0x54fa95,_0x2a3e4c){return function(_0x2af0ad){if(_0x2af0ad){var _0x1722da=_0x2af0ad['count'],_0x41ab46=_0x2a3e4c[_0x44b8('0x14')],_0x5e52f2=_0x2a3e4c['offset']+_0x2a3e4c[_0x44b8('0x15')],_0x495c74;if(_0x5e52f2>=_0x1722da){_0x5e52f2=_0x1722da;_0x495c74=0xc8;}else{_0x495c74=0xce;}_0x54fa95[_0x44b8('0x13')](_0x495c74);return _0x54fa95['set'](_0x44b8('0x16'),_0x41ab46+'-'+_0x5e52f2+'/'+_0x1722da)[_0x44b8('0x17')](_0x2af0ad);}return null;};}function patchUpdates(_0x5103f5){return function(_0x89bc30){try{jsonpatch[_0x44b8('0x18')](_0x89bc30,_0x5103f5,!![]);}catch(_0x4b600f){return BPromise[_0x44b8('0x19')](_0x4b600f);}return _0x89bc30[_0x44b8('0x1a')]();};}function saveUpdates(_0xebfe79,_0x235bdc){return function(_0x102ef9){if(_0x102ef9){return _0x102ef9[_0x44b8('0x1b')](_0xebfe79)[_0x44b8('0x1c')](function(_0x9b0536){return _0x9b0536;});}return null;};}function removeEntity(_0x429461,_0x1e0f2d){return function(_0x1d642b){if(_0x1d642b){return _0x1d642b[_0x44b8('0x1d')]()['then'](function(){_0x429461[_0x44b8('0x13')](0xcc)[_0x44b8('0x1e')]();});}};}function handleEntityNotFound(_0x416b34,_0x1418db){return function(_0x305a5c){if(!_0x305a5c){_0x416b34['sendStatus'](0x194);}return _0x305a5c;};}function handleError(_0x402497,_0x54677c){_0x54677c=_0x54677c||0x1f4;return function(_0x41a922){logger[_0x44b8('0x1f')](_0x41a922[_0x44b8('0x20')]);if(_0x41a922[_0x44b8('0x21')]){delete _0x41a922[_0x44b8('0x21')];}_0x402497['status'](_0x54677c)[_0x44b8('0x22')](_0x41a922);};}exports['index']=function(_0x41d673,_0x350482){var _0x549a26={},_0x17ac44={},_0x470f49={'count':0x0,'rows':[]};var _0x2656d7=db['UserProfileResource'][_0x44b8('0x23')];_0x17ac44[_0x44b8('0x24')]=_['keys'](_0x2656d7);_0x17ac44[_0x44b8('0x25')]=_['keys'](_0x41d673[_0x44b8('0x25')]);_0x17ac44['filters']=_['intersection'](_0x17ac44['model'],_0x17ac44[_0x44b8('0x25')]);_0x549a26[_0x44b8('0x26')]=_[_0x44b8('0x27')](_0x17ac44[_0x44b8('0x24')],qs[_0x44b8('0x28')](_0x41d673[_0x44b8('0x25')][_0x44b8('0x28')]));_0x549a26[_0x44b8('0x26')]=_0x549a26[_0x44b8('0x26')][_0x44b8('0x29')]?_0x549a26[_0x44b8('0x26')]:_0x17ac44[_0x44b8('0x24')];if(!_0x41d673[_0x44b8('0x25')]['hasOwnProperty'](_0x44b8('0x2a'))){_0x549a26['limit']=qs[_0x44b8('0x15')](_0x41d673[_0x44b8('0x25')][_0x44b8('0x15')]);_0x549a26[_0x44b8('0x14')]=qs[_0x44b8('0x14')](_0x41d673['query'][_0x44b8('0x14')]);}_0x549a26[_0x44b8('0x2b')]=qs[_0x44b8('0x2c')](_0x41d673[_0x44b8('0x25')][_0x44b8('0x2c')]);_0x549a26['where']=qs[_0x44b8('0x2d')](_[_0x44b8('0x2e')](_0x41d673[_0x44b8('0x25')],_0x17ac44[_0x44b8('0x2d')]));if(_0x41d673[_0x44b8('0x25')][_0x44b8('0x2f')]){_0x549a26[_0x44b8('0x30')]=_[_0x44b8('0x31')](_0x549a26[_0x44b8('0x30')],{'$or':_[_0x44b8('0x32')](_0x2656d7,function(_0x13994c){if(_0x13994c[_0x44b8('0x33')][_0x44b8('0x34')]!==_0x44b8('0x35')){var _0x1e1a8a={};_0x1e1a8a[_0x13994c[_0x44b8('0x36')]]={'$like':'%'+_0x41d673[_0x44b8('0x25')][_0x44b8('0x2f')]+'%'};return _0x1e1a8a;}})});}_0x549a26=_[_0x44b8('0x31')]({},_0x549a26,_0x41d673[_0x44b8('0x37')]);var _0x2c02d6={'where':_0x549a26[_0x44b8('0x30')]};return db['UserProfileResource'][_0x44b8('0x38')](_0x2c02d6)[_0x44b8('0x1c')](function(_0x4fcfa0){_0x470f49[_0x44b8('0x38')]=_0x4fcfa0;if(_0x41d673[_0x44b8('0x25')][_0x44b8('0x39')]){_0x549a26[_0x44b8('0x3a')]=[{'all':!![]}];}return db['UserProfileResource'][_0x44b8('0x3b')](_0x549a26);})[_0x44b8('0x1c')](function(_0x3611b4){_0x470f49[_0x44b8('0x3c')]=_0x3611b4;return _0x470f49;})[_0x44b8('0x1c')](respondWithFilteredResult(_0x350482,_0x549a26))[_0x44b8('0x3d')](handleError(_0x350482,null));};exports[_0x44b8('0x3e')]=function(_0x3581b8,_0x209039){var _0x3d1be1={'raw':![],'where':{'id':_0x3581b8[_0x44b8('0x3f')]['id']}},_0x1c9983={};_0x1c9983[_0x44b8('0x24')]=_[_0x44b8('0x40')](db[_0x44b8('0x41')][_0x44b8('0x23')]);_0x1c9983['query']=_[_0x44b8('0x40')](_0x3581b8[_0x44b8('0x25')]);_0x1c9983[_0x44b8('0x2d')]=_['intersection'](_0x1c9983[_0x44b8('0x24')],_0x1c9983[_0x44b8('0x25')]);_0x3d1be1[_0x44b8('0x26')]=_['intersection'](_0x1c9983[_0x44b8('0x24')],qs[_0x44b8('0x28')](_0x3581b8[_0x44b8('0x25')][_0x44b8('0x28')]));_0x3d1be1[_0x44b8('0x26')]=_0x3d1be1['attributes']['length']?_0x3d1be1[_0x44b8('0x26')]:_0x1c9983[_0x44b8('0x24')];if(_0x3581b8[_0x44b8('0x25')][_0x44b8('0x39')]){_0x3d1be1[_0x44b8('0x3a')]=[{'all':!![]}];}_0x3d1be1=_[_0x44b8('0x31')]({},_0x3d1be1,_0x3581b8[_0x44b8('0x37')]);return db[_0x44b8('0x41')][_0x44b8('0x42')](_0x3d1be1)[_0x44b8('0x1c')](handleEntityNotFound(_0x209039,null))[_0x44b8('0x1c')](respondWithResult(_0x209039,null))[_0x44b8('0x3d')](handleError(_0x209039,null));};exports[_0x44b8('0x43')]=function(_0x1236c7,_0x149731){return db[_0x44b8('0x41')][_0x44b8('0x43')](_0x1236c7[_0x44b8('0x44')],{})[_0x44b8('0x1c')](respondWithResult(_0x149731,0xc9))['catch'](handleError(_0x149731,null));};exports['update']=function(_0x3b1b12,_0x1df74b){if(_0x3b1b12[_0x44b8('0x44')]['id']){delete _0x3b1b12[_0x44b8('0x44')]['id'];}return db[_0x44b8('0x41')][_0x44b8('0x42')]({'where':{'id':_0x3b1b12[_0x44b8('0x3f')]['id']}})['then'](handleEntityNotFound(_0x1df74b,null))[_0x44b8('0x1c')](saveUpdates(_0x3b1b12['body'],null))[_0x44b8('0x1c')](respondWithResult(_0x1df74b,null))[_0x44b8('0x3d')](handleError(_0x1df74b,null));};exports[_0x44b8('0x1d')]=function(_0x9207bf,_0x103d57){return db[_0x44b8('0x41')]['find']({'where':{'id':_0x9207bf[_0x44b8('0x3f')]['id']}})[_0x44b8('0x1c')](handleEntityNotFound(_0x103d57,null))[_0x44b8('0x1c')](removeEntity(_0x103d57,null))[_0x44b8('0x3d')](handleError(_0x103d57,null));};exports['describe']=function(_0x4e4ed1,_0x2f549d){return db[_0x44b8('0x41')][_0x44b8('0x45')]()[_0x44b8('0x1c')](respondWithResult(_0x2f549d,null))[_0x44b8('0x3d')](handleError(_0x2f549d,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(_0x5425f5,_0x50648d){var _0x1798a6=function(_0x22fe45){while(--_0x22fe45){_0x5425f5['push'](_0x5425f5['shift']());}};_0x1798a6(++_0x50648d);}(_0xa9e0,0x123));var _0x0a9e=function(_0xbe200f,_0x4b50eb){_0xbe200f=_0xbe200f-0x0;var _0x192597=_0xa9e0[_0xbe200f];return _0x192597;};'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 c35d58a..91160e6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ae5=['../../config/logger','moment','bluebird','request-promise','rimraf','../../config/environment','exports','define','UserProfileResource','user_profile_has_resources','resourceId','sectionId','lodash','util'];(function(_0x357f53,_0xb7d010){var _0x5f4b0b=function(_0x19d543){while(--_0x19d543){_0x357f53['push'](_0x357f53['shift']());}};_0x5f4b0b(++_0xb7d010);}(_0x3ae5,0xc2));var _0x53ae=function(_0x52df58,_0x4205b8){_0x52df58=_0x52df58-0x0;var _0x3bd136=_0x3ae5[_0x52df58];return _0x3bd136;};'use strict';var _=require(_0x53ae('0x0'));var util=require(_0x53ae('0x1'));var logger=require(_0x53ae('0x2'))('api');var moment=require(_0x53ae('0x3'));var BPromise=require(_0x53ae('0x4'));var rp=require(_0x53ae('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x53ae('0x6'));var config=require(_0x53ae('0x7'));var attributes=require('./userProfileResource.attributes');module[_0x53ae('0x8')]=function(_0x389c87,_0x3cce8a){return _0x389c87[_0x53ae('0x9')](_0x53ae('0xa'),attributes,{'tableName':_0x53ae('0xb'),'paranoid':![],'indexes':[{'name':'compositeIndex','fields':[_0x53ae('0xc'),_0x53ae('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xfae5=['util','../../config/logger','api','moment','request-promise','path','../../config/environment','./userProfileResource.attributes','exports','define','UserProfileResource','user_profile_has_resources','compositeIndex','resourceId','sectionId','lodash'];(function(_0x2b9276,_0x28bf4e){var _0x2f6f36=function(_0x18728b){while(--_0x18728b){_0x2b9276['push'](_0x2b9276['shift']());}};_0x2f6f36(++_0x28bf4e);}(_0xfae5,0xff));var _0x5fae=function(_0x5c876a,_0x42263a){_0x5c876a=_0x5c876a-0x0;var _0x14394c=_0xfae5[_0x5c876a];return _0x14394c;};'use strict';var _=require(_0x5fae('0x0'));var util=require(_0x5fae('0x1'));var logger=require(_0x5fae('0x2'))(_0x5fae('0x3'));var moment=require(_0x5fae('0x4'));var BPromise=require('bluebird');var rp=require(_0x5fae('0x5'));var fs=require('fs');var path=require(_0x5fae('0x6'));var rimraf=require('rimraf');var config=require(_0x5fae('0x7'));var attributes=require(_0x5fae('0x8'));module[_0x5fae('0x9')]=function(_0x4a1456,_0x3475ac){return _0x4a1456[_0x5fae('0xa')](_0x5fae('0xb'),attributes,{'tableName':_0x5fae('0xc'),'paranoid':![],'indexes':[{'name':_0x5fae('0xd'),'fields':[_0x5fae('0xe'),_0x5fae('0xf')]}],'timestamps':!![]});};
\ No newline at end of file
index 1c331a7..339c93b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7b84=['jayson/promise','client','http','request','then','info','UserProfileResource,\x20%s,\x20%s','request\x20sent','debug','UserProfileResource,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment'];(function(_0x14d78e,_0x2f061f){var _0x26f94a=function(_0x20bef3){while(--_0x20bef3){_0x14d78e['push'](_0x14d78e['shift']());}};_0x26f94a(++_0x2f061f);}(_0x7b84,0x17c));var _0x47b8=function(_0x56dde5,_0x5d981c){_0x56dde5=_0x56dde5-0x0;var _0x3f7d60=_0x7b84[_0x56dde5];return _0x3f7d60;};'use strict';var _=require(_0x47b8('0x0'));var util=require(_0x47b8('0x1'));var moment=require(_0x47b8('0x2'));var BPromise=require(_0x47b8('0x3'));var rs=require(_0x47b8('0x4'));var fs=require('fs');var Redis=require(_0x47b8('0x5'));var db=require(_0x47b8('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0x47b8('0x7'))(_0x47b8('0x8'));var config=require(_0x47b8('0x9'));var jayson=require(_0x47b8('0xa'));var client=jayson[_0x47b8('0xb')][_0x47b8('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x53e656,_0x3867ca,_0x3ce846){return new BPromise(function(_0x46245a,_0xb845c9){return client[_0x47b8('0xd')](_0x53e656,_0x3ce846)[_0x47b8('0xe')](function(_0x24d240){logger[_0x47b8('0xf')](_0x47b8('0x10'),_0x3867ca,_0x47b8('0x11'));logger[_0x47b8('0x12')](_0x47b8('0x13'),_0x3867ca,_0x47b8('0x11'),JSON[_0x47b8('0x14')](_0x24d240));if(_0x24d240[_0x47b8('0x15')]){if(_0x24d240[_0x47b8('0x15')][_0x47b8('0x16')]===0x1f4){logger[_0x47b8('0x15')](_0x47b8('0x10'),_0x3867ca,_0x24d240[_0x47b8('0x15')][_0x47b8('0x17')]);return _0xb845c9(_0x24d240[_0x47b8('0x15')][_0x47b8('0x17')]);}logger[_0x47b8('0x15')](_0x47b8('0x10'),_0x3867ca,_0x24d240[_0x47b8('0x15')][_0x47b8('0x17')]);return _0x46245a(_0x24d240['error'][_0x47b8('0x17')]);}else{logger[_0x47b8('0xf')](_0x47b8('0x10'),_0x3867ca,_0x47b8('0x11'));_0x46245a(_0x24d240[_0x47b8('0x18')][_0x47b8('0x17')]);}})[_0x47b8('0x19')](function(_0x5ad3ae){logger[_0x47b8('0x15')]('UserProfileResource,\x20%s,\x20%s',_0x3867ca,_0x5ad3ae);_0xb845c9(_0x5ad3ae);});});}
\ No newline at end of file
+var _0xafb9=['util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','http','then','info','UserProfileResource,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash'];(function(_0x1d5385,_0x10a32c){var _0x40ebdb=function(_0x14bc91){while(--_0x14bc91){_0x1d5385['push'](_0x1d5385['shift']());}};_0x40ebdb(++_0x10a32c);}(_0xafb9,0x68));var _0x9afb=function(_0x545a17,_0x44d7af){_0x545a17=_0x545a17-0x0;var _0x5ccbf1=_0xafb9[_0x545a17];return _0x5ccbf1;};'use strict';var _=require(_0x9afb('0x0'));var util=require(_0x9afb('0x1'));var moment=require(_0x9afb('0x2'));var BPromise=require(_0x9afb('0x3'));var rs=require(_0x9afb('0x4'));var fs=require('fs');var Redis=require(_0x9afb('0x5'));var db=require(_0x9afb('0x6'))['db'];var utils=require(_0x9afb('0x7'));var logger=require(_0x9afb('0x8'))('rpc');var config=require('../../config/environment');var jayson=require(_0x9afb('0x9'));var client=jayson['client'][_0x9afb('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x548b24,_0x556880,_0x4c0e9d){return new BPromise(function(_0x1edf77,_0x20b8c1){return client['request'](_0x548b24,_0x4c0e9d)[_0x9afb('0xb')](function(_0x3e0264){logger[_0x9afb('0xc')](_0x9afb('0xd'),_0x556880,_0x9afb('0xe'));logger['debug']('UserProfileResource,\x20%s,\x20%s,\x20%s',_0x556880,_0x9afb('0xe'),JSON[_0x9afb('0xf')](_0x3e0264));if(_0x3e0264[_0x9afb('0x10')]){if(_0x3e0264[_0x9afb('0x10')][_0x9afb('0x11')]===0x1f4){logger[_0x9afb('0x10')](_0x9afb('0xd'),_0x556880,_0x3e0264[_0x9afb('0x10')][_0x9afb('0x12')]);return _0x20b8c1(_0x3e0264[_0x9afb('0x10')]['message']);}logger[_0x9afb('0x10')]('UserProfileResource,\x20%s,\x20%s',_0x556880,_0x3e0264['error'][_0x9afb('0x12')]);return _0x1edf77(_0x3e0264[_0x9afb('0x10')][_0x9afb('0x12')]);}else{logger[_0x9afb('0xc')](_0x9afb('0xd'),_0x556880,_0x9afb('0xe'));_0x1edf77(_0x3e0264[_0x9afb('0x13')]['message']);}})[_0x9afb('0x14')](function(_0x2145c2){logger[_0x9afb('0x10')](_0x9afb('0xd'),_0x556880,_0x2145c2);_0x20b8c1(_0x2145c2);});});}
\ No newline at end of file
index 36ecb85..a2d93d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca9c=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./userProfileSection.controller','get','index','isAuthenticated','/:id','show','post','create','update','delete','destroy','multer','express'];(function(_0x15e6fe,_0x1a5c39){var _0x34894d=function(_0x32eec2){while(--_0x32eec2){_0x15e6fe['push'](_0x15e6fe['shift']());}};_0x34894d(++_0x1a5c39);}(_0xca9c,0x10e));var _0xcca9=function(_0x94baee,_0x550a17){_0x94baee=_0x94baee-0x0;var _0x38ed6a=_0xca9c[_0x94baee];return _0x38ed6a;};'use strict';var multer=require(_0xcca9('0x0'));var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require(_0xcca9('0x1'));var router=express[_0xcca9('0x2')]();var auth=require(_0xcca9('0x3'));var interaction=require(_0xcca9('0x4'));var config=require(_0xcca9('0x5'));var controller=require(_0xcca9('0x6'));router[_0xcca9('0x7')]('/',auth['isAuthenticated'](),controller[_0xcca9('0x8')]);router[_0xcca9('0x7')]('/describe',auth[_0xcca9('0x9')](),controller['describe']);router['get'](_0xcca9('0xa'),auth[_0xcca9('0x9')](),controller[_0xcca9('0xb')]);router[_0xcca9('0xc')]('/',auth[_0xcca9('0x9')](),controller[_0xcca9('0xd')]);router['put']('/:id',auth['isAuthenticated'](),controller[_0xcca9('0xe')]);router[_0xcca9('0xf')](_0xcca9('0xa'),auth['isAuthenticated'](),controller[_0xcca9('0x10')]);module['exports']=router;
\ No newline at end of file
+var _0x641c=['/describe','/:id','show','create','put','destroy','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated'];(function(_0x555cb7,_0x35ad33){var _0x1ca5e8=function(_0x3f82ed){while(--_0x3f82ed){_0x555cb7['push'](_0x555cb7['shift']());}};_0x1ca5e8(++_0x35ad33);}(_0x641c,0xe7));var _0xc641=function(_0x5e4b85,_0x6cf965){_0x5e4b85=_0x5e4b85-0x0;var _0x5cd3cb=_0x641c[_0x5e4b85];return _0x5cd3cb;};'use strict';var multer=require('multer');var util=require(_0xc641('0x0'));var path=require(_0xc641('0x1'));var timeout=require(_0xc641('0x2'));var express=require(_0xc641('0x3'));var router=express[_0xc641('0x4')]();var auth=require(_0xc641('0x5'));var interaction=require(_0xc641('0x6'));var config=require('../../config/environment');var controller=require('./userProfileSection.controller');router[_0xc641('0x7')]('/',auth[_0xc641('0x8')](),controller['index']);router[_0xc641('0x7')](_0xc641('0x9'),auth['isAuthenticated'](),controller['describe']);router[_0xc641('0x7')](_0xc641('0xa'),auth[_0xc641('0x8')](),controller[_0xc641('0xb')]);router['post']('/',auth[_0xc641('0x8')](),controller[_0xc641('0xc')]);router[_0xc641('0xd')](_0xc641('0xa'),auth['isAuthenticated'](),controller['update']);router['delete']('/:id',auth['isAuthenticated'](),controller[_0xc641('0xe')]);module[_0xc641('0xf')]=router;
\ No newline at end of file
index fe8ec11..63d5d0c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e74=['setDataValue','crudPermissions','join','getDataValue','split','sequelize','STRING','INTEGER'];(function(_0x196655,_0x3664e2){var _0x51e53f=function(_0x2514fe){while(--_0x2514fe){_0x196655['push'](_0x196655['shift']());}};_0x51e53f(++_0x3664e2);}(_0x3e74,0x175));var _0x43e7=function(_0x3713fb,_0x3c8016){_0x3713fb=_0x3713fb-0x0;var _0x2385cb=_0x3e74[_0x3713fb];return _0x2385cb;};'use strict';var Sequelize=require(_0x43e7('0x0'));module['exports']={'name':{'type':Sequelize[_0x43e7('0x1')],'allowNull':![]},'category':{'type':Sequelize[_0x43e7('0x1')],'allowNull':![]},'sectionId':{'type':Sequelize[_0x43e7('0x2')],'allowNull':![]},'enabled':{'type':Sequelize['BOOLEAN'],'defaultValue':null},'autoAssociation':{'type':Sequelize['BOOLEAN'],'defaultValue':null},'crudPermissions':{'type':Sequelize[_0x43e7('0x1')],'set':function(_0x4f9bbe){this[_0x43e7('0x3')](_0x43e7('0x4'),_0x4f9bbe?_0x4f9bbe[_0x43e7('0x5')](''):[]);},'get':function(){return this[_0x43e7('0x6')](_0x43e7('0x4'))?this['getDataValue'](_0x43e7('0x4'))[_0x43e7('0x7')](''):[];}}};
\ No newline at end of file
+var _0xa9e0=['crudPermissions','join','getDataValue','sequelize','exports','STRING','BOOLEAN','setDataValue'];(function(_0x44c8bb,_0x3568d1){var _0x26d475=function(_0x5488ec){while(--_0x5488ec){_0x44c8bb['push'](_0x44c8bb['shift']());}};_0x26d475(++_0x3568d1);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4bfac3,_0x58324d){_0x4bfac3=_0x4bfac3-0x0;var _0x15f0f2=_0xa9e0[_0x4bfac3];return _0x15f0f2;};'use strict';var Sequelize=require(_0x0a9e('0x0'));module[_0x0a9e('0x1')]={'name':{'type':Sequelize[_0x0a9e('0x2')],'allowNull':![]},'category':{'type':Sequelize['STRING'],'allowNull':![]},'sectionId':{'type':Sequelize['INTEGER'],'allowNull':![]},'enabled':{'type':Sequelize[_0x0a9e('0x3')],'defaultValue':null},'autoAssociation':{'type':Sequelize['BOOLEAN'],'defaultValue':null},'crudPermissions':{'type':Sequelize[_0x0a9e('0x2')],'set':function(_0x432180){this[_0x0a9e('0x4')](_0x0a9e('0x5'),_0x432180?_0x432180[_0x0a9e('0x6')](''):[]);},'get':function(){return this['getDataValue'](_0x0a9e('0x5'))?this[_0x0a9e('0x7')](_0x0a9e('0x5'))['split'](''):[];}}};
\ No newline at end of file
index ca45d16..5a94278 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf4d=['rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','json','count','offset','limit','reject','save','then','end','error','stack','name','index','UserProfileSection','rawAttributes','model','keys','query','attributes','intersection','fields','length','hasOwnProperty','where','filters','pick','filter','merge','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','params','find','create','body','update','describe','eml-format'];(function(_0x151334,_0x1e11ac){var _0x3d03da=function(_0x2099cf){while(--_0x2099cf){_0x151334['push'](_0x151334['shift']());}};_0x3d03da(++_0x1e11ac);}(_0xdf4d,0xcb));var _0xddf4=function(_0x1b9b3b,_0x472593){_0x1b9b3b=_0x1b9b3b-0x0;var _0x5b5bd5=_0xdf4d[_0x1b9b3b];return _0x5b5bd5;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xddf4('0x0'));var rimraf=require(_0xddf4('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xddf4('0x2'));var rp=require(_0xddf4('0x3'));var moment=require(_0xddf4('0x4'));var BPromise=require(_0xddf4('0x5'));var Mustache=require(_0xddf4('0x6'));var util=require(_0xddf4('0x7'));var path=require('path');var sox=require('sox');var csv=require(_0xddf4('0x8'));var ejs=require(_0xddf4('0x9'));var fs=require('fs');var _=require(_0xddf4('0xa'));var squel=require(_0xddf4('0xb'));var crypto=require(_0xddf4('0xc'));var jsforce=require(_0xddf4('0xd'));var deskjs=require(_0xddf4('0xe'));var toCsv=require(_0xddf4('0x8'));var querystring=require(_0xddf4('0xf'));var Papa=require(_0xddf4('0x10'));var Redis=require(_0xddf4('0x11'));var authService=require('../../components/auth/service');var qs=require(_0xddf4('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xddf4('0x13'))(_0xddf4('0x14'));var utils=require(_0xddf4('0x15'));var config=require(_0xddf4('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2c7595,_0x32298b){_0x32298b=_0x32298b||0xcc;return function(_0x4dba63){if(_0x4dba63){return _0x2c7595[_0xddf4('0x17')](_0x32298b);}return _0x2c7595['status'](_0x32298b)['end']();};}function respondWithResult(_0xa9b80d,_0x4e83b2){_0x4e83b2=_0x4e83b2||0xc8;return function(_0x1d3773){if(_0x1d3773){return _0xa9b80d[_0xddf4('0x18')](_0x4e83b2)[_0xddf4('0x19')](_0x1d3773);}};}function respondWithFilteredResult(_0x276ab2,_0x3ef3a1){return function(_0x48412e){if(_0x48412e){var _0x151b7b=_0x48412e[_0xddf4('0x1a')],_0x5a8cba=_0x3ef3a1[_0xddf4('0x1b')],_0x13c576=_0x3ef3a1[_0xddf4('0x1b')]+_0x3ef3a1[_0xddf4('0x1c')],_0x464288;if(_0x13c576>=_0x151b7b){_0x13c576=_0x151b7b;_0x464288=0xc8;}else{_0x464288=0xce;}_0x276ab2[_0xddf4('0x18')](_0x464288);return _0x276ab2['set']('Content-Range',_0x5a8cba+'-'+_0x13c576+'/'+_0x151b7b)[_0xddf4('0x19')](_0x48412e);}return null;};}function patchUpdates(_0x1aa57a){return function(_0x545747){try{jsonpatch['apply'](_0x545747,_0x1aa57a,!![]);}catch(_0x5cb24f){return BPromise[_0xddf4('0x1d')](_0x5cb24f);}return _0x545747[_0xddf4('0x1e')]();};}function saveUpdates(_0x459a71,_0x254c7a){return function(_0x39e4c4){if(_0x39e4c4){return _0x39e4c4['update'](_0x459a71)[_0xddf4('0x1f')](function(_0x5b1aee){return _0x5b1aee;});}return null;};}function removeEntity(_0x2e5f19,_0x36ce1a){return function(_0x3a2e57){if(_0x3a2e57){return _0x3a2e57['destroy']()[_0xddf4('0x1f')](function(){_0x2e5f19[_0xddf4('0x18')](0xcc)[_0xddf4('0x20')]();});}};}function handleEntityNotFound(_0x4ccad2,_0x2ee748){return function(_0x2a195d){if(!_0x2a195d){_0x4ccad2[_0xddf4('0x17')](0x194);}return _0x2a195d;};}function handleError(_0x3d37da,_0x321b6c){_0x321b6c=_0x321b6c||0x1f4;return function(_0x44e751){logger[_0xddf4('0x21')](_0x44e751[_0xddf4('0x22')]);if(_0x44e751[_0xddf4('0x23')]){delete _0x44e751[_0xddf4('0x23')];}_0x3d37da[_0xddf4('0x18')](_0x321b6c)['send'](_0x44e751);};}exports[_0xddf4('0x24')]=function(_0x4eff51,_0x17473c){var _0x1d9edd={},_0x345d35={},_0x67dbb1={'count':0x0,'rows':[]};var _0x236b00=db[_0xddf4('0x25')][_0xddf4('0x26')];_0x345d35[_0xddf4('0x27')]=_[_0xddf4('0x28')](_0x236b00);_0x345d35[_0xddf4('0x29')]=_[_0xddf4('0x28')](_0x4eff51['query']);_0x345d35['filters']=_['intersection'](_0x345d35[_0xddf4('0x27')],_0x345d35['query']);_0x1d9edd[_0xddf4('0x2a')]=_[_0xddf4('0x2b')](_0x345d35[_0xddf4('0x27')],qs[_0xddf4('0x2c')](_0x4eff51['query']['fields']));_0x1d9edd[_0xddf4('0x2a')]=_0x1d9edd[_0xddf4('0x2a')][_0xddf4('0x2d')]?_0x1d9edd['attributes']:_0x345d35[_0xddf4('0x27')];if(!_0x4eff51[_0xddf4('0x29')][_0xddf4('0x2e')]('nolimit')){_0x1d9edd[_0xddf4('0x1c')]=qs[_0xddf4('0x1c')](_0x4eff51['query']['limit']);_0x1d9edd[_0xddf4('0x1b')]=qs['offset'](_0x4eff51[_0xddf4('0x29')][_0xddf4('0x1b')]);}_0x1d9edd['order']=qs['sort'](_0x4eff51[_0xddf4('0x29')]['sort']);_0x1d9edd[_0xddf4('0x2f')]=qs[_0xddf4('0x30')](_[_0xddf4('0x31')](_0x4eff51[_0xddf4('0x29')],_0x345d35[_0xddf4('0x30')]));if(_0x4eff51[_0xddf4('0x29')][_0xddf4('0x32')]){_0x1d9edd[_0xddf4('0x2f')]=_[_0xddf4('0x33')](_0x1d9edd[_0xddf4('0x2f')],{'$or':_['map'](_0x236b00,function(_0x2807b2){if(_0x2807b2[_0xddf4('0x34')][_0xddf4('0x35')]!==_0xddf4('0x36')){var _0x38bb34={};_0x38bb34[_0x2807b2[_0xddf4('0x37')]]={'$like':'%'+_0x4eff51[_0xddf4('0x29')][_0xddf4('0x32')]+'%'};return _0x38bb34;}})});}_0x1d9edd=_[_0xddf4('0x33')]({},_0x1d9edd,_0x4eff51[_0xddf4('0x38')]);var _0x197e49={'where':_0x1d9edd[_0xddf4('0x2f')]};return db[_0xddf4('0x25')]['count'](_0x197e49)[_0xddf4('0x1f')](function(_0xbbfd39){_0x67dbb1['count']=_0xbbfd39;if(_0x4eff51[_0xddf4('0x29')][_0xddf4('0x39')]){_0x1d9edd[_0xddf4('0x3a')]=[{'all':!![]}];}return db[_0xddf4('0x25')][_0xddf4('0x3b')](_0x1d9edd);})[_0xddf4('0x1f')](function(_0x1d434f){_0x67dbb1[_0xddf4('0x3c')]=_0x1d434f;return _0x67dbb1;})['then'](respondWithFilteredResult(_0x17473c,_0x1d9edd))[_0xddf4('0x3d')](handleError(_0x17473c,null));};exports['show']=function(_0x4b93b2,_0x353e3d){var _0x63a5db={'raw':![],'where':{'id':_0x4b93b2[_0xddf4('0x3e')]['id']}},_0x3cd53f={};_0x3cd53f[_0xddf4('0x27')]=_['keys'](db[_0xddf4('0x25')][_0xddf4('0x26')]);_0x3cd53f[_0xddf4('0x29')]=_[_0xddf4('0x28')](_0x4b93b2[_0xddf4('0x29')]);_0x3cd53f[_0xddf4('0x30')]=_[_0xddf4('0x2b')](_0x3cd53f[_0xddf4('0x27')],_0x3cd53f[_0xddf4('0x29')]);_0x63a5db[_0xddf4('0x2a')]=_[_0xddf4('0x2b')](_0x3cd53f[_0xddf4('0x27')],qs[_0xddf4('0x2c')](_0x4b93b2['query'][_0xddf4('0x2c')]));_0x63a5db[_0xddf4('0x2a')]=_0x63a5db['attributes'][_0xddf4('0x2d')]?_0x63a5db[_0xddf4('0x2a')]:_0x3cd53f[_0xddf4('0x27')];if(_0x4b93b2[_0xddf4('0x29')][_0xddf4('0x39')]){_0x63a5db[_0xddf4('0x3a')]=[{'all':!![]}];}_0x63a5db=_[_0xddf4('0x33')]({},_0x63a5db,_0x4b93b2[_0xddf4('0x38')]);return db[_0xddf4('0x25')][_0xddf4('0x3f')](_0x63a5db)[_0xddf4('0x1f')](handleEntityNotFound(_0x353e3d,null))[_0xddf4('0x1f')](respondWithResult(_0x353e3d,null))['catch'](handleError(_0x353e3d,null));};exports['create']=function(_0x16c069,_0x14a998){return db[_0xddf4('0x25')][_0xddf4('0x40')](_0x16c069[_0xddf4('0x41')],{})[_0xddf4('0x1f')](respondWithResult(_0x14a998,0xc9))['catch'](handleError(_0x14a998,null));};exports[_0xddf4('0x42')]=function(_0x7953bd,_0x584395){if(_0x7953bd[_0xddf4('0x41')]['id']){delete _0x7953bd[_0xddf4('0x41')]['id'];}return db[_0xddf4('0x25')][_0xddf4('0x3f')]({'where':{'id':_0x7953bd['params']['id']}})[_0xddf4('0x1f')](handleEntityNotFound(_0x584395,null))[_0xddf4('0x1f')](saveUpdates(_0x7953bd['body'],null))['then'](respondWithResult(_0x584395,null))[_0xddf4('0x3d')](handleError(_0x584395,null));};exports['destroy']=function(_0x288c8a,_0x27b30a){return db[_0xddf4('0x25')][_0xddf4('0x3f')]({'where':{'id':_0x288c8a['params']['id']}})[_0xddf4('0x1f')](handleEntityNotFound(_0x27b30a,null))[_0xddf4('0x1f')](removeEntity(_0x27b30a,null))['catch'](handleError(_0x27b30a,null));};exports[_0xddf4('0x43')]=function(_0x5b1552,_0x203eed){return db[_0xddf4('0x25')][_0xddf4('0x43')]()['then'](respondWithResult(_0x203eed,null))[_0xddf4('0x3d')](handleError(_0x203eed,null));};
\ No newline at end of file
+var _0x8b5f=['desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','api','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','name','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','nolimit','order','sort','where','pick','filter','merge','map','VIRTUAL','field','options','UserProfileSection','includeAll','include','findAll','rows','params','length','find','create','body','catch','describe','rimraf','zip-dir','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce'];(function(_0x1cf470,_0x5b8122){var _0x43748c=function(_0x49b86c){while(--_0x49b86c){_0x1cf470['push'](_0x1cf470['shift']());}};_0x43748c(++_0x5b8122);}(_0x8b5f,0x106));var _0xf8b5=function(_0x2b1fef,_0x1ca512){_0x2b1fef=_0x2b1fef-0x0;var _0x20b521=_0x8b5f[_0x2b1fef];return _0x20b521;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xf8b5('0x0'));var zipdir=require(_0xf8b5('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0xf8b5('0x2'));var moment=require('moment');var BPromise=require(_0xf8b5('0x3'));var Mustache=require(_0xf8b5('0x4'));var util=require(_0xf8b5('0x5'));var path=require(_0xf8b5('0x6'));var sox=require(_0xf8b5('0x7'));var csv=require(_0xf8b5('0x8'));var ejs=require(_0xf8b5('0x9'));var fs=require('fs');var _=require(_0xf8b5('0xa'));var squel=require(_0xf8b5('0xb'));var crypto=require(_0xf8b5('0xc'));var jsforce=require(_0xf8b5('0xd'));var deskjs=require(_0xf8b5('0xe'));var toCsv=require(_0xf8b5('0x8'));var querystring=require(_0xf8b5('0xf'));var Papa=require('papaparse');var Redis=require(_0xf8b5('0x10'));var authService=require(_0xf8b5('0x11'));var qs=require(_0xf8b5('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xf8b5('0x13'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xf8b5('0x14'))['db'];function respondWithStatusCode(_0x17de62,_0x223ec6){_0x223ec6=_0x223ec6||0xcc;return function(_0x18e2de){if(_0x18e2de){return _0x17de62[_0xf8b5('0x15')](_0x223ec6);}return _0x17de62[_0xf8b5('0x16')](_0x223ec6)[_0xf8b5('0x17')]();};}function respondWithResult(_0x40ae7b,_0x23f4ab){_0x23f4ab=_0x23f4ab||0xc8;return function(_0x2f4b47){if(_0x2f4b47){return _0x40ae7b['status'](_0x23f4ab)[_0xf8b5('0x18')](_0x2f4b47);}};}function respondWithFilteredResult(_0x5801dc,_0x4ddefb){return function(_0x5d6616){if(_0x5d6616){var _0x39739c=_0x5d6616[_0xf8b5('0x19')],_0x6d4e2e=_0x4ddefb[_0xf8b5('0x1a')],_0x17e4ee=_0x4ddefb[_0xf8b5('0x1a')]+_0x4ddefb[_0xf8b5('0x1b')],_0x4c2e0c;if(_0x17e4ee>=_0x39739c){_0x17e4ee=_0x39739c;_0x4c2e0c=0xc8;}else{_0x4c2e0c=0xce;}_0x5801dc[_0xf8b5('0x16')](_0x4c2e0c);return _0x5801dc[_0xf8b5('0x1c')](_0xf8b5('0x1d'),_0x6d4e2e+'-'+_0x17e4ee+'/'+_0x39739c)[_0xf8b5('0x18')](_0x5d6616);}return null;};}function patchUpdates(_0x22adbd){return function(_0x2a5b4c){try{jsonpatch[_0xf8b5('0x1e')](_0x2a5b4c,_0x22adbd,!![]);}catch(_0x576622){return BPromise[_0xf8b5('0x1f')](_0x576622);}return _0x2a5b4c[_0xf8b5('0x20')]();};}function saveUpdates(_0x7602ca,_0x41d959){return function(_0x2a6e4e){if(_0x2a6e4e){return _0x2a6e4e[_0xf8b5('0x21')](_0x7602ca)[_0xf8b5('0x22')](function(_0x465cf0){return _0x465cf0;});}return null;};}function removeEntity(_0x490cfe,_0x3d9bb7){return function(_0x28bdd4){if(_0x28bdd4){return _0x28bdd4[_0xf8b5('0x23')]()['then'](function(){_0x490cfe['status'](0xcc)[_0xf8b5('0x17')]();});}};}function handleEntityNotFound(_0x284d25,_0x560f37){return function(_0x186ccc){if(!_0x186ccc){_0x284d25[_0xf8b5('0x15')](0x194);}return _0x186ccc;};}function handleError(_0x27ee8b,_0x2b97b6){_0x2b97b6=_0x2b97b6||0x1f4;return function(_0x1c74d6){logger['error'](_0x1c74d6['stack']);if(_0x1c74d6[_0xf8b5('0x24')]){delete _0x1c74d6[_0xf8b5('0x24')];}_0x27ee8b[_0xf8b5('0x16')](_0x2b97b6)['send'](_0x1c74d6);};}exports[_0xf8b5('0x25')]=function(_0x4f88ce,_0x295e05){var _0x2c358b={},_0x3e5972={},_0x1ef0c5={'count':0x0,'rows':[]};var _0x4fcc43=db['UserProfileSection'][_0xf8b5('0x26')];_0x3e5972[_0xf8b5('0x27')]=_[_0xf8b5('0x28')](_0x4fcc43);_0x3e5972[_0xf8b5('0x29')]=_[_0xf8b5('0x28')](_0x4f88ce[_0xf8b5('0x29')]);_0x3e5972[_0xf8b5('0x2a')]=_[_0xf8b5('0x2b')](_0x3e5972[_0xf8b5('0x27')],_0x3e5972[_0xf8b5('0x29')]);_0x2c358b[_0xf8b5('0x2c')]=_[_0xf8b5('0x2b')](_0x3e5972[_0xf8b5('0x27')],qs[_0xf8b5('0x2d')](_0x4f88ce[_0xf8b5('0x29')]['fields']));_0x2c358b[_0xf8b5('0x2c')]=_0x2c358b[_0xf8b5('0x2c')]['length']?_0x2c358b[_0xf8b5('0x2c')]:_0x3e5972[_0xf8b5('0x27')];if(!_0x4f88ce[_0xf8b5('0x29')]['hasOwnProperty'](_0xf8b5('0x2e'))){_0x2c358b[_0xf8b5('0x1b')]=qs[_0xf8b5('0x1b')](_0x4f88ce[_0xf8b5('0x29')][_0xf8b5('0x1b')]);_0x2c358b[_0xf8b5('0x1a')]=qs[_0xf8b5('0x1a')](_0x4f88ce[_0xf8b5('0x29')][_0xf8b5('0x1a')]);}_0x2c358b[_0xf8b5('0x2f')]=qs['sort'](_0x4f88ce[_0xf8b5('0x29')][_0xf8b5('0x30')]);_0x2c358b[_0xf8b5('0x31')]=qs[_0xf8b5('0x2a')](_[_0xf8b5('0x32')](_0x4f88ce[_0xf8b5('0x29')],_0x3e5972[_0xf8b5('0x2a')]));if(_0x4f88ce[_0xf8b5('0x29')][_0xf8b5('0x33')]){_0x2c358b[_0xf8b5('0x31')]=_[_0xf8b5('0x34')](_0x2c358b[_0xf8b5('0x31')],{'$or':_[_0xf8b5('0x35')](_0x4fcc43,function(_0x466f16){if(_0x466f16['type']['key']!==_0xf8b5('0x36')){var _0x32fbb3={};_0x32fbb3[_0x466f16[_0xf8b5('0x37')]]={'$like':'%'+_0x4f88ce['query'][_0xf8b5('0x33')]+'%'};return _0x32fbb3;}})});}_0x2c358b=_[_0xf8b5('0x34')]({},_0x2c358b,_0x4f88ce[_0xf8b5('0x38')]);var _0x302f9c={'where':_0x2c358b[_0xf8b5('0x31')]};return db[_0xf8b5('0x39')]['count'](_0x302f9c)[_0xf8b5('0x22')](function(_0x4fa100){_0x1ef0c5[_0xf8b5('0x19')]=_0x4fa100;if(_0x4f88ce[_0xf8b5('0x29')][_0xf8b5('0x3a')]){_0x2c358b[_0xf8b5('0x3b')]=[{'all':!![]}];}return db['UserProfileSection'][_0xf8b5('0x3c')](_0x2c358b);})[_0xf8b5('0x22')](function(_0x258fa4){_0x1ef0c5[_0xf8b5('0x3d')]=_0x258fa4;return _0x1ef0c5;})[_0xf8b5('0x22')](respondWithFilteredResult(_0x295e05,_0x2c358b))['catch'](handleError(_0x295e05,null));};exports['show']=function(_0xf71edd,_0x1774a2){var _0x3dddf2={'raw':![],'where':{'id':_0xf71edd[_0xf8b5('0x3e')]['id']}},_0x3390b4={};_0x3390b4[_0xf8b5('0x27')]=_[_0xf8b5('0x28')](db[_0xf8b5('0x39')]['rawAttributes']);_0x3390b4[_0xf8b5('0x29')]=_[_0xf8b5('0x28')](_0xf71edd['query']);_0x3390b4[_0xf8b5('0x2a')]=_[_0xf8b5('0x2b')](_0x3390b4[_0xf8b5('0x27')],_0x3390b4[_0xf8b5('0x29')]);_0x3dddf2[_0xf8b5('0x2c')]=_[_0xf8b5('0x2b')](_0x3390b4[_0xf8b5('0x27')],qs[_0xf8b5('0x2d')](_0xf71edd[_0xf8b5('0x29')][_0xf8b5('0x2d')]));_0x3dddf2[_0xf8b5('0x2c')]=_0x3dddf2['attributes'][_0xf8b5('0x3f')]?_0x3dddf2[_0xf8b5('0x2c')]:_0x3390b4['model'];if(_0xf71edd[_0xf8b5('0x29')][_0xf8b5('0x3a')]){_0x3dddf2[_0xf8b5('0x3b')]=[{'all':!![]}];}_0x3dddf2=_[_0xf8b5('0x34')]({},_0x3dddf2,_0xf71edd[_0xf8b5('0x38')]);return db[_0xf8b5('0x39')][_0xf8b5('0x40')](_0x3dddf2)[_0xf8b5('0x22')](handleEntityNotFound(_0x1774a2,null))[_0xf8b5('0x22')](respondWithResult(_0x1774a2,null))['catch'](handleError(_0x1774a2,null));};exports[_0xf8b5('0x41')]=function(_0x589799,_0x53626e){return db[_0xf8b5('0x39')][_0xf8b5('0x41')](_0x589799[_0xf8b5('0x42')],{})[_0xf8b5('0x22')](respondWithResult(_0x53626e,0xc9))[_0xf8b5('0x43')](handleError(_0x53626e,null));};exports[_0xf8b5('0x21')]=function(_0x10a7fd,_0x447d92){if(_0x10a7fd['body']['id']){delete _0x10a7fd[_0xf8b5('0x42')]['id'];}return db['UserProfileSection']['find']({'where':{'id':_0x10a7fd[_0xf8b5('0x3e')]['id']}})[_0xf8b5('0x22')](handleEntityNotFound(_0x447d92,null))[_0xf8b5('0x22')](saveUpdates(_0x10a7fd[_0xf8b5('0x42')],null))[_0xf8b5('0x22')](respondWithResult(_0x447d92,null))[_0xf8b5('0x43')](handleError(_0x447d92,null));};exports[_0xf8b5('0x23')]=function(_0x4ff86d,_0x56c5a3){return db[_0xf8b5('0x39')][_0xf8b5('0x40')]({'where':{'id':_0x4ff86d[_0xf8b5('0x3e')]['id']}})[_0xf8b5('0x22')](handleEntityNotFound(_0x56c5a3,null))[_0xf8b5('0x22')](removeEntity(_0x56c5a3,null))['catch'](handleError(_0x56c5a3,null));};exports[_0xf8b5('0x44')]=function(_0x2b6cf9,_0x4f382a){return db[_0xf8b5('0x39')]['describe']()[_0xf8b5('0x22')](respondWithResult(_0x4f382a,null))[_0xf8b5('0x43')](handleError(_0x4f382a,null));};
\ No newline at end of file
index 8b43ad6..e2a8d61 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x899a=['user_profile_has_sections','compositeIndex','sectionId','userProfileId','lodash','util','api','moment','request-promise','path','rimraf','../../config/environment','exports','define'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0x899a,0x1b6));var _0xa899=function(_0x59d073,_0x537771){_0x59d073=_0x59d073-0x0;var _0x15a5b9=_0x899a[_0x59d073];return _0x15a5b9;};'use strict';var _=require(_0xa899('0x0'));var util=require(_0xa899('0x1'));var logger=require('../../config/logger')(_0xa899('0x2'));var moment=require(_0xa899('0x3'));var BPromise=require('bluebird');var rp=require(_0xa899('0x4'));var fs=require('fs');var path=require(_0xa899('0x5'));var rimraf=require(_0xa899('0x6'));var config=require(_0xa899('0x7'));var attributes=require('./userProfileSection.attributes');module[_0xa899('0x8')]=function(_0xb1bd49,_0xad59d2){return _0xb1bd49[_0xa899('0x9')]('UserProfileSection',attributes,{'tableName':_0xa899('0xa'),'paranoid':![],'indexes':[{'name':_0xa899('0xb'),'fields':[_0xa899('0xc'),_0xa899('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x7e63=['bluebird','request-promise','rimraf','../../config/environment','define','user_profile_has_sections','compositeIndex','userProfileId','lodash','util','../../config/logger','moment'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0x7e63,0x74));var _0x37e6=function(_0x108c7d,_0x258819){_0x108c7d=_0x108c7d-0x0;var _0x1946fe=_0x7e63[_0x108c7d];return _0x1946fe;};'use strict';var _=require(_0x37e6('0x0'));var util=require(_0x37e6('0x1'));var logger=require(_0x37e6('0x2'))('api');var moment=require(_0x37e6('0x3'));var BPromise=require(_0x37e6('0x4'));var rp=require(_0x37e6('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x37e6('0x6'));var config=require(_0x37e6('0x7'));var attributes=require('./userProfileSection.attributes');module['exports']=function(_0x201f4b,_0x7943bc){return _0x201f4b[_0x37e6('0x8')]('UserProfileSection',attributes,{'tableName':_0x37e6('0x9'),'paranoid':![],'indexes':[{'name':_0x37e6('0xa'),'fields':['sectionId',_0x37e6('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index 134fbc6..933c849 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcacb=['lodash','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','client','http','request','then','info','UserProfileSection,\x20%s,\x20%s','request\x20sent','debug','UserProfileSection,\x20%s,\x20%s,\x20%s','error','message','result','catch'];(function(_0x29dee4,_0x3d413b){var _0x12e035=function(_0x3554bd){while(--_0x3554bd){_0x29dee4['push'](_0x29dee4['shift']());}};_0x12e035(++_0x3d413b);}(_0xcacb,0x118));var _0xbcac=function(_0x3be8e8,_0x246a8f){_0x3be8e8=_0x3be8e8-0x0;var _0x5f7c64=_0xcacb[_0x3be8e8];return _0x5f7c64;};'use strict';var _=require(_0xbcac('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xbcac('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xbcac('0x2'));var db=require(_0xbcac('0x3'))['db'];var utils=require(_0xbcac('0x4'));var logger=require('../../config/logger')('rpc');var config=require(_0xbcac('0x5'));var jayson=require(_0xbcac('0x6'));var client=jayson[_0xbcac('0x7')][_0xbcac('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x176449,_0x403b29,_0xa9e44d){return new BPromise(function(_0x212aa8,_0x4d6393){return client[_0xbcac('0x9')](_0x176449,_0xa9e44d)[_0xbcac('0xa')](function(_0x4af1b9){logger[_0xbcac('0xb')](_0xbcac('0xc'),_0x403b29,_0xbcac('0xd'));logger[_0xbcac('0xe')](_0xbcac('0xf'),_0x403b29,_0xbcac('0xd'),JSON['stringify'](_0x4af1b9));if(_0x4af1b9[_0xbcac('0x10')]){if(_0x4af1b9[_0xbcac('0x10')]['code']===0x1f4){logger[_0xbcac('0x10')](_0xbcac('0xc'),_0x403b29,_0x4af1b9[_0xbcac('0x10')][_0xbcac('0x11')]);return _0x4d6393(_0x4af1b9[_0xbcac('0x10')][_0xbcac('0x11')]);}logger[_0xbcac('0x10')](_0xbcac('0xc'),_0x403b29,_0x4af1b9['error'][_0xbcac('0x11')]);return _0x212aa8(_0x4af1b9[_0xbcac('0x10')][_0xbcac('0x11')]);}else{logger[_0xbcac('0xb')](_0xbcac('0xc'),_0x403b29,_0xbcac('0xd'));_0x212aa8(_0x4af1b9[_0xbcac('0x12')][_0xbcac('0x11')]);}})[_0xbcac('0x13')](function(_0x1cf21f){logger[_0xbcac('0x10')](_0xbcac('0xc'),_0x403b29,_0x1cf21f);_0x4d6393(_0x1cf21f);});});}
\ No newline at end of file
+var _0xc409=['lodash','util','moment','bluebird','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','client','request','info','debug','UserProfileSection,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','UserProfileSection,\x20%s,\x20%s','message','result','catch'];(function(_0x39609a,_0x28a563){var _0xecd92=function(_0x57241a){while(--_0x57241a){_0x39609a['push'](_0x39609a['shift']());}};_0xecd92(++_0x28a563);}(_0xc409,0xc6));var _0x9c40=function(_0x4909dc,_0x3aa0fa){_0x4909dc=_0x4909dc-0x0;var _0x3fecd5=_0xc409[_0x4909dc];return _0x3fecd5;};'use strict';var _=require(_0x9c40('0x0'));var util=require(_0x9c40('0x1'));var moment=require(_0x9c40('0x2'));var BPromise=require(_0x9c40('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x9c40('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x9c40('0x5'));var logger=require(_0x9c40('0x6'))(_0x9c40('0x7'));var config=require(_0x9c40('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x9c40('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x211744,_0x20f7ea,_0x16bb9d){return new BPromise(function(_0x47b333,_0x8b7d1){return client[_0x9c40('0xa')](_0x211744,_0x16bb9d)['then'](function(_0x2f7752){logger[_0x9c40('0xb')]('UserProfileSection,\x20%s,\x20%s',_0x20f7ea,'request\x20sent');logger[_0x9c40('0xc')](_0x9c40('0xd'),_0x20f7ea,_0x9c40('0xe'),JSON[_0x9c40('0xf')](_0x2f7752));if(_0x2f7752['error']){if(_0x2f7752[_0x9c40('0x10')][_0x9c40('0x11')]===0x1f4){logger[_0x9c40('0x10')](_0x9c40('0x12'),_0x20f7ea,_0x2f7752['error'][_0x9c40('0x13')]);return _0x8b7d1(_0x2f7752['error'][_0x9c40('0x13')]);}logger[_0x9c40('0x10')]('UserProfileSection,\x20%s,\x20%s',_0x20f7ea,_0x2f7752[_0x9c40('0x10')][_0x9c40('0x13')]);return _0x47b333(_0x2f7752[_0x9c40('0x10')][_0x9c40('0x13')]);}else{logger[_0x9c40('0xb')](_0x9c40('0x12'),_0x20f7ea,_0x9c40('0xe'));_0x47b333(_0x2f7752[_0x9c40('0x14')][_0x9c40('0x13')]);}})[_0x9c40('0x15')](function(_0x3d6ebe){logger[_0x9c40('0x10')](_0x9c40('0x12'),_0x20f7ea,_0x3d6ebe);_0x8b7d1(_0x3d6ebe);});});}
\ No newline at end of file
index 445b3e8..7197e88 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f47=['exports','util','path','express','../../components/auth/service','../../config/environment'];(function(_0x88388,_0xaabbb){var _0x4f388e=function(_0xe6adfc){while(--_0xe6adfc){_0x88388['push'](_0x88388['shift']());}};_0x4f388e(++_0xaabbb);}(_0x6f47,0xc7));var _0x76f4=function(_0x298ed3,_0x4ab5e1){_0x298ed3=_0x298ed3-0x0;var _0x5aad28=_0x6f47[_0x298ed3];return _0x5aad28;};'use strict';var multer=require('multer');var util=require(_0x76f4('0x0'));var path=require(_0x76f4('0x1'));var timeout=require('connect-timeout');var express=require(_0x76f4('0x2'));var router=express['Router']();var auth=require(_0x76f4('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x76f4('0x4'));module[_0x76f4('0x5')]=router;
\ No newline at end of file
+var _0x7e4b=['../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer','util','connect-timeout','express'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x7e4b,0x84));var _0xb7e4=function(_0x194694,_0x58312a){_0x194694=_0x194694-0x0;var _0xc3c3f8=_0x7e4b[_0x194694];return _0xc3c3f8;};'use strict';var multer=require(_0xb7e4('0x0'));var util=require(_0xb7e4('0x1'));var path=require('path');var timeout=require(_0xb7e4('0x2'));var express=require(_0xb7e4('0x3'));var router=express['Router']();var auth=require(_0xb7e4('0x4'));var interaction=require(_0xb7e4('0x5'));var config=require(_0xb7e4('0x6'));module[_0xb7e4('0x7')]=router;
\ No newline at end of file
index dc1797b..f0f98ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf9ef=['exports','INTEGER'];(function(_0x4fa12b,_0x4c6d97){var _0x2e4be9=function(_0x39fea4){while(--_0x39fea4){_0x4fa12b['push'](_0x4fa12b['shift']());}};_0x2e4be9(++_0x4c6d97);}(_0xf9ef,0x1a6));var _0xff9e=function(_0x261702,_0x1c58f5){_0x261702=_0x261702-0x0;var _0x51e1ea=_0xf9ef[_0x261702];return _0x51e1ea;};'use strict';var Sequelize=require('sequelize');module[_0xff9e('0x0')]={'penalty':{'type':Sequelize[_0xff9e('0x1')],'defaultValue':0x0}};
\ No newline at end of file
+var _0xbc55=['sequelize','exports'];(function(_0x48d4a7,_0x3b6ba6){var _0x32fa0e=function(_0x2f33dc){while(--_0x2f33dc){_0x48d4a7['push'](_0x48d4a7['shift']());}};_0x32fa0e(++_0x3b6ba6);}(_0xbc55,0xf2));var _0x5bc5=function(_0x56efd1,_0x130f5a){_0x56efd1=_0x56efd1-0x0;var _0x40aaa5=_0xbc55[_0x56efd1];return _0x40aaa5;};'use strict';var Sequelize=require(_0x5bc5('0x0'));module[_0x5bc5('0x1')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index eff7eb0..6416b34 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8028=['util','api','bluebird','request-promise'];(function(_0x5cc5c2,_0x5edded){var _0x51b7eb=function(_0x47814d){while(--_0x47814d){_0x5cc5c2['push'](_0x5cc5c2['shift']());}};_0x51b7eb(++_0x5edded);}(_0x8028,0xcc));var _0x8802=function(_0x2eeac9,_0x185be0){_0x2eeac9=_0x2eeac9-0x0;var _0x1337d1=_0x8028[_0x2eeac9];return _0x1337d1;};'use strict';var _=require('lodash');var util=require(_0x8802('0x0'));var logger=require('../../config/logger')(_0x8802('0x1'));var moment=require('moment');var BPromise=require(_0x8802('0x2'));var rp=require(_0x8802('0x3'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require('./userSmsQueue.attributes');module['exports']=function(_0x501acd,_0x480db5){return _0x501acd['define']('UserSmsQueue',attributes,{'tableName':'user_has_sms_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd1f1=['bluebird','request-promise','path','rimraf','../../config/environment','exports','define','UserSmsQueue','lodash','util','api','moment'];(function(_0x10e2c6,_0x27e8d5){var _0x34c5c9=function(_0x1c91f8){while(--_0x1c91f8){_0x10e2c6['push'](_0x10e2c6['shift']());}};_0x34c5c9(++_0x27e8d5);}(_0xd1f1,0xbc));var _0x1d1f=function(_0xaa1b3e,_0x47d976){_0xaa1b3e=_0xaa1b3e-0x0;var _0x454d7d=_0xd1f1[_0xaa1b3e];return _0x454d7d;};'use strict';var _=require(_0x1d1f('0x0'));var util=require(_0x1d1f('0x1'));var logger=require('../../config/logger')(_0x1d1f('0x2'));var moment=require(_0x1d1f('0x3'));var BPromise=require(_0x1d1f('0x4'));var rp=require(_0x1d1f('0x5'));var fs=require('fs');var path=require(_0x1d1f('0x6'));var rimraf=require(_0x1d1f('0x7'));var config=require(_0x1d1f('0x8'));var attributes=require('./userSmsQueue.attributes');module[_0x1d1f('0x9')]=function(_0x246882,_0x68d881){return _0x246882[_0x1d1f('0xa')](_0x1d1f('0xb'),attributes,{'tableName':'user_has_sms_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 23a6ed0..76c1c04 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x96aa=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','UserSmsQueue,\x20%s,\x20%s','request\x20sent','UserSmsQueue,\x20%s,\x20%s,\x20%s','error','code','message','catch','lodash','util','bluebird','ioredis','../../mysqldb'];(function(_0x1b18bd,_0x50b3f3){var _0x405c93=function(_0x88ff0e){while(--_0x88ff0e){_0x1b18bd['push'](_0x1b18bd['shift']());}};_0x405c93(++_0x50b3f3);}(_0x96aa,0x10c));var _0xa96a=function(_0x520988,_0x40dedb){_0x520988=_0x520988-0x0;var _0x24899e=_0x96aa[_0x520988];return _0x24899e;};'use strict';var _=require(_0xa96a('0x0'));var util=require(_0xa96a('0x1'));var moment=require('moment');var BPromise=require(_0xa96a('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xa96a('0x3'));var db=require(_0xa96a('0x4'))['db'];var utils=require(_0xa96a('0x5'));var logger=require(_0xa96a('0x6'))(_0xa96a('0x7'));var config=require(_0xa96a('0x8'));var jayson=require(_0xa96a('0x9'));var client=jayson[_0xa96a('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2d8b74,_0x478618,_0x14a6e0){return new BPromise(function(_0x30fc19,_0x58cd6e){return client[_0xa96a('0xb')](_0x2d8b74,_0x14a6e0)[_0xa96a('0xc')](function(_0x1648f7){logger[_0xa96a('0xd')](_0xa96a('0xe'),_0x478618,_0xa96a('0xf'));logger['debug'](_0xa96a('0x10'),_0x478618,_0xa96a('0xf'),JSON['stringify'](_0x1648f7));if(_0x1648f7[_0xa96a('0x11')]){if(_0x1648f7[_0xa96a('0x11')][_0xa96a('0x12')]===0x1f4){logger[_0xa96a('0x11')](_0xa96a('0xe'),_0x478618,_0x1648f7[_0xa96a('0x11')][_0xa96a('0x13')]);return _0x58cd6e(_0x1648f7['error']['message']);}logger[_0xa96a('0x11')](_0xa96a('0xe'),_0x478618,_0x1648f7[_0xa96a('0x11')][_0xa96a('0x13')]);return _0x30fc19(_0x1648f7[_0xa96a('0x11')][_0xa96a('0x13')]);}else{logger['info']('UserSmsQueue,\x20%s,\x20%s',_0x478618,_0xa96a('0xf'));_0x30fc19(_0x1648f7['result'][_0xa96a('0x13')]);}})[_0xa96a('0x14')](function(_0x4b14c4){logger[_0xa96a('0x11')](_0xa96a('0xe'),_0x478618,_0x4b14c4);_0x58cd6e(_0x4b14c4);});});}
\ No newline at end of file
+var _0x12a7=['lodash','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','then','info','UserSmsQueue,\x20%s,\x20%s','request\x20sent','debug','UserSmsQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch'];(function(_0x3df41c,_0x2c4f5c){var _0x56cc7b=function(_0xcba7af){while(--_0xcba7af){_0x3df41c['push'](_0x3df41c['shift']());}};_0x56cc7b(++_0x2c4f5c);}(_0x12a7,0x154));var _0x712a=function(_0x44e22e,_0x2bb8e3){_0x44e22e=_0x44e22e-0x0;var _0x263519=_0x12a7[_0x44e22e];return _0x263519;};'use strict';var _=require(_0x712a('0x0'));var util=require('util');var moment=require(_0x712a('0x1'));var BPromise=require('bluebird');var rs=require(_0x712a('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x712a('0x3'))['db'];var utils=require(_0x712a('0x4'));var logger=require(_0x712a('0x5'))(_0x712a('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x712a('0x7')][_0x712a('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x5fbbac,_0x43d65a,_0x33ecc4){return new BPromise(function(_0xc703ca,_0xd3461a){return client['request'](_0x5fbbac,_0x33ecc4)[_0x712a('0x9')](function(_0x2bbaab){logger[_0x712a('0xa')](_0x712a('0xb'),_0x43d65a,_0x712a('0xc'));logger[_0x712a('0xd')](_0x712a('0xe'),_0x43d65a,_0x712a('0xc'),JSON[_0x712a('0xf')](_0x2bbaab));if(_0x2bbaab[_0x712a('0x10')]){if(_0x2bbaab['error'][_0x712a('0x11')]===0x1f4){logger[_0x712a('0x10')]('UserSmsQueue,\x20%s,\x20%s',_0x43d65a,_0x2bbaab['error'][_0x712a('0x12')]);return _0xd3461a(_0x2bbaab[_0x712a('0x10')][_0x712a('0x12')]);}logger['error'](_0x712a('0xb'),_0x43d65a,_0x2bbaab['error'][_0x712a('0x12')]);return _0xc703ca(_0x2bbaab['error']['message']);}else{logger[_0x712a('0xa')]('UserSmsQueue,\x20%s,\x20%s',_0x43d65a,_0x712a('0xc'));_0xc703ca(_0x2bbaab['result'][_0x712a('0x12')]);}})[_0x712a('0x13')](function(_0x1dd8c7){logger[_0x712a('0x10')]('UserSmsQueue,\x20%s,\x20%s',_0x43d65a,_0x1dd8c7);_0xd3461a(_0x1dd8c7);});});}
\ No newline at end of file
index c2408d8..d8d03c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x46ed=['Router','../../components/interaction/service','../../config/environment','multer','util','connect-timeout','express'];(function(_0x3b1705,_0x17bf2e){var _0x5157a3=function(_0x30f700){while(--_0x30f700){_0x3b1705['push'](_0x3b1705['shift']());}};_0x5157a3(++_0x17bf2e);}(_0x46ed,0x168));var _0xd46e=function(_0x178e48,_0x3c9509){_0x178e48=_0x178e48-0x0;var _0x440d7e=_0x46ed[_0x178e48];return _0x440d7e;};'use strict';var multer=require(_0xd46e('0x0'));var util=require(_0xd46e('0x1'));var path=require('path');var timeout=require(_0xd46e('0x2'));var express=require(_0xd46e('0x3'));var router=express[_0xd46e('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xd46e('0x5'));var config=require(_0xd46e('0x6'));module['exports']=router;
\ No newline at end of file
+var _0x5ae0=['../../components/interaction/service','../../config/environment','util','path','express','Router'];(function(_0x35e1e0,_0x3a479e){var _0x6f3e5b=function(_0x2bd443){while(--_0x2bd443){_0x35e1e0['push'](_0x35e1e0['shift']());}};_0x6f3e5b(++_0x3a479e);}(_0x5ae0,0xf8));var _0x05ae=function(_0xbcb7cf,_0x2b4d15){_0xbcb7cf=_0xbcb7cf-0x0;var _0x57953d=_0x5ae0[_0xbcb7cf];return _0x57953d;};'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 a87766f..af85746 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf1a8=['exports','sequelize'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xf1a8,0x103));var _0x8f1a=function(_0x41dd58,_0x4ec7f8){_0x41dd58=_0x41dd58-0x0;var _0x211021=_0xf1a8[_0x41dd58];return _0x211021;};'use strict';var Sequelize=require(_0x8f1a('0x0'));module[_0x8f1a('0x1')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
+var _0x8f15=['exports','sequelize'];(function(_0x271060,_0x3f86b1){var _0x40540b=function(_0x1735a7){while(--_0x1735a7){_0x271060['push'](_0x271060['shift']());}};_0x40540b(++_0x3f86b1);}(_0x8f15,0x123));var _0x58f1=function(_0x1a4a98,_0x4fe419){_0x1a4a98=_0x1a4a98-0x0;var _0x3845a6=_0x8f15[_0x1a4a98];return _0x3845a6;};'use strict';var Sequelize=require(_0x58f1('0x0'));module[_0x58f1('0x1')]={'penalty':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index cf0f45c..aef370f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa020=['UserVoiceQueue','lodash','util','../../config/logger','api','bluebird','request-promise','rimraf','./userVoiceQueue.attributes','define'];(function(_0x577cb6,_0x27d4d3){var _0x2dff64=function(_0x12e6b0){while(--_0x12e6b0){_0x577cb6['push'](_0x577cb6['shift']());}};_0x2dff64(++_0x27d4d3);}(_0xa020,0x1eb));var _0x0a02=function(_0x1558d1,_0x52cca6){_0x1558d1=_0x1558d1-0x0;var _0x5913bd=_0xa020[_0x1558d1];return _0x5913bd;};'use strict';var _=require(_0x0a02('0x0'));var util=require(_0x0a02('0x1'));var logger=require(_0x0a02('0x2'))(_0x0a02('0x3'));var moment=require('moment');var BPromise=require(_0x0a02('0x4'));var rp=require(_0x0a02('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x0a02('0x6'));var config=require('../../config/environment');var attributes=require(_0x0a02('0x7'));module['exports']=function(_0x5b9166,_0x18a4b9){return _0x5b9166[_0x0a02('0x8')](_0x0a02('0x9'),attributes,{'tableName':'user_has_voice_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe251=['./userVoiceQueue.attributes','exports','define','UserVoiceQueue','user_has_voice_queues','lodash','util','api','moment','bluebird','path','../../config/environment'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xe251,0x7d));var _0x1e25=function(_0x48d7aa,_0x52349c){_0x48d7aa=_0x48d7aa-0x0;var _0x138fc6=_0xe251[_0x48d7aa];return _0x138fc6;};'use strict';var _=require(_0x1e25('0x0'));var util=require(_0x1e25('0x1'));var logger=require('../../config/logger')(_0x1e25('0x2'));var moment=require(_0x1e25('0x3'));var BPromise=require(_0x1e25('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x1e25('0x5'));var rimraf=require('rimraf');var config=require(_0x1e25('0x6'));var attributes=require(_0x1e25('0x7'));module[_0x1e25('0x8')]=function(_0x1a63af,_0x3c72bc){return _0x1a63af[_0x1e25('0x9')](_0x1e25('0xa'),attributes,{'tableName':_0x1e25('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 7f3afe6..c169add 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5a96=['rpc','../../config/environment','client','http','request','then','info','UserVoiceQueue,\x20%s,\x20%s','debug','UserVoiceQueue,\x20%s,\x20%s,\x20%s','request\x20sent','error','message','result','catch','lodash','moment','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x4a750d,_0x3cbbe5){var _0x285da6=function(_0x1000d7){while(--_0x1000d7){_0x4a750d['push'](_0x4a750d['shift']());}};_0x285da6(++_0x3cbbe5);}(_0x5a96,0xcc));var _0x65a9=function(_0x237d51,_0x5382b0){_0x237d51=_0x237d51-0x0;var _0x4d3eb0=_0x5a96[_0x237d51];return _0x4d3eb0;};'use strict';var _=require(_0x65a9('0x0'));var util=require('util');var moment=require(_0x65a9('0x1'));var BPromise=require('bluebird');var rs=require(_0x65a9('0x2'));var fs=require('fs');var Redis=require(_0x65a9('0x3'));var db=require(_0x65a9('0x4'))['db'];var utils=require(_0x65a9('0x5'));var logger=require('../../config/logger')(_0x65a9('0x6'));var config=require(_0x65a9('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x65a9('0x8')][_0x65a9('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3a6b78,_0x4735cb,_0x1bebe6){return new BPromise(function(_0x593d4c,_0x1e7c05){return client[_0x65a9('0xa')](_0x3a6b78,_0x1bebe6)[_0x65a9('0xb')](function(_0x52e8b9){logger[_0x65a9('0xc')](_0x65a9('0xd'),_0x4735cb,'request\x20sent');logger[_0x65a9('0xe')](_0x65a9('0xf'),_0x4735cb,_0x65a9('0x10'),JSON['stringify'](_0x52e8b9));if(_0x52e8b9[_0x65a9('0x11')]){if(_0x52e8b9['error']['code']===0x1f4){logger[_0x65a9('0x11')](_0x65a9('0xd'),_0x4735cb,_0x52e8b9[_0x65a9('0x11')]['message']);return _0x1e7c05(_0x52e8b9['error']['message']);}logger[_0x65a9('0x11')]('UserVoiceQueue,\x20%s,\x20%s',_0x4735cb,_0x52e8b9[_0x65a9('0x11')][_0x65a9('0x12')]);return _0x593d4c(_0x52e8b9['error']['message']);}else{logger[_0x65a9('0xc')](_0x65a9('0xd'),_0x4735cb,_0x65a9('0x10'));_0x593d4c(_0x52e8b9[_0x65a9('0x13')][_0x65a9('0x12')]);}})[_0x65a9('0x14')](function(_0x328096){logger[_0x65a9('0x11')](_0x65a9('0xd'),_0x4735cb,_0x328096);_0x1e7c05(_0x328096);});});}
\ No newline at end of file
+var _0xec89=['client','http','then','info','UserVoiceQueue,\x20%s,\x20%s','request\x20sent','UserVoiceQueue,\x20%s,\x20%s,\x20%s','stringify','code','error','message','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x363319,_0x4fa1a1){var _0x182a62=function(_0x78f65b){while(--_0x78f65b){_0x363319['push'](_0x363319['shift']());}};_0x182a62(++_0x4fa1a1);}(_0xec89,0xbc));var _0x9ec8=function(_0x40423a,_0x3fd152){_0x40423a=_0x40423a-0x0;var _0x29c282=_0xec89[_0x40423a];return _0x29c282;};'use strict';var _=require(_0x9ec8('0x0'));var util=require('util');var moment=require(_0x9ec8('0x1'));var BPromise=require(_0x9ec8('0x2'));var rs=require(_0x9ec8('0x3'));var fs=require('fs');var Redis=require(_0x9ec8('0x4'));var db=require(_0x9ec8('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x9ec8('0x6'))(_0x9ec8('0x7'));var config=require(_0x9ec8('0x8'));var jayson=require(_0x9ec8('0x9'));var client=jayson[_0x9ec8('0xa')][_0x9ec8('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x390c50,_0x32ef19,_0x48283b){return new BPromise(function(_0x5f49a4,_0x2feefb){return client['request'](_0x390c50,_0x48283b)[_0x9ec8('0xc')](function(_0x587744){logger[_0x9ec8('0xd')](_0x9ec8('0xe'),_0x32ef19,_0x9ec8('0xf'));logger['debug'](_0x9ec8('0x10'),_0x32ef19,_0x9ec8('0xf'),JSON[_0x9ec8('0x11')](_0x587744));if(_0x587744['error']){if(_0x587744['error'][_0x9ec8('0x12')]===0x1f4){logger[_0x9ec8('0x13')](_0x9ec8('0xe'),_0x32ef19,_0x587744[_0x9ec8('0x13')][_0x9ec8('0x14')]);return _0x2feefb(_0x587744['error'][_0x9ec8('0x14')]);}logger[_0x9ec8('0x13')](_0x9ec8('0xe'),_0x32ef19,_0x587744[_0x9ec8('0x13')][_0x9ec8('0x14')]);return _0x5f49a4(_0x587744[_0x9ec8('0x13')][_0x9ec8('0x14')]);}else{logger[_0x9ec8('0xd')](_0x9ec8('0xe'),_0x32ef19,_0x9ec8('0xf'));_0x5f49a4(_0x587744['result'][_0x9ec8('0x14')]);}})[_0x9ec8('0x15')](function(_0x450801){logger[_0x9ec8('0x13')](_0x9ec8('0xe'),_0x32ef19,_0x450801);_0x2feefb(_0x450801);});});}
\ No newline at end of file
index b2f9944..da742ef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xba0d=['../../config/environment','exports','multer','path','connect-timeout','express','../../components/auth/service'];(function(_0x52f6a6,_0x4a0ef2){var _0x24dd30=function(_0x32bcb8){while(--_0x32bcb8){_0x52f6a6['push'](_0x52f6a6['shift']());}};_0x24dd30(++_0x4a0ef2);}(_0xba0d,0x8e));var _0xdba0=function(_0x6626d6,_0x3f947a){_0x6626d6=_0x6626d6-0x0;var _0x2eba08=_0xba0d[_0x6626d6];return _0x2eba08;};'use strict';var multer=require(_0xdba0('0x0'));var util=require('util');var path=require(_0xdba0('0x1'));var timeout=require(_0xdba0('0x2'));var express=require(_0xdba0('0x3'));var router=express['Router']();var auth=require(_0xdba0('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xdba0('0x5'));module[_0xdba0('0x6')]=router;
\ No newline at end of file
+var _0xabce=['../../components/interaction/service','../../config/environment','exports','multer','util','path','connect-timeout','express'];(function(_0x535470,_0x3767e2){var _0x3e10fc=function(_0x1adf4f){while(--_0x1adf4f){_0x535470['push'](_0x535470['shift']());}};_0x3e10fc(++_0x3767e2);}(_0xabce,0x103));var _0xeabc=function(_0x32d457,_0x1a39c9){_0x32d457=_0x32d457-0x0;var _0x338386=_0xabce[_0x32d457];return _0x338386;};'use strict';var multer=require(_0xeabc('0x0'));var util=require(_0xeabc('0x1'));var path=require(_0xeabc('0x2'));var timeout=require(_0xeabc('0x3'));var express=require(_0xeabc('0x4'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xeabc('0x5'));var config=require(_0xeabc('0x6'));module[_0xeabc('0x7')]=router;
\ No newline at end of file
index 395a4e0..de19763 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7b07=['queue_interface','Required\x20by\x20Asterisk','sequelize','exports','INTEGER','STRING'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x7b07,0x86));var _0x77b0=function(_0x27af45,_0x1b57aa){_0x27af45=_0x27af45-0x0;var _0x18df21=_0x7b07[_0x27af45];return _0x18df21;};'use strict';var Sequelize=require(_0x77b0('0x0'));module[_0x77b0('0x1')]={'uniqueid':{'type':Sequelize[_0x77b0('0x2')],'primaryKey':!![],'autoIncrement':!![],'comment':'Required\x20by\x20Asterisk'},'membername':{'type':Sequelize[_0x77b0('0x3')],'allowNull':![],'comment':'Required\x20by\x20Asterisk'},'UserId':{'type':Sequelize[_0x77b0('0x2')],'allowNull':![]},'queue_name':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0x77b0('0x4'),'comment':_0x77b0('0x5')},'VoiceQueueId':{'type':Sequelize[_0x77b0('0x2')],'allowNull':![]},'interface':{'type':Sequelize[_0x77b0('0x3')],'allowNull':![],'unique':_0x77b0('0x4'),'comment':_0x77b0('0x5')},'penalty':{'type':Sequelize[_0x77b0('0x2')](0xb),'defaultValue':0x0,'comment':_0x77b0('0x5')},'paused':{'type':Sequelize[_0x77b0('0x2')](0xb),'defaultValue':0x0,'comment':_0x77b0('0x5')}};
\ No newline at end of file
+var _0xd5db=['exports','INTEGER','Required\x20by\x20Asterisk','STRING','queue_interface','sequelize'];(function(_0x51aeea,_0x33e1a0){var _0x526090=function(_0x5e5a3c){while(--_0x5e5a3c){_0x51aeea['push'](_0x51aeea['shift']());}};_0x526090(++_0x33e1a0);}(_0xd5db,0x19d));var _0xbd5d=function(_0x20589d,_0x55d5bf){_0x20589d=_0x20589d-0x0;var _0x422de9=_0xd5db[_0x20589d];return _0x422de9;};'use strict';var Sequelize=require(_0xbd5d('0x0'));module[_0xbd5d('0x1')]={'uniqueid':{'type':Sequelize[_0xbd5d('0x2')],'primaryKey':!![],'autoIncrement':!![],'comment':_0xbd5d('0x3')},'membername':{'type':Sequelize[_0xbd5d('0x4')],'allowNull':![],'comment':_0xbd5d('0x3')},'UserId':{'type':Sequelize[_0xbd5d('0x2')],'allowNull':![]},'queue_name':{'type':Sequelize[_0xbd5d('0x4')],'allowNull':![],'unique':_0xbd5d('0x5'),'comment':_0xbd5d('0x3')},'VoiceQueueId':{'type':Sequelize[_0xbd5d('0x2')],'allowNull':![]},'interface':{'type':Sequelize[_0xbd5d('0x4')],'allowNull':![],'unique':_0xbd5d('0x5'),'comment':_0xbd5d('0x3')},'penalty':{'type':Sequelize[_0xbd5d('0x2')](0xb),'defaultValue':0x0,'comment':_0xbd5d('0x3')},'paused':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0,'comment':_0xbd5d('0x3')}};
\ No newline at end of file
index 4937e15..28bcb6f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x896e=['remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','UserVoiceQueueRt','setMaxListeners','save','update'];(function(_0xd9d50e,_0x47fd33){var _0x140271=function(_0x2f253a){while(--_0x2f253a){_0xd9d50e['push'](_0xd9d50e['shift']());}};_0x140271(++_0x47fd33);}(_0x896e,0x1e9));var _0xe896=function(_0x1d9e3e,_0x2b5404){_0x1d9e3e=_0x1d9e3e-0x0;var _0x4135a0=_0x896e[_0x1d9e3e];return _0x4135a0;};'use strict';var EventEmitter=require(_0xe896('0x0'));var UserVoiceQueueRt=require(_0xe896('0x1'))['db'][_0xe896('0x2')];var UserVoiceQueueRtEvents=new EventEmitter();UserVoiceQueueRtEvents[_0xe896('0x3')](0x0);var events={'afterCreate':_0xe896('0x4'),'afterUpdate':_0xe896('0x5'),'afterDestroy':_0xe896('0x6')};function emitEvent(_0x463f56){return function(_0x3f85e5,_0x2d3521,_0x244f68){UserVoiceQueueRtEvents[_0xe896('0x7')](_0x463f56+':'+_0x3f85e5['id'],_0x3f85e5);UserVoiceQueueRtEvents['emit'](_0x463f56,_0x3f85e5);_0x244f68(null);};}for(var e in events){if(events[_0xe896('0x8')](e)){var event=events[e];UserVoiceQueueRt[_0xe896('0x9')](e,emitEvent(event));}}module[_0xe896('0xa')]=UserVoiceQueueRtEvents;
\ No newline at end of file
+var _0x14a0=['setMaxListeners','save','update','remove','emit','exports','../../mysqldb','UserVoiceQueueRt'];(function(_0x3951d1,_0x5e6ec1){var _0x15bfc3=function(_0x22c70e){while(--_0x22c70e){_0x3951d1['push'](_0x3951d1['shift']());}};_0x15bfc3(++_0x5e6ec1);}(_0x14a0,0x8e));var _0x014a=function(_0x483882,_0xa3ee97){_0x483882=_0x483882-0x0;var _0x1ce74d=_0x14a0[_0x483882];return _0x1ce74d;};'use strict';var EventEmitter=require('events');var UserVoiceQueueRt=require(_0x014a('0x0'))['db'][_0x014a('0x1')];var UserVoiceQueueRtEvents=new EventEmitter();UserVoiceQueueRtEvents[_0x014a('0x2')](0x0);var events={'afterCreate':_0x014a('0x3'),'afterUpdate':_0x014a('0x4'),'afterDestroy':_0x014a('0x5')};function emitEvent(_0xb2d36a){return function(_0x521a59,_0x57a522,_0x1730a5){UserVoiceQueueRtEvents[_0x014a('0x6')](_0xb2d36a+':'+_0x521a59['id'],_0x521a59);UserVoiceQueueRtEvents[_0x014a('0x6')](_0xb2d36a,_0x521a59);_0x1730a5(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];UserVoiceQueueRt['hook'](e,emitEvent(event));}}module[_0x014a('0x7')]=UserVoiceQueueRtEvents;
\ No newline at end of file
index d829a30..0b5915c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x13b8=['UserVoiceQueueRt','lodash','api','request-promise','rimraf','../../config/environment','exports','define'];(function(_0x3837f7,_0x1f0871){var _0x1cdd01=function(_0x37e9c7){while(--_0x37e9c7){_0x3837f7['push'](_0x3837f7['shift']());}};_0x1cdd01(++_0x1f0871);}(_0x13b8,0x149));var _0x813b=function(_0x754ab4,_0x56daa7){_0x754ab4=_0x754ab4-0x0;var _0x34079a=_0x13b8[_0x754ab4];return _0x34079a;};'use strict';var _=require(_0x813b('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x813b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x813b('0x2'));var fs=require('fs');var path=require('path');var rimraf=require(_0x813b('0x3'));var config=require(_0x813b('0x4'));var attributes=require('./userVoiceQueueRt.attributes');module[_0x813b('0x5')]=function(_0x547907,_0x4c8770){return _0x547907[_0x813b('0x6')](_0x813b('0x7'),attributes,{'tableName':'user_has_voice_queues_rt','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe49f=['UserVoiceQueueRt','user_has_voice_queues_rt','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','./userVoiceQueueRt.attributes','define'];(function(_0x17875c,_0x20f12f){var _0x9b46ef=function(_0x392c25){while(--_0x392c25){_0x17875c['push'](_0x17875c['shift']());}};_0x9b46ef(++_0x20f12f);}(_0xe49f,0x113));var _0xfe49=function(_0x28e892,_0x20e7db){_0x28e892=_0x28e892-0x0;var _0xc51701=_0xe49f[_0x28e892];return _0xc51701;};'use strict';var _=require(_0xfe49('0x0'));var util=require(_0xfe49('0x1'));var logger=require(_0xfe49('0x2'))(_0xfe49('0x3'));var moment=require(_0xfe49('0x4'));var BPromise=require(_0xfe49('0x5'));var rp=require(_0xfe49('0x6'));var fs=require('fs');var path=require(_0xfe49('0x7'));var rimraf=require(_0xfe49('0x8'));var config=require('../../config/environment');var attributes=require(_0xfe49('0x9'));module['exports']=function(_0x34d7e0,_0x5da231){return _0x34d7e0[_0xfe49('0xa')](_0xfe49('0xb'),attributes,{'tableName':_0xfe49('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6f0a8fd..a706407 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x647b=['request\x20sent','debug','stringify','error','code','message','result','catch','UserVoiceQueueRt','options','raw','where','sequelize','COUNT','literal','`paused`\x20=\x201,\x201,\x20null','outboundQueuePauses','then','GetVoiceQueueRtPauses','lodash','util','bluebird','randomstring','ioredis','../../config/logger','../../config/environment','client','http','redis','defaults','socket.io-emitter','./userVoiceQueueRt.socket','request','info','UserVoiceQueueRt,\x20%s,\x20%s'];(function(_0x47ab10,_0x41e4e2){var _0x76b2dd=function(_0x5211ec){while(--_0x5211ec){_0x47ab10['push'](_0x47ab10['shift']());}};_0x76b2dd(++_0x41e4e2);}(_0x647b,0x1b7));var _0xb647=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x647b[_0x3b380d];return _0x54502b;};'use strict';var _=require(_0xb647('0x0'));var util=require(_0xb647('0x1'));var moment=require('moment');var BPromise=require(_0xb647('0x2'));var rs=require(_0xb647('0x3'));var fs=require('fs');var Redis=require(_0xb647('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xb647('0x5'))('rpc');var config=require(_0xb647('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xb647('0x7')][_0xb647('0x8')]({'port':0x232a});config[_0xb647('0x9')]=_[_0xb647('0xa')](config[_0xb647('0x9')],{'host':'localhost','port':0x18eb});var socket=require(_0xb647('0xb'))(new Redis(config[_0xb647('0x9')]));require(_0xb647('0xc'))['register'](socket);function respondWithRpcPromise(_0x4512c0,_0x145de3,_0x2c72a3){return new BPromise(function(_0x5a7781,_0x549194){return client[_0xb647('0xd')](_0x4512c0,_0x2c72a3)['then'](function(_0x5037cf){logger[_0xb647('0xe')](_0xb647('0xf'),_0x145de3,_0xb647('0x10'));logger[_0xb647('0x11')]('UserVoiceQueueRt,\x20%s,\x20%s,\x20%s',_0x145de3,_0xb647('0x10'),JSON[_0xb647('0x12')](_0x5037cf));if(_0x5037cf[_0xb647('0x13')]){if(_0x5037cf[_0xb647('0x13')][_0xb647('0x14')]===0x1f4){logger[_0xb647('0x13')](_0xb647('0xf'),_0x145de3,_0x5037cf[_0xb647('0x13')][_0xb647('0x15')]);return _0x549194(_0x5037cf[_0xb647('0x13')][_0xb647('0x15')]);}logger[_0xb647('0x13')](_0xb647('0xf'),_0x145de3,_0x5037cf[_0xb647('0x13')][_0xb647('0x15')]);return _0x5a7781(_0x5037cf[_0xb647('0x13')][_0xb647('0x15')]);}else{logger['info']('UserVoiceQueueRt,\x20%s,\x20%s',_0x145de3,_0xb647('0x10'));_0x5a7781(_0x5037cf[_0xb647('0x16')][_0xb647('0x15')]);}})[_0xb647('0x17')](function(_0x4d326b){logger['error'](_0xb647('0xf'),_0x145de3,_0x4d326b);_0x549194(_0x4d326b);});});}exports['GetVoiceQueueRtPauses']=function(_0x2a322a){var _0x189d22=this;return new Promise(function(_0x56846f,_0x2423d8){return db[_0xb647('0x18')]['findAll']({'raw':_0x2a322a[_0xb647('0x19')]?_0x2a322a['options'][_0xb647('0x1a')]===undefined?!![]:![]:!![],'where':_0x2a322a[_0xb647('0x19')]?_0x2a322a[_0xb647('0x19')][_0xb647('0x1b')]||null:null,'attributes':[[db[_0xb647('0x1c')]['fn'](_0xb647('0x1d'),db[_0xb647('0x1c')]['fn']('IF',db[_0xb647('0x1c')][_0xb647('0x1e')](_0xb647('0x1f')))),_0xb647('0x20')]]})[_0xb647('0x21')](function(_0x192c7b){logger['info'](_0xb647('0x22'),_0x2a322a);logger['debug'](_0xb647('0x22'),_0x2a322a,JSON[_0xb647('0x12')](_0x192c7b));_0x56846f(_0x192c7b);})[_0xb647('0x17')](function(_0x2c728){logger[_0xb647('0x13')]('GetVoiceQueueRtPauses',_0x2c728[_0xb647('0x15')],_0x2a322a);_0x2423d8(_0x189d22['error'](0x1f4,_0x2c728[_0xb647('0x15')]));});});};
\ No newline at end of file
+var _0xc181=['util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','jayson/promise','http','redis','defaults','localhost','socket.io-emitter','./userVoiceQueueRt.socket','register','request','then','UserVoiceQueueRt,\x20%s,\x20%s','request\x20sent','debug','UserVoiceQueueRt,\x20%s,\x20%s,\x20%s','stringify','code','error','message','info','catch','GetVoiceQueueRtPauses','UserVoiceQueueRt','findAll','options','raw','where','sequelize','literal','`paused`\x20=\x201,\x201,\x20null','outboundQueuePauses','lodash'];(function(_0x4ef384,_0x412bb4){var _0x24f973=function(_0x8491e4){while(--_0x8491e4){_0x4ef384['push'](_0x4ef384['shift']());}};_0x24f973(++_0x412bb4);}(_0xc181,0x12f));var _0x1c18=function(_0xb3b452,_0x582e8e){_0xb3b452=_0xb3b452-0x0;var _0x238983=_0xc181[_0xb3b452];return _0x238983;};'use strict';var _=require(_0x1c18('0x0'));var util=require(_0x1c18('0x1'));var moment=require(_0x1c18('0x2'));var BPromise=require(_0x1c18('0x3'));var rs=require(_0x1c18('0x4'));var fs=require('fs');var Redis=require(_0x1c18('0x5'));var db=require(_0x1c18('0x6'))['db'];var utils=require(_0x1c18('0x7'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0x1c18('0x8'));var client=jayson['client'][_0x1c18('0x9')]({'port':0x232a});config[_0x1c18('0xa')]=_[_0x1c18('0xb')](config[_0x1c18('0xa')],{'host':_0x1c18('0xc'),'port':0x18eb});var socket=require(_0x1c18('0xd'))(new Redis(config[_0x1c18('0xa')]));require(_0x1c18('0xe'))[_0x1c18('0xf')](socket);function respondWithRpcPromise(_0x576826,_0x4319a5,_0x5253a7){return new BPromise(function(_0x4d0563,_0x479214){return client[_0x1c18('0x10')](_0x576826,_0x5253a7)[_0x1c18('0x11')](function(_0x1ec7ab){logger['info'](_0x1c18('0x12'),_0x4319a5,_0x1c18('0x13'));logger[_0x1c18('0x14')](_0x1c18('0x15'),_0x4319a5,_0x1c18('0x13'),JSON[_0x1c18('0x16')](_0x1ec7ab));if(_0x1ec7ab['error']){if(_0x1ec7ab['error'][_0x1c18('0x17')]===0x1f4){logger[_0x1c18('0x18')](_0x1c18('0x12'),_0x4319a5,_0x1ec7ab[_0x1c18('0x18')][_0x1c18('0x19')]);return _0x479214(_0x1ec7ab[_0x1c18('0x18')][_0x1c18('0x19')]);}logger[_0x1c18('0x18')](_0x1c18('0x12'),_0x4319a5,_0x1ec7ab[_0x1c18('0x18')][_0x1c18('0x19')]);return _0x4d0563(_0x1ec7ab[_0x1c18('0x18')]['message']);}else{logger[_0x1c18('0x1a')](_0x1c18('0x12'),_0x4319a5,_0x1c18('0x13'));_0x4d0563(_0x1ec7ab['result'][_0x1c18('0x19')]);}})[_0x1c18('0x1b')](function(_0x483564){logger['error'](_0x1c18('0x12'),_0x4319a5,_0x483564);_0x479214(_0x483564);});});}exports[_0x1c18('0x1c')]=function(_0x4acc28){var _0x46e47e=this;return new Promise(function(_0x56ed57,_0x25f362){return db[_0x1c18('0x1d')][_0x1c18('0x1e')]({'raw':_0x4acc28['options']?_0x4acc28[_0x1c18('0x1f')][_0x1c18('0x20')]===undefined?!![]:![]:!![],'where':_0x4acc28[_0x1c18('0x1f')]?_0x4acc28['options'][_0x1c18('0x21')]||null:null,'attributes':[[db[_0x1c18('0x22')]['fn']('COUNT',db[_0x1c18('0x22')]['fn']('IF',db[_0x1c18('0x22')][_0x1c18('0x23')](_0x1c18('0x24')))),_0x1c18('0x25')]]})[_0x1c18('0x11')](function(_0x4f0f2f){logger[_0x1c18('0x1a')](_0x1c18('0x1c'),_0x4acc28);logger[_0x1c18('0x14')](_0x1c18('0x1c'),_0x4acc28,JSON[_0x1c18('0x16')](_0x4f0f2f));_0x56ed57(_0x4f0f2f);})['catch'](function(_0x8d4c5e){logger[_0x1c18('0x18')](_0x1c18('0x1c'),_0x8d4c5e['message'],_0x4acc28);_0x25f362(_0x46e47e[_0x1c18('0x18')](0x1f4,_0x8d4c5e[_0x1c18('0x19')]));});});};
\ No newline at end of file
index ea00955..7b11f1b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7fbe=['length','userVoiceQueueRt:','remove','update','emit','removeListener','register'];(function(_0x23451d,_0x1adf90){var _0x176ffd=function(_0x1b3f78){while(--_0x1b3f78){_0x23451d['push'](_0x23451d['shift']());}};_0x176ffd(++_0x1adf90);}(_0x7fbe,0x1ec));var _0xe7fb=function(_0x4e8022,_0x53229d){_0x4e8022=_0x4e8022-0x0;var _0xf5e73f=_0x7fbe[_0x4e8022];return _0xf5e73f;};'use strict';var UserVoiceQueueRtEvents=require('./userVoiceQueueRt.events');var events=['save',_0xe7fb('0x0'),_0xe7fb('0x1')];function createListener(_0x294c21,_0x1703d5){return function(_0x517d3a){_0x1703d5[_0xe7fb('0x2')](_0x294c21,_0x517d3a);};}function removeListener(_0x11d2c4,_0x4524ff){return function(){UserVoiceQueueRtEvents[_0xe7fb('0x3')](_0x11d2c4,_0x4524ff);};}exports[_0xe7fb('0x4')]=function(_0x290172){for(var _0x12d1b0=0x0,_0x24cd67=events[_0xe7fb('0x5')];_0x12d1b0<_0x24cd67;_0x12d1b0++){var _0x5ad75b=events[_0x12d1b0];var _0x213ebc=createListener(_0xe7fb('0x6')+_0x5ad75b,_0x290172);UserVoiceQueueRtEvents['on'](_0x5ad75b,_0x213ebc);}};
\ No newline at end of file
+var _0xca9e=['remove','update','emit','removeListener','register','length','./userVoiceQueueRt.events','save'];(function(_0x401d67,_0xeb1592){var _0x25076b=function(_0x233577){while(--_0x233577){_0x401d67['push'](_0x401d67['shift']());}};_0x25076b(++_0xeb1592);}(_0xca9e,0x136));var _0xeca9=function(_0x1658fb,_0xba67b){_0x1658fb=_0x1658fb-0x0;var _0x2dc0ad=_0xca9e[_0x1658fb];return _0x2dc0ad;};'use strict';var UserVoiceQueueRtEvents=require(_0xeca9('0x0'));var events=[_0xeca9('0x1'),_0xeca9('0x2'),_0xeca9('0x3')];function createListener(_0x2df937,_0x1443e3){return function(_0x8dbabb){_0x1443e3[_0xeca9('0x4')](_0x2df937,_0x8dbabb);};}function removeListener(_0x1b2864,_0x1e0a18){return function(){UserVoiceQueueRtEvents[_0xeca9('0x5')](_0x1b2864,_0x1e0a18);};}exports[_0xeca9('0x6')]=function(_0x186a47){for(var _0x305dc5=0x0,_0x483e41=events[_0xeca9('0x7')];_0x305dc5<_0x483e41;_0x305dc5++){var _0x1774f3=events[_0x305dc5];var _0x4d57ee=createListener('userVoiceQueueRt:'+_0x1774f3,_0x186a47);UserVoiceQueueRtEvents['on'](_0x1774f3,_0x4d57ee);}};
\ No newline at end of file
index 0787c58..92b446e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x13f6=['delete','destroy','exports','multer','util','express','Router','../../components/auth/service','../../config/environment','./variable.controller','get','index','isAuthenticated','create','put','/:id','update'];(function(_0x569892,_0x2512dd){var _0x405943=function(_0x1ecd9d){while(--_0x1ecd9d){_0x569892['push'](_0x569892['shift']());}};_0x405943(++_0x2512dd);}(_0x13f6,0x124));var _0x613f=function(_0x4042cd,_0x46d04f){_0x4042cd=_0x4042cd-0x0;var _0x4d59df=_0x13f6[_0x4042cd];return _0x4d59df;};'use strict';var multer=require(_0x613f('0x0'));var util=require(_0x613f('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x613f('0x2'));var router=express[_0x613f('0x3')]();var auth=require(_0x613f('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x613f('0x5'));var controller=require(_0x613f('0x6'));router[_0x613f('0x7')]('/',auth['isAuthenticated'](),controller[_0x613f('0x8')]);router[_0x613f('0x7')]('/:id',auth['isAuthenticated'](),controller['show']);router['post']('/',auth[_0x613f('0x9')](),controller[_0x613f('0xa')]);router[_0x613f('0xb')](_0x613f('0xc'),auth['isAuthenticated'](),controller[_0x613f('0xd')]);router[_0x613f('0xe')](_0x613f('0xc'),auth['isAuthenticated'](),controller[_0x613f('0xf')]);module[_0x613f('0x10')]=router;
\ No newline at end of file
+var _0xe706=['update','delete','destroy','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./variable.controller','get','isAuthenticated','index','/:id','show','post','create','put'];(function(_0x5ac1e5,_0x4b5012){var _0x1bccc6=function(_0x102562){while(--_0x102562){_0x5ac1e5['push'](_0x5ac1e5['shift']());}};_0x1bccc6(++_0x4b5012);}(_0xe706,0xa3));var _0x6e70=function(_0x495c52,_0x53c0cc){_0x495c52=_0x495c52-0x0;var _0x2b4bb2=_0xe706[_0x495c52];return _0x2b4bb2;};'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('0xe')]('/',auth[_0x6e70('0xa')](),controller[_0x6e70('0xf')]);router[_0x6e70('0x10')](_0x6e70('0xc'),auth[_0x6e70('0xa')](),controller[_0x6e70('0x11')]);router[_0x6e70('0x12')](_0x6e70('0xc'),auth[_0x6e70('0xa')](),controller[_0x6e70('0x13')]);module['exports']=router;
\ No newline at end of file
index bfee0aa..a81e8f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbfe8=['exports','name','STRING'];(function(_0x1936ce,_0xdb3cdb){var _0x4a381c=function(_0x329611){while(--_0x329611){_0x1936ce['push'](_0x1936ce['shift']());}};_0x4a381c(++_0xdb3cdb);}(_0xbfe8,0x1b9));var _0x8bfe=function(_0x279ebe,_0x596a29){_0x279ebe=_0x279ebe-0x0;var _0x397e6d=_0xbfe8[_0x279ebe];return _0x397e6d;};'use strict';var Sequelize=require('sequelize');module[_0x8bfe('0x0')]={'name':{'type':Sequelize['STRING'],'unique':_0x8bfe('0x1'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x8bfe('0x2')]}};
\ No newline at end of file
+var _0x7278=['name','sequelize','exports','STRING'];(function(_0x7275e9,_0x321fa5){var _0x17b99d=function(_0x54af41){while(--_0x54af41){_0x7275e9['push'](_0x7275e9['shift']());}};_0x17b99d(++_0x321fa5);}(_0x7278,0x161));var _0x8727=function(_0x28468e,_0x28c916){_0x28468e=_0x28468e-0x0;var _0x3b1c1c=_0x7278[_0x28468e];return _0x3b1c1c;};'use strict';var Sequelize=require(_0x8727('0x0'));module[_0x8727('0x1')]={'name':{'type':Sequelize[_0x8727('0x2')],'unique':_0x8727('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x8727('0x2')]}};
\ No newline at end of file
index 2699b87..8d8714f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5133=['includeAll','include','findAll','rows','show','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','find','autoAssociation','catch','params','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','path','ejs','crypto','jsforce','to-csv','querystring','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','limit','set','Content-Range','apply','save','update','then','get','Variables','UserProfileResource','destroy','end','error','stack','name','send','Variable','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','offset','order','sort','where','pick','filter','merge','map','VIRTUAL','field','options'];(function(_0x4740ff,_0x7d08c6){var _0x1ba522=function(_0x2c782f){while(--_0x2c782f){_0x4740ff['push'](_0x4740ff['shift']());}};_0x1ba522(++_0x7d08c6);}(_0x5133,0x185));var _0x3513=function(_0xb8272d,_0x1c5d5a){_0xb8272d=_0xb8272d-0x0;var _0x32d015=_0x5133[_0xb8272d];return _0x32d015;};'use strict';var pdf=require(_0x3513('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x3513('0x1'));var zipdir=require(_0x3513('0x2'));var jsonpatch=require(_0x3513('0x3'));var rp=require('request-promise');var moment=require(_0x3513('0x4'));var BPromise=require(_0x3513('0x5'));var Mustache=require(_0x3513('0x6'));var util=require('util');var path=require(_0x3513('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x3513('0x8'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x3513('0x9'));var jsforce=require(_0x3513('0xa'));var deskjs=require('desk.js');var toCsv=require(_0x3513('0xb'));var querystring=require(_0x3513('0xc'));var Papa=require('papaparse');var Redis=require(_0x3513('0xd'));var authService=require('../../components/auth/service');var qs=require(_0x3513('0xe'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x3513('0xf'))('api');var utils=require(_0x3513('0x10'));var config=require(_0x3513('0x11'));var db=require(_0x3513('0x12'))['db'];function respondWithStatusCode(_0xc39884,_0x5f3aec){_0x5f3aec=_0x5f3aec||0xcc;return function(_0x41a86c){if(_0x41a86c){return _0xc39884[_0x3513('0x13')](_0x5f3aec);}return _0xc39884[_0x3513('0x14')](_0x5f3aec)['end']();};}function respondWithResult(_0x4e1b0c,_0x5ae6a4){_0x5ae6a4=_0x5ae6a4||0xc8;return function(_0x15e2a2){if(_0x15e2a2){return _0x4e1b0c[_0x3513('0x14')](_0x5ae6a4)[_0x3513('0x15')](_0x15e2a2);}};}function respondWithFilteredResult(_0x60c31b,_0x123ccc){return function(_0x1b460a){if(_0x1b460a){var _0x34ae91=_0x1b460a['count'],_0x45af6e=_0x123ccc['offset'],_0x331c66=_0x123ccc['offset']+_0x123ccc[_0x3513('0x16')],_0x59986d;if(_0x331c66>=_0x34ae91){_0x331c66=_0x34ae91;_0x59986d=0xc8;}else{_0x59986d=0xce;}_0x60c31b['status'](_0x59986d);return _0x60c31b[_0x3513('0x17')](_0x3513('0x18'),_0x45af6e+'-'+_0x331c66+'/'+_0x34ae91)[_0x3513('0x15')](_0x1b460a);}return null;};}function patchUpdates(_0x56d4fc){return function(_0x77623){try{jsonpatch[_0x3513('0x19')](_0x77623,_0x56d4fc,!![]);}catch(_0x397343){return BPromise['reject'](_0x397343);}return _0x77623[_0x3513('0x1a')]();};}function saveUpdates(_0x37e4bd,_0x2f0512){return function(_0x152e24){if(_0x152e24){return _0x152e24[_0x3513('0x1b')](_0x37e4bd)[_0x3513('0x1c')](function(_0x272732){return _0x272732;});}return null;};}function removeEntity(_0x3e48df,_0x3be9d3){return function(_0x3cd1ec){if(_0x3cd1ec){return _0x3cd1ec['destroy']()[_0x3513('0x1c')](function(){var _0x1a430e=_0x3cd1ec[_0x3513('0x1d')]({'plain':!![]});var _0x1750ea=_0x3513('0x1e');return db[_0x3513('0x1f')][_0x3513('0x20')]({'where':{'type':_0x1750ea,'resourceId':_0x1a430e['id']}})[_0x3513('0x1c')](function(){return _0x3cd1ec;});})[_0x3513('0x1c')](function(){_0x3e48df[_0x3513('0x14')](0xcc)[_0x3513('0x21')]();});}};}function handleEntityNotFound(_0x3e8993,_0x59fba8){return function(_0x5c3b0b){if(!_0x5c3b0b){_0x3e8993['sendStatus'](0x194);}return _0x5c3b0b;};}function handleError(_0x433580,_0x315f93){_0x315f93=_0x315f93||0x1f4;return function(_0x15afbc){logger[_0x3513('0x22')](_0x15afbc[_0x3513('0x23')]);if(_0x15afbc[_0x3513('0x24')]){delete _0x15afbc[_0x3513('0x24')];}_0x433580[_0x3513('0x14')](_0x315f93)[_0x3513('0x25')](_0x15afbc);};}exports['index']=function(_0x3a4429,_0x3789d7){var _0x32d0e2={},_0x253b01={},_0x196b7f={'count':0x0,'rows':[]};var _0x5afbde=db[_0x3513('0x26')][_0x3513('0x27')];_0x253b01[_0x3513('0x28')]=_['keys'](_0x5afbde);_0x253b01[_0x3513('0x29')]=_[_0x3513('0x2a')](_0x3a4429[_0x3513('0x29')]);_0x253b01[_0x3513('0x2b')]=_[_0x3513('0x2c')](_0x253b01['model'],_0x253b01['query']);_0x32d0e2[_0x3513('0x2d')]=_[_0x3513('0x2c')](_0x253b01[_0x3513('0x28')],qs[_0x3513('0x2e')](_0x3a4429[_0x3513('0x29')]['fields']));_0x32d0e2['attributes']=_0x32d0e2['attributes'][_0x3513('0x2f')]?_0x32d0e2[_0x3513('0x2d')]:_0x253b01[_0x3513('0x28')];if(!_0x3a4429[_0x3513('0x29')][_0x3513('0x30')](_0x3513('0x31'))){_0x32d0e2[_0x3513('0x16')]=qs['limit'](_0x3a4429[_0x3513('0x29')][_0x3513('0x16')]);_0x32d0e2[_0x3513('0x32')]=qs[_0x3513('0x32')](_0x3a4429[_0x3513('0x29')][_0x3513('0x32')]);}_0x32d0e2[_0x3513('0x33')]=qs[_0x3513('0x34')](_0x3a4429[_0x3513('0x29')]['sort']);_0x32d0e2[_0x3513('0x35')]=qs['filters'](_[_0x3513('0x36')](_0x3a4429['query'],_0x253b01['filters']));if(_0x3a4429[_0x3513('0x29')][_0x3513('0x37')]){_0x32d0e2[_0x3513('0x35')]=_[_0x3513('0x38')](_0x32d0e2[_0x3513('0x35')],{'$or':_[_0x3513('0x39')](_0x5afbde,function(_0x427fed){if(_0x427fed['type']['key']!==_0x3513('0x3a')){var _0x29ed2f={};_0x29ed2f[_0x427fed[_0x3513('0x3b')]]={'$like':'%'+_0x3a4429[_0x3513('0x29')][_0x3513('0x37')]+'%'};return _0x29ed2f;}})});}_0x32d0e2=_[_0x3513('0x38')]({},_0x32d0e2,_0x3a4429[_0x3513('0x3c')]);var _0x53268c={'where':_0x32d0e2[_0x3513('0x35')]};return db['Variable']['count'](_0x53268c)[_0x3513('0x1c')](function(_0x3501b5){_0x196b7f['count']=_0x3501b5;if(_0x3a4429['query'][_0x3513('0x3d')]){_0x32d0e2[_0x3513('0x3e')]=[{'all':!![]}];}return db[_0x3513('0x26')][_0x3513('0x3f')](_0x32d0e2);})[_0x3513('0x1c')](function(_0x32de3c){_0x196b7f[_0x3513('0x40')]=_0x32de3c;return _0x196b7f;})[_0x3513('0x1c')](respondWithFilteredResult(_0x3789d7,_0x32d0e2))['catch'](handleError(_0x3789d7,null));};exports[_0x3513('0x41')]=function(_0x5d4691,_0x4d3cfd){var _0x2df8b5={'raw':!![],'where':{'id':_0x5d4691['params']['id']}},_0x5992ca={};_0x5992ca[_0x3513('0x28')]=_[_0x3513('0x2a')](db[_0x3513('0x26')]['rawAttributes']);_0x5992ca['query']=_[_0x3513('0x2a')](_0x5d4691[_0x3513('0x29')]);_0x5992ca[_0x3513('0x2b')]=_[_0x3513('0x2c')](_0x5992ca['model'],_0x5992ca[_0x3513('0x29')]);_0x2df8b5[_0x3513('0x2d')]=_[_0x3513('0x2c')](_0x5992ca['model'],qs[_0x3513('0x2e')](_0x5d4691[_0x3513('0x29')][_0x3513('0x2e')]));_0x2df8b5[_0x3513('0x2d')]=_0x2df8b5[_0x3513('0x2d')]['length']?_0x2df8b5[_0x3513('0x2d')]:_0x5992ca[_0x3513('0x28')];if(_0x5d4691[_0x3513('0x29')][_0x3513('0x3d')]){_0x2df8b5[_0x3513('0x3e')]=[{'all':!![]}];}_0x2df8b5=_[_0x3513('0x38')]({},_0x2df8b5,_0x5d4691[_0x3513('0x3c')]);return db[_0x3513('0x26')]['find'](_0x2df8b5)[_0x3513('0x1c')](handleEntityNotFound(_0x4d3cfd,null))['then'](respondWithResult(_0x4d3cfd,null))['catch'](handleError(_0x4d3cfd,null));};exports[_0x3513('0x42')]=function(_0x121766,_0x394a8e){return db[_0x3513('0x26')][_0x3513('0x42')](_0x121766[_0x3513('0x43')],{})[_0x3513('0x1c')](function(_0x286903){var _0x479d63=_0x121766[_0x3513('0x44')][_0x3513('0x1d')]({'plain':!![]});if(!_0x479d63)throw new Error(_0x3513('0x45'));if(_0x479d63[_0x3513('0x46')]===_0x3513('0x44')){var _0xbc3489=_0x286903['get']({'plain':!![]});var _0x1e1b07=_0x3513('0x1e');return db['UserProfileSection'][_0x3513('0x47')]({'where':{'name':_0x1e1b07,'userProfileId':_0x479d63['userProfileId']},'raw':!![]})[_0x3513('0x1c')](function(_0x31e66d){if(_0x31e66d&&_0x31e66d[_0x3513('0x48')]===0x0){return db[_0x3513('0x1f')][_0x3513('0x42')]({'name':_0xbc3489[_0x3513('0x24')],'resourceId':_0xbc3489['id'],'type':_0x31e66d['name'],'sectionId':_0x31e66d['id']},{})[_0x3513('0x1c')](function(){return _0x286903;});}else{return _0x286903;}})['catch'](function(_0x29552f){logger[_0x3513('0x22')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x29552f);throw _0x29552f;});}return _0x286903;})['then'](respondWithResult(_0x394a8e,0xc9))[_0x3513('0x49')](handleError(_0x394a8e,null));};exports[_0x3513('0x1b')]=function(_0x2e9b49,_0x33517d){if(_0x2e9b49[_0x3513('0x43')]['id']){delete _0x2e9b49[_0x3513('0x43')]['id'];}return db[_0x3513('0x26')]['find']({'where':{'id':_0x2e9b49[_0x3513('0x4a')]['id']}})['then'](handleEntityNotFound(_0x33517d,null))[_0x3513('0x1c')](saveUpdates(_0x2e9b49['body'],null))[_0x3513('0x1c')](respondWithResult(_0x33517d,null))[_0x3513('0x49')](handleError(_0x33517d,null));};exports[_0x3513('0x20')]=function(_0x3e45ce,_0x215f93){return db[_0x3513('0x26')][_0x3513('0x47')]({'where':{'id':_0x3e45ce['params']['id']}})[_0x3513('0x1c')](handleEntityNotFound(_0x215f93,null))[_0x3513('0x1c')](removeEntity(_0x215f93,null))[_0x3513('0x49')](handleError(_0x215f93,null));};
\ No newline at end of file
+var _0xf906=['path','to-csv','ejs','lodash','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','get','Variables','UserProfileResource','end','error','stack','name','send','Variable','rawAttributes','model','query','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','map','type','key','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','merge','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util'];(function(_0x55e3e8,_0x216190){var _0x288a93=function(_0x32b10b){while(--_0x32b10b){_0x55e3e8['push'](_0x55e3e8['shift']());}};_0x288a93(++_0x216190);}(_0xf906,0x1e8));var _0x6f90=function(_0x53c5cc,_0x583b4d){_0x53c5cc=_0x53c5cc-0x0;var _0x4066a0=_0xf906[_0x53c5cc];return _0x4066a0;};'use strict';var pdf=require(_0x6f90('0x0'));var emlformat=require(_0x6f90('0x1'));var rimraf=require(_0x6f90('0x2'));var zipdir=require(_0x6f90('0x3'));var jsonpatch=require(_0x6f90('0x4'));var rp=require(_0x6f90('0x5'));var moment=require(_0x6f90('0x6'));var BPromise=require(_0x6f90('0x7'));var Mustache=require(_0x6f90('0x8'));var util=require(_0x6f90('0x9'));var path=require(_0x6f90('0xa'));var sox=require('sox');var csv=require(_0x6f90('0xb'));var ejs=require(_0x6f90('0xc'));var fs=require('fs');var _=require(_0x6f90('0xd'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x6f90('0xe'));var toCsv=require(_0x6f90('0xb'));var querystring=require(_0x6f90('0xf'));var Papa=require(_0x6f90('0x10'));var Redis=require(_0x6f90('0x11'));var authService=require('../../components/auth/service');var qs=require(_0x6f90('0x12'));var hardwareService=require(_0x6f90('0x13'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0x6f90('0x14'));var db=require(_0x6f90('0x15'))['db'];function respondWithStatusCode(_0x53d30c,_0x2c9843){_0x2c9843=_0x2c9843||0xcc;return function(_0x1bd4e2){if(_0x1bd4e2){return _0x53d30c[_0x6f90('0x16')](_0x2c9843);}return _0x53d30c[_0x6f90('0x17')](_0x2c9843)['end']();};}function respondWithResult(_0x141671,_0x4c894d){_0x4c894d=_0x4c894d||0xc8;return function(_0xd6227a){if(_0xd6227a){return _0x141671[_0x6f90('0x17')](_0x4c894d)[_0x6f90('0x18')](_0xd6227a);}};}function respondWithFilteredResult(_0x452520,_0xe886b1){return function(_0x300f11){if(_0x300f11){var _0x1a815e=_0x300f11[_0x6f90('0x19')],_0x30883a=_0xe886b1[_0x6f90('0x1a')],_0x470d51=_0xe886b1[_0x6f90('0x1a')]+_0xe886b1['limit'],_0x25c054;if(_0x470d51>=_0x1a815e){_0x470d51=_0x1a815e;_0x25c054=0xc8;}else{_0x25c054=0xce;}_0x452520[_0x6f90('0x17')](_0x25c054);return _0x452520[_0x6f90('0x1b')](_0x6f90('0x1c'),_0x30883a+'-'+_0x470d51+'/'+_0x1a815e)[_0x6f90('0x18')](_0x300f11);}return null;};}function patchUpdates(_0x1c80bf){return function(_0x222db2){try{jsonpatch[_0x6f90('0x1d')](_0x222db2,_0x1c80bf,!![]);}catch(_0x46305){return BPromise[_0x6f90('0x1e')](_0x46305);}return _0x222db2[_0x6f90('0x1f')]();};}function saveUpdates(_0x2d9b83,_0x2392ed){return function(_0x14e6b2){if(_0x14e6b2){return _0x14e6b2[_0x6f90('0x20')](_0x2d9b83)[_0x6f90('0x21')](function(_0x476254){return _0x476254;});}return null;};}function removeEntity(_0x1027a5,_0x5d4158){return function(_0x2e96dd){if(_0x2e96dd){return _0x2e96dd[_0x6f90('0x22')]()['then'](function(){var _0x6f34b4=_0x2e96dd[_0x6f90('0x23')]({'plain':!![]});var _0x1fd0e6=_0x6f90('0x24');return db[_0x6f90('0x25')]['destroy']({'where':{'type':_0x1fd0e6,'resourceId':_0x6f34b4['id']}})['then'](function(){return _0x2e96dd;});})[_0x6f90('0x21')](function(){_0x1027a5[_0x6f90('0x17')](0xcc)[_0x6f90('0x26')]();});}};}function handleEntityNotFound(_0x1f3f2b,_0x31ade6){return function(_0x1113db){if(!_0x1113db){_0x1f3f2b[_0x6f90('0x16')](0x194);}return _0x1113db;};}function handleError(_0x318cbf,_0x153d4a){_0x153d4a=_0x153d4a||0x1f4;return function(_0x4b1839){logger[_0x6f90('0x27')](_0x4b1839[_0x6f90('0x28')]);if(_0x4b1839['name']){delete _0x4b1839[_0x6f90('0x29')];}_0x318cbf[_0x6f90('0x17')](_0x153d4a)[_0x6f90('0x2a')](_0x4b1839);};}exports['index']=function(_0x4efd96,_0x26652d){var _0x15898a={},_0x5d62a7={},_0x4c522b={'count':0x0,'rows':[]};var _0x2e063e=db[_0x6f90('0x2b')][_0x6f90('0x2c')];_0x5d62a7[_0x6f90('0x2d')]=_['keys'](_0x2e063e);_0x5d62a7[_0x6f90('0x2e')]=_[_0x6f90('0x2f')](_0x4efd96[_0x6f90('0x2e')]);_0x5d62a7[_0x6f90('0x30')]=_['intersection'](_0x5d62a7[_0x6f90('0x2d')],_0x5d62a7['query']);_0x15898a['attributes']=_[_0x6f90('0x31')](_0x5d62a7[_0x6f90('0x2d')],qs[_0x6f90('0x32')](_0x4efd96[_0x6f90('0x2e')][_0x6f90('0x32')]));_0x15898a[_0x6f90('0x33')]=_0x15898a[_0x6f90('0x33')][_0x6f90('0x34')]?_0x15898a[_0x6f90('0x33')]:_0x5d62a7['model'];if(!_0x4efd96[_0x6f90('0x2e')][_0x6f90('0x35')](_0x6f90('0x36'))){_0x15898a['limit']=qs[_0x6f90('0x37')](_0x4efd96['query'][_0x6f90('0x37')]);_0x15898a[_0x6f90('0x1a')]=qs['offset'](_0x4efd96[_0x6f90('0x2e')]['offset']);}_0x15898a[_0x6f90('0x38')]=qs[_0x6f90('0x39')](_0x4efd96[_0x6f90('0x2e')][_0x6f90('0x39')]);_0x15898a[_0x6f90('0x3a')]=qs['filters'](_[_0x6f90('0x3b')](_0x4efd96[_0x6f90('0x2e')],_0x5d62a7[_0x6f90('0x30')]));if(_0x4efd96[_0x6f90('0x2e')][_0x6f90('0x3c')]){_0x15898a['where']=_['merge'](_0x15898a['where'],{'$or':_[_0x6f90('0x3d')](_0x2e063e,function(_0x1da2b2){if(_0x1da2b2[_0x6f90('0x3e')][_0x6f90('0x3f')]!==_0x6f90('0x40')){var _0x40076c={};_0x40076c[_0x1da2b2['field']]={'$like':'%'+_0x4efd96[_0x6f90('0x2e')][_0x6f90('0x3c')]+'%'};return _0x40076c;}})});}_0x15898a=_['merge']({},_0x15898a,_0x4efd96[_0x6f90('0x41')]);var _0x491a23={'where':_0x15898a[_0x6f90('0x3a')]};return db[_0x6f90('0x2b')][_0x6f90('0x19')](_0x491a23)[_0x6f90('0x21')](function(_0x4a25cc){_0x4c522b[_0x6f90('0x19')]=_0x4a25cc;if(_0x4efd96[_0x6f90('0x2e')][_0x6f90('0x42')]){_0x15898a[_0x6f90('0x43')]=[{'all':!![]}];}return db[_0x6f90('0x2b')][_0x6f90('0x44')](_0x15898a);})[_0x6f90('0x21')](function(_0x5665d8){_0x4c522b[_0x6f90('0x45')]=_0x5665d8;return _0x4c522b;})[_0x6f90('0x21')](respondWithFilteredResult(_0x26652d,_0x15898a))[_0x6f90('0x46')](handleError(_0x26652d,null));};exports[_0x6f90('0x47')]=function(_0x4a21c2,_0x29205b){var _0x1c9baa={'raw':!![],'where':{'id':_0x4a21c2['params']['id']}},_0xe7aed3={};_0xe7aed3[_0x6f90('0x2d')]=_[_0x6f90('0x2f')](db[_0x6f90('0x2b')][_0x6f90('0x2c')]);_0xe7aed3[_0x6f90('0x2e')]=_[_0x6f90('0x2f')](_0x4a21c2[_0x6f90('0x2e')]);_0xe7aed3['filters']=_['intersection'](_0xe7aed3[_0x6f90('0x2d')],_0xe7aed3['query']);_0x1c9baa[_0x6f90('0x33')]=_['intersection'](_0xe7aed3['model'],qs[_0x6f90('0x32')](_0x4a21c2[_0x6f90('0x2e')]['fields']));_0x1c9baa[_0x6f90('0x33')]=_0x1c9baa['attributes'][_0x6f90('0x34')]?_0x1c9baa[_0x6f90('0x33')]:_0xe7aed3[_0x6f90('0x2d')];if(_0x4a21c2[_0x6f90('0x2e')]['includeAll']){_0x1c9baa[_0x6f90('0x43')]=[{'all':!![]}];}_0x1c9baa=_[_0x6f90('0x48')]({},_0x1c9baa,_0x4a21c2[_0x6f90('0x41')]);return db['Variable'][_0x6f90('0x49')](_0x1c9baa)[_0x6f90('0x21')](handleEntityNotFound(_0x29205b,null))[_0x6f90('0x21')](respondWithResult(_0x29205b,null))[_0x6f90('0x46')](handleError(_0x29205b,null));};exports['create']=function(_0x1ec141,_0x4deca9){return db[_0x6f90('0x2b')][_0x6f90('0x4a')](_0x1ec141[_0x6f90('0x4b')],{})[_0x6f90('0x21')](function(_0x18a510){var _0x593e25=_0x1ec141[_0x6f90('0x4c')][_0x6f90('0x23')]({'plain':!![]});if(!_0x593e25)throw new Error(_0x6f90('0x4d'));if(_0x593e25['role']===_0x6f90('0x4c')){var _0x332f8d=_0x18a510['get']({'plain':!![]});var _0xb49647=_0x6f90('0x24');return db[_0x6f90('0x4e')][_0x6f90('0x49')]({'where':{'name':_0xb49647,'userProfileId':_0x593e25[_0x6f90('0x4f')]},'raw':!![]})['then'](function(_0x1eb2bf){if(_0x1eb2bf&&_0x1eb2bf[_0x6f90('0x50')]===0x0){return db[_0x6f90('0x25')]['create']({'name':_0x332f8d[_0x6f90('0x29')],'resourceId':_0x332f8d['id'],'type':_0x1eb2bf[_0x6f90('0x29')],'sectionId':_0x1eb2bf['id']},{})['then'](function(){return _0x18a510;});}else{return _0x18a510;}})['catch'](function(_0x668c5a){logger['error'](_0x6f90('0x51'),_0x668c5a);throw _0x668c5a;});}return _0x18a510;})[_0x6f90('0x21')](respondWithResult(_0x4deca9,0xc9))[_0x6f90('0x46')](handleError(_0x4deca9,null));};exports[_0x6f90('0x20')]=function(_0xd36ab4,_0x537d50){if(_0xd36ab4[_0x6f90('0x4b')]['id']){delete _0xd36ab4[_0x6f90('0x4b')]['id'];}return db['Variable'][_0x6f90('0x49')]({'where':{'id':_0xd36ab4[_0x6f90('0x52')]['id']}})['then'](handleEntityNotFound(_0x537d50,null))['then'](saveUpdates(_0xd36ab4[_0x6f90('0x4b')],null))['then'](respondWithResult(_0x537d50,null))[_0x6f90('0x46')](handleError(_0x537d50,null));};exports[_0x6f90('0x22')]=function(_0x17f235,_0x42241d){return db['Variable'][_0x6f90('0x49')]({'where':{'id':_0x17f235[_0x6f90('0x52')]['id']}})[_0x6f90('0x21')](handleEntityNotFound(_0x42241d,null))[_0x6f90('0x21')](removeEntity(_0x42241d,null))[_0x6f90('0x46')](handleError(_0x42241d,null));};
\ No newline at end of file
index 2daae34..aa49c22 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x24bb=['tools_variables','lodash','../../config/logger','moment','bluebird','path','./variable.attributes','exports','Variable'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0x24bb,0x19f));var _0xb24b=function(_0x47a1b6,_0x2d49c5){_0x47a1b6=_0x47a1b6-0x0;var _0x219ff4=_0x24bb[_0x47a1b6];return _0x219ff4;};'use strict';var _=require(_0xb24b('0x0'));var util=require('util');var logger=require(_0xb24b('0x1'))('api');var moment=require(_0xb24b('0x2'));var BPromise=require(_0xb24b('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xb24b('0x4'));var rimraf=require('rimraf');var config=require('../../config/environment');var attributes=require(_0xb24b('0x5'));module[_0xb24b('0x6')]=function(_0x45588a,_0x51e19e){return _0x45588a['define'](_0xb24b('0x7'),attributes,{'tableName':_0xb24b('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x965d=['bluebird','path','rimraf','../../config/environment','define','Variable','lodash','util','api','moment'];(function(_0x1fd067,_0x2a3c40){var _0x1f5bf7=function(_0x3670a4){while(--_0x3670a4){_0x1fd067['push'](_0x1fd067['shift']());}};_0x1f5bf7(++_0x2a3c40);}(_0x965d,0x1be));var _0xd965=function(_0x1394e5,_0x1b25a9){_0x1394e5=_0x1394e5-0x0;var _0x417fbd=_0x965d[_0x1394e5];return _0x417fbd;};'use strict';var _=require(_0xd965('0x0'));var util=require(_0xd965('0x1'));var logger=require('../../config/logger')(_0xd965('0x2'));var moment=require(_0xd965('0x3'));var BPromise=require(_0xd965('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xd965('0x5'));var rimraf=require(_0xd965('0x6'));var config=require(_0xd965('0x7'));var attributes=require('./variable.attributes');module['exports']=function(_0x52ee27,_0x483311){return _0x52ee27[_0xd965('0x8')](_0xd965('0x9'),attributes,{'tableName':'tools_variables','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 24e6c5c..9b924bb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0ded=['stringify','error','message','result','catch','ShowVariable','find','options','where','include','map','model','attributes','lodash','util','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','request','then','info','Variable,\x20%s,\x20%s','request\x20sent','debug'];(function(_0xd0cd0b,_0x490956){var _0x59cced=function(_0x567251){while(--_0x567251){_0xd0cd0b['push'](_0xd0cd0b['shift']());}};_0x59cced(++_0x490956);}(_0x0ded,0x94));var _0xd0de=function(_0x1fa760,_0x1bf063){_0x1fa760=_0x1fa760-0x0;var _0xd8eda1=_0x0ded[_0x1fa760];return _0xd8eda1;};'use strict';var _=require(_0xd0de('0x0'));var util=require(_0xd0de('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xd0de('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xd0de('0x3'))['db'];var utils=require(_0xd0de('0x4'));var logger=require(_0xd0de('0x5'))('rpc');var config=require(_0xd0de('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xd0de('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2481fd,_0x1031b3,_0x2c7773){return new BPromise(function(_0x299fcc,_0x4b5a5b){return client[_0xd0de('0x8')](_0x2481fd,_0x2c7773)[_0xd0de('0x9')](function(_0x3100a3){logger[_0xd0de('0xa')](_0xd0de('0xb'),_0x1031b3,_0xd0de('0xc'));logger[_0xd0de('0xd')]('Variable,\x20%s,\x20%s,\x20%s',_0x1031b3,_0xd0de('0xc'),JSON[_0xd0de('0xe')](_0x3100a3));if(_0x3100a3[_0xd0de('0xf')]){if(_0x3100a3[_0xd0de('0xf')]['code']===0x1f4){logger[_0xd0de('0xf')](_0xd0de('0xb'),_0x1031b3,_0x3100a3[_0xd0de('0xf')][_0xd0de('0x10')]);return _0x4b5a5b(_0x3100a3[_0xd0de('0xf')][_0xd0de('0x10')]);}logger['error'](_0xd0de('0xb'),_0x1031b3,_0x3100a3[_0xd0de('0xf')][_0xd0de('0x10')]);return _0x299fcc(_0x3100a3[_0xd0de('0xf')][_0xd0de('0x10')]);}else{logger[_0xd0de('0xa')]('Variable,\x20%s,\x20%s',_0x1031b3,'request\x20sent');_0x299fcc(_0x3100a3[_0xd0de('0x11')]['message']);}})[_0xd0de('0x12')](function(_0x352ad4){logger[_0xd0de('0xf')](_0xd0de('0xb'),_0x1031b3,_0x352ad4);_0x4b5a5b(_0x352ad4);});});}exports[_0xd0de('0x13')]=function(_0x41784e){var _0x1ec41e=this;return new Promise(function(_0x30b897,_0x2fccdf){return db['Variable'][_0xd0de('0x14')]({'raw':_0x41784e[_0xd0de('0x15')]?_0x41784e['options']['raw']===undefined?!![]:![]:!![],'where':_0x41784e[_0xd0de('0x15')]?_0x41784e['options'][_0xd0de('0x16')]||null:null,'attributes':_0x41784e[_0xd0de('0x15')]?_0x41784e[_0xd0de('0x15')]['attributes']||null:null,'include':_0x41784e[_0xd0de('0x15')]?_0x41784e['options'][_0xd0de('0x17')]?_[_0xd0de('0x18')](_0x41784e[_0xd0de('0x15')][_0xd0de('0x17')],function(_0x187073){return{'model':db[_0x187073[_0xd0de('0x19')]],'as':_0x187073['as'],'attributes':_0x187073[_0xd0de('0x1a')],'include':_0x187073[_0xd0de('0x17')]?_[_0xd0de('0x18')](_0x187073[_0xd0de('0x17')],function(_0x1b6d23){return{'model':db[_0x1b6d23[_0xd0de('0x19')]],'as':_0x1b6d23['as'],'attributes':_0x1b6d23[_0xd0de('0x1a')],'include':_0x1b6d23[_0xd0de('0x17')]?_[_0xd0de('0x18')](_0x1b6d23[_0xd0de('0x17')],function(_0x3eb77b){return{'model':db[_0x3eb77b[_0xd0de('0x19')]],'as':_0x3eb77b['as'],'attributes':_0x3eb77b[_0xd0de('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xd0de('0x9')](function(_0x30d82f){logger[_0xd0de('0xa')]('ShowVariable',_0x41784e);logger[_0xd0de('0xd')](_0xd0de('0x13'),_0x41784e,JSON['stringify'](_0x30d82f));_0x30b897(_0x30d82f);})[_0xd0de('0x12')](function(_0x1f2275){logger[_0xd0de('0xf')](_0xd0de('0x13'),_0x1f2275[_0xd0de('0x10')],_0x41784e);_0x2fccdf(_0x1ec41e[_0xd0de('0xf')](0x1f4,_0x1f2275[_0xd0de('0x10')]));});});};
\ No newline at end of file
+var _0x1f73=['client','http','then','info','Variable,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','catch','Variable','find','options','where','attributes','include','map','model','ShowVariable','debug','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x2d3e38,_0x3ac514){var _0x7c5d53=function(_0x529947){while(--_0x529947){_0x2d3e38['push'](_0x2d3e38['shift']());}};_0x7c5d53(++_0x3ac514);}(_0x1f73,0x1e6));var _0x31f7=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x1f73[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x31f7('0x0'));var util=require(_0x31f7('0x1'));var moment=require('moment');var BPromise=require(_0x31f7('0x2'));var rs=require(_0x31f7('0x3'));var fs=require('fs');var Redis=require(_0x31f7('0x4'));var db=require(_0x31f7('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x31f7('0x6'))(_0x31f7('0x7'));var config=require(_0x31f7('0x8'));var jayson=require(_0x31f7('0x9'));var client=jayson[_0x31f7('0xa')][_0x31f7('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x599383,_0x363fac,_0x4f7fda){return new BPromise(function(_0x534719,_0xfe200c){return client['request'](_0x599383,_0x4f7fda)[_0x31f7('0xc')](function(_0xa897dd){logger[_0x31f7('0xd')](_0x31f7('0xe'),_0x363fac,_0x31f7('0xf'));logger['debug']('Variable,\x20%s,\x20%s,\x20%s',_0x363fac,_0x31f7('0xf'),JSON[_0x31f7('0x10')](_0xa897dd));if(_0xa897dd['error']){if(_0xa897dd[_0x31f7('0x11')]['code']===0x1f4){logger[_0x31f7('0x11')](_0x31f7('0xe'),_0x363fac,_0xa897dd['error']['message']);return _0xfe200c(_0xa897dd[_0x31f7('0x11')][_0x31f7('0x12')]);}logger[_0x31f7('0x11')]('Variable,\x20%s,\x20%s',_0x363fac,_0xa897dd[_0x31f7('0x11')][_0x31f7('0x12')]);return _0x534719(_0xa897dd[_0x31f7('0x11')][_0x31f7('0x12')]);}else{logger[_0x31f7('0xd')](_0x31f7('0xe'),_0x363fac,_0x31f7('0xf'));_0x534719(_0xa897dd[_0x31f7('0x13')][_0x31f7('0x12')]);}})[_0x31f7('0x14')](function(_0x6ddcfe){logger['error'](_0x31f7('0xe'),_0x363fac,_0x6ddcfe);_0xfe200c(_0x6ddcfe);});});}exports['ShowVariable']=function(_0x4af222){var _0x2227ca=this;return new Promise(function(_0x45b7ad,_0x557505){return db[_0x31f7('0x15')][_0x31f7('0x16')]({'raw':_0x4af222[_0x31f7('0x17')]?_0x4af222['options']['raw']===undefined?!![]:![]:!![],'where':_0x4af222[_0x31f7('0x17')]?_0x4af222[_0x31f7('0x17')][_0x31f7('0x18')]||null:null,'attributes':_0x4af222['options']?_0x4af222[_0x31f7('0x17')][_0x31f7('0x19')]||null:null,'include':_0x4af222[_0x31f7('0x17')]?_0x4af222[_0x31f7('0x17')][_0x31f7('0x1a')]?_[_0x31f7('0x1b')](_0x4af222[_0x31f7('0x17')][_0x31f7('0x1a')],function(_0x147d6a){return{'model':db[_0x147d6a[_0x31f7('0x1c')]],'as':_0x147d6a['as'],'attributes':_0x147d6a['attributes'],'include':_0x147d6a[_0x31f7('0x1a')]?_[_0x31f7('0x1b')](_0x147d6a[_0x31f7('0x1a')],function(_0xe09109){return{'model':db[_0xe09109[_0x31f7('0x1c')]],'as':_0xe09109['as'],'attributes':_0xe09109[_0x31f7('0x19')],'include':_0xe09109[_0x31f7('0x1a')]?_['map'](_0xe09109[_0x31f7('0x1a')],function(_0xfd9a4e){return{'model':db[_0xfd9a4e[_0x31f7('0x1c')]],'as':_0xfd9a4e['as'],'attributes':_0xfd9a4e[_0x31f7('0x19')]};}):[]};}):[]};}):[]:[]})[_0x31f7('0xc')](function(_0x27078b){logger[_0x31f7('0xd')](_0x31f7('0x1d'),_0x4af222);logger[_0x31f7('0x1e')](_0x31f7('0x1d'),_0x4af222,JSON[_0x31f7('0x10')](_0x27078b));_0x45b7ad(_0x27078b);})[_0x31f7('0x14')](function(_0x549a43){logger[_0x31f7('0x11')]('ShowVariable',_0x549a43['message'],_0x4af222);_0x557505(_0x2227ca[_0x31f7('0x11')](0x1f4,_0x549a43[_0x31f7('0x12')]));});});};
\ No newline at end of file
index b90a2b2..f99ccad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x398a=['/reset','reset','pull','restart','/migrations','migrations','express','Router','./version.controller','get','isAuthenticated','canUpdate','fetch'];(function(_0x7e2eb0,_0x17cd58){var _0xd92de4=function(_0x5d005b){while(--_0x5d005b){_0x7e2eb0['push'](_0x7e2eb0['shift']());}};_0xd92de4(++_0x17cd58);}(_0x398a,0xa2));var _0xa398=function(_0x451ccf,_0x25c085){_0x451ccf=_0x451ccf-0x0;var _0x44f321=_0x398a[_0x451ccf];return _0x44f321;};'use strict';var express=require(_0xa398('0x0'));var router=express[_0xa398('0x1')]();var auth=require('../../components/auth/service');var controller=require(_0xa398('0x2'));router[_0xa398('0x3')]('/',controller['index']);router[_0xa398('0x3')]('/fetch',auth[_0xa398('0x4')](),auth[_0xa398('0x5')](),controller[_0xa398('0x6')]);router[_0xa398('0x3')](_0xa398('0x7'),auth[_0xa398('0x4')](),auth[_0xa398('0x5')](),controller[_0xa398('0x8')]);router[_0xa398('0x3')]('/pull',auth['isAuthenticated'](),auth[_0xa398('0x5')](),controller[_0xa398('0x9')]);router[_0xa398('0x3')]('/restart',auth[_0xa398('0x4')](),controller[_0xa398('0xa')]);router[_0xa398('0x3')](_0xa398('0xb'),controller[_0xa398('0xc')]);module['exports']=router;
\ No newline at end of file
+var _0xaa79=['canUpdate','/pull','/restart','restart','/migrations','migrations','exports','express','Router','../../components/auth/service','./version.controller','get','index','/fetch','isAuthenticated','/reset'];(function(_0x47be3f,_0x476313){var _0x4093f2=function(_0x410fd5){while(--_0x410fd5){_0x47be3f['push'](_0x47be3f['shift']());}};_0x4093f2(++_0x476313);}(_0xaa79,0x77));var _0x9aa7=function(_0x31d727,_0x4e19e9){_0x31d727=_0x31d727-0x0;var _0x3e2bd1=_0xaa79[_0x31d727];return _0x3e2bd1;};'use strict';var express=require(_0x9aa7('0x0'));var router=express[_0x9aa7('0x1')]();var auth=require(_0x9aa7('0x2'));var controller=require(_0x9aa7('0x3'));router[_0x9aa7('0x4')]('/',controller[_0x9aa7('0x5')]);router[_0x9aa7('0x4')](_0x9aa7('0x6'),auth[_0x9aa7('0x7')](),auth['canUpdate'](),controller['fetch']);router[_0x9aa7('0x4')](_0x9aa7('0x8'),auth[_0x9aa7('0x7')](),auth[_0x9aa7('0x9')](),controller['reset']);router['get'](_0x9aa7('0xa'),auth[_0x9aa7('0x7')](),auth[_0x9aa7('0x9')](),controller['pull']);router[_0x9aa7('0x4')](_0x9aa7('0xb'),auth[_0x9aa7('0x7')](),controller[_0x9aa7('0xc')]);router['get'](_0x9aa7('0xd'),controller[_0x9aa7('0xe')]);module[_0x9aa7('0xf')]=router;
\ No newline at end of file
index 43fdb1f..fcaf301 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7c61=['.js','sort','Migration','sequelize','getQueryInterface','constructor','Migration\x20tried\x20to\x20use\x20old\x20style\x20\x22done\x22\x20callback.\x20Please\x20upgrade\x20to\x20\x22umzug\x22\x20and\x20return\x20a\x20promise\x20instead.','server','then','Database\x20migrated\x20successfully\x20from\x20version\x20','\x20to\x20','last','Database\x20already\x20up-to-date','path','lodash','pkginfo','version','child_process','exec','../../mysqldb','../../config/environment','../../config/pm2','../../config/logger','update','simple-git','root','index','exports','query','latest','fetch','tags','2.0.0','status','json','origin','master','error','info','git\x20fetch','git\x20fetch\x20origin\x20master','reset','--hard','git\x20reset\x20--hard','pull','npm\x20install\x20--production','motion2','pm2\x20restart\x20motion\x20%s','catch','migrations','readdirSync','join','length','replace'];(function(_0x40a045,_0x516f0e){var _0x1a687c=function(_0x48c9fe){while(--_0x48c9fe){_0x40a045['push'](_0x40a045['shift']());}};_0x1a687c(++_0x516f0e);}(_0x7c61,0x1bd));var _0x17c6=function(_0x5a3964,_0x3d34b5){_0x5a3964=_0x5a3964-0x0;var _0x42bddd=_0x7c61[_0x5a3964];return _0x42bddd;};'use strict';var Umzug=require('umzug');var path=require(_0x17c6('0x0'));var fs=require('fs');var _=require(_0x17c6('0x1'));var pkginfo=require(_0x17c6('0x2'))(module,_0x17c6('0x3'));var compareVersions=require('compare-versions');var exec=require(_0x17c6('0x4'))[_0x17c6('0x5')];var db=require(_0x17c6('0x6'))['db'];var config=require(_0x17c6('0x7'));var pm2=require(_0x17c6('0x8'));var logger=require(_0x17c6('0x9'))(_0x17c6('0xa'));var git=require(_0x17c6('0xb'))(config[_0x17c6('0xc')]);exports[_0x17c6('0xd')]=function(_0x1cc1f6,_0x5cd84f){var _0x26f168={'current':module[_0x17c6('0xe')][_0x17c6('0x3')],'phonebar':0x2};if(_0x1cc1f6[_0x17c6('0xf')]&&_0x1cc1f6[_0x17c6('0xf')][_0x17c6('0x10')]){return git[_0x17c6('0x11')]()[_0x17c6('0x12')](function(_0x33d286,_0x5f22f3){_0x26f168['latest']=(_0x33d286?module[_0x17c6('0xe')][_0x17c6('0x3')]:_0x5f22f3[_0x17c6('0x10')])||_0x17c6('0x13');return _0x5cd84f[_0x17c6('0x14')](0xc8)[_0x17c6('0x15')](_0x26f168);});}else{return _0x5cd84f[_0x17c6('0x14')](0xc8)[_0x17c6('0x15')](_0x26f168);}};exports[_0x17c6('0x11')]=function(_0x237091,_0x29ca19){return git[_0x17c6('0x11')]([_0x17c6('0x16'),_0x17c6('0x17')],function(_0x38271d){if(_0x38271d){logger[_0x17c6('0x18')](_0x38271d);return _0x29ca19[_0x17c6('0x14')](0x1f4)[_0x17c6('0x15')](_0x38271d);}logger[_0x17c6('0x19')](_0x17c6('0x1a'));return _0x29ca19['status'](0xc8)[_0x17c6('0x15')]({'output':_0x17c6('0x1b')});});};exports[_0x17c6('0x1c')]=function(_0x2091b0,_0x340b4c){return git['reset']([_0x17c6('0x1d'),'FETCH_HEAD'],function(_0x3f010c){if(_0x3f010c){logger[_0x17c6('0x18')](_0x3f010c);return _0x340b4c[_0x17c6('0x14')](0x1f4)[_0x17c6('0x15')](_0x3f010c);}logger[_0x17c6('0x19')]('git\x20reset\x20--hard\x20FETCH_HEAD');return _0x340b4c['status'](0xc8)[_0x17c6('0x15')]({'output':_0x17c6('0x1e')});});};exports[_0x17c6('0x1f')]=function(_0x267812,_0x389534){exec(_0x17c6('0x20'),function(_0x2c9d04,_0x4aa698,_0x2e204){logger[_0x17c6('0x19')](_0x4aa698);logger[_0x17c6('0x19')](_0x2e204);if(_0x2c9d04){logger[_0x17c6('0x18')](_0x2c9d04);return _0x389534['status'](0x1f4)[_0x17c6('0x15')](_0x2c9d04);}return _0x389534['status'](0xc8)[_0x17c6('0x15')]({'output':_0x4aa698});});};exports['restart']=function(_0x4cb30b,_0x3ef583){return pm2['restart'](_0x17c6('0x21'))['then'](function(_0x55c2b7){logger['info'](_0x17c6('0x22'),_0x55c2b7);return _0x3ef583[_0x17c6('0x14')](0xc8)[_0x17c6('0x15')]({'output':'Your\x20system\x20has\x20been\x20restart\x20successfully'});})[_0x17c6('0x23')](function(_0x2cbb9b){logger['error'](_0x2cbb9b);return _0x3ef583[_0x17c6('0x14')](0x1f4)[_0x17c6('0x15')](_0x2cbb9b);});};exports[_0x17c6('0x24')]=function(_0x3c6633,_0x153b6f){var _0x20d062=fs[_0x17c6('0x25')](path[_0x17c6('0x26')](config[_0x17c6('0xc')],'server',_0x17c6('0x24')));var _0x16e4a1=[];for(var _0x5310d2=0x0;_0x5310d2<_0x20d062[_0x17c6('0x27')];_0x5310d2++){var _0x5e045d=_0x20d062[_0x5310d2][_0x17c6('0x28')](_0x17c6('0x29'),'');if(compareVersions(module['exports'][_0x17c6('0x3')],_0x5e045d)===-0x1){_0x16e4a1['push'](_0x5e045d);}}if(_0x16e4a1[_0x17c6('0x27')]){var _0x48fac8=_0x16e4a1[_0x17c6('0x2a')](compareVersions);var _0x421529=new Umzug({'storage':'sequelize','storageOptions':{'model':db[_0x17c6('0x2b')],'modelName':_0x17c6('0x2b'),'columnName':_0x17c6('0x3')},'migrations':{'params':[db[_0x17c6('0x2c')][_0x17c6('0x2d')](),db[_0x17c6('0x2c')][_0x17c6('0x2e')],function(){throw new Error(_0x17c6('0x2f'));}],'path':path['join'](config[_0x17c6('0xc')],_0x17c6('0x30'),'migrations'),'pattern':/\.js$/}});_0x421529['up']({'migrations':_['map'](_0x48fac8,function(_0x545a89){return _0x545a89+_0x17c6('0x29');})})[_0x17c6('0x31')](function(){return _0x153b6f[_0x17c6('0x14')](0xc8)[_0x17c6('0x15')]({'output':_0x17c6('0x32')+module['exports'][_0x17c6('0x3')]+_0x17c6('0x33')+_[_0x17c6('0x34')](_0x48fac8),'migrations':_['join'](_0x48fac8)});})[_0x17c6('0x23')](function(_0x32bcef){if(_0x32bcef instanceof db['sequelize']['UniqueConstraintError']){return _0x153b6f[_0x17c6('0x14')](0xc8)['json']({'output':'Database\x20already\x20up-to-date'});}else{return _0x153b6f[_0x17c6('0x14')](0x1f4)[_0x17c6('0x15')](_0x32bcef);}});}else{return _0x153b6f[_0x17c6('0x14')](0xc8)[_0x17c6('0x15')]({'output':_0x17c6('0x35')});}};
\ No newline at end of file
+var _0x737d=['length','sort','sequelize','Migration','getQueryInterface','constructor','map','\x20to\x20','last','Database\x20already\x20up-to-date','umzug','path','pkginfo','version','compare-versions','child_process','../../mysqldb','../../config/environment','../../config/pm2','../../config/logger','simple-git','root','index','latest','fetch','exports','2.0.0','json','status','origin','master','error','info','git\x20fetch','git\x20fetch\x20origin\x20master','--hard','FETCH_HEAD','git\x20reset\x20--hard\x20FETCH_HEAD','git\x20reset\x20--hard','npm\x20install\x20--production','restart','motion2','then','pm2\x20restart\x20motion\x20%s','Your\x20system\x20has\x20been\x20restart\x20successfully','catch','migrations','readdirSync','join','server','replace','.js','push'];(function(_0x3f9af5,_0x57610a){var _0x461f1a=function(_0x587b45){while(--_0x587b45){_0x3f9af5['push'](_0x3f9af5['shift']());}};_0x461f1a(++_0x57610a);}(_0x737d,0x148));var _0xd737=function(_0xbc460c,_0x1ceb63){_0xbc460c=_0xbc460c-0x0;var _0x110595=_0x737d[_0xbc460c];return _0x110595;};'use strict';var Umzug=require(_0xd737('0x0'));var path=require(_0xd737('0x1'));var fs=require('fs');var _=require('lodash');var pkginfo=require(_0xd737('0x2'))(module,_0xd737('0x3'));var compareVersions=require(_0xd737('0x4'));var exec=require(_0xd737('0x5'))['exec'];var db=require(_0xd737('0x6'))['db'];var config=require(_0xd737('0x7'));var pm2=require(_0xd737('0x8'));var logger=require(_0xd737('0x9'))('update');var git=require(_0xd737('0xa'))(config[_0xd737('0xb')]);exports[_0xd737('0xc')]=function(_0x52ee85,_0x5580b8){var _0x536353={'current':module['exports'][_0xd737('0x3')],'phonebar':0x2};if(_0x52ee85['query']&&_0x52ee85['query'][_0xd737('0xd')]){return git[_0xd737('0xe')]()['tags'](function(_0x5dc172,_0x5543c7){_0x536353[_0xd737('0xd')]=(_0x5dc172?module[_0xd737('0xf')]['version']:_0x5543c7[_0xd737('0xd')])||_0xd737('0x10');return _0x5580b8['status'](0xc8)[_0xd737('0x11')](_0x536353);});}else{return _0x5580b8[_0xd737('0x12')](0xc8)[_0xd737('0x11')](_0x536353);}};exports[_0xd737('0xe')]=function(_0x3a1cbd,_0x2f4f83){return git['fetch']([_0xd737('0x13'),_0xd737('0x14')],function(_0x46a48f){if(_0x46a48f){logger[_0xd737('0x15')](_0x46a48f);return _0x2f4f83[_0xd737('0x12')](0x1f4)[_0xd737('0x11')](_0x46a48f);}logger[_0xd737('0x16')](_0xd737('0x17'));return _0x2f4f83[_0xd737('0x12')](0xc8)[_0xd737('0x11')]({'output':_0xd737('0x18')});});};exports['reset']=function(_0xa24bcd,_0x1dc909){return git['reset']([_0xd737('0x19'),_0xd737('0x1a')],function(_0x360f33){if(_0x360f33){logger['error'](_0x360f33);return _0x1dc909[_0xd737('0x12')](0x1f4)[_0xd737('0x11')](_0x360f33);}logger[_0xd737('0x16')](_0xd737('0x1b'));return _0x1dc909[_0xd737('0x12')](0xc8)[_0xd737('0x11')]({'output':_0xd737('0x1c')});});};exports['pull']=function(_0x31d406,_0x344d01){exec(_0xd737('0x1d'),function(_0x341491,_0x2c4c8d,_0x2f93a1){logger['info'](_0x2c4c8d);logger[_0xd737('0x16')](_0x2f93a1);if(_0x341491){logger[_0xd737('0x15')](_0x341491);return _0x344d01[_0xd737('0x12')](0x1f4)['json'](_0x341491);}return _0x344d01[_0xd737('0x12')](0xc8)[_0xd737('0x11')]({'output':_0x2c4c8d});});};exports[_0xd737('0x1e')]=function(_0x4c463a,_0x36581f){return pm2[_0xd737('0x1e')](_0xd737('0x1f'))[_0xd737('0x20')](function(_0x4272cc){logger[_0xd737('0x16')](_0xd737('0x21'),_0x4272cc);return _0x36581f['status'](0xc8)[_0xd737('0x11')]({'output':_0xd737('0x22')});})[_0xd737('0x23')](function(_0x196148){logger['error'](_0x196148);return _0x36581f[_0xd737('0x12')](0x1f4)['json'](_0x196148);});};exports[_0xd737('0x24')]=function(_0xd03a5f,_0x163410){var _0x34ef61=fs[_0xd737('0x25')](path[_0xd737('0x26')](config[_0xd737('0xb')],_0xd737('0x27'),_0xd737('0x24')));var _0x4dee2e=[];for(var _0x52cd18=0x0;_0x52cd18<_0x34ef61['length'];_0x52cd18++){var _0x3f9f63=_0x34ef61[_0x52cd18][_0xd737('0x28')](_0xd737('0x29'),'');if(compareVersions(module[_0xd737('0xf')][_0xd737('0x3')],_0x3f9f63)===-0x1){_0x4dee2e[_0xd737('0x2a')](_0x3f9f63);}}if(_0x4dee2e[_0xd737('0x2b')]){var _0x538dbc=_0x4dee2e[_0xd737('0x2c')](compareVersions);var _0x3a1818=new Umzug({'storage':_0xd737('0x2d'),'storageOptions':{'model':db[_0xd737('0x2e')],'modelName':'Migration','columnName':_0xd737('0x3')},'migrations':{'params':[db[_0xd737('0x2d')][_0xd737('0x2f')](),db[_0xd737('0x2d')][_0xd737('0x30')],function(){throw new Error('Migration\x20tried\x20to\x20use\x20old\x20style\x20\x22done\x22\x20callback.\x20Please\x20upgrade\x20to\x20\x22umzug\x22\x20and\x20return\x20a\x20promise\x20instead.');}],'path':path[_0xd737('0x26')](config[_0xd737('0xb')],_0xd737('0x27'),_0xd737('0x24')),'pattern':/\.js$/}});_0x3a1818['up']({'migrations':_[_0xd737('0x31')](_0x538dbc,function(_0x1e81f8){return _0x1e81f8+'.js';})})['then'](function(){return _0x163410[_0xd737('0x12')](0xc8)[_0xd737('0x11')]({'output':'Database\x20migrated\x20successfully\x20from\x20version\x20'+module[_0xd737('0xf')][_0xd737('0x3')]+_0xd737('0x32')+_[_0xd737('0x33')](_0x538dbc),'migrations':_[_0xd737('0x26')](_0x538dbc)});})[_0xd737('0x23')](function(_0x227b46){if(_0x227b46 instanceof db[_0xd737('0x2d')]['UniqueConstraintError']){return _0x163410[_0xd737('0x12')](0xc8)[_0xd737('0x11')]({'output':_0xd737('0x34')});}else{return _0x163410[_0xd737('0x12')](0x1f4)[_0xd737('0x11')](_0x227b46);}});}else{return _0x163410[_0xd737('0x12')](0xc8)['json']({'output':_0xd737('0x34')});}};
\ No newline at end of file
index 6a876ad..bab079b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8f9d=['../../components/interaction/service','../../config/environment','./voiceAgentReport.controller','get','index','/describe','isAuthenticated','describe','/:id','post','put','update','delete','exports','multer','path','express','Router','../../components/auth/service'];(function(_0x27714d,_0x457b53){var _0x18e2fb=function(_0x28f1d9){while(--_0x28f1d9){_0x27714d['push'](_0x27714d['shift']());}};_0x18e2fb(++_0x457b53);}(_0x8f9d,0x93));var _0xd8f9=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x8f9d[_0x40a045];return _0x1a687c;};'use strict';var multer=require(_0xd8f9('0x0'));var util=require('util');var path=require(_0xd8f9('0x1'));var timeout=require('connect-timeout');var express=require(_0xd8f9('0x2'));var router=express[_0xd8f9('0x3')]();var auth=require(_0xd8f9('0x4'));var interaction=require(_0xd8f9('0x5'));var config=require(_0xd8f9('0x6'));var controller=require(_0xd8f9('0x7'));router[_0xd8f9('0x8')]('/',auth['isAuthenticated'](),controller[_0xd8f9('0x9')]);router[_0xd8f9('0x8')](_0xd8f9('0xa'),auth[_0xd8f9('0xb')](),controller[_0xd8f9('0xc')]);router['get'](_0xd8f9('0xd'),auth[_0xd8f9('0xb')](),controller['show']);router[_0xd8f9('0xe')]('/',auth['isAuthenticated'](),controller['create']);router[_0xd8f9('0xf')](_0xd8f9('0xd'),auth[_0xd8f9('0xb')](),controller[_0xd8f9('0x10')]);router[_0xd8f9('0x11')](_0xd8f9('0xd'),auth[_0xd8f9('0xb')](),controller['destroy']);module[_0xd8f9('0x12')]=router;
\ No newline at end of file
+var _0x7046=['multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','./voiceAgentReport.controller','get','isAuthenticated','index','/:id','post','create','put','update','delete','destroy'];(function(_0x5c47bf,_0x4007d4){var _0x5b344b=function(_0x9cd147){while(--_0x9cd147){_0x5c47bf['push'](_0x5c47bf['shift']());}};_0x5b344b(++_0x4007d4);}(_0x7046,0x144));var _0x6704=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x7046[_0x42cae2];return _0x5f256f;};'use strict';var multer=require(_0x6704('0x0'));var util=require(_0x6704('0x1'));var path=require(_0x6704('0x2'));var timeout=require(_0x6704('0x3'));var express=require('express');var router=express[_0x6704('0x4')]();var auth=require(_0x6704('0x5'));var interaction=require(_0x6704('0x6'));var config=require('../../config/environment');var controller=require(_0x6704('0x7'));router[_0x6704('0x8')]('/',auth[_0x6704('0x9')](),controller[_0x6704('0xa')]);router[_0x6704('0x8')]('/describe',auth[_0x6704('0x9')](),controller['describe']);router['get'](_0x6704('0xb'),auth['isAuthenticated'](),controller['show']);router[_0x6704('0xc')]('/',auth[_0x6704('0x9')](),controller[_0x6704('0xd')]);router[_0x6704('0xe')](_0x6704('0xb'),auth[_0x6704('0x9')](),controller[_0x6704('0xf')]);router[_0x6704('0x10')]('/:id',auth[_0x6704('0x9')](),controller[_0x6704('0x11')]);module['exports']=router;
\ No newline at end of file
index 2b830de..132d181 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa582=['DATE','INTEGER','BOOLEAN','FORWARD,\x20BLIND,\x20ATTENDED','sequelize','exports','STRING'];(function(_0x4410ca,_0x5830ce){var _0x55b911=function(_0x32a5d8){while(--_0x32a5d8){_0x4410ca['push'](_0x4410ca['shift']());}};_0x55b911(++_0x5830ce);}(_0xa582,0x1e0));var _0x2a58=function(_0x2dadb9,_0x42cfe6){_0x2dadb9=_0x2dadb9-0x0;var _0x2f0097=_0xa582[_0x2dadb9];return _0x2f0097;};'use strict';var Sequelize=require(_0x2a58('0x0'));module[_0x2a58('0x1')]={'type':{'type':Sequelize[_0x2a58('0x2')]},'uniqueid':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0x2a58('0x2')]},'calleridname':{'type':Sequelize[_0x2a58('0x2')]},'queue':{'type':Sequelize[_0x2a58('0x2')]},'interface':{'type':Sequelize[_0x2a58('0x2')]},'membername':{'type':Sequelize[_0x2a58('0x2')]},'agentcalledAt':{'type':Sequelize[_0x2a58('0x3')]},'agentconnectAt':{'type':Sequelize[_0x2a58('0x3')]},'agentcompleteAt':{'type':Sequelize['DATE']},'agentringnoanswerAt':{'type':Sequelize[_0x2a58('0x3')]},'agentdumpAt':{'type':Sequelize[_0x2a58('0x3')]},'holdtime':{'type':Sequelize[_0x2a58('0x4')]},'agentcomplete':{'type':Sequelize[_0x2a58('0x5')],'defaultValue':![]},'agentringnoanswer':{'type':Sequelize[_0x2a58('0x5')],'defaultValue':![]},'agentdump':{'type':Sequelize[_0x2a58('0x5')],'defaultValue':![]},'talktime':{'type':Sequelize[_0x2a58('0x4')]},'agentacw':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'acwtime':{'type':Sequelize[_0x2a58('0x4')]},'reason':{'type':Sequelize['STRING']},'lastevent':{'type':Sequelize[_0x2a58('0x2')]},'channel':{'type':Sequelize[_0x2a58('0x2')]},'channelstate':{'type':Sequelize[_0x2a58('0x4')]},'channelstatedesc':{'type':Sequelize[_0x2a58('0x2')]},'connectedlinenum':{'type':Sequelize[_0x2a58('0x2')]},'connectedlinename':{'type':Sequelize[_0x2a58('0x2')]},'language':{'type':Sequelize[_0x2a58('0x2')]},'accountcode':{'type':Sequelize[_0x2a58('0x2')]},'context':{'type':Sequelize[_0x2a58('0x2')]},'exten':{'type':Sequelize[_0x2a58('0x2')]},'priority':{'type':Sequelize[_0x2a58('0x2')]},'destchannel':{'type':Sequelize['STRING']},'destchannelstate':{'type':Sequelize[_0x2a58('0x4')]},'destchannelstatedesc':{'type':Sequelize[_0x2a58('0x2')]},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize['STRING']},'destconnectedlinenum':{'type':Sequelize['STRING']},'destconnectedlinename':{'type':Sequelize[_0x2a58('0x2')]},'destlanguage':{'type':Sequelize[_0x2a58('0x2')]},'destaccountcode':{'type':Sequelize[_0x2a58('0x2')]},'destcontext':{'type':Sequelize[_0x2a58('0x2')]},'destexten':{'type':Sequelize[_0x2a58('0x2')]},'destpriority':{'type':Sequelize['STRING']},'destuniqueid':{'type':Sequelize[_0x2a58('0x2')]},'answeredelsewheredestinationuniqueid':{'type':Sequelize[_0x2a58('0x2')]},'answeredelsewheremembername':{'type':Sequelize[_0x2a58('0x2')]},'transfer':{'type':Sequelize[_0x2a58('0x5')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0x2a58('0x2')],'comment':_0x2a58('0x6')},'transferexten':{'type':Sequelize['STRING']},'transferuniqueid':{'type':Sequelize[_0x2a58('0x2')]},'agententerreason':{'type':Sequelize[_0x2a58('0x4')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x438c=['exports','STRING','DATE','INTEGER','BOOLEAN','FORWARD,\x20BLIND,\x20ATTENDED'];(function(_0x16bde8,_0x4caba8){var _0x3fd0b1=function(_0x4cd52e){while(--_0x4cd52e){_0x16bde8['push'](_0x16bde8['shift']());}};_0x3fd0b1(++_0x4caba8);}(_0x438c,0x66));var _0xc438=function(_0x23151f,_0x368a82){_0x23151f=_0x23151f-0x0;var _0x26c90a=_0x438c[_0x23151f];return _0x26c90a;};'use strict';var Sequelize=require('sequelize');module[_0xc438('0x0')]={'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0xc438('0x1')]},'calleridnum':{'type':Sequelize[_0xc438('0x1')]},'calleridname':{'type':Sequelize[_0xc438('0x1')]},'queue':{'type':Sequelize[_0xc438('0x1')]},'interface':{'type':Sequelize[_0xc438('0x1')]},'membername':{'type':Sequelize[_0xc438('0x1')]},'agentcalledAt':{'type':Sequelize['DATE']},'agentconnectAt':{'type':Sequelize[_0xc438('0x2')]},'agentcompleteAt':{'type':Sequelize[_0xc438('0x2')]},'agentringnoanswerAt':{'type':Sequelize[_0xc438('0x2')]},'agentdumpAt':{'type':Sequelize[_0xc438('0x2')]},'holdtime':{'type':Sequelize[_0xc438('0x3')]},'agentcomplete':{'type':Sequelize[_0xc438('0x4')],'defaultValue':![]},'agentringnoanswer':{'type':Sequelize[_0xc438('0x4')],'defaultValue':![]},'agentdump':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'talktime':{'type':Sequelize['INTEGER']},'agentacw':{'type':Sequelize[_0xc438('0x4')],'defaultValue':![]},'acwtime':{'type':Sequelize[_0xc438('0x3')]},'reason':{'type':Sequelize[_0xc438('0x1')]},'lastevent':{'type':Sequelize[_0xc438('0x1')]},'channel':{'type':Sequelize[_0xc438('0x1')]},'channelstate':{'type':Sequelize['INTEGER']},'channelstatedesc':{'type':Sequelize[_0xc438('0x1')]},'connectedlinenum':{'type':Sequelize[_0xc438('0x1')]},'connectedlinename':{'type':Sequelize[_0xc438('0x1')]},'language':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize['STRING']},'context':{'type':Sequelize[_0xc438('0x1')]},'exten':{'type':Sequelize[_0xc438('0x1')]},'priority':{'type':Sequelize[_0xc438('0x1')]},'destchannel':{'type':Sequelize[_0xc438('0x1')]},'destchannelstate':{'type':Sequelize[_0xc438('0x3')]},'destchannelstatedesc':{'type':Sequelize[_0xc438('0x1')]},'destcalleridnum':{'type':Sequelize[_0xc438('0x1')]},'destcalleridname':{'type':Sequelize[_0xc438('0x1')]},'destconnectedlinenum':{'type':Sequelize[_0xc438('0x1')]},'destconnectedlinename':{'type':Sequelize[_0xc438('0x1')]},'destlanguage':{'type':Sequelize[_0xc438('0x1')]},'destaccountcode':{'type':Sequelize[_0xc438('0x1')]},'destcontext':{'type':Sequelize[_0xc438('0x1')]},'destexten':{'type':Sequelize[_0xc438('0x1')]},'destpriority':{'type':Sequelize[_0xc438('0x1')]},'destuniqueid':{'type':Sequelize[_0xc438('0x1')]},'answeredelsewheredestinationuniqueid':{'type':Sequelize['STRING']},'answeredelsewheremembername':{'type':Sequelize['STRING']},'transfer':{'type':Sequelize[_0xc438('0x4')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0xc438('0x1')],'comment':_0xc438('0x5')},'transferexten':{'type':Sequelize[_0xc438('0x1')]},'transferuniqueid':{'type':Sequelize[_0xc438('0x1')]},'agententerreason':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index 75f63f7..d6734f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf67d=['crypto','jsforce','desk.js','querystring','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','apply','reject','save','then','destroy','error','stack','name','VoiceAgentReport','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','filters','merge','map','type','key','VIRTUAL','field','filter','options','include','findAll','rows','catch','show','params','includeAll','find','create','update','body','describe','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','path','to-csv','ejs','lodash','squel'];(function(_0x2e40bf,_0x15f423){var _0x1dd6e7=function(_0x2e9ff4){while(--_0x2e9ff4){_0x2e40bf['push'](_0x2e40bf['shift']());}};_0x1dd6e7(++_0x15f423);}(_0xf67d,0x120));var _0xdf67=function(_0x110894,_0x12ebb2){_0x110894=_0x110894-0x0;var _0x68109=_0xf67d[_0x110894];return _0x68109;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xdf67('0x0'));var rimraf=require(_0xdf67('0x1'));var zipdir=require(_0xdf67('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xdf67('0x3'));var moment=require(_0xdf67('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xdf67('0x5'));var util=require(_0xdf67('0x6'));var path=require(_0xdf67('0x7'));var sox=require('sox');var csv=require(_0xdf67('0x8'));var ejs=require(_0xdf67('0x9'));var fs=require('fs');var _=require(_0xdf67('0xa'));var squel=require(_0xdf67('0xb'));var crypto=require(_0xdf67('0xc'));var jsforce=require(_0xdf67('0xd'));var deskjs=require(_0xdf67('0xe'));var toCsv=require(_0xdf67('0x8'));var querystring=require(_0xdf67('0xf'));var Papa=require('papaparse');var Redis=require(_0xdf67('0x10'));var authService=require(_0xdf67('0x11'));var qs=require(_0xdf67('0x12'));var hardwareService=require(_0xdf67('0x13'));var logger=require(_0xdf67('0x14'))(_0xdf67('0x15'));var utils=require('../../config/utils');var config=require(_0xdf67('0x16'));var db=require(_0xdf67('0x17'))['db'];function respondWithStatusCode(_0x220a9c,_0x379173){_0x379173=_0x379173||0xcc;return function(_0x1b3d71){if(_0x1b3d71){return _0x220a9c[_0xdf67('0x18')](_0x379173);}return _0x220a9c[_0xdf67('0x19')](_0x379173)[_0xdf67('0x1a')]();};}function respondWithResult(_0x38f756,_0x2462fd){_0x2462fd=_0x2462fd||0xc8;return function(_0x5345f4){if(_0x5345f4){return _0x38f756[_0xdf67('0x19')](_0x2462fd)[_0xdf67('0x1b')](_0x5345f4);}};}function respondWithFilteredResult(_0x5d00d8,_0x4cc0){return function(_0x4e4836){if(_0x4e4836){var _0x3c87cc=_0x4e4836[_0xdf67('0x1c')],_0x2a813b=_0x4cc0[_0xdf67('0x1d')],_0x1eb507=_0x4cc0[_0xdf67('0x1d')]+_0x4cc0[_0xdf67('0x1e')],_0x13c881;if(_0x1eb507>=_0x3c87cc){_0x1eb507=_0x3c87cc;_0x13c881=0xc8;}else{_0x13c881=0xce;}_0x5d00d8[_0xdf67('0x19')](_0x13c881);return _0x5d00d8[_0xdf67('0x1f')](_0xdf67('0x20'),_0x2a813b+'-'+_0x1eb507+'/'+_0x3c87cc)[_0xdf67('0x1b')](_0x4e4836);}return null;};}function patchUpdates(_0x3452e0){return function(_0x127a40){try{jsonpatch[_0xdf67('0x21')](_0x127a40,_0x3452e0,!![]);}catch(_0x3f1a0d){return BPromise[_0xdf67('0x22')](_0x3f1a0d);}return _0x127a40[_0xdf67('0x23')]();};}function saveUpdates(_0x29c127,_0x5b200b){return function(_0x314f66){if(_0x314f66){return _0x314f66['update'](_0x29c127)[_0xdf67('0x24')](function(_0x2940db){return _0x2940db;});}return null;};}function removeEntity(_0x57a1af,_0x41fb5e){return function(_0x3b47e5){if(_0x3b47e5){return _0x3b47e5[_0xdf67('0x25')]()[_0xdf67('0x24')](function(){_0x57a1af[_0xdf67('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x25d334,_0x56786e){return function(_0x7a48d){if(!_0x7a48d){_0x25d334[_0xdf67('0x18')](0x194);}return _0x7a48d;};}function handleError(_0x2f541c,_0x58b025){_0x58b025=_0x58b025||0x1f4;return function(_0x379217){logger[_0xdf67('0x26')](_0x379217[_0xdf67('0x27')]);if(_0x379217[_0xdf67('0x28')]){delete _0x379217[_0xdf67('0x28')];}_0x2f541c['status'](_0x58b025)['send'](_0x379217);};}exports['index']=function(_0x14c9ab,_0x13b9cd){var _0x4947ea={},_0x10dfbc={},_0x117121={'count':0x0,'rows':[]};var _0x33e0e0=db[_0xdf67('0x29')][_0xdf67('0x2a')];_0x10dfbc[_0xdf67('0x2b')]=_['keys'](_0x33e0e0);_0x10dfbc['query']=_[_0xdf67('0x2c')](_0x14c9ab[_0xdf67('0x2d')]);_0x10dfbc['filters']=_[_0xdf67('0x2e')](_0x10dfbc['model'],_0x10dfbc[_0xdf67('0x2d')]);_0x4947ea[_0xdf67('0x2f')]=_[_0xdf67('0x2e')](_0x10dfbc['model'],qs['fields'](_0x14c9ab[_0xdf67('0x2d')][_0xdf67('0x30')]));_0x4947ea[_0xdf67('0x2f')]=_0x4947ea[_0xdf67('0x2f')][_0xdf67('0x31')]?_0x4947ea[_0xdf67('0x2f')]:_0x10dfbc[_0xdf67('0x2b')];if(!_0x14c9ab[_0xdf67('0x2d')][_0xdf67('0x32')](_0xdf67('0x33'))){_0x4947ea[_0xdf67('0x1e')]=qs[_0xdf67('0x1e')](_0x14c9ab[_0xdf67('0x2d')][_0xdf67('0x1e')]);_0x4947ea['offset']=qs[_0xdf67('0x1d')](_0x14c9ab[_0xdf67('0x2d')][_0xdf67('0x1d')]);}_0x4947ea['order']=qs[_0xdf67('0x34')](_0x14c9ab[_0xdf67('0x2d')][_0xdf67('0x34')]);_0x4947ea[_0xdf67('0x35')]=qs[_0xdf67('0x36')](_['pick'](_0x14c9ab[_0xdf67('0x2d')],_0x10dfbc[_0xdf67('0x36')]));if(_0x14c9ab['query']['filter']){_0x4947ea['where']=_[_0xdf67('0x37')](_0x4947ea[_0xdf67('0x35')],{'$or':_[_0xdf67('0x38')](_0x33e0e0,function(_0x3c53bc){if(_0x3c53bc[_0xdf67('0x39')][_0xdf67('0x3a')]!==_0xdf67('0x3b')){var _0x3cc249={};_0x3cc249[_0x3c53bc[_0xdf67('0x3c')]]={'$like':'%'+_0x14c9ab[_0xdf67('0x2d')][_0xdf67('0x3d')]+'%'};return _0x3cc249;}})});}_0x4947ea=_[_0xdf67('0x37')]({},_0x4947ea,_0x14c9ab[_0xdf67('0x3e')]);var _0x4c656c={'where':_0x4947ea[_0xdf67('0x35')]};return db[_0xdf67('0x29')][_0xdf67('0x1c')](_0x4c656c)[_0xdf67('0x24')](function(_0x57c4d5){_0x117121[_0xdf67('0x1c')]=_0x57c4d5;if(_0x14c9ab[_0xdf67('0x2d')]['includeAll']){_0x4947ea[_0xdf67('0x3f')]=[{'all':!![]}];}return db[_0xdf67('0x29')][_0xdf67('0x40')](_0x4947ea);})[_0xdf67('0x24')](function(_0x2aeea6){_0x117121[_0xdf67('0x41')]=_0x2aeea6;return _0x117121;})[_0xdf67('0x24')](respondWithFilteredResult(_0x13b9cd,_0x4947ea))[_0xdf67('0x42')](handleError(_0x13b9cd,null));};exports[_0xdf67('0x43')]=function(_0x4d8de0,_0x5f27f8){var _0x2503aa={'raw':![],'where':{'id':_0x4d8de0[_0xdf67('0x44')]['id']}},_0xf4dfff={};_0xf4dfff[_0xdf67('0x2b')]=_['keys'](db[_0xdf67('0x29')][_0xdf67('0x2a')]);_0xf4dfff[_0xdf67('0x2d')]=_[_0xdf67('0x2c')](_0x4d8de0[_0xdf67('0x2d')]);_0xf4dfff[_0xdf67('0x36')]=_[_0xdf67('0x2e')](_0xf4dfff['model'],_0xf4dfff[_0xdf67('0x2d')]);_0x2503aa['attributes']=_[_0xdf67('0x2e')](_0xf4dfff['model'],qs[_0xdf67('0x30')](_0x4d8de0[_0xdf67('0x2d')][_0xdf67('0x30')]));_0x2503aa[_0xdf67('0x2f')]=_0x2503aa[_0xdf67('0x2f')][_0xdf67('0x31')]?_0x2503aa[_0xdf67('0x2f')]:_0xf4dfff[_0xdf67('0x2b')];if(_0x4d8de0[_0xdf67('0x2d')][_0xdf67('0x45')]){_0x2503aa['include']=[{'all':!![]}];}_0x2503aa=_[_0xdf67('0x37')]({},_0x2503aa,_0x4d8de0['options']);return db['VoiceAgentReport'][_0xdf67('0x46')](_0x2503aa)[_0xdf67('0x24')](handleEntityNotFound(_0x5f27f8,null))[_0xdf67('0x24')](respondWithResult(_0x5f27f8,null))[_0xdf67('0x42')](handleError(_0x5f27f8,null));};exports[_0xdf67('0x47')]=function(_0x5b1cd8,_0x6cd53){return db['VoiceAgentReport'][_0xdf67('0x47')](_0x5b1cd8['body'],{})[_0xdf67('0x24')](respondWithResult(_0x6cd53,0xc9))[_0xdf67('0x42')](handleError(_0x6cd53,null));};exports[_0xdf67('0x48')]=function(_0x265253,_0x297ec0){if(_0x265253[_0xdf67('0x49')]['id']){delete _0x265253[_0xdf67('0x49')]['id'];}return db[_0xdf67('0x29')][_0xdf67('0x46')]({'where':{'id':_0x265253[_0xdf67('0x44')]['id']}})[_0xdf67('0x24')](handleEntityNotFound(_0x297ec0,null))[_0xdf67('0x24')](saveUpdates(_0x265253['body'],null))['then'](respondWithResult(_0x297ec0,null))[_0xdf67('0x42')](handleError(_0x297ec0,null));};exports[_0xdf67('0x25')]=function(_0x1dd273,_0x322864){return db[_0xdf67('0x29')][_0xdf67('0x46')]({'where':{'id':_0x1dd273['params']['id']}})['then'](handleEntityNotFound(_0x322864,null))[_0xdf67('0x24')](removeEntity(_0x322864,null))[_0xdf67('0x42')](handleError(_0x322864,null));};exports[_0xdf67('0x4a')]=function(_0x294d91,_0x2c0926){return db[_0xdf67('0x29')][_0xdf67('0x4a')]()[_0xdf67('0x24')](respondWithResult(_0x2c0926,null))[_0xdf67('0x42')](handleError(_0x2c0926,null));};
\ No newline at end of file
+var _0xb9ee=['map','type','VIRTUAL','field','filter','merge','options','includeAll','include','findAll','rows','catch','show','params','rawAttributes','find','create','body','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','mustache','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/environment','sendStatus','status','end','count','offset','Content-Range','json','apply','save','then','destroy','name','send','index','VoiceAgentReport','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xb9ee,0x9d));var _0xeb9e=function(_0x318f1f,_0x4a62d9){_0x318f1f=_0x318f1f-0x0;var _0x99ce5f=_0xb9ee[_0x318f1f];return _0x99ce5f;};'use strict';var pdf=require(_0xeb9e('0x0'));var emlformat=require(_0xeb9e('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xeb9e('0x2'));var jsonpatch=require(_0xeb9e('0x3'));var rp=require(_0xeb9e('0x4'));var moment=require(_0xeb9e('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xeb9e('0x6'));var util=require('util');var path=require('path');var sox=require(_0xeb9e('0x7'));var csv=require(_0xeb9e('0x8'));var ejs=require(_0xeb9e('0x9'));var fs=require('fs');var _=require(_0xeb9e('0xa'));var squel=require(_0xeb9e('0xb'));var crypto=require(_0xeb9e('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xeb9e('0xd'));var toCsv=require(_0xeb9e('0x8'));var querystring=require(_0xeb9e('0xe'));var Papa=require('papaparse');var Redis=require(_0xeb9e('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xeb9e('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xeb9e('0x11'))(_0xeb9e('0x12'));var utils=require('../../config/utils');var config=require(_0xeb9e('0x13'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xbc8ec9,_0x35a88a){_0x35a88a=_0x35a88a||0xcc;return function(_0x3f7463){if(_0x3f7463){return _0xbc8ec9[_0xeb9e('0x14')](_0x35a88a);}return _0xbc8ec9[_0xeb9e('0x15')](_0x35a88a)[_0xeb9e('0x16')]();};}function respondWithResult(_0x644d7c,_0xc2086c){_0xc2086c=_0xc2086c||0xc8;return function(_0x52ac8c){if(_0x52ac8c){return _0x644d7c['status'](_0xc2086c)['json'](_0x52ac8c);}};}function respondWithFilteredResult(_0x5e54a2,_0x205b5a){return function(_0x44f722){if(_0x44f722){var _0x4950e3=_0x44f722[_0xeb9e('0x17')],_0x1a1ac0=_0x205b5a[_0xeb9e('0x18')],_0x4e87a7=_0x205b5a[_0xeb9e('0x18')]+_0x205b5a['limit'],_0x1cef2f;if(_0x4e87a7>=_0x4950e3){_0x4e87a7=_0x4950e3;_0x1cef2f=0xc8;}else{_0x1cef2f=0xce;}_0x5e54a2['status'](_0x1cef2f);return _0x5e54a2['set'](_0xeb9e('0x19'),_0x1a1ac0+'-'+_0x4e87a7+'/'+_0x4950e3)[_0xeb9e('0x1a')](_0x44f722);}return null;};}function patchUpdates(_0x4be822){return function(_0x51d5ce){try{jsonpatch[_0xeb9e('0x1b')](_0x51d5ce,_0x4be822,!![]);}catch(_0x312a89){return BPromise['reject'](_0x312a89);}return _0x51d5ce[_0xeb9e('0x1c')]();};}function saveUpdates(_0x4666a2,_0x875034){return function(_0x30ec6a){if(_0x30ec6a){return _0x30ec6a['update'](_0x4666a2)[_0xeb9e('0x1d')](function(_0x30ca9d){return _0x30ca9d;});}return null;};}function removeEntity(_0xa6731c,_0x46af50){return function(_0x48e541){if(_0x48e541){return _0x48e541[_0xeb9e('0x1e')]()[_0xeb9e('0x1d')](function(){_0xa6731c[_0xeb9e('0x15')](0xcc)[_0xeb9e('0x16')]();});}};}function handleEntityNotFound(_0x2bc977,_0x2b53ab){return function(_0x26e50a){if(!_0x26e50a){_0x2bc977[_0xeb9e('0x14')](0x194);}return _0x26e50a;};}function handleError(_0xc190bc,_0x2240ca){_0x2240ca=_0x2240ca||0x1f4;return function(_0x16034f){logger['error'](_0x16034f['stack']);if(_0x16034f[_0xeb9e('0x1f')]){delete _0x16034f[_0xeb9e('0x1f')];}_0xc190bc[_0xeb9e('0x15')](_0x2240ca)[_0xeb9e('0x20')](_0x16034f);};}exports[_0xeb9e('0x21')]=function(_0x128aaf,_0x30140c){var _0x45493b={},_0x3368b6={},_0x379739={'count':0x0,'rows':[]};var _0x2eeed0=db[_0xeb9e('0x22')]['rawAttributes'];_0x3368b6[_0xeb9e('0x23')]=_['keys'](_0x2eeed0);_0x3368b6['query']=_[_0xeb9e('0x24')](_0x128aaf[_0xeb9e('0x25')]);_0x3368b6[_0xeb9e('0x26')]=_[_0xeb9e('0x27')](_0x3368b6[_0xeb9e('0x23')],_0x3368b6[_0xeb9e('0x25')]);_0x45493b[_0xeb9e('0x28')]=_['intersection'](_0x3368b6[_0xeb9e('0x23')],qs[_0xeb9e('0x29')](_0x128aaf['query']['fields']));_0x45493b[_0xeb9e('0x28')]=_0x45493b['attributes'][_0xeb9e('0x2a')]?_0x45493b[_0xeb9e('0x28')]:_0x3368b6['model'];if(!_0x128aaf[_0xeb9e('0x25')][_0xeb9e('0x2b')](_0xeb9e('0x2c'))){_0x45493b[_0xeb9e('0x2d')]=qs[_0xeb9e('0x2d')](_0x128aaf[_0xeb9e('0x25')][_0xeb9e('0x2d')]);_0x45493b[_0xeb9e('0x18')]=qs[_0xeb9e('0x18')](_0x128aaf[_0xeb9e('0x25')][_0xeb9e('0x18')]);}_0x45493b[_0xeb9e('0x2e')]=qs[_0xeb9e('0x2f')](_0x128aaf[_0xeb9e('0x25')][_0xeb9e('0x2f')]);_0x45493b[_0xeb9e('0x30')]=qs[_0xeb9e('0x26')](_[_0xeb9e('0x31')](_0x128aaf['query'],_0x3368b6[_0xeb9e('0x26')]));if(_0x128aaf[_0xeb9e('0x25')]['filter']){_0x45493b[_0xeb9e('0x30')]=_['merge'](_0x45493b[_0xeb9e('0x30')],{'$or':_[_0xeb9e('0x32')](_0x2eeed0,function(_0x3a6959){if(_0x3a6959[_0xeb9e('0x33')]['key']!==_0xeb9e('0x34')){var _0x5b4061={};_0x5b4061[_0x3a6959[_0xeb9e('0x35')]]={'$like':'%'+_0x128aaf[_0xeb9e('0x25')][_0xeb9e('0x36')]+'%'};return _0x5b4061;}})});}_0x45493b=_[_0xeb9e('0x37')]({},_0x45493b,_0x128aaf[_0xeb9e('0x38')]);var _0x1f8db5={'where':_0x45493b[_0xeb9e('0x30')]};return db[_0xeb9e('0x22')][_0xeb9e('0x17')](_0x1f8db5)[_0xeb9e('0x1d')](function(_0x1b2d96){_0x379739[_0xeb9e('0x17')]=_0x1b2d96;if(_0x128aaf[_0xeb9e('0x25')][_0xeb9e('0x39')]){_0x45493b[_0xeb9e('0x3a')]=[{'all':!![]}];}return db[_0xeb9e('0x22')][_0xeb9e('0x3b')](_0x45493b);})['then'](function(_0x49b5c3){_0x379739[_0xeb9e('0x3c')]=_0x49b5c3;return _0x379739;})[_0xeb9e('0x1d')](respondWithFilteredResult(_0x30140c,_0x45493b))[_0xeb9e('0x3d')](handleError(_0x30140c,null));};exports[_0xeb9e('0x3e')]=function(_0x29f614,_0x405a35){var _0x3cb699={'raw':![],'where':{'id':_0x29f614[_0xeb9e('0x3f')]['id']}},_0x1f1474={};_0x1f1474['model']=_[_0xeb9e('0x24')](db[_0xeb9e('0x22')][_0xeb9e('0x40')]);_0x1f1474[_0xeb9e('0x25')]=_['keys'](_0x29f614[_0xeb9e('0x25')]);_0x1f1474[_0xeb9e('0x26')]=_[_0xeb9e('0x27')](_0x1f1474['model'],_0x1f1474[_0xeb9e('0x25')]);_0x3cb699['attributes']=_[_0xeb9e('0x27')](_0x1f1474['model'],qs['fields'](_0x29f614[_0xeb9e('0x25')][_0xeb9e('0x29')]));_0x3cb699['attributes']=_0x3cb699[_0xeb9e('0x28')][_0xeb9e('0x2a')]?_0x3cb699['attributes']:_0x1f1474['model'];if(_0x29f614[_0xeb9e('0x25')]['includeAll']){_0x3cb699[_0xeb9e('0x3a')]=[{'all':!![]}];}_0x3cb699=_[_0xeb9e('0x37')]({},_0x3cb699,_0x29f614['options']);return db[_0xeb9e('0x22')][_0xeb9e('0x41')](_0x3cb699)[_0xeb9e('0x1d')](handleEntityNotFound(_0x405a35,null))[_0xeb9e('0x1d')](respondWithResult(_0x405a35,null))[_0xeb9e('0x3d')](handleError(_0x405a35,null));};exports[_0xeb9e('0x42')]=function(_0xd8022f,_0x1c23f8){return db[_0xeb9e('0x22')][_0xeb9e('0x42')](_0xd8022f[_0xeb9e('0x43')],{})['then'](respondWithResult(_0x1c23f8,0xc9))['catch'](handleError(_0x1c23f8,null));};exports['update']=function(_0x111627,_0x47cd13){if(_0x111627[_0xeb9e('0x43')]['id']){delete _0x111627['body']['id'];}return db[_0xeb9e('0x22')]['find']({'where':{'id':_0x111627['params']['id']}})['then'](handleEntityNotFound(_0x47cd13,null))[_0xeb9e('0x1d')](saveUpdates(_0x111627[_0xeb9e('0x43')],null))[_0xeb9e('0x1d')](respondWithResult(_0x47cd13,null))[_0xeb9e('0x3d')](handleError(_0x47cd13,null));};exports[_0xeb9e('0x1e')]=function(_0x38f2ea,_0x13f278){return db[_0xeb9e('0x22')]['find']({'where':{'id':_0x38f2ea[_0xeb9e('0x3f')]['id']}})[_0xeb9e('0x1d')](handleEntityNotFound(_0x13f278,null))[_0xeb9e('0x1d')](removeEntity(_0x13f278,null))['catch'](handleError(_0x13f278,null));};exports['describe']=function(_0x4cb069,_0x3fe0a7){return db['VoiceAgentReport'][_0xeb9e('0x44')]()[_0xeb9e('0x1d')](respondWithResult(_0x3fe0a7,null))[_0xeb9e('0x3d')](handleError(_0x3fe0a7,null));};
\ No newline at end of file
index e17d905..6d911f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdddc=['report_agent','uniqueid','destuniqueid','util','../../config/logger','api','moment','bluebird','path','rimraf','../../config/environment','./voiceAgentReport.attributes','exports','define','VoiceAgentReport'];(function(_0x561771,_0x554760){var _0x54d16e=function(_0x381c1f){while(--_0x381c1f){_0x561771['push'](_0x561771['shift']());}};_0x54d16e(++_0x554760);}(_0xdddc,0x120));var _0xcddd=function(_0x235870,_0x5950a0){_0x235870=_0x235870-0x0;var _0x3ca957=_0xdddc[_0x235870];return _0x3ca957;};'use strict';var _=require('lodash');var util=require(_0xcddd('0x0'));var logger=require(_0xcddd('0x1'))(_0xcddd('0x2'));var moment=require(_0xcddd('0x3'));var BPromise=require(_0xcddd('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xcddd('0x5'));var rimraf=require(_0xcddd('0x6'));var config=require(_0xcddd('0x7'));var attributes=require(_0xcddd('0x8'));module[_0xcddd('0x9')]=function(_0x48c486,_0x20923b){return _0x48c486[_0xcddd('0xa')](_0xcddd('0xb'),attributes,{'tableName':_0xcddd('0xc'),'paranoid':![],'indexes':[{'fields':[_0xcddd('0xd'),_0xcddd('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xae64=['util','bluebird','request-promise','path','rimraf','../../config/environment','./voiceAgentReport.attributes','exports','report_agent','uniqueid','destuniqueid','lodash'];(function(_0x505d30,_0x34a072){var _0x499c47=function(_0x1da028){while(--_0x1da028){_0x505d30['push'](_0x505d30['shift']());}};_0x499c47(++_0x34a072);}(_0xae64,0x1af));var _0x4ae6=function(_0x38382f,_0x51183d){_0x38382f=_0x38382f-0x0;var _0x152e8b=_0xae64[_0x38382f];return _0x152e8b;};'use strict';var _=require(_0x4ae6('0x0'));var util=require(_0x4ae6('0x1'));var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0x4ae6('0x2'));var rp=require(_0x4ae6('0x3'));var fs=require('fs');var path=require(_0x4ae6('0x4'));var rimraf=require(_0x4ae6('0x5'));var config=require(_0x4ae6('0x6'));var attributes=require(_0x4ae6('0x7'));module[_0x4ae6('0x8')]=function(_0x543b75,_0x89756d){return _0x543b75['define']('VoiceAgentReport',attributes,{'tableName':_0x4ae6('0x9'),'paranoid':![],'indexes':[{'fields':[_0x4ae6('0xa'),_0x4ae6('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index 34e6940..c35a80b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['catch','CreateVoiceAgentReport','create','options','raw','UpdateVoiceAgentReport','update','body','where','attributes','limit','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info','VoiceAgentReport,\x20%s,\x20%s','request\x20sent','debug','VoiceAgentReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result'];(function(_0x417792,_0x1ea17e){var _0x1836cb=function(_0x1849fe){while(--_0x1849fe){_0x417792['push'](_0x417792['shift']());}};_0x1836cb(++_0x1ea17e);}(_0x9957,0x93));var _0x7995=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x9957[_0x4cf98e];return _0x1623ac;};'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']('VoiceAgentReport,\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['VoiceAgentReport'][_0x7995('0x19')](_0x291317['body'],{'raw':_0x291317['options']?_0x291317[_0x7995('0x1a')][_0x7995('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0x3a9b54){logger['info']('CreateVoiceAgentReport',_0x291317);logger[_0x7995('0x10')](_0x7995('0x18'),_0x291317,JSON[_0x7995('0x12')](_0x3a9b54));_0x37a7d4(_0x3a9b54);})[_0x7995('0x17')](function(_0x460924){logger[_0x7995('0x13')]('CreateVoiceAgentReport',_0x460924[_0x7995('0x15')],_0x291317);_0x4faa60(_0x1e1415[_0x7995('0x13')](0x1f4,_0x460924[_0x7995('0x15')]));});});};exports[_0x7995('0x1c')]=function(_0x563799){var _0x13bc35=this;return new Promise(function(_0x475351,_0x472195){return db['VoiceAgentReport'][_0x7995('0x1d')](_0x563799[_0x7995('0x1e')],{'raw':_0x563799[_0x7995('0x1a')]?_0x563799[_0x7995('0x1a')][_0x7995('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x563799[_0x7995('0x1a')]?_0x563799['options'][_0x7995('0x1f')]||null:null,'attributes':_0x563799['options']?_0x563799[_0x7995('0x1a')][_0x7995('0x20')]||null:null,'limit':_0x563799[_0x7995('0x1a')]?_0x563799[_0x7995('0x1a')][_0x7995('0x21')]||null:null})['then'](function(_0x9b2a15){logger['info'](_0x7995('0x1c'),_0x563799);logger[_0x7995('0x10')](_0x7995('0x1c'),_0x563799,JSON['stringify'](_0x9b2a15));_0x475351(_0x9b2a15);})['catch'](function(_0x48e573){logger[_0x7995('0x13')](_0x7995('0x1c'),_0x48e573[_0x7995('0x15')],_0x563799);_0x472195(_0x13bc35[_0x7995('0x13')](0x1f4,_0x48e573[_0x7995('0x15')]));});});};
\ 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(_0x5bd5fc,_0x57597){var _0x420110=function(_0x3d99d8){while(--_0x3d99d8){_0x5bd5fc['push'](_0x5bd5fc['shift']());}};_0x420110(++_0x57597);}(_0x814b,0x1a2));var _0xb814=function(_0x4c29f9,_0x5bddd4){_0x4c29f9=_0x4c29f9-0x0;var _0x4e17b8=_0x814b[_0x4c29f9];return _0x4e17b8;};'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 170507a..638cec2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7966=['/:id','show','create','put','update','delete','exports','multer','util','path','connect-timeout','express','Router','../../config/environment','isAuthenticated','index','get','/describe','describe'];(function(_0x6b61b0,_0x3154ef){var _0x552ebe=function(_0x1df269){while(--_0x1df269){_0x6b61b0['push'](_0x6b61b0['shift']());}};_0x552ebe(++_0x3154ef);}(_0x7966,0x183));var _0x6796=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x7966[_0x20a584];return _0x4b41a8;};'use strict';var multer=require(_0x6796('0x0'));var util=require(_0x6796('0x1'));var path=require(_0x6796('0x2'));var timeout=require(_0x6796('0x3'));var express=require(_0x6796('0x4'));var router=express[_0x6796('0x5')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x6796('0x6'));var controller=require('./voiceCallReport.controller');router['get']('/',auth[_0x6796('0x7')](),controller[_0x6796('0x8')]);router[_0x6796('0x9')](_0x6796('0xa'),auth[_0x6796('0x7')](),controller[_0x6796('0xb')]);router['get'](_0x6796('0xc'),auth[_0x6796('0x7')](),controller[_0x6796('0xd')]);router['post']('/',auth[_0x6796('0x7')](),controller[_0x6796('0xe')]);router[_0x6796('0xf')]('/:id',auth[_0x6796('0x7')](),controller[_0x6796('0x10')]);router[_0x6796('0x11')](_0x6796('0xc'),auth[_0x6796('0x7')](),controller['destroy']);module[_0x6796('0x12')]=router;
\ No newline at end of file
+var _0x3769=['create','put','update','delete','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./voiceCallReport.controller','isAuthenticated','get','/describe','describe','/:id','show','post'];(function(_0x442273,_0x40ebfc){var _0x528128=function(_0x3eb156){while(--_0x3eb156){_0x442273['push'](_0x442273['shift']());}};_0x528128(++_0x40ebfc);}(_0x3769,0x1a6));var _0x9376=function(_0xf1db03,_0x4d9879){_0xf1db03=_0xf1db03-0x0;var _0x329333=_0x3769[_0xf1db03];return _0x329333;};'use strict';var multer=require('multer');var util=require(_0x9376('0x0'));var path=require(_0x9376('0x1'));var timeout=require(_0x9376('0x2'));var express=require(_0x9376('0x3'));var router=express[_0x9376('0x4')]();var auth=require(_0x9376('0x5'));var interaction=require(_0x9376('0x6'));var config=require('../../config/environment');var controller=require(_0x9376('0x7'));router['get']('/',auth[_0x9376('0x8')](),controller['index']);router[_0x9376('0x9')](_0x9376('0xa'),auth[_0x9376('0x8')](),controller[_0x9376('0xb')]);router['get'](_0x9376('0xc'),auth[_0x9376('0x8')](),controller[_0x9376('0xd')]);router[_0x9376('0xe')]('/',auth[_0x9376('0x8')](),controller[_0x9376('0xf')]);router[_0x9376('0x10')]('/:id',auth[_0x9376('0x8')](),controller[_0x9376('0x11')]);router[_0x9376('0x12')](_0x9376('0xc'),auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 7cb1cbd..9083576 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1b39=['exports','STRING','inbound','outbound','inbound-fax','outbound-fax','dialer','DATE','INTEGER','sequelize'];(function(_0x2379b6,_0xd9dec4){var _0x25b6a5=function(_0x2acb01){while(--_0x2acb01){_0x2379b6['push'](_0x2379b6['shift']());}};_0x25b6a5(++_0xd9dec4);}(_0x1b39,0x1a3));var _0x91b3=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x1b39[_0x20a584];return _0x4b41a8;};'use strict';var Sequelize=require(_0x91b3('0x0'));module[_0x91b3('0x1')]={'uniqueid':{'type':Sequelize[_0x91b3('0x2')]},'type':{'type':Sequelize['ENUM'](_0x91b3('0x3'),'internal',_0x91b3('0x4'),_0x91b3('0x5'),_0x91b3('0x6'),_0x91b3('0x7'))},'tag':{'type':Sequelize[_0x91b3('0x2')]},'accountcode':{'type':Sequelize[_0x91b3('0x2')]},'source':{'type':Sequelize[_0x91b3('0x2')]},'destination':{'type':Sequelize[_0x91b3('0x2')]},'destinationcontext':{'type':Sequelize[_0x91b3('0x2')]},'callerid':{'type':Sequelize[_0x91b3('0x2')]},'channel':{'type':Sequelize[_0x91b3('0x2')]},'destinationchannel':{'type':Sequelize[_0x91b3('0x2')]},'lastapplication':{'type':Sequelize[_0x91b3('0x2')]},'lastdata':{'type':Sequelize['TEXT']},'starttime':{'type':Sequelize['DATE']},'systemanswertime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0x91b3('0x8')]},'endtime':{'type':Sequelize[_0x91b3('0x8')]},'duration':{'type':Sequelize[_0x91b3('0x9')]},'billableseconds':{'type':Sequelize['INTEGER']},'mohtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'disposition':{'type':Sequelize['STRING']},'amaflags':{'type':Sequelize['STRING']},'userfield':{'type':Sequelize[_0x91b3('0x2')]},'userDisposition':{'type':Sequelize[_0x91b3('0x2')]},'note':{'type':Sequelize[_0x91b3('0x2')]},'prefix':{'type':Sequelize[_0x91b3('0x2')]},'routeid':{'type':Sequelize[_0x91b3('0x9')]},'sipcallid':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xf417=['TEXT','DATE','INTEGER','sequelize','exports','STRING','ENUM','internal','inbound-fax','outbound-fax','dialer'];(function(_0x156a16,_0x1535dc){var _0x49f131=function(_0x5c7ab9){while(--_0x5c7ab9){_0x156a16['push'](_0x156a16['shift']());}};_0x49f131(++_0x1535dc);}(_0xf417,0x1b0));var _0x7f41=function(_0x28b61c,_0x3d2a06){_0x28b61c=_0x28b61c-0x0;var _0x5674c2=_0xf417[_0x28b61c];return _0x5674c2;};'use strict';var Sequelize=require(_0x7f41('0x0'));module[_0x7f41('0x1')]={'uniqueid':{'type':Sequelize[_0x7f41('0x2')]},'type':{'type':Sequelize[_0x7f41('0x3')]('inbound',_0x7f41('0x4'),'outbound',_0x7f41('0x5'),_0x7f41('0x6'),_0x7f41('0x7'))},'tag':{'type':Sequelize[_0x7f41('0x2')]},'accountcode':{'type':Sequelize[_0x7f41('0x2')]},'source':{'type':Sequelize[_0x7f41('0x2')]},'destination':{'type':Sequelize[_0x7f41('0x2')]},'destinationcontext':{'type':Sequelize[_0x7f41('0x2')]},'callerid':{'type':Sequelize[_0x7f41('0x2')]},'channel':{'type':Sequelize[_0x7f41('0x2')]},'destinationchannel':{'type':Sequelize['STRING']},'lastapplication':{'type':Sequelize['STRING']},'lastdata':{'type':Sequelize[_0x7f41('0x8')]},'starttime':{'type':Sequelize['DATE']},'systemanswertime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0x7f41('0x9')]},'endtime':{'type':Sequelize[_0x7f41('0x9')]},'duration':{'type':Sequelize[_0x7f41('0xa')]},'billableseconds':{'type':Sequelize['INTEGER']},'mohtime':{'type':Sequelize[_0x7f41('0xa')],'defaultValue':0x0},'disposition':{'type':Sequelize[_0x7f41('0x2')]},'amaflags':{'type':Sequelize[_0x7f41('0x2')]},'userfield':{'type':Sequelize[_0x7f41('0x2')]},'userDisposition':{'type':Sequelize[_0x7f41('0x2')]},'note':{'type':Sequelize[_0x7f41('0x2')]},'prefix':{'type':Sequelize['STRING']},'routeid':{'type':Sequelize[_0x7f41('0xa')]},'sipcallid':{'type':Sequelize[_0x7f41('0x2')]}};
\ No newline at end of file
index 2588657..16e6a3f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['find','create','body','params','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','VoiceCallReport','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','nolimit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','options','includeAll','include','alias','User','findAll','catch','show'];(function(_0x2294c6,_0x2f27fe){var _0x50ffcc=function(_0x36d119){while(--_0x36d119){_0x2294c6['push'](_0x2294c6['shift']());}};_0x50ffcc(++_0x2f27fe);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3ce3c,_0x319337){_0x3ce3c=_0x3ce3c-0x0;var _0x55a2c9=_0xa9e0[_0x3ce3c];return _0x55a2c9;};'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['VoiceCallReport'][_0x0a9e('0x17')](_0x381c37)[_0x0a9e('0x1f')](function(_0x3cae){_0x45a1e7['count']=_0x3cae;if(_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x39')]){_0x384319[_0x0a9e('0x3a')]=[{'attributes':['id','name','fullname',_0x0a9e('0x3b')],'model':db[_0x0a9e('0x3c')],'as':'User'}];}return db[_0x0a9e('0x24')][_0x0a9e('0x3d')](_0x384319);})[_0x0a9e('0x1f')](function(_0x148f55){_0x45a1e7['rows']=_0x148f55;return _0x45a1e7;})['then'](respondWithFilteredResult(_0x526cf3,_0x384319))[_0x0a9e('0x3e')](handleError(_0x526cf3,null));};exports[_0x0a9e('0x3f')]=function(_0x53f3ee,_0x183991){var _0x1dec2e={'raw':!![],'where':{'id':_0x53f3ee['params']['id']}},_0x1459bb={};_0x1459bb[_0x0a9e('0x26')]=_[_0x0a9e('0x27')](db[_0x0a9e('0x24')][_0x0a9e('0x25')]);_0x1459bb[_0x0a9e('0x28')]=_[_0x0a9e('0x27')](_0x53f3ee[_0x0a9e('0x28')]);_0x1459bb[_0x0a9e('0x29')]=_[_0x0a9e('0x2b')](_0x1459bb[_0x0a9e('0x26')],_0x1459bb[_0x0a9e('0x28')]);_0x1dec2e[_0x0a9e('0x2a')]=_[_0x0a9e('0x2b')](_0x1459bb[_0x0a9e('0x26')],qs[_0x0a9e('0x2c')](_0x53f3ee['query']['fields']));_0x1dec2e[_0x0a9e('0x2a')]=_0x1dec2e[_0x0a9e('0x2a')][_0x0a9e('0x2d')]?_0x1dec2e[_0x0a9e('0x2a')]:_0x1459bb[_0x0a9e('0x26')];if(_0x53f3ee[_0x0a9e('0x28')][_0x0a9e('0x39')]){_0x1dec2e[_0x0a9e('0x3a')]=[{'all':!![]}];}_0x1dec2e=_[_0x0a9e('0x34')]({},_0x1dec2e,_0x53f3ee[_0x0a9e('0x38')]);return db[_0x0a9e('0x24')][_0x0a9e('0x40')](_0x1dec2e)['then'](handleEntityNotFound(_0x183991,null))[_0x0a9e('0x1f')](respondWithResult(_0x183991,null))[_0x0a9e('0x3e')](handleError(_0x183991,null));};exports[_0x0a9e('0x41')]=function(_0xfbd5ad,_0x2e8caf){return db[_0x0a9e('0x24')][_0x0a9e('0x41')](_0xfbd5ad[_0x0a9e('0x42')],{})['then'](respondWithResult(_0x2e8caf,0xc9))[_0x0a9e('0x3e')](handleError(_0x2e8caf,null));};exports['destroy']=function(_0x473dc8,_0x476688){return db[_0x0a9e('0x24')]['find']({'where':{'id':_0x473dc8[_0x0a9e('0x43')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x476688,null))[_0x0a9e('0x1f')](removeEntity(_0x476688,null))[_0x0a9e('0x3e')](handleError(_0x476688,null));};exports[_0x0a9e('0x44')]=function(_0x37be73,_0x45bf7f){return db['VoiceCallReport'][_0x0a9e('0x44')]()[_0x0a9e('0x1f')](respondWithResult(_0x45bf7f,null))[_0x0a9e('0x3e')](handleError(_0x45bf7f,null));};exports[_0x0a9e('0x45')]=function(_0x409789,_0x992c77){if(_0x409789[_0x0a9e('0x42')][_0x0a9e('0x46')]){delete _0x409789[_0x0a9e('0x42')]['uniqueid'];}return db[_0x0a9e('0x24')][_0x0a9e('0x40')]({'where':{'uniqueid':_0x409789['params']['id'],'UserId':{'$or':[null,_0x409789['user']['id']]}}})['then'](handleEntityNotFound(_0x992c77,null))[_0x0a9e('0x1f')](saveUpdates(_0x409789[_0x0a9e('0x42')],null))[_0x0a9e('0x1f')](respondWithResult(_0x992c77,null))[_0x0a9e('0x3e')](handleError(_0x992c77,null));};
\ No newline at end of file
+var _0x34e8=['../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','status','set','Content-Range','apply','reject','save','update','then','stack','name','send','query','keys','intersection','model','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where','filters','filter','merge','key','VIRTUAL','field','options','VoiceCallReport','includeAll','fullname','alias','User','findAll','catch','rawAttributes','length','include','create','body','destroy','find','params','describe','uniqueid','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','ioredis'];(function(_0x38c9be,_0x443d61){var _0x445e13=function(_0x148ef4){while(--_0x148ef4){_0x38c9be['push'](_0x38c9be['shift']());}};_0x445e13(++_0x443d61);}(_0x34e8,0x12c));var _0x834e=function(_0x12208f,_0x305937){_0x12208f=_0x12208f-0x0;var _0x39fa4b=_0x34e8[_0x12208f];return _0x39fa4b;};'use strict';var pdf=require(_0x834e('0x0'));var emlformat=require(_0x834e('0x1'));var rimraf=require(_0x834e('0x2'));var zipdir=require(_0x834e('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x834e('0x4'));var moment=require(_0x834e('0x5'));var BPromise=require(_0x834e('0x6'));var Mustache=require(_0x834e('0x7'));var util=require(_0x834e('0x8'));var path=require(_0x834e('0x9'));var sox=require(_0x834e('0xa'));var csv=require('to-csv');var ejs=require(_0x834e('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x834e('0xc'));var crypto=require(_0x834e('0xd'));var jsforce=require(_0x834e('0xe'));var deskjs=require(_0x834e('0xf'));var toCsv=require(_0x834e('0x10'));var querystring=require(_0x834e('0x11'));var Papa=require(_0x834e('0x12'));var Redis=require(_0x834e('0x13'));var authService=require(_0x834e('0x14'));var qs=require(_0x834e('0x15'));var hardwareService=require(_0x834e('0x16'));var logger=require(_0x834e('0x17'))(_0x834e('0x18'));var utils=require(_0x834e('0x19'));var config=require(_0x834e('0x1a'));var db=require(_0x834e('0x1b'))['db'];function respondWithStatusCode(_0x2fd95c,_0x538bb3){_0x538bb3=_0x538bb3||0xcc;return function(_0x5e5b6d){if(_0x5e5b6d){return _0x2fd95c[_0x834e('0x1c')](_0x538bb3);}return _0x2fd95c['status'](_0x538bb3)[_0x834e('0x1d')]();};}function respondWithResult(_0x2d95f2,_0x28e659){_0x28e659=_0x28e659||0xc8;return function(_0x21cc0a){if(_0x21cc0a){return _0x2d95f2['status'](_0x28e659)[_0x834e('0x1e')](_0x21cc0a);}};}function respondWithFilteredResult(_0x302cbd,_0x57274a){return function(_0x316205){if(_0x316205){var _0x4a9cdc=_0x316205[_0x834e('0x1f')],_0x38a8cd=_0x57274a[_0x834e('0x20')],_0x36d443=_0x57274a[_0x834e('0x20')]+_0x57274a['limit'],_0x478afe;if(_0x36d443>=_0x4a9cdc){_0x36d443=_0x4a9cdc;_0x478afe=0xc8;}else{_0x478afe=0xce;}_0x302cbd[_0x834e('0x21')](_0x478afe);return _0x302cbd[_0x834e('0x22')](_0x834e('0x23'),_0x38a8cd+'-'+_0x36d443+'/'+_0x4a9cdc)[_0x834e('0x1e')](_0x316205);}return null;};}function patchUpdates(_0x237947){return function(_0x254677){try{jsonpatch[_0x834e('0x24')](_0x254677,_0x237947,!![]);}catch(_0x595515){return BPromise[_0x834e('0x25')](_0x595515);}return _0x254677[_0x834e('0x26')]();};}function saveUpdates(_0x113ff4,_0x325a99){return function(_0x4ab05d){if(_0x4ab05d){return _0x4ab05d[_0x834e('0x27')](_0x113ff4)[_0x834e('0x28')](function(_0x5a05c0){return _0x5a05c0;});}return null;};}function removeEntity(_0x1b4bdf,_0x28d687){return function(_0x8d406e){if(_0x8d406e){return _0x8d406e['destroy']()['then'](function(){_0x1b4bdf[_0x834e('0x21')](0xcc)[_0x834e('0x1d')]();});}};}function handleEntityNotFound(_0x589dde,_0x25ee1d){return function(_0x1dc1e0){if(!_0x1dc1e0){_0x589dde['sendStatus'](0x194);}return _0x1dc1e0;};}function handleError(_0x3bc4f7,_0x2e1983){_0x2e1983=_0x2e1983||0x1f4;return function(_0x338636){logger['error'](_0x338636[_0x834e('0x29')]);if(_0x338636[_0x834e('0x2a')]){delete _0x338636['name'];}_0x3bc4f7['status'](_0x2e1983)[_0x834e('0x2b')](_0x338636);};}exports['index']=function(_0x2826ec,_0x3f1b0b){var _0x3db026={},_0x2cc2eb={},_0x3cd928={'count':0x0,'rows':[]};var _0x130cc5=db['VoiceCallReport']['rawAttributes'];_0x2cc2eb['model']=_['keys'](_0x130cc5);_0x2cc2eb[_0x834e('0x2c')]=_[_0x834e('0x2d')](_0x2826ec[_0x834e('0x2c')]);_0x2cc2eb['filters']=_[_0x834e('0x2e')](_0x2cc2eb[_0x834e('0x2f')],_0x2cc2eb[_0x834e('0x2c')]);_0x3db026[_0x834e('0x30')]=_[_0x834e('0x2e')](_0x2cc2eb[_0x834e('0x2f')],qs[_0x834e('0x31')](_0x2826ec[_0x834e('0x2c')][_0x834e('0x31')]));_0x3db026['attributes']=_0x3db026[_0x834e('0x30')]['length']?_0x3db026[_0x834e('0x30')]:_0x2cc2eb[_0x834e('0x2f')];if(!_0x2826ec[_0x834e('0x2c')][_0x834e('0x32')](_0x834e('0x33'))){_0x3db026[_0x834e('0x34')]=qs[_0x834e('0x34')](_0x2826ec[_0x834e('0x2c')][_0x834e('0x34')]);_0x3db026[_0x834e('0x20')]=qs['offset'](_0x2826ec[_0x834e('0x2c')][_0x834e('0x20')]);}_0x3db026[_0x834e('0x35')]=qs[_0x834e('0x36')](_0x2826ec['query'][_0x834e('0x36')]);_0x3db026[_0x834e('0x37')]=qs['filters'](_['pick'](_0x2826ec['query'],_0x2cc2eb[_0x834e('0x38')]));if(_0x2826ec[_0x834e('0x2c')][_0x834e('0x39')]){_0x3db026[_0x834e('0x37')]=_[_0x834e('0x3a')](_0x3db026[_0x834e('0x37')],{'$or':_['map'](_0x130cc5,function(_0x2c2d94){if(_0x2c2d94['type'][_0x834e('0x3b')]!==_0x834e('0x3c')){var _0x47abed={};_0x47abed[_0x2c2d94[_0x834e('0x3d')]]={'$like':'%'+_0x2826ec[_0x834e('0x2c')]['filter']+'%'};return _0x47abed;}})});}_0x3db026=_['merge']({},_0x3db026,_0x2826ec[_0x834e('0x3e')]);var _0xd0d43a={'where':_0x3db026[_0x834e('0x37')]};return db[_0x834e('0x3f')][_0x834e('0x1f')](_0xd0d43a)['then'](function(_0x1c5ed6){_0x3cd928['count']=_0x1c5ed6;if(_0x2826ec['query'][_0x834e('0x40')]){_0x3db026['include']=[{'attributes':['id',_0x834e('0x2a'),_0x834e('0x41'),_0x834e('0x42')],'model':db[_0x834e('0x43')],'as':_0x834e('0x43')}];}return db['VoiceCallReport'][_0x834e('0x44')](_0x3db026);})[_0x834e('0x28')](function(_0x38f266){_0x3cd928['rows']=_0x38f266;return _0x3cd928;})[_0x834e('0x28')](respondWithFilteredResult(_0x3f1b0b,_0x3db026))[_0x834e('0x45')](handleError(_0x3f1b0b,null));};exports['show']=function(_0x1e3e71,_0x59932f){var _0x2ebfb6={'raw':!![],'where':{'id':_0x1e3e71['params']['id']}},_0x585335={};_0x585335['model']=_[_0x834e('0x2d')](db[_0x834e('0x3f')][_0x834e('0x46')]);_0x585335[_0x834e('0x2c')]=_[_0x834e('0x2d')](_0x1e3e71[_0x834e('0x2c')]);_0x585335[_0x834e('0x38')]=_['intersection'](_0x585335[_0x834e('0x2f')],_0x585335['query']);_0x2ebfb6[_0x834e('0x30')]=_['intersection'](_0x585335[_0x834e('0x2f')],qs['fields'](_0x1e3e71[_0x834e('0x2c')][_0x834e('0x31')]));_0x2ebfb6['attributes']=_0x2ebfb6[_0x834e('0x30')][_0x834e('0x47')]?_0x2ebfb6[_0x834e('0x30')]:_0x585335[_0x834e('0x2f')];if(_0x1e3e71[_0x834e('0x2c')][_0x834e('0x40')]){_0x2ebfb6[_0x834e('0x48')]=[{'all':!![]}];}_0x2ebfb6=_[_0x834e('0x3a')]({},_0x2ebfb6,_0x1e3e71[_0x834e('0x3e')]);return db[_0x834e('0x3f')]['find'](_0x2ebfb6)[_0x834e('0x28')](handleEntityNotFound(_0x59932f,null))[_0x834e('0x28')](respondWithResult(_0x59932f,null))['catch'](handleError(_0x59932f,null));};exports[_0x834e('0x49')]=function(_0x42fd90,_0x25b035){return db[_0x834e('0x3f')][_0x834e('0x49')](_0x42fd90[_0x834e('0x4a')],{})['then'](respondWithResult(_0x25b035,0xc9))['catch'](handleError(_0x25b035,null));};exports[_0x834e('0x4b')]=function(_0x1a5444,_0x30568e){return db[_0x834e('0x3f')][_0x834e('0x4c')]({'where':{'id':_0x1a5444[_0x834e('0x4d')]['id']}})[_0x834e('0x28')](handleEntityNotFound(_0x30568e,null))[_0x834e('0x28')](removeEntity(_0x30568e,null))[_0x834e('0x45')](handleError(_0x30568e,null));};exports[_0x834e('0x4e')]=function(_0xf02f0d,_0x385435){return db[_0x834e('0x3f')][_0x834e('0x4e')]()[_0x834e('0x28')](respondWithResult(_0x385435,null))[_0x834e('0x45')](handleError(_0x385435,null));};exports[_0x834e('0x27')]=function(_0x32b8f7,_0x420841){if(_0x32b8f7[_0x834e('0x4a')]['uniqueid']){delete _0x32b8f7[_0x834e('0x4a')][_0x834e('0x4f')];}return db['VoiceCallReport'][_0x834e('0x4c')]({'where':{'uniqueid':_0x32b8f7[_0x834e('0x4d')]['id'],'UserId':{'$or':[null,_0x32b8f7['user']['id']]}}})[_0x834e('0x28')](handleEntityNotFound(_0x420841,null))[_0x834e('0x28')](saveUpdates(_0x32b8f7[_0x834e('0x4a')],null))[_0x834e('0x28')](respondWithResult(_0x420841,null))[_0x834e('0x45')](handleError(_0x420841,null));};
\ No newline at end of file
index 7a8f009..679bfc1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbe28=['api','request-promise','rimraf','exports','define','VoiceCallReport','report_call','uniqueid','lodash','util','../../config/logger'];(function(_0x353ceb,_0x127a04){var _0x4c54e1=function(_0xe42bc0){while(--_0xe42bc0){_0x353ceb['push'](_0x353ceb['shift']());}};_0x4c54e1(++_0x127a04);}(_0xbe28,0xd9));var _0x8be2=function(_0x50e544,_0x24f6c6){_0x50e544=_0x50e544-0x0;var _0x2dc651=_0xbe28[_0x50e544];return _0x2dc651;};'use strict';var _=require(_0x8be2('0x0'));var util=require(_0x8be2('0x1'));var logger=require(_0x8be2('0x2'))(_0x8be2('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x8be2('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x8be2('0x5'));var config=require('../../config/environment');var attributes=require('./voiceCallReport.attributes');module[_0x8be2('0x6')]=function(_0x51b073,_0xb4c21){return _0x51b073[_0x8be2('0x7')](_0x8be2('0x8'),attributes,{'tableName':_0x8be2('0x9'),'paranoid':![],'indexes':[{'fields':[_0x8be2('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x8f0b=['VoiceCallReport','uniqueid','lodash','util','../../config/logger','api','bluebird','path','rimraf','../../config/environment','./voiceCallReport.attributes','exports','define'];(function(_0xd27395,_0x1bb91e){var _0x7f0e49=function(_0x460e44){while(--_0x460e44){_0xd27395['push'](_0xd27395['shift']());}};_0x7f0e49(++_0x1bb91e);}(_0x8f0b,0x1a2));var _0xb8f0=function(_0xefd519,_0xc62635){_0xefd519=_0xefd519-0x0;var _0x4bb882=_0x8f0b[_0xefd519];return _0x4bb882;};'use strict';var _=require(_0xb8f0('0x0'));var util=require(_0xb8f0('0x1'));var logger=require(_0xb8f0('0x2'))(_0xb8f0('0x3'));var moment=require('moment');var BPromise=require(_0xb8f0('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xb8f0('0x5'));var rimraf=require(_0xb8f0('0x6'));var config=require(_0xb8f0('0x7'));var attributes=require(_0xb8f0('0x8'));module[_0xb8f0('0x9')]=function(_0x2649fc,_0x465aa5){return _0x2649fc[_0xb8f0('0xa')](_0xb8f0('0xb'),attributes,{'tableName':'report_call','paranoid':![],'indexes':[{'fields':[_0xb8f0('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
index c7c041e..3bfaa20 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa27=['../../config/utils','jayson/promise','client','http','request','debug','VoiceCallReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','VoiceCallReport,\x20%s,\x20%s','info','result','catch','GetVoiceCallReport','options','raw','where','attributes','limit','include','map','then','CreateVoiceCallReport','VoiceCallReport','create','body','UpdateVoiceCallReport','update','moment','bluebird','randomstring','../../mysqldb'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xaa27,0xf1));var _0x7aa2=function(_0x7a7e58,_0x316889){_0x7a7e58=_0x7a7e58-0x0;var _0x379d68=_0xaa27[_0x7a7e58];return _0x379d68;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x7aa2('0x0'));var BPromise=require(_0x7aa2('0x1'));var rs=require(_0x7aa2('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x7aa2('0x3'))['db'];var utils=require(_0x7aa2('0x4'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0x7aa2('0x5'));var client=jayson[_0x7aa2('0x6')][_0x7aa2('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x22b1ca,_0x455a29,_0x147113){return new BPromise(function(_0x3abf9e,_0xcd9a30){return client[_0x7aa2('0x8')](_0x22b1ca,_0x147113)['then'](function(_0x6f3bfd){logger['info']('VoiceCallReport,\x20%s,\x20%s',_0x455a29,'request\x20sent');logger[_0x7aa2('0x9')](_0x7aa2('0xa'),_0x455a29,_0x7aa2('0xb'),JSON[_0x7aa2('0xc')](_0x6f3bfd));if(_0x6f3bfd[_0x7aa2('0xd')]){if(_0x6f3bfd['error'][_0x7aa2('0xe')]===0x1f4){logger['error']('VoiceCallReport,\x20%s,\x20%s',_0x455a29,_0x6f3bfd[_0x7aa2('0xd')][_0x7aa2('0xf')]);return _0xcd9a30(_0x6f3bfd[_0x7aa2('0xd')]['message']);}logger[_0x7aa2('0xd')](_0x7aa2('0x10'),_0x455a29,_0x6f3bfd[_0x7aa2('0xd')][_0x7aa2('0xf')]);return _0x3abf9e(_0x6f3bfd[_0x7aa2('0xd')][_0x7aa2('0xf')]);}else{logger[_0x7aa2('0x11')](_0x7aa2('0x10'),_0x455a29,'request\x20sent');_0x3abf9e(_0x6f3bfd[_0x7aa2('0x12')]['message']);}})[_0x7aa2('0x13')](function(_0x234f82){logger[_0x7aa2('0xd')](_0x7aa2('0x10'),_0x455a29,_0x234f82);_0xcd9a30(_0x234f82);});});}exports[_0x7aa2('0x14')]=function(_0x3fea35){var _0x44b250=this;return new Promise(function(_0x4682e4,_0x36b4f4){return db['VoiceCallReport']['findAll']({'raw':_0x3fea35[_0x7aa2('0x15')]?_0x3fea35['options'][_0x7aa2('0x16')]===undefined?!![]:![]:!![],'where':_0x3fea35['options']?_0x3fea35[_0x7aa2('0x15')][_0x7aa2('0x17')]||null:null,'attributes':_0x3fea35[_0x7aa2('0x15')]?_0x3fea35[_0x7aa2('0x15')][_0x7aa2('0x18')]||null:null,'limit':_0x3fea35[_0x7aa2('0x15')]?_0x3fea35['options'][_0x7aa2('0x19')]||null:null,'include':_0x3fea35['options']?_0x3fea35[_0x7aa2('0x15')][_0x7aa2('0x1a')]?_[_0x7aa2('0x1b')](_0x3fea35[_0x7aa2('0x15')][_0x7aa2('0x1a')],function(_0x5b5c3c){return{'model':db[_0x5b5c3c['model']],'as':_0x5b5c3c['as'],'attributes':_0x5b5c3c[_0x7aa2('0x18')],'include':_0x5b5c3c[_0x7aa2('0x1a')]?_[_0x7aa2('0x1b')](_0x5b5c3c[_0x7aa2('0x1a')],function(_0x4534a1){return{'model':db[_0x4534a1['model']],'as':_0x4534a1['as'],'attributes':_0x4534a1[_0x7aa2('0x18')],'include':_0x4534a1[_0x7aa2('0x1a')]?_['map'](_0x4534a1[_0x7aa2('0x1a')],function(_0x597587){return{'model':db[_0x597587['model']],'as':_0x597587['as'],'attributes':_0x597587[_0x7aa2('0x18')]};}):[]};}):[]};}):[]:[]})[_0x7aa2('0x1c')](function(_0x3bec34){logger[_0x7aa2('0x11')]('GetVoiceCallReport',_0x3fea35);logger['debug']('GetVoiceCallReport',_0x3fea35,JSON[_0x7aa2('0xc')](_0x3bec34));_0x4682e4(_0x3bec34);})[_0x7aa2('0x13')](function(_0x39a1d1){logger['error'](_0x7aa2('0x14'),_0x39a1d1[_0x7aa2('0xf')],_0x3fea35);_0x36b4f4(_0x44b250[_0x7aa2('0xd')](0x1f4,_0x39a1d1[_0x7aa2('0xf')]));});});};exports[_0x7aa2('0x1d')]=function(_0x38714c){var _0x31f2a2=this;return new Promise(function(_0x476ef8,_0x5937aa){return db[_0x7aa2('0x1e')][_0x7aa2('0x1f')](_0x38714c[_0x7aa2('0x20')],{'raw':_0x38714c[_0x7aa2('0x15')]?_0x38714c[_0x7aa2('0x15')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x47d09f){logger[_0x7aa2('0x11')](_0x7aa2('0x1d'),_0x38714c);logger['debug'](_0x7aa2('0x1d'),_0x38714c,JSON[_0x7aa2('0xc')](_0x47d09f));_0x476ef8(_0x47d09f);})[_0x7aa2('0x13')](function(_0x47299e){logger['error'](_0x7aa2('0x1d'),_0x47299e['message'],_0x38714c);_0x5937aa(_0x31f2a2[_0x7aa2('0xd')](0x1f4,_0x47299e['message']));});});};exports[_0x7aa2('0x21')]=function(_0x268e7f){var _0x41ded0=this;return new Promise(function(_0x1350fe,_0x142712){return db[_0x7aa2('0x1e')][_0x7aa2('0x22')](_0x268e7f[_0x7aa2('0x20')],{'raw':_0x268e7f[_0x7aa2('0x15')]?_0x268e7f[_0x7aa2('0x15')][_0x7aa2('0x16')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x268e7f[_0x7aa2('0x15')]?_0x268e7f[_0x7aa2('0x15')]['where']||null:null,'attributes':_0x268e7f['options']?_0x268e7f[_0x7aa2('0x15')][_0x7aa2('0x18')]||null:null,'limit':_0x268e7f[_0x7aa2('0x15')]?_0x268e7f[_0x7aa2('0x15')][_0x7aa2('0x19')]||null:null})[_0x7aa2('0x1c')](function(_0x5cad13){logger[_0x7aa2('0x11')]('UpdateVoiceCallReport',_0x268e7f);logger['debug']('UpdateVoiceCallReport',_0x268e7f,JSON[_0x7aa2('0xc')](_0x5cad13));_0x1350fe(_0x5cad13);})[_0x7aa2('0x13')](function(_0x464d5b){logger['error']('UpdateVoiceCallReport',_0x464d5b['message'],_0x268e7f);_0x142712(_0x41ded0[_0x7aa2('0xd')](0x1f4,_0x464d5b[_0x7aa2('0xf')]));});});};
\ No newline at end of file
+var _0xd8d4=['jayson/promise','client','http','then','VoiceCallReport,\x20%s,\x20%s','request\x20sent','debug','VoiceCallReport,\x20%s,\x20%s,\x20%s','error','code','message','info','result','catch','GetVoiceCallReport','VoiceCallReport','findAll','raw','options','where','attributes','limit','map','include','model','stringify','CreateVoiceCallReport','create','body','UpdateVoiceCallReport','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment'];(function(_0x2e5fca,_0x3ba27c){var _0x2597f0=function(_0x35ec88){while(--_0x35ec88){_0x2e5fca['push'](_0x2e5fca['shift']());}};_0x2597f0(++_0x3ba27c);}(_0xd8d4,0x90));var _0x4d8d=function(_0x2c02a8,_0x5913a2){_0x2c02a8=_0x2c02a8-0x0;var _0x2b6df1=_0xd8d4[_0x2c02a8];return _0x2b6df1;};'use strict';var _=require('lodash');var util=require(_0x4d8d('0x0'));var moment=require(_0x4d8d('0x1'));var BPromise=require(_0x4d8d('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x4d8d('0x3'));var db=require(_0x4d8d('0x4'))['db'];var utils=require(_0x4d8d('0x5'));var logger=require(_0x4d8d('0x6'))('rpc');var config=require(_0x4d8d('0x7'));var jayson=require(_0x4d8d('0x8'));var client=jayson[_0x4d8d('0x9')][_0x4d8d('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3c4694,_0x14a1c1,_0x12ed8b){return new BPromise(function(_0x44a0,_0x5c9590){return client['request'](_0x3c4694,_0x12ed8b)[_0x4d8d('0xb')](function(_0x1a0808){logger['info'](_0x4d8d('0xc'),_0x14a1c1,_0x4d8d('0xd'));logger[_0x4d8d('0xe')](_0x4d8d('0xf'),_0x14a1c1,_0x4d8d('0xd'),JSON['stringify'](_0x1a0808));if(_0x1a0808[_0x4d8d('0x10')]){if(_0x1a0808[_0x4d8d('0x10')][_0x4d8d('0x11')]===0x1f4){logger[_0x4d8d('0x10')]('VoiceCallReport,\x20%s,\x20%s',_0x14a1c1,_0x1a0808[_0x4d8d('0x10')][_0x4d8d('0x12')]);return _0x5c9590(_0x1a0808[_0x4d8d('0x10')][_0x4d8d('0x12')]);}logger[_0x4d8d('0x10')]('VoiceCallReport,\x20%s,\x20%s',_0x14a1c1,_0x1a0808[_0x4d8d('0x10')][_0x4d8d('0x12')]);return _0x44a0(_0x1a0808['error'][_0x4d8d('0x12')]);}else{logger[_0x4d8d('0x13')](_0x4d8d('0xc'),_0x14a1c1,_0x4d8d('0xd'));_0x44a0(_0x1a0808[_0x4d8d('0x14')][_0x4d8d('0x12')]);}})[_0x4d8d('0x15')](function(_0xc64645){logger['error']('VoiceCallReport,\x20%s,\x20%s',_0x14a1c1,_0xc64645);_0x5c9590(_0xc64645);});});}exports[_0x4d8d('0x16')]=function(_0x2f2c88){var _0x41fbe3=this;return new Promise(function(_0x34d56d,_0x58b238){return db[_0x4d8d('0x17')][_0x4d8d('0x18')]({'raw':_0x2f2c88['options']?_0x2f2c88['options'][_0x4d8d('0x19')]===undefined?!![]:![]:!![],'where':_0x2f2c88[_0x4d8d('0x1a')]?_0x2f2c88[_0x4d8d('0x1a')][_0x4d8d('0x1b')]||null:null,'attributes':_0x2f2c88[_0x4d8d('0x1a')]?_0x2f2c88['options'][_0x4d8d('0x1c')]||null:null,'limit':_0x2f2c88[_0x4d8d('0x1a')]?_0x2f2c88[_0x4d8d('0x1a')][_0x4d8d('0x1d')]||null:null,'include':_0x2f2c88['options']?_0x2f2c88[_0x4d8d('0x1a')]['include']?_[_0x4d8d('0x1e')](_0x2f2c88['options'][_0x4d8d('0x1f')],function(_0x48ea9c){return{'model':db[_0x48ea9c[_0x4d8d('0x20')]],'as':_0x48ea9c['as'],'attributes':_0x48ea9c[_0x4d8d('0x1c')],'include':_0x48ea9c[_0x4d8d('0x1f')]?_[_0x4d8d('0x1e')](_0x48ea9c['include'],function(_0x350cf6){return{'model':db[_0x350cf6[_0x4d8d('0x20')]],'as':_0x350cf6['as'],'attributes':_0x350cf6[_0x4d8d('0x1c')],'include':_0x350cf6[_0x4d8d('0x1f')]?_['map'](_0x350cf6['include'],function(_0xc9a1c){return{'model':db[_0xc9a1c[_0x4d8d('0x20')]],'as':_0xc9a1c['as'],'attributes':_0xc9a1c[_0x4d8d('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x4d8d('0xb')](function(_0x1bb34c){logger[_0x4d8d('0x13')]('GetVoiceCallReport',_0x2f2c88);logger[_0x4d8d('0xe')]('GetVoiceCallReport',_0x2f2c88,JSON[_0x4d8d('0x21')](_0x1bb34c));_0x34d56d(_0x1bb34c);})[_0x4d8d('0x15')](function(_0x203a3c){logger[_0x4d8d('0x10')](_0x4d8d('0x16'),_0x203a3c['message'],_0x2f2c88);_0x58b238(_0x41fbe3[_0x4d8d('0x10')](0x1f4,_0x203a3c[_0x4d8d('0x12')]));});});};exports[_0x4d8d('0x22')]=function(_0x36f837){var _0x2f4528=this;return new Promise(function(_0xed3fd,_0xb104c3){return db[_0x4d8d('0x17')][_0x4d8d('0x23')](_0x36f837[_0x4d8d('0x24')],{'raw':_0x36f837[_0x4d8d('0x1a')]?_0x36f837[_0x4d8d('0x1a')][_0x4d8d('0x19')]===undefined?!![]:![]:!![]})[_0x4d8d('0xb')](function(_0x4e716f){logger['info'](_0x4d8d('0x22'),_0x36f837);logger['debug'](_0x4d8d('0x22'),_0x36f837,JSON[_0x4d8d('0x21')](_0x4e716f));_0xed3fd(_0x4e716f);})[_0x4d8d('0x15')](function(_0x1e8519){logger[_0x4d8d('0x10')](_0x4d8d('0x22'),_0x1e8519[_0x4d8d('0x12')],_0x36f837);_0xb104c3(_0x2f4528[_0x4d8d('0x10')](0x1f4,_0x1e8519[_0x4d8d('0x12')]));});});};exports[_0x4d8d('0x25')]=function(_0x9ab8e){var _0x5c0b43=this;return new Promise(function(_0x231d2c,_0x267dfb){return db[_0x4d8d('0x17')]['update'](_0x9ab8e[_0x4d8d('0x24')],{'raw':_0x9ab8e[_0x4d8d('0x1a')]?_0x9ab8e[_0x4d8d('0x1a')][_0x4d8d('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x9ab8e['options']?_0x9ab8e[_0x4d8d('0x1a')]['where']||null:null,'attributes':_0x9ab8e[_0x4d8d('0x1a')]?_0x9ab8e[_0x4d8d('0x1a')]['attributes']||null:null,'limit':_0x9ab8e['options']?_0x9ab8e[_0x4d8d('0x1a')]['limit']||null:null})['then'](function(_0x12187c){logger['info'](_0x4d8d('0x25'),_0x9ab8e);logger[_0x4d8d('0xe')](_0x4d8d('0x25'),_0x9ab8e,JSON[_0x4d8d('0x21')](_0x12187c));_0x231d2c(_0x12187c);})[_0x4d8d('0x15')](function(_0x2369a2){logger['error']('UpdateVoiceCallReport',_0x2369a2['message'],_0x9ab8e);_0x267dfb(_0x5c0b43['error'](0x1f4,_0x2369a2[_0x4d8d('0x12')]));});});};
\ No newline at end of file
index d0417e0..03aaae4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9626=['exports','util','connect-timeout','../../components/auth/service','../../config/environment','./voiceChanSpy.controller','get','index','/:id','isAuthenticated','put','destroy'];(function(_0x58c28a,_0x4ce143){var _0x3ee22b=function(_0x53e0b5){while(--_0x53e0b5){_0x58c28a['push'](_0x58c28a['shift']());}};_0x3ee22b(++_0x4ce143);}(_0x9626,0xf1));var _0x6962=function(_0x4119f1,_0x1c078b){_0x4119f1=_0x4119f1-0x0;var _0xd2c589=_0x9626[_0x4119f1];return _0xd2c589;};'use strict';var multer=require('multer');var util=require(_0x6962('0x0'));var path=require('path');var timeout=require(_0x6962('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0x6962('0x2'));var interaction=require('../../components/interaction/service');var config=require(_0x6962('0x3'));var controller=require(_0x6962('0x4'));router[_0x6962('0x5')]('/',auth['isAuthenticated'](),controller[_0x6962('0x6')]);router[_0x6962('0x5')](_0x6962('0x7'),auth[_0x6962('0x8')](),controller['show']);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0x6962('0x9')](_0x6962('0x7'),auth['isAuthenticated'](),controller['update']);router['delete']('/:id',auth['isAuthenticated'](),controller[_0x6962('0xa')]);module[_0x6962('0xb')]=router;
\ No newline at end of file
+var _0xdb67=['path','connect-timeout','express','../../components/auth/service','../../config/environment','./voiceChanSpy.controller','isAuthenticated','index','get','/:id','post','update','delete','destroy','exports','multer'];(function(_0xc4001c,_0x1bf8f0){var _0x49f7bc=function(_0x1059b8){while(--_0x1059b8){_0xc4001c['push'](_0xc4001c['shift']());}};_0x49f7bc(++_0x1bf8f0);}(_0xdb67,0x1af));var _0x7db6=function(_0x27e8bb,_0x5ec8de){_0x27e8bb=_0x27e8bb-0x0;var _0x3d0b40=_0xdb67[_0x27e8bb];return _0x3d0b40;};'use strict';var multer=require(_0x7db6('0x0'));var util=require('util');var path=require(_0x7db6('0x1'));var timeout=require(_0x7db6('0x2'));var express=require(_0x7db6('0x3'));var router=express['Router']();var auth=require(_0x7db6('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x7db6('0x5'));var controller=require(_0x7db6('0x6'));router['get']('/',auth[_0x7db6('0x7')](),controller[_0x7db6('0x8')]);router[_0x7db6('0x9')](_0x7db6('0xa'),auth[_0x7db6('0x7')](),controller['show']);router[_0x7db6('0xb')]('/',auth[_0x7db6('0x7')](),controller['create']);router['put'](_0x7db6('0xa'),auth['isAuthenticated'](),controller[_0x7db6('0xc')]);router[_0x7db6('0xd')](_0x7db6('0xa'),auth[_0x7db6('0x7')](),controller[_0x7db6('0xe')]);module[_0x7db6('0xf')]=router;
\ No newline at end of file
index d9f9402..d86554e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb845=['join','getDataValue','split','BOOLEAN','sequelize','exports','STRING','name','setDataValue','options'];(function(_0x394c6e,_0x5a1ec0){var _0x4a1796=function(_0x3b5911){while(--_0x3b5911){_0x394c6e['push'](_0x394c6e['shift']());}};_0x4a1796(++_0x5a1ec0);}(_0xb845,0x130));var _0x5b84=function(_0x358fb5,_0x4407b8){_0x358fb5=_0x358fb5-0x0;var _0x4abfeb=_0xb845[_0x358fb5];return _0x4abfeb;};'use strict';var Sequelize=require(_0x5b84('0x0'));module[_0x5b84('0x1')]={'name':{'type':Sequelize[_0x5b84('0x2')]},'prefix':{'type':Sequelize['STRING'],'unique':_0x5b84('0x3'),'allowNull':![]},'options':{'type':Sequelize['STRING'],'set':function(_0xfc856e){this[_0x5b84('0x4')](_0x5b84('0x5'),_0xfc856e?_0xfc856e[_0x5b84('0x6')](''):[]);},'get':function(){return this['getDataValue'](_0x5b84('0x5'))?this[_0x5b84('0x7')](_0x5b84('0x5'))[_0x5b84('0x8')](''):[];}},'auth':{'type':Sequelize[_0x5b84('0x9')],'defaultValue':![]},'password':{'type':Sequelize[_0x5b84('0x2')]},'record':{'type':Sequelize[_0x5b84('0x9')],'defaultValue':![]},'recordingFormat':{'type':Sequelize[_0x5b84('0x2')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x19e8=['sequelize','STRING','name','setDataValue','options','join','getDataValue','BOOLEAN'];(function(_0x440b30,_0x241ee7){var _0x3b16da=function(_0x4ad0e4){while(--_0x4ad0e4){_0x440b30['push'](_0x440b30['shift']());}};_0x3b16da(++_0x241ee7);}(_0x19e8,0x160));var _0x819e=function(_0x21a3cb,_0x1d8bc4){_0x21a3cb=_0x21a3cb-0x0;var _0x28be8d=_0x19e8[_0x21a3cb];return _0x28be8d;};'use strict';var Sequelize=require(_0x819e('0x0'));module['exports']={'name':{'type':Sequelize['STRING']},'prefix':{'type':Sequelize[_0x819e('0x1')],'unique':_0x819e('0x2'),'allowNull':![]},'options':{'type':Sequelize['STRING'],'set':function(_0x88a33b){this[_0x819e('0x3')](_0x819e('0x4'),_0x88a33b?_0x88a33b[_0x819e('0x5')](''):[]);},'get':function(){return this[_0x819e('0x6')](_0x819e('0x4'))?this[_0x819e('0x6')]('options')['split'](''):[];}},'auth':{'type':Sequelize[_0x819e('0x7')],'defaultValue':![]},'password':{'type':Sequelize[_0x819e('0x1')]},'record':{'type':Sequelize[_0x819e('0x7')],'defaultValue':![]},'recordingFormat':{'type':Sequelize[_0x819e('0x1')]},'description':{'type':Sequelize[_0x819e('0x1')]}};
\ No newline at end of file
index 021bba2..1be7cd9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe4d9=['where','filters','pick','filter','merge','map','type','options','includeAll','include','rows','catch','show','params','find','create','get','role','user','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','Content-Range','apply','reject','save','update','destroy','then','ChanSpies','UserProfileResource','end','sendStatus','error','stack','name','send','VoiceChanSpy','rawAttributes','keys','query','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','sort'];(function(_0x2aec52,_0x59d962){var _0x3b8835=function(_0x3e2604){while(--_0x3e2604){_0x2aec52['push'](_0x2aec52['shift']());}};_0x3b8835(++_0x59d962);}(_0xe4d9,0x101));var _0x9e4d=function(_0x2df295,_0x113588){_0x2df295=_0x2df295-0x0;var _0x4eaef9=_0xe4d9[_0x2df295];return _0x4eaef9;};'use strict';var pdf=require(_0x9e4d('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x9e4d('0x1'));var zipdir=require(_0x9e4d('0x2'));var jsonpatch=require(_0x9e4d('0x3'));var rp=require(_0x9e4d('0x4'));var moment=require(_0x9e4d('0x5'));var BPromise=require(_0x9e4d('0x6'));var Mustache=require(_0x9e4d('0x7'));var util=require('util');var path=require(_0x9e4d('0x8'));var sox=require('sox');var csv=require(_0x9e4d('0x9'));var ejs=require(_0x9e4d('0xa'));var fs=require('fs');var _=require(_0x9e4d('0xb'));var squel=require(_0x9e4d('0xc'));var crypto=require('crypto');var jsforce=require(_0x9e4d('0xd'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x9e4d('0xe'));var Papa=require(_0x9e4d('0xf'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x9e4d('0x10'));var hardwareService=require(_0x9e4d('0x11'));var logger=require(_0x9e4d('0x12'))(_0x9e4d('0x13'));var utils=require(_0x9e4d('0x14'));var config=require(_0x9e4d('0x15'));var db=require(_0x9e4d('0x16'))['db'];function respondWithStatusCode(_0x2da30d,_0x3a108a){_0x3a108a=_0x3a108a||0xcc;return function(_0x3ca852){if(_0x3ca852){return _0x2da30d['sendStatus'](_0x3a108a);}return _0x2da30d[_0x9e4d('0x17')](_0x3a108a)['end']();};}function respondWithResult(_0xceb804,_0x32b4d2){_0x32b4d2=_0x32b4d2||0xc8;return function(_0x268290){if(_0x268290){return _0xceb804['status'](_0x32b4d2)[_0x9e4d('0x18')](_0x268290);}};}function respondWithFilteredResult(_0x57dc95,_0x3a73a3){return function(_0x2cecad){if(_0x2cecad){var _0x4bb9ed=_0x2cecad[_0x9e4d('0x19')],_0x538a4b=_0x3a73a3[_0x9e4d('0x1a')],_0x52cdef=_0x3a73a3['offset']+_0x3a73a3[_0x9e4d('0x1b')],_0x55d371;if(_0x52cdef>=_0x4bb9ed){_0x52cdef=_0x4bb9ed;_0x55d371=0xc8;}else{_0x55d371=0xce;}_0x57dc95[_0x9e4d('0x17')](_0x55d371);return _0x57dc95['set'](_0x9e4d('0x1c'),_0x538a4b+'-'+_0x52cdef+'/'+_0x4bb9ed)[_0x9e4d('0x18')](_0x2cecad);}return null;};}function patchUpdates(_0x10e4a4){return function(_0x1d63b2){try{jsonpatch[_0x9e4d('0x1d')](_0x1d63b2,_0x10e4a4,!![]);}catch(_0x4f9b62){return BPromise[_0x9e4d('0x1e')](_0x4f9b62);}return _0x1d63b2[_0x9e4d('0x1f')]();};}function saveUpdates(_0x37fb34,_0x5b7e93){return function(_0x526586){if(_0x526586){return _0x526586[_0x9e4d('0x20')](_0x37fb34)['then'](function(_0x2fa3b2){return _0x2fa3b2;});}return null;};}function removeEntity(_0x8bba53,_0x5a9d8f){return function(_0x37dca9){if(_0x37dca9){return _0x37dca9[_0x9e4d('0x21')]()[_0x9e4d('0x22')](function(){var _0x32ab20=_0x37dca9['get']({'plain':!![]});var _0x4b88ed=_0x9e4d('0x23');return db[_0x9e4d('0x24')][_0x9e4d('0x21')]({'where':{'type':_0x4b88ed,'resourceId':_0x32ab20['id']}})['then'](function(){return _0x37dca9;});})[_0x9e4d('0x22')](function(){_0x8bba53['status'](0xcc)[_0x9e4d('0x25')]();});}};}function handleEntityNotFound(_0x4feefa,_0x40bbd5){return function(_0x18c8ca){if(!_0x18c8ca){_0x4feefa[_0x9e4d('0x26')](0x194);}return _0x18c8ca;};}function handleError(_0x4fab28,_0x521ba7){_0x521ba7=_0x521ba7||0x1f4;return function(_0x34ff86){logger[_0x9e4d('0x27')](_0x34ff86[_0x9e4d('0x28')]);if(_0x34ff86['name']){delete _0x34ff86[_0x9e4d('0x29')];}_0x4fab28[_0x9e4d('0x17')](_0x521ba7)[_0x9e4d('0x2a')](_0x34ff86);};}exports['index']=function(_0x48e60f,_0x23ce95){var _0x2600ee={},_0x25eeb0={},_0x1c9385={'count':0x0,'rows':[]};var _0x5d6409=db[_0x9e4d('0x2b')][_0x9e4d('0x2c')];_0x25eeb0['model']=_[_0x9e4d('0x2d')](_0x5d6409);_0x25eeb0['query']=_[_0x9e4d('0x2d')](_0x48e60f[_0x9e4d('0x2e')]);_0x25eeb0['filters']=_[_0x9e4d('0x2f')](_0x25eeb0[_0x9e4d('0x30')],_0x25eeb0[_0x9e4d('0x2e')]);_0x2600ee['attributes']=_['intersection'](_0x25eeb0[_0x9e4d('0x30')],qs['fields'](_0x48e60f[_0x9e4d('0x2e')][_0x9e4d('0x31')]));_0x2600ee[_0x9e4d('0x32')]=_0x2600ee[_0x9e4d('0x32')][_0x9e4d('0x33')]?_0x2600ee[_0x9e4d('0x32')]:_0x25eeb0[_0x9e4d('0x30')];if(!_0x48e60f[_0x9e4d('0x2e')][_0x9e4d('0x34')](_0x9e4d('0x35'))){_0x2600ee[_0x9e4d('0x1b')]=qs[_0x9e4d('0x1b')](_0x48e60f[_0x9e4d('0x2e')]['limit']);_0x2600ee['offset']=qs[_0x9e4d('0x1a')](_0x48e60f[_0x9e4d('0x2e')][_0x9e4d('0x1a')]);}_0x2600ee['order']=qs[_0x9e4d('0x36')](_0x48e60f[_0x9e4d('0x2e')][_0x9e4d('0x36')]);_0x2600ee[_0x9e4d('0x37')]=qs[_0x9e4d('0x38')](_[_0x9e4d('0x39')](_0x48e60f[_0x9e4d('0x2e')],_0x25eeb0['filters']));if(_0x48e60f[_0x9e4d('0x2e')][_0x9e4d('0x3a')]){_0x2600ee[_0x9e4d('0x37')]=_[_0x9e4d('0x3b')](_0x2600ee['where'],{'$or':_[_0x9e4d('0x3c')](_0x5d6409,function(_0x438516){if(_0x438516[_0x9e4d('0x3d')]['key']!=='VIRTUAL'){var _0x2cd8b2={};_0x2cd8b2[_0x438516['field']]={'$like':'%'+_0x48e60f[_0x9e4d('0x2e')][_0x9e4d('0x3a')]+'%'};return _0x2cd8b2;}})});}_0x2600ee=_[_0x9e4d('0x3b')]({},_0x2600ee,_0x48e60f[_0x9e4d('0x3e')]);var _0x303fdc={'where':_0x2600ee['where']};return db[_0x9e4d('0x2b')][_0x9e4d('0x19')](_0x303fdc)[_0x9e4d('0x22')](function(_0x466050){_0x1c9385[_0x9e4d('0x19')]=_0x466050;if(_0x48e60f[_0x9e4d('0x2e')][_0x9e4d('0x3f')]){_0x2600ee[_0x9e4d('0x40')]=[{'all':!![]}];}return db[_0x9e4d('0x2b')]['findAll'](_0x2600ee);})['then'](function(_0x27816d){_0x1c9385[_0x9e4d('0x41')]=_0x27816d;return _0x1c9385;})[_0x9e4d('0x22')](respondWithFilteredResult(_0x23ce95,_0x2600ee))[_0x9e4d('0x42')](handleError(_0x23ce95,null));};exports[_0x9e4d('0x43')]=function(_0x36f051,_0x28ac6b){var _0x5b5ee7={'raw':![],'where':{'id':_0x36f051[_0x9e4d('0x44')]['id']}},_0x5c2f7c={};_0x5c2f7c[_0x9e4d('0x30')]=_[_0x9e4d('0x2d')](db['VoiceChanSpy'][_0x9e4d('0x2c')]);_0x5c2f7c[_0x9e4d('0x2e')]=_[_0x9e4d('0x2d')](_0x36f051['query']);_0x5c2f7c[_0x9e4d('0x38')]=_[_0x9e4d('0x2f')](_0x5c2f7c['model'],_0x5c2f7c[_0x9e4d('0x2e')]);_0x5b5ee7[_0x9e4d('0x32')]=_['intersection'](_0x5c2f7c['model'],qs['fields'](_0x36f051[_0x9e4d('0x2e')][_0x9e4d('0x31')]));_0x5b5ee7[_0x9e4d('0x32')]=_0x5b5ee7[_0x9e4d('0x32')][_0x9e4d('0x33')]?_0x5b5ee7[_0x9e4d('0x32')]:_0x5c2f7c['model'];if(_0x36f051[_0x9e4d('0x2e')]['includeAll']){_0x5b5ee7[_0x9e4d('0x40')]=[{'all':!![]}];}_0x5b5ee7=_[_0x9e4d('0x3b')]({},_0x5b5ee7,_0x36f051[_0x9e4d('0x3e')]);return db['VoiceChanSpy'][_0x9e4d('0x45')](_0x5b5ee7)[_0x9e4d('0x22')](handleEntityNotFound(_0x28ac6b,null))[_0x9e4d('0x22')](respondWithResult(_0x28ac6b,null))['catch'](handleError(_0x28ac6b,null));};exports[_0x9e4d('0x46')]=function(_0x742b58,_0x20a412){return db['VoiceChanSpy'][_0x9e4d('0x46')](_0x742b58['body'],{})[_0x9e4d('0x22')](function(_0xdfa4b6){var _0x43f893=_0x742b58['user'][_0x9e4d('0x47')]({'plain':!![]});if(!_0x43f893)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x43f893[_0x9e4d('0x48')]===_0x9e4d('0x49')){var _0x50b8b2=_0xdfa4b6[_0x9e4d('0x47')]({'plain':!![]});var _0x3a917a=_0x9e4d('0x23');return db['UserProfileSection'][_0x9e4d('0x45')]({'where':{'name':_0x3a917a,'userProfileId':_0x43f893[_0x9e4d('0x4a')]},'raw':!![]})[_0x9e4d('0x22')](function(_0x41e770){if(_0x41e770&&_0x41e770[_0x9e4d('0x4b')]===0x0){return db[_0x9e4d('0x24')][_0x9e4d('0x46')]({'name':_0x50b8b2['name'],'resourceId':_0x50b8b2['id'],'type':_0x41e770[_0x9e4d('0x29')],'sectionId':_0x41e770['id']},{})[_0x9e4d('0x22')](function(){return _0xdfa4b6;});}else{return _0xdfa4b6;}})[_0x9e4d('0x42')](function(_0xdf6311){logger['error'](_0x9e4d('0x4c'),_0xdf6311);throw _0xdf6311;});}return _0xdfa4b6;})[_0x9e4d('0x22')](respondWithResult(_0x20a412,0xc9))[_0x9e4d('0x42')](handleError(_0x20a412,null));};exports[_0x9e4d('0x20')]=function(_0x278e2f,_0x3bebfc){if(_0x278e2f['body']['id']){delete _0x278e2f['body']['id'];}return db['VoiceChanSpy'][_0x9e4d('0x45')]({'where':{'id':_0x278e2f[_0x9e4d('0x44')]['id']}})[_0x9e4d('0x22')](handleEntityNotFound(_0x3bebfc,null))['then'](saveUpdates(_0x278e2f[_0x9e4d('0x4d')],null))[_0x9e4d('0x22')](respondWithResult(_0x3bebfc,null))[_0x9e4d('0x42')](handleError(_0x3bebfc,null));};exports[_0x9e4d('0x21')]=function(_0x23f6bc,_0x7b194f){return db[_0x9e4d('0x2b')]['find']({'where':{'id':_0x23f6bc['params']['id']}})[_0x9e4d('0x22')](handleEntityNotFound(_0x7b194f,null))[_0x9e4d('0x22')](removeEntity(_0x7b194f,null))[_0x9e4d('0x42')](handleError(_0x7b194f,null));};
\ No newline at end of file
+var _0xb341=['fields','hasOwnProperty','order','sort','filters','filter','merge','map','key','VIRTUAL','options','where','VoiceChanSpy','includeAll','findAll','rows','catch','show','params','length','include','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','eml-format','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','querystring','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','update','destroy','then','ChanSpies','UserProfileResource','error','name','rawAttributes','model','keys','query','intersection','attributes'];(function(_0x6eed90,_0x2656f2){var _0x4196f0=function(_0x11bb28){while(--_0x11bb28){_0x6eed90['push'](_0x6eed90['shift']());}};_0x4196f0(++_0x2656f2);}(_0xb341,0x1ed));var _0x1b34=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xb341[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0x1b34('0x0'));var emlformat=require(_0x1b34('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x1b34('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x1b34('0x3'));var moment=require(_0x1b34('0x4'));var BPromise=require(_0x1b34('0x5'));var Mustache=require(_0x1b34('0x6'));var util=require(_0x1b34('0x7'));var path=require(_0x1b34('0x8'));var sox=require(_0x1b34('0x9'));var csv=require(_0x1b34('0xa'));var ejs=require(_0x1b34('0xb'));var fs=require('fs');var _=require(_0x1b34('0xc'));var squel=require(_0x1b34('0xd'));var crypto=require('crypto');var jsforce=require(_0x1b34('0xe'));var deskjs=require('desk.js');var toCsv=require(_0x1b34('0xa'));var querystring=require(_0x1b34('0xf'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x1b34('0x10'));var hardwareService=require(_0x1b34('0x11'));var logger=require(_0x1b34('0x12'))(_0x1b34('0x13'));var utils=require(_0x1b34('0x14'));var config=require(_0x1b34('0x15'));var db=require(_0x1b34('0x16'))['db'];function respondWithStatusCode(_0x266941,_0x4e867f){_0x4e867f=_0x4e867f||0xcc;return function(_0x6b870b){if(_0x6b870b){return _0x266941[_0x1b34('0x17')](_0x4e867f);}return _0x266941[_0x1b34('0x18')](_0x4e867f)['end']();};}function respondWithResult(_0x51f2c9,_0x57233d){_0x57233d=_0x57233d||0xc8;return function(_0xd8d4d9){if(_0xd8d4d9){return _0x51f2c9[_0x1b34('0x18')](_0x57233d)[_0x1b34('0x19')](_0xd8d4d9);}};}function respondWithFilteredResult(_0x473c68,_0x461eb){return function(_0x2d258d){if(_0x2d258d){var _0x11ae45=_0x2d258d[_0x1b34('0x1a')],_0x308a59=_0x461eb[_0x1b34('0x1b')],_0x6e1cf0=_0x461eb[_0x1b34('0x1b')]+_0x461eb[_0x1b34('0x1c')],_0x27ef2d;if(_0x6e1cf0>=_0x11ae45){_0x6e1cf0=_0x11ae45;_0x27ef2d=0xc8;}else{_0x27ef2d=0xce;}_0x473c68[_0x1b34('0x18')](_0x27ef2d);return _0x473c68[_0x1b34('0x1d')](_0x1b34('0x1e'),_0x308a59+'-'+_0x6e1cf0+'/'+_0x11ae45)[_0x1b34('0x19')](_0x2d258d);}return null;};}function patchUpdates(_0x2da18a){return function(_0x4f29e0){try{jsonpatch[_0x1b34('0x1f')](_0x4f29e0,_0x2da18a,!![]);}catch(_0x3c77ee){return BPromise[_0x1b34('0x20')](_0x3c77ee);}return _0x4f29e0['save']();};}function saveUpdates(_0x28c972,_0x3cc0eb){return function(_0x197172){if(_0x197172){return _0x197172[_0x1b34('0x21')](_0x28c972)['then'](function(_0x41b3c0){return _0x41b3c0;});}return null;};}function removeEntity(_0x297eb5,_0x4dc0f4){return function(_0x2250bc){if(_0x2250bc){return _0x2250bc[_0x1b34('0x22')]()[_0x1b34('0x23')](function(){var _0x145f62=_0x2250bc['get']({'plain':!![]});var _0x41c450=_0x1b34('0x24');return db[_0x1b34('0x25')]['destroy']({'where':{'type':_0x41c450,'resourceId':_0x145f62['id']}})['then'](function(){return _0x2250bc;});})[_0x1b34('0x23')](function(){_0x297eb5['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x52d498,_0x292c50){return function(_0x334dcf){if(!_0x334dcf){_0x52d498[_0x1b34('0x17')](0x194);}return _0x334dcf;};}function handleError(_0x16a6f0,_0x51c651){_0x51c651=_0x51c651||0x1f4;return function(_0x5fcaec){logger[_0x1b34('0x26')](_0x5fcaec['stack']);if(_0x5fcaec[_0x1b34('0x27')]){delete _0x5fcaec['name'];}_0x16a6f0['status'](_0x51c651)['send'](_0x5fcaec);};}exports['index']=function(_0x532590,_0x535d57){var _0x582308={},_0x33428b={},_0xcf53={'count':0x0,'rows':[]};var _0x213ed9=db['VoiceChanSpy'][_0x1b34('0x28')];_0x33428b[_0x1b34('0x29')]=_[_0x1b34('0x2a')](_0x213ed9);_0x33428b['query']=_['keys'](_0x532590[_0x1b34('0x2b')]);_0x33428b['filters']=_[_0x1b34('0x2c')](_0x33428b[_0x1b34('0x29')],_0x33428b[_0x1b34('0x2b')]);_0x582308[_0x1b34('0x2d')]=_['intersection'](_0x33428b[_0x1b34('0x29')],qs[_0x1b34('0x2e')](_0x532590[_0x1b34('0x2b')][_0x1b34('0x2e')]));_0x582308[_0x1b34('0x2d')]=_0x582308[_0x1b34('0x2d')]['length']?_0x582308[_0x1b34('0x2d')]:_0x33428b['model'];if(!_0x532590[_0x1b34('0x2b')][_0x1b34('0x2f')]('nolimit')){_0x582308['limit']=qs[_0x1b34('0x1c')](_0x532590[_0x1b34('0x2b')][_0x1b34('0x1c')]);_0x582308[_0x1b34('0x1b')]=qs[_0x1b34('0x1b')](_0x532590[_0x1b34('0x2b')][_0x1b34('0x1b')]);}_0x582308[_0x1b34('0x30')]=qs['sort'](_0x532590['query'][_0x1b34('0x31')]);_0x582308['where']=qs['filters'](_['pick'](_0x532590['query'],_0x33428b[_0x1b34('0x32')]));if(_0x532590['query'][_0x1b34('0x33')]){_0x582308['where']=_[_0x1b34('0x34')](_0x582308['where'],{'$or':_[_0x1b34('0x35')](_0x213ed9,function(_0x1f8ad6){if(_0x1f8ad6['type'][_0x1b34('0x36')]!==_0x1b34('0x37')){var _0x57149d={};_0x57149d[_0x1f8ad6['field']]={'$like':'%'+_0x532590[_0x1b34('0x2b')]['filter']+'%'};return _0x57149d;}})});}_0x582308=_['merge']({},_0x582308,_0x532590[_0x1b34('0x38')]);var _0x4897d2={'where':_0x582308[_0x1b34('0x39')]};return db[_0x1b34('0x3a')][_0x1b34('0x1a')](_0x4897d2)[_0x1b34('0x23')](function(_0x2b2c80){_0xcf53[_0x1b34('0x1a')]=_0x2b2c80;if(_0x532590[_0x1b34('0x2b')][_0x1b34('0x3b')]){_0x582308['include']=[{'all':!![]}];}return db['VoiceChanSpy'][_0x1b34('0x3c')](_0x582308);})['then'](function(_0x37869d){_0xcf53[_0x1b34('0x3d')]=_0x37869d;return _0xcf53;})[_0x1b34('0x23')](respondWithFilteredResult(_0x535d57,_0x582308))[_0x1b34('0x3e')](handleError(_0x535d57,null));};exports[_0x1b34('0x3f')]=function(_0x358b33,_0x4d67f3){var _0x198789={'raw':![],'where':{'id':_0x358b33[_0x1b34('0x40')]['id']}},_0x3a904a={};_0x3a904a[_0x1b34('0x29')]=_[_0x1b34('0x2a')](db[_0x1b34('0x3a')]['rawAttributes']);_0x3a904a[_0x1b34('0x2b')]=_[_0x1b34('0x2a')](_0x358b33[_0x1b34('0x2b')]);_0x3a904a[_0x1b34('0x32')]=_[_0x1b34('0x2c')](_0x3a904a[_0x1b34('0x29')],_0x3a904a['query']);_0x198789[_0x1b34('0x2d')]=_['intersection'](_0x3a904a[_0x1b34('0x29')],qs[_0x1b34('0x2e')](_0x358b33[_0x1b34('0x2b')]['fields']));_0x198789[_0x1b34('0x2d')]=_0x198789[_0x1b34('0x2d')][_0x1b34('0x41')]?_0x198789[_0x1b34('0x2d')]:_0x3a904a[_0x1b34('0x29')];if(_0x358b33[_0x1b34('0x2b')][_0x1b34('0x3b')]){_0x198789[_0x1b34('0x42')]=[{'all':!![]}];}_0x198789=_[_0x1b34('0x34')]({},_0x198789,_0x358b33[_0x1b34('0x38')]);return db[_0x1b34('0x3a')][_0x1b34('0x43')](_0x198789)[_0x1b34('0x23')](handleEntityNotFound(_0x4d67f3,null))[_0x1b34('0x23')](respondWithResult(_0x4d67f3,null))[_0x1b34('0x3e')](handleError(_0x4d67f3,null));};exports['create']=function(_0x1cc7a4,_0x467f1b){return db[_0x1b34('0x3a')][_0x1b34('0x44')](_0x1cc7a4[_0x1b34('0x45')],{})[_0x1b34('0x23')](function(_0x5e8409){var _0x13206c=_0x1cc7a4[_0x1b34('0x46')][_0x1b34('0x47')]({'plain':!![]});if(!_0x13206c)throw new Error(_0x1b34('0x48'));if(_0x13206c[_0x1b34('0x49')]===_0x1b34('0x46')){var _0x3a0735=_0x5e8409[_0x1b34('0x47')]({'plain':!![]});var _0x355a40=_0x1b34('0x24');return db[_0x1b34('0x4a')]['find']({'where':{'name':_0x355a40,'userProfileId':_0x13206c[_0x1b34('0x4b')]},'raw':!![]})['then'](function(_0x2f711a){if(_0x2f711a&&_0x2f711a['autoAssociation']===0x0){return db[_0x1b34('0x25')][_0x1b34('0x44')]({'name':_0x3a0735[_0x1b34('0x27')],'resourceId':_0x3a0735['id'],'type':_0x2f711a[_0x1b34('0x27')],'sectionId':_0x2f711a['id']},{})[_0x1b34('0x23')](function(){return _0x5e8409;});}else{return _0x5e8409;}})[_0x1b34('0x3e')](function(_0x20b822){logger[_0x1b34('0x26')](_0x1b34('0x4c'),_0x20b822);throw _0x20b822;});}return _0x5e8409;})[_0x1b34('0x23')](respondWithResult(_0x467f1b,0xc9))[_0x1b34('0x3e')](handleError(_0x467f1b,null));};exports[_0x1b34('0x21')]=function(_0x2f9d83,_0x4dfc98){if(_0x2f9d83[_0x1b34('0x45')]['id']){delete _0x2f9d83[_0x1b34('0x45')]['id'];}return db[_0x1b34('0x3a')]['find']({'where':{'id':_0x2f9d83[_0x1b34('0x40')]['id']}})[_0x1b34('0x23')](handleEntityNotFound(_0x4dfc98,null))['then'](saveUpdates(_0x2f9d83['body'],null))[_0x1b34('0x23')](respondWithResult(_0x4dfc98,null))[_0x1b34('0x3e')](handleError(_0x4dfc98,null));};exports[_0x1b34('0x22')]=function(_0x12aae0,_0x1387da){return db[_0x1b34('0x3a')][_0x1b34('0x43')]({'where':{'id':_0x12aae0[_0x1b34('0x40')]['id']}})[_0x1b34('0x23')](handleEntityNotFound(_0x1387da,null))[_0x1b34('0x23')](removeEntity(_0x1387da,null))[_0x1b34('0x3e')](handleError(_0x1387da,null));};
\ No newline at end of file
index b4e37e6..1478c26 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ce9=['recordingFormat','auth','password','SIP/%s,%s','name','options','join','StopMixMonitor','internal','concat','User','agent','then','catch','VoiceChanSpy','length','VoiceExtension','bulkCreate','destroy','lodash','util','bluebird','context','format','%s%s','prefix','push','merge','Set','chanspy','record','MixMonitor','${UNIQUEID}.%s,ab'];(function(_0x5f4abc,_0x1692ac){var _0x3c29a6=function(_0x46309e){while(--_0x46309e){_0x5f4abc['push'](_0x5f4abc['shift']());}};_0x3c29a6(++_0x1692ac);}(_0x6ce9,0x76));var _0x96ce=function(_0x24da26,_0x481010){_0x24da26=_0x24da26-0x0;var _0x2fae1c=_0x6ce9[_0x24da26];return _0x2fae1c;};'use strict';var _=require(_0x96ce('0x0'));var util=require(_0x96ce('0x1'));var BPromise=require(_0x96ce('0x2'));var attributes=require('./voiceChanSpy.attributes');var getUserApplications=function(_0x48ccd5,_0x18bbb2,_0x5bf6d5){var _0x28a6a3=0x1;var _0x18a969=[];var _0x2b5c98={'context':_0x18bbb2[_0x96ce('0x3')]||'from-sip','exten':util[_0x96ce('0x4')](_0x96ce('0x5'),_0x48ccd5[_0x96ce('0x6')],_0x5bf6d5),'type':'system','isApp':![],'ChanSpyId':_0x48ccd5['id'],'UserId':_0x18bbb2['id']};_0x18a969[_0x96ce('0x7')](_[_0x96ce('0x8')]({'app':_0x96ce('0x9'),'appdata':util['format']('CDR(type)=%s',_0x96ce('0xa')),'priority':_0x28a6a3++},_0x2b5c98));if(_0x48ccd5[_0x96ce('0xb')]){_0x18a969[_0x96ce('0x7')](_[_0x96ce('0x8')]({'app':_0x96ce('0xc'),'appdata':util[_0x96ce('0x4')](_0x96ce('0xd'),_0x48ccd5[_0x96ce('0xe')]),'priority':_0x28a6a3++},_0x2b5c98));}if(_0x48ccd5[_0x96ce('0xf')]){_0x18a969[_0x96ce('0x7')](_[_0x96ce('0x8')]({'app':'Authenticate','appdata':_0x48ccd5[_0x96ce('0x10')],'priority':_0x28a6a3++},_0x2b5c98));}_0x18a969[_0x96ce('0x7')](_[_0x96ce('0x8')]({'app':'ChanSpy','appdata':util[_0x96ce('0x4')](_0x96ce('0x11'),_0x18bbb2[_0x96ce('0x12')],_0x48ccd5[_0x96ce('0x13')]?_0x48ccd5[_0x96ce('0x13')][_0x96ce('0x14')](''):''),'priority':_0x28a6a3++},_0x2b5c98));if(_0x48ccd5[_0x96ce('0xb')]){_0x18a969[_0x96ce('0x7')](_[_0x96ce('0x8')]({'app':_0x96ce('0x15'),'priority':_0x28a6a3++},_0x2b5c98));}return _0x18a969;};var getChanSpyApplications=function(_0x1515ea,_0x35b727){var _0x2ee4b9=[];for(var _0x212e28=0x0,_0x1e2c4b=0x1;_0x212e28<_0x35b727['length'];_0x212e28++,_0x1e2c4b=0x1){_0x2ee4b9=_0x2ee4b9['concat'](getUserApplications(_0x1515ea,_0x35b727[_0x212e28],_0x35b727[_0x212e28][_0x96ce('0x16')]));if(_0x35b727[_0x212e28][_0x96ce('0x16')]!=_0x35b727[_0x212e28][_0x96ce('0x12')]){_0x2ee4b9=_0x2ee4b9[_0x96ce('0x17')](getUserApplications(_0x1515ea,_0x35b727[_0x212e28],_0x35b727[_0x212e28][_0x96ce('0x12')]));}}return _0x2ee4b9;};var getChanSpyPromise=function(_0xd857dc,_0x381915){return new BPromise(function(_0x3d8991,_0x1b2cbf){return _0xd857dc[_0x96ce('0x18')]['findAll']({'attributes':['id',_0x96ce('0x12'),_0x96ce('0x16')],'where':{'role':_0x96ce('0x19'),'chanspy':!![]},'raw':!![]})[_0x96ce('0x1a')](function(_0x2c52f3){if(_0x2c52f3){return _0x3d8991(getChanSpyApplications(_0x381915,_0x2c52f3));}return _0x3d8991([]);})[_0x96ce('0x1b')](function(_0x2002dd){_0x1b2cbf(_0x2002dd);});});};module['exports']=function(_0x5c39a2,_0x3a097f){var _0x86a985=_0x5c39a2['models'];return _0x5c39a2['define'](_0x96ce('0x1c'),attributes,{'tableName':'voice_chanspy','paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x2acfe3,_0x9dc88b,_0xa703d){return getChanSpyPromise(_0x86a985,_0x2acfe3)[_0x96ce('0x1a')](function(_0x56f0dd){if(_0x56f0dd&&_0x56f0dd[_0x96ce('0x1d')]){return _0x86a985[_0x96ce('0x1e')][_0x96ce('0x1f')](_0x56f0dd);}})['then'](function(){_0xa703d();})[_0x96ce('0x1b')](function(_0x4670f1){_0xa703d(_0x4670f1);});},'afterUpdate':function(_0x400b7b,_0x25c309,_0x1672b7){return _0x86a985['VoiceExtension'][_0x96ce('0x20')]({'where':{'ChanSpyId':_0x400b7b['id']}})[_0x96ce('0x1a')](function(){return getChanSpyPromise(_0x86a985,_0x400b7b);})[_0x96ce('0x1a')](function(_0x131073){if(_0x131073&&_0x131073['length']){return _0x86a985[_0x96ce('0x1e')][_0x96ce('0x1f')](_0x131073);}})[_0x96ce('0x1a')](function(){_0x1672b7();})['catch'](function(_0x408bf5){_0x1672b7(_0x408bf5);});},'afterDestroy':function(_0x31edcc,_0x710dc8,_0x402ce0){return _0x86a985[_0x96ce('0x1e')][_0x96ce('0x20')]({'where':{'ChanSpyId':_0x31edcc['id']}})[_0x96ce('0x1a')](function(){_0x402ce0();})[_0x96ce('0x1b')](function(_0x1d5417){_0x402ce0(_0x1d5417);});}}});};
\ No newline at end of file
+var _0xb56f=['StopMixMonitor','length','concat','internal','User','findAll','then','catch','exports','models','define','VoiceChanSpy','voice_chanspy','bulkCreate','VoiceExtension','destroy','lodash','util','bluebird','context','from-sip','format','%s%s','prefix','system','Set','CDR(type)=%s','chanspy','record','push','merge','recordingFormat','Authenticate','password','ChanSpy','name','join'];(function(_0x1c2939,_0x442d2c){var _0x4fdd10=function(_0x1c0f75){while(--_0x1c0f75){_0x1c2939['push'](_0x1c2939['shift']());}};_0x4fdd10(++_0x442d2c);}(_0xb56f,0x113));var _0xfb56=function(_0x324a44,_0x331716){_0x324a44=_0x324a44-0x0;var _0x3bdd0c=_0xb56f[_0x324a44];return _0x3bdd0c;};'use strict';var _=require(_0xfb56('0x0'));var util=require(_0xfb56('0x1'));var BPromise=require(_0xfb56('0x2'));var attributes=require('./voiceChanSpy.attributes');var getUserApplications=function(_0x20a32a,_0x335f2a,_0x5027a3){var _0x23b18e=0x1;var _0x2b8252=[];var _0x59c857={'context':_0x335f2a[_0xfb56('0x3')]||_0xfb56('0x4'),'exten':util[_0xfb56('0x5')](_0xfb56('0x6'),_0x20a32a[_0xfb56('0x7')],_0x5027a3),'type':_0xfb56('0x8'),'isApp':![],'ChanSpyId':_0x20a32a['id'],'UserId':_0x335f2a['id']};_0x2b8252['push'](_['merge']({'app':_0xfb56('0x9'),'appdata':util[_0xfb56('0x5')](_0xfb56('0xa'),_0xfb56('0xb')),'priority':_0x23b18e++},_0x59c857));if(_0x20a32a[_0xfb56('0xc')]){_0x2b8252[_0xfb56('0xd')](_[_0xfb56('0xe')]({'app':'MixMonitor','appdata':util['format']('${UNIQUEID}.%s,ab',_0x20a32a[_0xfb56('0xf')]),'priority':_0x23b18e++},_0x59c857));}if(_0x20a32a['auth']){_0x2b8252[_0xfb56('0xd')](_[_0xfb56('0xe')]({'app':_0xfb56('0x10'),'appdata':_0x20a32a[_0xfb56('0x11')],'priority':_0x23b18e++},_0x59c857));}_0x2b8252['push'](_[_0xfb56('0xe')]({'app':_0xfb56('0x12'),'appdata':util[_0xfb56('0x5')]('SIP/%s,%s',_0x335f2a[_0xfb56('0x13')],_0x20a32a['options']?_0x20a32a['options'][_0xfb56('0x14')](''):''),'priority':_0x23b18e++},_0x59c857));if(_0x20a32a[_0xfb56('0xc')]){_0x2b8252[_0xfb56('0xd')](_[_0xfb56('0xe')]({'app':_0xfb56('0x15'),'priority':_0x23b18e++},_0x59c857));}return _0x2b8252;};var getChanSpyApplications=function(_0x3664ac,_0x84da12){var _0x9c31a5=[];for(var _0x14c7b7=0x0,_0x36f8f3=0x1;_0x14c7b7<_0x84da12[_0xfb56('0x16')];_0x14c7b7++,_0x36f8f3=0x1){_0x9c31a5=_0x9c31a5[_0xfb56('0x17')](getUserApplications(_0x3664ac,_0x84da12[_0x14c7b7],_0x84da12[_0x14c7b7][_0xfb56('0x18')]));if(_0x84da12[_0x14c7b7][_0xfb56('0x18')]!=_0x84da12[_0x14c7b7][_0xfb56('0x13')]){_0x9c31a5=_0x9c31a5[_0xfb56('0x17')](getUserApplications(_0x3664ac,_0x84da12[_0x14c7b7],_0x84da12[_0x14c7b7]['name']));}}return _0x9c31a5;};var getChanSpyPromise=function(_0x5e6275,_0x262672){return new BPromise(function(_0x4347ad,_0x1bcdb8){return _0x5e6275[_0xfb56('0x19')][_0xfb56('0x1a')]({'attributes':['id',_0xfb56('0x13'),_0xfb56('0x18')],'where':{'role':'agent','chanspy':!![]},'raw':!![]})[_0xfb56('0x1b')](function(_0x4cc2aa){if(_0x4cc2aa){return _0x4347ad(getChanSpyApplications(_0x262672,_0x4cc2aa));}return _0x4347ad([]);})[_0xfb56('0x1c')](function(_0x999533){_0x1bcdb8(_0x999533);});});};module[_0xfb56('0x1d')]=function(_0x340d47,_0x7d50b4){var _0xc98fe7=_0x340d47[_0xfb56('0x1e')];return _0x340d47[_0xfb56('0x1f')](_0xfb56('0x20'),attributes,{'tableName':_0xfb56('0x21'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x48d93d,_0x498be4,_0x17409e){return getChanSpyPromise(_0xc98fe7,_0x48d93d)[_0xfb56('0x1b')](function(_0x158869){if(_0x158869&&_0x158869[_0xfb56('0x16')]){return _0xc98fe7['VoiceExtension'][_0xfb56('0x22')](_0x158869);}})['then'](function(){_0x17409e();})[_0xfb56('0x1c')](function(_0x4cda28){_0x17409e(_0x4cda28);});},'afterUpdate':function(_0x7748df,_0x59370f,_0x336492){return _0xc98fe7[_0xfb56('0x23')][_0xfb56('0x24')]({'where':{'ChanSpyId':_0x7748df['id']}})[_0xfb56('0x1b')](function(){return getChanSpyPromise(_0xc98fe7,_0x7748df);})['then'](function(_0x41c6f4){if(_0x41c6f4&&_0x41c6f4[_0xfb56('0x16')]){return _0xc98fe7['VoiceExtension'][_0xfb56('0x22')](_0x41c6f4);}})[_0xfb56('0x1b')](function(){_0x336492();})[_0xfb56('0x1c')](function(_0x5e9394){_0x336492(_0x5e9394);});},'afterDestroy':function(_0x2efcc1,_0x1a4a29,_0x4ead45){return _0xc98fe7['VoiceExtension'][_0xfb56('0x24')]({'where':{'ChanSpyId':_0x2efcc1['id']}})[_0xfb56('0x1b')](function(){_0x4ead45();})[_0xfb56('0x1c')](function(_0x381f3a){_0x4ead45(_0x381f3a);});}}});};
\ No newline at end of file
index d176793..b8d9167 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb0dc=['lodash','util','moment','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http','request','info','VoiceChanSpy,\x20%s,\x20%s','request\x20sent','VoiceChanSpy,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch'];(function(_0x2d48ad,_0x15f5fc){var _0x233968=function(_0x234a35){while(--_0x234a35){_0x2d48ad['push'](_0x2d48ad['shift']());}};_0x233968(++_0x15f5fc);}(_0xb0dc,0x150));var _0xcb0d=function(_0x333176,_0x251cd9){_0x333176=_0x333176-0x0;var _0x15010a=_0xb0dc[_0x333176];return _0x15010a;};'use strict';var _=require(_0xcb0d('0x0'));var util=require(_0xcb0d('0x1'));var moment=require(_0xcb0d('0x2'));var BPromise=require('bluebird');var rs=require(_0xcb0d('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xcb0d('0x4'))['db'];var utils=require(_0xcb0d('0x5'));var logger=require('../../config/logger')(_0xcb0d('0x6'));var config=require(_0xcb0d('0x7'));var jayson=require(_0xcb0d('0x8'));var client=jayson['client'][_0xcb0d('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x30686a,_0xa81ba1,_0x27a9ca){return new BPromise(function(_0x620e64,_0x3a7bc6){return client[_0xcb0d('0xa')](_0x30686a,_0x27a9ca)['then'](function(_0x479ab6){logger[_0xcb0d('0xb')](_0xcb0d('0xc'),_0xa81ba1,_0xcb0d('0xd'));logger['debug'](_0xcb0d('0xe'),_0xa81ba1,_0xcb0d('0xd'),JSON[_0xcb0d('0xf')](_0x479ab6));if(_0x479ab6['error']){if(_0x479ab6[_0xcb0d('0x10')][_0xcb0d('0x11')]===0x1f4){logger[_0xcb0d('0x10')]('VoiceChanSpy,\x20%s,\x20%s',_0xa81ba1,_0x479ab6[_0xcb0d('0x10')][_0xcb0d('0x12')]);return _0x3a7bc6(_0x479ab6[_0xcb0d('0x10')][_0xcb0d('0x12')]);}logger['error'](_0xcb0d('0xc'),_0xa81ba1,_0x479ab6[_0xcb0d('0x10')]['message']);return _0x620e64(_0x479ab6[_0xcb0d('0x10')][_0xcb0d('0x12')]);}else{logger[_0xcb0d('0xb')](_0xcb0d('0xc'),_0xa81ba1,_0xcb0d('0xd'));_0x620e64(_0x479ab6[_0xcb0d('0x13')]['message']);}})[_0xcb0d('0x14')](function(_0x59c1b8){logger['error'](_0xcb0d('0xc'),_0xa81ba1,_0x59c1b8);_0x3a7bc6(_0x59c1b8);});});}
\ No newline at end of file
+var _0x8445=['error','code','message','result','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','request','info','VoiceChanSpy,\x20%s,\x20%s','request\x20sent','debug','VoiceChanSpy,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x412124,_0x6965f){var _0x386ed4=function(_0x5e3077){while(--_0x5e3077){_0x412124['push'](_0x412124['shift']());}};_0x386ed4(++_0x6965f);}(_0x8445,0x1a7));var _0x5844=function(_0x5023cb,_0x5ae9a6){_0x5023cb=_0x5023cb-0x0;var _0x52c5d6=_0x8445[_0x5023cb];return _0x52c5d6;};'use strict';var _=require(_0x5844('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x5844('0x1'));var rs=require(_0x5844('0x2'));var fs=require('fs');var Redis=require(_0x5844('0x3'));var db=require(_0x5844('0x4'))['db'];var utils=require(_0x5844('0x5'));var logger=require(_0x5844('0x6'))('rpc');var config=require(_0x5844('0x7'));var jayson=require(_0x5844('0x8'));var client=jayson['client'][_0x5844('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x57e6ca,_0x5dacca,_0x3848e5){return new BPromise(function(_0x2863e5,_0x554b9f){return client[_0x5844('0xa')](_0x57e6ca,_0x3848e5)['then'](function(_0x40762f){logger[_0x5844('0xb')](_0x5844('0xc'),_0x5dacca,_0x5844('0xd'));logger[_0x5844('0xe')](_0x5844('0xf'),_0x5dacca,_0x5844('0xd'),JSON[_0x5844('0x10')](_0x40762f));if(_0x40762f[_0x5844('0x11')]){if(_0x40762f['error'][_0x5844('0x12')]===0x1f4){logger[_0x5844('0x11')]('VoiceChanSpy,\x20%s,\x20%s',_0x5dacca,_0x40762f[_0x5844('0x11')][_0x5844('0x13')]);return _0x554b9f(_0x40762f['error'][_0x5844('0x13')]);}logger[_0x5844('0x11')]('VoiceChanSpy,\x20%s,\x20%s',_0x5dacca,_0x40762f[_0x5844('0x11')][_0x5844('0x13')]);return _0x2863e5(_0x40762f[_0x5844('0x11')][_0x5844('0x13')]);}else{logger[_0x5844('0xb')]('VoiceChanSpy,\x20%s,\x20%s',_0x5dacca,'request\x20sent');_0x2863e5(_0x40762f[_0x5844('0x14')]['message']);}})[_0x5844('0x15')](function(_0xeaa061){logger[_0x5844('0x11')](_0x5844('0xc'),_0x5dacca,_0xeaa061);_0x554b9f(_0xeaa061);});});}
\ No newline at end of file
index 5a46c67..b40c7e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7fea=['isAuthenticated','index','get','/:id','show','post','update','delete','destroy','util','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceContext.controller'];(function(_0x5f0089,_0x227e2c){var _0x193892=function(_0x24051f){while(--_0x24051f){_0x5f0089['push'](_0x5f0089['shift']());}};_0x193892(++_0x227e2c);}(_0x7fea,0x149));var _0xa7fe=function(_0x2741fa,_0x229db9){_0x2741fa=_0x2741fa-0x0;var _0xb9e5f3=_0x7fea[_0x2741fa];return _0xb9e5f3;};'use strict';var multer=require('multer');var util=require(_0xa7fe('0x0'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0xa7fe('0x1'));var router=express[_0xa7fe('0x2')]();var auth=require(_0xa7fe('0x3'));var interaction=require(_0xa7fe('0x4'));var config=require(_0xa7fe('0x5'));var controller=require(_0xa7fe('0x6'));router['get']('/',auth[_0xa7fe('0x7')](),controller[_0xa7fe('0x8')]);router[_0xa7fe('0x9')](_0xa7fe('0xa'),auth[_0xa7fe('0x7')](),controller[_0xa7fe('0xb')]);router[_0xa7fe('0xc')]('/',auth[_0xa7fe('0x7')](),controller['create']);router['put'](_0xa7fe('0xa'),auth[_0xa7fe('0x7')](),controller[_0xa7fe('0xd')]);router[_0xa7fe('0xe')]('/:id',auth[_0xa7fe('0x7')](),controller[_0xa7fe('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0xb8cb=['connect-timeout','express','Router','../../components/auth/service','../../config/environment','./voiceContext.controller','index','get','/:id','show','post','isAuthenticated','create','put','update','delete','destroy','multer','util','path'];(function(_0x58ff85,_0x754999){var _0x331870=function(_0x12b5c9){while(--_0x12b5c9){_0x58ff85['push'](_0x58ff85['shift']());}};_0x331870(++_0x754999);}(_0xb8cb,0xd9));var _0xbb8c=function(_0x2937c6,_0x526e35){_0x2937c6=_0x2937c6-0x0;var _0x15d31e=_0xb8cb[_0x2937c6];return _0x15d31e;};'use strict';var multer=require(_0xbb8c('0x0'));var util=require(_0xbb8c('0x1'));var path=require(_0xbb8c('0x2'));var timeout=require(_0xbb8c('0x3'));var express=require(_0xbb8c('0x4'));var router=express[_0xbb8c('0x5')]();var auth=require(_0xbb8c('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0xbb8c('0x7'));var controller=require(_0xbb8c('0x8'));router['get']('/',auth['isAuthenticated'](),controller[_0xbb8c('0x9')]);router[_0xbb8c('0xa')](_0xbb8c('0xb'),auth['isAuthenticated'](),controller[_0xbb8c('0xc')]);router[_0xbb8c('0xd')]('/',auth[_0xbb8c('0xe')](),controller[_0xbb8c('0xf')]);router[_0xbb8c('0x10')](_0xbb8c('0xb'),auth[_0xbb8c('0xe')](),controller[_0xbb8c('0x11')]);router[_0xbb8c('0x12')](_0xbb8c('0xb'),auth[_0xbb8c('0xe')](),controller[_0xbb8c('0x13')]);module['exports']=router;
\ No newline at end of file
index 5e031a6..c3b39b0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6fc5=['exports','STRING','name','BOOLEAN'];(function(_0x2d99bc,_0xf97ff2){var _0x542ad4=function(_0xd55f9c){while(--_0xd55f9c){_0x2d99bc['push'](_0x2d99bc['shift']());}};_0x542ad4(++_0xf97ff2);}(_0x6fc5,0x144));var _0x56fc=function(_0x138a68,_0x401c11){_0x138a68=_0x138a68-0x0;var _0x1bb48f=_0x6fc5[_0x138a68];return _0x1bb48f;};'use strict';var Sequelize=require('sequelize');module[_0x56fc('0x0')]={'name':{'type':Sequelize[_0x56fc('0x1')],'unique':_0x56fc('0x2')},'description':{'type':Sequelize[_0x56fc('0x1')],'allowNull':!![]},'defaultEntry':{'type':Sequelize[_0x56fc('0x3')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x37ed=['exports','STRING','name','BOOLEAN'];(function(_0x32b542,_0x4512fa){var _0x554d54=function(_0x35cdfc){while(--_0x35cdfc){_0x32b542['push'](_0x32b542['shift']());}};_0x554d54(++_0x4512fa);}(_0x37ed,0xc4));var _0xd37e=function(_0x3679f1,_0x47db09){_0x3679f1=_0x3679f1-0x0;var _0x40965e=_0x37ed[_0x3679f1];return _0x40965e;};'use strict';var Sequelize=require('sequelize');module[_0xd37e('0x0')]={'name':{'type':Sequelize[_0xd37e('0x1')],'unique':_0xd37e('0x2')},'description':{'type':Sequelize[_0xd37e('0x1')],'allowNull':!![]},'defaultEntry':{'type':Sequelize[_0xd37e('0x3')],'defaultValue':0x0}};
\ No newline at end of file
index 4e8224f..211d36c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x10ab=['error','code','VoiceContext,\x20%s,\x20%s','message','request\x20sent','end','status','json','count','offset','limit','Content-Range','apply','destroy','get','UserProfileResource','sendStatus','stack','name','index','VoiceContext','model','query','filters','intersection','fields','attributes','length','nolimit','sort','pick','filter','where','map','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','keys','merge','find','create','body','readFileSync','join','root','utf8','render','writeFileSync','/etc/asterisk/extensions_xcally_contexts.conf','chan_sip.so','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','Contexts','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','Reload','html-pdf','eml-format','zip-dir','request-promise','moment','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','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','debug','VoiceContext,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x2f3412,_0x2b8d24){var _0x4071d6=function(_0x5af33d){while(--_0x5af33d){_0x2f3412['push'](_0x2f3412['shift']());}};_0x4071d6(++_0x2b8d24);}(_0x10ab,0x178));var _0xb10a=function(_0x49c640,_0x548ccf){_0x49c640=_0x49c640-0x0;var _0xb21b73=_0x10ab[_0x49c640];return _0xb21b73;};'use strict';var pdf=require(_0xb10a('0x0'));var emlformat=require(_0xb10a('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xb10a('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xb10a('0x3'));var moment=require(_0xb10a('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xb10a('0x5'));var util=require(_0xb10a('0x6'));var path=require('path');var sox=require(_0xb10a('0x7'));var csv=require(_0xb10a('0x8'));var ejs=require(_0xb10a('0x9'));var fs=require('fs');var _=require(_0xb10a('0xa'));var squel=require(_0xb10a('0xb'));var crypto=require(_0xb10a('0xc'));var jsforce=require(_0xb10a('0xd'));var deskjs=require(_0xb10a('0xe'));var toCsv=require('to-csv');var querystring=require(_0xb10a('0xf'));var Papa=require(_0xb10a('0x10'));var Redis=require(_0xb10a('0x11'));var authService=require(_0xb10a('0x12'));var qs=require(_0xb10a('0x13'));var hardwareService=require(_0xb10a('0x14'));var logger=require(_0xb10a('0x15'))(_0xb10a('0x16'));var utils=require(_0xb10a('0x17'));var config=require(_0xb10a('0x18'));var db=require(_0xb10a('0x19'))['db'];var jayson=require(_0xb10a('0x1a'));var client=jayson[_0xb10a('0x1b')]['http']({'port':0x232a});function checkPasswordPattern(_0x57d300,_0x1a7aa5,_0x1c097f){if(_0x1c097f){var _0x1f367b=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x1f367b[_0xb10a('0x1c')](_0x1a7aa5)){return _0x57d300;}else{throw new Error(_0xb10a('0x1d'));}}else{return _0x57d300;}}function respondWithRpcPromise(_0xa12719,_0x382e8e,_0x2cc873,_0xa96343){return new BPromise(function(_0x27402a,_0x39389a){var _0x17e8d0=_0xa96343||client;return _0x17e8d0[_0xb10a('0x1e')](_0xa12719,_0x2cc873)[_0xb10a('0x1f')](function(_0x516e3b){logger[_0xb10a('0x20')]('VoiceContext,\x20%s,\x20%s',_0x382e8e,'request\x20sent');logger[_0xb10a('0x21')](_0xb10a('0x22'),_0x382e8e,'request\x20sent',JSON[_0xb10a('0x23')](_0x516e3b));if(_0x516e3b[_0xb10a('0x24')]){if(_0x516e3b[_0xb10a('0x24')][_0xb10a('0x25')]===0x1f4){logger['error'](_0xb10a('0x26'),_0x382e8e,_0x516e3b[_0xb10a('0x24')][_0xb10a('0x27')]);return _0x39389a(_0x516e3b[_0xb10a('0x24')][_0xb10a('0x27')]);}logger['error'](_0xb10a('0x26'),_0x382e8e,_0x516e3b['error']['message']);return _0x27402a(_0x516e3b[_0xb10a('0x24')][_0xb10a('0x27')]);}else{logger[_0xb10a('0x20')](_0xb10a('0x26'),_0x382e8e,_0xb10a('0x28'));_0x27402a(_0x516e3b['result'][_0xb10a('0x27')]);}})['catch'](function(_0x479d96){logger[_0xb10a('0x24')](_0xb10a('0x26'),_0x382e8e,_0x479d96);_0x39389a(_0x479d96);});});}function respondWithStatusCode(_0x1d0f03,_0x31044c){_0x31044c=_0x31044c||0xcc;return function(_0x58d79c){if(_0x58d79c){return _0x1d0f03['sendStatus'](_0x31044c);}return _0x1d0f03['status'](_0x31044c)[_0xb10a('0x29')]();};}function respondWithResult(_0x1fd239,_0x3dc1b7){_0x3dc1b7=_0x3dc1b7||0xc8;return function(_0x2c33d5){if(_0x2c33d5){return _0x1fd239[_0xb10a('0x2a')](_0x3dc1b7)[_0xb10a('0x2b')](_0x2c33d5);}};}function respondWithFilteredResult(_0x481454,_0x28b2ab){return function(_0x1d2fb4){if(_0x1d2fb4){var _0xfb2e32=_0x1d2fb4[_0xb10a('0x2c')],_0x55c081=_0x28b2ab[_0xb10a('0x2d')],_0x5deb8c=_0x28b2ab[_0xb10a('0x2d')]+_0x28b2ab[_0xb10a('0x2e')],_0x179ede;if(_0x5deb8c>=_0xfb2e32){_0x5deb8c=_0xfb2e32;_0x179ede=0xc8;}else{_0x179ede=0xce;}_0x481454[_0xb10a('0x2a')](_0x179ede);return _0x481454['set'](_0xb10a('0x2f'),_0x55c081+'-'+_0x5deb8c+'/'+_0xfb2e32)[_0xb10a('0x2b')](_0x1d2fb4);}return null;};}function patchUpdates(_0x2a4292){return function(_0x257ca3){try{jsonpatch[_0xb10a('0x30')](_0x257ca3,_0x2a4292,!![]);}catch(_0x1c89f0){return BPromise['reject'](_0x1c89f0);}return _0x257ca3['save']();};}function saveUpdates(_0x147885,_0x516597){return function(_0x7f5618){if(_0x7f5618){return _0x7f5618['update'](_0x147885)['then'](function(_0x1b8e37){return _0x1b8e37;});}return null;};}function removeEntity(_0x225d9a,_0x18a78f){return function(_0x33a53f){if(_0x33a53f){return _0x33a53f[_0xb10a('0x31')]()['then'](function(){var _0x5b0819=_0x33a53f[_0xb10a('0x32')]({'plain':!![]});var _0x75c585='Contexts';return db[_0xb10a('0x33')][_0xb10a('0x31')]({'where':{'type':_0x75c585,'resourceId':_0x5b0819['id']}})[_0xb10a('0x1f')](function(){return _0x33a53f;});})[_0xb10a('0x1f')](function(){_0x225d9a[_0xb10a('0x2a')](0xcc)[_0xb10a('0x29')]();});}};}function handleEntityNotFound(_0x2d3932,_0x3dc179){return function(_0x33cd4a){if(!_0x33cd4a){_0x2d3932[_0xb10a('0x34')](0x194);}return _0x33cd4a;};}function handleError(_0x52ff25,_0x17bf18){_0x17bf18=_0x17bf18||0x1f4;return function(_0x1b74e5){logger[_0xb10a('0x24')](_0x1b74e5[_0xb10a('0x35')]);if(_0x1b74e5['name']){delete _0x1b74e5[_0xb10a('0x36')];}_0x52ff25['status'](_0x17bf18)['send'](_0x1b74e5);};}exports[_0xb10a('0x37')]=function(_0x262cb3,_0x3800e3){var _0xfe0bdc={},_0x3581da={},_0x39c386={'count':0x0,'rows':[]};var _0x56617e=db[_0xb10a('0x38')]['rawAttributes'];_0x3581da[_0xb10a('0x39')]=_['keys'](_0x56617e);_0x3581da[_0xb10a('0x3a')]=_['keys'](_0x262cb3[_0xb10a('0x3a')]);_0x3581da[_0xb10a('0x3b')]=_['intersection'](_0x3581da[_0xb10a('0x39')],_0x3581da['query']);_0xfe0bdc['attributes']=_[_0xb10a('0x3c')](_0x3581da[_0xb10a('0x39')],qs[_0xb10a('0x3d')](_0x262cb3['query'][_0xb10a('0x3d')]));_0xfe0bdc[_0xb10a('0x3e')]=_0xfe0bdc[_0xb10a('0x3e')][_0xb10a('0x3f')]?_0xfe0bdc['attributes']:_0x3581da[_0xb10a('0x39')];if(!_0x262cb3[_0xb10a('0x3a')]['hasOwnProperty'](_0xb10a('0x40'))){_0xfe0bdc[_0xb10a('0x2e')]=qs[_0xb10a('0x2e')](_0x262cb3[_0xb10a('0x3a')]['limit']);_0xfe0bdc['offset']=qs['offset'](_0x262cb3[_0xb10a('0x3a')]['offset']);}_0xfe0bdc['order']=qs['sort'](_0x262cb3['query'][_0xb10a('0x41')]);_0xfe0bdc['where']=qs[_0xb10a('0x3b')](_[_0xb10a('0x42')](_0x262cb3[_0xb10a('0x3a')],_0x3581da[_0xb10a('0x3b')]));if(_0x262cb3[_0xb10a('0x3a')][_0xb10a('0x43')]){_0xfe0bdc['where']=_['merge'](_0xfe0bdc[_0xb10a('0x44')],{'$or':_[_0xb10a('0x45')](_0x56617e,function(_0x32e865){if(_0x32e865['type'][_0xb10a('0x46')]!==_0xb10a('0x47')){var _0x5e4a91={};_0x5e4a91[_0x32e865[_0xb10a('0x48')]]={'$like':'%'+_0x262cb3[_0xb10a('0x3a')]['filter']+'%'};return _0x5e4a91;}})});}_0xfe0bdc=_['merge']({},_0xfe0bdc,_0x262cb3[_0xb10a('0x49')]);var _0x3edfbf={'where':_0xfe0bdc[_0xb10a('0x44')]};return db[_0xb10a('0x38')][_0xb10a('0x2c')](_0x3edfbf)[_0xb10a('0x1f')](function(_0xe8b147){_0x39c386[_0xb10a('0x2c')]=_0xe8b147;if(_0x262cb3['query'][_0xb10a('0x4a')]){_0xfe0bdc[_0xb10a('0x4b')]=[{'all':!![]}];}return db[_0xb10a('0x38')][_0xb10a('0x4c')](_0xfe0bdc);})[_0xb10a('0x1f')](function(_0x49ae7a){_0x39c386[_0xb10a('0x4d')]=_0x49ae7a;return _0x39c386;})[_0xb10a('0x1f')](respondWithFilteredResult(_0x3800e3,_0xfe0bdc))[_0xb10a('0x4e')](handleError(_0x3800e3,null));};exports[_0xb10a('0x4f')]=function(_0xe84e4d,_0x9ffcab){var _0x4cfd80={'raw':![],'where':{'id':_0xe84e4d[_0xb10a('0x50')]['id']}},_0x55fe64={};_0x55fe64[_0xb10a('0x39')]=_[_0xb10a('0x51')](db[_0xb10a('0x38')]['rawAttributes']);_0x55fe64[_0xb10a('0x3a')]=_[_0xb10a('0x51')](_0xe84e4d['query']);_0x55fe64['filters']=_[_0xb10a('0x3c')](_0x55fe64[_0xb10a('0x39')],_0x55fe64[_0xb10a('0x3a')]);_0x4cfd80[_0xb10a('0x3e')]=_[_0xb10a('0x3c')](_0x55fe64[_0xb10a('0x39')],qs['fields'](_0xe84e4d['query'][_0xb10a('0x3d')]));_0x4cfd80['attributes']=_0x4cfd80[_0xb10a('0x3e')][_0xb10a('0x3f')]?_0x4cfd80[_0xb10a('0x3e')]:_0x55fe64[_0xb10a('0x39')];if(_0xe84e4d[_0xb10a('0x3a')][_0xb10a('0x4a')]){_0x4cfd80[_0xb10a('0x4b')]=[{'all':!![]}];}_0x4cfd80=_[_0xb10a('0x52')]({},_0x4cfd80,_0xe84e4d[_0xb10a('0x49')]);return db[_0xb10a('0x38')][_0xb10a('0x53')](_0x4cfd80)[_0xb10a('0x1f')](handleEntityNotFound(_0x9ffcab,null))[_0xb10a('0x1f')](respondWithResult(_0x9ffcab,null))['catch'](handleError(_0x9ffcab,null));};exports['create']=function(_0x226e75,_0x3d78f6,_0x4d8c2d){var _0x444442;return db[_0xb10a('0x38')][_0xb10a('0x54')](_0x226e75[_0xb10a('0x55')],{'raw':!![]})[_0xb10a('0x1f')](function(_0x547cad){_0x444442=_0x547cad;return db[_0xb10a('0x38')][_0xb10a('0x4c')]({'raw':!![]});})[_0xb10a('0x1f')](function(_0x45f2a4){var _0x199acd=fs[_0xb10a('0x56')](path[_0xb10a('0x57')](config[_0xb10a('0x58')],'server/files/templates/context.ejs'),_0xb10a('0x59'));var _0x5477d0=ejs[_0xb10a('0x5a')](_0x199acd,{'contexts':_0x45f2a4||[]});fs[_0xb10a('0x5b')](_0xb10a('0x5c'),_0x5477d0);})[_0xb10a('0x1f')](function(){return respondWithRpcPromise('Reload','create',{'module':_0xb10a('0x5d')});})[_0xb10a('0x1f')](function(){var _0x26cc8d=_0x226e75[_0xb10a('0x5e')][_0xb10a('0x32')]({'plain':!![]});if(!_0x26cc8d)throw new Error(_0xb10a('0x5f'));if(_0x26cc8d[_0xb10a('0x60')]===_0xb10a('0x5e')){var _0x7bcb24=_0x444442[_0xb10a('0x32')]({'plain':!![]});return db[_0xb10a('0x61')][_0xb10a('0x53')]({'where':{'name':_0xb10a('0x62'),'userProfileId':_0x26cc8d[_0xb10a('0x63')]},'raw':!![]})[_0xb10a('0x1f')](function(_0x54673c){if(_0x54673c&&_0x54673c['autoAssociation']===0x0){return db['UserProfileResource'][_0xb10a('0x54')]({'name':_0x7bcb24[_0xb10a('0x36')],'resourceId':_0x7bcb24['id'],'type':_0x54673c[_0xb10a('0x36')],'sectionId':_0x54673c['id']},{})['then'](function(){return _0x444442;});}else{return _0x444442;}})[_0xb10a('0x4e')](function(_0x132c2a){logger['error'](_0xb10a('0x64'),_0x132c2a);throw _0x132c2a;});}return _0x444442;})[_0xb10a('0x1f')](respondWithResult(_0x3d78f6,0xc9))[_0xb10a('0x4e')](handleError(_0x3d78f6,null));};exports[_0xb10a('0x65')]=function(_0x5bd74e,_0x501a99,_0x88ed9d){var _0x283085;return db[_0xb10a('0x38')]['find']({'where':{'id':_0x5bd74e[_0xb10a('0x50')]['id']}})[_0xb10a('0x1f')](handleEntityNotFound(_0x501a99,null))[_0xb10a('0x1f')](saveUpdates(_0x5bd74e[_0xb10a('0x55')],null))[_0xb10a('0x1f')](function(_0x57c6ee){if(_0x57c6ee){_0x283085=_0x57c6ee;return db['VoiceContext']['findAll']({'raw':!![]});}})[_0xb10a('0x1f')](function(_0x1c5ba5){var _0x4fa9b2=fs[_0xb10a('0x56')](path[_0xb10a('0x57')](config[_0xb10a('0x58')],'server/files/templates/context.ejs'),'utf8');var _0x246b2c=ejs[_0xb10a('0x5a')](_0x4fa9b2,{'contexts':_0x1c5ba5||[]});fs[_0xb10a('0x5b')](_0xb10a('0x5c'),_0x246b2c);})[_0xb10a('0x1f')](function(){return respondWithRpcPromise('Reload',_0xb10a('0x65'),{'module':_0xb10a('0x5d')});})[_0xb10a('0x1f')](function(){return _0x283085;})['then'](respondWithResult(_0x501a99,null))[_0xb10a('0x4e')](handleError(_0x501a99,null));};exports[_0xb10a('0x31')]=function(_0x2a0f01,_0x270e98,_0x2c5518){var _0x107872;return db[_0xb10a('0x38')][_0xb10a('0x53')]({'where':{'id':_0x2a0f01['params']['id']}})[_0xb10a('0x1f')](handleEntityNotFound(_0x270e98,null))[_0xb10a('0x1f')](removeEntity(_0x270e98,null))[_0xb10a('0x1f')](function(){return db['VoiceContext']['findAll']({'raw':!![]});})[_0xb10a('0x1f')](function(_0x4c38ab){var _0x383813=fs[_0xb10a('0x56')](path[_0xb10a('0x57')](config['root'],'server/files/templates/context.ejs'),'utf8');var _0x15dd59=ejs[_0xb10a('0x5a')](_0x383813,{'contexts':_0x4c38ab});fs[_0xb10a('0x5b')](_0xb10a('0x5c'),_0x15dd59);return respondWithRpcPromise(_0xb10a('0x66'),_0xb10a('0x31'),{'module':_0xb10a('0x5d')});})[_0xb10a('0x4e')](handleError(_0x270e98,null));};
\ No newline at end of file
+var _0x7144=['UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','server/files/templates/context.ejs','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','mustache','util','path','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','client','http','request','then','info','request\x20sent','debug','VoiceContext,\x20%s,\x20%s,\x20%s','stringify','error','code','VoiceContext,\x20%s,\x20%s','message','result','catch','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','get','Contexts','UserProfileResource','destroy','stack','name','send','index','VoiceContext','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','nolimit','limit','order','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','params','find','create','body','readFileSync','join','root','utf8','render','writeFileSync','/etc/asterisk/extensions_xcally_contexts.conf','Reload','chan_sip.so','role','user'];(function(_0x52bdfe,_0x5282ec){var _0x5c6df7=function(_0x2355bb){while(--_0x2355bb){_0x52bdfe['push'](_0x52bdfe['shift']());}};_0x5c6df7(++_0x5282ec);}(_0x7144,0x6e));var _0x4714=function(_0x5c086f,_0x5b5b6e){_0x5c086f=_0x5c086f-0x0;var _0x5f3287=_0x7144[_0x5c086f];return _0x5f3287;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x4714('0x0'));var rimraf=require(_0x4714('0x1'));var zipdir=require(_0x4714('0x2'));var jsonpatch=require(_0x4714('0x3'));var rp=require(_0x4714('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x4714('0x5'));var util=require(_0x4714('0x6'));var path=require(_0x4714('0x7'));var sox=require(_0x4714('0x8'));var csv=require(_0x4714('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x4714('0xa'));var squel=require(_0x4714('0xb'));var crypto=require('crypto');var jsforce=require(_0x4714('0xc'));var deskjs=require(_0x4714('0xd'));var toCsv=require(_0x4714('0x9'));var querystring=require(_0x4714('0xe'));var Papa=require(_0x4714('0xf'));var Redis=require(_0x4714('0x10'));var authService=require(_0x4714('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x4714('0x12'));var logger=require(_0x4714('0x13'))(_0x4714('0x14'));var utils=require(_0x4714('0x15'));var config=require('../../config/environment');var db=require(_0x4714('0x16'))['db'];var jayson=require('jayson/promise');var client=jayson[_0x4714('0x17')][_0x4714('0x18')]({'port':0x232a});function checkPasswordPattern(_0xf22e1e,_0x3e7f8e,_0x54d777){if(_0x54d777){var _0x35741e=new RegExp(/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/);if(_0x35741e['test'](_0x3e7f8e)){return _0xf22e1e;}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 _0xf22e1e;}}function respondWithRpcPromise(_0x3ae755,_0x39268f,_0x2dd061,_0x4c806d){return new BPromise(function(_0xf4e2db,_0x137a05){var _0x1abed3=_0x4c806d||client;return _0x1abed3[_0x4714('0x19')](_0x3ae755,_0x2dd061)[_0x4714('0x1a')](function(_0x2b706d){logger[_0x4714('0x1b')]('VoiceContext,\x20%s,\x20%s',_0x39268f,_0x4714('0x1c'));logger[_0x4714('0x1d')](_0x4714('0x1e'),_0x39268f,_0x4714('0x1c'),JSON[_0x4714('0x1f')](_0x2b706d));if(_0x2b706d[_0x4714('0x20')]){if(_0x2b706d[_0x4714('0x20')][_0x4714('0x21')]===0x1f4){logger[_0x4714('0x20')](_0x4714('0x22'),_0x39268f,_0x2b706d['error'][_0x4714('0x23')]);return _0x137a05(_0x2b706d[_0x4714('0x20')][_0x4714('0x23')]);}logger[_0x4714('0x20')](_0x4714('0x22'),_0x39268f,_0x2b706d[_0x4714('0x20')]['message']);return _0xf4e2db(_0x2b706d['error'][_0x4714('0x23')]);}else{logger['info'](_0x4714('0x22'),_0x39268f,'request\x20sent');_0xf4e2db(_0x2b706d[_0x4714('0x24')]['message']);}})[_0x4714('0x25')](function(_0x305e29){logger[_0x4714('0x20')](_0x4714('0x22'),_0x39268f,_0x305e29);_0x137a05(_0x305e29);});});}function respondWithStatusCode(_0x32927e,_0x2e6acc){_0x2e6acc=_0x2e6acc||0xcc;return function(_0x16febe){if(_0x16febe){return _0x32927e[_0x4714('0x26')](_0x2e6acc);}return _0x32927e[_0x4714('0x27')](_0x2e6acc)[_0x4714('0x28')]();};}function respondWithResult(_0x183ae4,_0xfe5145){_0xfe5145=_0xfe5145||0xc8;return function(_0x2535c9){if(_0x2535c9){return _0x183ae4[_0x4714('0x27')](_0xfe5145)[_0x4714('0x29')](_0x2535c9);}};}function respondWithFilteredResult(_0x545d6b,_0x18bb33){return function(_0x51eef4){if(_0x51eef4){var _0x249557=_0x51eef4[_0x4714('0x2a')],_0x8c5cff=_0x18bb33[_0x4714('0x2b')],_0x1bb3e9=_0x18bb33['offset']+_0x18bb33['limit'],_0x6441df;if(_0x1bb3e9>=_0x249557){_0x1bb3e9=_0x249557;_0x6441df=0xc8;}else{_0x6441df=0xce;}_0x545d6b[_0x4714('0x27')](_0x6441df);return _0x545d6b[_0x4714('0x2c')](_0x4714('0x2d'),_0x8c5cff+'-'+_0x1bb3e9+'/'+_0x249557)['json'](_0x51eef4);}return null;};}function patchUpdates(_0x52f2f0){return function(_0x270275){try{jsonpatch[_0x4714('0x2e')](_0x270275,_0x52f2f0,!![]);}catch(_0x1516c6){return BPromise[_0x4714('0x2f')](_0x1516c6);}return _0x270275[_0x4714('0x30')]();};}function saveUpdates(_0x1ec3b9,_0x2b8b41){return function(_0x386239){if(_0x386239){return _0x386239[_0x4714('0x31')](_0x1ec3b9)['then'](function(_0x1273e0){return _0x1273e0;});}return null;};}function removeEntity(_0x38f387,_0x31580e){return function(_0x4a5c21){if(_0x4a5c21){return _0x4a5c21['destroy']()[_0x4714('0x1a')](function(){var _0x1b1e9f=_0x4a5c21[_0x4714('0x32')]({'plain':!![]});var _0x36de65=_0x4714('0x33');return db[_0x4714('0x34')][_0x4714('0x35')]({'where':{'type':_0x36de65,'resourceId':_0x1b1e9f['id']}})['then'](function(){return _0x4a5c21;});})['then'](function(){_0x38f387[_0x4714('0x27')](0xcc)[_0x4714('0x28')]();});}};}function handleEntityNotFound(_0x9ebc72,_0x3fe3e4){return function(_0x15aafe){if(!_0x15aafe){_0x9ebc72['sendStatus'](0x194);}return _0x15aafe;};}function handleError(_0x49dba8,_0x1aba08){_0x1aba08=_0x1aba08||0x1f4;return function(_0x80252b){logger[_0x4714('0x20')](_0x80252b[_0x4714('0x36')]);if(_0x80252b[_0x4714('0x37')]){delete _0x80252b['name'];}_0x49dba8[_0x4714('0x27')](_0x1aba08)[_0x4714('0x38')](_0x80252b);};}exports[_0x4714('0x39')]=function(_0x11e5ab,_0x3d0102){var _0x5e3161={},_0x59b2a7={},_0x3f0283={'count':0x0,'rows':[]};var _0x387ea2=db[_0x4714('0x3a')][_0x4714('0x3b')];_0x59b2a7['model']=_[_0x4714('0x3c')](_0x387ea2);_0x59b2a7['query']=_[_0x4714('0x3c')](_0x11e5ab[_0x4714('0x3d')]);_0x59b2a7[_0x4714('0x3e')]=_[_0x4714('0x3f')](_0x59b2a7[_0x4714('0x40')],_0x59b2a7[_0x4714('0x3d')]);_0x5e3161[_0x4714('0x41')]=_['intersection'](_0x59b2a7[_0x4714('0x40')],qs[_0x4714('0x42')](_0x11e5ab[_0x4714('0x3d')]['fields']));_0x5e3161[_0x4714('0x41')]=_0x5e3161['attributes'][_0x4714('0x43')]?_0x5e3161['attributes']:_0x59b2a7[_0x4714('0x40')];if(!_0x11e5ab[_0x4714('0x3d')]['hasOwnProperty'](_0x4714('0x44'))){_0x5e3161[_0x4714('0x45')]=qs[_0x4714('0x45')](_0x11e5ab[_0x4714('0x3d')][_0x4714('0x45')]);_0x5e3161[_0x4714('0x2b')]=qs['offset'](_0x11e5ab[_0x4714('0x3d')][_0x4714('0x2b')]);}_0x5e3161[_0x4714('0x46')]=qs[_0x4714('0x47')](_0x11e5ab[_0x4714('0x3d')]['sort']);_0x5e3161['where']=qs[_0x4714('0x3e')](_[_0x4714('0x48')](_0x11e5ab[_0x4714('0x3d')],_0x59b2a7[_0x4714('0x3e')]));if(_0x11e5ab[_0x4714('0x3d')][_0x4714('0x49')]){_0x5e3161[_0x4714('0x4a')]=_[_0x4714('0x4b')](_0x5e3161[_0x4714('0x4a')],{'$or':_[_0x4714('0x4c')](_0x387ea2,function(_0x39907b){if(_0x39907b[_0x4714('0x4d')][_0x4714('0x4e')]!==_0x4714('0x4f')){var _0x4d7408={};_0x4d7408[_0x39907b[_0x4714('0x50')]]={'$like':'%'+_0x11e5ab[_0x4714('0x3d')][_0x4714('0x49')]+'%'};return _0x4d7408;}})});}_0x5e3161=_[_0x4714('0x4b')]({},_0x5e3161,_0x11e5ab[_0x4714('0x51')]);var _0x381759={'where':_0x5e3161[_0x4714('0x4a')]};return db['VoiceContext'][_0x4714('0x2a')](_0x381759)[_0x4714('0x1a')](function(_0x21be72){_0x3f0283[_0x4714('0x2a')]=_0x21be72;if(_0x11e5ab[_0x4714('0x3d')][_0x4714('0x52')]){_0x5e3161[_0x4714('0x53')]=[{'all':!![]}];}return db[_0x4714('0x3a')][_0x4714('0x54')](_0x5e3161);})[_0x4714('0x1a')](function(_0xe2909a){_0x3f0283[_0x4714('0x55')]=_0xe2909a;return _0x3f0283;})[_0x4714('0x1a')](respondWithFilteredResult(_0x3d0102,_0x5e3161))[_0x4714('0x25')](handleError(_0x3d0102,null));};exports[_0x4714('0x56')]=function(_0x1e7925,_0x402337){var _0x25b8f2={'raw':![],'where':{'id':_0x1e7925[_0x4714('0x57')]['id']}},_0x444267={};_0x444267[_0x4714('0x40')]=_['keys'](db['VoiceContext']['rawAttributes']);_0x444267[_0x4714('0x3d')]=_[_0x4714('0x3c')](_0x1e7925[_0x4714('0x3d')]);_0x444267[_0x4714('0x3e')]=_[_0x4714('0x3f')](_0x444267[_0x4714('0x40')],_0x444267[_0x4714('0x3d')]);_0x25b8f2[_0x4714('0x41')]=_[_0x4714('0x3f')](_0x444267[_0x4714('0x40')],qs[_0x4714('0x42')](_0x1e7925['query']['fields']));_0x25b8f2['attributes']=_0x25b8f2[_0x4714('0x41')]['length']?_0x25b8f2[_0x4714('0x41')]:_0x444267[_0x4714('0x40')];if(_0x1e7925[_0x4714('0x3d')][_0x4714('0x52')]){_0x25b8f2['include']=[{'all':!![]}];}_0x25b8f2=_[_0x4714('0x4b')]({},_0x25b8f2,_0x1e7925[_0x4714('0x51')]);return db[_0x4714('0x3a')][_0x4714('0x58')](_0x25b8f2)[_0x4714('0x1a')](handleEntityNotFound(_0x402337,null))[_0x4714('0x1a')](respondWithResult(_0x402337,null))[_0x4714('0x25')](handleError(_0x402337,null));};exports[_0x4714('0x59')]=function(_0x55a6df,_0x438f42,_0x1c4524){var _0x1614af;return db[_0x4714('0x3a')][_0x4714('0x59')](_0x55a6df[_0x4714('0x5a')],{'raw':!![]})[_0x4714('0x1a')](function(_0x36aa37){_0x1614af=_0x36aa37;return db[_0x4714('0x3a')]['findAll']({'raw':!![]});})[_0x4714('0x1a')](function(_0x544742){var _0x401d6e=fs[_0x4714('0x5b')](path[_0x4714('0x5c')](config[_0x4714('0x5d')],'server/files/templates/context.ejs'),_0x4714('0x5e'));var _0x7aba2c=ejs[_0x4714('0x5f')](_0x401d6e,{'contexts':_0x544742||[]});fs[_0x4714('0x60')](_0x4714('0x61'),_0x7aba2c);})[_0x4714('0x1a')](function(){return respondWithRpcPromise(_0x4714('0x62'),_0x4714('0x59'),{'module':_0x4714('0x63')});})[_0x4714('0x1a')](function(){var _0x280ccd=_0x55a6df['user'][_0x4714('0x32')]({'plain':!![]});if(!_0x280ccd)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x280ccd[_0x4714('0x64')]===_0x4714('0x65')){var _0x71565c=_0x1614af[_0x4714('0x32')]({'plain':!![]});return db[_0x4714('0x66')][_0x4714('0x58')]({'where':{'name':_0x4714('0x33'),'userProfileId':_0x280ccd['userProfileId']},'raw':!![]})[_0x4714('0x1a')](function(_0x50a4f7){if(_0x50a4f7&&_0x50a4f7[_0x4714('0x67')]===0x0){return db[_0x4714('0x34')][_0x4714('0x59')]({'name':_0x71565c[_0x4714('0x37')],'resourceId':_0x71565c['id'],'type':_0x50a4f7[_0x4714('0x37')],'sectionId':_0x50a4f7['id']},{})[_0x4714('0x1a')](function(){return _0x1614af;});}else{return _0x1614af;}})[_0x4714('0x25')](function(_0x19067e){logger['error'](_0x4714('0x68'),_0x19067e);throw _0x19067e;});}return _0x1614af;})[_0x4714('0x1a')](respondWithResult(_0x438f42,0xc9))[_0x4714('0x25')](handleError(_0x438f42,null));};exports['update']=function(_0x17d390,_0x1bdd3b,_0x39d395){var _0x8fe2e8;return db[_0x4714('0x3a')][_0x4714('0x58')]({'where':{'id':_0x17d390[_0x4714('0x57')]['id']}})[_0x4714('0x1a')](handleEntityNotFound(_0x1bdd3b,null))[_0x4714('0x1a')](saveUpdates(_0x17d390[_0x4714('0x5a')],null))[_0x4714('0x1a')](function(_0x24192e){if(_0x24192e){_0x8fe2e8=_0x24192e;return db[_0x4714('0x3a')][_0x4714('0x54')]({'raw':!![]});}})['then'](function(_0x28d374){var _0x2d6e8b=fs['readFileSync'](path[_0x4714('0x5c')](config['root'],_0x4714('0x69')),_0x4714('0x5e'));var _0x1adc0f=ejs[_0x4714('0x5f')](_0x2d6e8b,{'contexts':_0x28d374||[]});fs[_0x4714('0x60')](_0x4714('0x61'),_0x1adc0f);})[_0x4714('0x1a')](function(){return respondWithRpcPromise('Reload',_0x4714('0x31'),{'module':_0x4714('0x63')});})[_0x4714('0x1a')](function(){return _0x8fe2e8;})[_0x4714('0x1a')](respondWithResult(_0x1bdd3b,null))['catch'](handleError(_0x1bdd3b,null));};exports['destroy']=function(_0x25b6d9,_0x1fed23,_0x92edf5){var _0x30f7cd;return db[_0x4714('0x3a')]['find']({'where':{'id':_0x25b6d9[_0x4714('0x57')]['id']}})['then'](handleEntityNotFound(_0x1fed23,null))[_0x4714('0x1a')](removeEntity(_0x1fed23,null))[_0x4714('0x1a')](function(){return db[_0x4714('0x3a')][_0x4714('0x54')]({'raw':!![]});})['then'](function(_0x3adfc1){var _0x3a1f16=fs[_0x4714('0x5b')](path['join'](config[_0x4714('0x5d')],_0x4714('0x69')),_0x4714('0x5e'));var _0x3821e8=ejs[_0x4714('0x5f')](_0x3a1f16,{'contexts':_0x3adfc1});fs['writeFileSync'](_0x4714('0x61'),_0x3821e8);return respondWithRpcPromise(_0x4714('0x62'),_0x4714('0x35'),{'module':'chan_sip.so'});})[_0x4714('0x25')](handleError(_0x1fed23,null));};
\ No newline at end of file
index 3fd5203..3b71fd8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb14e=['util','api','moment','request-promise','rimraf','../../config/environment','./voiceContext.attributes','exports','VoiceContext','lodash'];(function(_0x53806b,_0x55b843){var _0x104bb9=function(_0x2b46e7){while(--_0x2b46e7){_0x53806b['push'](_0x53806b['shift']());}};_0x104bb9(++_0x55b843);}(_0xb14e,0xd1));var _0xeb14=function(_0x107f95,_0x96070){_0x107f95=_0x107f95-0x0;var _0x5adaf5=_0xb14e[_0x107f95];return _0x5adaf5;};'use strict';var _=require(_0xeb14('0x0'));var util=require(_0xeb14('0x1'));var logger=require('../../config/logger')(_0xeb14('0x2'));var moment=require(_0xeb14('0x3'));var BPromise=require('bluebird');var rp=require(_0xeb14('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0xeb14('0x5'));var config=require(_0xeb14('0x6'));var attributes=require(_0xeb14('0x7'));module[_0xeb14('0x8')]=function(_0x93d55f,_0x1c7609){return _0x93d55f['define'](_0xeb14('0x9'),attributes,{'tableName':'voice_contexts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb7af=['path','rimraf','../../config/environment','./voiceContext.attributes','exports','VoiceContext','lodash','util','../../config/logger','moment','bluebird'];(function(_0x117bdb,_0x44a377){var _0x14cffa=function(_0x424bd9){while(--_0x424bd9){_0x117bdb['push'](_0x117bdb['shift']());}};_0x14cffa(++_0x44a377);}(_0xb7af,0x1c9));var _0xfb7a=function(_0x212fcc,_0x1a8867){_0x212fcc=_0x212fcc-0x0;var _0x4d8190=_0xb7af[_0x212fcc];return _0x4d8190;};'use strict';var _=require(_0xfb7a('0x0'));var util=require(_0xfb7a('0x1'));var logger=require(_0xfb7a('0x2'))('api');var moment=require(_0xfb7a('0x3'));var BPromise=require(_0xfb7a('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xfb7a('0x5'));var rimraf=require(_0xfb7a('0x6'));var config=require(_0xfb7a('0x7'));var attributes=require(_0xfb7a('0x8'));module[_0xfb7a('0x9')]=function(_0x19706f,_0x366c77){return _0x19706f['define'](_0xfb7a('0xa'),attributes,{'tableName':'voice_contexts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f17f9a5..80abc0d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xefff=['stringify','error','message','VoiceContext,\x20%s,\x20%s','result','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','then','info','request\x20sent','debug'];(function(_0x1e3276,_0x147837){var _0xd2575d=function(_0x4cca1b){while(--_0x4cca1b){_0x1e3276['push'](_0x1e3276['shift']());}};_0xd2575d(++_0x147837);}(_0xefff,0xa7));var _0xfeff=function(_0x35f4d0,_0x376054){_0x35f4d0=_0x35f4d0-0x0;var _0x3d0df1=_0xefff[_0x35f4d0];return _0x3d0df1;};'use strict';var _=require('lodash');var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xfeff('0x0'));var fs=require('fs');var Redis=require(_0xfeff('0x1'));var db=require(_0xfeff('0x2'))['db'];var utils=require(_0xfeff('0x3'));var logger=require('../../config/logger')(_0xfeff('0x4'));var config=require(_0xfeff('0x5'));var jayson=require(_0xfeff('0x6'));var client=jayson[_0xfeff('0x7')][_0xfeff('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x4aa95c,_0x4bba88,_0x30b935){return new BPromise(function(_0x8da282,_0x5a5611){return client['request'](_0x4aa95c,_0x30b935)[_0xfeff('0x9')](function(_0x2a0cec){logger[_0xfeff('0xa')]('VoiceContext,\x20%s,\x20%s',_0x4bba88,_0xfeff('0xb'));logger[_0xfeff('0xc')]('VoiceContext,\x20%s,\x20%s,\x20%s',_0x4bba88,_0xfeff('0xb'),JSON[_0xfeff('0xd')](_0x2a0cec));if(_0x2a0cec[_0xfeff('0xe')]){if(_0x2a0cec['error']['code']===0x1f4){logger[_0xfeff('0xe')]('VoiceContext,\x20%s,\x20%s',_0x4bba88,_0x2a0cec[_0xfeff('0xe')][_0xfeff('0xf')]);return _0x5a5611(_0x2a0cec[_0xfeff('0xe')][_0xfeff('0xf')]);}logger['error']('VoiceContext,\x20%s,\x20%s',_0x4bba88,_0x2a0cec['error'][_0xfeff('0xf')]);return _0x8da282(_0x2a0cec[_0xfeff('0xe')][_0xfeff('0xf')]);}else{logger['info'](_0xfeff('0x10'),_0x4bba88,_0xfeff('0xb'));_0x8da282(_0x2a0cec[_0xfeff('0x11')][_0xfeff('0xf')]);}})['catch'](function(_0x5aabfc){logger[_0xfeff('0xe')]('VoiceContext,\x20%s,\x20%s',_0x4bba88,_0x5aabfc);_0x5a5611(_0x5aabfc);});});}
\ No newline at end of file
+var _0x4284=['VoiceContext,\x20%s,\x20%s','debug','VoiceContext,\x20%s,\x20%s,\x20%s','stringify','error','message','request\x20sent','result','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','request','then'];(function(_0x254578,_0x5984c4){var _0x3502e3=function(_0x54795c){while(--_0x54795c){_0x254578['push'](_0x254578['shift']());}};_0x3502e3(++_0x5984c4);}(_0x4284,0x197));var _0x4428=function(_0x51b1ef,_0x6ba686){_0x51b1ef=_0x51b1ef-0x0;var _0x427169=_0x4284[_0x51b1ef];return _0x427169;};'use strict';var _=require(_0x4428('0x0'));var util=require(_0x4428('0x1'));var moment=require(_0x4428('0x2'));var BPromise=require(_0x4428('0x3'));var rs=require(_0x4428('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x4428('0x5'))['db'];var utils=require(_0x4428('0x6'));var logger=require(_0x4428('0x7'))('rpc');var config=require(_0x4428('0x8'));var jayson=require(_0x4428('0x9'));var client=jayson['client'][_0x4428('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x110a05,_0x5c9009,_0x35e003){return new BPromise(function(_0x24cbb3,_0x1c9086){return client[_0x4428('0xb')](_0x110a05,_0x35e003)[_0x4428('0xc')](function(_0x4e1b9c){logger['info'](_0x4428('0xd'),_0x5c9009,'request\x20sent');logger[_0x4428('0xe')](_0x4428('0xf'),_0x5c9009,'request\x20sent',JSON[_0x4428('0x10')](_0x4e1b9c));if(_0x4e1b9c[_0x4428('0x11')]){if(_0x4e1b9c[_0x4428('0x11')]['code']===0x1f4){logger[_0x4428('0x11')]('VoiceContext,\x20%s,\x20%s',_0x5c9009,_0x4e1b9c[_0x4428('0x11')][_0x4428('0x12')]);return _0x1c9086(_0x4e1b9c[_0x4428('0x11')]['message']);}logger[_0x4428('0x11')](_0x4428('0xd'),_0x5c9009,_0x4e1b9c['error'][_0x4428('0x12')]);return _0x24cbb3(_0x4e1b9c[_0x4428('0x11')][_0x4428('0x12')]);}else{logger['info']('VoiceContext,\x20%s,\x20%s',_0x5c9009,_0x4428('0x13'));_0x24cbb3(_0x4e1b9c[_0x4428('0x14')][_0x4428('0x12')]);}})['catch'](function(_0x4dca71){logger[_0x4428('0x11')]('VoiceContext,\x20%s,\x20%s',_0x5c9009,_0x4dca71);_0x1c9086(_0x4dca71);});});}
\ No newline at end of file
index f526dee..de9ac33 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb0c=['delete','exports','util','express','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','describe','/:id','show','put'];(function(_0x35f36c,_0x4eed19){var _0x39d4fc=function(_0x2abe55){while(--_0x2abe55){_0x35f36c['push'](_0x35f36c['shift']());}};_0x39d4fc(++_0x4eed19);}(_0xdb0c,0x136));var _0xcdb0=function(_0x4193f1,_0x3934f9){_0x4193f1=_0x4193f1-0x0;var _0x5d8f44=_0xdb0c[_0x4193f1];return _0x5d8f44;};'use strict';var multer=require('multer');var util=require(_0xcdb0('0x0'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0xcdb0('0x1'));var router=express[_0xcdb0('0x2')]();var auth=require(_0xcdb0('0x3'));var interaction=require(_0xcdb0('0x4'));var config=require('../../config/environment');var controller=require('./voiceDialReport.controller');router[_0xcdb0('0x5')]('/',auth[_0xcdb0('0x6')](),controller[_0xcdb0('0x7')]);router[_0xcdb0('0x5')]('/describe',auth[_0xcdb0('0x6')](),controller[_0xcdb0('0x8')]);router[_0xcdb0('0x5')](_0xcdb0('0x9'),auth[_0xcdb0('0x6')](),controller[_0xcdb0('0xa')]);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0xcdb0('0xb')](_0xcdb0('0x9'),auth[_0xcdb0('0x6')](),controller['update']);router[_0xcdb0('0xc')]('/:id',auth[_0xcdb0('0x6')](),controller['destroy']);module[_0xcdb0('0xd')]=router;
\ No newline at end of file
+var _0xd4c7=['/:id','show','create','update','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceDialReport.controller','get','isAuthenticated','index','/describe'];(function(_0x2190f8,_0x162eff){var _0x51e86a=function(_0x578bf5){while(--_0x578bf5){_0x2190f8['push'](_0x2190f8['shift']());}};_0x51e86a(++_0x162eff);}(_0xd4c7,0xf2));var _0x7d4c=function(_0x2b4411,_0x2625ed){_0x2b4411=_0x2b4411-0x0;var _0x8e41ef=_0xd4c7[_0x2b4411];return _0x8e41ef;};'use strict';var multer=require(_0x7d4c('0x0'));var util=require(_0x7d4c('0x1'));var path=require('path');var timeout=require(_0x7d4c('0x2'));var express=require(_0x7d4c('0x3'));var router=express[_0x7d4c('0x4')]();var auth=require(_0x7d4c('0x5'));var interaction=require(_0x7d4c('0x6'));var config=require(_0x7d4c('0x7'));var controller=require(_0x7d4c('0x8'));router[_0x7d4c('0x9')]('/',auth[_0x7d4c('0xa')](),controller[_0x7d4c('0xb')]);router['get'](_0x7d4c('0xc'),auth['isAuthenticated'](),controller['describe']);router[_0x7d4c('0x9')](_0x7d4c('0xd'),auth[_0x7d4c('0xa')](),controller[_0x7d4c('0xe')]);router['post']('/',auth['isAuthenticated'](),controller[_0x7d4c('0xf')]);router['put']('/:id',auth[_0x7d4c('0xa')](),controller[_0x7d4c('0x10')]);router['delete']('/:id',auth[_0x7d4c('0xa')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index b97b03e..7a9e3c4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa098=['DATE','called,connect,complete','sequelize','exports','STRING','INTEGER'];(function(_0x4fde08,_0x463a36){var _0x12e725=function(_0x2670c5){while(--_0x2670c5){_0x4fde08['push'](_0x4fde08['shift']());}};_0x12e725(++_0x463a36);}(_0xa098,0xb6));var _0x8a09=function(_0x443bcb,_0x33fb27){_0x443bcb=_0x443bcb-0x0;var _0x396e1a=_0xa098[_0x443bcb];return _0x396e1a;};'use strict';var Sequelize=require(_0x8a09('0x0'));module[_0x8a09('0x1')]={'privilege':{'type':Sequelize[_0x8a09('0x2')]},'channel':{'type':Sequelize[_0x8a09('0x2')]},'channelstate':{'type':Sequelize['INTEGER']},'channelstatedesc':{'type':Sequelize[_0x8a09('0x2')]},'calleridnum':{'type':Sequelize[_0x8a09('0x2')]},'calleridname':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize[_0x8a09('0x2')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize[_0x8a09('0x2')]},'accountcode':{'type':Sequelize['STRING']},'context':{'type':Sequelize[_0x8a09('0x2')]},'exten':{'type':Sequelize[_0x8a09('0x2')]},'priority':{'type':Sequelize['INTEGER']},'uniqueid':{'type':Sequelize[_0x8a09('0x2')]},'linkedid':{'type':Sequelize[_0x8a09('0x2')]},'destchannel':{'type':Sequelize[_0x8a09('0x2')]},'destchannelstate':{'type':Sequelize['INTEGER']},'destchannelstatedesc':{'type':Sequelize[_0x8a09('0x2')]},'destcalleridnum':{'type':Sequelize[_0x8a09('0x2')]},'destcalleridname':{'type':Sequelize[_0x8a09('0x2')]},'destconnectedlinenum':{'type':Sequelize[_0x8a09('0x2')]},'destconnectedlinename':{'type':Sequelize[_0x8a09('0x2')]},'destlanguage':{'type':Sequelize[_0x8a09('0x2')]},'destaccountcode':{'type':Sequelize['STRING']},'destcontext':{'type':Sequelize[_0x8a09('0x2')]},'destexten':{'type':Sequelize['STRING']},'destpriority':{'type':Sequelize[_0x8a09('0x3')]},'destuniqueid':{'type':Sequelize['STRING']},'destlinkedid':{'type':Sequelize[_0x8a09('0x2')]},'dialstring':{'type':Sequelize['STRING']},'dialstatus':{'type':Sequelize[_0x8a09('0x2')]},'starttime':{'type':Sequelize[_0x8a09('0x4')]},'answertime':{'type':Sequelize[_0x8a09('0x4')]},'endtime':{'type':Sequelize[_0x8a09('0x4')]},'lastevent':{'type':Sequelize[_0x8a09('0x2')],'comment':_0x8a09('0x5')},'routeId':{'type':Sequelize['INTEGER']},'duration':{'type':Sequelize[_0x8a09('0x3')]},'holdtime':{'type':Sequelize[_0x8a09('0x3')]},'billableseconds':{'type':Sequelize[_0x8a09('0x3')]}};
\ No newline at end of file
+var _0x9318=['INTEGER','DATE','called,connect,complete','sequelize','STRING'];(function(_0x40ac5e,_0x2de228){var _0x2839d6=function(_0x123d47){while(--_0x123d47){_0x40ac5e['push'](_0x40ac5e['shift']());}};_0x2839d6(++_0x2de228);}(_0x9318,0x1e8));var _0x8931=function(_0x49c63c,_0x5e84ba){_0x49c63c=_0x49c63c-0x0;var _0x1f4459=_0x9318[_0x49c63c];return _0x1f4459;};'use strict';var Sequelize=require(_0x8931('0x0'));module['exports']={'privilege':{'type':Sequelize['STRING']},'channel':{'type':Sequelize[_0x8931('0x1')]},'channelstate':{'type':Sequelize[_0x8931('0x2')]},'channelstatedesc':{'type':Sequelize[_0x8931('0x1')]},'calleridnum':{'type':Sequelize[_0x8931('0x1')]},'calleridname':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize[_0x8931('0x1')]},'connectedlinename':{'type':Sequelize[_0x8931('0x1')]},'language':{'type':Sequelize[_0x8931('0x1')]},'accountcode':{'type':Sequelize[_0x8931('0x1')]},'context':{'type':Sequelize['STRING']},'exten':{'type':Sequelize[_0x8931('0x1')]},'priority':{'type':Sequelize[_0x8931('0x2')]},'uniqueid':{'type':Sequelize['STRING']},'linkedid':{'type':Sequelize[_0x8931('0x1')]},'destchannel':{'type':Sequelize[_0x8931('0x1')]},'destchannelstate':{'type':Sequelize['INTEGER']},'destchannelstatedesc':{'type':Sequelize['STRING']},'destcalleridnum':{'type':Sequelize[_0x8931('0x1')]},'destcalleridname':{'type':Sequelize[_0x8931('0x1')]},'destconnectedlinenum':{'type':Sequelize['STRING']},'destconnectedlinename':{'type':Sequelize[_0x8931('0x1')]},'destlanguage':{'type':Sequelize[_0x8931('0x1')]},'destaccountcode':{'type':Sequelize[_0x8931('0x1')]},'destcontext':{'type':Sequelize['STRING']},'destexten':{'type':Sequelize[_0x8931('0x1')]},'destpriority':{'type':Sequelize[_0x8931('0x2')]},'destuniqueid':{'type':Sequelize[_0x8931('0x1')]},'destlinkedid':{'type':Sequelize[_0x8931('0x1')]},'dialstring':{'type':Sequelize[_0x8931('0x1')]},'dialstatus':{'type':Sequelize['STRING']},'starttime':{'type':Sequelize[_0x8931('0x3')]},'answertime':{'type':Sequelize[_0x8931('0x3')]},'endtime':{'type':Sequelize[_0x8931('0x3')]},'lastevent':{'type':Sequelize[_0x8931('0x1')],'comment':_0x8931('0x4')},'routeId':{'type':Sequelize[_0x8931('0x2')]},'duration':{'type':Sequelize[_0x8931('0x2')]},'holdtime':{'type':Sequelize[_0x8931('0x2')]},'billableseconds':{'type':Sequelize[_0x8931('0x2')]}};
\ No newline at end of file
index c7f7c4f..273bb18 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd82a=['apply','save','then','destroy','stack','name','send','index','rawAttributes','model','keys','query','intersection','attributes','fields','hasOwnProperty','sort','where','pick','filters','filter','map','type','VIRTUAL','field','merge','VoiceDialReport','includeAll','include','catch','show','params','length','options','create','body','update','find','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','bluebird','mustache','util','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','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range'];(function(_0x22f67c,_0x4e8f91){var _0x270d5a=function(_0x162a28){while(--_0x162a28){_0x22f67c['push'](_0x22f67c['shift']());}};_0x270d5a(++_0x4e8f91);}(_0xd82a,0xbd));var _0xad82=function(_0x68c979,_0x431cff){_0x68c979=_0x68c979-0x0;var _0x4f0001=_0xd82a[_0x68c979];return _0x4f0001;};'use strict';var pdf=require(_0xad82('0x0'));var emlformat=require(_0xad82('0x1'));var rimraf=require(_0xad82('0x2'));var zipdir=require(_0xad82('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xad82('0x4'));var moment=require('moment');var BPromise=require(_0xad82('0x5'));var Mustache=require(_0xad82('0x6'));var util=require(_0xad82('0x7'));var path=require(_0xad82('0x8'));var sox=require(_0xad82('0x9'));var csv=require(_0xad82('0xa'));var ejs=require(_0xad82('0xb'));var fs=require('fs');var _=require(_0xad82('0xc'));var squel=require(_0xad82('0xd'));var crypto=require(_0xad82('0xe'));var jsforce=require('jsforce');var deskjs=require(_0xad82('0xf'));var toCsv=require(_0xad82('0xa'));var querystring=require(_0xad82('0x10'));var Papa=require(_0xad82('0x11'));var Redis=require(_0xad82('0x12'));var authService=require(_0xad82('0x13'));var qs=require(_0xad82('0x14'));var hardwareService=require(_0xad82('0x15'));var logger=require(_0xad82('0x16'))(_0xad82('0x17'));var utils=require(_0xad82('0x18'));var config=require(_0xad82('0x19'));var db=require(_0xad82('0x1a'))['db'];function respondWithStatusCode(_0x4c458e,_0x2e4570){_0x2e4570=_0x2e4570||0xcc;return function(_0x557bc9){if(_0x557bc9){return _0x4c458e[_0xad82('0x1b')](_0x2e4570);}return _0x4c458e['status'](_0x2e4570)[_0xad82('0x1c')]();};}function respondWithResult(_0xd8239d,_0xaaf129){_0xaaf129=_0xaaf129||0xc8;return function(_0x26921d){if(_0x26921d){return _0xd8239d[_0xad82('0x1d')](_0xaaf129)[_0xad82('0x1e')](_0x26921d);}};}function respondWithFilteredResult(_0x4c59de,_0x403079){return function(_0x4cc267){if(_0x4cc267){var _0x6871ec=_0x4cc267[_0xad82('0x1f')],_0x433f8a=_0x403079[_0xad82('0x20')],_0x37cb6a=_0x403079[_0xad82('0x20')]+_0x403079[_0xad82('0x21')],_0x2f4e1b;if(_0x37cb6a>=_0x6871ec){_0x37cb6a=_0x6871ec;_0x2f4e1b=0xc8;}else{_0x2f4e1b=0xce;}_0x4c59de[_0xad82('0x1d')](_0x2f4e1b);return _0x4c59de[_0xad82('0x22')](_0xad82('0x23'),_0x433f8a+'-'+_0x37cb6a+'/'+_0x6871ec)[_0xad82('0x1e')](_0x4cc267);}return null;};}function patchUpdates(_0x27c450){return function(_0x32e9f5){try{jsonpatch[_0xad82('0x24')](_0x32e9f5,_0x27c450,!![]);}catch(_0x1d0218){return BPromise['reject'](_0x1d0218);}return _0x32e9f5[_0xad82('0x25')]();};}function saveUpdates(_0x32c9b7,_0x4fb871){return function(_0x43c86e){if(_0x43c86e){return _0x43c86e['update'](_0x32c9b7)[_0xad82('0x26')](function(_0x11ab07){return _0x11ab07;});}return null;};}function removeEntity(_0x4808e4,_0x3a0a44){return function(_0x1ab491){if(_0x1ab491){return _0x1ab491[_0xad82('0x27')]()[_0xad82('0x26')](function(){_0x4808e4['status'](0xcc)[_0xad82('0x1c')]();});}};}function handleEntityNotFound(_0x1857d7,_0x4be179){return function(_0x19de41){if(!_0x19de41){_0x1857d7[_0xad82('0x1b')](0x194);}return _0x19de41;};}function handleError(_0x42e9bc,_0x330874){_0x330874=_0x330874||0x1f4;return function(_0x538b03){logger['error'](_0x538b03[_0xad82('0x28')]);if(_0x538b03[_0xad82('0x29')]){delete _0x538b03[_0xad82('0x29')];}_0x42e9bc[_0xad82('0x1d')](_0x330874)[_0xad82('0x2a')](_0x538b03);};}exports[_0xad82('0x2b')]=function(_0xac5104,_0x2b58e2){var _0x4e4c7b={},_0x339572={},_0x5bb973={'count':0x0,'rows':[]};var _0x10be48=db['VoiceDialReport'][_0xad82('0x2c')];_0x339572[_0xad82('0x2d')]=_[_0xad82('0x2e')](_0x10be48);_0x339572[_0xad82('0x2f')]=_['keys'](_0xac5104[_0xad82('0x2f')]);_0x339572['filters']=_[_0xad82('0x30')](_0x339572[_0xad82('0x2d')],_0x339572[_0xad82('0x2f')]);_0x4e4c7b[_0xad82('0x31')]=_['intersection'](_0x339572[_0xad82('0x2d')],qs[_0xad82('0x32')](_0xac5104[_0xad82('0x2f')][_0xad82('0x32')]));_0x4e4c7b[_0xad82('0x31')]=_0x4e4c7b[_0xad82('0x31')]['length']?_0x4e4c7b[_0xad82('0x31')]:_0x339572[_0xad82('0x2d')];if(!_0xac5104['query'][_0xad82('0x33')]('nolimit')){_0x4e4c7b['limit']=qs[_0xad82('0x21')](_0xac5104[_0xad82('0x2f')][_0xad82('0x21')]);_0x4e4c7b['offset']=qs[_0xad82('0x20')](_0xac5104[_0xad82('0x2f')][_0xad82('0x20')]);}_0x4e4c7b['order']=qs['sort'](_0xac5104[_0xad82('0x2f')][_0xad82('0x34')]);_0x4e4c7b[_0xad82('0x35')]=qs['filters'](_[_0xad82('0x36')](_0xac5104['query'],_0x339572[_0xad82('0x37')]));if(_0xac5104[_0xad82('0x2f')][_0xad82('0x38')]){_0x4e4c7b['where']=_['merge'](_0x4e4c7b[_0xad82('0x35')],{'$or':_[_0xad82('0x39')](_0x10be48,function(_0x4c99b4){if(_0x4c99b4[_0xad82('0x3a')]['key']!==_0xad82('0x3b')){var _0x50553b={};_0x50553b[_0x4c99b4[_0xad82('0x3c')]]={'$like':'%'+_0xac5104[_0xad82('0x2f')][_0xad82('0x38')]+'%'};return _0x50553b;}})});}_0x4e4c7b=_[_0xad82('0x3d')]({},_0x4e4c7b,_0xac5104['options']);var _0x4d161b={'where':_0x4e4c7b[_0xad82('0x35')]};return db[_0xad82('0x3e')][_0xad82('0x1f')](_0x4d161b)[_0xad82('0x26')](function(_0x1a654d){_0x5bb973[_0xad82('0x1f')]=_0x1a654d;if(_0xac5104[_0xad82('0x2f')][_0xad82('0x3f')]){_0x4e4c7b[_0xad82('0x40')]=[{'all':!![]}];}return db[_0xad82('0x3e')]['findAll'](_0x4e4c7b);})['then'](function(_0x5d16dd){_0x5bb973['rows']=_0x5d16dd;return _0x5bb973;})['then'](respondWithFilteredResult(_0x2b58e2,_0x4e4c7b))[_0xad82('0x41')](handleError(_0x2b58e2,null));};exports[_0xad82('0x42')]=function(_0x3aa4e0,_0x172a62){var _0x1fd2e8={'raw':!![],'where':{'id':_0x3aa4e0[_0xad82('0x43')]['id']}},_0x141506={};_0x141506['model']=_['keys'](db[_0xad82('0x3e')]['rawAttributes']);_0x141506[_0xad82('0x2f')]=_[_0xad82('0x2e')](_0x3aa4e0[_0xad82('0x2f')]);_0x141506[_0xad82('0x37')]=_['intersection'](_0x141506[_0xad82('0x2d')],_0x141506[_0xad82('0x2f')]);_0x1fd2e8[_0xad82('0x31')]=_[_0xad82('0x30')](_0x141506['model'],qs['fields'](_0x3aa4e0[_0xad82('0x2f')]['fields']));_0x1fd2e8[_0xad82('0x31')]=_0x1fd2e8[_0xad82('0x31')][_0xad82('0x44')]?_0x1fd2e8['attributes']:_0x141506['model'];if(_0x3aa4e0[_0xad82('0x2f')][_0xad82('0x3f')]){_0x1fd2e8['include']=[{'all':!![]}];}_0x1fd2e8=_[_0xad82('0x3d')]({},_0x1fd2e8,_0x3aa4e0[_0xad82('0x45')]);return db[_0xad82('0x3e')]['find'](_0x1fd2e8)['then'](handleEntityNotFound(_0x172a62,null))['then'](respondWithResult(_0x172a62,null))[_0xad82('0x41')](handleError(_0x172a62,null));};exports[_0xad82('0x46')]=function(_0x54ec24,_0xb8e96a){return db[_0xad82('0x3e')][_0xad82('0x46')](_0x54ec24[_0xad82('0x47')],{})['then'](respondWithResult(_0xb8e96a,0xc9))[_0xad82('0x41')](handleError(_0xb8e96a,null));};exports[_0xad82('0x48')]=function(_0x1519a6,_0x4a0989){if(_0x1519a6[_0xad82('0x47')]['id']){delete _0x1519a6[_0xad82('0x47')]['id'];}return db[_0xad82('0x3e')][_0xad82('0x49')]({'where':{'id':_0x1519a6[_0xad82('0x43')]['id']}})[_0xad82('0x26')](handleEntityNotFound(_0x4a0989,null))['then'](saveUpdates(_0x1519a6[_0xad82('0x47')],null))[_0xad82('0x26')](respondWithResult(_0x4a0989,null))[_0xad82('0x41')](handleError(_0x4a0989,null));};exports[_0xad82('0x27')]=function(_0x4bf2e3,_0x1433d9){return db[_0xad82('0x3e')][_0xad82('0x49')]({'where':{'id':_0x4bf2e3[_0xad82('0x43')]['id']}})[_0xad82('0x26')](handleEntityNotFound(_0x1433d9,null))[_0xad82('0x26')](removeEntity(_0x1433d9,null))[_0xad82('0x41')](handleError(_0x1433d9,null));};exports[_0xad82('0x4a')]=function(_0x4c789c,_0x21d666){return db[_0xad82('0x3e')][_0xad82('0x4a')]()[_0xad82('0x26')](respondWithResult(_0x21d666,null))[_0xad82('0x41')](handleError(_0x21d666,null));};
\ No newline at end of file
+var _0xffdc=['../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','count','offset','limit','set','json','apply','reject','save','update','then','error','stack','name','send','index','VoiceDialReport','rawAttributes','keys','query','filters','attributes','intersection','fields','hasOwnProperty','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','show','params','model','length','find','create','body','catch','describe','html-pdf','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','ioredis','../../components/auth/service','../../components/parsers/qs'];(function(_0x1d143f,_0x1ac44e){var _0x163e17=function(_0x2e4d56){while(--_0x2e4d56){_0x1d143f['push'](_0x1d143f['shift']());}};_0x163e17(++_0x1ac44e);}(_0xffdc,0x7f));var _0xcffd=function(_0x206338,_0x2d800b){_0x206338=_0x206338-0x0;var _0x2b87f2=_0xffdc[_0x206338];return _0x2b87f2;};'use strict';var pdf=require(_0xcffd('0x0'));var emlformat=require(_0xcffd('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xcffd('0x2'));var jsonpatch=require(_0xcffd('0x3'));var rp=require('request-promise');var moment=require(_0xcffd('0x4'));var BPromise=require(_0xcffd('0x5'));var Mustache=require(_0xcffd('0x6'));var util=require(_0xcffd('0x7'));var path=require(_0xcffd('0x8'));var sox=require('sox');var csv=require(_0xcffd('0x9'));var ejs=require(_0xcffd('0xa'));var fs=require('fs');var _=require(_0xcffd('0xb'));var squel=require(_0xcffd('0xc'));var crypto=require(_0xcffd('0xd'));var jsforce=require(_0xcffd('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xcffd('0x9'));var querystring=require(_0xcffd('0xf'));var Papa=require('papaparse');var Redis=require(_0xcffd('0x10'));var authService=require(_0xcffd('0x11'));var qs=require(_0xcffd('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xcffd('0x13'))(_0xcffd('0x14'));var utils=require(_0xcffd('0x15'));var config=require(_0xcffd('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x55a51a,_0x1d010a){_0x1d010a=_0x1d010a||0xcc;return function(_0x187ca8){if(_0x187ca8){return _0x55a51a[_0xcffd('0x17')](_0x1d010a);}return _0x55a51a['status'](_0x1d010a)[_0xcffd('0x18')]();};}function respondWithResult(_0x4dcb59,_0x5b9df3){_0x5b9df3=_0x5b9df3||0xc8;return function(_0x765795){if(_0x765795){return _0x4dcb59[_0xcffd('0x19')](_0x5b9df3)['json'](_0x765795);}};}function respondWithFilteredResult(_0x1cda29,_0x232a40){return function(_0x3d1e6e){if(_0x3d1e6e){var _0x32f579=_0x3d1e6e[_0xcffd('0x1a')],_0x4ec386=_0x232a40[_0xcffd('0x1b')],_0x4921d1=_0x232a40[_0xcffd('0x1b')]+_0x232a40[_0xcffd('0x1c')],_0xb5ffdc;if(_0x4921d1>=_0x32f579){_0x4921d1=_0x32f579;_0xb5ffdc=0xc8;}else{_0xb5ffdc=0xce;}_0x1cda29['status'](_0xb5ffdc);return _0x1cda29[_0xcffd('0x1d')]('Content-Range',_0x4ec386+'-'+_0x4921d1+'/'+_0x32f579)[_0xcffd('0x1e')](_0x3d1e6e);}return null;};}function patchUpdates(_0x33c713){return function(_0x462e0e){try{jsonpatch[_0xcffd('0x1f')](_0x462e0e,_0x33c713,!![]);}catch(_0x33a27e){return BPromise[_0xcffd('0x20')](_0x33a27e);}return _0x462e0e[_0xcffd('0x21')]();};}function saveUpdates(_0x2e5178,_0x543b04){return function(_0x73d51a){if(_0x73d51a){return _0x73d51a[_0xcffd('0x22')](_0x2e5178)[_0xcffd('0x23')](function(_0x4029a7){return _0x4029a7;});}return null;};}function removeEntity(_0x44f32d,_0x17c273){return function(_0x1ad69f){if(_0x1ad69f){return _0x1ad69f['destroy']()['then'](function(){_0x44f32d[_0xcffd('0x19')](0xcc)[_0xcffd('0x18')]();});}};}function handleEntityNotFound(_0x44f901,_0x3935ff){return function(_0x3c3839){if(!_0x3c3839){_0x44f901[_0xcffd('0x17')](0x194);}return _0x3c3839;};}function handleError(_0x2723db,_0x2ea762){_0x2ea762=_0x2ea762||0x1f4;return function(_0x2162a6){logger[_0xcffd('0x24')](_0x2162a6[_0xcffd('0x25')]);if(_0x2162a6[_0xcffd('0x26')]){delete _0x2162a6['name'];}_0x2723db[_0xcffd('0x19')](_0x2ea762)[_0xcffd('0x27')](_0x2162a6);};}exports[_0xcffd('0x28')]=function(_0x547bdb,_0x21bad3){var _0x9840b2={},_0x21b7b7={},_0x5d0859={'count':0x0,'rows':[]};var _0x4f0078=db[_0xcffd('0x29')][_0xcffd('0x2a')];_0x21b7b7['model']=_[_0xcffd('0x2b')](_0x4f0078);_0x21b7b7[_0xcffd('0x2c')]=_['keys'](_0x547bdb[_0xcffd('0x2c')]);_0x21b7b7[_0xcffd('0x2d')]=_['intersection'](_0x21b7b7['model'],_0x21b7b7[_0xcffd('0x2c')]);_0x9840b2[_0xcffd('0x2e')]=_[_0xcffd('0x2f')](_0x21b7b7['model'],qs[_0xcffd('0x30')](_0x547bdb[_0xcffd('0x2c')]['fields']));_0x9840b2[_0xcffd('0x2e')]=_0x9840b2[_0xcffd('0x2e')]['length']?_0x9840b2[_0xcffd('0x2e')]:_0x21b7b7['model'];if(!_0x547bdb[_0xcffd('0x2c')][_0xcffd('0x31')]('nolimit')){_0x9840b2[_0xcffd('0x1c')]=qs['limit'](_0x547bdb['query'][_0xcffd('0x1c')]);_0x9840b2[_0xcffd('0x1b')]=qs[_0xcffd('0x1b')](_0x547bdb['query']['offset']);}_0x9840b2[_0xcffd('0x32')]=qs[_0xcffd('0x33')](_0x547bdb['query']['sort']);_0x9840b2[_0xcffd('0x34')]=qs['filters'](_[_0xcffd('0x35')](_0x547bdb[_0xcffd('0x2c')],_0x21b7b7[_0xcffd('0x2d')]));if(_0x547bdb[_0xcffd('0x2c')][_0xcffd('0x36')]){_0x9840b2[_0xcffd('0x34')]=_['merge'](_0x9840b2[_0xcffd('0x34')],{'$or':_[_0xcffd('0x37')](_0x4f0078,function(_0x1859b3){if(_0x1859b3[_0xcffd('0x38')][_0xcffd('0x39')]!==_0xcffd('0x3a')){var _0x4fc28c={};_0x4fc28c[_0x1859b3[_0xcffd('0x3b')]]={'$like':'%'+_0x547bdb['query'][_0xcffd('0x36')]+'%'};return _0x4fc28c;}})});}_0x9840b2=_['merge']({},_0x9840b2,_0x547bdb[_0xcffd('0x3c')]);var _0x408fc6={'where':_0x9840b2[_0xcffd('0x34')]};return db[_0xcffd('0x29')][_0xcffd('0x1a')](_0x408fc6)[_0xcffd('0x23')](function(_0x392ee3){_0x5d0859['count']=_0x392ee3;if(_0x547bdb[_0xcffd('0x2c')][_0xcffd('0x3d')]){_0x9840b2[_0xcffd('0x3e')]=[{'all':!![]}];}return db['VoiceDialReport'][_0xcffd('0x3f')](_0x9840b2);})[_0xcffd('0x23')](function(_0x464d82){_0x5d0859['rows']=_0x464d82;return _0x5d0859;})['then'](respondWithFilteredResult(_0x21bad3,_0x9840b2))['catch'](handleError(_0x21bad3,null));};exports[_0xcffd('0x40')]=function(_0x214d4f,_0x3d3650){var _0x5be5ba={'raw':!![],'where':{'id':_0x214d4f[_0xcffd('0x41')]['id']}},_0x3122a8={};_0x3122a8[_0xcffd('0x42')]=_[_0xcffd('0x2b')](db[_0xcffd('0x29')][_0xcffd('0x2a')]);_0x3122a8['query']=_[_0xcffd('0x2b')](_0x214d4f[_0xcffd('0x2c')]);_0x3122a8['filters']=_[_0xcffd('0x2f')](_0x3122a8[_0xcffd('0x42')],_0x3122a8['query']);_0x5be5ba[_0xcffd('0x2e')]=_[_0xcffd('0x2f')](_0x3122a8[_0xcffd('0x42')],qs[_0xcffd('0x30')](_0x214d4f[_0xcffd('0x2c')][_0xcffd('0x30')]));_0x5be5ba[_0xcffd('0x2e')]=_0x5be5ba[_0xcffd('0x2e')][_0xcffd('0x43')]?_0x5be5ba[_0xcffd('0x2e')]:_0x3122a8['model'];if(_0x214d4f[_0xcffd('0x2c')][_0xcffd('0x3d')]){_0x5be5ba['include']=[{'all':!![]}];}_0x5be5ba=_['merge']({},_0x5be5ba,_0x214d4f[_0xcffd('0x3c')]);return db[_0xcffd('0x29')][_0xcffd('0x44')](_0x5be5ba)[_0xcffd('0x23')](handleEntityNotFound(_0x3d3650,null))[_0xcffd('0x23')](respondWithResult(_0x3d3650,null))['catch'](handleError(_0x3d3650,null));};exports['create']=function(_0x5c8748,_0x46c500){return db[_0xcffd('0x29')][_0xcffd('0x45')](_0x5c8748[_0xcffd('0x46')],{})[_0xcffd('0x23')](respondWithResult(_0x46c500,0xc9))[_0xcffd('0x47')](handleError(_0x46c500,null));};exports[_0xcffd('0x22')]=function(_0x292d5b,_0x3db159){if(_0x292d5b[_0xcffd('0x46')]['id']){delete _0x292d5b[_0xcffd('0x46')]['id'];}return db[_0xcffd('0x29')][_0xcffd('0x44')]({'where':{'id':_0x292d5b[_0xcffd('0x41')]['id']}})['then'](handleEntityNotFound(_0x3db159,null))[_0xcffd('0x23')](saveUpdates(_0x292d5b['body'],null))['then'](respondWithResult(_0x3db159,null))[_0xcffd('0x47')](handleError(_0x3db159,null));};exports['destroy']=function(_0x6e3701,_0x42b396){return db['VoiceDialReport'][_0xcffd('0x44')]({'where':{'id':_0x6e3701[_0xcffd('0x41')]['id']}})[_0xcffd('0x23')](handleEntityNotFound(_0x42b396,null))[_0xcffd('0x23')](removeEntity(_0x42b396,null))[_0xcffd('0x47')](handleError(_0x42b396,null));};exports['describe']=function(_0x3123ec,_0x157c06){return db[_0xcffd('0x29')][_0xcffd('0x48')]()[_0xcffd('0x23')](respondWithResult(_0x157c06,null))[_0xcffd('0x47')](handleError(_0x157c06,null));};
\ No newline at end of file
index a2adaa0..54258ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe706=['../../config/logger','moment','bluebird','request-promise','path','rimraf','../../config/environment','./voiceDialReport.attributes','exports','define','VoiceDialReport','report_dial','uniqueid','lodash','util'];(function(_0x5e1f8e,_0x8cee46){var _0x176494=function(_0x5e7387){while(--_0x5e7387){_0x5e1f8e['push'](_0x5e1f8e['shift']());}};_0x176494(++_0x8cee46);}(_0xe706,0xa3));var _0x6e70=function(_0x5eeb0b,_0x293c14){_0x5eeb0b=_0x5eeb0b-0x0;var _0x270295=_0xe706[_0x5eeb0b];return _0x270295;};'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':[{'fields':[_0x6e70('0xe')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x0b25=['../../config/environment','exports','define','VoiceDialReport','uniqueid','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0xb03c3,_0x46c612){var _0x21501f=function(_0x40fbe4){while(--_0x40fbe4){_0xb03c3['push'](_0xb03c3['shift']());}};_0x21501f(++_0x46c612);}(_0x0b25,0x155));var _0x50b2=function(_0x3d9176,_0x399d6f){_0x3d9176=_0x3d9176-0x0;var _0x12adc5=_0x0b25[_0x3d9176];return _0x12adc5;};'use strict';var _=require(_0x50b2('0x0'));var util=require(_0x50b2('0x1'));var logger=require(_0x50b2('0x2'))(_0x50b2('0x3'));var moment=require(_0x50b2('0x4'));var BPromise=require(_0x50b2('0x5'));var rp=require(_0x50b2('0x6'));var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x50b2('0x7'));var attributes=require('./voiceDialReport.attributes');module[_0x50b2('0x8')]=function(_0x1b77e0,_0x3cbc65){return _0x1b77e0[_0x50b2('0x9')](_0x50b2('0xa'),attributes,{'tableName':'report_dial','paranoid':![],'indexes':[{'fields':[_0x50b2('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index 521c576..c8c315b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc737=['../../config/environment','http','then','info','request\x20sent','debug','error','code','VoiceDialReport,\x20%s,\x20%s','message','result','catch','VoiceDialReport','create','body','options','raw','CreateVoiceDialReport','stringify','where','limit','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','rpc'];(function(_0xbca85d,_0x17b15a){var _0x51d199=function(_0x4b9837){while(--_0x4b9837){_0xbca85d['push'](_0xbca85d['shift']());}};_0x51d199(++_0x17b15a);}(_0xc737,0x154));var _0x7c73=function(_0x512f2d,_0x35a96c){_0x512f2d=_0x512f2d-0x0;var _0xcc7cd0=_0xc737[_0x512f2d];return _0xcc7cd0;};'use strict';var _=require(_0x7c73('0x0'));var util=require(_0x7c73('0x1'));var moment=require(_0x7c73('0x2'));var BPromise=require(_0x7c73('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7c73('0x4'));var db=require(_0x7c73('0x5'))['db'];var utils=require(_0x7c73('0x6'));var logger=require('../../config/logger')(_0x7c73('0x7'));var config=require(_0x7c73('0x8'));var jayson=require('jayson/promise');var client=jayson['client'][_0x7c73('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3f6f81,_0x57e442,_0x9264a9){return new BPromise(function(_0x3281fe,_0x5bf225){return client['request'](_0x3f6f81,_0x9264a9)[_0x7c73('0xa')](function(_0x8237f){logger[_0x7c73('0xb')]('VoiceDialReport,\x20%s,\x20%s',_0x57e442,_0x7c73('0xc'));logger[_0x7c73('0xd')]('VoiceDialReport,\x20%s,\x20%s,\x20%s',_0x57e442,_0x7c73('0xc'),JSON['stringify'](_0x8237f));if(_0x8237f[_0x7c73('0xe')]){if(_0x8237f[_0x7c73('0xe')][_0x7c73('0xf')]===0x1f4){logger['error'](_0x7c73('0x10'),_0x57e442,_0x8237f[_0x7c73('0xe')][_0x7c73('0x11')]);return _0x5bf225(_0x8237f[_0x7c73('0xe')]['message']);}logger[_0x7c73('0xe')]('VoiceDialReport,\x20%s,\x20%s',_0x57e442,_0x8237f[_0x7c73('0xe')][_0x7c73('0x11')]);return _0x3281fe(_0x8237f[_0x7c73('0xe')][_0x7c73('0x11')]);}else{logger[_0x7c73('0xb')](_0x7c73('0x10'),_0x57e442,_0x7c73('0xc'));_0x3281fe(_0x8237f[_0x7c73('0x12')]['message']);}})[_0x7c73('0x13')](function(_0x562b50){logger[_0x7c73('0xe')](_0x7c73('0x10'),_0x57e442,_0x562b50);_0x5bf225(_0x562b50);});});}exports['CreateVoiceDialReport']=function(_0x534a39){var _0x1932c2=this;return new Promise(function(_0x4a2ebc,_0x5cc261){return db[_0x7c73('0x14')][_0x7c73('0x15')](_0x534a39[_0x7c73('0x16')],{'raw':_0x534a39[_0x7c73('0x17')]?_0x534a39['options'][_0x7c73('0x18')]===undefined?!![]:![]:!![]})[_0x7c73('0xa')](function(_0x2d7e82){logger[_0x7c73('0xb')](_0x7c73('0x19'),_0x534a39);logger['debug'](_0x7c73('0x19'),_0x534a39,JSON[_0x7c73('0x1a')](_0x2d7e82));_0x4a2ebc(_0x2d7e82);})[_0x7c73('0x13')](function(_0x1745d9){logger[_0x7c73('0xe')](_0x7c73('0x19'),_0x1745d9[_0x7c73('0x11')],_0x534a39);_0x5cc261(_0x1932c2[_0x7c73('0xe')](0x1f4,_0x1745d9[_0x7c73('0x11')]));});});};exports['UpdateVoiceDialReport']=function(_0x427b12){var _0x5c1bb1=this;return new Promise(function(_0x2f4049,_0x5b0ce2){return db[_0x7c73('0x14')]['update'](_0x427b12[_0x7c73('0x16')],{'raw':_0x427b12['options']?_0x427b12[_0x7c73('0x17')][_0x7c73('0x18')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x427b12[_0x7c73('0x17')]?_0x427b12['options'][_0x7c73('0x1b')]||null:null,'attributes':_0x427b12[_0x7c73('0x17')]?_0x427b12[_0x7c73('0x17')]['attributes']||null:null,'limit':_0x427b12[_0x7c73('0x17')]?_0x427b12[_0x7c73('0x17')][_0x7c73('0x1c')]||null:null})[_0x7c73('0xa')](function(_0x270d3d){logger[_0x7c73('0xb')]('UpdateVoiceDialReport',_0x427b12);logger['debug']('UpdateVoiceDialReport',_0x427b12,JSON[_0x7c73('0x1a')](_0x270d3d));_0x2f4049(_0x270d3d);})[_0x7c73('0x13')](function(_0x383494){logger['error']('UpdateVoiceDialReport',_0x383494[_0x7c73('0x11')],_0x427b12);_0x5b0ce2(_0x5c1bb1[_0x7c73('0xe')](0x1f4,_0x383494[_0x7c73('0x11')]));});});};
\ No newline at end of file
+var _0x8d9b=['info','VoiceDialReport,\x20%s,\x20%s','request\x20sent','VoiceDialReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','CreateVoiceDialReport','VoiceDialReport','create','body','options','debug','UpdateVoiceDialReport','raw','attributes','limit','catch','lodash','util','moment','bluebird','randomstring','../../config/utils','rpc','../../config/environment','request','then'];(function(_0x45d55e,_0x2fede3){var _0x29812a=function(_0x3c6830){while(--_0x3c6830){_0x45d55e['push'](_0x45d55e['shift']());}};_0x29812a(++_0x2fede3);}(_0x8d9b,0x104));var _0xb8d9=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x8d9b[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xb8d9('0x0'));var util=require(_0xb8d9('0x1'));var moment=require(_0xb8d9('0x2'));var BPromise=require(_0xb8d9('0x3'));var rs=require(_0xb8d9('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xb8d9('0x5'));var logger=require('../../config/logger')(_0xb8d9('0x6'));var config=require(_0xb8d9('0x7'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x21c87d,_0x537b18,_0x53339b){return new BPromise(function(_0x4c2b8f,_0x13352e){return client[_0xb8d9('0x8')](_0x21c87d,_0x53339b)[_0xb8d9('0x9')](function(_0x2189b1){logger[_0xb8d9('0xa')](_0xb8d9('0xb'),_0x537b18,_0xb8d9('0xc'));logger['debug'](_0xb8d9('0xd'),_0x537b18,'request\x20sent',JSON[_0xb8d9('0xe')](_0x2189b1));if(_0x2189b1[_0xb8d9('0xf')]){if(_0x2189b1[_0xb8d9('0xf')][_0xb8d9('0x10')]===0x1f4){logger[_0xb8d9('0xf')](_0xb8d9('0xb'),_0x537b18,_0x2189b1[_0xb8d9('0xf')][_0xb8d9('0x11')]);return _0x13352e(_0x2189b1[_0xb8d9('0xf')][_0xb8d9('0x11')]);}logger[_0xb8d9('0xf')](_0xb8d9('0xb'),_0x537b18,_0x2189b1[_0xb8d9('0xf')][_0xb8d9('0x11')]);return _0x4c2b8f(_0x2189b1['error'][_0xb8d9('0x11')]);}else{logger[_0xb8d9('0xa')](_0xb8d9('0xb'),_0x537b18,_0xb8d9('0xc'));_0x4c2b8f(_0x2189b1[_0xb8d9('0x12')]['message']);}})['catch'](function(_0x5b7d5a){logger[_0xb8d9('0xf')](_0xb8d9('0xb'),_0x537b18,_0x5b7d5a);_0x13352e(_0x5b7d5a);});});}exports[_0xb8d9('0x13')]=function(_0x1183e4){var _0x4fec1e=this;return new Promise(function(_0x31b33f,_0x59b7f6){return db[_0xb8d9('0x14')][_0xb8d9('0x15')](_0x1183e4[_0xb8d9('0x16')],{'raw':_0x1183e4[_0xb8d9('0x17')]?_0x1183e4[_0xb8d9('0x17')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x5444a5){logger[_0xb8d9('0xa')](_0xb8d9('0x13'),_0x1183e4);logger[_0xb8d9('0x18')](_0xb8d9('0x13'),_0x1183e4,JSON[_0xb8d9('0xe')](_0x5444a5));_0x31b33f(_0x5444a5);})['catch'](function(_0x963afa){logger[_0xb8d9('0xf')](_0xb8d9('0x13'),_0x963afa[_0xb8d9('0x11')],_0x1183e4);_0x59b7f6(_0x4fec1e[_0xb8d9('0xf')](0x1f4,_0x963afa[_0xb8d9('0x11')]));});});};exports[_0xb8d9('0x19')]=function(_0x3d1659){var _0x3fa36e=this;return new Promise(function(_0x250457,_0x52df47){return db[_0xb8d9('0x14')]['update'](_0x3d1659['body'],{'raw':_0x3d1659[_0xb8d9('0x17')]?_0x3d1659[_0xb8d9('0x17')][_0xb8d9('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3d1659[_0xb8d9('0x17')]?_0x3d1659[_0xb8d9('0x17')]['where']||null:null,'attributes':_0x3d1659[_0xb8d9('0x17')]?_0x3d1659[_0xb8d9('0x17')][_0xb8d9('0x1b')]||null:null,'limit':_0x3d1659['options']?_0x3d1659[_0xb8d9('0x17')][_0xb8d9('0x1c')]||null:null})[_0xb8d9('0x9')](function(_0x4ecdaa){logger[_0xb8d9('0xa')](_0xb8d9('0x19'),_0x3d1659);logger['debug'](_0xb8d9('0x19'),_0x3d1659,JSON[_0xb8d9('0xe')](_0x4ecdaa));_0x250457(_0x4ecdaa);})[_0xb8d9('0x1d')](function(_0x1b1212){logger[_0xb8d9('0xf')](_0xb8d9('0x19'),_0x1b1212[_0xb8d9('0x11')],_0x3d1659);_0x52df47(_0x3fa36e[_0xb8d9('0xf')](0x1f4,_0x1b1212[_0xb8d9('0x11')]));});});};
\ No newline at end of file
index 0f00916..ddfb519 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb6a6=['destroy','exports','multer','util','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','post','addApplications','put','update','delete'];(function(_0x3b8c4e,_0x57f5e5){var _0x51f684=function(_0x3f2cea){while(--_0x3f2cea){_0x3b8c4e['push'](_0x3b8c4e['shift']());}};_0x51f684(++_0x57f5e5);}(_0xb6a6,0x1a0));var _0x6b6a=function(_0x559b2f,_0x364c92){_0x559b2f=_0x559b2f-0x0;var _0x168fdc=_0xb6a6[_0x559b2f];return _0x168fdc;};'use strict';var multer=require(_0x6b6a('0x0'));var util=require(_0x6b6a('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x6b6a('0x2'));var router=express[_0x6b6a('0x3')]();var auth=require(_0x6b6a('0x4'));var interaction=require(_0x6b6a('0x5'));var config=require(_0x6b6a('0x6'));var controller=require('./voiceExtension.controller');router[_0x6b6a('0x7')]('/',auth[_0x6b6a('0x8')](),controller[_0x6b6a('0x9')]);router['get'](_0x6b6a('0xa'),auth[_0x6b6a('0x8')](),controller['show']);router[_0x6b6a('0xb')]('/',auth[_0x6b6a('0x8')](),controller['create']);router[_0x6b6a('0xb')]('/:id/applications',auth[_0x6b6a('0x8')](),controller[_0x6b6a('0xc')]);router[_0x6b6a('0xd')]('/:id',auth['isAuthenticated'](),controller[_0x6b6a('0xe')]);router[_0x6b6a('0xf')]('/:id',auth['isAuthenticated'](),controller[_0x6b6a('0x10')]);module[_0x6b6a('0x11')]=router;
\ No newline at end of file
+var _0x1a37=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceExtension.controller','isAuthenticated','get','/:id','show','/:id/applications','addApplications','put','update','delete','exports'];(function(_0x2b93a5,_0x31934c){var _0x4111dc=function(_0x3d4f71){while(--_0x3d4f71){_0x2b93a5['push'](_0x2b93a5['shift']());}};_0x4111dc(++_0x31934c);}(_0x1a37,0xb4));var _0x71a3=function(_0x618414,_0x1a7a60){_0x618414=_0x618414-0x0;var _0x21c19a=_0x1a37[_0x618414];return _0x21c19a;};'use strict';var multer=require(_0x71a3('0x0'));var util=require(_0x71a3('0x1'));var path=require(_0x71a3('0x2'));var timeout=require(_0x71a3('0x3'));var express=require(_0x71a3('0x4'));var router=express[_0x71a3('0x5')]();var auth=require(_0x71a3('0x6'));var interaction=require(_0x71a3('0x7'));var config=require(_0x71a3('0x8'));var controller=require(_0x71a3('0x9'));router['get']('/',auth[_0x71a3('0xa')](),controller['index']);router[_0x71a3('0xb')](_0x71a3('0xc'),auth[_0x71a3('0xa')](),controller[_0x71a3('0xd')]);router['post']('/',auth['isAuthenticated'](),controller['create']);router['post'](_0x71a3('0xe'),auth[_0x71a3('0xa')](),controller[_0x71a3('0xf')]);router[_0x71a3('0x10')](_0x71a3('0xc'),auth[_0x71a3('0xa')](),controller[_0x71a3('0x11')]);router[_0x71a3('0x12')]('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0x71a3('0x13')]=router;
\ No newline at end of file
index 3b507a6..1790175 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x16d2=['wav','VIRTUAL','exten','sequelize','exports','STRING','compositeIndex','NoOp','ENUM','inbound','outbound','internal','inbound-fax','outbound-fax','any','*,*,*,*','INTEGER','BOOLEAN'];(function(_0x42b503,_0x5d349c){var _0x2b4b4e=function(_0x23e595){while(--_0x23e595){_0x42b503['push'](_0x42b503['shift']());}};_0x2b4b4e(++_0x5d349c);}(_0x16d2,0x123));var _0x216d=function(_0x32b1c0,_0x2396f){_0x32b1c0=_0x32b1c0-0x0;var _0x50bd24=_0x16d2[_0x32b1c0];return _0x50bd24;};'use strict';var Sequelize=require(_0x216d('0x0'));module[_0x216d('0x1')]={'context':{'type':Sequelize[_0x216d('0x2')],'allowNull':![],'unique':_0x216d('0x3'),'validate':{'notEmpty':!![],'is':/[A-Za-z0-9._\+*!\-\[\]]+$/i}},'exten':{'type':Sequelize[_0x216d('0x2')],'allowNull':![],'unique':_0x216d('0x3')},'priority':{'type':Sequelize[_0x216d('0x2')],'allowNull':![],'defaultValue':'1','unique':_0x216d('0x3')},'tag':{'type':Sequelize[_0x216d('0x2')],'allowNull':![],'defaultValue':'--'},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x216d('0x4')},'appdata':{'type':Sequelize[_0x216d('0x2')](0x1000),'allowNull':!![],'defaultValue':''},'type':{'type':Sequelize[_0x216d('0x5')](_0x216d('0x6'),_0x216d('0x7'),_0x216d('0x8'),_0x216d('0x9'),_0x216d('0xa'),'system',_0x216d('0xb')),'allowNull':![]},'description':{'type':Sequelize[_0x216d('0x2')]},'interval':{'type':Sequelize[_0x216d('0x2')],'allowNull':![],'defaultValue':_0x216d('0xc')},'IntervalId':{'type':Sequelize[_0x216d('0xd')]},'isApp':{'type':Sequelize[_0x216d('0xe')],'allowNull':![],'defaultValue':![]},'appType':{'type':Sequelize['STRING'],'defaultValue':null},'callerID':{'type':Sequelize[_0x216d('0x2')],'allowNull':!![]},'record':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'cutdigits':{'type':Sequelize[_0x216d('0xd')]},'recordingFormat':{'type':Sequelize[_0x216d('0x2')],'defaultValue':_0x216d('0xf')},'answer':{'type':Sequelize[_0x216d('0xe')],'defaultValue':!![]},'name':{'type':Sequelize[_0x216d('0x10')],'get':function(_0x23ecf9){return this['getDataValue'](_0x216d('0x11'));}}};
\ No newline at end of file
+var _0xfe57=['sequelize','exports','STRING','compositeIndex','NoOp','ENUM','inbound','outbound','internal','inbound-fax','system','BOOLEAN','wav','VIRTUAL','exten'];(function(_0x470f24,_0x2436a9){var _0x2c6fc8=function(_0x3ef190){while(--_0x3ef190){_0x470f24['push'](_0x470f24['shift']());}};_0x2c6fc8(++_0x2436a9);}(_0xfe57,0x195));var _0x7fe5=function(_0x14a0a0,_0x45d0cf){_0x14a0a0=_0x14a0a0-0x0;var _0x56b651=_0xfe57[_0x14a0a0];return _0x56b651;};'use strict';var Sequelize=require(_0x7fe5('0x0'));module[_0x7fe5('0x1')]={'context':{'type':Sequelize['STRING'],'allowNull':![],'unique':'compositeIndex','validate':{'notEmpty':!![],'is':/[A-Za-z0-9._\+*!\-\[\]]+$/i}},'exten':{'type':Sequelize[_0x7fe5('0x2')],'allowNull':![],'unique':_0x7fe5('0x3')},'priority':{'type':Sequelize[_0x7fe5('0x2')],'allowNull':![],'defaultValue':'1','unique':_0x7fe5('0x3')},'tag':{'type':Sequelize[_0x7fe5('0x2')],'allowNull':![],'defaultValue':'--'},'app':{'type':Sequelize[_0x7fe5('0x2')],'allowNull':![],'defaultValue':_0x7fe5('0x4')},'appdata':{'type':Sequelize[_0x7fe5('0x2')](0x1000),'allowNull':!![],'defaultValue':''},'type':{'type':Sequelize[_0x7fe5('0x5')](_0x7fe5('0x6'),_0x7fe5('0x7'),_0x7fe5('0x8'),_0x7fe5('0x9'),'outbound-fax',_0x7fe5('0xa'),'any'),'allowNull':![]},'description':{'type':Sequelize[_0x7fe5('0x2')]},'interval':{'type':Sequelize[_0x7fe5('0x2')],'allowNull':![],'defaultValue':'*,*,*,*'},'IntervalId':{'type':Sequelize['INTEGER']},'isApp':{'type':Sequelize[_0x7fe5('0xb')],'allowNull':![],'defaultValue':![]},'appType':{'type':Sequelize[_0x7fe5('0x2')],'defaultValue':null},'callerID':{'type':Sequelize['STRING'],'allowNull':!![]},'record':{'type':Sequelize[_0x7fe5('0xb')],'defaultValue':![]},'cutdigits':{'type':Sequelize['INTEGER']},'recordingFormat':{'type':Sequelize['STRING'],'defaultValue':_0x7fe5('0xc')},'answer':{'type':Sequelize[_0x7fe5('0xb')],'defaultValue':!![]},'name':{'type':Sequelize[_0x7fe5('0xd')],'get':function(_0x225fc3){return this['getDataValue'](_0x7fe5('0xe'));}}};
\ No newline at end of file
index 2e4173b..95810c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa344=['catch','create','body','exten','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','context','description','recordingFormat','mandatoryDisposition','sequelize','transaction','VoiceExtensionId','bulkCreate','findAndCountAll','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','sox','ejs','lodash','squel','crypto','jsforce','to-csv','querystring','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./voiceExtension.socket','register','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','InboundRoutes','inbound','OutboundRoutes','outbound','InternalRoutes','internal','filter','map','value','includes','find','type','UserProfileResource','sendStatus','error','name','send','index','VoiceExtension','model','keys','query','intersection','fields','attributes','length','hasOwnProperty','nolimit','sort','filters','pick','where','merge','key','VIRTUAL','options','include','findAll','rows','show','params','rawAttributes','includeAll'];(function(_0xd1350d,_0x11458d){var _0x40a9ad=function(_0x3d0ca9){while(--_0x3d0ca9){_0xd1350d['push'](_0xd1350d['shift']());}};_0x40a9ad(++_0x11458d);}(_0xa344,0x7c));var _0x4a34=function(_0x1eada5,_0x448a86){_0x1eada5=_0x1eada5-0x0;var _0x3e01db=_0xa344[_0x1eada5];return _0x3e01db;};'use strict';var pdf=require(_0x4a34('0x0'));var emlformat=require(_0x4a34('0x1'));var rimraf=require(_0x4a34('0x2'));var zipdir=require(_0x4a34('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x4a34('0x4'));var moment=require(_0x4a34('0x5'));var BPromise=require(_0x4a34('0x6'));var Mustache=require(_0x4a34('0x7'));var util=require(_0x4a34('0x8'));var path=require('path');var sox=require(_0x4a34('0x9'));var csv=require('to-csv');var ejs=require(_0x4a34('0xa'));var fs=require('fs');var _=require(_0x4a34('0xb'));var squel=require(_0x4a34('0xc'));var crypto=require(_0x4a34('0xd'));var jsforce=require(_0x4a34('0xe'));var deskjs=require('desk.js');var toCsv=require(_0x4a34('0xf'));var querystring=require(_0x4a34('0x10'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x4a34('0x11'));var qs=require(_0x4a34('0x12'));var hardwareService=require(_0x4a34('0x13'));var logger=require(_0x4a34('0x14'))('api');var utils=require('../../config/utils');var config=require(_0x4a34('0x15'));var db=require(_0x4a34('0x16'))['db'];config[_0x4a34('0x17')]=_[_0x4a34('0x18')](config[_0x4a34('0x17')],{'host':_0x4a34('0x19'),'port':0x18eb});var socket=require(_0x4a34('0x1a'))(new Redis(config['redis']));require(_0x4a34('0x1b'))[_0x4a34('0x1c')](socket);function respondWithStatusCode(_0x5a4eed,_0x5d0e34){_0x5d0e34=_0x5d0e34||0xcc;return function(_0x15ff89){if(_0x15ff89){return _0x5a4eed['sendStatus'](_0x5d0e34);}return _0x5a4eed['status'](_0x5d0e34)[_0x4a34('0x1d')]();};}function respondWithResult(_0x458edb,_0x31314b){_0x31314b=_0x31314b||0xc8;return function(_0x3c5056){if(_0x3c5056){return _0x458edb[_0x4a34('0x1e')](_0x31314b)[_0x4a34('0x1f')](_0x3c5056);}};}function respondWithFilteredResult(_0x356ef5,_0x5543d2){return function(_0x50cb24){if(_0x50cb24){var _0x10ec12=_0x50cb24[_0x4a34('0x20')],_0x4a3317=_0x5543d2['offset'],_0x3b04ae=_0x5543d2[_0x4a34('0x21')]+_0x5543d2[_0x4a34('0x22')],_0x179b3c;if(_0x3b04ae>=_0x10ec12){_0x3b04ae=_0x10ec12;_0x179b3c=0xc8;}else{_0x179b3c=0xce;}_0x356ef5[_0x4a34('0x1e')](_0x179b3c);return _0x356ef5[_0x4a34('0x23')](_0x4a34('0x24'),_0x4a3317+'-'+_0x3b04ae+'/'+_0x10ec12)[_0x4a34('0x1f')](_0x50cb24);}return null;};}function patchUpdates(_0x190970){return function(_0x36f15b){try{jsonpatch[_0x4a34('0x25')](_0x36f15b,_0x190970,!![]);}catch(_0x3bdaf9){return BPromise[_0x4a34('0x26')](_0x3bdaf9);}return _0x36f15b[_0x4a34('0x27')]();};}function saveUpdates(_0x2718ee,_0xb22fee){return function(_0x1e0b44){if(_0x1e0b44){return _0x1e0b44[_0x4a34('0x28')](_0x2718ee)[_0x4a34('0x29')](function(_0x54eda1){return _0x54eda1;});}return null;};}function removeEntity(_0x12bcd5,_0x118bec){return function(_0x2ea0ac){if(_0x2ea0ac){return _0x2ea0ac[_0x4a34('0x2a')]()[_0x4a34('0x29')](function(){var _0x2ad904=_0x2ea0ac['get']({'plain':!![]});var _0x37e64b=[{'name':_0x4a34('0x2b'),'value':_0x4a34('0x2c'),'ignore':![]},{'name':_0x4a34('0x2d'),'value':_0x4a34('0x2e'),'ignore':![]},{'name':_0x4a34('0x2f'),'value':_0x4a34('0x30'),'ignore':![]}];var _0x47e5dc=_(_0x37e64b)[_0x4a34('0x31')]('ignore')[_0x4a34('0x32')](_0x4a34('0x33'))[_0x4a34('0x33')]();if(_[_0x4a34('0x34')](_0x47e5dc,_0x2ad904['type'])){return;}var _0x35bef0=_[_0x4a34('0x35')](_0x37e64b,[_0x4a34('0x33'),_0x2ad904[_0x4a34('0x36')]])['name'];return db[_0x4a34('0x37')]['destroy']({'where':{'type':_0x35bef0,'resourceId':_0x2ad904['id']}})['then'](function(){return _0x2ea0ac;});})[_0x4a34('0x29')](function(){_0x12bcd5[_0x4a34('0x1e')](0xcc)[_0x4a34('0x1d')]();});}};}function handleEntityNotFound(_0x3ee1e5,_0x4c942a){return function(_0x285168){if(!_0x285168){_0x3ee1e5[_0x4a34('0x38')](0x194);}return _0x285168;};}function handleError(_0x2d7355,_0x20af76){_0x20af76=_0x20af76||0x1f4;return function(_0x482394){logger[_0x4a34('0x39')](_0x482394['stack']);if(_0x482394[_0x4a34('0x3a')]){delete _0x482394[_0x4a34('0x3a')];}_0x2d7355[_0x4a34('0x1e')](_0x20af76)[_0x4a34('0x3b')](_0x482394);};}exports[_0x4a34('0x3c')]=function(_0x265f31,_0x417a01){var _0xd9ba54={},_0x15293b={},_0x34c288={'count':0x0,'rows':[]};var _0x4a6183=db[_0x4a34('0x3d')]['rawAttributes'];_0x15293b[_0x4a34('0x3e')]=_[_0x4a34('0x3f')](_0x4a6183);_0x15293b[_0x4a34('0x40')]=_[_0x4a34('0x3f')](_0x265f31['query']);_0x15293b['filters']=_[_0x4a34('0x41')](_0x15293b[_0x4a34('0x3e')],_0x15293b[_0x4a34('0x40')]);_0xd9ba54['attributes']=_['intersection'](_0x15293b[_0x4a34('0x3e')],qs[_0x4a34('0x42')](_0x265f31[_0x4a34('0x40')][_0x4a34('0x42')]));_0xd9ba54[_0x4a34('0x43')]=_0xd9ba54['attributes'][_0x4a34('0x44')]?_0xd9ba54[_0x4a34('0x43')]:_0x15293b[_0x4a34('0x3e')];if(!_0x265f31['query'][_0x4a34('0x45')](_0x4a34('0x46'))){_0xd9ba54[_0x4a34('0x22')]=qs[_0x4a34('0x22')](_0x265f31[_0x4a34('0x40')][_0x4a34('0x22')]);_0xd9ba54[_0x4a34('0x21')]=qs[_0x4a34('0x21')](_0x265f31['query']['offset']);}_0xd9ba54['order']=qs['sort'](_0x265f31[_0x4a34('0x40')][_0x4a34('0x47')]);_0xd9ba54['where']=qs[_0x4a34('0x48')](_[_0x4a34('0x49')](_0x265f31['query'],_0x15293b['filters']));if(_0x265f31[_0x4a34('0x40')]['filter']){_0xd9ba54[_0x4a34('0x4a')]=_[_0x4a34('0x4b')](_0xd9ba54[_0x4a34('0x4a')],{'$or':_[_0x4a34('0x32')](_0x4a6183,function(_0x2eb1c7){if(_0x2eb1c7[_0x4a34('0x36')][_0x4a34('0x4c')]!==_0x4a34('0x4d')){var _0x4f3fba={};_0x4f3fba[_0x2eb1c7['field']]={'$like':'%'+_0x265f31[_0x4a34('0x40')][_0x4a34('0x31')]+'%'};return _0x4f3fba;}})});}_0xd9ba54=_[_0x4a34('0x4b')]({},_0xd9ba54,_0x265f31[_0x4a34('0x4e')]);var _0x4463a6={'where':_0xd9ba54[_0x4a34('0x4a')]};return db['VoiceExtension'][_0x4a34('0x20')](_0x4463a6)[_0x4a34('0x29')](function(_0x2d0f3d){_0x34c288[_0x4a34('0x20')]=_0x2d0f3d;if(_0x265f31[_0x4a34('0x40')]['includeAll']){_0xd9ba54[_0x4a34('0x4f')]=[{'all':!![]}];}return db['VoiceExtension'][_0x4a34('0x50')](_0xd9ba54);})[_0x4a34('0x29')](function(_0x4b6ddd){_0x34c288[_0x4a34('0x51')]=_0x4b6ddd;return _0x34c288;})[_0x4a34('0x29')](respondWithFilteredResult(_0x417a01,_0xd9ba54))['catch'](handleError(_0x417a01,null));};exports[_0x4a34('0x52')]=function(_0x59495b,_0xaa1650){var _0x284f53={'raw':![],'where':{'id':_0x59495b[_0x4a34('0x53')]['id']}},_0x4b1753={};_0x4b1753[_0x4a34('0x3e')]=_[_0x4a34('0x3f')](db[_0x4a34('0x3d')][_0x4a34('0x54')]);_0x4b1753[_0x4a34('0x40')]=_[_0x4a34('0x3f')](_0x59495b['query']);_0x4b1753[_0x4a34('0x48')]=_[_0x4a34('0x41')](_0x4b1753[_0x4a34('0x3e')],_0x4b1753['query']);_0x284f53[_0x4a34('0x43')]=_[_0x4a34('0x41')](_0x4b1753[_0x4a34('0x3e')],qs[_0x4a34('0x42')](_0x59495b[_0x4a34('0x40')][_0x4a34('0x42')]));_0x284f53[_0x4a34('0x43')]=_0x284f53[_0x4a34('0x43')][_0x4a34('0x44')]?_0x284f53['attributes']:_0x4b1753[_0x4a34('0x3e')];if(_0x59495b['query'][_0x4a34('0x55')]){_0x284f53[_0x4a34('0x4f')]=[{'all':!![]}];}_0x284f53=_[_0x4a34('0x4b')]({},_0x284f53,_0x59495b[_0x4a34('0x4e')]);return db[_0x4a34('0x3d')][_0x4a34('0x35')](_0x284f53)['then'](handleEntityNotFound(_0xaa1650,null))[_0x4a34('0x29')](respondWithResult(_0xaa1650,null))[_0x4a34('0x56')](handleError(_0xaa1650,null));};exports[_0x4a34('0x2a')]=function(_0x570789,_0x21b599){return db[_0x4a34('0x3d')][_0x4a34('0x35')]({'where':{'id':_0x570789[_0x4a34('0x53')]['id']}})[_0x4a34('0x29')](handleEntityNotFound(_0x21b599,null))[_0x4a34('0x29')](removeEntity(_0x21b599,null))[_0x4a34('0x56')](handleError(_0x21b599,null));};exports[_0x4a34('0x57')]=function(_0x117c73,_0x2361a6){if(_0x117c73[_0x4a34('0x58')][_0x4a34('0x36')]==='outbound'&&!_['startsWith'](_0x117c73[_0x4a34('0x58')]['exten'],'_')){_0x117c73[_0x4a34('0x58')][_0x4a34('0x59')]='_'['concat'](_0x117c73[_0x4a34('0x58')][_0x4a34('0x59')]);}return db[_0x4a34('0x3d')][_0x4a34('0x57')](_0x117c73[_0x4a34('0x58')],{'raw':![]})[_0x4a34('0x29')](function(_0x2e2efa){var _0xf1d496=_0x117c73[_0x4a34('0x5a')][_0x4a34('0x5b')]({'plain':!![]});if(!_0xf1d496)throw new Error(_0x4a34('0x5c'));if(_0xf1d496[_0x4a34('0x5d')]===_0x4a34('0x5a')){var _0x112264=_0x2e2efa['get']({'plain':!![]});var _0x16dffe=[{'name':_0x4a34('0x2b'),'value':_0x4a34('0x2c')},{'name':_0x4a34('0x2d'),'value':_0x4a34('0x2e')},{'name':_0x4a34('0x2f'),'value':'internal'}];var _0x2a6086=_[_0x4a34('0x35')](_0x16dffe,[_0x4a34('0x33'),_0x112264[_0x4a34('0x36')]])[_0x4a34('0x3a')];return db['UserProfileSection']['find']({'where':{'name':_0x2a6086,'userProfileId':_0xf1d496['userProfileId']},'raw':!![]})['then'](function(_0x9f19d6){if(_0x9f19d6&&_0x9f19d6[_0x4a34('0x5e')]===0x0){return db[_0x4a34('0x37')]['create']({'name':_0x112264[_0x4a34('0x3a')],'resourceId':_0x112264['id'],'type':_0x9f19d6['name'],'sectionId':_0x9f19d6['id']},{})[_0x4a34('0x29')](function(){return _0x2e2efa;});}else{return _0x2e2efa;}})[_0x4a34('0x56')](function(_0x3f2245){logger[_0x4a34('0x39')](_0x4a34('0x5f'),_0x3f2245);throw _0x3f2245;});}return _0x2e2efa;})['then'](respondWithResult(_0x2361a6,0xc9))[_0x4a34('0x56')](handleError(_0x2361a6,null));};exports[_0x4a34('0x28')]=function(_0x5048b5,_0x457ae9){if(_0x5048b5[_0x4a34('0x58')]['id']){delete _0x5048b5['body']['id'];}return db['VoiceExtension'][_0x4a34('0x35')]({'where':{'id':_0x5048b5[_0x4a34('0x53')]['id']}})[_0x4a34('0x29')](handleEntityNotFound(_0x457ae9,null))[_0x4a34('0x29')](function(_0x40c5c1){if(_0x40c5c1){return db['VoiceExtension'][_0x4a34('0x28')](_[_0x4a34('0x49')](_0x5048b5['body'],[_0x4a34('0x59'),_0x4a34('0x60'),_0x4a34('0x61'),_0x4a34('0x62'),'cutdigits',_0x4a34('0x63')]),{'where':{'context':_0x40c5c1[_0x4a34('0x60')],'exten':_0x40c5c1[_0x4a34('0x59')]},'individualHooks':!![]})[_0x4a34('0x29')](function(_0xbf4bd7){return _0xbf4bd7;});}return null;})[_0x4a34('0x29')](respondWithStatusCode(_0x457ae9,null))[_0x4a34('0x56')](handleError(_0x457ae9,null));};exports['addApplications']=function(_0x1038b5,_0x599687,_0x4161ce){return db[_0x4a34('0x3d')]['findOne']({'where':{'id':_0x1038b5['params']['id']}})[_0x4a34('0x29')](handleEntityNotFound(_0x599687,null))[_0x4a34('0x29')](function(_0x304c21){if(_0x304c21){return db[_0x4a34('0x64')][_0x4a34('0x65')](function(_0x1b0e7f){return db[_0x4a34('0x3d')][_0x4a34('0x2a')]({'where':{'VoiceExtensionId':_0x1038b5[_0x4a34('0x53')]['id']},'transaction':_0x1b0e7f})[_0x4a34('0x29')](function(_0x56d12f){var _0x4e8b51=_[_0x4a34('0x32')](_0x1038b5[_0x4a34('0x58')],function(_0x5e5af8){_0x5e5af8[_0x4a34('0x66')]=_0x1038b5['params']['id'];return _0x5e5af8;});return db[_0x4a34('0x3d')][_0x4a34('0x67')](_0x4e8b51,{'transaction':_0x1b0e7f});});})[_0x4a34('0x29')](function(){return db['VoiceExtension'][_0x4a34('0x68')]({'where':{'isApp':!![],'VoiceExtensionId':_0x1038b5['params']['id']},'order':'cast(priority\x20as\x20unsigned)'});});}})['then'](respondWithResult(_0x599687,null))[_0x4a34('0x56')](handleError(_0x599687,null));};
\ No newline at end of file
+var _0xc7f3=['save','update','then','destroy','inbound','OutboundRoutes','outbound','InternalRoutes','internal','filter','ignore','map','value','includes','find','type','UserProfileResource','name','send','VoiceExtension','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','field','merge','options','includeAll','findAll','rows','catch','show','include','create','body','exten','concat','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','get','InboundRoutes','UserProfileSection','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','description','recordingFormat','cutdigits','context','addApplications','findOne','transaction','bulkCreate','findAndCountAll','cast(priority\x20as\x20unsigned)','html-pdf','eml-format','rimraf','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','redis','localhost','socket.io-emitter','./voiceExtension.socket','register','sendStatus','status','json','count','offset','limit','set','reject'];(function(_0xb28564,_0xcd82d7){var _0x5be9cd=function(_0x1ddb43){while(--_0x1ddb43){_0xb28564['push'](_0xb28564['shift']());}};_0x5be9cd(++_0xcd82d7);}(_0xc7f3,0x173));var _0x3c7f=function(_0xd1f854,_0x532346){_0xd1f854=_0xd1f854-0x0;var _0x548294=_0xc7f3[_0xd1f854];return _0x548294;};'use strict';var pdf=require(_0x3c7f('0x0'));var emlformat=require(_0x3c7f('0x1'));var rimraf=require(_0x3c7f('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x3c7f('0x3'));var rp=require('request-promise');var moment=require(_0x3c7f('0x4'));var BPromise=require(_0x3c7f('0x5'));var Mustache=require(_0x3c7f('0x6'));var util=require(_0x3c7f('0x7'));var path=require(_0x3c7f('0x8'));var sox=require(_0x3c7f('0x9'));var csv=require(_0x3c7f('0xa'));var ejs=require(_0x3c7f('0xb'));var fs=require('fs');var _=require(_0x3c7f('0xc'));var squel=require(_0x3c7f('0xd'));var crypto=require('crypto');var jsforce=require(_0x3c7f('0xe'));var deskjs=require(_0x3c7f('0xf'));var toCsv=require(_0x3c7f('0xa'));var querystring=require(_0x3c7f('0x10'));var Papa=require(_0x3c7f('0x11'));var Redis=require('ioredis');var authService=require(_0x3c7f('0x12'));var qs=require(_0x3c7f('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x3c7f('0x14'))(_0x3c7f('0x15'));var utils=require(_0x3c7f('0x16'));var config=require(_0x3c7f('0x17'));var db=require('../../mysqldb')['db'];config[_0x3c7f('0x18')]=_['defaults'](config[_0x3c7f('0x18')],{'host':_0x3c7f('0x19'),'port':0x18eb});var socket=require(_0x3c7f('0x1a'))(new Redis(config[_0x3c7f('0x18')]));require(_0x3c7f('0x1b'))[_0x3c7f('0x1c')](socket);function respondWithStatusCode(_0x56073b,_0x1d26bc){_0x1d26bc=_0x1d26bc||0xcc;return function(_0x3d5b23){if(_0x3d5b23){return _0x56073b[_0x3c7f('0x1d')](_0x1d26bc);}return _0x56073b['status'](_0x1d26bc)['end']();};}function respondWithResult(_0x53b27e,_0x51e01f){_0x51e01f=_0x51e01f||0xc8;return function(_0x4b12be){if(_0x4b12be){return _0x53b27e[_0x3c7f('0x1e')](_0x51e01f)[_0x3c7f('0x1f')](_0x4b12be);}};}function respondWithFilteredResult(_0x1e08da,_0x3916a7){return function(_0x2a8c5c){if(_0x2a8c5c){var _0x31b02d=_0x2a8c5c[_0x3c7f('0x20')],_0x413329=_0x3916a7[_0x3c7f('0x21')],_0x5cc1c9=_0x3916a7[_0x3c7f('0x21')]+_0x3916a7[_0x3c7f('0x22')],_0x2fd46e;if(_0x5cc1c9>=_0x31b02d){_0x5cc1c9=_0x31b02d;_0x2fd46e=0xc8;}else{_0x2fd46e=0xce;}_0x1e08da[_0x3c7f('0x1e')](_0x2fd46e);return _0x1e08da[_0x3c7f('0x23')]('Content-Range',_0x413329+'-'+_0x5cc1c9+'/'+_0x31b02d)[_0x3c7f('0x1f')](_0x2a8c5c);}return null;};}function patchUpdates(_0x19f3c0){return function(_0x18e060){try{jsonpatch['apply'](_0x18e060,_0x19f3c0,!![]);}catch(_0x51cdf6){return BPromise[_0x3c7f('0x24')](_0x51cdf6);}return _0x18e060[_0x3c7f('0x25')]();};}function saveUpdates(_0x4b0a6c,_0x21afea){return function(_0x32d9c7){if(_0x32d9c7){return _0x32d9c7[_0x3c7f('0x26')](_0x4b0a6c)[_0x3c7f('0x27')](function(_0x45d299){return _0x45d299;});}return null;};}function removeEntity(_0x4020ea,_0x50de68){return function(_0x34ee21){if(_0x34ee21){return _0x34ee21[_0x3c7f('0x28')]()[_0x3c7f('0x27')](function(){var _0x56fa86=_0x34ee21['get']({'plain':!![]});var _0x5b91f8=[{'name':'InboundRoutes','value':_0x3c7f('0x29'),'ignore':![]},{'name':_0x3c7f('0x2a'),'value':_0x3c7f('0x2b'),'ignore':![]},{'name':_0x3c7f('0x2c'),'value':_0x3c7f('0x2d'),'ignore':![]}];var _0x4176ef=_(_0x5b91f8)[_0x3c7f('0x2e')](_0x3c7f('0x2f'))[_0x3c7f('0x30')](_0x3c7f('0x31'))[_0x3c7f('0x31')]();if(_[_0x3c7f('0x32')](_0x4176ef,_0x56fa86['type'])){return;}var _0x19cf68=_[_0x3c7f('0x33')](_0x5b91f8,[_0x3c7f('0x31'),_0x56fa86[_0x3c7f('0x34')]])['name'];return db[_0x3c7f('0x35')][_0x3c7f('0x28')]({'where':{'type':_0x19cf68,'resourceId':_0x56fa86['id']}})['then'](function(){return _0x34ee21;});})[_0x3c7f('0x27')](function(){_0x4020ea[_0x3c7f('0x1e')](0xcc)['end']();});}};}function handleEntityNotFound(_0x47a4b2,_0x568f27){return function(_0x4fb7e){if(!_0x4fb7e){_0x47a4b2[_0x3c7f('0x1d')](0x194);}return _0x4fb7e;};}function handleError(_0x2d2fa0,_0xfafd0a){_0xfafd0a=_0xfafd0a||0x1f4;return function(_0x23dab2){logger['error'](_0x23dab2['stack']);if(_0x23dab2[_0x3c7f('0x36')]){delete _0x23dab2[_0x3c7f('0x36')];}_0x2d2fa0[_0x3c7f('0x1e')](_0xfafd0a)[_0x3c7f('0x37')](_0x23dab2);};}exports['index']=function(_0x16b093,_0xc795ea){var _0x2f110c={},_0x263149={},_0x407304={'count':0x0,'rows':[]};var _0xf96c22=db[_0x3c7f('0x38')][_0x3c7f('0x39')];_0x263149[_0x3c7f('0x3a')]=_[_0x3c7f('0x3b')](_0xf96c22);_0x263149['query']=_[_0x3c7f('0x3b')](_0x16b093[_0x3c7f('0x3c')]);_0x263149['filters']=_[_0x3c7f('0x3d')](_0x263149[_0x3c7f('0x3a')],_0x263149[_0x3c7f('0x3c')]);_0x2f110c[_0x3c7f('0x3e')]=_[_0x3c7f('0x3d')](_0x263149[_0x3c7f('0x3a')],qs['fields'](_0x16b093[_0x3c7f('0x3c')][_0x3c7f('0x3f')]));_0x2f110c[_0x3c7f('0x3e')]=_0x2f110c[_0x3c7f('0x3e')][_0x3c7f('0x40')]?_0x2f110c[_0x3c7f('0x3e')]:_0x263149[_0x3c7f('0x3a')];if(!_0x16b093[_0x3c7f('0x3c')][_0x3c7f('0x41')](_0x3c7f('0x42'))){_0x2f110c['limit']=qs[_0x3c7f('0x22')](_0x16b093[_0x3c7f('0x3c')][_0x3c7f('0x22')]);_0x2f110c[_0x3c7f('0x21')]=qs[_0x3c7f('0x21')](_0x16b093[_0x3c7f('0x3c')][_0x3c7f('0x21')]);}_0x2f110c[_0x3c7f('0x43')]=qs['sort'](_0x16b093[_0x3c7f('0x3c')][_0x3c7f('0x44')]);_0x2f110c[_0x3c7f('0x45')]=qs[_0x3c7f('0x46')](_['pick'](_0x16b093['query'],_0x263149[_0x3c7f('0x46')]));if(_0x16b093['query'][_0x3c7f('0x2e')]){_0x2f110c['where']=_['merge'](_0x2f110c[_0x3c7f('0x45')],{'$or':_[_0x3c7f('0x30')](_0xf96c22,function(_0x345067){if(_0x345067[_0x3c7f('0x34')]['key']!=='VIRTUAL'){var _0x4bff27={};_0x4bff27[_0x345067[_0x3c7f('0x47')]]={'$like':'%'+_0x16b093[_0x3c7f('0x3c')][_0x3c7f('0x2e')]+'%'};return _0x4bff27;}})});}_0x2f110c=_[_0x3c7f('0x48')]({},_0x2f110c,_0x16b093[_0x3c7f('0x49')]);var _0x17f5e8={'where':_0x2f110c[_0x3c7f('0x45')]};return db[_0x3c7f('0x38')][_0x3c7f('0x20')](_0x17f5e8)[_0x3c7f('0x27')](function(_0x1d1dd1){_0x407304[_0x3c7f('0x20')]=_0x1d1dd1;if(_0x16b093[_0x3c7f('0x3c')][_0x3c7f('0x4a')]){_0x2f110c['include']=[{'all':!![]}];}return db[_0x3c7f('0x38')][_0x3c7f('0x4b')](_0x2f110c);})[_0x3c7f('0x27')](function(_0x2d3d29){_0x407304[_0x3c7f('0x4c')]=_0x2d3d29;return _0x407304;})['then'](respondWithFilteredResult(_0xc795ea,_0x2f110c))[_0x3c7f('0x4d')](handleError(_0xc795ea,null));};exports[_0x3c7f('0x4e')]=function(_0x5e78a8,_0x5974d0){var _0x5a8889={'raw':![],'where':{'id':_0x5e78a8['params']['id']}},_0x25b09e={};_0x25b09e[_0x3c7f('0x3a')]=_[_0x3c7f('0x3b')](db[_0x3c7f('0x38')][_0x3c7f('0x39')]);_0x25b09e[_0x3c7f('0x3c')]=_['keys'](_0x5e78a8[_0x3c7f('0x3c')]);_0x25b09e['filters']=_[_0x3c7f('0x3d')](_0x25b09e[_0x3c7f('0x3a')],_0x25b09e[_0x3c7f('0x3c')]);_0x5a8889[_0x3c7f('0x3e')]=_['intersection'](_0x25b09e['model'],qs[_0x3c7f('0x3f')](_0x5e78a8[_0x3c7f('0x3c')]['fields']));_0x5a8889['attributes']=_0x5a8889[_0x3c7f('0x3e')][_0x3c7f('0x40')]?_0x5a8889[_0x3c7f('0x3e')]:_0x25b09e[_0x3c7f('0x3a')];if(_0x5e78a8[_0x3c7f('0x3c')][_0x3c7f('0x4a')]){_0x5a8889[_0x3c7f('0x4f')]=[{'all':!![]}];}_0x5a8889=_[_0x3c7f('0x48')]({},_0x5a8889,_0x5e78a8['options']);return db[_0x3c7f('0x38')][_0x3c7f('0x33')](_0x5a8889)[_0x3c7f('0x27')](handleEntityNotFound(_0x5974d0,null))['then'](respondWithResult(_0x5974d0,null))[_0x3c7f('0x4d')](handleError(_0x5974d0,null));};exports['destroy']=function(_0x5b58fc,_0x2b3b2a){return db[_0x3c7f('0x38')]['find']({'where':{'id':_0x5b58fc['params']['id']}})[_0x3c7f('0x27')](handleEntityNotFound(_0x2b3b2a,null))[_0x3c7f('0x27')](removeEntity(_0x2b3b2a,null))[_0x3c7f('0x4d')](handleError(_0x2b3b2a,null));};exports[_0x3c7f('0x50')]=function(_0x26a399,_0x43a1ca){if(_0x26a399['body'][_0x3c7f('0x34')]===_0x3c7f('0x2b')&&!_['startsWith'](_0x26a399[_0x3c7f('0x51')]['exten'],'_')){_0x26a399['body'][_0x3c7f('0x52')]='_'[_0x3c7f('0x53')](_0x26a399[_0x3c7f('0x51')][_0x3c7f('0x52')]);}return db['VoiceExtension'][_0x3c7f('0x50')](_0x26a399[_0x3c7f('0x51')],{'raw':![]})['then'](function(_0x2d8a7a){var _0x1ac4f3=_0x26a399[_0x3c7f('0x54')]['get']({'plain':!![]});if(!_0x1ac4f3)throw new Error(_0x3c7f('0x55'));if(_0x1ac4f3['role']===_0x3c7f('0x54')){var _0x5475bb=_0x2d8a7a[_0x3c7f('0x56')]({'plain':!![]});var _0x3fb7e9=[{'name':_0x3c7f('0x57'),'value':_0x3c7f('0x29')},{'name':_0x3c7f('0x2a'),'value':_0x3c7f('0x2b')},{'name':_0x3c7f('0x2c'),'value':_0x3c7f('0x2d')}];var _0x39f9d5=_[_0x3c7f('0x33')](_0x3fb7e9,[_0x3c7f('0x31'),_0x5475bb[_0x3c7f('0x34')]])[_0x3c7f('0x36')];return db[_0x3c7f('0x58')][_0x3c7f('0x33')]({'where':{'name':_0x39f9d5,'userProfileId':_0x1ac4f3['userProfileId']},'raw':!![]})[_0x3c7f('0x27')](function(_0x4b44ca){if(_0x4b44ca&&_0x4b44ca['autoAssociation']===0x0){return db[_0x3c7f('0x35')][_0x3c7f('0x50')]({'name':_0x5475bb[_0x3c7f('0x36')],'resourceId':_0x5475bb['id'],'type':_0x4b44ca[_0x3c7f('0x36')],'sectionId':_0x4b44ca['id']},{})[_0x3c7f('0x27')](function(){return _0x2d8a7a;});}else{return _0x2d8a7a;}})[_0x3c7f('0x4d')](function(_0x503ec4){logger[_0x3c7f('0x59')](_0x3c7f('0x5a'),_0x503ec4);throw _0x503ec4;});}return _0x2d8a7a;})[_0x3c7f('0x27')](respondWithResult(_0x43a1ca,0xc9))[_0x3c7f('0x4d')](handleError(_0x43a1ca,null));};exports[_0x3c7f('0x26')]=function(_0x569c03,_0x53717d){if(_0x569c03[_0x3c7f('0x51')]['id']){delete _0x569c03[_0x3c7f('0x51')]['id'];}return db[_0x3c7f('0x38')][_0x3c7f('0x33')]({'where':{'id':_0x569c03[_0x3c7f('0x5b')]['id']}})[_0x3c7f('0x27')](handleEntityNotFound(_0x53717d,null))[_0x3c7f('0x27')](function(_0x1b51ad){if(_0x1b51ad){return db[_0x3c7f('0x38')][_0x3c7f('0x26')](_['pick'](_0x569c03[_0x3c7f('0x51')],[_0x3c7f('0x52'),'context',_0x3c7f('0x5c'),_0x3c7f('0x5d'),_0x3c7f('0x5e'),'mandatoryDisposition']),{'where':{'context':_0x1b51ad[_0x3c7f('0x5f')],'exten':_0x1b51ad[_0x3c7f('0x52')]},'individualHooks':!![]})['then'](function(_0x265651){return _0x265651;});}return null;})['then'](respondWithStatusCode(_0x53717d,null))[_0x3c7f('0x4d')](handleError(_0x53717d,null));};exports[_0x3c7f('0x60')]=function(_0x2a70ba,_0x21e000,_0xb06e55){return db[_0x3c7f('0x38')][_0x3c7f('0x61')]({'where':{'id':_0x2a70ba['params']['id']}})[_0x3c7f('0x27')](handleEntityNotFound(_0x21e000,null))[_0x3c7f('0x27')](function(_0xc8af07){if(_0xc8af07){return db['sequelize'][_0x3c7f('0x62')](function(_0x54828c){return db[_0x3c7f('0x38')][_0x3c7f('0x28')]({'where':{'VoiceExtensionId':_0x2a70ba[_0x3c7f('0x5b')]['id']},'transaction':_0x54828c})[_0x3c7f('0x27')](function(_0x49800f){var _0x8120d=_[_0x3c7f('0x30')](_0x2a70ba['body'],function(_0x2f4d58){_0x2f4d58['VoiceExtensionId']=_0x2a70ba[_0x3c7f('0x5b')]['id'];return _0x2f4d58;});return db[_0x3c7f('0x38')][_0x3c7f('0x63')](_0x8120d,{'transaction':_0x54828c});});})[_0x3c7f('0x27')](function(){return db[_0x3c7f('0x38')][_0x3c7f('0x64')]({'where':{'isApp':!![],'VoiceExtensionId':_0x2a70ba[_0x3c7f('0x5b')]['id']},'order':_0x3c7f('0x65')});});}})[_0x3c7f('0x27')](respondWithResult(_0x21e000,null))[_0x3c7f('0x4d')](handleError(_0x21e000,null));};
\ No newline at end of file
index e579f8a..aa651ae 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b84=['events','../../mysqldb','save','hasOwnProperty','exports'];(function(_0xdeac17,_0x19ad66){var _0x33aabd=function(_0x558a9e){while(--_0x558a9e){_0xdeac17['push'](_0xdeac17['shift']());}};_0x33aabd(++_0x19ad66);}(_0x4b84,0x1cc));var _0x44b8=function(_0x2defb5,_0x1cda14){_0x2defb5=_0x2defb5-0x0;var _0x229c53=_0x4b84[_0x2defb5];return _0x229c53;};'use strict';var EventEmitter=require(_0x44b8('0x0'));var VoiceExtension=require(_0x44b8('0x1'))['db']['VoiceExtension'];var VoiceExtensionEvents=new EventEmitter();VoiceExtensionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x44b8('0x2'),'afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x3b26c7){return function(_0x31282a,_0x39ad16,_0x5766b0){VoiceExtensionEvents['emit'](_0x3b26c7+':'+_0x31282a['id'],_0x31282a);VoiceExtensionEvents['emit'](_0x3b26c7,_0x31282a);_0x5766b0(null);};}for(var e in events){if(events[_0x44b8('0x3')](e)){var event=events[e];VoiceExtension['hook'](e,emitEvent(event));}}module[_0x44b8('0x4')]=VoiceExtensionEvents;
\ No newline at end of file
+var _0xb43b=['events','../../mysqldb','setMaxListeners','save','update','hasOwnProperty','exports'];(function(_0x40b9ae,_0x58d4f7){var _0x1ee46f=function(_0x408804){while(--_0x408804){_0x40b9ae['push'](_0x40b9ae['shift']());}};_0x1ee46f(++_0x58d4f7);}(_0xb43b,0x1b2));var _0xbb43=function(_0x3850fc,_0x2f3bb8){_0x3850fc=_0x3850fc-0x0;var _0x3d3745=_0xb43b[_0x3850fc];return _0x3d3745;};'use strict';var EventEmitter=require(_0xbb43('0x0'));var VoiceExtension=require(_0xbb43('0x1'))['db']['VoiceExtension'];var VoiceExtensionEvents=new EventEmitter();VoiceExtensionEvents[_0xbb43('0x2')](0x0);var events={'afterCreate':_0xbb43('0x3'),'afterUpdate':_0xbb43('0x4'),'afterDestroy':'remove'};function emitEvent(_0x131e9e){return function(_0x41aff6,_0x351254,_0x16432a){VoiceExtensionEvents['emit'](_0x131e9e+':'+_0x41aff6['id'],_0x41aff6);VoiceExtensionEvents['emit'](_0x131e9e,_0x41aff6);_0x16432a(null);};}for(var e in events){if(events[_0xbb43('0x5')](e)){var event=events[e];VoiceExtension['hook'](e,emitEvent(event));}}module[_0xbb43('0x6')]=VoiceExtensionEvents;
\ No newline at end of file
index 7bf26a8..608cba8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa49d=['VoiceExtension','voice_extensions','util','../../config/logger','api','bluebird','define'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa49d,0x64));var _0xda49=function(_0x9d5c61,_0x18e7fe){_0x9d5c61=_0x9d5c61-0x0;var _0x80408d=_0xa49d[_0x9d5c61];return _0x80408d;};'use strict';var _=require('lodash');var util=require(_0xda49('0x0'));var logger=require(_0xda49('0x1'))(_0xda49('0x2'));var moment=require('moment');var BPromise=require(_0xda49('0x3'));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('./voiceExtension.attributes');module['exports']=function(_0x2300da,_0x4d7012){return _0x2300da[_0xda49('0x4')](_0xda49('0x5'),attributes,{'tableName':_0xda49('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf485=['rimraf','./voiceExtension.attributes','define','VoiceExtension','voice_extensions','lodash','util','../../config/logger','api','moment','bluebird','path'];(function(_0x1d1779,_0x284147){var _0x2377e9=function(_0x299f6f){while(--_0x299f6f){_0x1d1779['push'](_0x1d1779['shift']());}};_0x2377e9(++_0x284147);}(_0xf485,0xd1));var _0x5f48=function(_0x33d8a3,_0x33ea6f){_0x33d8a3=_0x33d8a3-0x0;var _0x1d37dd=_0xf485[_0x33d8a3];return _0x1d37dd;};'use strict';var _=require(_0x5f48('0x0'));var util=require(_0x5f48('0x1'));var logger=require(_0x5f48('0x2'))(_0x5f48('0x3'));var moment=require(_0x5f48('0x4'));var BPromise=require(_0x5f48('0x5'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x5f48('0x6'));var rimraf=require(_0x5f48('0x7'));var config=require('../../config/environment');var attributes=require(_0x5f48('0x8'));module['exports']=function(_0x3cac48,_0x518eb1){return _0x3cac48[_0x5f48('0x9')](_0x5f48('0xa'),attributes,{'tableName':_0x5f48('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 51727d1..1134794 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0bb5=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','redis','defaults','localhost','./voiceExtension.socket','register','request','then','info','VoiceExtension,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','catch','GetVoiceExtension','VoiceExtension','findAll','options','raw','where','attributes','limit','include','map','model','lodash','util','randomstring','ioredis','../../mysqldb'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x0bb5,0x148));var _0x50bb=function(_0x7bd9d1,_0x5a1eb5){_0x7bd9d1=_0x7bd9d1-0x0;var _0x2b1ab2=_0x0bb5[_0x7bd9d1];return _0x2b1ab2;};'use strict';var _=require(_0x50bb('0x0'));var util=require(_0x50bb('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x50bb('0x2'));var fs=require('fs');var Redis=require(_0x50bb('0x3'));var db=require(_0x50bb('0x4'))['db'];var utils=require(_0x50bb('0x5'));var logger=require(_0x50bb('0x6'))(_0x50bb('0x7'));var config=require(_0x50bb('0x8'));var jayson=require(_0x50bb('0x9'));var client=jayson['client']['http']({'port':0x232a});config[_0x50bb('0xa')]=_[_0x50bb('0xb')](config[_0x50bb('0xa')],{'host':_0x50bb('0xc'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x50bb('0xd'))[_0x50bb('0xe')](socket);function respondWithRpcPromise(_0x3ae598,_0x239a89,_0x5512e1){return new BPromise(function(_0x36f7a1,_0x2edeeb){return client[_0x50bb('0xf')](_0x3ae598,_0x5512e1)[_0x50bb('0x10')](function(_0x346422){logger[_0x50bb('0x11')](_0x50bb('0x12'),_0x239a89,'request\x20sent');logger[_0x50bb('0x13')]('VoiceExtension,\x20%s,\x20%s,\x20%s',_0x239a89,_0x50bb('0x14'),JSON[_0x50bb('0x15')](_0x346422));if(_0x346422[_0x50bb('0x16')]){if(_0x346422['error'][_0x50bb('0x17')]===0x1f4){logger[_0x50bb('0x16')](_0x50bb('0x12'),_0x239a89,_0x346422['error'][_0x50bb('0x18')]);return _0x2edeeb(_0x346422['error'][_0x50bb('0x18')]);}logger[_0x50bb('0x16')](_0x50bb('0x12'),_0x239a89,_0x346422[_0x50bb('0x16')][_0x50bb('0x18')]);return _0x36f7a1(_0x346422['error'][_0x50bb('0x18')]);}else{logger[_0x50bb('0x11')]('VoiceExtension,\x20%s,\x20%s',_0x239a89,_0x50bb('0x14'));_0x36f7a1(_0x346422['result'][_0x50bb('0x18')]);}})[_0x50bb('0x19')](function(_0x4b06f5){logger['error'](_0x50bb('0x12'),_0x239a89,_0x4b06f5);_0x2edeeb(_0x4b06f5);});});}exports[_0x50bb('0x1a')]=function(_0x2408db){var _0x26abe7=this;return new Promise(function(_0x56b25a,_0x19dc5d){return db[_0x50bb('0x1b')][_0x50bb('0x1c')]({'raw':_0x2408db['options']?_0x2408db[_0x50bb('0x1d')][_0x50bb('0x1e')]===undefined?!![]:![]:!![],'where':_0x2408db[_0x50bb('0x1d')]?_0x2408db['options'][_0x50bb('0x1f')]||null:null,'attributes':_0x2408db['options']?_0x2408db[_0x50bb('0x1d')][_0x50bb('0x20')]||null:null,'limit':_0x2408db[_0x50bb('0x1d')]?_0x2408db[_0x50bb('0x1d')][_0x50bb('0x21')]||null:null,'include':_0x2408db[_0x50bb('0x1d')]?_0x2408db['options'][_0x50bb('0x22')]?_[_0x50bb('0x23')](_0x2408db[_0x50bb('0x1d')][_0x50bb('0x22')],function(_0x5234d7){return{'model':db[_0x5234d7[_0x50bb('0x24')]],'as':_0x5234d7['as'],'attributes':_0x5234d7['attributes'],'include':_0x5234d7['include']?_[_0x50bb('0x23')](_0x5234d7['include'],function(_0x5cfe4b){return{'model':db[_0x5cfe4b[_0x50bb('0x24')]],'as':_0x5cfe4b['as'],'attributes':_0x5cfe4b[_0x50bb('0x20')],'include':_0x5cfe4b[_0x50bb('0x22')]?_[_0x50bb('0x23')](_0x5cfe4b[_0x50bb('0x22')],function(_0x269479){return{'model':db[_0x269479[_0x50bb('0x24')]],'as':_0x269479['as'],'attributes':_0x269479[_0x50bb('0x20')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x44ce86){logger[_0x50bb('0x11')](_0x50bb('0x1a'),_0x2408db);logger[_0x50bb('0x13')]('GetVoiceExtension',_0x2408db,JSON[_0x50bb('0x15')](_0x44ce86));_0x56b25a(_0x44ce86);})[_0x50bb('0x19')](function(_0xc38da5){logger[_0x50bb('0x16')](_0x50bb('0x1a'),_0xc38da5[_0x50bb('0x18')],_0x2408db);_0x19dc5d(_0x26abe7[_0x50bb('0x16')](0x1f4,_0xc38da5[_0x50bb('0x18')]));});});};
\ No newline at end of file
+var _0xac4a=['ioredis','../../config/logger','rpc','../../config/environment','client','redis','localhost','./voiceExtension.socket','request','then','request\x20sent','debug','VoiceExtension,\x20%s,\x20%s,\x20%s','stringify','error','code','VoiceExtension,\x20%s,\x20%s','message','result','catch','GetVoiceExtension','findAll','options','raw','where','attributes','limit','include','map','model','info','lodash','util','moment','bluebird','randomstring'];(function(_0x44f11d,_0x3fb768){var _0x29343e=function(_0x2d547f){while(--_0x2d547f){_0x44f11d['push'](_0x44f11d['shift']());}};_0x29343e(++_0x3fb768);}(_0xac4a,0x13f));var _0xaac4=function(_0x53187c,_0x19fa82){_0x53187c=_0x53187c-0x0;var _0xfdbea6=_0xac4a[_0x53187c];return _0xfdbea6;};'use strict';var _=require(_0xaac4('0x0'));var util=require(_0xaac4('0x1'));var moment=require(_0xaac4('0x2'));var BPromise=require(_0xaac4('0x3'));var rs=require(_0xaac4('0x4'));var fs=require('fs');var Redis=require(_0xaac4('0x5'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xaac4('0x6'))(_0xaac4('0x7'));var config=require(_0xaac4('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xaac4('0x9')]['http']({'port':0x232a});config[_0xaac4('0xa')]=_['defaults'](config[_0xaac4('0xa')],{'host':_0xaac4('0xb'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0xaac4('0xc'))['register'](socket);function respondWithRpcPromise(_0x452573,_0x59b992,_0x4f4c84){return new BPromise(function(_0xeb6b9a,_0x22cea4){return client[_0xaac4('0xd')](_0x452573,_0x4f4c84)[_0xaac4('0xe')](function(_0x3a983c){logger['info']('VoiceExtension,\x20%s,\x20%s',_0x59b992,_0xaac4('0xf'));logger[_0xaac4('0x10')](_0xaac4('0x11'),_0x59b992,'request\x20sent',JSON[_0xaac4('0x12')](_0x3a983c));if(_0x3a983c[_0xaac4('0x13')]){if(_0x3a983c['error'][_0xaac4('0x14')]===0x1f4){logger[_0xaac4('0x13')](_0xaac4('0x15'),_0x59b992,_0x3a983c[_0xaac4('0x13')][_0xaac4('0x16')]);return _0x22cea4(_0x3a983c[_0xaac4('0x13')][_0xaac4('0x16')]);}logger[_0xaac4('0x13')](_0xaac4('0x15'),_0x59b992,_0x3a983c[_0xaac4('0x13')][_0xaac4('0x16')]);return _0xeb6b9a(_0x3a983c[_0xaac4('0x13')][_0xaac4('0x16')]);}else{logger['info'](_0xaac4('0x15'),_0x59b992,'request\x20sent');_0xeb6b9a(_0x3a983c[_0xaac4('0x17')]['message']);}})[_0xaac4('0x18')](function(_0x27fe7b){logger[_0xaac4('0x13')](_0xaac4('0x15'),_0x59b992,_0x27fe7b);_0x22cea4(_0x27fe7b);});});}exports[_0xaac4('0x19')]=function(_0x2f3deb){var _0x44f0e8=this;return new Promise(function(_0x25b946,_0x4166ee){return db['VoiceExtension'][_0xaac4('0x1a')]({'raw':_0x2f3deb['options']?_0x2f3deb[_0xaac4('0x1b')][_0xaac4('0x1c')]===undefined?!![]:![]:!![],'where':_0x2f3deb[_0xaac4('0x1b')]?_0x2f3deb[_0xaac4('0x1b')][_0xaac4('0x1d')]||null:null,'attributes':_0x2f3deb[_0xaac4('0x1b')]?_0x2f3deb['options'][_0xaac4('0x1e')]||null:null,'limit':_0x2f3deb[_0xaac4('0x1b')]?_0x2f3deb[_0xaac4('0x1b')][_0xaac4('0x1f')]||null:null,'include':_0x2f3deb[_0xaac4('0x1b')]?_0x2f3deb[_0xaac4('0x1b')][_0xaac4('0x20')]?_['map'](_0x2f3deb[_0xaac4('0x1b')]['include'],function(_0x54203b){return{'model':db[_0x54203b['model']],'as':_0x54203b['as'],'attributes':_0x54203b['attributes'],'include':_0x54203b[_0xaac4('0x20')]?_[_0xaac4('0x21')](_0x54203b[_0xaac4('0x20')],function(_0xe93120){return{'model':db[_0xe93120[_0xaac4('0x22')]],'as':_0xe93120['as'],'attributes':_0xe93120[_0xaac4('0x1e')],'include':_0xe93120[_0xaac4('0x20')]?_[_0xaac4('0x21')](_0xe93120[_0xaac4('0x20')],function(_0x386c9b){return{'model':db[_0x386c9b['model']],'as':_0x386c9b['as'],'attributes':_0x386c9b[_0xaac4('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xaac4('0xe')](function(_0xda10b6){logger[_0xaac4('0x23')](_0xaac4('0x19'),_0x2f3deb);logger[_0xaac4('0x10')]('GetVoiceExtension',_0x2f3deb,JSON[_0xaac4('0x12')](_0xda10b6));_0x25b946(_0xda10b6);})['catch'](function(_0x2df7e3){logger[_0xaac4('0x13')](_0xaac4('0x19'),_0x2df7e3[_0xaac4('0x16')],_0x2f3deb);_0x4166ee(_0x44f0e8['error'](0x1f4,_0x2df7e3['message']));});});};
\ No newline at end of file
index 328de1f..d487559 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1206=['emit','removeListener','register','length','voiceExtension:','./voiceExtension.events','remove','update'];(function(_0x1c546c,_0x5c57cb){var _0x2cc384=function(_0x4dee11){while(--_0x4dee11){_0x1c546c['push'](_0x1c546c['shift']());}};_0x2cc384(++_0x5c57cb);}(_0x1206,0xf5));var _0x6120=function(_0x1931b1,_0xbbae1b){_0x1931b1=_0x1931b1-0x0;var _0x5d3510=_0x1206[_0x1931b1];return _0x5d3510;};'use strict';var VoiceExtensionEvents=require(_0x6120('0x0'));var events=['save',_0x6120('0x1'),_0x6120('0x2')];function createListener(_0xd1b9c2,_0x20b4db){return function(_0x1d6445){_0x20b4db[_0x6120('0x3')](_0xd1b9c2,_0x1d6445);};}function removeListener(_0x8d6690,_0x52bf7d){return function(){VoiceExtensionEvents[_0x6120('0x4')](_0x8d6690,_0x52bf7d);};}exports[_0x6120('0x5')]=function(_0x2f3bfc){for(var _0x1d9607=0x0,_0x15b5c4=events[_0x6120('0x6')];_0x1d9607<_0x15b5c4;_0x1d9607++){var _0xb950ea=events[_0x1d9607];var _0x26212d=createListener(_0x6120('0x7')+_0xb950ea,_0x2f3bfc);VoiceExtensionEvents['on'](_0xb950ea,_0x26212d);}};
\ No newline at end of file
+var _0xd3c9=['./voiceExtension.events','save','removeListener','register','voiceExtension:'];(function(_0x48348f,_0x1c53c6){var _0x27be86=function(_0xbd7ad4){while(--_0xbd7ad4){_0x48348f['push'](_0x48348f['shift']());}};_0x27be86(++_0x1c53c6);}(_0xd3c9,0x18b));var _0x9d3c=function(_0x1a9ce9,_0x2825d4){_0x1a9ce9=_0x1a9ce9-0x0;var _0x32257a=_0xd3c9[_0x1a9ce9];return _0x32257a;};'use strict';var VoiceExtensionEvents=require(_0x9d3c('0x0'));var events=[_0x9d3c('0x1'),'remove','update'];function createListener(_0x43aeaa,_0x397a68){return function(_0x25cbf3){_0x397a68['emit'](_0x43aeaa,_0x25cbf3);};}function removeListener(_0x2b686c,_0x83d132){return function(){VoiceExtensionEvents[_0x9d3c('0x2')](_0x2b686c,_0x83d132);};}exports[_0x9d3c('0x3')]=function(_0x364ba0){for(var _0x28c897=0x0,_0x5c58bd=events['length'];_0x28c897<_0x5c58bd;_0x28c897++){var _0x132390=events[_0x28c897];var _0x50cb3c=createListener(_0x9d3c('0x4')+_0x132390,_0x364ba0);VoiceExtensionEvents['on'](_0x132390,_0x50cb3c);}};
\ No newline at end of file
index 45b478c..31931e1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7675=['delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','./voiceMail.controller','get','/:id','isAuthenticated','show','post','create'];(function(_0x95eea4,_0x215ff3){var _0x1d9dbc=function(_0x530c2a){while(--_0x530c2a){_0x95eea4['push'](_0x95eea4['shift']());}};_0x1d9dbc(++_0x215ff3);}(_0x7675,0xcf));var _0x5767=function(_0x8fce60,_0x5908d0){_0x8fce60=_0x8fce60-0x0;var _0x57ee4d=_0x7675[_0x8fce60];return _0x57ee4d;};'use strict';var multer=require(_0x5767('0x0'));var util=require(_0x5767('0x1'));var path=require(_0x5767('0x2'));var timeout=require(_0x5767('0x3'));var express=require(_0x5767('0x4'));var router=express['Router']();var auth=require(_0x5767('0x5'));var interaction=require(_0x5767('0x6'));var config=require('../../config/environment');var controller=require(_0x5767('0x7'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x5767('0x8')](_0x5767('0x9'),auth[_0x5767('0xa')](),controller[_0x5767('0xb')]);router[_0x5767('0x8')]('/:id/messages',auth['isAuthenticated'](),controller['getMessages']);router[_0x5767('0xc')]('/',auth[_0x5767('0xa')](),controller[_0x5767('0xd')]);router['put'](_0x5767('0x9'),auth[_0x5767('0xa')](),controller['update']);router[_0x5767('0xe')](_0x5767('0x9'),auth[_0x5767('0xa')](),controller[_0x5767('0xf')]);module[_0x5767('0x10')]=router;
\ No newline at end of file
+var _0x5836=['put','update','delete','exports','util','express','../../components/auth/service','../../components/interaction/service','isAuthenticated','index','/:id','/:id/messages','getMessages','post','create'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0x5836,0x130));var _0x6583=function(_0x3f3a47,_0x28f84b){_0x3f3a47=_0x3f3a47-0x0;var _0x57a682=_0x5836[_0x3f3a47];return _0x57a682;};'use strict';var multer=require('multer');var util=require(_0x6583('0x0'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x6583('0x1'));var router=express['Router']();var auth=require(_0x6583('0x2'));var interaction=require(_0x6583('0x3'));var config=require('../../config/environment');var controller=require('./voiceMail.controller');router['get']('/',auth[_0x6583('0x4')](),controller[_0x6583('0x5')]);router['get'](_0x6583('0x6'),auth[_0x6583('0x4')](),controller['show']);router['get'](_0x6583('0x7'),auth[_0x6583('0x4')](),controller[_0x6583('0x8')]);router[_0x6583('0x9')]('/',auth[_0x6583('0x4')](),controller[_0x6583('0xa')]);router[_0x6583('0xb')](_0x6583('0x6'),auth['isAuthenticated'](),controller[_0x6583('0xc')]);router[_0x6583('0xd')](_0x6583('0x6'),auth[_0x6583('0x4')](),controller['destroy']);module[_0x6583('0xe')]=router;
\ No newline at end of file
index 1043a1c..9c72eb7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcca6=['TIMESTAMP','INTEGER','VIRTUAL','getDataValue','fullname','\x20-\x20','sequelize','exports','STRING','setDataValue','email','string','trim','central','ENUM','yes','TINYINT(4)'];(function(_0x12a180,_0x412470){var _0x38bce1=function(_0x258bff){while(--_0x258bff){_0x12a180['push'](_0x12a180['shift']());}};_0x38bce1(++_0x412470);}(_0xcca6,0x116));var _0x6cca=function(_0x3a8db5,_0x31cff7){_0x3a8db5=_0x3a8db5-0x0;var _0x2c03cd=_0xcca6[_0x3a8db5];return _0x2c03cd;};'use strict';var Sequelize=require(_0x6cca('0x0'));module[_0x6cca('0x1')]={'customer_id':{'type':Sequelize[_0x6cca('0x2')]},'context':{'type':Sequelize[_0x6cca('0x2')],'defaultValue':'from-voicemail','unique':'contest_mailbox'},'mailbox':{'type':Sequelize[_0x6cca('0x2')],'defaultValue':'','allowNull':![],'unique':'contest_mailbox'},'password':{'type':Sequelize['STRING']},'fullname':{'type':Sequelize[_0x6cca('0x2')]},'email':{'type':Sequelize['STRING'],'validate':{'isEmail':!![]},'set':function(_0x3c1cc0){this[_0x6cca('0x3')](_0x6cca('0x4'),typeof _0x3c1cc0===_0x6cca('0x5')&&_0x3c1cc0[_0x6cca('0x6')]()?_0x3c1cc0[_0x6cca('0x6')]():null);}},'pager':{'type':Sequelize['STRING']},'tz':{'type':Sequelize['STRING'],'defaultValue':_0x6cca('0x7')},'attach':{'type':Sequelize[_0x6cca('0x8')]('yes','no'),'defaultValue':_0x6cca('0x9'),'allowNull':![]},'saycid':{'type':Sequelize[_0x6cca('0x8')](_0x6cca('0x9'),'no'),'defaultValue':'yes','allowNull':![]},'dialout':{'type':Sequelize[_0x6cca('0x2')]},'callback':{'type':Sequelize[_0x6cca('0x2')]},'review':{'type':Sequelize[_0x6cca('0x8')](_0x6cca('0x9'),'no'),'defaultValue':'no','allowNull':![]},'operator':{'type':Sequelize['ENUM'](_0x6cca('0x9'),'no'),'defaultValue':'no','allowNull':![]},'envelope':{'type':Sequelize[_0x6cca('0x8')](_0x6cca('0x9'),'no'),'defaultValue':'no','allowNull':![]},'sayduration':{'type':Sequelize[_0x6cca('0x8')](_0x6cca('0x9'),'no'),'defaultValue':'no','allowNull':![]},'saydurationm':{'type':_0x6cca('0xa'),'defaultValue':0x1,'allowNull':![]},'sendvoicemail':{'type':Sequelize[_0x6cca('0x8')](_0x6cca('0x9'),'no'),'defaultValue':'no','allowNull':![]},'delete':{'type':Sequelize[_0x6cca('0x8')]('yes','no'),'defaultValue':'no','allowNull':![]},'nextaftercmd':{'type':Sequelize['ENUM'](_0x6cca('0x9'),'no'),'defaultValue':_0x6cca('0x9'),'allowNull':![]},'forcename':{'type':Sequelize[_0x6cca('0x8')]('yes','no'),'defaultValue':'no','allowNull':![]},'forcegreetings':{'type':Sequelize['ENUM'](_0x6cca('0x9'),'no'),'defaultValue':'no','allowNull':![]},'hidefromdir':{'type':Sequelize[_0x6cca('0x8')](_0x6cca('0x9'),'no'),'defaultValue':_0x6cca('0x9'),'allowNull':![]},'stamp':{'type':_0x6cca('0xb')},'emailsubject':{'type':Sequelize[_0x6cca('0x2')]},'emailbody':{'type':Sequelize[_0x6cca('0x2')]},'maxsecs':{'type':Sequelize[_0x6cca('0xc')](0xff),'defaultValue':0xb4,'allowNull':![]},'maxmsg':{'type':Sequelize[_0x6cca('0xc')](0xff),'defaultValue':0x64,'allowNull':![]},'name':{'type':Sequelize[_0x6cca('0xd')],'get':function(){return this[_0x6cca('0xe')](_0x6cca('0xf'))+_0x6cca('0x10')+this[_0x6cca('0xe')]('mailbox');}}};
\ No newline at end of file
+var _0xaf96=['TINYINT(4)','INTEGER','VIRTUAL','fullname','\x20-\x20','mailbox','exports','STRING','from-voicemail','setDataValue','string','trim','central','ENUM','yes'];(function(_0x211f4e,_0x5126c4){var _0x440a89=function(_0x134891){while(--_0x134891){_0x211f4e['push'](_0x211f4e['shift']());}};_0x440a89(++_0x5126c4);}(_0xaf96,0xab));var _0x6af9=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xaf96[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require('sequelize');module[_0x6af9('0x0')]={'customer_id':{'type':Sequelize[_0x6af9('0x1')]},'context':{'type':Sequelize[_0x6af9('0x1')],'defaultValue':_0x6af9('0x2'),'unique':'contest_mailbox'},'mailbox':{'type':Sequelize['STRING'],'defaultValue':'','allowNull':![],'unique':'contest_mailbox'},'password':{'type':Sequelize[_0x6af9('0x1')]},'fullname':{'type':Sequelize[_0x6af9('0x1')]},'email':{'type':Sequelize[_0x6af9('0x1')],'validate':{'isEmail':!![]},'set':function(_0x4d9575){this[_0x6af9('0x3')]('email',typeof _0x4d9575===_0x6af9('0x4')&&_0x4d9575[_0x6af9('0x5')]()?_0x4d9575[_0x6af9('0x5')]():null);}},'pager':{'type':Sequelize['STRING']},'tz':{'type':Sequelize[_0x6af9('0x1')],'defaultValue':_0x6af9('0x6')},'attach':{'type':Sequelize[_0x6af9('0x7')](_0x6af9('0x8'),'no'),'defaultValue':_0x6af9('0x8'),'allowNull':![]},'saycid':{'type':Sequelize[_0x6af9('0x7')]('yes','no'),'defaultValue':_0x6af9('0x8'),'allowNull':![]},'dialout':{'type':Sequelize[_0x6af9('0x1')]},'callback':{'type':Sequelize['STRING']},'review':{'type':Sequelize[_0x6af9('0x7')](_0x6af9('0x8'),'no'),'defaultValue':'no','allowNull':![]},'operator':{'type':Sequelize[_0x6af9('0x7')]('yes','no'),'defaultValue':'no','allowNull':![]},'envelope':{'type':Sequelize[_0x6af9('0x7')]('yes','no'),'defaultValue':'no','allowNull':![]},'sayduration':{'type':Sequelize[_0x6af9('0x7')](_0x6af9('0x8'),'no'),'defaultValue':'no','allowNull':![]},'saydurationm':{'type':_0x6af9('0x9'),'defaultValue':0x1,'allowNull':![]},'sendvoicemail':{'type':Sequelize['ENUM'](_0x6af9('0x8'),'no'),'defaultValue':'no','allowNull':![]},'delete':{'type':Sequelize[_0x6af9('0x7')](_0x6af9('0x8'),'no'),'defaultValue':'no','allowNull':![]},'nextaftercmd':{'type':Sequelize[_0x6af9('0x7')](_0x6af9('0x8'),'no'),'defaultValue':'yes','allowNull':![]},'forcename':{'type':Sequelize[_0x6af9('0x7')]('yes','no'),'defaultValue':'no','allowNull':![]},'forcegreetings':{'type':Sequelize[_0x6af9('0x7')](_0x6af9('0x8'),'no'),'defaultValue':'no','allowNull':![]},'hidefromdir':{'type':Sequelize[_0x6af9('0x7')](_0x6af9('0x8'),'no'),'defaultValue':_0x6af9('0x8'),'allowNull':![]},'stamp':{'type':'TIMESTAMP'},'emailsubject':{'type':Sequelize[_0x6af9('0x1')]},'emailbody':{'type':Sequelize[_0x6af9('0x1')]},'maxsecs':{'type':Sequelize[_0x6af9('0xa')](0xff),'defaultValue':0xb4,'allowNull':![]},'maxmsg':{'type':Sequelize['INTEGER'](0xff),'defaultValue':0x64,'allowNull':![]},'name':{'type':Sequelize[_0x6af9('0xb')],'get':function(){return this['getDataValue'](_0x6af9('0xc'))+_0x6af9('0xd')+this['getDataValue'](_0x6af9('0xe'));}}};
\ No newline at end of file
index afbbf84..779121a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x406d=['Content-Range','save','then','destroy','get','Voicemails','UserProfileResource','error','send','index','VoiceMail','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','user','UserProfileSection','userProfileId','name','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','getMessages','findOne','nolimit','mailbox','findAndCountAll','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set'];(function(_0x81e39d,_0x4c3934){var _0x548fbb=function(_0x1adda5){while(--_0x1adda5){_0x81e39d['push'](_0x81e39d['shift']());}};_0x548fbb(++_0x4c3934);}(_0x406d,0x135));var _0xd406=function(_0x3c1669,_0x192e58){_0x3c1669=_0x3c1669-0x0;var _0x5e325f=_0x406d[_0x3c1669];return _0x5e325f;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xd406('0x0'));var zipdir=require(_0xd406('0x1'));var jsonpatch=require(_0xd406('0x2'));var rp=require(_0xd406('0x3'));var moment=require(_0xd406('0x4'));var BPromise=require(_0xd406('0x5'));var Mustache=require('mustache');var util=require(_0xd406('0x6'));var path=require(_0xd406('0x7'));var sox=require(_0xd406('0x8'));var csv=require(_0xd406('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xd406('0xa'));var squel=require(_0xd406('0xb'));var crypto=require(_0xd406('0xc'));var jsforce=require(_0xd406('0xd'));var deskjs=require(_0xd406('0xe'));var toCsv=require(_0xd406('0x9'));var querystring=require(_0xd406('0xf'));var Papa=require(_0xd406('0x10'));var Redis=require(_0xd406('0x11'));var authService=require(_0xd406('0x12'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0xd406('0x13'));var logger=require(_0xd406('0x14'))('api');var utils=require(_0xd406('0x15'));var config=require(_0xd406('0x16'));var db=require(_0xd406('0x17'))['db'];function respondWithStatusCode(_0x483e3f,_0x3fe494){_0x3fe494=_0x3fe494||0xcc;return function(_0x42d29a){if(_0x42d29a){return _0x483e3f[_0xd406('0x18')](_0x3fe494);}return _0x483e3f[_0xd406('0x19')](_0x3fe494)[_0xd406('0x1a')]();};}function respondWithResult(_0x4b53f7,_0x42f644){_0x42f644=_0x42f644||0xc8;return function(_0x13722f){if(_0x13722f){return _0x4b53f7[_0xd406('0x19')](_0x42f644)['json'](_0x13722f);}};}function respondWithFilteredResult(_0x210d36,_0x3483ac){return function(_0x3dee91){if(_0x3dee91){var _0x1fe050=_0x3dee91[_0xd406('0x1b')],_0x281f35=_0x3483ac[_0xd406('0x1c')],_0x4d4017=_0x3483ac[_0xd406('0x1c')]+_0x3483ac[_0xd406('0x1d')],_0x4d844d;if(_0x4d4017>=_0x1fe050){_0x4d4017=_0x1fe050;_0x4d844d=0xc8;}else{_0x4d844d=0xce;}_0x210d36['status'](_0x4d844d);return _0x210d36[_0xd406('0x1e')](_0xd406('0x1f'),_0x281f35+'-'+_0x4d4017+'/'+_0x1fe050)['json'](_0x3dee91);}return null;};}function patchUpdates(_0x4d950b){return function(_0xc85904){try{jsonpatch['apply'](_0xc85904,_0x4d950b,!![]);}catch(_0xfe14d){return BPromise['reject'](_0xfe14d);}return _0xc85904[_0xd406('0x20')]();};}function saveUpdates(_0x2deeaf,_0x34725c){return function(_0x202683){if(_0x202683){return _0x202683['update'](_0x2deeaf)[_0xd406('0x21')](function(_0x29fb2d){return _0x29fb2d;});}return null;};}function removeEntity(_0x3cafa0,_0x2af77e){return function(_0x409118){if(_0x409118){return _0x409118[_0xd406('0x22')]()[_0xd406('0x21')](function(){var _0x49473b=_0x409118[_0xd406('0x23')]({'plain':!![]});var _0x1505a8=_0xd406('0x24');return db[_0xd406('0x25')][_0xd406('0x22')]({'where':{'type':_0x1505a8,'resourceId':_0x49473b['id']}})[_0xd406('0x21')](function(){return _0x409118;});})[_0xd406('0x21')](function(){_0x3cafa0[_0xd406('0x19')](0xcc)[_0xd406('0x1a')]();});}};}function handleEntityNotFound(_0x2f429c,_0x425565){return function(_0x594d6d){if(!_0x594d6d){_0x2f429c[_0xd406('0x18')](0x194);}return _0x594d6d;};}function handleError(_0xdcc522,_0x1164db){_0x1164db=_0x1164db||0x1f4;return function(_0x4743a4){logger[_0xd406('0x26')](_0x4743a4['stack']);if(_0x4743a4['name']){delete _0x4743a4['name'];}_0xdcc522['status'](_0x1164db)[_0xd406('0x27')](_0x4743a4);};}exports[_0xd406('0x28')]=function(_0x471062,_0xb29fb9){var _0x43ed51={},_0x5636ca={},_0x47440e={'count':0x0,'rows':[]};var _0x6a5080=db[_0xd406('0x29')][_0xd406('0x2a')];_0x5636ca['model']=_[_0xd406('0x2b')](_0x6a5080);_0x5636ca['query']=_[_0xd406('0x2b')](_0x471062[_0xd406('0x2c')]);_0x5636ca[_0xd406('0x2d')]=_[_0xd406('0x2e')](_0x5636ca[_0xd406('0x2f')],_0x5636ca[_0xd406('0x2c')]);_0x43ed51[_0xd406('0x30')]=_[_0xd406('0x2e')](_0x5636ca[_0xd406('0x2f')],qs[_0xd406('0x31')](_0x471062[_0xd406('0x2c')]['fields']));_0x43ed51[_0xd406('0x30')]=_0x43ed51['attributes'][_0xd406('0x32')]?_0x43ed51[_0xd406('0x30')]:_0x5636ca[_0xd406('0x2f')];if(!_0x471062['query'][_0xd406('0x33')]('nolimit')){_0x43ed51[_0xd406('0x1d')]=qs['limit'](_0x471062[_0xd406('0x2c')]['limit']);_0x43ed51[_0xd406('0x1c')]=qs[_0xd406('0x1c')](_0x471062[_0xd406('0x2c')][_0xd406('0x1c')]);}_0x43ed51[_0xd406('0x34')]=qs[_0xd406('0x35')](_0x471062[_0xd406('0x2c')][_0xd406('0x35')]);_0x43ed51[_0xd406('0x36')]=qs['filters'](_[_0xd406('0x37')](_0x471062[_0xd406('0x2c')],_0x5636ca[_0xd406('0x2d')]));if(_0x471062['query'][_0xd406('0x38')]){_0x43ed51[_0xd406('0x36')]=_[_0xd406('0x39')](_0x43ed51[_0xd406('0x36')],{'$or':_[_0xd406('0x3a')](_0x6a5080,function(_0x2c63e2){if(_0x2c63e2[_0xd406('0x3b')][_0xd406('0x3c')]!==_0xd406('0x3d')){var _0x18cbe3={};_0x18cbe3[_0x2c63e2[_0xd406('0x3e')]]={'$like':'%'+_0x471062['query']['filter']+'%'};return _0x18cbe3;}})});}_0x43ed51=_[_0xd406('0x39')]({},_0x43ed51,_0x471062[_0xd406('0x3f')]);var _0x8b5391={'where':_0x43ed51[_0xd406('0x36')]};return db[_0xd406('0x29')][_0xd406('0x1b')](_0x8b5391)[_0xd406('0x21')](function(_0x2d13ab){_0x47440e[_0xd406('0x1b')]=_0x2d13ab;if(_0x471062[_0xd406('0x2c')][_0xd406('0x40')]){_0x43ed51[_0xd406('0x41')]=[{'all':!![]}];}return db[_0xd406('0x29')][_0xd406('0x42')](_0x43ed51);})[_0xd406('0x21')](function(_0x1586fd){_0x47440e[_0xd406('0x43')]=_0x1586fd;return _0x47440e;})[_0xd406('0x21')](respondWithFilteredResult(_0xb29fb9,_0x43ed51))[_0xd406('0x44')](handleError(_0xb29fb9,null));};exports[_0xd406('0x45')]=function(_0x423d0f,_0x4b7aab){var _0x20a957={'raw':!![],'where':{'id':_0x423d0f[_0xd406('0x46')]['id']}},_0x276a57={};_0x276a57['model']=_[_0xd406('0x2b')](db[_0xd406('0x29')][_0xd406('0x2a')]);_0x276a57['query']=_[_0xd406('0x2b')](_0x423d0f['query']);_0x276a57['filters']=_[_0xd406('0x2e')](_0x276a57[_0xd406('0x2f')],_0x276a57[_0xd406('0x2c')]);_0x20a957['attributes']=_['intersection'](_0x276a57[_0xd406('0x2f')],qs['fields'](_0x423d0f[_0xd406('0x2c')][_0xd406('0x31')]));_0x20a957[_0xd406('0x30')]=_0x20a957[_0xd406('0x30')]['length']?_0x20a957[_0xd406('0x30')]:_0x276a57[_0xd406('0x2f')];if(_0x423d0f['query'][_0xd406('0x40')]){_0x20a957[_0xd406('0x41')]=[{'all':!![]}];}_0x20a957=_[_0xd406('0x39')]({},_0x20a957,_0x423d0f[_0xd406('0x3f')]);return db[_0xd406('0x29')][_0xd406('0x47')](_0x20a957)[_0xd406('0x21')](handleEntityNotFound(_0x4b7aab,null))[_0xd406('0x21')](respondWithResult(_0x4b7aab,null))[_0xd406('0x44')](handleError(_0x4b7aab,null));};exports[_0xd406('0x48')]=function(_0x583705,_0x36f47f){return db[_0xd406('0x29')]['create'](_0x583705[_0xd406('0x49')],{})[_0xd406('0x21')](function(_0x342b44){var _0x5a3c8f=_0x583705[_0xd406('0x4a')][_0xd406('0x23')]({'plain':!![]});if(!_0x5a3c8f)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x5a3c8f['role']===_0xd406('0x4a')){var _0x5cff19=_0x342b44[_0xd406('0x23')]({'plain':!![]});var _0x349cd0=_0xd406('0x24');return db[_0xd406('0x4b')][_0xd406('0x47')]({'where':{'name':_0x349cd0,'userProfileId':_0x5a3c8f[_0xd406('0x4c')]},'raw':!![]})[_0xd406('0x21')](function(_0x16b41e){if(_0x16b41e&&_0x16b41e['autoAssociation']===0x0){return db[_0xd406('0x25')]['create']({'name':_0x5cff19[_0xd406('0x4d')],'resourceId':_0x5cff19['id'],'type':_0x16b41e[_0xd406('0x4d')],'sectionId':_0x16b41e['id']},{})[_0xd406('0x21')](function(){return _0x342b44;});}else{return _0x342b44;}})['catch'](function(_0x48ccae){logger[_0xd406('0x26')](_0xd406('0x4e'),_0x48ccae);throw _0x48ccae;});}return _0x342b44;})[_0xd406('0x21')](respondWithResult(_0x36f47f,0xc9))[_0xd406('0x44')](handleError(_0x36f47f,null));};exports[_0xd406('0x4f')]=function(_0x3e92bb,_0x814ce0){if(_0x3e92bb[_0xd406('0x49')]['id']){delete _0x3e92bb[_0xd406('0x49')]['id'];}return db['VoiceMail'][_0xd406('0x47')]({'where':{'id':_0x3e92bb[_0xd406('0x46')]['id']}})['then'](handleEntityNotFound(_0x814ce0,null))[_0xd406('0x21')](saveUpdates(_0x3e92bb[_0xd406('0x49')],null))[_0xd406('0x21')](respondWithResult(_0x814ce0,null))[_0xd406('0x44')](handleError(_0x814ce0,null));};exports['destroy']=function(_0x111930,_0xde0a1b){return db[_0xd406('0x29')][_0xd406('0x47')]({'where':{'id':_0x111930[_0xd406('0x46')]['id']}})[_0xd406('0x21')](handleEntityNotFound(_0xde0a1b,null))[_0xd406('0x21')](removeEntity(_0xde0a1b,null))[_0xd406('0x44')](handleError(_0xde0a1b,null));};exports[_0xd406('0x50')]=function(_0x27be00,_0x4b9b3d,_0x128975){return db[_0xd406('0x29')][_0xd406('0x51')]({'where':{'id':_0x27be00[_0xd406('0x46')]['id']}})[_0xd406('0x21')](handleEntityNotFound(_0x4b9b3d,null))[_0xd406('0x21')](function(_0x271349){var _0x3480b5;var _0x3730ef={},_0x117e6c={};_0x117e6c[_0xd406('0x2f')]=_[_0xd406('0x2b')](db['VoiceMailMessage'][_0xd406('0x2a')]);_0x117e6c[_0xd406('0x2c')]=_[_0xd406('0x2b')](_0x27be00[_0xd406('0x2c')]);_0x117e6c['filters']=_[_0xd406('0x2e')](_0x117e6c[_0xd406('0x2f')],_0x117e6c[_0xd406('0x2c')]);_0x3730ef[_0xd406('0x30')]=_[_0xd406('0x2e')](_0x117e6c['model'],qs[_0xd406('0x31')](_0x27be00[_0xd406('0x2c')]['fields']));_0x3730ef[_0xd406('0x30')]=_0x3730ef['attributes']['length']?_0x3730ef[_0xd406('0x30')]:_0x117e6c[_0xd406('0x2f')];if(!_0x27be00['query']['hasOwnProperty'](_0xd406('0x52'))){_0x3730ef['limit']=qs[_0xd406('0x1d')](_0x27be00[_0xd406('0x2c')][_0xd406('0x1d')]);_0x3730ef['offset']=qs['offset'](_0x27be00['query']['offset']);}_0x3730ef[_0xd406('0x34')]=qs[_0xd406('0x35')](_0x27be00['query']['sort']);_0x3730ef[_0xd406('0x36')]=qs[_0xd406('0x2d')](_['pick'](_0x27be00[_0xd406('0x2c')],_0x117e6c[_0xd406('0x2d')]));if(_0x27be00[_0xd406('0x2c')][_0xd406('0x38')]){_0x3730ef[_0xd406('0x36')]=_['merge'](_0x3730ef[_0xd406('0x36')],{'$or':_[_0xd406('0x3a')](_0x3730ef[_0xd406('0x30')],function(_0x4e6fd4){var _0x2acf91={};_0x2acf91[_0x4e6fd4]={'$like':'%'+_0x27be00[_0xd406('0x2c')][_0xd406('0x38')]+'%'};return _0x2acf91;})});}_0x3730ef[_0xd406('0x36')]=_['merge'](_0x3730ef['where'],{'mailboxuser':_0x271349[_0xd406('0x53')]});_0x3730ef=_[_0xd406('0x39')]({},_0x3730ef,_0x27be00[_0xd406('0x3f')]);return db['VoiceMailMessage'][_0xd406('0x54')](_0x3730ef)['then'](respondWithFilteredResult(_0x4b9b3d,_0x3730ef));})[_0xd406('0x44')](handleError(_0x4b9b3d,null));};
\ No newline at end of file
+var _0xc364=['apply','save','update','then','get','UserProfileResource','destroy','stack','name','send','index','VoiceMail','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','filters','pick','filter','where','map','key','VIRTUAL','field','merge','includeAll','findAll','catch','show','params','include','options','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getMessages','findOne','VoiceMailMessage','order','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','ioredis','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','count','offset','limit','set','json'];(function(_0x1203f,_0x554bbc){var _0x365f0a=function(_0x3531d0){while(--_0x3531d0){_0x1203f['push'](_0x1203f['shift']());}};_0x365f0a(++_0x554bbc);}(_0xc364,0x1dd));var _0x4c36=function(_0x1b3463,_0x43e1f5){_0x1b3463=_0x1b3463-0x0;var _0x29d544=_0xc364[_0x1b3463];return _0x29d544;};'use strict';var pdf=require(_0x4c36('0x0'));var emlformat=require(_0x4c36('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x4c36('0x2'));var jsonpatch=require(_0x4c36('0x3'));var rp=require(_0x4c36('0x4'));var moment=require(_0x4c36('0x5'));var BPromise=require(_0x4c36('0x6'));var Mustache=require('mustache');var util=require(_0x4c36('0x7'));var path=require(_0x4c36('0x8'));var sox=require(_0x4c36('0x9'));var csv=require('to-csv');var ejs=require(_0x4c36('0xa'));var fs=require('fs');var _=require(_0x4c36('0xb'));var squel=require(_0x4c36('0xc'));var crypto=require(_0x4c36('0xd'));var jsforce=require(_0x4c36('0xe'));var deskjs=require(_0x4c36('0xf'));var toCsv=require(_0x4c36('0x10'));var querystring=require(_0x4c36('0x11'));var Papa=require('papaparse');var Redis=require(_0x4c36('0x12'));var authService=require(_0x4c36('0x13'));var qs=require('../../components/parsers/qs');var hardwareService=require(_0x4c36('0x14'));var logger=require(_0x4c36('0x15'))(_0x4c36('0x16'));var utils=require(_0x4c36('0x17'));var config=require(_0x4c36('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2692cb,_0x213dd3){_0x213dd3=_0x213dd3||0xcc;return function(_0x177094){if(_0x177094){return _0x2692cb[_0x4c36('0x19')](_0x213dd3);}return _0x2692cb[_0x4c36('0x1a')](_0x213dd3)[_0x4c36('0x1b')]();};}function respondWithResult(_0x3f38ac,_0x54848b){_0x54848b=_0x54848b||0xc8;return function(_0x287785){if(_0x287785){return _0x3f38ac['status'](_0x54848b)['json'](_0x287785);}};}function respondWithFilteredResult(_0x3b83de,_0xe6223f){return function(_0x2ca14c){if(_0x2ca14c){var _0x40ec4e=_0x2ca14c[_0x4c36('0x1c')],_0x36bf82=_0xe6223f[_0x4c36('0x1d')],_0x128e9d=_0xe6223f[_0x4c36('0x1d')]+_0xe6223f[_0x4c36('0x1e')],_0x2839cf;if(_0x128e9d>=_0x40ec4e){_0x128e9d=_0x40ec4e;_0x2839cf=0xc8;}else{_0x2839cf=0xce;}_0x3b83de[_0x4c36('0x1a')](_0x2839cf);return _0x3b83de[_0x4c36('0x1f')]('Content-Range',_0x36bf82+'-'+_0x128e9d+'/'+_0x40ec4e)[_0x4c36('0x20')](_0x2ca14c);}return null;};}function patchUpdates(_0x46f8f3){return function(_0x3bcfd9){try{jsonpatch[_0x4c36('0x21')](_0x3bcfd9,_0x46f8f3,!![]);}catch(_0x1a828e){return BPromise['reject'](_0x1a828e);}return _0x3bcfd9[_0x4c36('0x22')]();};}function saveUpdates(_0x433562,_0x126b01){return function(_0x2744b9){if(_0x2744b9){return _0x2744b9[_0x4c36('0x23')](_0x433562)[_0x4c36('0x24')](function(_0x38bf04){return _0x38bf04;});}return null;};}function removeEntity(_0xcc169c,_0x1822c7){return function(_0xd9c5e9){if(_0xd9c5e9){return _0xd9c5e9['destroy']()[_0x4c36('0x24')](function(){var _0x945a64=_0xd9c5e9[_0x4c36('0x25')]({'plain':!![]});var _0x81e020='Voicemails';return db[_0x4c36('0x26')][_0x4c36('0x27')]({'where':{'type':_0x81e020,'resourceId':_0x945a64['id']}})['then'](function(){return _0xd9c5e9;});})[_0x4c36('0x24')](function(){_0xcc169c[_0x4c36('0x1a')](0xcc)[_0x4c36('0x1b')]();});}};}function handleEntityNotFound(_0x162e31,_0x5c1a2c){return function(_0x4d7038){if(!_0x4d7038){_0x162e31[_0x4c36('0x19')](0x194);}return _0x4d7038;};}function handleError(_0x20e2b4,_0x1132f2){_0x1132f2=_0x1132f2||0x1f4;return function(_0x3e4df2){logger['error'](_0x3e4df2[_0x4c36('0x28')]);if(_0x3e4df2[_0x4c36('0x29')]){delete _0x3e4df2[_0x4c36('0x29')];}_0x20e2b4[_0x4c36('0x1a')](_0x1132f2)[_0x4c36('0x2a')](_0x3e4df2);};}exports[_0x4c36('0x2b')]=function(_0x37d556,_0x3319f7){var _0x1fe951={},_0x34c1dd={},_0x3f4e8f={'count':0x0,'rows':[]};var _0xfd4299=db[_0x4c36('0x2c')][_0x4c36('0x2d')];_0x34c1dd[_0x4c36('0x2e')]=_[_0x4c36('0x2f')](_0xfd4299);_0x34c1dd[_0x4c36('0x30')]=_[_0x4c36('0x2f')](_0x37d556['query']);_0x34c1dd['filters']=_[_0x4c36('0x31')](_0x34c1dd['model'],_0x34c1dd[_0x4c36('0x30')]);_0x1fe951[_0x4c36('0x32')]=_['intersection'](_0x34c1dd[_0x4c36('0x2e')],qs[_0x4c36('0x33')](_0x37d556[_0x4c36('0x30')][_0x4c36('0x33')]));_0x1fe951['attributes']=_0x1fe951[_0x4c36('0x32')][_0x4c36('0x34')]?_0x1fe951[_0x4c36('0x32')]:_0x34c1dd[_0x4c36('0x2e')];if(!_0x37d556[_0x4c36('0x30')][_0x4c36('0x35')](_0x4c36('0x36'))){_0x1fe951[_0x4c36('0x1e')]=qs[_0x4c36('0x1e')](_0x37d556[_0x4c36('0x30')][_0x4c36('0x1e')]);_0x1fe951[_0x4c36('0x1d')]=qs['offset'](_0x37d556[_0x4c36('0x30')]['offset']);}_0x1fe951['order']=qs[_0x4c36('0x37')](_0x37d556['query']['sort']);_0x1fe951['where']=qs[_0x4c36('0x38')](_[_0x4c36('0x39')](_0x37d556[_0x4c36('0x30')],_0x34c1dd['filters']));if(_0x37d556['query'][_0x4c36('0x3a')]){_0x1fe951['where']=_['merge'](_0x1fe951[_0x4c36('0x3b')],{'$or':_[_0x4c36('0x3c')](_0xfd4299,function(_0x41ea0e){if(_0x41ea0e['type'][_0x4c36('0x3d')]!==_0x4c36('0x3e')){var _0x271f97={};_0x271f97[_0x41ea0e[_0x4c36('0x3f')]]={'$like':'%'+_0x37d556[_0x4c36('0x30')][_0x4c36('0x3a')]+'%'};return _0x271f97;}})});}_0x1fe951=_[_0x4c36('0x40')]({},_0x1fe951,_0x37d556['options']);var _0x564928={'where':_0x1fe951[_0x4c36('0x3b')]};return db[_0x4c36('0x2c')][_0x4c36('0x1c')](_0x564928)[_0x4c36('0x24')](function(_0x50a526){_0x3f4e8f[_0x4c36('0x1c')]=_0x50a526;if(_0x37d556[_0x4c36('0x30')][_0x4c36('0x41')]){_0x1fe951['include']=[{'all':!![]}];}return db['VoiceMail'][_0x4c36('0x42')](_0x1fe951);})[_0x4c36('0x24')](function(_0x5052b2){_0x3f4e8f['rows']=_0x5052b2;return _0x3f4e8f;})[_0x4c36('0x24')](respondWithFilteredResult(_0x3319f7,_0x1fe951))[_0x4c36('0x43')](handleError(_0x3319f7,null));};exports[_0x4c36('0x44')]=function(_0x1b5d6a,_0x1ee734){var _0x266cd4={'raw':!![],'where':{'id':_0x1b5d6a[_0x4c36('0x45')]['id']}},_0x4a5939={};_0x4a5939['model']=_[_0x4c36('0x2f')](db[_0x4c36('0x2c')][_0x4c36('0x2d')]);_0x4a5939['query']=_[_0x4c36('0x2f')](_0x1b5d6a[_0x4c36('0x30')]);_0x4a5939['filters']=_['intersection'](_0x4a5939['model'],_0x4a5939[_0x4c36('0x30')]);_0x266cd4['attributes']=_[_0x4c36('0x31')](_0x4a5939[_0x4c36('0x2e')],qs['fields'](_0x1b5d6a[_0x4c36('0x30')][_0x4c36('0x33')]));_0x266cd4['attributes']=_0x266cd4[_0x4c36('0x32')][_0x4c36('0x34')]?_0x266cd4[_0x4c36('0x32')]:_0x4a5939[_0x4c36('0x2e')];if(_0x1b5d6a[_0x4c36('0x30')][_0x4c36('0x41')]){_0x266cd4[_0x4c36('0x46')]=[{'all':!![]}];}_0x266cd4=_[_0x4c36('0x40')]({},_0x266cd4,_0x1b5d6a[_0x4c36('0x47')]);return db[_0x4c36('0x2c')][_0x4c36('0x48')](_0x266cd4)[_0x4c36('0x24')](handleEntityNotFound(_0x1ee734,null))[_0x4c36('0x24')](respondWithResult(_0x1ee734,null))[_0x4c36('0x43')](handleError(_0x1ee734,null));};exports[_0x4c36('0x49')]=function(_0x1e1fa8,_0x24299b){return db[_0x4c36('0x2c')][_0x4c36('0x49')](_0x1e1fa8[_0x4c36('0x4a')],{})[_0x4c36('0x24')](function(_0x2aa042){var _0x5bd89f=_0x1e1fa8['user'][_0x4c36('0x25')]({'plain':!![]});if(!_0x5bd89f)throw new Error(_0x4c36('0x4b'));if(_0x5bd89f[_0x4c36('0x4c')]===_0x4c36('0x4d')){var _0x1d4195=_0x2aa042[_0x4c36('0x25')]({'plain':!![]});var _0x3f7784='Voicemails';return db[_0x4c36('0x4e')][_0x4c36('0x48')]({'where':{'name':_0x3f7784,'userProfileId':_0x5bd89f[_0x4c36('0x4f')]},'raw':!![]})['then'](function(_0x56924e){if(_0x56924e&&_0x56924e['autoAssociation']===0x0){return db['UserProfileResource'][_0x4c36('0x49')]({'name':_0x1d4195['name'],'resourceId':_0x1d4195['id'],'type':_0x56924e['name'],'sectionId':_0x56924e['id']},{})[_0x4c36('0x24')](function(){return _0x2aa042;});}else{return _0x2aa042;}})[_0x4c36('0x43')](function(_0x2a4c06){logger['error'](_0x4c36('0x50'),_0x2a4c06);throw _0x2a4c06;});}return _0x2aa042;})['then'](respondWithResult(_0x24299b,0xc9))[_0x4c36('0x43')](handleError(_0x24299b,null));};exports[_0x4c36('0x23')]=function(_0x15dd48,_0x41dae5){if(_0x15dd48[_0x4c36('0x4a')]['id']){delete _0x15dd48[_0x4c36('0x4a')]['id'];}return db[_0x4c36('0x2c')][_0x4c36('0x48')]({'where':{'id':_0x15dd48[_0x4c36('0x45')]['id']}})[_0x4c36('0x24')](handleEntityNotFound(_0x41dae5,null))[_0x4c36('0x24')](saveUpdates(_0x15dd48[_0x4c36('0x4a')],null))[_0x4c36('0x24')](respondWithResult(_0x41dae5,null))[_0x4c36('0x43')](handleError(_0x41dae5,null));};exports[_0x4c36('0x27')]=function(_0xd693c6,_0x4d2352){return db[_0x4c36('0x2c')]['find']({'where':{'id':_0xd693c6[_0x4c36('0x45')]['id']}})[_0x4c36('0x24')](handleEntityNotFound(_0x4d2352,null))[_0x4c36('0x24')](removeEntity(_0x4d2352,null))[_0x4c36('0x43')](handleError(_0x4d2352,null));};exports[_0x4c36('0x51')]=function(_0x54522b,_0x1b9c66,_0x4fed03){return db[_0x4c36('0x2c')][_0x4c36('0x52')]({'where':{'id':_0x54522b['params']['id']}})['then'](handleEntityNotFound(_0x1b9c66,null))['then'](function(_0x54fd12){var _0x801931;var _0x1a9bee={},_0x1cc414={};_0x1cc414[_0x4c36('0x2e')]=_['keys'](db[_0x4c36('0x53')][_0x4c36('0x2d')]);_0x1cc414[_0x4c36('0x30')]=_[_0x4c36('0x2f')](_0x54522b[_0x4c36('0x30')]);_0x1cc414['filters']=_[_0x4c36('0x31')](_0x1cc414[_0x4c36('0x2e')],_0x1cc414[_0x4c36('0x30')]);_0x1a9bee[_0x4c36('0x32')]=_[_0x4c36('0x31')](_0x1cc414[_0x4c36('0x2e')],qs['fields'](_0x54522b[_0x4c36('0x30')][_0x4c36('0x33')]));_0x1a9bee[_0x4c36('0x32')]=_0x1a9bee[_0x4c36('0x32')][_0x4c36('0x34')]?_0x1a9bee[_0x4c36('0x32')]:_0x1cc414[_0x4c36('0x2e')];if(!_0x54522b[_0x4c36('0x30')][_0x4c36('0x35')]('nolimit')){_0x1a9bee[_0x4c36('0x1e')]=qs['limit'](_0x54522b[_0x4c36('0x30')][_0x4c36('0x1e')]);_0x1a9bee[_0x4c36('0x1d')]=qs[_0x4c36('0x1d')](_0x54522b['query'][_0x4c36('0x1d')]);}_0x1a9bee[_0x4c36('0x54')]=qs[_0x4c36('0x37')](_0x54522b['query']['sort']);_0x1a9bee['where']=qs['filters'](_[_0x4c36('0x39')](_0x54522b[_0x4c36('0x30')],_0x1cc414[_0x4c36('0x38')]));if(_0x54522b[_0x4c36('0x30')][_0x4c36('0x3a')]){_0x1a9bee[_0x4c36('0x3b')]=_[_0x4c36('0x40')](_0x1a9bee[_0x4c36('0x3b')],{'$or':_[_0x4c36('0x3c')](_0x1a9bee['attributes'],function(_0x59ae94){var _0x344a01={};_0x344a01[_0x59ae94]={'$like':'%'+_0x54522b[_0x4c36('0x30')][_0x4c36('0x3a')]+'%'};return _0x344a01;})});}_0x1a9bee[_0x4c36('0x3b')]=_[_0x4c36('0x40')](_0x1a9bee['where'],{'mailboxuser':_0x54fd12['mailbox']});_0x1a9bee=_[_0x4c36('0x40')]({},_0x1a9bee,_0x54522b['options']);return db[_0x4c36('0x53')]['findAndCountAll'](_0x1a9bee)[_0x4c36('0x24')](respondWithFilteredResult(_0x1b9c66,_0x1a9bee));})['catch'](handleError(_0x1b9c66,null));};
\ No newline at end of file
index f8e8321..daebc1a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf401=['../../config/logger','moment','bluebird','../../config/environment','./voiceMail.attributes','exports','define','voice_voicemail','mailbox_context','mailbox','context','util'];(function(_0x1f44bb,_0x30bf74){var _0x321b75=function(_0x962c8d){while(--_0x962c8d){_0x1f44bb['push'](_0x1f44bb['shift']());}};_0x321b75(++_0x30bf74);}(_0xf401,0x8f));var _0x1f40=function(_0x4c6647,_0x23685b){_0x4c6647=_0x4c6647-0x0;var _0x13a86d=_0xf401[_0x4c6647];return _0x13a86d;};'use strict';var _=require('lodash');var util=require(_0x1f40('0x0'));var logger=require(_0x1f40('0x1'))('api');var moment=require(_0x1f40('0x2'));var BPromise=require(_0x1f40('0x3'));var rp=require('request-promise');var fs=require('fs');var path=require('path');var rimraf=require('rimraf');var config=require(_0x1f40('0x4'));var attributes=require(_0x1f40('0x5'));module[_0x1f40('0x6')]=function(_0x3c78bd,_0x44a1b5){return _0x3c78bd[_0x1f40('0x7')]('VoiceMail',attributes,{'tableName':_0x1f40('0x8'),'paranoid':![],'indexes':[{'name':_0x1f40('0x9'),'fields':[_0x1f40('0xa'),_0x1f40('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x45c2=['request-promise','rimraf','../../config/environment','./voiceMail.attributes','VoiceMail','voice_voicemail','mailbox_context','mailbox','lodash','util','../../config/logger','api','moment'];(function(_0x129f9c,_0x434e33){var _0x404ac9=function(_0x48ac99){while(--_0x48ac99){_0x129f9c['push'](_0x129f9c['shift']());}};_0x404ac9(++_0x434e33);}(_0x45c2,0x1dc));var _0x245c=function(_0xb1efb7,_0x1ce9e6){_0xb1efb7=_0xb1efb7-0x0;var _0x440e13=_0x45c2[_0xb1efb7];return _0x440e13;};'use strict';var _=require(_0x245c('0x0'));var util=require(_0x245c('0x1'));var logger=require(_0x245c('0x2'))(_0x245c('0x3'));var moment=require(_0x245c('0x4'));var BPromise=require('bluebird');var rp=require(_0x245c('0x5'));var fs=require('fs');var path=require('path');var rimraf=require(_0x245c('0x6'));var config=require(_0x245c('0x7'));var attributes=require(_0x245c('0x8'));module['exports']=function(_0x215091,_0xb3cb3){return _0x215091['define'](_0x245c('0x9'),attributes,{'tableName':_0x245c('0xa'),'paranoid':![],'indexes':[{'name':_0x245c('0xb'),'fields':[_0x245c('0xc'),'context']}],'timestamps':!![]});};
\ No newline at end of file
index 882505a..a6f091b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1bb1=['../../config/logger','../../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','code','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x525c7b,_0x488fcc){var _0x27b33e=function(_0x56d43b){while(--_0x56d43b){_0x525c7b['push'](_0x525c7b['shift']());}};_0x27b33e(++_0x488fcc);}(_0x1bb1,0x1a8));var _0x11bb=function(_0x178e48,_0x3c9509){_0x178e48=_0x178e48-0x0;var _0x440d7e=_0x1bb1[_0x178e48];return _0x440d7e;};'use strict';var _=require(_0x11bb('0x0'));var util=require(_0x11bb('0x1'));var moment=require(_0x11bb('0x2'));var BPromise=require(_0x11bb('0x3'));var rs=require(_0x11bb('0x4'));var fs=require('fs');var Redis=require(_0x11bb('0x5'));var db=require(_0x11bb('0x6'))['db'];var utils=require(_0x11bb('0x7'));var logger=require(_0x11bb('0x8'))('rpc');var config=require(_0x11bb('0x9'));var jayson=require(_0x11bb('0xa'));var client=jayson[_0x11bb('0xb')][_0x11bb('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x2124b0,_0x115cba,_0x4e4eaf){return new BPromise(function(_0x2f7a45,_0x115883){return client[_0x11bb('0xd')](_0x2124b0,_0x4e4eaf)['then'](function(_0x16da27){logger[_0x11bb('0xe')](_0x11bb('0xf'),_0x115cba,_0x11bb('0x10'));logger[_0x11bb('0x11')](_0x11bb('0x12'),_0x115cba,_0x11bb('0x10'),JSON[_0x11bb('0x13')](_0x16da27));if(_0x16da27[_0x11bb('0x14')]){if(_0x16da27[_0x11bb('0x14')][_0x11bb('0x15')]===0x1f4){logger['error']('VoiceMail,\x20%s,\x20%s',_0x115cba,_0x16da27[_0x11bb('0x14')]['message']);return _0x115883(_0x16da27[_0x11bb('0x14')][_0x11bb('0x16')]);}logger[_0x11bb('0x14')](_0x11bb('0xf'),_0x115cba,_0x16da27[_0x11bb('0x14')][_0x11bb('0x16')]);return _0x2f7a45(_0x16da27['error'][_0x11bb('0x16')]);}else{logger[_0x11bb('0xe')](_0x11bb('0xf'),_0x115cba,_0x11bb('0x10'));_0x2f7a45(_0x16da27['result'][_0x11bb('0x16')]);}})[_0x11bb('0x17')](function(_0x512774){logger['error'](_0x11bb('0xf'),_0x115cba,_0x512774);_0x115883(_0x512774);});});}
\ No newline at end of file
+var _0x1be8=['then','info','VoiceMail,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request'];(function(_0x4f9278,_0x6dad19){var _0x9fbb1b=function(_0x3759b1){while(--_0x3759b1){_0x4f9278['push'](_0x4f9278['shift']());}};_0x9fbb1b(++_0x6dad19);}(_0x1be8,0x1d7));var _0x81be=function(_0x53b2cd,_0x18747e){_0x53b2cd=_0x53b2cd-0x0;var _0x100d52=_0x1be8[_0x53b2cd];return _0x100d52;};'use strict';var _=require(_0x81be('0x0'));var util=require(_0x81be('0x1'));var moment=require(_0x81be('0x2'));var BPromise=require(_0x81be('0x3'));var rs=require(_0x81be('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x81be('0x5'))['db'];var utils=require(_0x81be('0x6'));var logger=require(_0x81be('0x7'))(_0x81be('0x8'));var config=require('../../config/environment');var jayson=require(_0x81be('0x9'));var client=jayson[_0x81be('0xa')][_0x81be('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x32dbbb,_0x4ed62f,_0x4b3a0e){return new BPromise(function(_0x397e42,_0x2922a3){return client[_0x81be('0xc')](_0x32dbbb,_0x4b3a0e)[_0x81be('0xd')](function(_0x3bd10a){logger[_0x81be('0xe')](_0x81be('0xf'),_0x4ed62f,_0x81be('0x10'));logger['debug']('VoiceMail,\x20%s,\x20%s,\x20%s',_0x4ed62f,_0x81be('0x10'),JSON['stringify'](_0x3bd10a));if(_0x3bd10a[_0x81be('0x11')]){if(_0x3bd10a[_0x81be('0x11')][_0x81be('0x12')]===0x1f4){logger[_0x81be('0x11')](_0x81be('0xf'),_0x4ed62f,_0x3bd10a[_0x81be('0x11')][_0x81be('0x13')]);return _0x2922a3(_0x3bd10a[_0x81be('0x11')][_0x81be('0x13')]);}logger[_0x81be('0x11')](_0x81be('0xf'),_0x4ed62f,_0x3bd10a[_0x81be('0x11')][_0x81be('0x13')]);return _0x397e42(_0x3bd10a[_0x81be('0x11')][_0x81be('0x13')]);}else{logger['info'](_0x81be('0xf'),_0x4ed62f,_0x81be('0x10'));_0x397e42(_0x3bd10a[_0x81be('0x14')][_0x81be('0x13')]);}})[_0x81be('0x15')](function(_0x4b7ab6){logger['error']('VoiceMail,\x20%s,\x20%s',_0x4ed62f,_0x4b7ab6);_0x2922a3(_0x4b7ab6);});});}
\ No newline at end of file
index f25e026..a1a702d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4aa7=['destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','./voiceMailMessage.controller','isAuthenticated','get','show','/:id/download','put','/:id','update','delete'];(function(_0x4fc5df,_0x3acaab){var _0x4a18f5=function(_0x241409){while(--_0x241409){_0x4fc5df['push'](_0x4fc5df['shift']());}};_0x4a18f5(++_0x3acaab);}(_0x4aa7,0x158));var _0x74aa=function(_0x65f140,_0x45cbc7){_0x65f140=_0x65f140-0x0;var _0x18fbda=_0x4aa7[_0x65f140];return _0x18fbda;};'use strict';var multer=require(_0x74aa('0x0'));var util=require(_0x74aa('0x1'));var path=require(_0x74aa('0x2'));var timeout=require(_0x74aa('0x3'));var express=require('express');var router=express[_0x74aa('0x4')]();var auth=require(_0x74aa('0x5'));var interaction=require(_0x74aa('0x6'));var config=require('../../config/environment');var controller=require(_0x74aa('0x7'));router['get']('/',auth[_0x74aa('0x8')](),controller['index']);router[_0x74aa('0x9')]('/:id',auth['isAuthenticated'](),controller[_0x74aa('0xa')]);router[_0x74aa('0x9')](_0x74aa('0xb'),auth[_0x74aa('0x8')](),controller['download']);router['post']('/',auth[_0x74aa('0x8')](),controller['create']);router[_0x74aa('0xc')](_0x74aa('0xd'),auth[_0x74aa('0x8')](),controller[_0x74aa('0xe')]);router[_0x74aa('0xf')](_0x74aa('0xd'),auth[_0x74aa('0x8')](),controller[_0x74aa('0x10')]);module[_0x74aa('0x11')]=router;
\ No newline at end of file
+var _0x6d91=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceMailMessage.controller','get','index','/:id','isAuthenticated','show','post','create','put','destroy','exports','util','path','connect-timeout'];(function(_0x27ae97,_0x52649c){var _0x1c7719=function(_0x3cc012){while(--_0x3cc012){_0x27ae97['push'](_0x27ae97['shift']());}};_0x1c7719(++_0x52649c);}(_0x6d91,0xc3));var _0x16d9=function(_0x4da356,_0x5235e1){_0x4da356=_0x4da356-0x0;var _0x321b07=_0x6d91[_0x4da356];return _0x321b07;};'use strict';var multer=require('multer');var util=require(_0x16d9('0x0'));var path=require(_0x16d9('0x1'));var timeout=require(_0x16d9('0x2'));var express=require('express');var router=express[_0x16d9('0x3')]();var auth=require(_0x16d9('0x4'));var interaction=require(_0x16d9('0x5'));var config=require(_0x16d9('0x6'));var controller=require(_0x16d9('0x7'));router[_0x16d9('0x8')]('/',auth['isAuthenticated'](),controller[_0x16d9('0x9')]);router[_0x16d9('0x8')](_0x16d9('0xa'),auth[_0x16d9('0xb')](),controller[_0x16d9('0xc')]);router[_0x16d9('0x8')]('/:id/download',auth[_0x16d9('0xb')](),controller['download']);router[_0x16d9('0xd')]('/',auth[_0x16d9('0xb')](),controller[_0x16d9('0xe')]);router[_0x16d9('0xf')](_0x16d9('0xa'),auth[_0x16d9('0xb')](),controller['update']);router['delete'](_0x16d9('0xa'),auth[_0x16d9('0xb')](),controller[_0x16d9('0x10')]);module[_0x16d9('0x11')]=router;
\ No newline at end of file
index 682d254..c67605a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x298a=['sequelize','exports','VIRTUAL','getDataValue','INTEGER','STRING','BLOB','long','TIMESTAMP'];(function(_0x305b24,_0x36808c){var _0x51c853=function(_0x157d83){while(--_0x157d83){_0x305b24['push'](_0x305b24['shift']());}};_0x51c853(++_0x36808c);}(_0x298a,0x156));var _0xa298=function(_0x4e676e,_0x2a7c6d){_0x4e676e=_0x4e676e-0x0;var _0x336a3c=_0x298a[_0x4e676e];return _0x336a3c;};'use strict';var Sequelize=require(_0xa298('0x0'));module[_0xa298('0x1')]={'name':{'type':Sequelize[_0xa298('0x2')],'get':function(_0x5b48c2){return this[_0xa298('0x3')]('id');}},'msgnum':{'type':Sequelize[_0xa298('0x4')](0xb),'defaultValue':0x0,'allowNull':![]},'dir':{'type':Sequelize['STRING'],'defaultValue':''},'context':{'type':Sequelize[_0xa298('0x5')],'defaultValue':''},'macrocontext':{'type':Sequelize[_0xa298('0x5')],'defaultValue':''},'callerid':{'type':Sequelize[_0xa298('0x5')],'defaultValue':''},'origtime':{'type':Sequelize[_0xa298('0x5')],'defaultValue':''},'duration':{'type':Sequelize[_0xa298('0x5')],'defaultValue':''},'mailboxuser':{'type':Sequelize['STRING'],'defaultValue':''},'mailboxcontext':{'type':Sequelize[_0xa298('0x5')],'defaultValue':''},'recording':{'type':Sequelize[_0xa298('0x6')](_0xa298('0x7')),'defaultValue':null},'flag':{'type':Sequelize[_0xa298('0x5')],'defaultValue':''},'msg_id':{'type':Sequelize[_0xa298('0x5')],'defaultValue':''},'stamp':{'type':_0xa298('0x8'),'allowNull':![]}};
\ No newline at end of file
+var _0xc9f5=['exports','VIRTUAL','getDataValue','INTEGER','STRING','BLOB','sequelize'];(function(_0x534cd,_0x10b562){var _0x73e948=function(_0x1a34d9){while(--_0x1a34d9){_0x534cd['push'](_0x534cd['shift']());}};_0x73e948(++_0x10b562);}(_0xc9f5,0x7d));var _0x5c9f=function(_0x256684,_0x529c1e){_0x256684=_0x256684-0x0;var _0x37a0c9=_0xc9f5[_0x256684];return _0x37a0c9;};'use strict';var Sequelize=require(_0x5c9f('0x0'));module[_0x5c9f('0x1')]={'name':{'type':Sequelize[_0x5c9f('0x2')],'get':function(_0x1f8e67){return this[_0x5c9f('0x3')]('id');}},'msgnum':{'type':Sequelize[_0x5c9f('0x4')](0xb),'defaultValue':0x0,'allowNull':![]},'dir':{'type':Sequelize[_0x5c9f('0x5')],'defaultValue':''},'context':{'type':Sequelize[_0x5c9f('0x5')],'defaultValue':''},'macrocontext':{'type':Sequelize[_0x5c9f('0x5')],'defaultValue':''},'callerid':{'type':Sequelize[_0x5c9f('0x5')],'defaultValue':''},'origtime':{'type':Sequelize[_0x5c9f('0x5')],'defaultValue':''},'duration':{'type':Sequelize[_0x5c9f('0x5')],'defaultValue':''},'mailboxuser':{'type':Sequelize[_0x5c9f('0x5')],'defaultValue':''},'mailboxcontext':{'type':Sequelize[_0x5c9f('0x5')],'defaultValue':''},'recording':{'type':Sequelize[_0x5c9f('0x6')]('long'),'defaultValue':null},'flag':{'type':Sequelize['STRING'],'defaultValue':''},'msg_id':{'type':Sequelize['STRING'],'defaultValue':''},'stamp':{'type':'TIMESTAMP','allowNull':![]}};
\ No newline at end of file
index e73a4ae..c533883 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0d47=['eml-format','rimraf','fast-json-patch','moment','bluebird','mustache','util','path','ejs','lodash','squel','crypto','to-csv','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/utils','../../mysqldb','status','end','count','offset','limit','Content-Range','json','reject','save','update','then','sendStatus','name','send','index','VoiceMailMessage','rawAttributes','differenceBy','query','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','sort','pick','filters','merge','where','type','VIRTUAL','field','filter','options','includeAll','include','findAll','rows','show','keys','find','create','body','params','catch','destroy','download','recording','Sequelize','ValidationError','VoiceMailMessage\x20not\x20found','audio/wav','attachment','Content-Disposition','attachment;\x20filename=\x22','msg_id','.wav\x22','set','html-pdf'];(function(_0x1c736b,_0x4606db){var _0x18f87d=function(_0x4a69e9){while(--_0x4a69e9){_0x1c736b['push'](_0x1c736b['shift']());}};_0x18f87d(++_0x4606db);}(_0x0d47,0x143));var _0x70d4=function(_0x2b43d4,_0xaea6f2){_0x2b43d4=_0x2b43d4-0x0;var _0x13c720=_0x0d47[_0x2b43d4];return _0x13c720;};'use strict';var pdf=require(_0x70d4('0x0'));var emlformat=require(_0x70d4('0x1'));var rimraf=require(_0x70d4('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x70d4('0x3'));var rp=require('request-promise');var moment=require(_0x70d4('0x4'));var BPromise=require(_0x70d4('0x5'));var Mustache=require(_0x70d4('0x6'));var util=require(_0x70d4('0x7'));var path=require(_0x70d4('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x70d4('0x9'));var fs=require('fs');var _=require(_0x70d4('0xa'));var squel=require(_0x70d4('0xb'));var crypto=require(_0x70d4('0xc'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x70d4('0xd'));var querystring=require('querystring');var Papa=require(_0x70d4('0xe'));var Redis=require(_0x70d4('0xf'));var authService=require(_0x70d4('0x10'));var qs=require(_0x70d4('0x11'));var hardwareService=require(_0x70d4('0x12'));var logger=require('../../config/logger')('api');var utils=require(_0x70d4('0x13'));var config=require('../../config/environment');var db=require(_0x70d4('0x14'))['db'];function respondWithStatusCode(_0x34dd09,_0x1305f1){_0x1305f1=_0x1305f1||0xcc;return function(_0x253e0c){if(_0x253e0c){return _0x34dd09['sendStatus'](_0x1305f1);}return _0x34dd09[_0x70d4('0x15')](_0x1305f1)[_0x70d4('0x16')]();};}function respondWithResult(_0x492dd4,_0x27122a){_0x27122a=_0x27122a||0xc8;return function(_0x4d7cfc){if(_0x4d7cfc){return _0x492dd4['status'](_0x27122a)['json'](_0x4d7cfc);}};}function respondWithFilteredResult(_0x2d44c7,_0x53cce0){return function(_0xfeacea){if(_0xfeacea){var _0x129c30=_0xfeacea[_0x70d4('0x17')],_0xde09c9=_0x53cce0[_0x70d4('0x18')],_0x542f64=_0x53cce0['offset']+_0x53cce0[_0x70d4('0x19')],_0x5ed676;if(_0x542f64>=_0x129c30){_0x542f64=_0x129c30;_0x5ed676=0xc8;}else{_0x5ed676=0xce;}_0x2d44c7[_0x70d4('0x15')](_0x5ed676);return _0x2d44c7['set'](_0x70d4('0x1a'),_0xde09c9+'-'+_0x542f64+'/'+_0x129c30)[_0x70d4('0x1b')](_0xfeacea);}return null;};}function patchUpdates(_0x3a0e90){return function(_0x214e5b){try{jsonpatch['apply'](_0x214e5b,_0x3a0e90,!![]);}catch(_0x514223){return BPromise[_0x70d4('0x1c')](_0x514223);}return _0x214e5b[_0x70d4('0x1d')]();};}function saveUpdates(_0x2a9cb7,_0x11f13f){return function(_0x2aca91){if(_0x2aca91){return _0x2aca91[_0x70d4('0x1e')](_0x2a9cb7)[_0x70d4('0x1f')](function(_0x19e28d){return _0x19e28d;});}return null;};}function removeEntity(_0x453e14,_0x1cb54b){return function(_0x4ae458){if(_0x4ae458){return _0x4ae458['destroy']()[_0x70d4('0x1f')](function(){_0x453e14[_0x70d4('0x15')](0xcc)[_0x70d4('0x16')]();});}};}function handleEntityNotFound(_0x25e305,_0x20d954){return function(_0x3f4aa0){if(!_0x3f4aa0){_0x25e305[_0x70d4('0x20')](0x194);}return _0x3f4aa0;};}function handleError(_0x16d1a4,_0x421442){_0x421442=_0x421442||0x1f4;return function(_0x5f0049){logger['error'](_0x5f0049['stack']);if(_0x5f0049[_0x70d4('0x21')]){delete _0x5f0049['name'];}_0x16d1a4['status'](_0x421442)[_0x70d4('0x22')](_0x5f0049);};}exports[_0x70d4('0x23')]=function(_0x52a7dc,_0xde4069){var _0x5113e1={},_0x6b0546={},_0x5c1550={'count':0x0,'rows':[]};var _0x383f55=db[_0x70d4('0x24')][_0x70d4('0x25')];_0x6b0546['model']=_[_0x70d4('0x26')](_['keys'](_0x383f55),[_0x70d4('0x21')]);_0x6b0546[_0x70d4('0x27')]=_['keys'](_0x52a7dc[_0x70d4('0x27')]);_0x6b0546['filters']=_[_0x70d4('0x28')](_0x6b0546[_0x70d4('0x29')],_0x6b0546['query']);_0x5113e1[_0x70d4('0x2a')]=_[_0x70d4('0x28')](_0x6b0546[_0x70d4('0x29')],qs[_0x70d4('0x2b')](_0x52a7dc[_0x70d4('0x27')][_0x70d4('0x2b')]));_0x5113e1['attributes']=_0x5113e1[_0x70d4('0x2a')][_0x70d4('0x2c')]?_0x5113e1['attributes']:_0x6b0546[_0x70d4('0x29')];if(!_0x52a7dc[_0x70d4('0x27')][_0x70d4('0x2d')](_0x70d4('0x2e'))){_0x5113e1[_0x70d4('0x19')]=qs[_0x70d4('0x19')](_0x52a7dc[_0x70d4('0x27')]['limit']);_0x5113e1[_0x70d4('0x18')]=qs['offset'](_0x52a7dc[_0x70d4('0x27')]['offset']);}_0x5113e1['order']=qs[_0x70d4('0x2f')](_0x52a7dc[_0x70d4('0x27')][_0x70d4('0x2f')]);_0x5113e1['where']=qs['filters'](_[_0x70d4('0x30')](_0x52a7dc[_0x70d4('0x27')],_0x6b0546[_0x70d4('0x31')]));if(_0x52a7dc[_0x70d4('0x27')]['filter']){_0x5113e1['where']=_[_0x70d4('0x32')](_0x5113e1[_0x70d4('0x33')],{'$or':_['map'](_0x383f55,function(_0x2a29c8){if(_0x2a29c8[_0x70d4('0x34')]['key']!==_0x70d4('0x35')){var _0x507f72={};_0x507f72[_0x2a29c8[_0x70d4('0x36')]]={'$like':'%'+_0x52a7dc[_0x70d4('0x27')][_0x70d4('0x37')]+'%'};return _0x507f72;}})});}_0x5113e1=_[_0x70d4('0x32')]({},_0x5113e1,_0x52a7dc[_0x70d4('0x38')]);var _0x46580a={'where':_0x5113e1[_0x70d4('0x33')]};return db['VoiceMailMessage']['count'](_0x46580a)[_0x70d4('0x1f')](function(_0x415da3){_0x5c1550[_0x70d4('0x17')]=_0x415da3;if(_0x52a7dc['query'][_0x70d4('0x39')]){_0x5113e1[_0x70d4('0x3a')]=[{'all':!![]}];}return db[_0x70d4('0x24')][_0x70d4('0x3b')](_0x5113e1);})['then'](function(_0x5c8563){_0x5c1550[_0x70d4('0x3c')]=_0x5c8563;return _0x5c1550;})['then'](respondWithFilteredResult(_0xde4069,_0x5113e1))['catch'](handleError(_0xde4069,null));};exports[_0x70d4('0x3d')]=function(_0x50979a,_0x304d45){var _0x112c47={'raw':!![],'where':{'id':_0x50979a['params']['id']}},_0x423ae8={};_0x423ae8[_0x70d4('0x29')]=_[_0x70d4('0x3e')](db['VoiceMailMessage'][_0x70d4('0x25')]);_0x423ae8[_0x70d4('0x27')]=_[_0x70d4('0x3e')](_0x50979a[_0x70d4('0x27')]);_0x423ae8['filters']=_[_0x70d4('0x28')](_0x423ae8[_0x70d4('0x29')],_0x423ae8['query']);_0x112c47['attributes']=_[_0x70d4('0x28')](_0x423ae8[_0x70d4('0x29')],qs[_0x70d4('0x2b')](_0x50979a[_0x70d4('0x27')][_0x70d4('0x2b')]));_0x112c47[_0x70d4('0x2a')]=_0x112c47[_0x70d4('0x2a')]['length']?_0x112c47['attributes']:_0x423ae8[_0x70d4('0x29')];if(_0x50979a[_0x70d4('0x27')][_0x70d4('0x39')]){_0x112c47['include']=[{'all':!![]}];}_0x112c47=_[_0x70d4('0x32')]({},_0x112c47,_0x50979a[_0x70d4('0x38')]);return db['VoiceMailMessage'][_0x70d4('0x3f')](_0x112c47)[_0x70d4('0x1f')](handleEntityNotFound(_0x304d45,null))[_0x70d4('0x1f')](respondWithResult(_0x304d45,null))['catch'](handleError(_0x304d45,null));};exports[_0x70d4('0x40')]=function(_0x50fd70,_0xf000f5){return db[_0x70d4('0x24')][_0x70d4('0x40')](_0x50fd70[_0x70d4('0x41')],{})[_0x70d4('0x1f')](respondWithResult(_0xf000f5,0xc9))['catch'](handleError(_0xf000f5,null));};exports[_0x70d4('0x1e')]=function(_0xcd9beb,_0x3ea8cb){if(_0xcd9beb['body']['id']){delete _0xcd9beb[_0x70d4('0x41')]['id'];}return db['VoiceMailMessage'][_0x70d4('0x3f')]({'where':{'id':_0xcd9beb[_0x70d4('0x42')]['id']}})[_0x70d4('0x1f')](handleEntityNotFound(_0x3ea8cb,null))['then'](saveUpdates(_0xcd9beb[_0x70d4('0x41')],null))[_0x70d4('0x1f')](respondWithResult(_0x3ea8cb,null))[_0x70d4('0x43')](handleError(_0x3ea8cb,null));};exports[_0x70d4('0x44')]=function(_0x1ccdfb,_0x3575c4){return db[_0x70d4('0x24')]['find']({'where':{'id':_0x1ccdfb['params']['id']}})['then'](handleEntityNotFound(_0x3575c4,null))[_0x70d4('0x1f')](removeEntity(_0x3575c4,null))[_0x70d4('0x43')](handleError(_0x3575c4,null));};exports[_0x70d4('0x45')]=function(_0x2ba5c2,_0x3d8ba1,_0x482027){return db[_0x70d4('0x24')][_0x70d4('0x3f')]({'where':{'id':_0x2ba5c2['params']['id']},'attributes':['id',_0x70d4('0x46'),'msg_id']})['then'](handleEntityNotFound(_0x3d8ba1,null))[_0x70d4('0x1f')](function(_0x4fd913){if(_0x4fd913){if(!_0x4fd913[_0x70d4('0x46')]){throw new db[(_0x70d4('0x47'))][(_0x70d4('0x48'))](_0x70d4('0x49'));}var _0x58c514={'Content-Type':_0x70d4('0x4a'),'Content-Disposition':_0x70d4('0x4b')};if(_0x4fd913['msg_id']){_0x58c514[_0x70d4('0x4c')]=_0x70d4('0x4d')+_0x4fd913[_0x70d4('0x4e')]+_0x70d4('0x4f');}_0x3d8ba1[_0x70d4('0x50')](_0x58c514);return _0x3d8ba1[_0x70d4('0x22')](new Buffer(_0x4fd913[_0x70d4('0x46')]));}})['catch'](handleError(_0x3d8ba1,null));};
\ No newline at end of file
+var _0xc6bf=['fields','length','hasOwnProperty','nolimit','limit','sort','filters','pick','filter','where','merge','map','type','key','VIRTUAL','options','VoiceMailMessage','count','includeAll','findAll','catch','show','include','create','body','params','find','download','recording','msg_id','ValidationError','VoiceMailMessage\x20not\x20found','audio/wav','attachment','Content-Disposition','attachment;\x20filename=\x22','.wav\x22','send','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','ejs','lodash','desk.js','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','status','end','json','offset','set','Content-Range','reject','update','then','destroy','sendStatus','stack','name','index','rawAttributes','differenceBy','keys','query','intersection','model','attributes'];(function(_0x46c179,_0x2ba1de){var _0x531f9=function(_0x221a23){while(--_0x221a23){_0x46c179['push'](_0x46c179['shift']());}};_0x531f9(++_0x2ba1de);}(_0xc6bf,0xc4));var _0xfc6b=function(_0x273e2c,_0x2acc61){_0x273e2c=_0x273e2c-0x0;var _0x11928d=_0xc6bf[_0x273e2c];return _0x11928d;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xfc6b('0x0'));var zipdir=require(_0xfc6b('0x1'));var jsonpatch=require(_0xfc6b('0x2'));var rp=require(_0xfc6b('0x3'));var moment=require(_0xfc6b('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xfc6b('0x5'));var util=require('util');var path=require(_0xfc6b('0x6'));var sox=require(_0xfc6b('0x7'));var csv=require(_0xfc6b('0x8'));var ejs=require(_0xfc6b('0x9'));var fs=require('fs');var _=require(_0xfc6b('0xa'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xfc6b('0xb'));var toCsv=require(_0xfc6b('0x8'));var querystring=require('querystring');var Papa=require(_0xfc6b('0xc'));var Redis=require(_0xfc6b('0xd'));var authService=require('../../components/auth/service');var qs=require(_0xfc6b('0xe'));var hardwareService=require(_0xfc6b('0xf'));var logger=require(_0xfc6b('0x10'))(_0xfc6b('0x11'));var utils=require(_0xfc6b('0x12'));var config=require(_0xfc6b('0x13'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1390fc,_0x48821c){_0x48821c=_0x48821c||0xcc;return function(_0x3a771e){if(_0x3a771e){return _0x1390fc['sendStatus'](_0x48821c);}return _0x1390fc[_0xfc6b('0x14')](_0x48821c)[_0xfc6b('0x15')]();};}function respondWithResult(_0x6ff71e,_0x45540e){_0x45540e=_0x45540e||0xc8;return function(_0x440fe2){if(_0x440fe2){return _0x6ff71e[_0xfc6b('0x14')](_0x45540e)[_0xfc6b('0x16')](_0x440fe2);}};}function respondWithFilteredResult(_0x3de77f,_0x81ec8c){return function(_0xff2057){if(_0xff2057){var _0x25d726=_0xff2057['count'],_0x4871b2=_0x81ec8c[_0xfc6b('0x17')],_0x58db34=_0x81ec8c['offset']+_0x81ec8c['limit'],_0x562913;if(_0x58db34>=_0x25d726){_0x58db34=_0x25d726;_0x562913=0xc8;}else{_0x562913=0xce;}_0x3de77f[_0xfc6b('0x14')](_0x562913);return _0x3de77f[_0xfc6b('0x18')](_0xfc6b('0x19'),_0x4871b2+'-'+_0x58db34+'/'+_0x25d726)['json'](_0xff2057);}return null;};}function patchUpdates(_0x21ca50){return function(_0x7dba62){try{jsonpatch['apply'](_0x7dba62,_0x21ca50,!![]);}catch(_0x525dd4){return BPromise[_0xfc6b('0x1a')](_0x525dd4);}return _0x7dba62['save']();};}function saveUpdates(_0x2f8a1e,_0x879558){return function(_0x4f6c43){if(_0x4f6c43){return _0x4f6c43[_0xfc6b('0x1b')](_0x2f8a1e)[_0xfc6b('0x1c')](function(_0x3e14d9){return _0x3e14d9;});}return null;};}function removeEntity(_0x2de646,_0x54eebd){return function(_0x2c6814){if(_0x2c6814){return _0x2c6814[_0xfc6b('0x1d')]()[_0xfc6b('0x1c')](function(){_0x2de646[_0xfc6b('0x14')](0xcc)[_0xfc6b('0x15')]();});}};}function handleEntityNotFound(_0x423b77,_0xab56f1){return function(_0x53ede1){if(!_0x53ede1){_0x423b77[_0xfc6b('0x1e')](0x194);}return _0x53ede1;};}function handleError(_0xce1690,_0x5f2421){_0x5f2421=_0x5f2421||0x1f4;return function(_0x1423c7){logger['error'](_0x1423c7[_0xfc6b('0x1f')]);if(_0x1423c7['name']){delete _0x1423c7[_0xfc6b('0x20')];}_0xce1690[_0xfc6b('0x14')](_0x5f2421)['send'](_0x1423c7);};}exports[_0xfc6b('0x21')]=function(_0x57203c,_0x18da61){var _0x46302f={},_0x4c50a4={},_0x440ddc={'count':0x0,'rows':[]};var _0x309eca=db['VoiceMailMessage'][_0xfc6b('0x22')];_0x4c50a4['model']=_[_0xfc6b('0x23')](_[_0xfc6b('0x24')](_0x309eca),['name']);_0x4c50a4['query']=_[_0xfc6b('0x24')](_0x57203c[_0xfc6b('0x25')]);_0x4c50a4['filters']=_[_0xfc6b('0x26')](_0x4c50a4[_0xfc6b('0x27')],_0x4c50a4['query']);_0x46302f[_0xfc6b('0x28')]=_['intersection'](_0x4c50a4['model'],qs[_0xfc6b('0x29')](_0x57203c[_0xfc6b('0x25')][_0xfc6b('0x29')]));_0x46302f[_0xfc6b('0x28')]=_0x46302f[_0xfc6b('0x28')][_0xfc6b('0x2a')]?_0x46302f[_0xfc6b('0x28')]:_0x4c50a4['model'];if(!_0x57203c[_0xfc6b('0x25')][_0xfc6b('0x2b')](_0xfc6b('0x2c'))){_0x46302f['limit']=qs['limit'](_0x57203c[_0xfc6b('0x25')][_0xfc6b('0x2d')]);_0x46302f[_0xfc6b('0x17')]=qs[_0xfc6b('0x17')](_0x57203c[_0xfc6b('0x25')][_0xfc6b('0x17')]);}_0x46302f['order']=qs[_0xfc6b('0x2e')](_0x57203c[_0xfc6b('0x25')][_0xfc6b('0x2e')]);_0x46302f['where']=qs[_0xfc6b('0x2f')](_[_0xfc6b('0x30')](_0x57203c['query'],_0x4c50a4[_0xfc6b('0x2f')]));if(_0x57203c[_0xfc6b('0x25')][_0xfc6b('0x31')]){_0x46302f[_0xfc6b('0x32')]=_[_0xfc6b('0x33')](_0x46302f[_0xfc6b('0x32')],{'$or':_[_0xfc6b('0x34')](_0x309eca,function(_0x2cc929){if(_0x2cc929[_0xfc6b('0x35')][_0xfc6b('0x36')]!==_0xfc6b('0x37')){var _0xe59505={};_0xe59505[_0x2cc929['field']]={'$like':'%'+_0x57203c[_0xfc6b('0x25')][_0xfc6b('0x31')]+'%'};return _0xe59505;}})});}_0x46302f=_[_0xfc6b('0x33')]({},_0x46302f,_0x57203c[_0xfc6b('0x38')]);var _0x562213={'where':_0x46302f[_0xfc6b('0x32')]};return db[_0xfc6b('0x39')][_0xfc6b('0x3a')](_0x562213)[_0xfc6b('0x1c')](function(_0x429c8b){_0x440ddc[_0xfc6b('0x3a')]=_0x429c8b;if(_0x57203c[_0xfc6b('0x25')][_0xfc6b('0x3b')]){_0x46302f['include']=[{'all':!![]}];}return db[_0xfc6b('0x39')][_0xfc6b('0x3c')](_0x46302f);})[_0xfc6b('0x1c')](function(_0x6184d5){_0x440ddc['rows']=_0x6184d5;return _0x440ddc;})[_0xfc6b('0x1c')](respondWithFilteredResult(_0x18da61,_0x46302f))[_0xfc6b('0x3d')](handleError(_0x18da61,null));};exports[_0xfc6b('0x3e')]=function(_0x439640,_0x4b49ac){var _0x315939={'raw':!![],'where':{'id':_0x439640['params']['id']}},_0x479bcc={};_0x479bcc['model']=_[_0xfc6b('0x24')](db[_0xfc6b('0x39')][_0xfc6b('0x22')]);_0x479bcc[_0xfc6b('0x25')]=_[_0xfc6b('0x24')](_0x439640['query']);_0x479bcc['filters']=_[_0xfc6b('0x26')](_0x479bcc['model'],_0x479bcc[_0xfc6b('0x25')]);_0x315939[_0xfc6b('0x28')]=_[_0xfc6b('0x26')](_0x479bcc['model'],qs[_0xfc6b('0x29')](_0x439640[_0xfc6b('0x25')][_0xfc6b('0x29')]));_0x315939[_0xfc6b('0x28')]=_0x315939['attributes'][_0xfc6b('0x2a')]?_0x315939[_0xfc6b('0x28')]:_0x479bcc[_0xfc6b('0x27')];if(_0x439640[_0xfc6b('0x25')]['includeAll']){_0x315939[_0xfc6b('0x3f')]=[{'all':!![]}];}_0x315939=_['merge']({},_0x315939,_0x439640['options']);return db[_0xfc6b('0x39')]['find'](_0x315939)['then'](handleEntityNotFound(_0x4b49ac,null))[_0xfc6b('0x1c')](respondWithResult(_0x4b49ac,null))['catch'](handleError(_0x4b49ac,null));};exports['create']=function(_0x484847,_0x4303fc){return db[_0xfc6b('0x39')][_0xfc6b('0x40')](_0x484847[_0xfc6b('0x41')],{})[_0xfc6b('0x1c')](respondWithResult(_0x4303fc,0xc9))[_0xfc6b('0x3d')](handleError(_0x4303fc,null));};exports[_0xfc6b('0x1b')]=function(_0x16adda,_0x1091de){if(_0x16adda['body']['id']){delete _0x16adda[_0xfc6b('0x41')]['id'];}return db[_0xfc6b('0x39')]['find']({'where':{'id':_0x16adda[_0xfc6b('0x42')]['id']}})['then'](handleEntityNotFound(_0x1091de,null))['then'](saveUpdates(_0x16adda[_0xfc6b('0x41')],null))[_0xfc6b('0x1c')](respondWithResult(_0x1091de,null))[_0xfc6b('0x3d')](handleError(_0x1091de,null));};exports[_0xfc6b('0x1d')]=function(_0x561b0b,_0x1920d7){return db[_0xfc6b('0x39')][_0xfc6b('0x43')]({'where':{'id':_0x561b0b[_0xfc6b('0x42')]['id']}})[_0xfc6b('0x1c')](handleEntityNotFound(_0x1920d7,null))[_0xfc6b('0x1c')](removeEntity(_0x1920d7,null))['catch'](handleError(_0x1920d7,null));};exports[_0xfc6b('0x44')]=function(_0x4d56b0,_0x3ccfbc,_0x22cfc5){return db[_0xfc6b('0x39')]['find']({'where':{'id':_0x4d56b0[_0xfc6b('0x42')]['id']},'attributes':['id',_0xfc6b('0x45'),_0xfc6b('0x46')]})[_0xfc6b('0x1c')](handleEntityNotFound(_0x3ccfbc,null))[_0xfc6b('0x1c')](function(_0x246416){if(_0x246416){if(!_0x246416[_0xfc6b('0x45')]){throw new db['Sequelize'][(_0xfc6b('0x47'))](_0xfc6b('0x48'));}var _0x4fb011={'Content-Type':_0xfc6b('0x49'),'Content-Disposition':_0xfc6b('0x4a')};if(_0x246416['msg_id']){_0x4fb011[_0xfc6b('0x4b')]=_0xfc6b('0x4c')+_0x246416[_0xfc6b('0x46')]+_0xfc6b('0x4d');}_0x3ccfbc['set'](_0x4fb011);return _0x3ccfbc[_0xfc6b('0x4e')](new Buffer(_0x246416[_0xfc6b('0x45')]));}})[_0xfc6b('0x3d')](handleError(_0x3ccfbc,null));};
\ No newline at end of file
index 9fe7eac..a4eb1e0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbccd=['../../config/environment','./voiceMailMessage.attributes','define','VoiceMailMessage','dir','lodash','../../config/logger','api','moment','bluebird','path','rimraf'];(function(_0x19d140,_0x1354b7){var _0x53cc0c=function(_0x518071){while(--_0x518071){_0x19d140['push'](_0x19d140['shift']());}};_0x53cc0c(++_0x1354b7);}(_0xbccd,0x131));var _0xdbcc=function(_0x565c49,_0x54acd0){_0x565c49=_0x565c49-0x0;var _0x20ca34=_0xbccd[_0x565c49];return _0x20ca34;};'use strict';var _=require(_0xdbcc('0x0'));var util=require('util');var logger=require(_0xdbcc('0x1'))(_0xdbcc('0x2'));var moment=require(_0xdbcc('0x3'));var BPromise=require(_0xdbcc('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0xdbcc('0x5'));var rimraf=require(_0xdbcc('0x6'));var config=require(_0xdbcc('0x7'));var attributes=require(_0xdbcc('0x8'));module['exports']=function(_0x455c40,_0x5a5ba4){return _0x455c40[_0xdbcc('0x9')](_0xdbcc('0xa'),attributes,{'tableName':'voice_voicemail_messages','paranoid':![],'indexes':[{'name':_0xdbcc('0xb'),'fields':[_0xdbcc('0xb')]}],'timestamps':![]});};
\ No newline at end of file
+var _0x4388=['../../config/environment','./voiceMailMessage.attributes','exports','define','voice_voicemail_messages','dir','../../config/logger','api','bluebird','path','rimraf'];(function(_0x1facfa,_0x1acf7d){var _0x9ec701=function(_0x115e37){while(--_0x115e37){_0x1facfa['push'](_0x1facfa['shift']());}};_0x9ec701(++_0x1acf7d);}(_0x4388,0x13a));var _0x8438=function(_0x12171a,_0x3ace15){_0x12171a=_0x12171a-0x0;var _0x5a3f25=_0x4388[_0x12171a];return _0x5a3f25;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x8438('0x0'))(_0x8438('0x1'));var moment=require('moment');var BPromise=require(_0x8438('0x2'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x8438('0x3'));var rimraf=require(_0x8438('0x4'));var config=require(_0x8438('0x5'));var attributes=require(_0x8438('0x6'));module[_0x8438('0x7')]=function(_0x335c7c,_0x5e43fb){return _0x335c7c[_0x8438('0x8')]('VoiceMailMessage',attributes,{'tableName':_0x8438('0x9'),'paranoid':![],'indexes':[{'name':_0x8438('0xa'),'fields':[_0x8438('0xa')]}],'timestamps':![]});};
\ No newline at end of file
index 88095bd..0e9fc5f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x672c=['client','http','request','then','VoiceMailMessage,\x20%s,\x20%s','request\x20sent','debug','VoiceMailMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment'];(function(_0x2e36ab,_0x5ee65c){var _0x4b7409=function(_0x50c200){while(--_0x50c200){_0x2e36ab['push'](_0x2e36ab['shift']());}};_0x4b7409(++_0x5ee65c);}(_0x672c,0x167));var _0xc672=function(_0x35c758,_0x580182){_0x35c758=_0x35c758-0x0;var _0x4dc2da=_0x672c[_0x35c758];return _0x4dc2da;};'use strict';var _=require(_0xc672('0x0'));var util=require(_0xc672('0x1'));var moment=require(_0xc672('0x2'));var BPromise=require('bluebird');var rs=require(_0xc672('0x3'));var fs=require('fs');var Redis=require(_0xc672('0x4'));var db=require(_0xc672('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xc672('0x6'))(_0xc672('0x7'));var config=require(_0xc672('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xc672('0x9')][_0xc672('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3d13ef,_0x1a9d82,_0x97ea2f){return new BPromise(function(_0x6c7981,_0x5da0b6){return client[_0xc672('0xb')](_0x3d13ef,_0x97ea2f)[_0xc672('0xc')](function(_0x5369c6){logger['info'](_0xc672('0xd'),_0x1a9d82,_0xc672('0xe'));logger[_0xc672('0xf')](_0xc672('0x10'),_0x1a9d82,_0xc672('0xe'),JSON[_0xc672('0x11')](_0x5369c6));if(_0x5369c6[_0xc672('0x12')]){if(_0x5369c6['error'][_0xc672('0x13')]===0x1f4){logger['error'](_0xc672('0xd'),_0x1a9d82,_0x5369c6[_0xc672('0x12')]['message']);return _0x5da0b6(_0x5369c6[_0xc672('0x12')][_0xc672('0x14')]);}logger[_0xc672('0x12')](_0xc672('0xd'),_0x1a9d82,_0x5369c6['error'][_0xc672('0x14')]);return _0x6c7981(_0x5369c6[_0xc672('0x12')][_0xc672('0x14')]);}else{logger[_0xc672('0x15')](_0xc672('0xd'),_0x1a9d82,_0xc672('0xe'));_0x6c7981(_0x5369c6[_0xc672('0x16')][_0xc672('0x14')]);}})['catch'](function(_0x5ec873){logger[_0xc672('0x12')](_0xc672('0xd'),_0x1a9d82,_0x5ec873);_0x5da0b6(_0x5ec873);});});}
\ No newline at end of file
+var _0x6357=['rpc','../../config/environment','jayson/promise','request','info','VoiceMailMessage,\x20%s,\x20%s','debug','VoiceMailMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','catch','lodash','util','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x40220a,_0x22feb1){var _0x3903cc=function(_0x33a296){while(--_0x33a296){_0x40220a['push'](_0x40220a['shift']());}};_0x3903cc(++_0x22feb1);}(_0x6357,0x139));var _0x7635=function(_0x4217f4,_0x3ce0ee){_0x4217f4=_0x4217f4-0x0;var _0x10a201=_0x6357[_0x4217f4];return _0x10a201;};'use strict';var _=require(_0x7635('0x0'));var util=require(_0x7635('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x7635('0x2'));var fs=require('fs');var Redis=require(_0x7635('0x3'));var db=require(_0x7635('0x4'))['db'];var utils=require(_0x7635('0x5'));var logger=require(_0x7635('0x6'))(_0x7635('0x7'));var config=require(_0x7635('0x8'));var jayson=require(_0x7635('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x147e5b,_0x662ba6,_0x2eef07){return new BPromise(function(_0x3cc748,_0x5a0f1f){return client[_0x7635('0xa')](_0x147e5b,_0x2eef07)['then'](function(_0x9ce5f8){logger[_0x7635('0xb')](_0x7635('0xc'),_0x662ba6,'request\x20sent');logger[_0x7635('0xd')](_0x7635('0xe'),_0x662ba6,_0x7635('0xf'),JSON[_0x7635('0x10')](_0x9ce5f8));if(_0x9ce5f8[_0x7635('0x11')]){if(_0x9ce5f8[_0x7635('0x11')]['code']===0x1f4){logger['error'](_0x7635('0xc'),_0x662ba6,_0x9ce5f8[_0x7635('0x11')][_0x7635('0x12')]);return _0x5a0f1f(_0x9ce5f8[_0x7635('0x11')]['message']);}logger[_0x7635('0x11')](_0x7635('0xc'),_0x662ba6,_0x9ce5f8['error'][_0x7635('0x12')]);return _0x3cc748(_0x9ce5f8['error'][_0x7635('0x12')]);}else{logger[_0x7635('0xb')](_0x7635('0xc'),_0x662ba6,'request\x20sent');_0x3cc748(_0x9ce5f8['result'][_0x7635('0x12')]);}})[_0x7635('0x13')](function(_0x5e71b9){logger[_0x7635('0x11')]('VoiceMailMessage,\x20%s,\x20%s',_0x662ba6,_0x5e71b9);_0x5a0f1f(_0x5e71b9);});});}
\ No newline at end of file
index 8ad8830..8c8220c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x17ba=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceMusicOnHold.controller','get','isAuthenticated','index','/:id','show','/:id/sounds','getSounds','post','create','addSound','put','update','delete','destroy','/:id/sounds/:id2','exports','multer','util','connect-timeout','express'];(function(_0x4f46f1,_0x2a39b9){var _0x5e146b=function(_0x5aed22){while(--_0x5aed22){_0x4f46f1['push'](_0x4f46f1['shift']());}};_0x5e146b(++_0x2a39b9);}(_0x17ba,0xab));var _0xa17b=function(_0x345290,_0x4465e3){_0x345290=_0x345290-0x0;var _0x51031a=_0x17ba[_0x345290];return _0x51031a;};'use strict';var multer=require(_0xa17b('0x0'));var util=require(_0xa17b('0x1'));var path=require('path');var timeout=require(_0xa17b('0x2'));var express=require(_0xa17b('0x3'));var router=express[_0xa17b('0x4')]();var auth=require(_0xa17b('0x5'));var interaction=require(_0xa17b('0x6'));var config=require(_0xa17b('0x7'));var controller=require(_0xa17b('0x8'));router[_0xa17b('0x9')]('/',auth[_0xa17b('0xa')](),controller[_0xa17b('0xb')]);router[_0xa17b('0x9')](_0xa17b('0xc'),auth[_0xa17b('0xa')](),controller[_0xa17b('0xd')]);router[_0xa17b('0x9')](_0xa17b('0xe'),auth[_0xa17b('0xa')](),controller[_0xa17b('0xf')]);router[_0xa17b('0x10')]('/',auth['isAuthenticated'](),controller[_0xa17b('0x11')]);router[_0xa17b('0x10')](_0xa17b('0xe'),auth[_0xa17b('0xa')](),controller[_0xa17b('0x12')]);router[_0xa17b('0x13')](_0xa17b('0xc'),auth['isAuthenticated'](),controller[_0xa17b('0x14')]);router[_0xa17b('0x15')](_0xa17b('0xc'),auth['isAuthenticated'](),controller[_0xa17b('0x16')]);router[_0xa17b('0x15')](_0xa17b('0x17'),auth[_0xa17b('0xa')](),controller['removeSound']);module[_0xa17b('0x18')]=router;
\ No newline at end of file
+var _0x0b78=['getSounds','post','addSound','put','/:id','update','delete','destroy','removeSound','multer','util','connect-timeout','express','../../components/auth/service','../../config/environment','./voiceMusicOnHold.controller','get','isAuthenticated','show','/:id/sounds'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x0b78,0x1ad));var _0x80b7=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x0b78[_0x40a045];return _0x1a687c;};'use strict';var multer=require(_0x80b7('0x0'));var util=require(_0x80b7('0x1'));var path=require('path');var timeout=require(_0x80b7('0x2'));var express=require(_0x80b7('0x3'));var router=express['Router']();var auth=require(_0x80b7('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x80b7('0x5'));var controller=require(_0x80b7('0x6'));router[_0x80b7('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0x80b7('0x7')]('/:id',auth[_0x80b7('0x8')](),controller[_0x80b7('0x9')]);router[_0x80b7('0x7')](_0x80b7('0xa'),auth['isAuthenticated'](),controller[_0x80b7('0xb')]);router[_0x80b7('0xc')]('/',auth[_0x80b7('0x8')](),controller['create']);router[_0x80b7('0xc')]('/:id/sounds',auth[_0x80b7('0x8')](),controller[_0x80b7('0xd')]);router[_0x80b7('0xe')](_0x80b7('0xf'),auth[_0x80b7('0x8')](),controller[_0x80b7('0x10')]);router[_0x80b7('0x11')](_0x80b7('0xf'),auth[_0x80b7('0x8')](),controller[_0x80b7('0x12')]);router[_0x80b7('0x11')]('/:id/sounds/:id2',auth[_0x80b7('0x8')](),controller[_0x80b7('0x13')]);module['exports']=router;
\ No newline at end of file
index 9c7fdfc..e8a7fe2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x523d=['STRING','name','ENUM','custom','files','quietmp3','mp3','alpha','sequelize','exports'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0x523d,0x76));var _0xd523=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x523d[_0x321bb2];return _0x9c12ed;};'use strict';var Sequelize=require(_0xd523('0x0'));module[_0xd523('0x1')]={'name':{'type':Sequelize[_0xd523('0x2')],'allowNull':![],'unique':_0xd523('0x3')},'mode':{'type':Sequelize[_0xd523('0x4')](_0xd523('0x5'),_0xd523('0x6'),'mp3nb','quietmp3nb',_0xd523('0x7'),_0xd523('0x8')),'allowNull':!![],'defaultValue':_0xd523('0x6')},'directory':{'type':Sequelize[_0xd523('0x2')],'allowNull':!![]},'application':{'type':Sequelize[_0xd523('0x2')],'allowNull':!![]},'digit':{'type':Sequelize[_0xd523('0x2')],'allowNull':!![]},'sort':{'type':Sequelize[_0xd523('0x2')],'allowNull':!![],'defaultValue':_0xd523('0x9')},'format':{'type':Sequelize[_0xd523('0x2')],'allowNull':!![]},'stamp':{'type':'TIMESTAMP'},'defaultEntry':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0}};
\ No newline at end of file
+var _0x1728=['name','ENUM','custom','files','quietmp3nb','quietmp3','mp3','alpha','exports','STRING'];(function(_0x5db129,_0x151303){var _0x5ec143=function(_0x245b33){while(--_0x245b33){_0x5db129['push'](_0x5db129['shift']());}};_0x5ec143(++_0x151303);}(_0x1728,0x1f2));var _0x8172=function(_0x446337,_0x22307a){_0x446337=_0x446337-0x0;var _0x45a361=_0x1728[_0x446337];return _0x45a361;};'use strict';var Sequelize=require('sequelize');module[_0x8172('0x0')]={'name':{'type':Sequelize[_0x8172('0x1')],'allowNull':![],'unique':_0x8172('0x2')},'mode':{'type':Sequelize[_0x8172('0x3')](_0x8172('0x4'),_0x8172('0x5'),'mp3nb',_0x8172('0x6'),_0x8172('0x7'),_0x8172('0x8')),'allowNull':!![],'defaultValue':_0x8172('0x5')},'directory':{'type':Sequelize['STRING'],'allowNull':!![]},'application':{'type':Sequelize['STRING'],'allowNull':!![]},'digit':{'type':Sequelize[_0x8172('0x1')],'allowNull':!![]},'sort':{'type':Sequelize[_0x8172('0x1')],'allowNull':!![],'defaultValue':_0x8172('0x9')},'format':{'type':Sequelize[_0x8172('0x1')],'allowNull':!![]},'stamp':{'type':'TIMESTAMP'},'defaultEntry':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0}};
\ No newline at end of file
index 582a36d..9192b28 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e8e=['query','keys','filters','model','attributes','intersection','fields','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','count','includeAll','findAll','rows','catch','show','params','length','include','update','body','create','sequelize','transaction','mode','files','directory','join','root','server/files/moh','mkdirSync','0777','role','user','UserProfileSection','find','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','readdirSync','unlinkSync','rmdirSync','ValidationError','message','addSound','Sound','save_name','converted_format','createdAt','server/files/sounds/converted','%s.%s','basename','extname','format','symlinkSync','Sequelize','removeSound','findOne','id2','getSounds','html-pdf','rimraf','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','api','../../config/environment','../../mysqldb','sendStatus','status','json','offset','set','Content-Range','apply','save','then','destroy','get','MusicOnHolds','UserProfileResource','end','error','stack','name','send','VoiceMusicOnHold','rawAttributes'];(function(_0x2d8bbe,_0x5824ec){var _0x211cce=function(_0x5d2048){while(--_0x5d2048){_0x2d8bbe['push'](_0x2d8bbe['shift']());}};_0x211cce(++_0x5824ec);}(_0x4e8e,0x1a0));var _0xe4e8=function(_0x1baee8,_0x2ac42e){_0x1baee8=_0x1baee8-0x0;var _0x28ed78=_0x4e8e[_0x1baee8];return _0x28ed78;};'use strict';var pdf=require(_0xe4e8('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xe4e8('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xe4e8('0x2'));var rp=require(_0xe4e8('0x3'));var moment=require(_0xe4e8('0x4'));var BPromise=require(_0xe4e8('0x5'));var Mustache=require(_0xe4e8('0x6'));var util=require(_0xe4e8('0x7'));var path=require(_0xe4e8('0x8'));var sox=require('sox');var csv=require(_0xe4e8('0x9'));var ejs=require(_0xe4e8('0xa'));var fs=require('fs');var _=require(_0xe4e8('0xb'));var squel=require(_0xe4e8('0xc'));var crypto=require(_0xe4e8('0xd'));var jsforce=require(_0xe4e8('0xe'));var deskjs=require(_0xe4e8('0xf'));var toCsv=require(_0xe4e8('0x9'));var querystring=require(_0xe4e8('0x10'));var Papa=require(_0xe4e8('0x11'));var Redis=require(_0xe4e8('0x12'));var authService=require(_0xe4e8('0x13'));var qs=require(_0xe4e8('0x14'));var hardwareService=require('../../config/license/hardware');var logger=require('../../config/logger')(_0xe4e8('0x15'));var utils=require('../../config/utils');var config=require(_0xe4e8('0x16'));var db=require(_0xe4e8('0x17'))['db'];function respondWithStatusCode(_0x489719,_0x4ab4cf){_0x4ab4cf=_0x4ab4cf||0xcc;return function(_0x1d64e6){if(_0x1d64e6){return _0x489719[_0xe4e8('0x18')](_0x4ab4cf);}return _0x489719[_0xe4e8('0x19')](_0x4ab4cf)['end']();};}function respondWithResult(_0x33686d,_0x544a91){_0x544a91=_0x544a91||0xc8;return function(_0x22ac24){if(_0x22ac24){return _0x33686d[_0xe4e8('0x19')](_0x544a91)[_0xe4e8('0x1a')](_0x22ac24);}};}function respondWithFilteredResult(_0x1fc29a,_0x50a8ef){return function(_0x146da0){if(_0x146da0){var _0x32a4aa=_0x146da0['count'],_0x67f328=_0x50a8ef[_0xe4e8('0x1b')],_0x2e3802=_0x50a8ef[_0xe4e8('0x1b')]+_0x50a8ef['limit'],_0x3b74f3;if(_0x2e3802>=_0x32a4aa){_0x2e3802=_0x32a4aa;_0x3b74f3=0xc8;}else{_0x3b74f3=0xce;}_0x1fc29a[_0xe4e8('0x19')](_0x3b74f3);return _0x1fc29a[_0xe4e8('0x1c')](_0xe4e8('0x1d'),_0x67f328+'-'+_0x2e3802+'/'+_0x32a4aa)[_0xe4e8('0x1a')](_0x146da0);}return null;};}function patchUpdates(_0x3fab05){return function(_0x19402f){try{jsonpatch[_0xe4e8('0x1e')](_0x19402f,_0x3fab05,!![]);}catch(_0x52a188){return BPromise['reject'](_0x52a188);}return _0x19402f[_0xe4e8('0x1f')]();};}function saveUpdates(_0x154dff,_0xa7ee05){return function(_0xaf5514){if(_0xaf5514){return _0xaf5514['update'](_0x154dff)[_0xe4e8('0x20')](function(_0x54aa10){return _0x54aa10;});}return null;};}function removeEntity(_0x5eb818,_0x1769e5){return function(_0x4713d4){if(_0x4713d4){return _0x4713d4[_0xe4e8('0x21')]()[_0xe4e8('0x20')](function(){var _0x20db38=_0x4713d4[_0xe4e8('0x22')]({'plain':!![]});var _0x4b3527=_0xe4e8('0x23');return db[_0xe4e8('0x24')][_0xe4e8('0x21')]({'where':{'type':_0x4b3527,'resourceId':_0x20db38['id']}})[_0xe4e8('0x20')](function(){return _0x4713d4;});})[_0xe4e8('0x20')](function(){_0x5eb818[_0xe4e8('0x19')](0xcc)[_0xe4e8('0x25')]();});}};}function handleEntityNotFound(_0x4b22a4,_0x1c228d){return function(_0x50d864){if(!_0x50d864){_0x4b22a4['sendStatus'](0x194);}return _0x50d864;};}function handleError(_0x51f9c7,_0x4e9523){_0x4e9523=_0x4e9523||0x1f4;return function(_0x5ed857){logger[_0xe4e8('0x26')](_0x5ed857[_0xe4e8('0x27')]);if(_0x5ed857[_0xe4e8('0x28')]){delete _0x5ed857[_0xe4e8('0x28')];}_0x51f9c7[_0xe4e8('0x19')](_0x4e9523)[_0xe4e8('0x29')](_0x5ed857);};}exports['index']=function(_0x2737ff,_0x3b58e9){var _0x5d3b28={},_0x5f60c3={},_0x4627b3={'count':0x0,'rows':[]};var _0x1486dc=db[_0xe4e8('0x2a')][_0xe4e8('0x2b')];_0x5f60c3['model']=_['keys'](_0x1486dc);_0x5f60c3[_0xe4e8('0x2c')]=_[_0xe4e8('0x2d')](_0x2737ff[_0xe4e8('0x2c')]);_0x5f60c3[_0xe4e8('0x2e')]=_['intersection'](_0x5f60c3[_0xe4e8('0x2f')],_0x5f60c3[_0xe4e8('0x2c')]);_0x5d3b28[_0xe4e8('0x30')]=_[_0xe4e8('0x31')](_0x5f60c3[_0xe4e8('0x2f')],qs[_0xe4e8('0x32')](_0x2737ff[_0xe4e8('0x2c')][_0xe4e8('0x32')]));_0x5d3b28[_0xe4e8('0x30')]=_0x5d3b28[_0xe4e8('0x30')]['length']?_0x5d3b28[_0xe4e8('0x30')]:_0x5f60c3['model'];if(!_0x2737ff[_0xe4e8('0x2c')][_0xe4e8('0x33')](_0xe4e8('0x34'))){_0x5d3b28['limit']=qs[_0xe4e8('0x35')](_0x2737ff[_0xe4e8('0x2c')][_0xe4e8('0x35')]);_0x5d3b28[_0xe4e8('0x1b')]=qs[_0xe4e8('0x1b')](_0x2737ff[_0xe4e8('0x2c')][_0xe4e8('0x1b')]);}_0x5d3b28[_0xe4e8('0x36')]=qs['sort'](_0x2737ff[_0xe4e8('0x2c')][_0xe4e8('0x37')]);_0x5d3b28[_0xe4e8('0x38')]=qs[_0xe4e8('0x2e')](_[_0xe4e8('0x39')](_0x2737ff[_0xe4e8('0x2c')],_0x5f60c3['filters']));if(_0x2737ff[_0xe4e8('0x2c')][_0xe4e8('0x3a')]){_0x5d3b28[_0xe4e8('0x38')]=_[_0xe4e8('0x3b')](_0x5d3b28[_0xe4e8('0x38')],{'$or':_[_0xe4e8('0x3c')](_0x1486dc,function(_0x6496d2){if(_0x6496d2[_0xe4e8('0x3d')][_0xe4e8('0x3e')]!==_0xe4e8('0x3f')){var _0x526370={};_0x526370[_0x6496d2[_0xe4e8('0x40')]]={'$like':'%'+_0x2737ff[_0xe4e8('0x2c')][_0xe4e8('0x3a')]+'%'};return _0x526370;}})});}_0x5d3b28=_[_0xe4e8('0x3b')]({},_0x5d3b28,_0x2737ff[_0xe4e8('0x41')]);var _0x44056e={'where':_0x5d3b28[_0xe4e8('0x38')]};return db[_0xe4e8('0x2a')][_0xe4e8('0x42')](_0x44056e)['then'](function(_0x1288b9){_0x4627b3[_0xe4e8('0x42')]=_0x1288b9;if(_0x2737ff[_0xe4e8('0x2c')][_0xe4e8('0x43')]){_0x5d3b28['include']=[{'all':!![]}];}return db[_0xe4e8('0x2a')][_0xe4e8('0x44')](_0x5d3b28);})[_0xe4e8('0x20')](function(_0x13d44b){_0x4627b3[_0xe4e8('0x45')]=_0x13d44b;return _0x4627b3;})[_0xe4e8('0x20')](respondWithFilteredResult(_0x3b58e9,_0x5d3b28))[_0xe4e8('0x46')](handleError(_0x3b58e9,null));};exports[_0xe4e8('0x47')]=function(_0x51c313,_0x36aeb5){var _0x5ce5ee={'raw':![],'where':{'id':_0x51c313[_0xe4e8('0x48')]['id']}},_0x2dfe6a={};_0x2dfe6a['model']=_[_0xe4e8('0x2d')](db[_0xe4e8('0x2a')][_0xe4e8('0x2b')]);_0x2dfe6a['query']=_['keys'](_0x51c313[_0xe4e8('0x2c')]);_0x2dfe6a[_0xe4e8('0x2e')]=_[_0xe4e8('0x31')](_0x2dfe6a[_0xe4e8('0x2f')],_0x2dfe6a[_0xe4e8('0x2c')]);_0x5ce5ee[_0xe4e8('0x30')]=_[_0xe4e8('0x31')](_0x2dfe6a[_0xe4e8('0x2f')],qs[_0xe4e8('0x32')](_0x51c313[_0xe4e8('0x2c')]['fields']));_0x5ce5ee[_0xe4e8('0x30')]=_0x5ce5ee[_0xe4e8('0x30')][_0xe4e8('0x49')]?_0x5ce5ee['attributes']:_0x2dfe6a[_0xe4e8('0x2f')];if(_0x51c313[_0xe4e8('0x2c')][_0xe4e8('0x43')]){_0x5ce5ee[_0xe4e8('0x4a')]=[{'all':!![]}];}_0x5ce5ee=_[_0xe4e8('0x3b')]({},_0x5ce5ee,_0x51c313[_0xe4e8('0x41')]);return db[_0xe4e8('0x2a')]['find'](_0x5ce5ee)[_0xe4e8('0x20')](handleEntityNotFound(_0x36aeb5,null))[_0xe4e8('0x20')](respondWithResult(_0x36aeb5,null))[_0xe4e8('0x46')](handleError(_0x36aeb5,null));};exports[_0xe4e8('0x4b')]=function(_0x3b7000,_0x328fae){if(_0x3b7000[_0xe4e8('0x4c')]['id']){delete _0x3b7000[_0xe4e8('0x4c')]['id'];}return db[_0xe4e8('0x2a')]['find']({'where':{'id':_0x3b7000[_0xe4e8('0x48')]['id']}})[_0xe4e8('0x20')](handleEntityNotFound(_0x328fae,null))[_0xe4e8('0x20')](saveUpdates(_0x3b7000['body'],null))[_0xe4e8('0x20')](respondWithResult(_0x328fae,null))[_0xe4e8('0x46')](handleError(_0x328fae,null));};exports[_0xe4e8('0x4d')]=function(_0x416a6b,_0x10df94,_0x1b3ff4){return db[_0xe4e8('0x4e')][_0xe4e8('0x4f')](function(_0x48aaff){if(_0x416a6b[_0xe4e8('0x4c')][_0xe4e8('0x50')]===_0xe4e8('0x51')){_0x416a6b['body'][_0xe4e8('0x52')]=path[_0xe4e8('0x53')](config[_0xe4e8('0x54')],_0xe4e8('0x55'),_0x416a6b['body']['name']);}return db['VoiceMusicOnHold']['create'](_0x416a6b['body'],{'transaction':_0x48aaff})['then'](function(_0x21ff02){if(_0x416a6b[_0xe4e8('0x4c')]['mode']===_0xe4e8('0x51')){fs[_0xe4e8('0x56')](_0x21ff02[_0xe4e8('0x52')],parseInt(_0xe4e8('0x57'),0x8));}var _0x19fcfe=_0x416a6b['user']['get']({'plain':!![]});if(!_0x19fcfe)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x19fcfe[_0xe4e8('0x58')]===_0xe4e8('0x59')){var _0x4ec437=_0x21ff02[_0xe4e8('0x22')]({'plain':!![]});return db[_0xe4e8('0x5a')][_0xe4e8('0x5b')]({'where':{'name':_0xe4e8('0x23'),'userProfileId':_0x19fcfe['userProfileId']},'raw':!![]})[_0xe4e8('0x20')](function(_0x486fcb){if(_0x486fcb&&_0x486fcb[_0xe4e8('0x5c')]===0x0){return db[_0xe4e8('0x24')]['create']({'name':_0x4ec437[_0xe4e8('0x28')],'resourceId':_0x4ec437['id'],'type':_0x486fcb[_0xe4e8('0x28')],'sectionId':_0x486fcb['id']},{})[_0xe4e8('0x20')](function(){return _0x21ff02;});}else{return _0x21ff02;}})[_0xe4e8('0x46')](function(_0x285a00){logger[_0xe4e8('0x26')](_0xe4e8('0x5d'),_0x285a00);});}return _0x21ff02;});})['then'](respondWithResult(_0x10df94,0xc9))[_0xe4e8('0x46')](handleError(_0x10df94,null));};exports[_0xe4e8('0x21')]=function(_0x54fad9,_0x3f08eb,_0x53d0f3){var _0x5c7ae0;return db[_0xe4e8('0x2a')][_0xe4e8('0x5b')]({'where':{'id':_0x54fad9[_0xe4e8('0x48')]['id']}})[_0xe4e8('0x20')](function(_0x5dc18f){if(_0x5dc18f){return db[_0xe4e8('0x4e')][_0xe4e8('0x4f')](function(_0xeb7c49){return _0x5dc18f[_0xe4e8('0x21')]({'transaction':_0xeb7c49,'raw':!![]})['then'](function(_0x516379){if(_0x516379[_0xe4e8('0x52')]){fs[_0xe4e8('0x5e')](_0x516379[_0xe4e8('0x52')])['forEach'](function(_0x437e1f){fs[_0xe4e8('0x5f')](path[_0xe4e8('0x53')](_0x516379['directory'],_0x437e1f));});fs[_0xe4e8('0x60')](_0x516379[_0xe4e8('0x52')]);}return _0x516379;});})[_0xe4e8('0x46')](function(_0x21d04a){throw new db['Sequelize'][(_0xe4e8('0x61'))](_0x21d04a[_0xe4e8('0x62')]);});}})[_0xe4e8('0x20')](handleEntityNotFound(_0x3f08eb,null))[_0xe4e8('0x20')](removeEntity(_0x3f08eb,null))[_0xe4e8('0x46')](handleError(_0x3f08eb,null));};exports[_0xe4e8('0x63')]=function(_0xbf7680,_0x3072c9,_0x350ead){return db[_0xe4e8('0x4e')][_0xe4e8('0x4f')](function(_0xb8a90c){var _0x24092e;return db[_0xe4e8('0x2a')][_0xe4e8('0x5b')]({'where':{'id':_0xbf7680[_0xe4e8('0x48')]['id']}})[_0xe4e8('0x20')](function(_0x231bab){if(_0x231bab){_0x24092e=_0x231bab;return _0x231bab[_0xe4e8('0x63')](_0xbf7680[_0xe4e8('0x4c')]['id'],{'transaction':_0xb8a90c});}})[_0xe4e8('0x20')](function(_0x2394b1){if(_0x2394b1){return db[_0xe4e8('0x64')]['findOne']({'where':{'id':_0xbf7680['body']['id']},'attributes':['id',_0xe4e8('0x28'),_0xe4e8('0x65'),_0xe4e8('0x66'),_0xe4e8('0x67')],'raw':!![]});}})[_0xe4e8('0x20')](function(_0x3f6223){if(_0x3f6223){var _0x5e1395=path[_0xe4e8('0x53')](config[_0xe4e8('0x54')],_0xe4e8('0x68'),util['format'](_0xe4e8('0x69'),path[_0xe4e8('0x6a')](_0x3f6223['save_name'],path[_0xe4e8('0x6b')](_0x3f6223[_0xe4e8('0x65')])),_0x3f6223[_0xe4e8('0x66')]));var _0x1d7fc7=path[_0xe4e8('0x53')](config[_0xe4e8('0x54')],_0xe4e8('0x55'),_0x24092e[_0xe4e8('0x28')],util[_0xe4e8('0x6c')](_0xe4e8('0x69'),_0x3f6223[_0xe4e8('0x28')],_0x3f6223[_0xe4e8('0x66')]));fs[_0xe4e8('0x6d')](_0x5e1395,_0x1d7fc7);return _0x3f6223;}})[_0xe4e8('0x46')](function(_0x87d11f){throw new db[(_0xe4e8('0x6e'))]['ValidationError'](_0x87d11f[_0xe4e8('0x62')]);});})['then'](handleEntityNotFound(_0x3072c9,null))[_0xe4e8('0x20')](respondWithResult(_0x3072c9,0xc9))['catch'](handleError(_0x3072c9,null));};exports[_0xe4e8('0x6f')]=function(_0x5971b2,_0x2fc38d,_0x361269){return db['sequelize']['transaction'](function(_0x2388ff){var _0x35ab7c;return db['VoiceMusicOnHold'][_0xe4e8('0x70')]({'where':{'id':_0x5971b2[_0xe4e8('0x48')]['id']}})[_0xe4e8('0x20')](handleEntityNotFound(_0x2fc38d,null))[_0xe4e8('0x20')](function(_0x252556){if(_0x252556){_0x35ab7c=_0x252556;return _0x252556[_0xe4e8('0x6f')](_0x5971b2[_0xe4e8('0x48')][_0xe4e8('0x71')]);}})['then'](function(_0x39b386){if(_0x39b386){return db[_0xe4e8('0x64')][_0xe4e8('0x70')]({'where':{'id':_0x5971b2[_0xe4e8('0x48')][_0xe4e8('0x71')]},'attributes':['id',_0xe4e8('0x28'),_0xe4e8('0x65'),_0xe4e8('0x66'),_0xe4e8('0x67')],'raw':!![]});}})[_0xe4e8('0x20')](function(_0x3d481e){if(_0x3d481e){fs[_0xe4e8('0x5f')](path['join'](_0x35ab7c['directory'],util[_0xe4e8('0x6c')](_0xe4e8('0x69'),_0x3d481e['name'],_0x3d481e[_0xe4e8('0x66')])));return _0x3d481e;}})[_0xe4e8('0x46')](function(_0x4849d1){throw new db['Sequelize']['ValidationError'](_0x4849d1[_0xe4e8('0x62')]);});})['then'](handleEntityNotFound(_0x2fc38d,null))[_0xe4e8('0x20')](respondWithStatusCode(_0x2fc38d,0xcc))['catch'](handleError(_0x2fc38d,null));};exports['getSounds']=function(_0x222884,_0x50f63d,_0x37d6f9){var _0x5eb3eb={};var _0x3a6354={};var _0xbcdd23;var _0x59de21;return db['VoiceMusicOnHold'][_0xe4e8('0x70')]({'where':{'id':_0x222884[_0xe4e8('0x48')]['id']}})[_0xe4e8('0x20')](handleEntityNotFound(_0x50f63d,null))[_0xe4e8('0x20')](function(_0x1b0b81){if(_0x1b0b81){_0xbcdd23=_0x1b0b81;_0x3a6354['model']=_[_0xe4e8('0x2d')](db['Sound'][_0xe4e8('0x2b')]);_0x3a6354[_0xe4e8('0x2c')]=_['keys'](_0x222884[_0xe4e8('0x2c')]);_0x3a6354[_0xe4e8('0x2e')]=_[_0xe4e8('0x31')](_0x3a6354[_0xe4e8('0x2f')],_0x3a6354[_0xe4e8('0x2c')]);_0x5eb3eb['attributes']=_[_0xe4e8('0x31')](_0x3a6354[_0xe4e8('0x2f')],qs[_0xe4e8('0x32')](_0x222884[_0xe4e8('0x2c')]['fields']));_0x5eb3eb[_0xe4e8('0x30')]=_0x5eb3eb['attributes']['length']?_0x5eb3eb[_0xe4e8('0x30')]:_0x3a6354[_0xe4e8('0x2f')];_0x5eb3eb[_0xe4e8('0x36')]=qs[_0xe4e8('0x37')](_0x222884[_0xe4e8('0x2c')][_0xe4e8('0x37')]);_0x5eb3eb[_0xe4e8('0x38')]=qs[_0xe4e8('0x2e')](_[_0xe4e8('0x39')](_0x222884[_0xe4e8('0x2c')],_0x3a6354[_0xe4e8('0x2e')]));if(_0x222884[_0xe4e8('0x2c')][_0xe4e8('0x3a')]){_0x5eb3eb[_0xe4e8('0x38')]=_[_0xe4e8('0x3b')](_0x5eb3eb[_0xe4e8('0x38')],{'$or':_[_0xe4e8('0x3c')](_0x5eb3eb[_0xe4e8('0x30')],function(_0x132f2b){var _0x1665f1={};_0x1665f1[_0x132f2b]={'$like':'%'+_0x222884[_0xe4e8('0x2c')][_0xe4e8('0x3a')]+'%'};return _0x1665f1;})});}_0x5eb3eb=_[_0xe4e8('0x3b')]({},_0x5eb3eb,_0x222884['options']);return _0xbcdd23[_0xe4e8('0x72')](_0x5eb3eb);}})['then'](function(_0x315e6d){if(_0x315e6d){_0x59de21=_0x315e6d['length'];if(!_0x222884[_0xe4e8('0x2c')][_0xe4e8('0x33')](_0xe4e8('0x34'))){_0x5eb3eb['limit']=qs[_0xe4e8('0x35')](_0x222884[_0xe4e8('0x2c')][_0xe4e8('0x35')]);_0x5eb3eb[_0xe4e8('0x1b')]=qs[_0xe4e8('0x1b')](_0x222884[_0xe4e8('0x2c')][_0xe4e8('0x1b')]);}return _0xbcdd23[_0xe4e8('0x72')](_0x5eb3eb);}})[_0xe4e8('0x20')](function(_0x1d90d7){if(_0x1d90d7){return _0x1d90d7?{'count':_0x59de21,'rows':_0x1d90d7}:null;}})[_0xe4e8('0x20')](respondWithResult(_0x50f63d,null))[_0xe4e8('0x46')](handleError(_0x50f63d,null));};
\ No newline at end of file
+var _0xc972=['catch','show','params','includeAll','include','options','find','body','create','sequelize','transaction','mode','files','directory','join','server/files/moh','mkdirSync','0777','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','userProfileId','autoAssociation','UserProfileResource','error','readdirSync','unlinkSync','rmdirSync','Sequelize','ValidationError','message','addSound','Sound','findOne','save_name','converted_format','createdAt','root','server/files/sounds/converted','format','%s.%s','basename','extname','symlinkSync','removeSound','id2','getSounds','html-pdf','eml-format','rimraf','request-promise','mustache','util','path','sox','to-csv','lodash','squel','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','get','MusicOnHolds','stack','name','index','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','key','VIRTUAL','field','VoiceMusicOnHold','findAll','rows'];(function(_0x57a312,_0x1cb2bb){var _0x32ab70=function(_0x2d0882){while(--_0x2d0882){_0x57a312['push'](_0x57a312['shift']());}};_0x32ab70(++_0x1cb2bb);}(_0xc972,0x1e2));var _0x2c97=function(_0x12a356,_0x496629){_0x12a356=_0x12a356-0x0;var _0x5d1414=_0xc972[_0x12a356];return _0x5d1414;};'use strict';var pdf=require(_0x2c97('0x0'));var emlformat=require(_0x2c97('0x1'));var rimraf=require(_0x2c97('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x2c97('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x2c97('0x4'));var util=require(_0x2c97('0x5'));var path=require(_0x2c97('0x6'));var sox=require(_0x2c97('0x7'));var csv=require(_0x2c97('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x2c97('0x9'));var squel=require(_0x2c97('0xa'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x2c97('0xb'));var toCsv=require('to-csv');var querystring=require(_0x2c97('0xc'));var Papa=require(_0x2c97('0xd'));var Redis=require('ioredis');var authService=require(_0x2c97('0xe'));var qs=require(_0x2c97('0xf'));var hardwareService=require(_0x2c97('0x10'));var logger=require(_0x2c97('0x11'))(_0x2c97('0x12'));var utils=require(_0x2c97('0x13'));var config=require('../../config/environment');var db=require(_0x2c97('0x14'))['db'];function respondWithStatusCode(_0x103f1a,_0xa0ed5e){_0xa0ed5e=_0xa0ed5e||0xcc;return function(_0x2e1698){if(_0x2e1698){return _0x103f1a[_0x2c97('0x15')](_0xa0ed5e);}return _0x103f1a[_0x2c97('0x16')](_0xa0ed5e)[_0x2c97('0x17')]();};}function respondWithResult(_0x1acb5b,_0x41290a){_0x41290a=_0x41290a||0xc8;return function(_0x2ee0eb){if(_0x2ee0eb){return _0x1acb5b[_0x2c97('0x16')](_0x41290a)[_0x2c97('0x18')](_0x2ee0eb);}};}function respondWithFilteredResult(_0x36ec89,_0x101fd3){return function(_0x205cf9){if(_0x205cf9){var _0x44b91b=_0x205cf9[_0x2c97('0x19')],_0x160711=_0x101fd3['offset'],_0x487da5=_0x101fd3[_0x2c97('0x1a')]+_0x101fd3[_0x2c97('0x1b')],_0x37e31c;if(_0x487da5>=_0x44b91b){_0x487da5=_0x44b91b;_0x37e31c=0xc8;}else{_0x37e31c=0xce;}_0x36ec89[_0x2c97('0x16')](_0x37e31c);return _0x36ec89[_0x2c97('0x1c')](_0x2c97('0x1d'),_0x160711+'-'+_0x487da5+'/'+_0x44b91b)[_0x2c97('0x18')](_0x205cf9);}return null;};}function patchUpdates(_0x453acb){return function(_0x293f8c){try{jsonpatch['apply'](_0x293f8c,_0x453acb,!![]);}catch(_0x17c778){return BPromise[_0x2c97('0x1e')](_0x17c778);}return _0x293f8c[_0x2c97('0x1f')]();};}function saveUpdates(_0x58910b,_0x181d58){return function(_0x65b032){if(_0x65b032){return _0x65b032[_0x2c97('0x20')](_0x58910b)[_0x2c97('0x21')](function(_0x325803){return _0x325803;});}return null;};}function removeEntity(_0x54b2d4,_0x4fb226){return function(_0x37b27d){if(_0x37b27d){return _0x37b27d[_0x2c97('0x22')]()[_0x2c97('0x21')](function(){var _0x3f802b=_0x37b27d[_0x2c97('0x23')]({'plain':!![]});var _0x7ea544=_0x2c97('0x24');return db['UserProfileResource'][_0x2c97('0x22')]({'where':{'type':_0x7ea544,'resourceId':_0x3f802b['id']}})['then'](function(){return _0x37b27d;});})[_0x2c97('0x21')](function(){_0x54b2d4[_0x2c97('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3eaf59,_0x501bf2){return function(_0x204f9e){if(!_0x204f9e){_0x3eaf59[_0x2c97('0x15')](0x194);}return _0x204f9e;};}function handleError(_0x29152a,_0x714a95){_0x714a95=_0x714a95||0x1f4;return function(_0x4a7c92){logger['error'](_0x4a7c92[_0x2c97('0x25')]);if(_0x4a7c92['name']){delete _0x4a7c92[_0x2c97('0x26')];}_0x29152a[_0x2c97('0x16')](_0x714a95)['send'](_0x4a7c92);};}exports[_0x2c97('0x27')]=function(_0x172dab,_0x1874b6){var _0x43b539={},_0xc8dea2={},_0x34ebcd={'count':0x0,'rows':[]};var _0x4eb490=db['VoiceMusicOnHold'][_0x2c97('0x28')];_0xc8dea2[_0x2c97('0x29')]=_[_0x2c97('0x2a')](_0x4eb490);_0xc8dea2[_0x2c97('0x2b')]=_[_0x2c97('0x2a')](_0x172dab[_0x2c97('0x2b')]);_0xc8dea2[_0x2c97('0x2c')]=_[_0x2c97('0x2d')](_0xc8dea2[_0x2c97('0x29')],_0xc8dea2[_0x2c97('0x2b')]);_0x43b539['attributes']=_[_0x2c97('0x2d')](_0xc8dea2['model'],qs[_0x2c97('0x2e')](_0x172dab[_0x2c97('0x2b')][_0x2c97('0x2e')]));_0x43b539[_0x2c97('0x2f')]=_0x43b539['attributes'][_0x2c97('0x30')]?_0x43b539[_0x2c97('0x2f')]:_0xc8dea2['model'];if(!_0x172dab[_0x2c97('0x2b')][_0x2c97('0x31')](_0x2c97('0x32'))){_0x43b539['limit']=qs['limit'](_0x172dab[_0x2c97('0x2b')][_0x2c97('0x1b')]);_0x43b539[_0x2c97('0x1a')]=qs[_0x2c97('0x1a')](_0x172dab[_0x2c97('0x2b')]['offset']);}_0x43b539[_0x2c97('0x33')]=qs[_0x2c97('0x34')](_0x172dab[_0x2c97('0x2b')]['sort']);_0x43b539[_0x2c97('0x35')]=qs['filters'](_['pick'](_0x172dab[_0x2c97('0x2b')],_0xc8dea2['filters']));if(_0x172dab[_0x2c97('0x2b')][_0x2c97('0x36')]){_0x43b539['where']=_[_0x2c97('0x37')](_0x43b539[_0x2c97('0x35')],{'$or':_[_0x2c97('0x38')](_0x4eb490,function(_0x272a29){if(_0x272a29['type'][_0x2c97('0x39')]!==_0x2c97('0x3a')){var _0x38bb70={};_0x38bb70[_0x272a29[_0x2c97('0x3b')]]={'$like':'%'+_0x172dab['query'][_0x2c97('0x36')]+'%'};return _0x38bb70;}})});}_0x43b539=_[_0x2c97('0x37')]({},_0x43b539,_0x172dab['options']);var _0x1ce466={'where':_0x43b539['where']};return db['VoiceMusicOnHold'][_0x2c97('0x19')](_0x1ce466)[_0x2c97('0x21')](function(_0x28acf9){_0x34ebcd[_0x2c97('0x19')]=_0x28acf9;if(_0x172dab[_0x2c97('0x2b')]['includeAll']){_0x43b539['include']=[{'all':!![]}];}return db[_0x2c97('0x3c')][_0x2c97('0x3d')](_0x43b539);})[_0x2c97('0x21')](function(_0x4a3793){_0x34ebcd[_0x2c97('0x3e')]=_0x4a3793;return _0x34ebcd;})[_0x2c97('0x21')](respondWithFilteredResult(_0x1874b6,_0x43b539))[_0x2c97('0x3f')](handleError(_0x1874b6,null));};exports[_0x2c97('0x40')]=function(_0x2d92f9,_0x2e5485){var _0x28427f={'raw':![],'where':{'id':_0x2d92f9[_0x2c97('0x41')]['id']}},_0x1a6934={};_0x1a6934[_0x2c97('0x29')]=_[_0x2c97('0x2a')](db[_0x2c97('0x3c')][_0x2c97('0x28')]);_0x1a6934['query']=_['keys'](_0x2d92f9[_0x2c97('0x2b')]);_0x1a6934[_0x2c97('0x2c')]=_[_0x2c97('0x2d')](_0x1a6934[_0x2c97('0x29')],_0x1a6934[_0x2c97('0x2b')]);_0x28427f['attributes']=_[_0x2c97('0x2d')](_0x1a6934[_0x2c97('0x29')],qs[_0x2c97('0x2e')](_0x2d92f9[_0x2c97('0x2b')][_0x2c97('0x2e')]));_0x28427f[_0x2c97('0x2f')]=_0x28427f[_0x2c97('0x2f')][_0x2c97('0x30')]?_0x28427f[_0x2c97('0x2f')]:_0x1a6934[_0x2c97('0x29')];if(_0x2d92f9[_0x2c97('0x2b')][_0x2c97('0x42')]){_0x28427f[_0x2c97('0x43')]=[{'all':!![]}];}_0x28427f=_[_0x2c97('0x37')]({},_0x28427f,_0x2d92f9[_0x2c97('0x44')]);return db['VoiceMusicOnHold'][_0x2c97('0x45')](_0x28427f)[_0x2c97('0x21')](handleEntityNotFound(_0x2e5485,null))['then'](respondWithResult(_0x2e5485,null))[_0x2c97('0x3f')](handleError(_0x2e5485,null));};exports[_0x2c97('0x20')]=function(_0x36ade2,_0x16c420){if(_0x36ade2[_0x2c97('0x46')]['id']){delete _0x36ade2['body']['id'];}return db[_0x2c97('0x3c')][_0x2c97('0x45')]({'where':{'id':_0x36ade2[_0x2c97('0x41')]['id']}})[_0x2c97('0x21')](handleEntityNotFound(_0x16c420,null))['then'](saveUpdates(_0x36ade2['body'],null))[_0x2c97('0x21')](respondWithResult(_0x16c420,null))[_0x2c97('0x3f')](handleError(_0x16c420,null));};exports[_0x2c97('0x47')]=function(_0x46c582,_0x2a9fa9,_0x2e16c4){return db[_0x2c97('0x48')][_0x2c97('0x49')](function(_0x4588d6){if(_0x46c582['body'][_0x2c97('0x4a')]===_0x2c97('0x4b')){_0x46c582[_0x2c97('0x46')][_0x2c97('0x4c')]=path[_0x2c97('0x4d')](config['root'],_0x2c97('0x4e'),_0x46c582[_0x2c97('0x46')][_0x2c97('0x26')]);}return db['VoiceMusicOnHold'][_0x2c97('0x47')](_0x46c582[_0x2c97('0x46')],{'transaction':_0x4588d6})[_0x2c97('0x21')](function(_0x2cfa1a){if(_0x46c582[_0x2c97('0x46')]['mode']===_0x2c97('0x4b')){fs[_0x2c97('0x4f')](_0x2cfa1a[_0x2c97('0x4c')],parseInt(_0x2c97('0x50'),0x8));}var _0x59e32e=_0x46c582[_0x2c97('0x51')][_0x2c97('0x23')]({'plain':!![]});if(!_0x59e32e)throw new Error(_0x2c97('0x52'));if(_0x59e32e['role']==='user'){var _0x44a47e=_0x2cfa1a['get']({'plain':!![]});return db['UserProfileSection'][_0x2c97('0x45')]({'where':{'name':_0x2c97('0x24'),'userProfileId':_0x59e32e[_0x2c97('0x53')]},'raw':!![]})[_0x2c97('0x21')](function(_0x599c45){if(_0x599c45&&_0x599c45[_0x2c97('0x54')]===0x0){return db[_0x2c97('0x55')][_0x2c97('0x47')]({'name':_0x44a47e[_0x2c97('0x26')],'resourceId':_0x44a47e['id'],'type':_0x599c45[_0x2c97('0x26')],'sectionId':_0x599c45['id']},{})[_0x2c97('0x21')](function(){return _0x2cfa1a;});}else{return _0x2cfa1a;}})[_0x2c97('0x3f')](function(_0x6e4f97){logger[_0x2c97('0x56')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x6e4f97);});}return _0x2cfa1a;});})['then'](respondWithResult(_0x2a9fa9,0xc9))[_0x2c97('0x3f')](handleError(_0x2a9fa9,null));};exports[_0x2c97('0x22')]=function(_0x5bac89,_0xa690a,_0x4f6eed){var _0x14c3b5;return db['VoiceMusicOnHold']['find']({'where':{'id':_0x5bac89[_0x2c97('0x41')]['id']}})[_0x2c97('0x21')](function(_0x45b81f){if(_0x45b81f){return db[_0x2c97('0x48')]['transaction'](function(_0x4373){return _0x45b81f[_0x2c97('0x22')]({'transaction':_0x4373,'raw':!![]})[_0x2c97('0x21')](function(_0x7ef75f){if(_0x7ef75f['directory']){fs[_0x2c97('0x57')](_0x7ef75f['directory'])['forEach'](function(_0x53220d){fs[_0x2c97('0x58')](path[_0x2c97('0x4d')](_0x7ef75f[_0x2c97('0x4c')],_0x53220d));});fs[_0x2c97('0x59')](_0x7ef75f['directory']);}return _0x7ef75f;});})[_0x2c97('0x3f')](function(_0x8fcdea){throw new db[(_0x2c97('0x5a'))][(_0x2c97('0x5b'))](_0x8fcdea[_0x2c97('0x5c')]);});}})[_0x2c97('0x21')](handleEntityNotFound(_0xa690a,null))[_0x2c97('0x21')](removeEntity(_0xa690a,null))[_0x2c97('0x3f')](handleError(_0xa690a,null));};exports[_0x2c97('0x5d')]=function(_0x239e34,_0x259351,_0x206841){return db[_0x2c97('0x48')]['transaction'](function(_0x5c164f){var _0x4343a4;return db[_0x2c97('0x3c')]['find']({'where':{'id':_0x239e34[_0x2c97('0x41')]['id']}})[_0x2c97('0x21')](function(_0x6f6624){if(_0x6f6624){_0x4343a4=_0x6f6624;return _0x6f6624['addSound'](_0x239e34[_0x2c97('0x46')]['id'],{'transaction':_0x5c164f});}})[_0x2c97('0x21')](function(_0x3f0b5a){if(_0x3f0b5a){return db[_0x2c97('0x5e')][_0x2c97('0x5f')]({'where':{'id':_0x239e34['body']['id']},'attributes':['id',_0x2c97('0x26'),_0x2c97('0x60'),_0x2c97('0x61'),_0x2c97('0x62')],'raw':!![]});}})['then'](function(_0x506908){if(_0x506908){var _0x211c6e=path[_0x2c97('0x4d')](config[_0x2c97('0x63')],_0x2c97('0x64'),util[_0x2c97('0x65')](_0x2c97('0x66'),path[_0x2c97('0x67')](_0x506908[_0x2c97('0x60')],path[_0x2c97('0x68')](_0x506908[_0x2c97('0x60')])),_0x506908[_0x2c97('0x61')]));var _0x4301e4=path[_0x2c97('0x4d')](config[_0x2c97('0x63')],_0x2c97('0x4e'),_0x4343a4[_0x2c97('0x26')],util[_0x2c97('0x65')](_0x2c97('0x66'),_0x506908[_0x2c97('0x26')],_0x506908[_0x2c97('0x61')]));fs[_0x2c97('0x69')](_0x211c6e,_0x4301e4);return _0x506908;}})['catch'](function(_0xbb346a){throw new db['Sequelize'][(_0x2c97('0x5b'))](_0xbb346a[_0x2c97('0x5c')]);});})[_0x2c97('0x21')](handleEntityNotFound(_0x259351,null))[_0x2c97('0x21')](respondWithResult(_0x259351,0xc9))[_0x2c97('0x3f')](handleError(_0x259351,null));};exports[_0x2c97('0x6a')]=function(_0x43c1b5,_0x13517d,_0x57be04){return db[_0x2c97('0x48')][_0x2c97('0x49')](function(_0x132370){var _0x1028e5;return db[_0x2c97('0x3c')][_0x2c97('0x5f')]({'where':{'id':_0x43c1b5[_0x2c97('0x41')]['id']}})[_0x2c97('0x21')](handleEntityNotFound(_0x13517d,null))[_0x2c97('0x21')](function(_0x3aa232){if(_0x3aa232){_0x1028e5=_0x3aa232;return _0x3aa232[_0x2c97('0x6a')](_0x43c1b5[_0x2c97('0x41')][_0x2c97('0x6b')]);}})[_0x2c97('0x21')](function(_0x1b55d5){if(_0x1b55d5){return db[_0x2c97('0x5e')][_0x2c97('0x5f')]({'where':{'id':_0x43c1b5[_0x2c97('0x41')][_0x2c97('0x6b')]},'attributes':['id',_0x2c97('0x26'),_0x2c97('0x60'),_0x2c97('0x61'),_0x2c97('0x62')],'raw':!![]});}})[_0x2c97('0x21')](function(_0x444b58){if(_0x444b58){fs[_0x2c97('0x58')](path[_0x2c97('0x4d')](_0x1028e5['directory'],util[_0x2c97('0x65')](_0x2c97('0x66'),_0x444b58[_0x2c97('0x26')],_0x444b58[_0x2c97('0x61')])));return _0x444b58;}})[_0x2c97('0x3f')](function(_0x3483e7){throw new db[(_0x2c97('0x5a'))][(_0x2c97('0x5b'))](_0x3483e7[_0x2c97('0x5c')]);});})[_0x2c97('0x21')](handleEntityNotFound(_0x13517d,null))[_0x2c97('0x21')](respondWithStatusCode(_0x13517d,0xcc))[_0x2c97('0x3f')](handleError(_0x13517d,null));};exports['getSounds']=function(_0x2d0051,_0x2c294f,_0x5115f1){var _0x1472f5={};var _0x47ef54={};var _0x2bb848;var _0x19112b;return db[_0x2c97('0x3c')][_0x2c97('0x5f')]({'where':{'id':_0x2d0051[_0x2c97('0x41')]['id']}})[_0x2c97('0x21')](handleEntityNotFound(_0x2c294f,null))[_0x2c97('0x21')](function(_0x5ee464){if(_0x5ee464){_0x2bb848=_0x5ee464;_0x47ef54[_0x2c97('0x29')]=_[_0x2c97('0x2a')](db['Sound']['rawAttributes']);_0x47ef54[_0x2c97('0x2b')]=_[_0x2c97('0x2a')](_0x2d0051['query']);_0x47ef54[_0x2c97('0x2c')]=_['intersection'](_0x47ef54[_0x2c97('0x29')],_0x47ef54['query']);_0x1472f5[_0x2c97('0x2f')]=_[_0x2c97('0x2d')](_0x47ef54[_0x2c97('0x29')],qs[_0x2c97('0x2e')](_0x2d0051[_0x2c97('0x2b')][_0x2c97('0x2e')]));_0x1472f5[_0x2c97('0x2f')]=_0x1472f5['attributes'][_0x2c97('0x30')]?_0x1472f5['attributes']:_0x47ef54[_0x2c97('0x29')];_0x1472f5[_0x2c97('0x33')]=qs['sort'](_0x2d0051[_0x2c97('0x2b')]['sort']);_0x1472f5[_0x2c97('0x35')]=qs[_0x2c97('0x2c')](_['pick'](_0x2d0051[_0x2c97('0x2b')],_0x47ef54[_0x2c97('0x2c')]));if(_0x2d0051[_0x2c97('0x2b')]['filter']){_0x1472f5[_0x2c97('0x35')]=_['merge'](_0x1472f5[_0x2c97('0x35')],{'$or':_[_0x2c97('0x38')](_0x1472f5[_0x2c97('0x2f')],function(_0x2d939e){var _0x18bef7={};_0x18bef7[_0x2d939e]={'$like':'%'+_0x2d0051[_0x2c97('0x2b')]['filter']+'%'};return _0x18bef7;})});}_0x1472f5=_[_0x2c97('0x37')]({},_0x1472f5,_0x2d0051['options']);return _0x2bb848['getSounds'](_0x1472f5);}})['then'](function(_0x359b4e){if(_0x359b4e){_0x19112b=_0x359b4e[_0x2c97('0x30')];if(!_0x2d0051[_0x2c97('0x2b')][_0x2c97('0x31')]('nolimit')){_0x1472f5[_0x2c97('0x1b')]=qs['limit'](_0x2d0051[_0x2c97('0x2b')]['limit']);_0x1472f5[_0x2c97('0x1a')]=qs[_0x2c97('0x1a')](_0x2d0051[_0x2c97('0x2b')][_0x2c97('0x1a')]);}return _0x2bb848[_0x2c97('0x6c')](_0x1472f5);}})[_0x2c97('0x21')](function(_0x52cb97){if(_0x52cb97){return _0x52cb97?{'count':_0x19112b,'rows':_0x52cb97}:null;}})[_0x2c97('0x21')](respondWithResult(_0x2c294f,null))[_0x2c97('0x3f')](handleError(_0x2c294f,null));};
\ No newline at end of file
index dceb048..a8863e8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbca1=['bluebird','request-promise','path','rimraf','../../config/environment','./voiceMusicOnHold.attributes','exports','define','VoiceMusicOnHold','voice_musiconhold','lodash','util','../../config/logger','api','moment'];(function(_0x2a0350,_0x249319){var _0x425220=function(_0x1d5f78){while(--_0x1d5f78){_0x2a0350['push'](_0x2a0350['shift']());}};_0x425220(++_0x249319);}(_0xbca1,0x64));var _0x1bca=function(_0x528226,_0x2ae7e8){_0x528226=_0x528226-0x0;var _0x5628ad=_0xbca1[_0x528226];return _0x5628ad;};'use strict';var _=require(_0x1bca('0x0'));var util=require(_0x1bca('0x1'));var logger=require(_0x1bca('0x2'))(_0x1bca('0x3'));var moment=require(_0x1bca('0x4'));var BPromise=require(_0x1bca('0x5'));var rp=require(_0x1bca('0x6'));var fs=require('fs');var path=require(_0x1bca('0x7'));var rimraf=require(_0x1bca('0x8'));var config=require(_0x1bca('0x9'));var attributes=require(_0x1bca('0xa'));module[_0x1bca('0xb')]=function(_0x55d023,_0x366809){return _0x55d023[_0x1bca('0xc')](_0x1bca('0xd'),attributes,{'tableName':_0x1bca('0xe'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6cee=['path','../../config/environment','./voiceMusicOnHold.attributes','exports','define','VoiceMusicOnHold','lodash','api','moment','bluebird','request-promise'];(function(_0x38cfd5,_0x1d8064){var _0x36b392=function(_0x30820d){while(--_0x30820d){_0x38cfd5['push'](_0x38cfd5['shift']());}};_0x36b392(++_0x1d8064);}(_0x6cee,0x187));var _0xe6ce=function(_0x2bf141,_0x31eac7){_0x2bf141=_0x2bf141-0x0;var _0x48277b=_0x6cee[_0x2bf141];return _0x48277b;};'use strict';var _=require(_0xe6ce('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xe6ce('0x1'));var moment=require(_0xe6ce('0x2'));var BPromise=require(_0xe6ce('0x3'));var rp=require(_0xe6ce('0x4'));var fs=require('fs');var path=require(_0xe6ce('0x5'));var rimraf=require('rimraf');var config=require(_0xe6ce('0x6'));var attributes=require(_0xe6ce('0x7'));module[_0xe6ce('0x8')]=function(_0x64b6dd,_0x5aa8e9){return _0x64b6dd[_0xe6ce('0x9')](_0xe6ce('0xa'),attributes,{'tableName':'voice_musiconhold','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 56b6bb7..ed33018 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x08cf=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','VoiceMusicOnHold,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x4ee08b,_0x29afac){var _0x1fe792=function(_0x42d32c){while(--_0x42d32c){_0x4ee08b['push'](_0x4ee08b['shift']());}};_0x1fe792(++_0x29afac);}(_0x08cf,0x1ed));var _0xf08c=function(_0x544099,_0x372b30){_0x544099=_0x544099-0x0;var _0x20ab09=_0x08cf[_0x544099];return _0x20ab09;};'use strict';var _=require(_0xf08c('0x0'));var util=require(_0xf08c('0x1'));var moment=require('moment');var BPromise=require(_0xf08c('0x2'));var rs=require(_0xf08c('0x3'));var fs=require('fs');var Redis=require(_0xf08c('0x4'));var db=require(_0xf08c('0x5'))['db'];var utils=require(_0xf08c('0x6'));var logger=require(_0xf08c('0x7'))(_0xf08c('0x8'));var config=require(_0xf08c('0x9'));var jayson=require(_0xf08c('0xa'));var client=jayson[_0xf08c('0xb')][_0xf08c('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x42d54d,_0x3b7285,_0x25fd12){return new BPromise(function(_0x260cb8,_0x52744){return client[_0xf08c('0xd')](_0x42d54d,_0x25fd12)[_0xf08c('0xe')](function(_0xa4c274){logger[_0xf08c('0xf')](_0xf08c('0x10'),_0x3b7285,_0xf08c('0x11'));logger[_0xf08c('0x12')]('VoiceMusicOnHold,\x20%s,\x20%s,\x20%s',_0x3b7285,_0xf08c('0x11'),JSON[_0xf08c('0x13')](_0xa4c274));if(_0xa4c274[_0xf08c('0x14')]){if(_0xa4c274[_0xf08c('0x14')][_0xf08c('0x15')]===0x1f4){logger['error'](_0xf08c('0x10'),_0x3b7285,_0xa4c274[_0xf08c('0x14')]['message']);return _0x52744(_0xa4c274[_0xf08c('0x14')][_0xf08c('0x16')]);}logger[_0xf08c('0x14')](_0xf08c('0x10'),_0x3b7285,_0xa4c274['error']['message']);return _0x260cb8(_0xa4c274[_0xf08c('0x14')][_0xf08c('0x16')]);}else{logger[_0xf08c('0xf')](_0xf08c('0x10'),_0x3b7285,_0xf08c('0x11'));_0x260cb8(_0xa4c274[_0xf08c('0x17')][_0xf08c('0x16')]);}})[_0xf08c('0x18')](function(_0x57b502){logger[_0xf08c('0x14')](_0xf08c('0x10'),_0x3b7285,_0x57b502);_0x52744(_0x57b502);});});}
\ No newline at end of file
+var _0xca74=['request\x20sent','debug','stringify','error','code','VoiceMusicOnHold,\x20%s,\x20%s','message','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info'];(function(_0x45d1fd,_0x463212){var _0xd0e542=function(_0x23ebc9){while(--_0x23ebc9){_0x45d1fd['push'](_0x45d1fd['shift']());}};_0xd0e542(++_0x463212);}(_0xca74,0x170));var _0x4ca7=function(_0x295e7f,_0x1a4d59){_0x295e7f=_0x295e7f-0x0;var _0xdb8b56=_0xca74[_0x295e7f];return _0xdb8b56;};'use strict';var _=require(_0x4ca7('0x0'));var util=require('util');var moment=require(_0x4ca7('0x1'));var BPromise=require(_0x4ca7('0x2'));var rs=require(_0x4ca7('0x3'));var fs=require('fs');var Redis=require(_0x4ca7('0x4'));var db=require(_0x4ca7('0x5'))['db'];var utils=require(_0x4ca7('0x6'));var logger=require(_0x4ca7('0x7'))(_0x4ca7('0x8'));var config=require(_0x4ca7('0x9'));var jayson=require(_0x4ca7('0xa'));var client=jayson[_0x4ca7('0xb')][_0x4ca7('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x3d7e59,_0x21181b,_0x3390c2){return new BPromise(function(_0x490c51,_0x57fcdb){return client[_0x4ca7('0xd')](_0x3d7e59,_0x3390c2)[_0x4ca7('0xe')](function(_0x2d9f53){logger[_0x4ca7('0xf')]('VoiceMusicOnHold,\x20%s,\x20%s',_0x21181b,_0x4ca7('0x10'));logger[_0x4ca7('0x11')]('VoiceMusicOnHold,\x20%s,\x20%s,\x20%s',_0x21181b,_0x4ca7('0x10'),JSON[_0x4ca7('0x12')](_0x2d9f53));if(_0x2d9f53['error']){if(_0x2d9f53[_0x4ca7('0x13')][_0x4ca7('0x14')]===0x1f4){logger['error'](_0x4ca7('0x15'),_0x21181b,_0x2d9f53[_0x4ca7('0x13')][_0x4ca7('0x16')]);return _0x57fcdb(_0x2d9f53['error'][_0x4ca7('0x16')]);}logger[_0x4ca7('0x13')](_0x4ca7('0x15'),_0x21181b,_0x2d9f53[_0x4ca7('0x13')][_0x4ca7('0x16')]);return _0x490c51(_0x2d9f53['error'][_0x4ca7('0x16')]);}else{logger[_0x4ca7('0xf')]('VoiceMusicOnHold,\x20%s,\x20%s',_0x21181b,_0x4ca7('0x10'));_0x490c51(_0x2d9f53['result'][_0x4ca7('0x16')]);}})[_0x4ca7('0x17')](function(_0x38b9f7){logger['error'](_0x4ca7('0x15'),_0x21181b,_0x38b9f7);_0x57fcdb(_0x38b9f7);});});}
\ No newline at end of file
index 1f7c101..9266025 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xff15=['../../components/interaction/service','../../config/environment','./voicePrefix.controller','isAuthenticated','get','describe','/:id','/:id/users','getAgents','post','create','put','update','delete','removeAgents','exports','multer','util','path','connect-timeout','Router'];(function(_0xee2e7a,_0x58354d){var _0x319dd3=function(_0xa99240){while(--_0xa99240){_0xee2e7a['push'](_0xee2e7a['shift']());}};_0x319dd3(++_0x58354d);}(_0xff15,0x121));var _0x5ff1=function(_0x2e819c,_0x3f99a5){_0x2e819c=_0x2e819c-0x0;var _0x24e271=_0xff15[_0x2e819c];return _0x24e271;};'use strict';var multer=require(_0x5ff1('0x0'));var util=require(_0x5ff1('0x1'));var path=require(_0x5ff1('0x2'));var timeout=require(_0x5ff1('0x3'));var express=require('express');var router=express[_0x5ff1('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x5ff1('0x5'));var config=require(_0x5ff1('0x6'));var controller=require(_0x5ff1('0x7'));router['get']('/',auth[_0x5ff1('0x8')](),controller['index']);router[_0x5ff1('0x9')]('/describe',auth[_0x5ff1('0x8')](),controller[_0x5ff1('0xa')]);router[_0x5ff1('0x9')](_0x5ff1('0xb'),auth[_0x5ff1('0x8')](),controller['show']);router[_0x5ff1('0x9')](_0x5ff1('0xc'),auth[_0x5ff1('0x8')](),controller[_0x5ff1('0xd')]);router[_0x5ff1('0xe')]('/',auth['isAuthenticated'](),controller[_0x5ff1('0xf')]);router[_0x5ff1('0xe')](_0x5ff1('0xc'),auth[_0x5ff1('0x8')](),controller['addAgents']);router[_0x5ff1('0x10')](_0x5ff1('0xb'),auth[_0x5ff1('0x8')](),controller[_0x5ff1('0x11')]);router[_0x5ff1('0x12')](_0x5ff1('0xb'),auth['isAuthenticated'](),controller['destroy']);router['delete']('/:id/users',auth[_0x5ff1('0x8')](),controller[_0x5ff1('0x13')]);module[_0x5ff1('0x14')]=router;
\ No newline at end of file
+var _0x55e0=['/describe','describe','/:id','show','/:id/users','getAgents','post','addAgents','put','update','delete','destroy','removeAgents','multer','util','path','connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','./voicePrefix.controller','get','isAuthenticated'];(function(_0x585d81,_0xf6d74f){var _0x1aca0d=function(_0x3782d3){while(--_0x3782d3){_0x585d81['push'](_0x585d81['shift']());}};_0x1aca0d(++_0xf6d74f);}(_0x55e0,0xdc));var _0x055e=function(_0x2943d9,_0x12fe5d){_0x2943d9=_0x2943d9-0x0;var _0x49313b=_0x55e0[_0x2943d9];return _0x49313b;};'use strict';var multer=require(_0x055e('0x0'));var util=require(_0x055e('0x1'));var path=require(_0x055e('0x2'));var timeout=require(_0x055e('0x3'));var express=require('express');var router=express['Router']();var auth=require(_0x055e('0x4'));var interaction=require(_0x055e('0x5'));var config=require(_0x055e('0x6'));var controller=require(_0x055e('0x7'));router[_0x055e('0x8')]('/',auth[_0x055e('0x9')](),controller['index']);router['get'](_0x055e('0xa'),auth['isAuthenticated'](),controller[_0x055e('0xb')]);router[_0x055e('0x8')](_0x055e('0xc'),auth[_0x055e('0x9')](),controller[_0x055e('0xd')]);router['get'](_0x055e('0xe'),auth[_0x055e('0x9')](),controller[_0x055e('0xf')]);router[_0x055e('0x10')]('/',auth[_0x055e('0x9')](),controller['create']);router['post'](_0x055e('0xe'),auth['isAuthenticated'](),controller[_0x055e('0x11')]);router[_0x055e('0x12')](_0x055e('0xc'),auth[_0x055e('0x9')](),controller[_0x055e('0x13')]);router[_0x055e('0x14')](_0x055e('0xc'),auth['isAuthenticated'](),controller[_0x055e('0x15')]);router[_0x055e('0x14')](_0x055e('0xe'),auth[_0x055e('0x9')](),controller[_0x055e('0x16')]);module['exports']=router;
\ No newline at end of file
index db2c97b..9dad874 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xab5d=['sequelize','exports','STRING','name','VIRTUAL','system-','getDataValue','INTEGER'];(function(_0x5d93af,_0x1c5b09){var _0x7825=function(_0x5d6b66){while(--_0x5d6b66){_0x5d93af['push'](_0x5d93af['shift']());}};_0x7825(++_0x1c5b09);}(_0xab5d,0xb0));var _0xdab5=function(_0x6cd10f,_0x3c6ad0){_0x6cd10f=_0x6cd10f-0x0;var _0x5e63c5=_0xab5d[_0x6cd10f];return _0x5e63c5;};'use strict';var Sequelize=require(_0xdab5('0x0'));module[_0xdab5('0x1')]={'name':{'type':Sequelize[_0xdab5('0x2')],'allowNull':![],'unique':_0xdab5('0x3')},'prefix':{'type':Sequelize[_0xdab5('0x4')],'get':function(_0xf4b0fc){return _0xdab5('0x5')+this[_0xdab5('0x6')](_0xdab5('0x3'))+'-';}},'description':{'type':Sequelize['STRING']},'callerIdAll':{'type':Sequelize[_0xdab5('0x2')]},'VoiceExtensionId':{'type':Sequelize[_0xdab5('0x7')]}};
\ No newline at end of file
+var _0x66ee=['name','STRING','INTEGER','sequelize','VIRTUAL','system-','getDataValue'];(function(_0x2e7c50,_0x54f6ff){var _0x5e9b3a=function(_0x3ea61b){while(--_0x3ea61b){_0x2e7c50['push'](_0x2e7c50['shift']());}};_0x5e9b3a(++_0x54f6ff);}(_0x66ee,0xb9));var _0xe66e=function(_0xbaa779,_0x116e12){_0xbaa779=_0xbaa779-0x0;var _0x4356e7=_0x66ee[_0xbaa779];return _0x4356e7;};'use strict';var Sequelize=require(_0xe66e('0x0'));module['exports']={'name':{'type':Sequelize['STRING'],'allowNull':![],'unique':'name'},'prefix':{'type':Sequelize[_0xe66e('0x1')],'get':function(_0x300f8d){return _0xe66e('0x2')+this[_0xe66e('0x3')](_0xe66e('0x4'))+'-';}},'description':{'type':Sequelize[_0xe66e('0x5')]},'callerIdAll':{'type':Sequelize[_0xe66e('0x5')]},'VoiceExtensionId':{'type':Sequelize[_0xe66e('0x6')]}};
\ No newline at end of file
index a4c7ddc..ba668d5 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(_0x3da86f,_0x3c8dac){_0x3da86f=_0x3da86f-0x0;var _0x48aa7d=_0x3e74[_0x3da86f];return _0x48aa7d;};'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 _0x34e8=['system','description','Voice\x20Prefix\x20Extension','priority','prefix','NoOp','Voice\x20Prefix','VoicePrefixId','VoiceExtensionId','bulkCreate','Extensions\x20creation\x20failed','CDR(prefix)=','callerIdAll','push','Set','PREFIX-CALLERIDALL=','No\x20callerid\x20available','goto','charAt','system-','sequelize','findById','addAgents','ids','omit','spread','emit','userVoicePrefix:save','removeAgents','isArray','userVoicePrefix:remove','getAgents','findOne','rawAttributes','order','pick','hasOwnProperty','nolimit','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','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','api','../../config/utils','../../config/environment','../../mysqldb','redis','localhost','./voicePrefix.socket','register','sendStatus','end','json','count','offset','status','set','Content-Range','apply','reject','save','update','then','destroy','VoicePrefixes','stack','name','send','index','VoicePrefix','model','query','keys','filters','intersection','attributes','fields','limit','sort','where','filter','merge','map','key','field','include','rows','catch','show','length','includeAll','options','find','params','describe','create','transaction','body','get','VoiceExtension','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','UserProfileResource','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','context','exten','app'];(function(_0x2005ae,_0x26cd64){var _0x133bf7=function(_0x4ef266){while(--_0x4ef266){_0x2005ae['push'](_0x2005ae['shift']());}};_0x133bf7(++_0x26cd64);}(_0x34e8,0x12c));var _0x834e=function(_0x47321e,_0x343d15){_0x47321e=_0x47321e-0x0;var _0x3a52ee=_0x34e8[_0x47321e];return _0x3a52ee;};'use strict';var pdf=require(_0x834e('0x0'));var emlformat=require(_0x834e('0x1'));var rimraf=require(_0x834e('0x2'));var zipdir=require(_0x834e('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x834e('0x4'));var moment=require(_0x834e('0x5'));var BPromise=require(_0x834e('0x6'));var Mustache=require(_0x834e('0x7'));var util=require(_0x834e('0x8'));var path=require(_0x834e('0x9'));var sox=require(_0x834e('0xa'));var csv=require('to-csv');var ejs=require(_0x834e('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x834e('0xc'));var crypto=require(_0x834e('0xd'));var jsforce=require(_0x834e('0xe'));var deskjs=require(_0x834e('0xf'));var toCsv=require(_0x834e('0x10'));var querystring=require(_0x834e('0x11'));var Papa=require(_0x834e('0x12'));var Redis=require(_0x834e('0x13'));var authService=require(_0x834e('0x14'));var qs=require(_0x834e('0x15'));var hardwareService=require(_0x834e('0x16'));var logger=require(_0x834e('0x17'))(_0x834e('0x18'));var utils=require(_0x834e('0x19'));var config=require(_0x834e('0x1a'));var db=require(_0x834e('0x1b'))['db'];config[_0x834e('0x1c')]=_['defaults'](config[_0x834e('0x1c')],{'host':_0x834e('0x1d'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x834e('0x1c')]));require(_0x834e('0x1e'))[_0x834e('0x1f')](socket);function respondWithStatusCode(_0x21cc0a,_0x50e860){_0x50e860=_0x50e860||0xcc;return function(_0x43156c){if(_0x43156c){return _0x21cc0a[_0x834e('0x20')](_0x50e860);}return _0x21cc0a['status'](_0x50e860)[_0x834e('0x21')]();};}function respondWithResult(_0x4a9cdc,_0x38a8cd){_0x38a8cd=_0x38a8cd||0xc8;return function(_0x36d443){if(_0x36d443){return _0x4a9cdc['status'](_0x38a8cd)[_0x834e('0x22')](_0x36d443);}};}function respondWithFilteredResult(_0x22106e,_0x370fb5){return function(_0x50b3f6){if(_0x50b3f6){var _0x283e56=_0x50b3f6[_0x834e('0x23')],_0x211e9a=_0x370fb5[_0x834e('0x24')],_0x34e41a=_0x370fb5[_0x834e('0x24')]+_0x370fb5['limit'],_0xb993a1;if(_0x34e41a>=_0x283e56){_0x34e41a=_0x283e56;_0xb993a1=0xc8;}else{_0xb993a1=0xce;}_0x22106e[_0x834e('0x25')](_0xb993a1);return _0x22106e[_0x834e('0x26')](_0x834e('0x27'),_0x211e9a+'-'+_0x34e41a+'/'+_0x283e56)[_0x834e('0x22')](_0x50b3f6);}return null;};}function patchUpdates(_0x4ab05d){return function(_0x45a630){try{jsonpatch[_0x834e('0x28')](_0x45a630,_0x4ab05d,!![]);}catch(_0x5a05c0){return BPromise[_0x834e('0x29')](_0x5a05c0);}return _0x45a630[_0x834e('0x2a')]();};}function saveUpdates(_0x8d406e,_0x5c55ca){return function(_0x4e3f48){if(_0x4e3f48){return _0x4e3f48[_0x834e('0x2b')](_0x8d406e)[_0x834e('0x2c')](function(_0x589dde){return _0x589dde;});}return null;};}function removeEntity(_0x25ee1d,_0x1dc1e0){return function(_0x58f4fd){if(_0x58f4fd){return _0x58f4fd[_0x834e('0x2d')]()[_0x834e('0x2c')](function(){var _0x338636=_0x58f4fd['get']({'plain':!![]});var _0x24fcf7=_0x834e('0x2e');return db['UserProfileResource']['destroy']({'where':{'type':_0x24fcf7,'resourceId':_0x338636['id']}})[_0x834e('0x2c')](function(){return _0x58f4fd;});})['then'](function(){_0x25ee1d[_0x834e('0x25')](0xcc)[_0x834e('0x21')]();});}};}function handleEntityNotFound(_0x3db026,_0x2cc2eb){return function(_0x3cd928){if(!_0x3cd928){_0x3db026[_0x834e('0x20')](0x194);}return _0x3cd928;};}function handleError(_0x491919,_0x510780){_0x510780=_0x510780||0x1f4;return function(_0x4dc64a){logger['error'](_0x4dc64a[_0x834e('0x2f')]);if(_0x4dc64a[_0x834e('0x30')]){delete _0x4dc64a[_0x834e('0x30')];}_0x491919['status'](_0x510780)[_0x834e('0x31')](_0x4dc64a);};}exports[_0x834e('0x32')]=function(_0x1f3671,_0x1e026a){var _0x4551f5={},_0x390119={},_0x3d149d={'count':0x0,'rows':[]};var _0xfaf716=db[_0x834e('0x33')]['rawAttributes'];_0x390119[_0x834e('0x34')]=_['keys'](_0xfaf716);_0x390119[_0x834e('0x35')]=_[_0x834e('0x36')](_0x1f3671[_0x834e('0x35')]);_0x390119[_0x834e('0x37')]=_[_0x834e('0x38')](_0x390119[_0x834e('0x34')],_0x390119[_0x834e('0x35')]);_0x4551f5[_0x834e('0x39')]=_[_0x834e('0x38')](_0x390119[_0x834e('0x34')],qs['fields'](_0x1f3671[_0x834e('0x35')][_0x834e('0x3a')]));_0x4551f5[_0x834e('0x39')]=_0x4551f5[_0x834e('0x39')]['length']?_0x4551f5[_0x834e('0x39')]:_0x390119[_0x834e('0x34')];if(!_0x1f3671['query']['hasOwnProperty']('nolimit')){_0x4551f5[_0x834e('0x3b')]=qs[_0x834e('0x3b')](_0x1f3671[_0x834e('0x35')][_0x834e('0x3b')]);_0x4551f5[_0x834e('0x24')]=qs[_0x834e('0x24')](_0x1f3671['query'][_0x834e('0x24')]);}_0x4551f5['order']=qs[_0x834e('0x3c')](_0x1f3671[_0x834e('0x35')]['sort']);_0x4551f5[_0x834e('0x3d')]=qs[_0x834e('0x37')](_['pick'](_0x1f3671['query'],_0x390119[_0x834e('0x37')]));if(_0x1f3671[_0x834e('0x35')][_0x834e('0x3e')]){_0x4551f5[_0x834e('0x3d')]=_[_0x834e('0x3f')](_0x4551f5['where'],{'$or':_[_0x834e('0x40')](_0xfaf716,function(_0x548d1d){if(_0x548d1d['type'][_0x834e('0x41')]!=='VIRTUAL'){var _0x2e5239={};_0x2e5239[_0x548d1d[_0x834e('0x42')]]={'$like':'%'+_0x1f3671[_0x834e('0x35')][_0x834e('0x3e')]+'%'};return _0x2e5239;}})});}_0x4551f5=_[_0x834e('0x3f')]({},_0x4551f5,_0x1f3671['options']);var _0x207523={'where':_0x4551f5[_0x834e('0x3d')]};return db[_0x834e('0x33')]['count'](_0x207523)[_0x834e('0x2c')](function(_0x16ac45){_0x3d149d['count']=_0x16ac45;if(_0x1f3671[_0x834e('0x35')]['includeAll']){_0x4551f5[_0x834e('0x43')]=[{'all':!![]}];}return db[_0x834e('0x33')]['findAll'](_0x4551f5);})['then'](function(_0x22ea21){_0x3d149d[_0x834e('0x44')]=_0x22ea21;return _0x3d149d;})[_0x834e('0x2c')](respondWithFilteredResult(_0x1e026a,_0x4551f5))[_0x834e('0x45')](handleError(_0x1e026a,null));};exports[_0x834e('0x46')]=function(_0x23feea,_0x195204){var _0x4a3381={'raw':![],'where':{'id':_0x23feea['params']['id']}},_0x13d45a={};_0x13d45a[_0x834e('0x34')]=_['keys'](db[_0x834e('0x33')]['rawAttributes']);_0x13d45a[_0x834e('0x35')]=_[_0x834e('0x36')](_0x23feea['query']);_0x13d45a[_0x834e('0x37')]=_[_0x834e('0x38')](_0x13d45a[_0x834e('0x34')],_0x13d45a[_0x834e('0x35')]);_0x4a3381[_0x834e('0x39')]=_[_0x834e('0x38')](_0x13d45a[_0x834e('0x34')],qs[_0x834e('0x3a')](_0x23feea[_0x834e('0x35')][_0x834e('0x3a')]));_0x4a3381['attributes']=_0x4a3381[_0x834e('0x39')][_0x834e('0x47')]?_0x4a3381['attributes']:_0x13d45a[_0x834e('0x34')];if(_0x23feea[_0x834e('0x35')][_0x834e('0x48')]){_0x4a3381[_0x834e('0x43')]=[{'all':!![]}];}_0x4a3381=_[_0x834e('0x3f')]({},_0x4a3381,_0x23feea[_0x834e('0x49')]);return db['VoicePrefix']['find'](_0x4a3381)[_0x834e('0x2c')](handleEntityNotFound(_0x195204,null))[_0x834e('0x2c')](respondWithResult(_0x195204,null))[_0x834e('0x45')](handleError(_0x195204,null));};exports[_0x834e('0x2d')]=function(_0x3da408,_0xd1d83b){return db[_0x834e('0x33')][_0x834e('0x4a')]({'where':{'id':_0x3da408[_0x834e('0x4b')]['id']}})[_0x834e('0x2c')](handleEntityNotFound(_0xd1d83b,null))[_0x834e('0x2c')](removeEntity(_0xd1d83b,null))[_0x834e('0x45')](handleError(_0xd1d83b,null));};exports[_0x834e('0x4c')]=function(_0x1a3237,_0x2aa072){return db[_0x834e('0x33')][_0x834e('0x4c')]()[_0x834e('0x2c')](respondWithResult(_0x2aa072,null))[_0x834e('0x45')](handleError(_0x2aa072,null));};exports[_0x834e('0x4d')]=function(_0x4cfacd,_0x1cc0b8){var _0x1f08b9;return db['sequelize'][_0x834e('0x4e')](function(_0x3b0988){return db['VoicePrefix'][_0x834e('0x4d')](_0x4cfacd[_0x834e('0x4f')],{'transaction':_0x3b0988})[_0x834e('0x2c')](function(_0x35636e){_0x1f08b9=_0x35636e[_0x834e('0x50')]({'plain':!![]});return db[_0x834e('0x51')][_0x834e('0x4a')]({'where':{'id':_0x1f08b9['VoiceExtensionId']},'raw':!![]})[_0x834e('0x2c')](function(_0x8bc6c6){return createVoicePrefixExtensions(_0x1f08b9,_0x8bc6c6,_0x3b0988);});});})[_0x834e('0x2c')](function(){var _0x363675=_0x4cfacd[_0x834e('0x52')][_0x834e('0x50')]({'plain':!![]});if(!_0x363675)throw new Error(_0x834e('0x53'));if(_0x363675[_0x834e('0x54')]==='user'){var _0x11778e=_0x1f08b9;return db['UserProfileSection'][_0x834e('0x4a')]({'where':{'name':'VoicePrefixes','userProfileId':_0x363675[_0x834e('0x55')]},'raw':!![]})['then'](function(_0x527eef){if(_0x527eef&&_0x527eef[_0x834e('0x56')]===0x0){return db[_0x834e('0x57')]['create']({'name':_0x11778e['name'],'resourceId':_0x11778e['id'],'type':_0x527eef[_0x834e('0x30')],'sectionId':_0x527eef['id']},{})[_0x834e('0x2c')](function(){return _0x1f08b9;});}else{return _0x1f08b9;}})[_0x834e('0x45')](function(_0x387365){logger[_0x834e('0x58')](_0x834e('0x59'),_0x387365);throw _0x387365;});}return _0x1f08b9;})[_0x834e('0x2c')](respondWithResult(_0x1cc0b8,null))[_0x834e('0x45')](handleError(_0x1cc0b8,null));};function Extension(_0x528e66,_0x142334,_0x3c70bf,_0x5d5ac2){this[_0x834e('0x5a')]='from-sip';this[_0x834e('0x5b')]=_0x528e66;this[_0x834e('0x5c')]=_0x3c70bf;this['type']=_0x834e('0x5d');this[_0x834e('0x5e')]=_0x834e('0x5f');this[_0x834e('0x60')]=_0x142334;this['appdata']=_0x5d5ac2;}function createVoicePrefixExtensions(_0xe35ded,_0x438f75,_0x1dfd5f){return new BPromise(function(_0x5925ef,_0x246b8e){var _0x1fcae9=new Extension(formatPrefixName(_0xe35ded[_0x834e('0x61')]),0x1,_0x834e('0x62'),_0x834e('0x63'));_0x1fcae9[_0x834e('0x64')]=_0xe35ded['id'];return db[_0x834e('0x51')][_0x834e('0x4d')](_0x1fcae9,{'transaction':_0x1dfd5f})[_0x834e('0x2c')](function(_0xfcccd8){var _0x1e4310=_0xfcccd8[_0x834e('0x50')]({'plain':!![]});var _0x1b7045=_[_0x834e('0x40')](addVoicePrefixExtensions(_0xe35ded,_0x438f75),function(_0x460a7a){_0x460a7a[_0x834e('0x65')]=_0x1e4310['id'];_0x460a7a[_0x834e('0x64')]=_0xe35ded['id'];return _0x460a7a;});return db[_0x834e('0x51')][_0x834e('0x66')](_0x1b7045,{'transaction':_0x1dfd5f})[_0x834e('0x2c')](function(_0xed4081){if(!_0xed4081){return _0x246b8e(_0x834e('0x67'));}else{return _0x5925ef(_0xed4081);}})['catch'](function(_0x2145cf){return _0x246b8e(_0x2145cf);});});;});};function addVoicePrefixExtensions(_0x25d6f4,_0x45bcc2){var _0x36cc14=[];var _0x4ca099=formatPrefixName(_0x25d6f4[_0x834e('0x61')]);_0x36cc14['push'](new Extension(_0x4ca099,0x2,'Set',_0x834e('0x68')+_0x25d6f4[_0x834e('0x30')]));if(_0x25d6f4[_0x834e('0x69')]){_0x36cc14[_0x834e('0x6a')](new Extension(_0x4ca099,0x3,_0x834e('0x6b'),_0x834e('0x6c')+_0x25d6f4[_0x834e('0x69')]));}else{_0x36cc14[_0x834e('0x6a')](new Extension(_0x4ca099,0x3,'NoOp',_0x834e('0x6d')));}_0x36cc14['push'](new Extension(_0x4ca099,0x4,_0x834e('0x6e'),_0x45bcc2[_0x834e('0x5a')]+','+'${EXTEN:'+(0x8+_0x25d6f4['name'][_0x834e('0x47')])+'}'+','+0x1));return _0x36cc14;}function formatPrefixName(_0x82f2a7){var _0x363cc2='_';for(var _0x2cca07=0x0;_0x2cca07<_0x82f2a7[_0x834e('0x47')];_0x2cca07++){if(_0x82f2a7['charAt'](_0x2cca07)=='-'){_0x363cc2+=_0x82f2a7[_0x834e('0x6f')](_0x2cca07);}else{_0x363cc2+='['+_0x82f2a7[_0x834e('0x6f')](_0x2cca07)+']';}}_0x363cc2+='.';return _0x363cc2;}exports[_0x834e('0x2b')]=function(_0x228a60,_0x3181af,_0x28b5c9){var _0x87818b=_0x228a60[_0x834e('0x4f')];_0x87818b[_0x834e('0x61')]=_0x834e('0x70')+_0x87818b['name']+'-';return db[_0x834e('0x71')][_0x834e('0x4e')](function(_0x42fc96){return db[_0x834e('0x33')]['update'](_0x87818b,{'where':{'id':_0x87818b['id']},'transaction':_0x42fc96})[_0x834e('0x2c')](function(){return db['VoiceExtension']['destroy']({'where':{'VoicePrefixId':_0x87818b['id']},'transaction':_0x42fc96})['then'](function(){return db[_0x834e('0x51')][_0x834e('0x4a')]({'where':{'id':_0x87818b['VoiceExtensionId']},'raw':!![]})[_0x834e('0x2c')](function(_0x1b200d){return createVoicePrefixExtensions(_0x87818b,_0x1b200d,_0x42fc96);});});});})['then'](function(){return db[_0x834e('0x33')][_0x834e('0x72')](_0x87818b['id']);})['then'](respondWithResult(_0x3181af,null))['catch'](handleError(_0x3181af,null));};exports[_0x834e('0x73')]=function(_0x2a42a3,_0x8bc7d9,_0x44c909){return db[_0x834e('0x33')]['find']({'where':{'id':_0x2a42a3[_0x834e('0x4b')]['id']}})['then'](handleEntityNotFound(_0x8bc7d9,null))[_0x834e('0x2c')](function(_0x218ff8){if(_0x218ff8){return _0x218ff8[_0x834e('0x73')](_0x2a42a3['body'][_0x834e('0x74')],_[_0x834e('0x75')](_0x2a42a3['body'],[_0x834e('0x74'),'id'])||{})[_0x834e('0x76')](function(_0xb4e130){for(var _0x50d0a3=0x0;_0x50d0a3<_0x2a42a3[_0x834e('0x4f')][_0x834e('0x74')][_0x834e('0x47')];_0x50d0a3+=0x1){socket[_0x834e('0x77')](_0x834e('0x78'),{'UserId':_0x2a42a3[_0x834e('0x4f')][_0x834e('0x74')][_0x50d0a3],'VoicePrefixId':_0x2a42a3[_0x834e('0x4b')]['id']});}return _0xb4e130;});}})[_0x834e('0x2c')](respondWithResult(_0x8bc7d9,null))[_0x834e('0x45')](handleError(_0x8bc7d9,null));};exports['removeAgents']=function(_0x5c3945,_0x4e466e,_0x36ede9){return db[_0x834e('0x33')][_0x834e('0x4a')]({'where':{'id':_0x5c3945[_0x834e('0x4b')]['id']}})[_0x834e('0x2c')](handleEntityNotFound(_0x4e466e,null))['then'](function(_0x483bae){if(_0x483bae){return _0x483bae[_0x834e('0x79')](_0x5c3945[_0x834e('0x35')][_0x834e('0x74')])[_0x834e('0x2c')](function(){if(_[_0x834e('0x7a')](_0x5c3945['query'][_0x834e('0x74')])){for(var _0x2b162a=0x0;_0x2b162a<_0x5c3945[_0x834e('0x35')]['ids'][_0x834e('0x47')];_0x2b162a+=0x1){socket[_0x834e('0x77')](_0x834e('0x7b'),{'UserId':Number(_0x5c3945[_0x834e('0x35')][_0x834e('0x74')][_0x2b162a]),'VoicePrefixId':Number(_0x5c3945['params']['id'])});}}else{socket['emit'](_0x834e('0x7b'),{'UserId':Number(_0x5c3945[_0x834e('0x35')]['ids']),'VoicePrefixId':Number(_0x5c3945[_0x834e('0x4b')]['id'])});}});}})['then'](respondWithStatusCode(_0x4e466e,null))[_0x834e('0x45')](handleError(_0x4e466e,null));};exports[_0x834e('0x7c')]=function(_0x451a8e,_0x53012d,_0x155c0f){var _0x49e721={};var _0x5b2621={};var _0x4d599d;var _0x6735e6;return db[_0x834e('0x33')][_0x834e('0x7d')]({'where':{'id':_0x451a8e[_0x834e('0x4b')]['id']}})[_0x834e('0x2c')](handleEntityNotFound(_0x53012d,null))[_0x834e('0x2c')](function(_0x3aa388){if(_0x3aa388){_0x4d599d=_0x3aa388;_0x5b2621[_0x834e('0x34')]=_[_0x834e('0x36')](db['User'][_0x834e('0x7e')]);_0x5b2621['query']=_[_0x834e('0x36')](_0x451a8e[_0x834e('0x35')]);_0x5b2621[_0x834e('0x37')]=_[_0x834e('0x38')](_0x5b2621[_0x834e('0x34')],_0x5b2621[_0x834e('0x35')]);_0x49e721['attributes']=_['intersection'](_0x5b2621[_0x834e('0x34')],qs[_0x834e('0x3a')](_0x451a8e['query'][_0x834e('0x3a')]));_0x49e721[_0x834e('0x39')]=_0x49e721[_0x834e('0x39')][_0x834e('0x47')]?_0x49e721[_0x834e('0x39')]:_0x5b2621['model'];_0x49e721[_0x834e('0x7f')]=qs[_0x834e('0x3c')](_0x451a8e['query']['sort']);_0x49e721['where']=qs[_0x834e('0x37')](_[_0x834e('0x80')](_0x451a8e['query'],_0x5b2621[_0x834e('0x37')]));if(_0x451a8e[_0x834e('0x35')]['filter']){_0x49e721[_0x834e('0x3d')]=_['merge'](_0x49e721['where'],{'$or':_[_0x834e('0x40')](_0x49e721[_0x834e('0x39')],function(_0x2287fb){var _0xe28851={};_0xe28851[_0x2287fb]={'$like':'%'+_0x451a8e['query'][_0x834e('0x3e')]+'%'};return _0xe28851;})});}_0x49e721=_[_0x834e('0x3f')]({},_0x49e721,_0x451a8e[_0x834e('0x49')]);return _0x4d599d[_0x834e('0x7c')](_0x49e721);}})[_0x834e('0x2c')](function(_0x27603d){if(_0x27603d){_0x6735e6=_0x27603d[_0x834e('0x47')];if(!_0x451a8e[_0x834e('0x35')][_0x834e('0x81')](_0x834e('0x82'))){_0x49e721[_0x834e('0x3b')]=qs[_0x834e('0x3b')](_0x451a8e[_0x834e('0x35')][_0x834e('0x3b')]);_0x49e721[_0x834e('0x24')]=qs[_0x834e('0x24')](_0x451a8e[_0x834e('0x35')][_0x834e('0x24')]);}return _0x4d599d[_0x834e('0x7c')](_0x49e721);}})[_0x834e('0x2c')](function(_0x2c634b){if(_0x2c634b){return _0x2c634b?{'count':_0x6735e6,'rows':_0x2c634b}:null;}})[_0x834e('0x2c')](respondWithResult(_0x53012d,null))['catch'](handleError(_0x53012d,null));};
\ No newline at end of file
index d7cac6a..1bd0ecb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['hasOwnProperty','hook','exports','events','../../mysqldb','VoicePrefix','update','emit'];(function(_0xd299c3,_0x4ba0f1){var _0x376574=function(_0xc585f){while(--_0xc585f){_0xd299c3['push'](_0xd299c3['shift']());}};_0x376574(++_0x4ba0f1);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0xa9e0[_0x2dafbe];return _0x58a45a;};'use strict';var EventEmitter=require(_0x0a9e('0x0'));var VoicePrefix=require(_0x0a9e('0x1'))['db'][_0x0a9e('0x2')];var VoicePrefixEvents=new EventEmitter();VoicePrefixEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0x0a9e('0x3'),'afterDestroy':'remove'};function emitEvent(_0x333808){return function(_0x432180,_0x2ab90b,_0x991246){VoicePrefixEvents[_0x0a9e('0x4')](_0x333808+':'+_0x432180['id'],_0x432180);VoicePrefixEvents['emit'](_0x333808,_0x432180);_0x991246(null);};}for(var e in events){if(events[_0x0a9e('0x5')](e)){var event=events[e];VoicePrefix[_0x0a9e('0x6')](e,emitEvent(event));}}module[_0x0a9e('0x7')]=VoicePrefixEvents;
\ No newline at end of file
+var _0xa9e0=['hasOwnProperty','hook','exports','events','../../mysqldb','VoicePrefix','update','emit'];(function(_0xadde88,_0x58ad47){var _0x3b8eb6=function(_0x15535a){while(--_0x15535a){_0xadde88['push'](_0xadde88['shift']());}};_0x3b8eb6(++_0x58ad47);}(_0xa9e0,0x123));var _0x0a9e=function(_0x47e7cb,_0x4c1b8d){_0x47e7cb=_0x47e7cb-0x0;var _0x2a8874=_0xa9e0[_0x47e7cb];return _0x2a8874;};'use strict';var EventEmitter=require(_0x0a9e('0x0'));var VoicePrefix=require(_0x0a9e('0x1'))['db'][_0x0a9e('0x2')];var VoicePrefixEvents=new EventEmitter();VoicePrefixEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0x0a9e('0x3'),'afterDestroy':'remove'};function emitEvent(_0x333808){return function(_0x432180,_0x2ab90b,_0x991246){VoicePrefixEvents[_0x0a9e('0x4')](_0x333808+':'+_0x432180['id'],_0x432180);VoicePrefixEvents['emit'](_0x333808,_0x432180);_0x991246(null);};}for(var e in events){if(events[_0x0a9e('0x5')](e)){var event=events[e];VoicePrefix[_0x0a9e('0x6')](e,emitEvent(event));}}module[_0x0a9e('0x7')]=VoicePrefixEvents;
\ No newline at end of file
index c22981c..2287938 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x142c=['moment','request-promise','rimraf','../../config/environment','exports','voice_prefixes','lodash','util','api'];(function(_0xc4001c,_0x1bf8f0){var _0x49f7bc=function(_0x1059b8){while(--_0x1059b8){_0xc4001c['push'](_0xc4001c['shift']());}};_0x49f7bc(++_0x1bf8f0);}(_0x142c,0x72));var _0xc142=function(_0x50e70a,_0x11bf9e){_0x50e70a=_0x50e70a-0x0;var _0x19090a=_0x142c[_0x50e70a];return _0x19090a;};'use strict';var _=require(_0xc142('0x0'));var util=require(_0xc142('0x1'));var logger=require('../../config/logger')(_0xc142('0x2'));var moment=require(_0xc142('0x3'));var BPromise=require('bluebird');var rp=require(_0xc142('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0xc142('0x5'));var config=require(_0xc142('0x6'));var attributes=require('./voicePrefix.attributes');module[_0xc142('0x7')]=function(_0x38b414,_0x8ae802){return _0x38b414['define']('VoicePrefix',attributes,{'tableName':_0xc142('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xda37=['../../config/environment','./voicePrefix.attributes','exports','define','VoicePrefix','voice_prefixes','lodash','util','../../config/logger','api','moment','path','rimraf'];(function(_0x4ce335,_0x469789){var _0x5a43a1=function(_0x2e9ad4){while(--_0x2e9ad4){_0x4ce335['push'](_0x4ce335['shift']());}};_0x5a43a1(++_0x469789);}(_0xda37,0xfd));var _0x7da3=function(_0x35df51,_0x561de1){_0x35df51=_0x35df51-0x0;var _0x391e34=_0xda37[_0x35df51];return _0x391e34;};'use strict';var _=require(_0x7da3('0x0'));var util=require(_0x7da3('0x1'));var logger=require(_0x7da3('0x2'))(_0x7da3('0x3'));var moment=require(_0x7da3('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var fs=require('fs');var path=require(_0x7da3('0x5'));var rimraf=require(_0x7da3('0x6'));var config=require(_0x7da3('0x7'));var attributes=require(_0x7da3('0x8'));module[_0x7da3('0x9')]=function(_0x3e21ff,_0x36b89d){return _0x3e21ff[_0x7da3('0xa')](_0x7da3('0xb'),attributes,{'tableName':_0x7da3('0xc'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 31eb4b5..286b418 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c56=['./voicePrefix.socket','register','info','request\x20sent','debug','VoicePrefix,\x20%s,\x20%s,\x20%s','stringify','error','code','VoicePrefix,\x20%s,\x20%s','message','result','util','moment','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','redis','defaults','localhost','socket.io-emitter'];(function(_0x40ac5e,_0x2de228){var _0x2839d6=function(_0x123d47){while(--_0x123d47){_0x40ac5e['push'](_0x40ac5e['shift']());}};_0x2839d6(++_0x2de228);}(_0x1c56,0x1a4));var _0x61c5=function(_0x456bd2,_0x156c79){_0x456bd2=_0x456bd2-0x0;var _0x2218c1=_0x1c56[_0x456bd2];return _0x2218c1;};'use strict';var _=require('lodash');var util=require(_0x61c5('0x0'));var moment=require(_0x61c5('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x61c5('0x2'))['db'];var utils=require('../../config/utils');var logger=require(_0x61c5('0x3'))(_0x61c5('0x4'));var config=require(_0x61c5('0x5'));var jayson=require(_0x61c5('0x6'));var client=jayson[_0x61c5('0x7')]['http']({'port':0x232a});config[_0x61c5('0x8')]=_[_0x61c5('0x9')](config[_0x61c5('0x8')],{'host':_0x61c5('0xa'),'port':0x18eb});var socket=require(_0x61c5('0xb'))(new Redis(config[_0x61c5('0x8')]));require(_0x61c5('0xc'))[_0x61c5('0xd')](socket);function respondWithRpcPromise(_0x546398,_0x5759f7,_0x426c90){return new BPromise(function(_0x4aa27b,_0x2428ea){return client['request'](_0x546398,_0x426c90)['then'](function(_0xb1df66){logger[_0x61c5('0xe')]('VoicePrefix,\x20%s,\x20%s',_0x5759f7,_0x61c5('0xf'));logger[_0x61c5('0x10')](_0x61c5('0x11'),_0x5759f7,'request\x20sent',JSON[_0x61c5('0x12')](_0xb1df66));if(_0xb1df66[_0x61c5('0x13')]){if(_0xb1df66[_0x61c5('0x13')][_0x61c5('0x14')]===0x1f4){logger['error'](_0x61c5('0x15'),_0x5759f7,_0xb1df66[_0x61c5('0x13')]['message']);return _0x2428ea(_0xb1df66[_0x61c5('0x13')]['message']);}logger[_0x61c5('0x13')](_0x61c5('0x15'),_0x5759f7,_0xb1df66[_0x61c5('0x13')]['message']);return _0x4aa27b(_0xb1df66[_0x61c5('0x13')][_0x61c5('0x16')]);}else{logger[_0x61c5('0xe')](_0x61c5('0x15'),_0x5759f7,'request\x20sent');_0x4aa27b(_0xb1df66[_0x61c5('0x17')][_0x61c5('0x16')]);}})['catch'](function(_0x1a69f1){logger[_0x61c5('0x13')]('VoicePrefix,\x20%s,\x20%s',_0x5759f7,_0x1a69f1);_0x2428ea(_0x1a69f1);});});}
\ No newline at end of file
+var _0xa07e=['then','VoicePrefix,\x20%s,\x20%s','request\x20sent','VoicePrefix,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','redis','defaults','localhost','socket.io-emitter','register','request'];(function(_0x4ea5af,_0x93627){var _0x244e1e=function(_0x3ff04e){while(--_0x3ff04e){_0x4ea5af['push'](_0x4ea5af['shift']());}};_0x244e1e(++_0x93627);}(_0xa07e,0x18f));var _0xea07=function(_0x146056,_0x53d830){_0x146056=_0x146056-0x0;var _0x3f6875=_0xa07e[_0x146056];return _0x3f6875;};'use strict';var _=require(_0xea07('0x0'));var util=require(_0xea07('0x1'));var moment=require(_0xea07('0x2'));var BPromise=require(_0xea07('0x3'));var rs=require(_0xea07('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xea07('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xea07('0x6'))(_0xea07('0x7'));var config=require(_0xea07('0x8'));var jayson=require(_0xea07('0x9'));var client=jayson[_0xea07('0xa')]['http']({'port':0x232a});config[_0xea07('0xb')]=_[_0xea07('0xc')](config[_0xea07('0xb')],{'host':_0xea07('0xd'),'port':0x18eb});var socket=require(_0xea07('0xe'))(new Redis(config['redis']));require('./voicePrefix.socket')[_0xea07('0xf')](socket);function respondWithRpcPromise(_0x393e6b,_0x387210,_0x32839d){return new BPromise(function(_0x58988a,_0x112182){return client[_0xea07('0x10')](_0x393e6b,_0x32839d)[_0xea07('0x11')](function(_0x408559){logger['info'](_0xea07('0x12'),_0x387210,_0xea07('0x13'));logger['debug'](_0xea07('0x14'),_0x387210,_0xea07('0x13'),JSON[_0xea07('0x15')](_0x408559));if(_0x408559['error']){if(_0x408559[_0xea07('0x16')][_0xea07('0x17')]===0x1f4){logger['error'](_0xea07('0x12'),_0x387210,_0x408559[_0xea07('0x16')]['message']);return _0x112182(_0x408559[_0xea07('0x16')]['message']);}logger['error'](_0xea07('0x12'),_0x387210,_0x408559[_0xea07('0x16')][_0xea07('0x18')]);return _0x58988a(_0x408559[_0xea07('0x16')][_0xea07('0x18')]);}else{logger[_0xea07('0x19')](_0xea07('0x12'),_0x387210,'request\x20sent');_0x58988a(_0x408559['result'][_0xea07('0x18')]);}})['catch'](function(_0xe0ab41){logger[_0xea07('0x16')](_0xea07('0x12'),_0x387210,_0xe0ab41);_0x112182(_0xe0ab41);});});}
\ No newline at end of file
index 5bc98f4..7c171fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc636=['./voicePrefix.events','save','remove','emit'];(function(_0x6491da,_0x443b83){var _0x1db988=function(_0xf4cde2){while(--_0xf4cde2){_0x6491da['push'](_0x6491da['shift']());}};_0x1db988(++_0x443b83);}(_0xc636,0x18c));var _0x6c63=function(_0x410c02,_0x191c27){_0x410c02=_0x410c02-0x0;var _0x5411e2=_0xc636[_0x410c02];return _0x5411e2;};'use strict';var VoicePrefixEvents=require(_0x6c63('0x0'));var events=[_0x6c63('0x1'),_0x6c63('0x2'),'update'];function createListener(_0x44c2b7,_0x7addd9){return function(_0x54704c){_0x7addd9[_0x6c63('0x3')](_0x44c2b7,_0x54704c);};}function removeListener(_0x45a266,_0x219d09){return function(){VoicePrefixEvents['removeListener'](_0x45a266,_0x219d09);};}exports['register']=function(_0x45ab77){for(var _0x417f54=0x0,_0x47f83f=events['length'];_0x417f54<_0x47f83f;_0x417f54++){var _0x13047c=events[_0x417f54];var _0xd15bb8=createListener('voicePrefix:'+_0x13047c,_0x45ab77);VoicePrefixEvents['on'](_0x13047c,_0xd15bb8);}};
\ No newline at end of file
+var _0x6ed4=['emit','register','length','voicePrefix:','./voicePrefix.events','save','remove','update'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0x6ed4,0x1ec));var _0x46ed=function(_0x5d9487,_0x3b4b7a){_0x5d9487=_0x5d9487-0x0;var _0x279c42=_0x6ed4[_0x5d9487];return _0x279c42;};'use strict';var VoicePrefixEvents=require(_0x46ed('0x0'));var events=[_0x46ed('0x1'),_0x46ed('0x2'),_0x46ed('0x3')];function createListener(_0x47f527,_0x35803d){return function(_0x40ddf2){_0x35803d[_0x46ed('0x4')](_0x47f527,_0x40ddf2);};}function removeListener(_0x7ea886,_0x47d4fb){return function(){VoicePrefixEvents['removeListener'](_0x7ea886,_0x47d4fb);};}exports[_0x46ed('0x5')]=function(_0x17299d){for(var _0x5ee338=0x0,_0x4b8d44=events[_0x46ed('0x6')];_0x5ee338<_0x4b8d44;_0x5ee338++){var _0x2c3114=events[_0x5ee338];var _0xfaef8=createListener(_0x46ed('0x7')+_0x2c3114,_0x17299d);VoicePrefixEvents['on'](_0x2c3114,_0xfaef8);}};
\ No newline at end of file
index 253438f..3754df8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8aaf=['/:id/blacklists','post','create','/:id/clone','clone','/:id/teams','addTeams','/:id/users','addAgents','addLists','addBlackLists','put','/:id','update','destroy','removeTeams','delete','removeAgents','removeLists','removeBlackLists','exports','multer','util','connect-timeout','express','../../components/auth/service','../../config/environment','./voiceQueue.controller','get','isAuthenticated','index','/:id/hoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','getHopperFinals','/:id/hopper_black','getHopperBlacks','getTeams','/:id/members','getMembers','/:id/lists'];(function(_0x189305,_0x46c43f){var _0xea3406=function(_0x2aa435){while(--_0x2aa435){_0x189305['push'](_0x189305['shift']());}};_0xea3406(++_0x46c43f);}(_0x8aaf,0x93));var _0xf8aa=function(_0x476b62,_0x4429e1){_0x476b62=_0x476b62-0x0;var _0x2c8c6c=_0x8aaf[_0x476b62];return _0x2c8c6c;};'use strict';var multer=require(_0xf8aa('0x0'));var util=require(_0xf8aa('0x1'));var path=require('path');var timeout=require(_0xf8aa('0x2'));var express=require(_0xf8aa('0x3'));var router=express['Router']();var auth=require(_0xf8aa('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xf8aa('0x5'));var controller=require(_0xf8aa('0x6'));router[_0xf8aa('0x7')]('/',auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x9')]);router[_0xf8aa('0x7')]('/:id',auth[_0xf8aa('0x8')](),controller['show']);router[_0xf8aa('0x7')](_0xf8aa('0xa'),auth[_0xf8aa('0x8')](),controller['getHoppers']);router[_0xf8aa('0x7')](_0xf8aa('0xb'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0xc')]);router[_0xf8aa('0x7')](_0xf8aa('0xd'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0xe')]);router['get'](_0xf8aa('0xf'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x10')]);router['get']('/:id/teams',auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x11')]);router[_0xf8aa('0x7')]('/:id/users',auth[_0xf8aa('0x8')](),controller['getAgents']);router[_0xf8aa('0x7')](_0xf8aa('0x12'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x13')]);router[_0xf8aa('0x7')](_0xf8aa('0x14'),auth['isAuthenticated'](),controller['getLists']);router[_0xf8aa('0x7')](_0xf8aa('0x15'),auth[_0xf8aa('0x8')](),controller['getBlackLists']);router[_0xf8aa('0x16')]('/',auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x17')]);router[_0xf8aa('0x16')](_0xf8aa('0x18'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x19')]);router[_0xf8aa('0x16')](_0xf8aa('0x1a'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x1b')]);router[_0xf8aa('0x16')](_0xf8aa('0x1c'),auth['isAuthenticated'](),controller[_0xf8aa('0x1d')]);router[_0xf8aa('0x16')](_0xf8aa('0x14'),auth['isAuthenticated'](),controller[_0xf8aa('0x1e')]);router[_0xf8aa('0x16')](_0xf8aa('0x15'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x1f')]);router[_0xf8aa('0x20')](_0xf8aa('0x21'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x22')]);router['delete'](_0xf8aa('0x21'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x23')]);router['delete'](_0xf8aa('0x1a'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x24')]);router[_0xf8aa('0x25')](_0xf8aa('0x1c'),auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x26')]);router[_0xf8aa('0x25')]('/:id/lists',auth[_0xf8aa('0x8')](),controller[_0xf8aa('0x27')]);router[_0xf8aa('0x25')](_0xf8aa('0x15'),auth['isAuthenticated'](),controller[_0xf8aa('0x28')]);module[_0xf8aa('0x29')]=router;
\ No newline at end of file
+var _0x06fb=['put','update','delete','destroy','removeTeams','removeAgents','removeLists','/:id/blacklists','removeBlackLists','exports','util','connect-timeout','express','Router','../../components/auth/service','get','isAuthenticated','index','/:id','show','/:id/hoppers','getHoppers','getHopperFinals','getHopperBlacks','/:id/teams','getTeams','/:id/users','getAgents','/:id/members','getMembers','getLists','getBlackLists','post','/:id/clone','clone','addTeams','addAgents','/:id/lists','addLists'];(function(_0x25d4ee,_0xc95872){var _0x214a35=function(_0x4285a0){while(--_0x4285a0){_0x25d4ee['push'](_0x25d4ee['shift']());}};_0x214a35(++_0xc95872);}(_0x06fb,0x190));var _0xb06f=function(_0x537e04,_0x4c3191){_0x537e04=_0x537e04-0x0;var _0x15a35f=_0x06fb[_0x537e04];return _0x15a35f;};'use strict';var multer=require('multer');var util=require(_0xb06f('0x0'));var path=require('path');var timeout=require(_0xb06f('0x1'));var express=require(_0xb06f('0x2'));var router=express[_0xb06f('0x3')]();var auth=require(_0xb06f('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./voiceQueue.controller');router[_0xb06f('0x5')]('/',auth[_0xb06f('0x6')](),controller[_0xb06f('0x7')]);router['get'](_0xb06f('0x8'),auth[_0xb06f('0x6')](),controller[_0xb06f('0x9')]);router['get'](_0xb06f('0xa'),auth[_0xb06f('0x6')](),controller[_0xb06f('0xb')]);router[_0xb06f('0x5')]('/:id/hopper_histories',auth['isAuthenticated'](),controller['getHopperHistories']);router[_0xb06f('0x5')]('/:id/hopper_finals',auth[_0xb06f('0x6')](),controller[_0xb06f('0xc')]);router[_0xb06f('0x5')]('/:id/hopper_black',auth[_0xb06f('0x6')](),controller[_0xb06f('0xd')]);router[_0xb06f('0x5')](_0xb06f('0xe'),auth[_0xb06f('0x6')](),controller[_0xb06f('0xf')]);router[_0xb06f('0x5')](_0xb06f('0x10'),auth[_0xb06f('0x6')](),controller[_0xb06f('0x11')]);router[_0xb06f('0x5')](_0xb06f('0x12'),auth[_0xb06f('0x6')](),controller[_0xb06f('0x13')]);router['get']('/:id/lists',auth['isAuthenticated'](),controller[_0xb06f('0x14')]);router[_0xb06f('0x5')]('/:id/blacklists',auth[_0xb06f('0x6')](),controller[_0xb06f('0x15')]);router['post']('/',auth[_0xb06f('0x6')](),controller['create']);router[_0xb06f('0x16')](_0xb06f('0x17'),auth[_0xb06f('0x6')](),controller[_0xb06f('0x18')]);router['post'](_0xb06f('0xe'),auth[_0xb06f('0x6')](),controller[_0xb06f('0x19')]);router[_0xb06f('0x16')](_0xb06f('0x10'),auth[_0xb06f('0x6')](),controller[_0xb06f('0x1a')]);router[_0xb06f('0x16')](_0xb06f('0x1b'),auth[_0xb06f('0x6')](),controller[_0xb06f('0x1c')]);router[_0xb06f('0x16')]('/:id/blacklists',auth[_0xb06f('0x6')](),controller['addBlackLists']);router[_0xb06f('0x1d')](_0xb06f('0x8'),auth[_0xb06f('0x6')](),controller[_0xb06f('0x1e')]);router[_0xb06f('0x1f')](_0xb06f('0x8'),auth[_0xb06f('0x6')](),controller[_0xb06f('0x20')]);router[_0xb06f('0x1f')]('/:id/teams',auth[_0xb06f('0x6')](),controller[_0xb06f('0x21')]);router[_0xb06f('0x1f')](_0xb06f('0x10'),auth[_0xb06f('0x6')](),controller[_0xb06f('0x22')]);router[_0xb06f('0x1f')](_0xb06f('0x1b'),auth['isAuthenticated'](),controller[_0xb06f('0x23')]);router['delete'](_0xb06f('0x24'),auth['isAuthenticated'](),controller[_0xb06f('0x25')]);module[_0xb06f('0x26')]=router;
\ No newline at end of file
index 9087ff0..335b1e8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x748b=['#AMD\x20Between\x20Words\x20Silence','#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)','#AMD\x20Maximum\x20Word\x20Length','#RecallMe\x20Timeout\x20(min:1)','Active/Disactive\x20Recall\x20In\x20Queue','ASC','DESC','Cut\x20Digit\x20(min:1,\x20max:15)','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','mandatoryDisposition','sequelize','exports','STRING','name','outbound','inbound','default','ENUM','ringall','leastrecent','fewestcalls','random','rrmemory','linear','wrandom','setDataValue','strategy','getDataValue','type','dialMethod','booked','roundrobin','progressive','predictive','power','INTEGER','yes','TEXT','periodic_announce','join','split','joinempty','leavewhenempty','BOOLEAN','acw','wrapuptime','Active/Disactive\x20Campaign','Dial\x20Method.','UNSIGNED','Max\x209999\x20channels,\x200\x20means\x20unlimited.','Max\x209999\x20member\x20in\x20queue(min:1,\x20max:9999),\x200\x20means\x20unlimited.','FLOAT','dropRate','Only\x20for\x20predictive\x20method.','Interval\x20Predictive\x20Minutes\x20(min:5\x20max:30)','Originate\x20Timeout\x20Seconds\x20(min:1,\x20max:999)','tTxX','https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_Queue','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\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)','07:00-22:00,*,*,*','always','never','onlyIfOpen','Active/Disactive\x20AMD','#AMD\x20Greeting','#AMD\x20After\x20Greeting\x20Silence','#AMD\x20Min\x20Word\x20Length'];(function(_0x1a7b62,_0x434d67){var _0x5b7875=function(_0x42eeba){while(--_0x42eeba){_0x1a7b62['push'](_0x1a7b62['shift']());}};_0x5b7875(++_0x434d67);}(_0x748b,0x12f));var _0xb748=function(_0x34fdb2,_0x5a18e0){_0x34fdb2=_0x34fdb2-0x0;var _0x5890d2=_0x748b[_0x34fdb2];return _0x5890d2;};'use strict';var Sequelize=require(_0xb748('0x0'));module[_0xb748('0x1')]={'name':{'type':Sequelize[_0xb748('0x2')],'allowNull':![],'unique':_0xb748('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize['ENUM']('inbound',_0xb748('0x4')),'allowNull':![],'defaultValue':_0xb748('0x5')},'musiconhold':{'type':Sequelize['STRING'],'defaultValue':_0xb748('0x6')},'announce':{'type':Sequelize[_0xb748('0x2')],'defaultValue':''},'strategy':{'type':Sequelize[_0xb748('0x7')]('rr',_0xb748('0x8'),_0xb748('0x9'),_0xb748('0xa'),_0xb748('0xb'),_0xb748('0xc'),_0xb748('0xd'),_0xb748('0xe'),'rrordered'),'allowNull':![],'defaultValue':_0xb748('0x8'),'set':function(_0x1f3a25){this[_0xb748('0xf')](_0xb748('0x10'),_0x1f3a25?_0x1f3a25:'rrmemory');},'get':function(){var _0x401ea0=this[_0xb748('0x11')](_0xb748('0x12'));var _0x1a9f11=this[_0xb748('0x11')](_0xb748('0x13'));var _0x14c9a6=this[_0xb748('0x11')]('strategy');if(_0x401ea0===_0xb748('0x5')){return _0x14c9a6;}if(_0x1a9f11===_0xb748('0x14')&&_0x14c9a6===_0xb748('0xc')||_0x1a9f11===_0xb748('0x14')&&_0x14c9a6===_0xb748('0x15')){return _0x14c9a6;}if(_0x1a9f11===_0xb748('0x16')||_0x1a9f11===_0xb748('0x17')||_0x1a9f11===_0xb748('0x18')){return _0x14c9a6;}return null;}},'servicelevel':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'context':{'type':Sequelize[_0xb748('0x2')],'defaultValue':null},'penaltymemberslimit':{'type':Sequelize['INTEGER'](0xb)},'timeout':{'type':Sequelize[_0xb748('0x19')](0xb),'defaultValue':0xf},'retry':{'type':Sequelize[_0xb748('0x19')](0xb),'defaultValue':0x2},'timeoutpriority':{'type':Sequelize['STRING']},'weight':{'type':Sequelize[_0xb748('0x19')](0xb),'allowNull':!![],'defaultValue':0x0},'wrapuptime':{'type':Sequelize[_0xb748('0x19')](0xb),'defaultValue':0x0},'autofill':{'type':Sequelize[_0xb748('0x7')](_0xb748('0x1a'),'no'),'defaultValue':'yes'},'autopause':{'type':Sequelize[_0xb748('0x7')](_0xb748('0x1a'),'no','all'),'defaultValue':'no'},'autopausedelay':{'type':Sequelize[_0xb748('0x19')](0xb)},'autopausebusy':{'type':Sequelize['ENUM'](_0xb748('0x1a'),'no'),'defaultValue':'no'},'autopauseunavail':{'type':Sequelize[_0xb748('0x7')](_0xb748('0x1a'),'no'),'defaultValue':'no'},'maxlen':{'type':Sequelize[_0xb748('0x19')](0xb),'defaultValue':0x0},'setinterfacevar':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no'},'setqueueentryvar':{'type':Sequelize[_0xb748('0x7')](_0xb748('0x1a'),'no'),'defautValue':'no'},'setqueuevar':{'type':Sequelize['ENUM'](_0xb748('0x1a'),'no'),'defaultValue':'no'},'eventmemberstatus':{'type':Sequelize['ENUM'](_0xb748('0x1a'),'no'),'defaultValue':'no'},'membermacro':{'type':Sequelize[_0xb748('0x2')],'allowNull':!![]},'membergosub':{'type':Sequelize['STRING'],'allowNull':!![]},'announce_frequency':{'type':Sequelize[_0xb748('0x19')](0xb),'defaultValue':0x0},'min_announce_frequency':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'periodic_announce_frequency':{'type':Sequelize[_0xb748('0x19')](0xb),'defaultValue':0x0},'random_periodic_announce':{'type':Sequelize[_0xb748('0x7')]('yes','no'),'defaultValue':'no'},'relative_periodic_announce':{'type':Sequelize[_0xb748('0x7')](_0xb748('0x1a'),'no'),'defaultValue':_0xb748('0x1a')},'announce_holdtime':{'type':Sequelize['ENUM']('yes','no','once'),'defaultValue':'no'},'announce_position':{'type':Sequelize[_0xb748('0x2')],'defaultValue':'no'},'announce_to_first_user':{'type':Sequelize['ENUM'](_0xb748('0x1a'),'no')},'announce_position_limit':{'type':Sequelize[_0xb748('0x19')](0xb)},'announce_round_seconds':{'type':Sequelize[_0xb748('0x7')]('0','5','10','15','20','30'),'defaultValue':'0'},'monitor_format':{'type':Sequelize['STRING'],'defaultValue':''},'monitor_type':{'type':Sequelize['STRING']},'queue_youarenext':{'type':Sequelize[_0xb748('0x2')],'defaultValue':null},'queue_thereare':{'type':Sequelize['STRING'],'defaultValue':null},'queue_callswaiting':{'type':Sequelize['STRING'],'defaultValue':null},'queue_holdtime':{'type':Sequelize[_0xb748('0x2')],'defaultValue':null},'queue_minute':{'type':Sequelize[_0xb748('0x2')],'allowNull':!![],'defaultValue':null},'queue_minutes':{'type':Sequelize[_0xb748('0x2')],'defaultValue':null},'queue_seconds':{'type':Sequelize[_0xb748('0x2')],'defaultValue':null},'queue_thankyou':{'type':Sequelize[_0xb748('0x2')],'defaultValue':null},'queue_reporthold':{'type':Sequelize[_0xb748('0x2')]},'queue_quantity1':{'type':Sequelize['STRING']},'queue_quantity2':{'type':Sequelize[_0xb748('0x2')]},'queue_periodic_announce':{'type':Sequelize[_0xb748('0x2')]},'queue_less_than':{'type':Sequelize[_0xb748('0x2')]},'periodic_announce':{'type':Sequelize[_0xb748('0x1b')],'set':function(_0x157128){this[_0xb748('0xf')](_0xb748('0x1c'),_0x157128?_0x157128[_0xb748('0x1d')](','):[]);},'get':function(){return this[_0xb748('0x11')](_0xb748('0x1c'))?this[_0xb748('0x11')](_0xb748('0x1c'))[_0xb748('0x1e')](','):[];}},'joinempty':{'type':Sequelize[_0xb748('0x2')],'defaultValue':_0xb748('0x1a'),'set':function(_0x309ca2){this['setDataValue']('joinempty',_0x309ca2?_0x309ca2[_0xb748('0x1d')](','):[]);},'get':function(){return this['getDataValue']('joinempty')?this['getDataValue'](_0xb748('0x1f'))[_0xb748('0x1e')](','):[];}},'leavewhenempty':{'type':Sequelize[_0xb748('0x2')],'defaultValue':'no','set':function(_0x17a50e){this[_0xb748('0xf')]('leavewhenempty',_0x17a50e?_0x17a50e[_0xb748('0x1d')](','):[]);},'get':function(){return this['getDataValue'](_0xb748('0x20'))?this['getDataValue']('leavewhenempty')[_0xb748('0x1e')](','):[];}},'reportholdtime':{'type':Sequelize[_0xb748('0x7')]('yes','no'),'defaultValue':'no'},'ringinuse':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no'},'memberdelay':{'type':Sequelize[_0xb748('0x19')](0xb),'defaultValue':0x0},'timeoutrestart':{'type':Sequelize[_0xb748('0x7')](_0xb748('0x1a'),'no'),'defaultValue':'no'},'defaultrule':{'type':Sequelize[_0xb748('0x2')]},'description':{'type':Sequelize['STRING']},'acw':{'type':Sequelize[_0xb748('0x21')],'defaultValue':0x0,'set':function(_0x2afb84){this[_0xb748('0xf')](_0xb748('0x22'),_0x2afb84);if(_0x2afb84){if(this['getDataValue']('wrapuptime')<0x2){this['setDataValue'](_0xb748('0x23'),0x2);}}}},'acwTimeout':{'type':Sequelize[_0xb748('0x19')](0xb),'defaultValue':0xa},'dialActive':{'type':Sequelize[_0xb748('0x21')],'defaultValue':0x0,'comment':_0xb748('0x24')},'dialMethod':{'type':Sequelize['ENUM']('preview','progressive','power',_0xb748('0x17'),'booked'),'defaultValue':_0xb748('0x16'),'comment':_0xb748('0x25')},'dialLimitChannel':{'type':Sequelize[_0xb748('0x19')](0x4)[_0xb748('0x26')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0xb748('0x27')},'dialLimitQueue':{'type':Sequelize['INTEGER'](0x4)[_0xb748('0x26')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0xb748('0x28')},'dialPowerLevel':{'type':Sequelize[_0xb748('0x29')](0x2)[_0xb748('0x26')],'defaultValue':0x1,'validate':{'min':0x1,'max':0xa},'comment':'Power\x20Level:\x20Calls\x20for\x20agents\x20(min:1,\x20max:10).'},'dialPredictiveOptimization':{'type':Sequelize[_0xb748('0x7')]('agentBusyFactor',_0xb748('0x2a')),'defaultValue':_0xb748('0x2a'),'comment':_0xb748('0x2b')},'dialPredictiveOptimizationPercentage':{'type':Sequelize[_0xb748('0x29')](0x2)[_0xb748('0x26')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x5f},'comment':'Predictive\x20Optimization\x20Percentage\x20(min:\x201,\x20max:\x2095)'},'dialPredictiveInterval':{'type':Sequelize[_0xb748('0x19')](0x3)['UNSIGNED'],'defaultValue':0xa,'validate':{'min':0x5,'max':0x1e},'comment':_0xb748('0x2c')},'dialOriginateCallerIdName':{'type':Sequelize[_0xb748('0x2')]},'dialOriginateCallerIdNumber':{'type':Sequelize['STRING']},'dialOriginateTimeout':{'type':Sequelize['INTEGER'](0x3)[_0xb748('0x26')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0xb748('0x2d')},'dialQueueOptions':{'type':Sequelize[_0xb748('0x2')],'defaultValue':_0xb748('0x2e'),'comment':_0xb748('0x2f')},'dialQueueTimeout':{'type':Sequelize['INTEGER'](0x3)[_0xb748('0x26')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xb748('0x30')},'dialQueueProject':{'type':Sequelize[_0xb748('0x2')],'comment':_0xb748('0x31')},'dialCongestionMaxRetry':{'type':Sequelize[_0xb748('0x19')](0x3)[_0xb748('0x26')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xb748('0x32')},'dialCongestionRetryFrequency':{'type':Sequelize[_0xb748('0x19')](0x5)[_0xb748('0x26')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xb748('0x33')},'dialBusyMaxRetry':{'type':Sequelize[_0xb748('0x19')](0x3)[_0xb748('0x26')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'#Busy\x20Retry\x20(min:1,\x20max:999)'},'dialBusyRetryFrequency':{'type':Sequelize[_0xb748('0x19')](0x5)[_0xb748('0x26')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialNoAnswerMaxRetry':{'type':Sequelize[_0xb748('0x19')](0x3)['UNSIGNED'],'defaultValue':0x3,'comment':'#NoAnswer\x20Retry\x20(min:1,\x20max:999)'},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0xb748('0x19')](0x5)[_0xb748('0x26')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xb748('0x34')},'dialGlobalMaxRetry':{'type':Sequelize[_0xb748('0x19')](0x3)['UNSIGNED'],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0xb748('0x35')},'dialTimezone':{'type':Sequelize['STRING'],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0xb748('0x2')],'defaultValue':_0xb748('0x36')},'dialPrefix':{'type':Sequelize[_0xb748('0x2')],'defaultValue':null},'dialCheckDuplicateType':{'type':Sequelize[_0xb748('0x7')](_0xb748('0x37'),_0xb748('0x38'),_0xb748('0x39')),'defaultValue':'always'},'dialAMDActive':{'type':Sequelize[_0xb748('0x21')],'defaultValue':0x0,'comment':_0xb748('0x3a')},'dialAMDInitialSilence':{'type':Sequelize['INTEGER'](0x9)[_0xb748('0x26')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':'#AMD\x20Initial\x20Silence'},'dialAMDGreeting':{'type':Sequelize[_0xb748('0x19')](0x9)[_0xb748('0x26')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0xb748('0x3b')},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0xb748('0x19')](0x9)[_0xb748('0x26')],'defaultValue':0x320,'validate':{'min':0x0},'comment':_0xb748('0x3c')},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0xb748('0x19')](0x9)['UNSIGNED'],'defaultValue':0x1388,'validate':{'min':0x0},'comment':'#AMD\x20Total\x20Analysis\x20Time'},'dialAMDMinWordLength':{'type':Sequelize[_0xb748('0x19')](0x9)[_0xb748('0x26')],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0xb748('0x3d')},'dialAMDBetweenWordsSilence':{'type':Sequelize[_0xb748('0x19')](0x9)[_0xb748('0x26')],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0xb748('0x3e')},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0xb748('0x19')](0x9)[_0xb748('0x26')],'defaultValue':0x3,'validate':{'min':0x0},'comment':'#AMD\x20Maximum\x20Number\x20Of\x20Words'},'dialAMDSilenceThreshold':{'type':Sequelize['INTEGER'](0x5)[_0xb748('0x26')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0xb748('0x3f')},'dialAMDMaximumWordLength':{'type':Sequelize[_0xb748('0x19')](0x9)[_0xb748('0x26')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0xb748('0x40')},'dialRecallMeTimeout':{'type':Sequelize['INTEGER'](0x5)[_0xb748('0x26')],'validate':{'min':0x1},'defaultValue':0x1e,'comment':_0xb748('0x41')},'dialRecallInQueue':{'type':Sequelize[_0xb748('0x21')],'defaultValue':0x0,'comment':_0xb748('0x42')},'dialOrderByScheduledAt':{'type':Sequelize[_0xb748('0x7')]('DESC',_0xb748('0x43')),'defaultValue':_0xb748('0x44')},'dialQueueProject2':{'type':Sequelize['STRING'],'comment':_0xb748('0x31')},'dialAgiAfterHangupClient':{'type':Sequelize[_0xb748('0x21')],'defaultValue':![]},'dialAgiAfterHangupAgent':{'type':Sequelize[_0xb748('0x21')],'defaultValue':![]},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0xb748('0x19')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':'Random\x20Last\x20Digit\x20(min:1,\x20max:15)'},'dialCutDigit':{'type':Sequelize[_0xb748('0x19')](0x3)[_0xb748('0x26')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xb748('0x45')},'mandatoryDispositionPauseId':{'type':Sequelize[_0xb748('0x19')],'allowNull':!![],'comment':_0xb748('0x46')},'mandatoryDisposition':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'comment':_0xb748('0x47'),'set':function(_0x5ad2af){if(!_0x5ad2af)this[_0xb748('0xf')]('mandatoryDispositionPauseId',null);this[_0xb748('0xf')](_0xb748('0x48'),_0x5ad2af);}},'dialPredictiveIntervalMaxThreshold':{'type':Sequelize[_0xb748('0x19')](0x3)['UNSIGNED'],'defaultValue':0x14,'validate':{'min':0x1,'max':0x64}},'dialPredictiveIntervalMinThreshold':{'type':Sequelize[_0xb748('0x19')](0x3)['UNSIGNED'],'defaultValue':0xa,'validate':{'min':0x1,'max':0x64}}};
\ No newline at end of file
+var _0x9dfc=['linear','rrordered','setDataValue','getDataValue','type','dialMethod','strategy','booked','predictive','power','INTEGER','yes','all','once','TEXT','periodic_announce','join','split','joinempty','leavewhenempty','BOOLEAN','Active/Disactive\x20Campaign','preview','progressive','Dial\x20Method.','UNSIGNED','Max\x209999\x20member\x20in\x20queue(min:1,\x20max:9999),\x200\x20means\x20unlimited.','FLOAT','Power\x20Level:\x20Calls\x20for\x20agents\x20(min:1,\x20max:10).','agentBusyFactor','dropRate','Only\x20for\x20predictive\x20method.','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)','#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\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)','07:00-22:00,*,*,*','always','never','onlyIfOpen','#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)','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','mandatoryDispositionPauseId','sequelize','name','ENUM','outbound','inbound','STRING','default','ringall','leastrecent','fewestcalls','random','rrmemory'];(function(_0x576710,_0x2766d0){var _0x792aaa=function(_0x533a38){while(--_0x533a38){_0x576710['push'](_0x576710['shift']());}};_0x792aaa(++_0x2766d0);}(_0x9dfc,0x157));var _0xc9df=function(_0x9f94d,_0x33baee){_0x9f94d=_0x9f94d-0x0;var _0x4cce53=_0x9dfc[_0x9f94d];return _0x4cce53;};'use strict';var Sequelize=require(_0xc9df('0x0'));module['exports']={'name':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0xc9df('0x1'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize[_0xc9df('0x2')]('inbound',_0xc9df('0x3')),'allowNull':![],'defaultValue':_0xc9df('0x4')},'musiconhold':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':_0xc9df('0x6')},'announce':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':''},'strategy':{'type':Sequelize[_0xc9df('0x2')]('rr',_0xc9df('0x7'),_0xc9df('0x8'),_0xc9df('0x9'),_0xc9df('0xa'),_0xc9df('0xb'),_0xc9df('0xc'),'wrandom',_0xc9df('0xd')),'allowNull':![],'defaultValue':_0xc9df('0x7'),'set':function(_0x4b7908){this[_0xc9df('0xe')]('strategy',_0x4b7908?_0x4b7908:_0xc9df('0xb'));},'get':function(){var _0x53877d=this[_0xc9df('0xf')](_0xc9df('0x10'));var _0x237079=this[_0xc9df('0xf')](_0xc9df('0x11'));var _0x4995ea=this[_0xc9df('0xf')](_0xc9df('0x12'));if(_0x53877d==='inbound'){return _0x4995ea;}if(_0x237079===_0xc9df('0x13')&&_0x4995ea===_0xc9df('0xb')||_0x237079===_0xc9df('0x13')&&_0x4995ea==='roundrobin'){return _0x4995ea;}if(_0x237079==='progressive'||_0x237079===_0xc9df('0x14')||_0x237079===_0xc9df('0x15')){return _0x4995ea;}return null;}},'servicelevel':{'type':Sequelize[_0xc9df('0x16')](0xb),'defaultValue':0x0},'context':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':null},'penaltymemberslimit':{'type':Sequelize[_0xc9df('0x16')](0xb)},'timeout':{'type':Sequelize[_0xc9df('0x16')](0xb),'defaultValue':0xf},'retry':{'type':Sequelize[_0xc9df('0x16')](0xb),'defaultValue':0x2},'timeoutpriority':{'type':Sequelize[_0xc9df('0x5')]},'weight':{'type':Sequelize[_0xc9df('0x16')](0xb),'allowNull':!![],'defaultValue':0x0},'wrapuptime':{'type':Sequelize[_0xc9df('0x16')](0xb),'defaultValue':0x0},'autofill':{'type':Sequelize[_0xc9df('0x2')](_0xc9df('0x17'),'no'),'defaultValue':'yes'},'autopause':{'type':Sequelize['ENUM'](_0xc9df('0x17'),'no',_0xc9df('0x18')),'defaultValue':'no'},'autopausedelay':{'type':Sequelize[_0xc9df('0x16')](0xb)},'autopausebusy':{'type':Sequelize['ENUM'](_0xc9df('0x17'),'no'),'defaultValue':'no'},'autopauseunavail':{'type':Sequelize[_0xc9df('0x2')](_0xc9df('0x17'),'no'),'defaultValue':'no'},'maxlen':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'setinterfacevar':{'type':Sequelize[_0xc9df('0x2')](_0xc9df('0x17'),'no'),'defaultValue':'no'},'setqueueentryvar':{'type':Sequelize[_0xc9df('0x2')]('yes','no'),'defautValue':'no'},'setqueuevar':{'type':Sequelize[_0xc9df('0x2')](_0xc9df('0x17'),'no'),'defaultValue':'no'},'eventmemberstatus':{'type':Sequelize[_0xc9df('0x2')]('yes','no'),'defaultValue':'no'},'membermacro':{'type':Sequelize[_0xc9df('0x5')],'allowNull':!![]},'membergosub':{'type':Sequelize[_0xc9df('0x5')],'allowNull':!![]},'announce_frequency':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'min_announce_frequency':{'type':Sequelize[_0xc9df('0x16')](0xb),'defaultValue':0x0},'periodic_announce_frequency':{'type':Sequelize[_0xc9df('0x16')](0xb),'defaultValue':0x0},'random_periodic_announce':{'type':Sequelize[_0xc9df('0x2')](_0xc9df('0x17'),'no'),'defaultValue':'no'},'relative_periodic_announce':{'type':Sequelize[_0xc9df('0x2')](_0xc9df('0x17'),'no'),'defaultValue':_0xc9df('0x17')},'announce_holdtime':{'type':Sequelize[_0xc9df('0x2')](_0xc9df('0x17'),'no',_0xc9df('0x19')),'defaultValue':'no'},'announce_position':{'type':Sequelize['STRING'],'defaultValue':'no'},'announce_to_first_user':{'type':Sequelize['ENUM'](_0xc9df('0x17'),'no')},'announce_position_limit':{'type':Sequelize[_0xc9df('0x16')](0xb)},'announce_round_seconds':{'type':Sequelize[_0xc9df('0x2')]('0','5','10','15','20','30'),'defaultValue':'0'},'monitor_format':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':''},'monitor_type':{'type':Sequelize['STRING']},'queue_youarenext':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':null},'queue_thereare':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':null},'queue_callswaiting':{'type':Sequelize['STRING'],'defaultValue':null},'queue_holdtime':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':null},'queue_minute':{'type':Sequelize[_0xc9df('0x5')],'allowNull':!![],'defaultValue':null},'queue_minutes':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':null},'queue_seconds':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':null},'queue_thankyou':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':null},'queue_reporthold':{'type':Sequelize[_0xc9df('0x5')]},'queue_quantity1':{'type':Sequelize[_0xc9df('0x5')]},'queue_quantity2':{'type':Sequelize['STRING']},'queue_periodic_announce':{'type':Sequelize['STRING']},'queue_less_than':{'type':Sequelize[_0xc9df('0x5')]},'periodic_announce':{'type':Sequelize[_0xc9df('0x1a')],'set':function(_0x59695b){this[_0xc9df('0xe')](_0xc9df('0x1b'),_0x59695b?_0x59695b[_0xc9df('0x1c')](','):[]);},'get':function(){return this[_0xc9df('0xf')](_0xc9df('0x1b'))?this[_0xc9df('0xf')](_0xc9df('0x1b'))[_0xc9df('0x1d')](','):[];}},'joinempty':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':_0xc9df('0x17'),'set':function(_0xbd3a40){this['setDataValue']('joinempty',_0xbd3a40?_0xbd3a40[_0xc9df('0x1c')](','):[]);},'get':function(){return this[_0xc9df('0xf')](_0xc9df('0x1e'))?this[_0xc9df('0xf')](_0xc9df('0x1e'))['split'](','):[];}},'leavewhenempty':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':'no','set':function(_0x59471b){this[_0xc9df('0xe')](_0xc9df('0x1f'),_0x59471b?_0x59471b[_0xc9df('0x1c')](','):[]);},'get':function(){return this[_0xc9df('0xf')](_0xc9df('0x1f'))?this[_0xc9df('0xf')](_0xc9df('0x1f'))[_0xc9df('0x1d')](','):[];}},'reportholdtime':{'type':Sequelize[_0xc9df('0x2')](_0xc9df('0x17'),'no'),'defaultValue':'no'},'ringinuse':{'type':Sequelize['ENUM'](_0xc9df('0x17'),'no'),'defaultValue':'no'},'memberdelay':{'type':Sequelize[_0xc9df('0x16')](0xb),'defaultValue':0x0},'timeoutrestart':{'type':Sequelize['ENUM'](_0xc9df('0x17'),'no'),'defaultValue':'no'},'defaultrule':{'type':Sequelize[_0xc9df('0x5')]},'description':{'type':Sequelize[_0xc9df('0x5')]},'acw':{'type':Sequelize[_0xc9df('0x20')],'defaultValue':0x0,'set':function(_0xaf103a){this[_0xc9df('0xe')]('acw',_0xaf103a);if(_0xaf103a){if(this[_0xc9df('0xf')]('wrapuptime')<0x2){this[_0xc9df('0xe')]('wrapuptime',0x2);}}}},'acwTimeout':{'type':Sequelize[_0xc9df('0x16')](0xb),'defaultValue':0xa},'dialActive':{'type':Sequelize[_0xc9df('0x20')],'defaultValue':0x0,'comment':_0xc9df('0x21')},'dialMethod':{'type':Sequelize[_0xc9df('0x2')](_0xc9df('0x22'),_0xc9df('0x23'),_0xc9df('0x15'),_0xc9df('0x14'),_0xc9df('0x13')),'defaultValue':'progressive','comment':_0xc9df('0x24')},'dialLimitChannel':{'type':Sequelize[_0xc9df('0x16')](0x4)[_0xc9df('0x25')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':'Max\x209999\x20channels,\x200\x20means\x20unlimited.'},'dialLimitQueue':{'type':Sequelize[_0xc9df('0x16')](0x4)[_0xc9df('0x25')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0xc9df('0x26')},'dialPowerLevel':{'type':Sequelize[_0xc9df('0x27')](0x2)[_0xc9df('0x25')],'defaultValue':0x1,'validate':{'min':0x1,'max':0xa},'comment':_0xc9df('0x28')},'dialPredictiveOptimization':{'type':Sequelize[_0xc9df('0x2')](_0xc9df('0x29'),_0xc9df('0x2a')),'defaultValue':_0xc9df('0x2a'),'comment':_0xc9df('0x2b')},'dialPredictiveOptimizationPercentage':{'type':Sequelize['FLOAT'](0x2)[_0xc9df('0x25')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x5f},'comment':_0xc9df('0x2c')},'dialPredictiveInterval':{'type':Sequelize[_0xc9df('0x16')](0x3)[_0xc9df('0x25')],'defaultValue':0xa,'validate':{'min':0x5,'max':0x1e},'comment':_0xc9df('0x2d')},'dialOriginateCallerIdName':{'type':Sequelize['STRING']},'dialOriginateCallerIdNumber':{'type':Sequelize[_0xc9df('0x5')]},'dialOriginateTimeout':{'type':Sequelize[_0xc9df('0x16')](0x3)[_0xc9df('0x25')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0xc9df('0x2e')},'dialQueueOptions':{'type':Sequelize['STRING'],'defaultValue':_0xc9df('0x2f'),'comment':'https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_Queue'},'dialQueueTimeout':{'type':Sequelize[_0xc9df('0x16')](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xc9df('0x30')},'dialQueueProject':{'type':Sequelize[_0xc9df('0x5')],'comment':'AGI\x20queue\x20option\x20(use:\x20agi://127.0.0.1/square,<project_name>)'},'dialCongestionMaxRetry':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xc9df('0x31')},'dialCongestionRetryFrequency':{'type':Sequelize[_0xc9df('0x16')](0x5)[_0xc9df('0x25')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xc9df('0x32')},'dialBusyMaxRetry':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xc9df('0x33')},'dialBusyRetryFrequency':{'type':Sequelize[_0xc9df('0x16')](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xc9df('0x34')},'dialNoAnswerMaxRetry':{'type':Sequelize['INTEGER'](0x3)[_0xc9df('0x25')],'defaultValue':0x3,'comment':'#NoAnswer\x20Retry\x20(min:1,\x20max:999)'},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0xc9df('0x16')](0x5)[_0xc9df('0x25')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xc9df('0x35')},'dialGlobalMaxRetry':{'type':Sequelize[_0xc9df('0x16')](0x3)[_0xc9df('0x25')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0xc9df('0x36')},'dialTimezone':{'type':Sequelize['STRING'],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':_0xc9df('0x37')},'dialPrefix':{'type':Sequelize[_0xc9df('0x5')],'defaultValue':null},'dialCheckDuplicateType':{'type':Sequelize['ENUM'](_0xc9df('0x38'),_0xc9df('0x39'),_0xc9df('0x3a')),'defaultValue':_0xc9df('0x38')},'dialAMDActive':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':'Active/Disactive\x20AMD'},'dialAMDInitialSilence':{'type':Sequelize[_0xc9df('0x16')](0x9)[_0xc9df('0x25')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0xc9df('0x3b')},'dialAMDGreeting':{'type':Sequelize[_0xc9df('0x16')](0x9)[_0xc9df('0x25')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0xc9df('0x3c')},'dialAMDAfterGreetingSilence':{'type':Sequelize['INTEGER'](0x9)[_0xc9df('0x25')],'defaultValue':0x320,'validate':{'min':0x0},'comment':'#AMD\x20After\x20Greeting\x20Silence'},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0xc9df('0x16')](0x9)[_0xc9df('0x25')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0xc9df('0x3d')},'dialAMDMinWordLength':{'type':Sequelize[_0xc9df('0x16')](0x9)[_0xc9df('0x25')],'defaultValue':0x64,'validate':{'min':0x0},'comment':'#AMD\x20Min\x20Word\x20Length'},'dialAMDBetweenWordsSilence':{'type':Sequelize['INTEGER'](0x9)['UNSIGNED'],'defaultValue':0x32,'validate':{'min':0x0},'comment':'#AMD\x20Between\x20Words\x20Silence'},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0xc9df('0x16')](0x9)[_0xc9df('0x25')],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0xc9df('0x3e')},'dialAMDSilenceThreshold':{'type':Sequelize['INTEGER'](0x5)[_0xc9df('0x25')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0xc9df('0x3f')},'dialAMDMaximumWordLength':{'type':Sequelize[_0xc9df('0x16')](0x9)['UNSIGNED'],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0xc9df('0x40')},'dialRecallMeTimeout':{'type':Sequelize[_0xc9df('0x16')](0x5)[_0xc9df('0x25')],'validate':{'min':0x1},'defaultValue':0x1e,'comment':'#RecallMe\x20Timeout\x20(min:1)'},'dialRecallInQueue':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':'Active/Disactive\x20Recall\x20In\x20Queue'},'dialOrderByScheduledAt':{'type':Sequelize['ENUM'](_0xc9df('0x41'),_0xc9df('0x42')),'defaultValue':_0xc9df('0x41')},'dialQueueProject2':{'type':Sequelize['STRING'],'comment':'AGI\x20queue\x20option\x20(use:\x20agi://127.0.0.1/square,<project_name>)'},'dialAgiAfterHangupClient':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'dialAgiAfterHangupAgent':{'type':Sequelize[_0xc9df('0x20')],'defaultValue':![]},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0xc9df('0x16')](0x3)[_0xc9df('0x25')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xc9df('0x43')},'dialCutDigit':{'type':Sequelize[_0xc9df('0x16')](0x3)[_0xc9df('0x25')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':'Cut\x20Digit\x20(min:1,\x20max:15)'},'mandatoryDispositionPauseId':{'type':Sequelize[_0xc9df('0x16')],'allowNull':!![],'comment':_0xc9df('0x44')},'mandatoryDisposition':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'comment':_0xc9df('0x45'),'set':function(_0x12e9f2){if(!_0x12e9f2)this[_0xc9df('0xe')](_0xc9df('0x46'),null);this[_0xc9df('0xe')]('mandatoryDisposition',_0x12e9f2);}},'dialPredictiveIntervalMaxThreshold':{'type':Sequelize[_0xc9df('0x16')](0x3)[_0xc9df('0x25')],'defaultValue':0x14,'validate':{'min':0x1,'max':0x64}},'dialPredictiveIntervalMinThreshold':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0xa,'validate':{'min':0x1,'max':0x64}}};
\ No newline at end of file
index 68ba80b..b08519e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x049e=['cm_hopper_black','removeBlackLists','html-pdf','eml-format','zip-dir','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./voiceQueue.socket','sendStatus','end','status','offset','limit','Content-Range','json','reject','save','update','then','VoiceQueues','QueueCampaigns','outbound','filter','ignore','map','includes','value','type','UserProfileResource','destroy','error','send','index','VoiceQueue','rawAttributes','model','query','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filters','key','VIRTUAL','field','merge','count','includeAll','include','findAll','rows','params','keys','length','find','catch','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','inbound','userProfileId','autoAssociation','name','clone','options','omit','createdAt','updatedAt','UserProfileSection','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getHoppers','pick','VoiceQueueId','CmHopper','findOne','CmHopperHistory','getHopperFinals','CmHopperFinal','getHopperBlacks','CmHopperBlack','getTeams','Team','teams','User','Agents','voicePause','interface','flatMap','forEach','penalty','sequelize','transaction','addTeams','each','UserVoiceQueue','findOrCreate','UserVoiceQueueRt','isNil','format','SIP/%s','emit','removeTeams','ids','select','tq.TeamId','team_has_voice_queues','join','user_has_teams','ut.UserId\x20=\x20?','push','toString','QueryTypes','SELECT','every','TeamId','all','userVoiceQueue:remove','addAgents','spread','userVoiceQueue:save','online','isEmpty','removeAgents','isArray','getAgents','getMembers','CmList','getLists','addLists','dialCheckDuplicateType','always','insert','into','cm_hopper','fromQuery','phone','scheduledAt','ContactId','NOW()','ListId','from','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','CmListId','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','COALESCE(calleridnum,\x27\x27)','cm_hopper_final','VoiceQueueId\x20=\x20?','cm_contacts','removeLists','getBlackLists','addBlackLists'];(function(_0x12dfeb,_0x3fe94f){var _0x3f2fb8=function(_0x2770e5){while(--_0x2770e5){_0x12dfeb['push'](_0x12dfeb['shift']());}};_0x3f2fb8(++_0x3fe94f);}(_0x049e,0x16a));var _0xe049=function(_0x3e32a8,_0x255953){_0x3e32a8=_0x3e32a8-0x0;var _0x2997b0=_0x049e[_0x3e32a8];return _0x2997b0;};'use strict';var pdf=require(_0xe049('0x0'));var emlformat=require(_0xe049('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xe049('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xe049('0x3'));var moment=require(_0xe049('0x4'));var BPromise=require(_0xe049('0x5'));var Mustache=require(_0xe049('0x6'));var util=require(_0xe049('0x7'));var path=require('path');var sox=require(_0xe049('0x8'));var csv=require(_0xe049('0x9'));var ejs=require(_0xe049('0xa'));var fs=require('fs');var _=require(_0xe049('0xb'));var squel=require(_0xe049('0xc'));var crypto=require(_0xe049('0xd'));var jsforce=require(_0xe049('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xe049('0x9'));var querystring=require(_0xe049('0xf'));var Papa=require(_0xe049('0x10'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0xe049('0x11'));var hardwareService=require(_0xe049('0x12'));var logger=require(_0xe049('0x13'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xe049('0x14'))['db'];config[_0xe049('0x15')]=_[_0xe049('0x16')](config[_0xe049('0x15')],{'host':_0xe049('0x17'),'port':0x18eb});var socket=require(_0xe049('0x18'))(new Redis(config[_0xe049('0x15')]));require(_0xe049('0x19'))['register'](socket);function respondWithStatusCode(_0x20c286,_0x3f4a57){_0x3f4a57=_0x3f4a57||0xcc;return function(_0x3924a4){if(_0x3924a4){return _0x20c286[_0xe049('0x1a')](_0x3f4a57);}return _0x20c286['status'](_0x3f4a57)[_0xe049('0x1b')]();};}function respondWithResult(_0xcc35b6,_0x5c90fd){_0x5c90fd=_0x5c90fd||0xc8;return function(_0x388be0){if(_0x388be0){return _0xcc35b6[_0xe049('0x1c')](_0x5c90fd)['json'](_0x388be0);}};}function respondWithFilteredResult(_0x8b9bfe,_0x5291a9){return function(_0x5d435b){if(_0x5d435b){var _0x400a88=_0x5d435b['count'],_0x54c303=_0x5291a9['offset'],_0x520dd9=_0x5291a9[_0xe049('0x1d')]+_0x5291a9[_0xe049('0x1e')],_0x3cbbeb;if(_0x520dd9>=_0x400a88){_0x520dd9=_0x400a88;_0x3cbbeb=0xc8;}else{_0x3cbbeb=0xce;}_0x8b9bfe['status'](_0x3cbbeb);return _0x8b9bfe['set'](_0xe049('0x1f'),_0x54c303+'-'+_0x520dd9+'/'+_0x400a88)[_0xe049('0x20')](_0x5d435b);}return null;};}function patchUpdates(_0x1d2f5b){return function(_0x430421){try{jsonpatch['apply'](_0x430421,_0x1d2f5b,!![]);}catch(_0x572f29){return BPromise[_0xe049('0x21')](_0x572f29);}return _0x430421[_0xe049('0x22')]();};}function saveUpdates(_0x572a80,_0x36a03b){return function(_0x3f14eb){if(_0x3f14eb){return _0x3f14eb[_0xe049('0x23')](_0x572a80)['then'](function(_0x197358){return _0x197358;});}return null;};}function removeEntity(_0x3b0f54,_0x4c7492){return function(_0x4848c9){if(_0x4848c9){return _0x4848c9['destroy']()[_0xe049('0x24')](function(){var _0x5954c0=_0x4848c9['get']({'plain':!![]});var _0x1aafd1=[{'name':_0xe049('0x25'),'value':'inbound','ignore':![]},{'name':_0xe049('0x26'),'value':_0xe049('0x27'),'ignore':![]}];var _0x3e5c7f=_(_0x1aafd1)[_0xe049('0x28')](_0xe049('0x29'))[_0xe049('0x2a')]('value')['value']();if(_[_0xe049('0x2b')](_0x3e5c7f,_0x5954c0['type'])){return;}var _0x38ff5b=_['find'](_0x1aafd1,[_0xe049('0x2c'),_0x5954c0[_0xe049('0x2d')]])['name'];return db[_0xe049('0x2e')][_0xe049('0x2f')]({'where':{'type':_0x38ff5b,'resourceId':_0x5954c0['id']}})[_0xe049('0x24')](function(){return _0x4848c9;});})[_0xe049('0x24')](function(){_0x3b0f54[_0xe049('0x1c')](0xcc)[_0xe049('0x1b')]();});}};}function handleEntityNotFound(_0x123d2e,_0x44faff){return function(_0x4038f0){if(!_0x4038f0){_0x123d2e[_0xe049('0x1a')](0x194);}return _0x4038f0;};}function handleError(_0x1b6331,_0x568b45){_0x568b45=_0x568b45||0x1f4;return function(_0x397dc3){logger[_0xe049('0x30')](_0x397dc3['stack']);if(_0x397dc3['name']){delete _0x397dc3['name'];}_0x1b6331['status'](_0x568b45)[_0xe049('0x31')](_0x397dc3);};}exports[_0xe049('0x32')]=function(_0x39f4ea,_0x6d6cf3){var _0x9af9bd={},_0x5e2a91={},_0x5acf73={'count':0x0,'rows':[]};var _0x25a576=db[_0xe049('0x33')][_0xe049('0x34')];_0x5e2a91[_0xe049('0x35')]=_['keys'](_0x25a576);_0x5e2a91[_0xe049('0x36')]=_['keys'](_0x39f4ea[_0xe049('0x36')]);_0x5e2a91['filters']=_[_0xe049('0x37')](_0x5e2a91[_0xe049('0x35')],_0x5e2a91[_0xe049('0x36')]);_0x9af9bd[_0xe049('0x38')]=_[_0xe049('0x37')](_0x5e2a91[_0xe049('0x35')],qs[_0xe049('0x39')](_0x39f4ea[_0xe049('0x36')][_0xe049('0x39')]));_0x9af9bd[_0xe049('0x38')]=_0x9af9bd[_0xe049('0x38')]['length']?_0x9af9bd[_0xe049('0x38')]:_0x5e2a91[_0xe049('0x35')];if(!_0x39f4ea[_0xe049('0x36')][_0xe049('0x3a')](_0xe049('0x3b'))){_0x9af9bd[_0xe049('0x1e')]=qs[_0xe049('0x1e')](_0x39f4ea[_0xe049('0x36')]['limit']);_0x9af9bd[_0xe049('0x1d')]=qs[_0xe049('0x1d')](_0x39f4ea[_0xe049('0x36')][_0xe049('0x1d')]);}_0x9af9bd[_0xe049('0x3c')]=qs[_0xe049('0x3d')](_0x39f4ea[_0xe049('0x36')][_0xe049('0x3d')]);_0x9af9bd[_0xe049('0x3e')]=qs[_0xe049('0x3f')](_['pick'](_0x39f4ea[_0xe049('0x36')],_0x5e2a91[_0xe049('0x3f')]));if(_0x39f4ea[_0xe049('0x36')]['filter']){_0x9af9bd[_0xe049('0x3e')]=_['merge'](_0x9af9bd['where'],{'$or':_[_0xe049('0x2a')](_0x25a576,function(_0x5f06d9){if(_0x5f06d9[_0xe049('0x2d')][_0xe049('0x40')]!==_0xe049('0x41')){var _0xe4f184={};_0xe4f184[_0x5f06d9[_0xe049('0x42')]]={'$like':'%'+_0x39f4ea['query'][_0xe049('0x28')]+'%'};return _0xe4f184;}})});}_0x9af9bd=_[_0xe049('0x43')]({},_0x9af9bd,_0x39f4ea['options']);var _0x546137={'where':_0x9af9bd[_0xe049('0x3e')]};return db[_0xe049('0x33')][_0xe049('0x44')](_0x546137)[_0xe049('0x24')](function(_0x82e245){_0x5acf73[_0xe049('0x44')]=_0x82e245;if(_0x39f4ea['query'][_0xe049('0x45')]){_0x9af9bd[_0xe049('0x46')]=[{'all':!![]}];}return db['VoiceQueue'][_0xe049('0x47')](_0x9af9bd);})[_0xe049('0x24')](function(_0x47b61a){_0x5acf73[_0xe049('0x48')]=_0x47b61a;return _0x5acf73;})[_0xe049('0x24')](respondWithFilteredResult(_0x6d6cf3,_0x9af9bd))['catch'](handleError(_0x6d6cf3,null));};exports['show']=function(_0x3f4f68,_0x3fcc2b){var _0x188418={'raw':![],'where':{'id':_0x3f4f68[_0xe049('0x49')]['id']}},_0x5ff695={};_0x5ff695[_0xe049('0x35')]=_['keys'](db[_0xe049('0x33')][_0xe049('0x34')]);_0x5ff695['query']=_[_0xe049('0x4a')](_0x3f4f68['query']);_0x5ff695[_0xe049('0x3f')]=_['intersection'](_0x5ff695[_0xe049('0x35')],_0x5ff695['query']);_0x188418[_0xe049('0x38')]=_[_0xe049('0x37')](_0x5ff695[_0xe049('0x35')],qs[_0xe049('0x39')](_0x3f4f68[_0xe049('0x36')]['fields']));_0x188418[_0xe049('0x38')]=_0x188418[_0xe049('0x38')][_0xe049('0x4b')]?_0x188418[_0xe049('0x38')]:_0x5ff695[_0xe049('0x35')];if(_0x3f4f68[_0xe049('0x36')][_0xe049('0x45')]){_0x188418[_0xe049('0x46')]=[{'all':!![]}];}_0x188418=_[_0xe049('0x43')]({},_0x188418,_0x3f4f68['options']);return db['VoiceQueue'][_0xe049('0x4c')](_0x188418)[_0xe049('0x24')](handleEntityNotFound(_0x3fcc2b,null))[_0xe049('0x24')](respondWithResult(_0x3fcc2b,null))[_0xe049('0x4d')](handleError(_0x3fcc2b,null));};exports[_0xe049('0x4e')]=function(_0x3c419b,_0x39604a){return db[_0xe049('0x33')][_0xe049('0x4e')](_0x3c419b[_0xe049('0x4f')],{})[_0xe049('0x24')](function(_0x5f2c2b){var _0x36346a=_0x3c419b[_0xe049('0x50')][_0xe049('0x51')]({'plain':!![]});if(!_0x36346a)throw new Error(_0xe049('0x52'));if(_0x36346a[_0xe049('0x53')]===_0xe049('0x50')){var _0x373a49=_0x5f2c2b['get']({'plain':!![]});var _0x4e34da=[{'name':'VoiceQueues','value':_0xe049('0x54')},{'name':_0xe049('0x26'),'value':'outbound'}];var _0x2e361b=_[_0xe049('0x4c')](_0x4e34da,[_0xe049('0x2c'),_0x373a49[_0xe049('0x2d')]])['name'];return db['UserProfileSection'][_0xe049('0x4c')]({'where':{'name':_0x2e361b,'userProfileId':_0x36346a[_0xe049('0x55')]},'raw':!![]})['then'](function(_0x4e7084){if(_0x4e7084&&_0x4e7084[_0xe049('0x56')]===0x0){return db['UserProfileResource'][_0xe049('0x4e')]({'name':_0x373a49[_0xe049('0x57')],'resourceId':_0x373a49['id'],'type':_0x4e7084['name'],'sectionId':_0x4e7084['id']},{})[_0xe049('0x24')](function(){return _0x5f2c2b;});}else{return _0x5f2c2b;}})['catch'](function(_0x356605){logger[_0xe049('0x30')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x356605);throw _0x356605;});}return _0x5f2c2b;})[_0xe049('0x24')](respondWithResult(_0x39604a,0xc9))[_0xe049('0x4d')](handleError(_0x39604a,null));};exports[_0xe049('0x58')]=function(_0x439be7,_0x421d54){var _0x28beed={'raw':![],'where':{'id':_0x439be7[_0xe049('0x49')]['id']}},_0x26ccd4={};_0x26ccd4[_0xe049('0x35')]=_[_0xe049('0x4a')](db['VoiceQueue'][_0xe049('0x34')]);_0x28beed[_0xe049('0x38')]=_[_0xe049('0x37')](_0x26ccd4['model'],qs[_0xe049('0x39')](_0x439be7[_0xe049('0x36')][_0xe049('0x39')]));_0x28beed[_0xe049('0x38')]=_0x28beed[_0xe049('0x38')][_0xe049('0x4b')]?_0x28beed[_0xe049('0x38')]:_0x26ccd4['model'];if(_0x439be7[_0xe049('0x36')]['includeAll']){_0x28beed[_0xe049('0x46')]=[{'all':!![]}];}_0x28beed=_['merge']({},_0x28beed,_0x439be7[_0xe049('0x59')]);return db[_0xe049('0x33')][_0xe049('0x4c')](_0x28beed)[_0xe049('0x24')](handleEntityNotFound(_0x421d54,null))[_0xe049('0x24')](function(_0x4af8a3){if(_0x4af8a3){var _0x329a6d=_0x4af8a3[_0xe049('0x51')]({'plain':!![]});_0x329a6d=qs[_0xe049('0x5a')](_0x329a6d,['id',_0xe049('0x5b'),_0xe049('0x5c')]);_0x439be7[_0xe049('0x4f')]=_[_0xe049('0x5a')](_0x439be7[_0xe049('0x4f')],['id','createdAt','updatedAt']);return db[_0xe049('0x33')][_0xe049('0x4e')](_['merge'](_0x329a6d,_0x439be7[_0xe049('0x4f')]),{'include':_0x439be7[_0xe049('0x36')][_0xe049('0x45')]?[{'all':!![]}]:undefined})[_0xe049('0x24')](function(_0x503f09){var _0x485b0b=_0x439be7[_0xe049('0x50')]['get']({'plain':!![]});if(!_0x485b0b)throw new Error(_0xe049('0x52'));if(_0x485b0b[_0xe049('0x53')]===_0xe049('0x50')){var _0x1a109a=_0x503f09[_0xe049('0x51')]({'plain':!![]});var _0x3e8827=[{'name':_0xe049('0x25'),'value':_0xe049('0x54')},{'name':'QueueCampaigns','value':_0xe049('0x27')}];var _0x371b78=_[_0xe049('0x4c')](_0x3e8827,[_0xe049('0x2c'),_0x1a109a[_0xe049('0x2d')]])['name'];return db[_0xe049('0x5d')][_0xe049('0x4c')]({'where':{'name':_0x371b78,'userProfileId':_0x485b0b[_0xe049('0x55')]},'raw':!![]})[_0xe049('0x24')](function(_0x5a1431){if(_0x5a1431&&_0x5a1431['autoAssociation']===0x0){return db[_0xe049('0x2e')][_0xe049('0x4e')]({'name':_0x1a109a[_0xe049('0x57')],'resourceId':_0x1a109a['id'],'type':_0x5a1431[_0xe049('0x57')],'sectionId':_0x5a1431['id']},{})[_0xe049('0x24')](function(){return _0x503f09;});}else{return _0x503f09;}})[_0xe049('0x4d')](function(_0x2b6341){logger[_0xe049('0x30')](_0xe049('0x5e'),_0x2b6341);throw _0x2b6341;});}return _0x503f09;});}})[_0xe049('0x24')](respondWithResult(_0x421d54,0xc9))[_0xe049('0x4d')](handleError(_0x421d54,null));};exports[_0xe049('0x23')]=function(_0x41ca25,_0x4025e9){if(_0x41ca25[_0xe049('0x4f')]['id']){delete _0x41ca25[_0xe049('0x4f')]['id'];}return db['VoiceQueue']['find']({'where':{'id':_0x41ca25[_0xe049('0x49')]['id']}})[_0xe049('0x24')](handleEntityNotFound(_0x4025e9,null))[_0xe049('0x24')](saveUpdates(_0x41ca25['body'],null))[_0xe049('0x24')](respondWithResult(_0x4025e9,null))[_0xe049('0x4d')](handleError(_0x4025e9,null));};exports['destroy']=function(_0x475cd2,_0x7c4474){return db['VoiceQueue'][_0xe049('0x4c')]({'where':{'id':_0x475cd2[_0xe049('0x49')]['id']}})[_0xe049('0x24')](handleEntityNotFound(_0x7c4474,null))[_0xe049('0x24')](removeEntity(_0x7c4474,null))[_0xe049('0x4d')](handleError(_0x7c4474,null));};exports[_0xe049('0x5f')]=function(_0x104b8d,_0x2e3f47,_0x40f838){var _0xe4e74={'raw':![],'where':{}};var _0xea2673={};var _0x1555e4={'count':0x0,'rows':[]};return db[_0xe049('0x33')]['findOne']({'where':{'id':_0x104b8d[_0xe049('0x49')]['id']}})['then'](handleEntityNotFound(_0x2e3f47,null))['then'](function(_0x247e55){if(_0x247e55){_0xea2673[_0xe049('0x35')]=_[_0xe049('0x4a')](db['CmHopper'][_0xe049('0x34')]);_0xea2673['query']=_[_0xe049('0x4a')](_0x104b8d['query']);_0xea2673[_0xe049('0x3f')]=_[_0xe049('0x37')](_0xea2673[_0xe049('0x35')],_0xea2673[_0xe049('0x36')]);_0xe4e74[_0xe049('0x38')]=_[_0xe049('0x37')](_0xea2673[_0xe049('0x35')],qs[_0xe049('0x39')](_0x104b8d['query']['fields']));_0xe4e74[_0xe049('0x38')]=_0xe4e74[_0xe049('0x38')][_0xe049('0x4b')]?_0xe4e74[_0xe049('0x38')]:_0xea2673[_0xe049('0x35')];if(!_0x104b8d[_0xe049('0x36')]['hasOwnProperty'](_0xe049('0x3b'))){_0xe4e74['limit']=qs['limit'](_0x104b8d[_0xe049('0x36')][_0xe049('0x1e')]);_0xe4e74[_0xe049('0x1d')]=qs['offset'](_0x104b8d[_0xe049('0x36')]['offset']);}_0xe4e74['order']=qs[_0xe049('0x3d')](_0x104b8d[_0xe049('0x36')][_0xe049('0x3d')]);_0xe4e74['where']=qs['filters'](_[_0xe049('0x60')](_0x104b8d[_0xe049('0x36')],_0xea2673['filters']));_0xe4e74[_0xe049('0x3e')][_0xe049('0x61')]=_0x247e55['id'];if(_0x104b8d[_0xe049('0x36')][_0xe049('0x28')]){_0xe4e74['where']=_[_0xe049('0x43')](_0xe4e74[_0xe049('0x3e')],{'$or':_[_0xe049('0x2a')](_0xe4e74['attributes'],function(_0x271514){var _0x409a7a={};_0x409a7a[_0x271514]={'$like':'%'+_0x104b8d[_0xe049('0x36')][_0xe049('0x28')]+'%'};return _0x409a7a;})});}_0xe4e74=_['merge']({},_0xe4e74,_0x104b8d[_0xe049('0x59')]);return db[_0xe049('0x62')][_0xe049('0x44')]({'where':_0xe4e74['where']})[_0xe049('0x24')](function(_0x9aa9d0){_0x1555e4['count']=_0x9aa9d0;if(_0x104b8d[_0xe049('0x36')][_0xe049('0x45')]){_0xe4e74['include']=[{'all':!![]}];}return db[_0xe049('0x62')][_0xe049('0x47')](_0xe4e74);})[_0xe049('0x24')](function(_0x37ca72){_0x1555e4[_0xe049('0x48')]=_0x37ca72;return _0x1555e4;});}})[_0xe049('0x24')](respondWithFilteredResult(_0x2e3f47,_0xe4e74))[_0xe049('0x4d')](handleError(_0x2e3f47,null));};exports['getHopperHistories']=function(_0x5274d3,_0x4f00c9,_0x10894b){var _0x4c3591={'raw':!![],'where':{}};var _0x14a609={};var _0xbdea83={'count':0x0,'rows':[]};return db[_0xe049('0x33')][_0xe049('0x63')]({'where':{'id':_0x5274d3[_0xe049('0x49')]['id']}})[_0xe049('0x24')](handleEntityNotFound(_0x4f00c9,null))[_0xe049('0x24')](function(_0x5c3fdc){if(_0x5c3fdc){_0x14a609['model']=_[_0xe049('0x4a')](db[_0xe049('0x64')]['rawAttributes']);_0x14a609['query']=_[_0xe049('0x4a')](_0x5274d3['query']);_0x14a609['filters']=_[_0xe049('0x37')](_0x14a609[_0xe049('0x35')],_0x14a609[_0xe049('0x36')]);_0x4c3591[_0xe049('0x38')]=_[_0xe049('0x37')](_0x14a609[_0xe049('0x35')],qs['fields'](_0x5274d3[_0xe049('0x36')][_0xe049('0x39')]));_0x4c3591[_0xe049('0x38')]=_0x4c3591['attributes']['length']?_0x4c3591[_0xe049('0x38')]:_0x14a609[_0xe049('0x35')];if(!_0x5274d3[_0xe049('0x36')]['hasOwnProperty'](_0xe049('0x3b'))){_0x4c3591[_0xe049('0x1e')]=qs[_0xe049('0x1e')](_0x5274d3[_0xe049('0x36')][_0xe049('0x1e')]);_0x4c3591[_0xe049('0x1d')]=qs[_0xe049('0x1d')](_0x5274d3[_0xe049('0x36')]['offset']);}_0x4c3591[_0xe049('0x3c')]=qs[_0xe049('0x3d')](_0x5274d3[_0xe049('0x36')][_0xe049('0x3d')]);_0x4c3591[_0xe049('0x3e')]=qs[_0xe049('0x3f')](_[_0xe049('0x60')](_0x5274d3[_0xe049('0x36')],_0x14a609[_0xe049('0x3f')]));_0x4c3591[_0xe049('0x3e')]['VoiceQueueId']=_0x5c3fdc['id'];if(_0x5274d3['query']['filter']){_0x4c3591['where']=_[_0xe049('0x43')](_0x4c3591['where'],{'$or':_['map'](_0x4c3591[_0xe049('0x38')],function(_0x5e5c9a){var _0x55c600={};_0x55c600[_0x5e5c9a]={'$like':'%'+_0x5274d3[_0xe049('0x36')][_0xe049('0x28')]+'%'};return _0x55c600;})});}_0x4c3591=_['merge']({},_0x4c3591,_0x5274d3[_0xe049('0x59')]);return db[_0xe049('0x64')][_0xe049('0x44')]({'where':_0x4c3591['where']})[_0xe049('0x24')](function(_0x243b5f){_0xbdea83['count']=_0x243b5f;if(_0x5274d3[_0xe049('0x36')][_0xe049('0x45')]){_0x4c3591[_0xe049('0x46')]=[{'all':!![]}];}return db[_0xe049('0x64')][_0xe049('0x47')](_0x4c3591);})[_0xe049('0x24')](function(_0x24c02e){_0xbdea83[_0xe049('0x48')]=_0x24c02e;return _0xbdea83;});}})[_0xe049('0x24')](respondWithFilteredResult(_0x4f00c9,_0x4c3591))[_0xe049('0x4d')](handleError(_0x4f00c9,null));};exports[_0xe049('0x65')]=function(_0x3d3150,_0x107c65,_0x42b727){var _0x4c5a51={'raw':!![],'where':{}};var _0x496bca={};var _0x5de658={'count':0x0,'rows':[]};return db[_0xe049('0x33')]['findOne']({'where':{'id':_0x3d3150[_0xe049('0x49')]['id']}})['then'](handleEntityNotFound(_0x107c65,null))[_0xe049('0x24')](function(_0x328a37){if(_0x328a37){_0x496bca['model']=_[_0xe049('0x4a')](db[_0xe049('0x66')]['rawAttributes']);_0x496bca[_0xe049('0x36')]=_['keys'](_0x3d3150[_0xe049('0x36')]);_0x496bca[_0xe049('0x3f')]=_[_0xe049('0x37')](_0x496bca[_0xe049('0x35')],_0x496bca['query']);_0x4c5a51[_0xe049('0x38')]=_['intersection'](_0x496bca['model'],qs['fields'](_0x3d3150[_0xe049('0x36')][_0xe049('0x39')]));_0x4c5a51[_0xe049('0x38')]=_0x4c5a51[_0xe049('0x38')][_0xe049('0x4b')]?_0x4c5a51[_0xe049('0x38')]:_0x496bca[_0xe049('0x35')];if(!_0x3d3150['query'][_0xe049('0x3a')]('nolimit')){_0x4c5a51[_0xe049('0x1e')]=qs['limit'](_0x3d3150[_0xe049('0x36')][_0xe049('0x1e')]);_0x4c5a51['offset']=qs[_0xe049('0x1d')](_0x3d3150[_0xe049('0x36')][_0xe049('0x1d')]);}_0x4c5a51[_0xe049('0x3c')]=qs[_0xe049('0x3d')](_0x3d3150[_0xe049('0x36')][_0xe049('0x3d')]);_0x4c5a51['where']=qs[_0xe049('0x3f')](_['pick'](_0x3d3150[_0xe049('0x36')],_0x496bca[_0xe049('0x3f')]));_0x4c5a51['where'][_0xe049('0x61')]=_0x328a37['id'];if(_0x3d3150[_0xe049('0x36')][_0xe049('0x28')]){_0x4c5a51[_0xe049('0x3e')]=_[_0xe049('0x43')](_0x4c5a51['where'],{'$or':_[_0xe049('0x2a')](_0x4c5a51[_0xe049('0x38')],function(_0x3999b7){var _0x371709={};_0x371709[_0x3999b7]={'$like':'%'+_0x3d3150[_0xe049('0x36')][_0xe049('0x28')]+'%'};return _0x371709;})});}_0x4c5a51=_[_0xe049('0x43')]({},_0x4c5a51,_0x3d3150[_0xe049('0x59')]);return db[_0xe049('0x66')][_0xe049('0x44')]({'where':_0x4c5a51[_0xe049('0x3e')]})[_0xe049('0x24')](function(_0xdba2ad){_0x5de658[_0xe049('0x44')]=_0xdba2ad;if(_0x3d3150['query']['includeAll']){_0x4c5a51[_0xe049('0x46')]=[{'all':!![]}];}return db[_0xe049('0x66')][_0xe049('0x47')](_0x4c5a51);})['then'](function(_0x56dd85){_0x5de658[_0xe049('0x48')]=_0x56dd85;return _0x5de658;});}})[_0xe049('0x24')](respondWithFilteredResult(_0x107c65,_0x4c5a51))[_0xe049('0x4d')](handleError(_0x107c65,null));};exports[_0xe049('0x67')]=function(_0x3b1ebe,_0x1f9e7d,_0x257f9b){var _0x1be432={'raw':!![],'where':{}};var _0x2fd415={};var _0x4edbe5={'count':0x0,'rows':[]};return db[_0xe049('0x33')][_0xe049('0x63')]({'where':{'id':_0x3b1ebe[_0xe049('0x49')]['id']}})['then'](handleEntityNotFound(_0x1f9e7d,null))['then'](function(_0x5c3608){if(_0x5c3608){_0x2fd415['model']=_[_0xe049('0x4a')](db[_0xe049('0x68')]['rawAttributes']);_0x2fd415[_0xe049('0x36')]=_[_0xe049('0x4a')](_0x3b1ebe[_0xe049('0x36')]);_0x2fd415[_0xe049('0x3f')]=_[_0xe049('0x37')](_0x2fd415['model'],_0x2fd415[_0xe049('0x36')]);_0x1be432['attributes']=_[_0xe049('0x37')](_0x2fd415['model'],qs[_0xe049('0x39')](_0x3b1ebe[_0xe049('0x36')][_0xe049('0x39')]));_0x1be432[_0xe049('0x38')]=_0x1be432[_0xe049('0x38')][_0xe049('0x4b')]?_0x1be432[_0xe049('0x38')]:_0x2fd415[_0xe049('0x35')];if(!_0x3b1ebe[_0xe049('0x36')][_0xe049('0x3a')](_0xe049('0x3b'))){_0x1be432[_0xe049('0x1e')]=qs[_0xe049('0x1e')](_0x3b1ebe[_0xe049('0x36')][_0xe049('0x1e')]);_0x1be432[_0xe049('0x1d')]=qs[_0xe049('0x1d')](_0x3b1ebe['query'][_0xe049('0x1d')]);}_0x1be432[_0xe049('0x3c')]=qs[_0xe049('0x3d')](_0x3b1ebe[_0xe049('0x36')][_0xe049('0x3d')]);_0x1be432[_0xe049('0x3e')]=qs[_0xe049('0x3f')](_[_0xe049('0x60')](_0x3b1ebe[_0xe049('0x36')],_0x2fd415[_0xe049('0x3f')]));_0x1be432[_0xe049('0x3e')]['VoiceQueueId']=_0x5c3608['id'];if(_0x3b1ebe['query'][_0xe049('0x28')]){_0x1be432[_0xe049('0x3e')]=_['merge'](_0x1be432[_0xe049('0x3e')],{'$or':_['map'](_0x1be432[_0xe049('0x38')],function(_0x5e4a2a){var _0xe552ee={};_0xe552ee[_0x5e4a2a]={'$like':'%'+_0x3b1ebe['query'][_0xe049('0x28')]+'%'};return _0xe552ee;})});}_0x1be432=_['merge']({},_0x1be432,_0x3b1ebe['options']);return db[_0xe049('0x68')]['count']({'where':_0x1be432[_0xe049('0x3e')]})[_0xe049('0x24')](function(_0x1cd5d4){_0x4edbe5[_0xe049('0x44')]=_0x1cd5d4;if(_0x3b1ebe['query'][_0xe049('0x45')]){_0x1be432[_0xe049('0x46')]=[{'all':!![]}];}return db[_0xe049('0x68')][_0xe049('0x47')](_0x1be432);})[_0xe049('0x24')](function(_0x26c689){_0x4edbe5['rows']=_0x26c689;return _0x4edbe5;});}})[_0xe049('0x24')](respondWithFilteredResult(_0x1f9e7d,_0x1be432))[_0xe049('0x4d')](handleError(_0x1f9e7d,null));};exports[_0xe049('0x69')]=function(_0x756119,_0x52a94b,_0x17e0b6){var _0xf18fa={};var _0x5be882={};var _0x28399e;var _0x18ad13;return db['VoiceQueue'][_0xe049('0x63')]({'where':{'id':_0x756119[_0xe049('0x49')]['id']}})['then'](handleEntityNotFound(_0x52a94b,null))[_0xe049('0x24')](function(_0x1597e1){if(_0x1597e1){_0x28399e=_0x1597e1;_0x5be882['model']=_[_0xe049('0x4a')](db[_0xe049('0x6a')][_0xe049('0x34')]);_0x5be882[_0xe049('0x36')]=_[_0xe049('0x4a')](_0x756119[_0xe049('0x36')]);_0x5be882[_0xe049('0x3f')]=_[_0xe049('0x37')](_0x5be882['model'],_0x5be882[_0xe049('0x36')]);_0xf18fa['attributes']=_[_0xe049('0x37')](_0x5be882[_0xe049('0x35')],qs[_0xe049('0x39')](_0x756119[_0xe049('0x36')][_0xe049('0x39')]));_0xf18fa[_0xe049('0x38')]=_0xf18fa[_0xe049('0x38')][_0xe049('0x4b')]?_0xf18fa['attributes']:_0x5be882['model'];_0xf18fa[_0xe049('0x3c')]=qs['sort'](_0x756119['query'][_0xe049('0x3d')]);_0xf18fa['where']=qs['filters'](_['pick'](_0x756119[_0xe049('0x36')],_0x5be882[_0xe049('0x3f')]));if(_0x756119[_0xe049('0x36')][_0xe049('0x28')]){_0xf18fa[_0xe049('0x3e')]=_[_0xe049('0x43')](_0xf18fa['where'],{'$or':_[_0xe049('0x2a')](_0xf18fa[_0xe049('0x38')],function(_0x1dd2e9){var _0x36f4b8={};_0x36f4b8[_0x1dd2e9]={'$like':'%'+_0x756119[_0xe049('0x36')][_0xe049('0x28')]+'%'};return _0x36f4b8;})});}_0xf18fa=_[_0xe049('0x43')]({},_0xf18fa,_0x756119[_0xe049('0x59')]);return _0x28399e['getTeams'](_0xf18fa);}})[_0xe049('0x24')](function(_0x384907){if(_0x384907){_0x18ad13=_0x384907[_0xe049('0x4b')];if(!_0x756119[_0xe049('0x36')][_0xe049('0x3a')](_0xe049('0x3b'))){_0xf18fa[_0xe049('0x1e')]=qs[_0xe049('0x1e')](_0x756119[_0xe049('0x36')][_0xe049('0x1e')]);_0xf18fa['offset']=qs[_0xe049('0x1d')](_0x756119[_0xe049('0x36')][_0xe049('0x1d')]);}return _0x28399e[_0xe049('0x69')](_0xf18fa);}})[_0xe049('0x24')](function(_0x1665c8){if(_0x1665c8){return _0x1665c8?{'count':_0x18ad13,'rows':_0x1665c8}:null;}})['then'](respondWithResult(_0x52a94b,null))[_0xe049('0x4d')](handleError(_0x52a94b,null));};exports['addTeams']=function(_0x12149c,_0x2d9609,_0x120fe3){var _0x3e3320=_0x12149c[_0xe049('0x4f')][_0xe049('0x6b')];return db[_0xe049('0x6a')][_0xe049('0x47')]({'where':{'id':_[_0xe049('0x2a')](_0x3e3320,'id')},'attributes':['id'],'include':[{'model':db[_0xe049('0x6c')],'as':_0xe049('0x6d'),'attributes':['id','name','online',_0xe049('0x6e'),_0xe049('0x6f')],'raw':!![]}]})['then'](function(_0x5ea010){if(_0x5ea010){var _0x3da902=_[_0xe049('0x70')](_0x5ea010,function(_0x48321a){var _0x55ea44=_0x48321a['get']({'plain':!![]});_0x55ea44[_0xe049('0x6d')][_0xe049('0x71')](function(_0x236c90){_0x236c90[_0xe049('0x72')]=_[_0xe049('0x4c')](_0x3e3320,{'id':_0x55ea44['id']})['penalty'];});return _0x55ea44[_0xe049('0x6d')];});return db['VoiceQueue'][_0xe049('0x4c')]({'where':{'id':_0x12149c[_0xe049('0x49')]['id']}})[_0xe049('0x24')](function(_0x16845e){return db[_0xe049('0x73')][_0xe049('0x74')](function(_0xe5a967){return _0x16845e[_0xe049('0x75')](_['map'](_0x3e3320,'id'),{'transaction':_0xe5a967})[_0xe049('0x24')](function(){return BPromise[_0xe049('0x76')](_0x3da902,function(_0x3df4b9){return db[_0xe049('0x77')][_0xe049('0x78')]({'where':{'UserId':_0x3df4b9['id'],'VoiceQueueId':_0x12149c['params']['id']},'defaults':{'penalty':_0x3df4b9[_0xe049('0x72')]},'transaction':_0xe5a967});});})[_0xe049('0x24')](function(){return BPromise[_0xe049('0x76')](_['filter'](_0x3da902,{'online':!![]}),function(_0x209615){return db[_0xe049('0x79')]['upsert']({'membername':_0x209615[_0xe049('0x57')],'UserId':_0x209615['id'],'queue_name':_0x16845e[_0xe049('0x57')],'VoiceQueueId':_0x16845e['id'],'interface':_[_0xe049('0x7a')](_0x209615['interface'])?util[_0xe049('0x7b')](_0xe049('0x7c'),_0x209615[_0xe049('0x57')]):_0x209615[_0xe049('0x6f')],'paused':_0x209615['voicePause']||![],'penalty':_0x209615['penalty']},{'transaction':_0xe5a967});});})[_0xe049('0x24')](function(){_0x3da902[_0xe049('0x71')](function(_0x5becbb){socket[_0xe049('0x7d')]('userVoiceQueue:save',{'UserId':_0x5becbb['id'],'VoiceQueueId':_0x16845e['id']});});});});});}})[_0xe049('0x24')](respondWithStatusCode(_0x2d9609,null))['catch'](handleError(_0x2d9609,null));};exports[_0xe049('0x7e')]=function(_0x5e5211,_0x3c04af,_0x21e3b0){return db[_0xe049('0x6a')][_0xe049('0x47')]({'where':{'id':_0x5e5211[_0xe049('0x36')][_0xe049('0x7f')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0xe049('0x6d'),'attributes':['id'],'raw':!![]}]})[_0xe049('0x24')](handleEntityNotFound(_0x3c04af,null))[_0xe049('0x24')](function(_0x3b320b){var _0x207952=_[_0xe049('0x2a')](_0x3b320b,'id');var _0x10bd7b=[];var _0x179b49=[];var _0x474f9a=squel[_0xe049('0x80')]();_0x474f9a[_0xe049('0x42')](_0xe049('0x81'))['from'](_0xe049('0x82'),'tq')[_0xe049('0x83')](_0xe049('0x84'),'ut','ut.TeamId\x20=\x20tq.TeamId')['where']('VoiceQueueId\x20=\x20?',_0x5e5211[_0xe049('0x49')]['id']);for(var _0x18dc42=0x0;_0x18dc42<_0x3b320b[_0xe049('0x4b')];_0x18dc42+=0x1){let _0x1c4711=_0x3b320b[_0x18dc42];for(var _0x1f0902=0x0;_0x1f0902<_0x1c4711[_0xe049('0x6d')]['length'];_0x1f0902+=0x1){let _0xa103b5=_0x1c4711[_0xe049('0x6d')][_0x1f0902];var _0x36f799=_0x474f9a[_0xe049('0x58')]();_0x36f799[_0xe049('0x3e')](_0xe049('0x85'),_0xa103b5['id']);_0x179b49[_0xe049('0x86')](db[_0xe049('0x73')][_0xe049('0x36')](_0x36f799[_0xe049('0x87')](),{'type':db['sequelize'][_0xe049('0x88')][_0xe049('0x89')]})[_0xe049('0x24')](function(_0x2a0e08){if(_0x2a0e08[_0xe049('0x4b')]===0x1){return _0xa103b5['id'];}else{var _0x30594c=_[_0xe049('0x8a')](_[_0xe049('0x2a')](_0x2a0e08,_0xe049('0x8b')),function(_0x58f353){return _[_0xe049('0x2b')](_0x207952,_0x58f353);});if(_0x30594c){return _0xa103b5['id'];}}}));}}return BPromise[_0xe049('0x8c')](_0x179b49)[_0xe049('0x24')](function(_0x33984a){_0x10bd7b=_(_0x10bd7b)['union'](_0x33984a)['compact']()[_0xe049('0x2c')]();return db['VoiceQueue'][_0xe049('0x4c')]({'where':{'id':_0x5e5211[_0xe049('0x49')]['id']}})[_0xe049('0x24')](function(_0x9261b2){return db[_0xe049('0x73')][_0xe049('0x74')](function(_0x4b2f7d){return _0x9261b2[_0xe049('0x7e')](_0x5e5211[_0xe049('0x36')][_0xe049('0x7f')],{'transaction':_0x4b2f7d})[_0xe049('0x24')](function(){if(!_['isEmpty'](_0x10bd7b)){return _0x9261b2['removeAgents'](_0x10bd7b,{'transaction':_0x4b2f7d})['then'](function(){return db['UserVoiceQueueRt'][_0xe049('0x2f')]({'where':{'VoiceQueueId':_0x5e5211[_0xe049('0x49')]['id'],'UserId':_0x10bd7b},'transaction':_0x4b2f7d});});}})[_0xe049('0x24')](function(){_0x10bd7b['forEach'](function(_0x1a8fc5){socket['emit'](_0xe049('0x8d'),{'UserId':_0x1a8fc5,'VoiceQueueId':_0x9261b2['id']});});});});});});})[_0xe049('0x24')](respondWithStatusCode(_0x3c04af,null))[_0xe049('0x4d')](handleError(_0x3c04af,null));};exports[_0xe049('0x8e')]=function(_0x231b19,_0xdfcf25,_0x19c6b0){var _0x4e7e63,_0x38378c;return db['VoiceQueue'][_0xe049('0x4c')]({'where':{'id':_0x231b19[_0xe049('0x49')]['id']}})['then'](handleEntityNotFound(_0xdfcf25,null))['then'](function(_0x2b02ac){if(_0x2b02ac){_0x38378c=_0x2b02ac;return _0x2b02ac['addAgents'](_0x231b19['body'][_0xe049('0x7f')],_[_0xe049('0x5a')](_0x231b19['body'],[_0xe049('0x7f'),'id'])||{})[_0xe049('0x8f')](function(_0xb48253){for(var _0x25f760=0x0;_0x25f760<_0x231b19['body']['ids']['length'];_0x25f760+=0x1){socket['emit'](_0xe049('0x90'),{'UserId':_0x231b19['body']['ids'][_0x25f760],'VoiceQueueId':_0x231b19[_0xe049('0x49')]['id']});}return _0xb48253;});}})['then'](function(_0x220796){_0x4e7e63=_0x220796||[];if(_0x38378c){return db[_0xe049('0x6c')][_0xe049('0x47')]({'where':{'id':_0x231b19[_0xe049('0x4f')]['ids']},'attributes':['id',_0xe049('0x57'),_0xe049('0x91'),'voicePause',_0xe049('0x6f')],'raw':!![]});}})[_0xe049('0x24')](function(_0x5b6b8d){if(!_[_0xe049('0x92')](_0x5b6b8d)){var _0x2248ad=[];for(var _0x34ac98=0x0;_0x34ac98<_0x5b6b8d[_0xe049('0x4b')];_0x34ac98++){if(_0x5b6b8d[_0x34ac98][_0xe049('0x91')]){_0x2248ad[_0xe049('0x86')](db[_0xe049('0x79')]['upsert']({'membername':_0x5b6b8d[_0x34ac98][_0xe049('0x57')],'UserId':_0x5b6b8d[_0x34ac98]['id'],'queue_name':_0x38378c[_0xe049('0x57')],'VoiceQueueId':_0x38378c['id'],'interface':_[_0xe049('0x7a')](_0x5b6b8d[_0x34ac98]['interface'])?util[_0xe049('0x7b')](_0xe049('0x7c'),_0x5b6b8d[_0x34ac98][_0xe049('0x57')]):_0x5b6b8d[_0x34ac98][_0xe049('0x6f')],'paused':_0x5b6b8d[_0x34ac98][_0xe049('0x6e')]||![],'penalty':_0x231b19[_0xe049('0x4f')]['penalty']||0x0}));}}return BPromise[_0xe049('0x8c')](_0x2248ad);}})[_0xe049('0x24')](function(){return _0x4e7e63;})[_0xe049('0x24')](respondWithResult(_0xdfcf25,null))[_0xe049('0x4d')](handleError(_0xdfcf25,null));};exports[_0xe049('0x93')]=function(_0x13079f,_0x4557a7,_0x287cf2){return db[_0xe049('0x33')]['find']({'where':{'id':_0x13079f[_0xe049('0x49')]['id']}})[_0xe049('0x24')](handleEntityNotFound(_0x4557a7,null))[_0xe049('0x24')](function(_0x542881){if(_0x542881){return _0x542881[_0xe049('0x93')](_0x13079f[_0xe049('0x36')][_0xe049('0x7f')])['then'](function(){if(_[_0xe049('0x94')](_0x13079f[_0xe049('0x36')]['ids'])){for(var _0x3bc254=0x0;_0x3bc254<_0x13079f['query'][_0xe049('0x7f')][_0xe049('0x4b')];_0x3bc254+=0x1){socket['emit'](_0xe049('0x8d'),{'UserId':Number(_0x13079f[_0xe049('0x36')][_0xe049('0x7f')][_0x3bc254]),'VoiceQueueId':Number(_0x13079f['params']['id'])});}}else{socket[_0xe049('0x7d')](_0xe049('0x8d'),{'UserId':Number(_0x13079f[_0xe049('0x36')][_0xe049('0x7f')]),'VoiceQueueId':Number(_0x13079f[_0xe049('0x49')]['id'])});}});}})[_0xe049('0x24')](function(_0x3154f4){return db['UserVoiceQueueRt'][_0xe049('0x2f')]({'where':{'VoiceQueueId':_0x13079f['params']['id'],'UserId':_0x13079f[_0xe049('0x36')][_0xe049('0x7f')]}})[_0xe049('0x24')](function(){return _0x3154f4;});})[_0xe049('0x24')](respondWithStatusCode(_0x4557a7,null))[_0xe049('0x4d')](handleError(_0x4557a7,null));};exports[_0xe049('0x95')]=function(_0x8621e4,_0x5a5ad8,_0xa49a8e){var _0x226cab={};var _0x4ef786={};var _0x5aa42b;var _0x360332;return db[_0xe049('0x33')]['findOne']({'where':{'id':_0x8621e4[_0xe049('0x49')]['id']}})['then'](handleEntityNotFound(_0x5a5ad8,null))[_0xe049('0x24')](function(_0x571d79){if(_0x571d79){_0x5aa42b=_0x571d79;_0x4ef786['model']=_['keys'](db['User'][_0xe049('0x34')]);_0x4ef786[_0xe049('0x36')]=_['keys'](_0x8621e4[_0xe049('0x36')]);_0x4ef786[_0xe049('0x3f')]=_[_0xe049('0x37')](_0x4ef786[_0xe049('0x35')],_0x4ef786['query']);_0x226cab[_0xe049('0x38')]=_[_0xe049('0x37')](_0x4ef786[_0xe049('0x35')],qs[_0xe049('0x39')](_0x8621e4[_0xe049('0x36')][_0xe049('0x39')]));_0x226cab[_0xe049('0x38')]=_0x226cab[_0xe049('0x38')][_0xe049('0x4b')]?_0x226cab[_0xe049('0x38')]:_0x4ef786['model'];_0x226cab[_0xe049('0x3c')]=qs[_0xe049('0x3d')](_0x8621e4[_0xe049('0x36')][_0xe049('0x3d')]);_0x226cab['where']=qs[_0xe049('0x3f')](_[_0xe049('0x60')](_0x8621e4['query'],_0x4ef786[_0xe049('0x3f')]));if(_0x8621e4[_0xe049('0x36')][_0xe049('0x28')]){_0x226cab[_0xe049('0x3e')]=_[_0xe049('0x43')](_0x226cab[_0xe049('0x3e')],{'$or':_['map'](_0x226cab[_0xe049('0x38')],function(_0x44c79e){var _0x2f439f={};_0x2f439f[_0x44c79e]={'$like':'%'+_0x8621e4[_0xe049('0x36')][_0xe049('0x28')]+'%'};return _0x2f439f;})});}_0x226cab=_[_0xe049('0x43')]({},_0x226cab,_0x8621e4[_0xe049('0x59')]);return _0x5aa42b[_0xe049('0x95')](_0x226cab);}})[_0xe049('0x24')](function(_0x5565c6){if(_0x5565c6){_0x360332=_0x5565c6[_0xe049('0x4b')];if(!_0x8621e4[_0xe049('0x36')]['hasOwnProperty'](_0xe049('0x3b'))){_0x226cab['limit']=qs[_0xe049('0x1e')](_0x8621e4['query'][_0xe049('0x1e')]);_0x226cab['offset']=qs[_0xe049('0x1d')](_0x8621e4['query'][_0xe049('0x1d')]);}return _0x5aa42b[_0xe049('0x95')](_0x226cab);}})['then'](function(_0x230c14){if(_0x230c14){return _0x230c14?{'count':_0x360332,'rows':_0x230c14}:null;}})[_0xe049('0x24')](respondWithResult(_0x5a5ad8,null))[_0xe049('0x4d')](handleError(_0x5a5ad8,null));};exports['getMembers']=function(_0x1a7e36,_0x516128,_0x557a12){var _0x3d0c8c={};var _0x2ec18f={};var _0x265151;var _0x47ad50;return db[_0xe049('0x33')][_0xe049('0x63')]({'where':{'id':_0x1a7e36[_0xe049('0x49')]['id']}})['then'](handleEntityNotFound(_0x516128,null))['then'](function(_0x31e3d1){if(_0x31e3d1){_0x265151=_0x31e3d1;_0x2ec18f[_0xe049('0x35')]=_[_0xe049('0x4a')](db[_0xe049('0x79')][_0xe049('0x34')]);_0x2ec18f[_0xe049('0x36')]=_[_0xe049('0x4a')](_0x1a7e36['query']);_0x2ec18f['filters']=_[_0xe049('0x37')](_0x2ec18f['model'],_0x2ec18f['query']);_0x3d0c8c[_0xe049('0x38')]=_[_0xe049('0x37')](_0x2ec18f[_0xe049('0x35')],qs[_0xe049('0x39')](_0x1a7e36[_0xe049('0x36')][_0xe049('0x39')]));_0x3d0c8c[_0xe049('0x38')]=_0x3d0c8c[_0xe049('0x38')][_0xe049('0x4b')]?_0x3d0c8c[_0xe049('0x38')]:_0x2ec18f[_0xe049('0x35')];_0x3d0c8c[_0xe049('0x3c')]=qs[_0xe049('0x3d')](_0x1a7e36[_0xe049('0x36')][_0xe049('0x3d')]);_0x3d0c8c[_0xe049('0x3e')]=qs['filters'](_[_0xe049('0x60')](_0x1a7e36[_0xe049('0x36')],_0x2ec18f[_0xe049('0x3f')]));if(_0x1a7e36[_0xe049('0x36')]['filter']){_0x3d0c8c[_0xe049('0x3e')]=_[_0xe049('0x43')](_0x3d0c8c['where'],{'$or':_['map'](_0x3d0c8c['attributes'],function(_0x21102c){var _0x59b15d={};_0x59b15d[_0x21102c]={'$like':'%'+_0x1a7e36['query'][_0xe049('0x28')]+'%'};return _0x59b15d;})});}_0x3d0c8c=_[_0xe049('0x43')]({},_0x3d0c8c,_0x1a7e36[_0xe049('0x59')]);return _0x265151[_0xe049('0x96')](_0x3d0c8c);}})['then'](function(_0x2c0061){if(_0x2c0061){_0x47ad50=_0x2c0061[_0xe049('0x4b')];if(!_0x1a7e36[_0xe049('0x36')][_0xe049('0x3a')]('nolimit')){_0x3d0c8c[_0xe049('0x1e')]=qs['limit'](_0x1a7e36['query'][_0xe049('0x1e')]);_0x3d0c8c[_0xe049('0x1d')]=qs[_0xe049('0x1d')](_0x1a7e36[_0xe049('0x36')][_0xe049('0x1d')]);}return _0x265151['getMembers'](_0x3d0c8c);}})[_0xe049('0x24')](function(_0x36ebf4){return _0x36ebf4?{'count':_0x47ad50,'rows':_0x36ebf4}:null;})[_0xe049('0x24')](respondWithResult(_0x516128,null))[_0xe049('0x4d')](handleError(_0x516128,null));};exports['getLists']=function(_0x34b970,_0x55b222,_0x23715e){var _0x340db7={};var _0x21bfcc={};var _0xa85cba;var _0x4fd43d;return db[_0xe049('0x33')][_0xe049('0x63')]({'where':{'id':_0x34b970[_0xe049('0x49')]['id']}})['then'](handleEntityNotFound(_0x55b222,null))[_0xe049('0x24')](function(_0x4b894c){if(_0x4b894c){_0xa85cba=_0x4b894c;_0x21bfcc['model']=_[_0xe049('0x4a')](db[_0xe049('0x97')][_0xe049('0x34')]);_0x21bfcc[_0xe049('0x36')]=_['keys'](_0x34b970[_0xe049('0x36')]);_0x21bfcc[_0xe049('0x3f')]=_[_0xe049('0x37')](_0x21bfcc[_0xe049('0x35')],_0x21bfcc[_0xe049('0x36')]);_0x340db7['attributes']=_[_0xe049('0x37')](_0x21bfcc[_0xe049('0x35')],qs[_0xe049('0x39')](_0x34b970[_0xe049('0x36')][_0xe049('0x39')]));_0x340db7[_0xe049('0x38')]=_0x340db7[_0xe049('0x38')][_0xe049('0x4b')]?_0x340db7[_0xe049('0x38')]:_0x21bfcc[_0xe049('0x35')];_0x340db7['order']=qs[_0xe049('0x3d')](_0x34b970[_0xe049('0x36')][_0xe049('0x3d')]);_0x340db7[_0xe049('0x3e')]=qs['filters'](_[_0xe049('0x60')](_0x34b970[_0xe049('0x36')],_0x21bfcc[_0xe049('0x3f')]));if(_0x34b970['query'][_0xe049('0x28')]){_0x340db7[_0xe049('0x3e')]=_[_0xe049('0x43')](_0x340db7[_0xe049('0x3e')],{'$or':_[_0xe049('0x2a')](_0x340db7[_0xe049('0x38')],function(_0x5a1cc){var _0x2eef01={};_0x2eef01[_0x5a1cc]={'$like':'%'+_0x34b970[_0xe049('0x36')][_0xe049('0x28')]+'%'};return _0x2eef01;})});}_0x340db7=_[_0xe049('0x43')]({},_0x340db7,_0x34b970['options']);return _0xa85cba[_0xe049('0x98')](_0x340db7);}})[_0xe049('0x24')](function(_0x36ac2c){if(_0x36ac2c){_0x4fd43d=_0x36ac2c[_0xe049('0x4b')];if(!_0x34b970[_0xe049('0x36')][_0xe049('0x3a')](_0xe049('0x3b'))){_0x340db7['limit']=qs['limit'](_0x34b970[_0xe049('0x36')][_0xe049('0x1e')]);_0x340db7['offset']=qs[_0xe049('0x1d')](_0x34b970['query'][_0xe049('0x1d')]);}return _0xa85cba[_0xe049('0x98')](_0x340db7);}})[_0xe049('0x24')](function(_0x3c03f6){if(_0x3c03f6){return _0x3c03f6?{'count':_0x4fd43d,'rows':_0x3c03f6}:null;}})[_0xe049('0x24')](respondWithResult(_0x55b222,null))[_0xe049('0x4d')](handleError(_0x55b222,null));};exports[_0xe049('0x99')]=function(_0x417565,_0x1770f0,_0x117c03){var _0x3bf297,_0x53bfd8;return db[_0xe049('0x33')][_0xe049('0x4c')]({'where':{'id':_0x417565[_0xe049('0x49')]['id']}})[_0xe049('0x24')](handleEntityNotFound(_0x1770f0,null))[_0xe049('0x24')](function(_0x375306){if(_0x375306){_0x53bfd8=_0x375306;return _0x375306[_0xe049('0x99')](_0x417565['body']['ids'],_[_0xe049('0x5a')](_0x417565[_0xe049('0x4f')],[_0xe049('0x7f'),'id'])||{});}return null;})['spread'](function(_0xaf8094){var _0x39d482;_0x3bf297=_0xaf8094||[];var _0x4cb131=[];if(_0xaf8094){for(var _0x582170=0x0;_0x582170<_0xaf8094[_0xe049('0x4b')];_0x582170+=0x1){var _0x112b20=_0xaf8094[_0x582170][_0xe049('0x51')]({'plain':!![]});_0x53bfd8['dialCheckDuplicateType']=_0x417565[_0xe049('0x4f')]['dialCheckDuplicateType']?_0x417565[_0xe049('0x4f')][_0xe049('0x9a')]:_0x53bfd8[_0xe049('0x9a')];switch(_0x53bfd8[_0xe049('0x9a')]){case _0xe049('0x9b'):_0x39d482=squel[_0xe049('0x9c')]()[_0xe049('0x9d')](_0xe049('0x9e'))[_0xe049('0x9f')]([_0xe049('0xa0'),_0xe049('0xa1'),_0xe049('0xa2'),'ListId',_0xe049('0x61'),_0xe049('0x5b'),_0xe049('0x5c')],squel[_0xe049('0x80')]()[_0xe049('0x42')](_0xe049('0xa0'),_0xe049('0xa0'))[_0xe049('0x42')](_0xe049('0xa3'),_0xe049('0xa1'))['field']('id',_0xe049('0xa2'))[_0xe049('0x42')](_0x112b20['CmListId'][_0xe049('0x87')](),_0xe049('0xa4'))[_0xe049('0x42')](_0x417565['params']['id'][_0xe049('0x87')](),_0xe049('0x61'))[_0xe049('0x42')](_0xe049('0xa3'),_0xe049('0x5b'))['field'](_0xe049('0xa3'),'updatedAt')[_0xe049('0xa5')]('cm_contacts')[_0xe049('0x3e')](_0xe049('0xa6'))[_0xe049('0x3e')](_0xe049('0xa7'),_0x112b20[_0xe049('0xa8')]['toString']())['where'](_0xe049('0xa9'))['where'](_0xe049('0xaa'),squel[_0xe049('0x80')]()[_0xe049('0x42')](_0xe049('0xab'))[_0xe049('0xa5')](_0xe049('0xac'))[_0xe049('0x3e')]('VoiceQueueId\x20=\x20?',_0x417565[_0xe049('0x49')]['id'][_0xe049('0x87')]()))[_0xe049('0x3e')](_0xe049('0xaa'),squel[_0xe049('0x80')]()[_0xe049('0x42')]('COALESCE(phone,\x27\x27)')['from'](_0xe049('0x9e'))[_0xe049('0x3e')](_0xe049('0xad'),_0x417565[_0xe049('0x49')]['id'][_0xe049('0x87')]())))[_0xe049('0x87')]();break;case'onlyIfOpen':_0x39d482=squel[_0xe049('0x9c')]()[_0xe049('0x9d')](_0xe049('0x9e'))[_0xe049('0x9f')]([_0xe049('0xa0'),'scheduledAt',_0xe049('0xa2'),_0xe049('0xa4'),_0xe049('0x61'),_0xe049('0x5b'),'updatedAt'],squel[_0xe049('0x80')]()[_0xe049('0x42')]('phone','phone')['field']('NOW()',_0xe049('0xa1'))[_0xe049('0x42')]('id',_0xe049('0xa2'))['field'](_0x112b20[_0xe049('0xa8')][_0xe049('0x87')](),_0xe049('0xa4'))['field'](_0x417565[_0xe049('0x49')]['id'][_0xe049('0x87')](),_0xe049('0x61'))[_0xe049('0x42')](_0xe049('0xa3'),_0xe049('0x5b'))[_0xe049('0x42')]('NOW()','updatedAt')[_0xe049('0xa5')](_0xe049('0xae'))[_0xe049('0x3e')]('deletedAt\x20IS\x20NULL')[_0xe049('0x3e')](_0xe049('0xa7'),_0x112b20[_0xe049('0xa8')][_0xe049('0x87')]())[_0xe049('0x3e')](_0xe049('0xa9'))['where']('phone\x20NOT\x20IN\x20(?)',squel[_0xe049('0x80')]()[_0xe049('0x42')]('COALESCE(phone,\x27\x27)')[_0xe049('0xa5')]('cm_hopper')['where']('VoiceQueueId\x20=\x20?',_0x417565[_0xe049('0x49')]['id'][_0xe049('0x87')]())))[_0xe049('0x87')]();break;default:_0x39d482=squel[_0xe049('0x9c')]()[_0xe049('0x9d')](_0xe049('0x9e'))[_0xe049('0x9f')]([_0xe049('0xa0'),_0xe049('0xa1'),_0xe049('0xa2'),_0xe049('0xa4'),_0xe049('0x61'),'createdAt',_0xe049('0x5c')],squel[_0xe049('0x80')]()['field'](_0xe049('0xa0'),_0xe049('0xa0'))[_0xe049('0x42')](_0xe049('0xa3'),_0xe049('0xa1'))['field']('id',_0xe049('0xa2'))['field'](_0x112b20[_0xe049('0xa8')][_0xe049('0x87')](),_0xe049('0xa4'))[_0xe049('0x42')](_0x417565[_0xe049('0x49')]['id'][_0xe049('0x87')](),'VoiceQueueId')[_0xe049('0x42')]('NOW()','createdAt')[_0xe049('0x42')]('NOW()',_0xe049('0x5c'))[_0xe049('0xa5')](_0xe049('0xae'))[_0xe049('0x3e')](_0xe049('0xa6'))[_0xe049('0x3e')](_0xe049('0xa7'),_0x112b20[_0xe049('0xa8')][_0xe049('0x87')]())[_0xe049('0x3e')](_0xe049('0xa9')))[_0xe049('0x87')]();}_0x4cb131[_0xe049('0x86')](db[_0xe049('0x73')][_0xe049('0x36')](_0x39d482));}return BPromise[_0xe049('0x8c')](_0x4cb131);}})[_0xe049('0x24')](function(){return _0x3bf297;})['then'](respondWithResult(_0x1770f0,null))[_0xe049('0x4d')](handleError(_0x1770f0,null));};exports[_0xe049('0xaf')]=function(_0x5aecd6,_0x473ca7,_0x2556c6){return db[_0xe049('0x33')][_0xe049('0x4c')]({'where':{'id':_0x5aecd6[_0xe049('0x49')]['id']}})[_0xe049('0x24')](handleEntityNotFound(_0x473ca7,null))['then'](function(_0x5e04fc){if(_0x5e04fc){return _0x5e04fc['removeLists'](_0x5aecd6[_0xe049('0x36')][_0xe049('0x7f')]);}})[_0xe049('0x24')](function(_0x2dfe65){if(_0x2dfe65){return db[_0xe049('0x62')][_0xe049('0x2f')]({'where':{'ListId':_0x5aecd6[_0xe049('0x36')][_0xe049('0x7f')],'VoiceQueueId':_0x5aecd6[_0xe049('0x49')]['id']}})['then'](function(){return _0x2dfe65;});}})['then'](respondWithStatusCode(_0x473ca7,null))[_0xe049('0x4d')](handleError(_0x473ca7,null));};exports['getBlackLists']=function(_0x5783c6,_0x44fa06,_0x1095f3){var _0x270858={};var _0x31aa9c={};var _0x2d7e51;var _0x44d99d;return db[_0xe049('0x33')][_0xe049('0x63')]({'where':{'id':_0x5783c6[_0xe049('0x49')]['id']}})[_0xe049('0x24')](handleEntityNotFound(_0x44fa06,null))[_0xe049('0x24')](function(_0x7cca4d){if(_0x7cca4d){_0x2d7e51=_0x7cca4d;_0x31aa9c[_0xe049('0x35')]=_[_0xe049('0x4a')](db[_0xe049('0x97')]['rawAttributes']);_0x31aa9c[_0xe049('0x36')]=_[_0xe049('0x4a')](_0x5783c6[_0xe049('0x36')]);_0x31aa9c[_0xe049('0x3f')]=_[_0xe049('0x37')](_0x31aa9c['model'],_0x31aa9c[_0xe049('0x36')]);_0x270858['attributes']=_[_0xe049('0x37')](_0x31aa9c[_0xe049('0x35')],qs[_0xe049('0x39')](_0x5783c6[_0xe049('0x36')][_0xe049('0x39')]));_0x270858[_0xe049('0x38')]=_0x270858[_0xe049('0x38')]['length']?_0x270858[_0xe049('0x38')]:_0x31aa9c[_0xe049('0x35')];_0x270858[_0xe049('0x3c')]=qs[_0xe049('0x3d')](_0x5783c6[_0xe049('0x36')][_0xe049('0x3d')]);_0x270858['where']=qs[_0xe049('0x3f')](_[_0xe049('0x60')](_0x5783c6[_0xe049('0x36')],_0x31aa9c['filters']));if(_0x5783c6[_0xe049('0x36')][_0xe049('0x28')]){_0x270858[_0xe049('0x3e')]=_[_0xe049('0x43')](_0x270858[_0xe049('0x3e')],{'$or':_['map'](_0x270858[_0xe049('0x38')],function(_0x5d967f){var _0x505cc3={};_0x505cc3[_0x5d967f]={'$like':'%'+_0x5783c6[_0xe049('0x36')]['filter']+'%'};return _0x505cc3;})});}_0x270858=_[_0xe049('0x43')]({},_0x270858,_0x5783c6[_0xe049('0x59')]);return _0x2d7e51[_0xe049('0xb0')](_0x270858);}})[_0xe049('0x24')](function(_0xd6fc75){if(_0xd6fc75){_0x44d99d=_0xd6fc75[_0xe049('0x4b')];if(!_0x5783c6[_0xe049('0x36')][_0xe049('0x3a')](_0xe049('0x3b'))){_0x270858[_0xe049('0x1e')]=qs[_0xe049('0x1e')](_0x5783c6[_0xe049('0x36')][_0xe049('0x1e')]);_0x270858[_0xe049('0x1d')]=qs[_0xe049('0x1d')](_0x5783c6['query'][_0xe049('0x1d')]);}return _0x2d7e51[_0xe049('0xb0')](_0x270858);}})[_0xe049('0x24')](function(_0x24be28){if(_0x24be28){return _0x24be28?{'count':_0x44d99d,'rows':_0x24be28}:null;}})[_0xe049('0x24')](respondWithResult(_0x44fa06,null))[_0xe049('0x4d')](handleError(_0x44fa06,null));};exports[_0xe049('0xb1')]=function(_0x42219b,_0x264897,_0x3a3764){var _0x153463,_0x2fc622;return db[_0xe049('0x33')][_0xe049('0x4c')]({'where':{'id':_0x42219b[_0xe049('0x49')]['id']}})[_0xe049('0x24')](handleEntityNotFound(_0x264897,null))[_0xe049('0x24')](function(_0x4d55d9){if(_0x4d55d9){_0x2fc622=_0x4d55d9;return _0x4d55d9['addBlackLists'](_0x42219b['body'][_0xe049('0x7f')],_[_0xe049('0x5a')](_0x42219b[_0xe049('0x4f')],[_0xe049('0x7f'),'id'])||{});}return null;})[_0xe049('0x8f')](function(_0x3d3182){var _0xa90443;_0x153463=_0x3d3182||[];var _0x4b6be4=[];if(_0x3d3182){for(var _0x3b299b=0x0;_0x3b299b<_0x3d3182['length'];_0x3b299b+=0x1){var _0x7ed3c3=_0x3d3182[_0x3b299b][_0xe049('0x51')]({'plain':!![]});_0xa90443=squel['insert']()['into'](_0xe049('0xb2'))[_0xe049('0x9f')]([_0xe049('0xa0'),_0xe049('0xa2'),'ListId',_0xe049('0x61'),_0xe049('0x5b'),'updatedAt'],squel['select']()['field']('phone','phone')[_0xe049('0x42')]('id','ContactId')[_0xe049('0x42')](_0x7ed3c3[_0xe049('0xa8')][_0xe049('0x87')](),'ListId')['field'](_0x42219b[_0xe049('0x49')]['id'][_0xe049('0x87')](),_0xe049('0x61'))['field'](_0xe049('0xa3'),_0xe049('0x5b'))[_0xe049('0x42')](_0xe049('0xa3'),_0xe049('0x5c'))[_0xe049('0xa5')](_0xe049('0xae'))[_0xe049('0x3e')](_0xe049('0xa6'))[_0xe049('0x3e')](_0xe049('0xa7'),_0x7ed3c3[_0xe049('0xa8')][_0xe049('0x87')]())[_0xe049('0x3e')](_0xe049('0xa9')))['toString']();_0x4b6be4[_0xe049('0x86')](db[_0xe049('0x73')][_0xe049('0x36')](_0xa90443));}return BPromise[_0xe049('0x8c')](_0x4b6be4);}})[_0xe049('0x24')](function(){return _0x153463;})[_0xe049('0x24')](respondWithResult(_0x264897,null))[_0xe049('0x4d')](handleError(_0x264897,null));};exports[_0xe049('0xb3')]=function(_0x5d116e,_0x584adc,_0x4f9902){return db[_0xe049('0x33')][_0xe049('0x4c')]({'where':{'id':_0x5d116e['params']['id']}})[_0xe049('0x24')](handleEntityNotFound(_0x584adc,null))[_0xe049('0x24')](function(_0x56ef8c){if(_0x56ef8c){return _0x56ef8c[_0xe049('0xb3')](_0x5d116e[_0xe049('0x36')][_0xe049('0x7f')]);}})['then'](function(_0x3bcf1f){if(_0x3bcf1f){return db['CmHopperBlack'][_0xe049('0x2f')]({'where':{'ListId':_0x5d116e[_0xe049('0x36')][_0xe049('0x7f')],'VoiceQueueId':_0x5d116e[_0xe049('0x49')]['id']}})['then'](function(){return _0x3bcf1f;});}})['then'](respondWithStatusCode(_0x584adc,null))[_0xe049('0x4d')](handleError(_0x584adc,null));};
\ No newline at end of file
+var _0x803f=['create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','options','find','omit','updatedAt','createdAt','user','getHoppers','CmHopper','pick','VoiceQueueId','filter','getHopperHistories','findOne','CmHopperHistory','getHopperFinals','CmHopperBlack','getTeams','teams','Team','Agents','online','flatMap','forEach','addTeams','each','UserVoiceQueue','findOrCreate','penalty','UserVoiceQueueRt','isNil','interface','format','voicePause','removeTeams','ids','User','select','tq.TeamId','from','team_has_voice_queues','user_has_teams','ut.TeamId\x20=\x20tq.TeamId','VoiceQueueId\x20=\x20?','ut.UserId\x20=\x20?','push','sequelize','toString','QueryTypes','SELECT','every','TeamId','compact','transaction','isEmpty','removeAgents','emit','userVoiceQueue:remove','addAgents','userVoiceQueue:save','SIP/%s','all','isArray','getAgents','getMembers','getLists','CmList','addLists','spread','dialCheckDuplicateType','always','insert','into','fromQuery','phone','scheduledAt','ContactId','ListId','NOW()','cm_contacts','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','CmListId','phone\x20IS\x20NOT\x20NULL','cm_hopper_final','phone\x20NOT\x20IN\x20(?)','COALESCE(phone,\x27\x27)','cm_hopper','removeLists','getBlackLists','addBlackLists','removeBlackLists','html-pdf','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','squel','crypto','desk.js','querystring','ioredis','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','redis','localhost','socket.io-emitter','./voiceQueue.socket','sendStatus','end','status','json','count','offset','limit','set','apply','save','update','then','destroy','get','VoiceQueues','inbound','QueueCampaigns','outbound','ignore','map','value','includes','type','UserProfileResource','error','name','index','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','key','VIRTUAL','field','merge','VoiceQueue','includeAll','include','findAll','rows','catch','show','params'];(function(_0x590ad7,_0x2a1791){var _0x5e21dc=function(_0x38e134){while(--_0x38e134){_0x590ad7['push'](_0x590ad7['shift']());}};_0x5e21dc(++_0x2a1791);}(_0x803f,0x64));var _0xf803=function(_0x206e92,_0x55b651){_0x206e92=_0x206e92-0x0;var _0x2d72e9=_0x803f[_0x206e92];return _0x2d72e9;};'use strict';var pdf=require(_0xf803('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xf803('0x1'));var zipdir=require(_0xf803('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xf803('0x3'));var moment=require(_0xf803('0x4'));var BPromise=require(_0xf803('0x5'));var Mustache=require(_0xf803('0x6'));var util=require(_0xf803('0x7'));var path=require('path');var sox=require(_0xf803('0x8'));var csv=require(_0xf803('0x9'));var ejs=require(_0xf803('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0xf803('0xb'));var crypto=require(_0xf803('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xf803('0xd'));var toCsv=require(_0xf803('0x9'));var querystring=require(_0xf803('0xe'));var Papa=require('papaparse');var Redis=require(_0xf803('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xf803('0x10'));var hardwareService=require(_0xf803('0x11'));var logger=require('../../config/logger')(_0xf803('0x12'));var utils=require(_0xf803('0x13'));var config=require(_0xf803('0x14'));var db=require(_0xf803('0x15'))['db'];config[_0xf803('0x16')]=_['defaults'](config['redis'],{'host':_0xf803('0x17'),'port':0x18eb});var socket=require(_0xf803('0x18'))(new Redis(config['redis']));require(_0xf803('0x19'))['register'](socket);function respondWithStatusCode(_0x272b96,_0x29af60){_0x29af60=_0x29af60||0xcc;return function(_0x111a73){if(_0x111a73){return _0x272b96[_0xf803('0x1a')](_0x29af60);}return _0x272b96['status'](_0x29af60)[_0xf803('0x1b')]();};}function respondWithResult(_0x135230,_0x3d07ca){_0x3d07ca=_0x3d07ca||0xc8;return function(_0x11373e){if(_0x11373e){return _0x135230[_0xf803('0x1c')](_0x3d07ca)[_0xf803('0x1d')](_0x11373e);}};}function respondWithFilteredResult(_0xbd7728,_0x4afba4){return function(_0x50a67c){if(_0x50a67c){var _0x3caf5a=_0x50a67c[_0xf803('0x1e')],_0x292179=_0x4afba4[_0xf803('0x1f')],_0x5c775b=_0x4afba4[_0xf803('0x1f')]+_0x4afba4[_0xf803('0x20')],_0x36d347;if(_0x5c775b>=_0x3caf5a){_0x5c775b=_0x3caf5a;_0x36d347=0xc8;}else{_0x36d347=0xce;}_0xbd7728[_0xf803('0x1c')](_0x36d347);return _0xbd7728[_0xf803('0x21')]('Content-Range',_0x292179+'-'+_0x5c775b+'/'+_0x3caf5a)[_0xf803('0x1d')](_0x50a67c);}return null;};}function patchUpdates(_0x252421){return function(_0x462157){try{jsonpatch[_0xf803('0x22')](_0x462157,_0x252421,!![]);}catch(_0x38aa68){return BPromise['reject'](_0x38aa68);}return _0x462157[_0xf803('0x23')]();};}function saveUpdates(_0x1a7879,_0x4a5299){return function(_0x27882f){if(_0x27882f){return _0x27882f[_0xf803('0x24')](_0x1a7879)[_0xf803('0x25')](function(_0x23c46b){return _0x23c46b;});}return null;};}function removeEntity(_0x20ed90,_0x4717ac){return function(_0x3d8cc9){if(_0x3d8cc9){return _0x3d8cc9[_0xf803('0x26')]()[_0xf803('0x25')](function(){var _0x1e5a2a=_0x3d8cc9[_0xf803('0x27')]({'plain':!![]});var _0x57eaab=[{'name':_0xf803('0x28'),'value':_0xf803('0x29'),'ignore':![]},{'name':_0xf803('0x2a'),'value':_0xf803('0x2b'),'ignore':![]}];var _0x5f1477=_(_0x57eaab)['filter'](_0xf803('0x2c'))[_0xf803('0x2d')](_0xf803('0x2e'))['value']();if(_[_0xf803('0x2f')](_0x5f1477,_0x1e5a2a[_0xf803('0x30')])){return;}var _0x4994e9=_['find'](_0x57eaab,[_0xf803('0x2e'),_0x1e5a2a[_0xf803('0x30')]])['name'];return db[_0xf803('0x31')][_0xf803('0x26')]({'where':{'type':_0x4994e9,'resourceId':_0x1e5a2a['id']}})[_0xf803('0x25')](function(){return _0x3d8cc9;});})['then'](function(){_0x20ed90[_0xf803('0x1c')](0xcc)[_0xf803('0x1b')]();});}};}function handleEntityNotFound(_0x3d8e9c,_0x3bb523){return function(_0x42a35c){if(!_0x42a35c){_0x3d8e9c[_0xf803('0x1a')](0x194);}return _0x42a35c;};}function handleError(_0x34b5fa,_0x2ebd22){_0x2ebd22=_0x2ebd22||0x1f4;return function(_0x3cadd8){logger[_0xf803('0x32')](_0x3cadd8['stack']);if(_0x3cadd8[_0xf803('0x33')]){delete _0x3cadd8['name'];}_0x34b5fa[_0xf803('0x1c')](_0x2ebd22)['send'](_0x3cadd8);};}exports[_0xf803('0x34')]=function(_0x112430,_0x466e41){var _0x31a071={},_0x404597={},_0x2cd564={'count':0x0,'rows':[]};var _0x1436d7=db['VoiceQueue'][_0xf803('0x35')];_0x404597[_0xf803('0x36')]=_[_0xf803('0x37')](_0x1436d7);_0x404597[_0xf803('0x38')]=_[_0xf803('0x37')](_0x112430[_0xf803('0x38')]);_0x404597[_0xf803('0x39')]=_[_0xf803('0x3a')](_0x404597[_0xf803('0x36')],_0x404597[_0xf803('0x38')]);_0x31a071['attributes']=_['intersection'](_0x404597[_0xf803('0x36')],qs['fields'](_0x112430['query'][_0xf803('0x3b')]));_0x31a071['attributes']=_0x31a071[_0xf803('0x3c')][_0xf803('0x3d')]?_0x31a071[_0xf803('0x3c')]:_0x404597[_0xf803('0x36')];if(!_0x112430[_0xf803('0x38')][_0xf803('0x3e')](_0xf803('0x3f'))){_0x31a071[_0xf803('0x20')]=qs[_0xf803('0x20')](_0x112430[_0xf803('0x38')]['limit']);_0x31a071[_0xf803('0x1f')]=qs[_0xf803('0x1f')](_0x112430[_0xf803('0x38')][_0xf803('0x1f')]);}_0x31a071[_0xf803('0x40')]=qs['sort'](_0x112430[_0xf803('0x38')][_0xf803('0x41')]);_0x31a071[_0xf803('0x42')]=qs['filters'](_['pick'](_0x112430['query'],_0x404597[_0xf803('0x39')]));if(_0x112430[_0xf803('0x38')]['filter']){_0x31a071[_0xf803('0x42')]=_['merge'](_0x31a071[_0xf803('0x42')],{'$or':_[_0xf803('0x2d')](_0x1436d7,function(_0x38787e){if(_0x38787e[_0xf803('0x30')][_0xf803('0x43')]!==_0xf803('0x44')){var _0xb8217b={};_0xb8217b[_0x38787e[_0xf803('0x45')]]={'$like':'%'+_0x112430[_0xf803('0x38')]['filter']+'%'};return _0xb8217b;}})});}_0x31a071=_[_0xf803('0x46')]({},_0x31a071,_0x112430['options']);var _0x13c310={'where':_0x31a071[_0xf803('0x42')]};return db[_0xf803('0x47')]['count'](_0x13c310)[_0xf803('0x25')](function(_0x57801b){_0x2cd564[_0xf803('0x1e')]=_0x57801b;if(_0x112430['query'][_0xf803('0x48')]){_0x31a071[_0xf803('0x49')]=[{'all':!![]}];}return db['VoiceQueue'][_0xf803('0x4a')](_0x31a071);})[_0xf803('0x25')](function(_0xfedc01){_0x2cd564[_0xf803('0x4b')]=_0xfedc01;return _0x2cd564;})[_0xf803('0x25')](respondWithFilteredResult(_0x466e41,_0x31a071))[_0xf803('0x4c')](handleError(_0x466e41,null));};exports[_0xf803('0x4d')]=function(_0x3e24c6,_0x2e312e){var _0x3cb563={'raw':![],'where':{'id':_0x3e24c6[_0xf803('0x4e')]['id']}},_0x3a100a={};_0x3a100a[_0xf803('0x36')]=_['keys'](db[_0xf803('0x47')]['rawAttributes']);_0x3a100a[_0xf803('0x38')]=_[_0xf803('0x37')](_0x3e24c6['query']);_0x3a100a[_0xf803('0x39')]=_['intersection'](_0x3a100a[_0xf803('0x36')],_0x3a100a[_0xf803('0x38')]);_0x3cb563['attributes']=_[_0xf803('0x3a')](_0x3a100a[_0xf803('0x36')],qs[_0xf803('0x3b')](_0x3e24c6[_0xf803('0x38')][_0xf803('0x3b')]));_0x3cb563[_0xf803('0x3c')]=_0x3cb563[_0xf803('0x3c')][_0xf803('0x3d')]?_0x3cb563['attributes']:_0x3a100a[_0xf803('0x36')];if(_0x3e24c6['query'][_0xf803('0x48')]){_0x3cb563[_0xf803('0x49')]=[{'all':!![]}];}_0x3cb563=_['merge']({},_0x3cb563,_0x3e24c6['options']);return db[_0xf803('0x47')]['find'](_0x3cb563)[_0xf803('0x25')](handleEntityNotFound(_0x2e312e,null))[_0xf803('0x25')](respondWithResult(_0x2e312e,null))[_0xf803('0x4c')](handleError(_0x2e312e,null));};exports[_0xf803('0x4f')]=function(_0x5df3a2,_0x413dc5){return db[_0xf803('0x47')][_0xf803('0x4f')](_0x5df3a2[_0xf803('0x50')],{})[_0xf803('0x25')](function(_0x24d8f1){var _0x43ef27=_0x5df3a2['user']['get']({'plain':!![]});if(!_0x43ef27)throw new Error(_0xf803('0x51'));if(_0x43ef27[_0xf803('0x52')]==='user'){var _0x579acb=_0x24d8f1[_0xf803('0x27')]({'plain':!![]});var _0x31ac0c=[{'name':_0xf803('0x28'),'value':'inbound'},{'name':'QueueCampaigns','value':_0xf803('0x2b')}];var _0x3cf2d2=_['find'](_0x31ac0c,['value',_0x579acb[_0xf803('0x30')]])['name'];return db[_0xf803('0x53')]['find']({'where':{'name':_0x3cf2d2,'userProfileId':_0x43ef27[_0xf803('0x54')]},'raw':!![]})[_0xf803('0x25')](function(_0x12dd5c){if(_0x12dd5c&&_0x12dd5c[_0xf803('0x55')]===0x0){return db[_0xf803('0x31')][_0xf803('0x4f')]({'name':_0x579acb['name'],'resourceId':_0x579acb['id'],'type':_0x12dd5c[_0xf803('0x33')],'sectionId':_0x12dd5c['id']},{})[_0xf803('0x25')](function(){return _0x24d8f1;});}else{return _0x24d8f1;}})[_0xf803('0x4c')](function(_0x4989b9){logger['error'](_0xf803('0x56'),_0x4989b9);throw _0x4989b9;});}return _0x24d8f1;})[_0xf803('0x25')](respondWithResult(_0x413dc5,0xc9))[_0xf803('0x4c')](handleError(_0x413dc5,null));};exports[_0xf803('0x57')]=function(_0x2e0f52,_0x2e7514){var _0x76de86={'raw':![],'where':{'id':_0x2e0f52[_0xf803('0x4e')]['id']}},_0x507ae8={};_0x507ae8[_0xf803('0x36')]=_[_0xf803('0x37')](db[_0xf803('0x47')][_0xf803('0x35')]);_0x76de86['attributes']=_[_0xf803('0x3a')](_0x507ae8[_0xf803('0x36')],qs[_0xf803('0x3b')](_0x2e0f52[_0xf803('0x38')][_0xf803('0x3b')]));_0x76de86['attributes']=_0x76de86[_0xf803('0x3c')][_0xf803('0x3d')]?_0x76de86['attributes']:_0x507ae8[_0xf803('0x36')];if(_0x2e0f52[_0xf803('0x38')][_0xf803('0x48')]){_0x76de86[_0xf803('0x49')]=[{'all':!![]}];}_0x76de86=_[_0xf803('0x46')]({},_0x76de86,_0x2e0f52[_0xf803('0x58')]);return db[_0xf803('0x47')][_0xf803('0x59')](_0x76de86)[_0xf803('0x25')](handleEntityNotFound(_0x2e7514,null))[_0xf803('0x25')](function(_0x46a091){if(_0x46a091){var _0x135976=_0x46a091[_0xf803('0x27')]({'plain':!![]});_0x135976=qs[_0xf803('0x5a')](_0x135976,['id','createdAt',_0xf803('0x5b')]);_0x2e0f52['body']=_[_0xf803('0x5a')](_0x2e0f52[_0xf803('0x50')],['id',_0xf803('0x5c'),_0xf803('0x5b')]);return db['VoiceQueue']['create'](_[_0xf803('0x46')](_0x135976,_0x2e0f52[_0xf803('0x50')]),{'include':_0x2e0f52[_0xf803('0x38')]['includeAll']?[{'all':!![]}]:undefined})[_0xf803('0x25')](function(_0x4b1542){var _0x28e30d=_0x2e0f52[_0xf803('0x5d')][_0xf803('0x27')]({'plain':!![]});if(!_0x28e30d)throw new Error(_0xf803('0x51'));if(_0x28e30d[_0xf803('0x52')]===_0xf803('0x5d')){var _0x3197ef=_0x4b1542[_0xf803('0x27')]({'plain':!![]});var _0x507b8b=[{'name':_0xf803('0x28'),'value':'inbound'},{'name':'QueueCampaigns','value':'outbound'}];var _0x56db6a=_[_0xf803('0x59')](_0x507b8b,['value',_0x3197ef[_0xf803('0x30')]])[_0xf803('0x33')];return db[_0xf803('0x53')][_0xf803('0x59')]({'where':{'name':_0x56db6a,'userProfileId':_0x28e30d['userProfileId']},'raw':!![]})[_0xf803('0x25')](function(_0x5958cd){if(_0x5958cd&&_0x5958cd[_0xf803('0x55')]===0x0){return db[_0xf803('0x31')][_0xf803('0x4f')]({'name':_0x3197ef[_0xf803('0x33')],'resourceId':_0x3197ef['id'],'type':_0x5958cd[_0xf803('0x33')],'sectionId':_0x5958cd['id']},{})[_0xf803('0x25')](function(){return _0x4b1542;});}else{return _0x4b1542;}})['catch'](function(_0x39216c){logger[_0xf803('0x32')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x39216c);throw _0x39216c;});}return _0x4b1542;});}})[_0xf803('0x25')](respondWithResult(_0x2e7514,0xc9))[_0xf803('0x4c')](handleError(_0x2e7514,null));};exports[_0xf803('0x24')]=function(_0x160c4d,_0x21b09f){if(_0x160c4d[_0xf803('0x50')]['id']){delete _0x160c4d[_0xf803('0x50')]['id'];}return db[_0xf803('0x47')][_0xf803('0x59')]({'where':{'id':_0x160c4d[_0xf803('0x4e')]['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x21b09f,null))[_0xf803('0x25')](saveUpdates(_0x160c4d['body'],null))[_0xf803('0x25')](respondWithResult(_0x21b09f,null))[_0xf803('0x4c')](handleError(_0x21b09f,null));};exports['destroy']=function(_0x5bbc69,_0x45e826){return db[_0xf803('0x47')][_0xf803('0x59')]({'where':{'id':_0x5bbc69['params']['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x45e826,null))[_0xf803('0x25')](removeEntity(_0x45e826,null))[_0xf803('0x4c')](handleError(_0x45e826,null));};exports[_0xf803('0x5e')]=function(_0x2ee23f,_0x1288ca,_0x27a797){var _0x423473={'raw':![],'where':{}};var _0x55cd95={};var _0x1f207b={'count':0x0,'rows':[]};return db['VoiceQueue']['findOne']({'where':{'id':_0x2ee23f[_0xf803('0x4e')]['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x1288ca,null))[_0xf803('0x25')](function(_0x37b22b){if(_0x37b22b){_0x55cd95[_0xf803('0x36')]=_[_0xf803('0x37')](db[_0xf803('0x5f')][_0xf803('0x35')]);_0x55cd95[_0xf803('0x38')]=_[_0xf803('0x37')](_0x2ee23f[_0xf803('0x38')]);_0x55cd95[_0xf803('0x39')]=_[_0xf803('0x3a')](_0x55cd95[_0xf803('0x36')],_0x55cd95[_0xf803('0x38')]);_0x423473['attributes']=_['intersection'](_0x55cd95[_0xf803('0x36')],qs['fields'](_0x2ee23f[_0xf803('0x38')]['fields']));_0x423473[_0xf803('0x3c')]=_0x423473[_0xf803('0x3c')][_0xf803('0x3d')]?_0x423473[_0xf803('0x3c')]:_0x55cd95[_0xf803('0x36')];if(!_0x2ee23f['query']['hasOwnProperty'](_0xf803('0x3f'))){_0x423473[_0xf803('0x20')]=qs[_0xf803('0x20')](_0x2ee23f[_0xf803('0x38')][_0xf803('0x20')]);_0x423473[_0xf803('0x1f')]=qs[_0xf803('0x1f')](_0x2ee23f[_0xf803('0x38')][_0xf803('0x1f')]);}_0x423473[_0xf803('0x40')]=qs[_0xf803('0x41')](_0x2ee23f[_0xf803('0x38')][_0xf803('0x41')]);_0x423473[_0xf803('0x42')]=qs[_0xf803('0x39')](_[_0xf803('0x60')](_0x2ee23f['query'],_0x55cd95[_0xf803('0x39')]));_0x423473['where'][_0xf803('0x61')]=_0x37b22b['id'];if(_0x2ee23f[_0xf803('0x38')][_0xf803('0x62')]){_0x423473[_0xf803('0x42')]=_['merge'](_0x423473[_0xf803('0x42')],{'$or':_[_0xf803('0x2d')](_0x423473[_0xf803('0x3c')],function(_0x29cba1){var _0x3a0816={};_0x3a0816[_0x29cba1]={'$like':'%'+_0x2ee23f[_0xf803('0x38')][_0xf803('0x62')]+'%'};return _0x3a0816;})});}_0x423473=_[_0xf803('0x46')]({},_0x423473,_0x2ee23f[_0xf803('0x58')]);return db['CmHopper'][_0xf803('0x1e')]({'where':_0x423473[_0xf803('0x42')]})[_0xf803('0x25')](function(_0x243f03){_0x1f207b[_0xf803('0x1e')]=_0x243f03;if(_0x2ee23f[_0xf803('0x38')]['includeAll']){_0x423473[_0xf803('0x49')]=[{'all':!![]}];}return db[_0xf803('0x5f')][_0xf803('0x4a')](_0x423473);})['then'](function(_0x830069){_0x1f207b['rows']=_0x830069;return _0x1f207b;});}})[_0xf803('0x25')](respondWithFilteredResult(_0x1288ca,_0x423473))[_0xf803('0x4c')](handleError(_0x1288ca,null));};exports[_0xf803('0x63')]=function(_0x3d86ae,_0x2933fd,_0x8753e){var _0x26ce6e={'raw':!![],'where':{}};var _0x5f0450={};var _0x3330f5={'count':0x0,'rows':[]};return db[_0xf803('0x47')][_0xf803('0x64')]({'where':{'id':_0x3d86ae['params']['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x2933fd,null))[_0xf803('0x25')](function(_0x15428f){if(_0x15428f){_0x5f0450[_0xf803('0x36')]=_[_0xf803('0x37')](db['CmHopperHistory'][_0xf803('0x35')]);_0x5f0450[_0xf803('0x38')]=_['keys'](_0x3d86ae['query']);_0x5f0450[_0xf803('0x39')]=_[_0xf803('0x3a')](_0x5f0450[_0xf803('0x36')],_0x5f0450[_0xf803('0x38')]);_0x26ce6e[_0xf803('0x3c')]=_[_0xf803('0x3a')](_0x5f0450[_0xf803('0x36')],qs[_0xf803('0x3b')](_0x3d86ae['query'][_0xf803('0x3b')]));_0x26ce6e[_0xf803('0x3c')]=_0x26ce6e[_0xf803('0x3c')]['length']?_0x26ce6e[_0xf803('0x3c')]:_0x5f0450[_0xf803('0x36')];if(!_0x3d86ae[_0xf803('0x38')][_0xf803('0x3e')]('nolimit')){_0x26ce6e[_0xf803('0x20')]=qs[_0xf803('0x20')](_0x3d86ae[_0xf803('0x38')][_0xf803('0x20')]);_0x26ce6e[_0xf803('0x1f')]=qs['offset'](_0x3d86ae[_0xf803('0x38')]['offset']);}_0x26ce6e['order']=qs[_0xf803('0x41')](_0x3d86ae[_0xf803('0x38')]['sort']);_0x26ce6e[_0xf803('0x42')]=qs['filters'](_[_0xf803('0x60')](_0x3d86ae[_0xf803('0x38')],_0x5f0450[_0xf803('0x39')]));_0x26ce6e[_0xf803('0x42')]['VoiceQueueId']=_0x15428f['id'];if(_0x3d86ae[_0xf803('0x38')][_0xf803('0x62')]){_0x26ce6e[_0xf803('0x42')]=_[_0xf803('0x46')](_0x26ce6e[_0xf803('0x42')],{'$or':_[_0xf803('0x2d')](_0x26ce6e[_0xf803('0x3c')],function(_0x383ed1){var _0x2a1892={};_0x2a1892[_0x383ed1]={'$like':'%'+_0x3d86ae[_0xf803('0x38')][_0xf803('0x62')]+'%'};return _0x2a1892;})});}_0x26ce6e=_[_0xf803('0x46')]({},_0x26ce6e,_0x3d86ae['options']);return db[_0xf803('0x65')][_0xf803('0x1e')]({'where':_0x26ce6e[_0xf803('0x42')]})[_0xf803('0x25')](function(_0x3ffb68){_0x3330f5[_0xf803('0x1e')]=_0x3ffb68;if(_0x3d86ae['query'][_0xf803('0x48')]){_0x26ce6e[_0xf803('0x49')]=[{'all':!![]}];}return db['CmHopperHistory'][_0xf803('0x4a')](_0x26ce6e);})[_0xf803('0x25')](function(_0x280d1b){_0x3330f5[_0xf803('0x4b')]=_0x280d1b;return _0x3330f5;});}})[_0xf803('0x25')](respondWithFilteredResult(_0x2933fd,_0x26ce6e))[_0xf803('0x4c')](handleError(_0x2933fd,null));};exports[_0xf803('0x66')]=function(_0x3d2aa5,_0x2409dd,_0x44e891){var _0x3e98f5={'raw':!![],'where':{}};var _0x47470f={};var _0x1b7df5={'count':0x0,'rows':[]};return db['VoiceQueue'][_0xf803('0x64')]({'where':{'id':_0x3d2aa5['params']['id']}})['then'](handleEntityNotFound(_0x2409dd,null))[_0xf803('0x25')](function(_0x454884){if(_0x454884){_0x47470f[_0xf803('0x36')]=_[_0xf803('0x37')](db['CmHopperFinal'][_0xf803('0x35')]);_0x47470f[_0xf803('0x38')]=_[_0xf803('0x37')](_0x3d2aa5[_0xf803('0x38')]);_0x47470f[_0xf803('0x39')]=_[_0xf803('0x3a')](_0x47470f['model'],_0x47470f[_0xf803('0x38')]);_0x3e98f5['attributes']=_['intersection'](_0x47470f[_0xf803('0x36')],qs[_0xf803('0x3b')](_0x3d2aa5[_0xf803('0x38')][_0xf803('0x3b')]));_0x3e98f5[_0xf803('0x3c')]=_0x3e98f5['attributes'][_0xf803('0x3d')]?_0x3e98f5[_0xf803('0x3c')]:_0x47470f[_0xf803('0x36')];if(!_0x3d2aa5[_0xf803('0x38')]['hasOwnProperty'](_0xf803('0x3f'))){_0x3e98f5['limit']=qs[_0xf803('0x20')](_0x3d2aa5[_0xf803('0x38')][_0xf803('0x20')]);_0x3e98f5[_0xf803('0x1f')]=qs[_0xf803('0x1f')](_0x3d2aa5[_0xf803('0x38')][_0xf803('0x1f')]);}_0x3e98f5[_0xf803('0x40')]=qs[_0xf803('0x41')](_0x3d2aa5[_0xf803('0x38')]['sort']);_0x3e98f5[_0xf803('0x42')]=qs['filters'](_[_0xf803('0x60')](_0x3d2aa5[_0xf803('0x38')],_0x47470f['filters']));_0x3e98f5[_0xf803('0x42')][_0xf803('0x61')]=_0x454884['id'];if(_0x3d2aa5['query'][_0xf803('0x62')]){_0x3e98f5['where']=_[_0xf803('0x46')](_0x3e98f5[_0xf803('0x42')],{'$or':_[_0xf803('0x2d')](_0x3e98f5[_0xf803('0x3c')],function(_0x72c060){var _0x5c7636={};_0x5c7636[_0x72c060]={'$like':'%'+_0x3d2aa5[_0xf803('0x38')][_0xf803('0x62')]+'%'};return _0x5c7636;})});}_0x3e98f5=_['merge']({},_0x3e98f5,_0x3d2aa5[_0xf803('0x58')]);return db['CmHopperFinal']['count']({'where':_0x3e98f5[_0xf803('0x42')]})[_0xf803('0x25')](function(_0x7850c){_0x1b7df5[_0xf803('0x1e')]=_0x7850c;if(_0x3d2aa5[_0xf803('0x38')][_0xf803('0x48')]){_0x3e98f5['include']=[{'all':!![]}];}return db['CmHopperFinal'][_0xf803('0x4a')](_0x3e98f5);})[_0xf803('0x25')](function(_0x564c3a){_0x1b7df5['rows']=_0x564c3a;return _0x1b7df5;});}})[_0xf803('0x25')](respondWithFilteredResult(_0x2409dd,_0x3e98f5))[_0xf803('0x4c')](handleError(_0x2409dd,null));};exports['getHopperBlacks']=function(_0x2bf22b,_0x2e5b22,_0x20da21){var _0x1ac401={'raw':!![],'where':{}};var _0x1c14f={};var _0x2ec73c={'count':0x0,'rows':[]};return db[_0xf803('0x47')]['findOne']({'where':{'id':_0x2bf22b[_0xf803('0x4e')]['id']}})['then'](handleEntityNotFound(_0x2e5b22,null))['then'](function(_0x1df257){if(_0x1df257){_0x1c14f['model']=_[_0xf803('0x37')](db['CmHopperBlack'][_0xf803('0x35')]);_0x1c14f[_0xf803('0x38')]=_[_0xf803('0x37')](_0x2bf22b[_0xf803('0x38')]);_0x1c14f[_0xf803('0x39')]=_[_0xf803('0x3a')](_0x1c14f['model'],_0x1c14f['query']);_0x1ac401[_0xf803('0x3c')]=_[_0xf803('0x3a')](_0x1c14f[_0xf803('0x36')],qs[_0xf803('0x3b')](_0x2bf22b[_0xf803('0x38')][_0xf803('0x3b')]));_0x1ac401[_0xf803('0x3c')]=_0x1ac401[_0xf803('0x3c')][_0xf803('0x3d')]?_0x1ac401[_0xf803('0x3c')]:_0x1c14f[_0xf803('0x36')];if(!_0x2bf22b[_0xf803('0x38')][_0xf803('0x3e')](_0xf803('0x3f'))){_0x1ac401[_0xf803('0x20')]=qs[_0xf803('0x20')](_0x2bf22b[_0xf803('0x38')][_0xf803('0x20')]);_0x1ac401[_0xf803('0x1f')]=qs[_0xf803('0x1f')](_0x2bf22b[_0xf803('0x38')][_0xf803('0x1f')]);}_0x1ac401[_0xf803('0x40')]=qs[_0xf803('0x41')](_0x2bf22b['query'][_0xf803('0x41')]);_0x1ac401[_0xf803('0x42')]=qs['filters'](_[_0xf803('0x60')](_0x2bf22b[_0xf803('0x38')],_0x1c14f[_0xf803('0x39')]));_0x1ac401['where'][_0xf803('0x61')]=_0x1df257['id'];if(_0x2bf22b['query'][_0xf803('0x62')]){_0x1ac401[_0xf803('0x42')]=_[_0xf803('0x46')](_0x1ac401[_0xf803('0x42')],{'$or':_['map'](_0x1ac401[_0xf803('0x3c')],function(_0x487bfa){var _0x35a28c={};_0x35a28c[_0x487bfa]={'$like':'%'+_0x2bf22b['query'][_0xf803('0x62')]+'%'};return _0x35a28c;})});}_0x1ac401=_[_0xf803('0x46')]({},_0x1ac401,_0x2bf22b['options']);return db['CmHopperBlack'][_0xf803('0x1e')]({'where':_0x1ac401[_0xf803('0x42')]})['then'](function(_0x1ea82b){_0x2ec73c['count']=_0x1ea82b;if(_0x2bf22b[_0xf803('0x38')]['includeAll']){_0x1ac401['include']=[{'all':!![]}];}return db[_0xf803('0x67')][_0xf803('0x4a')](_0x1ac401);})[_0xf803('0x25')](function(_0x2afa84){_0x2ec73c[_0xf803('0x4b')]=_0x2afa84;return _0x2ec73c;});}})[_0xf803('0x25')](respondWithFilteredResult(_0x2e5b22,_0x1ac401))[_0xf803('0x4c')](handleError(_0x2e5b22,null));};exports[_0xf803('0x68')]=function(_0x3873f6,_0x45af27,_0x2af4e3){var _0x14ece9={};var _0x5db180={};var _0x5cacfd;var _0x40a2c2;return db[_0xf803('0x47')][_0xf803('0x64')]({'where':{'id':_0x3873f6[_0xf803('0x4e')]['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x45af27,null))['then'](function(_0x396106){if(_0x396106){_0x5cacfd=_0x396106;_0x5db180[_0xf803('0x36')]=_[_0xf803('0x37')](db['Team'][_0xf803('0x35')]);_0x5db180['query']=_[_0xf803('0x37')](_0x3873f6[_0xf803('0x38')]);_0x5db180['filters']=_['intersection'](_0x5db180['model'],_0x5db180[_0xf803('0x38')]);_0x14ece9[_0xf803('0x3c')]=_[_0xf803('0x3a')](_0x5db180['model'],qs[_0xf803('0x3b')](_0x3873f6['query'][_0xf803('0x3b')]));_0x14ece9['attributes']=_0x14ece9['attributes'][_0xf803('0x3d')]?_0x14ece9['attributes']:_0x5db180[_0xf803('0x36')];_0x14ece9[_0xf803('0x40')]=qs[_0xf803('0x41')](_0x3873f6['query'][_0xf803('0x41')]);_0x14ece9[_0xf803('0x42')]=qs[_0xf803('0x39')](_[_0xf803('0x60')](_0x3873f6[_0xf803('0x38')],_0x5db180['filters']));if(_0x3873f6[_0xf803('0x38')][_0xf803('0x62')]){_0x14ece9[_0xf803('0x42')]=_[_0xf803('0x46')](_0x14ece9[_0xf803('0x42')],{'$or':_['map'](_0x14ece9['attributes'],function(_0x112733){var _0x528727={};_0x528727[_0x112733]={'$like':'%'+_0x3873f6['query'][_0xf803('0x62')]+'%'};return _0x528727;})});}_0x14ece9=_[_0xf803('0x46')]({},_0x14ece9,_0x3873f6[_0xf803('0x58')]);return _0x5cacfd['getTeams'](_0x14ece9);}})['then'](function(_0x4e1aba){if(_0x4e1aba){_0x40a2c2=_0x4e1aba[_0xf803('0x3d')];if(!_0x3873f6[_0xf803('0x38')][_0xf803('0x3e')](_0xf803('0x3f'))){_0x14ece9[_0xf803('0x20')]=qs['limit'](_0x3873f6['query'][_0xf803('0x20')]);_0x14ece9['offset']=qs[_0xf803('0x1f')](_0x3873f6[_0xf803('0x38')][_0xf803('0x1f')]);}return _0x5cacfd[_0xf803('0x68')](_0x14ece9);}})[_0xf803('0x25')](function(_0x43776a){if(_0x43776a){return _0x43776a?{'count':_0x40a2c2,'rows':_0x43776a}:null;}})[_0xf803('0x25')](respondWithResult(_0x45af27,null))['catch'](handleError(_0x45af27,null));};exports['addTeams']=function(_0x33864c,_0xcefe7b,_0x3fb0b2){var _0x66e696=_0x33864c[_0xf803('0x50')][_0xf803('0x69')];return db[_0xf803('0x6a')]['findAll']({'where':{'id':_[_0xf803('0x2d')](_0x66e696,'id')},'attributes':['id'],'include':[{'model':db['User'],'as':_0xf803('0x6b'),'attributes':['id',_0xf803('0x33'),_0xf803('0x6c'),'voicePause','interface'],'raw':!![]}]})[_0xf803('0x25')](function(_0x4467aa){if(_0x4467aa){var _0x313695=_[_0xf803('0x6d')](_0x4467aa,function(_0xae5e45){var _0x3f9a34=_0xae5e45[_0xf803('0x27')]({'plain':!![]});_0x3f9a34[_0xf803('0x6b')][_0xf803('0x6e')](function(_0x20155c){_0x20155c['penalty']=_[_0xf803('0x59')](_0x66e696,{'id':_0x3f9a34['id']})['penalty'];});return _0x3f9a34['Agents'];});return db[_0xf803('0x47')][_0xf803('0x59')]({'where':{'id':_0x33864c[_0xf803('0x4e')]['id']}})['then'](function(_0x13ff2c){return db['sequelize']['transaction'](function(_0x2007fe){return _0x13ff2c[_0xf803('0x6f')](_['map'](_0x66e696,'id'),{'transaction':_0x2007fe})[_0xf803('0x25')](function(){return BPromise[_0xf803('0x70')](_0x313695,function(_0x426b3c){return db[_0xf803('0x71')][_0xf803('0x72')]({'where':{'UserId':_0x426b3c['id'],'VoiceQueueId':_0x33864c['params']['id']},'defaults':{'penalty':_0x426b3c[_0xf803('0x73')]},'transaction':_0x2007fe});});})[_0xf803('0x25')](function(){return BPromise['each'](_[_0xf803('0x62')](_0x313695,{'online':!![]}),function(_0x5cfacd){return db[_0xf803('0x74')]['upsert']({'membername':_0x5cfacd[_0xf803('0x33')],'UserId':_0x5cfacd['id'],'queue_name':_0x13ff2c[_0xf803('0x33')],'VoiceQueueId':_0x13ff2c['id'],'interface':_[_0xf803('0x75')](_0x5cfacd[_0xf803('0x76')])?util[_0xf803('0x77')]('SIP/%s',_0x5cfacd['name']):_0x5cfacd[_0xf803('0x76')],'paused':_0x5cfacd[_0xf803('0x78')]||![],'penalty':_0x5cfacd['penalty']},{'transaction':_0x2007fe});});})['then'](function(){_0x313695[_0xf803('0x6e')](function(_0x5232f8){socket['emit']('userVoiceQueue:save',{'UserId':_0x5232f8['id'],'VoiceQueueId':_0x13ff2c['id']});});});});});}})[_0xf803('0x25')](respondWithStatusCode(_0xcefe7b,null))[_0xf803('0x4c')](handleError(_0xcefe7b,null));};exports[_0xf803('0x79')]=function(_0x182305,_0x12487f,_0x17b6c6){return db[_0xf803('0x6a')]['findAll']({'where':{'id':_0x182305['query'][_0xf803('0x7a')]},'attributes':['id'],'include':[{'model':db[_0xf803('0x7b')],'as':_0xf803('0x6b'),'attributes':['id'],'raw':!![]}]})[_0xf803('0x25')](handleEntityNotFound(_0x12487f,null))['then'](function(_0x487529){var _0x5a13a0=_['map'](_0x487529,'id');var _0x3eddc1=[];var _0x2104c1=[];var _0x596439=squel[_0xf803('0x7c')]();_0x596439[_0xf803('0x45')](_0xf803('0x7d'))[_0xf803('0x7e')](_0xf803('0x7f'),'tq')['join'](_0xf803('0x80'),'ut',_0xf803('0x81'))[_0xf803('0x42')](_0xf803('0x82'),_0x182305[_0xf803('0x4e')]['id']);for(var _0x3bb245=0x0;_0x3bb245<_0x487529[_0xf803('0x3d')];_0x3bb245+=0x1){let _0x2f844e=_0x487529[_0x3bb245];for(var _0x43cabe=0x0;_0x43cabe<_0x2f844e[_0xf803('0x6b')][_0xf803('0x3d')];_0x43cabe+=0x1){let _0x5aab5e=_0x2f844e[_0xf803('0x6b')][_0x43cabe];var _0x2fddc6=_0x596439['clone']();_0x2fddc6[_0xf803('0x42')](_0xf803('0x83'),_0x5aab5e['id']);_0x2104c1[_0xf803('0x84')](db[_0xf803('0x85')][_0xf803('0x38')](_0x2fddc6[_0xf803('0x86')](),{'type':db[_0xf803('0x85')][_0xf803('0x87')][_0xf803('0x88')]})['then'](function(_0x2b8d65){if(_0x2b8d65[_0xf803('0x3d')]===0x1){return _0x5aab5e['id'];}else{var _0x3742eb=_[_0xf803('0x89')](_[_0xf803('0x2d')](_0x2b8d65,_0xf803('0x8a')),function(_0x349d76){return _[_0xf803('0x2f')](_0x5a13a0,_0x349d76);});if(_0x3742eb){return _0x5aab5e['id'];}}}));}}return BPromise['all'](_0x2104c1)[_0xf803('0x25')](function(_0x1caf81){_0x3eddc1=_(_0x3eddc1)['union'](_0x1caf81)[_0xf803('0x8b')]()[_0xf803('0x2e')]();return db[_0xf803('0x47')][_0xf803('0x59')]({'where':{'id':_0x182305[_0xf803('0x4e')]['id']}})['then'](function(_0xbb8ea0){return db[_0xf803('0x85')][_0xf803('0x8c')](function(_0x33ab31){return _0xbb8ea0[_0xf803('0x79')](_0x182305[_0xf803('0x38')]['ids'],{'transaction':_0x33ab31})[_0xf803('0x25')](function(){if(!_[_0xf803('0x8d')](_0x3eddc1)){return _0xbb8ea0[_0xf803('0x8e')](_0x3eddc1,{'transaction':_0x33ab31})[_0xf803('0x25')](function(){return db['UserVoiceQueueRt'][_0xf803('0x26')]({'where':{'VoiceQueueId':_0x182305[_0xf803('0x4e')]['id'],'UserId':_0x3eddc1},'transaction':_0x33ab31});});}})[_0xf803('0x25')](function(){_0x3eddc1[_0xf803('0x6e')](function(_0x171a65){socket[_0xf803('0x8f')](_0xf803('0x90'),{'UserId':_0x171a65,'VoiceQueueId':_0xbb8ea0['id']});});});});});});})[_0xf803('0x25')](respondWithStatusCode(_0x12487f,null))[_0xf803('0x4c')](handleError(_0x12487f,null));};exports[_0xf803('0x91')]=function(_0x13cdd2,_0x596868,_0x1a1111){var _0xf5d8af,_0x442d55;return db[_0xf803('0x47')][_0xf803('0x59')]({'where':{'id':_0x13cdd2['params']['id']}})['then'](handleEntityNotFound(_0x596868,null))[_0xf803('0x25')](function(_0x30e962){if(_0x30e962){_0x442d55=_0x30e962;return _0x30e962[_0xf803('0x91')](_0x13cdd2[_0xf803('0x50')]['ids'],_[_0xf803('0x5a')](_0x13cdd2[_0xf803('0x50')],['ids','id'])||{})['spread'](function(_0x59c765){for(var _0x440edc=0x0;_0x440edc<_0x13cdd2[_0xf803('0x50')][_0xf803('0x7a')][_0xf803('0x3d')];_0x440edc+=0x1){socket[_0xf803('0x8f')](_0xf803('0x92'),{'UserId':_0x13cdd2[_0xf803('0x50')][_0xf803('0x7a')][_0x440edc],'VoiceQueueId':_0x13cdd2[_0xf803('0x4e')]['id']});}return _0x59c765;});}})[_0xf803('0x25')](function(_0x3826f1){_0xf5d8af=_0x3826f1||[];if(_0x442d55){return db[_0xf803('0x7b')]['findAll']({'where':{'id':_0x13cdd2[_0xf803('0x50')][_0xf803('0x7a')]},'attributes':['id',_0xf803('0x33'),_0xf803('0x6c'),_0xf803('0x78'),_0xf803('0x76')],'raw':!![]});}})['then'](function(_0x20746b){if(!_[_0xf803('0x8d')](_0x20746b)){var _0x1ec6ae=[];for(var _0x525467=0x0;_0x525467<_0x20746b[_0xf803('0x3d')];_0x525467++){if(_0x20746b[_0x525467][_0xf803('0x6c')]){_0x1ec6ae[_0xf803('0x84')](db[_0xf803('0x74')]['upsert']({'membername':_0x20746b[_0x525467][_0xf803('0x33')],'UserId':_0x20746b[_0x525467]['id'],'queue_name':_0x442d55[_0xf803('0x33')],'VoiceQueueId':_0x442d55['id'],'interface':_['isNil'](_0x20746b[_0x525467][_0xf803('0x76')])?util[_0xf803('0x77')](_0xf803('0x93'),_0x20746b[_0x525467][_0xf803('0x33')]):_0x20746b[_0x525467][_0xf803('0x76')],'paused':_0x20746b[_0x525467][_0xf803('0x78')]||![],'penalty':_0x13cdd2[_0xf803('0x50')]['penalty']||0x0}));}}return BPromise[_0xf803('0x94')](_0x1ec6ae);}})['then'](function(){return _0xf5d8af;})[_0xf803('0x25')](respondWithResult(_0x596868,null))[_0xf803('0x4c')](handleError(_0x596868,null));};exports['removeAgents']=function(_0xc6413,_0x127ef5,_0x4e04b8){return db[_0xf803('0x47')][_0xf803('0x59')]({'where':{'id':_0xc6413[_0xf803('0x4e')]['id']}})['then'](handleEntityNotFound(_0x127ef5,null))[_0xf803('0x25')](function(_0x2b2593){if(_0x2b2593){return _0x2b2593['removeAgents'](_0xc6413[_0xf803('0x38')]['ids'])[_0xf803('0x25')](function(){if(_[_0xf803('0x95')](_0xc6413[_0xf803('0x38')]['ids'])){for(var _0x1c2f3e=0x0;_0x1c2f3e<_0xc6413[_0xf803('0x38')][_0xf803('0x7a')][_0xf803('0x3d')];_0x1c2f3e+=0x1){socket[_0xf803('0x8f')](_0xf803('0x90'),{'UserId':Number(_0xc6413[_0xf803('0x38')]['ids'][_0x1c2f3e]),'VoiceQueueId':Number(_0xc6413[_0xf803('0x4e')]['id'])});}}else{socket[_0xf803('0x8f')](_0xf803('0x90'),{'UserId':Number(_0xc6413[_0xf803('0x38')][_0xf803('0x7a')]),'VoiceQueueId':Number(_0xc6413['params']['id'])});}});}})['then'](function(_0x51d35b){return db[_0xf803('0x74')][_0xf803('0x26')]({'where':{'VoiceQueueId':_0xc6413[_0xf803('0x4e')]['id'],'UserId':_0xc6413[_0xf803('0x38')][_0xf803('0x7a')]}})[_0xf803('0x25')](function(){return _0x51d35b;});})['then'](respondWithStatusCode(_0x127ef5,null))[_0xf803('0x4c')](handleError(_0x127ef5,null));};exports[_0xf803('0x96')]=function(_0x52940a,_0x229b2d,_0x71ae96){var _0x589582={};var _0xfff711={};var _0xe3ab0e;var _0x53987b;return db[_0xf803('0x47')][_0xf803('0x64')]({'where':{'id':_0x52940a[_0xf803('0x4e')]['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x229b2d,null))[_0xf803('0x25')](function(_0x11a0a8){if(_0x11a0a8){_0xe3ab0e=_0x11a0a8;_0xfff711[_0xf803('0x36')]=_[_0xf803('0x37')](db[_0xf803('0x7b')][_0xf803('0x35')]);_0xfff711[_0xf803('0x38')]=_[_0xf803('0x37')](_0x52940a[_0xf803('0x38')]);_0xfff711['filters']=_[_0xf803('0x3a')](_0xfff711[_0xf803('0x36')],_0xfff711[_0xf803('0x38')]);_0x589582[_0xf803('0x3c')]=_[_0xf803('0x3a')](_0xfff711[_0xf803('0x36')],qs['fields'](_0x52940a[_0xf803('0x38')][_0xf803('0x3b')]));_0x589582['attributes']=_0x589582[_0xf803('0x3c')]['length']?_0x589582[_0xf803('0x3c')]:_0xfff711[_0xf803('0x36')];_0x589582[_0xf803('0x40')]=qs['sort'](_0x52940a[_0xf803('0x38')][_0xf803('0x41')]);_0x589582[_0xf803('0x42')]=qs['filters'](_[_0xf803('0x60')](_0x52940a[_0xf803('0x38')],_0xfff711[_0xf803('0x39')]));if(_0x52940a[_0xf803('0x38')][_0xf803('0x62')]){_0x589582['where']=_['merge'](_0x589582['where'],{'$or':_[_0xf803('0x2d')](_0x589582[_0xf803('0x3c')],function(_0x33c33b){var _0x50345b={};_0x50345b[_0x33c33b]={'$like':'%'+_0x52940a['query'][_0xf803('0x62')]+'%'};return _0x50345b;})});}_0x589582=_[_0xf803('0x46')]({},_0x589582,_0x52940a[_0xf803('0x58')]);return _0xe3ab0e[_0xf803('0x96')](_0x589582);}})['then'](function(_0x11ded7){if(_0x11ded7){_0x53987b=_0x11ded7[_0xf803('0x3d')];if(!_0x52940a['query'][_0xf803('0x3e')](_0xf803('0x3f'))){_0x589582[_0xf803('0x20')]=qs[_0xf803('0x20')](_0x52940a[_0xf803('0x38')]['limit']);_0x589582['offset']=qs[_0xf803('0x1f')](_0x52940a[_0xf803('0x38')][_0xf803('0x1f')]);}return _0xe3ab0e[_0xf803('0x96')](_0x589582);}})[_0xf803('0x25')](function(_0x100a1d){if(_0x100a1d){return _0x100a1d?{'count':_0x53987b,'rows':_0x100a1d}:null;}})[_0xf803('0x25')](respondWithResult(_0x229b2d,null))['catch'](handleError(_0x229b2d,null));};exports[_0xf803('0x97')]=function(_0x265a03,_0x17f981,_0x42a186){var _0x195b24={};var _0x392c5b={};var _0x20beb5;var _0x29fc31;return db['VoiceQueue']['findOne']({'where':{'id':_0x265a03[_0xf803('0x4e')]['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x17f981,null))['then'](function(_0x42f866){if(_0x42f866){_0x20beb5=_0x42f866;_0x392c5b[_0xf803('0x36')]=_[_0xf803('0x37')](db['UserVoiceQueueRt']['rawAttributes']);_0x392c5b[_0xf803('0x38')]=_[_0xf803('0x37')](_0x265a03[_0xf803('0x38')]);_0x392c5b['filters']=_[_0xf803('0x3a')](_0x392c5b[_0xf803('0x36')],_0x392c5b[_0xf803('0x38')]);_0x195b24[_0xf803('0x3c')]=_['intersection'](_0x392c5b[_0xf803('0x36')],qs[_0xf803('0x3b')](_0x265a03[_0xf803('0x38')]['fields']));_0x195b24[_0xf803('0x3c')]=_0x195b24['attributes'][_0xf803('0x3d')]?_0x195b24[_0xf803('0x3c')]:_0x392c5b['model'];_0x195b24[_0xf803('0x40')]=qs[_0xf803('0x41')](_0x265a03[_0xf803('0x38')][_0xf803('0x41')]);_0x195b24[_0xf803('0x42')]=qs[_0xf803('0x39')](_[_0xf803('0x60')](_0x265a03[_0xf803('0x38')],_0x392c5b[_0xf803('0x39')]));if(_0x265a03[_0xf803('0x38')][_0xf803('0x62')]){_0x195b24[_0xf803('0x42')]=_[_0xf803('0x46')](_0x195b24[_0xf803('0x42')],{'$or':_[_0xf803('0x2d')](_0x195b24[_0xf803('0x3c')],function(_0x176daa){var _0x4fc2eb={};_0x4fc2eb[_0x176daa]={'$like':'%'+_0x265a03[_0xf803('0x38')][_0xf803('0x62')]+'%'};return _0x4fc2eb;})});}_0x195b24=_[_0xf803('0x46')]({},_0x195b24,_0x265a03[_0xf803('0x58')]);return _0x20beb5[_0xf803('0x97')](_0x195b24);}})[_0xf803('0x25')](function(_0x303bf1){if(_0x303bf1){_0x29fc31=_0x303bf1[_0xf803('0x3d')];if(!_0x265a03[_0xf803('0x38')][_0xf803('0x3e')](_0xf803('0x3f'))){_0x195b24[_0xf803('0x20')]=qs['limit'](_0x265a03[_0xf803('0x38')]['limit']);_0x195b24[_0xf803('0x1f')]=qs[_0xf803('0x1f')](_0x265a03['query']['offset']);}return _0x20beb5['getMembers'](_0x195b24);}})[_0xf803('0x25')](function(_0x1379db){return _0x1379db?{'count':_0x29fc31,'rows':_0x1379db}:null;})[_0xf803('0x25')](respondWithResult(_0x17f981,null))[_0xf803('0x4c')](handleError(_0x17f981,null));};exports[_0xf803('0x98')]=function(_0x3cb98e,_0x370a9d,_0x50e392){var _0x39dc0d={};var _0x195856={};var _0xc978a1;var _0x89bf76;return db[_0xf803('0x47')][_0xf803('0x64')]({'where':{'id':_0x3cb98e[_0xf803('0x4e')]['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x370a9d,null))[_0xf803('0x25')](function(_0x455989){if(_0x455989){_0xc978a1=_0x455989;_0x195856['model']=_[_0xf803('0x37')](db[_0xf803('0x99')][_0xf803('0x35')]);_0x195856['query']=_['keys'](_0x3cb98e[_0xf803('0x38')]);_0x195856['filters']=_[_0xf803('0x3a')](_0x195856[_0xf803('0x36')],_0x195856[_0xf803('0x38')]);_0x39dc0d[_0xf803('0x3c')]=_['intersection'](_0x195856[_0xf803('0x36')],qs[_0xf803('0x3b')](_0x3cb98e['query'][_0xf803('0x3b')]));_0x39dc0d[_0xf803('0x3c')]=_0x39dc0d[_0xf803('0x3c')][_0xf803('0x3d')]?_0x39dc0d['attributes']:_0x195856[_0xf803('0x36')];_0x39dc0d[_0xf803('0x40')]=qs[_0xf803('0x41')](_0x3cb98e['query'][_0xf803('0x41')]);_0x39dc0d[_0xf803('0x42')]=qs[_0xf803('0x39')](_[_0xf803('0x60')](_0x3cb98e['query'],_0x195856[_0xf803('0x39')]));if(_0x3cb98e['query'][_0xf803('0x62')]){_0x39dc0d['where']=_[_0xf803('0x46')](_0x39dc0d[_0xf803('0x42')],{'$or':_[_0xf803('0x2d')](_0x39dc0d[_0xf803('0x3c')],function(_0x229fef){var _0x2edc3d={};_0x2edc3d[_0x229fef]={'$like':'%'+_0x3cb98e[_0xf803('0x38')]['filter']+'%'};return _0x2edc3d;})});}_0x39dc0d=_[_0xf803('0x46')]({},_0x39dc0d,_0x3cb98e[_0xf803('0x58')]);return _0xc978a1['getLists'](_0x39dc0d);}})[_0xf803('0x25')](function(_0x132c5){if(_0x132c5){_0x89bf76=_0x132c5[_0xf803('0x3d')];if(!_0x3cb98e[_0xf803('0x38')][_0xf803('0x3e')](_0xf803('0x3f'))){_0x39dc0d[_0xf803('0x20')]=qs[_0xf803('0x20')](_0x3cb98e[_0xf803('0x38')]['limit']);_0x39dc0d[_0xf803('0x1f')]=qs[_0xf803('0x1f')](_0x3cb98e[_0xf803('0x38')][_0xf803('0x1f')]);}return _0xc978a1[_0xf803('0x98')](_0x39dc0d);}})['then'](function(_0x59bb28){if(_0x59bb28){return _0x59bb28?{'count':_0x89bf76,'rows':_0x59bb28}:null;}})[_0xf803('0x25')](respondWithResult(_0x370a9d,null))[_0xf803('0x4c')](handleError(_0x370a9d,null));};exports[_0xf803('0x9a')]=function(_0x368ad5,_0x5471a3,_0x349f26){var _0x2c8871,_0x377b55;return db[_0xf803('0x47')][_0xf803('0x59')]({'where':{'id':_0x368ad5[_0xf803('0x4e')]['id']}})['then'](handleEntityNotFound(_0x5471a3,null))[_0xf803('0x25')](function(_0x4c3e66){if(_0x4c3e66){_0x377b55=_0x4c3e66;return _0x4c3e66['addLists'](_0x368ad5[_0xf803('0x50')][_0xf803('0x7a')],_['omit'](_0x368ad5[_0xf803('0x50')],['ids','id'])||{});}return null;})[_0xf803('0x9b')](function(_0xe1873e){var _0x2cb175;_0x2c8871=_0xe1873e||[];var _0xa5ff52=[];if(_0xe1873e){for(var _0x3cad45=0x0;_0x3cad45<_0xe1873e['length'];_0x3cad45+=0x1){var _0x598ef6=_0xe1873e[_0x3cad45]['get']({'plain':!![]});_0x377b55[_0xf803('0x9c')]=_0x368ad5[_0xf803('0x50')][_0xf803('0x9c')]?_0x368ad5['body'][_0xf803('0x9c')]:_0x377b55[_0xf803('0x9c')];switch(_0x377b55[_0xf803('0x9c')]){case _0xf803('0x9d'):_0x2cb175=squel[_0xf803('0x9e')]()[_0xf803('0x9f')]('cm_hopper')[_0xf803('0xa0')]([_0xf803('0xa1'),_0xf803('0xa2'),_0xf803('0xa3'),_0xf803('0xa4'),_0xf803('0x61'),_0xf803('0x5c'),_0xf803('0x5b')],squel[_0xf803('0x7c')]()[_0xf803('0x45')](_0xf803('0xa1'),_0xf803('0xa1'))[_0xf803('0x45')](_0xf803('0xa5'),_0xf803('0xa2'))[_0xf803('0x45')]('id','ContactId')[_0xf803('0x45')](_0x598ef6['CmListId'][_0xf803('0x86')](),_0xf803('0xa4'))[_0xf803('0x45')](_0x368ad5[_0xf803('0x4e')]['id'][_0xf803('0x86')](),_0xf803('0x61'))[_0xf803('0x45')]('NOW()','createdAt')[_0xf803('0x45')](_0xf803('0xa5'),_0xf803('0x5b'))['from'](_0xf803('0xa6'))['where'](_0xf803('0xa7'))['where'](_0xf803('0xa8'),_0x598ef6[_0xf803('0xa9')][_0xf803('0x86')]())[_0xf803('0x42')](_0xf803('0xaa'))[_0xf803('0x42')]('phone\x20NOT\x20IN\x20(?)',squel[_0xf803('0x7c')]()[_0xf803('0x45')]('COALESCE(calleridnum,\x27\x27)')[_0xf803('0x7e')](_0xf803('0xab'))[_0xf803('0x42')](_0xf803('0x82'),_0x368ad5[_0xf803('0x4e')]['id']['toString']()))[_0xf803('0x42')](_0xf803('0xac'),squel[_0xf803('0x7c')]()[_0xf803('0x45')](_0xf803('0xad'))[_0xf803('0x7e')]('cm_hopper')[_0xf803('0x42')]('VoiceQueueId\x20=\x20?',_0x368ad5['params']['id'][_0xf803('0x86')]())))[_0xf803('0x86')]();break;case'onlyIfOpen':_0x2cb175=squel[_0xf803('0x9e')]()['into'](_0xf803('0xae'))[_0xf803('0xa0')]([_0xf803('0xa1'),_0xf803('0xa2'),'ContactId',_0xf803('0xa4'),_0xf803('0x61'),'createdAt',_0xf803('0x5b')],squel[_0xf803('0x7c')]()[_0xf803('0x45')]('phone','phone')['field'](_0xf803('0xa5'),'scheduledAt')[_0xf803('0x45')]('id',_0xf803('0xa3'))['field'](_0x598ef6[_0xf803('0xa9')][_0xf803('0x86')](),'ListId')['field'](_0x368ad5[_0xf803('0x4e')]['id'][_0xf803('0x86')](),_0xf803('0x61'))[_0xf803('0x45')]('NOW()',_0xf803('0x5c'))[_0xf803('0x45')](_0xf803('0xa5'),_0xf803('0x5b'))[_0xf803('0x7e')](_0xf803('0xa6'))['where'](_0xf803('0xa7'))[_0xf803('0x42')](_0xf803('0xa8'),_0x598ef6[_0xf803('0xa9')][_0xf803('0x86')]())[_0xf803('0x42')](_0xf803('0xaa'))[_0xf803('0x42')]('phone\x20NOT\x20IN\x20(?)',squel[_0xf803('0x7c')]()['field']('COALESCE(phone,\x27\x27)')[_0xf803('0x7e')](_0xf803('0xae'))['where'](_0xf803('0x82'),_0x368ad5['params']['id']['toString']())))[_0xf803('0x86')]();break;default:_0x2cb175=squel['insert']()['into'](_0xf803('0xae'))[_0xf803('0xa0')]([_0xf803('0xa1'),_0xf803('0xa2'),'ContactId',_0xf803('0xa4'),_0xf803('0x61'),_0xf803('0x5c'),'updatedAt'],squel[_0xf803('0x7c')]()['field'](_0xf803('0xa1'),_0xf803('0xa1'))[_0xf803('0x45')](_0xf803('0xa5'),_0xf803('0xa2'))[_0xf803('0x45')]('id',_0xf803('0xa3'))['field'](_0x598ef6[_0xf803('0xa9')][_0xf803('0x86')](),_0xf803('0xa4'))[_0xf803('0x45')](_0x368ad5[_0xf803('0x4e')]['id'][_0xf803('0x86')](),_0xf803('0x61'))[_0xf803('0x45')](_0xf803('0xa5'),_0xf803('0x5c'))[_0xf803('0x45')](_0xf803('0xa5'),_0xf803('0x5b'))[_0xf803('0x7e')](_0xf803('0xa6'))[_0xf803('0x42')]('deletedAt\x20IS\x20NULL')['where'](_0xf803('0xa8'),_0x598ef6[_0xf803('0xa9')][_0xf803('0x86')]())[_0xf803('0x42')](_0xf803('0xaa')))['toString']();}_0xa5ff52['push'](db[_0xf803('0x85')][_0xf803('0x38')](_0x2cb175));}return BPromise[_0xf803('0x94')](_0xa5ff52);}})[_0xf803('0x25')](function(){return _0x2c8871;})[_0xf803('0x25')](respondWithResult(_0x5471a3,null))[_0xf803('0x4c')](handleError(_0x5471a3,null));};exports[_0xf803('0xaf')]=function(_0x5628d3,_0x16b17f,_0x2e5cb5){return db[_0xf803('0x47')][_0xf803('0x59')]({'where':{'id':_0x5628d3[_0xf803('0x4e')]['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x16b17f,null))[_0xf803('0x25')](function(_0x512c5a){if(_0x512c5a){return _0x512c5a[_0xf803('0xaf')](_0x5628d3[_0xf803('0x38')]['ids']);}})['then'](function(_0xbdd1a4){if(_0xbdd1a4){return db['CmHopper'][_0xf803('0x26')]({'where':{'ListId':_0x5628d3['query'][_0xf803('0x7a')],'VoiceQueueId':_0x5628d3[_0xf803('0x4e')]['id']}})[_0xf803('0x25')](function(){return _0xbdd1a4;});}})[_0xf803('0x25')](respondWithStatusCode(_0x16b17f,null))[_0xf803('0x4c')](handleError(_0x16b17f,null));};exports[_0xf803('0xb0')]=function(_0x4e4884,_0x153469,_0x12a29c){var _0x2881d2={};var _0x584ac5={};var _0x4d4587;var _0x1151d1;return db['VoiceQueue']['findOne']({'where':{'id':_0x4e4884[_0xf803('0x4e')]['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x153469,null))['then'](function(_0x5ae76a){if(_0x5ae76a){_0x4d4587=_0x5ae76a;_0x584ac5['model']=_[_0xf803('0x37')](db[_0xf803('0x99')][_0xf803('0x35')]);_0x584ac5[_0xf803('0x38')]=_[_0xf803('0x37')](_0x4e4884[_0xf803('0x38')]);_0x584ac5['filters']=_[_0xf803('0x3a')](_0x584ac5[_0xf803('0x36')],_0x584ac5[_0xf803('0x38')]);_0x2881d2[_0xf803('0x3c')]=_[_0xf803('0x3a')](_0x584ac5[_0xf803('0x36')],qs[_0xf803('0x3b')](_0x4e4884[_0xf803('0x38')][_0xf803('0x3b')]));_0x2881d2[_0xf803('0x3c')]=_0x2881d2[_0xf803('0x3c')][_0xf803('0x3d')]?_0x2881d2[_0xf803('0x3c')]:_0x584ac5[_0xf803('0x36')];_0x2881d2[_0xf803('0x40')]=qs[_0xf803('0x41')](_0x4e4884[_0xf803('0x38')][_0xf803('0x41')]);_0x2881d2['where']=qs[_0xf803('0x39')](_['pick'](_0x4e4884[_0xf803('0x38')],_0x584ac5[_0xf803('0x39')]));if(_0x4e4884[_0xf803('0x38')][_0xf803('0x62')]){_0x2881d2[_0xf803('0x42')]=_[_0xf803('0x46')](_0x2881d2[_0xf803('0x42')],{'$or':_['map'](_0x2881d2[_0xf803('0x3c')],function(_0x21b4f7){var _0x31ff0f={};_0x31ff0f[_0x21b4f7]={'$like':'%'+_0x4e4884[_0xf803('0x38')][_0xf803('0x62')]+'%'};return _0x31ff0f;})});}_0x2881d2=_[_0xf803('0x46')]({},_0x2881d2,_0x4e4884['options']);return _0x4d4587[_0xf803('0xb0')](_0x2881d2);}})[_0xf803('0x25')](function(_0x56b981){if(_0x56b981){_0x1151d1=_0x56b981[_0xf803('0x3d')];if(!_0x4e4884[_0xf803('0x38')]['hasOwnProperty']('nolimit')){_0x2881d2[_0xf803('0x20')]=qs[_0xf803('0x20')](_0x4e4884['query'][_0xf803('0x20')]);_0x2881d2[_0xf803('0x1f')]=qs[_0xf803('0x1f')](_0x4e4884[_0xf803('0x38')]['offset']);}return _0x4d4587[_0xf803('0xb0')](_0x2881d2);}})[_0xf803('0x25')](function(_0x22dfe3){if(_0x22dfe3){return _0x22dfe3?{'count':_0x1151d1,'rows':_0x22dfe3}:null;}})['then'](respondWithResult(_0x153469,null))['catch'](handleError(_0x153469,null));};exports['addBlackLists']=function(_0x12126d,_0x17a6df,_0x27c458){var _0x55ab58,_0x222da1;return db[_0xf803('0x47')]['find']({'where':{'id':_0x12126d[_0xf803('0x4e')]['id']}})['then'](handleEntityNotFound(_0x17a6df,null))[_0xf803('0x25')](function(_0x2cb53a){if(_0x2cb53a){_0x222da1=_0x2cb53a;return _0x2cb53a[_0xf803('0xb1')](_0x12126d[_0xf803('0x50')]['ids'],_['omit'](_0x12126d['body'],[_0xf803('0x7a'),'id'])||{});}return null;})['spread'](function(_0x454fd3){var _0x5d4d18;_0x55ab58=_0x454fd3||[];var _0x43533b=[];if(_0x454fd3){for(var _0x43a98f=0x0;_0x43a98f<_0x454fd3[_0xf803('0x3d')];_0x43a98f+=0x1){var _0x44c0e2=_0x454fd3[_0x43a98f][_0xf803('0x27')]({'plain':!![]});_0x5d4d18=squel[_0xf803('0x9e')]()[_0xf803('0x9f')]('cm_hopper_black')[_0xf803('0xa0')]([_0xf803('0xa1'),_0xf803('0xa3'),'ListId','VoiceQueueId',_0xf803('0x5c'),_0xf803('0x5b')],squel[_0xf803('0x7c')]()[_0xf803('0x45')]('phone',_0xf803('0xa1'))[_0xf803('0x45')]('id',_0xf803('0xa3'))['field'](_0x44c0e2[_0xf803('0xa9')][_0xf803('0x86')](),_0xf803('0xa4'))['field'](_0x12126d['params']['id'][_0xf803('0x86')](),_0xf803('0x61'))[_0xf803('0x45')](_0xf803('0xa5'),_0xf803('0x5c'))[_0xf803('0x45')]('NOW()',_0xf803('0x5b'))[_0xf803('0x7e')]('cm_contacts')[_0xf803('0x42')](_0xf803('0xa7'))['where'](_0xf803('0xa8'),_0x44c0e2[_0xf803('0xa9')][_0xf803('0x86')]())[_0xf803('0x42')](_0xf803('0xaa')))['toString']();_0x43533b[_0xf803('0x84')](db[_0xf803('0x85')][_0xf803('0x38')](_0x5d4d18));}return BPromise[_0xf803('0x94')](_0x43533b);}})[_0xf803('0x25')](function(){return _0x55ab58;})['then'](respondWithResult(_0x17a6df,null))[_0xf803('0x4c')](handleError(_0x17a6df,null));};exports['removeBlackLists']=function(_0x2a1f46,_0x1a05b4,_0x51f3ae){return db[_0xf803('0x47')][_0xf803('0x59')]({'where':{'id':_0x2a1f46['params']['id']}})[_0xf803('0x25')](handleEntityNotFound(_0x1a05b4,null))['then'](function(_0x2a9a3e){if(_0x2a9a3e){return _0x2a9a3e[_0xf803('0xb2')](_0x2a1f46[_0xf803('0x38')]['ids']);}})[_0xf803('0x25')](function(_0x14264d){if(_0x14264d){return db[_0xf803('0x67')][_0xf803('0x26')]({'where':{'ListId':_0x2a1f46[_0xf803('0x38')][_0xf803('0x7a')],'VoiceQueueId':_0x2a1f46['params']['id']}})['then'](function(){return _0x14264d;});}})['then'](respondWithStatusCode(_0x1a05b4,null))['catch'](handleError(_0x1a05b4,null));};
\ No newline at end of file
index 2688218..933e545 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8467=['remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','setMaxListeners','save','update'];(function(_0x1043f6,_0x1b9143){var _0x3bef5e=function(_0x3ae588){while(--_0x3ae588){_0x1043f6['push'](_0x1043f6['shift']());}};_0x3bef5e(++_0x1b9143);}(_0x8467,0x181));var _0x7846=function(_0x45fc6a,_0x166adb){_0x45fc6a=_0x45fc6a-0x0;var _0x14bcfd=_0x8467[_0x45fc6a];return _0x14bcfd;};'use strict';var EventEmitter=require(_0x7846('0x0'));var VoiceQueue=require(_0x7846('0x1'))['db']['VoiceQueue'];var VoiceQueueEvents=new EventEmitter();VoiceQueueEvents[_0x7846('0x2')](0x0);var events={'afterCreate':_0x7846('0x3'),'afterUpdate':_0x7846('0x4'),'afterDestroy':_0x7846('0x5')};function emitEvent(_0x4bdc92){return function(_0x20fc4f,_0x36fa14,_0x35d67a){VoiceQueueEvents[_0x7846('0x6')](_0x4bdc92+':'+_0x20fc4f['id'],_0x20fc4f);VoiceQueueEvents[_0x7846('0x6')](_0x4bdc92,_0x20fc4f);_0x35d67a(null);};}for(var e in events){if(events[_0x7846('0x7')](e)){var event=events[e];VoiceQueue[_0x7846('0x8')](e,emitEvent(event));}}module[_0x7846('0x9')]=VoiceQueueEvents;
\ No newline at end of file
+var _0x317a=['hook','exports','events','VoiceQueue','save','update','remove','emit','hasOwnProperty'];(function(_0x36100a,_0x262d58){var _0x326d38=function(_0x1d8284){while(--_0x1d8284){_0x36100a['push'](_0x36100a['shift']());}};_0x326d38(++_0x262d58);}(_0x317a,0x92));var _0xa317=function(_0xb4bd53,_0x2a6033){_0xb4bd53=_0xb4bd53-0x0;var _0x3c2969=_0x317a[_0xb4bd53];return _0x3c2969;};'use strict';var EventEmitter=require(_0xa317('0x0'));var VoiceQueue=require('../../mysqldb')['db'][_0xa317('0x1')];var VoiceQueueEvents=new EventEmitter();VoiceQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xa317('0x2'),'afterUpdate':_0xa317('0x3'),'afterDestroy':_0xa317('0x4')};function emitEvent(_0xafca13){return function(_0x1b96e6,_0x72bd9b,_0x597c81){VoiceQueueEvents['emit'](_0xafca13+':'+_0x1b96e6['id'],_0x1b96e6);VoiceQueueEvents[_0xa317('0x5')](_0xafca13,_0x1b96e6);_0x597c81(null);};}for(var e in events){if(events[_0xa317('0x6')](e)){var event=events[e];VoiceQueue[_0xa317('0x7')](e,emitEvent(event));}}module[_0xa317('0x8')]=VoiceQueueEvents;
\ No newline at end of file
index f41c645..8f1a9c0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4fc2=['../../config/logger','api','bluebird','request-promise','path','../../config/environment','./voiceQueue.attributes','VoiceQueue','voice_queues','lodash','util'];(function(_0x3c04ef,_0x9d110c){var _0x6a3a69=function(_0x333514){while(--_0x333514){_0x3c04ef['push'](_0x3c04ef['shift']());}};_0x6a3a69(++_0x9d110c);}(_0x4fc2,0x111));var _0x24fc=function(_0x3222ad,_0x2df6b3){_0x3222ad=_0x3222ad-0x0;var _0x69314b=_0x4fc2[_0x3222ad];return _0x69314b;};'use strict';var _=require(_0x24fc('0x0'));var util=require(_0x24fc('0x1'));var logger=require(_0x24fc('0x2'))(_0x24fc('0x3'));var moment=require('moment');var BPromise=require(_0x24fc('0x4'));var rp=require(_0x24fc('0x5'));var fs=require('fs');var path=require(_0x24fc('0x6'));var rimraf=require('rimraf');var config=require(_0x24fc('0x7'));var attributes=require(_0x24fc('0x8'));module['exports']=function(_0x26fcc6,_0x12d602){return _0x26fcc6['define'](_0x24fc('0x9'),attributes,{'tableName':_0x24fc('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa9e0=['../../config/environment','./voiceQueue.attributes','exports','define','VoiceQueue','lodash','util','../../config/logger','bluebird','path','rimraf'];(function(_0x457815,_0x2ce649){var _0x35ef3c=function(_0x2a39b6){while(--_0x2a39b6){_0x457815['push'](_0x457815['shift']());}};_0x35ef3c(++_0x2ce649);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0xa9e0[_0x3947c9];return _0x2e7871;};'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':'voice_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c4388f8..53423ba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-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(_0x19e15e,_0x49a659){var _0x3129f0=function(_0xea529){while(--_0xea529){_0x19e15e['push'](_0x19e15e['shift']());}};_0x3129f0(++_0x49a659);}(_0x9957,0x93));var _0x7995=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0x9957[_0x1facfa];return _0x9ec701;};'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
+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(_0x31d95d,_0x12a1a3){var _0xcf2ca4=function(_0x257341){while(--_0x257341){_0x31d95d['push'](_0x31d95d['shift']());}};_0xcf2ca4(++_0x12a1a3);}(_0x9957,0x93));var _0x7995=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0x9957[_0x1facfa];return _0x9ec701;};'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 c3193e0..f96ddc6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd35e=['register','voiceQueue:'];(function(_0x3b150c,_0x2f93f8){var _0x5cd414=function(_0x26305e){while(--_0x26305e){_0x3b150c['push'](_0x3b150c['shift']());}};_0x5cd414(++_0x2f93f8);}(_0xd35e,0x1e2));var _0xed35=function(_0x29b564,_0x2d95bd){_0x29b564=_0x29b564-0x0;var _0xae0676=_0xd35e[_0x29b564];return _0xae0676;};'use strict';var VoiceQueueEvents=require('./voiceQueue.events');var events=['save','remove','update'];function createListener(_0x385919,_0x45c668){return function(_0xb6d279){_0x45c668['emit'](_0x385919,_0xb6d279);};}function removeListener(_0x5d82ee,_0x2b98bc){return function(){VoiceQueueEvents['removeListener'](_0x5d82ee,_0x2b98bc);};}exports[_0xed35('0x0')]=function(_0x5857c4){for(var _0x4d8e4e=0x0,_0x595d5b=events['length'];_0x4d8e4e<_0x595d5b;_0x4d8e4e++){var _0x483cf2=events[_0x4d8e4e];var _0x4da3b1=createListener(_0xed35('0x1')+_0x483cf2,_0x5857c4);VoiceQueueEvents['on'](_0x483cf2,_0x4da3b1);}};
\ No newline at end of file
+var _0x3516=['register','./voiceQueue.events','save','update','emit','removeListener'];(function(_0x339a29,_0x47b904){var _0x193dd7=function(_0x56be5f){while(--_0x56be5f){_0x339a29['push'](_0x339a29['shift']());}};_0x193dd7(++_0x47b904);}(_0x3516,0x1cf));var _0x6351=function(_0xb3a571,_0x1be892){_0xb3a571=_0xb3a571-0x0;var _0x5500eb=_0x3516[_0xb3a571];return _0x5500eb;};'use strict';var VoiceQueueEvents=require(_0x6351('0x0'));var events=[_0x6351('0x1'),'remove',_0x6351('0x2')];function createListener(_0xc25fc7,_0xe93c87){return function(_0x14ba6a){_0xe93c87[_0x6351('0x3')](_0xc25fc7,_0x14ba6a);};}function removeListener(_0x393c20,_0x18bf5e){return function(){VoiceQueueEvents[_0x6351('0x4')](_0x393c20,_0x18bf5e);};}exports[_0x6351('0x5')]=function(_0x5e50d2){for(var _0x3e4908=0x0,_0x1101fa=events['length'];_0x3e4908<_0x1101fa;_0x3e4908++){var _0x17205a=events[_0x3e4908];var _0x2a7065=createListener('voiceQueue:'+_0x17205a,_0x5e50d2);VoiceQueueEvents['on'](_0x17205a,_0x2a7065);}};
\ No newline at end of file
index c62fecc..7171182 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8597=['show','post','create','put','update','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','/index','getVoiceQueuesReport','/:id'];(function(_0x182923,_0x46248a){var _0x180c3c=function(_0x52cf48){while(--_0x52cf48){_0x182923['push'](_0x182923['shift']());}};_0x180c3c(++_0x46248a);}(_0x8597,0x1d5));var _0x7859=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x8597[_0x4cf98e];return _0x1623ac;};'use strict';var multer=require(_0x7859('0x0'));var util=require(_0x7859('0x1'));var path=require(_0x7859('0x2'));var timeout=require('connect-timeout');var express=require(_0x7859('0x3'));var router=express[_0x7859('0x4')]();var auth=require(_0x7859('0x5'));var interaction=require(_0x7859('0x6'));var config=require(_0x7859('0x7'));var controller=require('./voiceQueueReport.controller');router[_0x7859('0x8')]('/',auth[_0x7859('0x9')](),controller[_0x7859('0xa')]);router['get'](_0x7859('0xb'),auth[_0x7859('0x9')](),controller['describe']);router[_0x7859('0x8')](_0x7859('0xc'),auth[_0x7859('0x9')](),controller[_0x7859('0xd')]);router[_0x7859('0x8')](_0x7859('0xe'),auth[_0x7859('0x9')](),controller[_0x7859('0xf')]);router[_0x7859('0x10')]('/',auth[_0x7859('0x9')](),controller[_0x7859('0x11')]);router[_0x7859('0x12')](_0x7859('0xe'),auth[_0x7859('0x9')](),controller[_0x7859('0x13')]);router['delete']('/:id',auth[_0x7859('0x9')](),controller[_0x7859('0x14')]);module[_0x7859('0x15')]=router;
\ No newline at end of file
+var _0xb88a=['connect-timeout','Router','../../components/auth/service','../../components/interaction/service','get','isAuthenticated','index','/describe','describe','/index','getVoiceQueuesReport','show','post','create','put','/:id','update','delete','destroy','multer'];(function(_0x48b738,_0x204ad0){var _0x5e855e=function(_0x7fa7c8){while(--_0x7fa7c8){_0x48b738['push'](_0x48b738['shift']());}};_0x5e855e(++_0x204ad0);}(_0xb88a,0x1df));var _0xab88=function(_0x4628bf,_0xf4f69d){_0x4628bf=_0x4628bf-0x0;var _0x4aaa6c=_0xb88a[_0x4628bf];return _0x4aaa6c;};'use strict';var multer=require(_0xab88('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xab88('0x1'));var express=require('express');var router=express[_0xab88('0x2')]();var auth=require(_0xab88('0x3'));var interaction=require(_0xab88('0x4'));var config=require('../../config/environment');var controller=require('./voiceQueueReport.controller');router[_0xab88('0x5')]('/',auth[_0xab88('0x6')](),controller[_0xab88('0x7')]);router[_0xab88('0x5')](_0xab88('0x8'),auth[_0xab88('0x6')](),controller[_0xab88('0x9')]);router[_0xab88('0x5')](_0xab88('0xa'),auth['isAuthenticated'](),controller[_0xab88('0xb')]);router[_0xab88('0x5')]('/:id',auth[_0xab88('0x6')](),controller[_0xab88('0xc')]);router[_0xab88('0xd')]('/',auth[_0xab88('0x6')](),controller[_0xab88('0xe')]);router[_0xab88('0xf')](_0xab88('0x10'),auth['isAuthenticated'](),controller[_0xab88('0x11')]);router[_0xab88('0x12')]('/:id',auth[_0xab88('0x6')](),controller[_0xab88('0x13')]);module['exports']=router;
\ No newline at end of file
index 6c5c61a..6062d8a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd2d8=['holdtime','INTEGER','BOOLEAN','COMPLETEDBYCALLER,\x20COMPLETEDBYAGENT,\x20FORWARDTRANFER,\x20BLINDTRANSFER,\x20ATTENDEDTRANSFER,\x20EXITWITHKEY,\x20TIMEOUT','FORWARD,\x20BLIND,\x20ATTENDED','sequelize','moment','STRING','DATE','getDataValue','queuecallerjoinAt','YYYY-MM-DD\x20HH:mm:ss','diff','seconds','setDataValue'];(function(_0x2f1d17,_0x5076aa){var _0x4b1270=function(_0x55125c){while(--_0x55125c){_0x2f1d17['push'](_0x2f1d17['shift']());}};_0x4b1270(++_0x5076aa);}(_0xd2d8,0x18b));var _0x8d2d=function(_0x4452dc,_0x479149){_0x4452dc=_0x4452dc-0x0;var _0x52b892=_0xd2d8[_0x4452dc];return _0x52b892;};'use strict';var Sequelize=require(_0x8d2d('0x0'));var moment=require(_0x8d2d('0x1'));module['exports']={'type':{'type':Sequelize[_0x8d2d('0x2')]},'uniqueid':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0x8d2d('0x2')]},'calleridname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0x8d2d('0x2')]},'queuecallerjoinAt':{'type':Sequelize[_0x8d2d('0x3')]},'queuecallerleaveAt':{'type':Sequelize[_0x8d2d('0x3')],'set':function(_0x995466){var _0x504999=moment(_0x995466);var _0x53135c=moment(this[_0x8d2d('0x4')](_0x8d2d('0x5')))['format'](_0x8d2d('0x6'));var _0x5834c1=_0x504999[_0x8d2d('0x7')](_0x53135c,_0x8d2d('0x8'));this[_0x8d2d('0x9')]('queuecallerleaveAt',_0x995466);this[_0x8d2d('0x9')](_0x8d2d('0xa'),_0x5834c1||null);}},'position':{'type':Sequelize[_0x8d2d('0xb')]},'count':{'type':Sequelize[_0x8d2d('0xb')]},'queuecallerabandon':{'type':Sequelize[_0x8d2d('0xc')],'defaultValue':![]},'queuecallerabandonAt':{'type':Sequelize[_0x8d2d('0x3')]},'queuecallercomplete':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queuecallercompleteAt':{'type':Sequelize[_0x8d2d('0x3')]},'queuecallerexit':{'type':Sequelize[_0x8d2d('0xc')],'defaultValue':![]},'queuecallerexitAt':{'type':Sequelize['DATE']},'queuecallerexitreason':{'type':Sequelize[_0x8d2d('0x2')],'comment':_0x8d2d('0xd')},'originalposition':{'type':Sequelize[_0x8d2d('0xb')]},'channel':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize['STRING']},'connectedlinename':{'type':Sequelize[_0x8d2d('0x2')]},'accountcode':{'type':Sequelize[_0x8d2d('0x2')]},'context':{'type':Sequelize[_0x8d2d('0x2')]},'exten':{'type':Sequelize[_0x8d2d('0x2')]},'priority':{'type':Sequelize[_0x8d2d('0x2')]},'holdtime':{'type':Sequelize[_0x8d2d('0xb')]},'mohtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'assigned':{'type':Sequelize[_0x8d2d('0xc')],'defaultValue':![]},'lastAssignedTo':{'type':Sequelize[_0x8d2d('0x2')]},'transfer':{'type':Sequelize[_0x8d2d('0xc')],'defaultValue':![]},'transfertype':{'type':Sequelize['STRING'],'comment':_0x8d2d('0xe')},'transferexten':{'type':Sequelize[_0x8d2d('0x2')]},'transferuniqueid':{'type':Sequelize[_0x8d2d('0x2')]},'disposition':{'type':Sequelize[_0x8d2d('0x2')]},'queuecallerenterreason':{'type':Sequelize[_0x8d2d('0xb')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x435a=['moment','exports','STRING','DATE','getDataValue','queuecallerjoinAt','format','diff','seconds','setDataValue','queuecallerleaveAt','INTEGER','BOOLEAN','COMPLETEDBYCALLER,\x20COMPLETEDBYAGENT,\x20FORWARDTRANFER,\x20BLINDTRANSFER,\x20ATTENDEDTRANSFER,\x20EXITWITHKEY,\x20TIMEOUT','FORWARD,\x20BLIND,\x20ATTENDED','sequelize'];(function(_0x1f1a97,_0xadfc15){var _0x29fc6a=function(_0x38c180){while(--_0x38c180){_0x1f1a97['push'](_0x1f1a97['shift']());}};_0x29fc6a(++_0xadfc15);}(_0x435a,0x6f));var _0xa435=function(_0xd36ecf,_0xbc090b){_0xd36ecf=_0xd36ecf-0x0;var _0x15847a=_0x435a[_0xd36ecf];return _0x15847a;};'use strict';var Sequelize=require(_0xa435('0x0'));var moment=require(_0xa435('0x1'));module[_0xa435('0x2')]={'type':{'type':Sequelize[_0xa435('0x3')]},'uniqueid':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0xa435('0x3')]},'calleridname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize['STRING']},'queuecallerjoinAt':{'type':Sequelize['DATE']},'queuecallerleaveAt':{'type':Sequelize[_0xa435('0x4')],'set':function(_0x5aa8c3){var _0x10c59c=moment(_0x5aa8c3);var _0x4d6121=moment(this[_0xa435('0x5')](_0xa435('0x6')))[_0xa435('0x7')]('YYYY-MM-DD\x20HH:mm:ss');var _0x454a6d=_0x10c59c[_0xa435('0x8')](_0x4d6121,_0xa435('0x9'));this[_0xa435('0xa')](_0xa435('0xb'),_0x5aa8c3);this['setDataValue']('holdtime',_0x454a6d||null);}},'position':{'type':Sequelize['INTEGER']},'count':{'type':Sequelize[_0xa435('0xc')]},'queuecallerabandon':{'type':Sequelize[_0xa435('0xd')],'defaultValue':![]},'queuecallerabandonAt':{'type':Sequelize[_0xa435('0x4')]},'queuecallercomplete':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queuecallercompleteAt':{'type':Sequelize[_0xa435('0x4')]},'queuecallerexit':{'type':Sequelize[_0xa435('0xd')],'defaultValue':![]},'queuecallerexitAt':{'type':Sequelize[_0xa435('0x4')]},'queuecallerexitreason':{'type':Sequelize[_0xa435('0x3')],'comment':_0xa435('0xe')},'originalposition':{'type':Sequelize['INTEGER']},'channel':{'type':Sequelize[_0xa435('0x3')]},'connectedlinenum':{'type':Sequelize[_0xa435('0x3')]},'connectedlinename':{'type':Sequelize[_0xa435('0x3')]},'accountcode':{'type':Sequelize[_0xa435('0x3')]},'context':{'type':Sequelize[_0xa435('0x3')]},'exten':{'type':Sequelize[_0xa435('0x3')]},'priority':{'type':Sequelize[_0xa435('0x3')]},'holdtime':{'type':Sequelize[_0xa435('0xc')]},'mohtime':{'type':Sequelize[_0xa435('0xc')],'defaultValue':0x0},'assigned':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'lastAssignedTo':{'type':Sequelize[_0xa435('0x3')]},'transfer':{'type':Sequelize[_0xa435('0xd')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0xa435('0x3')],'comment':_0xa435('0xf')},'transferexten':{'type':Sequelize[_0xa435('0x3')]},'transferuniqueid':{'type':Sequelize[_0xa435('0x3')]},'disposition':{'type':Sequelize[_0xa435('0x3')]},'queuecallerenterreason':{'type':Sequelize[_0xa435('0xc')],'defaultValue':0x0}};
\ No newline at end of file
index e382f8d..d03c37b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d80=['name','VoiceQueueReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','merge','map','VIRTUAL','filter','findAll','include','options','find','catch','create','body','update','params','describe','getVoiceQueuesReport','order','rows','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','squel','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults','localhost','socket.io-emitter','register','sendStatus','status','json','count','offset','limit','apply','save','then','destroy','error'];(function(_0x1f2507,_0x5395d6){var _0x307692=function(_0x320bd1){while(--_0x320bd1){_0x1f2507['push'](_0x1f2507['shift']());}};_0x307692(++_0x5395d6);}(_0x7d80,0x17a));var _0x07d8=function(_0x59b66a,_0x20ed99){_0x59b66a=_0x59b66a-0x0;var _0x619415=_0x7d80[_0x59b66a];return _0x619415;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x07d8('0x0'));var rimraf=require(_0x07d8('0x1'));var zipdir=require(_0x07d8('0x2'));var jsonpatch=require(_0x07d8('0x3'));var rp=require(_0x07d8('0x4'));var moment=require(_0x07d8('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x07d8('0x6'));var util=require('util');var path=require(_0x07d8('0x7'));var sox=require(_0x07d8('0x8'));var csv=require(_0x07d8('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x07d8('0xa'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x07d8('0x9'));var querystring=require(_0x07d8('0xb'));var Papa=require('papaparse');var Redis=require(_0x07d8('0xc'));var authService=require(_0x07d8('0xd'));var qs=require(_0x07d8('0xe'));var hardwareService=require(_0x07d8('0xf'));var logger=require(_0x07d8('0x10'))(_0x07d8('0x11'));var utils=require(_0x07d8('0x12'));var config=require('../../config/environment');var db=require(_0x07d8('0x13'))['db'];config[_0x07d8('0x14')]=_[_0x07d8('0x15')](config[_0x07d8('0x14')],{'host':_0x07d8('0x16'),'port':0x18eb});var socket=require(_0x07d8('0x17'))(new Redis(config[_0x07d8('0x14')]));require('./voiceQueueReport.socket')[_0x07d8('0x18')](socket);function respondWithStatusCode(_0x6d311c,_0x17d24e){_0x17d24e=_0x17d24e||0xcc;return function(_0x584765){if(_0x584765){return _0x6d311c[_0x07d8('0x19')](_0x17d24e);}return _0x6d311c[_0x07d8('0x1a')](_0x17d24e)['end']();};}function respondWithResult(_0x2254c9,_0x1bd568){_0x1bd568=_0x1bd568||0xc8;return function(_0x3584aa){if(_0x3584aa){return _0x2254c9[_0x07d8('0x1a')](_0x1bd568)[_0x07d8('0x1b')](_0x3584aa);}};}function respondWithFilteredResult(_0x4ea297,_0x2f7a1f){return function(_0x73250c){if(_0x73250c){var _0x5775f4=_0x73250c[_0x07d8('0x1c')],_0x7fa5f3=_0x2f7a1f[_0x07d8('0x1d')],_0x12b890=_0x2f7a1f[_0x07d8('0x1d')]+_0x2f7a1f[_0x07d8('0x1e')],_0x27eb23;if(_0x12b890>=_0x5775f4){_0x12b890=_0x5775f4;_0x27eb23=0xc8;}else{_0x27eb23=0xce;}_0x4ea297[_0x07d8('0x1a')](_0x27eb23);return _0x4ea297['set']('Content-Range',_0x7fa5f3+'-'+_0x12b890+'/'+_0x5775f4)[_0x07d8('0x1b')](_0x73250c);}return null;};}function patchUpdates(_0x4fcc4d){return function(_0x5afa12){try{jsonpatch[_0x07d8('0x1f')](_0x5afa12,_0x4fcc4d,!![]);}catch(_0x3f15a9){return BPromise['reject'](_0x3f15a9);}return _0x5afa12[_0x07d8('0x20')]();};}function saveUpdates(_0x957b5,_0x40a095){return function(_0x33dd51){if(_0x33dd51){return _0x33dd51['update'](_0x957b5)[_0x07d8('0x21')](function(_0x14d8d7){return _0x14d8d7;});}return null;};}function removeEntity(_0x56282d,_0x1dbe70){return function(_0x208bad){if(_0x208bad){return _0x208bad[_0x07d8('0x22')]()[_0x07d8('0x21')](function(){_0x56282d['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x1e87c5,_0x4fb566){return function(_0x518242){if(!_0x518242){_0x1e87c5[_0x07d8('0x19')](0x194);}return _0x518242;};}function handleError(_0x102887,_0x27c2a9){_0x27c2a9=_0x27c2a9||0x1f4;return function(_0x10a4c9){logger[_0x07d8('0x23')](_0x10a4c9['stack']);if(_0x10a4c9[_0x07d8('0x24')]){delete _0x10a4c9[_0x07d8('0x24')];}_0x102887[_0x07d8('0x1a')](_0x27c2a9)['send'](_0x10a4c9);};}exports['index']=function(_0x262308,_0x38fd1e){var _0x601bca={},_0x175ece={},_0x1e8711={'count':0x0,'rows':[]};var _0x4c1da2=db[_0x07d8('0x25')][_0x07d8('0x26')];_0x175ece[_0x07d8('0x27')]=_[_0x07d8('0x28')](_0x4c1da2);_0x175ece[_0x07d8('0x29')]=_[_0x07d8('0x28')](_0x262308[_0x07d8('0x29')]);_0x175ece[_0x07d8('0x2a')]=_[_0x07d8('0x2b')](_0x175ece[_0x07d8('0x27')],_0x175ece['query']);_0x601bca[_0x07d8('0x2c')]=_[_0x07d8('0x2b')](_0x175ece[_0x07d8('0x27')],qs[_0x07d8('0x2d')](_0x262308['query']['fields']));_0x601bca[_0x07d8('0x2c')]=_0x601bca[_0x07d8('0x2c')][_0x07d8('0x2e')]?_0x601bca[_0x07d8('0x2c')]:_0x175ece['model'];if(!_0x262308[_0x07d8('0x29')][_0x07d8('0x2f')](_0x07d8('0x30'))){_0x601bca[_0x07d8('0x1e')]=qs[_0x07d8('0x1e')](_0x262308[_0x07d8('0x29')][_0x07d8('0x1e')]);_0x601bca[_0x07d8('0x1d')]=qs[_0x07d8('0x1d')](_0x262308[_0x07d8('0x29')][_0x07d8('0x1d')]);}_0x601bca['order']=qs[_0x07d8('0x31')](_0x262308[_0x07d8('0x29')][_0x07d8('0x31')]);_0x601bca[_0x07d8('0x32')]=qs[_0x07d8('0x2a')](_[_0x07d8('0x33')](_0x262308[_0x07d8('0x29')],_0x175ece[_0x07d8('0x2a')]));if(_0x262308[_0x07d8('0x29')]['filter']){_0x601bca[_0x07d8('0x32')]=_[_0x07d8('0x34')](_0x601bca[_0x07d8('0x32')],{'$or':_[_0x07d8('0x35')](_0x4c1da2,function(_0x99bfe){if(_0x99bfe['type']['key']!==_0x07d8('0x36')){var _0x360b0b={};_0x360b0b[_0x99bfe['field']]={'$like':'%'+_0x262308[_0x07d8('0x29')][_0x07d8('0x37')]+'%'};return _0x360b0b;}})});}_0x601bca=_['merge']({},_0x601bca,_0x262308['options']);var _0x47b7e0={'where':_0x601bca[_0x07d8('0x32')]};return db[_0x07d8('0x25')]['count'](_0x47b7e0)[_0x07d8('0x21')](function(_0x152632){_0x1e8711[_0x07d8('0x1c')]=_0x152632;if(_0x262308[_0x07d8('0x29')]['includeAll']){_0x601bca['include']=[{'all':!![]}];}return db['VoiceQueueReport'][_0x07d8('0x38')](_0x601bca);})[_0x07d8('0x21')](function(_0x3aaa90){_0x1e8711['rows']=_0x3aaa90;return _0x1e8711;})[_0x07d8('0x21')](respondWithFilteredResult(_0x38fd1e,_0x601bca))['catch'](handleError(_0x38fd1e,null));};exports['show']=function(_0x311349,_0xfd53d8){var _0x593a40={'raw':![],'where':{'id':_0x311349['params']['id']}},_0x57e153={};_0x57e153['model']=_[_0x07d8('0x28')](db[_0x07d8('0x25')][_0x07d8('0x26')]);_0x57e153[_0x07d8('0x29')]=_[_0x07d8('0x28')](_0x311349[_0x07d8('0x29')]);_0x57e153[_0x07d8('0x2a')]=_[_0x07d8('0x2b')](_0x57e153[_0x07d8('0x27')],_0x57e153[_0x07d8('0x29')]);_0x593a40['attributes']=_[_0x07d8('0x2b')](_0x57e153['model'],qs[_0x07d8('0x2d')](_0x311349['query']['fields']));_0x593a40['attributes']=_0x593a40[_0x07d8('0x2c')][_0x07d8('0x2e')]?_0x593a40[_0x07d8('0x2c')]:_0x57e153['model'];if(_0x311349[_0x07d8('0x29')]['includeAll']){_0x593a40[_0x07d8('0x39')]=[{'all':!![]}];}_0x593a40=_['merge']({},_0x593a40,_0x311349[_0x07d8('0x3a')]);return db['VoiceQueueReport'][_0x07d8('0x3b')](_0x593a40)[_0x07d8('0x21')](handleEntityNotFound(_0xfd53d8,null))['then'](respondWithResult(_0xfd53d8,null))[_0x07d8('0x3c')](handleError(_0xfd53d8,null));};exports[_0x07d8('0x3d')]=function(_0x4a6811,_0x201ba8){return db['VoiceQueueReport']['create'](_0x4a6811[_0x07d8('0x3e')],{})['then'](respondWithResult(_0x201ba8,0xc9))[_0x07d8('0x3c')](handleError(_0x201ba8,null));};exports[_0x07d8('0x3f')]=function(_0x206c41,_0x146d03){if(_0x206c41['body']['id']){delete _0x206c41[_0x07d8('0x3e')]['id'];}return db[_0x07d8('0x25')][_0x07d8('0x3b')]({'where':{'id':_0x206c41[_0x07d8('0x40')]['id']}})[_0x07d8('0x21')](handleEntityNotFound(_0x146d03,null))[_0x07d8('0x21')](saveUpdates(_0x206c41[_0x07d8('0x3e')],null))[_0x07d8('0x21')](respondWithResult(_0x146d03,null))[_0x07d8('0x3c')](handleError(_0x146d03,null));};exports['destroy']=function(_0x2780be,_0x43c8f2){return db[_0x07d8('0x25')][_0x07d8('0x3b')]({'where':{'id':_0x2780be[_0x07d8('0x40')]['id']}})[_0x07d8('0x21')](handleEntityNotFound(_0x43c8f2,null))[_0x07d8('0x21')](removeEntity(_0x43c8f2,null))[_0x07d8('0x3c')](handleError(_0x43c8f2,null));};exports[_0x07d8('0x41')]=function(_0x4d0b0c,_0x2f1e97){return db[_0x07d8('0x25')][_0x07d8('0x41')]()[_0x07d8('0x21')](respondWithResult(_0x2f1e97,null))[_0x07d8('0x3c')](handleError(_0x2f1e97,null));};exports[_0x07d8('0x42')]=function(_0x1823b8,_0xd2b67a){var _0x3fcd74={},_0x39ad00={},_0x2c787f={'count':0x0,'rows':[]};_0x39ad00[_0x07d8('0x27')]=_['keys'](db[_0x07d8('0x25')][_0x07d8('0x26')]);_0x39ad00[_0x07d8('0x29')]=_[_0x07d8('0x28')](_0x1823b8[_0x07d8('0x29')]);_0x39ad00['filters']=_[_0x07d8('0x2b')](_0x39ad00['model'],_0x39ad00[_0x07d8('0x29')]);_0x3fcd74[_0x07d8('0x2c')]=_['intersection'](_0x39ad00[_0x07d8('0x27')],qs[_0x07d8('0x2d')](_0x1823b8[_0x07d8('0x29')][_0x07d8('0x2d')]));_0x3fcd74[_0x07d8('0x2c')]=_0x3fcd74['attributes'][_0x07d8('0x2e')]?_0x3fcd74['attributes']:_0x39ad00['model'];if(!_0x1823b8[_0x07d8('0x29')]['hasOwnProperty'](_0x07d8('0x30'))){_0x3fcd74[_0x07d8('0x1e')]=qs[_0x07d8('0x1e')](_0x1823b8[_0x07d8('0x29')]['limit']);_0x3fcd74[_0x07d8('0x1d')]=qs[_0x07d8('0x1d')](_0x1823b8[_0x07d8('0x29')][_0x07d8('0x1d')]);}_0x3fcd74[_0x07d8('0x43')]=qs[_0x07d8('0x31')](_0x1823b8[_0x07d8('0x29')]['sort']);_0x3fcd74[_0x07d8('0x32')]=qs[_0x07d8('0x2a')](_[_0x07d8('0x33')](_0x1823b8[_0x07d8('0x29')],_0x39ad00[_0x07d8('0x2a')]));if(_0x1823b8['query'][_0x07d8('0x37')]){_0x3fcd74['where']=_['merge'](_0x3fcd74[_0x07d8('0x32')],{'$or':_[_0x07d8('0x35')](_0x3fcd74[_0x07d8('0x2c')],function(_0x562360){var _0x12a3f7={};_0x12a3f7[_0x562360]={'$like':'%'+_0x1823b8[_0x07d8('0x29')][_0x07d8('0x37')]+'%'};return _0x12a3f7;})});}_0x3fcd74=_[_0x07d8('0x34')]({},_0x3fcd74,_0x1823b8[_0x07d8('0x3a')]);var _0x2f6f0d={'where':_0x3fcd74[_0x07d8('0x32')]};return db[_0x07d8('0x25')][_0x07d8('0x1c')](_0x2f6f0d)[_0x07d8('0x21')](function(_0x2f94cc){_0x2c787f['count']=_0x2f94cc;if(_0x1823b8[_0x07d8('0x29')]['includeAll']){_0x3fcd74[_0x07d8('0x39')]=[{'all':!![]}];}return db[_0x07d8('0x25')][_0x07d8('0x38')](_0x3fcd74);})['then'](function(_0x4fb25a){_0x2c787f[_0x07d8('0x44')]=_0x4fb25a;return _0x2c787f;})[_0x07d8('0x21')](respondWithFilteredResult(_0xd2b67a,_0x3fcd74,_0x07d8('0x42')))[_0x07d8('0x3c')](handleError(_0xd2b67a,null,'getVoiceQueuesReport'));};
\ No newline at end of file
+var _0x57f8=['zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./voiceQueueReport.socket','register','status','json','count','offset','limit','Content-Range','reject','save','update','destroy','then','end','sendStatus','error','stack','name','send','index','VoiceQueueReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','order','sort','where','merge','map','type','key','field','filter','options','include','findAll','rows','catch','params','length','create','body','find','describe','getVoiceQueuesReport','pick','includeAll','eml-format','rimraf'];(function(_0x25f2f4,_0x3837ee){var _0xc9cf75=function(_0x1e2103){while(--_0x1e2103){_0x25f2f4['push'](_0x25f2f4['shift']());}};_0xc9cf75(++_0x3837ee);}(_0x57f8,0x198));var _0x857f=function(_0x555479,_0x3aa2b4){_0x555479=_0x555479-0x0;var _0x560c8e=_0x57f8[_0x555479];return _0x560c8e;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x857f('0x0'));var rimraf=require(_0x857f('0x1'));var zipdir=require(_0x857f('0x2'));var jsonpatch=require(_0x857f('0x3'));var rp=require(_0x857f('0x4'));var moment=require(_0x857f('0x5'));var BPromise=require(_0x857f('0x6'));var Mustache=require(_0x857f('0x7'));var util=require(_0x857f('0x8'));var path=require(_0x857f('0x9'));var sox=require(_0x857f('0xa'));var csv=require(_0x857f('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x857f('0xc'));var squel=require(_0x857f('0xd'));var crypto=require(_0x857f('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x857f('0xf'));var toCsv=require(_0x857f('0xb'));var querystring=require(_0x857f('0x10'));var Papa=require('papaparse');var Redis=require(_0x857f('0x11'));var authService=require(_0x857f('0x12'));var qs=require(_0x857f('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x857f('0x14'))(_0x857f('0x15'));var utils=require(_0x857f('0x16'));var config=require(_0x857f('0x17'));var db=require(_0x857f('0x18'))['db'];config[_0x857f('0x19')]=_[_0x857f('0x1a')](config['redis'],{'host':_0x857f('0x1b'),'port':0x18eb});var socket=require(_0x857f('0x1c'))(new Redis(config[_0x857f('0x19')]));require(_0x857f('0x1d'))[_0x857f('0x1e')](socket);function respondWithStatusCode(_0x4a25ec,_0x4bc590){_0x4bc590=_0x4bc590||0xcc;return function(_0x3b09d9){if(_0x3b09d9){return _0x4a25ec['sendStatus'](_0x4bc590);}return _0x4a25ec[_0x857f('0x1f')](_0x4bc590)['end']();};}function respondWithResult(_0x1d47bf,_0x134a4f){_0x134a4f=_0x134a4f||0xc8;return function(_0x5c3a69){if(_0x5c3a69){return _0x1d47bf[_0x857f('0x1f')](_0x134a4f)[_0x857f('0x20')](_0x5c3a69);}};}function respondWithFilteredResult(_0xdf14fe,_0x10b547){return function(_0x279e74){if(_0x279e74){var _0x38a3c2=_0x279e74[_0x857f('0x21')],_0x1a9ef8=_0x10b547[_0x857f('0x22')],_0x429e23=_0x10b547['offset']+_0x10b547[_0x857f('0x23')],_0x1014ca;if(_0x429e23>=_0x38a3c2){_0x429e23=_0x38a3c2;_0x1014ca=0xc8;}else{_0x1014ca=0xce;}_0xdf14fe[_0x857f('0x1f')](_0x1014ca);return _0xdf14fe['set'](_0x857f('0x24'),_0x1a9ef8+'-'+_0x429e23+'/'+_0x38a3c2)[_0x857f('0x20')](_0x279e74);}return null;};}function patchUpdates(_0x377587){return function(_0x484035){try{jsonpatch['apply'](_0x484035,_0x377587,!![]);}catch(_0x12ee77){return BPromise[_0x857f('0x25')](_0x12ee77);}return _0x484035[_0x857f('0x26')]();};}function saveUpdates(_0x4fa031,_0x118237){return function(_0x17a98e){if(_0x17a98e){return _0x17a98e[_0x857f('0x27')](_0x4fa031)['then'](function(_0x1961ea){return _0x1961ea;});}return null;};}function removeEntity(_0x14a8ce,_0x50bfb7){return function(_0x3bc543){if(_0x3bc543){return _0x3bc543[_0x857f('0x28')]()[_0x857f('0x29')](function(){_0x14a8ce[_0x857f('0x1f')](0xcc)[_0x857f('0x2a')]();});}};}function handleEntityNotFound(_0x3b23a7,_0x233a68){return function(_0x2a89ba){if(!_0x2a89ba){_0x3b23a7[_0x857f('0x2b')](0x194);}return _0x2a89ba;};}function handleError(_0xcd1ee9,_0x72f0aa){_0x72f0aa=_0x72f0aa||0x1f4;return function(_0x4782ab){logger[_0x857f('0x2c')](_0x4782ab[_0x857f('0x2d')]);if(_0x4782ab['name']){delete _0x4782ab[_0x857f('0x2e')];}_0xcd1ee9[_0x857f('0x1f')](_0x72f0aa)[_0x857f('0x2f')](_0x4782ab);};}exports[_0x857f('0x30')]=function(_0x58c2de,_0x40c306){var _0x57ceaa={},_0x1b405a={},_0x234048={'count':0x0,'rows':[]};var _0x45a37f=db[_0x857f('0x31')][_0x857f('0x32')];_0x1b405a[_0x857f('0x33')]=_[_0x857f('0x34')](_0x45a37f);_0x1b405a[_0x857f('0x35')]=_[_0x857f('0x34')](_0x58c2de[_0x857f('0x35')]);_0x1b405a[_0x857f('0x36')]=_[_0x857f('0x37')](_0x1b405a[_0x857f('0x33')],_0x1b405a['query']);_0x57ceaa[_0x857f('0x38')]=_[_0x857f('0x37')](_0x1b405a['model'],qs[_0x857f('0x39')](_0x58c2de[_0x857f('0x35')]['fields']));_0x57ceaa[_0x857f('0x38')]=_0x57ceaa[_0x857f('0x38')]['length']?_0x57ceaa[_0x857f('0x38')]:_0x1b405a[_0x857f('0x33')];if(!_0x58c2de[_0x857f('0x35')][_0x857f('0x3a')]('nolimit')){_0x57ceaa['limit']=qs[_0x857f('0x23')](_0x58c2de[_0x857f('0x35')]['limit']);_0x57ceaa[_0x857f('0x22')]=qs['offset'](_0x58c2de[_0x857f('0x35')][_0x857f('0x22')]);}_0x57ceaa[_0x857f('0x3b')]=qs[_0x857f('0x3c')](_0x58c2de[_0x857f('0x35')]['sort']);_0x57ceaa['where']=qs[_0x857f('0x36')](_['pick'](_0x58c2de[_0x857f('0x35')],_0x1b405a[_0x857f('0x36')]));if(_0x58c2de[_0x857f('0x35')]['filter']){_0x57ceaa[_0x857f('0x3d')]=_[_0x857f('0x3e')](_0x57ceaa[_0x857f('0x3d')],{'$or':_[_0x857f('0x3f')](_0x45a37f,function(_0x36e6bd){if(_0x36e6bd[_0x857f('0x40')][_0x857f('0x41')]!=='VIRTUAL'){var _0x458c67={};_0x458c67[_0x36e6bd[_0x857f('0x42')]]={'$like':'%'+_0x58c2de[_0x857f('0x35')][_0x857f('0x43')]+'%'};return _0x458c67;}})});}_0x57ceaa=_[_0x857f('0x3e')]({},_0x57ceaa,_0x58c2de[_0x857f('0x44')]);var _0x447f28={'where':_0x57ceaa['where']};return db[_0x857f('0x31')][_0x857f('0x21')](_0x447f28)[_0x857f('0x29')](function(_0xc2ac41){_0x234048[_0x857f('0x21')]=_0xc2ac41;if(_0x58c2de[_0x857f('0x35')]['includeAll']){_0x57ceaa[_0x857f('0x45')]=[{'all':!![]}];}return db[_0x857f('0x31')][_0x857f('0x46')](_0x57ceaa);})[_0x857f('0x29')](function(_0x3938ee){_0x234048[_0x857f('0x47')]=_0x3938ee;return _0x234048;})[_0x857f('0x29')](respondWithFilteredResult(_0x40c306,_0x57ceaa))[_0x857f('0x48')](handleError(_0x40c306,null));};exports['show']=function(_0x40fb37,_0x223095){var _0x117b78={'raw':![],'where':{'id':_0x40fb37[_0x857f('0x49')]['id']}},_0x158373={};_0x158373[_0x857f('0x33')]=_[_0x857f('0x34')](db[_0x857f('0x31')][_0x857f('0x32')]);_0x158373[_0x857f('0x35')]=_[_0x857f('0x34')](_0x40fb37[_0x857f('0x35')]);_0x158373[_0x857f('0x36')]=_[_0x857f('0x37')](_0x158373['model'],_0x158373[_0x857f('0x35')]);_0x117b78['attributes']=_[_0x857f('0x37')](_0x158373[_0x857f('0x33')],qs[_0x857f('0x39')](_0x40fb37[_0x857f('0x35')][_0x857f('0x39')]));_0x117b78[_0x857f('0x38')]=_0x117b78[_0x857f('0x38')][_0x857f('0x4a')]?_0x117b78[_0x857f('0x38')]:_0x158373[_0x857f('0x33')];if(_0x40fb37[_0x857f('0x35')]['includeAll']){_0x117b78['include']=[{'all':!![]}];}_0x117b78=_[_0x857f('0x3e')]({},_0x117b78,_0x40fb37['options']);return db[_0x857f('0x31')]['find'](_0x117b78)[_0x857f('0x29')](handleEntityNotFound(_0x223095,null))[_0x857f('0x29')](respondWithResult(_0x223095,null))[_0x857f('0x48')](handleError(_0x223095,null));};exports[_0x857f('0x4b')]=function(_0x1cda4d,_0xfeca6f){return db[_0x857f('0x31')][_0x857f('0x4b')](_0x1cda4d['body'],{})[_0x857f('0x29')](respondWithResult(_0xfeca6f,0xc9))[_0x857f('0x48')](handleError(_0xfeca6f,null));};exports[_0x857f('0x27')]=function(_0x19c967,_0x5aa3ea){if(_0x19c967[_0x857f('0x4c')]['id']){delete _0x19c967[_0x857f('0x4c')]['id'];}return db[_0x857f('0x31')][_0x857f('0x4d')]({'where':{'id':_0x19c967[_0x857f('0x49')]['id']}})['then'](handleEntityNotFound(_0x5aa3ea,null))[_0x857f('0x29')](saveUpdates(_0x19c967[_0x857f('0x4c')],null))['then'](respondWithResult(_0x5aa3ea,null))[_0x857f('0x48')](handleError(_0x5aa3ea,null));};exports[_0x857f('0x28')]=function(_0x50eb00,_0x370a30){return db['VoiceQueueReport'][_0x857f('0x4d')]({'where':{'id':_0x50eb00[_0x857f('0x49')]['id']}})[_0x857f('0x29')](handleEntityNotFound(_0x370a30,null))[_0x857f('0x29')](removeEntity(_0x370a30,null))[_0x857f('0x48')](handleError(_0x370a30,null));};exports[_0x857f('0x4e')]=function(_0x256347,_0x2d9364){return db[_0x857f('0x31')][_0x857f('0x4e')]()['then'](respondWithResult(_0x2d9364,null))[_0x857f('0x48')](handleError(_0x2d9364,null));};exports[_0x857f('0x4f')]=function(_0x9d8273,_0x2670e6){var _0x3e24a5={},_0x9edee5={},_0x12712a={'count':0x0,'rows':[]};_0x9edee5['model']=_[_0x857f('0x34')](db[_0x857f('0x31')][_0x857f('0x32')]);_0x9edee5[_0x857f('0x35')]=_[_0x857f('0x34')](_0x9d8273[_0x857f('0x35')]);_0x9edee5['filters']=_[_0x857f('0x37')](_0x9edee5[_0x857f('0x33')],_0x9edee5[_0x857f('0x35')]);_0x3e24a5[_0x857f('0x38')]=_[_0x857f('0x37')](_0x9edee5[_0x857f('0x33')],qs[_0x857f('0x39')](_0x9d8273[_0x857f('0x35')]['fields']));_0x3e24a5['attributes']=_0x3e24a5[_0x857f('0x38')][_0x857f('0x4a')]?_0x3e24a5[_0x857f('0x38')]:_0x9edee5[_0x857f('0x33')];if(!_0x9d8273[_0x857f('0x35')][_0x857f('0x3a')]('nolimit')){_0x3e24a5[_0x857f('0x23')]=qs[_0x857f('0x23')](_0x9d8273['query'][_0x857f('0x23')]);_0x3e24a5['offset']=qs[_0x857f('0x22')](_0x9d8273[_0x857f('0x35')]['offset']);}_0x3e24a5[_0x857f('0x3b')]=qs[_0x857f('0x3c')](_0x9d8273[_0x857f('0x35')][_0x857f('0x3c')]);_0x3e24a5[_0x857f('0x3d')]=qs[_0x857f('0x36')](_[_0x857f('0x50')](_0x9d8273[_0x857f('0x35')],_0x9edee5['filters']));if(_0x9d8273[_0x857f('0x35')][_0x857f('0x43')]){_0x3e24a5[_0x857f('0x3d')]=_[_0x857f('0x3e')](_0x3e24a5[_0x857f('0x3d')],{'$or':_[_0x857f('0x3f')](_0x3e24a5[_0x857f('0x38')],function(_0x1476ef){var _0x109e60={};_0x109e60[_0x1476ef]={'$like':'%'+_0x9d8273[_0x857f('0x35')][_0x857f('0x43')]+'%'};return _0x109e60;})});}_0x3e24a5=_['merge']({},_0x3e24a5,_0x9d8273[_0x857f('0x44')]);var _0x31963f={'where':_0x3e24a5[_0x857f('0x3d')]};return db[_0x857f('0x31')]['count'](_0x31963f)[_0x857f('0x29')](function(_0x4b6e13){_0x12712a[_0x857f('0x21')]=_0x4b6e13;if(_0x9d8273[_0x857f('0x35')][_0x857f('0x51')]){_0x3e24a5[_0x857f('0x45')]=[{'all':!![]}];}return db['VoiceQueueReport']['findAll'](_0x3e24a5);})[_0x857f('0x29')](function(_0x3ee981){_0x12712a[_0x857f('0x47')]=_0x3ee981;return _0x12712a;})['then'](respondWithFilteredResult(_0x2670e6,_0x3e24a5,_0x857f('0x4f')))['catch'](handleError(_0x2670e6,null,_0x857f('0x4f')));};
\ No newline at end of file
index d3804f1..e0a1a7d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1966=['setMaxListeners','update','remove','emit','hook','exports','events','../../mysqldb','VoiceQueueReport'];(function(_0x256c29,_0x9f9f79){var _0x57fa9c=function(_0x3b1903){while(--_0x3b1903){_0x256c29['push'](_0x256c29['shift']());}};_0x57fa9c(++_0x9f9f79);}(_0x1966,0x9f));var _0x6196=function(_0x939799,_0x46a1ba){_0x939799=_0x939799-0x0;var _0x3d5a0a=_0x1966[_0x939799];return _0x3d5a0a;};'use strict';var EventEmitter=require(_0x6196('0x0'));var VoiceQueueReport=require(_0x6196('0x1'))['db'][_0x6196('0x2')];var VoiceQueueReportEvents=new EventEmitter();VoiceQueueReportEvents[_0x6196('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x6196('0x4'),'afterDestroy':_0x6196('0x5')};function emitEvent(_0x5bb3f9){return function(_0x525fa0,_0x3a4d30,_0x154700){VoiceQueueReportEvents[_0x6196('0x6')](_0x5bb3f9+':'+_0x525fa0['id'],_0x525fa0);VoiceQueueReportEvents['emit'](_0x5bb3f9,_0x525fa0);_0x154700(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];VoiceQueueReport[_0x6196('0x7')](e,emitEvent(event));}}module[_0x6196('0x8')]=VoiceQueueReportEvents;
\ No newline at end of file
+var _0xd86c=['hasOwnProperty','exports','../../mysqldb','VoiceQueueReport','setMaxListeners','save','remove','emit'];(function(_0x220d3e,_0x58c273){var _0x1106da=function(_0x138e8e){while(--_0x138e8e){_0x220d3e['push'](_0x220d3e['shift']());}};_0x1106da(++_0x58c273);}(_0xd86c,0x11a));var _0xcd86=function(_0x1589dd,_0x2b9d22){_0x1589dd=_0x1589dd-0x0;var _0x1bddd1=_0xd86c[_0x1589dd];return _0x1bddd1;};'use strict';var EventEmitter=require('events');var VoiceQueueReport=require(_0xcd86('0x0'))['db'][_0xcd86('0x1')];var VoiceQueueReportEvents=new EventEmitter();VoiceQueueReportEvents[_0xcd86('0x2')](0x0);var events={'afterCreate':_0xcd86('0x3'),'afterUpdate':'update','afterDestroy':_0xcd86('0x4')};function emitEvent(_0x447dec){return function(_0x1f607e,_0x455d2a,_0x283081){VoiceQueueReportEvents[_0xcd86('0x5')](_0x447dec+':'+_0x1f607e['id'],_0x1f607e);VoiceQueueReportEvents[_0xcd86('0x5')](_0x447dec,_0x1f607e);_0x283081(null);};}for(var e in events){if(events[_0xcd86('0x6')](e)){var event=events[e];VoiceQueueReport['hook'](e,emitEvent(event));}}module[_0xcd86('0x7')]=VoiceQueueReportEvents;
\ No newline at end of file
index c60bd85..502ed61 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b47=['api','moment','bluebird','path','../../config/environment','./voiceQueueReport.attributes','exports','define','VoiceQueueReport','uniqueid','calleridnum','lodash','util'];(function(_0x21ec32,_0x441c6e){var _0x1f1c64=function(_0xf0a400){while(--_0xf0a400){_0x21ec32['push'](_0x21ec32['shift']());}};_0x1f1c64(++_0x441c6e);}(_0x6b47,0x184));var _0x76b4=function(_0xeb6bb1,_0xc83c4c){_0xeb6bb1=_0xeb6bb1-0x0;var _0x387e00=_0x6b47[_0xeb6bb1];return _0x387e00;};'use strict';var _=require(_0x76b4('0x0'));var util=require(_0x76b4('0x1'));var logger=require('../../config/logger')(_0x76b4('0x2'));var moment=require(_0x76b4('0x3'));var BPromise=require(_0x76b4('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x76b4('0x5'));var rimraf=require('rimraf');var config=require(_0x76b4('0x6'));var attributes=require(_0x76b4('0x7'));module[_0x76b4('0x8')]=function(_0x2ea84d,_0x1ce8ff){return _0x2ea84d[_0x76b4('0x9')](_0x76b4('0xa'),attributes,{'tableName':'report_queue','paranoid':![],'indexes':[{'fields':[_0x76b4('0xb')]},{'fields':[_0x76b4('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x083e=['lodash','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./voiceQueueReport.attributes','exports','VoiceQueueReport','report_queue','uniqueid'];(function(_0x4ff09b,_0x53f67d){var _0x3f5c2e=function(_0x124592){while(--_0x124592){_0x4ff09b['push'](_0x4ff09b['shift']());}};_0x3f5c2e(++_0x53f67d);}(_0x083e,0x134));var _0xe083=function(_0x4e6ae6,_0x49dba6){_0x4e6ae6=_0x4e6ae6-0x0;var _0x23c108=_0x083e[_0x4e6ae6];return _0x23c108;};'use strict';var _=require(_0xe083('0x0'));var util=require('util');var logger=require(_0xe083('0x1'))(_0xe083('0x2'));var moment=require(_0xe083('0x3'));var BPromise=require(_0xe083('0x4'));var rp=require(_0xe083('0x5'));var fs=require('fs');var path=require(_0xe083('0x6'));var rimraf=require(_0xe083('0x7'));var config=require(_0xe083('0x8'));var attributes=require(_0xe083('0x9'));module[_0xe083('0xa')]=function(_0x23aa92,_0x54a0ce){return _0x23aa92['define'](_0xe083('0xb'),attributes,{'tableName':_0xe083('0xc'),'paranoid':![],'indexes':[{'fields':[_0xe083('0xd')]},{'fields':['calleridnum']}],'timestamps':!![]});};
\ No newline at end of file
index 2339c34..89718c7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf878=['then','info','VoiceQueueReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','catch','GetVoiceQueueReport','findAll','options','raw','where','attributes','limit','map','include','model','VoiceQueueReport','create','body','CreateVoiceQueueReport','UpdateVoiceQueueReport','lodash','moment','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','http','redis','localhost','socket.io-emitter','./voiceQueueReport.socket','register','request'];(function(_0x57c5a7,_0x11f239){var _0x3db4dd=function(_0x3b9f5a){while(--_0x3b9f5a){_0x57c5a7['push'](_0x57c5a7['shift']());}};_0x3db4dd(++_0x11f239);}(_0xf878,0x178));var _0x8f87=function(_0x4b150b,_0x4bcc2e){_0x4b150b=_0x4b150b-0x0;var _0x2ed2c2=_0xf878[_0x4b150b];return _0x2ed2c2;};'use strict';var _=require(_0x8f87('0x0'));var util=require('util');var moment=require(_0x8f87('0x1'));var BPromise=require('bluebird');var rs=require(_0x8f87('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x8f87('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x8f87('0x4'))(_0x8f87('0x5'));var config=require(_0x8f87('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0x8f87('0x7')]({'port':0x232a});config[_0x8f87('0x8')]=_['defaults'](config['redis'],{'host':_0x8f87('0x9'),'port':0x18eb});var socket=require(_0x8f87('0xa'))(new Redis(config['redis']));require(_0x8f87('0xb'))[_0x8f87('0xc')](socket);function respondWithRpcPromise(_0x1abf85,_0x4b7a6c,_0x444bf8){return new BPromise(function(_0x326dd8,_0x443c80){return client[_0x8f87('0xd')](_0x1abf85,_0x444bf8)[_0x8f87('0xe')](function(_0x46051b){logger[_0x8f87('0xf')](_0x8f87('0x10'),_0x4b7a6c,_0x8f87('0x11'));logger[_0x8f87('0x12')]('VoiceQueueReport,\x20%s,\x20%s,\x20%s',_0x4b7a6c,_0x8f87('0x11'),JSON[_0x8f87('0x13')](_0x46051b));if(_0x46051b[_0x8f87('0x14')]){if(_0x46051b[_0x8f87('0x14')][_0x8f87('0x15')]===0x1f4){logger['error']('VoiceQueueReport,\x20%s,\x20%s',_0x4b7a6c,_0x46051b['error']['message']);return _0x443c80(_0x46051b[_0x8f87('0x14')][_0x8f87('0x16')]);}logger[_0x8f87('0x14')](_0x8f87('0x10'),_0x4b7a6c,_0x46051b[_0x8f87('0x14')][_0x8f87('0x16')]);return _0x326dd8(_0x46051b['error'][_0x8f87('0x16')]);}else{logger[_0x8f87('0xf')]('VoiceQueueReport,\x20%s,\x20%s',_0x4b7a6c,_0x8f87('0x11'));_0x326dd8(_0x46051b['result']['message']);}})[_0x8f87('0x17')](function(_0x1ab7a7){logger['error']('VoiceQueueReport,\x20%s,\x20%s',_0x4b7a6c,_0x1ab7a7);_0x443c80(_0x1ab7a7);});});}exports[_0x8f87('0x18')]=function(_0x2c415d){var _0x468b61=this;return new Promise(function(_0x680cac,_0x58a673){return db['VoiceQueueReport'][_0x8f87('0x19')]({'raw':_0x2c415d['options']?_0x2c415d[_0x8f87('0x1a')][_0x8f87('0x1b')]===undefined?!![]:![]:!![],'where':_0x2c415d[_0x8f87('0x1a')]?_0x2c415d[_0x8f87('0x1a')][_0x8f87('0x1c')]||null:null,'attributes':_0x2c415d[_0x8f87('0x1a')]?_0x2c415d[_0x8f87('0x1a')][_0x8f87('0x1d')]||null:null,'limit':_0x2c415d[_0x8f87('0x1a')]?_0x2c415d['options'][_0x8f87('0x1e')]||null:null,'include':_0x2c415d[_0x8f87('0x1a')]?_0x2c415d[_0x8f87('0x1a')]['include']?_[_0x8f87('0x1f')](_0x2c415d[_0x8f87('0x1a')][_0x8f87('0x20')],function(_0x45c9a5){return{'model':db[_0x45c9a5['model']],'as':_0x45c9a5['as'],'attributes':_0x45c9a5[_0x8f87('0x1d')],'include':_0x45c9a5[_0x8f87('0x20')]?_['map'](_0x45c9a5[_0x8f87('0x20')],function(_0x2d6e9a){return{'model':db[_0x2d6e9a[_0x8f87('0x21')]],'as':_0x2d6e9a['as'],'attributes':_0x2d6e9a[_0x8f87('0x1d')],'include':_0x2d6e9a['include']?_[_0x8f87('0x1f')](_0x2d6e9a[_0x8f87('0x20')],function(_0x1b2835){return{'model':db[_0x1b2835[_0x8f87('0x21')]],'as':_0x1b2835['as'],'attributes':_0x1b2835[_0x8f87('0x1d')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x28dc6e){logger['info'](_0x8f87('0x18'),_0x2c415d);logger[_0x8f87('0x12')](_0x8f87('0x18'),_0x2c415d,JSON['stringify'](_0x28dc6e));_0x680cac(_0x28dc6e);})[_0x8f87('0x17')](function(_0x120ae5){logger[_0x8f87('0x14')](_0x8f87('0x18'),_0x120ae5[_0x8f87('0x16')],_0x2c415d);_0x58a673(_0x468b61[_0x8f87('0x14')](0x1f4,_0x120ae5['message']));});});};exports['CreateVoiceQueueReport']=function(_0x1f9d38){var _0x11d7c0=this;return new Promise(function(_0x2c832f,_0x1faac6){return db[_0x8f87('0x22')][_0x8f87('0x23')](_0x1f9d38[_0x8f87('0x24')],{'raw':_0x1f9d38[_0x8f87('0x1a')]?_0x1f9d38[_0x8f87('0x1a')][_0x8f87('0x1b')]===undefined?!![]:![]:!![]})[_0x8f87('0xe')](function(_0xee53c6){logger['info'](_0x8f87('0x25'),_0x1f9d38);logger[_0x8f87('0x12')](_0x8f87('0x25'),_0x1f9d38,JSON['stringify'](_0xee53c6));_0x2c832f(_0xee53c6);})[_0x8f87('0x17')](function(_0x5cce7f){logger['error'](_0x8f87('0x25'),_0x5cce7f['message'],_0x1f9d38);_0x1faac6(_0x11d7c0[_0x8f87('0x14')](0x1f4,_0x5cce7f['message']));});});};exports[_0x8f87('0x26')]=function(_0x2a2943){var _0x28c854=this;return new Promise(function(_0x579489,_0x1e5a5b){return db[_0x8f87('0x22')]['update'](_0x2a2943[_0x8f87('0x24')],{'raw':_0x2a2943[_0x8f87('0x1a')]?_0x2a2943[_0x8f87('0x1a')][_0x8f87('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2a2943['options']?_0x2a2943[_0x8f87('0x1a')][_0x8f87('0x1c')]||null:null,'attributes':_0x2a2943[_0x8f87('0x1a')]?_0x2a2943[_0x8f87('0x1a')][_0x8f87('0x1d')]||null:null,'limit':_0x2a2943['options']?_0x2a2943[_0x8f87('0x1a')][_0x8f87('0x1e')]||null:null})['then'](function(_0x1f0088){logger[_0x8f87('0xf')](_0x8f87('0x26'),_0x2a2943);logger['debug'](_0x8f87('0x26'),_0x2a2943,JSON[_0x8f87('0x13')](_0x1f0088));_0x579489(_0x1f0088);})[_0x8f87('0x17')](function(_0x2c85b5){logger[_0x8f87('0x14')]('UpdateVoiceQueueReport',_0x2c85b5[_0x8f87('0x16')],_0x2a2943);_0x1e5a5b(_0x28c854[_0x8f87('0x14')](0x1f4,_0x2c85b5['message']));});});};
\ No newline at end of file
+var _0x7ad9=['code','message','result','GetVoiceQueueReport','findAll','options','raw','where','attributes','limit','include','map','model','debug','catch','CreateVoiceQueueReport','create','body','UpdateVoiceQueueReport','VoiceQueueReport','update','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','defaults','redis','localhost','register','request','then','info','VoiceQueueReport,\x20%s,\x20%s','request\x20sent','VoiceQueueReport,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0x7ad9,0xc9));var _0x97ad=function(_0x38d027,_0x41d00b){_0x38d027=_0x38d027-0x0;var _0x47ee5a=_0x7ad9[_0x38d027];return _0x47ee5a;};'use strict';var _=require(_0x97ad('0x0'));var util=require(_0x97ad('0x1'));var moment=require('moment');var BPromise=require(_0x97ad('0x2'));var rs=require(_0x97ad('0x3'));var fs=require('fs');var Redis=require(_0x97ad('0x4'));var db=require(_0x97ad('0x5'))['db'];var utils=require(_0x97ad('0x6'));var logger=require(_0x97ad('0x7'))('rpc');var config=require(_0x97ad('0x8'));var jayson=require(_0x97ad('0x9'));var client=jayson[_0x97ad('0xa')][_0x97ad('0xb')]({'port':0x232a});config['redis']=_[_0x97ad('0xc')](config[_0x97ad('0xd')],{'host':_0x97ad('0xe'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x97ad('0xd')]));require('./voiceQueueReport.socket')[_0x97ad('0xf')](socket);function respondWithRpcPromise(_0x1c9ba5,_0x48f68d,_0x7e3359){return new BPromise(function(_0x13db0e,_0x4776e4){return client[_0x97ad('0x10')](_0x1c9ba5,_0x7e3359)[_0x97ad('0x11')](function(_0x5c9960){logger[_0x97ad('0x12')](_0x97ad('0x13'),_0x48f68d,_0x97ad('0x14'));logger['debug'](_0x97ad('0x15'),_0x48f68d,_0x97ad('0x14'),JSON[_0x97ad('0x16')](_0x5c9960));if(_0x5c9960[_0x97ad('0x17')]){if(_0x5c9960[_0x97ad('0x17')][_0x97ad('0x18')]===0x1f4){logger[_0x97ad('0x17')]('VoiceQueueReport,\x20%s,\x20%s',_0x48f68d,_0x5c9960['error'][_0x97ad('0x19')]);return _0x4776e4(_0x5c9960[_0x97ad('0x17')][_0x97ad('0x19')]);}logger['error'](_0x97ad('0x13'),_0x48f68d,_0x5c9960[_0x97ad('0x17')][_0x97ad('0x19')]);return _0x13db0e(_0x5c9960[_0x97ad('0x17')][_0x97ad('0x19')]);}else{logger[_0x97ad('0x12')](_0x97ad('0x13'),_0x48f68d,_0x97ad('0x14'));_0x13db0e(_0x5c9960[_0x97ad('0x1a')][_0x97ad('0x19')]);}})['catch'](function(_0x2a3978){logger[_0x97ad('0x17')](_0x97ad('0x13'),_0x48f68d,_0x2a3978);_0x4776e4(_0x2a3978);});});}exports[_0x97ad('0x1b')]=function(_0x1ed9a7){var _0x273086=this;return new Promise(function(_0x124e9b,_0x408618){return db['VoiceQueueReport'][_0x97ad('0x1c')]({'raw':_0x1ed9a7['options']?_0x1ed9a7[_0x97ad('0x1d')][_0x97ad('0x1e')]===undefined?!![]:![]:!![],'where':_0x1ed9a7[_0x97ad('0x1d')]?_0x1ed9a7[_0x97ad('0x1d')][_0x97ad('0x1f')]||null:null,'attributes':_0x1ed9a7[_0x97ad('0x1d')]?_0x1ed9a7['options'][_0x97ad('0x20')]||null:null,'limit':_0x1ed9a7['options']?_0x1ed9a7[_0x97ad('0x1d')][_0x97ad('0x21')]||null:null,'include':_0x1ed9a7['options']?_0x1ed9a7[_0x97ad('0x1d')][_0x97ad('0x22')]?_[_0x97ad('0x23')](_0x1ed9a7[_0x97ad('0x1d')][_0x97ad('0x22')],function(_0x2bda8f){return{'model':db[_0x2bda8f[_0x97ad('0x24')]],'as':_0x2bda8f['as'],'attributes':_0x2bda8f[_0x97ad('0x20')],'include':_0x2bda8f[_0x97ad('0x22')]?_[_0x97ad('0x23')](_0x2bda8f[_0x97ad('0x22')],function(_0x534879){return{'model':db[_0x534879['model']],'as':_0x534879['as'],'attributes':_0x534879['attributes'],'include':_0x534879[_0x97ad('0x22')]?_['map'](_0x534879[_0x97ad('0x22')],function(_0x572661){return{'model':db[_0x572661[_0x97ad('0x24')]],'as':_0x572661['as'],'attributes':_0x572661[_0x97ad('0x20')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x5331a3){logger[_0x97ad('0x12')](_0x97ad('0x1b'),_0x1ed9a7);logger[_0x97ad('0x25')]('GetVoiceQueueReport',_0x1ed9a7,JSON['stringify'](_0x5331a3));_0x124e9b(_0x5331a3);})[_0x97ad('0x26')](function(_0x2d4400){logger[_0x97ad('0x17')](_0x97ad('0x1b'),_0x2d4400[_0x97ad('0x19')],_0x1ed9a7);_0x408618(_0x273086[_0x97ad('0x17')](0x1f4,_0x2d4400[_0x97ad('0x19')]));});});};exports[_0x97ad('0x27')]=function(_0xd284a5){var _0x10ffb7=this;return new Promise(function(_0x23f98d,_0x35c5f2){return db['VoiceQueueReport'][_0x97ad('0x28')](_0xd284a5[_0x97ad('0x29')],{'raw':_0xd284a5['options']?_0xd284a5[_0x97ad('0x1d')]['raw']===undefined?!![]:![]:!![]})[_0x97ad('0x11')](function(_0x394efb){logger[_0x97ad('0x12')](_0x97ad('0x27'),_0xd284a5);logger[_0x97ad('0x25')](_0x97ad('0x27'),_0xd284a5,JSON[_0x97ad('0x16')](_0x394efb));_0x23f98d(_0x394efb);})[_0x97ad('0x26')](function(_0x2d5817){logger[_0x97ad('0x17')](_0x97ad('0x27'),_0x2d5817['message'],_0xd284a5);_0x35c5f2(_0x10ffb7[_0x97ad('0x17')](0x1f4,_0x2d5817['message']));});});};exports[_0x97ad('0x2a')]=function(_0x3f4261){var _0x49eb2c=this;return new Promise(function(_0x1292d8,_0x447af2){return db[_0x97ad('0x2b')][_0x97ad('0x2c')](_0x3f4261[_0x97ad('0x29')],{'raw':_0x3f4261[_0x97ad('0x1d')]?_0x3f4261[_0x97ad('0x1d')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3f4261[_0x97ad('0x1d')]?_0x3f4261['options'][_0x97ad('0x1f')]||null:null,'attributes':_0x3f4261[_0x97ad('0x1d')]?_0x3f4261[_0x97ad('0x1d')][_0x97ad('0x20')]||null:null,'limit':_0x3f4261[_0x97ad('0x1d')]?_0x3f4261[_0x97ad('0x1d')][_0x97ad('0x21')]||null:null})['then'](function(_0x1be2ba){logger[_0x97ad('0x12')](_0x97ad('0x2a'),_0x3f4261);logger[_0x97ad('0x25')](_0x97ad('0x2a'),_0x3f4261,JSON['stringify'](_0x1be2ba));_0x1292d8(_0x1be2ba);})[_0x97ad('0x26')](function(_0x184fbd){logger[_0x97ad('0x17')](_0x97ad('0x2a'),_0x184fbd[_0x97ad('0x19')],_0x3f4261);_0x447af2(_0x49eb2c['error'](0x1f4,_0x184fbd[_0x97ad('0x19')]));});});};
\ No newline at end of file
index 990dbee..859bc69 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa742=['voiceQueueReport:','update','emit','removeListener','register','length'];(function(_0x209127,_0x153411){var _0x2b8f79=function(_0x2e6488){while(--_0x2e6488){_0x209127['push'](_0x209127['shift']());}};_0x2b8f79(++_0x153411);}(_0xa742,0xc7));var _0x2a74=function(_0xa1cb0d,_0x40d0ea){_0xa1cb0d=_0xa1cb0d-0x0;var _0x29b7ac=_0xa742[_0xa1cb0d];return _0x29b7ac;};'use strict';var VoiceQueueReportEvents=require('./voiceQueueReport.events');var events=['save','remove',_0x2a74('0x0')];function createListener(_0xb0ae5b,_0x4a6321){return function(_0x521a66){_0x4a6321[_0x2a74('0x1')](_0xb0ae5b,_0x521a66);};}function removeListener(_0x555ddc,_0x460764){return function(){VoiceQueueReportEvents[_0x2a74('0x2')](_0x555ddc,_0x460764);};}exports[_0x2a74('0x3')]=function(_0xd09b3c){for(var _0x2e8449=0x0,_0x17d10f=events[_0x2a74('0x4')];_0x2e8449<_0x17d10f;_0x2e8449++){var _0x209234=events[_0x2e8449];var _0x20e347=createListener(_0x2a74('0x5')+_0x209234,_0xd09b3c);VoiceQueueReportEvents['on'](_0x209234,_0x20e347);}};
\ No newline at end of file
+var _0xbe94=['update','emit','register','voiceQueueReport:','./voiceQueueReport.events','save','remove'];(function(_0x3328b4,_0x403a24){var _0x530143=function(_0x53db2a){while(--_0x53db2a){_0x3328b4['push'](_0x3328b4['shift']());}};_0x530143(++_0x403a24);}(_0xbe94,0xf9));var _0x4be9=function(_0x148073,_0x37dbaa){_0x148073=_0x148073-0x0;var _0x30ba58=_0xbe94[_0x148073];return _0x30ba58;};'use strict';var VoiceQueueReportEvents=require(_0x4be9('0x0'));var events=[_0x4be9('0x1'),_0x4be9('0x2'),_0x4be9('0x3')];function createListener(_0x3fa01f,_0x518923){return function(_0x5487a0){_0x518923[_0x4be9('0x4')](_0x3fa01f,_0x5487a0);};}function removeListener(_0x3c51a4,_0x57724f){return function(){VoiceQueueReportEvents['removeListener'](_0x3c51a4,_0x57724f);};}exports[_0x4be9('0x5')]=function(_0x444f53){for(var _0x1c6d56=0x0,_0x2f345c=events['length'];_0x1c6d56<_0x2f345c;_0x1c6d56++){var _0x3170fc=events[_0x1c6d56];var _0x2c0210=createListener(_0x4be9('0x6')+_0x3170fc,_0x444f53);VoiceQueueReportEvents['on'](_0x3170fc,_0x2c0210);}};
\ No newline at end of file
index 2f7dd9c..30babf5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa76e=['delete','exports','util','path','Router','../../components/interaction/service','../../config/environment','./voiceQueuesLog.controller','isAuthenticated','get','show','create','put','/:id'];(function(_0xcf075c,_0x23bf4f){var _0x40a512=function(_0x3bc4f1){while(--_0x3bc4f1){_0xcf075c['push'](_0xcf075c['shift']());}};_0x40a512(++_0x23bf4f);}(_0xa76e,0xfe));var _0xea76=function(_0x22e47a,_0x4ea10c){_0x22e47a=_0x22e47a-0x0;var _0x15a12a=_0xa76e[_0x22e47a];return _0x15a12a;};'use strict';var multer=require('multer');var util=require(_0xea76('0x0'));var path=require(_0xea76('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xea76('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0xea76('0x3'));var config=require(_0xea76('0x4'));var controller=require(_0xea76('0x5'));router['get']('/',auth[_0xea76('0x6')](),controller['index']);router[_0xea76('0x7')]('/:id',auth[_0xea76('0x6')](),controller[_0xea76('0x8')]);router['post']('/',auth['isAuthenticated'](),controller[_0xea76('0x9')]);router[_0xea76('0xa')](_0xea76('0xb'),auth[_0xea76('0x6')](),controller['update']);router[_0xea76('0xc')](_0xea76('0xb'),auth[_0xea76('0x6')](),controller['destroy']);module[_0xea76('0xd')]=router;
\ No newline at end of file
+var _0x2af8=['show','post','create','put','update','delete','destroy','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../config/environment','get','isAuthenticated','/:id'];(function(_0x21de89,_0x367053){var _0x290b7e=function(_0x540704){while(--_0x540704){_0x21de89['push'](_0x21de89['shift']());}};_0x290b7e(++_0x367053);}(_0x2af8,0xf6));var _0x82af=function(_0x595911,_0x4bc4f6){_0x595911=_0x595911-0x0;var _0x22aef9=_0x2af8[_0x595911];return _0x22aef9;};'use strict';var multer=require(_0x82af('0x0'));var util=require('util');var path=require(_0x82af('0x1'));var timeout=require(_0x82af('0x2'));var express=require('express');var router=express[_0x82af('0x3')]();var auth=require(_0x82af('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x82af('0x5'));var controller=require('./voiceQueuesLog.controller');router[_0x82af('0x6')]('/',auth[_0x82af('0x7')](),controller['index']);router[_0x82af('0x6')](_0x82af('0x8'),auth['isAuthenticated'](),controller[_0x82af('0x9')]);router[_0x82af('0xa')]('/',auth[_0x82af('0x7')](),controller[_0x82af('0xb')]);router[_0x82af('0xc')](_0x82af('0x8'),auth[_0x82af('0x7')](),controller[_0x82af('0xd')]);router[_0x82af('0xe')](_0x82af('0x8'),auth[_0x82af('0x7')](),controller[_0x82af('0xf')]);module[_0x82af('0x10')]=router;
\ No newline at end of file
index a0d27fb..b366724 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2bd8=['STRING','DATE','format','YYYY-MM-DD\x20HH:mm:ss','sequelize','exports'];(function(_0x2341ab,_0x326a6c){var _0x54533e=function(_0x413273){while(--_0x413273){_0x2341ab['push'](_0x2341ab['shift']());}};_0x54533e(++_0x326a6c);}(_0x2bd8,0x130));var _0x82bd=function(_0x13d845,_0x442bb7){_0x13d845=_0x13d845-0x0;var _0x2dbd4a=_0x2bd8[_0x13d845];return _0x2dbd4a;};'use strict';var Sequelize=require(_0x82bd('0x0'));var moment=require('moment');module[_0x82bd('0x1')]={'time':{'type':Sequelize[_0x82bd('0x2')]},'callid':{'type':Sequelize[_0x82bd('0x2')],'allowNull':![],'defaultValue':''},'queuename':{'type':Sequelize[_0x82bd('0x2')],'allowNull':![],'defaultValue':''},'agent':{'type':Sequelize[_0x82bd('0x2')],'allowNull':![],'defaultValue':''},'event':{'type':Sequelize[_0x82bd('0x2')],'allowNull':![],'defaultValue':''},'data':{'type':Sequelize[_0x82bd('0x2')],'allowNull':![],'defaultValue':''},'data1':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'data2':{'type':Sequelize[_0x82bd('0x2')],'allowNull':![],'defaultValue':''},'data3':{'type':Sequelize[_0x82bd('0x2')],'allowNull':![],'defaultValue':''},'data4':{'type':Sequelize[_0x82bd('0x2')],'allowNull':![],'defaultValue':''},'data5':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'dtm':{'type':Sequelize[_0x82bd('0x3')],'allowNull':![],'defaultValue':moment()[_0x82bd('0x4')](_0x82bd('0x5'))}};
\ No newline at end of file
+var _0x425d=['sequelize','exports','STRING','DATE','format'];(function(_0x2dc93,_0xf0be94){var _0x3cfe92=function(_0x5a40c7){while(--_0x5a40c7){_0x2dc93['push'](_0x2dc93['shift']());}};_0x3cfe92(++_0xf0be94);}(_0x425d,0x1e0));var _0xd425=function(_0x421e3a,_0xd69d11){_0x421e3a=_0x421e3a-0x0;var _0x3f9abd=_0x425d[_0x421e3a];return _0x3f9abd;};'use strict';var Sequelize=require(_0xd425('0x0'));var moment=require('moment');module[_0xd425('0x1')]={'time':{'type':Sequelize[_0xd425('0x2')]},'callid':{'type':Sequelize[_0xd425('0x2')],'allowNull':![],'defaultValue':''},'queuename':{'type':Sequelize[_0xd425('0x2')],'allowNull':![],'defaultValue':''},'agent':{'type':Sequelize[_0xd425('0x2')],'allowNull':![],'defaultValue':''},'event':{'type':Sequelize[_0xd425('0x2')],'allowNull':![],'defaultValue':''},'data':{'type':Sequelize[_0xd425('0x2')],'allowNull':![],'defaultValue':''},'data1':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'data2':{'type':Sequelize[_0xd425('0x2')],'allowNull':![],'defaultValue':''},'data3':{'type':Sequelize[_0xd425('0x2')],'allowNull':![],'defaultValue':''},'data4':{'type':Sequelize[_0xd425('0x2')],'allowNull':![],'defaultValue':''},'data5':{'type':Sequelize[_0xd425('0x2')],'allowNull':![],'defaultValue':''},'dtm':{'type':Sequelize[_0xd425('0x3')],'allowNull':![],'defaultValue':moment()[_0xd425('0x4')]('YYYY-MM-DD\x20HH:mm:ss')}};
\ No newline at end of file
index 34ca980..825d823 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8977=['fast-json-patch','request-promise','bluebird','mustache','path','ejs','lodash','squel','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','api','../../config/utils','../../mysqldb','sendStatus','status','offset','limit','Content-Range','json','apply','reject','save','then','end','error','stack','name','index','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','options','VoiceQueuesLog','count','rows','catch','show','includeAll','include','find','create','body','update','params','html-pdf','rimraf'];(function(_0x4b784d,_0x5efb2f){var _0x2cdeaf=function(_0x106242){while(--_0x106242){_0x4b784d['push'](_0x4b784d['shift']());}};_0x2cdeaf(++_0x5efb2f);}(_0x8977,0x88));var _0x7897=function(_0x3b33f9,_0x2d813a){_0x3b33f9=_0x3b33f9-0x0;var _0x4f7591=_0x8977[_0x3b33f9];return _0x4f7591;};'use strict';var pdf=require(_0x7897('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x7897('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x7897('0x2'));var rp=require(_0x7897('0x3'));var moment=require('moment');var BPromise=require(_0x7897('0x4'));var Mustache=require(_0x7897('0x5'));var util=require('util');var path=require(_0x7897('0x6'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x7897('0x7'));var fs=require('fs');var _=require(_0x7897('0x8'));var squel=require(_0x7897('0x9'));var crypto=require('crypto');var jsforce=require(_0x7897('0xa'));var deskjs=require(_0x7897('0xb'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x7897('0xc'));var Redis=require(_0x7897('0xd'));var authService=require(_0x7897('0xe'));var qs=require(_0x7897('0xf'));var hardwareService=require(_0x7897('0x10'));var logger=require('../../config/logger')(_0x7897('0x11'));var utils=require(_0x7897('0x12'));var config=require('../../config/environment');var db=require(_0x7897('0x13'))['db'];function respondWithStatusCode(_0x4e5129,_0x390dba){_0x390dba=_0x390dba||0xcc;return function(_0x156d6b){if(_0x156d6b){return _0x4e5129[_0x7897('0x14')](_0x390dba);}return _0x4e5129['status'](_0x390dba)['end']();};}function respondWithResult(_0x5e61cf,_0x4aee57){_0x4aee57=_0x4aee57||0xc8;return function(_0xd46fa3){if(_0xd46fa3){return _0x5e61cf[_0x7897('0x15')](_0x4aee57)['json'](_0xd46fa3);}};}function respondWithFilteredResult(_0xc61a60,_0x4b32a9){return function(_0x35a5ee){if(_0x35a5ee){var _0x570349=_0x35a5ee['count'],_0x20042e=_0x4b32a9['offset'],_0x184e42=_0x4b32a9[_0x7897('0x16')]+_0x4b32a9[_0x7897('0x17')],_0x4a7097;if(_0x184e42>=_0x570349){_0x184e42=_0x570349;_0x4a7097=0xc8;}else{_0x4a7097=0xce;}_0xc61a60[_0x7897('0x15')](_0x4a7097);return _0xc61a60['set'](_0x7897('0x18'),_0x20042e+'-'+_0x184e42+'/'+_0x570349)[_0x7897('0x19')](_0x35a5ee);}return null;};}function patchUpdates(_0x3df408){return function(_0x88a3b6){try{jsonpatch[_0x7897('0x1a')](_0x88a3b6,_0x3df408,!![]);}catch(_0x3a7abe){return BPromise[_0x7897('0x1b')](_0x3a7abe);}return _0x88a3b6[_0x7897('0x1c')]();};}function saveUpdates(_0x15c5f8,_0xfc8246){return function(_0x550af6){if(_0x550af6){return _0x550af6['update'](_0x15c5f8)[_0x7897('0x1d')](function(_0x567a78){return _0x567a78;});}return null;};}function removeEntity(_0x466e76,_0x567221){return function(_0x3dcf8a){if(_0x3dcf8a){return _0x3dcf8a['destroy']()['then'](function(){_0x466e76[_0x7897('0x15')](0xcc)[_0x7897('0x1e')]();});}};}function handleEntityNotFound(_0x1c8f93,_0x58ec33){return function(_0x33f1cc){if(!_0x33f1cc){_0x1c8f93[_0x7897('0x14')](0x194);}return _0x33f1cc;};}function handleError(_0x1b71d8,_0x28e794){_0x28e794=_0x28e794||0x1f4;return function(_0x472c2e){logger[_0x7897('0x1f')](_0x472c2e[_0x7897('0x20')]);if(_0x472c2e[_0x7897('0x21')]){delete _0x472c2e['name'];}_0x1b71d8[_0x7897('0x15')](_0x28e794)['send'](_0x472c2e);};}exports[_0x7897('0x22')]=function(_0x5855ff,_0x3d12c6){var _0xfb8599={},_0x5b766={},_0x4ed724={'count':0x0,'rows':[]};var _0x15f04f=db['VoiceQueuesLog'][_0x7897('0x23')];_0x5b766[_0x7897('0x24')]=_['keys'](_0x15f04f);_0x5b766[_0x7897('0x25')]=_[_0x7897('0x26')](_0x5855ff['query']);_0x5b766[_0x7897('0x27')]=_[_0x7897('0x28')](_0x5b766[_0x7897('0x24')],_0x5b766[_0x7897('0x25')]);_0xfb8599[_0x7897('0x29')]=_[_0x7897('0x28')](_0x5b766['model'],qs[_0x7897('0x2a')](_0x5855ff[_0x7897('0x25')][_0x7897('0x2a')]));_0xfb8599['attributes']=_0xfb8599[_0x7897('0x29')][_0x7897('0x2b')]?_0xfb8599[_0x7897('0x29')]:_0x5b766['model'];if(!_0x5855ff[_0x7897('0x25')][_0x7897('0x2c')](_0x7897('0x2d'))){_0xfb8599[_0x7897('0x17')]=qs[_0x7897('0x17')](_0x5855ff[_0x7897('0x25')][_0x7897('0x17')]);_0xfb8599[_0x7897('0x16')]=qs['offset'](_0x5855ff[_0x7897('0x25')][_0x7897('0x16')]);}_0xfb8599[_0x7897('0x2e')]=qs[_0x7897('0x2f')](_0x5855ff[_0x7897('0x25')]['sort']);_0xfb8599[_0x7897('0x30')]=qs[_0x7897('0x27')](_[_0x7897('0x31')](_0x5855ff['query'],_0x5b766[_0x7897('0x27')]));if(_0x5855ff['query'][_0x7897('0x32')]){_0xfb8599[_0x7897('0x30')]=_[_0x7897('0x33')](_0xfb8599[_0x7897('0x30')],{'$or':_['map'](_0x15f04f,function(_0x502541){if(_0x502541[_0x7897('0x34')][_0x7897('0x35')]!==_0x7897('0x36')){var _0x39c617={};_0x39c617[_0x502541[_0x7897('0x37')]]={'$like':'%'+_0x5855ff[_0x7897('0x25')]['filter']+'%'};return _0x39c617;}})});}_0xfb8599=_['merge']({},_0xfb8599,_0x5855ff[_0x7897('0x38')]);var _0x15fba4={'where':_0xfb8599['where']};return db[_0x7897('0x39')][_0x7897('0x3a')](_0x15fba4)['then'](function(_0x2f0838){_0x4ed724[_0x7897('0x3a')]=_0x2f0838;if(_0x5855ff[_0x7897('0x25')]['includeAll']){_0xfb8599['include']=[{'all':!![]}];}return db[_0x7897('0x39')]['findAll'](_0xfb8599);})[_0x7897('0x1d')](function(_0x10d76c){_0x4ed724[_0x7897('0x3b')]=_0x10d76c;return _0x4ed724;})[_0x7897('0x1d')](respondWithFilteredResult(_0x3d12c6,_0xfb8599))[_0x7897('0x3c')](handleError(_0x3d12c6,null));};exports[_0x7897('0x3d')]=function(_0x51df06,_0x5082b0){var _0x51c559={'raw':!![],'where':{'id':_0x51df06['params']['id']}},_0x476a4f={};_0x476a4f[_0x7897('0x24')]=_['keys'](db['VoiceQueuesLog'][_0x7897('0x23')]);_0x476a4f['query']=_[_0x7897('0x26')](_0x51df06['query']);_0x476a4f[_0x7897('0x27')]=_[_0x7897('0x28')](_0x476a4f[_0x7897('0x24')],_0x476a4f[_0x7897('0x25')]);_0x51c559[_0x7897('0x29')]=_[_0x7897('0x28')](_0x476a4f[_0x7897('0x24')],qs[_0x7897('0x2a')](_0x51df06[_0x7897('0x25')][_0x7897('0x2a')]));_0x51c559[_0x7897('0x29')]=_0x51c559[_0x7897('0x29')][_0x7897('0x2b')]?_0x51c559[_0x7897('0x29')]:_0x476a4f['model'];if(_0x51df06[_0x7897('0x25')][_0x7897('0x3e')]){_0x51c559[_0x7897('0x3f')]=[{'all':!![]}];}_0x51c559=_[_0x7897('0x33')]({},_0x51c559,_0x51df06[_0x7897('0x38')]);return db[_0x7897('0x39')][_0x7897('0x40')](_0x51c559)['then'](handleEntityNotFound(_0x5082b0,null))[_0x7897('0x1d')](respondWithResult(_0x5082b0,null))['catch'](handleError(_0x5082b0,null));};exports[_0x7897('0x41')]=function(_0x3a1911,_0x381a4b){return db[_0x7897('0x39')][_0x7897('0x41')](_0x3a1911[_0x7897('0x42')],{})[_0x7897('0x1d')](respondWithResult(_0x381a4b,0xc9))['catch'](handleError(_0x381a4b,null));};exports[_0x7897('0x43')]=function(_0x3463e9,_0x261016){if(_0x3463e9['body']['id']){delete _0x3463e9['body']['id'];}return db['VoiceQueuesLog'][_0x7897('0x40')]({'where':{'id':_0x3463e9[_0x7897('0x44')]['id']}})[_0x7897('0x1d')](handleEntityNotFound(_0x261016,null))['then'](saveUpdates(_0x3463e9[_0x7897('0x42')],null))['then'](respondWithResult(_0x261016,null))[_0x7897('0x3c')](handleError(_0x261016,null));};exports['destroy']=function(_0x195f90,_0x547906){return db[_0x7897('0x39')][_0x7897('0x40')]({'where':{'id':_0x195f90[_0x7897('0x44')]['id']}})['then'](handleEntityNotFound(_0x547906,null))[_0x7897('0x1d')](removeEntity(_0x547906,null))[_0x7897('0x3c')](handleError(_0x547906,null));};
\ No newline at end of file
+var _0x1842=['index','VoiceQueuesLog','rawAttributes','model','keys','query','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','merge','type','VIRTUAL','filter','options','includeAll','include','findAll','rows','catch','find','create','body','params','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','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','then','destroy','error','name','send'];(function(_0x1177d7,_0x1a0744){var _0x4d705e=function(_0x4b719b){while(--_0x4b719b){_0x1177d7['push'](_0x1177d7['shift']());}};_0x4d705e(++_0x1a0744);}(_0x1842,0x68));var _0x2184=function(_0x46efb0,_0x52b096){_0x46efb0=_0x46efb0-0x0;var _0x2837ee=_0x1842[_0x46efb0];return _0x2837ee;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x2184('0x0'));var zipdir=require(_0x2184('0x1'));var jsonpatch=require(_0x2184('0x2'));var rp=require('request-promise');var moment=require(_0x2184('0x3'));var BPromise=require(_0x2184('0x4'));var Mustache=require(_0x2184('0x5'));var util=require(_0x2184('0x6'));var path=require(_0x2184('0x7'));var sox=require(_0x2184('0x8'));var csv=require(_0x2184('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x2184('0xa'));var crypto=require(_0x2184('0xb'));var jsforce=require(_0x2184('0xc'));var deskjs=require(_0x2184('0xd'));var toCsv=require(_0x2184('0x9'));var querystring=require(_0x2184('0xe'));var Papa=require(_0x2184('0xf'));var Redis=require(_0x2184('0x10'));var authService=require('../../components/auth/service');var qs=require(_0x2184('0x11'));var hardwareService=require(_0x2184('0x12'));var logger=require(_0x2184('0x13'))(_0x2184('0x14'));var utils=require(_0x2184('0x15'));var config=require(_0x2184('0x16'));var db=require(_0x2184('0x17'))['db'];function respondWithStatusCode(_0x188942,_0x4f5268){_0x4f5268=_0x4f5268||0xcc;return function(_0x5ad046){if(_0x5ad046){return _0x188942[_0x2184('0x18')](_0x4f5268);}return _0x188942[_0x2184('0x19')](_0x4f5268)[_0x2184('0x1a')]();};}function respondWithResult(_0x504737,_0x476f33){_0x476f33=_0x476f33||0xc8;return function(_0x5329c3){if(_0x5329c3){return _0x504737[_0x2184('0x19')](_0x476f33)[_0x2184('0x1b')](_0x5329c3);}};}function respondWithFilteredResult(_0x45acd0,_0x1f385a){return function(_0x1d2f58){if(_0x1d2f58){var _0x4ccac7=_0x1d2f58[_0x2184('0x1c')],_0x438c05=_0x1f385a[_0x2184('0x1d')],_0x242c11=_0x1f385a[_0x2184('0x1d')]+_0x1f385a[_0x2184('0x1e')],_0x45a688;if(_0x242c11>=_0x4ccac7){_0x242c11=_0x4ccac7;_0x45a688=0xc8;}else{_0x45a688=0xce;}_0x45acd0[_0x2184('0x19')](_0x45a688);return _0x45acd0[_0x2184('0x1f')](_0x2184('0x20'),_0x438c05+'-'+_0x242c11+'/'+_0x4ccac7)['json'](_0x1d2f58);}return null;};}function patchUpdates(_0x3bc6ed){return function(_0x36c0a5){try{jsonpatch[_0x2184('0x21')](_0x36c0a5,_0x3bc6ed,!![]);}catch(_0x36a9b2){return BPromise[_0x2184('0x22')](_0x36a9b2);}return _0x36c0a5[_0x2184('0x23')]();};}function saveUpdates(_0x4f93b5,_0x3e18df){return function(_0x3eda1c){if(_0x3eda1c){return _0x3eda1c[_0x2184('0x24')](_0x4f93b5)[_0x2184('0x25')](function(_0x32a8ba){return _0x32a8ba;});}return null;};}function removeEntity(_0x4adfa6,_0x20cab7){return function(_0x45cece){if(_0x45cece){return _0x45cece[_0x2184('0x26')]()[_0x2184('0x25')](function(){_0x4adfa6[_0x2184('0x19')](0xcc)[_0x2184('0x1a')]();});}};}function handleEntityNotFound(_0x29f3d8,_0x5a94bc){return function(_0x594bba){if(!_0x594bba){_0x29f3d8[_0x2184('0x18')](0x194);}return _0x594bba;};}function handleError(_0x54d622,_0x1c97c4){_0x1c97c4=_0x1c97c4||0x1f4;return function(_0x2afc3d){logger[_0x2184('0x27')](_0x2afc3d['stack']);if(_0x2afc3d['name']){delete _0x2afc3d[_0x2184('0x28')];}_0x54d622[_0x2184('0x19')](_0x1c97c4)[_0x2184('0x29')](_0x2afc3d);};}exports[_0x2184('0x2a')]=function(_0x485aad,_0x11d8e3){var _0x44019f={},_0x15a5f2={},_0x426086={'count':0x0,'rows':[]};var _0x49d745=db[_0x2184('0x2b')][_0x2184('0x2c')];_0x15a5f2[_0x2184('0x2d')]=_[_0x2184('0x2e')](_0x49d745);_0x15a5f2[_0x2184('0x2f')]=_[_0x2184('0x2e')](_0x485aad[_0x2184('0x2f')]);_0x15a5f2['filters']=_['intersection'](_0x15a5f2[_0x2184('0x2d')],_0x15a5f2[_0x2184('0x2f')]);_0x44019f[_0x2184('0x30')]=_[_0x2184('0x31')](_0x15a5f2[_0x2184('0x2d')],qs[_0x2184('0x32')](_0x485aad[_0x2184('0x2f')]['fields']));_0x44019f['attributes']=_0x44019f[_0x2184('0x30')][_0x2184('0x33')]?_0x44019f[_0x2184('0x30')]:_0x15a5f2[_0x2184('0x2d')];if(!_0x485aad[_0x2184('0x2f')][_0x2184('0x34')](_0x2184('0x35'))){_0x44019f[_0x2184('0x1e')]=qs[_0x2184('0x1e')](_0x485aad['query'][_0x2184('0x1e')]);_0x44019f[_0x2184('0x1d')]=qs['offset'](_0x485aad[_0x2184('0x2f')][_0x2184('0x1d')]);}_0x44019f[_0x2184('0x36')]=qs[_0x2184('0x37')](_0x485aad['query'][_0x2184('0x37')]);_0x44019f[_0x2184('0x38')]=qs[_0x2184('0x39')](_[_0x2184('0x3a')](_0x485aad[_0x2184('0x2f')],_0x15a5f2[_0x2184('0x39')]));if(_0x485aad[_0x2184('0x2f')]['filter']){_0x44019f[_0x2184('0x38')]=_[_0x2184('0x3b')](_0x44019f['where'],{'$or':_['map'](_0x49d745,function(_0x52828f){if(_0x52828f[_0x2184('0x3c')]['key']!==_0x2184('0x3d')){var _0xe6724a={};_0xe6724a[_0x52828f['field']]={'$like':'%'+_0x485aad[_0x2184('0x2f')][_0x2184('0x3e')]+'%'};return _0xe6724a;}})});}_0x44019f=_[_0x2184('0x3b')]({},_0x44019f,_0x485aad[_0x2184('0x3f')]);var _0x315016={'where':_0x44019f[_0x2184('0x38')]};return db[_0x2184('0x2b')][_0x2184('0x1c')](_0x315016)[_0x2184('0x25')](function(_0x11c931){_0x426086[_0x2184('0x1c')]=_0x11c931;if(_0x485aad['query'][_0x2184('0x40')]){_0x44019f[_0x2184('0x41')]=[{'all':!![]}];}return db['VoiceQueuesLog'][_0x2184('0x42')](_0x44019f);})[_0x2184('0x25')](function(_0x12aea7){_0x426086[_0x2184('0x43')]=_0x12aea7;return _0x426086;})[_0x2184('0x25')](respondWithFilteredResult(_0x11d8e3,_0x44019f))[_0x2184('0x44')](handleError(_0x11d8e3,null));};exports['show']=function(_0x45cb85,_0x5ad71d){var _0x4bdf46={'raw':!![],'where':{'id':_0x45cb85['params']['id']}},_0x3830a3={};_0x3830a3['model']=_[_0x2184('0x2e')](db[_0x2184('0x2b')][_0x2184('0x2c')]);_0x3830a3[_0x2184('0x2f')]=_[_0x2184('0x2e')](_0x45cb85[_0x2184('0x2f')]);_0x3830a3[_0x2184('0x39')]=_[_0x2184('0x31')](_0x3830a3[_0x2184('0x2d')],_0x3830a3[_0x2184('0x2f')]);_0x4bdf46[_0x2184('0x30')]=_[_0x2184('0x31')](_0x3830a3[_0x2184('0x2d')],qs['fields'](_0x45cb85[_0x2184('0x2f')][_0x2184('0x32')]));_0x4bdf46[_0x2184('0x30')]=_0x4bdf46[_0x2184('0x30')]['length']?_0x4bdf46[_0x2184('0x30')]:_0x3830a3[_0x2184('0x2d')];if(_0x45cb85[_0x2184('0x2f')][_0x2184('0x40')]){_0x4bdf46[_0x2184('0x41')]=[{'all':!![]}];}_0x4bdf46=_['merge']({},_0x4bdf46,_0x45cb85[_0x2184('0x3f')]);return db[_0x2184('0x2b')][_0x2184('0x45')](_0x4bdf46)['then'](handleEntityNotFound(_0x5ad71d,null))[_0x2184('0x25')](respondWithResult(_0x5ad71d,null))['catch'](handleError(_0x5ad71d,null));};exports[_0x2184('0x46')]=function(_0x18ef64,_0x34d360){return db[_0x2184('0x2b')][_0x2184('0x46')](_0x18ef64['body'],{})[_0x2184('0x25')](respondWithResult(_0x34d360,0xc9))[_0x2184('0x44')](handleError(_0x34d360,null));};exports[_0x2184('0x24')]=function(_0xa4f2a1,_0x5799bd){if(_0xa4f2a1['body']['id']){delete _0xa4f2a1[_0x2184('0x47')]['id'];}return db[_0x2184('0x2b')][_0x2184('0x45')]({'where':{'id':_0xa4f2a1[_0x2184('0x48')]['id']}})['then'](handleEntityNotFound(_0x5799bd,null))['then'](saveUpdates(_0xa4f2a1[_0x2184('0x47')],null))['then'](respondWithResult(_0x5799bd,null))[_0x2184('0x44')](handleError(_0x5799bd,null));};exports[_0x2184('0x26')]=function(_0x5e8da7,_0x17a3ff){return db[_0x2184('0x2b')][_0x2184('0x45')]({'where':{'id':_0x5e8da7[_0x2184('0x48')]['id']}})[_0x2184('0x25')](handleEntityNotFound(_0x17a3ff,null))['then'](removeEntity(_0x17a3ff,null))[_0x2184('0x44')](handleError(_0x17a3ff,null));};
\ No newline at end of file
index 4103c9e..7a07915 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc1a2=['voice_queues_log','event_dtm','event','dtm','lodash','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','define'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0xc1a2,0x9e));var _0x2c1a=function(_0x4b4983,_0x2c2c29){_0x4b4983=_0x4b4983-0x0;var _0x2b9ca9=_0xc1a2[_0x4b4983];return _0x2b9ca9;};'use strict';var _=require(_0x2c1a('0x0'));var util=require(_0x2c1a('0x1'));var logger=require(_0x2c1a('0x2'))(_0x2c1a('0x3'));var moment=require(_0x2c1a('0x4'));var BPromise=require(_0x2c1a('0x5'));var rp=require(_0x2c1a('0x6'));var fs=require('fs');var path=require(_0x2c1a('0x7'));var rimraf=require(_0x2c1a('0x8'));var config=require('../../config/environment');var attributes=require('./voiceQueuesLog.attributes');module['exports']=function(_0x17b680,_0x5cc60a){return _0x17b680[_0x2c1a('0x9')]('VoiceQueuesLog',attributes,{'tableName':_0x2c1a('0xa'),'paranoid':![],'indexes':[{'name':_0x2c1a('0xb'),'fields':[_0x2c1a('0xc'),_0x2c1a('0xd')]}],'timestamps':![]});};
\ No newline at end of file
+var _0x0033=['define','voice_queues_log','event_dtm','event','dtm','util','../../config/logger','api','moment','bluebird','request-promise','path','rimraf','../../config/environment','./voiceQueuesLog.attributes','exports'];(function(_0x26aaec,_0x4e03ae){var _0x3683b7=function(_0x214e98){while(--_0x214e98){_0x26aaec['push'](_0x26aaec['shift']());}};_0x3683b7(++_0x4e03ae);}(_0x0033,0x65));var _0x3003=function(_0x3f477c,_0x52b7ff){_0x3f477c=_0x3f477c-0x0;var _0x4c36b3=_0x0033[_0x3f477c];return _0x4c36b3;};'use strict';var _=require('lodash');var util=require(_0x3003('0x0'));var logger=require(_0x3003('0x1'))(_0x3003('0x2'));var moment=require(_0x3003('0x3'));var BPromise=require(_0x3003('0x4'));var rp=require(_0x3003('0x5'));var fs=require('fs');var path=require(_0x3003('0x6'));var rimraf=require(_0x3003('0x7'));var config=require(_0x3003('0x8'));var attributes=require(_0x3003('0x9'));module[_0x3003('0xa')]=function(_0x139532,_0x4de255){return _0x139532[_0x3003('0xb')]('VoiceQueuesLog',attributes,{'tableName':_0x3003('0xc'),'paranoid':![],'indexes':[{'name':_0x3003('0xd'),'fields':[_0x3003('0xe'),_0x3003('0xf')]}],'timestamps':![]});};
\ No newline at end of file
index 925f326..c58e6c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6215=['debug','VoiceQueuesLog,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','then','info','VoiceQueuesLog,\x20%s,\x20%s'];(function(_0x331247,_0x490e26){var _0x10c240=function(_0x251b4e){while(--_0x251b4e){_0x331247['push'](_0x331247['shift']());}};_0x10c240(++_0x490e26);}(_0x6215,0x198));var _0x5621=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x6215[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x5621('0x0'));var util=require(_0x5621('0x1'));var moment=require(_0x5621('0x2'));var BPromise=require('bluebird');var rs=require(_0x5621('0x3'));var fs=require('fs');var Redis=require(_0x5621('0x4'));var db=require(_0x5621('0x5'))['db'];var utils=require(_0x5621('0x6'));var logger=require(_0x5621('0x7'))(_0x5621('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x431e77,_0x13ed74,_0x2b7275){return new BPromise(function(_0x253c0b,_0x19427d){return client['request'](_0x431e77,_0x2b7275)[_0x5621('0x9')](function(_0x39b1c0){logger[_0x5621('0xa')](_0x5621('0xb'),_0x13ed74,'request\x20sent');logger[_0x5621('0xc')](_0x5621('0xd'),_0x13ed74,_0x5621('0xe'),JSON['stringify'](_0x39b1c0));if(_0x39b1c0[_0x5621('0xf')]){if(_0x39b1c0[_0x5621('0xf')][_0x5621('0x10')]===0x1f4){logger[_0x5621('0xf')](_0x5621('0xb'),_0x13ed74,_0x39b1c0[_0x5621('0xf')][_0x5621('0x11')]);return _0x19427d(_0x39b1c0[_0x5621('0xf')][_0x5621('0x11')]);}logger[_0x5621('0xf')]('VoiceQueuesLog,\x20%s,\x20%s',_0x13ed74,_0x39b1c0[_0x5621('0xf')][_0x5621('0x11')]);return _0x253c0b(_0x39b1c0[_0x5621('0xf')]['message']);}else{logger[_0x5621('0xa')](_0x5621('0xb'),_0x13ed74,'request\x20sent');_0x253c0b(_0x39b1c0[_0x5621('0x12')][_0x5621('0x11')]);}})[_0x5621('0x13')](function(_0x180926){logger[_0x5621('0xf')](_0x5621('0xb'),_0x13ed74,_0x180926);_0x19427d(_0x180926);});});}
\ No newline at end of file
+var _0xc2f2=['../../config/logger','rpc','jayson/promise','client','http','request','then','info','VoiceQueuesLog,\x20%s,\x20%s','request\x20sent','error','code','message','catch','lodash','moment','bluebird','randomstring','../../config/utils'];(function(_0x8ec51a,_0x42a5df){var _0x58e187=function(_0x5d464f){while(--_0x5d464f){_0x8ec51a['push'](_0x8ec51a['shift']());}};_0x58e187(++_0x42a5df);}(_0xc2f2,0xb9));var _0x2c2f=function(_0x5ad771,_0x34186f){_0x5ad771=_0x5ad771-0x0;var _0x5b5dce=_0xc2f2[_0x5ad771];return _0x5b5dce;};'use strict';var _=require(_0x2c2f('0x0'));var util=require('util');var moment=require(_0x2c2f('0x1'));var BPromise=require(_0x2c2f('0x2'));var rs=require(_0x2c2f('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x2c2f('0x4'));var logger=require(_0x2c2f('0x5'))(_0x2c2f('0x6'));var config=require('../../config/environment');var jayson=require(_0x2c2f('0x7'));var client=jayson[_0x2c2f('0x8')][_0x2c2f('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x513d08,_0x52f275,_0x18ec9c){return new BPromise(function(_0x1695ca,_0x5b1bc0){return client[_0x2c2f('0xa')](_0x513d08,_0x18ec9c)[_0x2c2f('0xb')](function(_0x704863){logger[_0x2c2f('0xc')](_0x2c2f('0xd'),_0x52f275,_0x2c2f('0xe'));logger['debug']('VoiceQueuesLog,\x20%s,\x20%s,\x20%s',_0x52f275,'request\x20sent',JSON['stringify'](_0x704863));if(_0x704863[_0x2c2f('0xf')]){if(_0x704863[_0x2c2f('0xf')][_0x2c2f('0x10')]===0x1f4){logger[_0x2c2f('0xf')](_0x2c2f('0xd'),_0x52f275,_0x704863[_0x2c2f('0xf')]['message']);return _0x5b1bc0(_0x704863[_0x2c2f('0xf')][_0x2c2f('0x11')]);}logger[_0x2c2f('0xf')](_0x2c2f('0xd'),_0x52f275,_0x704863[_0x2c2f('0xf')][_0x2c2f('0x11')]);return _0x1695ca(_0x704863[_0x2c2f('0xf')][_0x2c2f('0x11')]);}else{logger[_0x2c2f('0xc')]('VoiceQueuesLog,\x20%s,\x20%s',_0x52f275,'request\x20sent');_0x1695ca(_0x704863['result'][_0x2c2f('0x11')]);}})[_0x2c2f('0x12')](function(_0x8dbf57){logger[_0x2c2f('0xf')]('VoiceQueuesLog,\x20%s,\x20%s',_0x52f275,_0x8dbf57);_0x5b1bc0(_0x8dbf57);});});}
\ No newline at end of file
index 3849bd0..69b176a 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','./voiceRecording.controller','get','index','describe','isAuthenticated','download','/:id/downloads','downloads','post','create','update','/:id','destroy','exports','multer'];(function(_0x1ed39d,_0x56e59b){var _0x44d058=function(_0x4d7d30){while(--_0x4d7d30){_0x1ed39d['push'](_0x1ed39d['shift']());}};_0x44d058(++_0x56e59b);}(_0x6a24,0xd1));var _0x46a2=function(_0x2b4dcb,_0xc2b8d9){_0x2b4dcb=_0x2b4dcb-0x0;var _0x152ea8=_0x6a24[_0x2b4dcb];return _0x152ea8;};'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')]('/',auth['isAuthenticated'](),controller[_0x46a2('0x9')]);router[_0x46a2('0x8')]('/describe',auth['isAuthenticated'](),controller[_0x46a2('0xa')]);router[_0x46a2('0x8')]('/:id',auth[_0x46a2('0xb')](),controller['show']);router[_0x46a2('0x8')]('/:id/download',auth[_0x46a2('0xb')](),controller[_0x46a2('0xc')]);router[_0x46a2('0x8')](_0x46a2('0xd'),controller[_0x46a2('0xe')]);router[_0x46a2('0xf')]('/',auth[_0x46a2('0xb')](),controller[_0x46a2('0x10')]);router['put']('/:id',auth[_0x46a2('0xb')](),controller[_0x46a2('0x11')]);router['delete'](_0x46a2('0x12'),auth[_0x46a2('0xb')](),controller[_0x46a2('0x13')]);module[_0x46a2('0x14')]=router;
\ No newline at end of file
+var _0xfd28=['put','update','delete','destroy','exports','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','/:id','downloads'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xfd28,0x148));var _0x8fd2=function(_0x46a671,_0x758e9a){_0x46a671=_0x46a671-0x0;var _0x526d75=_0xfd28[_0x46a671];return _0x526d75;};'use strict';var multer=require('multer');var util=require(_0x8fd2('0x0'));var path=require(_0x8fd2('0x1'));var timeout=require('connect-timeout');var express=require(_0x8fd2('0x2'));var router=express['Router']();var auth=require(_0x8fd2('0x3'));var interaction=require(_0x8fd2('0x4'));var config=require(_0x8fd2('0x5'));var controller=require('./voiceRecording.controller');router[_0x8fd2('0x6')]('/',auth[_0x8fd2('0x7')](),controller[_0x8fd2('0x8')]);router[_0x8fd2('0x6')](_0x8fd2('0x9'),auth['isAuthenticated'](),controller['describe']);router[_0x8fd2('0x6')](_0x8fd2('0xa'),auth[_0x8fd2('0x7')](),controller['show']);router[_0x8fd2('0x6')]('/:id/download',auth[_0x8fd2('0x7')](),controller['download']);router[_0x8fd2('0x6')]('/:id/downloads',controller[_0x8fd2('0xb')]);router['post']('/',auth[_0x8fd2('0x7')](),controller['create']);router[_0x8fd2('0xc')](_0x8fd2('0xa'),auth[_0x8fd2('0x7')](),controller[_0x8fd2('0xd')]);router[_0x8fd2('0xe')](_0x8fd2('0xa'),auth[_0x8fd2('0x7')](),controller[_0x8fd2('0xf')]);module[_0x8fd2('0x10')]=router;
\ No newline at end of file
index 132934c..3712641 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8f1=['value','STRING','channel','membername','split','INTEGER','DATE','createdAt','format','toString','updatedAt','sequelize','moment','path','exports','VIRTUAL','getDataValue','extname'];(function(_0x42a88b,_0x7cfb3f){var _0x34644d=function(_0x3826d3){while(--_0x3826d3){_0x42a88b['push'](_0x42a88b['shift']());}};_0x34644d(++_0x7cfb3f);}(_0xd8f1,0x9b));var _0x1d8f=function(_0x414be6,_0x304e9b){_0x414be6=_0x414be6-0x0;var _0x12c658=_0xd8f1[_0x414be6];return _0x12c658;};'use strict';var Sequelize=require(_0x1d8f('0x0'));var moment=require(_0x1d8f('0x1'));var path=require(_0x1d8f('0x2'));module[_0x1d8f('0x3')]={'format':{'type':Sequelize[_0x1d8f('0x4')],'get':function(){return this[_0x1d8f('0x5')]('value')?path[_0x1d8f('0x6')](this[_0x1d8f('0x5')](_0x1d8f('0x7'))):undefined;}},'uniqueid':{'type':Sequelize[_0x1d8f('0x8')]},'channel':{'type':Sequelize[_0x1d8f('0x8')],'set':function(_0x1b43c0){if(_0x1b43c0){this['setDataValue'](_0x1d8f('0x9'),_0x1b43c0);this['setDataValue'](_0x1d8f('0xa'),_0x1b43c0[_0x1d8f('0xb')](/\/|-/)[0x1]);}}},'membername':{'type':Sequelize[_0x1d8f('0x8')]},'calleridnum':{'type':Sequelize[_0x1d8f('0x8')]},'calleridname':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize[_0x1d8f('0x8')]},'connectedlinename':{'type':Sequelize[_0x1d8f('0x8')]},'accountcode':{'type':Sequelize[_0x1d8f('0x8')]},'context':{'type':Sequelize[_0x1d8f('0x8')]},'exten':{'type':Sequelize[_0x1d8f('0x8')]},'value':{'type':Sequelize[_0x1d8f('0x8')]},'type':{'type':Sequelize[_0x1d8f('0x8')]},'rating':{'type':Sequelize[_0x1d8f('0xc')],'validate':{'max':0x5,'min':0x0}},'queue':{'type':Sequelize['STRING']},'userDisposition':{'type':Sequelize[_0x1d8f('0x8')]},'createdAt':{'type':Sequelize[_0x1d8f('0xd')],'get':function(){return moment(this['getDataValue'](_0x1d8f('0xe')))[_0x1d8f('0xf')]('MM-DD-YYYY\x20HH:mm')[_0x1d8f('0x10')]();}},'updatedAt':{'type':Sequelize[_0x1d8f('0xd')],'get':function(){return moment(this['getDataValue'](_0x1d8f('0x11')))[_0x1d8f('0xf')]('MM-DD-YYYY\x20HH:mm')[_0x1d8f('0x10')]();}}};
\ No newline at end of file
+var _0x4c62=['DATE','createdAt','format','MM-DD-YYYY\x20HH:mm','toString','updatedAt','sequelize','moment','exports','VIRTUAL','value','getDataValue','STRING','channel','setDataValue','membername','split','INTEGER'];(function(_0x317d6f,_0x18463f){var _0x4a5911=function(_0x1ca81a){while(--_0x1ca81a){_0x317d6f['push'](_0x317d6f['shift']());}};_0x4a5911(++_0x18463f);}(_0x4c62,0xa8));var _0x24c6=function(_0x32f4a7,_0x5b7955){_0x32f4a7=_0x32f4a7-0x0;var _0x169eb1=_0x4c62[_0x32f4a7];return _0x169eb1;};'use strict';var Sequelize=require(_0x24c6('0x0'));var moment=require(_0x24c6('0x1'));var path=require('path');module[_0x24c6('0x2')]={'format':{'type':Sequelize[_0x24c6('0x3')],'get':function(){return this['getDataValue'](_0x24c6('0x4'))?path['extname'](this[_0x24c6('0x5')](_0x24c6('0x4'))):undefined;}},'uniqueid':{'type':Sequelize[_0x24c6('0x6')]},'channel':{'type':Sequelize[_0x24c6('0x6')],'set':function(_0x2f5477){if(_0x2f5477){this['setDataValue'](_0x24c6('0x7'),_0x2f5477);this[_0x24c6('0x8')](_0x24c6('0x9'),_0x2f5477[_0x24c6('0xa')](/\/|-/)[0x1]);}}},'membername':{'type':Sequelize[_0x24c6('0x6')]},'calleridnum':{'type':Sequelize[_0x24c6('0x6')]},'calleridname':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize['STRING']},'connectedlinename':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0x24c6('0x6')]},'context':{'type':Sequelize[_0x24c6('0x6')]},'exten':{'type':Sequelize[_0x24c6('0x6')]},'value':{'type':Sequelize[_0x24c6('0x6')]},'type':{'type':Sequelize[_0x24c6('0x6')]},'rating':{'type':Sequelize[_0x24c6('0xb')],'validate':{'max':0x5,'min':0x0}},'queue':{'type':Sequelize[_0x24c6('0x6')]},'userDisposition':{'type':Sequelize[_0x24c6('0x6')]},'createdAt':{'type':Sequelize[_0x24c6('0xc')],'get':function(){return moment(this[_0x24c6('0x5')](_0x24c6('0xd')))[_0x24c6('0xe')](_0x24c6('0xf'))[_0x24c6('0x10')]();}},'updatedAt':{'type':Sequelize['DATE'],'get':function(){return moment(this[_0x24c6('0x5')](_0x24c6('0x11')))['format'](_0x24c6('0xf'))['toString']();}}};
\ No newline at end of file
index 177b7d2..6fe34b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf4b=['papaparse','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','limit','Content-Range','apply','reject','save','update','then','destroy','stack','name','index','VoiceRecording','rawAttributes','model','differenceBy','keys','format','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','offset','order','sort','where','merge','map','type','key','VIRTUAL','field','filter','options','count','includeAll','include','findAll','rows','catch','show','params','find','create','body','describe','download','../../components/encryptor','uniqueid','value','existsSync','decryptFile','secrets','recording','Sequelize','ValidationError','VoiceRecording\x20not\x20found','filename','extname','unlink','message','send','Not\x20found','downloads','sequelize','MD5','col','token','$and','push','%s.cypher','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring'];(function(_0x3cb30b,_0x504b3e){var _0x2ca717=function(_0x32a3d9){while(--_0x32a3d9){_0x3cb30b['push'](_0x3cb30b['shift']());}};_0x2ca717(++_0x504b3e);}(_0xbf4b,0x1e9));var _0xbbf4=function(_0x497641,_0x5d4f64){_0x497641=_0x497641-0x0;var _0x3c355e=_0xbf4b[_0x497641];return _0x3c355e;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xbbf4('0x0'));var zipdir=require(_0xbbf4('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0xbbf4('0x2'));var moment=require(_0xbbf4('0x3'));var BPromise=require(_0xbbf4('0x4'));var Mustache=require(_0xbbf4('0x5'));var util=require(_0xbbf4('0x6'));var path=require(_0xbbf4('0x7'));var sox=require(_0xbbf4('0x8'));var csv=require(_0xbbf4('0x9'));var ejs=require(_0xbbf4('0xa'));var fs=require('fs');var _=require(_0xbbf4('0xb'));var squel=require('squel');var crypto=require(_0xbbf4('0xc'));var jsforce=require(_0xbbf4('0xd'));var deskjs=require(_0xbbf4('0xe'));var toCsv=require('to-csv');var querystring=require(_0xbbf4('0xf'));var Papa=require(_0xbbf4('0x10'));var Redis=require('ioredis');var authService=require(_0xbbf4('0x11'));var qs=require('../../components/parsers/qs');var hardwareService=require('../../config/license/hardware');var logger=require(_0xbbf4('0x12'))(_0xbbf4('0x13'));var utils=require(_0xbbf4('0x14'));var config=require(_0xbbf4('0x15'));var db=require(_0xbbf4('0x16'))['db'];function respondWithStatusCode(_0x1af85e,_0x4c792f){_0x4c792f=_0x4c792f||0xcc;return function(_0x31c4a9){if(_0x31c4a9){return _0x1af85e[_0xbbf4('0x17')](_0x4c792f);}return _0x1af85e[_0xbbf4('0x18')](_0x4c792f)[_0xbbf4('0x19')]();};}function respondWithResult(_0x227b31,_0x33c062){_0x33c062=_0x33c062||0xc8;return function(_0x532a36){if(_0x532a36){return _0x227b31[_0xbbf4('0x18')](_0x33c062)[_0xbbf4('0x1a')](_0x532a36);}};}function respondWithFilteredResult(_0x1d75e0,_0x362c27){return function(_0x52a1ed){if(_0x52a1ed){var _0xdbff99=_0x52a1ed['count'],_0x97d1e1=_0x362c27['offset'],_0x2063cc=_0x362c27['offset']+_0x362c27[_0xbbf4('0x1b')],_0x45f279;if(_0x2063cc>=_0xdbff99){_0x2063cc=_0xdbff99;_0x45f279=0xc8;}else{_0x45f279=0xce;}_0x1d75e0['status'](_0x45f279);return _0x1d75e0['set'](_0xbbf4('0x1c'),_0x97d1e1+'-'+_0x2063cc+'/'+_0xdbff99)['json'](_0x52a1ed);}return null;};}function patchUpdates(_0x5f2857){return function(_0x5ad0f7){try{jsonpatch[_0xbbf4('0x1d')](_0x5ad0f7,_0x5f2857,!![]);}catch(_0x255add){return BPromise[_0xbbf4('0x1e')](_0x255add);}return _0x5ad0f7[_0xbbf4('0x1f')]();};}function saveUpdates(_0x2756e0,_0x17a81a){return function(_0x2f8d3e){if(_0x2f8d3e){return _0x2f8d3e[_0xbbf4('0x20')](_0x2756e0)[_0xbbf4('0x21')](function(_0x4718a0){return _0x4718a0;});}return null;};}function removeEntity(_0x54e53a,_0x1ff677){return function(_0x5ed505){if(_0x5ed505){return _0x5ed505[_0xbbf4('0x22')]()[_0xbbf4('0x21')](function(){_0x54e53a[_0xbbf4('0x18')](0xcc)[_0xbbf4('0x19')]();});}};}function handleEntityNotFound(_0x51d5ce,_0x443099){return function(_0x4e14eb){if(!_0x4e14eb){_0x51d5ce[_0xbbf4('0x17')](0x194);}return _0x4e14eb;};}function handleError(_0x565da9,_0x21a013){_0x21a013=_0x21a013||0x1f4;return function(_0x4a9dc3){logger['error'](_0x4a9dc3[_0xbbf4('0x23')]);if(_0x4a9dc3[_0xbbf4('0x24')]){delete _0x4a9dc3[_0xbbf4('0x24')];}_0x565da9[_0xbbf4('0x18')](_0x21a013)['send'](_0x4a9dc3);};}exports[_0xbbf4('0x25')]=function(_0x3c9cf9,_0x274a2d){var _0x3c8eb7={},_0x1661e9={},_0x51d5c0={'count':0x0,'rows':[]};var _0x1205f3=db[_0xbbf4('0x26')][_0xbbf4('0x27')];_0x1661e9[_0xbbf4('0x28')]=_[_0xbbf4('0x29')](_[_0xbbf4('0x2a')](_0x1205f3),[_0xbbf4('0x2b')]);_0x1661e9[_0xbbf4('0x2c')]=_[_0xbbf4('0x2a')](_0x3c9cf9['query']);_0x1661e9[_0xbbf4('0x2d')]=_[_0xbbf4('0x2e')](_0x1661e9[_0xbbf4('0x28')],_0x1661e9[_0xbbf4('0x2c')]);_0x3c8eb7[_0xbbf4('0x2f')]=_[_0xbbf4('0x2e')](_0x1661e9[_0xbbf4('0x28')],qs[_0xbbf4('0x30')](_0x3c9cf9[_0xbbf4('0x2c')]['fields']));_0x3c8eb7[_0xbbf4('0x2f')]=_0x3c8eb7[_0xbbf4('0x2f')][_0xbbf4('0x31')]?_0x3c8eb7[_0xbbf4('0x2f')]:_0x1661e9[_0xbbf4('0x28')];if(!_0x3c9cf9['query'][_0xbbf4('0x32')](_0xbbf4('0x33'))){_0x3c8eb7[_0xbbf4('0x1b')]=qs[_0xbbf4('0x1b')](_0x3c9cf9[_0xbbf4('0x2c')][_0xbbf4('0x1b')]);_0x3c8eb7[_0xbbf4('0x34')]=qs[_0xbbf4('0x34')](_0x3c9cf9[_0xbbf4('0x2c')][_0xbbf4('0x34')]);}_0x3c8eb7[_0xbbf4('0x35')]=qs[_0xbbf4('0x36')](_0x3c9cf9['query']['sort']);_0x3c8eb7[_0xbbf4('0x37')]=qs[_0xbbf4('0x2d')](_['pick'](_0x3c9cf9['query'],_0x1661e9[_0xbbf4('0x2d')]));if(_0x3c9cf9[_0xbbf4('0x2c')]['filter']){_0x3c8eb7[_0xbbf4('0x37')]=_[_0xbbf4('0x38')](_0x3c8eb7[_0xbbf4('0x37')],{'$or':_[_0xbbf4('0x39')](_0x1205f3,function(_0x20d7e1){if(_0x20d7e1[_0xbbf4('0x3a')][_0xbbf4('0x3b')]!==_0xbbf4('0x3c')){var _0x2afcaa={};_0x2afcaa[_0x20d7e1[_0xbbf4('0x3d')]]={'$like':'%'+_0x3c9cf9['query'][_0xbbf4('0x3e')]+'%'};return _0x2afcaa;}})});}_0x3c8eb7=_['merge']({},_0x3c8eb7,_0x3c9cf9[_0xbbf4('0x3f')]);var _0x454ece={'where':_0x3c8eb7['where']};return db[_0xbbf4('0x26')][_0xbbf4('0x40')](_0x454ece)[_0xbbf4('0x21')](function(_0x400582){_0x51d5c0[_0xbbf4('0x40')]=_0x400582;if(_0x3c9cf9['query'][_0xbbf4('0x41')]){_0x3c8eb7[_0xbbf4('0x42')]=[{'all':!![]}];}return db[_0xbbf4('0x26')][_0xbbf4('0x43')](_0x3c8eb7);})[_0xbbf4('0x21')](function(_0x260d3d){_0x51d5c0[_0xbbf4('0x44')]=_0x260d3d;return _0x51d5c0;})['then'](respondWithFilteredResult(_0x274a2d,_0x3c8eb7))[_0xbbf4('0x45')](handleError(_0x274a2d,null));};exports[_0xbbf4('0x46')]=function(_0x140f85,_0x2a3be7){var _0x32c26d={'raw':![],'where':{'id':_0x140f85[_0xbbf4('0x47')]['id']}},_0x52f4c1={};_0x52f4c1['model']=_[_0xbbf4('0x2a')](db[_0xbbf4('0x26')][_0xbbf4('0x27')]);_0x52f4c1['query']=_[_0xbbf4('0x2a')](_0x140f85[_0xbbf4('0x2c')]);_0x52f4c1[_0xbbf4('0x2d')]=_[_0xbbf4('0x2e')](_0x52f4c1['model'],_0x52f4c1[_0xbbf4('0x2c')]);_0x32c26d[_0xbbf4('0x2f')]=_[_0xbbf4('0x2e')](_0x52f4c1[_0xbbf4('0x28')],qs['fields'](_0x140f85[_0xbbf4('0x2c')][_0xbbf4('0x30')]));_0x32c26d[_0xbbf4('0x2f')]=_0x32c26d[_0xbbf4('0x2f')][_0xbbf4('0x31')]?_0x32c26d[_0xbbf4('0x2f')]:_0x52f4c1[_0xbbf4('0x28')];if(_0x140f85['query'][_0xbbf4('0x41')]){_0x32c26d[_0xbbf4('0x42')]=[{'all':!![]}];}_0x32c26d=_[_0xbbf4('0x38')]({},_0x32c26d,_0x140f85[_0xbbf4('0x3f')]);return db[_0xbbf4('0x26')][_0xbbf4('0x48')](_0x32c26d)[_0xbbf4('0x21')](handleEntityNotFound(_0x2a3be7,null))[_0xbbf4('0x21')](respondWithResult(_0x2a3be7,null))['catch'](handleError(_0x2a3be7,null));};exports[_0xbbf4('0x49')]=function(_0x11581e,_0x5f04ae){return db[_0xbbf4('0x26')]['create'](_0x11581e[_0xbbf4('0x4a')],{})[_0xbbf4('0x21')](respondWithResult(_0x5f04ae,0xc9))[_0xbbf4('0x45')](handleError(_0x5f04ae,null));};exports[_0xbbf4('0x20')]=function(_0x24d19b,_0x12685e){if(_0x24d19b[_0xbbf4('0x4a')]['id']){delete _0x24d19b[_0xbbf4('0x4a')]['id'];}return db[_0xbbf4('0x26')][_0xbbf4('0x48')]({'where':{'id':_0x24d19b[_0xbbf4('0x47')]['id']}})[_0xbbf4('0x21')](handleEntityNotFound(_0x12685e,null))[_0xbbf4('0x21')](saveUpdates(_0x24d19b[_0xbbf4('0x4a')],null))[_0xbbf4('0x21')](respondWithResult(_0x12685e,null))['catch'](handleError(_0x12685e,null));};exports[_0xbbf4('0x22')]=function(_0x3c2594,_0x4c3b7a){return db[_0xbbf4('0x26')][_0xbbf4('0x48')]({'where':{'id':_0x3c2594[_0xbbf4('0x47')]['id']}})[_0xbbf4('0x21')](handleEntityNotFound(_0x4c3b7a,null))['then'](removeEntity(_0x4c3b7a,null))[_0xbbf4('0x45')](handleError(_0x4c3b7a,null));};exports[_0xbbf4('0x4b')]=function(_0x5cd3f6,_0xd7b693){return db[_0xbbf4('0x26')][_0xbbf4('0x4b')]()['then'](respondWithResult(_0xd7b693,null))[_0xbbf4('0x45')](handleError(_0xd7b693,null));};exports[_0xbbf4('0x4c')]=function(_0x524faf,_0x875247,_0x39169e){var _0x20da4f=require(_0xbbf4('0x4d'));var _0x180b0c=![];var _0x5ca987={};if(_0x524faf[_0xbbf4('0x2c')]['type']&&_0x524faf[_0xbbf4('0x2c')]['type']===_0xbbf4('0x4e')){_0x5ca987['uniqueid']=_0x524faf[_0xbbf4('0x47')]['id'];}else{_0x5ca987['id']=_0x524faf[_0xbbf4('0x47')]['id'];}return db[_0xbbf4('0x26')][_0xbbf4('0x48')]({'where':_0x5ca987,'attributes':['id',_0xbbf4('0x4f')],'raw':!![]})[_0xbbf4('0x21')](handleEntityNotFound(_0x875247,null))[_0xbbf4('0x21')](function(_0x46de19){if(_0x46de19){var _0x5ead61=_0x46de19[_0xbbf4('0x4f')];var _0xf20192=util[_0xbbf4('0x2b')]('%s.cypher',_0x5ead61);if(fs[_0xbbf4('0x50')](_0xf20192)){_0x180b0c=!![];return _0x20da4f[_0xbbf4('0x51')](_0xf20192,_0x5ead61,config[_0xbbf4('0x52')][_0xbbf4('0x53')])['then'](function(){return _0x46de19;});}return _0x46de19;}})[_0xbbf4('0x21')](function(_0x3bbf81){if(_0x3bbf81){var _0x766c46=_0x3bbf81[_0xbbf4('0x4f')];if(!fs['existsSync'](_0x766c46)){throw new db[(_0xbbf4('0x54'))][(_0xbbf4('0x55'))](_0xbbf4('0x56'));}if(_0x3bbf81[_0xbbf4('0x57')]){return _0x875247['download'](_0x766c46,_0x3bbf81[_0xbbf4('0x57')]+path[_0xbbf4('0x58')](_0x766c46),function(){if(_0x180b0c){fs[_0xbbf4('0x59')](_0x766c46);}});}else{return _0x875247[_0xbbf4('0x4c')](_0x766c46,function(_0x57864e){if(_0x180b0c){fs['unlink'](_0x766c46);}});}}})[_0xbbf4('0x45')](function(_0x289616){if(_0x289616[_0xbbf4('0x5a')]===_0xbbf4('0x56')){_0x875247[_0xbbf4('0x18')](0x194)[_0xbbf4('0x5b')](_0xbbf4('0x5c'));}else{return handleError(_0x875247,null);}});};exports[_0xbbf4('0x5d')]=function(_0x129170,_0x26a30f,_0x41457c){var _0x13da68=require(_0xbbf4('0x4d'));var _0x5a05ef=![];var _0x5e8c80={'$and':[db[_0xbbf4('0x5e')][_0xbbf4('0x37')](db[_0xbbf4('0x5e')]['fn'](_0xbbf4('0x5f'),db[_0xbbf4('0x5e')][_0xbbf4('0x60')](_0xbbf4('0x4e'))),_0x129170[_0xbbf4('0x2c')][_0xbbf4('0x61')])]};if(_0x129170[_0xbbf4('0x2c')][_0xbbf4('0x3a')]&&_0x129170[_0xbbf4('0x2c')][_0xbbf4('0x3a')]===_0xbbf4('0x4e')){_0x5e8c80[_0xbbf4('0x62')][_0xbbf4('0x63')]({'uniqueid':_0x129170[_0xbbf4('0x47')]['id']});}else{_0x5e8c80[_0xbbf4('0x62')][_0xbbf4('0x63')]({'id':_0x129170['params']['id']});}return db['VoiceRecording']['find']({'where':_0x5e8c80,'attributes':['id',_0xbbf4('0x4f')],'raw':!![]})[_0xbbf4('0x21')](handleEntityNotFound(_0x26a30f,null))[_0xbbf4('0x21')](function(_0x544d2b){if(_0x544d2b){var _0x2d7dec=util[_0xbbf4('0x2b')](_0xbbf4('0x64'),_0x544d2b[_0xbbf4('0x4f')]);if(fs[_0xbbf4('0x50')](_0x2d7dec)){_0x5a05ef=!![];return _0x13da68[_0xbbf4('0x51')](_0x2d7dec,_0x544d2b[_0xbbf4('0x4f')],config[_0xbbf4('0x52')][_0xbbf4('0x53')])['then'](function(){return _0x544d2b;});}return _0x544d2b;}})['then'](function(_0x2d00ba){if(_0x2d00ba){if(!fs[_0xbbf4('0x50')](_0x2d00ba[_0xbbf4('0x4f')])){throw new db[(_0xbbf4('0x54'))][(_0xbbf4('0x55'))]('VoiceRecording\x20not\x20found');}if(_0x2d00ba[_0xbbf4('0x57')]){return _0x26a30f[_0xbbf4('0x4c')](_0x2d00ba[_0xbbf4('0x4f')],_0x2d00ba[_0xbbf4('0x57')]+path[_0xbbf4('0x58')](_0x2d00ba[_0xbbf4('0x4f')]),function(){if(_0x5a05ef){fs[_0xbbf4('0x59')](_0x2d00ba[_0xbbf4('0x4f')]);}});}else{return _0x26a30f[_0xbbf4('0x4c')](_0x2d00ba['value'],function(_0x161ea0){if(_0x5a05ef){fs['unlink'](_0x2d00ba['value']);}});}}})[_0xbbf4('0x45')](handleError(_0x26a30f,null));};
\ No newline at end of file
+var _0x181c=['zip-dir','fast-json-patch','request-promise','bluebird','path','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','ioredis','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','limit','status','Content-Range','save','update','then','error','stack','name','rawAttributes','model','differenceBy','keys','format','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','VoiceRecording','includeAll','include','findAll','catch','show','find','create','body','params','destroy','describe','download','../../components/encryptor','uniqueid','value','%s.cypher','decryptFile','secrets','recording','existsSync','filename','extname','unlink','message','VoiceRecording\x20not\x20found','send','Not\x20found','downloads','sequelize','MD5','col','token','$and','push','Sequelize','ValidationError','html-pdf','eml-format','rimraf'];(function(_0x1e9416,_0x4c26a3){var _0x352048=function(_0x3651a3){while(--_0x3651a3){_0x1e9416['push'](_0x1e9416['shift']());}};_0x352048(++_0x4c26a3);}(_0x181c,0xbb));var _0xc181=function(_0x1b6563,_0x3bf0f1){_0x1b6563=_0x1b6563-0x0;var _0xdea7b8=_0x181c[_0x1b6563];return _0xdea7b8;};'use strict';var pdf=require(_0xc181('0x0'));var emlformat=require(_0xc181('0x1'));var rimraf=require(_0xc181('0x2'));var zipdir=require(_0xc181('0x3'));var jsonpatch=require(_0xc181('0x4'));var rp=require(_0xc181('0x5'));var moment=require('moment');var BPromise=require(_0xc181('0x6'));var Mustache=require('mustache');var util=require('util');var path=require(_0xc181('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xc181('0x8'));var fs=require('fs');var _=require(_0xc181('0x9'));var squel=require('squel');var crypto=require(_0xc181('0xa'));var jsforce=require(_0xc181('0xb'));var deskjs=require(_0xc181('0xc'));var toCsv=require(_0xc181('0xd'));var querystring=require(_0xc181('0xe'));var Papa=require('papaparse');var Redis=require(_0xc181('0xf'));var authService=require('../../components/auth/service');var qs=require('../../components/parsers/qs');var hardwareService=require(_0xc181('0x10'));var logger=require('../../config/logger')(_0xc181('0x11'));var utils=require(_0xc181('0x12'));var config=require(_0xc181('0x13'));var db=require(_0xc181('0x14'))['db'];function respondWithStatusCode(_0x5ef4df,_0xa7d599){_0xa7d599=_0xa7d599||0xcc;return function(_0x1a51d3){if(_0x1a51d3){return _0x5ef4df[_0xc181('0x15')](_0xa7d599);}return _0x5ef4df['status'](_0xa7d599)[_0xc181('0x16')]();};}function respondWithResult(_0x2b0acd,_0x4773cd){_0x4773cd=_0x4773cd||0xc8;return function(_0x456498){if(_0x456498){return _0x2b0acd['status'](_0x4773cd)[_0xc181('0x17')](_0x456498);}};}function respondWithFilteredResult(_0x2791e7,_0x44d125){return function(_0x249dfc){if(_0x249dfc){var _0x35a82f=_0x249dfc[_0xc181('0x18')],_0x25930a=_0x44d125[_0xc181('0x19')],_0xc5b7de=_0x44d125[_0xc181('0x19')]+_0x44d125[_0xc181('0x1a')],_0x5d1245;if(_0xc5b7de>=_0x35a82f){_0xc5b7de=_0x35a82f;_0x5d1245=0xc8;}else{_0x5d1245=0xce;}_0x2791e7[_0xc181('0x1b')](_0x5d1245);return _0x2791e7['set'](_0xc181('0x1c'),_0x25930a+'-'+_0xc5b7de+'/'+_0x35a82f)[_0xc181('0x17')](_0x249dfc);}return null;};}function patchUpdates(_0x1510ee){return function(_0x73208f){try{jsonpatch['apply'](_0x73208f,_0x1510ee,!![]);}catch(_0x318a67){return BPromise['reject'](_0x318a67);}return _0x73208f[_0xc181('0x1d')]();};}function saveUpdates(_0x17fb58,_0x127b1c){return function(_0x170e5a){if(_0x170e5a){return _0x170e5a[_0xc181('0x1e')](_0x17fb58)[_0xc181('0x1f')](function(_0x28520f){return _0x28520f;});}return null;};}function removeEntity(_0x19d955,_0x13a831){return function(_0x546240){if(_0x546240){return _0x546240['destroy']()[_0xc181('0x1f')](function(){_0x19d955[_0xc181('0x1b')](0xcc)[_0xc181('0x16')]();});}};}function handleEntityNotFound(_0x3ecc88,_0x58b571){return function(_0x2f9d57){if(!_0x2f9d57){_0x3ecc88[_0xc181('0x15')](0x194);}return _0x2f9d57;};}function handleError(_0x9a390f,_0x3854f7){_0x3854f7=_0x3854f7||0x1f4;return function(_0x187e2e){logger[_0xc181('0x20')](_0x187e2e[_0xc181('0x21')]);if(_0x187e2e[_0xc181('0x22')]){delete _0x187e2e['name'];}_0x9a390f[_0xc181('0x1b')](_0x3854f7)['send'](_0x187e2e);};}exports['index']=function(_0x299983,_0x5f4c43){var _0x5b3ebd={},_0x3fc10e={},_0x52ae73={'count':0x0,'rows':[]};var _0x3217f0=db['VoiceRecording'][_0xc181('0x23')];_0x3fc10e[_0xc181('0x24')]=_[_0xc181('0x25')](_[_0xc181('0x26')](_0x3217f0),[_0xc181('0x27')]);_0x3fc10e[_0xc181('0x28')]=_[_0xc181('0x26')](_0x299983[_0xc181('0x28')]);_0x3fc10e[_0xc181('0x29')]=_[_0xc181('0x2a')](_0x3fc10e[_0xc181('0x24')],_0x3fc10e['query']);_0x5b3ebd[_0xc181('0x2b')]=_[_0xc181('0x2a')](_0x3fc10e['model'],qs[_0xc181('0x2c')](_0x299983[_0xc181('0x28')]['fields']));_0x5b3ebd['attributes']=_0x5b3ebd['attributes'][_0xc181('0x2d')]?_0x5b3ebd[_0xc181('0x2b')]:_0x3fc10e[_0xc181('0x24')];if(!_0x299983[_0xc181('0x28')]['hasOwnProperty'](_0xc181('0x2e'))){_0x5b3ebd[_0xc181('0x1a')]=qs['limit'](_0x299983[_0xc181('0x28')][_0xc181('0x1a')]);_0x5b3ebd[_0xc181('0x19')]=qs[_0xc181('0x19')](_0x299983['query'][_0xc181('0x19')]);}_0x5b3ebd[_0xc181('0x2f')]=qs['sort'](_0x299983['query'][_0xc181('0x30')]);_0x5b3ebd[_0xc181('0x31')]=qs[_0xc181('0x29')](_['pick'](_0x299983[_0xc181('0x28')],_0x3fc10e[_0xc181('0x29')]));if(_0x299983['query'][_0xc181('0x32')]){_0x5b3ebd[_0xc181('0x31')]=_[_0xc181('0x33')](_0x5b3ebd['where'],{'$or':_[_0xc181('0x34')](_0x3217f0,function(_0x4729d1){if(_0x4729d1[_0xc181('0x35')][_0xc181('0x36')]!==_0xc181('0x37')){var _0x786568={};_0x786568[_0x4729d1[_0xc181('0x38')]]={'$like':'%'+_0x299983[_0xc181('0x28')][_0xc181('0x32')]+'%'};return _0x786568;}})});}_0x5b3ebd=_['merge']({},_0x5b3ebd,_0x299983[_0xc181('0x39')]);var _0x3f9dfd={'where':_0x5b3ebd['where']};return db[_0xc181('0x3a')][_0xc181('0x18')](_0x3f9dfd)[_0xc181('0x1f')](function(_0x4c5226){_0x52ae73[_0xc181('0x18')]=_0x4c5226;if(_0x299983['query'][_0xc181('0x3b')]){_0x5b3ebd[_0xc181('0x3c')]=[{'all':!![]}];}return db['VoiceRecording'][_0xc181('0x3d')](_0x5b3ebd);})['then'](function(_0x3fd6fc){_0x52ae73['rows']=_0x3fd6fc;return _0x52ae73;})['then'](respondWithFilteredResult(_0x5f4c43,_0x5b3ebd))[_0xc181('0x3e')](handleError(_0x5f4c43,null));};exports[_0xc181('0x3f')]=function(_0x147c80,_0x55aef0){var _0x301be9={'raw':![],'where':{'id':_0x147c80['params']['id']}},_0x5d2b95={};_0x5d2b95[_0xc181('0x24')]=_[_0xc181('0x26')](db[_0xc181('0x3a')][_0xc181('0x23')]);_0x5d2b95[_0xc181('0x28')]=_[_0xc181('0x26')](_0x147c80[_0xc181('0x28')]);_0x5d2b95['filters']=_[_0xc181('0x2a')](_0x5d2b95['model'],_0x5d2b95[_0xc181('0x28')]);_0x301be9[_0xc181('0x2b')]=_[_0xc181('0x2a')](_0x5d2b95[_0xc181('0x24')],qs[_0xc181('0x2c')](_0x147c80[_0xc181('0x28')]['fields']));_0x301be9[_0xc181('0x2b')]=_0x301be9[_0xc181('0x2b')][_0xc181('0x2d')]?_0x301be9['attributes']:_0x5d2b95['model'];if(_0x147c80['query'][_0xc181('0x3b')]){_0x301be9[_0xc181('0x3c')]=[{'all':!![]}];}_0x301be9=_['merge']({},_0x301be9,_0x147c80[_0xc181('0x39')]);return db['VoiceRecording'][_0xc181('0x40')](_0x301be9)[_0xc181('0x1f')](handleEntityNotFound(_0x55aef0,null))['then'](respondWithResult(_0x55aef0,null))[_0xc181('0x3e')](handleError(_0x55aef0,null));};exports[_0xc181('0x41')]=function(_0x12745f,_0xc9b46a){return db[_0xc181('0x3a')]['create'](_0x12745f['body'],{})[_0xc181('0x1f')](respondWithResult(_0xc9b46a,0xc9))['catch'](handleError(_0xc9b46a,null));};exports[_0xc181('0x1e')]=function(_0x3d3aa2,_0x22eb98){if(_0x3d3aa2[_0xc181('0x42')]['id']){delete _0x3d3aa2['body']['id'];}return db[_0xc181('0x3a')][_0xc181('0x40')]({'where':{'id':_0x3d3aa2[_0xc181('0x43')]['id']}})[_0xc181('0x1f')](handleEntityNotFound(_0x22eb98,null))['then'](saveUpdates(_0x3d3aa2[_0xc181('0x42')],null))[_0xc181('0x1f')](respondWithResult(_0x22eb98,null))[_0xc181('0x3e')](handleError(_0x22eb98,null));};exports[_0xc181('0x44')]=function(_0x1756e7,_0x3c3a3e){return db[_0xc181('0x3a')][_0xc181('0x40')]({'where':{'id':_0x1756e7['params']['id']}})[_0xc181('0x1f')](handleEntityNotFound(_0x3c3a3e,null))[_0xc181('0x1f')](removeEntity(_0x3c3a3e,null))[_0xc181('0x3e')](handleError(_0x3c3a3e,null));};exports[_0xc181('0x45')]=function(_0x2de5ed,_0x579dcd){return db[_0xc181('0x3a')][_0xc181('0x45')]()[_0xc181('0x1f')](respondWithResult(_0x579dcd,null))['catch'](handleError(_0x579dcd,null));};exports[_0xc181('0x46')]=function(_0x2c2c9b,_0xb1fa41,_0x47ab3f){var _0x127d78=require(_0xc181('0x47'));var _0x352169=![];var _0x41e7ef={};if(_0x2c2c9b['query']['type']&&_0x2c2c9b[_0xc181('0x28')][_0xc181('0x35')]==='uniqueid'){_0x41e7ef[_0xc181('0x48')]=_0x2c2c9b[_0xc181('0x43')]['id'];}else{_0x41e7ef['id']=_0x2c2c9b['params']['id'];}return db['VoiceRecording']['find']({'where':_0x41e7ef,'attributes':['id',_0xc181('0x49')],'raw':!![]})['then'](handleEntityNotFound(_0xb1fa41,null))[_0xc181('0x1f')](function(_0xd4eb40){if(_0xd4eb40){var _0xa8f7a9=_0xd4eb40[_0xc181('0x49')];var _0x5bbc81=util[_0xc181('0x27')](_0xc181('0x4a'),_0xa8f7a9);if(fs['existsSync'](_0x5bbc81)){_0x352169=!![];return _0x127d78[_0xc181('0x4b')](_0x5bbc81,_0xa8f7a9,config[_0xc181('0x4c')][_0xc181('0x4d')])[_0xc181('0x1f')](function(){return _0xd4eb40;});}return _0xd4eb40;}})['then'](function(_0x593e2f){if(_0x593e2f){var _0x57c480=_0x593e2f[_0xc181('0x49')];if(!fs[_0xc181('0x4e')](_0x57c480)){throw new db['Sequelize']['ValidationError']('VoiceRecording\x20not\x20found');}if(_0x593e2f[_0xc181('0x4f')]){return _0xb1fa41['download'](_0x57c480,_0x593e2f[_0xc181('0x4f')]+path[_0xc181('0x50')](_0x57c480),function(){if(_0x352169){fs[_0xc181('0x51')](_0x57c480);}});}else{return _0xb1fa41[_0xc181('0x46')](_0x57c480,function(_0x28d7f1){if(_0x352169){fs['unlink'](_0x57c480);}});}}})['catch'](function(_0x30d123){if(_0x30d123[_0xc181('0x52')]===_0xc181('0x53')){_0xb1fa41[_0xc181('0x1b')](0x194)[_0xc181('0x54')](_0xc181('0x55'));}else{return handleError(_0xb1fa41,null);}});};exports[_0xc181('0x56')]=function(_0x1cd873,_0x97b25f,_0x4f87cb){var _0x3eeca8=require('../../components/encryptor');var _0x474b4b=![];var _0x2d0806={'$and':[db[_0xc181('0x57')][_0xc181('0x31')](db[_0xc181('0x57')]['fn'](_0xc181('0x58'),db[_0xc181('0x57')][_0xc181('0x59')](_0xc181('0x48'))),_0x1cd873[_0xc181('0x28')][_0xc181('0x5a')])]};if(_0x1cd873['query'][_0xc181('0x35')]&&_0x1cd873[_0xc181('0x28')][_0xc181('0x35')]===_0xc181('0x48')){_0x2d0806[_0xc181('0x5b')][_0xc181('0x5c')]({'uniqueid':_0x1cd873[_0xc181('0x43')]['id']});}else{_0x2d0806['$and'][_0xc181('0x5c')]({'id':_0x1cd873[_0xc181('0x43')]['id']});}return db['VoiceRecording'][_0xc181('0x40')]({'where':_0x2d0806,'attributes':['id',_0xc181('0x49')],'raw':!![]})[_0xc181('0x1f')](handleEntityNotFound(_0x97b25f,null))[_0xc181('0x1f')](function(_0x467b36){if(_0x467b36){var _0x59e924=util[_0xc181('0x27')]('%s.cypher',_0x467b36['value']);if(fs[_0xc181('0x4e')](_0x59e924)){_0x474b4b=!![];return _0x3eeca8['decryptFile'](_0x59e924,_0x467b36[_0xc181('0x49')],config[_0xc181('0x4c')][_0xc181('0x4d')])[_0xc181('0x1f')](function(){return _0x467b36;});}return _0x467b36;}})[_0xc181('0x1f')](function(_0xa48346){if(_0xa48346){if(!fs[_0xc181('0x4e')](_0xa48346[_0xc181('0x49')])){throw new db[(_0xc181('0x5d'))][(_0xc181('0x5e'))]('VoiceRecording\x20not\x20found');}if(_0xa48346[_0xc181('0x4f')]){return _0x97b25f[_0xc181('0x46')](_0xa48346[_0xc181('0x49')],_0xa48346['filename']+path['extname'](_0xa48346['value']),function(){if(_0x474b4b){fs['unlink'](_0xa48346[_0xc181('0x49')]);}});}else{return _0x97b25f['download'](_0xa48346['value'],function(_0x375a07){if(_0x474b4b){fs[_0xc181('0x51')](_0xa48346[_0xc181('0x49')]);}});}}})[_0xc181('0x3e')](handleError(_0x97b25f,null));};
\ No newline at end of file
index 83c4278..9112b0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbdf7=['define','uniqueid','lodash','util','api','moment','request-promise','path','rimraf','../../config/environment','./voiceRecording.attributes','exports'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0xbdf7,0xda));var _0x7bdf=function(_0x3f8489,_0x37a367){_0x3f8489=_0x3f8489-0x0;var _0x547e41=_0xbdf7[_0x3f8489];return _0x547e41;};'use strict';var _=require(_0x7bdf('0x0'));var util=require(_0x7bdf('0x1'));var logger=require('../../config/logger')(_0x7bdf('0x2'));var moment=require(_0x7bdf('0x3'));var BPromise=require('bluebird');var rp=require(_0x7bdf('0x4'));var fs=require('fs');var path=require(_0x7bdf('0x5'));var rimraf=require(_0x7bdf('0x6'));var config=require(_0x7bdf('0x7'));var attributes=require(_0x7bdf('0x8'));module[_0x7bdf('0x9')]=function(_0x173676,_0x1ed818){return _0x173676[_0x7bdf('0xa')]('VoiceRecording',attributes,{'tableName':'voice_recordings','paranoid':![],'indexes':[{'name':_0x7bdf('0xb'),'fields':[_0x7bdf('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x3bb6=['rimraf','exports','define','uniqueid','lodash','../../config/logger','api','moment','bluebird','path'];(function(_0x311997,_0x4c2cc7){var _0x3be163=function(_0x289cfb){while(--_0x289cfb){_0x311997['push'](_0x311997['shift']());}};_0x3be163(++_0x4c2cc7);}(_0x3bb6,0xe0));var _0x63bb=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x3bb6[_0x3ab51d];return _0x29a04e;};'use strict';var _=require(_0x63bb('0x0'));var util=require('util');var logger=require(_0x63bb('0x1'))(_0x63bb('0x2'));var moment=require(_0x63bb('0x3'));var BPromise=require(_0x63bb('0x4'));var rp=require('request-promise');var fs=require('fs');var path=require(_0x63bb('0x5'));var rimraf=require(_0x63bb('0x6'));var config=require('../../config/environment');var attributes=require('./voiceRecording.attributes');module[_0x63bb('0x7')]=function(_0x59c710,_0x54e01a){return _0x59c710[_0x63bb('0x8')]('VoiceRecording',attributes,{'tableName':'voice_recordings','paranoid':![],'indexes':[{'name':_0x63bb('0x9'),'fields':[_0x63bb('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index e831efe..1ed69b9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x40d1=['info','request\x20sent','debug','VoiceRecording,\x20%s,\x20%s,\x20%s','stringify','error','VoiceRecording,\x20%s,\x20%s','message','result','catch','UpdateVoiceRecording','update','body','options','raw','attributes','limit','CreateVoiceRecording','../../components/encryptor','Setting','VoiceRecording','existsSync','value','format','%s.cypher','secrets','recording','CreateVoiceRecording\x20file\x20encrypted','lodash','util','moment','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','request','then'];(function(_0x5e21bf,_0x3e3a7a){var _0x407f91=function(_0x37afa5){while(--_0x37afa5){_0x5e21bf['push'](_0x5e21bf['shift']());}};_0x407f91(++_0x3e3a7a);}(_0x40d1,0xb4));var _0x140d=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0x40d1[_0x3bf83f];return _0x22c4a9;};'use strict';var _=require(_0x140d('0x0'));var util=require(_0x140d('0x1'));var moment=require(_0x140d('0x2'));var BPromise=require('bluebird');var rs=require(_0x140d('0x3'));var fs=require('fs');var Redis=require(_0x140d('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x140d('0x5'));var logger=require(_0x140d('0x6'))('rpc');var config=require(_0x140d('0x7'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x1c6da1,_0xe5a974,_0x38c6c1){return new BPromise(function(_0x306994,_0x566df5){return client[_0x140d('0x8')](_0x1c6da1,_0x38c6c1)[_0x140d('0x9')](function(_0x49c758){logger[_0x140d('0xa')]('VoiceRecording,\x20%s,\x20%s',_0xe5a974,_0x140d('0xb'));logger[_0x140d('0xc')](_0x140d('0xd'),_0xe5a974,_0x140d('0xb'),JSON[_0x140d('0xe')](_0x49c758));if(_0x49c758[_0x140d('0xf')]){if(_0x49c758[_0x140d('0xf')]['code']===0x1f4){logger[_0x140d('0xf')]('VoiceRecording,\x20%s,\x20%s',_0xe5a974,_0x49c758[_0x140d('0xf')]['message']);return _0x566df5(_0x49c758['error']['message']);}logger['error'](_0x140d('0x10'),_0xe5a974,_0x49c758['error'][_0x140d('0x11')]);return _0x306994(_0x49c758[_0x140d('0xf')][_0x140d('0x11')]);}else{logger['info'](_0x140d('0x10'),_0xe5a974,_0x140d('0xb'));_0x306994(_0x49c758[_0x140d('0x12')]['message']);}})[_0x140d('0x13')](function(_0x2bab61){logger['error'](_0x140d('0x10'),_0xe5a974,_0x2bab61);_0x566df5(_0x2bab61);});});}exports[_0x140d('0x14')]=function(_0x145721){var _0x3039e5=this;return new Promise(function(_0x2f0c2a,_0x220da1){return db['VoiceRecording'][_0x140d('0x15')](_0x145721[_0x140d('0x16')],{'raw':_0x145721[_0x140d('0x17')]?_0x145721[_0x140d('0x17')][_0x140d('0x18')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x145721[_0x140d('0x17')]?_0x145721[_0x140d('0x17')]['where']||null:null,'attributes':_0x145721['options']?_0x145721[_0x140d('0x17')][_0x140d('0x19')]||null:null,'limit':_0x145721[_0x140d('0x17')]?_0x145721['options'][_0x140d('0x1a')]||null:null})[_0x140d('0x9')](function(_0xb6ed74){logger[_0x140d('0xa')](_0x140d('0x14'),_0x145721);logger[_0x140d('0xc')](_0x140d('0x14'),_0x145721,JSON['stringify'](_0xb6ed74));_0x2f0c2a(_0xb6ed74);})['catch'](function(_0xf4510c){logger[_0x140d('0xf')](_0x140d('0x14'),_0xf4510c['message'],_0x145721);_0x220da1(_0x3039e5['error'](0x1f4,_0xf4510c[_0x140d('0x11')]));});});};exports[_0x140d('0x1b')]=function(_0x49c1cd){var _0x2d9fb5=this;return new Promise(function(_0x58b239,_0x2a204c){var _0x48362b=require(_0x140d('0x1c'));var _0x214967;return db[_0x140d('0x1d')]['findOne']({'attributes':['id','callRecordingEncryption'],'where':{'id':0x1},'raw':!![]})[_0x140d('0x9')](function(_0x108e6d){_0x214967=_0x108e6d;return db[_0x140d('0x1e')]['create'](_0x49c1cd['body']);})[_0x140d('0x9')](function(_0x19472b){if(_0x214967['callRecordingEncryption']&&fs[_0x140d('0x1f')](_0x19472b[_0x140d('0x20')])){var _0x3d38f8=util[_0x140d('0x21')](_0x140d('0x22'),_0x19472b[_0x140d('0x20')]);return _0x48362b['encryptFile'](_0x19472b[_0x140d('0x20')],_0x3d38f8,config[_0x140d('0x23')][_0x140d('0x24')])['then'](function(){fs['unlink'](_0x19472b['value']);logger[_0x140d('0xa')](_0x140d('0x25'));return _0x19472b;});}return _0x19472b;})['then'](function(_0x58d730){logger[_0x140d('0xa')](_0x140d('0x1b'),_0x49c1cd);logger[_0x140d('0xc')](_0x140d('0x1b'),_0x49c1cd,JSON[_0x140d('0xe')](_0x58d730));_0x58b239(_0x58d730);})[_0x140d('0x13')](function(_0x178547){logger[_0x140d('0xf')](_0x140d('0x1b'),_0x178547[_0x140d('0x11')],_0x49c1cd);_0x2a204c(_0x2d9fb5[_0x140d('0xf')](0x1f4,_0x178547['message']));});});};
\ No newline at end of file
+var _0x07d0=['VoiceRecording','update','body','options','raw','attributes','limit','debug','CreateVoiceRecording','../../components/encryptor','Setting','findOne','callRecordingEncryption','create','value','%s.cypher','encryptFile','secrets','recording','CreateVoiceRecording\x20file\x20encrypted','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','client','then','info','VoiceRecording,\x20%s,\x20%s','request\x20sent','VoiceRecording,\x20%s,\x20%s,\x20%s','error','message','result','catch','UpdateVoiceRecording'];(function(_0x1035c1,_0x2d8583){var _0x308d67=function(_0x58ddb6){while(--_0x58ddb6){_0x1035c1['push'](_0x1035c1['shift']());}};_0x308d67(++_0x2d8583);}(_0x07d0,0x15c));var _0x007d=function(_0xda464c,_0x26e47d){_0xda464c=_0xda464c-0x0;var _0x19e222=_0x07d0[_0xda464c];return _0x19e222;};'use strict';var _=require(_0x007d('0x0'));var util=require(_0x007d('0x1'));var moment=require(_0x007d('0x2'));var BPromise=require(_0x007d('0x3'));var rs=require(_0x007d('0x4'));var fs=require('fs');var Redis=require(_0x007d('0x5'));var db=require(_0x007d('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0x007d('0x7'))(_0x007d('0x8'));var config=require(_0x007d('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x007d('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x287b1f,_0x2250e3,_0x377971){return new BPromise(function(_0x29eb5e,_0x31e3af){return client['request'](_0x287b1f,_0x377971)[_0x007d('0xb')](function(_0x3f2312){logger[_0x007d('0xc')](_0x007d('0xd'),_0x2250e3,_0x007d('0xe'));logger['debug'](_0x007d('0xf'),_0x2250e3,_0x007d('0xe'),JSON['stringify'](_0x3f2312));if(_0x3f2312['error']){if(_0x3f2312['error']['code']===0x1f4){logger[_0x007d('0x10')](_0x007d('0xd'),_0x2250e3,_0x3f2312[_0x007d('0x10')][_0x007d('0x11')]);return _0x31e3af(_0x3f2312[_0x007d('0x10')]['message']);}logger['error'](_0x007d('0xd'),_0x2250e3,_0x3f2312[_0x007d('0x10')][_0x007d('0x11')]);return _0x29eb5e(_0x3f2312['error'][_0x007d('0x11')]);}else{logger[_0x007d('0xc')](_0x007d('0xd'),_0x2250e3,_0x007d('0xe'));_0x29eb5e(_0x3f2312[_0x007d('0x12')][_0x007d('0x11')]);}})[_0x007d('0x13')](function(_0x3c9d10){logger[_0x007d('0x10')](_0x007d('0xd'),_0x2250e3,_0x3c9d10);_0x31e3af(_0x3c9d10);});});}exports[_0x007d('0x14')]=function(_0xb3b4e2){var _0x4c3bd9=this;return new Promise(function(_0x4b4bcb,_0x1d035e){return db[_0x007d('0x15')][_0x007d('0x16')](_0xb3b4e2[_0x007d('0x17')],{'raw':_0xb3b4e2[_0x007d('0x18')]?_0xb3b4e2[_0x007d('0x18')][_0x007d('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0xb3b4e2['options']?_0xb3b4e2[_0x007d('0x18')]['where']||null:null,'attributes':_0xb3b4e2[_0x007d('0x18')]?_0xb3b4e2[_0x007d('0x18')][_0x007d('0x1a')]||null:null,'limit':_0xb3b4e2['options']?_0xb3b4e2[_0x007d('0x18')][_0x007d('0x1b')]||null:null})[_0x007d('0xb')](function(_0x2c497a){logger[_0x007d('0xc')](_0x007d('0x14'),_0xb3b4e2);logger[_0x007d('0x1c')](_0x007d('0x14'),_0xb3b4e2,JSON['stringify'](_0x2c497a));_0x4b4bcb(_0x2c497a);})[_0x007d('0x13')](function(_0x541677){logger['error'](_0x007d('0x14'),_0x541677[_0x007d('0x11')],_0xb3b4e2);_0x1d035e(_0x4c3bd9[_0x007d('0x10')](0x1f4,_0x541677[_0x007d('0x11')]));});});};exports[_0x007d('0x1d')]=function(_0x5ee07d){var _0x34b0a6=this;return new Promise(function(_0x16bc0a,_0xc4cbed){var _0x455bb3=require(_0x007d('0x1e'));var _0x38fc15;return db[_0x007d('0x1f')][_0x007d('0x20')]({'attributes':['id',_0x007d('0x21')],'where':{'id':0x1},'raw':!![]})['then'](function(_0x552008){_0x38fc15=_0x552008;return db[_0x007d('0x15')][_0x007d('0x22')](_0x5ee07d[_0x007d('0x17')]);})[_0x007d('0xb')](function(_0xebfe43){if(_0x38fc15[_0x007d('0x21')]&&fs['existsSync'](_0xebfe43[_0x007d('0x23')])){var _0x55bee3=util['format'](_0x007d('0x24'),_0xebfe43[_0x007d('0x23')]);return _0x455bb3[_0x007d('0x25')](_0xebfe43[_0x007d('0x23')],_0x55bee3,config[_0x007d('0x26')][_0x007d('0x27')])['then'](function(){fs['unlink'](_0xebfe43[_0x007d('0x23')]);logger[_0x007d('0xc')](_0x007d('0x28'));return _0xebfe43;});}return _0xebfe43;})[_0x007d('0xb')](function(_0xc91298){logger[_0x007d('0xc')](_0x007d('0x1d'),_0x5ee07d);logger['debug'](_0x007d('0x1d'),_0x5ee07d,JSON['stringify'](_0xc91298));_0x16bc0a(_0xc91298);})[_0x007d('0x13')](function(_0x5c4e26){logger[_0x007d('0x10')]('CreateVoiceRecording',_0x5c4e26['message'],_0x5ee07d);_0xc4cbed(_0x34b0a6[_0x007d('0x10')](0x1f4,_0x5c4e26[_0x007d('0x11')]));});});};
\ No newline at end of file
index 523f043..a1fdc43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x86b5=['../../components/interaction/service','../../config/environment','./voiceTransferReport.controller','get','isAuthenticated','index','/:id','show','post','create','update','destroy','exports','multer','path','connect-timeout','express'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x86b5,0x1e9));var _0x586b=function(_0x5db313,_0x3c8f0c){_0x5db313=_0x5db313-0x0;var _0x36d503=_0x86b5[_0x5db313];return _0x36d503;};'use strict';var multer=require(_0x586b('0x0'));var util=require('util');var path=require(_0x586b('0x1'));var timeout=require(_0x586b('0x2'));var express=require(_0x586b('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x586b('0x4'));var config=require(_0x586b('0x5'));var controller=require(_0x586b('0x6'));router[_0x586b('0x7')]('/',auth[_0x586b('0x8')](),controller[_0x586b('0x9')]);router[_0x586b('0x7')](_0x586b('0xa'),auth['isAuthenticated'](),controller[_0x586b('0xb')]);router[_0x586b('0xc')]('/',auth[_0x586b('0x8')](),controller[_0x586b('0xd')]);router['put'](_0x586b('0xa'),auth[_0x586b('0x8')](),controller[_0x586b('0xe')]);router['delete'](_0x586b('0xa'),auth[_0x586b('0x8')](),controller[_0x586b('0xf')]);module[_0x586b('0x10')]=router;
\ No newline at end of file
+var _0x5ae6=['put','update','delete','/:id','destroy','exports','path','connect-timeout','Router','../../components/interaction/service','../../config/environment','./voiceTransferReport.controller','get','isAuthenticated','index','show','post','create'];(function(_0x483ba7,_0x1f23ed){var _0x3d967c=function(_0x5a37a8){while(--_0x5a37a8){_0x483ba7['push'](_0x483ba7['shift']());}};_0x3d967c(++_0x1f23ed);}(_0x5ae6,0x15c));var _0x65ae=function(_0x1ca4c3,_0x554126){_0x1ca4c3=_0x1ca4c3-0x0;var _0x4426a6=_0x5ae6[_0x1ca4c3];return _0x4426a6;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x65ae('0x0'));var timeout=require(_0x65ae('0x1'));var express=require('express');var router=express[_0x65ae('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0x65ae('0x3'));var config=require(_0x65ae('0x4'));var controller=require(_0x65ae('0x5'));router[_0x65ae('0x6')]('/',auth[_0x65ae('0x7')](),controller[_0x65ae('0x8')]);router[_0x65ae('0x6')]('/:id',auth[_0x65ae('0x7')](),controller[_0x65ae('0x9')]);router[_0x65ae('0xa')]('/',auth[_0x65ae('0x7')](),controller[_0x65ae('0xb')]);router[_0x65ae('0xc')]('/:id',auth['isAuthenticated'](),controller[_0x65ae('0xd')]);router[_0x65ae('0xe')](_0x65ae('0xf'),auth['isAuthenticated'](),controller[_0x65ae('0x10')]);module[_0x65ae('0x11')]=router;
\ No newline at end of file
index 134e872..94105a2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x40a4=['ENUM','Yes','sequelize','moment','attended','STRING'];(function(_0x4709c0,_0x3396c7){var _0x13348b=function(_0x426235){while(--_0x426235){_0x4709c0['push'](_0x4709c0['shift']());}};_0x13348b(++_0x3396c7);}(_0x40a4,0x1b2));var _0x440a=function(_0x598a2d,_0x546ebc){_0x598a2d=_0x598a2d-0x0;var _0x138044=_0x40a4[_0x598a2d];return _0x138044;};'use strict';var Sequelize=require(_0x440a('0x0'));var moment=require(_0x440a('0x1'));module['exports']={'type':{'type':Sequelize['ENUM']('blind',_0x440a('0x2'))},'result':{'type':Sequelize[_0x440a('0x3')]},'transfererchannel':{'type':Sequelize[_0x440a('0x3')]},'transferercalleridnum':{'type':Sequelize['STRING']},'transferercalleridname':{'type':Sequelize[_0x440a('0x3')]},'transfererconnectedlinenum':{'type':Sequelize[_0x440a('0x3')]},'transfererconnectedlinename':{'type':Sequelize[_0x440a('0x3')]},'transfereraccountcode':{'type':Sequelize[_0x440a('0x3')]},'transferercontext':{'type':Sequelize[_0x440a('0x3')]},'transfererexten':{'type':Sequelize['STRING']},'transfererlinkedid':{'type':Sequelize[_0x440a('0x3')]},'transfereechannel':{'type':Sequelize[_0x440a('0x3')]},'transfereecalleridnum':{'type':Sequelize[_0x440a('0x3')]},'transfereecalleridname':{'type':Sequelize['STRING']},'transfereeconnectedlinenum':{'type':Sequelize[_0x440a('0x3')]},'transfereeconnectedlinename':{'type':Sequelize[_0x440a('0x3')]},'transfereeaccountcode':{'type':Sequelize['STRING']},'transfereecontext':{'type':Sequelize['STRING']},'transfereeexten':{'type':Sequelize[_0x440a('0x3')]},'transfereelinkedid':{'type':Sequelize[_0x440a('0x3')]},'isexternal':{'type':Sequelize[_0x440a('0x4')](_0x440a('0x5'),'No')},'context':{'type':Sequelize['STRING']},'extension':{'type':Sequelize[_0x440a('0x3')]}};
\ No newline at end of file
+var _0xc000=['sequelize','exports','ENUM','blind','STRING','Yes'];(function(_0x16211b,_0x429296){var _0x13d940=function(_0x3ae149){while(--_0x3ae149){_0x16211b['push'](_0x16211b['shift']());}};_0x13d940(++_0x429296);}(_0xc000,0xcc));var _0x0c00=function(_0x155bc5,_0x209dd6){_0x155bc5=_0x155bc5-0x0;var _0x471f43=_0xc000[_0x155bc5];return _0x471f43;};'use strict';var Sequelize=require(_0x0c00('0x0'));var moment=require('moment');module[_0x0c00('0x1')]={'type':{'type':Sequelize[_0x0c00('0x2')](_0x0c00('0x3'),'attended')},'result':{'type':Sequelize[_0x0c00('0x4')]},'transfererchannel':{'type':Sequelize[_0x0c00('0x4')]},'transferercalleridnum':{'type':Sequelize[_0x0c00('0x4')]},'transferercalleridname':{'type':Sequelize[_0x0c00('0x4')]},'transfererconnectedlinenum':{'type':Sequelize[_0x0c00('0x4')]},'transfererconnectedlinename':{'type':Sequelize[_0x0c00('0x4')]},'transfereraccountcode':{'type':Sequelize[_0x0c00('0x4')]},'transferercontext':{'type':Sequelize[_0x0c00('0x4')]},'transfererexten':{'type':Sequelize[_0x0c00('0x4')]},'transfererlinkedid':{'type':Sequelize[_0x0c00('0x4')]},'transfereechannel':{'type':Sequelize[_0x0c00('0x4')]},'transfereecalleridnum':{'type':Sequelize[_0x0c00('0x4')]},'transfereecalleridname':{'type':Sequelize['STRING']},'transfereeconnectedlinenum':{'type':Sequelize[_0x0c00('0x4')]},'transfereeconnectedlinename':{'type':Sequelize[_0x0c00('0x4')]},'transfereeaccountcode':{'type':Sequelize[_0x0c00('0x4')]},'transfereecontext':{'type':Sequelize[_0x0c00('0x4')]},'transfereeexten':{'type':Sequelize[_0x0c00('0x4')]},'transfereelinkedid':{'type':Sequelize[_0x0c00('0x4')]},'isexternal':{'type':Sequelize['ENUM'](_0x0c00('0x5'),'No')},'context':{'type':Sequelize[_0x0c00('0x4')]},'extension':{'type':Sequelize[_0x0c00('0x4')]}};
\ No newline at end of file
index 841a1af..213106b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x88b0=['rawAttributes','query','keys','filters','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','limit','order','where','pick','filter','merge','map','type','key','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','update','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','util','path','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','ioredis','../../components/parsers/qs','../../config/logger','api','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','then','destroy','error','stack','name','send','VoiceTransferReport'];(function(_0x59f4c4,_0x5c5a06){var _0x2059a1=function(_0x497cf1){while(--_0x497cf1){_0x59f4c4['push'](_0x59f4c4['shift']());}};_0x2059a1(++_0x5c5a06);}(_0x88b0,0x1cb));var _0x088b=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x88b0[_0x3b380d];return _0x54502b;};'use strict';var pdf=require(_0x088b('0x0'));var emlformat=require(_0x088b('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x088b('0x2'));var rp=require(_0x088b('0x3'));var moment=require(_0x088b('0x4'));var BPromise=require(_0x088b('0x5'));var Mustache=require('mustache');var util=require(_0x088b('0x6'));var path=require(_0x088b('0x7'));var sox=require(_0x088b('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x088b('0x9'));var squel=require(_0x088b('0xa'));var crypto=require(_0x088b('0xb'));var jsforce=require(_0x088b('0xc'));var deskjs=require(_0x088b('0xd'));var toCsv=require(_0x088b('0xe'));var querystring=require(_0x088b('0xf'));var Papa=require('papaparse');var Redis=require(_0x088b('0x10'));var authService=require('../../components/auth/service');var qs=require(_0x088b('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x088b('0x12'))(_0x088b('0x13'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x088b('0x14'))['db'];function respondWithStatusCode(_0x290c6c,_0x37bf38){_0x37bf38=_0x37bf38||0xcc;return function(_0x4c8a3b){if(_0x4c8a3b){return _0x290c6c[_0x088b('0x15')](_0x37bf38);}return _0x290c6c[_0x088b('0x16')](_0x37bf38)[_0x088b('0x17')]();};}function respondWithResult(_0x4fa81a,_0x1d2829){_0x1d2829=_0x1d2829||0xc8;return function(_0x2a1e5c){if(_0x2a1e5c){return _0x4fa81a[_0x088b('0x16')](_0x1d2829)[_0x088b('0x18')](_0x2a1e5c);}};}function respondWithFilteredResult(_0x1ec5e5,_0x3d659d){return function(_0x462392){if(_0x462392){var _0x500ed5=_0x462392[_0x088b('0x19')],_0x393335=_0x3d659d[_0x088b('0x1a')],_0x1c1096=_0x3d659d[_0x088b('0x1a')]+_0x3d659d['limit'],_0x458b47;if(_0x1c1096>=_0x500ed5){_0x1c1096=_0x500ed5;_0x458b47=0xc8;}else{_0x458b47=0xce;}_0x1ec5e5[_0x088b('0x16')](_0x458b47);return _0x1ec5e5[_0x088b('0x1b')](_0x088b('0x1c'),_0x393335+'-'+_0x1c1096+'/'+_0x500ed5)[_0x088b('0x18')](_0x462392);}return null;};}function patchUpdates(_0x3ec861){return function(_0x48a089){try{jsonpatch['apply'](_0x48a089,_0x3ec861,!![]);}catch(_0x35e006){return BPromise[_0x088b('0x1d')](_0x35e006);}return _0x48a089[_0x088b('0x1e')]();};}function saveUpdates(_0x376c8c,_0x3c9c1d){return function(_0x6ecfbe){if(_0x6ecfbe){return _0x6ecfbe['update'](_0x376c8c)[_0x088b('0x1f')](function(_0x293604){return _0x293604;});}return null;};}function removeEntity(_0x435162,_0x52be15){return function(_0x52f955){if(_0x52f955){return _0x52f955[_0x088b('0x20')]()[_0x088b('0x1f')](function(){_0x435162[_0x088b('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x187350,_0xcfc1c6){return function(_0x5a9cbf){if(!_0x5a9cbf){_0x187350['sendStatus'](0x194);}return _0x5a9cbf;};}function handleError(_0x48bbaa,_0x282156){_0x282156=_0x282156||0x1f4;return function(_0x4e88fb){logger[_0x088b('0x21')](_0x4e88fb[_0x088b('0x22')]);if(_0x4e88fb[_0x088b('0x23')]){delete _0x4e88fb[_0x088b('0x23')];}_0x48bbaa[_0x088b('0x16')](_0x282156)[_0x088b('0x24')](_0x4e88fb);};}exports['index']=function(_0x339eb9,_0x3f0b01){var _0x3da9e1={},_0x5f20de={},_0x24f8e6={'count':0x0,'rows':[]};var _0x1ab855=db[_0x088b('0x25')][_0x088b('0x26')];_0x5f20de['model']=_['keys'](_0x1ab855);_0x5f20de[_0x088b('0x27')]=_[_0x088b('0x28')](_0x339eb9[_0x088b('0x27')]);_0x5f20de[_0x088b('0x29')]=_[_0x088b('0x2a')](_0x5f20de['model'],_0x5f20de[_0x088b('0x27')]);_0x3da9e1[_0x088b('0x2b')]=_[_0x088b('0x2a')](_0x5f20de[_0x088b('0x2c')],qs[_0x088b('0x2d')](_0x339eb9['query'][_0x088b('0x2d')]));_0x3da9e1[_0x088b('0x2b')]=_0x3da9e1[_0x088b('0x2b')][_0x088b('0x2e')]?_0x3da9e1[_0x088b('0x2b')]:_0x5f20de[_0x088b('0x2c')];if(!_0x339eb9[_0x088b('0x27')][_0x088b('0x2f')](_0x088b('0x30'))){_0x3da9e1[_0x088b('0x31')]=qs[_0x088b('0x31')](_0x339eb9['query'][_0x088b('0x31')]);_0x3da9e1[_0x088b('0x1a')]=qs[_0x088b('0x1a')](_0x339eb9[_0x088b('0x27')]['offset']);}_0x3da9e1[_0x088b('0x32')]=qs['sort'](_0x339eb9[_0x088b('0x27')]['sort']);_0x3da9e1[_0x088b('0x33')]=qs[_0x088b('0x29')](_[_0x088b('0x34')](_0x339eb9[_0x088b('0x27')],_0x5f20de[_0x088b('0x29')]));if(_0x339eb9[_0x088b('0x27')][_0x088b('0x35')]){_0x3da9e1['where']=_[_0x088b('0x36')](_0x3da9e1[_0x088b('0x33')],{'$or':_[_0x088b('0x37')](_0x1ab855,function(_0x4dcd8d){if(_0x4dcd8d[_0x088b('0x38')][_0x088b('0x39')]!=='VIRTUAL'){var _0x1aa6bb={};_0x1aa6bb[_0x4dcd8d[_0x088b('0x3a')]]={'$like':'%'+_0x339eb9[_0x088b('0x27')][_0x088b('0x35')]+'%'};return _0x1aa6bb;}})});}_0x3da9e1=_['merge']({},_0x3da9e1,_0x339eb9[_0x088b('0x3b')]);var _0x4ba0f4={'where':_0x3da9e1[_0x088b('0x33')]};return db[_0x088b('0x25')][_0x088b('0x19')](_0x4ba0f4)['then'](function(_0x804436){_0x24f8e6['count']=_0x804436;if(_0x339eb9[_0x088b('0x27')][_0x088b('0x3c')]){_0x3da9e1[_0x088b('0x3d')]=[{'all':!![]}];}return db[_0x088b('0x25')][_0x088b('0x3e')](_0x3da9e1);})[_0x088b('0x1f')](function(_0x258ee4){_0x24f8e6[_0x088b('0x3f')]=_0x258ee4;return _0x24f8e6;})['then'](respondWithFilteredResult(_0x3f0b01,_0x3da9e1))[_0x088b('0x40')](handleError(_0x3f0b01,null));};exports[_0x088b('0x41')]=function(_0xce5ffc,_0x5f4ee8){var _0x2a0e13={'raw':!![],'where':{'id':_0xce5ffc[_0x088b('0x42')]['id']}},_0x20c37d={};_0x20c37d['model']=_['keys'](db['VoiceTransferReport']['rawAttributes']);_0x20c37d[_0x088b('0x27')]=_[_0x088b('0x28')](_0xce5ffc[_0x088b('0x27')]);_0x20c37d[_0x088b('0x29')]=_[_0x088b('0x2a')](_0x20c37d[_0x088b('0x2c')],_0x20c37d['query']);_0x2a0e13[_0x088b('0x2b')]=_['intersection'](_0x20c37d['model'],qs['fields'](_0xce5ffc['query'][_0x088b('0x2d')]));_0x2a0e13[_0x088b('0x2b')]=_0x2a0e13[_0x088b('0x2b')][_0x088b('0x2e')]?_0x2a0e13[_0x088b('0x2b')]:_0x20c37d[_0x088b('0x2c')];if(_0xce5ffc[_0x088b('0x27')][_0x088b('0x3c')]){_0x2a0e13[_0x088b('0x3d')]=[{'all':!![]}];}_0x2a0e13=_[_0x088b('0x36')]({},_0x2a0e13,_0xce5ffc[_0x088b('0x3b')]);return db['VoiceTransferReport'][_0x088b('0x43')](_0x2a0e13)[_0x088b('0x1f')](handleEntityNotFound(_0x5f4ee8,null))[_0x088b('0x1f')](respondWithResult(_0x5f4ee8,null))[_0x088b('0x40')](handleError(_0x5f4ee8,null));};exports['create']=function(_0x4171c3,_0x58e039){return db[_0x088b('0x25')][_0x088b('0x44')](_0x4171c3[_0x088b('0x45')],{})['then'](respondWithResult(_0x58e039,0xc9))[_0x088b('0x40')](handleError(_0x58e039,null));};exports[_0x088b('0x46')]=function(_0x266e8b,_0x1dbf16){if(_0x266e8b[_0x088b('0x45')]['id']){delete _0x266e8b[_0x088b('0x45')]['id'];}return db[_0x088b('0x25')][_0x088b('0x43')]({'where':{'id':_0x266e8b[_0x088b('0x42')]['id']}})['then'](handleEntityNotFound(_0x1dbf16,null))[_0x088b('0x1f')](saveUpdates(_0x266e8b[_0x088b('0x45')],null))[_0x088b('0x1f')](respondWithResult(_0x1dbf16,null))[_0x088b('0x40')](handleError(_0x1dbf16,null));};exports[_0x088b('0x20')]=function(_0x301212,_0x32d95a){return db[_0x088b('0x25')]['find']({'where':{'id':_0x301212[_0x088b('0x42')]['id']}})[_0x088b('0x1f')](handleEntityNotFound(_0x32d95a,null))[_0x088b('0x1f')](removeEntity(_0x32d95a,null))[_0x088b('0x40')](handleError(_0x32d95a,null));};
\ No newline at end of file
+var _0xce68=['jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','Content-Range','json','reject','update','then','destroy','name','send','index','VoiceTransferReport','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','merge','where','type','key','VIRTUAL','field','include','findAll','catch','show','params','includeAll','options','find','create','body','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','to-csv','ejs','crypto'];(function(_0x54ef48,_0x783269){var _0x24eb39=function(_0x3488ca){while(--_0x3488ca){_0x54ef48['push'](_0x54ef48['shift']());}};_0x24eb39(++_0x783269);}(_0xce68,0x10c));var _0x8ce6=function(_0x3ce167,_0x1afd04){_0x3ce167=_0x3ce167-0x0;var _0xafb35b=_0xce68[_0x3ce167];return _0xafb35b;};'use strict';var pdf=require(_0x8ce6('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x8ce6('0x1'));var zipdir=require(_0x8ce6('0x2'));var jsonpatch=require(_0x8ce6('0x3'));var rp=require(_0x8ce6('0x4'));var moment=require(_0x8ce6('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x8ce6('0x6'));var util=require(_0x8ce6('0x7'));var path=require(_0x8ce6('0x8'));var sox=require('sox');var csv=require(_0x8ce6('0x9'));var ejs=require(_0x8ce6('0xa'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x8ce6('0xb'));var jsforce=require(_0x8ce6('0xc'));var deskjs=require(_0x8ce6('0xd'));var toCsv=require(_0x8ce6('0x9'));var querystring=require('querystring');var Papa=require(_0x8ce6('0xe'));var Redis=require(_0x8ce6('0xf'));var authService=require(_0x8ce6('0x10'));var qs=require(_0x8ce6('0x11'));var hardwareService=require(_0x8ce6('0x12'));var logger=require(_0x8ce6('0x13'))(_0x8ce6('0x14'));var utils=require(_0x8ce6('0x15'));var config=require(_0x8ce6('0x16'));var db=require(_0x8ce6('0x17'))['db'];function respondWithStatusCode(_0x3476c1,_0x461841){_0x461841=_0x461841||0xcc;return function(_0x301a9b){if(_0x301a9b){return _0x3476c1[_0x8ce6('0x18')](_0x461841);}return _0x3476c1[_0x8ce6('0x19')](_0x461841)[_0x8ce6('0x1a')]();};}function respondWithResult(_0x38252e,_0x1d7aaf){_0x1d7aaf=_0x1d7aaf||0xc8;return function(_0x4a68fd){if(_0x4a68fd){return _0x38252e[_0x8ce6('0x19')](_0x1d7aaf)['json'](_0x4a68fd);}};}function respondWithFilteredResult(_0x216eb7,_0x349b16){return function(_0x150f89){if(_0x150f89){var _0x2ac4b3=_0x150f89[_0x8ce6('0x1b')],_0x2c2d7e=_0x349b16[_0x8ce6('0x1c')],_0x34cce2=_0x349b16[_0x8ce6('0x1c')]+_0x349b16['limit'],_0x25aa78;if(_0x34cce2>=_0x2ac4b3){_0x34cce2=_0x2ac4b3;_0x25aa78=0xc8;}else{_0x25aa78=0xce;}_0x216eb7[_0x8ce6('0x19')](_0x25aa78);return _0x216eb7['set'](_0x8ce6('0x1d'),_0x2c2d7e+'-'+_0x34cce2+'/'+_0x2ac4b3)[_0x8ce6('0x1e')](_0x150f89);}return null;};}function patchUpdates(_0xb18a16){return function(_0x50e2f7){try{jsonpatch['apply'](_0x50e2f7,_0xb18a16,!![]);}catch(_0x30e233){return BPromise[_0x8ce6('0x1f')](_0x30e233);}return _0x50e2f7['save']();};}function saveUpdates(_0x1876eb,_0x1b2602){return function(_0x444cba){if(_0x444cba){return _0x444cba[_0x8ce6('0x20')](_0x1876eb)[_0x8ce6('0x21')](function(_0x1b2b91){return _0x1b2b91;});}return null;};}function removeEntity(_0x5709d,_0x34c00f){return function(_0x2fef1c){if(_0x2fef1c){return _0x2fef1c[_0x8ce6('0x22')]()[_0x8ce6('0x21')](function(){_0x5709d[_0x8ce6('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x462c8b,_0x5e5702){return function(_0xdf5830){if(!_0xdf5830){_0x462c8b[_0x8ce6('0x18')](0x194);}return _0xdf5830;};}function handleError(_0x1c8ed7,_0x4a4316){_0x4a4316=_0x4a4316||0x1f4;return function(_0x4862b0){logger['error'](_0x4862b0['stack']);if(_0x4862b0[_0x8ce6('0x23')]){delete _0x4862b0[_0x8ce6('0x23')];}_0x1c8ed7[_0x8ce6('0x19')](_0x4a4316)[_0x8ce6('0x24')](_0x4862b0);};}exports[_0x8ce6('0x25')]=function(_0xadc624,_0x526e9e){var _0x5656ab={},_0x1233b0={},_0x6a0f99={'count':0x0,'rows':[]};var _0x31bf49=db[_0x8ce6('0x26')][_0x8ce6('0x27')];_0x1233b0[_0x8ce6('0x28')]=_['keys'](_0x31bf49);_0x1233b0['query']=_[_0x8ce6('0x29')](_0xadc624[_0x8ce6('0x2a')]);_0x1233b0[_0x8ce6('0x2b')]=_['intersection'](_0x1233b0[_0x8ce6('0x28')],_0x1233b0[_0x8ce6('0x2a')]);_0x5656ab[_0x8ce6('0x2c')]=_[_0x8ce6('0x2d')](_0x1233b0['model'],qs[_0x8ce6('0x2e')](_0xadc624[_0x8ce6('0x2a')]['fields']));_0x5656ab['attributes']=_0x5656ab[_0x8ce6('0x2c')][_0x8ce6('0x2f')]?_0x5656ab[_0x8ce6('0x2c')]:_0x1233b0[_0x8ce6('0x28')];if(!_0xadc624[_0x8ce6('0x2a')][_0x8ce6('0x30')](_0x8ce6('0x31'))){_0x5656ab[_0x8ce6('0x32')]=qs[_0x8ce6('0x32')](_0xadc624[_0x8ce6('0x2a')][_0x8ce6('0x32')]);_0x5656ab[_0x8ce6('0x1c')]=qs[_0x8ce6('0x1c')](_0xadc624[_0x8ce6('0x2a')][_0x8ce6('0x1c')]);}_0x5656ab[_0x8ce6('0x33')]=qs[_0x8ce6('0x34')](_0xadc624[_0x8ce6('0x2a')][_0x8ce6('0x34')]);_0x5656ab['where']=qs[_0x8ce6('0x2b')](_[_0x8ce6('0x35')](_0xadc624[_0x8ce6('0x2a')],_0x1233b0[_0x8ce6('0x2b')]));if(_0xadc624[_0x8ce6('0x2a')]['filter']){_0x5656ab['where']=_[_0x8ce6('0x36')](_0x5656ab[_0x8ce6('0x37')],{'$or':_['map'](_0x31bf49,function(_0x5199b4){if(_0x5199b4[_0x8ce6('0x38')][_0x8ce6('0x39')]!==_0x8ce6('0x3a')){var _0x32f26e={};_0x32f26e[_0x5199b4[_0x8ce6('0x3b')]]={'$like':'%'+_0xadc624[_0x8ce6('0x2a')]['filter']+'%'};return _0x32f26e;}})});}_0x5656ab=_[_0x8ce6('0x36')]({},_0x5656ab,_0xadc624['options']);var _0x14deb3={'where':_0x5656ab['where']};return db[_0x8ce6('0x26')][_0x8ce6('0x1b')](_0x14deb3)[_0x8ce6('0x21')](function(_0x3f3515){_0x6a0f99['count']=_0x3f3515;if(_0xadc624[_0x8ce6('0x2a')]['includeAll']){_0x5656ab[_0x8ce6('0x3c')]=[{'all':!![]}];}return db['VoiceTransferReport'][_0x8ce6('0x3d')](_0x5656ab);})[_0x8ce6('0x21')](function(_0x265495){_0x6a0f99['rows']=_0x265495;return _0x6a0f99;})[_0x8ce6('0x21')](respondWithFilteredResult(_0x526e9e,_0x5656ab))[_0x8ce6('0x3e')](handleError(_0x526e9e,null));};exports[_0x8ce6('0x3f')]=function(_0x4f0e3f,_0x3c98d9){var _0x37a47f={'raw':!![],'where':{'id':_0x4f0e3f[_0x8ce6('0x40')]['id']}},_0x5a5424={};_0x5a5424[_0x8ce6('0x28')]=_[_0x8ce6('0x29')](db['VoiceTransferReport'][_0x8ce6('0x27')]);_0x5a5424[_0x8ce6('0x2a')]=_[_0x8ce6('0x29')](_0x4f0e3f[_0x8ce6('0x2a')]);_0x5a5424[_0x8ce6('0x2b')]=_[_0x8ce6('0x2d')](_0x5a5424[_0x8ce6('0x28')],_0x5a5424[_0x8ce6('0x2a')]);_0x37a47f[_0x8ce6('0x2c')]=_[_0x8ce6('0x2d')](_0x5a5424[_0x8ce6('0x28')],qs[_0x8ce6('0x2e')](_0x4f0e3f[_0x8ce6('0x2a')][_0x8ce6('0x2e')]));_0x37a47f[_0x8ce6('0x2c')]=_0x37a47f['attributes'][_0x8ce6('0x2f')]?_0x37a47f[_0x8ce6('0x2c')]:_0x5a5424[_0x8ce6('0x28')];if(_0x4f0e3f[_0x8ce6('0x2a')][_0x8ce6('0x41')]){_0x37a47f[_0x8ce6('0x3c')]=[{'all':!![]}];}_0x37a47f=_[_0x8ce6('0x36')]({},_0x37a47f,_0x4f0e3f[_0x8ce6('0x42')]);return db[_0x8ce6('0x26')][_0x8ce6('0x43')](_0x37a47f)[_0x8ce6('0x21')](handleEntityNotFound(_0x3c98d9,null))[_0x8ce6('0x21')](respondWithResult(_0x3c98d9,null))['catch'](handleError(_0x3c98d9,null));};exports[_0x8ce6('0x44')]=function(_0x29b020,_0x16ba59){return db[_0x8ce6('0x26')][_0x8ce6('0x44')](_0x29b020[_0x8ce6('0x45')],{})['then'](respondWithResult(_0x16ba59,0xc9))[_0x8ce6('0x3e')](handleError(_0x16ba59,null));};exports[_0x8ce6('0x20')]=function(_0x23de47,_0x3af196){if(_0x23de47[_0x8ce6('0x45')]['id']){delete _0x23de47[_0x8ce6('0x45')]['id'];}return db['VoiceTransferReport'][_0x8ce6('0x43')]({'where':{'id':_0x23de47[_0x8ce6('0x40')]['id']}})['then'](handleEntityNotFound(_0x3af196,null))[_0x8ce6('0x21')](saveUpdates(_0x23de47[_0x8ce6('0x45')],null))[_0x8ce6('0x21')](respondWithResult(_0x3af196,null))[_0x8ce6('0x3e')](handleError(_0x3af196,null));};exports[_0x8ce6('0x22')]=function(_0x5a6ff0,_0xbafc5a){return db[_0x8ce6('0x26')]['find']({'where':{'id':_0x5a6ff0[_0x8ce6('0x40')]['id']}})['then'](handleEntityNotFound(_0xbafc5a,null))['then'](removeEntity(_0xbafc5a,null))['catch'](handleError(_0xbafc5a,null));};
\ No newline at end of file
index d8602c7..d0d4e8d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xba72=['exports','VoiceTransferReport','report_call_transfer','../../config/logger','api','moment','bluebird','request-promise','rimraf'];(function(_0x53c256,_0x382a24){var _0x25feb6=function(_0x2652fd){while(--_0x2652fd){_0x53c256['push'](_0x53c256['shift']());}};_0x25feb6(++_0x382a24);}(_0xba72,0x17d));var _0x2ba7=function(_0x1b3463,_0x43e1f5){_0x1b3463=_0x1b3463-0x0;var _0x29d544=_0xba72[_0x1b3463];return _0x29d544;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x2ba7('0x0'))(_0x2ba7('0x1'));var moment=require(_0x2ba7('0x2'));var BPromise=require(_0x2ba7('0x3'));var rp=require(_0x2ba7('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0x2ba7('0x5'));var config=require('../../config/environment');var attributes=require('./voiceTransferReport.attributes');module[_0x2ba7('0x6')]=function(_0x3b5555,_0x2006fb){return _0x3b5555['define'](_0x2ba7('0x7'),attributes,{'tableName':_0x2ba7('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x34be=['rimraf','../../config/environment','./voiceTransferReport.attributes','define','VoiceTransferReport','report_call_transfer','util','../../config/logger','api','moment','request-promise'];(function(_0x255d5b,_0x4f6f35){var _0x3e141a=function(_0x249ee2){while(--_0x249ee2){_0x255d5b['push'](_0x255d5b['shift']());}};_0x3e141a(++_0x4f6f35);}(_0x34be,0x1be));var _0xe34b=function(_0x28b7ab,_0x16a764){_0x28b7ab=_0x28b7ab-0x0;var _0x56791b=_0x34be[_0x28b7ab];return _0x56791b;};'use strict';var _=require('lodash');var util=require(_0xe34b('0x0'));var logger=require(_0xe34b('0x1'))(_0xe34b('0x2'));var moment=require(_0xe34b('0x3'));var BPromise=require('bluebird');var rp=require(_0xe34b('0x4'));var fs=require('fs');var path=require('path');var rimraf=require(_0xe34b('0x5'));var config=require(_0xe34b('0x6'));var attributes=require(_0xe34b('0x7'));module['exports']=function(_0x21810a,_0x3e9693){return _0x21810a[_0xe34b('0x8')](_0xe34b('0x9'),attributes,{'tableName':_0xe34b('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b82249b..7b985ef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x812b=['VoiceTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','CreateVoiceTransferReport','VoiceTransferReport','create','body','options','raw','lodash','util','moment','bluebird','randomstring','ioredis','rpc','../../config/environment','request','then','VoiceTransferReport,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x51f65e,_0x19cc03){var _0x29ddc8=function(_0x3aef6f){while(--_0x3aef6f){_0x51f65e['push'](_0x51f65e['shift']());}};_0x29ddc8(++_0x19cc03);}(_0x812b,0xc3));var _0xb812=function(_0x42bd43,_0x59fb77){_0x42bd43=_0x42bd43-0x0;var _0x421e88=_0x812b[_0x42bd43];return _0x421e88;};'use strict';var _=require(_0xb812('0x0'));var util=require(_0xb812('0x1'));var moment=require(_0xb812('0x2'));var BPromise=require(_0xb812('0x3'));var rs=require(_0xb812('0x4'));var fs=require('fs');var Redis=require(_0xb812('0x5'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xb812('0x6'));var config=require(_0xb812('0x7'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x217252,_0x4bc097,_0x58eddd){return new BPromise(function(_0x32ba54,_0x23c834){return client[_0xb812('0x8')](_0x217252,_0x58eddd)[_0xb812('0x9')](function(_0xd7630c){logger['info'](_0xb812('0xa'),_0x4bc097,_0xb812('0xb'));logger[_0xb812('0xc')](_0xb812('0xd'),_0x4bc097,_0xb812('0xb'),JSON[_0xb812('0xe')](_0xd7630c));if(_0xd7630c[_0xb812('0xf')]){if(_0xd7630c[_0xb812('0xf')][_0xb812('0x10')]===0x1f4){logger[_0xb812('0xf')](_0xb812('0xa'),_0x4bc097,_0xd7630c[_0xb812('0xf')][_0xb812('0x11')]);return _0x23c834(_0xd7630c[_0xb812('0xf')][_0xb812('0x11')]);}logger[_0xb812('0xf')](_0xb812('0xa'),_0x4bc097,_0xd7630c['error']['message']);return _0x32ba54(_0xd7630c['error'][_0xb812('0x11')]);}else{logger[_0xb812('0x12')](_0xb812('0xa'),_0x4bc097,_0xb812('0xb'));_0x32ba54(_0xd7630c[_0xb812('0x13')]['message']);}})['catch'](function(_0x66474b){logger[_0xb812('0xf')](_0xb812('0xa'),_0x4bc097,_0x66474b);_0x23c834(_0x66474b);});});}exports[_0xb812('0x14')]=function(_0x4b420a){var _0x4d5b17=this;return new Promise(function(_0x5d654f,_0xc5620b){return db[_0xb812('0x15')][_0xb812('0x16')](_0x4b420a[_0xb812('0x17')],{'raw':_0x4b420a['options']?_0x4b420a[_0xb812('0x18')][_0xb812('0x19')]===undefined?!![]:![]:!![]})[_0xb812('0x9')](function(_0x13c93f){logger[_0xb812('0x12')](_0xb812('0x14'),_0x4b420a);logger['debug'](_0xb812('0x14'),_0x4b420a,JSON[_0xb812('0xe')](_0x13c93f));_0x5d654f(_0x13c93f);})['catch'](function(_0x2b4f8c){logger['error'](_0xb812('0x14'),_0x2b4f8c['message'],_0x4b420a);_0xc5620b(_0x4d5b17[_0xb812('0xf')](0x1f4,_0x2b4f8c[_0xb812('0x11')]));});});};
\ No newline at end of file
+var _0xf778=['rpc','../../config/environment','jayson/promise','http','request','then','info','request\x20sent','debug','VoiceTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code','VoiceTransferReport,\x20%s,\x20%s','message','result','catch','CreateVoiceTransferReport','VoiceTransferReport','create','options','raw','moment','ioredis','../../mysqldb','../../config/utils'];(function(_0x1b6e86,_0x23f985){var _0x44e1db=function(_0x23617d){while(--_0x23617d){_0x1b6e86['push'](_0x1b6e86['shift']());}};_0x44e1db(++_0x23f985);}(_0xf778,0x64));var _0x8f77=function(_0x1ae78f,_0x122ed2){_0x1ae78f=_0x1ae78f-0x0;var _0x5baf80=_0xf778[_0x1ae78f];return _0x5baf80;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x8f77('0x0'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x8f77('0x1'));var db=require(_0x8f77('0x2'))['db'];var utils=require(_0x8f77('0x3'));var logger=require('../../config/logger')(_0x8f77('0x4'));var config=require(_0x8f77('0x5'));var jayson=require(_0x8f77('0x6'));var client=jayson['client'][_0x8f77('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x287138,_0x30abe2,_0x590c0f){return new BPromise(function(_0x115362,_0x20a21c){return client[_0x8f77('0x8')](_0x287138,_0x590c0f)[_0x8f77('0x9')](function(_0x153f09){logger[_0x8f77('0xa')]('VoiceTransferReport,\x20%s,\x20%s',_0x30abe2,_0x8f77('0xb'));logger[_0x8f77('0xc')](_0x8f77('0xd'),_0x30abe2,_0x8f77('0xb'),JSON[_0x8f77('0xe')](_0x153f09));if(_0x153f09[_0x8f77('0xf')]){if(_0x153f09[_0x8f77('0xf')][_0x8f77('0x10')]===0x1f4){logger[_0x8f77('0xf')](_0x8f77('0x11'),_0x30abe2,_0x153f09[_0x8f77('0xf')][_0x8f77('0x12')]);return _0x20a21c(_0x153f09['error'][_0x8f77('0x12')]);}logger['error'](_0x8f77('0x11'),_0x30abe2,_0x153f09[_0x8f77('0xf')][_0x8f77('0x12')]);return _0x115362(_0x153f09['error'][_0x8f77('0x12')]);}else{logger[_0x8f77('0xa')]('VoiceTransferReport,\x20%s,\x20%s',_0x30abe2,_0x8f77('0xb'));_0x115362(_0x153f09[_0x8f77('0x13')][_0x8f77('0x12')]);}})[_0x8f77('0x14')](function(_0x5998dc){logger[_0x8f77('0xf')]('VoiceTransferReport,\x20%s,\x20%s',_0x30abe2,_0x5998dc);_0x20a21c(_0x5998dc);});});}exports[_0x8f77('0x15')]=function(_0x159ed2){var _0x241694=this;return new Promise(function(_0x5efc65,_0x58d24c){return db[_0x8f77('0x16')][_0x8f77('0x17')](_0x159ed2['body'],{'raw':_0x159ed2[_0x8f77('0x18')]?_0x159ed2[_0x8f77('0x18')][_0x8f77('0x19')]===undefined?!![]:![]:!![]})[_0x8f77('0x9')](function(_0x51ca89){logger[_0x8f77('0xa')](_0x8f77('0x15'),_0x159ed2);logger['debug'](_0x8f77('0x15'),_0x159ed2,JSON[_0x8f77('0xe')](_0x51ca89));_0x5efc65(_0x51ca89);})[_0x8f77('0x14')](function(_0x24f7af){logger[_0x8f77('0xf')](_0x8f77('0x15'),_0x24f7af[_0x8f77('0x12')],_0x159ed2);_0x58d24c(_0x241694[_0x8f77('0xf')](0x1f4,_0x24f7af[_0x8f77('0x12')]));});});};
\ No newline at end of file
index 6a0f4f7..e1b41ba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa502=['map','filter','name','join','Offline\x20apps:','online','./config/seedDB','default','catch','error','Server\x20failed\x20to\x20start\x20due\x20to\x20error:\x20%s','./mysqldb','./rpc','./config/environment','./config/logger','./config/pm2','./config/pm2/config','./config/schedule','sequelize','sync','then','listen','start','info'];(function(_0x51a9b7,_0x5ce85a){var _0x4e8e07=function(_0x5f00b2){while(--_0x5f00b2){_0x51a9b7['push'](_0x51a9b7['shift']());}};_0x4e8e07(++_0x5ce85a);}(_0xa502,0x83));var _0x2a50=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0xa502[_0x4b369d];return _0x571a98;};'use strict';var _=require('lodash');var mysqldb=require(_0x2a50('0x0'));var rpc=require(_0x2a50('0x1'));var config=require(_0x2a50('0x2'));var logger=require(_0x2a50('0x3'))('app');var pm2=require(_0x2a50('0x4'));var pm2Config=require(_0x2a50('0x5'));var schedule=require(_0x2a50('0x6'));var chat=require('./config/schedule/chat');function main(){return mysqldb['db'][_0x2a50('0x7')][_0x2a50('0x8')]()[_0x2a50('0x9')](function(){return rpc[_0x2a50('0xa')]();})[_0x2a50('0x9')](function(_0x4b7076){logger['info'](_0x4b7076);return chat[_0x2a50('0xb')]();})[_0x2a50('0x9')](function(){return schedule[_0x2a50('0xb')]();})[_0x2a50('0x9')](function(_0x1be8fe){logger['info'](_0x1be8fe);return pm2['start'](pm2Config);})['then'](function(_0x4c80cf){logger[_0x2a50('0xc')]('Online\x20apps:',_[_0x2a50('0xd')](_[_0x2a50('0xe')](_0x4c80cf,{'status':'online'}),_0x2a50('0xf'))[_0x2a50('0x10')]());logger[_0x2a50('0xc')](_0x2a50('0x11'),_[_0x2a50('0xd')](_[_0x2a50('0xe')](_0x4c80cf,function(_0x408b88){return _0x408b88['status']!==_0x2a50('0x12');}),_0x2a50('0xf'))['join']()||'None');config['seedDB']&&require(_0x2a50('0x13'))[_0x2a50('0x14')]();require('./config/license')[_0x2a50('0x14')]();})[_0x2a50('0x15')](function(_0x22be10){logger[_0x2a50('0x16')](_0x2a50('0x17'),_0x22be10);process['exit'](0x1);});}main();
\ No newline at end of file
+var _0xe882=['info','start','map','filter','online','name','join','None','seedDB','default','catch','error','Server\x20failed\x20to\x20start\x20due\x20to\x20error:\x20%s','exit','lodash','./mysqldb','./rpc','./config/environment','./config/logger','app','./config/pm2/config','./config/schedule','./config/schedule/chat','sequelize','then','listen'];(function(_0x3cd128,_0x4c36f5){var _0x1c3e99=function(_0x2b009f){while(--_0x2b009f){_0x3cd128['push'](_0x3cd128['shift']());}};_0x1c3e99(++_0x4c36f5);}(_0xe882,0xc4));var _0x2e88=function(_0x5355ef,_0x5ed475){_0x5355ef=_0x5355ef-0x0;var _0x113502=_0xe882[_0x5355ef];return _0x113502;};'use strict';var _=require(_0x2e88('0x0'));var mysqldb=require(_0x2e88('0x1'));var rpc=require(_0x2e88('0x2'));var config=require(_0x2e88('0x3'));var logger=require(_0x2e88('0x4'))(_0x2e88('0x5'));var pm2=require('./config/pm2');var pm2Config=require(_0x2e88('0x6'));var schedule=require(_0x2e88('0x7'));var chat=require(_0x2e88('0x8'));function main(){return mysqldb['db'][_0x2e88('0x9')]['sync']()[_0x2e88('0xa')](function(){return rpc[_0x2e88('0xb')]();})[_0x2e88('0xa')](function(_0x313e45){logger[_0x2e88('0xc')](_0x313e45);return chat[_0x2e88('0xd')]();})[_0x2e88('0xa')](function(){return schedule['start']();})[_0x2e88('0xa')](function(_0x5def10){logger[_0x2e88('0xc')](_0x5def10);return pm2[_0x2e88('0xd')](pm2Config);})[_0x2e88('0xa')](function(_0x50484d){logger[_0x2e88('0xc')]('Online\x20apps:',_[_0x2e88('0xe')](_[_0x2e88('0xf')](_0x50484d,{'status':_0x2e88('0x10')}),'name')['join']());logger[_0x2e88('0xc')]('Offline\x20apps:',_['map'](_[_0x2e88('0xf')](_0x50484d,function(_0xf945e1){return _0xf945e1['status']!==_0x2e88('0x10');}),_0x2e88('0x11'))[_0x2e88('0x12')]()||_0x2e88('0x13'));config[_0x2e88('0x14')]&&require('./config/seedDB')['default']();require('./config/license')[_0x2e88('0x15')]();})[_0x2e88('0x16')](function(_0x189a23){logger[_0x2e88('0x17')](_0x2e88('0x18'),_0x189a23);process[_0x2e88('0x19')](0x1);});}main();
\ No newline at end of file
index 3c05a77..f12f57b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc598=['indexOf','isMiddleware','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','cookie','stringify','pick','/dashboards/general','retrieveApiKey','isNil','apiKeyIat','generateApiKey','randomBytes','hex','now','toString','regenerateApiKey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one','../../config/environment','lodash','jsonwebtoken','express-jwt','composable-middleware','basic-auth','crypto','ipaddr.js','session','role','fullname','name','userpic','permissions','voicePause','chatPause','mailPause','faxPause','smsPause','openchannelPause','pauseType','showWebBar','phoneBarRemoteControlPort','phoneBarRemoteControl','interface','userProfileId','isChatInteractionAuthorized','use','ChatInteraction','findOne','closed','then','status','unmanaged','json','disposition','Unmanaged.','Forbidden.','catch','headers','startsWith','authorization','User','find','authenticate','pass','Wrong\x20credentials.','user','Bearer','Unknown\x20authorization\x20format','apikey','verify','query','getUuid','sub','isEqual','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','log','Unrecognized\x20API\x20access\x20key','User\x20not\x20found.','User\x20object\x20not\x20found.','isAuthenticated','getLicense','update','Forbidden','sign','secrets','signToken','hasRole','Required\x20role\x20needs\x20to\x20be\x20set','userRoles'];(function(_0x427d12,_0x188864){var _0x40a0ad=function(_0x318a81){while(--_0x318a81){_0x427d12['push'](_0x427d12['shift']());}};_0x40a0ad(++_0x188864);}(_0xc598,0x6b));var _0x8c59=function(_0x1df44b,_0xb6ccb6){_0x1df44b=_0x1df44b-0x0;var _0x2fffdc=_0xc598[_0x1df44b];return _0x2fffdc;};'use strict';var db=require('../../mysqldb')['db'];var config=require(_0x8c59('0x0'));var hardwareConf=require('../../config/license/hardware');var _=require(_0x8c59('0x1'));var jwt=require(_0x8c59('0x2'));var expressJwt=require(_0x8c59('0x3'));var compose=require(_0x8c59('0x4'));var basicAuth=require(_0x8c59('0x5'));var crypto=require(_0x8c59('0x6'));var ipaddr=require(_0x8c59('0x7'));var validateJwt=expressJwt({'secret':config['secrets'][_0x8c59('0x8')]});var userAttributes=['id',_0x8c59('0x9'),_0x8c59('0xa'),_0x8c59('0xb'),'internal','email',_0x8c59('0xc'),_0x8c59('0xd'),_0x8c59('0xe'),_0x8c59('0xf'),_0x8c59('0x10'),_0x8c59('0x11'),_0x8c59('0x12'),_0x8c59('0x13'),_0x8c59('0x14'),_0x8c59('0x15'),_0x8c59('0x16'),_0x8c59('0x17'),_0x8c59('0x18'),_0x8c59('0x19')];exports[_0x8c59('0x1a')]=function(){return isAuthenticated(!![])[_0x8c59('0x1b')](function(_0x22147f,_0x2d1015,_0x58d1d3){if(_0x22147f['user']){_0x58d1d3();}else{return db[_0x8c59('0x1c')][_0x8c59('0x1d')]({'where':{'id':_0x22147f['params']['id']},'attributes':['id',_0x8c59('0x1e'),'disposition'],'raw':!![]})[_0x8c59('0x1f')](function(_0x110be4){if(_0x110be4&&_0x110be4[_0x8c59('0x1e')]){return _0x2d1015[_0x8c59('0x20')](_0x110be4['disposition']===_0x8c59('0x21')?0x195:0x193)[_0x8c59('0x22')]({'message':_0x110be4[_0x8c59('0x23')]==='unmanaged'?_0x8c59('0x24'):_0x8c59('0x25')});}else{_0x58d1d3();}})[_0x8c59('0x26')](function(_0x3aebe6){_0x58d1d3(_0x3aebe6);});}});};function isAuthenticated(_0x593e8e){return compose()[_0x8c59('0x1b')](function(_0x4e5f3c,_0x177faa,_0x2cf7c2){if(_0x4e5f3c[_0x8c59('0x27')]['authorization']){if(_[_0x8c59('0x28')](_0x4e5f3c[_0x8c59('0x27')][_0x8c59('0x29')],'Basic')){var _0x37929e=basicAuth(_0x4e5f3c);db[_0x8c59('0x2a')][_0x8c59('0x2b')]({'where':{'name':_0x37929e[_0x8c59('0xb')]}})[_0x8c59('0x1f')](function(_0x3ba69c){if(!_0x3ba69c||!_0x3ba69c[_0x8c59('0x2c')](_0x37929e[_0x8c59('0x2d')])){return _0x177faa['status'](0x191)['json']({'message':_0x8c59('0x2e')});}_0x4e5f3c[_0x8c59('0x2f')]={'id':_0x3ba69c['id']};_0x2cf7c2();})[_0x8c59('0x26')](function(_0x482ca4){_0x2cf7c2(_0x482ca4);});}else if(_['startsWith'](_0x4e5f3c[_0x8c59('0x27')]['authorization'],_0x8c59('0x30'))){validateJwt(_0x4e5f3c,_0x177faa,_0x2cf7c2);}else{if(_0x593e8e){_0x2cf7c2();}else{return _0x177faa['status'](0x193)['json']({'message':_0x8c59('0x31')});}}}else if(_0x4e5f3c['query'][_0x8c59('0x32')]){try{var _0x13c2d0=jwt[_0x8c59('0x33')](_0x4e5f3c[_0x8c59('0x34')][_0x8c59('0x32')],config['secrets'][_0x8c59('0x8')],{'audience':hardwareConf[_0x8c59('0x35')](),'issuer':hardwareConf[_0x8c59('0x35')]()});db['User'][_0x8c59('0x2b')]({'where':{'id':_0x13c2d0[_0x8c59('0x36')]}})[_0x8c59('0x1f')](function(_0x47ac50){if(!_0x47ac50||!_[_0x8c59('0x37')](_0x47ac50[_0x8c59('0x38')],_0x13c2d0[_0x8c59('0x39')])){return _0x177faa[_0x8c59('0x20')](0x193)[_0x8c59('0x22')]({'message':_0x8c59('0x3a')});}_0x4e5f3c[_0x8c59('0x2f')]={'id':_0x47ac50['id']};_0x2cf7c2();})[_0x8c59('0x26')](function(_0x9622e0){_0x2cf7c2(_0x9622e0);});}catch(_0x393580){console[_0x8c59('0x3b')](_0x393580);return _0x177faa[_0x8c59('0x20')](0x193)['json']({'message':_0x8c59('0x3c')});}}else if(_0x593e8e){_0x2cf7c2();}else{return _0x177faa[_0x8c59('0x20')](0x193)['json']({'message':_0x8c59('0x31')});}})[_0x8c59('0x1b')](function(_0x628931,_0x4ba2c5,_0x39629b){if(_0x628931[_0x8c59('0x2f')]){db[_0x8c59('0x2a')][_0x8c59('0x2b')]({'where':{'id':_0x628931[_0x8c59('0x2f')]['id']},'attributes':userAttributes})[_0x8c59('0x1f')](function(_0x204842){if(!_0x204842){return _0x4ba2c5['status'](0x194)[_0x8c59('0x22')]({'message':_0x8c59('0x3d')});}_0x628931['user']=_0x204842;_0x39629b();})[_0x8c59('0x26')](function(_0x5156da){_0x39629b(_0x5156da);});}else if(_0x593e8e){_0x39629b();}else{return _0x4ba2c5[_0x8c59('0x20')](0x194)[_0x8c59('0x22')]({'message':_0x8c59('0x3e')});}});}exports[_0x8c59('0x3f')]=isAuthenticated;function canUpdate(){return compose()[_0x8c59('0x1b')](function(_0x4dddd4,_0x45cc63,_0x209cac){return require('../../config/license/util')[_0x8c59('0x40')]()['then'](function(_0x3cc749){if(_0x3cc749[_0x8c59('0x41')]){_0x209cac();}else{return _0x45cc63[_0x8c59('0x20')](0x193)['json']({'message':_0x8c59('0x42')});}})[_0x8c59('0x26')](function(_0x308697){_0x209cac(_0x308697);});});}exports['canUpdate']=canUpdate;function signToken(_0x3c139b,_0x486dc8){return jwt[_0x8c59('0x43')]({'id':_0x3c139b,'role':_0x486dc8},config[_0x8c59('0x44')][_0x8c59('0x8')],{'expiresIn':0x15180});}exports[_0x8c59('0x45')]=signToken;exports[_0x8c59('0x46')]=function(_0x180c2e){if(!_0x180c2e){throw new Error(_0x8c59('0x47'));}return compose()[_0x8c59('0x1b')](isAuthenticated())[_0x8c59('0x1b')](function meetsRequirements(_0x57c038,_0x15dfad,_0x19c589){if(config[_0x8c59('0x48')][_0x8c59('0x49')](_0x57c038[_0x8c59('0x2f')][_0x8c59('0x9')])>=config[_0x8c59('0x48')][_0x8c59('0x49')](_0x180c2e)){return _0x19c589();}else{return _0x15dfad[_0x8c59('0x20')](0x193)[_0x8c59('0x22')]({'message':_0x8c59('0x42')});}});};exports[_0x8c59('0x4a')]=function(_0x464402,_0x421475,_0x4519ce){_0x464402[_0x8c59('0x4a')]=!![];return _0x4519ce();};exports['setTokenCookie']=function(_0x662fd6,_0x488a8b){if(!_0x662fd6[_0x8c59('0x2f')]){return _0x488a8b[_0x8c59('0x20')](0x194)[_0x8c59('0x22')]({'message':_0x8c59('0x4b')});}var _0x235407=signToken(_0x662fd6[_0x8c59('0x2f')]['id'],_0x662fd6[_0x8c59('0x2f')]['role']);_0x488a8b[_0x8c59('0x4c')]('motion.token',_0x235407);_0x488a8b['cookie']('motion.user',JSON[_0x8c59('0x4d')](_[_0x8c59('0x4e')](_0x662fd6[_0x8c59('0x2f')],userAttributes)));_0x488a8b['redirect'](_0x8c59('0x4f'));};exports[_0x8c59('0x50')]=function(_0x58570d){if(_[_0x8c59('0x51')](_0x58570d[_0x8c59('0x38')])||_['isNil'](_0x58570d[_0x8c59('0x52')]))return null;else return createJwt(_0x58570d);};exports[_0x8c59('0x53')]=function(_0x1866ca){_0x1866ca[_0x8c59('0x38')]=crypto[_0x8c59('0x54')](0x10)['toString'](_0x8c59('0x55'));_0x1866ca['apiKeyIat']=Math['floor'](Date[_0x8c59('0x56')]()/0x3e8)[_0x8c59('0x57')]();return createJwt(_0x1866ca);};exports[_0x8c59('0x58')]=function(_0x2df00f,_0x37fd82){if(_0x2df00f[_0x8c59('0x34')][_0x8c59('0x32')]){jwt[_0x8c59('0x33')](_0x2df00f['query'][_0x8c59('0x32')],config[_0x8c59('0x44')][_0x8c59('0x8')],{'nonce':_0x37fd82['apiKeyNonce'],'iat':_0x37fd82[_0x8c59('0x52')],'audience':hardwareConf[_0x8c59('0x35')](),'issuer':hardwareConf['getUuid']()});return generateApiKey(_0x37fd82);}else{throw{'message':_0x8c59('0x59')};}};function createJwt(_0x26a612){return jwt['sign']({'iat':_0x26a612[_0x8c59('0x52')],'nonce':_0x26a612[_0x8c59('0x38')]},config['secrets'][_0x8c59('0x8')],{'algorithm':'HS512','subject':_0x26a612['id'][_0x8c59('0x57')](),'issuer':hardwareConf['getUuid'](),'audience':hardwareConf[_0x8c59('0x35')]()});}
\ No newline at end of file
+var _0x6c9a=['../../mysqldb','../../config/environment','../../config/license/hardware','jsonwebtoken','express-jwt','basic-auth','crypto','ipaddr.js','secrets','role','internal','email','userpic','permissions','chatPause','mailPause','faxPause','smsPause','openchannelPause','pauseType','phoneBarRemoteControlPort','phoneBarRemoteControl','user','ChatInteraction','findOne','params','closed','disposition','then','unmanaged','json','catch','use','headers','authorization','Basic','User','find','name','pass','status','Wrong\x20credentials.','startsWith','Bearer','Unknown\x20authorization\x20format','apikey','verify','query','session','getUuid','sub','isEqual','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','Unrecognized\x20API\x20access\x20key','User\x20not\x20found.','User\x20object\x20not\x20found.','isAuthenticated','../../config/license/util','getLicense','sign','signToken','hasRole','Required\x20role\x20needs\x20to\x20be\x20set','userRoles','indexOf','Forbidden','isMiddleware','setTokenCookie','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','motion.token','motion.user','stringify','pick','redirect','retrieveApiKey','isNil','apiKeyIat','generateApiKey','randomBytes','toString','hex','floor','now','regenerateApiKey','Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one'];(function(_0x4508c8,_0x56cd65){var _0x14732d=function(_0x622836){while(--_0x622836){_0x4508c8['push'](_0x4508c8['shift']());}};_0x14732d(++_0x56cd65);}(_0x6c9a,0xae));var _0xa6c9=function(_0x4c71bc,_0x8333f6){_0x4c71bc=_0x4c71bc-0x0;var _0x116fbb=_0x6c9a[_0x4c71bc];return _0x116fbb;};'use strict';var db=require(_0xa6c9('0x0'))['db'];var config=require(_0xa6c9('0x1'));var hardwareConf=require(_0xa6c9('0x2'));var _=require('lodash');var jwt=require(_0xa6c9('0x3'));var expressJwt=require(_0xa6c9('0x4'));var compose=require('composable-middleware');var basicAuth=require(_0xa6c9('0x5'));var crypto=require(_0xa6c9('0x6'));var ipaddr=require(_0xa6c9('0x7'));var validateJwt=expressJwt({'secret':config[_0xa6c9('0x8')]['session']});var userAttributes=['id',_0xa6c9('0x9'),'fullname','name',_0xa6c9('0xa'),_0xa6c9('0xb'),_0xa6c9('0xc'),_0xa6c9('0xd'),'voicePause',_0xa6c9('0xe'),_0xa6c9('0xf'),_0xa6c9('0x10'),_0xa6c9('0x11'),_0xa6c9('0x12'),_0xa6c9('0x13'),'showWebBar',_0xa6c9('0x14'),_0xa6c9('0x15'),'interface','userProfileId'];exports['isChatInteractionAuthorized']=function(){return isAuthenticated(!![])['use'](function(_0x3098da,_0x427db0,_0x4751af){if(_0x3098da[_0xa6c9('0x16')]){_0x4751af();}else{return db[_0xa6c9('0x17')][_0xa6c9('0x18')]({'where':{'id':_0x3098da[_0xa6c9('0x19')]['id']},'attributes':['id',_0xa6c9('0x1a'),_0xa6c9('0x1b')],'raw':!![]})[_0xa6c9('0x1c')](function(_0x3ee9e6){if(_0x3ee9e6&&_0x3ee9e6[_0xa6c9('0x1a')]){return _0x427db0['status'](_0x3ee9e6['disposition']===_0xa6c9('0x1d')?0x195:0x193)[_0xa6c9('0x1e')]({'message':_0x3ee9e6[_0xa6c9('0x1b')]==='unmanaged'?'Unmanaged.':'Forbidden.'});}else{_0x4751af();}})[_0xa6c9('0x1f')](function(_0x3cbf80){_0x4751af(_0x3cbf80);});}});};function isAuthenticated(_0x5a02a7){return compose()[_0xa6c9('0x20')](function(_0x101d95,_0x317cac,_0x5807b3){if(_0x101d95[_0xa6c9('0x21')]['authorization']){if(_['startsWith'](_0x101d95[_0xa6c9('0x21')][_0xa6c9('0x22')],_0xa6c9('0x23'))){var _0x430d58=basicAuth(_0x101d95);db[_0xa6c9('0x24')][_0xa6c9('0x25')]({'where':{'name':_0x430d58[_0xa6c9('0x26')]}})[_0xa6c9('0x1c')](function(_0x430238){if(!_0x430238||!_0x430238['authenticate'](_0x430d58[_0xa6c9('0x27')])){return _0x317cac[_0xa6c9('0x28')](0x191)[_0xa6c9('0x1e')]({'message':_0xa6c9('0x29')});}_0x101d95[_0xa6c9('0x16')]={'id':_0x430238['id']};_0x5807b3();})[_0xa6c9('0x1f')](function(_0x3e4b4c){_0x5807b3(_0x3e4b4c);});}else if(_[_0xa6c9('0x2a')](_0x101d95[_0xa6c9('0x21')][_0xa6c9('0x22')],_0xa6c9('0x2b'))){validateJwt(_0x101d95,_0x317cac,_0x5807b3);}else{if(_0x5a02a7){_0x5807b3();}else{return _0x317cac['status'](0x193)['json']({'message':_0xa6c9('0x2c')});}}}else if(_0x101d95['query'][_0xa6c9('0x2d')]){try{var _0xda1016=jwt[_0xa6c9('0x2e')](_0x101d95[_0xa6c9('0x2f')][_0xa6c9('0x2d')],config[_0xa6c9('0x8')][_0xa6c9('0x30')],{'audience':hardwareConf[_0xa6c9('0x31')](),'issuer':hardwareConf[_0xa6c9('0x31')]()});db[_0xa6c9('0x24')][_0xa6c9('0x25')]({'where':{'id':_0xda1016[_0xa6c9('0x32')]}})[_0xa6c9('0x1c')](function(_0x2ddc68){if(!_0x2ddc68||!_[_0xa6c9('0x33')](_0x2ddc68[_0xa6c9('0x34')],_0xda1016[_0xa6c9('0x35')])){return _0x317cac[_0xa6c9('0x28')](0x193)[_0xa6c9('0x1e')]({'message':_0xa6c9('0x36')});}_0x101d95[_0xa6c9('0x16')]={'id':_0x2ddc68['id']};_0x5807b3();})[_0xa6c9('0x1f')](function(_0x4db98f){_0x5807b3(_0x4db98f);});}catch(_0x17d531){console['log'](_0x17d531);return _0x317cac[_0xa6c9('0x28')](0x193)[_0xa6c9('0x1e')]({'message':_0xa6c9('0x37')});}}else if(_0x5a02a7){_0x5807b3();}else{return _0x317cac[_0xa6c9('0x28')](0x193)[_0xa6c9('0x1e')]({'message':_0xa6c9('0x2c')});}})[_0xa6c9('0x20')](function(_0x329128,_0x3e0db3,_0x50b4c7){if(_0x329128[_0xa6c9('0x16')]){db[_0xa6c9('0x24')][_0xa6c9('0x25')]({'where':{'id':_0x329128[_0xa6c9('0x16')]['id']},'attributes':userAttributes})[_0xa6c9('0x1c')](function(_0x3993ad){if(!_0x3993ad){return _0x3e0db3[_0xa6c9('0x28')](0x194)['json']({'message':_0xa6c9('0x38')});}_0x329128['user']=_0x3993ad;_0x50b4c7();})['catch'](function(_0x24cf15){_0x50b4c7(_0x24cf15);});}else if(_0x5a02a7){_0x50b4c7();}else{return _0x3e0db3['status'](0x194)[_0xa6c9('0x1e')]({'message':_0xa6c9('0x39')});}});}exports[_0xa6c9('0x3a')]=isAuthenticated;function canUpdate(){return compose()['use'](function(_0x77cf3a,_0x317e03,_0x336db1){return require(_0xa6c9('0x3b'))[_0xa6c9('0x3c')]()[_0xa6c9('0x1c')](function(_0x17802b){if(_0x17802b['update']){_0x336db1();}else{return _0x317e03[_0xa6c9('0x28')](0x193)[_0xa6c9('0x1e')]({'message':'Forbidden'});}})[_0xa6c9('0x1f')](function(_0x379c64){_0x336db1(_0x379c64);});});}exports['canUpdate']=canUpdate;function signToken(_0x2908c6,_0x2888f0){return jwt[_0xa6c9('0x3d')]({'id':_0x2908c6,'role':_0x2888f0},config['secrets'][_0xa6c9('0x30')],{'expiresIn':0x15180});}exports[_0xa6c9('0x3e')]=signToken;exports[_0xa6c9('0x3f')]=function(_0x373bad){if(!_0x373bad){throw new Error(_0xa6c9('0x40'));}return compose()[_0xa6c9('0x20')](isAuthenticated())['use'](function meetsRequirements(_0x2990a8,_0xa2610d,_0x3ae9b4){if(config[_0xa6c9('0x41')][_0xa6c9('0x42')](_0x2990a8[_0xa6c9('0x16')][_0xa6c9('0x9')])>=config[_0xa6c9('0x41')][_0xa6c9('0x42')](_0x373bad)){return _0x3ae9b4();}else{return _0xa2610d['status'](0x193)['json']({'message':_0xa6c9('0x43')});}});};exports[_0xa6c9('0x44')]=function(_0x3732fa,_0x37c684,_0xef9321){_0x3732fa[_0xa6c9('0x44')]=!![];return _0xef9321();};exports[_0xa6c9('0x45')]=function(_0x53d3ba,_0x3294ce){if(!_0x53d3ba[_0xa6c9('0x16')]){return _0x3294ce[_0xa6c9('0x28')](0x194)['json']({'message':_0xa6c9('0x46')});}var _0x3fab28=signToken(_0x53d3ba[_0xa6c9('0x16')]['id'],_0x53d3ba[_0xa6c9('0x16')]['role']);_0x3294ce['cookie'](_0xa6c9('0x47'),_0x3fab28);_0x3294ce['cookie'](_0xa6c9('0x48'),JSON[_0xa6c9('0x49')](_[_0xa6c9('0x4a')](_0x53d3ba[_0xa6c9('0x16')],userAttributes)));_0x3294ce[_0xa6c9('0x4b')]('/dashboards/general');};exports[_0xa6c9('0x4c')]=function(_0x221e9c){if(_[_0xa6c9('0x4d')](_0x221e9c['apiKeyNonce'])||_[_0xa6c9('0x4d')](_0x221e9c[_0xa6c9('0x4e')]))return null;else return createJwt(_0x221e9c);};exports[_0xa6c9('0x4f')]=function(_0x22e940){_0x22e940['apiKeyNonce']=crypto[_0xa6c9('0x50')](0x10)[_0xa6c9('0x51')](_0xa6c9('0x52'));_0x22e940[_0xa6c9('0x4e')]=Math[_0xa6c9('0x53')](Date[_0xa6c9('0x54')]()/0x3e8)[_0xa6c9('0x51')]();return createJwt(_0x22e940);};exports[_0xa6c9('0x55')]=function(_0x282949,_0x19773d){if(_0x282949[_0xa6c9('0x2f')][_0xa6c9('0x2d')]){jwt[_0xa6c9('0x2e')](_0x282949[_0xa6c9('0x2f')][_0xa6c9('0x2d')],config[_0xa6c9('0x8')][_0xa6c9('0x30')],{'nonce':_0x19773d[_0xa6c9('0x34')],'iat':_0x19773d[_0xa6c9('0x4e')],'audience':hardwareConf['getUuid'](),'issuer':hardwareConf[_0xa6c9('0x31')]()});return generateApiKey(_0x19773d);}else{throw{'message':_0xa6c9('0x56')};}};function createJwt(_0x4194e0){return jwt[_0xa6c9('0x3d')]({'iat':_0x4194e0[_0xa6c9('0x4e')],'nonce':_0x4194e0['apiKeyNonce']},config[_0xa6c9('0x8')][_0xa6c9('0x30')],{'algorithm':'HS512','subject':_0x4194e0['id'][_0xa6c9('0x51')](),'issuer':hardwareConf[_0xa6c9('0x31')](),'audience':hardwareConf[_0xa6c9('0x31')]()});}
\ No newline at end of file
index d5d601d..a3c4b16 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa965=['encryptFile','createReadStream','createWriteStream','createCipher','algorithm','data','update','binary','write','end','close','decryptFile','createDecipher','final','unlink','bluebird','hasOwnProperty'];(function(_0x373678,_0x2e27bb){var _0x53c6bf=function(_0x53c146){while(--_0x53c146){_0x373678['push'](_0x373678['shift']());}};_0x53c6bf(++_0x2e27bb);}(_0xa965,0x174));var _0x5a96=function(_0x78d11b,_0x1c2611){_0x78d11b=_0x78d11b-0x0;var _0x5f2e27=_0xa965[_0x78d11b];return _0x5f2e27;};'use strict';var crypto=require('crypto');var fs=require('fs');var BPromise=require(_0x5a96('0x0'));var defaultOptions={'algorithm':'aes192'};function combineOptions(_0x90a9){var _0x418350={};for(var _0x1c6e34 in defaultOptions){if(defaultOptions['hasOwnProperty'](_0x1c6e34)){_0x418350[_0x1c6e34]=defaultOptions[_0x1c6e34];}}if(_0x90a9){for(var _0x59b64c in _0x90a9){if(_0x90a9[_0x5a96('0x1')](_0x59b64c)){_0x418350[_0x59b64c]=_0x90a9[_0x59b64c];}}}return _0x418350;}exports[_0x5a96('0x2')]=function(_0x293137,_0x5712c1,_0x350c67,_0x37a014){return new BPromise(function(_0x440d32,_0x57190f){_0x37a014=combineOptions(_0x37a014);var _0x4e64eb=new Buffer(_0x350c67);var _0x515a66=fs[_0x5a96('0x3')](_0x293137);var _0x55d9f8=fs[_0x5a96('0x4')](_0x5712c1);var _0x2bc4d0=crypto[_0x5a96('0x5')](_0x37a014[_0x5a96('0x6')],_0x4e64eb);_0x515a66['on'](_0x5a96('0x7'),function(_0x2a71eb){var _0x49b033=new Buffer(_0x2bc4d0[_0x5a96('0x8')](_0x2a71eb),_0x5a96('0x9'));_0x55d9f8[_0x5a96('0xa')](_0x49b033);});_0x515a66['on'](_0x5a96('0xb'),function(){try{var _0x1f7069=new Buffer(_0x2bc4d0['final']('binary'),_0x5a96('0x9'));_0x55d9f8['write'](_0x1f7069);_0x55d9f8[_0x5a96('0xb')]();_0x55d9f8['on'](_0x5a96('0xc'),function(){return _0x440d32(_0x5712c1);});}catch(_0x42e10c){fs['unlink'](_0x5712c1);return _0x57190f(_0x42e10c);}});});};exports[_0x5a96('0xd')]=function(_0x4c63dc,_0x4a6701,_0x2cb572,_0x41fc45){return new BPromise(function(_0x352a72,_0x55606b){_0x41fc45=combineOptions(_0x41fc45);var _0x5c0f5a=new Buffer(_0x2cb572);var _0x113bba=fs[_0x5a96('0x3')](_0x4c63dc);var _0x314523=fs[_0x5a96('0x4')](_0x4a6701);var _0x4f14a6=crypto[_0x5a96('0xe')](_0x41fc45[_0x5a96('0x6')],_0x5c0f5a);_0x113bba['on'](_0x5a96('0x7'),function(_0x49c153){var _0x520938=new Buffer(_0x4f14a6[_0x5a96('0x8')](_0x49c153),'binary');_0x314523['write'](_0x520938);});_0x113bba['on'](_0x5a96('0xb'),function(){try{var _0x150c4d=new Buffer(_0x4f14a6[_0x5a96('0xf')](_0x5a96('0x9')),_0x5a96('0x9'));_0x314523['write'](_0x150c4d);_0x314523[_0x5a96('0xb')]();_0x314523['on'](_0x5a96('0xc'),function(){return _0x352a72(_0x4a6701);});}catch(_0x35c13b){fs[_0x5a96('0x10')](_0x4a6701);return _0x55606b(_0x35c13b);}});});};
\ No newline at end of file
+var _0xfc8f=['unlink','createWriteStream','createDecipher','update','crypto','bluebird','hasOwnProperty','encryptFile','createReadStream','createCipher','algorithm','data','binary','write','end','final','close'];(function(_0x51fd25,_0x2fcbb){var _0x4529ae=function(_0x17ed81){while(--_0x17ed81){_0x51fd25['push'](_0x51fd25['shift']());}};_0x4529ae(++_0x2fcbb);}(_0xfc8f,0xe1));var _0xffc8=function(_0x5f5af1,_0x1101f2){_0x5f5af1=_0x5f5af1-0x0;var _0x1bae4d=_0xfc8f[_0x5f5af1];return _0x1bae4d;};'use strict';var crypto=require(_0xffc8('0x0'));var fs=require('fs');var BPromise=require(_0xffc8('0x1'));var defaultOptions={'algorithm':'aes192'};function combineOptions(_0x56d004){var _0x4dba78={};for(var _0x2a2689 in defaultOptions){if(defaultOptions[_0xffc8('0x2')](_0x2a2689)){_0x4dba78[_0x2a2689]=defaultOptions[_0x2a2689];}}if(_0x56d004){for(var _0x5a6c51 in _0x56d004){if(_0x56d004['hasOwnProperty'](_0x5a6c51)){_0x4dba78[_0x5a6c51]=_0x56d004[_0x5a6c51];}}}return _0x4dba78;}exports[_0xffc8('0x3')]=function(_0x190700,_0x55ed65,_0x5c0bab,_0x3d1108){return new BPromise(function(_0x80e1a2,_0x4245a8){_0x3d1108=combineOptions(_0x3d1108);var _0x2a6462=new Buffer(_0x5c0bab);var _0x3a5741=fs[_0xffc8('0x4')](_0x190700);var _0x342638=fs['createWriteStream'](_0x55ed65);var _0x3efe16=crypto[_0xffc8('0x5')](_0x3d1108[_0xffc8('0x6')],_0x2a6462);_0x3a5741['on'](_0xffc8('0x7'),function(_0x1dc65d){var _0x1fc9aa=new Buffer(_0x3efe16['update'](_0x1dc65d),_0xffc8('0x8'));_0x342638[_0xffc8('0x9')](_0x1fc9aa);});_0x3a5741['on'](_0xffc8('0xa'),function(){try{var _0x39afc0=new Buffer(_0x3efe16[_0xffc8('0xb')]('binary'),'binary');_0x342638['write'](_0x39afc0);_0x342638[_0xffc8('0xa')]();_0x342638['on'](_0xffc8('0xc'),function(){return _0x80e1a2(_0x55ed65);});}catch(_0x9123c4){fs[_0xffc8('0xd')](_0x55ed65);return _0x4245a8(_0x9123c4);}});});};exports['decryptFile']=function(_0x3738b4,_0x55fccc,_0x1b4f05,_0x205370){return new BPromise(function(_0x4b7b2c,_0x5c63df){_0x205370=combineOptions(_0x205370);var _0x1a3f1a=new Buffer(_0x1b4f05);var _0x3b1d5d=fs[_0xffc8('0x4')](_0x3738b4);var _0x848801=fs[_0xffc8('0xe')](_0x55fccc);var _0x1ae130=crypto[_0xffc8('0xf')](_0x205370[_0xffc8('0x6')],_0x1a3f1a);_0x3b1d5d['on'](_0xffc8('0x7'),function(_0x5e7720){var _0x2374b9=new Buffer(_0x1ae130[_0xffc8('0x10')](_0x5e7720),'binary');_0x848801[_0xffc8('0x9')](_0x2374b9);});_0x3b1d5d['on']('end',function(){try{var _0x5b2f32=new Buffer(_0x1ae130[_0xffc8('0xb')](_0xffc8('0x8')),'binary');_0x848801[_0xffc8('0x9')](_0x5b2f32);_0x848801[_0xffc8('0xa')]();_0x848801['on']('close',function(){return _0x4b7b2c(_0x55fccc);});}catch(_0xde7d2e){fs[_0xffc8('0xd')](_0x55fccc);return _0x5c63df(_0xde7d2e);}});});};
\ No newline at end of file
index d7bb927..153446c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc493=['push','%s\x20limit\x20%d\x20OFFSET\x20%d','dirname','basename','.csv','existsSync','join','mkdirSync','each','%s%d.%s','csv','%s.%s','writeFileSync','zip','Completed','catch','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','inspect','Failed','util','lodash','to-csv','zip-dir','rimraf','../../mysqldb','../../config/logger','analytics','argv','savename','AnalyticExtractedReport','update','info','format','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','CSV','Setting','find','splitSizeCsv','then','sequelize','query','QueryTypes','SELECT','num','Empty','length','split'];(function(_0x3bf83f,_0x181cac){var _0x22c4a9=function(_0xb3ff0d){while(--_0xb3ff0d){_0x3bf83f['push'](_0x3bf83f['shift']());}};_0x22c4a9(++_0x181cac);}(_0xc493,0x18b));var _0x3c49=function(_0x12f831,_0x28c91f){_0x12f831=_0x12f831-0x0;var _0x635103=_0xc493[_0x12f831];return _0x635103;};'use strict';var util=require(_0x3c49('0x0'));var path=require('path');var _=require(_0x3c49('0x1'));var csv=require(_0x3c49('0x2'));var fs=require('fs');var BPromise=require('bluebird');var zipdir=require(_0x3c49('0x3'));var rimraf=require(_0x3c49('0x4'));var db=require(_0x3c49('0x5'))['db'];var dbH=require(_0x3c49('0x5'))['dbH'];var logger=require(_0x3c49('0x6'))(_0x3c49('0x7'));var EXTRACTED_REPORT_ID=Number(process[_0x3c49('0x8')][0x2]);var QUERY=process[_0x3c49('0x8')][0x3];var PATH=process[_0x3c49('0x8')][0x4];function analyticExtractedReport(_0x3f4835,_0x41871d){var _0x432e62={'status':_0x3f4835};var _0x4d2235={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x41871d){_0x432e62[_0x3c49('0x9')]=_0x41871d;}return db[_0x3c49('0xa')][_0x3c49('0xb')](_0x432e62,_0x4d2235);}function main(){var _0x5e3302=0x1388;var _0x9bd22;logger[_0x3c49('0xc')](util[_0x3c49('0xd')](_0x3c49('0xe'),EXTRACTED_REPORT_ID,_0x3c49('0xf')));return db[_0x3c49('0x10')][_0x3c49('0x11')]({'where':{'id':0x1},'raw':!![],'attributes':['id','split','splitSizeCsv']})['then'](function(_0x491cdb){if(_0x491cdb){_0x9bd22=_0x491cdb;_0x5e3302=_0x9bd22[_0x3c49('0x12')]||0x1388;}})[_0x3c49('0x13')](function(){return dbH[_0x3c49('0x14')][_0x3c49('0x15')](util[_0x3c49('0xd')]('SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t',QUERY),{'type':dbH['sequelize'][_0x3c49('0x16')][_0x3c49('0x17')]});})[_0x3c49('0x13')](function(_0x538737){if(!_0x538737[0x0][_0x3c49('0x18')]){return analyticExtractedReport(_0x3c49('0x19'));}var _0x1e0117=[];var _0x3bca4d=0x0;var _0x2f6e37=!![];if(_0x538737&&_0x538737[_0x3c49('0x1a')]){var _0x312046=_0x538737[0x0][_0x3c49('0x18')]%(_0x3bca4d+_0x5e3302);if(_0x9bd22[_0x3c49('0x1b')]){for(;_0x2f6e37;_0x3bca4d+=_0x5e3302,_0x312046=_0x538737[0x0][_0x3c49('0x18')]%(_0x3bca4d+_0x5e3302)){if(_0x312046==0x0||_0x312046==_0x538737[0x0][_0x3c49('0x18')]){_0x2f6e37=![];}_0x1e0117[_0x3c49('0x1c')](dbH[_0x3c49('0x14')][_0x3c49('0x15')](util[_0x3c49('0xd')](_0x3c49('0x1d'),QUERY,_0x5e3302,_0x3bca4d),{'type':dbH[_0x3c49('0x14')][_0x3c49('0x16')][_0x3c49('0x17')]}));}}else{_0x1e0117[_0x3c49('0x1c')](dbH[_0x3c49('0x14')]['query'](QUERY,{'type':dbH['sequelize'][_0x3c49('0x16')][_0x3c49('0x17')]}));}}var _0x5ee1aa=path[_0x3c49('0x1e')](PATH);var _0x667948=path[_0x3c49('0x1f')](PATH,_0x3c49('0x20'));var _0x1c8f8a=_0x9bd22[_0x3c49('0x1b')]&&_0x1e0117[_0x3c49('0x1a')]>0x1;var _0x4d502c=[];if(!fs[_0x3c49('0x21')](path[_0x3c49('0x22')](_0x5ee1aa,_0x667948))&&_0x1c8f8a){fs[_0x3c49('0x23')](path[_0x3c49('0x22')](_0x5ee1aa,_0x667948));}return BPromise[_0x3c49('0x24')](_0x1e0117,function(_0x4c088f){_0x4d502c[_0x3c49('0x1c')](_0x4c088f);})[_0x3c49('0x13')](function(){for(var _0x2eb168=0x0;_0x2eb168<_0x4d502c[_0x3c49('0x1a')];_0x2eb168+=0x1){var _0x17dd64;var _0x2b562f=_0x4d502c[_0x2eb168];if(_0x1c8f8a){_0x17dd64=path['join'](_0x5ee1aa,_0x667948,util[_0x3c49('0xd')](_0x3c49('0x25'),_0x667948,_0x2eb168,_0x3c49('0x26')));}else{_0x17dd64=path[_0x3c49('0x22')](_0x5ee1aa,util[_0x3c49('0xd')](_0x3c49('0x27'),_0x667948,'csv'));}fs[_0x3c49('0x28')](_0x17dd64,csv(_0x2b562f));}})[_0x3c49('0x13')](function(){if(_0x1c8f8a){zipdir(path['join'](_0x5ee1aa,_0x667948),{'saveTo':path[_0x3c49('0x22')](_0x5ee1aa,util[_0x3c49('0xd')](_0x3c49('0x27'),_0x667948,_0x3c49('0x29')))},function(_0x357639,_0x20fa39){});rimraf(path['join'](_0x5ee1aa,_0x667948),function(){});}})[_0x3c49('0x13')](function(){logger[_0x3c49('0xc')](util['format']('Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed',EXTRACTED_REPORT_ID,_0x3c49('0xf')));return analyticExtractedReport(_0x3c49('0x2a'),_0x1c8f8a?util['format'](_0x3c49('0x27'),_0x667948,_0x1c8f8a?_0x3c49('0x29'):'csv'):null);});})[_0x3c49('0x2b')](function(_0x3570bd){logger[_0x3c49('0xc')](util[_0x3c49('0xd')](_0x3c49('0x2c'),EXTRACTED_REPORT_ID,_0x3c49('0xf')),util[_0x3c49('0x2d')](_0x3570bd,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0x3c49('0x2e'));});}main();
\ No newline at end of file
+var _0x6eda=['lodash','bluebird','rimraf','../../mysqldb','dbH','../../config/logger','analytics','argv','savename','format','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','CSV','Setting','find','split','splitSizeCsv','then','query','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','SELECT','num','Empty','length','sequelize','%s\x20limit\x20%d\x20OFFSET\x20%d','QueryTypes','push','basename','.csv','existsSync','join','mkdirSync','%s%d.%s','csv','%s.%s','writeFileSync','info','Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed','Completed','zip','catch','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','inspect','Failed','util','path'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x6eda,0x140));var _0xa6ed=function(_0x21d0a5,_0x242625){_0x21d0a5=_0x21d0a5-0x0;var _0x3619ee=_0x6eda[_0x21d0a5];return _0x3619ee;};'use strict';var util=require(_0xa6ed('0x0'));var path=require(_0xa6ed('0x1'));var _=require(_0xa6ed('0x2'));var csv=require('to-csv');var fs=require('fs');var BPromise=require(_0xa6ed('0x3'));var zipdir=require('zip-dir');var rimraf=require(_0xa6ed('0x4'));var db=require(_0xa6ed('0x5'))['db'];var dbH=require(_0xa6ed('0x5'))[_0xa6ed('0x6')];var logger=require(_0xa6ed('0x7'))(_0xa6ed('0x8'));var EXTRACTED_REPORT_ID=Number(process[_0xa6ed('0x9')][0x2]);var QUERY=process[_0xa6ed('0x9')][0x3];var PATH=process[_0xa6ed('0x9')][0x4];function analyticExtractedReport(_0x2c4550,_0x1639fc){var _0x12ab00={'status':_0x2c4550};var _0x2bc1eb={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x1639fc){_0x12ab00[_0xa6ed('0xa')]=_0x1639fc;}return db['AnalyticExtractedReport']['update'](_0x12ab00,_0x2bc1eb);}function main(){var _0x4d21a0=0x1388;var _0x2f96bb;logger['info'](util[_0xa6ed('0xb')](_0xa6ed('0xc'),EXTRACTED_REPORT_ID,_0xa6ed('0xd')));return db[_0xa6ed('0xe')][_0xa6ed('0xf')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0xa6ed('0x10'),_0xa6ed('0x11')]})[_0xa6ed('0x12')](function(_0x5601fe){if(_0x5601fe){_0x2f96bb=_0x5601fe;_0x4d21a0=_0x2f96bb[_0xa6ed('0x11')]||0x1388;}})['then'](function(){return dbH['sequelize'][_0xa6ed('0x13')](util[_0xa6ed('0xb')](_0xa6ed('0x14'),QUERY),{'type':dbH['sequelize']['QueryTypes'][_0xa6ed('0x15')]});})[_0xa6ed('0x12')](function(_0x41640b){if(!_0x41640b[0x0][_0xa6ed('0x16')]){return analyticExtractedReport(_0xa6ed('0x17'));}var _0x23a370=[];var _0x5ea8c2=0x0;var _0x1c0ace=!![];if(_0x41640b&&_0x41640b[_0xa6ed('0x18')]){var _0x1f7902=_0x41640b[0x0][_0xa6ed('0x16')]%(_0x5ea8c2+_0x4d21a0);if(_0x2f96bb[_0xa6ed('0x10')]){for(;_0x1c0ace;_0x5ea8c2+=_0x4d21a0,_0x1f7902=_0x41640b[0x0][_0xa6ed('0x16')]%(_0x5ea8c2+_0x4d21a0)){if(_0x1f7902==0x0||_0x1f7902==_0x41640b[0x0][_0xa6ed('0x16')]){_0x1c0ace=![];}_0x23a370['push'](dbH[_0xa6ed('0x19')][_0xa6ed('0x13')](util[_0xa6ed('0xb')](_0xa6ed('0x1a'),QUERY,_0x4d21a0,_0x5ea8c2),{'type':dbH[_0xa6ed('0x19')][_0xa6ed('0x1b')]['SELECT']}));}}else{_0x23a370[_0xa6ed('0x1c')](dbH['sequelize'][_0xa6ed('0x13')](QUERY,{'type':dbH[_0xa6ed('0x19')][_0xa6ed('0x1b')][_0xa6ed('0x15')]}));}}var _0x4340f4=path['dirname'](PATH);var _0x116d33=path[_0xa6ed('0x1d')](PATH,_0xa6ed('0x1e'));var _0xb0767d=_0x2f96bb[_0xa6ed('0x10')]&&_0x23a370[_0xa6ed('0x18')]>0x1;var _0xfa9a77=[];if(!fs[_0xa6ed('0x1f')](path[_0xa6ed('0x20')](_0x4340f4,_0x116d33))&&_0xb0767d){fs[_0xa6ed('0x21')](path[_0xa6ed('0x20')](_0x4340f4,_0x116d33));}return BPromise['each'](_0x23a370,function(_0xb2b32a){_0xfa9a77[_0xa6ed('0x1c')](_0xb2b32a);})[_0xa6ed('0x12')](function(){for(var _0x2719a3=0x0;_0x2719a3<_0xfa9a77[_0xa6ed('0x18')];_0x2719a3+=0x1){var _0x413999;var _0x98a8a8=_0xfa9a77[_0x2719a3];if(_0xb0767d){_0x413999=path['join'](_0x4340f4,_0x116d33,util[_0xa6ed('0xb')](_0xa6ed('0x22'),_0x116d33,_0x2719a3,_0xa6ed('0x23')));}else{_0x413999=path[_0xa6ed('0x20')](_0x4340f4,util[_0xa6ed('0xb')](_0xa6ed('0x24'),_0x116d33,_0xa6ed('0x23')));}fs[_0xa6ed('0x25')](_0x413999,csv(_0x98a8a8));}})[_0xa6ed('0x12')](function(){if(_0xb0767d){zipdir(path['join'](_0x4340f4,_0x116d33),{'saveTo':path[_0xa6ed('0x20')](_0x4340f4,util[_0xa6ed('0xb')]('%s.%s',_0x116d33,'zip'))},function(_0x528151,_0x40f6cd){});rimraf(path['join'](_0x4340f4,_0x116d33),function(){});}})['then'](function(){logger[_0xa6ed('0x26')](util[_0xa6ed('0xb')](_0xa6ed('0x27'),EXTRACTED_REPORT_ID,_0xa6ed('0xd')));return analyticExtractedReport(_0xa6ed('0x28'),_0xb0767d?util[_0xa6ed('0xb')](_0xa6ed('0x24'),_0x116d33,_0xb0767d?_0xa6ed('0x29'):_0xa6ed('0x23')):null);});})[_0xa6ed('0x2a')](function(_0x3bfd4a){logger['info'](util[_0xa6ed('0xb')](_0xa6ed('0x2b'),EXTRACTED_REPORT_ID,'CSV'),util[_0xa6ed('0x2c')](_0x3bfd4a,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0xa6ed('0x2d'));});}main();
\ No newline at end of file
index 91d0d5f..a6c0da9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb8e0=['basename','Setting','find','split','then','splitSizePdf','length','query','format','%s\x20limit\x20%d\x20OFFSET\x20%d','SELECT','sequelize','QueryTypes','join','each','Name:\x20%s\x0aReport:\x20%s\x0aFrom:\x20%s\x20To:\x20%s','startDate','header','black','body','toString','content','/fonts/Roboto-Regular.ttf','/fonts/Roboto-Medium.ttf','/fonts/Roboto-Italic.ttf','/fonts/Roboto-MediumItalic.ttf','pdf','%s.%s','createWriteStream','finish','log','err','end','zip','Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed','CSV','Completed','info','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','PDF','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','catch','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','Failed','bluebird','util','path','pdfmake/src/printer','rimraf','../../mysqldb','dbH','argv','savename','AnalyticExtractedReport','update','hasOwnProperty','push','tableHeader','num','Empty','dirname'];(function(_0xd41e59,_0x2c7bbf){var _0x431192=function(_0x2bb781){while(--_0x2bb781){_0xd41e59['push'](_0xd41e59['shift']());}};_0x431192(++_0x2c7bbf);}(_0xb8e0,0xe3));var _0x0b8e=function(_0x408d22,_0x53eef9){_0x408d22=_0x408d22-0x0;var _0x58effd=_0xb8e0[_0x408d22];return _0x58effd;};'use strict';var _=require('lodash');var fs=require('fs');var BPromise=require(_0x0b8e('0x0'));var util=require(_0x0b8e('0x1'));var path=require(_0x0b8e('0x2'));var moment=require('moment');var PdfPrinter=require(_0x0b8e('0x3'));var zipdir=require('zip-dir');var rimraf=require(_0x0b8e('0x4'));var db=require(_0x0b8e('0x5'))['db'];var dbH=require('../../mysqldb')[_0x0b8e('0x6')];var logger=require('../../config/logger')('analytics');var EXTRACTED_REPORT_ID=Number(process[_0x0b8e('0x7')][0x2]);var QUERY=process[_0x0b8e('0x7')][0x3];var PATH=process[_0x0b8e('0x7')][0x4];var NAME=process['argv'][0x5];var FORMAT='MMMM\x20Do\x20YYYY,\x20h:mm:ss\x20a';var _extractedReport;function analyticExtractedReport(_0x256eee,_0x5160a1){var _0x244cd8={'status':_0x256eee};var _0x574726={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x5160a1){_0x244cd8[_0x0b8e('0x8')]=_0x5160a1;}return db[_0x0b8e('0x9')][_0x0b8e('0xa')](_0x244cd8,_0x574726);}function getHeader(_0x3865a7){var _0x245cc0=[];for(var _0x1f2e27 in _0x3865a7){if(_0x3865a7[_0x0b8e('0xb')](_0x1f2e27)){_0x245cc0[_0x0b8e('0xc')]({'text':_0x1f2e27,'style':_0x0b8e('0xd')});}}return _0x245cc0;}function extractReport(_0x55fb13){var _0x7b678a=0x1388;var _0x3bf270;if(!_0x55fb13[0x0][_0x0b8e('0xe')]){return analyticExtractedReport(_0x0b8e('0xf'));}var _0x3c7e19=[];var _0x13e207=0x0;var _0x2cad32=!![];var _0x2df9d9=path[_0x0b8e('0x10')](PATH);var _0x229918=path[_0x0b8e('0x11')](PATH,'.pdf');var _0x4b3c5f=![];var _0x2647af=[];return db[_0x0b8e('0x12')][_0x0b8e('0x13')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0x0b8e('0x14'),'splitSizePdf']})[_0x0b8e('0x15')](function(_0x127f19){if(_0x127f19){_0x3bf270=_0x127f19;_0x7b678a=_0x3bf270[_0x0b8e('0x16')]||0x3e8;}})[_0x0b8e('0x15')](function(){if(_0x55fb13&&_0x55fb13[_0x0b8e('0x17')]){var _0x4fd947=_0x55fb13[0x0][_0x0b8e('0xe')]%(_0x13e207+_0x7b678a);if(_0x3bf270['split']){for(;_0x2cad32;_0x13e207+=_0x7b678a,_0x4fd947=_0x55fb13[0x0]['num']%(_0x13e207+_0x7b678a)){if(_0x4fd947==0x0||_0x4fd947==_0x55fb13[0x0][_0x0b8e('0xe')]){_0x2cad32=![];}_0x3c7e19['push'](dbH['sequelize'][_0x0b8e('0x18')](util[_0x0b8e('0x19')](_0x0b8e('0x1a'),QUERY,_0x7b678a,_0x13e207),{'type':dbH['sequelize']['QueryTypes'][_0x0b8e('0x1b')]}));}}else{_0x3c7e19[_0x0b8e('0xc')](dbH['sequelize'][_0x0b8e('0x18')](QUERY,{'type':dbH[_0x0b8e('0x1c')][_0x0b8e('0x1d')][_0x0b8e('0x1b')]}));}}_0x4b3c5f=_0x3bf270[_0x0b8e('0x14')]&&_0x3c7e19[_0x0b8e('0x17')]>0x1;if(!fs['existsSync'](path[_0x0b8e('0x1e')](_0x2df9d9,_0x229918))&&_0x4b3c5f){fs['mkdirSync'](path[_0x0b8e('0x1e')](_0x2df9d9,_0x229918));}return BPromise[_0x0b8e('0x1f')](_0x3c7e19,function(_0x29f312){_0x2647af[_0x0b8e('0xc')](_0x29f312);});})[_0x0b8e('0x15')](function(){return BPromise[_0x0b8e('0x1f')](_0x3c7e19,function(_0x42b6d4,_0x393fcb){var _0x1ea6c5;var _0x280df9=util[_0x0b8e('0x19')](_0x0b8e('0x20'),NAME,_extractedReport['name'],moment(_extractedReport[_0x0b8e('0x21')])[_0x0b8e('0x19')](FORMAT),moment(_extractedReport['endDate'])[_0x0b8e('0x19')](FORMAT));var _0x442d50={'pageSize':'A4','pageOrientation':'landscape','content':[{'text':_0x280df9,'style':_0x0b8e('0x22')}],'styles':{'header':{'fontSize':0x12,'bold':!![],'margin':[0x0,0x0,0x0,0xa]},'tableHeader':{'bold':!![],'fontSize':0xd,'color':_0x0b8e('0x23')}}};var _0x40b6a5={'headerRows':0x1,'body':[]};_0x40b6a5[_0x0b8e('0x24')][_0x0b8e('0xc')](getHeader(_0x42b6d4[0x0]));var _0x484f2c;for(var _0x149911=0x0;_0x149911<_0x42b6d4[_0x0b8e('0x17')];_0x149911+=0x1){_0x484f2c=[];for(var _0x1f7d94 in _0x42b6d4[_0x149911]){if(_0x42b6d4[_0x149911][_0x0b8e('0xb')](_0x1f7d94)){_0x484f2c['push'](_0x42b6d4[_0x149911][_0x1f7d94]?_[_0x0b8e('0x25')](_0x42b6d4[_0x149911][_0x1f7d94]):'');}}_0x40b6a5[_0x0b8e('0x24')][_0x0b8e('0xc')](_0x484f2c);}_0x442d50[_0x0b8e('0x26')][_0x0b8e('0xc')]({'table':_0x40b6a5});return new BPromise(function(_0x4f7816,_0x2c3b64){var _0x4297b5=new PdfPrinter({'Roboto':{'normal':__dirname+_0x0b8e('0x27'),'bold':__dirname+_0x0b8e('0x28'),'italics':__dirname+_0x0b8e('0x29'),'bolditalics':__dirname+_0x0b8e('0x2a')}});var _0x561cba=_0x4297b5['createPdfKitDocument'](_0x442d50);if(_0x4b3c5f){_0x1ea6c5=path[_0x0b8e('0x1e')](_0x2df9d9,_0x229918,util[_0x0b8e('0x19')]('%s%d.%s',_0x229918,_0x393fcb,_0x0b8e('0x2b')));}else{_0x1ea6c5=path[_0x0b8e('0x1e')](_0x2df9d9,util[_0x0b8e('0x19')](_0x0b8e('0x2c'),_0x229918,'pdf'));}var _0x181ff8=_0x561cba['pipe'](fs[_0x0b8e('0x2d')](_0x1ea6c5));_0x181ff8['on'](_0x0b8e('0x2e'),function(){_0x4f7816();});_0x181ff8['on']('error',function(_0x2ad3a7){console[_0x0b8e('0x2f')](_0x0b8e('0x30'),_0x2ad3a7);_0x2c3b64(_0x2ad3a7);});_0x561cba[_0x0b8e('0x31')]();});});})[_0x0b8e('0x15')](function(){if(_0x4b3c5f){return new BPromise(function(_0x17eb14,_0x15ce99){zipdir(path[_0x0b8e('0x1e')](_0x2df9d9,_0x229918),{'saveTo':path[_0x0b8e('0x1e')](_0x2df9d9,util[_0x0b8e('0x19')]('%s.%s',_0x229918,_0x0b8e('0x32')))},function(_0x27df08){if(_0x27df08){_0x15ce99(_0x27df08);}else{_0x17eb14();}});});}})[_0x0b8e('0x15')](function(){if(_0x4b3c5f){rimraf(path[_0x0b8e('0x1e')](_0x2df9d9,_0x229918),function(){});}})['then'](function(){logger['info'](util[_0x0b8e('0x19')](_0x0b8e('0x33'),EXTRACTED_REPORT_ID,_0x0b8e('0x34')));return analyticExtractedReport(_0x0b8e('0x35'),_0x4b3c5f?util[_0x0b8e('0x19')]('%s.%s',_0x229918,_0x4b3c5f?'zip':_0x0b8e('0x2b')):null);});}function main(){logger[_0x0b8e('0x36')](util['format'](_0x0b8e('0x37'),EXTRACTED_REPORT_ID,_0x0b8e('0x38')));return db[_0x0b8e('0x9')]['findOne']({'where':{'id':EXTRACTED_REPORT_ID}})[_0x0b8e('0x15')](function(_0x4567ee){_extractedReport=_0x4567ee;return dbH['sequelize'][_0x0b8e('0x18')](util['format'](_0x0b8e('0x39'),QUERY),{'type':dbH[_0x0b8e('0x1c')]['QueryTypes'][_0x0b8e('0x1b')]});})[_0x0b8e('0x15')](extractReport)[_0x0b8e('0x3a')](function(_0x3c3734){logger[_0x0b8e('0x36')](util[_0x0b8e('0x19')](_0x0b8e('0x3b'),EXTRACTED_REPORT_ID,_0x0b8e('0x38')),util['inspect'](_0x3c3734,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0x0b8e('0x3c'));});}main();
\ No newline at end of file
+var _0x1fda=['AnalyticExtractedReport','hasOwnProperty','num','Empty','.pdf','find','splitSizePdf','then','length','split','push','query','format','sequelize','QueryTypes','SELECT','existsSync','join','each','Name:\x20%s\x0aReport:\x20%s\x0aFrom:\x20%s\x20To:\x20%s','name','startDate','endDate','landscape','header','black','toString','body','content','/fonts/Roboto-Regular.ttf','/fonts/Roboto-Medium.ttf','/fonts/Roboto-Italic.ttf','/fonts/Roboto-MediumItalic.ttf','createPdfKitDocument','%s%d.%s','pdf','%s.%s','pipe','createWriteStream','log','err','end','zip','info','Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','findOne','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','inspect','Failed','lodash','path','moment','zip-dir','rimraf','../../mysqldb','dbH','analytics','argv','MMMM\x20Do\x20YYYY,\x20h:mm:ss\x20a','savename'];(function(_0xb1937e,_0x330b2f){var _0x44474f=function(_0x4336e0){while(--_0x4336e0){_0xb1937e['push'](_0xb1937e['shift']());}};_0x44474f(++_0x330b2f);}(_0x1fda,0x126));var _0xa1fd=function(_0x57392e,_0x2ba38b){_0x57392e=_0x57392e-0x0;var _0x1f2183=_0x1fda[_0x57392e];return _0x1f2183;};'use strict';var _=require(_0xa1fd('0x0'));var fs=require('fs');var BPromise=require('bluebird');var util=require('util');var path=require(_0xa1fd('0x1'));var moment=require(_0xa1fd('0x2'));var PdfPrinter=require('pdfmake/src/printer');var zipdir=require(_0xa1fd('0x3'));var rimraf=require(_0xa1fd('0x4'));var db=require(_0xa1fd('0x5'))['db'];var dbH=require(_0xa1fd('0x5'))[_0xa1fd('0x6')];var logger=require('../../config/logger')(_0xa1fd('0x7'));var EXTRACTED_REPORT_ID=Number(process[_0xa1fd('0x8')][0x2]);var QUERY=process[_0xa1fd('0x8')][0x3];var PATH=process['argv'][0x4];var NAME=process[_0xa1fd('0x8')][0x5];var FORMAT=_0xa1fd('0x9');var _extractedReport;function analyticExtractedReport(_0x3a08e8,_0x1a32ec){var _0x35f870={'status':_0x3a08e8};var _0x4d9488={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x1a32ec){_0x35f870[_0xa1fd('0xa')]=_0x1a32ec;}return db[_0xa1fd('0xb')]['update'](_0x35f870,_0x4d9488);}function getHeader(_0x1f47b1){var _0x31202e=[];for(var _0x623ad8 in _0x1f47b1){if(_0x1f47b1[_0xa1fd('0xc')](_0x623ad8)){_0x31202e['push']({'text':_0x623ad8,'style':'tableHeader'});}}return _0x31202e;}function extractReport(_0x5f5898){var _0x583593=0x1388;var _0x4c789e;if(!_0x5f5898[0x0][_0xa1fd('0xd')]){return analyticExtractedReport(_0xa1fd('0xe'));}var _0x5f5bd5=[];var _0x649c75=0x0;var _0x514697=!![];var _0x2b0b98=path['dirname'](PATH);var _0x50473e=path['basename'](PATH,_0xa1fd('0xf'));var _0x4f2f52=![];var _0x3ac758=[];return db['Setting'][_0xa1fd('0x10')]({'where':{'id':0x1},'raw':!![],'attributes':['id','split',_0xa1fd('0x11')]})['then'](function(_0x56d73d){if(_0x56d73d){_0x4c789e=_0x56d73d;_0x583593=_0x4c789e[_0xa1fd('0x11')]||0x3e8;}})[_0xa1fd('0x12')](function(){if(_0x5f5898&&_0x5f5898[_0xa1fd('0x13')]){var _0x6919d1=_0x5f5898[0x0][_0xa1fd('0xd')]%(_0x649c75+_0x583593);if(_0x4c789e[_0xa1fd('0x14')]){for(;_0x514697;_0x649c75+=_0x583593,_0x6919d1=_0x5f5898[0x0][_0xa1fd('0xd')]%(_0x649c75+_0x583593)){if(_0x6919d1==0x0||_0x6919d1==_0x5f5898[0x0][_0xa1fd('0xd')]){_0x514697=![];}_0x5f5bd5[_0xa1fd('0x15')](dbH['sequelize'][_0xa1fd('0x16')](util[_0xa1fd('0x17')]('%s\x20limit\x20%d\x20OFFSET\x20%d',QUERY,_0x583593,_0x649c75),{'type':dbH[_0xa1fd('0x18')][_0xa1fd('0x19')][_0xa1fd('0x1a')]}));}}else{_0x5f5bd5[_0xa1fd('0x15')](dbH['sequelize'][_0xa1fd('0x16')](QUERY,{'type':dbH[_0xa1fd('0x18')][_0xa1fd('0x19')][_0xa1fd('0x1a')]}));}}_0x4f2f52=_0x4c789e['split']&&_0x5f5bd5[_0xa1fd('0x13')]>0x1;if(!fs[_0xa1fd('0x1b')](path[_0xa1fd('0x1c')](_0x2b0b98,_0x50473e))&&_0x4f2f52){fs['mkdirSync'](path[_0xa1fd('0x1c')](_0x2b0b98,_0x50473e));}return BPromise[_0xa1fd('0x1d')](_0x5f5bd5,function(_0xc2ef4e){_0x3ac758[_0xa1fd('0x15')](_0xc2ef4e);});})[_0xa1fd('0x12')](function(){return BPromise[_0xa1fd('0x1d')](_0x5f5bd5,function(_0x4e9b75,_0x11b76c){var _0x21b6d1;var _0xa729aa=util[_0xa1fd('0x17')](_0xa1fd('0x1e'),NAME,_extractedReport[_0xa1fd('0x1f')],moment(_extractedReport[_0xa1fd('0x20')])[_0xa1fd('0x17')](FORMAT),moment(_extractedReport[_0xa1fd('0x21')])[_0xa1fd('0x17')](FORMAT));var _0x27bb91={'pageSize':'A4','pageOrientation':_0xa1fd('0x22'),'content':[{'text':_0xa729aa,'style':_0xa1fd('0x23')}],'styles':{'header':{'fontSize':0x12,'bold':!![],'margin':[0x0,0x0,0x0,0xa]},'tableHeader':{'bold':!![],'fontSize':0xd,'color':_0xa1fd('0x24')}}};var _0x2ffe97={'headerRows':0x1,'body':[]};_0x2ffe97['body'][_0xa1fd('0x15')](getHeader(_0x4e9b75[0x0]));var _0x12fb40;for(var _0xa8a178=0x0;_0xa8a178<_0x4e9b75[_0xa1fd('0x13')];_0xa8a178+=0x1){_0x12fb40=[];for(var _0x4e65eb in _0x4e9b75[_0xa8a178]){if(_0x4e9b75[_0xa8a178][_0xa1fd('0xc')](_0x4e65eb)){_0x12fb40[_0xa1fd('0x15')](_0x4e9b75[_0xa8a178][_0x4e65eb]?_[_0xa1fd('0x25')](_0x4e9b75[_0xa8a178][_0x4e65eb]):'');}}_0x2ffe97[_0xa1fd('0x26')][_0xa1fd('0x15')](_0x12fb40);}_0x27bb91[_0xa1fd('0x27')]['push']({'table':_0x2ffe97});return new BPromise(function(_0x59c70f,_0x5852c3){var _0x1bd15b=new PdfPrinter({'Roboto':{'normal':__dirname+_0xa1fd('0x28'),'bold':__dirname+_0xa1fd('0x29'),'italics':__dirname+_0xa1fd('0x2a'),'bolditalics':__dirname+_0xa1fd('0x2b')}});var _0x101b05=_0x1bd15b[_0xa1fd('0x2c')](_0x27bb91);if(_0x4f2f52){_0x21b6d1=path[_0xa1fd('0x1c')](_0x2b0b98,_0x50473e,util[_0xa1fd('0x17')](_0xa1fd('0x2d'),_0x50473e,_0x11b76c,_0xa1fd('0x2e')));}else{_0x21b6d1=path[_0xa1fd('0x1c')](_0x2b0b98,util[_0xa1fd('0x17')](_0xa1fd('0x2f'),_0x50473e,_0xa1fd('0x2e')));}var _0x238e79=_0x101b05[_0xa1fd('0x30')](fs[_0xa1fd('0x31')](_0x21b6d1));_0x238e79['on']('finish',function(){_0x59c70f();});_0x238e79['on']('error',function(_0x3bc454){console[_0xa1fd('0x32')](_0xa1fd('0x33'),_0x3bc454);_0x5852c3(_0x3bc454);});_0x101b05[_0xa1fd('0x34')]();});});})['then'](function(){if(_0x4f2f52){return new BPromise(function(_0x794856,_0x26e392){zipdir(path['join'](_0x2b0b98,_0x50473e),{'saveTo':path['join'](_0x2b0b98,util[_0xa1fd('0x17')](_0xa1fd('0x2f'),_0x50473e,_0xa1fd('0x35')))},function(_0x15be70){if(_0x15be70){_0x26e392(_0x15be70);}else{_0x794856();}});});}})['then'](function(){if(_0x4f2f52){rimraf(path['join'](_0x2b0b98,_0x50473e),function(){});}})['then'](function(){logger[_0xa1fd('0x36')](util[_0xa1fd('0x17')](_0xa1fd('0x37'),EXTRACTED_REPORT_ID,'CSV'));return analyticExtractedReport('Completed',_0x4f2f52?util[_0xa1fd('0x17')](_0xa1fd('0x2f'),_0x50473e,_0x4f2f52?_0xa1fd('0x35'):_0xa1fd('0x2e')):null);});}function main(){logger[_0xa1fd('0x36')](util[_0xa1fd('0x17')](_0xa1fd('0x38'),EXTRACTED_REPORT_ID,'PDF'));return db[_0xa1fd('0xb')][_0xa1fd('0x39')]({'where':{'id':EXTRACTED_REPORT_ID}})[_0xa1fd('0x12')](function(_0x5afcfd){_extractedReport=_0x5afcfd;return dbH[_0xa1fd('0x18')]['query'](util['format']('SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t',QUERY),{'type':dbH[_0xa1fd('0x18')][_0xa1fd('0x19')]['SELECT']});})[_0xa1fd('0x12')](extractReport)['catch'](function(_0x5709ad){logger[_0xa1fd('0x36')](util['format'](_0xa1fd('0x3a'),EXTRACTED_REPORT_ID,'PDF'),util[_0xa1fd('0x3b')](_0x5709ad,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0xa1fd('0x3c'));});}main();
\ No newline at end of file
index 9951f99..21aa14e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeb38=['rimraf','argv','savename','update','info','format','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','XLSX','Setting','find','split','then','splitSizeXlsx','sequelize','query','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','num','length','push','%s\x20limit\x20%d\x20OFFSET\x20%d','SELECT','.xlsx','mkdirSync','join','each','%s%d.%s','xlsx','writeFileSync','binary','%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','inspect','Failed','util','path','lodash','json2xls','bluebird','zip-dir'];(function(_0x59a016,_0xfdd107){var _0x5db5bb=function(_0xe5b8f9){while(--_0xe5b8f9){_0x59a016['push'](_0x59a016['shift']());}};_0x5db5bb(++_0xfdd107);}(_0xeb38,0xd1));var _0x8eb3=function(_0x176329,_0x568c84){_0x176329=_0x176329-0x0;var _0x31997c=_0xeb38[_0x176329];return _0x31997c;};'use strict';var util=require(_0x8eb3('0x0'));var path=require(_0x8eb3('0x1'));var _=require(_0x8eb3('0x2'));var fs=require('fs');var json2xls=require(_0x8eb3('0x3'));var BPromise=require(_0x8eb3('0x4'));var zipdir=require(_0x8eb3('0x5'));var rimraf=require(_0x8eb3('0x6'));var db=require('../../mysqldb')['db'];var dbH=require('../../mysqldb')['dbH'];var logger=require('../../config/logger')('analytics');var EXTRACTED_REPORT_ID=Number(process['argv'][0x2]);var QUERY=process['argv'][0x3];var PATH=process[_0x8eb3('0x7')][0x4];function analyticExtractedReport(_0x4441fa,_0x1e6778){var _0x31b3fb={'status':_0x4441fa};var _0x407bde={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x1e6778){_0x31b3fb[_0x8eb3('0x8')]=_0x1e6778;}return db['AnalyticExtractedReport'][_0x8eb3('0x9')](_0x31b3fb,_0x407bde);}function main(){var _0xba7095=0x1388;var _0x35db3a;logger[_0x8eb3('0xa')](util[_0x8eb3('0xb')](_0x8eb3('0xc'),EXTRACTED_REPORT_ID,_0x8eb3('0xd')));return db[_0x8eb3('0xe')][_0x8eb3('0xf')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0x8eb3('0x10'),'splitSizeXlsx']})[_0x8eb3('0x11')](function(_0x4f88ea){if(_0x4f88ea){_0x35db3a=_0x4f88ea;_0xba7095=_0x35db3a[_0x8eb3('0x12')]||0x1388;}})[_0x8eb3('0x11')](function(){return dbH[_0x8eb3('0x13')][_0x8eb3('0x14')](util[_0x8eb3('0xb')](_0x8eb3('0x15'),QUERY),{'type':dbH[_0x8eb3('0x13')]['QueryTypes']['SELECT']});})[_0x8eb3('0x11')](function(_0x55ed24){if(!_0x55ed24[0x0][_0x8eb3('0x16')]){return analyticExtractedReport('Empty');}var _0x4d0084=[];var _0x1e8db0=0x0;var _0x440d87=!![];if(_0x35db3a[_0x8eb3('0x10')]){if(_0x55ed24&&_0x55ed24[_0x8eb3('0x17')]){var _0xe7a43b=_0x55ed24[0x0][_0x8eb3('0x16')]%(_0x1e8db0+_0xba7095);for(;_0x440d87;_0x1e8db0+=_0xba7095,_0xe7a43b=_0x55ed24[0x0][_0x8eb3('0x16')]%(_0x1e8db0+_0xba7095)){if(_0xe7a43b==0x0||_0xe7a43b==_0x55ed24[0x0][_0x8eb3('0x16')]){_0x440d87=![];}_0x4d0084[_0x8eb3('0x18')](dbH[_0x8eb3('0x13')]['query'](util['format'](_0x8eb3('0x19'),QUERY,_0xba7095,_0x1e8db0),{'type':dbH['sequelize']['QueryTypes'][_0x8eb3('0x1a')]}));}}}else{_0x4d0084[_0x8eb3('0x18')](dbH['sequelize'][_0x8eb3('0x14')](QUERY,{'type':dbH[_0x8eb3('0x13')]['QueryTypes']['SELECT']}));}var _0x36c5a9=path['dirname'](PATH);var _0x251de1=path['basename'](PATH,_0x8eb3('0x1b'));var _0x10917e=_0x35db3a[_0x8eb3('0x10')]&&_0x4d0084[_0x8eb3('0x17')]>0x1;var _0x32fd7c=[];if(!fs['existsSync'](path['join'](_0x36c5a9,_0x251de1))&&_0x10917e){fs[_0x8eb3('0x1c')](path[_0x8eb3('0x1d')](_0x36c5a9,_0x251de1));}return BPromise[_0x8eb3('0x1e')](_0x4d0084,function(_0x486bc6){_0x32fd7c['push'](_0x486bc6);})[_0x8eb3('0x11')](function(){for(var _0x2da00c=0x0;_0x2da00c<_0x32fd7c[_0x8eb3('0x17')];_0x2da00c+=0x1){var _0x4a3e53;var _0x141527=_0x32fd7c[_0x2da00c];if(_0x10917e){_0x4a3e53=path[_0x8eb3('0x1d')](_0x36c5a9,_0x251de1,util[_0x8eb3('0xb')](_0x8eb3('0x1f'),_0x251de1,_0x2da00c,_0x8eb3('0x20')));}else{_0x4a3e53=path[_0x8eb3('0x1d')](_0x36c5a9,util['format']('%s.%s',_0x251de1,_0x8eb3('0x20')));}fs[_0x8eb3('0x21')](_0x4a3e53,json2xls(_0x141527),_0x8eb3('0x22'));}})[_0x8eb3('0x11')](function(){if(_0x10917e){zipdir(path['join'](_0x36c5a9,_0x251de1),{'saveTo':path[_0x8eb3('0x1d')](_0x36c5a9,util[_0x8eb3('0xb')](_0x8eb3('0x23'),_0x251de1,_0x8eb3('0x24')))},function(_0x2927b9,_0x1e20ef){});rimraf(path[_0x8eb3('0x1d')](_0x36c5a9,_0x251de1),function(){});}})[_0x8eb3('0x11')](function(){logger[_0x8eb3('0xa')](util[_0x8eb3('0xb')](_0x8eb3('0x25'),EXTRACTED_REPORT_ID,_0x8eb3('0xd')));return analyticExtractedReport(_0x8eb3('0x26'),_0x10917e?util[_0x8eb3('0xb')](_0x8eb3('0x23'),_0x251de1,_0x10917e?'zip':_0x8eb3('0x20')):null);});})[_0x8eb3('0x27')](function(_0x44b2d0){logger['info'](util[_0x8eb3('0xb')](_0x8eb3('0x28'),EXTRACTED_REPORT_ID,_0x8eb3('0xd')),util[_0x8eb3('0x29')](_0x44b2d0,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0x8eb3('0x2a'));});}main();
\ No newline at end of file
+var _0x7ad8=['catch','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','Failed','util','path','lodash','bluebird','zip-dir','rimraf','../../mysqldb','dbH','../../config/logger','analytics','argv','savename','AnalyticExtractedReport','update','format','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','XLSX','split','splitSizeXlsx','then','sequelize','query','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','QueryTypes','SELECT','Empty','num','%s\x20limit\x20%d\x20OFFSET\x20%d','push','basename','.xlsx','length','join','mkdirSync','each','%s%d.%s','xlsx','%s.%s','writeFileSync','binary','zip','info','Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed','Completed'];(function(_0x47aa64,_0xfb8a07){var _0x549c7a=function(_0x266165){while(--_0x266165){_0x47aa64['push'](_0x47aa64['shift']());}};_0x549c7a(++_0xfb8a07);}(_0x7ad8,0x11d));var _0x87ad=function(_0x2405bc,_0x2f28a1){_0x2405bc=_0x2405bc-0x0;var _0x5272d4=_0x7ad8[_0x2405bc];return _0x5272d4;};'use strict';var util=require(_0x87ad('0x0'));var path=require(_0x87ad('0x1'));var _=require(_0x87ad('0x2'));var fs=require('fs');var json2xls=require('json2xls');var BPromise=require(_0x87ad('0x3'));var zipdir=require(_0x87ad('0x4'));var rimraf=require(_0x87ad('0x5'));var db=require(_0x87ad('0x6'))['db'];var dbH=require('../../mysqldb')[_0x87ad('0x7')];var logger=require(_0x87ad('0x8'))(_0x87ad('0x9'));var EXTRACTED_REPORT_ID=Number(process['argv'][0x2]);var QUERY=process[_0x87ad('0xa')][0x3];var PATH=process[_0x87ad('0xa')][0x4];function analyticExtractedReport(_0x1d2f80,_0x57ab08){var _0x205a6a={'status':_0x1d2f80};var _0xa63f50={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x57ab08){_0x205a6a[_0x87ad('0xb')]=_0x57ab08;}return db[_0x87ad('0xc')][_0x87ad('0xd')](_0x205a6a,_0xa63f50);}function main(){var _0x80e0cc=0x1388;var _0x1026da;logger['info'](util[_0x87ad('0xe')](_0x87ad('0xf'),EXTRACTED_REPORT_ID,_0x87ad('0x10')));return db['Setting']['find']({'where':{'id':0x1},'raw':!![],'attributes':['id',_0x87ad('0x11'),_0x87ad('0x12')]})[_0x87ad('0x13')](function(_0x5ad722){if(_0x5ad722){_0x1026da=_0x5ad722;_0x80e0cc=_0x1026da['splitSizeXlsx']||0x1388;}})[_0x87ad('0x13')](function(){return dbH[_0x87ad('0x14')][_0x87ad('0x15')](util[_0x87ad('0xe')](_0x87ad('0x16'),QUERY),{'type':dbH[_0x87ad('0x14')][_0x87ad('0x17')][_0x87ad('0x18')]});})['then'](function(_0x32db5e){if(!_0x32db5e[0x0]['num']){return analyticExtractedReport(_0x87ad('0x19'));}var _0x3feeda=[];var _0x1653c8=0x0;var _0x561d65=!![];if(_0x1026da['split']){if(_0x32db5e&&_0x32db5e['length']){var _0x3df893=_0x32db5e[0x0][_0x87ad('0x1a')]%(_0x1653c8+_0x80e0cc);for(;_0x561d65;_0x1653c8+=_0x80e0cc,_0x3df893=_0x32db5e[0x0][_0x87ad('0x1a')]%(_0x1653c8+_0x80e0cc)){if(_0x3df893==0x0||_0x3df893==_0x32db5e[0x0][_0x87ad('0x1a')]){_0x561d65=![];}_0x3feeda['push'](dbH['sequelize'][_0x87ad('0x15')](util[_0x87ad('0xe')](_0x87ad('0x1b'),QUERY,_0x80e0cc,_0x1653c8),{'type':dbH[_0x87ad('0x14')][_0x87ad('0x17')][_0x87ad('0x18')]}));}}}else{_0x3feeda[_0x87ad('0x1c')](dbH['sequelize']['query'](QUERY,{'type':dbH[_0x87ad('0x14')]['QueryTypes'][_0x87ad('0x18')]}));}var _0x463d7d=path['dirname'](PATH);var _0x532c8e=path[_0x87ad('0x1d')](PATH,_0x87ad('0x1e'));var _0x332415=_0x1026da['split']&&_0x3feeda[_0x87ad('0x1f')]>0x1;var _0x21b9dc=[];if(!fs['existsSync'](path[_0x87ad('0x20')](_0x463d7d,_0x532c8e))&&_0x332415){fs[_0x87ad('0x21')](path[_0x87ad('0x20')](_0x463d7d,_0x532c8e));}return BPromise[_0x87ad('0x22')](_0x3feeda,function(_0x2319d1){_0x21b9dc[_0x87ad('0x1c')](_0x2319d1);})[_0x87ad('0x13')](function(){for(var _0x3b1990=0x0;_0x3b1990<_0x21b9dc[_0x87ad('0x1f')];_0x3b1990+=0x1){var _0x25a365;var _0x268bd8=_0x21b9dc[_0x3b1990];if(_0x332415){_0x25a365=path['join'](_0x463d7d,_0x532c8e,util['format'](_0x87ad('0x23'),_0x532c8e,_0x3b1990,_0x87ad('0x24')));}else{_0x25a365=path[_0x87ad('0x20')](_0x463d7d,util[_0x87ad('0xe')](_0x87ad('0x25'),_0x532c8e,_0x87ad('0x24')));}fs[_0x87ad('0x26')](_0x25a365,json2xls(_0x268bd8),_0x87ad('0x27'));}})[_0x87ad('0x13')](function(){if(_0x332415){zipdir(path[_0x87ad('0x20')](_0x463d7d,_0x532c8e),{'saveTo':path[_0x87ad('0x20')](_0x463d7d,util[_0x87ad('0xe')]('%s.%s',_0x532c8e,_0x87ad('0x28')))},function(_0xe295bb,_0x117eb5){});rimraf(path['join'](_0x463d7d,_0x532c8e),function(){});}})[_0x87ad('0x13')](function(){logger[_0x87ad('0x29')](util[_0x87ad('0xe')](_0x87ad('0x2a'),EXTRACTED_REPORT_ID,'XLSX'));return analyticExtractedReport(_0x87ad('0x2b'),_0x332415?util[_0x87ad('0xe')](_0x87ad('0x25'),_0x532c8e,_0x332415?_0x87ad('0x28'):_0x87ad('0x24')):null);});})[_0x87ad('0x2c')](function(_0x315133){logger[_0x87ad('0x29')](util[_0x87ad('0xe')](_0x87ad('0x2d'),EXTRACTED_REPORT_ID,'XLSX'),util['inspect'](_0x315133,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0x87ad('0x2e'));});}main();
\ No newline at end of file
index 4036e86..f3040a6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ed5=['XCALLY-MOTION-PROGRESS=0','MONITOR_OPTIONS=ab','toLowerCase','createdAt','updatedAt','interval','IntervalId','tag','length','callerID','$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)=','$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No\x20number\x20available)','answer','indexOf','app','appType','custom','$[${XCALLY-MOTION-ANSWER}=0]?Answer','XCALLY-MOTION-ANSWER=1','$[${XCALLY-MOTION-PROGRESS}=0]?Progress','splice','GotoIfTime',',${EXTEN},','last','concat','Hangup','transaction','bulkCreate','catch','rewrite','lodash','util','models','findAll','then','intervals','VoiceExtension','uniq','map','CAST(priority\x20AS\x20UNSIGNED)','filter','groupBy','playback','priority','extension','find','extensions','push','type','Set','format','CDR(type)=%s','context','exten','VoiceExtensionId','CDR(destination)=','cutdigits','${EXTEN:','${EXTEN}','CDR(routeid)=','ExecIf','):Goto(','CDR(prefix)=${EXTEN:0:','CDR(prefix)=noprefix','hasOwnProperty','recordingFormat','none','_XCALLY_MIXMONITOR_FORMAT=','wav','XCALLY-MOTION-ANSWER=0'];(function(_0x3621e5,_0x447957){var _0x562d4a=function(_0x1ce9fd){while(--_0x1ce9fd){_0x3621e5['push'](_0x3621e5['shift']());}};_0x562d4a(++_0x447957);}(_0x1ed5,0x136));var _0x51ed=function(_0x271537,_0x8b7b3b){_0x271537=_0x271537-0x0;var _0x19dc22=_0x1ed5[_0x271537];return _0x19dc22;};'use strict';var _=require(_0x51ed('0x0'));var util=require(_0x51ed('0x1'));function rewrite(_0x3e4c32,_0x4a7e14){var _0x2d932c=this;return _0x3e4c32[_0x51ed('0x2')]['Interval'][_0x51ed('0x3')]({'raw':!![]})[_0x51ed('0x4')](function(_0x42769a){_0x2d932c[_0x51ed('0x5')]=_0x42769a;return _0x3e4c32[_0x51ed('0x2')][_0x51ed('0x6')][_0x51ed('0x3')]({'where':{'IntervalId':_0x4a7e14['IntervalId']},'raw':!![]});})[_0x51ed('0x4')](function(_0x12bd04){return _0x3e4c32[_0x51ed('0x2')][_0x51ed('0x6')][_0x51ed('0x3')]({'where':{'exten':{'$in':_[_0x51ed('0x7')](_[_0x51ed('0x8')](_0x12bd04,'exten'))}},'order':[{'raw':_0x51ed('0x9')}],'raw':!![]});})[_0x51ed('0x4')](function(_0x5b82fd){var _0xdd0aa0=_[_0x51ed('0xa')](_0x5b82fd,{'priority':'1'});var _0x4b3fc0=_[_0x51ed('0xa')](_0x5b82fd,{'isApp':0x1});var _0x4cfe4e=_[_0x51ed('0xb')](_0x4b3fc0,'exten');var _0x5eb0f3=['queue',_0x51ed('0xc')];var _0x66782e=[];var _0xa7d9ea=[];for(var _0x6b8cf2 in _0x4cfe4e){if(_0x4cfe4e['hasOwnProperty'](_0x6b8cf2)){_0x2d932c[_0x51ed('0xd')]=0x2;_0x2d932c['extensions']=[];_0x2d932c[_0x51ed('0xe')]=_[_0x51ed('0xf')](_0xdd0aa0,{'exten':_0x4cfe4e[_0x6b8cf2][0x0]['exten']});_0x2d932c[_0x51ed('0x10')][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':_0x51ed('0x13'),'appdata':util[_0x51ed('0x14')](_0x51ed('0x15'),_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')]),'context':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x16')],'exten':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x17')],'priority':_0x2d932c[_0x51ed('0xd')]++,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x18')]});if(_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')]==='outbound'){if(_0x2d932c[_0x51ed('0xe')]){_0x2d932c[_0x51ed('0x10')][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':_0x51ed('0x13'),'appdata':_0x51ed('0x19')+(_0x2d932c[_0x51ed('0xe')][_0x51ed('0x1a')]?_0x51ed('0x1b')+_0x2d932c[_0x51ed('0xe')][_0x51ed('0x1a')]+'}':_0x51ed('0x1c')),'context':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x16')],'exten':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x17')],'priority':_0x2d932c['priority']++,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x18')]});}_0x2d932c[_0x51ed('0x10')][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':'Set','appdata':_0x51ed('0x1d')+_0x4cfe4e[_0x6b8cf2][0x0]['VoiceExtensionId'],'context':_0x4cfe4e[_0x6b8cf2][0x0]['context'],'exten':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x17')],'priority':_0x2d932c[_0x51ed('0xd')]++,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x18')]});var _0x438932=_0x2d932c[_0x51ed('0xd')]++;_0x2d932c[_0x51ed('0x10')][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':_0x51ed('0x1e'),'appdata':'$[${LEN(${CDR(prefix)})}\x20>\x200]?Goto('+(_0x438932+0x2)+_0x51ed('0x1f')+(_0x438932+0x1)+')','context':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x16')],'exten':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x17')],'priority':_0x438932,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0]['VoiceExtensionId']});if(_0x2d932c[_0x51ed('0xe')]){_0x2d932c[_0x51ed('0x10')][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':_0x51ed('0x13'),'appdata':_0x2d932c[_0x51ed('0xe')]['cutdigits']?_0x51ed('0x20')+_0x2d932c[_0x51ed('0xe')][_0x51ed('0x1a')]+'}':_0x51ed('0x21'),'context':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x16')],'exten':_0x4cfe4e[_0x6b8cf2][0x0]['exten'],'priority':_0x2d932c[_0x51ed('0xd')]++,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0]['VoiceExtensionId']});}_0x2d932c['extensions'][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':_0x51ed('0x13'),'appdata':'outboundrouteid='+_0x4cfe4e[_0x6b8cf2][0x0]['VoiceExtensionId'],'context':_0x4cfe4e[_0x6b8cf2][0x0]['context'],'exten':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x17')],'priority':_0x2d932c[_0x51ed('0xd')]++,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0]['VoiceExtensionId']});if(_0x2d932c['extension']&&_0x2d932c[_0x51ed('0xe')][_0x51ed('0x22')](_0x51ed('0x23'))&&_0x2d932c['extension'][_0x51ed('0x23')]!==_0x51ed('0x24')){_0x2d932c[_0x51ed('0x10')]['push']({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':'Set','appdata':'_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','context':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x16')],'exten':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x17')],'priority':_0x2d932c[_0x51ed('0xd')]++,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x18')]});_0x2d932c[_0x51ed('0x10')][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':_0x51ed('0x13'),'appdata':_0x51ed('0x25')+_0x2d932c[_0x51ed('0xe')][_0x51ed('0x23')]||_0x51ed('0x26'),'context':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x16')],'exten':_0x4cfe4e[_0x6b8cf2][0x0]['exten'],'priority':_0x2d932c['priority']++,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x18')]});}}_0x2d932c[_0x51ed('0x10')][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':'Set','appdata':_0x51ed('0x27'),'context':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x16')],'exten':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x17')],'priority':_0x2d932c[_0x51ed('0xd')]++,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x18')]});_0x2d932c['extensions'][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':_0x51ed('0x13'),'appdata':_0x51ed('0x28'),'context':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x16')],'exten':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x17')],'priority':_0x2d932c[_0x51ed('0xd')]++,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x18')]});_0x2d932c[_0x51ed('0x10')][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':'Set','appdata':_0x51ed('0x29'),'context':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x16')],'exten':_0x4cfe4e[_0x6b8cf2][0x0]['exten'],'priority':_0x2d932c[_0x51ed('0xd')]++,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x18')]});for(var _0x39d87d=0x0,_0x47232d=0x0;_0x39d87d<_0x4cfe4e[_0x6b8cf2]['length'];_0x39d87d+=0x1,_0x47232d=0x0){var _0x53cdd3=_0x4cfe4e[_0x6b8cf2][_0x39d87d];if(_0x53cdd3['type']){_0x53cdd3['type']=_0x53cdd3[_0x51ed('0x12')][_0x51ed('0x2a')]();}var _0x3c52f9=[];var _0xc85b3b=[];delete _0x53cdd3['id'];delete _0x53cdd3[_0x51ed('0x2b')];delete _0x53cdd3[_0x51ed('0x2c')];var _0x1e4f09=_0x53cdd3[_0x51ed('0x2d')]!=='*,*,*,*'?[_0x53cdd3['interval']]:_0x53cdd3['IntervalId']?_[_0x51ed('0x8')](_[_0x51ed('0xa')](_0x2d932c[_0x51ed('0x5')],{'IntervalId':_0x53cdd3[_0x51ed('0x2e')]}),_0x51ed('0x2d')):[];if(_0x53cdd3[_0x51ed('0x22')](_0x51ed('0x2f'))){if(_0x53cdd3[_0x51ed('0x2f')]&&_0x53cdd3['tag']!=='--'){_0x3c52f9[_0x51ed('0x11')]({'type':_0x53cdd3[_0x51ed('0x12')],'app':_0x51ed('0x13'),'appdata':'CDR(tag)='+_0x53cdd3[_0x51ed('0x2f')],'context':_0x53cdd3[_0x51ed('0x16')],'exten':_0x53cdd3[_0x51ed('0x17')],'priority':_0x1e4f09[_0x51ed('0x30')]+_0x2d932c[_0x51ed('0xd')]+_0x47232d++,'VoiceExtensionId':_0x53cdd3['VoiceExtensionId']});}}if(_0x53cdd3[_0x51ed('0x12')]==='outbound'&&_0x53cdd3[_0x51ed('0x22')](_0x51ed('0x31'))){if(_0x53cdd3['callerID']){_0x3c52f9[_0x51ed('0x11')]({'type':_0x53cdd3[_0x51ed('0x12')],'app':_0x51ed('0x1e'),'appdata':_0x51ed('0x32')+_0x53cdd3[_0x51ed('0x31')]+')','context':_0x53cdd3[_0x51ed('0x16')],'exten':_0x53cdd3[_0x51ed('0x17')],'priority':_0x1e4f09[_0x51ed('0x30')]+_0x2d932c[_0x51ed('0xd')]+_0x47232d++,'VoiceExtensionId':_0x53cdd3[_0x51ed('0x18')]});}else{_0x3c52f9['push']({'type':_0x53cdd3['type'],'app':_0x51ed('0x1e'),'appdata':_0x51ed('0x33'),'context':_0x53cdd3[_0x51ed('0x16')],'exten':_0x53cdd3[_0x51ed('0x17')],'priority':_0x1e4f09['length']+_0x2d932c[_0x51ed('0xd')]+_0x47232d++,'VoiceExtensionId':_0x53cdd3['VoiceExtensionId']});}}if(_0x53cdd3[_0x51ed('0x22')](_0x51ed('0x34'))){if(_0x5eb0f3[_0x51ed('0x35')](_0x53cdd3[_0x51ed('0x36')]['toLowerCase']())>=0x0&&_0x53cdd3[_0x51ed('0x37')]!==_0x51ed('0x38')){if(_0x53cdd3[_0x51ed('0x34')]){_0x3c52f9[_0x51ed('0x11')]({'type':_0x53cdd3['type'],'app':_0x51ed('0x1e'),'appdata':_0x51ed('0x39'),'context':_0x53cdd3['context'],'exten':_0x53cdd3[_0x51ed('0x17')],'priority':_0x1e4f09['length']+_0x2d932c[_0x51ed('0xd')]+_0x47232d++,'VoiceExtensionId':_0x53cdd3[_0x51ed('0x18')]});_0x3c52f9[_0x51ed('0x11')]({'type':_0x53cdd3[_0x51ed('0x12')],'app':_0x51ed('0x13'),'appdata':_0x51ed('0x3a'),'context':_0x53cdd3['context'],'exten':_0x53cdd3[_0x51ed('0x17')],'priority':_0x1e4f09[_0x51ed('0x30')]+_0x2d932c['priority']+_0x47232d++,'VoiceExtensionId':_0x53cdd3[_0x51ed('0x18')]});}else{_0x3c52f9[_0x51ed('0x11')]({'type':_0x53cdd3[_0x51ed('0x12')],'app':_0x51ed('0x1e'),'appdata':_0x51ed('0x3b'),'context':_0x53cdd3[_0x51ed('0x16')],'exten':_0x53cdd3[_0x51ed('0x17')],'priority':_0x1e4f09[_0x51ed('0x30')]+_0x2d932c[_0x51ed('0xd')]+_0x47232d++,'VoiceExtensionId':_0x53cdd3[_0x51ed('0x18')]});_0x3c52f9[_0x51ed('0x11')]({'type':_0x53cdd3[_0x51ed('0x12')],'app':_0x51ed('0x13'),'appdata':'XCALLY-MOTION-PROGRESS=1','context':_0x53cdd3[_0x51ed('0x16')],'exten':_0x53cdd3['exten'],'priority':_0x1e4f09[_0x51ed('0x30')]+_0x2d932c[_0x51ed('0xd')]+_0x47232d++,'VoiceExtensionId':_0x53cdd3[_0x51ed('0x18')]});}}}for(var _0x10b28b=0x0;_0x10b28b<_0x1e4f09[_0x51ed('0x30')];_0x10b28b+=0x1){var _0x42c65a=_0x2d932c['priority']+_0x1e4f09[_0x51ed('0x30')];var _0x3237e3=_0x10b28b===_0x1e4f09[_0x51ed('0x30')]-0x1?_0x2d932c[_0x51ed('0xd')]+_0x3c52f9['length']+_0xc85b3b['length']+0x2:_0x2d932c[_0x51ed('0xd')]+_0x10b28b+0x1;_0x3c52f9[_0x51ed('0x3c')](_0x10b28b,0x0,{'type':_0x53cdd3[_0x51ed('0x12')],'app':_0x51ed('0x3d'),'appdata':_0x1e4f09[_0x10b28b]+'?'+_0x53cdd3[_0x51ed('0x16')]+',${EXTEN},'+_0x42c65a+':'+_0x53cdd3[_0x51ed('0x16')]+_0x51ed('0x3e')+_0x3237e3,'exten':_0x53cdd3[_0x51ed('0x17')],'context':_0x53cdd3[_0x51ed('0x16')],'priority':_0x2d932c[_0x51ed('0xd')]+_0x10b28b,'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0]['VoiceExtensionId']});}_0x53cdd3[_0x51ed('0xd')]=_0x3c52f9[_0x51ed('0x30')]?_[_0x51ed('0x3f')](_0x3c52f9)[_0x51ed('0xd')]+0x1:_0x2d932c['priority'];_0x2d932c[_0x51ed('0xd')]=(_0xc85b3b[_0x51ed('0x30')]?_['last'](_0xc85b3b)[_0x51ed('0xd')]:_0x53cdd3[_0x51ed('0xd')])+0x1;_0x2d932c[_0x51ed('0x10')]=_[_0x51ed('0x40')](_0x2d932c[_0x51ed('0x10')],_0x3c52f9,[_0x53cdd3],_0xc85b3b);}_0x2d932c['extensions'][_0x51ed('0x11')]({'type':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x12')],'app':_0x51ed('0x41'),'exten':_0x4cfe4e[_0x6b8cf2][0x0]['exten'],'context':_0x4cfe4e[_0x6b8cf2][0x0]['context'],'priority':_0x2d932c[_0x51ed('0xd')],'VoiceExtensionId':_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x18')]});_0x66782e[_0x51ed('0x11')](_0x4cfe4e[_0x6b8cf2][0x0][_0x51ed('0x18')]);_0xa7d9ea=_[_0x51ed('0x40')](_0xa7d9ea,_0x2d932c[_0x51ed('0x10')]);}}return _0x3e4c32[_0x51ed('0x42')](function(_0x440ab3){return _0x3e4c32['models'][_0x51ed('0x6')]['destroy']({'where':{'VoiceExtensionId':{'$in':_0x66782e}},'transaction':_0x440ab3})[_0x51ed('0x4')](function(_0x4dc768){return _0x3e4c32['models'][_0x51ed('0x6')][_0x51ed('0x43')](_['sortBy'](_0xa7d9ea,_0x51ed('0xd')),{'transaction':_0x440ab3});});});})[_0x51ed('0x44')](function(_0x37f48b){console['error'](_0x37f48b);});}exports[_0x51ed('0x45')]=rewrite;
\ No newline at end of file
+var _0x5d71=['custom','XCALLY-MOTION-ANSWER=1','XCALLY-MOTION-PROGRESS=1','splice',',${EXTEN},','last','concat','Hangup','transaction','destroy','bulkCreate','sortBy','catch','error','lodash','util','findAll','intervals','models','then','VoiceExtension','uniq','map','exten','filter','queue','playback','priority','extension','find','extensions','push','type','Set','format','CDR(type)=%s','context','VoiceExtensionId','CDR(destination)=','cutdigits','${EXTEN:','${EXTEN}','CDR(routeid)=','$[${LEN(${CDR(prefix)})}\x20>\x200]?Goto(','):Goto(','CDR(prefix)=noprefix','outboundrouteid=','hasOwnProperty','recordingFormat','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','wav','XCALLY-MOTION-ANSWER=0','XCALLY-MOTION-PROGRESS=0','MONITOR_OPTIONS=ab','length','toLowerCase','updatedAt','interval','*,*,*,*','IntervalId','tag','CDR(tag)=','outbound','callerID','ExecIf','answer','indexOf','app','appType'];(function(_0x207f8b,_0x42a2fc){var _0x1f23fd=function(_0x591ca7){while(--_0x591ca7){_0x207f8b['push'](_0x207f8b['shift']());}};_0x1f23fd(++_0x42a2fc);}(_0x5d71,0x1ac));var _0x15d7=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x5d71[_0x19e35c];return _0x3e1fe8;};'use strict';var _=require(_0x15d7('0x0'));var util=require(_0x15d7('0x1'));function rewrite(_0x2caf8b,_0x2f36dc){var _0x24586b=this;return _0x2caf8b['models']['Interval'][_0x15d7('0x2')]({'raw':!![]})['then'](function(_0x22e21c){_0x24586b[_0x15d7('0x3')]=_0x22e21c;return _0x2caf8b[_0x15d7('0x4')]['VoiceExtension'][_0x15d7('0x2')]({'where':{'IntervalId':_0x2f36dc['IntervalId']},'raw':!![]});})[_0x15d7('0x5')](function(_0x242f0c){return _0x2caf8b[_0x15d7('0x4')][_0x15d7('0x6')][_0x15d7('0x2')]({'where':{'exten':{'$in':_[_0x15d7('0x7')](_[_0x15d7('0x8')](_0x242f0c,_0x15d7('0x9')))}},'order':[{'raw':'CAST(priority\x20AS\x20UNSIGNED)'}],'raw':!![]});})[_0x15d7('0x5')](function(_0x2f3040){var _0x32f067=_[_0x15d7('0xa')](_0x2f3040,{'priority':'1'});var _0x25cc96=_[_0x15d7('0xa')](_0x2f3040,{'isApp':0x1});var _0x2c439a=_['groupBy'](_0x25cc96,_0x15d7('0x9'));var _0x4ebe72=[_0x15d7('0xb'),_0x15d7('0xc')];var _0x1aa91e=[];var _0x52505a=[];for(var _0x109b20 in _0x2c439a){if(_0x2c439a['hasOwnProperty'](_0x109b20)){_0x24586b[_0x15d7('0xd')]=0x2;_0x24586b['extensions']=[];_0x24586b[_0x15d7('0xe')]=_[_0x15d7('0xf')](_0x32f067,{'exten':_0x2c439a[_0x109b20][0x0]['exten']});_0x24586b[_0x15d7('0x10')][_0x15d7('0x11')]({'type':_0x2c439a[_0x109b20][0x0][_0x15d7('0x12')],'app':_0x15d7('0x13'),'appdata':util[_0x15d7('0x14')](_0x15d7('0x15'),_0x2c439a[_0x109b20][0x0]['type']),'context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'exten':_0x2c439a[_0x109b20][0x0][_0x15d7('0x9')],'priority':_0x24586b[_0x15d7('0xd')]++,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')]});if(_0x2c439a[_0x109b20][0x0][_0x15d7('0x12')]==='outbound'){if(_0x24586b['extension']){_0x24586b[_0x15d7('0x10')][_0x15d7('0x11')]({'type':_0x2c439a[_0x109b20][0x0]['type'],'app':'Set','appdata':_0x15d7('0x18')+(_0x24586b[_0x15d7('0xe')][_0x15d7('0x19')]?_0x15d7('0x1a')+_0x24586b[_0x15d7('0xe')]['cutdigits']+'}':_0x15d7('0x1b')),'context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'exten':_0x2c439a[_0x109b20][0x0][_0x15d7('0x9')],'priority':_0x24586b[_0x15d7('0xd')]++,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')]});}_0x24586b[_0x15d7('0x10')][_0x15d7('0x11')]({'type':_0x2c439a[_0x109b20][0x0][_0x15d7('0x12')],'app':_0x15d7('0x13'),'appdata':_0x15d7('0x1c')+_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')],'context':_0x2c439a[_0x109b20][0x0]['context'],'exten':_0x2c439a[_0x109b20][0x0]['exten'],'priority':_0x24586b[_0x15d7('0xd')]++,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')]});var _0x450a24=_0x24586b[_0x15d7('0xd')]++;_0x24586b[_0x15d7('0x10')][_0x15d7('0x11')]({'type':_0x2c439a[_0x109b20][0x0][_0x15d7('0x12')],'app':'ExecIf','appdata':_0x15d7('0x1d')+(_0x450a24+0x2)+_0x15d7('0x1e')+(_0x450a24+0x1)+')','context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'exten':_0x2c439a[_0x109b20][0x0]['exten'],'priority':_0x450a24,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0]['VoiceExtensionId']});if(_0x24586b['extension']){_0x24586b[_0x15d7('0x10')]['push']({'type':_0x2c439a[_0x109b20][0x0]['type'],'app':_0x15d7('0x13'),'appdata':_0x24586b[_0x15d7('0xe')][_0x15d7('0x19')]?'CDR(prefix)=${EXTEN:0:'+_0x24586b['extension']['cutdigits']+'}':_0x15d7('0x1f'),'context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'exten':_0x2c439a[_0x109b20][0x0][_0x15d7('0x9')],'priority':_0x24586b[_0x15d7('0xd')]++,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0]['VoiceExtensionId']});}_0x24586b[_0x15d7('0x10')][_0x15d7('0x11')]({'type':_0x2c439a[_0x109b20][0x0][_0x15d7('0x12')],'app':'Set','appdata':_0x15d7('0x20')+_0x2c439a[_0x109b20][0x0]['VoiceExtensionId'],'context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'exten':_0x2c439a[_0x109b20][0x0][_0x15d7('0x9')],'priority':_0x24586b[_0x15d7('0xd')]++,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')]});if(_0x24586b[_0x15d7('0xe')]&&_0x24586b[_0x15d7('0xe')][_0x15d7('0x21')]('recordingFormat')&&_0x24586b['extension'][_0x15d7('0x22')]!=='none'){_0x24586b[_0x15d7('0x10')][_0x15d7('0x11')]({'type':_0x2c439a[_0x109b20][0x0][_0x15d7('0x12')],'app':'Set','appdata':_0x15d7('0x23'),'context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'exten':_0x2c439a[_0x109b20][0x0][_0x15d7('0x9')],'priority':_0x24586b[_0x15d7('0xd')]++,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')]});_0x24586b['extensions'][_0x15d7('0x11')]({'type':_0x2c439a[_0x109b20][0x0]['type'],'app':_0x15d7('0x13'),'appdata':'_XCALLY_MIXMONITOR_FORMAT='+_0x24586b[_0x15d7('0xe')][_0x15d7('0x22')]||_0x15d7('0x24'),'context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'exten':_0x2c439a[_0x109b20][0x0][_0x15d7('0x9')],'priority':_0x24586b['priority']++,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0]['VoiceExtensionId']});}}_0x24586b[_0x15d7('0x10')][_0x15d7('0x11')]({'type':_0x2c439a[_0x109b20][0x0][_0x15d7('0x12')],'app':'Set','appdata':_0x15d7('0x25'),'context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'exten':_0x2c439a[_0x109b20][0x0]['exten'],'priority':_0x24586b[_0x15d7('0xd')]++,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')]});_0x24586b[_0x15d7('0x10')][_0x15d7('0x11')]({'type':_0x2c439a[_0x109b20][0x0][_0x15d7('0x12')],'app':_0x15d7('0x13'),'appdata':_0x15d7('0x26'),'context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'exten':_0x2c439a[_0x109b20][0x0][_0x15d7('0x9')],'priority':_0x24586b[_0x15d7('0xd')]++,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')]});_0x24586b[_0x15d7('0x10')][_0x15d7('0x11')]({'type':_0x2c439a[_0x109b20][0x0]['type'],'app':_0x15d7('0x13'),'appdata':_0x15d7('0x27'),'context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'exten':_0x2c439a[_0x109b20][0x0][_0x15d7('0x9')],'priority':_0x24586b[_0x15d7('0xd')]++,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')]});for(var _0x4bba7c=0x0,_0x4eff79=0x0;_0x4bba7c<_0x2c439a[_0x109b20][_0x15d7('0x28')];_0x4bba7c+=0x1,_0x4eff79=0x0){var _0x2e24db=_0x2c439a[_0x109b20][_0x4bba7c];if(_0x2e24db['type']){_0x2e24db['type']=_0x2e24db[_0x15d7('0x12')][_0x15d7('0x29')]();}var _0x37eac1=[];var _0x592cee=[];delete _0x2e24db['id'];delete _0x2e24db['createdAt'];delete _0x2e24db[_0x15d7('0x2a')];var _0x19bd37=_0x2e24db[_0x15d7('0x2b')]!==_0x15d7('0x2c')?[_0x2e24db[_0x15d7('0x2b')]]:_0x2e24db[_0x15d7('0x2d')]?_[_0x15d7('0x8')](_['filter'](_0x24586b[_0x15d7('0x3')],{'IntervalId':_0x2e24db[_0x15d7('0x2d')]}),'interval'):[];if(_0x2e24db[_0x15d7('0x21')](_0x15d7('0x2e'))){if(_0x2e24db[_0x15d7('0x2e')]&&_0x2e24db['tag']!=='--'){_0x37eac1[_0x15d7('0x11')]({'type':_0x2e24db[_0x15d7('0x12')],'app':'Set','appdata':_0x15d7('0x2f')+_0x2e24db['tag'],'context':_0x2e24db[_0x15d7('0x16')],'exten':_0x2e24db[_0x15d7('0x9')],'priority':_0x19bd37[_0x15d7('0x28')]+_0x24586b[_0x15d7('0xd')]+_0x4eff79++,'VoiceExtensionId':_0x2e24db[_0x15d7('0x17')]});}}if(_0x2e24db[_0x15d7('0x12')]===_0x15d7('0x30')&&_0x2e24db['hasOwnProperty'](_0x15d7('0x31'))){if(_0x2e24db[_0x15d7('0x31')]){_0x37eac1[_0x15d7('0x11')]({'type':_0x2e24db[_0x15d7('0x12')],'app':_0x15d7('0x32'),'appdata':'$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)='+_0x2e24db[_0x15d7('0x31')]+')','context':_0x2e24db[_0x15d7('0x16')],'exten':_0x2e24db[_0x15d7('0x9')],'priority':_0x19bd37[_0x15d7('0x28')]+_0x24586b['priority']+_0x4eff79++,'VoiceExtensionId':_0x2e24db[_0x15d7('0x17')]});}else{_0x37eac1[_0x15d7('0x11')]({'type':_0x2e24db[_0x15d7('0x12')],'app':_0x15d7('0x32'),'appdata':'$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No\x20number\x20available)','context':_0x2e24db[_0x15d7('0x16')],'exten':_0x2e24db[_0x15d7('0x9')],'priority':_0x19bd37[_0x15d7('0x28')]+_0x24586b[_0x15d7('0xd')]+_0x4eff79++,'VoiceExtensionId':_0x2e24db[_0x15d7('0x17')]});}}if(_0x2e24db[_0x15d7('0x21')](_0x15d7('0x33'))){if(_0x4ebe72[_0x15d7('0x34')](_0x2e24db[_0x15d7('0x35')]['toLowerCase']())>=0x0&&_0x2e24db[_0x15d7('0x36')]!==_0x15d7('0x37')){if(_0x2e24db['answer']){_0x37eac1['push']({'type':_0x2e24db[_0x15d7('0x12')],'app':_0x15d7('0x32'),'appdata':'$[${XCALLY-MOTION-ANSWER}=0]?Answer','context':_0x2e24db[_0x15d7('0x16')],'exten':_0x2e24db[_0x15d7('0x9')],'priority':_0x19bd37[_0x15d7('0x28')]+_0x24586b[_0x15d7('0xd')]+_0x4eff79++,'VoiceExtensionId':_0x2e24db[_0x15d7('0x17')]});_0x37eac1[_0x15d7('0x11')]({'type':_0x2e24db[_0x15d7('0x12')],'app':_0x15d7('0x13'),'appdata':_0x15d7('0x38'),'context':_0x2e24db[_0x15d7('0x16')],'exten':_0x2e24db[_0x15d7('0x9')],'priority':_0x19bd37['length']+_0x24586b[_0x15d7('0xd')]+_0x4eff79++,'VoiceExtensionId':_0x2e24db[_0x15d7('0x17')]});}else{_0x37eac1['push']({'type':_0x2e24db['type'],'app':_0x15d7('0x32'),'appdata':'$[${XCALLY-MOTION-PROGRESS}=0]?Progress','context':_0x2e24db[_0x15d7('0x16')],'exten':_0x2e24db['exten'],'priority':_0x19bd37['length']+_0x24586b['priority']+_0x4eff79++,'VoiceExtensionId':_0x2e24db['VoiceExtensionId']});_0x37eac1[_0x15d7('0x11')]({'type':_0x2e24db[_0x15d7('0x12')],'app':_0x15d7('0x13'),'appdata':_0x15d7('0x39'),'context':_0x2e24db['context'],'exten':_0x2e24db[_0x15d7('0x9')],'priority':_0x19bd37[_0x15d7('0x28')]+_0x24586b[_0x15d7('0xd')]+_0x4eff79++,'VoiceExtensionId':_0x2e24db['VoiceExtensionId']});}}}for(var _0x2025bb=0x0;_0x2025bb<_0x19bd37[_0x15d7('0x28')];_0x2025bb+=0x1){var _0x1efc1d=_0x24586b[_0x15d7('0xd')]+_0x19bd37[_0x15d7('0x28')];var _0x4a9e7c=_0x2025bb===_0x19bd37[_0x15d7('0x28')]-0x1?_0x24586b[_0x15d7('0xd')]+_0x37eac1['length']+_0x592cee[_0x15d7('0x28')]+0x2:_0x24586b[_0x15d7('0xd')]+_0x2025bb+0x1;_0x37eac1[_0x15d7('0x3a')](_0x2025bb,0x0,{'type':_0x2e24db[_0x15d7('0x12')],'app':'GotoIfTime','appdata':_0x19bd37[_0x2025bb]+'?'+_0x2e24db[_0x15d7('0x16')]+_0x15d7('0x3b')+_0x1efc1d+':'+_0x2e24db[_0x15d7('0x16')]+',${EXTEN},'+_0x4a9e7c,'exten':_0x2e24db[_0x15d7('0x9')],'context':_0x2e24db[_0x15d7('0x16')],'priority':_0x24586b[_0x15d7('0xd')]+_0x2025bb,'VoiceExtensionId':_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')]});}_0x2e24db['priority']=_0x37eac1[_0x15d7('0x28')]?_[_0x15d7('0x3c')](_0x37eac1)[_0x15d7('0xd')]+0x1:_0x24586b[_0x15d7('0xd')];_0x24586b['priority']=(_0x592cee[_0x15d7('0x28')]?_[_0x15d7('0x3c')](_0x592cee)[_0x15d7('0xd')]:_0x2e24db[_0x15d7('0xd')])+0x1;_0x24586b[_0x15d7('0x10')]=_[_0x15d7('0x3d')](_0x24586b[_0x15d7('0x10')],_0x37eac1,[_0x2e24db],_0x592cee);}_0x24586b[_0x15d7('0x10')]['push']({'type':_0x2c439a[_0x109b20][0x0][_0x15d7('0x12')],'app':_0x15d7('0x3e'),'exten':_0x2c439a[_0x109b20][0x0]['exten'],'context':_0x2c439a[_0x109b20][0x0][_0x15d7('0x16')],'priority':_0x24586b[_0x15d7('0xd')],'VoiceExtensionId':_0x2c439a[_0x109b20][0x0]['VoiceExtensionId']});_0x1aa91e[_0x15d7('0x11')](_0x2c439a[_0x109b20][0x0][_0x15d7('0x17')]);_0x52505a=_[_0x15d7('0x3d')](_0x52505a,_0x24586b['extensions']);}}return _0x2caf8b[_0x15d7('0x3f')](function(_0x2344fd){return _0x2caf8b[_0x15d7('0x4')][_0x15d7('0x6')][_0x15d7('0x40')]({'where':{'VoiceExtensionId':{'$in':_0x1aa91e}},'transaction':_0x2344fd})[_0x15d7('0x5')](function(_0x284ea0){return _0x2caf8b[_0x15d7('0x4')]['VoiceExtension'][_0x15d7('0x41')](_[_0x15d7('0x42')](_0x52505a,'priority'),{'transaction':_0x2344fd});});});})[_0x15d7('0x43')](function(_0x40b302){console[_0x15d7('0x44')](_0x40b302);});}exports['rewrite']=rewrite;
\ No newline at end of file
index 3d7e54a..d72bc90 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc079=['emit','contact:csv_','resume','resolve','unlinkSync','Unable\x20to\x20delete\x20temp\x20file:','exit','info','CSV\x20import\x20process\x20stopped!','createReadStream','parse','pause','CSV\x20parsed\x20correctly!','Error\x20executing\x20contact\x20csv\x20import:','bluebird','util','papaparse','ioredis','../../../mysqldb','../../../config/logger','api','redis','defaults','localhost','socket.io-emitter','../../../api/cmContact/cmContact.socket','argv','Missing\x20filepath\x20parameter!','undefined','null','Missing\x20binding\x20parameters!','split','Missing\x20ListId\x20parameter!','Missing\x20socket_timestamp\x20parameter!','contact','index','test','isNil','error','errors','length','join','hasOwnProperty','data','firstName','firstName\x20not\x20specified!','phone','phone\x20not\x20specified!','birthDate','isValid','birthDate\x20format\x20is\x20invalid,\x20YYYY-MM-DD\x20format\x20is\x20supported!','email\x20format\x20is\x20not\x20valid!','ListId','find','duplicate','Duplicate\x20Contact','CmContact','create','keys','then','push','pick','Error\x20while\x20creating\x20contact:\x20','message','stringify','cmContact','insert','into','cm_hopper','fromQuery','scheduledAt','ContactId','createdAt','updatedAt','field','NOW()','toString','from','where','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','select','\x20=\x20?','cm_contacts','id\x20IN\x20?','phone\x20NOT\x20IN\x20(?)','calleridnum','cm_hopper_final','cm_hopper_black','str','findAll','outbound','dialCheckDuplicateType','CmList','get','always','query','VoiceQueueId','catch','onlyIfOpen','sequelize','all','VoiceQueue','BlackLists','CampaignId','cmContact,\x20%s,\x20%s','Error\x20processing\x20rows\x20block:','finally'];(function(_0x5450f8,_0x4cd6fc){var _0xeb41b6=function(_0x4f987e){while(--_0x4f987e){_0x5450f8['push'](_0x5450f8['shift']());}};_0xeb41b6(++_0x4cd6fc);}(_0xc079,0x155));var _0x9c07=function(_0x5d68a4,_0x3dd9dd){_0x5d68a4=_0x5d68a4-0x0;var _0x262284=_0xc079[_0x5d68a4];return _0x262284;};'use strict';var BPromise=require(_0x9c07('0x0'));var util=require(_0x9c07('0x1'));var _=require('lodash');var fs=require('fs');var squel=require('squel');var Papa=require(_0x9c07('0x2'));var Redis=require(_0x9c07('0x3'));var db=require(_0x9c07('0x4'))['db'];var config=require('../../../config/environment');var logger=require(_0x9c07('0x5'))(_0x9c07('0x6'));config[_0x9c07('0x7')]=_[_0x9c07('0x8')](config[_0x9c07('0x7')],{'host':_0x9c07('0x9'),'port':0x18eb});var socket=require(_0x9c07('0xa'))(new Redis(config['redis']));require(_0x9c07('0xb'))['register'](socket);try{if(!process['argv'][0x2]||process[_0x9c07('0xc')][0x2]==='undefined'||process[_0x9c07('0xc')][0x2]==='null'){throw new Error(_0x9c07('0xd'));}var FILEPATH=process[_0x9c07('0xc')][0x2];if(!process[_0x9c07('0xc')][0x3]||process[_0x9c07('0xc')][0x3]===_0x9c07('0xe')||process[_0x9c07('0xc')][0x3]===_0x9c07('0xf')||!process['argv'][0x4]||process[_0x9c07('0xc')][0x4]===_0x9c07('0xe')||process[_0x9c07('0xc')][0x4]==='null'){throw new Error(_0x9c07('0x10'));}var FIELDS=_['zipObject'](process['argv'][0x3][_0x9c07('0x11')](','),process[_0x9c07('0xc')][0x4]['split'](','));if(!process[_0x9c07('0xc')][0x5]||process['argv'][0x5]==='undefined'||process[_0x9c07('0xc')][0x5]==='null'){throw new Error(_0x9c07('0x12'));}var LISTID=process[_0x9c07('0xc')][0x5];var COMPANYID=process[_0x9c07('0xc')][0x6]&&process[_0x9c07('0xc')][0x6]!==_0x9c07('0xe')&&process['argv'][0x6]!==_0x9c07('0xf')?process[_0x9c07('0xc')][0x6]:null;var DUPLICATES=process['argv'][0x7]&&process[_0x9c07('0xc')][0x7]!=='undefined'&&process['argv'][0x7]!=='null'?process[_0x9c07('0xc')][0x7]:null;if(!process[_0x9c07('0xc')][0x8]||process[_0x9c07('0xc')][0x8]===_0x9c07('0xe')||process[_0x9c07('0xc')][0x8]==='null'){throw new Error(_0x9c07('0x13'));}var SOCKET_TIMESTAMP=process['argv'][0x8];}catch(_0x49b464){logger['error'](_0x49b464);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(_0x53f7bd,_0x33b988,_0x1ea021,_0x3e9e56){var _0x18d0cd={'message':_0x33b988};_0x18d0cd[_0x53f7bd]=!![];if(_0x1ea021){_0x18d0cd[_0x9c07('0x14')]=_0x1ea021;}if(_0x3e9e56){_0x18d0cd[_0x9c07('0x15')]=_0x3e9e56;}return _0x18d0cd;}function isEmail(_0x4efa5e){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))*$/[_0x9c07('0x16')](_0x4efa5e);}function checkRow(_0x334192,_0x22adac,_0x36225d){return new BPromise(function(_0x271be4,_0x310ec4){if(_[_0x9c07('0x17')](_0x334192)){return _0x310ec4(handleCheckRowError(_0x9c07('0x18'),'The\x20row\x20is\x20empty\x20or\x20the\x20number\x20of\x20parameters\x20does\x20not\x20match\x20the\x20columns!',null,_0x36225d));}if(_0x334192[_0x9c07('0x19')]&&_0x334192[_0x9c07('0x19')][_0x9c07('0x1a')]){var _0x4bb330=_['map'](_0x334192['errors'],'message')[_0x9c07('0x1b')](';');return _0x310ec4(handleCheckRowError(_0x9c07('0x18'),_0x4bb330,null,_0x36225d));}var _0x66ecd3={};for(var _0x1b498d in FIELDS){if(FIELDS[_0x9c07('0x1c')](_0x1b498d)&&FIELDS[_0x1b498d]){_0x66ecd3[_0x1b498d]=_0x334192['data'][0x0][FIELDS[_0x1b498d]]||_0x334192[_0x9c07('0x1d')][0x0]['\ufeff'+FIELDS[_0x1b498d]];}}if(!_0x66ecd3[_0x9c07('0x1e')]){return _0x310ec4(handleCheckRowError(_0x9c07('0x18'),_0x9c07('0x1f'),null,_0x36225d));}if(!_0x66ecd3[_0x9c07('0x20')]){return _0x310ec4(handleCheckRowError(_0x9c07('0x18'),_0x9c07('0x21'),null,_0x36225d));}if(_0x66ecd3[_0x9c07('0x22')]){var _0x4a4589=moment(_0x66ecd3[_0x9c07('0x22')],'YYYY-MM-DD');if(!_0x4a4589[_0x9c07('0x23')]()){return _0x310ec4(handleCheckRowError(_0x9c07('0x18'),_0x9c07('0x24'),null,_0x36225d));}}if(_0x66ecd3['email']){if(!isEmail(_0x66ecd3['email'])){return _0x310ec4(handleCheckRowError('error',_0x9c07('0x25'),null,_0x36225d));}}_0x66ecd3[_0x9c07('0x26')]=LISTID;_0x66ecd3['CompanyId']=COMPANYID||undefined;if(DUPLICATES&&DUPLICATES[_0x9c07('0x1a')]&&_0x22adac){var _0x4c2c86={};for(var _0x1825b6=0x0,_0x4e89db=DUPLICATES[_0x9c07('0x1a')];_0x1825b6<_0x4e89db;_0x1825b6+=0x1){_0x4c2c86[DUPLICATES[_0x1825b6]]=_0x66ecd3[DUPLICATES[_0x1825b6]];}var _0x1996fa=_[_0x9c07('0x27')](_0x22adac,_0x4c2c86);if(_0x1996fa){return _0x310ec4(handleCheckRowError(_0x9c07('0x28'),_0x9c07('0x29'),_0x1996fa,_0x36225d));}}return db[_0x9c07('0x2a')][_0x9c07('0x2b')](_0x66ecd3,{'raw':!![],'hooks':![],'fields':_[_0x9c07('0x2c')](_0x66ecd3)})[_0x9c07('0x2d')](function(_0x411e36){if(DUPLICATES&&DUPLICATES['length']&&_0x22adac){_0x22adac[_0x9c07('0x2e')](_[_0x9c07('0x2f')](_0x66ecd3,DUPLICATES));}hopperContacts+=(hopperContacts?',':'')+_0x411e36['id'];return _0x271be4();})['catch'](function(_0x133ff6){return _0x310ec4(handleCheckRowError(_0x9c07('0x18'),_0x9c07('0x30')+(_0x133ff6[_0x9c07('0x31')]||JSON[_0x9c07('0x32')](_0x133ff6)),null,_0x36225d));});});}function checkHopper(){function _0x32d3d8(){return function(_0x13aa62){logger['error'](_0x9c07('0x33'),'checkHopper',util['inspect'](_0x13aa62,{'showHidden':![],'depth':null}));};}var _0x1f56aa=function(_0x34dd6c,_0x5027e5){var _0x223102=squel[_0x9c07('0x34')]()[_0x9c07('0x35')](_0x9c07('0x36'))[_0x9c07('0x37')]([_0x9c07('0x20'),_0x9c07('0x38'),_0x9c07('0x39'),_0x9c07('0x26'),_0x5027e5,_0x9c07('0x3a'),_0x9c07('0x3b')],squel['select']()[_0x9c07('0x3c')]('phone',_0x9c07('0x20'))[_0x9c07('0x3c')](_0x9c07('0x3d'),_0x9c07('0x38'))['field']('id',_0x9c07('0x39'))[_0x9c07('0x3c')](LISTID[_0x9c07('0x3e')](),_0x9c07('0x26'))['field'](_0x34dd6c['id'][_0x9c07('0x3e')](),_0x5027e5)[_0x9c07('0x3c')](_0x9c07('0x3d'),_0x9c07('0x3a'))[_0x9c07('0x3c')](_0x9c07('0x3d'),_0x9c07('0x3b'))[_0x9c07('0x3f')]('cm_contacts')[_0x9c07('0x40')](_0x9c07('0x41'))[_0x9c07('0x40')](_0x9c07('0x42'),LISTID[_0x9c07('0x3e')]())[_0x9c07('0x40')](_0x9c07('0x43'))[_0x9c07('0x40')]('phone\x20NOT\x20IN\x20(?)',squel[_0x9c07('0x44')]()[_0x9c07('0x3c')](_0x9c07('0x20'))['from'](_0x9c07('0x36'))[_0x9c07('0x40')](_0x5027e5+_0x9c07('0x45'),_0x34dd6c['id'][_0x9c07('0x3e')]())))[_0x9c07('0x3e')]();return _0x223102;};var _0x292967=function(_0x3a6062,_0x167a71){var _0x3c3cbe=squel['insert']()[_0x9c07('0x35')]('cm_hopper')[_0x9c07('0x37')](['phone','scheduledAt',_0x9c07('0x39'),_0x9c07('0x26'),_0x167a71,'createdAt',_0x9c07('0x3b')],squel['select']()['field'](_0x9c07('0x20'),_0x9c07('0x20'))[_0x9c07('0x3c')]('NOW()',_0x9c07('0x38'))[_0x9c07('0x3c')]('id',_0x9c07('0x39'))['field'](LISTID[_0x9c07('0x3e')](),_0x9c07('0x26'))[_0x9c07('0x3c')](_0x3a6062['id'][_0x9c07('0x3e')](),_0x167a71)[_0x9c07('0x3c')](_0x9c07('0x3d'),_0x9c07('0x3a'))[_0x9c07('0x3c')](_0x9c07('0x3d'),_0x9c07('0x3b'))[_0x9c07('0x3f')](_0x9c07('0x46'))[_0x9c07('0x40')](_0x9c07('0x41'))[_0x9c07('0x40')]('ListId\x20=\x20?',LISTID['toString']())[_0x9c07('0x40')](_0x9c07('0x47'),squel['str'](hopperContacts))[_0x9c07('0x40')]('phone\x20IS\x20NOT\x20NULL')[_0x9c07('0x40')](_0x9c07('0x48'),squel['select']()[_0x9c07('0x3c')](_0x9c07('0x49'))[_0x9c07('0x3f')](_0x9c07('0x4a'))[_0x9c07('0x40')](_0x167a71+_0x9c07('0x45'),_0x3a6062['id']['toString']()))['where'](_0x9c07('0x48'),squel['select']()[_0x9c07('0x3c')](_0x9c07('0x20'))[_0x9c07('0x3f')](_0x9c07('0x36'))[_0x9c07('0x40')](_0x167a71+_0x9c07('0x45'),_0x3a6062['id'][_0x9c07('0x3e')]())))[_0x9c07('0x3e')]();return _0x3c3cbe;};function _0x45a52c(_0x15503b,_0x243227){var _0xdde6a7=squel[_0x9c07('0x34')]()[_0x9c07('0x35')](_0x9c07('0x36'))['fromQuery']([_0x9c07('0x20'),_0x9c07('0x38'),'ContactId',_0x9c07('0x26'),_0x243227,_0x9c07('0x3a'),_0x9c07('0x3b')],squel['select']()['field']('phone',_0x9c07('0x20'))[_0x9c07('0x3c')](_0x9c07('0x3d'),_0x9c07('0x38'))[_0x9c07('0x3c')]('id','ContactId')[_0x9c07('0x3c')](LISTID[_0x9c07('0x3e')](),_0x9c07('0x26'))[_0x9c07('0x3c')](_0x15503b['id'][_0x9c07('0x3e')](),_0x243227)[_0x9c07('0x3c')]('NOW()',_0x9c07('0x3a'))[_0x9c07('0x3c')](_0x9c07('0x3d'),_0x9c07('0x3b'))[_0x9c07('0x3f')](_0x9c07('0x46'))[_0x9c07('0x40')](_0x9c07('0x41'))[_0x9c07('0x40')](_0x9c07('0x42'),LISTID[_0x9c07('0x3e')]())[_0x9c07('0x40')](_0x9c07('0x47'),squel['str'](hopperContacts))[_0x9c07('0x40')]('phone\x20IS\x20NOT\x20NULL'))['toString']();return _0xdde6a7;}function _0x43e497(_0x3eef4c,_0x1b58a9){var _0x12df83=squel[_0x9c07('0x34')]()[_0x9c07('0x35')](_0x9c07('0x4b'))['fromQuery'](['phone',_0x9c07('0x39'),_0x9c07('0x26'),_0x1b58a9,_0x9c07('0x3a'),_0x9c07('0x3b')],squel[_0x9c07('0x44')]()[_0x9c07('0x3c')](_0x9c07('0x20'),'phone')[_0x9c07('0x3c')]('id','ContactId')[_0x9c07('0x3c')](LISTID[_0x9c07('0x3e')](),_0x9c07('0x26'))[_0x9c07('0x3c')](_0x3eef4c['id'][_0x9c07('0x3e')](),_0x1b58a9)[_0x9c07('0x3c')]('NOW()',_0x9c07('0x3a'))[_0x9c07('0x3c')](_0x9c07('0x3d'),_0x9c07('0x3b'))[_0x9c07('0x3f')](_0x9c07('0x46'))[_0x9c07('0x40')]('deletedAt\x20IS\x20NULL')['where'](_0x9c07('0x42'),LISTID[_0x9c07('0x3e')]())[_0x9c07('0x40')](_0x9c07('0x47'),squel[_0x9c07('0x4c')](hopperContacts))['where'](_0x9c07('0x43')))[_0x9c07('0x3e')]();return _0x12df83;}return db['VoiceQueue'][_0x9c07('0x4d')]({'where':{'type':_0x9c07('0x4e')},'attributes':['id',_0x9c07('0x4f')],'include':[{'model':db[_0x9c07('0x50')],'as':'Lists','where':{'id':LISTID}}]})[_0x9c07('0x2d')](function(_0x10850b){var _0x41e067=[];if(_0x10850b){var _0x573c59;for(var _0x13d4f9=0x0,_0x949fc4;_0x13d4f9<_0x10850b['length'];_0x13d4f9+=0x1){_0x949fc4=_0x10850b[_0x13d4f9][_0x9c07('0x51')]({'plain':!![]});switch(_0x949fc4[_0x9c07('0x4f')]){case _0x9c07('0x52'):_0x41e067['push'](db['sequelize'][_0x9c07('0x53')](_0x292967(_0x949fc4,_0x9c07('0x54')))[_0x9c07('0x2d')](function(){})[_0x9c07('0x55')](_0x32d3d8()));break;case _0x9c07('0x56'):_0x41e067[_0x9c07('0x2e')](db[_0x9c07('0x57')][_0x9c07('0x53')](_0x1f56aa(_0x949fc4,_0x9c07('0x54')))[_0x9c07('0x2d')](function(){})[_0x9c07('0x55')](_0x32d3d8()));break;default:_0x41e067[_0x9c07('0x2e')](db['sequelize'][_0x9c07('0x53')](_0x45a52c(_0x949fc4,'VoiceQueueId'))[_0x9c07('0x2d')](function(){})[_0x9c07('0x55')](_0x32d3d8()));}}}return _0x41e067;})[_0x9c07('0x58')]()[_0x9c07('0x2d')](function(){return db[_0x9c07('0x59')][_0x9c07('0x4d')]({'where':{'type':_0x9c07('0x4e')},'attributes':['id'],'include':[{'model':db[_0x9c07('0x50')],'as':_0x9c07('0x5a'),'where':{'id':LISTID}}]})[_0x9c07('0x2d')](function(_0x2d999c){var _0x5f1afa=[];if(_0x2d999c){var _0x4e467f;for(var _0x1b4b74=0x0,_0x1a50b3;_0x1b4b74<_0x2d999c['length'];_0x1b4b74+=0x1){_0x1a50b3=_0x2d999c[_0x1b4b74][_0x9c07('0x51')]({'plain':!![]});_0x5f1afa['push'](db[_0x9c07('0x57')][_0x9c07('0x53')](_0x43e497(_0x1a50b3,_0x9c07('0x54')))[_0x9c07('0x2d')](function(){})[_0x9c07('0x55')](_0x32d3d8()));}}return _0x5f1afa;})[_0x9c07('0x58')]();})[_0x9c07('0x2d')](function(){return db['Campaign'][_0x9c07('0x4d')]({'attributes':['id',_0x9c07('0x4f')],'include':[{'model':db[_0x9c07('0x50')],'as':'Lists','where':{'id':LISTID}}]})[_0x9c07('0x2d')](function(_0x1a4643){var _0x5aaf66=[];if(_0x1a4643){for(var _0x48d5f5=0x0,_0x34f25b;_0x48d5f5<_0x1a4643['length'];_0x48d5f5+=0x1){_0x34f25b=_0x1a4643[_0x48d5f5]['get']({'plain':!![]});switch(_0x34f25b[_0x9c07('0x4f')]){case _0x9c07('0x52'):_0x5aaf66[_0x9c07('0x2e')](db[_0x9c07('0x57')]['query'](_0x292967(_0x34f25b,_0x9c07('0x5b')))[_0x9c07('0x2d')](function(){})['catch'](_0x32d3d8()));break;case'onlyIfOpen':_0x5aaf66[_0x9c07('0x2e')](db[_0x9c07('0x57')][_0x9c07('0x53')](_0x1f56aa(_0x34f25b,'CampaignId'))['then'](function(){})[_0x9c07('0x55')](_0x32d3d8()));break;default:_0x5aaf66[_0x9c07('0x2e')](db[_0x9c07('0x57')][_0x9c07('0x53')](_0x45a52c(_0x34f25b,_0x9c07('0x5b')))[_0x9c07('0x2d')](function(){})[_0x9c07('0x55')](_0x32d3d8()));}}}return _0x5aaf66;})[_0x9c07('0x58')]();})[_0x9c07('0x2d')](function(){return db['Campaign'][_0x9c07('0x4d')]({'attributes':['id'],'include':[{'model':db[_0x9c07('0x50')],'as':_0x9c07('0x5a'),'where':{'id':LISTID}}]})[_0x9c07('0x2d')](function(_0x4597d5){var _0x81cb0f=[];if(_0x4597d5){for(var _0x49756a=0x0,_0x22165c;_0x49756a<_0x4597d5[_0x9c07('0x1a')];_0x49756a+=0x1){_0x22165c=_0x4597d5[_0x49756a][_0x9c07('0x51')]({'plain':!![]});_0x81cb0f[_0x9c07('0x2e')](db[_0x9c07('0x57')][_0x9c07('0x53')](_0x43e497(_0x22165c,_0x9c07('0x5b')))[_0x9c07('0x2d')](function(){})[_0x9c07('0x55')](_0x32d3d8()));}}return _0x81cb0f;})[_0x9c07('0x58')]();})['catch'](function(_0x19356b){logger[_0x9c07('0x18')](_0x9c07('0x5c'),'generalCheckHopper',_0x19356b['message']);});}var processPromises=function(_0x28553a){return BPromise[_0x9c07('0x58')](promises)[_0x9c07('0x2d')](function(_0x5e67c5){})['catch'](function(_0x5f0f4a){logger[_0x9c07('0x18')](_0x9c07('0x5d'),JSON[_0x9c07('0x32')](_0x5f0f4a));})[_0x9c07('0x5e')](function(){socket[_0x9c07('0x5f')](_0x9c07('0x60')+SOCKET_TIMESTAMP,{'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});promises=[];success=0x0;errors=0x0;duplicates=0x0;rows=[];if(_0x28553a){return _0x28553a[_0x9c07('0x61')]();}});};var endCsv=function(){return BPromise[_0x9c07('0x62')]()[_0x9c07('0x2d')](function(){if(hopperContacts){return checkHopper();}})[_0x9c07('0x2d')](function(){socket['emit'](_0x9c07('0x60')+SOCKET_TIMESTAMP,{'finished':!![],'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});try{fs[_0x9c07('0x63')](FILEPATH);}catch(_0x92265d){logger[_0x9c07('0x18')](_0x9c07('0x64'),JSON[_0x9c07('0x32')](_0x92265d));}finally{process[_0x9c07('0x65')](0x0);}});};process['on']('SIGINT',function(){logger[_0x9c07('0x66')](_0x9c07('0x67'));endCsv();});function main(){return BPromise[_0x9c07('0x62')]()[_0x9c07('0x2d')](function(){if(DUPLICATES){DUPLICATES=DUPLICATES['split'](',');return db['CmContact'][_0x9c07('0x4d')]({'where':{'ListId':LISTID},'attributes':DUPLICATES,'raw':!![]});}})['then'](function(_0x1743c2){var _0x2a9db9=fs[_0x9c07('0x68')](FILEPATH,{'highWaterMark':0xf*0x400*0x400});Papa[_0x9c07('0x69')](_0x2a9db9,{'header':!![],'skipEmptyLines':!![],'step':function(_0x2d9b83,_0x1f6c28){total+=0x1;var _0x496b17=total;promises[_0x9c07('0x2e')](checkRow(_0x2d9b83,_0x1743c2,_0x496b17)[_0x9c07('0x2d')](function(){success+=0x1;})[_0x9c07('0x55')](function(_0x4ad81f){if(_0x4ad81f[_0x9c07('0x18')]){errors+=0x1;delete _0x4ad81f[_0x9c07('0x18')];}else if(_0x4ad81f[_0x9c07('0x28')]){duplicates+=0x1;delete _0x4ad81f[_0x9c07('0x28')];}rows[_0x9c07('0x2e')](_0x4ad81f);}));if(total%0xc8===0x0){_0x1f6c28[_0x9c07('0x6a')]();return processPromises(_0x1f6c28);}},'complete':function(){return processPromises()['then'](function(){logger['info'](_0x9c07('0x6b'));endCsv();});},'error':function(_0x2854e0,_0x148e0f){logger['info']('CSV\x20parse\x20error',JSON[_0x9c07('0x32')](_0x2854e0));endCsv();}});})[_0x9c07('0x55')](function(_0x4025d2){logger['error'](_0x9c07('0x6c'),JSON[_0x9c07('0x32')](_0x4025d2));});}main();
\ No newline at end of file
+var _0x8939=['push','message','stringify','inspect','insert','into','cm_hopper','fromQuery','scheduledAt','ContactId','select','field','NOW()','toString','updatedAt','from','cm_contacts','where','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20NOT\x20IN\x20(?)','\x20=\x20?','createdAt','id\x20IN\x20?','str','phone\x20IS\x20NOT\x20NULL','calleridnum','cm_hopper_final','cm_hopper_black','VoiceQueue','findAll','outbound','Lists','get','dialCheckDuplicateType','always','sequelize','query','VoiceQueueId','catch','onlyIfOpen','all','BlackLists','Campaign','CampaignId','cmContact,\x20%s,\x20%s','generalCheckHopper','Error\x20processing\x20rows\x20block:','resume','resolve','emit','unlinkSync','Unable\x20to\x20delete\x20temp\x20file:','exit','info','CmContact','createReadStream','parse','CSV\x20parsed\x20correctly!','CSV\x20parse\x20error','util','lodash','squel','ioredis','../../../mysqldb','../../../config/logger','api','redis','localhost','../../../api/cmContact/cmContact.socket','register','argv','undefined','null','Missing\x20filepath\x20parameter!','Missing\x20binding\x20parameters!','zipObject','split','Missing\x20ListId\x20parameter!','Missing\x20socket_timestamp\x20parameter!','error','test','isNil','errors','length','join','hasOwnProperty','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','duplicate','Duplicate\x20Contact','then'];(function(_0x3c52e3,_0x3d64e3){var _0x20bea5=function(_0x9e6300){while(--_0x9e6300){_0x3c52e3['push'](_0x3c52e3['shift']());}};_0x20bea5(++_0x3d64e3);}(_0x8939,0x1d0));var _0x9893=function(_0x1b419f,_0x4a6fe0){_0x1b419f=_0x1b419f-0x0;var _0x5dfd9d=_0x8939[_0x1b419f];return _0x5dfd9d;};'use strict';var BPromise=require('bluebird');var util=require(_0x9893('0x0'));var _=require(_0x9893('0x1'));var fs=require('fs');var squel=require(_0x9893('0x2'));var Papa=require('papaparse');var Redis=require(_0x9893('0x3'));var db=require(_0x9893('0x4'))['db'];var config=require('../../../config/environment');var logger=require(_0x9893('0x5'))(_0x9893('0x6'));config[_0x9893('0x7')]=_['defaults'](config[_0x9893('0x7')],{'host':_0x9893('0x8'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x9893('0x9'))[_0x9893('0xa')](socket);try{if(!process[_0x9893('0xb')][0x2]||process[_0x9893('0xb')][0x2]===_0x9893('0xc')||process[_0x9893('0xb')][0x2]===_0x9893('0xd')){throw new Error(_0x9893('0xe'));}var FILEPATH=process[_0x9893('0xb')][0x2];if(!process[_0x9893('0xb')][0x3]||process['argv'][0x3]===_0x9893('0xc')||process[_0x9893('0xb')][0x3]==='null'||!process[_0x9893('0xb')][0x4]||process[_0x9893('0xb')][0x4]===_0x9893('0xc')||process[_0x9893('0xb')][0x4]===_0x9893('0xd')){throw new Error(_0x9893('0xf'));}var FIELDS=_[_0x9893('0x10')](process[_0x9893('0xb')][0x3]['split'](','),process[_0x9893('0xb')][0x4][_0x9893('0x11')](','));if(!process['argv'][0x5]||process[_0x9893('0xb')][0x5]===_0x9893('0xc')||process[_0x9893('0xb')][0x5]===_0x9893('0xd')){throw new Error(_0x9893('0x12'));}var LISTID=process[_0x9893('0xb')][0x5];var COMPANYID=process[_0x9893('0xb')][0x6]&&process[_0x9893('0xb')][0x6]!==_0x9893('0xc')&&process[_0x9893('0xb')][0x6]!==_0x9893('0xd')?process['argv'][0x6]:null;var DUPLICATES=process[_0x9893('0xb')][0x7]&&process[_0x9893('0xb')][0x7]!==_0x9893('0xc')&&process[_0x9893('0xb')][0x7]!==_0x9893('0xd')?process[_0x9893('0xb')][0x7]:null;if(!process['argv'][0x8]||process['argv'][0x8]==='undefined'||process['argv'][0x8]===_0x9893('0xd')){throw new Error(_0x9893('0x13'));}var SOCKET_TIMESTAMP=process[_0x9893('0xb')][0x8];}catch(_0x4fa1ff){logger[_0x9893('0x14')](_0x4fa1ff);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(_0x45f99a,_0x2c7308,_0x1640fc,_0x101245){var _0x3ab12a={'message':_0x2c7308};_0x3ab12a[_0x45f99a]=!![];if(_0x1640fc){_0x3ab12a['contact']=_0x1640fc;}if(_0x101245){_0x3ab12a['index']=_0x101245;}return _0x3ab12a;}function isEmail(_0x3825a3){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))*$/[_0x9893('0x15')](_0x3825a3);}function checkRow(_0xdd5172,_0x547dfa,_0x5bfdb0){return new BPromise(function(_0x463421,_0x5e006f){if(_[_0x9893('0x16')](_0xdd5172)){return _0x5e006f(handleCheckRowError(_0x9893('0x14'),'The\x20row\x20is\x20empty\x20or\x20the\x20number\x20of\x20parameters\x20does\x20not\x20match\x20the\x20columns!',null,_0x5bfdb0));}if(_0xdd5172[_0x9893('0x17')]&&_0xdd5172[_0x9893('0x17')][_0x9893('0x18')]){var _0x14d59f=_['map'](_0xdd5172['errors'],'message')[_0x9893('0x19')](';');return _0x5e006f(handleCheckRowError(_0x9893('0x14'),_0x14d59f,null,_0x5bfdb0));}var _0x534d98={};for(var _0x3076dd in FIELDS){if(FIELDS[_0x9893('0x1a')](_0x3076dd)&&FIELDS[_0x3076dd]){_0x534d98[_0x3076dd]=_0xdd5172['data'][0x0][FIELDS[_0x3076dd]]||_0xdd5172['data'][0x0]['\ufeff'+FIELDS[_0x3076dd]];}}if(!_0x534d98[_0x9893('0x1b')]){return _0x5e006f(handleCheckRowError(_0x9893('0x14'),_0x9893('0x1c'),null,_0x5bfdb0));}if(!_0x534d98[_0x9893('0x1d')]){return _0x5e006f(handleCheckRowError(_0x9893('0x14'),_0x9893('0x1e'),null,_0x5bfdb0));}if(_0x534d98[_0x9893('0x1f')]){var _0x432107=moment(_0x534d98[_0x9893('0x1f')],_0x9893('0x20'));if(!_0x432107['isValid']()){return _0x5e006f(handleCheckRowError('error',_0x9893('0x21'),null,_0x5bfdb0));}}if(_0x534d98[_0x9893('0x22')]){if(!isEmail(_0x534d98['email'])){return _0x5e006f(handleCheckRowError(_0x9893('0x14'),_0x9893('0x23'),null,_0x5bfdb0));}}_0x534d98[_0x9893('0x24')]=LISTID;_0x534d98[_0x9893('0x25')]=COMPANYID||undefined;if(DUPLICATES&&DUPLICATES[_0x9893('0x18')]&&_0x547dfa){var _0x429d74={};for(var _0x3a3543=0x0,_0x32f4d9=DUPLICATES['length'];_0x3a3543<_0x32f4d9;_0x3a3543+=0x1){_0x429d74[DUPLICATES[_0x3a3543]]=_0x534d98[DUPLICATES[_0x3a3543]];}var _0x3fe540=_['find'](_0x547dfa,_0x429d74);if(_0x3fe540){return _0x5e006f(handleCheckRowError(_0x9893('0x26'),_0x9893('0x27'),_0x3fe540,_0x5bfdb0));}}return db['CmContact']['create'](_0x534d98,{'raw':!![],'hooks':![],'fields':_['keys'](_0x534d98)})[_0x9893('0x28')](function(_0x441338){if(DUPLICATES&&DUPLICATES['length']&&_0x547dfa){_0x547dfa[_0x9893('0x29')](_['pick'](_0x534d98,DUPLICATES));}hopperContacts+=(hopperContacts?',':'')+_0x441338['id'];return _0x463421();})['catch'](function(_0x25081b){return _0x5e006f(handleCheckRowError(_0x9893('0x14'),'Error\x20while\x20creating\x20contact:\x20'+(_0x25081b[_0x9893('0x2a')]||JSON[_0x9893('0x2b')](_0x25081b)),null,_0x5bfdb0));});});}function checkHopper(){function _0x2af07a(){return function(_0x88c8c1){logger[_0x9893('0x14')]('cmContact','checkHopper',util[_0x9893('0x2c')](_0x88c8c1,{'showHidden':![],'depth':null}));};}var _0x47b20e=function(_0x25137e,_0x371d86){var _0x1c19b1=squel[_0x9893('0x2d')]()[_0x9893('0x2e')](_0x9893('0x2f'))[_0x9893('0x30')]([_0x9893('0x1d'),_0x9893('0x31'),_0x9893('0x32'),'ListId',_0x371d86,'createdAt','updatedAt'],squel[_0x9893('0x33')]()[_0x9893('0x34')](_0x9893('0x1d'),_0x9893('0x1d'))['field'](_0x9893('0x35'),_0x9893('0x31'))[_0x9893('0x34')]('id',_0x9893('0x32'))['field'](LISTID[_0x9893('0x36')](),_0x9893('0x24'))[_0x9893('0x34')](_0x25137e['id'][_0x9893('0x36')](),_0x371d86)['field'](_0x9893('0x35'),'createdAt')[_0x9893('0x34')](_0x9893('0x35'),_0x9893('0x37'))[_0x9893('0x38')](_0x9893('0x39'))[_0x9893('0x3a')](_0x9893('0x3b'))[_0x9893('0x3a')](_0x9893('0x3c'),LISTID[_0x9893('0x36')]())['where']('phone\x20IS\x20NOT\x20NULL')[_0x9893('0x3a')](_0x9893('0x3d'),squel['select']()[_0x9893('0x34')](_0x9893('0x1d'))['from'](_0x9893('0x2f'))[_0x9893('0x3a')](_0x371d86+_0x9893('0x3e'),_0x25137e['id']['toString']())))[_0x9893('0x36')]();return _0x1c19b1;};var _0x5b9590=function(_0x2628cd,_0x14ed45){var _0x33e2ad=squel['insert']()[_0x9893('0x2e')](_0x9893('0x2f'))['fromQuery']([_0x9893('0x1d'),_0x9893('0x31'),_0x9893('0x32'),_0x9893('0x24'),_0x14ed45,_0x9893('0x3f'),'updatedAt'],squel[_0x9893('0x33')]()['field'](_0x9893('0x1d'),_0x9893('0x1d'))[_0x9893('0x34')](_0x9893('0x35'),'scheduledAt')[_0x9893('0x34')]('id',_0x9893('0x32'))[_0x9893('0x34')](LISTID[_0x9893('0x36')](),'ListId')[_0x9893('0x34')](_0x2628cd['id']['toString'](),_0x14ed45)[_0x9893('0x34')](_0x9893('0x35'),_0x9893('0x3f'))[_0x9893('0x34')]('NOW()','updatedAt')[_0x9893('0x38')](_0x9893('0x39'))['where'](_0x9893('0x3b'))['where'](_0x9893('0x3c'),LISTID['toString']())['where'](_0x9893('0x40'),squel[_0x9893('0x41')](hopperContacts))[_0x9893('0x3a')](_0x9893('0x42'))[_0x9893('0x3a')](_0x9893('0x3d'),squel['select']()['field'](_0x9893('0x43'))['from'](_0x9893('0x44'))[_0x9893('0x3a')](_0x14ed45+_0x9893('0x3e'),_0x2628cd['id']['toString']()))[_0x9893('0x3a')](_0x9893('0x3d'),squel[_0x9893('0x33')]()[_0x9893('0x34')](_0x9893('0x1d'))[_0x9893('0x38')](_0x9893('0x2f'))[_0x9893('0x3a')](_0x14ed45+_0x9893('0x3e'),_0x2628cd['id'][_0x9893('0x36')]())))[_0x9893('0x36')]();return _0x33e2ad;};function _0x30422c(_0x25cf1c,_0x2d1c34){var _0x581630=squel[_0x9893('0x2d')]()[_0x9893('0x2e')](_0x9893('0x2f'))[_0x9893('0x30')]([_0x9893('0x1d'),_0x9893('0x31'),'ContactId',_0x9893('0x24'),_0x2d1c34,_0x9893('0x3f'),_0x9893('0x37')],squel[_0x9893('0x33')]()[_0x9893('0x34')](_0x9893('0x1d'),_0x9893('0x1d'))['field']('NOW()',_0x9893('0x31'))[_0x9893('0x34')]('id',_0x9893('0x32'))[_0x9893('0x34')](LISTID[_0x9893('0x36')](),_0x9893('0x24'))['field'](_0x25cf1c['id']['toString'](),_0x2d1c34)[_0x9893('0x34')](_0x9893('0x35'),_0x9893('0x3f'))[_0x9893('0x34')](_0x9893('0x35'),'updatedAt')[_0x9893('0x38')](_0x9893('0x39'))[_0x9893('0x3a')](_0x9893('0x3b'))[_0x9893('0x3a')](_0x9893('0x3c'),LISTID[_0x9893('0x36')]())[_0x9893('0x3a')](_0x9893('0x40'),squel['str'](hopperContacts))[_0x9893('0x3a')](_0x9893('0x42')))['toString']();return _0x581630;}function _0x4a779f(_0x405629,_0x37c241){var _0x354e13=squel['insert']()['into'](_0x9893('0x45'))[_0x9893('0x30')]([_0x9893('0x1d'),_0x9893('0x32'),_0x9893('0x24'),_0x37c241,_0x9893('0x3f'),_0x9893('0x37')],squel[_0x9893('0x33')]()[_0x9893('0x34')](_0x9893('0x1d'),_0x9893('0x1d'))['field']('id','ContactId')['field'](LISTID[_0x9893('0x36')](),'ListId')[_0x9893('0x34')](_0x405629['id']['toString'](),_0x37c241)[_0x9893('0x34')](_0x9893('0x35'),_0x9893('0x3f'))[_0x9893('0x34')](_0x9893('0x35'),_0x9893('0x37'))[_0x9893('0x38')]('cm_contacts')[_0x9893('0x3a')](_0x9893('0x3b'))[_0x9893('0x3a')]('ListId\x20=\x20?',LISTID[_0x9893('0x36')]())['where'](_0x9893('0x40'),squel[_0x9893('0x41')](hopperContacts))[_0x9893('0x3a')](_0x9893('0x42')))['toString']();return _0x354e13;}return db[_0x9893('0x46')][_0x9893('0x47')]({'where':{'type':_0x9893('0x48')},'attributes':['id','dialCheckDuplicateType'],'include':[{'model':db['CmList'],'as':_0x9893('0x49'),'where':{'id':LISTID}}]})[_0x9893('0x28')](function(_0x2b6024){var _0x2c99d6=[];if(_0x2b6024){var _0x35b7ac;for(var _0x25b8f9=0x0,_0x315e3e;_0x25b8f9<_0x2b6024['length'];_0x25b8f9+=0x1){_0x315e3e=_0x2b6024[_0x25b8f9][_0x9893('0x4a')]({'plain':!![]});switch(_0x315e3e[_0x9893('0x4b')]){case _0x9893('0x4c'):_0x2c99d6[_0x9893('0x29')](db[_0x9893('0x4d')][_0x9893('0x4e')](_0x5b9590(_0x315e3e,_0x9893('0x4f')))['then'](function(){})[_0x9893('0x50')](_0x2af07a()));break;case _0x9893('0x51'):_0x2c99d6[_0x9893('0x29')](db[_0x9893('0x4d')]['query'](_0x47b20e(_0x315e3e,'VoiceQueueId'))[_0x9893('0x28')](function(){})[_0x9893('0x50')](_0x2af07a()));break;default:_0x2c99d6[_0x9893('0x29')](db['sequelize'][_0x9893('0x4e')](_0x30422c(_0x315e3e,_0x9893('0x4f')))[_0x9893('0x28')](function(){})[_0x9893('0x50')](_0x2af07a()));}}}return _0x2c99d6;})[_0x9893('0x52')]()['then'](function(){return db[_0x9893('0x46')]['findAll']({'where':{'type':_0x9893('0x48')},'attributes':['id'],'include':[{'model':db['CmList'],'as':_0x9893('0x53'),'where':{'id':LISTID}}]})[_0x9893('0x28')](function(_0x9bc745){var _0x5d4a20=[];if(_0x9bc745){var _0x1beb7e;for(var _0x2ab433=0x0,_0x5cfa13;_0x2ab433<_0x9bc745[_0x9893('0x18')];_0x2ab433+=0x1){_0x5cfa13=_0x9bc745[_0x2ab433]['get']({'plain':!![]});_0x5d4a20['push'](db['sequelize']['query'](_0x4a779f(_0x5cfa13,_0x9893('0x4f')))[_0x9893('0x28')](function(){})[_0x9893('0x50')](_0x2af07a()));}}return _0x5d4a20;})[_0x9893('0x52')]();})[_0x9893('0x28')](function(){return db[_0x9893('0x54')][_0x9893('0x47')]({'attributes':['id',_0x9893('0x4b')],'include':[{'model':db['CmList'],'as':_0x9893('0x49'),'where':{'id':LISTID}}]})[_0x9893('0x28')](function(_0x44ed54){var _0x517bc2=[];if(_0x44ed54){for(var _0x246565=0x0,_0x34fee5;_0x246565<_0x44ed54[_0x9893('0x18')];_0x246565+=0x1){_0x34fee5=_0x44ed54[_0x246565][_0x9893('0x4a')]({'plain':!![]});switch(_0x34fee5['dialCheckDuplicateType']){case _0x9893('0x4c'):_0x517bc2['push'](db[_0x9893('0x4d')]['query'](_0x5b9590(_0x34fee5,_0x9893('0x55')))[_0x9893('0x28')](function(){})['catch'](_0x2af07a()));break;case'onlyIfOpen':_0x517bc2[_0x9893('0x29')](db[_0x9893('0x4d')]['query'](_0x47b20e(_0x34fee5,_0x9893('0x55')))[_0x9893('0x28')](function(){})['catch'](_0x2af07a()));break;default:_0x517bc2['push'](db[_0x9893('0x4d')][_0x9893('0x4e')](_0x30422c(_0x34fee5,_0x9893('0x55')))[_0x9893('0x28')](function(){})[_0x9893('0x50')](_0x2af07a()));}}}return _0x517bc2;})[_0x9893('0x52')]();})[_0x9893('0x28')](function(){return db['Campaign'][_0x9893('0x47')]({'attributes':['id'],'include':[{'model':db['CmList'],'as':_0x9893('0x53'),'where':{'id':LISTID}}]})[_0x9893('0x28')](function(_0x571cbc){var _0x2efb48=[];if(_0x571cbc){for(var _0x480b44=0x0,_0x4051f5;_0x480b44<_0x571cbc[_0x9893('0x18')];_0x480b44+=0x1){_0x4051f5=_0x571cbc[_0x480b44][_0x9893('0x4a')]({'plain':!![]});_0x2efb48[_0x9893('0x29')](db[_0x9893('0x4d')][_0x9893('0x4e')](_0x4a779f(_0x4051f5,_0x9893('0x55')))['then'](function(){})[_0x9893('0x50')](_0x2af07a()));}}return _0x2efb48;})[_0x9893('0x52')]();})[_0x9893('0x50')](function(_0xbb460){logger['error'](_0x9893('0x56'),_0x9893('0x57'),_0xbb460['message']);});}var processPromises=function(_0x1cc5ed){return BPromise[_0x9893('0x52')](promises)[_0x9893('0x28')](function(_0x50f657){})[_0x9893('0x50')](function(_0x36628e){logger['error'](_0x9893('0x58'),JSON[_0x9893('0x2b')](_0x36628e));})['finally'](function(){socket['emit']('contact:csv_'+SOCKET_TIMESTAMP,{'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});promises=[];success=0x0;errors=0x0;duplicates=0x0;rows=[];if(_0x1cc5ed){return _0x1cc5ed[_0x9893('0x59')]();}});};var endCsv=function(){return BPromise[_0x9893('0x5a')]()[_0x9893('0x28')](function(){if(hopperContacts){return checkHopper();}})[_0x9893('0x28')](function(){socket[_0x9893('0x5b')]('contact:csv_'+SOCKET_TIMESTAMP,{'finished':!![],'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});try{fs[_0x9893('0x5c')](FILEPATH);}catch(_0x2690ff){logger[_0x9893('0x14')](_0x9893('0x5d'),JSON['stringify'](_0x2690ff));}finally{process[_0x9893('0x5e')](0x0);}});};process['on']('SIGINT',function(){logger[_0x9893('0x5f')]('CSV\x20import\x20process\x20stopped!');endCsv();});function main(){return BPromise['resolve']()[_0x9893('0x28')](function(){if(DUPLICATES){DUPLICATES=DUPLICATES[_0x9893('0x11')](',');return db[_0x9893('0x60')][_0x9893('0x47')]({'where':{'ListId':LISTID},'attributes':DUPLICATES,'raw':!![]});}})['then'](function(_0x51ef51){var _0x810572=fs[_0x9893('0x61')](FILEPATH,{'highWaterMark':0xf*0x400*0x400});Papa[_0x9893('0x62')](_0x810572,{'header':!![],'skipEmptyLines':!![],'step':function(_0x47d1a6,_0x4e8159){total+=0x1;var _0x2e3e35=total;promises[_0x9893('0x29')](checkRow(_0x47d1a6,_0x51ef51,_0x2e3e35)['then'](function(){success+=0x1;})[_0x9893('0x50')](function(_0x4a3345){if(_0x4a3345[_0x9893('0x14')]){errors+=0x1;delete _0x4a3345['error'];}else if(_0x4a3345[_0x9893('0x26')]){duplicates+=0x1;delete _0x4a3345[_0x9893('0x26')];}rows[_0x9893('0x29')](_0x4a3345);}));if(total%0xc8===0x0){_0x4e8159['pause']();return processPromises(_0x4e8159);}},'complete':function(){return processPromises()[_0x9893('0x28')](function(){logger[_0x9893('0x5f')](_0x9893('0x63'));endCsv();});},'error':function(_0x3879d8,_0x45f5e9){logger[_0x9893('0x5f')](_0x9893('0x64'),JSON['stringify'](_0x3879d8));endCsv();}});})['catch'](function(_0x39c5c4){logger[_0x9893('0x14')]('Error\x20executing\x20contact\x20csv\x20import:',JSON[_0x9893('0x2b')](_0x39c5c4));});}main();
\ No newline at end of file
index 32a56f4..3e3f3f5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb48b=['updatedAt','priority','UserId','recallme','fields','cm_contacts.ListId\x20=\x20','.CmListId','.id\x20=\x20','cm_contacts.createdAt\x20=\x20?','cm_contacts.phone\x20NOT\x20IN\x20(?)','cm_hopper','\x22always\x22','\x22onlyIfOpen\x22','toString','cm_contacts.phone','cm_contacts.id','cm_hopper_black','createdAt','cm_contacts','.CmListId\x20=\x20?','ListId\x20=\x20?','\x20=\x20?','concat','keys','CompanyId',')\x20NOT\x20IN\x20?','min_id','group','info','Received\x20SIGINT','error','message','exit','push','code','query','spread','catch','stringify','send','start','binding','socket_timestamp','server/files/tmp','.csv','header','writeFileSync','parse','createReadStream','data','length','rows','errors','replace','isValid','isNaN','isNumber','email\x20wrong\x20format','dateOfBirth','YYYY-MM-DD','dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)','firstName','\x20not\x20specified','SystemRow','appendFileSync','emit','contact:import:','Abort\x20parser','abort','step','duplicates','CREATE\x20TABLE\x20','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','isNil',',\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','then','affectedRows','unlink','complete','argv','arguments\x20<filename>\x20<parameters>\x20<agents>','root','existsSync','binding\x20doesn\x27t\x20exists','phone\x20is\x20mandatory','body\x20id\x20mandatory','map','No\x20agent\x20available','SIGINT','uncaughtException','lodash','moment','ioredis','../../../mysqldb','../../../config/logger','import','defaults','localhost','socket.io-emitter','redis','format','YYYY-MM-DD\x20HH:mm:ss','test','select','field','phone','from','where','.dialCheckDuplicateType\x20IN\x20(','join','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.priority','insert','into','fromQuery','scheduledat','ContactId','ListId'];(function(_0xbcf157,_0x4ed11f){var _0x127e71=function(_0x5e8888){while(--_0x5e8888){_0xbcf157['push'](_0xbcf157['shift']());}};_0x127e71(++_0x4ed11f);}(_0xb48b,0x1df));var _0xbb48=function(_0x7fab8c,_0x113fad){_0x7fab8c=_0x7fab8c-0x0;var _0x157443=_0xb48b[_0x7fab8c];return _0x157443;};'use strict';var fs=require('fs');var path=require('path');var _=require(_0xbb48('0x0'));var Papa=require('papaparse');var util=require('util');var BPromise=require('bluebird');var moment=require(_0xbb48('0x1'));var squel=require('squel');var Redis=require(_0xbb48('0x2'));var db=require(_0xbb48('0x3'))['db'];var config=require('../../../config/environment');var logger=require(_0xbb48('0x4'))(_0xbb48('0x5'));config['redis']=_[_0xbb48('0x6')](config['redis'],{'host':_0xbb48('0x7'),'port':0x18eb});var socket=require(_0xbb48('0x8'))(new Redis(config[_0xbb48('0x9')]));var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()[_0xbb48('0xa')](_0xbb48('0xb'));function isEmail(_0x118aad){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))*$/[_0xbb48('0xc')](_0x118aad);}function selectNotIn(_0x4ec465,_0x137a4f,_0x215dce,_0x29ffb9,_0x1e7046){return squel[_0xbb48('0xd')]()[_0xbb48('0xe')](_0xbb48('0xf'))[_0xbb48('0x10')](_0x29ffb9)['join'](_0x137a4f,null,_0x137a4f+'.id\x20=\x20'+_0x29ffb9+'.'+_0x215dce)[_0xbb48('0x11')](_0x29ffb9+'.'+_0x215dce+'\x20=\x20'+_0x4ec465+'.'+_0x215dce)[_0xbb48('0x11')](_0x137a4f+_0xbb48('0x12')+_0x1e7046[_0xbb48('0x13')]()+')');}function insertCmHopper(_0x297b5e,_0x40cadf,_0x305dec,_0x3a9662,_0xe6a891){var _0x50c085=['cm_contacts.phone','cm_contacts.scheduledat','cm_contacts.id',_0xbb48('0x14'),_0x40cadf+'.'+_0x3a9662,_0xbb48('0x15'),'cm_contacts.updatedAt',_0xbb48('0x16'),'cm_contacts.UserId','\x22'+_0xe6a891+'\x22'];return squel[_0xbb48('0x17')]()[_0xbb48('0x18')]('cm_hopper')[_0xbb48('0x19')]([_0xbb48('0xf'),_0xbb48('0x1a'),_0xbb48('0x1b'),_0xbb48('0x1c'),_0x3a9662,'createdAt',_0xbb48('0x1d'),_0xbb48('0x1e'),_0xbb48('0x1f'),_0xbb48('0x20')],squel[_0xbb48('0xd')]()[_0xbb48('0x21')](_0x50c085)[_0xbb48('0x10')](_0x40cadf)[_0xbb48('0x13')]('cm_contacts',null,_0xbb48('0x22')+_0x40cadf+_0xbb48('0x23'))[_0xbb48('0x13')](_0x305dec,null,_0x305dec+_0xbb48('0x24')+_0x40cadf+'.'+_0x3a9662)['where'](_0x40cadf+'.CmListId\x20=\x20?',_0x297b5e)['where'](_0xbb48('0x25'),NOW)[_0xbb48('0x11')](_0xbb48('0x26'),selectNotIn(_0x40cadf,_0x305dec,_0x3a9662,_0xbb48('0x27'),[_0xbb48('0x28'),_0xbb48('0x29')]))[_0xbb48('0x11')](_0xbb48('0x26'),selectNotIn(_0x40cadf,_0x305dec,_0x3a9662,'cm_hopper',[_0xbb48('0x28')])))[_0xbb48('0x2a')]();}function insertCmHopperBlack(_0x148cf3,_0x510e05,_0x273a43,_0x1f66cd){var _0x195cc3=[_0xbb48('0x2b'),_0xbb48('0x2c'),_0xbb48('0x14'),_0x510e05+'.'+_0x1f66cd,_0xbb48('0x15'),'cm_contacts.updatedAt'];return squel['insert']()['into'](_0xbb48('0x2d'))[_0xbb48('0x19')]([_0xbb48('0xf'),_0xbb48('0x1b'),_0xbb48('0x1c'),_0x1f66cd,_0xbb48('0x2e'),_0xbb48('0x1d')],squel['select']()[_0xbb48('0x21')](_0x195cc3)[_0xbb48('0x10')](_0x510e05)[_0xbb48('0x13')](_0xbb48('0x2f'),null,_0xbb48('0x22')+_0x510e05+_0xbb48('0x23'))[_0xbb48('0x13')](_0x273a43,null,_0x273a43+_0xbb48('0x24')+_0x510e05+'.'+_0x1f66cd)[_0xbb48('0x11')](_0x510e05+_0xbb48('0x30'),_0x148cf3)['where'](_0xbb48('0x25'),NOW)[_0xbb48('0x11')](_0xbb48('0x26'),squel[_0xbb48('0xd')]()[_0xbb48('0xe')]('phone')['from'](_0xbb48('0x2d'))['where'](_0xbb48('0x31'),_0x148cf3)[_0xbb48('0x11')](_0x1f66cd+_0xbb48('0x32'),_0x510e05+'.'+_0x1f66cd)))[_0xbb48('0x2a')]();}function insertCmContact(_0x5dfac2,_0x295421,_0x2e3cf9,_0x116d42){var _0x59c6c3=_[_0xbb48('0x33')](_[_0xbb48('0x34')](_0x116d42),[_0xbb48('0x1c'),_0xbb48('0x35'),_0xbb48('0x2e'),_0xbb48('0x1d')]);return squel[_0xbb48('0x17')]()['into'](_0xbb48('0x2f'))[_0xbb48('0x19')](_0x59c6c3,squel[_0xbb48('0xd')]()[_0xbb48('0x21')](_0x59c6c3)[_0xbb48('0x10')](_0x295421)['where']('('+_0x2e3cf9['join'](',')+_0xbb48('0x36'),squel[_0xbb48('0xd')]()['fields'](_0x2e3cf9)['from'](_0xbb48('0x2f'))[_0xbb48('0x11')]('ListId\x20=\x20?',_0x5dfac2))[_0xbb48('0x11')]('id\x20IN\x20?',squel['select']()[_0xbb48('0xe')]('MIN(id)',_0xbb48('0x37'))[_0xbb48('0x10')](_0x295421)[_0xbb48('0x38')](_0x2e3cf9[_0xbb48('0x13')](','))))[_0xbb48('0x2a')]();}function handleStop(){logger[_0xbb48('0x39')](_0xbb48('0x3a'));stopped=!![];}function handleUncaughtException(_0x541e8b){logger[_0xbb48('0x3b')](_0x541e8b[_0xbb48('0x3c')]);process[_0xbb48('0x3d')](0x1);}function handleError(_0x3eb2ae,_0x514478){stats['errors'][_0xbb48('0x3e')]({'name':_0x514478[_0xbb48('0x3f')],'message':_0x514478['message'],'row':_0x3eb2ae});}function handleQuery(_0x542df1){logger[_0xbb48('0x39')](_0x542df1);return db['sequelize'][_0xbb48('0x40')](_0x542df1)[_0xbb48('0x41')](function(_0x10adda){results[_0xbb48('0x3e')](_0x10adda);})[_0xbb48('0x42')](function(_0x332064){logger[_0xbb48('0x3b')](_0x332064[_0xbb48('0x3c')]);});}function main(_0x5efed6,_0x1a2a05,_0x392c32,_0x183acd){logger['info']('main',_0x5efed6,JSON[_0xbb48('0x43')](_0x1a2a05));process[_0xbb48('0x44')](_0xbb48('0x45'));var _0x1b7b70=_0x1a2a05[_0xbb48('0x46')];var _0x22c69a=_0x1a2a05[_0xbb48('0x47')];var _0xb72f85=path[_0xbb48('0x13')](config['root'],_0xbb48('0x48'),_0x22c69a+_0xbb48('0x49'));var _0x5e85ca=_[_0xbb48('0x34')](_0x1b7b70)[_0xbb48('0x13')]();logger[_0xbb48('0x39')](_0xbb48('0x4a'),_0x5e85ca);fs[_0xbb48('0x4b')](_0xb72f85,_0x5e85ca+'\x0a');Papa[_0xbb48('0x4c')](fs[_0xbb48('0x4d')](_0x5efed6),{'header':!![],'skipEmptyLines':!![],'step':function(_0x480eac,_0x25362f){try{for(var _0x26752f=0x0,_0x19e80b=[];_0x26752f<_0x480eac[_0xbb48('0x4e')][_0xbb48('0x4f')];_0x26752f++){stats[_0xbb48('0x50')]+=0x1;if(_0x480eac[_0xbb48('0x51')][_0x26752f]){handleError(_0x480eac[_0xbb48('0x4e')][_0x26752f],_0x480eac['errors'][_0x26752f]);}else{var _0x496f0d=[];for(var _0x20c4ab in _0x1b7b70){if(_0x1b7b70['hasOwnProperty'](_0x20c4ab)){if(_0x480eac[_0xbb48('0x4e')][_0x26752f][_0x1b7b70[_0x20c4ab]]){var _0x56020d=_['trim'](_0x480eac[_0xbb48('0x4e')][_0x26752f][_0x1b7b70[_0x20c4ab]][_0xbb48('0x52')](/"/g,'\x27'));switch(_0x20c4ab){case _0xbb48('0x1a'):var _0x595c0c=moment(_0x56020d,_0xbb48('0xb'),!![]);if(_0x595c0c[_0xbb48('0x53')]()){_0x19e80b[_0xbb48('0x3e')]('\x22'+_0x56020d+'\x22');}else{_0x496f0d[_0xbb48('0x3e')]('scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)');}break;case _0xbb48('0x1e'):var _0x532984=parseInt(_0x56020d);_0x56020d=_[_0xbb48('0x54')](_0x532984)||_0x532984<0x0||_0x532984>0x4?_0x183acd?0x3:0x2:_0x532984;_0x19e80b['push']('\x22'+_0x56020d+'\x22');break;case _0xbb48('0x1f'):var _0x195b34=parseInt(_0x56020d);if(_[_0xbb48('0x55')](_0x195b34)&&_['includes'](_0x392c32,_0x195b34)){_0x19e80b[_0xbb48('0x3e')]('\x22'+_0x195b34+'\x22');}else{_0x496f0d[_0xbb48('0x3e')]('agent\x20not\x20exists');}break;case'email':if(isEmail(_0x56020d)){_0x19e80b[_0xbb48('0x3e')]('\x22'+_0x56020d+'\x22');}else{_0x496f0d[_0xbb48('0x3e')](_0xbb48('0x56'));}break;case _0xbb48('0x57'):var _0x18e9cc=moment(_0x56020d,_0xbb48('0x58'),!![]);if(_0x18e9cc[_0xbb48('0x53')]()){_0x19e80b[_0xbb48('0x3e')]('\x22'+_0x56020d+'\x22');}else{_0x496f0d[_0xbb48('0x3e')](_0xbb48('0x59'));}break;default:_0x19e80b[_0xbb48('0x3e')]('\x22'+_0x56020d+'\x22');}}else{switch(_0x20c4ab){case _0xbb48('0x5a'):case'phone':_0x496f0d[_0xbb48('0x3e')](_0x20c4ab+_0xbb48('0x5b'));break;default:_0x19e80b['push']('\x22\x22');}}}}if(_0x496f0d[_0xbb48('0x4f')]){handleError(_0x480eac[_0xbb48('0x4e')][_0x26752f],{'code':_0xbb48('0x5c'),'message':_0x496f0d['join']()});}else{fs[_0xbb48('0x5d')](_0xb72f85,_0x19e80b[_0xbb48('0x13')]()+'\x0a');}_0x19e80b=[];}if(!(stats[_0xbb48('0x50')]%0xc8)){socket[_0xbb48('0x5e')](_0xbb48('0x5f')+_0x22c69a,stats);stats['errors']=[];}}if(stopped){logger['info'](_0xbb48('0x60'));_0x25362f[_0xbb48('0x61')]();}}catch(_0x4aace9){handleError(_0x480eac[_0xbb48('0x4e')][_0x26752f],{'code':'SystemError','message':_0x4aace9[_0xbb48('0x3c')]});logger['error'](_0xbb48('0x62'),_0x4aace9[_0xbb48('0x3c')]);}},'complete':function(){try{var _0x59fa61=[];var _0x3d9e96=_0xbb48('0x2f');if(_0x1a2a05[_0xbb48('0x63')]&&_0x1a2a05[_0xbb48('0x63')][_0xbb48('0x4f')]){_0x3d9e96='cm_contacts_'+_0x22c69a;_0x59fa61[_0xbb48('0x3e')](_0xbb48('0x64')+_0x3d9e96+'\x20LIKE\x20cm_contacts;');}var _0x4bf210=util[_0xbb48('0xa')](_0xbb48('0x65'),_0xb72f85,_0x3d9e96,_0x5e85ca,_0x1a2a05[_0xbb48('0x1c')],_0x1a2a05[_0xbb48('0x35')]||null,NOW,NOW);if(_[_0xbb48('0x66')](_0x1b7b70[_0xbb48('0x1a')])){_0x4bf210+=_0xbb48('0x67');}_0x59fa61['push'](_0x4bf210);if(_0x1a2a05[_0xbb48('0x63')]&&_0x1a2a05[_0xbb48('0x63')][_0xbb48('0x4f')]){_0x59fa61[_0xbb48('0x3e')](insertCmContact(_0x1a2a05[_0xbb48('0x1c')],_0x3d9e96,_0x1a2a05[_0xbb48('0x63')],_0x1b7b70));_0x59fa61[_0xbb48('0x3e')](_0xbb48('0x68')+_0x3d9e96+';');}_0x59fa61[_0xbb48('0x3e')](insertCmHopper(_0x1a2a05['ListId'],_0xbb48('0x69'),_0xbb48('0x6a'),_0xbb48('0x6b'),_0x183acd));_0x59fa61[_0xbb48('0x3e')](insertCmHopperBlack(_0x1a2a05[_0xbb48('0x1c')],_0xbb48('0x6c'),'voice_queues','VoiceQueueId'));_0x59fa61[_0xbb48('0x3e')](insertCmHopper(_0x1a2a05[_0xbb48('0x1c')],_0xbb48('0x6d'),_0xbb48('0x6e'),_0xbb48('0x6f'),_0x183acd));_0x59fa61[_0xbb48('0x3e')](insertCmHopperBlack(_0x1a2a05[_0xbb48('0x1c')],'campaigns_has_cm_blacklists',_0xbb48('0x6e'),_0xbb48('0x6f')));BPromise['each'](_0x59fa61,handleQuery)[_0xbb48('0x70')](function(_0x45c461){stats['finish']=!![];stats[_0xbb48('0x71')]=_0x1a2a05['duplicates']&&_0x1a2a05[_0xbb48('0x63')][_0xbb48('0x4f')]?results[0x2][_0xbb48('0x71')]:results[0x0][_0xbb48('0x71')];socket[_0xbb48('0x5e')]('contact:import:'+_0x22c69a,stats);fs[_0xbb48('0x72')](_0x5efed6);fs['unlink'](_0xb72f85);process['exit'](0x0);})[_0xbb48('0x42')](function(_0x2c28b8){logger[_0xbb48('0x3b')](_0x2c28b8[_0xbb48('0x3c')]);process[_0xbb48('0x3d')](0x1);});}catch(_0x2dc82a){logger['error'](_0xbb48('0x73'),_0x2dc82a[_0xbb48('0x3c')]);process[_0xbb48('0x3d')](0x1);}},'error':function(_0x5a04b8,_0x1f9dbd,_0x448e07,_0x100482){throw new Error(_0x100482);}});}function validate(){if(process[_0xbb48('0x74')]&&process[_0xbb48('0x74')][_0xbb48('0x4f')]<0x4){throw new Error(_0xbb48('0x75'));}var _0x226329=path[_0xbb48('0x13')](config[_0xbb48('0x76')],_0xbb48('0x48'),process[_0xbb48('0x74')][0x2]);if(!fs[_0xbb48('0x77')](_0x226329)){throw new Error('file\x20doesn\x27t\x20exists');}var _0x524165={};try{_0x524165=JSON[_0xbb48('0x4c')](process[_0xbb48('0x74')][0x3]);if(!_0x524165[_0xbb48('0x46')]){throw new Error(_0xbb48('0x78'));}if(!_0x524165[_0xbb48('0x46')][_0xbb48('0xf')]){throw new Error(_0xbb48('0x79'));}if(!_0x524165['binding']['firstName']){throw new Error('firstName\x20is\x20mandatory');}var _0x24f9e6=0x0;if(_0x524165[_0xbb48('0x46')][_0xbb48('0x1f')]){_0x24f9e6=0x1;}if(!_0x524165[_0xbb48('0x1c')]){throw new Error('ListId\x20is\x20mandatory');}}catch(_0x269c7a){throw new Error(_0xbb48('0x7a'));}var _0x13092f=[];try{_0x13092f=_[_0xbb48('0x7b')](JSON[_0xbb48('0x4c')](process[_0xbb48('0x74')][0x4]),'id');}catch(_0x4e7f3a){logger[_0xbb48('0x39')](_0xbb48('0x7c'));}main(_0x226329,_0x524165,_0x13092f,_0x24f9e6);}validate();process['on'](_0xbb48('0x7d'),handleStop);process['on'](_0xbb48('0x7e'),handleUncaughtException);
\ No newline at end of file
+var _0x4df8=['push','code','sequelize','query','spread','main','stringify','send','start','socket_timestamp','root','server/files/tmp','.csv','createReadStream','length','rows','data','hasOwnProperty','trim','replace','isValid','isNaN','includes','agent\x20not\x20exists','email','dateOfBirth','dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)','SystemRow','appendFileSync','emit','contact:import:','Abort\x20parser','SystemError','step','duplicates','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','isNil',',\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','campaigns_has_cm_blacklists','each','affectedRows','unlink','catch','complete','argv','arguments\x20<filename>\x20<parameters>\x20<agents>','file\x20doesn\x27t\x20exists','parse','binding\x20doesn\x27t\x20exists','binding','phone\x20is\x20mandatory','firstName','firstName\x20is\x20mandatory','body\x20id\x20mandatory','map','No\x20agent\x20available','path','lodash','util','bluebird','squel','ioredis','../../../mysqldb','../../../config/environment','../../../config/logger','import','redis','localhost','YYYY-MM-DD\x20HH:mm:ss','test','select','field','phone','from','join','.id\x20=\x20','where','\x20=\x20','.dialCheckDuplicateType\x20IN\x20(','cm_contacts.phone','cm_contacts.scheduledat','cm_contacts.id','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.updatedAt','insert','cm_hopper','fromQuery','ContactId','ListId','createdAt','updatedAt','priority','UserId','recallme','cm_contacts.ListId\x20=\x20','.CmListId','.CmListId\x20=\x20?','cm_contacts.createdAt\x20=\x20?','cm_contacts.phone\x20NOT\x20IN\x20(?)','\x22always\x22','\x22onlyIfOpen\x22','into','cm_hopper_black','fields','ListId\x20=\x20?','\x20=\x20?','toString','keys','CompanyId','cm_contacts',')\x20NOT\x20IN\x20?','MIN(id)','min_id','group','info','Received\x20SIGINT','error','message','exit','errors'];(function(_0x23ac72,_0x5b3d9d){var _0xa344d5=function(_0x273eb3){while(--_0x273eb3){_0x23ac72['push'](_0x23ac72['shift']());}};_0xa344d5(++_0x5b3d9d);}(_0x4df8,0x1cf));var _0x84df=function(_0x11b538,_0x116f41){_0x11b538=_0x11b538-0x0;var _0x378d59=_0x4df8[_0x11b538];return _0x378d59;};'use strict';var fs=require('fs');var path=require(_0x84df('0x0'));var _=require(_0x84df('0x1'));var Papa=require('papaparse');var util=require(_0x84df('0x2'));var BPromise=require(_0x84df('0x3'));var moment=require('moment');var squel=require(_0x84df('0x4'));var Redis=require(_0x84df('0x5'));var db=require(_0x84df('0x6'))['db'];var config=require(_0x84df('0x7'));var logger=require(_0x84df('0x8'))(_0x84df('0x9'));config['redis']=_['defaults'](config[_0x84df('0xa')],{'host':_0x84df('0xb'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x84df('0xa')]));var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()['format'](_0x84df('0xc'));function isEmail(_0xbe16d4){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))*$/[_0x84df('0xd')](_0xbe16d4);}function selectNotIn(_0x16f24c,_0x444f89,_0x4acba2,_0x497117,_0x42ff94){return squel[_0x84df('0xe')]()[_0x84df('0xf')](_0x84df('0x10'))[_0x84df('0x11')](_0x497117)[_0x84df('0x12')](_0x444f89,null,_0x444f89+_0x84df('0x13')+_0x497117+'.'+_0x4acba2)[_0x84df('0x14')](_0x497117+'.'+_0x4acba2+_0x84df('0x15')+_0x16f24c+'.'+_0x4acba2)[_0x84df('0x14')](_0x444f89+_0x84df('0x16')+_0x42ff94[_0x84df('0x12')]()+')');}function insertCmHopper(_0x3d0348,_0x347088,_0x56c087,_0x372219,_0x47fcc6){var _0x54357f=[_0x84df('0x17'),_0x84df('0x18'),_0x84df('0x19'),_0x84df('0x1a'),_0x347088+'.'+_0x372219,_0x84df('0x1b'),_0x84df('0x1c'),'cm_contacts.priority','cm_contacts.UserId','\x22'+_0x47fcc6+'\x22'];return squel[_0x84df('0x1d')]()['into'](_0x84df('0x1e'))[_0x84df('0x1f')]([_0x84df('0x10'),'scheduledat',_0x84df('0x20'),_0x84df('0x21'),_0x372219,_0x84df('0x22'),_0x84df('0x23'),_0x84df('0x24'),_0x84df('0x25'),_0x84df('0x26')],squel[_0x84df('0xe')]()['fields'](_0x54357f)[_0x84df('0x11')](_0x347088)['join']('cm_contacts',null,_0x84df('0x27')+_0x347088+_0x84df('0x28'))[_0x84df('0x12')](_0x56c087,null,_0x56c087+'.id\x20=\x20'+_0x347088+'.'+_0x372219)['where'](_0x347088+_0x84df('0x29'),_0x3d0348)[_0x84df('0x14')](_0x84df('0x2a'),NOW)[_0x84df('0x14')](_0x84df('0x2b'),selectNotIn(_0x347088,_0x56c087,_0x372219,'cm_hopper',[_0x84df('0x2c'),_0x84df('0x2d')]))['where']('cm_contacts.phone\x20NOT\x20IN\x20(?)',selectNotIn(_0x347088,_0x56c087,_0x372219,'cm_hopper',[_0x84df('0x2c')])))['toString']();}function insertCmHopperBlack(_0x2371bc,_0x4b7409,_0xf751f3,_0xf2e89){var _0x1e1f90=[_0x84df('0x17'),'cm_contacts.id',_0x84df('0x1a'),_0x4b7409+'.'+_0xf2e89,_0x84df('0x1b'),'cm_contacts.updatedAt'];return squel[_0x84df('0x1d')]()[_0x84df('0x2e')](_0x84df('0x2f'))[_0x84df('0x1f')](['phone',_0x84df('0x20'),'ListId',_0xf2e89,_0x84df('0x22'),'updatedAt'],squel[_0x84df('0xe')]()[_0x84df('0x30')](_0x1e1f90)[_0x84df('0x11')](_0x4b7409)[_0x84df('0x12')]('cm_contacts',null,_0x84df('0x27')+_0x4b7409+_0x84df('0x28'))[_0x84df('0x12')](_0xf751f3,null,_0xf751f3+_0x84df('0x13')+_0x4b7409+'.'+_0xf2e89)['where'](_0x4b7409+_0x84df('0x29'),_0x2371bc)['where'](_0x84df('0x2a'),NOW)[_0x84df('0x14')]('cm_contacts.phone\x20NOT\x20IN\x20(?)',squel[_0x84df('0xe')]()[_0x84df('0xf')](_0x84df('0x10'))[_0x84df('0x11')](_0x84df('0x2f'))[_0x84df('0x14')](_0x84df('0x31'),_0x2371bc)[_0x84df('0x14')](_0xf2e89+_0x84df('0x32'),_0x4b7409+'.'+_0xf2e89)))[_0x84df('0x33')]();}function insertCmContact(_0x146cca,_0x1e4649,_0x5e36de,_0x15aac2){var _0x34765b=_['concat'](_[_0x84df('0x34')](_0x15aac2),[_0x84df('0x21'),_0x84df('0x35'),'createdAt',_0x84df('0x23')]);return squel['insert']()[_0x84df('0x2e')](_0x84df('0x36'))[_0x84df('0x1f')](_0x34765b,squel[_0x84df('0xe')]()[_0x84df('0x30')](_0x34765b)[_0x84df('0x11')](_0x1e4649)['where']('('+_0x5e36de['join'](',')+_0x84df('0x37'),squel[_0x84df('0xe')]()[_0x84df('0x30')](_0x5e36de)[_0x84df('0x11')](_0x84df('0x36'))[_0x84df('0x14')](_0x84df('0x31'),_0x146cca))['where']('id\x20IN\x20?',squel[_0x84df('0xe')]()['field'](_0x84df('0x38'),_0x84df('0x39'))['from'](_0x1e4649)[_0x84df('0x3a')](_0x5e36de[_0x84df('0x12')](','))))[_0x84df('0x33')]();}function handleStop(){logger[_0x84df('0x3b')](_0x84df('0x3c'));stopped=!![];}function handleUncaughtException(_0x563fbb){logger[_0x84df('0x3d')](_0x563fbb[_0x84df('0x3e')]);process[_0x84df('0x3f')](0x1);}function handleError(_0x3143f8,_0x34c228){stats[_0x84df('0x40')][_0x84df('0x41')]({'name':_0x34c228[_0x84df('0x42')],'message':_0x34c228[_0x84df('0x3e')],'row':_0x3143f8});}function handleQuery(_0x2f3fab){logger['info'](_0x2f3fab);return db[_0x84df('0x43')][_0x84df('0x44')](_0x2f3fab)[_0x84df('0x45')](function(_0x441a47){results[_0x84df('0x41')](_0x441a47);})['catch'](function(_0xb4110b){logger[_0x84df('0x3d')](_0xb4110b[_0x84df('0x3e')]);});}function main(_0x1a33f4,_0x2734a8,_0x4f7d39,_0xc4664a){logger[_0x84df('0x3b')](_0x84df('0x46'),_0x1a33f4,JSON[_0x84df('0x47')](_0x2734a8));process[_0x84df('0x48')](_0x84df('0x49'));var _0x49abb3=_0x2734a8['binding'];var _0x3da564=_0x2734a8[_0x84df('0x4a')];var _0x4298b2=path[_0x84df('0x12')](config[_0x84df('0x4b')],_0x84df('0x4c'),_0x3da564+_0x84df('0x4d'));var _0x57345c=_[_0x84df('0x34')](_0x49abb3)[_0x84df('0x12')]();logger[_0x84df('0x3b')]('header',_0x57345c);fs['writeFileSync'](_0x4298b2,_0x57345c+'\x0a');Papa['parse'](fs[_0x84df('0x4e')](_0x1a33f4),{'header':!![],'skipEmptyLines':!![],'step':function(_0x2d78f5,_0x18fce2){try{for(var _0x106d5b=0x0,_0x53fc23=[];_0x106d5b<_0x2d78f5['data'][_0x84df('0x4f')];_0x106d5b++){stats[_0x84df('0x50')]+=0x1;if(_0x2d78f5['errors'][_0x106d5b]){handleError(_0x2d78f5[_0x84df('0x51')][_0x106d5b],_0x2d78f5[_0x84df('0x40')][_0x106d5b]);}else{var _0x431a8e=[];for(var _0x468f50 in _0x49abb3){if(_0x49abb3[_0x84df('0x52')](_0x468f50)){if(_0x2d78f5[_0x84df('0x51')][_0x106d5b][_0x49abb3[_0x468f50]]){var _0xccaab0=_[_0x84df('0x53')](_0x2d78f5[_0x84df('0x51')][_0x106d5b][_0x49abb3[_0x468f50]][_0x84df('0x54')](/"/g,'\x27'));switch(_0x468f50){case'scheduledat':var _0x4dace3=moment(_0xccaab0,_0x84df('0xc'),!![]);if(_0x4dace3[_0x84df('0x55')]()){_0x53fc23['push']('\x22'+_0xccaab0+'\x22');}else{_0x431a8e['push']('scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)');}break;case _0x84df('0x24'):var _0x7862d4=parseInt(_0xccaab0);_0xccaab0=_[_0x84df('0x56')](_0x7862d4)||_0x7862d4<0x0||_0x7862d4>0x4?_0xc4664a?0x3:0x2:_0x7862d4;_0x53fc23['push']('\x22'+_0xccaab0+'\x22');break;case _0x84df('0x25'):var _0x2e9d78=parseInt(_0xccaab0);if(_['isNumber'](_0x2e9d78)&&_[_0x84df('0x57')](_0x4f7d39,_0x2e9d78)){_0x53fc23[_0x84df('0x41')]('\x22'+_0x2e9d78+'\x22');}else{_0x431a8e[_0x84df('0x41')](_0x84df('0x58'));}break;case _0x84df('0x59'):if(isEmail(_0xccaab0)){_0x53fc23['push']('\x22'+_0xccaab0+'\x22');}else{_0x431a8e[_0x84df('0x41')]('email\x20wrong\x20format');}break;case _0x84df('0x5a'):var _0x1c9621=moment(_0xccaab0,'YYYY-MM-DD',!![]);if(_0x1c9621[_0x84df('0x55')]()){_0x53fc23[_0x84df('0x41')]('\x22'+_0xccaab0+'\x22');}else{_0x431a8e[_0x84df('0x41')](_0x84df('0x5b'));}break;default:_0x53fc23['push']('\x22'+_0xccaab0+'\x22');}}else{switch(_0x468f50){case'firstName':case _0x84df('0x10'):_0x431a8e['push'](_0x468f50+'\x20not\x20specified');break;default:_0x53fc23[_0x84df('0x41')]('\x22\x22');}}}}if(_0x431a8e[_0x84df('0x4f')]){handleError(_0x2d78f5[_0x84df('0x51')][_0x106d5b],{'code':_0x84df('0x5c'),'message':_0x431a8e[_0x84df('0x12')]()});}else{fs[_0x84df('0x5d')](_0x4298b2,_0x53fc23[_0x84df('0x12')]()+'\x0a');}_0x53fc23=[];}if(!(stats['rows']%0xc8)){socket[_0x84df('0x5e')](_0x84df('0x5f')+_0x3da564,stats);stats[_0x84df('0x40')]=[];}}if(stopped){logger[_0x84df('0x3b')](_0x84df('0x60'));_0x18fce2['abort']();}}catch(_0x25f507){handleError(_0x2d78f5[_0x84df('0x51')][_0x106d5b],{'code':_0x84df('0x61'),'message':_0x25f507[_0x84df('0x3e')]});logger['error'](_0x84df('0x62'),_0x25f507['message']);}},'complete':function(){try{var _0x49fa15=[];var _0x5e2848=_0x84df('0x36');if(_0x2734a8[_0x84df('0x63')]&&_0x2734a8[_0x84df('0x63')][_0x84df('0x4f')]){_0x5e2848='cm_contacts_'+_0x3da564;_0x49fa15[_0x84df('0x41')](_0x84df('0x64')+_0x5e2848+_0x84df('0x65'));}var _0x4ecb30=util[_0x84df('0x66')](_0x84df('0x67'),_0x4298b2,_0x5e2848,_0x57345c,_0x2734a8['ListId'],_0x2734a8[_0x84df('0x35')]||null,NOW,NOW);if(_[_0x84df('0x68')](_0x49abb3['scheduledat'])){_0x4ecb30+=_0x84df('0x69');}_0x49fa15[_0x84df('0x41')](_0x4ecb30);if(_0x2734a8[_0x84df('0x63')]&&_0x2734a8[_0x84df('0x63')][_0x84df('0x4f')]){_0x49fa15[_0x84df('0x41')](insertCmContact(_0x2734a8[_0x84df('0x21')],_0x5e2848,_0x2734a8[_0x84df('0x63')],_0x49abb3));_0x49fa15[_0x84df('0x41')](_0x84df('0x6a')+_0x5e2848+';');}_0x49fa15[_0x84df('0x41')](insertCmHopper(_0x2734a8['ListId'],_0x84df('0x6b'),_0x84df('0x6c'),_0x84df('0x6d'),_0xc4664a));_0x49fa15[_0x84df('0x41')](insertCmHopperBlack(_0x2734a8[_0x84df('0x21')],_0x84df('0x6e'),_0x84df('0x6c'),_0x84df('0x6d')));_0x49fa15[_0x84df('0x41')](insertCmHopper(_0x2734a8[_0x84df('0x21')],_0x84df('0x6f'),_0x84df('0x70'),_0x84df('0x71'),_0xc4664a));_0x49fa15[_0x84df('0x41')](insertCmHopperBlack(_0x2734a8[_0x84df('0x21')],_0x84df('0x72'),_0x84df('0x70'),_0x84df('0x71')));BPromise[_0x84df('0x73')](_0x49fa15,handleQuery)['then'](function(_0x44a5e5){stats['finish']=!![];stats[_0x84df('0x74')]=_0x2734a8[_0x84df('0x63')]&&_0x2734a8['duplicates'][_0x84df('0x4f')]?results[0x2][_0x84df('0x74')]:results[0x0][_0x84df('0x74')];socket[_0x84df('0x5e')](_0x84df('0x5f')+_0x3da564,stats);fs[_0x84df('0x75')](_0x1a33f4);fs[_0x84df('0x75')](_0x4298b2);process[_0x84df('0x3f')](0x0);})[_0x84df('0x76')](function(_0x52edf7){logger[_0x84df('0x3d')](_0x52edf7['message']);process[_0x84df('0x3f')](0x1);});}catch(_0x4a31a3){logger[_0x84df('0x3d')](_0x84df('0x77'),_0x4a31a3['message']);process[_0x84df('0x3f')](0x1);}},'error':function(_0x3279a5,_0x29b567,_0x544b20,_0x4cbf38){throw new Error(_0x4cbf38);}});}function validate(){if(process['argv']&&process[_0x84df('0x78')][_0x84df('0x4f')]<0x4){throw new Error(_0x84df('0x79'));}var _0x1b6ad0=path[_0x84df('0x12')](config[_0x84df('0x4b')],'server/files/tmp',process[_0x84df('0x78')][0x2]);if(!fs['existsSync'](_0x1b6ad0)){throw new Error(_0x84df('0x7a'));}var _0x35a2d2={};try{_0x35a2d2=JSON[_0x84df('0x7b')](process['argv'][0x3]);if(!_0x35a2d2['binding']){throw new Error(_0x84df('0x7c'));}if(!_0x35a2d2[_0x84df('0x7d')][_0x84df('0x10')]){throw new Error(_0x84df('0x7e'));}if(!_0x35a2d2[_0x84df('0x7d')][_0x84df('0x7f')]){throw new Error(_0x84df('0x80'));}var _0x40f026=0x0;if(_0x35a2d2[_0x84df('0x7d')]['UserId']){_0x40f026=0x1;}if(!_0x35a2d2[_0x84df('0x21')]){throw new Error('ListId\x20is\x20mandatory');}}catch(_0x4b077a){throw new Error(_0x84df('0x81'));}var _0x39f20d=[];try{_0x39f20d=_[_0x84df('0x82')](JSON['parse'](process[_0x84df('0x78')][0x4]),'id');}catch(_0x4c1e3f){logger[_0x84df('0x3b')](_0x84df('0x83'));}main(_0x1b6ad0,_0x35a2d2,_0x39f20d,_0x40f026);}validate();process['on']('SIGINT',handleStop);process['on']('uncaughtException',handleUncaughtException);
\ No newline at end of file
index 9d15ff1..16b9b2a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f66=['***\x20Time\x20Info\x20***','Agent\x20Ring','agentconnectAt','agentcompleteAt','Hold\x20Time','holdtime','Talk\x20Time','***\x20Call\x20Info\x20***','Called\x20Number','Member\x20Name','starttime','Answer\x20Time','Complete\x20Time','endtime','Duration','Billable\x20Time','string','[xCALLY\x20Ticket]','toLowerCase','voice','inbound','variable','queue','calleridnum','outbound','push','Outbound\x20Call','getDescriptions','keyValue','Caller\x20Name','calleridname','Call\x20To','destexten','Queue','UniqueId','uniqueid','Date','agentcalledAt','Agent\x20Number','destcalleridnum'];(function(_0x33b8e7,_0x2c741b){var _0x67e068=function(_0x41a8a8){while(--_0x41a8a8){_0x33b8e7['push'](_0x33b8e7['shift']());}};_0x67e068(++_0x2c741b);}(_0x5f66,0x1a0));var _0x65f6=function(_0x21a9d9,_0x4d5ac8){_0x21a9d9=_0x21a9d9-0x0;var _0x46adce=_0x5f66[_0x21a9d9];return _0x46adce;};'use strict';exports['getSubjects']=function(_0x61c60c,_0x4a3887){var _0x2d5fd9=[{'type':_0x65f6('0x0'),'content':_0x65f6('0x1'),'variableName':null}];switch(_0x61c60c[_0x65f6('0x2')]()){case _0x65f6('0x3'):switch(_0x4a3887['toLowerCase']()){case _0x65f6('0x4'):_0x2d5fd9['push']({'type':_0x65f6('0x5'),'content':'','variableName':_0x65f6('0x6')});_0x2d5fd9['push']({'type':'variable','content':'','variableName':_0x65f6('0x7')});break;case _0x65f6('0x8'):_0x2d5fd9[_0x65f6('0x9')]({'type':_0x65f6('0x0'),'content':_0x65f6('0xa'),'variableName':null});_0x2d5fd9[_0x65f6('0x9')]({'type':'variable','content':'','variableName':'destcalleridnum'});break;}}return _0x2d5fd9;};exports[_0x65f6('0xb')]=function(_0x2f6d5b,_0x264647){var _0x25c416=[];switch(_0x2f6d5b['toLowerCase']()){case _0x65f6('0x3'):switch(_0x264647['toLowerCase']()){case'inbound':_0x25c416=[{'type':_0x65f6('0x0'),'content':'***\x20Call\x20Info\x20***','key':null,'keyType':null,'variableName':null},{'type':_0x65f6('0xc'),'content':'','key':'Caller\x20Number','keyType':_0x65f6('0x5'),'variableName':_0x65f6('0x7')},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0xd'),'keyType':_0x65f6('0x5'),'variableName':_0x65f6('0xe')},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0xf'),'keyType':_0x65f6('0x5'),'variableName':_0x65f6('0x10')},{'type':'keyValue','content':'','key':_0x65f6('0x11'),'keyType':'variable','variableName':'queue'},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0x12'),'keyType':_0x65f6('0x5'),'variableName':_0x65f6('0x13')},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0x14'),'keyType':_0x65f6('0x5'),'variableName':_0x65f6('0x15')},{'type':'string','content':'***\x20Agent\x20Info\x20***','key':null,'keyType':null,'variableName':null},{'type':_0x65f6('0xc'),'content':'','key':'Agent\x20Name','keyType':'variable','variableName':'destcalleridname'},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0x16'),'keyType':'variable','variableName':_0x65f6('0x17')},{'type':_0x65f6('0x0'),'content':_0x65f6('0x18'),'key':null,'keyType':null,'variableName':null},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0x19'),'keyType':_0x65f6('0x5'),'variableName':'agentcalledAt'},{'type':_0x65f6('0xc'),'content':'','key':'Agent\x20Connect','keyType':'variable','variableName':_0x65f6('0x1a')},{'type':_0x65f6('0xc'),'content':'','key':'Agent\x20Complete','keyType':_0x65f6('0x5'),'variableName':_0x65f6('0x1b')},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0x1c'),'keyType':'variable','variableName':_0x65f6('0x1d')},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0x1e'),'keyType':'variable','variableName':'talktime'}];break;case'outbound':_0x25c416=[{'type':_0x65f6('0x0'),'content':_0x65f6('0x1f'),'variableName':null},{'type':'keyValue','content':'','key':_0x65f6('0x20'),'keyType':_0x65f6('0x5'),'keyContent':'','variableName':'destcalleridnum'},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0x21'),'keyType':_0x65f6('0x5'),'keyContent':'','variableName':'membername'},{'type':'keyValue','content':'','key':'UniqueId','keyType':_0x65f6('0x5'),'keyContent':'','variableName':_0x65f6('0x13')},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0x14'),'keyType':_0x65f6('0x5'),'keyContent':'','variableName':_0x65f6('0x22')},{'type':_0x65f6('0x0'),'content':'***\x20Time\x20Info\x20***'},{'type':'keyValue','content':'','key':_0x65f6('0x23'),'keyType':_0x65f6('0x5'),'keyContent':'','variableName':'answertime'},{'type':'keyValue','content':'','key':_0x65f6('0x24'),'keyType':_0x65f6('0x5'),'keyContent':'','variableName':_0x65f6('0x25')},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0x26'),'keyType':_0x65f6('0x5'),'keyContent':'','variableName':'duration'},{'type':_0x65f6('0xc'),'content':'','key':_0x65f6('0x27'),'keyType':_0x65f6('0x5'),'keyContent':'','variableName':'billableseconds'}];break;}}return _0x25c416;};
\ No newline at end of file
+var _0x0b0e=['Hold\x20Time','holdtime','Talk\x20Time','talktime','Called\x20Number','Member\x20Name','UniqueId','Date','answertime','Complete\x20Time','Duration','duration','billableseconds','getSubjects','string','[xCALLY\x20Ticket]','toLowerCase','voice','inbound','push','variable','queue','Outbound\x20Call','destcalleridnum','getDescriptions','***\x20Call\x20Info\x20***','keyValue','Caller\x20Number','calleridnum','Caller\x20Name','calleridname','Call\x20To','destexten','Queue','uniqueid','destcalleridname','Agent\x20Number','***\x20Time\x20Info\x20***','Agent\x20Ring','agentconnectAt','Agent\x20Complete','agentcompleteAt'];(function(_0x5be40e,_0x12997e){var _0x3db6e1=function(_0x3fa7c8){while(--_0x3fa7c8){_0x5be40e['push'](_0x5be40e['shift']());}};_0x3db6e1(++_0x12997e);}(_0x0b0e,0x187));var _0xe0b0=function(_0x151d64,_0x360f73){_0x151d64=_0x151d64-0x0;var _0x409cfd=_0x0b0e[_0x151d64];return _0x409cfd;};'use strict';exports[_0xe0b0('0x0')]=function(_0x503596,_0xc416e3){var _0x536e9b=[{'type':_0xe0b0('0x1'),'content':_0xe0b0('0x2'),'variableName':null}];switch(_0x503596[_0xe0b0('0x3')]()){case _0xe0b0('0x4'):switch(_0xc416e3[_0xe0b0('0x3')]()){case _0xe0b0('0x5'):_0x536e9b[_0xe0b0('0x6')]({'type':_0xe0b0('0x7'),'content':'','variableName':_0xe0b0('0x8')});_0x536e9b[_0xe0b0('0x6')]({'type':_0xe0b0('0x7'),'content':'','variableName':'calleridnum'});break;case'outbound':_0x536e9b[_0xe0b0('0x6')]({'type':_0xe0b0('0x1'),'content':_0xe0b0('0x9'),'variableName':null});_0x536e9b[_0xe0b0('0x6')]({'type':'variable','content':'','variableName':_0xe0b0('0xa')});break;}}return _0x536e9b;};exports[_0xe0b0('0xb')]=function(_0x553d4f,_0x1fef28){var _0x2f32b6=[];switch(_0x553d4f['toLowerCase']()){case _0xe0b0('0x4'):switch(_0x1fef28[_0xe0b0('0x3')]()){case _0xe0b0('0x5'):_0x2f32b6=[{'type':'string','content':_0xe0b0('0xc'),'key':null,'keyType':null,'variableName':null},{'type':_0xe0b0('0xd'),'content':'','key':_0xe0b0('0xe'),'keyType':_0xe0b0('0x7'),'variableName':_0xe0b0('0xf')},{'type':'keyValue','content':'','key':_0xe0b0('0x10'),'keyType':_0xe0b0('0x7'),'variableName':_0xe0b0('0x11')},{'type':_0xe0b0('0xd'),'content':'','key':_0xe0b0('0x12'),'keyType':'variable','variableName':_0xe0b0('0x13')},{'type':'keyValue','content':'','key':_0xe0b0('0x14'),'keyType':_0xe0b0('0x7'),'variableName':'queue'},{'type':_0xe0b0('0xd'),'content':'','key':'UniqueId','keyType':_0xe0b0('0x7'),'variableName':_0xe0b0('0x15')},{'type':'keyValue','content':'','key':'Date','keyType':_0xe0b0('0x7'),'variableName':'agentcalledAt'},{'type':'string','content':'***\x20Agent\x20Info\x20***','key':null,'keyType':null,'variableName':null},{'type':_0xe0b0('0xd'),'content':'','key':'Agent\x20Name','keyType':'variable','variableName':_0xe0b0('0x16')},{'type':'keyValue','content':'','key':_0xe0b0('0x17'),'keyType':'variable','variableName':_0xe0b0('0xa')},{'type':_0xe0b0('0x1'),'content':_0xe0b0('0x18'),'key':null,'keyType':null,'variableName':null},{'type':_0xe0b0('0xd'),'content':'','key':_0xe0b0('0x19'),'keyType':'variable','variableName':'agentcalledAt'},{'type':_0xe0b0('0xd'),'content':'','key':'Agent\x20Connect','keyType':_0xe0b0('0x7'),'variableName':_0xe0b0('0x1a')},{'type':'keyValue','content':'','key':_0xe0b0('0x1b'),'keyType':'variable','variableName':_0xe0b0('0x1c')},{'type':'keyValue','content':'','key':_0xe0b0('0x1d'),'keyType':'variable','variableName':_0xe0b0('0x1e')},{'type':'keyValue','content':'','key':_0xe0b0('0x1f'),'keyType':'variable','variableName':_0xe0b0('0x20')}];break;case'outbound':_0x2f32b6=[{'type':_0xe0b0('0x1'),'content':_0xe0b0('0xc'),'variableName':null},{'type':_0xe0b0('0xd'),'content':'','key':_0xe0b0('0x21'),'keyType':_0xe0b0('0x7'),'keyContent':'','variableName':_0xe0b0('0xa')},{'type':'keyValue','content':'','key':_0xe0b0('0x22'),'keyType':_0xe0b0('0x7'),'keyContent':'','variableName':'membername'},{'type':_0xe0b0('0xd'),'content':'','key':_0xe0b0('0x23'),'keyType':_0xe0b0('0x7'),'keyContent':'','variableName':_0xe0b0('0x15')},{'type':_0xe0b0('0xd'),'content':'','key':_0xe0b0('0x24'),'keyType':_0xe0b0('0x7'),'keyContent':'','variableName':'starttime'},{'type':_0xe0b0('0x1'),'content':_0xe0b0('0x18')},{'type':'keyValue','content':'','key':'Answer\x20Time','keyType':_0xe0b0('0x7'),'keyContent':'','variableName':_0xe0b0('0x25')},{'type':_0xe0b0('0xd'),'content':'','key':_0xe0b0('0x26'),'keyType':_0xe0b0('0x7'),'keyContent':'','variableName':'endtime'},{'type':_0xe0b0('0xd'),'content':'','key':_0xe0b0('0x27'),'keyType':_0xe0b0('0x7'),'keyContent':'','variableName':_0xe0b0('0x28')},{'type':_0xe0b0('0xd'),'content':'','key':'Billable\x20Time','keyType':_0xe0b0('0x7'),'keyContent':'','variableName':_0xe0b0('0x29')}];break;}}return _0x2f32b6;};
\ No newline at end of file
index 74434aa..3cfe7ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5c5e=['../../mysqldb','../../config/logger','openchannel-interactions','mail-interactions','fax-interactions','sms-interactions','chat-interactions','InteractionId','upperFirst','unknown','toLowerCase','[%s]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','null','findOne','then','update','info','catch','error','query','clone','body','phone','fax','mobile','lodash'];(function(_0x4580ca,_0x286ef4){var _0x5cdecd=function(_0xf7d8fb){while(--_0xf7d8fb){_0x4580ca['push'](_0x4580ca['shift']());}};_0x5cdecd(++_0x286ef4);}(_0x5c5e,0x151));var _0xe5c5=function(_0x5381a5,_0x11c5b9){_0x5381a5=_0x5381a5-0x0;var _0x292189=_0x5c5e[_0x5381a5];return _0x292189;};'use strict';var _=require(_0xe5c5('0x0'));var db=require(_0xe5c5('0x1'))['db'];var loggers={'openchannel':require(_0xe5c5('0x2'))(_0xe5c5('0x3')),'mail':require(_0xe5c5('0x2'))(_0xe5c5('0x4')),'fax':require(_0xe5c5('0x2'))(_0xe5c5('0x5')),'sms':require('../../config/logger')(_0xe5c5('0x6')),'chat':require(_0xe5c5('0x2'))(_0xe5c5('0x7'))};function getInteractionId(_0x596e42,_0x48c6df,_0x25c024){if(_0x596e42&&_0x596e42[_['upperFirst'](_0x25c024)+_0xe5c5('0x8')]){return _0x596e42[_[_0xe5c5('0x9')](_0x25c024)+_0xe5c5('0x8')];}else if(_0x596e42&&_0x596e42['id']){return _0x596e42['id'];}else if(_0x48c6df&&_0x48c6df['id']){return _0x48c6df['id'];}else{return _0xe5c5('0xa');}}function log(_0x144162,_0x5af733,_0x385960,_0x731f22,_0x4d598f,_0x3fbfce){loggers[_0x4d598f[_0xe5c5('0xb')]()][_0x144162](_0xe5c5('0xc'),_0x3fbfce['toUpperCase'](),_0x5af733?_0x5af733['id']:null,_0x5af733?_0x5af733['name']:null,_0x5af733?_0x5af733['role']:null,getInteractionId(_0x385960,_0x731f22,_0x4d598f),_0x385960?JSON['stringify'](_0x385960):_0xe5c5('0xd'));}function updateUser(_0x4c9a1b,_0x21b711,_0x36e4f8,_0x1966e5,_0xe76ea4){db[_[_0xe5c5('0x9')](_0x1966e5)+'Interaction'][_0xe5c5('0xe')]({'where':{'id':getInteractionId(_0x21b711,_0x36e4f8,_0x1966e5)}})[_0xe5c5('0xf')](function(_0x3ab9ed){if(_0x3ab9ed){return _0x3ab9ed[_0xe5c5('0x10')]({'UserId':_0x4c9a1b?_0x4c9a1b['id']:null});}})[_0xe5c5('0xf')](function(_0x1e9c4d){if(_0x1e9c4d){log(_0xe5c5('0x11'),_0x4c9a1b,_0x21b711,_0x36e4f8,_0x1966e5,_0xe76ea4);}})[_0xe5c5('0x12')](function(){log(_0xe5c5('0x13'),_0x4c9a1b,_0x21b711,_0x36e4f8,_0x1966e5,_0xe76ea4);});}exports['tracked']=function(_0xf0f7d3,_0x5b4c3a){return function(_0x3015e1,_0x2b5c15,_0x59a5c9){var _0x32191e=_0x3015e1['user'];var _0x27e4ed={};var _0x781595=_0x3015e1[_0xe5c5('0x14')];if(_0x27e4ed){_0x27e4ed=_[_0xe5c5('0x15')](_0x3015e1[_0xe5c5('0x16')]);_0x27e4ed=_['omit'](_0x27e4ed,[_0xe5c5('0x16'),'html',_0xe5c5('0x17'),_0xe5c5('0x18'),_0xe5c5('0x19')]);}updateUser(_0x32191e,_0x27e4ed,_0x781595,_0xf0f7d3,_0x5b4c3a);_0x59a5c9(null);};};
\ No newline at end of file
+var _0xa2fb=['null','Interaction','findOne','update','then','info','tracked','user','query','clone','body','omit','html','fax','mobile','lodash','../../mysqldb','../../config/logger','fax-interactions','sms-interactions','chat-interactions','upperFirst','InteractionId','unknown','toLowerCase','[%s]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','toUpperCase','name','stringify'];(function(_0x1c156e,_0x3263a6){var _0x58fc22=function(_0x42f1eb){while(--_0x42f1eb){_0x1c156e['push'](_0x1c156e['shift']());}};_0x58fc22(++_0x3263a6);}(_0xa2fb,0x188));var _0xba2f=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xa2fb[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0xba2f('0x0'));var db=require(_0xba2f('0x1'))['db'];var loggers={'openchannel':require(_0xba2f('0x2'))('openchannel-interactions'),'mail':require(_0xba2f('0x2'))('mail-interactions'),'fax':require('../../config/logger')(_0xba2f('0x3')),'sms':require(_0xba2f('0x2'))(_0xba2f('0x4')),'chat':require(_0xba2f('0x2'))(_0xba2f('0x5'))};function getInteractionId(_0x3f6ef6,_0x135f48,_0x3eb441){if(_0x3f6ef6&&_0x3f6ef6[_[_0xba2f('0x6')](_0x3eb441)+'InteractionId']){return _0x3f6ef6[_[_0xba2f('0x6')](_0x3eb441)+_0xba2f('0x7')];}else if(_0x3f6ef6&&_0x3f6ef6['id']){return _0x3f6ef6['id'];}else if(_0x135f48&&_0x135f48['id']){return _0x135f48['id'];}else{return _0xba2f('0x8');}}function log(_0x4ffe7a,_0x254833,_0x147fcc,_0x4839a0,_0x3ae949,_0x22b247){loggers[_0x3ae949[_0xba2f('0x9')]()][_0x4ffe7a](_0xba2f('0xa'),_0x22b247[_0xba2f('0xb')](),_0x254833?_0x254833['id']:null,_0x254833?_0x254833[_0xba2f('0xc')]:null,_0x254833?_0x254833['role']:null,getInteractionId(_0x147fcc,_0x4839a0,_0x3ae949),_0x147fcc?JSON[_0xba2f('0xd')](_0x147fcc):_0xba2f('0xe'));}function updateUser(_0x5def03,_0x35b217,_0x5df381,_0x1abd1c,_0x2cb9c7){db[_['upperFirst'](_0x1abd1c)+_0xba2f('0xf')][_0xba2f('0x10')]({'where':{'id':getInteractionId(_0x35b217,_0x5df381,_0x1abd1c)}})['then'](function(_0x4356a1){if(_0x4356a1){return _0x4356a1[_0xba2f('0x11')]({'UserId':_0x5def03?_0x5def03['id']:null});}})[_0xba2f('0x12')](function(_0x213568){if(_0x213568){log(_0xba2f('0x13'),_0x5def03,_0x35b217,_0x5df381,_0x1abd1c,_0x2cb9c7);}})['catch'](function(){log('error',_0x5def03,_0x35b217,_0x5df381,_0x1abd1c,_0x2cb9c7);});}exports[_0xba2f('0x14')]=function(_0x257b74,_0x1faa18){return function(_0x49de45,_0x4e8fa1,_0x3c3b1f){var _0x596a7f=_0x49de45[_0xba2f('0x15')];var _0xc6c45f={};var _0xcf0418=_0x49de45[_0xba2f('0x16')];if(_0xc6c45f){_0xc6c45f=_[_0xba2f('0x17')](_0x49de45[_0xba2f('0x18')]);_0xc6c45f=_[_0xba2f('0x19')](_0xc6c45f,[_0xba2f('0x18'),_0xba2f('0x1a'),'phone',_0xba2f('0x1b'),_0xba2f('0x1c')]);}updateUser(_0x596a7f,_0xc6c45f,_0xcf0418,_0x257b74,_0x1faa18);_0x3c3b1f(null);};};
\ No newline at end of file
index e6a3476..a354a11 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f39=['createDecipher','aes-256-ctr','format','%s:%s:%s','base64','utf8','final','use','findOne','then','count','status','Maximum\x20%s\x20limit\x20have\x20been\x20reached','catch','users','User','user','crypto','util','composable-middleware','../../config/environment','license','split'];(function(_0x24b295,_0xaf7896){var _0x4432bb=function(_0x1b6af5){while(--_0x1b6af5){_0x24b295['push'](_0x24b295['shift']());}};_0x4432bb(++_0xaf7896);}(_0x9f39,0x181));var _0x99f3=function(_0x2dd944,_0x34dc88){_0x2dd944=_0x2dd944-0x0;var _0x8af9b6=_0x9f39[_0x2dd944];return _0x8af9b6;};'use strict';var crypto=require(_0x99f3('0x0'));var util=require(_0x99f3('0x1'));var compose=require(_0x99f3('0x2'));var db=require('../../mysqldb')['db'];var config=require(_0x99f3('0x3'));function getValueFromLicense(_0x141324,_0x2b2b96){if(_0x141324&&_0x2b2b96){if(_0x2b2b96['data1']&&_0x2b2b96['license']){var _0x3be2db=_0x2b2b96['data1'];var _0x1d3f54=_0x2b2b96[_0x99f3('0x4')];var _0x6f2888=_0x3be2db[_0x99f3('0x5')]('-')[0x4];var _0x143a47=_0x3be2db[_0x99f3('0x5')]('-')[0x0];var _0x3244d0=crypto[_0x99f3('0x6')](_0x99f3('0x7'),util[_0x99f3('0x8')](_0x99f3('0x9'),_0x6f2888,_0x3be2db,_0x143a47));var _0x486c3c=_0x3244d0['update'](_0x1d3f54,_0x99f3('0xa'),_0x99f3('0xb'));_0x486c3c+=_0x3244d0[_0x99f3('0xc')](_0x99f3('0xb'));var _0x27a6ee=JSON['parse'](_0x486c3c);return _0x27a6ee['hasOwnProperty'](_0x141324)?_0x27a6ee[_0x141324]:null;}}return null;}function isLimit(_0x2c8b27,_0x370ade,_0x559577,_0x4dcd9e){var _0x2d60d6=_0x370ade;return compose()[_0x99f3('0xd')](function(_0x5df077,_0x4518b4,_0x4034b0){return db['License'][_0x99f3('0xe')]({'where':{'id':0x1},'raw':!![]})['then'](function(_0x1fc7af){var _0x2f039f=getValueFromLicense(_0x2c8b27,_0x1fc7af);return _0x2f039f?_0x2f039f:_0x2d60d6;})[_0x99f3('0xf')](function(_0x5da0f9){_0x2d60d6=_0x5da0f9;return _0x559577[_0x99f3('0x10')](_0x4dcd9e);})[_0x99f3('0xf')](function(_0x46d043){if(_0x46d043>=_0x2d60d6){return _0x4518b4[_0x99f3('0x11')](0x193)['json']({'message':util[_0x99f3('0x8')](_0x99f3('0x12'),_0x2c8b27)});}_0x4034b0();})[_0x99f3('0x13')](function(_0x1abb2f){_0x4034b0(_0x1abb2f);});});}function isUserLimit(){return isLimit(_0x99f3('0x14'),0x1,db[_0x99f3('0x15')],{'where':{'$or':[{'role':'admin'},{'role':_0x99f3('0x16')}]}});}exports['isUserLimit']=isUserLimit;
\ No newline at end of file
+var _0xe7d6=['split','aes-256-ctr','format','%s:%s:%s','base64','utf8','final','hasOwnProperty','use','findOne','then','status','json','Maximum\x20%s\x20limit\x20have\x20been\x20reached','catch','users','admin','user','crypto','composable-middleware','../../mysqldb','../../config/environment','license'];(function(_0x2546c8,_0x1b5b3b){var _0x181c83=function(_0x2e174e){while(--_0x2e174e){_0x2546c8['push'](_0x2546c8['shift']());}};_0x181c83(++_0x1b5b3b);}(_0xe7d6,0x85));var _0x6e7d=function(_0x462bff,_0x151a16){_0x462bff=_0x462bff-0x0;var _0x27229a=_0xe7d6[_0x462bff];return _0x27229a;};'use strict';var crypto=require(_0x6e7d('0x0'));var util=require('util');var compose=require(_0x6e7d('0x1'));var db=require(_0x6e7d('0x2'))['db'];var config=require(_0x6e7d('0x3'));function getValueFromLicense(_0x5ec949,_0x5eea9b){if(_0x5ec949&&_0x5eea9b){if(_0x5eea9b['data1']&&_0x5eea9b[_0x6e7d('0x4')]){var _0x23b386=_0x5eea9b['data1'];var _0xfdf889=_0x5eea9b[_0x6e7d('0x4')];var _0x41b1db=_0x23b386[_0x6e7d('0x5')]('-')[0x4];var _0x5af9e5=_0x23b386[_0x6e7d('0x5')]('-')[0x0];var _0x3bdbc7=crypto['createDecipher'](_0x6e7d('0x6'),util[_0x6e7d('0x7')](_0x6e7d('0x8'),_0x41b1db,_0x23b386,_0x5af9e5));var _0x351312=_0x3bdbc7['update'](_0xfdf889,_0x6e7d('0x9'),_0x6e7d('0xa'));_0x351312+=_0x3bdbc7[_0x6e7d('0xb')](_0x6e7d('0xa'));var _0x1bb91f=JSON['parse'](_0x351312);return _0x1bb91f[_0x6e7d('0xc')](_0x5ec949)?_0x1bb91f[_0x5ec949]:null;}}return null;}function isLimit(_0xf930b,_0x1aa98a,_0xf25686,_0x5e6cac){var _0x27ae9e=_0x1aa98a;return compose()[_0x6e7d('0xd')](function(_0x44c514,_0x34a6ce,_0x1f0588){return db['License'][_0x6e7d('0xe')]({'where':{'id':0x1},'raw':!![]})[_0x6e7d('0xf')](function(_0x1aa00f){var _0x42fd07=getValueFromLicense(_0xf930b,_0x1aa00f);return _0x42fd07?_0x42fd07:_0x27ae9e;})[_0x6e7d('0xf')](function(_0x26e45a){_0x27ae9e=_0x26e45a;return _0xf25686['count'](_0x5e6cac);})[_0x6e7d('0xf')](function(_0x587819){if(_0x587819>=_0x27ae9e){return _0x34a6ce[_0x6e7d('0x10')](0x193)[_0x6e7d('0x11')]({'message':util['format'](_0x6e7d('0x12'),_0xf930b)});}_0x1f0588();})[_0x6e7d('0x13')](function(_0x9c111c){_0x1f0588(_0x9c111c);});});}function isUserLimit(){return isLimit(_0x6e7d('0x14'),0x1,db['User'],{'where':{'$or':[{'role':_0x6e7d('0x15')},{'role':_0x6e7d('0x16')}]}});}exports['isUserLimit']=isUserLimit;
\ No newline at end of file
index b0ffc20..6d4f0f6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x595b=['sort','map','indexOf','priority','cast','unsigned','substr','DESC','col','ASC','omit','isObject','isString','length','unset','isNumeric','match','^[0-9]*$','isEmail','lodash','sequelize','fields','filters','isEmpty','forOwn','isArray','split','limit'];(function(_0x2bbe1b,_0x28142f){var _0x55723e=function(_0x26dfb1){while(--_0x26dfb1){_0x2bbe1b['push'](_0x2bbe1b['shift']());}};_0x55723e(++_0x28142f);}(_0x595b,0x10f));var _0xb595=function(_0x39a520,_0x7dbef1){_0x39a520=_0x39a520-0x0;var _0x4504af=_0x595b[_0x39a520];return _0x4504af;};'use strict';var _=require(_0xb595('0x0'));var moment=require('moment');var sequelize=require(_0xb595('0x1'));var LIMIT_VALUE=0xfa;exports[_0xb595('0x2')]=function(_0xa3a659){var _0x2e5ef5=null;if(_0xa3a659){_0x2e5ef5=_0xa3a659['split'](',');}return _0x2e5ef5;};exports[_0xb595('0x3')]=function(_0x8f296){var _0x14bc76={};if(!_[_0xb595('0x4')](_0x8f296)){_0x14bc76={};_[_0xb595('0x5')](_0x8f296,function(_0x1eb96d,_0x221886){try{_0x14bc76[_0x221886]=_[_0xb595('0x6')](_0x1eb96d)?_0x1eb96d:JSON['parse'](_0x1eb96d);}catch(_0x130ce4){_0x14bc76[_0x221886]=_0x1eb96d[_0xb595('0x7')](',');}});}return _0x14bc76;};exports[_0xb595('0x8')]=function(_0x25128c){_0x25128c=parseInt(_0x25128c,0xa);if(!_0x25128c||_0x25128c<0x0){_0x25128c=LIMIT_VALUE;}return _0x25128c;};exports['offset']=function(_0x20be59){_0x20be59=parseInt(_0x20be59,0xa);if(!_0x20be59||_0x20be59<0x0){_0x20be59=0x0;}return _0x20be59;};exports[_0xb595('0x9')]=function(_0x61266c){var _0x474704,_0x39fad4=null;if(_0x61266c){_0x474704=_0x61266c[_0xb595('0x7')](',');_0x39fad4=_[_0xb595('0xa')](_0x474704,function(_0x412220){if(_0x412220[_0xb595('0xb')]('-')===0x0){return[_0x412220===_0xb595('0xc')?sequelize[_0xb595('0xd')](sequelize['col']('priority'),_0xb595('0xe')):_0x412220[_0xb595('0xf')](0x1),_0xb595('0x10')];}else{return[_0x412220===_0xb595('0xc')?sequelize[_0xb595('0xd')](sequelize[_0xb595('0x11')]('priority'),_0xb595('0xe')):_0x412220,_0xb595('0x12')];}});}return _0x39fad4;};exports[_0xb595('0x13')]=function(_0x19de0a,_0x369036){if(_[_0xb595('0x4')](_0x19de0a)){return _0x19de0a;}if(_[_0xb595('0x6')](_0x19de0a)){for(var _0x587189=0x0;_0x587189<_0x19de0a['length'];_0x587189+=0x1){_0x19de0a[_0x587189]=this[_0xb595('0x13')](_0x19de0a[_0x587189],_0x369036);}return _0x19de0a;}if(!_[_0xb595('0x14')](_0x19de0a)){return _0x19de0a;}if(_[_0xb595('0x15')](_0x369036)){_0x369036=[_0x369036];}if(!_[_0xb595('0x6')](_0x369036)){return _0x19de0a;}for(var _0x114b4e=0x0;_0x114b4e<_0x369036[_0xb595('0x16')];_0x114b4e+=0x1){_[_0xb595('0x17')](_0x19de0a,_0x369036[_0x114b4e]);}for(var _0x1199b1 in _0x19de0a){if(_0x19de0a['hasOwnProperty'](_0x1199b1)){_0x19de0a[_0x1199b1]=this[_0xb595('0x13')](_0x19de0a[_0x1199b1],_0x369036);}}return _0x19de0a;};exports[_0xb595('0x18')]=function(_0x31433a){return _0x31433a[_0xb595('0x19')](RegExp(_0xb595('0x1a')))?!![]:![];};exports[_0xb595('0x1b')]=function(_0x5643d8){return _0x5643d8[_0xb595('0x19')](/^\S+@\S+$/)?!![]:![];};
\ No newline at end of file
+var _0xd3f3=['isObject','unset','hasOwnProperty','isNumeric','match','^[0-9]*$','lodash','sequelize','fields','split','filters','isEmpty','forOwn','isArray','parse','sort','map','indexOf','col','priority','unsigned','substr','DESC','cast','ASC','omit','length'];(function(_0x317d6f,_0x18463f){var _0x4a5911=function(_0x1ca81a){while(--_0x1ca81a){_0x317d6f['push'](_0x317d6f['shift']());}};_0x4a5911(++_0x18463f);}(_0xd3f3,0x72));var _0x3d3f=function(_0x1e3782,_0x3ace9c){_0x1e3782=_0x1e3782-0x0;var _0x110db9=_0xd3f3[_0x1e3782];return _0x110db9;};'use strict';var _=require(_0x3d3f('0x0'));var moment=require('moment');var sequelize=require(_0x3d3f('0x1'));var LIMIT_VALUE=0xfa;exports[_0x3d3f('0x2')]=function(_0x5717be){var _0x34483d=null;if(_0x5717be){_0x34483d=_0x5717be[_0x3d3f('0x3')](',');}return _0x34483d;};exports[_0x3d3f('0x4')]=function(_0x56f66e){var _0x3217f3={};if(!_[_0x3d3f('0x5')](_0x56f66e)){_0x3217f3={};_[_0x3d3f('0x6')](_0x56f66e,function(_0x3ffea6,_0x1c67ef){try{_0x3217f3[_0x1c67ef]=_[_0x3d3f('0x7')](_0x3ffea6)?_0x3ffea6:JSON[_0x3d3f('0x8')](_0x3ffea6);}catch(_0x221d2f){_0x3217f3[_0x1c67ef]=_0x3ffea6['split'](',');}});}return _0x3217f3;};exports['limit']=function(_0x52e5fe){_0x52e5fe=parseInt(_0x52e5fe,0xa);if(!_0x52e5fe||_0x52e5fe<0x0){_0x52e5fe=LIMIT_VALUE;}return _0x52e5fe;};exports['offset']=function(_0x212ecf){_0x212ecf=parseInt(_0x212ecf,0xa);if(!_0x212ecf||_0x212ecf<0x0){_0x212ecf=0x0;}return _0x212ecf;};exports[_0x3d3f('0x9')]=function(_0x57a2d6){var _0x18cec4,_0x245741=null;if(_0x57a2d6){_0x18cec4=_0x57a2d6[_0x3d3f('0x3')](',');_0x245741=_[_0x3d3f('0xa')](_0x18cec4,function(_0x28a412){if(_0x28a412[_0x3d3f('0xb')]('-')===0x0){return[_0x28a412==='priority'?sequelize['cast'](sequelize[_0x3d3f('0xc')](_0x3d3f('0xd')),_0x3d3f('0xe')):_0x28a412[_0x3d3f('0xf')](0x1),_0x3d3f('0x10')];}else{return[_0x28a412===_0x3d3f('0xd')?sequelize[_0x3d3f('0x11')](sequelize[_0x3d3f('0xc')](_0x3d3f('0xd')),_0x3d3f('0xe')):_0x28a412,_0x3d3f('0x12')];}});}return _0x245741;};exports[_0x3d3f('0x13')]=function(_0x3fc89d,_0x22922e){if(_[_0x3d3f('0x5')](_0x3fc89d)){return _0x3fc89d;}if(_[_0x3d3f('0x7')](_0x3fc89d)){for(var _0x1a6c48=0x0;_0x1a6c48<_0x3fc89d[_0x3d3f('0x14')];_0x1a6c48+=0x1){_0x3fc89d[_0x1a6c48]=this[_0x3d3f('0x13')](_0x3fc89d[_0x1a6c48],_0x22922e);}return _0x3fc89d;}if(!_[_0x3d3f('0x15')](_0x3fc89d)){return _0x3fc89d;}if(_['isString'](_0x22922e)){_0x22922e=[_0x22922e];}if(!_[_0x3d3f('0x7')](_0x22922e)){return _0x3fc89d;}for(var _0x23d42d=0x0;_0x23d42d<_0x22922e['length'];_0x23d42d+=0x1){_[_0x3d3f('0x16')](_0x3fc89d,_0x22922e[_0x23d42d]);}for(var _0x4e841c in _0x3fc89d){if(_0x3fc89d[_0x3d3f('0x17')](_0x4e841c)){_0x3fc89d[_0x4e841c]=this['omit'](_0x3fc89d[_0x4e841c],_0x22922e);}}return _0x3fc89d;};exports[_0x3d3f('0x18')]=function(_0x581227){return _0x581227[_0x3d3f('0x19')](RegExp(_0x3d3f('0x1a')))?!![]:![];};exports['isEmail']=function(_0x177142){return _0x177142['match'](/^\S+@\S+$/)?!![]:![];};
\ No newline at end of file
index 6118058..39ab01f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['50mb','express','serve-favicon','body-parser','errorhandler','passport','cors','moment','./environment','../mysqldb','get','use','public','favicon.ico','set','appPath','join','root','client','json\x20replacer','toISOString','views','/server/views','engine','html','ejs','renderFile','view\x20engine','urlencoded'];(function(_0x33feca,_0x2bd9ae){var _0x3c558f=function(_0x11bede){while(--_0x11bede){_0x33feca['push'](_0x33feca['shift']());}};_0x3c558f(++_0x2bd9ae);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2b4411,_0x2625ed){_0x2b4411=_0x2b4411-0x0;var _0x8e41ef=_0xa9e0[_0x2b4411];return _0x8e41ef;};'use strict';var express=require(_0x0a9e('0x0'));var favicon=require(_0x0a9e('0x1'));var bodyParser=require(_0x0a9e('0x2'));var methodOverride=require('method-override');var cookieParser=require('cookie-parser');var errorHandler=require(_0x0a9e('0x3'));var path=require('path');var passport=require(_0x0a9e('0x4'));var cors=require(_0x0a9e('0x5'));var moment=require(_0x0a9e('0x6'));var config=require(_0x0a9e('0x7'));var db=require(_0x0a9e('0x8'))['db'];exports['default']=function(_0x219af0){var _0x441e3a=_0x219af0[_0x0a9e('0x9')]('env');if(_0x441e3a==='production'){_0x219af0[_0x0a9e('0xa')](favicon(path['join'](config['root'],_0x0a9e('0xb'),_0x0a9e('0xc'))));_0x219af0[_0x0a9e('0xd')](_0x0a9e('0xe'),path[_0x0a9e('0xf')](config[_0x0a9e('0x10')],'public'));}if(_0x441e3a==='development'||_0x441e3a==='test'){_0x219af0['use'](favicon(path[_0x0a9e('0xf')](config[_0x0a9e('0x10')],_0x0a9e('0x11'),_0x0a9e('0xc'))));_0x219af0[_0x0a9e('0xd')](_0x0a9e('0xe'),path['join'](config[_0x0a9e('0x10')],_0x0a9e('0x11')));_0x219af0[_0x0a9e('0xa')](errorHandler());}_0x219af0[_0x0a9e('0xd')](_0x0a9e('0x12'),function(_0x4d5611,_0x52a03d){if(this[_0x4d5611]instanceof Date){_0x52a03d=this[_0x4d5611][_0x0a9e('0x13')]()['split']('.')[0x0]+'Z';}return _0x52a03d;});_0x219af0[_0x0a9e('0xa')](express['static'](_0x219af0[_0x0a9e('0x9')](_0x0a9e('0xe'))));_0x219af0['set'](_0x0a9e('0x14'),config['root']+_0x0a9e('0x15'));_0x219af0[_0x0a9e('0x16')](_0x0a9e('0x17'),require(_0x0a9e('0x18'))[_0x0a9e('0x19')]);_0x219af0[_0x0a9e('0xd')](_0x0a9e('0x1a'),_0x0a9e('0x17'));_0x219af0[_0x0a9e('0xa')](bodyParser[_0x0a9e('0x1b')]({'limit':_0x0a9e('0x1c'),'extended':!![]}));_0x219af0[_0x0a9e('0xa')](bodyParser['json']({'limit':_0x0a9e('0x1c')}));_0x219af0[_0x0a9e('0xa')](cors());_0x219af0['use'](methodOverride());_0x219af0[_0x0a9e('0xa')](cookieParser());_0x219af0['use'](passport['initialize']());};
\ No newline at end of file
+var _0x9c44=['appPath','development','favicon.ico','set','client','json\x20replacer','split','static','views','html','ejs','renderFile','view\x20engine','urlencoded','50mb','json','body-parser','method-override','cookie-parser','errorhandler','path','passport','./environment','default','get','env','use','join','root','public'];(function(_0x58c50e,_0x573495){var _0x4a8199=function(_0x2f237c){while(--_0x2f237c){_0x58c50e['push'](_0x58c50e['shift']());}};_0x4a8199(++_0x573495);}(_0x9c44,0x178));var _0x49c4=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0x9c44[_0x4b369d];return _0x571a98;};'use strict';var express=require('express');var favicon=require('serve-favicon');var bodyParser=require(_0x49c4('0x0'));var methodOverride=require(_0x49c4('0x1'));var cookieParser=require(_0x49c4('0x2'));var errorHandler=require(_0x49c4('0x3'));var path=require(_0x49c4('0x4'));var passport=require(_0x49c4('0x5'));var cors=require('cors');var moment=require('moment');var config=require(_0x49c4('0x6'));var db=require('../mysqldb')['db'];exports[_0x49c4('0x7')]=function(_0x6030ae){var _0x69bc41=_0x6030ae[_0x49c4('0x8')](_0x49c4('0x9'));if(_0x69bc41==='production'){_0x6030ae[_0x49c4('0xa')](favicon(path[_0x49c4('0xb')](config[_0x49c4('0xc')],_0x49c4('0xd'),'favicon.ico')));_0x6030ae['set'](_0x49c4('0xe'),path[_0x49c4('0xb')](config['root'],_0x49c4('0xd')));}if(_0x69bc41===_0x49c4('0xf')||_0x69bc41==='test'){_0x6030ae['use'](favicon(path[_0x49c4('0xb')](config[_0x49c4('0xc')],'client',_0x49c4('0x10'))));_0x6030ae[_0x49c4('0x11')]('appPath',path[_0x49c4('0xb')](config[_0x49c4('0xc')],_0x49c4('0x12')));_0x6030ae[_0x49c4('0xa')](errorHandler());}_0x6030ae[_0x49c4('0x11')](_0x49c4('0x13'),function(_0x75ea8,_0x3de397){if(this[_0x75ea8]instanceof Date){_0x3de397=this[_0x75ea8]['toISOString']()[_0x49c4('0x14')]('.')[0x0]+'Z';}return _0x3de397;});_0x6030ae[_0x49c4('0xa')](express[_0x49c4('0x15')](_0x6030ae[_0x49c4('0x8')](_0x49c4('0xe'))));_0x6030ae['set'](_0x49c4('0x16'),config[_0x49c4('0xc')]+'/server/views');_0x6030ae['engine'](_0x49c4('0x17'),require(_0x49c4('0x18'))[_0x49c4('0x19')]);_0x6030ae['set'](_0x49c4('0x1a'),'html');_0x6030ae[_0x49c4('0xa')](bodyParser[_0x49c4('0x1b')]({'limit':_0x49c4('0x1c'),'extended':!![]}));_0x6030ae[_0x49c4('0xa')](bodyParser[_0x49c4('0x1d')]({'limit':_0x49c4('0x1c')}));_0x6030ae[_0x49c4('0xa')](cors());_0x6030ae[_0x49c4('0xa')](methodOverride());_0x6030ae[_0x49c4('0xa')](cookieParser());_0x6030ae['use'](passport['initialize']());};
\ No newline at end of file
index 321cf37..c212a7b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf9c5=['crypto','bimedia-machine-uuid','child_process','networkInterfaces','filter','IPv4','concat','head','mac','00:00:00:00:00:00','address','127.0.0.1','getFirstInterface','orderBy','cpus','model','join','update','digest','hex','platform','win32','dmidecode\x20--string\x20system-uuid','replace','hostname','macAddress','ipAddress','createHash','md5','substring','lodash'];(function(_0x5cb97e,_0x132a39){var _0x1714b4=function(_0x384210){while(--_0x384210){_0x5cb97e['push'](_0x5cb97e['shift']());}};_0x1714b4(++_0x132a39);}(_0xf9c5,0xf7));var _0x5f9c=function(_0x29d915,_0x54a040){_0x29d915=_0x29d915-0x0;var _0x160f86=_0xf9c5[_0x29d915];return _0x160f86;};'use strict';var _=require(_0x5f9c('0x0'));var os=require('os');var crypto=require(_0x5f9c('0x1'));var machine=require(_0x5f9c('0x2'));var exec=require(_0x5f9c('0x3'))['execSync'];function getInterfaces(){var _0x545ae8=[];var _0x7f89d9=os[_0x5f9c('0x4')]();var _0x2d7005=_['orderBy'](_['keys'](_0x7f89d9));for(var _0x372ea9=0x0;_0x372ea9<_0x2d7005['length'];_0x372ea9++){var _0x2f1af5=_0x7f89d9[_0x2d7005[_0x372ea9]][_0x5f9c('0x5')](function(_0x43f795){return _0x43f795['family']===_0x5f9c('0x6')&&_0x43f795['internal']===![];});_0x545ae8=_0x545ae8[_0x5f9c('0x7')](_0x2f1af5);}return _0x545ae8;}function getFirstInterface(){var _0x3f47ce=_[_0x5f9c('0x8')](getInterfaces());return{'macAddress':_0x3f47ce&&_0x3f47ce['mac']?_0x3f47ce[_0x5f9c('0x9')]:_0x5f9c('0xa'),'ipAddress':_0x3f47ce&&_0x3f47ce[_0x5f9c('0xb')]?_0x3f47ce[_0x5f9c('0xb')]:_0x5f9c('0xc')};}exports[_0x5f9c('0xd')]=getFirstInterface;function getCPUhash(){var _0x3a5409=_[_0x5f9c('0xe')](os[_0x5f9c('0xf')]()['map'](function(_0x7db269){return _0x7db269[_0x5f9c('0x10')];}))[_0x5f9c('0x11')](':');return crypto['createHash']('md5')[_0x5f9c('0x12')](_0x3a5409)[_0x5f9c('0x13')](_0x5f9c('0x14'));}exports['getUuid']=function(){switch(os[_0x5f9c('0x15')]()){case _0x5f9c('0x16'):return exec(_0x5f9c('0x17'),{'encoding':'utf8'})[_0x5f9c('0x18')]('\x0d\x0a','');default:var _0x4880e3=getFirstInterface();var _0xf57371=getCPUhash();var _0x63ff0f=_0xf57371+'|'+os[_0x5f9c('0x19')]()+'|'+_0x4880e3[_0x5f9c('0x1a')]+'|'+_0x4880e3[_0x5f9c('0x1b')];var _0x29867f=crypto[_0x5f9c('0x1c')](_0x5f9c('0x1d'))[_0x5f9c('0x12')](_0x63ff0f)[_0x5f9c('0x13')](_0x5f9c('0x14'));return _0x29867f['substring'](0x0,0x8)+'-'+_0x29867f[_0x5f9c('0x1e')](0x8,0xc)+'-'+_0x29867f[_0x5f9c('0x1e')](0xc,0x10)+'-'+_0x29867f['substring'](0x10,0x14)+'-'+_0x29867f[_0x5f9c('0x1e')](0x14);}};
\ No newline at end of file
+var _0x5e0c=['md5','update','getUuid','dmidecode\x20--string\x20system-uuid','utf8','replace','hostname','macAddress','ipAddress','createHash','digest','substring','crypto','bimedia-machine-uuid','child_process','execSync','orderBy','keys','length','IPv4','internal','concat','mac','00:00:00:00:00:00','address','127.0.0.1','getFirstInterface','cpus','map','model','join'];(function(_0x4c2366,_0x4c803c){var _0x26bea7=function(_0x125464){while(--_0x125464){_0x4c2366['push'](_0x4c2366['shift']());}};_0x26bea7(++_0x4c803c);}(_0x5e0c,0x19f));var _0xc5e0=function(_0x410c09,_0xe6e6ac){_0x410c09=_0x410c09-0x0;var _0x4d232d=_0x5e0c[_0x410c09];return _0x4d232d;};'use strict';var _=require('lodash');var os=require('os');var crypto=require(_0xc5e0('0x0'));var machine=require(_0xc5e0('0x1'));var exec=require(_0xc5e0('0x2'))[_0xc5e0('0x3')];function getInterfaces(){var _0x2491bc=[];var _0x1400f3=os['networkInterfaces']();var _0x60c6c3=_[_0xc5e0('0x4')](_[_0xc5e0('0x5')](_0x1400f3));for(var _0x2427ef=0x0;_0x2427ef<_0x60c6c3[_0xc5e0('0x6')];_0x2427ef++){var _0x5ae492=_0x1400f3[_0x60c6c3[_0x2427ef]]['filter'](function(_0x12b5cb){return _0x12b5cb['family']===_0xc5e0('0x7')&&_0x12b5cb[_0xc5e0('0x8')]===![];});_0x2491bc=_0x2491bc[_0xc5e0('0x9')](_0x5ae492);}return _0x2491bc;}function getFirstInterface(){var _0xc7c777=_['head'](getInterfaces());return{'macAddress':_0xc7c777&&_0xc7c777[_0xc5e0('0xa')]?_0xc7c777['mac']:_0xc5e0('0xb'),'ipAddress':_0xc7c777&&_0xc7c777[_0xc5e0('0xc')]?_0xc7c777[_0xc5e0('0xc')]:_0xc5e0('0xd')};}exports[_0xc5e0('0xe')]=getFirstInterface;function getCPUhash(){var _0x44980b=_['orderBy'](os[_0xc5e0('0xf')]()[_0xc5e0('0x10')](function(_0x3de61c){return _0x3de61c[_0xc5e0('0x11')];}))[_0xc5e0('0x12')](':');return crypto['createHash'](_0xc5e0('0x13'))[_0xc5e0('0x14')](_0x44980b)['digest']('hex');}exports[_0xc5e0('0x15')]=function(){switch(os['platform']()){case'win32':return exec(_0xc5e0('0x16'),{'encoding':_0xc5e0('0x17')})[_0xc5e0('0x18')]('\x0d\x0a','');default:var _0x24700e=getFirstInterface();var _0xa9545c=getCPUhash();var _0x247138=_0xa9545c+'|'+os[_0xc5e0('0x19')]()+'|'+_0x24700e[_0xc5e0('0x1a')]+'|'+_0x24700e[_0xc5e0('0x1b')];var _0x1baf22=crypto[_0xc5e0('0x1c')](_0xc5e0('0x13'))[_0xc5e0('0x14')](_0x247138)[_0xc5e0('0x1d')]('hex');return _0x1baf22['substring'](0x0,0x8)+'-'+_0x1baf22[_0xc5e0('0x1e')](0x8,0xc)+'-'+_0x1baf22[_0xc5e0('0x1e')](0xc,0x10)+'-'+_0x1baf22[_0xc5e0('0x1e')](0x10,0x14)+'-'+_0x1baf22[_0xc5e0('0x1e')](0x14);}};
\ No newline at end of file
index 28184d0..6d5f86e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd633=['||FIELD||VALUE||\x0a','User','findOne','admin','email','|reason|','|uuid|','|machineUuid|','|name|','fullname','|email|','openIssue','MOTLICENSE','Motion\x20License\x20Alert','Alert','get','active','THE\x20LICENSE\x20HAS\x20BEEN\x20ENABLED','data2','info','Disabled','Changed','data1','NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s','%s\x20-\x20GRAY\x20PERIOD\x20STARTED\x20AT\x20%s','toUpperCase','YYYY-MM-DD\x20HH:mm','diff','days','DEMO\x20START\x20AT\x20%s','error','finally','getUuid','License','findOrCreate','spread','SERVICE\x20LICENSE\x20STARTED\x20%s','default','util','crypto','moment','request-promise','bluebird','pkginfo','version','../../mysqldb','./hardware','../logger','license','../../api/jira/jira.controller','https://www.xcallymotion.com','format','%s/api/servers/%s/check?version=%s','exports','then','catch','aes-256-ctr','secrets','session','update','utf8','base64','final','createDecipher'];(function(_0xa28331,_0x56764b){var _0x2bb8a4=function(_0x220ce9){while(--_0x220ce9){_0xa28331['push'](_0xa28331['shift']());}};_0x2bb8a4(++_0x56764b);}(_0xd633,0x66));var _0x3d63=function(_0x382b03,_0x3696a6){_0x382b03=_0x382b03-0x0;var _0x204031=_0xd633[_0x382b03];return _0x204031;};'use strict';var util=require(_0x3d63('0x0'));var crypto=require(_0x3d63('0x1'));var moment=require(_0x3d63('0x2'));var rp=require(_0x3d63('0x3'));var BPromise=require(_0x3d63('0x4'));var pkginfo=require(_0x3d63('0x5'))(module,_0x3d63('0x6'));var db=require(_0x3d63('0x7'))['db'];var config=require('../environment');var hardware=require(_0x3d63('0x8'));var logger=require(_0x3d63('0x9'))(_0x3d63('0xa'));var jira=require(_0x3d63('0xb'));var HOST=_0x3d63('0xc');var TIME=0x3c*0x1388;var DAYS=0x7;var GRAY_PERIOD_REASON;var ADMIN;var oldToken;function httpRequest(_0x149a9b){return new BPromise(function(_0x208175,_0x1921f2){var _0x423f5d=util[_0x3d63('0xd')](_0x3d63('0xe'),HOST,_0x149a9b,module['exports']['version']);if(oldToken){_0x423f5d=util[_0x3d63('0xd')]('%s/api/servers/%s/check?version=%s&oldtoken=%s',HOST,_0x149a9b,module[_0x3d63('0xf')][_0x3d63('0x6')],oldToken);}var _0x4b8a14={'uri':_0x423f5d,'method':'GET','timeout':0xea60,'json':!![]};return rp(_0x4b8a14)[_0x3d63('0x10')](function(_0x554dc0){_0x208175(_0x554dc0);})[_0x3d63('0x11')](function(_0x4c22a9){_0x1921f2(_0x4c22a9);});});}function encryptDate(_0x931df8){var _0x5d76d9=crypto['createCipher'](_0x3d63('0x12'),config[_0x3d63('0x13')][_0x3d63('0x14')]);var _0x27038f=_0x5d76d9[_0x3d63('0x15')](_0x931df8,_0x3d63('0x16'),_0x3d63('0x17'));_0x27038f+=_0x5d76d9[_0x3d63('0x18')](_0x3d63('0x17'));return _0x27038f;}function decryptDate(_0x3396d4){var _0x3dd5e6=crypto[_0x3d63('0x19')](_0x3d63('0x12'),config[_0x3d63('0x13')]['session']);var _0x5675e6=_0x3dd5e6[_0x3d63('0x15')](_0x3396d4,_0x3d63('0x17'),_0x3d63('0x16'));_0x5675e6+=_0x3dd5e6['final'](_0x3d63('0x16'));return _0x5675e6;}function sendJiraAlert(_0x26364,_0x44de11,_0x3a2a22){var _0x3b69a1=_0x3d63('0x1a');return db[_0x3d63('0x1b')][_0x3d63('0x1c')]({'where':{'role':_0x3d63('0x1d')},'attributes':['fullname',_0x3d63('0x1e')],'raw':!![]})[_0x3d63('0x10')](function(_0x1ae029){ADMIN=_0x1ae029;_0x3b69a1+=_0x3d63('0x1f')+_0x3a2a22+'|\x0a';_0x3b69a1+=_0x3d63('0x20')+_0x26364+'|\x0a';_0x3b69a1+=_0x3d63('0x21')+_0x44de11+'|\x0a';_0x3b69a1+=_0x3d63('0x22')+ADMIN[_0x3d63('0x23')]+'|\x0a';_0x3b69a1+=_0x3d63('0x24')+ADMIN[_0x3d63('0x1e')]+'|\x0a';return _0x3b69a1;})[_0x3d63('0x10')](function(_0x1f7027){var _0x337d04=hardware['getFirstInterface']()['ipAddress'];return jira[_0x3d63('0x25')]({'key':_0x3d63('0x26'),'summary':_0x3d63('0x27'),'description':_0x1f7027,'issuetype':_0x3d63('0x28'),'oldToken':_0x26364,'newToken':_0x44de11,'email':ADMIN[_0x3d63('0x1e')],'name':ADMIN[_0x3d63('0x23')],'reason':GRAY_PERIOD_REASON,'ip':_0x337d04});});}function manageLicense(_0x415701,_0x223af4){var _0x26f51d=_0x223af4[_0x3d63('0x29')]({'plain':!![]});httpRequest(_0x415701)[_0x3d63('0x10')](function(_0x1ebe80){if(oldToken){oldToken=undefined;}if(_0x1ebe80[_0x3d63('0x2a')]){if(!_0x26f51d['license']&&_0x26f51d[_0x3d63('0xa')]!=_0x1ebe80[_0x3d63('0xa')]||_0x26f51d[_0x3d63('0xa')]&&_0x26f51d['data2']){logger['info'](_0x3d63('0x2b'));}if(_0x26f51d[_0x3d63('0xa')]&&!_0x26f51d[_0x3d63('0x2c')]&&_0x26f51d['license']!=_0x1ebe80['license']){logger[_0x3d63('0x2d')]('THE\x20LICENSE\x20HAS\x20BEEN\x20UPDATED');}if(_0x26f51d['license']&&!_0x26f51d[_0x3d63('0x2c')]&&_0x26f51d[_0x3d63('0xa')]==_0x1ebe80[_0x3d63('0xa')]){return _0x223af4;}return _0x223af4[_0x3d63('0x15')]({'data1':_0x415701,'data2':null,'license':_0x1ebe80[_0x3d63('0xa')]});}else{if(_0x1ebe80[_0x3d63('0xa')]||_0x26f51d['license']){if(!_0x26f51d[_0x3d63('0x2c')]){if(_0x26f51d['data1']==_0x415701){GRAY_PERIOD_REASON=_0x3d63('0x2e');logger[_0x3d63('0x2d')]('THE\x20LICENSE\x20HAS\x20BEEN\x20DISABLED');}else{GRAY_PERIOD_REASON=_0x3d63('0x2f');oldToken=_0x26f51d[_0x3d63('0x30')];logger['info'](_0x3d63('0x31'),_0x26f51d['data1'],_0x415701);}sendJiraAlert(_0x26f51d[_0x3d63('0x30')],_0x1ebe80['uuid'],GRAY_PERIOD_REASON);logger[_0x3d63('0x2d')](_0x3d63('0x32'),GRAY_PERIOD_REASON[_0x3d63('0x33')](),moment()[_0x3d63('0xd')](_0x3d63('0x34')));return _0x223af4[_0x3d63('0x15')]({'data2':encryptDate(moment()[_0x3d63('0xd')](_0x3d63('0x34')))});}else{if(moment()[_0x3d63('0x35')](decryptDate(_0x26f51d['data2']),_0x3d63('0x36'))>DAYS){logger[_0x3d63('0x2d')](_0x3d63('0x37'),moment()[_0x3d63('0xd')](_0x3d63('0x34')));return _0x223af4[_0x3d63('0x15')]({'data1':_0x415701,'data2':null,'license':null});}}}else{if(_0x26f51d[_0x3d63('0x30')]!=_0x415701){logger['info'](_0x3d63('0x31'),_0x26f51d[_0x3d63('0x30')],_0x415701);return _0x223af4[_0x3d63('0x15')]({'data1':_0x415701,'data2':null,'license':null});}}}return _0x223af4;})[_0x3d63('0x10')](function(_0x4d8f13){_0x223af4=_0x4d8f13;})[_0x3d63('0x11')](function(_0x3fbca7){logger[_0x3d63('0x38')](_0x3fbca7['message']);})[_0x3d63('0x39')](function(){setTimeout(function(){manageLicense(hardware[_0x3d63('0x3a')](),_0x223af4);},TIME);});}function defaultLicense(){var _0x522610=hardware['getUuid']();if(_0x522610){return db[_0x3d63('0x3b')][_0x3d63('0x3c')]({'where':{'id':0x1},'defaults':{'data1':_0x522610}})[_0x3d63('0x3d')](function(_0x204b4c,_0x42d9c7){logger[_0x3d63('0x2d')](_0x3d63('0x3e'),_0x522610);manageLicense(_0x522610,_0x204b4c);})['catch'](function(_0x89548a){logger['error'](_0x89548a['message']);});}}exports[_0x3d63('0x3f')]=defaultLicense;
\ No newline at end of file
+var _0xf4a5=['findOrCreate','spread','SERVICE\x20LICENSE\x20STARTED\x20%s','default','util','crypto','moment','request-promise','bluebird','pkginfo','../../mysqldb','../environment','./hardware','../logger','../../api/jira/jira.controller','https://www.xcallymotion.com','format','exports','version','%s/api/servers/%s/check?version=%s&oldtoken=%s','catch','createCipher','secrets','update','utf8','base64','final','aes-256-ctr','session','User','findOne','admin','fullname','then','|uuid|','|machineUuid|','|email|','getFirstInterface','ipAddress','openIssue','MOTLICENSE','Motion\x20License\x20Alert','Alert','get','active','license','data2','info','THE\x20LICENSE\x20HAS\x20BEEN\x20ENABLED','THE\x20LICENSE\x20HAS\x20BEEN\x20UPDATED','data1','THE\x20LICENSE\x20HAS\x20BEEN\x20DISABLED','NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s','uuid','%s\x20-\x20GRAY\x20PERIOD\x20STARTED\x20AT\x20%s','toUpperCase','YYYY-MM-DD\x20HH:mm','diff','DEMO\x20START\x20AT\x20%s','error','message','finally','getUuid','License'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xf4a5,0x1c4));var _0x5f4a=function(_0xb9e2bc,_0x1bb304){_0xb9e2bc=_0xb9e2bc-0x0;var _0x5cddae=_0xf4a5[_0xb9e2bc];return _0x5cddae;};'use strict';var util=require(_0x5f4a('0x0'));var crypto=require(_0x5f4a('0x1'));var moment=require(_0x5f4a('0x2'));var rp=require(_0x5f4a('0x3'));var BPromise=require(_0x5f4a('0x4'));var pkginfo=require(_0x5f4a('0x5'))(module,'version');var db=require(_0x5f4a('0x6'))['db'];var config=require(_0x5f4a('0x7'));var hardware=require(_0x5f4a('0x8'));var logger=require(_0x5f4a('0x9'))('license');var jira=require(_0x5f4a('0xa'));var HOST=_0x5f4a('0xb');var TIME=0x3c*0x1388;var DAYS=0x7;var GRAY_PERIOD_REASON;var ADMIN;var oldToken;function httpRequest(_0x3a6f56){return new BPromise(function(_0x35b3da,_0xfb57da){var _0x4f55dc=util[_0x5f4a('0xc')]('%s/api/servers/%s/check?version=%s',HOST,_0x3a6f56,module[_0x5f4a('0xd')][_0x5f4a('0xe')]);if(oldToken){_0x4f55dc=util[_0x5f4a('0xc')](_0x5f4a('0xf'),HOST,_0x3a6f56,module[_0x5f4a('0xd')][_0x5f4a('0xe')],oldToken);}var _0x30d509={'uri':_0x4f55dc,'method':'GET','timeout':0xea60,'json':!![]};return rp(_0x30d509)['then'](function(_0x2dfdbe){_0x35b3da(_0x2dfdbe);})[_0x5f4a('0x10')](function(_0x3a1130){_0xfb57da(_0x3a1130);});});}function encryptDate(_0x25b0c3){var _0x7ea0=crypto[_0x5f4a('0x11')]('aes-256-ctr',config[_0x5f4a('0x12')]['session']);var _0xd99b5b=_0x7ea0[_0x5f4a('0x13')](_0x25b0c3,_0x5f4a('0x14'),_0x5f4a('0x15'));_0xd99b5b+=_0x7ea0[_0x5f4a('0x16')](_0x5f4a('0x15'));return _0xd99b5b;}function decryptDate(_0x3cbece){var _0x392733=crypto['createDecipher'](_0x5f4a('0x17'),config[_0x5f4a('0x12')][_0x5f4a('0x18')]);var _0x25f4bd=_0x392733[_0x5f4a('0x13')](_0x3cbece,'base64',_0x5f4a('0x14'));_0x25f4bd+=_0x392733[_0x5f4a('0x16')](_0x5f4a('0x14'));return _0x25f4bd;}function sendJiraAlert(_0x28121a,_0x26c00c,_0x498709){var _0x51072a='||FIELD||VALUE||\x0a';return db[_0x5f4a('0x19')][_0x5f4a('0x1a')]({'where':{'role':_0x5f4a('0x1b')},'attributes':[_0x5f4a('0x1c'),'email'],'raw':!![]})[_0x5f4a('0x1d')](function(_0x2773af){ADMIN=_0x2773af;_0x51072a+='|reason|'+_0x498709+'|\x0a';_0x51072a+=_0x5f4a('0x1e')+_0x28121a+'|\x0a';_0x51072a+=_0x5f4a('0x1f')+_0x26c00c+'|\x0a';_0x51072a+='|name|'+ADMIN[_0x5f4a('0x1c')]+'|\x0a';_0x51072a+=_0x5f4a('0x20')+ADMIN['email']+'|\x0a';return _0x51072a;})[_0x5f4a('0x1d')](function(_0x322f9a){var _0x42390f=hardware[_0x5f4a('0x21')]()[_0x5f4a('0x22')];return jira[_0x5f4a('0x23')]({'key':_0x5f4a('0x24'),'summary':_0x5f4a('0x25'),'description':_0x322f9a,'issuetype':_0x5f4a('0x26'),'oldToken':_0x28121a,'newToken':_0x26c00c,'email':ADMIN['email'],'name':ADMIN[_0x5f4a('0x1c')],'reason':GRAY_PERIOD_REASON,'ip':_0x42390f});});}function manageLicense(_0x55f9ab,_0x1ac922){var _0x2ab118=_0x1ac922[_0x5f4a('0x27')]({'plain':!![]});httpRequest(_0x55f9ab)[_0x5f4a('0x1d')](function(_0x2b918a){if(oldToken){oldToken=undefined;}if(_0x2b918a[_0x5f4a('0x28')]){if(!_0x2ab118[_0x5f4a('0x29')]&&_0x2ab118[_0x5f4a('0x29')]!=_0x2b918a[_0x5f4a('0x29')]||_0x2ab118[_0x5f4a('0x29')]&&_0x2ab118[_0x5f4a('0x2a')]){logger[_0x5f4a('0x2b')](_0x5f4a('0x2c'));}if(_0x2ab118['license']&&!_0x2ab118[_0x5f4a('0x2a')]&&_0x2ab118[_0x5f4a('0x29')]!=_0x2b918a['license']){logger[_0x5f4a('0x2b')](_0x5f4a('0x2d'));}if(_0x2ab118['license']&&!_0x2ab118[_0x5f4a('0x2a')]&&_0x2ab118[_0x5f4a('0x29')]==_0x2b918a[_0x5f4a('0x29')]){return _0x1ac922;}return _0x1ac922[_0x5f4a('0x13')]({'data1':_0x55f9ab,'data2':null,'license':_0x2b918a[_0x5f4a('0x29')]});}else{if(_0x2b918a['license']||_0x2ab118['license']){if(!_0x2ab118[_0x5f4a('0x2a')]){if(_0x2ab118[_0x5f4a('0x2e')]==_0x55f9ab){GRAY_PERIOD_REASON='Disabled';logger[_0x5f4a('0x2b')](_0x5f4a('0x2f'));}else{GRAY_PERIOD_REASON='Changed';oldToken=_0x2ab118[_0x5f4a('0x2e')];logger[_0x5f4a('0x2b')](_0x5f4a('0x30'),_0x2ab118[_0x5f4a('0x2e')],_0x55f9ab);}sendJiraAlert(_0x2ab118['data1'],_0x2b918a[_0x5f4a('0x31')],GRAY_PERIOD_REASON);logger[_0x5f4a('0x2b')](_0x5f4a('0x32'),GRAY_PERIOD_REASON[_0x5f4a('0x33')](),moment()[_0x5f4a('0xc')](_0x5f4a('0x34')));return _0x1ac922[_0x5f4a('0x13')]({'data2':encryptDate(moment()['format']('YYYY-MM-DD\x20HH:mm'))});}else{if(moment()[_0x5f4a('0x35')](decryptDate(_0x2ab118[_0x5f4a('0x2a')]),'days')>DAYS){logger['info'](_0x5f4a('0x36'),moment()[_0x5f4a('0xc')](_0x5f4a('0x34')));return _0x1ac922[_0x5f4a('0x13')]({'data1':_0x55f9ab,'data2':null,'license':null});}}}else{if(_0x2ab118[_0x5f4a('0x2e')]!=_0x55f9ab){logger[_0x5f4a('0x2b')]('NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s',_0x2ab118[_0x5f4a('0x2e')],_0x55f9ab);return _0x1ac922['update']({'data1':_0x55f9ab,'data2':null,'license':null});}}}return _0x1ac922;})[_0x5f4a('0x1d')](function(_0x6de154){_0x1ac922=_0x6de154;})[_0x5f4a('0x10')](function(_0x35b343){logger[_0x5f4a('0x37')](_0x35b343[_0x5f4a('0x38')]);})[_0x5f4a('0x39')](function(){setTimeout(function(){manageLicense(hardware[_0x5f4a('0x3a')](),_0x1ac922);},TIME);});}function defaultLicense(){var _0x359bdd=hardware[_0x5f4a('0x3a')]();if(_0x359bdd){return db[_0x5f4a('0x3b')][_0x5f4a('0x3c')]({'where':{'id':0x1},'defaults':{'data1':_0x359bdd}})[_0x5f4a('0x3d')](function(_0x964301,_0x8c5c4f){logger[_0x5f4a('0x2b')](_0x5f4a('0x3e'),_0x359bdd);manageLicense(_0x359bdd,_0x964301);})[_0x5f4a('0x10')](function(_0x26b5b9){logger['error'](_0x26b5b9[_0x5f4a('0x38')]);});}}exports[_0x5f4a('0x3f')]=defaultLicense;
\ No newline at end of file
index d232580..081f301 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3371=['defaults','checkLicense','util','moment','./hardware','../environment','../../mysqldb','license','data1','split','createDecipher','aes-256-ctr','format','%s:%s:%s','base64','final','utf8','parse','demo','uuid','machineUuid','getUuid','secrets','session','update','gray','days','grayReason','changed','disabled','2027-01-01T00:00:00.000Z','message','Demo\x20license','getLicense'];(function(_0x4adff1,_0x4a8cbe){var _0x318759=function(_0x32faef){while(--_0x32faef){_0x4adff1['push'](_0x4adff1['shift']());}};_0x318759(++_0x4a8cbe);}(_0x3371,0x134));var _0x1337=function(_0x50ea1f,_0x3dcbf5){_0x50ea1f=_0x50ea1f-0x0;var _0x4bb74e=_0x3371[_0x50ea1f];return _0x4bb74e;};'use strict';var crypto=require('crypto');var util=require(_0x1337('0x0'));var _=require('lodash');var moment=require(_0x1337('0x1'));var hardware=require(_0x1337('0x2'));var config=require(_0x1337('0x3'));var db=require(_0x1337('0x4'))['db'];function checkLicense(_0x4080a1,_0x1f4410){if(_0x4080a1){try{var _0x4a1dd6=_0x1f4410||_0x4080a1[_0x1337('0x5')];if(_['isEmpty'](_0x4a1dd6)){throw new Error('License\x20key\x20value\x20not\x20found');}var _0x803288=_0x4080a1[_0x1337('0x6')];var _0x33366d=_0x4080a1['data2'];var _0x15c7ab=_0x803288[_0x1337('0x7')]('-')[0x4];var _0x42bdc3=_0x803288[_0x1337('0x7')]('-')[0x0];var _0x399aac=crypto[_0x1337('0x8')](_0x1337('0x9'),util[_0x1337('0xa')](_0x1337('0xb'),_0x15c7ab,_0x803288,_0x42bdc3));var _0x423ca8=_0x399aac['update'](_0x4a1dd6,_0x1337('0xc'),'utf8');_0x423ca8+=_0x399aac[_0x1337('0xd')](_0x1337('0xe'));var _0x54d0f1=JSON[_0x1337('0xf')](_0x423ca8);_0x54d0f1[_0x1337('0x10')]=![];_0x54d0f1[_0x1337('0x11')]=_0x803288;_0x54d0f1[_0x1337('0x12')]=hardware[_0x1337('0x13')]();if(_0x33366d){var _0x39717e=crypto[_0x1337('0x8')](_0x1337('0x9'),config[_0x1337('0x14')][_0x1337('0x15')]);var _0x3a93f6=_0x39717e[_0x1337('0x16')](_0x33366d,_0x1337('0xc'),_0x1337('0xe'));_0x3a93f6+=_0x39717e[_0x1337('0xd')](_0x1337('0xe'));_0x54d0f1[_0x1337('0x17')]=_0x3a93f6;_0x54d0f1['deadline']=moment(_0x3a93f6)['add'](0x7,_0x1337('0x18'))[_0x1337('0xa')]();_0x54d0f1[_0x1337('0x19')]=_0x54d0f1['uuid']!=_0x54d0f1[_0x1337('0x12')]?_0x1337('0x1a'):_0x1337('0x1b');}return _0x54d0f1;}catch(_0x545291){return{'breaking':!![],'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0x1337('0x1c'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':'Breaking\x20license','uuid':_0x4080a1[_0x1337('0x6')],'machineUuid':hardware[_0x1337('0x13')](),'message':_0x545291[_0x1337('0x1d')],'virtual':0x0,'voice':!![],'screenrecording':![],'preferred':![]};}}return{'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0x1337('0x1c'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'description':_0x1337('0x1e'),'uuid':_0x4080a1[_0x1337('0x6')],'machineUuid':hardware[_0x1337('0x13')](),'virtual':0x0,'voice':!![],'screenrecording':![],'preferred':![]};}exports[_0x1337('0x1f')]=function(_0xbd3938){return db['License']['find'](_[_0x1337('0x20')](_0xbd3938,{'raw':!![],'where':{'id':0x1}}))['then'](function(_0x46ee52){return checkLicense(_0x46ee52,null);});};exports[_0x1337('0x21')]=checkLicense;
\ No newline at end of file
+var _0xe2cd=['session','base64','gray','deadline','add','days','changed','2027-01-01T00:00:00.000Z','Breaking\x20license','message','Demo\x20license','data1','getLicense','find','defaults','then','checkLicense','crypto','util','lodash','../../mysqldb','license','isEmpty','License\x20key\x20value\x20not\x20found','data2','split','createDecipher','aes-256-ctr','format','utf8','final','parse','demo','uuid','machineUuid','getUuid','secrets'];(function(_0x3acab3,_0x33cdc8){var _0x17ab0c=function(_0x504fdd){while(--_0x504fdd){_0x3acab3['push'](_0x3acab3['shift']());}};_0x17ab0c(++_0x33cdc8);}(_0xe2cd,0x183));var _0xde2c=function(_0xa2c6e0,_0x588eda){_0xa2c6e0=_0xa2c6e0-0x0;var _0x7b8583=_0xe2cd[_0xa2c6e0];return _0x7b8583;};'use strict';var crypto=require(_0xde2c('0x0'));var util=require(_0xde2c('0x1'));var _=require(_0xde2c('0x2'));var moment=require('moment');var hardware=require('./hardware');var config=require('../environment');var db=require(_0xde2c('0x3'))['db'];function checkLicense(_0x1f3a5f,_0x5b403e){if(_0x1f3a5f){try{var _0x4651f6=_0x5b403e||_0x1f3a5f[_0xde2c('0x4')];if(_[_0xde2c('0x5')](_0x4651f6)){throw new Error(_0xde2c('0x6'));}var _0xaa4917=_0x1f3a5f['data1'];var _0x49e040=_0x1f3a5f[_0xde2c('0x7')];var _0x347f44=_0xaa4917[_0xde2c('0x8')]('-')[0x4];var _0x8c76cd=_0xaa4917[_0xde2c('0x8')]('-')[0x0];var _0x53b090=crypto[_0xde2c('0x9')](_0xde2c('0xa'),util[_0xde2c('0xb')]('%s:%s:%s',_0x347f44,_0xaa4917,_0x8c76cd));var _0x2bfd38=_0x53b090['update'](_0x4651f6,'base64',_0xde2c('0xc'));_0x2bfd38+=_0x53b090[_0xde2c('0xd')]('utf8');var _0x6d16f0=JSON[_0xde2c('0xe')](_0x2bfd38);_0x6d16f0[_0xde2c('0xf')]=![];_0x6d16f0[_0xde2c('0x10')]=_0xaa4917;_0x6d16f0[_0xde2c('0x11')]=hardware[_0xde2c('0x12')]();if(_0x49e040){var _0x2ba6a0=crypto[_0xde2c('0x9')]('aes-256-ctr',config[_0xde2c('0x13')][_0xde2c('0x14')]);var _0x49f565=_0x2ba6a0['update'](_0x49e040,_0xde2c('0x15'),_0xde2c('0xc'));_0x49f565+=_0x2ba6a0[_0xde2c('0xd')]('utf8');_0x6d16f0[_0xde2c('0x16')]=_0x49f565;_0x6d16f0[_0xde2c('0x17')]=moment(_0x49f565)[_0xde2c('0x18')](0x7,_0xde2c('0x19'))['format']();_0x6d16f0['grayReason']=_0x6d16f0['uuid']!=_0x6d16f0[_0xde2c('0x11')]?_0xde2c('0x1a'):'disabled';}return _0x6d16f0;}catch(_0x1f28c0){return{'breaking':!![],'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0xde2c('0x1b'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':_0xde2c('0x1c'),'uuid':_0x1f3a5f['data1'],'machineUuid':hardware[_0xde2c('0x12')](),'message':_0x1f28c0[_0xde2c('0x1d')],'virtual':0x0,'voice':!![],'screenrecording':![],'preferred':![]};}}return{'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0xde2c('0x1b'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'description':_0xde2c('0x1e'),'uuid':_0x1f3a5f[_0xde2c('0x1f')],'machineUuid':hardware[_0xde2c('0x12')](),'virtual':0x0,'voice':!![],'screenrecording':![],'preferred':![]};}exports[_0xde2c('0x20')]=function(_0x3b0097){return db['License'][_0xde2c('0x21')](_[_0xde2c('0x22')](_0x3b0097,{'raw':!![],'where':{'id':0x1}}))[_0xde2c('0x23')](function(_0x311f74){return checkLicense(_0x311f74,null);});};exports[_0xde2c('0x24')]=checkLicense;
\ No newline at end of file
index 8a86c0b..fccc7d4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0dba=['exports','http://localhost:9000','myappanuglar-secret','app-id','secret'];(function(_0x119705,_0xba9427){var _0x2affc2=function(_0x16f7e2){while(--_0x16f7e2){_0x119705['push'](_0x119705['shift']());}};_0x2affc2(++_0xba9427);}(_0x0dba,0x136));var _0xa0db=function(_0x4fe6cd,_0x3d73fe){_0x4fe6cd=_0x4fe6cd-0x0;var _0x1ee466=_0x0dba[_0x4fe6cd];return _0x1ee466;};'use strict';module[_0xa0db('0x0')]={'DOMAIN':_0xa0db('0x1'),'SESSION_SECRET':_0xa0db('0x2'),'GOOGLE_ID':_0xa0db('0x3'),'GOOGLE_SECRET':_0xa0db('0x4'),'DEBUG':''};
\ No newline at end of file
+var _0x3f59=['exports','http://localhost:9000','app-id','secret'];(function(_0x1f838e,_0xe27ee4){var _0x4d1fc5=function(_0x5deb1a){while(--_0x5deb1a){_0x1f838e['push'](_0x1f838e['shift']());}};_0x4d1fc5(++_0xe27ee4);}(_0x3f59,0x1b0));var _0x93f5=function(_0x496f9f,_0x45ae85){_0x496f9f=_0x496f9f-0x0;var _0x47aebd=_0x3f59[_0x496f9f];return _0x47aebd;};'use strict';module[_0x93f5('0x0')]={'DOMAIN':_0x93f5('0x1'),'SESSION_SECRET':'myappanuglar-secret','GOOGLE_ID':_0x93f5('0x2'),'GOOGLE_SECRET':_0x93f5('0x3'),'DEBUG':''};
\ No newline at end of file
index 3e1204c..979a8f0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x12dd=['debugLevel','moment','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','exports','Logger','File','%s-%s','error','info','transports','Console','env'];(function(_0x1facfa,_0x1acf7d){var _0x9ec701=function(_0x115e37){while(--_0x115e37){_0x1facfa['push'](_0x1facfa['shift']());}};_0x9ec701(++_0x1acf7d);}(_0x12dd,0xdd));var _0xd12d=function(_0x1e3b2c,_0x446d83){_0x1e3b2c=_0x1e3b2c-0x0;var _0x561c3a=_0x12dd[_0x1e3b2c];return _0x561c3a;};'use strict';var moment=require(_0xd12d('0x0'));var winston=require('winston');var util=require(_0xd12d('0x1'));var path=require(_0xd12d('0x2'));var debugLevel=_0xd12d('0x3');function filename(_0x503871,_0xc07a4b){return path[_0xd12d('0x4')]('/var',_0xd12d('0x5'),_0xd12d('0x6'),util[_0xd12d('0x7')](_0xd12d('0x8'),_0x503871,_0xc07a4b));}function formatter(_0x2675fe,_0x5e7fbf){return util[_0xd12d('0x7')](_0xd12d('0x9'),moment()[_0xd12d('0x7')](_0xd12d('0xa')),_0x5e7fbf[_0xd12d('0xb')]['toUpperCase'](),_0x2675fe,_0x5e7fbf['message']);}module[_0xd12d('0xc')]=function(_0x109ddb){return new winston[(_0xd12d('0xd'))]({'transports':[new winston['transports'][(_0xd12d('0xe'))]({'name':util['format'](_0xd12d('0xf'),_0x109ddb,_0xd12d('0x10')),'filename':filename(_0x109ddb,_0xd12d('0x10')),'level':_0xd12d('0x10'),'json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x496f55){return formatter(_0x109ddb,_0x496f55);}}),new winston['transports']['File']({'name':util['format'](_0xd12d('0xf'),_0x109ddb,'info'),'filename':filename(_0x109ddb,_0xd12d('0x11')),'level':'info','json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x2a4058){return formatter(_0x109ddb,_0x2a4058);}}),new winston[(_0xd12d('0x12'))][(_0xd12d('0x13'))]({'level':process[_0xd12d('0x14')][_0xd12d('0x15')]||debugLevel,'json':![],'formatter':function(_0x17c91c){return formatter(_0x109ddb,_0x17c91c);}})]});};
\ No newline at end of file
+var _0x529f=['[%s]\x20[%s]\x20%s\x20-\x20%s','level','toUpperCase','message','Logger','transports','File','error','%s-%s','info','Console','moment','util','path','INFO','join','/var','log','xcally','%s-%s.log','format'];(function(_0x378752,_0x158b32){var _0xd5a262=function(_0x3c6f94){while(--_0x3c6f94){_0x378752['push'](_0x378752['shift']());}};_0xd5a262(++_0x158b32);}(_0x529f,0x1d9));var _0xf529=function(_0x77f738,_0x2d0ec1){_0x77f738=_0x77f738-0x0;var _0x25db18=_0x529f[_0x77f738];return _0x25db18;};'use strict';var moment=require(_0xf529('0x0'));var winston=require('winston');var util=require(_0xf529('0x1'));var path=require(_0xf529('0x2'));var debugLevel=_0xf529('0x3');function filename(_0x151c84,_0x4f59a3){return path[_0xf529('0x4')](_0xf529('0x5'),_0xf529('0x6'),_0xf529('0x7'),util['format'](_0xf529('0x8'),_0x151c84,_0x4f59a3));}function formatter(_0x37940e,_0x2bf8d4){return util[_0xf529('0x9')](_0xf529('0xa'),moment()[_0xf529('0x9')]('YYYY-MM-DD\x20HH:mm:ss'),_0x2bf8d4[_0xf529('0xb')][_0xf529('0xc')](),_0x37940e,_0x2bf8d4[_0xf529('0xd')]);}module['exports']=function(_0x4bc2b1){return new winston[(_0xf529('0xe'))]({'transports':[new winston[(_0xf529('0xf'))][(_0xf529('0x10'))]({'name':util[_0xf529('0x9')]('%s-%s',_0x4bc2b1,_0xf529('0x11')),'filename':filename(_0x4bc2b1,_0xf529('0x11')),'level':'error','json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x22e0ac){return formatter(_0x4bc2b1,_0x22e0ac);}}),new winston['transports'][(_0xf529('0x10'))]({'name':util[_0xf529('0x9')](_0xf529('0x12'),_0x4bc2b1,_0xf529('0x13')),'filename':filename(_0x4bc2b1,_0xf529('0x13')),'level':'info','json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x10c608){return formatter(_0x4bc2b1,_0x10c608);}}),new winston[(_0xf529('0xf'))][(_0xf529('0x14'))]({'level':process['env']['debugLevel']||debugLevel,'json':![],'formatter':function(_0x5adc95){return formatter(_0x4bc2b1,_0x5adc95);}})]});};
\ No newline at end of file
index 7f9ec1e..c610809 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd063=['email','routing','../../services/routing/index.js','exports','path','express','../../services/express/index.js','join','../../services/ami/index.js','../../services/agi/index.js'];(function(_0x1eee81,_0x2d5bed){var _0x452462=function(_0x4ba4e2){while(--_0x4ba4e2){_0x1eee81['push'](_0x1eee81['shift']());}};_0x452462(++_0x2d5bed);}(_0xd063,0x13a));var _0x3d06=function(_0x50e310,_0x41e800){_0x50e310=_0x50e310-0x0;var _0x42af52=_0xd063[_0x50e310];return _0x42af52;};'use strict';var path=require(_0x3d06('0x0'));var os=require('os');var config={'apps':[{'name':_0x3d06('0x1'),'script':path['join'](__dirname,_0x3d06('0x2'))},{'name':'ami','script':path[_0x3d06('0x3')](__dirname,_0x3d06('0x4'))},{'name':'agi','script':path[_0x3d06('0x3')](__dirname,_0x3d06('0x5'))},{'name':_0x3d06('0x6'),'script':path[_0x3d06('0x3')](__dirname,'../../services/email/index.js')},{'name':_0x3d06('0x7'),'script':path[_0x3d06('0x3')](__dirname,_0x3d06('0x8'))},{'name':'xdr','script':path[_0x3d06('0x3')](__dirname,'../../services/xdr/index.js')}]};module[_0x3d06('0x9')]=config;
\ No newline at end of file
+var _0x70e2=['../../services/express/index.js','../../services/ami/index.js','agi','../../services/agi/index.js','email','../../services/email/index.js','routing','exports','path','express','join'];(function(_0x55f549,_0x4f90ac){var _0x589a78=function(_0x4b2cc3){while(--_0x4b2cc3){_0x55f549['push'](_0x55f549['shift']());}};_0x589a78(++_0x4f90ac);}(_0x70e2,0xc3));var _0x270e=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x70e2[_0x3ab51d];return _0x29a04e;};'use strict';var path=require(_0x270e('0x0'));var os=require('os');var config={'apps':[{'name':_0x270e('0x1'),'script':path[_0x270e('0x2')](__dirname,_0x270e('0x3'))},{'name':'ami','script':path[_0x270e('0x2')](__dirname,_0x270e('0x4'))},{'name':_0x270e('0x5'),'script':path[_0x270e('0x2')](__dirname,_0x270e('0x6'))},{'name':_0x270e('0x7'),'script':path['join'](__dirname,_0x270e('0x8'))},{'name':_0x270e('0x9'),'script':path[_0x270e('0x2')](__dirname,'../../services/routing/index.js')},{'name':'xdr','script':path[_0x270e('0x2')](__dirname,'../../services/xdr/index.js')}]};module[_0x270e('0xa')]=config;
\ No newline at end of file
index 0bc8e9e..9f4abad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['stop','restart','list','delete','dump','saved','pm2','bluebird','./config','connect','connected','start','then','disconnect'];(function(_0x4fcf40,_0x28399c){var _0x3960b3=function(_0x2bfeed){while(--_0x2bfeed){_0x4fcf40['push'](_0x4fcf40['shift']());}};_0x3960b3(++_0x28399c);}(_0x34e8,0x12c));var _0x834e=function(_0x21d354,_0x1b82f9){_0x21d354=_0x21d354-0x0;var _0x142aad=_0x34e8[_0x21d354];return _0x142aad;};'use strict';var pm2=require(_0x834e('0x0'));var BPromise=require(_0x834e('0x1'));var config=require(_0x834e('0x2'));function connect(){return new BPromise(function(_0x35e6fb,_0x530939){return pm2[_0x834e('0x3')](function(_0x21e2e0){if(_0x21e2e0){return _0x530939(_0x21e2e0);}return _0x35e6fb(_0x834e('0x4'));});});};exports[_0x834e('0x5')]=function(_0x289ef2){return connect()[_0x834e('0x6')](function(){return new BPromise(function(_0x398bee,_0x4a2018){return pm2[_0x834e('0x5')](_0x289ef2,function(_0x52056d,_0x3e16d2){if(_0x52056d){return _0x4a2018(_0x52056d);}pm2[_0x834e('0x7')]();return _0x398bee(_0x3e16d2);});});});};exports[_0x834e('0x8')]=function(_0x2e69e2){return connect()[_0x834e('0x6')](function(){return new BPromise(function(_0x23501c,_0x363786){return pm2[_0x834e('0x8')](_0x2e69e2,function(_0x3bdda9,_0x186b3b){if(_0x3bdda9){return _0x363786(_0x3bdda9);}pm2[_0x834e('0x7')]();return _0x23501c(_0x186b3b);});});});};exports[_0x834e('0x9')]=function(_0x14038b){return connect()[_0x834e('0x6')](function(){return new BPromise(function(_0x293514,_0x1e00de){return pm2[_0x834e('0x9')](_0x14038b,function(_0x538bb3,_0x5e5b6d){if(_0x538bb3){return _0x1e00de(_0x538bb3);}pm2[_0x834e('0x7')]();return _0x293514(_0x5e5b6d);});});});};exports['list']=function(){return connect()[_0x834e('0x6')](function(){return new BPromise(function(_0x2d95f2,_0x28e659){return pm2[_0x834e('0xa')](function(_0x50e860,_0x43156c){if(_0x50e860){return _0x28e659(_0x50e860);}pm2[_0x834e('0x7')]();return _0x2d95f2(_0x43156c);});});});};exports['describe']=function(_0x316205){return connect()['then'](function(){return new BPromise(function(_0x38a8cd,_0x36d443){return pm2['describe'](_0x316205,function(_0x43ac41,_0x22106e){if(_0x43ac41){return _0x36d443(_0x43ac41);}pm2[_0x834e('0x7')]();return _0x38a8cd(_0x22106e);});});});};exports['delete']=function(_0x283e56){return connect()[_0x834e('0x6')](function(){return new BPromise(function(_0x34e41a,_0xb993a1){return pm2[_0x834e('0xb')](_0x283e56,function(_0x254677,_0x1dd214){if(_0x254677){return _0xb993a1(_0x254677);}pm2['disconnect']();return _0x34e41a(_0x1dd214);});});});};exports[_0x834e('0xc')]=function(){return connect()[_0x834e('0x6')](function(){return new BPromise(function(_0x113ff4,_0x325a99){return pm2['dump'](function(_0x45a630){if(_0x45a630){return _0x325a99(_0x45a630);}return _0x113ff4(_0x834e('0xd'));});});});};
\ No newline at end of file
+var _0x3e74=['saved','pm2','./config','connected','then','start','disconnect','stop','list','describe','delete','dump'];(function(_0x291504,_0x670993){var _0x186686=function(_0x2c1fed){while(--_0x2c1fed){_0x291504['push'](_0x291504['shift']());}};_0x186686(++_0x670993);}(_0x3e74,0x175));var _0x43e7=function(_0x56884a,_0xa562a5){_0x56884a=_0x56884a-0x0;var _0x157a79=_0x3e74[_0x56884a];return _0x157a79;};'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 0671cd6..48c2794 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f4a=['minutes','system','timeout','format','map','chatInteraction:update','catch','start','lodash','moment','../../mysqldb','../../config/environment','defaults','redis','localhost','socket.io-emitter','Setting','chatTimeout','then','ChatInteraction','lastMsgAt','subtract'];(function(_0x1ba76a,_0x418b9a){var _0x5a236b=function(_0x3c3c3f){while(--_0x3c3c3f){_0x1ba76a['push'](_0x1ba76a['shift']());}};_0x5a236b(++_0x418b9a);}(_0x6f4a,0x168));var _0xa6f4=function(_0x3a39ea,_0x2cd86d){_0x3a39ea=_0x3a39ea-0x0;var _0x43fccd=_0x6f4a[_0x3a39ea];return _0x43fccd;};'use strict';var _=require(_0xa6f4('0x0'));var moment=require(_0xa6f4('0x1'));var Redis=require('ioredis');var db=require(_0xa6f4('0x2'))['db'];var config=require(_0xa6f4('0x3'));config['redis']=_[_0xa6f4('0x4')](config[_0xa6f4('0x5')],{'host':_0xa6f4('0x6'),'port':0x18eb});var io=require(_0xa6f4('0x7'))(new Redis(config[_0xa6f4('0x5')]));function closeInteractions(){var _0x12b44f=0x0;var _0x2f451a=[];return db[_0xa6f4('0x8')]['find']({'raw':!![],'attributes':['id',_0xa6f4('0x9')],'where':{'id':0x1}})[_0xa6f4('0xa')](function(_0x134c1c){_0x12b44f=_0x134c1c['chatTimeout'];if(_0x12b44f){return db[_0xa6f4('0xb')]['findAll']({'raw':!![],'attributes':['id',_0xa6f4('0xc')],'where':{'closed':![],'lastMsgAt':{'$lt':moment()[_0xa6f4('0xd')](_0x134c1c[_0xa6f4('0x9')],_0xa6f4('0xe'))}}});}else{return[];}})[_0xa6f4('0xa')](function(_0x4c8b87){_0x2f451a=_0x4c8b87;if(_0x12b44f){return db[_0xa6f4('0xb')]['update']({'closeReason':_0xa6f4('0xf'),'disposition':_0xa6f4('0x10'),'closed':!![],'closedAt':moment()[_0xa6f4('0x11')]('YYYY-MM-DD\x20HH:mm:ss')},{'where':{'id':_[_0xa6f4('0x12')](_0x2f451a||[],'id')}});}})[_0xa6f4('0xa')](function(_0x879c38){for(var _0x293e76=0x0;_0x293e76<_0x2f451a['length'];_0x293e76++){io['emit'](_0xa6f4('0x13'),{'id':_0x2f451a[_0x293e76]['id'],'closed':!![]});}})[_0xa6f4('0x14')](function(_0x478b83){console['error'](_0x478b83);});}exports[_0xa6f4('0x15')]=function(){setInterval(function(){return closeInteractions();},0x3c*0x3e8);return closeInteractions();};
\ No newline at end of file
+var _0x5c27=['map','length','emit','chatInteraction:update','catch','error','start','lodash','moment','ioredis','../../mysqldb','../../config/environment','redis','localhost','Setting','chatTimeout','then','ChatInteraction','findAll','lastMsgAt','minutes','update','system','timeout','YYYY-MM-DD\x20HH:mm:ss'];(function(_0x3e2e82,_0x369bbe){var _0xba15aa=function(_0x4ac6d4){while(--_0x4ac6d4){_0x3e2e82['push'](_0x3e2e82['shift']());}};_0xba15aa(++_0x369bbe);}(_0x5c27,0xe8));var _0x75c2=function(_0x3bef2c,_0x5a86fd){_0x3bef2c=_0x3bef2c-0x0;var _0x331503=_0x5c27[_0x3bef2c];return _0x331503;};'use strict';var _=require(_0x75c2('0x0'));var moment=require(_0x75c2('0x1'));var Redis=require(_0x75c2('0x2'));var db=require(_0x75c2('0x3'))['db'];var config=require(_0x75c2('0x4'));config[_0x75c2('0x5')]=_['defaults'](config[_0x75c2('0x5')],{'host':_0x75c2('0x6'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x75c2('0x5')]));function closeInteractions(){var _0x1c022a=0x0;var _0x1adc40=[];return db[_0x75c2('0x7')]['find']({'raw':!![],'attributes':['id',_0x75c2('0x8')],'where':{'id':0x1}})[_0x75c2('0x9')](function(_0x238a5a){_0x1c022a=_0x238a5a['chatTimeout'];if(_0x1c022a){return db[_0x75c2('0xa')][_0x75c2('0xb')]({'raw':!![],'attributes':['id',_0x75c2('0xc')],'where':{'closed':![],'lastMsgAt':{'$lt':moment()['subtract'](_0x238a5a[_0x75c2('0x8')],_0x75c2('0xd'))}}});}else{return[];}})[_0x75c2('0x9')](function(_0x3470ba){_0x1adc40=_0x3470ba;if(_0x1c022a){return db['ChatInteraction'][_0x75c2('0xe')]({'closeReason':_0x75c2('0xf'),'disposition':_0x75c2('0x10'),'closed':!![],'closedAt':moment()['format'](_0x75c2('0x11'))},{'where':{'id':_[_0x75c2('0x12')](_0x1adc40||[],'id')}});}})['then'](function(_0x436a80){for(var _0x7615c4=0x0;_0x7615c4<_0x1adc40[_0x75c2('0x13')];_0x7615c4++){io[_0x75c2('0x14')](_0x75c2('0x15'),{'id':_0x1adc40[_0x7615c4]['id'],'closed':!![]});}})[_0x75c2('0x16')](function(_0x18ff50){console[_0x75c2('0x17')](_0x18ff50);});}exports[_0x75c2('0x18')]=function(){setInterval(function(){return closeInteractions();},0x3c*0x3e8);return closeInteractions();};
\ No newline at end of file
index df39187..a8e57ba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4a34=['keys','map','toString','difference','length','stop','deleteJob','delete\x20cron','toRun','index','my\x20id','resolve','run\x20job','cron','active','isBetween','startAt','endAt','add','start','add\x20cron','exists','stop\x20cron','update\x20cron','util','path','moment','cron-job-manager','jayson/promise','../logger','../../mysqldb','../../api/analyticCustomReport/analyticCustomReport.controller','../../api/analyticDefaultReport/analyticDefaultReport.controller','client','http','info','email','MailAccount','Smtp','service','host','port','secure','auth','user','pass','format','\x22%s\x22\x20<%s>','name','bcc','Report\x20%s\x20last\x20%s\x20%s','subtractUnit','join','../../files/reports','savename','%s.%s','basename','extname','existsSync','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','status','Sent','request','SendMail','error','error\x20mail','email\x20sent','catch','data','isNil','subtractNumber','subtractNumber\x20null\x20or\x20undefined','subtract','YYYY-MM-DD\x20HH:mm:ss','scheduled','output','DefaultReportId','exec\x20defaul\x20report\x20id:%s','runReport','CustomReportId','exec\x20custom\x20report\x20id:%s','then','findAll','MailServerOut'];(function(_0x38a55d,_0x10ca14){var _0x25478b=function(_0x21e893){while(--_0x21e893){_0x38a55d['push'](_0x38a55d['shift']());}};_0x25478b(++_0x10ca14);}(_0x4a34,0x120));var _0x44a3=function(_0x1e9d21,_0xb08e81){_0x1e9d21=_0x1e9d21-0x0;var _0x4588c7=_0x4a34[_0x1e9d21];return _0x4588c7;};'use strict';var fs=require('fs');var util=require(_0x44a3('0x0'));var path=require(_0x44a3('0x1'));var _=require('lodash');var moment=require(_0x44a3('0x2'));var CronJobManager=require(_0x44a3('0x3'));var jayson=require(_0x44a3('0x4'));var BPromise=require('bluebird');var logger=require(_0x44a3('0x5'))('schedule');var db=require(_0x44a3('0x6'))['db'];var analyticCustomReportController=require(_0x44a3('0x7'));var analyticDefaultReportController=require(_0x44a3('0x8'));var client=jayson[_0x44a3('0x9')][_0x44a3('0xa')]({'port':0x232b});var manager=new CronJobManager();function handleSendEmail(_0x24f9f4,_0x568f23){return function(){logger[_0x44a3('0xb')]('Try\x20to\x20send\x20a\x20mail\x20to',_0x24f9f4[_0x44a3('0xc')]);var _0x106028=!![];var _0x2dda50={'tls':{'rejectUnauthorized':![]}};if(_0x24f9f4[_0x44a3('0xd')][_0x44a3('0xe')][_0x44a3('0xf')]){_0x2dda50[_0x44a3('0xf')]=_0x24f9f4['MailAccount']['Smtp']['service'];}else{_0x2dda50['host']=_0x24f9f4[_0x44a3('0xd')][_0x44a3('0xe')][_0x44a3('0x10')];_0x2dda50[_0x44a3('0x11')]=_0x24f9f4['MailAccount'][_0x44a3('0xe')][_0x44a3('0x11')];_0x2dda50[_0x44a3('0x12')]=_0x24f9f4['MailAccount']['Smtp']['secure'];}if(_0x24f9f4[_0x44a3('0xd')][_0x44a3('0xe')]['authentication']){_0x2dda50[_0x44a3('0x13')]={'user':_0x24f9f4['MailAccount'][_0x44a3('0xe')][_0x44a3('0x14')],'pass':_0x24f9f4[_0x44a3('0xd')]['Smtp'][_0x44a3('0x15')]};}var _0x27856c={'account':_0x2dda50,'message':{'from':util[_0x44a3('0x16')](_0x44a3('0x17'),_0x24f9f4[_0x44a3('0xd')][_0x44a3('0x18')],_0x24f9f4[_0x44a3('0xd')][_0x44a3('0xc')]||_0x24f9f4[_0x44a3('0xd')]['Smtp'][_0x44a3('0x14')]),'to':_0x24f9f4[_0x44a3('0xc')],'cc':_0x24f9f4['cc'],'bcc':_0x24f9f4[_0x44a3('0x19')],'subject':util[_0x44a3('0x16')](_0x44a3('0x1a'),_0x568f23['name'],_0x24f9f4['subtractNumber'],_0x24f9f4[_0x44a3('0x1b')])}};var _0x48a236=path[_0x44a3('0x1c')](__dirname,_0x44a3('0x1d'));var _0x182aa1=_0x568f23[_0x44a3('0x1e')];var _0x5850d0=util[_0x44a3('0x16')](_0x44a3('0x1f'),path[_0x44a3('0x20')](_0x568f23[_0x44a3('0x1e')],path[_0x44a3('0x21')](_0x568f23[_0x44a3('0x1e')])),'zip');var _0x137a6b=path[_0x44a3('0x1c')](_0x48a236,_0x182aa1);var _0x19cf48=path[_0x44a3('0x1c')](_0x48a236,_0x5850d0);if(fs[_0x44a3('0x22')](_0x137a6b)){_0x568f23['status']='Sent';_0x27856c[_0x44a3('0x23')][_0x44a3('0x24')]=[{'filename':_0x182aa1,'path':_0x137a6b}];_0x27856c[_0x44a3('0x23')][_0x44a3('0x25')]=util[_0x44a3('0x16')](_0x44a3('0x26'),JSON[_0x44a3('0x27')](_0x568f23,null,0x2));}else if(fs[_0x44a3('0x22')](_0x19cf48)){_0x568f23[_0x44a3('0x28')]=_0x44a3('0x29');_0x27856c['message'][_0x44a3('0x24')]=[{'filename':_0x5850d0,'path':_0x19cf48}];}else{_0x27856c[_0x44a3('0x23')][_0x44a3('0x25')]='Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a';if(!_0x24f9f4['sendIfEmpty']){_0x106028=![];logger['info']('empty\x20file,\x20email\x20not\x20sent');}}if(_0x106028){return client[_0x44a3('0x2a')](_0x44a3('0x2b'),_0x27856c)['then'](function(_0x47ba0e){if(_0x47ba0e[_0x44a3('0x2c')]){return logger[_0x44a3('0x2c')](_0x44a3('0x2d'),JSON[_0x44a3('0x27')](_0x47ba0e));}return logger['info'](_0x44a3('0x2e'));})[_0x44a3('0x2f')](function(_0x3f1e7d){return logger[_0x44a3('0x2c')](_0x44a3('0x2d'),JSON['stringify'](_0x3f1e7d));});}};}function handleError(){return function(_0x4f3ef5){return logger[_0x44a3('0x2c')](JSON['stringify'](_0x4f3ef5));};}function handleResult(_0x363ade){return function(_0x29cd84){logger[_0x44a3('0xb')](_0x44a3('0x30'),JSON[_0x44a3('0x27')](_0x29cd84));if(_0x363ade['MailAccount']&&_0x363ade['MailAccount'][_0x44a3('0xe')]&&!_[_0x44a3('0x31')](_0x363ade[_0x44a3('0xc')])){setTimeout(handleSendEmail(_0x363ade,_0x29cd84),0x3c*0x3e8);}};}function handleJob(_0x2b9526){return function(){try{if(_[_0x44a3('0x31')](_0x2b9526[_0x44a3('0x32')])){return logger[_0x44a3('0xb')](_0x44a3('0x33'));}if(_['isNil'](_0x2b9526[_0x44a3('0x1b')])){return logger[_0x44a3('0xb')]('subtractUnit\x20null\x20or\x20undefined');}var _0x5bd303={'startDate':moment()[_0x44a3('0x34')](_0x2b9526['subtractNumber'],_0x2b9526[_0x44a3('0x1b')])[_0x44a3('0x16')](_0x44a3('0x35')),'endDate':moment()[_0x44a3('0x16')](_0x44a3('0x35')),'type':_0x44a3('0x36'),'output':_0x2b9526[_0x44a3('0x37')],'name':_0x2b9526[_0x44a3('0x18')]};if(!_[_0x44a3('0x31')](_0x2b9526[_0x44a3('0x38')])){logger['info'](_0x44a3('0x39'),_0x2b9526[_0x44a3('0x38')]);return analyticDefaultReportController[_0x44a3('0x3a')]({'id':_0x2b9526[_0x44a3('0x38')]},_0x5bd303)['then'](handleResult(_0x2b9526))[_0x44a3('0x2f')](handleError());}if(!_[_0x44a3('0x31')](_0x2b9526[_0x44a3('0x3b')])){logger[_0x44a3('0xb')](_0x44a3('0x3c'),_0x2b9526['CustomReportId']);return analyticCustomReportController[_0x44a3('0x3a')]({'id':_0x2b9526[_0x44a3('0x3b')]},_0x5bd303)[_0x44a3('0x3d')](handleResult(_0x2b9526))['catch'](handleError());}}catch(_0x2dc92c){logger[_0x44a3('0x2c')](JSON['stringify'](_0x2dc92c));}return logger[_0x44a3('0xb')]('no\x20report\x20id');};}function getJobs(_0x2cddb6){var _0x1e1f39={};if(_0x2cddb6){_0x1e1f39['id']=_0x2cddb6;}return db['Schedule'][_0x44a3('0x3e')]({'where':_0x1e1f39,'include':[{'model':db[_0x44a3('0xd')],'attributes':['id',_0x44a3('0x18'),_0x44a3('0xc')],'include':[{'model':db[_0x44a3('0x3f')],'as':_0x44a3('0xe')}]}]})[_0x44a3('0x3d')](function(_0x36cd19){var _0x420a93=_[_0x44a3('0x40')](manager['jobs']);var _0x23fb55=_[_0x44a3('0x41')](_0x36cd19,function(_0x5a2f04){return _0x5a2f04['id'][_0x44a3('0x42')]();});var _0x2525a5=_['keyBy'](_0x36cd19,function(_0x3f390d){return _0x3f390d['id'][_0x44a3('0x42')]();});var _0x3a3806=_0x2cddb6?_0x23fb55:_[_0x44a3('0x43')](_0x23fb55,_0x420a93);var _0x4b2e4c=_['intersection'](_0x23fb55,_0x420a93);var _0x247d8e=_[_0x44a3('0x43')](_0x420a93,_0x23fb55);var _0x41594e;var _0x53d8a3;for(_0x41594e=0x0;_0x41594e<_0x247d8e[_0x44a3('0x44')]&&!_0x2cddb6;_0x41594e+=0x1){_0x53d8a3=_0x247d8e[_0x41594e][_0x44a3('0x42')]();if(manager['exists'](_0x53d8a3)){manager[_0x44a3('0x45')](_0x53d8a3);manager[_0x44a3('0x46')](_0x53d8a3);logger['info'](_0x44a3('0x47'),_0x53d8a3);}}logger[_0x44a3('0xb')](_0x44a3('0x48'),JSON[_0x44a3('0x27')](_0x3a3806));for(_0x41594e=0x0;_0x41594e<_0x3a3806[_0x44a3('0x44')];_0x41594e+=0x1){_0x53d8a3=_0x3a3806[_0x41594e][_0x44a3('0x42')]();logger[_0x44a3('0xb')](_0x44a3('0x49'),_0x53d8a3);if(_0x2cddb6){logger[_0x44a3('0xb')](_0x44a3('0x4a'),_0x2cddb6);logger[_0x44a3('0xb')](JSON[_0x44a3('0x27')](_0x2525a5[_0x53d8a3]));BPromise[_0x44a3('0x4b')]()['then'](handleJob(_0x2525a5[_0x53d8a3]));logger[_0x44a3('0xb')](_0x44a3('0x4c'),_0x2525a5[_0x53d8a3][_0x44a3('0x18')],_0x2525a5[_0x53d8a3][_0x44a3('0x4d')]);}else if(_0x2525a5[_0x53d8a3][_0x44a3('0x4d')]&&_0x2525a5[_0x53d8a3][_0x44a3('0x4e')]&&moment()[_0x44a3('0x4f')](_0x2525a5[_0x53d8a3][_0x44a3('0x50')],_0x2525a5[_0x53d8a3][_0x44a3('0x51')])){manager[_0x44a3('0x52')](_0x53d8a3,_0x2525a5[_0x53d8a3][_0x44a3('0x4d')],handleJob(_0x2525a5[_0x53d8a3]));manager[_0x44a3('0x53')](_0x53d8a3);logger['info'](_0x44a3('0x54'),_0x2525a5[_0x53d8a3][_0x44a3('0x18')],_0x2525a5[_0x53d8a3][_0x44a3('0x4d')]);}else if(manager[_0x44a3('0x55')](_0x53d8a3)){manager[_0x44a3('0x45')](_0x53d8a3);manager[_0x44a3('0x46')](_0x53d8a3);logger['info'](_0x44a3('0x56'),_0x2525a5[_0x53d8a3][_0x44a3('0x18')],_0x2525a5[_0x53d8a3][_0x44a3('0x4d')]);}}for(_0x41594e=0x0,_0x53d8a3;_0x41594e<_0x4b2e4c[_0x44a3('0x44')]&&!_0x2cddb6;_0x41594e+=0x1){_0x53d8a3=_0x4b2e4c[_0x41594e][_0x44a3('0x42')]();if(manager[_0x44a3('0x55')](_0x53d8a3)){if(_0x2525a5[_0x53d8a3][_0x44a3('0x4d')]&&_0x2525a5[_0x53d8a3][_0x44a3('0x4e')]&&moment()[_0x44a3('0x4f')](_0x2525a5[_0x53d8a3][_0x44a3('0x50')],_0x2525a5[_0x53d8a3][_0x44a3('0x51')])){manager['update'](_0x53d8a3,_0x2525a5[_0x53d8a3]['cron'],handleJob(_0x2525a5[_0x53d8a3]));logger[_0x44a3('0xb')](_0x44a3('0x57'),_0x2525a5[_0x53d8a3][_0x44a3('0x18')],_0x2525a5[_0x53d8a3][_0x44a3('0x4d')]);}else{manager[_0x44a3('0x45')](_0x53d8a3);manager[_0x44a3('0x46')](_0x53d8a3);logger[_0x44a3('0xb')](_0x44a3('0x56'),_0x2525a5[_0x53d8a3][_0x44a3('0x18')],_0x2525a5[_0x53d8a3]['cron']);}}}})['catch'](function(_0x23815c){logger[_0x44a3('0x2c')](JSON[_0x44a3('0x27')](_0x23815c));});}exports['run']=function(_0x16e57e){return getJobs(_0x16e57e);};exports[_0x44a3('0x53')]=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};
\ No newline at end of file
+var _0xa985=['Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','empty\x20file,\x20email\x20not\x20sent','request','SendMail','then','error','error\x20mail','email\x20sent','data','isNil','subtractUnit','subtractUnit\x20null\x20or\x20undefined','subtract','YYYY-MM-DD\x20HH:mm:ss','scheduled','DefaultReportId','exec\x20defaul\x20report\x20id:%s','runReport','catch','CustomReportId','exec\x20custom\x20report\x20id:%s','no\x20report\x20id','Schedule','keys','jobs','map','toString','keyBy','difference','intersection','length','deleteJob','delete\x20cron','index','my\x20id','resolve','run\x20job','cron','active','isBetween','startAt','endAt','add','add\x20cron','exists','stop\x20cron','stop','run','util','path','cron-job-manager','bluebird','../logger','schedule','client','http','info','Try\x20to\x20send\x20a\x20mail\x20to','email','MailAccount','Smtp','service','host','port','secure','auth','user','pass','format','name','bcc','subtractNumber','join','../../files/reports','savename','%s.%s','basename','zip','status','Sent','message','text','stringify','existsSync','attachments'];(function(_0x2ac812,_0x41d702){var _0x40fcf7=function(_0x32365a){while(--_0x32365a){_0x2ac812['push'](_0x2ac812['shift']());}};_0x40fcf7(++_0x41d702);}(_0xa985,0x1d9));var _0x5a98=function(_0x2064e5,_0x4f6fa2){_0x2064e5=_0x2064e5-0x0;var _0x21a233=_0xa985[_0x2064e5];return _0x21a233;};'use strict';var fs=require('fs');var util=require(_0x5a98('0x0'));var path=require(_0x5a98('0x1'));var _=require('lodash');var moment=require('moment');var CronJobManager=require(_0x5a98('0x2'));var jayson=require('jayson/promise');var BPromise=require(_0x5a98('0x3'));var logger=require(_0x5a98('0x4'))(_0x5a98('0x5'));var db=require('../../mysqldb')['db'];var analyticCustomReportController=require('../../api/analyticCustomReport/analyticCustomReport.controller');var analyticDefaultReportController=require('../../api/analyticDefaultReport/analyticDefaultReport.controller');var client=jayson[_0x5a98('0x6')][_0x5a98('0x7')]({'port':0x232b});var manager=new CronJobManager();function handleSendEmail(_0x4a0fbf,_0x20ff8f){return function(){logger[_0x5a98('0x8')](_0x5a98('0x9'),_0x4a0fbf[_0x5a98('0xa')]);var _0x3021da=!![];var _0x27021d={'tls':{'rejectUnauthorized':![]}};if(_0x4a0fbf[_0x5a98('0xb')][_0x5a98('0xc')][_0x5a98('0xd')]){_0x27021d[_0x5a98('0xd')]=_0x4a0fbf[_0x5a98('0xb')][_0x5a98('0xc')][_0x5a98('0xd')];}else{_0x27021d[_0x5a98('0xe')]=_0x4a0fbf[_0x5a98('0xb')]['Smtp'][_0x5a98('0xe')];_0x27021d['port']=_0x4a0fbf[_0x5a98('0xb')][_0x5a98('0xc')][_0x5a98('0xf')];_0x27021d[_0x5a98('0x10')]=_0x4a0fbf[_0x5a98('0xb')][_0x5a98('0xc')][_0x5a98('0x10')];}if(_0x4a0fbf['MailAccount'][_0x5a98('0xc')]['authentication']){_0x27021d[_0x5a98('0x11')]={'user':_0x4a0fbf[_0x5a98('0xb')][_0x5a98('0xc')][_0x5a98('0x12')],'pass':_0x4a0fbf['MailAccount'][_0x5a98('0xc')][_0x5a98('0x13')]};}var _0x311842={'account':_0x27021d,'message':{'from':util[_0x5a98('0x14')]('\x22%s\x22\x20<%s>',_0x4a0fbf['MailAccount'][_0x5a98('0x15')],_0x4a0fbf[_0x5a98('0xb')][_0x5a98('0xa')]||_0x4a0fbf[_0x5a98('0xb')][_0x5a98('0xc')][_0x5a98('0x12')]),'to':_0x4a0fbf[_0x5a98('0xa')],'cc':_0x4a0fbf['cc'],'bcc':_0x4a0fbf[_0x5a98('0x16')],'subject':util[_0x5a98('0x14')]('Report\x20%s\x20last\x20%s\x20%s',_0x20ff8f[_0x5a98('0x15')],_0x4a0fbf[_0x5a98('0x17')],_0x4a0fbf['subtractUnit'])}};var _0x35a30d=path[_0x5a98('0x18')](__dirname,_0x5a98('0x19'));var _0x5737b6=_0x20ff8f[_0x5a98('0x1a')];var _0x4f81ab=util[_0x5a98('0x14')](_0x5a98('0x1b'),path[_0x5a98('0x1c')](_0x20ff8f[_0x5a98('0x1a')],path['extname'](_0x20ff8f[_0x5a98('0x1a')])),_0x5a98('0x1d'));var _0x25e654=path[_0x5a98('0x18')](_0x35a30d,_0x5737b6);var _0x2a318d=path['join'](_0x35a30d,_0x4f81ab);if(fs['existsSync'](_0x25e654)){_0x20ff8f[_0x5a98('0x1e')]=_0x5a98('0x1f');_0x311842[_0x5a98('0x20')]['attachments']=[{'filename':_0x5737b6,'path':_0x25e654}];_0x311842[_0x5a98('0x20')][_0x5a98('0x21')]=util[_0x5a98('0x14')]('Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a',JSON[_0x5a98('0x22')](_0x20ff8f,null,0x2));}else if(fs[_0x5a98('0x23')](_0x2a318d)){_0x20ff8f[_0x5a98('0x1e')]=_0x5a98('0x1f');_0x311842['message'][_0x5a98('0x24')]=[{'filename':_0x4f81ab,'path':_0x2a318d}];}else{_0x311842[_0x5a98('0x20')][_0x5a98('0x21')]=_0x5a98('0x25');if(!_0x4a0fbf['sendIfEmpty']){_0x3021da=![];logger[_0x5a98('0x8')](_0x5a98('0x26'));}}if(_0x3021da){return client[_0x5a98('0x27')](_0x5a98('0x28'),_0x311842)[_0x5a98('0x29')](function(_0x4be60d){if(_0x4be60d[_0x5a98('0x2a')]){return logger[_0x5a98('0x2a')](_0x5a98('0x2b'),JSON[_0x5a98('0x22')](_0x4be60d));}return logger['info'](_0x5a98('0x2c'));})['catch'](function(_0x3b41d1){return logger[_0x5a98('0x2a')](_0x5a98('0x2b'),JSON[_0x5a98('0x22')](_0x3b41d1));});}};}function handleError(){return function(_0x5246cb){return logger[_0x5a98('0x2a')](JSON[_0x5a98('0x22')](_0x5246cb));};}function handleResult(_0x2b4070){return function(_0x3cd782){logger[_0x5a98('0x8')](_0x5a98('0x2d'),JSON[_0x5a98('0x22')](_0x3cd782));if(_0x2b4070[_0x5a98('0xb')]&&_0x2b4070['MailAccount'][_0x5a98('0xc')]&&!_[_0x5a98('0x2e')](_0x2b4070[_0x5a98('0xa')])){setTimeout(handleSendEmail(_0x2b4070,_0x3cd782),0x3c*0x3e8);}};}function handleJob(_0x118163){return function(){try{if(_['isNil'](_0x118163[_0x5a98('0x17')])){return logger[_0x5a98('0x8')]('subtractNumber\x20null\x20or\x20undefined');}if(_[_0x5a98('0x2e')](_0x118163[_0x5a98('0x2f')])){return logger['info'](_0x5a98('0x30'));}var _0x552724={'startDate':moment()[_0x5a98('0x31')](_0x118163['subtractNumber'],_0x118163[_0x5a98('0x2f')])[_0x5a98('0x14')](_0x5a98('0x32')),'endDate':moment()[_0x5a98('0x14')]('YYYY-MM-DD\x20HH:mm:ss'),'type':_0x5a98('0x33'),'output':_0x118163['output'],'name':_0x118163[_0x5a98('0x15')]};if(!_[_0x5a98('0x2e')](_0x118163[_0x5a98('0x34')])){logger[_0x5a98('0x8')](_0x5a98('0x35'),_0x118163['DefaultReportId']);return analyticDefaultReportController[_0x5a98('0x36')]({'id':_0x118163[_0x5a98('0x34')]},_0x552724)[_0x5a98('0x29')](handleResult(_0x118163))[_0x5a98('0x37')](handleError());}if(!_[_0x5a98('0x2e')](_0x118163[_0x5a98('0x38')])){logger['info'](_0x5a98('0x39'),_0x118163['CustomReportId']);return analyticCustomReportController[_0x5a98('0x36')]({'id':_0x118163[_0x5a98('0x38')]},_0x552724)['then'](handleResult(_0x118163))[_0x5a98('0x37')](handleError());}}catch(_0x494a88){logger[_0x5a98('0x2a')](JSON[_0x5a98('0x22')](_0x494a88));}return logger[_0x5a98('0x8')](_0x5a98('0x3a'));};}function getJobs(_0x3d9df5){var _0x722812={};if(_0x3d9df5){_0x722812['id']=_0x3d9df5;}return db[_0x5a98('0x3b')]['findAll']({'where':_0x722812,'include':[{'model':db[_0x5a98('0xb')],'attributes':['id',_0x5a98('0x15'),_0x5a98('0xa')],'include':[{'model':db['MailServerOut'],'as':'Smtp'}]}]})[_0x5a98('0x29')](function(_0x107e29){var _0x46e238=_[_0x5a98('0x3c')](manager[_0x5a98('0x3d')]);var _0x348513=_[_0x5a98('0x3e')](_0x107e29,function(_0x3dcfa8){return _0x3dcfa8['id'][_0x5a98('0x3f')]();});var _0x55dc4d=_[_0x5a98('0x40')](_0x107e29,function(_0x17acee){return _0x17acee['id'][_0x5a98('0x3f')]();});var _0x4158d9=_0x3d9df5?_0x348513:_[_0x5a98('0x41')](_0x348513,_0x46e238);var _0x2fd889=_[_0x5a98('0x42')](_0x348513,_0x46e238);var _0xcbdefa=_[_0x5a98('0x41')](_0x46e238,_0x348513);var _0x5eceec;var _0x48b1ca;for(_0x5eceec=0x0;_0x5eceec<_0xcbdefa[_0x5a98('0x43')]&&!_0x3d9df5;_0x5eceec+=0x1){_0x48b1ca=_0xcbdefa[_0x5eceec]['toString']();if(manager['exists'](_0x48b1ca)){manager['stop'](_0x48b1ca);manager[_0x5a98('0x44')](_0x48b1ca);logger[_0x5a98('0x8')](_0x5a98('0x45'),_0x48b1ca);}}logger[_0x5a98('0x8')]('toRun',JSON[_0x5a98('0x22')](_0x4158d9));for(_0x5eceec=0x0;_0x5eceec<_0x4158d9['length'];_0x5eceec+=0x1){_0x48b1ca=_0x4158d9[_0x5eceec][_0x5a98('0x3f')]();logger[_0x5a98('0x8')](_0x5a98('0x46'),_0x48b1ca);if(_0x3d9df5){logger['info'](_0x5a98('0x47'),_0x3d9df5);logger[_0x5a98('0x8')](JSON[_0x5a98('0x22')](_0x55dc4d[_0x48b1ca]));BPromise[_0x5a98('0x48')]()[_0x5a98('0x29')](handleJob(_0x55dc4d[_0x48b1ca]));logger[_0x5a98('0x8')](_0x5a98('0x49'),_0x55dc4d[_0x48b1ca][_0x5a98('0x15')],_0x55dc4d[_0x48b1ca][_0x5a98('0x4a')]);}else if(_0x55dc4d[_0x48b1ca][_0x5a98('0x4a')]&&_0x55dc4d[_0x48b1ca][_0x5a98('0x4b')]&&moment()[_0x5a98('0x4c')](_0x55dc4d[_0x48b1ca][_0x5a98('0x4d')],_0x55dc4d[_0x48b1ca][_0x5a98('0x4e')])){manager[_0x5a98('0x4f')](_0x48b1ca,_0x55dc4d[_0x48b1ca][_0x5a98('0x4a')],handleJob(_0x55dc4d[_0x48b1ca]));manager['start'](_0x48b1ca);logger[_0x5a98('0x8')](_0x5a98('0x50'),_0x55dc4d[_0x48b1ca][_0x5a98('0x15')],_0x55dc4d[_0x48b1ca][_0x5a98('0x4a')]);}else if(manager[_0x5a98('0x51')](_0x48b1ca)){manager['stop'](_0x48b1ca);manager['deleteJob'](_0x48b1ca);logger[_0x5a98('0x8')](_0x5a98('0x52'),_0x55dc4d[_0x48b1ca]['name'],_0x55dc4d[_0x48b1ca]['cron']);}}for(_0x5eceec=0x0,_0x48b1ca;_0x5eceec<_0x2fd889[_0x5a98('0x43')]&&!_0x3d9df5;_0x5eceec+=0x1){_0x48b1ca=_0x2fd889[_0x5eceec][_0x5a98('0x3f')]();if(manager['exists'](_0x48b1ca)){if(_0x55dc4d[_0x48b1ca][_0x5a98('0x4a')]&&_0x55dc4d[_0x48b1ca]['active']&&moment()[_0x5a98('0x4c')](_0x55dc4d[_0x48b1ca][_0x5a98('0x4d')],_0x55dc4d[_0x48b1ca][_0x5a98('0x4e')])){manager['update'](_0x48b1ca,_0x55dc4d[_0x48b1ca]['cron'],handleJob(_0x55dc4d[_0x48b1ca]));logger[_0x5a98('0x8')]('update\x20cron',_0x55dc4d[_0x48b1ca][_0x5a98('0x15')],_0x55dc4d[_0x48b1ca][_0x5a98('0x4a')]);}else{manager[_0x5a98('0x53')](_0x48b1ca);manager[_0x5a98('0x44')](_0x48b1ca);logger[_0x5a98('0x8')](_0x5a98('0x52'),_0x55dc4d[_0x48b1ca]['name'],_0x55dc4d[_0x48b1ca][_0x5a98('0x4a')]);}}}})[_0x5a98('0x37')](function(_0x207338){logger[_0x5a98('0x2a')](JSON[_0x5a98('0x22')](_0x207338));});}exports[_0x5a98('0x54')]=function(_0x2cc6cf){return getJobs(_0x2cc6cf);};exports['start']=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};
\ No newline at end of file
index 30ba598..92ee625 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x184b=['bulkCreate','hopper1','contacts2','hopper2','catch','util','../mysqldb','push','Biondo','innocenzo.biondo','@xcally.com','now','CmContact','destroy','then','log','finished\x20populating','CmHopper'];(function(_0x1a7f49,_0x120bad){var _0x10d256=function(_0x5f29af){while(--_0x5f29af){_0x1a7f49['push'](_0x1a7f49['shift']());}};_0x10d256(++_0x120bad);}(_0x184b,0x15b));var _0xb184=function(_0x2ce286,_0x4104e4){_0x2ce286=_0x2ce286-0x0;var _0x4c471f=_0x184b[_0x2ce286];return _0x4c471f;};'use strict';var util=require(_0xb184('0x0'));var db=require(_0xb184('0x1'))['db'];var contacts=[];var hopper=[];var contacts2=[];var hopper2=[];for(var i=0x1;i<=0x4b0;i+=0x1){contacts[_0xb184('0x2')]({'id':i,'firstName':'Innocenzo'+i,'lastName':_0xb184('0x3')+i,'phone':0xf879fb460+i,'email':_0xb184('0x4')+i+_0xb184('0x5')});}for(var i=0x1;i<=0x4b0;i+=0x1){hopper[_0xb184('0x2')]({'id':i,'active':![],'scheduledat':Date[_0xb184('0x6')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date['now'](),'updatedAt':Date[_0xb184('0x6')]()});}for(var i=0x4b1;i<=0x960;i+=0x1){contacts2[_0xb184('0x2')]({'id':i,'firstName':'Innocenzo'+i,'lastName':_0xb184('0x3')+i,'phone':0xf879fb460+i,'email':_0xb184('0x4')+i+_0xb184('0x5')});}for(var i=0x4b1;i<=0x960;i+=0x1){hopper2[_0xb184('0x2')]({'id':i,'active':![],'scheduledat':Date[_0xb184('0x6')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0xb184('0x6')](),'updatedAt':Date[_0xb184('0x6')]()});}db[_0xb184('0x7')][_0xb184('0x8')]({'where':{}})[_0xb184('0x9')](function(){return db['CmContact']['bulkCreate'](contacts);})[_0xb184('0x9')](function(){console[_0xb184('0xa')](_0xb184('0xb'),'contacts1');return db['CmHopper'][_0xb184('0x8')]({'where':{}});})[_0xb184('0x9')](function(){return db[_0xb184('0xc')][_0xb184('0xd')](hopper);})['then'](function(){console[_0xb184('0xa')]('finished\x20populating',_0xb184('0xe'));return db[_0xb184('0x7')]['bulkCreate'](contacts2);})[_0xb184('0x9')](function(){console['log'](_0xb184('0xb'),_0xb184('0xf'));return db['CmHopper'][_0xb184('0xd')](hopper2);})[_0xb184('0x9')](function(){console[_0xb184('0xa')](_0xb184('0xb'),_0xb184('0x10'));})[_0xb184('0x11')](function(_0x3e39c7){console[_0xb184('0xa')](_0x3e39c7);});
\ No newline at end of file
+var _0xabc2=['util','Biondo','innocenzo.biondo','now','Innocenzo','@xcally.com','CmContact','destroy','then','bulkCreate','log','contacts1','CmHopper','finished\x20populating','hopper1','contacts2','catch'];(function(_0x257735,_0x408924){var _0x23a0c0=function(_0x50bb27){while(--_0x50bb27){_0x257735['push'](_0x257735['shift']());}};_0x23a0c0(++_0x408924);}(_0xabc2,0xaa));var _0x2abc=function(_0x5635b2,_0x2fc5ae){_0x5635b2=_0x5635b2-0x0;var _0x2178d0=_0xabc2[_0x5635b2];return _0x2178d0;};'use strict';var util=require(_0x2abc('0x0'));var db=require('../mysqldb')['db'];var contacts=[];var hopper=[];var contacts2=[];var hopper2=[];for(var i=0x1;i<=0x4b0;i+=0x1){contacts['push']({'id':i,'firstName':'Innocenzo'+i,'lastName':_0x2abc('0x1')+i,'phone':0xf879fb460+i,'email':_0x2abc('0x2')+i+'@xcally.com'});}for(var i=0x1;i<=0x4b0;i+=0x1){hopper['push']({'id':i,'active':![],'scheduledat':Date['now'](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0x2abc('0x3')](),'updatedAt':Date[_0x2abc('0x3')]()});}for(var i=0x4b1;i<=0x960;i+=0x1){contacts2['push']({'id':i,'firstName':_0x2abc('0x4')+i,'lastName':_0x2abc('0x1')+i,'phone':0xf879fb460+i,'email':'innocenzo.biondo'+i+_0x2abc('0x5')});}for(var i=0x4b1;i<=0x960;i+=0x1){hopper2['push']({'id':i,'active':![],'scheduledat':Date[_0x2abc('0x3')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0x2abc('0x3')](),'updatedAt':Date['now']()});}db[_0x2abc('0x6')][_0x2abc('0x7')]({'where':{}})[_0x2abc('0x8')](function(){return db[_0x2abc('0x6')][_0x2abc('0x9')](contacts);})[_0x2abc('0x8')](function(){console[_0x2abc('0xa')]('finished\x20populating',_0x2abc('0xb'));return db[_0x2abc('0xc')][_0x2abc('0x7')]({'where':{}});})[_0x2abc('0x8')](function(){return db[_0x2abc('0xc')][_0x2abc('0x9')](hopper);})[_0x2abc('0x8')](function(){console[_0x2abc('0xa')](_0x2abc('0xd'),_0x2abc('0xe'));return db[_0x2abc('0x6')][_0x2abc('0x9')](contacts2);})[_0x2abc('0x8')](function(){console[_0x2abc('0xa')](_0x2abc('0xd'),_0x2abc('0xf'));return db[_0x2abc('0xc')]['bulkCreate'](hopper2);})['then'](function(){console['log'](_0x2abc('0xd'),'hopper2');})[_0x2abc('0x10')](function(_0x45cd2e){console['log'](_0x45cd2e);});
\ No newline at end of file
index bd8c4a8..5c1978c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4170=['add\x20user','push','format','%s%s','agent','%s%s@xcally.com','password','friend','udp','ulaw','yes','/etc/pki/tls/certs/motion.crt','/etc/pki/tls/private/motion.key','actpass','\x22%s\x22\x20<%s>','log'];(function(_0x5894ab,_0x18c6fd){var _0x1af2f8=function(_0x4c6a87){while(--_0x4c6a87){_0x5894ab['push'](_0x5894ab['shift']());}};_0x1af2f8(++_0x18c6fd);}(_0x4170,0x171));var _0x0417=function(_0x66fa37,_0x49ff63){_0x66fa37=_0x66fa37-0x0;var _0x1374a0=_0x4170[_0x66fa37];return _0x1374a0;};'use strict';var util=require('util');var db=require('../mysqldb')['db'];var users=[];for(var i=0x1;i<=0xc8;i+=0x1){users[_0x0417('0x0')]({'name':util[_0x0417('0x1')](_0x0417('0x2'),_0x0417('0x3'),i),'fullname':util[_0x0417('0x1')](_0x0417('0x2'),'agent',i),'email':util['format'](_0x0417('0x4'),_0x0417('0x3'),i),'role':'agent','password':_0x0417('0x5'),'internal':0xfa0+i,'type':_0x0417('0x6'),'transport':[_0x0417('0x7'),'ws','wss'],'disallow':['all'],'allow':[_0x0417('0x8')],'defaultuser':util[_0x0417('0x1')](_0x0417('0x2'),_0x0417('0x3'),i),'encryption':_0x0417('0x9'),'avpf':_0x0417('0x9'),'force_avp':_0x0417('0x9'),'icesupport':_0x0417('0x9'),'dtlsenable':_0x0417('0x9'),'dtlsverify':'no','dtlscertfile':_0x0417('0xa'),'dtlsprivatekey':_0x0417('0xb'),'dtlssetup':_0x0417('0xc'),'callerid':util[_0x0417('0x1')](_0x0417('0xd'),util[_0x0417('0x1')]('%s%s','agent',i),0xfa0+i)});}db['User']['bulkCreate'](users)['then'](function(){console[_0x0417('0xe')](_0x0417('0xf'));})['catch'](function(_0x4bc96e){console[_0x0417('0xe')](_0x4bc96e);});
\ No newline at end of file
+var _0x5141=['util','../mysqldb','push','format','%s%s','agent','%s%s@xcally.com','password','friend','udp','wss','all','ulaw','yes','/etc/pki/tls/certs/motion.crt','/etc/pki/tls/private/motion.key','actpass','\x22%s\x22\x20<%s>','bulkCreate','then','log','catch'];(function(_0x35eee4,_0x8b598e){var _0x1dd4ed=function(_0x36c5ee){while(--_0x36c5ee){_0x35eee4['push'](_0x35eee4['shift']());}};_0x1dd4ed(++_0x8b598e);}(_0x5141,0x160));var _0x1514=function(_0xe7ae8d,_0x8eaf11){_0xe7ae8d=_0xe7ae8d-0x0;var _0x2e07d3=_0x5141[_0xe7ae8d];return _0x2e07d3;};'use strict';var util=require(_0x1514('0x0'));var db=require(_0x1514('0x1'))['db'];var users=[];for(var i=0x1;i<=0xc8;i+=0x1){users[_0x1514('0x2')]({'name':util[_0x1514('0x3')](_0x1514('0x4'),_0x1514('0x5'),i),'fullname':util[_0x1514('0x3')](_0x1514('0x4'),_0x1514('0x5'),i),'email':util['format'](_0x1514('0x6'),_0x1514('0x5'),i),'role':_0x1514('0x5'),'password':_0x1514('0x7'),'internal':0xfa0+i,'type':_0x1514('0x8'),'transport':[_0x1514('0x9'),'ws',_0x1514('0xa')],'disallow':[_0x1514('0xb')],'allow':[_0x1514('0xc')],'defaultuser':util['format'](_0x1514('0x4'),'agent',i),'encryption':_0x1514('0xd'),'avpf':_0x1514('0xd'),'force_avp':_0x1514('0xd'),'icesupport':'yes','dtlsenable':_0x1514('0xd'),'dtlsverify':'no','dtlscertfile':_0x1514('0xe'),'dtlsprivatekey':_0x1514('0xf'),'dtlssetup':_0x1514('0x10'),'callerid':util[_0x1514('0x3')](_0x1514('0x11'),util[_0x1514('0x3')](_0x1514('0x4'),_0x1514('0x5'),i),0xfa0+i)});}db['User'][_0x1514('0x12')](users)[_0x1514('0x13')](function(){console[_0x1514('0x14')]('add\x20user');})[_0x1514('0x15')](function(_0x2ea3ff){console['log'](_0x2ea3ff);});
\ No newline at end of file
index e25f969..41f617f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x41a4=['join','connection','setMaxListeners','request','remoteAddress','connectedAt','SocketIO\x20','nsp','address','disconnect','DISCONNECTED','CONNECTED','lodash','bluebird','./environment','name','Agents','User','role','telephone','agent','type','ivr','findOne','then','autoAssociation','VoiceQueues','FaxQueues','SmsQueues','MailQueues','OpenchannelQueues','Telephones','findAll','Trunks','IvrCampaigns','UserProfileResource','resourceId','Campaign','where','format','%s:queue:%s','length','handshake','query','find','userProfileId','ChatInteraction','ChatInteractions','MailInteraction','MailInteractions','FaxInteraction','SmsInteraction','OpenchannelInteractions','admin','voice:inbound','hasOwnProperty','include','push','VoiceQueue','ChatQueue','FaxQueue','MailQueue','Trunk','ChatQueues','voice:outbound','getChatQueues','getFaxQueues','getSmsQueues','getMailQueues','getOpenchannelQueues','all','voice','chat','fax','sms','mail','telephone:%s','campaign:%s:%s','leave','map','removeChatInteractions','user_has_chat_interactions:remove','removeMailInteractions','user_has_mail_interactions:remove','FaxInteractions','removeFaxInteractions','SmsInteractions','removeSmsInteractions','emit','user_has_sms_interactions:remove','removeOpenchannelInteractions','user_has_openchannel_interactions:remove','log'];(function(_0x477dc7,_0x471354){var _0x573a6a=function(_0x3e23b6){while(--_0x3e23b6){_0x477dc7['push'](_0x477dc7['shift']());}};_0x573a6a(++_0x471354);}(_0x41a4,0x180));var _0x441a=function(_0x3ea66b,_0x325020){_0x3ea66b=_0x3ea66b-0x0;var _0x549005=_0x41a4[_0x3ea66b];return _0x549005;};'use strict';var _=require(_0x441a('0x0'));var util=require('util');var BPromise=require(_0x441a('0x1'));var db=require('../mysqldb')['db'];var config=require(_0x441a('0x2'));var queryQueues={'attributes':['id',_0x441a('0x3')],'include':[{'as':_0x441a('0x4'),'model':db[_0x441a('0x5')],'attributes':['id',_0x441a('0x3'),_0x441a('0x6')],'raw':!![],'where':{'role':'agent'},'required':![]}]};var queryTelephones={'raw':!![],'attributes':['id',_0x441a('0x3')],'where':{'role':_0x441a('0x7')}};var queryTrunks={'raw':!![],'attributes':['id',_0x441a('0x3')]};var queryAgents={'raw':!![],'attributes':['id',_0x441a('0x3')],'where':{'role':_0x441a('0x8')}};var queryCampaigns={'raw':!![],'attributes':['id',_0x441a('0x3'),_0x441a('0x9')],'where':{'type':_0x441a('0xa')}};function getAssociatedResources(_0x56d901,_0x4d0cfd,_0x25c47c){return db['UserProfileSection'][_0x441a('0xb')]({'where':{'name':_0x56d901,'userProfileId':_0x4d0cfd},'raw':!![]})[_0x441a('0xc')](function(_0xd346b7){if(_0xd346b7){if(_0xd346b7[_0x441a('0xd')]){switch(_0x56d901){case _0x441a('0xe'):case'ChatQueues':case _0x441a('0xf'):case _0x441a('0x10'):case _0x441a('0x11'):case _0x441a('0x12'):return db[_0x25c47c]['findAll'](queryQueues);case _0x441a('0x13'):return db[_0x25c47c][_0x441a('0x14')](queryTelephones);case _0x441a('0x15'):return db[_0x25c47c]['findAll'](queryTrunks);case _0x441a('0x16'):return db[_0x25c47c][_0x441a('0x14')](queryCampaigns);}}else{return db[_0x441a('0x17')][_0x441a('0x14')]({'attributes':[_0x441a('0x18')],'where':{'sectionId':_0xd346b7['id']},'raw':!![]})[_0x441a('0xc')](function(_0x2bc06b){if(_0x2bc06b){var _0x17d4e6={'where':{'id':_['map'](_0x2bc06b,_0x441a('0x18'))},'raw':!![]};switch(_0x25c47c){case _0x441a('0x5'):_0x17d4e6['where']['role']=_0x441a('0x7');break;case _0x441a('0x19'):_0x17d4e6[_0x441a('0x1a')]['type']=_0x441a('0xa');break;}return db[_0x25c47c]['findAll'](_0x17d4e6);}else{return[];}});}}else{return[];}})['then'](function(_0x71e0c8){return _0x71e0c8;});}function joinOrLeaveQueues(_0x37dd49,_0x26794f,_0x263870,_0x4ac441){_0x37dd49[_0x26794f](util[_0x441a('0x1b')](_0x441a('0x1c'),_0x263870,_0x4ac441[_0x441a('0x3')]));if(_0x4ac441['Agents']){for(var _0x3e36af=0x0;_0x3e36af<_0x4ac441[_0x441a('0x4')][_0x441a('0x1d')];_0x3e36af+=0x1){_0x37dd49[_0x26794f](util[_0x441a('0x1b')]('user:%s',_0x4ac441[_0x441a('0x4')][_0x3e36af][_0x441a('0x3')]));}}}function joinOrLeave(_0xc586b7,_0x5a5e4f,_0x1900a5){var _0xec2f24;if(_0xc586b7[_0x441a('0x1e')][_0x441a('0x1f')]['id']){db[_0x441a('0x5')][_0x441a('0x20')]({'attributes':['id','name',_0x441a('0x6'),_0x441a('0x21')],'where':{'id':_0xc586b7[_0x441a('0x1e')][_0x441a('0x1f')]['id']},'include':[{'model':db[_0x441a('0x22')],'as':_0x441a('0x23'),'attributes':['id'],'raw':!![]},{'model':db[_0x441a('0x24')],'as':_0x441a('0x25'),'attributes':['id'],'raw':!![]},{'model':db[_0x441a('0x26')],'as':'FaxInteractions','attributes':['id'],'raw':!![]},{'model':db[_0x441a('0x27')],'as':'SmsInteractions','attributes':['id'],'raw':!![]},{'model':db['OpenchannelInteraction'],'as':_0x441a('0x28'),'attributes':['id'],'raw':!![]}]})['then'](function(_0x5908f6){if(_0x5908f6){_0xec2f24=_0x5908f6;_0xc586b7[_0x5a5e4f](util[_0x441a('0x1b')]('user:%s',_0x5908f6['name']));var _0x42dc55=[];switch(_0x5908f6[_0x441a('0x6')]){case _0x441a('0x29'):_0xc586b7[_0x5a5e4f](_0x441a('0x2a'));_0xc586b7[_0x5a5e4f]('voice:outbound');if(queryQueues[_0x441a('0x2b')](_0x441a('0x2c'))){delete queryQueues[_0x441a('0x2c')];}_0x42dc55[_0x441a('0x2d')](db[_0x441a('0x2e')]['findAll'](queryQueues));_0x42dc55['push'](db[_0x441a('0x2f')][_0x441a('0x14')](queryQueues));_0x42dc55[_0x441a('0x2d')](db[_0x441a('0x30')][_0x441a('0x14')](queryQueues));_0x42dc55[_0x441a('0x2d')](db['SmsQueue'][_0x441a('0x14')](queryQueues));_0x42dc55['push'](db[_0x441a('0x31')][_0x441a('0x14')](queryQueues));_0x42dc55[_0x441a('0x2d')](db['OpenchannelQueue'][_0x441a('0x14')](queryQueues));_0x42dc55['push'](db['User']['findAll'](queryTelephones));_0x42dc55[_0x441a('0x2d')](db[_0x441a('0x32')][_0x441a('0x14')](queryTrunks));_0x42dc55[_0x441a('0x2d')](db[_0x441a('0x19')]['findAll'](queryCampaigns));_0x42dc55[_0x441a('0x2d')](db[_0x441a('0x5')][_0x441a('0x14')](queryAgents));break;case'user':_0xc586b7[_0x5a5e4f](_0x441a('0x2a'));_0xc586b7[_0x5a5e4f]('voice:outbound');_0x42dc55['push'](getAssociatedResources('VoiceQueues',_0x5908f6[_0x441a('0x21')],_0x441a('0x2e')));_0x42dc55['push'](getAssociatedResources(_0x441a('0x33'),_0x5908f6[_0x441a('0x21')],_0x441a('0x2f')));_0x42dc55[_0x441a('0x2d')](getAssociatedResources('FaxQueues',_0x5908f6[_0x441a('0x21')],'FaxQueue'));_0x42dc55['push'](getAssociatedResources('SmsQueues',_0x5908f6[_0x441a('0x21')],'SmsQueue'));_0x42dc55[_0x441a('0x2d')](getAssociatedResources(_0x441a('0x11'),_0x5908f6[_0x441a('0x21')],_0x441a('0x31')));_0x42dc55[_0x441a('0x2d')](getAssociatedResources(_0x441a('0x12'),_0x5908f6[_0x441a('0x21')],'OpenchannelQueue'));_0x42dc55[_0x441a('0x2d')](getAssociatedResources('Telephones',_0x5908f6[_0x441a('0x21')],_0x441a('0x5')));_0x42dc55['push'](getAssociatedResources(_0x441a('0x15'),_0x5908f6[_0x441a('0x21')],_0x441a('0x32')));_0x42dc55[_0x441a('0x2d')](getAssociatedResources(_0x441a('0x16'),_0x5908f6[_0x441a('0x21')],_0x441a('0x19')));_0x42dc55[_0x441a('0x2d')](db[_0x441a('0x5')]['findAll'](queryAgents));break;case _0x441a('0x8'):_0xc586b7[_0x5a5e4f]('voice:inbound');_0xc586b7[_0x5a5e4f](_0x441a('0x34'));_0x42dc55[_0x441a('0x2d')](_0x5908f6['getVoiceQueues']({'attributes':['id','name']}));_0x42dc55[_0x441a('0x2d')](_0x5908f6[_0x441a('0x35')]({'attributes':['id',_0x441a('0x3')]}));_0x42dc55['push'](_0x5908f6[_0x441a('0x36')]({'attributes':['id',_0x441a('0x3')]}));_0x42dc55[_0x441a('0x2d')](_0x5908f6[_0x441a('0x37')]({'attributes':['id',_0x441a('0x3')]}));_0x42dc55[_0x441a('0x2d')](_0x5908f6[_0x441a('0x38')]({'attributes':['id','name']}));_0x42dc55[_0x441a('0x2d')](_0x5908f6[_0x441a('0x39')]({'attributes':['id','name']}));break;}return BPromise[_0x441a('0x3a')](_0x42dc55);}})[_0x441a('0xc')](function(_0x284ade){if(_0x284ade&&_0x284ade[_0x441a('0x1d')]){for(var _0x574149=0x0;_0x574149<_0x284ade[_0x441a('0x1d')];_0x574149+=0x1){for(var _0x56c7d5=0x0;_0x56c7d5<_0x284ade[_0x574149][_0x441a('0x1d')];_0x56c7d5+=0x1){switch(_0x574149){case 0x0:joinOrLeaveQueues(_0xc586b7,_0x5a5e4f,_0x441a('0x3b'),_0x284ade[_0x574149][_0x56c7d5]);break;case 0x1:joinOrLeaveQueues(_0xc586b7,_0x5a5e4f,_0x441a('0x3c'),_0x284ade[_0x574149][_0x56c7d5]);break;case 0x2:joinOrLeaveQueues(_0xc586b7,_0x5a5e4f,_0x441a('0x3d'),_0x284ade[_0x574149][_0x56c7d5]);break;case 0x3:joinOrLeaveQueues(_0xc586b7,_0x5a5e4f,_0x441a('0x3e'),_0x284ade[_0x574149][_0x56c7d5]);break;case 0x4:joinOrLeaveQueues(_0xc586b7,_0x5a5e4f,_0x441a('0x3f'),_0x284ade[_0x574149][_0x56c7d5]);break;case 0x5:joinOrLeaveQueues(_0xc586b7,_0x5a5e4f,'openchannel',_0x284ade[_0x574149][_0x56c7d5]);break;case 0x6:_0xc586b7[_0x5a5e4f](util[_0x441a('0x1b')](_0x441a('0x40'),_0x284ade[_0x574149][_0x56c7d5]['name']));break;case 0x7:_0xc586b7[_0x5a5e4f](util['format']('trunk:%s',_0x284ade[_0x574149][_0x56c7d5][_0x441a('0x3')]));break;case 0x8:_0xc586b7[_0x5a5e4f](util['format'](_0x441a('0x41'),_0x284ade[_0x574149][_0x56c7d5][_0x441a('0x9')],_0x284ade[_0x574149][_0x56c7d5]['name']));break;case 0x9:_0xc586b7[_0x5a5e4f](util[_0x441a('0x1b')]('user:%s',_0x284ade[_0x574149][_0x56c7d5][_0x441a('0x3')]));break;}}}}})[_0x441a('0xc')](function(){if(_0x5a5e4f===_0x441a('0x42')){var _0x1a887d=_[_0x441a('0x43')](_0xec2f24[_0x441a('0x23')],'id');return _0xec2f24[_0x441a('0x44')](_0x1a887d)[_0x441a('0xc')](function(){for(var _0xbd5116=0x0;_0xbd5116<_0x1a887d['length'];_0xbd5116+=0x1){_0x1900a5['emit'](_0x441a('0x45'),{'ChatInteractionId':Number(_0x1a887d[_0xbd5116]),'UserId':Number(_0xec2f24['id'])});}});}})['then'](function(){if(_0x5a5e4f==='leave'){var _0x13b676=_[_0x441a('0x43')](_0xec2f24['MailInteractions'],'id');return _0xec2f24[_0x441a('0x46')](_0x13b676)[_0x441a('0xc')](function(){for(var _0x3f04d4=0x0;_0x3f04d4<_0x13b676[_0x441a('0x1d')];_0x3f04d4+=0x1){_0x1900a5['emit'](_0x441a('0x47'),{'MailInteractionId':Number(_0x13b676[_0x3f04d4]),'UserId':Number(_0xec2f24['id'])});}});}})[_0x441a('0xc')](function(){if(_0x5a5e4f==='leave'){var _0x46fa85=_[_0x441a('0x43')](_0xec2f24[_0x441a('0x48')],'id');return _0xec2f24[_0x441a('0x49')](_0x46fa85)['then'](function(){for(var _0x564869=0x0;_0x564869<_0x46fa85[_0x441a('0x1d')];_0x564869+=0x1){_0x1900a5['emit']('user_has_fax_interactions:remove',{'FaxInteractionId':Number(_0x46fa85[_0x564869]),'UserId':Number(_0xec2f24['id'])});}});}})[_0x441a('0xc')](function(){if(_0x5a5e4f===_0x441a('0x42')){var _0x25a4e0=_[_0x441a('0x43')](_0xec2f24[_0x441a('0x4a')],'id');return _0xec2f24[_0x441a('0x4b')](_0x25a4e0)[_0x441a('0xc')](function(){for(var _0x472b48=0x0;_0x472b48<_0x25a4e0[_0x441a('0x1d')];_0x472b48+=0x1){_0x1900a5[_0x441a('0x4c')](_0x441a('0x4d'),{'SmsInteractionId':Number(_0x25a4e0[_0x472b48]),'UserId':Number(_0xec2f24['id'])});}});}})[_0x441a('0xc')](function(){if(_0x5a5e4f===_0x441a('0x42')){var _0xd8844f=_[_0x441a('0x43')](_0xec2f24[_0x441a('0x28')],'id');return _0xec2f24[_0x441a('0x4e')](_0xd8844f)[_0x441a('0xc')](function(){for(var _0x36a91f=0x0;_0x36a91f<_0xd8844f[_0x441a('0x1d')];_0x36a91f+=0x1){_0x1900a5['emit'](_0x441a('0x4f'),{'OpenchannelInteractionId':Number(_0xd8844f[_0x36a91f]),'UserId':Number(_0xec2f24['id'])});}});}})['catch'](function(_0x1bf959){_0xc586b7[_0x441a('0x50')](_0x1bf959);});}}function onDisconnect(_0x209ffe,_0x37cfc3){joinOrLeave(_0x209ffe,_0x441a('0x42'),_0x37cfc3);}function onConnect(_0x3b2223){joinOrLeave(_0x3b2223,_0x441a('0x51'));}exports['default']=function(_0x56cae0){_0x56cae0['on'](_0x441a('0x52'),function(_0x5d3a8e){_0x5d3a8e[_0x441a('0x53')](0x0);_0x5d3a8e['address']=_0x5d3a8e[_0x441a('0x54')][_0x441a('0x52')][_0x441a('0x55')]+':'+_0x5d3a8e[_0x441a('0x54')][_0x441a('0x52')]['remotePort'];_0x5d3a8e[_0x441a('0x56')]=new Date();_0x5d3a8e[_0x441a('0x50')]=function(_0x518209){console[_0x441a('0x50')](_0x441a('0x57')+_0x5d3a8e[_0x441a('0x58')][_0x441a('0x3')]+'['+_0x5d3a8e[_0x441a('0x59')]+']',_0x518209);};_0x5d3a8e['on'](_0x441a('0x5a'),function(){onDisconnect(_0x5d3a8e,_0x56cae0);_0x5d3a8e['log'](_0x441a('0x5b'));});onConnect(_0x5d3a8e);_0x5d3a8e[_0x441a('0x50')](_0x441a('0x5c'));});};
\ No newline at end of file
+var _0x66fc=['Agents','User','role','agent','type','ivr','UserProfileSection','findOne','then','autoAssociation','ChatQueues','FaxQueues','SmsQueues','MailQueues','findAll','Telephones','Trunks','IvrCampaigns','UserProfileResource','resourceId','map','where','Campaign','format','length','user:%s','query','find','userProfileId','handshake','ChatInteraction','ChatInteractions','MailInteraction','MailInteractions','FaxInteraction','FaxInteractions','SmsInteraction','SmsInteractions','OpenchannelInteraction','OpenchannelInteractions','admin','voice:inbound','hasOwnProperty','include','push','VoiceQueue','FaxQueue','OpenchannelQueue','user','voice:outbound','SmsQueue','MailQueue','OpenchannelQueues','Trunk','getChatQueues','getSmsQueues','getOpenchannelQueues','all','chat','fax','sms','mail','openchannel','telephone:%s','trunk:%s','campaign:%s:%s','leave','removeChatInteractions','user_has_chat_interactions:remove','emit','user_has_mail_interactions:remove','removeFaxInteractions','user_has_fax_interactions:remove','user_has_sms_interactions:remove','user_has_openchannel_interactions:remove','join','default','connection','setMaxListeners','address','request','remoteAddress','remotePort','connectedAt','SocketIO\x20','disconnect','CONNECTED','lodash','util','bluebird','../mysqldb','./environment','name'];(function(_0x3b2898,_0x43960f){var _0x2ddf91=function(_0x47ecce){while(--_0x47ecce){_0x3b2898['push'](_0x3b2898['shift']());}};_0x2ddf91(++_0x43960f);}(_0x66fc,0x111));var _0xc66f=function(_0x40e93b,_0x1a2491){_0x40e93b=_0x40e93b-0x0;var _0x456d29=_0x66fc[_0x40e93b];return _0x456d29;};'use strict';var _=require(_0xc66f('0x0'));var util=require(_0xc66f('0x1'));var BPromise=require(_0xc66f('0x2'));var db=require(_0xc66f('0x3'))['db'];var config=require(_0xc66f('0x4'));var queryQueues={'attributes':['id',_0xc66f('0x5')],'include':[{'as':_0xc66f('0x6'),'model':db[_0xc66f('0x7')],'attributes':['id',_0xc66f('0x5'),_0xc66f('0x8')],'raw':!![],'where':{'role':_0xc66f('0x9')},'required':![]}]};var queryTelephones={'raw':!![],'attributes':['id',_0xc66f('0x5')],'where':{'role':'telephone'}};var queryTrunks={'raw':!![],'attributes':['id','name']};var queryAgents={'raw':!![],'attributes':['id',_0xc66f('0x5')],'where':{'role':_0xc66f('0x9')}};var queryCampaigns={'raw':!![],'attributes':['id',_0xc66f('0x5'),_0xc66f('0xa')],'where':{'type':_0xc66f('0xb')}};function getAssociatedResources(_0x176562,_0xc08b42,_0x2ec23e){return db[_0xc66f('0xc')][_0xc66f('0xd')]({'where':{'name':_0x176562,'userProfileId':_0xc08b42},'raw':!![]})[_0xc66f('0xe')](function(_0x1ef81f){if(_0x1ef81f){if(_0x1ef81f[_0xc66f('0xf')]){switch(_0x176562){case'VoiceQueues':case _0xc66f('0x10'):case _0xc66f('0x11'):case _0xc66f('0x12'):case _0xc66f('0x13'):case'OpenchannelQueues':return db[_0x2ec23e][_0xc66f('0x14')](queryQueues);case _0xc66f('0x15'):return db[_0x2ec23e][_0xc66f('0x14')](queryTelephones);case _0xc66f('0x16'):return db[_0x2ec23e][_0xc66f('0x14')](queryTrunks);case _0xc66f('0x17'):return db[_0x2ec23e][_0xc66f('0x14')](queryCampaigns);}}else{return db[_0xc66f('0x18')]['findAll']({'attributes':[_0xc66f('0x19')],'where':{'sectionId':_0x1ef81f['id']},'raw':!![]})['then'](function(_0x1ce9c3){if(_0x1ce9c3){var _0x592e03={'where':{'id':_[_0xc66f('0x1a')](_0x1ce9c3,'resourceId')},'raw':!![]};switch(_0x2ec23e){case'User':_0x592e03[_0xc66f('0x1b')][_0xc66f('0x8')]='telephone';break;case _0xc66f('0x1c'):_0x592e03[_0xc66f('0x1b')]['type']='ivr';break;}return db[_0x2ec23e][_0xc66f('0x14')](_0x592e03);}else{return[];}});}}else{return[];}})['then'](function(_0x59b27a){return _0x59b27a;});}function joinOrLeaveQueues(_0x552667,_0x429b81,_0x52782e,_0x4ec7ac){_0x552667[_0x429b81](util[_0xc66f('0x1d')]('%s:queue:%s',_0x52782e,_0x4ec7ac[_0xc66f('0x5')]));if(_0x4ec7ac['Agents']){for(var _0x2dbf16=0x0;_0x2dbf16<_0x4ec7ac[_0xc66f('0x6')][_0xc66f('0x1e')];_0x2dbf16+=0x1){_0x552667[_0x429b81](util[_0xc66f('0x1d')](_0xc66f('0x1f'),_0x4ec7ac['Agents'][_0x2dbf16]['name']));}}}function joinOrLeave(_0x19164a,_0x233155,_0x1a005c){var _0x5658d3;if(_0x19164a['handshake'][_0xc66f('0x20')]['id']){db[_0xc66f('0x7')][_0xc66f('0x21')]({'attributes':['id',_0xc66f('0x5'),_0xc66f('0x8'),_0xc66f('0x22')],'where':{'id':_0x19164a[_0xc66f('0x23')][_0xc66f('0x20')]['id']},'include':[{'model':db[_0xc66f('0x24')],'as':_0xc66f('0x25'),'attributes':['id'],'raw':!![]},{'model':db[_0xc66f('0x26')],'as':_0xc66f('0x27'),'attributes':['id'],'raw':!![]},{'model':db[_0xc66f('0x28')],'as':_0xc66f('0x29'),'attributes':['id'],'raw':!![]},{'model':db[_0xc66f('0x2a')],'as':_0xc66f('0x2b'),'attributes':['id'],'raw':!![]},{'model':db[_0xc66f('0x2c')],'as':_0xc66f('0x2d'),'attributes':['id'],'raw':!![]}]})[_0xc66f('0xe')](function(_0x33b467){if(_0x33b467){_0x5658d3=_0x33b467;_0x19164a[_0x233155](util['format']('user:%s',_0x33b467[_0xc66f('0x5')]));var _0x329319=[];switch(_0x33b467['role']){case _0xc66f('0x2e'):_0x19164a[_0x233155](_0xc66f('0x2f'));_0x19164a[_0x233155]('voice:outbound');if(queryQueues[_0xc66f('0x30')](_0xc66f('0x31'))){delete queryQueues[_0xc66f('0x31')];}_0x329319[_0xc66f('0x32')](db[_0xc66f('0x33')][_0xc66f('0x14')](queryQueues));_0x329319[_0xc66f('0x32')](db['ChatQueue']['findAll'](queryQueues));_0x329319[_0xc66f('0x32')](db[_0xc66f('0x34')][_0xc66f('0x14')](queryQueues));_0x329319[_0xc66f('0x32')](db['SmsQueue']['findAll'](queryQueues));_0x329319[_0xc66f('0x32')](db['MailQueue'][_0xc66f('0x14')](queryQueues));_0x329319[_0xc66f('0x32')](db[_0xc66f('0x35')][_0xc66f('0x14')](queryQueues));_0x329319[_0xc66f('0x32')](db[_0xc66f('0x7')][_0xc66f('0x14')](queryTelephones));_0x329319[_0xc66f('0x32')](db['Trunk'][_0xc66f('0x14')](queryTrunks));_0x329319[_0xc66f('0x32')](db[_0xc66f('0x1c')]['findAll'](queryCampaigns));_0x329319[_0xc66f('0x32')](db[_0xc66f('0x7')][_0xc66f('0x14')](queryAgents));break;case _0xc66f('0x36'):_0x19164a[_0x233155](_0xc66f('0x2f'));_0x19164a[_0x233155](_0xc66f('0x37'));_0x329319[_0xc66f('0x32')](getAssociatedResources('VoiceQueues',_0x33b467[_0xc66f('0x22')],_0xc66f('0x33')));_0x329319['push'](getAssociatedResources('ChatQueues',_0x33b467[_0xc66f('0x22')],'ChatQueue'));_0x329319['push'](getAssociatedResources(_0xc66f('0x11'),_0x33b467[_0xc66f('0x22')],_0xc66f('0x34')));_0x329319['push'](getAssociatedResources(_0xc66f('0x12'),_0x33b467['userProfileId'],_0xc66f('0x38')));_0x329319['push'](getAssociatedResources(_0xc66f('0x13'),_0x33b467[_0xc66f('0x22')],_0xc66f('0x39')));_0x329319[_0xc66f('0x32')](getAssociatedResources(_0xc66f('0x3a'),_0x33b467[_0xc66f('0x22')],_0xc66f('0x35')));_0x329319[_0xc66f('0x32')](getAssociatedResources(_0xc66f('0x15'),_0x33b467[_0xc66f('0x22')],_0xc66f('0x7')));_0x329319[_0xc66f('0x32')](getAssociatedResources(_0xc66f('0x16'),_0x33b467[_0xc66f('0x22')],_0xc66f('0x3b')));_0x329319[_0xc66f('0x32')](getAssociatedResources('IvrCampaigns',_0x33b467['userProfileId'],_0xc66f('0x1c')));_0x329319['push'](db['User'][_0xc66f('0x14')](queryAgents));break;case _0xc66f('0x9'):_0x19164a[_0x233155](_0xc66f('0x2f'));_0x19164a[_0x233155]('voice:outbound');_0x329319[_0xc66f('0x32')](_0x33b467['getVoiceQueues']({'attributes':['id',_0xc66f('0x5')]}));_0x329319['push'](_0x33b467[_0xc66f('0x3c')]({'attributes':['id','name']}));_0x329319[_0xc66f('0x32')](_0x33b467['getFaxQueues']({'attributes':['id',_0xc66f('0x5')]}));_0x329319[_0xc66f('0x32')](_0x33b467[_0xc66f('0x3d')]({'attributes':['id',_0xc66f('0x5')]}));_0x329319[_0xc66f('0x32')](_0x33b467['getMailQueues']({'attributes':['id',_0xc66f('0x5')]}));_0x329319['push'](_0x33b467[_0xc66f('0x3e')]({'attributes':['id',_0xc66f('0x5')]}));break;}return BPromise[_0xc66f('0x3f')](_0x329319);}})[_0xc66f('0xe')](function(_0x2261b7){if(_0x2261b7&&_0x2261b7[_0xc66f('0x1e')]){for(var _0x1933f2=0x0;_0x1933f2<_0x2261b7[_0xc66f('0x1e')];_0x1933f2+=0x1){for(var _0x2946f5=0x0;_0x2946f5<_0x2261b7[_0x1933f2][_0xc66f('0x1e')];_0x2946f5+=0x1){switch(_0x1933f2){case 0x0:joinOrLeaveQueues(_0x19164a,_0x233155,'voice',_0x2261b7[_0x1933f2][_0x2946f5]);break;case 0x1:joinOrLeaveQueues(_0x19164a,_0x233155,_0xc66f('0x40'),_0x2261b7[_0x1933f2][_0x2946f5]);break;case 0x2:joinOrLeaveQueues(_0x19164a,_0x233155,_0xc66f('0x41'),_0x2261b7[_0x1933f2][_0x2946f5]);break;case 0x3:joinOrLeaveQueues(_0x19164a,_0x233155,_0xc66f('0x42'),_0x2261b7[_0x1933f2][_0x2946f5]);break;case 0x4:joinOrLeaveQueues(_0x19164a,_0x233155,_0xc66f('0x43'),_0x2261b7[_0x1933f2][_0x2946f5]);break;case 0x5:joinOrLeaveQueues(_0x19164a,_0x233155,_0xc66f('0x44'),_0x2261b7[_0x1933f2][_0x2946f5]);break;case 0x6:_0x19164a[_0x233155](util['format'](_0xc66f('0x45'),_0x2261b7[_0x1933f2][_0x2946f5][_0xc66f('0x5')]));break;case 0x7:_0x19164a[_0x233155](util['format'](_0xc66f('0x46'),_0x2261b7[_0x1933f2][_0x2946f5][_0xc66f('0x5')]));break;case 0x8:_0x19164a[_0x233155](util[_0xc66f('0x1d')](_0xc66f('0x47'),_0x2261b7[_0x1933f2][_0x2946f5][_0xc66f('0xa')],_0x2261b7[_0x1933f2][_0x2946f5]['name']));break;case 0x9:_0x19164a[_0x233155](util[_0xc66f('0x1d')](_0xc66f('0x1f'),_0x2261b7[_0x1933f2][_0x2946f5][_0xc66f('0x5')]));break;}}}}})[_0xc66f('0xe')](function(){if(_0x233155===_0xc66f('0x48')){var _0x239157=_['map'](_0x5658d3[_0xc66f('0x25')],'id');return _0x5658d3[_0xc66f('0x49')](_0x239157)[_0xc66f('0xe')](function(){for(var _0x51ec1b=0x0;_0x51ec1b<_0x239157['length'];_0x51ec1b+=0x1){_0x1a005c['emit'](_0xc66f('0x4a'),{'ChatInteractionId':Number(_0x239157[_0x51ec1b]),'UserId':Number(_0x5658d3['id'])});}});}})[_0xc66f('0xe')](function(){if(_0x233155===_0xc66f('0x48')){var _0xdc1d92=_[_0xc66f('0x1a')](_0x5658d3['MailInteractions'],'id');return _0x5658d3['removeMailInteractions'](_0xdc1d92)['then'](function(){for(var _0x466575=0x0;_0x466575<_0xdc1d92['length'];_0x466575+=0x1){_0x1a005c[_0xc66f('0x4b')](_0xc66f('0x4c'),{'MailInteractionId':Number(_0xdc1d92[_0x466575]),'UserId':Number(_0x5658d3['id'])});}});}})[_0xc66f('0xe')](function(){if(_0x233155===_0xc66f('0x48')){var _0x3c27f2=_['map'](_0x5658d3[_0xc66f('0x29')],'id');return _0x5658d3[_0xc66f('0x4d')](_0x3c27f2)[_0xc66f('0xe')](function(){for(var _0x56ec79=0x0;_0x56ec79<_0x3c27f2[_0xc66f('0x1e')];_0x56ec79+=0x1){_0x1a005c[_0xc66f('0x4b')](_0xc66f('0x4e'),{'FaxInteractionId':Number(_0x3c27f2[_0x56ec79]),'UserId':Number(_0x5658d3['id'])});}});}})[_0xc66f('0xe')](function(){if(_0x233155===_0xc66f('0x48')){var _0x2c3ccf=_[_0xc66f('0x1a')](_0x5658d3[_0xc66f('0x2b')],'id');return _0x5658d3['removeSmsInteractions'](_0x2c3ccf)[_0xc66f('0xe')](function(){for(var _0xbeba44=0x0;_0xbeba44<_0x2c3ccf[_0xc66f('0x1e')];_0xbeba44+=0x1){_0x1a005c[_0xc66f('0x4b')](_0xc66f('0x4f'),{'SmsInteractionId':Number(_0x2c3ccf[_0xbeba44]),'UserId':Number(_0x5658d3['id'])});}});}})[_0xc66f('0xe')](function(){if(_0x233155==='leave'){var _0x272790=_[_0xc66f('0x1a')](_0x5658d3[_0xc66f('0x2d')],'id');return _0x5658d3['removeOpenchannelInteractions'](_0x272790)[_0xc66f('0xe')](function(){for(var _0x32cdd4=0x0;_0x32cdd4<_0x272790[_0xc66f('0x1e')];_0x32cdd4+=0x1){_0x1a005c[_0xc66f('0x4b')](_0xc66f('0x50'),{'OpenchannelInteractionId':Number(_0x272790[_0x32cdd4]),'UserId':Number(_0x5658d3['id'])});}});}})['catch'](function(_0xec6ffe){_0x19164a['log'](_0xec6ffe);});}}function onDisconnect(_0x185c3b,_0x5402dd){joinOrLeave(_0x185c3b,_0xc66f('0x48'),_0x5402dd);}function onConnect(_0x51a2a8){joinOrLeave(_0x51a2a8,_0xc66f('0x51'));}exports[_0xc66f('0x52')]=function(_0x36b96e){_0x36b96e['on'](_0xc66f('0x53'),function(_0x3779fb){_0x3779fb[_0xc66f('0x54')](0x0);_0x3779fb[_0xc66f('0x55')]=_0x3779fb[_0xc66f('0x56')]['connection'][_0xc66f('0x57')]+':'+_0x3779fb['request']['connection'][_0xc66f('0x58')];_0x3779fb[_0xc66f('0x59')]=new Date();_0x3779fb['log']=function(_0x3e4cb4){console['log'](_0xc66f('0x5a')+_0x3779fb['nsp'][_0xc66f('0x5')]+'['+_0x3779fb[_0xc66f('0x55')]+']',_0x3e4cb4);};_0x3779fb['on'](_0xc66f('0x5b'),function(){onDisconnect(_0x3779fb,_0x36b96e);_0x3779fb['log']('DISCONNECTED');});onConnect(_0x3779fb);_0x3779fb['log'](_0xc66f('0x5c'));});};
\ No newline at end of file
index c93e4c8..e83eb99 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2130=['Openchannel','OpenchannelInteraction','OpenchannelMessage','request','EventManager','Trigger,\x20%s','error','code','get','event','User','UserId','then','format','SIP/%s','name','channel','incomingmessage','catch','outgoingmessage','changed','closed','find','interface','length','hasOwnProperty','model','hook','callback','toLowerCase','condition','../../mysqldb','../logger','triggers','client','http','Chat','ChatInteraction','afterCreate','newinteraction','afterUpdate','closedinteraction','ChatMessage','newmessage','SmsInteraction','Sms','SmsMessage','Fax','FaxInteraction','FaxMessage','MailInteraction','Mail','MailMessage'];(function(_0xbd08b4,_0x4790ed){var _0x314f1e=function(_0x161589){while(--_0x161589){_0xbd08b4['push'](_0xbd08b4['shift']());}};_0x314f1e(++_0x4790ed);}(_0x2130,0xbe));var _0x0213=function(_0x13ce0c,_0x3f2a0d){_0x13ce0c=_0x13ce0c-0x0;var _0x4388fb=_0x2130[_0x13ce0c];return _0x4388fb;};'use strict';var util=require('util');var db=require(_0x0213('0x0'))['db'];var jayson=require('jayson/promise');var logger=require(_0x0213('0x1'))(_0x0213('0x2'));var client=jayson[_0x0213('0x3')][_0x0213('0x4')]({'port':0x232a});var triggers=[{'channel':_0x0213('0x5'),'model':_0x0213('0x6'),'event':_0x0213('0x7'),'condition':_0x0213('0x8'),'callback':afterCreate},{'channel':_0x0213('0x5'),'model':_0x0213('0x6'),'event':_0x0213('0x9'),'condition':_0x0213('0xa'),'callback':afterUpdate},{'channel':_0x0213('0x5'),'model':_0x0213('0xb'),'event':_0x0213('0x7'),'condition':_0x0213('0xc'),'callback':afterCreateMessage},{'channel':'Sms','model':_0x0213('0xd'),'event':_0x0213('0x7'),'condition':_0x0213('0x8'),'callback':afterCreate},{'channel':_0x0213('0xe'),'model':_0x0213('0xd'),'event':_0x0213('0x9'),'condition':_0x0213('0xa'),'callback':afterUpdate},{'channel':_0x0213('0xe'),'model':_0x0213('0xf'),'event':_0x0213('0x7'),'condition':_0x0213('0xc'),'callback':afterCreateMessage},{'channel':_0x0213('0x10'),'model':_0x0213('0x11'),'event':'afterCreate','condition':_0x0213('0x8'),'callback':afterCreate},{'channel':_0x0213('0x10'),'model':_0x0213('0x11'),'event':'afterUpdate','condition':_0x0213('0xa'),'callback':afterUpdate},{'channel':_0x0213('0x10'),'model':_0x0213('0x12'),'event':'afterCreate','condition':_0x0213('0xc'),'callback':afterCreateMessage},{'channel':'Mail','model':_0x0213('0x13'),'event':_0x0213('0x7'),'condition':_0x0213('0x8'),'callback':afterCreate},{'channel':_0x0213('0x14'),'model':_0x0213('0x13'),'event':_0x0213('0x9'),'condition':_0x0213('0xa'),'callback':afterUpdate},{'channel':_0x0213('0x14'),'model':_0x0213('0x15'),'event':_0x0213('0x7'),'condition':_0x0213('0xc'),'callback':afterCreateMessage},{'channel':_0x0213('0x16'),'model':_0x0213('0x17'),'event':_0x0213('0x7'),'condition':_0x0213('0x8'),'callback':afterCreate},{'channel':_0x0213('0x16'),'model':_0x0213('0x17'),'event':'afterUpdate','condition':_0x0213('0xa'),'callback':afterUpdate},{'channel':_0x0213('0x16'),'model':_0x0213('0x18'),'event':_0x0213('0x7'),'condition':_0x0213('0xc'),'callback':afterCreateMessage}];function request(_0x3f0903){return client[_0x0213('0x19')](_0x0213('0x1a'),_0x3f0903)['then'](function(_0x7378f2){logger['info'](_0x0213('0x1b'),'EventManager',_0x7378f2);if(_0x7378f2[_0x0213('0x1c')]){if(_0x7378f2['error'][_0x0213('0x1d')]===0x1f4){logger[_0x0213('0x1c')](_0x0213('0x1b'),_0x0213('0x1a'),_0x7378f2[_0x0213('0x1c')]);}}})['catch'](function(_0x562cc6){logger[_0x0213('0x1c')](_0x0213('0x1b'),_0x0213('0x1a'),_0x562cc6);});}function afterCreateMessage(_0x11e3cc,_0xf7386){return function(_0x29117d,_0x3f707b){_0x29117d=_0x29117d[_0x0213('0x1e')]({'plain':!![]});_0x29117d['channel']=_0x11e3cc;_0x29117d[_0x0213('0x1f')]=_0x29117d['direction'];if(_0x29117d['UserId']){return db[_0x0213('0x20')]['find']({'where':{'id':_0x29117d[_0x0213('0x21')]},'attributes':['id','name'],'raw':!![]})[_0x0213('0x22')](function(_0x2ff8c0){_0x29117d['interface']=util[_0x0213('0x23')](_0x0213('0x24'),_0x2ff8c0[_0x0213('0x25')]);_0x29117d[_0x0213('0x26')]=_0x11e3cc;return request({'event':_0x0213('0x27'),'message':_0x29117d});})[_0x0213('0x28')](function(_0x35210f){console[_0x0213('0x1c')](_0x35210f);});}else{return request({'event':_0x0213('0x29'),'message':_0x29117d});}};}function afterCreate(_0x4983c5,_0x1be428){return function(_0x23becf,_0x3f2464){_0x23becf=_0x23becf[_0x0213('0x1e')]({'plain':!![]});_0x23becf[_0x0213('0x26')]=_0x4983c5;_0x23becf['event']='opened';return request({'event':_0x1be428,'message':_0x23becf});};}function afterUpdate(_0x5e9cc1,_0x114832){return function(_0x1d378c,_0xa630b7){if(_0x1d378c[_0x0213('0x2a')](_0x0213('0x2b'))&&_0x1d378c['closed']){_0x1d378c=_0x1d378c[_0x0213('0x1e')]({'plain':!![]});_0x1d378c['channel']=_0x5e9cc1;_0x1d378c[_0x0213('0x1f')]=_0x0213('0x2b');if(_0x1d378c[_0x0213('0x21')]){return db[_0x0213('0x20')][_0x0213('0x2c')]({'where':{'id':_0x1d378c[_0x0213('0x21')]},'attributes':['id',_0x0213('0x25')],'raw':!![]})[_0x0213('0x22')](function(_0x19f5e2){_0x1d378c[_0x0213('0x2d')]=util['format'](_0x0213('0x24'),_0x19f5e2[_0x0213('0x25')]);return request({'event':_0x114832,'message':_0x1d378c});})[_0x0213('0x28')](function(_0x267e2a){console['error'](_0x267e2a);});}else{return request({'event':_0x114832,'message':_0x1d378c});}}};}exports['default']=function(){for(var _0x5e26e7=0x0;_0x5e26e7<triggers[_0x0213('0x2e')];_0x5e26e7+=0x1){if(db[_0x0213('0x2f')](triggers[_0x5e26e7][_0x0213('0x30')])){db[triggers[_0x5e26e7]['model']][_0x0213('0x31')](triggers[_0x5e26e7]['event'],triggers[_0x5e26e7][_0x0213('0x32')](triggers[_0x5e26e7][_0x0213('0x26')][_0x0213('0x33')](),triggers[_0x5e26e7][_0x0213('0x34')]));}}};
\ No newline at end of file
+var _0x4540=['catch','channel','event','UserId','find','then','SIP/%s','get','opened','changed','closed','User','name','interface','format','length','hasOwnProperty','model','hook','callback','toLowerCase','condition','util','../../mysqldb','jayson/promise','../logger','triggers','client','ChatInteraction','afterCreate','newinteraction','Chat','afterUpdate','closedinteraction','SmsInteraction','Sms','SmsMessage','newmessage','Fax','FaxInteraction','FaxMessage','Mail','MailInteraction','MailMessage','Openchannel','OpenchannelInteraction','OpenchannelMessage','request','EventManager','info','Trigger,\x20%s','error','code'];(function(_0x32404d,_0x1c843e){var _0xc65b07=function(_0x28752f){while(--_0x28752f){_0x32404d['push'](_0x32404d['shift']());}};_0xc65b07(++_0x1c843e);}(_0x4540,0x154));var _0x0454=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x4540[_0x14add3];return _0x4a174f;};'use strict';var util=require(_0x0454('0x0'));var db=require(_0x0454('0x1'))['db'];var jayson=require(_0x0454('0x2'));var logger=require(_0x0454('0x3'))(_0x0454('0x4'));var client=jayson[_0x0454('0x5')]['http']({'port':0x232a});var triggers=[{'channel':'Chat','model':_0x0454('0x6'),'event':_0x0454('0x7'),'condition':_0x0454('0x8'),'callback':afterCreate},{'channel':_0x0454('0x9'),'model':_0x0454('0x6'),'event':_0x0454('0xa'),'condition':_0x0454('0xb'),'callback':afterUpdate},{'channel':_0x0454('0x9'),'model':'ChatMessage','event':_0x0454('0x7'),'condition':'newmessage','callback':afterCreateMessage},{'channel':'Sms','model':_0x0454('0xc'),'event':_0x0454('0x7'),'condition':_0x0454('0x8'),'callback':afterCreate},{'channel':'Sms','model':'SmsInteraction','event':_0x0454('0xa'),'condition':_0x0454('0xb'),'callback':afterUpdate},{'channel':_0x0454('0xd'),'model':_0x0454('0xe'),'event':_0x0454('0x7'),'condition':_0x0454('0xf'),'callback':afterCreateMessage},{'channel':'Fax','model':'FaxInteraction','event':_0x0454('0x7'),'condition':_0x0454('0x8'),'callback':afterCreate},{'channel':_0x0454('0x10'),'model':_0x0454('0x11'),'event':_0x0454('0xa'),'condition':_0x0454('0xb'),'callback':afterUpdate},{'channel':'Fax','model':_0x0454('0x12'),'event':_0x0454('0x7'),'condition':_0x0454('0xf'),'callback':afterCreateMessage},{'channel':_0x0454('0x13'),'model':'MailInteraction','event':_0x0454('0x7'),'condition':_0x0454('0x8'),'callback':afterCreate},{'channel':_0x0454('0x13'),'model':_0x0454('0x14'),'event':_0x0454('0xa'),'condition':'closedinteraction','callback':afterUpdate},{'channel':'Mail','model':_0x0454('0x15'),'event':_0x0454('0x7'),'condition':_0x0454('0xf'),'callback':afterCreateMessage},{'channel':'Openchannel','model':'OpenchannelInteraction','event':_0x0454('0x7'),'condition':_0x0454('0x8'),'callback':afterCreate},{'channel':_0x0454('0x16'),'model':_0x0454('0x17'),'event':_0x0454('0xa'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0x0454('0x16'),'model':_0x0454('0x18'),'event':_0x0454('0x7'),'condition':_0x0454('0xf'),'callback':afterCreateMessage}];function request(_0x1d9aa2){return client[_0x0454('0x19')](_0x0454('0x1a'),_0x1d9aa2)['then'](function(_0x4f2a02){logger[_0x0454('0x1b')](_0x0454('0x1c'),'EventManager',_0x4f2a02);if(_0x4f2a02[_0x0454('0x1d')]){if(_0x4f2a02[_0x0454('0x1d')][_0x0454('0x1e')]===0x1f4){logger[_0x0454('0x1d')](_0x0454('0x1c'),_0x0454('0x1a'),_0x4f2a02[_0x0454('0x1d')]);}}})[_0x0454('0x1f')](function(_0x29be04){logger[_0x0454('0x1d')](_0x0454('0x1c'),_0x0454('0x1a'),_0x29be04);});}function afterCreateMessage(_0x53fe94,_0x31a89b){return function(_0x5a109c,_0x4c781b){_0x5a109c=_0x5a109c['get']({'plain':!![]});_0x5a109c[_0x0454('0x20')]=_0x53fe94;_0x5a109c[_0x0454('0x21')]=_0x5a109c['direction'];if(_0x5a109c[_0x0454('0x22')]){return db['User'][_0x0454('0x23')]({'where':{'id':_0x5a109c[_0x0454('0x22')]},'attributes':['id','name'],'raw':!![]})[_0x0454('0x24')](function(_0x17735a){_0x5a109c['interface']=util['format'](_0x0454('0x25'),_0x17735a['name']);_0x5a109c['channel']=_0x53fe94;return request({'event':'incomingmessage','message':_0x5a109c});})[_0x0454('0x1f')](function(_0x17c880){console[_0x0454('0x1d')](_0x17c880);});}else{return request({'event':'outgoingmessage','message':_0x5a109c});}};}function afterCreate(_0x5bc050,_0x3a87df){return function(_0x1c7f2d,_0x3e7147){_0x1c7f2d=_0x1c7f2d[_0x0454('0x26')]({'plain':!![]});_0x1c7f2d[_0x0454('0x20')]=_0x5bc050;_0x1c7f2d[_0x0454('0x21')]=_0x0454('0x27');return request({'event':_0x3a87df,'message':_0x1c7f2d});};}function afterUpdate(_0x48e920,_0x52c814){return function(_0x3c3d63,_0x17add5){if(_0x3c3d63[_0x0454('0x28')](_0x0454('0x29'))&&_0x3c3d63[_0x0454('0x29')]){_0x3c3d63=_0x3c3d63[_0x0454('0x26')]({'plain':!![]});_0x3c3d63[_0x0454('0x20')]=_0x48e920;_0x3c3d63[_0x0454('0x21')]='closed';if(_0x3c3d63[_0x0454('0x22')]){return db[_0x0454('0x2a')]['find']({'where':{'id':_0x3c3d63[_0x0454('0x22')]},'attributes':['id',_0x0454('0x2b')],'raw':!![]})[_0x0454('0x24')](function(_0x425502){_0x3c3d63[_0x0454('0x2c')]=util[_0x0454('0x2d')](_0x0454('0x25'),_0x425502[_0x0454('0x2b')]);return request({'event':_0x52c814,'message':_0x3c3d63});})[_0x0454('0x1f')](function(_0x5de42c){console[_0x0454('0x1d')](_0x5de42c);});}else{return request({'event':_0x52c814,'message':_0x3c3d63});}}};}exports['default']=function(){for(var _0xce9f01=0x0;_0xce9f01<triggers[_0x0454('0x2e')];_0xce9f01+=0x1){if(db[_0x0454('0x2f')](triggers[_0xce9f01][_0x0454('0x30')])){db[triggers[_0xce9f01][_0x0454('0x30')]][_0x0454('0x31')](triggers[_0xce9f01][_0x0454('0x21')],triggers[_0xce9f01][_0x0454('0x32')](triggers[_0xce9f01][_0x0454('0x20')][_0x0454('0x33')](),triggers[_0xce9f01][_0x0454('0x34')]));}}};
\ No newline at end of file
index 06b1de4..12c9344 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc285=['./license/util','mail','chat','fax','sms','getChannels','isValidChannel','toLowerCase','clearBlockUser','isUndefined','blockedAt','updateAttributes','getLicense','role','count','agent','then','agents','Maximum\x20login\x20has\x20been\x20reached','catch','lodash','bluebird','../mysqldb'];(function(_0x1096cd,_0x3a50b8){var _0x411fde=function(_0x4a92f0){while(--_0x4a92f0){_0x1096cd['push'](_0x1096cd['shift']());}};_0x411fde(++_0x3a50b8);}(_0xc285,0xcc));var _0x5c28=function(_0x3f2fea,_0x3c4ea8){_0x3f2fea=_0x3f2fea-0x0;var _0x69a4d5=_0xc285[_0x3f2fea];return _0x69a4d5;};'use strict';var _=require(_0x5c28('0x0'));var BPromise=require(_0x5c28('0x1'));var db=require(_0x5c28('0x2'))['db'];var util=require(_0x5c28('0x3'));var channels=['voice',_0x5c28('0x4'),_0x5c28('0x5'),_0x5c28('0x6'),_0x5c28('0x7'),'openchannel'];exports[_0x5c28('0x8')]=function(){return channels;};exports[_0x5c28('0x9')]=function(_0x3e9398){_0x3e9398=_0x3e9398[_0x5c28('0xa')]();return _['includes'](channels,_0x3e9398);};exports[_0x5c28('0xb')]=function(_0x3a5d15,_0x398c05,_0x5a0deb,_0x2584f4){var _0x26908d={'loginAttempts':_0x398c05,'blocked':_0x5a0deb};if(!_[_0x5c28('0xc')](_0x2584f4)){_0x26908d[_0x5c28('0xd')]=_0x2584f4;}return _0x3a5d15[_0x5c28('0xe')](_0x26908d);};exports[_0x5c28('0xf')]=function(_0x1ba48d){return new BPromise(function(_0x197269,_0x38e1d2){var _0x402991=0x0;if(_0x1ba48d[_0x5c28('0x10')]!=='agent'){_0x197269(_0x1ba48d);}db['User'][_0x5c28('0x11')]({'where':{'role':_0x5c28('0x12'),'online':!![],'id':{'$ne':_0x1ba48d['id']}}})['then'](function(_0x1f93e6){_0x402991=_0x1f93e6;return util[_0x5c28('0xf')]();})[_0x5c28('0x13')](function(_0xb6998b){if(_0xb6998b&&_0xb6998b['agents']&&_0x402991>=_0xb6998b[_0x5c28('0x14')]){throw Error(_0x5c28('0x15'));}_0x197269(_0x1ba48d);})[_0x5c28('0x16')](function(_0x2fbed7){_0x38e1d2(_0x2fbed7);});});};
\ No newline at end of file
+var _0x30c2=['bluebird','../mysqldb','voice','chat','fax','sms','openchannel','isValidChannel','toLowerCase','includes','clearBlockUser','isUndefined','blockedAt','updateAttributes','getLicense','agent','count','then','agents','catch'];(function(_0x46428c,_0x20ab75){var _0x16a677=function(_0x2b0817){while(--_0x2b0817){_0x46428c['push'](_0x46428c['shift']());}};_0x16a677(++_0x20ab75);}(_0x30c2,0x17c));var _0x230c=function(_0x5aad42,_0x13df01){_0x5aad42=_0x5aad42-0x0;var _0x36d4d7=_0x30c2[_0x5aad42];return _0x36d4d7;};'use strict';var _=require('lodash');var BPromise=require(_0x230c('0x0'));var db=require(_0x230c('0x1'))['db'];var util=require('./license/util');var channels=[_0x230c('0x2'),'mail',_0x230c('0x3'),_0x230c('0x4'),_0x230c('0x5'),_0x230c('0x6')];exports['getChannels']=function(){return channels;};exports[_0x230c('0x7')]=function(_0x5e6290){_0x5e6290=_0x5e6290[_0x230c('0x8')]();return _[_0x230c('0x9')](channels,_0x5e6290);};exports[_0x230c('0xa')]=function(_0x274fa1,_0x2c9cf1,_0x3d73e8,_0x51178f){var _0x34d940={'loginAttempts':_0x2c9cf1,'blocked':_0x3d73e8};if(!_[_0x230c('0xb')](_0x51178f)){_0x34d940[_0x230c('0xc')]=_0x51178f;}return _0x274fa1[_0x230c('0xd')](_0x34d940);};exports[_0x230c('0xe')]=function(_0x1f3734){return new BPromise(function(_0x2bb9e7,_0x14302e){var _0x5562e0=0x0;if(_0x1f3734['role']!==_0x230c('0xf')){_0x2bb9e7(_0x1f3734);}db['User'][_0x230c('0x10')]({'where':{'role':_0x230c('0xf'),'online':!![],'id':{'$ne':_0x1f3734['id']}}})[_0x230c('0x11')](function(_0x52daf3){_0x5562e0=_0x52daf3;return util[_0x230c('0xe')]();})[_0x230c('0x11')](function(_0x5688e3){if(_0x5688e3&&_0x5688e3[_0x230c('0x12')]&&_0x5562e0>=_0x5688e3[_0x230c('0x12')]){throw Error('Maximum\x20login\x20has\x20been\x20reached');}_0x2bb9e7(_0x1f3734);})[_0x230c('0x13')](function(_0x453de8){_0x14302e(_0x453de8);});});};
\ No newline at end of file
index 0e81cd6..8076a78 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x37c7=['render','status','send','exports'];(function(_0x377a6e,_0x59b99d){var _0x37f751=function(_0x2ed25c){while(--_0x2ed25c){_0x377a6e['push'](_0x377a6e['shift']());}};_0x37f751(++_0x59b99d);}(_0x37c7,0xcb));var _0x737c=function(_0x96c15f,_0x538403){_0x96c15f=_0x96c15f-0x0;var _0x202a78=_0x37c7[_0x96c15f];return _0x202a78;};'use strict';module[_0x737c('0x0')][0x194]=function pageNotFound(_0x281853,_0xbe6d2c){var _0x4090eb='404';var _0x57db88=0x194;var _0x4f6bfe={'status':_0x57db88};_0xbe6d2c['status'](_0x4f6bfe['status']);_0xbe6d2c[_0x737c('0x1')](_0x4090eb,{},function(_0x130202,_0x5d97f4){if(_0x130202){return _0xbe6d2c[_0x737c('0x2')](_0x4f6bfe[_0x737c('0x2')])['json'](_0x4f6bfe);}_0xbe6d2c[_0x737c('0x3')](_0x5d97f4);});};
\ No newline at end of file
+var _0x8df8=['render','json','send','exports','404','status'];(function(_0x37d913,_0x263007){var _0x32baf2=function(_0x1de9b3){while(--_0x1de9b3){_0x37d913['push'](_0x37d913['shift']());}};_0x32baf2(++_0x263007);}(_0x8df8,0x1e3));var _0x88df=function(_0x56f935,_0xbb3e13){_0x56f935=_0x56f935-0x0;var _0x25ff2f=_0x8df8[_0x56f935];return _0x25ff2f;};'use strict';module[_0x88df('0x0')][0x194]=function pageNotFound(_0x49fc15,_0x1c7720){var _0x3bc1ee=_0x88df('0x1');var _0x3f5382=0x194;var _0x1d50dc={'status':_0x3f5382};_0x1c7720[_0x88df('0x2')](_0x1d50dc[_0x88df('0x2')]);_0x1c7720[_0x88df('0x3')](_0x3bc1ee,{},function(_0x2e31d2,_0x1431b1){if(_0x2e31d2){return _0x1c7720[_0x88df('0x2')](_0x1d50dc['status'])[_0x88df('0x4')](_0x1d50dc);}_0x1c7720[_0x88df('0x5')](_0x1431b1);});};
\ 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 ffd38dd..8b9b959 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7278=['../api/chatOfflineMessage/chatOfflineMessage.model','ChatQueue','../api/chatQueue/chatQueue.model','ChatGroup','ChatProactiveAction','../api/chatProactiveAction/chatProactiveAction.model','../api/cmCompany/cmCompany.model','CmHopper','../api/cmHopper/cmHopper.model','CmHopperBlack','../api/cmHopperBlack/cmHopperBlack.model','CmHopperFinal','../api/cmHopperFinal/cmHopperFinal.model','CmHopperHistory','../api/cmHopperHistory/cmHopperHistory.model','ReportAgentPreview','CmCustomField','../api/action/action.model','../api/automation/automation.model','CannedAnswer','../api/cannedAnswer/cannedAnswer.model','Disposition','../api/disposition/disposition.model','Condition','../api/condition/condition.model','../api/interval/interval.model','../api/pause/pause.model','Cdr','../api/cdr/cdr.model','../api/voiceQueuesLog/voiceQueuesLog.model','Schedule','Sound','../api/tag/tag.model','Template','Trigger','../api/trigger/trigger.model','Variable','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','AnalyticFieldReport','AnalyticTreeReport','../api/analyticTreeReport/analyticTreeReport.model','SalesforceAccount','../api/intSalesforceAccount/intSalesforceAccount.model','../api/intSalesforceConfiguration/intSalesforceConfiguration.model','../api/intSalesforceField/intSalesforceField.model','SugarcrmAccount','../api/intSugarcrmAccount/intSugarcrmAccount.model','SugarcrmConfiguration','../api/intSugarcrmField/intSugarcrmField.model','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','ZendeskConfiguration','ZendeskField','../api/intZendeskField/intZendeskField.model','FreshdeskAccount','../api/intFreshdeskAccount/intFreshdeskAccount.model','../api/intFreshdeskConfiguration/intFreshdeskConfiguration.model','FreshdeskField','../api/intFreshdeskField/intFreshdeskField.model','VtigerAccount','../api/intVtigerAccount/intVtigerAccount.model','VtigerConfiguration','../api/intVtigerConfiguration/intVtigerConfiguration.model','VtigerField','../api/intServicenowAccount/intServicenowAccount.model','ServicenowConfiguration','../api/intServicenowConfiguration/intServicenowConfiguration.model','ServicenowField','../api/intServicenowField/intServicenowField.model','Dynamics365Account','Dynamics365Configuration','../api/intDynamics365Configuration/intDynamics365Configuration.model','Dynamics365Field','../api/intDynamics365Field/intDynamics365Field.model','Network','../api/network/network.model','ChatQueueReport','../api/chatQueueReport/chatQueueReport.model','ChatInternalMessage','JscriptyQuestionReport','../api/jscriptyQuestionReport/jscriptyQuestionReport.model','JscriptySessionReport','SmsQueueReport','../api/smsQueueReport/smsQueueReport.model','SquareReport','../api/squareReport/squareReport.model','SquareDetailsReport','../api/squareReportDetail/squareReportDetail.model','JscriptyProject','Setting','SquareOdbc','../api/squareOdbc/squareOdbc.model','../api/squareProject/squareProject.model','SquareRecording','SquareMessage','../api/squareMessage/squareMessage.model','Team','../api/team/team.model','License','../api/license/license.model','../api/campaign/campaign.model','../api/migration/migration.model','../api/attachment/attachment.model','../api/mailTransferReport/mailTransferReport.model','../api/faxTransferReport/faxTransferReport.model','../api/smsTransferReport/smsTransferReport.model','CmList','../api/cmList/cmList.model','../api/voicePrefix/voicePrefix.model','UserProfile','UserProfileSection','../api/userProfileSection/userProfileSection.model','UserProfileResource','../api/userProfileResource/userProfileResource.model','hasOne','UserId','hasMany','VoiceQueuesRt','Extensions','cascade','HopperFinals','HopperHistory','OpenchannelInteractions','ChatInteractions','SmsInteraction','FaxInteractions','MailInteractions','belongsToMany','chat_group_has_users','Contacts','cm_user_has_contacts','cm_user_has_lists','user_has_teams','user_has_mail_interactions','user_has_chat_interactions','SmsInteractions','user_has_sms_interactions','user_has_openchannel_interactions','VoiceQueues','ChatQueues','UserFaxQueue','SmsQueues','VoicePrefix','VoicePrefixes','user_has_voice_prefixes','ChatWebsites','user_has_chat_websites','FaxAccounts','MailAccounts','OpenchannelAccount','user_has_openchannel_accounts','SmsAccount','SmsAccounts','user_has_sms_accounts','SquareProject','SquareProjects','user_has_square_projects','VoiceExtension','SpiedAgents','ChanSpyId','Sounds','moh_has_sounds','VoiceQueueId','HopperBlacks','JscriptySessions','belongsTo','Trunk','TrunkBackup','TrunkBackupId','Interval','IntervalId','Pause','mandatoryDispositionPause','mandatoryDispositionPauseId','Lists','Agents','Teams','team_has_voice_queues','BlackLists','Messages','mailboxuser','mailbox','QueueCalls','VoiceAgentReport','Contact','ContactId','MailAccountId','Imap','Smtp','Dispositions','Answers','Applications','ListId','MailQueue','team_has_mail_queues','MailInteractionId','Account','Owner','Tag','mail_interaction_has_tags','Tags','Attachment','Attachments','Interaction','restrict','TagId','List','Dashboard','Items','FaxAccountId','Interactions','Exntensions','user_has_fax_accounts','CmContact','fax_interaction_has_tags','ThroughTags','Users','user_has_fax_interactions','FaxInteractionId','AttachmentId','team_has_fax_queues','FaxQueueReport','SmsAccountId','SmsQueue','SmsInteractionId','sms_interaction_has_tags','SmsQueueId','team_has_sms_queues','OpenchannelInteraction','OpenchannelAccountId','OpenchannelQueueId','OpenchannelInteractionId','openchannel_interaction_has_tags','team_has_openchannel_queues','ChatMessage','Agent','Queue','ChatWebsiteId','chat_interaction_has_tags','ChatInteractionId','team_has_chat_queues','ChatGroupId','Members','Website','CompanyId','Hoppers','HopperHistories','CmCompany','Company','cm_contact_has_tags','Campaign','OwnerId','CampaignId','Automation','All','OneAll','AutomationAllId','AutomationAnyId','Action','Actions','AutomationId','Intervals','MailApplications','ChatApplications','SmsApplications','DefaultReportId','AnalyticCustomReport','CustomReportId','Mohs','AllConditions','AllCondition','AnyCondition','TriggerId','Fields','MetricId','Configurations','SalesforceField','Subjects','SubjectId','Descriptions','DescriptionId','FieldId','SalesforceConfiguration','AccountId','Subject','Description','SugarcrmField','Field','VariableId','DeskAccount','int_desk_configuration_has_tags','int_zendesk_configuration_has_tags','FreshdeskConfiguration','int_freshdesk_configuration_has_tags','ServicenowAccount','FromId','ToId','SessionId','JscriptyAnswerReport','ProjectId','MailQueues','FaxQueues','TrunkId','campaigns_has_cm_lists','campaigns_has_cm_blacklists','MailTransferReport','FromMailAccountId','FromUserId','FromAgent','ToUserId','ToAgent','ToMailQueueId','ToQueue','ChatTransferReport','FromChatWebsiteId','FromAccount','ToChatQueueId','FaxTransferReport','FromFaxAccountId','ToFaxQueueId','ToFaxAccountId','OpenchannelTransferReport','ToOpenchannelQueueId','SmsTransferReport','FromSmsAccountId','ToSmsQueueId','ToSmsAccountId','ToAccount','CustomFields','Queues','voice_queues_has_cm_lists','userProfileId','UserProfileSections','Resources','exports','path','../config/environment','sequelize','lodash','jstz','defaultsDeep','motion2','xcall','xC@LL1234','127.0.0.1','utf8mb4','name','utf8','utf8_general_ci','sequelizeHistory','mysql','database','username','password','options','User','../api/user/user.model','VoiceChanSpy','import','../api/voiceChanSpy/voiceChanSpy.model','VoiceContext','../api/voiceContext/voiceContext.model','../api/voiceExtension/voiceExtension.model','VoiceMusicOnHold','../api/voiceMusicOnHold/voiceMusicOnHold.model','VoiceQueue','../api/voiceQueue/voiceQueue.model','VoiceRecording','../api/voiceRecording/voiceRecording.model','ScreenRecording','VoiceMail','VoiceMailMessage','VoiceCallReport','../api/voiceCallReport/voiceCallReport.model','VoiceDialReport','../api/voiceDialReport/voiceDialReport.model','VoiceQueueReport','../api/voiceQueueReport/voiceQueueReport.model','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/userChatQueue/userChatQueue.model','UserMailQueue','../api/userFaxQueue/userFaxQueue.model','UserSmsQueue','../api/userSmsQueue/userSmsQueue.model','UserOpenchannelQueue','MailServerIn','../api/mailServerIn/mailServerIn.model','MailServerOut','../api/mailServerOut/mailServerOut.model','MailAccount','../api/mailAccount/mailAccount.model','../api/mailQueue/mailQueue.model','MailSubstatus','../api/mailSubstatus/mailSubstatus.model','MailInteraction','../api/mailInteraction/mailInteraction.model','MailMessage','MailApplication','MailQueueReport','../api/mailQueueReport/mailQueueReport.model','../api/dashboard/dashboard.model','DashboardItem','../api/dashboardItem/dashboardItem.model','FaxAccount','FaxApplication','../api/faxApplication/faxApplication.model','FaxInteraction','../api/faxInteraction/faxInteraction.model','FaxMessage','../api/faxMessage/faxMessage.model','FaxQueue','../api/faxQueue/faxQueue.model','../api/faxQueueReport/faxQueueReport.model','../api/smsAccount/smsAccount.model','SmsApplication','../api/smsApplication/smsApplication.model','../api/smsInteraction/smsInteraction.model','SmsMessage','../api/smsMessage/smsMessage.model','../api/smsQueue/smsQueue.model','../api/openchannelAccount/openchannelAccount.model','OpenchannelApplication','../api/openchannelApplication/openchannelApplication.model','../api/openchannelInteraction/openchannelInteraction.model','OpenchannelMessage','../api/openchannelMessage/openchannelMessage.model','OpenchannelQueue','../api/openchannelQueue/openchannelQueue.model','ChatWebsite','../api/chatWebsite/chatWebsite.model','OpenchannelQueueReport','../api/openchannelQueueReport/openchannelQueueReport.model','ChatApplication','ChatInteraction','../api/chatInteraction/chatInteraction.model','../api/chatMessage/chatMessage.model','ChatOfflineMessage'];(function(_0x35bf41,_0x59ff71){var _0x1e3c9f=function(_0x14e310){while(--_0x14e310){_0x35bf41['push'](_0x35bf41['shift']());}};_0x1e3c9f(++_0x59ff71);}(_0x7278,0x161));var _0x8727=function(_0x3531e3,_0x3664ca){_0x3531e3=_0x3531e3-0x0;var _0x5b7c9e=_0x7278[_0x3531e3];return _0x5b7c9e;};'use strict';var path=require(_0x8727('0x0'));var config=require(_0x8727('0x1'));var Sequelize=require(_0x8727('0x2'));var _=require(_0x8727('0x3'));var jstz=require(_0x8727('0x4'));var timezone=jstz['determine']();config[_0x8727('0x2')]=_[_0x8727('0x5')](config[_0x8727('0x2')],{'database':_0x8727('0x6'),'username':_0x8727('0x7'),'password':_0x8727('0x8'),'options':{'host':_0x8727('0x9'),'port':0xcea,'dialect':'mysql','dialectOptions':{'charset':_0x8727('0xa')},'logging':![],'timezone':timezone[_0x8727('0xb')](),'define':{'charset':_0x8727('0xc'),'collate':_0x8727('0xd')}}});config[_0x8727('0xe')]=_['defaultsDeep'](config['sequelizeHistory'],{'database':'motion2','username':_0x8727('0x7'),'password':_0x8727('0x8'),'options':{'host':_0x8727('0x9'),'port':0xcea,'dialect':_0x8727('0xf'),'dialectOptions':{'charset':_0x8727('0xa')},'logging':![],'timezone':timezone[_0x8727('0xb')](),'define':{'charset':_0x8727('0xc'),'collate':_0x8727('0xd')}}});var db={'Sequelize':Sequelize,'sequelize':new Sequelize(config['sequelize'][_0x8727('0x10')],config[_0x8727('0x2')][_0x8727('0x11')],config['sequelize'][_0x8727('0x12')],config[_0x8727('0x2')]['options'])};var dbH={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0x8727('0xe')][_0x8727('0x10')],config[_0x8727('0xe')][_0x8727('0x11')],config[_0x8727('0xe')][_0x8727('0x12')],config[_0x8727('0xe')][_0x8727('0x13')])};db[_0x8727('0x14')]=db[_0x8727('0x2')]['import'](_0x8727('0x15'));db[_0x8727('0x16')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x18'));db[_0x8727('0x19')]=db['sequelize']['import'](_0x8727('0x1a'));db['VoiceExtension']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x1b'));db[_0x8727('0x1c')]=db[_0x8727('0x2')]['import'](_0x8727('0x1d'));db[_0x8727('0x1e')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x1f'));db[_0x8727('0x20')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x21'));db[_0x8727('0x22')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/screenRecording/screenRecording.model');db[_0x8727('0x23')]=db[_0x8727('0x2')]['import']('../api/voiceMail/voiceMail.model');db[_0x8727('0x24')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/voiceMailMessage/voiceMailMessage.model');db[_0x8727('0x25')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x26'));db[_0x8727('0x27')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x28'));db['VoiceAgentReport']=db[_0x8727('0x2')][_0x8727('0x17')]('../api/voiceAgentReport/voiceAgentReport.model');db[_0x8727('0x29')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x2a'));db[_0x8727('0x2b')]=db[_0x8727('0x2')]['import'](_0x8727('0x2c'));db['Trunk']=db[_0x8727('0x2')]['import'](_0x8727('0x2d'));db[_0x8727('0x2e')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x2f'));db[_0x8727('0x30')]=db[_0x8727('0x2')]['import'](_0x8727('0x31'));db[_0x8727('0x32')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x33'));db[_0x8727('0x34')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x35'));db[_0x8727('0x36')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/userMailQueue/userMailQueue.model');db['UserFaxQueue']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x37'));db[_0x8727('0x38')]=db['sequelize'][_0x8727('0x17')](_0x8727('0x39'));db[_0x8727('0x3a')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/userOpenchannelQueue/userOpenchannelQueue.model');db[_0x8727('0x3b')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x3c'));db[_0x8727('0x3d')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x3e'));db[_0x8727('0x3f')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x40'));db['MailQueue']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x41'));db[_0x8727('0x42')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x43'));db[_0x8727('0x44')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x45'));db[_0x8727('0x46')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/mailMessage/mailMessage.model');db[_0x8727('0x47')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/mailApplication/mailApplication.model');db[_0x8727('0x48')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x49'));db['Dashboard']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x4a'));db[_0x8727('0x4b')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x4c'));db[_0x8727('0x4d')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/faxAccount/faxAccount.model');db[_0x8727('0x4e')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x4f'));db[_0x8727('0x50')]=db['sequelize'][_0x8727('0x17')](_0x8727('0x51'));db[_0x8727('0x52')]=db['sequelize'][_0x8727('0x17')](_0x8727('0x53'));db[_0x8727('0x54')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x55'));db['FaxQueueReport']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x56'));db['SmsAccount']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x57'));db[_0x8727('0x58')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x59'));db['SmsInteraction']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x5a'));db[_0x8727('0x5b')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x5c'));db['SmsQueue']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x5d'));db['OpenchannelAccount']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x5e'));db[_0x8727('0x5f')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x60'));db['OpenchannelInteraction']=db[_0x8727('0x2')]['import'](_0x8727('0x61'));db[_0x8727('0x62')]=db['sequelize'][_0x8727('0x17')](_0x8727('0x63'));db[_0x8727('0x64')]=db['sequelize']['import'](_0x8727('0x65'));db[_0x8727('0x66')]=db[_0x8727('0x2')]['import'](_0x8727('0x67'));db[_0x8727('0x68')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x69'));db[_0x8727('0x6a')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/chatApplication/chatApplication.model');db[_0x8727('0x6b')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x6c'));db['ChatMessage']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x6d'));db[_0x8727('0x6e')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x6f'));db[_0x8727('0x70')]=db['sequelize'][_0x8727('0x17')](_0x8727('0x71'));db[_0x8727('0x72')]=db['sequelize'][_0x8727('0x17')]('../api/chatGroup/chatGroup.model');db[_0x8727('0x73')]=db['sequelize'][_0x8727('0x17')](_0x8727('0x74'));db['CmCompany']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x75'));db['CmContact']=db['sequelize']['import']('../api/cmContact/cmContact.model');db[_0x8727('0x76')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x77'));db[_0x8727('0x78')]=db['sequelize']['import'](_0x8727('0x79'));db[_0x8727('0x7a')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x7b'));db[_0x8727('0x7c')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x7d'));db[_0x8727('0x7e')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/reportAgentPreview/reportAgentPreview.model');db[_0x8727('0x7f')]=db[_0x8727('0x2')]['import']('../api/cmCustomField/cmCustomField.model');db['Action']=db['sequelize'][_0x8727('0x17')](_0x8727('0x80'));db['Automation']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x81'));db[_0x8727('0x82')]=db[_0x8727('0x2')]['import'](_0x8727('0x83'));db[_0x8727('0x84')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x85'));db[_0x8727('0x86')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x87'));db['Interval']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x88'));db['Pause']=db[_0x8727('0x2')]['import'](_0x8727('0x89'));db[_0x8727('0x8a')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x8b'));db['VoiceQueuesLog']=db['sequelize'][_0x8727('0x17')](_0x8727('0x8c'));db[_0x8727('0x8d')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/schedule/schedule.model');db[_0x8727('0x8e')]=db['sequelize'][_0x8727('0x17')]('../api/sound/sound.model');db['Tag']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x8f'));db[_0x8727('0x90')]=db[_0x8727('0x2')]['import']('../api/template/template.model');db[_0x8727('0x91')]=db[_0x8727('0x2')]['import'](_0x8727('0x92'));db[_0x8727('0x93')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/variable/variable.model');db[_0x8727('0x94')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x95'));db[_0x8727('0x96')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/integrationReport/integrationReport.model');db['AnalyticCustomReport']=db['sequelize'][_0x8727('0x17')](_0x8727('0x97'));db[_0x8727('0x98')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x99'));db[_0x8727('0x9a')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x9b'));db[_0x8727('0x9c')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0x9d'));db[_0x8727('0x9e')]=db['sequelize']['import']('../api/analyticFieldReport/analyticFieldReport.model');db[_0x8727('0x9f')]=db[_0x8727('0x2')]['import'](_0x8727('0xa0'));db[_0x8727('0xa1')]=db[_0x8727('0x2')]['import'](_0x8727('0xa2'));db['SalesforceConfiguration']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xa3'));db['SalesforceField']=db['sequelize'][_0x8727('0x17')](_0x8727('0xa4'));db[_0x8727('0xa5')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xa6'));db[_0x8727('0xa7')]=db[_0x8727('0x2')]['import']('../api/intSugarcrmConfiguration/intSugarcrmConfiguration.model');db['SugarcrmField']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xa8'));db['DeskAccount']=db[_0x8727('0x2')][_0x8727('0x17')]('../api/intDeskAccount/intDeskAccount.model');db[_0x8727('0xa9')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xaa'));db[_0x8727('0xab')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xac'));db[_0x8727('0xad')]=db[_0x8727('0x2')]['import'](_0x8727('0xae'));db[_0x8727('0xaf')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xb0'));db[_0x8727('0xb1')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xb2'));db[_0x8727('0xb3')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/intZendeskAccount/intZendeskAccount.model');db[_0x8727('0xb4')]=db[_0x8727('0x2')]['import']('../api/intZendeskConfiguration/intZendeskConfiguration.model');db[_0x8727('0xb5')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xb6'));db[_0x8727('0xb7')]=db['sequelize'][_0x8727('0x17')](_0x8727('0xb8'));db['FreshdeskConfiguration']=db[_0x8727('0x2')]['import'](_0x8727('0xb9'));db[_0x8727('0xba')]=db['sequelize']['import'](_0x8727('0xbb'));db[_0x8727('0xbc')]=db[_0x8727('0x2')]['import'](_0x8727('0xbd'));db[_0x8727('0xbe')]=db[_0x8727('0x2')]['import'](_0x8727('0xbf'));db[_0x8727('0xc0')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/intVtigerField/intVtigerField.model');db['ServicenowAccount']=db['sequelize'][_0x8727('0x17')](_0x8727('0xc1'));db[_0x8727('0xc2')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xc3'));db[_0x8727('0xc4')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xc5'));db[_0x8727('0xc6')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/intDynamics365Account/intDynamics365Account.model');db[_0x8727('0xc7')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xc8'));db[_0x8727('0xc9')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xca'));db[_0x8727('0x94')]=db['sequelize'][_0x8727('0x17')]('../api/integration/integration.model');db[_0x8727('0xcb')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xcc'));db[_0x8727('0xcd')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xce'));db[_0x8727('0xcf')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/chatInternalMessage/chatInternalMessage.model');db['JscriptyAnswerReport']=db[_0x8727('0x2')][_0x8727('0x17')]('../api/jscriptyAnswerReport/jscriptyAnswerReport.model');db[_0x8727('0xd0')]=db['sequelize'][_0x8727('0x17')](_0x8727('0xd1'));db[_0x8727('0xd2')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/jscriptySessionReport/jscriptySessionReport.model');db[_0x8727('0xd3')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xd4'));db[_0x8727('0xd5')]=db['sequelize']['import'](_0x8727('0xd6'));db[_0x8727('0xd7')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xd8'));db[_0x8727('0xd9')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/jscriptyProject/jscriptyProject.model');db[_0x8727('0xda')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/setting/setting.model');db[_0x8727('0xdb')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xdc'));db['SquareProject']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xdd'));db[_0x8727('0xde')]=db[_0x8727('0x2')][_0x8727('0x17')]('../api/squareRecording/squareRecording.model');db[_0x8727('0xdf')]=db[_0x8727('0x2')]['import'](_0x8727('0xe0'));db[_0x8727('0xe1')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xe2'));db[_0x8727('0xe3')]=db[_0x8727('0x2')]['import'](_0x8727('0xe4'));db['Campaign']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xe5'));db['Migration']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xe6'));db['Attachment']=db[_0x8727('0x2')]['import'](_0x8727('0xe7'));db['Plugin']=db[_0x8727('0x2')]['import']('../api/plugin/plugin.model');db['MailTransferReport']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xe8'));db['ChatTransferReport']=db[_0x8727('0x2')]['import']('../api/chatTransferReport/chatTransferReport.model');db['FaxTransferReport']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xe9'));db['OpenchannelTransferReport']=db['sequelize'][_0x8727('0x17')]('../api/openchannelTransferReport/openchannelTransferReport.model');db['SmsTransferReport']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xea'));db[_0x8727('0xeb')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xec'));db['VoicePrefix']=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xed'));db[_0x8727('0xee')]=db[_0x8727('0x2')]['import']('../api/userProfile/userProfile.model');db[_0x8727('0xef')]=db[_0x8727('0x2')][_0x8727('0x17')](_0x8727('0xf0'));db[_0x8727('0xf1')]=db['sequelize'][_0x8727('0x17')](_0x8727('0xf2'));db[_0x8727('0x14')][_0x8727('0xf3')](db[_0x8727('0x23')],{'as':_0x8727('0x23'),'onDelete':'cascade','foreignKey':_0x8727('0xf4')});db[_0x8727('0x14')][_0x8727('0xf5')](db['VoiceRecording'],{'as':'Recordings','foreignKey':_0x8727('0xf4')});db[_0x8727('0x14')][_0x8727('0xf5')](db[_0x8727('0x30')],{'as':_0x8727('0xf6'),'foreignKey':'UserId'});db[_0x8727('0x14')]['hasMany'](db['VoiceExtension'],{'as':_0x8727('0xf7'),'onDelete':_0x8727('0xf8'),'hooks':!![]});db[_0x8727('0x14')][_0x8727('0xf5')](db[_0x8727('0x7a')],{'as':_0x8727('0xf9'),'foreignKey':_0x8727('0xf4')});db[_0x8727('0x14')][_0x8727('0xf5')](db[_0x8727('0x7c')],{'as':_0x8727('0xfa'),'foreignKey':'UserId'});db[_0x8727('0x14')][_0x8727('0xf5')](db[_0x8727('0x7e')],{'as':_0x8727('0x7e'),'foreignKey':'UserId'});db['User'][_0x8727('0xf5')](db['OpenchannelInteraction'],{'as':_0x8727('0xfb'),'foreignKey':_0x8727('0xf4')});db['User'][_0x8727('0xf5')](db[_0x8727('0x6b')],{'as':_0x8727('0xfc'),'foreignKey':_0x8727('0xf4')});db[_0x8727('0x14')]['hasMany'](db[_0x8727('0xfd')],{'as':'SmsInteractions','foreignKey':_0x8727('0xf4')});db['User'][_0x8727('0xf5')](db[_0x8727('0x50')],{'as':_0x8727('0xfe'),'foreignKey':_0x8727('0xf4')});db[_0x8727('0x14')]['hasMany'](db['MailInteraction'],{'as':_0x8727('0xff'),'foreignKey':'UserId'});db[_0x8727('0x14')]['belongsTo'](db[_0x8727('0xee')],{'as':_0x8727('0xee'),'foreignKey':'userProfileId'});db[_0x8727('0x14')][_0x8727('0x100')](db['ChatGroup'],{'as':'Groups','through':_0x8727('0x101')});db[_0x8727('0x14')][_0x8727('0x100')](db['CmContact'],{'as':_0x8727('0x102'),'through':_0x8727('0x103')});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0xeb')],{'as':'Lists','through':_0x8727('0x104')});db['User'][_0x8727('0x100')](db[_0x8727('0xe1')],{'through':_0x8727('0x105')});db['User'][_0x8727('0x100')](db[_0x8727('0x44')],{'as':_0x8727('0xff'),'through':_0x8727('0x106')});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x6b')],{'as':_0x8727('0xfc'),'through':_0x8727('0x107')});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x50')],{'as':_0x8727('0xfe'),'through':'user_has_fax_interactions'});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0xfd')],{'as':_0x8727('0x108'),'through':_0x8727('0x109')});db[_0x8727('0x14')][_0x8727('0x100')](db['OpenchannelInteraction'],{'as':_0x8727('0xfb'),'through':_0x8727('0x10a')});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x1e')],{'as':_0x8727('0x10b'),'through':_0x8727('0x32'),'required':![]});db[_0x8727('0x14')][_0x8727('0x100')](db['MailQueue'],{'as':'MailQueues','through':_0x8727('0x36'),'required':![]});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x70')],{'as':_0x8727('0x10c'),'through':'UserChatQueue','required':![],'hooks':!![]});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x54')],{'as':'FaxQueues','through':_0x8727('0x10d'),'required':![]});db[_0x8727('0x14')][_0x8727('0x100')](db['SmsQueue'],{'as':_0x8727('0x10e'),'through':'UserSmsQueue','required':![]});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x64')],{'as':'OpenchannelQueues','through':_0x8727('0x3a'),'required':![]});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0xeb')],{'through':_0x8727('0x104')});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x10f')],{'as':_0x8727('0x110'),'through':_0x8727('0x111'),'required':![]});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x66')],{'as':_0x8727('0x112'),'through':_0x8727('0x113')});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x4d')],{'as':_0x8727('0x114'),'through':'user_has_fax_accounts'});db[_0x8727('0x14')][_0x8727('0x100')](db['MailAccount'],{'as':_0x8727('0x115'),'through':'user_has_mail_accounts'});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x116')],{'as':'OpenchannelAccounts','through':_0x8727('0x117')});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x118')],{'as':_0x8727('0x119'),'through':_0x8727('0x11a')});db[_0x8727('0x14')][_0x8727('0x100')](db[_0x8727('0x11b')],{'as':_0x8727('0x11c'),'through':_0x8727('0x11d')});db['VoiceChanSpy'][_0x8727('0xf5')](db[_0x8727('0x11e')],{'as':_0x8727('0x11f'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x120')});db[_0x8727('0x19')]['hasMany'](db['VoiceExtension'],{'onDelete':_0x8727('0xf8')});db[_0x8727('0x11e')][_0x8727('0xf5')](db[_0x8727('0x11e')],{'as':'Applications','onDelete':_0x8727('0xf8')});db['VoiceMusicOnHold'][_0x8727('0x100')](db[_0x8727('0x8e')],{'as':_0x8727('0x121'),'through':_0x8727('0x122')});db[_0x8727('0x1e')]['hasMany'](db['UserVoiceQueueRt'],{'as':'Members','foreignKey':_0x8727('0x123')});db[_0x8727('0x1e')]['hasMany'](db[_0x8727('0x76')],{'as':'Hoppers','foreignKey':_0x8727('0x123')});db[_0x8727('0x1e')][_0x8727('0xf5')](db[_0x8727('0x7a')],{'as':_0x8727('0xf9'),'foreignKey':_0x8727('0x123')});db[_0x8727('0x1e')][_0x8727('0xf5')](db['CmHopperHistory'],{'as':'HopperHistories','foreignKey':_0x8727('0x123')});db['VoiceQueue'][_0x8727('0xf5')](db[_0x8727('0x7e')],{'as':_0x8727('0x7e'),'foreignKey':_0x8727('0x123')});db[_0x8727('0x1e')]['hasMany'](db[_0x8727('0x78')],{'as':_0x8727('0x124'),'foreignKey':'VoiceQueueId'});db['VoiceQueue']['hasMany'](db['JscriptySessionReport'],{'as':_0x8727('0x125'),'foreignKey':_0x8727('0x123')});db[_0x8727('0x1e')][_0x8727('0x126')](db[_0x8727('0x127')],{'as':'Trunk','foreignKey':'TrunkId'});db[_0x8727('0x1e')]['belongsTo'](db[_0x8727('0x127')],{'as':_0x8727('0x128'),'foreignKey':_0x8727('0x129')});db[_0x8727('0x1e')][_0x8727('0x126')](db[_0x8727('0x12a')],{'as':_0x8727('0x12a'),'foreignKey':_0x8727('0x12b')});db[_0x8727('0x1e')][_0x8727('0x126')](db[_0x8727('0x12c')],{'as':_0x8727('0x12d'),'foreignKey':_0x8727('0x12e')});db['VoiceQueue']['belongsToMany'](db[_0x8727('0xeb')],{'as':_0x8727('0x12f'),'through':'voice_queues_has_cm_lists'});db[_0x8727('0x1e')][_0x8727('0x100')](db[_0x8727('0x14')],{'as':_0x8727('0x130'),'through':_0x8727('0x32')});db[_0x8727('0x1e')]['belongsToMany'](db[_0x8727('0xe1')],{'as':_0x8727('0x131'),'through':_0x8727('0x132')});db[_0x8727('0x1e')][_0x8727('0x100')](db[_0x8727('0xeb')],{'as':_0x8727('0x133'),'through':'voice_queues_has_cm_blacklists'});db[_0x8727('0x20')][_0x8727('0x126')](db[_0x8727('0x14')],{'as':'User','foreignKey':_0x8727('0xf4')});db['ScreenRecording'][_0x8727('0x126')](db['User'],{'as':'User','foreignKey':_0x8727('0xf4')});db['VoiceMail']['hasMany'](db[_0x8727('0x24')],{'as':_0x8727('0x134'),'onDelete':'cascade','foreignKey':_0x8727('0x135'),'sourceKey':_0x8727('0x136')});db[_0x8727('0x24')][_0x8727('0x126')](db[_0x8727('0x23')],{'foreignKey':_0x8727('0x135'),'targetKey':_0x8727('0x136')});db[_0x8727('0x25')][_0x8727('0xf5')](db[_0x8727('0x29')],{'as':_0x8727('0x137'),'foreignKey':'uniqueid','constraints':![]});db[_0x8727('0x25')]['hasMany'](db[_0x8727('0x138')],{'as':'AgentReports','foreignKey':'uniqueid','constraints':![]});db['VoiceCallReport'][_0x8727('0x126')](db[_0x8727('0x14')],{'as':'User','foreignKey':_0x8727('0xf4')});db['VoiceCallReport']['belongsTo'](db['CmContact'],{'as':_0x8727('0x139'),'foreignKey':_0x8727('0x13a')});db[_0x8727('0x3b')][_0x8727('0x126')](db['MailAccount'],{'as':_0x8727('0x3f'),'foreignKey':_0x8727('0x13b')});db[_0x8727('0x3d')]['belongsTo'](db[_0x8727('0x3f')],{'as':_0x8727('0x3f'),'foreignKey':_0x8727('0x13b')});db[_0x8727('0x3f')][_0x8727('0xf3')](db[_0x8727('0x3b')],{'as':_0x8727('0x13c'),'onDelete':_0x8727('0xf8')});db[_0x8727('0x3f')][_0x8727('0xf3')](db['MailServerOut'],{'as':_0x8727('0x13d'),'onDelete':_0x8727('0xf8')});db[_0x8727('0x3f')][_0x8727('0xf5')](db['Disposition'],{'as':_0x8727('0x13e'),'foreignKey':_0x8727('0x13b')});db[_0x8727('0x3f')][_0x8727('0xf5')](db['CannedAnswer'],{'as':_0x8727('0x13f'),'foreignKey':'MailAccountId'});db[_0x8727('0x3f')]['hasMany'](db[_0x8727('0x46')],{'as':_0x8727('0x134'),'foreignKey':_0x8727('0x13b')});db[_0x8727('0x3f')]['hasMany'](db[_0x8727('0x44')],{'as':'Interactions'});db[_0x8727('0x3f')][_0x8727('0xf5')](db['MailApplication'],{'as':_0x8727('0x140')});db[_0x8727('0x3f')][_0x8727('0x126')](db['CmList'],{'as':'List','foreignKey':_0x8727('0x141')});db['MailAccount'][_0x8727('0x126')](db['Template'],{'as':_0x8727('0x90'),'foreignKey':'TemplateId'});db[_0x8727('0x3f')][_0x8727('0x126')](db[_0x8727('0x12c')],{'as':'mandatoryDispositionPause','foreignKey':_0x8727('0x12e')});db[_0x8727('0x3f')][_0x8727('0x100')](db['User'],{'as':'Agents','through':'user_has_mail_accounts'});db['MailQueue'][_0x8727('0x100')](db[_0x8727('0x14')],{'as':'Agents','through':'UserMailQueue'});db[_0x8727('0x142')][_0x8727('0x100')](db[_0x8727('0xe1')],{'through':_0x8727('0x143'),'as':_0x8727('0x131')});db[_0x8727('0x44')][_0x8727('0xf5')](db['MailMessage'],{'as':_0x8727('0x134'),'onDelete':'cascade','foreignKey':_0x8727('0x144')});db[_0x8727('0x44')][_0x8727('0x126')](db['MailAccount'],{'as':_0x8727('0x145'),'foreignKey':'MailAccountId'});db[_0x8727('0x44')][_0x8727('0x126')](db['CmContact'],{'as':'Contact','foreignKey':_0x8727('0x13a')});db[_0x8727('0x44')][_0x8727('0x126')](db[_0x8727('0x14')],{'as':_0x8727('0x146'),'foreignKey':_0x8727('0xf4')});db[_0x8727('0x44')]['belongsToMany'](db[_0x8727('0x147')],{'through':_0x8727('0x148'),'as':_0x8727('0x149')});db[_0x8727('0x44')][_0x8727('0x100')](db[_0x8727('0x147')],{'through':_0x8727('0x148'),'as':'ThroughTags'});db[_0x8727('0x44')]['belongsToMany'](db[_0x8727('0x14')],{'as':'Users','through':_0x8727('0x106'),'foreignKey':'MailInteractionId'});db[_0x8727('0x46')]['hasMany'](db[_0x8727('0x14a')],{'as':_0x8727('0x14b'),'onDelete':_0x8727('0xf8')});db['MailMessage'][_0x8727('0x126')](db[_0x8727('0x14')],{'as':'User'});db['MailMessage']['belongsTo'](db['CmContact'],{'onDelete':_0x8727('0xf8'),'as':_0x8727('0x139')});db['MailMessage']['belongsTo'](db[_0x8727('0x44')],{'as':_0x8727('0x14c'),'foreignKey':_0x8727('0x144')});db[_0x8727('0x46')]['belongsTo'](db['MailAccount'],{'as':_0x8727('0x145'),'foreignKey':'MailAccountId'});db['MailApplication'][_0x8727('0x126')](db[_0x8727('0x14')],{'onDelete':_0x8727('0x14d')});db[_0x8727('0x47')][_0x8727('0x126')](db['MailQueue'],{'onDelete':_0x8727('0x14d')});db['MailApplication'][_0x8727('0x126')](db[_0x8727('0x3f')],{'onDelete':_0x8727('0x14d')});db[_0x8727('0x47')][_0x8727('0x126')](db[_0x8727('0x12a')],{'onDelete':_0x8727('0x14d'),'foreignKey':_0x8727('0x12b')});db['MailApplication'][_0x8727('0x126')](db[_0x8727('0x147')],{'onDelete':_0x8727('0x14d'),'foreignKey':_0x8727('0x14e')});db['MailQueueReport'][_0x8727('0x126')](db[_0x8727('0x3f')],{});db['MailQueueReport'][_0x8727('0x126')](db[_0x8727('0xeb')],{'as':_0x8727('0x14f'),'foreignKey':'ListId'});db['MailQueueReport'][_0x8727('0x126')](db['CmContact'],{'as':_0x8727('0x139'),'foreignKey':_0x8727('0x13a')});db[_0x8727('0x48')][_0x8727('0x126')](db[_0x8727('0x44')],{});db[_0x8727('0x48')][_0x8727('0x126')](db[_0x8727('0x46')],{});db[_0x8727('0x48')][_0x8727('0x126')](db[_0x8727('0x14')],{});db[_0x8727('0x48')][_0x8727('0x126')](db[_0x8727('0x142')],{});db[_0x8727('0x150')][_0x8727('0xf5')](db[_0x8727('0x4b')],{'as':_0x8727('0x151'),'onDelete':_0x8727('0xf8')});db[_0x8727('0x4d')][_0x8727('0xf5')](db[_0x8727('0x84')],{'as':'Dispositions','foreignKey':_0x8727('0x152')});db[_0x8727('0x4d')][_0x8727('0xf5')](db[_0x8727('0x82')],{'as':'Answers','foreignKey':_0x8727('0x152')});db[_0x8727('0x4d')]['hasMany'](db[_0x8727('0x50')],{'as':_0x8727('0x153')});db[_0x8727('0x4d')][_0x8727('0xf5')](db[_0x8727('0x4e')],{'as':'Applications'});db['FaxAccount'][_0x8727('0xf5')](db['VoiceExtension'],{'as':_0x8727('0x154'),'onDelete':_0x8727('0xf8')});db[_0x8727('0x4d')][_0x8727('0xf5')](db[_0x8727('0x52')],{'as':_0x8727('0x134')});db[_0x8727('0x4d')][_0x8727('0x126')](db[_0x8727('0x127')],{'as':_0x8727('0x127')});db[_0x8727('0x4d')][_0x8727('0x126')](db[_0x8727('0xeb')],{'as':_0x8727('0x14f'),'foreignKey':'ListId'});db['FaxAccount']['belongsTo'](db[_0x8727('0x12c')],{'as':_0x8727('0x12d'),'foreignKey':_0x8727('0x12e')});db['FaxAccount'][_0x8727('0x100')](db[_0x8727('0x14')],{'as':'Agents','through':_0x8727('0x155')});db['FaxApplication'][_0x8727('0x126')](db[_0x8727('0x14')],{'onDelete':'restrict'});db[_0x8727('0x4e')][_0x8727('0x126')](db['FaxQueue'],{'onDelete':'restrict'});db[_0x8727('0x4e')][_0x8727('0x126')](db[_0x8727('0x4d')],{'onDelete':_0x8727('0x14d')});db[_0x8727('0x4e')][_0x8727('0x126')](db[_0x8727('0x147')],{'onDelete':_0x8727('0x14d'),'foreignKey':_0x8727('0x14e')});db[_0x8727('0x50')][_0x8727('0xf5')](db[_0x8727('0x52')],{'as':_0x8727('0x134'),'onDelete':'cascade','foreignKey':'FaxInteractionId'});db['FaxInteraction'][_0x8727('0x126')](db[_0x8727('0x4d')],{'as':_0x8727('0x145'),'foreignKey':'FaxAccountId'});db[_0x8727('0x50')]['belongsTo'](db[_0x8727('0x156')],{'as':_0x8727('0x139'),'foreignKey':_0x8727('0x13a')});db['FaxInteraction'][_0x8727('0x126')](db[_0x8727('0x14')],{'as':_0x8727('0x146'),'foreignKey':_0x8727('0xf4')});db['FaxInteraction'][_0x8727('0x100')](db['Tag'],{'through':_0x8727('0x157'),'as':_0x8727('0x149')});db[_0x8727('0x50')]['belongsToMany'](db[_0x8727('0x147')],{'through':'fax_interaction_has_tags','as':_0x8727('0x158')});db[_0x8727('0x50')][_0x8727('0x100')](db[_0x8727('0x14')],{'as':_0x8727('0x159'),'through':_0x8727('0x15a'),'foreignKey':_0x8727('0x15b')});db[_0x8727('0x52')][_0x8727('0x126')](db[_0x8727('0x14')],{'onDelete':_0x8727('0xf8'),'as':_0x8727('0x14')});db['FaxMessage'][_0x8727('0x126')](db[_0x8727('0x50')],{'as':'Interaction','foreignKey':_0x8727('0x15b')});db['FaxMessage'][_0x8727('0x126')](db[_0x8727('0x156')],{'onDelete':_0x8727('0xf8'),'as':'Contact'});db[_0x8727('0x52')][_0x8727('0x126')](db[_0x8727('0x14a')],{'as':_0x8727('0x14a'),'foreignKey':_0x8727('0x15c')});db[_0x8727('0x52')]['belongsTo'](db[_0x8727('0x4d')],{'as':_0x8727('0x145'),'foreignKey':_0x8727('0x152')});db['FaxQueue'][_0x8727('0x100')](db[_0x8727('0x14')],{'as':_0x8727('0x130'),'through':_0x8727('0x10d')});db[_0x8727('0x54')]['belongsToMany'](db[_0x8727('0xe1')],{'through':_0x8727('0x15d'),'as':_0x8727('0x131')});db[_0x8727('0x15e')][_0x8727('0x126')](db[_0x8727('0x4d')],{});db[_0x8727('0x15e')][_0x8727('0x126')](db['CmList'],{'as':'List','foreignKey':_0x8727('0x141')});db[_0x8727('0x15e')][_0x8727('0x126')](db[_0x8727('0x156')],{'as':_0x8727('0x139'),'foreignKey':_0x8727('0x13a')});db[_0x8727('0x15e')]['belongsTo'](db[_0x8727('0x50')],{});db['FaxQueueReport']['belongsTo'](db[_0x8727('0x52')],{});db[_0x8727('0x15e')][_0x8727('0x126')](db['User'],{});db['FaxQueueReport'][_0x8727('0x126')](db['FaxQueue'],{});db[_0x8727('0x118')][_0x8727('0xf5')](db['Disposition'],{'as':'Dispositions','foreignKey':_0x8727('0x15f')});db[_0x8727('0x118')][_0x8727('0xf5')](db[_0x8727('0x82')],{'as':'Answers','foreignKey':'SmsAccountId'});db[_0x8727('0x118')][_0x8727('0xf5')](db['SmsMessage'],{'as':'Messages','foreignKey':_0x8727('0x15f')});db['SmsAccount'][_0x8727('0xf5')](db[_0x8727('0xfd')],{'as':_0x8727('0x153')});db[_0x8727('0x118')][_0x8727('0xf5')](db['SmsApplication'],{'as':_0x8727('0x140')});db['SmsAccount'][_0x8727('0x126')](db[_0x8727('0xeb')],{'as':'List','foreignKey':_0x8727('0x141')});db['SmsAccount']['belongsTo'](db['Pause'],{'as':_0x8727('0x12d'),'foreignKey':'mandatoryDispositionPauseId'});db[_0x8727('0x118')][_0x8727('0x100')](db[_0x8727('0x14')],{'as':'Agents','through':_0x8727('0x11a')});db[_0x8727('0x58')]['belongsTo'](db[_0x8727('0x14')],{'onDelete':'restrict'});db['SmsApplication'][_0x8727('0x126')](db[_0x8727('0x160')],{'onDelete':_0x8727('0x14d')});db[_0x8727('0x58')][_0x8727('0x126')](db[_0x8727('0x118')],{'onDelete':_0x8727('0x14d')});db['SmsApplication'][_0x8727('0x126')](db[_0x8727('0x12a')],{'onDelete':'restrict','foreignKey':'IntervalId'});db[_0x8727('0x58')][_0x8727('0x126')](db[_0x8727('0x147')],{'onDelete':_0x8727('0x14d'),'foreignKey':_0x8727('0x14e')});db[_0x8727('0xfd')][_0x8727('0xf5')](db[_0x8727('0x5b')],{'as':_0x8727('0x134'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x161')});db[_0x8727('0xfd')][_0x8727('0x126')](db[_0x8727('0x118')],{'as':'Account','foreignKey':_0x8727('0x15f')});db[_0x8727('0xfd')][_0x8727('0x126')](db['CmContact'],{'as':'Contact','foreignKey':'ContactId'});db['SmsInteraction']['belongsTo'](db[_0x8727('0x14')],{'as':'Owner','foreignKey':'UserId'});db[_0x8727('0xfd')]['belongsToMany'](db[_0x8727('0x147')],{'through':_0x8727('0x162'),'as':_0x8727('0x149')});db['SmsInteraction'][_0x8727('0x100')](db[_0x8727('0x147')],{'through':'sms_interaction_has_tags','as':_0x8727('0x158')});db['SmsInteraction']['belongsToMany'](db['User'],{'as':_0x8727('0x159'),'through':_0x8727('0x109'),'foreignKey':_0x8727('0x161')});db[_0x8727('0x5b')][_0x8727('0x126')](db[_0x8727('0x14')],{'as':_0x8727('0x14')});db[_0x8727('0x5b')][_0x8727('0x126')](db[_0x8727('0x156')],{'onDelete':_0x8727('0xf8'),'as':'Contact'});db['SmsMessage'][_0x8727('0x126')](db[_0x8727('0xfd')],{'onDelete':_0x8727('0xf8'),'as':_0x8727('0x14c'),'foreignKey':_0x8727('0x161')});db[_0x8727('0x5b')][_0x8727('0x126')](db[_0x8727('0x118')],{'as':_0x8727('0x145'),'foreignKey':_0x8727('0x15f')});db['SmsQueue'][_0x8727('0x100')](db['User'],{'as':_0x8727('0x130'),'through':_0x8727('0x38'),'foreignKey':_0x8727('0x163')});db[_0x8727('0x160')][_0x8727('0x100')](db[_0x8727('0xe1')],{'through':_0x8727('0x164'),'as':'Teams'});db[_0x8727('0x116')][_0x8727('0xf5')](db[_0x8727('0x84')],{'as':_0x8727('0x13e'),'foreignKey':'OpenchannelAccountId'});db[_0x8727('0x116')]['hasMany'](db['CannedAnswer'],{'as':_0x8727('0x13f'),'foreignKey':'OpenchannelAccountId'});db[_0x8727('0x116')][_0x8727('0xf5')](db[_0x8727('0x165')],{'as':'Interactions','foreignKey':_0x8727('0x166')});db[_0x8727('0x116')][_0x8727('0xf5')](db[_0x8727('0x62')],{'as':_0x8727('0x134'),'foreignKey':_0x8727('0x166')});db[_0x8727('0x116')]['hasMany'](db['OpenchannelApplication'],{'as':_0x8727('0x140'),'foreignKey':_0x8727('0x166')});db[_0x8727('0x116')][_0x8727('0x126')](db[_0x8727('0xeb')],{'as':_0x8727('0x14f'),'foreignKey':_0x8727('0x141')});db[_0x8727('0x116')][_0x8727('0x126')](db['Pause'],{'as':_0x8727('0x12d'),'foreignKey':_0x8727('0x12e')});db[_0x8727('0x116')][_0x8727('0x100')](db[_0x8727('0x14')],{'as':_0x8727('0x130'),'through':_0x8727('0x117')});db[_0x8727('0x5f')][_0x8727('0x126')](db[_0x8727('0x14')],{'onDelete':'restrict'});db[_0x8727('0x5f')]['belongsTo'](db[_0x8727('0x64')],{'onDelete':_0x8727('0x14d'),'foreignKey':_0x8727('0x167')});db[_0x8727('0x5f')]['belongsTo'](db['OpenchannelAccount'],{'onDelete':_0x8727('0x14d'),'foreignKey':_0x8727('0x166')});db[_0x8727('0x5f')]['belongsTo'](db['Interval'],{'onDelete':_0x8727('0x14d'),'foreignKey':'IntervalId'});db[_0x8727('0x5f')][_0x8727('0x126')](db[_0x8727('0x147')],{'onDelete':_0x8727('0x14d'),'foreignKey':_0x8727('0x14e')});db['OpenchannelInteraction'][_0x8727('0xf5')](db[_0x8727('0x62')],{'as':_0x8727('0x134'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x168')});db[_0x8727('0x165')][_0x8727('0x126')](db[_0x8727('0x116')],{'as':_0x8727('0x145'),'foreignKey':'OpenchannelAccountId'});db[_0x8727('0x165')]['belongsTo'](db['CmContact'],{'as':'Contact','foreignKey':_0x8727('0x13a')});db[_0x8727('0x165')][_0x8727('0x126')](db['User'],{'as':_0x8727('0x146'),'foreignKey':_0x8727('0xf4')});db[_0x8727('0x165')]['belongsToMany'](db['Tag'],{'through':_0x8727('0x169'),'as':_0x8727('0x149')});db[_0x8727('0x165')]['belongsToMany'](db[_0x8727('0x147')],{'through':_0x8727('0x169'),'as':'ThroughTags'});db[_0x8727('0x165')][_0x8727('0x100')](db[_0x8727('0x14')],{'as':_0x8727('0x159'),'through':_0x8727('0x10a'),'foreignKey':'OpenchannelInteractionId'});db[_0x8727('0x62')]['belongsTo'](db[_0x8727('0x14')],{'onDelete':_0x8727('0xf8'),'as':_0x8727('0x14')});db[_0x8727('0x62')][_0x8727('0x126')](db[_0x8727('0x156')],{'onDelete':'cascade','as':_0x8727('0x139')});db[_0x8727('0x62')][_0x8727('0x126')](db[_0x8727('0x165')],{'onDelete':'cascade','as':_0x8727('0x14c'),'foreignKey':_0x8727('0x168')});db[_0x8727('0x62')][_0x8727('0x126')](db[_0x8727('0x14a')],{'as':_0x8727('0x14a'),'foreignKey':_0x8727('0x15c')});db[_0x8727('0x62')][_0x8727('0x126')](db['OpenchannelAccount'],{'as':_0x8727('0x145'),'foreignKey':_0x8727('0x166')});db['OpenchannelQueue'][_0x8727('0x100')](db['User'],{'as':_0x8727('0x130'),'through':'UserOpenchannelQueue','foreignKey':'OpenchannelQueueId'});db[_0x8727('0x64')]['belongsToMany'](db['Team'],{'through':_0x8727('0x16a'),'as':_0x8727('0x131')});db[_0x8727('0x66')]['hasMany'](db['Disposition'],{'as':_0x8727('0x13e'),'foreignKey':'ChatWebsiteId'});db[_0x8727('0x66')][_0x8727('0xf5')](db[_0x8727('0x82')],{'as':_0x8727('0x13f'),'foreignKey':'ChatWebsiteId'});db['ChatWebsite'][_0x8727('0xf5')](db[_0x8727('0x73')],{'as':'ProactiveActions'});db[_0x8727('0x66')][_0x8727('0xf5')](db['ChatInteraction'],{'as':_0x8727('0x153')});db['ChatWebsite'][_0x8727('0xf5')](db[_0x8727('0x6a')],{'as':_0x8727('0x140')});db[_0x8727('0x66')][_0x8727('0xf5')](db[_0x8727('0x16b')],{'as':_0x8727('0x134')});db[_0x8727('0x66')]['belongsTo'](db[_0x8727('0xeb')],{'as':_0x8727('0x14f'),'foreignKey':_0x8727('0x141')});db[_0x8727('0x66')]['belongsTo'](db[_0x8727('0x12a')],{'as':_0x8727('0x12a'),'foreignKey':_0x8727('0x12b')});db[_0x8727('0x66')]['belongsTo'](db[_0x8727('0x12c')],{'as':'mandatoryDispositionPause','foreignKey':_0x8727('0x12e')});db[_0x8727('0x66')][_0x8727('0x100')](db[_0x8727('0x14')],{'as':_0x8727('0x130'),'through':'user_has_chat_websites'});db[_0x8727('0x68')][_0x8727('0x126')](db['OpenchannelAccount'],{});db[_0x8727('0x68')][_0x8727('0x126')](db['CmList'],{'as':_0x8727('0x14f'),'foreignKey':_0x8727('0x141')});db[_0x8727('0x68')][_0x8727('0x126')](db['CmContact'],{'as':_0x8727('0x139'),'foreignKey':_0x8727('0x13a')});db['OpenchannelQueueReport']['belongsTo'](db[_0x8727('0x165')],{});db[_0x8727('0x68')][_0x8727('0x126')](db[_0x8727('0x62')],{});db[_0x8727('0x68')][_0x8727('0x126')](db['User'],{});db[_0x8727('0x68')][_0x8727('0x126')](db['OpenchannelQueue'],{});db[_0x8727('0x6a')][_0x8727('0x126')](db[_0x8727('0x14')],{'as':_0x8727('0x16c'),'foreignKey':_0x8727('0xf4'),'onDelete':_0x8727('0x14d')});db[_0x8727('0x6a')]['belongsTo'](db[_0x8727('0x70')],{'as':_0x8727('0x16d'),'foreignKey':'ChatQueueId','onDelete':_0x8727('0x14d')});db[_0x8727('0x6a')]['belongsTo'](db[_0x8727('0x66')],{'as':'Website','foreignKey':'ChatWebsiteId','onDelete':_0x8727('0x14d')});db[_0x8727('0x6a')]['belongsTo'](db['Tag'],{'onDelete':_0x8727('0x14d'),'foreignKey':_0x8727('0x14e')});db['ChatInteraction'][_0x8727('0xf5')](db[_0x8727('0x16b')],{'as':'Messages','onDelete':_0x8727('0xf8'),'foreignKey':'ChatInteractionId'});db[_0x8727('0x6b')][_0x8727('0x126')](db[_0x8727('0x66')],{'as':_0x8727('0x145'),'foreignKey':_0x8727('0x16e')});db['ChatInteraction'][_0x8727('0x126')](db[_0x8727('0x156')],{'as':_0x8727('0x139'),'foreignKey':_0x8727('0x13a')});db[_0x8727('0x6b')][_0x8727('0x126')](db[_0x8727('0x14')],{'as':_0x8727('0x146'),'foreignKey':_0x8727('0xf4')});db[_0x8727('0x6b')][_0x8727('0x100')](db[_0x8727('0x147')],{'through':_0x8727('0x16f'),'as':_0x8727('0x149')});db['ChatInteraction'][_0x8727('0x100')](db[_0x8727('0x147')],{'through':_0x8727('0x16f'),'as':_0x8727('0x158')});db[_0x8727('0x6b')][_0x8727('0x100')](db[_0x8727('0x14')],{'as':_0x8727('0x159'),'through':_0x8727('0x107'),'foreignKey':'ChatInteractionId'});db['ChatMessage'][_0x8727('0x126')](db[_0x8727('0x14')],{'onDelete':_0x8727('0xf8'),'as':_0x8727('0x14')});db[_0x8727('0x16b')][_0x8727('0x126')](db[_0x8727('0x156')],{'onDelete':_0x8727('0xf8'),'as':_0x8727('0x139'),'foreignKey':_0x8727('0x13a')});db[_0x8727('0x16b')][_0x8727('0x126')](db[_0x8727('0x6b')],{'onDelete':'cascade','as':_0x8727('0x14c'),'foreignKey':_0x8727('0x170')});db[_0x8727('0x16b')]['belongsTo'](db[_0x8727('0x14a')],{'as':_0x8727('0x14a'),'foreignKey':_0x8727('0x15c')});db['ChatMessage']['belongsTo'](db[_0x8727('0x66')],{'as':_0x8727('0x145'),'foreignKey':_0x8727('0x16e')});db[_0x8727('0x6e')][_0x8727('0x126')](db[_0x8727('0x156')],{'onDelete':'cascade','as':'Contact','foreignKey':'ContactId'});db['ChatOfflineMessage']['belongsTo'](db[_0x8727('0x66')],{'as':'Account','foreignKey':_0x8727('0x16e')});db['ChatQueue']['belongsToMany'](db[_0x8727('0x14')],{'as':_0x8727('0x130'),'through':_0x8727('0x34'),'hooks':!![]});db[_0x8727('0x70')][_0x8727('0x100')](db['Team'],{'through':_0x8727('0x171'),'as':_0x8727('0x131')});db['ChatGroup'][_0x8727('0xf5')](db[_0x8727('0xcf')],{'as':'Messages','foreignKey':_0x8727('0x172'),'onDelete':_0x8727('0xf8')});db[_0x8727('0x72')]['belongsToMany'](db['User'],{'as':_0x8727('0x173'),'through':_0x8727('0x101')});db[_0x8727('0x73')][_0x8727('0x126')](db['ChatWebsite'],{'as':_0x8727('0x174'),'foreignKey':'ChatWebsiteId'});db['CmCompany'][_0x8727('0xf5')](db[_0x8727('0x156')],{'as':'Contacts','foreignKey':_0x8727('0x175')});db[_0x8727('0x156')][_0x8727('0xf5')](db[_0x8727('0x76')],{'as':_0x8727('0x176'),'foreignKey':'ContactId'});db['CmContact'][_0x8727('0xf5')](db[_0x8727('0x7a')],{'as':_0x8727('0xf9'),'foreignKey':_0x8727('0x13a')});db[_0x8727('0x156')][_0x8727('0xf5')](db[_0x8727('0x7c')],{'as':_0x8727('0x177'),'foreignKey':_0x8727('0x13a')});db[_0x8727('0x156')][_0x8727('0xf5')](db['ReportAgentPreview'],{'as':_0x8727('0x7e'),'foreignKey':_0x8727('0x13a')});db[_0x8727('0x156')]['hasMany'](db[_0x8727('0xd2')],{'as':_0x8727('0x125'),'foreignKey':'ContactId'});db['CmContact']['hasMany'](db[_0x8727('0x165')],{'as':_0x8727('0xfb'),'foreignKey':_0x8727('0x13a'),'onDelete':_0x8727('0x14d')});db[_0x8727('0x156')]['hasMany'](db[_0x8727('0x6b')],{'as':_0x8727('0xfc'),'foreignKey':_0x8727('0x13a'),'onDelete':_0x8727('0x14d')});db['CmContact'][_0x8727('0xf5')](db[_0x8727('0xfd')],{'as':_0x8727('0x108'),'foreignKey':_0x8727('0x13a'),'onDelete':'restrict'});db[_0x8727('0x156')]['hasMany'](db[_0x8727('0x50')],{'as':'FaxInteractions','foreignKey':_0x8727('0x13a'),'onDelete':'restrict'});db['CmContact']['hasMany'](db[_0x8727('0x44')],{'as':_0x8727('0xff'),'foreignKey':_0x8727('0x13a'),'onDelete':_0x8727('0x14d')});db[_0x8727('0x156')][_0x8727('0x126')](db[_0x8727('0x178')],{'as':_0x8727('0x179'),'foreignKey':_0x8727('0x175')});db[_0x8727('0x156')][_0x8727('0x126')](db[_0x8727('0xeb')],{'as':'List','foreignKey':_0x8727('0x141'),'onDelete':_0x8727('0xf8')});db[_0x8727('0x156')][_0x8727('0x100')](db[_0x8727('0x14')],{'as':_0x8727('0x159'),'through':_0x8727('0x103')});db['CmContact'][_0x8727('0x100')](db['Tag'],{'as':_0x8727('0x149'),'through':_0x8727('0x17a')});db['CmContact'][_0x8727('0x100')](db[_0x8727('0x147')],{'through':'cm_contact_has_tags','as':'ThroughTags'});db[_0x8727('0x76')][_0x8727('0x126')](db[_0x8727('0x156')],{'as':_0x8727('0x139'),'foreignKey':'ContactId','onDelete':_0x8727('0xf8')});db['CmHopper'][_0x8727('0x126')](db[_0x8727('0xeb')],{'as':_0x8727('0x14f'),'foreignKey':'ListId','onDelete':_0x8727('0xf8')});db[_0x8727('0x76')]['belongsTo'](db['User'],{'as':_0x8727('0x16c'),'foreignKey':_0x8727('0xf4')});db['CmHopper'][_0x8727('0x126')](db[_0x8727('0x1e')],{'as':_0x8727('0x16d'),'foreignKey':_0x8727('0x123'),'onDelete':_0x8727('0xf8')});db[_0x8727('0x76')]['belongsTo'](db[_0x8727('0x17b')],{'as':_0x8727('0x17b'),'foreignKey':'CampaignId','onDelete':'cascade'});db['CmHopper'][_0x8727('0x126')](db[_0x8727('0x14')],{'as':_0x8727('0x146'),'foreignKey':_0x8727('0x17c')});db[_0x8727('0x78')][_0x8727('0x126')](db[_0x8727('0x156')],{'as':_0x8727('0x139'),'foreignKey':_0x8727('0x13a'),'onDelete':'cascade'});db[_0x8727('0x78')][_0x8727('0x126')](db[_0x8727('0xeb')],{'as':_0x8727('0x14f'),'foreignKey':_0x8727('0x141'),'onDelete':_0x8727('0xf8')});db[_0x8727('0x78')][_0x8727('0x126')](db[_0x8727('0x1e')],{'as':_0x8727('0x16d'),'foreignKey':_0x8727('0x123'),'onDelete':_0x8727('0xf8')});db[_0x8727('0x78')][_0x8727('0x126')](db[_0x8727('0x17b')],{'as':'Campaign','foreignKey':_0x8727('0x17d'),'onDelete':_0x8727('0xf8')});db[_0x8727('0x17e')][_0x8727('0xf5')](db['Condition'],{'as':{'plural':_0x8727('0x17f'),'singular':_0x8727('0x180')},'foreignKey':_0x8727('0x181'),'onDelete':_0x8727('0xf8'),'hooks':!![]});db[_0x8727('0x17e')][_0x8727('0xf5')](db[_0x8727('0x86')],{'as':{'plural':'Any','singular':'OneAny'},'foreignKey':_0x8727('0x182'),'onDelete':_0x8727('0xf8'),'hooks':!![]});db[_0x8727('0x17e')][_0x8727('0xf5')](db[_0x8727('0x183')],{'as':_0x8727('0x184'),'foreignKey':_0x8727('0x185'),'onDelete':_0x8727('0xf8'),'hooks':!![]});db[_0x8727('0x12a')]['hasMany'](db['Interval'],{'as':_0x8727('0x186'),'foreignKey':_0x8727('0x12b'),'onDelete':_0x8727('0xf8'),'hooks':!![],'required':![]});db[_0x8727('0x12a')]['hasMany'](db[_0x8727('0x11e')],{'as':_0x8727('0xf7'),'foreignKey':_0x8727('0x12b'),'onDelete':_0x8727('0x14d')});db['Interval'][_0x8727('0xf5')](db['MailApplication'],{'as':_0x8727('0x187'),'foreignKey':_0x8727('0x12b')});db[_0x8727('0x12a')][_0x8727('0xf5')](db[_0x8727('0x6a')],{'as':_0x8727('0x188'),'foreignKey':_0x8727('0x12b')});db['Interval'][_0x8727('0xf5')](db['FaxApplication'],{'as':'FaxApplications','foreignKey':_0x8727('0x12b')});db[_0x8727('0x12a')]['hasMany'](db[_0x8727('0x58')],{'as':_0x8727('0x189'),'foreignKey':'IntervalId'});db['Schedule'][_0x8727('0x126')](db[_0x8727('0x3f')],{});db['Schedule'][_0x8727('0x126')](db['AnalyticDefaultReport'],{'foreignKey':_0x8727('0x18a')});db[_0x8727('0x8d')]['belongsTo'](db[_0x8727('0x18b')],{'foreignKey':_0x8727('0x18c')});db[_0x8727('0x8e')][_0x8727('0x100')](db[_0x8727('0x1c')],{'as':_0x8727('0x18d'),'through':'moh_has_sounds','onDelete':'restrict'});db[_0x8727('0x147')][_0x8727('0x100')](db['CmContact'],{'through':_0x8727('0x17a')});db[_0x8727('0x147')][_0x8727('0x100')](db[_0x8727('0x6b')],{'through':_0x8727('0x16f')});db[_0x8727('0x147')]['belongsToMany'](db['MailInteraction'],{'through':'mail_interaction_has_tags'});db[_0x8727('0x147')][_0x8727('0x100')](db[_0x8727('0xfd')],{'through':_0x8727('0x162')});db[_0x8727('0x147')]['belongsToMany'](db[_0x8727('0x50')],{'through':_0x8727('0x157')});db['Tag']['belongsToMany'](db['OpenchannelInteraction'],{'through':_0x8727('0x169')});db[_0x8727('0x91')]['hasMany'](db[_0x8727('0x86')],{'as':{'plural':_0x8727('0x18e'),'singular':_0x8727('0x18f')},'foreignKey':'TriggerAllId','onDelete':_0x8727('0xf8'),'hooks':!![]});db[_0x8727('0x91')][_0x8727('0xf5')](db['Condition'],{'as':{'plural':'AnyConditions','singular':_0x8727('0x190')},'foreignKey':'TriggerAnyId','onDelete':_0x8727('0xf8'),'hooks':!![]});db[_0x8727('0x91')][_0x8727('0xf5')](db[_0x8727('0x183')],{'as':_0x8727('0x184'),'foreignKey':_0x8727('0x191'),'onDelete':'cascade','hooks':!![]});db[_0x8727('0x18b')][_0x8727('0xf5')](db['AnalyticFieldReport'],{'as':_0x8727('0x192'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x18c'),'hooks':!![]});db['AnalyticDefaultReport'][_0x8727('0xf5')](db[_0x8727('0x9e')],{'as':_0x8727('0x192'),'onDelete':'cascade','foreignKey':_0x8727('0x18a')});db['AnalyticMetric'][_0x8727('0xf5')](db[_0x8727('0x9e')],{'as':_0x8727('0x192'),'onDelete':'cascade','foreignKey':_0x8727('0x193')});db[_0x8727('0x9e')][_0x8727('0x126')](db[_0x8727('0x9c')],{'foreignKey':_0x8727('0x193')});db[_0x8727('0xa1')][_0x8727('0xf5')](db['SalesforceConfiguration'],{'as':_0x8727('0x194'),'onDelete':_0x8727('0xf8'),'foreignKey':'AccountId'});db['SalesforceConfiguration'][_0x8727('0xf5')](db[_0x8727('0x195')],{'as':_0x8727('0x196'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x197')});db['SalesforceConfiguration']['hasMany'](db[_0x8727('0x195')],{'as':_0x8727('0x198'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x199')});db['SalesforceConfiguration']['hasMany'](db[_0x8727('0x195')],{'as':_0x8727('0x192'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x19a')});db[_0x8727('0x19b')][_0x8727('0x126')](db['SalesforceAccount'],{'as':_0x8727('0x145'),'foreignKey':_0x8727('0x19c')});db[_0x8727('0x195')]['hasMany'](db['SalesforceField'],{'as':_0x8727('0x19d'),'foreignKey':_0x8727('0x197')});db[_0x8727('0x195')][_0x8727('0xf5')](db[_0x8727('0x195')],{'as':_0x8727('0x19e'),'foreignKey':_0x8727('0x199')});db[_0x8727('0x195')]['hasMany'](db[_0x8727('0x195')],{'as':'Field','foreignKey':_0x8727('0x19a')});db[_0x8727('0x195')][_0x8727('0x126')](db[_0x8727('0x93')],{'as':_0x8727('0x93'),'foreignKey':'VariableId'});db[_0x8727('0xa5')][_0x8727('0xf5')](db[_0x8727('0xa7')],{'as':_0x8727('0x194'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x19c')});db[_0x8727('0xa7')][_0x8727('0xf5')](db[_0x8727('0x19f')],{'as':_0x8727('0x196'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x197')});db['SugarcrmConfiguration'][_0x8727('0xf5')](db[_0x8727('0x19f')],{'as':_0x8727('0x198'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x199')});db['SugarcrmConfiguration'][_0x8727('0xf5')](db[_0x8727('0x19f')],{'as':_0x8727('0x192'),'onDelete':_0x8727('0xf8'),'foreignKey':'FieldId'});db[_0x8727('0xa7')][_0x8727('0x126')](db[_0x8727('0xa5')],{'as':'Account','foreignKey':'AccountId'});db[_0x8727('0x19f')][_0x8727('0xf5')](db[_0x8727('0x19f')],{'as':'Subject','foreignKey':'SubjectId'});db[_0x8727('0x19f')][_0x8727('0xf5')](db[_0x8727('0x19f')],{'as':_0x8727('0x19e'),'foreignKey':_0x8727('0x199')});db[_0x8727('0x19f')][_0x8727('0xf5')](db['SugarcrmField'],{'as':_0x8727('0x1a0'),'foreignKey':'FieldId'});db['SugarcrmField'][_0x8727('0x126')](db[_0x8727('0x93')],{'as':_0x8727('0x93'),'foreignKey':_0x8727('0x1a1')});db['DeskAccount'][_0x8727('0xf5')](db[_0x8727('0xa9')],{'as':_0x8727('0x194'),'onDelete':'cascade','foreignKey':_0x8727('0x19c')});db['DeskConfiguration'][_0x8727('0xf5')](db['DeskField'],{'as':_0x8727('0x196'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x197')});db[_0x8727('0xa9')][_0x8727('0xf5')](db[_0x8727('0xab')],{'as':_0x8727('0x198'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x199')});db[_0x8727('0xa9')][_0x8727('0xf5')](db[_0x8727('0xab')],{'as':_0x8727('0x192'),'onDelete':'cascade','foreignKey':'FieldId'});db[_0x8727('0xa9')][_0x8727('0x126')](db[_0x8727('0x1a2')],{'as':_0x8727('0x145'),'foreignKey':'AccountId'});db['DeskConfiguration'][_0x8727('0x100')](db[_0x8727('0x147')],{'through':_0x8727('0x1a3')});db[_0x8727('0xab')][_0x8727('0xf5')](db[_0x8727('0xab')],{'as':_0x8727('0x19d'),'foreignKey':_0x8727('0x197')});db[_0x8727('0xab')]['hasMany'](db[_0x8727('0xab')],{'as':_0x8727('0x19e'),'foreignKey':_0x8727('0x199')});db['DeskField'][_0x8727('0xf5')](db[_0x8727('0xab')],{'as':'Field','foreignKey':_0x8727('0x19a')});db[_0x8727('0xab')]['belongsTo'](db[_0x8727('0x93')],{'as':_0x8727('0x93'),'foreignKey':'VariableId'});db[_0x8727('0xad')]['hasMany'](db[_0x8727('0xaf')],{'as':_0x8727('0x194'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x19c')});db[_0x8727('0xaf')][_0x8727('0xf5')](db[_0x8727('0xb1')],{'as':_0x8727('0x196'),'onDelete':'cascade','foreignKey':'SubjectId'});db[_0x8727('0xaf')][_0x8727('0xf5')](db[_0x8727('0xb1')],{'as':_0x8727('0x198'),'onDelete':'cascade','foreignKey':_0x8727('0x199')});db[_0x8727('0xaf')][_0x8727('0xf5')](db['ZohoField'],{'as':_0x8727('0x192'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x19a')});db[_0x8727('0xaf')]['belongsTo'](db[_0x8727('0xad')],{'as':_0x8727('0x145'),'foreignKey':_0x8727('0x19c')});db[_0x8727('0xb1')][_0x8727('0xf5')](db[_0x8727('0xb1')],{'as':_0x8727('0x19d'),'foreignKey':'SubjectId'});db[_0x8727('0xb1')][_0x8727('0xf5')](db[_0x8727('0xb1')],{'as':_0x8727('0x19e'),'foreignKey':_0x8727('0x199')});db[_0x8727('0xb1')][_0x8727('0xf5')](db['ZohoField'],{'as':'Field','foreignKey':_0x8727('0x19a')});db[_0x8727('0xb1')]['belongsTo'](db['Variable'],{'as':'Variable','foreignKey':_0x8727('0x1a1')});db['ZendeskAccount'][_0x8727('0xf5')](db[_0x8727('0xb4')],{'as':_0x8727('0x194'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x19c')});db[_0x8727('0xb4')][_0x8727('0xf5')](db[_0x8727('0xb5')],{'as':_0x8727('0x196'),'foreignKey':_0x8727('0x197')});db[_0x8727('0xb4')][_0x8727('0xf5')](db['ZendeskField'],{'as':'Descriptions','foreignKey':_0x8727('0x199')});db[_0x8727('0xb4')][_0x8727('0xf5')](db[_0x8727('0xb5')],{'as':_0x8727('0x192'),'foreignKey':'FieldId'});db[_0x8727('0xb4')][_0x8727('0x126')](db[_0x8727('0xb3')],{'as':'Account','foreignKey':_0x8727('0x19c')});db[_0x8727('0xb4')][_0x8727('0x100')](db[_0x8727('0x147')],{'through':_0x8727('0x1a4')});db[_0x8727('0xb5')][_0x8727('0xf5')](db['ZendeskField'],{'as':_0x8727('0x19d'),'foreignKey':_0x8727('0x197')});db[_0x8727('0xb5')][_0x8727('0xf5')](db[_0x8727('0xb5')],{'as':_0x8727('0x19e'),'foreignKey':'DescriptionId'});db[_0x8727('0xb5')]['hasMany'](db['ZendeskField'],{'as':'Field','foreignKey':_0x8727('0x19a')});db[_0x8727('0xb5')]['belongsTo'](db[_0x8727('0x93')],{'as':'Variable','foreignKey':'VariableId'});db[_0x8727('0xb7')]['hasMany'](db['FreshdeskConfiguration'],{'as':_0x8727('0x194'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x19c')});db['FreshdeskConfiguration'][_0x8727('0xf5')](db['FreshdeskField'],{'as':_0x8727('0x196'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x197')});db['FreshdeskConfiguration'][_0x8727('0xf5')](db[_0x8727('0xba')],{'as':'Descriptions','onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x199')});db[_0x8727('0x1a5')]['hasMany'](db[_0x8727('0xba')],{'as':_0x8727('0x192'),'onDelete':'cascade','foreignKey':_0x8727('0x19a')});db['FreshdeskConfiguration'][_0x8727('0x126')](db[_0x8727('0xb7')],{'as':_0x8727('0x145'),'foreignKey':_0x8727('0x19c')});db[_0x8727('0x1a5')][_0x8727('0x100')](db[_0x8727('0x147')],{'through':_0x8727('0x1a6')});db[_0x8727('0xba')][_0x8727('0xf5')](db[_0x8727('0xba')],{'as':'Subject','foreignKey':'SubjectId'});db[_0x8727('0xba')][_0x8727('0xf5')](db[_0x8727('0xba')],{'as':_0x8727('0x19e'),'foreignKey':_0x8727('0x199')});db[_0x8727('0xba')][_0x8727('0xf5')](db[_0x8727('0xba')],{'as':'Field','foreignKey':_0x8727('0x19a')});db[_0x8727('0xba')]['belongsTo'](db['Variable'],{'as':'Variable','foreignKey':'VariableId'});db[_0x8727('0xbc')][_0x8727('0xf5')](db[_0x8727('0xbe')],{'as':_0x8727('0x194'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x19c')});db['VtigerConfiguration']['hasMany'](db[_0x8727('0xc0')],{'as':_0x8727('0x196'),'foreignKey':_0x8727('0x197')});db[_0x8727('0xbe')][_0x8727('0xf5')](db[_0x8727('0xc0')],{'as':_0x8727('0x198'),'foreignKey':_0x8727('0x199')});db[_0x8727('0xbe')][_0x8727('0xf5')](db[_0x8727('0xc0')],{'as':'Fields','foreignKey':_0x8727('0x19a')});db[_0x8727('0xbe')][_0x8727('0x126')](db[_0x8727('0xbc')],{'as':_0x8727('0x145'),'foreignKey':_0x8727('0x19c')});db[_0x8727('0xbe')][_0x8727('0x100')](db[_0x8727('0x147')],{'through':'int_vtiger_configuration_has_tags'});db[_0x8727('0xc0')][_0x8727('0xf5')](db[_0x8727('0xc0')],{'as':'Subject','foreignKey':_0x8727('0x197')});db[_0x8727('0xc0')]['hasMany'](db[_0x8727('0xc0')],{'as':_0x8727('0x19e'),'foreignKey':_0x8727('0x199')});db[_0x8727('0xc0')]['hasMany'](db[_0x8727('0xc0')],{'as':'Field','foreignKey':_0x8727('0x19a')});db[_0x8727('0xc0')][_0x8727('0x126')](db['Variable'],{'as':'Variable','foreignKey':_0x8727('0x1a1')});db[_0x8727('0x1a7')][_0x8727('0xf5')](db[_0x8727('0xc2')],{'as':_0x8727('0x194'),'onDelete':_0x8727('0xf8'),'foreignKey':'AccountId'});db['ServicenowConfiguration'][_0x8727('0xf5')](db['ServicenowField'],{'as':_0x8727('0x196'),'foreignKey':'SubjectId'});db[_0x8727('0xc2')]['hasMany'](db[_0x8727('0xc4')],{'as':_0x8727('0x198'),'foreignKey':'DescriptionId'});db[_0x8727('0xc2')]['hasMany'](db[_0x8727('0xc4')],{'as':_0x8727('0x192'),'foreignKey':_0x8727('0x19a')});db['ServicenowConfiguration'][_0x8727('0x126')](db[_0x8727('0x1a7')],{'as':'Account','foreignKey':'AccountId'});db[_0x8727('0xc4')][_0x8727('0xf5')](db['ServicenowField'],{'as':_0x8727('0x19d'),'foreignKey':_0x8727('0x197')});db[_0x8727('0xc4')][_0x8727('0xf5')](db['ServicenowField'],{'as':_0x8727('0x19e'),'foreignKey':_0x8727('0x199')});db[_0x8727('0xc4')][_0x8727('0xf5')](db[_0x8727('0xc4')],{'as':_0x8727('0x1a0'),'foreignKey':'FieldId'});db[_0x8727('0xc4')][_0x8727('0x126')](db[_0x8727('0x93')],{'as':_0x8727('0x93'),'foreignKey':_0x8727('0x1a1')});db[_0x8727('0xc6')][_0x8727('0xf5')](db[_0x8727('0xc7')],{'as':_0x8727('0x194'),'onDelete':'cascade','foreignKey':'AccountId'});db['Dynamics365Configuration']['hasMany'](db[_0x8727('0xc9')],{'as':_0x8727('0x196'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x197')});db[_0x8727('0xc7')][_0x8727('0xf5')](db[_0x8727('0xc9')],{'as':'Descriptions','onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x199')});db[_0x8727('0xc7')][_0x8727('0xf5')](db[_0x8727('0xc9')],{'as':_0x8727('0x192'),'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x19a')});db[_0x8727('0xc7')]['belongsTo'](db[_0x8727('0xc6')],{'as':_0x8727('0x145'),'foreignKey':'AccountId'});db[_0x8727('0xc9')][_0x8727('0xf5')](db[_0x8727('0xc9')],{'as':_0x8727('0x19d'),'foreignKey':_0x8727('0x197')});db[_0x8727('0xc9')][_0x8727('0xf5')](db[_0x8727('0xc9')],{'as':_0x8727('0x19e'),'foreignKey':_0x8727('0x199')});db[_0x8727('0xc9')][_0x8727('0xf5')](db[_0x8727('0xc9')],{'as':_0x8727('0x1a0'),'foreignKey':_0x8727('0x19a')});db[_0x8727('0xc9')]['belongsTo'](db[_0x8727('0x93')],{'as':'Variable','foreignKey':'VariableId'});db[_0x8727('0xcd')]['belongsTo'](db[_0x8727('0x66')],{});db[_0x8727('0xcd')][_0x8727('0x126')](db[_0x8727('0xeb')],{'as':_0x8727('0x14f'),'foreignKey':'ListId'});db['ChatQueueReport']['belongsTo'](db[_0x8727('0x156')],{'as':'Contact','foreignKey':_0x8727('0x13a')});db[_0x8727('0xcd')][_0x8727('0x126')](db[_0x8727('0x6b')],{});db[_0x8727('0xcd')]['belongsTo'](db['ChatMessage'],{});db[_0x8727('0xcd')][_0x8727('0x126')](db[_0x8727('0x14')],{});db[_0x8727('0xcd')][_0x8727('0x126')](db['ChatQueue'],{});db['ChatInternalMessage'][_0x8727('0x126')](db[_0x8727('0x14')],{'onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x1a8')});db[_0x8727('0xcf')][_0x8727('0x126')](db[_0x8727('0x14')],{'onDelete':'cascade','foreignKey':_0x8727('0x1a9')});db[_0x8727('0xd2')][_0x8727('0xf5')](db[_0x8727('0xd0')],{'foreignKey':_0x8727('0x1aa'),'onDelete':'cascade'});db['JscriptySessionReport']['hasMany'](db[_0x8727('0x1ab')],{'foreignKey':_0x8727('0x1aa'),'onDelete':_0x8727('0xf8')});db[_0x8727('0xd3')][_0x8727('0x126')](db[_0x8727('0x118')],{});db['SmsQueueReport'][_0x8727('0x126')](db['CmList'],{'as':'List','foreignKey':_0x8727('0x141')});db['SmsQueueReport'][_0x8727('0x126')](db['CmContact'],{'as':_0x8727('0x139'),'foreignKey':_0x8727('0x13a')});db['SmsQueueReport'][_0x8727('0x126')](db[_0x8727('0xfd')],{});db[_0x8727('0xd3')][_0x8727('0x126')](db[_0x8727('0x5b')],{});db[_0x8727('0xd3')][_0x8727('0x126')](db['User'],{});db[_0x8727('0xd3')][_0x8727('0x126')](db[_0x8727('0x160')],{});db[_0x8727('0xd9')][_0x8727('0xf5')](db['JscriptySessionReport'],{'foreignKey':_0x8727('0x1ac')});db[_0x8727('0xd9')][_0x8727('0xf5')](db[_0x8727('0xd0')],{'foreignKey':_0x8727('0x1ac')});db[_0x8727('0xd9')][_0x8727('0xf5')](db[_0x8727('0x1ab')],{'foreignKey':_0x8727('0x1ac')});db['SquareProject'][_0x8727('0x100')](db[_0x8727('0x14')],{'as':_0x8727('0x159'),'through':'user_has_square_projects'});db[_0x8727('0xe1')][_0x8727('0x100')](db[_0x8727('0x14')],{'as':_0x8727('0x130'),'through':'user_has_teams'});db[_0x8727('0xe1')][_0x8727('0x100')](db[_0x8727('0x1e')],{'through':_0x8727('0x132'),'as':_0x8727('0x10b')});db[_0x8727('0xe1')][_0x8727('0x100')](db[_0x8727('0x142')],{'through':_0x8727('0x143'),'as':_0x8727('0x1ad')});db[_0x8727('0xe1')]['belongsToMany'](db[_0x8727('0x70')],{'through':_0x8727('0x171'),'as':_0x8727('0x10c')});db[_0x8727('0xe1')][_0x8727('0x100')](db[_0x8727('0x54')],{'through':_0x8727('0x15d'),'as':_0x8727('0x1ae')});db[_0x8727('0xe1')][_0x8727('0x100')](db[_0x8727('0x160')],{'through':'team_has_sms_queues','as':_0x8727('0x10e')});db['Team'][_0x8727('0x100')](db[_0x8727('0x64')],{'through':'team_has_openchannel_queues','as':'OpenchannelQueues'});db['Campaign'][_0x8727('0xf5')](db['CmHopper'],{'as':_0x8727('0x176'),'foreignKey':'CampaignId'});db[_0x8727('0x17b')]['hasMany'](db['CmHopperFinal'],{'as':_0x8727('0xf9'),'foreignKey':_0x8727('0x17d')});db['Campaign'][_0x8727('0xf5')](db[_0x8727('0x7c')],{'as':_0x8727('0x177'),'foreignKey':_0x8727('0x17d')});db['Campaign'][_0x8727('0xf5')](db[_0x8727('0x78')],{'as':'HopperBlacks','foreignKey':'CampaignId'});db[_0x8727('0x17b')][_0x8727('0x126')](db['Trunk'],{'as':'Trunk','foreignKey':_0x8727('0x1af')});db[_0x8727('0x17b')][_0x8727('0x126')](db['Trunk'],{'as':_0x8727('0x128'),'foreignKey':'TrunkBackupId'});db[_0x8727('0x17b')][_0x8727('0x126')](db[_0x8727('0x12a')],{'as':_0x8727('0x12a'),'foreignKey':_0x8727('0x12b')});db[_0x8727('0x17b')][_0x8727('0x126')](db[_0x8727('0x11b')],{'as':_0x8727('0x11b'),'foreignKey':'SquareProjectId'});db[_0x8727('0x17b')][_0x8727('0x100')](db['CmList'],{'as':_0x8727('0x12f'),'through':_0x8727('0x1b0')});db[_0x8727('0x17b')][_0x8727('0x100')](db[_0x8727('0xeb')],{'as':_0x8727('0x133'),'through':_0x8727('0x1b1')});db[_0x8727('0x1b2')][_0x8727('0x126')](db[_0x8727('0x46')],{});db[_0x8727('0x1b2')][_0x8727('0x126')](db['MailInteraction'],{});db['MailTransferReport']['belongsTo'](db[_0x8727('0x3f')],{'foreignKey':_0x8727('0x1b3'),'as':'FromAccount'});db['MailTransferReport'][_0x8727('0x126')](db[_0x8727('0x14')],{'foreignKey':_0x8727('0x1b4'),'as':_0x8727('0x1b5')});db['MailTransferReport']['belongsTo'](db[_0x8727('0x14')],{'foreignKey':_0x8727('0x1b6'),'as':_0x8727('0x1b7')});db['MailTransferReport']['belongsTo'](db['MailQueue'],{'foreignKey':_0x8727('0x1b8'),'as':_0x8727('0x1b9')});db[_0x8727('0x1b2')][_0x8727('0x126')](db[_0x8727('0x3f')],{'foreignKey':'ToMailAccountId','as':'ToAccount'});db[_0x8727('0x1ba')][_0x8727('0x126')](db[_0x8727('0x16b')],{});db[_0x8727('0x1ba')][_0x8727('0x126')](db[_0x8727('0x6b')],{});db[_0x8727('0x1ba')][_0x8727('0x126')](db[_0x8727('0x66')],{'foreignKey':_0x8727('0x1bb'),'as':_0x8727('0x1bc')});db['ChatTransferReport'][_0x8727('0x126')](db[_0x8727('0x14')],{'foreignKey':_0x8727('0x1b4'),'as':'FromAgent'});db[_0x8727('0x1ba')][_0x8727('0x126')](db[_0x8727('0x14')],{'foreignKey':_0x8727('0x1b6'),'as':_0x8727('0x1b7')});db['ChatTransferReport'][_0x8727('0x126')](db['ChatQueue'],{'foreignKey':_0x8727('0x1bd'),'as':_0x8727('0x1b9')});db[_0x8727('0x1ba')]['belongsTo'](db[_0x8727('0x66')],{'foreignKey':'ToChatWebsiteId','as':'ToAccount'});db[_0x8727('0x1be')][_0x8727('0x126')](db[_0x8727('0x52')],{});db[_0x8727('0x1be')]['belongsTo'](db['FaxInteraction'],{});db[_0x8727('0x1be')]['belongsTo'](db[_0x8727('0x4d')],{'foreignKey':_0x8727('0x1bf'),'as':_0x8727('0x1bc')});db[_0x8727('0x1be')][_0x8727('0x126')](db[_0x8727('0x14')],{'foreignKey':_0x8727('0x1b4'),'as':_0x8727('0x1b5')});db[_0x8727('0x1be')][_0x8727('0x126')](db[_0x8727('0x14')],{'foreignKey':_0x8727('0x1b6'),'as':'ToAgent'});db[_0x8727('0x1be')]['belongsTo'](db[_0x8727('0x54')],{'foreignKey':_0x8727('0x1c0'),'as':_0x8727('0x1b9')});db[_0x8727('0x1be')][_0x8727('0x126')](db[_0x8727('0x4d')],{'foreignKey':_0x8727('0x1c1'),'as':'ToAccount'});db[_0x8727('0x1c2')][_0x8727('0x126')](db[_0x8727('0x62')],{});db[_0x8727('0x1c2')][_0x8727('0x126')](db[_0x8727('0x165')],{});db[_0x8727('0x1c2')]['belongsTo'](db[_0x8727('0x116')],{'foreignKey':'FromOpenchannelAccountId','as':_0x8727('0x1bc')});db[_0x8727('0x1c2')][_0x8727('0x126')](db[_0x8727('0x14')],{'foreignKey':_0x8727('0x1b4'),'as':_0x8727('0x1b5')});db[_0x8727('0x1c2')][_0x8727('0x126')](db[_0x8727('0x14')],{'foreignKey':'ToUserId','as':'ToAgent'});db[_0x8727('0x1c2')]['belongsTo'](db[_0x8727('0x64')],{'foreignKey':_0x8727('0x1c3'),'as':'ToQueue'});db[_0x8727('0x1c2')]['belongsTo'](db[_0x8727('0x116')],{'foreignKey':'ToOpenchannelAccountId','as':'ToAccount'});db['SmsTransferReport']['belongsTo'](db[_0x8727('0x5b')],{});db[_0x8727('0x1c4')][_0x8727('0x126')](db[_0x8727('0xfd')],{});db[_0x8727('0x1c4')][_0x8727('0x126')](db[_0x8727('0x118')],{'foreignKey':_0x8727('0x1c5'),'as':_0x8727('0x1bc')});db[_0x8727('0x1c4')][_0x8727('0x126')](db['User'],{'foreignKey':_0x8727('0x1b4'),'as':_0x8727('0x1b5')});db['SmsTransferReport'][_0x8727('0x126')](db[_0x8727('0x14')],{'foreignKey':'ToUserId','as':_0x8727('0x1b7')});db[_0x8727('0x1c4')][_0x8727('0x126')](db['SmsQueue'],{'foreignKey':_0x8727('0x1c6'),'as':'ToQueue'});db['SmsTransferReport'][_0x8727('0x126')](db[_0x8727('0x118')],{'foreignKey':_0x8727('0x1c7'),'as':_0x8727('0x1c8')});db['CmList'][_0x8727('0xf5')](db[_0x8727('0x84')],{'as':_0x8727('0x13e'),'foreignKey':_0x8727('0x141')});db[_0x8727('0xeb')]['hasMany'](db[_0x8727('0x7f')],{'as':_0x8727('0x1c9'),'foreignKey':_0x8727('0x141')});db[_0x8727('0xeb')]['hasMany'](db[_0x8727('0x156')],{'as':'Contacts','onDelete':_0x8727('0xf8'),'foreignKey':_0x8727('0x141')});db[_0x8727('0xeb')][_0x8727('0xf5')](db['CmHopperFinal'],{'as':_0x8727('0xf9'),'foreignKey':'ListId'});db[_0x8727('0xeb')][_0x8727('0xf5')](db['CmHopperHistory'],{'as':'HopperHistory','foreignKey':_0x8727('0x141')});db[_0x8727('0xeb')][_0x8727('0xf5')](db['ReportAgentPreview'],{'as':_0x8727('0x7e'),'foreignKey':'ListId'});db[_0x8727('0xeb')][_0x8727('0x100')](db[_0x8727('0x1e')],{'as':_0x8727('0x1ca'),'through':_0x8727('0x1cb')});db[_0x8727('0xeb')]['belongsToMany'](db[_0x8727('0x14')],{'as':_0x8727('0x130'),'through':_0x8727('0x104')});db['VoicePrefix'][_0x8727('0xf5')](db[_0x8727('0x11e')],{'as':_0x8727('0xf7'),'onDelete':_0x8727('0x14d')});db['VoicePrefix']['belongsToMany'](db['User'],{'as':_0x8727('0x130'),'through':_0x8727('0x111')});db[_0x8727('0xee')][_0x8727('0xf5')](db['User'],{'as':_0x8727('0x159'),'foreignKey':_0x8727('0x1cc')});db[_0x8727('0xee')]['hasMany'](db[_0x8727('0xef')],{'as':_0x8727('0x1cd'),'foreignKey':_0x8727('0x1cc'),'onDelete':_0x8727('0xf8')});db[_0x8727('0xef')]['hasMany'](db[_0x8727('0xf1')],{'as':_0x8727('0x1ce'),'foreignKey':'sectionId','onDelete':_0x8727('0xf8')});module[_0x8727('0x1cf')]={'db':db,'dbH':dbH};
\ No newline at end of file
+var _0x627e=['../api/action/action.model','Automation','CannedAnswer','../api/cannedAnswer/cannedAnswer.model','Disposition','../api/disposition/disposition.model','Interval','Pause','../api/pause/pause.model','../api/cdr/cdr.model','Schedule','Sound','../api/sound/sound.model','Tag','Trigger','../api/trigger/trigger.model','../api/variable/variable.model','Integration','../api/integration/integration.model','IntegrationReport','../api/analyticCustomReport/analyticCustomReport.model','AnalyticDefaultReport','../api/analyticDefaultReport/analyticDefaultReport.model','../api/analyticExtractedReport/analyticExtractedReport.model','AnalyticMetric','AnalyticTreeReport','../api/analyticTreeReport/analyticTreeReport.model','SalesforceConfiguration','SugarcrmConfiguration','../api/intSugarcrmConfiguration/intSugarcrmConfiguration.model','SugarcrmField','../api/intSugarcrmField/intSugarcrmField.model','DeskAccount','../api/intDeskAccount/intDeskAccount.model','DeskField','../api/intZohoAccount/intZohoAccount.model','ZohoConfiguration','../api/intZohoConfiguration/intZohoConfiguration.model','ZohoField','../api/intZohoField/intZohoField.model','../api/intZendeskAccount/intZendeskAccount.model','ZendeskConfiguration','../api/intZendeskConfiguration/intZendeskConfiguration.model','../api/intZendeskField/intZendeskField.model','FreshdeskConfiguration','FreshdeskField','../api/intFreshdeskField/intFreshdeskField.model','../api/intVtigerAccount/intVtigerAccount.model','VtigerConfiguration','../api/intVtigerConfiguration/intVtigerConfiguration.model','VtigerField','ServicenowAccount','../api/intServicenowAccount/intServicenowAccount.model','ServicenowConfiguration','../api/intServicenowConfiguration/intServicenowConfiguration.model','ServicenowField','Dynamics365Account','../api/intDynamics365Account/intDynamics365Account.model','Dynamics365Configuration','../api/intDynamics365Configuration/intDynamics365Configuration.model','Dynamics365Field','../api/intDynamics365Field/intDynamics365Field.model','../api/network/network.model','ChatInternalMessage','JscriptyAnswerReport','../api/jscriptyAnswerReport/jscriptyAnswerReport.model','JscriptyQuestionReport','../api/jscriptyQuestionReport/jscriptyQuestionReport.model','../api/jscriptySessionReport/jscriptySessionReport.model','SquareReport','../api/squareReport/squareReport.model','SquareDetailsReport','../api/squareReportDetail/squareReportDetail.model','JscriptyProject','Setting','../api/setting/setting.model','SquareOdbc','../api/squareProject/squareProject.model','../api/squareMessage/squareMessage.model','../api/team/team.model','License','Campaign','../api/campaign/campaign.model','Migration','../api/migration/migration.model','Attachment','../api/attachment/attachment.model','Plugin','MailTransferReport','../api/mailTransferReport/mailTransferReport.model','ChatTransferReport','../api/chatTransferReport/chatTransferReport.model','../api/openchannelTransferReport/openchannelTransferReport.model','../api/smsTransferReport/smsTransferReport.model','CmList','../api/voicePrefix/voicePrefix.model','UserProfile','../api/userProfile/userProfile.model','UserProfileSection','../api/userProfileSection/userProfileSection.model','UserProfileResource','../api/userProfileResource/userProfileResource.model','cascade','hasMany','UserId','VoiceQueuesRt','HopperFinals','HopperHistory','OpenchannelInteractions','ChatInteractions','FaxInteractions','userProfileId','belongsToMany','Groups','chat_group_has_users','Lists','cm_user_has_lists','Team','user_has_teams','user_has_mail_interactions','user_has_fax_interactions','SmsInteractions','user_has_sms_interactions','user_has_openchannel_interactions','VoiceQueue','VoiceQueues','MailQueues','UserMailQueue','ChatQueues','FaxQueues','SmsQueue','SmsQueues','OpenchannelQueues','UserOpenchannelQueue','VoicePrefix','VoicePrefixes','user_has_voice_prefixes','ChatWebsites','user_has_chat_websites','FaxAccounts','user_has_fax_accounts','MailAccounts','user_has_mail_accounts','OpenchannelAccounts','user_has_openchannel_accounts','SmsAccounts','SquareProject','SquareProjects','user_has_square_projects','VoiceExtension','SpiedAgents','ChanSpyId','Applications','Sounds','Members','Hoppers','VoiceQueueId','HopperHistories','CmHopperBlack','JscriptySessionReport','belongsTo','Trunk','TrunkId','TrunkBackup','IntervalId','mandatoryDispositionPauseId','voice_queues_has_cm_lists','Agents','team_has_voice_queues','BlackLists','voice_queues_has_cm_blacklists','ScreenRecording','mailbox','VoiceCallReport','VoiceQueueReport','uniqueid','AgentReports','ContactId','MailAccountId','hasOne','MailServerOut','Smtp','Dispositions','Answers','Messages','Interactions','ListId','Template','TemplateId','mandatoryDispositionPause','team_has_mail_queues','Teams','MailInteractionId','Account','Contact','Owner','mail_interaction_has_tags','ThroughTags','Users','Attachments','Interaction','restrict','TagId','MailQueueReport','Dashboard','FaxAccountId','FaxApplication','Exntensions','FaxMessage','List','Tags','FaxInteractionId','AttachmentId','team_has_fax_queues','SmsAccountId','user_has_sms_accounts','SmsMessage','SmsInteractionId','SmsQueueId','team_has_sms_queues','OpenchannelAccountId','OpenchannelApplication','OpenchannelQueueId','openchannel_interaction_has_tags','OpenchannelInteractionId','team_has_openchannel_queues','ChatWebsiteId','ChatInteraction','OpenchannelQueueReport','Agent','ChatQueue','Queue','Website','ChatInteractionId','chat_interaction_has_tags','user_has_chat_interactions','ChatOfflineMessage','ChatGroupId','CmCompany','Contacts','JscriptySessions','Company','CompanyId','cm_user_has_contacts','cm_contact_has_tags','CampaignId','OwnerId','Condition','All','OneAll','AutomationAllId','Any','Actions','Intervals','ChatApplications','SmsApplications','DefaultReportId','AnalyticCustomReport','CustomReportId','Mohs','moh_has_sounds','fax_interaction_has_tags','AllConditions','AllCondition','AnyConditions','AnyCondition','TriggerAnyId','TriggerId','AnalyticFieldReport','Fields','MetricId','SalesforceAccount','Configurations','AccountId','SalesforceField','Subjects','SubjectId','Descriptions','DescriptionId','FieldId','Subject','Field','Variable','VariableId','SugarcrmAccount','Description','DeskConfiguration','ZohoAccount','ZendeskField','ZendeskAccount','int_zendesk_configuration_has_tags','FreshdeskAccount','int_freshdesk_configuration_has_tags','VtigerAccount','int_vtiger_configuration_has_tags','ChatQueueReport','ToId','SessionId','SmsQueueReport','ProjectId','HopperBlacks','TrunkBackupId','SquareProjectId','campaigns_has_cm_blacklists','FromMailAccountId','FromAgent','ToUserId','ToMailQueueId','ToMailAccountId','ToAccount','FromChatWebsiteId','ToChatQueueId','FaxTransferReport','FromFaxAccountId','FromAccount','ToAgent','ToQueue','ToFaxAccountId','OpenchannelTransferReport','ToOpenchannelQueueId','ToOpenchannelAccountId','SmsTransferReport','FromSmsAccountId','FromUserId','ToSmsQueueId','CustomFields','Extensions','UserProfileSections','sectionId','exports','path','../config/environment','sequelize','lodash','jstz','defaultsDeep','127.0.0.1','mysql','utf8mb4','name','utf8','utf8_general_ci','xcall','xC@LL1234','database','username','options','sequelizeHistory','password','User','import','../api/user/user.model','VoiceChanSpy','../api/voiceChanSpy/voiceChanSpy.model','VoiceContext','../api/voiceContext/voiceContext.model','VoiceMusicOnHold','../api/voiceMusicOnHold/voiceMusicOnHold.model','../api/voiceQueue/voiceQueue.model','VoiceRecording','../api/voiceRecording/voiceRecording.model','VoiceMail','VoiceMailMessage','../api/voiceMailMessage/voiceMailMessage.model','../api/voiceCallReport/voiceCallReport.model','VoiceDialReport','../api/voiceDialReport/voiceDialReport.model','VoiceAgentReport','../api/voiceAgentReport/voiceAgentReport.model','../api/voiceQueueReport/voiceQueueReport.model','../api/memberReport/memberReport.model','VoiceTransferReport','../api/voiceTransferReport/voiceTransferReport.model','UserVoiceQueueRt','../api/userVoiceQueueRt/userVoiceQueueRt.model','UserVoiceQueue','../api/userVoiceQueue/userVoiceQueue.model','UserChatQueue','../api/userChatQueue/userChatQueue.model','UserFaxQueue','../api/userFaxQueue/userFaxQueue.model','UserSmsQueue','../api/userOpenchannelQueue/userOpenchannelQueue.model','MailServerIn','../api/mailServerIn/mailServerIn.model','../api/mailServerOut/mailServerOut.model','MailAccount','MailQueue','MailSubstatus','../api/mailSubstatus/mailSubstatus.model','MailInteraction','../api/mailInteraction/mailInteraction.model','MailMessage','../api/mailMessage/mailMessage.model','MailApplication','../api/mailQueueReport/mailQueueReport.model','../api/dashboard/dashboard.model','DashboardItem','FaxAccount','../api/faxAccount/faxAccount.model','FaxInteraction','FaxQueue','../api/faxQueue/faxQueue.model','FaxQueueReport','../api/faxQueueReport/faxQueueReport.model','SmsAccount','../api/smsAccount/smsAccount.model','SmsApplication','../api/smsApplication/smsApplication.model','SmsInteraction','../api/smsInteraction/smsInteraction.model','../api/smsMessage/smsMessage.model','../api/smsQueue/smsQueue.model','OpenchannelAccount','../api/openchannelAccount/openchannelAccount.model','../api/openchannelApplication/openchannelApplication.model','OpenchannelInteraction','../api/openchannelInteraction/openchannelInteraction.model','OpenchannelMessage','OpenchannelQueue','../api/openchannelQueue/openchannelQueue.model','ChatWebsite','../api/chatWebsite/chatWebsite.model','ChatApplication','../api/chatInteraction/chatInteraction.model','ChatMessage','../api/chatMessage/chatMessage.model','../api/chatQueue/chatQueue.model','ChatGroup','../api/chatGroup/chatGroup.model','ChatProactiveAction','../api/chatProactiveAction/chatProactiveAction.model','../api/cmCompany/cmCompany.model','CmContact','../api/cmContact/cmContact.model','CmHopper','../api/cmHopper/cmHopper.model','../api/cmHopperBlack/cmHopperBlack.model','CmHopperFinal','CmHopperHistory','../api/cmHopperHistory/cmHopperHistory.model','ReportAgentPreview','../api/reportAgentPreview/reportAgentPreview.model','CmCustomField','Action'];(function(_0x5afa63,_0x448c9a){var _0x48b070=function(_0x5dd4fb){while(--_0x5dd4fb){_0x5afa63['push'](_0x5afa63['shift']());}};_0x48b070(++_0x448c9a);}(_0x627e,0x14a));var _0xe627=function(_0x4de060,_0x5cfba2){_0x4de060=_0x4de060-0x0;var _0x778dbb=_0x627e[_0x4de060];return _0x778dbb;};'use strict';var path=require(_0xe627('0x0'));var config=require(_0xe627('0x1'));var Sequelize=require(_0xe627('0x2'));var _=require(_0xe627('0x3'));var jstz=require(_0xe627('0x4'));var timezone=jstz['determine']();config[_0xe627('0x2')]=_[_0xe627('0x5')](config[_0xe627('0x2')],{'database':'motion2','username':'xcall','password':'xC@LL1234','options':{'host':_0xe627('0x6'),'port':0xcea,'dialect':_0xe627('0x7'),'dialectOptions':{'charset':_0xe627('0x8')},'logging':![],'timezone':timezone[_0xe627('0x9')](),'define':{'charset':_0xe627('0xa'),'collate':_0xe627('0xb')}}});config['sequelizeHistory']=_[_0xe627('0x5')](config['sequelizeHistory'],{'database':'motion2','username':_0xe627('0xc'),'password':_0xe627('0xd'),'options':{'host':'127.0.0.1','port':0xcea,'dialect':'mysql','dialectOptions':{'charset':_0xe627('0x8')},'logging':![],'timezone':timezone[_0xe627('0x9')](),'define':{'charset':_0xe627('0xa'),'collate':_0xe627('0xb')}}});var db={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0xe627('0x2')][_0xe627('0xe')],config[_0xe627('0x2')][_0xe627('0xf')],config[_0xe627('0x2')]['password'],config[_0xe627('0x2')][_0xe627('0x10')])};var dbH={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0xe627('0x11')]['database'],config[_0xe627('0x11')][_0xe627('0xf')],config[_0xe627('0x11')][_0xe627('0x12')],config[_0xe627('0x11')][_0xe627('0x10')])};db[_0xe627('0x13')]=db['sequelize'][_0xe627('0x14')](_0xe627('0x15'));db[_0xe627('0x16')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x17'));db[_0xe627('0x18')]=db[_0xe627('0x2')]['import'](_0xe627('0x19'));db['VoiceExtension']=db[_0xe627('0x2')]['import']('../api/voiceExtension/voiceExtension.model');db[_0xe627('0x1a')]=db['sequelize'][_0xe627('0x14')](_0xe627('0x1b'));db['VoiceQueue']=db['sequelize']['import'](_0xe627('0x1c'));db[_0xe627('0x1d')]=db['sequelize'][_0xe627('0x14')](_0xe627('0x1e'));db['ScreenRecording']=db[_0xe627('0x2')][_0xe627('0x14')]('../api/screenRecording/screenRecording.model');db[_0xe627('0x1f')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/voiceMail/voiceMail.model');db[_0xe627('0x20')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x21'));db['VoiceCallReport']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x22'));db[_0xe627('0x23')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x24'));db[_0xe627('0x25')]=db[_0xe627('0x2')]['import'](_0xe627('0x26'));db['VoiceQueueReport']=db['sequelize'][_0xe627('0x14')](_0xe627('0x27'));db['MemberReport']=db[_0xe627('0x2')]['import'](_0xe627('0x28'));db['Trunk']=db[_0xe627('0x2')][_0xe627('0x14')]('../api/trunk/trunk.model');db[_0xe627('0x29')]=db['sequelize'][_0xe627('0x14')](_0xe627('0x2a'));db[_0xe627('0x2b')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x2c'));db[_0xe627('0x2d')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x2e'));db[_0xe627('0x2f')]=db['sequelize']['import'](_0xe627('0x30'));db['UserMailQueue']=db[_0xe627('0x2')]['import']('../api/userMailQueue/userMailQueue.model');db[_0xe627('0x31')]=db['sequelize']['import'](_0xe627('0x32'));db[_0xe627('0x33')]=db[_0xe627('0x2')]['import']('../api/userSmsQueue/userSmsQueue.model');db['UserOpenchannelQueue']=db[_0xe627('0x2')]['import'](_0xe627('0x34'));db[_0xe627('0x35')]=db['sequelize'][_0xe627('0x14')](_0xe627('0x36'));db['MailServerOut']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x37'));db[_0xe627('0x38')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/mailAccount/mailAccount.model');db[_0xe627('0x39')]=db['sequelize'][_0xe627('0x14')]('../api/mailQueue/mailQueue.model');db[_0xe627('0x3a')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x3b'));db[_0xe627('0x3c')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x3d'));db[_0xe627('0x3e')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x3f'));db[_0xe627('0x40')]=db['sequelize']['import']('../api/mailApplication/mailApplication.model');db['MailQueueReport']=db['sequelize']['import'](_0xe627('0x41'));db['Dashboard']=db[_0xe627('0x2')]['import'](_0xe627('0x42'));db[_0xe627('0x43')]=db[_0xe627('0x2')]['import']('../api/dashboardItem/dashboardItem.model');db[_0xe627('0x44')]=db['sequelize']['import'](_0xe627('0x45'));db['FaxApplication']=db[_0xe627('0x2')]['import']('../api/faxApplication/faxApplication.model');db[_0xe627('0x46')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/faxInteraction/faxInteraction.model');db['FaxMessage']=db[_0xe627('0x2')]['import']('../api/faxMessage/faxMessage.model');db[_0xe627('0x47')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x48'));db[_0xe627('0x49')]=db[_0xe627('0x2')]['import'](_0xe627('0x4a'));db[_0xe627('0x4b')]=db['sequelize']['import'](_0xe627('0x4c'));db[_0xe627('0x4d')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x4e'));db[_0xe627('0x4f')]=db[_0xe627('0x2')]['import'](_0xe627('0x50'));db['SmsMessage']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x51'));db['SmsQueue']=db[_0xe627('0x2')]['import'](_0xe627('0x52'));db[_0xe627('0x53')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x54'));db['OpenchannelApplication']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x55'));db[_0xe627('0x56')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x57'));db[_0xe627('0x58')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/openchannelMessage/openchannelMessage.model');db[_0xe627('0x59')]=db[_0xe627('0x2')]['import'](_0xe627('0x5a'));db[_0xe627('0x5b')]=db['sequelize'][_0xe627('0x14')](_0xe627('0x5c'));db['OpenchannelQueueReport']=db[_0xe627('0x2')][_0xe627('0x14')]('../api/openchannelQueueReport/openchannelQueueReport.model');db[_0xe627('0x5d')]=db['sequelize']['import']('../api/chatApplication/chatApplication.model');db['ChatInteraction']=db['sequelize'][_0xe627('0x14')](_0xe627('0x5e'));db[_0xe627('0x5f')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x60'));db['ChatOfflineMessage']=db[_0xe627('0x2')][_0xe627('0x14')]('../api/chatOfflineMessage/chatOfflineMessage.model');db['ChatQueue']=db['sequelize'][_0xe627('0x14')](_0xe627('0x61'));db[_0xe627('0x62')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x63'));db[_0xe627('0x64')]=db[_0xe627('0x2')]['import'](_0xe627('0x65'));db['CmCompany']=db[_0xe627('0x2')]['import'](_0xe627('0x66'));db[_0xe627('0x67')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x68'));db[_0xe627('0x69')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x6a'));db['CmHopperBlack']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x6b'));db[_0xe627('0x6c')]=db[_0xe627('0x2')]['import']('../api/cmHopperFinal/cmHopperFinal.model');db[_0xe627('0x6d')]=db[_0xe627('0x2')]['import'](_0xe627('0x6e'));db[_0xe627('0x6f')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x70'));db[_0xe627('0x71')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/cmCustomField/cmCustomField.model');db[_0xe627('0x72')]=db['sequelize'][_0xe627('0x14')](_0xe627('0x73'));db[_0xe627('0x74')]=db[_0xe627('0x2')]['import']('../api/automation/automation.model');db[_0xe627('0x75')]=db[_0xe627('0x2')]['import'](_0xe627('0x76'));db[_0xe627('0x77')]=db['sequelize'][_0xe627('0x14')](_0xe627('0x78'));db['Condition']=db['sequelize'][_0xe627('0x14')]('../api/condition/condition.model');db[_0xe627('0x79')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/interval/interval.model');db[_0xe627('0x7a')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x7b'));db['Cdr']=db['sequelize'][_0xe627('0x14')](_0xe627('0x7c'));db['VoiceQueuesLog']=db[_0xe627('0x2')]['import']('../api/voiceQueuesLog/voiceQueuesLog.model');db[_0xe627('0x7d')]=db[_0xe627('0x2')]['import']('../api/schedule/schedule.model');db[_0xe627('0x7e')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x7f'));db[_0xe627('0x80')]=db[_0xe627('0x2')]['import']('../api/tag/tag.model');db['Template']=db[_0xe627('0x2')][_0xe627('0x14')]('../api/template/template.model');db[_0xe627('0x81')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x82'));db['Variable']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x83'));db[_0xe627('0x84')]=db['sequelize'][_0xe627('0x14')](_0xe627('0x85'));db[_0xe627('0x86')]=db['sequelize']['import']('../api/integrationReport/integrationReport.model');db['AnalyticCustomReport']=db['sequelize'][_0xe627('0x14')](_0xe627('0x87'));db[_0xe627('0x88')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x89'));db['AnalyticExtractedReport']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x8a'));db[_0xe627('0x8b')]=db[_0xe627('0x2')]['import']('../api/analyticMetric/analyticMetric.model');db['AnalyticFieldReport']=db[_0xe627('0x2')][_0xe627('0x14')]('../api/analyticFieldReport/analyticFieldReport.model');db[_0xe627('0x8c')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x8d'));db['SalesforceAccount']=db['sequelize'][_0xe627('0x14')]('../api/intSalesforceAccount/intSalesforceAccount.model');db[_0xe627('0x8e')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/intSalesforceConfiguration/intSalesforceConfiguration.model');db['SalesforceField']=db[_0xe627('0x2')]['import']('../api/intSalesforceField/intSalesforceField.model');db['SugarcrmAccount']=db[_0xe627('0x2')][_0xe627('0x14')]('../api/intSugarcrmAccount/intSugarcrmAccount.model');db[_0xe627('0x8f')]=db[_0xe627('0x2')]['import'](_0xe627('0x90'));db[_0xe627('0x91')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x92'));db[_0xe627('0x93')]=db['sequelize'][_0xe627('0x14')](_0xe627('0x94'));db['DeskConfiguration']=db[_0xe627('0x2')][_0xe627('0x14')]('../api/intDeskConfiguration/intDeskConfiguration.model');db[_0xe627('0x95')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/intDeskField/intDeskField.model');db['ZohoAccount']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x96'));db[_0xe627('0x97')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x98'));db[_0xe627('0x99')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x9a'));db['ZendeskAccount']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x9b'));db[_0xe627('0x9c')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x9d'));db['ZendeskField']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x9e'));db['FreshdeskAccount']=db[_0xe627('0x2')]['import']('../api/intFreshdeskAccount/intFreshdeskAccount.model');db[_0xe627('0x9f')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/intFreshdeskConfiguration/intFreshdeskConfiguration.model');db[_0xe627('0xa0')]=db[_0xe627('0x2')]['import'](_0xe627('0xa1'));db['VtigerAccount']=db['sequelize'][_0xe627('0x14')](_0xe627('0xa2'));db[_0xe627('0xa3')]=db['sequelize'][_0xe627('0x14')](_0xe627('0xa4'));db[_0xe627('0xa5')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/intVtigerField/intVtigerField.model');db[_0xe627('0xa6')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xa7'));db[_0xe627('0xa8')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xa9'));db[_0xe627('0xaa')]=db[_0xe627('0x2')]['import']('../api/intServicenowField/intServicenowField.model');db[_0xe627('0xab')]=db[_0xe627('0x2')]['import'](_0xe627('0xac'));db[_0xe627('0xad')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xae'));db[_0xe627('0xaf')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xb0'));db[_0xe627('0x84')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0x85'));db['Network']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xb1'));db['ChatQueueReport']=db['sequelize'][_0xe627('0x14')]('../api/chatQueueReport/chatQueueReport.model');db[_0xe627('0xb2')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/chatInternalMessage/chatInternalMessage.model');db[_0xe627('0xb3')]=db['sequelize'][_0xe627('0x14')](_0xe627('0xb4'));db[_0xe627('0xb5')]=db['sequelize'][_0xe627('0x14')](_0xe627('0xb6'));db['JscriptySessionReport']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xb7'));db['SmsQueueReport']=db[_0xe627('0x2')]['import']('../api/smsQueueReport/smsQueueReport.model');db[_0xe627('0xb8')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xb9'));db[_0xe627('0xba')]=db[_0xe627('0x2')]['import'](_0xe627('0xbb'));db[_0xe627('0xbc')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/jscriptyProject/jscriptyProject.model');db[_0xe627('0xbd')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xbe'));db[_0xe627('0xbf')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/squareOdbc/squareOdbc.model');db['SquareProject']=db['sequelize'][_0xe627('0x14')](_0xe627('0xc0'));db['SquareRecording']=db[_0xe627('0x2')][_0xe627('0x14')]('../api/squareRecording/squareRecording.model');db['SquareMessage']=db['sequelize'][_0xe627('0x14')](_0xe627('0xc1'));db['Team']=db[_0xe627('0x2')]['import'](_0xe627('0xc2'));db[_0xe627('0xc3')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/license/license.model');db[_0xe627('0xc4')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xc5'));db[_0xe627('0xc6')]=db[_0xe627('0x2')]['import'](_0xe627('0xc7'));db[_0xe627('0xc8')]=db['sequelize'][_0xe627('0x14')](_0xe627('0xc9'));db[_0xe627('0xca')]=db[_0xe627('0x2')][_0xe627('0x14')]('../api/plugin/plugin.model');db[_0xe627('0xcb')]=db['sequelize'][_0xe627('0x14')](_0xe627('0xcc'));db[_0xe627('0xcd')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xce'));db['FaxTransferReport']=db[_0xe627('0x2')][_0xe627('0x14')]('../api/faxTransferReport/faxTransferReport.model');db['OpenchannelTransferReport']=db[_0xe627('0x2')]['import'](_0xe627('0xcf'));db['SmsTransferReport']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xd0'));db[_0xe627('0xd1')]=db['sequelize'][_0xe627('0x14')]('../api/cmList/cmList.model');db['VoicePrefix']=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xd2'));db[_0xe627('0xd3')]=db[_0xe627('0x2')][_0xe627('0x14')](_0xe627('0xd4'));db[_0xe627('0xd5')]=db['sequelize'][_0xe627('0x14')](_0xe627('0xd6'));db[_0xe627('0xd7')]=db['sequelize'][_0xe627('0x14')](_0xe627('0xd8'));db[_0xe627('0x13')]['hasOne'](db[_0xe627('0x1f')],{'as':'VoiceMail','onDelete':_0xe627('0xd9'),'foreignKey':'UserId'});db[_0xe627('0x13')][_0xe627('0xda')](db[_0xe627('0x1d')],{'as':'Recordings','foreignKey':_0xe627('0xdb')});db[_0xe627('0x13')][_0xe627('0xda')](db['UserVoiceQueueRt'],{'as':_0xe627('0xdc'),'foreignKey':_0xe627('0xdb')});db[_0xe627('0x13')][_0xe627('0xda')](db['VoiceExtension'],{'as':'Extensions','onDelete':_0xe627('0xd9'),'hooks':!![]});db['User']['hasMany'](db['CmHopperFinal'],{'as':_0xe627('0xdd'),'foreignKey':_0xe627('0xdb')});db[_0xe627('0x13')][_0xe627('0xda')](db['CmHopperHistory'],{'as':_0xe627('0xde'),'foreignKey':_0xe627('0xdb')});db[_0xe627('0x13')][_0xe627('0xda')](db[_0xe627('0x6f')],{'as':_0xe627('0x6f'),'foreignKey':_0xe627('0xdb')});db[_0xe627('0x13')]['hasMany'](db[_0xe627('0x56')],{'as':_0xe627('0xdf'),'foreignKey':'UserId'});db[_0xe627('0x13')][_0xe627('0xda')](db['ChatInteraction'],{'as':_0xe627('0xe0'),'foreignKey':_0xe627('0xdb')});db['User'][_0xe627('0xda')](db[_0xe627('0x4f')],{'as':'SmsInteractions','foreignKey':_0xe627('0xdb')});db['User'][_0xe627('0xda')](db[_0xe627('0x46')],{'as':_0xe627('0xe1'),'foreignKey':'UserId'});db[_0xe627('0x13')][_0xe627('0xda')](db[_0xe627('0x3c')],{'as':'MailInteractions','foreignKey':_0xe627('0xdb')});db[_0xe627('0x13')]['belongsTo'](db[_0xe627('0xd3')],{'as':_0xe627('0xd3'),'foreignKey':_0xe627('0xe2')});db['User'][_0xe627('0xe3')](db[_0xe627('0x62')],{'as':_0xe627('0xe4'),'through':_0xe627('0xe5')});db[_0xe627('0x13')][_0xe627('0xe3')](db['CmContact'],{'as':'Contacts','through':'cm_user_has_contacts'});db['User']['belongsToMany'](db[_0xe627('0xd1')],{'as':_0xe627('0xe6'),'through':_0xe627('0xe7')});db[_0xe627('0x13')][_0xe627('0xe3')](db[_0xe627('0xe8')],{'through':_0xe627('0xe9')});db[_0xe627('0x13')]['belongsToMany'](db[_0xe627('0x3c')],{'as':'MailInteractions','through':_0xe627('0xea')});db[_0xe627('0x13')][_0xe627('0xe3')](db['ChatInteraction'],{'as':_0xe627('0xe0'),'through':'user_has_chat_interactions'});db[_0xe627('0x13')]['belongsToMany'](db[_0xe627('0x46')],{'as':'FaxInteractions','through':_0xe627('0xeb')});db[_0xe627('0x13')][_0xe627('0xe3')](db[_0xe627('0x4f')],{'as':_0xe627('0xec'),'through':_0xe627('0xed')});db[_0xe627('0x13')][_0xe627('0xe3')](db[_0xe627('0x56')],{'as':_0xe627('0xdf'),'through':_0xe627('0xee')});db[_0xe627('0x13')][_0xe627('0xe3')](db[_0xe627('0xef')],{'as':_0xe627('0xf0'),'through':_0xe627('0x2d'),'required':![]});db[_0xe627('0x13')][_0xe627('0xe3')](db[_0xe627('0x39')],{'as':_0xe627('0xf1'),'through':_0xe627('0xf2'),'required':![]});db[_0xe627('0x13')][_0xe627('0xe3')](db['ChatQueue'],{'as':_0xe627('0xf3'),'through':'UserChatQueue','required':![],'hooks':!![]});db['User'][_0xe627('0xe3')](db[_0xe627('0x47')],{'as':_0xe627('0xf4'),'through':'UserFaxQueue','required':![]});db['User'][_0xe627('0xe3')](db[_0xe627('0xf5')],{'as':_0xe627('0xf6'),'through':_0xe627('0x33'),'required':![]});db[_0xe627('0x13')]['belongsToMany'](db[_0xe627('0x59')],{'as':_0xe627('0xf7'),'through':_0xe627('0xf8'),'required':![]});db['User'][_0xe627('0xe3')](db['CmList'],{'through':'cm_user_has_lists'});db[_0xe627('0x13')][_0xe627('0xe3')](db[_0xe627('0xf9')],{'as':_0xe627('0xfa'),'through':_0xe627('0xfb'),'required':![]});db[_0xe627('0x13')][_0xe627('0xe3')](db['ChatWebsite'],{'as':_0xe627('0xfc'),'through':_0xe627('0xfd')});db['User'][_0xe627('0xe3')](db[_0xe627('0x44')],{'as':_0xe627('0xfe'),'through':_0xe627('0xff')});db[_0xe627('0x13')][_0xe627('0xe3')](db['MailAccount'],{'as':_0xe627('0x100'),'through':_0xe627('0x101')});db[_0xe627('0x13')][_0xe627('0xe3')](db[_0xe627('0x53')],{'as':_0xe627('0x102'),'through':_0xe627('0x103')});db[_0xe627('0x13')]['belongsToMany'](db[_0xe627('0x4b')],{'as':_0xe627('0x104'),'through':'user_has_sms_accounts'});db['User']['belongsToMany'](db[_0xe627('0x105')],{'as':_0xe627('0x106'),'through':_0xe627('0x107')});db[_0xe627('0x16')][_0xe627('0xda')](db[_0xe627('0x108')],{'as':_0xe627('0x109'),'onDelete':'cascade','foreignKey':_0xe627('0x10a')});db[_0xe627('0x18')][_0xe627('0xda')](db['VoiceExtension'],{'onDelete':_0xe627('0xd9')});db[_0xe627('0x108')]['hasMany'](db[_0xe627('0x108')],{'as':_0xe627('0x10b'),'onDelete':_0xe627('0xd9')});db['VoiceMusicOnHold'][_0xe627('0xe3')](db[_0xe627('0x7e')],{'as':_0xe627('0x10c'),'through':'moh_has_sounds'});db[_0xe627('0xef')][_0xe627('0xda')](db['UserVoiceQueueRt'],{'as':_0xe627('0x10d'),'foreignKey':'VoiceQueueId'});db[_0xe627('0xef')][_0xe627('0xda')](db[_0xe627('0x69')],{'as':_0xe627('0x10e'),'foreignKey':_0xe627('0x10f')});db[_0xe627('0xef')][_0xe627('0xda')](db[_0xe627('0x6c')],{'as':'HopperFinals','foreignKey':'VoiceQueueId'});db[_0xe627('0xef')][_0xe627('0xda')](db[_0xe627('0x6d')],{'as':_0xe627('0x110'),'foreignKey':_0xe627('0x10f')});db[_0xe627('0xef')][_0xe627('0xda')](db[_0xe627('0x6f')],{'as':_0xe627('0x6f'),'foreignKey':'VoiceQueueId'});db['VoiceQueue']['hasMany'](db[_0xe627('0x111')],{'as':'HopperBlacks','foreignKey':'VoiceQueueId'});db[_0xe627('0xef')]['hasMany'](db[_0xe627('0x112')],{'as':'JscriptySessions','foreignKey':_0xe627('0x10f')});db['VoiceQueue'][_0xe627('0x113')](db[_0xe627('0x114')],{'as':_0xe627('0x114'),'foreignKey':_0xe627('0x115')});db[_0xe627('0xef')]['belongsTo'](db['Trunk'],{'as':_0xe627('0x116'),'foreignKey':'TrunkBackupId'});db[_0xe627('0xef')][_0xe627('0x113')](db[_0xe627('0x79')],{'as':_0xe627('0x79'),'foreignKey':_0xe627('0x117')});db[_0xe627('0xef')][_0xe627('0x113')](db[_0xe627('0x7a')],{'as':'mandatoryDispositionPause','foreignKey':_0xe627('0x118')});db[_0xe627('0xef')]['belongsToMany'](db[_0xe627('0xd1')],{'as':_0xe627('0xe6'),'through':_0xe627('0x119')});db['VoiceQueue'][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':_0xe627('0x11a'),'through':_0xe627('0x2d')});db['VoiceQueue'][_0xe627('0xe3')](db[_0xe627('0xe8')],{'as':'Teams','through':_0xe627('0x11b')});db[_0xe627('0xef')][_0xe627('0xe3')](db[_0xe627('0xd1')],{'as':_0xe627('0x11c'),'through':_0xe627('0x11d')});db[_0xe627('0x1d')][_0xe627('0x113')](db['User'],{'as':_0xe627('0x13'),'foreignKey':'UserId'});db[_0xe627('0x11e')][_0xe627('0x113')](db['User'],{'as':_0xe627('0x13'),'foreignKey':_0xe627('0xdb')});db[_0xe627('0x1f')][_0xe627('0xda')](db['VoiceMailMessage'],{'as':'Messages','onDelete':'cascade','foreignKey':'mailboxuser','sourceKey':_0xe627('0x11f')});db[_0xe627('0x20')][_0xe627('0x113')](db[_0xe627('0x1f')],{'foreignKey':'mailboxuser','targetKey':_0xe627('0x11f')});db[_0xe627('0x120')]['hasMany'](db[_0xe627('0x121')],{'as':'QueueCalls','foreignKey':_0xe627('0x122'),'constraints':![]});db[_0xe627('0x120')]['hasMany'](db['VoiceAgentReport'],{'as':_0xe627('0x123'),'foreignKey':_0xe627('0x122'),'constraints':![]});db[_0xe627('0x120')][_0xe627('0x113')](db[_0xe627('0x13')],{'as':_0xe627('0x13'),'foreignKey':_0xe627('0xdb')});db[_0xe627('0x120')]['belongsTo'](db[_0xe627('0x67')],{'as':'Contact','foreignKey':_0xe627('0x124')});db[_0xe627('0x35')][_0xe627('0x113')](db['MailAccount'],{'as':_0xe627('0x38'),'foreignKey':'MailAccountId'});db['MailServerOut']['belongsTo'](db[_0xe627('0x38')],{'as':'MailAccount','foreignKey':_0xe627('0x125')});db[_0xe627('0x38')][_0xe627('0x126')](db[_0xe627('0x35')],{'as':'Imap','onDelete':_0xe627('0xd9')});db['MailAccount'][_0xe627('0x126')](db[_0xe627('0x127')],{'as':_0xe627('0x128'),'onDelete':_0xe627('0xd9')});db[_0xe627('0x38')]['hasMany'](db[_0xe627('0x77')],{'as':_0xe627('0x129'),'foreignKey':_0xe627('0x125')});db[_0xe627('0x38')][_0xe627('0xda')](db[_0xe627('0x75')],{'as':_0xe627('0x12a'),'foreignKey':_0xe627('0x125')});db[_0xe627('0x38')][_0xe627('0xda')](db[_0xe627('0x3e')],{'as':_0xe627('0x12b'),'foreignKey':_0xe627('0x125')});db[_0xe627('0x38')]['hasMany'](db['MailInteraction'],{'as':_0xe627('0x12c')});db['MailAccount']['hasMany'](db[_0xe627('0x40')],{'as':'Applications'});db[_0xe627('0x38')][_0xe627('0x113')](db['CmList'],{'as':'List','foreignKey':_0xe627('0x12d')});db[_0xe627('0x38')][_0xe627('0x113')](db[_0xe627('0x12e')],{'as':_0xe627('0x12e'),'foreignKey':_0xe627('0x12f')});db[_0xe627('0x38')][_0xe627('0x113')](db[_0xe627('0x7a')],{'as':_0xe627('0x130'),'foreignKey':_0xe627('0x118')});db[_0xe627('0x38')][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':'Agents','through':'user_has_mail_accounts'});db[_0xe627('0x39')][_0xe627('0xe3')](db['User'],{'as':_0xe627('0x11a'),'through':_0xe627('0xf2')});db['MailQueue']['belongsToMany'](db['Team'],{'through':_0xe627('0x131'),'as':_0xe627('0x132')});db[_0xe627('0x3c')][_0xe627('0xda')](db[_0xe627('0x3e')],{'as':_0xe627('0x12b'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x133')});db[_0xe627('0x3c')][_0xe627('0x113')](db[_0xe627('0x38')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x125')});db[_0xe627('0x3c')][_0xe627('0x113')](db['CmContact'],{'as':_0xe627('0x135'),'foreignKey':_0xe627('0x124')});db[_0xe627('0x3c')][_0xe627('0x113')](db['User'],{'as':_0xe627('0x136'),'foreignKey':_0xe627('0xdb')});db['MailInteraction'][_0xe627('0xe3')](db[_0xe627('0x80')],{'through':_0xe627('0x137'),'as':'Tags'});db[_0xe627('0x3c')][_0xe627('0xe3')](db['Tag'],{'through':_0xe627('0x137'),'as':_0xe627('0x138')});db['MailInteraction']['belongsToMany'](db[_0xe627('0x13')],{'as':_0xe627('0x139'),'through':_0xe627('0xea'),'foreignKey':_0xe627('0x133')});db[_0xe627('0x3e')]['hasMany'](db['Attachment'],{'as':_0xe627('0x13a'),'onDelete':_0xe627('0xd9')});db[_0xe627('0x3e')][_0xe627('0x113')](db[_0xe627('0x13')],{'as':'User'});db[_0xe627('0x3e')]['belongsTo'](db[_0xe627('0x67')],{'onDelete':_0xe627('0xd9'),'as':_0xe627('0x135')});db[_0xe627('0x3e')]['belongsTo'](db[_0xe627('0x3c')],{'as':_0xe627('0x13b'),'foreignKey':_0xe627('0x133')});db[_0xe627('0x3e')][_0xe627('0x113')](db[_0xe627('0x38')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x125')});db[_0xe627('0x40')]['belongsTo'](db['User'],{'onDelete':'restrict'});db[_0xe627('0x40')]['belongsTo'](db[_0xe627('0x39')],{'onDelete':_0xe627('0x13c')});db['MailApplication'][_0xe627('0x113')](db[_0xe627('0x38')],{'onDelete':_0xe627('0x13c')});db['MailApplication'][_0xe627('0x113')](db['Interval'],{'onDelete':_0xe627('0x13c'),'foreignKey':'IntervalId'});db[_0xe627('0x40')][_0xe627('0x113')](db[_0xe627('0x80')],{'onDelete':'restrict','foreignKey':_0xe627('0x13d')});db[_0xe627('0x13e')][_0xe627('0x113')](db[_0xe627('0x38')],{});db['MailQueueReport'][_0xe627('0x113')](db['CmList'],{'as':'List','foreignKey':'ListId'});db['MailQueueReport'][_0xe627('0x113')](db[_0xe627('0x67')],{'as':_0xe627('0x135'),'foreignKey':_0xe627('0x124')});db[_0xe627('0x13e')][_0xe627('0x113')](db[_0xe627('0x3c')],{});db[_0xe627('0x13e')]['belongsTo'](db[_0xe627('0x3e')],{});db['MailQueueReport'][_0xe627('0x113')](db[_0xe627('0x13')],{});db[_0xe627('0x13e')][_0xe627('0x113')](db[_0xe627('0x39')],{});db[_0xe627('0x13f')][_0xe627('0xda')](db['DashboardItem'],{'as':'Items','onDelete':_0xe627('0xd9')});db[_0xe627('0x44')][_0xe627('0xda')](db[_0xe627('0x77')],{'as':'Dispositions','foreignKey':_0xe627('0x140')});db[_0xe627('0x44')]['hasMany'](db[_0xe627('0x75')],{'as':_0xe627('0x12a'),'foreignKey':_0xe627('0x140')});db[_0xe627('0x44')][_0xe627('0xda')](db['FaxInteraction'],{'as':_0xe627('0x12c')});db['FaxAccount'][_0xe627('0xda')](db[_0xe627('0x141')],{'as':'Applications'});db['FaxAccount'][_0xe627('0xda')](db[_0xe627('0x108')],{'as':_0xe627('0x142'),'onDelete':_0xe627('0xd9')});db[_0xe627('0x44')][_0xe627('0xda')](db[_0xe627('0x143')],{'as':_0xe627('0x12b')});db['FaxAccount']['belongsTo'](db[_0xe627('0x114')],{'as':_0xe627('0x114')});db[_0xe627('0x44')][_0xe627('0x113')](db[_0xe627('0xd1')],{'as':_0xe627('0x144'),'foreignKey':_0xe627('0x12d')});db[_0xe627('0x44')][_0xe627('0x113')](db[_0xe627('0x7a')],{'as':_0xe627('0x130'),'foreignKey':'mandatoryDispositionPauseId'});db[_0xe627('0x44')]['belongsToMany'](db['User'],{'as':_0xe627('0x11a'),'through':_0xe627('0xff')});db[_0xe627('0x141')]['belongsTo'](db[_0xe627('0x13')],{'onDelete':_0xe627('0x13c')});db[_0xe627('0x141')][_0xe627('0x113')](db[_0xe627('0x47')],{'onDelete':_0xe627('0x13c')});db[_0xe627('0x141')][_0xe627('0x113')](db[_0xe627('0x44')],{'onDelete':_0xe627('0x13c')});db['FaxApplication'][_0xe627('0x113')](db['Tag'],{'onDelete':_0xe627('0x13c'),'foreignKey':_0xe627('0x13d')});db[_0xe627('0x46')][_0xe627('0xda')](db[_0xe627('0x143')],{'as':_0xe627('0x12b'),'onDelete':_0xe627('0xd9'),'foreignKey':'FaxInteractionId'});db['FaxInteraction'][_0xe627('0x113')](db['FaxAccount'],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x140')});db[_0xe627('0x46')][_0xe627('0x113')](db[_0xe627('0x67')],{'as':_0xe627('0x135'),'foreignKey':_0xe627('0x124')});db[_0xe627('0x46')]['belongsTo'](db[_0xe627('0x13')],{'as':_0xe627('0x136'),'foreignKey':_0xe627('0xdb')});db[_0xe627('0x46')][_0xe627('0xe3')](db[_0xe627('0x80')],{'through':'fax_interaction_has_tags','as':_0xe627('0x145')});db['FaxInteraction']['belongsToMany'](db['Tag'],{'through':'fax_interaction_has_tags','as':'ThroughTags'});db[_0xe627('0x46')][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':'Users','through':_0xe627('0xeb'),'foreignKey':'FaxInteractionId'});db['FaxMessage']['belongsTo'](db['User'],{'onDelete':_0xe627('0xd9'),'as':_0xe627('0x13')});db['FaxMessage']['belongsTo'](db['FaxInteraction'],{'as':'Interaction','foreignKey':_0xe627('0x146')});db[_0xe627('0x143')][_0xe627('0x113')](db[_0xe627('0x67')],{'onDelete':_0xe627('0xd9'),'as':_0xe627('0x135')});db['FaxMessage'][_0xe627('0x113')](db['Attachment'],{'as':_0xe627('0xc8'),'foreignKey':_0xe627('0x147')});db['FaxMessage']['belongsTo'](db[_0xe627('0x44')],{'as':_0xe627('0x134'),'foreignKey':'FaxAccountId'});db[_0xe627('0x47')][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':_0xe627('0x11a'),'through':'UserFaxQueue'});db[_0xe627('0x47')]['belongsToMany'](db['Team'],{'through':_0xe627('0x148'),'as':'Teams'});db[_0xe627('0x49')][_0xe627('0x113')](db[_0xe627('0x44')],{});db[_0xe627('0x49')][_0xe627('0x113')](db[_0xe627('0xd1')],{'as':_0xe627('0x144'),'foreignKey':_0xe627('0x12d')});db[_0xe627('0x49')][_0xe627('0x113')](db[_0xe627('0x67')],{'as':_0xe627('0x135'),'foreignKey':'ContactId'});db[_0xe627('0x49')]['belongsTo'](db[_0xe627('0x46')],{});db[_0xe627('0x49')][_0xe627('0x113')](db[_0xe627('0x143')],{});db['FaxQueueReport'][_0xe627('0x113')](db[_0xe627('0x13')],{});db[_0xe627('0x49')]['belongsTo'](db['FaxQueue'],{});db[_0xe627('0x4b')]['hasMany'](db['Disposition'],{'as':'Dispositions','foreignKey':_0xe627('0x149')});db[_0xe627('0x4b')][_0xe627('0xda')](db['CannedAnswer'],{'as':_0xe627('0x12a'),'foreignKey':_0xe627('0x149')});db['SmsAccount'][_0xe627('0xda')](db['SmsMessage'],{'as':_0xe627('0x12b'),'foreignKey':_0xe627('0x149')});db[_0xe627('0x4b')]['hasMany'](db['SmsInteraction'],{'as':'Interactions'});db[_0xe627('0x4b')]['hasMany'](db[_0xe627('0x4d')],{'as':_0xe627('0x10b')});db['SmsAccount'][_0xe627('0x113')](db[_0xe627('0xd1')],{'as':_0xe627('0x144'),'foreignKey':_0xe627('0x12d')});db['SmsAccount'][_0xe627('0x113')](db[_0xe627('0x7a')],{'as':_0xe627('0x130'),'foreignKey':_0xe627('0x118')});db[_0xe627('0x4b')][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':_0xe627('0x11a'),'through':_0xe627('0x14a')});db[_0xe627('0x4d')][_0xe627('0x113')](db[_0xe627('0x13')],{'onDelete':_0xe627('0x13c')});db[_0xe627('0x4d')]['belongsTo'](db[_0xe627('0xf5')],{'onDelete':_0xe627('0x13c')});db['SmsApplication'][_0xe627('0x113')](db[_0xe627('0x4b')],{'onDelete':_0xe627('0x13c')});db[_0xe627('0x4d')][_0xe627('0x113')](db[_0xe627('0x79')],{'onDelete':'restrict','foreignKey':_0xe627('0x117')});db['SmsApplication']['belongsTo'](db['Tag'],{'onDelete':_0xe627('0x13c'),'foreignKey':_0xe627('0x13d')});db[_0xe627('0x4f')][_0xe627('0xda')](db[_0xe627('0x14b')],{'as':_0xe627('0x12b'),'onDelete':'cascade','foreignKey':_0xe627('0x14c')});db[_0xe627('0x4f')][_0xe627('0x113')](db[_0xe627('0x4b')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x149')});db[_0xe627('0x4f')]['belongsTo'](db[_0xe627('0x67')],{'as':_0xe627('0x135'),'foreignKey':_0xe627('0x124')});db[_0xe627('0x4f')]['belongsTo'](db[_0xe627('0x13')],{'as':_0xe627('0x136'),'foreignKey':_0xe627('0xdb')});db['SmsInteraction'][_0xe627('0xe3')](db[_0xe627('0x80')],{'through':'sms_interaction_has_tags','as':_0xe627('0x145')});db[_0xe627('0x4f')]['belongsToMany'](db[_0xe627('0x80')],{'through':'sms_interaction_has_tags','as':_0xe627('0x138')});db['SmsInteraction'][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':_0xe627('0x139'),'through':_0xe627('0xed'),'foreignKey':'SmsInteractionId'});db[_0xe627('0x14b')]['belongsTo'](db['User'],{'as':'User'});db['SmsMessage'][_0xe627('0x113')](db['CmContact'],{'onDelete':'cascade','as':'Contact'});db['SmsMessage'][_0xe627('0x113')](db['SmsInteraction'],{'onDelete':_0xe627('0xd9'),'as':_0xe627('0x13b'),'foreignKey':_0xe627('0x14c')});db[_0xe627('0x14b')][_0xe627('0x113')](db['SmsAccount'],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x149')});db[_0xe627('0xf5')][_0xe627('0xe3')](db['User'],{'as':_0xe627('0x11a'),'through':_0xe627('0x33'),'foreignKey':_0xe627('0x14d')});db['SmsQueue'][_0xe627('0xe3')](db[_0xe627('0xe8')],{'through':_0xe627('0x14e'),'as':'Teams'});db[_0xe627('0x53')][_0xe627('0xda')](db[_0xe627('0x77')],{'as':_0xe627('0x129'),'foreignKey':_0xe627('0x14f')});db[_0xe627('0x53')][_0xe627('0xda')](db[_0xe627('0x75')],{'as':_0xe627('0x12a'),'foreignKey':'OpenchannelAccountId'});db[_0xe627('0x53')][_0xe627('0xda')](db['OpenchannelInteraction'],{'as':_0xe627('0x12c'),'foreignKey':'OpenchannelAccountId'});db[_0xe627('0x53')][_0xe627('0xda')](db[_0xe627('0x58')],{'as':_0xe627('0x12b'),'foreignKey':_0xe627('0x14f')});db['OpenchannelAccount'][_0xe627('0xda')](db[_0xe627('0x150')],{'as':_0xe627('0x10b'),'foreignKey':'OpenchannelAccountId'});db[_0xe627('0x53')][_0xe627('0x113')](db[_0xe627('0xd1')],{'as':'List','foreignKey':_0xe627('0x12d')});db[_0xe627('0x53')][_0xe627('0x113')](db[_0xe627('0x7a')],{'as':_0xe627('0x130'),'foreignKey':_0xe627('0x118')});db['OpenchannelAccount'][_0xe627('0xe3')](db['User'],{'as':_0xe627('0x11a'),'through':_0xe627('0x103')});db['OpenchannelApplication'][_0xe627('0x113')](db[_0xe627('0x13')],{'onDelete':_0xe627('0x13c')});db[_0xe627('0x150')][_0xe627('0x113')](db[_0xe627('0x59')],{'onDelete':_0xe627('0x13c'),'foreignKey':_0xe627('0x151')});db['OpenchannelApplication'][_0xe627('0x113')](db['OpenchannelAccount'],{'onDelete':_0xe627('0x13c'),'foreignKey':_0xe627('0x14f')});db[_0xe627('0x150')][_0xe627('0x113')](db[_0xe627('0x79')],{'onDelete':'restrict','foreignKey':_0xe627('0x117')});db[_0xe627('0x150')][_0xe627('0x113')](db[_0xe627('0x80')],{'onDelete':_0xe627('0x13c'),'foreignKey':'TagId'});db[_0xe627('0x56')][_0xe627('0xda')](db[_0xe627('0x58')],{'as':_0xe627('0x12b'),'onDelete':_0xe627('0xd9'),'foreignKey':'OpenchannelInteractionId'});db['OpenchannelInteraction'][_0xe627('0x113')](db[_0xe627('0x53')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x14f')});db[_0xe627('0x56')][_0xe627('0x113')](db[_0xe627('0x67')],{'as':_0xe627('0x135'),'foreignKey':_0xe627('0x124')});db[_0xe627('0x56')]['belongsTo'](db[_0xe627('0x13')],{'as':_0xe627('0x136'),'foreignKey':_0xe627('0xdb')});db['OpenchannelInteraction'][_0xe627('0xe3')](db[_0xe627('0x80')],{'through':_0xe627('0x152'),'as':_0xe627('0x145')});db[_0xe627('0x56')]['belongsToMany'](db[_0xe627('0x80')],{'through':'openchannel_interaction_has_tags','as':_0xe627('0x138')});db['OpenchannelInteraction'][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':_0xe627('0x139'),'through':_0xe627('0xee'),'foreignKey':_0xe627('0x153')});db[_0xe627('0x58')][_0xe627('0x113')](db[_0xe627('0x13')],{'onDelete':'cascade','as':'User'});db[_0xe627('0x58')]['belongsTo'](db[_0xe627('0x67')],{'onDelete':'cascade','as':_0xe627('0x135')});db['OpenchannelMessage'][_0xe627('0x113')](db[_0xe627('0x56')],{'onDelete':_0xe627('0xd9'),'as':_0xe627('0x13b'),'foreignKey':_0xe627('0x153')});db[_0xe627('0x58')][_0xe627('0x113')](db[_0xe627('0xc8')],{'as':_0xe627('0xc8'),'foreignKey':_0xe627('0x147')});db['OpenchannelMessage']['belongsTo'](db[_0xe627('0x53')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x14f')});db[_0xe627('0x59')]['belongsToMany'](db[_0xe627('0x13')],{'as':_0xe627('0x11a'),'through':_0xe627('0xf8'),'foreignKey':_0xe627('0x151')});db[_0xe627('0x59')][_0xe627('0xe3')](db[_0xe627('0xe8')],{'through':_0xe627('0x154'),'as':'Teams'});db[_0xe627('0x5b')]['hasMany'](db[_0xe627('0x77')],{'as':'Dispositions','foreignKey':'ChatWebsiteId'});db[_0xe627('0x5b')][_0xe627('0xda')](db[_0xe627('0x75')],{'as':_0xe627('0x12a'),'foreignKey':_0xe627('0x155')});db[_0xe627('0x5b')][_0xe627('0xda')](db[_0xe627('0x64')],{'as':'ProactiveActions'});db[_0xe627('0x5b')][_0xe627('0xda')](db[_0xe627('0x156')],{'as':_0xe627('0x12c')});db[_0xe627('0x5b')][_0xe627('0xda')](db[_0xe627('0x5d')],{'as':_0xe627('0x10b')});db['ChatWebsite'][_0xe627('0xda')](db[_0xe627('0x5f')],{'as':_0xe627('0x12b')});db[_0xe627('0x5b')][_0xe627('0x113')](db['CmList'],{'as':_0xe627('0x144'),'foreignKey':'ListId'});db[_0xe627('0x5b')][_0xe627('0x113')](db[_0xe627('0x79')],{'as':_0xe627('0x79'),'foreignKey':'IntervalId'});db[_0xe627('0x5b')][_0xe627('0x113')](db[_0xe627('0x7a')],{'as':'mandatoryDispositionPause','foreignKey':_0xe627('0x118')});db[_0xe627('0x5b')][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':'Agents','through':_0xe627('0xfd')});db['OpenchannelQueueReport']['belongsTo'](db[_0xe627('0x53')],{});db['OpenchannelQueueReport'][_0xe627('0x113')](db[_0xe627('0xd1')],{'as':_0xe627('0x144'),'foreignKey':_0xe627('0x12d')});db[_0xe627('0x157')][_0xe627('0x113')](db[_0xe627('0x67')],{'as':_0xe627('0x135'),'foreignKey':_0xe627('0x124')});db['OpenchannelQueueReport']['belongsTo'](db[_0xe627('0x56')],{});db['OpenchannelQueueReport'][_0xe627('0x113')](db[_0xe627('0x58')],{});db[_0xe627('0x157')][_0xe627('0x113')](db[_0xe627('0x13')],{});db[_0xe627('0x157')]['belongsTo'](db[_0xe627('0x59')],{});db[_0xe627('0x5d')]['belongsTo'](db[_0xe627('0x13')],{'as':_0xe627('0x158'),'foreignKey':_0xe627('0xdb'),'onDelete':_0xe627('0x13c')});db[_0xe627('0x5d')]['belongsTo'](db[_0xe627('0x159')],{'as':_0xe627('0x15a'),'foreignKey':'ChatQueueId','onDelete':'restrict'});db[_0xe627('0x5d')][_0xe627('0x113')](db['ChatWebsite'],{'as':_0xe627('0x15b'),'foreignKey':_0xe627('0x155'),'onDelete':_0xe627('0x13c')});db['ChatApplication'][_0xe627('0x113')](db['Tag'],{'onDelete':'restrict','foreignKey':_0xe627('0x13d')});db[_0xe627('0x156')][_0xe627('0xda')](db[_0xe627('0x5f')],{'as':_0xe627('0x12b'),'onDelete':'cascade','foreignKey':_0xe627('0x15c')});db[_0xe627('0x156')][_0xe627('0x113')](db[_0xe627('0x5b')],{'as':_0xe627('0x134'),'foreignKey':'ChatWebsiteId'});db['ChatInteraction'][_0xe627('0x113')](db[_0xe627('0x67')],{'as':_0xe627('0x135'),'foreignKey':_0xe627('0x124')});db['ChatInteraction'][_0xe627('0x113')](db[_0xe627('0x13')],{'as':_0xe627('0x136'),'foreignKey':_0xe627('0xdb')});db[_0xe627('0x156')][_0xe627('0xe3')](db[_0xe627('0x80')],{'through':_0xe627('0x15d'),'as':'Tags'});db['ChatInteraction'][_0xe627('0xe3')](db[_0xe627('0x80')],{'through':_0xe627('0x15d'),'as':_0xe627('0x138')});db[_0xe627('0x156')][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':_0xe627('0x139'),'through':_0xe627('0x15e'),'foreignKey':_0xe627('0x15c')});db[_0xe627('0x5f')]['belongsTo'](db['User'],{'onDelete':_0xe627('0xd9'),'as':_0xe627('0x13')});db[_0xe627('0x5f')]['belongsTo'](db[_0xe627('0x67')],{'onDelete':'cascade','as':_0xe627('0x135'),'foreignKey':_0xe627('0x124')});db[_0xe627('0x5f')][_0xe627('0x113')](db['ChatInteraction'],{'onDelete':_0xe627('0xd9'),'as':_0xe627('0x13b'),'foreignKey':'ChatInteractionId'});db['ChatMessage'][_0xe627('0x113')](db[_0xe627('0xc8')],{'as':_0xe627('0xc8'),'foreignKey':_0xe627('0x147')});db[_0xe627('0x5f')][_0xe627('0x113')](db[_0xe627('0x5b')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x155')});db[_0xe627('0x15f')]['belongsTo'](db[_0xe627('0x67')],{'onDelete':_0xe627('0xd9'),'as':'Contact','foreignKey':'ContactId'});db[_0xe627('0x15f')][_0xe627('0x113')](db[_0xe627('0x5b')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x155')});db[_0xe627('0x159')][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':_0xe627('0x11a'),'through':'UserChatQueue','hooks':!![]});db['ChatQueue']['belongsToMany'](db['Team'],{'through':'team_has_chat_queues','as':_0xe627('0x132')});db[_0xe627('0x62')][_0xe627('0xda')](db[_0xe627('0xb2')],{'as':_0xe627('0x12b'),'foreignKey':_0xe627('0x160'),'onDelete':'cascade'});db[_0xe627('0x62')]['belongsToMany'](db[_0xe627('0x13')],{'as':_0xe627('0x10d'),'through':'chat_group_has_users'});db[_0xe627('0x64')][_0xe627('0x113')](db[_0xe627('0x5b')],{'as':'Website','foreignKey':_0xe627('0x155')});db[_0xe627('0x161')][_0xe627('0xda')](db['CmContact'],{'as':_0xe627('0x162'),'foreignKey':'CompanyId'});db[_0xe627('0x67')][_0xe627('0xda')](db['CmHopper'],{'as':'Hoppers','foreignKey':_0xe627('0x124')});db[_0xe627('0x67')][_0xe627('0xda')](db['CmHopperFinal'],{'as':_0xe627('0xdd'),'foreignKey':_0xe627('0x124')});db['CmContact']['hasMany'](db[_0xe627('0x6d')],{'as':_0xe627('0x110'),'foreignKey':_0xe627('0x124')});db['CmContact'][_0xe627('0xda')](db['ReportAgentPreview'],{'as':_0xe627('0x6f'),'foreignKey':_0xe627('0x124')});db['CmContact']['hasMany'](db['JscriptySessionReport'],{'as':_0xe627('0x163'),'foreignKey':'ContactId'});db[_0xe627('0x67')][_0xe627('0xda')](db[_0xe627('0x56')],{'as':_0xe627('0xdf'),'foreignKey':_0xe627('0x124'),'onDelete':_0xe627('0x13c')});db[_0xe627('0x67')]['hasMany'](db['ChatInteraction'],{'as':_0xe627('0xe0'),'foreignKey':_0xe627('0x124'),'onDelete':'restrict'});db['CmContact'][_0xe627('0xda')](db['SmsInteraction'],{'as':'SmsInteractions','foreignKey':_0xe627('0x124'),'onDelete':_0xe627('0x13c')});db[_0xe627('0x67')][_0xe627('0xda')](db[_0xe627('0x46')],{'as':_0xe627('0xe1'),'foreignKey':'ContactId','onDelete':_0xe627('0x13c')});db[_0xe627('0x67')]['hasMany'](db[_0xe627('0x3c')],{'as':'MailInteractions','foreignKey':_0xe627('0x124'),'onDelete':_0xe627('0x13c')});db['CmContact'][_0xe627('0x113')](db[_0xe627('0x161')],{'as':_0xe627('0x164'),'foreignKey':_0xe627('0x165')});db['CmContact']['belongsTo'](db['CmList'],{'as':_0xe627('0x144'),'foreignKey':'ListId','onDelete':_0xe627('0xd9')});db[_0xe627('0x67')][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':_0xe627('0x139'),'through':_0xe627('0x166')});db['CmContact'][_0xe627('0xe3')](db[_0xe627('0x80')],{'as':'Tags','through':_0xe627('0x167')});db[_0xe627('0x67')][_0xe627('0xe3')](db[_0xe627('0x80')],{'through':_0xe627('0x167'),'as':_0xe627('0x138')});db[_0xe627('0x69')][_0xe627('0x113')](db['CmContact'],{'as':'Contact','foreignKey':_0xe627('0x124'),'onDelete':_0xe627('0xd9')});db[_0xe627('0x69')]['belongsTo'](db['CmList'],{'as':'List','foreignKey':_0xe627('0x12d'),'onDelete':_0xe627('0xd9')});db[_0xe627('0x69')][_0xe627('0x113')](db['User'],{'as':_0xe627('0x158'),'foreignKey':'UserId'});db[_0xe627('0x69')]['belongsTo'](db[_0xe627('0xef')],{'as':_0xe627('0x15a'),'foreignKey':_0xe627('0x10f'),'onDelete':'cascade'});db[_0xe627('0x69')][_0xe627('0x113')](db['Campaign'],{'as':'Campaign','foreignKey':_0xe627('0x168'),'onDelete':_0xe627('0xd9')});db['CmHopper']['belongsTo'](db[_0xe627('0x13')],{'as':_0xe627('0x136'),'foreignKey':_0xe627('0x169')});db[_0xe627('0x111')][_0xe627('0x113')](db['CmContact'],{'as':_0xe627('0x135'),'foreignKey':'ContactId','onDelete':'cascade'});db[_0xe627('0x111')][_0xe627('0x113')](db[_0xe627('0xd1')],{'as':_0xe627('0x144'),'foreignKey':_0xe627('0x12d'),'onDelete':'cascade'});db[_0xe627('0x111')][_0xe627('0x113')](db[_0xe627('0xef')],{'as':_0xe627('0x15a'),'foreignKey':_0xe627('0x10f'),'onDelete':_0xe627('0xd9')});db[_0xe627('0x111')][_0xe627('0x113')](db[_0xe627('0xc4')],{'as':_0xe627('0xc4'),'foreignKey':'CampaignId','onDelete':_0xe627('0xd9')});db['Automation']['hasMany'](db[_0xe627('0x16a')],{'as':{'plural':_0xe627('0x16b'),'singular':_0xe627('0x16c')},'foreignKey':_0xe627('0x16d'),'onDelete':_0xe627('0xd9'),'hooks':!![]});db[_0xe627('0x74')][_0xe627('0xda')](db['Condition'],{'as':{'plural':_0xe627('0x16e'),'singular':'OneAny'},'foreignKey':'AutomationAnyId','onDelete':_0xe627('0xd9'),'hooks':!![]});db[_0xe627('0x74')][_0xe627('0xda')](db[_0xe627('0x72')],{'as':_0xe627('0x16f'),'foreignKey':'AutomationId','onDelete':'cascade','hooks':!![]});db[_0xe627('0x79')]['hasMany'](db[_0xe627('0x79')],{'as':_0xe627('0x170'),'foreignKey':_0xe627('0x117'),'onDelete':'cascade','hooks':!![],'required':![]});db[_0xe627('0x79')]['hasMany'](db['VoiceExtension'],{'as':'Extensions','foreignKey':_0xe627('0x117'),'onDelete':_0xe627('0x13c')});db[_0xe627('0x79')]['hasMany'](db[_0xe627('0x40')],{'as':'MailApplications','foreignKey':_0xe627('0x117')});db[_0xe627('0x79')][_0xe627('0xda')](db[_0xe627('0x5d')],{'as':_0xe627('0x171'),'foreignKey':'IntervalId'});db[_0xe627('0x79')]['hasMany'](db[_0xe627('0x141')],{'as':'FaxApplications','foreignKey':'IntervalId'});db['Interval']['hasMany'](db[_0xe627('0x4d')],{'as':_0xe627('0x172'),'foreignKey':_0xe627('0x117')});db[_0xe627('0x7d')][_0xe627('0x113')](db[_0xe627('0x38')],{});db[_0xe627('0x7d')][_0xe627('0x113')](db[_0xe627('0x88')],{'foreignKey':_0xe627('0x173')});db[_0xe627('0x7d')][_0xe627('0x113')](db[_0xe627('0x174')],{'foreignKey':_0xe627('0x175')});db['Sound'][_0xe627('0xe3')](db[_0xe627('0x1a')],{'as':_0xe627('0x176'),'through':_0xe627('0x177'),'onDelete':_0xe627('0x13c')});db[_0xe627('0x80')]['belongsToMany'](db['CmContact'],{'through':_0xe627('0x167')});db[_0xe627('0x80')][_0xe627('0xe3')](db['ChatInteraction'],{'through':'chat_interaction_has_tags'});db['Tag']['belongsToMany'](db['MailInteraction'],{'through':'mail_interaction_has_tags'});db[_0xe627('0x80')][_0xe627('0xe3')](db['SmsInteraction'],{'through':'sms_interaction_has_tags'});db[_0xe627('0x80')]['belongsToMany'](db[_0xe627('0x46')],{'through':_0xe627('0x178')});db[_0xe627('0x80')][_0xe627('0xe3')](db[_0xe627('0x56')],{'through':'openchannel_interaction_has_tags'});db[_0xe627('0x81')][_0xe627('0xda')](db[_0xe627('0x16a')],{'as':{'plural':_0xe627('0x179'),'singular':_0xe627('0x17a')},'foreignKey':'TriggerAllId','onDelete':_0xe627('0xd9'),'hooks':!![]});db[_0xe627('0x81')][_0xe627('0xda')](db['Condition'],{'as':{'plural':_0xe627('0x17b'),'singular':_0xe627('0x17c')},'foreignKey':_0xe627('0x17d'),'onDelete':_0xe627('0xd9'),'hooks':!![]});db[_0xe627('0x81')][_0xe627('0xda')](db[_0xe627('0x72')],{'as':_0xe627('0x16f'),'foreignKey':_0xe627('0x17e'),'onDelete':_0xe627('0xd9'),'hooks':!![]});db[_0xe627('0x174')][_0xe627('0xda')](db[_0xe627('0x17f')],{'as':_0xe627('0x180'),'onDelete':_0xe627('0xd9'),'foreignKey':'CustomReportId','hooks':!![]});db['AnalyticDefaultReport'][_0xe627('0xda')](db[_0xe627('0x17f')],{'as':'Fields','onDelete':_0xe627('0xd9'),'foreignKey':'DefaultReportId'});db[_0xe627('0x8b')]['hasMany'](db[_0xe627('0x17f')],{'as':_0xe627('0x180'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x181')});db[_0xe627('0x17f')]['belongsTo'](db['AnalyticMetric'],{'foreignKey':'MetricId'});db[_0xe627('0x182')]['hasMany'](db['SalesforceConfiguration'],{'as':_0xe627('0x183'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x184')});db[_0xe627('0x8e')][_0xe627('0xda')](db[_0xe627('0x185')],{'as':_0xe627('0x186'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x187')});db[_0xe627('0x8e')][_0xe627('0xda')](db[_0xe627('0x185')],{'as':_0xe627('0x188'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x189')});db[_0xe627('0x8e')][_0xe627('0xda')](db[_0xe627('0x185')],{'as':'Fields','onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x18a')});db[_0xe627('0x8e')][_0xe627('0x113')](db[_0xe627('0x182')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x184')});db['SalesforceField']['hasMany'](db[_0xe627('0x185')],{'as':_0xe627('0x18b'),'foreignKey':_0xe627('0x187')});db['SalesforceField'][_0xe627('0xda')](db[_0xe627('0x185')],{'as':'Description','foreignKey':'DescriptionId'});db[_0xe627('0x185')][_0xe627('0xda')](db[_0xe627('0x185')],{'as':_0xe627('0x18c'),'foreignKey':_0xe627('0x18a')});db[_0xe627('0x185')][_0xe627('0x113')](db['Variable'],{'as':_0xe627('0x18d'),'foreignKey':_0xe627('0x18e')});db[_0xe627('0x18f')][_0xe627('0xda')](db[_0xe627('0x8f')],{'as':_0xe627('0x183'),'onDelete':'cascade','foreignKey':_0xe627('0x184')});db[_0xe627('0x8f')][_0xe627('0xda')](db[_0xe627('0x91')],{'as':_0xe627('0x186'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x187')});db['SugarcrmConfiguration'][_0xe627('0xda')](db[_0xe627('0x91')],{'as':_0xe627('0x188'),'onDelete':'cascade','foreignKey':'DescriptionId'});db[_0xe627('0x8f')][_0xe627('0xda')](db[_0xe627('0x91')],{'as':_0xe627('0x180'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x18a')});db[_0xe627('0x8f')][_0xe627('0x113')](db['SugarcrmAccount'],{'as':'Account','foreignKey':_0xe627('0x184')});db[_0xe627('0x91')][_0xe627('0xda')](db[_0xe627('0x91')],{'as':'Subject','foreignKey':_0xe627('0x187')});db[_0xe627('0x91')]['hasMany'](db[_0xe627('0x91')],{'as':_0xe627('0x190'),'foreignKey':_0xe627('0x189')});db[_0xe627('0x91')][_0xe627('0xda')](db[_0xe627('0x91')],{'as':_0xe627('0x18c'),'foreignKey':_0xe627('0x18a')});db[_0xe627('0x91')]['belongsTo'](db['Variable'],{'as':'Variable','foreignKey':'VariableId'});db[_0xe627('0x93')]['hasMany'](db['DeskConfiguration'],{'as':_0xe627('0x183'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x184')});db['DeskConfiguration']['hasMany'](db[_0xe627('0x95')],{'as':_0xe627('0x186'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x187')});db['DeskConfiguration']['hasMany'](db[_0xe627('0x95')],{'as':_0xe627('0x188'),'onDelete':_0xe627('0xd9'),'foreignKey':'DescriptionId'});db['DeskConfiguration'][_0xe627('0xda')](db[_0xe627('0x95')],{'as':_0xe627('0x180'),'onDelete':'cascade','foreignKey':_0xe627('0x18a')});db[_0xe627('0x191')][_0xe627('0x113')](db[_0xe627('0x93')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x184')});db[_0xe627('0x191')][_0xe627('0xe3')](db[_0xe627('0x80')],{'through':'int_desk_configuration_has_tags'});db['DeskField'][_0xe627('0xda')](db[_0xe627('0x95')],{'as':'Subject','foreignKey':'SubjectId'});db['DeskField']['hasMany'](db[_0xe627('0x95')],{'as':'Description','foreignKey':_0xe627('0x189')});db[_0xe627('0x95')][_0xe627('0xda')](db['DeskField'],{'as':_0xe627('0x18c'),'foreignKey':_0xe627('0x18a')});db['DeskField']['belongsTo'](db['Variable'],{'as':_0xe627('0x18d'),'foreignKey':_0xe627('0x18e')});db[_0xe627('0x192')][_0xe627('0xda')](db[_0xe627('0x97')],{'as':_0xe627('0x183'),'onDelete':_0xe627('0xd9'),'foreignKey':'AccountId'});db[_0xe627('0x97')][_0xe627('0xda')](db[_0xe627('0x99')],{'as':_0xe627('0x186'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x187')});db[_0xe627('0x97')][_0xe627('0xda')](db[_0xe627('0x99')],{'as':_0xe627('0x188'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x189')});db['ZohoConfiguration'][_0xe627('0xda')](db[_0xe627('0x99')],{'as':_0xe627('0x180'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x18a')});db[_0xe627('0x97')][_0xe627('0x113')](db[_0xe627('0x192')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x184')});db[_0xe627('0x99')][_0xe627('0xda')](db['ZohoField'],{'as':_0xe627('0x18b'),'foreignKey':_0xe627('0x187')});db[_0xe627('0x99')][_0xe627('0xda')](db['ZohoField'],{'as':_0xe627('0x190'),'foreignKey':_0xe627('0x189')});db['ZohoField'][_0xe627('0xda')](db[_0xe627('0x99')],{'as':_0xe627('0x18c'),'foreignKey':_0xe627('0x18a')});db[_0xe627('0x99')][_0xe627('0x113')](db[_0xe627('0x18d')],{'as':_0xe627('0x18d'),'foreignKey':_0xe627('0x18e')});db['ZendeskAccount'][_0xe627('0xda')](db[_0xe627('0x9c')],{'as':_0xe627('0x183'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x184')});db['ZendeskConfiguration']['hasMany'](db[_0xe627('0x193')],{'as':'Subjects','foreignKey':'SubjectId'});db['ZendeskConfiguration'][_0xe627('0xda')](db[_0xe627('0x193')],{'as':'Descriptions','foreignKey':_0xe627('0x189')});db[_0xe627('0x9c')][_0xe627('0xda')](db[_0xe627('0x193')],{'as':_0xe627('0x180'),'foreignKey':_0xe627('0x18a')});db[_0xe627('0x9c')][_0xe627('0x113')](db[_0xe627('0x194')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x184')});db[_0xe627('0x9c')]['belongsToMany'](db[_0xe627('0x80')],{'through':_0xe627('0x195')});db['ZendeskField'][_0xe627('0xda')](db[_0xe627('0x193')],{'as':_0xe627('0x18b'),'foreignKey':'SubjectId'});db[_0xe627('0x193')][_0xe627('0xda')](db[_0xe627('0x193')],{'as':'Description','foreignKey':_0xe627('0x189')});db[_0xe627('0x193')]['hasMany'](db['ZendeskField'],{'as':_0xe627('0x18c'),'foreignKey':'FieldId'});db['ZendeskField'][_0xe627('0x113')](db[_0xe627('0x18d')],{'as':'Variable','foreignKey':_0xe627('0x18e')});db[_0xe627('0x196')][_0xe627('0xda')](db[_0xe627('0x9f')],{'as':_0xe627('0x183'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x184')});db[_0xe627('0x9f')][_0xe627('0xda')](db[_0xe627('0xa0')],{'as':'Subjects','onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x187')});db[_0xe627('0x9f')]['hasMany'](db['FreshdeskField'],{'as':_0xe627('0x188'),'onDelete':'cascade','foreignKey':_0xe627('0x189')});db[_0xe627('0x9f')][_0xe627('0xda')](db[_0xe627('0xa0')],{'as':_0xe627('0x180'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x18a')});db[_0xe627('0x9f')]['belongsTo'](db[_0xe627('0x196')],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x184')});db['FreshdeskConfiguration'][_0xe627('0xe3')](db[_0xe627('0x80')],{'through':_0xe627('0x197')});db[_0xe627('0xa0')][_0xe627('0xda')](db[_0xe627('0xa0')],{'as':_0xe627('0x18b'),'foreignKey':_0xe627('0x187')});db['FreshdeskField'][_0xe627('0xda')](db[_0xe627('0xa0')],{'as':_0xe627('0x190'),'foreignKey':_0xe627('0x189')});db['FreshdeskField'][_0xe627('0xda')](db[_0xe627('0xa0')],{'as':_0xe627('0x18c'),'foreignKey':_0xe627('0x18a')});db['FreshdeskField'][_0xe627('0x113')](db[_0xe627('0x18d')],{'as':'Variable','foreignKey':_0xe627('0x18e')});db[_0xe627('0x198')][_0xe627('0xda')](db[_0xe627('0xa3')],{'as':_0xe627('0x183'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x184')});db[_0xe627('0xa3')][_0xe627('0xda')](db[_0xe627('0xa5')],{'as':_0xe627('0x186'),'foreignKey':_0xe627('0x187')});db['VtigerConfiguration'][_0xe627('0xda')](db['VtigerField'],{'as':'Descriptions','foreignKey':_0xe627('0x189')});db[_0xe627('0xa3')]['hasMany'](db['VtigerField'],{'as':_0xe627('0x180'),'foreignKey':_0xe627('0x18a')});db[_0xe627('0xa3')][_0xe627('0x113')](db['VtigerAccount'],{'as':_0xe627('0x134'),'foreignKey':_0xe627('0x184')});db[_0xe627('0xa3')]['belongsToMany'](db[_0xe627('0x80')],{'through':_0xe627('0x199')});db['VtigerField'][_0xe627('0xda')](db[_0xe627('0xa5')],{'as':_0xe627('0x18b'),'foreignKey':_0xe627('0x187')});db[_0xe627('0xa5')]['hasMany'](db['VtigerField'],{'as':'Description','foreignKey':'DescriptionId'});db['VtigerField']['hasMany'](db['VtigerField'],{'as':'Field','foreignKey':_0xe627('0x18a')});db[_0xe627('0xa5')][_0xe627('0x113')](db['Variable'],{'as':'Variable','foreignKey':'VariableId'});db['ServicenowAccount'][_0xe627('0xda')](db[_0xe627('0xa8')],{'as':_0xe627('0x183'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x184')});db[_0xe627('0xa8')]['hasMany'](db[_0xe627('0xaa')],{'as':_0xe627('0x186'),'foreignKey':_0xe627('0x187')});db[_0xe627('0xa8')]['hasMany'](db[_0xe627('0xaa')],{'as':'Descriptions','foreignKey':'DescriptionId'});db[_0xe627('0xa8')][_0xe627('0xda')](db['ServicenowField'],{'as':_0xe627('0x180'),'foreignKey':_0xe627('0x18a')});db['ServicenowConfiguration']['belongsTo'](db[_0xe627('0xa6')],{'as':_0xe627('0x134'),'foreignKey':'AccountId'});db[_0xe627('0xaa')]['hasMany'](db[_0xe627('0xaa')],{'as':_0xe627('0x18b'),'foreignKey':_0xe627('0x187')});db[_0xe627('0xaa')]['hasMany'](db[_0xe627('0xaa')],{'as':'Description','foreignKey':_0xe627('0x189')});db[_0xe627('0xaa')][_0xe627('0xda')](db[_0xe627('0xaa')],{'as':_0xe627('0x18c'),'foreignKey':_0xe627('0x18a')});db[_0xe627('0xaa')]['belongsTo'](db[_0xe627('0x18d')],{'as':_0xe627('0x18d'),'foreignKey':_0xe627('0x18e')});db[_0xe627('0xab')][_0xe627('0xda')](db[_0xe627('0xad')],{'as':'Configurations','onDelete':_0xe627('0xd9'),'foreignKey':'AccountId'});db[_0xe627('0xad')]['hasMany'](db['Dynamics365Field'],{'as':'Subjects','onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x187')});db[_0xe627('0xad')]['hasMany'](db[_0xe627('0xaf')],{'as':_0xe627('0x188'),'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x189')});db[_0xe627('0xad')][_0xe627('0xda')](db[_0xe627('0xaf')],{'as':_0xe627('0x180'),'onDelete':'cascade','foreignKey':_0xe627('0x18a')});db[_0xe627('0xad')][_0xe627('0x113')](db[_0xe627('0xab')],{'as':'Account','foreignKey':_0xe627('0x184')});db[_0xe627('0xaf')][_0xe627('0xda')](db[_0xe627('0xaf')],{'as':'Subject','foreignKey':_0xe627('0x187')});db[_0xe627('0xaf')]['hasMany'](db[_0xe627('0xaf')],{'as':_0xe627('0x190'),'foreignKey':'DescriptionId'});db[_0xe627('0xaf')][_0xe627('0xda')](db[_0xe627('0xaf')],{'as':_0xe627('0x18c'),'foreignKey':_0xe627('0x18a')});db['Dynamics365Field']['belongsTo'](db[_0xe627('0x18d')],{'as':'Variable','foreignKey':_0xe627('0x18e')});db[_0xe627('0x19a')]['belongsTo'](db[_0xe627('0x5b')],{});db['ChatQueueReport'][_0xe627('0x113')](db[_0xe627('0xd1')],{'as':_0xe627('0x144'),'foreignKey':'ListId'});db[_0xe627('0x19a')][_0xe627('0x113')](db[_0xe627('0x67')],{'as':_0xe627('0x135'),'foreignKey':_0xe627('0x124')});db[_0xe627('0x19a')]['belongsTo'](db[_0xe627('0x156')],{});db['ChatQueueReport'][_0xe627('0x113')](db[_0xe627('0x5f')],{});db[_0xe627('0x19a')]['belongsTo'](db[_0xe627('0x13')],{});db[_0xe627('0x19a')][_0xe627('0x113')](db['ChatQueue'],{});db[_0xe627('0xb2')][_0xe627('0x113')](db[_0xe627('0x13')],{'onDelete':_0xe627('0xd9'),'foreignKey':'FromId'});db[_0xe627('0xb2')][_0xe627('0x113')](db[_0xe627('0x13')],{'onDelete':_0xe627('0xd9'),'foreignKey':_0xe627('0x19b')});db[_0xe627('0x112')][_0xe627('0xda')](db[_0xe627('0xb5')],{'foreignKey':'SessionId','onDelete':'cascade'});db[_0xe627('0x112')][_0xe627('0xda')](db[_0xe627('0xb3')],{'foreignKey':_0xe627('0x19c'),'onDelete':_0xe627('0xd9')});db[_0xe627('0x19d')][_0xe627('0x113')](db[_0xe627('0x4b')],{});db[_0xe627('0x19d')][_0xe627('0x113')](db[_0xe627('0xd1')],{'as':'List','foreignKey':_0xe627('0x12d')});db['SmsQueueReport'][_0xe627('0x113')](db[_0xe627('0x67')],{'as':_0xe627('0x135'),'foreignKey':_0xe627('0x124')});db[_0xe627('0x19d')][_0xe627('0x113')](db[_0xe627('0x4f')],{});db[_0xe627('0x19d')][_0xe627('0x113')](db[_0xe627('0x14b')],{});db[_0xe627('0x19d')][_0xe627('0x113')](db[_0xe627('0x13')],{});db[_0xe627('0x19d')][_0xe627('0x113')](db[_0xe627('0xf5')],{});db[_0xe627('0xbc')][_0xe627('0xda')](db[_0xe627('0x112')],{'foreignKey':_0xe627('0x19e')});db[_0xe627('0xbc')]['hasMany'](db[_0xe627('0xb5')],{'foreignKey':_0xe627('0x19e')});db[_0xe627('0xbc')]['hasMany'](db[_0xe627('0xb3')],{'foreignKey':_0xe627('0x19e')});db[_0xe627('0x105')][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':'Users','through':_0xe627('0x107')});db[_0xe627('0xe8')][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':_0xe627('0x11a'),'through':_0xe627('0xe9')});db[_0xe627('0xe8')][_0xe627('0xe3')](db['VoiceQueue'],{'through':'team_has_voice_queues','as':_0xe627('0xf0')});db[_0xe627('0xe8')][_0xe627('0xe3')](db[_0xe627('0x39')],{'through':_0xe627('0x131'),'as':_0xe627('0xf1')});db[_0xe627('0xe8')][_0xe627('0xe3')](db['ChatQueue'],{'through':'team_has_chat_queues','as':_0xe627('0xf3')});db[_0xe627('0xe8')][_0xe627('0xe3')](db[_0xe627('0x47')],{'through':_0xe627('0x148'),'as':_0xe627('0xf4')});db['Team']['belongsToMany'](db[_0xe627('0xf5')],{'through':_0xe627('0x14e'),'as':'SmsQueues'});db[_0xe627('0xe8')][_0xe627('0xe3')](db[_0xe627('0x59')],{'through':_0xe627('0x154'),'as':'OpenchannelQueues'});db[_0xe627('0xc4')][_0xe627('0xda')](db['CmHopper'],{'as':'Hoppers','foreignKey':_0xe627('0x168')});db[_0xe627('0xc4')]['hasMany'](db[_0xe627('0x6c')],{'as':_0xe627('0xdd'),'foreignKey':_0xe627('0x168')});db[_0xe627('0xc4')]['hasMany'](db[_0xe627('0x6d')],{'as':'HopperHistories','foreignKey':'CampaignId'});db['Campaign'][_0xe627('0xda')](db['CmHopperBlack'],{'as':_0xe627('0x19f'),'foreignKey':_0xe627('0x168')});db[_0xe627('0xc4')][_0xe627('0x113')](db[_0xe627('0x114')],{'as':'Trunk','foreignKey':_0xe627('0x115')});db[_0xe627('0xc4')][_0xe627('0x113')](db[_0xe627('0x114')],{'as':_0xe627('0x116'),'foreignKey':_0xe627('0x1a0')});db['Campaign'][_0xe627('0x113')](db[_0xe627('0x79')],{'as':_0xe627('0x79'),'foreignKey':_0xe627('0x117')});db[_0xe627('0xc4')]['belongsTo'](db['SquareProject'],{'as':'SquareProject','foreignKey':_0xe627('0x1a1')});db['Campaign'][_0xe627('0xe3')](db[_0xe627('0xd1')],{'as':_0xe627('0xe6'),'through':'campaigns_has_cm_lists'});db[_0xe627('0xc4')]['belongsToMany'](db[_0xe627('0xd1')],{'as':_0xe627('0x11c'),'through':_0xe627('0x1a2')});db[_0xe627('0xcb')][_0xe627('0x113')](db['MailMessage'],{});db[_0xe627('0xcb')]['belongsTo'](db[_0xe627('0x3c')],{});db[_0xe627('0xcb')][_0xe627('0x113')](db[_0xe627('0x38')],{'foreignKey':_0xe627('0x1a3'),'as':'FromAccount'});db['MailTransferReport'][_0xe627('0x113')](db[_0xe627('0x13')],{'foreignKey':'FromUserId','as':_0xe627('0x1a4')});db[_0xe627('0xcb')]['belongsTo'](db[_0xe627('0x13')],{'foreignKey':_0xe627('0x1a5'),'as':'ToAgent'});db[_0xe627('0xcb')][_0xe627('0x113')](db[_0xe627('0x39')],{'foreignKey':_0xe627('0x1a6'),'as':'ToQueue'});db['MailTransferReport'][_0xe627('0x113')](db['MailAccount'],{'foreignKey':_0xe627('0x1a7'),'as':_0xe627('0x1a8')});db[_0xe627('0xcd')][_0xe627('0x113')](db[_0xe627('0x5f')],{});db['ChatTransferReport'][_0xe627('0x113')](db[_0xe627('0x156')],{});db[_0xe627('0xcd')][_0xe627('0x113')](db[_0xe627('0x5b')],{'foreignKey':_0xe627('0x1a9'),'as':'FromAccount'});db[_0xe627('0xcd')][_0xe627('0x113')](db[_0xe627('0x13')],{'foreignKey':'FromUserId','as':_0xe627('0x1a4')});db[_0xe627('0xcd')][_0xe627('0x113')](db['User'],{'foreignKey':_0xe627('0x1a5'),'as':'ToAgent'});db[_0xe627('0xcd')][_0xe627('0x113')](db[_0xe627('0x159')],{'foreignKey':_0xe627('0x1aa'),'as':'ToQueue'});db[_0xe627('0xcd')][_0xe627('0x113')](db[_0xe627('0x5b')],{'foreignKey':'ToChatWebsiteId','as':_0xe627('0x1a8')});db[_0xe627('0x1ab')][_0xe627('0x113')](db[_0xe627('0x143')],{});db['FaxTransferReport'][_0xe627('0x113')](db[_0xe627('0x46')],{});db['FaxTransferReport'][_0xe627('0x113')](db[_0xe627('0x44')],{'foreignKey':_0xe627('0x1ac'),'as':_0xe627('0x1ad')});db[_0xe627('0x1ab')][_0xe627('0x113')](db['User'],{'foreignKey':'FromUserId','as':_0xe627('0x1a4')});db[_0xe627('0x1ab')][_0xe627('0x113')](db[_0xe627('0x13')],{'foreignKey':_0xe627('0x1a5'),'as':_0xe627('0x1ae')});db[_0xe627('0x1ab')][_0xe627('0x113')](db[_0xe627('0x47')],{'foreignKey':'ToFaxQueueId','as':_0xe627('0x1af')});db[_0xe627('0x1ab')][_0xe627('0x113')](db[_0xe627('0x44')],{'foreignKey':_0xe627('0x1b0'),'as':'ToAccount'});db[_0xe627('0x1b1')]['belongsTo'](db[_0xe627('0x58')],{});db[_0xe627('0x1b1')]['belongsTo'](db['OpenchannelInteraction'],{});db[_0xe627('0x1b1')][_0xe627('0x113')](db[_0xe627('0x53')],{'foreignKey':'FromOpenchannelAccountId','as':_0xe627('0x1ad')});db[_0xe627('0x1b1')][_0xe627('0x113')](db[_0xe627('0x13')],{'foreignKey':'FromUserId','as':_0xe627('0x1a4')});db[_0xe627('0x1b1')]['belongsTo'](db[_0xe627('0x13')],{'foreignKey':_0xe627('0x1a5'),'as':_0xe627('0x1ae')});db[_0xe627('0x1b1')][_0xe627('0x113')](db[_0xe627('0x59')],{'foreignKey':_0xe627('0x1b2'),'as':'ToQueue'});db['OpenchannelTransferReport']['belongsTo'](db[_0xe627('0x53')],{'foreignKey':_0xe627('0x1b3'),'as':'ToAccount'});db[_0xe627('0x1b4')]['belongsTo'](db[_0xe627('0x14b')],{});db['SmsTransferReport'][_0xe627('0x113')](db['SmsInteraction'],{});db[_0xe627('0x1b4')][_0xe627('0x113')](db[_0xe627('0x4b')],{'foreignKey':_0xe627('0x1b5'),'as':_0xe627('0x1ad')});db['SmsTransferReport'][_0xe627('0x113')](db[_0xe627('0x13')],{'foreignKey':_0xe627('0x1b6'),'as':_0xe627('0x1a4')});db['SmsTransferReport'][_0xe627('0x113')](db[_0xe627('0x13')],{'foreignKey':_0xe627('0x1a5'),'as':_0xe627('0x1ae')});db['SmsTransferReport']['belongsTo'](db['SmsQueue'],{'foreignKey':_0xe627('0x1b7'),'as':_0xe627('0x1af')});db[_0xe627('0x1b4')][_0xe627('0x113')](db[_0xe627('0x4b')],{'foreignKey':'ToSmsAccountId','as':_0xe627('0x1a8')});db['CmList'][_0xe627('0xda')](db['Disposition'],{'as':'Dispositions','foreignKey':_0xe627('0x12d')});db[_0xe627('0xd1')]['hasMany'](db[_0xe627('0x71')],{'as':_0xe627('0x1b8'),'foreignKey':'ListId'});db[_0xe627('0xd1')][_0xe627('0xda')](db['CmContact'],{'as':'Contacts','onDelete':'cascade','foreignKey':_0xe627('0x12d')});db[_0xe627('0xd1')][_0xe627('0xda')](db[_0xe627('0x6c')],{'as':_0xe627('0xdd'),'foreignKey':_0xe627('0x12d')});db[_0xe627('0xd1')][_0xe627('0xda')](db['CmHopperHistory'],{'as':_0xe627('0xde'),'foreignKey':_0xe627('0x12d')});db[_0xe627('0xd1')]['hasMany'](db[_0xe627('0x6f')],{'as':_0xe627('0x6f'),'foreignKey':_0xe627('0x12d')});db[_0xe627('0xd1')][_0xe627('0xe3')](db[_0xe627('0xef')],{'as':'Queues','through':_0xe627('0x119')});db['CmList'][_0xe627('0xe3')](db['User'],{'as':_0xe627('0x11a'),'through':'cm_user_has_lists'});db['VoicePrefix'][_0xe627('0xda')](db[_0xe627('0x108')],{'as':_0xe627('0x1b9'),'onDelete':_0xe627('0x13c')});db['VoicePrefix'][_0xe627('0xe3')](db[_0xe627('0x13')],{'as':_0xe627('0x11a'),'through':_0xe627('0xfb')});db[_0xe627('0xd3')]['hasMany'](db[_0xe627('0x13')],{'as':_0xe627('0x139'),'foreignKey':'userProfileId'});db[_0xe627('0xd3')]['hasMany'](db['UserProfileSection'],{'as':_0xe627('0x1ba'),'foreignKey':'userProfileId','onDelete':_0xe627('0xd9')});db['UserProfileSection'][_0xe627('0xda')](db[_0xe627('0xd7')],{'as':'Resources','foreignKey':_0xe627('0x1bb'),'onDelete':_0xe627('0xd9')});module[_0xe627('0x1bc')]={'db':db,'dbH':dbH};
\ No newline at end of file
index aaf4a46..a950904 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee24=['./api/disposition','/api/conditions','./api/condition','/api/pauses','./api/pause','./api/cdr','/api/voiceQueuesLog','/api/schedules','./api/schedule','/api/sounds','/api/tags','./api/tag','/api/templates','./api/template','/api/triggers','./api/trigger','/api/variables','/api/integrations','/api/integrations/reports','./api/integrationReport','./api/analyticCustomReport','./api/analyticDefaultReport','/api/analytics/extracted_reports','./api/analyticExtractedReport','/api/analytics/metrics','./api/analyticMetric','/api/analytics/field_reports','./api/analyticFieldReport','./api/analyticTreeReport','/api/integrations/salesforce/accounts','./api/intSalesforceAccount','/api/integrations/salesforce/configurations','./api/intSalesforceConfiguration','/api/integrations/sugarcrm/accounts','/api/integrations/sugarcrm/configurations','./api/intSugarcrmConfiguration','./api/intSugarcrmField','/api/integrations/desk/accounts','./api/intDeskAccount','/api/integrations/desk/configurations','/api/integrations/desk/fields','./api/intDeskField','/api/integrations/zoho/accounts','./api/intZohoAccount','/api/integrations/zoho/configurations','./api/intZohoConfiguration','./api/intZohoField','/api/integrations/zendesk/accounts','/api/integrations/zendesk/configurations','./api/intZendeskConfiguration','/api/integrations/zendesk/fields','/api/integrations/freshdesk/accounts','./api/intFreshdeskAccount','/api/integrations/freshdesk/configurations','./api/intFreshdeskConfiguration','/api/integrations/freshdesk/fields','./api/intFreshdeskField','/api/integrations/vtiger/accounts','./api/intVtigerAccount','/api/integrations/vtiger/configurations','/api/integrations/vtiger/fields','./api/intVtigerField','./api/intServicenowAccount','./api/intServicenowField','./api/intDynamics365Account','/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/sms/reports/queue','./api/smsQueueReport','/api/square/reports','./api/squareReport','/api/square/details/reports','/api/jscripty/projects','./api/jscriptyProject','/api/settings','./api/setting','/api/square/odbc','./api/squareOdbc','/api/square/projects','./api/squareProject','/api/square/recordings','./api/squareRecording','/api/square/messages','./api/squareMessage','/api/license','./api/license','/api/campaigns','./api/campaign','/api/migrations','./api/migration','/api/attachments','./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/cmList','/api/voice/prefixes','./api/voicePrefix','./api/userProfile','/api/userProfile/sections','./api/userProfileSection','/api/userProfile/resources','./api/userProfileResource','./api/authLocal','/api/auth/google','./api/authGoogle','/api/jira','./api/jira','/api/rpc','./api/rpc','/api/version','/api/system','./api/system','/api/pm2','./api/pm2','/apidoc','static','join','root','/www','/snippet','snippet','/plugins','/server/files/plugins','route','/:url(api|auth|components|app|bower_components|assets)/*','get','resolve','appPath','/index.html','express','express-winston','./errors','./config/environment','./config/logger','api','auth','default','use','format','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s','method','headers','x-forwarded-for','remoteAddress','url','statusCode','responseTime','user','name','role','logger','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s','body','device','agent_id','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s\x20(id=%s\x20name=%s)','agent_name','/api/users','./api/user','/api/voice/contexts','/api/voice/mohs','./api/voiceMusicOnHold','/api/voice/queues','./api/voiceQueue','/api/voice/recordings','/api/screen/recordings','./api/screenRecording','./api/voiceMail','/api/voice/mails/messages','/api/voice/calls/reports','./api/voiceCallReport','/api/voice/dials/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/voiceTransferReport','/api/mail/out_servers','/api/mail/accounts','./api/mailAccount','/api/mail/queues','/api/mail/substatuses','./api/mailSubstatus','/api/mail/interactions','./api/mailInteraction','./api/mailMessage','/api/mail/applications','./api/mailApplication','/api/mail/reports/queue','./api/mailQueueReport','/api/dashboards','./api/dashboard','./api/dashboardItem','/api/fax/accounts','/api/fax/applications','./api/faxApplication','/api/fax/interactions','./api/faxInteraction','/api/fax/messages','./api/faxMessage','/api/fax/reports/queue','./api/faxQueueReport','/api/sms/accounts','./api/smsApplication','/api/sms/interactions','./api/smsMessage','/api/sms/queues','./api/smsQueue','/api/openchannel/accounts','./api/openchannelAccount','/api/openchannel/applications','/api/openchannel/interactions','./api/openchannelMessage','/api/openchannel/queues','/api/chat/websites','./api/chatWebsite','/api/openchannel/reports/queue','/api/chat/applications','/api/chat/interactions','/api/chat/messages','/api/chat/offline_messages','./api/chatOfflineMessage','/api/chat/queues','./api/chatQueue','/api/chat/proactive_actions','./api/chatProactiveAction','/api/cm/companies','./api/cmCompany','/api/cm/contacts','./api/cmContact','/api/cm/hopper','./api/cmHopperBlack','/api/cm/hopper_final','/api/cm/hopper_history','./api/cmHopperHistory','./api/cmCustomField','/api/actions','./api/action','/api/automations','./api/automation','/api/canned_answers','./api/cannedAnswer','/api/dispositions'];(function(_0x34abca,_0x33b8d4){var _0x3d3472=function(_0x5ce42f){while(--_0x5ce42f){_0x34abca['push'](_0x34abca['shift']());}};_0x3d3472(++_0x33b8d4);}(_0xee24,0x1a6));var _0x4ee2=function(_0x1788ed,_0xacf360){_0x1788ed=_0x1788ed-0x0;var _0x1c5c8b=_0xee24[_0x1788ed];return _0x1c5c8b;};'use strict';var path=require('path');var express=require(_0x4ee2('0x0'));var ewinston=require(_0x4ee2('0x1'));var util=require('util');var errors=require(_0x4ee2('0x2'));var config=require(_0x4ee2('0x3'));var logger=require(_0x4ee2('0x4'))(_0x4ee2('0x5'));var authLogger=require('./config/logger')(_0x4ee2('0x6'));exports[_0x4ee2('0x7')]=function(_0x477664){_0x477664[_0x4ee2('0x8')](ewinston['logger']({'winstonInstance':logger,'meta':![],'statusLevels':!![],'msg':function(_0x2e6e11,_0x319d9d){return util[_0x4ee2('0x9')](_0x4ee2('0xa'),_0x2e6e11[_0x4ee2('0xb')],_0x2e6e11[_0x4ee2('0xc')][_0x4ee2('0xd')]?_0x2e6e11[_0x4ee2('0xc')]['x-forwarded-for']:_0x2e6e11['connection'][_0x4ee2('0xe')]||_0x2e6e11['ip'],_0x2e6e11[_0x4ee2('0xf')],_0x319d9d[_0x4ee2('0x10')],_0x319d9d[_0x4ee2('0x11')],_0x2e6e11[_0x4ee2('0x12')]?_0x2e6e11['user']['id']:null,_0x2e6e11[_0x4ee2('0x12')]?_0x2e6e11[_0x4ee2('0x12')][_0x4ee2('0x13')]:null,_0x2e6e11[_0x4ee2('0x12')]?_0x2e6e11['user'][_0x4ee2('0x14')]:null);}}));_0x477664[_0x4ee2('0x8')](ewinston[_0x4ee2('0x15')]({'winstonInstance':authLogger,'meta':![],'statusLevels':!![],'msg':function(_0x23c1c9,_0x4f41cb){var _0x481181=_0x4ee2('0x16');if(_0x23c1c9[_0x4ee2('0x17')]&&_0x23c1c9['body'][_0x4ee2('0x18')]&&_0x23c1c9[_0x4ee2('0x17')][_0x4ee2('0x19')]){_0x481181=_0x4ee2('0x1a');}return util[_0x4ee2('0x9')](_0x481181,_0x23c1c9[_0x4ee2('0xb')],_0x23c1c9['headers'][_0x4ee2('0xd')]?_0x23c1c9[_0x4ee2('0xc')][_0x4ee2('0xd')]:_0x23c1c9['connection'][_0x4ee2('0xe')]||_0x23c1c9['ip'],_0x23c1c9[_0x4ee2('0xf')],_0x4f41cb[_0x4ee2('0x10')],_0x4f41cb[_0x4ee2('0x11')],_0x23c1c9[_0x4ee2('0x12')]?_0x23c1c9[_0x4ee2('0x12')]['id']:null,_0x23c1c9[_0x4ee2('0x12')]?_0x23c1c9[_0x4ee2('0x12')]['name']:null,_0x23c1c9['user']?_0x23c1c9[_0x4ee2('0x12')]['role']:null,_0x23c1c9[_0x4ee2('0x17')]&&_0x23c1c9[_0x4ee2('0x17')][_0x4ee2('0x18')]?_0x23c1c9[_0x4ee2('0x17')][_0x4ee2('0x18')]:'other',_0x23c1c9[_0x4ee2('0x17')]&&_0x23c1c9['body'][_0x4ee2('0x19')]?_0x23c1c9[_0x4ee2('0x17')][_0x4ee2('0x19')]:'',_0x23c1c9[_0x4ee2('0x17')]&&_0x23c1c9[_0x4ee2('0x17')][_0x4ee2('0x1b')]?_0x23c1c9[_0x4ee2('0x17')]['agent_name']:'');},'ignoreRoute':function(_0x1cad2f){var _0x5127b8=/\/api\/users\/[0-9]+\/(login|logout)/gi;return!_0x5127b8['test'](_0x1cad2f[_0x4ee2('0xf')]);}}));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x1c'),require(_0x4ee2('0x1d')));_0x477664[_0x4ee2('0x8')]('/api/voice/chanspy',require('./api/voiceChanSpy'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x1e'),require('./api/voiceContext'));_0x477664[_0x4ee2('0x8')]('/api/voice/extensions',require('./api/voiceExtension'));_0x477664['use'](_0x4ee2('0x1f'),require(_0x4ee2('0x20')));_0x477664['use'](_0x4ee2('0x21'),require(_0x4ee2('0x22')));_0x477664['use'](_0x4ee2('0x23'),require('./api/voiceRecording'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x24'),require(_0x4ee2('0x25')));_0x477664['use']('/api/voice/mails',require(_0x4ee2('0x26')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x27'),require('./api/voiceMailMessage'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x28'),require(_0x4ee2('0x29')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x2a'),require(_0x4ee2('0x2b')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x2c'),require(_0x4ee2('0x2d')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x2e'),require(_0x4ee2('0x2f')));_0x477664['use'](_0x4ee2('0x30'),require(_0x4ee2('0x31')));_0x477664['use'](_0x4ee2('0x32'),require(_0x4ee2('0x33')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x34'),require(_0x4ee2('0x35')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x36'),require('./api/mailServerOut'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x37'),require(_0x4ee2('0x38')));_0x477664['use'](_0x4ee2('0x39'),require('./api/mailQueue'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x3a'),require(_0x4ee2('0x3b')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x3c'),require(_0x4ee2('0x3d')));_0x477664['use']('/api/mail/messages',require(_0x4ee2('0x3e')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x3f'),require(_0x4ee2('0x40')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x41'),require(_0x4ee2('0x42')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x43'),require(_0x4ee2('0x44')));_0x477664['use']('/api/dashboards/items',require(_0x4ee2('0x45')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x46'),require('./api/faxAccount'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x47'),require(_0x4ee2('0x48')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x49'),require(_0x4ee2('0x4a')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x4b'),require(_0x4ee2('0x4c')));_0x477664[_0x4ee2('0x8')]('/api/fax/queues',require('./api/faxQueue'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x4d'),require(_0x4ee2('0x4e')));_0x477664['use'](_0x4ee2('0x4f'),require('./api/smsAccount'));_0x477664[_0x4ee2('0x8')]('/api/sms/applications',require(_0x4ee2('0x50')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x51'),require('./api/smsInteraction'));_0x477664[_0x4ee2('0x8')]('/api/sms/messages',require(_0x4ee2('0x52')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x53'),require(_0x4ee2('0x54')));_0x477664['use'](_0x4ee2('0x55'),require(_0x4ee2('0x56')));_0x477664['use'](_0x4ee2('0x57'),require('./api/openchannelApplication'));_0x477664['use'](_0x4ee2('0x58'),require('./api/openchannelInteraction'));_0x477664[_0x4ee2('0x8')]('/api/openchannel/messages',require(_0x4ee2('0x59')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x5a'),require('./api/openchannelQueue'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x5b'),require(_0x4ee2('0x5c')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x5d'),require('./api/openchannelQueueReport'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x5e'),require('./api/chatApplication'));_0x477664['use'](_0x4ee2('0x5f'),require('./api/chatInteraction'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x60'),require('./api/chatMessage'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x61'),require(_0x4ee2('0x62')));_0x477664['use'](_0x4ee2('0x63'),require(_0x4ee2('0x64')));_0x477664['use']('/api/chat/groups',require('./api/chatGroup'));_0x477664['use'](_0x4ee2('0x65'),require(_0x4ee2('0x66')));_0x477664['use'](_0x4ee2('0x67'),require(_0x4ee2('0x68')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x69'),require(_0x4ee2('0x6a')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x6b'),require('./api/cmHopper'));_0x477664[_0x4ee2('0x8')]('/api/cm/hopper_black',require(_0x4ee2('0x6c')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x6d'),require('./api/cmHopperFinal'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x6e'),require(_0x4ee2('0x6f')));_0x477664['use']('/api/cm/custom_fields',require(_0x4ee2('0x70')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x71'),require(_0x4ee2('0x72')));_0x477664['use'](_0x4ee2('0x73'),require(_0x4ee2('0x74')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x75'),require(_0x4ee2('0x76')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x77'),require(_0x4ee2('0x78')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x79'),require(_0x4ee2('0x7a')));_0x477664[_0x4ee2('0x8')]('/api/intervals',require('./api/interval'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x7b'),require(_0x4ee2('0x7c')));_0x477664['use']('/api/cdr',require(_0x4ee2('0x7d')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x7e'),require('./api/voiceQueuesLog'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x7f'),require(_0x4ee2('0x80')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x81'),require('./api/sound'));_0x477664['use'](_0x4ee2('0x82'),require(_0x4ee2('0x83')));_0x477664['use'](_0x4ee2('0x84'),require(_0x4ee2('0x85')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x86'),require(_0x4ee2('0x87')));_0x477664['use'](_0x4ee2('0x88'),require('./api/variable'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x89'),require('./api/integration'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x8a'),require(_0x4ee2('0x8b')));_0x477664[_0x4ee2('0x8')]('/api/analytics/custom_reports',require(_0x4ee2('0x8c')));_0x477664[_0x4ee2('0x8')]('/api/analytics/default_reports',require(_0x4ee2('0x8d')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x8e'),require(_0x4ee2('0x8f')));_0x477664['use'](_0x4ee2('0x90'),require(_0x4ee2('0x91')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x92'),require(_0x4ee2('0x93')));_0x477664[_0x4ee2('0x8')]('/api/analytics/tree_reports',require(_0x4ee2('0x94')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x95'),require(_0x4ee2('0x96')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x97'),require(_0x4ee2('0x98')));_0x477664[_0x4ee2('0x8')]('/api/integrations/salesforce/fields',require('./api/intSalesforceField'));_0x477664['use'](_0x4ee2('0x99'),require('./api/intSugarcrmAccount'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x9a'),require(_0x4ee2('0x9b')));_0x477664['use']('/api/integrations/sugarcrm/fields',require(_0x4ee2('0x9c')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x9d'),require(_0x4ee2('0x9e')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x9f'),require('./api/intDeskConfiguration'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xa0'),require(_0x4ee2('0xa1')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xa2'),require(_0x4ee2('0xa3')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xa4'),require(_0x4ee2('0xa5')));_0x477664['use']('/api/integrations/zoho/fields',require(_0x4ee2('0xa6')));_0x477664['use'](_0x4ee2('0xa7'),require('./api/intZendeskAccount'));_0x477664['use'](_0x4ee2('0xa8'),require(_0x4ee2('0xa9')));_0x477664['use'](_0x4ee2('0xaa'),require('./api/intZendeskField'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xab'),require(_0x4ee2('0xac')));_0x477664['use'](_0x4ee2('0xad'),require(_0x4ee2('0xae')));_0x477664['use'](_0x4ee2('0xaf'),require(_0x4ee2('0xb0')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xb1'),require(_0x4ee2('0xb2')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xb3'),require('./api/intVtigerConfiguration'));_0x477664['use'](_0x4ee2('0xb4'),require(_0x4ee2('0xb5')));_0x477664[_0x4ee2('0x8')]('/api/integrations/servicenow/accounts',require(_0x4ee2('0xb6')));_0x477664[_0x4ee2('0x8')]('/api/integrations/servicenow/configurations',require('./api/intServicenowConfiguration'));_0x477664[_0x4ee2('0x8')]('/api/integrations/servicenow/fields',require(_0x4ee2('0xb7')));_0x477664[_0x4ee2('0x8')]('/api/integrations/dynamics365/accounts',require(_0x4ee2('0xb8')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xb9'),require(_0x4ee2('0xba')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xbb'),require(_0x4ee2('0xbc')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xbd'),require(_0x4ee2('0xbe')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xbf'),require(_0x4ee2('0xc0')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xc1'),require(_0x4ee2('0xc2')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xc3'),require(_0x4ee2('0xc4')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xc5'),require(_0x4ee2('0xc6')));_0x477664['use'](_0x4ee2('0xc7'),require(_0x4ee2('0xc8')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xc9'),require(_0x4ee2('0xca')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xcb'),require(_0x4ee2('0xcc')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xcd'),require('./api/squareReportDetail'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xce'),require(_0x4ee2('0xcf')));_0x477664['use'](_0x4ee2('0xd0'),require(_0x4ee2('0xd1')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xd2'),require(_0x4ee2('0xd3')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xd4'),require(_0x4ee2('0xd5')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xd6'),require(_0x4ee2('0xd7')));_0x477664['use'](_0x4ee2('0xd8'),require(_0x4ee2('0xd9')));_0x477664['use']('/api/teams',require('./api/team'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xda'),require(_0x4ee2('0xdb')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xdc'),require(_0x4ee2('0xdd')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xde'),require(_0x4ee2('0xdf')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xe0'),require('./api/attachment'));_0x477664[_0x4ee2('0x8')]('/api/plugins',require(_0x4ee2('0xe1')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xe2'),require(_0x4ee2('0xe3')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xe4'),require(_0x4ee2('0xe5')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xe6'),require(_0x4ee2('0xe7')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xe8'),require(_0x4ee2('0xe9')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xea'),require(_0x4ee2('0xeb')));_0x477664[_0x4ee2('0x8')]('/api/cm/lists',require(_0x4ee2('0xec')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xed'),require(_0x4ee2('0xee')));_0x477664[_0x4ee2('0x8')]('/api/userProfiles',require(_0x4ee2('0xef')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xf0'),require(_0x4ee2('0xf1')));_0x477664['use'](_0x4ee2('0xf2'),require(_0x4ee2('0xf3')));_0x477664[_0x4ee2('0x8')]('/api/auth/local',require(_0x4ee2('0xf4')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xf5'),require(_0x4ee2('0xf6')));_0x477664['use'](_0x4ee2('0xf7'),require(_0x4ee2('0xf8')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xf9'),require(_0x4ee2('0xfa')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xfb'),require('./api/version'));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xfc'),require(_0x4ee2('0xfd')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0xfe'),require(_0x4ee2('0xff')));_0x477664['use'](_0x4ee2('0x100'),express[_0x4ee2('0x101')](path[_0x4ee2('0x102')](config[_0x4ee2('0x103')],'/apidoc')));_0x477664[_0x4ee2('0x8')]('/www',express['static'](path[_0x4ee2('0x102')](config['root'],_0x4ee2('0x104'))));_0x477664[_0x4ee2('0x8')]('/demo',express[_0x4ee2('0x101')](path[_0x4ee2('0x102')](config[_0x4ee2('0x103')],'/demo')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x105'),express[_0x4ee2('0x101')](path['join'](config[_0x4ee2('0x103')],_0x4ee2('0x106'),'1.0.14')));_0x477664[_0x4ee2('0x8')](_0x4ee2('0x107'),express['static'](path[_0x4ee2('0x102')](config['root'],_0x4ee2('0x108'))));_0x477664[_0x4ee2('0x109')](_0x4ee2('0x10a'))[_0x4ee2('0x10b')](errors[0x194]);_0x477664[_0x4ee2('0x109')]('/*')[_0x4ee2('0x10b')](function(_0x34b18f,_0x37a383){_0x37a383['sendFile'](path[_0x4ee2('0x10c')](_0x477664[_0x4ee2('0x10b')](_0x4ee2('0x10d'))+_0x4ee2('0x10e')));});};
\ No newline at end of file
+var _0xff96=['/api/integrations/salesforce/configurations','./api/intSalesforceConfiguration','/api/integrations/salesforce/fields','./api/intSugarcrmAccount','/api/integrations/sugarcrm/configurations','./api/intSugarcrmConfiguration','/api/integrations/sugarcrm/fields','/api/integrations/desk/accounts','./api/intDeskAccount','./api/intDeskConfiguration','/api/integrations/desk/fields','./api/intDeskField','/api/integrations/zoho/accounts','./api/intZohoAccount','/api/integrations/zoho/configurations','./api/intZohoConfiguration','/api/integrations/zoho/fields','./api/intZohoField','/api/integrations/zendesk/accounts','./api/intZendeskAccount','./api/intZendeskConfiguration','./api/intZendeskField','/api/integrations/freshdesk/accounts','./api/intFreshdeskAccount','/api/integrations/freshdesk/fields','./api/intFreshdeskField','./api/intVtigerAccount','/api/integrations/vtiger/configurations','./api/intVtigerConfiguration','./api/intVtigerField','/api/integrations/servicenow/accounts','./api/intServicenowAccount','/api/integrations/servicenow/configurations','./api/intServicenowConfiguration','/api/integrations/servicenow/fields','./api/intServicenowField','/api/integrations/dynamics365/accounts','./api/intDynamics365Account','/api/integrations/dynamics365/configurations','./api/intDynamics365Configuration','/api/networks','./api/network','/api/chat/reports/queue','./api/chatQueueReport','/api/chat/internal/messages','./api/jscriptyAnswerReport','/api/jscripty/sessions/reports','./api/jscriptySessionReport','/api/sms/reports/queue','./api/smsQueueReport','./api/squareReport','/api/square/details/reports','./api/squareReportDetail','/api/jscripty/projects','./api/jscriptyProject','./api/setting','/api/square/odbc','./api/squareOdbc','/api/square/projects','./api/squareProject','/api/square/recordings','./api/squareRecording','./api/squareMessage','/api/teams','/api/license','/api/campaigns','/api/migrations','./api/migration','/api/attachments','./api/attachment','./api/plugin','/api/mail/reports/transfer','./api/mailTransferReport','/api/chat/reports/transfer','/api/fax/reports/transfer','./api/openchannelTransferReport','./api/smsTransferReport','/api/cm/lists','./api/cmList','/api/voice/prefixes','./api/voicePrefix','/api/userProfiles','/api/userProfile/sections','./api/userProfileSection','/api/userProfile/resources','/api/auth/local','./api/authLocal','/api/auth/google','/api/jira','./api/jira','/api/rpc','./api/rpc','./api/system','/api/pm2','/apidoc','static','join','root','/www','/snippet','snippet','/server/files/plugins','route','/:url(api|auth|components|app|bower_components|assets)/*','get','sendFile','resolve','appPath','path','express','express-winston','util','./errors','./config/environment','./config/logger','api','auth','default','logger','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s','method','headers','x-forwarded-for','remoteAddress','url','statusCode','responseTime','user','name','role','body','device','format','connection','agent_id','agent_name','./api/user','use','/api/voice/chanspy','./api/voiceChanSpy','/api/voice/contexts','./api/voiceContext','/api/voice/extensions','./api/voiceExtension','/api/voice/mohs','./api/voiceMusicOnHold','/api/voice/queues','./api/voiceQueue','/api/voice/recordings','./api/voiceRecording','/api/screen/recordings','./api/screenRecording','/api/voice/mails','./api/voiceMail','/api/voice/mails/messages','/api/voice/calls/reports','./api/voiceCallReport','/api/voice/dials/reports','./api/voiceDialReport','/api/voice/agents/reports','./api/voiceAgentReport','/api/voice/queues/reports','./api/voiceQueueReport','/api/members/reports','./api/memberReport','./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/mailApplication','/api/dashboards','./api/dashboard','/api/dashboards/items','./api/faxInteraction','/api/fax/messages','./api/faxMessage','/api/fax/queues','./api/faxQueue','/api/fax/reports/queue','./api/smsAccount','/api/sms/applications','./api/smsApplication','./api/smsInteraction','./api/smsMessage','/api/sms/queues','./api/smsQueue','/api/openchannel/accounts','./api/openchannelAccount','/api/openchannel/applications','./api/openchannelApplication','/api/openchannel/interactions','./api/openchannelInteraction','/api/openchannel/messages','/api/openchannel/queues','./api/openchannelQueue','/api/chat/websites','./api/chatWebsite','/api/openchannel/reports/queue','/api/chat/applications','./api/chatApplication','/api/chat/interactions','./api/chatInteraction','/api/chat/messages','/api/chat/offline_messages','./api/chatOfflineMessage','/api/chat/queues','./api/chatQueue','/api/chat/groups','./api/chatGroup','/api/chat/proactive_actions','./api/chatProactiveAction','/api/cm/companies','./api/cmCompany','./api/cmContact','/api/cm/hopper','./api/cmHopper','./api/cmHopperBlack','/api/cm/hopper_final','./api/cmHopperFinal','/api/cm/hopper_history','./api/cmHopperHistory','/api/cm/custom_fields','./api/cmCustomField','/api/actions','./api/action','/api/automations','./api/automation','./api/cannedAnswer','/api/conditions','/api/intervals','./api/interval','./api/pause','/api/cdr','./api/cdr','/api/voiceQueuesLog','./api/voiceQueuesLog','/api/schedules','./api/schedule','/api/sounds','./api/sound','/api/tags','/api/templates','./api/template','/api/triggers','./api/trigger','/api/variables','./api/variable','/api/integrations','./api/integration','/api/integrations/reports','./api/integrationReport','./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/intSalesforceAccount'];(function(_0x33e6f6,_0x5ea06c){var _0x336e3c=function(_0x508aea){while(--_0x508aea){_0x33e6f6['push'](_0x33e6f6['shift']());}};_0x336e3c(++_0x5ea06c);}(_0xff96,0x179));var _0x6ff9=function(_0x378b4,_0x5ca7fa){_0x378b4=_0x378b4-0x0;var _0x11d07b=_0xff96[_0x378b4];return _0x11d07b;};'use strict';var path=require(_0x6ff9('0x0'));var express=require(_0x6ff9('0x1'));var ewinston=require(_0x6ff9('0x2'));var util=require(_0x6ff9('0x3'));var errors=require(_0x6ff9('0x4'));var config=require(_0x6ff9('0x5'));var logger=require(_0x6ff9('0x6'))(_0x6ff9('0x7'));var authLogger=require(_0x6ff9('0x6'))(_0x6ff9('0x8'));exports[_0x6ff9('0x9')]=function(_0x367a07){_0x367a07['use'](ewinston[_0x6ff9('0xa')]({'winstonInstance':logger,'meta':![],'statusLevels':!![],'msg':function(_0x5509ee,_0x502cf2){return util['format'](_0x6ff9('0xb'),_0x5509ee[_0x6ff9('0xc')],_0x5509ee[_0x6ff9('0xd')][_0x6ff9('0xe')]?_0x5509ee[_0x6ff9('0xd')][_0x6ff9('0xe')]:_0x5509ee['connection'][_0x6ff9('0xf')]||_0x5509ee['ip'],_0x5509ee[_0x6ff9('0x10')],_0x502cf2[_0x6ff9('0x11')],_0x502cf2[_0x6ff9('0x12')],_0x5509ee[_0x6ff9('0x13')]?_0x5509ee[_0x6ff9('0x13')]['id']:null,_0x5509ee[_0x6ff9('0x13')]?_0x5509ee[_0x6ff9('0x13')][_0x6ff9('0x14')]:null,_0x5509ee['user']?_0x5509ee['user'][_0x6ff9('0x15')]:null);}}));_0x367a07['use'](ewinston[_0x6ff9('0xa')]({'winstonInstance':authLogger,'meta':![],'statusLevels':!![],'msg':function(_0x38cf3b,_0x1857d2){var _0x58022a='%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s';if(_0x38cf3b[_0x6ff9('0x16')]&&_0x38cf3b[_0x6ff9('0x16')][_0x6ff9('0x17')]&&_0x38cf3b[_0x6ff9('0x16')]['agent_id']){_0x58022a='%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s\x20(id=%s\x20name=%s)';}return util[_0x6ff9('0x18')](_0x58022a,_0x38cf3b[_0x6ff9('0xc')],_0x38cf3b[_0x6ff9('0xd')][_0x6ff9('0xe')]?_0x38cf3b[_0x6ff9('0xd')]['x-forwarded-for']:_0x38cf3b[_0x6ff9('0x19')][_0x6ff9('0xf')]||_0x38cf3b['ip'],_0x38cf3b[_0x6ff9('0x10')],_0x1857d2['statusCode'],_0x1857d2['responseTime'],_0x38cf3b['user']?_0x38cf3b[_0x6ff9('0x13')]['id']:null,_0x38cf3b[_0x6ff9('0x13')]?_0x38cf3b[_0x6ff9('0x13')][_0x6ff9('0x14')]:null,_0x38cf3b[_0x6ff9('0x13')]?_0x38cf3b['user'][_0x6ff9('0x15')]:null,_0x38cf3b[_0x6ff9('0x16')]&&_0x38cf3b[_0x6ff9('0x16')][_0x6ff9('0x17')]?_0x38cf3b[_0x6ff9('0x16')][_0x6ff9('0x17')]:'other',_0x38cf3b[_0x6ff9('0x16')]&&_0x38cf3b[_0x6ff9('0x16')]['agent_id']?_0x38cf3b[_0x6ff9('0x16')][_0x6ff9('0x1a')]:'',_0x38cf3b[_0x6ff9('0x16')]&&_0x38cf3b['body']['agent_name']?_0x38cf3b['body'][_0x6ff9('0x1b')]:'');},'ignoreRoute':function(_0x31ad02){var _0x4b755c=/\/api\/users\/[0-9]+\/(login|logout)/gi;return!_0x4b755c['test'](_0x31ad02[_0x6ff9('0x10')]);}}));_0x367a07['use']('/api/users',require(_0x6ff9('0x1c')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x1e'),require(_0x6ff9('0x1f')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x20'),require(_0x6ff9('0x21')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x22'),require(_0x6ff9('0x23')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x24'),require(_0x6ff9('0x25')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x26'),require(_0x6ff9('0x27')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x28'),require(_0x6ff9('0x29')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x2a'),require(_0x6ff9('0x2b')));_0x367a07['use'](_0x6ff9('0x2c'),require(_0x6ff9('0x2d')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x2e'),require('./api/voiceMailMessage'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x2f'),require(_0x6ff9('0x30')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x31'),require(_0x6ff9('0x32')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x33'),require(_0x6ff9('0x34')));_0x367a07['use'](_0x6ff9('0x35'),require(_0x6ff9('0x36')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x37'),require(_0x6ff9('0x38')));_0x367a07[_0x6ff9('0x1d')]('/api/trunks',require(_0x6ff9('0x39')));_0x367a07['use'](_0x6ff9('0x3a'),require('./api/voiceTransferReport'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x3b'),require(_0x6ff9('0x3c')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x3d'),require(_0x6ff9('0x3e')));_0x367a07['use'](_0x6ff9('0x3f'),require(_0x6ff9('0x40')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x41'),require(_0x6ff9('0x42')));_0x367a07['use'](_0x6ff9('0x43'),require(_0x6ff9('0x44')));_0x367a07['use']('/api/mail/messages',require('./api/mailMessage'));_0x367a07['use']('/api/mail/applications',require(_0x6ff9('0x45')));_0x367a07['use']('/api/mail/reports/queue',require('./api/mailQueueReport'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x46'),require(_0x6ff9('0x47')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x48'),require('./api/dashboardItem'));_0x367a07[_0x6ff9('0x1d')]('/api/fax/accounts',require('./api/faxAccount'));_0x367a07[_0x6ff9('0x1d')]('/api/fax/applications',require('./api/faxApplication'));_0x367a07[_0x6ff9('0x1d')]('/api/fax/interactions',require(_0x6ff9('0x49')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x4a'),require(_0x6ff9('0x4b')));_0x367a07['use'](_0x6ff9('0x4c'),require(_0x6ff9('0x4d')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x4e'),require('./api/faxQueueReport'));_0x367a07[_0x6ff9('0x1d')]('/api/sms/accounts',require(_0x6ff9('0x4f')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x50'),require(_0x6ff9('0x51')));_0x367a07[_0x6ff9('0x1d')]('/api/sms/interactions',require(_0x6ff9('0x52')));_0x367a07[_0x6ff9('0x1d')]('/api/sms/messages',require(_0x6ff9('0x53')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x54'),require(_0x6ff9('0x55')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x56'),require(_0x6ff9('0x57')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x58'),require(_0x6ff9('0x59')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x5a'),require(_0x6ff9('0x5b')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x5c'),require('./api/openchannelMessage'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x5d'),require(_0x6ff9('0x5e')));_0x367a07['use'](_0x6ff9('0x5f'),require(_0x6ff9('0x60')));_0x367a07['use'](_0x6ff9('0x61'),require('./api/openchannelQueueReport'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x62'),require(_0x6ff9('0x63')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x64'),require(_0x6ff9('0x65')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x66'),require('./api/chatMessage'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x67'),require(_0x6ff9('0x68')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x69'),require(_0x6ff9('0x6a')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x6b'),require(_0x6ff9('0x6c')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x6d'),require(_0x6ff9('0x6e')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x6f'),require(_0x6ff9('0x70')));_0x367a07['use']('/api/cm/contacts',require(_0x6ff9('0x71')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x72'),require(_0x6ff9('0x73')));_0x367a07[_0x6ff9('0x1d')]('/api/cm/hopper_black',require(_0x6ff9('0x74')));_0x367a07['use'](_0x6ff9('0x75'),require(_0x6ff9('0x76')));_0x367a07['use'](_0x6ff9('0x77'),require(_0x6ff9('0x78')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x79'),require(_0x6ff9('0x7a')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x7b'),require(_0x6ff9('0x7c')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x7d'),require(_0x6ff9('0x7e')));_0x367a07['use']('/api/canned_answers',require(_0x6ff9('0x7f')));_0x367a07[_0x6ff9('0x1d')]('/api/dispositions',require('./api/disposition'));_0x367a07['use'](_0x6ff9('0x80'),require('./api/condition'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x81'),require(_0x6ff9('0x82')));_0x367a07['use']('/api/pauses',require(_0x6ff9('0x83')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x84'),require(_0x6ff9('0x85')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x86'),require(_0x6ff9('0x87')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x88'),require(_0x6ff9('0x89')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x8a'),require(_0x6ff9('0x8b')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x8c'),require('./api/tag'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x8d'),require(_0x6ff9('0x8e')));_0x367a07['use'](_0x6ff9('0x8f'),require(_0x6ff9('0x90')));_0x367a07['use'](_0x6ff9('0x91'),require(_0x6ff9('0x92')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x93'),require(_0x6ff9('0x94')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x95'),require(_0x6ff9('0x96')));_0x367a07[_0x6ff9('0x1d')]('/api/analytics/custom_reports',require(_0x6ff9('0x97')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x98'),require(_0x6ff9('0x99')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x9a'),require(_0x6ff9('0x9b')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x9c'),require('./api/analyticMetric'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x9d'),require(_0x6ff9('0x9e')));_0x367a07[_0x6ff9('0x1d')]('/api/analytics/tree_reports',require(_0x6ff9('0x9f')));_0x367a07[_0x6ff9('0x1d')]('/api/integrations/salesforce/accounts',require(_0x6ff9('0xa0')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xa1'),require(_0x6ff9('0xa2')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xa3'),require('./api/intSalesforceField'));_0x367a07[_0x6ff9('0x1d')]('/api/integrations/sugarcrm/accounts',require(_0x6ff9('0xa4')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xa5'),require(_0x6ff9('0xa6')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xa7'),require('./api/intSugarcrmField'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xa8'),require(_0x6ff9('0xa9')));_0x367a07[_0x6ff9('0x1d')]('/api/integrations/desk/configurations',require(_0x6ff9('0xaa')));_0x367a07['use'](_0x6ff9('0xab'),require(_0x6ff9('0xac')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xad'),require(_0x6ff9('0xae')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xaf'),require(_0x6ff9('0xb0')));_0x367a07['use'](_0x6ff9('0xb1'),require(_0x6ff9('0xb2')));_0x367a07['use'](_0x6ff9('0xb3'),require(_0x6ff9('0xb4')));_0x367a07[_0x6ff9('0x1d')]('/api/integrations/zendesk/configurations',require(_0x6ff9('0xb5')));_0x367a07[_0x6ff9('0x1d')]('/api/integrations/zendesk/fields',require(_0x6ff9('0xb6')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xb7'),require(_0x6ff9('0xb8')));_0x367a07[_0x6ff9('0x1d')]('/api/integrations/freshdesk/configurations',require('./api/intFreshdeskConfiguration'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xb9'),require(_0x6ff9('0xba')));_0x367a07[_0x6ff9('0x1d')]('/api/integrations/vtiger/accounts',require(_0x6ff9('0xbb')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xbc'),require(_0x6ff9('0xbd')));_0x367a07[_0x6ff9('0x1d')]('/api/integrations/vtiger/fields',require(_0x6ff9('0xbe')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xbf'),require(_0x6ff9('0xc0')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xc1'),require(_0x6ff9('0xc2')));_0x367a07['use'](_0x6ff9('0xc3'),require(_0x6ff9('0xc4')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xc5'),require(_0x6ff9('0xc6')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xc7'),require(_0x6ff9('0xc8')));_0x367a07[_0x6ff9('0x1d')]('/api/integrations/dynamics365/fields',require('./api/intDynamics365Field'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xc9'),require(_0x6ff9('0xca')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xcb'),require(_0x6ff9('0xcc')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xcd'),require('./api/chatInternalMessage'));_0x367a07['use']('/api/jscripty/answers/reports',require(_0x6ff9('0xce')));_0x367a07[_0x6ff9('0x1d')]('/api/jscripty/questions/reports',require('./api/jscriptyQuestionReport'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xcf'),require(_0x6ff9('0xd0')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xd1'),require(_0x6ff9('0xd2')));_0x367a07['use']('/api/square/reports',require(_0x6ff9('0xd3')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xd4'),require(_0x6ff9('0xd5')));_0x367a07['use'](_0x6ff9('0xd6'),require(_0x6ff9('0xd7')));_0x367a07[_0x6ff9('0x1d')]('/api/settings',require(_0x6ff9('0xd8')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xd9'),require(_0x6ff9('0xda')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xdb'),require(_0x6ff9('0xdc')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xdd'),require(_0x6ff9('0xde')));_0x367a07[_0x6ff9('0x1d')]('/api/square/messages',require(_0x6ff9('0xdf')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xe0'),require('./api/team'));_0x367a07['use'](_0x6ff9('0xe1'),require('./api/license'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xe2'),require('./api/campaign'));_0x367a07['use'](_0x6ff9('0xe3'),require(_0x6ff9('0xe4')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xe5'),require(_0x6ff9('0xe6')));_0x367a07[_0x6ff9('0x1d')]('/api/plugins',require(_0x6ff9('0xe7')));_0x367a07['use'](_0x6ff9('0xe8'),require(_0x6ff9('0xe9')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xea'),require('./api/chatTransferReport'));_0x367a07['use'](_0x6ff9('0xeb'),require('./api/faxTransferReport'));_0x367a07[_0x6ff9('0x1d')]('/api/openchannel/reports/transfer',require(_0x6ff9('0xec')));_0x367a07['use']('/api/sms/reports/transfer',require(_0x6ff9('0xed')));_0x367a07['use'](_0x6ff9('0xee'),require(_0x6ff9('0xef')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xf0'),require(_0x6ff9('0xf1')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xf2'),require('./api/userProfile'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xf3'),require(_0x6ff9('0xf4')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xf5'),require('./api/userProfileResource'));_0x367a07['use'](_0x6ff9('0xf6'),require(_0x6ff9('0xf7')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xf8'),require('./api/authGoogle'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xf9'),require(_0x6ff9('0xfa')));_0x367a07['use'](_0x6ff9('0xfb'),require(_0x6ff9('0xfc')));_0x367a07[_0x6ff9('0x1d')]('/api/version',require('./api/version'));_0x367a07[_0x6ff9('0x1d')]('/api/system',require(_0x6ff9('0xfd')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xfe'),require('./api/pm2'));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0xff'),express[_0x6ff9('0x100')](path[_0x6ff9('0x101')](config[_0x6ff9('0x102')],_0x6ff9('0xff'))));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x103'),express[_0x6ff9('0x100')](path[_0x6ff9('0x101')](config[_0x6ff9('0x102')],_0x6ff9('0x103'))));_0x367a07[_0x6ff9('0x1d')]('/demo',express[_0x6ff9('0x100')](path[_0x6ff9('0x101')](config[_0x6ff9('0x102')],'/demo')));_0x367a07[_0x6ff9('0x1d')](_0x6ff9('0x104'),express[_0x6ff9('0x100')](path['join'](config[_0x6ff9('0x102')],_0x6ff9('0x105'),'1.0.14')));_0x367a07[_0x6ff9('0x1d')]('/plugins',express[_0x6ff9('0x100')](path[_0x6ff9('0x101')](config[_0x6ff9('0x102')],_0x6ff9('0x106'))));_0x367a07[_0x6ff9('0x107')](_0x6ff9('0x108'))[_0x6ff9('0x109')](errors[0x194]);_0x367a07[_0x6ff9('0x107')]('/*')['get'](function(_0x25487c,_0x16db75){_0x16db75[_0x6ff9('0x10a')](path[_0x6ff9('0x10b')](_0x367a07[_0x6ff9('0x109')](_0x6ff9('0x10c'))+'/index.html'));});};
\ No newline at end of file
index 93dacda..d8a93c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd847=['../api/faxAccount/faxAccount.rpc','../api/faxInteraction/faxInteraction.rpc','../api/faxQueueReport/faxQueueReport.rpc','../api/smsAccount/smsAccount.rpc','../api/smsInteraction/smsInteraction.rpc','../api/smsQueue/smsQueue.rpc','../api/openchannelApplication/openchannelApplication.rpc','../api/openchannelInteraction/openchannelInteraction.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/cmContact/cmContact.rpc','../api/cmHopper/cmHopper.rpc','../api/cmHopperBlack/cmHopperBlack.rpc','../api/cmHopperFinal/cmHopperFinal.rpc','../api/cmHopperHistory/cmHopperHistory.rpc','../api/interval/interval.rpc','../api/pause/pause.rpc','../api/sound/sound.rpc','../api/template/template.rpc','../api/intSalesforceAccount/intSalesforceAccount.rpc','../api/intSugarcrmAccount/intSugarcrmAccount.rpc','../api/intDeskAccount/intDeskAccount.rpc','../api/intZendeskAccount/intZendeskAccount.rpc','../api/intFreshdeskAccount/intFreshdeskAccount.rpc','../api/intVtigerAccount/intVtigerAccount.rpc','../api/intServicenowAccount/intServicenowAccount.rpc','../api/intDynamics365Account/intDynamics365Account.rpc','../api/chatQueueReport/chatQueueReport.rpc','../api/smsQueueReport/smsQueueReport.rpc','../api/squareReport/squareReport.rpc','../api/squareReportDetail/squareReportDetail.rpc','../api/squareProject/squareProject.rpc','../api/squareRecording/squareRecording.rpc','../api/squareMessage/squareMessage.rpc','../api/campaign/campaign.rpc','../api/plugin/plugin.rpc','server','http','rpc','port','localhost','error','listen','log','RPC\x20listening\x20on\x20','jayson/promise','bluebird','lodash','../config/environment','merge','../api/user/user.rpc','../api/voiceRecording/voiceRecording.rpc','../api/voiceCallReport/voiceCallReport.rpc','../api/voiceDialReport/voiceDialReport.rpc','../api/voiceAgentReport/voiceAgentReport.rpc','../api/memberReport/memberReport.rpc','../api/trunk/trunk.rpc','../api/voiceTransferReport/voiceTransferReport.rpc','../api/userVoiceQueueRt/userVoiceQueueRt.rpc','../api/mailServerIn/mailServerIn.rpc','../api/mailAccount/mailAccount.rpc','../api/mailQueue/mailQueue.rpc','../api/mailInteraction/mailInteraction.rpc','../api/mailMessage/mailMessage.rpc','../api/mailApplication/mailApplication.rpc'];(function(_0x37945a,_0x42bc94){var _0x442a20=function(_0x4a2463){while(--_0x4a2463){_0x37945a['push'](_0x37945a['shift']());}};_0x442a20(++_0x42bc94);}(_0xd847,0x18a));var _0x7d84=function(_0x1204c7,_0x4d3eae){_0x1204c7=_0x1204c7-0x0;var _0x57f2cb=_0xd847[_0x1204c7];return _0x57f2cb;};'use strict';var jayson=require(_0x7d84('0x0'));var BPromise=require(_0x7d84('0x1'));var _=require(_0x7d84('0x2'));var config=require(_0x7d84('0x3'));exports['listen']=function(){return new BPromise(function(_0x5a1e39,_0x4492d5){var _0xd9edc8={};_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x5')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require('../api/voiceExtension/voiceExtension.rpc'));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require('../api/voiceQueue/voiceQueue.rpc'));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x6')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x7')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x8')));_0xd9edc8=_['merge'](_0xd9edc8,require(_0x7d84('0x9')));_0xd9edc8=_['merge'](_0xd9edc8,require('../api/voiceQueueReport/voiceQueueReport.rpc'));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0xa')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0xb')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0xc')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0xd')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0xe')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0xf')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x10')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x11')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x12')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x13')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require('../api/mailQueueReport/mailQueueReport.rpc'));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x14')));_0xd9edc8=_['merge'](_0xd9edc8,require('../api/faxApplication/faxApplication.rpc'));_0xd9edc8=_['merge'](_0xd9edc8,require(_0x7d84('0x15')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require('../api/faxMessage/faxMessage.rpc'));_0xd9edc8=_['merge'](_0xd9edc8,require('../api/faxQueue/faxQueue.rpc'));_0xd9edc8=_['merge'](_0xd9edc8,require(_0x7d84('0x16')));_0xd9edc8=_['merge'](_0xd9edc8,require(_0x7d84('0x17')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x18')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require('../api/smsMessage/smsMessage.rpc'));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x19')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x1a')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x1b')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x1c')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x1d')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x1e')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x1f')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x20')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x21')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x22')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x23')));_0xd9edc8=_['merge'](_0xd9edc8,require(_0x7d84('0x24')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x25')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x26')));_0xd9edc8=_['merge'](_0xd9edc8,require('../api/reportAgentPreview/reportAgentPreview.rpc'));_0xd9edc8=_['merge'](_0xd9edc8,require(_0x7d84('0x27')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x28')));_0xd9edc8=_['merge'](_0xd9edc8,require(_0x7d84('0x29')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x2a')));_0xd9edc8=_['merge'](_0xd9edc8,require('../api/trigger/trigger.rpc'));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require('../api/variable/variable.rpc'));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x2b')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x2c')));_0xd9edc8=_['merge'](_0xd9edc8,require(_0x7d84('0x2d')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require('../api/intZohoAccount/intZohoAccount.rpc'));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x2e')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x2f')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x30')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x31')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x32')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x33')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x34')));_0xd9edc8=_['merge'](_0xd9edc8,require(_0x7d84('0x35')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x36')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require('../api/squareOdbc/squareOdbc.rpc'));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x37')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x38')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x39')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x3a')));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require('../api/attachment/attachment.rpc'));_0xd9edc8=_[_0x7d84('0x4')](_0xd9edc8,require(_0x7d84('0x3b')));var _0x9cd044=jayson[_0x7d84('0x3c')](_0xd9edc8)[_0x7d84('0x3d')]();var _0x406a7f=config[_0x7d84('0x3e')][_0x7d84('0x3f')]||config[_0x7d84('0x3f')]+0x1;var _0x2922fb=config[_0x7d84('0x3e')]['ip']||_0x7d84('0x40');_0x9cd044['on'](_0x7d84('0x41'),function(_0x30fafe){return _0x4492d5(_0x30fafe);});_0x9cd044[_0x7d84('0x42')](_0x406a7f,_0x2922fb,function(){console[_0x7d84('0x43')]('Express\x20RPC\x20server\x20listening\x20on\x20%s:%d!',_0x2922fb,_0x406a7f);require('../config/triggers')['default']();return _0x5a1e39(_0x7d84('0x44')+_0x2922fb+':'+_0x406a7f);});});};
\ No newline at end of file
+var _0x0207=['../api/chatInteraction/chatInteraction.rpc','../api/chatMessage/chatMessage.rpc','../api/cmContact/cmContact.rpc','../api/interval/interval.rpc','../api/pause/pause.rpc','../api/sound/sound.rpc','../api/template/template.rpc','../api/trigger/trigger.rpc','../api/variable/variable.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/intServicenowAccount/intServicenowAccount.rpc','../api/intDynamics365Account/intDynamics365Account.rpc','../api/chatQueueReport/chatQueueReport.rpc','../api/smsQueueReport/smsQueueReport.rpc','../api/squareReport/squareReport.rpc','../api/squareReportDetail/squareReportDetail.rpc','../api/squareOdbc/squareOdbc.rpc','../api/squareProject/squareProject.rpc','../api/squareMessage/squareMessage.rpc','../api/attachment/attachment.rpc','../api/plugin/plugin.rpc','server','rpc','localhost','error','Express\x20RPC\x20server\x20listening\x20on\x20%s:%d!','../config/triggers','default','RPC\x20listening\x20on\x20','bluebird','listen','merge','../api/user/user.rpc','../api/voiceQueue/voiceQueue.rpc','../api/voiceRecording/voiceRecording.rpc','../api/voiceCallReport/voiceCallReport.rpc','../api/voiceDialReport/voiceDialReport.rpc','../api/voiceQueueReport/voiceQueueReport.rpc','../api/trunk/trunk.rpc','../api/voiceTransferReport/voiceTransferReport.rpc','../api/userVoiceQueueRt/userVoiceQueueRt.rpc','../api/mailServerIn/mailServerIn.rpc','../api/mailAccount/mailAccount.rpc','../api/mailQueue/mailQueue.rpc','../api/mailInteraction/mailInteraction.rpc','../api/mailMessage/mailMessage.rpc','../api/mailApplication/mailApplication.rpc','../api/mailQueueReport/mailQueueReport.rpc','../api/faxInteraction/faxInteraction.rpc','../api/faxMessage/faxMessage.rpc','../api/faxQueue/faxQueue.rpc','../api/faxQueueReport/faxQueueReport.rpc','../api/smsAccount/smsAccount.rpc','../api/smsMessage/smsMessage.rpc','../api/smsQueue/smsQueue.rpc','../api/openchannelInteraction/openchannelInteraction.rpc','../api/openchannelMessage/openchannelMessage.rpc','../api/openchannelQueue/openchannelQueue.rpc','../api/openchannelQueueReport/openchannelQueueReport.rpc'];(function(_0x194794,_0x2858f2){var _0x4720fb=function(_0x2baeb0){while(--_0x2baeb0){_0x194794['push'](_0x194794['shift']());}};_0x4720fb(++_0x2858f2);}(_0x0207,0x162));var _0x7020=function(_0x5009e4,_0x5c11c6){_0x5009e4=_0x5009e4-0x0;var _0x213873=_0x0207[_0x5009e4];return _0x213873;};'use strict';var jayson=require('jayson/promise');var BPromise=require(_0x7020('0x0'));var _=require('lodash');var config=require('../config/environment');exports[_0x7020('0x1')]=function(){return new BPromise(function(_0x28ab1d,_0x2213ca){var _0x15db09={};_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x3')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/voiceExtension/voiceExtension.rpc'));_0x15db09=_['merge'](_0x15db09,require(_0x7020('0x4')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x5')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x6')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x7')));_0x15db09=_['merge'](_0x15db09,require('../api/voiceAgentReport/voiceAgentReport.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x8')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/memberReport/memberReport.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x9')));_0x15db09=_['merge'](_0x15db09,require(_0x7020('0xa')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0xb')));_0x15db09=_['merge'](_0x15db09,require(_0x7020('0xc')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0xd')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0xe')));_0x15db09=_['merge'](_0x15db09,require(_0x7020('0xf')));_0x15db09=_['merge'](_0x15db09,require(_0x7020('0x10')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x11')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x12')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/faxAccount/faxAccount.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/faxApplication/faxApplication.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x13')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x14')));_0x15db09=_['merge'](_0x15db09,require(_0x7020('0x15')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x16')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x17')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/smsInteraction/smsInteraction.rpc'));_0x15db09=_['merge'](_0x15db09,require(_0x7020('0x18')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x19')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/openchannelApplication/openchannelApplication.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x1a')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x1b')));_0x15db09=_['merge'](_0x15db09,require(_0x7020('0x1c')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x1d')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x1e')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x1f')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/chatQueue/chatQueue.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x20')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/cmHopper/cmHopper.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/cmHopperBlack/cmHopperBlack.rpc'));_0x15db09=_['merge'](_0x15db09,require('../api/cmHopperFinal/cmHopperFinal.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/cmHopperHistory/cmHopperHistory.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/reportAgentPreview/reportAgentPreview.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x21')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x22')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x23')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x24')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x25')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x26')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/intSalesforceAccount/intSalesforceAccount.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x27')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x28')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x29')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x2a')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x2b')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x2c')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x2d')));_0x15db09=_['merge'](_0x15db09,require(_0x7020('0x2e')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x2f')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x30')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x31')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x32')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x33')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x34')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/squareRecording/squareRecording.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x35')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require('../api/campaign/campaign.rpc'));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x36')));_0x15db09=_[_0x7020('0x2')](_0x15db09,require(_0x7020('0x37')));var _0x1f65a6=jayson[_0x7020('0x38')](_0x15db09)['http']();var _0x27eb03=config['rpc']['port']||config['port']+0x1;var _0x38a546=config[_0x7020('0x39')]['ip']||_0x7020('0x3a');_0x1f65a6['on'](_0x7020('0x3b'),function(_0x3537e2){return _0x2213ca(_0x3537e2);});_0x1f65a6['listen'](_0x27eb03,_0x38a546,function(){console['log'](_0x7020('0x3c'),_0x38a546,_0x27eb03);require(_0x7020('0x3d'))[_0x7020('0x3e')]();return _0x28ab1d(_0x7020('0x3f')+_0x38a546+':'+_0x27eb03);});});};
\ No newline at end of file
index 72f4f9b..0bdf722 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x19a7=['E_AGI_SOCKET_TIMEOUT','destroy','pipe','command','write','inherits','prototype','sendRequest','sync','answer','ANSWER','getData','format','GET\x20DATA\x20\x22%s\x22\x20%s\x20%s','noop','exec','EXEC\x20%s\x20%s','join','setContext','SET\x20CONTEXT\x20%s','setExtension','SET\x20EXTENSION\x20%s','setPriority','SET\x20PRIORITY\x20%s','HANGUP','setVariable','SET\x20VARIABLE\x20%s\x20\x22%s\x22','sayNumber','SAY\x20NUMBER\x20%s\x20%s','sayDigits','SAY\x20DIGITS\x20%s\x20%s','extension','GOTO\x20%s\x20%s\x20%s','GET\x20VARIABLE\x20\x22%s\x22','recordFile','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','wait','ID:%s\x20-\x20LABEL:\x20%s\x20-\x20MSG:\x20%s','label','util','events','EventEmitter','./reply','./error','call','utf8','setTimeout','setEncoding','headers','emit','ready','line','toLowerCase','hangup','substring','520-Invalid','520\x20End\x20of\x20proper','function','replace','result=','indexOf','substr','startsWith','split','length','match','error','E_AGI_SOCKET_ERROR','code','close','E_AGI_SOCKET_CLOSE','timeout'];(function(_0x47199b,_0x16e824){var _0x390911=function(_0x2f874d){while(--_0x2f874d){_0x47199b['push'](_0x47199b['shift']());}};_0x390911(++_0x16e824);}(_0x19a7,0x1a1));var _0x719a=function(_0x173441,_0x26b0d9){_0x173441=_0x173441-0x0;var _0x2423a8=_0x19a7[_0x173441];return _0x2423a8;};'use strict';var util=require(_0x719a('0x0'));var _=require('lodash');var EventEmitter=require(_0x719a('0x1'))[_0x719a('0x2')];var AGIReply=require(_0x719a('0x3'));var AGIError=require(_0x719a('0x4'));function AGIChannel(_0xf839a3){var _0x7c88e4=this,_0x100a3f=new AGIReply(),_0x2c55da=![],_0x1cb181={};EventEmitter[_0x719a('0x5')](_0x7c88e4);_0xf839a3['setEncoding'](_0x719a('0x6'));_0xf839a3[_0x719a('0x7')](0x8*0x3c*0x3c*0x3e8);_0x100a3f[_0x719a('0x8')](_0x719a('0x6'));_0x100a3f['on'](_0x719a('0x9'),function(_0xb54b53){for(var _0x5885b2 in _0xb54b53){_0x7c88e4[_0x5885b2]=_0xb54b53[_0x5885b2];}_0x7c88e4[_0x719a('0xa')](_0x719a('0xb'));});_0x100a3f['on'](_0x719a('0xc'),function(_0x2bb0fd){if(_0x2bb0fd[_0x719a('0xd')]()==_0x719a('0xe')){_0x7c88e4[_0x719a('0xa')](_0x719a('0xe'));return;}if(_0x2bb0fd[_0x719a('0xf')](0x0,0xb)==_0x719a('0x10')){_0x2c55da=!![];}if(_0x2c55da){_0x1cb181['rx']+=_0x2bb0fd+'\x0a';if(_0x2bb0fd['search'](_0x719a('0x11'))!=-0x1){_0x2c55da=![];}}else{_0x1cb181['rx']=_0x2bb0fd;}if(_0x2c55da){return;}if(typeof _0x1cb181['cb']==_0x719a('0x12')){var _0x30e1ae=_0x1cb181['rx'][_0x719a('0xf')](0x0,0x3),_0x23afb1=null,_0x2c90c5=null;_0x30e1ae=parseInt(_0x30e1ae);if(isNaN(_0x30e1ae)){_0x1cb181['cb'](null,{'code':0x1f4,'result':-0x1,'extra':'no\x20code'});return;}if(_0x30e1ae!=0xc8){_0x1cb181['cb'](null,{'code':_0x30e1ae,'result':-0x1,'extra':'KO'});return;}_0x23afb1=_0x1cb181['rx'][_0x719a('0xf')](0x4)[_0x719a('0x13')](_0x719a('0x14'),'');if(_0x23afb1[_0x719a('0x15')]('\x20')!=-0x1){_0x23afb1=_0x23afb1[_0x719a('0x16')](0x0,_0x23afb1[_0x719a('0x15')]('\x20'));}if(_[_0x719a('0x17')](_0x23afb1,'-1')){_0x23afb1=parseInt(_0x23afb1);}_0x2c90c5=_0x1cb181['rx'][_0x719a('0x18')]('\x20');if(_0x2c90c5[_0x719a('0x19')]==0x3){_0x2c90c5=_0x2c90c5[0x2][_0x719a('0xf')](0x1,_0x2c90c5[0x2][_0x719a('0x19')]-0x1);}else if(_0x2c90c5['length']>0x3){var _0x3a4999=/\((.+)\)/;var _0x22bbc1=_0x1cb181['rx'][_0x719a('0x1a')](_0x3a4999);if(_0x22bbc1){_0x2c90c5=_0x22bbc1[0x1];}else{_0x2c90c5=null;}}else{_0x2c90c5=null;}_0x1cb181['cb'](null,{'code':_0x30e1ae,'result':_0x23afb1,'extra':_0x2c90c5});}});_0xf839a3['on'](_0x719a('0x1b'),function(_0x3bed93){_0x7c88e4[_0x719a('0xa')](_0x719a('0x1b'),new AGIError(_0x719a('0x1c'),_0x3bed93[_0x719a('0x1d')]));});_0xf839a3['on'](_0x719a('0x1e'),function(){_0x7c88e4[_0x719a('0xa')](_0x719a('0x1e'),new AGIError(_0x719a('0x1f')));});_0xf839a3['on'](_0x719a('0x20'),function(){_0x7c88e4[_0x719a('0xa')](_0x719a('0x20'),new AGIError(_0x719a('0x21')));_0xf839a3[_0x719a('0x22')]();});_0xf839a3[_0x719a('0x23')](_0x100a3f);this[_0x719a('0x24')]=function(_0x338113,_0x501790){var _0x338113=_0x338113||'',_0x501790=typeof _0x501790==_0x719a('0x12')?_0x501790:new Function();_0x1cb181={'tx':_0x338113,'rx':'','cb':_0x501790};_0xf839a3[_0x719a('0x25')](_0x338113+'\x0a');},this[_0x719a('0x1e')]=function(){_0xf839a3[_0x719a('0x22')]();};}util[_0x719a('0x26')](AGIChannel,EventEmitter);AGIChannel[_0x719a('0x27')][_0x719a('0x28')]=function(_0x24f006){return this[_0x719a('0x24')][_0x719a('0x29')](this,_0x24f006);};AGIChannel[_0x719a('0x27')][_0x719a('0x2a')]=function(){return this[_0x719a('0x28')](_0x719a('0x2b'));};AGIChannel[_0x719a('0x27')][_0x719a('0x2c')]=function(_0x748f63,_0x24e77b,_0x3e57e7){_0x748f63=_0x748f63===undefined?'beep':_0x748f63;_0x24e77b=_0x24e77b===undefined?'5':_0x24e77b;_0x3e57e7=_0x3e57e7===undefined?'1':_0x3e57e7;return this['sendRequest'](util[_0x719a('0x2d')](_0x719a('0x2e'),_0x748f63,_0x24e77b*0x3e8,_0x3e57e7));};AGIChannel[_0x719a('0x27')][_0x719a('0x2f')]=function(_0x4a8a00){_0x4a8a00=_0x4a8a00||'NO\x20MESSAGE';return this[_0x719a('0x28')](util[_0x719a('0x2d')]('VERBOSE\x20\x22%s\x22',_0x4a8a00));};AGIChannel[_0x719a('0x27')][_0x719a('0x30')]=function(_0x248fbe,_0xba4c2a){if(_['isArray'](_0xba4c2a)){return this[_0x719a('0x28')](util[_0x719a('0x2d')](_0x719a('0x31'),_0x248fbe,_0xba4c2a[_0x719a('0x32')](',')));}return this[_0x719a('0x28')](util[_0x719a('0x2d')](_0x719a('0x31'),_0x248fbe,_0xba4c2a));};AGIChannel[_0x719a('0x27')][_0x719a('0x33')]=function(_0x57a909){return this['sendRequest'](util['format'](_0x719a('0x34'),_0x57a909));};AGIChannel['prototype'][_0x719a('0x35')]=function(_0x19aba0){return this[_0x719a('0x28')](util[_0x719a('0x2d')](_0x719a('0x36'),_0x19aba0));};AGIChannel['prototype'][_0x719a('0x37')]=function(_0x29fb47){return this[_0x719a('0x28')](util[_0x719a('0x2d')](_0x719a('0x38'),_0x29fb47));};AGIChannel['prototype'][_0x719a('0xe')]=function(){return this[_0x719a('0x28')](_0x719a('0x39'));};AGIChannel[_0x719a('0x27')][_0x719a('0x3a')]=function(_0x43143c,_0x1993eb){return this[_0x719a('0x28')](util[_0x719a('0x2d')](_0x719a('0x3b'),_0x43143c,_0x1993eb?_0x1993eb['toString']()[_0x719a('0x13')](/(\r\n|\n|\r)/gm,'\x20'):''));};AGIChannel[_0x719a('0x27')][_0x719a('0x3c')]=function(_0x378f5e,_0x323d3b){return this[_0x719a('0x28')](util['format'](_0x719a('0x3d'),_0x378f5e,_0x323d3b));};AGIChannel['prototype'][_0x719a('0x3e')]=function(_0x2ee78d,_0x1cb288){return this['sendRequest'](util[_0x719a('0x2d')](_0x719a('0x3f'),_0x2ee78d,_0x1cb288));};AGIChannel[_0x719a('0x27')]['sayPhonetic']=function(_0x44cfaf,_0x37229e){return this[_0x719a('0x28')](util[_0x719a('0x2d')]('SAY\x20PHONETIC\x20\x22%s\x22\x20%s',_0x44cfaf,_0x37229e));};AGIChannel[_0x719a('0x27')]['continueAt']=function(_0x5c63d6,_0x58b223,_0x22a8eb){_0x58b223=_0x58b223||this[_0x719a('0x40')];_0x22a8eb=_0x22a8eb||0x1;this[_0x719a('0x33')](_0x5c63d6);this[_0x719a('0x35')](_0x58b223);this['setPriority'](_0x22a8eb);return this[_0x719a('0x2f')](util['format'](_0x719a('0x41'),_0x5c63d6,_0x58b223,_0x22a8eb));};AGIChannel[_0x719a('0x27')]['getVariable']=function(_0x33313c){return this[_0x719a('0x28')](util[_0x719a('0x2d')](_0x719a('0x42'),_0x33313c));};AGIChannel[_0x719a('0x27')][_0x719a('0x43')]=function(_0x4dc726,_0x398e19,_0x212e84,_0x5e1ea3,_0x2a912e,_0x44ba18){_0x398e19=_0x398e19||'wav';_0x212e84=_0x212e84||'';_0x5e1ea3=_0x5e1ea3===undefined?-0x1:_0x5e1ea3==='-1'?-0x1:_0x5e1ea3*0x3e8;_0x2a912e=_0x2a912e===undefined?'':'s='+_0x2a912e;_0x44ba18=_0x44ba18?_0x719a('0x44'):'';return this['sendRequest'](util[_0x719a('0x2d')](_0x719a('0x45'),_0x4dc726,_0x398e19,_0x212e84,_0x5e1ea3,_0x44ba18,_0x2a912e));};AGIChannel['prototype'][_0x719a('0x46')]=function(_0x165531,_0x511514){_0x511514=_0x511514||'';return this['sendRequest'](util[_0x719a('0x2d')](_0x719a('0x47'),_0x165531,_0x511514));};AGIChannel[_0x719a('0x27')]['agi']=function(_0x4a4805){return this[_0x719a('0x30')]('AGI',_0x4a4805);};AGIChannel['prototype'][_0x719a('0x48')]=function(_0x591b9f){return this[_0x719a('0x30')]('WAIT',_0x591b9f);};AGIChannel[_0x719a('0x27')]['error']=function(_0x107ab7,_0xc8edd8){this[_0x719a('0x2f')](util['format'](_0x719a('0x49'),_0x107ab7['id'],_0x107ab7[_0x719a('0x4a')],_0xc8edd8));return{'code':0x1f4,'result':'-1','extra':''};};module['exports']=AGIChannel;
\ No newline at end of file
+var _0x9c25=['emit','ready','line','toLowerCase','hangup','520-Invalid','520\x20End\x20of\x20proper','function','substring','replace','indexOf','substr','startsWith','split','length','match','error','E_AGI_SOCKET_ERROR','close','timeout','E_AGI_SOCKET_TIMEOUT','pipe','command','write','destroy','inherits','sync','answer','sendRequest','ANSWER','prototype','beep','GET\x20DATA\x20\x22%s\x22\x20%s\x20%s','noop','NO\x20MESSAGE','VERBOSE\x20\x22%s\x22','exec','isArray','format','EXEC\x20%s\x20%s','setContext','setExtension','SET\x20EXTENSION\x20%s','setPriority','SET\x20PRIORITY\x20%s','HANGUP','setVariable','SET\x20VARIABLE\x20%s\x20\x22%s\x22','sayNumber','SAY\x20NUMBER\x20%s\x20%s','SAY\x20DIGITS\x20%s\x20%s','sayPhonetic','SAY\x20PHONETIC\x20\x22%s\x22\x20%s','continueAt','extension','GOTO\x20%s\x20%s\x20%s','getVariable','recordFile','wav','BEEP','RECORD\x20FILE\x20\x22%s\x22\x20\x22%s\x22\x20\x22%s\x22\x20%s\x20%s\x20%s','streamFile','agi','AGI','wait','ID:%s\x20-\x20LABEL:\x20%s\x20-\x20MSG:\x20%s','label','util','lodash','events','EventEmitter','./reply','./error','call','setEncoding','headers'];(function(_0x2f87cd,_0xcaf299){var _0x5d7eda=function(_0x37ffb0){while(--_0x37ffb0){_0x2f87cd['push'](_0x2f87cd['shift']());}};_0x5d7eda(++_0xcaf299);}(_0x9c25,0x127));var _0x59c2=function(_0x5a2f25,_0xdeaceb){_0x5a2f25=_0x5a2f25-0x0;var _0x381d97=_0x9c25[_0x5a2f25];return _0x381d97;};'use strict';var util=require(_0x59c2('0x0'));var _=require(_0x59c2('0x1'));var EventEmitter=require(_0x59c2('0x2'))[_0x59c2('0x3')];var AGIReply=require(_0x59c2('0x4'));var AGIError=require(_0x59c2('0x5'));function AGIChannel(_0x79b7ff){var _0x54d663=this,_0x57fc59=new AGIReply(),_0x47c99f=![],_0x3749a2={};EventEmitter[_0x59c2('0x6')](_0x54d663);_0x79b7ff[_0x59c2('0x7')]('utf8');_0x79b7ff['setTimeout'](0x8*0x3c*0x3c*0x3e8);_0x57fc59[_0x59c2('0x7')]('utf8');_0x57fc59['on'](_0x59c2('0x8'),function(_0x2901a7){for(var _0xd5e28 in _0x2901a7){_0x54d663[_0xd5e28]=_0x2901a7[_0xd5e28];}_0x54d663[_0x59c2('0x9')](_0x59c2('0xa'));});_0x57fc59['on'](_0x59c2('0xb'),function(_0x1925b2){if(_0x1925b2[_0x59c2('0xc')]()=='hangup'){_0x54d663[_0x59c2('0x9')](_0x59c2('0xd'));return;}if(_0x1925b2['substring'](0x0,0xb)==_0x59c2('0xe')){_0x47c99f=!![];}if(_0x47c99f){_0x3749a2['rx']+=_0x1925b2+'\x0a';if(_0x1925b2['search'](_0x59c2('0xf'))!=-0x1){_0x47c99f=![];}}else{_0x3749a2['rx']=_0x1925b2;}if(_0x47c99f){return;}if(typeof _0x3749a2['cb']==_0x59c2('0x10')){var _0x2b7b08=_0x3749a2['rx'][_0x59c2('0x11')](0x0,0x3),_0x89e677=null,_0x1c8418=null;_0x2b7b08=parseInt(_0x2b7b08);if(isNaN(_0x2b7b08)){_0x3749a2['cb'](null,{'code':0x1f4,'result':-0x1,'extra':'no\x20code'});return;}if(_0x2b7b08!=0xc8){_0x3749a2['cb'](null,{'code':_0x2b7b08,'result':-0x1,'extra':'KO'});return;}_0x89e677=_0x3749a2['rx'][_0x59c2('0x11')](0x4)[_0x59c2('0x12')]('result=','');if(_0x89e677[_0x59c2('0x13')]('\x20')!=-0x1){_0x89e677=_0x89e677[_0x59c2('0x14')](0x0,_0x89e677['indexOf']('\x20'));}if(_[_0x59c2('0x15')](_0x89e677,'-1')){_0x89e677=parseInt(_0x89e677);}_0x1c8418=_0x3749a2['rx'][_0x59c2('0x16')]('\x20');if(_0x1c8418[_0x59c2('0x17')]==0x3){_0x1c8418=_0x1c8418[0x2]['substring'](0x1,_0x1c8418[0x2][_0x59c2('0x17')]-0x1);}else if(_0x1c8418[_0x59c2('0x17')]>0x3){var _0x498955=/\((.+)\)/;var _0x4b4f2b=_0x3749a2['rx'][_0x59c2('0x18')](_0x498955);if(_0x4b4f2b){_0x1c8418=_0x4b4f2b[0x1];}else{_0x1c8418=null;}}else{_0x1c8418=null;}_0x3749a2['cb'](null,{'code':_0x2b7b08,'result':_0x89e677,'extra':_0x1c8418});}});_0x79b7ff['on'](_0x59c2('0x19'),function(_0xf27112){_0x54d663[_0x59c2('0x9')](_0x59c2('0x19'),new AGIError(_0x59c2('0x1a'),_0xf27112['code']));});_0x79b7ff['on']('close',function(){_0x54d663[_0x59c2('0x9')](_0x59c2('0x1b'),new AGIError('E_AGI_SOCKET_CLOSE'));});_0x79b7ff['on']('timeout',function(){_0x54d663['emit'](_0x59c2('0x1c'),new AGIError(_0x59c2('0x1d')));_0x79b7ff['destroy']();});_0x79b7ff[_0x59c2('0x1e')](_0x57fc59);this[_0x59c2('0x1f')]=function(_0x3770b3,_0x12f03c){var _0x3770b3=_0x3770b3||'',_0x12f03c=typeof _0x12f03c==_0x59c2('0x10')?_0x12f03c:new Function();_0x3749a2={'tx':_0x3770b3,'rx':'','cb':_0x12f03c};_0x79b7ff[_0x59c2('0x20')](_0x3770b3+'\x0a');},this[_0x59c2('0x1b')]=function(){_0x79b7ff[_0x59c2('0x21')]();};}util[_0x59c2('0x22')](AGIChannel,EventEmitter);AGIChannel['prototype']['sendRequest']=function(_0x13cef8){return this[_0x59c2('0x1f')][_0x59c2('0x23')](this,_0x13cef8);};AGIChannel['prototype'][_0x59c2('0x24')]=function(){return this[_0x59c2('0x25')](_0x59c2('0x26'));};AGIChannel[_0x59c2('0x27')]['getData']=function(_0x471009,_0x4a3d78,_0x2cae3d){_0x471009=_0x471009===undefined?_0x59c2('0x28'):_0x471009;_0x4a3d78=_0x4a3d78===undefined?'5':_0x4a3d78;_0x2cae3d=_0x2cae3d===undefined?'1':_0x2cae3d;return this[_0x59c2('0x25')](util['format'](_0x59c2('0x29'),_0x471009,_0x4a3d78*0x3e8,_0x2cae3d));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x2a')]=function(_0x216090){_0x216090=_0x216090||_0x59c2('0x2b');return this[_0x59c2('0x25')](util['format'](_0x59c2('0x2c'),_0x216090));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x2d')]=function(_0x110388,_0x422fa5){if(_[_0x59c2('0x2e')](_0x422fa5)){return this[_0x59c2('0x25')](util[_0x59c2('0x2f')](_0x59c2('0x30'),_0x110388,_0x422fa5['join'](',')));}return this[_0x59c2('0x25')](util[_0x59c2('0x2f')](_0x59c2('0x30'),_0x110388,_0x422fa5));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x31')]=function(_0x368418){return this['sendRequest'](util[_0x59c2('0x2f')]('SET\x20CONTEXT\x20%s',_0x368418));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x32')]=function(_0x513dbd){return this[_0x59c2('0x25')](util[_0x59c2('0x2f')](_0x59c2('0x33'),_0x513dbd));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x34')]=function(_0x4bb754){return this[_0x59c2('0x25')](util['format'](_0x59c2('0x35'),_0x4bb754));};AGIChannel['prototype'][_0x59c2('0xd')]=function(){return this['sendRequest'](_0x59c2('0x36'));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x37')]=function(_0x4226f6,_0x341076){return this[_0x59c2('0x25')](util['format'](_0x59c2('0x38'),_0x4226f6,_0x341076?_0x341076['toString']()['replace'](/(\r\n|\n|\r)/gm,'\x20'):''));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x39')]=function(_0x4b0ad0,_0x657b8){return this[_0x59c2('0x25')](util[_0x59c2('0x2f')](_0x59c2('0x3a'),_0x4b0ad0,_0x657b8));};AGIChannel[_0x59c2('0x27')]['sayDigits']=function(_0x3f2057,_0x4b6d05){return this[_0x59c2('0x25')](util[_0x59c2('0x2f')](_0x59c2('0x3b'),_0x3f2057,_0x4b6d05));};AGIChannel['prototype'][_0x59c2('0x3c')]=function(_0x53e61f,_0x115d1f){return this['sendRequest'](util[_0x59c2('0x2f')](_0x59c2('0x3d'),_0x53e61f,_0x115d1f));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x3e')]=function(_0x3aa40f,_0x20288f,_0x2011a2){_0x20288f=_0x20288f||this[_0x59c2('0x3f')];_0x2011a2=_0x2011a2||0x1;this[_0x59c2('0x31')](_0x3aa40f);this['setExtension'](_0x20288f);this['setPriority'](_0x2011a2);return this['noop'](util['format'](_0x59c2('0x40'),_0x3aa40f,_0x20288f,_0x2011a2));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x41')]=function(_0x2f8872){return this[_0x59c2('0x25')](util['format']('GET\x20VARIABLE\x20\x22%s\x22',_0x2f8872));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x42')]=function(_0x128723,_0x2a3bab,_0x2f05c1,_0x39317a,_0x1ced18,_0x5f367a){_0x2a3bab=_0x2a3bab||_0x59c2('0x43');_0x2f05c1=_0x2f05c1||'';_0x39317a=_0x39317a===undefined?-0x1:_0x39317a==='-1'?-0x1:_0x39317a*0x3e8;_0x1ced18=_0x1ced18===undefined?'':'s='+_0x1ced18;_0x5f367a=_0x5f367a?_0x59c2('0x44'):'';return this[_0x59c2('0x25')](util[_0x59c2('0x2f')](_0x59c2('0x45'),_0x128723,_0x2a3bab,_0x2f05c1,_0x39317a,_0x5f367a,_0x1ced18));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x46')]=function(_0xf9a7a6,_0x5c3299){_0x5c3299=_0x5c3299||'';return this[_0x59c2('0x25')](util['format']('STREAM\x20FILE\x20\x22%s\x22\x20\x22%s\x22',_0xf9a7a6,_0x5c3299));};AGIChannel[_0x59c2('0x27')][_0x59c2('0x47')]=function(_0x4268ad){return this[_0x59c2('0x2d')](_0x59c2('0x48'),_0x4268ad);};AGIChannel['prototype'][_0x59c2('0x49')]=function(_0x4f5682){return this[_0x59c2('0x2d')]('WAIT',_0x4f5682);};AGIChannel[_0x59c2('0x27')]['error']=function(_0xa0f754,_0x53a850){this[_0x59c2('0x2a')](util['format'](_0x59c2('0x4a'),_0xa0f754['id'],_0xa0f754[_0x59c2('0x4b')],_0x53a850));return{'code':0x1f4,'result':'-1','extra':''};};module['exports']=AGIChannel;
\ No newline at end of file
index 3204e94..70a8b8b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x497c=['E_AGI_UNDEFINED','push','format','apply','message','name','exports','util','Argument\x20\x27port\x27\x20missing\x20in\x20function\x20call.','Server\x20error.\x20Code:\x20%s.','Server\x20closed.','[LICENSE\x20VOICE]\x20Server\x20license\x20voice\x20disabled.','Socket\x20error.\x20Code:\x20%s.','Socket\x20closed.','Socket\x20timeout.','Missing\x20\x27ivr.entry\x27\x20menu.'];(function(_0x438d02,_0x19573a){var _0x8de993=function(_0x24470a){while(--_0x24470a){_0x438d02['push'](_0x438d02['shift']());}};_0x8de993(++_0x19573a);}(_0x497c,0x1d7));var _0xc497=function(_0x2e4e19,_0x493b50){_0x2e4e19=_0x2e4e19-0x0;var _0x9ba20b=_0x497c[_0x2e4e19];return _0x9ba20b;};'use strict';var util=require(_0xc497('0x0'));var error={'E_AGI_UNDEFINED':'Undefined\x20error.','E_AGI_ARGUMENT_PORT':_0xc497('0x1'),'E_AGI_SERVER_ERROR':_0xc497('0x2'),'E_AGI_SERVER_CLOSE':_0xc497('0x3'),'E_AGI_SERVER_MAXCONNECTION':'[LICENSE]\x20Server\x20max\x20connection.\x20Count:\x20%s.','E_AGI_SERVER_VOICE_DISABLED':_0xc497('0x4'),'E_AGI_SOCKET_ERROR':_0xc497('0x5'),'E_AGI_SOCKET_CLOSE':_0xc497('0x6'),'E_AGI_SOCKET_TIMEOUT':_0xc497('0x7'),'E_AGI_COMMAND_EMPTY':'Empty\x20command.','E_AGI_IVR_AGI_NETWORK_SCRIPT':'Missing\x20\x27ivr.agi_network_script\x27.','E_AGI_IVR_ENTRY':_0xc497('0x8')};function AGIError(_0x5b15f2){var _0x5b15f2=_0x5b15f2||null,_0x330e05=_0x330e05||[],_0x5ef945=0x1,_0x25ae11='';if(!error[_0x5b15f2]){_0x5b15f2=_0xc497('0x9');}_0x330e05[_0xc497('0xa')](error[_0x5b15f2]);while(arguments[_0x5ef945]){_0x330e05['push'](arguments[_0x5ef945]);_0x5ef945++;}_0x25ae11=util[_0xc497('0xb')][_0xc497('0xc')](util,_0x330e05);this[_0xc497('0xd')]=_0x25ae11;this[_0xc497('0xe')]=_0x5b15f2;}module[_0xc497('0xf')]=AGIError;
\ No newline at end of file
+var _0x0d59=['message','name','exports','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\x20closed.','Socket\x20timeout.','Empty\x20command.','Missing\x20\x27ivr.agi_network_script\x27.','E_AGI_UNDEFINED','push','apply'];(function(_0x47f6d8,_0x3b3c7d){var _0x1e07b9=function(_0x112a24){while(--_0x112a24){_0x47f6d8['push'](_0x47f6d8['shift']());}};_0x1e07b9(++_0x3b3c7d);}(_0x0d59,0x93));var _0x90d5=function(_0x12d6c2,_0x409bc8){_0x12d6c2=_0x12d6c2-0x0;var _0x1c9825=_0x0d59[_0x12d6c2];return _0x1c9825;};'use strict';var util=require(_0x90d5('0x0'));var error={'E_AGI_UNDEFINED':'Undefined\x20error.','E_AGI_ARGUMENT_PORT':_0x90d5('0x1'),'E_AGI_SERVER_ERROR':_0x90d5('0x2'),'E_AGI_SERVER_CLOSE':_0x90d5('0x3'),'E_AGI_SERVER_MAXCONNECTION':_0x90d5('0x4'),'E_AGI_SERVER_VOICE_DISABLED':_0x90d5('0x5'),'E_AGI_SOCKET_ERROR':'Socket\x20error.\x20Code:\x20%s.','E_AGI_SOCKET_CLOSE':_0x90d5('0x6'),'E_AGI_SOCKET_TIMEOUT':_0x90d5('0x7'),'E_AGI_COMMAND_EMPTY':_0x90d5('0x8'),'E_AGI_IVR_AGI_NETWORK_SCRIPT':_0x90d5('0x9'),'E_AGI_IVR_ENTRY':'Missing\x20\x27ivr.entry\x27\x20menu.'};function AGIError(_0x5929cd){var _0x5929cd=_0x5929cd||null,_0x5e4f40=_0x5e4f40||[],_0x22c0f6=0x1,_0x3c8263='';if(!error[_0x5929cd]){_0x5929cd=_0x90d5('0xa');}_0x5e4f40['push'](error[_0x5929cd]);while(arguments[_0x22c0f6]){_0x5e4f40[_0x90d5('0xb')](arguments[_0x22c0f6]);_0x22c0f6++;}_0x3c8263=util['format'][_0x90d5('0xc')](util,_0x5e4f40);this[_0x90d5('0xd')]=_0x3c8263;this[_0x90d5('0xe')]=_0x5929cd;}module[_0x90d5('0xf')]=AGIError;
\ No newline at end of file
index 969cc70..1239295 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x282b=['getdigits','edges','prototype','addVertex','vertices','push','numberOfEdges','size','relations','getVertex','traverseBFS','no\x20vertex\x20found','info','no\x20edge/s\x20available','length','condition','vswitch','target','default','agicommand','invalid','default\x20on\x20switch\x20not\x20found','includes','max\x20retry\x20reach','condition\x20not\x20found','exports','lodash','../../../config/logger','agi','menu'];(function(_0x1b349a,_0x22222c){var _0x5d1f7c=function(_0x368d7c){while(--_0x368d7c){_0x1b349a['push'](_0x1b349a['shift']());}};_0x5d1f7c(++_0x22222c);}(_0x282b,0xec));var _0xb282=function(_0x232af5,_0x1cb069){_0x232af5=_0x232af5-0x0;var _0x573e64=_0x282b[_0x232af5];return _0x573e64;};'use strict';var _=require(_0xb282('0x0'));var logger=require(_0xb282('0x1'))(_0xb282('0x2'));var verticesWithRetry=[_0xb282('0x3'),_0xb282('0x4'),'getsecretdigits'];var Graph=function(){this['vertices']={};this[_0xb282('0x5')]={};this['numberOfEdges']=0x0;};Graph[_0xb282('0x6')][_0xb282('0x7')]=function(_0x283325){this[_0xb282('0x8')][_0x283325['id']]=_0x283325;this[_0xb282('0x5')][_0x283325['id']]=[];};Graph[_0xb282('0x6')]['addEdge']=function(_0x4a0d28,_0x17fba1,_0x436eaa){this['edges'][_0x4a0d28][_0xb282('0x9')]({'target':_0x17fba1,'condition':_0x436eaa});this[_0xb282('0xa')]+=0x1;};Graph[_0xb282('0x6')][_0xb282('0xb')]=function(){return _['size'](this['vertices']);};Graph[_0xb282('0x6')][_0xb282('0xc')]=function(){return this[_0xb282('0xa')];};Graph[_0xb282('0x6')][_0xb282('0xd')]=function(_0x5f1c71){return this['vertices'][_0x5f1c71];};Graph[_0xb282('0x6')][_0xb282('0xe')]=function(_0x40d7b8,_0x9e9072){if(!this[_0xb282('0x8')][_0x40d7b8]){return logger['info'](_0xb282('0xf'));}var _0x5adf7f=_0x9e9072(this[_0xb282('0x8')][_0x40d7b8]);if(!_0x5adf7f){return logger[_0xb282('0x10')]('stop\x20traverse');}if(this['edges'][_0x40d7b8]['length']===0x0){return logger[_0xb282('0x10')](_0xb282('0x11'));}for(var _0x7c20df=0x0,_0xbb182=[],_0x438a05=![];_0x7c20df<this['edges'][_0x40d7b8][_0xb282('0x12')];_0x7c20df+=0x1){if(this[_0xb282('0x5')][_0x40d7b8][_0x7c20df][_0xb282('0x13')]){_0xbb182=this[_0xb282('0x5')][_0x40d7b8][_0x7c20df][_0xb282('0x13')]['split'](',');for(var _0x52e305=0x0;_0x52e305<_0xbb182[_0xb282('0x12')];_0x52e305+=0x1){if(this[_0xb282('0x8')][_0x40d7b8]['agicommand']===_0xb282('0x14')&&_0xbb182[_0x52e305]==='-'){_0x438a05=this[_0xb282('0x5')][_0x40d7b8][_0x7c20df][_0xb282('0x15')];logger[_0xb282('0x10')](_0xb282('0x16'),_0xbb182[_0x52e305],this['edges'][_0x40d7b8][_0x7c20df][_0xb282('0x15')]);}else if(this[_0xb282('0x8')][_0x40d7b8][_0xb282('0x17')]==='menu'&&_0xbb182[_0x52e305]==='i'){_0x438a05=this[_0xb282('0x5')][_0x40d7b8][_0x7c20df][_0xb282('0x15')];logger[_0xb282('0x10')](_0xb282('0x18'),_0xbb182[_0x52e305],this[_0xb282('0x5')][_0x40d7b8][_0x7c20df]['target']);}if(_0xbb182[_0x52e305]===_0x5adf7f){return this['traverseBFS'](this[_0xb282('0x5')][_0x40d7b8][_0x7c20df][_0xb282('0x15')],_0x9e9072);}}}else{return this['traverseBFS'](this['edges'][_0x40d7b8][_0x7c20df][_0xb282('0x15')],_0x9e9072);}}if(_0xbb182[_0xb282('0x12')]){if(this[_0xb282('0x8')][_0x40d7b8][_0xb282('0x17')]===_0xb282('0x14')){if(_0x438a05){return this[_0xb282('0xe')](_0x438a05,_0x9e9072);}return logger['info'](_0xb282('0x19'));}else if(_[_0xb282('0x1a')](verticesWithRetry,this['vertices'][_0x40d7b8][_0xb282('0x17')])){if(_0x5adf7f==='-'){return logger[_0xb282('0x10')](_0xb282('0x1b'));}if(_0x438a05&&_0x5adf7f!=='t'){return this[_0xb282('0xe')](_0x438a05,_0x9e9072);}return this['traverseBFS'](_0x40d7b8,_0x9e9072);}return logger[_0xb282('0x10')](_0xb282('0x1c'));}};module[_0xb282('0x1d')]=Graph;
\ No newline at end of file
+var _0x36ee=['relations','getVertex','traverseBFS','no\x20vertex\x20found','info','stop\x20traverse','length','no\x20edge/s\x20available','condition','agicommand','vswitch','default','target','invalid','default\x20on\x20switch\x20not\x20found','exports','agi','getdigits','getsecretdigits','vertices','edges','numberOfEdges','prototype','addVertex','addEdge','push','size'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x36ee,0xe8));var _0xe36e=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0x36ee[_0x397e5f];return _0x5302b8;};'use strict';var _=require('lodash');var logger=require('../../../config/logger')(_0xe36e('0x0'));var verticesWithRetry=['menu',_0xe36e('0x1'),_0xe36e('0x2')];var Graph=function(){this[_0xe36e('0x3')]={};this[_0xe36e('0x4')]={};this[_0xe36e('0x5')]=0x0;};Graph[_0xe36e('0x6')][_0xe36e('0x7')]=function(_0x3f29e1){this[_0xe36e('0x3')][_0x3f29e1['id']]=_0x3f29e1;this[_0xe36e('0x4')][_0x3f29e1['id']]=[];};Graph[_0xe36e('0x6')][_0xe36e('0x8')]=function(_0x51b4bd,_0x74b4b7,_0x4aebdd){this[_0xe36e('0x4')][_0x51b4bd][_0xe36e('0x9')]({'target':_0x74b4b7,'condition':_0x4aebdd});this[_0xe36e('0x5')]+=0x1;};Graph['prototype'][_0xe36e('0xa')]=function(){return _['size'](this[_0xe36e('0x3')]);};Graph[_0xe36e('0x6')][_0xe36e('0xb')]=function(){return this[_0xe36e('0x5')];};Graph[_0xe36e('0x6')][_0xe36e('0xc')]=function(_0x3f6d7f){return this[_0xe36e('0x3')][_0x3f6d7f];};Graph['prototype'][_0xe36e('0xd')]=function(_0x27841e,_0x23abfb){if(!this[_0xe36e('0x3')][_0x27841e]){return logger['info'](_0xe36e('0xe'));}var _0x521afa=_0x23abfb(this['vertices'][_0x27841e]);if(!_0x521afa){return logger[_0xe36e('0xf')](_0xe36e('0x10'));}if(this[_0xe36e('0x4')][_0x27841e][_0xe36e('0x11')]===0x0){return logger[_0xe36e('0xf')](_0xe36e('0x12'));}for(var _0x2096f6=0x0,_0x39bae8=[],_0x387c37=![];_0x2096f6<this[_0xe36e('0x4')][_0x27841e]['length'];_0x2096f6+=0x1){if(this[_0xe36e('0x4')][_0x27841e][_0x2096f6][_0xe36e('0x13')]){_0x39bae8=this['edges'][_0x27841e][_0x2096f6][_0xe36e('0x13')]['split'](',');for(var _0x471400=0x0;_0x471400<_0x39bae8[_0xe36e('0x11')];_0x471400+=0x1){if(this['vertices'][_0x27841e][_0xe36e('0x14')]===_0xe36e('0x15')&&_0x39bae8[_0x471400]==='-'){_0x387c37=this[_0xe36e('0x4')][_0x27841e][_0x2096f6]['target'];logger[_0xe36e('0xf')](_0xe36e('0x16'),_0x39bae8[_0x471400],this[_0xe36e('0x4')][_0x27841e][_0x2096f6][_0xe36e('0x17')]);}else if(this[_0xe36e('0x3')][_0x27841e][_0xe36e('0x14')]==='menu'&&_0x39bae8[_0x471400]==='i'){_0x387c37=this[_0xe36e('0x4')][_0x27841e][_0x2096f6][_0xe36e('0x17')];logger[_0xe36e('0xf')](_0xe36e('0x18'),_0x39bae8[_0x471400],this[_0xe36e('0x4')][_0x27841e][_0x2096f6]['target']);}if(_0x39bae8[_0x471400]===_0x521afa){return this['traverseBFS'](this[_0xe36e('0x4')][_0x27841e][_0x2096f6][_0xe36e('0x17')],_0x23abfb);}}}else{return this[_0xe36e('0xd')](this[_0xe36e('0x4')][_0x27841e][_0x2096f6][_0xe36e('0x17')],_0x23abfb);}}if(_0x39bae8[_0xe36e('0x11')]){if(this[_0xe36e('0x3')][_0x27841e]['agicommand']===_0xe36e('0x15')){if(_0x387c37){return this[_0xe36e('0xd')](_0x387c37,_0x23abfb);}return logger[_0xe36e('0xf')](_0xe36e('0x19'));}else if(_['includes'](verticesWithRetry,this[_0xe36e('0x3')][_0x27841e]['agicommand'])){if(_0x521afa==='-'){return logger[_0xe36e('0xf')]('max\x20retry\x20reach');}if(_0x387c37&&_0x521afa!=='t'){return this[_0xe36e('0xd')](_0x387c37,_0x23abfb);}return this['traverseBFS'](_0x27841e,_0x23abfb);}return logger[_0xe36e('0xf')]('condition\x20not\x20found');}};module[_0xe36e('0x1a')]=Graph;
\ No newline at end of file
index 3ad48db..7cf1f8e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x032e=['[LICENSE]\x20CHANNELS:\x20%s','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]\x20VOICE\x20IS\x20DISABLED','[LICENSE]','./server','listening','connection','xml2json','syncho','util','../../config/logger','agi','../../config/license/util','./rpc','./mailRpc','./graph','./vertices','defaults','127.0.0.1','nextTick','error','stack','log','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','port','info','format','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','name','message','[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','[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','evtHangup','toJson','mxGraphModel','root','maxRetry','retry','addVertex','omit','mxCell','hasOwnProperty','length','addEdge','source','target','value','then','catch','createSquareReport','indexOf','substring','inspect','debug','stringify','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','close','timeout','hangup','sync','production','start','joinAt','YYYY-MM-DD\x20HH:mm:ss','[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','traverseBFS','agicommand','gotoc','context','extension','priority','response','code','result','isUndefined','toString','finally','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','vertex','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','Project\x20%s\x20not\x20published','continueAt','Project\x20%s\x20not\x20found','getLicense','voice','callysquare'];(function(_0x25e213,_0x3b5011){var _0x40bc0b=function(_0x21a2c3){while(--_0x21a2c3){_0x25e213['push'](_0x25e213['shift']());}};_0x40bc0b(++_0x3b5011);}(_0x032e,0x124));var _0xe032=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x032e[_0x5b644e];return _0x49c6bf;};'use strict';var parser=require(_0xe032('0x0'));var _=require('lodash');var syncho=require(_0xe032('0x1'));var util=require(_0xe032('0x2'));var moment=require('moment');var config=require('../../config/environment');var logger=require(_0xe032('0x3'))(_0xe032('0x4'));var utilLicense=require(_0xe032('0x5'));var rpc=require(_0xe032('0x6'));var mailRpc=require(_0xe032('0x7'));var Graph=require(_0xe032('0x8'));var Vertices=require(_0xe032('0x9'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0xe032('0x4')]=_[_0xe032('0xa')](config[_0xe032('0x4')],{'ip':_0xe032('0xb'),'port':0x11dd});function connectionHandler(_0xd84027){process[_0xe032('0xc')](function(){syncho(function(){try{setChannelVariables(_0xd84027);agiHandler(_0xd84027);}catch(_0x3b0ef8){logger[_0xe032('0xd')](_0x3b0ef8[_0xe032('0xe')]);}});});}function listeningHandler(){console[_0xe032('0xf')](_0xe032('0x10'),config['agi'][_0xe032('0x11')]);logger[_0xe032('0x12')](util[_0xe032('0x13')](_0xe032('0x14'),config[_0xe032('0x4')]['ip'],config[_0xe032('0x4')][_0xe032('0x11')]));}function errorHandler(_0x5bcb5b){if(_0x5bcb5b&&_0x5bcb5b[_0xe032('0x15')]&&_0x5bcb5b[_0xe032('0x16')]){logger[_0xe032('0xd')](util[_0xe032('0x13')]('[%s]\x20%s',_0x5bcb5b[_0xe032('0x15')],_0x5bcb5b[_0xe032('0x16')]));}else{logger[_0xe032('0xd')](util[_0xe032('0x13')](_0xe032('0x17'),_0x5bcb5b[_0xe032('0xe')]));}}function closeHandler(){logger[_0xe032('0x12')](util['format'](_0xe032('0x18'),this[_0xe032('0x19')],this[_0xe032('0x1a')],this[_0xe032('0x1b')],this[_0xe032('0x1c')],this[_0xe032('0x1d')]));try{createSquareReport(this);}catch(_0x4cdab3){logger[_0xe032('0xd')](_0x4cdab3[_0xe032('0xe')]);}}function timeoutHandler(){logger[_0xe032('0x12')](util[_0xe032('0x13')](_0xe032('0x1e'),this['arg_1'],this['calleridname'],this['callerid'],this[_0xe032('0x1c')],this['uniqueid']));}function hangupHandler(){logger[_0xe032('0x12')](util[_0xe032('0x13')](_0xe032('0x1f'),this[_0xe032('0x19')],this[_0xe032('0x1a')],this[_0xe032('0x1b')],this[_0xe032('0x1c')],this['uniqueid']));this[_0xe032('0x20')]=!![];}function getRoot(_0x866c81){return parser[_0xe032('0x21')](_0x866c81,{'object':!![]})[_0xe032('0x22')][_0xe032('0x23')];}function addVertex(_0x33d89a,_0x22831a,_0xe89aa7){_0x22831a['agicommand']=_0xe89aa7;if(_0x22831a['hasOwnProperty']('retry')){_0x22831a[_0xe032('0x24')]=parseInt(_0x22831a[_0xe032('0x25')],0xa);}_0x33d89a[_0xe032('0x26')](_[_0xe032('0x27')](_0x22831a,_0xe032('0x28')));}function initGraph(_0x200671,_0x36ece7){var _0x2b6ffa=new Graph();for(var _0x4dcbf1 in _0x200671){if(_0x200671[_0xe032('0x29')](_0x4dcbf1)){if(_['isArray'](_0x200671[_0x4dcbf1])){for(var _0x189ed4=0x0;_0x189ed4<_0x200671[_0x4dcbf1][_0xe032('0x2a')];_0x189ed4+=0x1){addVertex(_0x2b6ffa,_0x200671[_0x4dcbf1][_0x189ed4],_0x4dcbf1);}}else{addVertex(_0x2b6ffa,_0x200671[_0x4dcbf1],_0x4dcbf1);}}}for(var _0x3106aa=0x0;_0x3106aa<_0x36ece7[_0xe032('0x2a')];_0x3106aa+=0x1){if(_0x36ece7[_0x3106aa]['source']&&_0x36ece7[_0x3106aa]['target']){_0x2b6ffa[_0xe032('0x2b')](_0x36ece7[_0x3106aa][_0xe032('0x2c')],_0x36ece7[_0x3106aa][_0xe032('0x2d')],_0x36ece7[_0x3106aa][_0xe032('0x2e')]);}}return _0x2b6ffa;}function getSquareProject(_0x4e8b72,_0x541aa8){rpc['getSquareProject'](_0x4e8b72)[_0xe032('0x2f')](function(_0x1dd34f){_0x541aa8(null,_0x1dd34f);})[_0xe032('0x30')](function(_0x707b){_0x541aa8(null,_0x707b);});}function createSquareReport(_0x50db2d,_0x3b93e3){rpc[_0xe032('0x31')](_0x50db2d)[_0xe032('0x2f')](function(_0x4348f8){if(_0x3b93e3){_0x3b93e3(null,_0x4348f8);}})[_0xe032('0x30')](function(_0x4a0198){if(_0x3b93e3){_0x3b93e3(null,_0x4a0198);}});}function setChannelVariables(_0xd90bd5){for(var _0x33634c in _0xd90bd5){if(_0xd90bd5[_0xe032('0x29')](_0x33634c)){if(_0x33634c[_0xe032('0x32')]('agi_')===0x0){_0xd90bd5[_0x33634c[_0xe032('0x33')](0x4)]=_0xd90bd5[_0x33634c];delete _0xd90bd5[_0x33634c];}}}}function getLogFromObject(_0x4c86e9){return util[_0xe032('0x34')](_0x4c86e9,{'showHidden':![],'depth':null});}function agiHandler(_0x53df28){var _0x9d3199,_0x4b0b21,_0x2c1ec0,_0x517df6,_0x3970e1;logger[_0xe032('0x35')]('variables',JSON[_0xe032('0x36')](_0x53df28,null,0x2));logger[_0xe032('0x12')](util[_0xe032('0x13')](_0xe032('0x37'),_0x53df28['arg_1'],_0x53df28[_0xe032('0x1a')],_0x53df28['callerid'],_0x53df28[_0xe032('0x1c')],_0x53df28[_0xe032('0x1d')]));_0x53df28['on']('error',errorHandler);_0x53df28['on'](_0xe032('0x38'),closeHandler);_0x53df28['on'](_0xe032('0x39'),timeoutHandler);_0x53df28['evtHangup']=![];_0x53df28['on'](_0xe032('0x3a'),hangupHandler);var _0x2cfc49=getSquareProject[_0xe032('0x3b')](null,_0x53df28[_0xe032('0x19')]);if(_0x2cfc49){if(_0x2cfc49[_0xe032('0x3c')]){_0x9d3199=getRoot(_0x2cfc49[_0xe032('0x3c')]);if(_0x9d3199&&_0x9d3199[_0xe032('0x3d')]){logger[_0xe032('0x35')](_0xe032('0x23'),JSON[_0xe032('0x36')](_0x9d3199,null,0x2));_0x53df28[_0xe032('0x3e')]=moment()[_0xe032('0x13')](_0xe032('0x3f'));_0x4b0b21=initGraph(_[_0xe032('0x27')](_0x9d3199,_0xe032('0x28')),_0x9d3199[_0xe032('0x28')]);_0x2c1ec0=new Vertices(_0x53df28,rpc,mailRpc);logger[_0xe032('0x12')](util['format'](_0xe032('0x40'),_0x53df28['arg_1'],_0x53df28[_0xe032('0x1a')],_0x53df28[_0xe032('0x1b')],_0x53df28[_0xe032('0x1c')],_0x53df28[_0xe032('0x1d')]));_0x4b0b21[_0xe032('0x41')](_0x9d3199['start']['id'],function(_0x132d25){try{_0x132d25=_0x2c1ec0['clear'](_0x132d25);logger[_0xe032('0x35')]('vertex',JSON[_0xe032('0x36')](_0x132d25,null,0x2));if(_0x132d25[_0xe032('0x42')]===_0xe032('0x43')){logger[_0xe032('0x12')]('gotoc\x20block\x20stop\x20traverse\x20BFS');_0x53df28[_0xe032('0x44')]=_0x132d25['context']||_0x53df28[_0xe032('0x44')];_0x53df28[_0xe032('0x45')]=_0x132d25[_0xe032('0x45')];_0x53df28[_0xe032('0x46')]=_0x132d25['priority']?_0x132d25['priority']-0x1:0x1;return null;}else if(_0x132d25&&_0x2c1ec0[_0x132d25[_0xe032('0x42')]]){_0x3970e1=_0x2c1ec0[_0x132d25[_0xe032('0x42')]](_0x132d25);logger['info'](_0xe032('0x47'),JSON[_0xe032('0x36')](_0x3970e1,null,0x2));if(_0x3970e1&&_0x3970e1[_0xe032('0x48')]===AGI_CODE_SUCCESS&&_0x3970e1[_0xe032('0x49')]!==AGI_RESULT_ERROR&&!_0x53df28[_0xe032('0x20')]){logger['debug'](_0xe032('0x47'),getLogFromObject(_0x3970e1));return _[_0xe032('0x4a')](_0x3970e1[_0xe032('0x49')])?null:_0x3970e1[_0xe032('0x49')][_0xe032('0x4b')]();}else{logger[_0xe032('0xd')](_0xe032('0x47'),getLogFromObject(_0x3970e1));return null;}}else{logger[_0xe032('0xd')]('agicommand\x20not\x20found');return null;}}catch(_0x535f34){logger[_0xe032('0xd')](_0x535f34['stack']);return null;}});if(_0x9d3199[_0xe032('0x4c')]){logger[_0xe032('0x12')](util[_0xe032('0x13')](_0xe032('0x4d'),_0x53df28[_0xe032('0x19')],_0x53df28[_0xe032('0x1a')],_0x53df28[_0xe032('0x1b')],_0x53df28[_0xe032('0x1c')],_0x53df28[_0xe032('0x1d')]));_0x4b0b21['traverseBFS'](_0x9d3199[_0xe032('0x4c')]['id'],function(_0x565e8e){try{_0x565e8e=_0x2c1ec0['clear'](_0x565e8e);logger[_0xe032('0x35')](_0xe032('0x4e'),JSON[_0xe032('0x36')](_0x565e8e,null,0x2));if(_0x565e8e&&_0x2c1ec0[_0x565e8e[_0xe032('0x42')]]){_0x3970e1=_0x2c1ec0[_0x565e8e['agicommand']](_0x565e8e);if(_0x3970e1){logger[_0xe032('0x35')](_0xe032('0x47'),getLogFromObject(_0x3970e1));return _[_0xe032('0x4a')](_0x3970e1[_0xe032('0x49')])?null:_0x3970e1[_0xe032('0x49')][_0xe032('0x4b')]();}else{logger[_0xe032('0xd')]('response',getLogFromObject(_0x3970e1));return null;}}else{logger[_0xe032('0xd')](_0xe032('0x4f'));return null;}}catch(_0x538150){logger[_0xe032('0xd')](_0x538150[_0xe032('0xe')]);return null;}});}logger[_0xe032('0x12')](util[_0xe032('0x13')](_0xe032('0x50'),_0x53df28[_0xe032('0x19')],_0x53df28[_0xe032('0x1a')],_0x53df28[_0xe032('0x1b')],_0x53df28[_0xe032('0x1c')],_0x53df28[_0xe032('0x1d')]));logger[_0xe032('0x12')](util[_0xe032('0x13')](_0xe032('0x51'),_0x53df28[_0xe032('0x44')],_0x53df28['extension'],parseInt(_0x53df28[_0xe032('0x46')],0xa)+0x1));_0x53df28['continueAt'](_0x53df28[_0xe032('0x44')],_0x53df28[_0xe032('0x45')],parseInt(_0x53df28[_0xe032('0x46')],0xa)+0x1);_0x53df28[_0xe032('0x38')]();}}else{logger[_0xe032('0xd')](util[_0xe032('0x13')](_0xe032('0x52'),_0x53df28[_0xe032('0x19')]));_0x53df28[_0xe032('0x53')](_0x53df28[_0xe032('0x44')],_0x53df28[_0xe032('0x45')],parseInt(_0x53df28['priority'],0xa)+0x1);_0x53df28[_0xe032('0x38')]();}}else{logger[_0xe032('0xd')](util['format'](_0xe032('0x54'),_0x53df28['arg_1']));_0x53df28[_0xe032('0x53')](_0x53df28[_0xe032('0x44')],_0x53df28[_0xe032('0x45')],parseInt(_0x53df28[_0xe032('0x46')],0xa)+0x1);_0x53df28[_0xe032('0x38')]();}}function main(){var _0x5f11f9;return utilLicense[_0xe032('0x55')]()[_0xe032('0x2f')](function(_0x1e1277){if(_0x1e1277){if(_0x1e1277[_0xe032('0x56')]){if(_0x1e1277[_0xe032('0x57')]&&_0x1e1277[_0xe032('0x57')]>0x0){logger[_0xe032('0x12')](util['format'](_0xe032('0x58'),_0x1e1277[_0xe032('0x57')]));_0x5f11f9=_0x1e1277[_0xe032('0x57')];}else{logger[_0xe032('0x12')](_0xe032('0x59'));}}else{logger[_0xe032('0x12')](_0xe032('0x5a'));_0x5f11f9=-0x1;}}})[_0xe032('0x30')](function(_0x80d181){logger['error'](_0xe032('0x5b'),_0x80d181[_0xe032('0xe')]);})[_0xe032('0x4c')](function(){var _0x560e26=require(_0xe032('0x5c'))(config[_0xe032('0x4')]['port'],config[_0xe032('0x4')]['ip'],_0x5f11f9);_0x560e26['on'](_0xe032('0xd'),errorHandler);_0x560e26['on'](_0xe032('0x5d'),listeningHandler);_0x560e26['on'](_0xe032('0x5e'),connectionHandler);_0x560e26['on'](_0xe032('0x38'),closeHandler);});}main();
\ No newline at end of file
+var _0x4074=['callerid','dnid','uniqueid','[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','calleridname','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','evtHangup','toJson','mxGraphModel','agicommand','hasOwnProperty','maxRetry','addVertex','mxCell','isArray','source','target','addEdge','value','catch','createSquareReport','then','indexOf','agi_','inspect','debug','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','close','timeout','hangup','sync','production','start','stringify','joinAt','YYYY-MM-DD\x20HH:mm:ss','omit','clear','vertex','gotoc','gotoc\x20block\x20stop\x20traverse\x20BFS','context','extension','priority','response','result','isUndefined','toString','agicommand\x20not\x20found','finally','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','traverseBFS','[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','getLicense','voice','callysquare','[LICENSE]\x20CHANNELS:\x20%s','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]\x20VOICE\x20IS\x20DISABLED','[LICENSE]','./server','connection','xml2json','lodash','syncho','moment','../../config/environment','../../config/logger','agi','../../config/license/util','./rpc','./mailRpc','./graph','./vertices','nextTick','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','port','info','format','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','name','error','[ERROR]\x20%s','stack','[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','arg_1'];(function(_0x2dbce7,_0x57cb8d){var _0x3a3ed0=function(_0x28c8c6){while(--_0x28c8c6){_0x2dbce7['push'](_0x2dbce7['shift']());}};_0x3a3ed0(++_0x57cb8d);}(_0x4074,0xf0));var _0x4407=function(_0x3a9179,_0xa3930b){_0x3a9179=_0x3a9179-0x0;var _0x43b2fe=_0x4074[_0x3a9179];return _0x43b2fe;};'use strict';var parser=require(_0x4407('0x0'));var _=require(_0x4407('0x1'));var syncho=require(_0x4407('0x2'));var util=require('util');var moment=require(_0x4407('0x3'));var config=require(_0x4407('0x4'));var logger=require(_0x4407('0x5'))(_0x4407('0x6'));var utilLicense=require(_0x4407('0x7'));var rpc=require(_0x4407('0x8'));var mailRpc=require(_0x4407('0x9'));var Graph=require(_0x4407('0xa'));var Vertices=require(_0x4407('0xb'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0x4407('0x6')]=_['defaults'](config[_0x4407('0x6')],{'ip':'127.0.0.1','port':0x11dd});function connectionHandler(_0x414f0a){process[_0x4407('0xc')](function(){syncho(function(){try{setChannelVariables(_0x414f0a);agiHandler(_0x414f0a);}catch(_0x450cd4){logger['error'](_0x450cd4['stack']);}});});}function listeningHandler(){console['log'](_0x4407('0xd'),config[_0x4407('0x6')][_0x4407('0xe')]);logger[_0x4407('0xf')](util[_0x4407('0x10')](_0x4407('0x11'),config[_0x4407('0x6')]['ip'],config[_0x4407('0x6')][_0x4407('0xe')]));}function errorHandler(_0x332243){if(_0x332243&&_0x332243[_0x4407('0x12')]&&_0x332243['message']){logger[_0x4407('0x13')](util[_0x4407('0x10')]('[%s]\x20%s',_0x332243[_0x4407('0x12')],_0x332243['message']));}else{logger[_0x4407('0x13')](util[_0x4407('0x10')](_0x4407('0x14'),_0x332243[_0x4407('0x15')]));}}function closeHandler(){logger[_0x4407('0xf')](util[_0x4407('0x10')](_0x4407('0x16'),this[_0x4407('0x17')],this['calleridname'],this[_0x4407('0x18')],this[_0x4407('0x19')],this[_0x4407('0x1a')]));try{createSquareReport(this);}catch(_0x367d55){logger[_0x4407('0x13')](_0x367d55['stack']);}}function timeoutHandler(){logger[_0x4407('0xf')](util['format'](_0x4407('0x1b'),this[_0x4407('0x17')],this[_0x4407('0x1c')],this[_0x4407('0x18')],this[_0x4407('0x19')],this['uniqueid']));}function hangupHandler(){logger[_0x4407('0xf')](util['format'](_0x4407('0x1d'),this[_0x4407('0x17')],this[_0x4407('0x1c')],this[_0x4407('0x18')],this['dnid'],this[_0x4407('0x1a')]));this[_0x4407('0x1e')]=!![];}function getRoot(_0x137f8e){return parser[_0x4407('0x1f')](_0x137f8e,{'object':!![]})[_0x4407('0x20')]['root'];}function addVertex(_0xa7265d,_0x16272f,_0x5e214c){_0x16272f[_0x4407('0x21')]=_0x5e214c;if(_0x16272f[_0x4407('0x22')]('retry')){_0x16272f[_0x4407('0x23')]=parseInt(_0x16272f['retry'],0xa);}_0xa7265d[_0x4407('0x24')](_['omit'](_0x16272f,_0x4407('0x25')));}function initGraph(_0x582351,_0x374754){var _0x4bf227=new Graph();for(var _0x57ba27 in _0x582351){if(_0x582351[_0x4407('0x22')](_0x57ba27)){if(_[_0x4407('0x26')](_0x582351[_0x57ba27])){for(var _0x21d94e=0x0;_0x21d94e<_0x582351[_0x57ba27]['length'];_0x21d94e+=0x1){addVertex(_0x4bf227,_0x582351[_0x57ba27][_0x21d94e],_0x57ba27);}}else{addVertex(_0x4bf227,_0x582351[_0x57ba27],_0x57ba27);}}}for(var _0x520066=0x0;_0x520066<_0x374754['length'];_0x520066+=0x1){if(_0x374754[_0x520066][_0x4407('0x27')]&&_0x374754[_0x520066][_0x4407('0x28')]){_0x4bf227[_0x4407('0x29')](_0x374754[_0x520066][_0x4407('0x27')],_0x374754[_0x520066][_0x4407('0x28')],_0x374754[_0x520066][_0x4407('0x2a')]);}}return _0x4bf227;}function getSquareProject(_0x182bd9,_0x4d97af){rpc['getSquareProject'](_0x182bd9)['then'](function(_0x28e99e){_0x4d97af(null,_0x28e99e);})[_0x4407('0x2b')](function(_0x357a7c){_0x4d97af(null,_0x357a7c);});}function createSquareReport(_0x3e9460,_0x3e08a7){rpc[_0x4407('0x2c')](_0x3e9460)[_0x4407('0x2d')](function(_0x2fdb8e){if(_0x3e08a7){_0x3e08a7(null,_0x2fdb8e);}})[_0x4407('0x2b')](function(_0x12de0d){if(_0x3e08a7){_0x3e08a7(null,_0x12de0d);}});}function setChannelVariables(_0x55b149){for(var _0x5e2284 in _0x55b149){if(_0x55b149[_0x4407('0x22')](_0x5e2284)){if(_0x5e2284[_0x4407('0x2e')](_0x4407('0x2f'))===0x0){_0x55b149[_0x5e2284['substring'](0x4)]=_0x55b149[_0x5e2284];delete _0x55b149[_0x5e2284];}}}}function getLogFromObject(_0x1eaf7b){return util[_0x4407('0x30')](_0x1eaf7b,{'showHidden':![],'depth':null});}function agiHandler(_0x35cb0b){var _0x4268e3,_0x1658c2,_0x530314,_0x248d19,_0x5a4a63;logger[_0x4407('0x31')]('variables',JSON['stringify'](_0x35cb0b,null,0x2));logger[_0x4407('0xf')](util[_0x4407('0x10')](_0x4407('0x32'),_0x35cb0b[_0x4407('0x17')],_0x35cb0b[_0x4407('0x1c')],_0x35cb0b[_0x4407('0x18')],_0x35cb0b[_0x4407('0x19')],_0x35cb0b['uniqueid']));_0x35cb0b['on'](_0x4407('0x13'),errorHandler);_0x35cb0b['on'](_0x4407('0x33'),closeHandler);_0x35cb0b['on'](_0x4407('0x34'),timeoutHandler);_0x35cb0b[_0x4407('0x1e')]=![];_0x35cb0b['on'](_0x4407('0x35'),hangupHandler);var _0x4b314e=getSquareProject[_0x4407('0x36')](null,_0x35cb0b['arg_1']);if(_0x4b314e){if(_0x4b314e[_0x4407('0x37')]){_0x4268e3=getRoot(_0x4b314e[_0x4407('0x37')]);if(_0x4268e3&&_0x4268e3[_0x4407('0x38')]){logger[_0x4407('0x31')]('root',JSON[_0x4407('0x39')](_0x4268e3,null,0x2));_0x35cb0b[_0x4407('0x3a')]=moment()[_0x4407('0x10')](_0x4407('0x3b'));_0x1658c2=initGraph(_[_0x4407('0x3c')](_0x4268e3,_0x4407('0x25')),_0x4268e3[_0x4407('0x25')]);_0x530314=new Vertices(_0x35cb0b,rpc,mailRpc);logger[_0x4407('0xf')](util[_0x4407('0x10')]('[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',_0x35cb0b['arg_1'],_0x35cb0b[_0x4407('0x1c')],_0x35cb0b[_0x4407('0x18')],_0x35cb0b[_0x4407('0x19')],_0x35cb0b[_0x4407('0x1a')]));_0x1658c2['traverseBFS'](_0x4268e3[_0x4407('0x38')]['id'],function(_0x2cb65e){try{_0x2cb65e=_0x530314[_0x4407('0x3d')](_0x2cb65e);logger['debug'](_0x4407('0x3e'),JSON['stringify'](_0x2cb65e,null,0x2));if(_0x2cb65e['agicommand']===_0x4407('0x3f')){logger[_0x4407('0xf')](_0x4407('0x40'));_0x35cb0b[_0x4407('0x41')]=_0x2cb65e[_0x4407('0x41')]||_0x35cb0b['context'];_0x35cb0b[_0x4407('0x42')]=_0x2cb65e[_0x4407('0x42')];_0x35cb0b[_0x4407('0x43')]=_0x2cb65e[_0x4407('0x43')]?_0x2cb65e['priority']-0x1:0x1;return null;}else if(_0x2cb65e&&_0x530314[_0x2cb65e[_0x4407('0x21')]]){_0x5a4a63=_0x530314[_0x2cb65e[_0x4407('0x21')]](_0x2cb65e);logger[_0x4407('0xf')](_0x4407('0x44'),JSON[_0x4407('0x39')](_0x5a4a63,null,0x2));if(_0x5a4a63&&_0x5a4a63['code']===AGI_CODE_SUCCESS&&_0x5a4a63[_0x4407('0x45')]!==AGI_RESULT_ERROR&&!_0x35cb0b['evtHangup']){logger['debug'](_0x4407('0x44'),getLogFromObject(_0x5a4a63));return _[_0x4407('0x46')](_0x5a4a63['result'])?null:_0x5a4a63[_0x4407('0x45')][_0x4407('0x47')]();}else{logger[_0x4407('0x13')](_0x4407('0x44'),getLogFromObject(_0x5a4a63));return null;}}else{logger['error'](_0x4407('0x48'));return null;}}catch(_0x11e7ec){logger[_0x4407('0x13')](_0x11e7ec[_0x4407('0x15')]);return null;}});if(_0x4268e3[_0x4407('0x49')]){logger['info'](util[_0x4407('0x10')](_0x4407('0x4a'),_0x35cb0b[_0x4407('0x17')],_0x35cb0b[_0x4407('0x1c')],_0x35cb0b[_0x4407('0x18')],_0x35cb0b['dnid'],_0x35cb0b[_0x4407('0x1a')]));_0x1658c2[_0x4407('0x4b')](_0x4268e3[_0x4407('0x49')]['id'],function(_0x3830a1){try{_0x3830a1=_0x530314['clear'](_0x3830a1);logger[_0x4407('0x31')](_0x4407('0x3e'),JSON['stringify'](_0x3830a1,null,0x2));if(_0x3830a1&&_0x530314[_0x3830a1[_0x4407('0x21')]]){_0x5a4a63=_0x530314[_0x3830a1[_0x4407('0x21')]](_0x3830a1);if(_0x5a4a63){logger['debug'](_0x4407('0x44'),getLogFromObject(_0x5a4a63));return _[_0x4407('0x46')](_0x5a4a63[_0x4407('0x45')])?null:_0x5a4a63['result'][_0x4407('0x47')]();}else{logger['error']('response',getLogFromObject(_0x5a4a63));return null;}}else{logger[_0x4407('0x13')](_0x4407('0x48'));return null;}}catch(_0x5f3ad6){logger[_0x4407('0x13')](_0x5f3ad6[_0x4407('0x15')]);return null;}});}logger[_0x4407('0xf')](util[_0x4407('0x10')](_0x4407('0x4c'),_0x35cb0b['arg_1'],_0x35cb0b[_0x4407('0x1c')],_0x35cb0b[_0x4407('0x18')],_0x35cb0b[_0x4407('0x19')],_0x35cb0b[_0x4407('0x1a')]));logger[_0x4407('0xf')](util[_0x4407('0x10')](_0x4407('0x4d'),_0x35cb0b[_0x4407('0x41')],_0x35cb0b[_0x4407('0x42')],parseInt(_0x35cb0b['priority'],0xa)+0x1));_0x35cb0b[_0x4407('0x4e')](_0x35cb0b['context'],_0x35cb0b[_0x4407('0x42')],parseInt(_0x35cb0b[_0x4407('0x43')],0xa)+0x1);_0x35cb0b[_0x4407('0x33')]();}}else{logger[_0x4407('0x13')](util['format']('Project\x20%s\x20not\x20published',_0x35cb0b['arg_1']));_0x35cb0b[_0x4407('0x4e')](_0x35cb0b[_0x4407('0x41')],_0x35cb0b['extension'],parseInt(_0x35cb0b[_0x4407('0x43')],0xa)+0x1);_0x35cb0b[_0x4407('0x33')]();}}else{logger[_0x4407('0x13')](util[_0x4407('0x10')]('Project\x20%s\x20not\x20found',_0x35cb0b[_0x4407('0x17')]));_0x35cb0b[_0x4407('0x4e')](_0x35cb0b['context'],_0x35cb0b[_0x4407('0x42')],parseInt(_0x35cb0b[_0x4407('0x43')],0xa)+0x1);_0x35cb0b[_0x4407('0x33')]();}}function main(){var _0x5736aa;return utilLicense[_0x4407('0x4f')]()[_0x4407('0x2d')](function(_0x766e30){if(_0x766e30){if(_0x766e30[_0x4407('0x50')]){if(_0x766e30[_0x4407('0x51')]&&_0x766e30[_0x4407('0x51')]>0x0){logger['info'](util[_0x4407('0x10')](_0x4407('0x52'),_0x766e30[_0x4407('0x51')]));_0x5736aa=_0x766e30['callysquare'];}else{logger[_0x4407('0xf')](_0x4407('0x53'));}}else{logger[_0x4407('0xf')](_0x4407('0x54'));_0x5736aa=-0x1;}}})['catch'](function(_0x2a17d4){logger['error'](_0x4407('0x55'),_0x2a17d4[_0x4407('0x15')]);})[_0x4407('0x49')](function(){var _0x1b20bc=require(_0x4407('0x56'))(config[_0x4407('0x6')][_0x4407('0xe')],config['agi']['ip'],_0x5736aa);_0x1b20bc['on'](_0x4407('0x13'),errorHandler);_0x1b20bc['on']('listening',listeningHandler);_0x1b20bc['on'](_0x4407('0x57'),connectionHandler);_0x1b20bc['on'](_0x4407('0x33'),closeHandler);});}main();
\ No newline at end of file
index 57b7e54..ce7b760 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(_0x5d8478,_0x109b87){var _0x37f808=function(_0x48f2fe){while(--_0x48f2fe){_0x5d8478['push'](_0x5d8478['shift']());}};_0x37f808(++_0x109b87);}(_0x814b,0x1a2));var _0xb814=function(_0x326d35,_0x4f65b3){_0x326d35=_0x326d35-0x0;var _0xd3f8f3=_0x814b[_0x326d35];return _0xd3f8f3;};'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(_0x3679bf,_0x1f2089){var _0x34c321=function(_0x2b4bbf){while(--_0x2b4bbf){_0x3679bf['push'](_0x3679bf['shift']());}};_0x34c321(++_0x1f2089);}(_0x9957,0x93));var _0x7995=function(_0x618414,_0x1a7a60){_0x618414=_0x618414-0x0;var _0x21c19a=_0x9957[_0x618414];return _0x21c19a;};'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 5c04405..8e176fb 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(_0x1a9c75,_0xa83750){var _0xb2f37e=function(_0x2b90f6){while(--_0x2b90f6){_0x1a9c75['push'](_0x1a9c75['shift']());}};_0xb2f37e(++_0xa83750);}(_0x5f2f,0x73));var _0xf5f2=function(_0x39ac40,_0x1b0147){_0x39ac40=_0x39ac40-0x0;var _0xca35ad=_0x5f2f[_0x39ac40];return _0xca35ad;};'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 _0x5f2f=['exports','util','stream','Transform','call','_localBuffer','_inBody','inherits','\x0d\x0a\x0d\x0a','toString','substring','length','split','slice','trim','headers','indexOf','emit','line'];(function(_0x21c6b8,_0x16d6f6){var _0x39d474=function(_0x27dbf5){while(--_0x27dbf5){_0x21c6b8['push'](_0x21c6b8['shift']());}};_0x39d474(++_0x16d6f6);}(_0x5f2f,0x73));var _0xf5f2=function(_0x49100c,_0x4a5345){_0x49100c=_0x49100c-0x0;var _0x173091=_0x5f2f[_0x49100c];return _0x173091;};'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
index 68db890..2d17a14 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf79b=['LogoutUser','moment','lodash','jayson/promise','client','http','request','then','error','result','catch','getSquareProject','ShowSquareProject','getMailAccountById','MailServerOut','Smtp','name','email','getSquareProjectById','getVoiceQueueById','ShowVoiceQueue','getVariableById','getSquareOdbcById','ShowSquareOdbc','getTrunkById','getSoundById','save_name','getIntervalById','ShowInterval','Interval','Intervals','getSmsAccountById','ShowSmsAccount','createSmsMessage','CreateSmsMessage','createSquareDetailsReport','CreateSquareReport','arg_2','format','YYYY-MM-DD\x20HH:mm:ss','createSquareRecording','CreateSquareRecording','phone','ListId','getPauseById','ShowPause','agentLogin','LoginUser','agentPause','PauseUser','agentUnpause','UnpauseUser','agentLogout'];(function(_0x43d11d,_0xccff91){var _0x38cd08=function(_0x131ae2){while(--_0x131ae2){_0x43d11d['push'](_0x43d11d['shift']());}};_0x38cd08(++_0xccff91);}(_0xf79b,0xa0));var _0xbf79=function(_0x1e221a,_0x14fa0c){_0x1e221a=_0x1e221a-0x0;var _0x2acee4=_0xf79b[_0x1e221a];return _0x2acee4;};'use strict';var BPromise=require('bluebird');var moment=require(_0xbf79('0x0'));var _=require(_0xbf79('0x1'));var util=require('util');var jayson=require(_0xbf79('0x2'));var client=jayson[_0xbf79('0x3')][_0xbf79('0x4')]({'port':0x2329});function request(_0x5397bb,_0x469763){return new BPromise(function(_0x3ef1bb,_0x238ca0){return client[_0xbf79('0x5')](_0x5397bb,_0x469763)[_0xbf79('0x6')](function(_0x2731ea){if(_0x2731ea[_0xbf79('0x7')]){return _0x238ca0(_0x2731ea[_0xbf79('0x7')]['message']);}else{return _0x3ef1bb(_0x2731ea[_0xbf79('0x8')]);}})[_0xbf79('0x9')](function(_0x5291b3){return _0x238ca0(_0x5291b3);});});}exports[_0xbf79('0xa')]=function(_0x4e84b3){return request(_0xbf79('0xb'),{'options':{'raw':![],'where':{'name':_0x4e84b3},'attributes':['production']}});};exports[_0xbf79('0xc')]=function(_0x53ca23){return request('ShowMailAccount',{'options':{'raw':![],'where':{'id':_0x53ca23},'include':[{'model':_0xbf79('0xd'),'as':_0xbf79('0xe')}],'attributes':['id',_0xbf79('0xf'),_0xbf79('0x10')]}});};exports[_0xbf79('0x11')]=function(_0x343ddc){return request(_0xbf79('0xb'),{'options':{'where':{'id':_0x343ddc},'attributes':[_0xbf79('0xf')]}});};exports[_0xbf79('0x12')]=function(_0xa36c06){return request(_0xbf79('0x13'),{'options':{'where':{'id':_0xa36c06},'attributes':[_0xbf79('0xf')]}});};exports[_0xbf79('0x14')]=function(_0x26ea5f){return request('ShowVariable',{'options':{'where':{'id':_0x26ea5f},'attributes':[_0xbf79('0xf')]}});};exports[_0xbf79('0x15')]=function(_0x2f4e55){return request(_0xbf79('0x16'),{'options':{'where':{'id':_0x2f4e55},'attributes':['dsn']}});};exports['getUserById']=function(_0x27c409){return request('ShowUser',{'options':{'where':{'id':_0x27c409},'attributes':[_0xbf79('0xf')]}});};exports[_0xbf79('0x17')]=function(_0x37e28b){return request('ShowTrunk',{'options':{'where':{'id':_0x37e28b},'attributes':[_0xbf79('0xf')]}});};exports[_0xbf79('0x18')]=function(_0x2bcd3a){return request('ShowSound',{'options':{'where':{'id':_0x2bcd3a},'attributes':[_0xbf79('0x19')]}});};exports[_0xbf79('0x1a')]=function(_0x169a2d){return request(_0xbf79('0x1b'),{'options':{'raw':![],'where':{'id':_0x169a2d},'include':[{'model':_0xbf79('0x1c'),'as':_0xbf79('0x1d')}]}});};exports[_0xbf79('0x1e')]=function(_0xf36665){return request(_0xbf79('0x1f'),{'options':{'where':{'id':_0xf36665},'attributes':['id',_0xbf79('0xf')]}});};exports[_0xbf79('0x20')]=function(_0x5a122a){return request(_0xbf79('0x21'),{'body':_0x5a122a});};exports[_0xbf79('0x22')]=function(_0x10e8e9){return request('CreateSquareDetailsReport',{'body':_0x10e8e9});};exports['createSquareReport']=function(_0x205955){return request(_0xbf79('0x23'),{'body':_['merge'](_0x205955,{'project_name':_0x205955['arg_1'],'prev_project_name':_0x205955[_0xbf79('0x24')]||'','is_subproject':_0x205955['arg_2']?!![]:![],'leaveAt':moment()[_0xbf79('0x25')](_0xbf79('0x26'))})});};exports[_0xbf79('0x27')]=function(_0x143e96){return request(_0xbf79('0x28'),{'body':_0x143e96});};exports['createSquareMessage']=function(_0x3c3213){return request('CreateSquareMessage',{'body':_0x3c3213});};exports['createCmContact']=function(_0x36f889){return request('ShowCmHopper',{'options':{'raw':![],'where':{'phone':_0x36f889[_0xbf79('0x29')],'ListId':_0x36f889[_0xbf79('0x2a')]}}})['then'](function(_0x2f40ba){if(_0x2f40ba){return _0x2f40ba;}return request('CreateCmContact',{'body':_0x36f889});});};exports[_0xbf79('0x2b')]=function(_0x320f6e){return request(_0xbf79('0x2c'),{'options':{'where':{'id':_0x320f6e},'attributes':[_0xbf79('0xf')]}});};exports[_0xbf79('0x2d')]=function(_0x5dba78,_0x5e11ad){return request(_0xbf79('0x2e'),{'body':{'interface':_0x5e11ad},'options':{'where':_0x5dba78}});};exports[_0xbf79('0x2f')]=function(_0x2bbf5c,_0x5d26eb,_0x5aab24){return request(_0xbf79('0x30'),{'body':{'type':_0x5d26eb,'uniqueid':_0x5aab24},'options':{'where':_0x2bbf5c}});};exports[_0xbf79('0x31')]=function(_0x34b4a4){return request(_0xbf79('0x32'),{'body':{},'options':{'where':_0x34b4a4}});};exports[_0xbf79('0x33')]=function(_0x2d0575){return request(_0xbf79('0x34'),{'body':{},'options':{'where':_0x2d0575}});};
\ No newline at end of file
+var _0xd0e4=['getSquareOdbcById','ShowSquareOdbc','getUserById','ShowUser','getTrunkById','ShowTrunk','getSoundById','ShowSound','getIntervalById','ShowInterval','Interval','Intervals','getSmsAccountById','ShowSmsAccount','createSmsMessage','CreateSquareDetailsReport','CreateSquareReport','merge','arg_1','arg_2','format','YYYY-MM-DD\x20HH:mm:ss','createSquareRecording','createSquareMessage','CreateSquareMessage','createCmContact','phone','ListId','ShowPause','agentLogin','LoginUser','PauseUser','agentUnpause','UnpauseUser','agentLogout','bluebird','moment','lodash','util','http','error','result','catch','production','getMailAccountById','MailServerOut','Smtp','getSquareProjectById','ShowSquareProject','name','getVoiceQueueById','ShowVoiceQueue','getVariableById','ShowVariable'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xd0e4,0x1d3));var _0x4d0e=function(_0xbd1aeb,_0x3f04b0){_0xbd1aeb=_0xbd1aeb-0x0;var _0x55b1be=_0xd0e4[_0xbd1aeb];return _0x55b1be;};'use strict';var BPromise=require(_0x4d0e('0x0'));var moment=require(_0x4d0e('0x1'));var _=require(_0x4d0e('0x2'));var util=require(_0x4d0e('0x3'));var jayson=require('jayson/promise');var client=jayson['client'][_0x4d0e('0x4')]({'port':0x2329});function request(_0x2b54b2,_0x2cec7b){return new BPromise(function(_0x2ab34b,_0x391bd2){return client['request'](_0x2b54b2,_0x2cec7b)['then'](function(_0x5be772){if(_0x5be772[_0x4d0e('0x5')]){return _0x391bd2(_0x5be772[_0x4d0e('0x5')]['message']);}else{return _0x2ab34b(_0x5be772[_0x4d0e('0x6')]);}})[_0x4d0e('0x7')](function(_0x4e7630){return _0x391bd2(_0x4e7630);});});}exports['getSquareProject']=function(_0x9358f5){return request('ShowSquareProject',{'options':{'raw':![],'where':{'name':_0x9358f5},'attributes':[_0x4d0e('0x8')]}});};exports[_0x4d0e('0x9')]=function(_0x3f7674){return request('ShowMailAccount',{'options':{'raw':![],'where':{'id':_0x3f7674},'include':[{'model':_0x4d0e('0xa'),'as':_0x4d0e('0xb')}],'attributes':['id','name','email']}});};exports[_0x4d0e('0xc')]=function(_0x345df2){return request(_0x4d0e('0xd'),{'options':{'where':{'id':_0x345df2},'attributes':[_0x4d0e('0xe')]}});};exports[_0x4d0e('0xf')]=function(_0x303c8e){return request(_0x4d0e('0x10'),{'options':{'where':{'id':_0x303c8e},'attributes':[_0x4d0e('0xe')]}});};exports[_0x4d0e('0x11')]=function(_0x4fcf8d){return request(_0x4d0e('0x12'),{'options':{'where':{'id':_0x4fcf8d},'attributes':[_0x4d0e('0xe')]}});};exports[_0x4d0e('0x13')]=function(_0x53d5d1){return request(_0x4d0e('0x14'),{'options':{'where':{'id':_0x53d5d1},'attributes':['dsn']}});};exports[_0x4d0e('0x15')]=function(_0x3224cc){return request(_0x4d0e('0x16'),{'options':{'where':{'id':_0x3224cc},'attributes':[_0x4d0e('0xe')]}});};exports[_0x4d0e('0x17')]=function(_0x2ee85a){return request(_0x4d0e('0x18'),{'options':{'where':{'id':_0x2ee85a},'attributes':['name']}});};exports[_0x4d0e('0x19')]=function(_0x2ea57f){return request(_0x4d0e('0x1a'),{'options':{'where':{'id':_0x2ea57f},'attributes':['save_name']}});};exports[_0x4d0e('0x1b')]=function(_0x2846d1){return request(_0x4d0e('0x1c'),{'options':{'raw':![],'where':{'id':_0x2846d1},'include':[{'model':_0x4d0e('0x1d'),'as':_0x4d0e('0x1e')}]}});};exports[_0x4d0e('0x1f')]=function(_0x3dc65b){return request(_0x4d0e('0x20'),{'options':{'where':{'id':_0x3dc65b},'attributes':['id',_0x4d0e('0xe')]}});};exports[_0x4d0e('0x21')]=function(_0x40f326){return request('CreateSmsMessage',{'body':_0x40f326});};exports['createSquareDetailsReport']=function(_0x18ecb5){return request(_0x4d0e('0x22'),{'body':_0x18ecb5});};exports['createSquareReport']=function(_0x5ac296){return request(_0x4d0e('0x23'),{'body':_[_0x4d0e('0x24')](_0x5ac296,{'project_name':_0x5ac296[_0x4d0e('0x25')],'prev_project_name':_0x5ac296[_0x4d0e('0x26')]||'','is_subproject':_0x5ac296[_0x4d0e('0x26')]?!![]:![],'leaveAt':moment()[_0x4d0e('0x27')](_0x4d0e('0x28'))})});};exports[_0x4d0e('0x29')]=function(_0x3411dd){return request('CreateSquareRecording',{'body':_0x3411dd});};exports[_0x4d0e('0x2a')]=function(_0x23c176){return request(_0x4d0e('0x2b'),{'body':_0x23c176});};exports[_0x4d0e('0x2c')]=function(_0x25043b){return request('ShowCmHopper',{'options':{'raw':![],'where':{'phone':_0x25043b[_0x4d0e('0x2d')],'ListId':_0x25043b[_0x4d0e('0x2e')]}}})['then'](function(_0x31ecb1){if(_0x31ecb1){return _0x31ecb1;}return request('CreateCmContact',{'body':_0x25043b});});};exports['getPauseById']=function(_0x2127b4){return request(_0x4d0e('0x2f'),{'options':{'where':{'id':_0x2127b4},'attributes':[_0x4d0e('0xe')]}});};exports[_0x4d0e('0x30')]=function(_0x17f7c2,_0x7e551d){return request(_0x4d0e('0x31'),{'body':{'interface':_0x7e551d},'options':{'where':_0x17f7c2}});};exports['agentPause']=function(_0x474769,_0x488e21,_0x487249){return request(_0x4d0e('0x32'),{'body':{'type':_0x488e21,'uniqueid':_0x487249},'options':{'where':_0x474769}});};exports[_0x4d0e('0x33')]=function(_0x4165e2){return request(_0x4d0e('0x34'),{'body':{},'options':{'where':_0x4165e2}});};exports[_0x4d0e('0x35')]=function(_0x23ecba){return request('LogoutUser',{'body':{},'options':{'where':_0x23ecba}});};
\ No newline at end of file
index 7ba72a1..d81f33d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaec7=['./lex','./polly'];(function(_0x22868f,_0x450f48){var _0x97bc75=function(_0x447cb4){while(--_0x447cb4){_0x22868f['push'](_0x22868f['shift']());}};_0x97bc75(++_0x450f48);}(_0xaec7,0x9f));var _0x7aec=function(_0x256d6a,_0x2f002f){_0x256d6a=_0x256d6a-0x0;var _0x460058=_0xaec7[_0x256d6a];return _0x460058;};var polly=require(_0x7aec('0x0'));var lex=require(_0x7aec('0x1'));module['exports']={'polly':polly,'lex':lex};
\ No newline at end of file
+var _0x4a20=['./lex','./polly'];(function(_0x385a3f,_0x2a3ecd){var _0x159c86=function(_0x11816a){while(--_0x11816a){_0x385a3f['push'](_0x385a3f['shift']());}};_0x159c86(++_0x2a3ecd);}(_0x4a20,0x163));var _0x04a2=function(_0x3070dc,_0x40cf11){_0x3070dc=_0x3070dc-0x0;var _0x431489=_0x4a20[_0x3070dc];return _0x431489;};var polly=require(_0x04a2('0x0'));var lex=require(_0x04a2('0x1'));module['exports']={'polly':polly,'lex':lex};
\ No newline at end of file
index de5cf15..7e14b05 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdab2=['./lib/api','exports'];(function(_0xc10f32,_0x35891f){var _0xb9b4e7=function(_0x34f92f){while(--_0x34f92f){_0xc10f32['push'](_0xc10f32['shift']());}};_0xb9b4e7(++_0x35891f);}(_0xdab2,0x130));var _0x2dab=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xdab2[_0x3dd15e];return _0x231fd0;};'use strict';var lex=require(_0x2dab('0x0'));module[_0x2dab('0x1')]=function(_0x50addb,_0x475660,_0x2aa420,_0x37079c,_0x16ac06,_0x56a9cc){return lex(_0x50addb,_0x475660,_0x2aa420,_0x37079c,_0x16ac06,_0x56a9cc);};
\ No newline at end of file
+var _0xd845=['exports','./lib/api'];(function(_0x3de8d9,_0x9c1ff4){var _0x494bdf=function(_0x59d70a){while(--_0x59d70a){_0x3de8d9['push'](_0x3de8d9['shift']());}};_0x494bdf(++_0x9c1ff4);}(_0xd845,0x135));var _0x5d84=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0xd845[_0x19e35c];return _0x3e1fe8;};'use strict';var lex=require(_0x5d84('0x0'));module[_0x5d84('0x1')]=function(_0xc6e9bc,_0x26c82e,_0x59cdf4,_0x137388,_0xcb72c0,_0x918317){return lex(_0xc6e9bc,_0x26c82e,_0x59cdf4,_0x137388,_0xcb72c0,_0x918317);};
\ No newline at end of file
index ab26d96..70e5c55 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3ac=['slots','slot_','LexRuntime','bluebird'];(function(_0x1f5303,_0x354414){var _0x84ef1a=function(_0x27e275){while(--_0x27e275){_0x1f5303['push'](_0x1f5303['shift']());}};_0x84ef1a(++_0x354414);}(_0xc3ac,0xab));var _0xcc3a=function(_0x4ea5bf,_0x323a9a){_0x4ea5bf=_0x4ea5bf-0x0;var _0x14efb1=_0xc3ac[_0x4ea5bf];return _0x14efb1;};'use strict';var BPromise=require(_0xcc3a('0x0'));var AWS=require('aws-sdk');function lexResult(_0x17f804,_0x399200){return new BPromise(function(_0x44786d,_0x5d0877){_0x17f804['postText'](_0x399200,function(_0x588616,_0x3dc05b){if(_0x588616){_0x5d0877(_0x588616);}if(_0x3dc05b[_0xcc3a('0x1')]){for(const _0x4fa064 in _0x3dc05b['slots']){if(_0x3dc05b[_0xcc3a('0x1')]['hasOwnProperty'](_0x4fa064)){var _0x7f8316=_0x3dc05b[_0xcc3a('0x1')][_0x4fa064];_0x3dc05b[_0xcc3a('0x2')+_0x4fa064]=_0x7f8316;}}}_0x44786d(_0x3dc05b);});});}module['exports']=function(_0x5e76ee,_0x2388cd,_0x42ae03,_0x14dac0,_0x39bdde,_0x2dcf5b){var _0x44679f=new AWS[(_0xcc3a('0x3'))]({'accessKeyId':_0x2388cd,'secretAccessKey':_0x42ae03,'region':_0x14dac0});var _0x267d5a={'botAlias':'$LATEST','botName':_0x2dcf5b,'inputText':_0x39bdde,'userId':_0x5e76ee};return lexResult(_0x44679f,_0x267d5a);};
\ No newline at end of file
+var _0x06df=['slots','hasOwnProperty','slot_','exports','$LATEST','postText'];(function(_0x1dce4d,_0x1cfc79){var _0x52a081=function(_0x701adb){while(--_0x701adb){_0x1dce4d['push'](_0x1dce4d['shift']());}};_0x52a081(++_0x1cfc79);}(_0x06df,0x77));var _0xf06d=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x06df[_0x20a584];return _0x4b41a8;};'use strict';var BPromise=require('bluebird');var AWS=require('aws-sdk');function lexResult(_0xa9ff19,_0xb92415){return new BPromise(function(_0x1896b9,_0x278908){_0xa9ff19[_0xf06d('0x0')](_0xb92415,function(_0x376e9b,_0x5dc8f8){if(_0x376e9b){_0x278908(_0x376e9b);}if(_0x5dc8f8[_0xf06d('0x1')]){for(const _0x553ae0 in _0x5dc8f8[_0xf06d('0x1')]){if(_0x5dc8f8[_0xf06d('0x1')][_0xf06d('0x2')](_0x553ae0)){var _0x1f8e4=_0x5dc8f8[_0xf06d('0x1')][_0x553ae0];_0x5dc8f8[_0xf06d('0x3')+_0x553ae0]=_0x1f8e4;}}}_0x1896b9(_0x5dc8f8);});});}module[_0xf06d('0x4')]=function(_0x385789,_0x564f25,_0x4a8248,_0x5b5c07,_0x4dd4e9,_0x569271){var _0x3d0f9b=new AWS['LexRuntime']({'accessKeyId':_0x564f25,'secretAccessKey':_0x4a8248,'region':_0x5b5c07});var _0x339f70={'botAlias':_0xf06d('0x5'),'botName':_0x569271,'inputText':_0x4dd4e9,'userId':_0x385789};return lexResult(_0x3d0f9b,_0x339f70);};
\ No newline at end of file
index 11349a7..25b71bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbe1c=['exports'];(function(_0x5b0faa,_0x4e9e33){var _0x49ddf0=function(_0xeab27b){while(--_0xeab27b){_0x5b0faa['push'](_0x5b0faa['shift']());}};_0x49ddf0(++_0x4e9e33);}(_0xbe1c,0xbf));var _0xcbe1=function(_0xe99c61,_0x2be484){_0xe99c61=_0xe99c61-0x0;var _0x22eb35=_0xbe1c[_0xe99c61];return _0x22eb35;};'use strict';var polly=require('./lib/api');module[_0xcbe1('0x0')]=function(_0x643460,_0x16a9d4,_0x207ce3,_0x5cab70,_0x36c44a,_0x387341,_0x5c57e5){return polly(_0x643460,_0x16a9d4,_0x207ce3,_0x5cab70,_0x36c44a,_0x387341,_0x5c57e5);};
\ No newline at end of file
+'use strict';var polly=require('./lib/api');module['exports']=function(_0x108dae,_0x2e3644,_0x24ee48,_0x49637d,_0x31f677,_0x4c522f,_0x49da57){return polly(_0x108dae,_0x2e3644,_0x24ee48,_0x49637d,_0x31f677,_0x4c522f,_0x49da57);};
\ No newline at end of file
index 6f5e678..365625a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8231=['Invalid\x20data\x20response\x20from\x20aws\x20Polly!','No\x20data\x20response\x20from\x20aws\x20Polly!','exports','Polly','text','mp3','path','bluebird','synthesizeSpeech','AudioStream','writeFile'];(function(_0x4d80f6,_0x5e1712){var _0x4de7a9=function(_0x22de5a){while(--_0x22de5a){_0x4d80f6['push'](_0x4d80f6['shift']());}};_0x4de7a9(++_0x5e1712);}(_0x8231,0xed));var _0x1823=function(_0x5c529f,_0x211161){_0x5c529f=_0x5c529f-0x0;var _0x5aca96=_0x8231[_0x5c529f];return _0x5aca96;};'use strict';var fs=require('fs');var path=require(_0x1823('0x0'));var BPromise=require(_0x1823('0x1'));var rs=require('randomstring');var AWS=require('aws-sdk');function pollyResult(_0xb344ec,_0x5a272e,_0x2fb00c){return new BPromise(function(_0x4bcdb9,_0x427304){_0xb344ec[_0x1823('0x2')](_0x5a272e,function(_0x1251a4,_0x163d12){if(_0x1251a4){_0x427304(_0x1251a4);}else if(_0x163d12){if(_0x163d12[_0x1823('0x3')]instanceof Buffer){fs[_0x1823('0x4')](_0x2fb00c,_0x163d12['AudioStream'],function(_0x43fcf7){if(_0x43fcf7){_0x427304(_0x43fcf7);}else{_0x4bcdb9();}});}else{_0x427304(new Error(_0x1823('0x5')));}}else{_0x427304(new Error(_0x1823('0x6')));}});});}module[_0x1823('0x7')]=function(_0xfff219,_0x17c035,_0x4079c8,_0x530db6,_0x3391e9,_0xa1b06f,_0x30c9b9){var _0x3cd700=new AWS[(_0x1823('0x8'))]({'accessKeyId':_0xfff219,'secretAccessKey':_0x17c035,'region':_0x4079c8});var _0x2bfad3={'Text':_0x3391e9,'TextType':_0xa1b06f||_0x1823('0x9'),'OutputFormat':_0x1823('0xa'),'VoiceId':_0x530db6};return pollyResult(_0x3cd700,_0x2bfad3,_0x30c9b9);};
\ No newline at end of file
+var _0x5b36=['exports','text','mp3','bluebird','randomstring','aws-sdk','synthesizeSpeech','writeFile','AudioStream','Invalid\x20data\x20response\x20from\x20aws\x20Polly!','No\x20data\x20response\x20from\x20aws\x20Polly!'];(function(_0x5df0dd,_0x5dc9cb){var _0x42d212=function(_0x2a58b6){while(--_0x2a58b6){_0x5df0dd['push'](_0x5df0dd['shift']());}};_0x42d212(++_0x5dc9cb);}(_0x5b36,0x87));var _0x65b3=function(_0x26a001,_0xdb764b){_0x26a001=_0x26a001-0x0;var _0x305d9c=_0x5b36[_0x26a001];return _0x305d9c;};'use strict';var fs=require('fs');var path=require('path');var BPromise=require(_0x65b3('0x0'));var rs=require(_0x65b3('0x1'));var AWS=require(_0x65b3('0x2'));function pollyResult(_0x1221d2,_0x3f042b,_0x374ef3){return new BPromise(function(_0x18eb32,_0x4db921){_0x1221d2[_0x65b3('0x3')](_0x3f042b,function(_0xdfcb8c,_0x5ab3d2){if(_0xdfcb8c){_0x4db921(_0xdfcb8c);}else if(_0x5ab3d2){if(_0x5ab3d2['AudioStream']instanceof Buffer){fs[_0x65b3('0x4')](_0x374ef3,_0x5ab3d2[_0x65b3('0x5')],function(_0x270042){if(_0x270042){_0x4db921(_0x270042);}else{_0x18eb32();}});}else{_0x4db921(new Error(_0x65b3('0x6')));}}else{_0x4db921(new Error(_0x65b3('0x7')));}});});}module[_0x65b3('0x8')]=function(_0x3755d9,_0x5b6247,_0x17b521,_0x58c3cc,_0x4613da,_0x5b66f3,_0x207226){var _0xf1f5db=new AWS['Polly']({'accessKeyId':_0x3755d9,'secretAccessKey':_0x5b6247,'region':_0x17b521});var _0x24fa51={'Text':_0x4613da,'TextType':_0x5b66f3||_0x65b3('0x9'),'OutputFormat':_0x65b3('0xa'),'VoiceId':_0x58c3cc};return pollyResult(_0xf1f5db,_0x24fa51,_0x207226);};
\ No newline at end of file
index e0dfc63..0582727 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd7d1=['exports','./lib/api'];(function(_0x2ecec0,_0x3fe9cd){var _0x368a86=function(_0x439611){while(--_0x439611){_0x2ecec0['push'](_0x2ecec0['shift']());}};_0x368a86(++_0x3fe9cd);}(_0xd7d1,0x1b3));var _0x1d7d=function(_0x4c3b33,_0x206018){_0x4c3b33=_0x4c3b33-0x0;var _0x5bba1a=_0xd7d1[_0x4c3b33];return _0x5bba1a;};'use strict';var asr=require(_0x1d7d('0x0'));module[_0x1d7d('0x1')]=function(_0xce4540,_0x447083,_0x1d1926,_0x3c3a27){return asr(_0xce4540,_0x447083,_0x1d1926);};
\ No newline at end of file
+var _0x676c=['./lib/api','exports'];(function(_0xdcf15d,_0x14d817){var _0x45e283=function(_0x5eda26){while(--_0x5eda26){_0xdcf15d['push'](_0xdcf15d['shift']());}};_0x45e283(++_0x14d817);}(_0x676c,0x198));var _0xc676=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x676c[_0x3dd15e];return _0x231fd0;};'use strict';var asr=require(_0xc676('0x0'));module[_0xc676('0x1')]=function(_0xf31d2c,_0x55ab03,_0x37c5ec,_0xef9b5e){return asr(_0xf31d2c,_0x55ab03,_0x37c5ec);};
\ No newline at end of file
index fd04358..edc0348 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x76ab=['base64','POST','/v1/speech:recognize?key=','LINEAR16','8000','url','bluebird','https://speech.googleapis.com','exports','filepath\x20should\x20be\x20a\x20string','string','length','key\x20should\x20be\x20a\x20string','undefined','readFileSync'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x76ab,0x14f));var _0xb76a=function(_0x45c48f,_0x4aa891){_0x45c48f=_0x45c48f-0x0;var _0xaf5037=_0x76ab[_0x45c48f];return _0xaf5037;};'use strict';var url=require(_0xb76a('0x0'));var BPromise=require(_0xb76a('0x1'));var fs=require('fs');var host=_0xb76a('0x2');module[_0xb76a('0x3')]=function(_0x3e70ad,_0x1c1f61,_0x306992){return new BPromise(function(_0x402c66,_0x4dda91){var _0x3d4bce;if(typeof _0x3e70ad!=='string'||_0x3e70ad['length']===0x0){return _0x4dda91(_0xb76a('0x4'));}if(typeof _0x1c1f61!==_0xb76a('0x5')||_0x1c1f61[_0xb76a('0x6')]===0x0){return _0x4dda91(_0xb76a('0x7'));}if(typeof _0x306992!==_0xb76a('0x8')&&(typeof _0x306992!=='string'||_0x306992[_0xb76a('0x6')]===0x0)){return _0x4dda91('lang\x20should\x20be\x20a\x20string');}try{_0x3d4bce=fs[_0xb76a('0x9')](_0x3e70ad)['toString'](_0xb76a('0xa'));}catch(_0x53f373){return _0x4dda91(_0x53f373);}return _0x402c66({'method':_0xb76a('0xb'),'uri':host+_0xb76a('0xc')+_0x1c1f61,'body':{'config':{'encoding':_0xb76a('0xd'),'sampleRateHertz':_0xb76a('0xe'),'languageCode':_0x306992},'audio':{'content':_0x3d4bce}},'json':!![]});});};
\ No newline at end of file
+var _0xb189=['bluebird','https://speech.googleapis.com','filepath\x20should\x20be\x20a\x20string','string','length','key\x20should\x20be\x20a\x20string','undefined','readFileSync','toString','base64','/v1/speech:recognize?key=','8000'];(function(_0x126fb9,_0x122c59){var _0xc8a3b1=function(_0x355744){while(--_0x355744){_0x126fb9['push'](_0x126fb9['shift']());}};_0xc8a3b1(++_0x122c59);}(_0xb189,0x1a4));var _0x9b18=function(_0x20225a,_0x32e173){_0x20225a=_0x20225a-0x0;var _0x39792c=_0xb189[_0x20225a];return _0x39792c;};'use strict';var url=require('url');var BPromise=require(_0x9b18('0x0'));var fs=require('fs');var host=_0x9b18('0x1');module['exports']=function(_0x135e21,_0x3f7bc3,_0x982b8b){return new BPromise(function(_0x334287,_0x200d9c){var _0x4daea9;if(typeof _0x135e21!=='string'||_0x135e21['length']===0x0){return _0x200d9c(_0x9b18('0x2'));}if(typeof _0x3f7bc3!==_0x9b18('0x3')||_0x3f7bc3[_0x9b18('0x4')]===0x0){return _0x200d9c(_0x9b18('0x5'));}if(typeof _0x982b8b!==_0x9b18('0x6')&&(typeof _0x982b8b!==_0x9b18('0x3')||_0x982b8b[_0x9b18('0x4')]===0x0)){return _0x200d9c('lang\x20should\x20be\x20a\x20string');}try{_0x4daea9=fs[_0x9b18('0x7')](_0x135e21)[_0x9b18('0x8')](_0x9b18('0x9'));}catch(_0x2e3dfd){return _0x200d9c(_0x2e3dfd);}return _0x334287({'method':'POST','uri':host+_0x9b18('0xa')+_0x3f7bc3,'body':{'config':{'encoding':'LINEAR16','sampleRateHertz':_0x9b18('0xb'),'languageCode':_0x982b8b},'audio':{'content':_0x4daea9}},'json':!![]});});};
\ No newline at end of file
index 229ec9a..757968a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['./asr','exports'];(function(_0x1b73e3,_0x3282ea){var _0x3e10d9=function(_0x478cb5){while(--_0x478cb5){_0x1b73e3['push'](_0x1b73e3['shift']());}};_0x3e10d9(++_0x3282ea);}(_0x008c,0x188));var _0xc008=function(_0x3abdf8,_0x1d1aef){_0x3abdf8=_0x3abdf8-0x0;var _0xd62e3d=_0x008c[_0x3abdf8];return _0xd62e3d;};var asr=require(_0xc008('0x0'));module[_0xc008('0x1')]={'asr':asr};
\ No newline at end of file
+var _0x34e8=['./asr','exports'];(function(_0x25a42a,_0x3d489b){var _0x1129b1=function(_0x4ae61b){while(--_0x4ae61b){_0x25a42a['push'](_0x25a42a['shift']());}};_0x1129b1(++_0x3d489b);}(_0x34e8,0x12c));var _0x834e=function(_0x274dea,_0x344f07){_0x274dea=_0x274dea-0x0;var _0x1dc779=_0x34e8[_0x274dea];return _0x1dc779;};var asr=require(_0x834e('0x0'));module[_0x834e('0x1')]={'asr':asr};
\ No newline at end of file
index 3bce8b7..d5e8312 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(_0x263a04,_0x3e7cca){var _0x567158=function(_0x113400){while(--_0x113400){_0x263a04['push'](_0x263a04['shift']());}};_0x567158(++_0x3e7cca);}(_0xa9e0,0x123));var _0x0a9e=function(_0x21aec3,_0x5c97e9){_0x21aec3=_0x21aec3-0x0;var _0x288bbc=_0xa9e0[_0x21aec3];return _0x288bbc;};'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(_0x4d4679,_0x4705b7){var _0x4d6e97=function(_0x29759f){while(--_0x29759f){_0x4d4679['push'](_0x4d4679['shift']());}};_0x4d6e97(++_0x4705b7);}(_0xa9e0,0x123));var _0x0a9e=function(_0x32d457,_0x1a39c9){_0x32d457=_0x32d457-0x0;var _0x338386=_0xa9e0[_0x32d457];return _0x338386;};'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 296b742..01dbfe4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa380=['exports','./nda'];(function(_0x43459d,_0x146d6b){var _0x10168a=function(_0x264580){while(--_0x264580){_0x43459d['push'](_0x43459d['shift']());}};_0x10168a(++_0x146d6b);}(_0xa380,0x15f));var _0x0a38=function(_0x422ee7,_0x102d1e){_0x422ee7=_0x422ee7-0x0;var _0xd4701b=_0xa380[_0x422ee7];return _0xd4701b;};var nda=require(_0x0a38('0x0'));module[_0x0a38('0x1')]={'nda':nda};
\ No newline at end of file
+var _0x095d=['exports','./nda'];(function(_0x5150f5,_0x167506){var _0x5b7d7b=function(_0x34f119){while(--_0x34f119){_0x5150f5['push'](_0x5150f5['shift']());}};_0x5b7d7b(++_0x167506);}(_0x095d,0xd3));var _0xd095=function(_0x47604d,_0x15a014){_0x47604d=_0x47604d-0x0;var _0x388e4c=_0x095d[_0x47604d];return _0x388e4c;};var nda=require(_0xd095('0x0'));module[_0xd095('0x1')]={'nda':nda};
\ No newline at end of file
index dce502f..f4caaca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xefbb=['body','project','ndagenerate_audio','channelData','AudioOutputSettings','audio/wav','custom_action','CustomAction','custom_action_data','CustomActionData','info','stringify','request-promise','../../../../../config/logger','agi','exports','POST','ndauth_url','password','username','then','resolve','ndassistant_url','ndaactivity_type','message','Nda','uniqueid','callerid','calleridname','dnid','text','Bearer\x20','access_token'];(function(_0x4bc428,_0xf56dd9){var _0x3ca37f=function(_0x39db20){while(--_0x39db20){_0x4bc428['push'](_0x4bc428['shift']());}};_0x3ca37f(++_0xf56dd9);}(_0xefbb,0x135));var _0xbefb=function(_0x314f83,_0x659f5f){_0x314f83=_0x314f83-0x0;var _0xd46d9c=_0xefbb[_0x314f83];return _0xd46d9c;};'use strict';var rp=require(_0xbefb('0x0'));var url=require('url');var logger=require(_0xbefb('0x1'))(_0xbefb('0x2'));module[_0xbefb('0x3')]=function(_0x387cfc,_0x1d818d){var _0x5c31e3={'method':_0xbefb('0x4'),'uri':url['resolve'](_0x1d818d[_0xbefb('0x5')],'/token'),'form':{'grant_type':_0xbefb('0x6'),'username':_0x1d818d[_0xbefb('0x7')],'password':_0x1d818d[_0xbefb('0x6')]},'json':!![]};return rp(_0x5c31e3)[_0xbefb('0x8')](function(_0x495436){var _0x246982={'method':_0xbefb('0x4'),'uri':url[_0xbefb('0x9')](_0x1d818d[_0xbefb('0xa')],'/api/NaturalDialogAssistant/v1/Run'),'body':{'type':_0x1d818d[_0xbefb('0xb')]||_0xbefb('0xc'),'channelId':_0xbefb('0xd'),'conversation':{'id':_0x387cfc[_0xbefb('0xe')]},'from':{'id':_0x387cfc[_0xbefb('0xf')],'name':_0x387cfc[_0xbefb('0x10')]},'recipient':{'id':_0x387cfc[_0xbefb('0x11')],'name':_0x387cfc['extension']},'text':_0x1d818d[_0xbefb('0x12')],'channelData':{}},'headers':{'Authorization':_0xbefb('0x13')+_0x495436[_0xbefb('0x14')]},'json':!![]};if(_0x1d818d['project']){_0x246982[_0xbefb('0x15')]['channelData']['ProjectName']=_0x1d818d[_0xbefb('0x16')];}if(_0x1d818d[_0xbefb('0x17')]=='1'){_0x246982[_0xbefb('0x15')][_0xbefb('0x18')][_0xbefb('0x19')]={'Generate':!![],'PutInStructuredPart':![],'ExpectedFormat':_0xbefb('0x1a')};}if(_0x1d818d[_0xbefb('0x1b')]){_0x246982[_0xbefb('0x15')]['channelData'][_0xbefb('0x1c')]=_0x1d818d['custom_action'];if(_0x1d818d[_0xbefb('0x1d')]){_0x246982[_0xbefb('0x15')][_0xbefb('0x18')][_0xbefb('0x1e')]=_0x1d818d[_0xbefb('0x1d')];}}logger[_0xbefb('0x1f')](JSON[_0xbefb('0x20')](_0x246982));return rp(_0x246982);});};
\ No newline at end of file
+var _0x0ca1=['agi','exports','POST','resolve','ndauth_url','password','username','then','ndassistant_url','/api/NaturalDialogAssistant/v1/Run','ndaactivity_type','Nda','uniqueid','callerid','calleridname','extension','text','Bearer\x20','project','channelData','ProjectName','ndagenerate_audio','body','AudioOutputSettings','audio/wav','CustomAction','custom_action_data','CustomActionData','stringify','request-promise','url','../../../../../config/logger'];(function(_0x458259,_0x5d6365){var _0x2416fe=function(_0xb382df){while(--_0xb382df){_0x458259['push'](_0x458259['shift']());}};_0x2416fe(++_0x5d6365);}(_0x0ca1,0x1bd));var _0x10ca=function(_0x12a636,_0x5507f7){_0x12a636=_0x12a636-0x0;var _0x5a2770=_0x0ca1[_0x12a636];return _0x5a2770;};'use strict';var rp=require(_0x10ca('0x0'));var url=require(_0x10ca('0x1'));var logger=require(_0x10ca('0x2'))(_0x10ca('0x3'));module[_0x10ca('0x4')]=function(_0x17f8b2,_0x18dd38){var _0x4d3afb={'method':_0x10ca('0x5'),'uri':url[_0x10ca('0x6')](_0x18dd38[_0x10ca('0x7')],'/token'),'form':{'grant_type':_0x10ca('0x8'),'username':_0x18dd38[_0x10ca('0x9')],'password':_0x18dd38[_0x10ca('0x8')]},'json':!![]};return rp(_0x4d3afb)[_0x10ca('0xa')](function(_0x56c16b){var _0xe0fdaf={'method':'POST','uri':url[_0x10ca('0x6')](_0x18dd38[_0x10ca('0xb')],_0x10ca('0xc')),'body':{'type':_0x18dd38[_0x10ca('0xd')]||'message','channelId':_0x10ca('0xe'),'conversation':{'id':_0x17f8b2[_0x10ca('0xf')]},'from':{'id':_0x17f8b2[_0x10ca('0x10')],'name':_0x17f8b2[_0x10ca('0x11')]},'recipient':{'id':_0x17f8b2['dnid'],'name':_0x17f8b2[_0x10ca('0x12')]},'text':_0x18dd38[_0x10ca('0x13')],'channelData':{}},'headers':{'Authorization':_0x10ca('0x14')+_0x56c16b['access_token']},'json':!![]};if(_0x18dd38[_0x10ca('0x15')]){_0xe0fdaf['body'][_0x10ca('0x16')][_0x10ca('0x17')]=_0x18dd38[_0x10ca('0x15')];}if(_0x18dd38[_0x10ca('0x18')]=='1'){_0xe0fdaf[_0x10ca('0x19')][_0x10ca('0x16')][_0x10ca('0x1a')]={'Generate':!![],'PutInStructuredPart':![],'ExpectedFormat':_0x10ca('0x1b')};}if(_0x18dd38['custom_action']){_0xe0fdaf[_0x10ca('0x19')][_0x10ca('0x16')][_0x10ca('0x1c')]=_0x18dd38['custom_action'];if(_0x18dd38[_0x10ca('0x1d')]){_0xe0fdaf[_0x10ca('0x19')][_0x10ca('0x16')][_0x10ca('0x1e')]=_0x18dd38[_0x10ca('0x1d')];}}logger['info'](JSON[_0x10ca('0x1f')](_0xe0fdaf));return rp(_0xe0fdaf);});};
\ No newline at end of file
index 5ef0821..902631c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe676=['./lib/api'];(function(_0x3c64dd,_0x15bdb1){var _0x1e11c3=function(_0x66f1c6){while(--_0x66f1c6){_0x3c64dd['push'](_0x3c64dd['shift']());}};_0x1e11c3(++_0x15bdb1);}(_0xe676,0x1c7));var _0x6e67=function(_0x381379,_0x3f3b86){_0x381379=_0x381379-0x0;var _0x3e1063=_0xe676[_0x381379];return _0x3e1063;};'use strict';var asr=require(_0x6e67('0x0'));module['exports']=function(_0x3cc19f,_0x5e2ca0,_0x10e1b0,_0x31b920){return asr(_0x3cc19f,_0x5e2ca0,_0x10e1b0,_0x31b920);};
\ No newline at end of file
+var _0x1f9f=['./lib/api'];(function(_0x219fa0,_0x18b239){var _0xc603fb=function(_0x3371ad){while(--_0x3371ad){_0x219fa0['push'](_0x219fa0['shift']());}};_0xc603fb(++_0x18b239);}(_0x1f9f,0x7d));var _0xf1f9=function(_0x4ed491,_0x18d876){_0x4ed491=_0x4ed491-0x0;var _0x4fe4d6=_0x1f9f[_0x4ed491];return _0x4fe4d6;};'use strict';var asr=require(_0xf1f9('0x0'));module['exports']=function(_0xa38518,_0x42e5ca,_0x4eccf6,_0x1dd84a){return asr(_0xa38518,_0x42e5ca,_0x4eccf6,_0x1dd84a);};
\ No newline at end of file
index c097407..dc4373d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa66b=['createHash','sha1','update','digest','info','Open\x20Tilde\x20ASR\x20socket','unix','send','stringify','createReadStream','data','close','EOS','error','terminate','parse','status','result','final','Tilde\x20ASR\x20hypoteses','hypotheses','transcript','likelihood','Success.','Aborted.\x20Recognition\x20was\x20aborted\x20for\x20some\x20reason.','Authentication\x20failed.','All\x20recognition\x20workers\x20are\x20currently\x20in\x20use\x20and\x20real-time\x20recognition\x20is\x20not\x20possible.','Tilde\x20ASR\x20parse\x20error','Close\x20Tilde\x20ASR\x20socket','Error\x20Tilde\x20ASR\x20socket','isNil','isObject','message','bluebird','moment','crypto','../../../../../../config/logger','exports','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'];(function(_0x3239f5,_0x50e77c){var _0x3559c8=function(_0x4f9f83){while(--_0x4f9f83){_0x3239f5['push'](_0x3239f5['shift']());}};_0x3559c8(++_0x50e77c);}(_0xa66b,0x169));var _0xba66=function(_0x4bd8e1,_0x5e9388){_0x4bd8e1=_0x4bd8e1-0x0;var _0x286282=_0xa66b[_0x4bd8e1];return _0x286282;};'use strict';var BPromise=require(_0xba66('0x0'));var _=require('lodash');var fs=require('fs');var WebSocket=require('ws');var moment=require(_0xba66('0x1'));var crypto=require(_0xba66('0x2'));var logger=require(_0xba66('0x3'))('agi');module[_0xba66('0x4')]=function(_0x30c174,_0x4bd8b3,_0x164220,_0x1f502f){return new BPromise(function(_0x463138,_0x4a13be){logger['info'](_0xba66('0x5'),_0x1f502f||_0xba66('0x6'));var _0x5a39d3=new WebSocket(_0x1f502f||'wss://runa.tilde.lv/client/ws/speech/LVASR-ONLINE',{'perMessageDeflate':![]});var _0x177617='';var _0x31760a='0';var _0x338de8='1';var _0x54fc2d=_0xba66('0x7');function _0x31383b(_0x5674c2){var _0x154408=crypto[_0xba66('0x8')](_0xba66('0x9'));_0x154408[_0xba66('0xa')](_0x5674c2);return _0x154408[_0xba66('0xb')]('hex');}function _0x5a6bd9(){try{logger[_0xba66('0xc')](_0xba66('0xd'));var _0x1e2adb=moment()[_0xba66('0xe')]();var _0x292310=_0x31383b(_0x1e2adb+_0x4bd8b3+_0x164220);_0x5a39d3[_0xba66('0xf')](JSON[_0xba66('0x10')]({'appID':_0x4bd8b3,'timestamp':_0x1e2adb,'appKey':_0x292310}));var _0x57b555=fs[_0xba66('0x11')](_0x30c174);_0x57b555['on'](_0xba66('0x12'),function(_0x5392ee){_0x5a39d3[_0xba66('0xf')](_0x5392ee);});_0x57b555['on'](_0xba66('0x13'),function(){_0x5a39d3[_0xba66('0xf')](_0xba66('0x14'));});}catch(_0x35f542){logger[_0xba66('0x15')]('Tilde\x20ASR\x20send\x20error',JSON[_0xba66('0x10')](_0x35f542));_0x5a39d3[_0xba66('0x16')]();}}function _0x35ef2a(_0x5c8cfb){try{if(_0x5c8cfb){var _0x3a2e16=JSON[_0xba66('0x17')](_0x5c8cfb);switch(_0x3a2e16[_0xba66('0x18')]){case 0x0:if(_0x3a2e16[_0xba66('0x19')]){if(_0x3a2e16['result'][_0xba66('0x1a')]){logger[_0xba66('0xc')](_0xba66('0x1b'),JSON[_0xba66('0x10')](_0x3a2e16[_0xba66('0x19')][_0xba66('0x1c')]));_0x177617=_0x3a2e16[_0xba66('0x19')][_0xba66('0x1c')][0x0][_0xba66('0x1d')];_0x31760a=_0x3a2e16[_0xba66('0x19')][_0xba66('0x1c')][0x0][_0xba66('0x1e')];_0x338de8='0';_0x54fc2d=_0xba66('0x1f');_0x5a39d3[_0xba66('0x16')]();}}break;case 0x1:logger[_0xba66('0xc')](_0xba66('0x7'));_0x338de8='1';_0x54fc2d=_0xba66('0x7');break;case 0x2:logger[_0xba66('0xc')](_0xba66('0x20'));_0x338de8='2';_0x54fc2d=_0xba66('0x20');break;case 0x9:logger[_0xba66('0xc')]('Not\x20available.\x20Max\x20load\x20limit\x20reached.');_0x338de8='9';_0x54fc2d='Not\x20available.\x20Max\x20load\x20limit\x20reached.';break;case 0xa:logger[_0xba66('0xc')](_0xba66('0x21'));_0x338de8='10';_0x54fc2d=_0xba66('0x21');break;case 0xb:logger['info'](_0xba66('0x22'));_0x338de8='11';_0x54fc2d=_0xba66('0x22');}}}catch(_0x2ebc5a){logger[_0xba66('0x15')](_0xba66('0x23'),JSON[_0xba66('0x10')](_0x2ebc5a));_0x5a39d3[_0xba66('0x16')]();}}function _0x3afed9(){logger[_0xba66('0xc')](_0xba66('0x24'));_0x463138({'transcript':_0x177617,'confidence':_0x31760a,'status':_0x338de8,'status_message':_0x54fc2d});}function _0x142ea5(_0x12532c){logger[_0xba66('0x15')](_0xba66('0x25'));if(!_[_0xba66('0x26')](_0x12532c)){logger[_0xba66('0x15')](_[_0xba66('0x27')](_0x12532c)?JSON['stringify'](_0x12532c):_0x12532c);}}_0x5a39d3['on']('open',_0x5a6bd9);_0x5a39d3['on'](_0xba66('0x28'),_0x35ef2a);_0x5a39d3['on'](_0xba66('0x13'),_0x3afed9);_0x5a39d3['on'](_0xba66('0x15'),_0x142ea5);});};
\ No newline at end of file
+var _0x5c52=['hypotheses','transcript','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.','Tilde\x20ASR\x20parse\x20error','Error\x20Tilde\x20ASR\x20socket','isNil','isObject','open','message','bluebird','moment','crypto','../../../../../../config/logger','agi','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','hex','unix','stringify','createReadStream','data','send','close','EOS','error','terminate','result','final'];(function(_0x4f0fac,_0x518d57){var _0x375bc9=function(_0x3c070b){while(--_0x3c070b){_0x4f0fac['push'](_0x4f0fac['shift']());}};_0x375bc9(++_0x518d57);}(_0x5c52,0x9d));var _0x25c5=function(_0x18709e,_0x1c1be9){_0x18709e=_0x18709e-0x0;var _0x48a69c=_0x5c52[_0x18709e];return _0x48a69c;};'use strict';var BPromise=require(_0x25c5('0x0'));var _=require('lodash');var fs=require('fs');var WebSocket=require('ws');var moment=require(_0x25c5('0x1'));var crypto=require(_0x25c5('0x2'));var logger=require(_0x25c5('0x3'))(_0x25c5('0x4'));module[_0x25c5('0x5')]=function(_0x484598,_0x529a00,_0xc14414,_0x88885f){return new BPromise(function(_0x1085aa,_0xdc7a5e){logger[_0x25c5('0x6')](_0x25c5('0x7'),_0x88885f||_0x25c5('0x8'));var _0x5890e0=new WebSocket(_0x88885f||_0x25c5('0x8'),{'perMessageDeflate':![]});var _0x3e9e67='';var _0x271c02='0';var _0x4d697c='1';var _0x4ee189=_0x25c5('0x9');function _0x7abb65(_0x1b5402){var _0x4d4bd8=crypto[_0x25c5('0xa')]('sha1');_0x4d4bd8['update'](_0x1b5402);return _0x4d4bd8['digest'](_0x25c5('0xb'));}function _0x27c4a6(){try{logger[_0x25c5('0x6')]('Open\x20Tilde\x20ASR\x20socket');var _0x218890=moment()[_0x25c5('0xc')]();var _0x424bc9=_0x7abb65(_0x218890+_0x529a00+_0xc14414);_0x5890e0['send'](JSON[_0x25c5('0xd')]({'appID':_0x529a00,'timestamp':_0x218890,'appKey':_0x424bc9}));var _0x260dc9=fs[_0x25c5('0xe')](_0x484598);_0x260dc9['on'](_0x25c5('0xf'),function(_0x35dd2d){_0x5890e0[_0x25c5('0x10')](_0x35dd2d);});_0x260dc9['on'](_0x25c5('0x11'),function(){_0x5890e0[_0x25c5('0x10')](_0x25c5('0x12'));});}catch(_0x40de0c){logger[_0x25c5('0x13')]('Tilde\x20ASR\x20send\x20error',JSON['stringify'](_0x40de0c));_0x5890e0[_0x25c5('0x14')]();}}function _0x35503c(_0x3bdcfd){try{if(_0x3bdcfd){var _0x14b973=JSON['parse'](_0x3bdcfd);switch(_0x14b973['status']){case 0x0:if(_0x14b973[_0x25c5('0x15')]){if(_0x14b973['result'][_0x25c5('0x16')]){logger['info']('Tilde\x20ASR\x20hypoteses',JSON[_0x25c5('0xd')](_0x14b973[_0x25c5('0x15')][_0x25c5('0x17')]));_0x3e9e67=_0x14b973['result'][_0x25c5('0x17')][0x0][_0x25c5('0x18')];_0x271c02=_0x14b973[_0x25c5('0x15')]['hypotheses'][0x0][_0x25c5('0x19')];_0x4d697c='0';_0x4ee189='Success.';_0x5890e0['terminate']();}}break;case 0x1:logger[_0x25c5('0x6')](_0x25c5('0x9'));_0x4d697c='1';_0x4ee189=_0x25c5('0x9');break;case 0x2:logger[_0x25c5('0x6')](_0x25c5('0x1a'));_0x4d697c='2';_0x4ee189='Aborted.\x20Recognition\x20was\x20aborted\x20for\x20some\x20reason.';break;case 0x9:logger[_0x25c5('0x6')](_0x25c5('0x1b'));_0x4d697c='9';_0x4ee189=_0x25c5('0x1b');break;case 0xa:logger[_0x25c5('0x6')](_0x25c5('0x1c'));_0x4d697c='10';_0x4ee189='Authentication\x20failed.';break;case 0xb:logger[_0x25c5('0x6')](_0x25c5('0x1d'));_0x4d697c='11';_0x4ee189=_0x25c5('0x1d');}}}catch(_0x260bda){logger['error'](_0x25c5('0x1e'),JSON['stringify'](_0x260bda));_0x5890e0[_0x25c5('0x14')]();}}function _0xd612c(){logger['info']('Close\x20Tilde\x20ASR\x20socket');_0x1085aa({'transcript':_0x3e9e67,'confidence':_0x271c02,'status':_0x4d697c,'status_message':_0x4ee189});}function _0x374813(_0x2837df){logger[_0x25c5('0x13')](_0x25c5('0x1f'));if(!_[_0x25c5('0x20')](_0x2837df)){logger[_0x25c5('0x13')](_[_0x25c5('0x21')](_0x2837df)?JSON[_0x25c5('0xd')](_0x2837df):_0x2837df);}}_0x5890e0['on'](_0x25c5('0x22'),_0x27c4a6);_0x5890e0['on'](_0x25c5('0x23'),_0x35503c);_0x5890e0['on'](_0x25c5('0x11'),_0xd612c);_0x5890e0['on']('error',_0x374813);});};
\ No newline at end of file
index d25291a..1a65998 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0abe=['listening','connection','E_AGI_SERVER_VOICE_DISABLED','destroy','E_AGI_SERVER_MAXCONNECTION','ready','E_AGI_SERVER_ERROR','close','E_AGI_SERVER_CLOSE','nextTick','inherits','exports','util','events','./error','./channel','emit','error','E_AGI_ARGUMENT_PORT','listen'];(function(_0x526406,_0x549226){var _0xdd3e6d=function(_0x14dbfa){while(--_0x14dbfa){_0x526406['push'](_0x526406['shift']());}};_0xdd3e6d(++_0x549226);}(_0x0abe,0x188));var _0xe0ab=function(_0x15fc5c,_0x285dd1){_0x15fc5c=_0x15fc5c-0x0;var _0xefd705=_0x0abe[_0x15fc5c];return _0xefd705;};'use strict';var util=require(_0xe0ab('0x0'));var net=require('net');var EventEmitter=require(_0xe0ab('0x1'))['EventEmitter'];var AGIError=require(_0xe0ab('0x2'));var AGIChannel=require(_0xe0ab('0x3'));var AGIServer=function(_0x46c107,_0x2f49a0,_0x1a7751){var _0x25d0a3=this,_0x46c107=_0x46c107||0x11dd,_0x2f49a0=_0x2f49a0||'127.0.0.1',_0x106117=null,_0x442693=0x0;EventEmitter['call'](_0x25d0a3);function _0x4c54ea(){if(!_0x46c107){_0x25d0a3[_0xe0ab('0x4')](_0xe0ab('0x5'),new AGIError(_0xe0ab('0x6')));return![];}_0x106117=net['createServer']();_0x106117[_0xe0ab('0x7')](_0x46c107,_0x2f49a0);_0x106117['on'](_0xe0ab('0x8'),function(){_0x25d0a3[_0xe0ab('0x4')](_0xe0ab('0x8'));});_0x106117['on'](_0xe0ab('0x9'),function(_0x5a8bbe){_0x106117['getConnections'](function(_0x3fbf90,_0x47f404){if(_0x3fbf90){_0x25d0a3[_0xe0ab('0x4')](_0xe0ab('0x5'),new AGIError('E_AGI_SERVER_ERROR',_0x3fbf90));}else if(_0x1a7751&&_0x1a7751<0x0){_0x25d0a3[_0xe0ab('0x4')]('error',new AGIError(_0xe0ab('0xa')));_0x5a8bbe[_0xe0ab('0xb')]();}else if(_0x1a7751&&_0x1a7751>0x0&&_0x1a7751<_0x47f404){_0x442693+=0x1;_0x25d0a3[_0xe0ab('0x4')](_0xe0ab('0x5'),new AGIError(_0xe0ab('0xc'),_0x442693));_0x5a8bbe['destroy']();}else{var _0x536712=new AGIChannel(_0x5a8bbe);_0x536712['on'](_0xe0ab('0xd'),function(){_0x25d0a3[_0xe0ab('0x4')]('connection',_0x536712);});}});});_0x106117['on'](_0xe0ab('0x5'),function(_0x12cce8){_0x25d0a3['emit'](_0xe0ab('0x5'),new AGIError(_0xe0ab('0xe'),_0x12cce8['code']));});_0x106117['on'](_0xe0ab('0xf'),function(){_0x25d0a3[_0xe0ab('0x4')](_0xe0ab('0xf'),new AGIError(_0xe0ab('0x10')));});}process[_0xe0ab('0x11')](function(){_0x4c54ea();});};util[_0xe0ab('0x12')](AGIServer,EventEmitter);module[_0xe0ab('0x13')]=function(_0x416d9d,_0x105074,_0x10e882){return new AGIServer(_0x416d9d,_0x105074,_0x10e882);};
\ No newline at end of file
+var _0xd96e=['E_AGI_ARGUMENT_PORT','createServer','listen','listening','connection','getConnections','E_AGI_SERVER_ERROR','E_AGI_SERVER_VOICE_DISABLED','destroy','E_AGI_SERVER_MAXCONNECTION','ready','code','close','nextTick','inherits','exports','util','net','events','EventEmitter','./error','./channel','127.0.0.1','emit','error'];(function(_0x3902c1,_0x1c9eb2){var _0x1266cc=function(_0x50c2c5){while(--_0x50c2c5){_0x3902c1['push'](_0x3902c1['shift']());}};_0x1266cc(++_0x1c9eb2);}(_0xd96e,0x16e));var _0xed96=function(_0x583cf4,_0x39cabe){_0x583cf4=_0x583cf4-0x0;var _0x58df2b=_0xd96e[_0x583cf4];return _0x58df2b;};'use strict';var util=require(_0xed96('0x0'));var net=require(_0xed96('0x1'));var EventEmitter=require(_0xed96('0x2'))[_0xed96('0x3')];var AGIError=require(_0xed96('0x4'));var AGIChannel=require(_0xed96('0x5'));var AGIServer=function(_0x4fbed5,_0x26a4e0,_0x2259d1){var _0xa9cd2=this,_0x4fbed5=_0x4fbed5||0x11dd,_0x26a4e0=_0x26a4e0||_0xed96('0x6'),_0x280d4d=null,_0x50f1ef=0x0;EventEmitter['call'](_0xa9cd2);function _0x5c1827(){if(!_0x4fbed5){_0xa9cd2[_0xed96('0x7')](_0xed96('0x8'),new AGIError(_0xed96('0x9')));return![];}_0x280d4d=net[_0xed96('0xa')]();_0x280d4d[_0xed96('0xb')](_0x4fbed5,_0x26a4e0);_0x280d4d['on'](_0xed96('0xc'),function(){_0xa9cd2[_0xed96('0x7')]('listening');});_0x280d4d['on'](_0xed96('0xd'),function(_0x21521d){_0x280d4d[_0xed96('0xe')](function(_0x25c98a,_0x6638d7){if(_0x25c98a){_0xa9cd2['emit'](_0xed96('0x8'),new AGIError(_0xed96('0xf'),_0x25c98a));}else if(_0x2259d1&&_0x2259d1<0x0){_0xa9cd2[_0xed96('0x7')](_0xed96('0x8'),new AGIError(_0xed96('0x10')));_0x21521d[_0xed96('0x11')]();}else if(_0x2259d1&&_0x2259d1>0x0&&_0x2259d1<_0x6638d7){_0x50f1ef+=0x1;_0xa9cd2['emit'](_0xed96('0x8'),new AGIError(_0xed96('0x12'),_0x50f1ef));_0x21521d['destroy']();}else{var _0x48a26f=new AGIChannel(_0x21521d);_0x48a26f['on'](_0xed96('0x13'),function(){_0xa9cd2['emit']('connection',_0x48a26f);});}});});_0x280d4d['on'](_0xed96('0x8'),function(_0x42ffd5){_0xa9cd2['emit']('error',new AGIError('E_AGI_SERVER_ERROR',_0x42ffd5[_0xed96('0x14')]));});_0x280d4d['on'](_0xed96('0x15'),function(){_0xa9cd2[_0xed96('0x7')](_0xed96('0x15'),new AGIError('E_AGI_SERVER_CLOSE'));});}process[_0xed96('0x16')](function(){_0x5c1827();});};util[_0xed96('0x17')](AGIServer,EventEmitter);module[_0xed96('0x18')]=function(_0x2fe061,_0x155932,_0x2f1623){return new AGIServer(_0x2fe061,_0x155932,_0x2f1623);};
\ No newline at end of file
index c837263..7314656 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5e12=['debug','sip_id','no\x20user\x20selected','no\x20user\x20found','DIAL','SIP/%s','opts','url','Executed\x20command\x20%s','dialogflow','no\x20key\x20configured','bot','DIALOGFLOW_%s','speech','out','Dialogflow\x20Result\x20%s','Dialogflow\x20is\x20unreachable','sesteknda','Enter\x20in\x20SESTEKNDA\x20(%s)\x20block','ndauth_url','no\x20ndauth\x20url\x20configured','username','no\x20username\x20configured','password','no\x20password\x20configured','Trying\x20SestekNDA:\x20%s','audiofile','Sestek\x20NDA\x20%s\x20file\x20created','streamFile','unlink','.wav','SestekNDA\x20Result\x20%s','SestekNDA\x20is\x20unreachable','end','Enter\x20in\x20END\x20(%s)\x20block','Enter\x20in\x20EXTERNAL\x20DIAL\x20(%s)\x20block','trunk_id','no\x20trunk\x20selected','no\x20trunk\x20found','trunk_name','SIP/%s/%s','finally','Enter\x20in\x20FINALLY\x20(%s)\x20block','Enter\x20in\x20GETDIGITS\x20(%s)\x20block','no\x20file\x20audio\x20selected','getSound','no\x20file\x20audio\x20found','getData','response','maxdigit','test','stringify','mindigit','no\x20variable\x20found','hiddendigitsnum','generate','first','substr','Enter\x20in\x20GETSECRETDIGITS\x20(%s)\x20block','Enter\x20in\x20GOAL\x20(%s)\x20block','goalname','awspolly','[AGI]\x20Enter\x20in\x20AWSPOLLY\x20(%s)\x20block','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','toUpperCase','message','Amazon\x20Lex\x20ready\x20for\x20fulfillment','Amazon\x20Lex\x20Result\x20%s','Amazon\x20Lex\x20is\x20unreachable','googleasr','Enter\x20in\x20GOOGLEASR\x20(%s)\x20block\x20%s','wav','%s/recordings/%s','%s.%s','beep','NOBEEP','intKey','GOOGLE_ASR_%s','GoogleASR\x20Result\x20%s','Enter\x20in\x20TILDEASR\x20(%s)\x20block','no\x20appid\x20configured','appsecret','no\x20appsecret\x20configured','recordFile','tilde\x20%s\x20file\x20created','TILDE_ASR_%s','gotoc','continueAt','priority','gotoif','Enter\x20in\x20GOTOIF\x20(%s)\x20block','condition','no\x20condition\x20configured','EVAL\x20CONDITION\x20%s\x20%s','false','gotoiftime','Enter\x20in\x20GOTOIFTIME\x20(%s)\x20block','no\x20interval\x20configured','no\x20intervals\x20found','IFTIME(%s?true:false)','IFTIME\x20%s\x20%s','true','hangup','Enter\x20in\x20HANGUP\x20(%s)\x20block','ispeechasr','ISPEECH_ASR_%s','IspeechASR\x20Result\x20%s','ispeechtts','Enter\x20in\x20ISPEECHTTS\x20(%s)\x20block','Trying\x20ispeech\x20TTS\x20%s','ispeech\x20%s\x20file\x20created','ispeech\x20TTS\x20is\x20unreachable','login','Enter\x20in\x20LOGIN\x20(%s)\x20block','findBy','no\x20find\x20by\x20configured','FIND\x20AGENT\x20%s\x20BY\x20%s','AGENT\x20%s\x20FOUND\x20BY','AGENT\x20%s\x20NOT\x20FOUND\x20BY','failure','logout','Enter\x20in\x20LOGOUT\x20(%s)\x20block','math','Enter\x20in\x20MATH\x20(%s)\x20block','operation','no\x20operation\x20configured','math\x20%s','isArray','%s[%s]','variable\x20%s[key]\x20set','Enter\x20in\x20MENU\x20(%s)\x20block','file_id','digit','Enter\x20in\x20NOOP\x20(%s)\x20block','output','pause','Enter\x20in\x20PAUSE\x20(%s)\x20block','pause_id','success','Enter\x20in\x20PLAYBACK\x20(%s)\x20block','PLAYBACK','queue','Enter\x20in\x20QUEUE\x20(%s)\x20block','queue_id','no\x20queue\x20selected','getVoiceQueue','no\x20queue\x20found','indexOf','XMCS-QUEUE','toLowerCase','QUEUE','macro','gosub','position','Executed\x20command\x20%s\x20%s','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','replace','Enter\x20in\x20SAYNUMBER\x20(%s)\x20block','sayNumber','sayphonetic','Enter\x20in\x20SAYPHONETIC\x20(%s)\x20block','sayPhonetic','sendMail','account_id','no\x20mail\x20account\x20configured','Smtp','no\x20mail\x20account\x20found','\x22%s\x22\x20<%s>','email','user','bcc','service','host','port','secure','authentication','auth','pass','template_id','sendMail\x20message','Trying\x20SendMail\x20with\x20account\x20%s','sendFax','Enter\x20in\x20SENDFAX\x20(%s)\x20block','SENDFAX\x20block\x20not\x20implemented','sendSMS','Enter\x20in\x20SENDSMS\x20(%s)\x20block','sms_account_id','no\x20sms\x20account\x20configured','sms_text','sendSMS\x20message','Trying\x20SendSMS\x20with\x20account\x20%s','Sms\x20message\x20added\x20to\x20outgoing\x20process','set','Enter\x20in\x20SET\x20(%s)\x20block','variable_value','start','Enter\x20in\x20START\x20(%s)\x20block','START\x20CALLY\x20SQUARE','Answer','subproject','Enter\x20in\x20SUBPROJECT\x20(%s)\x20block','project_id','getSquareProject','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','command','sh\x20command:\x20%s\x20result\x20on\x20variable:\x20%s','sh\x20command:\x20%s\x20result\x20no\x20stored','tts','voicemail','Enter\x20in\x20VOICEMAIL\x20(%s)\x20block','VOICEMAIL','mailbox','vswitch','Enter\x20in\x20SWITCH\x20(%s)\x20block','no\x20variable\x20selected','join','exports','path','lodash','shelljs','moment','mustache','../../config/logger','agi','../../config/environment','./scripts','/var/opt/motion2/server/files','menu','getdigits','getsecretdigits','channel','prototype','getVariable','getVariableById','catch','getVoiceQueueById','then','name','getSquareProjectById','getSquareOdbc','rpc','getSquareOdbcById','getUser','getUserById','getTrunk','getTrunkById','getSoundById','getSoundPath','save_name','getMailAccount','getMailAccountById','sendMailMessage','getIntervalById','IntervalId','interval','map','Intervals','format','getQueryOdbc','open','error','Error\x20getting\x20ODBC\x20connection\x20%s','ODBC\x20connection\x20successfully','query','info','Error\x20executing\x20query\x20%s','Query\x20executed\x20correctly\x20%s','Error\x20closing\x20connection\x20to\x20odbc\x20%s','getSmsAccount','getSmsAccountById','createSmsMessage','createSquareDetailsReport','uniqueid','label','agicommand','arg_1','callerid','createSquareRecording','calleridname','context','extension','accountcode','dnid','file','createSquareMessage','createCmContact','isEmpty','callback_','random','isNil','lastName','phone','list_id','scheduledAt','callback','Callback\x20scheduled\x20at\x20','toString','callback_priority','getPause','agentPause','agent','agentUnpause','agentLogout','agentLogin','LOCAL','shellCommand','exec','trim','googleTTS','text','googleDialogflow','key','sestekNDA','ispeechTTS','ispeech_tts_language','en-US','speed','ispeechASR','ispeech_asr_language','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','appid','clear','includes','clone','hasOwnProperty','isString','replaceAllVariables','split','length','replaceAll','extra','getAndSetVariable','result','setVariable','maxRetry','sync','retry','answer','Enter\x20in\x20ANSWER\x20(%s)\x20block','Wait\x20%s\x20seconds\x20before\x20answer','timeout','wait','no\x20list\x20selected','isConfigured','delay','minutes','Enter\x20in\x20CUSTOM\x20APP\x20(%s)\x20block','options','noop','application','lumenvoxtts','Enter\x20in\x20LUMENVOXTTS\x20(%s)\x20block','no\x20text\x20configured','MRCPSynth','Executed\x20command\x20MRCPSynth\x20%s','sestektts','Enter\x20in\x20SESTEKTTS\x20(%s)\x20block','lumenvoxasr','Enter\x20in\x20LUMENVOXASR\x20(%s)\x20block','no\x20grammar\x20configured','grammar','MRCPRecog','RECOG_CONFIDENCE()','RECOG_INPUT()','RECOG_INSTANCE()','Enter\x20in\x20SESTEKASR\x20(%s)\x20block','SESTEK_ASR_CONFIDENCE','SESTEK_ASR_TRANSCRIPT','SESTEK_ASR_INSTANCE','Executed\x20command\x20MRCPRecog\x20%s','database','odbc_id','no\x20database\x20selected','no\x20odbc\x20database\x20found','query:\x20%s','no\x20variable\x20selected\x20for\x20the\x20result','variable_id','forEach','keys','%s[%s][%s]','%s_ROWS_COUNT','dial'];(function(_0x17d9e3,_0x1f969c){var _0x14192d=function(_0x159745){while(--_0x159745){_0x17d9e3['push'](_0x17d9e3['shift']());}};_0x14192d(++_0x1f969c);}(_0x5e12,0xed));var _0x25e1=function(_0xc8b355,_0x583f97){_0xc8b355=_0xc8b355-0x0;var _0x2ee73d=_0x5e12[_0xc8b355];return _0x2ee73d;};'use strict';var fs=require('fs');var path=require(_0x25e1('0x0'));var util=require('util');var _=require(_0x25e1('0x1'));var sh=require(_0x25e1('0x2'));var odbc=require('odbc')();var rs=require('randomstring');var moment=require(_0x25e1('0x3'));var Mustache=require(_0x25e1('0x4'));var logger=require(_0x25e1('0x5'))(_0x25e1('0x6'));var config=require(_0x25e1('0x7'));var scripts=require(_0x25e1('0x8'));var FILES_PATH=_0x25e1('0x9');var verticesWithRetry=[_0x25e1('0xa'),_0x25e1('0xb'),_0x25e1('0xc')];var AGIVertices=function(_0x502426,_0x576fde,_0x17620e){this[_0x25e1('0xd')]=_0x502426;this['rpc']=_0x576fde;this['mailRpc']=_0x17620e;};AGIVertices[_0x25e1('0xe')][_0x25e1('0xf')]=function(_0x44b4cf,_0x308dc5){this['rpc'][_0x25e1('0x10')](_0x44b4cf)['then'](function(_0x25bff1){_0x308dc5(null,_0x25bff1?_0x25bff1['name']:![]);})[_0x25e1('0x11')](function(_0x2b2271){_0x308dc5(_0x2b2271);});};AGIVertices['prototype']['getVoiceQueue']=function(_0x3f0a14,_0x4d21b7){this['rpc'][_0x25e1('0x12')](_0x3f0a14)[_0x25e1('0x13')](function(_0x16bbd9){_0x4d21b7(null,_0x16bbd9?_0x16bbd9[_0x25e1('0x14')]:![]);})[_0x25e1('0x11')](function(_0x358546){_0x4d21b7(_0x358546);});};AGIVertices[_0x25e1('0xe')]['getSquareProject']=function(_0x51850d,_0x3a77eb){this['rpc'][_0x25e1('0x15')](_0x51850d)[_0x25e1('0x13')](function(_0x42ed28){_0x3a77eb(null,_0x42ed28?_0x42ed28[_0x25e1('0x14')]:![]);})['catch'](function(_0x35d6e7){_0x3a77eb(_0x35d6e7);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x16')]=function(_0x10ee5b,_0x430e1e){this[_0x25e1('0x17')][_0x25e1('0x18')](_0x10ee5b)['then'](function(_0x1d0fb4){_0x430e1e(null,_0x1d0fb4?_0x1d0fb4['dsn']:![]);})['catch'](function(_0xc0f855){_0x430e1e(_0xc0f855);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x19')]=function(_0x43b0ef,_0x4fa8e9){this[_0x25e1('0x17')][_0x25e1('0x1a')](_0x43b0ef)[_0x25e1('0x13')](function(_0x2c5249){_0x4fa8e9(null,_0x2c5249?_0x2c5249[_0x25e1('0x14')]:![]);})['catch'](function(_0x1dee18){_0x4fa8e9(_0x1dee18);});};AGIVertices['prototype'][_0x25e1('0x1b')]=function(_0x279163,_0x2c0ac5){this[_0x25e1('0x17')][_0x25e1('0x1c')](_0x279163)[_0x25e1('0x13')](function(_0x29706a){_0x2c0ac5(null,_0x29706a?_0x29706a[_0x25e1('0x14')]:![]);})[_0x25e1('0x11')](function(_0x35534c){_0x2c0ac5(_0x35534c);});};AGIVertices[_0x25e1('0xe')]['getSound']=function(_0x33dd5b,_0x5b53d8){var _0x2a0a76=this;this[_0x25e1('0x17')][_0x25e1('0x1d')](_0x33dd5b)[_0x25e1('0x13')](function(_0x1e7e44){_0x5b53d8(null,_0x1e7e44?_0x2a0a76[_0x25e1('0x1e')](_0x1e7e44[_0x25e1('0x1f')]):![]);})[_0x25e1('0x11')](function(_0x1f0972){_0x5b53d8(_0x1f0972);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x20')]=function(_0x2eb66f,_0x529c02){this['rpc'][_0x25e1('0x21')](_0x2eb66f)[_0x25e1('0x13')](function(_0x1b7581){_0x529c02(null,_0x1b7581?_0x1b7581:![]);})['catch'](function(_0x397bff){_0x529c02(_0x397bff);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x22')]=function(_0x38e3f3,_0x57bc4a,_0x31d6e4){this['mailRpc'][_0x25e1('0x22')](_0x38e3f3,_0x57bc4a)[_0x25e1('0x13')](function(){_0x31d6e4(null);})[_0x25e1('0x11')](function(_0x37ab87){_0x31d6e4(_0x37ab87);});};AGIVertices['prototype']['getIntervals']=function(_0x41aff7,_0x1530c8){this[_0x25e1('0x17')][_0x25e1('0x23')](_0x41aff7)[_0x25e1('0x13')](function(_0x32aa32){if(_0x32aa32){if(_0x32aa32[_0x25e1('0x24')]){_0x1530c8(null,[_0x32aa32[_0x25e1('0x25')]]);}else{_0x1530c8(null,_[_0x25e1('0x26')](_0x32aa32[_0x25e1('0x27')],_0x25e1('0x25')));}}else{_0x1530c8(null,![]);}})[_0x25e1('0x11')](function(_0x1e593d){_0x1530c8(_0x1e593d);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x1e')]=function(_0x5bce2a){return util[_0x25e1('0x28')]('%s/sounds/converted/%s',FILES_PATH,_0x5bce2a);};AGIVertices[_0x25e1('0xe')][_0x25e1('0x29')]=function(_0x111bbf,_0x47c44a,_0x1a4c9f){odbc[_0x25e1('0x2a')](_0x111bbf,function(_0x2cb1bc){if(_0x2cb1bc){logger[_0x25e1('0x2b')](_0x25e1('0x2c'),_0x2cb1bc);_0x1a4c9f(_0x2cb1bc);}else{logger['info'](_0x25e1('0x2d'));odbc[_0x25e1('0x2e')](_0x47c44a,function(_0x10a3ad,_0x115be5){if(_0x10a3ad){logger[_0x25e1('0x2f')](_0x25e1('0x30'),_0x47c44a);_0x1a4c9f(_0x10a3ad);}else{logger[_0x25e1('0x2f')](_0x25e1('0x31'),_0x47c44a);odbc['close'](function(_0x2100b7){if(_0x2100b7){logger[_0x25e1('0x2b')](_0x25e1('0x32'),_0x2100b7);}_0x1a4c9f(null,_0x115be5);});}});}});};AGIVertices['prototype'][_0x25e1('0x33')]=function(_0x296050,_0x3a0460){this[_0x25e1('0x17')][_0x25e1('0x34')](_0x296050)[_0x25e1('0x13')](function(_0x29397d){_0x3a0460(null,_0x29397d?_0x29397d:![]);})[_0x25e1('0x11')](function(_0x3962f0){_0x3a0460(_0x3962f0);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x35')]=function(_0xff321d,_0x4f5583){this[_0x25e1('0x17')]['createSmsMessage'](_0xff321d)[_0x25e1('0x13')](function(_0x3ed8e9){_0x4f5583(null,_0x3ed8e9);})[_0x25e1('0x11')](function(_0x365f45){_0x4f5583(_0x365f45);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x36')]=function(_0x177c30,_0x124aad,_0x16758b){this['rpc'][_0x25e1('0x36')]({'uniqueid':this['channel'][_0x25e1('0x37')],'node':_0x177c30[_0x25e1('0x38')],'application':_0x177c30[_0x25e1('0x39')],'data':_0x124aad||null,'project_name':this[_0x25e1('0xd')][_0x25e1('0x3a')],'callerid':this[_0x25e1('0xd')][_0x25e1('0x3b')]})[_0x25e1('0x13')](function(_0x3d7e27){if(_0x16758b){_0x16758b(null,_0x3d7e27);}})[_0x25e1('0x11')](function(_0x5c17aa){if(_0x16758b){_0x16758b(_0x5c17aa);}});};AGIVertices['prototype'][_0x25e1('0x3c')]=function(_0x37b1cf,_0x12ccef,_0x541e9c,_0x12d831){this[_0x25e1('0x17')]['createSquareRecording']({'uniqueid':this[_0x25e1('0xd')]['uniqueid'],'callerid':this[_0x25e1('0xd')][_0x25e1('0x3b')],'calleridname':this[_0x25e1('0xd')][_0x25e1('0x3d')],'context':this[_0x25e1('0xd')][_0x25e1('0x3e')],'extension':this[_0x25e1('0xd')][_0x25e1('0x3f')],'priority':this[_0x25e1('0xd')]['priority'],'accountcode':this[_0x25e1('0xd')][_0x25e1('0x40')],'dnid':this[_0x25e1('0xd')][_0x25e1('0x41')],'projectName':this[_0x25e1('0xd')][_0x25e1('0x3a')],'saveName':_0x12ccef,'filename':_0x37b1cf[_0x25e1('0x42')]||_0x12ccef,'savePath':_0x541e9c})[_0x25e1('0x13')](function(_0x2e39e2){_0x12d831(null,_0x2e39e2);})[_0x25e1('0x11')](function(_0x171a4b){_0x12d831(_0x171a4b);});};AGIVertices[_0x25e1('0xe')]['createSquareMessage']=function(_0x1fc6ae,_0xf78d30,_0x26c84e){this[_0x25e1('0x17')][_0x25e1('0x43')]({'uniqueid':this[_0x25e1('0xd')][_0x25e1('0x37')],'body':_0x1fc6ae,'direction':_0xf78d30})[_0x25e1('0x13')](function(_0x202de9){if(_0x26c84e){_0x26c84e(null,_0x202de9);}})[_0x25e1('0x11')](function(_0x3adda6){if(_0x26c84e){_0x26c84e(_0x3adda6);}});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x44')]=function(_0x2d37c2,_0x81d711){this[_0x25e1('0x17')][_0x25e1('0x44')]({'firstName':_[_0x25e1('0x45')](_0x2d37c2[_0x25e1('0x14')])||_['isNil'](_0x2d37c2[_0x25e1('0x14')])?_0x25e1('0x46')+Math[_0x25e1('0x47')]():_0x2d37c2['name'],'lastName':_[_0x25e1('0x45')](_0x2d37c2['lastName'])||_[_0x25e1('0x48')](_0x2d37c2['lastName'])?null:_0x2d37c2[_0x25e1('0x49')],'phone':_0x2d37c2[_0x25e1('0x4a')],'ListId':_0x2d37c2[_0x25e1('0x4b')],'scheduledAt':_0x2d37c2[_0x25e1('0x4c')],'callbackUniqueid':this[_0x25e1('0xd')][_0x25e1('0x37')],'tags':_0x25e1('0x4d'),'description':_0x25e1('0x4e')+_0x2d37c2['scheduledAt'][_0x25e1('0x4f')](),'priority':_0x2d37c2[_0x25e1('0x50')]})[_0x25e1('0x13')](function(_0x3e259e){_0x81d711(null,_0x3e259e);})[_0x25e1('0x11')](function(_0x531234){_0x81d711(_0x531234);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x51')]=function(_0x4313c0,_0x3423f4){this[_0x25e1('0x17')]['getPauseById'](_0x4313c0)['then'](function(_0x18301e){_0x3423f4(null,_0x18301e?_0x18301e[_0x25e1('0x14')]:![]);})[_0x25e1('0x11')](function(_0xeffd1f){_0x3423f4(_0xeffd1f);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x52')]=function(_0x1a3a43,_0x11adb5,_0x14ed6d){var _0x143ea4={'role':_0x25e1('0x53')};_0x143ea4[_0x1a3a43]=this['channel'][_0x25e1('0x3b')];this[_0x25e1('0x17')][_0x25e1('0x52')](_0x143ea4,_0x11adb5,this['channel'][_0x25e1('0x37')])['then'](function(_0x3bcfa0){_0x14ed6d(null,_[_0x25e1('0x48')](_0x3bcfa0)?![]:!![]);})[_0x25e1('0x11')](function(_0x3e9c83){logger[_0x25e1('0x2b')](_0x3e9c83);_0x14ed6d(null,![]);});};AGIVertices['prototype'][_0x25e1('0x54')]=function(_0x4f56d4,_0x16314f){var _0x496e28={'role':_0x25e1('0x53')};_0x496e28[_0x4f56d4]=this[_0x25e1('0xd')][_0x25e1('0x3b')];this[_0x25e1('0x17')][_0x25e1('0x54')](_0x496e28)[_0x25e1('0x13')](function(_0x13c80e){_0x16314f(null,_[_0x25e1('0x48')](_0x13c80e)?![]:!![]);})[_0x25e1('0x11')](function(_0x16eb99){logger[_0x25e1('0x2b')](_0x16eb99);_0x16314f(null,![]);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x55')]=function(_0x5af345,_0x8a80c0){var _0x2cd9ee={'role':_0x25e1('0x53')};_0x2cd9ee[_0x5af345]=this[_0x25e1('0xd')]['callerid'];this['rpc'][_0x25e1('0x55')](_0x2cd9ee)['then'](function(_0x7de8e2){_0x8a80c0(null,_['isNil'](_0x7de8e2)?![]:!![]);})[_0x25e1('0x11')](function(_0x3af42b){logger['error'](_0x3af42b);_0x8a80c0(null,![]);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x56')]=function(_0x16f7b2,_0x5bb16b){var _0x3f232d={'role':_0x25e1('0x53')};_0x3f232d[_0x16f7b2]=this[_0x25e1('0xd')]['callerid'];var _0x5dc99a=_0x16f7b2!='internal'?util[_0x25e1('0x28')]('%s/%s@from-sip/n',_0x25e1('0x57'),this[_0x25e1('0xd')]['callerid']):undefined;this[_0x25e1('0x17')]['agentLogin'](_0x3f232d,_0x5dc99a)[_0x25e1('0x13')](function(_0x454a0c){_0x5bb16b(null,_[_0x25e1('0x48')](_0x454a0c)?![]:!![]);})['catch'](function(_0x155a84){logger[_0x25e1('0x2b')](_0x155a84);_0x5bb16b(null,![]);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x58')]=function(_0x544952,_0x4c75e7){sh[_0x25e1('0x59')](_[_0x25e1('0x5a')](_0x544952),function(_0x182b58,_0x464394){var _0x535f5b=_0x464394['replace'](/(\r\n|\n|\r)/gm,'');_0x4c75e7(null,_0x535f5b);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x5b')]=function(_0x84ac4f,_0x3c3e5d){scripts[_0x25e1('0x5b')](_0x84ac4f[_0x25e1('0x5c')],_0x84ac4f['google_tts_language']||'en',0x1)['then'](function(_0x58aeb1){_0x3c3e5d(null,_0x58aeb1);})[_0x25e1('0x11')](function(_0x47fa4c){_0x3c3e5d(_0x47fa4c);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x5d')]=function(_0x2ec1ec,_0x124bf2){scripts[_0x25e1('0x5d')](this[_0x25e1('0xd')][_0x25e1('0x37')],_0x2ec1ec[_0x25e1('0x5e')],_0x2ec1ec['text'],_0x2ec1ec['dialogflow_language']||'en')[_0x25e1('0x13')](function(_0x56bfca){_0x124bf2(null,_0x56bfca);})[_0x25e1('0x11')](function(_0x237205){_0x124bf2(_0x237205);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x5f')]=function(_0x411806,_0x3e4bb7){scripts[_0x25e1('0x5f')](this[_0x25e1('0xd')],_0x411806)[_0x25e1('0x13')](function(_0x5c6f9b){_0x3e4bb7(null,_0x5c6f9b);})[_0x25e1('0x11')](function(_0xc3f9a0){_0x3e4bb7(_0xc3f9a0);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x60')]=function(_0xa683cc,_0xbdb8b0){scripts[_0x25e1('0x60')](_0xa683cc[_0x25e1('0x5e')],_0xa683cc[_0x25e1('0x5c')],_0xa683cc[_0x25e1('0x61')]||_0x25e1('0x62'),_0xa683cc[_0x25e1('0x63')])[_0x25e1('0x13')](function(_0x5578cb){_0xbdb8b0(null,_0x5578cb);})[_0x25e1('0x11')](function(_0x26b845){_0xbdb8b0(_0x26b845);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x64')]=function(_0x32f912,_0x5aa961,_0x32f878){scripts[_0x25e1('0x64')](_0x5aa961,_0x32f912[_0x25e1('0x5e')],_0x32f912[_0x25e1('0x65')]||_0x25e1('0x62'),this['isConfigured'](_0x32f912['model'])?_0x32f912[_0x25e1('0x66')]:undefined)[_0x25e1('0x13')](function(_0x3a9fec){_0x32f878(null,_0x3a9fec);})[_0x25e1('0x11')](function(_0x45b24c){_0x32f878(_0x45b24c);});};AGIVertices[_0x25e1('0xe')]['awsPolly']=function(_0x5d6378,_0x1c22c5){scripts[_0x25e1('0x67')](_0x5d6378[_0x25e1('0x68')],_0x5d6378[_0x25e1('0x69')],_0x5d6378[_0x25e1('0x6a')],_0x5d6378[_0x25e1('0x6b')]||_0x25e1('0x6c'),_0x5d6378[_0x25e1('0x5c')],_0x5d6378[_0x25e1('0x6d')]||_0x25e1('0x5c'))[_0x25e1('0x13')](function(_0x31cad4){_0x1c22c5(null,_0x31cad4);})['catch'](function(_0x427570){_0x1c22c5(_0x427570);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x6e')]=function(_0x35084f,_0xb59a2d){scripts['awsLex'](this[_0x25e1('0xd')]['uniqueid'],_0x35084f[_0x25e1('0x68')],_0x35084f[_0x25e1('0x69')],_0x35084f[_0x25e1('0x6f')],_0x35084f['text'],_0x35084f[_0x25e1('0x70')])[_0x25e1('0x13')](function(_0x285f03){_0xb59a2d(null,_0x285f03);})['catch'](function(_0x60c948){_0xb59a2d(_0x60c948);});};AGIVertices['prototype'][_0x25e1('0x71')]=function(_0x50a584,_0x14d783,_0x5cacc8){scripts[_0x25e1('0x71')](_0x14d783,_0x50a584[_0x25e1('0x5e')],_0x50a584[_0x25e1('0x72')]||_0x25e1('0x62'))[_0x25e1('0x13')](function(_0x18eb4f){_0x5cacc8(null,_0x18eb4f);})[_0x25e1('0x11')](function(_0x236b5b){_0x5cacc8(_0x236b5b);});};AGIVertices[_0x25e1('0xe')][_0x25e1('0x73')]=function(_0xd7d1d,_0x556da6,_0x5bbefc){scripts['tildeASR'](_0x556da6,_0xd7d1d[_0x25e1('0x74')],_0xd7d1d['appsecret'],_0xd7d1d['uri'])['then'](function(_0x588d84){_0x5bbefc(null,_0x588d84);})[_0x25e1('0x11')](function(_0x3fa39f){_0x5bbefc(_0x3fa39f);});};AGIVertices['prototype'][_0x25e1('0x75')]=function(_0x3ffc50){var _0x50beb1=_[_0x25e1('0x76')](verticesWithRetry,_0x3ffc50['agicommand'])?_0x3ffc50:_[_0x25e1('0x77')](_0x3ffc50);for(var _0xc4cd63 in _0x50beb1){if(_0x50beb1[_0x25e1('0x78')](_0xc4cd63)){if(_0x50beb1[_0xc4cd63]&&_[_0x25e1('0x79')](_0x50beb1[_0xc4cd63])){_0x50beb1[_0xc4cd63]=this['replaceAllVariables'](_0x50beb1[_0xc4cd63]);}}}return _0x50beb1;};AGIVertices[_0x25e1('0xe')][_0x25e1('0x7a')]=function(_0x27442c){var _0x43a68c=_0x27442c[_0x25e1('0x7b')]('{');for(var _0x14ab00=0x1;_0x14ab00<_0x43a68c['length'];_0x14ab00+=0x1){var _0x274acf=_0x43a68c[_0x14ab00][_0x25e1('0x7b')]('}');if(_0x274acf[_0x25e1('0x7c')]>0x1){_0x27442c=_0x27442c[_0x25e1('0x7d')]('{'+_0x274acf[0x0]+'}',this['channel'][_0x25e1('0xf')](_0x274acf[0x0])[_0x25e1('0x7e')]||_0x274acf[0x0]);}}if(_0x43a68c[_0x25e1('0x7c')]===0x1){return _0x27442c['toString']();}return this[_0x25e1('0x7a')](_0x27442c);};AGIVertices[_0x25e1('0xe')][_0x25e1('0x7f')]=function(_0x5e136b,_0x34871f){var _0x1ff486=this[_0x25e1('0xd')][_0x25e1('0xf')](_0x5e136b);if(_0x1ff486[_0x25e1('0x80')]===-0x1){return _0x1ff486;}logger['info'](util['format']('The\x20\x22%s\x22\x20variable\x20value\x20is:\x20%s',_0x34871f,_0x1ff486[_0x25e1('0x7e')]));return this[_0x25e1('0xd')][_0x25e1('0x81')](_0x34871f,_0x1ff486[_0x25e1('0x7e')]);};AGIVertices['prototype']['isConfigured']=function(_0xd26ff1){return _0xd26ff1&&_0xd26ff1!=='0'&&_0xd26ff1!=='-1'&&_0xd26ff1!=='';};AGIVertices['prototype'][_0x25e1('0x82')]=function(_0x5c68e7){this[_0x25e1('0x36')][_0x25e1('0x83')](this,_0x5c68e7,'-');_0x5c68e7[_0x25e1('0x84')]=_0x5c68e7['maxRetry'];return{'code':0xc8,'result':'-'};};AGIVertices['prototype'][_0x25e1('0x6')]=function(_0x5ee607){logger[_0x25e1('0x2f')](util['format']('Enter\x20in\x20AGI\x20(%s)\x20block',_0x5ee607[_0x25e1('0x38')]));return this[_0x25e1('0xd')]['agi']([_0x5ee607['command'],_0x5ee607['args']]);};AGIVertices['prototype'][_0x25e1('0x85')]=function(_0x14ccc0){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x86'),_0x14ccc0[_0x25e1('0x38')]));if(this['isConfigured'](_0x14ccc0['timeout'])){logger['info'](util[_0x25e1('0x28')](_0x25e1('0x87'),_0x14ccc0[_0x25e1('0x88')]));var _0x41c558=this[_0x25e1('0xd')][_0x25e1('0x89')](_0x14ccc0['timeout']);if(_0x41c558[_0x25e1('0x80')]===-0x1){return _0x41c558;}}return this[_0x25e1('0xd')][_0x25e1('0x85')]();};AGIVertices[_0x25e1('0xe')][_0x25e1('0x4d')]=function(_0x1602cb){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('Enter\x20in\x20CALLBACK\x20(%s)\x20block',_0x1602cb[_0x25e1('0x38')]));if(!this['isConfigured'](_0x1602cb[_0x25e1('0x4b')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x1602cb,_0x25e1('0x8a'));}_0x1602cb['scheduledAt']=moment();if(this[_0x25e1('0x8b')](_0x1602cb[_0x25e1('0x8c')])){_0x1602cb[_0x25e1('0x4c')]=moment()['add'](_0x1602cb['delay'],_0x25e1('0x8d'));}if(!this['isConfigured'](_0x1602cb[_0x25e1('0x50')])){_0x1602cb[_0x25e1('0x50')]=0x2;}this[_0x25e1('0x44')][_0x25e1('0x83')](this,_0x1602cb);return this['channel']['noop'](util['format']('CALLBACK\x20added\x20phone:\x20%s\x20on\x20list:\x20%s\x20at\x20%s',_0x1602cb['phone'],_0x1602cb[_0x25e1('0x4b')],_0x1602cb['scheduledAt']));};AGIVertices[_0x25e1('0xe')]['custom_app']=function(_0x522950){logger['info'](util['format'](_0x25e1('0x8e'),_0x522950[_0x25e1('0x38')]));var _0x593e18=this[_0x25e1('0xd')]['exec'](_0x522950['application'],_0x522950[_0x25e1('0x8f')]);if(_0x593e18[_0x25e1('0x80')]===-0x1){return _0x593e18;}return this['channel'][_0x25e1('0x90')](util['format']('Executed\x20command\x20%s\x20%s',_0x522950[_0x25e1('0x91')],_0x522950[_0x25e1('0x8f')]));};AGIVertices['prototype'][_0x25e1('0x92')]=function(_0x34f324){logger[_0x25e1('0x2f')](util['format'](_0x25e1('0x93'),_0x34f324['label']));if(!this['isConfigured'](_0x34f324['text'])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x94'));}var _0x2b3f13='\x22'+_0x34f324[_0x25e1('0x5c')]+'\x22';if(this[_0x25e1('0x8b')](_0x34f324['options'])){_0x2b3f13+=','+_0x34f324[_0x25e1('0x8f')];}var _0x3c6a47=this['channel'][_0x25e1('0x59')](_0x25e1('0x95'),_0x2b3f13);if(_0x3c6a47[_0x25e1('0x80')]===-0x1){return _0x3c6a47;}return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x96'),_0x2b3f13));};AGIVertices[_0x25e1('0xe')][_0x25e1('0x97')]=function(_0xb2c670){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x98'),_0xb2c670[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0xb2c670[_0x25e1('0x5c')])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x94'));}var _0x4a828e='\x22'+_0xb2c670[_0x25e1('0x5c')]+'\x22';if(this[_0x25e1('0x8b')](_0xb2c670[_0x25e1('0x8f')])){_0x4a828e+=','+_0xb2c670['options'];}var _0x26a789=this[_0x25e1('0xd')][_0x25e1('0x59')](_0x25e1('0x95'),_0x4a828e);if(_0x26a789[_0x25e1('0x80')]===-0x1){return _0x26a789;}return this[_0x25e1('0xd')]['noop'](util['format']('Executed\x20command\x20MRCPSynth\x20%s',_0x4a828e));};AGIVertices[_0x25e1('0xe')][_0x25e1('0x99')]=function(_0x4528eb){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x9a'),_0x4528eb['label']));if(!this[_0x25e1('0x8b')](_0x4528eb['grammar'])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x9b'));}var _0x4ce8ce=_0x4528eb[_0x25e1('0x9c')];if(this[_0x25e1('0x8b')](_0x4528eb[_0x25e1('0x8f')])){_0x4ce8ce+=','+_0x4528eb[_0x25e1('0x8f')];}var _0x4ddf53=this[_0x25e1('0xd')][_0x25e1('0x59')](_0x25e1('0x9d'),_0x4ce8ce);if(_0x4ddf53[_0x25e1('0x80')]===-0x1){return _0x4ddf53;}var _0x1e009c=this[_0x25e1('0x7f')](_0x25e1('0x9e'),'LUMENVOX_ASR_CONFIDENCE');if(_0x1e009c[_0x25e1('0x80')]===-0x1){return _0x1e009c;}var _0x323522=this[_0x25e1('0x7f')](_0x25e1('0x9f'),'LUMENVOX_ASR_TRANSCRIPT');if(_0x323522['result']===-0x1){return _0x323522;}var _0x3540c9=this[_0x25e1('0x7f')](_0x25e1('0xa0'),'LUMENVOX_ASR_INSTANCE');if(_0x3540c9[_0x25e1('0x80')]===-0x1){return _0x3540c9;}return this['channel'][_0x25e1('0x90')](util[_0x25e1('0x28')]('Executed\x20command\x20MRCPRecog\x20%s',_0x4ce8ce));};AGIVertices['prototype']['sestekasr']=function(_0xcc5cf4){logger[_0x25e1('0x2f')](util['format'](_0x25e1('0xa1'),_0xcc5cf4[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0xcc5cf4['grammar'])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x9b'));}var _0x570169=_0xcc5cf4['grammar'];if(this['isConfigured'](_0xcc5cf4[_0x25e1('0x8f')])){_0x570169+=','+_0xcc5cf4[_0x25e1('0x8f')];}var _0xe23d4d=this[_0x25e1('0xd')][_0x25e1('0x59')](_0x25e1('0x9d'),_0x570169);if(_0xe23d4d[_0x25e1('0x80')]===-0x1){return _0xe23d4d;}var _0x320909=this[_0x25e1('0x7f')](_0x25e1('0x9e'),_0x25e1('0xa2'));if(_0x320909[_0x25e1('0x80')]===-0x1){return _0x320909;}var _0x725d69=this['getAndSetVariable'](_0x25e1('0x9f'),_0x25e1('0xa3'));if(_0x725d69[_0x25e1('0x80')]===-0x1){return _0x725d69;}var _0xe00e37=this[_0x25e1('0x7f')]('RECOG_INSTANCE()',_0x25e1('0xa4'));if(_0xe00e37['result']===-0x1){return _0xe00e37;}return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0xa5'),_0x570169));};AGIVertices[_0x25e1('0xe')][_0x25e1('0xa6')]=function(_0x12040f){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('Enter\x20in\x20DATABASE\x20(%s)\x20block',_0x12040f['label']));if(!this[_0x25e1('0x8b')](_0x12040f[_0x25e1('0xa7')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x12040f,_0x25e1('0xa8'));}var _0x6142e1=this[_0x25e1('0x16')][_0x25e1('0x83')](this,_0x12040f['odbc_id']);if(!_0x6142e1){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x12040f,_0x25e1('0xa9'));}if(!this[_0x25e1('0x8b')](_0x12040f['query'])){return this['channel'][_0x25e1('0x2b')](_0x12040f,'no\x20query\x20configured');}var _0x1a81e9=_0x12040f[_0x25e1('0x2e')]['replace'](/(\r\n|\n|\r)/gm,'\x20');this['channel'][_0x25e1('0x90')](util['format'](_0x25e1('0xaa'),_0x1a81e9));var _0x42bc7f=this[_0x25e1('0x29')][_0x25e1('0x83')](this,_0x6142e1,_0x1a81e9);this['createSquareDetailsReport'][_0x25e1('0x83')](this,_0x12040f,_0x1a81e9);if(!this[_0x25e1('0x8b')](_0x12040f['variable_id'])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0xab'));}var _0x21fbaf=this[_0x25e1('0xf')][_0x25e1('0x83')](this,_0x12040f[_0x25e1('0xac')]);if(!_0x21fbaf){return this['channel'][_0x25e1('0x2b')](_0x12040f,'no\x20variable\x20found');}var _0x3363fc=this;_0x42bc7f[_0x25e1('0xad')](function(_0x200a90,_0x3bb500){Object[_0x25e1('0xae')](_0x200a90)['forEach'](function(_0x262da9){_0x3363fc[_0x25e1('0xd')][_0x25e1('0x81')](util[_0x25e1('0x28')](_0x25e1('0xaf'),_0x21fbaf,_0x3bb500,_0x262da9),_0x200a90[_0x262da9]);});});this[_0x25e1('0xd')][_0x25e1('0x81')](util[_0x25e1('0x28')](_0x25e1('0xb0'),_0x21fbaf),_0x42bc7f[_0x25e1('0x7c')]);return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')]('variable\x20%s\x20set',_0x21fbaf));};AGIVertices['prototype'][_0x25e1('0xb1')]=function(_0x51cb99){logger[_0x25e1('0xb2')](util[_0x25e1('0x28')]('Enter\x20in\x20DIAL\x20(%s)\x20block',_0x51cb99[_0x25e1('0x38')]));if(!this['isConfigured'](_0x51cb99[_0x25e1('0xb3')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x51cb99,_0x25e1('0xb4'));}var _0x3febe4=this[_0x25e1('0x19')]['sync'](this,_0x51cb99[_0x25e1('0xb3')]);if(!_0x3febe4){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x51cb99,_0x25e1('0xb5'));}var _0x450ace=this['channel'][_0x25e1('0x59')](_0x25e1('0xb6'),[util['format'](_0x25e1('0xb7'),_0x3febe4),_0x51cb99['timeout'],_0x51cb99[_0x25e1('0xb8')],_0x51cb99[_0x25e1('0xb9')]]);if(_0x450ace[_0x25e1('0x80')]===-0x1){return _0x450ace;}return this[_0x25e1('0xd')][_0x25e1('0x90')](util['format'](_0x25e1('0xba'),_0x25e1('0xb6')));};AGIVertices[_0x25e1('0xe')][_0x25e1('0xbb')]=function(_0x17e42f){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('Enter\x20in\x20DIALOGFLOW\x20(%s)\x20block',_0x17e42f['label']));if(!this['isConfigured'](_0x17e42f[_0x25e1('0x5e')])){return this['channel'][_0x25e1('0x90')](_0x25e1('0xbc'));}if(!this[_0x25e1('0x8b')](_0x17e42f['text'])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x94'));}this[_0x25e1('0xd')][_0x25e1('0xbd')]=!![];this[_0x25e1('0x36')](_0x17e42f);this['createSquareMessage'](_0x17e42f[_0x25e1('0x5c')],'in');this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')]('Trying\x20Dialogflow:\x20%s',_0x17e42f['text']));var _0x11f925=this['googleDialogflow'][_0x25e1('0x83')](this,_0x17e42f);if(_0x11f925){for(var _0x13c1b7 in _0x11f925){if(_0x11f925[_0x25e1('0x78')](_0x13c1b7)){this[_0x25e1('0xd')][_0x25e1('0x81')](util[_0x25e1('0x28')](_0x25e1('0xbe'),_0x13c1b7['toUpperCase']()),_0x11f925[_0x13c1b7]);}}this[_0x25e1('0x43')](_0x11f925[_0x25e1('0xbf')],_0x25e1('0xc0'));return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0xc1'),_0x11f925[_0x25e1('0xbf')]));}return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x17e42f,_0x25e1('0xc2'));};AGIVertices[_0x25e1('0xe')][_0x25e1('0xc3')]=function(_0x1a0402){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0xc4'),_0x1a0402[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x1a0402[_0x25e1('0xc5')])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0xc6'));}if(!this['isConfigured'](_0x1a0402[_0x25e1('0xc7')])){return this['channel'][_0x25e1('0x90')](_0x25e1('0xc8'));}if(!this[_0x25e1('0x8b')](_0x1a0402[_0x25e1('0xc9')])){return this[_0x25e1('0xd')]['noop'](_0x25e1('0xca'));}if(!this[_0x25e1('0x8b')](_0x1a0402['ndassistant_url'])){return this[_0x25e1('0xd')]['noop'](_0x25e1('0x94'));}this['channel'][_0x25e1('0xbd')]=!![];this[_0x25e1('0x36')](_0x1a0402);this[_0x25e1('0x43')](_0x1a0402[_0x25e1('0x5c')],'in');this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0xcb'),_0x1a0402[_0x25e1('0x5c')]));var _0xcb108c=this['sestekNDA'][_0x25e1('0x83')](this,_0x1a0402);if(_0xcb108c){for(var _0x2febf4 in _0xcb108c){if(_0xcb108c[_0x25e1('0x78')](_0x2febf4)){this[_0x25e1('0xd')][_0x25e1('0x81')](util[_0x25e1('0x28')]('SESTEK_NDA_%s',_0x2febf4['toUpperCase']()),_0xcb108c[_0x2febf4]);}}this[_0x25e1('0x43')](_0xcb108c[_0x25e1('0xbf')],'out');if(_0xcb108c[_0x25e1('0xcc')]){this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0xcd'),_0xcb108c['audiofile']));var _0x6d00db=this['channel'][_0x25e1('0xce')](_0xcb108c[_0x25e1('0xcc')]);try{fs[_0x25e1('0xcf')](_0xcb108c[_0x25e1('0xcc')]+_0x25e1('0xd0'));}catch(_0x3922d0){logger[_0x25e1('0x2b')](_0x3922d0);}return _0x6d00db;}else{return this[_0x25e1('0xd')][_0x25e1('0x90')](util['format'](_0x25e1('0xd1'),_0xcb108c[_0x25e1('0xbf')]));}}return this[_0x25e1('0xd')]['error'](_0x1a0402,_0x25e1('0xd2'));};AGIVertices[_0x25e1('0xe')][_0x25e1('0xd3')]=function(_0x3b1baf){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0xd4'),_0x3b1baf[_0x25e1('0x38')]));return this[_0x25e1('0xd')]['noop'](_0x25e1('0xd3'));};AGIVertices['prototype']['ext_dial']=function(_0x352f0b){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0xd5'),_0x352f0b[_0x25e1('0x38')]));var _0xc9c9f7='';if(_0x352f0b[_0x25e1('0xd6')]){if(!this['isConfigured'](_0x352f0b[_0x25e1('0xd6')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x352f0b,_0x25e1('0xd7'));}else{var _0x4bbf88=parseInt(_0x352f0b[_0x25e1('0xd6')],0xa);if(isNaN(_0x4bbf88)){_0xc9c9f7=_0x352f0b[_0x25e1('0xd6')];}else{_0xc9c9f7=this[_0x25e1('0x1b')]['sync'](this,_0x352f0b[_0x25e1('0xd6')]);if(!_0xc9c9f7){return this['channel'][_0x25e1('0x2b')](_0x352f0b,_0x25e1('0xd8'));}}}}else if(_0x352f0b[_0x25e1('0xd9')]){_0xc9c9f7=_0x352f0b[_0x25e1('0xd9')];}else{return this['channel'][_0x25e1('0x2b')](_0x352f0b,'no\x20trunk\x20selected');}var _0x5bc123=this['channel']['exec'](_0x25e1('0xb6'),[util['format'](_0x25e1('0xda'),_0xc9c9f7,_0x352f0b[_0x25e1('0x4a')]),_0x352f0b['timeout'],_0x352f0b[_0x25e1('0xb8')],_0x352f0b[_0x25e1('0xb9')]]);if(_0x5bc123[_0x25e1('0x80')]===-0x1){return _0x5bc123;}return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')]('Executed\x20command\x20%s',_0x25e1('0xb6')));};AGIVertices[_0x25e1('0xe')][_0x25e1('0xdb')]=function(_0x403596){logger[_0x25e1('0x2f')](util['format'](_0x25e1('0xdc'),_0x403596['label']));return this[_0x25e1('0xd')][_0x25e1('0x90')]('finally');};AGIVertices['prototype'][_0x25e1('0xb')]=function(_0x5382bf){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0xdd'),_0x5382bf[_0x25e1('0x38')]));if(_0x5382bf[_0x25e1('0x84')]===0x0){return this[_0x25e1('0x82')](_0x5382bf);}_0x5382bf['retry']-=0x1;if(!this['isConfigured'](_0x5382bf['file_id'])){return this['channel'][_0x25e1('0x2b')](_0x5382bf,_0x25e1('0xde'));}var _0x28c1ce=this[_0x25e1('0xdf')][_0x25e1('0x83')](this,_0x5382bf['file_id']);if(!_0x28c1ce){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x5382bf,_0x25e1('0xe0'));}if(!this['isConfigured'](_0x5382bf[_0x25e1('0xac')])){return this[_0x25e1('0xd')]['error'](_0x25e1('0xab'));}var _0x4dbc90=this['channel'][_0x25e1('0xe1')](_0x28c1ce,_0x5382bf[_0x25e1('0xe2')],_0x5382bf[_0x25e1('0xe3')]);var _0x29454d=_0x4dbc90[_0x25e1('0x80')]?_0x4dbc90[_0x25e1('0x80')]['toString']():'';logger[_0x25e1('0x2f')](_0x25e1('0xe4'),JSON[_0x25e1('0xe5')](_0x4dbc90));if(_0x4dbc90['result']===-0x1){this[_0x25e1('0x36')]['sync'](this,_0x5382bf,_0x29454d);return _0x4dbc90;}else if(_0x4dbc90[_0x25e1('0x7e')]===_0x25e1('0x88')){_0x4dbc90[_0x25e1('0x80')]=_0x29454d[_0x25e1('0x7c')]>=parseInt(_0x5382bf[_0x25e1('0xe6')])?'x':'i';}else{_0x4dbc90[_0x25e1('0x80')]=_0x29454d[_0x25e1('0x7c')]>=parseInt(_0x5382bf[_0x25e1('0xe6')])&&_0x29454d[_0x25e1('0x7c')]<=parseInt(_0x5382bf[_0x25e1('0xe3')])?'x':'i';}var _0x17a983=this[_0x25e1('0xf')]['sync'](this,_0x5382bf[_0x25e1('0xac')]);if(!_0x17a983){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x5382bf,_0x25e1('0xe7'));}this[_0x25e1('0xd')][_0x25e1('0x81')](_0x17a983,_0x29454d);if(this[_0x25e1('0x8b')](_0x5382bf['hiddendigitsnum'])){var _0x46345=parseInt(_0x5382bf[_0x25e1('0xe8')],0xa);var _0x9f7eb3=rs[_0x25e1('0xe9')]({'charset':'*','length':_0x46345});var _0xfdd5eb=_0x29454d[_0x25e1('0x7c')];if(_0xfdd5eb>0x0){if(_0xfdd5eb>_0x46345){this[_0x25e1('0x36')][_0x25e1('0x83')](this,_0x5382bf,_0x5382bf['hiddendigitspos']===_0x25e1('0xea')?_0x9f7eb3+_0x29454d[_0x25e1('0xeb')](_0x46345):_0x29454d['substr'](0x0,_0xfdd5eb-_0x46345)+_0x9f7eb3);}else{this[_0x25e1('0x36')][_0x25e1('0x83')](this,_0x5382bf,rs[_0x25e1('0xe9')]({'charset':'*','length':_0xfdd5eb}));}}else{this[_0x25e1('0x36')][_0x25e1('0x83')](this,_0x5382bf,'');}}else{this[_0x25e1('0x36')][_0x25e1('0x83')](this,_0x5382bf,_0x29454d);}return _0x4dbc90;};AGIVertices[_0x25e1('0xe')][_0x25e1('0xc')]=function(_0x577833){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0xec'),_0x577833[_0x25e1('0x38')]));return this['getdigits'](_0x577833);};AGIVertices[_0x25e1('0xe')]['goal']=function(_0x382c11){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0xed'),_0x382c11[_0x25e1('0x38')]));this[_0x25e1('0x36')][_0x25e1('0x83')](this,_0x382c11,_0x382c11[_0x25e1('0xee')]);return this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')]('GOAL\x20%s',_0x382c11[_0x25e1('0xee')]));};AGIVertices[_0x25e1('0xe')][_0x25e1('0xef')]=function(_0x5b56e9){logger['info'](util['format'](_0x25e1('0xf0'),_0x5b56e9[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x5b56e9['aws_access_key_id'])||!this[_0x25e1('0x8b')](_0x5b56e9[_0x25e1('0x69')])){return this[_0x25e1('0xd')][_0x25e1('0x90')]('no\x20valid\x20credentials\x20configured');}if(!this[_0x25e1('0x8b')](_0x5b56e9[_0x25e1('0x5c')])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x94'));}this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')]('Trying\x20aws\x20Polly\x20%s',_0x5b56e9[_0x25e1('0x5c')]));var _0x4c4a1c=this[_0x25e1('0x67')][_0x25e1('0x83')](this,_0x5b56e9);if(_0x4c4a1c){this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')]('aws\x20Polly\x20%s\x20file\x20created',_0x4c4a1c));var _0x45be6a=this['channel'][_0x25e1('0xce')](_0x4c4a1c);try{fs[_0x25e1('0xcf')](_0x4c4a1c+_0x25e1('0xd0'));}catch(_0x55e745){logger[_0x25e1('0x2b')](_0x55e745);}return _0x45be6a;}return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x5b56e9,_0x25e1('0xf1'));};AGIVertices[_0x25e1('0xe')][_0x25e1('0xf2')]=function(_0x5a7d9e){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0xf3'),_0x5a7d9e[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x5a7d9e[_0x25e1('0x68')])||!this['isConfigured'](_0x5a7d9e['aws_secret_access_key'])){return this[_0x25e1('0xd')]['noop'](_0x25e1('0xf4'));}if(!this['isConfigured'](_0x5a7d9e['aws_bot_name'])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0xf5'));}if(!this[_0x25e1('0x8b')](_0x5a7d9e[_0x25e1('0x5c')])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x94'));}this['channel']['bot']=!![];this[_0x25e1('0x36')](_0x5a7d9e);this['createSquareMessage'](_0x5a7d9e['text'],'in');this[_0x25e1('0xd')][_0x25e1('0x90')](util['format'](_0x25e1('0xf6'),_0x5a7d9e['text']));var _0x1b9b9d=this[_0x25e1('0x6e')]['sync'](this,_0x5a7d9e);if(_0x1b9b9d){for(var _0x30c14c in _0x1b9b9d){if(_0x1b9b9d[_0x25e1('0x78')](_0x30c14c)&&_[_0x25e1('0x79')](_0x1b9b9d[_0x30c14c])){this[_0x25e1('0xd')][_0x25e1('0x81')](util[_0x25e1('0x28')]('AWS_LEX_%s',_0x30c14c[_0x25e1('0xf7')]()),_0x1b9b9d[_0x30c14c]);}}if(_['isNil'](_0x1b9b9d[_0x25e1('0xf8')])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0xf9'));}else{this[_0x25e1('0x43')](_0x1b9b9d[_0x25e1('0xf8')],_0x25e1('0xc0'));return this['channel'][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0xfa'),_0x1b9b9d['message']));}}return this['channel'][_0x25e1('0x2b')](_0x5a7d9e,_0x25e1('0xfb'));};AGIVertices[_0x25e1('0xe')][_0x25e1('0xfc')]=function(_0x4af0ab){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0xfd'),_0x4af0ab[_0x25e1('0x38')],_0x4af0ab[_0x25e1('0x88')]));if(!this[_0x25e1('0x8b')](_0x4af0ab[_0x25e1('0x5e')])){return this['channel']['noop'](_0x25e1('0xbc'));}var _0x1582d7=_0x25e1('0xfe');var _0x4d619d=util[_0x25e1('0x28')](_0x25e1('0xff'),FILES_PATH,rs[_0x25e1('0xe9')](0x4));var _0x4e73e0=util['format'](_0x25e1('0x100'),_0x4d619d,_0x1582d7);var _0x28ff6d=!![];if(_0x4af0ab[_0x25e1('0x101')]===_0x25e1('0x102')){_0x28ff6d=![];}var _0x2051e1=this['channel']['recordFile'](_0x4d619d,_0x1582d7,_0x4af0ab[_0x25e1('0x103')],_0x4af0ab[_0x25e1('0x88')],undefined,_0x28ff6d);if(_0x2051e1[_0x25e1('0x80')]!==-0x1){this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')]('google\x20%s\x20file\x20created',_0x4e73e0));var _0x4306ab=this[_0x25e1('0x71')][_0x25e1('0x83')](this,_0x4af0ab,_0x4e73e0);if(_0x4306ab){for(var _0x2fa071 in _0x4306ab){if(_0x4306ab['hasOwnProperty'](_0x2fa071)){this['channel'][_0x25e1('0x81')](util[_0x25e1('0x28')](_0x25e1('0x104'),_0x2fa071[_0x25e1('0xf7')]()),_0x4306ab[_0x2fa071]);}}return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x105'),JSON['stringify'](_0x4306ab)));}}return _0x2051e1;};AGIVertices[_0x25e1('0xe')]['tildeasr']=function(_0x20a3b2){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x106'),_0x20a3b2[_0x25e1('0x38')]));if(!this['isConfigured'](_0x20a3b2[_0x25e1('0x74')])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x107'));}if(!this[_0x25e1('0x8b')](_0x20a3b2[_0x25e1('0x108')])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x109'));}var _0x3bb3ee=_0x25e1('0xfe');var _0x1ac0b6=util[_0x25e1('0x28')](_0x25e1('0xff'),FILES_PATH,rs['generate'](0x4));var _0x23d17c=util[_0x25e1('0x28')](_0x25e1('0x100'),_0x1ac0b6,_0x3bb3ee);var _0x29aa94=!![];if(_0x20a3b2['beep']===_0x25e1('0x102')){_0x29aa94=![];}var _0x5483cd=this['channel'][_0x25e1('0x10a')](_0x1ac0b6,_0x3bb3ee,_0x20a3b2[_0x25e1('0x103')],_0x20a3b2[_0x25e1('0x88')],undefined,_0x29aa94);if(_0x5483cd[_0x25e1('0x80')]!==-0x1){this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x10b'),_0x23d17c));var _0x33a222=this['tildeASR'][_0x25e1('0x83')](this,_0x20a3b2,_0x23d17c);if(_0x33a222){for(var _0x47ad6e in _0x33a222){if(_0x33a222[_0x25e1('0x78')](_0x47ad6e)){this[_0x25e1('0xd')][_0x25e1('0x81')](util[_0x25e1('0x28')](_0x25e1('0x10c'),_0x47ad6e[_0x25e1('0xf7')]()),_0x33a222[_0x47ad6e]);}}return this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')]('TildeASR\x20Result\x20%s',JSON[_0x25e1('0xe5')](_0x33a222)));}}return _0x5483cd;};AGIVertices[_0x25e1('0xe')][_0x25e1('0x10d')]=function(_0x144f93){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('Enter\x20in\x20GOTO\x20(%s)\x20block',_0x144f93['label']));return this[_0x25e1('0xd')][_0x25e1('0x10e')](_0x144f93[_0x25e1('0x3e')],_0x144f93[_0x25e1('0x3f')],_0x144f93[_0x25e1('0x10f')]);};AGIVertices['prototype'][_0x25e1('0x110')]=function(_0x8caf46){logger['info'](util['format'](_0x25e1('0x111'),_0x8caf46[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x8caf46[_0x25e1('0x112')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x8caf46,_0x25e1('0x113'));}try{var _0x387545=eval(_0x8caf46[_0x25e1('0x112')])?'true':'false';this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x114'),_0x8caf46[_0x25e1('0x112')],_0x387545));return{'code':0xc8,'result':_0x387545};}catch(_0x24f7c6){return{'code':0xc8,'result':_0x25e1('0x115')};}};AGIVertices[_0x25e1('0xe')][_0x25e1('0x116')]=function(_0x31cc80){logger['info'](util['format'](_0x25e1('0x117'),_0x31cc80[_0x25e1('0x38')]));if(!this['isConfigured'](_0x31cc80['interval_id'])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x31cc80,_0x25e1('0x118'));}var _0x5e6abb=this['getIntervals'][_0x25e1('0x83')](this,_0x31cc80['interval_id']);if(!_0x5e6abb){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x31cc80,_0x25e1('0x119'));}for(var _0x1c1364=0x0;_0x1c1364<_0x5e6abb[_0x25e1('0x7c')];_0x1c1364+=0x1){var _0xadc66b=this[_0x25e1('0xd')]['getVariable'](util[_0x25e1('0x28')](_0x25e1('0x11a'),_0x5e6abb[_0x1c1364]));if(_0xadc66b[_0x25e1('0x80')]===-0x1){return _0xadc66b;}logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('IFTIME\x20%s\x20%s',_0x5e6abb[_0x1c1364],_0xadc66b[_0x25e1('0x7e')]));if(_0xadc66b[_0x25e1('0x7e')]==='true'){logger['info'](util['format'](_0x25e1('0x11b'),_0x5e6abb[_0x1c1364],_0x25e1('0x11c')));this[_0x25e1('0xd')][_0x25e1('0x90')](util['format']('IFTIME\x20%s\x20%s',_0x5e6abb[_0x1c1364],'true'));return{'code':0xc8,'result':_0x25e1('0x11c')};}else{logger['info'](util[_0x25e1('0x28')]('IFTIME\x20%s\x20%s',_0x5e6abb[_0x1c1364],_0x25e1('0x115')));this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')]('IFTIME\x20%s\x20%s',_0x5e6abb[_0x1c1364],_0x25e1('0x115')));}}return{'code':0xc8,'result':_0x25e1('0x115')};};AGIVertices[_0x25e1('0xe')][_0x25e1('0x11d')]=function(_0xc78d54){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x11e'),_0xc78d54['label']));return this[_0x25e1('0xd')][_0x25e1('0x11d')]();};AGIVertices[_0x25e1('0xe')][_0x25e1('0x11f')]=function(_0x5a39f8){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('Enter\x20in\x20ISPEECHASR\x20(%s)\x20block',_0x5a39f8[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x5a39f8[_0x25e1('0x5e')])){return this[_0x25e1('0xd')]['noop'](_0x25e1('0xbc'));}var _0x1c4398='wav';var _0x146932=util[_0x25e1('0x28')](_0x25e1('0xff'),FILES_PATH,rs[_0x25e1('0xe9')](0x4));var _0x2a3c45=util['format']('%s.%s',_0x146932,_0x1c4398);var _0x4e63c0=!![];if(_0x5a39f8[_0x25e1('0x101')]===_0x25e1('0x102')){_0x4e63c0=![];}var _0xc4190f=this[_0x25e1('0xd')][_0x25e1('0x10a')](_0x146932,_0x1c4398,_0x5a39f8[_0x25e1('0x103')],_0x5a39f8['timeout'],undefined,_0x4e63c0);if(_0xc4190f[_0x25e1('0x80')]!==-0x1){this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')]('ispeech\x20%s\x20file\x20created',_0x2a3c45));var _0x1ef178=this[_0x25e1('0x64')][_0x25e1('0x83')](this,_0x5a39f8,_0x2a3c45);if(_0x1ef178){for(var _0x568eb6 in _0x1ef178){if(_0x1ef178['hasOwnProperty'](_0x568eb6)){this[_0x25e1('0xd')][_0x25e1('0x81')](util[_0x25e1('0x28')](_0x25e1('0x120'),_0x568eb6[_0x25e1('0xf7')]()),_0x1ef178[_0x568eb6]);}}return this[_0x25e1('0xd')][_0x25e1('0x90')](util['format'](_0x25e1('0x121'),JSON[_0x25e1('0xe5')](_0x1ef178)));}}return _0xc4190f;};AGIVertices[_0x25e1('0xe')][_0x25e1('0x122')]=function(_0x18d221){logger[_0x25e1('0x2f')](util['format'](_0x25e1('0x123'),_0x18d221[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x18d221['key'])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0xbc'));}if(!this['isConfigured'](_0x18d221[_0x25e1('0x5c')])){return this[_0x25e1('0xd')][_0x25e1('0x90')]('no\x20text\x20configured');}this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x124'),_0x18d221[_0x25e1('0x5c')]));var _0x5f5735=this[_0x25e1('0x60')][_0x25e1('0x83')](this,_0x18d221);if(_0x5f5735){this['channel'][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x125'),_0x5f5735));var _0x569954=this['channel'][_0x25e1('0xce')](_0x5f5735,_0x18d221[_0x25e1('0x103')]);try{fs[_0x25e1('0xcf')](_0x5f5735+'.wav');}catch(_0x5ca5e2){logger[_0x25e1('0x2b')](_0x5ca5e2);}return _0x569954;}return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x18d221,_0x25e1('0x126'));};AGIVertices[_0x25e1('0xe')][_0x25e1('0x127')]=function(_0x9863e0){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x128'),_0x9863e0[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x9863e0[_0x25e1('0x129')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x9863e0,_0x25e1('0x12a'));}logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x12b'),this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x9863e0[_0x25e1('0x129')]));var _0x39c966=this[_0x25e1('0x56')][_0x25e1('0x83')](this,_0x9863e0['findBy']);if(_0x39c966){logger['info'](util[_0x25e1('0x28')](_0x25e1('0x12c'),this['channel'][_0x25e1('0x3b')],_0x9863e0[_0x25e1('0x129')]));this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')](_0x25e1('0x12c'),this[_0x25e1('0xd')]['callerid'],_0x9863e0['findBy']));return{'code':0xc8,'result':'success'};}else{logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x12d'),this[_0x25e1('0xd')]['callerid'],_0x9863e0[_0x25e1('0x129')]));this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')](_0x25e1('0x12d'),this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x9863e0[_0x25e1('0x129')]));return{'code':0xc8,'result':_0x25e1('0x12e')};}};AGIVertices[_0x25e1('0xe')][_0x25e1('0x12f')]=function(_0x39d3e7){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x130'),_0x39d3e7['label']));if(!this[_0x25e1('0x8b')](_0x39d3e7['findBy'])){return this[_0x25e1('0xd')]['error'](_0x39d3e7,'no\x20find\x20by\x20configured');}logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('FIND\x20AGENT\x20%s\x20BY\x20%s',this[_0x25e1('0xd')]['callerid'],_0x39d3e7[_0x25e1('0x129')]));var _0x5edc3d=this[_0x25e1('0x55')][_0x25e1('0x83')](this,_0x39d3e7[_0x25e1('0x129')]);if(_0x5edc3d){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x12c'),this[_0x25e1('0xd')]['callerid'],_0x39d3e7[_0x25e1('0x129')]));this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')]('AGENT\x20%s\x20FOUND\x20BY',this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x39d3e7[_0x25e1('0x129')]));return{'code':0xc8,'result':'success'};}else{logger[_0x25e1('0x2f')](util['format'](_0x25e1('0x12d'),this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x39d3e7['findBy']));this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')](_0x25e1('0x12d'),this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x39d3e7[_0x25e1('0x129')]));return{'code':0xc8,'result':'failure'};}};AGIVertices[_0x25e1('0xe')][_0x25e1('0x131')]=function(_0x181564){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x132'),_0x181564[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x181564[_0x25e1('0x133')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x181564,_0x25e1('0x134'));}this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x135'),_0x181564[_0x25e1('0x133')]));var _0x47cd89=eval(_0x181564[_0x25e1('0x133')]);if(!this[_0x25e1('0x8b')](_0x181564[_0x25e1('0xac')])){return this['channel'][_0x25e1('0x90')](_0x25e1('0xab'));}var _0x57708a=this[_0x25e1('0xf')][_0x25e1('0x83')](this,_0x181564['variable_id']);if(!_0x57708a){return this['channel'][_0x25e1('0x2b')](_0x181564,_0x25e1('0xe7'));}if(_[_0x25e1('0x136')](_0x47cd89)){var _0x4f4864=this;_0x47cd89[_0x25e1('0xad')](function(_0x19e8b2,_0x2cf351){_0x4f4864['channel'][_0x25e1('0x81')](util[_0x25e1('0x28')](_0x25e1('0x137'),_0x57708a,_0x2cf351),_0x19e8b2);});return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x138'),_0x57708a));}else{return this['channel'][_0x25e1('0x81')](_0x57708a,_0x47cd89);}};AGIVertices[_0x25e1('0xe')][_0x25e1('0xa')]=function(_0x1a90e4){logger['info'](util[_0x25e1('0x28')](_0x25e1('0x139'),_0x1a90e4[_0x25e1('0x38')]));if(_0x1a90e4['retry']===0x0){return this[_0x25e1('0x82')](_0x1a90e4);}_0x1a90e4['retry']-=0x1;if(!this[_0x25e1('0x8b')](_0x1a90e4[_0x25e1('0x13a')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x1a90e4,'no\x20file\x20audio\x20selected');}var _0x52fa78=this[_0x25e1('0xdf')]['sync'](this,_0x1a90e4[_0x25e1('0x13a')]);if(!_0x52fa78){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x1a90e4,_0x25e1('0xe0'));}var _0x37f066=this['channel'][_0x25e1('0xe1')](_0x52fa78,_0x1a90e4[_0x25e1('0xe2')],_0x1a90e4[_0x25e1('0x13b')]);var _0x59cf8b=_0x37f066[_0x25e1('0x80')];if(_0x37f066[_0x25e1('0x80')]===-0x1){this[_0x25e1('0x36')]['sync'](this,_0x1a90e4,'-1');return _0x37f066;}else if(_0x37f066[_0x25e1('0x7e')]===_0x25e1('0x88')){_0x37f066[_0x25e1('0x80')]=_0x37f066[_0x25e1('0x80')][_0x25e1('0x7c')]>0x0?_0x37f066[_0x25e1('0x80')]:'t';}else if(_[_0x25e1('0x45')](_0x37f066[_0x25e1('0x80')])){_0x37f066[_0x25e1('0x80')]='#';_0x59cf8b='#';}if(!this['isConfigured'](_0x1a90e4[_0x25e1('0xac')])){this['channel'][_0x25e1('0x90')](_0x25e1('0xab'));}else{var _0x541fcb=this[_0x25e1('0xf')][_0x25e1('0x83')](this,_0x1a90e4['variable_id']);if(!_0x541fcb){return this[_0x25e1('0xd')]['error'](_0x1a90e4,_0x25e1('0xe7'));}this[_0x25e1('0xd')][_0x25e1('0x81')](_0x541fcb,_0x59cf8b);}this[_0x25e1('0x36')][_0x25e1('0x83')](this,_0x1a90e4,_0x59cf8b);return _0x37f066;};AGIVertices['prototype']['noop']=function(_0x3d7b01){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x13c'),_0x3d7b01[_0x25e1('0x38')]));return this['channel'][_0x25e1('0x90')](_0x3d7b01[_0x25e1('0x13d')]||_0x3d7b01[_0x25e1('0x38')]);};AGIVertices[_0x25e1('0xe')][_0x25e1('0x13e')]=function(_0x4198e9){logger['info'](util[_0x25e1('0x28')](_0x25e1('0x13f'),_0x4198e9['label']));if(!this[_0x25e1('0x8b')](_0x4198e9[_0x25e1('0x129')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x4198e9,_0x25e1('0x12a'));}logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x12b'),this[_0x25e1('0xd')]['callerid'],_0x4198e9[_0x25e1('0x129')]));var _0xf303d3=this[_0x25e1('0x51')]['sync'](this,_0x4198e9[_0x25e1('0x140')]);var _0x6ef211=this[_0x25e1('0x52')][_0x25e1('0x83')](this,_0x4198e9[_0x25e1('0x129')],_0xf303d3);if(_0x6ef211){logger['info'](util[_0x25e1('0x28')](_0x25e1('0x12c'),this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x4198e9['findBy']));this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')]('AGENT\x20%s\x20FOUND\x20BY',this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x4198e9[_0x25e1('0x129')]));return{'code':0xc8,'result':_0x25e1('0x141')};}else{logger[_0x25e1('0x2f')](util['format'](_0x25e1('0x12d'),this[_0x25e1('0xd')]['callerid'],_0x4198e9[_0x25e1('0x129')]));this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x12c'),this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x4198e9['findBy']));return{'code':0xc8,'result':_0x25e1('0x12e')};}};AGIVertices['prototype']['playback']=function(_0x24f081){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x142'),_0x24f081[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x24f081[_0x25e1('0x13a')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x24f081,_0x25e1('0xde'));}var _0x4d23b2=this[_0x25e1('0xdf')]['sync'](this,_0x24f081[_0x25e1('0x13a')]);if(!_0x4d23b2){return this[_0x25e1('0xd')]['error'](_0x24f081,'no\x20file\x20audio\x20found');}var _0x36be22=this[_0x25e1('0xd')][_0x25e1('0x59')](_0x25e1('0x143'),[_0x4d23b2,_0x24f081[_0x25e1('0xb8')]]);if(_0x36be22[_0x25e1('0x80')]===-0x1){return _0x36be22;}return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')]('Executed\x20command\x20%s\x20%s',_0x25e1('0x143'),_0x4d23b2));};AGIVertices[_0x25e1('0xe')][_0x25e1('0x144')]=function(_0x46833f){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x145'),_0x46833f[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x46833f[_0x25e1('0x146')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x46833f,_0x25e1('0x147'));}var _0xe6397d='';var _0x44a2e6=parseInt(_0x46833f[_0x25e1('0x146')],0xa);if(isNaN(_0x44a2e6)){_0xe6397d=_0x46833f[_0x25e1('0x146')];}else{_0xe6397d=this[_0x25e1('0x148')][_0x25e1('0x83')](this,_0x46833f['queue_id']);if(!_0xe6397d){return this[_0x25e1('0xd')]['error'](_0x46833f,_0x25e1('0x149'));}}var _0x45f913='';if(this['isConfigured'](_0x46833f[_0x25e1('0x13a')])){var _0x4ba639=this[_0x25e1('0xdf')][_0x25e1('0x83')](this,_0x46833f[_0x25e1('0x13a')]);if(_0x4ba639){_0x45f913=_0x4ba639;}}this['createSquareDetailsReport']['sync'](this,_0x46833f,_0xe6397d);if(_0x46833f[_0x25e1('0xb8')][_0x25e1('0x14a')]('x')<0x0){_0x46833f[_0x25e1('0xb8')]+='x';}if(_0x46833f[_0x25e1('0xb8')]['indexOf']('X')<0x0){_0x46833f[_0x25e1('0xb8')]+='X';}this[_0x25e1('0xd')]['setVariable'](_0x25e1('0x14b'),_0xe6397d?_0xe6397d[_0x25e1('0x14c')]():'');var _0x1833b8=this[_0x25e1('0xd')][_0x25e1('0x59')](_0x25e1('0x14d'),[_0xe6397d,_0x46833f[_0x25e1('0xb8')],_0x46833f[_0x25e1('0xb9')],_0x45f913,_0x46833f[_0x25e1('0x88')],_0x46833f[_0x25e1('0x6')],_0x46833f[_0x25e1('0x14e')],_0x46833f[_0x25e1('0x14f')],'',_0x46833f[_0x25e1('0x150')]]);if(_0x1833b8[_0x25e1('0x80')]===-0x1){return _0x1833b8;}return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x151'),_0x25e1('0x14d'),_0xe6397d));};AGIVertices[_0x25e1('0xe')][_0x25e1('0x152')]=function(_0x2f61ff){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x153'),_0x2f61ff[_0x25e1('0x38')]));var _0x159bd3=_0x2f61ff[_0x25e1('0x154')]||_0x25e1('0xfe');var _0x51efd5=util[_0x25e1('0x28')](_0x25e1('0x155'),this[_0x25e1('0xd')][_0x25e1('0x37')],rs[_0x25e1('0xe9')](0x5));var _0x5060ad=util[_0x25e1('0x28')](_0x25e1('0x156'),FILES_PATH,_0x51efd5,_0x159bd3);var _0x17f62c=util['format']('%s/recordings/%s',FILES_PATH,_0x51efd5);this[_0x25e1('0x3c')]['sync'](this,_0x2f61ff,_0x51efd5,_0x5060ad);this[_0x25e1('0xd')][_0x25e1('0x81')](_0x25e1('0x157'),_0x51efd5);logger[_0x25e1('0x2f')]('Recording\x20%s\x20%s\x20%s\x20%s',_0x17f62c,_0x159bd3,_0x2f61ff[_0x25e1('0x158')],_0x2f61ff['timeout']);return this[_0x25e1('0xd')]['recordFile'](_0x17f62c,_0x159bd3,_0x2f61ff[_0x25e1('0x158')],_0x2f61ff['timeout'],undefined,!![]);};AGIVertices['prototype'][_0x25e1('0x159')]=function(_0x3ae4d4){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x15a'),_0x3ae4d4[_0x25e1('0x38')]));return this['channel'][_0x25e1('0x15b')](_0x3ae4d4['digits'][_0x25e1('0x15c')](/\s+/g,''),_0x3ae4d4[_0x25e1('0x158')]);};AGIVertices[_0x25e1('0xe')]['saynumber']=function(_0x5d4674){logger[_0x25e1('0x2f')](util['format'](_0x25e1('0x15d'),_0x5d4674[_0x25e1('0x38')]));return this[_0x25e1('0xd')][_0x25e1('0x15e')](_0x5d4674['number'][_0x25e1('0x15c')](/\s+/g,''),_0x5d4674[_0x25e1('0x158')]);};AGIVertices[_0x25e1('0xe')][_0x25e1('0x15f')]=function(_0x4ed029){logger[_0x25e1('0x2f')](util['format'](_0x25e1('0x160'),_0x4ed029[_0x25e1('0x38')]));return this['channel'][_0x25e1('0x161')](_0x4ed029[_0x25e1('0x5c')],_0x4ed029['escape_digits']);};AGIVertices[_0x25e1('0xe')][_0x25e1('0x162')]=function(_0x1c962e){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('Enter\x20in\x20SENDMAIL\x20(%s)\x20block',_0x1c962e[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x1c962e[_0x25e1('0x163')])){return this['channel'][_0x25e1('0x90')](_0x25e1('0x164'));}var _0x28b7eb=this['getMailAccount'][_0x25e1('0x83')](this,_0x1c962e['account_id']);if(!_0x28b7eb||!_0x28b7eb[_0x25e1('0x165')]){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x1c962e,_0x25e1('0x166'));}var _0xb94a81={'from':util['format'](_0x25e1('0x167'),_0x28b7eb[_0x25e1('0x14')],_0x28b7eb[_0x25e1('0x168')]||_0x28b7eb[_0x25e1('0x165')][_0x25e1('0x169')]),'to':_0x1c962e['to']||'','cc':_0x1c962e['cc']||'','bcc':_0x1c962e[_0x25e1('0x16a')]||'','subject':_0x1c962e['subject'],'html':_0x1c962e[_0x25e1('0x5c')],'text':_0x1c962e[_0x25e1('0x5c')]};var _0x88322a={'tls':{'rejectUnauthorized':![]}};if(_0x28b7eb[_0x25e1('0x165')][_0x25e1('0x16b')]){_0x88322a[_0x25e1('0x16b')]=_0x28b7eb['Smtp'][_0x25e1('0x16b')];}else{_0x88322a[_0x25e1('0x16c')]=_0x28b7eb[_0x25e1('0x165')][_0x25e1('0x16c')];_0x88322a[_0x25e1('0x16d')]=_0x28b7eb['Smtp'][_0x25e1('0x16d')];_0x88322a[_0x25e1('0x16e')]=_0x28b7eb[_0x25e1('0x165')][_0x25e1('0x16e')];}if(_0x28b7eb[_0x25e1('0x165')][_0x25e1('0x16f')]){_0x88322a[_0x25e1('0x170')]={'user':_0x28b7eb[_0x25e1('0x165')]['user'],'pass':_0x28b7eb[_0x25e1('0x165')][_0x25e1('0x171')]};}if(this[_0x25e1('0x8b')](_0x1c962e[_0x25e1('0x172')])){}logger[_0x25e1('0xb2')](_0x25e1('0x173'),JSON[_0x25e1('0xe5')](_0xb94a81));this['createSquareDetailsReport']['sync'](this,_0x1c962e,_0x1c962e[_0x25e1('0x163')]);this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x174'),_0x28b7eb[_0x25e1('0x14')]));this[_0x25e1('0x22')]['sync'](this,_0x88322a,_0xb94a81);return this[_0x25e1('0xd')]['noop']('Mail\x20message\x20added\x20to\x20outgoing\x20process');};AGIVertices[_0x25e1('0xe')][_0x25e1('0x175')]=function(_0xeffe04){logger[_0x25e1('0x2f')](util['format'](_0x25e1('0x176'),_0xeffe04[_0x25e1('0x38')]));return this['channel'][_0x25e1('0x90')](_0x25e1('0x177'));};AGIVertices[_0x25e1('0xe')][_0x25e1('0x178')]=function(_0x12306d){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x179'),_0x12306d['label']));if(!this[_0x25e1('0x8b')](_0x12306d[_0x25e1('0x17a')])){return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x17b'));}var _0x2de704=this[_0x25e1('0x33')][_0x25e1('0x83')](this,_0x12306d[_0x25e1('0x17a')]);if(!_0x2de704){return this['channel'][_0x25e1('0x2b')](_0x12306d,'no\x20sms\x20account\x20found');}var _0x3efa40={'body':_0x12306d[_0x25e1('0x17c')],'phone':_0x12306d['to']||'','SmsAccountId':_0x2de704['id']};logger[_0x25e1('0xb2')](_0x25e1('0x17d'),JSON[_0x25e1('0xe5')](_0x3efa40));this['createSquareDetailsReport'][_0x25e1('0x83')](this,_0x12306d,_0x12306d['sms_account_id']);this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x17e'),_0x2de704[_0x25e1('0x14')]));this[_0x25e1('0x35')][_0x25e1('0x83')](this,_0x3efa40);return this[_0x25e1('0xd')][_0x25e1('0x90')](_0x25e1('0x17f'));};AGIVertices[_0x25e1('0xe')][_0x25e1('0x180')]=function(_0x1bf4f7){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x181'),_0x1bf4f7[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x1bf4f7['variable_id'])){return this[_0x25e1('0xd')]['error'](_0x1bf4f7,'no\x20variable\x20selected');}var _0x4cdd71=this['getVariable'][_0x25e1('0x83')](this,_0x1bf4f7[_0x25e1('0xac')]);if(!_0x4cdd71){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x1bf4f7,_0x25e1('0xe7'));}return this[_0x25e1('0xd')][_0x25e1('0x81')](_0x4cdd71,_0x1bf4f7[_0x25e1('0x182')]);};AGIVertices['prototype'][_0x25e1('0x183')]=function(_0x23391f){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x184'),_0x23391f[_0x25e1('0x38')]));this['channel'][_0x25e1('0x90')](_0x25e1('0x185'));if(_0x23391f[_0x25e1('0x85')]==='yes'){this[_0x25e1('0xd')]['noop'](_0x25e1('0x186'));return this[_0x25e1('0xd')][_0x25e1('0x85')]();}return this[_0x25e1('0xd')][_0x25e1('0x90')]('Skipped\x20Answer');};AGIVertices[_0x25e1('0xe')][_0x25e1('0x187')]=function(_0x4d4c8c){logger['info'](util[_0x25e1('0x28')](_0x25e1('0x188'),_0x4d4c8c[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x4d4c8c[_0x25e1('0x189')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x4d4c8c,'no\x20subproject\x20selected');}var _0x23327f=this[_0x25e1('0x18a')][_0x25e1('0x83')](this,_0x4d4c8c[_0x25e1('0x189')]);if(!this[_0x25e1('0x8b')](_0x23327f)){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x4d4c8c,util[_0x25e1('0x28')](_0x25e1('0x18b'),_0x4d4c8c[_0x25e1('0x189')]));}if(_0x23327f===this[_0x25e1('0xd')][_0x25e1('0x3a')]){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x4d4c8c,_0x25e1('0x18c'));}this[_0x25e1('0x36')][_0x25e1('0x83')](this,_0x4d4c8c,_0x23327f);var _0x1c2350=this[_0x25e1('0xd')]['exec'](_0x25e1('0x18d'),util[_0x25e1('0x28')](_0x25e1('0x18e'),config['agi'][_0x25e1('0x16c')]||_0x25e1('0x18f'),_0x23327f,this[_0x25e1('0xd')][_0x25e1('0x3a')]));if(_0x1c2350[_0x25e1('0x80')]===-0x1){return _0x1c2350;}return this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')]('Executed\x20command\x20%s\x20%s','AGI',_0x23327f));};AGIVertices[_0x25e1('0xe')][_0x25e1('0x190')]=function(_0x50c1bd){logger['info'](util[_0x25e1('0x28')](_0x25e1('0x191'),_0x50c1bd['label']));var _0x1d7bb7=this['shellCommand'][_0x25e1('0x83')](this,_0x50c1bd[_0x25e1('0x192')]);this[_0x25e1('0x36')]['sync'](this,_0x50c1bd,_0x50c1bd[_0x25e1('0x192')]);if(this[_0x25e1('0x8b')](_0x50c1bd['variable_id'])){var _0xe3a934=this['getVariable'][_0x25e1('0x83')](this,_0x50c1bd[_0x25e1('0xac')]);if(_0xe3a934){this[_0x25e1('0xd')][_0x25e1('0x81')](_0xe3a934,_0x1d7bb7);return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x193'),_0x50c1bd[_0x25e1('0x192')],_0xe3a934));}}return this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x194'),_0x50c1bd['command']));};AGIVertices[_0x25e1('0xe')][_0x25e1('0x195')]=function(_0x1aa8e4){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('Enter\x20in\x20GOOGLETTS\x20(%s)\x20block',_0x1aa8e4[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x1aa8e4[_0x25e1('0x5c')])){return this[_0x25e1('0xd')][_0x25e1('0x90')]('no\x20text\x20configured');}this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')]('Trying\x20Google\x20TTS\x20%s',_0x1aa8e4[_0x25e1('0x5c')]));var _0x1b953e=this[_0x25e1('0x5b')]['sync'](this,_0x1aa8e4);if(_0x1b953e){this[_0x25e1('0xd')]['noop'](util[_0x25e1('0x28')]('Google\x20TTS\x20%s\x20file\x20created',_0x1b953e));var _0x5c3546=this[_0x25e1('0xd')]['streamFile'](_0x1b953e);try{fs[_0x25e1('0xcf')](_0x1b953e+_0x25e1('0xd0'));}catch(_0x368eb2){logger['error'](_0x368eb2);}return _0x5c3546;}return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x1aa8e4,'Google\x20TTS\x20is\x20unreachable');};AGIVertices['prototype']['unpause']=function(_0x3d3673){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('Enter\x20in\x20UNPAUSE\x20(%s)\x20block',_0x3d3673[_0x25e1('0x38')]));if(!this['isConfigured'](_0x3d3673[_0x25e1('0x129')])){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x3d3673,'no\x20find\x20by\x20configured');}logger[_0x25e1('0x2f')](util[_0x25e1('0x28')]('FIND\x20AGENT\x20%s\x20BY\x20%s',this[_0x25e1('0xd')]['callerid'],_0x3d3673[_0x25e1('0x129')]));var _0x3aefac=this[_0x25e1('0x54')][_0x25e1('0x83')](this,_0x3d3673[_0x25e1('0x129')]);if(_0x3aefac){logger['info'](util[_0x25e1('0x28')](_0x25e1('0x12c'),this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x3d3673['findBy']));this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x12c'),this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x3d3673[_0x25e1('0x129')]));return{'code':0xc8,'result':_0x25e1('0x141')};}else{logger['info'](util[_0x25e1('0x28')]('AGENT\x20%s\x20NOT\x20FOUND\x20BY',this['channel'][_0x25e1('0x3b')],_0x3d3673[_0x25e1('0x129')]));this[_0x25e1('0xd')][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x12d'),this[_0x25e1('0xd')][_0x25e1('0x3b')],_0x3d3673['findBy']));return{'code':0xc8,'result':_0x25e1('0x12e')};}};AGIVertices[_0x25e1('0xe')][_0x25e1('0x196')]=function(_0x554aa9){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x197'),_0x554aa9[_0x25e1('0x38')]));var _0x5bf9d5=this['channel'][_0x25e1('0x59')](_0x25e1('0x198'),[_0x554aa9[_0x25e1('0x199')],_0x554aa9['options']]);if(_0x5bf9d5[_0x25e1('0x80')]===-0x1){return _0x5bf9d5;}return this['channel'][_0x25e1('0x90')](util[_0x25e1('0x28')](_0x25e1('0x151'),_0x25e1('0x198'),_0x554aa9['mailbox']));};AGIVertices[_0x25e1('0xe')][_0x25e1('0x19a')]=function(_0x4e0924){logger[_0x25e1('0x2f')](util[_0x25e1('0x28')](_0x25e1('0x19b'),_0x4e0924[_0x25e1('0x38')]));if(!this[_0x25e1('0x8b')](_0x4e0924[_0x25e1('0xac')])){return this[_0x25e1('0xd')]['error'](_0x4e0924,_0x25e1('0x19c'));}var _0x20c977=this[_0x25e1('0xf')][_0x25e1('0x83')](this,_0x4e0924[_0x25e1('0xac')]);if(!_0x20c977){return this[_0x25e1('0xd')][_0x25e1('0x2b')](_0x4e0924,_0x25e1('0xe7'));}var _0x513aa1=this[_0x25e1('0xd')][_0x25e1('0xf')](_0x20c977);return{'code':0xc8,'result':_0x513aa1[_0x25e1('0x7e')]?_0x513aa1[_0x25e1('0x7e')]:'-'};};String['prototype'][_0x25e1('0x7d')]=function(_0x267704,_0x423492){return this[_0x25e1('0x7b')](_0x267704)[_0x25e1('0x19d')](_0x423492);};module[_0x25e1('0x19e')]=AGIVertices;
\ No newline at end of file
+var _0xe6c6=['internal','%s/%s@from-sip/n','LOCAL','shellCommand','trim','googleTTS','text','googleDialogflow','dialogflow_language','sestekNDA','ispeechTTS','ispeech_tts_language','en-US','speed','ispeechASR','key','ispeech_asr_language','isConfigured','awsPolly','aws_access_key_id','aws_secret_access_key','aws_polly_voice','awsLex','aws_bot_name','googleASR','google_asr_language','tildeASR','appid','uri','clear','clone','hasOwnProperty','isString','replaceAllVariables','split','length','replaceAll','extra','toString','getAndSetVariable','The\x20\x22%s\x22\x20variable\x20value\x20is:\x20%s','sync','maxRetry','agi','format','Enter\x20in\x20AGI\x20(%s)\x20block','command','args','answer','Enter\x20in\x20ANSWER\x20(%s)\x20block','timeout','Wait\x20%s\x20seconds\x20before\x20answer','result','Enter\x20in\x20CALLBACK\x20(%s)\x20block','list_id','add','delay','noop','Enter\x20in\x20CUSTOM\x20APP\x20(%s)\x20block','application','options','Executed\x20command\x20%s\x20%s','lumenvoxtts','Enter\x20in\x20LUMENVOXTTS\x20(%s)\x20block','exec','sestektts','Enter\x20in\x20SESTEKTTS\x20(%s)\x20block','Executed\x20command\x20MRCPSynth\x20%s','lumenvoxasr','Enter\x20in\x20LUMENVOXASR\x20(%s)\x20block','grammar','no\x20grammar\x20configured','RECOG_CONFIDENCE()','RECOG_INPUT()','LUMENVOX_ASR_TRANSCRIPT','RECOG_INSTANCE()','Executed\x20command\x20MRCPRecog\x20%s','sestekasr','Enter\x20in\x20SESTEKASR\x20(%s)\x20block','MRCPRecog','SESTEK_ASR_TRANSCRIPT','SESTEK_ASR_INSTANCE','database','Enter\x20in\x20DATABASE\x20(%s)\x20block','odbc_id','query','replace','query:\x20%s','variable_id','no\x20variable\x20selected\x20for\x20the\x20result','getVariable','forEach','keys','%s[%s][%s]','setVariable','%s_ROWS_COUNT','variable\x20%s\x20set','dial','no\x20user\x20selected','no\x20user\x20found','DIAL','opts','url','Executed\x20command\x20%s','dialogflow','no\x20key\x20configured','bot','Trying\x20Dialogflow:\x20%s','DIALOGFLOW_%s','toUpperCase','speech','out','Dialogflow\x20Result\x20%s','sesteknda','Enter\x20in\x20SESTEKNDA\x20(%s)\x20block','ndauth_url','username','no\x20username\x20configured','ndassistant_url','no\x20text\x20configured','Trying\x20SestekNDA:\x20%s','SESTEK_NDA_%s','audiofile','Sestek\x20NDA\x20%s\x20file\x20created','streamFile','unlink','.wav','SestekNDA\x20Result\x20%s','SestekNDA\x20is\x20unreachable','end','Enter\x20in\x20END\x20(%s)\x20block','Enter\x20in\x20EXTERNAL\x20DIAL\x20(%s)\x20block','trunk_id','no\x20trunk\x20found','trunk_name','SIP/%s/%s','Enter\x20in\x20FINALLY\x20(%s)\x20block','finally','retry','file_id','no\x20file\x20audio\x20selected','getSound','no\x20file\x20audio\x20found','getData','maxdigit','stringify','mindigit','no\x20variable\x20found','hiddendigitsnum','generate','hiddendigitspos','first','substr','Enter\x20in\x20GETSECRETDIGITS\x20(%s)\x20block','goal','GOAL\x20%s','goalname','awspolly','no\x20valid\x20credentials\x20configured','Trying\x20aws\x20Polly\x20%s','aws\x20Polly\x20%s\x20file\x20created','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','wav','%s/recordings/%s','%s.%s','beep','NOBEEP','recordFile','intKey','google\x20%s\x20file\x20created','GOOGLE_ASR_%s','GoogleASR\x20Result\x20%s','tildeasr','Enter\x20in\x20TILDEASR\x20(%s)\x20block','no\x20appsecret\x20configured','tilde\x20%s\x20file\x20created','TildeASR\x20Result\x20%s','gotoc','condition','no\x20condition\x20configured','true','EVAL\x20CONDITION\x20%s\x20%s','false','gotoiftime','Enter\x20in\x20GOTOIFTIME\x20(%s)\x20block','interval_id','no\x20interval\x20configured','no\x20intervals\x20found','IFTIME\x20%s\x20%s','hangup','Enter\x20in\x20HANGUP\x20(%s)\x20block','ispeech\x20%s\x20file\x20created','ISPEECH_ASR_%s','IspeechASR\x20Result\x20%s','ispeechtts','Enter\x20in\x20ISPEECHTTS\x20(%s)\x20block','Trying\x20ispeech\x20TTS\x20%s','ispeech\x20TTS\x20is\x20unreachable','login','Enter\x20in\x20LOGIN\x20(%s)\x20block','findBy','no\x20find\x20by\x20configured','FIND\x20AGENT\x20%s\x20BY\x20%s','AGENT\x20%s\x20FOUND\x20BY','AGENT\x20%s\x20NOT\x20FOUND\x20BY','failure','logout','success','math','no\x20operation\x20configured','math\x20%s','operation','isArray','%s[%s]','variable\x20%s[key]\x20set','Enter\x20in\x20MENU\x20(%s)\x20block','response','digit','Enter\x20in\x20NOOP\x20(%s)\x20block','output','pause','getPause','pause_id','playback','PLAYBACK','queue','Enter\x20in\x20QUEUE\x20(%s)\x20block','queue_id','no\x20queue\x20selected','no\x20queue\x20found','indexOf','toLowerCase','QUEUE','position','Enter\x20in\x20RECORD\x20(%s)\x20block','recordingFormat','%s_%s','%s/recordings/%s.%s','RECORDING_SAVENAME','saydigits','sayDigits','digits','escape_digits','saynumber','Enter\x20in\x20SAYNUMBER\x20(%s)\x20block','sayNumber','number','sayphonetic','sayPhonetic','sendMail','Enter\x20in\x20SENDMAIL\x20(%s)\x20block','no\x20mail\x20account\x20configured','Smtp','\x22%s\x22\x20<%s>','email','user','bcc','subject','service','host','port','secure','authentication','auth','pass','template_id','debug','sendMail\x20message','account_id','Trying\x20SendMail\x20with\x20account\x20%s','sendMailMessage','Mail\x20message\x20added\x20to\x20outgoing\x20process','sendFax','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','sendSMS\x20message','Trying\x20SendSMS\x20with\x20account\x20%s','Sms\x20message\x20added\x20to\x20outgoing\x20process','Enter\x20in\x20SET\x20(%s)\x20block','no\x20variable\x20selected','variable_value','start','Enter\x20in\x20START\x20(%s)\x20block','START\x20CALLY\x20SQUARE','yes','Answer','Skipped\x20Answer','Enter\x20in\x20SUBPROJECT\x20(%s)\x20block','project_id','no\x20subproject\x20selected','getSquareProject','no\x20subproject\x20found\x20with\x20id\x20%d','project\x20in\x20subproject\x20must\x20be\x20different\x20from\x20the\x20called\x20project','AGI','127.0.0.1','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','Enter\x20in\x20VOICEMAIL\x20(%s)\x20block','VOICEMAIL','mailbox','vswitch','Enter\x20in\x20SWITCH\x20(%s)\x20block','join','exports','path','util','lodash','randomstring','moment','mustache','../../config/logger','../../config/environment','./scripts','/var/opt/motion2/server/files','menu','getdigits','getsecretdigits','channel','rpc','mailRpc','prototype','getVariableById','then','catch','getVoiceQueue','name','getSquareProjectById','getSquareOdbc','getSquareOdbcById','getUser','getUserById','getTrunkById','getSoundPath','save_name','getMailAccount','getIntervals','getIntervalById','IntervalId','interval','map','Intervals','%s/sounds/converted/%s','error','Error\x20getting\x20ODBC\x20connection\x20%s','info','ODBC\x20connection\x20successfully','Error\x20executing\x20query\x20%s','close','Error\x20closing\x20connection\x20to\x20odbc\x20%s','getSmsAccount','createSmsMessage','createSquareDetailsReport','uniqueid','label','agicommand','arg_1','callerid','createSquareRecording','calleridname','context','extension','priority','accountcode','file','createSquareMessage','createCmContact','isEmpty','isNil','callback_','random','lastName','phone','scheduledAt','callback','Callback\x20scheduled\x20at\x20','callback_priority','agentPause','agentUnpause','agent','agentLogout','agentLogin'];(function(_0x3619a5,_0x192663){var _0x1c7d6c=function(_0x5679c9){while(--_0x5679c9){_0x3619a5['push'](_0x3619a5['shift']());}};_0x1c7d6c(++_0x192663);}(_0xe6c6,0x141));var _0x6e6c=function(_0xf9bbb,_0x2f6af1){_0xf9bbb=_0xf9bbb-0x0;var _0x10bc9c=_0xe6c6[_0xf9bbb];return _0x10bc9c;};'use strict';var fs=require('fs');var path=require(_0x6e6c('0x0'));var util=require(_0x6e6c('0x1'));var _=require(_0x6e6c('0x2'));var sh=require('shelljs');var odbc=require('odbc')();var rs=require(_0x6e6c('0x3'));var moment=require(_0x6e6c('0x4'));var Mustache=require(_0x6e6c('0x5'));var logger=require(_0x6e6c('0x6'))('agi');var config=require(_0x6e6c('0x7'));var scripts=require(_0x6e6c('0x8'));var FILES_PATH=_0x6e6c('0x9');var verticesWithRetry=[_0x6e6c('0xa'),_0x6e6c('0xb'),_0x6e6c('0xc')];var AGIVertices=function(_0x1b6eb5,_0x524742,_0x48e82b){this[_0x6e6c('0xd')]=_0x1b6eb5;this[_0x6e6c('0xe')]=_0x524742;this[_0x6e6c('0xf')]=_0x48e82b;};AGIVertices[_0x6e6c('0x10')]['getVariable']=function(_0x3d19a3,_0x2bd85d){this['rpc'][_0x6e6c('0x11')](_0x3d19a3)[_0x6e6c('0x12')](function(_0x4b6242){_0x2bd85d(null,_0x4b6242?_0x4b6242['name']:![]);})[_0x6e6c('0x13')](function(_0x57485c){_0x2bd85d(_0x57485c);});};AGIVertices['prototype'][_0x6e6c('0x14')]=function(_0x52fa9c,_0x3b9a2c){this[_0x6e6c('0xe')]['getVoiceQueueById'](_0x52fa9c)['then'](function(_0x26e671){_0x3b9a2c(null,_0x26e671?_0x26e671[_0x6e6c('0x15')]:![]);})['catch'](function(_0x1a280f){_0x3b9a2c(_0x1a280f);});};AGIVertices[_0x6e6c('0x10')]['getSquareProject']=function(_0x36c823,_0x50d139){this['rpc'][_0x6e6c('0x16')](_0x36c823)[_0x6e6c('0x12')](function(_0x5ec811){_0x50d139(null,_0x5ec811?_0x5ec811['name']:![]);})['catch'](function(_0x1ea352){_0x50d139(_0x1ea352);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x17')]=function(_0x2f3636,_0xe15ad8){this[_0x6e6c('0xe')][_0x6e6c('0x18')](_0x2f3636)[_0x6e6c('0x12')](function(_0x5f5dbd){_0xe15ad8(null,_0x5f5dbd?_0x5f5dbd['dsn']:![]);})['catch'](function(_0x5f2e92){_0xe15ad8(_0x5f2e92);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x19')]=function(_0x2c6263,_0x23592b){this['rpc'][_0x6e6c('0x1a')](_0x2c6263)[_0x6e6c('0x12')](function(_0x255374){_0x23592b(null,_0x255374?_0x255374[_0x6e6c('0x15')]:![]);})[_0x6e6c('0x13')](function(_0x378759){_0x23592b(_0x378759);});};AGIVertices['prototype']['getTrunk']=function(_0xa4d5a,_0x578a8b){this[_0x6e6c('0xe')][_0x6e6c('0x1b')](_0xa4d5a)[_0x6e6c('0x12')](function(_0x4ac23f){_0x578a8b(null,_0x4ac23f?_0x4ac23f[_0x6e6c('0x15')]:![]);})[_0x6e6c('0x13')](function(_0x5da766){_0x578a8b(_0x5da766);});};AGIVertices['prototype']['getSound']=function(_0x40635e,_0x5b17ee){var _0x9f9f8=this;this[_0x6e6c('0xe')]['getSoundById'](_0x40635e)[_0x6e6c('0x12')](function(_0x3da7e7){_0x5b17ee(null,_0x3da7e7?_0x9f9f8[_0x6e6c('0x1c')](_0x3da7e7[_0x6e6c('0x1d')]):![]);})[_0x6e6c('0x13')](function(_0x51563d){_0x5b17ee(_0x51563d);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x1e')]=function(_0x70b76a,_0x28e027){this[_0x6e6c('0xe')]['getMailAccountById'](_0x70b76a)[_0x6e6c('0x12')](function(_0x3e6e40){_0x28e027(null,_0x3e6e40?_0x3e6e40:![]);})['catch'](function(_0x5aa095){_0x28e027(_0x5aa095);});};AGIVertices[_0x6e6c('0x10')]['sendMailMessage']=function(_0x41f120,_0x1cb7c6,_0x82505c){this['mailRpc']['sendMailMessage'](_0x41f120,_0x1cb7c6)['then'](function(){_0x82505c(null);})[_0x6e6c('0x13')](function(_0x49e12c){_0x82505c(_0x49e12c);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x1f')]=function(_0x3aa34c,_0x3c00d2){this['rpc'][_0x6e6c('0x20')](_0x3aa34c)['then'](function(_0x24fe08){if(_0x24fe08){if(_0x24fe08[_0x6e6c('0x21')]){_0x3c00d2(null,[_0x24fe08[_0x6e6c('0x22')]]);}else{_0x3c00d2(null,_[_0x6e6c('0x23')](_0x24fe08[_0x6e6c('0x24')],_0x6e6c('0x22')));}}else{_0x3c00d2(null,![]);}})[_0x6e6c('0x13')](function(_0x433285){_0x3c00d2(_0x433285);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x1c')]=function(_0x3c6448){return util['format'](_0x6e6c('0x25'),FILES_PATH,_0x3c6448);};AGIVertices[_0x6e6c('0x10')]['getQueryOdbc']=function(_0x2906ed,_0x37e175,_0xc3c6e6){odbc['open'](_0x2906ed,function(_0x44992c){if(_0x44992c){logger[_0x6e6c('0x26')](_0x6e6c('0x27'),_0x44992c);_0xc3c6e6(_0x44992c);}else{logger[_0x6e6c('0x28')](_0x6e6c('0x29'));odbc['query'](_0x37e175,function(_0xf45e01,_0x151130){if(_0xf45e01){logger[_0x6e6c('0x28')](_0x6e6c('0x2a'),_0x37e175);_0xc3c6e6(_0xf45e01);}else{logger[_0x6e6c('0x28')]('Query\x20executed\x20correctly\x20%s',_0x37e175);odbc[_0x6e6c('0x2b')](function(_0x3af6c0){if(_0x3af6c0){logger[_0x6e6c('0x26')](_0x6e6c('0x2c'),_0x3af6c0);}_0xc3c6e6(null,_0x151130);});}});}});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x2d')]=function(_0xc21dcb,_0x40bfae){this[_0x6e6c('0xe')]['getSmsAccountById'](_0xc21dcb)[_0x6e6c('0x12')](function(_0x1d2f3b){_0x40bfae(null,_0x1d2f3b?_0x1d2f3b:![]);})['catch'](function(_0x2ba4e2){_0x40bfae(_0x2ba4e2);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x2e')]=function(_0x1d5613,_0x301d93){this['rpc'][_0x6e6c('0x2e')](_0x1d5613)[_0x6e6c('0x12')](function(_0x3f7e77){_0x301d93(null,_0x3f7e77);})[_0x6e6c('0x13')](function(_0x1c0db7){_0x301d93(_0x1c0db7);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x2f')]=function(_0x180656,_0x4f58b3,_0x17ec05){this[_0x6e6c('0xe')][_0x6e6c('0x2f')]({'uniqueid':this[_0x6e6c('0xd')][_0x6e6c('0x30')],'node':_0x180656[_0x6e6c('0x31')],'application':_0x180656[_0x6e6c('0x32')],'data':_0x4f58b3||null,'project_name':this[_0x6e6c('0xd')][_0x6e6c('0x33')],'callerid':this[_0x6e6c('0xd')][_0x6e6c('0x34')]})[_0x6e6c('0x12')](function(_0x18a7b2){if(_0x17ec05){_0x17ec05(null,_0x18a7b2);}})[_0x6e6c('0x13')](function(_0x714deb){if(_0x17ec05){_0x17ec05(_0x714deb);}});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x35')]=function(_0x233a6f,_0x42a005,_0x4256e8,_0x552a9c){this['rpc'][_0x6e6c('0x35')]({'uniqueid':this[_0x6e6c('0xd')]['uniqueid'],'callerid':this[_0x6e6c('0xd')]['callerid'],'calleridname':this['channel'][_0x6e6c('0x36')],'context':this[_0x6e6c('0xd')][_0x6e6c('0x37')],'extension':this[_0x6e6c('0xd')][_0x6e6c('0x38')],'priority':this['channel'][_0x6e6c('0x39')],'accountcode':this['channel'][_0x6e6c('0x3a')],'dnid':this['channel']['dnid'],'projectName':this['channel'][_0x6e6c('0x33')],'saveName':_0x42a005,'filename':_0x233a6f[_0x6e6c('0x3b')]||_0x42a005,'savePath':_0x4256e8})[_0x6e6c('0x12')](function(_0x1db24a){_0x552a9c(null,_0x1db24a);})[_0x6e6c('0x13')](function(_0x4799db){_0x552a9c(_0x4799db);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x3c')]=function(_0xce9494,_0x1a14ed,_0x4f209b){this[_0x6e6c('0xe')][_0x6e6c('0x3c')]({'uniqueid':this[_0x6e6c('0xd')][_0x6e6c('0x30')],'body':_0xce9494,'direction':_0x1a14ed})[_0x6e6c('0x12')](function(_0x2f2691){if(_0x4f209b){_0x4f209b(null,_0x2f2691);}})[_0x6e6c('0x13')](function(_0x4f3f2c){if(_0x4f209b){_0x4f209b(_0x4f3f2c);}});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x3d')]=function(_0x905168,_0x9c76a3){this['rpc'][_0x6e6c('0x3d')]({'firstName':_[_0x6e6c('0x3e')](_0x905168[_0x6e6c('0x15')])||_[_0x6e6c('0x3f')](_0x905168[_0x6e6c('0x15')])?_0x6e6c('0x40')+Math[_0x6e6c('0x41')]():_0x905168[_0x6e6c('0x15')],'lastName':_['isEmpty'](_0x905168['lastName'])||_[_0x6e6c('0x3f')](_0x905168[_0x6e6c('0x42')])?null:_0x905168[_0x6e6c('0x42')],'phone':_0x905168[_0x6e6c('0x43')],'ListId':_0x905168['list_id'],'scheduledAt':_0x905168[_0x6e6c('0x44')],'callbackUniqueid':this['channel'][_0x6e6c('0x30')],'tags':_0x6e6c('0x45'),'description':_0x6e6c('0x46')+_0x905168[_0x6e6c('0x44')]['toString'](),'priority':_0x905168[_0x6e6c('0x47')]})['then'](function(_0x198054){_0x9c76a3(null,_0x198054);})[_0x6e6c('0x13')](function(_0x15d0f6){_0x9c76a3(_0x15d0f6);});};AGIVertices[_0x6e6c('0x10')]['getPause']=function(_0x480b83,_0x55d516){this[_0x6e6c('0xe')]['getPauseById'](_0x480b83)['then'](function(_0x2d64f7){_0x55d516(null,_0x2d64f7?_0x2d64f7[_0x6e6c('0x15')]:![]);})['catch'](function(_0x5a1bf9){_0x55d516(_0x5a1bf9);});};AGIVertices['prototype'][_0x6e6c('0x48')]=function(_0x595e17,_0x255106,_0x89c3f8){var _0x2f32b2={'role':'agent'};_0x2f32b2[_0x595e17]=this[_0x6e6c('0xd')][_0x6e6c('0x34')];this[_0x6e6c('0xe')][_0x6e6c('0x48')](_0x2f32b2,_0x255106,this[_0x6e6c('0xd')][_0x6e6c('0x30')])[_0x6e6c('0x12')](function(_0x529e16){_0x89c3f8(null,_[_0x6e6c('0x3f')](_0x529e16)?![]:!![]);})[_0x6e6c('0x13')](function(_0x42c180){logger[_0x6e6c('0x26')](_0x42c180);_0x89c3f8(null,![]);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x49')]=function(_0xf3922f,_0x46b272){var _0x20d58f={'role':_0x6e6c('0x4a')};_0x20d58f[_0xf3922f]=this[_0x6e6c('0xd')][_0x6e6c('0x34')];this[_0x6e6c('0xe')]['agentUnpause'](_0x20d58f)['then'](function(_0x5b4e77){_0x46b272(null,_['isNil'](_0x5b4e77)?![]:!![]);})[_0x6e6c('0x13')](function(_0xe8d111){logger[_0x6e6c('0x26')](_0xe8d111);_0x46b272(null,![]);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x4b')]=function(_0x239ed2,_0x40a3a4){var _0x1f690d={'role':_0x6e6c('0x4a')};_0x1f690d[_0x239ed2]=this[_0x6e6c('0xd')][_0x6e6c('0x34')];this['rpc']['agentLogout'](_0x1f690d)[_0x6e6c('0x12')](function(_0x4fa321){_0x40a3a4(null,_[_0x6e6c('0x3f')](_0x4fa321)?![]:!![]);})[_0x6e6c('0x13')](function(_0x5a360f){logger[_0x6e6c('0x26')](_0x5a360f);_0x40a3a4(null,![]);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x4c')]=function(_0x4cb2e5,_0x36c429){var _0x1dd5bc={'role':_0x6e6c('0x4a')};_0x1dd5bc[_0x4cb2e5]=this[_0x6e6c('0xd')][_0x6e6c('0x34')];var _0x3ea739=_0x4cb2e5!=_0x6e6c('0x4d')?util['format'](_0x6e6c('0x4e'),_0x6e6c('0x4f'),this[_0x6e6c('0xd')][_0x6e6c('0x34')]):undefined;this[_0x6e6c('0xe')][_0x6e6c('0x4c')](_0x1dd5bc,_0x3ea739)[_0x6e6c('0x12')](function(_0x526adf){_0x36c429(null,_[_0x6e6c('0x3f')](_0x526adf)?![]:!![]);})[_0x6e6c('0x13')](function(_0x389723){logger['error'](_0x389723);_0x36c429(null,![]);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x50')]=function(_0x3aca39,_0x26ddb5){sh['exec'](_[_0x6e6c('0x51')](_0x3aca39),function(_0x39fc56,_0x44859c){var _0x12476f=_0x44859c['replace'](/(\r\n|\n|\r)/gm,'');_0x26ddb5(null,_0x12476f);});};AGIVertices['prototype'][_0x6e6c('0x52')]=function(_0x48119d,_0x7a7127){scripts[_0x6e6c('0x52')](_0x48119d[_0x6e6c('0x53')],_0x48119d['google_tts_language']||'en',0x1)[_0x6e6c('0x12')](function(_0x483104){_0x7a7127(null,_0x483104);})['catch'](function(_0xb35060){_0x7a7127(_0xb35060);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x54')]=function(_0x3d6810,_0x292fea){scripts[_0x6e6c('0x54')](this[_0x6e6c('0xd')][_0x6e6c('0x30')],_0x3d6810['key'],_0x3d6810[_0x6e6c('0x53')],_0x3d6810[_0x6e6c('0x55')]||'en')['then'](function(_0x2de9e9){_0x292fea(null,_0x2de9e9);})[_0x6e6c('0x13')](function(_0x44bb3b){_0x292fea(_0x44bb3b);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x56')]=function(_0x2ab2aa,_0x55e443){scripts[_0x6e6c('0x56')](this[_0x6e6c('0xd')],_0x2ab2aa)[_0x6e6c('0x12')](function(_0x14a157){_0x55e443(null,_0x14a157);})[_0x6e6c('0x13')](function(_0x2ce115){_0x55e443(_0x2ce115);});};AGIVertices[_0x6e6c('0x10')]['ispeechTTS']=function(_0x54dfe7,_0x2c0acb){scripts[_0x6e6c('0x57')](_0x54dfe7['key'],_0x54dfe7[_0x6e6c('0x53')],_0x54dfe7[_0x6e6c('0x58')]||_0x6e6c('0x59'),_0x54dfe7[_0x6e6c('0x5a')])[_0x6e6c('0x12')](function(_0xd3e906){_0x2c0acb(null,_0xd3e906);})['catch'](function(_0x4431bd){_0x2c0acb(_0x4431bd);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x5b')]=function(_0x4c74c2,_0xe77a03,_0x2723d3){scripts[_0x6e6c('0x5b')](_0xe77a03,_0x4c74c2[_0x6e6c('0x5c')],_0x4c74c2[_0x6e6c('0x5d')]||'en-US',this[_0x6e6c('0x5e')](_0x4c74c2['model'])?_0x4c74c2['model']:undefined)['then'](function(_0x330f99){_0x2723d3(null,_0x330f99);})['catch'](function(_0x39c10d){_0x2723d3(_0x39c10d);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x5f')]=function(_0x137306,_0xae03c1){scripts[_0x6e6c('0x5f')](_0x137306[_0x6e6c('0x60')],_0x137306[_0x6e6c('0x61')],_0x137306['aws_polly_region'],_0x137306[_0x6e6c('0x62')]||'Amy',_0x137306[_0x6e6c('0x53')],_0x137306['aws_text_type']||_0x6e6c('0x53'))['then'](function(_0x31b523){_0xae03c1(null,_0x31b523);})[_0x6e6c('0x13')](function(_0x592563){_0xae03c1(_0x592563);});};AGIVertices['prototype'][_0x6e6c('0x63')]=function(_0x288fe4,_0x31ef26){scripts[_0x6e6c('0x63')](this[_0x6e6c('0xd')][_0x6e6c('0x30')],_0x288fe4[_0x6e6c('0x60')],_0x288fe4[_0x6e6c('0x61')],_0x288fe4['aws_lex_region'],_0x288fe4[_0x6e6c('0x53')],_0x288fe4[_0x6e6c('0x64')])[_0x6e6c('0x12')](function(_0x3db05e){_0x31ef26(null,_0x3db05e);})[_0x6e6c('0x13')](function(_0x334fbf){_0x31ef26(_0x334fbf);});};AGIVertices['prototype'][_0x6e6c('0x65')]=function(_0x50a8e6,_0x4844a4,_0x27cc6e){scripts[_0x6e6c('0x65')](_0x4844a4,_0x50a8e6[_0x6e6c('0x5c')],_0x50a8e6[_0x6e6c('0x66')]||_0x6e6c('0x59'))[_0x6e6c('0x12')](function(_0x402f88){_0x27cc6e(null,_0x402f88);})['catch'](function(_0x177a74){_0x27cc6e(_0x177a74);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x67')]=function(_0x1df8c1,_0x2be1fc,_0x4c8881){scripts[_0x6e6c('0x67')](_0x2be1fc,_0x1df8c1[_0x6e6c('0x68')],_0x1df8c1['appsecret'],_0x1df8c1[_0x6e6c('0x69')])[_0x6e6c('0x12')](function(_0x54e35b){_0x4c8881(null,_0x54e35b);})['catch'](function(_0x554a1c){_0x4c8881(_0x554a1c);});};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x6a')]=function(_0x2cbba6){var _0x40555b=_['includes'](verticesWithRetry,_0x2cbba6['agicommand'])?_0x2cbba6:_[_0x6e6c('0x6b')](_0x2cbba6);for(var _0x25fca4 in _0x40555b){if(_0x40555b[_0x6e6c('0x6c')](_0x25fca4)){if(_0x40555b[_0x25fca4]&&_[_0x6e6c('0x6d')](_0x40555b[_0x25fca4])){_0x40555b[_0x25fca4]=this[_0x6e6c('0x6e')](_0x40555b[_0x25fca4]);}}}return _0x40555b;};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x6e')]=function(_0x54649c){var _0x2b813f=_0x54649c[_0x6e6c('0x6f')]('{');for(var _0x4c442b=0x1;_0x4c442b<_0x2b813f[_0x6e6c('0x70')];_0x4c442b+=0x1){var _0x3c943e=_0x2b813f[_0x4c442b][_0x6e6c('0x6f')]('}');if(_0x3c943e[_0x6e6c('0x70')]>0x1){_0x54649c=_0x54649c[_0x6e6c('0x71')]('{'+_0x3c943e[0x0]+'}',this[_0x6e6c('0xd')]['getVariable'](_0x3c943e[0x0])[_0x6e6c('0x72')]||_0x3c943e[0x0]);}}if(_0x2b813f[_0x6e6c('0x70')]===0x1){return _0x54649c[_0x6e6c('0x73')]();}return this[_0x6e6c('0x6e')](_0x54649c);};AGIVertices['prototype'][_0x6e6c('0x74')]=function(_0x4ee3e1,_0x42afc5){var _0x5c16c2=this['channel']['getVariable'](_0x4ee3e1);if(_0x5c16c2['result']===-0x1){return _0x5c16c2;}logger[_0x6e6c('0x28')](util['format'](_0x6e6c('0x75'),_0x42afc5,_0x5c16c2[_0x6e6c('0x72')]));return this['channel']['setVariable'](_0x42afc5,_0x5c16c2[_0x6e6c('0x72')]);};AGIVertices[_0x6e6c('0x10')]['isConfigured']=function(_0x229a5c){return _0x229a5c&&_0x229a5c!=='0'&&_0x229a5c!=='-1'&&_0x229a5c!=='';};AGIVertices['prototype']['maxRetry']=function(_0x2a63d3){this[_0x6e6c('0x2f')][_0x6e6c('0x76')](this,_0x2a63d3,'-');_0x2a63d3['retry']=_0x2a63d3[_0x6e6c('0x77')];return{'code':0xc8,'result':'-'};};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x78')]=function(_0x25aa41){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x7a'),_0x25aa41['label']));return this[_0x6e6c('0xd')][_0x6e6c('0x78')]([_0x25aa41[_0x6e6c('0x7b')],_0x25aa41[_0x6e6c('0x7c')]]);};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x7d')]=function(_0x138ae1){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x7e'),_0x138ae1[_0x6e6c('0x31')]));if(this['isConfigured'](_0x138ae1[_0x6e6c('0x7f')])){logger[_0x6e6c('0x28')](util['format'](_0x6e6c('0x80'),_0x138ae1[_0x6e6c('0x7f')]));var _0x51980d=this[_0x6e6c('0xd')]['wait'](_0x138ae1[_0x6e6c('0x7f')]);if(_0x51980d[_0x6e6c('0x81')]===-0x1){return _0x51980d;}}return this[_0x6e6c('0xd')][_0x6e6c('0x7d')]();};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x45')]=function(_0x113947){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x82'),_0x113947['label']));if(!this[_0x6e6c('0x5e')](_0x113947[_0x6e6c('0x83')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x113947,'no\x20list\x20selected');}_0x113947[_0x6e6c('0x44')]=moment();if(this[_0x6e6c('0x5e')](_0x113947['delay'])){_0x113947[_0x6e6c('0x44')]=moment()[_0x6e6c('0x84')](_0x113947[_0x6e6c('0x85')],'minutes');}if(!this[_0x6e6c('0x5e')](_0x113947['callback_priority'])){_0x113947['callback_priority']=0x2;}this['createCmContact']['sync'](this,_0x113947);return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')]('CALLBACK\x20added\x20phone:\x20%s\x20on\x20list:\x20%s\x20at\x20%s',_0x113947[_0x6e6c('0x43')],_0x113947['list_id'],_0x113947[_0x6e6c('0x44')]));};AGIVertices[_0x6e6c('0x10')]['custom_app']=function(_0x46d236){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x87'),_0x46d236[_0x6e6c('0x31')]));var _0x541b82=this[_0x6e6c('0xd')]['exec'](_0x46d236[_0x6e6c('0x88')],_0x46d236[_0x6e6c('0x89')]);if(_0x541b82['result']===-0x1){return _0x541b82;}return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x8a'),_0x46d236[_0x6e6c('0x88')],_0x46d236[_0x6e6c('0x89')]));};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x8b')]=function(_0x25ca9b){logger['info'](util[_0x6e6c('0x79')](_0x6e6c('0x8c'),_0x25ca9b[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x25ca9b['text'])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')]('no\x20text\x20configured');}var _0x63d25f='\x22'+_0x25ca9b[_0x6e6c('0x53')]+'\x22';if(this[_0x6e6c('0x5e')](_0x25ca9b[_0x6e6c('0x89')])){_0x63d25f+=','+_0x25ca9b[_0x6e6c('0x89')];}var _0xad59f3=this['channel'][_0x6e6c('0x8d')]('MRCPSynth',_0x63d25f);if(_0xad59f3[_0x6e6c('0x81')]===-0x1){return _0xad59f3;}return this['channel']['noop'](util[_0x6e6c('0x79')]('Executed\x20command\x20MRCPSynth\x20%s',_0x63d25f));};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x8e')]=function(_0x2d1a75){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x8f'),_0x2d1a75[_0x6e6c('0x31')]));if(!this['isConfigured'](_0x2d1a75[_0x6e6c('0x53')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')]('no\x20text\x20configured');}var _0x53b728='\x22'+_0x2d1a75['text']+'\x22';if(this[_0x6e6c('0x5e')](_0x2d1a75[_0x6e6c('0x89')])){_0x53b728+=','+_0x2d1a75[_0x6e6c('0x89')];}var _0x1420d8=this[_0x6e6c('0xd')][_0x6e6c('0x8d')]('MRCPSynth',_0x53b728);if(_0x1420d8[_0x6e6c('0x81')]===-0x1){return _0x1420d8;}return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x90'),_0x53b728));};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x91')]=function(_0x200258){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x92'),_0x200258['label']));if(!this[_0x6e6c('0x5e')](_0x200258[_0x6e6c('0x93')])){return this[_0x6e6c('0xd')]['noop'](_0x6e6c('0x94'));}var _0x3776de=_0x200258[_0x6e6c('0x93')];if(this[_0x6e6c('0x5e')](_0x200258[_0x6e6c('0x89')])){_0x3776de+=','+_0x200258[_0x6e6c('0x89')];}var _0x18efb3=this[_0x6e6c('0xd')][_0x6e6c('0x8d')]('MRCPRecog',_0x3776de);if(_0x18efb3['result']===-0x1){return _0x18efb3;}var _0x246b69=this['getAndSetVariable'](_0x6e6c('0x95'),'LUMENVOX_ASR_CONFIDENCE');if(_0x246b69[_0x6e6c('0x81')]===-0x1){return _0x246b69;}var _0x32e290=this[_0x6e6c('0x74')](_0x6e6c('0x96'),_0x6e6c('0x97'));if(_0x32e290['result']===-0x1){return _0x32e290;}var _0x308edc=this['getAndSetVariable'](_0x6e6c('0x98'),'LUMENVOX_ASR_INSTANCE');if(_0x308edc['result']===-0x1){return _0x308edc;}return this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x99'),_0x3776de));};AGIVertices['prototype'][_0x6e6c('0x9a')]=function(_0x50eed6){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x9b'),_0x50eed6['label']));if(!this[_0x6e6c('0x5e')](_0x50eed6[_0x6e6c('0x93')])){return this[_0x6e6c('0xd')]['noop'](_0x6e6c('0x94'));}var _0x2da7d7=_0x50eed6[_0x6e6c('0x93')];if(this[_0x6e6c('0x5e')](_0x50eed6['options'])){_0x2da7d7+=','+_0x50eed6['options'];}var _0x486c7a=this[_0x6e6c('0xd')][_0x6e6c('0x8d')](_0x6e6c('0x9c'),_0x2da7d7);if(_0x486c7a[_0x6e6c('0x81')]===-0x1){return _0x486c7a;}var _0x31f188=this[_0x6e6c('0x74')]('RECOG_CONFIDENCE()','SESTEK_ASR_CONFIDENCE');if(_0x31f188[_0x6e6c('0x81')]===-0x1){return _0x31f188;}var _0x396263=this[_0x6e6c('0x74')](_0x6e6c('0x96'),_0x6e6c('0x9d'));if(_0x396263[_0x6e6c('0x81')]===-0x1){return _0x396263;}var _0x11b1e9=this[_0x6e6c('0x74')](_0x6e6c('0x98'),_0x6e6c('0x9e'));if(_0x11b1e9[_0x6e6c('0x81')]===-0x1){return _0x11b1e9;}return this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x99'),_0x2da7d7));};AGIVertices['prototype'][_0x6e6c('0x9f')]=function(_0x16f0a2){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0xa0'),_0x16f0a2[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x16f0a2['odbc_id'])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x16f0a2,'no\x20database\x20selected');}var _0x1cf2a0=this['getSquareOdbc']['sync'](this,_0x16f0a2[_0x6e6c('0xa1')]);if(!_0x1cf2a0){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x16f0a2,'no\x20odbc\x20database\x20found');}if(!this[_0x6e6c('0x5e')](_0x16f0a2[_0x6e6c('0xa2')])){return this[_0x6e6c('0xd')]['error'](_0x16f0a2,'no\x20query\x20configured');}var _0x551b9a=_0x16f0a2[_0x6e6c('0xa2')][_0x6e6c('0xa3')](/(\r\n|\n|\r)/gm,'\x20');this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0xa4'),_0x551b9a));var _0x569a41=this['getQueryOdbc'][_0x6e6c('0x76')](this,_0x1cf2a0,_0x551b9a);this[_0x6e6c('0x2f')]['sync'](this,_0x16f0a2,_0x551b9a);if(!this['isConfigured'](_0x16f0a2[_0x6e6c('0xa5')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xa6'));}var _0x5ea413=this[_0x6e6c('0xa7')]['sync'](this,_0x16f0a2[_0x6e6c('0xa5')]);if(!_0x5ea413){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x16f0a2,'no\x20variable\x20found');}var _0x33b099=this;_0x569a41[_0x6e6c('0xa8')](function(_0x57ff26,_0x3ccf7c){Object[_0x6e6c('0xa9')](_0x57ff26)['forEach'](function(_0x21ac43){_0x33b099[_0x6e6c('0xd')]['setVariable'](util[_0x6e6c('0x79')](_0x6e6c('0xaa'),_0x5ea413,_0x3ccf7c,_0x21ac43),_0x57ff26[_0x21ac43]);});});this[_0x6e6c('0xd')][_0x6e6c('0xab')](util[_0x6e6c('0x79')](_0x6e6c('0xac'),_0x5ea413),_0x569a41[_0x6e6c('0x70')]);return this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0xad'),_0x5ea413));};AGIVertices['prototype'][_0x6e6c('0xae')]=function(_0x26a2d3){logger['debug'](util[_0x6e6c('0x79')]('Enter\x20in\x20DIAL\x20(%s)\x20block',_0x26a2d3[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x26a2d3['sip_id'])){return this['channel'][_0x6e6c('0x26')](_0x26a2d3,_0x6e6c('0xaf'));}var _0x14283f=this[_0x6e6c('0x19')][_0x6e6c('0x76')](this,_0x26a2d3['sip_id']);if(!_0x14283f){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x26a2d3,_0x6e6c('0xb0'));}var _0xbeaf70=this[_0x6e6c('0xd')][_0x6e6c('0x8d')](_0x6e6c('0xb1'),[util[_0x6e6c('0x79')]('SIP/%s',_0x14283f),_0x26a2d3[_0x6e6c('0x7f')],_0x26a2d3[_0x6e6c('0xb2')],_0x26a2d3[_0x6e6c('0xb3')]]);if(_0xbeaf70[_0x6e6c('0x81')]===-0x1){return _0xbeaf70;}return this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0xb4'),_0x6e6c('0xb1')));};AGIVertices['prototype'][_0x6e6c('0xb5')]=function(_0x3cc69c){logger[_0x6e6c('0x28')](util['format']('Enter\x20in\x20DIALOGFLOW\x20(%s)\x20block',_0x3cc69c[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x3cc69c[_0x6e6c('0x5c')])){return this['channel'][_0x6e6c('0x86')](_0x6e6c('0xb6'));}if(!this[_0x6e6c('0x5e')](_0x3cc69c[_0x6e6c('0x53')])){return this['channel']['noop']('no\x20text\x20configured');}this[_0x6e6c('0xd')][_0x6e6c('0xb7')]=!![];this[_0x6e6c('0x2f')](_0x3cc69c);this['createSquareMessage'](_0x3cc69c[_0x6e6c('0x53')],'in');this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0xb8'),_0x3cc69c[_0x6e6c('0x53')]));var _0x41c2ff=this['googleDialogflow']['sync'](this,_0x3cc69c);if(_0x41c2ff){for(var _0x255d02 in _0x41c2ff){if(_0x41c2ff[_0x6e6c('0x6c')](_0x255d02)){this['channel'][_0x6e6c('0xab')](util['format'](_0x6e6c('0xb9'),_0x255d02[_0x6e6c('0xba')]()),_0x41c2ff[_0x255d02]);}}this['createSquareMessage'](_0x41c2ff[_0x6e6c('0xbb')],_0x6e6c('0xbc'));return this[_0x6e6c('0xd')]['noop'](util['format'](_0x6e6c('0xbd'),_0x41c2ff['speech']));}return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x3cc69c,'Dialogflow\x20is\x20unreachable');};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0xbe')]=function(_0x111540){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0xbf'),_0x111540[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x111540[_0x6e6c('0xc0')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')]('no\x20ndauth\x20url\x20configured');}if(!this[_0x6e6c('0x5e')](_0x111540[_0x6e6c('0xc1')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xc2'));}if(!this['isConfigured'](_0x111540['password'])){return this[_0x6e6c('0xd')]['noop']('no\x20password\x20configured');}if(!this[_0x6e6c('0x5e')](_0x111540[_0x6e6c('0xc3')])){return this['channel'][_0x6e6c('0x86')](_0x6e6c('0xc4'));}this[_0x6e6c('0xd')]['bot']=!![];this[_0x6e6c('0x2f')](_0x111540);this['createSquareMessage'](_0x111540[_0x6e6c('0x53')],'in');this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0xc5'),_0x111540[_0x6e6c('0x53')]));var _0x36909a=this[_0x6e6c('0x56')]['sync'](this,_0x111540);if(_0x36909a){for(var _0x391f96 in _0x36909a){if(_0x36909a[_0x6e6c('0x6c')](_0x391f96)){this[_0x6e6c('0xd')][_0x6e6c('0xab')](util['format'](_0x6e6c('0xc6'),_0x391f96[_0x6e6c('0xba')]()),_0x36909a[_0x391f96]);}}this['createSquareMessage'](_0x36909a[_0x6e6c('0xbb')],'out');if(_0x36909a[_0x6e6c('0xc7')]){this[_0x6e6c('0xd')][_0x6e6c('0x86')](util['format'](_0x6e6c('0xc8'),_0x36909a[_0x6e6c('0xc7')]));var _0x4c9555=this[_0x6e6c('0xd')][_0x6e6c('0xc9')](_0x36909a[_0x6e6c('0xc7')]);try{fs[_0x6e6c('0xca')](_0x36909a[_0x6e6c('0xc7')]+_0x6e6c('0xcb'));}catch(_0x146408){logger[_0x6e6c('0x26')](_0x146408);}return _0x4c9555;}else{return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0xcc'),_0x36909a[_0x6e6c('0xbb')]));}}return this['channel']['error'](_0x111540,_0x6e6c('0xcd'));};AGIVertices['prototype'][_0x6e6c('0xce')]=function(_0x1a071d){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0xcf'),_0x1a071d[_0x6e6c('0x31')]));return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xce'));};AGIVertices['prototype']['ext_dial']=function(_0x32e28e){logger[_0x6e6c('0x28')](util['format'](_0x6e6c('0xd0'),_0x32e28e[_0x6e6c('0x31')]));var _0xa8fe13='';if(_0x32e28e[_0x6e6c('0xd1')]){if(!this[_0x6e6c('0x5e')](_0x32e28e['trunk_id'])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x32e28e,'no\x20trunk\x20selected');}else{var _0x37aa1d=parseInt(_0x32e28e[_0x6e6c('0xd1')],0xa);if(isNaN(_0x37aa1d)){_0xa8fe13=_0x32e28e[_0x6e6c('0xd1')];}else{_0xa8fe13=this['getTrunk'][_0x6e6c('0x76')](this,_0x32e28e[_0x6e6c('0xd1')]);if(!_0xa8fe13){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x32e28e,_0x6e6c('0xd2'));}}}}else if(_0x32e28e['trunk_name']){_0xa8fe13=_0x32e28e[_0x6e6c('0xd3')];}else{return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x32e28e,'no\x20trunk\x20selected');}var _0x3fd529=this[_0x6e6c('0xd')][_0x6e6c('0x8d')](_0x6e6c('0xb1'),[util['format'](_0x6e6c('0xd4'),_0xa8fe13,_0x32e28e[_0x6e6c('0x43')]),_0x32e28e['timeout'],_0x32e28e['opts'],_0x32e28e[_0x6e6c('0xb3')]]);if(_0x3fd529[_0x6e6c('0x81')]===-0x1){return _0x3fd529;}return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util['format'](_0x6e6c('0xb4'),'DIAL'));};AGIVertices[_0x6e6c('0x10')]['finally']=function(_0x51cbde){logger[_0x6e6c('0x28')](util['format'](_0x6e6c('0xd5'),_0x51cbde[_0x6e6c('0x31')]));return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xd6'));};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0xb')]=function(_0x121fec){logger['info'](util[_0x6e6c('0x79')]('Enter\x20in\x20GETDIGITS\x20(%s)\x20block',_0x121fec['label']));if(_0x121fec[_0x6e6c('0xd7')]===0x0){return this[_0x6e6c('0x77')](_0x121fec);}_0x121fec[_0x6e6c('0xd7')]-=0x1;if(!this[_0x6e6c('0x5e')](_0x121fec[_0x6e6c('0xd8')])){return this[_0x6e6c('0xd')]['error'](_0x121fec,_0x6e6c('0xd9'));}var _0x12fc4c=this[_0x6e6c('0xda')][_0x6e6c('0x76')](this,_0x121fec['file_id']);if(!_0x12fc4c){return this[_0x6e6c('0xd')]['error'](_0x121fec,_0x6e6c('0xdb'));}if(!this[_0x6e6c('0x5e')](_0x121fec[_0x6e6c('0xa5')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')]('no\x20variable\x20selected\x20for\x20the\x20result');}var _0x5711a1=this[_0x6e6c('0xd')][_0x6e6c('0xdc')](_0x12fc4c,_0x121fec['response'],_0x121fec[_0x6e6c('0xdd')]);var _0x2975c7=_0x5711a1[_0x6e6c('0x81')]?_0x5711a1[_0x6e6c('0x81')][_0x6e6c('0x73')]():'';logger[_0x6e6c('0x28')]('test',JSON[_0x6e6c('0xde')](_0x5711a1));if(_0x5711a1[_0x6e6c('0x81')]===-0x1){this[_0x6e6c('0x2f')][_0x6e6c('0x76')](this,_0x121fec,_0x2975c7);return _0x5711a1;}else if(_0x5711a1[_0x6e6c('0x72')]===_0x6e6c('0x7f')){_0x5711a1['result']=_0x2975c7[_0x6e6c('0x70')]>=parseInt(_0x121fec[_0x6e6c('0xdf')])?'x':'i';}else{_0x5711a1['result']=_0x2975c7[_0x6e6c('0x70')]>=parseInt(_0x121fec[_0x6e6c('0xdf')])&&_0x2975c7['length']<=parseInt(_0x121fec[_0x6e6c('0xdd')])?'x':'i';}var _0x38c49b=this['getVariable'][_0x6e6c('0x76')](this,_0x121fec[_0x6e6c('0xa5')]);if(!_0x38c49b){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x121fec,_0x6e6c('0xe0'));}this[_0x6e6c('0xd')][_0x6e6c('0xab')](_0x38c49b,_0x2975c7);if(this[_0x6e6c('0x5e')](_0x121fec[_0x6e6c('0xe1')])){var _0x40fcb5=parseInt(_0x121fec[_0x6e6c('0xe1')],0xa);var _0x296f94=rs[_0x6e6c('0xe2')]({'charset':'*','length':_0x40fcb5});var _0x122699=_0x2975c7['length'];if(_0x122699>0x0){if(_0x122699>_0x40fcb5){this[_0x6e6c('0x2f')][_0x6e6c('0x76')](this,_0x121fec,_0x121fec[_0x6e6c('0xe3')]===_0x6e6c('0xe4')?_0x296f94+_0x2975c7[_0x6e6c('0xe5')](_0x40fcb5):_0x2975c7[_0x6e6c('0xe5')](0x0,_0x122699-_0x40fcb5)+_0x296f94);}else{this[_0x6e6c('0x2f')][_0x6e6c('0x76')](this,_0x121fec,rs[_0x6e6c('0xe2')]({'charset':'*','length':_0x122699}));}}else{this['createSquareDetailsReport'][_0x6e6c('0x76')](this,_0x121fec,'');}}else{this['createSquareDetailsReport'][_0x6e6c('0x76')](this,_0x121fec,_0x2975c7);}return _0x5711a1;};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0xc')]=function(_0x4f204f){logger[_0x6e6c('0x28')](util['format'](_0x6e6c('0xe6'),_0x4f204f['label']));return this['getdigits'](_0x4f204f);};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0xe7')]=function(_0x2a044e){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('Enter\x20in\x20GOAL\x20(%s)\x20block',_0x2a044e[_0x6e6c('0x31')]));this[_0x6e6c('0x2f')]['sync'](this,_0x2a044e,_0x2a044e['goalname']);return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util['format'](_0x6e6c('0xe8'),_0x2a044e[_0x6e6c('0xe9')]));};AGIVertices['prototype'][_0x6e6c('0xea')]=function(_0x47b937){logger[_0x6e6c('0x28')](util['format']('[AGI]\x20Enter\x20in\x20AWSPOLLY\x20(%s)\x20block',_0x47b937[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x47b937[_0x6e6c('0x60')])||!this[_0x6e6c('0x5e')](_0x47b937[_0x6e6c('0x61')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xeb'));}if(!this['isConfigured'](_0x47b937['text'])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xc4'));}this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0xec'),_0x47b937['text']));var _0x13f4bb=this['awsPolly'][_0x6e6c('0x76')](this,_0x47b937);if(_0x13f4bb){this['channel'][_0x6e6c('0x86')](util['format'](_0x6e6c('0xed'),_0x13f4bb));var _0xccbaea=this[_0x6e6c('0xd')][_0x6e6c('0xc9')](_0x13f4bb);try{fs[_0x6e6c('0xca')](_0x13f4bb+_0x6e6c('0xcb'));}catch(_0x2f92fd){logger[_0x6e6c('0x26')](_0x2f92fd);}return _0xccbaea;}return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x47b937,_0x6e6c('0xee'));};AGIVertices['prototype'][_0x6e6c('0xef')]=function(_0x5c01e6){logger['info'](util[_0x6e6c('0x79')](_0x6e6c('0xf0'),_0x5c01e6['label']));if(!this[_0x6e6c('0x5e')](_0x5c01e6[_0x6e6c('0x60')])||!this[_0x6e6c('0x5e')](_0x5c01e6[_0x6e6c('0x61')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xeb'));}if(!this[_0x6e6c('0x5e')](_0x5c01e6[_0x6e6c('0x64')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xf1'));}if(!this[_0x6e6c('0x5e')](_0x5c01e6[_0x6e6c('0x53')])){return this[_0x6e6c('0xd')]['noop'](_0x6e6c('0xc4'));}this[_0x6e6c('0xd')][_0x6e6c('0xb7')]=!![];this[_0x6e6c('0x2f')](_0x5c01e6);this['createSquareMessage'](_0x5c01e6[_0x6e6c('0x53')],'in');this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')]('Trying\x20Amazon\x20Lex:\x20%s',_0x5c01e6[_0x6e6c('0x53')]));var _0x27cc0a=this[_0x6e6c('0x63')][_0x6e6c('0x76')](this,_0x5c01e6);if(_0x27cc0a){for(var _0x4c9f0e in _0x27cc0a){if(_0x27cc0a['hasOwnProperty'](_0x4c9f0e)&&_[_0x6e6c('0x6d')](_0x27cc0a[_0x4c9f0e])){this[_0x6e6c('0xd')][_0x6e6c('0xab')](util['format'](_0x6e6c('0xf2'),_0x4c9f0e['toUpperCase']()),_0x27cc0a[_0x4c9f0e]);}}if(_[_0x6e6c('0x3f')](_0x27cc0a['message'])){return this['channel'][_0x6e6c('0x86')]('Amazon\x20Lex\x20ready\x20for\x20fulfillment');}else{this[_0x6e6c('0x3c')](_0x27cc0a[_0x6e6c('0xf3')],_0x6e6c('0xbc'));return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0xf4'),_0x27cc0a['message']));}}return this['channel']['error'](_0x5c01e6,_0x6e6c('0xf5'));};AGIVertices[_0x6e6c('0x10')]['googleasr']=function(_0x41080d){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('Enter\x20in\x20GOOGLEASR\x20(%s)\x20block\x20%s',_0x41080d['label'],_0x41080d[_0x6e6c('0x7f')]));if(!this[_0x6e6c('0x5e')](_0x41080d['key'])){return this['channel'][_0x6e6c('0x86')](_0x6e6c('0xb6'));}var _0x5db6be=_0x6e6c('0xf6');var _0x84a80a=util[_0x6e6c('0x79')](_0x6e6c('0xf7'),FILES_PATH,rs[_0x6e6c('0xe2')](0x4));var _0x673eff=util[_0x6e6c('0x79')](_0x6e6c('0xf8'),_0x84a80a,_0x5db6be);var _0x1289db=!![];if(_0x41080d[_0x6e6c('0xf9')]===_0x6e6c('0xfa')){_0x1289db=![];}var _0x121e39=this['channel'][_0x6e6c('0xfb')](_0x84a80a,_0x5db6be,_0x41080d[_0x6e6c('0xfc')],_0x41080d[_0x6e6c('0x7f')],undefined,_0x1289db);if(_0x121e39[_0x6e6c('0x81')]!==-0x1){this[_0x6e6c('0xd')][_0x6e6c('0x86')](util['format'](_0x6e6c('0xfd'),_0x673eff));var _0x57fc69=this[_0x6e6c('0x65')]['sync'](this,_0x41080d,_0x673eff);if(_0x57fc69){for(var _0x5c7ebf in _0x57fc69){if(_0x57fc69[_0x6e6c('0x6c')](_0x5c7ebf)){this['channel']['setVariable'](util['format'](_0x6e6c('0xfe'),_0x5c7ebf[_0x6e6c('0xba')]()),_0x57fc69[_0x5c7ebf]);}}return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0xff'),JSON[_0x6e6c('0xde')](_0x57fc69)));}}return _0x121e39;};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x100')]=function(_0x189c0f){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x101'),_0x189c0f[_0x6e6c('0x31')]));if(!this['isConfigured'](_0x189c0f['appid'])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')]('no\x20appid\x20configured');}if(!this[_0x6e6c('0x5e')](_0x189c0f['appsecret'])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0x102'));}var _0x586f37='wav';var _0x2a3d35=util[_0x6e6c('0x79')]('%s/recordings/%s',FILES_PATH,rs[_0x6e6c('0xe2')](0x4));var _0x519fa0=util[_0x6e6c('0x79')](_0x6e6c('0xf8'),_0x2a3d35,_0x586f37);var _0x5e11aa=!![];if(_0x189c0f[_0x6e6c('0xf9')]==='NOBEEP'){_0x5e11aa=![];}var _0x49b57e=this[_0x6e6c('0xd')][_0x6e6c('0xfb')](_0x2a3d35,_0x586f37,_0x189c0f[_0x6e6c('0xfc')],_0x189c0f[_0x6e6c('0x7f')],undefined,_0x5e11aa);if(_0x49b57e['result']!==-0x1){this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x103'),_0x519fa0));var _0x287a72=this[_0x6e6c('0x67')]['sync'](this,_0x189c0f,_0x519fa0);if(_0x287a72){for(var _0x4031f0 in _0x287a72){if(_0x287a72[_0x6e6c('0x6c')](_0x4031f0)){this['channel'][_0x6e6c('0xab')](util[_0x6e6c('0x79')]('TILDE_ASR_%s',_0x4031f0[_0x6e6c('0xba')]()),_0x287a72[_0x4031f0]);}}return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util['format'](_0x6e6c('0x104'),JSON[_0x6e6c('0xde')](_0x287a72)));}}return _0x49b57e;};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x105')]=function(_0x43773b){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('Enter\x20in\x20GOTO\x20(%s)\x20block',_0x43773b[_0x6e6c('0x31')]));return this['channel']['continueAt'](_0x43773b[_0x6e6c('0x37')],_0x43773b[_0x6e6c('0x38')],_0x43773b['priority']);};AGIVertices['prototype']['gotoif']=function(_0x2a0281){logger['info'](util['format']('Enter\x20in\x20GOTOIF\x20(%s)\x20block',_0x2a0281['label']));if(!this[_0x6e6c('0x5e')](_0x2a0281[_0x6e6c('0x106')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x2a0281,_0x6e6c('0x107'));}try{var _0x464727=eval(_0x2a0281[_0x6e6c('0x106')])?_0x6e6c('0x108'):'false';this[_0x6e6c('0xd')]['noop'](util[_0x6e6c('0x79')](_0x6e6c('0x109'),_0x2a0281['condition'],_0x464727));return{'code':0xc8,'result':_0x464727};}catch(_0x5d4ead){return{'code':0xc8,'result':_0x6e6c('0x10a')};}};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x10b')]=function(_0x2b8d4c){logger[_0x6e6c('0x28')](util['format'](_0x6e6c('0x10c'),_0x2b8d4c[_0x6e6c('0x31')]));if(!this['isConfigured'](_0x2b8d4c[_0x6e6c('0x10d')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x2b8d4c,_0x6e6c('0x10e'));}var _0x45fb32=this[_0x6e6c('0x1f')][_0x6e6c('0x76')](this,_0x2b8d4c['interval_id']);if(!_0x45fb32){return this['channel'][_0x6e6c('0x26')](_0x2b8d4c,_0x6e6c('0x10f'));}for(var _0x4db3a3=0x0;_0x4db3a3<_0x45fb32[_0x6e6c('0x70')];_0x4db3a3+=0x1){var _0x442fbe=this[_0x6e6c('0xd')][_0x6e6c('0xa7')](util['format']('IFTIME(%s?true:false)',_0x45fb32[_0x4db3a3]));if(_0x442fbe[_0x6e6c('0x81')]===-0x1){return _0x442fbe;}logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x110'),_0x45fb32[_0x4db3a3],_0x442fbe[_0x6e6c('0x72')]));if(_0x442fbe[_0x6e6c('0x72')]===_0x6e6c('0x108')){logger['info'](util['format'](_0x6e6c('0x110'),_0x45fb32[_0x4db3a3],_0x6e6c('0x108')));this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x110'),_0x45fb32[_0x4db3a3],_0x6e6c('0x108')));return{'code':0xc8,'result':_0x6e6c('0x108')};}else{logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('IFTIME\x20%s\x20%s',_0x45fb32[_0x4db3a3],_0x6e6c('0x10a')));this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x110'),_0x45fb32[_0x4db3a3],_0x6e6c('0x10a')));}}return{'code':0xc8,'result':_0x6e6c('0x10a')};};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x111')]=function(_0x386f35){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x112'),_0x386f35['label']));return this[_0x6e6c('0xd')][_0x6e6c('0x111')]();};AGIVertices['prototype']['ispeechasr']=function(_0x59cdea){logger['info'](util[_0x6e6c('0x79')]('Enter\x20in\x20ISPEECHASR\x20(%s)\x20block',_0x59cdea[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x59cdea[_0x6e6c('0x5c')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')]('no\x20key\x20configured');}var _0xfed1ac=_0x6e6c('0xf6');var _0x3e53c3=util[_0x6e6c('0x79')](_0x6e6c('0xf7'),FILES_PATH,rs[_0x6e6c('0xe2')](0x4));var _0x49dc5a=util['format'](_0x6e6c('0xf8'),_0x3e53c3,_0xfed1ac);var _0x4f7f2d=!![];if(_0x59cdea[_0x6e6c('0xf9')]===_0x6e6c('0xfa')){_0x4f7f2d=![];}var _0x35faad=this[_0x6e6c('0xd')]['recordFile'](_0x3e53c3,_0xfed1ac,_0x59cdea['intKey'],_0x59cdea['timeout'],undefined,_0x4f7f2d);if(_0x35faad[_0x6e6c('0x81')]!==-0x1){this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x113'),_0x49dc5a));var _0x5a8a5b=this[_0x6e6c('0x5b')][_0x6e6c('0x76')](this,_0x59cdea,_0x49dc5a);if(_0x5a8a5b){for(var _0x46f04d in _0x5a8a5b){if(_0x5a8a5b[_0x6e6c('0x6c')](_0x46f04d)){this['channel'][_0x6e6c('0xab')](util[_0x6e6c('0x79')](_0x6e6c('0x114'),_0x46f04d[_0x6e6c('0xba')]()),_0x5a8a5b[_0x46f04d]);}}return this[_0x6e6c('0xd')]['noop'](util[_0x6e6c('0x79')](_0x6e6c('0x115'),JSON[_0x6e6c('0xde')](_0x5a8a5b)));}}return _0x35faad;};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x116')]=function(_0x77db41){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x117'),_0x77db41[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x77db41[_0x6e6c('0x5c')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xb6'));}if(!this[_0x6e6c('0x5e')](_0x77db41[_0x6e6c('0x53')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xc4'));}this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x118'),_0x77db41[_0x6e6c('0x53')]));var _0x2b71ae=this[_0x6e6c('0x57')]['sync'](this,_0x77db41);if(_0x2b71ae){this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x113'),_0x2b71ae));var _0x35b494=this['channel']['streamFile'](_0x2b71ae,_0x77db41[_0x6e6c('0xfc')]);try{fs[_0x6e6c('0xca')](_0x2b71ae+_0x6e6c('0xcb'));}catch(_0x2be3b1){logger[_0x6e6c('0x26')](_0x2be3b1);}return _0x35b494;}return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x77db41,_0x6e6c('0x119'));};AGIVertices['prototype'][_0x6e6c('0x11a')]=function(_0x2a9e1a){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x11b'),_0x2a9e1a[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x2a9e1a[_0x6e6c('0x11c')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x2a9e1a,_0x6e6c('0x11d'));}logger['info'](util['format'](_0x6e6c('0x11e'),this['channel'][_0x6e6c('0x34')],_0x2a9e1a[_0x6e6c('0x11c')]));var _0x3df0cb=this[_0x6e6c('0x4c')][_0x6e6c('0x76')](this,_0x2a9e1a[_0x6e6c('0x11c')]);if(_0x3df0cb){logger[_0x6e6c('0x28')](util['format'](_0x6e6c('0x11f'),this[_0x6e6c('0xd')][_0x6e6c('0x34')],_0x2a9e1a[_0x6e6c('0x11c')]));this[_0x6e6c('0xd')]['noop'](util[_0x6e6c('0x79')](_0x6e6c('0x11f'),this['channel'][_0x6e6c('0x34')],_0x2a9e1a[_0x6e6c('0x11c')]));return{'code':0xc8,'result':'success'};}else{logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('AGENT\x20%s\x20NOT\x20FOUND\x20BY',this[_0x6e6c('0xd')]['callerid'],_0x2a9e1a[_0x6e6c('0x11c')]));this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x120'),this[_0x6e6c('0xd')][_0x6e6c('0x34')],_0x2a9e1a[_0x6e6c('0x11c')]));return{'code':0xc8,'result':_0x6e6c('0x121')};}};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x122')]=function(_0x153705){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('Enter\x20in\x20LOGOUT\x20(%s)\x20block',_0x153705['label']));if(!this[_0x6e6c('0x5e')](_0x153705[_0x6e6c('0x11c')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x153705,_0x6e6c('0x11d'));}logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('FIND\x20AGENT\x20%s\x20BY\x20%s',this[_0x6e6c('0xd')]['callerid'],_0x153705[_0x6e6c('0x11c')]));var _0x53e920=this[_0x6e6c('0x4b')][_0x6e6c('0x76')](this,_0x153705[_0x6e6c('0x11c')]);if(_0x53e920){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x11f'),this[_0x6e6c('0xd')][_0x6e6c('0x34')],_0x153705[_0x6e6c('0x11c')]));this['channel']['noop'](util[_0x6e6c('0x79')](_0x6e6c('0x11f'),this[_0x6e6c('0xd')][_0x6e6c('0x34')],_0x153705['findBy']));return{'code':0xc8,'result':_0x6e6c('0x123')};}else{logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('AGENT\x20%s\x20NOT\x20FOUND\x20BY',this['channel']['callerid'],_0x153705[_0x6e6c('0x11c')]));this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x120'),this[_0x6e6c('0xd')][_0x6e6c('0x34')],_0x153705['findBy']));return{'code':0xc8,'result':'failure'};}};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x124')]=function(_0xe2c3ae){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('Enter\x20in\x20MATH\x20(%s)\x20block',_0xe2c3ae[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0xe2c3ae['operation'])){return this['channel']['error'](_0xe2c3ae,_0x6e6c('0x125'));}this['channel'][_0x6e6c('0x86')](util['format'](_0x6e6c('0x126'),_0xe2c3ae[_0x6e6c('0x127')]));var _0x5b8d86=eval(_0xe2c3ae['operation']);if(!this['isConfigured'](_0xe2c3ae[_0x6e6c('0xa5')])){return this['channel']['noop'](_0x6e6c('0xa6'));}var _0x2f42cb=this[_0x6e6c('0xa7')][_0x6e6c('0x76')](this,_0xe2c3ae[_0x6e6c('0xa5')]);if(!_0x2f42cb){return this['channel']['error'](_0xe2c3ae,'no\x20variable\x20found');}if(_[_0x6e6c('0x128')](_0x5b8d86)){var _0x33fbf5=this;_0x5b8d86[_0x6e6c('0xa8')](function(_0x4775c6,_0x37a7ce){_0x33fbf5[_0x6e6c('0xd')]['setVariable'](util['format'](_0x6e6c('0x129'),_0x2f42cb,_0x37a7ce),_0x4775c6);});return this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x12a'),_0x2f42cb));}else{return this[_0x6e6c('0xd')][_0x6e6c('0xab')](_0x2f42cb,_0x5b8d86);}};AGIVertices[_0x6e6c('0x10')]['menu']=function(_0x2c4d6d){logger['info'](util[_0x6e6c('0x79')](_0x6e6c('0x12b'),_0x2c4d6d['label']));if(_0x2c4d6d[_0x6e6c('0xd7')]===0x0){return this[_0x6e6c('0x77')](_0x2c4d6d);}_0x2c4d6d[_0x6e6c('0xd7')]-=0x1;if(!this[_0x6e6c('0x5e')](_0x2c4d6d[_0x6e6c('0xd8')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x2c4d6d,_0x6e6c('0xd9'));}var _0x540485=this[_0x6e6c('0xda')][_0x6e6c('0x76')](this,_0x2c4d6d[_0x6e6c('0xd8')]);if(!_0x540485){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x2c4d6d,_0x6e6c('0xdb'));}var _0x54c6a8=this[_0x6e6c('0xd')][_0x6e6c('0xdc')](_0x540485,_0x2c4d6d[_0x6e6c('0x12c')],_0x2c4d6d[_0x6e6c('0x12d')]);var _0x5f1c3a=_0x54c6a8[_0x6e6c('0x81')];if(_0x54c6a8[_0x6e6c('0x81')]===-0x1){this[_0x6e6c('0x2f')]['sync'](this,_0x2c4d6d,'-1');return _0x54c6a8;}else if(_0x54c6a8[_0x6e6c('0x72')]===_0x6e6c('0x7f')){_0x54c6a8['result']=_0x54c6a8[_0x6e6c('0x81')][_0x6e6c('0x70')]>0x0?_0x54c6a8[_0x6e6c('0x81')]:'t';}else if(_[_0x6e6c('0x3e')](_0x54c6a8['result'])){_0x54c6a8['result']='#';_0x5f1c3a='#';}if(!this['isConfigured'](_0x2c4d6d[_0x6e6c('0xa5')])){this[_0x6e6c('0xd')][_0x6e6c('0x86')]('no\x20variable\x20selected\x20for\x20the\x20result');}else{var _0x4230fb=this[_0x6e6c('0xa7')][_0x6e6c('0x76')](this,_0x2c4d6d[_0x6e6c('0xa5')]);if(!_0x4230fb){return this['channel'][_0x6e6c('0x26')](_0x2c4d6d,_0x6e6c('0xe0'));}this[_0x6e6c('0xd')][_0x6e6c('0xab')](_0x4230fb,_0x5f1c3a);}this[_0x6e6c('0x2f')]['sync'](this,_0x2c4d6d,_0x5f1c3a);return _0x54c6a8;};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x86')]=function(_0x516d2d){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x12e'),_0x516d2d[_0x6e6c('0x31')]));return this['channel'][_0x6e6c('0x86')](_0x516d2d[_0x6e6c('0x12f')]||_0x516d2d[_0x6e6c('0x31')]);};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x130')]=function(_0x198e94){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('Enter\x20in\x20PAUSE\x20(%s)\x20block',_0x198e94[_0x6e6c('0x31')]));if(!this['isConfigured'](_0x198e94[_0x6e6c('0x11c')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x198e94,_0x6e6c('0x11d'));}logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x11e'),this['channel'][_0x6e6c('0x34')],_0x198e94[_0x6e6c('0x11c')]));var _0x127fb4=this[_0x6e6c('0x131')][_0x6e6c('0x76')](this,_0x198e94[_0x6e6c('0x132')]);var _0x411615=this['agentPause'][_0x6e6c('0x76')](this,_0x198e94[_0x6e6c('0x11c')],_0x127fb4);if(_0x411615){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x11f'),this['channel'][_0x6e6c('0x34')],_0x198e94[_0x6e6c('0x11c')]));this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x11f'),this[_0x6e6c('0xd')][_0x6e6c('0x34')],_0x198e94[_0x6e6c('0x11c')]));return{'code':0xc8,'result':_0x6e6c('0x123')};}else{logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('AGENT\x20%s\x20NOT\x20FOUND\x20BY',this[_0x6e6c('0xd')][_0x6e6c('0x34')],_0x198e94[_0x6e6c('0x11c')]));this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')]('AGENT\x20%s\x20FOUND\x20BY',this['channel']['callerid'],_0x198e94['findBy']));return{'code':0xc8,'result':_0x6e6c('0x121')};}};AGIVertices['prototype'][_0x6e6c('0x133')]=function(_0x2b360c){logger['info'](util[_0x6e6c('0x79')]('Enter\x20in\x20PLAYBACK\x20(%s)\x20block',_0x2b360c[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x2b360c[_0x6e6c('0xd8')])){return this['channel']['error'](_0x2b360c,_0x6e6c('0xd9'));}var _0x36964c=this['getSound'][_0x6e6c('0x76')](this,_0x2b360c[_0x6e6c('0xd8')]);if(!_0x36964c){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x2b360c,_0x6e6c('0xdb'));}var _0x50a82b=this[_0x6e6c('0xd')]['exec'](_0x6e6c('0x134'),[_0x36964c,_0x2b360c[_0x6e6c('0xb2')]]);if(_0x50a82b['result']===-0x1){return _0x50a82b;}return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util['format'](_0x6e6c('0x8a'),_0x6e6c('0x134'),_0x36964c));};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x135')]=function(_0x3f05aa){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x136'),_0x3f05aa[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x3f05aa[_0x6e6c('0x137')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x3f05aa,_0x6e6c('0x138'));}var _0x5a48ab='';var _0x26848f=parseInt(_0x3f05aa[_0x6e6c('0x137')],0xa);if(isNaN(_0x26848f)){_0x5a48ab=_0x3f05aa['queue_id'];}else{_0x5a48ab=this[_0x6e6c('0x14')]['sync'](this,_0x3f05aa[_0x6e6c('0x137')]);if(!_0x5a48ab){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x3f05aa,_0x6e6c('0x139'));}}var _0x97081e='';if(this[_0x6e6c('0x5e')](_0x3f05aa['file_id'])){var _0x10ef9e=this[_0x6e6c('0xda')][_0x6e6c('0x76')](this,_0x3f05aa[_0x6e6c('0xd8')]);if(_0x10ef9e){_0x97081e=_0x10ef9e;}}this[_0x6e6c('0x2f')][_0x6e6c('0x76')](this,_0x3f05aa,_0x5a48ab);if(_0x3f05aa[_0x6e6c('0xb2')][_0x6e6c('0x13a')]('x')<0x0){_0x3f05aa[_0x6e6c('0xb2')]+='x';}if(_0x3f05aa[_0x6e6c('0xb2')][_0x6e6c('0x13a')]('X')<0x0){_0x3f05aa[_0x6e6c('0xb2')]+='X';}this['channel']['setVariable']('XMCS-QUEUE',_0x5a48ab?_0x5a48ab[_0x6e6c('0x13b')]():'');var _0x5044ff=this['channel'][_0x6e6c('0x8d')](_0x6e6c('0x13c'),[_0x5a48ab,_0x3f05aa[_0x6e6c('0xb2')],_0x3f05aa[_0x6e6c('0xb3')],_0x97081e,_0x3f05aa[_0x6e6c('0x7f')],_0x3f05aa[_0x6e6c('0x78')],_0x3f05aa['macro'],_0x3f05aa['gosub'],'',_0x3f05aa[_0x6e6c('0x13d')]]);if(_0x5044ff['result']===-0x1){return _0x5044ff;}return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')]('Executed\x20command\x20%s\x20%s','QUEUE',_0x5a48ab));};AGIVertices[_0x6e6c('0x10')]['record']=function(_0x3a0d75){logger[_0x6e6c('0x28')](util['format'](_0x6e6c('0x13e'),_0x3a0d75[_0x6e6c('0x31')]));var _0x35cc30=_0x3a0d75[_0x6e6c('0x13f')]||'wav';var _0xe980b1=util[_0x6e6c('0x79')](_0x6e6c('0x140'),this[_0x6e6c('0xd')]['uniqueid'],rs[_0x6e6c('0xe2')](0x5));var _0x33916a=util['format'](_0x6e6c('0x141'),FILES_PATH,_0xe980b1,_0x35cc30);var _0x43a56d=util['format']('%s/recordings/%s',FILES_PATH,_0xe980b1);this[_0x6e6c('0x35')][_0x6e6c('0x76')](this,_0x3a0d75,_0xe980b1,_0x33916a);this['channel'][_0x6e6c('0xab')](_0x6e6c('0x142'),_0xe980b1);logger[_0x6e6c('0x28')]('Recording\x20%s\x20%s\x20%s\x20%s',_0x43a56d,_0x35cc30,_0x3a0d75['escape_digits'],_0x3a0d75[_0x6e6c('0x7f')]);return this[_0x6e6c('0xd')]['recordFile'](_0x43a56d,_0x35cc30,_0x3a0d75['escape_digits'],_0x3a0d75[_0x6e6c('0x7f')],undefined,!![]);};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x143')]=function(_0x4cc8ef){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('Enter\x20in\x20SAYDIGITS\x20(%s)\x20block',_0x4cc8ef[_0x6e6c('0x31')]));return this[_0x6e6c('0xd')][_0x6e6c('0x144')](_0x4cc8ef[_0x6e6c('0x145')][_0x6e6c('0xa3')](/\s+/g,''),_0x4cc8ef[_0x6e6c('0x146')]);};AGIVertices['prototype'][_0x6e6c('0x147')]=function(_0x340b35){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x148'),_0x340b35[_0x6e6c('0x31')]));return this[_0x6e6c('0xd')][_0x6e6c('0x149')](_0x340b35[_0x6e6c('0x14a')][_0x6e6c('0xa3')](/\s+/g,''),_0x340b35['escape_digits']);};AGIVertices['prototype'][_0x6e6c('0x14b')]=function(_0x5b36c8){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('Enter\x20in\x20SAYPHONETIC\x20(%s)\x20block',_0x5b36c8[_0x6e6c('0x31')]));return this[_0x6e6c('0xd')][_0x6e6c('0x14c')](_0x5b36c8[_0x6e6c('0x53')],_0x5b36c8[_0x6e6c('0x146')]);};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x14d')]=function(_0x245597){logger['info'](util[_0x6e6c('0x79')](_0x6e6c('0x14e'),_0x245597[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x245597['account_id'])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0x14f'));}var _0x397ee6=this[_0x6e6c('0x1e')][_0x6e6c('0x76')](this,_0x245597['account_id']);if(!_0x397ee6||!_0x397ee6[_0x6e6c('0x150')]){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x245597,'no\x20mail\x20account\x20found');}var _0x1ddfbf={'from':util[_0x6e6c('0x79')](_0x6e6c('0x151'),_0x397ee6[_0x6e6c('0x15')],_0x397ee6[_0x6e6c('0x152')]||_0x397ee6['Smtp'][_0x6e6c('0x153')]),'to':_0x245597['to']||'','cc':_0x245597['cc']||'','bcc':_0x245597[_0x6e6c('0x154')]||'','subject':_0x245597[_0x6e6c('0x155')],'html':_0x245597[_0x6e6c('0x53')],'text':_0x245597[_0x6e6c('0x53')]};var _0x157547={'tls':{'rejectUnauthorized':![]}};if(_0x397ee6[_0x6e6c('0x150')]['service']){_0x157547['service']=_0x397ee6['Smtp'][_0x6e6c('0x156')];}else{_0x157547[_0x6e6c('0x157')]=_0x397ee6[_0x6e6c('0x150')][_0x6e6c('0x157')];_0x157547['port']=_0x397ee6[_0x6e6c('0x150')][_0x6e6c('0x158')];_0x157547[_0x6e6c('0x159')]=_0x397ee6[_0x6e6c('0x150')][_0x6e6c('0x159')];}if(_0x397ee6[_0x6e6c('0x150')][_0x6e6c('0x15a')]){_0x157547[_0x6e6c('0x15b')]={'user':_0x397ee6[_0x6e6c('0x150')][_0x6e6c('0x153')],'pass':_0x397ee6[_0x6e6c('0x150')][_0x6e6c('0x15c')]};}if(this[_0x6e6c('0x5e')](_0x245597[_0x6e6c('0x15d')])){}logger[_0x6e6c('0x15e')](_0x6e6c('0x15f'),JSON[_0x6e6c('0xde')](_0x1ddfbf));this[_0x6e6c('0x2f')]['sync'](this,_0x245597,_0x245597[_0x6e6c('0x160')]);this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x161'),_0x397ee6[_0x6e6c('0x15')]));this[_0x6e6c('0x162')]['sync'](this,_0x157547,_0x1ddfbf);return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0x163'));};AGIVertices['prototype'][_0x6e6c('0x164')]=function(_0x2b5bae){logger[_0x6e6c('0x28')](util['format'](_0x6e6c('0x165'),_0x2b5bae['label']));return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0x166'));};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x167')]=function(_0x17ae70){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x168'),_0x17ae70[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x17ae70[_0x6e6c('0x169')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0x16a'));}var _0x30e9b1=this[_0x6e6c('0x2d')][_0x6e6c('0x76')](this,_0x17ae70[_0x6e6c('0x169')]);if(!_0x30e9b1){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x17ae70,_0x6e6c('0x16b'));}var _0x405583={'body':_0x17ae70['sms_text'],'phone':_0x17ae70['to']||'','SmsAccountId':_0x30e9b1['id']};logger[_0x6e6c('0x15e')](_0x6e6c('0x16c'),JSON[_0x6e6c('0xde')](_0x405583));this[_0x6e6c('0x2f')]['sync'](this,_0x17ae70,_0x17ae70[_0x6e6c('0x169')]);this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x16d'),_0x30e9b1[_0x6e6c('0x15')]));this[_0x6e6c('0x2e')][_0x6e6c('0x76')](this,_0x405583);return this['channel'][_0x6e6c('0x86')](_0x6e6c('0x16e'));};AGIVertices[_0x6e6c('0x10')]['set']=function(_0x2ef7d1){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x16f'),_0x2ef7d1[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x2ef7d1['variable_id'])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x2ef7d1,_0x6e6c('0x170'));}var _0x5809dd=this[_0x6e6c('0xa7')]['sync'](this,_0x2ef7d1[_0x6e6c('0xa5')]);if(!_0x5809dd){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x2ef7d1,_0x6e6c('0xe0'));}return this[_0x6e6c('0xd')]['setVariable'](_0x5809dd,_0x2ef7d1[_0x6e6c('0x171')]);};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x172')]=function(_0x3adda7){logger['info'](util[_0x6e6c('0x79')](_0x6e6c('0x173'),_0x3adda7['label']));this[_0x6e6c('0xd')]['noop'](_0x6e6c('0x174'));if(_0x3adda7[_0x6e6c('0x7d')]===_0x6e6c('0x175')){this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0x176'));return this[_0x6e6c('0xd')][_0x6e6c('0x7d')]();}return this['channel'][_0x6e6c('0x86')](_0x6e6c('0x177'));};AGIVertices[_0x6e6c('0x10')]['subproject']=function(_0x323228){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x178'),_0x323228[_0x6e6c('0x31')]));if(!this['isConfigured'](_0x323228[_0x6e6c('0x179')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x323228,_0x6e6c('0x17a'));}var _0x2caf93=this[_0x6e6c('0x17b')][_0x6e6c('0x76')](this,_0x323228[_0x6e6c('0x179')]);if(!this['isConfigured'](_0x2caf93)){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x323228,util[_0x6e6c('0x79')](_0x6e6c('0x17c'),_0x323228[_0x6e6c('0x179')]));}if(_0x2caf93===this[_0x6e6c('0xd')]['arg_1']){return this[_0x6e6c('0xd')]['error'](_0x323228,_0x6e6c('0x17d'));}this[_0x6e6c('0x2f')]['sync'](this,_0x323228,_0x2caf93);var _0x4977a7=this[_0x6e6c('0xd')][_0x6e6c('0x8d')](_0x6e6c('0x17e'),util[_0x6e6c('0x79')]('agi://%s/square,\x22%s\x22,\x22%s\x22',config['agi'][_0x6e6c('0x157')]||_0x6e6c('0x17f'),_0x2caf93,this['channel'][_0x6e6c('0x33')]));if(_0x4977a7[_0x6e6c('0x81')]===-0x1){return _0x4977a7;}return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x8a'),'AGI',_0x2caf93));};AGIVertices['prototype']['system']=function(_0x26257f){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')]('Enter\x20in\x20SYSTEM\x20(%s)\x20block',_0x26257f[_0x6e6c('0x31')]));var _0x5e9cfc=this[_0x6e6c('0x50')]['sync'](this,_0x26257f[_0x6e6c('0x7b')]);this['createSquareDetailsReport']['sync'](this,_0x26257f,_0x26257f['command']);if(this['isConfigured'](_0x26257f[_0x6e6c('0xa5')])){var _0x54305a=this[_0x6e6c('0xa7')]['sync'](this,_0x26257f[_0x6e6c('0xa5')]);if(_0x54305a){this['channel'][_0x6e6c('0xab')](_0x54305a,_0x5e9cfc);return this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')]('sh\x20command:\x20%s\x20result\x20on\x20variable:\x20%s',_0x26257f[_0x6e6c('0x7b')],_0x54305a));}}return this['channel'][_0x6e6c('0x86')](util[_0x6e6c('0x79')]('sh\x20command:\x20%s\x20result\x20no\x20stored',_0x26257f[_0x6e6c('0x7b')]));};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x180')]=function(_0x451958){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x181'),_0x451958[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x451958[_0x6e6c('0x53')])){return this[_0x6e6c('0xd')][_0x6e6c('0x86')](_0x6e6c('0xc4'));}this[_0x6e6c('0xd')]['noop'](util[_0x6e6c('0x79')](_0x6e6c('0x182'),_0x451958[_0x6e6c('0x53')]));var _0x198f06=this[_0x6e6c('0x52')][_0x6e6c('0x76')](this,_0x451958);if(_0x198f06){this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x183'),_0x198f06));var _0x1182e4=this['channel'][_0x6e6c('0xc9')](_0x198f06);try{fs[_0x6e6c('0xca')](_0x198f06+_0x6e6c('0xcb'));}catch(_0x24f115){logger['error'](_0x24f115);}return _0x1182e4;}return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x451958,_0x6e6c('0x184'));};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x185')]=function(_0x3ca248){logger['info'](util['format'](_0x6e6c('0x186'),_0x3ca248['label']));if(!this[_0x6e6c('0x5e')](_0x3ca248[_0x6e6c('0x11c')])){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x3ca248,'no\x20find\x20by\x20configured');}logger['info'](util[_0x6e6c('0x79')](_0x6e6c('0x11e'),this['channel'][_0x6e6c('0x34')],_0x3ca248[_0x6e6c('0x11c')]));var _0x17a557=this[_0x6e6c('0x49')]['sync'](this,_0x3ca248[_0x6e6c('0x11c')]);if(_0x17a557){logger['info'](util[_0x6e6c('0x79')](_0x6e6c('0x11f'),this[_0x6e6c('0xd')][_0x6e6c('0x34')],_0x3ca248['findBy']));this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')]('AGENT\x20%s\x20FOUND\x20BY',this[_0x6e6c('0xd')][_0x6e6c('0x34')],_0x3ca248['findBy']));return{'code':0xc8,'result':_0x6e6c('0x123')};}else{logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x120'),this['channel']['callerid'],_0x3ca248[_0x6e6c('0x11c')]));this[_0x6e6c('0xd')][_0x6e6c('0x86')](util[_0x6e6c('0x79')](_0x6e6c('0x120'),this[_0x6e6c('0xd')][_0x6e6c('0x34')],_0x3ca248[_0x6e6c('0x11c')]));return{'code':0xc8,'result':_0x6e6c('0x121')};}};AGIVertices[_0x6e6c('0x10')]['voicemail']=function(_0x32bf34){logger[_0x6e6c('0x28')](util[_0x6e6c('0x79')](_0x6e6c('0x187'),_0x32bf34[_0x6e6c('0x31')]));var _0x4f1046=this['channel']['exec'](_0x6e6c('0x188'),[_0x32bf34[_0x6e6c('0x189')],_0x32bf34['options']]);if(_0x4f1046[_0x6e6c('0x81')]===-0x1){return _0x4f1046;}return this[_0x6e6c('0xd')][_0x6e6c('0x86')](util['format']('Executed\x20command\x20%s\x20%s',_0x6e6c('0x188'),_0x32bf34['mailbox']));};AGIVertices[_0x6e6c('0x10')][_0x6e6c('0x18a')]=function(_0x112c42){logger['info'](util[_0x6e6c('0x79')](_0x6e6c('0x18b'),_0x112c42[_0x6e6c('0x31')]));if(!this[_0x6e6c('0x5e')](_0x112c42[_0x6e6c('0xa5')])){return this[_0x6e6c('0xd')]['error'](_0x112c42,_0x6e6c('0x170'));}var _0x4ac5b2=this['getVariable'][_0x6e6c('0x76')](this,_0x112c42[_0x6e6c('0xa5')]);if(!_0x4ac5b2){return this[_0x6e6c('0xd')][_0x6e6c('0x26')](_0x112c42,'no\x20variable\x20found');}var _0x5abedb=this[_0x6e6c('0xd')]['getVariable'](_0x4ac5b2);return{'code':0xc8,'result':_0x5abedb['extra']?_0x5abedb[_0x6e6c('0x72')]:'-'};};String[_0x6e6c('0x10')]['replaceAll']=function(_0x5b4d9d,_0x537683){return this[_0x6e6c('0x6f')](_0x5b4d9d)[_0x6e6c('0x18c')](_0x537683);};module[_0x6e6c('0x18d')]=AGIVertices;
\ No newline at end of file
index db267b9..67ffc4a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x98a8=['destlinkedid','savePause','acwTimeout','timer','stopAcw','uniqueid','updateAcw','lastPauseAt','update','catch','error','[%s][INPAUSE][AGENT:%s][QUEUE:%s]','[%s][TIMER:%s][AGENT:%s][QUEUE:%s]','finally','message','saveUnpause','[%s][UPDATE][ACWTIME:%s]','[%s][UPDATE][ERRORS:%s]','[ACW][TIMERS]','stringify','[ACW][STOP]\x20%s','prototype','syncAgentConnect','mandatoryDisposition','interface','syncAgentConnectPreview','isUndefined','attended','[%s][HANGUP:UNIQUEID]','linkedid','[%s][HANGUP:LINKEDID]','[ACW][syncHangupRequest]\x20%s','[%s][HANGUPATTENDEDTRANSFER:UNIQUEID]','isNil','transfereeuniqueid','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','[ACW][syncAttendedTransfer]\x20%s','[%s][BLINDTRANSFER:UNIQUEID]','transfereruniqueid','transfererlinkedid','[%s][BLINDTRANSFER:LINKEDID]','[ACW][syncBlindTransfer]\x20%s','[%s][AUTOPAUSE][AGENT:%s][QUEUE:%]','Auto-Pause','[ACW][syncAgentRingNoAnswer]\x20%s','exports','util','lodash','moment','../ami','../../../config/logger','acw','../rpc/user','voiceQueues','agents','timers','agentconnect','bind','hanguprequest','syncHangupRequest','hangup','syncHangup','agentringnoanswer','syncAgentRingNoAnswer','attendedtransfer','syncBlindTransfer','custom:agentConnectPreview','milliseconds','diff','seconds','startAcw','channels','queue','mandatoryDispositionPause','name','Action','QueuePause','then','getAgent','voicePause','info','[%s][START][AGENT:%s][QUEUE:%s]'];(function(_0x466663,_0x44219b){var _0x1e4d52=function(_0x5b8e47){while(--_0x5b8e47){_0x466663['push'](_0x466663['shift']());}};_0x1e4d52(++_0x44219b);}(_0x98a8,0x12c));var _0x898a=function(_0x60f2b6,_0x554dec){_0x60f2b6=_0x60f2b6-0x0;var _0xd703eb=_0x98a8[_0x60f2b6];return _0xd703eb;};'use strict';var util=require(_0x898a('0x0'));var _=require(_0x898a('0x1'));var moment=require(_0x898a('0x2'));var ami=require(_0x898a('0x3'));var logger=require(_0x898a('0x4'))(_0x898a('0x5'));var RpcUser=require(_0x898a('0x6'));var RpcVoiceAgentReport=require('../rpc/voiceAgentReport');function Acw(_0x2bb3e2){this[_0x898a('0x7')]=_0x2bb3e2[_0x898a('0x7')];this[_0x898a('0x8')]=_0x2bb3e2[_0x898a('0x8')];this['timers']=_0x2bb3e2[_0x898a('0x9')];this['channels']={};ami['on'](_0x898a('0xa'),this['syncAgentConnect'][_0x898a('0xb')](this));ami['on'](_0x898a('0xc'),this[_0x898a('0xd')][_0x898a('0xb')](this));ami['on'](_0x898a('0xe'),this[_0x898a('0xf')][_0x898a('0xb')](this));ami['on'](_0x898a('0x10'),this[_0x898a('0x11')]['bind'](this));ami['on'](_0x898a('0x12'),this['syncAttendedTransfer'][_0x898a('0xb')](this));ami['on']('blindtransfer',this[_0x898a('0x13')][_0x898a('0xb')](this));ami['on'](_0x898a('0x14'),this['syncAgentConnectPreview']['bind'](this));}function getDiff(_0x5b5c9c){var _0x373d53=moment()[_0x898a('0x15')](0x0);var _0xb24335=moment(_0x5b5c9c)[_0x898a('0x15')](0x0);return _0x373d53[_0x898a('0x16')](_0xb24335,_0x898a('0x17'));}Acw['prototype'][_0x898a('0x18')]=function(_0x53a4b8){try{var _0x3fec7a=this;var _0x5c96a6=this[_0x898a('0x19')][_0x53a4b8]['interface'];var _0x18d167=this['channels'][_0x53a4b8][_0x898a('0x1a')];var _0x3197f7=this[_0x898a('0x7')][_0x18d167];var _0x4ddd4d=![];var _0x1faf4c='ACW';if(_0x3197f7['mandatoryDisposition']){if(_0x3197f7[_0x898a('0x1b')][_0x898a('0x1c')]){_0x4ddd4d=!![];_0x1faf4c=_0x3197f7['mandatoryDispositionPause']['name'];}}ami[_0x898a('0x1d')]({'action':_0x898a('0x1e'),'interface':_0x5c96a6,'paused':!![],'reason':_0x1faf4c})[_0x898a('0x1f')](function(_0x2917ff){if(_0x3fec7a[_0x898a('0x8')][_0x5c96a6]){return RpcUser[_0x898a('0x20')](_0x3fec7a[_0x898a('0x8')][_0x5c96a6]['id'])['then'](function(_0x247cfc){if(_0x247cfc&&!_0x247cfc[_0x898a('0x21')]){logger[_0x898a('0x22')](_0x898a('0x23'),_0x53a4b8,_0x5c96a6,_0x18d167);var _0x30495a=_0x3fec7a[_0x898a('0x19')][_0x53a4b8]['attended']&&_0x3fec7a[_0x898a('0x19')][_0x53a4b8][_0x898a('0x24')]?_0x3fec7a[_0x898a('0x19')][_0x53a4b8][_0x898a('0x24')]:_0x53a4b8;return RpcUser[_0x898a('0x25')](_0x3fec7a[_0x898a('0x8')][_0x5c96a6],_0x1faf4c,_0x30495a)['then'](function(_0x20bde0){if(!_0x4ddd4d){_0x3fec7a['timers'][_0x5c96a6]={};logger['info']('[%s][TIMER:%s][AGENT:%s][QUEUE:%s]',_0x53a4b8,_0x3fec7a[_0x898a('0x7')][_0x18d167][_0x898a('0x26')],_0x5c96a6,_0x18d167);_0x3fec7a[_0x898a('0x9')][_0x5c96a6][_0x898a('0x27')]=setTimeout(_0x3fec7a[_0x898a('0x28')][_0x898a('0xb')](_0x3fec7a,_0x5c96a6),_0x3fec7a[_0x898a('0x7')][_0x18d167][_0x898a('0x26')]*0x3e8);_0x3fec7a[_0x898a('0x9')][_0x5c96a6]['lastPauseAt']=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');_0x3fec7a[_0x898a('0x9')][_0x5c96a6][_0x898a('0x29')]=_0x53a4b8;_0x3fec7a[_0x898a('0x9')][_0x5c96a6][_0x898a('0x1a')]=_0x18d167;_0x3fec7a[_0x898a('0x9')][_0x5c96a6][_0x898a('0x2a')]=function(){var _0xe3c983=getDiff(_0x3fec7a[_0x898a('0x9')][_0x5c96a6][_0x898a('0x2b')]);clearTimeout(_0x3fec7a[_0x898a('0x9')][_0x5c96a6][_0x898a('0x27')]);_0x3fec7a[_0x898a('0x9')][_0x5c96a6]['timer']=![];RpcVoiceAgentReport[_0x898a('0x2c')]({'acwtime':_0xe3c983},_0x3fec7a[_0x898a('0x9')][_0x5c96a6][_0x898a('0x29')],_0x5c96a6)[_0x898a('0x1f')](function(_0x2aa99e){logger['info']('[%s][UPDATE][ACWTIME:%s]',_0x53a4b8,_0xe3c983,_0x2aa99e);})[_0x898a('0x2d')](function(_0x1e2fd4){logger[_0x898a('0x2e')]('[%s][UPDATE][ERRORS:%s]',_0x53a4b8,_0x1e2fd4);});delete _0x3fec7a[_0x898a('0x9')][_0x5c96a6];};}});}else{logger[_0x898a('0x22')](_0x898a('0x2f'),_0x53a4b8,_0x5c96a6,_0x18d167);}});}})[_0x898a('0x2d')](function(_0x41cd46){logger[_0x898a('0x2e')](_0x898a('0x30'),_0x53a4b8,_0x3fec7a[_0x898a('0x7')][_0x18d167]['acwTimeout'],_0x5c96a6,_0x18d167);})[_0x898a('0x31')](function(){delete _0x3fec7a['channels'][_0x53a4b8];});}catch(_0x573eb3){logger[_0x898a('0x2e')]('[ACW][START]\x20%s',_0x573eb3[_0x898a('0x32')]);}};Acw['prototype'][_0x898a('0x28')]=function(_0x4f202c){try{var _0x299371=this;if(_0x299371[_0x898a('0x9')][_0x4f202c]){_0x299371[_0x898a('0x9')][_0x4f202c]['timer']=![];var _0x554897=_0x299371['timers'][_0x4f202c][_0x898a('0x29')];var _0x429c32=_0x299371['timers'][_0x4f202c][_0x898a('0x1a')];var _0x3d3463=_0x299371[_0x898a('0x7')][_0x429c32][_0x898a('0x26')];logger['info']('[TIMER][STOP][AGENT:%s]',_0x4f202c);RpcUser[_0x898a('0x33')](this[_0x898a('0x8')][_0x4f202c]);RpcVoiceAgentReport['update']({'acwtime':_0x3d3463,'agentacw':!![]},_0x554897,_0x4f202c)['then'](function(_0x168f92){logger[_0x898a('0x22')](_0x898a('0x34'),_0x554897,_0x3d3463,_0x168f92);})[_0x898a('0x2d')](function(_0x51681f){logger[_0x898a('0x2e')](_0x898a('0x35'),_0x554897,_0x51681f);});}else{logger['error']('[ACW][STOP]\x20Interface\x20%s\x20doesn\x27t\x20have\x20timer',_0x4f202c);if(_0x299371['timers']){logger[_0x898a('0x22')](_0x898a('0x36'),JSON[_0x898a('0x37')](_0x299371[_0x898a('0x9')]));}}}catch(_0x20a6eb){logger[_0x898a('0x2e')](_0x898a('0x38'),_0x20a6eb[_0x898a('0x32')]);}};Acw[_0x898a('0x39')][_0x898a('0x3a')]=function(_0x246048){try{if(this[_0x898a('0x7')][_0x246048[_0x898a('0x1a')]]&&(this[_0x898a('0x7')][_0x246048[_0x898a('0x1a')]]['acw']||this[_0x898a('0x7')][_0x246048[_0x898a('0x1a')]][_0x898a('0x3b')])){if(this['agents'][_0x246048[_0x898a('0x3c')]]){this[_0x898a('0x19')][_0x246048[_0x898a('0x29')]]={'queue':_0x246048[_0x898a('0x1a')],'interface':_0x246048[_0x898a('0x3c')],'destlinkedid':_0x246048[_0x898a('0x24')]};}}}catch(_0x2d1323){logger[_0x898a('0x2e')]('[ACW][syncAgentConnect]\x20%s',_0x2d1323[_0x898a('0x32')]);}};Acw[_0x898a('0x39')][_0x898a('0x3d')]=function(_0x21a990){try{if(this['voiceQueues'][_0x21a990[_0x898a('0x1a')]]&&(this[_0x898a('0x7')][_0x21a990['queue']][_0x898a('0x5')]||this['voiceQueues'][_0x21a990[_0x898a('0x1a')]]['mandatoryDisposition'])){if(this['agents'][_0x21a990[_0x898a('0x3c')]]){this['channels'][_0x21a990[_0x898a('0x29')]]={'queue':_0x21a990[_0x898a('0x1a')],'interface':_0x21a990['interface']};}}}catch(_0x247347){logger[_0x898a('0x2e')]('[ACW][syncAgentConnectPreview]\x20%s',_0x247347[_0x898a('0x32')]);}};Acw[_0x898a('0x39')][_0x898a('0xd')]=function(_0x118240){try{if(this['channels'][_0x118240[_0x898a('0x29')]]&&_[_0x898a('0x3e')](this['channels'][_0x118240[_0x898a('0x29')]][_0x898a('0x3f')])){logger['info'](_0x898a('0x40'),_0x118240['uniqueid']);this[_0x898a('0x18')](_0x118240[_0x898a('0x29')]);}else if(this[_0x898a('0x19')][_0x118240['linkedid']]&&_[_0x898a('0x3e')](this[_0x898a('0x19')][_0x118240[_0x898a('0x41')]][_0x898a('0x3f')])){logger['info'](_0x898a('0x42'),_0x118240['linkedid']);this[_0x898a('0x18')](_0x118240[_0x898a('0x41')]);}}catch(_0x3159d0){logger['error'](_0x898a('0x43'),_0x3159d0[_0x898a('0x32')]);}};Acw[_0x898a('0x39')]['syncHangup']=function(_0x52f8c6){try{if(this[_0x898a('0x19')][_0x52f8c6[_0x898a('0x29')]]&&this[_0x898a('0x19')][_0x52f8c6[_0x898a('0x29')]][_0x898a('0x3f')]){logger[_0x898a('0x22')](_0x898a('0x44'),_0x52f8c6[_0x898a('0x29')]);this[_0x898a('0x18')](_0x52f8c6[_0x898a('0x29')]);}else if(this[_0x898a('0x19')][_0x52f8c6['linkedid']]&&this[_0x898a('0x19')][_0x52f8c6[_0x898a('0x41')]]['attended']){logger[_0x898a('0x22')]('[%s][HANGUPATTENDEDTRANSFER:LINKEDID]',_0x52f8c6['linkedid']);this[_0x898a('0x18')](_0x52f8c6[_0x898a('0x41')]);}}catch(_0x209529){logger['error']('[ACW][syncHangup]\x20%s',_0x209529[_0x898a('0x32')]);}};Acw[_0x898a('0x39')]['syncAttendedTransfer']=function(_0xaa96f7){try{if(!_[_0x898a('0x45')](this['channels'][_0xaa96f7[_0x898a('0x46')]])){this[_0x898a('0x18')](_0xaa96f7[_0x898a('0x46')]);if(this['channels'][_0xaa96f7[_0x898a('0x47')]]){this[_0x898a('0x19')][_0xaa96f7[_0x898a('0x47')]][_0x898a('0x3f')]=!![];this[_0x898a('0x19')][_0xaa96f7[_0x898a('0x48')]]=this['channels'][_0xaa96f7[_0x898a('0x47')]];delete this['channels'][_0xaa96f7[_0x898a('0x47')]];}}else if(!_[_0x898a('0x45')](this[_0x898a('0x19')][_0xaa96f7[_0x898a('0x48')]])){this[_0x898a('0x18')](_0xaa96f7[_0x898a('0x48')]);if(this[_0x898a('0x19')][_0xaa96f7[_0x898a('0x49')]]){this[_0x898a('0x19')][_0xaa96f7['origtransfereruniqueid']][_0x898a('0x3f')]=!![];this[_0x898a('0x19')][_0xaa96f7[_0x898a('0x46')]]=this[_0x898a('0x19')][_0xaa96f7[_0x898a('0x49')]];delete this[_0x898a('0x19')][_0xaa96f7[_0x898a('0x49')]];}}}catch(_0x68fd81){logger[_0x898a('0x2e')](_0x898a('0x4a'),_0x68fd81[_0x898a('0x32')]);}};Acw[_0x898a('0x39')][_0x898a('0x13')]=function(_0x3f76e1){try{if(this[_0x898a('0x19')][_0x3f76e1['transfereruniqueid']]){logger[_0x898a('0x22')](_0x898a('0x4b'),JSON['stringify'](_0x3f76e1[_0x898a('0x4c')]));this[_0x898a('0x18')](_0x3f76e1['transfereruniqueid']);}else if(this[_0x898a('0x19')][_0x3f76e1[_0x898a('0x4d')]]){logger[_0x898a('0x22')](_0x898a('0x4e'),JSON['stringify'](_0x3f76e1[_0x898a('0x4d')]));this[_0x898a('0x18')](_0x3f76e1[_0x898a('0x4d')]);}}catch(_0xf86633){logger['error'](_0x898a('0x4f'),_0xf86633[_0x898a('0x32')]);}};Acw['prototype'][_0x898a('0x11')]=function(_0x3c0bf6){try{if(this['voiceQueues'][_0x3c0bf6[_0x898a('0x1a')]]&&this['voiceQueues'][_0x3c0bf6[_0x898a('0x1a')]]['autopause']==='all'){if(this['agents'][_0x3c0bf6[_0x898a('0x3c')]]){logger[_0x898a('0x22')](_0x898a('0x50'),_0x3c0bf6[_0x898a('0x29')],_0x3c0bf6['interface'],_0x3c0bf6['queue']);return RpcUser[_0x898a('0x25')](this[_0x898a('0x8')][_0x3c0bf6[_0x898a('0x3c')]],_0x898a('0x51'),_0x3c0bf6[_0x898a('0x29')]);}}}catch(_0x41cf94){logger[_0x898a('0x2e')](_0x898a('0x52'),_0x41cf94['message']);}};module[_0x898a('0x53')]=Acw;
\ No newline at end of file
+var _0x5c12=['timers','syncAgentConnect','bind','hanguprequest','syncHangupRequest','syncHangup','agentringnoanswer','syncAgentRingNoAnswer','syncAttendedTransfer','syncBlindTransfer','custom:agentConnectPreview','syncAgentConnectPreview','milliseconds','diff','seconds','prototype','interface','name','mandatoryDispositionPause','Action','then','getAgent','voicePause','info','[%s][START][AGENT:%s][QUEUE:%s]','channels','attended','destlinkedid','savePause','[%s][TIMER:%s][AGENT:%s][QUEUE:%s]','acwTimeout','timer','stopAcw','format','uniqueid','queue','updateAcw','lastPauseAt','update','catch','error','[%s][UPDATE][ERRORS:%s]','[%s][INPAUSE][AGENT:%s][QUEUE:%s]','finally','[ACW][START]\x20%s','message','saveUnpause','[%s][UPDATE][ACWTIME:%s]','[ACW][STOP]\x20Interface\x20%s\x20doesn\x27t\x20have\x20timer','[ACW][TIMERS]','[ACW][STOP]\x20%s','mandatoryDisposition','[ACW][syncAgentConnectPreview]\x20%s','isUndefined','[%s][HANGUP:UNIQUEID]','startAcw','linkedid','[%s][HANGUP:LINKEDID]','[ACW][syncHangupRequest]\x20%s','[%s][HANGUPATTENDEDTRANSFER:UNIQUEID]','isNil','transfereeuniqueid','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','[ACW][syncAttendedTransfer]\x20%s','transfereruniqueid','[%s][BLINDTRANSFER:UNIQUEID]','stringify','transfererlinkedid','autopause','[%s][AUTOPAUSE][AGENT:%s][QUEUE:%]','lodash','moment','../../../config/logger','acw','../rpc/user','../rpc/voiceAgentReport','voiceQueues','agents'];(function(_0x42245d,_0x51758f){var _0x4b211a=function(_0x2634e){while(--_0x2634e){_0x42245d['push'](_0x42245d['shift']());}};_0x4b211a(++_0x51758f);}(_0x5c12,0x188));var _0x25c1=function(_0x81dcac,_0x8ff7db){_0x81dcac=_0x81dcac-0x0;var _0xc7803b=_0x5c12[_0x81dcac];return _0xc7803b;};'use strict';var util=require('util');var _=require(_0x25c1('0x0'));var moment=require(_0x25c1('0x1'));var ami=require('../ami');var logger=require(_0x25c1('0x2'))(_0x25c1('0x3'));var RpcUser=require(_0x25c1('0x4'));var RpcVoiceAgentReport=require(_0x25c1('0x5'));function Acw(_0x2c5df0){this[_0x25c1('0x6')]=_0x2c5df0[_0x25c1('0x6')];this['agents']=_0x2c5df0[_0x25c1('0x7')];this[_0x25c1('0x8')]=_0x2c5df0[_0x25c1('0x8')];this['channels']={};ami['on']('agentconnect',this[_0x25c1('0x9')][_0x25c1('0xa')](this));ami['on'](_0x25c1('0xb'),this[_0x25c1('0xc')][_0x25c1('0xa')](this));ami['on']('hangup',this[_0x25c1('0xd')][_0x25c1('0xa')](this));ami['on'](_0x25c1('0xe'),this[_0x25c1('0xf')][_0x25c1('0xa')](this));ami['on']('attendedtransfer',this[_0x25c1('0x10')][_0x25c1('0xa')](this));ami['on']('blindtransfer',this[_0x25c1('0x11')][_0x25c1('0xa')](this));ami['on'](_0x25c1('0x12'),this[_0x25c1('0x13')]['bind'](this));}function getDiff(_0x569ef9){var _0x4ef5d7=moment()['milliseconds'](0x0);var _0x3ef429=moment(_0x569ef9)[_0x25c1('0x14')](0x0);return _0x4ef5d7[_0x25c1('0x15')](_0x3ef429,_0x25c1('0x16'));}Acw[_0x25c1('0x17')]['startAcw']=function(_0x4638f0){try{var _0x55b62d=this;var _0x5d631e=this['channels'][_0x4638f0][_0x25c1('0x18')];var _0x1a08b5=this['channels'][_0x4638f0]['queue'];var _0x61a29f=this['voiceQueues'][_0x1a08b5];var _0x7175d4=![];var _0x23a418='ACW';if(_0x61a29f['mandatoryDisposition']){if(_0x61a29f['mandatoryDispositionPause'][_0x25c1('0x19')]){_0x7175d4=!![];_0x23a418=_0x61a29f[_0x25c1('0x1a')][_0x25c1('0x19')];}}ami[_0x25c1('0x1b')]({'action':'QueuePause','interface':_0x5d631e,'paused':!![],'reason':_0x23a418})[_0x25c1('0x1c')](function(_0x9f54e3){if(_0x55b62d[_0x25c1('0x7')][_0x5d631e]){return RpcUser[_0x25c1('0x1d')](_0x55b62d['agents'][_0x5d631e]['id'])['then'](function(_0x2a8a84){if(_0x2a8a84&&!_0x2a8a84[_0x25c1('0x1e')]){logger[_0x25c1('0x1f')](_0x25c1('0x20'),_0x4638f0,_0x5d631e,_0x1a08b5);var _0x15cf2f=_0x55b62d[_0x25c1('0x21')][_0x4638f0][_0x25c1('0x22')]&&_0x55b62d[_0x25c1('0x21')][_0x4638f0][_0x25c1('0x23')]?_0x55b62d[_0x25c1('0x21')][_0x4638f0][_0x25c1('0x23')]:_0x4638f0;return RpcUser[_0x25c1('0x24')](_0x55b62d[_0x25c1('0x7')][_0x5d631e],_0x23a418,_0x15cf2f)['then'](function(_0x2dadae){if(!_0x7175d4){_0x55b62d[_0x25c1('0x8')][_0x5d631e]={};logger[_0x25c1('0x1f')](_0x25c1('0x25'),_0x4638f0,_0x55b62d[_0x25c1('0x6')][_0x1a08b5][_0x25c1('0x26')],_0x5d631e,_0x1a08b5);_0x55b62d['timers'][_0x5d631e][_0x25c1('0x27')]=setTimeout(_0x55b62d[_0x25c1('0x28')][_0x25c1('0xa')](_0x55b62d,_0x5d631e),_0x55b62d[_0x25c1('0x6')][_0x1a08b5][_0x25c1('0x26')]*0x3e8);_0x55b62d[_0x25c1('0x8')][_0x5d631e]['lastPauseAt']=moment()[_0x25c1('0x29')]('YYYY-MM-DD\x20HH:mm:ss');_0x55b62d[_0x25c1('0x8')][_0x5d631e][_0x25c1('0x2a')]=_0x4638f0;_0x55b62d[_0x25c1('0x8')][_0x5d631e][_0x25c1('0x2b')]=_0x1a08b5;_0x55b62d[_0x25c1('0x8')][_0x5d631e][_0x25c1('0x2c')]=function(){var _0x1fd4e3=getDiff(_0x55b62d[_0x25c1('0x8')][_0x5d631e][_0x25c1('0x2d')]);clearTimeout(_0x55b62d['timers'][_0x5d631e][_0x25c1('0x27')]);_0x55b62d['timers'][_0x5d631e]['timer']=![];RpcVoiceAgentReport[_0x25c1('0x2e')]({'acwtime':_0x1fd4e3},_0x55b62d[_0x25c1('0x8')][_0x5d631e]['uniqueid'],_0x5d631e)[_0x25c1('0x1c')](function(_0x5a5a32){logger[_0x25c1('0x1f')]('[%s][UPDATE][ACWTIME:%s]',_0x4638f0,_0x1fd4e3,_0x5a5a32);})[_0x25c1('0x2f')](function(_0x7f1e7a){logger[_0x25c1('0x30')](_0x25c1('0x31'),_0x4638f0,_0x7f1e7a);});delete _0x55b62d[_0x25c1('0x8')][_0x5d631e];};}});}else{logger[_0x25c1('0x1f')](_0x25c1('0x32'),_0x4638f0,_0x5d631e,_0x1a08b5);}});}})[_0x25c1('0x2f')](function(_0x578713){logger[_0x25c1('0x30')]('[%s][TIMER:%s][AGENT:%s][QUEUE:%s]',_0x4638f0,_0x55b62d[_0x25c1('0x6')][_0x1a08b5]['acwTimeout'],_0x5d631e,_0x1a08b5);})[_0x25c1('0x33')](function(){delete _0x55b62d[_0x25c1('0x21')][_0x4638f0];});}catch(_0x18f10c){logger[_0x25c1('0x30')](_0x25c1('0x34'),_0x18f10c[_0x25c1('0x35')]);}};Acw[_0x25c1('0x17')][_0x25c1('0x28')]=function(_0x3fced1){try{var _0x2d060c=this;if(_0x2d060c[_0x25c1('0x8')][_0x3fced1]){_0x2d060c[_0x25c1('0x8')][_0x3fced1][_0x25c1('0x27')]=![];var _0x1b6e92=_0x2d060c[_0x25c1('0x8')][_0x3fced1][_0x25c1('0x2a')];var _0x349aef=_0x2d060c[_0x25c1('0x8')][_0x3fced1][_0x25c1('0x2b')];var _0x357385=_0x2d060c['voiceQueues'][_0x349aef][_0x25c1('0x26')];logger[_0x25c1('0x1f')]('[TIMER][STOP][AGENT:%s]',_0x3fced1);RpcUser[_0x25c1('0x36')](this['agents'][_0x3fced1]);RpcVoiceAgentReport[_0x25c1('0x2e')]({'acwtime':_0x357385,'agentacw':!![]},_0x1b6e92,_0x3fced1)['then'](function(_0x4326fb){logger[_0x25c1('0x1f')](_0x25c1('0x37'),_0x1b6e92,_0x357385,_0x4326fb);})[_0x25c1('0x2f')](function(_0xbc20a3){logger['error'](_0x25c1('0x31'),_0x1b6e92,_0xbc20a3);});}else{logger['error'](_0x25c1('0x38'),_0x3fced1);if(_0x2d060c[_0x25c1('0x8')]){logger[_0x25c1('0x1f')](_0x25c1('0x39'),JSON['stringify'](_0x2d060c['timers']));}}}catch(_0x58b8f3){logger[_0x25c1('0x30')](_0x25c1('0x3a'),_0x58b8f3['message']);}};Acw[_0x25c1('0x17')]['syncAgentConnect']=function(_0x3d5172){try{if(this[_0x25c1('0x6')][_0x3d5172[_0x25c1('0x2b')]]&&(this['voiceQueues'][_0x3d5172['queue']]['acw']||this[_0x25c1('0x6')][_0x3d5172[_0x25c1('0x2b')]]['mandatoryDisposition'])){if(this[_0x25c1('0x7')][_0x3d5172[_0x25c1('0x18')]]){this[_0x25c1('0x21')][_0x3d5172['uniqueid']]={'queue':_0x3d5172['queue'],'interface':_0x3d5172['interface'],'destlinkedid':_0x3d5172['destlinkedid']};}}}catch(_0x669152){logger[_0x25c1('0x30')]('[ACW][syncAgentConnect]\x20%s',_0x669152[_0x25c1('0x35')]);}};Acw[_0x25c1('0x17')][_0x25c1('0x13')]=function(_0x2dbe23){try{if(this[_0x25c1('0x6')][_0x2dbe23[_0x25c1('0x2b')]]&&(this[_0x25c1('0x6')][_0x2dbe23['queue']]['acw']||this[_0x25c1('0x6')][_0x2dbe23[_0x25c1('0x2b')]][_0x25c1('0x3b')])){if(this['agents'][_0x2dbe23[_0x25c1('0x18')]]){this[_0x25c1('0x21')][_0x2dbe23[_0x25c1('0x2a')]]={'queue':_0x2dbe23[_0x25c1('0x2b')],'interface':_0x2dbe23['interface']};}}}catch(_0xb87cf1){logger[_0x25c1('0x30')](_0x25c1('0x3c'),_0xb87cf1[_0x25c1('0x35')]);}};Acw['prototype']['syncHangupRequest']=function(_0x13ac06){try{if(this[_0x25c1('0x21')][_0x13ac06[_0x25c1('0x2a')]]&&_[_0x25c1('0x3d')](this['channels'][_0x13ac06[_0x25c1('0x2a')]][_0x25c1('0x22')])){logger['info'](_0x25c1('0x3e'),_0x13ac06[_0x25c1('0x2a')]);this[_0x25c1('0x3f')](_0x13ac06[_0x25c1('0x2a')]);}else if(this['channels'][_0x13ac06['linkedid']]&&_[_0x25c1('0x3d')](this[_0x25c1('0x21')][_0x13ac06[_0x25c1('0x40')]]['attended'])){logger[_0x25c1('0x1f')](_0x25c1('0x41'),_0x13ac06['linkedid']);this[_0x25c1('0x3f')](_0x13ac06[_0x25c1('0x40')]);}}catch(_0x2b58a3){logger[_0x25c1('0x30')](_0x25c1('0x42'),_0x2b58a3[_0x25c1('0x35')]);}};Acw[_0x25c1('0x17')]['syncHangup']=function(_0x5344da){try{if(this['channels'][_0x5344da[_0x25c1('0x2a')]]&&this['channels'][_0x5344da[_0x25c1('0x2a')]][_0x25c1('0x22')]){logger[_0x25c1('0x1f')](_0x25c1('0x43'),_0x5344da[_0x25c1('0x2a')]);this[_0x25c1('0x3f')](_0x5344da['uniqueid']);}else if(this[_0x25c1('0x21')][_0x5344da[_0x25c1('0x40')]]&&this[_0x25c1('0x21')][_0x5344da[_0x25c1('0x40')]][_0x25c1('0x22')]){logger[_0x25c1('0x1f')]('[%s][HANGUPATTENDEDTRANSFER:LINKEDID]',_0x5344da[_0x25c1('0x40')]);this[_0x25c1('0x3f')](_0x5344da[_0x25c1('0x40')]);}}catch(_0xbff8ad){logger[_0x25c1('0x30')]('[ACW][syncHangup]\x20%s',_0xbff8ad[_0x25c1('0x35')]);}};Acw[_0x25c1('0x17')]['syncAttendedTransfer']=function(_0x1341d2){try{if(!_[_0x25c1('0x44')](this[_0x25c1('0x21')][_0x1341d2[_0x25c1('0x45')]])){this[_0x25c1('0x3f')](_0x1341d2[_0x25c1('0x45')]);if(this['channels'][_0x1341d2[_0x25c1('0x46')]]){this[_0x25c1('0x21')][_0x1341d2[_0x25c1('0x46')]][_0x25c1('0x22')]=!![];this[_0x25c1('0x21')][_0x1341d2[_0x25c1('0x47')]]=this[_0x25c1('0x21')][_0x1341d2[_0x25c1('0x46')]];delete this[_0x25c1('0x21')][_0x1341d2[_0x25c1('0x46')]];}}else if(!_[_0x25c1('0x44')](this[_0x25c1('0x21')][_0x1341d2[_0x25c1('0x47')]])){this[_0x25c1('0x3f')](_0x1341d2['transfertargetuniqueid']);if(this[_0x25c1('0x21')][_0x1341d2[_0x25c1('0x48')]]){this[_0x25c1('0x21')][_0x1341d2[_0x25c1('0x48')]][_0x25c1('0x22')]=!![];this[_0x25c1('0x21')][_0x1341d2[_0x25c1('0x45')]]=this['channels'][_0x1341d2[_0x25c1('0x48')]];delete this['channels'][_0x1341d2[_0x25c1('0x48')]];}}}catch(_0x24568c){logger[_0x25c1('0x30')](_0x25c1('0x49'),_0x24568c[_0x25c1('0x35')]);}};Acw[_0x25c1('0x17')][_0x25c1('0x11')]=function(_0x19df83){try{if(this['channels'][_0x19df83[_0x25c1('0x4a')]]){logger[_0x25c1('0x1f')](_0x25c1('0x4b'),JSON[_0x25c1('0x4c')](_0x19df83[_0x25c1('0x4a')]));this[_0x25c1('0x3f')](_0x19df83[_0x25c1('0x4a')]);}else if(this['channels'][_0x19df83[_0x25c1('0x4d')]]){logger['info']('[%s][BLINDTRANSFER:LINKEDID]',JSON['stringify'](_0x19df83[_0x25c1('0x4d')]));this[_0x25c1('0x3f')](_0x19df83[_0x25c1('0x4d')]);}}catch(_0x15cd6d){logger[_0x25c1('0x30')]('[ACW][syncBlindTransfer]\x20%s',_0x15cd6d[_0x25c1('0x35')]);}};Acw['prototype'][_0x25c1('0xf')]=function(_0x36aa98){try{if(this[_0x25c1('0x6')][_0x36aa98[_0x25c1('0x2b')]]&&this[_0x25c1('0x6')][_0x36aa98[_0x25c1('0x2b')]][_0x25c1('0x4e')]==='all'){if(this[_0x25c1('0x7')][_0x36aa98[_0x25c1('0x18')]]){logger[_0x25c1('0x1f')](_0x25c1('0x4f'),_0x36aa98[_0x25c1('0x2a')],_0x36aa98[_0x25c1('0x18')],_0x36aa98['queue']);return RpcUser[_0x25c1('0x24')](this['agents'][_0x36aa98[_0x25c1('0x18')]],'Auto-Pause',_0x36aa98['uniqueid']);}}}catch(_0x1c66d6){logger['error']('[ACW][syncAgentRingNoAnswer]\x20%s',_0x1c66d6['message']);}};module['exports']=Acw;
\ No newline at end of file
index 4c1cf98..b08ed62 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x844d=['catch','exports','asterisk-manager','bluebird','moment','util','../../config/logger','ami','../../config/environment','asterisk','username','password','keepConnected','Action','promisify','action','error','format','Manager\x20\x22%s\x22\x20error\x20to\x20%s:%s\x20with:\x0a%s','port','inspect','sipshowregistry','actionDeviceStateList','devicestatelist','actionSipPeerStatus','sippeerstatus','actionQueueSummary','queuesummary','actionCoreShowChannels','info','Manager\x20\x22%s\x22\x20logged\x20on\x20to\x20%s:%s','once','close','shutdown','Fullybooted\x20\x22%s\x22\x20to\x20%s:%s','resolve','actionSipShowRegistry','then'];(function(_0x46aff0,_0x122890){var _0x9d78cf=function(_0x3f14cb){while(--_0x3f14cb){_0x46aff0['push'](_0x46aff0['shift']());}};_0x9d78cf(++_0x122890);}(_0x844d,0x1ca));var _0xd844=function(_0x34bc30,_0x177cb0){_0x34bc30=_0x34bc30-0x0;var _0x5706de=_0x844d[_0x34bc30];return _0x5706de;};'use strict';var Manager=require(_0xd844('0x0'));var BPromise=require(_0xd844('0x1'));var moment=require(_0xd844('0x2'));var util=require(_0xd844('0x3'));var _=require('lodash');var logger=require(_0xd844('0x4'))(_0xd844('0x5'));var config=require(_0xd844('0x6'));var ami=new Manager(config['asterisk']['port'],config[_0xd844('0x7')]['ip'],config[_0xd844('0x7')][_0xd844('0x8')],config[_0xd844('0x7')][_0xd844('0x9')],!![]);ami[_0xd844('0xa')]();ami[_0xd844('0xb')]=BPromise[_0xd844('0xc')](ami[_0xd844('0xd')]);function error(_0x304608){logger[_0xd844('0xe')](util[_0xd844('0xf')](_0xd844('0x10'),config['asterisk'][_0xd844('0x8')],config[_0xd844('0x7')]['ip'],config['asterisk'][_0xd844('0x11')],util[_0xd844('0x12')](_0x304608,![],null)));}function close(){logger[_0xd844('0xe')](util['format']('Manager\x20\x22%s\x22\x20closed\x20to\x20%s:%s',config[_0xd844('0x7')][_0xd844('0x8')],config[_0xd844('0x7')]['ip'],config[_0xd844('0x7')]['port']));}ami['actionSipShowRegistry']=function(){return function(){return ami['Action']({'action':_0xd844('0x13')});};};ami[_0xd844('0x14')]=function(){return function(){return ami[_0xd844('0xb')]({'action':_0xd844('0x15')});};};ami[_0xd844('0x16')]=function(){return function(){return ami[_0xd844('0xb')]({'action':_0xd844('0x17')});};};ami[_0xd844('0x18')]=function(){return function(){return ami[_0xd844('0xb')]({'action':_0xd844('0x19')});};};ami[_0xd844('0x1a')]=function(){return function(){return ami['Action']({'action':'coreshowchannels'});};};function connect(_0x39c68f){logger[_0xd844('0x1b')](util['format'](_0xd844('0x1c'),config[_0xd844('0x7')][_0xd844('0x8')],config[_0xd844('0x7')]['ip'],config[_0xd844('0x7')][_0xd844('0x11')]));ami[_0xd844('0x1d')](_0xd844('0xe'),error);ami[_0xd844('0x1d')](_0xd844('0x1e'),close);}ami['on']('connect',connect);ami['on'](_0xd844('0x1f'),function(_0x57af81){logger[_0xd844('0x1b')](util[_0xd844('0xf')]('Shutdown\x20\x22%s\x22\x20to\x20%s:%s\x20with:\x0a%s',config[_0xd844('0x7')]['username'],config[_0xd844('0x7')]['ip'],config['asterisk']['port'],util[_0xd844('0x12')](_0x57af81,![],null)));});ami['on']('fullybooted',function(_0x19515e){logger[_0xd844('0x1b')](util[_0xd844('0xf')](_0xd844('0x20'),config[_0xd844('0x7')][_0xd844('0x8')],config[_0xd844('0x7')]['ip'],config[_0xd844('0x7')]['port']));return BPromise[_0xd844('0x21')]()['then'](ami[_0xd844('0x22')]())['then'](ami[_0xd844('0x14')]())['then'](ami['actionSipPeerStatus']())[_0xd844('0x23')](ami['actionQueueSummary']())[_0xd844('0x23')](ami[_0xd844('0x1a')]())[_0xd844('0x24')](function(_0x57d4e1){console['log'](_0x57d4e1);});});ami[_0xd844('0x1d')](_0xd844('0xe'),error);ami[_0xd844('0x1d')](_0xd844('0x1e'),close);module[_0xd844('0x25')]=ami;
\ No newline at end of file
+var _0x3462=['password','keepConnected','Action','promisify','action','error','format','Manager\x20\x22%s\x22\x20error\x20to\x20%s:%s\x20with:\x0a%s','inspect','actionSipShowRegistry','actionDeviceStateList','devicestatelist','actionSipPeerStatus','actionQueueSummary','queuesummary','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\x20\x22%s\x22\x20to\x20%s:%s','resolve','then','actionCoreShowChannels','catch','log','asterisk-manager','bluebird','util','../../config/logger','ami','../../config/environment','asterisk','port','username'];(function(_0x3c2559,_0x21c3f3){var _0xf7c95a=function(_0xd8b91a){while(--_0xd8b91a){_0x3c2559['push'](_0x3c2559['shift']());}};_0xf7c95a(++_0x21c3f3);}(_0x3462,0x1ef));var _0x2346=function(_0x511ec3,_0x3e6bf5){_0x511ec3=_0x511ec3-0x0;var _0x4388bf=_0x3462[_0x511ec3];return _0x4388bf;};'use strict';var Manager=require(_0x2346('0x0'));var BPromise=require(_0x2346('0x1'));var moment=require('moment');var util=require(_0x2346('0x2'));var _=require('lodash');var logger=require(_0x2346('0x3'))(_0x2346('0x4'));var config=require(_0x2346('0x5'));var ami=new Manager(config[_0x2346('0x6')][_0x2346('0x7')],config[_0x2346('0x6')]['ip'],config['asterisk'][_0x2346('0x8')],config['asterisk'][_0x2346('0x9')],!![]);ami[_0x2346('0xa')]();ami[_0x2346('0xb')]=BPromise[_0x2346('0xc')](ami[_0x2346('0xd')]);function error(_0x4f776e){logger[_0x2346('0xe')](util[_0x2346('0xf')](_0x2346('0x10'),config[_0x2346('0x6')]['username'],config[_0x2346('0x6')]['ip'],config[_0x2346('0x6')][_0x2346('0x7')],util[_0x2346('0x11')](_0x4f776e,![],null)));}function close(){logger[_0x2346('0xe')](util['format']('Manager\x20\x22%s\x22\x20closed\x20to\x20%s:%s',config[_0x2346('0x6')][_0x2346('0x8')],config[_0x2346('0x6')]['ip'],config[_0x2346('0x6')][_0x2346('0x7')]));}ami[_0x2346('0x12')]=function(){return function(){return ami[_0x2346('0xb')]({'action':'sipshowregistry'});};};ami[_0x2346('0x13')]=function(){return function(){return ami[_0x2346('0xb')]({'action':_0x2346('0x14')});};};ami[_0x2346('0x15')]=function(){return function(){return ami[_0x2346('0xb')]({'action':'sippeerstatus'});};};ami[_0x2346('0x16')]=function(){return function(){return ami[_0x2346('0xb')]({'action':_0x2346('0x17')});};};ami['actionCoreShowChannels']=function(){return function(){return ami[_0x2346('0xb')]({'action':'coreshowchannels'});};};function connect(_0x472d4c){logger[_0x2346('0x18')](util[_0x2346('0xf')](_0x2346('0x19'),config[_0x2346('0x6')][_0x2346('0x8')],config[_0x2346('0x6')]['ip'],config['asterisk'][_0x2346('0x7')]));ami[_0x2346('0x1a')](_0x2346('0xe'),error);ami[_0x2346('0x1a')](_0x2346('0x1b'),close);}ami['on']('connect',connect);ami['on'](_0x2346('0x1c'),function(_0x961bda){logger[_0x2346('0x18')](util['format'](_0x2346('0x1d'),config[_0x2346('0x6')]['username'],config['asterisk']['ip'],config[_0x2346('0x6')][_0x2346('0x7')],util[_0x2346('0x11')](_0x961bda,![],null)));});ami['on']('fullybooted',function(_0x11d003){logger[_0x2346('0x18')](util[_0x2346('0xf')](_0x2346('0x1e'),config[_0x2346('0x6')][_0x2346('0x8')],config['asterisk']['ip'],config[_0x2346('0x6')]['port']));return BPromise[_0x2346('0x1f')]()[_0x2346('0x20')](ami['actionSipShowRegistry']())[_0x2346('0x20')](ami[_0x2346('0x13')]())[_0x2346('0x20')](ami[_0x2346('0x15')]())[_0x2346('0x20')](ami[_0x2346('0x16')]())[_0x2346('0x20')](ami[_0x2346('0x21')]())[_0x2346('0x22')](function(_0x4fe5b8){console[_0x2346('0x23')](_0x4fe5b8);});});ami[_0x2346('0x1a')](_0x2346('0xe'),error);ami[_0x2346('0x1a')](_0x2346('0x1b'),close);module['exports']=ami;
\ No newline at end of file
index 01bc1ac..5e79cc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5e98=['exports','jayson/promise','bluebird','../../config/logger','ami','client','http','Request','request','then','debug','rpc','memberReport','error','message','catch'];(function(_0x3b1d1e,_0x10d8d9){var _0x5670b7=function(_0x2ed53a){while(--_0x2ed53a){_0x3b1d1e['push'](_0x3b1d1e['shift']());}};_0x5670b7(++_0x10d8d9);}(_0x5e98,0x121));var _0x85e9=function(_0x145d7b,_0x12495f){_0x145d7b=_0x145d7b-0x0;var _0xce32fd=_0x5e98[_0x145d7b];return _0xce32fd;};'use strict';var jayson=require(_0x85e9('0x0'));var BPromise=require(_0x85e9('0x1'));var logger=require(_0x85e9('0x2'))(_0x85e9('0x3'));var client=jayson[_0x85e9('0x4')][_0x85e9('0x5')]({'port':0x2329});client[_0x85e9('0x6')]=function(_0x22458e,_0x19715c){return new BPromise(function(_0x4a2c21,_0x3b68e8){return client[_0x85e9('0x7')](_0x22458e,_0x19715c)[_0x85e9('0x8')](function(_0x1cc9e0){logger[_0x85e9('0x9')](_0x85e9('0xa'),_0x85e9('0xb'),_0x22458e,_0x19715c,_0x1cc9e0);if(_0x1cc9e0['error']){logger['error'](_0x85e9('0xa'),_0x85e9('0xb'),_0x22458e,_0x1cc9e0[_0x85e9('0xc')][_0x85e9('0xd')],_0x19715c);return _0x3b68e8(_0x1cc9e0[_0x85e9('0xc')][_0x85e9('0xd')]);}else{return _0x4a2c21(_0x1cc9e0['result']);}})[_0x85e9('0xe')](function(_0x1c1fd1){logger['error']('rpc',_0x85e9('0xb'),_0x22458e,_0x1c1fd1,_0x19715c);return _0x3b68e8(_0x1c1fd1);});});};module[_0x85e9('0xf')]=client;
\ No newline at end of file
+var _0xe99b=['ami','http','Request','request','debug','rpc','memberReport','error','message','result','catch','exports','jayson/promise','../../config/logger'];(function(_0x140b45,_0x148b15){var _0x456a21=function(_0x35db25){while(--_0x35db25){_0x140b45['push'](_0x140b45['shift']());}};_0x456a21(++_0x148b15);}(_0xe99b,0xb4));var _0xbe99=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xe99b[_0x3dd15e];return _0x231fd0;};'use strict';var jayson=require(_0xbe99('0x0'));var BPromise=require('bluebird');var logger=require(_0xbe99('0x1'))(_0xbe99('0x2'));var client=jayson['client'][_0xbe99('0x3')]({'port':0x2329});client[_0xbe99('0x4')]=function(_0xcbb9ed,_0x1520d3){return new BPromise(function(_0x51f1f4,_0x1c4390){return client[_0xbe99('0x5')](_0xcbb9ed,_0x1520d3)['then'](function(_0x50207f){logger[_0xbe99('0x6')](_0xbe99('0x7'),_0xbe99('0x8'),_0xcbb9ed,_0x1520d3,_0x50207f);if(_0x50207f['error']){logger[_0xbe99('0x9')](_0xbe99('0x7'),_0xbe99('0x8'),_0xcbb9ed,_0x50207f['error'][_0xbe99('0xa')],_0x1520d3);return _0x1c4390(_0x50207f[_0xbe99('0x9')][_0xbe99('0xa')]);}else{return _0x51f1f4(_0x50207f[_0xbe99('0xb')]);}})[_0xbe99('0xc')](function(_0x1dc077){logger['error'](_0xbe99('0x7'),_0xbe99('0x8'),_0xcbb9ed,_0x1dc077,_0x1520d3);return _0x1c4390(_0x1dc077);});});};module[_0xbe99('0xd')]=client;
\ No newline at end of file
index 6600c5e..90b6eeb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc8fc=['lodash','moment','isNil','string','voiceQueue','uniqueid','name','Contact','phone','queue','active','type','dialQueueTimeout','scheduledat','countbusyretry','countcongestionretry','countnoanswerretry','ContactId','ListId','UserId','VoiceQueueId','CampaignId','ContactFirstName','firstName','starttime','format','YYYY-MM-DD\x20HH:mm:ss','callback','callbackuniqueid','callbackat','recallme','originatecalleridnum','originatecalleridname','prototype','getCaller','dialCutDigit','substring','number','getQueue','exports'];(function(_0x1cf7db,_0x2a1668){var _0x19d8dd=function(_0x37697a){while(--_0x37697a){_0x1cf7db['push'](_0x1cf7db['shift']());}};_0x19d8dd(++_0x2a1668);}(_0xc8fc,0x78));var _0xcc8f=function(_0x3f7094,_0x4297eb){_0x3f7094=_0x3f7094-0x0;var _0x4bbedc=_0xc8fc[_0x3f7094];return _0x4bbedc;};'use strict';var util=require('util');var _=require(_0xcc8f('0x0'));var moment=require(_0xcc8f('0x1'));function checkNameSurname(_0x268de6,_0x4a4172,_0x186680){var _0x376c4b='';if(!_[_0xcc8f('0x2')](_0x4a4172)&&'string'===typeof _0x4a4172){_0x376c4b+=_0x4a4172;}if(!_[_0xcc8f('0x2')](_0x186680)&&_0xcc8f('0x3')===typeof _0x186680){_0x376c4b+='\x20'+_0x186680;}if(_0x376c4b!==''){return _0x376c4b;}return _0x268de6;}function Action(_0x367558,_0x114230,_0x51efe1){this[_0xcc8f('0x4')]=_0x367558;this[_0xcc8f('0x5')]=_0x51efe1||undefined;this[_0xcc8f('0x6')]=checkNameSurname(_0x114230[_0xcc8f('0x7')][_0xcc8f('0x8')],_0x114230[_0xcc8f('0x7')]['firstName'],_0x114230[_0xcc8f('0x7')]['lastName']);this['number']=_0x114230[_0xcc8f('0x7')][_0xcc8f('0x8')];this[_0xcc8f('0x9')]=_0x367558['name'];this[_0xcc8f('0xa')]=_0x114230[_0xcc8f('0xa')]||![];this[_0xcc8f('0xb')]=_0x367558[_0xcc8f('0xb')];this[_0xcc8f('0xc')]=_0x367558[_0xcc8f('0xc')]||0x3;this[_0xcc8f('0xd')]=_0x114230['scheduledat'];this[_0xcc8f('0xe')]=_0x114230[_0xcc8f('0xe')];this[_0xcc8f('0xf')]=_0x114230[_0xcc8f('0xf')];this[_0xcc8f('0x10')]=_0x114230['countnoanswerretry'];this[_0xcc8f('0x11')]=_0x114230[_0xcc8f('0x11')];this[_0xcc8f('0x12')]=_0x114230[_0xcc8f('0x12')];this[_0xcc8f('0x13')]=_0x114230[_0xcc8f('0x13')];this[_0xcc8f('0x14')]=_0x114230[_0xcc8f('0x14')];this[_0xcc8f('0x15')]=_0x114230[_0xcc8f('0x15')];this['idHopper']=_0x114230['id'];this[_0xcc8f('0x16')]=_0x114230[_0xcc8f('0x7')][_0xcc8f('0x17')]||'';this[_0xcc8f('0x18')]=moment()[_0xcc8f('0x19')](_0xcc8f('0x1a'));this[_0xcc8f('0x1b')]=_0x114230[_0xcc8f('0x1b')];this[_0xcc8f('0x1c')]=_0x114230[_0xcc8f('0x1c')];this[_0xcc8f('0x1d')]=_0x114230[_0xcc8f('0x1d')];this[_0xcc8f('0x1e')]=_0x114230['recallme'];this[_0xcc8f('0x1f')]='';this[_0xcc8f('0x20')]='';}Action[_0xcc8f('0x21')][_0xcc8f('0x22')]=function(){return util[_0xcc8f('0x19')]('\x22%s\x22\x20<%s>',this[_0xcc8f('0x6')],this[_0xcc8f('0x4')][_0xcc8f('0x23')]>0x0?this['number'][_0xcc8f('0x24')](this['voiceQueue']['dialCutDigit']):this[_0xcc8f('0x25')]);};Action[_0xcc8f('0x21')][_0xcc8f('0x26')]=function(){return this[_0xcc8f('0x9')];};module[_0xcc8f('0x27')]=Action;
\ No newline at end of file
+var _0x44f7=['callbackat','recallme','originatecalleridnum','originatecalleridname','prototype','getCaller','\x22%s\x22\x20<%s>','name','substring','dialCutDigit','util','lodash','moment','string','voiceQueue','uniqueid','Contact','phone','firstName','lastName','number','queue','active','type','dialQueueTimeout','scheduledat','countbusyretry','countcongestionretry','countnoanswerretry','ContactId','ListId','UserId','VoiceQueueId','CampaignId','idHopper','ContactFirstName','starttime','callback','callbackuniqueid'];(function(_0x12507b,_0x4899f9){var _0x492f91=function(_0x572d2b){while(--_0x572d2b){_0x12507b['push'](_0x12507b['shift']());}};_0x492f91(++_0x4899f9);}(_0x44f7,0x11b));var _0x744f=function(_0x273c39,_0x1052e6){_0x273c39=_0x273c39-0x0;var _0x46d6b5=_0x44f7[_0x273c39];return _0x46d6b5;};'use strict';var util=require(_0x744f('0x0'));var _=require(_0x744f('0x1'));var moment=require(_0x744f('0x2'));function checkNameSurname(_0x4134e3,_0x366a75,_0x2e6951){var _0x18aa19='';if(!_['isNil'](_0x366a75)&&_0x744f('0x3')===typeof _0x366a75){_0x18aa19+=_0x366a75;}if(!_['isNil'](_0x2e6951)&&_0x744f('0x3')===typeof _0x2e6951){_0x18aa19+='\x20'+_0x2e6951;}if(_0x18aa19!==''){return _0x18aa19;}return _0x4134e3;}function Action(_0x264163,_0x138777,_0x526552){this[_0x744f('0x4')]=_0x264163;this[_0x744f('0x5')]=_0x526552||undefined;this['name']=checkNameSurname(_0x138777[_0x744f('0x6')][_0x744f('0x7')],_0x138777[_0x744f('0x6')][_0x744f('0x8')],_0x138777[_0x744f('0x6')][_0x744f('0x9')]);this[_0x744f('0xa')]=_0x138777[_0x744f('0x6')][_0x744f('0x7')];this[_0x744f('0xb')]=_0x264163['name'];this[_0x744f('0xc')]=_0x138777['active']||![];this[_0x744f('0xd')]=_0x264163['type'];this[_0x744f('0xe')]=_0x264163['dialQueueTimeout']||0x3;this[_0x744f('0xf')]=_0x138777[_0x744f('0xf')];this[_0x744f('0x10')]=_0x138777['countbusyretry'];this['countcongestionretry']=_0x138777[_0x744f('0x11')];this[_0x744f('0x12')]=_0x138777['countnoanswerretry'];this[_0x744f('0x13')]=_0x138777['ContactId'];this[_0x744f('0x14')]=_0x138777[_0x744f('0x14')];this[_0x744f('0x15')]=_0x138777[_0x744f('0x15')];this[_0x744f('0x16')]=_0x138777[_0x744f('0x16')];this[_0x744f('0x17')]=_0x138777[_0x744f('0x17')];this[_0x744f('0x18')]=_0x138777['id'];this[_0x744f('0x19')]=_0x138777[_0x744f('0x6')][_0x744f('0x8')]||'';this[_0x744f('0x1a')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');this[_0x744f('0x1b')]=_0x138777['callback'];this[_0x744f('0x1c')]=_0x138777[_0x744f('0x1c')];this[_0x744f('0x1d')]=_0x138777[_0x744f('0x1d')];this[_0x744f('0x1e')]=_0x138777[_0x744f('0x1e')];this[_0x744f('0x1f')]='';this[_0x744f('0x20')]='';}Action[_0x744f('0x21')][_0x744f('0x22')]=function(){return util['format'](_0x744f('0x23'),this[_0x744f('0x24')],this[_0x744f('0x4')]['dialCutDigit']>0x0?this[_0x744f('0xa')][_0x744f('0x25')](this[_0x744f('0x4')][_0x744f('0x26')]):this[_0x744f('0xa')]);};Action[_0x744f('0x21')]['getQueue']=function(){return this[_0x744f('0xb')];};module['exports']=Action;
\ No newline at end of file
index e9fc3a2..5ba71fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd87c=['callbackat','recallme','ContactId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','lodash','moment','milliseconds','diff','state','statedesc','Answer','scheduledat','type','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','uniqueid','name','calleridnum','starttime','responsetime','answertime','endtime','format','ringtime','holdtime','talktime','membername','reason','callback','callbackuniqueid'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xd87c,0x18f));var _0xcd87=function(_0x42f3ca,_0x1b39ee){_0x42f3ca=_0x42f3ca-0x0;var _0x456873=_0xd87c[_0x42f3ca];return _0x456873;};'use strict';var util=require(_0xcd87('0x0'));var _=require(_0xcd87('0x1'));var moment=require(_0xcd87('0x2'));function getSeconds(_0xff4877,_0x24cb66){var _0xf11549=moment(_0xff4877)[_0xcd87('0x3')](0x0);var _0x4c3087=moment(_0x24cb66)[_0xcd87('0x3')](0x0);return _0xf11549[_0xcd87('0x4')](_0x4c3087,'seconds');}function AgentComplete(_0x4c0dc0,_0x45c918){this[_0xcd87('0x5')]=0x4;this[_0xcd87('0x6')]=_0xcd87('0x7');this['scheduledat']=_0x4c0dc0[_0xcd87('0x8')];this['type']=_0x4c0dc0['type'];this['campaigntype']=_0x4c0dc0[_0xcd87('0x9')]===_0xcd87('0xa')?_0xcd87('0xb'):_0x4c0dc0[_0xcd87('0x9')];this[_0xcd87('0xc')]=_0x4c0dc0[_0xcd87('0xc')];this[_0xcd87('0xd')]=_0x4c0dc0[_0xcd87('0xd')];this[_0xcd87('0xe')]=_0x4c0dc0['countnoanswerretry'];this['countglobal']=_0x4c0dc0[_0xcd87('0xc')]+_0x4c0dc0[_0xcd87('0xd')]+_0x4c0dc0[_0xcd87('0xe')];this[_0xcd87('0xf')]=_0x45c918[_0xcd87('0xf')];this['calleridname']=_0x4c0dc0[_0xcd87('0x10')];this[_0xcd87('0x11')]=_0x4c0dc0['number'];this[_0xcd87('0x12')]=_0x4c0dc0[_0xcd87('0x12')];this[_0xcd87('0x13')]=_0x4c0dc0['responsetime'];this[_0xcd87('0x14')]=_0x4c0dc0[_0xcd87('0x14')];this[_0xcd87('0x15')]=moment()[_0xcd87('0x16')]('YYYY-MM-DD\x20HH:mm:ss');this[_0xcd87('0x17')]=getSeconds(_0x4c0dc0['responsetime'],_0x4c0dc0[_0xcd87('0x12')]);this[_0xcd87('0x18')]=getSeconds(_0x4c0dc0[_0xcd87('0x14')],_0x4c0dc0[_0xcd87('0x13')]);this[_0xcd87('0x19')]=getSeconds(this['endtime'],_0x4c0dc0[_0xcd87('0x14')]);this[_0xcd87('0xb')]=_0x45c918['queue'];this[_0xcd87('0x1a')]=_0x45c918[_0xcd87('0x1a')];this[_0xcd87('0x1b')]=_0x45c918[_0xcd87('0x1b')];this[_0xcd87('0x1c')]=_0x4c0dc0[_0xcd87('0x1c')];this[_0xcd87('0x1d')]=_0x4c0dc0['callbackuniqueid'];this[_0xcd87('0x1e')]=_0x4c0dc0['callbackat'];this[_0xcd87('0x1f')]=_0x4c0dc0[_0xcd87('0x1f')];this['ContactId']=_0x4c0dc0[_0xcd87('0x20')];this['ListId']=_0x4c0dc0['ListId'];this[_0xcd87('0x21')]=_0x4c0dc0['UserId'];this[_0xcd87('0x22')]=_0x4c0dc0[_0xcd87('0x22')];this[_0xcd87('0x23')]=_0x4c0dc0[_0xcd87('0x23')];this[_0xcd87('0x24')]=_0x4c0dc0[_0xcd87('0x24')]||'';this[_0xcd87('0x25')]=_0x4c0dc0[_0xcd87('0x25')]||'';}module[_0xcd87('0x26')]=AgentComplete;
\ No newline at end of file
+var _0xd477=['UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','lodash','moment','milliseconds','seconds','state','statedesc','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','name','starttime','responsetime','answertime','endtime','format','YYYY-MM-DD\x20HH:mm:ss','holdtime','membername','reason','callback','callbackuniqueid','recallme','ContactId','ListId'];(function(_0x16bcbb,_0x66a258){var _0x41b175=function(_0x5f34ff){while(--_0x5f34ff){_0x16bcbb['push'](_0x16bcbb['shift']());}};_0x41b175(++_0x66a258);}(_0xd477,0x1b3));var _0x7d47=function(_0x63a96d,_0x200b67){_0x63a96d=_0x63a96d-0x0;var _0x4604b7=_0xd477[_0x63a96d];return _0x4604b7;};'use strict';var util=require(_0x7d47('0x0'));var _=require(_0x7d47('0x1'));var moment=require(_0x7d47('0x2'));function getSeconds(_0x4e6bd0,_0x58d942){var _0x155b60=moment(_0x4e6bd0)[_0x7d47('0x3')](0x0);var _0x10d991=moment(_0x58d942)[_0x7d47('0x3')](0x0);return _0x155b60['diff'](_0x10d991,_0x7d47('0x4'));}function AgentComplete(_0x1a47b3,_0x2212e5){this[_0x7d47('0x5')]=0x4;this[_0x7d47('0x6')]='Answer';this['scheduledat']=_0x1a47b3[_0x7d47('0x7')];this[_0x7d47('0x8')]=_0x1a47b3[_0x7d47('0x8')];this[_0x7d47('0x9')]=_0x1a47b3[_0x7d47('0x8')]===_0x7d47('0xa')?_0x7d47('0xb'):_0x1a47b3[_0x7d47('0x8')];this[_0x7d47('0xc')]=_0x1a47b3[_0x7d47('0xc')];this[_0x7d47('0xd')]=_0x1a47b3[_0x7d47('0xd')];this[_0x7d47('0xe')]=_0x1a47b3['countnoanswerretry'];this[_0x7d47('0xf')]=_0x1a47b3[_0x7d47('0xc')]+_0x1a47b3[_0x7d47('0xd')]+_0x1a47b3[_0x7d47('0xe')];this['uniqueid']=_0x2212e5[_0x7d47('0x10')];this[_0x7d47('0x11')]=_0x1a47b3[_0x7d47('0x12')];this['calleridnum']=_0x1a47b3['number'];this[_0x7d47('0x13')]=_0x1a47b3['starttime'];this[_0x7d47('0x14')]=_0x1a47b3[_0x7d47('0x14')];this['answertime']=_0x1a47b3[_0x7d47('0x15')];this[_0x7d47('0x16')]=moment()[_0x7d47('0x17')](_0x7d47('0x18'));this['ringtime']=getSeconds(_0x1a47b3['responsetime'],_0x1a47b3[_0x7d47('0x13')]);this[_0x7d47('0x19')]=getSeconds(_0x1a47b3[_0x7d47('0x15')],_0x1a47b3[_0x7d47('0x14')]);this['talktime']=getSeconds(this['endtime'],_0x1a47b3['answertime']);this[_0x7d47('0xb')]=_0x2212e5[_0x7d47('0xb')];this['membername']=_0x2212e5[_0x7d47('0x1a')];this[_0x7d47('0x1b')]=_0x2212e5[_0x7d47('0x1b')];this[_0x7d47('0x1c')]=_0x1a47b3[_0x7d47('0x1c')];this[_0x7d47('0x1d')]=_0x1a47b3['callbackuniqueid'];this['callbackat']=_0x1a47b3['callbackat'];this[_0x7d47('0x1e')]=_0x1a47b3['recallme'];this['ContactId']=_0x1a47b3[_0x7d47('0x1f')];this['ListId']=_0x1a47b3[_0x7d47('0x20')];this[_0x7d47('0x21')]=_0x1a47b3[_0x7d47('0x21')];this['VoiceQueueId']=_0x1a47b3[_0x7d47('0x22')];this[_0x7d47('0x23')]=_0x1a47b3['CampaignId'];this['originatecalleridnum']=_0x1a47b3[_0x7d47('0x24')]||'';this[_0x7d47('0x25')]=_0x1a47b3[_0x7d47('0x25')]||'';}module[_0x7d47('0x26')]=AgentComplete;
\ No newline at end of file
index b2f18ea..798e84d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x46c1=['seconds','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','calleridname','calleridnum','starttime','responsetime','endtime','ringtime','talktime','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','lodash','moment','milliseconds','diff'];(function(_0x42488d,_0x4379d7){var _0x55171e=function(_0x4da828){while(--_0x4da828){_0x42488d['push'](_0x42488d['shift']());}};_0x55171e(++_0x4379d7);}(_0x46c1,0x7c));var _0x146c=function(_0x17c77f,_0x200dad){_0x17c77f=_0x17c77f-0x0;var _0x180363=_0x46c1[_0x17c77f];return _0x180363;};'use strict';var util=require('util');var _=require(_0x146c('0x0'));var moment=require(_0x146c('0x1'));function getSeconds(_0x38d957,_0x35f6d1){var _0x379739=moment(_0x38d957)['milliseconds'](0x0);var _0x3cfd3f=moment(_0x35f6d1)[_0x146c('0x2')](0x0);return _0x379739[_0x146c('0x3')](_0x3cfd3f,_0x146c('0x4'));}function Final(_0x1fa49e){this['uniqueid']=_0x1fa49e['uniqueid'];this[_0x146c('0x5')]=_0x1fa49e[_0x146c('0x5')];this[_0x146c('0x6')]=_0x1fa49e['type'];this[_0x146c('0x7')]=_0x1fa49e['type']===_0x146c('0x8')?_0x146c('0x9'):_0x1fa49e['type'];this[_0x146c('0xa')]=_0x1fa49e[_0x146c('0xa')];this[_0x146c('0xb')]=_0x1fa49e[_0x146c('0xb')];this['countnoanswerretry']=_0x1fa49e[_0x146c('0xc')];this['countglobal']=_0x1fa49e[_0x146c('0xa')]+_0x1fa49e[_0x146c('0xb')]+_0x1fa49e[_0x146c('0xc')];this['queue']=_0x1fa49e[_0x146c('0x9')];this['calleridname']=_0x1fa49e[_0x146c('0xd')];this['calleridnum']=_0x1fa49e[_0x146c('0xe')];this[_0x146c('0xf')]=_0x1fa49e[_0x146c('0xf')];this[_0x146c('0x10')]=_0x1fa49e['responsetime'];this[_0x146c('0x11')]=_0x1fa49e[_0x146c('0x10')];this['ringtime']=_0x1fa49e[_0x146c('0x12')]||0x0;this['holdtime']=_0x1fa49e['holdtime']||0x0;this[_0x146c('0x13')]=_0x1fa49e['talktime']||0x0;this[_0x146c('0x14')]=_0x1fa49e[_0x146c('0x14')];this[_0x146c('0x15')]=_0x1fa49e['callbackuniqueid'];this[_0x146c('0x16')]=_0x1fa49e[_0x146c('0x16')];this[_0x146c('0x17')]=_0x1fa49e[_0x146c('0x17')];this[_0x146c('0x18')]=_0x1fa49e[_0x146c('0x18')];this[_0x146c('0x19')]=_0x1fa49e[_0x146c('0x19')];this[_0x146c('0x1a')]=_0x1fa49e['UserId'];this[_0x146c('0x1b')]=_0x1fa49e[_0x146c('0x1b')];this[_0x146c('0x1c')]=_0x1fa49e[_0x146c('0x1c')];this[_0x146c('0x1d')]=_0x1fa49e['originatecalleridnum']||'';this['originatecalleridname']=_0x1fa49e[_0x146c('0x1e')]||'';}module[_0x146c('0x1f')]=Final;
\ No newline at end of file
+var _0x97ce=['seconds','uniqueid','scheduledat','type','campaigntype','outbound','countbusyretry','countcongestionretry','countnoanswerretry','queue','calleridname','calleridnum','responsetime','endtime','holdtime','talktime','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','lodash','moment','diff'];(function(_0x4854d6,_0x2f1264){var _0x3885c0=function(_0x4d564d){while(--_0x4d564d){_0x4854d6['push'](_0x4854d6['shift']());}};_0x3885c0(++_0x2f1264);}(_0x97ce,0x151));var _0xe97c=function(_0x4a3898,_0x4c9853){_0x4a3898=_0x4a3898-0x0;var _0x25ceb0=_0x97ce[_0x4a3898];return _0x25ceb0;};'use strict';var util=require(_0xe97c('0x0'));var _=require(_0xe97c('0x1'));var moment=require(_0xe97c('0x2'));function getSeconds(_0x31bf3f,_0x4d3faa){var _0x39e994=moment(_0x31bf3f)['milliseconds'](0x0);var _0x3001eb=moment(_0x4d3faa)['milliseconds'](0x0);return _0x39e994[_0xe97c('0x3')](_0x3001eb,_0xe97c('0x4'));}function Final(_0x41d9b0){this[_0xe97c('0x5')]=_0x41d9b0[_0xe97c('0x5')];this[_0xe97c('0x6')]=_0x41d9b0['scheduledat'];this[_0xe97c('0x7')]=_0x41d9b0[_0xe97c('0x7')];this[_0xe97c('0x8')]=_0x41d9b0['type']===_0xe97c('0x9')?'queue':_0x41d9b0[_0xe97c('0x7')];this[_0xe97c('0xa')]=_0x41d9b0[_0xe97c('0xa')];this[_0xe97c('0xb')]=_0x41d9b0[_0xe97c('0xb')];this[_0xe97c('0xc')]=_0x41d9b0[_0xe97c('0xc')];this['countglobal']=_0x41d9b0[_0xe97c('0xa')]+_0x41d9b0[_0xe97c('0xb')]+_0x41d9b0[_0xe97c('0xc')];this[_0xe97c('0xd')]=_0x41d9b0[_0xe97c('0xd')];this[_0xe97c('0xe')]=_0x41d9b0[_0xe97c('0xe')];this[_0xe97c('0xf')]=_0x41d9b0[_0xe97c('0xf')];this['starttime']=_0x41d9b0['starttime'];this[_0xe97c('0x10')]=_0x41d9b0['responsetime'];this[_0xe97c('0x11')]=_0x41d9b0[_0xe97c('0x10')];this['ringtime']=_0x41d9b0['ringtime']||0x0;this[_0xe97c('0x12')]=_0x41d9b0[_0xe97c('0x12')]||0x0;this[_0xe97c('0x13')]=_0x41d9b0[_0xe97c('0x13')]||0x0;this['callback']=_0x41d9b0['callback'];this['callbackuniqueid']=_0x41d9b0[_0xe97c('0x14')];this[_0xe97c('0x15')]=_0x41d9b0[_0xe97c('0x15')];this['recallme']=_0x41d9b0[_0xe97c('0x16')];this[_0xe97c('0x17')]=_0x41d9b0[_0xe97c('0x17')];this[_0xe97c('0x18')]=_0x41d9b0[_0xe97c('0x18')];this['UserId']=_0x41d9b0[_0xe97c('0x19')];this[_0xe97c('0x1a')]=_0x41d9b0[_0xe97c('0x1a')];this[_0xe97c('0x1b')]=_0x41d9b0[_0xe97c('0x1b')];this[_0xe97c('0x1c')]=_0x41d9b0[_0xe97c('0x1c')]||'';this[_0xe97c('0x1d')]=_0x41d9b0[_0xe97c('0x1d')]||'';}module[_0xe97c('0x1e')]=Final;
\ No newline at end of file
index c53084d..1d7ef26 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['countglobal','countcongestionretry','countnoanswerretry','uniqueid','name','calleridnum','number','starttime','responsetime','endtime','YYYY-MM-DD\x20HH:mm:ss','talktime','membername','IVR','reason','cause-txt','callback','callbackuniqueid','callbackat','recallme','ContactId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','moment','milliseconds','diff','seconds','state','statedesc','Answer','type','outbound','queue','countbusyretry'];(function(_0x2ed502,_0x3b7fab){var _0x191886=function(_0x446add){while(--_0x446add){_0x2ed502['push'](_0x2ed502['shift']());}};_0x191886(++_0x3b7fab);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2160a9,_0x3cbd9e){_0x2160a9=_0x2160a9-0x0;var _0xa88cf7=_0xa9e0[_0x2160a9];return _0xa88cf7;};'use strict';var util=require(_0x0a9e('0x0'));var _=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));function getSeconds(_0x5dd881,_0x550fbc){var _0x18d5c9=moment(_0x5dd881)['milliseconds'](0x0);var _0x333808=moment(_0x550fbc)[_0x0a9e('0x3')](0x0);return _0x18d5c9[_0x0a9e('0x4')](_0x333808,_0x0a9e('0x5'));}function Hangup(_0x981158,_0x57b080){this[_0x0a9e('0x6')]=0x4;this[_0x0a9e('0x7')]=_0x0a9e('0x8');this['scheduledat']=_0x981158['scheduledat'];this[_0x0a9e('0x9')]=_0x981158['type'];this['campaigntype']=_0x981158[_0x0a9e('0x9')]===_0x0a9e('0xa')?_0x0a9e('0xb'):_0x981158[_0x0a9e('0x9')];this[_0x0a9e('0xc')]=_0x981158[_0x0a9e('0xc')];this['countcongestionretry']=_0x981158['countcongestionretry'];this['countnoanswerretry']=_0x981158['countnoanswerretry'];this[_0x0a9e('0xd')]=_0x981158[_0x0a9e('0xc')]+_0x981158[_0x0a9e('0xe')]+_0x981158[_0x0a9e('0xf')];this[_0x0a9e('0x10')]=_0x57b080[_0x0a9e('0x10')];this['calleridname']=_0x981158[_0x0a9e('0x11')];this[_0x0a9e('0x12')]=_0x981158[_0x0a9e('0x13')];this[_0x0a9e('0x14')]=_0x981158[_0x0a9e('0x14')];this[_0x0a9e('0x15')]=_0x981158['responsetime'];this[_0x0a9e('0x16')]=moment()['format'](_0x0a9e('0x17'));this['ringtime']=getSeconds(_0x981158[_0x0a9e('0x15')],_0x981158[_0x0a9e('0x14')]);this['holdtime']=0x0;this[_0x0a9e('0x18')]=getSeconds(this['endtime'],_0x981158[_0x0a9e('0x15')]);this[_0x0a9e('0xb')]=_0x981158[_0x0a9e('0xb')];this[_0x0a9e('0x19')]=_0x0a9e('0x1a');this[_0x0a9e('0x1b')]=_0x57b080[_0x0a9e('0x1c')];this[_0x0a9e('0x1d')]=_0x981158[_0x0a9e('0x1d')];this[_0x0a9e('0x1e')]=_0x981158[_0x0a9e('0x1e')];this[_0x0a9e('0x1f')]=_0x981158['callbackat'];this[_0x0a9e('0x20')]=_0x981158[_0x0a9e('0x20')];this['ContactId']=_0x981158[_0x0a9e('0x21')];this['ListId']=_0x981158['ListId'];this[_0x0a9e('0x22')]=_0x981158[_0x0a9e('0x22')];this[_0x0a9e('0x23')]=_0x981158[_0x0a9e('0x23')];this['CampaignId']=_0x981158[_0x0a9e('0x24')];}module[_0x0a9e('0x25')]=Hangup;
\ No newline at end of file
+var _0xa9e0=['countglobal','countcongestionretry','countnoanswerretry','uniqueid','name','calleridnum','number','starttime','responsetime','endtime','YYYY-MM-DD\x20HH:mm:ss','talktime','membername','IVR','reason','cause-txt','callback','callbackuniqueid','callbackat','recallme','ContactId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','moment','milliseconds','diff','seconds','state','statedesc','Answer','type','outbound','queue','countbusyretry'];(function(_0x3f369c,_0x1c5793){var _0x3f851a=function(_0x482e57){while(--_0x482e57){_0x3f369c['push'](_0x3f369c['shift']());}};_0x3f851a(++_0x1c5793);}(_0xa9e0,0x123));var _0x0a9e=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0xa9e0[_0x6131cd];return _0x47e916;};'use strict';var util=require(_0x0a9e('0x0'));var _=require(_0x0a9e('0x1'));var moment=require(_0x0a9e('0x2'));function getSeconds(_0x5dd881,_0x550fbc){var _0x18d5c9=moment(_0x5dd881)['milliseconds'](0x0);var _0x333808=moment(_0x550fbc)[_0x0a9e('0x3')](0x0);return _0x18d5c9[_0x0a9e('0x4')](_0x333808,_0x0a9e('0x5'));}function Hangup(_0x981158,_0x57b080){this[_0x0a9e('0x6')]=0x4;this[_0x0a9e('0x7')]=_0x0a9e('0x8');this['scheduledat']=_0x981158['scheduledat'];this[_0x0a9e('0x9')]=_0x981158['type'];this['campaigntype']=_0x981158[_0x0a9e('0x9')]===_0x0a9e('0xa')?_0x0a9e('0xb'):_0x981158[_0x0a9e('0x9')];this[_0x0a9e('0xc')]=_0x981158[_0x0a9e('0xc')];this['countcongestionretry']=_0x981158['countcongestionretry'];this['countnoanswerretry']=_0x981158['countnoanswerretry'];this[_0x0a9e('0xd')]=_0x981158[_0x0a9e('0xc')]+_0x981158[_0x0a9e('0xe')]+_0x981158[_0x0a9e('0xf')];this[_0x0a9e('0x10')]=_0x57b080[_0x0a9e('0x10')];this['calleridname']=_0x981158[_0x0a9e('0x11')];this[_0x0a9e('0x12')]=_0x981158[_0x0a9e('0x13')];this[_0x0a9e('0x14')]=_0x981158[_0x0a9e('0x14')];this[_0x0a9e('0x15')]=_0x981158['responsetime'];this[_0x0a9e('0x16')]=moment()['format'](_0x0a9e('0x17'));this['ringtime']=getSeconds(_0x981158[_0x0a9e('0x15')],_0x981158[_0x0a9e('0x14')]);this['holdtime']=0x0;this[_0x0a9e('0x18')]=getSeconds(this['endtime'],_0x981158[_0x0a9e('0x15')]);this[_0x0a9e('0xb')]=_0x981158[_0x0a9e('0xb')];this[_0x0a9e('0x19')]=_0x0a9e('0x1a');this[_0x0a9e('0x1b')]=_0x57b080[_0x0a9e('0x1c')];this[_0x0a9e('0x1d')]=_0x981158[_0x0a9e('0x1d')];this[_0x0a9e('0x1e')]=_0x981158[_0x0a9e('0x1e')];this[_0x0a9e('0x1f')]=_0x981158['callbackat'];this[_0x0a9e('0x20')]=_0x981158[_0x0a9e('0x20')];this['ContactId']=_0x981158[_0x0a9e('0x21')];this['ListId']=_0x981158['ListId'];this[_0x0a9e('0x22')]=_0x981158[_0x0a9e('0x22')];this[_0x0a9e('0x23')]=_0x981158[_0x0a9e('0x23')];this['CampaignId']=_0x981158[_0x0a9e('0x24')];}module[_0x0a9e('0x25')]=Hangup;
\ No newline at end of file
index 46973bd..3336432 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb05d=['milliseconds','scheduledat','type','queue','countbusyretry','countcongestionretry','countnoanswerretry','calleridname','name','calleridnum','number','starttime','responsetime','endtime','ringtime','callback','callbackuniqueid','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','lodash','moment'];(function(_0x5e7514,_0x30c2e1){var _0x12f472=function(_0x33ddb6){while(--_0x33ddb6){_0x5e7514['push'](_0x5e7514['shift']());}};_0x12f472(++_0x30c2e1);}(_0xb05d,0x1be));var _0xdb05=function(_0x2bfd4f,_0x1bbf2c){_0x2bfd4f=_0x2bfd4f-0x0;var _0x341849=_0xb05d[_0x2bfd4f];return _0x341849;};'use strict';var util=require('util');var _=require(_0xdb05('0x0'));var moment=require(_0xdb05('0x1'));function getSeconds(_0x4c3e79,_0x288ad4){var _0x3d6319=moment(_0x4c3e79)[_0xdb05('0x2')](0x0);var _0x3b8f75=moment(_0x288ad4)[_0xdb05('0x2')](0x0);return _0x3d6319['diff'](_0x3b8f75,'seconds');}function History(_0x116ea4){this['uniqueid']=_0x116ea4['uniqueid'];this[_0xdb05('0x3')]=_0x116ea4[_0xdb05('0x3')]||undefined;this[_0xdb05('0x4')]=_0x116ea4[_0xdb05('0x4')];this['campaigntype']=_0x116ea4[_0xdb05('0x4')]==='outbound'?_0xdb05('0x5'):_0x116ea4['type'];this[_0xdb05('0x6')]=_0x116ea4[_0xdb05('0x6')];this['countcongestionretry']=_0x116ea4[_0xdb05('0x7')];this[_0xdb05('0x8')]=_0x116ea4[_0xdb05('0x8')];this['countglobal']=_0x116ea4[_0xdb05('0x6')]+_0x116ea4['countcongestionretry']+_0x116ea4[_0xdb05('0x8')];this[_0xdb05('0x5')]=_0x116ea4[_0xdb05('0x5')];this[_0xdb05('0x9')]=_0x116ea4[_0xdb05('0xa')];this[_0xdb05('0xb')]=_0x116ea4[_0xdb05('0xc')];this[_0xdb05('0xd')]=_0x116ea4[_0xdb05('0xd')];this['responsetime']=_0x116ea4[_0xdb05('0xe')];this[_0xdb05('0xf')]=_0x116ea4['responsetime'];this[_0xdb05('0x10')]=getSeconds(_0x116ea4[_0xdb05('0xe')],_0x116ea4['starttime']);this['holdtime']=0x0;this['talktime']=0x0;this['callback']=_0x116ea4[_0xdb05('0x11')];this[_0xdb05('0x12')]=_0x116ea4[_0xdb05('0x12')];this['callbackat']=_0x116ea4['callbackat'];this[_0xdb05('0x13')]=_0x116ea4['recallme'];this[_0xdb05('0x14')]=_0x116ea4[_0xdb05('0x14')];this[_0xdb05('0x15')]=_0x116ea4[_0xdb05('0x15')];this[_0xdb05('0x16')]=_0x116ea4[_0xdb05('0x16')];this[_0xdb05('0x17')]=_0x116ea4[_0xdb05('0x17')];this['CampaignId']=_0x116ea4[_0xdb05('0x18')];this[_0xdb05('0x19')]=_0x116ea4[_0xdb05('0x19')]||'';this[_0xdb05('0x1a')]=_0x116ea4[_0xdb05('0x1a')]||'';}module[_0xdb05('0x1b')]=History;
\ No newline at end of file
+var _0xbc61=['recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','lodash','moment','milliseconds','diff','seconds','uniqueid','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','calleridname','name','calleridnum','number','starttime','responsetime','endtime','holdtime','talktime','callback','callbackat'];(function(_0x243b59,_0x3f9495){var _0x3e1676=function(_0x354052){while(--_0x354052){_0x243b59['push'](_0x243b59['shift']());}};_0x3e1676(++_0x3f9495);}(_0xbc61,0x1ad));var _0x1bc6=function(_0xc5bf4b,_0x17a413){_0xc5bf4b=_0xc5bf4b-0x0;var _0x3f8f9b=_0xbc61[_0xc5bf4b];return _0x3f8f9b;};'use strict';var util=require(_0x1bc6('0x0'));var _=require(_0x1bc6('0x1'));var moment=require(_0x1bc6('0x2'));function getSeconds(_0x459a15,_0x19d422){var _0x4fa90a=moment(_0x459a15)[_0x1bc6('0x3')](0x0);var _0x402316=moment(_0x19d422)[_0x1bc6('0x3')](0x0);return _0x4fa90a[_0x1bc6('0x4')](_0x402316,_0x1bc6('0x5'));}function History(_0xc8ad37){this[_0x1bc6('0x6')]=_0xc8ad37[_0x1bc6('0x6')];this[_0x1bc6('0x7')]=_0xc8ad37['scheduledat']||undefined;this[_0x1bc6('0x8')]=_0xc8ad37[_0x1bc6('0x8')];this[_0x1bc6('0x9')]=_0xc8ad37[_0x1bc6('0x8')]===_0x1bc6('0xa')?_0x1bc6('0xb'):_0xc8ad37[_0x1bc6('0x8')];this[_0x1bc6('0xc')]=_0xc8ad37[_0x1bc6('0xc')];this[_0x1bc6('0xd')]=_0xc8ad37[_0x1bc6('0xd')];this[_0x1bc6('0xe')]=_0xc8ad37['countnoanswerretry'];this['countglobal']=_0xc8ad37[_0x1bc6('0xc')]+_0xc8ad37[_0x1bc6('0xd')]+_0xc8ad37[_0x1bc6('0xe')];this['queue']=_0xc8ad37[_0x1bc6('0xb')];this[_0x1bc6('0xf')]=_0xc8ad37[_0x1bc6('0x10')];this[_0x1bc6('0x11')]=_0xc8ad37[_0x1bc6('0x12')];this[_0x1bc6('0x13')]=_0xc8ad37[_0x1bc6('0x13')];this['responsetime']=_0xc8ad37[_0x1bc6('0x14')];this[_0x1bc6('0x15')]=_0xc8ad37[_0x1bc6('0x14')];this['ringtime']=getSeconds(_0xc8ad37[_0x1bc6('0x14')],_0xc8ad37[_0x1bc6('0x13')]);this[_0x1bc6('0x16')]=0x0;this[_0x1bc6('0x17')]=0x0;this['callback']=_0xc8ad37[_0x1bc6('0x18')];this['callbackuniqueid']=_0xc8ad37['callbackuniqueid'];this['callbackat']=_0xc8ad37[_0x1bc6('0x19')];this[_0x1bc6('0x1a')]=_0xc8ad37[_0x1bc6('0x1a')];this['ContactId']=_0xc8ad37[_0x1bc6('0x1b')];this['ListId']=_0xc8ad37[_0x1bc6('0x1c')];this[_0x1bc6('0x1d')]=_0xc8ad37[_0x1bc6('0x1d')];this[_0x1bc6('0x1e')]=_0xc8ad37['VoiceQueueId'];this[_0x1bc6('0x1f')]=_0xc8ad37['CampaignId'];this[_0x1bc6('0x20')]=_0xc8ad37[_0x1bc6('0x20')]||'';this[_0x1bc6('0x21')]=_0xc8ad37[_0x1bc6('0x21')]||'';}module[_0x1bc6('0x22')]=History;
\ No newline at end of file
index f4c4908..59bb205 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xccbb=['[uniqueid]','[actions]','isNil','Action','channel','No\x20such\x20channel','updateOriginated','queue','[Dialer][checkChannel]','[Dialer][checkChannel][ivr]','countReScheduled','catch','[countReScheduled]\x20','checkIsBlackList','resolve','then','[checkIsBlackList]\x20','checkIsBlackListIvr','[checkIsBlackListIvr]\x20','[averageHandleTime]\x20','rescheduleContact','[rescheduleContact]\x20','getContactDialer','[getContactDialer]\x20','getContactDialerIvr','getVoiceQueueRtPauses','[getVoiceQueueRtPauses]\x20','moveContactManagedDialer','[moveContactManagedDialer]\x20','createHistory','[createHistory]\x20','[updateOriginated]\x20object\x20originated\x20is\x20negative','[updateOriginated]\x20is\x20null\x20or\x20undefined','loggerHandler','emptyContact','saveInDb','pick','ListId','UserId','CampaignId','[emptyContact][createHistory]','[emptyContact]','isSuccess','Success','isTrunkReachable','SIP/%s','status','unmonitored','syncVarSet','uniqueid','variable','amdstatus','exten','xcally-motion-dialer','dialAMDActive','value','HANGUP','outboundAnswerAgiCallsDay','state','HangupInAMD','membername','[syncHangupInAMD][createHistory]','MACHINE','Machine','AMD','amd','[syncMachine][createHistory]','[syncMachine]','[syncHangupInAMDIvr][createHistory]','[syncHangupInAMDIvr]','[syncMachineIvr][createHistory]','ivrAnswerCallsDay','[syncHangupIvr][createHistory]','[syncHangupIvr]','dialQueueProject','AnswerAGI','AGI','agent','agiafterat','YYYY-MM-DD\x20HH:mm:ss','[syncAgentComplete][createHistory]','[syncAgentComplete]','answertime','[syncQueueCallerAbandon]\x20[Drop]','droptime','dialQueueTimeout','dropreason','TIMEOUT','queueCallerAbandonCreateState','Abandoned','syncQueueMember','actionid','roundrobin','locked','stateinterface','agents','rrmemory','queueBooked','push','idHopper','paused','queueStatusComplete','[unlockQueueStatus][undefined]','[booked][unlockQueueStatus]','[Catch][Preview][syncQueueStatusComplete]','VoiceQueueId','[unlock][syncQueueStatusComplete]','_rr','length','unlockRR','[booked][RR]','Agent:\x20','[booked][RR][finaly]','contactAgent-idHopper:\x20','[booked][unlock]','[booked][unlock2]','[unlock2][syncQueueStatusComplete]','[booked][unlock3]','ContactId','syncCampaigns','checkIsTrunkReachable','TrunkBackup','\x20trunk\x20is\x20not\x20reachable','checkIfTime','ifTime','checkIfTimeIntervals','Failure','INTERVAL_IS_EMPTY','\x20Timezone\x20unknow\x20','isArray','command','iftime\x20%s,%s','interval','timezones','content','indexOf','true','all','GLOBAL_INTERVAL_IS_OVERTIME','INTERVAL_IS_OVERTIME','Global:\x20','\x20Interval\x20is\x20overtime:\x20','Timezone:\x20','checkDialMethod','handlePower','dialPowerLevel','booked','handleIvr','dialGlobalInterval','dialTimezone','[syncQueueSummary]','launchHandleIvr','[syncCampaigns]','\x5cw{0,','pow','replace','random','match','actionOriginate','originate','voiceQueue\x20is\x20undefine','Contact','phone','contact\x20is\x20undefine','getCaller','\x22agi://%s/square,%s\x22','NONE','dialQueueProject2','\x22%s,%s%s,,,%s\x22','dialQueueOptions','dialAgiAfterHangupAgent','ACTIVE','dialAMDInitialSilence','XMD-AMDGREETING','dialAMDGreeting','XMD-AMDAFTERGREETINGSILENCE','XMD-AMDTOTALANALYSISTIME','dialAMDTotalAnalysisTime','XMD-AMDMINWORDLENGTH','XMD-AMDBETWEENWORDSSILENCE','dialAMDBetweenWordsSilence','XMD-AMDMAXIMUMNUMBEROFWORDS','dialAMDMaximumNumberOfWords','XMD-AMDSILENCETHRESHOLD','XMD-AMDMAXIMUMWORDLENGTH','dialAMDMaximumWordLength','XMD-VOICEQUEUEID','XMD-CAMPAIGNID','createdAt','updatedAt','%s%s','XMD-','toUpper','dialRandomLastDigitCallerIdNumber','XMD-ORIGINATECALLERIDNAME','originatecalleridname','XMD-ORIGINATECALLERIDNUM','originatecalleridnum','SIP/%s/%s%s','trim','dialCutDigit','from-sip','OriginateError','[originate][error]','Error','originate\x20action\x20Error','getQueue','response','callProgressDetecting','checkRetriveMax','countbusyretry','countcongestionretry','countnoanswerretry','dialGlobalMaxRetry','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','minutes','dialBusyMaxRetry','add','dialBusyRetryFrequency','[rescheduleContact]\x20[Busy]','dialCongestionMaxRetry','dialCongestionRetryFrequency','[callProgressDetecting]','entity\x20is\x20undefine','object','evt\x20is\x20undefine','NoSuchNumber','[syncAgentComplete][createHistory][0]','stateGlobal','reason\x200\x20no\x20such\x20number....','createStateFinal','NoAnswer','countglobal','[syncAgentComplete][createHistory][3]','reason\x203\x20ringing\x20no\x20answer','[syncAgentComplete][createHistory][5]','reason\x205\x20busy','Congestion','reason\x208\x20congestion','outboundUnknownCallsDay','reason','[syncAgentComplete][createHistory][?]','[moveContactManagedDialer][0]','round','predictiveIntervalMaxThreshold','predictiveIntervalMinThreshold','floor','predictiveIntervalHitRate','[startMethodPredictive][StartProgressive]','check\x20predictive\x20is\x20not\x20undefine','check\x20handlePredictive\x20is\x20not\x20undefine','collection\x20data\x20in\x20progressive\x20at','dialPredictiveInterval','[startMethodPredictive][StartProgressive][Loop]','dropRate','[stopMethodPredictive][ReStartProgressive][ExceededDropDay]','Dropped\x20calls\x20day','dialPredictiveOptimization','[stopMethodPredictive][ReStartProgressive][ExceededDropInterval]','Max\x20Drop\x20','Drop\x20in\x20this\x20interval','started\x20in\x20predictive\x20at','averageHandleTime','getDataPredictive','startMethodPredictive','Predictive\x20for\x20every\x20interval','switch\x20in\x20progressive\x20because\x20available\x20agents\x20(',')\x20are\x20more\x20than\x20threshold\x20(','predictiveIntervalAnsweredCalls','dialPredictiveOptimizationPercentage','busyFactor','[getDataPredictive]','Unknown\x20Predictive','check\x20failure','outboundQueuePauses','predictiveIntervalPauses','[CatchErlangB]','agentBusyFactor','one\x20call\x20every:','fail\x20to\x20scheduled\x20calls','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','Blacklist','[Originate][historyBlacklist]','[Originate][MoveBlacklist]','inBlackList','temp','dialOrderByScheduledAt','[getContactCampaign2][Empty]','RUNNING','[actionOriginate]\x20','[actionOriginateIvr]\x20','[getContactCampaign2]','dialLimitQueue','not_inuse','reachable','Contact.phone','tryOriginatePredictive','[handlePredictive][limitChannel]','abandonmentRate','--------\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','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','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','----\x20Agent\x20Busy\x20Factor\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','Umin:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','[busyFactor]','exports','lodash','uuid','moment','ioredis','../../../config/environment/','dialer','../../../config/logger','predictive','predictiveCalls','syncQueueSummary','../ami','redis','localhost','socket.io-emitter','../rpc/cmHopperHistory','../rpc/cmHopperBlack','../rpc/voiceQueueRt','./history','./agentComplete','./queueCallerAbandon','./hangup','env','XCALLY_IP_AGI','127.0.0.1','prototype','enqueue','tail','finally','sequence','preview','voiceQueues','campaigns','trunks','maxNumberOriginate','actions','uniqueId','startPredictive','startProgressive','ivrOriginated','queueBookedRR','agentconnect','syncAgentConnect','bind','queuecallerabandon','syncQueueCallerAbandon','syncOriginateResponse','agentcomplete','syncHangup','syncNewExten','queuestatuscomplete','syncQueueStatusComplete','loopCampaigns','isUndefined','message','AGENTS_NOT_LOGGED','NOT_ACTIVE','name','Interval','INTERVAL_IS_NULL','\x20INTERVAL_IS_NULL','Intervals','[ifTime][Action]','stringify','milliseconds','diff','seconds','type','outbound','strategy','answered','loggedIn','pTalking','sumDuration','sumHoldTime','total','unmanaged','abandoned','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundReCallsDay','outboundRejectCallsDay','predictiveIntervalAvgHoldtime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalMultiplicativeFactor','predictiveIntervalAvailable','predictiveIntervalTotalCalls','originated','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','Trunk','active','callerid','md5','voice:queue:%s','voice_queue:save','format','campaign:ivr:%s','isEmpty','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','predictiveIntervalAvgTalktime','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','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','Agent\x20Busy\x20Factor:\x20\x20\x20\x20\x20\x20\x20\x20\x20','erlangBusyFactor','Drop\x20Rate:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','---------------------------','merge','clearing\x20variable\x20start\x20progressive','clearing\x20variable\x20start\x20predictive','handlePredictive','ivr','string','\x22%s\x22\x20<%s>','error','inspect','stack','hasOwnProperty','[decremetOriginate]\x20object\x20originated\x20is\x20negative','[decremetOriginate]\x20is\x20null\x20or\x20undefined','contactsRescheduled','RESCHEDULED_CONTACTS','AVAILABLE_CONTACTS_FINISHED','sendMessageOneNotActive','talking','waiting','available','[syncQueueSummary]\x20Campaign\x20Queue:\x20','is\x20not\x20active','IS_DISACTIVED','is\x20disactive','[syncQueueSummary]\x20Campaign\x20Ivr:\x20','statedesc','endtime','starttime','loopClearZombieChannels','clearZombieChannels'];(function(_0x191e4a,_0x3b03e5){var _0x3ad849=function(_0x3b2448){while(--_0x3b2448){_0x191e4a['push'](_0x191e4a['shift']());}};_0x3ad849(++_0x3b03e5);}(_0xccbb,0x14b));var _0xbccb=function(_0x3a367d,_0x5e0a11){_0x3a367d=_0x3a367d-0x0;var _0x44bce1=_0xccbb[_0x3a367d];return _0x44bce1;};'use strict';var util=require('util');var _=require(_0xbccb('0x0'));var BPromise=require('bluebird');var uuid=require(_0xbccb('0x1'));var moment=require(_0xbccb('0x2'));var rr=require('rr');var md5=require('md5');var Redis=require(_0xbccb('0x3'));var config=require(_0xbccb('0x4'));var logger=require('../../../config/logger')(_0xbccb('0x5'));var loggerBooked=require(_0xbccb('0x6'))('booked');var loggerPredictive=require(_0xbccb('0x6'))(_0xbccb('0x7'));var loggerPredictiveCalls=require(_0xbccb('0x6'))(_0xbccb('0x8'));var loggerSyncQueueSummary=require('../../../config/logger')(_0xbccb('0x9'));var ami=require(_0xbccb('0xa'));config['redis']=_['defaults'](config[_0xbccb('0xb')],{'host':_0xbccb('0xc'),'port':0x18eb});var io=require(_0xbccb('0xd'))(new Redis(config['redis']));var cmHopper=require('../rpc/cmHopper');var cmHopperFinal=require('../rpc/cmHopperFinal');var cmHopperHistory=require(_0xbccb('0xe'));var cmHopperBlack=require(_0xbccb('0xf'));var voiceQueueRt=require(_0xbccb('0x10'));var Action=require('./action');var History=require(_0xbccb('0x11'));var Final=require('./final');var AgentComplete=require(_0xbccb('0x12'));var QueueCallerAbandon=require(_0xbccb('0x13'));var Hangup=require(_0xbccb('0x14'));var ipAgi=process[_0xbccb('0x15')][_0xbccb('0x16')]||_0xbccb('0x17');var strategy={'rrmemory':'rrmemory','roundrobin':'roundrobin'};var Sequence=function(){};Sequence[_0xbccb('0x18')][_0xbccb('0x19')]=function(_0x5cea77){this['tail']=this['tail']?this[_0xbccb('0x1a')][_0xbccb('0x1b')](_0x5cea77):_0x5cea77();};function Dialer(_0x1d7448,_0x2816ad){this[_0xbccb('0x1c')]=new Sequence();this[_0xbccb('0x1d')]=_0x2816ad;this[_0xbccb('0x1e')]=_0x1d7448[_0xbccb('0x1e')];this[_0xbccb('0x1f')]=_0x1d7448['campaigns'];this['agents']=_0x1d7448['agents'];this[_0xbccb('0x20')]=_0x1d7448[_0xbccb('0x20')];this[_0xbccb('0x21')]=config[_0xbccb('0x21')]||0x2;this['channels']={};this[_0xbccb('0x22')]={};this['contactsId']={};this[_0xbccb('0x23')]={};this['optionPredictive']={};this[_0xbccb('0x24')]={};this[_0xbccb('0x25')]={};this[_0xbccb('0x26')]={};this['queueBooked']={};this[_0xbccb('0x27')]={};ami['on'](_0xbccb('0x28'),this[_0xbccb('0x29')][_0xbccb('0x2a')](this));ami['on'](_0xbccb('0x2b'),this[_0xbccb('0x2c')][_0xbccb('0x2a')](this));ami['on']('originateresponse',this[_0xbccb('0x2d')][_0xbccb('0x2a')](this));ami['on'](_0xbccb('0x2e'),this['syncAgentComplete'][_0xbccb('0x2a')](this));ami['on']('custom:queuesummary',this[_0xbccb('0x9')][_0xbccb('0x2a')](this));ami['on']('hangup',this[_0xbccb('0x2f')][_0xbccb('0x2a')](this));ami['on']('newexten',this[_0xbccb('0x30')][_0xbccb('0x2a')](this));ami['on']('varset',this['syncVarSet'][_0xbccb('0x2a')](this));ami['on']('queuemember',this['syncQueueMember'][_0xbccb('0x2a')](this));ami['on'](_0xbccb('0x31'),this[_0xbccb('0x32')][_0xbccb('0x2a')](this));this[_0xbccb('0x33')]();this['loopClearZombieChannels']();}function isNotNull(_0x48b896){return _0x48b896!==null&&!_[_0xbccb('0x34')](_0x48b896);}function checkIsLoggedIn(_0x539faf,_0x44990f){return function(){if(_0x44990f<=0x0){_0x539faf[_0xbccb('0x35')]=_0xbccb('0x36');throw _0x539faf['name']+'\x20AGENTS\x20NOT\x20LOGGED';}};}function isActive(_0x181a5b){return _0x181a5b;}function checkIsActive(_0x4892e2,_0x12e631){return function(){if(!isActive(_0x12e631)){_0x4892e2[_0xbccb('0x35')]=_0xbccb('0x37');throw _0x4892e2[_0xbccb('0x38')]+'\x20NOT\x20Active';}};}function checkInterval(_0x1aa63d){return function(){if(!isNotNull(_0x1aa63d[_0xbccb('0x39')])){_0x1aa63d['message']=_0xbccb('0x3a');throw _0x1aa63d[_0xbccb('0x38')]+_0xbccb('0x3b');}if(!isNotNull(_0x1aa63d[_0xbccb('0x39')][_0xbccb('0x3c')])){_0x1aa63d[_0xbccb('0x35')]='INTERVAL_IS_NULL';throw _0x1aa63d[_0xbccb('0x38')]+_0xbccb('0x3b');}if(!isNotNull(_['isEmpty'](_0x1aa63d[_0xbccb('0x39')]['Intervals']))){_0x1aa63d['message']=_0xbccb('0x3a');throw _0x1aa63d[_0xbccb('0x38')]+_0xbccb('0x3b');}};}function msgResponse(_0x275094,_0x3bca60,_0x17488b){return{'action':_0x275094,'response':_0x3bca60,'message':_0x17488b,'stack':_0x17488b};}function myreject(_0x370fa3){return function(_0x19d17d){return _0x370fa3(msgResponse(_0xbccb('0x3d'),'Error',JSON[_0xbccb('0x3e')](_0x19d17d)));};}function getSeconds(_0x5e1238,_0x23f98b){var _0x36e850=moment(_0x5e1238)['milliseconds'](0x0);var _0x2d2eb6=moment(_0x23f98b)[_0xbccb('0x3f')](0x0);return _0x36e850[_0xbccb('0x40')](_0x2d2eb6,_0xbccb('0x41'));}function emit(_0x498097,_0x242e75,_0x797587){io['to'](_0x498097)['emit'](_0x242e75,_0x797587);}function emitVoiceQueueSummary(_0x118253){if(_0x118253[_0xbccb('0x42')]===_0xbccb('0x43')){var _0x371bf4={'id':_0x118253['id'],'name':_0x118253[_0xbccb('0x38')],'strategy':_0x118253[_0xbccb('0x44')],'answered':_0x118253[_0xbccb('0x45')],'available':_0x118253['available'],'loggedIn':_0x118253[_0xbccb('0x46')],'pTalking':_0x118253[_0xbccb('0x47')],'sumBillable':_0x118253['sumBillable'],'sumDuration':_0x118253[_0xbccb('0x48')],'sumHoldTime':_0x118253[_0xbccb('0x49')]||0x0,'talking':_0x118253['talking'],'total':_0x118253[_0xbccb('0x4a')],'type':_0x118253[_0xbccb('0x42')],'unmanaged':_0x118253[_0xbccb('0x4b')],'abandoned':_0x118253[_0xbccb('0x4c')],'waiting':_0x118253['waiting'],'loggedInDb':_0x118253[_0xbccb('0x4d')],'dialActive':_0x118253[_0xbccb('0x4e')],'dialMethod':_0x118253[_0xbccb('0x4f')],'dialOriginateCallerIdName':_0x118253[_0xbccb('0x50')],'dialOriginateCallerIdNumber':_0x118253[_0xbccb('0x51')],'dialOriginateTimeout':_0x118253[_0xbccb('0x52')],'dialPrefix':_0x118253[_0xbccb('0x53')],'outboundAnswerAgiCallsDay':_0x118253['outboundAnswerAgiCallsDay'],'outboundAnswerCallsDay':_0x118253[_0xbccb('0x54')],'outboundBlacklistCallsDay':_0x118253[_0xbccb('0x55')],'outboundBusyCallsDay':_0x118253[_0xbccb('0x56')],'outboundCongestionCallsDay':_0x118253[_0xbccb('0x57')],'outboundDropCallsDayACS':_0x118253[_0xbccb('0x58')],'outboundDropCallsDayCallersExit':_0x118253[_0xbccb('0x59')],'outboundDropCallsDayTimeout':_0x118253[_0xbccb('0x5a')],'outboundNoAnswerCallsDay':_0x118253[_0xbccb('0x5b')],'outboundNoSuchCallsDay':_0x118253[_0xbccb('0x5c')],'outboundOriginateFailureCallsDay':_0x118253['outboundOriginateFailureCallsDay'],'outboundReCallsDay':_0x118253[_0xbccb('0x5d')],'outboundRejectCallsDay':_0x118253[_0xbccb('0x5e')],'outboundUnknownCallsDay':_0x118253['outboundUnknownCallsDay'],'predictiveIntervalAnsweredCalls':_0x118253['predictiveIntervalAnsweredCalls'],'predictiveIntervalAvgHoldtime':_0x118253[_0xbccb('0x5f')],'predictiveIntervalAvgTalktime':_0x118253['predictiveIntervalAvgTalktime'],'predictiveIntervalDroppedCallsCallersExit':_0x118253[_0xbccb('0x60')],'predictiveIntervalDroppedCallsTimeout':_0x118253[_0xbccb('0x61')],'predictiveIntervalErlangCalls':_0x118253[_0xbccb('0x62')],'predictiveIntervalErlangCallsDroppedCalls':_0x118253[_0xbccb('0x63')],'predictiveIntervalHitRate':_0x118253['predictiveIntervalHitRate'],'predictiveIntervalMultiplicativeFactor':_0x118253[_0xbccb('0x64')],'predictiveIntervalPauses':_0x118253['predictiveIntervalPauses'],'predictiveIntervalAvailable':_0x118253[_0xbccb('0x65')],'predictiveIntervalTotalCalls':_0x118253[_0xbccb('0x66')],'message':_0x118253[_0xbccb('0x35')],'originated':_0x118253[_0xbccb('0x67')],'erlangCalls':_0x118253[_0xbccb('0x68')],'erlangCallToSecond':_0x118253[_0xbccb('0x69')],'erlangAbandonmentRate':_0x118253[_0xbccb('0x6a')],'erlangBusyFactor':_0x118253['erlangBusyFactor'],'startPredictive':_0x118253[_0xbccb('0x24')],'startProgressive':_0x118253[_0xbccb('0x25')]};if(_0x118253[_0xbccb('0x6b')]){_0x371bf4[_0xbccb('0x6b')]={'id':_0x118253[_0xbccb('0x6b')]['id'],'name':_0x118253[_0xbccb('0x6b')][_0xbccb('0x38')],'active':_0x118253[_0xbccb('0x6b')][_0xbccb('0x6c')],'callerid':_0x118253[_0xbccb('0x6b')][_0xbccb('0x6d')]};}if(_0x118253[_0xbccb('0x39')]){_0x371bf4[_0xbccb('0x39')]={'id':_0x118253[_0xbccb('0x39')]['id'],'name':_0x118253[_0xbccb('0x39')]['name']};}var _0x5ecdc3=md5(JSON[_0xbccb('0x3e')](_0x371bf4));if(_0x118253[_0xbccb('0x6e')]!==_0x5ecdc3){_0x118253[_0xbccb('0x6e')]=_0x5ecdc3;emit(util['format'](_0xbccb('0x6f'),_0x371bf4['name']),_0xbccb('0x70'),_0x371bf4);}}}function emitCampaignSummary(_0x4bcf9c){if(_0x4bcf9c['type']==='ivr'){emit(util[_0xbccb('0x71')](_0xbccb('0x72'),_0x4bcf9c[_0xbccb('0x38')]),'campaign:save',_0x4bcf9c);}}function checkGetDataPredictive(_0x2cfdbe){if(isNotNull(_0x2cfdbe)){if(!_[_0xbccb('0x73')](_0x2cfdbe)){loggerPredictive[_0xbccb('0x74')](_0xbccb('0x75'));loggerPredictive[_0xbccb('0x74')](_0xbccb('0x76'),_0x2cfdbe[_0xbccb('0x66')]);loggerPredictive['info'](_0xbccb('0x77'),_0x2cfdbe['predictiveIntervalAnsweredCalls']);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x78'),_0x2cfdbe[_0xbccb('0x61')]);loggerPredictive['info']('Dropped\x20Exit:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x2cfdbe[_0xbccb('0x60')]);loggerPredictive[_0xbccb('0x74')]('AVG\x20Hold\x20Time:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x2cfdbe[_0xbccb('0x5f')]);loggerPredictive[_0xbccb('0x74')]('AVG\x20Talk\x20Time:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x2cfdbe['predictiveIntervalAvgTalktime']);loggerPredictive['info']('---------------------------');if(_0x2cfdbe[_0xbccb('0x66')]>0x0){if(!_[_0xbccb('0x34')](_0x2cfdbe['predictiveIntervalAvgTalktime'])&&_0x2cfdbe[_0xbccb('0x79')]>0x0){return!![];}else{loggerPredictive[_0xbccb('0x74')](_0xbccb('0x7a'));}if(!_['isUndefined'](_0x2cfdbe[_0xbccb('0x5f')])&&_0x2cfdbe[_0xbccb('0x5f')]>0x0){return!![];}else{loggerPredictive['info'](_0xbccb('0x7b'));}}else{loggerPredictive['info'](_0xbccb('0x7c'));}}else{loggerPredictive[_0xbccb('0x74')]('History\x20information\x20are\x20empty');}}else{loggerPredictive[_0xbccb('0x74')](_0xbccb('0x7d'));}return![];}function mergeDataErlangB(_0xfea0ad){return function(_0x44a249){loggerPredictive[_0xbccb('0x74')]('---------\x20ErlangB\x20---------');loggerPredictive[_0xbccb('0x74')](_0xbccb('0x7e'),_0x44a249[_0xbccb('0x68')]);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x7f'),_0x44a249[_0xbccb('0x69')]);loggerPredictive[_0xbccb('0x74')]('Drop\x20Rate:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x44a249[_0xbccb('0x6a')]);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x80'),_0x44a249[_0xbccb('0x81')]);loggerPredictive['info'](_0xbccb('0x82'),_0x44a249[_0xbccb('0x6a')]);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x83'));_[_0xbccb('0x84')](_0xfea0ad,_0x44a249);};}function getDiff(_0x576d1a){var _0x1a18d3=moment()[_0xbccb('0x3f')](0x0);var _0x86049f=moment(_0x576d1a)['milliseconds'](0x0);return _0x1a18d3[_0xbccb('0x40')](_0x86049f,_0xbccb('0x41'));}function ifInterval(_0x33f76f,_0x509156){if(_[_0xbccb('0x34')](_0x509156)){return![];}if(getDiff(_0x509156)<_0x33f76f*0x3c){return!![];}else{return![];}}function freeVariablesPredictive(_0x39f53e){if(isNotNull(_0x39f53e)){if(!_[_0xbccb('0x34')](_0x39f53e[_0xbccb('0x25')])){_0x39f53e[_0xbccb('0x25')]=undefined;loggerPredictive[_0xbccb('0x74')](_0x39f53e[_0xbccb('0x38')],_0xbccb('0x85'));}if(!_[_0xbccb('0x34')](_0x39f53e['startPredictive'])){_0x39f53e[_0xbccb('0x24')]=undefined;loggerPredictive[_0xbccb('0x74')](_0x39f53e[_0xbccb('0x38')],_0xbccb('0x86'));}if(!_[_0xbccb('0x34')](_0x39f53e[_0xbccb('0x87')])){clearInterval(_0x39f53e['handlePredictive']);_0x39f53e['handlePredictive']=undefined;loggerPredictive['info'](_0x39f53e[_0xbccb('0x38')],'clearing\x20variable\x20handle\x20predictive');}}}function erlangb(_0x59647d,_0x4e0b03){if(_0x4e0b03===0x0){return 0x0;}var _0x287c2d=0x1;for(var _0x5d5455=0x1;_0x5d5455<=_0x4e0b03;_0x5d5455+=0x1){_0x287c2d=0x1+_0x287c2d*_0x5d5455/_0x59647d;}return 0x1/_0x287c2d;}function isVoiceQueueOutbound(_0x166f16){return _0x166f16===_0xbccb('0x43');}function isNotPreview(_0x466671){return _0x466671!=='preview';}function isCampaignIvr(_0x4230f8){return _0x4230f8===_0xbccb('0x88');}function getCallerId(_0x4498c5,_0x24d7d2,_0x3d1cbf){if(!_[_0xbccb('0x34')](_0x3d1cbf)&&_0xbccb('0x89')===typeof _0x3d1cbf&&!_['isEmpty'](_0x3d1cbf)){if(!_['isUndefined'](_0x24d7d2)&&_0xbccb('0x89')===typeof _0x24d7d2&&!_[_0xbccb('0x73')](_0x24d7d2)){return util[_0xbccb('0x71')](_0xbccb('0x8a'),_0x24d7d2,_0x3d1cbf);}return util[_0xbccb('0x71')](_0xbccb('0x8a'),_0x3d1cbf,_0x3d1cbf);}if(!_[_0xbccb('0x34')](_0x4498c5)&&_0xbccb('0x89')===typeof _0x4498c5&&!_[_0xbccb('0x73')](_0x4498c5)){return _0x4498c5;}return'\x22\x22\x20<>';}function loggerCatchQueueSummary(_0x5b56f0,_0xdb0b45){return function(_0xc55f13){freeVariablesPredictive(_0xdb0b45);emitVoiceQueueSummary(_0xdb0b45);emitCampaignSummary(_0xdb0b45);loggerSyncQueueSummary[_0xbccb('0x8b')](_0x5b56f0,util[_0xbccb('0x8c')](_0xc55f13,{'showHidden':![],'depth':null}));};}function loggerCatchPredictive(_0x59b9c8,_0x3ac59c){return function(_0x276023){loggerPredictive[_0xbccb('0x8b')](_0x3ac59c[_0xbccb('0x38')],_0x59b9c8);loggerPredictive['error'](_0x276023[_0xbccb('0x8d')]);freeVariablesPredictive(_0x3ac59c);};}function loggerCatch(_0x17e859){return function(_0x227d2e){logger['error'](_0x17e859,util['inspect'](_0x227d2e,{'showHidden':![],'depth':null}));};}function checkContactEmpty(_0x1c5e77){return _0x1c5e77&&!_[_0xbccb('0x34')](_0x1c5e77)&&_0x1c5e77['length']>0x0;}function decremetOriginate(_0x5944ca){if(!_['isUndefined'](_0x5944ca)&&_0x5944ca!==null){if(_0x5944ca[_0xbccb('0x8e')]('originated')){if(_0x5944ca[_0xbccb('0x67')]>0x0){_0x5944ca['originated']-=0x1;}else{logger[_0xbccb('0x8b')](_0xbccb('0x8f'));}}}else{logger[_0xbccb('0x8b')](_0xbccb('0x90'));}}function checkContactLowerLimitOriginate(_0xcdec4b,_0x5e8d4b,_0x3a92ff){if(_0x5e8d4b>_0x3a92ff){for(var _0x2af98c=0x0;_0x2af98c<_0x5e8d4b-_0x3a92ff;_0x2af98c+=0x1){decremetOriginate(_0xcdec4b);}}}function loggerGetContactDialer(_0x50403a,_0x57a95f,_0x3637cf){return function(_0x2b30c0){checkContactLowerLimitOriginate(_0x57a95f,_0x3637cf,0x0);logger[_0xbccb('0x8b')](_0x50403a,util[_0xbccb('0x8c')](_0x2b30c0,{'showHidden':![],'depth':null}));};}function sendMessageReschedule(_0xb90c9f){return function(_0x3ee52f){if(isNotNull(_0x3ee52f)&&isNotNull(_0x3ee52f[0x0])){if(_0x3ee52f[0x0][_0xbccb('0x91')]>0x0){_0xb90c9f[_0xbccb('0x35')]=_0xbccb('0x92');logger['info']('[getContactDialer2][ReScheduled]'+_0xb90c9f[_0xbccb('0x38')],_0x3ee52f[0x0][_0xbccb('0x91')],'contacts');}else{_0xb90c9f[_0xbccb('0x35')]=_0xbccb('0x93');logger['info']('[getContactDialer2][Empty]'+_0xb90c9f[_0xbccb('0x38')]);}}};}function notSendMessagesQueue(_0x18d427){if(_0x18d427[_0xbccb('0x94')]){freeVariablesPredictive(_0x18d427);if(_0x18d427[_0xbccb('0x67')]===0x0&&_0x18d427[_0xbccb('0x95')]===0x0&&_0x18d427[_0xbccb('0x96')]===0x0&&(_0x18d427[_0xbccb('0x47')]||0x0)===0x0){_0x18d427[_0xbccb('0x94')]=![];_0x18d427[_0xbccb('0x97')]=0x0;_0x18d427[_0xbccb('0x35')]=_0xbccb('0x37');loggerSyncQueueSummary[_0xbccb('0x8b')](_0xbccb('0x98'),_0x18d427['name'],_0xbccb('0x99'));}else{_0x18d427[_0xbccb('0x35')]=_0xbccb('0x9a');loggerSyncQueueSummary['error'](_0xbccb('0x98'),_0x18d427[_0xbccb('0x38')],_0xbccb('0x9b'));}emitVoiceQueueSummary(_0x18d427);}}function notSendMessagesCampaign(_0x1f78cf){if(_0x1f78cf[_0xbccb('0x94')]){if(_0x1f78cf['originated']===0x0){_0x1f78cf['sendMessageOneNotActive']=![];_0x1f78cf[_0xbccb('0x35')]='NOT_ACTIVE';loggerSyncQueueSummary['error']('[syncQueueSummary]\x20Campaign\x20Ivr:\x20',_0x1f78cf[_0xbccb('0x38')],'is\x20not\x20active');}else{_0x1f78cf[_0xbccb('0x35')]=_0xbccb('0x9a');loggerSyncQueueSummary['error'](_0xbccb('0x9c'),_0x1f78cf[_0xbccb('0x38')],_0xbccb('0x9b'));}emitCampaignSummary(_0x1f78cf);}}function createObjHistory(_0x1ce9ff,_0xeac04,_0x59e4c1,_0xe03e5,_0x5ddc9a){_0x1ce9ff[_0xbccb('0x35')]=_0x59e4c1;var _0x57eebc=new Action(_0x1ce9ff,_0xeac04);var _0x420b8b=new History(_0x57eebc);_0x420b8b['state']=_0xe03e5;_0x420b8b[_0xbccb('0x9d')]=_0x5ddc9a;_0x420b8b[_0xbccb('0x9e')]=_0x57eebc[_0xbccb('0x9f')];return _0x420b8b;}Dialer[_0xbccb('0x18')][_0xbccb('0xa0')]=function(){var _0x355b98=this;setInterval(function(){_0x355b98[_0xbccb('0xa1')](_0x355b98['uniqueId'],_0xbccb('0xa2'));_0x355b98[_0xbccb('0xa1')](_0x355b98[_0xbccb('0x22')],_0xbccb('0xa3'));},0x32c8);};Dialer[_0xbccb('0x18')][_0xbccb('0xa1')]=function(_0x349831,_0x4c2cb0){var _0x18ae96=this;for(var _0x3842d1 in _0x349831){if(_0x349831[_0xbccb('0x8e')](_0x3842d1)){this['sequence'][_0xbccb('0x19')](function(){if(!_[_0xbccb('0xa4')](_0x349831[_0x3842d1])){return ami[_0xbccb('0xa5')]({'action':'status','channel':_0x349831[_0x3842d1][_0xbccb('0xa6')]})['catch'](function(_0x3465c0){if(_0x3465c0['message']===_0xbccb('0xa7')){setTimeout(function(){if(_0x349831[_0x3842d1]&&_0x349831[_0x3842d1][_0xbccb('0x42')]!==_0xbccb('0x88')){_0x18ae96[_0xbccb('0xa8')](_0x18ae96[_0xbccb('0x1e')][_0x349831[_0x3842d1][_0xbccb('0xa9')]]);logger[_0xbccb('0x8b')](_0xbccb('0xaa'),_0x4c2cb0,_0x3842d1,_0x349831[_0x3842d1]['queue']);delete _0x349831[_0x3842d1];}if(_0x349831[_0x3842d1]&&_0x349831[_0x3842d1]['type']===_0xbccb('0x88')){_0x18ae96[_0xbccb('0xa8')](_0x18ae96[_0xbccb('0x1f')][_0x349831[_0x3842d1]['queue']]);logger[_0xbccb('0x8b')](_0xbccb('0xab'),_0x4c2cb0,_0x3842d1,_0x349831[_0x3842d1][_0xbccb('0xa9')]);delete _0x349831[_0x3842d1];}},0x2328);}});}});}}};Dialer[_0xbccb('0x18')][_0xbccb('0xac')]=function(_0x5c9055){return BPromise['resolve']()['then'](cmHopper[_0xbccb('0xac')](_0x5c9055))[_0xbccb('0xad')](loggerCatch(_0xbccb('0xae')));};Dialer[_0xbccb('0x18')][_0xbccb('0xaf')]=function(_0x288e2a){return BPromise[_0xbccb('0xb0')]()[_0xbccb('0xb1')](cmHopperBlack[_0xbccb('0xaf')](_0x288e2a))[_0xbccb('0xad')](loggerCatch(_0xbccb('0xb2')));};Dialer[_0xbccb('0x18')][_0xbccb('0xb3')]=function(_0x244ac1){return BPromise[_0xbccb('0xb0')]()['then'](cmHopperBlack[_0xbccb('0xb3')](_0x244ac1))[_0xbccb('0xad')](loggerCatch(_0xbccb('0xb4')));};Dialer[_0xbccb('0x18')]['averageHandleTime']=function(_0x6da2e8){return BPromise[_0xbccb('0xb0')]()[_0xbccb('0xb1')](cmHopperHistory['avgHandleTime'](_0x6da2e8))[_0xbccb('0xad')](loggerCatch(_0xbccb('0xb5')));};Dialer[_0xbccb('0x18')][_0xbccb('0xb6')]=function(_0x2a748e){return BPromise[_0xbccb('0xb0')]()[_0xbccb('0xb1')](cmHopper[_0xbccb('0xb6')](_0x2a748e))[_0xbccb('0xad')](loggerCatch(_0xbccb('0xb7')));};Dialer[_0xbccb('0x18')][_0xbccb('0xb8')]=function(_0x5f066b,_0x4288bd,_0x29e1c5,_0x3948db){return BPromise[_0xbccb('0xb0')]()[_0xbccb('0xb1')](cmHopper['getContactDialer'](_0x5f066b,_0x4288bd,_0x29e1c5,_0x3948db))['catch'](loggerCatch(_0xbccb('0xb9')));};Dialer['prototype'][_0xbccb('0xba')]=function(_0x23fb91,_0xe5f5c4,_0x46ffc9){return BPromise[_0xbccb('0xb0')]()[_0xbccb('0xb1')](cmHopper['getContactDialerIvr'](_0x23fb91,_0xe5f5c4,_0x46ffc9))[_0xbccb('0xad')](loggerCatch(_0xbccb('0xb9')));};Dialer[_0xbccb('0x18')]['getVoiceQueueRtPauses']=function(_0xcf336a){return BPromise[_0xbccb('0xb0')]()['then'](voiceQueueRt[_0xbccb('0xbb')](_0xcf336a))[_0xbccb('0xad')](loggerCatch(_0xbccb('0xbc')));};Dialer[_0xbccb('0x18')]['moveContactManagedDialer']=function(_0x34bcc1){return BPromise[_0xbccb('0xb0')]()[_0xbccb('0xb1')](cmHopper[_0xbccb('0xbd')](_0x34bcc1))[_0xbccb('0xad')](loggerCatch(_0xbccb('0xbe')));};Dialer['prototype']['createHistory']=function(_0x53dc7d){return BPromise[_0xbccb('0xb0')]()['then'](cmHopperHistory[_0xbccb('0xbf')](_0x53dc7d))['catch'](loggerCatch(_0xbccb('0xc0')));};Dialer['prototype'][_0xbccb('0xa8')]=function(_0x1a5365){if(!_['isUndefined'](_0x1a5365)&&_0x1a5365!==null){if(_0x1a5365[_0xbccb('0x8e')](_0xbccb('0x67'))){if(_0x1a5365[_0xbccb('0x67')]>0x0){_0x1a5365[_0xbccb('0x67')]-=0x1;}else{logger['error'](_0xbccb('0xc1'));}}}else{logger[_0xbccb('0x8b')](_0xbccb('0xc2'));}};Dialer[_0xbccb('0x18')][_0xbccb('0xc3')]=function(_0xe867dd,_0x5c967c){var _0x2fe06b=this;return function(_0x584c67){_0x2fe06b['updateOriginated'](_0x5c967c);logger[_0xbccb('0x8b')](_0xe867dd,util['inspect'](_0x584c67,{'showHidden':![],'depth':null}));};};Dialer['prototype'][_0xbccb('0xc4')]=function(_0x3f17b1,_0x4c4980,_0x76cb72){var _0x42af2e={'state':0x19,'statedesc':'notFound'};this[_0xbccb('0xa8')](_0x4c4980);this[_0xbccb('0xc5')](_['merge'](_0x42af2e,_[_0xbccb('0xc6')](_0x76cb72,['ContactId',_0xbccb('0xc7'),_0xbccb('0xc8'),'VoiceQueueId',_0xbccb('0xc9')])),_0xbccb('0xca'),_0xbccb('0xcb'));logger['error'](_0x3f17b1);};Dialer['prototype'][_0xbccb('0xcc')]=function(_0x11acaf){return _0x11acaf===_0xbccb('0xcd');};Dialer['prototype'][_0xbccb('0xce')]=function(_0x40346d){return!_[_0xbccb('0x34')](_0x40346d)&&_0x40346d&&!_[_0xbccb('0x34')](_0x40346d[_0xbccb('0x38')])&&!_[_0xbccb('0x34')](_0x40346d[_0xbccb('0x6c')])&&_0x40346d[_0xbccb('0x6c')]&&(this[_0xbccb('0x20')][util[_0xbccb('0x71')](_0xbccb('0xcf'),_0x40346d[_0xbccb('0x38')])][_0xbccb('0xd0')]==='reachable'||this[_0xbccb('0x20')][util[_0xbccb('0x71')](_0xbccb('0xcf'),_0x40346d[_0xbccb('0x38')])][_0xbccb('0xd0')]===_0xbccb('0xd1'));};Dialer[_0xbccb('0x18')][_0xbccb('0xc5')]=function(_0x42b564,_0x26d983,_0x47687c){this[_0xbccb('0xbf')](_0x42b564)[_0xbccb('0xad')](loggerCatch(_0x26d983));this['moveContactManagedDialer'](_0x42b564)[_0xbccb('0xad')](loggerCatch(_0x47687c));};Dialer['prototype'][_0xbccb('0xd2')]=function(_0x4bd834){var _0x51792c=this[_0xbccb('0x23')][_0x4bd834[_0xbccb('0xd3')]];var _0x288c5a;if(!_[_0xbccb('0xa4')](_0x4bd834)&&!_['isNil'](_0x4bd834['variable'])&&!_[_0xbccb('0xa4')](_0x4bd834[_0xbccb('0xd4')][_0xbccb('0xd5')])&&_0x4bd834[_0xbccb('0xd6')]===_0xbccb('0xd7')&&_0x51792c){if(_0x51792c[_0xbccb('0x42')]!==_0xbccb('0x88')&&this['voiceQueues'][_0x51792c['queue']][_0xbccb('0xd8')]&&_0x4bd834[_0xbccb('0xd9')]===_0xbccb('0xda')){delete this[_0xbccb('0x23')][_0x4bd834[_0xbccb('0xd3')]];this[_0xbccb('0xa8')](this[_0xbccb('0x1e')][_0x51792c[_0xbccb('0xa9')]]);this['voiceQueues'][_0x51792c['queue']]['outboundAnswerCallsDay']+=0x1;this[_0xbccb('0x1e')][_0x51792c[_0xbccb('0xa9')]][_0xbccb('0xdb')]+=0x1;_0x288c5a=new Hangup(_0x51792c,_0x4bd834);_0x288c5a[_0xbccb('0xdc')]=0x12;_0x288c5a[_0xbccb('0x9d')]=_0xbccb('0xdd');_0x288c5a[_0xbccb('0xde')]='AMD';this[_0xbccb('0xc5')](_0x288c5a,_0xbccb('0xdf'),'[syncHangupInAMD]');}if(_0x51792c['type']!==_0xbccb('0x88')&&this[_0xbccb('0x1e')][_0x51792c['queue']]['dialAMDActive']&&_0x4bd834[_0xbccb('0xd9')]===_0xbccb('0xe0')){delete this['uniqueId'][_0x4bd834[_0xbccb('0xd3')]];this[_0xbccb('0xa8')](this[_0xbccb('0x1e')][_0x51792c[_0xbccb('0xa9')]]);this[_0xbccb('0x1e')][_0x51792c[_0xbccb('0xa9')]][_0xbccb('0x54')]+=0x1;this[_0xbccb('0x1e')][_0x51792c[_0xbccb('0xa9')]][_0xbccb('0xdb')]+=0x1;_0x288c5a=new Hangup(_0x51792c,_0x4bd834);_0x288c5a['state']=0x13;_0x288c5a[_0xbccb('0x9d')]=_0xbccb('0xe1');_0x288c5a['membername']=_0xbccb('0xe2');_0x288c5a[_0xbccb('0xe3')]=!![];this['saveInDb'](_0x288c5a,_0xbccb('0xe4'),_0xbccb('0xe5'));}if(_0x51792c[_0xbccb('0x42')]===_0xbccb('0x88')&&this['campaigns'][_0x51792c[_0xbccb('0xa9')]][_0xbccb('0xd8')]&&_0x4bd834['value']===_0xbccb('0xda')){delete this[_0xbccb('0x23')][_0x4bd834[_0xbccb('0xd3')]];this[_0xbccb('0xa8')](this[_0xbccb('0x1f')][_0x51792c[_0xbccb('0xa9')]]);_0x288c5a=new Hangup(_0x51792c,_0x4bd834);_0x288c5a['state']=0x12;_0x288c5a[_0xbccb('0x9d')]=_0xbccb('0xdd');_0x288c5a[_0xbccb('0xde')]=_0xbccb('0xe2');this['saveInDb'](_0x288c5a,_0xbccb('0xe6'),_0xbccb('0xe7'));}if(_0x51792c[_0xbccb('0x42')]==='ivr'&&this['campaigns'][_0x51792c[_0xbccb('0xa9')]]['dialAMDActive']&&_0x4bd834[_0xbccb('0xd9')]===_0xbccb('0xe0')){delete this['uniqueId'][_0x4bd834[_0xbccb('0xd3')]];this[_0xbccb('0xa8')](this[_0xbccb('0x1f')][_0x51792c[_0xbccb('0xa9')]]);_0x288c5a=new Hangup(_0x51792c,_0x4bd834);_0x288c5a[_0xbccb('0xdc')]=0x13;_0x288c5a[_0xbccb('0x9d')]=_0xbccb('0xe1');_0x288c5a['membername']=_0xbccb('0xe2');_0x288c5a[_0xbccb('0xe3')]=!![];this[_0xbccb('0xc5')](_0x288c5a,_0xbccb('0xe8'),'[syncMachineIvr]');}}};Dialer[_0xbccb('0x18')][_0xbccb('0x2f')]=function(_0x2404f4){var _0x8fabd3=this[_0xbccb('0x23')][_0x2404f4[_0xbccb('0xd3')]];var _0x19d20d=this;var _0x36908b;if(_0x8fabd3&&_0x8fabd3[_0xbccb('0x42')]==='ivr'){delete this[_0xbccb('0x23')][_0x2404f4['uniqueid']];this['updateOriginated'](this[_0xbccb('0x1f')][_0x8fabd3[_0xbccb('0xa9')]]);this['campaigns'][_0x8fabd3[_0xbccb('0xa9')]][_0xbccb('0xe9')]+=0x1;_0x36908b=new Hangup(_0x8fabd3,_0x2404f4);this['createHistory'](_0x36908b)[_0xbccb('0xad')](loggerCatch(_0xbccb('0xea')));this['moveContactManagedDialer'](_0x36908b)[_0xbccb('0xad')](loggerCatch(_0xbccb('0xeb')));}if(_0x8fabd3&&_0x8fabd3[_0xbccb('0x42')]!=='ivr'&&isNotNull(this[_0xbccb('0x1e')][_0x8fabd3[_0xbccb('0xa9')]][_0xbccb('0xec')])){delete this[_0xbccb('0x23')][_0x2404f4[_0xbccb('0xd3')]];this[_0xbccb('0xa8')](this[_0xbccb('0x1e')][_0x8fabd3[_0xbccb('0xa9')]]);this[_0xbccb('0x1e')][_0x8fabd3[_0xbccb('0xa9')]][_0xbccb('0x54')]+=0x1;this[_0xbccb('0x1e')][_0x8fabd3[_0xbccb('0xa9')]][_0xbccb('0xdb')]+=0x1;_0x36908b=new Hangup(_0x8fabd3,_0x2404f4);_0x36908b[_0xbccb('0xdc')]=0x10;_0x36908b[_0xbccb('0x9d')]=_0xbccb('0xed');_0x36908b[_0xbccb('0xde')]=_0xbccb('0xee');this[_0xbccb('0xbf')](_0x36908b)[_0xbccb('0xad')](loggerCatch(_0xbccb('0xea')));this['moveContactManagedDialer'](_0x36908b)[_0xbccb('0xad')](loggerCatch(_0xbccb('0xeb')));}if(_0x8fabd3&&_0x8fabd3['type']!==_0xbccb('0x88')&&!isNotNull(this['voiceQueues'][_0x8fabd3[_0xbccb('0xa9')]]['dialQueueProject'])){delete this[_0xbccb('0x23')][_0x2404f4[_0xbccb('0xd3')]];this[_0xbccb('0xa8')](this[_0xbccb('0x1e')][_0x8fabd3[_0xbccb('0xa9')]]);this[_0xbccb('0x1e')][_0x8fabd3[_0xbccb('0xa9')]]['outboundUnknownCallsDay']+=0x1;_0x36908b=new Hangup(_0x8fabd3,_0x2404f4);_0x36908b['state']=0xc;_0x36908b['statedesc']=_0x2404f4['cause-txt'];_0x36908b[_0xbccb('0xde')]='Unknow';this[_0xbccb('0xbf')](_0x36908b)['catch'](loggerCatch(_0xbccb('0xea')));this[_0xbccb('0xbd')](_0x36908b)['catch'](loggerCatch(_0xbccb('0xeb')));}};Dialer[_0xbccb('0x18')]['syncAgentComplete']=function(_0x4928e6){var _0x473d37=this[_0xbccb('0x23')][_0x4928e6[_0xbccb('0xd3')]];var _0x43fccb=this;if(this[_0xbccb('0x1e')][_0x4928e6[_0xbccb('0xa9')]]){if(_0x473d37&&_0x473d37[_0xbccb('0x42')]!==_0xbccb('0x88')){delete this[_0xbccb('0x23')][_0x4928e6[_0xbccb('0xd3')]];this[_0xbccb('0x1e')][_0x4928e6['queue']][_0xbccb('0x54')]+=0x1;var _0x421e22=new AgentComplete(_0x473d37,_0x4928e6);if(_0x4928e6['reason']===_0xbccb('0xef')){_0x421e22[_0xbccb('0xf0')]=this[_0xbccb('0x1e')][_0x4928e6[_0xbccb('0xa9')]]['dialQueueProject2']&&this['voiceQueues'][_0x4928e6[_0xbccb('0xa9')]]['dialAgiAfterHangupAgent']?moment()['format'](_0xbccb('0xf1')):undefined;}this['createHistory'](_0x421e22)[_0xbccb('0xad')](loggerCatch(_0xbccb('0xf2')));this[_0xbccb('0xbd')](_0x421e22)[_0xbccb('0xad')](loggerCatch(_0xbccb('0xf3')));}}};Dialer[_0xbccb('0x18')][_0xbccb('0x29')]=function(_0x534463){if(this[_0xbccb('0x1e')][_0x534463[_0xbccb('0xa9')]]){if(this[_0xbccb('0x23')][_0x534463['uniqueid']]&&this[_0xbccb('0x23')][_0x534463[_0xbccb('0xd3')]][_0xbccb('0x42')]!=='ivr'){this['updateOriginated'](this[_0xbccb('0x1e')][_0x534463[_0xbccb('0xa9')]]);this['uniqueId'][_0x534463[_0xbccb('0xd3')]][_0xbccb('0xf4')]=moment()[_0xbccb('0x71')](_0xbccb('0xf1'));}}};Dialer['prototype']['queueCallerAbandonCreateState']=function(_0x2b7a18){this[_0xbccb('0xbf')](_0x2b7a18)[_0xbccb('0xad')](loggerCatch(_0xbccb('0xf2')));this['moveContactManagedDialer'](_0x2b7a18)[_0xbccb('0xad')](loggerCatch(_0xbccb('0xf5')));};Dialer[_0xbccb('0x18')]['syncQueueCallerAbandon']=function(_0x290a0f){var _0x3c3f5c=this[_0xbccb('0x23')][_0x290a0f[_0xbccb('0xd3')]];var _0x317107=this;if(this[_0xbccb('0x1e')][_0x290a0f['queue']]){if(_0x3c3f5c&&_0x3c3f5c[_0xbccb('0x42')]!==_0xbccb('0x88')){delete this[_0xbccb('0x23')][_0x290a0f['uniqueid']];this[_0xbccb('0xa8')](this['voiceQueues'][_0x290a0f['queue']]);_0x3c3f5c[_0xbccb('0xf6')]=moment()[_0xbccb('0x71')](_0xbccb('0xf1'));var _0x12c9d3=new QueueCallerAbandon(_0x3c3f5c,_0x290a0f);if(getSeconds(_0x3c3f5c[_0xbccb('0xf6')],_0x3c3f5c['responsetime'])>=_0x3c3f5c[_0xbccb('0xf7')]){this[_0xbccb('0x1e')][_0x290a0f[_0xbccb('0xa9')]]['predictiveIntervalDroppedCallsTimeout']+=0x1;this[_0xbccb('0x1e')][_0x290a0f['queue']]['outboundDropCallsDayTimeout']+=0x1;this[_0xbccb('0x1e')][_0x290a0f['queue']][_0xbccb('0x63')]+=0x1;_0x12c9d3[_0xbccb('0xdc')]=0xa;_0x12c9d3[_0xbccb('0x9d')]='Drop';_0x12c9d3[_0xbccb('0xf8')]=_0xbccb('0xf9');_0x12c9d3['agiafterat']=this[_0xbccb('0x1e')][_0x290a0f[_0xbccb('0xa9')]]['dialQueueProject2']?moment()[_0xbccb('0x71')](_0xbccb('0xf1')):undefined;this[_0xbccb('0xfa')](_0x12c9d3);}else{this[_0xbccb('0x1e')][_0x290a0f['queue']][_0xbccb('0x60')]+=0x1;this['voiceQueues'][_0x290a0f[_0xbccb('0xa9')]][_0xbccb('0x59')]+=0x1;_0x12c9d3['state']=0xb;_0x12c9d3[_0xbccb('0x9d')]=_0xbccb('0xfb');_0x12c9d3['dropreason']='CALLEREXIT';this[_0xbccb('0xfa')](_0x12c9d3);}}}};Dialer['prototype'][_0xbccb('0x30')]=function(_0x4521dc){if(this[_0xbccb('0x22')][_0x4521dc[_0xbccb('0xd3')]]){this['actions'][_0x4521dc['uniqueid']][_0xbccb('0xa6')]=_0x4521dc['channel'];}if(this[_0xbccb('0x23')][_0x4521dc[_0xbccb('0xd3')]]){this['uniqueId'][_0x4521dc['uniqueid']]['channel']=_0x4521dc[_0xbccb('0xa6')];}};Dialer['prototype'][_0xbccb('0xfc')]=function(_0x54f42a){if(strategy[this['voiceQueues'][this[_0xbccb('0x22')][_0x54f42a[_0xbccb('0xfd')]][_0xbccb('0xa9')]][_0xbccb('0x44')]]===_0xbccb('0xfe')){if(this[_0xbccb('0x22')][_0x54f42a[_0xbccb('0xfd')]]&&_['isNil'](this['actions'][_0x54f42a[_0xbccb('0xfd')]][_0xbccb('0xff')])&&_0x54f42a['status']==='1'&&_0x54f42a['paused']==='0'){if(this['agents'][_0x54f42a[_0xbccb('0x100')]]){if(!this[_0xbccb('0x101')][_0x54f42a[_0xbccb('0x100')]][_0xbccb('0xff')]){this[_0xbccb('0x101')][_0x54f42a[_0xbccb('0x100')]][_0xbccb('0xff')]=!![];this['actions'][_0x54f42a[_0xbccb('0xfd')]][_0xbccb('0xff')]=!![];this['actions'][_0x54f42a[_0xbccb('0xfd')]][_0xbccb('0x100')]=_0x54f42a[_0xbccb('0x100')];}}}}else if((strategy[this['voiceQueues'][this['actions'][_0x54f42a[_0xbccb('0xfd')]][_0xbccb('0xa9')]][_0xbccb('0x44')]]||_0xbccb('0x102'))===_0xbccb('0x102')){if(this[_0xbccb('0x22')][_0x54f42a['actionid']]){if(this[_0xbccb('0x101')][_0x54f42a['stateinterface']]){this[_0xbccb('0x22')][_0x54f42a['actionid']][_0xbccb('0x100')]=_0x54f42a[_0xbccb('0x100')];if(_[_0xbccb('0xa4')](this[_0xbccb('0x103')][this[_0xbccb('0x22')][_0x54f42a[_0xbccb('0xfd')]][_0xbccb('0xa9')]])){this[_0xbccb('0x103')][this[_0xbccb('0x22')][_0x54f42a[_0xbccb('0xfd')]][_0xbccb('0xa9')]]=[];}this[_0xbccb('0x103')][this[_0xbccb('0x22')][_0x54f42a[_0xbccb('0xfd')]]['queue']][_0xbccb('0x104')](_[_0xbccb('0x84')](_['pick'](this[_0xbccb('0x22')][_0x54f42a[_0xbccb('0xfd')]],[_0xbccb('0x105'),_0xbccb('0x100')]),{'status':_0x54f42a[_0xbccb('0xd0')],'paused':_0x54f42a[_0xbccb('0x106')]}));}}}};function unlockQueueStatus(_0x22fab9,_0x4cd72c){setTimeout(function(){if(_[_0xbccb('0x34')](_0x22fab9[_0xbccb('0x107')])){loggerBooked[_0xbccb('0x8b')](_0xbccb('0x108'),_0x4cd72c);}_0x22fab9[_0xbccb('0x107')]=!![];loggerBooked[_0xbccb('0x74')](_0xbccb('0x109'),_0x4cd72c,JSON['stringify'](_[_0xbccb('0xc6')](_0x22fab9,[_0xbccb('0x38'),_0xbccb('0x107')])));},0x1f3);}Dialer[_0xbccb('0x18')]['syncQueueStatusComplete']=function(_0x254a16){var _0x18f15d=this;var _0x405188=_0x18f15d[_0xbccb('0x1e')][_0x18f15d[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]]['queue']];if(strategy[this[_0xbccb('0x1e')][this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]][_0xbccb('0x44')]]===_0xbccb('0xfe')){if(this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]]&&this['actions'][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0x100')]){this[_0xbccb('0x1d')]['run'](this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0x105')],this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0x100')])[_0xbccb('0xad')](function(_0x33b4a7){logger[_0xbccb('0x8b')](_0xbccb('0x10a'),util[_0xbccb('0x8c')](_0x33b4a7,{'showHidden':![],'depth':null}));})['finally'](function(){_0x18f15d[_0xbccb('0xa8')](_0x18f15d[_0xbccb('0x1e')][_0x18f15d['actions'][_0x254a16['actionid']][_0xbccb('0xa9')]]);_0x18f15d[_0xbccb('0x101')][_0x18f15d[_0xbccb('0x22')][_0x254a16['actionid']][_0xbccb('0x100')]][_0xbccb('0xff')]=![];delete _0x18f15d[_0xbccb('0x22')][_0x254a16['actionid']];unlockQueueStatus(_0x405188);});}else{this['updateOriginated'](this[_0xbccb('0x1e')][this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]]['queue']]);this['rescheduleContact']({'active':![],'ContactId':this['actions'][_0x254a16[_0xbccb('0xfd')]]['ContactId'],'ListId':this['actions'][_0x254a16['actionid']]['ListId'],'VoiceQueueId':this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0x10b')]||undefined,'CampaignId':this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xc9')]||undefined})[_0xbccb('0xad')](loggerCatch(_0xbccb('0x10c')));delete this[_0xbccb('0x22')][_0x254a16['actionid']];unlockQueueStatus(_0x405188);}}else if((strategy[this[_0xbccb('0x1e')][this['actions'][_0x254a16[_0xbccb('0xfd')]]['queue']][_0xbccb('0x44')]]||'rrmemory')===_0xbccb('0x102')){var _0x4c18f3;if(this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]]&&!_[_0xbccb('0x73')](this[_0xbccb('0x103')][this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]])){if(this['queueBookedRR'][_0x18f15d[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]]){this[_0xbccb('0x27')][_0x18f15d[_0xbccb('0x22')][_0x254a16['actionid']]['queue']]=this[_0xbccb('0x27')][this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]]?this[_0xbccb('0x27')][this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]]:this[_0xbccb('0x103')][this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]]?this[_0xbccb('0x103')][this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]]['queue']][_0xbccb('0x10d')]||0x0:0x0;}this[_0xbccb('0x103')][this[_0xbccb('0x22')][_0x254a16['actionid']][_0xbccb('0xa9')]][_0xbccb('0x10d')]=this[_0xbccb('0x27')][this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]];for(var _0x27ec24=0x0;_0x27ec24<this[_0xbccb('0x103')][this[_0xbccb('0x22')][_0x254a16['actionid']][_0xbccb('0xa9')]][_0xbccb('0x10e')];_0x27ec24+=0x1){_0x4c18f3=rr(this[_0xbccb('0x103')][this[_0xbccb('0x22')][_0x254a16['actionid']][_0xbccb('0xa9')]]);this[_0xbccb('0x27')][_0x18f15d[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]]=this['queueBooked'][this['actions'][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]][_0xbccb('0x10d')];if(_0x4c18f3[_0xbccb('0xd0')]==='1'&&_0x4c18f3[_0xbccb('0x106')]==='0'){break;}}if(!_[_0xbccb('0xa4')](_0x4c18f3)){this[_0xbccb('0x101')][_0x4c18f3['stateinterface']][_0xbccb('0x10f')]=_[_0xbccb('0x34')](this[_0xbccb('0x101')][_0x4c18f3[_0xbccb('0x100')]]['unlockRR'])?!![]:this[_0xbccb('0x101')][_0x4c18f3[_0xbccb('0x100')]][_0xbccb('0x10f')];}loggerBooked[_0xbccb('0x74')](_0xbccb('0x110'),_0x254a16[_0xbccb('0xfd')],_0xbccb('0x111'),JSON[_0xbccb('0x3e')](_[_0xbccb('0xc6')](this[_0xbccb('0x101')][_0x4c18f3[_0xbccb('0x100')]],[_0xbccb('0x38'),_0xbccb('0x10f')])),'contactAgent-idHopper:\x20',JSON[_0xbccb('0x3e')](_0x4c18f3[_0xbccb('0x105')]));if(!_[_0xbccb('0xa4')](_0x4c18f3)&&_0x4c18f3[_0xbccb('0xd0')]==='1'&&_0x4c18f3[_0xbccb('0x106')]==='0'&&this[_0xbccb('0x101')][_0x4c18f3['stateinterface']][_0xbccb('0x10f')]){this[_0xbccb('0x101')][_0x4c18f3['stateinterface']]['unlockRR']=![];this['queueBooked'][_0x18f15d[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]]['queue']]=[];this[_0xbccb('0x1d')]['run'](_0x4c18f3[_0xbccb('0x105')],_0x4c18f3['stateinterface'])[_0xbccb('0xad')](function(_0x56e210){logger[_0xbccb('0x8b')]('[Catch][Preview][syncQueueStatusComplete]',util[_0xbccb('0x8c')](_0x56e210,{'showHidden':![],'depth':null}));})[_0xbccb('0x1b')](function(){_0x18f15d[_0xbccb('0xa8')](_0x18f15d['voiceQueues'][_0x18f15d[_0xbccb('0x22')][_0x254a16['actionid']][_0xbccb('0xa9')]]);setTimeout(function(){_0x18f15d['agents'][_0x4c18f3[_0xbccb('0x100')]]['unlockRR']=!![];loggerBooked[_0xbccb('0x74')](_0xbccb('0x112'),_0x254a16['actionid'],'Agent:\x20',JSON[_0xbccb('0x3e')](_['pick'](_0x18f15d[_0xbccb('0x101')][_0x4c18f3['stateinterface']],[_0xbccb('0x38'),_0xbccb('0x10f')])),_0xbccb('0x113'),JSON['stringify'](_0x4c18f3[_0xbccb('0x105')]));},0xc7);delete _0x18f15d['actions'][_0x254a16[_0xbccb('0xfd')]];unlockQueueStatus(_0x405188,_0x254a16[_0xbccb('0xfd')]);});}else{loggerBooked[_0xbccb('0x74')](_0xbccb('0x114'));this[_0xbccb('0xa8')](this[_0xbccb('0x1e')][this['actions'][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]]);this['rescheduleContact']({'active':![],'ContactId':this[_0xbccb('0x22')][_0x254a16['actionid']]['ContactId'],'ListId':this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xc7')],'VoiceQueueId':this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0x10b')]||undefined,'CampaignId':this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xc9')]||undefined})[_0xbccb('0xad')](loggerCatch(_0xbccb('0x10c')));delete this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]];unlockQueueStatus(_0x405188);}}else{loggerBooked['info'](_0xbccb('0x115'));this[_0xbccb('0xa8')](this[_0xbccb('0x1e')][this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]]);this[_0xbccb('0xb6')]({'active':![],'ContactId':this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]]['ContactId'],'ListId':this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xc7')],'VoiceQueueId':this[_0xbccb('0x22')][_0x254a16['actionid']][_0xbccb('0x10b')]||undefined,'CampaignId':this['actions'][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xc9')]||undefined})[_0xbccb('0xad')](loggerCatch(_0xbccb('0x116')));delete this['actions'][_0x254a16[_0xbccb('0xfd')]];unlockQueueStatus(_0x405188);}}else{loggerBooked[_0xbccb('0x74')](_0xbccb('0x117'));this[_0xbccb('0xa8')](this[_0xbccb('0x1e')][this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xa9')]]);this[_0xbccb('0xb6')]({'active':![],'ContactId':this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0x118')],'ListId':this[_0xbccb('0x22')][_0x254a16['actionid']]['ListId'],'VoiceQueueId':this[_0xbccb('0x22')][_0x254a16['actionid']][_0xbccb('0x10b')]||undefined,'CampaignId':this[_0xbccb('0x22')][_0x254a16[_0xbccb('0xfd')]][_0xbccb('0xc9')]||undefined})[_0xbccb('0xad')](loggerCatch('[unlock3][syncQueueStatusComplete]'));delete this['actions'][_0x254a16[_0xbccb('0xfd')]];unlockQueueStatus(_0x405188);}};Dialer['prototype'][_0xbccb('0x33')]=function(){var _0xd9d812=this;setInterval(function(){_0xd9d812[_0xbccb('0x119')]();},0x3e8);};Dialer[_0xbccb('0x18')][_0xbccb('0x11a')]=function(_0xc962ae){var _0x42164a=this;return function(){if(!_0x42164a[_0xbccb('0xce')](_0xc962ae[_0xbccb('0x6b')])){if(!_0x42164a['isTrunkReachable'](_0xc962ae[_0xbccb('0x11b')])){_0xc962ae[_0xbccb('0x35')]='TRUNK_IS_NOT_REACHABLE';throw _0xc962ae['name']+_0xbccb('0x11c');}}};};Dialer['prototype'][_0xbccb('0x11d')]=function(_0x41a05e,_0x5253b5,_0x5a52a1,_0x4598d1){var _0x409f99=this;return function(){var _0x47ed64=!![];return _0x409f99[_0xbccb('0x11e')](_0x41a05e,_0x5253b5,_0x5a52a1,_0x4598d1,_0x47ed64);};};Dialer['prototype'][_0xbccb('0x11f')]=function(_0x33bab4,_0x37f466,_0x5b4db3,_0x454a3e){var _0x46cb9e=this;return function(){var _0x1f2e81=![];return _0x46cb9e[_0xbccb('0x11e')](_0x33bab4[_0xbccb('0x3c')],_0x37f466,_0x5b4db3,_0x454a3e,_0x1f2e81);};};Dialer[_0xbccb('0x18')][_0xbccb('0x11e')]=function(_0x444282,_0x18b8dc,_0x5effd9,_0x497111,_0x2bd636){var _0x47b0d8=[];return new BPromise(function(_0x390b92,_0x59d04d){if(!isNotNull(_0x444282)){_0x497111['message']=_0xbccb('0x3a');return _0x59d04d(msgResponse(_0xbccb('0x11e'),_0xbccb('0x120'),_0x5effd9+'\x20Intervals\x20is\x20null\x20'));}if(_[_0xbccb('0x73')](_0x444282)){_0x497111[_0xbccb('0x35')]=_0xbccb('0x121');return _0x59d04d(msgResponse('ifTime','Failure',_0x5effd9+'\x20Intervals\x20is\x20empty\x20'));}if(_0x18b8dc&&_['isUndefined'](config['timezones'][_0x18b8dc])){_0x497111[_0xbccb('0x35')]='TIMEZONE_UNKNOW';return _0x59d04d(msgResponse(_0xbccb('0x11e'),'Failure',_0x5effd9+_0xbccb('0x122')+_0x18b8dc));}if(_[_0xbccb('0x123')](_0x444282)){for(var _0x2a45ce=0x0;_0x2a45ce<_0x444282[_0xbccb('0x10e')];_0x2a45ce+=0x1){_0x47b0d8[_0xbccb('0x104')](ami['Action']({'action':_0xbccb('0x124'),'command':util['format'](_0xbccb('0x125'),_0x444282[_0x2a45ce][_0xbccb('0x126')],!_[_0xbccb('0x34')](config[_0xbccb('0x127')][_0x18b8dc])?_0x18b8dc:'')})[_0xbccb('0xb1')](function(_0x320502){return _0x320502[_0xbccb('0x128')][_0xbccb('0x129')](_0xbccb('0x12a'))>=0x0?!![]:![];})[_0xbccb('0xad')](myreject(_0x59d04d)));}}else{_0x47b0d8['push'](ami[_0xbccb('0xa5')]({'action':'command','command':util[_0xbccb('0x71')](_0xbccb('0x125'),_0x444282,!_['isUndefined'](config[_0xbccb('0x127')][_0x18b8dc])?_0x18b8dc:'')})[_0xbccb('0xb1')](function(_0x55a15a){return _0x55a15a[_0xbccb('0x128')]['indexOf'](_0xbccb('0x12a'))>=0x0?!![]:![];})['catch'](myreject(_0x59d04d)));}BPromise[_0xbccb('0x12b')](_0x47b0d8)[_0xbccb('0xb1')](function(_0x3830a6){var _0x100eab=_['some'](_0x3830a6);if(_0x100eab){return _0x390b92(_0x100eab);}else{_0x497111[_0xbccb('0x35')]=_0x2bd636?_0xbccb('0x12c'):_0xbccb('0x12d');return _0x59d04d(msgResponse('[ifTime][promiseAll]','Failure',_0xbccb('0x12e')+_0x2bd636+'\x20'+_0x5effd9+_0xbccb('0x12f')+util[_0xbccb('0x8c')](_0x444282,{'showHidden':![],'depth':null})+_0xbccb('0x130')+_0x18b8dc));}})[_0xbccb('0xad')](function(_0xb8c635){return _0x59d04d(msgResponse(_0xbccb('0x11e'),_0xbccb('0x120'),JSON[_0xbccb('0x3e')](_0xb8c635)));});});};Dialer['prototype'][_0xbccb('0x131')]=function(_0x56ea62){var _0x235d67=this;return function(){switch(_0x56ea62[_0xbccb('0x4f')]){case'progressive':freeVariablesPredictive(_0x56ea62);_0x235d67[_0xbccb('0x132')](_0x56ea62,0x1);break;case'power':freeVariablesPredictive(_0x56ea62);_0x235d67['handlePower'](_0x56ea62,_0x56ea62[_0xbccb('0x133')]);break;case _0xbccb('0x7'):_0x235d67[_0xbccb('0x7')](_0x56ea62);break;case _0xbccb('0x134'):freeVariablesPredictive(_0x56ea62);_0x235d67['handlePower'](_0x56ea62,0x1);break;default:freeVariablesPredictive(_0x56ea62);logger['error']('Queue',_0x56ea62['name'],'method\x20not\x20recognized');}};};Dialer['prototype']['launchHandleIvr']=function(_0x4455c9){var _0x344a96=this;return function(){_0x344a96[_0xbccb('0x135')](_0x4455c9);};};Dialer[_0xbccb('0x18')][_0xbccb('0x9')]=function(_0x940ea9){var _0x26192a=this;if(isNotPreview(_0x940ea9[_0xbccb('0x4f')])){if(isVoiceQueueOutbound(_0x940ea9[_0xbccb('0x42')])&&isActive(_0x940ea9['dialActive'])){_0x940ea9[_0xbccb('0x94')]=!![];BPromise[_0xbccb('0xb0')]()[_0xbccb('0xb1')](checkIsLoggedIn(_0x940ea9,_0x940ea9[_0xbccb('0x46')]))['then'](checkIsActive(_0x940ea9,_0x940ea9[_0xbccb('0x4e')]))[_0xbccb('0xb1')](checkInterval(_0x940ea9))[_0xbccb('0xb1')](_0x26192a[_0xbccb('0x11a')](_0x940ea9))[_0xbccb('0xb1')](_0x26192a[_0xbccb('0x11d')](_0x940ea9[_0xbccb('0x136')],_0x940ea9[_0xbccb('0x137')],_0x940ea9[_0xbccb('0x38')],_0x940ea9))[_0xbccb('0xb1')](_0x26192a[_0xbccb('0x11f')](_0x940ea9[_0xbccb('0x39')],_0x940ea9[_0xbccb('0x137')],_0x940ea9[_0xbccb('0x38')],_0x940ea9))[_0xbccb('0xb1')](_0x26192a[_0xbccb('0x131')](_0x940ea9))[_0xbccb('0xad')](loggerCatchQueueSummary(_0xbccb('0x138'),_0x940ea9));}else{notSendMessagesQueue(_0x940ea9);}}else{freeVariablesPredictive(_0x940ea9);}};Dialer[_0xbccb('0x18')][_0xbccb('0x119')]=function(){var _0xcb3433=this;var _0x45e12a;for(var _0x41b6f5 in this[_0xbccb('0x1f')]){if(this['campaigns']['hasOwnProperty'](_0x41b6f5)){_0x45e12a=this[_0xbccb('0x1f')][_0x41b6f5];if(isCampaignIvr(_0x45e12a[_0xbccb('0x42')])&&isActive(_0x45e12a[_0xbccb('0x6c')])){_0x45e12a[_0xbccb('0x94')]=!![];BPromise[_0xbccb('0xb0')]()[_0xbccb('0xb1')](checkIsActive(_0x45e12a,_0x45e12a['active']))[_0xbccb('0xb1')](checkInterval(_0x45e12a))['then'](_0xcb3433[_0xbccb('0x11a')](_0x45e12a))['then'](_0xcb3433[_0xbccb('0x11d')](_0x45e12a['dialGlobalInterval'],_0x45e12a[_0xbccb('0x137')],_0x45e12a[_0xbccb('0x38')],_0x45e12a))['then'](_0xcb3433['checkIfTimeIntervals'](_0x45e12a[_0xbccb('0x39')],_0x45e12a['dialTimezone'],_0x45e12a[_0xbccb('0x38')],_0x45e12a))[_0xbccb('0xb1')](_0xcb3433[_0xbccb('0x139')](_0x45e12a))['catch'](loggerCatchQueueSummary(_0xbccb('0x13a'),_0x45e12a));}else{notSendMessagesCampaign(_0x45e12a);}}}};function getCallerIdRandom(_0x2c0f1f,_0x398e92){var _0xfe69cf,_0x2d8649,_0x44f650;if(_0x398e92<=0x0){_0x398e92=0x1;}_0xfe69cf=new RegExp(_0xbccb('0x13b')+_0x398e92+'}$');_0x2d8649=Math[_0xbccb('0x13c')](0xa,_0x398e92-0x1);_0x44f650=Math[_0xbccb('0x13c')](0xa,_0x398e92)-0x1;return util[_0xbccb('0x71')]('%s',_[_0xbccb('0x13d')](_0x2c0f1f,_0xfe69cf,_[_0xbccb('0x13e')](_0x2d8649,_0x44f650)));}function extractCalleridName(_0x122b4b){var _0x4b7101=_0x122b4b[_0xbccb('0x13f')](/"(.*?)"/);return _0x4b7101?_0x4b7101[0x1]:_0x122b4b;}function extractCalleridNumber(_0x225fca){var _0x4f08d1=_0x225fca[_0xbccb('0x13f')](/<(.*?)>/);return _0x4f08d1?_0x4f08d1[0x1]:_0x225fca;}Dialer[_0xbccb('0x18')][_0xbccb('0x140')]=function(_0x4544e3,_0x4c01ec){var _0x42a9a6=this;var _0x2bb4ec=uuid['v4']();this[_0xbccb('0x22')][_0x2bb4ec]=new Action(_0x4544e3,_0x4c01ec,_0x2bb4ec);return new BPromise(function(_0x1f9571,_0x119b34){if(_[_0xbccb('0x34')](_0x4544e3)&&'object'!==typeof _0x4544e3){return _0x119b34(msgResponse(_0xbccb('0x141'),_0xbccb('0x120'),_0xbccb('0x142')));}if(_['isUndefined'](_0x4c01ec[_0xbccb('0x143')]['phone'])||_0x4c01ec[_0xbccb('0x143')][_0xbccb('0x144')]===null){return _0x119b34(msgResponse(_0xbccb('0x141'),'Failure',_0xbccb('0x145')));}var _0x5ea0fb={'XMD-CALLERID':_0x42a9a6[_0xbccb('0x22')][_0x2bb4ec][_0xbccb('0x146')](),'XMD-AGI':_0x4544e3[_0xbccb('0xec')]?util[_0xbccb('0x71')](_0xbccb('0x147'),ipAgi,_0x4544e3['dialQueueProject']):_0xbccb('0x148'),'XMD-AGIAFTER':_0x4544e3[_0xbccb('0x149')]?util[_0xbccb('0x71')]('\x22agi://%s/square,%s\x22',ipAgi,_0x4544e3[_0xbccb('0x149')]):_0xbccb('0x148'),'XMD-QUEUE':_0x4544e3[_0xbccb('0x42')]==='outbound'?util[_0xbccb('0x71')](_0xbccb('0x14a'),_0x4544e3['name'],_0x4544e3[_0xbccb('0x14b')]||'',_0x4544e3[_0xbccb('0x14c')]?'c':'',_0x4544e3[_0xbccb('0xf7')]||0x3):'NONE','XMD-CONTACTID':_0x4c01ec[_0xbccb('0x118')],'XMD-CDRTYPE':_0xbccb('0x5'),'CALLERID(all)':_0x42a9a6[_0xbccb('0x22')][_0x2bb4ec][_0xbccb('0x146')](),'XMD-AMD':_0x4544e3[_0xbccb('0xd8')]?_0xbccb('0x14d'):'NONE','XMD-DESTINATION':'xcally-motion-dialer'};if(_0x4544e3['dialAMDActive']){_0x5ea0fb['XMD-AMDINITIALSILENCE']=_0x4544e3[_0xbccb('0x14e')]||0x9c4;_0x5ea0fb[_0xbccb('0x14f')]=_0x4544e3[_0xbccb('0x150')]||0x5dc;_0x5ea0fb[_0xbccb('0x151')]=_0x4544e3['dialAMDAfterGreetingSilence']||0x320;_0x5ea0fb[_0xbccb('0x152')]=_0x4544e3[_0xbccb('0x153')]||0x1388;_0x5ea0fb[_0xbccb('0x154')]=_0x4544e3['dialAMDMinWordLength']||0x64;_0x5ea0fb[_0xbccb('0x155')]=_0x4544e3[_0xbccb('0x156')]||0x32;_0x5ea0fb[_0xbccb('0x157')]=_0x4544e3[_0xbccb('0x158')]||0x3;_0x5ea0fb[_0xbccb('0x159')]=_0x4544e3['dialAMDSilenceThreshold']||0x100;_0x5ea0fb[_0xbccb('0x15a')]=_0x4544e3[_0xbccb('0x15b')]||0x1388;}if(_0x4544e3[_0xbccb('0x42')]===_0xbccb('0x43')){_0x5ea0fb[_0xbccb('0x15c')]=_0x4c01ec[_0xbccb('0x10b')];}else{_0x5ea0fb[_0xbccb('0x15d')]=_0x4c01ec[_0xbccb('0xc9')];}for(var _0x1b8307 in _0x4c01ec[_0xbccb('0x143')]){if(_0x4c01ec['Contact']['hasOwnProperty'](_0x1b8307)){if(isNotNull(_0x4c01ec['Contact'][_0x1b8307])&&_0x1b8307!=='id'&&_0x1b8307!=='tags'&&_0x1b8307!==_0xbccb('0x15e')&&_0x1b8307!==_0xbccb('0x15f')){_0x5ea0fb[util[_0xbccb('0x71')](_0xbccb('0x160'),_0xbccb('0x161'),_[_0xbccb('0x162')](_0x1b8307))]=_0x4c01ec['Contact'][_0x1b8307];}}}var _0x511b19=_0x42a9a6[_0xbccb('0xce')](_0x4544e3['Trunk'])?getCallerId(_0x4544e3['Trunk'][_0xbccb('0x6d')],_0x4544e3[_0xbccb('0x50')],_0x4544e3['dialRandomLastDigitCallerIdNumber']>0x0?getCallerIdRandom(_0x4544e3[_0xbccb('0x51')],_0x4544e3[_0xbccb('0x163')]):_0x4544e3[_0xbccb('0x51')]):getCallerId(_[_0xbccb('0xa4')](_0x4544e3[_0xbccb('0x11b')])?_0x4544e3['Trunk'][_0xbccb('0x6d')]:_0x4544e3['TrunkBackup'][_0xbccb('0x6d')],_0x4544e3[_0xbccb('0x50')],_0x4544e3[_0xbccb('0x163')]>0x0?getCallerIdRandom(_0x4544e3[_0xbccb('0x51')],_0x4544e3[_0xbccb('0x163')]):_0x4544e3[_0xbccb('0x51')]);if(_0x511b19){_0x5ea0fb[_0xbccb('0x164')]=_0x42a9a6[_0xbccb('0x22')][_0x2bb4ec][_0xbccb('0x165')]=extractCalleridName(_0x511b19);_0x5ea0fb[_0xbccb('0x166')]=_0x42a9a6[_0xbccb('0x22')][_0x2bb4ec][_0xbccb('0x167')]=extractCalleridNumber(_0x511b19);}return ami[_0xbccb('0xa5')]({'actionid':_0x2bb4ec,'action':'originate','channel':_0x42a9a6['isTrunkReachable'](_0x4544e3[_0xbccb('0x6b')])?util[_0xbccb('0x71')](_0xbccb('0x168'),_0x4544e3[_0xbccb('0x6b')][_0xbccb('0x38')],isNotNull(_0x4544e3['dialPrefix'])?_0x4544e3[_0xbccb('0x53')]['trim']()||'':'',_0x4544e3['dialCutDigit']>0x0?_0x4c01ec[_0xbccb('0x143')][_0xbccb('0x144')]['substring'](_0x4544e3['dialCutDigit']):_0x4c01ec['Contact'][_0xbccb('0x144')]):util[_0xbccb('0x71')](_0xbccb('0x168'),_[_0xbccb('0xa4')](_0x4544e3[_0xbccb('0x11b')])?_0x4544e3[_0xbccb('0x6b')][_0xbccb('0x38')]:_0x4544e3[_0xbccb('0x11b')][_0xbccb('0x38')],isNotNull(_0x4544e3[_0xbccb('0x53')])?_0x4544e3[_0xbccb('0x53')][_0xbccb('0x169')]()||'':'',_0x4544e3['dialCutDigit']>0x0?_0x4c01ec[_0xbccb('0x143')][_0xbccb('0x144')]['substring'](_0x4544e3[_0xbccb('0x16a')]):_0x4c01ec[_0xbccb('0x143')][_0xbccb('0x144')]),'callerid':_0x511b19,'Exten':'xcally-motion-dialer','Context':_0xbccb('0x16b'),'Priority':'1','variable':_0x5ea0fb,'timeout':(_0x4544e3[_0xbccb('0x52')]||0x1e)*0x3e8,'async':!![],'channelid':_0x2bb4ec})[_0xbccb('0xb1')](function(_0x3c677a){return _0x1f9571(_0x3c677a);})[_0xbccb('0xad')](function(_0x25bdf8){_0x4544e3['outboundOriginateFailureCallsDay']+=0x1;var _0x4d27ea=new History(_0x42a9a6['actions'][_0x2bb4ec]);logger['error'](util[_0xbccb('0x71')]('[originateError]:\x20%s',JSON['stringify'](_0x25bdf8)));_0x4d27ea[_0xbccb('0xdc')]=0xe;_0x4d27ea[_0xbccb('0x9d')]=_0xbccb('0x16c');_0x4d27ea[_0xbccb('0x9f')]=moment()[_0xbccb('0x71')](_0xbccb('0xf1'));_0x4d27ea[_0xbccb('0x9e')]=_0x4d27ea[_0xbccb('0x9f')];_0x42a9a6[_0xbccb('0xbf')](_0x4d27ea)['catch'](loggerCatch(_0xbccb('0x16d')));_0x42a9a6[_0xbccb('0xbd')](_0x4d27ea)['catch'](loggerCatch(_0xbccb('0x16d')))['finally'](function(){delete _0x42a9a6['actions'][_0x2bb4ec];return _0x119b34(msgResponse(_0xbccb('0x141'),_0xbccb('0x16e'),_0xbccb('0x16f')));});});});};Dialer[_0xbccb('0x18')][_0xbccb('0x2d')]=function(_0x59310f){var _0x49796b=this['actions'][_0x59310f[_0xbccb('0xfd')]];var _0x1d001d=this;if(_0x49796b){delete this[_0xbccb('0x22')][_0x59310f['actionid']];_0x49796b['responsetime']=moment()[_0xbccb('0x71')](_0xbccb('0xf1'));var _0x3a0e37=_0x49796b[_0xbccb('0x42')]==='ivr'?this[_0xbccb('0x1f')][_0x49796b['queue']]:this[_0xbccb('0x1e')][_0x49796b[_0xbccb('0x170')]()];if(!this[_0xbccb('0xcc')](_0x59310f[_0xbccb('0x171')])){this[_0xbccb('0xa8')](_0x3a0e37);return this[_0xbccb('0x172')](_0x49796b,_0x3a0e37,_0x59310f)['then'](function(_0xd6e7d1){})[_0xbccb('0xad')](loggerCatch('[callProgressDetecting]\x20'));}else{this['uniqueId'][_0x59310f[_0xbccb('0xd3')]]=_0x49796b;}}};Dialer[_0xbccb('0x18')][_0xbccb('0x173')]=function(_0x1b8a72,_0x50ebad,_0x5bd699){var _0x455bf4=new History(_0x50ebad);if(_0x455bf4[_0xbccb('0x174')]+_0x455bf4[_0xbccb('0x175')]+_0x455bf4[_0xbccb('0x176')]>=_0x5bd699[_0xbccb('0x177')]-0x1){return!![];}switch(_0x1b8a72){case 0x3:if(_0x455bf4[_0xbccb('0x176')]>=_0x5bd699[_0xbccb('0x178')]-0x1){return!![];}else{this[_0xbccb('0xb6')]({'active':![],'countnoanswerretry':_0x455bf4[_0xbccb('0x176')]+=0x1,'scheduledat':moment()['add'](_0x5bd699[_0xbccb('0x179')],_0xbccb('0x17a'))[_0xbccb('0x71')](_0xbccb('0xf1')),'ContactId':_0x455bf4[_0xbccb('0x118')],'ListId':_0x455bf4['ListId'],'VoiceQueueId':_0x455bf4[_0xbccb('0x10b')]||undefined,'CampaignId':_0x455bf4[_0xbccb('0xc9')]||undefined})[_0xbccb('0xad')](loggerCatch('[rescheduleContact][NoAnswer]'));}break;case 0x5:if(_0x455bf4[_0xbccb('0x174')]>=_0x5bd699[_0xbccb('0x17b')]-0x1){return!![];}else{this[_0xbccb('0xb6')]({'active':![],'countbusyretry':_0x455bf4[_0xbccb('0x174')]+=0x1,'scheduledat':moment()[_0xbccb('0x17c')](_0x5bd699[_0xbccb('0x17d')],_0xbccb('0x17a'))[_0xbccb('0x71')](_0xbccb('0xf1')),'ContactId':_0x455bf4[_0xbccb('0x118')],'ListId':_0x455bf4[_0xbccb('0xc7')],'VoiceQueueId':_0x455bf4[_0xbccb('0x10b')]||undefined,'CampaignId':_0x455bf4[_0xbccb('0xc9')]||undefined})[_0xbccb('0xad')](loggerCatch(_0xbccb('0x17e')));}break;case 0x8:if(_0x455bf4[_0xbccb('0x175')]>=_0x5bd699[_0xbccb('0x17f')]-0x1){return!![];}else{this[_0xbccb('0xb6')]({'active':![],'countcongestionretry':_0x455bf4[_0xbccb('0x175')]+=0x1,'scheduledat':moment()[_0xbccb('0x17c')](_0x5bd699[_0xbccb('0x180')],'minutes')[_0xbccb('0x71')](_0xbccb('0xf1')),'ContactId':_0x455bf4[_0xbccb('0x118')],'ListId':_0x455bf4[_0xbccb('0xc7')],'VoiceQueueId':_0x455bf4[_0xbccb('0x10b')]||undefined,'CampaignId':_0x455bf4[_0xbccb('0xc9')]||undefined})[_0xbccb('0xad')](loggerCatch('[rescheduleContact]\x20[Congestion]'));}break;default:return!![];}};Dialer['prototype'][_0xbccb('0x172')]=function(_0x358d47,_0x3494a5,_0x3dac9f){var _0x225f5a=this;var _0xb56a7f=new History(_0x358d47);return new BPromise(function(_0x25b1c8,_0x34ce84){if(_[_0xbccb('0x34')](_0x3494a5)&&'object'!==typeof _0x3494a5){return _0x34ce84(msgResponse(_0xbccb('0x181'),'Failure',_0xbccb('0x182')));}if(_[_0xbccb('0x34')](_0x3dac9f)&&_0xbccb('0x183')!==typeof _0x3dac9f){return _0x34ce84(msgResponse(_0xbccb('0x181'),_0xbccb('0x120'),_0xbccb('0x184')));}switch(_0x3dac9f['reason']){case'0':_0x3494a5[_0xbccb('0x5c')]+=0x1;_0xb56a7f[_0xbccb('0xdc')]=0x0;_0xb56a7f[_0xbccb('0x9d')]=_0xbccb('0x185');_0x225f5a[_0xbccb('0xbf')](_0xb56a7f)['catch'](loggerCatch(_0xbccb('0x186')));if(_0x225f5a[_0xbccb('0x173')](0x0,_0x358d47,_0x3494a5)){if(_0xb56a7f['countbusyretry']+_0xb56a7f[_0xbccb('0x175')]+_0xb56a7f['countnoanswerretry']>=_0x3494a5[_0xbccb('0x177')]){_0x225f5a[_0xbccb('0x187')](_0xb56a7f,_0x25b1c8,_0x34ce84,_0xbccb('0x188'));}else{_0x225f5a[_0xbccb('0x189')](_0xb56a7f,_0x25b1c8,_0x34ce84,_0xbccb('0x188'));}}break;case'3':_0x3494a5[_0xbccb('0x5b')]+=0x1;_0xb56a7f[_0xbccb('0xdc')]=0x3;_0xb56a7f['statedesc']=_0xbccb('0x18a');_0xb56a7f[_0xbccb('0x176')]+=0x1;_0xb56a7f[_0xbccb('0x18b')]+=0x1;_0x225f5a[_0xbccb('0xbf')](_0xb56a7f)[_0xbccb('0xad')](loggerCatch(_0xbccb('0x18c')));if(_0x225f5a[_0xbccb('0x173')](0x3,_0x358d47,_0x3494a5)){if(_0xb56a7f['countnoanswerretry']>=_0x3494a5[_0xbccb('0x178')]){_0x225f5a[_0xbccb('0x189')](_0xb56a7f,_0x25b1c8,_0x34ce84,_0xbccb('0x18d'));}else{_0x225f5a[_0xbccb('0x187')](_0xb56a7f,_0x25b1c8,_0x34ce84,_0xbccb('0x18d'));}}break;case'5':_0x3494a5[_0xbccb('0x56')]+=0x1;_0xb56a7f[_0xbccb('0xdc')]=0x5;_0xb56a7f['statedesc']='Busy';_0xb56a7f[_0xbccb('0x174')]+=0x1;_0xb56a7f[_0xbccb('0x18b')]+=0x1;_0x225f5a[_0xbccb('0xbf')](_0xb56a7f)[_0xbccb('0xad')](loggerCatch(_0xbccb('0x18e')));if(_0x225f5a[_0xbccb('0x173')](0x5,_0x358d47,_0x3494a5)){if(_0xb56a7f[_0xbccb('0x174')]>=_0x3494a5['dialBusyMaxRetry']){_0x225f5a[_0xbccb('0x189')](_0xb56a7f,_0x25b1c8,_0x34ce84,_0xbccb('0x18f'));}else{_0x225f5a[_0xbccb('0x187')](_0xb56a7f,_0x25b1c8,_0x34ce84,_0xbccb('0x18f'));}}break;case'8':_0x3494a5['outboundCongestionCallsDay']+=0x1;_0xb56a7f[_0xbccb('0xdc')]=0x8;_0xb56a7f['statedesc']=_0xbccb('0x190');_0xb56a7f[_0xbccb('0x175')]+=0x1;_0xb56a7f[_0xbccb('0x18b')]+=0x1;_0x225f5a[_0xbccb('0xbf')](_0xb56a7f)[_0xbccb('0xad')](loggerCatch('[syncAgentComplete][createHistory][8]'));if(_0x225f5a[_0xbccb('0x173')](0x8,_0x358d47,_0x3494a5)){if(_0xb56a7f[_0xbccb('0x175')]>=_0x3494a5[_0xbccb('0x17f')]){_0x225f5a[_0xbccb('0x189')](_0xb56a7f,_0x25b1c8,_0x34ce84,'reason\x208\x20congestion');}else{_0x225f5a['stateGlobal'](_0xb56a7f,_0x25b1c8,_0x34ce84,_0xbccb('0x191'));}}break;default:_0x3494a5[_0xbccb('0x192')]+=0x1;_0xb56a7f[_0xbccb('0xdc')]=0xc;_0xb56a7f[_0xbccb('0x9d')]=_0x3dac9f[_0xbccb('0x193')];_0x225f5a[_0xbccb('0xbf')](_0xb56a7f)['catch'](loggerCatch(_0xbccb('0x194')));if(_0x225f5a['checkRetriveMax'](_0x3dac9f[_0xbccb('0x193')],_0x358d47,_0x3494a5)){if(_0xb56a7f['countbusyretry']+_0xb56a7f[_0xbccb('0x175')]+_0xb56a7f['countnoanswerretry']>=_0x3494a5[_0xbccb('0x177')]){_0x225f5a[_0xbccb('0x187')](_0xb56a7f,_0x25b1c8,_0x34ce84,_0x3dac9f['reason']);}else{_0x225f5a[_0xbccb('0x189')](_0xb56a7f,_0x25b1c8,_0x34ce84,_0x3dac9f['reason']);}}}});};Dialer[_0xbccb('0x18')][_0xbccb('0x187')]=function(_0x3edac7,_0xcdd5,_0x464e51,_0x20a91e){var _0x3f7702=new Final(_0x3edac7);_0x3f7702[_0xbccb('0xdc')]=0xf;_0x3f7702[_0xbccb('0x9d')]='Global';this[_0xbccb('0x189')](_0x3f7702,_0xcdd5,_0x464e51,_0x20a91e);};Dialer[_0xbccb('0x18')][_0xbccb('0x189')]=function(_0x88fd4d,_0x2223d9,_0x4be188,_0x2c8346){this['moveContactManagedDialer'](_0x88fd4d)[_0xbccb('0xb1')](function(_0x512a2d){return _0x2223d9(msgResponse(_0xbccb('0x181'),_0xbccb('0xcd'),_0x2c8346));})[_0xbccb('0xad')](function(_0x5c1ab8){return _0x4be188(msgResponse(_0xbccb('0x195'),_0xbccb('0x120'),'contact\x20not\x20moved'));});};Dialer[_0xbccb('0x18')][_0xbccb('0x7')]=function(_0x7f013){var _0x2d4e61=this;var _0x1e3ec6=_0x7f013['dialPredictiveOptimizationPercentage']/0x64;var _0x4c8acf=_0x7f013[_0xbccb('0x5a')]/(_0x7f013[_0xbccb('0x5a')]+_0x7f013['outboundAnswerCallsDay']);var _0x40d0fb=Math[_0xbccb('0x196')](_0x7f013['predictiveIntervalAvailable']*(_0x7f013[_0xbccb('0x197')]/0x64));var _0x197620=Math[_0xbccb('0x196')](_0x7f013['predictiveIntervalAvailable']*(_0x7f013[_0xbccb('0x198')]/0x64));var _0x15d6d1=_0x7f013[_0xbccb('0x97')]+_0x7f013[_0xbccb('0x95')];var _0x2deab6=Math[_0xbccb('0x199')](_0x7f013[_0xbccb('0x68')]*_0x7f013[_0xbccb('0x6a')]*_0x7f013[_0xbccb('0x19a')]*_0x7f013[_0xbccb('0x64')]);if(_['isUndefined'](_0x7f013[_0xbccb('0x25')])){if(!_['isUndefined'](_0x7f013['startPredictive'])){_0x7f013[_0xbccb('0x24')]=undefined;loggerPredictive[_0xbccb('0x8b')](_0xbccb('0x19b'),_0xbccb('0x19c'));}if(!_[_0xbccb('0x34')](_0x7f013[_0xbccb('0x87')])){loggerPredictive[_0xbccb('0x8b')](_0xbccb('0x19b'),_0xbccb('0x19d'));clearInterval(_0x7f013[_0xbccb('0x87')]);_0x7f013[_0xbccb('0x87')]=undefined;}_0x7f013['startProgressive']=moment()['format'](_0xbccb('0xf1'));loggerPredictive[_0xbccb('0x74')](_0x7f013[_0xbccb('0x38')],_0xbccb('0x19e'),_0x7f013[_0xbccb('0x25')]);this[_0xbccb('0x132')](_0x7f013,0x1);}else if(ifInterval(_0x7f013[_0xbccb('0x19f')],_0x7f013[_0xbccb('0x25')])){this[_0xbccb('0x132')](_0x7f013,0x1);loggerPredictiveCalls[_0xbccb('0x74')](_0xbccb('0x1a0'),_0x7f013['startProgressive'],_0x7f013[_0xbccb('0x38')]);_0x7f013[_0xbccb('0x68')]=0x0;_0x7f013[_0xbccb('0x63')]=0x0;}else if(_0x1e3ec6<_0x4c8acf&&_0x7f013['dialPredictiveOptimization']===_0xbccb('0x1a1')){freeVariablesPredictive(_0x7f013);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x1a2'),_0xbccb('0x1a3'),_0x4c8acf,_0xbccb('0x25'),_0x7f013[_0xbccb('0x38')]);}else if(_0x2deab6<_0x7f013[_0xbccb('0x63')]&&_0x7f013[_0xbccb('0x1a4')]===_0xbccb('0x1a1')){freeVariablesPredictive(_0x7f013);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x1a5'),_0xbccb('0x1a6'),_0x2deab6,_0xbccb('0x1a7'),_0x7f013[_0xbccb('0x63')],_0xbccb('0x25'),_0x7f013[_0xbccb('0x38')]);}else if(!ifInterval(_0x7f013[_0xbccb('0x19f')],_0x7f013[_0xbccb('0x25')])&&_[_0xbccb('0x34')](_0x7f013[_0xbccb('0x24')])&&!_[_0xbccb('0x34')](_0x7f013[_0xbccb('0x25')])){_0x7f013[_0xbccb('0x24')]=moment()[_0xbccb('0x71')](_0xbccb('0xf1'));loggerPredictive[_0xbccb('0x74')](_0x7f013[_0xbccb('0x38')],_0xbccb('0x1a8'),_0x7f013['startPredictive']);this[_0xbccb('0x1a9')](_0x7f013[_0xbccb('0x19f')])[_0xbccb('0xb1')](this[_0xbccb('0x1aa')](_0x7f013))[_0xbccb('0xb1')](mergeDataErlangB(_0x7f013))['then'](this[_0xbccb('0x1ab')](_0x7f013))['catch'](loggerCatchPredictive('Predictive\x20after\x20first\x20interval',_0x7f013));}else if(!ifInterval(_0x7f013[_0xbccb('0x19f')],_0x7f013['startPredictive'])){_0x7f013[_0xbccb('0x63')]=0x0;_0x7f013[_0xbccb('0x24')]=moment()[_0xbccb('0x71')](_0xbccb('0xf1'));loggerPredictive[_0xbccb('0x74')](_0x7f013[_0xbccb('0x38')],'recalculate\x20predictive\x20at',_0x7f013[_0xbccb('0x24')]);clearInterval(_0x7f013[_0xbccb('0x87')]);_0x7f013[_0xbccb('0x87')]=undefined;this[_0xbccb('0x1a9')](_0x7f013[_0xbccb('0x19f')])[_0xbccb('0xb1')](this[_0xbccb('0x1aa')](_0x7f013))[_0xbccb('0xb1')](mergeDataErlangB(_0x7f013))['then'](this[_0xbccb('0x1ab')](_0x7f013))['catch'](loggerCatchPredictive(_0xbccb('0x1ac'),_0x7f013));}else if(_0x7f013[_0xbccb('0x65')]&&_0x15d6d1<_0x7f013['predictiveIntervalAvailable']-_0x197620){freeVariablesPredictive(_0x7f013);loggerPredictive[_0xbccb('0x74')](_0x7f013[_0xbccb('0x38')],_0xbccb('0x1ad'),_0x15d6d1,')\x20are\x20less\x20than\x20threshold\x20(',_0x7f013[_0xbccb('0x65')],'-',_0x197620,'=',_0x7f013[_0xbccb('0x65')]-_0x197620,')');}else if(_0x7f013[_0xbccb('0x65')]&&_0x15d6d1>_0x7f013[_0xbccb('0x65')]+_0x40d0fb){freeVariablesPredictive(_0x7f013);loggerPredictive[_0xbccb('0x74')](_0x7f013[_0xbccb('0x38')],_0xbccb('0x1ad'),_0x15d6d1,_0xbccb('0x1ae'),_0x7f013[_0xbccb('0x65')],'+',_0x40d0fb,'=',_0x7f013[_0xbccb('0x65')]+_0x40d0fb,')');}};Dialer[_0xbccb('0x18')][_0xbccb('0x1aa')]=function(_0x200b95){var _0x107f10=this;return function(_0x53b081){return new BPromise(function(_0x370bbe,_0x4c1307){_[_0xbccb('0x84')](_0x200b95,_0x53b081[0x0]);if(checkGetDataPredictive(_0x53b081[0x0])){var _0xece74f=_0x200b95[_0xbccb('0x65')]=_0x200b95['talking']+_0x200b95[_0xbccb('0x97')];var _0x12f0cc=_0x200b95[_0xbccb('0x19f')]*0x3c;var _0x35f90d=_0x53b081[0x0][_0xbccb('0x79')]+_0x53b081[0x0]['predictiveIntervalAvgHoldtime'];var _0x215f9a=(_0x53b081[0x0][_0xbccb('0x1af')]+_0x53b081[0x0][_0xbccb('0x61')]+_0x53b081[0x0][_0xbccb('0x60')])/_0x53b081[0x0][_0xbccb('0x66')];_0x200b95[_0xbccb('0x19a')]=_0x215f9a>0x0?_0x215f9a:0x1;switch(_0x200b95['dialPredictiveOptimization']){case _0xbccb('0x1a1'):var _0x17eaa9=_0x200b95[_0xbccb('0x1b0')]/0x64;return _0x107f10['abandonmentRate'](_0xece74f,_0x12f0cc,_0x35f90d,_0x215f9a,_0x17eaa9)[_0xbccb('0xb1')](function(_0x5043b3){return _0x370bbe(_0x5043b3);});case'agentBusyFactor':var _0x40d5ab=_0x200b95[_0xbccb('0x1b0')]/0x64;return _0x107f10[_0xbccb('0x1b1')](_0xece74f,_0x12f0cc,_0x35f90d,_0x215f9a,_0x40d5ab)[_0xbccb('0xb1')](function(_0x2795d1){return _0x370bbe(_0x2795d1);});default:return _0x4c1307(msgResponse(_0xbccb('0x1b2'),_0xbccb('0x120'),_0xbccb('0x1b3')));}}else{return _0x4c1307(msgResponse(_0xbccb('0x1b2'),'Failure',_0xbccb('0x1b4')));}});};};Dialer[_0xbccb('0x18')]['getDataPredictiveOld']=function(_0x15629c){var _0x20afec=this;return function(_0x36f214){return new BPromise(function(_0x5b3622,_0x5eeb79){_[_0xbccb('0x84')](_0x15629c,_0x36f214[0x0]);if(checkGetDataPredictive(_0x36f214[0x0])){loggerPredictive[_0xbccb('0x74')](JSON['stringify'](_0x36f214[0x0]));if(_0x15629c[_0xbccb('0x1a4')]===_0xbccb('0x1a1')){return _0x20afec['getVoiceQueueRtPauses'](_0x15629c['id'])['then'](function(_0x332941){var _0x881245=_0x15629c[_0xbccb('0x46')]-_0x332941[0x0][_0xbccb('0x1b5')];var _0x54c29d=_0x15629c[_0xbccb('0x19f')]*0x3c;var _0x22e54e=_0x36f214[0x0][_0xbccb('0x79')]+_0x36f214[0x0][_0xbccb('0x5f')];var _0x377cca=(_0x36f214[0x0][_0xbccb('0x1af')]+_0x36f214[0x0][_0xbccb('0x61')]+_0x36f214[0x0][_0xbccb('0x60')])/_0x36f214[0x0]['predictiveIntervalTotalCalls'];var _0x308b10=_0x15629c[_0xbccb('0x1b0')]/0x64;_0x15629c[_0xbccb('0x1b6')]=_0x332941[0x0][_0xbccb('0x1b5')]||0x0;_0x15629c['predictiveIntervalHitRate']=_0x377cca>0x0?_0x377cca:0x1;return _0x20afec['abandonmentRate'](_0x881245,_0x54c29d,_0x22e54e,_0x377cca,_0x308b10);})[_0xbccb('0xb1')](function(_0x249082){return _0x5b3622(_0x249082);})['catch'](function(_0x5deeb7){return _0x5eeb79(msgResponse(_0xbccb('0x1b7'),'Failure',JSON[_0xbccb('0x3e')](_0x5deeb7)));});}if(_0x15629c[_0xbccb('0x1a4')]===_0xbccb('0x1b8')){return _0x20afec[_0xbccb('0xbb')](_0x15629c['id'])[_0xbccb('0xb1')](function(_0x39f34e){var _0x11be2e=_0x15629c[_0xbccb('0x46')]-_0x39f34e[0x0][_0xbccb('0x1b5')];var _0x1f0370=_0x15629c[_0xbccb('0x19f')]*0x3c;var _0x4f0c5d=_0x36f214[0x0]['predictiveIntervalAvgTalktime']+_0x36f214[0x0][_0xbccb('0x5f')];var _0x433f3f=(_0x36f214[0x0]['predictiveIntervalAnsweredCalls']+_0x36f214[0x0][_0xbccb('0x61')]+_0x36f214[0x0][_0xbccb('0x60')])/_0x36f214[0x0][_0xbccb('0x66')];var _0x246cec=_0x15629c[_0xbccb('0x1b0')]/0x64;_0x15629c[_0xbccb('0x1b6')]=_0x39f34e[0x0]['outboundQueuePauses']||0x0;_0x15629c['predictiveIntervalHitRate']=_0x433f3f>0x0?_0x433f3f:0x1;return _0x20afec[_0xbccb('0x1b1')](_0x11be2e,_0x1f0370,_0x4f0c5d,_0x433f3f,_0x246cec);})['then'](function(_0x1525a1){return _0x5b3622(_0x1525a1);})[_0xbccb('0xad')](function(_0x34a533){return _0x5eeb79(msgResponse(_0xbccb('0x1b7'),_0xbccb('0x120'),JSON[_0xbccb('0x3e')](_0x34a533)));});}}else{return _0x5eeb79(msgResponse(_0xbccb('0x1b2'),_0xbccb('0x120'),_0xbccb('0x1b4')));}});};};Dialer[_0xbccb('0x18')][_0xbccb('0x1ab')]=function(_0x3b43c7){var _0x3c408f=this;return function(){var _0x3fbe2d=0x0;var _0x273294=Math[_0xbccb('0x199')](_0x3b43c7[_0xbccb('0x69')]*0x3e8);if(_0x273294>0x0){_0x273294=_0x273294<0x64?0x64:_0x273294;loggerPredictive[_0xbccb('0x74')](_0x3b43c7[_0xbccb('0x38')],_0xbccb('0x1b9'),_0x273294,'milliseconds');_0x3b43c7[_0xbccb('0x87')]=setInterval(function(){_0x3c408f[_0xbccb('0x87')](_0x3b43c7);loggerPredictiveCalls['info']('[handlePredictive]',_0x3fbe2d+=0x1);},_0x273294);}else{loggerPredictive[_0xbccb('0x74')](_0x3b43c7[_0xbccb('0x38')],_0xbccb('0x1ba'));}};};Dialer['prototype'][_0xbccb('0x1bb')]=function(_0x2654a4,_0x4f9772){var _0x3dea90=this;return function(_0x27c34e){if(_[_0xbccb('0x73')](_0x27c34e)){if(_[_0xbccb('0xa4')](_0x4f9772[_0xbccb('0xc8')])||!_0x4f9772['recallme']){if(_0x2654a4[_0xbccb('0x4f')]===_0xbccb('0x134')){_0x2654a4[_0xbccb('0x107')]=_[_0xbccb('0x34')](_0x2654a4[_0xbccb('0x107')])?!![]:_0x2654a4[_0xbccb('0x107')];var _0x2a35c2=uuid['v4']();_0x3dea90['actions'][_0x2a35c2]=new Action(_0x2654a4,_0x4f9772,_0x2a35c2);loggerBooked[_0xbccb('0x74')]('[booked][checkContactBlack]',_0x2a35c2,_0xbccb('0x1bc'),JSON[_0xbccb('0x3e')](_0x2654a4[_0xbccb('0x107')]),_0xbccb('0x1bd'),_0x2654a4[_0xbccb('0x38')]);if(_0x2654a4['queueStatusComplete']){_0x2654a4[_0xbccb('0x107')]=![];_0x3dea90[_0xbccb('0x103')][_0x3dea90['actions'][_0x2a35c2][_0xbccb('0xa9')]]=[];ami[_0xbccb('0xa5')]({'actionid':_0x2a35c2,'action':_0xbccb('0x1be'),'queue':_0x2654a4[_0xbccb('0x38')]})[_0xbccb('0xad')](function(_0x586564){_0x3dea90[_0xbccb('0xa8')](_0x2654a4);_0x3dea90[_0xbccb('0xb6')]({'active':![],'ContactId':_0x3dea90[_0xbccb('0x22')][_0x2a35c2][_0xbccb('0x118')],'ListId':_0x3dea90[_0xbccb('0x22')][_0x2a35c2][_0xbccb('0xc7')],'VoiceQueueId':_0x3dea90[_0xbccb('0x22')][_0x2a35c2][_0xbccb('0x10b')]||undefined,'CampaignId':_0x3dea90[_0xbccb('0x22')][_0x2a35c2][_0xbccb('0xc9')]||undefined})[_0xbccb('0xad')](loggerCatch(_0xbccb('0x1bf')));delete _0x3dea90[_0xbccb('0x22')][_0x2a35c2];});}else{loggerBooked[_0xbccb('0x74')](_0xbccb('0x1c0'),JSON[_0xbccb('0x3e')](_0x2654a4[_0xbccb('0x107')]),_0xbccb('0x1bd'),_0x2654a4['name']);_0x3dea90[_0xbccb('0xa8')](_0x2654a4);_0x3dea90[_0xbccb('0xb6')]({'active':![],'ContactId':_0x3dea90[_0xbccb('0x22')][_0x2a35c2][_0xbccb('0x118')],'ListId':_0x3dea90[_0xbccb('0x22')][_0x2a35c2][_0xbccb('0xc7')],'VoiceQueueId':_0x3dea90[_0xbccb('0x22')][_0x2a35c2][_0xbccb('0x10b')]||undefined,'CampaignId':_0x3dea90['actions'][_0x2a35c2]['CampaignId']||undefined})[_0xbccb('0xad')](loggerCatch('[unlockOriginate][syncQueueStatusComplete]'));delete _0x3dea90[_0xbccb('0x22')][_0x2a35c2];}}else{return _0x3dea90['actionOriginate'](_0x2654a4,_0x4f9772);}}else{if(getDiff(_0x4f9772[_0xbccb('0x1c1')])<_0x2654a4[_0xbccb('0x1c2')]*0x3c){_0x3dea90['preview']['run'](_0x4f9772['id'])[_0xbccb('0x1b')](function(){_0x3dea90[_0xbccb('0xa8')](_0x2654a4);});}else{_0x2654a4[_0xbccb('0x5d')]+=0x1;_0x3dea90[_0xbccb('0xa8')](_0x2654a4);if(_0x2654a4[_0xbccb('0x1c3')]){_0x3dea90[_0xbccb('0xb6')]({'active':![],'recallme':![],'UserId':null,'ContactId':_0x4f9772[_0xbccb('0x118')],'ListId':_0x4f9772[_0xbccb('0xc7')],'VoiceQueueId':_0x4f9772[_0xbccb('0x10b')]||undefined,'CampaignId':_0x4f9772['CampaignId']||undefined})[_0xbccb('0xad')](loggerCatch(_0xbccb('0x1c4')));_0x3dea90[_0xbccb('0xbf')](createObjHistory(_0x2654a4,_0x4f9772,_0xbccb('0x1c5'),0x17,_0xbccb('0x1c6')))[_0xbccb('0xad')](loggerCatch(_0xbccb('0x1c7')));}else{_0x3dea90[_0xbccb('0xc5')](createObjHistory(_0x2654a4,_0x4f9772,_0xbccb('0x1c8'),0x16,_0xbccb('0x1c9')),'[Originate][HistoryRecallClose][historyCatch]',_0xbccb('0x1ca'));}}}}else{_0x2654a4[_0xbccb('0x55')]+=0x1;_0x3dea90[_0xbccb('0xc5')](createObjHistory(_0x2654a4,_0x4f9772,_0xbccb('0x1cb'),0xd,_0xbccb('0x1cc')),_0xbccb('0x1cd'),_0xbccb('0x1ce'));throw _0xbccb('0x1cf');}};};Dialer[_0xbccb('0x18')]['handleIvr']=function(_0x582a12){var _0x119e92=this;var _0x2cf7bc=[];var _0x27c0cb=_0x582a12['limitCalls']-_0x582a12[_0xbccb('0x67')]-_0x582a12[_0xbccb('0x1d0')];emitCampaignSummary(_0x582a12);if(_0x27c0cb>0x0){if(_0x27c0cb>this[_0xbccb('0x21')]){_0x27c0cb=this[_0xbccb('0x21')];}_0x582a12[_0xbccb('0x1d0')]+=_0x27c0cb;this[_0xbccb('0xba')](_0x582a12['id'],_0x27c0cb,_0x582a12[_0xbccb('0x1d1')])[_0xbccb('0xb1')](function(_0xb999e1){_0x582a12[_0xbccb('0x1d0')]-=_0x27c0cb;_0x582a12[_0xbccb('0x1d0')]=_0x582a12['temp']>0x0?_0x582a12[_0xbccb('0x1d0')]:0x0;if(!checkContactEmpty(_0xb999e1)){_0x582a12['message']='AVAILABLE_CONTACTS_FINISHED';logger[_0xbccb('0x74')](_0xbccb('0x1d2')+_0x582a12['name']);}else{_0x582a12[_0xbccb('0x67')]+=_0xb999e1[_0xbccb('0x10e')];_0x582a12[_0xbccb('0x35')]=_0xbccb('0x1d3');for(var _0x424c2a=0x0;_0x424c2a<_0xb999e1[_0xbccb('0x10e')];_0x424c2a+=0x1){_0x582a12['ivrTotalCallsDays']+=0x1;if(_['isNil'](_0xb999e1[_0x424c2a])||_[_0xbccb('0xa4')](_0xb999e1[_0x424c2a]['Contact'])||_[_0xbccb('0xa4')](_0xb999e1[_0x424c2a]['Contact'][_0xbccb('0x144')])){_0x119e92['emptyContact'](_0xbccb('0x1d4'),_0x582a12,_0xb999e1[_0x424c2a]);}else{_0x119e92[_0xbccb('0xb3')](_[_0xbccb('0xc6')](_0xb999e1[_0x424c2a],[_0xbccb('0xc9'),'Contact.phone']))[_0xbccb('0xb1')](_0x119e92[_0xbccb('0x1bb')](_0x582a12,_0xb999e1[_0x424c2a]))[_0xbccb('0xad')](_0x119e92[_0xbccb('0xc3')](_0xbccb('0x1d5'),_0x582a12));}}}})['catch'](loggerGetContactDialer(_0xbccb('0x1d6'),_0x582a12,_0x27c0cb));}};Dialer['prototype'][_0xbccb('0x132')]=function(_0x395b70,_0x296e3c){var _0x7eed3c=this;var _0x4ae717=[];var _0x1d0834=_0x296e3c>=0x1?_0x296e3c:0x1;var _0x1d9af5=[];if(_0x395b70['dialMethod']==='booked'){_0x1d0834=0x1;}var _0x57c905=Math[_0xbccb('0x199')](_0x395b70[_0xbccb('0x97')]*_0x1d0834)-_0x395b70[_0xbccb('0x67')]-_0x395b70[_0xbccb('0x1d0')];emitVoiceQueueSummary(_0x395b70);if(_0x395b70[_0xbccb('0x1d7')]>0x0){var _0x1b0f8c=_0x395b70[_0xbccb('0x1d7')]-_0x395b70['originated']-_0x395b70[_0xbccb('0x95')]-_0x395b70[_0xbccb('0x1d0')]-_0x395b70[_0xbccb('0x47')];if(_0x57c905>_0x1b0f8c){_0x57c905=_0x1b0f8c;}}if(_0x57c905>0x0){if(_0x395b70[_0xbccb('0x4f')]===_0xbccb('0x134')){_0x57c905=0x1;}if(_0x57c905>this[_0xbccb('0x21')]){_0x57c905=this[_0xbccb('0x21')];}_0x395b70['temp']+=_0x57c905;for(var _0x3187e6 in this[_0xbccb('0x101')]){if(this[_0xbccb('0x101')][_0xbccb('0x8e')](_0x3187e6)){if(this[_0xbccb('0x101')][_0x3187e6][_0xbccb('0xdc')]===_0xbccb('0x1d8')&&this[_0xbccb('0x101')][_0x3187e6]['status']===_0xbccb('0x1d9')){_0x4ae717[_0xbccb('0x104')](this['agents'][_0x3187e6]['id']);}}}this[_0xbccb('0xb8')](_0x395b70['id'],_0x4ae717,_0x57c905,_0x395b70[_0xbccb('0x1d1')])[_0xbccb('0xb1')](function(_0x34a558){_0x395b70[_0xbccb('0x1d0')]-=_0x57c905;_0x395b70[_0xbccb('0x1d0')]=_0x395b70['temp']>0x0?_0x395b70['temp']:0x0;if(!checkContactEmpty(_0x34a558)){_0x7eed3c[_0xbccb('0xac')](_0x395b70)[_0xbccb('0xb1')](sendMessageReschedule(_0x395b70))[_0xbccb('0xad')](loggerCatch(_0xbccb('0xae')));}else{_0x395b70[_0xbccb('0x67')]+=_0x34a558['length'];_0x395b70[_0xbccb('0x35')]=_0x395b70[_0xbccb('0x4f')]==='booked'?_0xbccb('0x14d'):_0xbccb('0x1d3');for(var _0x5e6181=0x0;_0x5e6181<_0x34a558[_0xbccb('0x10e')];_0x5e6181+=0x1){if(_['isNil'](_0x34a558[_0x5e6181])||_[_0xbccb('0xa4')](_0x34a558[_0x5e6181][_0xbccb('0x143')])||_['isNil'](_0x34a558[_0x5e6181][_0xbccb('0x143')]['phone'])){_0x7eed3c[_0xbccb('0xc4')](_0xbccb('0x1d4'),_0x395b70,_0x34a558[_0x5e6181]);}else{_0x7eed3c['checkIsBlackList'](_[_0xbccb('0xc6')](_0x34a558[_0x5e6181],['VoiceQueueId',_0xbccb('0x1da')]))[_0xbccb('0xb1')](_0x7eed3c[_0xbccb('0x1bb')](_0x395b70,_0x34a558[_0x5e6181]))[_0xbccb('0xad')](_0x7eed3c['loggerHandler'](_0xbccb('0x1d4'),_0x395b70));}}}})[_0xbccb('0xad')](loggerGetContactDialer('[getContactDialer2]',_0x395b70,_0x57c905));}};Dialer[_0xbccb('0x18')][_0xbccb('0x87')]=function(_0x14e679){var _0x1224da=this;if(_0x14e679[_0xbccb('0x1d7')]>0x0){var _0x3f9634=_0x14e679[_0xbccb('0x1d7')]-_0x14e679[_0xbccb('0x67')]-_0x14e679[_0xbccb('0x95')];if(_0x3f9634>0x0){this[_0xbccb('0x1db')](_0x14e679);}else{loggerPredictiveCalls['info'](_0xbccb('0x1dc'));}}else{this['tryOriginatePredictive'](_0x14e679);}};Dialer['prototype']['tryOriginatePredictive']=function(_0x17e3d4){var _0x5b9819=this;var _0x27abae=[];_0x17e3d4[_0xbccb('0x67')]+=0x1;for(var _0x3c4837 in this[_0xbccb('0x101')]){if(this[_0xbccb('0x101')][_0xbccb('0x8e')](_0x3c4837)){if(this['agents'][_0x3c4837]['state']===_0xbccb('0x1d8')&&this[_0xbccb('0x101')][_0x3c4837][_0xbccb('0xd0')]===_0xbccb('0x1d9')){_0x27abae['push'](this[_0xbccb('0x101')][_0x3c4837]['id']);}}}this[_0xbccb('0xb8')](_0x17e3d4['id'],_0x27abae,0x1,_0x17e3d4[_0xbccb('0x1d1')])[_0xbccb('0xb1')](function(_0x1a373f){if(!checkContactEmpty(_0x1a373f)){checkContactLowerLimitOriginate(_0x17e3d4,0x1,0x0);_0x5b9819[_0xbccb('0xac')](_0x17e3d4)[_0xbccb('0xb1')](sendMessageReschedule(_0x17e3d4))['catch'](loggerCatch(_0xbccb('0xae')));}else{_0x17e3d4[_0xbccb('0x35')]=_0xbccb('0x1d3');if(_[_0xbccb('0xa4')](_0x1a373f[0x0])||_[_0xbccb('0xa4')](_0x1a373f[0x0][_0xbccb('0x143')])||_[_0xbccb('0xa4')](_0x1a373f[0x0][_0xbccb('0x143')][_0xbccb('0x144')])){_0x5b9819[_0xbccb('0xc4')]('[actionOriginate]\x20',_0x17e3d4,_0x1a373f[0x0]);}else{_0x5b9819[_0xbccb('0xaf')](_[_0xbccb('0xc6')](_0x1a373f[0x0],[_0xbccb('0x10b'),_0xbccb('0x1da')]))[_0xbccb('0xb1')](_0x5b9819[_0xbccb('0x1bb')](_0x17e3d4,_0x1a373f[0x0]))[_0xbccb('0xad')](_0x5b9819['loggerHandler']('[actionOriginatePredictive]\x20',_0x17e3d4));}}})['catch'](loggerGetContactDialer('[getContactDialerPredictive]',_0x17e3d4,0x1));emitVoiceQueueSummary(_0x17e3d4);};Dialer[_0xbccb('0x18')][_0xbccb('0x1dd')]=function(_0x45a797,_0x5a9ad5,_0xc25418,_0x130eca,_0x280730,_0x13b341){loggerPredictive['info'](_0xbccb('0x1de'));loggerPredictive[_0xbccb('0x74')](_0xbccb('0x1df'),_0x45a797);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x1e0'),_0x5a9ad5);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x1e1'),_0xc25418);loggerPredictive[_0xbccb('0x74')]('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',_0x130eca);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x1e2'),_0x280730);loggerPredictive['info']('---------------------------');return new BPromise(function(_0x3c554b,_0x443cb4){if(_0x45a797<=0x0||isNaN(_0x45a797)){return _0x443cb4(msgResponse(_0xbccb('0x1e3'),_0xbccb('0x16e'),_0xbccb('0x1e4')+_0x45a797));}if(_0xc25418<=0x0||isNaN(_0xc25418)){return _0x443cb4(msgResponse(_0xbccb('0x1e3'),_0xbccb('0x16e'),_0xbccb('0x1e5')+_0xc25418));}if(_0x130eca<=0x0||isNaN(_0x130eca)){return _0x443cb4(msgResponse(_0xbccb('0x1e3'),_0xbccb('0x16e'),_0xbccb('0x1e6')+_0x130eca));}if(_0x5a9ad5<=0x0||isNaN(_0x5a9ad5)){return _0x443cb4(msgResponse(_0xbccb('0x1e3'),_0xbccb('0x16e'),'interval\x20=\x20'+_0x5a9ad5));}if(_0x280730<=0x0||isNaN(_0x280730)){return _0x443cb4(msgResponse(_0xbccb('0x1e3'),'Error',_0xbccb('0x1e7')+_0x280730));}_0x13b341=_0x13b341||0x0;var _0x2e63a0=0x1/_0xc25418;var _0x4b3455=0x0;var _0x2ec19c=0x0;var _0x1b912a=0x0;var _0x9e8cbf=0x0;for(var _0x5741a6=0x0;_0x1b912a<_0x280730;_0x5741a6+=0x1){_0x2ec19c=_0x5741a6/_0x5a9ad5;_0x4b3455=(_0x130eca*_0x2ec19c+_0x13b341)/_0x2e63a0;_0x1b912a=erlangb(_0x4b3455,_0x45a797);_0x9e8cbf=_0x4b3455/_0x45a797*(0x1-erlangb(_0x4b3455,_0x45a797));}return _0x3c554b({'erlangCalls':_0x5741a6,'erlangCallToSecond':_0x5a9ad5/_0x5741a6,'erlangAbandonmentRate':_0x1b912a,'erlangBusyFactor':_0x9e8cbf});});};Dialer[_0xbccb('0x18')][_0xbccb('0x1b1')]=function(_0x309221,_0x14a2f3,_0x1b2f9c,_0x59ed5c,_0x47dad8,_0x2244d9){loggerPredictive[_0xbccb('0x74')](_0xbccb('0x1e8'));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',_0x309221);loggerPredictive[_0xbccb('0x74')]('Interval:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x14a2f3);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x1e1'),_0x1b2f9c);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x1e9'),_0x59ed5c);loggerPredictive['info'](_0xbccb('0x1ea'),_0x47dad8);loggerPredictive[_0xbccb('0x74')](_0xbccb('0x83'));return new BPromise(function(_0x466386,_0x30ce16){if(_0x309221<=0x0||isNaN(_0x309221)){return _0x30ce16(msgResponse(_0xbccb('0x1eb'),_0xbccb('0x16e'),'m\x20=\x20'+_0x309221));}if(_0x1b2f9c<=0x0||isNaN(_0x1b2f9c)){return _0x30ce16(msgResponse('[busyFactor]',_0xbccb('0x16e'),'Ts\x20=\x20'+_0x1b2f9c));}if(_0x59ed5c<=0x0||isNaN(_0x59ed5c)){return _0x30ce16(msgResponse('[busyFactor]',_0xbccb('0x16e'),_0xbccb('0x1e6')+_0x59ed5c));}if(_0x14a2f3<=0x0||isNaN(_0x14a2f3)){return _0x30ce16(msgResponse(_0xbccb('0x1eb'),_0xbccb('0x16e'),'interval\x20=\x20'+_0x14a2f3));}if(_0x47dad8<=0x0||isNaN(_0x47dad8)){return _0x30ce16(msgResponse(_0xbccb('0x1eb'),_0xbccb('0x16e'),'Umin\x20=\x20'+_0x47dad8));}_0x2244d9=_0x2244d9||0x0;var _0x10756b=0x1/_0x1b2f9c;var _0x1d8151=0x0;var _0xe47177=0x0;var _0x54cf2f=0x0;var _0x1eaea3=0x0;for(var _0x5765b0=0x0;_0x1eaea3<_0x47dad8;_0x5765b0+=0x1){_0xe47177=_0x5765b0/_0x14a2f3;_0x1d8151=(_0x59ed5c*_0xe47177+_0x2244d9)/_0x10756b;_0x54cf2f=erlangb(_0x1d8151,_0x309221);_0x1eaea3=_0x1d8151/_0x309221*(0x1-erlangb(_0x1d8151,_0x309221));}return _0x466386({'erlangCalls':_0x5765b0,'erlangCallToSecond':_0x14a2f3/_0x5765b0,'erlangAbandonmentRate':_0x54cf2f,'erlangBusyFactor':_0x1eaea3});});};module[_0xbccb('0x1ec')]=Dialer;
\ No newline at end of file
+var _0x96e7=['agentcomplete','syncAgentComplete','custom:queuesummary','hangup','syncHangup','newexten','syncNewExten','varset','queuemember','syncQueueMember','queuestatuscomplete','syncQueueStatusComplete','loopCampaigns','loopClearZombieChannels','isUndefined','message','AGENTS_NOT_LOGGED','name','\x20AGENTS\x20NOT\x20LOGGED','NOT_ACTIVE','\x20NOT\x20Active','INTERVAL_IS_NULL','\x20INTERVAL_IS_NULL','Interval','Intervals','isEmpty','[ifTime][Action]','Error','stringify','milliseconds','diff','seconds','type','outbound','answered','available','loggedIn','pTalking','sumBillable','sumDuration','sumHoldTime','talking','total','unmanaged','abandoned','waiting','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalHitRate','predictiveIntervalPauses','predictiveIntervalAvailable','originated','erlangCallToSecond','erlangBusyFactor','startProgressive','Trunk','active','callerid','format','voice:queue:%s','voice_queue:save','ivr','campaign:ivr:%s','campaign:save','info','-----\x20Stats\x20Predictive\x20---','predictiveIntervalTotalCalls','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','Dropped\x20Exit:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','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','predictiveIntervalAvgHoldtime','Avg\x20Hold\x20Time\x20is\x20not\x20enough\x20for\x20predictive','Total\x20Calls\x20are\x20not\x20enough\x20for\x20predictive','History\x20information\x20are\x20empty','Scheduled\x20Calls:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','erlangCalls','One\x20call\x20every:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','erlangAbandonmentRate','clearing\x20variable\x20start\x20progressive','handlePredictive','clearing\x20variable\x20handle\x20predictive','string','\x22%s\x22\x20<%s>','\x22\x22\x20<>','error','inspect','stack','length','hasOwnProperty','[decremetOriginate]\x20object\x20originated\x20is\x20negative','[decremetOriginate]\x20is\x20null\x20or\x20undefined','RESCHEDULED_CONTACTS','[getContactDialer2][ReScheduled]','contactsRescheduled','AVAILABLE_CONTACTS_FINISHED','[getContactDialer2][Empty]','sendMessageOneNotActive','[syncQueueSummary]\x20Campaign\x20Queue:\x20','is\x20not\x20active','IS_DISACTIVED','[syncQueueSummary]\x20Campaign\x20Ivr:\x20','is\x20disactive','state','statedesc','endtime','starttime','clearZombieChannels','[uniqueid]','[actions]','isNil','channel','catch','No\x20such\x20channel','updateOriginated','[Dialer][checkChannel]','queue','[Dialer][checkChannel][ivr]','resolve','then','countReScheduled','checkIsBlackList','checkIsBlackListIvr','[checkIsBlackListIvr]\x20','averageHandleTime','avgHandleTime','[averageHandleTime]\x20','rescheduleContact','[rescheduleContact]\x20','getContactDialer','getContactDialerIvr','[getContactDialer]\x20','moveContactManagedDialer','[moveContactManagedDialer]\x20','createHistory','[createHistory]\x20','[updateOriginated]\x20object\x20originated\x20is\x20negative','[updateOriginated]\x20is\x20null\x20or\x20undefined','loggerHandler','saveInDb','merge','pick','ContactId','ListId','UserId','VoiceQueueId','CampaignId','[emptyContact][createHistory]','[emptyContact]','isSuccess','status','reachable','SIP/%s','unmonitored','syncVarSet','uniqueid','variable','amdstatus','xcally-motion-dialer','dialAMDActive','value','HangupInAMD','membername','[syncHangupInAMD][createHistory]','Machine','amd','[syncMachine][createHistory]','[syncMachine]','HANGUP','AMD','[syncHangupInAMDIvr][createHistory]','[syncMachineIvr][createHistory]','[syncMachineIvr]','[syncHangupIvr][createHistory]','[syncHangupIvr]','dialQueueProject','AnswerAGI','AGI','cause-txt','Unknow','reason','agent','agiafterat','dialQueueProject2','dialAgiAfterHangupAgent','[syncAgentComplete][createHistory]','[syncAgentComplete]','syncAgentConnect','answertime','YYYY-MM-DD\x20HH:mm:ss','[syncQueueCallerAbandon]\x20[Drop]','droptime','responsetime','dialQueueTimeout','predictiveIntervalDroppedCallsTimeout','outboundDropCallsDayTimeout','predictiveIntervalErlangCallsDroppedCalls','Drop','dropreason','TIMEOUT','queueCallerAbandonCreateState','outboundDropCallsDayCallersExit','Abandoned','CALLEREXIT','strategy','actionid','locked','paused','stateinterface','push','idHopper','[unlockQueueStatus][undefined]','queueStatusComplete','[booked][unlockQueueStatus]','run','_rr','unlockRR','[booked][RR]','Agent:\x20','[booked][RR][finaly]','contactAgent-idHopper:\x20','[booked][unlock]','[unlock2][syncQueueStatusComplete]','syncCampaigns','isTrunkReachable','TrunkBackup','\x20trunk\x20is\x20not\x20reachable','checkIfTime','ifTime','checkIfTimeIntervals','INTERVAL_IS_EMPTY','\x20Intervals\x20is\x20empty\x20','TIMEZONE_UNKNOW','\x20Timezone\x20unknow\x20','isArray','Action','command','iftime\x20%s,%s','timezones','indexOf','true','content','all','some','[ifTime][promiseAll]','Failure','Global:\x20','\x20Interval\x20is\x20overtime:\x20','Timezone:\x20','checkDialMethod','progressive','handlePower','power','dialPowerLevel','Queue','launchHandleIvr','handleIvr','dialGlobalInterval','dialTimezone','[syncQueueSummary]','checkIsTrunkReachable','[syncCampaigns]','\x5cw{0,','pow','replace','random','match','actionOriginate','originate','voiceQueue\x20is\x20undefine','Contact','phone','contact\x20is\x20undefine','getCaller','\x22agi://%s/square,%s\x22','NONE','\x22%s,%s%s,,,%s\x22','dialQueueOptions','XMD-AMDINITIALSILENCE','dialAMDInitialSilence','dialAMDGreeting','XMD-AMDAFTERGREETINGSILENCE','XMD-AMDTOTALANALYSISTIME','dialAMDTotalAnalysisTime','XMD-AMDMINWORDLENGTH','dialAMDMinWordLength','dialAMDBetweenWordsSilence','XMD-AMDMAXIMUMNUMBEROFWORDS','XMD-AMDSILENCETHRESHOLD','dialAMDSilenceThreshold','XMD-AMDMAXIMUMWORDLENGTH','dialAMDMaximumWordLength','XMD-VOICEQUEUEID','XMD-CAMPAIGNID','tags','createdAt','updatedAt','XMD-','toUpper','dialOriginateCallerIdName','dialRandomLastDigitCallerIdNumber','originatecalleridname','XMD-ORIGINATECALLERIDNUM','originatecalleridnum','SIP/%s/%s%s','trim','dialCutDigit','substring','from-sip','[originateError]:\x20%s','[originate][error]','originate\x20action\x20Error','getQueue','response','callProgressDetecting','checkRetriveMax','countbusyretry','countcongestionretry','countnoanswerretry','dialGlobalMaxRetry','dialNoAnswerMaxRetry','add','dialNoAnswerRetryFrequency','minutes','[rescheduleContact][NoAnswer]','dialBusyRetryFrequency','[rescheduleContact]\x20[Busy]','dialCongestionMaxRetry','dialCongestionRetryFrequency','[rescheduleContact]\x20[Congestion]','object','[callProgressDetecting]','entity\x20is\x20undefine','NoSuchNumber','reason\x200\x20no\x20such\x20number....','createStateFinal','NoAnswer','countglobal','[syncAgentComplete][createHistory][3]','reason\x203\x20ringing\x20no\x20answer','Busy','[syncAgentComplete][createHistory][5]','stateGlobal','reason\x205\x20busy','[syncAgentComplete][createHistory][8]','reason\x208\x20congestion','[syncAgentComplete][createHistory][?]','Global','[moveContactManagedDialer][0]','contact\x20not\x20moved','dialPredictiveOptimizationPercentage','round','predictiveIntervalMinThreshold','floor','predictiveIntervalMultiplicativeFactor','check\x20handlePredictive\x20is\x20not\x20undefine','collection\x20data\x20in\x20progressive\x20at','dialPredictiveInterval','[startMethodPredictive][StartProgressive][Loop]','[stopMethodPredictive][ReStartProgressive][ExceededDropDay]','dropRate','[stopMethodPredictive][ReStartProgressive][ExceededDropInterval]','Drop\x20in\x20this\x20interval','started\x20in\x20predictive\x20at','getDataPredictive','startMethodPredictive','Predictive\x20after\x20first\x20interval','recalculate\x20predictive\x20at','switch\x20in\x20progressive\x20because\x20available\x20agents\x20(',')\x20are\x20less\x20than\x20threshold\x20(','dialPredictiveOptimization','abandonmentRate','[getDataPredictive]','Unknown\x20Predictive','check\x20failure','getDataPredictiveOld','getVoiceQueueRtPauses','outboundQueuePauses','[CatchErlangB]','agentBusyFactor','busyFactor','one\x20call\x20every:','[handlePredictive]','fail\x20to\x20scheduled\x20calls','checkContactBlack','recallme','[booked][checkContactBlack]','queueStatusComplete:\x20','Queue:\x20','queuestatus','[booked][checkContactBlack][else]','[unlockOriginate][syncQueueStatusComplete]','dialRecallInQueue','[rescheduleContact][dialRecallInQueue]','RECALLINQUEUE','RecallInQueue','RECALLFAILEDTIMEOUT','RecallFailedTimeout','[Originate][HistoryRecallClose][historyCatch]','[Originate][HistoryRecallClose]','BLACKLIST','Blacklist','[Originate][MoveBlacklist]','inBlackList','limitCalls','temp','dialOrderByScheduledAt','[getContactCampaign2][Empty]','RUNNING','ivrTotalCallsDays','emptyContact','[actionOriginate]\x20','[actionOriginateIvr]\x20','[getContactCampaign2]','dialLimitQueue','ACTIVE','Contact.phone','[getContactDialer2]','tryOriginatePredictive','[handlePredictive][limitChannel]','not_inuse','[countReScheduled]\x20','[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]','p\x20=\x20','interval\x20=\x20','Amax\x20=\x20','----\x20Agent\x20Busy\x20Factor\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]','m\x20=\x20','Ts\x20=\x20','exports','util','lodash','bluebird','md5','ioredis','../../../config/environment/','../../../config/logger','dialer','booked','predictive','predictiveCalls','syncQueueSummary','../ami','redis','defaults','localhost','socket.io-emitter','../rpc/cmHopper','../rpc/cmHopperFinal','../rpc/cmHopperHistory','../rpc/voiceQueueRt','./history','./agentComplete','./queueCallerAbandon','./hangup','XCALLY_IP_AGI','127.0.0.1','rrmemory','roundrobin','prototype','enqueue','tail','finally','sequence','preview','voiceQueues','campaigns','agents','trunks','maxNumberOriginate','channels','actions','contactsId','uniqueId','optionPredictive','startPredictive','ivrOriginated','queueBooked','queueBookedRR','agentconnect','bind','syncQueueCallerAbandon','syncOriginateResponse'];(function(_0x5ed499,_0x516370){var _0x5b783c=function(_0x1e7ee0){while(--_0x1e7ee0){_0x5ed499['push'](_0x5ed499['shift']());}};_0x5b783c(++_0x516370);}(_0x96e7,0x1ca));var _0x796e=function(_0x3f6bcf,_0x531e79){_0x3f6bcf=_0x3f6bcf-0x0;var _0x1c5350=_0x96e7[_0x3f6bcf];return _0x1c5350;};'use strict';var util=require(_0x796e('0x0'));var _=require(_0x796e('0x1'));var BPromise=require(_0x796e('0x2'));var uuid=require('uuid');var moment=require('moment');var rr=require('rr');var md5=require(_0x796e('0x3'));var Redis=require(_0x796e('0x4'));var config=require(_0x796e('0x5'));var logger=require(_0x796e('0x6'))(_0x796e('0x7'));var loggerBooked=require(_0x796e('0x6'))(_0x796e('0x8'));var loggerPredictive=require(_0x796e('0x6'))(_0x796e('0x9'));var loggerPredictiveCalls=require('../../../config/logger')(_0x796e('0xa'));var loggerSyncQueueSummary=require(_0x796e('0x6'))(_0x796e('0xb'));var ami=require(_0x796e('0xc'));config[_0x796e('0xd')]=_[_0x796e('0xe')](config[_0x796e('0xd')],{'host':_0x796e('0xf'),'port':0x18eb});var io=require(_0x796e('0x10'))(new Redis(config[_0x796e('0xd')]));var cmHopper=require(_0x796e('0x11'));var cmHopperFinal=require(_0x796e('0x12'));var cmHopperHistory=require(_0x796e('0x13'));var cmHopperBlack=require('../rpc/cmHopperBlack');var voiceQueueRt=require(_0x796e('0x14'));var Action=require('./action');var History=require(_0x796e('0x15'));var Final=require('./final');var AgentComplete=require(_0x796e('0x16'));var QueueCallerAbandon=require(_0x796e('0x17'));var Hangup=require(_0x796e('0x18'));var ipAgi=process['env'][_0x796e('0x19')]||_0x796e('0x1a');var strategy={'rrmemory':_0x796e('0x1b'),'roundrobin':_0x796e('0x1c')};var Sequence=function(){};Sequence[_0x796e('0x1d')][_0x796e('0x1e')]=function(_0x31604f){this['tail']=this[_0x796e('0x1f')]?this[_0x796e('0x1f')][_0x796e('0x20')](_0x31604f):_0x31604f();};function Dialer(_0x3c454b,_0x4c21ff){this[_0x796e('0x21')]=new Sequence();this[_0x796e('0x22')]=_0x4c21ff;this['voiceQueues']=_0x3c454b[_0x796e('0x23')];this['campaigns']=_0x3c454b[_0x796e('0x24')];this[_0x796e('0x25')]=_0x3c454b[_0x796e('0x25')];this[_0x796e('0x26')]=_0x3c454b[_0x796e('0x26')];this[_0x796e('0x27')]=config[_0x796e('0x27')]||0x2;this[_0x796e('0x28')]={};this[_0x796e('0x29')]={};this[_0x796e('0x2a')]={};this[_0x796e('0x2b')]={};this[_0x796e('0x2c')]={};this[_0x796e('0x2d')]={};this['startProgressive']={};this[_0x796e('0x2e')]={};this[_0x796e('0x2f')]={};this[_0x796e('0x30')]={};ami['on'](_0x796e('0x31'),this['syncAgentConnect'][_0x796e('0x32')](this));ami['on']('queuecallerabandon',this[_0x796e('0x33')]['bind'](this));ami['on']('originateresponse',this[_0x796e('0x34')]['bind'](this));ami['on'](_0x796e('0x35'),this[_0x796e('0x36')][_0x796e('0x32')](this));ami['on'](_0x796e('0x37'),this[_0x796e('0xb')]['bind'](this));ami['on'](_0x796e('0x38'),this[_0x796e('0x39')][_0x796e('0x32')](this));ami['on'](_0x796e('0x3a'),this[_0x796e('0x3b')][_0x796e('0x32')](this));ami['on'](_0x796e('0x3c'),this['syncVarSet'][_0x796e('0x32')](this));ami['on'](_0x796e('0x3d'),this[_0x796e('0x3e')][_0x796e('0x32')](this));ami['on'](_0x796e('0x3f'),this[_0x796e('0x40')][_0x796e('0x32')](this));this[_0x796e('0x41')]();this[_0x796e('0x42')]();}function isNotNull(_0x195996){return _0x195996!==null&&!_[_0x796e('0x43')](_0x195996);}function checkIsLoggedIn(_0x74c456,_0x161b29){return function(){if(_0x161b29<=0x0){_0x74c456[_0x796e('0x44')]=_0x796e('0x45');throw _0x74c456[_0x796e('0x46')]+_0x796e('0x47');}};}function isActive(_0x19063b){return _0x19063b;}function checkIsActive(_0x31c62a,_0x589204){return function(){if(!isActive(_0x589204)){_0x31c62a['message']=_0x796e('0x48');throw _0x31c62a[_0x796e('0x46')]+_0x796e('0x49');}};}function checkInterval(_0x3d3c39){return function(){if(!isNotNull(_0x3d3c39['Interval'])){_0x3d3c39['message']=_0x796e('0x4a');throw _0x3d3c39[_0x796e('0x46')]+_0x796e('0x4b');}if(!isNotNull(_0x3d3c39[_0x796e('0x4c')][_0x796e('0x4d')])){_0x3d3c39[_0x796e('0x44')]=_0x796e('0x4a');throw _0x3d3c39['name']+_0x796e('0x4b');}if(!isNotNull(_[_0x796e('0x4e')](_0x3d3c39[_0x796e('0x4c')]['Intervals']))){_0x3d3c39['message']=_0x796e('0x4a');throw _0x3d3c39[_0x796e('0x46')]+_0x796e('0x4b');}};}function msgResponse(_0x2e1df3,_0x715bba,_0x41826e){return{'action':_0x2e1df3,'response':_0x715bba,'message':_0x41826e,'stack':_0x41826e};}function myreject(_0x5c3829){return function(_0x5eb929){return _0x5c3829(msgResponse(_0x796e('0x4f'),_0x796e('0x50'),JSON[_0x796e('0x51')](_0x5eb929)));};}function getSeconds(_0x28af52,_0x1a052a){var _0x3b12ba=moment(_0x28af52)[_0x796e('0x52')](0x0);var _0x4ea1c7=moment(_0x1a052a)[_0x796e('0x52')](0x0);return _0x3b12ba[_0x796e('0x53')](_0x4ea1c7,_0x796e('0x54'));}function emit(_0x24d6c0,_0x484948,_0x242507){io['to'](_0x24d6c0)['emit'](_0x484948,_0x242507);}function emitVoiceQueueSummary(_0x2569d4){if(_0x2569d4[_0x796e('0x55')]===_0x796e('0x56')){var _0x43f6e2={'id':_0x2569d4['id'],'name':_0x2569d4['name'],'strategy':_0x2569d4['strategy'],'answered':_0x2569d4[_0x796e('0x57')],'available':_0x2569d4[_0x796e('0x58')],'loggedIn':_0x2569d4[_0x796e('0x59')],'pTalking':_0x2569d4[_0x796e('0x5a')],'sumBillable':_0x2569d4[_0x796e('0x5b')],'sumDuration':_0x2569d4[_0x796e('0x5c')],'sumHoldTime':_0x2569d4[_0x796e('0x5d')]||0x0,'talking':_0x2569d4[_0x796e('0x5e')],'total':_0x2569d4[_0x796e('0x5f')],'type':_0x2569d4[_0x796e('0x55')],'unmanaged':_0x2569d4[_0x796e('0x60')],'abandoned':_0x2569d4[_0x796e('0x61')],'waiting':_0x2569d4[_0x796e('0x62')],'loggedInDb':_0x2569d4[_0x796e('0x63')],'dialActive':_0x2569d4[_0x796e('0x64')],'dialMethod':_0x2569d4[_0x796e('0x65')],'dialOriginateCallerIdName':_0x2569d4['dialOriginateCallerIdName'],'dialOriginateCallerIdNumber':_0x2569d4[_0x796e('0x66')],'dialOriginateTimeout':_0x2569d4[_0x796e('0x67')],'dialPrefix':_0x2569d4[_0x796e('0x68')],'outboundAnswerAgiCallsDay':_0x2569d4[_0x796e('0x69')],'outboundAnswerCallsDay':_0x2569d4[_0x796e('0x6a')],'outboundBlacklistCallsDay':_0x2569d4[_0x796e('0x6b')],'outboundBusyCallsDay':_0x2569d4[_0x796e('0x6c')],'outboundCongestionCallsDay':_0x2569d4[_0x796e('0x6d')],'outboundDropCallsDayACS':_0x2569d4['outboundDropCallsDayACS'],'outboundDropCallsDayCallersExit':_0x2569d4['outboundDropCallsDayCallersExit'],'outboundDropCallsDayTimeout':_0x2569d4['outboundDropCallsDayTimeout'],'outboundNoAnswerCallsDay':_0x2569d4[_0x796e('0x6e')],'outboundNoSuchCallsDay':_0x2569d4[_0x796e('0x6f')],'outboundOriginateFailureCallsDay':_0x2569d4['outboundOriginateFailureCallsDay'],'outboundReCallsDay':_0x2569d4[_0x796e('0x70')],'outboundRejectCallsDay':_0x2569d4[_0x796e('0x71')],'outboundUnknownCallsDay':_0x2569d4[_0x796e('0x72')],'predictiveIntervalAnsweredCalls':_0x2569d4[_0x796e('0x73')],'predictiveIntervalAvgHoldtime':_0x2569d4['predictiveIntervalAvgHoldtime'],'predictiveIntervalAvgTalktime':_0x2569d4[_0x796e('0x74')],'predictiveIntervalDroppedCallsCallersExit':_0x2569d4[_0x796e('0x75')],'predictiveIntervalDroppedCallsTimeout':_0x2569d4['predictiveIntervalDroppedCallsTimeout'],'predictiveIntervalErlangCalls':_0x2569d4['predictiveIntervalErlangCalls'],'predictiveIntervalErlangCallsDroppedCalls':_0x2569d4['predictiveIntervalErlangCallsDroppedCalls'],'predictiveIntervalHitRate':_0x2569d4[_0x796e('0x76')],'predictiveIntervalMultiplicativeFactor':_0x2569d4['predictiveIntervalMultiplicativeFactor'],'predictiveIntervalPauses':_0x2569d4[_0x796e('0x77')],'predictiveIntervalAvailable':_0x2569d4[_0x796e('0x78')],'predictiveIntervalTotalCalls':_0x2569d4['predictiveIntervalTotalCalls'],'message':_0x2569d4[_0x796e('0x44')],'originated':_0x2569d4[_0x796e('0x79')],'erlangCalls':_0x2569d4['erlangCalls'],'erlangCallToSecond':_0x2569d4[_0x796e('0x7a')],'erlangAbandonmentRate':_0x2569d4['erlangAbandonmentRate'],'erlangBusyFactor':_0x2569d4[_0x796e('0x7b')],'startPredictive':_0x2569d4[_0x796e('0x2d')],'startProgressive':_0x2569d4[_0x796e('0x7c')]};if(_0x2569d4['Trunk']){_0x43f6e2[_0x796e('0x7d')]={'id':_0x2569d4[_0x796e('0x7d')]['id'],'name':_0x2569d4['Trunk']['name'],'active':_0x2569d4[_0x796e('0x7d')][_0x796e('0x7e')],'callerid':_0x2569d4[_0x796e('0x7d')][_0x796e('0x7f')]};}if(_0x2569d4[_0x796e('0x4c')]){_0x43f6e2[_0x796e('0x4c')]={'id':_0x2569d4[_0x796e('0x4c')]['id'],'name':_0x2569d4[_0x796e('0x4c')][_0x796e('0x46')]};}var _0x3f736e=md5(JSON[_0x796e('0x51')](_0x43f6e2));if(_0x2569d4[_0x796e('0x3')]!==_0x3f736e){_0x2569d4[_0x796e('0x3')]=_0x3f736e;emit(util[_0x796e('0x80')](_0x796e('0x81'),_0x43f6e2[_0x796e('0x46')]),_0x796e('0x82'),_0x43f6e2);}}}function emitCampaignSummary(_0x4c0d6f){if(_0x4c0d6f[_0x796e('0x55')]===_0x796e('0x83')){emit(util[_0x796e('0x80')](_0x796e('0x84'),_0x4c0d6f[_0x796e('0x46')]),_0x796e('0x85'),_0x4c0d6f);}}function checkGetDataPredictive(_0x1a09c1){if(isNotNull(_0x1a09c1)){if(!_[_0x796e('0x4e')](_0x1a09c1)){loggerPredictive[_0x796e('0x86')](_0x796e('0x87'));loggerPredictive[_0x796e('0x86')]('Total\x20Calls:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x1a09c1[_0x796e('0x88')]);loggerPredictive[_0x796e('0x86')](_0x796e('0x89'),_0x1a09c1[_0x796e('0x73')]);loggerPredictive[_0x796e('0x86')](_0x796e('0x8a'),_0x1a09c1['predictiveIntervalDroppedCallsTimeout']);loggerPredictive[_0x796e('0x86')](_0x796e('0x8b'),_0x1a09c1[_0x796e('0x75')]);loggerPredictive[_0x796e('0x86')](_0x796e('0x8c'),_0x1a09c1['predictiveIntervalAvgHoldtime']);loggerPredictive[_0x796e('0x86')](_0x796e('0x8d'),_0x1a09c1[_0x796e('0x74')]);loggerPredictive[_0x796e('0x86')](_0x796e('0x8e'));if(_0x1a09c1[_0x796e('0x88')]>0x0){if(!_[_0x796e('0x43')](_0x1a09c1[_0x796e('0x74')])&&_0x1a09c1[_0x796e('0x74')]>0x0){return!![];}else{loggerPredictive[_0x796e('0x86')](_0x796e('0x8f'));}if(!_[_0x796e('0x43')](_0x1a09c1[_0x796e('0x90')])&&_0x1a09c1[_0x796e('0x90')]>0x0){return!![];}else{loggerPredictive[_0x796e('0x86')](_0x796e('0x91'));}}else{loggerPredictive[_0x796e('0x86')](_0x796e('0x92'));}}else{loggerPredictive['info'](_0x796e('0x93'));}}else{loggerPredictive[_0x796e('0x86')]('History\x20information\x20are\x20empty');}return![];}function mergeDataErlangB(_0x223760){return function(_0x41de1c){loggerPredictive['info']('---------\x20ErlangB\x20---------');loggerPredictive[_0x796e('0x86')](_0x796e('0x94'),_0x41de1c[_0x796e('0x95')]);loggerPredictive[_0x796e('0x86')](_0x796e('0x96'),_0x41de1c[_0x796e('0x7a')]);loggerPredictive[_0x796e('0x86')]('Drop\x20Rate:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x41de1c[_0x796e('0x97')]);loggerPredictive[_0x796e('0x86')]('Agent\x20Busy\x20Factor:\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x41de1c[_0x796e('0x7b')]);loggerPredictive[_0x796e('0x86')]('Drop\x20Rate:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x41de1c[_0x796e('0x97')]);loggerPredictive['info'](_0x796e('0x8e'));_['merge'](_0x223760,_0x41de1c);};}function getDiff(_0x44ee4f){var _0x4e13f5=moment()['milliseconds'](0x0);var _0x4e8eef=moment(_0x44ee4f)[_0x796e('0x52')](0x0);return _0x4e13f5['diff'](_0x4e8eef,_0x796e('0x54'));}function ifInterval(_0x5efcd7,_0x3e6b70){if(_['isUndefined'](_0x3e6b70)){return![];}if(getDiff(_0x3e6b70)<_0x5efcd7*0x3c){return!![];}else{return![];}}function freeVariablesPredictive(_0x5471ac){if(isNotNull(_0x5471ac)){if(!_[_0x796e('0x43')](_0x5471ac[_0x796e('0x7c')])){_0x5471ac[_0x796e('0x7c')]=undefined;loggerPredictive[_0x796e('0x86')](_0x5471ac[_0x796e('0x46')],_0x796e('0x98'));}if(!_[_0x796e('0x43')](_0x5471ac[_0x796e('0x2d')])){_0x5471ac[_0x796e('0x2d')]=undefined;loggerPredictive[_0x796e('0x86')](_0x5471ac[_0x796e('0x46')],'clearing\x20variable\x20start\x20predictive');}if(!_[_0x796e('0x43')](_0x5471ac[_0x796e('0x99')])){clearInterval(_0x5471ac[_0x796e('0x99')]);_0x5471ac[_0x796e('0x99')]=undefined;loggerPredictive['info'](_0x5471ac['name'],_0x796e('0x9a'));}}}function erlangb(_0x179ac4,_0x4dd2e9){if(_0x4dd2e9===0x0){return 0x0;}var _0x1856d8=0x1;for(var _0x14811a=0x1;_0x14811a<=_0x4dd2e9;_0x14811a+=0x1){_0x1856d8=0x1+_0x1856d8*_0x14811a/_0x179ac4;}return 0x1/_0x1856d8;}function isVoiceQueueOutbound(_0x8cd894){return _0x8cd894===_0x796e('0x56');}function isNotPreview(_0x37cc17){return _0x37cc17!==_0x796e('0x22');}function isCampaignIvr(_0x4d82d2){return _0x4d82d2===_0x796e('0x83');}function getCallerId(_0x1862ab,_0x19ff6c,_0x1fd9d0){if(!_[_0x796e('0x43')](_0x1fd9d0)&&'string'===typeof _0x1fd9d0&&!_[_0x796e('0x4e')](_0x1fd9d0)){if(!_[_0x796e('0x43')](_0x19ff6c)&&_0x796e('0x9b')===typeof _0x19ff6c&&!_['isEmpty'](_0x19ff6c)){return util[_0x796e('0x80')](_0x796e('0x9c'),_0x19ff6c,_0x1fd9d0);}return util[_0x796e('0x80')](_0x796e('0x9c'),_0x1fd9d0,_0x1fd9d0);}if(!_[_0x796e('0x43')](_0x1862ab)&&_0x796e('0x9b')===typeof _0x1862ab&&!_[_0x796e('0x4e')](_0x1862ab)){return _0x1862ab;}return _0x796e('0x9d');}function loggerCatchQueueSummary(_0x34300e,_0x4df073){return function(_0x3379eb){freeVariablesPredictive(_0x4df073);emitVoiceQueueSummary(_0x4df073);emitCampaignSummary(_0x4df073);loggerSyncQueueSummary[_0x796e('0x9e')](_0x34300e,util[_0x796e('0x9f')](_0x3379eb,{'showHidden':![],'depth':null}));};}function loggerCatchPredictive(_0x18facf,_0x1705ac){return function(_0x3eaa5c){loggerPredictive[_0x796e('0x9e')](_0x1705ac['name'],_0x18facf);loggerPredictive['error'](_0x3eaa5c[_0x796e('0xa0')]);freeVariablesPredictive(_0x1705ac);};}function loggerCatch(_0x20c0f5){return function(_0x109291){logger[_0x796e('0x9e')](_0x20c0f5,util['inspect'](_0x109291,{'showHidden':![],'depth':null}));};}function checkContactEmpty(_0x2458c5){return _0x2458c5&&!_[_0x796e('0x43')](_0x2458c5)&&_0x2458c5[_0x796e('0xa1')]>0x0;}function decremetOriginate(_0x20690a){if(!_[_0x796e('0x43')](_0x20690a)&&_0x20690a!==null){if(_0x20690a[_0x796e('0xa2')](_0x796e('0x79'))){if(_0x20690a['originated']>0x0){_0x20690a[_0x796e('0x79')]-=0x1;}else{logger['error'](_0x796e('0xa3'));}}}else{logger['error'](_0x796e('0xa4'));}}function checkContactLowerLimitOriginate(_0x6b2197,_0x3c2d70,_0x3d18cf){if(_0x3c2d70>_0x3d18cf){for(var _0x310054=0x0;_0x310054<_0x3c2d70-_0x3d18cf;_0x310054+=0x1){decremetOriginate(_0x6b2197);}}}function loggerGetContactDialer(_0x15d266,_0x35a2fc,_0x220b22){return function(_0x275d17){checkContactLowerLimitOriginate(_0x35a2fc,_0x220b22,0x0);logger[_0x796e('0x9e')](_0x15d266,util[_0x796e('0x9f')](_0x275d17,{'showHidden':![],'depth':null}));};}function sendMessageReschedule(_0x15a49e){return function(_0x4ea18d){if(isNotNull(_0x4ea18d)&&isNotNull(_0x4ea18d[0x0])){if(_0x4ea18d[0x0]['contactsRescheduled']>0x0){_0x15a49e[_0x796e('0x44')]=_0x796e('0xa5');logger[_0x796e('0x86')](_0x796e('0xa6')+_0x15a49e['name'],_0x4ea18d[0x0][_0x796e('0xa7')],'contacts');}else{_0x15a49e['message']=_0x796e('0xa8');logger[_0x796e('0x86')](_0x796e('0xa9')+_0x15a49e['name']);}}};}function notSendMessagesQueue(_0x1aa1ca){if(_0x1aa1ca[_0x796e('0xaa')]){freeVariablesPredictive(_0x1aa1ca);if(_0x1aa1ca[_0x796e('0x79')]===0x0&&_0x1aa1ca[_0x796e('0x5e')]===0x0&&_0x1aa1ca[_0x796e('0x62')]===0x0&&(_0x1aa1ca[_0x796e('0x5a')]||0x0)===0x0){_0x1aa1ca[_0x796e('0xaa')]=![];_0x1aa1ca[_0x796e('0x58')]=0x0;_0x1aa1ca[_0x796e('0x44')]='NOT_ACTIVE';loggerSyncQueueSummary[_0x796e('0x9e')](_0x796e('0xab'),_0x1aa1ca[_0x796e('0x46')],_0x796e('0xac'));}else{_0x1aa1ca[_0x796e('0x44')]=_0x796e('0xad');loggerSyncQueueSummary[_0x796e('0x9e')](_0x796e('0xab'),_0x1aa1ca['name'],'is\x20disactive');}emitVoiceQueueSummary(_0x1aa1ca);}}function notSendMessagesCampaign(_0x23dbf6){if(_0x23dbf6[_0x796e('0xaa')]){if(_0x23dbf6[_0x796e('0x79')]===0x0){_0x23dbf6['sendMessageOneNotActive']=![];_0x23dbf6[_0x796e('0x44')]='NOT_ACTIVE';loggerSyncQueueSummary[_0x796e('0x9e')](_0x796e('0xae'),_0x23dbf6['name'],_0x796e('0xac'));}else{_0x23dbf6[_0x796e('0x44')]=_0x796e('0xad');loggerSyncQueueSummary[_0x796e('0x9e')](_0x796e('0xae'),_0x23dbf6[_0x796e('0x46')],_0x796e('0xaf'));}emitCampaignSummary(_0x23dbf6);}}function createObjHistory(_0xd4c94c,_0x3b05d3,_0x13d329,_0x2c9838,_0x447949){_0xd4c94c['message']=_0x13d329;var _0x7f571=new Action(_0xd4c94c,_0x3b05d3);var _0x3b4fd2=new History(_0x7f571);_0x3b4fd2[_0x796e('0xb0')]=_0x2c9838;_0x3b4fd2[_0x796e('0xb1')]=_0x447949;_0x3b4fd2[_0x796e('0xb2')]=_0x7f571[_0x796e('0xb3')];return _0x3b4fd2;}Dialer['prototype']['loopClearZombieChannels']=function(){var _0x11b838=this;setInterval(function(){_0x11b838[_0x796e('0xb4')](_0x11b838['uniqueId'],_0x796e('0xb5'));_0x11b838['clearZombieChannels'](_0x11b838[_0x796e('0x29')],_0x796e('0xb6'));},0x32c8);};Dialer[_0x796e('0x1d')][_0x796e('0xb4')]=function(_0x2ac66f,_0x3e0e02){var _0x534e40=this;for(var _0x563ce4 in _0x2ac66f){if(_0x2ac66f['hasOwnProperty'](_0x563ce4)){this[_0x796e('0x21')]['enqueue'](function(){if(!_[_0x796e('0xb7')](_0x2ac66f[_0x563ce4])){return ami['Action']({'action':'status','channel':_0x2ac66f[_0x563ce4][_0x796e('0xb8')]})[_0x796e('0xb9')](function(_0x3e6193){if(_0x3e6193['message']===_0x796e('0xba')){setTimeout(function(){if(_0x2ac66f[_0x563ce4]&&_0x2ac66f[_0x563ce4][_0x796e('0x55')]!==_0x796e('0x83')){_0x534e40[_0x796e('0xbb')](_0x534e40['voiceQueues'][_0x2ac66f[_0x563ce4]['queue']]);logger[_0x796e('0x9e')](_0x796e('0xbc'),_0x3e0e02,_0x563ce4,_0x2ac66f[_0x563ce4][_0x796e('0xbd')]);delete _0x2ac66f[_0x563ce4];}if(_0x2ac66f[_0x563ce4]&&_0x2ac66f[_0x563ce4]['type']===_0x796e('0x83')){_0x534e40[_0x796e('0xbb')](_0x534e40[_0x796e('0x24')][_0x2ac66f[_0x563ce4][_0x796e('0xbd')]]);logger[_0x796e('0x9e')](_0x796e('0xbe'),_0x3e0e02,_0x563ce4,_0x2ac66f[_0x563ce4][_0x796e('0xbd')]);delete _0x2ac66f[_0x563ce4];}},0x2328);}});}});}}};Dialer['prototype']['countReScheduled']=function(_0x39dfe2){return BPromise[_0x796e('0xbf')]()[_0x796e('0xc0')](cmHopper[_0x796e('0xc1')](_0x39dfe2))[_0x796e('0xb9')](loggerCatch('[countReScheduled]\x20'));};Dialer[_0x796e('0x1d')][_0x796e('0xc2')]=function(_0x28f3d1){return BPromise[_0x796e('0xbf')]()[_0x796e('0xc0')](cmHopperBlack[_0x796e('0xc2')](_0x28f3d1))['catch'](loggerCatch('[checkIsBlackList]\x20'));};Dialer[_0x796e('0x1d')][_0x796e('0xc3')]=function(_0x5bfe04){return BPromise[_0x796e('0xbf')]()[_0x796e('0xc0')](cmHopperBlack[_0x796e('0xc3')](_0x5bfe04))['catch'](loggerCatch(_0x796e('0xc4')));};Dialer[_0x796e('0x1d')][_0x796e('0xc5')]=function(_0x31a8fb){return BPromise[_0x796e('0xbf')]()['then'](cmHopperHistory[_0x796e('0xc6')](_0x31a8fb))[_0x796e('0xb9')](loggerCatch(_0x796e('0xc7')));};Dialer[_0x796e('0x1d')][_0x796e('0xc8')]=function(_0x3926){return BPromise['resolve']()[_0x796e('0xc0')](cmHopper['rescheduleContact'](_0x3926))[_0x796e('0xb9')](loggerCatch(_0x796e('0xc9')));};Dialer[_0x796e('0x1d')][_0x796e('0xca')]=function(_0x5ee1e6,_0x198658,_0x190a3e,_0x4ff98c){return BPromise[_0x796e('0xbf')]()[_0x796e('0xc0')](cmHopper[_0x796e('0xca')](_0x5ee1e6,_0x198658,_0x190a3e,_0x4ff98c))['catch'](loggerCatch('[getContactDialer]\x20'));};Dialer[_0x796e('0x1d')][_0x796e('0xcb')]=function(_0x55ba8,_0x1da3fe,_0x385b0b){return BPromise[_0x796e('0xbf')]()[_0x796e('0xc0')](cmHopper[_0x796e('0xcb')](_0x55ba8,_0x1da3fe,_0x385b0b))[_0x796e('0xb9')](loggerCatch(_0x796e('0xcc')));};Dialer['prototype']['getVoiceQueueRtPauses']=function(_0x34c079){return BPromise['resolve']()[_0x796e('0xc0')](voiceQueueRt['getVoiceQueueRtPauses'](_0x34c079))['catch'](loggerCatch('[getVoiceQueueRtPauses]\x20'));};Dialer[_0x796e('0x1d')][_0x796e('0xcd')]=function(_0x1e9a00){return BPromise[_0x796e('0xbf')]()['then'](cmHopper[_0x796e('0xcd')](_0x1e9a00))[_0x796e('0xb9')](loggerCatch(_0x796e('0xce')));};Dialer[_0x796e('0x1d')][_0x796e('0xcf')]=function(_0x4b726a){return BPromise[_0x796e('0xbf')]()[_0x796e('0xc0')](cmHopperHistory[_0x796e('0xcf')](_0x4b726a))[_0x796e('0xb9')](loggerCatch(_0x796e('0xd0')));};Dialer[_0x796e('0x1d')]['updateOriginated']=function(_0x187fae){if(!_[_0x796e('0x43')](_0x187fae)&&_0x187fae!==null){if(_0x187fae['hasOwnProperty'](_0x796e('0x79'))){if(_0x187fae[_0x796e('0x79')]>0x0){_0x187fae[_0x796e('0x79')]-=0x1;}else{logger[_0x796e('0x9e')](_0x796e('0xd1'));}}}else{logger[_0x796e('0x9e')](_0x796e('0xd2'));}};Dialer[_0x796e('0x1d')][_0x796e('0xd3')]=function(_0x364ec5,_0x114b4d){var _0x3245d8=this;return function(_0x4f4520){_0x3245d8['updateOriginated'](_0x114b4d);logger[_0x796e('0x9e')](_0x364ec5,util[_0x796e('0x9f')](_0x4f4520,{'showHidden':![],'depth':null}));};};Dialer[_0x796e('0x1d')]['emptyContact']=function(_0x15c187,_0x3858dd,_0x2fdfea){var _0x31a92c={'state':0x19,'statedesc':'notFound'};this['updateOriginated'](_0x3858dd);this[_0x796e('0xd4')](_[_0x796e('0xd5')](_0x31a92c,_[_0x796e('0xd6')](_0x2fdfea,[_0x796e('0xd7'),_0x796e('0xd8'),_0x796e('0xd9'),_0x796e('0xda'),_0x796e('0xdb')])),_0x796e('0xdc'),_0x796e('0xdd'));logger[_0x796e('0x9e')](_0x15c187);};Dialer[_0x796e('0x1d')][_0x796e('0xde')]=function(_0x5eb702){return _0x5eb702==='Success';};Dialer['prototype']['isTrunkReachable']=function(_0x1dff6d){return!_[_0x796e('0x43')](_0x1dff6d)&&_0x1dff6d&&!_[_0x796e('0x43')](_0x1dff6d[_0x796e('0x46')])&&!_[_0x796e('0x43')](_0x1dff6d[_0x796e('0x7e')])&&_0x1dff6d[_0x796e('0x7e')]&&(this[_0x796e('0x26')][util[_0x796e('0x80')]('SIP/%s',_0x1dff6d[_0x796e('0x46')])][_0x796e('0xdf')]===_0x796e('0xe0')||this[_0x796e('0x26')][util[_0x796e('0x80')](_0x796e('0xe1'),_0x1dff6d[_0x796e('0x46')])][_0x796e('0xdf')]===_0x796e('0xe2'));};Dialer[_0x796e('0x1d')][_0x796e('0xd4')]=function(_0x3c5a63,_0x4e79b9,_0x2b6854){this['createHistory'](_0x3c5a63)[_0x796e('0xb9')](loggerCatch(_0x4e79b9));this['moveContactManagedDialer'](_0x3c5a63)['catch'](loggerCatch(_0x2b6854));};Dialer[_0x796e('0x1d')][_0x796e('0xe3')]=function(_0x352dfe){var _0x2f0dae=this['uniqueId'][_0x352dfe[_0x796e('0xe4')]];var _0x26f867;if(!_['isNil'](_0x352dfe)&&!_['isNil'](_0x352dfe[_0x796e('0xe5')])&&!_['isNil'](_0x352dfe[_0x796e('0xe5')][_0x796e('0xe6')])&&_0x352dfe['exten']===_0x796e('0xe7')&&_0x2f0dae){if(_0x2f0dae['type']!=='ivr'&&this['voiceQueues'][_0x2f0dae[_0x796e('0xbd')]][_0x796e('0xe8')]&&_0x352dfe[_0x796e('0xe9')]==='HANGUP'){delete this['uniqueId'][_0x352dfe[_0x796e('0xe4')]];this[_0x796e('0xbb')](this[_0x796e('0x23')][_0x2f0dae['queue']]);this[_0x796e('0x23')][_0x2f0dae[_0x796e('0xbd')]][_0x796e('0x6a')]+=0x1;this[_0x796e('0x23')][_0x2f0dae[_0x796e('0xbd')]]['outboundAnswerAgiCallsDay']+=0x1;_0x26f867=new Hangup(_0x2f0dae,_0x352dfe);_0x26f867[_0x796e('0xb0')]=0x12;_0x26f867[_0x796e('0xb1')]=_0x796e('0xea');_0x26f867[_0x796e('0xeb')]='AMD';this['saveInDb'](_0x26f867,_0x796e('0xec'),'[syncHangupInAMD]');}if(_0x2f0dae[_0x796e('0x55')]!==_0x796e('0x83')&&this[_0x796e('0x23')][_0x2f0dae[_0x796e('0xbd')]][_0x796e('0xe8')]&&_0x352dfe[_0x796e('0xe9')]==='MACHINE'){delete this[_0x796e('0x2b')][_0x352dfe[_0x796e('0xe4')]];this[_0x796e('0xbb')](this[_0x796e('0x23')][_0x2f0dae[_0x796e('0xbd')]]);this['voiceQueues'][_0x2f0dae['queue']]['outboundAnswerCallsDay']+=0x1;this[_0x796e('0x23')][_0x2f0dae[_0x796e('0xbd')]][_0x796e('0x69')]+=0x1;_0x26f867=new Hangup(_0x2f0dae,_0x352dfe);_0x26f867[_0x796e('0xb0')]=0x13;_0x26f867[_0x796e('0xb1')]=_0x796e('0xed');_0x26f867[_0x796e('0xeb')]='AMD';_0x26f867[_0x796e('0xee')]=!![];this[_0x796e('0xd4')](_0x26f867,_0x796e('0xef'),_0x796e('0xf0'));}if(_0x2f0dae[_0x796e('0x55')]===_0x796e('0x83')&&this['campaigns'][_0x2f0dae['queue']][_0x796e('0xe8')]&&_0x352dfe[_0x796e('0xe9')]===_0x796e('0xf1')){delete this[_0x796e('0x2b')][_0x352dfe[_0x796e('0xe4')]];this[_0x796e('0xbb')](this[_0x796e('0x24')][_0x2f0dae[_0x796e('0xbd')]]);_0x26f867=new Hangup(_0x2f0dae,_0x352dfe);_0x26f867['state']=0x12;_0x26f867['statedesc']=_0x796e('0xea');_0x26f867[_0x796e('0xeb')]=_0x796e('0xf2');this[_0x796e('0xd4')](_0x26f867,_0x796e('0xf3'),'[syncHangupInAMDIvr]');}if(_0x2f0dae['type']===_0x796e('0x83')&&this[_0x796e('0x24')][_0x2f0dae[_0x796e('0xbd')]][_0x796e('0xe8')]&&_0x352dfe['value']==='MACHINE'){delete this[_0x796e('0x2b')][_0x352dfe[_0x796e('0xe4')]];this[_0x796e('0xbb')](this[_0x796e('0x24')][_0x2f0dae['queue']]);_0x26f867=new Hangup(_0x2f0dae,_0x352dfe);_0x26f867[_0x796e('0xb0')]=0x13;_0x26f867['statedesc']='Machine';_0x26f867[_0x796e('0xeb')]='AMD';_0x26f867['amd']=!![];this[_0x796e('0xd4')](_0x26f867,_0x796e('0xf4'),_0x796e('0xf5'));}}};Dialer['prototype'][_0x796e('0x39')]=function(_0x4ec23f){var _0x1d1a19=this[_0x796e('0x2b')][_0x4ec23f[_0x796e('0xe4')]];var _0x510fb6=this;var _0x3a2737;if(_0x1d1a19&&_0x1d1a19[_0x796e('0x55')]===_0x796e('0x83')){delete this[_0x796e('0x2b')][_0x4ec23f[_0x796e('0xe4')]];this[_0x796e('0xbb')](this[_0x796e('0x24')][_0x1d1a19['queue']]);this['campaigns'][_0x1d1a19[_0x796e('0xbd')]]['ivrAnswerCallsDay']+=0x1;_0x3a2737=new Hangup(_0x1d1a19,_0x4ec23f);this['createHistory'](_0x3a2737)[_0x796e('0xb9')](loggerCatch(_0x796e('0xf6')));this[_0x796e('0xcd')](_0x3a2737)[_0x796e('0xb9')](loggerCatch(_0x796e('0xf7')));}if(_0x1d1a19&&_0x1d1a19['type']!==_0x796e('0x83')&&isNotNull(this['voiceQueues'][_0x1d1a19[_0x796e('0xbd')]][_0x796e('0xf8')])){delete this[_0x796e('0x2b')][_0x4ec23f[_0x796e('0xe4')]];this['updateOriginated'](this['voiceQueues'][_0x1d1a19[_0x796e('0xbd')]]);this[_0x796e('0x23')][_0x1d1a19[_0x796e('0xbd')]][_0x796e('0x6a')]+=0x1;this[_0x796e('0x23')][_0x1d1a19[_0x796e('0xbd')]][_0x796e('0x69')]+=0x1;_0x3a2737=new Hangup(_0x1d1a19,_0x4ec23f);_0x3a2737[_0x796e('0xb0')]=0x10;_0x3a2737['statedesc']=_0x796e('0xf9');_0x3a2737['membername']=_0x796e('0xfa');this['createHistory'](_0x3a2737)[_0x796e('0xb9')](loggerCatch(_0x796e('0xf6')));this[_0x796e('0xcd')](_0x3a2737)['catch'](loggerCatch(_0x796e('0xf7')));}if(_0x1d1a19&&_0x1d1a19[_0x796e('0x55')]!==_0x796e('0x83')&&!isNotNull(this[_0x796e('0x23')][_0x1d1a19[_0x796e('0xbd')]][_0x796e('0xf8')])){delete this[_0x796e('0x2b')][_0x4ec23f[_0x796e('0xe4')]];this['updateOriginated'](this[_0x796e('0x23')][_0x1d1a19[_0x796e('0xbd')]]);this['voiceQueues'][_0x1d1a19['queue']][_0x796e('0x72')]+=0x1;_0x3a2737=new Hangup(_0x1d1a19,_0x4ec23f);_0x3a2737[_0x796e('0xb0')]=0xc;_0x3a2737['statedesc']=_0x4ec23f[_0x796e('0xfb')];_0x3a2737[_0x796e('0xeb')]=_0x796e('0xfc');this[_0x796e('0xcf')](_0x3a2737)[_0x796e('0xb9')](loggerCatch(_0x796e('0xf6')));this[_0x796e('0xcd')](_0x3a2737)[_0x796e('0xb9')](loggerCatch('[syncHangupIvr]'));}};Dialer[_0x796e('0x1d')][_0x796e('0x36')]=function(_0xf988d2){var _0x51bde9=this[_0x796e('0x2b')][_0xf988d2[_0x796e('0xe4')]];var _0x52d4c3=this;if(this[_0x796e('0x23')][_0xf988d2[_0x796e('0xbd')]]){if(_0x51bde9&&_0x51bde9[_0x796e('0x55')]!==_0x796e('0x83')){delete this[_0x796e('0x2b')][_0xf988d2[_0x796e('0xe4')]];this[_0x796e('0x23')][_0xf988d2[_0x796e('0xbd')]]['outboundAnswerCallsDay']+=0x1;var _0xa7e63c=new AgentComplete(_0x51bde9,_0xf988d2);if(_0xf988d2[_0x796e('0xfd')]===_0x796e('0xfe')){_0xa7e63c[_0x796e('0xff')]=this['voiceQueues'][_0xf988d2[_0x796e('0xbd')]][_0x796e('0x100')]&&this['voiceQueues'][_0xf988d2['queue']][_0x796e('0x101')]?moment()[_0x796e('0x80')]('YYYY-MM-DD\x20HH:mm:ss'):undefined;}this[_0x796e('0xcf')](_0xa7e63c)[_0x796e('0xb9')](loggerCatch(_0x796e('0x102')));this[_0x796e('0xcd')](_0xa7e63c)[_0x796e('0xb9')](loggerCatch(_0x796e('0x103')));}}};Dialer[_0x796e('0x1d')][_0x796e('0x104')]=function(_0x4d2efb){if(this['voiceQueues'][_0x4d2efb['queue']]){if(this[_0x796e('0x2b')][_0x4d2efb['uniqueid']]&&this['uniqueId'][_0x4d2efb[_0x796e('0xe4')]]['type']!=='ivr'){this[_0x796e('0xbb')](this[_0x796e('0x23')][_0x4d2efb[_0x796e('0xbd')]]);this[_0x796e('0x2b')][_0x4d2efb[_0x796e('0xe4')]][_0x796e('0x105')]=moment()[_0x796e('0x80')](_0x796e('0x106'));}}};Dialer[_0x796e('0x1d')]['queueCallerAbandonCreateState']=function(_0x580405){this[_0x796e('0xcf')](_0x580405)[_0x796e('0xb9')](loggerCatch(_0x796e('0x102')));this[_0x796e('0xcd')](_0x580405)[_0x796e('0xb9')](loggerCatch(_0x796e('0x107')));};Dialer[_0x796e('0x1d')][_0x796e('0x33')]=function(_0x7a25bd){var _0x168f5a=this[_0x796e('0x2b')][_0x7a25bd[_0x796e('0xe4')]];var _0x4d8505=this;if(this['voiceQueues'][_0x7a25bd[_0x796e('0xbd')]]){if(_0x168f5a&&_0x168f5a[_0x796e('0x55')]!==_0x796e('0x83')){delete this[_0x796e('0x2b')][_0x7a25bd[_0x796e('0xe4')]];this[_0x796e('0xbb')](this['voiceQueues'][_0x7a25bd['queue']]);_0x168f5a[_0x796e('0x108')]=moment()['format'](_0x796e('0x106'));var _0x4c319f=new QueueCallerAbandon(_0x168f5a,_0x7a25bd);if(getSeconds(_0x168f5a[_0x796e('0x108')],_0x168f5a[_0x796e('0x109')])>=_0x168f5a[_0x796e('0x10a')]){this[_0x796e('0x23')][_0x7a25bd[_0x796e('0xbd')]][_0x796e('0x10b')]+=0x1;this[_0x796e('0x23')][_0x7a25bd['queue']][_0x796e('0x10c')]+=0x1;this[_0x796e('0x23')][_0x7a25bd[_0x796e('0xbd')]][_0x796e('0x10d')]+=0x1;_0x4c319f[_0x796e('0xb0')]=0xa;_0x4c319f[_0x796e('0xb1')]=_0x796e('0x10e');_0x4c319f[_0x796e('0x10f')]=_0x796e('0x110');_0x4c319f[_0x796e('0xff')]=this[_0x796e('0x23')][_0x7a25bd[_0x796e('0xbd')]][_0x796e('0x100')]?moment()[_0x796e('0x80')]('YYYY-MM-DD\x20HH:mm:ss'):undefined;this[_0x796e('0x111')](_0x4c319f);}else{this[_0x796e('0x23')][_0x7a25bd[_0x796e('0xbd')]][_0x796e('0x75')]+=0x1;this[_0x796e('0x23')][_0x7a25bd['queue']][_0x796e('0x112')]+=0x1;_0x4c319f[_0x796e('0xb0')]=0xb;_0x4c319f[_0x796e('0xb1')]=_0x796e('0x113');_0x4c319f[_0x796e('0x10f')]=_0x796e('0x114');this[_0x796e('0x111')](_0x4c319f);}}}};Dialer['prototype'][_0x796e('0x3b')]=function(_0x3f760f){if(this[_0x796e('0x29')][_0x3f760f[_0x796e('0xe4')]]){this[_0x796e('0x29')][_0x3f760f['uniqueid']][_0x796e('0xb8')]=_0x3f760f[_0x796e('0xb8')];}if(this[_0x796e('0x2b')][_0x3f760f['uniqueid']]){this[_0x796e('0x2b')][_0x3f760f[_0x796e('0xe4')]][_0x796e('0xb8')]=_0x3f760f[_0x796e('0xb8')];}};Dialer[_0x796e('0x1d')]['syncQueueMember']=function(_0x37aa95){if(strategy[this[_0x796e('0x23')][this[_0x796e('0x29')][_0x37aa95['actionid']]['queue']][_0x796e('0x115')]]===_0x796e('0x1c')){if(this[_0x796e('0x29')][_0x37aa95[_0x796e('0x116')]]&&_[_0x796e('0xb7')](this['actions'][_0x37aa95[_0x796e('0x116')]][_0x796e('0x117')])&&_0x37aa95['status']==='1'&&_0x37aa95[_0x796e('0x118')]==='0'){if(this['agents'][_0x37aa95[_0x796e('0x119')]]){if(!this[_0x796e('0x25')][_0x37aa95[_0x796e('0x119')]][_0x796e('0x117')]){this['agents'][_0x37aa95[_0x796e('0x119')]][_0x796e('0x117')]=!![];this[_0x796e('0x29')][_0x37aa95[_0x796e('0x116')]][_0x796e('0x117')]=!![];this['actions'][_0x37aa95[_0x796e('0x116')]][_0x796e('0x119')]=_0x37aa95['stateinterface'];}}}}else if((strategy[this[_0x796e('0x23')][this[_0x796e('0x29')][_0x37aa95[_0x796e('0x116')]][_0x796e('0xbd')]][_0x796e('0x115')]]||_0x796e('0x1b'))==='rrmemory'){if(this['actions'][_0x37aa95[_0x796e('0x116')]]){if(this['agents'][_0x37aa95[_0x796e('0x119')]]){this[_0x796e('0x29')][_0x37aa95['actionid']][_0x796e('0x119')]=_0x37aa95[_0x796e('0x119')];if(_[_0x796e('0xb7')](this['queueBooked'][this['actions'][_0x37aa95[_0x796e('0x116')]][_0x796e('0xbd')]])){this['queueBooked'][this[_0x796e('0x29')][_0x37aa95[_0x796e('0x116')]][_0x796e('0xbd')]]=[];}this[_0x796e('0x2f')][this[_0x796e('0x29')][_0x37aa95[_0x796e('0x116')]][_0x796e('0xbd')]][_0x796e('0x11a')](_['merge'](_[_0x796e('0xd6')](this[_0x796e('0x29')][_0x37aa95[_0x796e('0x116')]],[_0x796e('0x11b'),_0x796e('0x119')]),{'status':_0x37aa95['status'],'paused':_0x37aa95[_0x796e('0x118')]}));}}}};function unlockQueueStatus(_0x324ac8,_0x4f6672){setTimeout(function(){if(_['isUndefined'](_0x324ac8['queueStatusComplete'])){loggerBooked['error'](_0x796e('0x11c'),_0x4f6672);}_0x324ac8[_0x796e('0x11d')]=!![];loggerBooked[_0x796e('0x86')](_0x796e('0x11e'),_0x4f6672,JSON[_0x796e('0x51')](_['pick'](_0x324ac8,[_0x796e('0x46'),'queueStatusComplete'])));},0x1f3);}Dialer['prototype'][_0x796e('0x40')]=function(_0x5176ef){var _0x4b6f24=this;var _0x34748a=_0x4b6f24[_0x796e('0x23')][_0x4b6f24[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xbd')]];if(strategy[this[_0x796e('0x23')][this[_0x796e('0x29')][_0x5176ef['actionid']][_0x796e('0xbd')]][_0x796e('0x115')]]===_0x796e('0x1c')){if(this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]&&this['actions'][_0x5176ef[_0x796e('0x116')]][_0x796e('0x119')]){this[_0x796e('0x22')][_0x796e('0x11f')](this[_0x796e('0x29')][_0x5176ef['actionid']][_0x796e('0x11b')],this[_0x796e('0x29')][_0x5176ef['actionid']][_0x796e('0x119')])[_0x796e('0xb9')](function(_0x2481a5){logger[_0x796e('0x9e')]('[Catch][Preview][syncQueueStatusComplete]',util[_0x796e('0x9f')](_0x2481a5,{'showHidden':![],'depth':null}));})['finally'](function(){_0x4b6f24[_0x796e('0xbb')](_0x4b6f24[_0x796e('0x23')][_0x4b6f24[_0x796e('0x29')][_0x5176ef['actionid']][_0x796e('0xbd')]]);_0x4b6f24[_0x796e('0x25')][_0x4b6f24[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]['stateinterface']][_0x796e('0x117')]=![];delete _0x4b6f24['actions'][_0x5176ef['actionid']];unlockQueueStatus(_0x34748a);});}else{this[_0x796e('0xbb')](this['voiceQueues'][this[_0x796e('0x29')][_0x5176ef['actionid']][_0x796e('0xbd')]]);this[_0x796e('0xc8')]({'active':![],'ContactId':this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xd7')],'ListId':this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xd8')],'VoiceQueueId':this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xda')]||undefined,'CampaignId':this[_0x796e('0x29')][_0x5176ef['actionid']][_0x796e('0xdb')]||undefined})[_0x796e('0xb9')](loggerCatch('[unlock][syncQueueStatusComplete]'));delete this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]];unlockQueueStatus(_0x34748a);}}else if((strategy[this[_0x796e('0x23')][this['actions'][_0x5176ef[_0x796e('0x116')]]['queue']]['strategy']]||'rrmemory')==='rrmemory'){var _0x2c7012;if(this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]&&!_['isEmpty'](this[_0x796e('0x2f')][this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]['queue']])){if(this[_0x796e('0x30')][_0x4b6f24[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]['queue']]){this[_0x796e('0x30')][_0x4b6f24[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xbd')]]=this[_0x796e('0x30')][this[_0x796e('0x29')][_0x5176ef['actionid']]['queue']]?this['queueBookedRR'][this['actions'][_0x5176ef[_0x796e('0x116')]]['queue']]:this[_0x796e('0x2f')][this['actions'][_0x5176ef[_0x796e('0x116')]][_0x796e('0xbd')]]?this[_0x796e('0x2f')][this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xbd')]][_0x796e('0x120')]||0x0:0x0;}this['queueBooked'][this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xbd')]][_0x796e('0x120')]=this[_0x796e('0x30')][this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xbd')]];for(var _0x1e0af8=0x0;_0x1e0af8<this[_0x796e('0x2f')][this['actions'][_0x5176ef[_0x796e('0x116')]]['queue']]['length'];_0x1e0af8+=0x1){_0x2c7012=rr(this[_0x796e('0x2f')][this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]['queue']]);this[_0x796e('0x30')][_0x4b6f24[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]['queue']]=this['queueBooked'][this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]['queue']][_0x796e('0x120')];if(_0x2c7012[_0x796e('0xdf')]==='1'&&_0x2c7012[_0x796e('0x118')]==='0'){break;}}if(!_[_0x796e('0xb7')](_0x2c7012)){this['agents'][_0x2c7012[_0x796e('0x119')]][_0x796e('0x121')]=_[_0x796e('0x43')](this[_0x796e('0x25')][_0x2c7012['stateinterface']][_0x796e('0x121')])?!![]:this[_0x796e('0x25')][_0x2c7012['stateinterface']][_0x796e('0x121')];}loggerBooked[_0x796e('0x86')](_0x796e('0x122'),_0x5176ef[_0x796e('0x116')],_0x796e('0x123'),JSON['stringify'](_[_0x796e('0xd6')](this[_0x796e('0x25')][_0x2c7012[_0x796e('0x119')]],[_0x796e('0x46'),_0x796e('0x121')])),'contactAgent-idHopper:\x20',JSON[_0x796e('0x51')](_0x2c7012[_0x796e('0x11b')]));if(!_['isNil'](_0x2c7012)&&_0x2c7012[_0x796e('0xdf')]==='1'&&_0x2c7012[_0x796e('0x118')]==='0'&&this[_0x796e('0x25')][_0x2c7012[_0x796e('0x119')]][_0x796e('0x121')]){this[_0x796e('0x25')][_0x2c7012[_0x796e('0x119')]][_0x796e('0x121')]=![];this[_0x796e('0x2f')][_0x4b6f24[_0x796e('0x29')][_0x5176ef['actionid']][_0x796e('0xbd')]]=[];this[_0x796e('0x22')][_0x796e('0x11f')](_0x2c7012['idHopper'],_0x2c7012[_0x796e('0x119')])[_0x796e('0xb9')](function(_0x3b1a04){logger[_0x796e('0x9e')]('[Catch][Preview][syncQueueStatusComplete]',util[_0x796e('0x9f')](_0x3b1a04,{'showHidden':![],'depth':null}));})[_0x796e('0x20')](function(){_0x4b6f24[_0x796e('0xbb')](_0x4b6f24[_0x796e('0x23')][_0x4b6f24['actions'][_0x5176ef[_0x796e('0x116')]]['queue']]);setTimeout(function(){_0x4b6f24[_0x796e('0x25')][_0x2c7012[_0x796e('0x119')]][_0x796e('0x121')]=!![];loggerBooked['info'](_0x796e('0x124'),_0x5176ef[_0x796e('0x116')],'Agent:\x20',JSON[_0x796e('0x51')](_['pick'](_0x4b6f24[_0x796e('0x25')][_0x2c7012[_0x796e('0x119')]],[_0x796e('0x46'),_0x796e('0x121')])),_0x796e('0x125'),JSON['stringify'](_0x2c7012[_0x796e('0x11b')]));},0xc7);delete _0x4b6f24[_0x796e('0x29')][_0x5176ef['actionid']];unlockQueueStatus(_0x34748a,_0x5176ef['actionid']);});}else{loggerBooked[_0x796e('0x86')](_0x796e('0x126'));this[_0x796e('0xbb')](this[_0x796e('0x23')][this['actions'][_0x5176ef['actionid']][_0x796e('0xbd')]]);this[_0x796e('0xc8')]({'active':![],'ContactId':this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xd7')],'ListId':this['actions'][_0x5176ef[_0x796e('0x116')]][_0x796e('0xd8')],'VoiceQueueId':this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xda')]||undefined,'CampaignId':this['actions'][_0x5176ef[_0x796e('0x116')]][_0x796e('0xdb')]||undefined})[_0x796e('0xb9')](loggerCatch('[unlock][syncQueueStatusComplete]'));delete this[_0x796e('0x29')][_0x5176ef['actionid']];unlockQueueStatus(_0x34748a);}}else{loggerBooked[_0x796e('0x86')]('[booked][unlock2]');this[_0x796e('0xbb')](this['voiceQueues'][this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]['queue']]);this[_0x796e('0xc8')]({'active':![],'ContactId':this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]['ContactId'],'ListId':this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xd8')],'VoiceQueueId':this['actions'][_0x5176ef['actionid']][_0x796e('0xda')]||undefined,'CampaignId':this['actions'][_0x5176ef[_0x796e('0x116')]][_0x796e('0xdb')]||undefined})[_0x796e('0xb9')](loggerCatch(_0x796e('0x127')));delete this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]];unlockQueueStatus(_0x34748a);}}else{loggerBooked[_0x796e('0x86')]('[booked][unlock3]');this[_0x796e('0xbb')](this[_0x796e('0x23')][this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xbd')]]);this['rescheduleContact']({'active':![],'ContactId':this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xd7')],'ListId':this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]]['ListId'],'VoiceQueueId':this[_0x796e('0x29')][_0x5176ef[_0x796e('0x116')]][_0x796e('0xda')]||undefined,'CampaignId':this[_0x796e('0x29')][_0x5176ef['actionid']][_0x796e('0xdb')]||undefined})[_0x796e('0xb9')](loggerCatch('[unlock3][syncQueueStatusComplete]'));delete this['actions'][_0x5176ef[_0x796e('0x116')]];unlockQueueStatus(_0x34748a);}};Dialer[_0x796e('0x1d')][_0x796e('0x41')]=function(){var _0xe585fc=this;setInterval(function(){_0xe585fc[_0x796e('0x128')]();},0x3e8);};Dialer[_0x796e('0x1d')]['checkIsTrunkReachable']=function(_0x4db162){var _0x3cd15e=this;return function(){if(!_0x3cd15e[_0x796e('0x129')](_0x4db162['Trunk'])){if(!_0x3cd15e[_0x796e('0x129')](_0x4db162[_0x796e('0x12a')])){_0x4db162[_0x796e('0x44')]='TRUNK_IS_NOT_REACHABLE';throw _0x4db162[_0x796e('0x46')]+_0x796e('0x12b');}}};};Dialer[_0x796e('0x1d')][_0x796e('0x12c')]=function(_0x24846a,_0x1e3ba4,_0x27dcc6,_0x487f7e){var _0x5e8138=this;return function(){var _0x5170be=!![];return _0x5e8138[_0x796e('0x12d')](_0x24846a,_0x1e3ba4,_0x27dcc6,_0x487f7e,_0x5170be);};};Dialer[_0x796e('0x1d')][_0x796e('0x12e')]=function(_0x33f31f,_0xda1783,_0x20cd01,_0x5f4190){var _0x12398a=this;return function(){var _0x19de1c=![];return _0x12398a[_0x796e('0x12d')](_0x33f31f[_0x796e('0x4d')],_0xda1783,_0x20cd01,_0x5f4190,_0x19de1c);};};Dialer[_0x796e('0x1d')][_0x796e('0x12d')]=function(_0x719e41,_0x1aa89b,_0x58e077,_0x4815a0,_0xf0ac5d){var _0x50c8be=[];return new BPromise(function(_0xc9964b,_0x7686fa){if(!isNotNull(_0x719e41)){_0x4815a0[_0x796e('0x44')]=_0x796e('0x4a');return _0x7686fa(msgResponse('ifTime','Failure',_0x58e077+'\x20Intervals\x20is\x20null\x20'));}if(_[_0x796e('0x4e')](_0x719e41)){_0x4815a0[_0x796e('0x44')]=_0x796e('0x12f');return _0x7686fa(msgResponse(_0x796e('0x12d'),'Failure',_0x58e077+_0x796e('0x130')));}if(_0x1aa89b&&_[_0x796e('0x43')](config['timezones'][_0x1aa89b])){_0x4815a0[_0x796e('0x44')]=_0x796e('0x131');return _0x7686fa(msgResponse(_0x796e('0x12d'),'Failure',_0x58e077+_0x796e('0x132')+_0x1aa89b));}if(_[_0x796e('0x133')](_0x719e41)){for(var _0x62ae99=0x0;_0x62ae99<_0x719e41[_0x796e('0xa1')];_0x62ae99+=0x1){_0x50c8be['push'](ami[_0x796e('0x134')]({'action':_0x796e('0x135'),'command':util[_0x796e('0x80')](_0x796e('0x136'),_0x719e41[_0x62ae99]['interval'],!_[_0x796e('0x43')](config[_0x796e('0x137')][_0x1aa89b])?_0x1aa89b:'')})['then'](function(_0x338800){return _0x338800['content'][_0x796e('0x138')](_0x796e('0x139'))>=0x0?!![]:![];})['catch'](myreject(_0x7686fa)));}}else{_0x50c8be['push'](ami[_0x796e('0x134')]({'action':_0x796e('0x135'),'command':util[_0x796e('0x80')](_0x796e('0x136'),_0x719e41,!_[_0x796e('0x43')](config[_0x796e('0x137')][_0x1aa89b])?_0x1aa89b:'')})[_0x796e('0xc0')](function(_0x496eaf){return _0x496eaf[_0x796e('0x13a')][_0x796e('0x138')](_0x796e('0x139'))>=0x0?!![]:![];})[_0x796e('0xb9')](myreject(_0x7686fa)));}BPromise[_0x796e('0x13b')](_0x50c8be)[_0x796e('0xc0')](function(_0x17c81e){var _0x21a379=_[_0x796e('0x13c')](_0x17c81e);if(_0x21a379){return _0xc9964b(_0x21a379);}else{_0x4815a0[_0x796e('0x44')]=_0xf0ac5d?'GLOBAL_INTERVAL_IS_OVERTIME':'INTERVAL_IS_OVERTIME';return _0x7686fa(msgResponse(_0x796e('0x13d'),_0x796e('0x13e'),_0x796e('0x13f')+_0xf0ac5d+'\x20'+_0x58e077+_0x796e('0x140')+util[_0x796e('0x9f')](_0x719e41,{'showHidden':![],'depth':null})+_0x796e('0x141')+_0x1aa89b));}})['catch'](function(_0x31c677){return _0x7686fa(msgResponse(_0x796e('0x12d'),_0x796e('0x13e'),JSON['stringify'](_0x31c677)));});});};Dialer['prototype'][_0x796e('0x142')]=function(_0x446d01){var _0xa42cda=this;return function(){switch(_0x446d01[_0x796e('0x65')]){case _0x796e('0x143'):freeVariablesPredictive(_0x446d01);_0xa42cda[_0x796e('0x144')](_0x446d01,0x1);break;case _0x796e('0x145'):freeVariablesPredictive(_0x446d01);_0xa42cda[_0x796e('0x144')](_0x446d01,_0x446d01[_0x796e('0x146')]);break;case _0x796e('0x9'):_0xa42cda['predictive'](_0x446d01);break;case'booked':freeVariablesPredictive(_0x446d01);_0xa42cda['handlePower'](_0x446d01,0x1);break;default:freeVariablesPredictive(_0x446d01);logger[_0x796e('0x9e')](_0x796e('0x147'),_0x446d01['name'],'method\x20not\x20recognized');}};};Dialer[_0x796e('0x1d')][_0x796e('0x148')]=function(_0x3fa0aa){var _0x21bd8e=this;return function(){_0x21bd8e[_0x796e('0x149')](_0x3fa0aa);};};Dialer['prototype'][_0x796e('0xb')]=function(_0x2f0b84){var _0x57cfe5=this;if(isNotPreview(_0x2f0b84[_0x796e('0x65')])){if(isVoiceQueueOutbound(_0x2f0b84['type'])&&isActive(_0x2f0b84[_0x796e('0x64')])){_0x2f0b84[_0x796e('0xaa')]=!![];BPromise[_0x796e('0xbf')]()[_0x796e('0xc0')](checkIsLoggedIn(_0x2f0b84,_0x2f0b84[_0x796e('0x59')]))[_0x796e('0xc0')](checkIsActive(_0x2f0b84,_0x2f0b84[_0x796e('0x64')]))['then'](checkInterval(_0x2f0b84))['then'](_0x57cfe5['checkIsTrunkReachable'](_0x2f0b84))['then'](_0x57cfe5[_0x796e('0x12c')](_0x2f0b84[_0x796e('0x14a')],_0x2f0b84['dialTimezone'],_0x2f0b84[_0x796e('0x46')],_0x2f0b84))[_0x796e('0xc0')](_0x57cfe5[_0x796e('0x12e')](_0x2f0b84[_0x796e('0x4c')],_0x2f0b84[_0x796e('0x14b')],_0x2f0b84['name'],_0x2f0b84))['then'](_0x57cfe5[_0x796e('0x142')](_0x2f0b84))[_0x796e('0xb9')](loggerCatchQueueSummary(_0x796e('0x14c'),_0x2f0b84));}else{notSendMessagesQueue(_0x2f0b84);}}else{freeVariablesPredictive(_0x2f0b84);}};Dialer[_0x796e('0x1d')][_0x796e('0x128')]=function(){var _0x13c766=this;var _0x19b63c;for(var _0x5aeffd in this[_0x796e('0x24')]){if(this[_0x796e('0x24')]['hasOwnProperty'](_0x5aeffd)){_0x19b63c=this[_0x796e('0x24')][_0x5aeffd];if(isCampaignIvr(_0x19b63c['type'])&&isActive(_0x19b63c[_0x796e('0x7e')])){_0x19b63c[_0x796e('0xaa')]=!![];BPromise[_0x796e('0xbf')]()['then'](checkIsActive(_0x19b63c,_0x19b63c[_0x796e('0x7e')]))['then'](checkInterval(_0x19b63c))[_0x796e('0xc0')](_0x13c766[_0x796e('0x14d')](_0x19b63c))[_0x796e('0xc0')](_0x13c766[_0x796e('0x12c')](_0x19b63c[_0x796e('0x14a')],_0x19b63c[_0x796e('0x14b')],_0x19b63c[_0x796e('0x46')],_0x19b63c))[_0x796e('0xc0')](_0x13c766[_0x796e('0x12e')](_0x19b63c[_0x796e('0x4c')],_0x19b63c[_0x796e('0x14b')],_0x19b63c[_0x796e('0x46')],_0x19b63c))[_0x796e('0xc0')](_0x13c766[_0x796e('0x148')](_0x19b63c))[_0x796e('0xb9')](loggerCatchQueueSummary(_0x796e('0x14e'),_0x19b63c));}else{notSendMessagesCampaign(_0x19b63c);}}}};function getCallerIdRandom(_0x74d16b,_0x1a2a07){var _0x255ea1,_0x628549,_0x4779b0;if(_0x1a2a07<=0x0){_0x1a2a07=0x1;}_0x255ea1=new RegExp(_0x796e('0x14f')+_0x1a2a07+'}$');_0x628549=Math['pow'](0xa,_0x1a2a07-0x1);_0x4779b0=Math[_0x796e('0x150')](0xa,_0x1a2a07)-0x1;return util[_0x796e('0x80')]('%s',_[_0x796e('0x151')](_0x74d16b,_0x255ea1,_[_0x796e('0x152')](_0x628549,_0x4779b0)));}function extractCalleridName(_0x1b14ad){var _0x42c48f=_0x1b14ad['match'](/"(.*?)"/);return _0x42c48f?_0x42c48f[0x1]:_0x1b14ad;}function extractCalleridNumber(_0x48b228){var _0x2df2b8=_0x48b228[_0x796e('0x153')](/<(.*?)>/);return _0x2df2b8?_0x2df2b8[0x1]:_0x48b228;}Dialer[_0x796e('0x1d')][_0x796e('0x154')]=function(_0x9392,_0x5d5dde){var _0x152f32=this;var _0x33b1f6=uuid['v4']();this[_0x796e('0x29')][_0x33b1f6]=new Action(_0x9392,_0x5d5dde,_0x33b1f6);return new BPromise(function(_0x5dd220,_0x5b3d01){if(_['isUndefined'](_0x9392)&&'object'!==typeof _0x9392){return _0x5b3d01(msgResponse(_0x796e('0x155'),_0x796e('0x13e'),_0x796e('0x156')));}if(_[_0x796e('0x43')](_0x5d5dde[_0x796e('0x157')]['phone'])||_0x5d5dde[_0x796e('0x157')][_0x796e('0x158')]===null){return _0x5b3d01(msgResponse(_0x796e('0x155'),_0x796e('0x13e'),_0x796e('0x159')));}var _0x2b4f17={'XMD-CALLERID':_0x152f32[_0x796e('0x29')][_0x33b1f6][_0x796e('0x15a')](),'XMD-AGI':_0x9392[_0x796e('0xf8')]?util['format'](_0x796e('0x15b'),ipAgi,_0x9392[_0x796e('0xf8')]):_0x796e('0x15c'),'XMD-AGIAFTER':_0x9392['dialQueueProject2']?util[_0x796e('0x80')]('\x22agi://%s/square,%s\x22',ipAgi,_0x9392[_0x796e('0x100')]):_0x796e('0x15c'),'XMD-QUEUE':_0x9392['type']==='outbound'?util[_0x796e('0x80')](_0x796e('0x15d'),_0x9392[_0x796e('0x46')],_0x9392[_0x796e('0x15e')]||'',_0x9392['dialAgiAfterHangupAgent']?'c':'',_0x9392[_0x796e('0x10a')]||0x3):'NONE','XMD-CONTACTID':_0x5d5dde['ContactId'],'XMD-CDRTYPE':_0x796e('0x7'),'CALLERID(all)':_0x152f32[_0x796e('0x29')][_0x33b1f6][_0x796e('0x15a')](),'XMD-AMD':_0x9392[_0x796e('0xe8')]?'ACTIVE':'NONE','XMD-DESTINATION':_0x796e('0xe7')};if(_0x9392[_0x796e('0xe8')]){_0x2b4f17[_0x796e('0x15f')]=_0x9392[_0x796e('0x160')]||0x9c4;_0x2b4f17['XMD-AMDGREETING']=_0x9392[_0x796e('0x161')]||0x5dc;_0x2b4f17[_0x796e('0x162')]=_0x9392['dialAMDAfterGreetingSilence']||0x320;_0x2b4f17[_0x796e('0x163')]=_0x9392[_0x796e('0x164')]||0x1388;_0x2b4f17[_0x796e('0x165')]=_0x9392[_0x796e('0x166')]||0x64;_0x2b4f17['XMD-AMDBETWEENWORDSSILENCE']=_0x9392[_0x796e('0x167')]||0x32;_0x2b4f17[_0x796e('0x168')]=_0x9392['dialAMDMaximumNumberOfWords']||0x3;_0x2b4f17[_0x796e('0x169')]=_0x9392[_0x796e('0x16a')]||0x100;_0x2b4f17[_0x796e('0x16b')]=_0x9392[_0x796e('0x16c')]||0x1388;}if(_0x9392[_0x796e('0x55')]==='outbound'){_0x2b4f17[_0x796e('0x16d')]=_0x5d5dde[_0x796e('0xda')];}else{_0x2b4f17[_0x796e('0x16e')]=_0x5d5dde[_0x796e('0xdb')];}for(var _0x2aa54d in _0x5d5dde[_0x796e('0x157')]){if(_0x5d5dde[_0x796e('0x157')][_0x796e('0xa2')](_0x2aa54d)){if(isNotNull(_0x5d5dde[_0x796e('0x157')][_0x2aa54d])&&_0x2aa54d!=='id'&&_0x2aa54d!==_0x796e('0x16f')&&_0x2aa54d!==_0x796e('0x170')&&_0x2aa54d!==_0x796e('0x171')){_0x2b4f17[util[_0x796e('0x80')]('%s%s',_0x796e('0x172'),_[_0x796e('0x173')](_0x2aa54d))]=_0x5d5dde[_0x796e('0x157')][_0x2aa54d];}}}var _0x1a581a=_0x152f32[_0x796e('0x129')](_0x9392['Trunk'])?getCallerId(_0x9392[_0x796e('0x7d')]['callerid'],_0x9392[_0x796e('0x174')],_0x9392[_0x796e('0x175')]>0x0?getCallerIdRandom(_0x9392[_0x796e('0x66')],_0x9392['dialRandomLastDigitCallerIdNumber']):_0x9392[_0x796e('0x66')]):getCallerId(_[_0x796e('0xb7')](_0x9392[_0x796e('0x12a')])?_0x9392[_0x796e('0x7d')][_0x796e('0x7f')]:_0x9392[_0x796e('0x12a')][_0x796e('0x7f')],_0x9392[_0x796e('0x174')],_0x9392[_0x796e('0x175')]>0x0?getCallerIdRandom(_0x9392[_0x796e('0x66')],_0x9392[_0x796e('0x175')]):_0x9392['dialOriginateCallerIdNumber']);if(_0x1a581a){_0x2b4f17['XMD-ORIGINATECALLERIDNAME']=_0x152f32[_0x796e('0x29')][_0x33b1f6][_0x796e('0x176')]=extractCalleridName(_0x1a581a);_0x2b4f17[_0x796e('0x177')]=_0x152f32['actions'][_0x33b1f6][_0x796e('0x178')]=extractCalleridNumber(_0x1a581a);}return ami[_0x796e('0x134')]({'actionid':_0x33b1f6,'action':'originate','channel':_0x152f32[_0x796e('0x129')](_0x9392['Trunk'])?util[_0x796e('0x80')](_0x796e('0x179'),_0x9392['Trunk'][_0x796e('0x46')],isNotNull(_0x9392['dialPrefix'])?_0x9392[_0x796e('0x68')][_0x796e('0x17a')]()||'':'',_0x9392[_0x796e('0x17b')]>0x0?_0x5d5dde[_0x796e('0x157')][_0x796e('0x158')][_0x796e('0x17c')](_0x9392[_0x796e('0x17b')]):_0x5d5dde['Contact'][_0x796e('0x158')]):util[_0x796e('0x80')](_0x796e('0x179'),_[_0x796e('0xb7')](_0x9392[_0x796e('0x12a')])?_0x9392[_0x796e('0x7d')][_0x796e('0x46')]:_0x9392[_0x796e('0x12a')]['name'],isNotNull(_0x9392['dialPrefix'])?_0x9392[_0x796e('0x68')]['trim']()||'':'',_0x9392[_0x796e('0x17b')]>0x0?_0x5d5dde[_0x796e('0x157')][_0x796e('0x158')][_0x796e('0x17c')](_0x9392[_0x796e('0x17b')]):_0x5d5dde['Contact']['phone']),'callerid':_0x1a581a,'Exten':'xcally-motion-dialer','Context':_0x796e('0x17d'),'Priority':'1','variable':_0x2b4f17,'timeout':(_0x9392[_0x796e('0x67')]||0x1e)*0x3e8,'async':!![],'channelid':_0x33b1f6})[_0x796e('0xc0')](function(_0x32bae1){return _0x5dd220(_0x32bae1);})['catch'](function(_0x49ee32){_0x9392['outboundOriginateFailureCallsDay']+=0x1;var _0x4850c8=new History(_0x152f32[_0x796e('0x29')][_0x33b1f6]);logger['error'](util[_0x796e('0x80')](_0x796e('0x17e'),JSON[_0x796e('0x51')](_0x49ee32)));_0x4850c8[_0x796e('0xb0')]=0xe;_0x4850c8[_0x796e('0xb1')]='OriginateError';_0x4850c8['starttime']=moment()[_0x796e('0x80')](_0x796e('0x106'));_0x4850c8[_0x796e('0xb2')]=_0x4850c8[_0x796e('0xb3')];_0x152f32[_0x796e('0xcf')](_0x4850c8)['catch'](loggerCatch(_0x796e('0x17f')));_0x152f32[_0x796e('0xcd')](_0x4850c8)[_0x796e('0xb9')](loggerCatch('[originate][error]'))[_0x796e('0x20')](function(){delete _0x152f32['actions'][_0x33b1f6];return _0x5b3d01(msgResponse(_0x796e('0x155'),_0x796e('0x50'),_0x796e('0x180')));});});});};Dialer[_0x796e('0x1d')][_0x796e('0x34')]=function(_0x1823e2){var _0x4f712e=this[_0x796e('0x29')][_0x1823e2['actionid']];var _0x13ce97=this;if(_0x4f712e){delete this[_0x796e('0x29')][_0x1823e2['actionid']];_0x4f712e[_0x796e('0x109')]=moment()['format'](_0x796e('0x106'));var _0x1a42b4=_0x4f712e['type']==='ivr'?this[_0x796e('0x24')][_0x4f712e[_0x796e('0xbd')]]:this[_0x796e('0x23')][_0x4f712e[_0x796e('0x181')]()];if(!this[_0x796e('0xde')](_0x1823e2[_0x796e('0x182')])){this[_0x796e('0xbb')](_0x1a42b4);return this[_0x796e('0x183')](_0x4f712e,_0x1a42b4,_0x1823e2)[_0x796e('0xc0')](function(_0x303e4a){})['catch'](loggerCatch('[callProgressDetecting]\x20'));}else{this['uniqueId'][_0x1823e2[_0x796e('0xe4')]]=_0x4f712e;}}};Dialer[_0x796e('0x1d')][_0x796e('0x184')]=function(_0x269d9b,_0x237fde,_0x3a1eb3){var _0x918cb3=new History(_0x237fde);if(_0x918cb3[_0x796e('0x185')]+_0x918cb3[_0x796e('0x186')]+_0x918cb3[_0x796e('0x187')]>=_0x3a1eb3[_0x796e('0x188')]-0x1){return!![];}switch(_0x269d9b){case 0x3:if(_0x918cb3[_0x796e('0x187')]>=_0x3a1eb3[_0x796e('0x189')]-0x1){return!![];}else{this['rescheduleContact']({'active':![],'countnoanswerretry':_0x918cb3[_0x796e('0x187')]+=0x1,'scheduledat':moment()[_0x796e('0x18a')](_0x3a1eb3[_0x796e('0x18b')],_0x796e('0x18c'))[_0x796e('0x80')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x918cb3[_0x796e('0xd7')],'ListId':_0x918cb3[_0x796e('0xd8')],'VoiceQueueId':_0x918cb3['VoiceQueueId']||undefined,'CampaignId':_0x918cb3[_0x796e('0xdb')]||undefined})[_0x796e('0xb9')](loggerCatch(_0x796e('0x18d')));}break;case 0x5:if(_0x918cb3[_0x796e('0x185')]>=_0x3a1eb3['dialBusyMaxRetry']-0x1){return!![];}else{this['rescheduleContact']({'active':![],'countbusyretry':_0x918cb3[_0x796e('0x185')]+=0x1,'scheduledat':moment()[_0x796e('0x18a')](_0x3a1eb3[_0x796e('0x18e')],_0x796e('0x18c'))[_0x796e('0x80')](_0x796e('0x106')),'ContactId':_0x918cb3['ContactId'],'ListId':_0x918cb3[_0x796e('0xd8')],'VoiceQueueId':_0x918cb3[_0x796e('0xda')]||undefined,'CampaignId':_0x918cb3[_0x796e('0xdb')]||undefined})[_0x796e('0xb9')](loggerCatch(_0x796e('0x18f')));}break;case 0x8:if(_0x918cb3[_0x796e('0x186')]>=_0x3a1eb3[_0x796e('0x190')]-0x1){return!![];}else{this[_0x796e('0xc8')]({'active':![],'countcongestionretry':_0x918cb3[_0x796e('0x186')]+=0x1,'scheduledat':moment()[_0x796e('0x18a')](_0x3a1eb3[_0x796e('0x191')],_0x796e('0x18c'))[_0x796e('0x80')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x918cb3['ContactId'],'ListId':_0x918cb3[_0x796e('0xd8')],'VoiceQueueId':_0x918cb3[_0x796e('0xda')]||undefined,'CampaignId':_0x918cb3[_0x796e('0xdb')]||undefined})[_0x796e('0xb9')](loggerCatch(_0x796e('0x192')));}break;default:return!![];}};Dialer[_0x796e('0x1d')][_0x796e('0x183')]=function(_0x2932c9,_0x666a9b,_0x354eaa){var _0x3396ae=this;var _0x2bbf7f=new History(_0x2932c9);return new BPromise(function(_0xdbdc4,_0x4473c3){if(_[_0x796e('0x43')](_0x666a9b)&&_0x796e('0x193')!==typeof _0x666a9b){return _0x4473c3(msgResponse(_0x796e('0x194'),_0x796e('0x13e'),_0x796e('0x195')));}if(_[_0x796e('0x43')](_0x354eaa)&&_0x796e('0x193')!==typeof _0x354eaa){return _0x4473c3(msgResponse(_0x796e('0x194'),_0x796e('0x13e'),'evt\x20is\x20undefine'));}switch(_0x354eaa[_0x796e('0xfd')]){case'0':_0x666a9b[_0x796e('0x6f')]+=0x1;_0x2bbf7f[_0x796e('0xb0')]=0x0;_0x2bbf7f[_0x796e('0xb1')]=_0x796e('0x196');_0x3396ae[_0x796e('0xcf')](_0x2bbf7f)[_0x796e('0xb9')](loggerCatch('[syncAgentComplete][createHistory][0]'));if(_0x3396ae[_0x796e('0x184')](0x0,_0x2932c9,_0x666a9b)){if(_0x2bbf7f[_0x796e('0x185')]+_0x2bbf7f[_0x796e('0x186')]+_0x2bbf7f[_0x796e('0x187')]>=_0x666a9b[_0x796e('0x188')]){_0x3396ae['stateGlobal'](_0x2bbf7f,_0xdbdc4,_0x4473c3,_0x796e('0x197'));}else{_0x3396ae[_0x796e('0x198')](_0x2bbf7f,_0xdbdc4,_0x4473c3,_0x796e('0x197'));}}break;case'3':_0x666a9b[_0x796e('0x6e')]+=0x1;_0x2bbf7f[_0x796e('0xb0')]=0x3;_0x2bbf7f[_0x796e('0xb1')]=_0x796e('0x199');_0x2bbf7f[_0x796e('0x187')]+=0x1;_0x2bbf7f[_0x796e('0x19a')]+=0x1;_0x3396ae[_0x796e('0xcf')](_0x2bbf7f)[_0x796e('0xb9')](loggerCatch(_0x796e('0x19b')));if(_0x3396ae['checkRetriveMax'](0x3,_0x2932c9,_0x666a9b)){if(_0x2bbf7f[_0x796e('0x187')]>=_0x666a9b['dialNoAnswerMaxRetry']){_0x3396ae['createStateFinal'](_0x2bbf7f,_0xdbdc4,_0x4473c3,'reason\x203\x20ringing\x20no\x20answer');}else{_0x3396ae['stateGlobal'](_0x2bbf7f,_0xdbdc4,_0x4473c3,_0x796e('0x19c'));}}break;case'5':_0x666a9b[_0x796e('0x6c')]+=0x1;_0x2bbf7f[_0x796e('0xb0')]=0x5;_0x2bbf7f[_0x796e('0xb1')]=_0x796e('0x19d');_0x2bbf7f['countbusyretry']+=0x1;_0x2bbf7f[_0x796e('0x19a')]+=0x1;_0x3396ae['createHistory'](_0x2bbf7f)[_0x796e('0xb9')](loggerCatch(_0x796e('0x19e')));if(_0x3396ae[_0x796e('0x184')](0x5,_0x2932c9,_0x666a9b)){if(_0x2bbf7f[_0x796e('0x185')]>=_0x666a9b['dialBusyMaxRetry']){_0x3396ae['createStateFinal'](_0x2bbf7f,_0xdbdc4,_0x4473c3,'reason\x205\x20busy');}else{_0x3396ae[_0x796e('0x19f')](_0x2bbf7f,_0xdbdc4,_0x4473c3,_0x796e('0x1a0'));}}break;case'8':_0x666a9b[_0x796e('0x6d')]+=0x1;_0x2bbf7f[_0x796e('0xb0')]=0x8;_0x2bbf7f[_0x796e('0xb1')]='Congestion';_0x2bbf7f[_0x796e('0x186')]+=0x1;_0x2bbf7f[_0x796e('0x19a')]+=0x1;_0x3396ae[_0x796e('0xcf')](_0x2bbf7f)[_0x796e('0xb9')](loggerCatch(_0x796e('0x1a1')));if(_0x3396ae[_0x796e('0x184')](0x8,_0x2932c9,_0x666a9b)){if(_0x2bbf7f[_0x796e('0x186')]>=_0x666a9b[_0x796e('0x190')]){_0x3396ae[_0x796e('0x198')](_0x2bbf7f,_0xdbdc4,_0x4473c3,_0x796e('0x1a2'));}else{_0x3396ae['stateGlobal'](_0x2bbf7f,_0xdbdc4,_0x4473c3,'reason\x208\x20congestion');}}break;default:_0x666a9b['outboundUnknownCallsDay']+=0x1;_0x2bbf7f[_0x796e('0xb0')]=0xc;_0x2bbf7f[_0x796e('0xb1')]=_0x354eaa['reason'];_0x3396ae['createHistory'](_0x2bbf7f)[_0x796e('0xb9')](loggerCatch(_0x796e('0x1a3')));if(_0x3396ae[_0x796e('0x184')](_0x354eaa[_0x796e('0xfd')],_0x2932c9,_0x666a9b)){if(_0x2bbf7f['countbusyretry']+_0x2bbf7f['countcongestionretry']+_0x2bbf7f[_0x796e('0x187')]>=_0x666a9b[_0x796e('0x188')]){_0x3396ae[_0x796e('0x19f')](_0x2bbf7f,_0xdbdc4,_0x4473c3,_0x354eaa['reason']);}else{_0x3396ae['createStateFinal'](_0x2bbf7f,_0xdbdc4,_0x4473c3,_0x354eaa['reason']);}}}});};Dialer[_0x796e('0x1d')][_0x796e('0x19f')]=function(_0x2e9a0a,_0x30cfbd,_0x5d272d,_0x52283c){var _0x5a8d5a=new Final(_0x2e9a0a);_0x5a8d5a['state']=0xf;_0x5a8d5a[_0x796e('0xb1')]=_0x796e('0x1a4');this['createStateFinal'](_0x5a8d5a,_0x30cfbd,_0x5d272d,_0x52283c);};Dialer[_0x796e('0x1d')][_0x796e('0x198')]=function(_0x16e6f4,_0x126c1d,_0x2f9df7,_0x458b6a){this[_0x796e('0xcd')](_0x16e6f4)[_0x796e('0xc0')](function(_0x3e1f2d){return _0x126c1d(msgResponse(_0x796e('0x194'),'Success',_0x458b6a));})[_0x796e('0xb9')](function(_0x28d88c){return _0x2f9df7(msgResponse(_0x796e('0x1a5'),_0x796e('0x13e'),_0x796e('0x1a6')));});};Dialer['prototype'][_0x796e('0x9')]=function(_0xb20845){var _0x24b410=this;var _0x26120e=_0xb20845[_0x796e('0x1a7')]/0x64;var _0x1f9d00=_0xb20845[_0x796e('0x10c')]/(_0xb20845[_0x796e('0x10c')]+_0xb20845['outboundAnswerCallsDay']);var _0x3f5f9a=Math[_0x796e('0x1a8')](_0xb20845[_0x796e('0x78')]*(_0xb20845['predictiveIntervalMaxThreshold']/0x64));var _0x3a7491=Math[_0x796e('0x1a8')](_0xb20845[_0x796e('0x78')]*(_0xb20845[_0x796e('0x1a9')]/0x64));var _0x48a80d=_0xb20845[_0x796e('0x58')]+_0xb20845[_0x796e('0x5e')];var _0x142269=Math[_0x796e('0x1aa')](_0xb20845[_0x796e('0x95')]*_0xb20845['erlangAbandonmentRate']*_0xb20845['predictiveIntervalHitRate']*_0xb20845[_0x796e('0x1ab')]);if(_[_0x796e('0x43')](_0xb20845[_0x796e('0x7c')])){if(!_['isUndefined'](_0xb20845[_0x796e('0x2d')])){_0xb20845[_0x796e('0x2d')]=undefined;loggerPredictive[_0x796e('0x9e')]('[startMethodPredictive][StartProgressive]','check\x20predictive\x20is\x20not\x20undefine');}if(!_[_0x796e('0x43')](_0xb20845['handlePredictive'])){loggerPredictive[_0x796e('0x9e')]('[startMethodPredictive][StartProgressive]',_0x796e('0x1ac'));clearInterval(_0xb20845[_0x796e('0x99')]);_0xb20845[_0x796e('0x99')]=undefined;}_0xb20845[_0x796e('0x7c')]=moment()[_0x796e('0x80')](_0x796e('0x106'));loggerPredictive[_0x796e('0x86')](_0xb20845[_0x796e('0x46')],_0x796e('0x1ad'),_0xb20845[_0x796e('0x7c')]);this[_0x796e('0x144')](_0xb20845,0x1);}else if(ifInterval(_0xb20845[_0x796e('0x1ae')],_0xb20845[_0x796e('0x7c')])){this[_0x796e('0x144')](_0xb20845,0x1);loggerPredictiveCalls[_0x796e('0x86')](_0x796e('0x1af'),_0xb20845[_0x796e('0x7c')],_0xb20845[_0x796e('0x46')]);_0xb20845['erlangCalls']=0x0;_0xb20845['predictiveIntervalErlangCallsDroppedCalls']=0x0;}else if(_0x26120e<_0x1f9d00&&_0xb20845['dialPredictiveOptimization']==='dropRate'){freeVariablesPredictive(_0xb20845);loggerPredictive[_0x796e('0x86')](_0x796e('0x1b0'),'Dropped\x20calls\x20day',_0x1f9d00,_0x796e('0x7c'),_0xb20845['name']);}else if(_0x142269<_0xb20845[_0x796e('0x10d')]&&_0xb20845['dialPredictiveOptimization']===_0x796e('0x1b1')){freeVariablesPredictive(_0xb20845);loggerPredictive['info'](_0x796e('0x1b2'),'Max\x20Drop\x20',_0x142269,_0x796e('0x1b3'),_0xb20845[_0x796e('0x10d')],'startProgressive',_0xb20845[_0x796e('0x46')]);}else if(!ifInterval(_0xb20845[_0x796e('0x1ae')],_0xb20845[_0x796e('0x7c')])&&_[_0x796e('0x43')](_0xb20845[_0x796e('0x2d')])&&!_[_0x796e('0x43')](_0xb20845['startProgressive'])){_0xb20845[_0x796e('0x2d')]=moment()[_0x796e('0x80')](_0x796e('0x106'));loggerPredictive[_0x796e('0x86')](_0xb20845[_0x796e('0x46')],_0x796e('0x1b4'),_0xb20845[_0x796e('0x2d')]);this['averageHandleTime'](_0xb20845[_0x796e('0x1ae')])[_0x796e('0xc0')](this[_0x796e('0x1b5')](_0xb20845))['then'](mergeDataErlangB(_0xb20845))[_0x796e('0xc0')](this[_0x796e('0x1b6')](_0xb20845))[_0x796e('0xb9')](loggerCatchPredictive(_0x796e('0x1b7'),_0xb20845));}else if(!ifInterval(_0xb20845[_0x796e('0x1ae')],_0xb20845['startPredictive'])){_0xb20845['predictiveIntervalErlangCallsDroppedCalls']=0x0;_0xb20845['startPredictive']=moment()[_0x796e('0x80')]('YYYY-MM-DD\x20HH:mm:ss');loggerPredictive[_0x796e('0x86')](_0xb20845[_0x796e('0x46')],_0x796e('0x1b8'),_0xb20845[_0x796e('0x2d')]);clearInterval(_0xb20845[_0x796e('0x99')]);_0xb20845['handlePredictive']=undefined;this[_0x796e('0xc5')](_0xb20845['dialPredictiveInterval'])['then'](this[_0x796e('0x1b5')](_0xb20845))[_0x796e('0xc0')](mergeDataErlangB(_0xb20845))['then'](this['startMethodPredictive'](_0xb20845))[_0x796e('0xb9')](loggerCatchPredictive('Predictive\x20for\x20every\x20interval',_0xb20845));}else if(_0xb20845[_0x796e('0x78')]&&_0x48a80d<_0xb20845[_0x796e('0x78')]-_0x3a7491){freeVariablesPredictive(_0xb20845);loggerPredictive[_0x796e('0x86')](_0xb20845[_0x796e('0x46')],_0x796e('0x1b9'),_0x48a80d,_0x796e('0x1ba'),_0xb20845[_0x796e('0x78')],'-',_0x3a7491,'=',_0xb20845[_0x796e('0x78')]-_0x3a7491,')');}else if(_0xb20845['predictiveIntervalAvailable']&&_0x48a80d>_0xb20845[_0x796e('0x78')]+_0x3f5f9a){freeVariablesPredictive(_0xb20845);loggerPredictive['info'](_0xb20845[_0x796e('0x46')],_0x796e('0x1b9'),_0x48a80d,')\x20are\x20more\x20than\x20threshold\x20(',_0xb20845[_0x796e('0x78')],'+',_0x3f5f9a,'=',_0xb20845[_0x796e('0x78')]+_0x3f5f9a,')');}};Dialer[_0x796e('0x1d')]['getDataPredictive']=function(_0x4e270d){var _0xcd53ff=this;return function(_0x11293f){return new BPromise(function(_0x13a897,_0x28a151){_[_0x796e('0xd5')](_0x4e270d,_0x11293f[0x0]);if(checkGetDataPredictive(_0x11293f[0x0])){var _0x4941fa=_0x4e270d[_0x796e('0x78')]=_0x4e270d[_0x796e('0x5e')]+_0x4e270d[_0x796e('0x58')];var _0x1eb0f5=_0x4e270d[_0x796e('0x1ae')]*0x3c;var _0x5b2f64=_0x11293f[0x0][_0x796e('0x74')]+_0x11293f[0x0][_0x796e('0x90')];var _0x23f4af=(_0x11293f[0x0][_0x796e('0x73')]+_0x11293f[0x0]['predictiveIntervalDroppedCallsTimeout']+_0x11293f[0x0]['predictiveIntervalDroppedCallsCallersExit'])/_0x11293f[0x0][_0x796e('0x88')];_0x4e270d[_0x796e('0x76')]=_0x23f4af>0x0?_0x23f4af:0x1;switch(_0x4e270d[_0x796e('0x1bb')]){case _0x796e('0x1b1'):var _0x1e54de=_0x4e270d[_0x796e('0x1a7')]/0x64;return _0xcd53ff[_0x796e('0x1bc')](_0x4941fa,_0x1eb0f5,_0x5b2f64,_0x23f4af,_0x1e54de)['then'](function(_0x5467f7){return _0x13a897(_0x5467f7);});case'agentBusyFactor':var _0xe124fe=_0x4e270d[_0x796e('0x1a7')]/0x64;return _0xcd53ff['busyFactor'](_0x4941fa,_0x1eb0f5,_0x5b2f64,_0x23f4af,_0xe124fe)[_0x796e('0xc0')](function(_0x2d1593){return _0x13a897(_0x2d1593);});default:return _0x28a151(msgResponse(_0x796e('0x1bd'),_0x796e('0x13e'),_0x796e('0x1be')));}}else{return _0x28a151(msgResponse(_0x796e('0x1bd'),'Failure',_0x796e('0x1bf')));}});};};Dialer[_0x796e('0x1d')][_0x796e('0x1c0')]=function(_0x4a82ad){var _0x5743e3=this;return function(_0x30b947){return new BPromise(function(_0x3d9a94,_0x1d2724){_[_0x796e('0xd5')](_0x4a82ad,_0x30b947[0x0]);if(checkGetDataPredictive(_0x30b947[0x0])){loggerPredictive[_0x796e('0x86')](JSON[_0x796e('0x51')](_0x30b947[0x0]));if(_0x4a82ad['dialPredictiveOptimization']===_0x796e('0x1b1')){return _0x5743e3[_0x796e('0x1c1')](_0x4a82ad['id'])[_0x796e('0xc0')](function(_0x4709c9){var _0x2b7a11=_0x4a82ad['loggedIn']-_0x4709c9[0x0][_0x796e('0x1c2')];var _0x224718=_0x4a82ad['dialPredictiveInterval']*0x3c;var _0xd13a45=_0x30b947[0x0][_0x796e('0x74')]+_0x30b947[0x0][_0x796e('0x90')];var _0x3ae40c=(_0x30b947[0x0][_0x796e('0x73')]+_0x30b947[0x0][_0x796e('0x10b')]+_0x30b947[0x0][_0x796e('0x75')])/_0x30b947[0x0][_0x796e('0x88')];var _0x5330c1=_0x4a82ad['dialPredictiveOptimizationPercentage']/0x64;_0x4a82ad[_0x796e('0x77')]=_0x4709c9[0x0][_0x796e('0x1c2')]||0x0;_0x4a82ad[_0x796e('0x76')]=_0x3ae40c>0x0?_0x3ae40c:0x1;return _0x5743e3['abandonmentRate'](_0x2b7a11,_0x224718,_0xd13a45,_0x3ae40c,_0x5330c1);})['then'](function(_0x29a018){return _0x3d9a94(_0x29a018);})[_0x796e('0xb9')](function(_0x25aa2b){return _0x1d2724(msgResponse(_0x796e('0x1c3'),_0x796e('0x13e'),JSON[_0x796e('0x51')](_0x25aa2b)));});}if(_0x4a82ad[_0x796e('0x1bb')]===_0x796e('0x1c4')){return _0x5743e3[_0x796e('0x1c1')](_0x4a82ad['id'])[_0x796e('0xc0')](function(_0x2f4e43){var _0x5915c0=_0x4a82ad[_0x796e('0x59')]-_0x2f4e43[0x0][_0x796e('0x1c2')];var _0x1cf539=_0x4a82ad[_0x796e('0x1ae')]*0x3c;var _0x56a2b4=_0x30b947[0x0][_0x796e('0x74')]+_0x30b947[0x0][_0x796e('0x90')];var _0x591500=(_0x30b947[0x0][_0x796e('0x73')]+_0x30b947[0x0][_0x796e('0x10b')]+_0x30b947[0x0][_0x796e('0x75')])/_0x30b947[0x0]['predictiveIntervalTotalCalls'];var _0x43d475=_0x4a82ad[_0x796e('0x1a7')]/0x64;_0x4a82ad[_0x796e('0x77')]=_0x2f4e43[0x0][_0x796e('0x1c2')]||0x0;_0x4a82ad[_0x796e('0x76')]=_0x591500>0x0?_0x591500:0x1;return _0x5743e3[_0x796e('0x1c5')](_0x5915c0,_0x1cf539,_0x56a2b4,_0x591500,_0x43d475);})['then'](function(_0x44a0bb){return _0x3d9a94(_0x44a0bb);})[_0x796e('0xb9')](function(_0x3a7513){return _0x1d2724(msgResponse('[CatchErlangB]',_0x796e('0x13e'),JSON[_0x796e('0x51')](_0x3a7513)));});}}else{return _0x1d2724(msgResponse(_0x796e('0x1bd'),'Failure',_0x796e('0x1bf')));}});};};Dialer[_0x796e('0x1d')][_0x796e('0x1b6')]=function(_0x591247){var _0x1696ac=this;return function(){var _0x2e8276=0x0;var _0x559b06=Math[_0x796e('0x1aa')](_0x591247[_0x796e('0x7a')]*0x3e8);if(_0x559b06>0x0){_0x559b06=_0x559b06<0x64?0x64:_0x559b06;loggerPredictive[_0x796e('0x86')](_0x591247[_0x796e('0x46')],_0x796e('0x1c6'),_0x559b06,'milliseconds');_0x591247[_0x796e('0x99')]=setInterval(function(){_0x1696ac[_0x796e('0x99')](_0x591247);loggerPredictiveCalls[_0x796e('0x86')](_0x796e('0x1c7'),_0x2e8276+=0x1);},_0x559b06);}else{loggerPredictive[_0x796e('0x86')](_0x591247[_0x796e('0x46')],_0x796e('0x1c8'));}};};Dialer['prototype'][_0x796e('0x1c9')]=function(_0x4bcede,_0x5199fc){var _0x1510e5=this;return function(_0x39a878){if(_[_0x796e('0x4e')](_0x39a878)){if(_[_0x796e('0xb7')](_0x5199fc[_0x796e('0xd9')])||!_0x5199fc[_0x796e('0x1ca')]){if(_0x4bcede['dialMethod']==='booked'){_0x4bcede[_0x796e('0x11d')]=_[_0x796e('0x43')](_0x4bcede[_0x796e('0x11d')])?!![]:_0x4bcede[_0x796e('0x11d')];var _0x37b9ec=uuid['v4']();_0x1510e5[_0x796e('0x29')][_0x37b9ec]=new Action(_0x4bcede,_0x5199fc,_0x37b9ec);loggerBooked['info'](_0x796e('0x1cb'),_0x37b9ec,_0x796e('0x1cc'),JSON[_0x796e('0x51')](_0x4bcede['queueStatusComplete']),_0x796e('0x1cd'),_0x4bcede[_0x796e('0x46')]);if(_0x4bcede[_0x796e('0x11d')]){_0x4bcede['queueStatusComplete']=![];_0x1510e5['queueBooked'][_0x1510e5[_0x796e('0x29')][_0x37b9ec][_0x796e('0xbd')]]=[];ami[_0x796e('0x134')]({'actionid':_0x37b9ec,'action':_0x796e('0x1ce'),'queue':_0x4bcede[_0x796e('0x46')]})['catch'](function(_0x13160d){_0x1510e5['updateOriginated'](_0x4bcede);_0x1510e5[_0x796e('0xc8')]({'active':![],'ContactId':_0x1510e5[_0x796e('0x29')][_0x37b9ec][_0x796e('0xd7')],'ListId':_0x1510e5['actions'][_0x37b9ec][_0x796e('0xd8')],'VoiceQueueId':_0x1510e5[_0x796e('0x29')][_0x37b9ec][_0x796e('0xda')]||undefined,'CampaignId':_0x1510e5[_0x796e('0x29')][_0x37b9ec][_0x796e('0xdb')]||undefined})['catch'](loggerCatch('[unlockOriginate][syncQueueStatusComplete]'));delete _0x1510e5[_0x796e('0x29')][_0x37b9ec];});}else{loggerBooked['info'](_0x796e('0x1cf'),JSON[_0x796e('0x51')](_0x4bcede[_0x796e('0x11d')]),_0x796e('0x1cd'),_0x4bcede[_0x796e('0x46')]);_0x1510e5[_0x796e('0xbb')](_0x4bcede);_0x1510e5[_0x796e('0xc8')]({'active':![],'ContactId':_0x1510e5[_0x796e('0x29')][_0x37b9ec][_0x796e('0xd7')],'ListId':_0x1510e5[_0x796e('0x29')][_0x37b9ec][_0x796e('0xd8')],'VoiceQueueId':_0x1510e5[_0x796e('0x29')][_0x37b9ec][_0x796e('0xda')]||undefined,'CampaignId':_0x1510e5['actions'][_0x37b9ec][_0x796e('0xdb')]||undefined})[_0x796e('0xb9')](loggerCatch(_0x796e('0x1d0')));delete _0x1510e5[_0x796e('0x29')][_0x37b9ec];}}else{return _0x1510e5[_0x796e('0x154')](_0x4bcede,_0x5199fc);}}else{if(getDiff(_0x5199fc['scheduledat'])<_0x4bcede['dialRecallMeTimeout']*0x3c){_0x1510e5['preview']['run'](_0x5199fc['id'])[_0x796e('0x20')](function(){_0x1510e5[_0x796e('0xbb')](_0x4bcede);});}else{_0x4bcede['outboundReCallsDay']+=0x1;_0x1510e5[_0x796e('0xbb')](_0x4bcede);if(_0x4bcede[_0x796e('0x1d1')]){_0x1510e5[_0x796e('0xc8')]({'active':![],'recallme':![],'UserId':null,'ContactId':_0x5199fc['ContactId'],'ListId':_0x5199fc[_0x796e('0xd8')],'VoiceQueueId':_0x5199fc['VoiceQueueId']||undefined,'CampaignId':_0x5199fc['CampaignId']||undefined})[_0x796e('0xb9')](loggerCatch(_0x796e('0x1d2')));_0x1510e5[_0x796e('0xcf')](createObjHistory(_0x4bcede,_0x5199fc,_0x796e('0x1d3'),0x17,_0x796e('0x1d4')))['catch'](loggerCatch('[Originate][HistoryDialRecallInQueue][historyCatch]'));}else{_0x1510e5[_0x796e('0xd4')](createObjHistory(_0x4bcede,_0x5199fc,_0x796e('0x1d5'),0x16,_0x796e('0x1d6')),_0x796e('0x1d7'),_0x796e('0x1d8'));}}}}else{_0x4bcede[_0x796e('0x6b')]+=0x1;_0x1510e5[_0x796e('0xd4')](createObjHistory(_0x4bcede,_0x5199fc,_0x796e('0x1d9'),0xd,_0x796e('0x1da')),'[Originate][historyBlacklist]',_0x796e('0x1db'));throw _0x796e('0x1dc');}};};Dialer[_0x796e('0x1d')]['handleIvr']=function(_0x5b0784){var _0x4475e1=this;var _0x4bdb12=[];var _0x55cd9e=_0x5b0784[_0x796e('0x1dd')]-_0x5b0784[_0x796e('0x79')]-_0x5b0784[_0x796e('0x1de')];emitCampaignSummary(_0x5b0784);if(_0x55cd9e>0x0){if(_0x55cd9e>this[_0x796e('0x27')]){_0x55cd9e=this[_0x796e('0x27')];}_0x5b0784[_0x796e('0x1de')]+=_0x55cd9e;this['getContactDialerIvr'](_0x5b0784['id'],_0x55cd9e,_0x5b0784[_0x796e('0x1df')])[_0x796e('0xc0')](function(_0x4dd136){_0x5b0784[_0x796e('0x1de')]-=_0x55cd9e;_0x5b0784[_0x796e('0x1de')]=_0x5b0784[_0x796e('0x1de')]>0x0?_0x5b0784[_0x796e('0x1de')]:0x0;if(!checkContactEmpty(_0x4dd136)){_0x5b0784[_0x796e('0x44')]='AVAILABLE_CONTACTS_FINISHED';logger[_0x796e('0x86')](_0x796e('0x1e0')+_0x5b0784[_0x796e('0x46')]);}else{_0x5b0784[_0x796e('0x79')]+=_0x4dd136[_0x796e('0xa1')];_0x5b0784['message']=_0x796e('0x1e1');for(var _0x482cda=0x0;_0x482cda<_0x4dd136[_0x796e('0xa1')];_0x482cda+=0x1){_0x5b0784[_0x796e('0x1e2')]+=0x1;if(_[_0x796e('0xb7')](_0x4dd136[_0x482cda])||_[_0x796e('0xb7')](_0x4dd136[_0x482cda]['Contact'])||_['isNil'](_0x4dd136[_0x482cda][_0x796e('0x157')]['phone'])){_0x4475e1[_0x796e('0x1e3')](_0x796e('0x1e4'),_0x5b0784,_0x4dd136[_0x482cda]);}else{_0x4475e1['checkIsBlackListIvr'](_[_0x796e('0xd6')](_0x4dd136[_0x482cda],[_0x796e('0xdb'),'Contact.phone']))[_0x796e('0xc0')](_0x4475e1[_0x796e('0x1c9')](_0x5b0784,_0x4dd136[_0x482cda]))['catch'](_0x4475e1['loggerHandler'](_0x796e('0x1e5'),_0x5b0784));}}}})['catch'](loggerGetContactDialer(_0x796e('0x1e6'),_0x5b0784,_0x55cd9e));}};Dialer['prototype']['handlePower']=function(_0x282a03,_0x443060){var _0x467711=this;var _0xb6a1dc=[];var _0x41adf4=_0x443060>=0x1?_0x443060:0x1;var _0x401a35=[];if(_0x282a03[_0x796e('0x65')]===_0x796e('0x8')){_0x41adf4=0x1;}var _0x46e300=Math[_0x796e('0x1aa')](_0x282a03[_0x796e('0x58')]*_0x41adf4)-_0x282a03[_0x796e('0x79')]-_0x282a03[_0x796e('0x1de')];emitVoiceQueueSummary(_0x282a03);if(_0x282a03['dialLimitQueue']>0x0){var _0x2610a4=_0x282a03[_0x796e('0x1e7')]-_0x282a03[_0x796e('0x79')]-_0x282a03[_0x796e('0x5e')]-_0x282a03['temp']-_0x282a03[_0x796e('0x5a')];if(_0x46e300>_0x2610a4){_0x46e300=_0x2610a4;}}if(_0x46e300>0x0){if(_0x282a03['dialMethod']==='booked'){_0x46e300=0x1;}if(_0x46e300>this[_0x796e('0x27')]){_0x46e300=this[_0x796e('0x27')];}_0x282a03[_0x796e('0x1de')]+=_0x46e300;for(var _0x115ece in this['agents']){if(this[_0x796e('0x25')][_0x796e('0xa2')](_0x115ece)){if(this[_0x796e('0x25')][_0x115ece][_0x796e('0xb0')]==='not_inuse'&&this['agents'][_0x115ece][_0x796e('0xdf')]==='reachable'){_0xb6a1dc['push'](this[_0x796e('0x25')][_0x115ece]['id']);}}}this[_0x796e('0xca')](_0x282a03['id'],_0xb6a1dc,_0x46e300,_0x282a03[_0x796e('0x1df')])[_0x796e('0xc0')](function(_0x2b1c82){_0x282a03['temp']-=_0x46e300;_0x282a03[_0x796e('0x1de')]=_0x282a03['temp']>0x0?_0x282a03['temp']:0x0;if(!checkContactEmpty(_0x2b1c82)){_0x467711[_0x796e('0xc1')](_0x282a03)[_0x796e('0xc0')](sendMessageReschedule(_0x282a03))[_0x796e('0xb9')](loggerCatch('[countReScheduled]\x20'));}else{_0x282a03[_0x796e('0x79')]+=_0x2b1c82[_0x796e('0xa1')];_0x282a03['message']=_0x282a03[_0x796e('0x65')]===_0x796e('0x8')?_0x796e('0x1e8'):_0x796e('0x1e1');for(var _0x3eaa3a=0x0;_0x3eaa3a<_0x2b1c82[_0x796e('0xa1')];_0x3eaa3a+=0x1){if(_['isNil'](_0x2b1c82[_0x3eaa3a])||_[_0x796e('0xb7')](_0x2b1c82[_0x3eaa3a][_0x796e('0x157')])||_[_0x796e('0xb7')](_0x2b1c82[_0x3eaa3a][_0x796e('0x157')][_0x796e('0x158')])){_0x467711['emptyContact']('[actionOriginate]\x20',_0x282a03,_0x2b1c82[_0x3eaa3a]);}else{_0x467711[_0x796e('0xc2')](_[_0x796e('0xd6')](_0x2b1c82[_0x3eaa3a],[_0x796e('0xda'),_0x796e('0x1e9')]))['then'](_0x467711[_0x796e('0x1c9')](_0x282a03,_0x2b1c82[_0x3eaa3a]))[_0x796e('0xb9')](_0x467711[_0x796e('0xd3')](_0x796e('0x1e4'),_0x282a03));}}}})[_0x796e('0xb9')](loggerGetContactDialer(_0x796e('0x1ea'),_0x282a03,_0x46e300));}};Dialer[_0x796e('0x1d')][_0x796e('0x99')]=function(_0x2875cc){var _0x5f2869=this;if(_0x2875cc['dialLimitQueue']>0x0){var _0x279d97=_0x2875cc['dialLimitQueue']-_0x2875cc['originated']-_0x2875cc['talking'];if(_0x279d97>0x0){this[_0x796e('0x1eb')](_0x2875cc);}else{loggerPredictiveCalls[_0x796e('0x86')](_0x796e('0x1ec'));}}else{this[_0x796e('0x1eb')](_0x2875cc);}};Dialer[_0x796e('0x1d')]['tryOriginatePredictive']=function(_0x30e434){var _0x29e997=this;var _0x49a3f2=[];_0x30e434['originated']+=0x1;for(var _0xd4b92a in this[_0x796e('0x25')]){if(this[_0x796e('0x25')][_0x796e('0xa2')](_0xd4b92a)){if(this[_0x796e('0x25')][_0xd4b92a][_0x796e('0xb0')]===_0x796e('0x1ed')&&this[_0x796e('0x25')][_0xd4b92a]['status']==='reachable'){_0x49a3f2[_0x796e('0x11a')](this[_0x796e('0x25')][_0xd4b92a]['id']);}}}this['getContactDialer'](_0x30e434['id'],_0x49a3f2,0x1,_0x30e434[_0x796e('0x1df')])[_0x796e('0xc0')](function(_0x347d17){if(!checkContactEmpty(_0x347d17)){checkContactLowerLimitOriginate(_0x30e434,0x1,0x0);_0x29e997[_0x796e('0xc1')](_0x30e434)['then'](sendMessageReschedule(_0x30e434))[_0x796e('0xb9')](loggerCatch(_0x796e('0x1ee')));}else{_0x30e434[_0x796e('0x44')]=_0x796e('0x1e1');if(_[_0x796e('0xb7')](_0x347d17[0x0])||_[_0x796e('0xb7')](_0x347d17[0x0][_0x796e('0x157')])||_[_0x796e('0xb7')](_0x347d17[0x0]['Contact']['phone'])){_0x29e997['emptyContact'](_0x796e('0x1e4'),_0x30e434,_0x347d17[0x0]);}else{_0x29e997[_0x796e('0xc2')](_['pick'](_0x347d17[0x0],['VoiceQueueId','Contact.phone']))[_0x796e('0xc0')](_0x29e997['checkContactBlack'](_0x30e434,_0x347d17[0x0]))[_0x796e('0xb9')](_0x29e997[_0x796e('0xd3')](_0x796e('0x1ef'),_0x30e434));}}})[_0x796e('0xb9')](loggerGetContactDialer('[getContactDialerPredictive]',_0x30e434,0x1));emitVoiceQueueSummary(_0x30e434);};Dialer['prototype']['abandonmentRate']=function(_0x42f603,_0x1fc0c6,_0x4a2948,_0x5c96ab,_0x2b73ac,_0xc683d3){loggerPredictive[_0x796e('0x86')](_0x796e('0x1f0'));loggerPredictive[_0x796e('0x86')](_0x796e('0x1f1'),_0x42f603);loggerPredictive[_0x796e('0x86')](_0x796e('0x1f2'),_0x1fc0c6);loggerPredictive[_0x796e('0x86')]('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',_0x4a2948);loggerPredictive[_0x796e('0x86')](_0x796e('0x1f3'),_0x5c96ab);loggerPredictive[_0x796e('0x86')](_0x796e('0x1f4'),_0x2b73ac);loggerPredictive[_0x796e('0x86')]('---------------------------');return new BPromise(function(_0x45c61b,_0x3acba1){if(_0x42f603<=0x0||isNaN(_0x42f603)){return _0x3acba1(msgResponse('[abandonmentRate]',_0x796e('0x50'),'m\x20=\x20'+_0x42f603));}if(_0x4a2948<=0x0||isNaN(_0x4a2948)){return _0x3acba1(msgResponse(_0x796e('0x1f5'),_0x796e('0x50'),'Ts\x20=\x20'+_0x4a2948));}if(_0x5c96ab<=0x0||isNaN(_0x5c96ab)){return _0x3acba1(msgResponse(_0x796e('0x1f5'),_0x796e('0x50'),_0x796e('0x1f6')+_0x5c96ab));}if(_0x1fc0c6<=0x0||isNaN(_0x1fc0c6)){return _0x3acba1(msgResponse(_0x796e('0x1f5'),_0x796e('0x50'),_0x796e('0x1f7')+_0x1fc0c6));}if(_0x2b73ac<=0x0||isNaN(_0x2b73ac)){return _0x3acba1(msgResponse(_0x796e('0x1f5'),_0x796e('0x50'),_0x796e('0x1f8')+_0x2b73ac));}_0xc683d3=_0xc683d3||0x0;var _0x1f57ba=0x1/_0x4a2948;var _0xf46eda=0x0;var _0x2a2242=0x0;var _0x4ee35b=0x0;var _0x2d717a=0x0;for(var _0x59ed49=0x0;_0x4ee35b<_0x2b73ac;_0x59ed49+=0x1){_0x2a2242=_0x59ed49/_0x1fc0c6;_0xf46eda=(_0x5c96ab*_0x2a2242+_0xc683d3)/_0x1f57ba;_0x4ee35b=erlangb(_0xf46eda,_0x42f603);_0x2d717a=_0xf46eda/_0x42f603*(0x1-erlangb(_0xf46eda,_0x42f603));}return _0x45c61b({'erlangCalls':_0x59ed49,'erlangCallToSecond':_0x1fc0c6/_0x59ed49,'erlangAbandonmentRate':_0x4ee35b,'erlangBusyFactor':_0x2d717a});});};Dialer[_0x796e('0x1d')]['busyFactor']=function(_0x5eaafa,_0x72a7a6,_0x135419,_0x572d98,_0x34629c,_0x2cb5da){loggerPredictive[_0x796e('0x86')](_0x796e('0x1f9'));loggerPredictive[_0x796e('0x86')]('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',_0x5eaafa);loggerPredictive[_0x796e('0x86')]('Interval:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x72a7a6);loggerPredictive['info'](_0x796e('0x1fa'),_0x135419);loggerPredictive['info'](_0x796e('0x1f3'),_0x572d98);loggerPredictive[_0x796e('0x86')]('Umin:\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x34629c);loggerPredictive[_0x796e('0x86')]('---------------------------');return new BPromise(function(_0x526695,_0x1a8a31){if(_0x5eaafa<=0x0||isNaN(_0x5eaafa)){return _0x1a8a31(msgResponse(_0x796e('0x1fb'),_0x796e('0x50'),_0x796e('0x1fc')+_0x5eaafa));}if(_0x135419<=0x0||isNaN(_0x135419)){return _0x1a8a31(msgResponse('[busyFactor]',_0x796e('0x50'),_0x796e('0x1fd')+_0x135419));}if(_0x572d98<=0x0||isNaN(_0x572d98)){return _0x1a8a31(msgResponse('[busyFactor]',_0x796e('0x50'),_0x796e('0x1f6')+_0x572d98));}if(_0x72a7a6<=0x0||isNaN(_0x72a7a6)){return _0x1a8a31(msgResponse(_0x796e('0x1fb'),_0x796e('0x50'),_0x796e('0x1f7')+_0x72a7a6));}if(_0x34629c<=0x0||isNaN(_0x34629c)){return _0x1a8a31(msgResponse(_0x796e('0x1fb'),_0x796e('0x50'),'Umin\x20=\x20'+_0x34629c));}_0x2cb5da=_0x2cb5da||0x0;var _0xa2383a=0x1/_0x135419;var _0x2e1474=0x0;var _0x1e664d=0x0;var _0x2e3c3c=0x0;var _0x4c1f4e=0x0;for(var _0x47c71b=0x0;_0x4c1f4e<_0x34629c;_0x47c71b+=0x1){_0x1e664d=_0x47c71b/_0x72a7a6;_0x2e1474=(_0x572d98*_0x1e664d+_0x2cb5da)/_0xa2383a;_0x2e3c3c=erlangb(_0x2e1474,_0x5eaafa);_0x4c1f4e=_0x2e1474/_0x5eaafa*(0x1-erlangb(_0x2e1474,_0x5eaafa));}return _0x526695({'erlangCalls':_0x47c71b,'erlangCallToSecond':_0x72a7a6/_0x47c71b,'erlangAbandonmentRate':_0x2e3c3c,'erlangBusyFactor':_0x4c1f4e});});};module[_0x796e('0x1fe')]=Dialer;
\ No newline at end of file
index a9d3706..4f8ce18 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa562=['util','lodash','moment','milliseconds','diff','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridnum','number','starttime','responsetime','droptime','endtime','ringtime','holdtime','talktime','connectedlinename','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','originatecalleridnum','originatecalleridname','exports'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa562,0x18c));var _0x2a56=function(_0x2ace72,_0x814809){_0x2ace72=_0x2ace72-0x0;var _0x33d102=_0xa562[_0x2ace72];return _0x33d102;};'use strict';var util=require(_0x2a56('0x0'));var _=require(_0x2a56('0x1'));var moment=require(_0x2a56('0x2'));function getSeconds(_0x393d48,_0x4a3dc5){var _0x104c57=moment(_0x393d48)[_0x2a56('0x3')](0x0);var _0x10a654=moment(_0x4a3dc5)['milliseconds'](0x0);return _0x104c57[_0x2a56('0x4')](_0x10a654,'seconds');}function QueueCallerAbandon(_0x325f0f,_0x4ee5d2){this[_0x2a56('0x5')]=_0x325f0f[_0x2a56('0x5')];this[_0x2a56('0x6')]=_0x325f0f[_0x2a56('0x6')];this[_0x2a56('0x7')]=_0x325f0f[_0x2a56('0x6')]===_0x2a56('0x8')?_0x2a56('0x9'):_0x325f0f[_0x2a56('0x6')];this[_0x2a56('0xa')]=_0x325f0f['countbusyretry'];this['countcongestionretry']=_0x325f0f[_0x2a56('0xb')];this[_0x2a56('0xc')]=_0x325f0f[_0x2a56('0xc')];this[_0x2a56('0xd')]=_0x325f0f[_0x2a56('0xa')]+_0x325f0f['countcongestionretry']+_0x325f0f[_0x2a56('0xc')];this[_0x2a56('0xe')]=_0x4ee5d2[_0x2a56('0xe')];this['calleridname']=_0x325f0f['name'];this[_0x2a56('0xf')]=_0x325f0f[_0x2a56('0x10')];this['starttime']=_0x325f0f[_0x2a56('0x11')];this['responsetime']=_0x325f0f[_0x2a56('0x12')];this[_0x2a56('0x13')]=_0x325f0f['droptime'];this[_0x2a56('0x14')]=this[_0x2a56('0x13')];this[_0x2a56('0x15')]=getSeconds(_0x325f0f[_0x2a56('0x12')],_0x325f0f[_0x2a56('0x11')]);this[_0x2a56('0x16')]=getSeconds(this['droptime'],_0x325f0f[_0x2a56('0x12')]);this[_0x2a56('0x17')]=0x0;this[_0x2a56('0x9')]=_0x4ee5d2[_0x2a56('0x9')];this['membername']=_0x4ee5d2[_0x2a56('0x18')];this['reason']=_0x4ee5d2['reason'];this[_0x2a56('0x19')]=_0x325f0f['callback'];this[_0x2a56('0x1a')]=_0x325f0f[_0x2a56('0x1a')];this[_0x2a56('0x1b')]=_0x325f0f[_0x2a56('0x1b')];this[_0x2a56('0x1c')]=_0x325f0f[_0x2a56('0x1c')];this[_0x2a56('0x1d')]=_0x325f0f[_0x2a56('0x1d')];this[_0x2a56('0x1e')]=_0x325f0f[_0x2a56('0x1e')];this[_0x2a56('0x1f')]=_0x325f0f['UserId'];this[_0x2a56('0x20')]=_0x325f0f[_0x2a56('0x20')];this['CampaignId']=_0x325f0f['CampaignId'];this[_0x2a56('0x21')]=_0x325f0f['originatecalleridnum']||'';this[_0x2a56('0x22')]=_0x325f0f[_0x2a56('0x22')]||'';}module[_0x2a56('0x23')]=QueueCallerAbandon;
\ No newline at end of file
+var _0xe132=['milliseconds','diff','scheduledat','type','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','uniqueid','calleridname','calleridnum','number','starttime','responsetime','droptime','membername','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','util','lodash','moment'];(function(_0x487297,_0x596b06){var _0xbe0ac5=function(_0x4ccbc1){while(--_0x4ccbc1){_0x487297['push'](_0x487297['shift']());}};_0xbe0ac5(++_0x596b06);}(_0xe132,0x79));var _0x2e13=function(_0x169799,_0x5449cb){_0x169799=_0x169799-0x0;var _0x2b8460=_0xe132[_0x169799];return _0x2b8460;};'use strict';var util=require(_0x2e13('0x0'));var _=require(_0x2e13('0x1'));var moment=require(_0x2e13('0x2'));function getSeconds(_0x1c55d3,_0x4c729a){var _0x3ceeaf=moment(_0x1c55d3)[_0x2e13('0x3')](0x0);var _0xcc5c4c=moment(_0x4c729a)['milliseconds'](0x0);return _0x3ceeaf[_0x2e13('0x4')](_0xcc5c4c,'seconds');}function QueueCallerAbandon(_0x488748,_0x210aac){this['scheduledat']=_0x488748[_0x2e13('0x5')];this[_0x2e13('0x6')]=_0x488748[_0x2e13('0x6')];this['campaigntype']=_0x488748['type']===_0x2e13('0x7')?_0x2e13('0x8'):_0x488748[_0x2e13('0x6')];this[_0x2e13('0x9')]=_0x488748[_0x2e13('0x9')];this[_0x2e13('0xa')]=_0x488748['countcongestionretry'];this['countnoanswerretry']=_0x488748[_0x2e13('0xb')];this['countglobal']=_0x488748[_0x2e13('0x9')]+_0x488748['countcongestionretry']+_0x488748[_0x2e13('0xb')];this['uniqueid']=_0x210aac[_0x2e13('0xc')];this[_0x2e13('0xd')]=_0x488748['name'];this[_0x2e13('0xe')]=_0x488748[_0x2e13('0xf')];this[_0x2e13('0x10')]=_0x488748[_0x2e13('0x10')];this[_0x2e13('0x11')]=_0x488748['responsetime'];this[_0x2e13('0x12')]=_0x488748[_0x2e13('0x12')];this['endtime']=this[_0x2e13('0x12')];this['ringtime']=getSeconds(_0x488748[_0x2e13('0x11')],_0x488748['starttime']);this['holdtime']=getSeconds(this['droptime'],_0x488748[_0x2e13('0x11')]);this['talktime']=0x0;this[_0x2e13('0x8')]=_0x210aac[_0x2e13('0x8')];this[_0x2e13('0x13')]=_0x210aac['connectedlinename'];this[_0x2e13('0x14')]=_0x210aac[_0x2e13('0x14')];this[_0x2e13('0x15')]=_0x488748[_0x2e13('0x15')];this[_0x2e13('0x16')]=_0x488748[_0x2e13('0x16')];this[_0x2e13('0x17')]=_0x488748[_0x2e13('0x17')];this[_0x2e13('0x18')]=_0x488748[_0x2e13('0x18')];this[_0x2e13('0x19')]=_0x488748[_0x2e13('0x19')];this['ListId']=_0x488748[_0x2e13('0x1a')];this[_0x2e13('0x1b')]=_0x488748['UserId'];this[_0x2e13('0x1c')]=_0x488748['VoiceQueueId'];this[_0x2e13('0x1d')]=_0x488748[_0x2e13('0x1d')];this[_0x2e13('0x1e')]=_0x488748[_0x2e13('0x1e')]||'';this['originatecalleridname']=_0x488748['originatecalleridname']||'';}module['exports']=QueueCallerAbandon;
\ No newline at end of file
index db78d22..fd75af0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd710=['localstationid','headerinfo','path','AttachmentId','util','lodash','moment','channel','%s/%s/%s','tech','name','fax'];(function(_0x209ec9,_0x30378c){var _0x129b1b=function(_0x2f2b9e){while(--_0x2f2b9e){_0x209ec9['push'](_0x209ec9['shift']());}};_0x129b1b(++_0x30378c);}(_0xd710,0x19c));var _0x0d71=function(_0x5a25c6,_0x5f0683){_0x5a25c6=_0x5a25c6-0x0;var _0x2101ed=_0xd710[_0x5a25c6];return _0x2101ed;};'use strict';var util=require(_0x0d71('0x0'));var _=require(_0x0d71('0x1'));var moment=require(_0x0d71('0x2'));function Action(_0x159f5a,_0x291a46,_0x2daeb9){this['uniqueid']=_0x159f5a||undefined;this[_0x0d71('0x3')]=util['format'](_0x0d71('0x4'),_0x291a46[_0x0d71('0x5')],_0x291a46['Trunk'][_0x0d71('0x6')],_0x2daeb9[_0x0d71('0x7')]);this[_0x0d71('0x8')]=_0x291a46[_0x0d71('0x8')];this['headerinfo']=_0x291a46[_0x0d71('0x9')];this[_0x0d71('0xa')]=_0x2daeb9[_0x0d71('0xa')];this[_0x0d71('0xb')]=_0x2daeb9['AttachmentId'];}module['exports']=Action;
\ No newline at end of file
+var _0xfacd=['moment','uniqueid','format','%s/%s/%s','tech','Trunk','name','fax','localstationid','headerinfo','path','AttachmentId','exports','lodash'];(function(_0x3a96d3,_0x31efc0){var _0x4f42c4=function(_0x44f04c){while(--_0x44f04c){_0x3a96d3['push'](_0x3a96d3['shift']());}};_0x4f42c4(++_0x31efc0);}(_0xfacd,0x14f));var _0xdfac=function(_0x1c2161,_0x416a0c){_0x1c2161=_0x1c2161-0x0;var _0x4f2541=_0xfacd[_0x1c2161];return _0x4f2541;};'use strict';var util=require('util');var _=require(_0xdfac('0x0'));var moment=require(_0xdfac('0x1'));function Action(_0xc4582f,_0x1625e7,_0x383c17){this[_0xdfac('0x2')]=_0xc4582f||undefined;this['channel']=util[_0xdfac('0x3')](_0xdfac('0x4'),_0x1625e7[_0xdfac('0x5')],_0x1625e7[_0xdfac('0x6')][_0xdfac('0x7')],_0x383c17[_0xdfac('0x8')]);this[_0xdfac('0x9')]=_0x1625e7['localstationid'];this[_0xdfac('0xa')]=_0x1625e7[_0xdfac('0xa')];this[_0xdfac('0xb')]=_0x383c17[_0xdfac('0xb')];this[_0xdfac('0xc')]=_0x383c17[_0xdfac('0xc')];}module[_0xdfac('0xd')]=Action;
\ No newline at end of file
index f6310a1..37b9a09 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x49aa=['util','lodash','bluebird','uuid','moment','path','tiff2pdf','./util/gs','fax','./rpcDb','./channel','./util/util','./action','../rpc/faxAccount','../rpc/attachment','channels','faxAccounts','trunks','actions','syncNewchannel','varset','bind','newstate','syncNewState','newexten','syncNewExten','faxstatus','syncFaxStatus','hangup','syncOriginateResponse','prototype','context','from-voip-provider','exten','uniqueid','channel','info','\x20syncNewchannel\x20','syncVarSet','variable','value','channelstate','channelstatedesc','hasOwnProperty','operation','status','localstationid','filename','\x20syncFaxStatus\x20','syncReceiveFax','remotestationid','pagestransferred','resolution','transferrate','calleridnum','/var/opt/motion2/server/files/attachments/','message','create','parse','name','.pdf','then','notify','catch','error','\x20notify\x20','stringify','\x20receiveFax\x20','response','reason','AttachmentId','logger','[Fax][Message][Error][Updated]','[Fax][Message][Error][NoUpdate1]','[Fax][Message][Updated]','[Fax][Message][NoUpdate1]','finally','[Fax][Message][NoUpdate2]','syncHangup','\x20hangup\x20faxRiceive\x20','faxpages','SUCCESS','updateStatus','faxstatusstring','SENDING\x20FAILED:\x20','send','execOriginate','checkAfterSend','FaxAccountId','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','%s/%s.tif','dir','XMF-PATH','Convert\x20pdf\x20to\x20tif','variablesAction','Action','addVariables','ext','isTrunkReachable','isNil','active','format','SIP/%s','reachable','checkTrunk','[Fax][checkTrunk][Trunk\x20not\x20work]','\x20Trunk\x20is\x20not\x20active','Trunk\x20not\x20working','Empty\x20Fax','Is\x20Valid','exports'];(function(_0x4baae2,_0x487ab6){var _0x1a2285=function(_0x1cea47){while(--_0x1cea47){_0x4baae2['push'](_0x4baae2['shift']());}};_0x1a2285(++_0x487ab6);}(_0x49aa,0x156));var _0xa49a=function(_0xb72021,_0x1a524e){_0xb72021=_0xb72021-0x0;var _0x48a28a=_0x49aa[_0xb72021];return _0x48a28a;};'use strict';var util=require(_0xa49a('0x0'));var _=require(_0xa49a('0x1'));var BPromise=require(_0xa49a('0x2'));var uuid=require(_0xa49a('0x3'));var moment=require(_0xa49a('0x4'));var path=require(_0xa49a('0x5'));var tiff2pdf=require(_0xa49a('0x6'));var gs=require(_0xa49a('0x7'));var logger=require('../../../config/logger')(_0xa49a('0x8'));var ami=require('../ami');var rpcDb=require(_0xa49a('0x9'));var Channel=require(_0xa49a('0xa'));var ut=require(_0xa49a('0xb'));var Action=require(_0xa49a('0xc'));var faxAccount=require(_0xa49a('0xd'));var attachment=require(_0xa49a('0xe'));var faxMessage=require('../rpc/faxMessage');function Fax(_0x61dc01){this[_0xa49a('0xf')]={};this[_0xa49a('0x10')]=_0x61dc01[_0xa49a('0x10')];this[_0xa49a('0x11')]=_0x61dc01[_0xa49a('0x11')];this[_0xa49a('0x12')]={};ami['on']('newchannel',this[_0xa49a('0x13')]['bind'](this));ami['on'](_0xa49a('0x14'),this['syncVarSet'][_0xa49a('0x15')](this));ami['on'](_0xa49a('0x16'),this[_0xa49a('0x17')][_0xa49a('0x15')](this));ami['on'](_0xa49a('0x18'),this[_0xa49a('0x19')][_0xa49a('0x15')](this));ami['on'](_0xa49a('0x1a'),this[_0xa49a('0x1b')][_0xa49a('0x15')](this));ami['on']('receivefax',this['syncReceiveFax']['bind'](this));ami['on'](_0xa49a('0x1c'),this['syncHangup'][_0xa49a('0x15')](this));ami['on']('originateresponse',this[_0xa49a('0x1d')][_0xa49a('0x15')](this));}Fax[_0xa49a('0x1e')][_0xa49a('0x13')]=function(_0x1610b8){if(_0x1610b8[_0xa49a('0x1f')]===_0xa49a('0x20')){for(var _0x1c4b11 in this[_0xa49a('0x10')]){if(this[_0xa49a('0x10')]['hasOwnProperty'](_0x1c4b11)){if(_0x1610b8[_0xa49a('0x21')]===this[_0xa49a('0x10')][_0x1c4b11]['localstationid']){this[_0xa49a('0xf')][_0x1610b8[_0xa49a('0x22')]]={};this[_0xa49a('0xf')][_0x1610b8[_0xa49a('0x22')]][_0xa49a('0x23')]=_0x1610b8['channel'];this[_0xa49a('0xf')][_0x1610b8['uniqueid']]['id']=this[_0xa49a('0x10')][_0x1c4b11]['id'];this[_0xa49a('0xf')][_0x1610b8[_0xa49a('0x22')]]['name']=this[_0xa49a('0x10')][_0x1c4b11]['name'];logger[_0xa49a('0x24')](_0x1610b8[_0xa49a('0x22')],'\x20syncNewchannel\x20');}}}}if(this[_0xa49a('0x12')][_0x1610b8[_0xa49a('0x22')]]){this[_0xa49a('0xf')][_0x1610b8[_0xa49a('0x22')]]={};this[_0xa49a('0xf')][_0x1610b8[_0xa49a('0x22')]][_0xa49a('0x23')]=_0x1610b8[_0xa49a('0x23')];logger[_0xa49a('0x24')](_0x1610b8[_0xa49a('0x22')],_0xa49a('0x25'));}};Fax[_0xa49a('0x1e')][_0xa49a('0x26')]=function(_0x27ad77){if(this[_0xa49a('0xf')][_0x27ad77[_0xa49a('0x22')]]){for(var _0x59343e in _0x27ad77[_0xa49a('0x27')]){if(_0x27ad77[_0xa49a('0x27')]['hasOwnProperty'](_0x59343e)){this[_0xa49a('0xf')][_0x27ad77[_0xa49a('0x22')]][_0x59343e]=_0x27ad77[_0xa49a('0x28')];}}}};Fax[_0xa49a('0x1e')][_0xa49a('0x17')]=function(_0x3d6e9f){if(this[_0xa49a('0xf')][_0x3d6e9f[_0xa49a('0x22')]]){this['channels'][_0x3d6e9f[_0xa49a('0x22')]]['channelstate']=_0x3d6e9f[_0xa49a('0x29')];this[_0xa49a('0xf')][_0x3d6e9f['uniqueid']]['channelstatedesc']=_0x3d6e9f[_0xa49a('0x2a')];}};Fax[_0xa49a('0x1e')][_0xa49a('0x19')]=function(_0x4f6d4c){if(this[_0xa49a('0xf')][_0x4f6d4c[_0xa49a('0x22')]]){for(var _0x506265 in _0x4f6d4c['variable']){if(_0x4f6d4c[_0xa49a('0x27')][_0xa49a('0x2b')](_0x506265)){this[_0xa49a('0xf')][_0x4f6d4c['uniqueid']][_0x506265]=_0x4f6d4c['value'];}}}};Fax[_0xa49a('0x1e')]['syncFaxStatus']=function(_0x3a8ede){if(this['channels'][_0x3a8ede[_0xa49a('0x22')]]){this[_0xa49a('0xf')][_0x3a8ede[_0xa49a('0x22')]][_0xa49a('0x2c')]=_0x3a8ede[_0xa49a('0x2c')];this[_0xa49a('0xf')][_0x3a8ede[_0xa49a('0x22')]][_0xa49a('0x2d')]=_0x3a8ede['status'];this[_0xa49a('0xf')][_0x3a8ede[_0xa49a('0x22')]][_0xa49a('0x2e')]=_0x3a8ede[_0xa49a('0x2e')];this[_0xa49a('0xf')][_0x3a8ede['uniqueid']][_0xa49a('0x2f')]=_0x3a8ede[_0xa49a('0x2f')];logger[_0xa49a('0x24')](_0x3a8ede['uniqueid'],_0xa49a('0x30'));}};Fax[_0xa49a('0x1e')][_0xa49a('0x31')]=function(_0x166244){var _0x59fc71=this;if(this[_0xa49a('0xf')][_0x166244[_0xa49a('0x22')]]){var _0x4969fe=this['channels'][_0x166244[_0xa49a('0x22')]]['id'];this[_0xa49a('0xf')][_0x166244[_0xa49a('0x22')]]['remotestationid']=_0x166244[_0xa49a('0x32')];this[_0xa49a('0xf')][_0x166244[_0xa49a('0x22')]][_0xa49a('0x33')]=_0x166244[_0xa49a('0x33')];this['channels'][_0x166244[_0xa49a('0x22')]][_0xa49a('0x2e')]=_0x166244[_0xa49a('0x2e')];this['channels'][_0x166244['uniqueid']][_0xa49a('0x34')]=_0x166244[_0xa49a('0x34')];this[_0xa49a('0xf')][_0x166244[_0xa49a('0x22')]][_0xa49a('0x35')]=_0x166244[_0xa49a('0x35')];this[_0xa49a('0xf')][_0x166244[_0xa49a('0x22')]]['filename']=_0x166244[_0xa49a('0x2f')];this[_0xa49a('0xf')][_0x166244[_0xa49a('0x22')]][_0xa49a('0x36')]=_0x166244['calleridnum'];if(this[_0xa49a('0xf')][_0x166244['uniqueid']][_0xa49a('0x33')]>0x0){tiff2pdf(_0x166244['filename'],_0xa49a('0x37'),function(_0xd6c2b9){logger[_0xa49a('0x24')](_0x166244[_0xa49a('0x22')],'\x20result\x20conversion\x20file\x20',_0xd6c2b9[_0xa49a('0x38')]);attachment[_0xa49a('0x39')]({'name':path[_0xa49a('0x3a')](_0x166244['filename'])[_0xa49a('0x3b')],'basename':path['parse'](_0x166244[_0xa49a('0x2f')])['name']+_0xa49a('0x3c'),'type':'application/pdf'})[_0xa49a('0x3d')](function(_0x2baafa){faxAccount[_0xa49a('0x3e')](_0x4969fe,{'from':_0x166244[_0xa49a('0x36')],'mapKey':_0xa49a('0x8'),'body':path[_0xa49a('0x3a')](_0x166244[_0xa49a('0x2f')])[_0xa49a('0x3b')]+_0xa49a('0x3c'),'AttachmentId':_0x2baafa['id']})[_0xa49a('0x3f')](function(_0x6ee494){logger[_0xa49a('0x40')](_0x166244[_0xa49a('0x22')],_0xa49a('0x41'),JSON['stringify'](_0x6ee494));});})['catch'](function(_0x19ca9d){logger[_0xa49a('0x40')](_0x166244[_0xa49a('0x22')],'\x20receiveFax\x20',JSON[_0xa49a('0x42')](_0x19ca9d));});});}logger[_0xa49a('0x24')](_0x166244['uniqueid'],_0xa49a('0x43'));}};Fax[_0xa49a('0x1e')][_0xa49a('0x1d')]=function(_0x11979b){if(this[_0xa49a('0x12')][_0x11979b[_0xa49a('0x22')]]){_['merge'](this[_0xa49a('0xf')][_0x11979b['uniqueid']],_['pick'](_0x11979b,[_0xa49a('0x44'),_0xa49a('0x45')]));}};function updateStatus(_0x5f56c4){if(_0x5f56c4[_0xa49a('0x46')]){faxMessage['update'](_0x5f56c4[_0xa49a('0x46')],{'failMessage':'SENDING\x20FAILED\x20'})[_0xa49a('0x3d')](function(_0x9c008a){ut[_0xa49a('0x47')](_0xa49a('0x48'),_0x9c008a);})[_0xa49a('0x3f')](function(_0x5e4ecc){ut[_0xa49a('0x47')](_0xa49a('0x49'),_0x5e4ecc);});}else{ut[_0xa49a('0x47')]('[Fax][Message][Error][NoUpdate2]');}}Fax[_0xa49a('0x1e')]['updateStatus']=function(_0x19f6ea,_0x2d47c9,_0x201f07){var _0x2ec8ea=this;var _0x4264cf={};if(_0x2d47c9){_0x4264cf={'read':_0x2d47c9};}else{_0x4264cf={'failMessage':_0x201f07};}if(this[_0xa49a('0x12')][_0x19f6ea]['AttachmentId']){faxMessage['update'](this[_0xa49a('0x12')][_0x19f6ea][_0xa49a('0x46')],_0x4264cf)[_0xa49a('0x3d')](function(_0x506470){ut[_0xa49a('0x47')](_0xa49a('0x4a'),_0x506470);})[_0xa49a('0x3f')](function(_0x15b585){ut[_0xa49a('0x47')](_0xa49a('0x4b'),_0x15b585);})[_0xa49a('0x4c')](function(){delete _0x2ec8ea[_0xa49a('0xf')][_0x19f6ea];delete _0x2ec8ea[_0xa49a('0x12')][_0x19f6ea];});}else{ut[_0xa49a('0x47')](_0xa49a('0x4d'));delete this[_0xa49a('0xf')][_0x19f6ea];delete this[_0xa49a('0x12')][_0x19f6ea];}};Fax['prototype'][_0xa49a('0x4e')]=function(_0x2f9de9){var _0x4b59da=this;if(this[_0xa49a('0xf')][_0x2f9de9['uniqueid']]){if(this[_0xa49a('0x12')][_0x2f9de9[_0xa49a('0x22')]]){this[_0xa49a('0xf')][_0x2f9de9[_0xa49a('0x22')]]['id']=this[_0xa49a('0x12')][_0x2f9de9[_0xa49a('0x22')]]['id'];this[_0xa49a('0xf')][_0x2f9de9[_0xa49a('0x22')]]['name']=this[_0xa49a('0x12')][_0x2f9de9[_0xa49a('0x22')]][_0xa49a('0x3b')];}logger[_0xa49a('0x24')](_0x2f9de9['uniqueid'],this[_0xa49a('0x12')][_0x2f9de9['uniqueid']]?'\x20hangup\x20sendFile\x20':_0xa49a('0x4f'),JSON['stringify'](this[_0xa49a('0xf')][_0x2f9de9[_0xa49a('0x22')]]));if(this[_0xa49a('0x12')][_0x2f9de9[_0xa49a('0x22')]]){if(this[_0xa49a('0xf')][_0x2f9de9[_0xa49a('0x22')]][_0xa49a('0x50')]>0x0&&this[_0xa49a('0xf')][_0x2f9de9[_0xa49a('0x22')]][_0xa49a('0x1a')]===_0xa49a('0x51')){this[_0xa49a('0x52')](_0x2f9de9['uniqueid'],!![]);}else{this['updateStatus'](_0x2f9de9[_0xa49a('0x22')],![],this[_0xa49a('0xf')][_0x2f9de9['uniqueid']][_0xa49a('0x53')]?_0xa49a('0x54')+this['channels'][_0x2f9de9[_0xa49a('0x22')]]['faxstatusstring']:'SENDING\x20FAILED');}}}};Fax[_0xa49a('0x1e')][_0xa49a('0x55')]=function(_0x4826b9){var _0x592ccd=this;return new BPromise(function(_0x1efe46,_0x3bb959){_0x592ccd[_0xa49a('0x56')](_0x4826b9,_0x592ccd[_0xa49a('0x10')][_0x4826b9['FaxAccountId']])[_0xa49a('0x3d')](function(_0x27c813){ut[_0xa49a('0x47')]('[Fax][execOriginate][success]',_0x27c813);_0x1efe46(ut['message']('Fax\x20received'));})[_0xa49a('0x3f')](function(_0x177347){ut[_0xa49a('0x47')]('[Fax][execOriginate][failure]',_0x177347);updateStatus(_0x4826b9);_0x3bb959(ut['message']('Fax\x20failed'));});});};Fax[_0xa49a('0x1e')][_0xa49a('0x57')]=function(_0x44a9a1){var _0x5da206=this;return new BPromise(function(_0x2cc76e,_0x2ee55a){var _0x5bf86b=_0x5da206['checkTrunk'](_0x5da206[_0xa49a('0x10')][_0x44a9a1[_0xa49a('0x58')]]['Trunk'],_0x44a9a1);if(_0x5bf86b[_0xa49a('0x59')]){_0x2cc76e(ut['message'](_0xa49a('0x5a')));}else{_0x2ee55a(ut['message'](_0x5bf86b['message']));}});};function originate(_0x3205b5,_0x212ab8,_0x141a34){return new BPromise(function(_0x258f7e,_0x5ce7e4){if(_0x141a34){var _0x35125f=util['format'](_0xa49a('0x5b'),path[_0xa49a('0x3a')](_0x3205b5[_0xa49a('0x5')])[_0xa49a('0x3b')],_0x3205b5[_0xa49a('0x5')]);gs[_0xa49a('0x5c')](_0x35125f)[_0xa49a('0x3d')](function(){_0x3205b5[_0xa49a('0x5')]=util['format'](_0xa49a('0x5d'),path[_0xa49a('0x3a')](_0x3205b5[_0xa49a('0x5')])[_0xa49a('0x5e')],path[_0xa49a('0x3a')](_0x3205b5[_0xa49a('0x5')])[_0xa49a('0x3b')]);_0x212ab8[_0xa49a('0x5f')]=_0x3205b5['path'];ut[_0xa49a('0x47')](_0xa49a('0x60'),'');ami['Action'](ut[_0xa49a('0x61')](_0x3205b5,_0x212ab8))['then'](function(_0x3f10c5){_0x258f7e(_0x3f10c5);})['catch'](function(_0x4e8ad3){_0x5ce7e4(_0x4e8ad3);});})['catch'](function(_0x4f2a49){_0x5ce7e4(_0x4f2a49);});}else{ami[_0xa49a('0x62')](ut[_0xa49a('0x61')](_0x3205b5,_0x212ab8))[_0xa49a('0x3d')](function(_0x3dd722){_0x258f7e(_0x3dd722);})['catch'](function(_0x301d5e){_0x5ce7e4(_0x301d5e);});}});}Fax[_0xa49a('0x1e')][_0xa49a('0x56')]=function(_0x4928ff,_0xc463bb){var _0x21cb07=this;return new BPromise(function(_0x358060,_0x20a676){var _0x5afb31=uuid['v4']();var _0x4f6a4b=ut[_0xa49a('0x63')](_0x4928ff,_0xc463bb);_0x21cb07[_0xa49a('0x12')][_0x5afb31]=new Action(_0x5afb31,_0xc463bb,_0x4928ff);var _0x39b0b8=_0x21cb07[_0xa49a('0x12')][_0x5afb31];if(path[_0xa49a('0x3a')](_0x4928ff[_0xa49a('0x5')])[_0xa49a('0x64')]===_0xa49a('0x3c')){originate(_0x39b0b8,_0x4f6a4b,!![])[_0xa49a('0x3d')](function(_0x118aae){_0x358060(_0x118aae);})[_0xa49a('0x3f')](function(_0x573c04){_0x20a676(_0x573c04);});}else{originate(_0x39b0b8,_0x4f6a4b,![])[_0xa49a('0x3d')](function(_0x394f09){_0x358060(_0x394f09);})['catch'](function(_0x1e309b){_0x20a676(_0x1e309b);});}});};Fax[_0xa49a('0x1e')][_0xa49a('0x65')]=function(_0x535c8c){return!_[_0xa49a('0x66')](_0x535c8c)&&!_[_0xa49a('0x66')](_0x535c8c['name'])&&!_[_0xa49a('0x66')](_0x535c8c[_0xa49a('0x67')])&&_0x535c8c[_0xa49a('0x67')]&&!_[_0xa49a('0x66')](this[_0xa49a('0x11')][util[_0xa49a('0x68')]('SIP/%s',_0x535c8c['name'])])&&!_[_0xa49a('0x66')](this['trunks'][util[_0xa49a('0x68')](_0xa49a('0x69'),_0x535c8c[_0xa49a('0x3b')])]['status'])&&(this[_0xa49a('0x11')][util[_0xa49a('0x68')](_0xa49a('0x69'),_0x535c8c[_0xa49a('0x3b')])][_0xa49a('0x2d')]===_0xa49a('0x6a')||this[_0xa49a('0x11')][util['format']('SIP/%s',_0x535c8c[_0xa49a('0x3b')])]['status']==='unmonitored');};Fax['prototype'][_0xa49a('0x6b')]=function(_0x5337c4,_0x365066){if(!this[_0xa49a('0x65')](_0x5337c4)){ut['logger'](_0xa49a('0x6c'),_[_0xa49a('0x66')](_0x5337c4)?'':_0x5337c4[_0xa49a('0x3b')]+_0xa49a('0x6d'));return{'isValid':![],'message':_0xa49a('0x6e')};}if(_[_0xa49a('0x66')](_0x365066['fax'])){ut[_0xa49a('0x47')]('[Fax][checkTrunk][Empty\x20Fax]',JSON[_0xa49a('0x42')](_0x365066));return{'isValid':![],'message':_0xa49a('0x6f')};}if(_[_0xa49a('0x66')](_0x365066[_0xa49a('0x5')])){ut[_0xa49a('0x47')]('[Fax][checkTrunk][Empty\x20path]',JSON[_0xa49a('0x42')](_0x365066));return{'isValid':![],'message':'Empty\x20path'};}return{'isValid':!![],'message':_0xa49a('0x70')};};module[_0xa49a('0x71')]=Fax;
\ No newline at end of file
+var _0xc6d6=['[Fax][Message][Error][Updated]','[Fax][Message][Error][NoUpdate1]','updateStatus','[Fax][Message][NoUpdate1]','\x20hangup\x20sendFile\x20','\x20hangup\x20faxRiceive\x20','faxpages','SUCCESS','faxstatusstring','SENDING\x20FAILED:\x20','send','execOriginate','FaxAccountId','[Fax][execOriginate][success]','Fax\x20received','Fax\x20failed','checkAfterSend','checkTrunk','Trunk','isValid','Trunk\x20Reachable','format','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','%s/%s.tif','dir','XMF-PATH','Convert\x20pdf\x20to\x20tif','Action','variablesAction','addVariables','ext','isNil','active','SIP/%s','reachable','unmonitored','isTrunkReachable','[Fax][checkTrunk][Trunk\x20not\x20work]','\x20Trunk\x20is\x20not\x20active','Trunk\x20not\x20working','[Fax][checkTrunk][Empty\x20path]','Is\x20Valid','util','lodash','bluebird','uuid','path','tiff2pdf','../../../config/logger','fax','../ami','./rpcDb','./channel','./util/util','./action','../rpc/faxAccount','../rpc/faxMessage','channels','faxAccounts','trunks','actions','newchannel','syncNewchannel','bind','varset','newstate','syncNewState','newexten','syncNewExten','faxstatus','syncFaxStatus','receivefax','syncHangup','originateresponse','syncOriginateResponse','context','hasOwnProperty','exten','localstationid','uniqueid','channel','name','info','\x20syncNewchannel\x20','syncVarSet','variable','prototype','channelstate','channelstatedesc','value','operation','status','filename','\x20syncFaxStatus\x20','syncReceiveFax','remotestationid','pagestransferred','resolution','transferrate','calleridnum','message','create','parse','.pdf','application/pdf','notify','catch','error','\x20notify\x20','stringify','\x20receiveFax\x20','merge','pick','response','reason','AttachmentId','update','SENDING\x20FAILED\x20','then','logger'];(function(_0x1b9956,_0x47a682){var _0x339c26=function(_0x378a6f){while(--_0x378a6f){_0x1b9956['push'](_0x1b9956['shift']());}};_0x339c26(++_0x47a682);}(_0xc6d6,0x11d));var _0x6c6d=function(_0x2d2949,_0x24c559){_0x2d2949=_0x2d2949-0x0;var _0x4bb11f=_0xc6d6[_0x2d2949];return _0x4bb11f;};'use strict';var util=require(_0x6c6d('0x0'));var _=require(_0x6c6d('0x1'));var BPromise=require(_0x6c6d('0x2'));var uuid=require(_0x6c6d('0x3'));var moment=require('moment');var path=require(_0x6c6d('0x4'));var tiff2pdf=require(_0x6c6d('0x5'));var gs=require('./util/gs');var logger=require(_0x6c6d('0x6'))(_0x6c6d('0x7'));var ami=require(_0x6c6d('0x8'));var rpcDb=require(_0x6c6d('0x9'));var Channel=require(_0x6c6d('0xa'));var ut=require(_0x6c6d('0xb'));var Action=require(_0x6c6d('0xc'));var faxAccount=require(_0x6c6d('0xd'));var attachment=require('../rpc/attachment');var faxMessage=require(_0x6c6d('0xe'));function Fax(_0x41c721){this[_0x6c6d('0xf')]={};this[_0x6c6d('0x10')]=_0x41c721[_0x6c6d('0x10')];this[_0x6c6d('0x11')]=_0x41c721[_0x6c6d('0x11')];this[_0x6c6d('0x12')]={};ami['on'](_0x6c6d('0x13'),this[_0x6c6d('0x14')][_0x6c6d('0x15')](this));ami['on'](_0x6c6d('0x16'),this['syncVarSet'][_0x6c6d('0x15')](this));ami['on'](_0x6c6d('0x17'),this[_0x6c6d('0x18')][_0x6c6d('0x15')](this));ami['on'](_0x6c6d('0x19'),this[_0x6c6d('0x1a')][_0x6c6d('0x15')](this));ami['on'](_0x6c6d('0x1b'),this[_0x6c6d('0x1c')][_0x6c6d('0x15')](this));ami['on'](_0x6c6d('0x1d'),this['syncReceiveFax'][_0x6c6d('0x15')](this));ami['on']('hangup',this[_0x6c6d('0x1e')][_0x6c6d('0x15')](this));ami['on'](_0x6c6d('0x1f'),this[_0x6c6d('0x20')][_0x6c6d('0x15')](this));}Fax['prototype'][_0x6c6d('0x14')]=function(_0x30c886){if(_0x30c886[_0x6c6d('0x21')]==='from-voip-provider'){for(var _0x36e3a5 in this[_0x6c6d('0x10')]){if(this[_0x6c6d('0x10')][_0x6c6d('0x22')](_0x36e3a5)){if(_0x30c886[_0x6c6d('0x23')]===this[_0x6c6d('0x10')][_0x36e3a5][_0x6c6d('0x24')]){this[_0x6c6d('0xf')][_0x30c886['uniqueid']]={};this[_0x6c6d('0xf')][_0x30c886[_0x6c6d('0x25')]][_0x6c6d('0x26')]=_0x30c886[_0x6c6d('0x26')];this[_0x6c6d('0xf')][_0x30c886[_0x6c6d('0x25')]]['id']=this[_0x6c6d('0x10')][_0x36e3a5]['id'];this[_0x6c6d('0xf')][_0x30c886['uniqueid']][_0x6c6d('0x27')]=this[_0x6c6d('0x10')][_0x36e3a5]['name'];logger[_0x6c6d('0x28')](_0x30c886[_0x6c6d('0x25')],'\x20syncNewchannel\x20');}}}}if(this['actions'][_0x30c886[_0x6c6d('0x25')]]){this[_0x6c6d('0xf')][_0x30c886[_0x6c6d('0x25')]]={};this[_0x6c6d('0xf')][_0x30c886['uniqueid']][_0x6c6d('0x26')]=_0x30c886[_0x6c6d('0x26')];logger[_0x6c6d('0x28')](_0x30c886[_0x6c6d('0x25')],_0x6c6d('0x29'));}};Fax['prototype'][_0x6c6d('0x2a')]=function(_0x414657){if(this[_0x6c6d('0xf')][_0x414657[_0x6c6d('0x25')]]){for(var _0x4102da in _0x414657[_0x6c6d('0x2b')]){if(_0x414657[_0x6c6d('0x2b')][_0x6c6d('0x22')](_0x4102da)){this[_0x6c6d('0xf')][_0x414657[_0x6c6d('0x25')]][_0x4102da]=_0x414657['value'];}}}};Fax[_0x6c6d('0x2c')][_0x6c6d('0x18')]=function(_0x577d6e){if(this['channels'][_0x577d6e['uniqueid']]){this[_0x6c6d('0xf')][_0x577d6e[_0x6c6d('0x25')]]['channelstate']=_0x577d6e[_0x6c6d('0x2d')];this['channels'][_0x577d6e[_0x6c6d('0x25')]]['channelstatedesc']=_0x577d6e[_0x6c6d('0x2e')];}};Fax['prototype']['syncNewExten']=function(_0x298953){if(this[_0x6c6d('0xf')][_0x298953['uniqueid']]){for(var _0x59d107 in _0x298953['variable']){if(_0x298953[_0x6c6d('0x2b')]['hasOwnProperty'](_0x59d107)){this[_0x6c6d('0xf')][_0x298953[_0x6c6d('0x25')]][_0x59d107]=_0x298953[_0x6c6d('0x2f')];}}}};Fax[_0x6c6d('0x2c')][_0x6c6d('0x1c')]=function(_0x5a9262){if(this[_0x6c6d('0xf')][_0x5a9262[_0x6c6d('0x25')]]){this[_0x6c6d('0xf')][_0x5a9262[_0x6c6d('0x25')]][_0x6c6d('0x30')]=_0x5a9262['operation'];this[_0x6c6d('0xf')][_0x5a9262[_0x6c6d('0x25')]][_0x6c6d('0x31')]=_0x5a9262[_0x6c6d('0x31')];this['channels'][_0x5a9262[_0x6c6d('0x25')]]['localstationid']=_0x5a9262[_0x6c6d('0x24')];this[_0x6c6d('0xf')][_0x5a9262[_0x6c6d('0x25')]][_0x6c6d('0x32')]=_0x5a9262['filename'];logger['info'](_0x5a9262[_0x6c6d('0x25')],_0x6c6d('0x33'));}};Fax[_0x6c6d('0x2c')][_0x6c6d('0x34')]=function(_0x4dbe4b){var _0x5115c7=this;if(this[_0x6c6d('0xf')][_0x4dbe4b[_0x6c6d('0x25')]]){var _0x222a43=this[_0x6c6d('0xf')][_0x4dbe4b[_0x6c6d('0x25')]]['id'];this[_0x6c6d('0xf')][_0x4dbe4b[_0x6c6d('0x25')]][_0x6c6d('0x35')]=_0x4dbe4b[_0x6c6d('0x35')];this[_0x6c6d('0xf')][_0x4dbe4b[_0x6c6d('0x25')]]['pagestransferred']=_0x4dbe4b[_0x6c6d('0x36')];this['channels'][_0x4dbe4b[_0x6c6d('0x25')]]['localstationid']=_0x4dbe4b[_0x6c6d('0x24')];this[_0x6c6d('0xf')][_0x4dbe4b[_0x6c6d('0x25')]][_0x6c6d('0x37')]=_0x4dbe4b[_0x6c6d('0x37')];this[_0x6c6d('0xf')][_0x4dbe4b[_0x6c6d('0x25')]]['transferrate']=_0x4dbe4b[_0x6c6d('0x38')];this[_0x6c6d('0xf')][_0x4dbe4b[_0x6c6d('0x25')]][_0x6c6d('0x32')]=_0x4dbe4b[_0x6c6d('0x32')];this['channels'][_0x4dbe4b[_0x6c6d('0x25')]][_0x6c6d('0x39')]=_0x4dbe4b[_0x6c6d('0x39')];if(this[_0x6c6d('0xf')][_0x4dbe4b[_0x6c6d('0x25')]]['pagestransferred']>0x0){tiff2pdf(_0x4dbe4b['filename'],'/var/opt/motion2/server/files/attachments/',function(_0x321fc6){logger['info'](_0x4dbe4b[_0x6c6d('0x25')],'\x20result\x20conversion\x20file\x20',_0x321fc6[_0x6c6d('0x3a')]);attachment[_0x6c6d('0x3b')]({'name':path[_0x6c6d('0x3c')](_0x4dbe4b['filename'])[_0x6c6d('0x27')],'basename':path[_0x6c6d('0x3c')](_0x4dbe4b[_0x6c6d('0x32')])[_0x6c6d('0x27')]+_0x6c6d('0x3d'),'type':_0x6c6d('0x3e')})['then'](function(_0xb842db){faxAccount[_0x6c6d('0x3f')](_0x222a43,{'from':_0x4dbe4b[_0x6c6d('0x39')],'mapKey':_0x6c6d('0x7'),'body':path[_0x6c6d('0x3c')](_0x4dbe4b[_0x6c6d('0x32')])[_0x6c6d('0x27')]+_0x6c6d('0x3d'),'AttachmentId':_0xb842db['id']})[_0x6c6d('0x40')](function(_0x20b6ec){logger[_0x6c6d('0x41')](_0x4dbe4b['uniqueid'],_0x6c6d('0x42'),JSON[_0x6c6d('0x43')](_0x20b6ec));});})[_0x6c6d('0x40')](function(_0x3c682c){logger[_0x6c6d('0x41')](_0x4dbe4b['uniqueid'],_0x6c6d('0x44'),JSON[_0x6c6d('0x43')](_0x3c682c));});});}logger[_0x6c6d('0x28')](_0x4dbe4b[_0x6c6d('0x25')],'\x20receiveFax\x20');}};Fax[_0x6c6d('0x2c')][_0x6c6d('0x20')]=function(_0x5b0d74){if(this[_0x6c6d('0x12')][_0x5b0d74[_0x6c6d('0x25')]]){_[_0x6c6d('0x45')](this[_0x6c6d('0xf')][_0x5b0d74['uniqueid']],_[_0x6c6d('0x46')](_0x5b0d74,[_0x6c6d('0x47'),_0x6c6d('0x48')]));}};function updateStatus(_0x31fc6e){if(_0x31fc6e[_0x6c6d('0x49')]){faxMessage[_0x6c6d('0x4a')](_0x31fc6e[_0x6c6d('0x49')],{'failMessage':_0x6c6d('0x4b')})[_0x6c6d('0x4c')](function(_0xcbd09){ut[_0x6c6d('0x4d')](_0x6c6d('0x4e'),_0xcbd09);})[_0x6c6d('0x40')](function(_0x4bec20){ut[_0x6c6d('0x4d')](_0x6c6d('0x4f'),_0x4bec20);});}else{ut[_0x6c6d('0x4d')]('[Fax][Message][Error][NoUpdate2]');}}Fax[_0x6c6d('0x2c')][_0x6c6d('0x50')]=function(_0x1b1942,_0xb8ee9c,_0x82bc05){var _0x459418=this;var _0x46e659={};if(_0xb8ee9c){_0x46e659={'read':_0xb8ee9c};}else{_0x46e659={'failMessage':_0x82bc05};}if(this[_0x6c6d('0x12')][_0x1b1942]['AttachmentId']){faxMessage[_0x6c6d('0x4a')](this[_0x6c6d('0x12')][_0x1b1942][_0x6c6d('0x49')],_0x46e659)[_0x6c6d('0x4c')](function(_0x32370e){ut[_0x6c6d('0x4d')]('[Fax][Message][Updated]',_0x32370e);})[_0x6c6d('0x40')](function(_0x10182c){ut[_0x6c6d('0x4d')](_0x6c6d('0x51'),_0x10182c);})['finally'](function(){delete _0x459418[_0x6c6d('0xf')][_0x1b1942];delete _0x459418['actions'][_0x1b1942];});}else{ut[_0x6c6d('0x4d')]('[Fax][Message][NoUpdate2]');delete this[_0x6c6d('0xf')][_0x1b1942];delete this[_0x6c6d('0x12')][_0x1b1942];}};Fax[_0x6c6d('0x2c')][_0x6c6d('0x1e')]=function(_0x41cafa){var _0x3fa28f=this;if(this['channels'][_0x41cafa[_0x6c6d('0x25')]]){if(this[_0x6c6d('0x12')][_0x41cafa[_0x6c6d('0x25')]]){this['channels'][_0x41cafa[_0x6c6d('0x25')]]['id']=this['actions'][_0x41cafa['uniqueid']]['id'];this[_0x6c6d('0xf')][_0x41cafa[_0x6c6d('0x25')]][_0x6c6d('0x27')]=this[_0x6c6d('0x12')][_0x41cafa[_0x6c6d('0x25')]][_0x6c6d('0x27')];}logger['info'](_0x41cafa[_0x6c6d('0x25')],this[_0x6c6d('0x12')][_0x41cafa[_0x6c6d('0x25')]]?_0x6c6d('0x52'):_0x6c6d('0x53'),JSON[_0x6c6d('0x43')](this[_0x6c6d('0xf')][_0x41cafa[_0x6c6d('0x25')]]));if(this['actions'][_0x41cafa[_0x6c6d('0x25')]]){if(this[_0x6c6d('0xf')][_0x41cafa[_0x6c6d('0x25')]][_0x6c6d('0x54')]>0x0&&this[_0x6c6d('0xf')][_0x41cafa[_0x6c6d('0x25')]][_0x6c6d('0x1b')]===_0x6c6d('0x55')){this[_0x6c6d('0x50')](_0x41cafa[_0x6c6d('0x25')],!![]);}else{this[_0x6c6d('0x50')](_0x41cafa[_0x6c6d('0x25')],![],this[_0x6c6d('0xf')][_0x41cafa[_0x6c6d('0x25')]][_0x6c6d('0x56')]?_0x6c6d('0x57')+this[_0x6c6d('0xf')][_0x41cafa['uniqueid']][_0x6c6d('0x56')]:'SENDING\x20FAILED');}}}};Fax['prototype'][_0x6c6d('0x58')]=function(_0x2cf603){var _0x33c862=this;return new BPromise(function(_0x3e2e90,_0x3b913b){_0x33c862[_0x6c6d('0x59')](_0x2cf603,_0x33c862['faxAccounts'][_0x2cf603[_0x6c6d('0x5a')]])['then'](function(_0x593b31){ut[_0x6c6d('0x4d')](_0x6c6d('0x5b'),_0x593b31);_0x3e2e90(ut['message'](_0x6c6d('0x5c')));})[_0x6c6d('0x40')](function(_0x18e905){ut['logger']('[Fax][execOriginate][failure]',_0x18e905);updateStatus(_0x2cf603);_0x3b913b(ut[_0x6c6d('0x3a')](_0x6c6d('0x5d')));});});};Fax[_0x6c6d('0x2c')][_0x6c6d('0x5e')]=function(_0xd8b710){var _0x52356c=this;return new BPromise(function(_0x16bd34,_0x505472){var _0x173e77=_0x52356c[_0x6c6d('0x5f')](_0x52356c[_0x6c6d('0x10')][_0xd8b710[_0x6c6d('0x5a')]][_0x6c6d('0x60')],_0xd8b710);if(_0x173e77[_0x6c6d('0x61')]){_0x16bd34(ut[_0x6c6d('0x3a')](_0x6c6d('0x62')));}else{_0x505472(ut[_0x6c6d('0x3a')](_0x173e77[_0x6c6d('0x3a')]));}});};function originate(_0x699f54,_0x598221,_0x17bc55){return new BPromise(function(_0x5e5de9,_0x2bb484){if(_0x17bc55){var _0x437f0e=util[_0x6c6d('0x63')](_0x6c6d('0x64'),path['parse'](_0x699f54[_0x6c6d('0x4')])[_0x6c6d('0x27')],_0x699f54[_0x6c6d('0x4')]);gs[_0x6c6d('0x65')](_0x437f0e)['then'](function(){_0x699f54[_0x6c6d('0x4')]=util['format'](_0x6c6d('0x66'),path['parse'](_0x699f54[_0x6c6d('0x4')])[_0x6c6d('0x67')],path[_0x6c6d('0x3c')](_0x699f54[_0x6c6d('0x4')])['name']);_0x598221[_0x6c6d('0x68')]=_0x699f54['path'];ut[_0x6c6d('0x4d')](_0x6c6d('0x69'),'');ami[_0x6c6d('0x6a')](ut[_0x6c6d('0x6b')](_0x699f54,_0x598221))[_0x6c6d('0x4c')](function(_0x2effae){_0x5e5de9(_0x2effae);})['catch'](function(_0x1bfeab){_0x2bb484(_0x1bfeab);});})['catch'](function(_0x51785d){_0x2bb484(_0x51785d);});}else{ami[_0x6c6d('0x6a')](ut[_0x6c6d('0x6b')](_0x699f54,_0x598221))[_0x6c6d('0x4c')](function(_0x242055){_0x5e5de9(_0x242055);})['catch'](function(_0x4ae80f){_0x2bb484(_0x4ae80f);});}});}Fax[_0x6c6d('0x2c')][_0x6c6d('0x59')]=function(_0x1ef61a,_0xad446b){var _0xd3bdc3=this;return new BPromise(function(_0x373968,_0x39e278){var _0x481b60=uuid['v4']();var _0x4f3fb0=ut[_0x6c6d('0x6c')](_0x1ef61a,_0xad446b);_0xd3bdc3['actions'][_0x481b60]=new Action(_0x481b60,_0xad446b,_0x1ef61a);var _0x2d1206=_0xd3bdc3[_0x6c6d('0x12')][_0x481b60];if(path[_0x6c6d('0x3c')](_0x1ef61a['path'])[_0x6c6d('0x6d')]===_0x6c6d('0x3d')){originate(_0x2d1206,_0x4f3fb0,!![])[_0x6c6d('0x4c')](function(_0x16c3af){_0x373968(_0x16c3af);})[_0x6c6d('0x40')](function(_0x14cfde){_0x39e278(_0x14cfde);});}else{originate(_0x2d1206,_0x4f3fb0,![])['then'](function(_0xe48f06){_0x373968(_0xe48f06);})[_0x6c6d('0x40')](function(_0x5ce769){_0x39e278(_0x5ce769);});}});};Fax[_0x6c6d('0x2c')]['isTrunkReachable']=function(_0x571e44){return!_[_0x6c6d('0x6e')](_0x571e44)&&!_['isNil'](_0x571e44['name'])&&!_[_0x6c6d('0x6e')](_0x571e44[_0x6c6d('0x6f')])&&_0x571e44['active']&&!_[_0x6c6d('0x6e')](this[_0x6c6d('0x11')][util[_0x6c6d('0x63')](_0x6c6d('0x70'),_0x571e44[_0x6c6d('0x27')])])&&!_['isNil'](this['trunks'][util['format'](_0x6c6d('0x70'),_0x571e44[_0x6c6d('0x27')])][_0x6c6d('0x31')])&&(this['trunks'][util['format'](_0x6c6d('0x70'),_0x571e44[_0x6c6d('0x27')])][_0x6c6d('0x31')]===_0x6c6d('0x71')||this['trunks'][util[_0x6c6d('0x63')]('SIP/%s',_0x571e44[_0x6c6d('0x27')])][_0x6c6d('0x31')]===_0x6c6d('0x72'));};Fax['prototype'][_0x6c6d('0x5f')]=function(_0x591690,_0x52930f){if(!this[_0x6c6d('0x73')](_0x591690)){ut[_0x6c6d('0x4d')](_0x6c6d('0x74'),_[_0x6c6d('0x6e')](_0x591690)?'':_0x591690[_0x6c6d('0x27')]+_0x6c6d('0x75'));return{'isValid':![],'message':_0x6c6d('0x76')};}if(_[_0x6c6d('0x6e')](_0x52930f[_0x6c6d('0x7')])){ut[_0x6c6d('0x4d')]('[Fax][checkTrunk][Empty\x20Fax]',JSON['stringify'](_0x52930f));return{'isValid':![],'message':'Empty\x20Fax'};}if(_['isNil'](_0x52930f['path'])){ut[_0x6c6d('0x4d')](_0x6c6d('0x77'),JSON[_0x6c6d('0x43')](_0x52930f));return{'isValid':![],'message':'Empty\x20path'};}return{'isValid':!![],'message':_0x6c6d('0x78')};};module['exports']=Fax;
\ No newline at end of file
index a90c726..c3f164f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf2ec=['resolve','then','catch','[Notify]\x20','util','../../../config/logger','preview','lodash','../rpc/faxAccount','error','inspect','notify'];(function(_0x34232c,_0x18e61d){var _0x4d4f4e=function(_0x1aeb3d){while(--_0x1aeb3d){_0x34232c['push'](_0x34232c['shift']());}};_0x4d4f4e(++_0x18e61d);}(_0xf2ec,0x13c));var _0xcf2e=function(_0x3e5262,_0x1ab887){_0x3e5262=_0x3e5262-0x0;var _0x178ebf=_0xf2ec[_0x3e5262];return _0x178ebf;};'use strict';var util=require(_0xcf2e('0x0'));var BPromise=require('bluebird');var logger=require(_0xcf2e('0x1'))(_0xcf2e('0x2'));var _=require(_0xcf2e('0x3'));var faxAccount=require(_0xcf2e('0x4'));function loggerCatch(_0x2afade){return function(_0xcfe6db){logger[_0xcf2e('0x5')](_0x2afade,util[_0xcf2e('0x6')](_0xcfe6db,{'showHidden':![],'depth':null}));};}exports[_0xcf2e('0x7')]=function(_0x5e4c6a,_0x4507ff){return BPromise[_0xcf2e('0x8')]()[_0xcf2e('0x9')](faxAccount[_0xcf2e('0x7')](_0x5e4c6a,_0x4507ff))[_0xcf2e('0xa')](loggerCatch(_0xcf2e('0xb')));};
\ No newline at end of file
+var _0x42a8=['../../../config/logger','preview','lodash','error','inspect','notify','resolve','util','bluebird'];(function(_0x16b9ed,_0x56517a){var _0x66b1f8=function(_0x1c883){while(--_0x1c883){_0x16b9ed['push'](_0x16b9ed['shift']());}};_0x66b1f8(++_0x56517a);}(_0x42a8,0x18a));var _0x842a=function(_0x371b29,_0x2d33ed){_0x371b29=_0x371b29-0x0;var _0x434d79=_0x42a8[_0x371b29];return _0x434d79;};'use strict';var util=require(_0x842a('0x0'));var BPromise=require(_0x842a('0x1'));var logger=require(_0x842a('0x2'))(_0x842a('0x3'));var _=require(_0x842a('0x4'));var faxAccount=require('../rpc/faxAccount');function loggerCatch(_0x37a014){return function(_0x14e142){logger[_0x842a('0x5')](_0x37a014,util[_0x842a('0x6')](_0x14e142,{'showHidden':![],'depth':null}));};}exports[_0x842a('0x7')]=function(_0x201189,_0x368210){return BPromise[_0x842a('0x8')]()['then'](faxAccount[_0x842a('0x7')](_0x201189,_0x368210))['catch'](loggerCatch('[Notify]\x20'));};
\ No newline at end of file
index 80d8d5c..d727ec2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d61=['fax','bluebird','child_process','info','Exec\x20gs','\x20Error\x20:','inspect','util','../../../../config/logger'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x2d61,0x142));var _0x12d6=function(_0x503376,_0x5aad94){_0x503376=_0x503376-0x0;var _0x137d8a=_0x2d61[_0x503376];return _0x137d8a;};'use strict';var util=require(_0x12d6('0x0'));var logger=require(_0x12d6('0x1'))(_0x12d6('0x2'));var BPromise=require(_0x12d6('0x3'));var exec=require(_0x12d6('0x4'))['exec'];exports['execute']=function(_0x180f74){return new BPromise(function(_0x37eb54,_0x3b646b){exec(_0x180f74,function(_0x440693,_0x201f4f,_0x527fb3){logger[_0x12d6('0x5')](_0x12d6('0x6'),_0x201f4f);if(_0x440693){logger[_0x12d6('0x5')](_0x12d6('0x6'),_0x12d6('0x7'),util[_0x12d6('0x8')](_0x440693,{'showHidden':![],'depth':null}),_0x201f4f,_0x527fb3);_0x3b646b(_0x440693);}_0x37eb54(_0x201f4f);});});};
\ No newline at end of file
+var _0x25f8=['execute','Exec\x20gs','\x20Error\x20:','inspect','util','../../../../config/logger','bluebird','exec'];(function(_0x1af0e5,_0x152990){var _0x3c444a=function(_0x3b3d13){while(--_0x3b3d13){_0x1af0e5['push'](_0x1af0e5['shift']());}};_0x3c444a(++_0x152990);}(_0x25f8,0xec));var _0x825f=function(_0x178e48,_0x3c9509){_0x178e48=_0x178e48-0x0;var _0x440d7e=_0x25f8[_0x178e48];return _0x440d7e;};'use strict';var util=require(_0x825f('0x0'));var logger=require(_0x825f('0x1'))('fax');var BPromise=require(_0x825f('0x2'));var exec=require('child_process')[_0x825f('0x3')];exports[_0x825f('0x4')]=function(_0x552199){return new BPromise(function(_0x1d7502,_0x19d368){exec(_0x552199,function(_0x488c7b,_0x2b214b,_0x4a3305){logger['info'](_0x825f('0x5'),_0x2b214b);if(_0x488c7b){logger['info']('Exec\x20gs',_0x825f('0x6'),util[_0x825f('0x7')](_0x488c7b,{'showHidden':![],'depth':null}),_0x2b214b,_0x4a3305);_0x19d368(_0x488c7b);}_0x1d7502(_0x2b214b);});});};
\ No newline at end of file
index 624d2d8..858c84c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3952=['path','variablesAction','uniqueid','originate','from-sip','util','moment','fax','message','logger','info','ecm','headerinfo','minrate','maxrate','format','\x22%s\x22','modem','gateway','faxdetect','t38timeout','localstationid'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0x3952,0x9f));var _0x2395=function(_0x4aa4e6,_0x278c45){_0x4aa4e6=_0x4aa4e6-0x0;var _0x322588=_0x3952[_0x4aa4e6];return _0x322588;};'use strict';var util=require(_0x2395('0x0'));var _=require('lodash');var moment=require(_0x2395('0x1'));var logger=require('../../../../config/logger')(_0x2395('0x2'));exports[_0x2395('0x3')]=function(_0x56f7aa){return{'message':_0x56f7aa};};exports[_0x2395('0x4')]=function(_0x17b5f7,_0x1ba40f){logger[_0x2395('0x5')](_0x17b5f7,util['inspect'](_0x1ba40f,{'showHidden':![],'depth':null}));};exports['addVariables']=function(_0x32e435,_0x4973b8){var _0x44f047={'XMF-ECM':_0x4973b8[_0x2395('0x6')],'XMF-HEADERINFO':_0x4973b8[_0x2395('0x7')],'XMF-MINRATE':_0x4973b8[_0x2395('0x8')],'XMF-MAXRATE':_0x4973b8[_0x2395('0x9')],'XMF-MODEM':util[_0x2395('0xa')](_0x2395('0xb'),_0x4973b8[_0x2395('0xc')]),'XMF-GATEWAY':_0x4973b8[_0x2395('0xd')],'XMF-FAXDETECT':_0x4973b8[_0x2395('0xe')],'XMF-T38TIMEOUT':_0x4973b8[_0x2395('0xf')],'XMF-LOCALSTATIONID':_0x4973b8[_0x2395('0x10')],'XMF-PATH':_0x32e435[_0x2395('0x11')]};return _0x44f047;};exports[_0x2395('0x12')]=function(_0x5fe161,_0xbfc991){return{'actionid':_0x5fe161[_0x2395('0x13')],'action':_0x2395('0x14'),'channel':_0x5fe161['channel'],'Exten':'xcally-motion-fax','Context':_0x2395('0x15'),'Priority':'1','callerid':util[_0x2395('0xa')]('\x22%s\x22\x20<%s>',_0x5fe161[_0x2395('0x7')]?_0x5fe161[_0x2395('0x7')]:'',_0x5fe161[_0x2395('0x10')]),'variable':_0xbfc991,'timeout':0x1e*0x3e8,'async':!![],'channelid':_0x5fe161[_0x2395('0x13')]};};
\ No newline at end of file
+var _0x3526=['lodash','moment','fax','message','info','inspect','addVariables','headerinfo','minrate','\x22%s\x22','modem','faxdetect','localstationid','variablesAction','uniqueid','originate','channel','xcally-motion-fax','from-sip','\x22%s\x22\x20<%s>','util'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0x3526,0xbc));var _0x6352=function(_0x5bb936,_0x10d64e){_0x5bb936=_0x5bb936-0x0;var _0x20d906=_0x3526[_0x5bb936];return _0x20d906;};'use strict';var util=require(_0x6352('0x0'));var _=require(_0x6352('0x1'));var moment=require(_0x6352('0x2'));var logger=require('../../../../config/logger')(_0x6352('0x3'));exports[_0x6352('0x4')]=function(_0x4e8afc){return{'message':_0x4e8afc};};exports['logger']=function(_0x32a5c0,_0x5773e0){logger[_0x6352('0x5')](_0x32a5c0,util[_0x6352('0x6')](_0x5773e0,{'showHidden':![],'depth':null}));};exports[_0x6352('0x7')]=function(_0x6daabc,_0x56734d){var _0x179dc3={'XMF-ECM':_0x56734d['ecm'],'XMF-HEADERINFO':_0x56734d[_0x6352('0x8')],'XMF-MINRATE':_0x56734d[_0x6352('0x9')],'XMF-MAXRATE':_0x56734d['maxrate'],'XMF-MODEM':util['format'](_0x6352('0xa'),_0x56734d[_0x6352('0xb')]),'XMF-GATEWAY':_0x56734d['gateway'],'XMF-FAXDETECT':_0x56734d[_0x6352('0xc')],'XMF-T38TIMEOUT':_0x56734d['t38timeout'],'XMF-LOCALSTATIONID':_0x56734d[_0x6352('0xd')],'XMF-PATH':_0x6daabc['path']};return _0x179dc3;};exports[_0x6352('0xe')]=function(_0x1843ed,_0x1c07d5){return{'actionid':_0x1843ed[_0x6352('0xf')],'action':_0x6352('0x10'),'channel':_0x1843ed[_0x6352('0x11')],'Exten':_0x6352('0x12'),'Context':_0x6352('0x13'),'Priority':'1','callerid':util['format'](_0x6352('0x14'),_0x1843ed[_0x6352('0x8')]?_0x1843ed[_0x6352('0x8')]:'',_0x1843ed['localstationid']),'variable':_0x1c07d5,'timeout':0x1e*0x3e8,'async':!![],'channelid':_0x1843ed['uniqueid']};};
\ No newline at end of file
index 2aa1cbb..a21a13b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0e23=['getVoiceQueueReports','initVoiceQueueReports','getVoiceQueueHopperHistory','initVoiceQueueHopperHistory','getCampaignHopperHistory','initCampaignHopperHistory','catch','log','listen','sync','bluebird','util','./server','./realtime','./acw','./trigger','./preview','./fax','./rpc/user','./rpc/voiceQueueReport','./rpc/voiceCallReport','./rpc/trigger','./rpc/template','./rpc/cmHopperHistory','./rpc/voiceExtension','./rpc/faxAccount','./rpc/integrations/zendesk','./rpc/integrations/salesforce','./rpc/integrations/sugarcrm','./rpc/integrations/vtiger','./rpc/integrations/dynamics365','get','hour','resolve','then','initAgents','getTrunks','initTrunks','getVoiceQueues','initVoiceQueues','getTriggers','initTriggers','getTemplates','initTemplates','getZendeskAccounts','initZendeskAccounts','getSalesforceAccounts','initSalesforceAccounts','initSugarcrmAccounts','getFreshdeskAccounts','initFreshdeskAccounts','getDeskAccounts','initDeskAccounts','getVtigerAccounts','initVtigerAccounts','getServicenowAccounts','initServicenowAccounts','getDynamics365Accounts','getCampaigns','getVoiceExtensions','initVoiceExtensions','getFaxAccounts','initFaxAccounts'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x0e23,0x145));var _0x30e2=function(_0x33c622,_0x455bee){_0x33c622=_0x33c622-0x0;var _0x1f0767=_0x0e23[_0x33c622];return _0x1f0767;};'use strict';var BPromise=require(_0x30e2('0x0'));var util=require(_0x30e2('0x1'));var moment=require('moment');var server=require(_0x30e2('0x2'));var Realtime=require(_0x30e2('0x3'));var Report=require('./report');var Acw=require(_0x30e2('0x4'));var Trigger=require(_0x30e2('0x5'));var Dialer=require('./dialer');var Preview=require(_0x30e2('0x6'));var Fax=require(_0x30e2('0x7'));var user=require(_0x30e2('0x8'));var voiceQueue=require('./rpc/voiceQueue');var voiceQueueReport=require(_0x30e2('0x9'));var voiceCallReport=require(_0x30e2('0xa'));var trunk=require('./rpc/trunk');var trigger=require(_0x30e2('0xb'));var template=require(_0x30e2('0xc'));var cmHopperHistory=require(_0x30e2('0xd'));var campaign=require('./rpc/campaign');var voiceExtension=require(_0x30e2('0xe'));var faxAccount=require(_0x30e2('0xf'));var zendesk=require(_0x30e2('0x10'));var salesforce=require(_0x30e2('0x11'));var sugarcrm=require(_0x30e2('0x12'));var freshdesk=require('./rpc/integrations/freshdesk');var desk=require('./rpc/integrations/desk');var zoho=require('./rpc/integrations/zoho');var vtiger=require(_0x30e2('0x13'));var servicenow=require('./rpc/integrations/servicenow');var dynamics365=require(_0x30e2('0x14'));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()[_0x30e2('0x15')](_0x30e2('0x16'))===0x0&&initP){initP=![];isTrue=!![];initParams();}if(moment()[_0x30e2('0x15')](_0x30e2('0x16'))===0x1&&isTrue){isTrue=![];initP=!![];}}function initRealtime(){ifMidnight();return BPromise[_0x30e2('0x17')]()[_0x30e2('0x18')](user['getAgents']())[_0x30e2('0x18')](realtime[_0x30e2('0x19')]())['then'](user['getTelephones']())[_0x30e2('0x18')](realtime['initTelephones']())['then'](trunk[_0x30e2('0x1a')]())[_0x30e2('0x18')](realtime[_0x30e2('0x1b')]())[_0x30e2('0x18')](voiceQueue[_0x30e2('0x1c')]())[_0x30e2('0x18')](realtime[_0x30e2('0x1d')]())[_0x30e2('0x18')](trigger[_0x30e2('0x1e')]())['then'](realtime[_0x30e2('0x1f')]())[_0x30e2('0x18')](template[_0x30e2('0x20')]())[_0x30e2('0x18')](realtime[_0x30e2('0x21')]())[_0x30e2('0x18')](zendesk[_0x30e2('0x22')]())['then'](realtime[_0x30e2('0x23')]())[_0x30e2('0x18')](salesforce[_0x30e2('0x24')]())[_0x30e2('0x18')](realtime[_0x30e2('0x25')]())[_0x30e2('0x18')](sugarcrm['getSugarcrmAccounts']())['then'](realtime[_0x30e2('0x26')]())['then'](freshdesk[_0x30e2('0x27')]())[_0x30e2('0x18')](realtime[_0x30e2('0x28')]())[_0x30e2('0x18')](desk[_0x30e2('0x29')]())[_0x30e2('0x18')](realtime[_0x30e2('0x2a')]())[_0x30e2('0x18')](zoho['getZohoAccounts']())[_0x30e2('0x18')](realtime['initZohoAccounts']())['then'](vtiger[_0x30e2('0x2b')]())[_0x30e2('0x18')](realtime[_0x30e2('0x2c')]())[_0x30e2('0x18')](servicenow[_0x30e2('0x2d')]())['then'](realtime[_0x30e2('0x2e')]())[_0x30e2('0x18')](dynamics365[_0x30e2('0x2f')]())[_0x30e2('0x18')](realtime['initDynamics365Accounts']())['then'](campaign[_0x30e2('0x30')]())[_0x30e2('0x18')](realtime['initCampaigns']())['then'](voiceExtension[_0x30e2('0x31')]())[_0x30e2('0x18')](realtime[_0x30e2('0x32')]())[_0x30e2('0x18')](faxAccount[_0x30e2('0x33')]())['then'](realtime[_0x30e2('0x34')]())['then'](function(){return realtime;});}function initParams(){return BPromise['resolve']()[_0x30e2('0x18')](voiceQueueReport[_0x30e2('0x35')]())['then'](realtime[_0x30e2('0x36')]())[_0x30e2('0x18')](cmHopperHistory[_0x30e2('0x37')]())[_0x30e2('0x18')](realtime[_0x30e2('0x38')]())[_0x30e2('0x18')](cmHopperHistory[_0x30e2('0x39')]())['then'](realtime[_0x30e2('0x3a')]())['then'](voiceCallReport['getVoiceCallReports']())[_0x30e2('0x18')](realtime['initVoiceCallReports']())['then'](function(_0x4b24fe){})[_0x30e2('0x3b')](function(_0x5440f4){console[_0x30e2('0x3c')](_0x5440f4);});}function main(){return server[_0x30e2('0x3d')](realtime,preview,fax)['then'](function(_0x1e34df){return initRealtime();})[_0x30e2('0x18')](function(){return initParams();})[_0x30e2('0x18')](function(){report[_0x30e2('0x3e')]();setInterval(initRealtime,0x1388);})[_0x30e2('0x3b')](function(_0x38efac){console[_0x30e2('0x3c')](_0x38efac);});}main();
\ No newline at end of file
+var _0x58df=['./rpc/integrations/servicenow','./rpc/integrations/dynamics365','then','getAgents','initAgents','getTelephones','getTrunks','getVoiceQueues','initVoiceQueues','getTriggers','initTriggers','getTemplates','initTemplates','getZendeskAccounts','initZendeskAccounts','getSugarcrmAccounts','initSugarcrmAccounts','getFreshdeskAccounts','getDeskAccounts','getZohoAccounts','initZohoAccounts','initServicenowAccounts','getDynamics365Accounts','initDynamics365Accounts','getCampaigns','getVoiceExtensions','initVoiceExtensions','initFaxAccounts','initVoiceQueueReports','initVoiceQueueHopperHistory','initCampaignHopperHistory','initVoiceCallReports','catch','log','listen','sync','bluebird','util','moment','./server','./report','./trigger','./dialer','./fax','./rpc/user','./rpc/voiceQueue','./rpc/voiceQueueReport','./rpc/voiceCallReport','./rpc/trunk','./rpc/cmHopperHistory','./rpc/campaign','./rpc/voiceExtension','./rpc/integrations/zendesk','./rpc/integrations/salesforce','./rpc/integrations/sugarcrm','./rpc/integrations/freshdesk','./rpc/integrations/desk','./rpc/integrations/zoho','./rpc/integrations/vtiger'];(function(_0x18547d,_0xde9ca8){var _0x1114d2=function(_0x5246f2){while(--_0x5246f2){_0x18547d['push'](_0x18547d['shift']());}};_0x1114d2(++_0xde9ca8);}(_0x58df,0x186));var _0xf58d=function(_0x3ef818,_0x4667b2){_0x3ef818=_0x3ef818-0x0;var _0x233e2c=_0x58df[_0x3ef818];return _0x233e2c;};'use strict';var BPromise=require(_0xf58d('0x0'));var util=require(_0xf58d('0x1'));var moment=require(_0xf58d('0x2'));var server=require(_0xf58d('0x3'));var Realtime=require('./realtime');var Report=require(_0xf58d('0x4'));var Acw=require('./acw');var Trigger=require(_0xf58d('0x5'));var Dialer=require(_0xf58d('0x6'));var Preview=require('./preview');var Fax=require(_0xf58d('0x7'));var user=require(_0xf58d('0x8'));var voiceQueue=require(_0xf58d('0x9'));var voiceQueueReport=require(_0xf58d('0xa'));var voiceCallReport=require(_0xf58d('0xb'));var trunk=require(_0xf58d('0xc'));var trigger=require('./rpc/trigger');var template=require('./rpc/template');var cmHopperHistory=require(_0xf58d('0xd'));var campaign=require(_0xf58d('0xe'));var voiceExtension=require(_0xf58d('0xf'));var faxAccount=require('./rpc/faxAccount');var zendesk=require(_0xf58d('0x10'));var salesforce=require(_0xf58d('0x11'));var sugarcrm=require(_0xf58d('0x12'));var freshdesk=require(_0xf58d('0x13'));var desk=require(_0xf58d('0x14'));var zoho=require(_0xf58d('0x15'));var vtiger=require(_0xf58d('0x16'));var servicenow=require(_0xf58d('0x17'));var dynamics365=require(_0xf58d('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()['get']('hour')===0x0&&initP){initP=![];isTrue=!![];initParams();}if(moment()['get']('hour')===0x1&&isTrue){isTrue=![];initP=!![];}}function initRealtime(){ifMidnight();return BPromise['resolve']()[_0xf58d('0x19')](user[_0xf58d('0x1a')]())['then'](realtime[_0xf58d('0x1b')]())[_0xf58d('0x19')](user[_0xf58d('0x1c')]())['then'](realtime['initTelephones']())[_0xf58d('0x19')](trunk[_0xf58d('0x1d')]())[_0xf58d('0x19')](realtime['initTrunks']())[_0xf58d('0x19')](voiceQueue[_0xf58d('0x1e')]())[_0xf58d('0x19')](realtime[_0xf58d('0x1f')]())[_0xf58d('0x19')](trigger[_0xf58d('0x20')]())['then'](realtime[_0xf58d('0x21')]())[_0xf58d('0x19')](template[_0xf58d('0x22')]())['then'](realtime[_0xf58d('0x23')]())['then'](zendesk[_0xf58d('0x24')]())[_0xf58d('0x19')](realtime[_0xf58d('0x25')]())[_0xf58d('0x19')](salesforce['getSalesforceAccounts']())[_0xf58d('0x19')](realtime['initSalesforceAccounts']())[_0xf58d('0x19')](sugarcrm[_0xf58d('0x26')]())['then'](realtime[_0xf58d('0x27')]())['then'](freshdesk[_0xf58d('0x28')]())[_0xf58d('0x19')](realtime['initFreshdeskAccounts']())[_0xf58d('0x19')](desk[_0xf58d('0x29')]())['then'](realtime['initDeskAccounts']())[_0xf58d('0x19')](zoho[_0xf58d('0x2a')]())[_0xf58d('0x19')](realtime[_0xf58d('0x2b')]())['then'](vtiger['getVtigerAccounts']())[_0xf58d('0x19')](realtime['initVtigerAccounts']())[_0xf58d('0x19')](servicenow['getServicenowAccounts']())[_0xf58d('0x19')](realtime[_0xf58d('0x2c')]())['then'](dynamics365[_0xf58d('0x2d')]())[_0xf58d('0x19')](realtime[_0xf58d('0x2e')]())[_0xf58d('0x19')](campaign[_0xf58d('0x2f')]())['then'](realtime['initCampaigns']())[_0xf58d('0x19')](voiceExtension[_0xf58d('0x30')]())[_0xf58d('0x19')](realtime[_0xf58d('0x31')]())[_0xf58d('0x19')](faxAccount['getFaxAccounts']())[_0xf58d('0x19')](realtime[_0xf58d('0x32')]())[_0xf58d('0x19')](function(){return realtime;});}function initParams(){return BPromise['resolve']()['then'](voiceQueueReport['getVoiceQueueReports']())[_0xf58d('0x19')](realtime[_0xf58d('0x33')]())[_0xf58d('0x19')](cmHopperHistory['getVoiceQueueHopperHistory']())['then'](realtime[_0xf58d('0x34')]())[_0xf58d('0x19')](cmHopperHistory['getCampaignHopperHistory']())['then'](realtime[_0xf58d('0x35')]())[_0xf58d('0x19')](voiceCallReport['getVoiceCallReports']())[_0xf58d('0x19')](realtime[_0xf58d('0x36')]())[_0xf58d('0x19')](function(_0x510248){})[_0xf58d('0x37')](function(_0x28b82b){console[_0xf58d('0x38')](_0x28b82b);});}function main(){return server[_0xf58d('0x39')](realtime,preview,fax)['then'](function(_0x5b565a){return initRealtime();})[_0xf58d('0x19')](function(){return initParams();})[_0xf58d('0x19')](function(){report[_0xf58d('0x3a')]();setInterval(initRealtime,0x1388);})[_0xf58d('0x37')](function(_0x4ddfa6){console[_0xf58d('0x38')](_0x4ddfa6);});}main();
\ No newline at end of file
index 0d1591e..3e78af8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8f52=['redis','defaults','localhost','socket.io-emitter','name','email','accountcode','fullname','state','stateTime','status','unknown','address','phone','interface','online','voiceStatus','voiceStatusTime','voiceStatusCallerIdNumber','voiceStatusQueue','onhold','prototype','toLowerCase','not_inuse','idle','talking','statePause','toNumber','format','stringify','user:%s','emit','lodash','util','md5','ioredis','../../../config/environment'];(function(_0x56b77f,_0x32d89e){var _0x35403f=function(_0x2694dd){while(--_0x2694dd){_0x56b77f['push'](_0x56b77f['shift']());}};_0x35403f(++_0x32d89e);}(_0x8f52,0x16d));var _0x28f5=function(_0x55f8b4,_0x43f30d){_0x55f8b4=_0x55f8b4-0x0;var _0x2475f9=_0x8f52[_0x55f8b4];return _0x2475f9;};'use strict';var _=require(_0x28f5('0x0'));var util=require(_0x28f5('0x1'));var moment=require('moment');var md5=require(_0x28f5('0x2'));var Redis=require(_0x28f5('0x3'));var config=require(_0x28f5('0x4'));config[_0x28f5('0x5')]=_[_0x28f5('0x6')](config[_0x28f5('0x5')],{'host':_0x28f5('0x7'),'port':0x18eb});var io=require(_0x28f5('0x8'))(new Redis(config[_0x28f5('0x5')]));function Agent(_0x3f5015){this['id']=_0x3f5015['id']||0x0;this[_0x28f5('0x9')]=_0x3f5015[_0x28f5('0x9')]||'';this[_0x28f5('0xa')]=_0x3f5015[_0x28f5('0xa')]||'';this[_0x28f5('0xb')]=_0x3f5015[_0x28f5('0xb')]||'';this[_0x28f5('0xc')]=_0x3f5015[_0x28f5('0xc')]||'';this[_0x28f5('0xd')]='unknown';this[_0x28f5('0xe')]=0x0;this[_0x28f5('0xf')]=_0x28f5('0x10');this[_0x28f5('0x11')]='';this[_0x28f5('0x12')]='';this['mobile']='';this[_0x28f5('0x13')]='';this[_0x28f5('0x14')]=_0x3f5015[_0x28f5('0x14')]||![];this[_0x28f5('0x15')]=_0x28f5('0x10');this[_0x28f5('0x16')]=0x0;this[_0x28f5('0x17')]='';this[_0x28f5('0x18')]='';this[_0x28f5('0x19')]=![];this['local']=![];this[_0x28f5('0x2')]='';}Agent[_0x28f5('0x1a')]['updateStatusRealtime']=function(_0x418228){var _0x2636df;if(_0x418228&&_0x418228[_0x28f5('0xd')]){_0x2636df=_0x418228['state'][_0x28f5('0x1b')]();switch(_0x2636df){case _0x28f5('0x1c'):_0x2636df=_0x28f5('0x1d');break;case'inuse':_0x2636df=_0x28f5('0x1e');break;}}if(_0x2636df&&this[_0x28f5('0x15')]!==_0x2636df||_0x418228[_0x28f5('0x1f')]){this[_0x28f5('0x16')]=_[_0x28f5('0x20')](moment()[_0x28f5('0x21')]('x'));}if(_0x2636df){this[_0x28f5('0x15')]=_0x2636df;}var _0x2f3398={'id':this['id'],'name':this['name'],'email':this[_0x28f5('0xa')],'accountcode':this['accountcode'],'fullname':this[_0x28f5('0xc')],'state':this['state'],'stateTime':this[_0x28f5('0xe')],'status':this[_0x28f5('0xf')],'address':this[_0x28f5('0x11')],'online':this[_0x28f5('0x14')],'voiceStatus':this[_0x28f5('0x15')],'voiceStatusTime':this[_0x28f5('0x16')],'voiceStatusCallerIdNumber':this[_0x28f5('0x17')],'voiceStatusQueue':this[_0x28f5('0x18')],'interface':this['interface'],'onhold':this[_0x28f5('0x19')]};var _0x12ed04=md5(JSON[_0x28f5('0x22')](_0x2f3398));if(this[_0x28f5('0x2')]!==_0x12ed04){this[_0x28f5('0x2')]=_0x12ed04;io['to'](util[_0x28f5('0x21')](_0x28f5('0x23'),_0x2f3398[_0x28f5('0x9')]))[_0x28f5('0x24')]('user:save',_0x2f3398);}};module['exports']=Agent;
\ No newline at end of file
+var _0x0864=['address','stringify','user:%s','user:save','exports','lodash','util','moment','md5','redis','defaults','socket.io-emitter','name','email','accountcode','state','unknown','stateTime','status','mobile','interface','online','voiceStatus','voiceStatusCallerIdNumber','voiceStatusQueue','onhold','local','prototype','toLowerCase','not_inuse','idle','inuse','talking','statePause','voiceStatusTime','format'];(function(_0x3d41b8,_0x28bbf7){var _0x65c232=function(_0x3af887){while(--_0x3af887){_0x3d41b8['push'](_0x3d41b8['shift']());}};_0x65c232(++_0x28bbf7);}(_0x0864,0x1d9));var _0x4086=function(_0x596889,_0x42effe){_0x596889=_0x596889-0x0;var _0x169ce9=_0x0864[_0x596889];return _0x169ce9;};'use strict';var _=require(_0x4086('0x0'));var util=require(_0x4086('0x1'));var moment=require(_0x4086('0x2'));var md5=require(_0x4086('0x3'));var Redis=require('ioredis');var config=require('../../../config/environment');config[_0x4086('0x4')]=_[_0x4086('0x5')](config[_0x4086('0x4')],{'host':'localhost','port':0x18eb});var io=require(_0x4086('0x6'))(new Redis(config[_0x4086('0x4')]));function Agent(_0x3fbfd0){this['id']=_0x3fbfd0['id']||0x0;this[_0x4086('0x7')]=_0x3fbfd0[_0x4086('0x7')]||'';this[_0x4086('0x8')]=_0x3fbfd0['email']||'';this['accountcode']=_0x3fbfd0[_0x4086('0x9')]||'';this['fullname']=_0x3fbfd0['fullname']||'';this[_0x4086('0xa')]=_0x4086('0xb');this[_0x4086('0xc')]=0x0;this[_0x4086('0xd')]='unknown';this['address']='';this['phone']='';this[_0x4086('0xe')]='';this[_0x4086('0xf')]='';this[_0x4086('0x10')]=_0x3fbfd0[_0x4086('0x10')]||![];this[_0x4086('0x11')]='unknown';this['voiceStatusTime']=0x0;this[_0x4086('0x12')]='';this[_0x4086('0x13')]='';this[_0x4086('0x14')]=![];this[_0x4086('0x15')]=![];this['md5']='';}Agent[_0x4086('0x16')]['updateStatusRealtime']=function(_0x4b2682){var _0x255b12;if(_0x4b2682&&_0x4b2682[_0x4086('0xa')]){_0x255b12=_0x4b2682[_0x4086('0xa')][_0x4086('0x17')]();switch(_0x255b12){case _0x4086('0x18'):_0x255b12=_0x4086('0x19');break;case _0x4086('0x1a'):_0x255b12=_0x4086('0x1b');break;}}if(_0x255b12&&this['voiceStatus']!==_0x255b12||_0x4b2682[_0x4086('0x1c')]){this[_0x4086('0x1d')]=_['toNumber'](moment()[_0x4086('0x1e')]('x'));}if(_0x255b12){this[_0x4086('0x11')]=_0x255b12;}var _0x116164={'id':this['id'],'name':this[_0x4086('0x7')],'email':this['email'],'accountcode':this[_0x4086('0x9')],'fullname':this['fullname'],'state':this[_0x4086('0xa')],'stateTime':this[_0x4086('0xc')],'status':this[_0x4086('0xd')],'address':this[_0x4086('0x1f')],'online':this[_0x4086('0x10')],'voiceStatus':this[_0x4086('0x11')],'voiceStatusTime':this['voiceStatusTime'],'voiceStatusCallerIdNumber':this['voiceStatusCallerIdNumber'],'voiceStatusQueue':this[_0x4086('0x13')],'interface':this[_0x4086('0xf')],'onhold':this[_0x4086('0x14')]};var _0x569482=md5(JSON[_0x4086('0x20')](_0x116164));if(this[_0x4086('0x3')]!==_0x569482){this[_0x4086('0x3')]=_0x569482;io['to'](util[_0x4086('0x1e')](_0x4086('0x21'),_0x116164[_0x4086('0x7')]))['emit'](_0x4086('0x22'),_0x116164);}};module[_0x4086('0x23')]=Agent;
\ No newline at end of file
index 0aff947..58ff762 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7fce=['dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','exports','name','type','originated','ivrAnswerCallsDay','ivrTotalCallsDays','active','limitCalls','dialTimezone','dialGlobalInterval','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialOrderByScheduledAt','dialPrefix','dialRandomLastDigitCallerIdNumber','dialCutDigit','TrunkBackup','Interval','SquareProject','dialQueueProject','dialAMDActive','dialAMDInitialSilence','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence'];(function(_0x56c305,_0x3b56bd){var _0x11f5ca=function(_0x352b20){while(--_0x352b20){_0x56c305['push'](_0x56c305['shift']());}};_0x11f5ca(++_0x3b56bd);}(_0x7fce,0xdc));var _0xe7fc=function(_0x192549,_0x4b7b54){_0x192549=_0x192549-0x0;var _0x3286a1=_0x7fce[_0x192549];return _0x3286a1;};'use strict';function Campaign(_0x122c59){this['id']=_0x122c59['id']||0x0;this[_0xe7fc('0x0')]=_0x122c59[_0xe7fc('0x0')]||'';this['type']=_0x122c59[_0xe7fc('0x1')]||'campaign';this[_0xe7fc('0x2')]=0x0;this['temp']=0x0;this[_0xe7fc('0x3')]=0x0;this[_0xe7fc('0x4')]=0x0;this['message']='';this['sendMessageOneNotActive']=!![];this[_0xe7fc('0x5')]=_0x122c59['active'];this[_0xe7fc('0x6')]=_0x122c59[_0xe7fc('0x6')];this[_0xe7fc('0x7')]=_0x122c59[_0xe7fc('0x7')]||null;this[_0xe7fc('0x8')]=_0x122c59['dialGlobalInterval']?_0x122c59[_0xe7fc('0x8')]:null;this['dialOriginateCallerIdName']=_0x122c59[_0xe7fc('0x9')];this['dialOriginateCallerIdNumber']=_0x122c59[_0xe7fc('0xa')];this[_0xe7fc('0xb')]=_0x122c59[_0xe7fc('0xb')]||0x1e;this[_0xe7fc('0xc')]=_0x122c59['dialCongestionMaxRetry'];this[_0xe7fc('0xd')]=_0x122c59[_0xe7fc('0xd')];this['dialBusyMaxRetry']=_0x122c59['dialBusyMaxRetry'];this[_0xe7fc('0xe')]=_0x122c59['dialBusyRetryFrequency'];this[_0xe7fc('0xf')]=_0x122c59['dialNoAnswerMaxRetry'];this['dialNoAnswerRetryFrequency']=_0x122c59[_0xe7fc('0x10')];this[_0xe7fc('0x11')]=_0x122c59[_0xe7fc('0x11')];this[_0xe7fc('0x12')]=_0x122c59[_0xe7fc('0x12')]||'DESC';this[_0xe7fc('0x13')]=_0x122c59['dialPrefix']||undefined;this['dialRandomLastDigitCallerIdNumber']=_0x122c59[_0xe7fc('0x14')]||undefined;this[_0xe7fc('0x15')]=_0x122c59[_0xe7fc('0x15')]||undefined;this[_0xe7fc('0x16')]=_0x122c59['TrunkBackup']?_0x122c59['TrunkBackup']:undefined;this['Trunk']=_0x122c59['Trunk']?_0x122c59['Trunk']:undefined;this['Interval']=_0x122c59[_0xe7fc('0x17')]?_0x122c59['Interval']:undefined;this[_0xe7fc('0x18')]=_0x122c59[_0xe7fc('0x18')]?_0x122c59[_0xe7fc('0x18')]:undefined;this[_0xe7fc('0x19')]=_0x122c59[_0xe7fc('0x18')]?_0x122c59[_0xe7fc('0x18')][_0xe7fc('0x0')]:undefined;this[_0xe7fc('0x1a')]=_0x122c59['dialAMDActive']||![];this[_0xe7fc('0x1b')]=_0x122c59[_0xe7fc('0x1b')];this['dialAMDGreeting']=_0x122c59['dialAMDGreeting'];this[_0xe7fc('0x1c')]=_0x122c59[_0xe7fc('0x1c')];this[_0xe7fc('0x1d')]=_0x122c59[_0xe7fc('0x1d')];this[_0xe7fc('0x1e')]=_0x122c59[_0xe7fc('0x1e')];this[_0xe7fc('0x1f')]=_0x122c59[_0xe7fc('0x1f')];this[_0xe7fc('0x20')]=_0x122c59[_0xe7fc('0x20')];this[_0xe7fc('0x21')]=_0x122c59[_0xe7fc('0x21')];this[_0xe7fc('0x22')]=_0x122c59['dialAMDMaximumWordLength'];}module[_0xe7fc('0x23')]=Campaign;
\ No newline at end of file
+var _0x16d2=['dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','name','type','campaign','originated','temp','ivrAnswerCallsDay','message','sendMessageOneNotActive','active','limitCalls','dialTimezone','dialGlobalInterval','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialOrderByScheduledAt','DESC','dialPrefix','dialRandomLastDigitCallerIdNumber','dialCutDigit','TrunkBackup','Trunk','Interval','SquareProject','dialQueueProject','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime'];(function(_0x1969a7,_0x5a133a){var _0x3d665f=function(_0x39c64b){while(--_0x39c64b){_0x1969a7['push'](_0x1969a7['shift']());}};_0x3d665f(++_0x5a133a);}(_0x16d2,0x123));var _0x216d=function(_0x4b20ca,_0x22e9eb){_0x4b20ca=_0x4b20ca-0x0;var _0x218273=_0x16d2[_0x4b20ca];return _0x218273;};'use strict';function Campaign(_0x585a59){this['id']=_0x585a59['id']||0x0;this[_0x216d('0x0')]=_0x585a59[_0x216d('0x0')]||'';this[_0x216d('0x1')]=_0x585a59[_0x216d('0x1')]||_0x216d('0x2');this[_0x216d('0x3')]=0x0;this[_0x216d('0x4')]=0x0;this[_0x216d('0x5')]=0x0;this['ivrTotalCallsDays']=0x0;this[_0x216d('0x6')]='';this[_0x216d('0x7')]=!![];this[_0x216d('0x8')]=_0x585a59[_0x216d('0x8')];this[_0x216d('0x9')]=_0x585a59[_0x216d('0x9')];this[_0x216d('0xa')]=_0x585a59[_0x216d('0xa')]||null;this['dialGlobalInterval']=_0x585a59[_0x216d('0xb')]?_0x585a59[_0x216d('0xb')]:null;this[_0x216d('0xc')]=_0x585a59[_0x216d('0xc')];this[_0x216d('0xd')]=_0x585a59[_0x216d('0xd')];this['dialOriginateTimeout']=_0x585a59[_0x216d('0xe')]||0x1e;this['dialCongestionMaxRetry']=_0x585a59[_0x216d('0xf')];this[_0x216d('0x10')]=_0x585a59[_0x216d('0x10')];this[_0x216d('0x11')]=_0x585a59[_0x216d('0x11')];this[_0x216d('0x12')]=_0x585a59['dialBusyRetryFrequency'];this[_0x216d('0x13')]=_0x585a59['dialNoAnswerMaxRetry'];this[_0x216d('0x14')]=_0x585a59[_0x216d('0x14')];this['dialGlobalMaxRetry']=_0x585a59[_0x216d('0x15')];this[_0x216d('0x16')]=_0x585a59['dialOrderByScheduledAt']||_0x216d('0x17');this['dialPrefix']=_0x585a59[_0x216d('0x18')]||undefined;this[_0x216d('0x19')]=_0x585a59[_0x216d('0x19')]||undefined;this[_0x216d('0x1a')]=_0x585a59[_0x216d('0x1a')]||undefined;this[_0x216d('0x1b')]=_0x585a59[_0x216d('0x1b')]?_0x585a59[_0x216d('0x1b')]:undefined;this[_0x216d('0x1c')]=_0x585a59['Trunk']?_0x585a59[_0x216d('0x1c')]:undefined;this['Interval']=_0x585a59['Interval']?_0x585a59[_0x216d('0x1d')]:undefined;this[_0x216d('0x1e')]=_0x585a59['SquareProject']?_0x585a59[_0x216d('0x1e')]:undefined;this[_0x216d('0x1f')]=_0x585a59['SquareProject']?_0x585a59[_0x216d('0x1e')][_0x216d('0x0')]:undefined;this[_0x216d('0x20')]=_0x585a59[_0x216d('0x20')]||![];this['dialAMDInitialSilence']=_0x585a59[_0x216d('0x21')];this[_0x216d('0x22')]=_0x585a59[_0x216d('0x22')];this[_0x216d('0x23')]=_0x585a59[_0x216d('0x23')];this['dialAMDTotalAnalysisTime']=_0x585a59[_0x216d('0x24')];this[_0x216d('0x25')]=_0x585a59[_0x216d('0x25')];this[_0x216d('0x26')]=_0x585a59[_0x216d('0x26')];this['dialAMDMaximumNumberOfWords']=_0x585a59[_0x216d('0x27')];this[_0x216d('0x28')]=_0x585a59[_0x216d('0x28')];this['dialAMDMaximumWordLength']=_0x585a59['dialAMDMaximumWordLength'];}module['exports']=Campaign;
\ No newline at end of file
index 2dee365..a183cd5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb8cb=['context','uniqueid','answered','answertime','endtime','abandoned','lastapplication','lastdata','duration','billableseconds','holdtime','type','tag','disposition','monitor','monitorFilename','queue','transfercalleridnum','transferconnectedlinenum','mohtime','exports','starttime','channel','destinationchannel','calleridnum','calleridname','connectedlinenum','connectedlinename'];(function(_0x4920e6,_0x18ee5c){var _0x600911=function(_0x2b7dd7){while(--_0x2b7dd7){_0x4920e6['push'](_0x4920e6['shift']());}};_0x600911(++_0x18ee5c);}(_0xb8cb,0xd9));var _0xbb8c=function(_0x489bde,_0x21475c){_0x489bde=_0x489bde-0x0;var _0xcdd4b1=_0xb8cb[_0x489bde];return _0xcdd4b1;};'use strict';function Channel(){this[_0xbb8c('0x0')]=null;this[_0xbb8c('0x1')]='';this[_0xbb8c('0x2')]='';this[_0xbb8c('0x3')]=0x0;this[_0xbb8c('0x4')]='';this[_0xbb8c('0x5')]=undefined;this[_0xbb8c('0x6')]=undefined;this['accountcode']=0x0;this[_0xbb8c('0x7')]='';this[_0xbb8c('0x8')]=0x0;this['linkedid']=0x0;this['exten']=0x0;this[_0xbb8c('0x9')]=![];this[_0xbb8c('0xa')]=null;this[_0xbb8c('0xb')]=null;this['unmanaged']=![];this[_0xbb8c('0xc')]=![];this[_0xbb8c('0xd')]='';this[_0xbb8c('0xe')]='';this[_0xbb8c('0xf')]=0x0;this[_0xbb8c('0x10')]=0x0;this[_0xbb8c('0x11')]=0x0;this[_0xbb8c('0x12')]=null;this[_0xbb8c('0x13')]=null;this[_0xbb8c('0x14')]=null;this[_0xbb8c('0x15')]=![];this[_0xbb8c('0x16')]=null;this[_0xbb8c('0x17')]=null;this['monitors']=[];this[_0xbb8c('0x18')]=undefined;this[_0xbb8c('0x19')]=undefined;this[_0xbb8c('0x1a')]=0x0;}module[_0xbb8c('0x1b')]=Channel;
\ No newline at end of file
+var _0x8c8b=['tag','disposition','monitor','monitorFilename','queue','monitors','transfercalleridnum','transferconnectedlinenum','mohtime','exports','starttime','calleridnum','calleridname','connectedlinenum','connectedlinename','uniqueid','linkedid','exten','answered','answertime','endtime','unmanaged','abandoned','lastapplication','lastdata','duration','holdtime','type'];(function(_0x412d2e,_0x5db21f){var _0x33321e=function(_0x85fd70){while(--_0x85fd70){_0x412d2e['push'](_0x412d2e['shift']());}};_0x33321e(++_0x5db21f);}(_0x8c8b,0x106));var _0xb8c8=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x8c8b[_0x321bb2];return _0x9c12ed;};'use strict';function Channel(){this[_0xb8c8('0x0')]=null;this['channel']='';this['destinationchannel']='';this[_0xb8c8('0x1')]=0x0;this[_0xb8c8('0x2')]='';this[_0xb8c8('0x3')]=undefined;this[_0xb8c8('0x4')]=undefined;this['accountcode']=0x0;this['context']='';this[_0xb8c8('0x5')]=0x0;this[_0xb8c8('0x6')]=0x0;this[_0xb8c8('0x7')]=0x0;this[_0xb8c8('0x8')]=![];this[_0xb8c8('0x9')]=null;this[_0xb8c8('0xa')]=null;this[_0xb8c8('0xb')]=![];this[_0xb8c8('0xc')]=![];this[_0xb8c8('0xd')]='';this[_0xb8c8('0xe')]='';this[_0xb8c8('0xf')]=0x0;this['billableseconds']=0x0;this[_0xb8c8('0x10')]=0x0;this[_0xb8c8('0x11')]=null;this[_0xb8c8('0x12')]=null;this[_0xb8c8('0x13')]=null;this[_0xb8c8('0x14')]=![];this[_0xb8c8('0x15')]=null;this[_0xb8c8('0x16')]=null;this[_0xb8c8('0x17')]=[];this[_0xb8c8('0x18')]=undefined;this[_0xb8c8('0x19')]=undefined;this[_0xb8c8('0x1a')]=0x0;}module[_0xb8c8('0x1b')]=Channel;
\ No newline at end of file
index df6b48e..e0bf5df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8509=['token','tokenSecret','type','serverUrl','Configurations','exports','name','username','remoteUri','authType','password','consumerKey'];(function(_0x1cb18a,_0x33167a){var _0x22442e=function(_0x46c611){while(--_0x46c611){_0x1cb18a['push'](_0x1cb18a['shift']());}};_0x22442e(++_0x33167a);}(_0x8509,0x7e));var _0x9850=function(_0xf0cf28,_0x1a5fe2){_0xf0cf28=_0xf0cf28-0x0;var _0x2d367d=_0x8509[_0xf0cf28];return _0x2d367d;};'use strict';function DeskAccount(_0x2c8b8a){this['id']=_0x2c8b8a['id']||0x0;this[_0x9850('0x0')]=_0x2c8b8a[_0x9850('0x0')]||'';this[_0x9850('0x1')]=_0x2c8b8a['username']||'';this['remoteUri']=_0x2c8b8a[_0x9850('0x2')]||'';this['authType']=_0x2c8b8a[_0x9850('0x3')]||'';this[_0x9850('0x4')]=_0x2c8b8a[_0x9850('0x4')]||'';this[_0x9850('0x5')]=_0x2c8b8a[_0x9850('0x5')]||'';this['consumerSecret']=_0x2c8b8a['consumerSecret']||'';this[_0x9850('0x6')]=_0x2c8b8a[_0x9850('0x6')]||'';this['tokenSecret']=_0x2c8b8a[_0x9850('0x7')]||'';this['type']=_0x2c8b8a[_0x9850('0x8')]||'';this[_0x9850('0x9')]=_0x2c8b8a[_0x9850('0x9')]||'';this[_0x9850('0xa')]=_0x2c8b8a[_0x9850('0xa')]||{};}module[_0x9850('0xb')]=DeskAccount;
\ No newline at end of file
+var _0xe909=['name','username','remoteUri','authType','password','consumerKey','consumerSecret','token','tokenSecret','type','serverUrl','Configurations','exports'];(function(_0x43ab39,_0x5b17a3){var _0x58f2fd=function(_0x4584a9){while(--_0x4584a9){_0x43ab39['push'](_0x43ab39['shift']());}};_0x58f2fd(++_0x5b17a3);}(_0xe909,0x193));var _0x9e90=function(_0x296da0,_0x4d4ea8){_0x296da0=_0x296da0-0x0;var _0x816ff3=_0xe909[_0x296da0];return _0x816ff3;};'use strict';function DeskAccount(_0x30b53d){this['id']=_0x30b53d['id']||0x0;this['name']=_0x30b53d[_0x9e90('0x0')]||'';this[_0x9e90('0x1')]=_0x30b53d[_0x9e90('0x1')]||'';this[_0x9e90('0x2')]=_0x30b53d[_0x9e90('0x2')]||'';this[_0x9e90('0x3')]=_0x30b53d[_0x9e90('0x3')]||'';this[_0x9e90('0x4')]=_0x30b53d[_0x9e90('0x4')]||'';this['consumerKey']=_0x30b53d[_0x9e90('0x5')]||'';this[_0x9e90('0x6')]=_0x30b53d[_0x9e90('0x6')]||'';this['token']=_0x30b53d[_0x9e90('0x7')]||'';this[_0x9e90('0x8')]=_0x30b53d[_0x9e90('0x8')]||'';this[_0x9e90('0x9')]=_0x30b53d[_0x9e90('0x9')]||'';this['serverUrl']=_0x30b53d[_0x9e90('0xa')]||'';this[_0x9e90('0xb')]=_0x30b53d['Configurations']||{};}module[_0x9e90('0xc')]=DeskAccount;
\ No newline at end of file
index e962190..b96921d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x567e=['clientSecret','serverUrl','Configurations','exports','name','username','password','remoteUri','tenantId','clientId'];(function(_0x529abc,_0x17b97e){var _0x453afa=function(_0x536263){while(--_0x536263){_0x529abc['push'](_0x529abc['shift']());}};_0x453afa(++_0x17b97e);}(_0x567e,0x1a8));var _0xe567=function(_0x4fd959,_0x4b9077){_0x4fd959=_0x4fd959-0x0;var _0x1a474d=_0x567e[_0x4fd959];return _0x1a474d;};'use strict';function Dynamics365Account(_0x5e071c){this['id']=_0x5e071c['id']||0x0;this['name']=_0x5e071c[_0xe567('0x0')]||'';this[_0xe567('0x1')]=_0x5e071c[_0xe567('0x1')]||'';this['password']=_0x5e071c[_0xe567('0x2')]||'';this[_0xe567('0x3')]=_0x5e071c['remoteUri']||'';this[_0xe567('0x4')]=_0x5e071c['tenantId']||'';this['clientId']=_0x5e071c[_0xe567('0x5')]||'';this[_0xe567('0x6')]=_0x5e071c[_0xe567('0x6')]||{};this[_0xe567('0x7')]=_0x5e071c[_0xe567('0x7')]||'';this[_0xe567('0x8')]=_0x5e071c['Configurations']||{};}module[_0xe567('0x9')]=Dynamics365Account;
\ No newline at end of file
+var _0xae85=['clientSecret','serverUrl','Configurations','name','username','password','remoteUri','tenantId','clientId'];(function(_0x20cae2,_0x378d30){var _0x32229b=function(_0x2eac7a){while(--_0x2eac7a){_0x20cae2['push'](_0x20cae2['shift']());}};_0x32229b(++_0x378d30);}(_0xae85,0x108));var _0x5ae8=function(_0x1b3698,_0x1d55a6){_0x1b3698=_0x1b3698-0x0;var _0x55c2ef=_0xae85[_0x1b3698];return _0x55c2ef;};'use strict';function Dynamics365Account(_0xb3c08b){this['id']=_0xb3c08b['id']||0x0;this['name']=_0xb3c08b[_0x5ae8('0x0')]||'';this[_0x5ae8('0x1')]=_0xb3c08b[_0x5ae8('0x1')]||'';this[_0x5ae8('0x2')]=_0xb3c08b[_0x5ae8('0x2')]||'';this[_0x5ae8('0x3')]=_0xb3c08b[_0x5ae8('0x3')]||'';this[_0x5ae8('0x4')]=_0xb3c08b[_0x5ae8('0x4')]||'';this['clientId']=_0xb3c08b[_0x5ae8('0x5')]||'';this[_0x5ae8('0x6')]=_0xb3c08b[_0x5ae8('0x6')]||{};this[_0x5ae8('0x7')]=_0xb3c08b[_0x5ae8('0x7')]||'';this[_0x5ae8('0x8')]=_0xb3c08b[_0x5ae8('0x8')]||{};}module['exports']=Dynamics365Account;
\ No newline at end of file
index 60dd074..073a69f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x55e0=['Trunk','ListId','key','exports','name','description','ecm','headerinfo','localstationid','minrate','maxrate','modem','v17,v27,v29','gateway','faxdetect','t38timeout','tech','SIP'];(function(_0x5317b5,_0x4dfd6e){var _0x3b7ce2=function(_0xc146d6){while(--_0xc146d6){_0x5317b5['push'](_0x5317b5['shift']());}};_0x3b7ce2(++_0x4dfd6e);}(_0x55e0,0xdc));var _0x055e=function(_0x5520c6,_0x24f3c7){_0x5520c6=_0x5520c6-0x0;var _0x196c04=_0x55e0[_0x5520c6];return _0x196c04;};'use strict';function FaxAccount(_0x2bfca0){this['id']=_0x2bfca0['id']||0x0;this[_0x055e('0x0')]=_0x2bfca0[_0x055e('0x0')]||'';this[_0x055e('0x1')]=_0x2bfca0['description'];this['ecm']=_0x2bfca0[_0x055e('0x2')];this[_0x055e('0x3')]=_0x2bfca0[_0x055e('0x3')];this[_0x055e('0x4')]=_0x2bfca0[_0x055e('0x4')];this[_0x055e('0x5')]=_0x2bfca0['minrate']||0x960;this['maxrate']=_0x2bfca0[_0x055e('0x6')]||0x3840;this['modem']=_0x2bfca0[_0x055e('0x7')]||_0x055e('0x8');this[_0x055e('0x9')]=_0x2bfca0[_0x055e('0x9')]||'no';this[_0x055e('0xa')]=_0x2bfca0['faxdetect']||'no';this[_0x055e('0xb')]=_0x2bfca0[_0x055e('0xb')]||0x1388;this[_0x055e('0xc')]=_0x2bfca0[_0x055e('0xc')]||_0x055e('0xd');this['Trunk']=_0x2bfca0['Trunk']?_0x2bfca0[_0x055e('0xe')]:undefined;this['ListId']=_0x2bfca0[_0x055e('0xf')];this[_0x055e('0x10')]=_0x2bfca0[_0x055e('0x10')];}module[_0x055e('0x11')]=FaxAccount;
\ No newline at end of file
+var _0xb58b=['modem','v17,v27,v29','gateway','faxdetect','t38timeout','tech','SIP','Trunk','ListId','key','exports','name','description','ecm','headerinfo','localstationid','minrate','maxrate'];(function(_0x462999,_0x24d200){var _0x4b1366=function(_0x1fa353){while(--_0x1fa353){_0x462999['push'](_0x462999['shift']());}};_0x4b1366(++_0x24d200);}(_0xb58b,0x1f1));var _0xbb58=function(_0xc297d0,_0x29f4b5){_0xc297d0=_0xc297d0-0x0;var _0x8cdedd=_0xb58b[_0xc297d0];return _0x8cdedd;};'use strict';function FaxAccount(_0x250573){this['id']=_0x250573['id']||0x0;this[_0xbb58('0x0')]=_0x250573[_0xbb58('0x0')]||'';this[_0xbb58('0x1')]=_0x250573['description'];this[_0xbb58('0x2')]=_0x250573[_0xbb58('0x2')];this['headerinfo']=_0x250573[_0xbb58('0x3')];this['localstationid']=_0x250573[_0xbb58('0x4')];this[_0xbb58('0x5')]=_0x250573[_0xbb58('0x5')]||0x960;this['maxrate']=_0x250573[_0xbb58('0x6')]||0x3840;this[_0xbb58('0x7')]=_0x250573[_0xbb58('0x7')]||_0xbb58('0x8');this[_0xbb58('0x9')]=_0x250573[_0xbb58('0x9')]||'no';this[_0xbb58('0xa')]=_0x250573[_0xbb58('0xa')]||'no';this[_0xbb58('0xb')]=_0x250573[_0xbb58('0xb')]||0x1388;this[_0xbb58('0xc')]=_0x250573['tech']||_0xbb58('0xd');this['Trunk']=_0x250573[_0xbb58('0xe')]?_0x250573[_0xbb58('0xe')]:undefined;this[_0xbb58('0xf')]=_0x250573[_0xbb58('0xf')];this['key']=_0x250573[_0xbb58('0x10')];}module[_0xbb58('0x11')]=FaxAccount;
\ No newline at end of file
index 9fc68c6..7606e79 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x59f7=['serverUrl','Configurations','exports','name','username','token','remoteUri'];(function(_0x4ceabd,_0x156c41){var _0x4ec96a=function(_0x3167a9){while(--_0x3167a9){_0x4ceabd['push'](_0x4ceabd['shift']());}};_0x4ec96a(++_0x156c41);}(_0x59f7,0x1bc));var _0x759f=function(_0x4b59bf,_0x574f97){_0x4b59bf=_0x4b59bf-0x0;var _0xc2f39a=_0x59f7[_0x4b59bf];return _0xc2f39a;};'use strict';function FreshdeskAccount(_0x3118e2){this['id']=_0x3118e2['id']||0x0;this['name']=_0x3118e2[_0x759f('0x0')]||'';this[_0x759f('0x1')]=_0x3118e2[_0x759f('0x1')]||'';this['apiKey']=_0x3118e2[_0x759f('0x2')]||'';this[_0x759f('0x3')]=_0x3118e2[_0x759f('0x3')]||'';this[_0x759f('0x4')]=_0x3118e2[_0x759f('0x4')]||'';this[_0x759f('0x5')]=_0x3118e2[_0x759f('0x5')]||{};}module[_0x759f('0x6')]=FreshdeskAccount;
\ No newline at end of file
+var _0x2bc0=['serverUrl','Configurations','exports','name','username','apiKey','token','remoteUri'];(function(_0x31b353,_0x15a167){var _0x5544c8=function(_0x36e6c6){while(--_0x36e6c6){_0x31b353['push'](_0x31b353['shift']());}};_0x5544c8(++_0x15a167);}(_0x2bc0,0x1a3));var _0x02bc=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x2bc0[_0xa464c9];return _0x3d73c4;};'use strict';function FreshdeskAccount(_0x374604){this['id']=_0x374604['id']||0x0;this[_0x02bc('0x0')]=_0x374604[_0x02bc('0x0')]||'';this[_0x02bc('0x1')]=_0x374604['username']||'';this[_0x02bc('0x2')]=_0x374604[_0x02bc('0x3')]||'';this[_0x02bc('0x4')]=_0x374604[_0x02bc('0x4')]||'';this[_0x02bc('0x5')]=_0x374604[_0x02bc('0x5')]||'';this[_0x02bc('0x6')]=_0x374604[_0x02bc('0x6')]||{};}module[_0x02bc('0x7')]=FreshdeskAccount;
\ No newline at end of file
index 2023506..77cddc5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5ebe=['connectedlinename','accountcode','context','exten','priority','assigned','lastAssignedTo','mohtime','variables','type','inbound','uniqueid','calleridnum','calleridname','queue','queuecallerjoinAt','queuecallerleaveAt','position','queuecallerabandon','queuecallerabandonAt','queuecallercomplete','queuecallercompleteAt','queuecallerexit','queuecallerexitAt','originalposition','channel','connectedlinenum'];(function(_0x4214dc,_0x21360a){var _0x43c0b1=function(_0x3a8184){while(--_0x3a8184){_0x4214dc['push'](_0x4214dc['shift']());}};_0x43c0b1(++_0x21360a);}(_0x5ebe,0xab));var _0xe5eb=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x5ebe[_0x321bb2];return _0x9c12ed;};'use strict';function QueueReport(){this[_0xe5eb('0x0')]=_0xe5eb('0x1');this[_0xe5eb('0x2')]='';this[_0xe5eb('0x3')]='';this[_0xe5eb('0x4')]='';this[_0xe5eb('0x5')]='';this[_0xe5eb('0x6')]=null;this[_0xe5eb('0x7')]=null;this[_0xe5eb('0x8')]=0x1;this['count']=0x1;this[_0xe5eb('0x9')]=![];this[_0xe5eb('0xa')]=null;this[_0xe5eb('0xb')]=![];this[_0xe5eb('0xc')]=null;this[_0xe5eb('0xd')]=![];this[_0xe5eb('0xe')]=null;this[_0xe5eb('0xf')]=0x1;this[_0xe5eb('0x10')]='';this[_0xe5eb('0x11')]='';this[_0xe5eb('0x12')]='';this[_0xe5eb('0x13')]='';this[_0xe5eb('0x14')]='';this[_0xe5eb('0x15')]='';this[_0xe5eb('0x16')]='';this['holdtime']=0x0;this[_0xe5eb('0x17')]=![];this[_0xe5eb('0x18')]='';this[_0xe5eb('0x19')]=0x0;this[_0xe5eb('0x1a')]={};}module['exports']=QueueReport;
\ No newline at end of file
+var _0xa109=['context','exten','priority','holdtime','assigned','mohtime','variables','exports','type','uniqueid','calleridnum','calleridname','queuecallerjoinAt','queuecallerleaveAt','position','count','queuecallerabandon','queuecallerabandonAt','queuecallercomplete','queuecallercompleteAt','queuecallerexit','queuecallerexitAt','channel','connectedlinenum','connectedlinename','accountcode'];(function(_0x385603,_0x1cf762){var _0x2e10ca=function(_0x1824c0){while(--_0x1824c0){_0x385603['push'](_0x385603['shift']());}};_0x2e10ca(++_0x1cf762);}(_0xa109,0xf2));var _0x9a10=function(_0x21a9d9,_0x4d5ac8){_0x21a9d9=_0x21a9d9-0x0;var _0x46adce=_0xa109[_0x21a9d9];return _0x46adce;};'use strict';function QueueReport(){this[_0x9a10('0x0')]='inbound';this[_0x9a10('0x1')]='';this[_0x9a10('0x2')]='';this[_0x9a10('0x3')]='';this['queue']='';this[_0x9a10('0x4')]=null;this[_0x9a10('0x5')]=null;this[_0x9a10('0x6')]=0x1;this[_0x9a10('0x7')]=0x1;this[_0x9a10('0x8')]=![];this[_0x9a10('0x9')]=null;this[_0x9a10('0xa')]=![];this[_0x9a10('0xb')]=null;this[_0x9a10('0xc')]=![];this[_0x9a10('0xd')]=null;this['originalposition']=0x1;this[_0x9a10('0xe')]='';this[_0x9a10('0xf')]='';this[_0x9a10('0x10')]='';this[_0x9a10('0x11')]='';this[_0x9a10('0x12')]='';this[_0x9a10('0x13')]='';this[_0x9a10('0x14')]='';this[_0x9a10('0x15')]=0x0;this[_0x9a10('0x16')]=![];this['lastAssignedTo']='';this[_0x9a10('0x17')]=0x0;this[_0x9a10('0x18')]={};}module[_0x9a10('0x19')]=QueueReport;
\ No newline at end of file
index 4658a79..21afc5f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd72b=['Configurations','exports','name','username','password','clientId','clientSecret','securityToken','type','serverUrl'];(function(_0x1cffb2,_0x184cba){var _0x219e12=function(_0x2f62a2){while(--_0x2f62a2){_0x1cffb2['push'](_0x1cffb2['shift']());}};_0x219e12(++_0x184cba);}(_0xd72b,0x160));var _0xbd72=function(_0x596715,_0x4289d1){_0x596715=_0x596715-0x0;var _0x404e94=_0xd72b[_0x596715];return _0x404e94;};'use strict';function SalesforceAccount(_0x3a04c9){this['id']=_0x3a04c9['id']||0x0;this[_0xbd72('0x0')]=_0x3a04c9[_0xbd72('0x0')]||'';this[_0xbd72('0x1')]=_0x3a04c9['username']||'';this['remoteUri']=_0x3a04c9['remoteUri']||'';this['password']=_0x3a04c9[_0xbd72('0x2')]||'';this[_0xbd72('0x3')]=_0x3a04c9[_0xbd72('0x3')]||'';this[_0xbd72('0x4')]=_0x3a04c9[_0xbd72('0x4')]||'';this[_0xbd72('0x5')]=_0x3a04c9[_0xbd72('0x5')]||'';this[_0xbd72('0x6')]=_0x3a04c9[_0xbd72('0x6')]||'integrationTab';this[_0xbd72('0x7')]=_0x3a04c9[_0xbd72('0x7')]||'';this[_0xbd72('0x8')]=_0x3a04c9[_0xbd72('0x8')]||{};}module[_0xbd72('0x9')]=SalesforceAccount;
\ No newline at end of file
+var _0x29fa=['username','remoteUri','password','clientId','clientSecret','securityToken','type','serverUrl','Configurations','name'];(function(_0x56559c,_0x2e3f74){var _0x3338cf=function(_0x169586){while(--_0x169586){_0x56559c['push'](_0x56559c['shift']());}};_0x3338cf(++_0x2e3f74);}(_0x29fa,0xd1));var _0xa29f=function(_0x5cc8b9,_0x20e3c3){_0x5cc8b9=_0x5cc8b9-0x0;var _0x58892e=_0x29fa[_0x5cc8b9];return _0x58892e;};'use strict';function SalesforceAccount(_0x4faee6){this['id']=_0x4faee6['id']||0x0;this[_0xa29f('0x0')]=_0x4faee6['name']||'';this[_0xa29f('0x1')]=_0x4faee6[_0xa29f('0x1')]||'';this['remoteUri']=_0x4faee6[_0xa29f('0x2')]||'';this[_0xa29f('0x3')]=_0x4faee6[_0xa29f('0x3')]||'';this['clientId']=_0x4faee6[_0xa29f('0x4')]||'';this[_0xa29f('0x5')]=_0x4faee6['clientSecret']||'';this[_0xa29f('0x6')]=_0x4faee6[_0xa29f('0x6')]||'';this[_0xa29f('0x7')]=_0x4faee6[_0xa29f('0x7')]||'integrationTab';this['serverUrl']=_0x4faee6[_0xa29f('0x8')]||'';this[_0xa29f('0x9')]=_0x4faee6[_0xa29f('0x9')]||{};}module['exports']=SalesforceAccount;
\ No newline at end of file
index c2659ea..c4c9c23 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5050=['remoteUri','serverUrl','Configurations','exports','name','username','password'];(function(_0x5d324e,_0x3c2db4){var _0x5e350a=function(_0xac1bb2){while(--_0xac1bb2){_0x5d324e['push'](_0x5d324e['shift']());}};_0x5e350a(++_0x3c2db4);}(_0x5050,0x1d9));var _0x0505=function(_0x235ce8,_0x2da4d6){_0x235ce8=_0x235ce8-0x0;var _0x5db5b7=_0x5050[_0x235ce8];return _0x5db5b7;};'use strict';function ServicenowAccount(_0x32d8ed){this['id']=_0x32d8ed['id']||0x0;this[_0x0505('0x0')]=_0x32d8ed[_0x0505('0x0')]||'';this[_0x0505('0x1')]=_0x32d8ed[_0x0505('0x1')]||'';this[_0x0505('0x2')]=_0x32d8ed[_0x0505('0x2')]||'';this[_0x0505('0x3')]=_0x32d8ed[_0x0505('0x3')]||'';this[_0x0505('0x4')]=_0x32d8ed[_0x0505('0x4')]||'';this[_0x0505('0x5')]=_0x32d8ed['Configurations']||{};}module[_0x0505('0x6')]=ServicenowAccount;
\ No newline at end of file
+var _0x779e=['username','password','serverUrl','Configurations','exports','name'];(function(_0x2b39b8,_0x4b5b80){var _0x129577=function(_0x1c00db){while(--_0x1c00db){_0x2b39b8['push'](_0x2b39b8['shift']());}};_0x129577(++_0x4b5b80);}(_0x779e,0x137));var _0xe779=function(_0xf5fbb7,_0xdb7f69){_0xf5fbb7=_0xf5fbb7-0x0;var _0x330d55=_0x779e[_0xf5fbb7];return _0x330d55;};'use strict';function ServicenowAccount(_0x5c25fc){this['id']=_0x5c25fc['id']||0x0;this[_0xe779('0x0')]=_0x5c25fc[_0xe779('0x0')]||'';this['username']=_0x5c25fc[_0xe779('0x1')]||'';this[_0xe779('0x2')]=_0x5c25fc['password']||'';this['remoteUri']=_0x5c25fc['remoteUri']||'';this[_0xe779('0x3')]=_0x5c25fc[_0xe779('0x3')]||'';this[_0xe779('0x4')]=_0x5c25fc[_0xe779('0x4')]||{};}module[_0xe779('0x5')]=ServicenowAccount;
\ No newline at end of file
index cab4d83..681a6ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4135=['password','remoteUri','serverUrl','Configurations','name','username'];(function(_0x4eb9b7,_0x2b6622){var _0x3d8db5=function(_0x509063){while(--_0x509063){_0x4eb9b7['push'](_0x4eb9b7['shift']());}};_0x3d8db5(++_0x2b6622);}(_0x4135,0x11e));var _0x5413=function(_0x4db0f3,_0x5e364e){_0x4db0f3=_0x4db0f3-0x0;var _0x4ec913=_0x4135[_0x4db0f3];return _0x4ec913;};'use strict';function SugarcrmAccount(_0x580c58){this['id']=_0x580c58['id']||0x0;this[_0x5413('0x0')]=_0x580c58[_0x5413('0x0')]||'';this[_0x5413('0x1')]=_0x580c58[_0x5413('0x1')]||'';this[_0x5413('0x2')]=_0x580c58[_0x5413('0x2')]||'';this[_0x5413('0x3')]=_0x580c58[_0x5413('0x3')]||'';this[_0x5413('0x4')]=_0x580c58[_0x5413('0x4')]||'';this[_0x5413('0x5')]=_0x580c58[_0x5413('0x5')]||{};}module['exports']=SugarcrmAccount;
\ No newline at end of file
+var _0x2546=['password','serverUrl','Configurations','exports','name'];(function(_0x3ce3c,_0x319337){var _0x55a2c9=function(_0x1568d0){while(--_0x1568d0){_0x3ce3c['push'](_0x3ce3c['shift']());}};_0x55a2c9(++_0x319337);}(_0x2546,0x11c));var _0x6254=function(_0x59a167,_0x11d66b){_0x59a167=_0x59a167-0x0;var _0x34dce1=_0x2546[_0x59a167];return _0x34dce1;};'use strict';function SugarcrmAccount(_0x13efd7){this['id']=_0x13efd7['id']||0x0;this[_0x6254('0x0')]=_0x13efd7['name']||'';this['username']=_0x13efd7['username']||'';this[_0x6254('0x1')]=_0x13efd7[_0x6254('0x1')]||'';this['remoteUri']=_0x13efd7['remoteUri']||'';this[_0x6254('0x2')]=_0x13efd7[_0x6254('0x2')]||'';this['Configurations']=_0x13efd7[_0x6254('0x3')]||{};}module[_0x6254('0x4')]=SugarcrmAccount;
\ No newline at end of file
index b0b3034..c89a712 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xef90=['name','accountcode','state','unknown','stateTime','status','address','exports'];(function(_0x353fd0,_0x3528f4){var _0x480fc4=function(_0x27e337){while(--_0x27e337){_0x353fd0['push'](_0x353fd0['shift']());}};_0x480fc4(++_0x3528f4);}(_0xef90,0x180));var _0x0ef9=function(_0x5350e9,_0x3f05fc){_0x5350e9=_0x5350e9-0x0;var _0xe94648=_0xef90[_0x5350e9];return _0xe94648;};'use strict';function Telephone(_0x476684){this['id']=_0x476684['id']||0x0;this['name']=_0x476684[_0x0ef9('0x0')]||'';this[_0x0ef9('0x1')]=_0x476684[_0x0ef9('0x1')]||'';this[_0x0ef9('0x2')]=_0x0ef9('0x3');this[_0x0ef9('0x4')]=0x0;this[_0x0ef9('0x5')]='unknown';this[_0x0ef9('0x6')]='';}module[_0x0ef9('0x7')]=Telephone;
\ No newline at end of file
+var _0x60b7=['state','unknown','stateTime','status','address','name','accountcode'];(function(_0x4f5607,_0x5a51e4){var _0x5a7446=function(_0x487274){while(--_0x487274){_0x4f5607['push'](_0x4f5607['shift']());}};_0x5a7446(++_0x5a51e4);}(_0x60b7,0x1c5));var _0x760b=function(_0x292f93,_0x2c6e8e){_0x292f93=_0x292f93-0x0;var _0x5a94b1=_0x60b7[_0x292f93];return _0x5a94b1;};'use strict';function Telephone(_0x528bcb){this['id']=_0x528bcb['id']||0x0;this[_0x760b('0x0')]=_0x528bcb[_0x760b('0x0')]||'';this['accountcode']=_0x528bcb[_0x760b('0x1')]||'';this[_0x760b('0x2')]=_0x760b('0x3');this[_0x760b('0x4')]=0x0;this[_0x760b('0x5')]=_0x760b('0x3');this[_0x760b('0x6')]='';}module['exports']=Telephone;
\ No newline at end of file
index 0c27eaf..e9bc1da 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1cc7=['name'];(function(_0x403c20,_0x4a7b99){var _0x2b271a=function(_0x106ecb){while(--_0x106ecb){_0x403c20['push'](_0x403c20['shift']());}};_0x2b271a(++_0x4a7b99);}(_0x1cc7,0x15a));var _0x71cc=function(_0x40ba40,_0x520947){_0x40ba40=_0x40ba40-0x0;var _0x1c4000=_0x1cc7[_0x40ba40];return _0x1c4000;};'use strict';function template(_0x2bdc35){this['id']=_0x2bdc35['id']||0x0;this[_0x71cc('0x0')]=_0x2bdc35[_0x71cc('0x0')]||'';this['html']=_0x2bdc35['html']||'';}module['exports']=template;
\ No newline at end of file
+var _0x0ba7=['html','exports','name'];(function(_0x5dc10a,_0x66cdd7){var _0x1fafc9=function(_0x240834){while(--_0x240834){_0x5dc10a['push'](_0x5dc10a['shift']());}};_0x1fafc9(++_0x66cdd7);}(_0x0ba7,0x16d));var _0x70ba=function(_0x24393f,_0xdbb6d7){_0x24393f=_0x24393f-0x0;var _0xbe3730=_0x0ba7[_0x24393f];return _0xbe3730;};'use strict';function template(_0x4e5145){this['id']=_0x4e5145['id']||0x0;this['name']=_0x4e5145[_0x70ba('0x0')]||'';this[_0x70ba('0x1')]=_0x4e5145[_0x70ba('0x1')]||'';}module[_0x70ba('0x2')]=template;
\ No newline at end of file
index ccca522..20349a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x067b=['name','channel','voice','status','AllConditions','Actions'];(function(_0x3e551c,_0x72c83){var _0x1f4d50=function(_0x30c362){while(--_0x30c362){_0x3e551c['push'](_0x3e551c['shift']());}};_0x1f4d50(++_0x72c83);}(_0x067b,0x17a));var _0xb067=function(_0x16edf5,_0x6efd01){_0x16edf5=_0x16edf5-0x0;var _0x42b3ea=_0x067b[_0x16edf5];return _0x42b3ea;};'use strict';function Trigger(_0x364e71){this['id']=_0x364e71['id']||0x0;this['name']=_0x364e71[_0xb067('0x0')]||'';this[_0xb067('0x1')]=_0x364e71[_0xb067('0x1')]||_0xb067('0x2');this['status']=_0x364e71[_0xb067('0x3')]||![];this[_0xb067('0x4')]=_0x364e71[_0xb067('0x4')]||[];this['AnyConditions']=_0x364e71['AnyConditions']||[];this[_0xb067('0x5')]=_0x364e71['Actions']||[];}module['exports']=Trigger;
\ No newline at end of file
+var _0x8611=['name','channel','voice','status','AllConditions','AnyConditions','Actions','exports'];(function(_0x467488,_0x38c7ae){var _0x56107f=function(_0x4992b3){while(--_0x4992b3){_0x467488['push'](_0x467488['shift']());}};_0x56107f(++_0x38c7ae);}(_0x8611,0xd8));var _0x1861=function(_0x229c8c,_0x2764c7){_0x229c8c=_0x229c8c-0x0;var _0x5e591f=_0x8611[_0x229c8c];return _0x5e591f;};'use strict';function Trigger(_0x4e74f0){this['id']=_0x4e74f0['id']||0x0;this[_0x1861('0x0')]=_0x4e74f0[_0x1861('0x0')]||'';this[_0x1861('0x1')]=_0x4e74f0[_0x1861('0x1')]||_0x1861('0x2');this[_0x1861('0x3')]=_0x4e74f0[_0x1861('0x3')]||![];this[_0x1861('0x4')]=_0x4e74f0['AllConditions']||[];this[_0x1861('0x5')]=_0x4e74f0[_0x1861('0x5')]||[];this[_0x1861('0x6')]=_0x4e74f0['Actions']||[];}module[_0x1861('0x7')]=Trigger;
\ No newline at end of file
index 69fea73..1d0675f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6a1=['status','registry','indexOf','host','port','domain','domainport','refresh','registrationtime','address','active','name','state','unknown','stateTime'];(function(_0x342566,_0x219fd2){var _0x7fceac=function(_0x36eb58){while(--_0x36eb58){_0x342566['push'](_0x342566['shift']());}};_0x7fceac(++_0x219fd2);}(_0xa6a1,0x1db));var _0x1a6a=function(_0x7ed4e1,_0x2a3a19){_0x7ed4e1=_0x7ed4e1-0x0;var _0x24189b=_0xa6a1[_0x7ed4e1];return _0x24189b;};'use strict';function Trunk(_0x1707e5){this['id']=_0x1707e5['id']||0x0;this[_0x1a6a('0x0')]=_0x1707e5[_0x1a6a('0x0')]||![];this[_0x1a6a('0x1')]=_0x1707e5[_0x1a6a('0x1')]||'';this[_0x1a6a('0x2')]=_0x1a6a('0x3');this[_0x1a6a('0x4')]=0x0;this[_0x1a6a('0x5')]='unknown';this[_0x1a6a('0x6')]=_0x1707e5[_0x1a6a('0x6')]&&_0x1707e5[_0x1a6a('0x6')][_0x1a6a('0x7')](':')?_0x1707e5[_0x1a6a('0x6')]['split'](':')[0x0]:'';this[_0x1a6a('0x8')]='';this[_0x1a6a('0x9')]='';this[_0x1a6a('0xa')]='';this[_0x1a6a('0xb')]='';this[_0x1a6a('0xc')]='';this['stateRegistry']=_0x1a6a('0x3');this[_0x1a6a('0xd')]='';this[_0x1a6a('0xe')]='';}module['exports']=Trunk;
\ No newline at end of file
+var _0xab99=['registry','indexOf','split','port','domain','stateRegistry','registrationtime','address','active','name','state','unknown','stateTime','status'];(function(_0x491cbe,_0x45c8ba){var _0x59449d=function(_0x21b463){while(--_0x21b463){_0x491cbe['push'](_0x491cbe['shift']());}};_0x59449d(++_0x45c8ba);}(_0xab99,0x1ac));var _0x9ab9=function(_0x44d404,_0x5fb7c0){_0x44d404=_0x44d404-0x0;var _0x44ee36=_0xab99[_0x44d404];return _0x44ee36;};'use strict';function Trunk(_0x52129c){this['id']=_0x52129c['id']||0x0;this[_0x9ab9('0x0')]=_0x52129c['active']||![];this['name']=_0x52129c[_0x9ab9('0x1')]||'';this[_0x9ab9('0x2')]=_0x9ab9('0x3');this[_0x9ab9('0x4')]=0x0;this[_0x9ab9('0x5')]='unknown';this[_0x9ab9('0x6')]=_0x52129c['registry']&&_0x52129c['registry'][_0x9ab9('0x7')](':')?_0x52129c[_0x9ab9('0x6')][_0x9ab9('0x8')](':')[0x0]:'';this['host']='';this[_0x9ab9('0x9')]='';this[_0x9ab9('0xa')]='';this['domainport']='';this['refresh']='';this[_0x9ab9('0xb')]=_0x9ab9('0x3');this[_0x9ab9('0xc')]='';this[_0x9ab9('0xd')]='';}module['exports']=Trunk;
\ No newline at end of file
index 38cc2ee..3b16857 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfed2=['mandatoryDisposition','exports','exten','recordingFormat','none'];(function(_0x2a0f6b,_0x597f40){var _0x76c6e2=function(_0x3f0130){while(--_0x3f0130){_0x2a0f6b['push'](_0x2a0f6b['shift']());}};_0x76c6e2(++_0x597f40);}(_0xfed2,0x1ec));var _0x2fed=function(_0x4ec58b,_0x7ef29d){_0x4ec58b=_0x4ec58b-0x0;var _0x5cde86=_0xfed2[_0x4ec58b];return _0x5cde86;};'use strict';function voiceExtension(_0x33b280){this['id']=_0x33b280['id']||0x0;this[_0x2fed('0x0')]=_0x33b280[_0x2fed('0x0')]||'';this[_0x2fed('0x1')]=_0x33b280[_0x2fed('0x1')]||_0x2fed('0x2');this['mandatoryDisposition']=_0x33b280[_0x2fed('0x3')]||![];}module[_0x2fed('0x4')]=voiceExtension;
\ No newline at end of file
+var _0xcfbe=['recordingFormat','none','mandatoryDisposition','exports','exten'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0xcfbe,0x1f3));var _0xecfb=function(_0x37034e,_0x30b96a){_0x37034e=_0x37034e-0x0;var _0x32a5ed=_0xcfbe[_0x37034e];return _0x32a5ed;};'use strict';function voiceExtension(_0x22afad){this['id']=_0x22afad['id']||0x0;this[_0xecfb('0x0')]=_0x22afad[_0xecfb('0x0')]||'';this[_0xecfb('0x1')]=_0x22afad[_0xecfb('0x1')]||_0xecfb('0x2');this[_0xecfb('0x3')]=_0x22afad[_0xecfb('0x3')]||![];}module[_0xecfb('0x4')]=voiceExtension;
\ No newline at end of file
index 0843154..f33c99a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe289=['sumHoldTime','unmanaged','abandoned','available','acw','acwTimeout','autopause','sendMessageOneNotActive','message','dialTimezone','dialGlobalInterval','dialActive','dialMethod','progressive','dialLimitChannel','dialLimitQueue','dialPowerLevel','dialPredictiveOptimization','dropRate','dialPredictiveOptimizationPercentage','dialOriginateCallerIdName','dialOriginateCallerIdNumber','anonymous','dialOriginateTimeout','dialQueueOptions','tTxX','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','Trunk','TrunkBackup','dialPrefix','Interval','DESC','dialRandomLastDigitCallerIdNumber','dialCutDigit','strategy','queueStatusComplete','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','outboundRejectCallsDay','pTalking','timeout','outboundAnswerCallsDay','outboundAnswerAgiCallsDay','outboundCongestionCallsDay','outboundUnknownCallsDay','outboundBlacklistCallsDay','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundDropCallsDayACS','outboundReCallsDay','startProgressive','startPredictive','handlePredictive','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsTimeout','predictiveIntervalPauses','dialPredictiveIntervalMaxThreshold','predictiveIntervalMinThreshold','predictiveIntervalErlangCalls','predictiveIntervalHitRate','erlangCalls','erlangCallToSecond','erlangBusyFactor','dialRecallMeTimeout','dialRecallInQueue','dialQueueProject2','dialAgiAfterHangupClient','dialAgiAfterHangupAgent','mandatoryDisposition','mandatoryDispositionPause','exports','unknown','not_inuse','inuse','invalid','unavailable','ringing','onhold','wav','wav49','gsm','rrmemory','roundrobin','name','monitor_format','type','inbound','talking','total','answered','sumDuration'];(function(_0x46a8a3,_0x51560d){var _0x51e722=function(_0x513f27){while(--_0x513f27){_0x46a8a3['push'](_0x46a8a3['shift']());}};_0x51e722(++_0x51560d);}(_0xe289,0xc2));var _0x9e28=function(_0x332597,_0x33648e){_0x332597=_0x332597-0x0;var _0x70870e=_0xe289[_0x332597];return _0x70870e;};'use strict';var statusDesc=[_0x9e28('0x0'),_0x9e28('0x1'),_0x9e28('0x2'),'busy',_0x9e28('0x3'),_0x9e28('0x4'),_0x9e28('0x5'),'ringinuse',_0x9e28('0x6')];var monitorFormat={'wav':_0x9e28('0x7'),'wav49':_0x9e28('0x8'),'gsm':_0x9e28('0x9')};var strategy={'rrmemory':_0x9e28('0xa'),'roundrobin':_0x9e28('0xb')};function VoiceQueue(_0x229f45){this['id']=_0x229f45['id']||0x0;this[_0x9e28('0xc')]=_0x229f45[_0x9e28('0xc')]||'';this[_0x9e28('0xd')]=_0x229f45['monitor_format']||'';this[_0x9e28('0xe')]=_0x229f45[_0x9e28('0xe')]||_0x9e28('0xf');this['waiting']=0x0;this[_0x9e28('0x10')]=0x0;this[_0x9e28('0x11')]=0x0;this[_0x9e28('0x12')]=0x0;this[_0x9e28('0x13')]=0x0;this[_0x9e28('0x14')]=0x0;this['sumBillable']=0x0;this[_0x9e28('0x15')]=0x0;this[_0x9e28('0x16')]=0x0;this['loggedIn']=0x0;this[_0x9e28('0x17')]=0x0;this[_0x9e28('0x18')]=_0x229f45[_0x9e28('0x18')]||![];this[_0x9e28('0x19')]=_0x229f45['acwTimeout']||0xa;this[_0x9e28('0x1a')]=_0x229f45[_0x9e28('0x1a')]||'no';this[_0x9e28('0x1b')]=!![];this[_0x9e28('0x1c')]='';this['originated']=0x0;this['temp']=0x0;this[_0x9e28('0x1d')]=_0x229f45[_0x9e28('0x1d')]||null;this[_0x9e28('0x1e')]=_0x229f45[_0x9e28('0x1e')]?_0x229f45[_0x9e28('0x1e')]:null;this['dialActive']=_0x229f45[_0x9e28('0x1f')];this[_0x9e28('0x20')]=_0x229f45[_0x9e28('0x20')]||_0x9e28('0x21');this['dialLimitChannel']=_0x229f45[_0x9e28('0x22')]||0x0;this[_0x9e28('0x23')]=_0x229f45[_0x9e28('0x23')]||0x0;this['dialPowerLevel']=_0x229f45[_0x9e28('0x24')]||0x1;this[_0x9e28('0x25')]=_0x229f45['dialPredictiveOptimization']||_0x9e28('0x26');this['dialPredictiveOptimizationPercentage']=_0x229f45[_0x9e28('0x27')]||0.03;this['dialPredictiveInterval']=_0x229f45['dialPredictiveInterval']||0x258;this[_0x9e28('0x28')]=_0x229f45[_0x9e28('0x28')]||'anonymous';this[_0x9e28('0x29')]=_0x229f45[_0x9e28('0x29')]||_0x9e28('0x2a');this[_0x9e28('0x2b')]=_0x229f45[_0x9e28('0x2b')]||0x1e;this[_0x9e28('0x2c')]=_0x229f45['dialQueueOptions']||_0x9e28('0x2d');this[_0x9e28('0x2e')]=_0x229f45[_0x9e28('0x2e')]||0x3;this[_0x9e28('0x2f')]=_0x229f45['dialQueueProject']||undefined;this[_0x9e28('0x30')]=_0x229f45[_0x9e28('0x30')]||0x3;this['dialCongestionRetryFrequency']=_0x229f45[_0x9e28('0x31')]||0x96;this[_0x9e28('0x32')]=_0x229f45['dialBusyMaxRetry']||0x3;this[_0x9e28('0x33')]=_0x229f45['dialBusyRetryFrequency']||0x96;this[_0x9e28('0x34')]=_0x229f45[_0x9e28('0x34')]||0x3;this['dialNoAnswerRetryFrequency']=_0x229f45[_0x9e28('0x35')]||0x96;this[_0x9e28('0x36')]=_0x229f45[_0x9e28('0x36')]||0x4;this[_0x9e28('0x37')]=_0x229f45[_0x9e28('0x37')]?_0x229f45['Trunk']:undefined;this[_0x9e28('0x38')]=_0x229f45[_0x9e28('0x38')]?_0x229f45[_0x9e28('0x38')]:undefined;this[_0x9e28('0x39')]=_0x229f45['dialPrefix']||undefined;this[_0x9e28('0x3a')]=_0x229f45[_0x9e28('0x3a')]?_0x229f45['Interval']:undefined;this['dialOrderByScheduledAt']=_0x229f45['dialOrderByScheduledAt']||_0x9e28('0x3b');this[_0x9e28('0x3c')]=_0x229f45[_0x9e28('0x3c')]||undefined;this[_0x9e28('0x3d')]=_0x229f45[_0x9e28('0x3d')]||undefined;this[_0x9e28('0x3e')]=strategy[_0x229f45[_0x9e28('0x3e')]]||_0x9e28('0xa');this[_0x9e28('0x3f')]=!![];this[_0x9e28('0x40')]=_0x229f45[_0x9e28('0x40')]||![];this[_0x9e28('0x41')]=_0x229f45[_0x9e28('0x41')];this['dialAMDGreeting']=_0x229f45[_0x9e28('0x42')];this[_0x9e28('0x43')]=_0x229f45[_0x9e28('0x43')];this[_0x9e28('0x44')]=_0x229f45[_0x9e28('0x44')];this[_0x9e28('0x45')]=_0x229f45['dialAMDMinWordLength'];this['dialAMDBetweenWordsSilence']=_0x229f45[_0x9e28('0x46')];this[_0x9e28('0x47')]=_0x229f45[_0x9e28('0x47')];this[_0x9e28('0x48')]=_0x229f45[_0x9e28('0x48')];this[_0x9e28('0x49')]=_0x229f45[_0x9e28('0x49')];this[_0x9e28('0x4a')]=0x0;this[_0x9e28('0x4b')]=0x0;this[_0x9e28('0x4c')]=_0x229f45[_0x9e28('0x4c')];this[_0x9e28('0x4d')]=0x0;this[_0x9e28('0x4e')]=0x0;this['outboundNoAnswerCallsDay']=0x0;this['outboundBusyCallsDay']=0x0;this[_0x9e28('0x4f')]=0x0;this['outboundNoSuchCallsDay']=0x0;this[_0x9e28('0x50')]=0x0;this[_0x9e28('0x51')]=0x0;this['outboundOriginateFailureCallsDay']=0x0;this[_0x9e28('0x52')]=0x0;this[_0x9e28('0x53')]=0x0;this[_0x9e28('0x54')]=0x0;this[_0x9e28('0x55')]=0x0;this[_0x9e28('0x56')]=undefined;this[_0x9e28('0x57')]=undefined;this[_0x9e28('0x58')]=undefined;this['predictiveIntervalMultiplicativeFactor']=1.05;this['predictiveIntervalTotalCalls']=0x0;this[_0x9e28('0x59')]=0x0;this['predictiveIntervalDroppedCallsCallersExit']=0x0;this[_0x9e28('0x5a')]=0x0;this['predictiveIntervalAvgHoldtime']=0x0;this['predictiveIntervalAvgTalktime']=0x0;this[_0x9e28('0x5b')]=0x0;this['predictiveIntervalAvailable']=0x0;this['predictiveIntervalMaxThreshold']=_0x229f45[_0x9e28('0x5c')]||0x14;this[_0x9e28('0x5d')]=_0x229f45[_0x9e28('0x5c')]||0xa;this[_0x9e28('0x5e')]=0x0;this['predictiveIntervalErlangCallsDroppedCalls']=0x0;this[_0x9e28('0x5f')]=0x1;this[_0x9e28('0x60')]=0x0;this[_0x9e28('0x61')]=0x0;this['erlangAbandonmentRate']=0x0;this[_0x9e28('0x62')]=0x0;this[_0x9e28('0x63')]=_0x229f45[_0x9e28('0x63')]||0x1e;this[_0x9e28('0x64')]=_0x229f45[_0x9e28('0x64')]||![];this[_0x9e28('0x65')]=_0x229f45[_0x9e28('0x65')]||undefined;this[_0x9e28('0x66')]=_0x229f45[_0x9e28('0x66')]||![];this[_0x9e28('0x67')]=_0x229f45[_0x9e28('0x67')]||![];this[_0x9e28('0xd')]=monitorFormat[_0x229f45[_0x9e28('0xd')]]?monitorFormat[_0x229f45['monitor_format']]:undefined;this[_0x9e28('0x68')]=_0x229f45[_0x9e28('0x68')]||![];this['mandatoryDispositionPause']=_0x229f45[_0x9e28('0x69')]?_0x229f45[_0x9e28('0x69')]:undefined;}module[_0x9e28('0x6a')]=VoiceQueue;
\ No newline at end of file
+var _0x3165=['startPredictive','handlePredictive','predictiveIntervalTotalCalls','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalAvgTalktime','predictiveIntervalPauses','predictiveIntervalAvailable','dialPredictiveIntervalMaxThreshold','predictiveIntervalMinThreshold','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','erlangCalls','erlangCallToSecond','erlangBusyFactor','dialRecallMeTimeout','dialRecallInQueue','dialQueueProject2','dialAgiAfterHangupClient','dialAgiAfterHangupAgent','mandatoryDisposition','mandatoryDispositionPause','exports','unknown','busy','invalid','unavailable','ringing','ringinuse','onhold','wav','gsm','rrmemory','roundrobin','name','monitor_format','type','waiting','talking','total','answered','sumDuration','sumHoldTime','unmanaged','loggedIn','available','acw','acwTimeout','autopause','sendMessageOneNotActive','message','temp','dialTimezone','dialGlobalInterval','dialActive','progressive','dialLimitChannel','dialPowerLevel','dialPredictiveOptimization','dropRate','dialPredictiveOptimizationPercentage','dialPredictiveInterval','dialOriginateCallerIdName','anonymous','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueOptions','tTxX','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','pTalking','timeout','outboundAnswerCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundBlacklistCallsDay','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundReCallsDay','startProgressive'];(function(_0x16d86c,_0x39d250){var _0x537b6c=function(_0x4a4b40){while(--_0x4a4b40){_0x16d86c['push'](_0x16d86c['shift']());}};_0x537b6c(++_0x39d250);}(_0x3165,0x151));var _0x5316=function(_0x36f98c,_0x42a3b5){_0x36f98c=_0x36f98c-0x0;var _0x44140e=_0x3165[_0x36f98c];return _0x44140e;};'use strict';var statusDesc=[_0x5316('0x0'),'not_inuse','inuse',_0x5316('0x1'),_0x5316('0x2'),_0x5316('0x3'),_0x5316('0x4'),_0x5316('0x5'),_0x5316('0x6')];var monitorFormat={'wav':_0x5316('0x7'),'wav49':'wav49','gsm':_0x5316('0x8')};var strategy={'rrmemory':_0x5316('0x9'),'roundrobin':_0x5316('0xa')};function VoiceQueue(_0x1db336){this['id']=_0x1db336['id']||0x0;this[_0x5316('0xb')]=_0x1db336[_0x5316('0xb')]||'';this[_0x5316('0xc')]=_0x1db336[_0x5316('0xc')]||'';this[_0x5316('0xd')]=_0x1db336[_0x5316('0xd')]||'inbound';this[_0x5316('0xe')]=0x0;this[_0x5316('0xf')]=0x0;this[_0x5316('0x10')]=0x0;this[_0x5316('0x11')]=0x0;this[_0x5316('0x12')]=0x0;this[_0x5316('0x13')]=0x0;this['sumBillable']=0x0;this[_0x5316('0x14')]=0x0;this['abandoned']=0x0;this[_0x5316('0x15')]=0x0;this[_0x5316('0x16')]=0x0;this['acw']=_0x1db336[_0x5316('0x17')]||![];this[_0x5316('0x18')]=_0x1db336[_0x5316('0x18')]||0xa;this[_0x5316('0x19')]=_0x1db336[_0x5316('0x19')]||'no';this[_0x5316('0x1a')]=!![];this[_0x5316('0x1b')]='';this['originated']=0x0;this[_0x5316('0x1c')]=0x0;this[_0x5316('0x1d')]=_0x1db336['dialTimezone']||null;this['dialGlobalInterval']=_0x1db336[_0x5316('0x1e')]?_0x1db336[_0x5316('0x1e')]:null;this[_0x5316('0x1f')]=_0x1db336[_0x5316('0x1f')];this['dialMethod']=_0x1db336['dialMethod']||_0x5316('0x20');this[_0x5316('0x21')]=_0x1db336[_0x5316('0x21')]||0x0;this['dialLimitQueue']=_0x1db336['dialLimitQueue']||0x0;this[_0x5316('0x22')]=_0x1db336[_0x5316('0x22')]||0x1;this[_0x5316('0x23')]=_0x1db336[_0x5316('0x23')]||_0x5316('0x24');this[_0x5316('0x25')]=_0x1db336[_0x5316('0x25')]||0.03;this[_0x5316('0x26')]=_0x1db336['dialPredictiveInterval']||0x258;this[_0x5316('0x27')]=_0x1db336[_0x5316('0x27')]||_0x5316('0x28');this[_0x5316('0x29')]=_0x1db336[_0x5316('0x29')]||_0x5316('0x28');this[_0x5316('0x2a')]=_0x1db336[_0x5316('0x2a')]||0x1e;this[_0x5316('0x2b')]=_0x1db336[_0x5316('0x2b')]||_0x5316('0x2c');this['dialQueueTimeout']=_0x1db336['dialQueueTimeout']||0x3;this[_0x5316('0x2d')]=_0x1db336['dialQueueProject']||undefined;this[_0x5316('0x2e')]=_0x1db336[_0x5316('0x2e')]||0x3;this[_0x5316('0x2f')]=_0x1db336[_0x5316('0x2f')]||0x96;this[_0x5316('0x30')]=_0x1db336['dialBusyMaxRetry']||0x3;this['dialBusyRetryFrequency']=_0x1db336[_0x5316('0x31')]||0x96;this['dialNoAnswerMaxRetry']=_0x1db336[_0x5316('0x32')]||0x3;this['dialNoAnswerRetryFrequency']=_0x1db336[_0x5316('0x33')]||0x96;this['dialGlobalMaxRetry']=_0x1db336[_0x5316('0x34')]||0x4;this[_0x5316('0x35')]=_0x1db336['Trunk']?_0x1db336['Trunk']:undefined;this[_0x5316('0x36')]=_0x1db336[_0x5316('0x36')]?_0x1db336[_0x5316('0x36')]:undefined;this[_0x5316('0x37')]=_0x1db336[_0x5316('0x37')]||undefined;this[_0x5316('0x38')]=_0x1db336['Interval']?_0x1db336[_0x5316('0x38')]:undefined;this['dialOrderByScheduledAt']=_0x1db336[_0x5316('0x39')]||_0x5316('0x3a');this[_0x5316('0x3b')]=_0x1db336['dialRandomLastDigitCallerIdNumber']||undefined;this[_0x5316('0x3c')]=_0x1db336[_0x5316('0x3c')]||undefined;this[_0x5316('0x3d')]=strategy[_0x1db336[_0x5316('0x3d')]]||_0x5316('0x9');this[_0x5316('0x3e')]=!![];this[_0x5316('0x3f')]=_0x1db336[_0x5316('0x3f')]||![];this['dialAMDInitialSilence']=_0x1db336[_0x5316('0x40')];this[_0x5316('0x41')]=_0x1db336[_0x5316('0x41')];this[_0x5316('0x42')]=_0x1db336[_0x5316('0x42')];this[_0x5316('0x43')]=_0x1db336['dialAMDTotalAnalysisTime'];this['dialAMDMinWordLength']=_0x1db336[_0x5316('0x44')];this[_0x5316('0x45')]=_0x1db336[_0x5316('0x45')];this[_0x5316('0x46')]=_0x1db336[_0x5316('0x46')];this[_0x5316('0x47')]=_0x1db336[_0x5316('0x47')];this[_0x5316('0x48')]=_0x1db336['dialAMDMaximumWordLength'];this['outboundRejectCallsDay']=0x0;this[_0x5316('0x49')]=0x0;this['timeout']=_0x1db336[_0x5316('0x4a')];this[_0x5316('0x4b')]=0x0;this['outboundAnswerAgiCallsDay']=0x0;this['outboundNoAnswerCallsDay']=0x0;this[_0x5316('0x4c')]=0x0;this[_0x5316('0x4d')]=0x0;this['outboundNoSuchCallsDay']=0x0;this['outboundUnknownCallsDay']=0x0;this[_0x5316('0x4e')]=0x0;this['outboundOriginateFailureCallsDay']=0x0;this[_0x5316('0x4f')]=0x0;this[_0x5316('0x50')]=0x0;this['outboundDropCallsDayACS']=0x0;this[_0x5316('0x51')]=0x0;this[_0x5316('0x52')]=undefined;this[_0x5316('0x53')]=undefined;this[_0x5316('0x54')]=undefined;this['predictiveIntervalMultiplicativeFactor']=1.05;this[_0x5316('0x55')]=0x0;this['predictiveIntervalAnsweredCalls']=0x0;this[_0x5316('0x56')]=0x0;this['predictiveIntervalDroppedCallsTimeout']=0x0;this['predictiveIntervalAvgHoldtime']=0x0;this[_0x5316('0x57')]=0x0;this[_0x5316('0x58')]=0x0;this[_0x5316('0x59')]=0x0;this['predictiveIntervalMaxThreshold']=_0x1db336[_0x5316('0x5a')]||0x14;this[_0x5316('0x5b')]=_0x1db336[_0x5316('0x5a')]||0xa;this['predictiveIntervalErlangCalls']=0x0;this[_0x5316('0x5c')]=0x0;this[_0x5316('0x5d')]=0x1;this[_0x5316('0x5e')]=0x0;this[_0x5316('0x5f')]=0x0;this['erlangAbandonmentRate']=0x0;this[_0x5316('0x60')]=0x0;this[_0x5316('0x61')]=_0x1db336[_0x5316('0x61')]||0x1e;this[_0x5316('0x62')]=_0x1db336['dialRecallInQueue']||![];this[_0x5316('0x63')]=_0x1db336[_0x5316('0x63')]||undefined;this[_0x5316('0x64')]=_0x1db336[_0x5316('0x64')]||![];this[_0x5316('0x65')]=_0x1db336['dialAgiAfterHangupAgent']||![];this['monitor_format']=monitorFormat[_0x1db336[_0x5316('0xc')]]?monitorFormat[_0x1db336[_0x5316('0xc')]]:undefined;this[_0x5316('0x66')]=_0x1db336[_0x5316('0x66')]||![];this['mandatoryDispositionPause']=_0x1db336[_0x5316('0x67')]?_0x1db336[_0x5316('0x67')]:undefined;}module[_0x5316('0x68')]=VoiceQueue;
\ No newline at end of file
index e1d97ac..2ca83bd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfc3e=['serverUrl','Configurations','exports','name','username','accessKey','remoteUri'];(function(_0x449acc,_0x416458){var _0x15d15d=function(_0x5626a0){while(--_0x5626a0){_0x449acc['push'](_0x449acc['shift']());}};_0x15d15d(++_0x416458);}(_0xfc3e,0x122));var _0xefc3=function(_0x223b49,_0x5b2f0c){_0x223b49=_0x223b49-0x0;var _0x96cf0a=_0xfc3e[_0x223b49];return _0x96cf0a;};'use strict';function VtigerAccount(_0x2f7974){this['id']=_0x2f7974['id']||0x0;this[_0xefc3('0x0')]=_0x2f7974[_0xefc3('0x0')]||'';this[_0xefc3('0x1')]=_0x2f7974[_0xefc3('0x1')]||'';this[_0xefc3('0x2')]=_0x2f7974[_0xefc3('0x2')]||'';this[_0xefc3('0x3')]=_0x2f7974[_0xefc3('0x3')]||'';this['serverUrl']=_0x2f7974[_0xefc3('0x4')]||'';this[_0xefc3('0x5')]=_0x2f7974[_0xefc3('0x5')]||{};}module[_0xefc3('0x6')]=VtigerAccount;
\ No newline at end of file
+var _0x3600=['remoteUri','serverUrl','Configurations','exports','name','username','accessKey'];(function(_0x3ede7c,_0x4692ab){var _0x5f14d5=function(_0x332712){while(--_0x332712){_0x3ede7c['push'](_0x3ede7c['shift']());}};_0x5f14d5(++_0x4692ab);}(_0x3600,0x13f));var _0x0360=function(_0x48f395,_0x7b3f75){_0x48f395=_0x48f395-0x0;var _0x1e0d95=_0x3600[_0x48f395];return _0x1e0d95;};'use strict';function VtigerAccount(_0x5ec36f){this['id']=_0x5ec36f['id']||0x0;this['name']=_0x5ec36f[_0x0360('0x0')]||'';this[_0x0360('0x1')]=_0x5ec36f[_0x0360('0x1')]||'';this[_0x0360('0x2')]=_0x5ec36f['accessKey']||'';this[_0x0360('0x3')]=_0x5ec36f[_0x0360('0x3')]||'';this['serverUrl']=_0x5ec36f[_0x0360('0x4')]||'';this[_0x0360('0x5')]=_0x5ec36f[_0x0360('0x5')]||{};}module[_0x0360('0x6')]=VtigerAccount;
\ No newline at end of file
index bf4bc4d..14b32fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4208=['Configurations','exports','name','username','password','token','remoteUri','authType','type','serverUrl'];(function(_0x1223e9,_0x14ef6f){var _0x352b60=function(_0x3c196c){while(--_0x3c196c){_0x1223e9['push'](_0x1223e9['shift']());}};_0x352b60(++_0x14ef6f);}(_0x4208,0x1e2));var _0x8420=function(_0x1c16a4,_0xbba97c){_0x1c16a4=_0x1c16a4-0x0;var _0xa47eb7=_0x4208[_0x1c16a4];return _0xa47eb7;};'use strict';function ZendeskAccount(_0x1f5d04){this['id']=_0x1f5d04['id']||0x0;this['name']=_0x1f5d04[_0x8420('0x0')]||'';this['username']=_0x1f5d04[_0x8420('0x1')]||'';this[_0x8420('0x2')]=_0x1f5d04[_0x8420('0x2')]||'';this[_0x8420('0x3')]=_0x1f5d04[_0x8420('0x3')]||'';this[_0x8420('0x4')]=_0x1f5d04['remoteUri']||'';this[_0x8420('0x5')]=_0x1f5d04['authType']||'';this['type']=_0x1f5d04[_0x8420('0x6')]||'integrationTab';this[_0x8420('0x7')]=_0x1f5d04[_0x8420('0x7')]||'';this['Configurations']=_0x1f5d04[_0x8420('0x8')]||{};}module[_0x8420('0x9')]=ZendeskAccount;
\ No newline at end of file
+var _0x55e6=['password','token','remoteUri','authType','type','integrationTab','serverUrl','Configurations','exports','name','username'];(function(_0x48f050,_0x5f1133){var _0x5083d4=function(_0xc98287){while(--_0xc98287){_0x48f050['push'](_0x48f050['shift']());}};_0x5083d4(++_0x5f1133);}(_0x55e6,0x195));var _0x655e=function(_0x841d30,_0x265fcb){_0x841d30=_0x841d30-0x0;var _0x445456=_0x55e6[_0x841d30];return _0x445456;};'use strict';function ZendeskAccount(_0x3900c2){this['id']=_0x3900c2['id']||0x0;this['name']=_0x3900c2[_0x655e('0x0')]||'';this[_0x655e('0x1')]=_0x3900c2[_0x655e('0x1')]||'';this[_0x655e('0x2')]=_0x3900c2[_0x655e('0x2')]||'';this[_0x655e('0x3')]=_0x3900c2[_0x655e('0x3')]||'';this[_0x655e('0x4')]=_0x3900c2[_0x655e('0x4')]||'';this[_0x655e('0x5')]=_0x3900c2[_0x655e('0x5')]||'';this['type']=_0x3900c2[_0x655e('0x6')]||_0x655e('0x7');this[_0x655e('0x8')]=_0x3900c2[_0x655e('0x8')]||'';this[_0x655e('0x9')]=_0x3900c2[_0x655e('0x9')]||{};}module[_0x655e('0xa')]=ZendeskAccount;
\ No newline at end of file
index b5e68e3..3461646 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1967=['serverUrl','name','authToken','host','Configurations'];(function(_0x56ebce,_0x5e488b){var _0x36e784=function(_0x1a054b){while(--_0x1a054b){_0x56ebce['push'](_0x56ebce['shift']());}};_0x36e784(++_0x5e488b);}(_0x1967,0x173));var _0x7196=function(_0x11f3a6,_0x499f4f){_0x11f3a6=_0x11f3a6-0x0;var _0xe913d7=_0x1967[_0x11f3a6];return _0xe913d7;};'use strict';function ZohoAccount(_0x193fee){this['id']=_0x193fee['id']||0x0;this[_0x7196('0x0')]=_0x193fee[_0x7196('0x0')]||'';this[_0x7196('0x1')]=_0x193fee[_0x7196('0x1')]||'';this[_0x7196('0x2')]=_0x193fee[_0x7196('0x2')]||'';this[_0x7196('0x3')]=_0x193fee[_0x7196('0x3')]||{};this[_0x7196('0x4')]=_0x193fee[_0x7196('0x4')]||'';}module['exports']=ZohoAccount;
\ No newline at end of file
+var _0xabce=['authToken','Configurations','serverUrl','name'];(function(_0x17d9e3,_0x1f969c){var _0x14192d=function(_0x159745){while(--_0x159745){_0x17d9e3['push'](_0x17d9e3['shift']());}};_0x14192d(++_0x1f969c);}(_0xabce,0x103));var _0xeabc=function(_0x3a6efd,_0x2a5102){_0x3a6efd=_0x3a6efd-0x0;var _0x487b9a=_0xabce[_0x3a6efd];return _0x487b9a;};'use strict';function ZohoAccount(_0x3c9509){this['id']=_0x3c9509['id']||0x0;this[_0xeabc('0x0')]=_0x3c9509[_0xeabc('0x0')]||'';this[_0xeabc('0x1')]=_0x3c9509[_0xeabc('0x1')]||'';this['host']=_0x3c9509['host']||'';this[_0xeabc('0x2')]=_0x3c9509[_0xeabc('0x2')]||{};this[_0xeabc('0x3')]=_0x3c9509['serverUrl']||'';}module['exports']=ZohoAccount;
\ No newline at end of file
index 99407d6..a421a2d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf83=['membername','isNil','Agent','channelAgent','SIP/%s','Contact','phone','firstName','lastName','active','calleridnum','scheduledat','countbusyretry','countcongestionretry','countnoanswerretry','callback','callbackuniqueid','callbackat','recallme','UserId','VoiceQueueId','originatecalleridnum','prototype','getCaller','format','\x22%s\x22\x20<%s>','calleridname','number','exports','util','lodash','moment','string','uniqueid','idContact','name','type','campaigntype','queue'];(function(_0x47b03c,_0x2b8a51){var _0x2a3db5=function(_0x39cabe){while(--_0x39cabe){_0x47b03c['push'](_0x47b03c['shift']());}};_0x2a3db5(++_0x2b8a51);}(_0xbf83,0x17c));var _0x3bf8=function(_0x489613,_0x15fb25){_0x489613=_0x489613-0x0;var _0x4c281e=_0xbf83[_0x489613];return _0x4c281e;};'use strict';var util=require(_0x3bf8('0x0'));var _=require(_0x3bf8('0x1'));var moment=require(_0x3bf8('0x2'));function checkNameSurname(_0x8fac14,_0x1f4b68,_0x35a7b0){var _0x4295a1='';if(!_['isNil'](_0x1f4b68)&&'string'===typeof _0x1f4b68){_0x4295a1+=_0x1f4b68;}if(!_['isNil'](_0x35a7b0)&&_0x3bf8('0x3')===typeof _0x35a7b0){_0x4295a1+='\x20'+_0x35a7b0;}if(_0x4295a1!==''){return _0x4295a1;}return _0x8fac14;}function Action(_0x5deba4,_0x2c572a,_0x157a7d,_0x1418ac,_0x461b3c){this[_0x3bf8('0x4')]=_0x157a7d||undefined;this[_0x3bf8('0x5')]=_0x5deba4['id'];this['queue']=_0x2c572a[_0x3bf8('0x6')];this['type']=_0x2c572a[_0x3bf8('0x7')];this[_0x3bf8('0x8')]=_0x3bf8('0x9');this['dialAnswer']=![];this[_0x3bf8('0xa')]=_[_0x3bf8('0xb')](_0x5deba4['Agent'])?undefined:_0x5deba4[_0x3bf8('0xc')]['name'];this[_0x3bf8('0xd')]=this[_0x3bf8('0xa')]?util['format'](_0x3bf8('0xe'),this[_0x3bf8('0xa')]):_0x1418ac||undefined;this['calleridname']=checkNameSurname(_0x5deba4[_0x3bf8('0xf')][_0x3bf8('0x10')],_0x5deba4[_0x3bf8('0xf')][_0x3bf8('0x11')],_0x5deba4[_0x3bf8('0xf')][_0x3bf8('0x12')]);this['active']=_0x5deba4[_0x3bf8('0x13')]||![];this[_0x3bf8('0x14')]=_0x5deba4[_0x3bf8('0xf')][_0x3bf8('0x10')];this['scheduledat']=_0x5deba4[_0x3bf8('0x15')];this['countbusyretry']=_0x5deba4[_0x3bf8('0x16')]||0x0;this[_0x3bf8('0x17')]=_0x5deba4[_0x3bf8('0x17')]||0x0;this[_0x3bf8('0x18')]=_0x5deba4[_0x3bf8('0x18')]||0x0;this['countglobal']=(_0x5deba4[_0x3bf8('0x16')]||0x0)+(_0x5deba4[_0x3bf8('0x17')]||0x0)+(_0x5deba4[_0x3bf8('0x18')]||0x0);this[_0x3bf8('0x19')]=_0x5deba4[_0x3bf8('0x19')];this[_0x3bf8('0x1a')]=_0x5deba4[_0x3bf8('0x1a')];this[_0x3bf8('0x1b')]=_0x5deba4[_0x3bf8('0x1b')];this[_0x3bf8('0x1c')]=_0x5deba4[_0x3bf8('0x1c')];this['ContactId']=_0x5deba4['ContactId'];this['ListId']=_0x5deba4['ListId'];this['UserId']=_[_0x3bf8('0xb')](_0x5deba4[_0x3bf8('0xc')])?_0x5deba4[_0x3bf8('0x1d')]:_0x5deba4['Agent']['id'];this['VoiceQueueId']=_0x5deba4[_0x3bf8('0x1e')];this[_0x3bf8('0x1f')]='';this['originatecalleridname']='';}Action[_0x3bf8('0x20')][_0x3bf8('0x21')]=function(){return util[_0x3bf8('0x22')](_0x3bf8('0x23'),this[_0x3bf8('0x24')],this[_0x3bf8('0x25')]);};module[_0x3bf8('0x26')]=Action;
\ No newline at end of file
+var _0xaa34=['Contact','lastName','active','calleridnum','scheduledat','countcongestionretry','countnoanswerretry','countglobal','countbusyretry','callback','callbackuniqueid','recallme','ContactId','UserId','VoiceQueueId','originatecalleridname','prototype','getCaller','\x22%s\x22\x20<%s>','exports','util','lodash','moment','isNil','string','uniqueid','queue','type','campaigntype','dialAnswer','membername','Agent','format','calleridname','phone'];(function(_0x502c7d,_0x2f1285){var _0x30b7ed=function(_0x2d92f3){while(--_0x2d92f3){_0x502c7d['push'](_0x502c7d['shift']());}};_0x30b7ed(++_0x2f1285);}(_0xaa34,0x109));var _0x4aa3=function(_0x26cd94,_0x23a924){_0x26cd94=_0x26cd94-0x0;var _0x5582cb=_0xaa34[_0x26cd94];return _0x5582cb;};'use strict';var util=require(_0x4aa3('0x0'));var _=require(_0x4aa3('0x1'));var moment=require(_0x4aa3('0x2'));function checkNameSurname(_0x55fbec,_0x25d28f,_0x1795fb){var _0x1f76a4='';if(!_[_0x4aa3('0x3')](_0x25d28f)&&_0x4aa3('0x4')===typeof _0x25d28f){_0x1f76a4+=_0x25d28f;}if(!_[_0x4aa3('0x3')](_0x1795fb)&&_0x4aa3('0x4')===typeof _0x1795fb){_0x1f76a4+='\x20'+_0x1795fb;}if(_0x1f76a4!==''){return _0x1f76a4;}return _0x55fbec;}function Action(_0x11a581,_0x13d83b,_0x6f65ac,_0xb54636,_0x41bd57){this[_0x4aa3('0x5')]=_0x6f65ac||undefined;this['idContact']=_0x11a581['id'];this[_0x4aa3('0x6')]=_0x13d83b['name'];this[_0x4aa3('0x7')]=_0x13d83b[_0x4aa3('0x7')];this[_0x4aa3('0x8')]=_0x4aa3('0x6');this[_0x4aa3('0x9')]=![];this[_0x4aa3('0xa')]=_[_0x4aa3('0x3')](_0x11a581[_0x4aa3('0xb')])?undefined:_0x11a581[_0x4aa3('0xb')]['name'];this['channelAgent']=this[_0x4aa3('0xa')]?util[_0x4aa3('0xc')]('SIP/%s',this['membername']):_0xb54636||undefined;this[_0x4aa3('0xd')]=checkNameSurname(_0x11a581['Contact'][_0x4aa3('0xe')],_0x11a581['Contact']['firstName'],_0x11a581[_0x4aa3('0xf')][_0x4aa3('0x10')]);this[_0x4aa3('0x11')]=_0x11a581[_0x4aa3('0x11')]||![];this[_0x4aa3('0x12')]=_0x11a581[_0x4aa3('0xf')][_0x4aa3('0xe')];this[_0x4aa3('0x13')]=_0x11a581[_0x4aa3('0x13')];this['countbusyretry']=_0x11a581['countbusyretry']||0x0;this[_0x4aa3('0x14')]=_0x11a581[_0x4aa3('0x14')]||0x0;this[_0x4aa3('0x15')]=_0x11a581[_0x4aa3('0x15')]||0x0;this[_0x4aa3('0x16')]=(_0x11a581[_0x4aa3('0x17')]||0x0)+(_0x11a581[_0x4aa3('0x14')]||0x0)+(_0x11a581[_0x4aa3('0x15')]||0x0);this[_0x4aa3('0x18')]=_0x11a581[_0x4aa3('0x18')];this[_0x4aa3('0x19')]=_0x11a581[_0x4aa3('0x19')];this['callbackat']=_0x11a581['callbackat'];this[_0x4aa3('0x1a')]=_0x11a581[_0x4aa3('0x1a')];this[_0x4aa3('0x1b')]=_0x11a581['ContactId'];this['ListId']=_0x11a581['ListId'];this[_0x4aa3('0x1c')]=_[_0x4aa3('0x3')](_0x11a581[_0x4aa3('0xb')])?_0x11a581['UserId']:_0x11a581[_0x4aa3('0xb')]['id'];this['VoiceQueueId']=_0x11a581[_0x4aa3('0x1d')];this['originatecalleridnum']='';this[_0x4aa3('0x1e')]='';}Action[_0x4aa3('0x1f')][_0x4aa3('0x20')]=function(){return util['format'](_0x4aa3('0x21'),this['calleridname'],this['number']);};module[_0x4aa3('0x22')]=Action;
\ No newline at end of file
index 76e3173..b9c04fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa424=['predictiveIntervalMultiplicativeFactor','message','originated','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','startPredictive','startProgressive','Trunk','active','callerid','Interval','format','voice:queue:%s','voice_queue:save','voice_queue_channel:remove','sendMessageOneNotActive','paused','logger','[CampaignPreview]\x20Campaign\x20Queue:\x20','\x20is\x20not\x20active','IS_DISACTIVED','syncCampaigns','hasOwnProperty','dialMethod','booked','outbound','clearZombieChannels','sequence','enqueue','isNil','Queue','queue','originated:\x20','stringify','pTalking:\x20','dialAnswer','pick','contactId','UserId','ListId','Action','channel','catch','updateOriginated','[clearZombieChannel]','[Dialer][checkChannel][pTalking][Preview]','[Dialer][checkChannel][Preview]','info','[action]','recallMe','getContactRecallMe','agentReadyId','length','scheduledat','dialRecallMeTimeout','run','then','logger2','[RecallMe]','starttime','YYYY-MM-DD\x20HH:mm:ss','RecallInQueue','dialRecallInQueue','rescheduleContactInQueue','createBody','createCustomerHistory','[HistoryDialRecallInQueue][historyCatch]','RecallFailedTimeout','[HistoryRecallClose]','createCustomerFinal','[getContactRecallMe]','setMessage','AGENTS_NOT_LOGGED','isActive','isTrunkReachable','TrunkBackup','TRUNK_IS_NOT_REACHABLE','ACTIVE','callProgressDetectingCustomer','countglobal','totalGlobal','NoSuchNumber','[callProgressDetectingCustomer][logNoSuch]','cloneAction','[callProgressDetectingCustomer][logNoSuchGlobal]','ANSWER','responsetime','answertime','uniqueid','acw','custom:agentConnectPreview','buildAcw','custom:agentcomplete','complete','total','decrementTalkink','[16]','[callProgressDetectingCustomer][logAnswerGlobal]','talktime','sumBillable','[syncHangup][talking][decrement]','\x20Queue','linkedid','[callProgressDetectingCustomer][logBusy]','[callProgressDetectingCustomer][logBusyGlobal]','countbusyretry','dialBusyMaxRetry','rescheduleContact','scheduledAt','dialBusyRetryFrequency','unlockAgent','activeContact','countnoanswerretry','logCustomer','[callProgressDetectingCustomer][logNoAnswer]','dialGlobalMaxRetry','Global','[callProgressDetectingCustomer][logNoAnswerGlobal]','dialNoAnswerMaxRetry','CONGESTION','countcongestionretry','Congestion','[callProgressDetectingCustomer][logCongestion]','[callProgressDetectingCustomer][logCongestionGlobal]','dialCongestionMaxRetry','AgentReject','[syncHangupRequest][logAgentReject]','unlockContact','disableContact','idContact','[default]','[Dialer][decrementTalkink][no\x20Hangup][Preview]','dialstatus','[callProgressDetectingCustomer][logUnknown]','[callProgressDetectingCustomer][logUnknownGlobal]','[callProgressDetectingCustomer]','[originated][decrement][callProgressDetectingCustomer]','destlinkedid','callProgressDetectingAgent','isUndefined','object','reason','logAgent','[callProgressDetectingAgent][logNoSuch]','createAgentHistory','[callProgressDetectingAgent][logBusy]','[callProgressDetectingAgent][logCongestion]','[callProgressDetectingAgent][logAnswerAGI]','[callProgressDetectingAgent]','checkInBlack','Contact','phone','Contact\x20is\x20undefined','isEmpty','execCall','Queue:\x20','\x20IdHopper:\x20','custom:agentcalled','buildObj','[Preview][execCall][failure]','Call\x20failed','logBlacklist','[Blacklist][error]','Contact\x20in\x20black\x20List','SIP/%s','status','reachable','unmonitored','execRun','getContactPreview','recallme','validateContact','isValid','checkIsBlackList','VoiceQueueId','[Preview][checkIsBlackList]','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','Trunk\x20not\x20work','[Preview][validateContact][Campaign\x20Active]','\x20Not\x20Active','Is\x20Valid','SIP/%s/%s%s','trim','substring','dialCutDigit','getCallerId','getCallerIdRandom','dialRandomLastDigitCallerIdNumber','originatecalleridname','extractCalleridName','originatecalleridnum','extractCalleridNumber','addVariables','merge','toLowerVariables','variablesAction','[originated][increment]','OriginateError','actionid','lookAgent','logLookAgent','clone','isFailure','response','[callProgressDetectingAgent][logAnswer]','[syncHangup][talking]','cause','[syncHangup][talking][cause]','statedesc','dialQueueProject','channelstate','transfer','[syncHangup][talking][transfer]','syncDialEnd','destuniqueid','variables','filterKey','keys','variable','addVariable','value','error','[syncVarSet][Preview]','inspect','transfertargetlinkedid','transfererlinkedid','exports','util','lodash','bluebird','uuid','moment','md5','ioredis','../../../config/logger','preview','actionPreview','../ami','./rpcDb','./action','redis','socket.io-emitter','prototype','tail','finally','campaignsPreview','voiceQueues','trunks','actions','agents','clockClearZombieChannels','originateresponse','syncOriginateResponse','bind','hangup','syncHangup','hanguprequest','syncHangupRequest','newexten','syncNewExten','varset','syncVarSet','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','loopCampaigns','emit','name','strategy','answered','available','loggedIn','pTalking','sumDuration','sumHoldTime','talking','type','unmanaged','abandoned','waiting','loggedInDb','dialActive','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundDropCallsDayCallersExit','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls'];(function(_0x31991b,_0xaf75d2){var _0x307304=function(_0x2f36c5){while(--_0x2f36c5){_0x31991b['push'](_0x31991b['shift']());}};_0x307304(++_0xaf75d2);}(_0xa424,0xef));var _0x4a42=function(_0x35bdcf,_0x49440c){_0x35bdcf=_0x35bdcf-0x0;var _0x30a213=_0xa424[_0x35bdcf];return _0x30a213;};'use strict';var util=require(_0x4a42('0x0'));var _=require(_0x4a42('0x1'));var BPromise=require(_0x4a42('0x2'));var uuid=require(_0x4a42('0x3'));var moment=require(_0x4a42('0x4'));var md5=require(_0x4a42('0x5'));var Redis=require(_0x4a42('0x6'));var config=require('../../../config/environment');var logger=require(_0x4a42('0x7'))(_0x4a42('0x8'));var loggerAction=require('../../../config/logger')(_0x4a42('0x9'));var ami=require(_0x4a42('0xa'));var rpcDb=require(_0x4a42('0xb'));var Action=require(_0x4a42('0xc'));var ut=require('./util/util');config[_0x4a42('0xd')]=_['defaults'](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x4a42('0xe'))(new Redis(config[_0x4a42('0xd')]));var Sequence=function(){};Sequence[_0x4a42('0xf')]['enqueue']=function(_0x2a76b3){this['tail']=this[_0x4a42('0x10')]?this['tail'][_0x4a42('0x11')](_0x2a76b3):_0x2a76b3();};function Preview(_0x46bff1){this['sequence']=new Sequence();this[_0x4a42('0x12')]=_0x46bff1[_0x4a42('0x13')];this[_0x4a42('0x14')]=_0x46bff1['trunks'];this[_0x4a42('0x15')]={};this[_0x4a42('0x16')]=_0x46bff1['agents'];this[_0x4a42('0x17')]=0x0;ami['on'](_0x4a42('0x18'),this[_0x4a42('0x19')][_0x4a42('0x1a')](this));ami['on'](_0x4a42('0x1b'),this[_0x4a42('0x1c')][_0x4a42('0x1a')](this));ami['on'](_0x4a42('0x1d'),this[_0x4a42('0x1e')]['bind'](this));ami['on']('dialend',this['syncDialEnd'][_0x4a42('0x1a')](this));ami['on'](_0x4a42('0x1f'),this[_0x4a42('0x20')][_0x4a42('0x1a')](this));ami['on'](_0x4a42('0x21'),this[_0x4a42('0x22')][_0x4a42('0x1a')](this));ami['on'](_0x4a42('0x23'),this[_0x4a42('0x24')][_0x4a42('0x1a')](this));ami['on'](_0x4a42('0x25'),this[_0x4a42('0x26')][_0x4a42('0x1a')](this));this[_0x4a42('0x27')](this[_0x4a42('0x12')]);}function emit(_0x26cda6,_0x4c508e,_0x8191f9){io['to'](_0x26cda6)[_0x4a42('0x28')](_0x4c508e,_0x8191f9);}function emitCampaignPreview(_0x142f96){if(_0x142f96['type']==='outbound'){var _0x32488c={'id':_0x142f96['id'],'name':_0x142f96[_0x4a42('0x29')],'strategy':_0x142f96[_0x4a42('0x2a')],'answered':_0x142f96[_0x4a42('0x2b')],'available':_0x142f96[_0x4a42('0x2c')],'loggedIn':_0x142f96[_0x4a42('0x2d')],'pTalking':_0x142f96[_0x4a42('0x2e')],'sumBillable':_0x142f96['sumBillable'],'sumDuration':_0x142f96[_0x4a42('0x2f')],'sumHoldTime':_0x142f96[_0x4a42('0x30')]||0x0,'talking':_0x142f96[_0x4a42('0x31')],'total':_0x142f96['total'],'type':_0x142f96[_0x4a42('0x32')],'unmanaged':_0x142f96[_0x4a42('0x33')],'abandoned':_0x142f96[_0x4a42('0x34')],'waiting':_0x142f96[_0x4a42('0x35')],'loggedInDb':_0x142f96[_0x4a42('0x36')],'dialActive':_0x142f96[_0x4a42('0x37')],'dialMethod':_0x142f96['dialMethod'],'dialOriginateCallerIdName':_0x142f96[_0x4a42('0x38')],'dialOriginateCallerIdNumber':_0x142f96[_0x4a42('0x39')],'dialOriginateTimeout':_0x142f96['dialOriginateTimeout'],'dialPrefix':_0x142f96[_0x4a42('0x3a')],'outboundAnswerAgiCallsDay':_0x142f96[_0x4a42('0x3b')],'outboundAnswerCallsDay':_0x142f96[_0x4a42('0x3c')],'outboundBlacklistCallsDay':_0x142f96[_0x4a42('0x3d')],'outboundBusyCallsDay':_0x142f96[_0x4a42('0x3e')],'outboundCongestionCallsDay':_0x142f96['outboundCongestionCallsDay'],'outboundDropCallsDayACS':_0x142f96['outboundDropCallsDayACS'],'outboundDropCallsDayCallersExit':_0x142f96[_0x4a42('0x3f')],'outboundDropCallsDayTimeout':_0x142f96['outboundDropCallsDayTimeout'],'outboundNoAnswerCallsDay':_0x142f96[_0x4a42('0x40')],'outboundNoSuchCallsDay':_0x142f96[_0x4a42('0x41')],'outboundOriginateFailureCallsDay':_0x142f96[_0x4a42('0x42')],'outboundReCallsDay':_0x142f96[_0x4a42('0x43')],'outboundRejectCallsDay':_0x142f96[_0x4a42('0x44')],'outboundUnknownCallsDay':_0x142f96['outboundUnknownCallsDay'],'predictiveIntervalAnsweredCalls':_0x142f96[_0x4a42('0x45')],'predictiveIntervalAvgHoldtime':_0x142f96[_0x4a42('0x46')],'predictiveIntervalAvgTalktime':_0x142f96[_0x4a42('0x47')],'predictiveIntervalDroppedCallsCallersExit':_0x142f96['predictiveIntervalDroppedCallsCallersExit'],'predictiveIntervalDroppedCallsTimeout':_0x142f96[_0x4a42('0x48')],'predictiveIntervalErlangCalls':_0x142f96[_0x4a42('0x49')],'predictiveIntervalErlangCallsDroppedCalls':_0x142f96[_0x4a42('0x4a')],'predictiveIntervalHitRate':_0x142f96['predictiveIntervalHitRate'],'predictiveIntervalMultiplicativeFactor':_0x142f96[_0x4a42('0x4b')],'predictiveIntervalPauses':_0x142f96['predictiveIntervalPauses'],'predictiveIntervalAvailable':_0x142f96['predictiveIntervalAvailable'],'predictiveIntervalTotalCalls':_0x142f96['predictiveIntervalTotalCalls'],'message':_0x142f96[_0x4a42('0x4c')],'originated':_0x142f96[_0x4a42('0x4d')],'erlangCalls':_0x142f96[_0x4a42('0x4e')],'erlangCallToSecond':_0x142f96[_0x4a42('0x4f')],'erlangAbandonmentRate':_0x142f96[_0x4a42('0x50')],'erlangBusyFactor':_0x142f96[_0x4a42('0x51')],'startPredictive':_0x142f96[_0x4a42('0x52')],'startProgressive':_0x142f96[_0x4a42('0x53')]};if(_0x142f96[_0x4a42('0x54')]){_0x32488c[_0x4a42('0x54')]={'id':_0x142f96[_0x4a42('0x54')]['id'],'name':_0x142f96['Trunk'][_0x4a42('0x29')],'active':_0x142f96[_0x4a42('0x54')][_0x4a42('0x55')],'callerid':_0x142f96['Trunk'][_0x4a42('0x56')]};}if(_0x142f96['Interval']){_0x32488c[_0x4a42('0x57')]={'id':_0x142f96['Interval']['id'],'name':_0x142f96[_0x4a42('0x57')][_0x4a42('0x29')]};}var _0x5536ee=md5(JSON['stringify'](_0x32488c));if(_0x142f96[_0x4a42('0x5')]!==_0x5536ee){_0x142f96['md5']=_0x5536ee;emit(util[_0x4a42('0x58')](_0x4a42('0x59'),_0x32488c[_0x4a42('0x29')]),_0x4a42('0x5a'),_0x32488c);}}}function emitVoiceQueueChannelRemove(_0x4a7e34){emit(util[_0x4a42('0x58')](_0x4a42('0x59'),_0x4a7e34[_0x4a42('0x29')]),_0x4a42('0x5b'),_0x4a7e34);}function notSendMessagesQueue(_0x51d89f){if(_0x51d89f[_0x4a42('0x5c')]){if(_0x51d89f[_0x4a42('0x4d')]===0x0&&_0x51d89f[_0x4a42('0x2e')]===0x0){_0x51d89f[_0x4a42('0x5c')]=![];_0x51d89f[_0x4a42('0x2c')]=0x0;_0x51d89f[_0x4a42('0x5d')]=0x0;_0x51d89f[_0x4a42('0x4c')]='NOT_ACTIVE';ut[_0x4a42('0x5e')](_0x4a42('0x5f'),_0x51d89f[_0x4a42('0x29')]+_0x4a42('0x60'));}else{_0x51d89f[_0x4a42('0x4c')]=_0x4a42('0x61');ut[_0x4a42('0x5e')](_0x4a42('0x5f'),_0x51d89f[_0x4a42('0x29')]+'\x20is\x20disactive');}emitCampaignPreview(_0x51d89f);}}Preview[_0x4a42('0xf')][_0x4a42('0x27')]=function(){var _0x487c79=this;setInterval(function(){_0x487c79[_0x4a42('0x62')]();},0x7cf);};Preview[_0x4a42('0xf')][_0x4a42('0x62')]=function(){var _0x501121=this[_0x4a42('0x12')];this[_0x4a42('0x17')]+=0x1;for(var _0x46ee93 in _0x501121){if(_0x501121[_0x4a42('0x63')](_0x46ee93)&&(_0x501121[_0x46ee93]['dialMethod']===_0x4a42('0x8')||_0x501121[_0x46ee93][_0x4a42('0x64')]===_0x4a42('0x65'))&&_0x501121[_0x46ee93][_0x4a42('0x32')]===_0x4a42('0x66')){if(this[_0x4a42('0x17')]>0x7){this['clockClearZombieChannels']=0x0;this[_0x4a42('0x67')]();}}if(_0x501121[_0x4a42('0x63')](_0x46ee93)&&_0x501121[_0x46ee93][_0x4a42('0x64')]===_0x4a42('0x8')&&_0x501121[_0x46ee93][_0x4a42('0x32')]===_0x4a42('0x66')){if(_0x501121[_0x46ee93]['dialActive']){this['setMessage'](_0x501121[_0x46ee93]);this['recallMe'](_0x501121[_0x46ee93]);}else{notSendMessagesQueue(_0x501121[_0x46ee93]);}}}};Preview['prototype']['clearZombieChannel']=function(_0x4bae74){var _0x2b03e0=this;this[_0x4a42('0x68')][_0x4a42('0x69')](function(){if(!_[_0x4a42('0x6a')](_0x2b03e0[_0x4a42('0x15')][_0x4bae74])){loggerAction['info']('[clearZombieChannels][talking]',_0x4bae74,_0x4a42('0x6b'),_0x2b03e0[_0x4a42('0x15')][_0x4bae74][_0x4a42('0x6c')],_0x4a42('0x6d'),JSON[_0x4a42('0x6e')](_0x2b03e0[_0x4a42('0x12')][_0x2b03e0['actions'][_0x4bae74][_0x4a42('0x6c')]][_0x4a42('0x4d')]),_0x4a42('0x6f'),JSON['stringify'](_0x2b03e0[_0x4a42('0x12')][_0x2b03e0[_0x4a42('0x15')][_0x4bae74][_0x4a42('0x6c')]][_0x4a42('0x2e')]),JSON['stringify'](_0x2b03e0[_0x4a42('0x15')][_0x4bae74][_0x4a42('0x70')]),JSON[_0x4a42('0x6e')](_[_0x4a42('0x71')](_0x2b03e0[_0x4a42('0x15')][_0x4bae74],[_0x4a42('0x72'),_0x4a42('0x73'),'VoiceQueueId',_0x4a42('0x74')])));return ami[_0x4a42('0x75')]({'action':'status','channel':_0x2b03e0[_0x4a42('0x15')][_0x4bae74][_0x4a42('0x76')]})[_0x4a42('0x77')](function(_0x588909){if(_0x588909[_0x4a42('0x4c')]==='No\x20such\x20channel'){setTimeout(function(){if(_0x2b03e0[_0x4a42('0x15')][_0x4bae74]){ut[_0x4a42('0x78')](_0x2b03e0[_0x4a42('0x12')][_0x2b03e0[_0x4a42('0x15')][_0x4bae74][_0x4a42('0x6c')]],_0x4a42('0x79'));if(_0x2b03e0[_0x4a42('0x15')][_0x4bae74][_0x4a42('0x70')]===!![]){ut['decrementTalkink'](_0x2b03e0[_0x4a42('0x12')][_0x2b03e0['actions'][_0x4bae74][_0x4a42('0x6c')]],_0x4a42('0x79'));ut['loggerError'](_0x4a42('0x7a')+_0x4bae74,_0x2b03e0['actions'][_0x4bae74][_0x4a42('0x6c')]);}ut['loggerError'](_0x4a42('0x7b')+_0x4bae74,_0x2b03e0[_0x4a42('0x15')][_0x4bae74]['queue']);delete _0x2b03e0[_0x4a42('0x15')][_0x4bae74];}},0x2328);}});}});};Preview['prototype'][_0x4a42('0x67')]=function(){var _0x4afb14=this;loggerAction[_0x4a42('0x7c')](_0x4a42('0x7d'),_['size'](this[_0x4a42('0x15')]));for(var _0x2b012b in this[_0x4a42('0x15')]){if(_0x4afb14['actions'][_0x4a42('0x63')](_0x2b012b)){_0x4afb14['clearZombieChannel'](_0x2b012b);}}};Preview[_0x4a42('0xf')][_0x4a42('0x7e')]=function(_0x277516){var _0x429106=this;rpcDb[_0x4a42('0x7f')](_0x277516['id'],ut[_0x4a42('0x80')](this[_0x4a42('0x16')]))['then'](function(_0x282696){if(!_[_0x4a42('0x6a')](_0x282696)){for(var _0x2df849=0x0;_0x2df849<_0x282696[_0x4a42('0x81')];_0x2df849+=0x1){if(ut['getDiff'](_0x282696[_0x2df849][_0x4a42('0x82')])<_0x277516[_0x4a42('0x83')]*0x3c){_0x429106[_0x4a42('0x84')](_0x282696[_0x2df849]['id'])[_0x4a42('0x85')](ut[_0x4a42('0x86')](_0x4a42('0x87')))[_0x4a42('0x77')](ut[_0x4a42('0x86')]('[RecallMe]'));}else{var _0x4a8ce5=new Action(_0x282696[_0x2df849],_0x277516);_0x4a8ce5[_0x4a42('0x88')]=moment()['format'](_0x4a42('0x89'));_0x277516[_0x4a42('0x43')]+=0x1;ut['logCustomer'](_0x4a8ce5,0x17,_0x4a42('0x8a'));if(_0x277516[_0x4a42('0x8b')]){rpcDb[_0x4a42('0x8c')](ut[_0x4a42('0x8d')](_0x282696[_0x2df849]));rpcDb[_0x4a42('0x8e')](_0x4a8ce5,_0x4a42('0x8f'));}else{ut['logCustomer'](_0x4a8ce5,0x16,_0x4a42('0x90'));rpcDb[_0x4a42('0x8e')](_0x4a8ce5,_0x4a42('0x91'));rpcDb[_0x4a42('0x92')](_0x4a8ce5,_0x4a42('0x91'));}}}}})[_0x4a42('0x77')](ut[_0x4a42('0x86')](_0x4a42('0x93')));};Preview[_0x4a42('0xf')][_0x4a42('0x94')]=function(_0x2d0465){_0x2d0465['sendMessageOneNotActive']=!![];if(ut['IsNotLoggedIn'](_0x2d0465[_0x4a42('0x2d')])){_0x2d0465[_0x4a42('0x4c')]=_0x4a42('0x95');}else if(!ut[_0x4a42('0x96')](_0x2d0465[_0x4a42('0x37')])){_0x2d0465[_0x4a42('0x4c')]='NOT_ACTIVE';}else if(!this[_0x4a42('0x97')](_0x2d0465[_0x4a42('0x54')])){if(!this['isTrunkReachable'](_0x2d0465[_0x4a42('0x98')])){_0x2d0465[_0x4a42('0x4c')]=_0x4a42('0x99');}else{_0x2d0465['message']='ACTIVE';}}else{_0x2d0465[_0x4a42('0x4c')]=_0x4a42('0x9a');}emitCampaignPreview(_0x2d0465);};Preview[_0x4a42('0xf')][_0x4a42('0x9b')]=function(_0x43cbcd,_0xd0a098,_0x5dd7aa){var _0xa3021a=this;var _0x48bf10=this[_0x4a42('0x15')][_0xd0a098];var _0x4e4907=this[_0x4a42('0x12')][_0x48bf10['queue']];var _0xb6dba;if(_0x4e4907){switch(_0x5dd7aa){case'1':_0x4e4907[_0x4a42('0x41')]+=0x1;_0x48bf10[_0x4a42('0x9c')]=ut[_0x4a42('0x9d')](_0x48bf10);ut['logCustomer'](_0x48bf10,0x0,_0x4a42('0x9e'));rpcDb['createCustomerHistory'](_0x48bf10,_0x4a42('0x9f'));if(ut[_0x4a42('0x9d')](_0x48bf10)>=_0x4e4907['dialGlobalMaxRetry']){_0xb6dba=ut[_0x4a42('0xa0')](_0x48bf10,0xf,'Global');rpcDb['createCustomerFinal'](_0xb6dba,_0x4a42('0xa1'));}else{rpcDb[_0x4a42('0x92')](_0x48bf10,_0x4a42('0xa1'));}delete this[_0x4a42('0x15')][_0x43cbcd['linkedid']];break;case _0x4a42('0xa2'):var _0xd77e58=moment()[_0x4a42('0x58')](_0x4a42('0x89'));_0x48bf10[_0x4a42('0xa3')]=_0xd77e58;_0x48bf10[_0x4a42('0xa4')]=_0xd77e58;_0x48bf10['dialAnswer']=!![];_0x4e4907[_0x4a42('0x2e')]+=0x1;logger[_0x4a42('0x7c')]('[syncHangup][talking][increment]',_0x48bf10[_0x4a42('0xa5')],'\x20Queue',_0x4e4907[_0x4a42('0x29')],'pTalking:\x20',_0x4e4907[_0x4a42('0x2e')]);ami[_0x4a42('0x28')]('custom:agentconnect',ut['buildObj'](_0x48bf10,'connect'));if(_0x4e4907[_0x4a42('0xa6')]){ami[_0x4a42('0x28')](_0x4a42('0xa7'),ut[_0x4a42('0xa8')](_0x48bf10));}break;case'16':ami[_0x4a42('0x28')](_0x4a42('0xa9'),ut['buildObj'](_0x48bf10,_0x4a42('0xaa')));emitVoiceQueueChannelRemove(ut['buildObj'](_0x48bf10,'complete'));_0x4e4907[_0x4a42('0x3c')]+=0x1;_0x4e4907[_0x4a42('0xab')]+=0x1;_0x4e4907['answered']+=0x1;ut[_0x4a42('0xac')](_0x4e4907,_0x4a42('0xad'));_0x48bf10[_0x4a42('0x9c')]=ut['totalGlobal'](_0x48bf10);ut['logCustomer'](_0x48bf10,0x4,'Answer');rpcDb['createCustomerHistory'](_0x48bf10,'[callProgressDetectingCustomer][logAnswer]');rpcDb[_0x4a42('0x92')](_0x48bf10,_0x4a42('0xae'));rpcDb['crateCustomerReportQueue'](_0x48bf10);_0x4e4907[_0x4a42('0x2f')]+=_0x48bf10[_0x4a42('0xaf')];_0x4e4907[_0x4a42('0xb0')]+=_0x48bf10[_0x4a42('0xaf')];logger['info'](_0x4a42('0xb1'),_0x48bf10[_0x4a42('0xa5')],_0x4a42('0xb2'),_0x4e4907['name'],_0x4a42('0x6f'),_0x4e4907[_0x4a42('0x2e')]);delete this[_0x4a42('0x15')][_0x43cbcd[_0x4a42('0xb3')]];break;case'BUSY':_0x4e4907[_0x4a42('0x3e')]+=0x1;_0x48bf10['countbusyretry']+=0x1;_0x48bf10[_0x4a42('0x9c')]=ut['totalGlobal'](_0x48bf10);ut['logCustomer'](_0x48bf10,0x5,'Busy');rpcDb[_0x4a42('0x8e')](_0x48bf10,_0x4a42('0xb4'));if(ut['totalGlobal'](_0x48bf10)>=_0x4e4907['dialGlobalMaxRetry']){_0xb6dba=ut[_0x4a42('0xa0')](_0x48bf10,0xf,'Global');rpcDb[_0x4a42('0x92')](_0xb6dba,_0x4a42('0xb5'));}else{if(_0x48bf10[_0x4a42('0xb6')]>=_0x4e4907[_0x4a42('0xb7')]){rpcDb['createCustomerFinal'](_0x48bf10,_0x4a42('0xb4'));}else{rpcDb[_0x4a42('0xb8')](ut[_0x4a42('0xb9')](_0x48bf10,_0x4a42('0xb6'),_0x4e4907[_0x4a42('0xba')]),_0x48bf10[_0x4a42('0xbb')],_0x48bf10[_0x4a42('0xbc')]);}}break;case'NOANSWER':_0x4e4907[_0x4a42('0x40')]+=0x1;_0x48bf10[_0x4a42('0xbd')]+=0x1;_0x48bf10[_0x4a42('0x9c')]=ut['totalGlobal'](_0x48bf10);ut[_0x4a42('0xbe')](_0x48bf10,0x3,'NoAnswer');rpcDb[_0x4a42('0x8e')](_0x48bf10,_0x4a42('0xbf'));if(ut[_0x4a42('0x9d')](_0x48bf10)>=_0x4e4907[_0x4a42('0xc0')]){_0xb6dba=ut[_0x4a42('0xa0')](_0x48bf10,0xf,_0x4a42('0xc1'));rpcDb[_0x4a42('0x92')](_0xb6dba,_0x4a42('0xc2'));}else{if(_0x48bf10['countnoanswerretry']>=_0x4e4907[_0x4a42('0xc3')]){rpcDb['createCustomerFinal'](_0x48bf10,'[callProgressDetectingCustomer][logNoAnswer]');}else{rpcDb[_0x4a42('0xb8')](ut['scheduledAt'](_0x48bf10,'countnoanswerretry',_0x4e4907['dialNoAnswerRetryFrequency']),_0x48bf10[_0x4a42('0xbb')],_0x48bf10[_0x4a42('0xbc')]);}}break;case _0x4a42('0xc4'):_0x4e4907['outboundCongestionCallsDay']+=0x1;_0x48bf10[_0x4a42('0xc5')]+=0x1;_0x48bf10[_0x4a42('0x9c')]=ut['totalGlobal'](_0x48bf10);ut[_0x4a42('0xbe')](_0x48bf10,0x8,_0x4a42('0xc6'));rpcDb[_0x4a42('0x8e')](_0x48bf10,_0x4a42('0xc7'));if(ut[_0x4a42('0x9d')](_0x48bf10)>=_0x4e4907[_0x4a42('0xc0')]){_0xb6dba=ut[_0x4a42('0xa0')](_0x48bf10,0xf,'Global');rpcDb[_0x4a42('0x92')](_0xb6dba,_0x4a42('0xc8'));}else{if(_0x48bf10[_0x4a42('0xc5')]>=_0x4e4907[_0x4a42('0xc9')]){rpcDb[_0x4a42('0x92')](_0x48bf10,'[callProgressDetectingCustomer][logCongestion]');}else{rpcDb[_0x4a42('0xb8')](ut['scheduledAt'](_0x48bf10,'countcongestionretry',_0x4e4907[_0x4a42('0xba')]),_0x48bf10['unlockAgent'],_0x48bf10[_0x4a42('0xbc')]);}}break;case'CANCEL':_0x4e4907[_0x4a42('0x44')]+=0x1;_0x48bf10[_0x4a42('0x9c')]=ut['totalGlobal'](_0x48bf10);ut[_0x4a42('0xbe')](_0x48bf10,0x14,_0x4a42('0xca'));rpcDb[_0x4a42('0x8e')](_0x48bf10,_0x4a42('0xcb'));if(_0x48bf10['unlockAgent']){rpcDb[_0x4a42('0xcc')](_0x48bf10['idContact']);}if(_0x48bf10['activeContact']){rpcDb[_0x4a42('0xcd')](_0x48bf10[_0x4a42('0xce')]);}break;default:if(_0x48bf10['dialAnswer']){ut[_0x4a42('0xac')](_0x4e4907,_0x4a42('0xcf'));ut['loggerError'](_0x4a42('0xd0')+_0x4e4907[_0x4a42('0x29')],_0x43cbcd);}_0x4e4907['outboundUnknownCallsDay']+=0x1;_0x48bf10['countglobal']=ut[_0x4a42('0x9d')](_0x48bf10);ut[_0x4a42('0xbe')](_0x48bf10,0xc,_0x43cbcd['cause-txt']||_0x43cbcd[_0x4a42('0xd1')]);rpcDb[_0x4a42('0x8e')](_0x48bf10,_0x4a42('0xd2'));if(ut[_0x4a42('0x9d')](_0x48bf10)>=_0x4e4907[_0x4a42('0xc0')]){_0xb6dba=ut[_0x4a42('0xa0')](_0x48bf10,0xf,_0x4a42('0xc1'));rpcDb[_0x4a42('0x92')](_0xb6dba,_0x4a42('0xd3'));}else{rpcDb[_0x4a42('0x92')](_0x48bf10,_0x4a42('0xd3'));}delete this[_0x4a42('0x15')][_0x43cbcd['linkedid']];}if(!(_0x48bf10['dialAnswer']&&_0x5dd7aa==='16')){ut[_0x4a42('0x78')](_0x4e4907,_0x4a42('0xd4'));logger[_0x4a42('0x7c')](_0x4a42('0xd5'),_0x48bf10['uniqueid'],_0x4a42('0xb2'),_0x4e4907[_0x4a42('0x29')],_0x4a42('0x6d'),_0x4e4907[_0x4a42('0x4d')]);}if(_0x5dd7aa!==_0x4a42('0xa2')){delete this['actions'][_0x43cbcd[_0x4a42('0xb3')]];delete this[_0x4a42('0x15')][_0x43cbcd[_0x4a42('0xd6')]];}}};Preview[_0x4a42('0xf')][_0x4a42('0xd7')]=function(_0x37225d,_0x1fb8ff,_0x5288f5){if(_[_0x4a42('0xd8')](_0x1fb8ff)&&_0x4a42('0xd9')!==typeof _0x1fb8ff){return;}if(_[_0x4a42('0xd8')](_0x5288f5)&&_0x4a42('0xd9')!==typeof _0x5288f5){return;}switch(_0x5288f5[_0x4a42('0xda')]){case'0':ut[_0x4a42('0xdb')](_0x37225d,0x0,'NoSuchNumber');rpcDb['createAgentHistory'](_0x37225d,_0x4a42('0xdc'));break;case'3':ut[_0x4a42('0xdb')](_0x37225d,0x3,'NoAnswer');rpcDb[_0x4a42('0xdd')](_0x37225d,'[callProgressDetectingAgent][logNoAnswer]');break;case'5':ut[_0x4a42('0xdb')](_0x37225d,0x5,'Busy');rpcDb[_0x4a42('0xdd')](_0x37225d,_0x4a42('0xde'));break;case'8':ut[_0x4a42('0xdb')](_0x37225d,0x8,_0x4a42('0xc6'));rpcDb[_0x4a42('0xdd')](_0x37225d,_0x4a42('0xdf'));break;case'22':ut[_0x4a42('0xdb')](_0x37225d,0x16,'AnswerAGI');rpcDb[_0x4a42('0xdd')](_0x37225d,_0x4a42('0xe0'));break;default:ut['logAgent'](_0x37225d,0xc,_0x5288f5['reason']);rpcDb[_0x4a42('0xdd')](_0x37225d,_0x4a42('0xdf'));}ut[_0x4a42('0x78')](_0x1fb8ff,_0x4a42('0xe1'));logger[_0x4a42('0x7c')]('[originated][decrement][callProgressDetectingAgent]',_0x37225d[_0x4a42('0xa5')],_0x4a42('0xb2'),_0x1fb8ff[_0x4a42('0x29')],_0x4a42('0x6d'),_0x1fb8ff[_0x4a42('0x4d')]);delete this[_0x4a42('0x15')][_0x37225d['uniqueid']];};Preview[_0x4a42('0xf')][_0x4a42('0xe2')]=function(_0x2e8830,_0x3eed75,_0x1832a8,_0x11bfa7,_0x2e7abb){var _0x1ce790=this;return new BPromise(function(_0x32f67b,_0x466260){if(_['isNil'](_0x3eed75)||_[_0x4a42('0x6a')](_0x3eed75[_0x4a42('0xe3')])||_[_0x4a42('0x6a')](_0x3eed75[_0x4a42('0xe3')][_0x4a42('0xe4')])||_['isNil'](_0x3eed75['VoiceQueueId'])){_0x466260(ut[_0x4a42('0x4c')](_0x4a42('0xe5'),_0x11bfa7,_0x2e7abb));return;}var _0x390208=uuid['v4']();var _0x215362=_0x1ce790['campaignsPreview'][_0x3eed75[_0x4a42('0x6b')][_0x4a42('0x29')]];var _0x189d7c=_0x1832a8?_0x1ce790[_0x4a42('0x16')][_0x1832a8]['id']:undefined;_0x1ce790[_0x4a42('0x15')][_0x390208]=new Action(_0x3eed75,_0x215362,_0x390208,_0x1832a8,_0x189d7c);var _0x505bcf=_0x1ce790[_0x4a42('0x15')][_0x390208];_0x505bcf[_0x4a42('0xbb')]=_0x11bfa7;_0x505bcf['activeContact']=_0x2e7abb;_0x505bcf['lookAgent']=_0x1832a8;if(_[_0x4a42('0xe6')](_0x2e8830)){_0x1ce790[_0x4a42('0xe7')](_0x505bcf,_0x215362,_0x3eed75,_0x1832a8)[_0x4a42('0x85')](function(_0x270536){logger[_0x4a42('0x7c')]('[Preview][execCall][success]',_0x4a42('0xe8')+_0x505bcf[_0x4a42('0x6c')]+_0x4a42('0xe9')+_0x505bcf[_0x4a42('0xce')],JSON['stringify'](_0x270536));ami[_0x4a42('0x28')](_0x4a42('0xea'),ut[_0x4a42('0xeb')](_0x505bcf,'called'));_0x32f67b(ut[_0x4a42('0x4c')]('Calling'));})[_0x4a42('0x77')](function(_0x421088){ut[_0x4a42('0x5e')](_0x4a42('0xec'),_0x421088);_0x466260(ut[_0x4a42('0x4c')](_0x4a42('0xed'),_0x11bfa7,_0x2e7abb));});}else{_0x215362[_0x4a42('0x3d')]+=0x1;ut[_0x4a42('0xee')](_0x505bcf);rpcDb['createHistory'](_0x505bcf,_0x4a42('0xef'));delete _0x1ce790[_0x4a42('0x15')][_0x390208];_0x466260(ut[_0x4a42('0x4c')](_0x4a42('0xf0'),_0x11bfa7,_0x2e7abb));}});};Preview[_0x4a42('0xf')][_0x4a42('0x97')]=function(_0xacb73){return!_['isNil'](_0xacb73)&&!_[_0x4a42('0x6a')](_0xacb73[_0x4a42('0x29')])&&!_[_0x4a42('0x6a')](_0xacb73[_0x4a42('0x55')])&&_0xacb73['active']&&!_[_0x4a42('0x6a')](this[_0x4a42('0x14')][util[_0x4a42('0x58')]('SIP/%s',_0xacb73[_0x4a42('0x29')])])&&!_[_0x4a42('0x6a')](this[_0x4a42('0x14')][util['format']('SIP/%s',_0xacb73['name'])]['status'])&&(this[_0x4a42('0x14')][util[_0x4a42('0x58')](_0x4a42('0xf1'),_0xacb73[_0x4a42('0x29')])][_0x4a42('0xf2')]===_0x4a42('0xf3')||this[_0x4a42('0x14')][util['format'](_0x4a42('0xf1'),_0xacb73[_0x4a42('0x29')])]['status']===_0x4a42('0xf4'));};Preview['prototype'][_0x4a42('0x84')]=function(_0x4a15c8,_0xad65c1){var _0x3ad1ad=this;return new BPromise(function(_0x6a7aea,_0x37af17){_0x3ad1ad[_0x4a42('0xf5')](_0x4a15c8,_0xad65c1)[_0x4a42('0x85')](function(_0x2dfb2b){_0x6a7aea(_[_0x4a42('0x71')](_0x2dfb2b,[_0x4a42('0x4c')]));})[_0x4a42('0x77')](function(_0x5a281f){if(_0x5a281f['unlock']){rpcDb[_0x4a42('0xcc')](_0x4a15c8);}if(_0x5a281f['active']){rpcDb['disableContact'](_0x4a15c8);}_0x37af17(_[_0x4a42('0x71')](_0x5a281f,[_0x4a42('0x4c')]));});});};Preview[_0x4a42('0xf')][_0x4a42('0xf5')]=function(_0x105a71,_0x16b806){var _0x22b1eb=this;return new BPromise(function(_0xc843f3,_0x5f3aab){var _0xb59d58,_0x27039e;rpcDb[_0x4a42('0xf6')](_0x105a71)[_0x4a42('0x85')](function(_0x67ffdb){if(!_[_0x4a42('0x6a')](_0x67ffdb[0x0])){_0x27039e=_0x67ffdb[0x0][_0x4a42('0xf7')]?![]:!![];_0xb59d58=_0x67ffdb[0x0][_0x4a42('0xf7')]?!![]:![];_0xb59d58=_0x16b806?!![]:_0xb59d58;}var _0x23e964=_0x22b1eb[_0x4a42('0xf8')](_0x67ffdb);if(_0x23e964[_0x4a42('0xf9')]){rpcDb[_0x4a42('0xfa')](_[_0x4a42('0x71')](_0x67ffdb[0x0],[_0x4a42('0xfb'),'Contact.phone']))['then'](function(_0x233320){_0x22b1eb[_0x4a42('0xe2')](_0x233320,_0x67ffdb[0x0],_0x16b806,_0x27039e,_0xb59d58)[_0x4a42('0x85')](function(_0x30d544){_0xc843f3(_0x30d544);})['catch'](function(_0x5b399a){_0x5f3aab(_0x5b399a);});})['catch'](function(_0x423816){ut[_0x4a42('0x5e')](_0x4a42('0xfc'),_0x423816);_0x5f3aab(ut[_0x4a42('0x4c')](_0x4a42('0xfd'),_0x27039e,_0xb59d58));});}else{_0x5f3aab(ut[_0x4a42('0x4c')](_0x23e964[_0x4a42('0x4c')],_0x27039e,_0xb59d58));}})[_0x4a42('0x77')](function(_0x4c5fbb){ut[_0x4a42('0x5e')](_0x4a42('0xfe'),_0x4c5fbb);_0x5f3aab(ut[_0x4a42('0x4c')](_0x4a42('0xfd'),![],!![]));});});};Preview[_0x4a42('0xf')][_0x4a42('0xf8')]=function(_0x4beb98){if(_[_0x4a42('0x6a')](_0x4beb98)||_[_0x4a42('0xe6')](_0x4beb98)||!_['isNil'](_0x4beb98[0x0][_0x4a42('0xff')])&&_['isNil'](_0x4beb98[0x0]['Agent'][_0x4a42('0x29')])){ut[_0x4a42('0x5e')](_0x4a42('0x100'),_0x4beb98);return{'isValid':![],'message':_0x4a42('0x101')};}var _0x4b7b3e=this['campaignsPreview'][_0x4beb98[0x0][_0x4a42('0x6b')][_0x4a42('0x29')]];_0x4b7b3e[_0x4a42('0x4c')]='ACTIVE';if(_[_0x4a42('0x6a')](_0x4b7b3e)){ut[_0x4a42('0x5e')](_0x4a42('0x102'),_0x4b7b3e);return{'isValid':![],'message':_0x4a42('0x103')};}if(!this[_0x4a42('0x97')](_0x4b7b3e[_0x4a42('0x54')])){ut[_0x4a42('0x5e')](_0x4a42('0x104'),_0x4a42('0x105')+_0x4b7b3e[_0x4a42('0x29')]+_0x4a42('0x106'));if(!this['isTrunkReachable'](_0x4b7b3e['TrunkBackup'])){ut[_0x4a42('0x5e')](_0x4a42('0x104'),_0x4b7b3e[_0x4a42('0x29')]+_0x4a42('0x107'));return{'isValid':![],'message':_0x4a42('0x108')};}}if(!ut[_0x4a42('0x96')](_0x4b7b3e[_0x4a42('0x37')])){ut[_0x4a42('0x5e')](_0x4a42('0x109'),_0x4b7b3e[_0x4a42('0x29')]+_0x4a42('0x10a'));return{'isValid':![],'message':_0x4a42('0x105')+_0x4b7b3e[_0x4a42('0x29')]+_0x4a42('0x10a')};}return{'isValid':!![],'message':_0x4a42('0x10b')};};Preview['prototype']['execCall']=function(_0x4dee1b,_0x6fbf76,_0x1e37de,_0x5584f3){var _0x59d692=this;return new BPromise(function(_0x28661d,_0x4ebfdf){var _0x506a71=_0x4dee1b['uniqueid'];var _0xa0fe68=_0x59d692['isTrunkReachable'](_0x6fbf76[_0x4a42('0x54')])?util['format'](_0x4a42('0x10c'),_0x6fbf76[_0x4a42('0x54')][_0x4a42('0x29')],_[_0x4a42('0x6a')](_0x6fbf76[_0x4a42('0x3a')])?'':_0x6fbf76[_0x4a42('0x3a')][_0x4a42('0x10d')]()||'',_0x6fbf76['dialCutDigit']>0x0?_0x1e37de[_0x4a42('0xe3')]['phone'][_0x4a42('0x10e')](_0x6fbf76[_0x4a42('0x10f')]):_0x1e37de[_0x4a42('0xe3')][_0x4a42('0xe4')]):util['format'](_0x4a42('0x10c'),_[_0x4a42('0x6a')](_0x6fbf76[_0x4a42('0x98')])?_0x6fbf76[_0x4a42('0x54')][_0x4a42('0x29')]:_0x6fbf76[_0x4a42('0x98')]['name'],_[_0x4a42('0x6a')](_0x6fbf76[_0x4a42('0x3a')])?'':_0x6fbf76[_0x4a42('0x3a')][_0x4a42('0x10d')]()||'',_0x6fbf76[_0x4a42('0x10f')]>0x0?_0x1e37de[_0x4a42('0xe3')][_0x4a42('0xe4')][_0x4a42('0x10e')](_0x6fbf76[_0x4a42('0x10f')]):_0x1e37de[_0x4a42('0xe3')][_0x4a42('0xe4')]);var _0x30516f=_0x59d692[_0x4a42('0x97')](_0x6fbf76[_0x4a42('0x54')])?ut[_0x4a42('0x110')](_0x6fbf76['Trunk'][_0x4a42('0x56')],_0x6fbf76[_0x4a42('0x38')],_0x6fbf76['dialRandomLastDigitCallerIdNumber']>0x0?ut[_0x4a42('0x111')](_0x6fbf76[_0x4a42('0x39')],_0x6fbf76['dialRandomLastDigitCallerIdNumber']):_0x6fbf76[_0x4a42('0x39')]):ut[_0x4a42('0x110')](_[_0x4a42('0x6a')](_0x6fbf76[_0x4a42('0x98')])?_0x6fbf76[_0x4a42('0x54')][_0x4a42('0x56')]:_0x6fbf76[_0x4a42('0x98')]['callerid'],_0x6fbf76[_0x4a42('0x38')],_0x6fbf76[_0x4a42('0x112')]>0x0?ut['getCallerIdRandom'](_0x6fbf76[_0x4a42('0x39')],_0x6fbf76[_0x4a42('0x112')]):_0x6fbf76[_0x4a42('0x39')]);if(_0x30516f){_0x4dee1b[_0x4a42('0x113')]=ut[_0x4a42('0x114')](_0x30516f);_0x4dee1b[_0x4a42('0x115')]=ut[_0x4a42('0x116')](_0x30516f);}var _0x11999a=ut[_0x4a42('0x117')](_0x6fbf76,_0x1e37de,_0xa0fe68,_0x30516f,_0x506a71,_0x4dee1b);_[_0x4a42('0x118')](_0x4dee1b,ut[_0x4a42('0x119')](_0x11999a));_0x4dee1b[_0x4a42('0x88')]=moment()[_0x4a42('0x58')](_0x4a42('0x89'));ami[_0x4a42('0x75')](ut[_0x4a42('0x11a')](_0x4dee1b,_0x6fbf76,_0x11999a,_0x4dee1b['activeContact'],_0x5584f3))[_0x4a42('0x85')](function(_0x4ea18b){_0x6fbf76[_0x4a42('0x4d')]+=0x1;logger[_0x4a42('0x7c')](_0x4a42('0x11b'),_0x506a71,_0x4a42('0xb2'),_0x6fbf76[_0x4a42('0x29')],'originated:\x20',_0x6fbf76[_0x4a42('0x4d')]);_0x28661d(_0x4ea18b);})[_0x4a42('0x77')](function(_0x2b1773){ut[_0x4a42('0xdb')](_0x4dee1b,0xe,_0x4a42('0x11c'));rpcDb[_0x4a42('0xdd')](_0x4dee1b,'[originateFailure][logOriginateFailure]');_0x4ebfdf(_0x2b1773);});});};Preview[_0x4a42('0xf')][_0x4a42('0x20')]=function(_0x4dd894){if(this[_0x4a42('0x15')][_0x4dd894[_0x4a42('0xb3')]]){this[_0x4a42('0x15')][_0x4dd894[_0x4a42('0xb3')]]['channel']=_0x4dd894[_0x4a42('0x76')];}};Preview[_0x4a42('0xf')][_0x4a42('0x19')]=function(_0x2539ee){var _0x435cb0=this;var _0x252a82=this[_0x4a42('0x15')][_0x2539ee[_0x4a42('0x11d')]];if(_0x252a82){if(_0x252a82[_0x4a42('0x11e')]&&this[_0x4a42('0x16')][_0x252a82[_0x4a42('0x11e')]]){ut[_0x4a42('0x11f')](_0x252a82,this['agents'][_0x252a82[_0x4a42('0x11e')]][_0x4a42('0x29')],this['agents'][_0x252a82[_0x4a42('0x11e')]]['id']);}var _0x1dcb95=_[_0x4a42('0x120')](_0x252a82);_0x1dcb95[_0x4a42('0xa3')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');var _0x1d7c96=_0x435cb0[_0x4a42('0x12')][_0x252a82[_0x4a42('0x6c')]];if(ut[_0x4a42('0x121')](_0x2539ee[_0x4a42('0x122')])){if(_0x252a82[_0x4a42('0xbb')]){rpcDb[_0x4a42('0xcc')](_0x252a82['idContact']);}if(_0x252a82[_0x4a42('0xbc')]){rpcDb[_0x4a42('0xcd')](_0x252a82[_0x4a42('0xce')]);}ami[_0x4a42('0x28')]('custom:agentringnoanswer',ut['buildObj'](_0x252a82,'rejected'));this[_0x4a42('0xd7')](_0x1dcb95,_0x1d7c96,_0x2539ee);}else{_0x252a82[_0x4a42('0x88')]=moment()[_0x4a42('0x58')](_0x4a42('0x89'));ut[_0x4a42('0xdb')](_0x1dcb95,0x4,'Answer');rpcDb[_0x4a42('0xdd')](_0x1dcb95,_0x4a42('0x123'));}}};Preview['prototype'][_0x4a42('0x1c')]=function(_0xe48d2a){var _0x33a0aa=this;var _0x19b98a=this[_0x4a42('0x15')][_0xe48d2a[_0x4a42('0xb3')]];var _0x2e6705;if(_0x19b98a){_0x2e6705=this[_0x4a42('0x12')][_0x19b98a['queue']];logger[_0x4a42('0x7c')](_0x4a42('0x124'),_0xe48d2a[_0x4a42('0xb3')],_0x4a42('0xb2'),_0x2e6705[_0x4a42('0x29')],_0x4a42('0x6f'),_0x2e6705['pTalking']);}if(this[_0x4a42('0x15')][_0xe48d2a[_0x4a42('0xb3')]]&&_0xe48d2a[_0x4a42('0xb3')]!==_0xe48d2a[_0x4a42('0xa5')]){if(_0xe48d2a[_0x4a42('0x125')]==='16'&&this['actions'][_0xe48d2a['linkedid']][_0x4a42('0x70')]){this[_0x4a42('0x9b')](_0xe48d2a,_0xe48d2a[_0x4a42('0xb3')],_0xe48d2a[_0x4a42('0x125')]);}else if(this[_0x4a42('0x15')][_0xe48d2a[_0x4a42('0xb3')]][_0x4a42('0x70')]){logger[_0x4a42('0x7c')](_0x4a42('0x126'),_0xe48d2a[_0x4a42('0xb3')],_0xe48d2a[_0x4a42('0x125')],_0x4a42('0xb2'),_0x2e6705['name'],'pTalking:\x20',_0x2e6705[_0x4a42('0x2e')]);this[_0x4a42('0x9b')](_0xe48d2a,_0xe48d2a[_0x4a42('0xb3')],_0xe48d2a['cause']);}}else if(_0x19b98a&&_['isNil'](_0x19b98a[_0x4a42('0x127')])&&_0x2e6705[_0x4a42('0x128')]&&_0xe48d2a['linkedid']===_0xe48d2a[_0x4a42('0xa5')]&&_[_0x4a42('0x6a')](_0xe48d2a[_0x4a42('0xda')])&&_0xe48d2a[_0x4a42('0x125')]==='16'&&_0xe48d2a[_0x4a42('0x129')]==='6'&&_[_0x4a42('0xd8')](_0x19b98a[_0x4a42('0x12a')])){if(_0x19b98a['unlockAgent']){rpcDb[_0x4a42('0xcc')](_0x19b98a[_0x4a42('0xce')]);}if(_0x19b98a[_0x4a42('0xbc')]){rpcDb[_0x4a42('0xcd')](_0x19b98a[_0x4a42('0xce')]);}_0xe48d2a[_0x4a42('0xda')]='22';this[_0x4a42('0xd7')](_0x19b98a,_0x2e6705,_0xe48d2a);}else if(_0x19b98a&&_0x19b98a[_0x4a42('0x12a')]){if(_0xe48d2a[_0x4a42('0x125')]==='16'&&this[_0x4a42('0x15')][_0xe48d2a[_0x4a42('0xb3')]][_0x4a42('0x70')]){logger[_0x4a42('0x7c')](_0x4a42('0x12b'),_0xe48d2a['linkedid'],_0xe48d2a[_0x4a42('0x125')],_0x4a42('0xb2'),_0x2e6705[_0x4a42('0x29')],_0x4a42('0x6f'),_0x2e6705[_0x4a42('0x2e')]);this['callProgressDetectingCustomer'](_0xe48d2a,_0xe48d2a[_0x4a42('0xb3')],_0xe48d2a[_0x4a42('0x125')]);}else if(this[_0x4a42('0x15')][_0xe48d2a[_0x4a42('0xb3')]][_0x4a42('0x70')]){logger[_0x4a42('0x7c')](_0x4a42('0x126'),_0xe48d2a[_0x4a42('0xb3')],_0xe48d2a[_0x4a42('0x125')],_0x4a42('0xb2'),_0x2e6705[_0x4a42('0x29')],_0x4a42('0x6f'),_0x2e6705[_0x4a42('0x2e')]);this[_0x4a42('0x9b')](_0xe48d2a,_0xe48d2a[_0x4a42('0xb3')],_0xe48d2a[_0x4a42('0x125')]);}}};Preview[_0x4a42('0xf')][_0x4a42('0x12c')]=function(_0x1c7d6d){if(this[_0x4a42('0x15')][_0x1c7d6d['destlinkedid']]&&_0x1c7d6d[_0x4a42('0xd6')]!==_0x1c7d6d[_0x4a42('0x12d')]){this[_0x4a42('0x9b')](_0x1c7d6d,_0x1c7d6d[_0x4a42('0xd6')],_0x1c7d6d[_0x4a42('0xd1')]);}};Preview['prototype'][_0x4a42('0x1e')]=function(_0x47ec43){if(this[_0x4a42('0x15')][_0x47ec43['linkedid']]&&_0x47ec43[_0x4a42('0xb3')]!==_0x47ec43[_0x4a42('0xa5')]&&!this[_0x4a42('0x15')][_0x47ec43[_0x4a42('0xb3')]]['dialAnswer']){if(_0x47ec43[_0x4a42('0x125')]==='1'){this[_0x4a42('0x9b')](_0x47ec43,_0x47ec43[_0x4a42('0xb3')],_0x47ec43[_0x4a42('0x125')]);}}};Preview['prototype']['addVariable']=function(_0x5332f3,_0xd0141c,_0x47c1b0){if(this[_0x4a42('0x15')][_0x5332f3]){if(_[_0x4a42('0x6a')](this[_0x4a42('0x15')][_0x5332f3][_0x4a42('0x12e')])){this[_0x4a42('0x15')][_0x5332f3][_0x4a42('0x12e')]={};}this[_0x4a42('0x15')][_0x5332f3][_0x4a42('0x12e')][_0xd0141c]=_0x47c1b0;}};Preview[_0x4a42('0xf')][_0x4a42('0x22')]=function(_0x1b5b91){try{if(!_['isNil'](_0x1b5b91)){if(ut[_0x4a42('0x12f')](_[_0x4a42('0x130')](_0x1b5b91[_0x4a42('0x131')])[0x0])){this[_0x4a42('0x132')](_0x1b5b91[_0x4a42('0xa5')],_['keys'](_0x1b5b91[_0x4a42('0x131')])[0x0],_0x1b5b91[_0x4a42('0x133')]);}}}catch(_0x3f4d10){logger[_0x4a42('0x134')](_0x4a42('0x135'),util[_0x4a42('0x136')](_0x3f4d10,{'showHidden':![],'depth':null}));}};Preview[_0x4a42('0xf')]['syncAttendedTransfer']=function(_0x591953){if(_0x591953){if(this[_0x4a42('0x15')][_0x591953['transfertargetlinkedid']]){this[_0x4a42('0x15')][_0x591953[_0x4a42('0x137')]][_0x4a42('0x12a')]=!![];}}};Preview[_0x4a42('0xf')][_0x4a42('0x26')]=function(_0x1971d6){if(_0x1971d6){if(this[_0x4a42('0x15')][_0x1971d6[_0x4a42('0x138')]]){this[_0x4a42('0x15')][_0x1971d6[_0x4a42('0x138')]][_0x4a42('0x12a')]=!![];}}};module[_0x4a42('0x139')]=Preview;
\ No newline at end of file
+var _0x3c91=['uniqueid','\x20Queue','connect','custom:agentConnectPreview','buildAcw','custom:agentcomplete','buildObj','complete','decrementTalkink','Answer','[callProgressDetectingCustomer][logAnswer]','[callProgressDetectingCustomer][logAnswerGlobal]','talktime','[syncHangup][talking][decrement]','BUSY','countbusyretry','[callProgressDetectingCustomer][logBusy]','Global','rescheduleContact','scheduledAt','NOANSWER','countnoanswerretry','NoAnswer','[callProgressDetectingCustomer][logNoAnswer]','[callProgressDetectingCustomer][logNoAnswerGlobal]','unlockAgent','activeContact','CONGESTION','[callProgressDetectingCustomer][logCongestion]','[callProgressDetectingCustomer][logCongestionGlobal]','countcongestionretry','AgentReject','[syncHangupRequest][logAgentReject]','idContact','disableContact','[default]','cause-txt','dialstatus','[callProgressDetectingCustomer][logUnknown]','[callProgressDetectingCustomer][logUnknownGlobal]','[callProgressDetectingCustomer]','info','[originated][decrement][callProgressDetectingCustomer]','destlinkedid','isUndefined','object','logAgent','createAgentHistory','[callProgressDetectingAgent][logNoSuch]','[callProgressDetectingAgent][logNoAnswer]','Busy','[callProgressDetectingAgent][logBusy]','Congestion','[callProgressDetectingAgent][logCongestion]','AnswerAGI','[callProgressDetectingAgent][logAnswerAGI]','reason','[originated][decrement][callProgressDetectingAgent]','checkInBlack','Contact','phone','Contact\x20is\x20undefined','lookAgent','isEmpty','execCall','[Preview][execCall][success]','Queue:\x20','custom:agentcalled','called','Calling','[Preview][execCall][failure]','Call\x20failed','logBlacklist','createHistory','Contact\x20in\x20black\x20List','SIP/%s','reachable','unmonitored','run','unlock','unlockContact','execRun','getContactPreview','recallme','validateContact','isValid','checkIsBlackList','[Preview][checkIsBlackList]','Call\x20unsuccessful','Agent','Empty\x20Contact','[Preview][validateContact][Empty\x20Campaign]','Empty\x20Campaign','[Preview][validateContact][Trunk\x20not\x20work]','campaign\x20Name:\x20','\x20Trunk\x20Backup\x20is\x20not\x20active','Trunk\x20not\x20work','\x20Not\x20Active','Is\x20Valid','SIP/%s/%s%s','trim','dialCutDigit','substring','callerid','dialRandomLastDigitCallerIdNumber','dialOriginateCallerIdNumber','getCallerId','getCallerIdRandom','originatecalleridname','originatecalleridnum','extractCalleridNumber','toLowerVariables','[originated][increment]','OriginateError','[originateFailure][logOriginateFailure]','syncOriginateResponse','actionid','logLookAgent','clone','response','custom:agentringnoanswer','callProgressDetectingAgent','[syncHangup][talking]','cause','[syncHangup][talking][cause]','dialQueueProject','channelstate','[syncHangup][talking][transfer]','destuniqueid','variables','keys','variable','addVariable','value','error','transfertargetlinkedid','transfer','syncBlindTransfer','transfererlinkedid','exports','uuid','md5','../../../config/logger','preview','actionPreview','./action','redis','defaults','localhost','socket.io-emitter','prototype','enqueue','tail','finally','campaignsPreview','voiceQueues','trunks','actions','agents','clockClearZombieChannels','originateresponse','bind','hangup','syncHangup','syncHangupRequest','dialend','syncDialEnd','syncNewExten','varset','syncVarSet','attendedtransfer','syncAttendedTransfer','loopCampaigns','emit','type','outbound','name','strategy','answered','available','loggedIn','pTalking','sumBillable','sumDuration','sumHoldTime','talking','total','unmanaged','waiting','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundRejectCallsDay','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalHitRate','predictiveIntervalMultiplicativeFactor','predictiveIntervalAvailable','predictiveIntervalTotalCalls','message','originated','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','startPredictive','startProgressive','Trunk','active','Interval','format','voice:queue:%s','voice_queue_channel:remove','sendMessageOneNotActive','paused','[CampaignPreview]\x20Campaign\x20Queue:\x20','\x20is\x20not\x20active','IS_DISACTIVED','logger','\x20is\x20disactive','syncCampaigns','hasOwnProperty','booked','clearZombieChannels','setMessage','recallMe','sequence','isNil','[clearZombieChannels][talking]','Queue','queue','originated:\x20','stringify','pTalking:\x20','pick','contactId','VoiceQueueId','ListId','Action','status','channel','catch','No\x20such\x20channel','updateOriginated','dialAnswer','[clearZombieChannel]','loggerError','[Dialer][checkChannel][pTalking][Preview]','[Dialer][checkChannel][Preview]','[action]','size','clearZombieChannel','getContactRecallMe','agentReadyId','then','length','getDiff','scheduledat','dialRecallMeTimeout','[RecallMe]','logger2','starttime','outboundReCallsDay','logCustomer','rescheduleContactInQueue','createBody','[HistoryDialRecallInQueue][historyCatch]','RecallFailedTimeout','createCustomerHistory','[HistoryRecallClose]','createCustomerFinal','IsNotLoggedIn','AGENTS_NOT_LOGGED','isActive','NOT_ACTIVE','isTrunkReachable','TrunkBackup','ACTIVE','callProgressDetectingCustomer','countglobal','NoSuchNumber','[callProgressDetectingCustomer][logNoSuch]','totalGlobal','dialGlobalMaxRetry','cloneAction','[callProgressDetectingCustomer][logNoSuchGlobal]','linkedid','ANSWER','YYYY-MM-DD\x20HH:mm:ss','responsetime','answertime'];(function(_0x1ad68,_0x17bb38){var _0x34e760=function(_0x165b33){while(--_0x165b33){_0x1ad68['push'](_0x1ad68['shift']());}};_0x34e760(++_0x17bb38);}(_0x3c91,0x8c));var _0x13c9=function(_0x40c547,_0x4638bc){_0x40c547=_0x40c547-0x0;var _0x4c67bf=_0x3c91[_0x40c547];return _0x4c67bf;};'use strict';var util=require('util');var _=require('lodash');var BPromise=require('bluebird');var uuid=require(_0x13c9('0x0'));var moment=require('moment');var md5=require(_0x13c9('0x1'));var Redis=require('ioredis');var config=require('../../../config/environment');var logger=require(_0x13c9('0x2'))(_0x13c9('0x3'));var loggerAction=require(_0x13c9('0x2'))(_0x13c9('0x4'));var ami=require('../ami');var rpcDb=require('./rpcDb');var Action=require(_0x13c9('0x5'));var ut=require('./util/util');config[_0x13c9('0x6')]=_[_0x13c9('0x7')](config[_0x13c9('0x6')],{'host':_0x13c9('0x8'),'port':0x18eb});var io=require(_0x13c9('0x9'))(new Redis(config[_0x13c9('0x6')]));var Sequence=function(){};Sequence[_0x13c9('0xa')][_0x13c9('0xb')]=function(_0x56c60f){this[_0x13c9('0xc')]=this['tail']?this[_0x13c9('0xc')][_0x13c9('0xd')](_0x56c60f):_0x56c60f();};function Preview(_0x186974){this['sequence']=new Sequence();this[_0x13c9('0xe')]=_0x186974[_0x13c9('0xf')];this[_0x13c9('0x10')]=_0x186974['trunks'];this[_0x13c9('0x11')]={};this[_0x13c9('0x12')]=_0x186974[_0x13c9('0x12')];this[_0x13c9('0x13')]=0x0;ami['on'](_0x13c9('0x14'),this['syncOriginateResponse'][_0x13c9('0x15')](this));ami['on'](_0x13c9('0x16'),this[_0x13c9('0x17')]['bind'](this));ami['on']('hanguprequest',this[_0x13c9('0x18')][_0x13c9('0x15')](this));ami['on'](_0x13c9('0x19'),this[_0x13c9('0x1a')]['bind'](this));ami['on']('newexten',this[_0x13c9('0x1b')][_0x13c9('0x15')](this));ami['on'](_0x13c9('0x1c'),this[_0x13c9('0x1d')]['bind'](this));ami['on'](_0x13c9('0x1e'),this[_0x13c9('0x1f')][_0x13c9('0x15')](this));ami['on']('blindtransfer',this['syncBlindTransfer'][_0x13c9('0x15')](this));this[_0x13c9('0x20')](this[_0x13c9('0xe')]);}function emit(_0x57835c,_0xc7a003,_0x5815b5){io['to'](_0x57835c)[_0x13c9('0x21')](_0xc7a003,_0x5815b5);}function emitCampaignPreview(_0x46960a){if(_0x46960a[_0x13c9('0x22')]===_0x13c9('0x23')){var _0x2865c9={'id':_0x46960a['id'],'name':_0x46960a[_0x13c9('0x24')],'strategy':_0x46960a[_0x13c9('0x25')],'answered':_0x46960a[_0x13c9('0x26')],'available':_0x46960a[_0x13c9('0x27')],'loggedIn':_0x46960a[_0x13c9('0x28')],'pTalking':_0x46960a[_0x13c9('0x29')],'sumBillable':_0x46960a[_0x13c9('0x2a')],'sumDuration':_0x46960a[_0x13c9('0x2b')],'sumHoldTime':_0x46960a[_0x13c9('0x2c')]||0x0,'talking':_0x46960a[_0x13c9('0x2d')],'total':_0x46960a[_0x13c9('0x2e')],'type':_0x46960a[_0x13c9('0x22')],'unmanaged':_0x46960a[_0x13c9('0x2f')],'abandoned':_0x46960a['abandoned'],'waiting':_0x46960a[_0x13c9('0x30')],'loggedInDb':_0x46960a[_0x13c9('0x31')],'dialActive':_0x46960a[_0x13c9('0x32')],'dialMethod':_0x46960a[_0x13c9('0x33')],'dialOriginateCallerIdName':_0x46960a[_0x13c9('0x34')],'dialOriginateCallerIdNumber':_0x46960a['dialOriginateCallerIdNumber'],'dialOriginateTimeout':_0x46960a[_0x13c9('0x35')],'dialPrefix':_0x46960a[_0x13c9('0x36')],'outboundAnswerAgiCallsDay':_0x46960a[_0x13c9('0x37')],'outboundAnswerCallsDay':_0x46960a['outboundAnswerCallsDay'],'outboundBlacklistCallsDay':_0x46960a[_0x13c9('0x38')],'outboundBusyCallsDay':_0x46960a[_0x13c9('0x39')],'outboundCongestionCallsDay':_0x46960a[_0x13c9('0x3a')],'outboundDropCallsDayACS':_0x46960a['outboundDropCallsDayACS'],'outboundDropCallsDayCallersExit':_0x46960a['outboundDropCallsDayCallersExit'],'outboundDropCallsDayTimeout':_0x46960a[_0x13c9('0x3b')],'outboundNoAnswerCallsDay':_0x46960a[_0x13c9('0x3c')],'outboundNoSuchCallsDay':_0x46960a[_0x13c9('0x3d')],'outboundOriginateFailureCallsDay':_0x46960a[_0x13c9('0x3e')],'outboundReCallsDay':_0x46960a['outboundReCallsDay'],'outboundRejectCallsDay':_0x46960a[_0x13c9('0x3f')],'outboundUnknownCallsDay':_0x46960a['outboundUnknownCallsDay'],'predictiveIntervalAnsweredCalls':_0x46960a['predictiveIntervalAnsweredCalls'],'predictiveIntervalAvgHoldtime':_0x46960a['predictiveIntervalAvgHoldtime'],'predictiveIntervalAvgTalktime':_0x46960a['predictiveIntervalAvgTalktime'],'predictiveIntervalDroppedCallsCallersExit':_0x46960a[_0x13c9('0x40')],'predictiveIntervalDroppedCallsTimeout':_0x46960a[_0x13c9('0x41')],'predictiveIntervalErlangCalls':_0x46960a[_0x13c9('0x42')],'predictiveIntervalErlangCallsDroppedCalls':_0x46960a['predictiveIntervalErlangCallsDroppedCalls'],'predictiveIntervalHitRate':_0x46960a[_0x13c9('0x43')],'predictiveIntervalMultiplicativeFactor':_0x46960a[_0x13c9('0x44')],'predictiveIntervalPauses':_0x46960a['predictiveIntervalPauses'],'predictiveIntervalAvailable':_0x46960a[_0x13c9('0x45')],'predictiveIntervalTotalCalls':_0x46960a[_0x13c9('0x46')],'message':_0x46960a[_0x13c9('0x47')],'originated':_0x46960a[_0x13c9('0x48')],'erlangCalls':_0x46960a[_0x13c9('0x49')],'erlangCallToSecond':_0x46960a[_0x13c9('0x4a')],'erlangAbandonmentRate':_0x46960a[_0x13c9('0x4b')],'erlangBusyFactor':_0x46960a['erlangBusyFactor'],'startPredictive':_0x46960a[_0x13c9('0x4c')],'startProgressive':_0x46960a[_0x13c9('0x4d')]};if(_0x46960a[_0x13c9('0x4e')]){_0x2865c9['Trunk']={'id':_0x46960a[_0x13c9('0x4e')]['id'],'name':_0x46960a['Trunk']['name'],'active':_0x46960a['Trunk'][_0x13c9('0x4f')],'callerid':_0x46960a[_0x13c9('0x4e')]['callerid']};}if(_0x46960a[_0x13c9('0x50')]){_0x2865c9[_0x13c9('0x50')]={'id':_0x46960a['Interval']['id'],'name':_0x46960a[_0x13c9('0x50')][_0x13c9('0x24')]};}var _0x14323f=md5(JSON['stringify'](_0x2865c9));if(_0x46960a[_0x13c9('0x1')]!==_0x14323f){_0x46960a[_0x13c9('0x1')]=_0x14323f;emit(util[_0x13c9('0x51')](_0x13c9('0x52'),_0x2865c9[_0x13c9('0x24')]),'voice_queue:save',_0x2865c9);}}}function emitVoiceQueueChannelRemove(_0x4469af){emit(util[_0x13c9('0x51')](_0x13c9('0x52'),_0x4469af[_0x13c9('0x24')]),_0x13c9('0x53'),_0x4469af);}function notSendMessagesQueue(_0x2b6b68){if(_0x2b6b68[_0x13c9('0x54')]){if(_0x2b6b68[_0x13c9('0x48')]===0x0&&_0x2b6b68[_0x13c9('0x29')]===0x0){_0x2b6b68[_0x13c9('0x54')]=![];_0x2b6b68['available']=0x0;_0x2b6b68[_0x13c9('0x55')]=0x0;_0x2b6b68['message']='NOT_ACTIVE';ut['logger'](_0x13c9('0x56'),_0x2b6b68[_0x13c9('0x24')]+_0x13c9('0x57'));}else{_0x2b6b68[_0x13c9('0x47')]=_0x13c9('0x58');ut[_0x13c9('0x59')](_0x13c9('0x56'),_0x2b6b68[_0x13c9('0x24')]+_0x13c9('0x5a'));}emitCampaignPreview(_0x2b6b68);}}Preview[_0x13c9('0xa')][_0x13c9('0x20')]=function(){var _0x1d94dd=this;setInterval(function(){_0x1d94dd[_0x13c9('0x5b')]();},0x7cf);};Preview[_0x13c9('0xa')][_0x13c9('0x5b')]=function(){var _0x1c670b=this[_0x13c9('0xe')];this[_0x13c9('0x13')]+=0x1;for(var _0x243dd2 in _0x1c670b){if(_0x1c670b[_0x13c9('0x5c')](_0x243dd2)&&(_0x1c670b[_0x243dd2][_0x13c9('0x33')]===_0x13c9('0x3')||_0x1c670b[_0x243dd2][_0x13c9('0x33')]===_0x13c9('0x5d'))&&_0x1c670b[_0x243dd2][_0x13c9('0x22')]===_0x13c9('0x23')){if(this[_0x13c9('0x13')]>0x7){this[_0x13c9('0x13')]=0x0;this[_0x13c9('0x5e')]();}}if(_0x1c670b[_0x13c9('0x5c')](_0x243dd2)&&_0x1c670b[_0x243dd2][_0x13c9('0x33')]===_0x13c9('0x3')&&_0x1c670b[_0x243dd2]['type']==='outbound'){if(_0x1c670b[_0x243dd2]['dialActive']){this[_0x13c9('0x5f')](_0x1c670b[_0x243dd2]);this[_0x13c9('0x60')](_0x1c670b[_0x243dd2]);}else{notSendMessagesQueue(_0x1c670b[_0x243dd2]);}}}};Preview[_0x13c9('0xa')]['clearZombieChannel']=function(_0x41aac4){var _0x461d88=this;this[_0x13c9('0x61')][_0x13c9('0xb')](function(){if(!_[_0x13c9('0x62')](_0x461d88[_0x13c9('0x11')][_0x41aac4])){loggerAction['info'](_0x13c9('0x63'),_0x41aac4,_0x13c9('0x64'),_0x461d88['actions'][_0x41aac4][_0x13c9('0x65')],_0x13c9('0x66'),JSON[_0x13c9('0x67')](_0x461d88['campaignsPreview'][_0x461d88[_0x13c9('0x11')][_0x41aac4][_0x13c9('0x65')]][_0x13c9('0x48')]),_0x13c9('0x68'),JSON['stringify'](_0x461d88['campaignsPreview'][_0x461d88[_0x13c9('0x11')][_0x41aac4]['queue']]['pTalking']),JSON['stringify'](_0x461d88[_0x13c9('0x11')][_0x41aac4]['dialAnswer']),JSON[_0x13c9('0x67')](_[_0x13c9('0x69')](_0x461d88[_0x13c9('0x11')][_0x41aac4],[_0x13c9('0x6a'),'UserId',_0x13c9('0x6b'),_0x13c9('0x6c')])));return ami[_0x13c9('0x6d')]({'action':_0x13c9('0x6e'),'channel':_0x461d88[_0x13c9('0x11')][_0x41aac4][_0x13c9('0x6f')]})[_0x13c9('0x70')](function(_0x3fb4e7){if(_0x3fb4e7[_0x13c9('0x47')]===_0x13c9('0x71')){setTimeout(function(){if(_0x461d88[_0x13c9('0x11')][_0x41aac4]){ut[_0x13c9('0x72')](_0x461d88['campaignsPreview'][_0x461d88[_0x13c9('0x11')][_0x41aac4][_0x13c9('0x65')]],'[clearZombieChannel]');if(_0x461d88[_0x13c9('0x11')][_0x41aac4][_0x13c9('0x73')]===!![]){ut['decrementTalkink'](_0x461d88[_0x13c9('0xe')][_0x461d88[_0x13c9('0x11')][_0x41aac4][_0x13c9('0x65')]],_0x13c9('0x74'));ut[_0x13c9('0x75')](_0x13c9('0x76')+_0x41aac4,_0x461d88[_0x13c9('0x11')][_0x41aac4][_0x13c9('0x65')]);}ut[_0x13c9('0x75')](_0x13c9('0x77')+_0x41aac4,_0x461d88[_0x13c9('0x11')][_0x41aac4]['queue']);delete _0x461d88[_0x13c9('0x11')][_0x41aac4];}},0x2328);}});}});};Preview[_0x13c9('0xa')][_0x13c9('0x5e')]=function(){var _0x3b1ea3=this;loggerAction['info'](_0x13c9('0x78'),_[_0x13c9('0x79')](this['actions']));for(var _0x4d589f in this[_0x13c9('0x11')]){if(_0x3b1ea3[_0x13c9('0x11')][_0x13c9('0x5c')](_0x4d589f)){_0x3b1ea3[_0x13c9('0x7a')](_0x4d589f);}}};Preview[_0x13c9('0xa')][_0x13c9('0x60')]=function(_0x4be6b7){var _0xf26085=this;rpcDb[_0x13c9('0x7b')](_0x4be6b7['id'],ut[_0x13c9('0x7c')](this[_0x13c9('0x12')]))[_0x13c9('0x7d')](function(_0x2019c4){if(!_[_0x13c9('0x62')](_0x2019c4)){for(var _0x28e1db=0x0;_0x28e1db<_0x2019c4[_0x13c9('0x7e')];_0x28e1db+=0x1){if(ut[_0x13c9('0x7f')](_0x2019c4[_0x28e1db][_0x13c9('0x80')])<_0x4be6b7[_0x13c9('0x81')]*0x3c){_0xf26085['run'](_0x2019c4[_0x28e1db]['id'])[_0x13c9('0x7d')](ut['logger2'](_0x13c9('0x82')))[_0x13c9('0x70')](ut[_0x13c9('0x83')](_0x13c9('0x82')));}else{var _0x4a8253=new Action(_0x2019c4[_0x28e1db],_0x4be6b7);_0x4a8253[_0x13c9('0x84')]=moment()[_0x13c9('0x51')]('YYYY-MM-DD\x20HH:mm:ss');_0x4be6b7[_0x13c9('0x85')]+=0x1;ut[_0x13c9('0x86')](_0x4a8253,0x17,'RecallInQueue');if(_0x4be6b7['dialRecallInQueue']){rpcDb[_0x13c9('0x87')](ut[_0x13c9('0x88')](_0x2019c4[_0x28e1db]));rpcDb['createCustomerHistory'](_0x4a8253,_0x13c9('0x89'));}else{ut[_0x13c9('0x86')](_0x4a8253,0x16,_0x13c9('0x8a'));rpcDb[_0x13c9('0x8b')](_0x4a8253,_0x13c9('0x8c'));rpcDb[_0x13c9('0x8d')](_0x4a8253,'[HistoryRecallClose]');}}}}})[_0x13c9('0x70')](ut[_0x13c9('0x83')]('[getContactRecallMe]'));};Preview['prototype'][_0x13c9('0x5f')]=function(_0x2c8c29){_0x2c8c29['sendMessageOneNotActive']=!![];if(ut[_0x13c9('0x8e')](_0x2c8c29[_0x13c9('0x28')])){_0x2c8c29[_0x13c9('0x47')]=_0x13c9('0x8f');}else if(!ut[_0x13c9('0x90')](_0x2c8c29[_0x13c9('0x32')])){_0x2c8c29[_0x13c9('0x47')]=_0x13c9('0x91');}else if(!this[_0x13c9('0x92')](_0x2c8c29[_0x13c9('0x4e')])){if(!this[_0x13c9('0x92')](_0x2c8c29[_0x13c9('0x93')])){_0x2c8c29['message']='TRUNK_IS_NOT_REACHABLE';}else{_0x2c8c29[_0x13c9('0x47')]=_0x13c9('0x94');}}else{_0x2c8c29[_0x13c9('0x47')]='ACTIVE';}emitCampaignPreview(_0x2c8c29);};Preview[_0x13c9('0xa')][_0x13c9('0x95')]=function(_0x48b92e,_0x33a748,_0x5ca153){var _0x48fb9a=this;var _0x431c5b=this[_0x13c9('0x11')][_0x33a748];var _0xbb8567=this[_0x13c9('0xe')][_0x431c5b[_0x13c9('0x65')]];var _0x39572f;if(_0xbb8567){switch(_0x5ca153){case'1':_0xbb8567[_0x13c9('0x3d')]+=0x1;_0x431c5b[_0x13c9('0x96')]=ut['totalGlobal'](_0x431c5b);ut['logCustomer'](_0x431c5b,0x0,_0x13c9('0x97'));rpcDb[_0x13c9('0x8b')](_0x431c5b,_0x13c9('0x98'));if(ut[_0x13c9('0x99')](_0x431c5b)>=_0xbb8567[_0x13c9('0x9a')]){_0x39572f=ut[_0x13c9('0x9b')](_0x431c5b,0xf,'Global');rpcDb[_0x13c9('0x8d')](_0x39572f,_0x13c9('0x9c'));}else{rpcDb[_0x13c9('0x8d')](_0x431c5b,_0x13c9('0x9c'));}delete this['actions'][_0x48b92e[_0x13c9('0x9d')]];break;case _0x13c9('0x9e'):var _0x303e3d=moment()['format'](_0x13c9('0x9f'));_0x431c5b[_0x13c9('0xa0')]=_0x303e3d;_0x431c5b[_0x13c9('0xa1')]=_0x303e3d;_0x431c5b[_0x13c9('0x73')]=!![];_0xbb8567['pTalking']+=0x1;logger['info']('[syncHangup][talking][increment]',_0x431c5b[_0x13c9('0xa2')],_0x13c9('0xa3'),_0xbb8567[_0x13c9('0x24')],'pTalking:\x20',_0xbb8567[_0x13c9('0x29')]);ami[_0x13c9('0x21')]('custom:agentconnect',ut['buildObj'](_0x431c5b,_0x13c9('0xa4')));if(_0xbb8567['acw']){ami[_0x13c9('0x21')](_0x13c9('0xa5'),ut[_0x13c9('0xa6')](_0x431c5b));}break;case'16':ami['emit'](_0x13c9('0xa7'),ut[_0x13c9('0xa8')](_0x431c5b,_0x13c9('0xa9')));emitVoiceQueueChannelRemove(ut[_0x13c9('0xa8')](_0x431c5b,_0x13c9('0xa9')));_0xbb8567['outboundAnswerCallsDay']+=0x1;_0xbb8567[_0x13c9('0x2e')]+=0x1;_0xbb8567[_0x13c9('0x26')]+=0x1;ut[_0x13c9('0xaa')](_0xbb8567,'[16]');_0x431c5b[_0x13c9('0x96')]=ut[_0x13c9('0x99')](_0x431c5b);ut[_0x13c9('0x86')](_0x431c5b,0x4,_0x13c9('0xab'));rpcDb[_0x13c9('0x8b')](_0x431c5b,_0x13c9('0xac'));rpcDb[_0x13c9('0x8d')](_0x431c5b,_0x13c9('0xad'));rpcDb['crateCustomerReportQueue'](_0x431c5b);_0xbb8567[_0x13c9('0x2b')]+=_0x431c5b[_0x13c9('0xae')];_0xbb8567[_0x13c9('0x2a')]+=_0x431c5b[_0x13c9('0xae')];logger['info'](_0x13c9('0xaf'),_0x431c5b[_0x13c9('0xa2')],_0x13c9('0xa3'),_0xbb8567[_0x13c9('0x24')],_0x13c9('0x68'),_0xbb8567[_0x13c9('0x29')]);delete this[_0x13c9('0x11')][_0x48b92e[_0x13c9('0x9d')]];break;case _0x13c9('0xb0'):_0xbb8567[_0x13c9('0x39')]+=0x1;_0x431c5b[_0x13c9('0xb1')]+=0x1;_0x431c5b[_0x13c9('0x96')]=ut[_0x13c9('0x99')](_0x431c5b);ut[_0x13c9('0x86')](_0x431c5b,0x5,'Busy');rpcDb['createCustomerHistory'](_0x431c5b,_0x13c9('0xb2'));if(ut[_0x13c9('0x99')](_0x431c5b)>=_0xbb8567[_0x13c9('0x9a')]){_0x39572f=ut['cloneAction'](_0x431c5b,0xf,_0x13c9('0xb3'));rpcDb[_0x13c9('0x8d')](_0x39572f,'[callProgressDetectingCustomer][logBusyGlobal]');}else{if(_0x431c5b[_0x13c9('0xb1')]>=_0xbb8567['dialBusyMaxRetry']){rpcDb[_0x13c9('0x8d')](_0x431c5b,'[callProgressDetectingCustomer][logBusy]');}else{rpcDb[_0x13c9('0xb4')](ut[_0x13c9('0xb5')](_0x431c5b,_0x13c9('0xb1'),_0xbb8567['dialBusyRetryFrequency']),_0x431c5b['unlockAgent'],_0x431c5b['activeContact']);}}break;case _0x13c9('0xb6'):_0xbb8567['outboundNoAnswerCallsDay']+=0x1;_0x431c5b[_0x13c9('0xb7')]+=0x1;_0x431c5b['countglobal']=ut[_0x13c9('0x99')](_0x431c5b);ut[_0x13c9('0x86')](_0x431c5b,0x3,_0x13c9('0xb8'));rpcDb[_0x13c9('0x8b')](_0x431c5b,_0x13c9('0xb9'));if(ut['totalGlobal'](_0x431c5b)>=_0xbb8567[_0x13c9('0x9a')]){_0x39572f=ut['cloneAction'](_0x431c5b,0xf,'Global');rpcDb['createCustomerFinal'](_0x39572f,_0x13c9('0xba'));}else{if(_0x431c5b[_0x13c9('0xb7')]>=_0xbb8567['dialNoAnswerMaxRetry']){rpcDb[_0x13c9('0x8d')](_0x431c5b,'[callProgressDetectingCustomer][logNoAnswer]');}else{rpcDb['rescheduleContact'](ut[_0x13c9('0xb5')](_0x431c5b,_0x13c9('0xb7'),_0xbb8567['dialNoAnswerRetryFrequency']),_0x431c5b[_0x13c9('0xbb')],_0x431c5b[_0x13c9('0xbc')]);}}break;case _0x13c9('0xbd'):_0xbb8567[_0x13c9('0x3a')]+=0x1;_0x431c5b['countcongestionretry']+=0x1;_0x431c5b[_0x13c9('0x96')]=ut['totalGlobal'](_0x431c5b);ut[_0x13c9('0x86')](_0x431c5b,0x8,'Congestion');rpcDb[_0x13c9('0x8b')](_0x431c5b,_0x13c9('0xbe'));if(ut[_0x13c9('0x99')](_0x431c5b)>=_0xbb8567['dialGlobalMaxRetry']){_0x39572f=ut['cloneAction'](_0x431c5b,0xf,_0x13c9('0xb3'));rpcDb[_0x13c9('0x8d')](_0x39572f,_0x13c9('0xbf'));}else{if(_0x431c5b[_0x13c9('0xc0')]>=_0xbb8567['dialCongestionMaxRetry']){rpcDb['createCustomerFinal'](_0x431c5b,'[callProgressDetectingCustomer][logCongestion]');}else{rpcDb[_0x13c9('0xb4')](ut[_0x13c9('0xb5')](_0x431c5b,_0x13c9('0xc0'),_0xbb8567['dialBusyRetryFrequency']),_0x431c5b['unlockAgent'],_0x431c5b[_0x13c9('0xbc')]);}}break;case'CANCEL':_0xbb8567[_0x13c9('0x3f')]+=0x1;_0x431c5b['countglobal']=ut[_0x13c9('0x99')](_0x431c5b);ut[_0x13c9('0x86')](_0x431c5b,0x14,_0x13c9('0xc1'));rpcDb[_0x13c9('0x8b')](_0x431c5b,_0x13c9('0xc2'));if(_0x431c5b[_0x13c9('0xbb')]){rpcDb['unlockContact'](_0x431c5b[_0x13c9('0xc3')]);}if(_0x431c5b[_0x13c9('0xbc')]){rpcDb[_0x13c9('0xc4')](_0x431c5b[_0x13c9('0xc3')]);}break;default:if(_0x431c5b[_0x13c9('0x73')]){ut[_0x13c9('0xaa')](_0xbb8567,_0x13c9('0xc5'));ut[_0x13c9('0x75')]('[Dialer][decrementTalkink][no\x20Hangup][Preview]'+_0xbb8567[_0x13c9('0x24')],_0x48b92e);}_0xbb8567['outboundUnknownCallsDay']+=0x1;_0x431c5b[_0x13c9('0x96')]=ut['totalGlobal'](_0x431c5b);ut[_0x13c9('0x86')](_0x431c5b,0xc,_0x48b92e[_0x13c9('0xc6')]||_0x48b92e[_0x13c9('0xc7')]);rpcDb['createCustomerHistory'](_0x431c5b,_0x13c9('0xc8'));if(ut[_0x13c9('0x99')](_0x431c5b)>=_0xbb8567[_0x13c9('0x9a')]){_0x39572f=ut[_0x13c9('0x9b')](_0x431c5b,0xf,_0x13c9('0xb3'));rpcDb[_0x13c9('0x8d')](_0x39572f,_0x13c9('0xc9'));}else{rpcDb[_0x13c9('0x8d')](_0x431c5b,'[callProgressDetectingCustomer][logUnknownGlobal]');}delete this[_0x13c9('0x11')][_0x48b92e['linkedid']];}if(!(_0x431c5b['dialAnswer']&&_0x5ca153==='16')){ut['updateOriginated'](_0xbb8567,_0x13c9('0xca'));logger[_0x13c9('0xcb')](_0x13c9('0xcc'),_0x431c5b[_0x13c9('0xa2')],_0x13c9('0xa3'),_0xbb8567[_0x13c9('0x24')],'originated:\x20',_0xbb8567[_0x13c9('0x48')]);}if(_0x5ca153!==_0x13c9('0x9e')){delete this[_0x13c9('0x11')][_0x48b92e[_0x13c9('0x9d')]];delete this[_0x13c9('0x11')][_0x48b92e[_0x13c9('0xcd')]];}}};Preview['prototype']['callProgressDetectingAgent']=function(_0x102f15,_0x926d60,_0x2783af){if(_[_0x13c9('0xce')](_0x926d60)&&_0x13c9('0xcf')!==typeof _0x926d60){return;}if(_[_0x13c9('0xce')](_0x2783af)&&'object'!==typeof _0x2783af){return;}switch(_0x2783af['reason']){case'0':ut[_0x13c9('0xd0')](_0x102f15,0x0,'NoSuchNumber');rpcDb[_0x13c9('0xd1')](_0x102f15,_0x13c9('0xd2'));break;case'3':ut[_0x13c9('0xd0')](_0x102f15,0x3,_0x13c9('0xb8'));rpcDb[_0x13c9('0xd1')](_0x102f15,_0x13c9('0xd3'));break;case'5':ut['logAgent'](_0x102f15,0x5,_0x13c9('0xd4'));rpcDb[_0x13c9('0xd1')](_0x102f15,_0x13c9('0xd5'));break;case'8':ut[_0x13c9('0xd0')](_0x102f15,0x8,_0x13c9('0xd6'));rpcDb[_0x13c9('0xd1')](_0x102f15,_0x13c9('0xd7'));break;case'22':ut[_0x13c9('0xd0')](_0x102f15,0x16,_0x13c9('0xd8'));rpcDb[_0x13c9('0xd1')](_0x102f15,_0x13c9('0xd9'));break;default:ut[_0x13c9('0xd0')](_0x102f15,0xc,_0x2783af[_0x13c9('0xda')]);rpcDb[_0x13c9('0xd1')](_0x102f15,_0x13c9('0xd7'));}ut[_0x13c9('0x72')](_0x926d60,'[callProgressDetectingAgent]');logger[_0x13c9('0xcb')](_0x13c9('0xdb'),_0x102f15['uniqueid'],_0x13c9('0xa3'),_0x926d60[_0x13c9('0x24')],_0x13c9('0x66'),_0x926d60[_0x13c9('0x48')]);delete this[_0x13c9('0x11')][_0x102f15['uniqueid']];};Preview[_0x13c9('0xa')][_0x13c9('0xdc')]=function(_0x15d137,_0x490fff,_0x1f60a0,_0x164f2a,_0x316e12){var _0x2986c9=this;return new BPromise(function(_0x367adb,_0x31b344){if(_['isNil'](_0x490fff)||_[_0x13c9('0x62')](_0x490fff[_0x13c9('0xdd')])||_[_0x13c9('0x62')](_0x490fff['Contact'][_0x13c9('0xde')])||_[_0x13c9('0x62')](_0x490fff[_0x13c9('0x6b')])){_0x31b344(ut[_0x13c9('0x47')](_0x13c9('0xdf'),_0x164f2a,_0x316e12));return;}var _0x528c45=uuid['v4']();var _0x40f953=_0x2986c9[_0x13c9('0xe')][_0x490fff[_0x13c9('0x64')][_0x13c9('0x24')]];var _0x2eecc2=_0x1f60a0?_0x2986c9[_0x13c9('0x12')][_0x1f60a0]['id']:undefined;_0x2986c9[_0x13c9('0x11')][_0x528c45]=new Action(_0x490fff,_0x40f953,_0x528c45,_0x1f60a0,_0x2eecc2);var _0x59e289=_0x2986c9[_0x13c9('0x11')][_0x528c45];_0x59e289[_0x13c9('0xbb')]=_0x164f2a;_0x59e289['activeContact']=_0x316e12;_0x59e289[_0x13c9('0xe0')]=_0x1f60a0;if(_[_0x13c9('0xe1')](_0x15d137)){_0x2986c9[_0x13c9('0xe2')](_0x59e289,_0x40f953,_0x490fff,_0x1f60a0)[_0x13c9('0x7d')](function(_0x285864){logger['info'](_0x13c9('0xe3'),_0x13c9('0xe4')+_0x59e289[_0x13c9('0x65')]+'\x20IdHopper:\x20'+_0x59e289['idContact'],JSON['stringify'](_0x285864));ami[_0x13c9('0x21')](_0x13c9('0xe5'),ut['buildObj'](_0x59e289,_0x13c9('0xe6')));_0x367adb(ut[_0x13c9('0x47')](_0x13c9('0xe7')));})['catch'](function(_0x46167d){ut['logger'](_0x13c9('0xe8'),_0x46167d);_0x31b344(ut['message'](_0x13c9('0xe9'),_0x164f2a,_0x316e12));});}else{_0x40f953[_0x13c9('0x38')]+=0x1;ut[_0x13c9('0xea')](_0x59e289);rpcDb[_0x13c9('0xeb')](_0x59e289,'[Blacklist][error]');delete _0x2986c9[_0x13c9('0x11')][_0x528c45];_0x31b344(ut[_0x13c9('0x47')](_0x13c9('0xec'),_0x164f2a,_0x316e12));}});};Preview[_0x13c9('0xa')][_0x13c9('0x92')]=function(_0x446110){return!_[_0x13c9('0x62')](_0x446110)&&!_[_0x13c9('0x62')](_0x446110[_0x13c9('0x24')])&&!_[_0x13c9('0x62')](_0x446110[_0x13c9('0x4f')])&&_0x446110[_0x13c9('0x4f')]&&!_[_0x13c9('0x62')](this[_0x13c9('0x10')][util[_0x13c9('0x51')](_0x13c9('0xed'),_0x446110[_0x13c9('0x24')])])&&!_[_0x13c9('0x62')](this[_0x13c9('0x10')][util[_0x13c9('0x51')](_0x13c9('0xed'),_0x446110[_0x13c9('0x24')])][_0x13c9('0x6e')])&&(this[_0x13c9('0x10')][util['format'](_0x13c9('0xed'),_0x446110['name'])][_0x13c9('0x6e')]===_0x13c9('0xee')||this[_0x13c9('0x10')][util[_0x13c9('0x51')](_0x13c9('0xed'),_0x446110[_0x13c9('0x24')])][_0x13c9('0x6e')]===_0x13c9('0xef'));};Preview[_0x13c9('0xa')][_0x13c9('0xf0')]=function(_0x23485c,_0x2c3d97){var _0x9388ee=this;return new BPromise(function(_0x43737f,_0x2eb962){_0x9388ee['execRun'](_0x23485c,_0x2c3d97)[_0x13c9('0x7d')](function(_0xc749be){_0x43737f(_['pick'](_0xc749be,[_0x13c9('0x47')]));})[_0x13c9('0x70')](function(_0x5c88ec){if(_0x5c88ec[_0x13c9('0xf1')]){rpcDb[_0x13c9('0xf2')](_0x23485c);}if(_0x5c88ec[_0x13c9('0x4f')]){rpcDb['disableContact'](_0x23485c);}_0x2eb962(_[_0x13c9('0x69')](_0x5c88ec,[_0x13c9('0x47')]));});});};Preview[_0x13c9('0xa')][_0x13c9('0xf3')]=function(_0x7a3452,_0x2b8748){var _0x5a119e=this;return new BPromise(function(_0x128799,_0x5a7564){var _0x249a2d,_0x40abd5;rpcDb[_0x13c9('0xf4')](_0x7a3452)[_0x13c9('0x7d')](function(_0x5093af){if(!_[_0x13c9('0x62')](_0x5093af[0x0])){_0x40abd5=_0x5093af[0x0][_0x13c9('0xf5')]?![]:!![];_0x249a2d=_0x5093af[0x0][_0x13c9('0xf5')]?!![]:![];_0x249a2d=_0x2b8748?!![]:_0x249a2d;}var _0x16f477=_0x5a119e[_0x13c9('0xf6')](_0x5093af);if(_0x16f477[_0x13c9('0xf7')]){rpcDb[_0x13c9('0xf8')](_[_0x13c9('0x69')](_0x5093af[0x0],[_0x13c9('0x6b'),'Contact.phone']))[_0x13c9('0x7d')](function(_0x2fc62b){_0x5a119e['checkInBlack'](_0x2fc62b,_0x5093af[0x0],_0x2b8748,_0x40abd5,_0x249a2d)[_0x13c9('0x7d')](function(_0x43ed14){_0x128799(_0x43ed14);})['catch'](function(_0x29fb8c){_0x5a7564(_0x29fb8c);});})[_0x13c9('0x70')](function(_0x517366){ut[_0x13c9('0x59')](_0x13c9('0xf9'),_0x517366);_0x5a7564(ut[_0x13c9('0x47')](_0x13c9('0xfa'),_0x40abd5,_0x249a2d));});}else{_0x5a7564(ut[_0x13c9('0x47')](_0x16f477['message'],_0x40abd5,_0x249a2d));}})[_0x13c9('0x70')](function(_0x1cff87){ut['logger']('[Preview][getContactPreview]',_0x1cff87);_0x5a7564(ut[_0x13c9('0x47')]('Call\x20unsuccessful',![],!![]));});});};Preview[_0x13c9('0xa')][_0x13c9('0xf6')]=function(_0x2ee199){if(_[_0x13c9('0x62')](_0x2ee199)||_['isEmpty'](_0x2ee199)||!_['isNil'](_0x2ee199[0x0]['Agent'])&&_[_0x13c9('0x62')](_0x2ee199[0x0][_0x13c9('0xfb')][_0x13c9('0x24')])){ut[_0x13c9('0x59')]('[Preview][validateContact][Empty\x20Contact]',_0x2ee199);return{'isValid':![],'message':_0x13c9('0xfc')};}var _0x421fa1=this['campaignsPreview'][_0x2ee199[0x0][_0x13c9('0x64')][_0x13c9('0x24')]];_0x421fa1[_0x13c9('0x47')]=_0x13c9('0x94');if(_[_0x13c9('0x62')](_0x421fa1)){ut[_0x13c9('0x59')](_0x13c9('0xfd'),_0x421fa1);return{'isValid':![],'message':_0x13c9('0xfe')};}if(!this[_0x13c9('0x92')](_0x421fa1[_0x13c9('0x4e')])){ut['logger'](_0x13c9('0xff'),_0x13c9('0x100')+_0x421fa1[_0x13c9('0x24')]+'\x20Trunk\x20is\x20not\x20active');if(!this[_0x13c9('0x92')](_0x421fa1[_0x13c9('0x93')])){ut[_0x13c9('0x59')](_0x13c9('0xff'),_0x421fa1['name']+_0x13c9('0x101'));return{'isValid':![],'message':_0x13c9('0x102')};}}if(!ut[_0x13c9('0x90')](_0x421fa1[_0x13c9('0x32')])){ut[_0x13c9('0x59')]('[Preview][validateContact][Campaign\x20Active]',_0x421fa1[_0x13c9('0x24')]+'\x20Not\x20Active');return{'isValid':![],'message':'campaign\x20Name:\x20'+_0x421fa1[_0x13c9('0x24')]+_0x13c9('0x103')};}return{'isValid':!![],'message':_0x13c9('0x104')};};Preview[_0x13c9('0xa')][_0x13c9('0xe2')]=function(_0x337afd,_0x2660e9,_0x1421ee,_0x4e1a1e){var _0x7ed0a5=this;return new BPromise(function(_0xc200c4,_0x20676b){var _0x18af54=_0x337afd[_0x13c9('0xa2')];var _0x307a48=_0x7ed0a5[_0x13c9('0x92')](_0x2660e9['Trunk'])?util[_0x13c9('0x51')](_0x13c9('0x105'),_0x2660e9[_0x13c9('0x4e')]['name'],_['isNil'](_0x2660e9['dialPrefix'])?'':_0x2660e9['dialPrefix'][_0x13c9('0x106')]()||'',_0x2660e9[_0x13c9('0x107')]>0x0?_0x1421ee[_0x13c9('0xdd')][_0x13c9('0xde')][_0x13c9('0x108')](_0x2660e9[_0x13c9('0x107')]):_0x1421ee[_0x13c9('0xdd')][_0x13c9('0xde')]):util[_0x13c9('0x51')](_0x13c9('0x105'),_['isNil'](_0x2660e9[_0x13c9('0x93')])?_0x2660e9[_0x13c9('0x4e')][_0x13c9('0x24')]:_0x2660e9['TrunkBackup']['name'],_[_0x13c9('0x62')](_0x2660e9['dialPrefix'])?'':_0x2660e9[_0x13c9('0x36')]['trim']()||'',_0x2660e9[_0x13c9('0x107')]>0x0?_0x1421ee[_0x13c9('0xdd')][_0x13c9('0xde')][_0x13c9('0x108')](_0x2660e9[_0x13c9('0x107')]):_0x1421ee['Contact']['phone']);var _0x531dc7=_0x7ed0a5[_0x13c9('0x92')](_0x2660e9['Trunk'])?ut['getCallerId'](_0x2660e9[_0x13c9('0x4e')][_0x13c9('0x109')],_0x2660e9['dialOriginateCallerIdName'],_0x2660e9[_0x13c9('0x10a')]>0x0?ut['getCallerIdRandom'](_0x2660e9[_0x13c9('0x10b')],_0x2660e9[_0x13c9('0x10a')]):_0x2660e9[_0x13c9('0x10b')]):ut[_0x13c9('0x10c')](_[_0x13c9('0x62')](_0x2660e9[_0x13c9('0x93')])?_0x2660e9[_0x13c9('0x4e')]['callerid']:_0x2660e9[_0x13c9('0x93')][_0x13c9('0x109')],_0x2660e9[_0x13c9('0x34')],_0x2660e9['dialRandomLastDigitCallerIdNumber']>0x0?ut[_0x13c9('0x10d')](_0x2660e9[_0x13c9('0x10b')],_0x2660e9[_0x13c9('0x10a')]):_0x2660e9[_0x13c9('0x10b')]);if(_0x531dc7){_0x337afd[_0x13c9('0x10e')]=ut['extractCalleridName'](_0x531dc7);_0x337afd[_0x13c9('0x10f')]=ut[_0x13c9('0x110')](_0x531dc7);}var _0x3ad166=ut['addVariables'](_0x2660e9,_0x1421ee,_0x307a48,_0x531dc7,_0x18af54,_0x337afd);_['merge'](_0x337afd,ut[_0x13c9('0x111')](_0x3ad166));_0x337afd[_0x13c9('0x84')]=moment()[_0x13c9('0x51')](_0x13c9('0x9f'));ami['Action'](ut['variablesAction'](_0x337afd,_0x2660e9,_0x3ad166,_0x337afd[_0x13c9('0xbc')],_0x4e1a1e))[_0x13c9('0x7d')](function(_0x3f9d9f){_0x2660e9['originated']+=0x1;logger[_0x13c9('0xcb')](_0x13c9('0x112'),_0x18af54,'\x20Queue',_0x2660e9[_0x13c9('0x24')],_0x13c9('0x66'),_0x2660e9[_0x13c9('0x48')]);_0xc200c4(_0x3f9d9f);})['catch'](function(_0x35d9f2){ut[_0x13c9('0xd0')](_0x337afd,0xe,_0x13c9('0x113'));rpcDb[_0x13c9('0xd1')](_0x337afd,_0x13c9('0x114'));_0x20676b(_0x35d9f2);});});};Preview[_0x13c9('0xa')][_0x13c9('0x1b')]=function(_0x212850){if(this[_0x13c9('0x11')][_0x212850[_0x13c9('0x9d')]]){this[_0x13c9('0x11')][_0x212850[_0x13c9('0x9d')]][_0x13c9('0x6f')]=_0x212850[_0x13c9('0x6f')];}};Preview['prototype'][_0x13c9('0x115')]=function(_0x276b6a){var _0x4c346e=this;var _0x2093ec=this['actions'][_0x276b6a[_0x13c9('0x116')]];if(_0x2093ec){if(_0x2093ec[_0x13c9('0xe0')]&&this['agents'][_0x2093ec['lookAgent']]){ut[_0x13c9('0x117')](_0x2093ec,this['agents'][_0x2093ec[_0x13c9('0xe0')]][_0x13c9('0x24')],this[_0x13c9('0x12')][_0x2093ec[_0x13c9('0xe0')]]['id']);}var _0xc1e80a=_[_0x13c9('0x118')](_0x2093ec);_0xc1e80a[_0x13c9('0xa0')]=moment()['format'](_0x13c9('0x9f'));var _0xa21d86=_0x4c346e[_0x13c9('0xe')][_0x2093ec['queue']];if(ut['isFailure'](_0x276b6a[_0x13c9('0x119')])){if(_0x2093ec[_0x13c9('0xbb')]){rpcDb[_0x13c9('0xf2')](_0x2093ec['idContact']);}if(_0x2093ec[_0x13c9('0xbc')]){rpcDb[_0x13c9('0xc4')](_0x2093ec[_0x13c9('0xc3')]);}ami[_0x13c9('0x21')](_0x13c9('0x11a'),ut[_0x13c9('0xa8')](_0x2093ec,'rejected'));this[_0x13c9('0x11b')](_0xc1e80a,_0xa21d86,_0x276b6a);}else{_0x2093ec[_0x13c9('0x84')]=moment()['format'](_0x13c9('0x9f'));ut[_0x13c9('0xd0')](_0xc1e80a,0x4,_0x13c9('0xab'));rpcDb[_0x13c9('0xd1')](_0xc1e80a,'[callProgressDetectingAgent][logAnswer]');}}};Preview['prototype']['syncHangup']=function(_0x247219){var _0x5b2d15=this;var _0x10f5be=this['actions'][_0x247219[_0x13c9('0x9d')]];var _0x1822cb;if(_0x10f5be){_0x1822cb=this['campaignsPreview'][_0x10f5be[_0x13c9('0x65')]];logger[_0x13c9('0xcb')](_0x13c9('0x11c'),_0x247219[_0x13c9('0x9d')],_0x13c9('0xa3'),_0x1822cb[_0x13c9('0x24')],_0x13c9('0x68'),_0x1822cb[_0x13c9('0x29')]);}if(this[_0x13c9('0x11')][_0x247219['linkedid']]&&_0x247219[_0x13c9('0x9d')]!==_0x247219['uniqueid']){if(_0x247219[_0x13c9('0x11d')]==='16'&&this[_0x13c9('0x11')][_0x247219['linkedid']][_0x13c9('0x73')]){this[_0x13c9('0x95')](_0x247219,_0x247219[_0x13c9('0x9d')],_0x247219[_0x13c9('0x11d')]);}else if(this[_0x13c9('0x11')][_0x247219[_0x13c9('0x9d')]][_0x13c9('0x73')]){logger['info'](_0x13c9('0x11e'),_0x247219['linkedid'],_0x247219[_0x13c9('0x11d')],'\x20Queue',_0x1822cb['name'],_0x13c9('0x68'),_0x1822cb[_0x13c9('0x29')]);this[_0x13c9('0x95')](_0x247219,_0x247219['linkedid'],_0x247219[_0x13c9('0x11d')]);}}else if(_0x10f5be&&_['isNil'](_0x10f5be['statedesc'])&&_0x1822cb[_0x13c9('0x11f')]&&_0x247219['linkedid']===_0x247219[_0x13c9('0xa2')]&&_[_0x13c9('0x62')](_0x247219[_0x13c9('0xda')])&&_0x247219[_0x13c9('0x11d')]==='16'&&_0x247219[_0x13c9('0x120')]==='6'&&_[_0x13c9('0xce')](_0x10f5be['transfer'])){if(_0x10f5be[_0x13c9('0xbb')]){rpcDb['unlockContact'](_0x10f5be[_0x13c9('0xc3')]);}if(_0x10f5be[_0x13c9('0xbc')]){rpcDb['disableContact'](_0x10f5be['idContact']);}_0x247219[_0x13c9('0xda')]='22';this[_0x13c9('0x11b')](_0x10f5be,_0x1822cb,_0x247219);}else if(_0x10f5be&&_0x10f5be['transfer']){if(_0x247219[_0x13c9('0x11d')]==='16'&&this['actions'][_0x247219[_0x13c9('0x9d')]][_0x13c9('0x73')]){logger[_0x13c9('0xcb')](_0x13c9('0x121'),_0x247219[_0x13c9('0x9d')],_0x247219[_0x13c9('0x11d')],_0x13c9('0xa3'),_0x1822cb['name'],_0x13c9('0x68'),_0x1822cb[_0x13c9('0x29')]);this['callProgressDetectingCustomer'](_0x247219,_0x247219[_0x13c9('0x9d')],_0x247219['cause']);}else if(this[_0x13c9('0x11')][_0x247219[_0x13c9('0x9d')]]['dialAnswer']){logger['info'](_0x13c9('0x11e'),_0x247219[_0x13c9('0x9d')],_0x247219[_0x13c9('0x11d')],_0x13c9('0xa3'),_0x1822cb[_0x13c9('0x24')],_0x13c9('0x68'),_0x1822cb[_0x13c9('0x29')]);this[_0x13c9('0x95')](_0x247219,_0x247219[_0x13c9('0x9d')],_0x247219['cause']);}}};Preview[_0x13c9('0xa')][_0x13c9('0x1a')]=function(_0x4b4e29){if(this[_0x13c9('0x11')][_0x4b4e29[_0x13c9('0xcd')]]&&_0x4b4e29[_0x13c9('0xcd')]!==_0x4b4e29[_0x13c9('0x122')]){this[_0x13c9('0x95')](_0x4b4e29,_0x4b4e29[_0x13c9('0xcd')],_0x4b4e29[_0x13c9('0xc7')]);}};Preview['prototype'][_0x13c9('0x18')]=function(_0x52ce0f){if(this[_0x13c9('0x11')][_0x52ce0f['linkedid']]&&_0x52ce0f['linkedid']!==_0x52ce0f[_0x13c9('0xa2')]&&!this[_0x13c9('0x11')][_0x52ce0f['linkedid']][_0x13c9('0x73')]){if(_0x52ce0f['cause']==='1'){this[_0x13c9('0x95')](_0x52ce0f,_0x52ce0f[_0x13c9('0x9d')],_0x52ce0f[_0x13c9('0x11d')]);}}};Preview['prototype']['addVariable']=function(_0x4a3f22,_0xe62323,_0x25fc3f){if(this[_0x13c9('0x11')][_0x4a3f22]){if(_['isNil'](this[_0x13c9('0x11')][_0x4a3f22][_0x13c9('0x123')])){this['actions'][_0x4a3f22][_0x13c9('0x123')]={};}this[_0x13c9('0x11')][_0x4a3f22][_0x13c9('0x123')][_0xe62323]=_0x25fc3f;}};Preview[_0x13c9('0xa')][_0x13c9('0x1d')]=function(_0x3f5984){try{if(!_[_0x13c9('0x62')](_0x3f5984)){if(ut['filterKey'](_[_0x13c9('0x124')](_0x3f5984[_0x13c9('0x125')])[0x0])){this[_0x13c9('0x126')](_0x3f5984[_0x13c9('0xa2')],_['keys'](_0x3f5984[_0x13c9('0x125')])[0x0],_0x3f5984[_0x13c9('0x127')]);}}}catch(_0x42cae3){logger[_0x13c9('0x128')]('[syncVarSet][Preview]',util['inspect'](_0x42cae3,{'showHidden':![],'depth':null}));}};Preview[_0x13c9('0xa')]['syncAttendedTransfer']=function(_0x12609e){if(_0x12609e){if(this[_0x13c9('0x11')][_0x12609e[_0x13c9('0x129')]]){this['actions'][_0x12609e[_0x13c9('0x129')]][_0x13c9('0x12a')]=!![];}}};Preview[_0x13c9('0xa')][_0x13c9('0x12b')]=function(_0x1e4f9b){if(_0x1e4f9b){if(this[_0x13c9('0x11')][_0x1e4f9b[_0x13c9('0x12c')]]){this[_0x13c9('0x11')][_0x1e4f9b['transfererlinkedid']][_0x13c9('0x12a')]=!![];}}};module[_0x13c9('0x12d')]=Preview;
\ No newline at end of file
index 052a461..eb7c17c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x19b6=['[countReScheduled]\x20','unlockContact','[unlockContact]\x20','disableContact','[activeContact]\x20','type','uniqueid','calleridnum','calleridname','queue','queuecallerjoinAt','answertime','queuecallercomplete','queuecallercompleteAt','endtime','connectedlinename','membername','context','from-sip','exten','xcally-motion-preview','assigned','lastAssignedTo','queuecallerexitreason','create','[voiceQueueReport]\x20','getContactRecallMe','[GetContactRecallMe]\x20','rescheduleContactInQueue','[rescheduleContactInQueue]\x20','util','../../../config/logger','preview','../rpc/cmHopper','../rpc/cmHopperHistory','../rpc/cmHopperBlack','../rpc/voiceQueueRt','../rpc/agentReportPreview','error','inspect','resolve','createHistory','[createHistory]\x20','then','catch','moveContactManagedDialer','[moveContactManagedDialer]\x20','checkIsBlackList','[checkIsBlackList]\x20','[getContactPreview]\x20','createAgentHistory','createCustomerHistory','createCustomerFinal','UserId','rescheduleContact','[rescheduleContact]\x20','countReScheduled'];(function(_0x9864da,_0x5c8471){var _0x23f5ba=function(_0x2bf419){while(--_0x2bf419){_0x9864da['push'](_0x9864da['shift']());}};_0x23f5ba(++_0x5c8471);}(_0x19b6,0x174));var _0x619b=function(_0x2bf5bd,_0x120787){_0x2bf5bd=_0x2bf5bd-0x0;var _0xc810c0=_0x19b6[_0x2bf5bd];return _0xc810c0;};'use strict';var util=require(_0x619b('0x0'));var BPromise=require('bluebird');var logger=require(_0x619b('0x1'))(_0x619b('0x2'));var _=require('lodash');var cmHopper=require(_0x619b('0x3'));var cmHopperFinal=require('../rpc/cmHopperFinal');var cmHopperHistory=require(_0x619b('0x4'));var cmHopperBlack=require(_0x619b('0x5'));var voiceQueueRt=require(_0x619b('0x6'));var agentReportPreview=require(_0x619b('0x7'));var voiceQueueReport=require('../rpc/voiceQueueReport');function loggerCatch(_0x309b58){return function(_0x284a28){logger[_0x619b('0x8')](_0x309b58,util[_0x619b('0x9')](_0x284a28,{'showHidden':![],'depth':null}));};}function create(_0x451726){return BPromise[_0x619b('0xa')]()['then'](cmHopperHistory[_0x619b('0xb')](_0x451726))['catch'](loggerCatch(_0x619b('0xc')));}function createAgent(_0x1fa072){return BPromise['resolve']()[_0x619b('0xd')](agentReportPreview[_0x619b('0xb')](_0x1fa072))[_0x619b('0xe')](loggerCatch(_0x619b('0xc')));}function moveContact(_0x259ac7){return BPromise[_0x619b('0xa')]()[_0x619b('0xd')](cmHopper[_0x619b('0xf')](_0x259ac7,!![]))[_0x619b('0xe')](loggerCatch(_0x619b('0x10')));}exports[_0x619b('0x11')]=function(_0x33aa0d){return BPromise[_0x619b('0xa')]()[_0x619b('0xd')](cmHopperBlack[_0x619b('0x11')](_0x33aa0d))[_0x619b('0xe')](loggerCatch(_0x619b('0x12')));};exports['getContactPreview']=function(_0x580720){return BPromise[_0x619b('0xa')]()[_0x619b('0xd')](cmHopper['getContactPreview'](_0x580720))[_0x619b('0xe')](loggerCatch(_0x619b('0x13')));};exports[_0x619b('0xb')]=function(_0x361a45,_0x16f76a){create(_0x361a45)[_0x619b('0xe')](loggerCatch(_0x16f76a));moveContact(_0x361a45)['catch'](loggerCatch(_0x16f76a));};exports[_0x619b('0x14')]=function(_0x10fc55,_0x5f3feb){createAgent(_0x10fc55)['catch'](loggerCatch(_0x5f3feb));};exports[_0x619b('0x15')]=function(_0x30fb0b,_0x17947e){create(_0x30fb0b)[_0x619b('0xe')](loggerCatch(_0x17947e));};exports[_0x619b('0x16')]=function(_0x179abf,_0x250adf){moveContact(_0x179abf)['catch'](loggerCatch(_0x250adf));};exports['rescheduleContact']=function(_0x236757,_0xf756e5,_0x236fd4){if(_0xf756e5){_0x236757[_0x619b('0x17')]=null;}if(_0x236fd4){_0x236757['active']=![];}return BPromise['resolve']()[_0x619b('0xd')](cmHopper[_0x619b('0x18')](_0x236757))[_0x619b('0xe')](loggerCatch(_0x619b('0x19')));};exports[_0x619b('0x1a')]=function(_0x2ce377){return BPromise[_0x619b('0xa')]()[_0x619b('0xd')](cmHopper[_0x619b('0x1a')](_0x2ce377))[_0x619b('0xe')](loggerCatch(_0x619b('0x1b')));};exports[_0x619b('0x1c')]=function(_0x1dceb7){return BPromise[_0x619b('0xa')]()[_0x619b('0xd')](cmHopper[_0x619b('0x1c')]({'UserId':null},_0x1dceb7,0x1))[_0x619b('0xe')](loggerCatch(_0x619b('0x1d')));};exports[_0x619b('0x1e')]=function(_0x4bd469){return BPromise[_0x619b('0xa')]()[_0x619b('0xd')](cmHopper[_0x619b('0x1c')]({'active':![]},_0x4bd469,0x1))['catch'](loggerCatch(_0x619b('0x1f')));};exports['crateCustomerReportQueue']=function(_0x5cec60){var _0x3163a5={};_0x3163a5[_0x619b('0x20')]=_0x5cec60[_0x619b('0x20')];_0x3163a5['uniqueid']=_0x5cec60[_0x619b('0x21')];_0x3163a5[_0x619b('0x22')]=_0x5cec60[_0x619b('0x22')];_0x3163a5[_0x619b('0x23')]=_0x5cec60[_0x619b('0x23')];_0x3163a5[_0x619b('0x24')]=_0x5cec60[_0x619b('0x24')];_0x3163a5[_0x619b('0x25')]=_0x5cec60[_0x619b('0x26')];_0x3163a5['queuecallerleaveAt']=_0x5cec60[_0x619b('0x26')];_0x3163a5[_0x619b('0x27')]=0x1;_0x3163a5[_0x619b('0x28')]=_0x5cec60[_0x619b('0x29')];_0x3163a5[_0x619b('0x2a')]=_0x5cec60[_0x619b('0x2b')];_0x3163a5[_0x619b('0x2c')]=_0x619b('0x2d');_0x3163a5[_0x619b('0x2e')]=_0x619b('0x2f');_0x3163a5['holdtime']=0x0;_0x3163a5[_0x619b('0x30')]=0x1;_0x3163a5[_0x619b('0x31')]=_0x5cec60['membername'];_0x3163a5[_0x619b('0x32')]='COMPLETED';return BPromise[_0x619b('0xa')]()[_0x619b('0xd')](voiceQueueReport[_0x619b('0x33')](_0x3163a5))[_0x619b('0xe')](loggerCatch(_0x619b('0x34')));};exports[_0x619b('0x35')]=function(_0xb46b5c,_0x425520){return BPromise[_0x619b('0xa')]()['then'](cmHopper[_0x619b('0x35')](_0xb46b5c,_0x425520))[_0x619b('0xe')](loggerCatch(_0x619b('0x36')));};exports[_0x619b('0x37')]=function(_0x4e1373){return BPromise['resolve']()[_0x619b('0xd')](cmHopper[_0x619b('0x18')](_0x4e1373,!![],!![]))[_0x619b('0xe')](loggerCatch(_0x619b('0x38')));};
\ No newline at end of file
+var _0xf428=['[checkIsBlackList]\x20','getContactPreview','[getContactPreview]\x20','createAgentHistory','createCustomerFinal','rescheduleContact','active','countReScheduled','unlockContact','disableContact','[activeContact]\x20','crateCustomerReportQueue','type','uniqueid','calleridnum','calleridname','queue','answertime','queuecallerleaveAt','queuecallercomplete','queuecallercompleteAt','endtime','membername','context','exten','xcally-motion-preview','holdtime','lastAssignedTo','COMPLETED','create','[GetContactRecallMe]\x20','rescheduleContactInQueue','[rescheduleContactInQueue]\x20','util','bluebird','../../../config/logger','preview','../rpc/cmHopperHistory','../rpc/cmHopperBlack','../rpc/voiceQueueRt','../rpc/voiceQueueReport','inspect','resolve','then','createHistory','catch','[createHistory]\x20','moveContactManagedDialer','[moveContactManagedDialer]\x20','checkIsBlackList'];(function(_0x4b4798,_0x1becd4){var _0x2be3a2=function(_0x23dfa9){while(--_0x23dfa9){_0x4b4798['push'](_0x4b4798['shift']());}};_0x2be3a2(++_0x1becd4);}(_0xf428,0xb7));var _0x8f42=function(_0x2c5205,_0x273e21){_0x2c5205=_0x2c5205-0x0;var _0x2c3c67=_0xf428[_0x2c5205];return _0x2c3c67;};'use strict';var util=require(_0x8f42('0x0'));var BPromise=require(_0x8f42('0x1'));var logger=require(_0x8f42('0x2'))(_0x8f42('0x3'));var _=require('lodash');var cmHopper=require('../rpc/cmHopper');var cmHopperFinal=require('../rpc/cmHopperFinal');var cmHopperHistory=require(_0x8f42('0x4'));var cmHopperBlack=require(_0x8f42('0x5'));var voiceQueueRt=require(_0x8f42('0x6'));var agentReportPreview=require('../rpc/agentReportPreview');var voiceQueueReport=require(_0x8f42('0x7'));function loggerCatch(_0x3a3ea0){return function(_0x2a8ea9){logger['error'](_0x3a3ea0,util[_0x8f42('0x8')](_0x2a8ea9,{'showHidden':![],'depth':null}));};}function create(_0x54e7e4){return BPromise[_0x8f42('0x9')]()[_0x8f42('0xa')](cmHopperHistory[_0x8f42('0xb')](_0x54e7e4))[_0x8f42('0xc')](loggerCatch(_0x8f42('0xd')));}function createAgent(_0x239203){return BPromise[_0x8f42('0x9')]()[_0x8f42('0xa')](agentReportPreview[_0x8f42('0xb')](_0x239203))['catch'](loggerCatch(_0x8f42('0xd')));}function moveContact(_0x1b4b4b){return BPromise[_0x8f42('0x9')]()[_0x8f42('0xa')](cmHopper[_0x8f42('0xe')](_0x1b4b4b,!![]))['catch'](loggerCatch(_0x8f42('0xf')));}exports[_0x8f42('0x10')]=function(_0x560ed5){return BPromise['resolve']()[_0x8f42('0xa')](cmHopperBlack[_0x8f42('0x10')](_0x560ed5))['catch'](loggerCatch(_0x8f42('0x11')));};exports[_0x8f42('0x12')]=function(_0x5d7e8b){return BPromise[_0x8f42('0x9')]()['then'](cmHopper[_0x8f42('0x12')](_0x5d7e8b))[_0x8f42('0xc')](loggerCatch(_0x8f42('0x13')));};exports[_0x8f42('0xb')]=function(_0x385113,_0x4b1ecf){create(_0x385113)[_0x8f42('0xc')](loggerCatch(_0x4b1ecf));moveContact(_0x385113)[_0x8f42('0xc')](loggerCatch(_0x4b1ecf));};exports[_0x8f42('0x14')]=function(_0x17e15f,_0x42d80f){createAgent(_0x17e15f)['catch'](loggerCatch(_0x42d80f));};exports['createCustomerHistory']=function(_0x3b656a,_0x27e900){create(_0x3b656a)[_0x8f42('0xc')](loggerCatch(_0x27e900));};exports[_0x8f42('0x15')]=function(_0xd1e07b,_0x20498f){moveContact(_0xd1e07b)[_0x8f42('0xc')](loggerCatch(_0x20498f));};exports[_0x8f42('0x16')]=function(_0x11d7d8,_0x25968b,_0xa2c3ef){if(_0x25968b){_0x11d7d8['UserId']=null;}if(_0xa2c3ef){_0x11d7d8[_0x8f42('0x17')]=![];}return BPromise[_0x8f42('0x9')]()[_0x8f42('0xa')](cmHopper[_0x8f42('0x16')](_0x11d7d8))['catch'](loggerCatch('[rescheduleContact]\x20'));};exports[_0x8f42('0x18')]=function(_0x1c9294){return BPromise[_0x8f42('0x9')]()['then'](cmHopper['countReScheduled'](_0x1c9294))[_0x8f42('0xc')](loggerCatch('[countReScheduled]\x20'));};exports['unlockContact']=function(_0x30bb0b){return BPromise[_0x8f42('0x9')]()[_0x8f42('0xa')](cmHopper[_0x8f42('0x19')]({'UserId':null},_0x30bb0b,0x1))[_0x8f42('0xc')](loggerCatch('[unlockContact]\x20'));};exports[_0x8f42('0x1a')]=function(_0x3b4fc2){return BPromise[_0x8f42('0x9')]()[_0x8f42('0xa')](cmHopper[_0x8f42('0x19')]({'active':![]},_0x3b4fc2,0x1))[_0x8f42('0xc')](loggerCatch(_0x8f42('0x1b')));};exports[_0x8f42('0x1c')]=function(_0x173f9e){var _0x317924={};_0x317924['type']=_0x173f9e[_0x8f42('0x1d')];_0x317924[_0x8f42('0x1e')]=_0x173f9e[_0x8f42('0x1e')];_0x317924[_0x8f42('0x1f')]=_0x173f9e[_0x8f42('0x1f')];_0x317924[_0x8f42('0x20')]=_0x173f9e['calleridname'];_0x317924[_0x8f42('0x21')]=_0x173f9e[_0x8f42('0x21')];_0x317924['queuecallerjoinAt']=_0x173f9e[_0x8f42('0x22')];_0x317924[_0x8f42('0x23')]=_0x173f9e[_0x8f42('0x22')];_0x317924[_0x8f42('0x24')]=0x1;_0x317924[_0x8f42('0x25')]=_0x173f9e[_0x8f42('0x26')];_0x317924['connectedlinename']=_0x173f9e[_0x8f42('0x27')];_0x317924[_0x8f42('0x28')]='from-sip';_0x317924[_0x8f42('0x29')]=_0x8f42('0x2a');_0x317924[_0x8f42('0x2b')]=0x0;_0x317924['assigned']=0x1;_0x317924[_0x8f42('0x2c')]=_0x173f9e[_0x8f42('0x27')];_0x317924['queuecallerexitreason']=_0x8f42('0x2d');return BPromise[_0x8f42('0x9')]()['then'](voiceQueueReport[_0x8f42('0x2e')](_0x317924))['catch'](loggerCatch('[voiceQueueReport]\x20'));};exports['getContactRecallMe']=function(_0x44396c,_0x392417){return BPromise['resolve']()[_0x8f42('0xa')](cmHopper['getContactRecallMe'](_0x44396c,_0x392417))[_0x8f42('0xc')](loggerCatch(_0x8f42('0x2f')));};exports[_0x8f42('0x30')]=function(_0x1ef042){return BPromise['resolve']()['then'](cmHopper[_0x8f42('0x16')](_0x1ef042,!![],!![]))[_0x8f42('0xc')](loggerCatch(_0x8f42('0x31')));};
\ No newline at end of file
index 3f02865..c713079 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5041=['channelAgent','agentReadyId','status','reachable','getDiff','seconds','createBody','CampaignId','filterKey','idContact','campaigntype','dialAnswer','countbusyretry','countglobal','callback','callbackuniqueid','callbackat','recallme','sipcallid','xmd-voicequeueid','xmd-queue','xmd-phone','xmd-dialurl','xmd-dialoptions','xmd-dialid','xmd-dialchannel','xmd-contactid','xmd-cdrtype','xmd-agi','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqosrttbridged','rtpaudioqos','rtpaudioqoslossbridged','bridgepeer','bridgepvtcallid','getCallerIdRandom','pow','replace','random','extractCalleridName','match','lodash','preview','env','XCALLY_IP_AGI','milliseconds','diff','loggerCatch','error','inspect','info','loggerError','logger2','getCallerId','isUndefined','string','isEmpty','format','isNil','addVariables','Queue','name','\x22%s\x22\x20<%s>','calleridname','calleridnum','dialer','VoiceQueueId','dialOriginateTimeout','\x22rtTxX%s%s\x22','dialPreviewUrl','dialQueueProject','\x22agi://%s/square,%s\x22','dialQueueProject2','originatecalleridname','monitor_format','_XCALLY_MIXMONITOR_FORMAT','Contact','hasOwnProperty','tags','createdAt','%s%s','toUpper','updateOriginated','originated','[updateOriginated]\x20object\x20originated\x20is\x20negative','logBlacklist','YYYY-MM-DD\x20HH:mm:ss','state','Blacklist','starttime','responsetime','endtime','logAgent','ringtime','logLookAgent','membername','UserId','logCustomer','statedesc','talktime','answertime','isFailure','variablesAction','BOOKED','uniqueid','originate','xcally-motion-preview','from-sip','timeout','countcongestionretry','countnoanswerretry','cloneAction','clone','Global','scheduledAt','active','scheduledat','add','minutes','ContactId','ListId','decrementTalkink','pTalking','[decrementTalkink]\x20object\x20talking\x20is\x20negative','IsNotLoggedIn','lastevent','queue','interface'];(function(_0x2e3e7d,_0x38b959){var _0x1bf87b=function(_0x54b8ad){while(--_0x54b8ad){_0x2e3e7d['push'](_0x2e3e7d['shift']());}};_0x1bf87b(++_0x38b959);}(_0x5041,0x12f));var _0x1504=function(_0x480e55,_0x4162a1){_0x480e55=_0x480e55-0x0;var _0x10cc3e=_0x5041[_0x480e55];return _0x10cc3e;};'use strict';var util=require('util');var _=require(_0x1504('0x0'));var moment=require('moment');var logger=require('../../../../config/logger')(_0x1504('0x1'));var ipAgi=process[_0x1504('0x2')][_0x1504('0x3')]||'127.0.0.1';function getSeconds(_0x27a797,_0x1225c5){var _0xb1dfff=moment(_0x27a797)[_0x1504('0x4')](0x0);var _0x1197d9=moment(_0x1225c5)['milliseconds'](0x0);return _0xb1dfff[_0x1504('0x5')](_0x1197d9,'seconds');}exports[_0x1504('0x6')]=function(_0x3ba9b6){return function(_0x354773){logger[_0x1504('0x7')](_0x3ba9b6,util[_0x1504('0x8')](_0x354773,{'showHidden':![],'depth':null}));};};exports['logger']=function(_0x32e989,_0x5564be){logger[_0x1504('0x9')](_0x32e989,util['inspect'](_0x5564be,{'showHidden':![],'depth':null}));};exports[_0x1504('0xa')]=function(_0x2e64bb,_0x2c2c4e){logger[_0x1504('0x7')](_0x2e64bb,util[_0x1504('0x8')](_0x2c2c4e,{'showHidden':![],'depth':null}));};exports[_0x1504('0xb')]=function(_0x128163){return function(_0x5a41cb){logger[_0x1504('0x9')](_0x128163,util[_0x1504('0x8')](_0x5a41cb,{'showHidden':![],'depth':null}));};};exports['message']=function(_0x3762d9,_0x144578,_0x2b503c){return{'message':_0x3762d9,'unlock':_0x144578,'active':_0x2b503c};};exports[_0x1504('0xc')]=function(_0x12ec15,_0x1876c4,_0x1c759f){if(!_[_0x1504('0xd')](_0x1c759f)&&_0x1504('0xe')===typeof _0x1c759f&&!_[_0x1504('0xf')](_0x1c759f)){if(!_[_0x1504('0xd')](_0x1876c4)&&_0x1504('0xe')===typeof _0x1876c4&&!_[_0x1504('0xf')](_0x1876c4)){return util[_0x1504('0x10')]('\x22%s\x22\x20<%s>',_0x1876c4,_0x1c759f);}return util['format']('\x22%s\x22\x20<%s>',_0x1c759f,_0x1c759f);}if(!_[_0x1504('0xd')](_0x12ec15)&&_0x1504('0xe')===typeof _0x12ec15&&!_[_0x1504('0xf')](_0x12ec15)){return _0x12ec15;}return'\x22\x22\x20<>';};exports['isActive']=function(_0xa8f9ac){if(_[_0x1504('0x11')](_0xa8f9ac)){return![];}return _0xa8f9ac;};exports[_0x1504('0x12')]=function(_0x298eb1,_0x24b2f2,_0x2f8459,_0x3cfbb9,_0x2e98b6,_0x3b7d1c){var _0x16dbf8={'XMD-QUEUE':_0x24b2f2[_0x1504('0x13')]?_0x24b2f2[_0x1504('0x13')][_0x1504('0x14')]:'','XMD-CALLERID':_0x3cfbb9,'XMD-CALLERID-PREVIEW':_0x3b7d1c?util[_0x1504('0x10')](_0x1504('0x15'),_0x3b7d1c[_0x1504('0x16')],_0x3b7d1c[_0x1504('0x17')]):_0x3cfbb9,'XMD-DIALID':_0x2e98b6,'XMD-CONTACTID':_0x24b2f2['ContactId'],'XMD-CDRTYPE':_0x1504('0x18'),'CALLERID(all)':_0x3cfbb9,'XMD-VOICEQUEUEID':_0x24b2f2[_0x1504('0x19')],'XMD-DIALCHANNEL':_0x2f8459,'XMD-DIALTIMEOUT':_0x298eb1[_0x1504('0x1a')]||0x1e,'XMD-DIALOPTIONS':util['format'](_0x1504('0x1b'),_0x298eb1['dialQueueProject2']?'g':'',_[_0x1504('0xf')](_0x298eb1['monitor_format'])?'':'U(xcally-mixmonitor-context)'),'XMD-DIALURL':_0x298eb1[_0x1504('0x1c')]||'','XMD-AGI':_0x298eb1[_0x1504('0x1d')]?util['format'](_0x1504('0x1e'),ipAgi,_0x298eb1[_0x1504('0x1d')]):'NONE','XMD-AGIAFTER':_0x298eb1['dialQueueProject2']?util[_0x1504('0x10')](_0x1504('0x1e'),ipAgi,_0x298eb1[_0x1504('0x1f')]):'NONE','XMD-ORIGINATECALLERIDNUM':_0x3b7d1c?_0x3b7d1c['originatecalleridnum']:'','XMD-ORIGINATECALLERIDNAME':_0x3b7d1c?_0x3b7d1c[_0x1504('0x20')]:'','XMD-DESTINATION':'xcally-motion-preview'};if(!_[_0x1504('0xf')](_0x298eb1[_0x1504('0x21')])){_0x16dbf8[util[_0x1504('0x10')]('%s',_0x1504('0x22'))]=_0x298eb1['monitor_format'];_0x16dbf8[util[_0x1504('0x10')]('%s','_XCALLY_MIXMONITOR_UNIQUEID')]=_0x2e98b6;}if(_0x24b2f2&&_0x24b2f2['Contact']){for(var _0x30263a in _0x24b2f2[_0x1504('0x23')]){if(_0x24b2f2[_0x1504('0x23')][_0x1504('0x24')](_0x30263a)){if(!_['isNil'](_0x24b2f2['Contact'][_0x30263a])&&_0x30263a!=='id'&&_0x30263a!==_0x1504('0x25')&&_0x30263a!==_0x1504('0x26')&&_0x30263a!=='updatedAt'){_0x16dbf8[util[_0x1504('0x10')](_0x1504('0x27'),'XMD-',_[_0x1504('0x28')](_0x30263a))]=_0x24b2f2[_0x1504('0x23')][_0x30263a];}}}}return _0x16dbf8;};exports['toLowerVariables']=function(_0xe4b925){var _0x2b70ae={};for(var _0x23de6d in _0xe4b925){if(_0xe4b925[_0x1504('0x24')](_0x23de6d)){_0x2b70ae[util[_0x1504('0x10')]('%s',_['toLower'](_0x23de6d))]=_0xe4b925[_0x23de6d];}}return{'variables':_0x2b70ae};};exports[_0x1504('0x29')]=function(_0x342847,_0x35877d){if(!_[_0x1504('0x11')](_0x342847)){if(_0x342847[_0x1504('0x24')](_0x1504('0x2a'))){if(_0x342847[_0x1504('0x2a')]>0x0){_0x342847[_0x1504('0x2a')]-=0x1;}else{logger['error'](_0x1504('0x2b'),_0x35877d);}}}else{logger[_0x1504('0x7')]('[updateOriginated]\x20is\x20null\x20or\x20undefined',_0x35877d);}};exports[_0x1504('0x2c')]=function(_0x2a514a){var _0x216d1c=moment()[_0x1504('0x10')](_0x1504('0x2d'));_0x2a514a[_0x1504('0x2e')]=0xd;_0x2a514a['statedesc']=_0x1504('0x2f');_0x2a514a[_0x1504('0x30')]=_0x216d1c;_0x2a514a[_0x1504('0x31')]=_0x216d1c;_0x2a514a[_0x1504('0x32')]=_0x216d1c;};exports[_0x1504('0x33')]=function(_0x27bd8a,_0x2a6b05,_0x5429d0){var _0x40956f=moment()[_0x1504('0x10')](_0x1504('0x2d'));_0x27bd8a['state']=_0x2a6b05;_0x27bd8a['statedesc']=_0x5429d0;_0x27bd8a[_0x1504('0x31')]=_0x40956f;_0x27bd8a[_0x1504('0x34')]=getSeconds(_0x27bd8a[_0x1504('0x31')],_0x27bd8a[_0x1504('0x30')]);};exports[_0x1504('0x35')]=function(_0x26a4dc,_0x1b0537,_0x593c73){_0x26a4dc[_0x1504('0x36')]=_0x1b0537;_0x26a4dc[_0x1504('0x37')]=_0x593c73;};exports[_0x1504('0x38')]=function(_0x26972c,_0x874359,_0x3c4e9f){var _0x5eeed0=moment()[_0x1504('0x10')](_0x1504('0x2d'));_0x26972c[_0x1504('0x2e')]=_0x874359;_0x26972c[_0x1504('0x39')]=_0x3c4e9f;_0x26972c[_0x1504('0x31')]=_0x26972c[_0x1504('0x31')]?_0x26972c['responsetime']:_0x5eeed0;_0x26972c['endtime']=_0x26972c['endtime']?_0x26972c['endtime']:_0x5eeed0;_0x26972c[_0x1504('0x34')]=getSeconds(_0x26972c[_0x1504('0x31')]||0x0,_0x26972c[_0x1504('0x30')]||0x0);_0x26972c[_0x1504('0x3a')]=_0x26972c['answertime']?getSeconds(_0x26972c[_0x1504('0x32')],_0x26972c[_0x1504('0x3b')]):0x0;};exports[_0x1504('0x3c')]=function(_0x4f37b9){return _0x4f37b9==='Failure';};exports[_0x1504('0x3d')]=function(_0x2ed5f8,_0x390777,_0x3bbb1e,_0x7e507c,_0x23b2a9){var _0x59f6ca=_0x7e507c?'RECALL':_0x2ed5f8[_0x1504('0x16')];_0x59f6ca=_0x23b2a9?_0x1504('0x3e'):_0x59f6ca;return{'actionid':_0x2ed5f8[_0x1504('0x3f')],'action':_0x1504('0x40'),'channel':_0x2ed5f8['channelAgent'],'callerid':util[_0x1504('0x10')](_0x1504('0x15'),_0x59f6ca,_0x2ed5f8['calleridnum']),'Exten':_0x1504('0x41'),'Context':_0x1504('0x42'),'Priority':'1','variable':_0x3bbb1e,'timeout':(_0x390777[_0x1504('0x43')]||0x1e)*0x3e8,'async':!![],'channelid':_0x2ed5f8['uniqueid']};};exports['totalGlobal']=function(_0x46bb76){return _0x46bb76['countbusyretry']+_0x46bb76[_0x1504('0x44')]+_0x46bb76[_0x1504('0x45')];};exports[_0x1504('0x46')]=function(_0xd468bd){var _0x4bb890=_[_0x1504('0x47')](_0xd468bd);_0x4bb890['state']=0xf;_0x4bb890[_0x1504('0x39')]=_0x1504('0x48');return _0x4bb890;};exports[_0x1504('0x49')]=function(_0x49b32d,_0x145118,_0x7d834e){var _0x66ac0e={};_0x66ac0e[_0x145118]=_0x49b32d[_0x145118];_0x66ac0e[_0x1504('0x4a')]=![];_0x66ac0e[_0x1504('0x4b')]=moment()[_0x1504('0x4c')](_0x7d834e,_0x1504('0x4d'))[_0x1504('0x10')](_0x1504('0x2d'));_0x66ac0e[_0x1504('0x4e')]=_0x49b32d['ContactId'];_0x66ac0e[_0x1504('0x4f')]=_0x49b32d[_0x1504('0x4f')];_0x66ac0e[_0x1504('0x19')]=_0x49b32d[_0x1504('0x19')]||undefined;return _0x66ac0e;};exports[_0x1504('0x50')]=function(_0x5743b9,_0x206da1){if(!_[_0x1504('0x11')](_0x5743b9)){if(_0x5743b9[_0x1504('0x51')]>0x0){_0x5743b9[_0x1504('0x51')]-=0x1;}else{logger[_0x1504('0x7')](_0x206da1,_0x1504('0x52'));}}else{logger['error'](_0x206da1,'[decrementTalkink]\x20is\x20null\x20or\x20undefined');}};exports[_0x1504('0x53')]=function(_0xce1833){if(_0xce1833<=0x0){return!![];}return![];};exports['buildObj']=function(_0xa15f9b,_0x733aad){_0xa15f9b[_0x1504('0x54')]=_0x733aad;_0xa15f9b['name']=_0xa15f9b[_0x1504('0x55')];_0xa15f9b[_0x1504('0x56')]=_0xa15f9b[_0x1504('0x57')];return _0xa15f9b;};exports['buildAcw']=function(_0x5c241a){var _0x4791c0={};_0x4791c0['queue']=_0x5c241a['queue'];_0x4791c0[_0x1504('0x56')]=_0x5c241a[_0x1504('0x57')];_0x4791c0['uniqueid']=_0x5c241a[_0x1504('0x3f')];return _0x4791c0;};exports[_0x1504('0x58')]=function(_0x1290e0){var _0x1df3a7=[];for(var _0x1b68c2 in _0x1290e0){if(_0x1290e0[_0x1504('0x24')](_0x1b68c2)){if(!_[_0x1504('0x11')](_0x1290e0[_0x1b68c2])&&_0x1290e0[_0x1b68c2][_0x1504('0x2e')]==='not_inuse'&&_0x1290e0[_0x1b68c2][_0x1504('0x59')]===_0x1504('0x5a')){_0x1df3a7['push'](_0x1290e0[_0x1b68c2]['id']);}}}return _0x1df3a7;};exports[_0x1504('0x5b')]=function(_0x232c7c){var _0x378833=moment()[_0x1504('0x4')](0x0);var _0x4d93c7=moment(_0x232c7c)[_0x1504('0x4')](0x0);return _0x378833[_0x1504('0x5')](_0x4d93c7,_0x1504('0x5c'));};exports[_0x1504('0x5d')]=function(_0x4b3b3a){return{'active':![],'recallme':![],'UserId':null,'ContactId':_0x4b3b3a['ContactId'],'ListId':_0x4b3b3a[_0x1504('0x4f')],'VoiceQueueId':_0x4b3b3a[_0x1504('0x19')]||undefined,'CampaignId':_0x4b3b3a[_0x1504('0x5e')]||undefined};};exports[_0x1504('0x5f')]=function(_0x5c2747){if(_0x5c2747==='uniqueid'||_0x5c2747===_0x1504('0x60')||_0x5c2747===_0x1504('0x55')||_0x5c2747==='type'||_0x5c2747===_0x1504('0x61')||_0x5c2747===_0x1504('0x62')||_0x5c2747===_0x1504('0x36')||_0x5c2747===_0x1504('0x57')||_0x5c2747===_0x1504('0x16')||_0x5c2747==='active'||_0x5c2747===_0x1504('0x17')||_0x5c2747==='scheduledat'||_0x5c2747===_0x1504('0x63')||_0x5c2747===_0x1504('0x44')||_0x5c2747===_0x1504('0x45')||_0x5c2747===_0x1504('0x64')||_0x5c2747===_0x1504('0x65')||_0x5c2747===_0x1504('0x66')||_0x5c2747===_0x1504('0x67')||_0x5c2747===_0x1504('0x68')||_0x5c2747==='ContactId'||_0x5c2747===_0x1504('0x4f')||_0x5c2747===_0x1504('0x37')||_0x5c2747==='VoiceQueueId'||_0x5c2747===_0x1504('0x69')||_0x5c2747===_0x1504('0x6a')||_0x5c2747===_0x1504('0x6b')||_0x5c2747===_0x1504('0x6c')||_0x5c2747==='xmd-listid'||_0x5c2747===_0x1504('0x6d')||_0x5c2747==='xmd-dialtimeout'||_0x5c2747===_0x1504('0x6e')||_0x5c2747===_0x1504('0x6f')||_0x5c2747===_0x1504('0x70')||_0x5c2747===_0x1504('0x71')||_0x5c2747===_0x1504('0x72')||_0x5c2747==='xmd-callerid'||_0x5c2747==='xmd-agiafter'||_0x5c2747===_0x1504('0x73')||_0x5c2747==='rtpaudioqos'||_0x5c2747==='rtpaudioqosbridged'||_0x5c2747===_0x1504('0x74')||_0x5c2747===_0x1504('0x75')||_0x5c2747===_0x1504('0x76')||_0x5c2747==='rtpaudioqoslossbridged'||_0x5c2747==='rtpaudioqosrtt'||_0x5c2747===_0x1504('0x77')||_0x5c2747===_0x1504('0x78')||_0x5c2747==='rtpaudioqosbridged'||_0x5c2747==='rtpaudioqosjitter'||_0x5c2747===_0x1504('0x75')||_0x5c2747==='rtpaudioqosloss'||_0x5c2747===_0x1504('0x79')||_0x5c2747==='rtpaudioqosrtt'||_0x5c2747===_0x1504('0x77')||_0x5c2747===_0x1504('0x7a')||_0x5c2747===_0x1504('0x7b')||_0x5c2747===_0x1504('0x2e')||_0x5c2747==='statedesc'){return![];}return!![];};exports[_0x1504('0x7c')]=function(_0x57f78c,_0x10247b){var _0x5289f5,_0x11050f,_0x884839;if(_0x10247b<=0x0){_0x10247b=0x1;}_0x5289f5=new RegExp('\x5cw{0,'+_0x10247b+'}$');_0x11050f=Math[_0x1504('0x7d')](0xa,_0x10247b-0x1);_0x884839=Math[_0x1504('0x7d')](0xa,_0x10247b)-0x1;return util[_0x1504('0x10')]('%s',_[_0x1504('0x7e')](_0x57f78c,_0x5289f5,_[_0x1504('0x7f')](_0x11050f,_0x884839)));};exports[_0x1504('0x80')]=function(_0x4bd73b){var _0x5a9bb7=_0x4bd73b[_0x1504('0x81')](/"(.*?)"/);return _0x5a9bb7?_0x5a9bb7[0x1]:_0x4bd73b;};exports['extractCalleridNumber']=function(_0x178a05){var _0x10f2ca=_0x178a05[_0x1504('0x81')](/<(.*?)>/);return _0x10f2ca?_0x10f2ca[0x1]:_0x178a05;};
\ No newline at end of file
+var _0xde59=['isActive','isNil','addVariables','name','calleridname','calleridnum','ContactId','dialer','VoiceQueueId','dialOriginateTimeout','monitor_format','U(xcally-mixmonitor-context)','dialPreviewUrl','dialQueueProject','\x22agi://%s/square,%s\x22','NONE','dialQueueProject2','originatecalleridnum','xcally-motion-preview','_XCALLY_MIXMONITOR_FORMAT','_XCALLY_MIXMONITOR_UNIQUEID','Contact','tags','createdAt','updatedAt','%s%s','XMD-','toUpper','toLowerVariables','hasOwnProperty','toLower','updateOriginated','originated','[updateOriginated]\x20object\x20originated\x20is\x20negative','[updateOriginated]\x20is\x20null\x20or\x20undefined','logBlacklist','YYYY-MM-DD\x20HH:mm:ss','statedesc','Blacklist','starttime','responsetime','endtime','logAgent','ringtime','membername','logCustomer','state','talktime','answertime','isFailure','variablesAction','RECALL','BOOKED','originate','channelAgent','timeout','totalGlobal','countbusyretry','countcongestionretry','countnoanswerretry','cloneAction','clone','Global','scheduledAt','scheduledat','add','minutes','ListId','decrementTalkink','[decrementTalkink]\x20object\x20talking\x20is\x20negative','[decrementTalkink]\x20is\x20null\x20or\x20undefined','IsNotLoggedIn','buildObj','lastevent','queue','interface','buildAcw','uniqueid','agentReadyId','status','reachable','getDiff','diff','CampaignId','idContact','type','campaigntype','dialAnswer','callbackuniqueid','callbackat','recallme','UserId','sipcallid','xmd-voicequeueid','xmd-phone','xmd-listid','xmd-dialurl','xmd-dialoptions','xmd-dialid','xmd-contactid','xmd-callerid','xmd-agiafter','rtpaudioqos','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrttbridged','rtpaudioqosbridged','rtpaudioqosrtt','bridgepvtcallid','getCallerIdRandom','pow','random','extractCalleridName','extractCalleridNumber','match','util','lodash','moment','preview','127.0.0.1','milliseconds','seconds','loggerCatch','inspect','logger','info','loggerError','error','logger2','message','getCallerId','isUndefined','string','isEmpty','format','\x22%s\x22\x20<%s>','\x22\x22\x20<>'];(function(_0x38ebb5,_0x5afbba){var _0x5b95ae=function(_0x1d45a2){while(--_0x1d45a2){_0x38ebb5['push'](_0x38ebb5['shift']());}};_0x5b95ae(++_0x5afbba);}(_0xde59,0x100));var _0x9de5=function(_0xff5614,_0x5c662c){_0xff5614=_0xff5614-0x0;var _0x31e9e1=_0xde59[_0xff5614];return _0x31e9e1;};'use strict';var util=require(_0x9de5('0x0'));var _=require(_0x9de5('0x1'));var moment=require(_0x9de5('0x2'));var logger=require('../../../../config/logger')(_0x9de5('0x3'));var ipAgi=process['env']['XCALLY_IP_AGI']||_0x9de5('0x4');function getSeconds(_0x12e79d,_0x5c21ec){var _0x2e23c0=moment(_0x12e79d)[_0x9de5('0x5')](0x0);var _0x5c0592=moment(_0x5c21ec)[_0x9de5('0x5')](0x0);return _0x2e23c0['diff'](_0x5c0592,_0x9de5('0x6'));}exports[_0x9de5('0x7')]=function(_0x2eaacb){return function(_0x3f6446){logger['error'](_0x2eaacb,util[_0x9de5('0x8')](_0x3f6446,{'showHidden':![],'depth':null}));};};exports[_0x9de5('0x9')]=function(_0x56d66a,_0x5644f3){logger[_0x9de5('0xa')](_0x56d66a,util[_0x9de5('0x8')](_0x5644f3,{'showHidden':![],'depth':null}));};exports[_0x9de5('0xb')]=function(_0x5dbef7,_0x25e366){logger[_0x9de5('0xc')](_0x5dbef7,util[_0x9de5('0x8')](_0x25e366,{'showHidden':![],'depth':null}));};exports[_0x9de5('0xd')]=function(_0x1a33c2){return function(_0xcf7a9c){logger[_0x9de5('0xa')](_0x1a33c2,util[_0x9de5('0x8')](_0xcf7a9c,{'showHidden':![],'depth':null}));};};exports[_0x9de5('0xe')]=function(_0x2ce14b,_0x4075a6,_0x5e0b6e){return{'message':_0x2ce14b,'unlock':_0x4075a6,'active':_0x5e0b6e};};exports[_0x9de5('0xf')]=function(_0x18ff7c,_0x5cfb2c,_0x11af91){if(!_[_0x9de5('0x10')](_0x11af91)&&_0x9de5('0x11')===typeof _0x11af91&&!_['isEmpty'](_0x11af91)){if(!_['isUndefined'](_0x5cfb2c)&&_0x9de5('0x11')===typeof _0x5cfb2c&&!_[_0x9de5('0x12')](_0x5cfb2c)){return util[_0x9de5('0x13')](_0x9de5('0x14'),_0x5cfb2c,_0x11af91);}return util[_0x9de5('0x13')](_0x9de5('0x14'),_0x11af91,_0x11af91);}if(!_[_0x9de5('0x10')](_0x18ff7c)&&'string'===typeof _0x18ff7c&&!_[_0x9de5('0x12')](_0x18ff7c)){return _0x18ff7c;}return _0x9de5('0x15');};exports[_0x9de5('0x16')]=function(_0x588c35){if(_[_0x9de5('0x17')](_0x588c35)){return![];}return _0x588c35;};exports[_0x9de5('0x18')]=function(_0x5216f1,_0x5b0ff4,_0x429413,_0x478157,_0x2bc234,_0x315b7a){var _0x2ddb8c={'XMD-QUEUE':_0x5b0ff4['Queue']?_0x5b0ff4['Queue'][_0x9de5('0x19')]:'','XMD-CALLERID':_0x478157,'XMD-CALLERID-PREVIEW':_0x315b7a?util[_0x9de5('0x13')](_0x9de5('0x14'),_0x315b7a[_0x9de5('0x1a')],_0x315b7a[_0x9de5('0x1b')]):_0x478157,'XMD-DIALID':_0x2bc234,'XMD-CONTACTID':_0x5b0ff4[_0x9de5('0x1c')],'XMD-CDRTYPE':_0x9de5('0x1d'),'CALLERID(all)':_0x478157,'XMD-VOICEQUEUEID':_0x5b0ff4[_0x9de5('0x1e')],'XMD-DIALCHANNEL':_0x429413,'XMD-DIALTIMEOUT':_0x5216f1[_0x9de5('0x1f')]||0x1e,'XMD-DIALOPTIONS':util[_0x9de5('0x13')]('\x22rtTxX%s%s\x22',_0x5216f1['dialQueueProject2']?'g':'',_[_0x9de5('0x12')](_0x5216f1[_0x9de5('0x20')])?'':_0x9de5('0x21')),'XMD-DIALURL':_0x5216f1[_0x9de5('0x22')]||'','XMD-AGI':_0x5216f1[_0x9de5('0x23')]?util[_0x9de5('0x13')](_0x9de5('0x24'),ipAgi,_0x5216f1[_0x9de5('0x23')]):_0x9de5('0x25'),'XMD-AGIAFTER':_0x5216f1['dialQueueProject2']?util[_0x9de5('0x13')]('\x22agi://%s/square,%s\x22',ipAgi,_0x5216f1[_0x9de5('0x26')]):_0x9de5('0x25'),'XMD-ORIGINATECALLERIDNUM':_0x315b7a?_0x315b7a[_0x9de5('0x27')]:'','XMD-ORIGINATECALLERIDNAME':_0x315b7a?_0x315b7a['originatecalleridname']:'','XMD-DESTINATION':_0x9de5('0x28')};if(!_['isEmpty'](_0x5216f1['monitor_format'])){_0x2ddb8c[util[_0x9de5('0x13')]('%s',_0x9de5('0x29'))]=_0x5216f1[_0x9de5('0x20')];_0x2ddb8c[util[_0x9de5('0x13')]('%s',_0x9de5('0x2a'))]=_0x2bc234;}if(_0x5b0ff4&&_0x5b0ff4[_0x9de5('0x2b')]){for(var _0xf29d64 in _0x5b0ff4['Contact']){if(_0x5b0ff4[_0x9de5('0x2b')]['hasOwnProperty'](_0xf29d64)){if(!_['isNil'](_0x5b0ff4[_0x9de5('0x2b')][_0xf29d64])&&_0xf29d64!=='id'&&_0xf29d64!==_0x9de5('0x2c')&&_0xf29d64!==_0x9de5('0x2d')&&_0xf29d64!==_0x9de5('0x2e')){_0x2ddb8c[util['format'](_0x9de5('0x2f'),_0x9de5('0x30'),_[_0x9de5('0x31')](_0xf29d64))]=_0x5b0ff4[_0x9de5('0x2b')][_0xf29d64];}}}}return _0x2ddb8c;};exports[_0x9de5('0x32')]=function(_0x56af95){var _0x58bc8f={};for(var _0x24fce8 in _0x56af95){if(_0x56af95[_0x9de5('0x33')](_0x24fce8)){_0x58bc8f[util['format']('%s',_[_0x9de5('0x34')](_0x24fce8))]=_0x56af95[_0x24fce8];}}return{'variables':_0x58bc8f};};exports[_0x9de5('0x35')]=function(_0x5434af,_0x299407){if(!_[_0x9de5('0x17')](_0x5434af)){if(_0x5434af['hasOwnProperty'](_0x9de5('0x36'))){if(_0x5434af['originated']>0x0){_0x5434af['originated']-=0x1;}else{logger[_0x9de5('0xc')](_0x9de5('0x37'),_0x299407);}}}else{logger[_0x9de5('0xc')](_0x9de5('0x38'),_0x299407);}};exports[_0x9de5('0x39')]=function(_0xd3cdb3){var _0x51e772=moment()['format'](_0x9de5('0x3a'));_0xd3cdb3['state']=0xd;_0xd3cdb3[_0x9de5('0x3b')]=_0x9de5('0x3c');_0xd3cdb3[_0x9de5('0x3d')]=_0x51e772;_0xd3cdb3[_0x9de5('0x3e')]=_0x51e772;_0xd3cdb3[_0x9de5('0x3f')]=_0x51e772;};exports[_0x9de5('0x40')]=function(_0x563287,_0x5dc40c,_0x2c5d67){var _0x30baf0=moment()['format'](_0x9de5('0x3a'));_0x563287['state']=_0x5dc40c;_0x563287[_0x9de5('0x3b')]=_0x2c5d67;_0x563287[_0x9de5('0x3e')]=_0x30baf0;_0x563287[_0x9de5('0x41')]=getSeconds(_0x563287[_0x9de5('0x3e')],_0x563287[_0x9de5('0x3d')]);};exports['logLookAgent']=function(_0x11143d,_0x3c7f63,_0x52b534){_0x11143d[_0x9de5('0x42')]=_0x3c7f63;_0x11143d['UserId']=_0x52b534;};exports[_0x9de5('0x43')]=function(_0x59c5cb,_0x252d99,_0xc9855a){var _0x545547=moment()[_0x9de5('0x13')](_0x9de5('0x3a'));_0x59c5cb[_0x9de5('0x44')]=_0x252d99;_0x59c5cb[_0x9de5('0x3b')]=_0xc9855a;_0x59c5cb[_0x9de5('0x3e')]=_0x59c5cb[_0x9de5('0x3e')]?_0x59c5cb[_0x9de5('0x3e')]:_0x545547;_0x59c5cb['endtime']=_0x59c5cb[_0x9de5('0x3f')]?_0x59c5cb[_0x9de5('0x3f')]:_0x545547;_0x59c5cb[_0x9de5('0x41')]=getSeconds(_0x59c5cb['responsetime']||0x0,_0x59c5cb['starttime']||0x0);_0x59c5cb[_0x9de5('0x45')]=_0x59c5cb[_0x9de5('0x46')]?getSeconds(_0x59c5cb[_0x9de5('0x3f')],_0x59c5cb[_0x9de5('0x46')]):0x0;};exports[_0x9de5('0x47')]=function(_0x1cde7c){return _0x1cde7c==='Failure';};exports[_0x9de5('0x48')]=function(_0x33e608,_0x5604c1,_0x59ea9f,_0x2276e3,_0x49f051){var _0x3b10e1=_0x2276e3?_0x9de5('0x49'):_0x33e608[_0x9de5('0x1a')];_0x3b10e1=_0x49f051?_0x9de5('0x4a'):_0x3b10e1;return{'actionid':_0x33e608['uniqueid'],'action':_0x9de5('0x4b'),'channel':_0x33e608[_0x9de5('0x4c')],'callerid':util[_0x9de5('0x13')](_0x9de5('0x14'),_0x3b10e1,_0x33e608['calleridnum']),'Exten':_0x9de5('0x28'),'Context':'from-sip','Priority':'1','variable':_0x59ea9f,'timeout':(_0x5604c1[_0x9de5('0x4d')]||0x1e)*0x3e8,'async':!![],'channelid':_0x33e608['uniqueid']};};exports[_0x9de5('0x4e')]=function(_0x31355e){return _0x31355e[_0x9de5('0x4f')]+_0x31355e[_0x9de5('0x50')]+_0x31355e[_0x9de5('0x51')];};exports[_0x9de5('0x52')]=function(_0x3ec19d){var _0x8fcd44=_[_0x9de5('0x53')](_0x3ec19d);_0x8fcd44[_0x9de5('0x44')]=0xf;_0x8fcd44[_0x9de5('0x3b')]=_0x9de5('0x54');return _0x8fcd44;};exports[_0x9de5('0x55')]=function(_0xca49ba,_0x4281f8,_0x2f50a2){var _0x3a8b57={};_0x3a8b57[_0x4281f8]=_0xca49ba[_0x4281f8];_0x3a8b57['active']=![];_0x3a8b57[_0x9de5('0x56')]=moment()[_0x9de5('0x57')](_0x2f50a2,_0x9de5('0x58'))[_0x9de5('0x13')](_0x9de5('0x3a'));_0x3a8b57['ContactId']=_0xca49ba[_0x9de5('0x1c')];_0x3a8b57[_0x9de5('0x59')]=_0xca49ba['ListId'];_0x3a8b57['VoiceQueueId']=_0xca49ba[_0x9de5('0x1e')]||undefined;return _0x3a8b57;};exports[_0x9de5('0x5a')]=function(_0x1e1397,_0xd7e444){if(!_[_0x9de5('0x17')](_0x1e1397)){if(_0x1e1397['pTalking']>0x0){_0x1e1397['pTalking']-=0x1;}else{logger[_0x9de5('0xc')](_0xd7e444,_0x9de5('0x5b'));}}else{logger[_0x9de5('0xc')](_0xd7e444,_0x9de5('0x5c'));}};exports[_0x9de5('0x5d')]=function(_0x19f968){if(_0x19f968<=0x0){return!![];}return![];};exports[_0x9de5('0x5e')]=function(_0x273dbc,_0x2cba15){_0x273dbc[_0x9de5('0x5f')]=_0x2cba15;_0x273dbc[_0x9de5('0x19')]=_0x273dbc[_0x9de5('0x60')];_0x273dbc[_0x9de5('0x61')]=_0x273dbc[_0x9de5('0x4c')];return _0x273dbc;};exports[_0x9de5('0x62')]=function(_0x57d63d){var _0x39530a={};_0x39530a[_0x9de5('0x60')]=_0x57d63d[_0x9de5('0x60')];_0x39530a['interface']=_0x57d63d[_0x9de5('0x4c')];_0x39530a[_0x9de5('0x63')]=_0x57d63d[_0x9de5('0x63')];return _0x39530a;};exports[_0x9de5('0x64')]=function(_0x5c7eeb){var _0x51f88d=[];for(var _0xabeeed in _0x5c7eeb){if(_0x5c7eeb[_0x9de5('0x33')](_0xabeeed)){if(!_[_0x9de5('0x17')](_0x5c7eeb[_0xabeeed])&&_0x5c7eeb[_0xabeeed][_0x9de5('0x44')]==='not_inuse'&&_0x5c7eeb[_0xabeeed][_0x9de5('0x65')]===_0x9de5('0x66')){_0x51f88d['push'](_0x5c7eeb[_0xabeeed]['id']);}}}return _0x51f88d;};exports[_0x9de5('0x67')]=function(_0x4b99d6){var _0x5eac59=moment()[_0x9de5('0x5')](0x0);var _0x2dae39=moment(_0x4b99d6)[_0x9de5('0x5')](0x0);return _0x5eac59[_0x9de5('0x68')](_0x2dae39,_0x9de5('0x6'));};exports['createBody']=function(_0x76aac9){return{'active':![],'recallme':![],'UserId':null,'ContactId':_0x76aac9['ContactId'],'ListId':_0x76aac9['ListId'],'VoiceQueueId':_0x76aac9[_0x9de5('0x1e')]||undefined,'CampaignId':_0x76aac9[_0x9de5('0x69')]||undefined};};exports['filterKey']=function(_0x182881){if(_0x182881===_0x9de5('0x63')||_0x182881===_0x9de5('0x6a')||_0x182881===_0x9de5('0x60')||_0x182881===_0x9de5('0x6b')||_0x182881===_0x9de5('0x6c')||_0x182881===_0x9de5('0x6d')||_0x182881==='membername'||_0x182881===_0x9de5('0x4c')||_0x182881==='calleridname'||_0x182881==='active'||_0x182881===_0x9de5('0x1b')||_0x182881===_0x9de5('0x56')||_0x182881===_0x9de5('0x4f')||_0x182881===_0x9de5('0x50')||_0x182881==='countnoanswerretry'||_0x182881==='countglobal'||_0x182881==='callback'||_0x182881===_0x9de5('0x6e')||_0x182881===_0x9de5('0x6f')||_0x182881===_0x9de5('0x70')||_0x182881==='ContactId'||_0x182881===_0x9de5('0x59')||_0x182881===_0x9de5('0x71')||_0x182881===_0x9de5('0x1e')||_0x182881===_0x9de5('0x72')||_0x182881===_0x9de5('0x73')||_0x182881==='xmd-queue'||_0x182881===_0x9de5('0x74')||_0x182881===_0x9de5('0x75')||_0x182881===_0x9de5('0x76')||_0x182881==='xmd-dialtimeout'||_0x182881===_0x9de5('0x77')||_0x182881===_0x9de5('0x78')||_0x182881==='xmd-dialchannel'||_0x182881===_0x9de5('0x79')||_0x182881==='xmd-cdrtype'||_0x182881===_0x9de5('0x7a')||_0x182881===_0x9de5('0x7b')||_0x182881==='xmd-agi'||_0x182881===_0x9de5('0x7c')||_0x182881==='rtpaudioqosbridged'||_0x182881===_0x9de5('0x7d')||_0x182881===_0x9de5('0x7e')||_0x182881===_0x9de5('0x7f')||_0x182881===_0x9de5('0x80')||_0x182881==='rtpaudioqosrtt'||_0x182881===_0x9de5('0x81')||_0x182881===_0x9de5('0x7c')||_0x182881===_0x9de5('0x82')||_0x182881===_0x9de5('0x7d')||_0x182881===_0x9de5('0x7e')||_0x182881===_0x9de5('0x7f')||_0x182881==='rtpaudioqoslossbridged'||_0x182881===_0x9de5('0x83')||_0x182881==='rtpaudioqosrttbridged'||_0x182881==='bridgepeer'||_0x182881===_0x9de5('0x84')||_0x182881==='state'||_0x182881===_0x9de5('0x3b')){return![];}return!![];};exports[_0x9de5('0x85')]=function(_0x339275,_0x36eaf6){var _0x2d59a3,_0x258f37,_0x2569fb;if(_0x36eaf6<=0x0){_0x36eaf6=0x1;}_0x2d59a3=new RegExp('\x5cw{0,'+_0x36eaf6+'}$');_0x258f37=Math['pow'](0xa,_0x36eaf6-0x1);_0x2569fb=Math[_0x9de5('0x86')](0xa,_0x36eaf6)-0x1;return util['format']('%s',_['replace'](_0x339275,_0x2d59a3,_[_0x9de5('0x87')](_0x258f37,_0x2569fb)));};exports[_0x9de5('0x88')]=function(_0x5d315c){var _0x228425=_0x5d315c['match'](/"(.*?)"/);return _0x228425?_0x228425[0x1]:_0x5d315c;};exports[_0x9de5('0x89')]=function(_0x34cb9e){var _0x1ee4d0=_0x34cb9e[_0x9de5('0x8a')](/<(.*?)>/);return _0x1ee4d0?_0x1ee4d0[0x1]:_0x34cb9e;};
\ No newline at end of file
index ade82b5..3ac2666 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3645=['string','number','boolean','queueremove','queuepause','reload','voicequeuechannel','voicechannel','voicequeuechannelhangup','voicequeuechannelredirect'];(function(_0x2fc8a0,_0x3cb528){var _0x500b32=function(_0x4d7021){while(--_0x4d7021){_0x2fc8a0['push'](_0x2fc8a0['shift']());}};_0x500b32(++_0x3cb528);}(_0x3645,0x154));var _0x5364=function(_0x4aba15,_0x4e90aa){_0x4aba15=_0x4aba15-0x0;var _0x1c8122=_0x3645[_0x4aba15];return _0x1c8122;};'use strict';exports['queueadd']={'queue':{'type':_0x5364('0x0'),'required':!![]},'interface':{'type':_0x5364('0x0'),'required':!![]},'membername':{'type':_0x5364('0x0'),'required':!![]},'penalty':{'type':_0x5364('0x1'),'required':![]},'paused':{'type':_0x5364('0x2'),'required':![]}};exports[_0x5364('0x3')]={'queue':{'type':_0x5364('0x0'),'required':!![]},'interface':{'type':'string','required':!![]}};exports[_0x5364('0x4')]={'interface':{'type':_0x5364('0x0'),'required':!![]},'paused':{'type':_0x5364('0x2')},'reason':{'type':_0x5364('0x0'),'required':![]}};exports[_0x5364('0x5')]={'module':{'type':_0x5364('0x0'),'required':![]}};exports[_0x5364('0x6')]={'uniqueid':{'type':_0x5364('0x0'),'required':!![]}};exports[_0x5364('0x7')]={'uniqueid':{'type':'string','required':!![]},'filename':{'type':_0x5364('0x0')},'format':{'type':_0x5364('0x0')},'mixmonitorid':{'type':_0x5364('0x0')}};exports[_0x5364('0x8')]={'uniqueid':{'type':_0x5364('0x0'),'required':!![]}};exports[_0x5364('0x9')]={'uniqueid':{'type':_0x5364('0x0'),'required':!![]},'exten':{'type':_0x5364('0x0'),'required':!![]},'context':{'type':_0x5364('0x0')}};
\ No newline at end of file
+var _0x7217=['reload','voicequeuechannel','voicechannel','voicequeuechannelhangup','queueadd','string','number','boolean','queueremove','queuepause'];(function(_0x176643,_0x14d05a){var _0x48b81a=function(_0x59f1f3){while(--_0x59f1f3){_0x176643['push'](_0x176643['shift']());}};_0x48b81a(++_0x14d05a);}(_0x7217,0x19e));var _0x7721=function(_0x1b349a,_0x22222c){_0x1b349a=_0x1b349a-0x0;var _0x5d1f7c=_0x7217[_0x1b349a];return _0x5d1f7c;};'use strict';exports[_0x7721('0x0')]={'queue':{'type':'string','required':!![]},'interface':{'type':_0x7721('0x1'),'required':!![]},'membername':{'type':_0x7721('0x1'),'required':!![]},'penalty':{'type':_0x7721('0x2'),'required':![]},'paused':{'type':_0x7721('0x3'),'required':![]}};exports[_0x7721('0x4')]={'queue':{'type':'string','required':!![]},'interface':{'type':'string','required':!![]}};exports[_0x7721('0x5')]={'interface':{'type':_0x7721('0x1'),'required':!![]},'paused':{'type':_0x7721('0x3')},'reason':{'type':_0x7721('0x1'),'required':![]}};exports[_0x7721('0x6')]={'module':{'type':_0x7721('0x1'),'required':![]}};exports[_0x7721('0x7')]={'uniqueid':{'type':_0x7721('0x1'),'required':!![]}};exports[_0x7721('0x8')]={'uniqueid':{'type':_0x7721('0x1'),'required':!![]},'filename':{'type':_0x7721('0x1')},'format':{'type':_0x7721('0x1')},'mixmonitorid':{'type':_0x7721('0x1')}};exports[_0x7721('0x9')]={'uniqueid':{'type':_0x7721('0x1'),'required':!![]}};exports['voicequeuechannelredirect']={'uniqueid':{'type':_0x7721('0x1'),'required':!![]},'exten':{'type':_0x7721('0x1'),'required':!![]},'context':{'type':_0x7721('0x1')}};
\ No newline at end of file
index 8a548ae..b14e895 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xccef=['../model/campaign','../model/voiceExtension','../model/salesforceAccount','../model/freshdeskAccount','../model/zohoAccount','../model/deskAccount','../model/dynamics365Account','../model/faxAccount','agents','telephones','voiceQueues','campaigns','templates','voiceExtensions','queueChannels','outboundChannels','timers','zendeskAccounts','sugarcrmAccounts','freshdeskAccounts','zohoAccounts','deskAccounts','dynamics365Accounts','faxAccounts','mapKeys','format','SIP/%s','name','hasOwnProperty','isNil','interface','total','answered','sumDuration','isEmpty','ivrAnswerCallsDay','unmanaged','abandoned','sumHoldTime','sumBillable','outboundNoAnswerCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundUnknownCallsDay','outboundDropCallsDayTimeout','outboundDropCallsDayCallersExit','outboundRejectCallsDay','outboundReCallsDay','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','queueStatusComplete','prototype','mergeFromDatabase','initAgents','length','initTelephones','isUndefined','initTrunks','trunks','initVoiceQueues','initTriggers','triggers','initTemplates','initZendeskAccounts','initSalesforceAccounts','salesforceAccounts','initFreshdeskAccounts','initDeskAccounts','vtigerAccounts','servicenowAccounts','initVoiceQueueHopperHistory','merge','initVoiceQueueReports','groupBy','uniqueid','queue','queuecallerexit','queuecallerabandon','diff','seconds','queuecallercompleteAt','queuecallerexitAt','queuecallerjoinAt','queuecallercomplete','queuecallerleaveAt','outbound','duration','disposition','ANSWERED','billableseconds','initCampaigns','initVoiceExtensions','initCampaignHopperHistory','initFaxAccounts','util','moment','../model/agent','../model/trunk','../model/voiceQueue','../model/trigger'];(function(_0x533e4e,_0x4eba54){var _0x1f14bb=function(_0x33a485){while(--_0x33a485){_0x533e4e['push'](_0x533e4e['shift']());}};_0x1f14bb(++_0x4eba54);}(_0xccef,0x1ee));var _0xfcce=function(_0x4565bf,_0x5ad9d6){_0x4565bf=_0x4565bf-0x0;var _0x5610ba=_0xccef[_0x4565bf];return _0x5610ba;};'use strict';var BPromise=require('bluebird');var util=require(_0xfcce('0x0'));var _=require('lodash');var moment=require(_0xfcce('0x1'));var Agent=require(_0xfcce('0x2'));var Telephone=require('../model/telephone');var Trunk=require(_0xfcce('0x3'));var VoiceQueue=require(_0xfcce('0x4'));var Trigger=require(_0xfcce('0x5'));var Template=require('../model/template');var Campaign=require(_0xfcce('0x6'));var VoiceExtension=require(_0xfcce('0x7'));var ZendeskAccount=require('../model/zendeskAccount');var SalesforceAccount=require(_0xfcce('0x8'));var FreshdeskAccount=require(_0xfcce('0x9'));var SugarcrmAccount=require('../model/sugarcrmAccount');var ZohoAccount=require(_0xfcce('0xa'));var DeskAccount=require(_0xfcce('0xb'));var VtigerAccount=require('../model/vtigerAccount');var ServicenowAccount=require('../model/servicenowAccount');var Dynamics365Account=require(_0xfcce('0xc'));var FaxAccount=require(_0xfcce('0xd'));var Realtime=function(){this[_0xfcce('0xe')]={};this[_0xfcce('0xf')]={};this['trunks']={};this[_0xfcce('0x10')]={};this['triggers']={};this[_0xfcce('0x11')]={};this[_0xfcce('0x12')]={};this['outbound']={'total':0x0,'answered':0x0,'sumHoldTime':0x0,'sumDuration':0x0,'sumBillable':0x0};this[_0xfcce('0x13')]={};this['channels']={};this[_0xfcce('0x14')]={};this[_0xfcce('0x15')]={};this[_0xfcce('0x16')]={};this[_0xfcce('0x17')]={};this['salesforceAccounts']={};this[_0xfcce('0x18')]={};this[_0xfcce('0x19')]={};this[_0xfcce('0x1a')]={};this[_0xfcce('0x1b')]={};this['vtigerAccounts']={};this['servicenowAccounts']={};this[_0xfcce('0x1c')]={};this[_0xfcce('0x1d')]={};};function freeIsNotKey(_0x4c5f3d,_0x2de5e4,_0x368621){var _0x5e4994=_[_0xfcce('0x1e')](_0x4c5f3d,function(_0x5b7b9b,_0x9a3bef){return _0x5b7b9b[_0x368621];});for(var _0xa220b1 in _0x2de5e4){if(_0x2de5e4['hasOwnProperty'](_0xa220b1)){if(!_0x5e4994[_0xa220b1]){delete _0x2de5e4[_0xa220b1];}}}}function freeIsNotKeySip(_0x223ca0,_0x15ec3f){var _0x4015ae=_[_0xfcce('0x1e')](_0x223ca0,function(_0x17d8fb,_0x4f43c5){return util[_0xfcce('0x1f')](_0xfcce('0x20'),_0x17d8fb[_0xfcce('0x21')]);});for(var _0x28749b in _0x15ec3f){if(_0x15ec3f[_0xfcce('0x22')](_0x28749b)){if(!_0x4015ae[_0x28749b]){delete _0x15ec3f[_0x28749b];}}}}function freeIsNotKeyAgent(_0x22de11,_0xbea208){var _0x309030=_['mapKeys'](_0x22de11,function(_0x114498,_0x28a2cc){var _0xdf091=_[_0xfcce('0x23')](_0x114498[_0xfcce('0x24')])?util[_0xfcce('0x1f')](_0xfcce('0x20'),_0x114498[_0xfcce('0x21')]):_0x114498[_0xfcce('0x24')];return _0xdf091;});for(var _0x487fcc in _0xbea208){if(_0xbea208['hasOwnProperty'](_0x487fcc)){if(!_0x309030[_0x487fcc]){delete _0xbea208[_0x487fcc];}}}}function clearVoiceCallReports(_0x1fca14){_0x1fca14[_0xfcce('0x25')]=0x0;_0x1fca14[_0xfcce('0x26')]=0x0;_0x1fca14['sumHoldTime']=0x0;_0x1fca14[_0xfcce('0x27')]=0x0;_0x1fca14['sumBillable']=0x0;}function clearCampaigns(_0x1ba786){if(!_[_0xfcce('0x28')](_0x1ba786)){for(var _0x36797e in _0x1ba786){if(_0x1ba786[_0xfcce('0x22')](_0x36797e)){_0x1ba786[_0x36797e]['ivrTotalCallsDays']=0x0;_0x1ba786[_0x36797e][_0xfcce('0x29')]=0x0;}}}}function clearVoiceQueues(_0x37e42d){if(!_[_0xfcce('0x28')](_0x37e42d)){for(var _0xa11514 in _0x37e42d){if(_0x37e42d['hasOwnProperty'](_0xa11514)){_0x37e42d[_0xa11514][_0xfcce('0x25')]=0x0;_0x37e42d[_0xa11514]['answered']=0x0;_0x37e42d[_0xa11514][_0xfcce('0x2a')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x2b')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x2c')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x27')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x2d')]=0x0;_0x37e42d[_0xa11514]['outboundAnswerAgiCallsDay']=0x0;_0x37e42d[_0xa11514][_0xfcce('0x2e')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x2f')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x30')]=0x0;_0x37e42d[_0xa11514]['outboundNoSuchCallsDay']=0x0;_0x37e42d[_0xa11514][_0xfcce('0x31')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x32')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x33')]=0x0;_0x37e42d[_0xa11514]['outboundBlacklistCallsDay']=0x0;_0x37e42d[_0xa11514]['outboundOriginateFailureCallsDay']=0x0;_0x37e42d[_0xa11514][_0xfcce('0x34')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x35')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x36')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x37')]=0x0;_0x37e42d[_0xa11514][_0xfcce('0x38')]=!![];}}}}Realtime[_0xfcce('0x39')][_0xfcce('0x3a')]=function(_0x4974ab,_0x2ac161){for(var _0x431e4a in _0x2ac161){if(_0x4974ab['hasOwnProperty'](_0x431e4a)){_0x4974ab[_0x431e4a]=_0x2ac161[_0x431e4a];}}};Realtime[_0xfcce('0x39')][_0xfcce('0x3b')]=function(){var _0x999fab=this;return function(_0x4be9f8){if(_0x4be9f8){freeIsNotKeyAgent(_0x4be9f8,_0x999fab[_0xfcce('0xe')]);for(var _0x304d60=0x0,_0x49ed79={},_0x2521d7={};_0x304d60<_0x4be9f8[_0xfcce('0x3c')];_0x304d60+=0x1){_0x49ed79=_0x4be9f8[_0x304d60];var _0x515417=_[_0xfcce('0x23')](_0x49ed79[_0xfcce('0x24')])?util[_0xfcce('0x1f')](_0xfcce('0x20'),_0x49ed79[_0xfcce('0x21')]):_0x49ed79[_0xfcce('0x24')];if(_['isUndefined'](_0x999fab[_0xfcce('0xe')][_0x515417])){_0x999fab[_0xfcce('0xe')][_0x515417]=new Agent(_0x49ed79);}else{_0x999fab['mergeFromDatabase'](_0x999fab[_0xfcce('0xe')][_0x515417],_0x49ed79);}}}return _0x999fab[_0xfcce('0xe')];};};Realtime[_0xfcce('0x39')][_0xfcce('0x3d')]=function(){var _0x4b44c5=this;return function(_0x100a46){if(_0x100a46){freeIsNotKeySip(_0x100a46,_0x4b44c5['telephones']);for(var _0x2539af=0x0,_0x2893bc={},_0xf53823={};_0x2539af<_0x100a46[_0xfcce('0x3c')];_0x2539af+=0x1){_0x2893bc=_0x100a46[_0x2539af];if(_[_0xfcce('0x3e')](_0x4b44c5[_0xfcce('0xf')][util['format']('SIP/%s',_0x2893bc[_0xfcce('0x21')])])){_0x4b44c5['telephones'][util[_0xfcce('0x1f')](_0xfcce('0x20'),_0x2893bc['name'])]=new Telephone(_0x2893bc);}else{_0x4b44c5['mergeFromDatabase'](_0x4b44c5[_0xfcce('0xf')][util['format']('SIP/%s',_0x2893bc[_0xfcce('0x21')])],_0x2893bc);}}}return _0x4b44c5[_0xfcce('0xf')];};};Realtime[_0xfcce('0x39')][_0xfcce('0x3f')]=function(){var _0x495c79=this;return function(_0x28de0e){if(_0x28de0e){freeIsNotKeySip(_0x28de0e,_0x495c79[_0xfcce('0x40')]);for(var _0x58e127=0x0,_0x501b5e={},_0x3cc8f3={};_0x58e127<_0x28de0e['length'];_0x58e127+=0x1){_0x501b5e=_0x28de0e[_0x58e127];if(_[_0xfcce('0x3e')](_0x495c79['trunks'][util['format']('SIP/%s',_0x501b5e[_0xfcce('0x21')])])){_0x495c79[_0xfcce('0x40')][util[_0xfcce('0x1f')](_0xfcce('0x20'),_0x501b5e[_0xfcce('0x21')])]=new Trunk(_0x501b5e);}else{_0x495c79['mergeFromDatabase'](_0x495c79[_0xfcce('0x40')][util['format'](_0xfcce('0x20'),_0x501b5e['name'])],_0x501b5e);}}}return _0x495c79['trunks'];};};Realtime[_0xfcce('0x39')][_0xfcce('0x41')]=function(){var _0x37819c=this;return function(_0x41c606){if(_0x41c606){freeIsNotKey(_0x41c606,_0x37819c['voiceQueues'],_0xfcce('0x21'));for(var _0x324d05=0x0,_0x2be900={},_0x168e83={};_0x324d05<_0x41c606[_0xfcce('0x3c')];_0x324d05+=0x1){_0x2be900=_0x41c606[_0x324d05];if(_[_0xfcce('0x3e')](_0x37819c[_0xfcce('0x10')][_0x2be900[_0xfcce('0x21')]])){_0x37819c[_0xfcce('0x10')][_0x2be900[_0xfcce('0x21')]]=new VoiceQueue(_0x2be900);}else{_0x37819c[_0xfcce('0x3a')](_0x37819c['voiceQueues'][_0x2be900[_0xfcce('0x21')]],_0x2be900);}}}return _0x37819c[_0xfcce('0x10')];};};Realtime[_0xfcce('0x39')][_0xfcce('0x42')]=function(){var _0x5e3338=this;return function(_0x4c57ee){if(_0x4c57ee){freeIsNotKey(_0x4c57ee,_0x5e3338[_0xfcce('0x43')],'id');for(var _0x3badbe=0x0,_0x4f8d8c={},_0x2b3bcc={};_0x3badbe<_0x4c57ee[_0xfcce('0x3c')];_0x3badbe+=0x1){_0x4f8d8c=_0x4c57ee[_0x3badbe];if(_[_0xfcce('0x3e')](_0x5e3338[_0xfcce('0x43')][_0x4f8d8c['id']])){_0x5e3338[_0xfcce('0x43')][_0x4f8d8c['id']]=new Trigger(_0x4f8d8c);}else{_0x5e3338[_0xfcce('0x3a')](_0x5e3338['triggers'][_0x4f8d8c['id']],_0x4f8d8c);}}}return _0x5e3338[_0xfcce('0x43')];};};Realtime[_0xfcce('0x39')][_0xfcce('0x44')]=function(){var _0x1feedf=this;return function(_0x5e18f9){if(_0x5e18f9){freeIsNotKey(_0x5e18f9,_0x1feedf['templates'],'id');for(var _0x236cce=0x0,_0x961aa4={},_0x32b970={};_0x236cce<_0x5e18f9['length'];_0x236cce+=0x1){_0x961aa4=_0x5e18f9[_0x236cce];if(_[_0xfcce('0x3e')](_0x1feedf[_0xfcce('0x12')][_0x961aa4['id']])){_0x1feedf[_0xfcce('0x12')][_0x961aa4['id']]=new Template(_0x961aa4);}else{_0x1feedf['mergeFromDatabase'](_0x1feedf[_0xfcce('0x12')][_0x961aa4['id']],_0x961aa4);}}}return _0x1feedf[_0xfcce('0x12')];};};Realtime[_0xfcce('0x39')][_0xfcce('0x45')]=function(){var _0x4a0245=this;return function(_0x59d0a8){if(_0x59d0a8){freeIsNotKey(_0x59d0a8,_0x4a0245[_0xfcce('0x17')],'id');for(var _0x3f8e4f=0x0,_0x95eaf9={},_0xa1f111={};_0x3f8e4f<_0x59d0a8[_0xfcce('0x3c')];_0x3f8e4f+=0x1){_0x95eaf9=_0x59d0a8[_0x3f8e4f];if(_['isUndefined'](_0x4a0245[_0xfcce('0x17')][_0x95eaf9['id']])){_0x4a0245[_0xfcce('0x17')][_0x95eaf9['id']]=new ZendeskAccount(_0x95eaf9);}else{_0x4a0245['mergeFromDatabase'](_0x4a0245[_0xfcce('0x17')][_0x95eaf9['id']],_0x95eaf9);}}}return _0x4a0245[_0xfcce('0x17')];};};Realtime['prototype'][_0xfcce('0x46')]=function(){var _0x581fd2=this;return function(_0x378b99){if(_0x378b99){freeIsNotKey(_0x378b99,_0x581fd2[_0xfcce('0x47')],'id');for(var _0x501415=0x0,_0x47142f={},_0x2f1f65={};_0x501415<_0x378b99[_0xfcce('0x3c')];_0x501415+=0x1){_0x47142f=_0x378b99[_0x501415];if(_[_0xfcce('0x3e')](_0x581fd2['salesforceAccounts'][_0x47142f['id']])){_0x581fd2[_0xfcce('0x47')][_0x47142f['id']]=new SalesforceAccount(_0x47142f);}else{_0x581fd2[_0xfcce('0x3a')](_0x581fd2[_0xfcce('0x47')][_0x47142f['id']],_0x47142f);}}}return _0x581fd2[_0xfcce('0x47')];};};Realtime['prototype'][_0xfcce('0x48')]=function(){var _0x13b45a=this;return function(_0x563bc){if(_0x563bc){freeIsNotKey(_0x563bc,_0x13b45a[_0xfcce('0x19')],'id');for(var _0x569a85=0x0,_0x2d3603={},_0x57975d={};_0x569a85<_0x563bc[_0xfcce('0x3c')];_0x569a85+=0x1){_0x2d3603=_0x563bc[_0x569a85];if(_[_0xfcce('0x3e')](_0x13b45a[_0xfcce('0x19')][_0x2d3603['id']])){_0x13b45a[_0xfcce('0x19')][_0x2d3603['id']]=new FreshdeskAccount(_0x2d3603);}else{_0x13b45a[_0xfcce('0x3a')](_0x13b45a[_0xfcce('0x19')][_0x2d3603['id']],_0x2d3603);}}}return _0x13b45a[_0xfcce('0x19')];};};Realtime['prototype']['initZohoAccounts']=function(){var _0x98251a=this;return function(_0x3edae8){if(_0x3edae8){freeIsNotKey(_0x3edae8,_0x98251a[_0xfcce('0x1a')],'id');for(var _0x451f5f=0x0,_0x4a4d39={},_0x3f5ccc={};_0x451f5f<_0x3edae8[_0xfcce('0x3c')];_0x451f5f+=0x1){_0x4a4d39=_0x3edae8[_0x451f5f];if(_['isUndefined'](_0x98251a[_0xfcce('0x1a')][_0x4a4d39['id']])){_0x98251a[_0xfcce('0x1a')][_0x4a4d39['id']]=new ZohoAccount(_0x4a4d39);}else{_0x98251a['mergeFromDatabase'](_0x98251a['zohoAccounts'][_0x4a4d39['id']],_0x4a4d39);}}}return _0x98251a['zohoAccounts'];};};Realtime['prototype'][_0xfcce('0x49')]=function(){var _0x2d1829=this;return function(_0x1283d4){if(_0x1283d4){freeIsNotKey(_0x1283d4,_0x2d1829[_0xfcce('0x1b')],'id');for(var _0x4d855b=0x0,_0x4d7e57={},_0x393900={};_0x4d855b<_0x1283d4[_0xfcce('0x3c')];_0x4d855b+=0x1){_0x4d7e57=_0x1283d4[_0x4d855b];if(_[_0xfcce('0x3e')](_0x2d1829[_0xfcce('0x1b')][_0x4d7e57['id']])){_0x2d1829[_0xfcce('0x1b')][_0x4d7e57['id']]=new DeskAccount(_0x4d7e57);}else{_0x2d1829[_0xfcce('0x3a')](_0x2d1829[_0xfcce('0x1b')][_0x4d7e57['id']],_0x4d7e57);}}}return _0x2d1829['deskAccounts'];};};Realtime[_0xfcce('0x39')]['initSugarcrmAccounts']=function(){var _0x3ad143=this;return function(_0x284252){if(_0x284252){freeIsNotKey(_0x284252,_0x3ad143[_0xfcce('0x18')],'id');for(var _0x21b072=0x0,_0x53349b={},_0x1d89f1={};_0x21b072<_0x284252[_0xfcce('0x3c')];_0x21b072+=0x1){_0x53349b=_0x284252[_0x21b072];if(_['isUndefined'](_0x3ad143[_0xfcce('0x18')][_0x53349b['id']])){_0x3ad143['sugarcrmAccounts'][_0x53349b['id']]=new SugarcrmAccount(_0x53349b);}else{_0x3ad143[_0xfcce('0x3a')](_0x3ad143[_0xfcce('0x18')][_0x53349b['id']],_0x53349b);}}}return _0x3ad143[_0xfcce('0x18')];};};Realtime[_0xfcce('0x39')]['initVtigerAccounts']=function(){var _0x4d02cf=this;return function(_0x3e5703){if(_0x3e5703){freeIsNotKey(_0x3e5703,_0x4d02cf[_0xfcce('0x4a')],'id');for(var _0x5c2a62=0x0,_0x194d8d={},_0x10eb45={};_0x5c2a62<_0x3e5703[_0xfcce('0x3c')];_0x5c2a62+=0x1){_0x194d8d=_0x3e5703[_0x5c2a62];if(_[_0xfcce('0x3e')](_0x4d02cf[_0xfcce('0x4a')][_0x194d8d['id']])){_0x4d02cf['vtigerAccounts'][_0x194d8d['id']]=new VtigerAccount(_0x194d8d);}else{_0x4d02cf[_0xfcce('0x3a')](_0x4d02cf[_0xfcce('0x4a')][_0x194d8d['id']],_0x194d8d);}}}return _0x4d02cf['vtigerAccounts'];};};Realtime[_0xfcce('0x39')]['initServicenowAccounts']=function(){var _0x252c56=this;return function(_0x2db292){if(_0x2db292){freeIsNotKey(_0x2db292,_0x252c56[_0xfcce('0x4b')],'id');for(var _0x264432=0x0,_0x218ac9={},_0x415972={};_0x264432<_0x2db292['length'];_0x264432+=0x1){_0x218ac9=_0x2db292[_0x264432];if(_[_0xfcce('0x3e')](_0x252c56[_0xfcce('0x4b')][_0x218ac9['id']])){_0x252c56[_0xfcce('0x4b')][_0x218ac9['id']]=new ServicenowAccount(_0x218ac9);}else{_0x252c56[_0xfcce('0x3a')](_0x252c56[_0xfcce('0x4b')][_0x218ac9['id']],_0x218ac9);}}}return _0x252c56['servicenowAccounts'];};};Realtime[_0xfcce('0x39')]['initDynamics365Accounts']=function(){var _0x30ba4f=this;return function(_0x45cebb){if(_0x45cebb){freeIsNotKey(_0x45cebb,_0x30ba4f[_0xfcce('0x1c')],'id');for(var _0x1a9246=0x0,_0xcd378={},_0x33e6c7={};_0x1a9246<_0x45cebb[_0xfcce('0x3c')];_0x1a9246+=0x1){_0xcd378=_0x45cebb[_0x1a9246];if(_['isUndefined'](_0x30ba4f['dynamics365Accounts'][_0xcd378['id']])){_0x30ba4f[_0xfcce('0x1c')][_0xcd378['id']]=new Dynamics365Account(_0xcd378);}else{_0x30ba4f[_0xfcce('0x3a')](_0x30ba4f[_0xfcce('0x1c')][_0xcd378['id']],_0xcd378);}}}return _0x30ba4f['dynamics365Accounts'];};};Realtime[_0xfcce('0x39')][_0xfcce('0x4c')]=function(){var _0xa93f2d=this;return function(_0x537590){for(var _0x3990d8=0x0;_0x3990d8<_0x537590['length'];_0x3990d8+=0x1){_[_0xfcce('0x4d')](_0xa93f2d['voiceQueues'][_0x537590[_0x3990d8]['name']],_0x537590[_0x3990d8]);}return _0xa93f2d[_0xfcce('0x10')];};};Realtime[_0xfcce('0x39')][_0xfcce('0x4e')]=function(){var _0x3ef631=this;return function(_0x5b2459){clearVoiceQueues(_0x3ef631[_0xfcce('0x10')]);if(_0x5b2459){_0x5b2459=_[_0xfcce('0x4f')](_0x5b2459,_0xfcce('0x50'));for(var _0x65caef in _0x5b2459){if(_0x5b2459[_0xfcce('0x22')](_0x65caef)){var _0x3fb703={};for(var _0x8ba5bd=0x0;_0x8ba5bd<_0x5b2459[_0x65caef][_0xfcce('0x3c')];_0x8ba5bd+=0x1){var _0x5abc95=_0x5b2459[_0x65caef][_0x8ba5bd][_0xfcce('0x51')];if(_0x3ef631[_0xfcce('0x10')][_0x5abc95]){if(_0x5b2459[_0x65caef][_0x8ba5bd][_0xfcce('0x52')]){_0x3ef631[_0xfcce('0x10')][_0x5abc95][_0xfcce('0x2a')]+=0x1;}if(_0x5b2459[_0x65caef][_0x8ba5bd][_0xfcce('0x53')]){_0x3ef631['voiceQueues'][_0x5abc95][_0xfcce('0x2b')]+=0x1;}_0x3ef631[_0xfcce('0x10')][_0x5abc95][_0xfcce('0x2c')]+=moment(_0x5b2459[_0x65caef][_0x8ba5bd]['queuecallerleaveAt'])[_0xfcce('0x54')](moment(_0x5b2459[_0x65caef][_0x8ba5bd]['queuecallerjoinAt']),_0xfcce('0x55'))||0x0;if(_0x8ba5bd===_0x5b2459[_0x65caef][_0xfcce('0x3c')]-0x1){_0x3ef631[_0xfcce('0x10')][_0x5abc95][_0xfcce('0x27')]+=moment(_0x5b2459[_0x65caef][_0x8ba5bd][_0xfcce('0x56')]||_0x5b2459[_0x65caef][_0x8ba5bd]['queuecallerabandonAt']||_0x5b2459[_0x65caef][_0x8ba5bd][_0xfcce('0x57')])[_0xfcce('0x54')](moment(_0x5b2459[_0x65caef][_0x8ba5bd][_0xfcce('0x58')]),_0xfcce('0x55'))||0x0;_0x3ef631[_0xfcce('0x10')][_0x5abc95][_0xfcce('0x25')]+=0x1;if(_0x5b2459[_0x65caef][_0x8ba5bd][_0xfcce('0x59')]){_0x3ef631['voiceQueues'][_0x5abc95][_0xfcce('0x26')]+=0x1;_0x3ef631[_0xfcce('0x10')][_0x5abc95][_0xfcce('0x2d')]+=moment(_0x5b2459[_0x65caef][_0x8ba5bd][_0xfcce('0x56')])['diff'](moment(_0x5b2459[_0x65caef][_0x8ba5bd][_0xfcce('0x5a')]),_0xfcce('0x55'))||0x0;}}else{_0x3ef631['voiceQueues'][_0x5abc95][_0xfcce('0x27')]+=_0x3ef631[_0xfcce('0x10')][_0x5abc95][_0xfcce('0x2c')]||0x0;}}}}}}return _0x3ef631[_0xfcce('0x10')];};};Realtime['prototype']['initVoiceCallReports']=function(){var _0x498329=this;return function(_0x12af85){clearVoiceCallReports(_0x498329[_0xfcce('0x5b')]);if(_0x12af85){for(var _0x162262=0x0;_0x162262<_0x12af85[_0xfcce('0x3c')];_0x162262+=0x1){_0x498329['outbound'][_0xfcce('0x25')]+=0x1;_0x498329[_0xfcce('0x5b')][_0xfcce('0x27')]+=_0x12af85[_0x162262][_0xfcce('0x5c')];if(_0x12af85[_0x162262][_0xfcce('0x5d')]===_0xfcce('0x5e')){_0x498329[_0xfcce('0x5b')][_0xfcce('0x26')]+=0x1;_0x498329['outbound']['sumHoldTime']+=_0x12af85[_0x162262][_0xfcce('0x5c')]-_0x12af85[_0x162262][_0xfcce('0x5f')]||0x0;_0x498329[_0xfcce('0x5b')]['sumBillable']+=_0x12af85[_0x162262][_0xfcce('0x5f')];}}}return _0x498329[_0xfcce('0x5b')];};};Realtime[_0xfcce('0x39')][_0xfcce('0x60')]=function(){var _0x38f155=this;return function(_0x15a32d){if(_0x15a32d){freeIsNotKey(_0x15a32d,_0x38f155[_0xfcce('0x11')],_0xfcce('0x21'));for(var _0x2bc93e=0x0,_0x5ac6de={};_0x2bc93e<_0x15a32d['length'];_0x2bc93e+=0x1){_0x5ac6de=_0x15a32d[_0x2bc93e];if(_['isUndefined'](_0x38f155[_0xfcce('0x11')][_0x5ac6de[_0xfcce('0x21')]])){_0x38f155['campaigns'][_0x5ac6de['name']]=new Campaign(_0x5ac6de);}else{_0x38f155[_0xfcce('0x3a')](_0x38f155[_0xfcce('0x11')][_0x5ac6de[_0xfcce('0x21')]],_0x5ac6de);}}}return _0x38f155[_0xfcce('0x11')];};};Realtime[_0xfcce('0x39')][_0xfcce('0x61')]=function(){var _0x1e8912=this;return function(_0x1fdb15){if(_0x1fdb15){freeIsNotKey(_0x1fdb15,_0x1e8912[_0xfcce('0x13')],'id');for(var _0x100c0e=0x0,_0x240ada={};_0x100c0e<_0x1fdb15[_0xfcce('0x3c')];_0x100c0e+=0x1){_0x240ada=_0x1fdb15[_0x100c0e];if(_[_0xfcce('0x3e')](_0x1e8912[_0xfcce('0x13')][_0x240ada['id']])){_0x1e8912['voiceExtensions'][_0x240ada['id']]=new VoiceExtension(_0x240ada);}else{_0x1e8912[_0xfcce('0x3a')](_0x1e8912[_0xfcce('0x13')][_0x240ada['id']],_0x240ada);}}}return _0x1e8912[_0xfcce('0x13')];};};Realtime[_0xfcce('0x39')][_0xfcce('0x62')]=function(){var _0x42cc99=this;return function(_0x217976){clearCampaigns(_0x42cc99['campaigns']);for(var _0x3de521=0x0;_0x3de521<_0x217976[_0xfcce('0x3c')];_0x3de521+=0x1){_[_0xfcce('0x4d')](_0x42cc99[_0xfcce('0x11')][_0x217976[_0x3de521]['name']],_0x217976[_0x3de521]);}return _0x42cc99[_0xfcce('0x11')];};};Realtime[_0xfcce('0x39')][_0xfcce('0x63')]=function(){var _0xec0023=this;return function(_0x1ec1e1){if(_0x1ec1e1){freeIsNotKey(_0x1ec1e1,_0xec0023[_0xfcce('0x1d')],'id');for(var _0x270125=0x0,_0x196cc7={},_0x1a1734={};_0x270125<_0x1ec1e1['length'];_0x270125+=0x1){_0x196cc7=_0x1ec1e1[_0x270125];if(_['isUndefined'](_0xec0023['faxAccounts'][_0x196cc7['id']])){_0xec0023[_0xfcce('0x1d')][_0x196cc7['id']]=new FaxAccount(_0x196cc7);}else{_0xec0023['mergeFromDatabase'](_0xec0023['faxAccounts'][_0x196cc7['id']],_0x196cc7);}}}return _0xec0023[_0xfcce('0x1d')];};};module['exports']=Realtime;
\ No newline at end of file
+var _0xec56=['queuecallerabandonAt','queuecallerexitAt','diff','queuecallercomplete','initVoiceCallReports','duration','ANSWERED','billableseconds','initCampaigns','initVoiceExtensions','voiceExtensions','initFaxAccounts','exports','bluebird','moment','../model/agent','../model/telephone','../model/trunk','../model/voiceQueue','../model/trigger','../model/template','../model/campaign','../model/voiceExtension','../model/zendeskAccount','../model/salesforceAccount','../model/freshdeskAccount','../model/sugarcrmAccount','../model/zohoAccount','../model/deskAccount','../model/vtigerAccount','../model/servicenowAccount','../model/dynamics365Account','../model/faxAccount','telephones','trunks','voiceQueues','triggers','campaigns','templates','outbound','channels','queueChannels','outboundChannels','timers','zendeskAccounts','salesforceAccounts','sugarcrmAccounts','freshdeskAccounts','deskAccounts','servicenowAccounts','dynamics365Accounts','faxAccounts','mapKeys','hasOwnProperty','format','SIP/%s','name','isNil','interface','answered','sumHoldTime','sumDuration','isEmpty','ivrTotalCallsDays','total','unmanaged','abandoned','sumBillable','outboundNoAnswerCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundNoSuchCallsDay','outboundUnknownCallsDay','outboundDropCallsDayTimeout','outboundDropCallsDayCallersExit','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundAnswerCallsDay','queueStatusComplete','prototype','agents','length','isUndefined','mergeFromDatabase','initTelephones','initTriggers','initTemplates','initZendeskAccounts','initSalesforceAccounts','initFreshdeskAccounts','zohoAccounts','initDeskAccounts','initSugarcrmAccounts','initVtigerAccounts','vtigerAccounts','initServicenowAccounts','initDynamics365Accounts','initVoiceQueueHopperHistory','merge','initVoiceQueueReports','groupBy','uniqueid','queue','queuecallerabandon','queuecallerleaveAt','queuecallerjoinAt','seconds','queuecallercompleteAt'];(function(_0x6c993a,_0x5ea3ab){var _0x27f547=function(_0x22df20){while(--_0x22df20){_0x6c993a['push'](_0x6c993a['shift']());}};_0x27f547(++_0x5ea3ab);}(_0xec56,0x1bd));var _0x6ec5=function(_0x48e87c,_0x263c29){_0x48e87c=_0x48e87c-0x0;var _0x1940a8=_0xec56[_0x48e87c];return _0x1940a8;};'use strict';var BPromise=require(_0x6ec5('0x0'));var util=require('util');var _=require('lodash');var moment=require(_0x6ec5('0x1'));var Agent=require(_0x6ec5('0x2'));var Telephone=require(_0x6ec5('0x3'));var Trunk=require(_0x6ec5('0x4'));var VoiceQueue=require(_0x6ec5('0x5'));var Trigger=require(_0x6ec5('0x6'));var Template=require(_0x6ec5('0x7'));var Campaign=require(_0x6ec5('0x8'));var VoiceExtension=require(_0x6ec5('0x9'));var ZendeskAccount=require(_0x6ec5('0xa'));var SalesforceAccount=require(_0x6ec5('0xb'));var FreshdeskAccount=require(_0x6ec5('0xc'));var SugarcrmAccount=require(_0x6ec5('0xd'));var ZohoAccount=require(_0x6ec5('0xe'));var DeskAccount=require(_0x6ec5('0xf'));var VtigerAccount=require(_0x6ec5('0x10'));var ServicenowAccount=require(_0x6ec5('0x11'));var Dynamics365Account=require(_0x6ec5('0x12'));var FaxAccount=require(_0x6ec5('0x13'));var Realtime=function(){this['agents']={};this[_0x6ec5('0x14')]={};this[_0x6ec5('0x15')]={};this[_0x6ec5('0x16')]={};this[_0x6ec5('0x17')]={};this[_0x6ec5('0x18')]={};this[_0x6ec5('0x19')]={};this[_0x6ec5('0x1a')]={'total':0x0,'answered':0x0,'sumHoldTime':0x0,'sumDuration':0x0,'sumBillable':0x0};this['voiceExtensions']={};this[_0x6ec5('0x1b')]={};this[_0x6ec5('0x1c')]={};this[_0x6ec5('0x1d')]={};this[_0x6ec5('0x1e')]={};this[_0x6ec5('0x1f')]={};this[_0x6ec5('0x20')]={};this[_0x6ec5('0x21')]={};this[_0x6ec5('0x22')]={};this['zohoAccounts']={};this[_0x6ec5('0x23')]={};this['vtigerAccounts']={};this[_0x6ec5('0x24')]={};this[_0x6ec5('0x25')]={};this[_0x6ec5('0x26')]={};};function freeIsNotKey(_0x9fc0e7,_0xdc0b10,_0x4d09fe){var _0x13b725=_[_0x6ec5('0x27')](_0x9fc0e7,function(_0x125ae6,_0x211934){return _0x125ae6[_0x4d09fe];});for(var _0x23b3e3 in _0xdc0b10){if(_0xdc0b10[_0x6ec5('0x28')](_0x23b3e3)){if(!_0x13b725[_0x23b3e3]){delete _0xdc0b10[_0x23b3e3];}}}}function freeIsNotKeySip(_0x1dbee9,_0x4237bc){var _0x2608c0=_[_0x6ec5('0x27')](_0x1dbee9,function(_0x17f7a2,_0x45c230){return util[_0x6ec5('0x29')](_0x6ec5('0x2a'),_0x17f7a2[_0x6ec5('0x2b')]);});for(var _0x3d08e9 in _0x4237bc){if(_0x4237bc[_0x6ec5('0x28')](_0x3d08e9)){if(!_0x2608c0[_0x3d08e9]){delete _0x4237bc[_0x3d08e9];}}}}function freeIsNotKeyAgent(_0x4abd5d,_0x272532){var _0x1b1d96=_[_0x6ec5('0x27')](_0x4abd5d,function(_0x20f5a6,_0x3fc9d7){var _0x38a821=_[_0x6ec5('0x2c')](_0x20f5a6['interface'])?util[_0x6ec5('0x29')](_0x6ec5('0x2a'),_0x20f5a6[_0x6ec5('0x2b')]):_0x20f5a6[_0x6ec5('0x2d')];return _0x38a821;});for(var _0x57060c in _0x272532){if(_0x272532[_0x6ec5('0x28')](_0x57060c)){if(!_0x1b1d96[_0x57060c]){delete _0x272532[_0x57060c];}}}}function clearVoiceCallReports(_0x280748){_0x280748['total']=0x0;_0x280748[_0x6ec5('0x2e')]=0x0;_0x280748[_0x6ec5('0x2f')]=0x0;_0x280748[_0x6ec5('0x30')]=0x0;_0x280748['sumBillable']=0x0;}function clearCampaigns(_0x1b779a){if(!_[_0x6ec5('0x31')](_0x1b779a)){for(var _0x197ea8 in _0x1b779a){if(_0x1b779a[_0x6ec5('0x28')](_0x197ea8)){_0x1b779a[_0x197ea8][_0x6ec5('0x32')]=0x0;_0x1b779a[_0x197ea8]['ivrAnswerCallsDay']=0x0;}}}}function clearVoiceQueues(_0x171e2a){if(!_[_0x6ec5('0x31')](_0x171e2a)){for(var _0x4a9860 in _0x171e2a){if(_0x171e2a[_0x6ec5('0x28')](_0x4a9860)){_0x171e2a[_0x4a9860][_0x6ec5('0x33')]=0x0;_0x171e2a[_0x4a9860]['answered']=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x34')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x35')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x2f')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x30')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x36')]=0x0;_0x171e2a[_0x4a9860]['outboundAnswerAgiCallsDay']=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x37')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x38')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x39')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x3a')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x3b')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x3c')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x3d')]=0x0;_0x171e2a[_0x4a9860]['outboundBlacklistCallsDay']=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x3e')]=0x0;_0x171e2a[_0x4a9860]['outboundRejectCallsDay']=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x3f')]=0x0;_0x171e2a[_0x4a9860]['outboundAnswerAgiCallsDay']=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x40')]=0x0;_0x171e2a[_0x4a9860][_0x6ec5('0x41')]=!![];}}}}Realtime['prototype']['mergeFromDatabase']=function(_0x3bfab4,_0x293915){for(var _0x4b7662 in _0x293915){if(_0x3bfab4[_0x6ec5('0x28')](_0x4b7662)){_0x3bfab4[_0x4b7662]=_0x293915[_0x4b7662];}}};Realtime[_0x6ec5('0x42')]['initAgents']=function(){var _0x249a8b=this;return function(_0x38bc8b){if(_0x38bc8b){freeIsNotKeyAgent(_0x38bc8b,_0x249a8b[_0x6ec5('0x43')]);for(var _0x12879b=0x0,_0x1dc616={},_0x23a73c={};_0x12879b<_0x38bc8b[_0x6ec5('0x44')];_0x12879b+=0x1){_0x1dc616=_0x38bc8b[_0x12879b];var _0x39f2e5=_['isNil'](_0x1dc616[_0x6ec5('0x2d')])?util['format'](_0x6ec5('0x2a'),_0x1dc616[_0x6ec5('0x2b')]):_0x1dc616[_0x6ec5('0x2d')];if(_[_0x6ec5('0x45')](_0x249a8b[_0x6ec5('0x43')][_0x39f2e5])){_0x249a8b[_0x6ec5('0x43')][_0x39f2e5]=new Agent(_0x1dc616);}else{_0x249a8b[_0x6ec5('0x46')](_0x249a8b[_0x6ec5('0x43')][_0x39f2e5],_0x1dc616);}}}return _0x249a8b[_0x6ec5('0x43')];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x47')]=function(){var _0x496246=this;return function(_0x5a5cf7){if(_0x5a5cf7){freeIsNotKeySip(_0x5a5cf7,_0x496246[_0x6ec5('0x14')]);for(var _0x519017=0x0,_0xf65d54={},_0x370e18={};_0x519017<_0x5a5cf7[_0x6ec5('0x44')];_0x519017+=0x1){_0xf65d54=_0x5a5cf7[_0x519017];if(_[_0x6ec5('0x45')](_0x496246[_0x6ec5('0x14')][util[_0x6ec5('0x29')](_0x6ec5('0x2a'),_0xf65d54['name'])])){_0x496246[_0x6ec5('0x14')][util[_0x6ec5('0x29')](_0x6ec5('0x2a'),_0xf65d54[_0x6ec5('0x2b')])]=new Telephone(_0xf65d54);}else{_0x496246[_0x6ec5('0x46')](_0x496246[_0x6ec5('0x14')][util[_0x6ec5('0x29')](_0x6ec5('0x2a'),_0xf65d54[_0x6ec5('0x2b')])],_0xf65d54);}}}return _0x496246['telephones'];};};Realtime[_0x6ec5('0x42')]['initTrunks']=function(){var _0x19ac12=this;return function(_0x58bdd0){if(_0x58bdd0){freeIsNotKeySip(_0x58bdd0,_0x19ac12[_0x6ec5('0x15')]);for(var _0x45de3c=0x0,_0x4c17fd={},_0x209224={};_0x45de3c<_0x58bdd0[_0x6ec5('0x44')];_0x45de3c+=0x1){_0x4c17fd=_0x58bdd0[_0x45de3c];if(_[_0x6ec5('0x45')](_0x19ac12['trunks'][util[_0x6ec5('0x29')](_0x6ec5('0x2a'),_0x4c17fd['name'])])){_0x19ac12[_0x6ec5('0x15')][util[_0x6ec5('0x29')](_0x6ec5('0x2a'),_0x4c17fd[_0x6ec5('0x2b')])]=new Trunk(_0x4c17fd);}else{_0x19ac12[_0x6ec5('0x46')](_0x19ac12[_0x6ec5('0x15')][util[_0x6ec5('0x29')](_0x6ec5('0x2a'),_0x4c17fd[_0x6ec5('0x2b')])],_0x4c17fd);}}}return _0x19ac12[_0x6ec5('0x15')];};};Realtime[_0x6ec5('0x42')]['initVoiceQueues']=function(){var _0x17cfed=this;return function(_0x3af877){if(_0x3af877){freeIsNotKey(_0x3af877,_0x17cfed[_0x6ec5('0x16')],_0x6ec5('0x2b'));for(var _0x4be992=0x0,_0x37bcd1={},_0x25ffe0={};_0x4be992<_0x3af877['length'];_0x4be992+=0x1){_0x37bcd1=_0x3af877[_0x4be992];if(_[_0x6ec5('0x45')](_0x17cfed['voiceQueues'][_0x37bcd1[_0x6ec5('0x2b')]])){_0x17cfed[_0x6ec5('0x16')][_0x37bcd1[_0x6ec5('0x2b')]]=new VoiceQueue(_0x37bcd1);}else{_0x17cfed[_0x6ec5('0x46')](_0x17cfed['voiceQueues'][_0x37bcd1['name']],_0x37bcd1);}}}return _0x17cfed[_0x6ec5('0x16')];};};Realtime['prototype'][_0x6ec5('0x48')]=function(){var _0x3c0821=this;return function(_0x390141){if(_0x390141){freeIsNotKey(_0x390141,_0x3c0821[_0x6ec5('0x17')],'id');for(var _0x2cf8c7=0x0,_0x4d6733={},_0x592534={};_0x2cf8c7<_0x390141[_0x6ec5('0x44')];_0x2cf8c7+=0x1){_0x4d6733=_0x390141[_0x2cf8c7];if(_[_0x6ec5('0x45')](_0x3c0821[_0x6ec5('0x17')][_0x4d6733['id']])){_0x3c0821[_0x6ec5('0x17')][_0x4d6733['id']]=new Trigger(_0x4d6733);}else{_0x3c0821[_0x6ec5('0x46')](_0x3c0821[_0x6ec5('0x17')][_0x4d6733['id']],_0x4d6733);}}}return _0x3c0821[_0x6ec5('0x17')];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x49')]=function(){var _0xb3c5b4=this;return function(_0xd265c){if(_0xd265c){freeIsNotKey(_0xd265c,_0xb3c5b4[_0x6ec5('0x19')],'id');for(var _0x2a41dd=0x0,_0x2c055c={},_0x4bbbbf={};_0x2a41dd<_0xd265c[_0x6ec5('0x44')];_0x2a41dd+=0x1){_0x2c055c=_0xd265c[_0x2a41dd];if(_['isUndefined'](_0xb3c5b4[_0x6ec5('0x19')][_0x2c055c['id']])){_0xb3c5b4[_0x6ec5('0x19')][_0x2c055c['id']]=new Template(_0x2c055c);}else{_0xb3c5b4['mergeFromDatabase'](_0xb3c5b4[_0x6ec5('0x19')][_0x2c055c['id']],_0x2c055c);}}}return _0xb3c5b4[_0x6ec5('0x19')];};};Realtime['prototype'][_0x6ec5('0x4a')]=function(){var _0x21a910=this;return function(_0x486552){if(_0x486552){freeIsNotKey(_0x486552,_0x21a910['zendeskAccounts'],'id');for(var _0xe0df75=0x0,_0x49fa43={},_0x58ce72={};_0xe0df75<_0x486552[_0x6ec5('0x44')];_0xe0df75+=0x1){_0x49fa43=_0x486552[_0xe0df75];if(_[_0x6ec5('0x45')](_0x21a910[_0x6ec5('0x1f')][_0x49fa43['id']])){_0x21a910[_0x6ec5('0x1f')][_0x49fa43['id']]=new ZendeskAccount(_0x49fa43);}else{_0x21a910['mergeFromDatabase'](_0x21a910[_0x6ec5('0x1f')][_0x49fa43['id']],_0x49fa43);}}}return _0x21a910[_0x6ec5('0x1f')];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x4b')]=function(){var _0x9bde51=this;return function(_0x45431a){if(_0x45431a){freeIsNotKey(_0x45431a,_0x9bde51[_0x6ec5('0x20')],'id');for(var _0x29bf52=0x0,_0xc52e91={},_0x404ec9={};_0x29bf52<_0x45431a[_0x6ec5('0x44')];_0x29bf52+=0x1){_0xc52e91=_0x45431a[_0x29bf52];if(_[_0x6ec5('0x45')](_0x9bde51[_0x6ec5('0x20')][_0xc52e91['id']])){_0x9bde51['salesforceAccounts'][_0xc52e91['id']]=new SalesforceAccount(_0xc52e91);}else{_0x9bde51[_0x6ec5('0x46')](_0x9bde51[_0x6ec5('0x20')][_0xc52e91['id']],_0xc52e91);}}}return _0x9bde51['salesforceAccounts'];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x4c')]=function(){var _0x377c08=this;return function(_0x1e80bc){if(_0x1e80bc){freeIsNotKey(_0x1e80bc,_0x377c08[_0x6ec5('0x22')],'id');for(var _0x4fab8b=0x0,_0x5f3d3f={},_0x282cbc={};_0x4fab8b<_0x1e80bc['length'];_0x4fab8b+=0x1){_0x5f3d3f=_0x1e80bc[_0x4fab8b];if(_[_0x6ec5('0x45')](_0x377c08[_0x6ec5('0x22')][_0x5f3d3f['id']])){_0x377c08[_0x6ec5('0x22')][_0x5f3d3f['id']]=new FreshdeskAccount(_0x5f3d3f);}else{_0x377c08[_0x6ec5('0x46')](_0x377c08[_0x6ec5('0x22')][_0x5f3d3f['id']],_0x5f3d3f);}}}return _0x377c08['freshdeskAccounts'];};};Realtime[_0x6ec5('0x42')]['initZohoAccounts']=function(){var _0x4c7104=this;return function(_0x5cedd7){if(_0x5cedd7){freeIsNotKey(_0x5cedd7,_0x4c7104[_0x6ec5('0x4d')],'id');for(var _0x3f4083=0x0,_0x47d81f={},_0x59fd7f={};_0x3f4083<_0x5cedd7[_0x6ec5('0x44')];_0x3f4083+=0x1){_0x47d81f=_0x5cedd7[_0x3f4083];if(_[_0x6ec5('0x45')](_0x4c7104[_0x6ec5('0x4d')][_0x47d81f['id']])){_0x4c7104[_0x6ec5('0x4d')][_0x47d81f['id']]=new ZohoAccount(_0x47d81f);}else{_0x4c7104[_0x6ec5('0x46')](_0x4c7104['zohoAccounts'][_0x47d81f['id']],_0x47d81f);}}}return _0x4c7104[_0x6ec5('0x4d')];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x4e')]=function(){var _0x394604=this;return function(_0x156964){if(_0x156964){freeIsNotKey(_0x156964,_0x394604['deskAccounts'],'id');for(var _0x34a136=0x0,_0x1431c7={},_0x278c00={};_0x34a136<_0x156964[_0x6ec5('0x44')];_0x34a136+=0x1){_0x1431c7=_0x156964[_0x34a136];if(_[_0x6ec5('0x45')](_0x394604[_0x6ec5('0x23')][_0x1431c7['id']])){_0x394604[_0x6ec5('0x23')][_0x1431c7['id']]=new DeskAccount(_0x1431c7);}else{_0x394604[_0x6ec5('0x46')](_0x394604[_0x6ec5('0x23')][_0x1431c7['id']],_0x1431c7);}}}return _0x394604[_0x6ec5('0x23')];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x4f')]=function(){var _0x191980=this;return function(_0x131ef3){if(_0x131ef3){freeIsNotKey(_0x131ef3,_0x191980[_0x6ec5('0x21')],'id');for(var _0x2ee596=0x0,_0x40c76c={},_0x583bce={};_0x2ee596<_0x131ef3[_0x6ec5('0x44')];_0x2ee596+=0x1){_0x40c76c=_0x131ef3[_0x2ee596];if(_['isUndefined'](_0x191980[_0x6ec5('0x21')][_0x40c76c['id']])){_0x191980['sugarcrmAccounts'][_0x40c76c['id']]=new SugarcrmAccount(_0x40c76c);}else{_0x191980['mergeFromDatabase'](_0x191980[_0x6ec5('0x21')][_0x40c76c['id']],_0x40c76c);}}}return _0x191980[_0x6ec5('0x21')];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x50')]=function(){var _0x1d4424=this;return function(_0x48b5a9){if(_0x48b5a9){freeIsNotKey(_0x48b5a9,_0x1d4424[_0x6ec5('0x51')],'id');for(var _0x27aeda=0x0,_0x2e28b7={},_0x189dbc={};_0x27aeda<_0x48b5a9[_0x6ec5('0x44')];_0x27aeda+=0x1){_0x2e28b7=_0x48b5a9[_0x27aeda];if(_['isUndefined'](_0x1d4424[_0x6ec5('0x51')][_0x2e28b7['id']])){_0x1d4424[_0x6ec5('0x51')][_0x2e28b7['id']]=new VtigerAccount(_0x2e28b7);}else{_0x1d4424[_0x6ec5('0x46')](_0x1d4424[_0x6ec5('0x51')][_0x2e28b7['id']],_0x2e28b7);}}}return _0x1d4424['vtigerAccounts'];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x52')]=function(){var _0x566605=this;return function(_0x530689){if(_0x530689){freeIsNotKey(_0x530689,_0x566605[_0x6ec5('0x24')],'id');for(var _0x18a10f=0x0,_0x7fd652={},_0xe8aef4={};_0x18a10f<_0x530689[_0x6ec5('0x44')];_0x18a10f+=0x1){_0x7fd652=_0x530689[_0x18a10f];if(_[_0x6ec5('0x45')](_0x566605[_0x6ec5('0x24')][_0x7fd652['id']])){_0x566605[_0x6ec5('0x24')][_0x7fd652['id']]=new ServicenowAccount(_0x7fd652);}else{_0x566605[_0x6ec5('0x46')](_0x566605[_0x6ec5('0x24')][_0x7fd652['id']],_0x7fd652);}}}return _0x566605[_0x6ec5('0x24')];};};Realtime['prototype'][_0x6ec5('0x53')]=function(){var _0x12fdac=this;return function(_0x3ee62e){if(_0x3ee62e){freeIsNotKey(_0x3ee62e,_0x12fdac[_0x6ec5('0x25')],'id');for(var _0x480f40=0x0,_0x26869d={},_0x1ac8be={};_0x480f40<_0x3ee62e[_0x6ec5('0x44')];_0x480f40+=0x1){_0x26869d=_0x3ee62e[_0x480f40];if(_[_0x6ec5('0x45')](_0x12fdac['dynamics365Accounts'][_0x26869d['id']])){_0x12fdac[_0x6ec5('0x25')][_0x26869d['id']]=new Dynamics365Account(_0x26869d);}else{_0x12fdac[_0x6ec5('0x46')](_0x12fdac[_0x6ec5('0x25')][_0x26869d['id']],_0x26869d);}}}return _0x12fdac['dynamics365Accounts'];};};Realtime['prototype'][_0x6ec5('0x54')]=function(){var _0x3e251c=this;return function(_0x5d6644){for(var _0x1ac5a5=0x0;_0x1ac5a5<_0x5d6644[_0x6ec5('0x44')];_0x1ac5a5+=0x1){_[_0x6ec5('0x55')](_0x3e251c[_0x6ec5('0x16')][_0x5d6644[_0x1ac5a5]['name']],_0x5d6644[_0x1ac5a5]);}return _0x3e251c[_0x6ec5('0x16')];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x56')]=function(){var _0x488642=this;return function(_0x117eb2){clearVoiceQueues(_0x488642[_0x6ec5('0x16')]);if(_0x117eb2){_0x117eb2=_[_0x6ec5('0x57')](_0x117eb2,_0x6ec5('0x58'));for(var _0x22c39f in _0x117eb2){if(_0x117eb2[_0x6ec5('0x28')](_0x22c39f)){var _0x26b242={};for(var _0xf44b2b=0x0;_0xf44b2b<_0x117eb2[_0x22c39f]['length'];_0xf44b2b+=0x1){var _0x195461=_0x117eb2[_0x22c39f][_0xf44b2b][_0x6ec5('0x59')];if(_0x488642['voiceQueues'][_0x195461]){if(_0x117eb2[_0x22c39f][_0xf44b2b]['queuecallerexit']){_0x488642[_0x6ec5('0x16')][_0x195461][_0x6ec5('0x34')]+=0x1;}if(_0x117eb2[_0x22c39f][_0xf44b2b][_0x6ec5('0x5a')]){_0x488642['voiceQueues'][_0x195461][_0x6ec5('0x35')]+=0x1;}_0x488642[_0x6ec5('0x16')][_0x195461][_0x6ec5('0x2f')]+=moment(_0x117eb2[_0x22c39f][_0xf44b2b][_0x6ec5('0x5b')])['diff'](moment(_0x117eb2[_0x22c39f][_0xf44b2b][_0x6ec5('0x5c')]),_0x6ec5('0x5d'))||0x0;if(_0xf44b2b===_0x117eb2[_0x22c39f][_0x6ec5('0x44')]-0x1){_0x488642[_0x6ec5('0x16')][_0x195461][_0x6ec5('0x30')]+=moment(_0x117eb2[_0x22c39f][_0xf44b2b][_0x6ec5('0x5e')]||_0x117eb2[_0x22c39f][_0xf44b2b][_0x6ec5('0x5f')]||_0x117eb2[_0x22c39f][_0xf44b2b][_0x6ec5('0x60')])[_0x6ec5('0x61')](moment(_0x117eb2[_0x22c39f][_0xf44b2b]['queuecallerjoinAt']),'seconds')||0x0;_0x488642[_0x6ec5('0x16')][_0x195461][_0x6ec5('0x33')]+=0x1;if(_0x117eb2[_0x22c39f][_0xf44b2b][_0x6ec5('0x62')]){_0x488642['voiceQueues'][_0x195461][_0x6ec5('0x2e')]+=0x1;_0x488642['voiceQueues'][_0x195461][_0x6ec5('0x36')]+=moment(_0x117eb2[_0x22c39f][_0xf44b2b][_0x6ec5('0x5e')])['diff'](moment(_0x117eb2[_0x22c39f][_0xf44b2b]['queuecallerleaveAt']),_0x6ec5('0x5d'))||0x0;}}else{_0x488642[_0x6ec5('0x16')][_0x195461][_0x6ec5('0x30')]+=_0x488642[_0x6ec5('0x16')][_0x195461]['sumHoldTime']||0x0;}}}}}}return _0x488642[_0x6ec5('0x16')];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x63')]=function(){var _0x569fc6=this;return function(_0x5befa3){clearVoiceCallReports(_0x569fc6['outbound']);if(_0x5befa3){for(var _0x3a5b21=0x0;_0x3a5b21<_0x5befa3[_0x6ec5('0x44')];_0x3a5b21+=0x1){_0x569fc6[_0x6ec5('0x1a')][_0x6ec5('0x33')]+=0x1;_0x569fc6[_0x6ec5('0x1a')][_0x6ec5('0x30')]+=_0x5befa3[_0x3a5b21][_0x6ec5('0x64')];if(_0x5befa3[_0x3a5b21]['disposition']===_0x6ec5('0x65')){_0x569fc6['outbound'][_0x6ec5('0x2e')]+=0x1;_0x569fc6[_0x6ec5('0x1a')]['sumHoldTime']+=_0x5befa3[_0x3a5b21][_0x6ec5('0x64')]-_0x5befa3[_0x3a5b21][_0x6ec5('0x66')]||0x0;_0x569fc6['outbound'][_0x6ec5('0x36')]+=_0x5befa3[_0x3a5b21][_0x6ec5('0x66')];}}}return _0x569fc6['outbound'];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x67')]=function(){var _0x40b051=this;return function(_0x47e75e){if(_0x47e75e){freeIsNotKey(_0x47e75e,_0x40b051['campaigns'],_0x6ec5('0x2b'));for(var _0x8f9c0e=0x0,_0x5652ba={};_0x8f9c0e<_0x47e75e[_0x6ec5('0x44')];_0x8f9c0e+=0x1){_0x5652ba=_0x47e75e[_0x8f9c0e];if(_[_0x6ec5('0x45')](_0x40b051[_0x6ec5('0x18')][_0x5652ba[_0x6ec5('0x2b')]])){_0x40b051[_0x6ec5('0x18')][_0x5652ba[_0x6ec5('0x2b')]]=new Campaign(_0x5652ba);}else{_0x40b051[_0x6ec5('0x46')](_0x40b051[_0x6ec5('0x18')][_0x5652ba[_0x6ec5('0x2b')]],_0x5652ba);}}}return _0x40b051[_0x6ec5('0x18')];};};Realtime['prototype'][_0x6ec5('0x68')]=function(){var _0x10f14e=this;return function(_0x27a0ce){if(_0x27a0ce){freeIsNotKey(_0x27a0ce,_0x10f14e[_0x6ec5('0x69')],'id');for(var _0x50a095=0x0,_0x47844a={};_0x50a095<_0x27a0ce['length'];_0x50a095+=0x1){_0x47844a=_0x27a0ce[_0x50a095];if(_[_0x6ec5('0x45')](_0x10f14e[_0x6ec5('0x69')][_0x47844a['id']])){_0x10f14e[_0x6ec5('0x69')][_0x47844a['id']]=new VoiceExtension(_0x47844a);}else{_0x10f14e[_0x6ec5('0x46')](_0x10f14e[_0x6ec5('0x69')][_0x47844a['id']],_0x47844a);}}}return _0x10f14e[_0x6ec5('0x69')];};};Realtime[_0x6ec5('0x42')]['initCampaignHopperHistory']=function(){var _0x36b65b=this;return function(_0xd13ca6){clearCampaigns(_0x36b65b['campaigns']);for(var _0x196d4e=0x0;_0x196d4e<_0xd13ca6[_0x6ec5('0x44')];_0x196d4e+=0x1){_[_0x6ec5('0x55')](_0x36b65b[_0x6ec5('0x18')][_0xd13ca6[_0x196d4e][_0x6ec5('0x2b')]],_0xd13ca6[_0x196d4e]);}return _0x36b65b[_0x6ec5('0x18')];};};Realtime[_0x6ec5('0x42')][_0x6ec5('0x6a')]=function(){var _0x222ae0=this;return function(_0x3ba50a){if(_0x3ba50a){freeIsNotKey(_0x3ba50a,_0x222ae0[_0x6ec5('0x26')],'id');for(var _0x412788=0x0,_0xc6dcd={},_0x3d0b1d={};_0x412788<_0x3ba50a[_0x6ec5('0x44')];_0x412788+=0x1){_0xc6dcd=_0x3ba50a[_0x412788];if(_['isUndefined'](_0x222ae0[_0x6ec5('0x26')][_0xc6dcd['id']])){_0x222ae0['faxAccounts'][_0xc6dcd['id']]=new FaxAccount(_0xc6dcd);}else{_0x222ae0[_0x6ec5('0x46')](_0x222ae0[_0x6ec5('0x26')][_0xc6dcd['id']],_0xc6dcd);}}}return _0x222ae0['faxAccounts'];};};module[_0x6ec5('0x6b')]=Realtime;
\ No newline at end of file
index 33c9c22..32cfee7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1435=['../rpc/voiceQueueReport','../rpc/voiceRecording','../rpc/voiceTransferReport','./voiceCallReport','./userReport','realtime','agents','telephones','sync','xdr','disabled','custom:voiceQueueReport','voiceQueueReport','bind','custom:voiceCallReport','custom:voiceAgentReport','voiceAgentReport','custom:voiceDialReport','voiceDialReport','blindtransfer','attendedtransfer','attendedTransfer','prototype','find','accountcode','name','isNil','interface','format','findAgent','connectedlinenum','assigned','lastAssignedTo','SIP/%s','queuecallercomplete','YYYY-MM-DD\x20HH:mm:ss','create','match','destination','exten','type','dialer','lastapplication','queue','lastdata','context','from-voip-provider','callerid','from-sip','calleridpreview','calleridnum','originatecalleridnum','destinationchannel','channel','disposition','ANSWERED','calleridname','monitor','monitors','createdAt','xcally-motion-preview','connectedlinename','membername','xcally-motion-dialer','isArray','startsWith','substring','indexOf','mobile','phone','blindTransfer','exports','bluebird','util','../../../config/environment','../../../config/logger','ami','../ami','../rpc/voiceAgentReport','../rpc/voiceCallReport','../rpc/voiceDialReport'];(function(_0x36dc75,_0x3b55b0){var _0x250981=function(_0x3c2524){while(--_0x3c2524){_0x36dc75['push'](_0x36dc75['shift']());}};_0x250981(++_0x3b55b0);}(_0x1435,0x1dd));var _0x5143=function(_0x58447f,_0x1b1d7a){_0x58447f=_0x58447f-0x0;var _0x487a29=_0x1435[_0x58447f];return _0x487a29;};'use strict';var BPromise=require(_0x5143('0x0'));var _=require('lodash');var moment=require('moment');var util=require(_0x5143('0x1'));var config=require(_0x5143('0x2'));var logger=require(_0x5143('0x3'))(_0x5143('0x4'));var ami=require(_0x5143('0x5'));var RpcVoiceAgentReport=require(_0x5143('0x6'));var RpcVoiceCallReport=require(_0x5143('0x7'));var RpcVoiceDialReport=require(_0x5143('0x8'));var RpcMemberReport=require('../rpc/memberReport');var RpcVoiceQueueReport=require(_0x5143('0x9'));var RpcVoiceRecording=require(_0x5143('0xa'));var RpcVoiceTransferReport=require(_0x5143('0xb'));var VoiceQueueReport=require('./voiceQueueReport');var VoiceCallReport=require(_0x5143('0xc'));var VoiceAgentReport=require('./voiceAgentReport');var VoiceDialReport=require('./voiceDialReport');var UserReport=require(_0x5143('0xd'));function Report(_0x2b1e78){this[_0x5143('0xe')]=_0x2b1e78;this[_0x5143('0xf')]=_0x2b1e78[_0x5143('0xf')];this[_0x5143('0x10')]=_0x2b1e78[_0x5143('0x10')];}Report['prototype'][_0x5143('0x11')]=function(_0x279778){var _0x4e98c7=new VoiceQueueReport(this['realtime']);var _0x170338=new VoiceAgentReport(this['realtime']);var _0x2aef25=new VoiceDialReport(this[_0x5143('0xe')]);var _0x577c41=new VoiceCallReport(this[_0x5143('0xe')]);var _0x562e39=new UserReport(this[_0x5143('0xe')]);if(config['xdr']&&config[_0x5143('0x12')][_0x5143('0x13')]){ami['on'](_0x5143('0x14'),this[_0x5143('0x15')][_0x5143('0x16')](this));ami['on'](_0x5143('0x17'),this['voiceCallReport']['bind'](this));ami['on'](_0x5143('0x18'),this[_0x5143('0x19')][_0x5143('0x16')](this));ami['on'](_0x5143('0x1a'),this[_0x5143('0x1b')][_0x5143('0x16')](this));ami['on'](_0x5143('0x1c'),this['blindTransfer']['bind'](this));ami['on'](_0x5143('0x1d'),this[_0x5143('0x1e')][_0x5143('0x16')](this));}};Report[_0x5143('0x1f')]['findAgent']=function(_0x473aa2){var _0xce3834=undefined;_0xce3834=_[_0x5143('0x20')](this[_0x5143('0xf')],function(_0x15bc32){return _0x15bc32[_0x5143('0x21')]==_0x473aa2||_0x15bc32[_0x5143('0x22')]==_0x473aa2;});if(_[_0x5143('0x23')](_0xce3834)){var _0x569505=_[_0x5143('0x20')](this['telephones'],function(_0x25e6fb){return _0x25e6fb[_0x5143('0x21')]==_0x473aa2||_0x25e6fb[_0x5143('0x22')]==_0x473aa2;});if(_0x569505){_0xce3834=_[_0x5143('0x20')](this[_0x5143('0xf')],function(_0xa66d8f){return _0xa66d8f[_0x5143('0x24')]==util[_0x5143('0x25')]('SIP/%s',_0x569505[_0x5143('0x22')]);});}}return _0xce3834;};Report[_0x5143('0x1f')][_0x5143('0x15')]=function(_0x1af0b1){for(var _0x275cea=0x0;_0x275cea<_0x1af0b1['length'];_0x275cea+=0x1){var _0x4749c3=this[_0x5143('0x26')](_0x1af0b1[_0x275cea][_0x5143('0x27')]);if(_0x4749c3){_0x1af0b1[_0x275cea][_0x5143('0x21')]=_0x4749c3[_0x5143('0x21')];_0x1af0b1[_0x275cea][_0x5143('0x28')]=!![];_0x1af0b1[_0x275cea][_0x5143('0x29')]=_0x4749c3['name'];_0x1af0b1[_0x275cea][_0x5143('0x24')]=_[_0x5143('0x23')](_0x4749c3[_0x5143('0x24')])?util['format'](_0x5143('0x2a'),_0x4749c3['name']):_0x4749c3['interface'];if(_0x1af0b1[_0x275cea][_0x5143('0x2b')]){_0x1af0b1[_0x275cea]['queuecallercompleteAt']=moment()[_0x5143('0x25')](_0x5143('0x2c'));}if(_0x1af0b1[_0x275cea]['queuecallerexit']){_0x1af0b1[_0x275cea]['queuecallerexitAt']=moment()[_0x5143('0x25')](_0x5143('0x2c'));}RpcMemberReport[_0x5143('0x15')](_0x1af0b1[_0x275cea]);}RpcVoiceQueueReport[_0x5143('0x2d')](_0x1af0b1[_0x275cea]);}};function extractCalleridNumber(_0x49f018){var _0x27c82c=_0x49f018[_0x5143('0x2e')](/<(.*?)>/);return _0x27c82c?_0x27c82c[0x1]:_0x49f018;}Report['prototype']['voiceCallReport']=function(_0x210020){_0x210020[_0x5143('0x2f')]=_0x210020['destination']||_0x210020[_0x5143('0x30')];if(_0x210020[_0x5143('0x31')]==_0x5143('0x32')){_0x210020[_0x5143('0x33')]=_0x5143('0x34');_0x210020[_0x5143('0x35')]=_0x210020['queue'];if(_0x210020[_0x5143('0x36')]==_0x5143('0x37')){_0x210020[_0x5143('0x21')]='';_0x210020[_0x5143('0x2f')]=extractCalleridNumber(_0x210020[_0x5143('0x38')]);}else if(_0x210020[_0x5143('0x36')]==_0x5143('0x39')){if(_0x210020[_0x5143('0x2f')]=='xcally-motion-preview'){_0x210020[_0x5143('0x2f')]=extractCalleridNumber(_0x210020[_0x5143('0x3a')]);_0x210020[_0x5143('0x3b')]=_0x210020[_0x5143('0x3c')];_0x210020[_0x5143('0x3d')]=[_0x210020['channel'],_0x210020[_0x5143('0x3e')]=_0x210020[_0x5143('0x3d')]][0x0];_0x210020[_0x5143('0x38')]=_0x210020[_0x5143('0x3a')];}else{_0x210020['destination']=_0x210020[_0x5143('0x3b')];_0x210020['calleridnum']=_0x210020[_0x5143('0x3c')];if(_0x210020[_0x5143('0x3f')]==_0x5143('0x40')){_0x210020[_0x5143('0x21')]=_0x210020[_0x5143('0x27')];}else{_0x210020[_0x5143('0x21')]='';}}}}else{_0x210020[_0x5143('0x38')]=util['format']('\x22%s\x22\x20<%s>',_0x210020[_0x5143('0x41')],_0x210020['calleridnum']);}RpcVoiceCallReport[_0x5143('0x2d')](_0x210020);if(_0x210020[_0x5143('0x42')]){for(var _0x5340ae=0x0;_0x5340ae<_0x210020[_0x5143('0x43')]['length'];_0x5340ae+=0x1){_0x210020['monitorFilename']=_0x210020['monitors'][_0x5340ae]['filename'];_0x210020[_0x5143('0x44')]=_0x210020[_0x5143('0x43')][_0x5340ae][_0x5143('0x44')];if(_0x210020[_0x5143('0x30')]==_0x5143('0x45')){_0x210020[_0x5143('0x3b')]=_0x210020[_0x5143('0x27')];_0x210020[_0x5143('0x41')]=_0x210020[_0x5143('0x46')];_0x210020[_0x5143('0x27')]=_0x210020['accountcode'];_0x210020[_0x5143('0x46')]=_0x210020[_0x5143('0x47')];_0x210020[_0x5143('0x30')]=_0x210020[_0x5143('0x3c')];}else if(_0x210020[_0x5143('0x30')]==_0x5143('0x48')){_0x210020[_0x5143('0x3b')]=_0x210020[_0x5143('0x2f')];_0x210020[_0x5143('0x30')]=_0x210020[_0x5143('0x3c')];}RpcVoiceRecording['create'](_0x210020);}}};Report[_0x5143('0x1f')][_0x5143('0x19')]=function(_0x2444ed){if(_[_0x5143('0x49')](_0x2444ed)){_0x2444ed['forEach'](function(_0x5be9e3){RpcVoiceAgentReport[_0x5143('0x2d')](_0x5be9e3);});}else{RpcVoiceAgentReport[_0x5143('0x2d')](_0x2444ed);}};Report[_0x5143('0x1f')]['voiceDialReport']=function(_0x3883fe){RpcVoiceDialReport[_0x5143('0x2d')](_0x3883fe);var _0x463824=undefined;var _0x5b179e=_0x3883fe[_0x5143('0x3e')];if(_[_0x5143('0x4a')](_0x5b179e,'Local')){var _0x281356=_0x5b179e[_0x5143('0x4b')](_0x5b179e[_0x5143('0x4c')]('/')+0x1,_0x5b179e[_0x5143('0x4c')]('@'));_0x463824=_[_0x5143('0x20')](this['agents'],function(_0x2b67d2){return _0x2b67d2[_0x5143('0x4d')]==_0x281356||_0x2b67d2[_0x5143('0x4e')]==_0x281356||_0x2b67d2[_0x5143('0x21')]==_0x281356;});}else{var _0x281356=_0x5b179e['substring'](_0x5b179e[_0x5143('0x4c')]('/')+0x1,_0x5b179e['lastIndexOf']('-'));_0x463824=this[_0x5143('0x26')](_0x281356);}if(_0x463824){_0x3883fe[_0x5143('0x24')]=_[_0x5143('0x23')](_0x463824[_0x5143('0x24')])?util[_0x5143('0x25')](_0x5143('0x2a'),_0x463824[_0x5143('0x22')]):_0x463824[_0x5143('0x24')];_0x3883fe[_0x5143('0x47')]=_0x463824['name'];_0x3883fe[_0x5143('0x21')]=_0x463824[_0x5143('0x21')];RpcMemberReport[_0x5143('0x1b')](_0x3883fe);}};Report['prototype'][_0x5143('0x4f')]=function(_0x32b988){RpcVoiceTransferReport[_0x5143('0x4f')](_0x32b988);};Report[_0x5143('0x1f')]['attendedTransfer']=function(_0x42b339){RpcVoiceTransferReport[_0x5143('0x1e')](_0x42b339);};module[_0x5143('0x50')]=Report;
\ No newline at end of file
+var _0x0e04=['interface','format','findAgent','assigned','SIP/%s','queuecallercompleteAt','YYYY-MM-DD\x20HH:mm:ss','queuecallerexitAt','match','exten','type','dialer','lastapplication','queue','lastdata','context','from-voip-provider','destination','from-sip','xcally-motion-preview','calleridnum','originatecalleridnum','channel','destinationchannel','callerid','ANSWERED','connectedlinenum','create','monitor','length','monitorFilename','monitors','filename','createdAt','calleridname','connectedlinename','membername','isArray','forEach','startsWith','Local','substring','indexOf','phone','exports','bluebird','lodash','moment','util','../../../config/environment','../ami','../rpc/memberReport','../rpc/voiceRecording','../rpc/voiceTransferReport','./voiceQueueReport','./voiceAgentReport','./voiceDialReport','./userReport','realtime','agents','telephones','prototype','xdr','disabled','voiceQueueReport','bind','custom:voiceAgentReport','voiceAgentReport','voiceDialReport','blindTransfer','attendedtransfer','attendedTransfer','find','accountcode','name','isNil'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0x0e04,0x1a9));var _0x40e0=function(_0xd3d8c7,_0x271aaf){_0xd3d8c7=_0xd3d8c7-0x0;var _0x4d7d9b=_0x0e04[_0xd3d8c7];return _0x4d7d9b;};'use strict';var BPromise=require(_0x40e0('0x0'));var _=require(_0x40e0('0x1'));var moment=require(_0x40e0('0x2'));var util=require(_0x40e0('0x3'));var config=require(_0x40e0('0x4'));var logger=require('../../../config/logger')('ami');var ami=require(_0x40e0('0x5'));var RpcVoiceAgentReport=require('../rpc/voiceAgentReport');var RpcVoiceCallReport=require('../rpc/voiceCallReport');var RpcVoiceDialReport=require('../rpc/voiceDialReport');var RpcMemberReport=require(_0x40e0('0x6'));var RpcVoiceQueueReport=require('../rpc/voiceQueueReport');var RpcVoiceRecording=require(_0x40e0('0x7'));var RpcVoiceTransferReport=require(_0x40e0('0x8'));var VoiceQueueReport=require(_0x40e0('0x9'));var VoiceCallReport=require('./voiceCallReport');var VoiceAgentReport=require(_0x40e0('0xa'));var VoiceDialReport=require(_0x40e0('0xb'));var UserReport=require(_0x40e0('0xc'));function Report(_0x107566){this[_0x40e0('0xd')]=_0x107566;this['agents']=_0x107566[_0x40e0('0xe')];this['telephones']=_0x107566[_0x40e0('0xf')];}Report[_0x40e0('0x10')]['sync']=function(_0x248a3f){var _0x11dae6=new VoiceQueueReport(this['realtime']);var _0x476962=new VoiceAgentReport(this['realtime']);var _0x495f45=new VoiceDialReport(this[_0x40e0('0xd')]);var _0x5acec5=new VoiceCallReport(this[_0x40e0('0xd')]);var _0x3a52aa=new UserReport(this[_0x40e0('0xd')]);if(config[_0x40e0('0x11')]&&config[_0x40e0('0x11')][_0x40e0('0x12')]){ami['on']('custom:voiceQueueReport',this[_0x40e0('0x13')][_0x40e0('0x14')](this));ami['on']('custom:voiceCallReport',this['voiceCallReport']['bind'](this));ami['on'](_0x40e0('0x15'),this[_0x40e0('0x16')]['bind'](this));ami['on']('custom:voiceDialReport',this[_0x40e0('0x17')]['bind'](this));ami['on']('blindtransfer',this[_0x40e0('0x18')][_0x40e0('0x14')](this));ami['on'](_0x40e0('0x19'),this[_0x40e0('0x1a')]['bind'](this));}};Report[_0x40e0('0x10')]['findAgent']=function(_0x1b65cd){var _0x5e351c=undefined;_0x5e351c=_[_0x40e0('0x1b')](this[_0x40e0('0xe')],function(_0x555fd3){return _0x555fd3[_0x40e0('0x1c')]==_0x1b65cd||_0x555fd3[_0x40e0('0x1d')]==_0x1b65cd;});if(_[_0x40e0('0x1e')](_0x5e351c)){var _0x474612=_['find'](this[_0x40e0('0xf')],function(_0x51c6c8){return _0x51c6c8[_0x40e0('0x1c')]==_0x1b65cd||_0x51c6c8[_0x40e0('0x1d')]==_0x1b65cd;});if(_0x474612){_0x5e351c=_[_0x40e0('0x1b')](this[_0x40e0('0xe')],function(_0x4f386b){return _0x4f386b[_0x40e0('0x1f')]==util[_0x40e0('0x20')]('SIP/%s',_0x474612['name']);});}}return _0x5e351c;};Report[_0x40e0('0x10')][_0x40e0('0x13')]=function(_0x39b916){for(var _0x348ebc=0x0;_0x348ebc<_0x39b916['length'];_0x348ebc+=0x1){var _0x4533d4=this[_0x40e0('0x21')](_0x39b916[_0x348ebc]['connectedlinenum']);if(_0x4533d4){_0x39b916[_0x348ebc][_0x40e0('0x1c')]=_0x4533d4[_0x40e0('0x1c')];_0x39b916[_0x348ebc][_0x40e0('0x22')]=!![];_0x39b916[_0x348ebc]['lastAssignedTo']=_0x4533d4[_0x40e0('0x1d')];_0x39b916[_0x348ebc][_0x40e0('0x1f')]=_['isNil'](_0x4533d4[_0x40e0('0x1f')])?util[_0x40e0('0x20')](_0x40e0('0x23'),_0x4533d4[_0x40e0('0x1d')]):_0x4533d4['interface'];if(_0x39b916[_0x348ebc]['queuecallercomplete']){_0x39b916[_0x348ebc][_0x40e0('0x24')]=moment()[_0x40e0('0x20')](_0x40e0('0x25'));}if(_0x39b916[_0x348ebc]['queuecallerexit']){_0x39b916[_0x348ebc][_0x40e0('0x26')]=moment()[_0x40e0('0x20')](_0x40e0('0x25'));}RpcMemberReport[_0x40e0('0x13')](_0x39b916[_0x348ebc]);}RpcVoiceQueueReport['create'](_0x39b916[_0x348ebc]);}};function extractCalleridNumber(_0x207417){var _0x53343c=_0x207417[_0x40e0('0x27')](/<(.*?)>/);return _0x53343c?_0x53343c[0x1]:_0x207417;}Report['prototype']['voiceCallReport']=function(_0x2aeb25){_0x2aeb25['destination']=_0x2aeb25['destination']||_0x2aeb25[_0x40e0('0x28')];if(_0x2aeb25[_0x40e0('0x29')]==_0x40e0('0x2a')){_0x2aeb25[_0x40e0('0x2b')]=_0x40e0('0x2c');_0x2aeb25[_0x40e0('0x2d')]=_0x2aeb25[_0x40e0('0x2c')];if(_0x2aeb25[_0x40e0('0x2e')]==_0x40e0('0x2f')){_0x2aeb25[_0x40e0('0x1c')]='';_0x2aeb25[_0x40e0('0x30')]=extractCalleridNumber(_0x2aeb25['callerid']);}else if(_0x2aeb25['context']==_0x40e0('0x31')){if(_0x2aeb25[_0x40e0('0x30')]==_0x40e0('0x32')){_0x2aeb25[_0x40e0('0x30')]=extractCalleridNumber(_0x2aeb25['calleridpreview']);_0x2aeb25[_0x40e0('0x33')]=_0x2aeb25[_0x40e0('0x34')];_0x2aeb25['destinationchannel']=[_0x2aeb25[_0x40e0('0x35')],_0x2aeb25[_0x40e0('0x35')]=_0x2aeb25[_0x40e0('0x36')]][0x0];_0x2aeb25[_0x40e0('0x37')]=_0x2aeb25['calleridpreview'];}else{_0x2aeb25[_0x40e0('0x30')]=_0x2aeb25[_0x40e0('0x33')];_0x2aeb25[_0x40e0('0x33')]=_0x2aeb25[_0x40e0('0x34')];if(_0x2aeb25['disposition']==_0x40e0('0x38')){_0x2aeb25[_0x40e0('0x1c')]=_0x2aeb25[_0x40e0('0x39')];}else{_0x2aeb25[_0x40e0('0x1c')]='';}}}}else{_0x2aeb25[_0x40e0('0x37')]=util['format']('\x22%s\x22\x20<%s>',_0x2aeb25['calleridname'],_0x2aeb25[_0x40e0('0x33')]);}RpcVoiceCallReport[_0x40e0('0x3a')](_0x2aeb25);if(_0x2aeb25[_0x40e0('0x3b')]){for(var _0x336f80=0x0;_0x336f80<_0x2aeb25['monitors'][_0x40e0('0x3c')];_0x336f80+=0x1){_0x2aeb25[_0x40e0('0x3d')]=_0x2aeb25[_0x40e0('0x3e')][_0x336f80][_0x40e0('0x3f')];_0x2aeb25['createdAt']=_0x2aeb25[_0x40e0('0x3e')][_0x336f80][_0x40e0('0x40')];if(_0x2aeb25[_0x40e0('0x28')]==_0x40e0('0x32')){_0x2aeb25[_0x40e0('0x33')]=_0x2aeb25['connectedlinenum'];_0x2aeb25[_0x40e0('0x41')]=_0x2aeb25[_0x40e0('0x42')];_0x2aeb25[_0x40e0('0x39')]=_0x2aeb25[_0x40e0('0x1c')];_0x2aeb25[_0x40e0('0x42')]=_0x2aeb25[_0x40e0('0x43')];_0x2aeb25[_0x40e0('0x28')]=_0x2aeb25['originatecalleridnum'];}else if(_0x2aeb25[_0x40e0('0x28')]=='xcally-motion-dialer'){_0x2aeb25[_0x40e0('0x33')]=_0x2aeb25[_0x40e0('0x30')];_0x2aeb25[_0x40e0('0x28')]=_0x2aeb25[_0x40e0('0x34')];}RpcVoiceRecording[_0x40e0('0x3a')](_0x2aeb25);}}};Report[_0x40e0('0x10')][_0x40e0('0x16')]=function(_0x3cba3d){if(_[_0x40e0('0x44')](_0x3cba3d)){_0x3cba3d[_0x40e0('0x45')](function(_0x343014){RpcVoiceAgentReport[_0x40e0('0x3a')](_0x343014);});}else{RpcVoiceAgentReport['create'](_0x3cba3d);}};Report['prototype'][_0x40e0('0x17')]=function(_0x4259f1){RpcVoiceDialReport[_0x40e0('0x3a')](_0x4259f1);var _0x120de0=undefined;var _0xc9d77b=_0x4259f1[_0x40e0('0x35')];if(_[_0x40e0('0x46')](_0xc9d77b,_0x40e0('0x47'))){var _0x2f6fc3=_0xc9d77b[_0x40e0('0x48')](_0xc9d77b[_0x40e0('0x49')]('/')+0x1,_0xc9d77b[_0x40e0('0x49')]('@'));_0x120de0=_[_0x40e0('0x1b')](this[_0x40e0('0xe')],function(_0x4915de){return _0x4915de['mobile']==_0x2f6fc3||_0x4915de[_0x40e0('0x4a')]==_0x2f6fc3||_0x4915de['accountcode']==_0x2f6fc3;});}else{var _0x2f6fc3=_0xc9d77b['substring'](_0xc9d77b[_0x40e0('0x49')]('/')+0x1,_0xc9d77b['lastIndexOf']('-'));_0x120de0=this['findAgent'](_0x2f6fc3);}if(_0x120de0){_0x4259f1[_0x40e0('0x1f')]=_['isNil'](_0x120de0[_0x40e0('0x1f')])?util[_0x40e0('0x20')](_0x40e0('0x23'),_0x120de0[_0x40e0('0x1d')]):_0x120de0[_0x40e0('0x1f')];_0x4259f1[_0x40e0('0x43')]=_0x120de0[_0x40e0('0x1d')];_0x4259f1[_0x40e0('0x1c')]=_0x120de0['accountcode'];RpcMemberReport[_0x40e0('0x17')](_0x4259f1);}};Report[_0x40e0('0x10')][_0x40e0('0x18')]=function(_0xad444c){RpcVoiceTransferReport[_0x40e0('0x18')](_0xad444c);};Report[_0x40e0('0x10')][_0x40e0('0x1a')]=function(_0x10639f){RpcVoiceTransferReport[_0x40e0('0x1a')](_0x10639f);};module[_0x40e0('0x4b')]=Report;
\ No newline at end of file
index ba0489f..4a0d098 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeecd=['redis','localhost','socket.io-emitter','trunks','agents','bind','registry','syncDeviceState','loopSyncRealTimeShow','resolve','actionSipShowRegistry','then','actionSipPeerStatus','catch','[loopSyncRealTimeShow]','error','prototype','isNotNull','isUndefined','emit','syncRegistry','username','stateRegistry','state','merge','event','actionid','format','name','trunk:save','[syncRegistry][UserReport]','device','toLowerCase','local','toNumber','updateStatusRealtime','telephones','stateTime','telephone:save','startsWith','Local','substring','indexOf','find','mobile','phone','accountcode','[syncDeviceState][UserReport]','inspect','syncPeerStatus','peerstatus','peer','registered','status','address','telephone:%s','trunk:%s','[syncPeerStatus][UserReport]','moment','ioredis','../../../config/environment','../../../config/logger','ami','../ami'];(function(_0x3b1186,_0x201e75){var _0x5a1c0b=function(_0x512167){while(--_0x512167){_0x3b1186['push'](_0x3b1186['shift']());}};_0x5a1c0b(++_0x201e75);}(_0xeecd,0x13a));var _0xdeec=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xeecd[_0x20a584];return _0x4b41a8;};'use strict';var _=require('lodash');var moment=require(_0xdeec('0x0'));var BPromise=require('bluebird');var util=require('util');var Redis=require(_0xdeec('0x1'));var config=require(_0xdeec('0x2'));var logger=require(_0xdeec('0x3'))(_0xdeec('0x4'));var ami=require(_0xdeec('0x5'));config[_0xdeec('0x6')]=_['defaults'](config[_0xdeec('0x6')],{'host':_0xdeec('0x7'),'port':0x18eb});var io=require(_0xdeec('0x8'))(new Redis(config['redis']));function UserReport(_0x568c24){this[_0xdeec('0x9')]=_0x568c24['trunks'];this[_0xdeec('0xa')]=_0x568c24[_0xdeec('0xa')];this['telephones']=_0x568c24['telephones'];ami['on']('registryentry',this['syncRegistry'][_0xdeec('0xb')](this));ami['on'](_0xdeec('0xc'),this['syncRegistry'][_0xdeec('0xb')](this));ami['on']('devicestatechange',this[_0xdeec('0xd')][_0xdeec('0xb')](this));ami['on']('peerstatus',this['syncPeerStatus'][_0xdeec('0xb')](this));this[_0xdeec('0xe')]();return BPromise[_0xdeec('0xf')]()['then'](ami[_0xdeec('0x10')]())[_0xdeec('0x11')](ami['actionDeviceStateList']())['then'](ami[_0xdeec('0x12')]())[_0xdeec('0x13')](loggerCatch(_0xdeec('0x14')));}function loggerCatch(_0x2dba57){return function(_0x4f1005){logger[_0xdeec('0x15')](_0x2dba57,util['inspect'](_0x4f1005,{'showHidden':![],'depth':null}));};}UserReport[_0xdeec('0x16')][_0xdeec('0xe')]=function(){setInterval(function(){BPromise[_0xdeec('0xf')]()[_0xdeec('0x11')](ami[_0xdeec('0x10')]())[_0xdeec('0x11')](ami['actionDeviceStateList']())[_0xdeec('0x11')](ami['actionSipPeerStatus']())[_0xdeec('0x13')](loggerCatch('[loopSyncRealTimeShow]'));},0x32c8);};UserReport[_0xdeec('0x16')][_0xdeec('0x17')]=function(_0x276212){return _0x276212!==null&&!_[_0xdeec('0x18')](_0x276212);};UserReport[_0xdeec('0x16')][_0xdeec('0x19')]=function(_0x3f2fe5,_0x447f2a,_0x306e52){io['to'](_0x3f2fe5)[_0xdeec('0x19')](_0x447f2a,_0x306e52);};UserReport[_0xdeec('0x16')][_0xdeec('0x1a')]=function(_0x5bb4c2){try{if(this['isNotNull'](_0x5bb4c2)){var _0x486dfe=_['find'](this[_0xdeec('0x9')],{'registry':_0x5bb4c2[_0xdeec('0x1b')]});if(_0x486dfe){_0x5bb4c2[_0xdeec('0x1c')]=_0x5bb4c2[_0xdeec('0x1d')];_[_0xdeec('0x1e')](_0x486dfe,_['omit'](_0x5bb4c2,[_0xdeec('0x1f'),_0xdeec('0x20'),_0xdeec('0x1b'),'state']));this[_0xdeec('0x19')](util[_0xdeec('0x21')]('trunk:%s',_0x486dfe[_0xdeec('0x22')]),_0xdeec('0x23'),_0x486dfe);}}}catch(_0x400779){logger['error'](_0xdeec('0x24'),util['inspect'](_0x400779,{'showHidden':![],'depth':null}));}};UserReport[_0xdeec('0x16')][_0xdeec('0xd')]=function(_0x11d5f6){try{if(this[_0xdeec('0x17')](_0x11d5f6)){if(this['agents'][_0x11d5f6[_0xdeec('0x25')]]){if(!this[_0xdeec('0xa')][_0x11d5f6[_0xdeec('0x25')]]['local']||_0x11d5f6['state'][_0xdeec('0x26')]()=='inuse'){this[_0xdeec('0xa')][_0x11d5f6[_0xdeec('0x25')]][_0xdeec('0x27')]=![];if(this[_0xdeec('0xa')][_0x11d5f6[_0xdeec('0x25')]][_0xdeec('0x1d')]!==_0x11d5f6[_0xdeec('0x1d')][_0xdeec('0x26')]()){this[_0xdeec('0xa')][_0x11d5f6['device']]['stateTime']=_[_0xdeec('0x28')](moment()[_0xdeec('0x21')]('x'));}this[_0xdeec('0xa')][_0x11d5f6[_0xdeec('0x25')]][_0xdeec('0x1d')]=_0x11d5f6[_0xdeec('0x1d')][_0xdeec('0x26')]();this[_0xdeec('0xa')][_0x11d5f6['device']][_0xdeec('0x29')](_0x11d5f6);}}else if(this[_0xdeec('0x2a')][_0x11d5f6[_0xdeec('0x25')]]){if(this['telephones'][_0x11d5f6['device']][_0xdeec('0x1d')]!==_0x11d5f6['state'][_0xdeec('0x26')]()){this[_0xdeec('0x2a')][_0x11d5f6[_0xdeec('0x25')]][_0xdeec('0x2b')]=_[_0xdeec('0x28')](moment()['format']('x'));}this['telephones'][_0x11d5f6[_0xdeec('0x25')]]['state']=_0x11d5f6[_0xdeec('0x1d')][_0xdeec('0x26')]();this[_0xdeec('0x19')](util[_0xdeec('0x21')]('telephone:%s',this[_0xdeec('0x2a')][_0x11d5f6[_0xdeec('0x25')]]['name']),_0xdeec('0x2c'),this[_0xdeec('0x2a')][_0x11d5f6[_0xdeec('0x25')]]);}else if(this[_0xdeec('0x9')][_0x11d5f6[_0xdeec('0x25')]]){if(this[_0xdeec('0x9')][_0x11d5f6[_0xdeec('0x25')]][_0xdeec('0x1d')]!==_0x11d5f6[_0xdeec('0x1d')]['toLowerCase']()){this[_0xdeec('0x9')][_0x11d5f6[_0xdeec('0x25')]][_0xdeec('0x2b')]=_[_0xdeec('0x28')](moment()[_0xdeec('0x21')]('x'));}this[_0xdeec('0x9')][_0x11d5f6[_0xdeec('0x25')]][_0xdeec('0x1d')]=_0x11d5f6[_0xdeec('0x1d')][_0xdeec('0x26')]();this['emit'](util[_0xdeec('0x21')]('trunk:%s',this[_0xdeec('0x9')][_0x11d5f6[_0xdeec('0x25')]][_0xdeec('0x22')]),_0xdeec('0x23'),this['trunks'][_0x11d5f6[_0xdeec('0x25')]]);}else if(_[_0xdeec('0x2d')](_0x11d5f6['device'],'Queue')){}else if(_[_0xdeec('0x2d')](_0x11d5f6[_0xdeec('0x25')],_0xdeec('0x2e'))){var _0x2919a5=_0x11d5f6['device'];var _0x13bdb3=_0x2919a5[_0xdeec('0x2f')](_0x2919a5['indexOf']('/')+0x1,_0x2919a5[_0xdeec('0x30')]('@'));var _0xd07bb0=_[_0xdeec('0x31')](this[_0xdeec('0xa')],function(_0x1a30e2){return _0x1a30e2[_0xdeec('0x32')]==_0x13bdb3||_0x1a30e2[_0xdeec('0x33')]==_0x13bdb3||_0x1a30e2[_0xdeec('0x34')]==_0x13bdb3;});if(_0xd07bb0){if(_0xd07bb0[_0xdeec('0x1d')]!==_0x11d5f6['state'][_0xdeec('0x26')]()){_0xd07bb0[_0xdeec('0x2b')]=_[_0xdeec('0x28')](moment()['format']('x'));}_0xd07bb0[_0xdeec('0x1d')]=_0x11d5f6['state'][_0xdeec('0x26')]();_0xd07bb0[_0xdeec('0x27')]=!![];_0xd07bb0[_0xdeec('0x29')](_0x11d5f6);}}else{}}}catch(_0x57b4a5){logger[_0xdeec('0x15')](_0xdeec('0x35'),util[_0xdeec('0x36')](_0x57b4a5,{'showHidden':![],'depth':null}));}};UserReport[_0xdeec('0x16')][_0xdeec('0x37')]=function(_0x1ab598){try{if(this['isNotNull'](_0x1ab598)&&this[_0xdeec('0x17')](_0x1ab598[_0xdeec('0x38')])){if(this[_0xdeec('0xa')][_0x1ab598[_0xdeec('0x39')]]){if(!this['agents'][_0x1ab598[_0xdeec('0x39')]]['local']||_0x1ab598[_0xdeec('0x38')][_0xdeec('0x26')]()==_0xdeec('0x3a')){this['agents'][_0x1ab598[_0xdeec('0x39')]][_0xdeec('0x27')]=![];this[_0xdeec('0xa')][_0x1ab598[_0xdeec('0x39')]][_0xdeec('0x3b')]=_0x1ab598[_0xdeec('0x38')][_0xdeec('0x26')]();this['agents'][_0x1ab598[_0xdeec('0x39')]]['address']=_0x1ab598[_0xdeec('0x3c')];this[_0xdeec('0xa')][_0x1ab598[_0xdeec('0x39')]][_0xdeec('0x29')](_0x1ab598);}}else if(this['telephones'][_0x1ab598[_0xdeec('0x39')]]){this[_0xdeec('0x2a')][_0x1ab598[_0xdeec('0x39')]][_0xdeec('0x3b')]=_0x1ab598['peerstatus'][_0xdeec('0x26')]();this[_0xdeec('0x2a')][_0x1ab598['peer']]['address']=_0x1ab598[_0xdeec('0x3c')];this['emit'](util[_0xdeec('0x21')](_0xdeec('0x3d'),this[_0xdeec('0x2a')][_0x1ab598[_0xdeec('0x39')]][_0xdeec('0x22')]),_0xdeec('0x2c'),this['telephones'][_0x1ab598[_0xdeec('0x39')]]);}else if(this['trunks'][_0x1ab598[_0xdeec('0x39')]]){this[_0xdeec('0x9')][_0x1ab598[_0xdeec('0x39')]][_0xdeec('0x3b')]=_0x1ab598[_0xdeec('0x38')][_0xdeec('0x26')]();this['trunks'][_0x1ab598[_0xdeec('0x39')]]['address']=_0x1ab598[_0xdeec('0x3c')];this['emit'](util['format'](_0xdeec('0x3e'),this[_0xdeec('0x9')][_0x1ab598[_0xdeec('0x39')]][_0xdeec('0x22')]),_0xdeec('0x23'),this[_0xdeec('0x9')][_0x1ab598[_0xdeec('0x39')]]);}else{}}}catch(_0x20c08b){logger['error'](_0xdeec('0x3f'),util[_0xdeec('0x36')](_0x20c08b,{'showHidden':![],'depth':null}));}};module['exports']=UserReport;
\ No newline at end of file
+var _0xc35f=['state','event','actionid','format','name','trunk:save','[syncRegistry][UserReport]','agents','toLowerCase','device','toNumber','telephone:%s','telephone:save','stateTime','trunk:%s','Queue','startsWith','Local','substring','indexOf','mobile','phone','accountcode','local','updateStatusRealtime','[syncDeviceState][UserReport]','peer','status','address','[syncPeerStatus][UserReport]','exports','ioredis','../../../config/environment','../../../config/logger','ami','redis','localhost','socket.io-emitter','trunks','telephones','registryentry','bind','registry','syncRegistry','devicestatechange','syncDeviceState','peerstatus','syncPeerStatus','loopSyncRealTimeShow','actionSipShowRegistry','then','actionDeviceStateList','actionSipPeerStatus','[loopSyncRealTimeShow]','error','inspect','prototype','resolve','catch','isNotNull','emit','find','username','stateRegistry'];(function(_0x5c6537,_0x3b1aed){var _0xfe3144=function(_0x1c2a27){while(--_0x1c2a27){_0x5c6537['push'](_0x5c6537['shift']());}};_0xfe3144(++_0x3b1aed);}(_0xc35f,0x19f));var _0xfc35=function(_0x1e2a87,_0x534515){_0x1e2a87=_0x1e2a87-0x0;var _0xb88a8d=_0xc35f[_0x1e2a87];return _0xb88a8d;};'use strict';var _=require('lodash');var moment=require('moment');var BPromise=require('bluebird');var util=require('util');var Redis=require(_0xfc35('0x0'));var config=require(_0xfc35('0x1'));var logger=require(_0xfc35('0x2'))(_0xfc35('0x3'));var ami=require('../ami');config[_0xfc35('0x4')]=_['defaults'](config[_0xfc35('0x4')],{'host':_0xfc35('0x5'),'port':0x18eb});var io=require(_0xfc35('0x6'))(new Redis(config['redis']));function UserReport(_0x32b7c6){this[_0xfc35('0x7')]=_0x32b7c6['trunks'];this['agents']=_0x32b7c6['agents'];this[_0xfc35('0x8')]=_0x32b7c6['telephones'];ami['on'](_0xfc35('0x9'),this['syncRegistry'][_0xfc35('0xa')](this));ami['on'](_0xfc35('0xb'),this[_0xfc35('0xc')][_0xfc35('0xa')](this));ami['on'](_0xfc35('0xd'),this[_0xfc35('0xe')][_0xfc35('0xa')](this));ami['on'](_0xfc35('0xf'),this[_0xfc35('0x10')][_0xfc35('0xa')](this));this[_0xfc35('0x11')]();return BPromise['resolve']()['then'](ami[_0xfc35('0x12')]())[_0xfc35('0x13')](ami[_0xfc35('0x14')]())['then'](ami[_0xfc35('0x15')]())['catch'](loggerCatch(_0xfc35('0x16')));}function loggerCatch(_0x338b46){return function(_0x3dfd0f){logger[_0xfc35('0x17')](_0x338b46,util[_0xfc35('0x18')](_0x3dfd0f,{'showHidden':![],'depth':null}));};}UserReport[_0xfc35('0x19')][_0xfc35('0x11')]=function(){setInterval(function(){BPromise[_0xfc35('0x1a')]()['then'](ami[_0xfc35('0x12')]())[_0xfc35('0x13')](ami['actionDeviceStateList']())[_0xfc35('0x13')](ami[_0xfc35('0x15')]())[_0xfc35('0x1b')](loggerCatch(_0xfc35('0x16')));},0x32c8);};UserReport[_0xfc35('0x19')][_0xfc35('0x1c')]=function(_0x2a1d84){return _0x2a1d84!==null&&!_['isUndefined'](_0x2a1d84);};UserReport[_0xfc35('0x19')][_0xfc35('0x1d')]=function(_0x1c95c2,_0x4a35c7,_0x30bbb1){io['to'](_0x1c95c2)[_0xfc35('0x1d')](_0x4a35c7,_0x30bbb1);};UserReport[_0xfc35('0x19')]['syncRegistry']=function(_0x39ecad){try{if(this[_0xfc35('0x1c')](_0x39ecad)){var _0x1e71dd=_[_0xfc35('0x1e')](this[_0xfc35('0x7')],{'registry':_0x39ecad[_0xfc35('0x1f')]});if(_0x1e71dd){_0x39ecad[_0xfc35('0x20')]=_0x39ecad[_0xfc35('0x21')];_['merge'](_0x1e71dd,_['omit'](_0x39ecad,[_0xfc35('0x22'),_0xfc35('0x23'),_0xfc35('0x1f'),_0xfc35('0x21')]));this[_0xfc35('0x1d')](util[_0xfc35('0x24')]('trunk:%s',_0x1e71dd[_0xfc35('0x25')]),_0xfc35('0x26'),_0x1e71dd);}}}catch(_0x508ae2){logger[_0xfc35('0x17')](_0xfc35('0x27'),util[_0xfc35('0x18')](_0x508ae2,{'showHidden':![],'depth':null}));}};UserReport[_0xfc35('0x19')]['syncDeviceState']=function(_0x48576e){try{if(this[_0xfc35('0x1c')](_0x48576e)){if(this[_0xfc35('0x28')][_0x48576e['device']]){if(!this[_0xfc35('0x28')][_0x48576e['device']]['local']||_0x48576e[_0xfc35('0x21')][_0xfc35('0x29')]()=='inuse'){this[_0xfc35('0x28')][_0x48576e[_0xfc35('0x2a')]]['local']=![];if(this[_0xfc35('0x28')][_0x48576e[_0xfc35('0x2a')]]['state']!==_0x48576e[_0xfc35('0x21')]['toLowerCase']()){this[_0xfc35('0x28')][_0x48576e['device']]['stateTime']=_[_0xfc35('0x2b')](moment()[_0xfc35('0x24')]('x'));}this['agents'][_0x48576e[_0xfc35('0x2a')]][_0xfc35('0x21')]=_0x48576e[_0xfc35('0x21')][_0xfc35('0x29')]();this[_0xfc35('0x28')][_0x48576e['device']]['updateStatusRealtime'](_0x48576e);}}else if(this[_0xfc35('0x8')][_0x48576e[_0xfc35('0x2a')]]){if(this['telephones'][_0x48576e[_0xfc35('0x2a')]][_0xfc35('0x21')]!==_0x48576e['state'][_0xfc35('0x29')]()){this[_0xfc35('0x8')][_0x48576e[_0xfc35('0x2a')]]['stateTime']=_[_0xfc35('0x2b')](moment()['format']('x'));}this[_0xfc35('0x8')][_0x48576e[_0xfc35('0x2a')]][_0xfc35('0x21')]=_0x48576e[_0xfc35('0x21')]['toLowerCase']();this['emit'](util[_0xfc35('0x24')](_0xfc35('0x2c'),this[_0xfc35('0x8')][_0x48576e[_0xfc35('0x2a')]][_0xfc35('0x25')]),_0xfc35('0x2d'),this['telephones'][_0x48576e[_0xfc35('0x2a')]]);}else if(this[_0xfc35('0x7')][_0x48576e['device']]){if(this[_0xfc35('0x7')][_0x48576e[_0xfc35('0x2a')]]['state']!==_0x48576e[_0xfc35('0x21')][_0xfc35('0x29')]()){this[_0xfc35('0x7')][_0x48576e[_0xfc35('0x2a')]][_0xfc35('0x2e')]=_[_0xfc35('0x2b')](moment()['format']('x'));}this[_0xfc35('0x7')][_0x48576e[_0xfc35('0x2a')]][_0xfc35('0x21')]=_0x48576e[_0xfc35('0x21')][_0xfc35('0x29')]();this['emit'](util[_0xfc35('0x24')](_0xfc35('0x2f'),this[_0xfc35('0x7')][_0x48576e['device']][_0xfc35('0x25')]),'trunk:save',this[_0xfc35('0x7')][_0x48576e['device']]);}else if(_['startsWith'](_0x48576e[_0xfc35('0x2a')],_0xfc35('0x30'))){}else if(_[_0xfc35('0x31')](_0x48576e[_0xfc35('0x2a')],_0xfc35('0x32'))){var _0x541752=_0x48576e[_0xfc35('0x2a')];var _0x2fe8b8=_0x541752[_0xfc35('0x33')](_0x541752[_0xfc35('0x34')]('/')+0x1,_0x541752[_0xfc35('0x34')]('@'));var _0x47651a=_[_0xfc35('0x1e')](this[_0xfc35('0x28')],function(_0x4cf94d){return _0x4cf94d[_0xfc35('0x35')]==_0x2fe8b8||_0x4cf94d[_0xfc35('0x36')]==_0x2fe8b8||_0x4cf94d[_0xfc35('0x37')]==_0x2fe8b8;});if(_0x47651a){if(_0x47651a['state']!==_0x48576e[_0xfc35('0x21')][_0xfc35('0x29')]()){_0x47651a[_0xfc35('0x2e')]=_[_0xfc35('0x2b')](moment()[_0xfc35('0x24')]('x'));}_0x47651a[_0xfc35('0x21')]=_0x48576e[_0xfc35('0x21')][_0xfc35('0x29')]();_0x47651a[_0xfc35('0x38')]=!![];_0x47651a[_0xfc35('0x39')](_0x48576e);}}else{}}}catch(_0x348b81){logger[_0xfc35('0x17')](_0xfc35('0x3a'),util[_0xfc35('0x18')](_0x348b81,{'showHidden':![],'depth':null}));}};UserReport[_0xfc35('0x19')][_0xfc35('0x10')]=function(_0x3a7b3d){try{if(this[_0xfc35('0x1c')](_0x3a7b3d)&&this['isNotNull'](_0x3a7b3d[_0xfc35('0xf')])){if(this[_0xfc35('0x28')][_0x3a7b3d['peer']]){if(!this['agents'][_0x3a7b3d[_0xfc35('0x3b')]][_0xfc35('0x38')]||_0x3a7b3d[_0xfc35('0xf')][_0xfc35('0x29')]()=='registered'){this[_0xfc35('0x28')][_0x3a7b3d[_0xfc35('0x3b')]][_0xfc35('0x38')]=![];this[_0xfc35('0x28')][_0x3a7b3d[_0xfc35('0x3b')]][_0xfc35('0x3c')]=_0x3a7b3d[_0xfc35('0xf')][_0xfc35('0x29')]();this[_0xfc35('0x28')][_0x3a7b3d['peer']][_0xfc35('0x3d')]=_0x3a7b3d[_0xfc35('0x3d')];this[_0xfc35('0x28')][_0x3a7b3d[_0xfc35('0x3b')]][_0xfc35('0x39')](_0x3a7b3d);}}else if(this[_0xfc35('0x8')][_0x3a7b3d[_0xfc35('0x3b')]]){this[_0xfc35('0x8')][_0x3a7b3d[_0xfc35('0x3b')]]['status']=_0x3a7b3d['peerstatus']['toLowerCase']();this[_0xfc35('0x8')][_0x3a7b3d[_0xfc35('0x3b')]][_0xfc35('0x3d')]=_0x3a7b3d[_0xfc35('0x3d')];this[_0xfc35('0x1d')](util[_0xfc35('0x24')](_0xfc35('0x2c'),this[_0xfc35('0x8')][_0x3a7b3d[_0xfc35('0x3b')]]['name']),_0xfc35('0x2d'),this['telephones'][_0x3a7b3d['peer']]);}else if(this[_0xfc35('0x7')][_0x3a7b3d[_0xfc35('0x3b')]]){this[_0xfc35('0x7')][_0x3a7b3d[_0xfc35('0x3b')]][_0xfc35('0x3c')]=_0x3a7b3d[_0xfc35('0xf')]['toLowerCase']();this['trunks'][_0x3a7b3d[_0xfc35('0x3b')]]['address']=_0x3a7b3d['address'];this[_0xfc35('0x1d')](util[_0xfc35('0x24')]('trunk:%s',this['trunks'][_0x3a7b3d[_0xfc35('0x3b')]][_0xfc35('0x25')]),_0xfc35('0x26'),this[_0xfc35('0x7')][_0x3a7b3d['peer']]);}else{}}}catch(_0x1ac7c3){logger[_0xfc35('0x17')](_0xfc35('0x3e'),util[_0xfc35('0x18')](_0x1ac7c3,{'showHidden':![],'depth':null}));}};module[_0xfc35('0x3f')]=UserReport;
\ No newline at end of file
index 54a8173..8d2b36e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x305c=['custom:agentconnect','agentringnoanswerAt','reason','answered_elsewhere','answeredelsewheredestinationuniqueid','answeredelsewheremembername','custom:agentansweredelsewhere','[syncAgentConnect][VoiceAgentReport]','rejected','syncQueueCallerAbandon','hasOwnProperty','abandoned','custom:agentqueuecallerabandon','[syncQueueCallerAbandon][VoiceAgentReport]','agentconnectAt','complete','talktime','agent','acwtime','acwTimeout','user:agentcomplete','custom:agentcomplete','[syncAgentComplete][VoiceAgentReport]','addVariable','keys','variable','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrtt','sipcallid','bridgepeer','bridgepvtcallid','membercalls','memberdynamic','memberinterface','memberlastcall','memberpenalty','memberrealtime','isNil','includes','transfer','custom:voiceAgentReport','values','transfereeuniqueid','origtransfereruniqueid','agentcompleteAt','seconds','secondtransfereruniqueid','[syncAttendedTransfer][VoiceAgentReport]','diff','[syncBlindTransfer][VoiceAgentReport]','syncMusicOnHoldStart','channel','substring','lastIndexOf','onhold','[syncMusicOnHoldStart][VoiceAgentReport]','[syncMusicOnHoldStop][VoiceAgentReport]','exports','lodash','util','../../../config/logger','ami','../ami','localhost','socket.io-emitter','redis','channels','voiceQueues','agents','agentcalled','syncAgentCalled','syncAgentConnect','bind','agentringnoanswer','syncAgentRingNoAnswer','queuecallerabandon','agentcomplete','varset','syncVarSet','syncHangup','musiconholdstart','musiconholdstop','syncMusicOnHoldStop','attendedtransfer','syncAttendedTransfer','syncBlindTransfer','prototype','emit','isNotNull','isUndefined','uniqueid','destuniqueid','YYYY-MM-DD\x20HH:mm:ss','called','variables','queue','inbound','merge','omit','event','privilege','custom:agentcalled','format','user:%s','membername','user:called','error','[syncAgentCalled][VoiceAgentReport]','inspect','lastevent','connect','holdtime','connectedlinenum','connectedlinename','destchannelstate','destchannelstatedesc','interface','pick','destconnectedlinenum','user:agentconnect'];(function(_0x59d144,_0x3c7b13){var _0x7455df=function(_0x20616c){while(--_0x20616c){_0x59d144['push'](_0x59d144['shift']());}};_0x7455df(++_0x3c7b13);}(_0x305c,0x1b2));var _0xc305=function(_0x4711fc,_0x31742c){_0x4711fc=_0x4711fc-0x0;var _0x4c1eaf=_0x305c[_0x4711fc];return _0x4c1eaf;};'use strict';var _=require(_0xc305('0x0'));var moment=require('moment');var util=require(_0xc305('0x1'));var Redis=require('ioredis');var config=require('../../../config/environment');var logger=require(_0xc305('0x2'))(_0xc305('0x3'));var ami=require(_0xc305('0x4'));config['redis']=_['defaults'](config['redis'],{'host':_0xc305('0x5'),'port':0x18eb});var io=require(_0xc305('0x6'))(new Redis(config[_0xc305('0x7')]));function VoiceAgentReport(_0x288f69){this[_0xc305('0x8')]={};this[_0xc305('0x9')]=_0x288f69[_0xc305('0x9')];this[_0xc305('0xa')]=_0x288f69['agents'];this['variables']={};ami['on'](_0xc305('0xb'),this[_0xc305('0xc')]['bind'](this));ami['on']('agentconnect',this[_0xc305('0xd')][_0xc305('0xe')](this));ami['on'](_0xc305('0xf'),this[_0xc305('0x10')][_0xc305('0xe')](this));ami['on'](_0xc305('0x11'),this['syncQueueCallerAbandon'][_0xc305('0xe')](this));ami['on'](_0xc305('0x12'),this['syncAgentComplete'][_0xc305('0xe')](this));ami['on'](_0xc305('0x13'),this[_0xc305('0x14')][_0xc305('0xe')](this));ami['on']('hangup',this[_0xc305('0x15')]['bind'](this));ami['on'](_0xc305('0x16'),this['syncMusicOnHoldStart'][_0xc305('0xe')](this));ami['on'](_0xc305('0x17'),this[_0xc305('0x18')][_0xc305('0xe')](this));ami['on'](_0xc305('0x19'),this[_0xc305('0x1a')][_0xc305('0xe')](this));ami['on']('blindtransfer',this[_0xc305('0x1b')][_0xc305('0xe')](this));}VoiceAgentReport[_0xc305('0x1c')][_0xc305('0x1d')]=function(_0x1a2e7e,_0x4f4fdb,_0x5ebb02){io['to'](_0x1a2e7e)[_0xc305('0x1d')](_0x4f4fdb,_0x5ebb02);};VoiceAgentReport[_0xc305('0x1c')][_0xc305('0x1e')]=function(_0x30ed49){return _0x30ed49!==null&&!_[_0xc305('0x1f')](_0x30ed49);};VoiceAgentReport[_0xc305('0x1c')]['syncAgentCalled']=function(_0x1ede82){try{if(this['isNotNull'](_0x1ede82)){if(_[_0xc305('0x1f')](this[_0xc305('0x8')][_0x1ede82[_0xc305('0x20')]])){this[_0xc305('0x8')][_0x1ede82[_0xc305('0x20')]]={};}if(_[_0xc305('0x1f')](this[_0xc305('0x8')][_0x1ede82[_0xc305('0x20')]][_0x1ede82[_0xc305('0x21')]])){this[_0xc305('0x8')][_0x1ede82[_0xc305('0x20')]][_0x1ede82[_0xc305('0x21')]]={'agentcalledAt':moment()['format'](_0xc305('0x22')),'lastevent':_0xc305('0x23'),'variables':this[_0xc305('0x24')][_0x1ede82['uniqueid']],'type':this['voiceQueues'][_0x1ede82['queue']]?this['voiceQueues'][_0x1ede82[_0xc305('0x25')]]['type']||_0xc305('0x26'):_0xc305('0x26')};}_[_0xc305('0x27')](this['channels'][_0x1ede82[_0xc305('0x20')]][_0x1ede82['destuniqueid']],_[_0xc305('0x28')](_0x1ede82,[_0xc305('0x29'),_0xc305('0x2a')]));ami[_0xc305('0x1d')](_0xc305('0x2b'),this[_0xc305('0x8')][_0x1ede82[_0xc305('0x20')]][_0x1ede82[_0xc305('0x21')]]);this[_0xc305('0x1d')](util[_0xc305('0x2c')](_0xc305('0x2d'),_0x1ede82[_0xc305('0x2e')]),_0xc305('0x2f'),this[_0xc305('0x8')][_0x1ede82[_0xc305('0x20')]][_0x1ede82[_0xc305('0x21')]]);}}catch(_0x2f3fb3){logger[_0xc305('0x30')](_0xc305('0x31'),util[_0xc305('0x32')](_0x2f3fb3,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xc305('0x1c')][_0xc305('0xd')]=function(_0x2a3018){try{if(this[_0xc305('0x1e')](_0x2a3018)){if(this[_0xc305('0x8')][_0x2a3018[_0xc305('0x20')]]){for(var _0xc117e in this[_0xc305('0x8')][_0x2a3018[_0xc305('0x20')]]){if(this['channels'][_0x2a3018[_0xc305('0x20')]]['hasOwnProperty'](_0xc117e)){if(_0x2a3018[_0xc305('0x21')]===_0xc117e){this['channels'][_0x2a3018[_0xc305('0x20')]][_0xc117e]['agentconnectAt']=moment()['format'](_0xc305('0x22'));this[_0xc305('0x8')][_0x2a3018['uniqueid']][_0xc117e][_0xc305('0x33')]=_0xc305('0x34');this[_0xc305('0x8')][_0x2a3018[_0xc305('0x20')]][_0xc117e][_0xc305('0x35')]=_0x2a3018[_0xc305('0x35')];this[_0xc305('0x8')][_0x2a3018[_0xc305('0x20')]][_0xc117e]['connectedlinenum']=_0x2a3018[_0xc305('0x36')];this['channels'][_0x2a3018['uniqueid']][_0xc117e]['connectedlinename']=_0x2a3018[_0xc305('0x37')];this[_0xc305('0x8')][_0x2a3018[_0xc305('0x20')]][_0xc117e][_0xc305('0x38')]=_0x2a3018[_0xc305('0x38')];this[_0xc305('0x8')][_0x2a3018[_0xc305('0x20')]][_0xc117e][_0xc305('0x39')]=_0x2a3018[_0xc305('0x39')];_[_0xc305('0x27')](this[_0xc305('0xa')][_0x2a3018[_0xc305('0x3a')]],_[_0xc305('0x3b')](_0x2a3018,[_0xc305('0x25'),_0xc305('0x3c')]));this[_0xc305('0x1d')](util['format'](_0xc305('0x2d'),_0x2a3018[_0xc305('0x2e')]),_0xc305('0x3d'),this['channels'][_0x2a3018[_0xc305('0x20')]][_0x2a3018[_0xc305('0x21')]]);ami['emit'](_0xc305('0x3e'),this[_0xc305('0x8')][_0x2a3018[_0xc305('0x20')]][_0xc117e]);}else if(!this['channels'][_0x2a3018[_0xc305('0x20')]][_0xc117e][_0xc305('0xf')]&&!this['channels'][_0x2a3018[_0xc305('0x20')]][_0xc117e][_0xc305('0x12')]){this[_0xc305('0x8')][_0x2a3018['uniqueid']][_0xc117e][_0xc305('0xf')]=!![];this[_0xc305('0x8')][_0x2a3018[_0xc305('0x20')]][_0xc117e][_0xc305('0x3f')]=moment()['format'](_0xc305('0x22'));this[_0xc305('0x8')][_0x2a3018['uniqueid']][_0xc117e][_0xc305('0x40')]=_0xc305('0x41');this['channels'][_0x2a3018[_0xc305('0x20')]][_0xc117e][_0xc305('0x33')]=_0xc305('0x41');this[_0xc305('0x8')][_0x2a3018[_0xc305('0x20')]][_0xc117e][_0xc305('0x42')]=_0x2a3018[_0xc305('0x21')];this[_0xc305('0x8')][_0x2a3018[_0xc305('0x20')]][_0xc117e][_0xc305('0x43')]=_0x2a3018[_0xc305('0x2e')];ami[_0xc305('0x1d')](_0xc305('0x44'),this['channels'][_0x2a3018[_0xc305('0x20')]][_0xc117e]);}}}}}}catch(_0x1cdb14){logger['error'](_0xc305('0x45'),util['inspect'](_0x1cdb14,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xc305('0x1c')][_0xc305('0x10')]=function(_0x1d9ef5){try{if(this[_0xc305('0x1e')](_0x1d9ef5)){if(this['channels'][_0x1d9ef5[_0xc305('0x20')]]&&this[_0xc305('0x8')][_0x1d9ef5['uniqueid']][_0x1d9ef5[_0xc305('0x21')]]){this[_0xc305('0x8')][_0x1d9ef5[_0xc305('0x20')]][_0x1d9ef5[_0xc305('0x21')]][_0xc305('0xf')]=!![];this[_0xc305('0x8')][_0x1d9ef5[_0xc305('0x20')]][_0x1d9ef5[_0xc305('0x21')]]['agentringnoanswerAt']=moment()[_0xc305('0x2c')](_0xc305('0x22'));this[_0xc305('0x8')][_0x1d9ef5[_0xc305('0x20')]][_0x1d9ef5['destuniqueid']][_0xc305('0x40')]=_0xc305('0x46');this[_0xc305('0x8')][_0x1d9ef5[_0xc305('0x20')]][_0x1d9ef5[_0xc305('0x21')]]['lastevent']=_0xc305('0x46');ami[_0xc305('0x1d')]('custom:agentringnoanswer',this[_0xc305('0x8')][_0x1d9ef5[_0xc305('0x20')]][_0x1d9ef5[_0xc305('0x21')]]);}}}catch(_0x50d8ed){logger[_0xc305('0x30')]('[syncAgentRingNoAnswer][VoiceAgentReport]',util[_0xc305('0x32')](_0x50d8ed,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0xc305('0x47')]=function(_0x4488d4){try{if(this['isNotNull'](_0x4488d4)){if(this['channels'][_0x4488d4[_0xc305('0x20')]]){for(var _0x2cbb06 in this['channels'][_0x4488d4[_0xc305('0x20')]]){if(this[_0xc305('0x8')][_0x4488d4['uniqueid']][_0xc305('0x48')](_0x2cbb06)&&!this[_0xc305('0x8')][_0x4488d4[_0xc305('0x20')]][_0x2cbb06][_0xc305('0xf')]&&!this[_0xc305('0x8')][_0x4488d4[_0xc305('0x20')]][_0x2cbb06][_0xc305('0x12')]){this[_0xc305('0x8')][_0x4488d4['uniqueid']][_0x2cbb06]['agentringnoanswer']=!![];this[_0xc305('0x8')][_0x4488d4[_0xc305('0x20')]][_0x2cbb06][_0xc305('0x3f')]=moment()['format'](_0xc305('0x22'));this[_0xc305('0x8')][_0x4488d4[_0xc305('0x20')]][_0x2cbb06][_0xc305('0x40')]=_0xc305('0x49');this['channels'][_0x4488d4[_0xc305('0x20')]][_0x2cbb06][_0xc305('0x33')]=_0xc305('0x49');ami[_0xc305('0x1d')](_0xc305('0x4a'),this[_0xc305('0x8')][_0x4488d4[_0xc305('0x20')]][_0x2cbb06]);}}}}}catch(_0x2e1aaa){logger[_0xc305('0x30')](_0xc305('0x4b'),util[_0xc305('0x32')](_0x2e1aaa,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype']['syncAgentComplete']=function(_0x31000b){try{if(this['isNotNull'](_0x31000b)){if(this[_0xc305('0x8')][_0x31000b[_0xc305('0x20')]]){for(var _0xc7e8b6 in this[_0xc305('0x8')][_0x31000b[_0xc305('0x20')]]){if(this[_0xc305('0x8')][_0x31000b['uniqueid']][_0xc305('0x48')](_0xc7e8b6)){if(this['channels'][_0x31000b['uniqueid']][_0xc7e8b6][_0xc305('0x4c')]&&!this[_0xc305('0x8')][_0x31000b[_0xc305('0x20')]][_0xc7e8b6][_0xc305('0x12')]){this['channels'][_0x31000b[_0xc305('0x20')]][_0xc7e8b6]['agentcomplete']=!![];this[_0xc305('0x8')][_0x31000b[_0xc305('0x20')]][_0xc7e8b6]['agentcompleteAt']=moment()[_0xc305('0x2c')](_0xc305('0x22'));this['channels'][_0x31000b[_0xc305('0x20')]][_0xc7e8b6][_0xc305('0x33')]=_0xc305('0x4d');this[_0xc305('0x8')][_0x31000b['uniqueid']][_0xc7e8b6]['talktime']=_0x31000b[_0xc305('0x4e')];this[_0xc305('0x8')][_0x31000b[_0xc305('0x20')]][_0xc7e8b6]['reason']=_0x31000b[_0xc305('0x40')]=='transfer'?_0xc305('0x4f'):_0x31000b[_0xc305('0x40')];if(this['voiceQueues'][_0x31000b[_0xc305('0x25')]]&&this[_0xc305('0x9')][_0x31000b[_0xc305('0x25')]]['acw']){this['channels'][_0x31000b[_0xc305('0x20')]][_0xc7e8b6]['agentacw']=!![];this[_0xc305('0x8')][_0x31000b['uniqueid']][_0xc7e8b6][_0xc305('0x50')]=this[_0xc305('0x9')][_0x31000b[_0xc305('0x25')]][_0xc305('0x51')];}this[_0xc305('0xa')][_0x31000b[_0xc305('0x3a')]]=_[_0xc305('0x28')](this[_0xc305('0xa')][_0x31000b[_0xc305('0x3a')]],[_0xc305('0x25'),_0xc305('0x3c')]);this[_0xc305('0x1d')](util['format'](_0xc305('0x2d'),_0x31000b[_0xc305('0x2e')]),_0xc305('0x52'),this[_0xc305('0x8')][_0x31000b[_0xc305('0x20')]][_0xc7e8b6]);ami[_0xc305('0x1d')](_0xc305('0x53'),this[_0xc305('0x8')][_0x31000b[_0xc305('0x20')]][_0xc7e8b6]);}}}}}}catch(_0x718707){logger[_0xc305('0x30')](_0xc305('0x54'),util[_0xc305('0x32')](_0x718707,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xc305('0x1c')][_0xc305('0x14')]=function(_0x566d5b){try{if(this[_0xc305('0x1e')](_0x566d5b)){this[_0xc305('0x55')](_0x566d5b[_0xc305('0x20')],_[_0xc305('0x56')](_0x566d5b[_0xc305('0x57')])[0x0],_0x566d5b['value']);if(this[_0xc305('0x8')][_0x566d5b[_0xc305('0x20')]]){for(var _0x38f76e in this['channels'][_0x566d5b[_0xc305('0x20')]]){if(this[_0xc305('0x8')][_0x566d5b[_0xc305('0x20')]][_0xc305('0x48')](_0x38f76e)){if(_[_0xc305('0x1f')](this[_0xc305('0x8')][_0x566d5b[_0xc305('0x20')]][_0x38f76e]['variables'])){this['channels'][_0x566d5b[_0xc305('0x20')]][_0x38f76e]['variables']={};}this['channels'][_0x566d5b[_0xc305('0x20')]][_0x38f76e][_0xc305('0x24')]=this[_0xc305('0x24')][_0x566d5b[_0xc305('0x20')]];}}}}}catch(_0xc3dad9){logger['error']('[syncVarSet][VoiceAgentReport]',util[_0xc305('0x32')](_0xc3dad9,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xc305('0x1c')]['addVariable']=function(_0x2d236a,_0x5956f7,_0x4c6d80){var _0x3d7ceb=[_0xc305('0x58'),_0xc305('0x59'),_0xc305('0x5a'),'rtpaudioqosjitterbridged',_0xc305('0x5b'),_0xc305('0x5c'),_0xc305('0x5d'),'rtpaudioqosrttbridged',_0xc305('0x5e'),'sipuri',_0xc305('0x5f'),_0xc305('0x60'),_0xc305('0x61'),_0xc305('0x62'),_0xc305('0x63'),_0xc305('0x64'),_0xc305('0x2e'),_0xc305('0x65'),_0xc305('0x66')];if(!_[_0xc305('0x67')](_0x5956f7)&&!_[_0xc305('0x68')](_0x3d7ceb,_0x5956f7)){if(_[_0xc305('0x1f')](this[_0xc305('0x24')][_0x2d236a])){this[_0xc305('0x24')][_0x2d236a]={};}this[_0xc305('0x24')][_0x2d236a][_0x5956f7]=_0x4c6d80;}};VoiceAgentReport[_0xc305('0x1c')][_0xc305('0x15')]=function(_0x430da0){try{if(this['isNotNull'](_0x430da0)){if(this['channels'][_0x430da0['uniqueid']]){for(var _0x3b9f5a in this[_0xc305('0x8')][_0x430da0['uniqueid']]){if(this[_0xc305('0x8')][_0x430da0[_0xc305('0x20')]]['hasOwnProperty'](_0x3b9f5a)){if(this[_0xc305('0x8')][_0x430da0[_0xc305('0x20')]][_0x3b9f5a][_0xc305('0x40')]==_0xc305('0x69')&&this[_0xc305('0x8')][_0x430da0[_0xc305('0x20')]][_0x3b9f5a][_0xc305('0x12')]){this['channels'][_0x430da0[_0xc305('0x20')]][_0x3b9f5a]['agentcompleteAt']=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');}}}ami[_0xc305('0x1d')](_0xc305('0x6a'),_[_0xc305('0x6b')](this[_0xc305('0x8')][_0x430da0[_0xc305('0x20')]]));delete this[_0xc305('0x8')][_0x430da0[_0xc305('0x20')]];}if(this[_0xc305('0x24')][_0x430da0[_0xc305('0x20')]]){delete this['variables'][_0x430da0[_0xc305('0x20')]];}}}catch(_0xd1aa96){logger[_0xc305('0x30')]('[syncHangup][VoiceAgentReport]',util[_0xc305('0x32')](_0xd1aa96,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0xc305('0x1c')][_0xc305('0x1a')]=function(_0x5d0683){try{if(this[_0xc305('0x1e')](_0x5d0683)){if(this['channels'][_0x5d0683[_0xc305('0x6c')]]){for(var _0x43361d in this[_0xc305('0x8')][_0x5d0683[_0xc305('0x6c')]]){if(this['channels'][_0x5d0683[_0xc305('0x6c')]][_0xc305('0x48')](_0x43361d)){if(_0x5d0683[_0xc305('0x6d')]===_0x43361d){var _0x222b7e=moment();this[_0xc305('0x8')][_0x5d0683[_0xc305('0x6c')]][_0x43361d]['agentcomplete']=!![];this[_0xc305('0x8')][_0x5d0683[_0xc305('0x6c')]][_0x43361d][_0xc305('0x6e')]=moment()[_0xc305('0x2c')](_0xc305('0x22'));this[_0xc305('0x8')][_0x5d0683['transfereeuniqueid']][_0x43361d][_0xc305('0x40')]='transfer';this[_0xc305('0x8')][_0x5d0683[_0xc305('0x6c')]][_0x43361d][_0xc305('0x33')]=_0xc305('0x4d');this[_0xc305('0x8')][_0x5d0683['transfereeuniqueid']][_0x43361d][_0xc305('0x4e')]=_0x222b7e['diff'](this[_0xc305('0x8')][_0x5d0683[_0xc305('0x6c')]][_0x43361d][_0xc305('0x4c')],_0xc305('0x6f'));}}}}if(this['channels'][_0x5d0683[_0xc305('0x70')]]){var _0x319584=this[_0xc305('0x8')][_0x5d0683[_0xc305('0x70')]];this[_0xc305('0x8')][_0x5d0683[_0xc305('0x70')]]=this['channels'][_0x5d0683[_0xc305('0x6c')]];this['channels'][_0x5d0683['transfereeuniqueid']]=_0x319584;}}}catch(_0x5c4548){logger[_0xc305('0x30')](_0xc305('0x71'),util[_0xc305('0x32')](_0x5c4548,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0xc305('0x1b')]=function(_0x1206ed){try{if(this[_0xc305('0x1e')](_0x1206ed)){if(this['channels'][_0x1206ed[_0xc305('0x6c')]]){for(var _0x42fca0 in this['channels'][_0x1206ed[_0xc305('0x6c')]]){if(this[_0xc305('0x8')][_0x1206ed[_0xc305('0x6c')]][_0xc305('0x48')](_0x42fca0)){if(_0x1206ed['transfereruniqueid']===_0x42fca0){var _0x34a50d=moment();this[_0xc305('0x8')][_0x1206ed[_0xc305('0x6c')]][_0x42fca0][_0xc305('0x12')]=!![];this[_0xc305('0x8')][_0x1206ed[_0xc305('0x6c')]][_0x42fca0]['agentcompleteAt']=_0x34a50d;this['channels'][_0x1206ed[_0xc305('0x6c')]][_0x42fca0]['reason']=_0xc305('0x69');this[_0xc305('0x8')][_0x1206ed[_0xc305('0x6c')]][_0x42fca0][_0xc305('0x33')]=_0xc305('0x4d');this['channels'][_0x1206ed[_0xc305('0x6c')]][_0x42fca0][_0xc305('0x4e')]=_0x34a50d[_0xc305('0x72')](this[_0xc305('0x8')][_0x1206ed[_0xc305('0x6c')]][_0x42fca0][_0xc305('0x4c')],_0xc305('0x6f'));}}}}}}catch(_0x1d04e7){logger[_0xc305('0x30')](_0xc305('0x73'),util[_0xc305('0x32')](_0x1d04e7,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0xc305('0x74')]=function(_0x2150c3){var _0x4054cc='';try{if(this[_0xc305('0x1e')](_0x2150c3)){if(_0x2150c3[_0xc305('0x75')]){_0x4054cc=_0x2150c3[_0xc305('0x75')][_0xc305('0x76')](0x0,_0x2150c3[_0xc305('0x75')][_0xc305('0x77')]('-'));if(this[_0xc305('0xa')][_0x4054cc]){this['agents'][_0x4054cc][_0xc305('0x78')]=!![];}}}}catch(_0x2f2848){logger['error'](_0xc305('0x79'),util[_0xc305('0x32')](_0x2f2848,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0xc305('0x18')]=function(_0x59b339){var _0x4dfbc9='';try{if(this[_0xc305('0x1e')](_0x59b339)){if(_0x59b339[_0xc305('0x75')]){_0x4dfbc9=_0x59b339[_0xc305('0x75')]['substring'](0x0,_0x59b339[_0xc305('0x75')][_0xc305('0x77')]('-'));if(this['agents'][_0x4dfbc9]){this[_0xc305('0xa')][_0x4dfbc9]['onhold']=![];}}}}catch(_0x2ac767){logger[_0xc305('0x30')](_0xc305('0x7a'),util['inspect'](_0x2ac767,{'showHidden':![],'depth':null}));}};module[_0xc305('0x7b')]=VoiceAgentReport;
\ No newline at end of file
+var _0x1133=['privilege','custom:agentcalled','user:%s','membername','error','inspect','hasOwnProperty','agentconnectAt','connect','holdtime','connectedlinenum','connectedlinename','destchannelstate','destchannelstatedesc','interface','pick','destconnectedlinenum','user:agentconnect','agentringnoanswer','agentringnoanswerAt','reason','lastevent','answered_elsewhere','answeredelsewheremembername','custom:agentansweredelsewhere','[syncAgentConnect][VoiceAgentReport]','syncAgentRingNoAnswer','rejected','custom:agentringnoanswer','abandoned','custom:agentqueuecallerabandon','syncAgentComplete','agentcompleteAt','complete','talktime','transfer','agent','agentacw','acwtime','acwTimeout','user:agentcomplete','custom:agentcomplete','addVariable','keys','value','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqoslossbridged','rtpaudioqosrtt','sipcallid','bridgepeer','bridgepvtcallid','membercalls','memberinterface','memberlastcall','memberpenalty','memberrealtime','isNil','includes','syncHangup','custom:voiceAgentReport','values','[syncHangup][VoiceAgentReport]','transfereeuniqueid','origtransfereruniqueid','diff','seconds','secondtransfereruniqueid','[syncAttendedTransfer][VoiceAgentReport]','transfereruniqueid','syncMusicOnHoldStart','channel','substring','lastIndexOf','[syncMusicOnHoldStart][VoiceAgentReport]','onhold','[syncMusicOnHoldStop][VoiceAgentReport]','exports','moment','util','ioredis','../../../config/environment','../../../config/logger','../ami','redis','defaults','localhost','socket.io-emitter','channels','voiceQueues','agents','variables','agentcalled','syncAgentCalled','agentconnect','syncAgentConnect','bind','queuecallerabandon','syncQueueCallerAbandon','agentcomplete','varset','syncVarSet','hangup','musiconholdstart','musiconholdstop','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','prototype','emit','isUndefined','isNotNull','uniqueid','destuniqueid','format','YYYY-MM-DD\x20HH:mm:ss','called','queue','type','inbound','merge','omit','event'];(function(_0x259b4b,_0x7f15ff){var _0x5f1489=function(_0x18db84){while(--_0x18db84){_0x259b4b['push'](_0x259b4b['shift']());}};_0x5f1489(++_0x7f15ff);}(_0x1133,0x14c));var _0x3113=function(_0x2c3216,_0x46b4b4){_0x2c3216=_0x2c3216-0x0;var _0x460d89=_0x1133[_0x2c3216];return _0x460d89;};'use strict';var _=require('lodash');var moment=require(_0x3113('0x0'));var util=require(_0x3113('0x1'));var Redis=require(_0x3113('0x2'));var config=require(_0x3113('0x3'));var logger=require(_0x3113('0x4'))('ami');var ami=require(_0x3113('0x5'));config[_0x3113('0x6')]=_[_0x3113('0x7')](config[_0x3113('0x6')],{'host':_0x3113('0x8'),'port':0x18eb});var io=require(_0x3113('0x9'))(new Redis(config[_0x3113('0x6')]));function VoiceAgentReport(_0x423f0f){this[_0x3113('0xa')]={};this[_0x3113('0xb')]=_0x423f0f[_0x3113('0xb')];this[_0x3113('0xc')]=_0x423f0f[_0x3113('0xc')];this[_0x3113('0xd')]={};ami['on'](_0x3113('0xe'),this[_0x3113('0xf')]['bind'](this));ami['on'](_0x3113('0x10'),this[_0x3113('0x11')][_0x3113('0x12')](this));ami['on']('agentringnoanswer',this['syncAgentRingNoAnswer'][_0x3113('0x12')](this));ami['on'](_0x3113('0x13'),this[_0x3113('0x14')]['bind'](this));ami['on'](_0x3113('0x15'),this['syncAgentComplete'][_0x3113('0x12')](this));ami['on'](_0x3113('0x16'),this[_0x3113('0x17')][_0x3113('0x12')](this));ami['on'](_0x3113('0x18'),this['syncHangup']['bind'](this));ami['on'](_0x3113('0x19'),this['syncMusicOnHoldStart'][_0x3113('0x12')](this));ami['on'](_0x3113('0x1a'),this['syncMusicOnHoldStop'][_0x3113('0x12')](this));ami['on'](_0x3113('0x1b'),this[_0x3113('0x1c')]['bind'](this));ami['on'](_0x3113('0x1d'),this[_0x3113('0x1e')][_0x3113('0x12')](this));}VoiceAgentReport[_0x3113('0x1f')][_0x3113('0x20')]=function(_0x41991d,_0x15eece,_0x1d2df0){io['to'](_0x41991d)[_0x3113('0x20')](_0x15eece,_0x1d2df0);};VoiceAgentReport[_0x3113('0x1f')]['isNotNull']=function(_0x170149){return _0x170149!==null&&!_[_0x3113('0x21')](_0x170149);};VoiceAgentReport[_0x3113('0x1f')][_0x3113('0xf')]=function(_0x409dcc){try{if(this[_0x3113('0x22')](_0x409dcc)){if(_[_0x3113('0x21')](this[_0x3113('0xa')][_0x409dcc[_0x3113('0x23')]])){this['channels'][_0x409dcc[_0x3113('0x23')]]={};}if(_[_0x3113('0x21')](this[_0x3113('0xa')][_0x409dcc[_0x3113('0x23')]][_0x409dcc[_0x3113('0x24')]])){this['channels'][_0x409dcc[_0x3113('0x23')]][_0x409dcc[_0x3113('0x24')]]={'agentcalledAt':moment()[_0x3113('0x25')](_0x3113('0x26')),'lastevent':_0x3113('0x27'),'variables':this['variables'][_0x409dcc['uniqueid']],'type':this[_0x3113('0xb')][_0x409dcc['queue']]?this[_0x3113('0xb')][_0x409dcc[_0x3113('0x28')]][_0x3113('0x29')]||_0x3113('0x2a'):_0x3113('0x2a')};}_[_0x3113('0x2b')](this['channels'][_0x409dcc['uniqueid']][_0x409dcc['destuniqueid']],_[_0x3113('0x2c')](_0x409dcc,[_0x3113('0x2d'),_0x3113('0x2e')]));ami[_0x3113('0x20')](_0x3113('0x2f'),this[_0x3113('0xa')][_0x409dcc['uniqueid']][_0x409dcc['destuniqueid']]);this['emit'](util[_0x3113('0x25')](_0x3113('0x30'),_0x409dcc[_0x3113('0x31')]),'user:called',this[_0x3113('0xa')][_0x409dcc[_0x3113('0x23')]][_0x409dcc[_0x3113('0x24')]]);}}catch(_0x1f30b5){logger[_0x3113('0x32')]('[syncAgentCalled][VoiceAgentReport]',util[_0x3113('0x33')](_0x1f30b5,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3113('0x1f')][_0x3113('0x11')]=function(_0x5aad7a){try{if(this['isNotNull'](_0x5aad7a)){if(this[_0x3113('0xa')][_0x5aad7a[_0x3113('0x23')]]){for(var _0x1866f3 in this[_0x3113('0xa')][_0x5aad7a[_0x3113('0x23')]]){if(this[_0x3113('0xa')][_0x5aad7a[_0x3113('0x23')]][_0x3113('0x34')](_0x1866f3)){if(_0x5aad7a[_0x3113('0x24')]===_0x1866f3){this['channels'][_0x5aad7a[_0x3113('0x23')]][_0x1866f3][_0x3113('0x35')]=moment()[_0x3113('0x25')](_0x3113('0x26'));this[_0x3113('0xa')][_0x5aad7a['uniqueid']][_0x1866f3]['lastevent']=_0x3113('0x36');this[_0x3113('0xa')][_0x5aad7a[_0x3113('0x23')]][_0x1866f3]['holdtime']=_0x5aad7a[_0x3113('0x37')];this[_0x3113('0xa')][_0x5aad7a['uniqueid']][_0x1866f3]['connectedlinenum']=_0x5aad7a[_0x3113('0x38')];this['channels'][_0x5aad7a['uniqueid']][_0x1866f3]['connectedlinename']=_0x5aad7a[_0x3113('0x39')];this[_0x3113('0xa')][_0x5aad7a['uniqueid']][_0x1866f3][_0x3113('0x3a')]=_0x5aad7a[_0x3113('0x3a')];this[_0x3113('0xa')][_0x5aad7a['uniqueid']][_0x1866f3][_0x3113('0x3b')]=_0x5aad7a['destchannelstatedesc'];_[_0x3113('0x2b')](this[_0x3113('0xc')][_0x5aad7a[_0x3113('0x3c')]],_[_0x3113('0x3d')](_0x5aad7a,[_0x3113('0x28'),_0x3113('0x3e')]));this[_0x3113('0x20')](util[_0x3113('0x25')](_0x3113('0x30'),_0x5aad7a['membername']),_0x3113('0x3f'),this['channels'][_0x5aad7a['uniqueid']][_0x5aad7a['destuniqueid']]);ami[_0x3113('0x20')]('custom:agentconnect',this['channels'][_0x5aad7a[_0x3113('0x23')]][_0x1866f3]);}else if(!this[_0x3113('0xa')][_0x5aad7a[_0x3113('0x23')]][_0x1866f3]['agentringnoanswer']&&!this[_0x3113('0xa')][_0x5aad7a['uniqueid']][_0x1866f3][_0x3113('0x15')]){this['channels'][_0x5aad7a[_0x3113('0x23')]][_0x1866f3][_0x3113('0x40')]=!![];this['channels'][_0x5aad7a[_0x3113('0x23')]][_0x1866f3][_0x3113('0x41')]=moment()[_0x3113('0x25')](_0x3113('0x26'));this['channels'][_0x5aad7a[_0x3113('0x23')]][_0x1866f3][_0x3113('0x42')]='answered_elsewhere';this[_0x3113('0xa')][_0x5aad7a[_0x3113('0x23')]][_0x1866f3][_0x3113('0x43')]=_0x3113('0x44');this[_0x3113('0xa')][_0x5aad7a['uniqueid']][_0x1866f3]['answeredelsewheredestinationuniqueid']=_0x5aad7a[_0x3113('0x24')];this[_0x3113('0xa')][_0x5aad7a['uniqueid']][_0x1866f3][_0x3113('0x45')]=_0x5aad7a['membername'];ami[_0x3113('0x20')](_0x3113('0x46'),this[_0x3113('0xa')][_0x5aad7a['uniqueid']][_0x1866f3]);}}}}}}catch(_0x219f01){logger[_0x3113('0x32')](_0x3113('0x47'),util[_0x3113('0x33')](_0x219f01,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3113('0x1f')][_0x3113('0x48')]=function(_0x4b52c9){try{if(this[_0x3113('0x22')](_0x4b52c9)){if(this['channels'][_0x4b52c9['uniqueid']]&&this[_0x3113('0xa')][_0x4b52c9[_0x3113('0x23')]][_0x4b52c9['destuniqueid']]){this['channels'][_0x4b52c9[_0x3113('0x23')]][_0x4b52c9[_0x3113('0x24')]]['agentringnoanswer']=!![];this['channels'][_0x4b52c9[_0x3113('0x23')]][_0x4b52c9[_0x3113('0x24')]][_0x3113('0x41')]=moment()[_0x3113('0x25')](_0x3113('0x26'));this[_0x3113('0xa')][_0x4b52c9[_0x3113('0x23')]][_0x4b52c9[_0x3113('0x24')]]['reason']='rejected';this[_0x3113('0xa')][_0x4b52c9[_0x3113('0x23')]][_0x4b52c9[_0x3113('0x24')]][_0x3113('0x43')]=_0x3113('0x49');ami[_0x3113('0x20')](_0x3113('0x4a'),this[_0x3113('0xa')][_0x4b52c9[_0x3113('0x23')]][_0x4b52c9[_0x3113('0x24')]]);}}}catch(_0x125a83){logger[_0x3113('0x32')]('[syncAgentRingNoAnswer][VoiceAgentReport]',util[_0x3113('0x33')](_0x125a83,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype']['syncQueueCallerAbandon']=function(_0x8aa6c4){try{if(this['isNotNull'](_0x8aa6c4)){if(this[_0x3113('0xa')][_0x8aa6c4[_0x3113('0x23')]]){for(var _0x1932af in this[_0x3113('0xa')][_0x8aa6c4[_0x3113('0x23')]]){if(this['channels'][_0x8aa6c4['uniqueid']]['hasOwnProperty'](_0x1932af)&&!this[_0x3113('0xa')][_0x8aa6c4[_0x3113('0x23')]][_0x1932af][_0x3113('0x40')]&&!this['channels'][_0x8aa6c4[_0x3113('0x23')]][_0x1932af][_0x3113('0x15')]){this[_0x3113('0xa')][_0x8aa6c4[_0x3113('0x23')]][_0x1932af]['agentringnoanswer']=!![];this[_0x3113('0xa')][_0x8aa6c4['uniqueid']][_0x1932af][_0x3113('0x41')]=moment()[_0x3113('0x25')]('YYYY-MM-DD\x20HH:mm:ss');this['channels'][_0x8aa6c4['uniqueid']][_0x1932af][_0x3113('0x42')]='abandoned';this['channels'][_0x8aa6c4[_0x3113('0x23')]][_0x1932af]['lastevent']=_0x3113('0x4b');ami['emit'](_0x3113('0x4c'),this[_0x3113('0xa')][_0x8aa6c4[_0x3113('0x23')]][_0x1932af]);}}}}}catch(_0x56e03e){logger[_0x3113('0x32')]('[syncQueueCallerAbandon][VoiceAgentReport]',util[_0x3113('0x33')](_0x56e03e,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3113('0x1f')][_0x3113('0x4d')]=function(_0x55d0d4){try{if(this['isNotNull'](_0x55d0d4)){if(this['channels'][_0x55d0d4[_0x3113('0x23')]]){for(var _0x15adb7 in this[_0x3113('0xa')][_0x55d0d4['uniqueid']]){if(this[_0x3113('0xa')][_0x55d0d4[_0x3113('0x23')]]['hasOwnProperty'](_0x15adb7)){if(this[_0x3113('0xa')][_0x55d0d4['uniqueid']][_0x15adb7][_0x3113('0x35')]&&!this[_0x3113('0xa')][_0x55d0d4[_0x3113('0x23')]][_0x15adb7][_0x3113('0x15')]){this['channels'][_0x55d0d4[_0x3113('0x23')]][_0x15adb7][_0x3113('0x15')]=!![];this[_0x3113('0xa')][_0x55d0d4[_0x3113('0x23')]][_0x15adb7][_0x3113('0x4e')]=moment()[_0x3113('0x25')](_0x3113('0x26'));this['channels'][_0x55d0d4[_0x3113('0x23')]][_0x15adb7][_0x3113('0x43')]=_0x3113('0x4f');this['channels'][_0x55d0d4['uniqueid']][_0x15adb7][_0x3113('0x50')]=_0x55d0d4['talktime'];this[_0x3113('0xa')][_0x55d0d4[_0x3113('0x23')]][_0x15adb7][_0x3113('0x42')]=_0x55d0d4['reason']==_0x3113('0x51')?_0x3113('0x52'):_0x55d0d4['reason'];if(this['voiceQueues'][_0x55d0d4[_0x3113('0x28')]]&&this[_0x3113('0xb')][_0x55d0d4[_0x3113('0x28')]]['acw']){this[_0x3113('0xa')][_0x55d0d4['uniqueid']][_0x15adb7][_0x3113('0x53')]=!![];this['channels'][_0x55d0d4[_0x3113('0x23')]][_0x15adb7][_0x3113('0x54')]=this[_0x3113('0xb')][_0x55d0d4[_0x3113('0x28')]][_0x3113('0x55')];}this[_0x3113('0xc')][_0x55d0d4[_0x3113('0x3c')]]=_[_0x3113('0x2c')](this[_0x3113('0xc')][_0x55d0d4[_0x3113('0x3c')]],[_0x3113('0x28'),_0x3113('0x3e')]);this['emit'](util['format']('user:%s',_0x55d0d4[_0x3113('0x31')]),_0x3113('0x56'),this['channels'][_0x55d0d4[_0x3113('0x23')]][_0x15adb7]);ami['emit'](_0x3113('0x57'),this['channels'][_0x55d0d4[_0x3113('0x23')]][_0x15adb7]);}}}}}}catch(_0x188b80){logger['error']('[syncAgentComplete][VoiceAgentReport]',util[_0x3113('0x33')](_0x188b80,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3113('0x1f')]['syncVarSet']=function(_0x3c7ee8){try{if(this[_0x3113('0x22')](_0x3c7ee8)){this[_0x3113('0x58')](_0x3c7ee8[_0x3113('0x23')],_[_0x3113('0x59')](_0x3c7ee8['variable'])[0x0],_0x3c7ee8[_0x3113('0x5a')]);if(this[_0x3113('0xa')][_0x3c7ee8['uniqueid']]){for(var _0x25c2ad in this[_0x3113('0xa')][_0x3c7ee8[_0x3113('0x23')]]){if(this['channels'][_0x3c7ee8[_0x3113('0x23')]]['hasOwnProperty'](_0x25c2ad)){if(_[_0x3113('0x21')](this[_0x3113('0xa')][_0x3c7ee8[_0x3113('0x23')]][_0x25c2ad][_0x3113('0xd')])){this[_0x3113('0xa')][_0x3c7ee8[_0x3113('0x23')]][_0x25c2ad][_0x3113('0xd')]={};}this[_0x3113('0xa')][_0x3c7ee8[_0x3113('0x23')]][_0x25c2ad][_0x3113('0xd')]=this['variables'][_0x3c7ee8['uniqueid']];}}}}}catch(_0x376dd7){logger[_0x3113('0x32')]('[syncVarSet][VoiceAgentReport]',util['inspect'](_0x376dd7,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3113('0x1f')][_0x3113('0x58')]=function(_0x52ff08,_0x2390cb,_0x33a3c2){var _0x5bfc11=[_0x3113('0x5b'),_0x3113('0x5c'),_0x3113('0x5d'),_0x3113('0x5e'),'rtpaudioqosloss',_0x3113('0x5f'),_0x3113('0x60'),'rtpaudioqosrttbridged',_0x3113('0x61'),'sipuri',_0x3113('0x62'),_0x3113('0x63'),_0x3113('0x64'),'memberdynamic',_0x3113('0x65'),_0x3113('0x66'),_0x3113('0x31'),_0x3113('0x67'),_0x3113('0x68')];if(!_[_0x3113('0x69')](_0x2390cb)&&!_[_0x3113('0x6a')](_0x5bfc11,_0x2390cb)){if(_[_0x3113('0x21')](this[_0x3113('0xd')][_0x52ff08])){this[_0x3113('0xd')][_0x52ff08]={};}this[_0x3113('0xd')][_0x52ff08][_0x2390cb]=_0x33a3c2;}};VoiceAgentReport[_0x3113('0x1f')][_0x3113('0x6b')]=function(_0x446f49){try{if(this['isNotNull'](_0x446f49)){if(this[_0x3113('0xa')][_0x446f49[_0x3113('0x23')]]){for(var _0x3266fc in this[_0x3113('0xa')][_0x446f49['uniqueid']]){if(this['channels'][_0x446f49[_0x3113('0x23')]][_0x3113('0x34')](_0x3266fc)){if(this[_0x3113('0xa')][_0x446f49[_0x3113('0x23')]][_0x3266fc][_0x3113('0x42')]==_0x3113('0x51')&&this[_0x3113('0xa')][_0x446f49['uniqueid']][_0x3266fc]['agentcomplete']){this[_0x3113('0xa')][_0x446f49[_0x3113('0x23')]][_0x3266fc][_0x3113('0x4e')]=moment()['format'](_0x3113('0x26'));}}}ami[_0x3113('0x20')](_0x3113('0x6c'),_[_0x3113('0x6d')](this[_0x3113('0xa')][_0x446f49['uniqueid']]));delete this['channels'][_0x446f49[_0x3113('0x23')]];}if(this['variables'][_0x446f49[_0x3113('0x23')]]){delete this[_0x3113('0xd')][_0x446f49[_0x3113('0x23')]];}}}catch(_0x434016){logger[_0x3113('0x32')](_0x3113('0x6e'),util[_0x3113('0x33')](_0x434016,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3113('0x1f')][_0x3113('0x1c')]=function(_0x2cef97){try{if(this[_0x3113('0x22')](_0x2cef97)){if(this['channels'][_0x2cef97[_0x3113('0x6f')]]){for(var _0x576433 in this['channels'][_0x2cef97['transfereeuniqueid']]){if(this[_0x3113('0xa')][_0x2cef97['transfereeuniqueid']]['hasOwnProperty'](_0x576433)){if(_0x2cef97[_0x3113('0x70')]===_0x576433){var _0x2d0a2d=moment();this[_0x3113('0xa')][_0x2cef97[_0x3113('0x6f')]][_0x576433][_0x3113('0x15')]=!![];this[_0x3113('0xa')][_0x2cef97[_0x3113('0x6f')]][_0x576433][_0x3113('0x4e')]=moment()[_0x3113('0x25')](_0x3113('0x26'));this[_0x3113('0xa')][_0x2cef97[_0x3113('0x6f')]][_0x576433]['reason']=_0x3113('0x51');this[_0x3113('0xa')][_0x2cef97[_0x3113('0x6f')]][_0x576433][_0x3113('0x43')]=_0x3113('0x4f');this['channels'][_0x2cef97[_0x3113('0x6f')]][_0x576433]['talktime']=_0x2d0a2d[_0x3113('0x71')](this[_0x3113('0xa')][_0x2cef97['transfereeuniqueid']][_0x576433]['agentconnectAt'],_0x3113('0x72'));}}}}if(this['channels'][_0x2cef97[_0x3113('0x73')]]){var _0x289063=this[_0x3113('0xa')][_0x2cef97[_0x3113('0x73')]];this[_0x3113('0xa')][_0x2cef97['secondtransfereruniqueid']]=this[_0x3113('0xa')][_0x2cef97['transfereeuniqueid']];this[_0x3113('0xa')][_0x2cef97['transfereeuniqueid']]=_0x289063;}}}catch(_0x233005){logger['error'](_0x3113('0x74'),util[_0x3113('0x33')](_0x233005,{'showHidden':![],'depth':null}));}};VoiceAgentReport[_0x3113('0x1f')][_0x3113('0x1e')]=function(_0xeb388d){try{if(this['isNotNull'](_0xeb388d)){if(this['channels'][_0xeb388d[_0x3113('0x6f')]]){for(var _0x344eb7 in this[_0x3113('0xa')][_0xeb388d[_0x3113('0x6f')]]){if(this[_0x3113('0xa')][_0xeb388d[_0x3113('0x6f')]][_0x3113('0x34')](_0x344eb7)){if(_0xeb388d[_0x3113('0x75')]===_0x344eb7){var _0x1f2427=moment();this[_0x3113('0xa')][_0xeb388d[_0x3113('0x6f')]][_0x344eb7][_0x3113('0x15')]=!![];this[_0x3113('0xa')][_0xeb388d[_0x3113('0x6f')]][_0x344eb7][_0x3113('0x4e')]=_0x1f2427;this[_0x3113('0xa')][_0xeb388d['transfereeuniqueid']][_0x344eb7][_0x3113('0x42')]=_0x3113('0x51');this['channels'][_0xeb388d[_0x3113('0x6f')]][_0x344eb7][_0x3113('0x43')]=_0x3113('0x4f');this[_0x3113('0xa')][_0xeb388d[_0x3113('0x6f')]][_0x344eb7][_0x3113('0x50')]=_0x1f2427[_0x3113('0x71')](this[_0x3113('0xa')][_0xeb388d[_0x3113('0x6f')]][_0x344eb7][_0x3113('0x35')],_0x3113('0x72'));}}}}}}catch(_0x4fe340){logger['error']('[syncBlindTransfer][VoiceAgentReport]',util[_0x3113('0x33')](_0x4fe340,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype'][_0x3113('0x76')]=function(_0x570c88){var _0x46f3a2='';try{if(this[_0x3113('0x22')](_0x570c88)){if(_0x570c88[_0x3113('0x77')]){_0x46f3a2=_0x570c88['channel'][_0x3113('0x78')](0x0,_0x570c88['channel'][_0x3113('0x79')]('-'));if(this[_0x3113('0xc')][_0x46f3a2]){this[_0x3113('0xc')][_0x46f3a2]['onhold']=!![];}}}}catch(_0x5c9cae){logger['error'](_0x3113('0x7a'),util['inspect'](_0x5c9cae,{'showHidden':![],'depth':null}));}};VoiceAgentReport['prototype']['syncMusicOnHoldStop']=function(_0x2e5bf4){var _0x3bd7e2='';try{if(this['isNotNull'](_0x2e5bf4)){if(_0x2e5bf4[_0x3113('0x77')]){_0x3bd7e2=_0x2e5bf4[_0x3113('0x77')][_0x3113('0x78')](0x0,_0x2e5bf4['channel']['lastIndexOf']('-'));if(this['agents'][_0x3bd7e2]){this[_0x3113('0xc')][_0x3bd7e2][_0x3113('0x7b')]=![];}}}}catch(_0x482239){logger[_0x3113('0x32')](_0x3113('0x7c'),util[_0x3113('0x33')](_0x482239,{'showHidden':![],'depth':null}));}};module[_0x3113('0x7d')]=VoiceAgentReport;
\ No newline at end of file
index a789f70..6301cfe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7d5=['set','queue','agi','dial','playback','voicemail','FAILED','NO\x20ANSWER','ANSWERED','BUSY','redis','defaults','localhost','channels','agents','syncNewExten','bind','newexten','newchannel','syncNewChannel','newstate','varset','syncVarSet','hangup','syncHangup','newcallerid','syncNewCallerId','attendedtransfer','syncAttendedTransfer','syncBlindTransfer','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','resolve','then','actionCoreShowChannels','catch','prototype','isNotNull','isUndefined','emit','uniqueid','merge','pick','keys','[syncNewCallerId][VoiceCallReport]','linkedid','channel','OutgoingSpoolFailed','starttime','format','YYYY-MM-DD\x20HH:mm:ss','toNumber','channelstate','context','split','destconnectedlinenum','exten','user:%s','user:agentconnect','accountcode','error','[syncNewChannel][VoiceCallReport]','inspect','application','toLowerCase','applicationdata','appdata','duration','seconds','includes','lastapplication','lastdata','startsWith','syncNewState','answered','holdtime','calleridnum','connectedlinenum','connectedlinename','calleridname','destinationchannel','UserId','membername','name','[syncNewState][VoiceCallReport]','monitor','endsWith','.wav49','replace','.WAV','monitorFilename','find','monitors','push','variable','mixmonitor_filename','value','callerid','xmd-cdrtype','type','xmd-queue','xmd-originatecalleridnum','originatecalleridnum','xmd-destination','destination','xmd-callerid-preview','calleridpreview','xmcs-queue','sipcallid','sipcalluniqueid','syncMixMonitorFilename','[syncVarSet][VoiceCallReport]','diff','billableseconds','answertime','omit','user:agentcomplete','custom:voiceCallReport','[syncHangup][VoiceCallReport]','transfereeuniqueid','transfercalleridnum','origtransferercalleridnum','transferconnectedlinenum','transfertargetcalleridnum','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','[syncAttendedTransfer][VoiceCallReport]','transfereecalleridnum','[syncBlindTransfer][VoiceCallReport]','mohstarttime','milliseconds','[syncMusicOnHoldStop][VoiceCallReport]','exports','bluebird','lodash','moment','util','path','ioredis','../../../config/environment','ami','../model/channel','not_inuse','inuse','busy','ringinuse','onhold'];(function(_0x1ac1fd,_0x1f1067){var _0x2da8d8=function(_0x402262){while(--_0x402262){_0x1ac1fd['push'](_0x1ac1fd['shift']());}};_0x2da8d8(++_0x1f1067);}(_0xb7d5,0x88));var _0x5b7d=function(_0x18cf94,_0x20bbc6){_0x18cf94=_0x18cf94-0x0;var _0x29648b=_0xb7d5[_0x18cf94];return _0x29648b;};'use strict';var BPromise=require(_0x5b7d('0x0'));var _=require(_0x5b7d('0x1'));var moment=require(_0x5b7d('0x2'));var util=require(_0x5b7d('0x3'));var path=require(_0x5b7d('0x4'));var Redis=require(_0x5b7d('0x5'));var config=require(_0x5b7d('0x6'));var logger=require('../../../config/logger')(_0x5b7d('0x7'));var ami=require('../ami');var Channel=require(_0x5b7d('0x8'));var statusDesc=['unknown',_0x5b7d('0x9'),_0x5b7d('0xa'),_0x5b7d('0xb'),'invalid','unavailable','ringing',_0x5b7d('0xc'),_0x5b7d('0xd')];var applications=[_0x5b7d('0xe'),_0x5b7d('0xf'),_0x5b7d('0x10'),_0x5b7d('0x11'),_0x5b7d('0x12'),_0x5b7d('0x13')];var dispositions=['NO\x20ANSWER',_0x5b7d('0x14'),'FAILED','NO\x20ANSWER',_0x5b7d('0x15'),_0x5b7d('0x15'),_0x5b7d('0x16'),_0x5b7d('0x17'),_0x5b7d('0x14'),_0x5b7d('0x14'),_0x5b7d('0x14')];var actions={};config[_0x5b7d('0x18')]=_[_0x5b7d('0x19')](config[_0x5b7d('0x18')],{'host':_0x5b7d('0x1a'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x5b7d('0x18')]));function VoiceCallReport(_0x567253){this[_0x5b7d('0x1b')]=_0x567253[_0x5b7d('0x1b')];this[_0x5b7d('0x1c')]=_0x567253[_0x5b7d('0x1c')];ami['on']('coreshowchannel',this[_0x5b7d('0x1d')][_0x5b7d('0x1e')](this));ami['on'](_0x5b7d('0x1f'),this[_0x5b7d('0x1d')][_0x5b7d('0x1e')](this));ami['on'](_0x5b7d('0x20'),this[_0x5b7d('0x21')]['bind'](this));ami['on'](_0x5b7d('0x22'),this['syncNewState'][_0x5b7d('0x1e')](this));ami['on'](_0x5b7d('0x23'),this[_0x5b7d('0x24')][_0x5b7d('0x1e')](this));ami['on'](_0x5b7d('0x25'),this[_0x5b7d('0x26')][_0x5b7d('0x1e')](this));ami['on'](_0x5b7d('0x27'),this[_0x5b7d('0x28')][_0x5b7d('0x1e')](this));ami['on'](_0x5b7d('0x29'),this[_0x5b7d('0x2a')][_0x5b7d('0x1e')](this));ami['on']('blindtransfer',this[_0x5b7d('0x2b')][_0x5b7d('0x1e')](this));ami['on'](_0x5b7d('0x2c'),this[_0x5b7d('0x2d')][_0x5b7d('0x1e')](this));ami['on'](_0x5b7d('0x2e'),this[_0x5b7d('0x2f')][_0x5b7d('0x1e')](this));return BPromise[_0x5b7d('0x30')]()[_0x5b7d('0x31')](ami[_0x5b7d('0x32')]())[_0x5b7d('0x33')](function(_0x544f90){console['log'](_0x544f90);});}VoiceCallReport[_0x5b7d('0x34')][_0x5b7d('0x35')]=function(_0x33d8c7){return _0x33d8c7!==null&&!_[_0x5b7d('0x36')](_0x33d8c7);};VoiceCallReport['prototype'][_0x5b7d('0x37')]=function(_0x5d2df2,_0x5aa7aa,_0xe6add7){io['to'](_0x5d2df2)['emit'](_0x5aa7aa,_0xe6add7);};VoiceCallReport['prototype'][_0x5b7d('0x28')]=function(_0x3a51b4){try{if(this[_0x5b7d('0x35')](_0x3a51b4)){if(_0x3a51b4['uniqueid']===_0x3a51b4['linkedid']){if(!_[_0x5b7d('0x36')](this['channels'][_0x3a51b4[_0x5b7d('0x38')]])){_[_0x5b7d('0x39')](this[_0x5b7d('0x1b')][_0x3a51b4[_0x5b7d('0x38')]],_[_0x5b7d('0x3a')](_0x3a51b4,_[_0x5b7d('0x3b')](this['channels'][_0x3a51b4['uniqueid']])));}}}}catch(_0x32102a){logger['error'](_0x5b7d('0x3c'),util['inspect'](_0x32102a,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x5b7d('0x34')][_0x5b7d('0x21')]=function(_0x231d15){try{if(this[_0x5b7d('0x35')](_0x231d15)){if(_0x231d15[_0x5b7d('0x38')]===_0x231d15[_0x5b7d('0x3d')]&&_0x231d15[_0x5b7d('0x3e')]!=_0x5b7d('0x3f')){if(_['isUndefined'](this[_0x5b7d('0x1b')][_0x231d15['uniqueid']])){this[_0x5b7d('0x1b')][_0x231d15['uniqueid']]=new Channel();this['channels'][_0x231d15['uniqueid']][_0x5b7d('0x40')]=moment()[_0x5b7d('0x41')](_0x5b7d('0x42'));this[_0x5b7d('0x1b')][_0x231d15[_0x5b7d('0x38')]]['disposition']=dispositions[_[_0x5b7d('0x43')](_0x231d15[_0x5b7d('0x44')])];_[_0x5b7d('0x39')](this[_0x5b7d('0x1b')][_0x231d15[_0x5b7d('0x38')]],_['pick'](_0x231d15,_[_0x5b7d('0x3b')](this[_0x5b7d('0x1b')][_0x231d15[_0x5b7d('0x38')]])));if(_0x231d15[_0x5b7d('0x45')]==='from-sip'){if(this[_0x5b7d('0x1c')][_0x231d15[_0x5b7d('0x3e')][_0x5b7d('0x46')]('-')[0x0]]){this['agents'][_0x231d15[_0x5b7d('0x3e')]['split']('-')[0x0]][_0x5b7d('0x47')]=_0x231d15[_0x5b7d('0x48')];this['emit'](util[_0x5b7d('0x41')](_0x5b7d('0x49'),this['agents'][_0x231d15[_0x5b7d('0x3e')][_0x5b7d('0x46')]('-')[0x0]]['name']),_0x5b7d('0x4a'),{'destaccountcode':this[_0x5b7d('0x1c')][_0x231d15[_0x5b7d('0x3e')]['split']('-')[0x0]][_0x5b7d('0x4b')],'destconnectedlinenum':_0x231d15[_0x5b7d('0x48')]});}}}}}}catch(_0x2bdd8b){logger[_0x5b7d('0x4c')](_0x5b7d('0x4d'),util[_0x5b7d('0x4e')](_0x2bdd8b,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x5b7d('0x34')]['syncNewExten']=function(_0x2eb66b){try{if(this['isNotNull'](_0x2eb66b)){if(_0x2eb66b[_0x5b7d('0x38')]===_0x2eb66b[_0x5b7d('0x3d')]&&_0x2eb66b[_0x5b7d('0x48')]!='h'&&_0x2eb66b[_0x5b7d('0x3e')]!='OutgoingSpoolFailed'){_0x2eb66b[_0x5b7d('0x4f')]=_0x2eb66b['application'][_0x5b7d('0x50')]();_0x2eb66b[_0x5b7d('0x51')]=(_0x2eb66b[_0x5b7d('0x52')]||_0x2eb66b['applicationdata'])[_0x5b7d('0x50')]();if(_[_0x5b7d('0x36')](this['channels'][_0x2eb66b[_0x5b7d('0x38')]])){this[_0x5b7d('0x1b')][_0x2eb66b['uniqueid']]=new Channel();this[_0x5b7d('0x1b')][_0x2eb66b['uniqueid']]['starttime']=_0x2eb66b['duration']?moment()['subtract'](moment[_0x5b7d('0x53')](_0x2eb66b[_0x5b7d('0x53')])['seconds'](),_0x5b7d('0x54'))[_0x5b7d('0x41')](_0x5b7d('0x42')):moment()['format'](_0x5b7d('0x42'));this[_0x5b7d('0x1b')][_0x2eb66b['uniqueid']]['disposition']='NO\x20ANSWER';}_[_0x5b7d('0x39')](this['channels'][_0x2eb66b[_0x5b7d('0x38')]],_[_0x5b7d('0x3a')](_0x2eb66b,_[_0x5b7d('0x3b')](this['channels'][_0x2eb66b[_0x5b7d('0x38')]])));if(_[_0x5b7d('0x55')](applications,_0x2eb66b[_0x5b7d('0x4f')])){this[_0x5b7d('0x1b')][_0x2eb66b[_0x5b7d('0x38')]][_0x5b7d('0x56')]=_0x2eb66b[_0x5b7d('0x4f')];this[_0x5b7d('0x1b')][_0x2eb66b[_0x5b7d('0x38')]][_0x5b7d('0x57')]=_0x2eb66b[_0x5b7d('0x51')];if(_0x2eb66b['application']==='set'&&_[_0x5b7d('0x58')](_0x2eb66b[_0x5b7d('0x51')],'cdr(')){var _0x339cc1=_0x2eb66b[_0x5b7d('0x51')]['split']('=');var _0x2cfacf=_0x339cc1[0x0]['match'](/cdr\((.*)\)/);if(_0x2cfacf){this['channels'][_0x2eb66b['uniqueid']][_0x2cfacf[0x1]]=_0x339cc1[0x1];}}else if(_0x2eb66b[_0x5b7d('0x4f')]===_0x5b7d('0xf')){this[_0x5b7d('0x1b')][_0x2eb66b['uniqueid']][_0x5b7d('0xf')]=_0x2eb66b[_0x5b7d('0x51')]['split'](',')[0x0];}}}}}catch(_0x10523b){logger[_0x5b7d('0x4c')]('[syncNewExten][VoiceCallReport]',util[_0x5b7d('0x4e')](_0x10523b,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x5b7d('0x34')][_0x5b7d('0x59')]=function(_0x5e0cc4){try{if(this[_0x5b7d('0x35')](_0x5e0cc4)){if(_0x5e0cc4[_0x5b7d('0x38')]!==_0x5e0cc4[_0x5b7d('0x3d')]){if(this['channels'][_0x5e0cc4['linkedid']]){if(_0x5e0cc4[_0x5b7d('0x44')]==='6'){if(!this[_0x5b7d('0x1b')][_0x5e0cc4['linkedid']][_0x5b7d('0x5a')]){var _0x51d3e2=moment();this[_0x5b7d('0x1b')][_0x5e0cc4[_0x5b7d('0x3d')]][_0x5b7d('0x5a')]=!![];this[_0x5b7d('0x1b')][_0x5e0cc4[_0x5b7d('0x3d')]]['answertime']=_0x51d3e2['format'](_0x5b7d('0x42'));if(this[_0x5b7d('0x1b')][_0x5e0cc4[_0x5b7d('0x3d')]]['starttime']){this[_0x5b7d('0x1b')][_0x5e0cc4[_0x5b7d('0x3d')]][_0x5b7d('0x5b')]=_0x51d3e2['diff'](this['channels'][_0x5e0cc4[_0x5b7d('0x3d')]][_0x5b7d('0x40')],_0x5b7d('0x54'));}}this[_0x5b7d('0x1b')][_0x5e0cc4['linkedid']]['linkedid']=_0x5e0cc4[_0x5b7d('0x38')];if(_0x5e0cc4[_0x5b7d('0x5c')]!=='xcally-motion-preview'){this['channels'][_0x5e0cc4[_0x5b7d('0x3d')]][_0x5b7d('0x5d')]=_0x5e0cc4[_0x5b7d('0x5c')];}this['channels'][_0x5e0cc4[_0x5b7d('0x3d')]][_0x5b7d('0x5e')]=_0x5e0cc4[_0x5b7d('0x5f')];this['channels'][_0x5e0cc4[_0x5b7d('0x3d')]][_0x5b7d('0x60')]=_0x5e0cc4[_0x5b7d('0x3e')];this[_0x5b7d('0x1b')][_0x5e0cc4[_0x5b7d('0x3d')]]['disposition']=dispositions[_[_0x5b7d('0x43')](_0x5e0cc4[_0x5b7d('0x44')])];if(this['agents'][_0x5e0cc4[_0x5b7d('0x3e')][_0x5b7d('0x46')]('-')[0x0]]){this[_0x5b7d('0x1b')][_0x5e0cc4['linkedid']][_0x5b7d('0x61')]=this[_0x5b7d('0x1c')][_0x5e0cc4['channel'][_0x5b7d('0x46')]('-')[0x0]]['id'];this[_0x5b7d('0x1b')][_0x5e0cc4[_0x5b7d('0x3d')]][_0x5b7d('0x62')]=this[_0x5b7d('0x1c')][_0x5e0cc4[_0x5b7d('0x3e')][_0x5b7d('0x46')]('-')[0x0]][_0x5b7d('0x63')];}}}}else{if(this[_0x5b7d('0x1b')][_0x5e0cc4['uniqueid']]){if(_0x5e0cc4[_0x5b7d('0x44')]==='6'){if(this[_0x5b7d('0x1c')][_0x5e0cc4[_0x5b7d('0x3e')]['split']('-')[0x0]]){this[_0x5b7d('0x1b')][_0x5e0cc4[_0x5b7d('0x38')]]['UserId']=this[_0x5b7d('0x1c')][_0x5e0cc4[_0x5b7d('0x3e')]['split']('-')[0x0]]['id'];this[_0x5b7d('0x1b')][_0x5e0cc4[_0x5b7d('0x38')]]['membername']=this[_0x5b7d('0x1c')][_0x5e0cc4[_0x5b7d('0x3e')][_0x5b7d('0x46')]('-')[0x0]][_0x5b7d('0x63')];}}}}}}catch(_0x2c845e){logger[_0x5b7d('0x4c')](_0x5b7d('0x64'),util['inspect'](_0x2c845e,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype']['syncMixMonitorFilename']=function(_0x31385f,_0x5bc599){if(this[_0x5b7d('0x1b')][_0x31385f]){this[_0x5b7d('0x1b')][_0x31385f][_0x5b7d('0x65')]=!![];if(_[_0x5b7d('0x66')](_0x5bc599,_0x5b7d('0x67'))){_0x5bc599=_0x5bc599[_0x5b7d('0x68')](_0x5b7d('0x67'),_0x5b7d('0x69'));}this[_0x5b7d('0x1b')][_0x31385f][_0x5b7d('0x6a')]=_0x5bc599;var _0x5443a4=_[_0x5b7d('0x6b')](this[_0x5b7d('0x1b')][_0x31385f][_0x5b7d('0x6c')],{'filename':_0x5bc599});if(_['isNil'](_0x5443a4)){this[_0x5b7d('0x1b')][_0x31385f][_0x5b7d('0x6c')][_0x5b7d('0x6d')]({'filename':_0x5bc599,'createdAt':moment()[_0x5b7d('0x41')](_0x5b7d('0x42')),'mixmonitorid':'','status':'rec'});}}};VoiceCallReport[_0x5b7d('0x34')][_0x5b7d('0x24')]=function(_0x41aa15){try{if(this['isNotNull'](_0x41aa15)){if(this['channels'][_0x41aa15[_0x5b7d('0x38')]]&&_0x41aa15[_0x5b7d('0x3e')]!=_0x5b7d('0x3f')){if(this[_0x5b7d('0x35')](_0x41aa15['variable'])){if(this[_0x5b7d('0x35')](_0x41aa15[_0x5b7d('0x6e')][_0x5b7d('0x6f')])){this['syncMixMonitorFilename'](_0x41aa15['uniqueid'],_0x41aa15[_0x5b7d('0x70')]);}else if(this[_0x5b7d('0x35')](_0x41aa15[_0x5b7d('0x6e')]['xmd-phone'])){this[_0x5b7d('0x1b')][_0x41aa15[_0x5b7d('0x38')]][_0x5b7d('0x5c')]=_0x41aa15[_0x5b7d('0x70')];}else if(this[_0x5b7d('0x35')](_0x41aa15[_0x5b7d('0x6e')]['xmd-callerid'])){this['channels'][_0x41aa15['uniqueid']][_0x5b7d('0x71')]=_0x41aa15[_0x5b7d('0x70')];}else if(this[_0x5b7d('0x35')](_0x41aa15[_0x5b7d('0x6e')][_0x5b7d('0x72')])){this[_0x5b7d('0x1b')][_0x41aa15['uniqueid']][_0x5b7d('0x73')]=_0x41aa15['value'];}else if(this[_0x5b7d('0x35')](_0x41aa15[_0x5b7d('0x6e')][_0x5b7d('0x74')])){this[_0x5b7d('0x1b')][_0x41aa15[_0x5b7d('0x38')]][_0x5b7d('0xf')]=_0x41aa15[_0x5b7d('0x70')][_0x5b7d('0x46')](',')[0x0];}else if(this[_0x5b7d('0x35')](_0x41aa15[_0x5b7d('0x6e')][_0x5b7d('0x75')])){this[_0x5b7d('0x1b')][_0x41aa15['uniqueid']][_0x5b7d('0x76')]=_0x41aa15[_0x5b7d('0x70')];}else if(this[_0x5b7d('0x35')](_0x41aa15[_0x5b7d('0x6e')][_0x5b7d('0x77')])){this[_0x5b7d('0x1b')][_0x41aa15[_0x5b7d('0x38')]][_0x5b7d('0x78')]=_0x41aa15[_0x5b7d('0x70')];}else if(this[_0x5b7d('0x35')](_0x41aa15['variable'][_0x5b7d('0x79')])){this['channels'][_0x41aa15[_0x5b7d('0x38')]][_0x5b7d('0x7a')]=_0x41aa15['value'];}else if(this[_0x5b7d('0x35')](_0x41aa15[_0x5b7d('0x6e')][_0x5b7d('0x7b')])){this['channels'][_0x41aa15[_0x5b7d('0x38')]][_0x5b7d('0xf')]=_0x41aa15[_0x5b7d('0x70')];}else if(this[_0x5b7d('0x35')](_0x41aa15[_0x5b7d('0x6e')][_0x5b7d('0x7c')])){this[_0x5b7d('0x1b')][_0x41aa15['uniqueid']][_0x5b7d('0x7d')]=_0x41aa15[_0x5b7d('0x70')];}}}else if(this[_0x5b7d('0x35')](_0x41aa15[_0x5b7d('0x6e')]['mixmonitor_filename'])){if(_0x41aa15['value']){var _0x325fe3=path['parse'](_0x41aa15[_0x5b7d('0x70')])[_0x5b7d('0x63')];this[_0x5b7d('0x7e')](_0x325fe3,_0x41aa15[_0x5b7d('0x70')]);}}else if(this['channels'][_0x41aa15[_0x5b7d('0x3d')]]){if(this['isNotNull'](_0x41aa15[_0x5b7d('0x6e')])){if(this['isNotNull'](_0x41aa15[_0x5b7d('0x6e')][_0x5b7d('0x7c')])){this['channels'][_0x41aa15['linkedid']]['sipcalllinkedid']=_0x41aa15[_0x5b7d('0x70')];}}}}}catch(_0x284c7e){logger['error'](_0x5b7d('0x7f'),util[_0x5b7d('0x4e')](_0x284c7e,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x5b7d('0x34')]['syncHangup']=function(_0xa6d011){try{if(this[_0x5b7d('0x35')](_0xa6d011)){if(this[_0x5b7d('0x1b')][_0xa6d011['uniqueid']]){var _0x136f77=moment();this[_0x5b7d('0x1b')][_0xa6d011[_0x5b7d('0x38')]]['endtime']=_0x136f77['format'](_0x5b7d('0x42'));this[_0x5b7d('0x1b')][_0xa6d011['uniqueid']][_0x5b7d('0x53')]=_0x136f77[_0x5b7d('0x80')](this[_0x5b7d('0x1b')][_0xa6d011['uniqueid']][_0x5b7d('0x40')],'seconds');if(this[_0x5b7d('0x1b')][_0xa6d011['uniqueid']]['answered']){this['channels'][_0xa6d011['uniqueid']][_0x5b7d('0x81')]=_0x136f77['diff'](this['channels'][_0xa6d011[_0x5b7d('0x38')]][_0x5b7d('0x82')],_0x5b7d('0x54'));this[_0x5b7d('0x1b')][_0xa6d011[_0x5b7d('0x38')]][_0x5b7d('0x5b')]=this['channels'][_0xa6d011[_0x5b7d('0x38')]][_0x5b7d('0x53')]-this[_0x5b7d('0x1b')][_0xa6d011[_0x5b7d('0x38')]][_0x5b7d('0x81')];}if(_0xa6d011['context']==='from-sip'){if(this[_0x5b7d('0x1c')][_0xa6d011[_0x5b7d('0x3e')][_0x5b7d('0x46')]('-')[0x0]]){this[_0x5b7d('0x1c')][_0xa6d011[_0x5b7d('0x3e')][_0x5b7d('0x46')]('-')[0x0]]=_[_0x5b7d('0x83')](this[_0x5b7d('0x1c')][_0xa6d011[_0x5b7d('0x3e')][_0x5b7d('0x46')]('-')[0x0]],[_0x5b7d('0x47')]);this[_0x5b7d('0x37')](util[_0x5b7d('0x41')](_0x5b7d('0x49'),this[_0x5b7d('0x1c')][_0xa6d011['channel']['split']('-')[0x0]][_0x5b7d('0x63')]),_0x5b7d('0x84'),{'destaccountcode':this['agents'][_0xa6d011['channel'][_0x5b7d('0x46')]('-')[0x0]][_0x5b7d('0x4b')]});}}ami[_0x5b7d('0x37')](_0x5b7d('0x85'),this[_0x5b7d('0x1b')][_0xa6d011[_0x5b7d('0x38')]]);delete this['channels'][_0xa6d011[_0x5b7d('0x38')]];}}}catch(_0xb618df){logger['error'](_0x5b7d('0x86'),util[_0x5b7d('0x4e')](_0xb618df,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x5b7d('0x34')][_0x5b7d('0x2a')]=function(_0x22b4d3){try{if(this[_0x5b7d('0x35')](_0x22b4d3)){if(this[_0x5b7d('0x1b')][_0x22b4d3[_0x5b7d('0x87')]]){this[_0x5b7d('0x1b')][_0x22b4d3[_0x5b7d('0x87')]][_0x5b7d('0x88')]=_0x22b4d3[_0x5b7d('0x89')];this[_0x5b7d('0x1b')][_0x22b4d3['transfereeuniqueid']][_0x5b7d('0x8a')]=_0x22b4d3[_0x5b7d('0x8b')];if(this['channels'][_0x22b4d3['secondtransfereruniqueid']]){var _0x186d36=this[_0x5b7d('0x1b')][_0x22b4d3[_0x5b7d('0x8c')]];this['channels'][_0x22b4d3[_0x5b7d('0x8c')]]=this['channels'][_0x22b4d3['transfereeuniqueid']];this[_0x5b7d('0x1b')][_0x22b4d3[_0x5b7d('0x87')]]=_0x186d36;}}else if(this['channels'][_0x22b4d3[_0x5b7d('0x8d')]]){this['channels'][_0x22b4d3[_0x5b7d('0x8d')]][_0x5b7d('0x88')]=_0x22b4d3[_0x5b7d('0x89')];this[_0x5b7d('0x1b')][_0x22b4d3['transfertargetuniqueid']]['transferconnectedlinenum']=_0x22b4d3[_0x5b7d('0x8b')];if(this[_0x5b7d('0x1b')][_0x22b4d3['origtransfereruniqueid']]){var _0x186d36=this['channels'][_0x22b4d3['origtransfereruniqueid']];this[_0x5b7d('0x1b')][_0x22b4d3[_0x5b7d('0x8e')]]=this[_0x5b7d('0x1b')][_0x22b4d3[_0x5b7d('0x8d')]];this[_0x5b7d('0x1b')][_0x22b4d3[_0x5b7d('0x8d')]]=_0x186d36;}}}}catch(_0x3edc71){logger[_0x5b7d('0x4c')](_0x5b7d('0x8f'),util[_0x5b7d('0x4e')](_0x3edc71,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x5b7d('0x34')][_0x5b7d('0x2b')]=function(_0x22370a){try{if(this[_0x5b7d('0x35')](_0x22370a)){if(this[_0x5b7d('0x1b')][_0x22370a['transfereeuniqueid']]){this['channels'][_0x22370a[_0x5b7d('0x87')]][_0x5b7d('0x88')]=_0x22370a[_0x5b7d('0x90')];this['channels'][_0x22370a[_0x5b7d('0x87')]][_0x5b7d('0x8a')]=_0x22370a['extension'];this[_0x5b7d('0x26')]({'event':'BlindTransfer','uniqueid':_0x22370a[_0x5b7d('0x87')],'context':_0x22370a[_0x5b7d('0x45')],'channel':_0x22370a['transfererchannel']});}}}catch(_0x17ed60){logger[_0x5b7d('0x4c')](_0x5b7d('0x91'),util[_0x5b7d('0x4e')](_0x17ed60,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x5b7d('0x34')][_0x5b7d('0x2d')]=function(_0x4ea524){try{if(this[_0x5b7d('0x35')](_0x4ea524)){if(this['channels'][_0x4ea524[_0x5b7d('0x38')]]){if(!_['isNil'](this[_0x5b7d('0x1b')][_0x4ea524[_0x5b7d('0x38')]][_0x5b7d('0x82')])){this[_0x5b7d('0x1b')][_0x4ea524[_0x5b7d('0x38')]][_0x5b7d('0x92')]=moment()[_0x5b7d('0x41')](_0x5b7d('0x42'));}}}}catch(_0x592c04){logger[_0x5b7d('0x4c')]('[syncMusicOnHoldStart][VoiceCallReport]',util[_0x5b7d('0x4e')](_0x592c04,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x5b7d('0x34')][_0x5b7d('0x2f')]=function(_0x4714d4){try{if(this[_0x5b7d('0x35')](_0x4714d4)){if(this[_0x5b7d('0x1b')][_0x4714d4[_0x5b7d('0x38')]]){if(!_['isNil'](this[_0x5b7d('0x1b')][_0x4714d4[_0x5b7d('0x38')]][_0x5b7d('0x92')])){this[_0x5b7d('0x1b')][_0x4714d4[_0x5b7d('0x38')]]['mohtime']+=moment()[_0x5b7d('0x93')](0x0)[_0x5b7d('0x80')](this[_0x5b7d('0x1b')][_0x4714d4[_0x5b7d('0x38')]][_0x5b7d('0x92')],_0x5b7d('0x54'));delete this[_0x5b7d('0x1b')][_0x4714d4[_0x5b7d('0x38')]]['mohstarttime'];}}}}catch(_0x241e8e){logger[_0x5b7d('0x4c')](_0x5b7d('0x94'),util['inspect'](_0x241e8e,{'showHidden':![],'depth':null}));}};module[_0x5b7d('0x95')]=VoiceCallReport;
\ No newline at end of file
+var _0xdc00=['channels','agents','bind','newchannel','syncNewChannel','syncNewState','hangup','syncHangup','newcallerid','syncNewCallerId','syncAttendedTransfer','syncBlindTransfer','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','resolve','actionCoreShowChannels','catch','log','prototype','isUndefined','emit','isNotNull','linkedid','uniqueid','pick','keys','error','[syncNewCallerId][VoiceCallReport]','inspect','channel','YYYY-MM-DD\x20HH:mm:ss','toNumber','channelstate','from-sip','split','destconnectedlinenum','exten','user:agentconnect','accountcode','[syncNewChannel][VoiceCallReport]','syncNewExten','application','toLowerCase','appdata','applicationdata','starttime','duration','subtract','seconds','format','disposition','merge','includes','lastapplication','lastdata','startsWith','cdr(','match','queue','answered','answertime','calleridnum','xcally-motion-preview','connectedlinenum','connectedlinename','calleridname','destinationchannel','UserId','membername','name','[syncNewState][VoiceCallReport]','syncMixMonitorFilename','monitor','replace','monitorFilename','find','monitors','isNil','push','rec','variable','mixmonitor_filename','value','xmd-callerid','callerid','xmd-cdrtype','type','xmd-queue','xmd-originatecalleridnum','originatecalleridnum','destination','xmd-callerid-preview','calleridpreview','xmcs-queue','sipcallid','sipcalluniqueid','parse','sipcalllinkedid','[syncVarSet][VoiceCallReport]','endtime','diff','holdtime','billableseconds','context','omit','user:%s','user:agentcomplete','[syncHangup][VoiceCallReport]','transfereeuniqueid','origtransferercalleridnum','transferconnectedlinenum','transfertargetcalleridnum','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','transfercalleridnum','extension','transfererchannel','[syncBlindTransfer][VoiceCallReport]','mohstarttime','[syncMusicOnHoldStart][VoiceCallReport]','mohtime','[syncMusicOnHoldStop][VoiceCallReport]','exports','bluebird','lodash','moment','ioredis','../../../config/environment','ami','../ami','../model/channel','unknown','not_inuse','invalid','unavailable','ringinuse','onhold','set','agi','dial','voicemail','NO\x20ANSWER','FAILED','ANSWERED','BUSY','redis','defaults','socket.io-emitter'];(function(_0x1a191a,_0xbff39c){var _0x3cc669=function(_0x430977){while(--_0x430977){_0x1a191a['push'](_0x1a191a['shift']());}};_0x3cc669(++_0xbff39c);}(_0xdc00,0x7e));var _0x0dc0=function(_0x2b5492,_0x178a5c){_0x2b5492=_0x2b5492-0x0;var _0x4095ed=_0xdc00[_0x2b5492];return _0x4095ed;};'use strict';var BPromise=require(_0x0dc0('0x0'));var _=require(_0x0dc0('0x1'));var moment=require(_0x0dc0('0x2'));var util=require('util');var path=require('path');var Redis=require(_0x0dc0('0x3'));var config=require(_0x0dc0('0x4'));var logger=require('../../../config/logger')(_0x0dc0('0x5'));var ami=require(_0x0dc0('0x6'));var Channel=require(_0x0dc0('0x7'));var statusDesc=[_0x0dc0('0x8'),_0x0dc0('0x9'),'inuse','busy',_0x0dc0('0xa'),_0x0dc0('0xb'),'ringing',_0x0dc0('0xc'),_0x0dc0('0xd')];var applications=[_0x0dc0('0xe'),'queue',_0x0dc0('0xf'),_0x0dc0('0x10'),'playback',_0x0dc0('0x11')];var dispositions=[_0x0dc0('0x12'),'FAILED',_0x0dc0('0x13'),'NO\x20ANSWER',_0x0dc0('0x12'),_0x0dc0('0x12'),_0x0dc0('0x14'),_0x0dc0('0x15'),_0x0dc0('0x13'),'FAILED',_0x0dc0('0x13')];var actions={};config[_0x0dc0('0x16')]=_[_0x0dc0('0x17')](config[_0x0dc0('0x16')],{'host':'localhost','port':0x18eb});var io=require(_0x0dc0('0x18'))(new Redis(config[_0x0dc0('0x16')]));function VoiceCallReport(_0x1e5a68){this[_0x0dc0('0x19')]=_0x1e5a68[_0x0dc0('0x19')];this[_0x0dc0('0x1a')]=_0x1e5a68[_0x0dc0('0x1a')];ami['on']('coreshowchannel',this['syncNewExten'][_0x0dc0('0x1b')](this));ami['on']('newexten',this['syncNewExten'][_0x0dc0('0x1b')](this));ami['on'](_0x0dc0('0x1c'),this[_0x0dc0('0x1d')][_0x0dc0('0x1b')](this));ami['on']('newstate',this[_0x0dc0('0x1e')][_0x0dc0('0x1b')](this));ami['on']('varset',this['syncVarSet']['bind'](this));ami['on'](_0x0dc0('0x1f'),this[_0x0dc0('0x20')][_0x0dc0('0x1b')](this));ami['on'](_0x0dc0('0x21'),this[_0x0dc0('0x22')][_0x0dc0('0x1b')](this));ami['on']('attendedtransfer',this[_0x0dc0('0x23')][_0x0dc0('0x1b')](this));ami['on']('blindtransfer',this[_0x0dc0('0x24')]['bind'](this));ami['on'](_0x0dc0('0x25'),this[_0x0dc0('0x26')]['bind'](this));ami['on'](_0x0dc0('0x27'),this[_0x0dc0('0x28')][_0x0dc0('0x1b')](this));return BPromise[_0x0dc0('0x29')]()['then'](ami[_0x0dc0('0x2a')]())[_0x0dc0('0x2b')](function(_0x15fd57){console[_0x0dc0('0x2c')](_0x15fd57);});}VoiceCallReport[_0x0dc0('0x2d')]['isNotNull']=function(_0x34e889){return _0x34e889!==null&&!_[_0x0dc0('0x2e')](_0x34e889);};VoiceCallReport[_0x0dc0('0x2d')]['emit']=function(_0x17a2e6,_0x4a27a5,_0x367d63){io['to'](_0x17a2e6)[_0x0dc0('0x2f')](_0x4a27a5,_0x367d63);};VoiceCallReport[_0x0dc0('0x2d')][_0x0dc0('0x22')]=function(_0x3707c2){try{if(this[_0x0dc0('0x30')](_0x3707c2)){if(_0x3707c2['uniqueid']===_0x3707c2[_0x0dc0('0x31')]){if(!_[_0x0dc0('0x2e')](this['channels'][_0x3707c2['uniqueid']])){_['merge'](this[_0x0dc0('0x19')][_0x3707c2[_0x0dc0('0x32')]],_[_0x0dc0('0x33')](_0x3707c2,_[_0x0dc0('0x34')](this['channels'][_0x3707c2['uniqueid']])));}}}}catch(_0x532ac3){logger[_0x0dc0('0x35')](_0x0dc0('0x36'),util[_0x0dc0('0x37')](_0x532ac3,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x0dc0('0x2d')][_0x0dc0('0x1d')]=function(_0x36f2fe){try{if(this[_0x0dc0('0x30')](_0x36f2fe)){if(_0x36f2fe[_0x0dc0('0x32')]===_0x36f2fe['linkedid']&&_0x36f2fe[_0x0dc0('0x38')]!='OutgoingSpoolFailed'){if(_[_0x0dc0('0x2e')](this[_0x0dc0('0x19')][_0x36f2fe[_0x0dc0('0x32')]])){this[_0x0dc0('0x19')][_0x36f2fe[_0x0dc0('0x32')]]=new Channel();this['channels'][_0x36f2fe[_0x0dc0('0x32')]]['starttime']=moment()['format'](_0x0dc0('0x39'));this[_0x0dc0('0x19')][_0x36f2fe[_0x0dc0('0x32')]]['disposition']=dispositions[_[_0x0dc0('0x3a')](_0x36f2fe[_0x0dc0('0x3b')])];_['merge'](this[_0x0dc0('0x19')][_0x36f2fe[_0x0dc0('0x32')]],_[_0x0dc0('0x33')](_0x36f2fe,_[_0x0dc0('0x34')](this[_0x0dc0('0x19')][_0x36f2fe[_0x0dc0('0x32')]])));if(_0x36f2fe['context']===_0x0dc0('0x3c')){if(this[_0x0dc0('0x1a')][_0x36f2fe[_0x0dc0('0x38')][_0x0dc0('0x3d')]('-')[0x0]]){this[_0x0dc0('0x1a')][_0x36f2fe[_0x0dc0('0x38')][_0x0dc0('0x3d')]('-')[0x0]][_0x0dc0('0x3e')]=_0x36f2fe[_0x0dc0('0x3f')];this[_0x0dc0('0x2f')](util['format']('user:%s',this['agents'][_0x36f2fe['channel'][_0x0dc0('0x3d')]('-')[0x0]]['name']),_0x0dc0('0x40'),{'destaccountcode':this['agents'][_0x36f2fe[_0x0dc0('0x38')][_0x0dc0('0x3d')]('-')[0x0]][_0x0dc0('0x41')],'destconnectedlinenum':_0x36f2fe['exten']});}}}}}}catch(_0x2c30ea){logger[_0x0dc0('0x35')](_0x0dc0('0x42'),util[_0x0dc0('0x37')](_0x2c30ea,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x0dc0('0x2d')][_0x0dc0('0x43')]=function(_0x2aa9fa){try{if(this[_0x0dc0('0x30')](_0x2aa9fa)){if(_0x2aa9fa[_0x0dc0('0x32')]===_0x2aa9fa[_0x0dc0('0x31')]&&_0x2aa9fa[_0x0dc0('0x3f')]!='h'&&_0x2aa9fa[_0x0dc0('0x38')]!='OutgoingSpoolFailed'){_0x2aa9fa[_0x0dc0('0x44')]=_0x2aa9fa[_0x0dc0('0x44')][_0x0dc0('0x45')]();_0x2aa9fa['applicationdata']=(_0x2aa9fa[_0x0dc0('0x46')]||_0x2aa9fa[_0x0dc0('0x47')])['toLowerCase']();if(_[_0x0dc0('0x2e')](this[_0x0dc0('0x19')][_0x2aa9fa[_0x0dc0('0x32')]])){this['channels'][_0x2aa9fa['uniqueid']]=new Channel();this[_0x0dc0('0x19')][_0x2aa9fa['uniqueid']][_0x0dc0('0x48')]=_0x2aa9fa[_0x0dc0('0x49')]?moment()[_0x0dc0('0x4a')](moment[_0x0dc0('0x49')](_0x2aa9fa[_0x0dc0('0x49')])[_0x0dc0('0x4b')](),_0x0dc0('0x4b'))['format'](_0x0dc0('0x39')):moment()[_0x0dc0('0x4c')](_0x0dc0('0x39'));this[_0x0dc0('0x19')][_0x2aa9fa[_0x0dc0('0x32')]][_0x0dc0('0x4d')]=_0x0dc0('0x12');}_[_0x0dc0('0x4e')](this['channels'][_0x2aa9fa[_0x0dc0('0x32')]],_[_0x0dc0('0x33')](_0x2aa9fa,_['keys'](this[_0x0dc0('0x19')][_0x2aa9fa[_0x0dc0('0x32')]])));if(_[_0x0dc0('0x4f')](applications,_0x2aa9fa[_0x0dc0('0x44')])){this[_0x0dc0('0x19')][_0x2aa9fa['uniqueid']][_0x0dc0('0x50')]=_0x2aa9fa['application'];this[_0x0dc0('0x19')][_0x2aa9fa['uniqueid']][_0x0dc0('0x51')]=_0x2aa9fa[_0x0dc0('0x47')];if(_0x2aa9fa[_0x0dc0('0x44')]===_0x0dc0('0xe')&&_[_0x0dc0('0x52')](_0x2aa9fa['applicationdata'],_0x0dc0('0x53'))){var _0x2fe01f=_0x2aa9fa[_0x0dc0('0x47')][_0x0dc0('0x3d')]('=');var _0x14f067=_0x2fe01f[0x0][_0x0dc0('0x54')](/cdr\((.*)\)/);if(_0x14f067){this[_0x0dc0('0x19')][_0x2aa9fa['uniqueid']][_0x14f067[0x1]]=_0x2fe01f[0x1];}}else if(_0x2aa9fa[_0x0dc0('0x44')]===_0x0dc0('0x55')){this[_0x0dc0('0x19')][_0x2aa9fa[_0x0dc0('0x32')]][_0x0dc0('0x55')]=_0x2aa9fa['applicationdata'][_0x0dc0('0x3d')](',')[0x0];}}}}}catch(_0x48e385){logger[_0x0dc0('0x35')]('[syncNewExten][VoiceCallReport]',util[_0x0dc0('0x37')](_0x48e385,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x0dc0('0x2d')][_0x0dc0('0x1e')]=function(_0xe6c5bc){try{if(this['isNotNull'](_0xe6c5bc)){if(_0xe6c5bc[_0x0dc0('0x32')]!==_0xe6c5bc[_0x0dc0('0x31')]){if(this[_0x0dc0('0x19')][_0xe6c5bc[_0x0dc0('0x31')]]){if(_0xe6c5bc[_0x0dc0('0x3b')]==='6'){if(!this[_0x0dc0('0x19')][_0xe6c5bc[_0x0dc0('0x31')]][_0x0dc0('0x56')]){var _0x1d952a=moment();this[_0x0dc0('0x19')][_0xe6c5bc[_0x0dc0('0x31')]][_0x0dc0('0x56')]=!![];this[_0x0dc0('0x19')][_0xe6c5bc[_0x0dc0('0x31')]][_0x0dc0('0x57')]=_0x1d952a['format'](_0x0dc0('0x39'));if(this[_0x0dc0('0x19')][_0xe6c5bc['linkedid']][_0x0dc0('0x48')]){this[_0x0dc0('0x19')][_0xe6c5bc['linkedid']]['holdtime']=_0x1d952a['diff'](this[_0x0dc0('0x19')][_0xe6c5bc[_0x0dc0('0x31')]][_0x0dc0('0x48')],_0x0dc0('0x4b'));}}this[_0x0dc0('0x19')][_0xe6c5bc[_0x0dc0('0x31')]][_0x0dc0('0x31')]=_0xe6c5bc[_0x0dc0('0x32')];if(_0xe6c5bc[_0x0dc0('0x58')]!==_0x0dc0('0x59')){this['channels'][_0xe6c5bc[_0x0dc0('0x31')]][_0x0dc0('0x5a')]=_0xe6c5bc[_0x0dc0('0x58')];}this['channels'][_0xe6c5bc['linkedid']][_0x0dc0('0x5b')]=_0xe6c5bc[_0x0dc0('0x5c')];this[_0x0dc0('0x19')][_0xe6c5bc[_0x0dc0('0x31')]][_0x0dc0('0x5d')]=_0xe6c5bc[_0x0dc0('0x38')];this[_0x0dc0('0x19')][_0xe6c5bc[_0x0dc0('0x31')]]['disposition']=dispositions[_[_0x0dc0('0x3a')](_0xe6c5bc[_0x0dc0('0x3b')])];if(this[_0x0dc0('0x1a')][_0xe6c5bc['channel'][_0x0dc0('0x3d')]('-')[0x0]]){this[_0x0dc0('0x19')][_0xe6c5bc[_0x0dc0('0x31')]][_0x0dc0('0x5e')]=this['agents'][_0xe6c5bc[_0x0dc0('0x38')][_0x0dc0('0x3d')]('-')[0x0]]['id'];this[_0x0dc0('0x19')][_0xe6c5bc[_0x0dc0('0x31')]][_0x0dc0('0x5f')]=this[_0x0dc0('0x1a')][_0xe6c5bc[_0x0dc0('0x38')][_0x0dc0('0x3d')]('-')[0x0]][_0x0dc0('0x60')];}}}}else{if(this[_0x0dc0('0x19')][_0xe6c5bc['uniqueid']]){if(_0xe6c5bc[_0x0dc0('0x3b')]==='6'){if(this[_0x0dc0('0x1a')][_0xe6c5bc['channel'][_0x0dc0('0x3d')]('-')[0x0]]){this[_0x0dc0('0x19')][_0xe6c5bc['uniqueid']][_0x0dc0('0x5e')]=this[_0x0dc0('0x1a')][_0xe6c5bc['channel'][_0x0dc0('0x3d')]('-')[0x0]]['id'];this['channels'][_0xe6c5bc[_0x0dc0('0x32')]]['membername']=this[_0x0dc0('0x1a')][_0xe6c5bc[_0x0dc0('0x38')][_0x0dc0('0x3d')]('-')[0x0]][_0x0dc0('0x60')];}}}}}}catch(_0x1af048){logger[_0x0dc0('0x35')](_0x0dc0('0x61'),util[_0x0dc0('0x37')](_0x1af048,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x0dc0('0x2d')][_0x0dc0('0x62')]=function(_0x41b585,_0x1b8692){if(this[_0x0dc0('0x19')][_0x41b585]){this['channels'][_0x41b585][_0x0dc0('0x63')]=!![];if(_['endsWith'](_0x1b8692,'.wav49')){_0x1b8692=_0x1b8692[_0x0dc0('0x64')]('.wav49','.WAV');}this[_0x0dc0('0x19')][_0x41b585][_0x0dc0('0x65')]=_0x1b8692;var _0x2db09e=_[_0x0dc0('0x66')](this[_0x0dc0('0x19')][_0x41b585][_0x0dc0('0x67')],{'filename':_0x1b8692});if(_[_0x0dc0('0x68')](_0x2db09e)){this['channels'][_0x41b585][_0x0dc0('0x67')][_0x0dc0('0x69')]({'filename':_0x1b8692,'createdAt':moment()[_0x0dc0('0x4c')](_0x0dc0('0x39')),'mixmonitorid':'','status':_0x0dc0('0x6a')});}}};VoiceCallReport[_0x0dc0('0x2d')]['syncVarSet']=function(_0x45cee6){try{if(this[_0x0dc0('0x30')](_0x45cee6)){if(this[_0x0dc0('0x19')][_0x45cee6[_0x0dc0('0x32')]]&&_0x45cee6[_0x0dc0('0x38')]!='OutgoingSpoolFailed'){if(this['isNotNull'](_0x45cee6['variable'])){if(this[_0x0dc0('0x30')](_0x45cee6[_0x0dc0('0x6b')][_0x0dc0('0x6c')])){this[_0x0dc0('0x62')](_0x45cee6[_0x0dc0('0x32')],_0x45cee6[_0x0dc0('0x6d')]);}else if(this[_0x0dc0('0x30')](_0x45cee6[_0x0dc0('0x6b')]['xmd-phone'])){this['channels'][_0x45cee6['uniqueid']][_0x0dc0('0x58')]=_0x45cee6[_0x0dc0('0x6d')];}else if(this['isNotNull'](_0x45cee6[_0x0dc0('0x6b')][_0x0dc0('0x6e')])){this[_0x0dc0('0x19')][_0x45cee6['uniqueid']][_0x0dc0('0x6f')]=_0x45cee6['value'];}else if(this[_0x0dc0('0x30')](_0x45cee6[_0x0dc0('0x6b')][_0x0dc0('0x70')])){this[_0x0dc0('0x19')][_0x45cee6[_0x0dc0('0x32')]][_0x0dc0('0x71')]=_0x45cee6[_0x0dc0('0x6d')];}else if(this[_0x0dc0('0x30')](_0x45cee6[_0x0dc0('0x6b')][_0x0dc0('0x72')])){this[_0x0dc0('0x19')][_0x45cee6[_0x0dc0('0x32')]]['queue']=_0x45cee6[_0x0dc0('0x6d')][_0x0dc0('0x3d')](',')[0x0];}else if(this['isNotNull'](_0x45cee6[_0x0dc0('0x6b')][_0x0dc0('0x73')])){this['channels'][_0x45cee6[_0x0dc0('0x32')]][_0x0dc0('0x74')]=_0x45cee6[_0x0dc0('0x6d')];}else if(this[_0x0dc0('0x30')](_0x45cee6[_0x0dc0('0x6b')]['xmd-destination'])){this[_0x0dc0('0x19')][_0x45cee6['uniqueid']][_0x0dc0('0x75')]=_0x45cee6['value'];}else if(this[_0x0dc0('0x30')](_0x45cee6[_0x0dc0('0x6b')][_0x0dc0('0x76')])){this[_0x0dc0('0x19')][_0x45cee6[_0x0dc0('0x32')]][_0x0dc0('0x77')]=_0x45cee6['value'];}else if(this[_0x0dc0('0x30')](_0x45cee6[_0x0dc0('0x6b')][_0x0dc0('0x78')])){this[_0x0dc0('0x19')][_0x45cee6[_0x0dc0('0x32')]][_0x0dc0('0x55')]=_0x45cee6[_0x0dc0('0x6d')];}else if(this[_0x0dc0('0x30')](_0x45cee6[_0x0dc0('0x6b')][_0x0dc0('0x79')])){this[_0x0dc0('0x19')][_0x45cee6[_0x0dc0('0x32')]][_0x0dc0('0x7a')]=_0x45cee6[_0x0dc0('0x6d')];}}}else if(this[_0x0dc0('0x30')](_0x45cee6[_0x0dc0('0x6b')][_0x0dc0('0x6c')])){if(_0x45cee6[_0x0dc0('0x6d')]){var _0x31a92f=path[_0x0dc0('0x7b')](_0x45cee6[_0x0dc0('0x6d')])['name'];this[_0x0dc0('0x62')](_0x31a92f,_0x45cee6['value']);}}else if(this['channels'][_0x45cee6[_0x0dc0('0x31')]]){if(this[_0x0dc0('0x30')](_0x45cee6[_0x0dc0('0x6b')])){if(this[_0x0dc0('0x30')](_0x45cee6['variable']['sipcallid'])){this[_0x0dc0('0x19')][_0x45cee6[_0x0dc0('0x31')]][_0x0dc0('0x7c')]=_0x45cee6[_0x0dc0('0x6d')];}}}}}catch(_0x1f6104){logger['error'](_0x0dc0('0x7d'),util[_0x0dc0('0x37')](_0x1f6104,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x0dc0('0x2d')][_0x0dc0('0x20')]=function(_0x3561d0){try{if(this[_0x0dc0('0x30')](_0x3561d0)){if(this[_0x0dc0('0x19')][_0x3561d0[_0x0dc0('0x32')]]){var _0x1eaef4=moment();this[_0x0dc0('0x19')][_0x3561d0['uniqueid']][_0x0dc0('0x7e')]=_0x1eaef4[_0x0dc0('0x4c')](_0x0dc0('0x39'));this['channels'][_0x3561d0[_0x0dc0('0x32')]][_0x0dc0('0x49')]=_0x1eaef4[_0x0dc0('0x7f')](this[_0x0dc0('0x19')][_0x3561d0[_0x0dc0('0x32')]][_0x0dc0('0x48')],_0x0dc0('0x4b'));if(this[_0x0dc0('0x19')][_0x3561d0['uniqueid']][_0x0dc0('0x56')]){this['channels'][_0x3561d0[_0x0dc0('0x32')]]['billableseconds']=_0x1eaef4[_0x0dc0('0x7f')](this[_0x0dc0('0x19')][_0x3561d0['uniqueid']][_0x0dc0('0x57')],_0x0dc0('0x4b'));this['channels'][_0x3561d0['uniqueid']][_0x0dc0('0x80')]=this[_0x0dc0('0x19')][_0x3561d0['uniqueid']][_0x0dc0('0x49')]-this[_0x0dc0('0x19')][_0x3561d0[_0x0dc0('0x32')]][_0x0dc0('0x81')];}if(_0x3561d0[_0x0dc0('0x82')]===_0x0dc0('0x3c')){if(this[_0x0dc0('0x1a')][_0x3561d0[_0x0dc0('0x38')]['split']('-')[0x0]]){this[_0x0dc0('0x1a')][_0x3561d0[_0x0dc0('0x38')][_0x0dc0('0x3d')]('-')[0x0]]=_[_0x0dc0('0x83')](this['agents'][_0x3561d0[_0x0dc0('0x38')][_0x0dc0('0x3d')]('-')[0x0]],[_0x0dc0('0x3e')]);this[_0x0dc0('0x2f')](util[_0x0dc0('0x4c')](_0x0dc0('0x84'),this[_0x0dc0('0x1a')][_0x3561d0[_0x0dc0('0x38')]['split']('-')[0x0]][_0x0dc0('0x60')]),_0x0dc0('0x85'),{'destaccountcode':this[_0x0dc0('0x1a')][_0x3561d0[_0x0dc0('0x38')][_0x0dc0('0x3d')]('-')[0x0]]['accountcode']});}}ami[_0x0dc0('0x2f')]('custom:voiceCallReport',this[_0x0dc0('0x19')][_0x3561d0[_0x0dc0('0x32')]]);delete this[_0x0dc0('0x19')][_0x3561d0[_0x0dc0('0x32')]];}}}catch(_0x3cb198){logger[_0x0dc0('0x35')](_0x0dc0('0x86'),util[_0x0dc0('0x37')](_0x3cb198,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x0dc0('0x2d')][_0x0dc0('0x23')]=function(_0x74577){try{if(this[_0x0dc0('0x30')](_0x74577)){if(this[_0x0dc0('0x19')][_0x74577['transfereeuniqueid']]){this[_0x0dc0('0x19')][_0x74577[_0x0dc0('0x87')]]['transfercalleridnum']=_0x74577[_0x0dc0('0x88')];this[_0x0dc0('0x19')][_0x74577[_0x0dc0('0x87')]][_0x0dc0('0x89')]=_0x74577[_0x0dc0('0x8a')];if(this[_0x0dc0('0x19')][_0x74577[_0x0dc0('0x8b')]]){var _0x452e65=this['channels'][_0x74577[_0x0dc0('0x8b')]];this[_0x0dc0('0x19')][_0x74577['secondtransfereruniqueid']]=this['channels'][_0x74577[_0x0dc0('0x87')]];this[_0x0dc0('0x19')][_0x74577[_0x0dc0('0x87')]]=_0x452e65;}}else if(this[_0x0dc0('0x19')][_0x74577['transfertargetuniqueid']]){this[_0x0dc0('0x19')][_0x74577[_0x0dc0('0x8c')]]['transfercalleridnum']=_0x74577[_0x0dc0('0x88')];this[_0x0dc0('0x19')][_0x74577[_0x0dc0('0x8c')]][_0x0dc0('0x89')]=_0x74577[_0x0dc0('0x8a')];if(this[_0x0dc0('0x19')][_0x74577[_0x0dc0('0x8d')]]){var _0x452e65=this[_0x0dc0('0x19')][_0x74577[_0x0dc0('0x8d')]];this['channels'][_0x74577['origtransfereruniqueid']]=this[_0x0dc0('0x19')][_0x74577[_0x0dc0('0x8c')]];this[_0x0dc0('0x19')][_0x74577['transfertargetuniqueid']]=_0x452e65;}}}}catch(_0x38beef){logger[_0x0dc0('0x35')]('[syncAttendedTransfer][VoiceCallReport]',util[_0x0dc0('0x37')](_0x38beef,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype'][_0x0dc0('0x24')]=function(_0x21e68d){try{if(this[_0x0dc0('0x30')](_0x21e68d)){if(this['channels'][_0x21e68d[_0x0dc0('0x87')]]){this[_0x0dc0('0x19')][_0x21e68d[_0x0dc0('0x87')]][_0x0dc0('0x8e')]=_0x21e68d['transfereecalleridnum'];this['channels'][_0x21e68d[_0x0dc0('0x87')]][_0x0dc0('0x89')]=_0x21e68d[_0x0dc0('0x8f')];this[_0x0dc0('0x20')]({'event':'BlindTransfer','uniqueid':_0x21e68d['transfereeuniqueid'],'context':_0x21e68d[_0x0dc0('0x82')],'channel':_0x21e68d[_0x0dc0('0x90')]});}}}catch(_0x30642d){logger[_0x0dc0('0x35')](_0x0dc0('0x91'),util[_0x0dc0('0x37')](_0x30642d,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x0dc0('0x2d')][_0x0dc0('0x26')]=function(_0x295baa){try{if(this[_0x0dc0('0x30')](_0x295baa)){if(this['channels'][_0x295baa[_0x0dc0('0x32')]]){if(!_[_0x0dc0('0x68')](this[_0x0dc0('0x19')][_0x295baa['uniqueid']][_0x0dc0('0x57')])){this['channels'][_0x295baa[_0x0dc0('0x32')]][_0x0dc0('0x92')]=moment()[_0x0dc0('0x4c')](_0x0dc0('0x39'));}}}}catch(_0x34c428){logger[_0x0dc0('0x35')](_0x0dc0('0x93'),util['inspect'](_0x34c428,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype'][_0x0dc0('0x28')]=function(_0x27d3a0){try{if(this[_0x0dc0('0x30')](_0x27d3a0)){if(this['channels'][_0x27d3a0[_0x0dc0('0x32')]]){if(!_['isNil'](this[_0x0dc0('0x19')][_0x27d3a0['uniqueid']]['mohstarttime'])){this['channels'][_0x27d3a0[_0x0dc0('0x32')]][_0x0dc0('0x94')]+=moment()['milliseconds'](0x0)[_0x0dc0('0x7f')](this[_0x0dc0('0x19')][_0x27d3a0[_0x0dc0('0x32')]][_0x0dc0('0x92')],_0x0dc0('0x4b'));delete this[_0x0dc0('0x19')][_0x27d3a0['uniqueid']][_0x0dc0('0x92')];}}}}catch(_0x17f125){logger[_0x0dc0('0x35')](_0x0dc0('0x95'),util[_0x0dc0('0x37')](_0x17f125,{'showHidden':![],'depth':null}));}};module[_0x0dc0('0x96')]=VoiceCallReport;
\ No newline at end of file
index c81795c..abe523c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd0c8=['voice_outbound:save','voice_outbound_channel:remove','exports','util','../../../config/logger','ami','redis','defaults','localhost','socket.io-emitter','channels','outboundChannels','outbound','variables','dialbegin','syncDialBegin','bind','dialend','varset','syncVarSet','hangup','prototype','isUndefined','emit','merge','format','YYYY-MM-DD\x20HH:mm:ss','called','channel','substring','lastIndexOf','omit','event','privilege','voice:outbound','voice_outbound_channel:save','uniqueid','custom:dialbegin','inspect','syncDialEnd','dialstatus','ANSWER','connectedlinenum','connectedlinename','answertime','lastevent','connect','custom:dialconnect','error','[syncDialEnd][VoiceDialReport]','isNotNull','addVariable','variable','outboundrouteid','value','[syncVarSet][VoiceDialReport]','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','memberinterface','memberlastcall','membername','memberpenalty','memberrealtime','isNil','includes','syncHangup','endtime','duration','diff','starttime','seconds','complete','total','answered','holdtime','billableseconds','sumHoldTime','sumDuration','custom:voiceDialReport','custom:dialend'];(function(_0x46b573,_0x388f6d){var _0x3bcf35=function(_0x531d44){while(--_0x531d44){_0x46b573['push'](_0x46b573['shift']());}};_0x3bcf35(++_0x388f6d);}(_0xd0c8,0x1bb));var _0x8d0c=function(_0x446970,_0x8245a0){_0x446970=_0x446970-0x0;var _0x48a737=_0xd0c8[_0x446970];return _0x48a737;};'use strict';var _=require('lodash');var moment=require('moment');var util=require(_0x8d0c('0x0'));var Redis=require('ioredis');var config=require('../../../config/environment');var logger=require(_0x8d0c('0x1'))(_0x8d0c('0x2'));var ami=require('../ami');config[_0x8d0c('0x3')]=_[_0x8d0c('0x4')](config[_0x8d0c('0x3')],{'host':_0x8d0c('0x5'),'port':0x18eb});var io=require(_0x8d0c('0x6'))(new Redis(config[_0x8d0c('0x3')]));function VoiceDialReport(_0x106fc6){this[_0x8d0c('0x7')]=_0x106fc6[_0x8d0c('0x8')];this[_0x8d0c('0x9')]=_0x106fc6[_0x8d0c('0x9')];this[_0x8d0c('0xa')]={};ami['on'](_0x8d0c('0xb'),this[_0x8d0c('0xc')][_0x8d0c('0xd')](this));ami['on'](_0x8d0c('0xe'),this['syncDialEnd'][_0x8d0c('0xd')](this));ami['on'](_0x8d0c('0xf'),this[_0x8d0c('0x10')][_0x8d0c('0xd')](this));ami['on'](_0x8d0c('0x11'),this['syncHangup'][_0x8d0c('0xd')](this));}VoiceDialReport[_0x8d0c('0x12')]['isNotNull']=function(_0x5df675){return _0x5df675!==null&&!_[_0x8d0c('0x13')](_0x5df675);};VoiceDialReport[_0x8d0c('0x12')][_0x8d0c('0x14')]=function(_0x5180b9,_0x120ba8,_0x4cfe52){io['to'](_0x5180b9)[_0x8d0c('0x14')](_0x120ba8,_0x4cfe52);};VoiceDialReport[_0x8d0c('0x12')]['syncDialBegin']=function(_0x1ec705){try{if(this['isNotNull'](_0x1ec705)){if(this[_0x8d0c('0x7')][_0x1ec705['uniqueid']]){_[_0x8d0c('0x15')](this['channels'][_0x1ec705['uniqueid']],{'starttime':moment()[_0x8d0c('0x16')](_0x8d0c('0x17')),'lastevent':_0x8d0c('0x18'),'interface':_0x1ec705[_0x8d0c('0x19')]['substring'](0x0,_0x1ec705[_0x8d0c('0x19')]['lastIndexOf']('-')),'membername':_0x1ec705['channel'][_0x8d0c('0x1a')](_0x1ec705[_0x8d0c('0x19')][_0x8d0c('0x1b')]('/')+0x1,_0x1ec705[_0x8d0c('0x19')][_0x8d0c('0x1b')]('-'))},_[_0x8d0c('0x1c')](_0x1ec705,[_0x8d0c('0x1d'),_0x8d0c('0x1e')]));this[_0x8d0c('0x14')](_0x8d0c('0x1f'),_0x8d0c('0x20'),this[_0x8d0c('0x7')][_0x1ec705[_0x8d0c('0x21')]]);ami[_0x8d0c('0x14')](_0x8d0c('0x22'),this[_0x8d0c('0x7')][_0x1ec705[_0x8d0c('0x21')]]);}}}catch(_0x4310d2){logger['error']('[syncDialBegin][VoiceDialReport]',util[_0x8d0c('0x23')](_0x4310d2,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x8d0c('0x12')][_0x8d0c('0x24')]=function(_0x2eaf35){try{if(this['isNotNull'](_0x2eaf35)){if(this[_0x8d0c('0x7')][_0x2eaf35[_0x8d0c('0x21')]]){this[_0x8d0c('0x7')][_0x2eaf35['uniqueid']][_0x8d0c('0x25')]=_0x2eaf35[_0x8d0c('0x25')];if(_0x2eaf35[_0x8d0c('0x25')]===_0x8d0c('0x26')){this['channels'][_0x2eaf35[_0x8d0c('0x21')]][_0x8d0c('0x27')]=_0x2eaf35[_0x8d0c('0x27')];this[_0x8d0c('0x7')][_0x2eaf35[_0x8d0c('0x21')]][_0x8d0c('0x28')]=_0x2eaf35[_0x8d0c('0x28')];this[_0x8d0c('0x7')][_0x2eaf35[_0x8d0c('0x21')]][_0x8d0c('0x29')]=moment()[_0x8d0c('0x16')]('YYYY-MM-DD\x20HH:mm:ss');this[_0x8d0c('0x7')][_0x2eaf35[_0x8d0c('0x21')]][_0x8d0c('0x2a')]=_0x8d0c('0x2b');ami['emit'](_0x8d0c('0x2c'),this['channels'][_0x2eaf35[_0x8d0c('0x21')]]);}this[_0x8d0c('0x14')]('voice:outbound','voice_outbound_channel:save',this['channels'][_0x2eaf35[_0x8d0c('0x21')]]);}}}catch(_0x4c2059){logger[_0x8d0c('0x2d')](_0x8d0c('0x2e'),util[_0x8d0c('0x23')](_0x4c2059,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x8d0c('0x12')][_0x8d0c('0x10')]=function(_0xf0fba6){try{if(this[_0x8d0c('0x2f')](_0xf0fba6)){this[_0x8d0c('0x30')](_0xf0fba6[_0x8d0c('0x21')],_['keys'](_0xf0fba6['variable'])[0x0],_0xf0fba6['value']);if(this[_0x8d0c('0x2f')](_0xf0fba6['variable'])&&this[_0x8d0c('0x2f')](_0xf0fba6[_0x8d0c('0x31')][_0x8d0c('0x32')])){if(_['isUndefined'](this[_0x8d0c('0x7')][_0xf0fba6[_0x8d0c('0x21')]])){this[_0x8d0c('0x7')][_0xf0fba6['uniqueid']]={'routeId':_0xf0fba6[_0x8d0c('0x33')],'variables':this[_0x8d0c('0xa')][_0xf0fba6[_0x8d0c('0x21')]]};this['emit'](_0x8d0c('0x1f'),_0x8d0c('0x20'),this['channels'][_0xf0fba6[_0x8d0c('0x21')]]);}}}}catch(_0x1e6820){logger['error'](_0x8d0c('0x34'),util[_0x8d0c('0x23')](_0x1e6820,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x8d0c('0x12')]['addVariable']=function(_0x990b8f,_0x5ceac8,_0x4050f4){var _0x4dd134=[_0x8d0c('0x35'),_0x8d0c('0x36'),_0x8d0c('0x37'),_0x8d0c('0x38'),_0x8d0c('0x39'),'rtpaudioqoslossbridged',_0x8d0c('0x3a'),_0x8d0c('0x3b'),_0x8d0c('0x3c'),_0x8d0c('0x3d'),_0x8d0c('0x3e'),'bridgepvtcallid','membercalls','memberdynamic',_0x8d0c('0x3f'),_0x8d0c('0x40'),_0x8d0c('0x41'),_0x8d0c('0x42'),_0x8d0c('0x43')];if(!_[_0x8d0c('0x44')](_0x5ceac8)&&!_[_0x8d0c('0x45')](_0x4dd134,_0x5ceac8)){if(_[_0x8d0c('0x13')](this[_0x8d0c('0xa')][_0x990b8f])){this['variables'][_0x990b8f]={};}this[_0x8d0c('0xa')][_0x990b8f][_0x5ceac8]=_0x4050f4;}};VoiceDialReport[_0x8d0c('0x12')][_0x8d0c('0x46')]=function(_0x11923f){try{if(this['isNotNull'](_0x11923f)){if(this[_0x8d0c('0x7')][_0x11923f['uniqueid']]){this['channels'][_0x11923f[_0x8d0c('0x21')]][_0x8d0c('0x47')]=moment()[_0x8d0c('0x16')](_0x8d0c('0x17'));this['channels'][_0x11923f[_0x8d0c('0x21')]][_0x8d0c('0x48')]=moment(this[_0x8d0c('0x7')][_0x11923f[_0x8d0c('0x21')]]['endtime'])[_0x8d0c('0x49')](this[_0x8d0c('0x7')][_0x11923f['uniqueid']][_0x8d0c('0x4a')],_0x8d0c('0x4b'));this[_0x8d0c('0x7')][_0x11923f['uniqueid']]['lastevent']=_0x8d0c('0x4c');this[_0x8d0c('0x9')][_0x8d0c('0x4d')]+=0x1;if(this[_0x8d0c('0x7')][_0x11923f[_0x8d0c('0x21')]][_0x8d0c('0x29')]){this['outbound'][_0x8d0c('0x4e')]+=0x1;this['channels'][_0x11923f['uniqueid']][_0x8d0c('0x4f')]=moment(this[_0x8d0c('0x7')][_0x11923f[_0x8d0c('0x21')]][_0x8d0c('0x29')])[_0x8d0c('0x49')](this[_0x8d0c('0x7')][_0x11923f[_0x8d0c('0x21')]][_0x8d0c('0x4a')],_0x8d0c('0x4b'));this['channels'][_0x11923f['uniqueid']][_0x8d0c('0x50')]=moment(this[_0x8d0c('0x7')][_0x11923f[_0x8d0c('0x21')]][_0x8d0c('0x47')])[_0x8d0c('0x49')](this[_0x8d0c('0x7')][_0x11923f[_0x8d0c('0x21')]][_0x8d0c('0x29')],'seconds');this[_0x8d0c('0x9')][_0x8d0c('0x51')]+=this[_0x8d0c('0x7')][_0x11923f[_0x8d0c('0x21')]]['holdtime']||0x0;this[_0x8d0c('0x9')]['sumBillable']+=this['channels'][_0x11923f['uniqueid']][_0x8d0c('0x50')];}this[_0x8d0c('0x9')][_0x8d0c('0x52')]+=this['channels'][_0x11923f['uniqueid']][_0x8d0c('0x48')];ami['emit'](_0x8d0c('0x53'),this[_0x8d0c('0x7')][_0x11923f[_0x8d0c('0x21')]]);ami[_0x8d0c('0x14')](_0x8d0c('0x54'),this[_0x8d0c('0x7')][_0x11923f[_0x8d0c('0x21')]]);this[_0x8d0c('0x14')](_0x8d0c('0x1f'),_0x8d0c('0x55'),this[_0x8d0c('0x9')]);this[_0x8d0c('0x14')](_0x8d0c('0x1f'),_0x8d0c('0x56'),this[_0x8d0c('0x7')][_0x11923f['uniqueid']]);delete this['channels'][_0x11923f[_0x8d0c('0x21')]];}if(this['variables'][_0x11923f[_0x8d0c('0x21')]]){delete this['variables'][_0x11923f['uniqueid']];}}}catch(_0xa88f6e){logger[_0x8d0c('0x2d')]('[syncHangup][VoiceDialReport]',util['inspect'](_0xa88f6e,{'showHidden':![],'depth':null}));}};module[_0x8d0c('0x57')]=VoiceDialReport;
\ No newline at end of file
+var _0x6bfd=['dialend','syncDialEnd','bind','varset','syncVarSet','hangup','syncHangup','prototype','isNotNull','isUndefined','emit','channels','uniqueid','merge','YYYY-MM-DD\x20HH:mm:ss','called','channel','lastIndexOf','substring','event','privilege','voice:outbound','voice_outbound_channel:save','custom:dialbegin','error','[syncDialBegin][VoiceDialReport]','dialstatus','ANSWER','connectedlinenum','connectedlinename','lastevent','custom:dialconnect','[syncDialEnd][VoiceDialReport]','addVariable','keys','variable','value','inspect','rtpaudioqosjitterbridged','rtpaudioqoslossbridged','rtpaudioqosrtt','sipcallid','sipuri','bridgepeer','membercalls','memberlastcall','memberrealtime','isNil','format','endtime','diff','starttime','seconds','complete','outbound','total','answertime','holdtime','billableseconds','sumHoldTime','sumBillable','duration','custom:dialend','voice_outbound:save','voice_outbound_channel:remove','[syncHangup][VoiceDialReport]','exports','lodash','util','../../../config/environment','../../../config/logger','ami','../ami','redis','defaults','localhost','socket.io-emitter','outboundChannels','variables','dialbegin','syncDialBegin'];(function(_0x1c1ad8,_0x42a963){var _0x471fc3=function(_0x2b4140){while(--_0x2b4140){_0x1c1ad8['push'](_0x1c1ad8['shift']());}};_0x471fc3(++_0x42a963);}(_0x6bfd,0x136));var _0xd6bf=function(_0x554344,_0x27f258){_0x554344=_0x554344-0x0;var _0x1b642a=_0x6bfd[_0x554344];return _0x1b642a;};'use strict';var _=require(_0xd6bf('0x0'));var moment=require('moment');var util=require(_0xd6bf('0x1'));var Redis=require('ioredis');var config=require(_0xd6bf('0x2'));var logger=require(_0xd6bf('0x3'))(_0xd6bf('0x4'));var ami=require(_0xd6bf('0x5'));config[_0xd6bf('0x6')]=_[_0xd6bf('0x7')](config[_0xd6bf('0x6')],{'host':_0xd6bf('0x8'),'port':0x18eb});var io=require(_0xd6bf('0x9'))(new Redis(config[_0xd6bf('0x6')]));function VoiceDialReport(_0x52c699){this['channels']=_0x52c699[_0xd6bf('0xa')];this['outbound']=_0x52c699['outbound'];this[_0xd6bf('0xb')]={};ami['on'](_0xd6bf('0xc'),this[_0xd6bf('0xd')]['bind'](this));ami['on'](_0xd6bf('0xe'),this[_0xd6bf('0xf')][_0xd6bf('0x10')](this));ami['on'](_0xd6bf('0x11'),this[_0xd6bf('0x12')][_0xd6bf('0x10')](this));ami['on'](_0xd6bf('0x13'),this[_0xd6bf('0x14')][_0xd6bf('0x10')](this));}VoiceDialReport[_0xd6bf('0x15')][_0xd6bf('0x16')]=function(_0xebb763){return _0xebb763!==null&&!_[_0xd6bf('0x17')](_0xebb763);};VoiceDialReport[_0xd6bf('0x15')][_0xd6bf('0x18')]=function(_0x4b04b0,_0x2f4bb4,_0x4c7706){io['to'](_0x4b04b0)[_0xd6bf('0x18')](_0x2f4bb4,_0x4c7706);};VoiceDialReport[_0xd6bf('0x15')][_0xd6bf('0xd')]=function(_0x5b8996){try{if(this[_0xd6bf('0x16')](_0x5b8996)){if(this[_0xd6bf('0x19')][_0x5b8996[_0xd6bf('0x1a')]]){_[_0xd6bf('0x1b')](this[_0xd6bf('0x19')][_0x5b8996[_0xd6bf('0x1a')]],{'starttime':moment()['format'](_0xd6bf('0x1c')),'lastevent':_0xd6bf('0x1d'),'interface':_0x5b8996[_0xd6bf('0x1e')]['substring'](0x0,_0x5b8996[_0xd6bf('0x1e')][_0xd6bf('0x1f')]('-')),'membername':_0x5b8996['channel'][_0xd6bf('0x20')](_0x5b8996['channel'][_0xd6bf('0x1f')]('/')+0x1,_0x5b8996[_0xd6bf('0x1e')][_0xd6bf('0x1f')]('-'))},_['omit'](_0x5b8996,[_0xd6bf('0x21'),_0xd6bf('0x22')]));this[_0xd6bf('0x18')](_0xd6bf('0x23'),_0xd6bf('0x24'),this[_0xd6bf('0x19')][_0x5b8996['uniqueid']]);ami['emit'](_0xd6bf('0x25'),this[_0xd6bf('0x19')][_0x5b8996[_0xd6bf('0x1a')]]);}}}catch(_0x1353f7){logger[_0xd6bf('0x26')](_0xd6bf('0x27'),util['inspect'](_0x1353f7,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0xd6bf('0x15')][_0xd6bf('0xf')]=function(_0xe45ceb){try{if(this[_0xd6bf('0x16')](_0xe45ceb)){if(this[_0xd6bf('0x19')][_0xe45ceb[_0xd6bf('0x1a')]]){this[_0xd6bf('0x19')][_0xe45ceb[_0xd6bf('0x1a')]][_0xd6bf('0x28')]=_0xe45ceb[_0xd6bf('0x28')];if(_0xe45ceb['dialstatus']===_0xd6bf('0x29')){this['channels'][_0xe45ceb[_0xd6bf('0x1a')]][_0xd6bf('0x2a')]=_0xe45ceb[_0xd6bf('0x2a')];this[_0xd6bf('0x19')][_0xe45ceb['uniqueid']][_0xd6bf('0x2b')]=_0xe45ceb[_0xd6bf('0x2b')];this[_0xd6bf('0x19')][_0xe45ceb['uniqueid']]['answertime']=moment()['format'](_0xd6bf('0x1c'));this[_0xd6bf('0x19')][_0xe45ceb[_0xd6bf('0x1a')]][_0xd6bf('0x2c')]='connect';ami[_0xd6bf('0x18')](_0xd6bf('0x2d'),this[_0xd6bf('0x19')][_0xe45ceb[_0xd6bf('0x1a')]]);}this[_0xd6bf('0x18')](_0xd6bf('0x23'),_0xd6bf('0x24'),this[_0xd6bf('0x19')][_0xe45ceb['uniqueid']]);}}}catch(_0x204c22){logger[_0xd6bf('0x26')](_0xd6bf('0x2e'),util['inspect'](_0x204c22,{'showHidden':![],'depth':null}));}};VoiceDialReport['prototype'][_0xd6bf('0x12')]=function(_0x978631){try{if(this[_0xd6bf('0x16')](_0x978631)){this[_0xd6bf('0x2f')](_0x978631[_0xd6bf('0x1a')],_[_0xd6bf('0x30')](_0x978631[_0xd6bf('0x31')])[0x0],_0x978631[_0xd6bf('0x32')]);if(this[_0xd6bf('0x16')](_0x978631[_0xd6bf('0x31')])&&this[_0xd6bf('0x16')](_0x978631[_0xd6bf('0x31')]['outboundrouteid'])){if(_['isUndefined'](this[_0xd6bf('0x19')][_0x978631['uniqueid']])){this['channels'][_0x978631[_0xd6bf('0x1a')]]={'routeId':_0x978631['value'],'variables':this['variables'][_0x978631[_0xd6bf('0x1a')]]};this[_0xd6bf('0x18')](_0xd6bf('0x23'),_0xd6bf('0x24'),this[_0xd6bf('0x19')][_0x978631[_0xd6bf('0x1a')]]);}}}}catch(_0x7d26fd){logger['error']('[syncVarSet][VoiceDialReport]',util[_0xd6bf('0x33')](_0x7d26fd,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0xd6bf('0x15')][_0xd6bf('0x2f')]=function(_0x17609a,_0x3486ca,_0x48d660){var _0x1780cd=['rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter',_0xd6bf('0x34'),'rtpaudioqosloss',_0xd6bf('0x35'),_0xd6bf('0x36'),'rtpaudioqosrttbridged',_0xd6bf('0x37'),_0xd6bf('0x38'),_0xd6bf('0x39'),'bridgepvtcallid',_0xd6bf('0x3a'),'memberdynamic','memberinterface',_0xd6bf('0x3b'),'membername','memberpenalty',_0xd6bf('0x3c')];if(!_[_0xd6bf('0x3d')](_0x3486ca)&&!_['includes'](_0x1780cd,_0x3486ca)){if(_[_0xd6bf('0x17')](this['variables'][_0x17609a])){this[_0xd6bf('0xb')][_0x17609a]={};}this[_0xd6bf('0xb')][_0x17609a][_0x3486ca]=_0x48d660;}};VoiceDialReport[_0xd6bf('0x15')][_0xd6bf('0x14')]=function(_0x135286){try{if(this[_0xd6bf('0x16')](_0x135286)){if(this[_0xd6bf('0x19')][_0x135286['uniqueid']]){this['channels'][_0x135286[_0xd6bf('0x1a')]]['endtime']=moment()[_0xd6bf('0x3e')](_0xd6bf('0x1c'));this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]]['duration']=moment(this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]][_0xd6bf('0x3f')])[_0xd6bf('0x40')](this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]][_0xd6bf('0x41')],_0xd6bf('0x42'));this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]]['lastevent']=_0xd6bf('0x43');this[_0xd6bf('0x44')][_0xd6bf('0x45')]+=0x1;if(this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]][_0xd6bf('0x46')]){this[_0xd6bf('0x44')]['answered']+=0x1;this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]][_0xd6bf('0x47')]=moment(this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]][_0xd6bf('0x46')])[_0xd6bf('0x40')](this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]][_0xd6bf('0x41')],_0xd6bf('0x42'));this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]][_0xd6bf('0x48')]=moment(this['channels'][_0x135286['uniqueid']][_0xd6bf('0x3f')])[_0xd6bf('0x40')](this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]]['answertime'],'seconds');this[_0xd6bf('0x44')][_0xd6bf('0x49')]+=this[_0xd6bf('0x19')][_0x135286['uniqueid']][_0xd6bf('0x47')]||0x0;this[_0xd6bf('0x44')][_0xd6bf('0x4a')]+=this[_0xd6bf('0x19')][_0x135286['uniqueid']][_0xd6bf('0x48')];}this[_0xd6bf('0x44')]['sumDuration']+=this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]][_0xd6bf('0x4b')];ami['emit']('custom:voiceDialReport',this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]]);ami[_0xd6bf('0x18')](_0xd6bf('0x4c'),this[_0xd6bf('0x19')][_0x135286[_0xd6bf('0x1a')]]);this[_0xd6bf('0x18')](_0xd6bf('0x23'),_0xd6bf('0x4d'),this['outbound']);this[_0xd6bf('0x18')](_0xd6bf('0x23'),_0xd6bf('0x4e'),this['channels'][_0x135286[_0xd6bf('0x1a')]]);delete this['channels'][_0x135286[_0xd6bf('0x1a')]];}if(this[_0xd6bf('0xb')][_0x135286[_0xd6bf('0x1a')]]){delete this[_0xd6bf('0xb')][_0x135286[_0xd6bf('0x1a')]];}}}catch(_0x1d6ca8){logger[_0xd6bf('0x26')](_0xd6bf('0x4f'),util[_0xd6bf('0x33')](_0x1d6ca8,{'showHidden':![],'depth':null}));}};module[_0xd6bf('0x50')]=VoiceDialReport;
\ No newline at end of file
index ecea6c6..036ec50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe6b8=['syncAttendedTransfer','transfereeuniqueid','secondtransfererexten','ATTENDEDTRANSFER','transfertype','ATTENDED','secondtransfereruniqueid','transfertargetuniqueid','origtransfererexten','origtransfereruniqueid','[syncAttendedTransfer][VoiceQueueReport]','syncBlindTransfer','BLIND','extension','BlindTransfer','transfererchannel','mohstarttime','mohtime','exports','lodash','moment','md5','ioredis','../../../config/logger','ami','../ami','../model/queueReport','redis','localhost','prototype','enqueue','tail','sequence','queueReports','queueChannels','voiceQueues','flagQueueSummary','campaigns','variables','queuesummary','syncQueueSummary','bind','queuesummarycomplete','syncQueueCallerJoin','queuecallerabandon','syncQueueCallerAbandon','queuecallerleave','syncQueueCallerLeave','agentconnect','syncAgentConnect','varset','syncVarSet','syncHangup','syncFullyBooted','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','attendedtransfer','loopQueueShow','isUndefined','hasOwnProperty','isEmpty','originated','talking','pTalking','unlockRR','clearZombieChannels','channels','switch','isNil','Action','status','channel','message','No\x20such\x20channel','[voiceQueueReport][checkChannel]','error','[voiceQueueReport][checkQueueReport]','[voiceQueueReport][checkVariables]','[FullyBooted]\x20clear\x20realtime','clearQueueReport','agents','emitVoiceQueueChannelRemove','inspect','emit','format','voice:queue:%s','voice_queue_channel:save','name','voice_queue_channel:remove','type','inbound','strategy','answered','available','loggedIn','sumBillable','sumDuration','sumHoldTime','total','unmanaged','abandoned','Trunk','active','callerid','Interval','stringify','queues','catch','[queues]','then','[queuesummary]','isNotNull','queue','toNumber','loggedin','waiting','callers','emitVoiceQueueSummary','custom:queuesummary','[syncQueueSummary][VoiceQueueReport]','syncQueueSummaryComplete','syncNewExten','uniqueid','queuecallerjoinAt','YYYY-MM-DD\x20HH:mm:ss','position','count','merge','keys','push','last','holdtime','originalposition','queuecallerexitreason','ABANDONED','[syncQueueCallerAbandon][VoiceQueueReport]','queuecallerleaveAt','connectedlinenum','connectedlinename','emitVoiceQueueChannelSave','[syncQueueCallerLeave][VoiceQueueReport]','queuecallercomplete','[syncAgentConnect][VoiceQueueReport]','syncAgentComplete','queuecallerabandonAt','assigned','membername','queuecallerexit','queuecallerexitAt','transfer','COMPLETED','local/','add','FORWARDTRANSFER','FORWARD','transferexten','transferuniqueid','linkedid','COMPLETEDBY','[syncAgentComplete][VoiceQueueReport]','addVariable','variable','queuestatus','value','CONTINUE','EXITWITHKEY','rtpaudioqos','rtpaudioqosjitter','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','bridgepvtcallid','membercalls','memberdynamic','memberlastcall','memberpenalty','memberrealtime','length','diff','seconds','milliseconds','custom:queuecallerunmanaged','lastevent','custom:queuecallerabandon','custom:voiceQueueReport','[syncHangup][VoiceQueueReport]'];(function(_0x5c96ca,_0x3bb52e){var _0x1773c6=function(_0x2e7cd0){while(--_0x2e7cd0){_0x5c96ca['push'](_0x5c96ca['shift']());}};_0x1773c6(++_0x3bb52e);}(_0xe6b8,0x193));var _0x8e6b=function(_0x5c31d8,_0xb7f83a){_0x5c31d8=_0x5c31d8-0x0;var _0xa63d96=_0xe6b8[_0x5c31d8];return _0xa63d96;};'use strict';var _=require(_0x8e6b('0x0'));var moment=require(_0x8e6b('0x1'));var BPromise=require('bluebird');var util=require('util');var md5=require(_0x8e6b('0x2'));var Redis=require(_0x8e6b('0x3'));var config=require('../../../config/environment');var logger=require(_0x8e6b('0x4'))(_0x8e6b('0x5'));var ami=require(_0x8e6b('0x6'));var QueueReport=require(_0x8e6b('0x7'));config[_0x8e6b('0x8')]=_['defaults'](config[_0x8e6b('0x8')],{'host':_0x8e6b('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x8e6b('0x8')]));var Sequence=function(){};Sequence[_0x8e6b('0xa')][_0x8e6b('0xb')]=function(_0x320eca){this['tail']=this[_0x8e6b('0xc')]?this[_0x8e6b('0xc')]['finally'](_0x320eca):_0x320eca();};function VoiceQueueReport(_0x5cb4f9){this[_0x8e6b('0xd')]=new Sequence();this[_0x8e6b('0xe')]={};this['agents']=_0x5cb4f9['agents'];this['channels']=_0x5cb4f9[_0x8e6b('0xf')];this[_0x8e6b('0x10')]=_0x5cb4f9['voiceQueues'];this[_0x8e6b('0x11')]=!![];this['campaigns']=_0x5cb4f9[_0x8e6b('0x12')];this[_0x8e6b('0x13')]={};ami['on'](_0x8e6b('0x14'),this[_0x8e6b('0x15')][_0x8e6b('0x16')](this));ami['on'](_0x8e6b('0x17'),this['syncQueueSummaryComplete'][_0x8e6b('0x16')](this));ami['on']('queuecallerjoin',this[_0x8e6b('0x18')][_0x8e6b('0x16')](this));ami['on'](_0x8e6b('0x19'),this[_0x8e6b('0x1a')][_0x8e6b('0x16')](this));ami['on'](_0x8e6b('0x1b'),this[_0x8e6b('0x1c')]['bind'](this));ami['on']('agentcomplete',this['syncAgentComplete'][_0x8e6b('0x16')](this));ami['on'](_0x8e6b('0x1d'),this[_0x8e6b('0x1e')][_0x8e6b('0x16')](this));ami['on'](_0x8e6b('0x1f'),this[_0x8e6b('0x20')][_0x8e6b('0x16')](this));ami['on']('hangup',this[_0x8e6b('0x21')]['bind'](this));ami['on']('fullybooted',this[_0x8e6b('0x22')][_0x8e6b('0x16')](this));ami['on'](_0x8e6b('0x23'),this[_0x8e6b('0x24')]['bind'](this));ami['on'](_0x8e6b('0x25'),this[_0x8e6b('0x26')][_0x8e6b('0x16')](this));ami['on'](_0x8e6b('0x27'),this['syncAttendedTransfer'][_0x8e6b('0x16')](this));ami['on']('blindtransfer',this['syncBlindTransfer']['bind'](this));this['loopQueueSummary']();this[_0x8e6b('0x28')]();}function isNotNull(_0x20b015){return _0x20b015!==null&&!_[_0x8e6b('0x29')](_0x20b015);}function clearChannels(_0xe33d7c){if(!_['isEmpty'](_0xe33d7c)){for(var _0x5852fa in _0xe33d7c){if(_0xe33d7c[_0x8e6b('0x2a')](_0x5852fa)){delete _0xe33d7c[_0x5852fa];}}}}function clearCampaigns(_0x3861ce){if(!_[_0x8e6b('0x2b')](_0x3861ce)){for(var _0x384c41 in _0x3861ce){if(_0x3861ce['hasOwnProperty'](_0x384c41)){_0x3861ce[_0x384c41][_0x8e6b('0x2c')]=0x0;}}}}function clearVoiceQueues(_0x3f7002){if(!_[_0x8e6b('0x2b')](_0x3f7002)){for(var _0x3a4bdf in _0x3f7002){if(_0x3f7002[_0x8e6b('0x2a')](_0x3a4bdf)){_0x3f7002[_0x3a4bdf]['originated']=0x0;_0x3f7002[_0x3a4bdf][_0x8e6b('0x2d')]=0x0;_0x3f7002[_0x3a4bdf][_0x8e6b('0x2e')]=0x0;_0x3f7002[_0x3a4bdf]['waiting']=0x0;_0x3f7002[_0x3a4bdf]['queueStatusComplete']=!![];}}}}function clearAgentBooked(_0x47f76c){if(!_[_0x8e6b('0x2b')](_0x47f76c)){for(var _0x1131f2 in _0x47f76c){if(_0x47f76c['hasOwnProperty'](_0x1131f2)){_0x47f76c[_0x1131f2][_0x8e6b('0x2f')]=!![];}}}}VoiceQueueReport['prototype'][_0x8e6b('0x30')]=function(){var _0x55ee81=this;for(var _0x58e9fe in this[_0x8e6b('0x31')]){if(this[_0x8e6b('0x31')][_0x8e6b('0x2a')](_0x58e9fe)&&!this[_0x8e6b('0x31')][_0x58e9fe][_0x8e6b('0x32')]){this['sequence'][_0x8e6b('0xb')](function(){if(!_[_0x8e6b('0x33')](_0x55ee81[_0x8e6b('0x31')][_0x58e9fe])){return ami[_0x8e6b('0x34')]({'action':_0x8e6b('0x35'),'channel':_0x55ee81[_0x8e6b('0x31')][_0x58e9fe][_0x8e6b('0x36')]})['catch'](function(_0x493793){if(_0x493793[_0x8e6b('0x37')]===_0x8e6b('0x38')){setTimeout(function(){if(_0x55ee81[_0x8e6b('0x31')][_0x58e9fe]){delete _0x55ee81[_0x8e6b('0x31')][_0x58e9fe];logger['error'](_0x8e6b('0x39'),_0x58e9fe);}if(_0x55ee81[_0x8e6b('0xe')][_0x58e9fe]){delete _0x55ee81[_0x8e6b('0xe')][_0x58e9fe];logger[_0x8e6b('0x3a')](_0x8e6b('0x3b'),_0x58e9fe);}if(_0x55ee81[_0x8e6b('0x13')][_0x58e9fe]){delete _0x55ee81[_0x8e6b('0x13')][_0x58e9fe];logger['error'](_0x8e6b('0x3c'),_0x58e9fe);}},0x1f40);}});}});}}};VoiceQueueReport[_0x8e6b('0xa')]['syncFullyBooted']=function(){logger[_0x8e6b('0x3a')](_0x8e6b('0x3d'));clearChannels(this['channels']);this[_0x8e6b('0x3e')](this[_0x8e6b('0xe')]);clearAgentBooked(this[_0x8e6b('0x3f')]);clearVoiceQueues(this['voiceQueues']);clearCampaigns(this['campaigns']);};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x3e')]=function(_0x21b432){var _0x4dfbf7=this;if(!_[_0x8e6b('0x2b')](_0x21b432)){for(var _0xd55722 in _0x21b432){if(_0x21b432['hasOwnProperty'](_0xd55722)){_0x4dfbf7[_0x8e6b('0x40')](_0x21b432[_0xd55722]);delete _0x21b432[_0xd55722];}}}};function loggerCatch(_0x387142){return function(_0xd6d848){logger['error'](_0x387142,util[_0x8e6b('0x41')](_0xd6d848,{'showHidden':![],'depth':null}));};}VoiceQueueReport['prototype'][_0x8e6b('0x42')]=function(_0xca7964,_0x25f420,_0x3f1891){io['to'](_0xca7964)[_0x8e6b('0x42')](_0x25f420,_0x3f1891);};VoiceQueueReport[_0x8e6b('0xa')]['emitVoiceQueueChannelSave']=function(_0x101b59){this['emit'](util[_0x8e6b('0x43')](_0x8e6b('0x44'),_0x101b59['name']),_0x8e6b('0x45'),_0x101b59);};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x40')]=function(_0x2f2dde){this[_0x8e6b('0x42')](util['format'](_0x8e6b('0x44'),_0x2f2dde[_0x8e6b('0x46')]),_0x8e6b('0x47'),_0x2f2dde);};VoiceQueueReport[_0x8e6b('0xa')]['emitVoiceQueueSummary']=function(_0x29fd4b){if(_0x29fd4b[_0x8e6b('0x48')]===_0x8e6b('0x49')){var _0x413894={'id':_0x29fd4b['id'],'name':_0x29fd4b[_0x8e6b('0x46')],'strategy':_0x29fd4b[_0x8e6b('0x4a')],'answered':_0x29fd4b[_0x8e6b('0x4b')],'available':_0x29fd4b[_0x8e6b('0x4c')],'loggedIn':_0x29fd4b[_0x8e6b('0x4d')],'pTalking':_0x29fd4b[_0x8e6b('0x2e')],'sumBillable':_0x29fd4b[_0x8e6b('0x4e')],'sumDuration':_0x29fd4b[_0x8e6b('0x4f')],'sumHoldTime':_0x29fd4b[_0x8e6b('0x50')]||0x0,'talking':_0x29fd4b['talking'],'total':_0x29fd4b[_0x8e6b('0x51')],'type':_0x29fd4b['type'],'unmanaged':_0x29fd4b[_0x8e6b('0x52')],'abandoned':_0x29fd4b[_0x8e6b('0x53')],'waiting':_0x29fd4b['waiting']};if(_0x29fd4b['Trunk']){_0x413894[_0x8e6b('0x54')]={'id':_0x29fd4b[_0x8e6b('0x54')]['id'],'name':_0x29fd4b[_0x8e6b('0x54')][_0x8e6b('0x46')],'active':_0x29fd4b[_0x8e6b('0x54')][_0x8e6b('0x55')],'callerid':_0x29fd4b['Trunk'][_0x8e6b('0x56')]};}if(_0x29fd4b['Interval']){_0x413894['Interval']={'id':_0x29fd4b[_0x8e6b('0x57')]['id'],'name':_0x29fd4b[_0x8e6b('0x57')][_0x8e6b('0x46')]};}var _0x42f618=md5(JSON[_0x8e6b('0x58')](_0x413894));if(_0x29fd4b[_0x8e6b('0x2')]!==_0x42f618){_0x29fd4b[_0x8e6b('0x2')]=_0x42f618;this['emit'](util[_0x8e6b('0x43')](_0x8e6b('0x44'),_0x413894[_0x8e6b('0x46')]),'voice_queue:save',_0x413894);}}};VoiceQueueReport['prototype']['isNotNull']=function(_0x73e64){return _0x73e64!==null&&!_[_0x8e6b('0x29')](_0x73e64);};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x28')]=function(){var _0x3e8a7b=this;setInterval(function(){_0x3e8a7b[_0x8e6b('0x30')]();ami[_0x8e6b('0x34')]({'action':_0x8e6b('0x59')})[_0x8e6b('0x5a')](loggerCatch(_0x8e6b('0x5b')));},0x2710);};VoiceQueueReport[_0x8e6b('0xa')]['loopQueueSummary']=function(){var _0x5daed1=this;setInterval(function(){if(_0x5daed1[_0x8e6b('0x11')]){return ami[_0x8e6b('0x34')]({'action':_0x8e6b('0x14')})[_0x8e6b('0x5c')](function(_0x2467b6){_0x5daed1[_0x8e6b('0x11')]=![];})[_0x8e6b('0x5a')](loggerCatch(_0x8e6b('0x5d')));}},0x3e8);};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x15')]=function(_0x2bf36f){try{if(this[_0x8e6b('0x5e')](_0x2bf36f)&&this[_0x8e6b('0x5e')](_0x2bf36f[_0x8e6b('0x5f')])){if(this[_0x8e6b('0x10')][_0x2bf36f[_0x8e6b('0x5f')]]){var _0xdf81df=_['countBy'](this[_0x8e6b('0x31')],'queue')[_0x2bf36f[_0x8e6b('0x5f')]]||0x0;var _0x4f93e9=_0xdf81df-_0x2bf36f['callers'];if(this[_0x8e6b('0x10')][_0x2bf36f['queue']]['waiting']!==_[_0x8e6b('0x60')](_0x2bf36f['callers'])||this[_0x8e6b('0x10')][_0x2bf36f[_0x8e6b('0x5f')]][_0x8e6b('0x4d')]!==_[_0x8e6b('0x60')](_0x2bf36f[_0x8e6b('0x61')])||this['voiceQueues'][_0x2bf36f[_0x8e6b('0x5f')]][_0x8e6b('0x4c')]!==_['toNumber'](_0x2bf36f[_0x8e6b('0x4c')])||this[_0x8e6b('0x10')][_0x2bf36f[_0x8e6b('0x5f')]][_0x8e6b('0x2d')]!==_0x4f93e9){this[_0x8e6b('0x10')][_0x2bf36f[_0x8e6b('0x5f')]][_0x8e6b('0x62')]=_[_0x8e6b('0x60')](_0x2bf36f[_0x8e6b('0x63')]);this['voiceQueues'][_0x2bf36f[_0x8e6b('0x5f')]][_0x8e6b('0x4d')]=_[_0x8e6b('0x60')](_0x2bf36f[_0x8e6b('0x61')]);this[_0x8e6b('0x10')][_0x2bf36f[_0x8e6b('0x5f')]][_0x8e6b('0x4c')]=_[_0x8e6b('0x60')](_0x2bf36f['available']);this[_0x8e6b('0x10')][_0x2bf36f[_0x8e6b('0x5f')]][_0x8e6b('0x2d')]=_0x4f93e9>0x0?_0x4f93e9:0x0;this[_0x8e6b('0x10')][_0x2bf36f[_0x8e6b('0x5f')]][_0x8e6b('0x2d')]=this[_0x8e6b('0x10')][_0x2bf36f['queue']][_0x8e6b('0x2d')]>_[_0x8e6b('0x60')](_0x2bf36f['loggedin'])?_['toNumber'](_0x2bf36f[_0x8e6b('0x61')]):this['voiceQueues'][_0x2bf36f[_0x8e6b('0x5f')]]['talking'];this[_0x8e6b('0x64')](this['voiceQueues'][_0x2bf36f[_0x8e6b('0x5f')]]);}ami[_0x8e6b('0x42')](_0x8e6b('0x65'),this[_0x8e6b('0x10')][_0x2bf36f[_0x8e6b('0x5f')]]);}}}catch(_0x2bc311){logger['error'](_0x8e6b('0x66'),util[_0x8e6b('0x41')](_0x2bc311,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x67')]=function(_0x1e4a88){this['flagQueueSummary']=!![];};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x68')]=function(_0x1bb70f){};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x18')]=function(_0x44bb9e){try{if(this[_0x8e6b('0x5e')](_0x44bb9e)){if(_[_0x8e6b('0x29')](this['queueReports'][_0x44bb9e[_0x8e6b('0x69')]])){this['queueReports'][_0x44bb9e[_0x8e6b('0x69')]]=[];this[_0x8e6b('0x31')][_0x44bb9e['uniqueid']]={};}var _0x1efff2=new QueueReport();_0x1efff2['name']=_0x44bb9e[_0x8e6b('0x5f')];_0x1efff2[_0x8e6b('0x48')]=this[_0x8e6b('0x10')][_0x1efff2['name']]&&this[_0x8e6b('0x10')][_0x1efff2['name']][_0x8e6b('0x48')]?this['voiceQueues'][_0x1efff2['name']][_0x8e6b('0x48')]||'inbound':_0x8e6b('0x49');_0x1efff2['queue']=_0x44bb9e[_0x8e6b('0x5f')];_0x1efff2[_0x8e6b('0x6a')]=moment()[_0x8e6b('0x43')](_0x8e6b('0x6b'));_0x1efff2['position']=_0x44bb9e[_0x8e6b('0x6c')];_0x1efff2['count']=_0x44bb9e[_0x8e6b('0x6d')];_[_0x8e6b('0x6e')](_0x1efff2,_['pick'](_0x44bb9e,_[_0x8e6b('0x6f')](_0x1efff2)));this[_0x8e6b('0xe')][_0x44bb9e[_0x8e6b('0x69')]][_0x8e6b('0x70')](_0x1efff2);this[_0x8e6b('0x31')][_0x44bb9e[_0x8e6b('0x69')]]=_0x1efff2;this['emitVoiceQueueChannelSave'](_0x1efff2);}}catch(_0x25407a){logger[_0x8e6b('0x3a')]('[syncQueueCallerJoin][VoiceQueueReport]',util[_0x8e6b('0x41')](_0x25407a,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x8e6b('0xa')]['syncQueueCallerAbandon']=function(_0x5905ff){try{if(this[_0x8e6b('0x5e')](_0x5905ff)){if(this['queueReports'][_0x5905ff[_0x8e6b('0x69')]]){var _0x2f59f2=_[_0x8e6b('0x71')](this[_0x8e6b('0xe')][_0x5905ff['uniqueid']]);_0x2f59f2['queuecallercomplete']=![];_0x2f59f2['queuecallercompleteAt']=null;_0x2f59f2[_0x8e6b('0x72')]=_0x5905ff[_0x8e6b('0x72')];_0x2f59f2[_0x8e6b('0x73')]=_0x5905ff[_0x8e6b('0x73')];_0x2f59f2['queuecallerabandon']=!![];_0x2f59f2['queuecallerabandonAt']=moment()[_0x8e6b('0x43')]('YYYY-MM-DD\x20HH:mm:ss');_0x2f59f2[_0x8e6b('0x74')]=_0x8e6b('0x75');_0x2f59f2['lastAssignedTo']=null;this[_0x8e6b('0x31')][_0x5905ff[_0x8e6b('0x69')]]=_0x2f59f2;this[_0x8e6b('0x40')](_0x2f59f2);}}}catch(_0x5c76ad){logger[_0x8e6b('0x3a')](_0x8e6b('0x76'),util['inspect'](_0x5c76ad,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x1c')]=function(_0x3e3875){try{if(this[_0x8e6b('0x5e')](_0x3e3875)){if(this[_0x8e6b('0xe')][_0x3e3875[_0x8e6b('0x69')]]){var _0x2d7da6=_[_0x8e6b('0x71')](this[_0x8e6b('0xe')][_0x3e3875[_0x8e6b('0x69')]]);_0x2d7da6[_0x8e6b('0x77')]=moment()['format'](_0x8e6b('0x6b'));_0x2d7da6['connectedlinenum']=_0x3e3875[_0x8e6b('0x78')];_0x2d7da6['connectedlinename']=_0x3e3875[_0x8e6b('0x79')];this[_0x8e6b('0x31')][_0x3e3875[_0x8e6b('0x69')]]=_0x2d7da6;this[_0x8e6b('0x7a')](_0x2d7da6);}}}catch(_0x3f1573){logger['error'](_0x8e6b('0x7b'),util[_0x8e6b('0x41')](_0x3f1573,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0x8e6b('0x1e')]=function(_0x571922){try{if(this[_0x8e6b('0x5e')](_0x571922)){if(this[_0x8e6b('0xe')][_0x571922[_0x8e6b('0x69')]]){var _0xa4d6d=_['last'](this['queueReports'][_0x571922[_0x8e6b('0x69')]]);_0xa4d6d[_0x8e6b('0x7c')]=!![];_0xa4d6d[_0x8e6b('0x74')]='COMPLETEDBYAGENT';}}}catch(_0x538ca1){logger[_0x8e6b('0x3a')](_0x8e6b('0x7d'),util[_0x8e6b('0x41')](_0x538ca1,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x7e')]=function(_0x2ce8d3){try{if(this['isNotNull'](_0x2ce8d3)){if(this[_0x8e6b('0xe')][_0x2ce8d3[_0x8e6b('0x69')]]){var _0x205070=_[_0x8e6b('0x71')](this[_0x8e6b('0xe')][_0x2ce8d3[_0x8e6b('0x69')]]);_0x205070['queuecallerabandon']=![];_0x205070[_0x8e6b('0x7f')]=null;_0x205070[_0x8e6b('0x80')]=!![];_0x205070['lastAssignedTo']=_0x2ce8d3[_0x8e6b('0x81')];_0x205070[_0x8e6b('0x72')]=_0x2ce8d3[_0x8e6b('0x72')];_0x205070[_0x8e6b('0x7c')]=!![];_0x205070[_0x8e6b('0x82')]=![];_0x205070[_0x8e6b('0x83')]=null;if(!_0x205070[_0x8e6b('0x84')]){if(_0x2ce8d3['reason']==_0x8e6b('0x84')){_0x205070['queuecallerexitreason']=_0x8e6b('0x85');}else{if(_['startsWith'](_0x2ce8d3['channel']['toLowerCase'](),_0x8e6b('0x86'))){if(this[_0x8e6b('0xe')][_0x2ce8d3['linkedid']]){var _0x48ea9e=_['last'](this['queueReports'][_0x2ce8d3['linkedid']]);_0x48ea9e[_0x8e6b('0x7c')]=![];_0x48ea9e['queuecallerexit']=!![];_0x48ea9e[_0x8e6b('0x83')]=moment(_0x205070[_0x8e6b('0x6a')])[_0x8e6b('0x87')](_0x2ce8d3['holdtime'],'seconds')['format'](_0x8e6b('0x6b'));_0x48ea9e[_0x8e6b('0x74')]=_0x8e6b('0x88');_0x48ea9e[_0x8e6b('0x84')]=!![];_0x48ea9e['transfertype']=_0x8e6b('0x89');_0x48ea9e[_0x8e6b('0x8a')]=_0x2ce8d3['destexten'];_0x48ea9e[_0x8e6b('0x8b')]=_0x2ce8d3[_0x8e6b('0x69')];var _0x2a9c7b=this[_0x8e6b('0xe')][_0x2ce8d3[_0x8e6b('0x8c')]];this[_0x8e6b('0xe')][_0x2ce8d3[_0x8e6b('0x8c')]]=this[_0x8e6b('0xe')][_0x2ce8d3['uniqueid']];this['queueReports'][_0x2ce8d3[_0x8e6b('0x69')]]=_0x2a9c7b;}}else{_0x205070[_0x8e6b('0x74')]=_0x8e6b('0x8d')+_0x2ce8d3['reason']['toUpperCase']();}}}this[_0x8e6b('0x31')][_0x2ce8d3['uniqueid']]=_0x205070;this[_0x8e6b('0x40')](_0x205070);}}}catch(_0xf4f250){logger['error'](_0x8e6b('0x8e'),util[_0x8e6b('0x41')](_0xf4f250,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x20')]=function(_0x143a72){try{if(this[_0x8e6b('0x5e')](_0x143a72)){this[_0x8e6b('0x8f')](_0x143a72[_0x8e6b('0x69')],_[_0x8e6b('0x6f')](_0x143a72[_0x8e6b('0x90')])[0x0],_0x143a72['value']);if(this[_0x8e6b('0xe')][_0x143a72['uniqueid']]){var _0x21cb54=_['last'](this[_0x8e6b('0xe')][_0x143a72[_0x8e6b('0x69')]]);if(_0x21cb54){if(this[_0x8e6b('0x5e')](_0x143a72['variable'])&&this[_0x8e6b('0x5e')](_0x143a72[_0x8e6b('0x90')][_0x8e6b('0x91')])){switch(_0x143a72[_0x8e6b('0x92')]){case _0x8e6b('0x93'):_0x21cb54[_0x8e6b('0x82')]=![];_0x21cb54[_0x8e6b('0x83')]=null;break;default:_0x21cb54[_0x8e6b('0x82')]=!![];_0x21cb54[_0x8e6b('0x83')]=moment()[_0x8e6b('0x43')](_0x8e6b('0x6b'));_0x21cb54[_0x8e6b('0x77')]=moment()[_0x8e6b('0x43')]('YYYY-MM-DD\x20HH:mm:ss');}_0x21cb54['queuecallerabandon']=![];_0x21cb54[_0x8e6b('0x7f')]=null;_0x21cb54[_0x8e6b('0x74')]=_0x143a72[_0x8e6b('0x92')];this[_0x8e6b('0x31')][_0x143a72['uniqueid']]=_0x21cb54;this[_0x8e6b('0x40')](_0x21cb54);}else if(this[_0x8e6b('0x5e')](_0x143a72[_0x8e6b('0x90')])&&this[_0x8e6b('0x5e')](_0x143a72[_0x8e6b('0x90')]['queueposition'])){if(!_0x21cb54['queuecallerabandon']){_0x21cb54[_0x8e6b('0x82')]=!![];_0x21cb54[_0x8e6b('0x83')]=moment()[_0x8e6b('0x43')]('YYYY-MM-DD\x20HH:mm:ss');_0x21cb54[_0x8e6b('0x74')]=_0x8e6b('0x94');_0x21cb54[_0x8e6b('0x77')]=moment()[_0x8e6b('0x43')](_0x8e6b('0x6b'));this[_0x8e6b('0x31')][_0x143a72[_0x8e6b('0x69')]]=_0x21cb54;}}_0x21cb54[_0x8e6b('0x13')]=this[_0x8e6b('0x13')][_0x143a72[_0x8e6b('0x69')]];}}}}catch(_0x4c8eb5){logger['error']('[syncVarSet][VoiceQueueReport]',util[_0x8e6b('0x41')](_0x4c8eb5,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x8e6b('0xa')]['addVariable']=function(_0x574f8d,_0x288d03,_0x67ed65){var _0x592e37=[_0x8e6b('0x95'),'rtpaudioqosbridged',_0x8e6b('0x96'),'rtpaudioqosjitterbridged',_0x8e6b('0x97'),_0x8e6b('0x98'),_0x8e6b('0x99'),_0x8e6b('0x9a'),_0x8e6b('0x9b'),_0x8e6b('0x9c'),_0x8e6b('0x9d'),_0x8e6b('0x9e'),_0x8e6b('0x9f'),_0x8e6b('0xa0'),'memberinterface',_0x8e6b('0xa1'),_0x8e6b('0x81'),_0x8e6b('0xa2'),_0x8e6b('0xa3')];if(!_['isNil'](_0x288d03)&&!_['includes'](_0x592e37,_0x288d03)){if(_['isUndefined'](this[_0x8e6b('0x13')][_0x574f8d])){this[_0x8e6b('0x13')][_0x574f8d]={};}this[_0x8e6b('0x13')][_0x574f8d][_0x288d03]=_0x67ed65;}};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x21')]=function(_0x866dcf){try{if(this[_0x8e6b('0x5e')](_0x866dcf)){if(this['queueReports'][_0x866dcf['uniqueid']]){for(var _0xb8d1bd=0x0,_0x1e11d2={};_0xb8d1bd<this['queueReports'][_0x866dcf[_0x8e6b('0x69')]][_0x8e6b('0xa4')];_0xb8d1bd+=0x1){_0x1e11d2=this[_0x8e6b('0xe')][_0x866dcf['uniqueid']][_0xb8d1bd];if(this['voiceQueues'][_0x1e11d2['queue']]){if(_0x1e11d2[_0x8e6b('0x82')]){this[_0x8e6b('0x10')][_0x1e11d2[_0x8e6b('0x5f')]][_0x8e6b('0x52')]+=0x1;}if(_0x1e11d2[_0x8e6b('0x19')]){this[_0x8e6b('0x10')][_0x1e11d2['queue']][_0x8e6b('0x53')]+=0x1;}this[_0x8e6b('0x10')][_0x1e11d2[_0x8e6b('0x5f')]][_0x8e6b('0x50')]+=moment(_0x1e11d2[_0x8e6b('0x77')])[_0x8e6b('0xa5')](_0x1e11d2[_0x8e6b('0x6a')],_0x8e6b('0xa6'))||0x0;if(_0xb8d1bd===this[_0x8e6b('0xe')][_0x866dcf[_0x8e6b('0x69')]][_0x8e6b('0xa4')]-0x1){this['voiceQueues'][_0x1e11d2['queue']][_0x8e6b('0x4f')]+=moment()[_0x8e6b('0xa7')](0x0)[_0x8e6b('0xa5')](_0x1e11d2[_0x8e6b('0x6a')],'seconds');this[_0x8e6b('0x10')][_0x1e11d2['queue']]['total']+=0x1;if(_0x1e11d2['queuecallercomplete']){this['voiceQueues'][_0x1e11d2['queue']][_0x8e6b('0x4b')]+=0x1;this['voiceQueues'][_0x1e11d2[_0x8e6b('0x5f')]][_0x8e6b('0x4e')]+=moment()[_0x8e6b('0xa7')](0x0)[_0x8e6b('0xa5')](_0x1e11d2['queuecallerleaveAt'],'seconds');_0x1e11d2['queuecallercompleteAt']=moment()[_0x8e6b('0x43')](_0x8e6b('0x6b'));_0x1e11d2[_0x8e6b('0x82')]=![];_0x1e11d2[_0x8e6b('0x83')]=null;}if(_0x1e11d2['queuecallerexit']){_0x1e11d2['lastevent']=_0x8e6b('0x52');ami[_0x8e6b('0x42')](_0x8e6b('0xa8'),_0x1e11d2);}if(_0x1e11d2[_0x8e6b('0x19')]){_0x1e11d2[_0x8e6b('0xa9')]=_0x8e6b('0x53');ami['emit'](_0x8e6b('0xaa'),_0x1e11d2);}}else{this['voiceQueues'][_0x1e11d2[_0x8e6b('0x5f')]][_0x8e6b('0x4f')]+=this[_0x8e6b('0x10')][_0x1e11d2[_0x8e6b('0x5f')]][_0x8e6b('0x50')];}this[_0x8e6b('0x31')][_0x866dcf[_0x8e6b('0x69')]]=_0x1e11d2;this[_0x8e6b('0x40')](_0x1e11d2);this['emitVoiceQueueSummary'](this[_0x8e6b('0x10')][_0x1e11d2[_0x8e6b('0x5f')]]);}}ami['emit'](_0x8e6b('0xab'),this[_0x8e6b('0xe')][_0x866dcf[_0x8e6b('0x69')]]);delete this[_0x8e6b('0xe')][_0x866dcf[_0x8e6b('0x69')]];delete this[_0x8e6b('0x31')][_0x866dcf[_0x8e6b('0x69')]];}if(this[_0x8e6b('0x13')][_0x866dcf[_0x8e6b('0x69')]]){delete this['variables'][_0x866dcf[_0x8e6b('0x69')]];}}}catch(_0x4d952e){logger[_0x8e6b('0x3a')](_0x8e6b('0xac'),util[_0x8e6b('0x41')](_0x4d952e,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0xad')]=function(_0x51dc16){try{if(this[_0x8e6b('0x5e')](_0x51dc16)){var _0x1e8a69;if(this['queueReports'][_0x51dc16[_0x8e6b('0xae')]]){_0x1e8a69=_[_0x8e6b('0x71')](this['queueReports'][_0x51dc16[_0x8e6b('0xae')]]);_0x1e8a69['transferexten']=_0x51dc16[_0x8e6b('0xaf')];_0x1e8a69[_0x8e6b('0x8b')]=_0x51dc16['secondtransfereruniqueid'];_0x1e8a69[_0x8e6b('0x74')]=_0x8e6b('0xb0');_0x1e8a69[_0x8e6b('0x84')]=!![];_0x1e8a69[_0x8e6b('0xb1')]=_0x8e6b('0xb2');if(this[_0x8e6b('0xe')][_0x51dc16[_0x8e6b('0xb3')]]){var _0x25087d=this['queueReports'][_0x51dc16[_0x8e6b('0xb3')]];this[_0x8e6b('0xe')][_0x51dc16['secondtransfereruniqueid']]=this[_0x8e6b('0xe')][_0x51dc16[_0x8e6b('0xae')]];this[_0x8e6b('0xe')][_0x51dc16[_0x8e6b('0xae')]]=_0x25087d;var _0x38791a=_[_0x8e6b('0x71')](this['queueReports'][_0x51dc16[_0x8e6b('0xae')]]);_0x38791a['switch']=!![];}}else if(this[_0x8e6b('0xe')][_0x51dc16['transfertargetuniqueid']]){_0x1e8a69=_['last'](this[_0x8e6b('0xe')][_0x51dc16[_0x8e6b('0xb4')]]);_0x1e8a69[_0x8e6b('0x8a')]=_0x51dc16[_0x8e6b('0xb5')];_0x1e8a69[_0x8e6b('0x8b')]=_0x51dc16[_0x8e6b('0xb6')];_0x1e8a69[_0x8e6b('0x74')]='ATTENDEDTRANSFER';_0x1e8a69['transfer']=!![];_0x1e8a69['transfertype']='ATTENDED';if(this[_0x8e6b('0xe')][_0x51dc16['origtransfereruniqueid']]){var _0x25087d=this[_0x8e6b('0xe')][_0x51dc16[_0x8e6b('0xb6')]];this[_0x8e6b('0xe')][_0x51dc16['origtransfereruniqueid']]=this[_0x8e6b('0xe')][_0x51dc16['transfertargetuniqueid']];this['queueReports'][_0x51dc16['transfertargetuniqueid']]=_0x25087d;var _0x38791a=_[_0x8e6b('0x71')](this['queueReports'][_0x51dc16['transfertargetuniqueid']]);_0x38791a[_0x8e6b('0x32')]=!![];}}}}catch(_0x4e507a){logger[_0x8e6b('0x3a')](_0x8e6b('0xb7'),util[_0x8e6b('0x41')](_0x4e507a,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0xb8')]=function(_0xf4f9c9){try{if(this[_0x8e6b('0x5e')](_0xf4f9c9)){if(this['queueReports'][_0xf4f9c9['transfereeuniqueid']]){var _0x2327ef=_['last'](this[_0x8e6b('0xe')][_0xf4f9c9[_0x8e6b('0xae')]]);_0x2327ef[_0x8e6b('0x74')]='BLINDTRANSFER';_0x2327ef[_0x8e6b('0x84')]=!![];_0x2327ef['transfertype']=_0x8e6b('0xb9');_0x2327ef[_0x8e6b('0x8a')]=_0xf4f9c9[_0x8e6b('0xba')];_0x2327ef[_0x8e6b('0x8b')]=_0xf4f9c9['transfereeuniqueid'];this[_0x8e6b('0x21')]({'event':_0x8e6b('0xbb'),'uniqueid':_0xf4f9c9[_0x8e6b('0xae')],'context':_0xf4f9c9['context'],'channel':_0xf4f9c9[_0x8e6b('0xbc')]});}}}catch(_0x58008b){logger[_0x8e6b('0x3a')]('[syncBlindTransfer][VoiceQueueReport]',util[_0x8e6b('0x41')](_0x58008b,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x24')]=function(_0x3f05b7){try{if(this[_0x8e6b('0x5e')](_0x3f05b7)){if(this['queueReports'][_0x3f05b7[_0x8e6b('0x69')]]){var _0x3024be=_[_0x8e6b('0x71')](this[_0x8e6b('0xe')][_0x3f05b7['uniqueid']]);if(!_[_0x8e6b('0x33')](_0x3024be[_0x8e6b('0x77')])){_0x3024be[_0x8e6b('0xbd')]=moment()[_0x8e6b('0x43')](_0x8e6b('0x6b'));}}}}catch(_0x348798){logger[_0x8e6b('0x3a')]('[syncMusicOnHoldStart][VoiceQueueReport]',util['inspect'](_0x348798,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x8e6b('0xa')][_0x8e6b('0x26')]=function(_0x4d5efe){try{if(this[_0x8e6b('0x5e')](_0x4d5efe)){if(this[_0x8e6b('0xe')][_0x4d5efe[_0x8e6b('0x69')]]){var _0x47a977=_[_0x8e6b('0x71')](this[_0x8e6b('0xe')][_0x4d5efe[_0x8e6b('0x69')]]);if(!_['isNil'](_0x47a977[_0x8e6b('0xbd')])){_0x47a977[_0x8e6b('0xbe')]+=moment()['milliseconds'](0x0)['diff'](_0x47a977['mohstarttime'],'seconds');delete _0x47a977[_0x8e6b('0xbd')];}}}}catch(_0x1c784d){logger[_0x8e6b('0x3a')]('[syncMusicOnHoldStop][VoiceQueueReport]',util[_0x8e6b('0x41')](_0x1c784d,{'showHidden':![],'depth':null}));}};module[_0x8e6b('0xbf')]=VoiceQueueReport;
\ No newline at end of file
+var _0x47b8=['lastevent','custom:queuecallerabandon','emitVoiceQueueSummary','custom:voiceQueueReport','[syncHangup][VoiceQueueReport]','transfereeuniqueid','secondtransfererexten','transferuniqueid','secondtransfereruniqueid','ATTENDED','transfertargetuniqueid','origtransfereruniqueid','ATTENDEDTRANSFER','[syncAttendedTransfer][VoiceQueueReport]','BLINDTRANSFER','BLIND','extension','BlindTransfer','context','transfererchannel','[syncBlindTransfer][VoiceQueueReport]','mohstarttime','[syncMusicOnHoldStart][VoiceQueueReport]','syncMusicOnHoldStop','mohtime','[syncMusicOnHoldStop][VoiceQueueReport]','exports','lodash','moment','bluebird','util','md5','ioredis','../../../config/logger','ami','../model/queueReport','redis','defaults','socket.io-emitter','prototype','tail','sequence','queueReports','agents','channels','queueChannels','voiceQueues','flagQueueSummary','campaigns','variables','queuesummary','bind','queuesummarycomplete','syncQueueSummaryComplete','syncQueueCallerJoin','queuecallerabandon','syncQueueCallerAbandon','queuecallerleave','syncQueueCallerLeave','agentcomplete','syncAgentConnect','varset','syncVarSet','hangup','fullybooted','syncFullyBooted','syncMusicOnHoldStart','musiconholdstop','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','loopQueueSummary','loopQueueShow','isUndefined','isEmpty','hasOwnProperty','originated','pTalking','waiting','queueStatusComplete','unlockRR','switch','enqueue','isNil','Action','status','channel','message','No\x20such\x20channel','error','[voiceQueueReport][checkChannel]','[voiceQueueReport][checkQueueReport]','[voiceQueueReport][checkVariables]','[FullyBooted]\x20clear\x20realtime','clearQueueReport','emit','emitVoiceQueueChannelSave','name','voice_queue_channel:save','format','voice:queue:%s','voice_queue_channel:remove','type','inbound','strategy','answered','available','loggedIn','sumBillable','sumDuration','sumHoldTime','talking','total','abandoned','Trunk','callerid','Interval','stringify','isNotNull','clearZombieChannels','queues','catch','[queues]','[queuesummary]','syncQueueSummary','queue','countBy','callers','toNumber','loggedin','custom:queuesummary','[syncQueueSummary][VoiceQueueReport]','inspect','syncNewExten','uniqueid','YYYY-MM-DD\x20HH:mm:ss','position','pick','keys','push','queuecallercomplete','queuecallercompleteAt','holdtime','originalposition','queuecallerabandonAt','queuecallerexitreason','ABANDONED','[syncQueueCallerAbandon][VoiceQueueReport]','last','queuecallerleaveAt','connectedlinenum','connectedlinename','[syncQueueCallerLeave][VoiceQueueReport]','COMPLETEDBYAGENT','[syncAgentConnect][VoiceQueueReport]','syncAgentComplete','lastAssignedTo','membername','queuecallerexit','queuecallerexitAt','transfer','reason','COMPLETED','startsWith','toLowerCase','local/','linkedid','queuecallerjoinAt','seconds','transfertype','FORWARD','transferexten','destexten','COMPLETEDBY','toUpperCase','emitVoiceQueueChannelRemove','[syncAgentComplete][VoiceQueueReport]','addVariable','variable','value','CONTINUE','queueposition','[syncVarSet][VoiceQueueReport]','rtpaudioqos','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','bridgepeer','bridgepvtcallid','memberdynamic','memberinterface','memberlastcall','memberpenalty','memberrealtime','syncHangup','length','unmanaged','diff','milliseconds'];(function(_0x319a35,_0xf4eacc){var _0x1c1c08=function(_0x1585db){while(--_0x1585db){_0x319a35['push'](_0x319a35['shift']());}};_0x1c1c08(++_0xf4eacc);}(_0x47b8,0xe6));var _0x847b=function(_0x5c773c,_0x402040){_0x5c773c=_0x5c773c-0x0;var _0x49b0d2=_0x47b8[_0x5c773c];return _0x49b0d2;};'use strict';var _=require(_0x847b('0x0'));var moment=require(_0x847b('0x1'));var BPromise=require(_0x847b('0x2'));var util=require(_0x847b('0x3'));var md5=require(_0x847b('0x4'));var Redis=require(_0x847b('0x5'));var config=require('../../../config/environment');var logger=require(_0x847b('0x6'))(_0x847b('0x7'));var ami=require('../ami');var QueueReport=require(_0x847b('0x8'));config[_0x847b('0x9')]=_[_0x847b('0xa')](config[_0x847b('0x9')],{'host':'localhost','port':0x18eb});var io=require(_0x847b('0xb'))(new Redis(config[_0x847b('0x9')]));var Sequence=function(){};Sequence[_0x847b('0xc')]['enqueue']=function(_0x27b6ed){this[_0x847b('0xd')]=this[_0x847b('0xd')]?this[_0x847b('0xd')]['finally'](_0x27b6ed):_0x27b6ed();};function VoiceQueueReport(_0x26862e){this[_0x847b('0xe')]=new Sequence();this[_0x847b('0xf')]={};this[_0x847b('0x10')]=_0x26862e[_0x847b('0x10')];this[_0x847b('0x11')]=_0x26862e[_0x847b('0x12')];this[_0x847b('0x13')]=_0x26862e[_0x847b('0x13')];this[_0x847b('0x14')]=!![];this[_0x847b('0x15')]=_0x26862e[_0x847b('0x15')];this[_0x847b('0x16')]={};ami['on'](_0x847b('0x17'),this['syncQueueSummary'][_0x847b('0x18')](this));ami['on'](_0x847b('0x19'),this[_0x847b('0x1a')][_0x847b('0x18')](this));ami['on']('queuecallerjoin',this[_0x847b('0x1b')][_0x847b('0x18')](this));ami['on'](_0x847b('0x1c'),this[_0x847b('0x1d')][_0x847b('0x18')](this));ami['on'](_0x847b('0x1e'),this[_0x847b('0x1f')][_0x847b('0x18')](this));ami['on'](_0x847b('0x20'),this['syncAgentComplete'][_0x847b('0x18')](this));ami['on']('agentconnect',this[_0x847b('0x21')][_0x847b('0x18')](this));ami['on'](_0x847b('0x22'),this[_0x847b('0x23')][_0x847b('0x18')](this));ami['on'](_0x847b('0x24'),this['syncHangup'][_0x847b('0x18')](this));ami['on'](_0x847b('0x25'),this[_0x847b('0x26')][_0x847b('0x18')](this));ami['on']('musiconholdstart',this[_0x847b('0x27')][_0x847b('0x18')](this));ami['on'](_0x847b('0x28'),this['syncMusicOnHoldStop'][_0x847b('0x18')](this));ami['on'](_0x847b('0x29'),this[_0x847b('0x2a')]['bind'](this));ami['on'](_0x847b('0x2b'),this[_0x847b('0x2c')][_0x847b('0x18')](this));this[_0x847b('0x2d')]();this[_0x847b('0x2e')]();}function isNotNull(_0x4ce76d){return _0x4ce76d!==null&&!_[_0x847b('0x2f')](_0x4ce76d);}function clearChannels(_0x3404fc){if(!_[_0x847b('0x30')](_0x3404fc)){for(var _0x1cf3d3 in _0x3404fc){if(_0x3404fc['hasOwnProperty'](_0x1cf3d3)){delete _0x3404fc[_0x1cf3d3];}}}}function clearCampaigns(_0x8c6dbf){if(!_['isEmpty'](_0x8c6dbf)){for(var _0x23ec9f in _0x8c6dbf){if(_0x8c6dbf[_0x847b('0x31')](_0x23ec9f)){_0x8c6dbf[_0x23ec9f][_0x847b('0x32')]=0x0;}}}}function clearVoiceQueues(_0x7ceb72){if(!_['isEmpty'](_0x7ceb72)){for(var _0x2fce19 in _0x7ceb72){if(_0x7ceb72[_0x847b('0x31')](_0x2fce19)){_0x7ceb72[_0x2fce19]['originated']=0x0;_0x7ceb72[_0x2fce19]['talking']=0x0;_0x7ceb72[_0x2fce19][_0x847b('0x33')]=0x0;_0x7ceb72[_0x2fce19][_0x847b('0x34')]=0x0;_0x7ceb72[_0x2fce19][_0x847b('0x35')]=!![];}}}}function clearAgentBooked(_0x5a34f7){if(!_[_0x847b('0x30')](_0x5a34f7)){for(var _0x244821 in _0x5a34f7){if(_0x5a34f7[_0x847b('0x31')](_0x244821)){_0x5a34f7[_0x244821][_0x847b('0x36')]=!![];}}}}VoiceQueueReport['prototype']['clearZombieChannels']=function(){var _0x4818e1=this;for(var _0x55150a in this[_0x847b('0x11')]){if(this[_0x847b('0x11')][_0x847b('0x31')](_0x55150a)&&!this[_0x847b('0x11')][_0x55150a][_0x847b('0x37')]){this[_0x847b('0xe')][_0x847b('0x38')](function(){if(!_[_0x847b('0x39')](_0x4818e1[_0x847b('0x11')][_0x55150a])){return ami[_0x847b('0x3a')]({'action':_0x847b('0x3b'),'channel':_0x4818e1['channels'][_0x55150a][_0x847b('0x3c')]})['catch'](function(_0x1245da){if(_0x1245da[_0x847b('0x3d')]===_0x847b('0x3e')){setTimeout(function(){if(_0x4818e1['channels'][_0x55150a]){delete _0x4818e1[_0x847b('0x11')][_0x55150a];logger[_0x847b('0x3f')](_0x847b('0x40'),_0x55150a);}if(_0x4818e1[_0x847b('0xf')][_0x55150a]){delete _0x4818e1['queueReports'][_0x55150a];logger[_0x847b('0x3f')](_0x847b('0x41'),_0x55150a);}if(_0x4818e1[_0x847b('0x16')][_0x55150a]){delete _0x4818e1[_0x847b('0x16')][_0x55150a];logger['error'](_0x847b('0x42'),_0x55150a);}},0x1f40);}});}});}}};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x26')]=function(){logger[_0x847b('0x3f')](_0x847b('0x43'));clearChannels(this[_0x847b('0x11')]);this['clearQueueReport'](this['queueReports']);clearAgentBooked(this['agents']);clearVoiceQueues(this[_0x847b('0x13')]);clearCampaigns(this[_0x847b('0x15')]);};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x44')]=function(_0x5efdad){var _0xfdfb66=this;if(!_[_0x847b('0x30')](_0x5efdad)){for(var _0x3d372a in _0x5efdad){if(_0x5efdad[_0x847b('0x31')](_0x3d372a)){_0xfdfb66['emitVoiceQueueChannelRemove'](_0x5efdad[_0x3d372a]);delete _0x5efdad[_0x3d372a];}}}};function loggerCatch(_0x2ab248){return function(_0x3be4a1){logger[_0x847b('0x3f')](_0x2ab248,util['inspect'](_0x3be4a1,{'showHidden':![],'depth':null}));};}VoiceQueueReport[_0x847b('0xc')]['emit']=function(_0x145798,_0x5f59ea,_0x4bfc89){io['to'](_0x145798)[_0x847b('0x45')](_0x5f59ea,_0x4bfc89);};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x46')]=function(_0x28878c){this[_0x847b('0x45')](util['format']('voice:queue:%s',_0x28878c[_0x847b('0x47')]),_0x847b('0x48'),_0x28878c);};VoiceQueueReport[_0x847b('0xc')]['emitVoiceQueueChannelRemove']=function(_0x558ff2){this[_0x847b('0x45')](util[_0x847b('0x49')](_0x847b('0x4a'),_0x558ff2[_0x847b('0x47')]),_0x847b('0x4b'),_0x558ff2);};VoiceQueueReport[_0x847b('0xc')]['emitVoiceQueueSummary']=function(_0x2f817f){if(_0x2f817f[_0x847b('0x4c')]===_0x847b('0x4d')){var _0x10ccb3={'id':_0x2f817f['id'],'name':_0x2f817f[_0x847b('0x47')],'strategy':_0x2f817f[_0x847b('0x4e')],'answered':_0x2f817f[_0x847b('0x4f')],'available':_0x2f817f[_0x847b('0x50')],'loggedIn':_0x2f817f[_0x847b('0x51')],'pTalking':_0x2f817f[_0x847b('0x33')],'sumBillable':_0x2f817f[_0x847b('0x52')],'sumDuration':_0x2f817f[_0x847b('0x53')],'sumHoldTime':_0x2f817f[_0x847b('0x54')]||0x0,'talking':_0x2f817f[_0x847b('0x55')],'total':_0x2f817f[_0x847b('0x56')],'type':_0x2f817f[_0x847b('0x4c')],'unmanaged':_0x2f817f['unmanaged'],'abandoned':_0x2f817f[_0x847b('0x57')],'waiting':_0x2f817f[_0x847b('0x34')]};if(_0x2f817f[_0x847b('0x58')]){_0x10ccb3[_0x847b('0x58')]={'id':_0x2f817f['Trunk']['id'],'name':_0x2f817f[_0x847b('0x58')][_0x847b('0x47')],'active':_0x2f817f[_0x847b('0x58')]['active'],'callerid':_0x2f817f['Trunk'][_0x847b('0x59')]};}if(_0x2f817f[_0x847b('0x5a')]){_0x10ccb3['Interval']={'id':_0x2f817f[_0x847b('0x5a')]['id'],'name':_0x2f817f[_0x847b('0x5a')][_0x847b('0x47')]};}var _0xa4c7=md5(JSON[_0x847b('0x5b')](_0x10ccb3));if(_0x2f817f[_0x847b('0x4')]!==_0xa4c7){_0x2f817f[_0x847b('0x4')]=_0xa4c7;this[_0x847b('0x45')](util[_0x847b('0x49')](_0x847b('0x4a'),_0x10ccb3[_0x847b('0x47')]),'voice_queue:save',_0x10ccb3);}}};VoiceQueueReport['prototype'][_0x847b('0x5c')]=function(_0x354f29){return _0x354f29!==null&&!_[_0x847b('0x2f')](_0x354f29);};VoiceQueueReport['prototype'][_0x847b('0x2e')]=function(){var _0x53a663=this;setInterval(function(){_0x53a663[_0x847b('0x5d')]();ami[_0x847b('0x3a')]({'action':_0x847b('0x5e')})[_0x847b('0x5f')](loggerCatch(_0x847b('0x60')));},0x2710);};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x2d')]=function(){var _0x14d7ea=this;setInterval(function(){if(_0x14d7ea['flagQueueSummary']){return ami['Action']({'action':'queuesummary'})['then'](function(_0x5b09fc){_0x14d7ea['flagQueueSummary']=![];})[_0x847b('0x5f')](loggerCatch(_0x847b('0x61')));}},0x3e8);};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x62')]=function(_0x140961){try{if(this[_0x847b('0x5c')](_0x140961)&&this[_0x847b('0x5c')](_0x140961['queue'])){if(this[_0x847b('0x13')][_0x140961[_0x847b('0x63')]]){var _0x5ade63=_[_0x847b('0x64')](this[_0x847b('0x11')],'queue')[_0x140961[_0x847b('0x63')]]||0x0;var _0x3dab73=_0x5ade63-_0x140961[_0x847b('0x65')];if(this['voiceQueues'][_0x140961['queue']][_0x847b('0x34')]!==_['toNumber'](_0x140961['callers'])||this[_0x847b('0x13')][_0x140961[_0x847b('0x63')]]['loggedIn']!==_[_0x847b('0x66')](_0x140961[_0x847b('0x67')])||this[_0x847b('0x13')][_0x140961['queue']][_0x847b('0x50')]!==_[_0x847b('0x66')](_0x140961[_0x847b('0x50')])||this['voiceQueues'][_0x140961[_0x847b('0x63')]][_0x847b('0x55')]!==_0x3dab73){this[_0x847b('0x13')][_0x140961[_0x847b('0x63')]]['waiting']=_['toNumber'](_0x140961['callers']);this[_0x847b('0x13')][_0x140961[_0x847b('0x63')]][_0x847b('0x51')]=_['toNumber'](_0x140961[_0x847b('0x67')]);this['voiceQueues'][_0x140961[_0x847b('0x63')]]['available']=_[_0x847b('0x66')](_0x140961[_0x847b('0x50')]);this[_0x847b('0x13')][_0x140961[_0x847b('0x63')]][_0x847b('0x55')]=_0x3dab73>0x0?_0x3dab73:0x0;this[_0x847b('0x13')][_0x140961['queue']][_0x847b('0x55')]=this[_0x847b('0x13')][_0x140961['queue']][_0x847b('0x55')]>_[_0x847b('0x66')](_0x140961[_0x847b('0x67')])?_[_0x847b('0x66')](_0x140961[_0x847b('0x67')]):this[_0x847b('0x13')][_0x140961[_0x847b('0x63')]][_0x847b('0x55')];this['emitVoiceQueueSummary'](this[_0x847b('0x13')][_0x140961['queue']]);}ami[_0x847b('0x45')](_0x847b('0x68'),this[_0x847b('0x13')][_0x140961['queue']]);}}}catch(_0x7a4269){logger[_0x847b('0x3f')](_0x847b('0x69'),util[_0x847b('0x6a')](_0x7a4269,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x1a')]=function(_0x5b9184){this[_0x847b('0x14')]=!![];};VoiceQueueReport['prototype'][_0x847b('0x6b')]=function(_0x557094){};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x1b')]=function(_0x158a6a){try{if(this['isNotNull'](_0x158a6a)){if(_[_0x847b('0x2f')](this[_0x847b('0xf')][_0x158a6a[_0x847b('0x6c')]])){this[_0x847b('0xf')][_0x158a6a['uniqueid']]=[];this[_0x847b('0x11')][_0x158a6a[_0x847b('0x6c')]]={};}var _0x296184=new QueueReport();_0x296184[_0x847b('0x47')]=_0x158a6a[_0x847b('0x63')];_0x296184[_0x847b('0x4c')]=this[_0x847b('0x13')][_0x296184[_0x847b('0x47')]]&&this[_0x847b('0x13')][_0x296184[_0x847b('0x47')]]['type']?this[_0x847b('0x13')][_0x296184[_0x847b('0x47')]]['type']||'inbound':_0x847b('0x4d');_0x296184['queue']=_0x158a6a[_0x847b('0x63')];_0x296184['queuecallerjoinAt']=moment()['format'](_0x847b('0x6d'));_0x296184[_0x847b('0x6e')]=_0x158a6a[_0x847b('0x6e')];_0x296184['count']=_0x158a6a['count'];_['merge'](_0x296184,_[_0x847b('0x6f')](_0x158a6a,_[_0x847b('0x70')](_0x296184)));this['queueReports'][_0x158a6a[_0x847b('0x6c')]][_0x847b('0x71')](_0x296184);this[_0x847b('0x11')][_0x158a6a['uniqueid']]=_0x296184;this[_0x847b('0x46')](_0x296184);}}catch(_0x121cf7){logger[_0x847b('0x3f')]('[syncQueueCallerJoin][VoiceQueueReport]',util[_0x847b('0x6a')](_0x121cf7,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x847b('0xc')]['syncQueueCallerAbandon']=function(_0x150d5c){try{if(this[_0x847b('0x5c')](_0x150d5c)){if(this[_0x847b('0xf')][_0x150d5c[_0x847b('0x6c')]]){var _0xc6e42=_['last'](this[_0x847b('0xf')][_0x150d5c['uniqueid']]);_0xc6e42[_0x847b('0x72')]=![];_0xc6e42[_0x847b('0x73')]=null;_0xc6e42[_0x847b('0x74')]=_0x150d5c[_0x847b('0x74')];_0xc6e42['originalposition']=_0x150d5c[_0x847b('0x75')];_0xc6e42['queuecallerabandon']=!![];_0xc6e42[_0x847b('0x76')]=moment()['format'](_0x847b('0x6d'));_0xc6e42[_0x847b('0x77')]=_0x847b('0x78');_0xc6e42['lastAssignedTo']=null;this[_0x847b('0x11')][_0x150d5c[_0x847b('0x6c')]]=_0xc6e42;this['emitVoiceQueueChannelRemove'](_0xc6e42);}}}catch(_0x1fece0){logger[_0x847b('0x3f')](_0x847b('0x79'),util['inspect'](_0x1fece0,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x1f')]=function(_0x4032d6){try{if(this[_0x847b('0x5c')](_0x4032d6)){if(this[_0x847b('0xf')][_0x4032d6[_0x847b('0x6c')]]){var _0x25a93a=_[_0x847b('0x7a')](this['queueReports'][_0x4032d6['uniqueid']]);_0x25a93a[_0x847b('0x7b')]=moment()[_0x847b('0x49')](_0x847b('0x6d'));_0x25a93a[_0x847b('0x7c')]=_0x4032d6[_0x847b('0x7c')];_0x25a93a[_0x847b('0x7d')]=_0x4032d6[_0x847b('0x7d')];this[_0x847b('0x11')][_0x4032d6[_0x847b('0x6c')]]=_0x25a93a;this[_0x847b('0x46')](_0x25a93a);}}}catch(_0x5ea799){logger['error'](_0x847b('0x7e'),util['inspect'](_0x5ea799,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x21')]=function(_0x31c002){try{if(this['isNotNull'](_0x31c002)){if(this[_0x847b('0xf')][_0x31c002[_0x847b('0x6c')]]){var _0xe0eac4=_[_0x847b('0x7a')](this[_0x847b('0xf')][_0x31c002[_0x847b('0x6c')]]);_0xe0eac4['queuecallercomplete']=!![];_0xe0eac4[_0x847b('0x77')]=_0x847b('0x7f');}}}catch(_0x4e8de7){logger[_0x847b('0x3f')](_0x847b('0x80'),util[_0x847b('0x6a')](_0x4e8de7,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0x847b('0x81')]=function(_0x15ae25){try{if(this[_0x847b('0x5c')](_0x15ae25)){if(this[_0x847b('0xf')][_0x15ae25['uniqueid']]){var _0x3abeab=_[_0x847b('0x7a')](this[_0x847b('0xf')][_0x15ae25[_0x847b('0x6c')]]);_0x3abeab[_0x847b('0x1c')]=![];_0x3abeab[_0x847b('0x76')]=null;_0x3abeab['assigned']=!![];_0x3abeab[_0x847b('0x82')]=_0x15ae25[_0x847b('0x83')];_0x3abeab[_0x847b('0x74')]=_0x15ae25[_0x847b('0x74')];_0x3abeab[_0x847b('0x72')]=!![];_0x3abeab[_0x847b('0x84')]=![];_0x3abeab[_0x847b('0x85')]=null;if(!_0x3abeab[_0x847b('0x86')]){if(_0x15ae25[_0x847b('0x87')]=='transfer'){_0x3abeab[_0x847b('0x77')]=_0x847b('0x88');}else{if(_[_0x847b('0x89')](_0x15ae25[_0x847b('0x3c')][_0x847b('0x8a')](),_0x847b('0x8b'))){if(this[_0x847b('0xf')][_0x15ae25[_0x847b('0x8c')]]){var _0x5ecc33=_['last'](this[_0x847b('0xf')][_0x15ae25[_0x847b('0x8c')]]);_0x5ecc33['queuecallercomplete']=![];_0x5ecc33[_0x847b('0x84')]=!![];_0x5ecc33[_0x847b('0x85')]=moment(_0x3abeab[_0x847b('0x8d')])['add'](_0x15ae25['holdtime'],_0x847b('0x8e'))[_0x847b('0x49')]('YYYY-MM-DD\x20HH:mm:ss');_0x5ecc33[_0x847b('0x77')]='FORWARDTRANSFER';_0x5ecc33['transfer']=!![];_0x5ecc33[_0x847b('0x8f')]=_0x847b('0x90');_0x5ecc33[_0x847b('0x91')]=_0x15ae25[_0x847b('0x92')];_0x5ecc33['transferuniqueid']=_0x15ae25[_0x847b('0x6c')];var _0x37fd55=this['queueReports'][_0x15ae25['linkedid']];this[_0x847b('0xf')][_0x15ae25['linkedid']]=this[_0x847b('0xf')][_0x15ae25[_0x847b('0x6c')]];this[_0x847b('0xf')][_0x15ae25[_0x847b('0x6c')]]=_0x37fd55;}}else{_0x3abeab[_0x847b('0x77')]=_0x847b('0x93')+_0x15ae25['reason'][_0x847b('0x94')]();}}}this['channels'][_0x15ae25[_0x847b('0x6c')]]=_0x3abeab;this[_0x847b('0x95')](_0x3abeab);}}}catch(_0x110ea9){logger['error'](_0x847b('0x96'),util[_0x847b('0x6a')](_0x110ea9,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0x847b('0x23')]=function(_0x9aa1dd){try{if(this[_0x847b('0x5c')](_0x9aa1dd)){this[_0x847b('0x97')](_0x9aa1dd[_0x847b('0x6c')],_[_0x847b('0x70')](_0x9aa1dd[_0x847b('0x98')])[0x0],_0x9aa1dd[_0x847b('0x99')]);if(this[_0x847b('0xf')][_0x9aa1dd[_0x847b('0x6c')]]){var _0x381c69=_[_0x847b('0x7a')](this['queueReports'][_0x9aa1dd['uniqueid']]);if(_0x381c69){if(this['isNotNull'](_0x9aa1dd[_0x847b('0x98')])&&this[_0x847b('0x5c')](_0x9aa1dd[_0x847b('0x98')]['queuestatus'])){switch(_0x9aa1dd[_0x847b('0x99')]){case _0x847b('0x9a'):_0x381c69[_0x847b('0x84')]=![];_0x381c69[_0x847b('0x85')]=null;break;default:_0x381c69['queuecallerexit']=!![];_0x381c69[_0x847b('0x85')]=moment()[_0x847b('0x49')](_0x847b('0x6d'));_0x381c69[_0x847b('0x7b')]=moment()[_0x847b('0x49')]('YYYY-MM-DD\x20HH:mm:ss');}_0x381c69[_0x847b('0x1c')]=![];_0x381c69[_0x847b('0x76')]=null;_0x381c69['queuecallerexitreason']=_0x9aa1dd[_0x847b('0x99')];this[_0x847b('0x11')][_0x9aa1dd[_0x847b('0x6c')]]=_0x381c69;this['emitVoiceQueueChannelRemove'](_0x381c69);}else if(this[_0x847b('0x5c')](_0x9aa1dd['variable'])&&this['isNotNull'](_0x9aa1dd[_0x847b('0x98')][_0x847b('0x9b')])){if(!_0x381c69['queuecallerabandon']){_0x381c69[_0x847b('0x84')]=!![];_0x381c69[_0x847b('0x85')]=moment()[_0x847b('0x49')](_0x847b('0x6d'));_0x381c69[_0x847b('0x77')]='EXITWITHKEY';_0x381c69['queuecallerleaveAt']=moment()[_0x847b('0x49')]('YYYY-MM-DD\x20HH:mm:ss');this[_0x847b('0x11')][_0x9aa1dd[_0x847b('0x6c')]]=_0x381c69;}}_0x381c69[_0x847b('0x16')]=this[_0x847b('0x16')][_0x9aa1dd[_0x847b('0x6c')]];}}}}catch(_0x57a5bf){logger[_0x847b('0x3f')](_0x847b('0x9c'),util[_0x847b('0x6a')](_0x57a5bf,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x97')]=function(_0x20ad05,_0x1e8c5f,_0x4eef25){var _0x462c6e=[_0x847b('0x9d'),'rtpaudioqosbridged',_0x847b('0x9e'),_0x847b('0x9f'),_0x847b('0xa0'),'rtpaudioqoslossbridged',_0x847b('0xa1'),_0x847b('0xa2'),_0x847b('0xa3'),'sipuri',_0x847b('0xa4'),_0x847b('0xa5'),'membercalls',_0x847b('0xa6'),_0x847b('0xa7'),_0x847b('0xa8'),_0x847b('0x83'),_0x847b('0xa9'),_0x847b('0xaa')];if(!_['isNil'](_0x1e8c5f)&&!_['includes'](_0x462c6e,_0x1e8c5f)){if(_[_0x847b('0x2f')](this[_0x847b('0x16')][_0x20ad05])){this['variables'][_0x20ad05]={};}this['variables'][_0x20ad05][_0x1e8c5f]=_0x4eef25;}};VoiceQueueReport[_0x847b('0xc')][_0x847b('0xab')]=function(_0x1637c9){try{if(this[_0x847b('0x5c')](_0x1637c9)){if(this[_0x847b('0xf')][_0x1637c9['uniqueid']]){for(var _0xabb933=0x0,_0x210158={};_0xabb933<this['queueReports'][_0x1637c9[_0x847b('0x6c')]][_0x847b('0xac')];_0xabb933+=0x1){_0x210158=this[_0x847b('0xf')][_0x1637c9[_0x847b('0x6c')]][_0xabb933];if(this['voiceQueues'][_0x210158[_0x847b('0x63')]]){if(_0x210158[_0x847b('0x84')]){this['voiceQueues'][_0x210158['queue']][_0x847b('0xad')]+=0x1;}if(_0x210158[_0x847b('0x1c')]){this[_0x847b('0x13')][_0x210158[_0x847b('0x63')]][_0x847b('0x57')]+=0x1;}this[_0x847b('0x13')][_0x210158['queue']][_0x847b('0x54')]+=moment(_0x210158['queuecallerleaveAt'])[_0x847b('0xae')](_0x210158[_0x847b('0x8d')],_0x847b('0x8e'))||0x0;if(_0xabb933===this['queueReports'][_0x1637c9[_0x847b('0x6c')]][_0x847b('0xac')]-0x1){this[_0x847b('0x13')][_0x210158[_0x847b('0x63')]][_0x847b('0x53')]+=moment()[_0x847b('0xaf')](0x0)['diff'](_0x210158[_0x847b('0x8d')],'seconds');this[_0x847b('0x13')][_0x210158[_0x847b('0x63')]]['total']+=0x1;if(_0x210158[_0x847b('0x72')]){this[_0x847b('0x13')][_0x210158[_0x847b('0x63')]][_0x847b('0x4f')]+=0x1;this['voiceQueues'][_0x210158[_0x847b('0x63')]][_0x847b('0x52')]+=moment()['milliseconds'](0x0)[_0x847b('0xae')](_0x210158[_0x847b('0x7b')],'seconds');_0x210158[_0x847b('0x73')]=moment()[_0x847b('0x49')](_0x847b('0x6d'));_0x210158[_0x847b('0x84')]=![];_0x210158[_0x847b('0x85')]=null;}if(_0x210158[_0x847b('0x84')]){_0x210158[_0x847b('0xb0')]=_0x847b('0xad');ami[_0x847b('0x45')]('custom:queuecallerunmanaged',_0x210158);}if(_0x210158[_0x847b('0x1c')]){_0x210158[_0x847b('0xb0')]=_0x847b('0x57');ami[_0x847b('0x45')](_0x847b('0xb1'),_0x210158);}}else{this[_0x847b('0x13')][_0x210158[_0x847b('0x63')]][_0x847b('0x53')]+=this[_0x847b('0x13')][_0x210158[_0x847b('0x63')]][_0x847b('0x54')];}this[_0x847b('0x11')][_0x1637c9[_0x847b('0x6c')]]=_0x210158;this['emitVoiceQueueChannelRemove'](_0x210158);this[_0x847b('0xb2')](this[_0x847b('0x13')][_0x210158[_0x847b('0x63')]]);}}ami[_0x847b('0x45')](_0x847b('0xb3'),this[_0x847b('0xf')][_0x1637c9['uniqueid']]);delete this[_0x847b('0xf')][_0x1637c9[_0x847b('0x6c')]];delete this['channels'][_0x1637c9[_0x847b('0x6c')]];}if(this[_0x847b('0x16')][_0x1637c9[_0x847b('0x6c')]]){delete this[_0x847b('0x16')][_0x1637c9['uniqueid']];}}}catch(_0x3b3ecb){logger[_0x847b('0x3f')](_0x847b('0xb4'),util[_0x847b('0x6a')](_0x3b3ecb,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x847b('0xc')]['syncAttendedTransfer']=function(_0xca4893){try{if(this[_0x847b('0x5c')](_0xca4893)){var _0xfe8d08;if(this[_0x847b('0xf')][_0xca4893[_0x847b('0xb5')]]){_0xfe8d08=_[_0x847b('0x7a')](this[_0x847b('0xf')][_0xca4893['transfereeuniqueid']]);_0xfe8d08['transferexten']=_0xca4893[_0x847b('0xb6')];_0xfe8d08[_0x847b('0xb7')]=_0xca4893[_0x847b('0xb8')];_0xfe8d08['queuecallerexitreason']='ATTENDEDTRANSFER';_0xfe8d08[_0x847b('0x86')]=!![];_0xfe8d08[_0x847b('0x8f')]=_0x847b('0xb9');if(this[_0x847b('0xf')][_0xca4893[_0x847b('0xb8')]]){var _0x442bad=this['queueReports'][_0xca4893[_0x847b('0xb8')]];this[_0x847b('0xf')][_0xca4893['secondtransfereruniqueid']]=this[_0x847b('0xf')][_0xca4893[_0x847b('0xb5')]];this[_0x847b('0xf')][_0xca4893[_0x847b('0xb5')]]=_0x442bad;var _0xb8b482=_[_0x847b('0x7a')](this['queueReports'][_0xca4893[_0x847b('0xb5')]]);_0xb8b482[_0x847b('0x37')]=!![];}}else if(this[_0x847b('0xf')][_0xca4893[_0x847b('0xba')]]){_0xfe8d08=_[_0x847b('0x7a')](this['queueReports'][_0xca4893['transfertargetuniqueid']]);_0xfe8d08[_0x847b('0x91')]=_0xca4893['origtransfererexten'];_0xfe8d08[_0x847b('0xb7')]=_0xca4893[_0x847b('0xbb')];_0xfe8d08[_0x847b('0x77')]=_0x847b('0xbc');_0xfe8d08['transfer']=!![];_0xfe8d08[_0x847b('0x8f')]=_0x847b('0xb9');if(this[_0x847b('0xf')][_0xca4893[_0x847b('0xbb')]]){var _0x442bad=this[_0x847b('0xf')][_0xca4893['origtransfereruniqueid']];this[_0x847b('0xf')][_0xca4893['origtransfereruniqueid']]=this[_0x847b('0xf')][_0xca4893[_0x847b('0xba')]];this['queueReports'][_0xca4893[_0x847b('0xba')]]=_0x442bad;var _0xb8b482=_[_0x847b('0x7a')](this['queueReports'][_0xca4893[_0x847b('0xba')]]);_0xb8b482[_0x847b('0x37')]=!![];}}}}catch(_0x5ee643){logger[_0x847b('0x3f')](_0x847b('0xbd'),util[_0x847b('0x6a')](_0x5ee643,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0x847b('0x2c')]=function(_0x356989){try{if(this['isNotNull'](_0x356989)){if(this[_0x847b('0xf')][_0x356989[_0x847b('0xb5')]]){var _0x568973=_['last'](this['queueReports'][_0x356989[_0x847b('0xb5')]]);_0x568973[_0x847b('0x77')]=_0x847b('0xbe');_0x568973['transfer']=!![];_0x568973[_0x847b('0x8f')]=_0x847b('0xbf');_0x568973[_0x847b('0x91')]=_0x356989[_0x847b('0xc0')];_0x568973[_0x847b('0xb7')]=_0x356989[_0x847b('0xb5')];this[_0x847b('0xab')]({'event':_0x847b('0xc1'),'uniqueid':_0x356989[_0x847b('0xb5')],'context':_0x356989[_0x847b('0xc2')],'channel':_0x356989[_0x847b('0xc3')]});}}}catch(_0x53e9b4){logger['error'](_0x847b('0xc4'),util[_0x847b('0x6a')](_0x53e9b4,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x847b('0xc')][_0x847b('0x27')]=function(_0x120267){try{if(this[_0x847b('0x5c')](_0x120267)){if(this[_0x847b('0xf')][_0x120267[_0x847b('0x6c')]]){var _0x2edab9=_[_0x847b('0x7a')](this['queueReports'][_0x120267[_0x847b('0x6c')]]);if(!_[_0x847b('0x39')](_0x2edab9[_0x847b('0x7b')])){_0x2edab9[_0x847b('0xc5')]=moment()[_0x847b('0x49')]('YYYY-MM-DD\x20HH:mm:ss');}}}}catch(_0x3e1df2){logger[_0x847b('0x3f')](_0x847b('0xc6'),util[_0x847b('0x6a')](_0x3e1df2,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0x847b('0xc7')]=function(_0x4f88b2){try{if(this[_0x847b('0x5c')](_0x4f88b2)){if(this[_0x847b('0xf')][_0x4f88b2[_0x847b('0x6c')]]){var _0x3518bb=_['last'](this['queueReports'][_0x4f88b2[_0x847b('0x6c')]]);if(!_[_0x847b('0x39')](_0x3518bb['mohstarttime'])){_0x3518bb[_0x847b('0xc8')]+=moment()[_0x847b('0xaf')](0x0)[_0x847b('0xae')](_0x3518bb[_0x847b('0xc5')],'seconds');delete _0x3518bb[_0x847b('0xc5')];}}}}catch(_0x4623c5){logger[_0x847b('0x3f')](_0x847b('0xc9'),util['inspect'](_0x4623c5,{'showHidden':![],'depth':null}));}};module[_0x847b('0xca')]=VoiceQueueReport;
\ No newline at end of file
index 5ab8d98..442bacd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7dfd=['../client','createHistory','campaign','queue','Request','CreateReportAgentPreview'];(function(_0x1c5a8c,_0x1746d8){var _0x253742=function(_0x3afee7){while(--_0x3afee7){_0x1c5a8c['push'](_0x1c5a8c['shift']());}};_0x253742(++_0x1746d8);}(_0x7dfd,0x1c2));var _0xd7df=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7dfd[_0x3dd15e];return _0x231fd0;};'use strict';var client=require(_0xd7df('0x0'));exports[_0xd7df('0x1')]=function(_0xac16){return function(){_0xac16[_0xd7df('0x2')]=_0xac16[_0xd7df('0x3')];return client[_0xd7df('0x4')](_0xd7df('0x5'),{'body':_0xac16,'log':_0xd7df('0x5')});};};
\ No newline at end of file
+var _0x9957=['Request','CreateReportAgentPreview','../client','createHistory','campaign'];(function(_0x231be4,_0x2954a5){var _0x50ca1f=function(_0x168e06){while(--_0x168e06){_0x231be4['push'](_0x231be4['shift']());}};_0x50ca1f(++_0x2954a5);}(_0x9957,0x93));var _0x7995=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x9957[_0x3b380d];return _0x54502b;};'use strict';var client=require(_0x7995('0x0'));exports[_0x7995('0x1')]=function(_0x2722a3){return function(){_0x2722a3[_0x7995('0x2')]=_0x2722a3['queue'];return client[_0x7995('0x3')](_0x7995('0x4'),{'body':_0x2722a3,'log':_0x7995('0x4')});};};
\ No newline at end of file
index 6351609..f8541b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b3b=['../client','create','Request','CreateAttachment'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x5b3b,0x148));var _0xb5b3=function(_0x346b18,_0x549001){_0x346b18=_0x346b18-0x0;var _0x25a252=_0x5b3b[_0x346b18];return _0x25a252;};'use strict';var client=require(_0xb5b3('0x0'));exports[_0xb5b3('0x1')]=function(_0x28b2ca){return client[_0xb5b3('0x2')](_0xb5b3('0x3'),{'body':_0x28b2ca,'log':_0xb5b3('0x3')});};
\ No newline at end of file
+var _0xf8d4=['CreateAttachment','../client','create','Request'];(function(_0x40e1d1,_0x30827d){var _0x199304=function(_0x16c361){while(--_0x16c361){_0x40e1d1['push'](_0x40e1d1['shift']());}};_0x199304(++_0x30827d);}(_0xf8d4,0x16d));var _0x4f8d=function(_0xdac697,_0x4f9a8a){_0xdac697=_0xdac697-0x0;var _0x5e2945=_0xf8d4[_0xdac697];return _0x5e2945;};'use strict';var client=require(_0x4f8d('0x0'));exports[_0x4f8d('0x1')]=function(_0x4174cb){return client[_0x4f8d('0x2')](_0x4f8d('0x3'),{'body':_0x4174cb,'log':_0x4f8d('0x3')});};
\ No newline at end of file
index 4b45c0e..7c27c60 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xede3=['dialAMDActive','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDBetweenWordsSilence','dialAMDSilenceThreshold','dialAMDMaximumWordLength','dialRandomLastDigitCallerIdNumber','dialCutDigit','Trunk','callerid','active','Interval','Intervals','interval','SquareProject','../client','Request','GetCampaign','name','type','limitCalls','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialGlobalMaxRetry','dialGlobalInterval'];(function(_0x58268c,_0x46b891){var _0x54f9ae=function(_0xd13beb){while(--_0xd13beb){_0x58268c['push'](_0x58268c['shift']());}};_0x54f9ae(++_0x46b891);}(_0xede3,0x195));var _0x3ede=function(_0xdde424,_0x1010fa){_0xdde424=_0xdde424-0x0;var _0x1045d8=_0xede3[_0xdde424];return _0x1045d8;};'use strict';var client=require(_0x3ede('0x0'));exports['getCampaigns']=function(){return function(){return client[_0x3ede('0x1')](_0x3ede('0x2'),{'options':{'raw':![],'attributes':['id',_0x3ede('0x3'),_0x3ede('0x4'),'active',_0x3ede('0x5'),_0x3ede('0x6'),_0x3ede('0x7'),_0x3ede('0x8'),_0x3ede('0x9'),_0x3ede('0xa'),_0x3ede('0xb'),_0x3ede('0xc'),'dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency',_0x3ede('0xd'),'dialTimezone',_0x3ede('0xe'),_0x3ede('0xf'),'dialAMDInitialSilence',_0x3ede('0x10'),_0x3ede('0x11'),'dialAMDTotalAnalysisTime','dialAMDMinWordLength',_0x3ede('0x12'),'dialAMDMaximumNumberOfWords',_0x3ede('0x13'),_0x3ede('0x14'),'dialOrderByScheduledAt','dialPrefix',_0x3ede('0x15'),_0x3ede('0x16')],'include':[{'model':_0x3ede('0x17'),'as':_0x3ede('0x17'),'attributes':['id',_0x3ede('0x3'),_0x3ede('0x18'),_0x3ede('0x19')]},{'model':_0x3ede('0x17'),'as':'TrunkBackup','attributes':['id',_0x3ede('0x3'),_0x3ede('0x18'),_0x3ede('0x19')]},{'model':_0x3ede('0x1a'),'as':_0x3ede('0x1a'),'attributes':['id',_0x3ede('0x3')],'include':[{'model':_0x3ede('0x1a'),'as':_0x3ede('0x1b'),'attributes':['id',_0x3ede('0x3'),_0x3ede('0x1c')]}]},{'model':'SquareProject','as':_0x3ede('0x1d'),'attributes':['id',_0x3ede('0x3')]}]},'log':'getCampaign'});};};
\ No newline at end of file
+var _0xb70d=['Interval','Intervals','SquareProject','getCampaign','../client','getCampaigns','Request','GetCampaign','name','type','active','limitCalls','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialGlobalInterval','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','dialPrefix','dialRandomLastDigitCallerIdNumber','Trunk','callerid','TrunkBackup'];(function(_0x5e2082,_0x3280c5){var _0x54c564=function(_0x12d71d){while(--_0x12d71d){_0x5e2082['push'](_0x5e2082['shift']());}};_0x54c564(++_0x3280c5);}(_0xb70d,0x94));var _0xdb70=function(_0x3f5626,_0x3a72bd){_0x3f5626=_0x3f5626-0x0;var _0x1da4de=_0xb70d[_0x3f5626];return _0x1da4de;};'use strict';var client=require(_0xdb70('0x0'));exports[_0xdb70('0x1')]=function(){return function(){return client[_0xdb70('0x2')](_0xdb70('0x3'),{'options':{'raw':![],'attributes':['id',_0xdb70('0x4'),_0xdb70('0x5'),_0xdb70('0x6'),_0xdb70('0x7'),_0xdb70('0x8'),_0xdb70('0x9'),_0xdb70('0xa'),_0xdb70('0xb'),'dialCongestionRetryFrequency',_0xdb70('0xc'),_0xdb70('0xd'),_0xdb70('0xe'),_0xdb70('0xf'),_0xdb70('0x10'),_0xdb70('0x11'),_0xdb70('0x12'),'dialAMDActive',_0xdb70('0x13'),_0xdb70('0x14'),_0xdb70('0x15'),'dialAMDTotalAnalysisTime',_0xdb70('0x16'),_0xdb70('0x17'),_0xdb70('0x18'),_0xdb70('0x19'),_0xdb70('0x1a'),'dialOrderByScheduledAt',_0xdb70('0x1b'),_0xdb70('0x1c'),'dialCutDigit'],'include':[{'model':_0xdb70('0x1d'),'as':_0xdb70('0x1d'),'attributes':['id',_0xdb70('0x4'),_0xdb70('0x1e'),_0xdb70('0x6')]},{'model':_0xdb70('0x1d'),'as':_0xdb70('0x1f'),'attributes':['id','name',_0xdb70('0x1e'),_0xdb70('0x6')]},{'model':_0xdb70('0x20'),'as':_0xdb70('0x20'),'attributes':['id',_0xdb70('0x4')],'include':[{'model':_0xdb70('0x20'),'as':_0xdb70('0x21'),'attributes':['id',_0xdb70('0x4'),'interval']}]},{'model':_0xdb70('0x22'),'as':_0xdb70('0x22'),'attributes':['id',_0xdb70('0x4')]}]},'log':_0xdb70('0x23')});};};
\ No newline at end of file
index 23a6726..1513c10 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x866b=['../client','createContact','Request','CreateCmContact','showContact','ShowCmContact'];(function(_0x49cc6d,_0x49b7f4){var _0x2054d9=function(_0x41a812){while(--_0x41a812){_0x49cc6d['push'](_0x49cc6d['shift']());}};_0x2054d9(++_0x49b7f4);}(_0x866b,0xd2));var _0xb866=function(_0x309991,_0x457e73){_0x309991=_0x309991-0x0;var _0x4ca94d=_0x866b[_0x309991];return _0x4ca94d;};'use strict';var client=require(_0xb866('0x0'));exports[_0xb866('0x1')]=function(_0x34dc5a){return function(){return client[_0xb866('0x2')](_0xb866('0x3'),{'body':_0x34dc5a,'log':_0xb866('0x3')});};};exports[_0xb866('0x4')]=function(_0x593b98){return function(){return client['Request']('ShowCmContact',{'options':_0x593b98,'log':_0xb866('0x5')});};};
\ No newline at end of file
+var _0xcf5c=['../client','createContact','Request','CreateCmContact','showContact'];(function(_0x5ade05,_0x364b06){var _0x2e481e=function(_0x45e10c){while(--_0x45e10c){_0x5ade05['push'](_0x5ade05['shift']());}};_0x2e481e(++_0x364b06);}(_0xcf5c,0x109));var _0xccf5=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0xcf5c[_0x397e5f];return _0x5302b8;};'use strict';var client=require(_0xccf5('0x0'));exports[_0xccf5('0x1')]=function(_0x2f6cba){return function(){return client[_0xccf5('0x2')]('CreateCmContact',{'body':_0x2f6cba,'log':_0xccf5('0x3')});};};exports[_0xccf5('0x4')]=function(_0x43c339){return function(){return client[_0xccf5('0x2')]('ShowCmContact',{'options':_0x43c339,'log':'ShowCmContact'});};};
\ No newline at end of file
index f296e7d..1cb4b79 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x687b=['DESC','scheduledat','ASC','getContactDialerIvr','GetContactDialerIvr','campaign','queue','MoveContactManagedDialer','countReScheduled','getContactPreview','User','Agent','name','Queue','unlockContact','getContactRecallMe','GetContactRecallMe','db.CmHopper.UserId','../client','moment','lodash','getContacts','Request','GetCmHopper','CmContact','Contact','getCmHopper','updateContacts','format','YYYY-MM-DD\x20HH:mm:ss','rescheduleContact','UpdateCmHopper','ContactId','ListId','VoiceQueueId','CampaignId','getContactDialer','GetContactDialer','priority'];(function(_0x279368,_0x41c002){var _0x40b6d0=function(_0x493776){while(--_0x493776){_0x279368['push'](_0x279368['shift']());}};_0x40b6d0(++_0x41c002);}(_0x687b,0x14a));var _0xb687=function(_0x390556,_0x5b64bd){_0x390556=_0x390556-0x0;var _0x11868e=_0x687b[_0x390556];return _0x11868e;};'use strict';var client=require(_0xb687('0x0'));var moment=require(_0xb687('0x1'));var _=require(_0xb687('0x2'));exports[_0xb687('0x3')]=function(_0x5d8563,_0x5e5f06){return function(){return client[_0xb687('0x4')](_0xb687('0x5'),{'options':{'where':{'VoiceQueueId':_0x5d8563},'include':[{'model':_0xb687('0x6'),'as':_0xb687('0x7')}],'limit':_0x5e5f06,'raw':![]},'log':_0xb687('0x8')});};};exports[_0xb687('0x9')]=function(_0x16ccf3,_0xf43a1f,_0x47ffea){return function(){return client[_0xb687('0x4')]('UpdateCmHopper',{'body':_0x16ccf3,'options':{'where':{'VoiceQueueId':_0xf43a1f,'scheduledat':{'$lte':moment()[_0xb687('0xa')](_0xb687('0xb'))}},'limit':_0x47ffea},'log':'UpdateCmHopper'});};};exports[_0xb687('0xc')]=function(_0x21e3ab){return function(){return client[_0xb687('0x4')](_0xb687('0xd'),{'body':_0x21e3ab,'options':{'where':{'ContactId':_0x21e3ab[_0xb687('0xe')],'ListId':_0x21e3ab[_0xb687('0xf')],'VoiceQueueId':_0x21e3ab[_0xb687('0x10')],'CampaignId':_0x21e3ab[_0xb687('0x11')]}},'log':_0xb687('0xc')});};};exports['destroyContact']=function(_0x226e56,_0xbeb5cc,_0x3ca723){return function(){return client[_0xb687('0x4')]('DestroyCmHopper',{'options':{'where':{'VoiceQueueId':_0x226e56,'ListId':_0xbeb5cc,'ContactId':_0x3ca723}},'log':'DestroyCmHopper'});};};exports[_0xb687('0x12')]=function(_0x155ebe,_0x49e233,_0x108fd0,_0x2f1ac0){return function(){return client[_0xb687('0x4')](_0xb687('0x13'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x155ebe,'active':![],'scheduledat':{'$lte':moment()[_0xb687('0xa')](_0xb687('0xb'))},'$or':[{'UserId':null},{'UserId':{'$in':_0x49e233}}]},'include':[{'model':_0xb687('0x6'),'as':_0xb687('0x7')}],'order':[[_0xb687('0x14'),_0xb687('0x15')],[_0xb687('0x16'),_0x2f1ac0],['id',_0xb687('0x17')]],'raw':!![],'limit':_0x108fd0},'log':'GetContactDialer'});};};exports[_0xb687('0x18')]=function(_0x328301,_0x30d370,_0x5eb9b9){return function(){return client['Request'](_0xb687('0x13'),{'body':{'active':!![]},'options':{'where':{'CampaignId':_0x328301,'active':![],'scheduledat':{'$lte':moment()[_0xb687('0xa')](_0xb687('0xb'))}},'include':[{'model':'CmContact','as':_0xb687('0x7')}],'order':[['priority',_0xb687('0x15')],[_0xb687('0x16'),_0x5eb9b9],['id',_0xb687('0x17')]],'raw':!![],'limit':_0x30d370},'log':_0xb687('0x19')});};};exports['moveContactManagedDialer']=function(_0x3a73d5,_0x58e83c){return function(){_0x3a73d5[_0xb687('0x1a')]=_0x3a73d5[_0xb687('0x1b')];return client[_0xb687('0x4')]('MoveContactManagedDialer',{'body':_0x3a73d5,'options':{'where':{'ContactId':_0x3a73d5[_0xb687('0xe')],'ListId':_0x3a73d5[_0xb687('0xf')],'VoiceQueueId':_0x3a73d5[_0xb687('0x10')],'CampaignId':_0x3a73d5[_0xb687('0x11')],'active':_0x58e83c?undefined:!![]}},'log':_0xb687('0x1c')});};};exports[_0xb687('0x1d')]=function(_0xf48ba4){return function(){return client[_0xb687('0x4')]('CountReScheduled',{'options':{'where':{'VoiceQueueId':_0xf48ba4['id']?_0xf48ba4['id']||null:null}},'log':_0xb687('0x1d')});};};exports[_0xb687('0x1e')]=function(_0x1c1585){return function(){return client[_0xb687('0x4')](_0xb687('0x5'),{'options':{'where':{'id':_0x1c1585},'include':[{'model':_0xb687('0x6'),'as':_0xb687('0x7')},{'model':_0xb687('0x1f'),'as':_0xb687('0x20'),'attributes':['id',_0xb687('0x21')]},{'model':'VoiceQueue','as':_0xb687('0x22'),'attributes':['id',_0xb687('0x21')]}],'raw':!![]},'log':_0xb687('0x8')});};};exports[_0xb687('0x23')]=function(_0x2e5c8d,_0x173c58,_0x4e9a06){return function(){return client[_0xb687('0x4')]('UpdateCmHopper',{'body':_0x2e5c8d,'options':{'where':{'id':_0x173c58},'limit':_0x4e9a06},'log':_0xb687('0xd')});};};exports[_0xb687('0x24')]=function(_0x6df7a2,_0x245db1){return function(){return client[_0xb687('0x4')](_0xb687('0x25'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x6df7a2,'active':![],'recallme':!![],'scheduledat':{'$lte':moment()[_0xb687('0xa')]('YYYY-MM-DD\x20HH:mm:ss')},'UserId':{'$in':_0x245db1}},'order':[[_0xb687('0x14'),_0xb687('0x15')],[_0xb687('0x16'),_0xb687('0x15')],['id',_0xb687('0x17')]],'include':[{'model':_0xb687('0x6'),'as':_0xb687('0x7')}],'group':_0xb687('0x26'),'raw':!![]},'log':_0xb687('0x13')});};};
\ No newline at end of file
+var _0x7a54=['CmContact','Contact','getCmHopper','updateContacts','Request','UpdateCmHopper','YYYY-MM-DD\x20HH:mm:ss','ListId','rescheduleContact','destroyContact','DestroyCmHopper','getContactDialer','GetContactDialer','format','priority','DESC','scheduledat','getContactDialerIvr','ASC','GetContactDialerIvr','campaign','MoveContactManagedDialer','ContactId','CampaignId','CountReScheduled','countReScheduled','getContactPreview','Agent','name','VoiceQueue','Queue','unlockContact','GetContactRecallMe','db.CmHopper.UserId','../client','moment','lodash','GetCmHopper'];(function(_0x4e26b8,_0x1a3c12){var _0x10a6f0=function(_0x119948){while(--_0x119948){_0x4e26b8['push'](_0x4e26b8['shift']());}};_0x10a6f0(++_0x1a3c12);}(_0x7a54,0x106));var _0x47a5=function(_0x43cdba,_0x55d3b3){_0x43cdba=_0x43cdba-0x0;var _0x52e1c2=_0x7a54[_0x43cdba];return _0x52e1c2;};'use strict';var client=require(_0x47a5('0x0'));var moment=require(_0x47a5('0x1'));var _=require(_0x47a5('0x2'));exports['getContacts']=function(_0x1d33e,_0x4086cd){return function(){return client['Request'](_0x47a5('0x3'),{'options':{'where':{'VoiceQueueId':_0x1d33e},'include':[{'model':_0x47a5('0x4'),'as':_0x47a5('0x5')}],'limit':_0x4086cd,'raw':![]},'log':_0x47a5('0x6')});};};exports[_0x47a5('0x7')]=function(_0x545a97,_0x3d5629,_0x59199c){return function(){return client[_0x47a5('0x8')](_0x47a5('0x9'),{'body':_0x545a97,'options':{'where':{'VoiceQueueId':_0x3d5629,'scheduledat':{'$lte':moment()['format'](_0x47a5('0xa'))}},'limit':_0x59199c},'log':'UpdateCmHopper'});};};exports['rescheduleContact']=function(_0x582352){return function(){return client[_0x47a5('0x8')](_0x47a5('0x9'),{'body':_0x582352,'options':{'where':{'ContactId':_0x582352['ContactId'],'ListId':_0x582352[_0x47a5('0xb')],'VoiceQueueId':_0x582352['VoiceQueueId'],'CampaignId':_0x582352['CampaignId']}},'log':_0x47a5('0xc')});};};exports[_0x47a5('0xd')]=function(_0x2f399b,_0x250fad,_0xd612dd){return function(){return client[_0x47a5('0x8')](_0x47a5('0xe'),{'options':{'where':{'VoiceQueueId':_0x2f399b,'ListId':_0x250fad,'ContactId':_0xd612dd}},'log':'DestroyCmHopper'});};};exports[_0x47a5('0xf')]=function(_0x221b54,_0x1cf309,_0x711793,_0x139f25){return function(){return client[_0x47a5('0x8')](_0x47a5('0x10'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x221b54,'active':![],'scheduledat':{'$lte':moment()[_0x47a5('0x11')]('YYYY-MM-DD\x20HH:mm:ss')},'$or':[{'UserId':null},{'UserId':{'$in':_0x1cf309}}]},'include':[{'model':_0x47a5('0x4'),'as':_0x47a5('0x5')}],'order':[[_0x47a5('0x12'),_0x47a5('0x13')],[_0x47a5('0x14'),_0x139f25],['id','ASC']],'raw':!![],'limit':_0x711793},'log':'GetContactDialer'});};};exports[_0x47a5('0x15')]=function(_0x4b966e,_0x5247fd,_0x423a81){return function(){return client[_0x47a5('0x8')](_0x47a5('0x10'),{'body':{'active':!![]},'options':{'where':{'CampaignId':_0x4b966e,'active':![],'scheduledat':{'$lte':moment()[_0x47a5('0x11')](_0x47a5('0xa'))}},'include':[{'model':_0x47a5('0x4'),'as':_0x47a5('0x5')}],'order':[[_0x47a5('0x12'),_0x47a5('0x13')],['scheduledat',_0x423a81],['id',_0x47a5('0x16')]],'raw':!![],'limit':_0x5247fd},'log':_0x47a5('0x17')});};};exports['moveContactManagedDialer']=function(_0x2b0360,_0x1f03f7){return function(){_0x2b0360[_0x47a5('0x18')]=_0x2b0360['queue'];return client[_0x47a5('0x8')](_0x47a5('0x19'),{'body':_0x2b0360,'options':{'where':{'ContactId':_0x2b0360[_0x47a5('0x1a')],'ListId':_0x2b0360[_0x47a5('0xb')],'VoiceQueueId':_0x2b0360['VoiceQueueId'],'CampaignId':_0x2b0360[_0x47a5('0x1b')],'active':_0x1f03f7?undefined:!![]}},'log':_0x47a5('0x19')});};};exports['countReScheduled']=function(_0x28747d){return function(){return client[_0x47a5('0x8')](_0x47a5('0x1c'),{'options':{'where':{'VoiceQueueId':_0x28747d['id']?_0x28747d['id']||null:null}},'log':_0x47a5('0x1d')});};};exports[_0x47a5('0x1e')]=function(_0x50bf17){return function(){return client['Request'](_0x47a5('0x3'),{'options':{'where':{'id':_0x50bf17},'include':[{'model':'CmContact','as':_0x47a5('0x5')},{'model':'User','as':_0x47a5('0x1f'),'attributes':['id',_0x47a5('0x20')]},{'model':_0x47a5('0x21'),'as':_0x47a5('0x22'),'attributes':['id',_0x47a5('0x20')]}],'raw':!![]},'log':_0x47a5('0x6')});};};exports[_0x47a5('0x23')]=function(_0x136b14,_0x16631f,_0x361bfa){return function(){return client[_0x47a5('0x8')](_0x47a5('0x9'),{'body':_0x136b14,'options':{'where':{'id':_0x16631f},'limit':_0x361bfa},'log':_0x47a5('0x9')});};};exports['getContactRecallMe']=function(_0x243210,_0x51833b){return function(){return client[_0x47a5('0x8')](_0x47a5('0x24'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x243210,'active':![],'recallme':!![],'scheduledat':{'$lte':moment()[_0x47a5('0x11')]('YYYY-MM-DD\x20HH:mm:ss')},'UserId':{'$in':_0x51833b}},'order':[[_0x47a5('0x12'),_0x47a5('0x13')],[_0x47a5('0x14'),_0x47a5('0x13')],['id','ASC']],'include':[{'model':'CmContact','as':_0x47a5('0x5')}],'group':_0x47a5('0x25'),'raw':!![]},'log':'GetContactDialer'});};};
\ No newline at end of file
index 47d555f..480ac57 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d94=['GetCmHopperBlackIvr','../client','checkIsBlackList','Request','GetCmHopperBlack','Contact','phone','checkIsBlackListIvr'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x4d94,0x171));var _0x44d9=function(_0x1fc04f,_0x583168){_0x1fc04f=_0x1fc04f-0x0;var _0x22028c=_0x4d94[_0x1fc04f];return _0x22028c;};'use strict';var client=require(_0x44d9('0x0'));exports[_0x44d9('0x1')]=function(_0xead9c9){return function(){return client[_0x44d9('0x2')](_0x44d9('0x3'),{'options':{'where':{'VoiceQueueId':_0xead9c9['VoiceQueueId'],'phone':_0xead9c9[_0x44d9('0x4')][_0x44d9('0x5')]},'raw':![]},'log':_0x44d9('0x3')});};};exports[_0x44d9('0x6')]=function(_0xe65aac){return function(){return client[_0x44d9('0x2')](_0x44d9('0x3'),{'options':{'where':{'CampaignId':_0xe65aac['CampaignId'],'phone':_0xe65aac[_0x44d9('0x4')]['phone']},'raw':![]},'log':_0x44d9('0x7')});};};
\ No newline at end of file
+var _0x0d99=['Contact','phone','GetCmHopperBlack','checkIsBlackListIvr','CampaignId','GetCmHopperBlackIvr','../client','checkIsBlackList','Request'];(function(_0x418d29,_0x3ac7eb){var _0x14d055=function(_0x30c709){while(--_0x30c709){_0x418d29['push'](_0x418d29['shift']());}};_0x14d055(++_0x3ac7eb);}(_0x0d99,0x84));var _0x90d9=function(_0x1bd975,_0x38fa60){_0x1bd975=_0x1bd975-0x0;var _0x326e33=_0x0d99[_0x1bd975];return _0x326e33;};'use strict';var client=require(_0x90d9('0x0'));exports[_0x90d9('0x1')]=function(_0x50313c){return function(){return client[_0x90d9('0x2')]('GetCmHopperBlack',{'options':{'where':{'VoiceQueueId':_0x50313c['VoiceQueueId'],'phone':_0x50313c[_0x90d9('0x3')][_0x90d9('0x4')]},'raw':![]},'log':_0x90d9('0x5')});};};exports[_0x90d9('0x6')]=function(_0x40e8d8){return function(){return client['Request'](_0x90d9('0x5'),{'options':{'where':{'CampaignId':_0x40e8d8[_0x90d9('0x7')],'phone':_0x40e8d8[_0x90d9('0x3')][_0x90d9('0x4')]},'raw':![]},'log':_0x90d9('0x8')});};};
\ No newline at end of file
index f407995..709071e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb600=['queue','Request','CreateCmHopperFinal'];(function(_0x267af0,_0x4383bf){var _0xc4e95c=function(_0xb8ffdb){while(--_0xb8ffdb){_0x267af0['push'](_0x267af0['shift']());}};_0xc4e95c(++_0x4383bf);}(_0xb600,0x144));var _0x0b60=function(_0x79d5d0,_0x3dc9ef){_0x79d5d0=_0x79d5d0-0x0;var _0xfb3597=_0xb600[_0x79d5d0];return _0xfb3597;};'use strict';var client=require('../client');exports['createContact']=function(_0x34d78c){return function(){_0x34d78c['campaign']=_0x34d78c[_0x0b60('0x0')];return client[_0x0b60('0x1')](_0x0b60('0x2'),{'body':_0x34d78c,'log':_0x0b60('0x2')});};};
\ No newline at end of file
+var _0x7034=['createContact','campaign','queue','Request','CreateCmHopperFinal','../client'];(function(_0x28a5ad,_0x520afa){var _0x176b8a=function(_0x3d71b){while(--_0x3d71b){_0x28a5ad['push'](_0x28a5ad['shift']());}};_0x176b8a(++_0x520afa);}(_0x7034,0x18b));var _0x4703=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0x7034[_0x19950b];return _0x3c6b41;};'use strict';var client=require(_0x4703('0x0'));exports[_0x4703('0x1')]=function(_0x33d904){return function(){_0x33d904[_0x4703('0x2')]=_0x33d904[_0x4703('0x3')];return client[_0x4703('0x4')](_0x4703('0x5'),{'body':_0x33d904,'log':'CreateCmHopperFinal'});};};
\ No newline at end of file
index 4b78e4c..856cff8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xff01=['startOf','ivr','GetCampaignHopperHistory','../client','moment','queue','Request','CreateCmHopperHistory','avgHandleTime','subtract','YYYY-MM-DD\x20HH:mm:ss','format','GetCmHopperHistory','getVoiceQueueHopperHistory','GetVoiceQueueHopperHistory','day','endOf','getCampaignHopperHistory'];(function(_0x1fc122,_0x5e2c17){var _0xa2cb13=function(_0x263b13){while(--_0x263b13){_0x1fc122['push'](_0x1fc122['shift']());}};_0xa2cb13(++_0x5e2c17);}(_0xff01,0xb7));var _0x1ff0=function(_0x1c37af,_0x1c1af1){_0x1c37af=_0x1c37af-0x0;var _0x3228f1=_0xff01[_0x1c37af];return _0x3228f1;};'use strict';var client=require(_0x1ff0('0x0'));var moment=require(_0x1ff0('0x1'));exports['createHistory']=function(_0x848fb9){return function(){_0x848fb9['campaign']=_0x848fb9[_0x1ff0('0x2')];return client[_0x1ff0('0x3')](_0x1ff0('0x4'),{'body':_0x848fb9,'log':'CreateCmHopperHistory'});};};exports[_0x1ff0('0x5')]=function(_0x5821af){return function(){return client[_0x1ff0('0x3')]('AvgHandleTime',{'options':{'where':{'endtime':{'$between':[moment()[_0x1ff0('0x6')](_0x5821af,'minutes')['format'](_0x1ff0('0x7')),moment()[_0x1ff0('0x8')]('YYYY-MM-DD\x20HH:mm:ss')]}},'raw':![]},'log':_0x1ff0('0x9')});};};exports[_0x1ff0('0xa')]=function(_0x45dfea){return function(){return client[_0x1ff0('0x3')](_0x1ff0('0xb'),{'options':{'where':{'createdAt':{'$between':[moment()['startOf'](_0x1ff0('0xc'))['format'](_0x1ff0('0x7')),moment()[_0x1ff0('0xd')](_0x1ff0('0xc'))[_0x1ff0('0x8')](_0x1ff0('0x7'))]},'campaigntype':_0x1ff0('0x2')},'raw':![]},'log':_0x1ff0('0xb')});};};exports[_0x1ff0('0xe')]=function(_0xdd0f19){return function(){return client[_0x1ff0('0x3')]('GetCampaignHopperHistory',{'options':{'where':{'createdAt':{'$between':[moment()[_0x1ff0('0xf')](_0x1ff0('0xc'))[_0x1ff0('0x8')](_0x1ff0('0x7')),moment()['endOf'](_0x1ff0('0xc'))[_0x1ff0('0x8')]('YYYY-MM-DD\x20HH:mm:ss')]},'campaigntype':_0x1ff0('0x10')},'raw':![]},'log':_0x1ff0('0x11')});};};
\ No newline at end of file
+var _0x8768=['format','YYYY-MM-DD\x20HH:mm:ss','day','endOf','GetVoiceQueueHopperHistory','getCampaignHopperHistory','GetCampaignHopperHistory','startOf','ivr','../client','moment','createHistory','campaign','queue','Request','CreateCmHopperHistory','avgHandleTime','AvgHandleTime','minutes'];(function(_0x27f5b5,_0x5a57d1){var _0x28a0c3=function(_0x254952){while(--_0x254952){_0x27f5b5['push'](_0x27f5b5['shift']());}};_0x28a0c3(++_0x5a57d1);}(_0x8768,0xa1));var _0x8876=function(_0x5a39f4,_0x482908){_0x5a39f4=_0x5a39f4-0x0;var _0x1d60be=_0x8768[_0x5a39f4];return _0x1d60be;};'use strict';var client=require(_0x8876('0x0'));var moment=require(_0x8876('0x1'));exports[_0x8876('0x2')]=function(_0x204646){return function(){_0x204646[_0x8876('0x3')]=_0x204646[_0x8876('0x4')];return client[_0x8876('0x5')](_0x8876('0x6'),{'body':_0x204646,'log':_0x8876('0x6')});};};exports[_0x8876('0x7')]=function(_0x270336){return function(){return client[_0x8876('0x5')](_0x8876('0x8'),{'options':{'where':{'endtime':{'$between':[moment()['subtract'](_0x270336,_0x8876('0x9'))[_0x8876('0xa')](_0x8876('0xb')),moment()[_0x8876('0xa')](_0x8876('0xb'))]}},'raw':![]},'log':'GetCmHopperHistory'});};};exports['getVoiceQueueHopperHistory']=function(_0xa6742b){return function(){return client[_0x8876('0x5')]('GetVoiceQueueHopperHistory',{'options':{'where':{'createdAt':{'$between':[moment()['startOf'](_0x8876('0xc'))[_0x8876('0xa')](_0x8876('0xb')),moment()[_0x8876('0xd')](_0x8876('0xc'))[_0x8876('0xa')](_0x8876('0xb'))]},'campaigntype':_0x8876('0x4')},'raw':![]},'log':_0x8876('0xe')});};};exports[_0x8876('0xf')]=function(_0x5d2f75){return function(){return client[_0x8876('0x5')](_0x8876('0x10'),{'options':{'where':{'createdAt':{'$between':[moment()[_0x8876('0x11')](_0x8876('0xc'))[_0x8876('0xa')]('YYYY-MM-DD\x20HH:mm:ss'),moment()[_0x8876('0xd')](_0x8876('0xc'))[_0x8876('0xa')](_0x8876('0xb'))]},'campaigntype':_0x8876('0x12')},'raw':![]},'log':_0x8876('0x10')});};};
\ No newline at end of file
index 650e884..02321a8 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(_0x520af3,_0xd58ded){var _0x562234=function(_0x10330a){while(--_0x10330a){_0x520af3['push'](_0x520af3['shift']());}};_0x562234(++_0xd58ded);}(_0xf494,0x1c6));var _0x4f49=function(_0x21373f,_0x4418f3){_0x21373f=_0x21373f-0x0;var _0x2e67be=_0xf494[_0x21373f];return _0x2e67be;};'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 _0x1261=['callerid','active','getFaxAccount','NotifyFaxAccount','getFaxAccounts','Request','GetFaxAccount','name','description','ecm','headerinfo','localstationid','minrate','maxrate','faxdetect','t38timeout','TrunkId','ListId','key','Trunk'];(function(_0x391d33,_0x7a737){var _0x3c47fe=function(_0x5dbf80){while(--_0x5dbf80){_0x391d33['push'](_0x391d33['shift']());}};_0x3c47fe(++_0x7a737);}(_0x1261,0x144));var _0x1126=function(_0x1af0e5,_0x152990){_0x1af0e5=_0x1af0e5-0x0;var _0x3c444a=_0x1261[_0x1af0e5];return _0x3c444a;};'use strict';var client=require('../client');exports[_0x1126('0x0')]=function(){return function(){return client[_0x1126('0x1')](_0x1126('0x2'),{'options':{'raw':![],'attributes':['id',_0x1126('0x3'),_0x1126('0x4'),_0x1126('0x5'),_0x1126('0x6'),_0x1126('0x7'),_0x1126('0x8'),_0x1126('0x9'),'modem','gateway',_0x1126('0xa'),_0x1126('0xb'),'tech',_0x1126('0xc'),_0x1126('0xd'),_0x1126('0xe')],'include':[{'model':_0x1126('0xf'),'as':_0x1126('0xf'),'attributes':['id','name',_0x1126('0x10'),_0x1126('0x11')]}]},'log':_0x1126('0x12')});};};exports['notify']=function(_0x34571c,_0x5d581b){return client['Request'](_0x1126('0x13'),{'account':{'id':_0x34571c},'body':_0x5d581b,'log':'NotifyFaxAccount'});};
\ No newline at end of file
index eeb1f54..1a2892a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0adf=['Request','UpdateFaxMessage','../client','update'];(function(_0x40b9df,_0x64e7d3){var _0x73b1c9=function(_0x21bc08){while(--_0x21bc08){_0x40b9df['push'](_0x40b9df['shift']());}};_0x73b1c9(++_0x64e7d3);}(_0x0adf,0x1d2));var _0xf0ad=function(_0x486894,_0x611542){_0x486894=_0x486894-0x0;var _0x47a9c5=_0x0adf[_0x486894];return _0x47a9c5;};'use strict';var client=require(_0xf0ad('0x0'));exports[_0xf0ad('0x1')]=function(_0x18cc1e,_0x559f06){return client[_0xf0ad('0x2')](_0xf0ad('0x3'),{'body':_0x559f06,'options':{'where':{'AttachmentId':_0x18cc1e}},'log':_0xf0ad('0x3')});};
\ No newline at end of file
+var _0x277c=['../client','Request','UpdateFaxMessage'];(function(_0x2df507,_0x553862){var _0x1f7167=function(_0x11319e){while(--_0x11319e){_0x2df507['push'](_0x2df507['shift']());}};_0x1f7167(++_0x553862);}(_0x277c,0x153));var _0xc277=function(_0x381c3d,_0x1be3fb){_0x381c3d=_0x381c3d-0x0;var _0x2a88f2=_0x277c[_0x381c3d];return _0x2a88f2;};'use strict';var client=require(_0xc277('0x0'));exports['update']=function(_0x2bb260,_0x3420cf){return client[_0xc277('0x1')](_0xc277('0x2'),{'body':_0x3420cf,'options':{'where':{'AttachmentId':_0x2bb260}},'log':_0xc277('0x2')});};
\ No newline at end of file
index 25c38a4..17c9388 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1f39=['variableName','Variable','Descriptions','key','keyType','keyContent','Fields','idField','customField','Tag','../../client','Request','GetDeskAccount','name','description','password','remoteUri','DeskConfiguration','Configurations','DeskField','Subjects','type','content'];(function(_0x4e676e,_0x2a7c6d){var _0x336a3c=function(_0x4767c4){while(--_0x4767c4){_0x4e676e['push'](_0x4e676e['shift']());}};_0x336a3c(++_0x2a7c6d);}(_0x1f39,0x1bf));var _0x91f3=function(_0x1f7a52,_0x4714fd){_0x1f7a52=_0x1f7a52-0x0;var _0x3b6304=_0x1f39[_0x1f7a52];return _0x3b6304;};'use strict';var client=require(_0x91f3('0x0'));exports['getDeskAccounts']=function(){return function(_0x3f90a6){return client[_0x91f3('0x1')](_0x91f3('0x2'),{'options':{'raw':![],'attributes':['id',_0x91f3('0x3'),_0x91f3('0x4'),'username',_0x91f3('0x5'),_0x91f3('0x6'),'authType','type','serverUrl'],'include':[{'model':_0x91f3('0x7'),'as':_0x91f3('0x8'),'attributes':['id','name'],'include':[{'model':_0x91f3('0x9'),'as':_0x91f3('0xa'),'attributes':['id',_0x91f3('0xb'),_0x91f3('0xc'),_0x91f3('0xd')],'include':[{'model':'Variable','as':_0x91f3('0xe'),'attributes':['id',_0x91f3('0x3')]}]},{'model':_0x91f3('0x9'),'as':_0x91f3('0xf'),'attributes':['id','type',_0x91f3('0xc'),_0x91f3('0x10'),_0x91f3('0x11'),_0x91f3('0x12'),_0x91f3('0xd')],'include':[{'model':'Variable','as':_0x91f3('0xe'),'attributes':['id',_0x91f3('0x3')]}]},{'model':_0x91f3('0x9'),'as':_0x91f3('0x13'),'attributes':['id',_0x91f3('0xb'),_0x91f3('0xc'),_0x91f3('0x14'),'nameField',_0x91f3('0x15'),_0x91f3('0xd')],'include':[{'model':_0x91f3('0xe'),'as':_0x91f3('0xe'),'attributes':['id','name']}]},{'model':_0x91f3('0x16'),'as':'Tags','attributes':['id','name']}]}]},'log':_0x91f3('0x2')});};};
\ No newline at end of file
+var _0x4d81=['content','variableName','Variable','Descriptions','key','keyType','keyContent','DeskField','idField','nameField','customField','Tag','Tags','../../client','getDeskAccounts','Request','GetDeskAccount','description','username','password','remoteUri','authType','type','serverUrl','DeskConfiguration','name','Subjects'];(function(_0xa0c417,_0x32bf4a){var _0x57af58=function(_0x392483){while(--_0x392483){_0xa0c417['push'](_0xa0c417['shift']());}};_0x57af58(++_0x32bf4a);}(_0x4d81,0x187));var _0x14d8=function(_0x1e15e3,_0x3ec3d1){_0x1e15e3=_0x1e15e3-0x0;var _0x261de7=_0x4d81[_0x1e15e3];return _0x261de7;};'use strict';var client=require(_0x14d8('0x0'));exports[_0x14d8('0x1')]=function(){return function(_0x3b1572){return client[_0x14d8('0x2')](_0x14d8('0x3'),{'options':{'raw':![],'attributes':['id','name',_0x14d8('0x4'),_0x14d8('0x5'),_0x14d8('0x6'),_0x14d8('0x7'),_0x14d8('0x8'),_0x14d8('0x9'),_0x14d8('0xa')],'include':[{'model':_0x14d8('0xb'),'as':'Configurations','attributes':['id',_0x14d8('0xc')],'include':[{'model':'DeskField','as':_0x14d8('0xd'),'attributes':['id',_0x14d8('0x9'),_0x14d8('0xe'),_0x14d8('0xf')],'include':[{'model':'Variable','as':_0x14d8('0x10'),'attributes':['id',_0x14d8('0xc')]}]},{'model':'DeskField','as':_0x14d8('0x11'),'attributes':['id',_0x14d8('0x9'),_0x14d8('0xe'),_0x14d8('0x12'),_0x14d8('0x13'),_0x14d8('0x14'),_0x14d8('0xf')],'include':[{'model':_0x14d8('0x10'),'as':_0x14d8('0x10'),'attributes':['id',_0x14d8('0xc')]}]},{'model':_0x14d8('0x15'),'as':'Fields','attributes':['id',_0x14d8('0x9'),_0x14d8('0xe'),_0x14d8('0x16'),_0x14d8('0x17'),_0x14d8('0x18'),_0x14d8('0xf')],'include':[{'model':'Variable','as':_0x14d8('0x10'),'attributes':['id',_0x14d8('0xc')]}]},{'model':_0x14d8('0x19'),'as':_0x14d8('0x1a'),'attributes':['id',_0x14d8('0xc')]}]}]},'log':_0x14d8('0x3')});};};
\ No newline at end of file
index f78dce9..e4501a3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd32a=['content','variableName','Variable','Descriptions','key','keyType','Fields','idField','nameField','../../client','GetDynamics365Account','name','username','password','remoteUri','tenantId','clientId','serverUrl','ticketType','Dynamics365Field','Subjects','type'];(function(_0x138adb,_0x193fee){var _0x1b27f2=function(_0x5e97a2){while(--_0x5e97a2){_0x138adb['push'](_0x138adb['shift']());}};_0x1b27f2(++_0x193fee);}(_0xd32a,0x153));var _0xad32=function(_0x7e2eb0,_0x17cd58){_0x7e2eb0=_0x7e2eb0-0x0;var _0xd92de4=_0xd32a[_0x7e2eb0];return _0xd92de4;};'use strict';var client=require(_0xad32('0x0'));exports['getDynamics365Accounts']=function(){return function(_0x29cb5c){return client['Request'](_0xad32('0x1'),{'options':{'raw':![],'attributes':['id',_0xad32('0x2'),_0xad32('0x3'),_0xad32('0x4'),_0xad32('0x5'),_0xad32('0x6'),_0xad32('0x7'),'clientSecret',_0xad32('0x8'),'description'],'include':[{'model':'Dynamics365Configuration','as':'Configurations','attributes':['id',_0xad32('0x2'),_0xad32('0x9')],'include':[{'model':_0xad32('0xa'),'as':_0xad32('0xb'),'attributes':['id',_0xad32('0xc'),_0xad32('0xd'),_0xad32('0xe')],'include':[{'model':_0xad32('0xf'),'as':_0xad32('0xf'),'attributes':['id',_0xad32('0x2')]}]},{'model':_0xad32('0xa'),'as':_0xad32('0x10'),'attributes':['id',_0xad32('0xc'),_0xad32('0xd'),_0xad32('0x11'),_0xad32('0x12'),'keyContent',_0xad32('0xe')],'include':[{'model':'Variable','as':'Variable','attributes':['id',_0xad32('0x2')]}]},{'model':_0xad32('0xa'),'as':_0xad32('0x13'),'attributes':['id',_0xad32('0xc'),_0xad32('0xd'),_0xad32('0x14'),_0xad32('0x15'),'customField',_0xad32('0xe')],'include':[{'model':_0xad32('0xf'),'as':'Variable','attributes':['id',_0xad32('0x2')]}]}]}]},'log':_0xad32('0x1')});};};
\ No newline at end of file
+var _0xea7c=['customField','../../client','getDynamics365Accounts','name','username','password','remoteUri','tenantId','clientId','clientSecret','serverUrl','description','Configurations','ticketType','Dynamics365Field','Subjects','type','content','variableName','Variable','key','keyContent','Fields'];(function(_0x3c47af,_0x19d3e4){var _0x358c97=function(_0x3e099c){while(--_0x3e099c){_0x3c47af['push'](_0x3c47af['shift']());}};_0x358c97(++_0x19d3e4);}(_0xea7c,0x115));var _0xcea7=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0xea7c[_0x19950b];return _0x3c6b41;};'use strict';var client=require(_0xcea7('0x0'));exports[_0xcea7('0x1')]=function(){return function(_0x5f0b3a){return client['Request']('GetDynamics365Account',{'options':{'raw':![],'attributes':['id',_0xcea7('0x2'),_0xcea7('0x3'),_0xcea7('0x4'),_0xcea7('0x5'),_0xcea7('0x6'),_0xcea7('0x7'),_0xcea7('0x8'),_0xcea7('0x9'),_0xcea7('0xa')],'include':[{'model':'Dynamics365Configuration','as':_0xcea7('0xb'),'attributes':['id',_0xcea7('0x2'),_0xcea7('0xc')],'include':[{'model':_0xcea7('0xd'),'as':_0xcea7('0xe'),'attributes':['id',_0xcea7('0xf'),_0xcea7('0x10'),_0xcea7('0x11')],'include':[{'model':_0xcea7('0x12'),'as':'Variable','attributes':['id',_0xcea7('0x2')]}]},{'model':_0xcea7('0xd'),'as':'Descriptions','attributes':['id',_0xcea7('0xf'),_0xcea7('0x10'),_0xcea7('0x13'),'keyType',_0xcea7('0x14'),'variableName'],'include':[{'model':_0xcea7('0x12'),'as':_0xcea7('0x12'),'attributes':['id',_0xcea7('0x2')]}]},{'model':_0xcea7('0xd'),'as':_0xcea7('0x15'),'attributes':['id',_0xcea7('0xf'),_0xcea7('0x10'),'idField','nameField',_0xcea7('0x16'),'variableName'],'include':[{'model':_0xcea7('0x12'),'as':'Variable','attributes':['id',_0xcea7('0x2')]}]}]}]},'log':'GetDynamics365Account'});};};
\ No newline at end of file
index 34c77fe..288febf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9a19=['../../client','getFreshdeskAccounts','GetFreshdeskAccount','name','username','apiKey','remoteUri','serverUrl','FreshdeskConfiguration','Configurations','Tag','content','variableName','FreshdeskField','Descriptions','type','keyType','keyContent','Variable','Fields','idField','nameField','customField'];(function(_0xdcb9d,_0x4031cb){var _0x6d9f1=function(_0x5a5a77){while(--_0x5a5a77){_0xdcb9d['push'](_0xdcb9d['shift']());}};_0x6d9f1(++_0x4031cb);}(_0x9a19,0x114));var _0x99a1=function(_0xfc0976,_0x33776f){_0xfc0976=_0xfc0976-0x0;var _0x23579f=_0x9a19[_0xfc0976];return _0x23579f;};'use strict';var client=require(_0x99a1('0x0'));exports[_0x99a1('0x1')]=function(){return function(_0x3d860b){return client['Request'](_0x99a1('0x2'),{'options':{'raw':![],'attributes':['id',_0x99a1('0x3'),_0x99a1('0x4'),_0x99a1('0x5'),_0x99a1('0x6'),_0x99a1('0x7')],'include':[{'model':_0x99a1('0x8'),'as':_0x99a1('0x9'),'attributes':['id',_0x99a1('0x3')],'include':[{'model':_0x99a1('0xa'),'attributes':['id',_0x99a1('0x3')]},{'model':'FreshdeskField','as':'Subjects','attributes':['id','type',_0x99a1('0xb'),_0x99a1('0xc')],'include':[{'model':'Variable','as':'Variable','attributes':['id',_0x99a1('0x3')]}]},{'model':_0x99a1('0xd'),'as':_0x99a1('0xe'),'attributes':['id',_0x99a1('0xf'),_0x99a1('0xb'),'key',_0x99a1('0x10'),_0x99a1('0x11'),_0x99a1('0xc')],'include':[{'model':_0x99a1('0x12'),'as':_0x99a1('0x12'),'attributes':['id',_0x99a1('0x3')]}]},{'model':_0x99a1('0xd'),'as':_0x99a1('0x13'),'attributes':['id',_0x99a1('0xf'),_0x99a1('0xb'),_0x99a1('0x14'),_0x99a1('0x15'),_0x99a1('0x16'),_0x99a1('0xc')],'include':[{'model':_0x99a1('0x12'),'as':'Variable','attributes':['id',_0x99a1('0x3')]}]}]}]},'log':_0x99a1('0x2')});};};
\ No newline at end of file
+var _0x00bb=['username','apiKey','serverUrl','FreshdeskConfiguration','name','FreshdeskField','Subjects','type','content','variableName','Descriptions','keyType','Variable','Fields','nameField','customField','../../client','getFreshdeskAccounts','GetFreshdeskAccount'];(function(_0x58d76f,_0x264950){var _0x57519b=function(_0x5203e6){while(--_0x5203e6){_0x58d76f['push'](_0x58d76f['shift']());}};_0x57519b(++_0x264950);}(_0x00bb,0x1d8));var _0xb00b=function(_0x2d7f0e,_0x3e6fbd){_0x2d7f0e=_0x2d7f0e-0x0;var _0x110b07=_0x00bb[_0x2d7f0e];return _0x110b07;};'use strict';var client=require(_0xb00b('0x0'));exports[_0xb00b('0x1')]=function(){return function(_0x468a51){return client['Request'](_0xb00b('0x2'),{'options':{'raw':![],'attributes':['id','name',_0xb00b('0x3'),_0xb00b('0x4'),'remoteUri',_0xb00b('0x5')],'include':[{'model':_0xb00b('0x6'),'as':'Configurations','attributes':['id','name'],'include':[{'model':'Tag','attributes':['id',_0xb00b('0x7')]},{'model':_0xb00b('0x8'),'as':_0xb00b('0x9'),'attributes':['id',_0xb00b('0xa'),_0xb00b('0xb'),_0xb00b('0xc')],'include':[{'model':'Variable','as':'Variable','attributes':['id',_0xb00b('0x7')]}]},{'model':_0xb00b('0x8'),'as':_0xb00b('0xd'),'attributes':['id',_0xb00b('0xa'),_0xb00b('0xb'),'key',_0xb00b('0xe'),'keyContent','variableName'],'include':[{'model':'Variable','as':_0xb00b('0xf'),'attributes':['id',_0xb00b('0x7')]}]},{'model':_0xb00b('0x8'),'as':_0xb00b('0x10'),'attributes':['id',_0xb00b('0xa'),_0xb00b('0xb'),'idField',_0xb00b('0x11'),_0xb00b('0x12'),'variableName'],'include':[{'model':_0xb00b('0xf'),'as':_0xb00b('0xf'),'attributes':['id','name']}]}]}]},'log':'GetFreshdeskAccount'});};};
\ No newline at end of file
index 7431fe5..9ba74fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7266=['name','moduleSearch','moduleCreate','ticketType','SalesforceField','Subjects','Variable','Descriptions','../../client','getSalesforceAccounts','Request','GetSalesforceAccount','password','remoteUri','securityToken','serverUrl','type','SalesforceConfiguration','Configurations'];(function(_0x58965a,_0x2e71db){var _0x254efc=function(_0xf14fb4){while(--_0xf14fb4){_0x58965a['push'](_0x58965a['shift']());}};_0x254efc(++_0x2e71db);}(_0x7266,0xec));var _0x6726=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x7266[_0x4cf98e];return _0x1623ac;};'use strict';var client=require(_0x6726('0x0'));exports[_0x6726('0x1')]=function(){return function(_0x10b37e){return client[_0x6726('0x2')](_0x6726('0x3'),{'options':{'raw':![],'attributes':['id','name','username',_0x6726('0x4'),_0x6726('0x5'),'clientId','clientSecret',_0x6726('0x6'),_0x6726('0x7'),_0x6726('0x8')],'include':[{'model':_0x6726('0x9'),'as':_0x6726('0xa'),'attributes':['id',_0x6726('0xb'),_0x6726('0xc'),_0x6726('0xd'),_0x6726('0xe')],'include':[{'model':_0x6726('0xf'),'as':_0x6726('0x10'),'include':[{'model':_0x6726('0x11'),'as':_0x6726('0x11'),'attributes':['id','name']}]},{'model':_0x6726('0xf'),'as':_0x6726('0x12'),'include':[{'model':_0x6726('0x11'),'as':_0x6726('0x11'),'attributes':['id','name']}]},{'model':_0x6726('0xf'),'as':'Fields','include':[{'model':_0x6726('0x11'),'as':_0x6726('0x11'),'attributes':['id','name']}]}]}]},'log':_0x6726('0x3')});};};
\ No newline at end of file
+var _0x45aa=['remoteUri','clientId','clientSecret','securityToken','serverUrl','type','SalesforceConfiguration','Configurations','moduleSearch','ticketType','SalesforceField','Subjects','Variable','Descriptions','getSalesforceAccounts','Request','GetSalesforceAccount','name','username','password'];(function(_0x5ef040,_0x1956b8){var _0x11f05e=function(_0xd01bf9){while(--_0xd01bf9){_0x5ef040['push'](_0x5ef040['shift']());}};_0x11f05e(++_0x1956b8);}(_0x45aa,0x176));var _0xa45a=function(_0x27d8cc,_0x4e1c5e){_0x27d8cc=_0x27d8cc-0x0;var _0xfcae51=_0x45aa[_0x27d8cc];return _0xfcae51;};'use strict';var client=require('../../client');exports[_0xa45a('0x0')]=function(){return function(_0x30c7a9){return client[_0xa45a('0x1')](_0xa45a('0x2'),{'options':{'raw':![],'attributes':['id',_0xa45a('0x3'),_0xa45a('0x4'),_0xa45a('0x5'),_0xa45a('0x6'),_0xa45a('0x7'),_0xa45a('0x8'),_0xa45a('0x9'),_0xa45a('0xa'),_0xa45a('0xb')],'include':[{'model':_0xa45a('0xc'),'as':_0xa45a('0xd'),'attributes':['id',_0xa45a('0x3'),_0xa45a('0xe'),'moduleCreate',_0xa45a('0xf')],'include':[{'model':_0xa45a('0x10'),'as':_0xa45a('0x11'),'include':[{'model':_0xa45a('0x12'),'as':_0xa45a('0x12'),'attributes':['id',_0xa45a('0x3')]}]},{'model':_0xa45a('0x10'),'as':_0xa45a('0x13'),'include':[{'model':_0xa45a('0x12'),'as':_0xa45a('0x12'),'attributes':['id',_0xa45a('0x3')]}]},{'model':_0xa45a('0x10'),'as':'Fields','include':[{'model':'Variable','as':_0xa45a('0x12'),'attributes':['id','name']}]}]}]},'log':_0xa45a('0x2')});};};
\ No newline at end of file
index 88f4566..00655ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf8db=['Request','GetServicenowAccount','name','description','username','email','remoteUri','serverUrl','ServicenowConfiguration','Configurations','Subjects','variableName','Variable','ServicenowField','Descriptions','type','content','key','keyType','keyContent','Fields','idField','nameField','customField','GetServicenowkAccount','../../client'];(function(_0x3c2c2a,_0x2bce72){var _0xf1156b=function(_0x2d874e){while(--_0x2d874e){_0x3c2c2a['push'](_0x3c2c2a['shift']());}};_0xf1156b(++_0x2bce72);}(_0xf8db,0x16b));var _0xbf8d=function(_0xa30527,_0x331991){_0xa30527=_0xa30527-0x0;var _0xf40364=_0xf8db[_0xa30527];return _0xf40364;};'use strict';var client=require(_0xbf8d('0x0'));exports['getServicenowAccounts']=function(){return function(_0x23d6ee){return client[_0xbf8d('0x1')](_0xbf8d('0x2'),{'options':{'raw':![],'attributes':['id',_0xbf8d('0x3'),_0xbf8d('0x4'),_0xbf8d('0x5'),'password',_0xbf8d('0x6'),_0xbf8d('0x7'),_0xbf8d('0x8')],'include':[{'model':_0xbf8d('0x9'),'as':_0xbf8d('0xa'),'attributes':['id',_0xbf8d('0x3')],'include':[{'model':'ServicenowField','as':_0xbf8d('0xb'),'attributes':['id','type','content',_0xbf8d('0xc')],'include':[{'model':_0xbf8d('0xd'),'as':_0xbf8d('0xd'),'attributes':['id',_0xbf8d('0x3')]}]},{'model':_0xbf8d('0xe'),'as':_0xbf8d('0xf'),'attributes':['id',_0xbf8d('0x10'),_0xbf8d('0x11'),_0xbf8d('0x12'),_0xbf8d('0x13'),_0xbf8d('0x14'),_0xbf8d('0xc')],'include':[{'model':_0xbf8d('0xd'),'as':_0xbf8d('0xd'),'attributes':['id',_0xbf8d('0x3')]}]},{'model':_0xbf8d('0xe'),'as':_0xbf8d('0x15'),'attributes':['id',_0xbf8d('0x10'),_0xbf8d('0x11'),_0xbf8d('0x16'),_0xbf8d('0x17'),_0xbf8d('0x18'),_0xbf8d('0xc')],'include':[{'model':_0xbf8d('0xd'),'as':_0xbf8d('0xd'),'attributes':['id',_0xbf8d('0x3')]}]}]}]},'log':_0xbf8d('0x19')});};};
\ No newline at end of file
+var _0x2028=['GetServicenowAccount','name','description','password','remoteUri','serverUrl','ServicenowConfiguration','Configurations','Subjects','type','content','variableName','Variable','ServicenowField','Descriptions','keyType','keyContent','nameField','customField','GetServicenowkAccount'];(function(_0x20b3a7,_0x1dc916){var _0x1b1917=function(_0x316d57){while(--_0x316d57){_0x20b3a7['push'](_0x20b3a7['shift']());}};_0x1b1917(++_0x1dc916);}(_0x2028,0x1e0));var _0x8202=function(_0x59a3b9,_0x2cc21a){_0x59a3b9=_0x59a3b9-0x0;var _0x5dda96=_0x2028[_0x59a3b9];return _0x5dda96;};'use strict';var client=require('../../client');exports['getServicenowAccounts']=function(){return function(_0x214867){return client['Request'](_0x8202('0x0'),{'options':{'raw':![],'attributes':['id',_0x8202('0x1'),_0x8202('0x2'),'username',_0x8202('0x3'),'email',_0x8202('0x4'),_0x8202('0x5')],'include':[{'model':_0x8202('0x6'),'as':_0x8202('0x7'),'attributes':['id','name'],'include':[{'model':'ServicenowField','as':_0x8202('0x8'),'attributes':['id',_0x8202('0x9'),_0x8202('0xa'),_0x8202('0xb')],'include':[{'model':'Variable','as':_0x8202('0xc'),'attributes':['id',_0x8202('0x1')]}]},{'model':_0x8202('0xd'),'as':_0x8202('0xe'),'attributes':['id',_0x8202('0x9'),_0x8202('0xa'),'key',_0x8202('0xf'),_0x8202('0x10'),_0x8202('0xb')],'include':[{'model':_0x8202('0xc'),'as':'Variable','attributes':['id',_0x8202('0x1')]}]},{'model':_0x8202('0xd'),'as':'Fields','attributes':['id',_0x8202('0x9'),_0x8202('0xa'),'idField',_0x8202('0x11'),_0x8202('0x12'),'variableName'],'include':[{'model':'Variable','as':'Variable','attributes':['id','name']}]}]}]},'log':_0x8202('0x13')});};};
\ No newline at end of file
index 4142180..b563a37 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9eba=['content','variableName','Variable','type','key','keyContent','Fields','idField','nameField','customField','../../client','getSugarcrmAccounts','Request','GetSugarcrmAccount','name','username','password','remoteUri','serverUrl','Configurations','SugarcrmField','Subjects'];(function(_0x2acf14,_0x24caef){var _0x39e318=function(_0x2330b2){while(--_0x2330b2){_0x2acf14['push'](_0x2acf14['shift']());}};_0x39e318(++_0x24caef);}(_0x9eba,0x112));var _0xa9eb=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0x9eba[_0x3bf83f];return _0x22c4a9;};'use strict';var client=require(_0xa9eb('0x0'));exports[_0xa9eb('0x1')]=function(){return function(_0x5b1e59){return client[_0xa9eb('0x2')](_0xa9eb('0x3'),{'options':{'raw':![],'attributes':['id',_0xa9eb('0x4'),_0xa9eb('0x5'),_0xa9eb('0x6'),_0xa9eb('0x7'),_0xa9eb('0x8')],'include':[{'model':'SugarcrmConfiguration','as':_0xa9eb('0x9'),'attributes':['id','name'],'include':[{'model':_0xa9eb('0xa'),'as':_0xa9eb('0xb'),'attributes':['id','type',_0xa9eb('0xc'),_0xa9eb('0xd')],'include':[{'model':_0xa9eb('0xe'),'as':'Variable','attributes':['id','name']}]},{'model':_0xa9eb('0xa'),'as':'Descriptions','attributes':['id',_0xa9eb('0xf'),_0xa9eb('0xc'),_0xa9eb('0x10'),'keyType',_0xa9eb('0x11'),_0xa9eb('0xd')],'include':[{'model':'Variable','as':_0xa9eb('0xe'),'attributes':['id',_0xa9eb('0x4')]}]},{'model':_0xa9eb('0xa'),'as':_0xa9eb('0x12'),'attributes':['id',_0xa9eb('0xf'),_0xa9eb('0xc'),_0xa9eb('0x13'),_0xa9eb('0x14'),_0xa9eb('0x15'),_0xa9eb('0xd')],'include':[{'model':'Variable','as':_0xa9eb('0xe'),'attributes':['id',_0xa9eb('0x4')]}]}]}]},'log':_0xa9eb('0x3')});};};
\ No newline at end of file
+var _0x73e2=['keyContent','variableName','idField','nameField','customField','../../client','getSugarcrmAccounts','Request','GetSugarcrmAccount','name','username','password','serverUrl','SugarcrmConfiguration','Configurations','Subjects','type','Variable','content','key','keyType'];(function(_0x560924,_0x258a47){var _0x5c694d=function(_0x599a81){while(--_0x599a81){_0x560924['push'](_0x560924['shift']());}};_0x5c694d(++_0x258a47);}(_0x73e2,0xc2));var _0x273e=function(_0x14a91f,_0xa87c0a){_0x14a91f=_0x14a91f-0x0;var _0x3ecd21=_0x73e2[_0x14a91f];return _0x3ecd21;};'use strict';var client=require(_0x273e('0x0'));exports[_0x273e('0x1')]=function(){return function(_0xccfefd){return client[_0x273e('0x2')](_0x273e('0x3'),{'options':{'raw':![],'attributes':['id',_0x273e('0x4'),_0x273e('0x5'),_0x273e('0x6'),'remoteUri',_0x273e('0x7')],'include':[{'model':_0x273e('0x8'),'as':_0x273e('0x9'),'attributes':['id',_0x273e('0x4')],'include':[{'model':'SugarcrmField','as':_0x273e('0xa'),'attributes':['id',_0x273e('0xb'),'content','variableName'],'include':[{'model':_0x273e('0xc'),'as':_0x273e('0xc'),'attributes':['id',_0x273e('0x4')]}]},{'model':'SugarcrmField','as':'Descriptions','attributes':['id',_0x273e('0xb'),_0x273e('0xd'),_0x273e('0xe'),_0x273e('0xf'),_0x273e('0x10'),_0x273e('0x11')],'include':[{'model':_0x273e('0xc'),'as':_0x273e('0xc'),'attributes':['id','name']}]},{'model':'SugarcrmField','as':'Fields','attributes':['id','type',_0x273e('0xd'),_0x273e('0x12'),_0x273e('0x13'),_0x273e('0x14'),_0x273e('0x11')],'include':[{'model':_0x273e('0xc'),'as':_0x273e('0xc'),'attributes':['id',_0x273e('0x4')]}]}]}]},'log':_0x273e('0x3')});};};
\ No newline at end of file
index b6f76de..3a60428 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3557=['VtigerField','type','content','variableName','Variable','Descriptions','key','keyType','keyContent','Fields','nameField','customField','../../client','Request','GetVtigerAccount','username','remoteUri','serverUrl','Configurations','name'];(function(_0x425541,_0x5dec0e){var _0x455616=function(_0x28e721){while(--_0x28e721){_0x425541['push'](_0x425541['shift']());}};_0x455616(++_0x5dec0e);}(_0x3557,0xc0));var _0x7355=function(_0x5bccbf,_0x547e42){_0x5bccbf=_0x5bccbf-0x0;var _0x2158c6=_0x3557[_0x5bccbf];return _0x2158c6;};'use strict';var client=require(_0x7355('0x0'));exports['getVtigerAccounts']=function(){return function(_0x674fe9){return client[_0x7355('0x1')](_0x7355('0x2'),{'options':{'raw':![],'attributes':['id','name','description',_0x7355('0x3'),'accessKey',_0x7355('0x4'),_0x7355('0x5')],'include':[{'model':'VtigerConfiguration','as':_0x7355('0x6'),'attributes':['id',_0x7355('0x7')],'include':[{'model':_0x7355('0x8'),'as':'Subjects','attributes':['id',_0x7355('0x9'),_0x7355('0xa'),_0x7355('0xb')],'include':[{'model':'Variable','as':_0x7355('0xc'),'attributes':['id',_0x7355('0x7')]}]},{'model':_0x7355('0x8'),'as':_0x7355('0xd'),'attributes':['id',_0x7355('0x9'),'content',_0x7355('0xe'),_0x7355('0xf'),_0x7355('0x10'),_0x7355('0xb')],'include':[{'model':_0x7355('0xc'),'as':_0x7355('0xc'),'attributes':['id','name']}]},{'model':_0x7355('0x8'),'as':_0x7355('0x11'),'attributes':['id',_0x7355('0x9'),'content','idField',_0x7355('0x12'),_0x7355('0x13'),_0x7355('0xb')],'include':[{'model':_0x7355('0xc'),'as':'Variable','attributes':['id',_0x7355('0x7')]}]}]}]},'log':'GetVtigerAccount'});};};
\ No newline at end of file
+var _0xc0ad=['name','description','username','accessKey','remoteUri','serverUrl','VtigerConfiguration','VtigerField','Subjects','content','variableName','Variable','Descriptions','key','keyContent','Fields','type','nameField','customField','../../client','Request','GetVtigerAccount'];(function(_0x50a967,_0x23368b){var _0x1208d9=function(_0x474c2f){while(--_0x474c2f){_0x50a967['push'](_0x50a967['shift']());}};_0x1208d9(++_0x23368b);}(_0xc0ad,0x6b));var _0xdc0a=function(_0x190534,_0x277d04){_0x190534=_0x190534-0x0;var _0x32086c=_0xc0ad[_0x190534];return _0x32086c;};'use strict';var client=require(_0xdc0a('0x0'));exports['getVtigerAccounts']=function(){return function(_0x3f6d3d){return client[_0xdc0a('0x1')](_0xdc0a('0x2'),{'options':{'raw':![],'attributes':['id',_0xdc0a('0x3'),_0xdc0a('0x4'),_0xdc0a('0x5'),_0xdc0a('0x6'),_0xdc0a('0x7'),_0xdc0a('0x8')],'include':[{'model':_0xdc0a('0x9'),'as':'Configurations','attributes':['id',_0xdc0a('0x3')],'include':[{'model':_0xdc0a('0xa'),'as':_0xdc0a('0xb'),'attributes':['id','type',_0xdc0a('0xc'),_0xdc0a('0xd')],'include':[{'model':_0xdc0a('0xe'),'as':_0xdc0a('0xe'),'attributes':['id','name']}]},{'model':_0xdc0a('0xa'),'as':_0xdc0a('0xf'),'attributes':['id','type','content',_0xdc0a('0x10'),'keyType',_0xdc0a('0x11'),_0xdc0a('0xd')],'include':[{'model':'Variable','as':_0xdc0a('0xe'),'attributes':['id','name']}]},{'model':'VtigerField','as':_0xdc0a('0x12'),'attributes':['id',_0xdc0a('0x13'),'content','idField',_0xdc0a('0x14'),_0xdc0a('0x15'),_0xdc0a('0xd')],'include':[{'model':_0xdc0a('0xe'),'as':'Variable','attributes':['id',_0xdc0a('0x3')]}]}]}]},'log':'GetVtigerAccount'});};};
\ No newline at end of file
index 3d88ad3..abad2dc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x24bb=['ZendeskField','Descriptions','key','keyType','Fields','idField','nameField','customField','../../client','getZendeskAccounts','GetZendeskAccount','password','token','authType','ZendeskConfiguration','Configurations','Subjects','type','content','variableName','Variable','name'];(function(_0x62396d,_0x1ad1ba){var _0x49db3e=function(_0x4ef041){while(--_0x4ef041){_0x62396d['push'](_0x62396d['shift']());}};_0x49db3e(++_0x1ad1ba);}(_0x24bb,0x1d6));var _0xb24b=function(_0x1f1b48,_0x2f1a26){_0x1f1b48=_0x1f1b48-0x0;var _0x149fd5=_0x24bb[_0x1f1b48];return _0x149fd5;};'use strict';var client=require(_0xb24b('0x0'));exports[_0xb24b('0x1')]=function(){return function(_0x50e3cb){return client['Request'](_0xb24b('0x2'),{'options':{'raw':![],'attributes':['id','name','username',_0xb24b('0x3'),_0xb24b('0x4'),'remoteUri',_0xb24b('0x5'),'serverUrl','type'],'include':[{'model':_0xb24b('0x6'),'as':_0xb24b('0x7'),'attributes':['id','name'],'include':[{'model':'Tag','attributes':['id','name']},{'model':'ZendeskField','as':_0xb24b('0x8'),'attributes':['id',_0xb24b('0x9'),_0xb24b('0xa'),_0xb24b('0xb')],'include':[{'model':_0xb24b('0xc'),'as':_0xb24b('0xc'),'attributes':['id',_0xb24b('0xd')]}]},{'model':_0xb24b('0xe'),'as':_0xb24b('0xf'),'attributes':['id',_0xb24b('0x9'),_0xb24b('0xa'),_0xb24b('0x10'),_0xb24b('0x11'),'keyContent',_0xb24b('0xb')],'include':[{'model':_0xb24b('0xc'),'as':_0xb24b('0xc'),'attributes':['id',_0xb24b('0xd')]}]},{'model':_0xb24b('0xe'),'as':_0xb24b('0x12'),'attributes':['id',_0xb24b('0x9'),_0xb24b('0xa'),_0xb24b('0x13'),_0xb24b('0x14'),_0xb24b('0x15'),'variableName'],'include':[{'model':_0xb24b('0xc'),'as':_0xb24b('0xc'),'attributes':['id','name']}]}]}]},'log':'GetZendeskAccount'});};};
\ No newline at end of file
+var _0xfa68=['Descriptions','key','keyType','idField','nameField','../../client','getZendeskAccounts','Request','GetZendeskAccount','username','password','token','serverUrl','type','ZendeskConfiguration','Configurations','Tag','name','ZendeskField','Subjects','content','variableName','Variable'];(function(_0x595272,_0x406703){var _0x1f431c=function(_0x26cee7){while(--_0x26cee7){_0x595272['push'](_0x595272['shift']());}};_0x1f431c(++_0x406703);}(_0xfa68,0xd4));var _0x8fa6=function(_0x12df47,_0x263b3f){_0x12df47=_0x12df47-0x0;var _0xbc29bd=_0xfa68[_0x12df47];return _0xbc29bd;};'use strict';var client=require(_0x8fa6('0x0'));exports[_0x8fa6('0x1')]=function(){return function(_0x28acd4){return client[_0x8fa6('0x2')](_0x8fa6('0x3'),{'options':{'raw':![],'attributes':['id','name',_0x8fa6('0x4'),_0x8fa6('0x5'),_0x8fa6('0x6'),'remoteUri','authType',_0x8fa6('0x7'),_0x8fa6('0x8')],'include':[{'model':_0x8fa6('0x9'),'as':_0x8fa6('0xa'),'attributes':['id','name'],'include':[{'model':_0x8fa6('0xb'),'attributes':['id',_0x8fa6('0xc')]},{'model':_0x8fa6('0xd'),'as':_0x8fa6('0xe'),'attributes':['id',_0x8fa6('0x8'),_0x8fa6('0xf'),_0x8fa6('0x10')],'include':[{'model':_0x8fa6('0x11'),'as':_0x8fa6('0x11'),'attributes':['id',_0x8fa6('0xc')]}]},{'model':_0x8fa6('0xd'),'as':_0x8fa6('0x12'),'attributes':['id',_0x8fa6('0x8'),_0x8fa6('0xf'),_0x8fa6('0x13'),_0x8fa6('0x14'),'keyContent','variableName'],'include':[{'model':_0x8fa6('0x11'),'as':_0x8fa6('0x11'),'attributes':['id','name']}]},{'model':_0x8fa6('0xd'),'as':'Fields','attributes':['id',_0x8fa6('0x8'),_0x8fa6('0xf'),_0x8fa6('0x15'),_0x8fa6('0x16'),'customField',_0x8fa6('0x10')],'include':[{'model':_0x8fa6('0x11'),'as':_0x8fa6('0x11'),'attributes':['id','name']}]}]}]},'log':_0x8fa6('0x3')});};};
\ No newline at end of file
index 507c3bb..d9428c9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf251=['Fields','idField','nameField','customField','../../client','getZohoAccounts','GetZohoAccount','name','ZohoConfiguration','Configurations','type','content','Variable','ZohoField','Descriptions','keyContent','variableName'];(function(_0x4314d7,_0x355218){var _0x5c599b=function(_0x556354){while(--_0x556354){_0x4314d7['push'](_0x4314d7['shift']());}};_0x5c599b(++_0x355218);}(_0xf251,0xd0));var _0x1f25=function(_0x1b5838,_0x25ec5b){_0x1b5838=_0x1b5838-0x0;var _0x213065=_0xf251[_0x1b5838];return _0x213065;};'use strict';var client=require(_0x1f25('0x0'));exports[_0x1f25('0x1')]=function(){return function(_0xef755){return client['Request'](_0x1f25('0x2'),{'options':{'raw':![],'attributes':['id',_0x1f25('0x3'),'description','authToken','host','serverUrl'],'include':[{'model':_0x1f25('0x4'),'as':_0x1f25('0x5'),'attributes':['id','name'],'include':[{'model':'ZohoField','as':'Subjects','attributes':['id',_0x1f25('0x6'),_0x1f25('0x7'),'variableName'],'include':[{'model':'Variable','as':_0x1f25('0x8'),'attributes':['id','name']}]},{'model':_0x1f25('0x9'),'as':_0x1f25('0xa'),'attributes':['id','type',_0x1f25('0x7'),'key','keyType',_0x1f25('0xb'),_0x1f25('0xc')],'include':[{'model':_0x1f25('0x8'),'as':'Variable','attributes':['id',_0x1f25('0x3')]}]},{'model':_0x1f25('0x9'),'as':_0x1f25('0xd'),'attributes':['id','type',_0x1f25('0x7'),_0x1f25('0xe'),_0x1f25('0xf'),_0x1f25('0x10'),_0x1f25('0xc')],'include':[{'model':_0x1f25('0x8'),'as':'Variable','attributes':['id','name']}]}]}]},'log':'GetZohoAccount'});};};
\ No newline at end of file
+var _0x8ec3=['Request','GetZohoAccount','name','description','authToken','host','Subjects','type','content','variableName','Variable','ZohoField','keyContent','Fields','idField','customField','../../client','getZohoAccounts'];(function(_0x568496,_0x565afd){var _0x26c5c1=function(_0x4d251e){while(--_0x4d251e){_0x568496['push'](_0x568496['shift']());}};_0x26c5c1(++_0x565afd);}(_0x8ec3,0xe8));var _0x38ec=function(_0x1aff50,_0x45b78e){_0x1aff50=_0x1aff50-0x0;var _0x556812=_0x8ec3[_0x1aff50];return _0x556812;};'use strict';var client=require(_0x38ec('0x0'));exports[_0x38ec('0x1')]=function(){return function(_0x351d76){return client[_0x38ec('0x2')](_0x38ec('0x3'),{'options':{'raw':![],'attributes':['id',_0x38ec('0x4'),_0x38ec('0x5'),_0x38ec('0x6'),_0x38ec('0x7'),'serverUrl'],'include':[{'model':'ZohoConfiguration','as':'Configurations','attributes':['id',_0x38ec('0x4')],'include':[{'model':'ZohoField','as':_0x38ec('0x8'),'attributes':['id',_0x38ec('0x9'),_0x38ec('0xa'),_0x38ec('0xb')],'include':[{'model':_0x38ec('0xc'),'as':_0x38ec('0xc'),'attributes':['id',_0x38ec('0x4')]}]},{'model':_0x38ec('0xd'),'as':'Descriptions','attributes':['id',_0x38ec('0x9'),'content','key','keyType',_0x38ec('0xe'),_0x38ec('0xb')],'include':[{'model':_0x38ec('0xc'),'as':_0x38ec('0xc'),'attributes':['id',_0x38ec('0x4')]}]},{'model':_0x38ec('0xd'),'as':_0x38ec('0xf'),'attributes':['id',_0x38ec('0x9'),_0x38ec('0xa'),_0x38ec('0x10'),'nameField',_0x38ec('0x11'),'variableName'],'include':[{'model':_0x38ec('0xc'),'as':_0x38ec('0xc'),'attributes':['id',_0x38ec('0x4')]}]}]}]},'log':_0x38ec('0x3')});};};
\ No newline at end of file
index 4785c74..f4c66b5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd1fe=['queuecallerleaveAt','diff','seconds','inbound','calleridnum','queue','accountcode','toNumber','uniqueid','CreateMemberReport','voiceDialReport','starttime','endtime','outbound','exten','agent','../client','voiceQueueReport','queuecallercompleteAt','queuecallerexitAt','Request','voice','lastAssignedTo','isNil','interface','format','SIP/%s','TALKING'];(function(_0x344174,_0x21e126){var _0x3bfe4b=function(_0x23d167){while(--_0x23d167){_0x344174['push'](_0x344174['shift']());}};_0x3bfe4b(++_0x21e126);}(_0xd1fe,0x160));var _0xed1f=function(_0x1a6c44,_0xd872f){_0x1a6c44=_0x1a6c44-0x0;var _0x528f87=_0xd1fe[_0x1a6c44];return _0x528f87;};'use strict';var moment=require('moment');var _=require('lodash');var util=require('util');var client=require(_0xed1f('0x0'));exports[_0xed1f('0x1')]=function(_0xe1cb0f){var _0x3ef501=_0xe1cb0f[_0xed1f('0x2')]||_0xe1cb0f[_0xed1f('0x3')];return client[_0xed1f('0x4')]('CreateMemberReport',{'body':{'channel':_0xed1f('0x5'),'membername':_0xe1cb0f[_0xed1f('0x6')],'interface':_[_0xed1f('0x7')](_0xe1cb0f[_0xed1f('0x8')])?util[_0xed1f('0x9')](_0xed1f('0xa'),_0xe1cb0f[_0xed1f('0x6')]):_0xe1cb0f['interface'],'type':_0xed1f('0xb'),'enterAt':_0xe1cb0f[_0xed1f('0xc')],'exitAt':_0x3ef501,'duration':moment(_0x3ef501)[_0xed1f('0xd')](_0xe1cb0f['queuecallerleaveAt'],_0xed1f('0xe')),'data1':_0xed1f('0xf'),'data2':_0xe1cb0f[_0xed1f('0x10')],'data3':_0xe1cb0f['exten'],'data4':null,'data5':_0xe1cb0f[_0xed1f('0x11')],'role':'agent','internal':_0xe1cb0f[_0xed1f('0x12')]?_[_0xed1f('0x13')](_0xe1cb0f[_0xed1f('0x12')]):undefined,'uniqueid':_0xe1cb0f[_0xed1f('0x14')]},'log':_0xed1f('0x15')});};exports[_0xed1f('0x16')]=function(_0x6e68b3){return client[_0xed1f('0x4')](_0xed1f('0x15'),{'body':{'channel':_0xed1f('0x5'),'membername':_0x6e68b3['membername'],'interface':_0x6e68b3[_0xed1f('0x8')],'type':_0xed1f('0xb'),'enterAt':_0x6e68b3[_0xed1f('0x17')],'exitAt':_0x6e68b3[_0xed1f('0x18')],'duration':moment(_0x6e68b3[_0xed1f('0x18')])[_0xed1f('0xd')](_0x6e68b3[_0xed1f('0x17')],'seconds')>=0x0?moment(_0x6e68b3['endtime'])[_0xed1f('0xd')](_0x6e68b3['starttime'],'seconds'):null,'data1':_0xed1f('0x19'),'data2':_0x6e68b3[_0xed1f('0x12')],'data3':_0x6e68b3[_0xed1f('0x1a')],'data4':_0x6e68b3['dialstring']||null,'role':_0xed1f('0x1b'),'internal':_0x6e68b3[_0xed1f('0x12')]?_['toNumber'](_0x6e68b3[_0xed1f('0x12')]):undefined,'uniqueid':_0x6e68b3['uniqueid']},'log':_0xed1f('0x15')});};
\ No newline at end of file
+var _0x8bd9=['../client','voiceQueueReport','queuecallercompleteAt','queuecallerexitAt','Request','CreateMemberReport','lastAssignedTo','isNil','interface','format','TALKING','queuecallerleaveAt','diff','seconds','inbound','calleridnum','accountcode','toNumber','uniqueid','voiceDialReport','voice','membername','starttime','endtime','outbound','exten','agent','moment','lodash','util'];(function(_0x48918c,_0x1d2114){var _0x4aec8f=function(_0x504478){while(--_0x504478){_0x48918c['push'](_0x48918c['shift']());}};_0x4aec8f(++_0x1d2114);}(_0x8bd9,0x93));var _0x98bd=function(_0x1c0991,_0x4f22d2){_0x1c0991=_0x1c0991-0x0;var _0x5034de=_0x8bd9[_0x1c0991];return _0x5034de;};'use strict';var moment=require(_0x98bd('0x0'));var _=require(_0x98bd('0x1'));var util=require(_0x98bd('0x2'));var client=require(_0x98bd('0x3'));exports[_0x98bd('0x4')]=function(_0xc952da){var _0x46c85a=_0xc952da[_0x98bd('0x5')]||_0xc952da[_0x98bd('0x6')];return client[_0x98bd('0x7')](_0x98bd('0x8'),{'body':{'channel':'voice','membername':_0xc952da[_0x98bd('0x9')],'interface':_[_0x98bd('0xa')](_0xc952da[_0x98bd('0xb')])?util[_0x98bd('0xc')]('SIP/%s',_0xc952da['lastAssignedTo']):_0xc952da[_0x98bd('0xb')],'type':_0x98bd('0xd'),'enterAt':_0xc952da[_0x98bd('0xe')],'exitAt':_0x46c85a,'duration':moment(_0x46c85a)[_0x98bd('0xf')](_0xc952da['queuecallerleaveAt'],_0x98bd('0x10')),'data1':_0x98bd('0x11'),'data2':_0xc952da[_0x98bd('0x12')],'data3':_0xc952da['exten'],'data4':null,'data5':_0xc952da['queue'],'role':'agent','internal':_0xc952da[_0x98bd('0x13')]?_[_0x98bd('0x14')](_0xc952da['accountcode']):undefined,'uniqueid':_0xc952da[_0x98bd('0x15')]},'log':_0x98bd('0x8')});};exports[_0x98bd('0x16')]=function(_0x18204c){return client['Request'](_0x98bd('0x8'),{'body':{'channel':_0x98bd('0x17'),'membername':_0x18204c[_0x98bd('0x18')],'interface':_0x18204c['interface'],'type':'TALKING','enterAt':_0x18204c[_0x98bd('0x19')],'exitAt':_0x18204c[_0x98bd('0x1a')],'duration':moment(_0x18204c[_0x98bd('0x1a')])['diff'](_0x18204c[_0x98bd('0x19')],_0x98bd('0x10'))>=0x0?moment(_0x18204c['endtime'])[_0x98bd('0xf')](_0x18204c[_0x98bd('0x19')],_0x98bd('0x10')):null,'data1':_0x98bd('0x1b'),'data2':_0x18204c[_0x98bd('0x13')],'data3':_0x18204c[_0x98bd('0x1c')],'data4':_0x18204c['dialstring']||null,'role':_0x98bd('0x1d'),'internal':_0x18204c[_0x98bd('0x13')]?_['toNumber'](_0x18204c[_0x98bd('0x13')]):undefined,'uniqueid':_0x18204c[_0x98bd('0x15')]},'log':_0x98bd('0x8')});};
\ No newline at end of file
index 07a73eb..c492d7d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e42=['name','../client','getTemplates','Request','GetTemplate'];(function(_0x432c48,_0x14a656){var _0x50547b=function(_0x461247){while(--_0x461247){_0x432c48['push'](_0x432c48['shift']());}};_0x50547b(++_0x14a656);}(_0x4e42,0x146));var _0x24e4=function(_0x5ca0b3,_0x33f5ef){_0x5ca0b3=_0x5ca0b3-0x0;var _0x6ba806=_0x4e42[_0x5ca0b3];return _0x6ba806;};'use strict';var client=require(_0x24e4('0x0'));exports[_0x24e4('0x1')]=function(_0x5d2789){return function(_0xe29aad){return client[_0x24e4('0x2')](_0x24e4('0x3'),{'options':{'raw':!![],'attributes':['id',_0x24e4('0x4'),'html']},'log':_0x24e4('0x3')});};};
\ No newline at end of file
+var _0x8633=['html','../client','getTemplates','Request','GetTemplate','name'];(function(_0x393d69,_0x3a8c83){var _0x3cee37=function(_0x462682){while(--_0x462682){_0x393d69['push'](_0x393d69['shift']());}};_0x3cee37(++_0x3a8c83);}(_0x8633,0x11b));var _0x3863=function(_0x785713,_0x131092){_0x785713=_0x785713-0x0;var _0x64ab6b=_0x8633[_0x785713];return _0x64ab6b;};'use strict';var client=require(_0x3863('0x0'));exports[_0x3863('0x1')]=function(_0x1e6825){return function(_0x342cab){return client[_0x3863('0x2')](_0x3863('0x3'),{'options':{'raw':!![],'attributes':['id',_0x3863('0x4'),_0x3863('0x5')]},'log':_0x3863('0x3')});};};
\ No newline at end of file
index 174d2d8..d4963f2 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(_0x22c0e4,_0x29114d){var _0x2bde8f=function(_0x4a9460){while(--_0x4a9460){_0x22c0e4['push'](_0x22c0e4['shift']());}};_0x2bde8f(++_0x29114d);}(_0xa9e0,0x123));var _0x0a9e=function(_0x21aec3,_0x5c97e9){_0x21aec3=_0x21aec3-0x0;var _0x288bbc=_0xa9e0[_0x21aec3];return _0x288bbc;};'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(_0x3b57d5,_0x28fd61){var _0x403ea9=function(_0x3f8367){while(--_0x3f8367){_0x3b57d5['push'](_0x3b57d5['shift']());}};_0x403ea9(++_0x28fd61);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0xa9e0[_0x3947c9];return _0x2e7871;};'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 1a0f3fc..2a5e51c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5af1=['registry','../client','getTrunks','Request','GetTrunk'];(function(_0xcfaa6d,_0x1afe7e){var _0x72987d=function(_0x3c7a40){while(--_0x3c7a40){_0xcfaa6d['push'](_0xcfaa6d['shift']());}};_0x72987d(++_0x1afe7e);}(_0x5af1,0x187));var _0x15af=function(_0x4b7b62,_0x4920a9){_0x4b7b62=_0x4b7b62-0x0;var _0x2280df=_0x5af1[_0x4b7b62];return _0x2280df;};'use strict';var client=require(_0x15af('0x0'));exports[_0x15af('0x1')]=function(_0x375ebd){return function(_0x206c30){return client[_0x15af('0x2')](_0x15af('0x3'),{'options':{'raw':!![],'where':{'active':0x1},'attributes':['id','name',_0x15af('0x4')]},'log':_0x15af('0x3')});};};
\ No newline at end of file
+var _0x51dd=['registry','../client','getTrunks','Request','GetTrunk','name'];(function(_0x2888fb,_0x3e79e9){var _0x92f5c2=function(_0x580505){while(--_0x580505){_0x2888fb['push'](_0x2888fb['shift']());}};_0x92f5c2(++_0x3e79e9);}(_0x51dd,0x15d));var _0xd51d=function(_0x19017b,_0x56d52c){_0x19017b=_0x19017b-0x0;var _0x3becdc=_0x51dd[_0x19017b];return _0x3becdc;};'use strict';var client=require(_0xd51d('0x0'));exports[_0xd51d('0x1')]=function(_0x290ea0){return function(_0x180f57){return client[_0xd51d('0x2')](_0xd51d('0x3'),{'options':{'raw':!![],'where':{'active':0x1},'attributes':['id',_0xd51d('0x4'),_0xd51d('0x5')]},'log':_0xd51d('0x3')});};};
\ No newline at end of file
index 6f746a3..1db6f0f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc9c5=['voicePause','phone','mobile','interface','getTelephones','GetUser','telephone','internal','savePause','PauseUser','saveUnpause','getAgent','ShowUser','agent','email','accountcode','getAgents','Request','name','fullname','online','pauseType','lastPauseAt'];(function(_0x5d33c3,_0x3c5d9c){var _0x4b97cc=function(_0xa08a41){while(--_0xa08a41){_0x5d33c3['push'](_0x5d33c3['shift']());}};_0x4b97cc(++_0x3c5d9c);}(_0xc9c5,0x83));var _0x5c9c=function(_0x566c5a,_0x42e09c){_0x566c5a=_0x566c5a-0x0;var _0x3c4abe=_0xc9c5[_0x566c5a];return _0x3c4abe;};'use strict';var client=require('../client');exports[_0x5c9c('0x0')]=function(){return function(){return client[_0x5c9c('0x1')]('GetUser',{'options':{'raw':![],'where':{'role':'agent'},'attributes':['id',_0x5c9c('0x2'),'email','accountcode',_0x5c9c('0x3'),_0x5c9c('0x4'),'lastLoginAt',_0x5c9c('0x5'),_0x5c9c('0x6'),_0x5c9c('0x7'),_0x5c9c('0x8'),_0x5c9c('0x9'),_0x5c9c('0xa')]},'log':_0x5c9c('0x0')});};};exports[_0x5c9c('0xb')]=function(){return function(){return client['Request'](_0x5c9c('0xc'),{'options':{'raw':!![],'where':{'role':_0x5c9c('0xd')},'attributes':['id',_0x5c9c('0x2'),'accountcode',_0x5c9c('0xe')]},'log':'getTelephones'});};};exports[_0x5c9c('0xf')]=function(_0x219b30,_0x456c45,_0x170418){return client['Request'](_0x5c9c('0x10'),{'body':{'type':_0x456c45,'uniqueid':_0x170418},'options':{'where':{'id':_0x219b30['id']}},'log':_0x5c9c('0xf')});};exports[_0x5c9c('0x11')]=function(_0x3c49f9){return client[_0x5c9c('0x1')]('UnpauseUser',{'body':{},'options':{'where':{'id':_0x3c49f9['id']}},'log':_0x5c9c('0xf')});};exports[_0x5c9c('0x12')]=function(_0x47c93c){return client[_0x5c9c('0x1')](_0x5c9c('0x13'),{'options':{'raw':![],'where':{'role':_0x5c9c('0x14'),'id':_0x47c93c},'attributes':['id',_0x5c9c('0x2'),_0x5c9c('0x15'),_0x5c9c('0x16'),_0x5c9c('0x3'),_0x5c9c('0x4'),'lastLoginAt',_0x5c9c('0x5'),_0x5c9c('0x6'),'voicePause',_0x5c9c('0xa')]},'log':_0x5c9c('0x12')});};
\ No newline at end of file
+var _0x7cfd=['getTelephones','savePause','saveUnpause','UnpauseUser','getAgent','ShowUser','fullname','pauseType','voicePause','../client','getAgents','Request','GetUser','agent','name','email','accountcode','online','lastLoginAt','lastPauseAt','phone','mobile','interface','telephone','internal'];(function(_0x4884a7,_0x18e38a){var _0x56b60e=function(_0x2ba8a3){while(--_0x2ba8a3){_0x4884a7['push'](_0x4884a7['shift']());}};_0x56b60e(++_0x18e38a);}(_0x7cfd,0x1b2));var _0xd7cf=function(_0x4922ac,_0x5eacdf){_0x4922ac=_0x4922ac-0x0;var _0x279ff8=_0x7cfd[_0x4922ac];return _0x279ff8;};'use strict';var client=require(_0xd7cf('0x0'));exports[_0xd7cf('0x1')]=function(){return function(){return client[_0xd7cf('0x2')](_0xd7cf('0x3'),{'options':{'raw':![],'where':{'role':_0xd7cf('0x4')},'attributes':['id',_0xd7cf('0x5'),_0xd7cf('0x6'),_0xd7cf('0x7'),'fullname',_0xd7cf('0x8'),_0xd7cf('0x9'),'pauseType',_0xd7cf('0xa'),'voicePause',_0xd7cf('0xb'),_0xd7cf('0xc'),_0xd7cf('0xd')]},'log':_0xd7cf('0x1')});};};exports['getTelephones']=function(){return function(){return client[_0xd7cf('0x2')]('GetUser',{'options':{'raw':!![],'where':{'role':_0xd7cf('0xe')},'attributes':['id',_0xd7cf('0x5'),'accountcode',_0xd7cf('0xf')]},'log':_0xd7cf('0x10')});};};exports[_0xd7cf('0x11')]=function(_0x5a7b94,_0x2647b0,_0x250031){return client[_0xd7cf('0x2')]('PauseUser',{'body':{'type':_0x2647b0,'uniqueid':_0x250031},'options':{'where':{'id':_0x5a7b94['id']}},'log':'savePause'});};exports[_0xd7cf('0x12')]=function(_0x39202a){return client[_0xd7cf('0x2')](_0xd7cf('0x13'),{'body':{},'options':{'where':{'id':_0x39202a['id']}},'log':_0xd7cf('0x11')});};exports[_0xd7cf('0x14')]=function(_0x2e83b3){return client[_0xd7cf('0x2')](_0xd7cf('0x15'),{'options':{'raw':![],'where':{'role':_0xd7cf('0x4'),'id':_0x2e83b3},'attributes':['id',_0xd7cf('0x5'),_0xd7cf('0x6'),_0xd7cf('0x7'),_0xd7cf('0x16'),'online','lastLoginAt',_0xd7cf('0x17'),_0xd7cf('0xa'),_0xd7cf('0x18'),_0xd7cf('0xd')]},'log':_0xd7cf('0x14')});};
\ No newline at end of file
index 1347007..e763d4f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ebd=['update','UpdateVoiceAgentReport','../client','Request','CreateVoiceAgentReport'];(function(_0x166871,_0x3c1c41){var _0x302473=function(_0x5807d3){while(--_0x5807d3){_0x166871['push'](_0x166871['shift']());}};_0x302473(++_0x3c1c41);}(_0x8ebd,0xd9));var _0xd8eb=function(_0x3511d3,_0x4107ae){_0x3511d3=_0x3511d3-0x0;var _0x5d6321=_0x8ebd[_0x3511d3];return _0x5d6321;};'use strict';var client=require(_0xd8eb('0x0'));exports['create']=function(_0x25a5e3){return client[_0xd8eb('0x1')]('CreateVoiceAgentReport',{'body':_0x25a5e3,'log':_0xd8eb('0x2')});};exports[_0xd8eb('0x3')]=function(_0x5c350e,_0x35ae1b,_0x27fba3){return client[_0xd8eb('0x1')](_0xd8eb('0x4'),{'body':_0x5c350e,'options':{'where':{'uniqueid':_0x35ae1b,'interface':_0x27fba3}},'log':'UpdateVoiceAgentReport'});};
\ No newline at end of file
+var _0xc8f7=['create','Request','update','UpdateVoiceAgentReport'];(function(_0x5cb1af,_0x4bdc8c){var _0x8d7940=function(_0x3db70a){while(--_0x3db70a){_0x5cb1af['push'](_0x5cb1af['shift']());}};_0x8d7940(++_0x4bdc8c);}(_0xc8f7,0x1e0));var _0x7c8f=function(_0xc9a40a,_0x99c66a){_0xc9a40a=_0xc9a40a-0x0;var _0x5e4f34=_0xc8f7[_0xc9a40a];return _0x5e4f34;};'use strict';var client=require('../client');exports[_0x7c8f('0x0')]=function(_0x1f41a1){return client[_0x7c8f('0x1')]('CreateVoiceAgentReport',{'body':_0x1f41a1,'log':'CreateVoiceAgentReport'});};exports[_0x7c8f('0x2')]=function(_0x216ce7,_0x217568,_0xeee8df){return client[_0x7c8f('0x1')]('UpdateVoiceAgentReport',{'body':_0x216ce7,'options':{'where':{'uniqueid':_0x217568,'interface':_0xeee8df}},'log':_0x7c8f('0x3')});};
\ No newline at end of file
index 3b4ea77..1374717 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd542=['getVoiceCallReports','GetVoiceCallReport','startOf','day','format','YYYY-MM-DD\x20HH:mm:ss','endOf','disposition','duration','billableseconds','GetVoiceCallReports','moment','util','lodash','../client','create','Request','merge','calleridnum','callerid','CreateVoiceCallReport'];(function(_0x351cd8,_0x3be4a0){var _0x57a998=function(_0x100d58){while(--_0x100d58){_0x351cd8['push'](_0x351cd8['shift']());}};_0x57a998(++_0x3be4a0);}(_0xd542,0x15b));var _0x2d54=function(_0x21c7fc,_0x54d5eb){_0x21c7fc=_0x21c7fc-0x0;var _0x408021=_0xd542[_0x21c7fc];return _0x408021;};'use strict';var moment=require(_0x2d54('0x0'));var util=require(_0x2d54('0x1'));var _=require(_0x2d54('0x2'));var client=require(_0x2d54('0x3'));exports[_0x2d54('0x4')]=function(_0x13d7a6){return client[_0x2d54('0x5')]('CreateVoiceCallReport',{'body':_[_0x2d54('0x6')](_0x13d7a6,{'source':_0x13d7a6[_0x2d54('0x7')],'destinationcontext':_0x13d7a6['context'],'callerid':_0x13d7a6[_0x2d54('0x8')],'amaflags':'DOCUMENTATION'}),'log':_0x2d54('0x9')});};exports[_0x2d54('0xa')]=function(){return function(){return client['Request'](_0x2d54('0xb'),{'options':{'where':{'type':['outbound'],'createdAt':{'$between':[moment()[_0x2d54('0xc')](_0x2d54('0xd'))[_0x2d54('0xe')](_0x2d54('0xf')),moment()[_0x2d54('0x10')]('day')['format'](_0x2d54('0xf'))]}},'attributes':['type',_0x2d54('0x11'),_0x2d54('0x12'),_0x2d54('0x13')]},'log':_0x2d54('0x14')});};};
\ No newline at end of file
+var _0xb00e=['disposition','duration','billableseconds','GetVoiceCallReports','moment','lodash','../client','create','Request','CreateVoiceCallReport','merge','calleridnum','context','callerid','DOCUMENTATION','getVoiceCallReports','GetVoiceCallReport','day','format','YYYY-MM-DD\x20HH:mm:ss','endOf','type'];(function(_0x49dca3,_0x5228d8){var _0x2b9243=function(_0x36d8cf){while(--_0x36d8cf){_0x49dca3['push'](_0x49dca3['shift']());}};_0x2b9243(++_0x5228d8);}(_0xb00e,0x122));var _0xeb00=function(_0x4164f2,_0x38669f){_0x4164f2=_0x4164f2-0x0;var _0x2575c7=_0xb00e[_0x4164f2];return _0x2575c7;};'use strict';var moment=require(_0xeb00('0x0'));var util=require('util');var _=require(_0xeb00('0x1'));var client=require(_0xeb00('0x2'));exports[_0xeb00('0x3')]=function(_0x11fbfb){return client[_0xeb00('0x4')](_0xeb00('0x5'),{'body':_[_0xeb00('0x6')](_0x11fbfb,{'source':_0x11fbfb[_0xeb00('0x7')],'destinationcontext':_0x11fbfb[_0xeb00('0x8')],'callerid':_0x11fbfb[_0xeb00('0x9')],'amaflags':_0xeb00('0xa')}),'log':_0xeb00('0x5')});};exports[_0xeb00('0xb')]=function(){return function(){return client['Request'](_0xeb00('0xc'),{'options':{'where':{'type':['outbound'],'createdAt':{'$between':[moment()['startOf'](_0xeb00('0xd'))[_0xeb00('0xe')](_0xeb00('0xf')),moment()[_0xeb00('0x10')](_0xeb00('0xd'))[_0xeb00('0xe')](_0xeb00('0xf'))]}},'attributes':[_0xeb00('0x11'),_0xeb00('0x12'),_0xeb00('0x13'),_0xeb00('0x14')]},'log':_0xeb00('0x15')});};};
\ No newline at end of file
index 7c875c0..ad81476 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd493=['Request','CreateVoiceDialReport','../client','create'];(function(_0x3888c1,_0x1e4626){var _0x394795=function(_0x4fe48a){while(--_0x4fe48a){_0x3888c1['push'](_0x3888c1['shift']());}};_0x394795(++_0x1e4626);}(_0xd493,0x8e));var _0x3d49=function(_0x39a96e,_0x3bea83){_0x39a96e=_0x39a96e-0x0;var _0x43d351=_0xd493[_0x39a96e];return _0x43d351;};'use strict';var client=require(_0x3d49('0x0'));exports[_0x3d49('0x1')]=function(_0x31b7e7){return client[_0x3d49('0x2')](_0x3d49('0x3'),{'body':_0x31b7e7,'log':'CreateVoiceDialReport'});};
\ No newline at end of file
+var _0x9bfe=['../client','create','Request','CreateVoiceDialReport'];(function(_0x5a9c0c,_0x4ec485){var _0x53c77d=function(_0x1cf384){while(--_0x1cf384){_0x5a9c0c['push'](_0x5a9c0c['shift']());}};_0x53c77d(++_0x4ec485);}(_0x9bfe,0x100));var _0xe9bf=function(_0x460f5f,_0x502641){_0x460f5f=_0x460f5f-0x0;var _0x1241a4=_0x9bfe[_0x460f5f];return _0x1241a4;};'use strict';var client=require(_0xe9bf('0x0'));exports[_0xe9bf('0x1')]=function(_0x4e25f1){return client[_0xe9bf('0x2')](_0xe9bf('0x3'),{'body':_0x4e25f1,'log':'CreateVoiceDialReport'});};
\ No newline at end of file
index b1b8786..80b8e8c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x37a8=['exten','../client','getVoiceExtensions','GetVoiceExtension'];(function(_0x53f577,_0x566e63){var _0x46d766=function(_0x3d0f36){while(--_0x3d0f36){_0x53f577['push'](_0x53f577['shift']());}};_0x46d766(++_0x566e63);}(_0x37a8,0x1bd));var _0x837a=function(_0x54f978,_0x3a6b7e){_0x54f978=_0x54f978-0x0;var _0x5d40b3=_0x37a8[_0x54f978];return _0x5d40b3;};'use strict';var client=require(_0x837a('0x0'));exports[_0x837a('0x1')]=function(){return function(){return client['Request'](_0x837a('0x2'),{'options':{'raw':!![],'attributes':['id',_0x837a('0x3'),'recordingFormat'],'where':{'VoiceExtensionId':null}},'log':_0x837a('0x1')});};};
\ No newline at end of file
+var _0x3542=['getVoiceExtensions','Request','GetVoiceExtension','exten','../client'];(function(_0x66ca2b,_0x45b77c){var _0x16278f=function(_0xd4fbcc){while(--_0xd4fbcc){_0x66ca2b['push'](_0x66ca2b['shift']());}};_0x16278f(++_0x45b77c);}(_0x3542,0xf9));var _0x2354=function(_0x430469,_0x20e783){_0x430469=_0x430469-0x0;var _0x1ca55e=_0x3542[_0x430469];return _0x1ca55e;};'use strict';var client=require(_0x2354('0x0'));exports[_0x2354('0x1')]=function(){return function(){return client[_0x2354('0x2')](_0x2354('0x3'),{'options':{'raw':!![],'attributes':['id',_0x2354('0x4'),'recordingFormat'],'where':{'VoiceExtensionId':null}},'log':_0x2354('0x1')});};};
\ No newline at end of file
index 4532875..a3a2d95 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc819=['TrunkBackup','active','Interval','Intervals','../client','getVoiceQueues','Request','GetVoiceQueue','name','acw','acwTimeout','autopause','monitor_format','type','dialPredictiveOptimization','dialPredictiveOptimizationPercentage','dialPredictiveInterval','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialBusyMaxRetry','dialBusyRetryFrequency','dialTimezone','dialAMDActive','dialAMDGreeting','dialAMDTotalAnalysisTime','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialRecallMeTimeout','dialRecallInQueue','dialOrderByScheduledAt','dialAgiAfterHangupAgent','dialAgiAfterHangupClient','dialQueueProject2','strategy','dialRandomLastDigitCallerIdNumber','dialCutDigit','dialPredictiveIntervalMaxThreshold','dialPredictiveIntervalMinThreshold','Trunk','callerid','Pause'];(function(_0x252c89,_0x450db2){var _0x2b9b74=function(_0x18f5e6){while(--_0x18f5e6){_0x252c89['push'](_0x252c89['shift']());}};_0x2b9b74(++_0x450db2);}(_0xc819,0x199));var _0x9c81=function(_0x562875,_0x2225f7){_0x562875=_0x562875-0x0;var _0x258a78=_0xc819[_0x562875];return _0x258a78;};'use strict';var client=require(_0x9c81('0x0'));exports[_0x9c81('0x1')]=function(){return function(){return client[_0x9c81('0x2')](_0x9c81('0x3'),{'options':{'raw':![],'attributes':['id',_0x9c81('0x4'),_0x9c81('0x5'),_0x9c81('0x6'),_0x9c81('0x7'),_0x9c81('0x8'),_0x9c81('0x9'),'dialActive','dialMethod','dialLimitChannel','dialLimitQueue','dialPowerLevel',_0x9c81('0xa'),_0x9c81('0xb'),_0x9c81('0xc'),'dialOriginateCallerIdName',_0x9c81('0xd'),_0x9c81('0xe'),'dialQueueOptions',_0x9c81('0xf'),_0x9c81('0x10'),_0x9c81('0x11'),'dialCongestionRetryFrequency',_0x9c81('0x12'),_0x9c81('0x13'),'dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry',_0x9c81('0x14'),'dialGlobalInterval','dialPrefix','dialCheckDuplicateType',_0x9c81('0x15'),'dialAMDInitialSilence',_0x9c81('0x16'),'dialAMDAfterGreetingSilence',_0x9c81('0x17'),'dialAMDMinWordLength',_0x9c81('0x18'),_0x9c81('0x19'),_0x9c81('0x1a'),'dialAMDMaximumWordLength','timeout',_0x9c81('0x1b'),_0x9c81('0x1c'),_0x9c81('0x1d'),_0x9c81('0x1e'),_0x9c81('0x1f'),_0x9c81('0x20'),'monitor_format',_0x9c81('0x21'),_0x9c81('0x22'),_0x9c81('0x23'),'mandatoryDisposition',_0x9c81('0x24'),_0x9c81('0x25')],'include':[{'model':_0x9c81('0x26'),'as':_0x9c81('0x26'),'attributes':['id','name',_0x9c81('0x27'),'active']},{'model':_0x9c81('0x28'),'as':'mandatoryDispositionPause','attributes':['id',_0x9c81('0x4')]},{'model':'Trunk','as':_0x9c81('0x29'),'attributes':['id',_0x9c81('0x4'),'callerid',_0x9c81('0x2a')]},{'model':_0x9c81('0x2b'),'as':_0x9c81('0x2b'),'attributes':['id',_0x9c81('0x4')],'include':[{'model':_0x9c81('0x2b'),'as':_0x9c81('0x2c'),'attributes':['id',_0x9c81('0x4'),'interval']}]}]},'log':_0x9c81('0x1')});};};
\ No newline at end of file
+var _0x8761=['dialPredictiveInterval','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueOptions','dialQueueTimeout','dialQueueProject','dialCongestionRetryFrequency','dialBusyMaxRetry','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialGlobalInterval','dialPrefix','dialAMDActive','dialAMDInitialSilence','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','dialRecallMeTimeout','dialRecallInQueue','dialOrderByScheduledAt','dialAgiAfterHangupAgent','dialAgiAfterHangupClient','monitor_format','dialRandomLastDigitCallerIdNumber','mandatoryDisposition','dialPredictiveIntervalMinThreshold','Trunk','callerid','active','Pause','mandatoryDispositionPause','name','TrunkBackup','Interval','interval','getVoiceQueues','GetVoiceQueue','acw','autopause','type','dialActive','dialMethod','dialLimitChannel','dialLimitQueue','dialPowerLevel','dialPredictiveOptimization'];(function(_0xeb2f4a,_0x37ff77){var _0x4c3566=function(_0x590d4b){while(--_0x590d4b){_0xeb2f4a['push'](_0xeb2f4a['shift']());}};_0x4c3566(++_0x37ff77);}(_0x8761,0x168));var _0x1876=function(_0x4d4e5d,_0x4354d9){_0x4d4e5d=_0x4d4e5d-0x0;var _0x37f177=_0x8761[_0x4d4e5d];return _0x37f177;};'use strict';var client=require('../client');exports[_0x1876('0x0')]=function(){return function(){return client['Request'](_0x1876('0x1'),{'options':{'raw':![],'attributes':['id','name',_0x1876('0x2'),'acwTimeout',_0x1876('0x3'),'monitor_format',_0x1876('0x4'),_0x1876('0x5'),_0x1876('0x6'),_0x1876('0x7'),_0x1876('0x8'),_0x1876('0x9'),_0x1876('0xa'),'dialPredictiveOptimizationPercentage',_0x1876('0xb'),_0x1876('0xc'),_0x1876('0xd'),_0x1876('0xe'),_0x1876('0xf'),_0x1876('0x10'),_0x1876('0x11'),'dialCongestionMaxRetry',_0x1876('0x12'),_0x1876('0x13'),'dialBusyRetryFrequency',_0x1876('0x14'),_0x1876('0x15'),_0x1876('0x16'),_0x1876('0x17'),_0x1876('0x18'),_0x1876('0x19'),'dialCheckDuplicateType',_0x1876('0x1a'),_0x1876('0x1b'),'dialAMDGreeting',_0x1876('0x1c'),_0x1876('0x1d'),_0x1876('0x1e'),_0x1876('0x1f'),_0x1876('0x20'),_0x1876('0x21'),_0x1876('0x22'),'timeout',_0x1876('0x23'),_0x1876('0x24'),_0x1876('0x25'),_0x1876('0x26'),_0x1876('0x27'),'dialQueueProject2',_0x1876('0x28'),'strategy',_0x1876('0x29'),'dialCutDigit',_0x1876('0x2a'),'dialPredictiveIntervalMaxThreshold',_0x1876('0x2b')],'include':[{'model':_0x1876('0x2c'),'as':_0x1876('0x2c'),'attributes':['id','name',_0x1876('0x2d'),_0x1876('0x2e')]},{'model':_0x1876('0x2f'),'as':_0x1876('0x30'),'attributes':['id',_0x1876('0x31')]},{'model':_0x1876('0x2c'),'as':_0x1876('0x32'),'attributes':['id',_0x1876('0x31'),_0x1876('0x2d'),_0x1876('0x2e')]},{'model':_0x1876('0x33'),'as':_0x1876('0x33'),'attributes':['id',_0x1876('0x31')],'include':[{'model':_0x1876('0x33'),'as':'Intervals','attributes':['id',_0x1876('0x31'),_0x1876('0x34')]}]}]},'log':_0x1876('0x0')});};};
\ No newline at end of file
index 659b86a..c11e9a3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda52=['startOf','format','endOf','day','uniqueid','queue','queuecallerjoinAt','queuecallercomplete','queuecallercompleteAt','queuecallerabandon','queuecallerabandonAt','GetVoiceQueueReports','moment','lodash','../client','create','Request','CreateVoiceQueueReport','getVoiceQueueReports'];(function(_0x56da02,_0x3230af){var _0x716545=function(_0x3df7e3){while(--_0x3df7e3){_0x56da02['push'](_0x56da02['shift']());}};_0x716545(++_0x3230af);}(_0xda52,0x6b));var _0x2da5=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xda52[_0x3dd15e];return _0x231fd0;};'use strict';var moment=require(_0x2da5('0x0'));var _=require(_0x2da5('0x1'));var client=require(_0x2da5('0x2'));exports[_0x2da5('0x3')]=function(_0x2e34c8){return client[_0x2da5('0x4')](_0x2da5('0x5'),{'body':_0x2e34c8,'log':'CreateVoiceQueueReport'});};exports[_0x2da5('0x6')]=function(){return function(){return client[_0x2da5('0x4')]('GetVoiceQueueReport',{'options':{'where':{'createdAt':{'$between':[moment()[_0x2da5('0x7')]('day')[_0x2da5('0x8')]('YYYY-MM-DD\x20HH:mm:ss'),moment()[_0x2da5('0x9')](_0x2da5('0xa'))[_0x2da5('0x8')]('YYYY-MM-DD\x20HH:mm:ss')]}},'attributes':[_0x2da5('0xb'),_0x2da5('0xc'),_0x2da5('0xd'),'queuecallerleaveAt',_0x2da5('0xe'),_0x2da5('0xf'),'queuecallerexit','queuecallerexitAt',_0x2da5('0x10'),_0x2da5('0x11')]},'log':_0x2da5('0x12')});};};
\ No newline at end of file
+var _0xd5f8=['queuecallerexit','queuecallerexitAt','queuecallerabandonAt','GetVoiceQueueReports','lodash','../client','create','Request','CreateVoiceQueueReport','getVoiceQueueReports','GetVoiceQueueReport','startOf','YYYY-MM-DD\x20HH:mm:ss','endOf','day','format','queue','queuecallercomplete'];(function(_0x573cc1,_0x2179e3){var _0x22b90b=function(_0x522818){while(--_0x522818){_0x573cc1['push'](_0x573cc1['shift']());}};_0x22b90b(++_0x2179e3);}(_0xd5f8,0x70));var _0x8d5f=function(_0xae0096,_0x3ea01f){_0xae0096=_0xae0096-0x0;var _0x472676=_0xd5f8[_0xae0096];return _0x472676;};'use strict';var moment=require('moment');var _=require(_0x8d5f('0x0'));var client=require(_0x8d5f('0x1'));exports[_0x8d5f('0x2')]=function(_0x4617b8){return client[_0x8d5f('0x3')](_0x8d5f('0x4'),{'body':_0x4617b8,'log':_0x8d5f('0x4')});};exports[_0x8d5f('0x5')]=function(){return function(){return client['Request'](_0x8d5f('0x6'),{'options':{'where':{'createdAt':{'$between':[moment()[_0x8d5f('0x7')]('day')['format'](_0x8d5f('0x8')),moment()[_0x8d5f('0x9')](_0x8d5f('0xa'))[_0x8d5f('0xb')](_0x8d5f('0x8'))]}},'attributes':['uniqueid',_0x8d5f('0xc'),'queuecallerjoinAt','queuecallerleaveAt',_0x8d5f('0xd'),'queuecallercompleteAt',_0x8d5f('0xe'),_0x8d5f('0xf'),'queuecallerabandon',_0x8d5f('0x10')]},'log':_0x8d5f('0x11')});};};
\ No newline at end of file
index 3d91cb2..31cc77e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc585=['getVoiceQueueRtPauses','Request'];(function(_0xa90718,_0x2fd952){var _0x56ed79=function(_0x41cff1){while(--_0x41cff1){_0xa90718['push'](_0xa90718['shift']());}};_0x56ed79(++_0x2fd952);}(_0xc585,0x129));var _0x5c58=function(_0x3f9d86,_0x232555){_0x3f9d86=_0x3f9d86-0x0;var _0xa4e827=_0xc585[_0x3f9d86];return _0xa4e827;};'use strict';var client=require('../client');exports['getVoiceQueueRtPauses']=function(_0x4c9114){return function(){return client[_0x5c58('0x0')]('GetVoiceQueueRtPauses',{'options':{'where':{'VoiceQueueId':_0x4c9114,'paused':!![]},'raw':!![]},'log':_0x5c58('0x1')});};};
\ No newline at end of file
+var _0xd1bc=['Request','GetVoiceQueueRtPauses','../client','getVoiceQueueRtPauses'];(function(_0x394268,_0x13f0ff){var _0x736a21=function(_0x71e22d){while(--_0x71e22d){_0x394268['push'](_0x394268['shift']());}};_0x736a21(++_0x13f0ff);}(_0xd1bc,0x14e));var _0xcd1b=function(_0x143565,_0x54d887){_0x143565=_0x143565-0x0;var _0x4dc1d9=_0xd1bc[_0x143565];return _0x4dc1d9;};'use strict';var client=require(_0xcd1b('0x0'));exports[_0xcd1b('0x1')]=function(_0x37a4f2){return function(){return client[_0xcd1b('0x2')](_0xcd1b('0x3'),{'options':{'where':{'VoiceQueueId':_0x37a4f2,'paused':!![]},'raw':!![]},'log':'getVoiceQueueRtPauses'});};};
\ No newline at end of file
index 6251833..6df679e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x72d3=['monitorFilename','lodash','create','CreateVoiceRecording','merge'];(function(_0x12310c,_0x437f93){var _0x44cbdb=function(_0x44d4d3){while(--_0x44d4d3){_0x12310c['push'](_0x12310c['shift']());}};_0x44cbdb(++_0x437f93);}(_0x72d3,0x191));var _0x372d=function(_0x347862,_0x339566){_0x347862=_0x347862-0x0;var _0x2ec88b=_0x72d3[_0x347862];return _0x2ec88b;};'use strict';var _=require(_0x372d('0x0'));var client=require('../client');exports[_0x372d('0x1')]=function(_0x13b226){return client['Request'](_0x372d('0x2'),{'body':_[_0x372d('0x3')](_0x13b226,{'value':_0x13b226[_0x372d('0x4')]}),'log':_0x372d('0x2')});};
\ No newline at end of file
+var _0x136f=['../client','CreateVoiceRecording','monitorFilename','lodash'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x136f,0x13b));var _0xf136=function(_0x8a969d,_0x339d9f){_0x8a969d=_0x8a969d-0x0;var _0x1d8dc7=_0x136f[_0x8a969d];return _0x1d8dc7;};'use strict';var _=require(_0xf136('0x0'));var client=require(_0xf136('0x1'));exports['create']=function(_0x2d11c0){return client['Request'](_0xf136('0x2'),{'body':_['merge'](_0x2d11c0,{'value':_0x2d11c0[_0xf136('0x3')]}),'log':_0xf136('0x2')});};
\ No newline at end of file
index c5ff35f..7d16fd8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c54=['isexternal','context','extension','blind','Request','result','origtransferercalleridnum','origtransferercalleridname','secondtransfererconnectedlinenum','secondtransfererexten','origtransfererlinkedid','transfertargetchannel','transfertargetcalleridnum','transfertargetcalleridname','transfertargetconnectedlinenum','transfertargetconnectedlinename','transfertargetaccountcode','transfertargetcontext','transfertargetexten','transfertargetlinkedid','origtransfererexten','attended','../client','blindTransfer','CreateVoiceTransferReport','transfererchannel','transferercalleridnum','transferercalleridname','transfererconnectedlinenum','transfererconnectedlinename','transferercontext','transfererlinkedid','transfereecalleridnum','transfereecalleridname','transfereeconnectedlinenum','transfereeconnectedlinename','transfereeaccountcode','transfereeexten','transfereelinkedid'];(function(_0x2d89ce,_0x24d58d){var _0x3fad10=function(_0xad0ec){while(--_0xad0ec){_0x2d89ce['push'](_0x2d89ce['shift']());}};_0x3fad10(++_0x24d58d);}(_0x9c54,0x64));var _0x49c5=function(_0x1a044a,_0x305459){_0x1a044a=_0x1a044a-0x0;var _0x5b440a=_0x9c54[_0x1a044a];return _0x5b440a;};'use strict';var client=require(_0x49c5('0x0'));exports[_0x49c5('0x1')]=function(_0xcf2dd4){return client['Request'](_0x49c5('0x2'),{'body':{'result':_0xcf2dd4['result'],'transfererchannel':_0xcf2dd4[_0x49c5('0x3')],'transferercalleridnum':_0xcf2dd4[_0x49c5('0x4')],'transferercalleridname':_0xcf2dd4[_0x49c5('0x5')],'transfererconnectedlinenum':_0xcf2dd4[_0x49c5('0x6')],'transfererconnectedlinename':_0xcf2dd4[_0x49c5('0x7')],'transfereraccountcode':_0xcf2dd4['transfereraccountcode'],'transferercontext':_0xcf2dd4[_0x49c5('0x8')],'transfererexten':_0xcf2dd4['transfererexten'],'transfererlinkedid':_0xcf2dd4[_0x49c5('0x9')],'transfereechannel':_0xcf2dd4['transfereechannel'],'transfereecalleridnum':_0xcf2dd4[_0x49c5('0xa')],'transfereecalleridname':_0xcf2dd4[_0x49c5('0xb')],'transfereeconnectedlinenum':_0xcf2dd4[_0x49c5('0xc')],'transfereeconnectedlinename':_0xcf2dd4[_0x49c5('0xd')],'transfereeaccountcode':_0xcf2dd4[_0x49c5('0xe')],'transfereecontext':_0xcf2dd4['transfereecontext'],'transfereeexten':_0xcf2dd4[_0x49c5('0xf')],'transfereelinkedid':_0xcf2dd4[_0x49c5('0x10')],'isexternal':_0xcf2dd4[_0x49c5('0x11')],'context':_0xcf2dd4[_0x49c5('0x12')],'extension':_0xcf2dd4[_0x49c5('0x13')],'type':_0x49c5('0x14')},'log':'CreateVoiceTransferReport'});};exports['attendedTransfer']=function(_0x2ccc0c){return client[_0x49c5('0x15')](_0x49c5('0x2'),{'body':{'result':_0x2ccc0c[_0x49c5('0x16')],'transfererchannel':_0x2ccc0c['origtransfererchannel'],'transferercalleridnum':_0x2ccc0c[_0x49c5('0x17')],'transferercalleridname':_0x2ccc0c[_0x49c5('0x18')],'transfererconnectedlinenum':_0x2ccc0c[_0x49c5('0x19')],'transfererconnectedlinename':_0x2ccc0c['secondtransfererconnectedlinename'],'transfereraccountcode':_0x2ccc0c['origtransfereraccountcode'],'transferercontext':_0x2ccc0c['secondtransferercontext'],'transfererexten':_0x2ccc0c[_0x49c5('0x1a')],'transfererlinkedid':_0x2ccc0c[_0x49c5('0x1b')],'transfereechannel':_0x2ccc0c[_0x49c5('0x1c')],'transfereecalleridnum':_0x2ccc0c[_0x49c5('0x1d')],'transfereecalleridname':_0x2ccc0c[_0x49c5('0x1e')],'transfereeconnectedlinenum':_0x2ccc0c[_0x49c5('0x1f')],'transfereeconnectedlinename':_0x2ccc0c[_0x49c5('0x20')],'transfereeaccountcode':_0x2ccc0c[_0x49c5('0x21')],'transfereecontext':_0x2ccc0c[_0x49c5('0x22')],'transfereeexten':_0x2ccc0c[_0x49c5('0x23')],'transfereelinkedid':_0x2ccc0c[_0x49c5('0x24')],'isexternal':_0x2ccc0c[_0x49c5('0x11')],'context':_0x2ccc0c['origtransferercontext'],'extension':_0x2ccc0c[_0x49c5('0x25')],'type':_0x49c5('0x26')},'log':_0x49c5('0x2')});};
\ No newline at end of file
+var _0x8737=['transferercalleridnum','transferercalleridname','transfererconnectedlinenum','transfererconnectedlinename','transfereraccountcode','transfererexten','transfereechannel','transfereeconnectedlinename','transfereeaccountcode','transfereecontext','transfereeexten','transfereelinkedid','isexternal','extension','attendedTransfer','Request','origtransfererchannel','origtransferercalleridnum','origtransferercalleridname','secondtransfererconnectedlinename','secondtransferercontext','secondtransfererexten','origtransfererlinkedid','transfertargetchannel','transfertargetcalleridnum','transfertargetcalleridname','transfertargetconnectedlinenum','transfertargetconnectedlinename','transfertargetaccountcode','transfertargetcontext','transfertargetexten','transfertargetlinkedid','origtransfererexten','../client','blindTransfer','CreateVoiceTransferReport','result','transfererchannel'];(function(_0x18b729,_0x3f159e){var _0x596825=function(_0x1e285d){while(--_0x1e285d){_0x18b729['push'](_0x18b729['shift']());}};_0x596825(++_0x3f159e);}(_0x8737,0x19d));var _0x7873=function(_0x242e4b,_0x4fecfb){_0x242e4b=_0x242e4b-0x0;var _0x3e8438=_0x8737[_0x242e4b];return _0x3e8438;};'use strict';var client=require(_0x7873('0x0'));exports[_0x7873('0x1')]=function(_0x3cdaf0){return client['Request'](_0x7873('0x2'),{'body':{'result':_0x3cdaf0[_0x7873('0x3')],'transfererchannel':_0x3cdaf0[_0x7873('0x4')],'transferercalleridnum':_0x3cdaf0[_0x7873('0x5')],'transferercalleridname':_0x3cdaf0[_0x7873('0x6')],'transfererconnectedlinenum':_0x3cdaf0[_0x7873('0x7')],'transfererconnectedlinename':_0x3cdaf0[_0x7873('0x8')],'transfereraccountcode':_0x3cdaf0[_0x7873('0x9')],'transferercontext':_0x3cdaf0['transferercontext'],'transfererexten':_0x3cdaf0[_0x7873('0xa')],'transfererlinkedid':_0x3cdaf0['transfererlinkedid'],'transfereechannel':_0x3cdaf0[_0x7873('0xb')],'transfereecalleridnum':_0x3cdaf0['transfereecalleridnum'],'transfereecalleridname':_0x3cdaf0['transfereecalleridname'],'transfereeconnectedlinenum':_0x3cdaf0['transfereeconnectedlinenum'],'transfereeconnectedlinename':_0x3cdaf0[_0x7873('0xc')],'transfereeaccountcode':_0x3cdaf0[_0x7873('0xd')],'transfereecontext':_0x3cdaf0[_0x7873('0xe')],'transfereeexten':_0x3cdaf0[_0x7873('0xf')],'transfereelinkedid':_0x3cdaf0[_0x7873('0x10')],'isexternal':_0x3cdaf0[_0x7873('0x11')],'context':_0x3cdaf0['context'],'extension':_0x3cdaf0[_0x7873('0x12')],'type':'blind'},'log':'CreateVoiceTransferReport'});};exports[_0x7873('0x13')]=function(_0x14147e){return client[_0x7873('0x14')](_0x7873('0x2'),{'body':{'result':_0x14147e[_0x7873('0x3')],'transfererchannel':_0x14147e[_0x7873('0x15')],'transferercalleridnum':_0x14147e[_0x7873('0x16')],'transferercalleridname':_0x14147e[_0x7873('0x17')],'transfererconnectedlinenum':_0x14147e['secondtransfererconnectedlinenum'],'transfererconnectedlinename':_0x14147e[_0x7873('0x18')],'transfereraccountcode':_0x14147e['origtransfereraccountcode'],'transferercontext':_0x14147e[_0x7873('0x19')],'transfererexten':_0x14147e[_0x7873('0x1a')],'transfererlinkedid':_0x14147e[_0x7873('0x1b')],'transfereechannel':_0x14147e[_0x7873('0x1c')],'transfereecalleridnum':_0x14147e[_0x7873('0x1d')],'transfereecalleridname':_0x14147e[_0x7873('0x1e')],'transfereeconnectedlinenum':_0x14147e[_0x7873('0x1f')],'transfereeconnectedlinename':_0x14147e[_0x7873('0x20')],'transfereeaccountcode':_0x14147e[_0x7873('0x21')],'transfereecontext':_0x14147e[_0x7873('0x22')],'transfereeexten':_0x14147e[_0x7873('0x23')],'transfereelinkedid':_0x14147e[_0x7873('0x24')],'isexternal':_0x14147e[_0x7873('0x11')],'context':_0x14147e['origtransferercontext'],'extension':_0x14147e[_0x7873('0x25')],'type':'attended'},'log':_0x7873('0x2')});};
\ No newline at end of file
index 8ecab98..369d534 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfbed=['agents','updateStatusRealtime','pause','QueuePause','isConnected','error','asterisk','username','ami\x20disconnected','join','pick','keys','module','action','Reload','Action','then','message','command','content','voiceQueues','hasOwnProperty','strategy','loggedIn','pTalking','sumBillable','sumDuration','sumHoldTime','type','unmanaged','abandoned','waiting','loggedInDb','outbound','dialActive','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalAvailable','predictiveIntervalTotalCalls','originated','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','startPredictive','startProgressive','Trunk','active','callerid','Interval','push','length','values','channels','map','find','uniqueid','channel','%s.%s','filename','wav','MixMonitor','/var/spool/asterisk/monitor/','toLowerCase','isNil','monitors','YYYY-MM-DD\x20HH:mm:ss','mixmonitorid','status','rec','catch','Channel\x20doesn\x27t\x20exist','voicechannel','StopMixMonitor','destinationchannel','stop','StopMixMonitor\x20Success','voicequeuechannel','queueChannels','voicequeuechannelhangup','Hangup','voicequeuechannelredirect','Redirect','exten','context','telephones','trunks','outboundChannels','campaigns','run','event','Event\x20name\x20mandatory','emit','faxAccounts','send','checkAfterSend','server','127.0.0.1','log','AMI\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','util','jayson/promise','validate','moment','../properties','../ami','listen','format','SIP','name','timers','updateAcw'];(function(_0x13165e,_0x582d03){var _0x1c039c=function(_0x233f66){while(--_0x233f66){_0x13165e['push'](_0x13165e['shift']());}};_0x1c039c(++_0x582d03);}(_0xfbed,0x18c));var _0xdfbe=function(_0x1035c1,_0x2d8583){_0x1035c1=_0x1035c1-0x0;var _0x308d67=_0xfbed[_0x1035c1];return _0x308d67;};'use strict';var _=require('lodash');var util=require(_0xdfbe('0x0'));var jayson=require(_0xdfbe('0x1'));var schema=require(_0xdfbe('0x2'));var BPromise=require('bluebird');var moment=require(_0xdfbe('0x3'));var config=require('../../../config/environment');var properties=require(_0xdfbe('0x4'));var ami=require(_0xdfbe('0x5'));exports[_0xdfbe('0x6')]=function(_0x30b1d2,_0x395efd,_0x453fe4){return new BPromise(function(_0x31803d,_0x51a452){var _0x52d3a9={'QueuePause':function(_0x494492){return new Promise(function(_0x2d8c93,_0x2cf366){var _0x20fa84=util[_0xdfbe('0x7')]('%s/%s',_0xdfbe('0x8'),_0x494492[_0xdfbe('0x9')]);if(_0x30b1d2[_0xdfbe('0xa')]&&_0x30b1d2['timers'][_0x20fa84]&&_0x30b1d2[_0xdfbe('0xa')][_0x20fa84]['timer']){_0x30b1d2['timers'][_0x20fa84][_0xdfbe('0xb')]();}if(_0x30b1d2['agents'][_0x20fa84]){_0x30b1d2[_0xdfbe('0xc')][_0x20fa84][_0xdfbe('0xd')]({'statePause':_0x494492[_0xdfbe('0xe')]?!![]:![]});}_0x2d8c93({'code':0xc8,'message':_0xdfbe('0xf')});});},'Reload':function(_0x1b6163){var _0x49b95a=this;return new Promise(function(_0x1d185e,_0x58588d){if(ami[_0xdfbe('0x10')]()==![]){return _0x58588d(_0x49b95a[_0xdfbe('0x11')](0x1f4,[config[_0xdfbe('0x12')]['ip'],config['asterisk'][_0xdfbe('0x13')],_0xdfbe('0x14')][_0xdfbe('0x15')]('\x20')));}_0x1b6163=_[_0xdfbe('0x16')](_0x1b6163,_[_0xdfbe('0x17')](properties[_0xdfbe('0x18')]));_0x1b6163[_0xdfbe('0x19')]=_0xdfbe('0x1a');return ami[_0xdfbe('0x1b')](_0x1b6163)[_0xdfbe('0x1c')](function(_0x30a652){_0x1d185e({'code':0xc8,'message':_0x30a652['message']});})['catch'](function(_0x4c5c2e){_0x58588d(_0x49b95a[_0xdfbe('0x11')](0x1f5,_0x4c5c2e[_0xdfbe('0x1d')]));});});},'Command':function(_0x20bdce){var _0x37aaf2=this;return new Promise(function(_0x54acfe,_0x20b058){if(ami[_0xdfbe('0x10')]()==![]){return _0x20b058(_0x37aaf2['error'](0x1f4,[config[_0xdfbe('0x12')]['ip'],config[_0xdfbe('0x12')][_0xdfbe('0x13')],_0xdfbe('0x14')][_0xdfbe('0x15')]('\x20')));}_0x20bdce=_['pick'](_0x20bdce,_0xdfbe('0x1e'));_0x20bdce['action']='Command';return ami[_0xdfbe('0x1b')](_0x20bdce)[_0xdfbe('0x1c')](function(_0x55fa0d){_0x54acfe({'code':0xc8,'message':_0x55fa0d[_0xdfbe('0x1f')]});})['catch'](function(_0x164602){_0x20b058(_0x37aaf2[_0xdfbe('0x11')](0x1f5,_0x164602[_0xdfbe('0x1d')]));});});},'VoiceQueues':function(_0xa5039e){return new Promise(function(_0x30217e,_0x574c9b){var _0x141eb4=[];for(var _0x417d92 in _0x30b1d2['voiceQueues']){if(_0x30b1d2[_0xdfbe('0x20')][_0xdfbe('0x21')](_0x417d92)){var _0x9bde5f=_0x30b1d2[_0xdfbe('0x20')][_0x417d92];var _0x502cd7={'id':_0x9bde5f['id'],'name':_0x9bde5f[_0xdfbe('0x9')],'strategy':_0x9bde5f[_0xdfbe('0x22')],'answered':_0x9bde5f['answered'],'available':_0x9bde5f['available'],'loggedIn':_0x9bde5f[_0xdfbe('0x23')],'pTalking':_0x9bde5f[_0xdfbe('0x24')],'sumBillable':_0x9bde5f[_0xdfbe('0x25')],'sumDuration':_0x9bde5f[_0xdfbe('0x26')],'sumHoldTime':_0x9bde5f[_0xdfbe('0x27')]||0x0,'talking':_0x9bde5f['talking'],'total':_0x9bde5f['total'],'type':_0x9bde5f[_0xdfbe('0x28')],'unmanaged':_0x9bde5f[_0xdfbe('0x29')],'abandoned':_0x9bde5f[_0xdfbe('0x2a')],'waiting':_0x9bde5f[_0xdfbe('0x2b')],'loggedInDb':_0x9bde5f[_0xdfbe('0x2c')]};if(_0x9bde5f[_0xdfbe('0x28')]===_0xdfbe('0x2d')){_0x502cd7[_0xdfbe('0x2e')]=_0x9bde5f[_0xdfbe('0x2e')];_0x502cd7['dialMethod']=_0x9bde5f['dialMethod'];_0x502cd7['dialOriginateCallerIdName']=_0x9bde5f['dialOriginateCallerIdName'];_0x502cd7['dialOriginateCallerIdNumber']=_0x9bde5f[_0xdfbe('0x2f')];_0x502cd7[_0xdfbe('0x30')]=_0x9bde5f[_0xdfbe('0x30')];_0x502cd7[_0xdfbe('0x31')]=_0x9bde5f[_0xdfbe('0x31')];_0x502cd7[_0xdfbe('0x32')]=_0x9bde5f[_0xdfbe('0x32')];_0x502cd7[_0xdfbe('0x33')]=_0x9bde5f['outboundAnswerCallsDay'];_0x502cd7[_0xdfbe('0x34')]=_0x9bde5f['outboundBlacklistCallsDay'];_0x502cd7[_0xdfbe('0x35')]=_0x9bde5f['outboundBusyCallsDay'];_0x502cd7[_0xdfbe('0x36')]=_0x9bde5f[_0xdfbe('0x36')];_0x502cd7['outboundDropCallsDayACS']=_0x9bde5f[_0xdfbe('0x37')];_0x502cd7[_0xdfbe('0x38')]=_0x9bde5f[_0xdfbe('0x38')];_0x502cd7[_0xdfbe('0x39')]=_0x9bde5f['outboundDropCallsDayTimeout'];_0x502cd7[_0xdfbe('0x3a')]=_0x9bde5f[_0xdfbe('0x3a')];_0x502cd7['outboundNoSuchCallsDay']=_0x9bde5f[_0xdfbe('0x3b')];_0x502cd7[_0xdfbe('0x3c')]=_0x9bde5f[_0xdfbe('0x3c')];_0x502cd7['outboundReCallsDay']=_0x9bde5f[_0xdfbe('0x3d')];_0x502cd7[_0xdfbe('0x3e')]=_0x9bde5f[_0xdfbe('0x3e')];_0x502cd7[_0xdfbe('0x3f')]=_0x9bde5f[_0xdfbe('0x3f')];_0x502cd7[_0xdfbe('0x40')]=_0x9bde5f[_0xdfbe('0x40')];_0x502cd7[_0xdfbe('0x41')]=_0x9bde5f[_0xdfbe('0x41')];_0x502cd7[_0xdfbe('0x42')]=_0x9bde5f[_0xdfbe('0x42')];_0x502cd7[_0xdfbe('0x43')]=_0x9bde5f[_0xdfbe('0x43')];_0x502cd7[_0xdfbe('0x44')]=_0x9bde5f['predictiveIntervalDroppedCallsTimeout'];_0x502cd7[_0xdfbe('0x45')]=_0x9bde5f['predictiveIntervalErlangCalls'];_0x502cd7[_0xdfbe('0x46')]=_0x9bde5f[_0xdfbe('0x46')];_0x502cd7['predictiveIntervalHitRate']=_0x9bde5f['predictiveIntervalHitRate'];_0x502cd7[_0xdfbe('0x47')]=_0x9bde5f[_0xdfbe('0x47')];_0x502cd7[_0xdfbe('0x48')]=_0x9bde5f[_0xdfbe('0x48')];_0x502cd7[_0xdfbe('0x49')]=_0x9bde5f[_0xdfbe('0x49')];_0x502cd7[_0xdfbe('0x4a')]=_0x9bde5f[_0xdfbe('0x4a')];_0x502cd7[_0xdfbe('0x1d')]=_0x9bde5f[_0xdfbe('0x1d')];_0x502cd7[_0xdfbe('0x4b')]=_0x9bde5f[_0xdfbe('0x4b')];_0x502cd7['erlangCalls']=_0x9bde5f[_0xdfbe('0x4c')];_0x502cd7[_0xdfbe('0x4d')]=_0x9bde5f[_0xdfbe('0x4d')];_0x502cd7[_0xdfbe('0x4e')]=_0x9bde5f['erlangAbandonmentRate'];_0x502cd7[_0xdfbe('0x4f')]=_0x9bde5f[_0xdfbe('0x4f')];_0x502cd7[_0xdfbe('0x50')]=_0x9bde5f[_0xdfbe('0x50')];_0x502cd7[_0xdfbe('0x51')]=_0x9bde5f['startProgressive'];}if(_0x9bde5f[_0xdfbe('0x52')]){_0x502cd7[_0xdfbe('0x52')]={'id':_0x9bde5f[_0xdfbe('0x52')]['id'],'name':_0x9bde5f[_0xdfbe('0x52')][_0xdfbe('0x9')],'active':_0x9bde5f[_0xdfbe('0x52')][_0xdfbe('0x53')],'callerid':_0x9bde5f[_0xdfbe('0x52')][_0xdfbe('0x54')]};}if(_0x9bde5f[_0xdfbe('0x55')]){_0x502cd7['Interval']={'id':_0x9bde5f[_0xdfbe('0x55')]['id'],'name':_0x9bde5f[_0xdfbe('0x55')][_0xdfbe('0x9')]};}_0x141eb4[_0xdfbe('0x56')](_0x502cd7);}}_0x30217e({'count':_0x141eb4[_0xdfbe('0x57')],'rows':_0x141eb4});});},'VoiceChannels':function(_0x552c56){return new Promise(function(_0x24eeed,_0x4b96e8){var _0x398095=_[_0xdfbe('0x58')](_0x30b1d2[_0xdfbe('0x59')]);_0x24eeed({'count':_0x398095['length'],'rows':_0x398095});});},'VoiceChannelMixMonitor':function(_0x54368b){var _0x52eaae=this;return new Promise(function(_0x3e4ba8,_0x1c98be){if(ami[_0xdfbe('0x10')]()==![]){return _0x1c98be(_0x52eaae[_0xdfbe('0x11')](0x1f4,[config['asterisk']['ip'],config[_0xdfbe('0x12')][_0xdfbe('0x13')],_0xdfbe('0x14')][_0xdfbe('0x15')]('\x20')));}var _0x33ca25=schema(properties['voicechannel'])[_0xdfbe('0x2')](_0x54368b);if(_0x33ca25['length']>0x0){return _0x1c98be(_0x52eaae[_0xdfbe('0x11')](0x1f4,_[_0xdfbe('0x5a')](_0x33ca25,_0xdfbe('0x1d'))[_0xdfbe('0x15')](',\x20')));}var _0x343e9b=_[_0xdfbe('0x5b')](_0x30b1d2['channels'],{'uniqueid':_0x54368b[_0xdfbe('0x5c')]});if(_0x343e9b&&_0x343e9b[_0xdfbe('0x5d')]){var _0x8c4df1=util[_0xdfbe('0x7')](_0xdfbe('0x5e'),_0x54368b[_0xdfbe('0x5f')]||_0x54368b['uniqueid'],_0x54368b[_0xdfbe('0x7')]||_0xdfbe('0x60'));return ami[_0xdfbe('0x1b')]({'action':_0xdfbe('0x61'),'channel':_0x343e9b['channel'],'file':_0x8c4df1,'options':'ai(mixmonitorid)'})['then'](function(_0x51bbb3){var _0x191e24=_[_0xdfbe('0x5b')](_0x343e9b['monitors'],{'filename':_0xdfbe('0x62')+_0x8c4df1[_0xdfbe('0x63')]()});if(_[_0xdfbe('0x64')](_0x191e24)){_0x343e9b[_0xdfbe('0x65')][_0xdfbe('0x56')]({'filename':'/var/spool/asterisk/monitor/'+_0x8c4df1[_0xdfbe('0x63')](),'createdAt':moment()[_0xdfbe('0x7')](_0xdfbe('0x66')),'mixmonitorid':_0x51bbb3[_0xdfbe('0x67')],'status':'rec'});}else{_0x191e24[_0xdfbe('0x67')]=_0x51bbb3[_0xdfbe('0x67')];_0x191e24[_0xdfbe('0x68')]=_0xdfbe('0x69');}_0x3e4ba8({'code':0xc8,'message':[_0x54368b[_0xdfbe('0x5c')],'MixMonitor\x20Success',_0x51bbb3['mixmonitorid']][_0xdfbe('0x15')]('\x20'),'mixmonitorid':_0x51bbb3['mixmonitorid']});})[_0xdfbe('0x6a')](function(_0xb8d24a){_0x1c98be(_0x52eaae[_0xdfbe('0x11')](0x1f5,[_0x54368b[_0xdfbe('0x5c')],_0xb8d24a[_0xdfbe('0x1d')][_0xdfbe('0x63')]()][_0xdfbe('0x15')]('\x20')));});}else{return _0x1c98be(_0x52eaae[_0xdfbe('0x11')](0x1f5,_0xdfbe('0x6b')));}});},'VoiceChannelStopMixMonitor':function(_0x4b5766){var _0x3ab210=this;return new Promise(function(_0x2fa6d0,_0x428db3){if(ami[_0xdfbe('0x10')]()==![]){return _0x428db3(_0x3ab210[_0xdfbe('0x11')](0x1f4,[config[_0xdfbe('0x12')]['ip'],config[_0xdfbe('0x12')][_0xdfbe('0x13')],_0xdfbe('0x14')]['join']('\x20')));}var _0x5dfafa=schema(properties[_0xdfbe('0x6c')])[_0xdfbe('0x2')](_0x4b5766);if(_0x5dfafa['length']>0x0){return _0x428db3(_0x3ab210[_0xdfbe('0x11')](0x1f4,_[_0xdfbe('0x5a')](_0x5dfafa,_0xdfbe('0x1d'))[_0xdfbe('0x15')](',\x20')));}var _0x1676b3=_[_0xdfbe('0x5b')](_0x30b1d2[_0xdfbe('0x59')],{'uniqueid':_0x4b5766[_0xdfbe('0x5c')]});if(_0x1676b3){return BPromise['resolve']()[_0xdfbe('0x1c')](function(){if(_0x1676b3[_0xdfbe('0x5d')]){return ami[_0xdfbe('0x1b')]({'action':_0xdfbe('0x6d'),'channel':_0x1676b3[_0xdfbe('0x5d')],'mixmonitorid':_0x4b5766['mixmonitorid']})[_0xdfbe('0x6a')](function(_0x3418cb){});}})[_0xdfbe('0x1c')](function(){if(_0x1676b3['destinationchannel']){return ami[_0xdfbe('0x1b')]({'action':_0xdfbe('0x6d'),'channel':_0x1676b3[_0xdfbe('0x6e')],'mixmonitorid':_0x4b5766[_0xdfbe('0x67')]})['catch'](function(_0x479e71){});}})['then'](function(_0x5299b9){var _0x1ba52b=_['find'](_0x1676b3['monitors'],{'mixmonitorid':_0x4b5766[_0xdfbe('0x67')]});if(_0x1ba52b){_0x1ba52b[_0xdfbe('0x68')]=_0xdfbe('0x6f');}})[_0xdfbe('0x1c')](function(){var _0x1cf5cf=util[_0xdfbe('0x7')]('%s.%s',_0x4b5766[_0xdfbe('0x5f')]||_0x4b5766[_0xdfbe('0x5c')],_0x4b5766['format']||_0xdfbe('0x60'));var _0x40c44f=_[_0xdfbe('0x5b')](_0x1676b3['monitors'],{'filename':_0xdfbe('0x62')+_0x1cf5cf['toLowerCase']()});if(_0x40c44f){_0x40c44f[_0xdfbe('0x68')]='stop';}})['then'](function(){_0x2fa6d0({'code':0xc8,'message':[_0x4b5766[_0xdfbe('0x5c')],_0xdfbe('0x70')][_0xdfbe('0x15')]('\x20')});})['catch'](function(_0x11e804){_0x428db3(_0x3ab210[_0xdfbe('0x11')](0x1f5,[_0x4b5766[_0xdfbe('0x5c')],_0x11e804[_0xdfbe('0x1d')][_0xdfbe('0x63')]()]['join']('\x20')));});}else{return _0x428db3(_0x3ab210[_0xdfbe('0x11')](0x1f5,_0xdfbe('0x6b')));}});},'VoiceQueuesChannels':function(_0x2a9d38){return new Promise(function(_0x187c6f,_0x787730){var _0x554fc1=_[_0xdfbe('0x58')](_0x30b1d2['queueChannels']);_0x187c6f({'count':_0x554fc1['length'],'rows':_0x554fc1});});},'VoiceQueuesChannel':function(_0x214c31){var _0x80fdf8=this;return new Promise(function(_0xbd3e09,_0x18c538){var _0x471b03=schema(properties[_0xdfbe('0x71')])['validate'](_0x214c31);if(_0x471b03[_0xdfbe('0x57')]>0x0){return _0x18c538(_0x80fdf8[_0xdfbe('0x11')](0x1f4,_[_0xdfbe('0x5a')](_0x471b03,'message')[_0xdfbe('0x15')](',\x20')));}var _0x3748f0=_[_0xdfbe('0x5b')](_0x30b1d2[_0xdfbe('0x72')],{'uniqueid':_0x214c31[_0xdfbe('0x5c')]});if(_0x3748f0){_0xbd3e09(_0x3748f0);}else{return _0x18c538(_0x80fdf8[_0xdfbe('0x11')](0x1f5,'Channel\x20doesn\x27t\x20exist'));}});},'VoiceQueuesChannelHangup':function(_0x2241e1){var _0x24882c=this;return new Promise(function(_0x49dd2b,_0x5c77c6){if(ami[_0xdfbe('0x10')]()==![]){return _0x5c77c6(_0x24882c[_0xdfbe('0x11')](0x1f4,[config[_0xdfbe('0x12')]['ip'],config['asterisk'][_0xdfbe('0x13')],_0xdfbe('0x14')][_0xdfbe('0x15')]('\x20')));}var _0x1636d0=schema(properties[_0xdfbe('0x73')])[_0xdfbe('0x2')](_0x2241e1);if(_0x1636d0[_0xdfbe('0x57')]>0x0){return _0x5c77c6(_0x24882c[_0xdfbe('0x11')](0x1f4,_['map'](_0x1636d0,_0xdfbe('0x1d'))[_0xdfbe('0x15')](',\x20')));}var _0x289a7a=_[_0xdfbe('0x5b')](_0x30b1d2[_0xdfbe('0x72')],{'uniqueid':_0x2241e1[_0xdfbe('0x5c')]});if(_0x289a7a&&_0x289a7a['channel']){return ami[_0xdfbe('0x1b')]({'action':_0xdfbe('0x74'),'channel':_0x289a7a['channel']})['then'](function(_0xae42a7){_0x49dd2b({'code':0xc8,'message':[_0x2241e1[_0xdfbe('0x5c')],_0xae42a7[_0xdfbe('0x1d')]['toLowerCase']()]['join']('\x20')});})[_0xdfbe('0x6a')](function(_0x287995){_0x5c77c6(_0x24882c[_0xdfbe('0x11')](0x1f5,[_0x2241e1[_0xdfbe('0x5c')],_0x287995[_0xdfbe('0x1d')]['toLowerCase']()][_0xdfbe('0x15')]('\x20')));});}else{return _0x5c77c6(_0x24882c[_0xdfbe('0x11')](0x1f5,_0xdfbe('0x6b')));}});},'VoiceQueuesChannelRedirect':function(_0x1e93e9){var _0x3e3a85=this;return new Promise(function(_0x2871fd,_0x3f9e39){if(ami[_0xdfbe('0x10')]()==![]){return _0x3f9e39(_0x3e3a85[_0xdfbe('0x11')](0x1f4,[config[_0xdfbe('0x12')]['ip'],config[_0xdfbe('0x12')][_0xdfbe('0x13')],'ami\x20disconnected'][_0xdfbe('0x15')]('\x20')));}var _0x13aafc=schema(properties[_0xdfbe('0x75')])[_0xdfbe('0x2')](_0x1e93e9);if(_0x13aafc['length']>0x0){return _0x3f9e39(_0x3e3a85[_0xdfbe('0x11')](0x1f4,_['map'](_0x13aafc,_0xdfbe('0x1d'))[_0xdfbe('0x15')](',\x20')));}var _0x2ff6ad=_[_0xdfbe('0x5b')](_0x30b1d2[_0xdfbe('0x72')],{'uniqueid':_0x1e93e9[_0xdfbe('0x5c')]});if(_0x2ff6ad&&_0x2ff6ad[_0xdfbe('0x5d')]){return ami[_0xdfbe('0x1b')]({'action':_0xdfbe('0x76'),'channel':_0x2ff6ad[_0xdfbe('0x5d')],'exten':_0x1e93e9[_0xdfbe('0x77')],'context':_0x1e93e9[_0xdfbe('0x78')]||_0x2ff6ad['context'],'priority':0x1})[_0xdfbe('0x1c')](function(_0x5aa76d){_0x2871fd({'code':0xc8,'message':[_0x1e93e9['uniqueid'],_0x5aa76d[_0xdfbe('0x1d')][_0xdfbe('0x63')]()][_0xdfbe('0x15')]('\x20')});})[_0xdfbe('0x6a')](function(_0x487d83){_0x3f9e39(_0x3e3a85['error'](0x1f5,[_0x1e93e9[_0xdfbe('0x5c')],_0x487d83['message'][_0xdfbe('0x63')]()][_0xdfbe('0x15')]('\x20')));});}else{return _0x3f9e39(_0x3e3a85[_0xdfbe('0x11')](0x1f5,_0xdfbe('0x6b')));}});},'Agents':function(_0x4207f3){return new Promise(function(_0xc6bcf6,_0x5e51f7){var _0x20e902=_[_0xdfbe('0x58')](_0x30b1d2[_0xdfbe('0xc')]);_0xc6bcf6({'count':_0x20e902[_0xdfbe('0x57')],'rows':_0x20e902});});},'Telephones':function(_0x22c386){return new Promise(function(_0x4a1b22,_0x117d84){var _0x19773c=_[_0xdfbe('0x58')](_0x30b1d2[_0xdfbe('0x79')]);_0x4a1b22({'count':_0x19773c[_0xdfbe('0x57')],'rows':_0x19773c});});},'Trunks':function(_0x4e9786){return new Promise(function(_0xc64c8f,_0xd81745){var _0x4764e2=_[_0xdfbe('0x58')](_0x30b1d2[_0xdfbe('0x7a')]);_0xc64c8f({'count':_0x4764e2['length'],'rows':_0x4764e2});});},'OutboundChannels':function(_0x2a85bf){return new Promise(function(_0x28c736,_0x213559){var _0xae18f0=_['values'](_0x30b1d2[_0xdfbe('0x7b')]);_0x28c736({'count':_0xae18f0['length'],'rows':_0xae18f0});});},'Outbound':function(_0x6e5092){return new Promise(function(_0xe22d4d,_0x11fc0e){_0xe22d4d(_0x30b1d2[_0xdfbe('0x2d')]);});},'Campaigns':function(_0x2e91c6){return new Promise(function(_0x3386e3,_0xbc32da){var _0x336795=_[_0xdfbe('0x58')](_0x30b1d2[_0xdfbe('0x7c')]);_0x3386e3({'count':_0x336795[_0xdfbe('0x57')],'rows':_0x336795});});},'VoiceQueuesPreview':function(_0x5bd86f){var _0x2bffea=this;return new Promise(function(_0x1ddb65,_0x4a2a14){_0x395efd[_0xdfbe('0x7d')](_0x5bd86f['id'])['then'](function(_0x511b32){_0x1ddb65({'code':0xc8,'message':_0x511b32['message']});})['catch'](function(_0x5a1da5){_0x4a2a14(_0x2bffea[_0xdfbe('0x11')](0x1f4,_0x5a1da5[_0xdfbe('0x1d')]));});});},'EventManager':function(_0x299ff5){var _0x1cf285=this;return new Promise(function(_0x116184,_0x341e4e){if(!_0x299ff5[_0xdfbe('0x7e')]){return _0x341e4e(_0x1cf285[_0xdfbe('0x11')](0x1f4,_0xdfbe('0x7f')));}ami[_0xdfbe('0x80')]('custom:'+_0x299ff5[_0xdfbe('0x7e')],_0x299ff5[_0xdfbe('0x1d')]);_0x116184({'code':0xc8,'message':_0x299ff5});});},'FaxAccounts':function(_0xed1b28){return new Promise(function(_0x46c254,_0x3b9d2a){var _0x174edf=_[_0xdfbe('0x58')](_0x30b1d2[_0xdfbe('0x81')]);_0x46c254({'count':_0x174edf[_0xdfbe('0x57')],'rows':_0x174edf});});},'SendFax':function(_0x48cf0e){var _0x3dc7f7=this;return new Promise(function(_0x375b2f,_0x2fe65a){_0x453fe4[_0xdfbe('0x82')](_0x48cf0e)[_0xdfbe('0x1c')](function(_0x248486){_0x375b2f({'code':0xc8,'message':_0x248486['message']});})[_0xdfbe('0x6a')](function(_0x451dda){_0x2fe65a(_0x3dc7f7['error'](0x1f4,_0x451dda[_0xdfbe('0x1d')]));});});},'CheckAfterSend':function(_0x2c3142){var _0x1c444e=this;return new Promise(function(_0x39f24e,_0x184aaf){_0x453fe4[_0xdfbe('0x83')](_0x2c3142)[_0xdfbe('0x1c')](function(_0x589622){_0x39f24e({'code':0xc8,'message':_0x589622['message']});})['catch'](function(_0x1b96c2){_0x184aaf(_0x1c444e['error'](0x1f4,_0x1b96c2[_0xdfbe('0x1d')]));});});}};var _0x354413=jayson[_0xdfbe('0x84')](_0x52d3a9)['http']();_0x354413['on'](_0xdfbe('0x11'),function(_0x20290d){return _0x51a452(_0x20290d);});_0x354413['listen'](0x232a,_0xdfbe('0x85'),function(){console[_0xdfbe('0x86')](_0xdfbe('0x87'),0x232a);return _0x31803d('RPC\x20listening\x20on\x20port:'+0x232a);});});};
\ No newline at end of file
+var _0x734f=['outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalAvailable','predictiveIntervalTotalCalls','originated','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','startPredictive','startProgressive','Trunk','name','active','callerid','Interval','push','length','channels','map','uniqueid','channel','wav','ai(mixmonitorid)','find','/var/spool/asterisk/monitor/','toLowerCase','isNil','monitors','YYYY-MM-DD\x20HH:mm:ss','mixmonitorid','rec','status','MixMonitor\x20Success','Channel\x20doesn\x27t\x20exist','voicechannel','resolve','StopMixMonitor','destinationchannel','stop','filename','StopMixMonitor\x20Success','voicequeuechannelhangup','queueChannels','Hangup','voicequeuechannelredirect','Redirect','exten','values','telephones','trunks','outboundChannels','campaigns','run','emit','faxAccounts','send','checkAfterSend','server','http','127.0.0.1','log','AMI\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','lodash','util','jayson/promise','validate','bluebird','moment','../properties','../ami','format','SIP','timers','timer','updateAcw','agents','updateStatusRealtime','pause','QueuePause','isConnected','error','asterisk','username','join','pick','keys','module','action','Action','then','message','catch','ami\x20disconnected','command','Command','voiceQueues','hasOwnProperty','answered','loggedIn','pTalking','sumBillable','sumHoldTime','talking','total','type','unmanaged','abandoned','waiting','loggedInDb','outbound','dialActive','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout'];(function(_0x207811,_0x3420a6){var _0x170d56=function(_0x4340b7){while(--_0x4340b7){_0x207811['push'](_0x207811['shift']());}};_0x170d56(++_0x3420a6);}(_0x734f,0x1eb));var _0xf734=function(_0x1cac7d,_0x587638){_0x1cac7d=_0x1cac7d-0x0;var _0x468636=_0x734f[_0x1cac7d];return _0x468636;};'use strict';var _=require(_0xf734('0x0'));var util=require(_0xf734('0x1'));var jayson=require(_0xf734('0x2'));var schema=require(_0xf734('0x3'));var BPromise=require(_0xf734('0x4'));var moment=require(_0xf734('0x5'));var config=require('../../../config/environment');var properties=require(_0xf734('0x6'));var ami=require(_0xf734('0x7'));exports['listen']=function(_0x3fa377,_0x303bdf,_0x3ffcb8){return new BPromise(function(_0x355060,_0x47423d){var _0x2413f9={'QueuePause':function(_0x3fac42){return new Promise(function(_0x4e433,_0x20cfc0){var _0x10141c=util[_0xf734('0x8')]('%s/%s',_0xf734('0x9'),_0x3fac42['name']);if(_0x3fa377[_0xf734('0xa')]&&_0x3fa377[_0xf734('0xa')][_0x10141c]&&_0x3fa377[_0xf734('0xa')][_0x10141c][_0xf734('0xb')]){_0x3fa377[_0xf734('0xa')][_0x10141c][_0xf734('0xc')]();}if(_0x3fa377[_0xf734('0xd')][_0x10141c]){_0x3fa377[_0xf734('0xd')][_0x10141c][_0xf734('0xe')]({'statePause':_0x3fac42[_0xf734('0xf')]?!![]:![]});}_0x4e433({'code':0xc8,'message':_0xf734('0x10')});});},'Reload':function(_0x1c0161){var _0x4dcb35=this;return new Promise(function(_0x8985a5,_0x2ba733){if(ami[_0xf734('0x11')]()==![]){return _0x2ba733(_0x4dcb35[_0xf734('0x12')](0x1f4,[config[_0xf734('0x13')]['ip'],config[_0xf734('0x13')][_0xf734('0x14')],'ami\x20disconnected'][_0xf734('0x15')]('\x20')));}_0x1c0161=_[_0xf734('0x16')](_0x1c0161,_[_0xf734('0x17')](properties[_0xf734('0x18')]));_0x1c0161[_0xf734('0x19')]='Reload';return ami[_0xf734('0x1a')](_0x1c0161)[_0xf734('0x1b')](function(_0x109b66){_0x8985a5({'code':0xc8,'message':_0x109b66[_0xf734('0x1c')]});})[_0xf734('0x1d')](function(_0x445193){_0x2ba733(_0x4dcb35[_0xf734('0x12')](0x1f5,_0x445193['message']));});});},'Command':function(_0x7bfb3){var _0x33862b=this;return new Promise(function(_0x5d9dde,_0x5ca7cb){if(ami[_0xf734('0x11')]()==![]){return _0x5ca7cb(_0x33862b['error'](0x1f4,[config[_0xf734('0x13')]['ip'],config[_0xf734('0x13')][_0xf734('0x14')],_0xf734('0x1e')][_0xf734('0x15')]('\x20')));}_0x7bfb3=_[_0xf734('0x16')](_0x7bfb3,_0xf734('0x1f'));_0x7bfb3[_0xf734('0x19')]=_0xf734('0x20');return ami[_0xf734('0x1a')](_0x7bfb3)[_0xf734('0x1b')](function(_0x2ebba6){_0x5d9dde({'code':0xc8,'message':_0x2ebba6['content']});})[_0xf734('0x1d')](function(_0x191532){_0x5ca7cb(_0x33862b[_0xf734('0x12')](0x1f5,_0x191532[_0xf734('0x1c')]));});});},'VoiceQueues':function(_0x6829e6){return new Promise(function(_0x569615,_0x9fdae7){var _0x4f46d6=[];for(var _0x37ec05 in _0x3fa377[_0xf734('0x21')]){if(_0x3fa377['voiceQueues'][_0xf734('0x22')](_0x37ec05)){var _0x515330=_0x3fa377[_0xf734('0x21')][_0x37ec05];var _0x3b5897={'id':_0x515330['id'],'name':_0x515330['name'],'strategy':_0x515330['strategy'],'answered':_0x515330[_0xf734('0x23')],'available':_0x515330['available'],'loggedIn':_0x515330[_0xf734('0x24')],'pTalking':_0x515330[_0xf734('0x25')],'sumBillable':_0x515330[_0xf734('0x26')],'sumDuration':_0x515330['sumDuration'],'sumHoldTime':_0x515330[_0xf734('0x27')]||0x0,'talking':_0x515330[_0xf734('0x28')],'total':_0x515330[_0xf734('0x29')],'type':_0x515330[_0xf734('0x2a')],'unmanaged':_0x515330[_0xf734('0x2b')],'abandoned':_0x515330[_0xf734('0x2c')],'waiting':_0x515330[_0xf734('0x2d')],'loggedInDb':_0x515330[_0xf734('0x2e')]};if(_0x515330[_0xf734('0x2a')]===_0xf734('0x2f')){_0x3b5897[_0xf734('0x30')]=_0x515330['dialActive'];_0x3b5897['dialMethod']=_0x515330['dialMethod'];_0x3b5897[_0xf734('0x31')]=_0x515330[_0xf734('0x31')];_0x3b5897[_0xf734('0x32')]=_0x515330['dialOriginateCallerIdNumber'];_0x3b5897[_0xf734('0x33')]=_0x515330['dialOriginateTimeout'];_0x3b5897[_0xf734('0x34')]=_0x515330[_0xf734('0x34')];_0x3b5897[_0xf734('0x35')]=_0x515330[_0xf734('0x35')];_0x3b5897[_0xf734('0x36')]=_0x515330['outboundAnswerCallsDay'];_0x3b5897[_0xf734('0x37')]=_0x515330[_0xf734('0x37')];_0x3b5897[_0xf734('0x38')]=_0x515330[_0xf734('0x38')];_0x3b5897[_0xf734('0x39')]=_0x515330[_0xf734('0x39')];_0x3b5897[_0xf734('0x3a')]=_0x515330[_0xf734('0x3a')];_0x3b5897['outboundDropCallsDayCallersExit']=_0x515330[_0xf734('0x3b')];_0x3b5897[_0xf734('0x3c')]=_0x515330['outboundDropCallsDayTimeout'];_0x3b5897[_0xf734('0x3d')]=_0x515330[_0xf734('0x3d')];_0x3b5897[_0xf734('0x3e')]=_0x515330[_0xf734('0x3e')];_0x3b5897[_0xf734('0x3f')]=_0x515330[_0xf734('0x3f')];_0x3b5897[_0xf734('0x40')]=_0x515330[_0xf734('0x40')];_0x3b5897[_0xf734('0x41')]=_0x515330[_0xf734('0x41')];_0x3b5897['outboundUnknownCallsDay']=_0x515330[_0xf734('0x42')];_0x3b5897['predictiveIntervalAnsweredCalls']=_0x515330[_0xf734('0x43')];_0x3b5897['predictiveIntervalAvgHoldtime']=_0x515330['predictiveIntervalAvgHoldtime'];_0x3b5897[_0xf734('0x44')]=_0x515330[_0xf734('0x44')];_0x3b5897[_0xf734('0x45')]=_0x515330[_0xf734('0x45')];_0x3b5897['predictiveIntervalDroppedCallsTimeout']=_0x515330[_0xf734('0x46')];_0x3b5897['predictiveIntervalErlangCalls']=_0x515330[_0xf734('0x47')];_0x3b5897[_0xf734('0x48')]=_0x515330[_0xf734('0x48')];_0x3b5897[_0xf734('0x49')]=_0x515330['predictiveIntervalHitRate'];_0x3b5897[_0xf734('0x4a')]=_0x515330['predictiveIntervalMultiplicativeFactor'];_0x3b5897[_0xf734('0x4b')]=_0x515330[_0xf734('0x4b')];_0x3b5897[_0xf734('0x4c')]=_0x515330['predictiveIntervalAvailable'];_0x3b5897[_0xf734('0x4d')]=_0x515330['predictiveIntervalTotalCalls'];_0x3b5897[_0xf734('0x1c')]=_0x515330[_0xf734('0x1c')];_0x3b5897[_0xf734('0x4e')]=_0x515330['originated'];_0x3b5897['erlangCalls']=_0x515330[_0xf734('0x4f')];_0x3b5897['erlangCallToSecond']=_0x515330[_0xf734('0x50')];_0x3b5897[_0xf734('0x51')]=_0x515330['erlangAbandonmentRate'];_0x3b5897['erlangBusyFactor']=_0x515330[_0xf734('0x52')];_0x3b5897['startPredictive']=_0x515330[_0xf734('0x53')];_0x3b5897['startProgressive']=_0x515330[_0xf734('0x54')];}if(_0x515330[_0xf734('0x55')]){_0x3b5897[_0xf734('0x55')]={'id':_0x515330[_0xf734('0x55')]['id'],'name':_0x515330[_0xf734('0x55')][_0xf734('0x56')],'active':_0x515330['Trunk'][_0xf734('0x57')],'callerid':_0x515330[_0xf734('0x55')][_0xf734('0x58')]};}if(_0x515330[_0xf734('0x59')]){_0x3b5897[_0xf734('0x59')]={'id':_0x515330[_0xf734('0x59')]['id'],'name':_0x515330[_0xf734('0x59')][_0xf734('0x56')]};}_0x4f46d6[_0xf734('0x5a')](_0x3b5897);}}_0x569615({'count':_0x4f46d6[_0xf734('0x5b')],'rows':_0x4f46d6});});},'VoiceChannels':function(_0x495314){return new Promise(function(_0x148799,_0x5ed17c){var _0xc1f66f=_['values'](_0x3fa377[_0xf734('0x5c')]);_0x148799({'count':_0xc1f66f[_0xf734('0x5b')],'rows':_0xc1f66f});});},'VoiceChannelMixMonitor':function(_0x3cda9b){var _0x53a1ef=this;return new Promise(function(_0x312997,_0x759b87){if(ami[_0xf734('0x11')]()==![]){return _0x759b87(_0x53a1ef[_0xf734('0x12')](0x1f4,[config['asterisk']['ip'],config[_0xf734('0x13')][_0xf734('0x14')],_0xf734('0x1e')][_0xf734('0x15')]('\x20')));}var _0x55b5d6=schema(properties['voicechannel'])[_0xf734('0x3')](_0x3cda9b);if(_0x55b5d6[_0xf734('0x5b')]>0x0){return _0x759b87(_0x53a1ef['error'](0x1f4,_[_0xf734('0x5d')](_0x55b5d6,_0xf734('0x1c'))[_0xf734('0x15')](',\x20')));}var _0x5d0b40=_['find'](_0x3fa377[_0xf734('0x5c')],{'uniqueid':_0x3cda9b[_0xf734('0x5e')]});if(_0x5d0b40&&_0x5d0b40[_0xf734('0x5f')]){var _0x48c076=util[_0xf734('0x8')]('%s.%s',_0x3cda9b['filename']||_0x3cda9b[_0xf734('0x5e')],_0x3cda9b['format']||_0xf734('0x60'));return ami[_0xf734('0x1a')]({'action':'MixMonitor','channel':_0x5d0b40[_0xf734('0x5f')],'file':_0x48c076,'options':_0xf734('0x61')})[_0xf734('0x1b')](function(_0x3396a0){var _0x4c0c37=_[_0xf734('0x62')](_0x5d0b40['monitors'],{'filename':_0xf734('0x63')+_0x48c076[_0xf734('0x64')]()});if(_[_0xf734('0x65')](_0x4c0c37)){_0x5d0b40[_0xf734('0x66')][_0xf734('0x5a')]({'filename':_0xf734('0x63')+_0x48c076[_0xf734('0x64')](),'createdAt':moment()[_0xf734('0x8')](_0xf734('0x67')),'mixmonitorid':_0x3396a0[_0xf734('0x68')],'status':_0xf734('0x69')});}else{_0x4c0c37['mixmonitorid']=_0x3396a0[_0xf734('0x68')];_0x4c0c37[_0xf734('0x6a')]=_0xf734('0x69');}_0x312997({'code':0xc8,'message':[_0x3cda9b[_0xf734('0x5e')],_0xf734('0x6b'),_0x3396a0['mixmonitorid']][_0xf734('0x15')]('\x20'),'mixmonitorid':_0x3396a0[_0xf734('0x68')]});})['catch'](function(_0x6c8e6d){_0x759b87(_0x53a1ef[_0xf734('0x12')](0x1f5,[_0x3cda9b[_0xf734('0x5e')],_0x6c8e6d['message'][_0xf734('0x64')]()][_0xf734('0x15')]('\x20')));});}else{return _0x759b87(_0x53a1ef[_0xf734('0x12')](0x1f5,_0xf734('0x6c')));}});},'VoiceChannelStopMixMonitor':function(_0x5bcdfa){var _0x35746c=this;return new Promise(function(_0x320f4d,_0x2e6d19){if(ami[_0xf734('0x11')]()==![]){return _0x2e6d19(_0x35746c[_0xf734('0x12')](0x1f4,[config['asterisk']['ip'],config['asterisk'][_0xf734('0x14')],'ami\x20disconnected'][_0xf734('0x15')]('\x20')));}var _0x3e63f6=schema(properties[_0xf734('0x6d')])[_0xf734('0x3')](_0x5bcdfa);if(_0x3e63f6[_0xf734('0x5b')]>0x0){return _0x2e6d19(_0x35746c[_0xf734('0x12')](0x1f4,_['map'](_0x3e63f6,_0xf734('0x1c'))[_0xf734('0x15')](',\x20')));}var _0x299269=_[_0xf734('0x62')](_0x3fa377[_0xf734('0x5c')],{'uniqueid':_0x5bcdfa[_0xf734('0x5e')]});if(_0x299269){return BPromise[_0xf734('0x6e')]()[_0xf734('0x1b')](function(){if(_0x299269[_0xf734('0x5f')]){return ami['Action']({'action':_0xf734('0x6f'),'channel':_0x299269[_0xf734('0x5f')],'mixmonitorid':_0x5bcdfa['mixmonitorid']})[_0xf734('0x1d')](function(_0x2aafdb){});}})[_0xf734('0x1b')](function(){if(_0x299269[_0xf734('0x70')]){return ami[_0xf734('0x1a')]({'action':'StopMixMonitor','channel':_0x299269[_0xf734('0x70')],'mixmonitorid':_0x5bcdfa['mixmonitorid']})['catch'](function(_0x295413){});}})['then'](function(_0x1754e0){var _0x48d1ae=_[_0xf734('0x62')](_0x299269['monitors'],{'mixmonitorid':_0x5bcdfa[_0xf734('0x68')]});if(_0x48d1ae){_0x48d1ae[_0xf734('0x6a')]=_0xf734('0x71');}})[_0xf734('0x1b')](function(){var _0x14fafc=util[_0xf734('0x8')]('%s.%s',_0x5bcdfa[_0xf734('0x72')]||_0x5bcdfa[_0xf734('0x5e')],_0x5bcdfa[_0xf734('0x8')]||_0xf734('0x60'));var _0x1ba064=_['find'](_0x299269[_0xf734('0x66')],{'filename':_0xf734('0x63')+_0x14fafc[_0xf734('0x64')]()});if(_0x1ba064){_0x1ba064['status']=_0xf734('0x71');}})[_0xf734('0x1b')](function(){_0x320f4d({'code':0xc8,'message':[_0x5bcdfa[_0xf734('0x5e')],_0xf734('0x73')][_0xf734('0x15')]('\x20')});})[_0xf734('0x1d')](function(_0x2e90fa){_0x2e6d19(_0x35746c[_0xf734('0x12')](0x1f5,[_0x5bcdfa['uniqueid'],_0x2e90fa[_0xf734('0x1c')]['toLowerCase']()]['join']('\x20')));});}else{return _0x2e6d19(_0x35746c['error'](0x1f5,_0xf734('0x6c')));}});},'VoiceQueuesChannels':function(_0x129523){return new Promise(function(_0x28da28,_0x3d0a78){var _0x33a9d1=_['values'](_0x3fa377['queueChannels']);_0x28da28({'count':_0x33a9d1['length'],'rows':_0x33a9d1});});},'VoiceQueuesChannel':function(_0x448ece){var _0x5950e6=this;return new Promise(function(_0x17e046,_0x149175){var _0x3c4ea8=schema(properties['voicequeuechannel'])[_0xf734('0x3')](_0x448ece);if(_0x3c4ea8[_0xf734('0x5b')]>0x0){return _0x149175(_0x5950e6[_0xf734('0x12')](0x1f4,_[_0xf734('0x5d')](_0x3c4ea8,_0xf734('0x1c'))[_0xf734('0x15')](',\x20')));}var _0x2fdd84=_[_0xf734('0x62')](_0x3fa377['queueChannels'],{'uniqueid':_0x448ece[_0xf734('0x5e')]});if(_0x2fdd84){_0x17e046(_0x2fdd84);}else{return _0x149175(_0x5950e6[_0xf734('0x12')](0x1f5,_0xf734('0x6c')));}});},'VoiceQueuesChannelHangup':function(_0xa057c9){var _0x550310=this;return new Promise(function(_0x1eda44,_0x355c40){if(ami[_0xf734('0x11')]()==![]){return _0x355c40(_0x550310['error'](0x1f4,[config[_0xf734('0x13')]['ip'],config[_0xf734('0x13')]['username'],_0xf734('0x1e')]['join']('\x20')));}var _0x1486c8=schema(properties[_0xf734('0x74')])[_0xf734('0x3')](_0xa057c9);if(_0x1486c8[_0xf734('0x5b')]>0x0){return _0x355c40(_0x550310[_0xf734('0x12')](0x1f4,_[_0xf734('0x5d')](_0x1486c8,_0xf734('0x1c'))[_0xf734('0x15')](',\x20')));}var _0x10aa82=_[_0xf734('0x62')](_0x3fa377[_0xf734('0x75')],{'uniqueid':_0xa057c9[_0xf734('0x5e')]});if(_0x10aa82&&_0x10aa82[_0xf734('0x5f')]){return ami[_0xf734('0x1a')]({'action':_0xf734('0x76'),'channel':_0x10aa82[_0xf734('0x5f')]})[_0xf734('0x1b')](function(_0x3cb995){_0x1eda44({'code':0xc8,'message':[_0xa057c9[_0xf734('0x5e')],_0x3cb995[_0xf734('0x1c')][_0xf734('0x64')]()]['join']('\x20')});})[_0xf734('0x1d')](function(_0x2e1a3d){_0x355c40(_0x550310['error'](0x1f5,[_0xa057c9[_0xf734('0x5e')],_0x2e1a3d[_0xf734('0x1c')][_0xf734('0x64')]()][_0xf734('0x15')]('\x20')));});}else{return _0x355c40(_0x550310[_0xf734('0x12')](0x1f5,_0xf734('0x6c')));}});},'VoiceQueuesChannelRedirect':function(_0x4859d8){var _0x1a439a=this;return new Promise(function(_0x13fdff,_0x44a760){if(ami[_0xf734('0x11')]()==![]){return _0x44a760(_0x1a439a['error'](0x1f4,[config['asterisk']['ip'],config[_0xf734('0x13')][_0xf734('0x14')],_0xf734('0x1e')][_0xf734('0x15')]('\x20')));}var _0x1d2e4f=schema(properties[_0xf734('0x77')])['validate'](_0x4859d8);if(_0x1d2e4f[_0xf734('0x5b')]>0x0){return _0x44a760(_0x1a439a[_0xf734('0x12')](0x1f4,_[_0xf734('0x5d')](_0x1d2e4f,'message')[_0xf734('0x15')](',\x20')));}var _0x39b6a5=_['find'](_0x3fa377[_0xf734('0x75')],{'uniqueid':_0x4859d8[_0xf734('0x5e')]});if(_0x39b6a5&&_0x39b6a5[_0xf734('0x5f')]){return ami[_0xf734('0x1a')]({'action':_0xf734('0x78'),'channel':_0x39b6a5[_0xf734('0x5f')],'exten':_0x4859d8[_0xf734('0x79')],'context':_0x4859d8['context']||_0x39b6a5['context'],'priority':0x1})[_0xf734('0x1b')](function(_0x1dc29b){_0x13fdff({'code':0xc8,'message':[_0x4859d8[_0xf734('0x5e')],_0x1dc29b[_0xf734('0x1c')]['toLowerCase']()][_0xf734('0x15')]('\x20')});})[_0xf734('0x1d')](function(_0x1cfa72){_0x44a760(_0x1a439a['error'](0x1f5,[_0x4859d8[_0xf734('0x5e')],_0x1cfa72[_0xf734('0x1c')][_0xf734('0x64')]()][_0xf734('0x15')]('\x20')));});}else{return _0x44a760(_0x1a439a[_0xf734('0x12')](0x1f5,'Channel\x20doesn\x27t\x20exist'));}});},'Agents':function(_0x1a4e2b){return new Promise(function(_0xceb231,_0x5a6dea){var _0x47b3d4=_['values'](_0x3fa377[_0xf734('0xd')]);_0xceb231({'count':_0x47b3d4[_0xf734('0x5b')],'rows':_0x47b3d4});});},'Telephones':function(_0x25fd14){return new Promise(function(_0x14e9ae,_0x592041){var _0x9efeb8=_[_0xf734('0x7a')](_0x3fa377[_0xf734('0x7b')]);_0x14e9ae({'count':_0x9efeb8[_0xf734('0x5b')],'rows':_0x9efeb8});});},'Trunks':function(_0x2f3ae7){return new Promise(function(_0x6b2522,_0x2eea1f){var _0x157a5c=_['values'](_0x3fa377[_0xf734('0x7c')]);_0x6b2522({'count':_0x157a5c[_0xf734('0x5b')],'rows':_0x157a5c});});},'OutboundChannels':function(_0x45b75a){return new Promise(function(_0x28d54b,_0x52fb85){var _0x2bc6ad=_['values'](_0x3fa377[_0xf734('0x7d')]);_0x28d54b({'count':_0x2bc6ad['length'],'rows':_0x2bc6ad});});},'Outbound':function(_0x4710a3){return new Promise(function(_0x13c301,_0x41d435){_0x13c301(_0x3fa377[_0xf734('0x2f')]);});},'Campaigns':function(_0x177e3c){return new Promise(function(_0x4a38d0,_0x57bd9b){var _0x50c72e=_[_0xf734('0x7a')](_0x3fa377[_0xf734('0x7e')]);_0x4a38d0({'count':_0x50c72e[_0xf734('0x5b')],'rows':_0x50c72e});});},'VoiceQueuesPreview':function(_0x3da519){var _0x1c09b6=this;return new Promise(function(_0x376769,_0x1f2f80){_0x303bdf[_0xf734('0x7f')](_0x3da519['id'])['then'](function(_0x4ad37c){_0x376769({'code':0xc8,'message':_0x4ad37c[_0xf734('0x1c')]});})[_0xf734('0x1d')](function(_0x40060e){_0x1f2f80(_0x1c09b6['error'](0x1f4,_0x40060e[_0xf734('0x1c')]));});});},'EventManager':function(_0x139fe7){var _0x298c6d=this;return new Promise(function(_0x3c59db,_0x3a0f27){if(!_0x139fe7['event']){return _0x3a0f27(_0x298c6d['error'](0x1f4,'Event\x20name\x20mandatory'));}ami[_0xf734('0x80')]('custom:'+_0x139fe7['event'],_0x139fe7[_0xf734('0x1c')]);_0x3c59db({'code':0xc8,'message':_0x139fe7});});},'FaxAccounts':function(_0x3b4800){return new Promise(function(_0x535b9d,_0xa53626){var _0x3cf2cb=_['values'](_0x3fa377[_0xf734('0x81')]);_0x535b9d({'count':_0x3cf2cb[_0xf734('0x5b')],'rows':_0x3cf2cb});});},'SendFax':function(_0x54402e){var _0x5ed822=this;return new Promise(function(_0x585ad2,_0x856478){_0x3ffcb8[_0xf734('0x82')](_0x54402e)[_0xf734('0x1b')](function(_0x543107){_0x585ad2({'code':0xc8,'message':_0x543107[_0xf734('0x1c')]});})['catch'](function(_0x436152){_0x856478(_0x5ed822[_0xf734('0x12')](0x1f4,_0x436152[_0xf734('0x1c')]));});});},'CheckAfterSend':function(_0x391127){var _0x202743=this;return new Promise(function(_0x2496d7,_0x3f7ff0){_0x3ffcb8[_0xf734('0x83')](_0x391127)['then'](function(_0x5c5794){_0x2496d7({'code':0xc8,'message':_0x5c5794['message']});})[_0xf734('0x1d')](function(_0x3492d1){_0x3f7ff0(_0x202743[_0xf734('0x12')](0x1f4,_0x3492d1['message']));});});}};var _0x52ecd5=jayson[_0xf734('0x84')](_0x2413f9)[_0xf734('0x85')]();_0x52ecd5['on'](_0xf734('0x12'),function(_0x1cde28){return _0x47423d(_0x1cde28);});_0x52ecd5['listen'](0x232a,_0xf734('0x86'),function(){console[_0xf734('0x87')](_0xf734('0x88'),0x232a);return _0x355060(_0xf734('0x89')+0x232a);});});};
\ No newline at end of file
index 91927e3..4653754 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x78ab=['toLowerCase','createContact','catch','error','Error\x20creating\x20contact','name','action','merge','bluebird','lodash','ioredis','../../../../config/environment','../../../../config/logger','trigger','../../rpc/cmContact','redis','localhost','socket.io-emitter','info','stringify','emit','exec','autoCreate','data2','data1','calleridnum','routeId','calleridname','uniqueid','firstName','destcalleridname','destcalleridnum','phone','<unknown>','resolve','then','showContact','omit','xmd-contactid2','user:%s','format','trigger:%s'];(function(_0x21b9cd,_0x2dffd4){var _0x528d84=function(_0x453653){while(--_0x453653){_0x21b9cd['push'](_0x21b9cd['shift']());}};_0x528d84(++_0x2dffd4);}(_0x78ab,0x1ac));var _0xb78a=function(_0x12fc8d,_0x19ee33){_0x12fc8d=_0x12fc8d-0x0;var _0x3f9d04=_0x78ab[_0x12fc8d];return _0x3f9d04;};'use strict';var BPromise=require(_0xb78a('0x0'));var util=require('util');var _=require(_0xb78a('0x1'));var Redis=require(_0xb78a('0x2'));var config=require(_0xb78a('0x3'));var logger=require(_0xb78a('0x4'))(_0xb78a('0x5'));var cmContactRpc=require(_0xb78a('0x6'));config[_0xb78a('0x7')]=_['defaults'](config[_0xb78a('0x7')],{'host':_0xb78a('0x8'),'port':0x18eb});var io=require(_0xb78a('0x9'))(new Redis(config[_0xb78a('0x7')]));function emit(_0x32302f,_0x548471,_0xbaa285){logger[_0xb78a('0xa')](_0x32302f,_0x548471,JSON[_0xb78a('0xb')](_0xbaa285));io['to'](_0x32302f)[_0xb78a('0xc')](_0x548471,_0xbaa285);}exports[_0xb78a('0xd')]=function(_0x5a832b,_0x150453,_0x448b70){_0x448b70[_0xb78a('0xe')]=0x0;if(_0x150453['data2']&&parseInt(_0x150453[_0xb78a('0xf')],0xa)){var _0x4d1117={'ListId':parseInt(_0x150453[_0xb78a('0x10')],0xa),'phone':_0x448b70[_0xb78a('0x11')]};if(_['isNil'](_0x448b70[_0xb78a('0x12')])){_0x4d1117['firstName']=_0x448b70[_0xb78a('0x13')]&&_0x448b70[_0xb78a('0x13')]!=='<unknown>'?_0x448b70['calleridname']:_0x448b70[_0xb78a('0x11')]||_0x448b70[_0xb78a('0x14')];}else{_0x4d1117[_0xb78a('0x15')]=_0x448b70[_0xb78a('0x16')]&&_0x448b70[_0xb78a('0x16')]!=='<unknown>'?_0x448b70[_0xb78a('0x16')]:_0x448b70[_0xb78a('0x17')]||_0x448b70[_0xb78a('0x14')];_0x4d1117[_0xb78a('0x18')]=_0x448b70[_0xb78a('0x16')]&&_0x448b70[_0xb78a('0x16')]!==_0xb78a('0x19')?_0x448b70['destcalleridname']:_0x448b70[_0xb78a('0x17')]||_0x448b70[_0xb78a('0x14')];}BPromise[_0xb78a('0x1a')]()[_0xb78a('0x1b')](cmContactRpc[_0xb78a('0x1c')]({'where':_[_0xb78a('0x1d')](_0x4d1117,[_0xb78a('0x15')])}))[_0xb78a('0x1b')](function(_0xb41fc){if(_0xb41fc){_0x448b70[_0xb78a('0x1e')]=_0xb41fc['id'];emit(util['format'](_0xb78a('0x1f'),_0x5a832b['name']),util[_0xb78a('0x20')](_0xb78a('0x21'),_0x150453['action'][_0xb78a('0x22')]()),_['merge'](_0x448b70,{'ListId':parseInt(_0x150453[_0xb78a('0x10')],0xa)}));return;}else{return BPromise['resolve']()['then'](cmContactRpc[_0xb78a('0x23')](_0x4d1117));}})[_0xb78a('0x1b')](function(_0x3b76c8){if(_0x3b76c8){_0x448b70[_0xb78a('0x1e')]=_0x3b76c8['id'];emit(util[_0xb78a('0x20')](_0xb78a('0x1f'),_0x5a832b['name']),util['format'](_0xb78a('0x21'),_0x150453['action'][_0xb78a('0x22')]()),_['merge'](_0x448b70,{'ListId':parseInt(_0x150453[_0xb78a('0x10')],0xa)}));}})[_0xb78a('0x24')](function(_0x2fe4a1){logger[_0xb78a('0x25')](_0xb78a('0x26'),JSON[_0xb78a('0xb')](_0x2fe4a1));});}else{if(_0x5a832b){emit(util[_0xb78a('0x20')](_0xb78a('0x1f'),_0x5a832b[_0xb78a('0x27')]),util[_0xb78a('0x20')](_0xb78a('0x21'),_0x150453[_0xb78a('0x28')][_0xb78a('0x22')]()),_[_0xb78a('0x29')]({'ListId':parseInt(_0x150453[_0xb78a('0x10')],0xa)},_0x448b70));}}};
\ No newline at end of file
+var _0xbd46=['destcalleridnum','phone','showContact','then','user:%s','name','format','trigger:%s','toLowerCase','resolve','action','merge','error','bluebird','util','ioredis','../../../../config/environment','trigger','defaults','redis','localhost','socket.io-emitter','info','stringify','emit','exec','autoCreate','data2','data1','calleridnum','routeId','firstName','<unknown>','calleridname','uniqueid','destcalleridname'];(function(_0x2c10fb,_0x380e1b){var _0x23e4c0=function(_0x4fdea5){while(--_0x4fdea5){_0x2c10fb['push'](_0x2c10fb['shift']());}};_0x23e4c0(++_0x380e1b);}(_0xbd46,0x175));var _0x6bd4=function(_0x4a93bb,_0x495404){_0x4a93bb=_0x4a93bb-0x0;var _0x208468=_0xbd46[_0x4a93bb];return _0x208468;};'use strict';var BPromise=require(_0x6bd4('0x0'));var util=require(_0x6bd4('0x1'));var _=require('lodash');var Redis=require(_0x6bd4('0x2'));var config=require(_0x6bd4('0x3'));var logger=require('../../../../config/logger')(_0x6bd4('0x4'));var cmContactRpc=require('../../rpc/cmContact');config['redis']=_[_0x6bd4('0x5')](config[_0x6bd4('0x6')],{'host':_0x6bd4('0x7'),'port':0x18eb});var io=require(_0x6bd4('0x8'))(new Redis(config[_0x6bd4('0x6')]));function emit(_0x46725a,_0x407d63,_0x4b51ff){logger[_0x6bd4('0x9')](_0x46725a,_0x407d63,JSON[_0x6bd4('0xa')](_0x4b51ff));io['to'](_0x46725a)[_0x6bd4('0xb')](_0x407d63,_0x4b51ff);}exports[_0x6bd4('0xc')]=function(_0x5d4bcc,_0x35655b,_0x51c820){_0x51c820[_0x6bd4('0xd')]=0x0;if(_0x35655b['data2']&&parseInt(_0x35655b[_0x6bd4('0xe')],0xa)){var _0x2d6661={'ListId':parseInt(_0x35655b[_0x6bd4('0xf')],0xa),'phone':_0x51c820[_0x6bd4('0x10')]};if(_['isNil'](_0x51c820[_0x6bd4('0x11')])){_0x2d6661[_0x6bd4('0x12')]=_0x51c820['calleridname']&&_0x51c820['calleridname']!==_0x6bd4('0x13')?_0x51c820[_0x6bd4('0x14')]:_0x51c820['calleridnum']||_0x51c820[_0x6bd4('0x15')];}else{_0x2d6661[_0x6bd4('0x12')]=_0x51c820[_0x6bd4('0x16')]&&_0x51c820[_0x6bd4('0x16')]!==_0x6bd4('0x13')?_0x51c820[_0x6bd4('0x16')]:_0x51c820[_0x6bd4('0x17')]||_0x51c820[_0x6bd4('0x15')];_0x2d6661[_0x6bd4('0x18')]=_0x51c820[_0x6bd4('0x16')]&&_0x51c820[_0x6bd4('0x16')]!==_0x6bd4('0x13')?_0x51c820[_0x6bd4('0x16')]:_0x51c820[_0x6bd4('0x17')]||_0x51c820[_0x6bd4('0x15')];}BPromise['resolve']()['then'](cmContactRpc[_0x6bd4('0x19')]({'where':_['omit'](_0x2d6661,[_0x6bd4('0x12')])}))[_0x6bd4('0x1a')](function(_0x48af9a){if(_0x48af9a){_0x51c820['xmd-contactid2']=_0x48af9a['id'];emit(util['format'](_0x6bd4('0x1b'),_0x5d4bcc[_0x6bd4('0x1c')]),util[_0x6bd4('0x1d')](_0x6bd4('0x1e'),_0x35655b['action'][_0x6bd4('0x1f')]()),_['merge'](_0x51c820,{'ListId':parseInt(_0x35655b['data1'],0xa)}));return;}else{return BPromise[_0x6bd4('0x20')]()[_0x6bd4('0x1a')](cmContactRpc['createContact'](_0x2d6661));}})[_0x6bd4('0x1a')](function(_0x29e3c7){if(_0x29e3c7){_0x51c820['xmd-contactid2']=_0x29e3c7['id'];emit(util['format'](_0x6bd4('0x1b'),_0x5d4bcc[_0x6bd4('0x1c')]),util[_0x6bd4('0x1d')](_0x6bd4('0x1e'),_0x35655b[_0x6bd4('0x21')][_0x6bd4('0x1f')]()),_[_0x6bd4('0x22')](_0x51c820,{'ListId':parseInt(_0x35655b[_0x6bd4('0xf')],0xa)}));}})['catch'](function(_0x21a027){logger[_0x6bd4('0x23')]('Error\x20creating\x20contact',JSON[_0x6bd4('0xa')](_0x21a027));});}else{if(_0x5d4bcc){emit(util['format'](_0x6bd4('0x1b'),_0x5d4bcc['name']),util[_0x6bd4('0x1d')](_0x6bd4('0x1e'),_0x35655b[_0x6bd4('0x21')][_0x6bd4('0x1f')]()),_[_0x6bd4('0x22')]({'ListId':parseInt(_0x35655b[_0x6bd4('0xf')],0xa)},_0x51c820));}}};
\ No newline at end of file
index c76de13..3cfd00d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7615=['upperFirst','AccountId','operator','message','event','agent','membername','lastevent','util','mustache','./urlforward','./integration','./cmContact','./script','../../../config/environment','../../../config/logger','trigger','../ami','redis','defaults','localhost','socket.io-emitter','popup','url','winapp','triggers','agents','voiceQueues','voiceExtensions','zendeskAccounts','freshdeskAccounts','salesforceAccounts','sugarcrmAccounts','zohoAccounts','deskAccounts','vtigerAccounts','servicenowAccounts','dynamics365Accounts','accounts','custom:agentcalled','syncCustomEvent','bind','custom:agentconnect','custom:agentcomplete','custom:dialbegin','syncAgentDial','custom:dialconnect','custom:dialend','custom:closedinteraction','custom:outgoingmessage','custom:acceptmessage','custom:rejectmessage','emit','info','stringify','prototype','clone','checkTriggers','interface','status','checkTrigger','merge','variables','Actions','length','toLowerCase','contactmanager','motionbar','browser','data1','TemplateId','data2','html','templates','render','template\x20not\x20found','uri','buildUri','isNil','data3','data4','location','uriLocation','windowWidth','data5','800','600','winApplication','winArguments','format','action','jscripty','user:%s','name','trigger:%s','exec','integration','queue','routeId','script','parse','query','search','every','AllConditions','checkConditions','AnyConditions','some','channel','field','account','chat','ChatWebsiteId','value'];(function(_0x59e7a5,_0x351d44){var _0x272605=function(_0x241003){while(--_0x241003){_0x59e7a5['push'](_0x59e7a5['shift']());}};_0x272605(++_0x351d44);}(_0x7615,0xec));var _0x5761=function(_0x37756b,_0x24db76){_0x37756b=_0x37756b-0x0;var _0x46efec=_0x7615[_0x37756b];return _0x46efec;};'use strict';var util=require(_0x5761('0x0'));var _=require('lodash');var url=require('url');var Mustache=require(_0x5761('0x1'));var Redis=require('ioredis');var urlforward=require(_0x5761('0x2'));var integration=require(_0x5761('0x3'));var cmContact=require(_0x5761('0x4'));var script=require(_0x5761('0x5'));var cmContactRpc=require('../rpc/cmContact');var config=require(_0x5761('0x6'));var logger=require(_0x5761('0x7'))(_0x5761('0x8'));var ami=require(_0x5761('0x9'));config[_0x5761('0xa')]=_[_0x5761('0xb')](config['redis'],{'host':_0x5761('0xc'),'port':0x18eb});var io=require(_0x5761('0xd'))(new Redis(config[_0x5761('0xa')]));var operators={'equals':function(_0x42933f,_0x39f06a){return _0x42933f==_0x39f06a;},'not_equals':function(_0x2fa89e,_0x46afd2){return _0x2fa89e!=_0x46afd2;}};var barAndWebActions=[_0x5761('0xe'),_0x5761('0xf'),_0x5761('0x10')];function Trigger(_0x22652a){this[_0x5761('0x11')]=_0x22652a['triggers'];this[_0x5761('0x12')]=_0x22652a[_0x5761('0x12')];this[_0x5761('0x13')]=_0x22652a[_0x5761('0x13')];this['templates']=_0x22652a['templates'];this[_0x5761('0x14')]=_0x22652a[_0x5761('0x14')];this[_0x5761('0x15')]=_0x22652a['zendeskAccounts'];this['freshdeskAccounts']=_0x22652a[_0x5761('0x16')];this[_0x5761('0x17')]=_0x22652a['salesforceAccounts'];this[_0x5761('0x18')]=_0x22652a['sugarcrmAccounts'];this[_0x5761('0x19')]=_0x22652a[_0x5761('0x19')];this[_0x5761('0x1a')]=_0x22652a[_0x5761('0x1a')];this[_0x5761('0x1b')]=_0x22652a[_0x5761('0x1b')];this[_0x5761('0x1c')]=_0x22652a[_0x5761('0x1c')];this[_0x5761('0x1d')]=_0x22652a[_0x5761('0x1d')];this[_0x5761('0x1e')]={'zendesk':this[_0x5761('0x15')],'salesforce':this[_0x5761('0x17')],'freshdesk':this[_0x5761('0x16')],'sugarcrm':this[_0x5761('0x18')],'zoho':this[_0x5761('0x19')],'desk':this[_0x5761('0x1a')],'vtiger':this[_0x5761('0x1b')],'servicenow':this[_0x5761('0x1c')],'dynamics365':this[_0x5761('0x1d')]};ami['on'](_0x5761('0x1f'),this[_0x5761('0x20')][_0x5761('0x21')](this));ami['on'](_0x5761('0x22'),this[_0x5761('0x20')][_0x5761('0x21')](this));ami['on']('custom:agentringnoanswer',this[_0x5761('0x20')][_0x5761('0x21')](this));ami['on'](_0x5761('0x23'),this[_0x5761('0x20')][_0x5761('0x21')](this));ami['on']('custom:queuecallerabandon',this[_0x5761('0x20')]['bind'](this));ami['on'](_0x5761('0x24'),this[_0x5761('0x25')]['bind'](this));ami['on'](_0x5761('0x26'),this[_0x5761('0x25')][_0x5761('0x21')](this));ami['on'](_0x5761('0x27'),this['syncAgentDial']['bind'](this));ami['on']('custom:newinteraction',this[_0x5761('0x20')][_0x5761('0x21')](this));ami['on'](_0x5761('0x28'),this[_0x5761('0x20')][_0x5761('0x21')](this));ami['on']('custom:incomingmessage',this[_0x5761('0x20')][_0x5761('0x21')](this));ami['on'](_0x5761('0x29'),this[_0x5761('0x20')][_0x5761('0x21')](this));ami['on'](_0x5761('0x2a'),this[_0x5761('0x20')][_0x5761('0x21')](this));ami['on'](_0x5761('0x2b'),this[_0x5761('0x20')]['bind'](this));}Trigger['prototype'][_0x5761('0x2c')]=function(_0x55a48f,_0x9c6736,_0x977132){logger[_0x5761('0x2d')](_0x55a48f,_0x9c6736,JSON[_0x5761('0x2e')](_0x977132));io['to'](_0x55a48f)[_0x5761('0x2c')](_0x9c6736,_0x977132);};Trigger[_0x5761('0x2f')]['syncCustomEvent']=function(_0x4145cc){var _0x1d0d3f=_[_0x5761('0x30')](_0x4145cc);this[_0x5761('0x31')](_0x1d0d3f);};Trigger[_0x5761('0x2f')][_0x5761('0x25')]=function(_0x2d1bf7){if(this[_0x5761('0x12')][_0x2d1bf7[_0x5761('0x32')]]){this[_0x5761('0x20')](_0x2d1bf7);}};Trigger[_0x5761('0x2f')][_0x5761('0x31')]=function(_0x4239df){var _0x42da27;for(var _0x2056a9 in this[_0x5761('0x11')]){if(this['triggers']['hasOwnProperty'](_0x2056a9)){if(this[_0x5761('0x11')][_0x2056a9][_0x5761('0x33')]){_0x42da27=this[_0x5761('0x34')](this[_0x5761('0x11')][_0x2056a9],_0x4239df);if(_0x42da27){_[_0x5761('0x35')](_0x4239df,_0x4239df[_0x5761('0x36')]);for(var _0x1bfda9=0x0,_0x711812,_0x3e7cfc,_0x3434f8;_0x1bfda9<this[_0x5761('0x11')][_0x2056a9][_0x5761('0x37')][_0x5761('0x38')];_0x1bfda9+=0x1){_0x711812=this['triggers'][_0x2056a9][_0x5761('0x37')][_0x1bfda9];if(this['agents'][_0x4239df[_0x5761('0x32')]]){switch(_0x711812['action'][_0x5761('0x39')]()){case _0x5761('0x3a'):break;case _0x5761('0x3b'):case _0x5761('0x3c'):var _0x3ba067={};switch(barAndWebActions[_0x711812[_0x5761('0x3d')]]){case'popup':_0x3ba067[_0x5761('0x3e')]=_0x711812[_0x5761('0x3f')];_0x3ba067[_0x5761('0x40')]=this[_0x5761('0x41')][_0x711812[_0x5761('0x3f')]]?Mustache[_0x5761('0x42')](this[_0x5761('0x41')][_0x711812['data2']][_0x5761('0x40')],_0x4239df):_0x5761('0x43');break;case _0x5761('0xf'):_0x3ba067[_0x5761('0x44')]=this[_0x5761('0x45')](_0x711812['data2'],_0x4239df,_[_0x5761('0x46')](_0x711812[_0x5761('0x47')])?!![]:parseInt(_0x711812[_0x5761('0x47')],0xa));if(_[_0x5761('0x46')](_0x711812[_0x5761('0x48')])){_0x3ba067[_0x5761('0x49')]='0';}else{_0x3ba067[_0x5761('0x4a')]=_0x711812[_0x5761('0x48')];_0x3ba067[_0x5761('0x4b')]=_['isNil'](_0x711812[_0x5761('0x4c')])?_0x5761('0x4d'):_0x711812[_0x5761('0x4c')];_0x3ba067['windowHeight']=_[_0x5761('0x46')](_0x711812['data6'])?_0x5761('0x4e'):_0x711812['data6'];}break;case'winapp':_0x3ba067[_0x5761('0x4f')]=_0x711812[_0x5761('0x3f')]?Mustache[_0x5761('0x42')](_0x711812[_0x5761('0x3f')],_0x4239df):'';_0x3ba067[_0x5761('0x50')]=_0x711812[_0x5761('0x47')]?Mustache[_0x5761('0x42')](_0x711812[_0x5761('0x47')],_0x4239df):'';break;}this['emit'](util[_0x5761('0x51')]('user:%s',this[_0x5761('0x12')][_0x4239df[_0x5761('0x32')]]['name']),util[_0x5761('0x51')]('trigger:%s:%s',_0x711812[_0x5761('0x52')][_0x5761('0x39')](),barAndWebActions[_0x711812['data1']]),_[_0x5761('0x35')](_0x3ba067,_0x4239df));break;case _0x5761('0x53'):this[_0x5761('0x2c')](util['format'](_0x5761('0x54'),this[_0x5761('0x12')][_0x4239df[_0x5761('0x32')]][_0x5761('0x55')]),util[_0x5761('0x51')]('trigger:%s',_0x711812[_0x5761('0x52')][_0x5761('0x39')]()),_[_0x5761('0x35')]({'ProjectId':parseInt(_0x711812['data1'],0xa)},_0x4239df));break;default:this[_0x5761('0x2c')](util[_0x5761('0x51')](_0x5761('0x54'),this[_0x5761('0x12')][_0x4239df['interface']]['name']),util[_0x5761('0x51')](_0x5761('0x56'),_0x711812[_0x5761('0x52')]['toLowerCase']()),_[_0x5761('0x35')]({},_0x711812,_0x4239df));}}switch(_0x711812['action'][_0x5761('0x39')]()){case _0x5761('0x3a'):cmContact[_0x5761('0x57')](this[_0x5761('0x12')][_0x4239df[_0x5761('0x32')]],_0x711812,_0x4239df,cmContactRpc);break;case _0x5761('0x58'):integration[_0x5761('0x57')](_0x711812,_0x4239df,this[_0x5761('0x1e')],this[_0x5761('0x12')][_0x4239df[_0x5761('0x32')]],this[_0x5761('0x13')][_0x4239df[_0x5761('0x59')]],this[_0x5761('0x14')][_0x4239df[_0x5761('0x5a')]]);break;case'urlforward':urlforward[_0x5761('0x57')](_0x711812,_0x4239df);break;case _0x5761('0x5b'):script[_0x5761('0x57')](_0x711812,_0x4239df);break;}}}}}}};Trigger[_0x5761('0x2f')][_0x5761('0x45')]=function(_0x244e4b,_0x1f60f5,_0x4e1d62){var _0xab27b4=url[_0x5761('0x5c')](Mustache[_0x5761('0x42')](_0x244e4b,_0x1f60f5),!![]);if(_0x4e1d62){_['merge'](_0xab27b4[_0x5761('0x5d')],_0x1f60f5);}delete _0xab27b4[_0x5761('0x5e')];return url['format'](_0xab27b4);};Trigger[_0x5761('0x2f')][_0x5761('0x34')]=function(_0x3f6356,_0x45ad7d){var _0x375c55=!![],_0x100064=!![];if(_0x3f6356['AllConditions'][_0x5761('0x38')]){_0x375c55=_[_0x5761('0x5f')](_0x3f6356[_0x5761('0x60')],this[_0x5761('0x61')](_0x45ad7d,_0x3f6356['channel']));}if(_0x3f6356[_0x5761('0x62')]['length']){_0x100064=_[_0x5761('0x63')](_0x3f6356[_0x5761('0x62')],this[_0x5761('0x61')](_0x45ad7d,_0x3f6356[_0x5761('0x64')]));}return _0x375c55&&_0x100064;};Trigger[_0x5761('0x2f')][_0x5761('0x61')]=function(_0x1978ac,_0x26a538){return function(_0x6e40e6){switch(_0x6e40e6[_0x5761('0x65')]){case _0x5761('0x66'):if(_0x1978ac['channel']===_0x26a538){if(_0x26a538===_0x5761('0x67')){return _0x1978ac[_0x5761('0x68')]?operators[_0x6e40e6['operator']](Number(_0x6e40e6[_0x5761('0x69')]),_0x1978ac['ChatWebsiteId']):![];}else{return _0x1978ac[_[_0x5761('0x6a')](_0x26a538)+_0x5761('0x6b')]?operators[_0x6e40e6[_0x5761('0x6c')]](Number(_0x6e40e6[_0x5761('0x69')]),_0x1978ac[_['upperFirst'](_0x26a538)+_0x5761('0x6b')]):![];}}break;case'interaction':case _0x5761('0x6d'):if(_0x1978ac[_0x5761('0x64')]===_0x26a538){return _0x1978ac[_0x5761('0x6e')]?operators[_0x6e40e6[_0x5761('0x6c')]](_0x6e40e6[_0x5761('0x69')],_0x1978ac[_0x5761('0x6e')]):![];}break;case _0x5761('0x59'):return _0x1978ac[_0x5761('0x59')]?operators[_0x6e40e6[_0x5761('0x6c')]](_0x6e40e6[_0x5761('0x69')],_0x1978ac[_0x5761('0x59')]):![];case _0x5761('0x6f'):return _0x1978ac[_0x5761('0x70')]?operators[_0x6e40e6[_0x5761('0x6c')]](_0x6e40e6['value'],_0x1978ac[_0x5761('0x70')]):![];case _0x5761('0x71'):return _0x1978ac[_0x5761('0x71')]?operators[_0x6e40e6['operator']](_0x6e40e6[_0x5761('0x69')],_0x1978ac[_0x5761('0x71')]):![];case _0x5761('0x5a'):return _0x1978ac[_0x5761('0x5a')]?operators[_0x6e40e6[_0x5761('0x6c')]](_0x6e40e6['value'],_0x1978ac['routeId']):![];}return![];};};module['exports']=Trigger;
\ No newline at end of file
+var _0x1239=['../rpc/cmContact','trigger','../ami','redis','defaults','localhost','socket.io-emitter','triggers','agents','voiceQueues','templates','voiceExtensions','zendeskAccounts','freshdeskAccounts','salesforceAccounts','sugarcrmAccounts','zohoAccounts','deskAccounts','vtigerAccounts','servicenowAccounts','syncCustomEvent','bind','custom:agentconnect','custom:agentringnoanswer','custom:agentcomplete','custom:queuecallerabandon','custom:dialbegin','custom:dialconnect','syncAgentDial','custom:dialend','custom:closedinteraction','custom:incomingmessage','custom:outgoingmessage','custom:rejectmessage','emit','info','prototype','interface','checkTriggers','hasOwnProperty','status','checkTrigger','merge','Actions','length','action','contactmanager','motionbar','browser','data1','data2','html','render','template\x20not\x20found','buildUri','isNil','data3','data4','location','windowWidth','data5','windowHeight','data6','600','winapp','winApplication','user:%s','name','format','trigger:%s:%s','toLowerCase','jscripty','trigger:%s','exec','integration','accounts','queue','urlforward','parse','query','AllConditions','every','checkConditions','channel','some','AnyConditions','field','account','ChatWebsiteId','operator','value','upperFirst','AccountId','interaction','message','event','agent','membername','lastevent','routeId','exports','util','lodash','url','mustache','ioredis','./urlforward','./integration','./cmContact','./script'];(function(_0x333965,_0x16e0f5){var _0x50290e=function(_0x1e7c60){while(--_0x1e7c60){_0x333965['push'](_0x333965['shift']());}};_0x50290e(++_0x16e0f5);}(_0x1239,0xd3));var _0x9123=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x1239[_0x2dafbe];return _0x58a45a;};'use strict';var util=require(_0x9123('0x0'));var _=require(_0x9123('0x1'));var url=require(_0x9123('0x2'));var Mustache=require(_0x9123('0x3'));var Redis=require(_0x9123('0x4'));var urlforward=require(_0x9123('0x5'));var integration=require(_0x9123('0x6'));var cmContact=require(_0x9123('0x7'));var script=require(_0x9123('0x8'));var cmContactRpc=require(_0x9123('0x9'));var config=require('../../../config/environment');var logger=require('../../../config/logger')(_0x9123('0xa'));var ami=require(_0x9123('0xb'));config[_0x9123('0xc')]=_[_0x9123('0xd')](config[_0x9123('0xc')],{'host':_0x9123('0xe'),'port':0x18eb});var io=require(_0x9123('0xf'))(new Redis(config[_0x9123('0xc')]));var operators={'equals':function(_0x3b0211,_0xcdf1f4){return _0x3b0211==_0xcdf1f4;},'not_equals':function(_0x49a2f4,_0x449b93){return _0x49a2f4!=_0x449b93;}};var barAndWebActions=['popup','url','winapp'];function Trigger(_0x131666){this[_0x9123('0x10')]=_0x131666[_0x9123('0x10')];this[_0x9123('0x11')]=_0x131666['agents'];this[_0x9123('0x12')]=_0x131666[_0x9123('0x12')];this[_0x9123('0x13')]=_0x131666[_0x9123('0x13')];this[_0x9123('0x14')]=_0x131666[_0x9123('0x14')];this[_0x9123('0x15')]=_0x131666[_0x9123('0x15')];this[_0x9123('0x16')]=_0x131666[_0x9123('0x16')];this[_0x9123('0x17')]=_0x131666[_0x9123('0x17')];this[_0x9123('0x18')]=_0x131666['sugarcrmAccounts'];this[_0x9123('0x19')]=_0x131666[_0x9123('0x19')];this[_0x9123('0x1a')]=_0x131666[_0x9123('0x1a')];this[_0x9123('0x1b')]=_0x131666[_0x9123('0x1b')];this[_0x9123('0x1c')]=_0x131666[_0x9123('0x1c')];this['dynamics365Accounts']=_0x131666['dynamics365Accounts'];this['accounts']={'zendesk':this[_0x9123('0x15')],'salesforce':this[_0x9123('0x17')],'freshdesk':this['freshdeskAccounts'],'sugarcrm':this[_0x9123('0x18')],'zoho':this[_0x9123('0x19')],'desk':this['deskAccounts'],'vtiger':this[_0x9123('0x1b')],'servicenow':this[_0x9123('0x1c')],'dynamics365':this['dynamics365Accounts']};ami['on']('custom:agentcalled',this[_0x9123('0x1d')][_0x9123('0x1e')](this));ami['on'](_0x9123('0x1f'),this[_0x9123('0x1d')][_0x9123('0x1e')](this));ami['on'](_0x9123('0x20'),this[_0x9123('0x1d')]['bind'](this));ami['on'](_0x9123('0x21'),this[_0x9123('0x1d')]['bind'](this));ami['on'](_0x9123('0x22'),this[_0x9123('0x1d')][_0x9123('0x1e')](this));ami['on'](_0x9123('0x23'),this['syncAgentDial']['bind'](this));ami['on'](_0x9123('0x24'),this[_0x9123('0x25')][_0x9123('0x1e')](this));ami['on'](_0x9123('0x26'),this[_0x9123('0x25')][_0x9123('0x1e')](this));ami['on']('custom:newinteraction',this['syncCustomEvent'][_0x9123('0x1e')](this));ami['on'](_0x9123('0x27'),this[_0x9123('0x1d')][_0x9123('0x1e')](this));ami['on'](_0x9123('0x28'),this[_0x9123('0x1d')][_0x9123('0x1e')](this));ami['on'](_0x9123('0x29'),this[_0x9123('0x1d')]['bind'](this));ami['on']('custom:acceptmessage',this[_0x9123('0x1d')]['bind'](this));ami['on'](_0x9123('0x2a'),this[_0x9123('0x1d')]['bind'](this));}Trigger['prototype'][_0x9123('0x2b')]=function(_0x291c66,_0x3393c0,_0x369745){logger[_0x9123('0x2c')](_0x291c66,_0x3393c0,JSON['stringify'](_0x369745));io['to'](_0x291c66)[_0x9123('0x2b')](_0x3393c0,_0x369745);};Trigger['prototype'][_0x9123('0x1d')]=function(_0xbd43f){var _0x30a44a=_['clone'](_0xbd43f);this['checkTriggers'](_0x30a44a);};Trigger[_0x9123('0x2d')][_0x9123('0x25')]=function(_0x273c98){if(this['agents'][_0x273c98[_0x9123('0x2e')]]){this[_0x9123('0x1d')](_0x273c98);}};Trigger[_0x9123('0x2d')][_0x9123('0x2f')]=function(_0x17c866){var _0x1d2b4d;for(var _0x5cfda5 in this[_0x9123('0x10')]){if(this[_0x9123('0x10')][_0x9123('0x30')](_0x5cfda5)){if(this[_0x9123('0x10')][_0x5cfda5][_0x9123('0x31')]){_0x1d2b4d=this[_0x9123('0x32')](this[_0x9123('0x10')][_0x5cfda5],_0x17c866);if(_0x1d2b4d){_[_0x9123('0x33')](_0x17c866,_0x17c866['variables']);for(var _0x108cad=0x0,_0x1f29fe,_0x183e84,_0x16a9e3;_0x108cad<this['triggers'][_0x5cfda5][_0x9123('0x34')][_0x9123('0x35')];_0x108cad+=0x1){_0x1f29fe=this[_0x9123('0x10')][_0x5cfda5][_0x9123('0x34')][_0x108cad];if(this[_0x9123('0x11')][_0x17c866[_0x9123('0x2e')]]){switch(_0x1f29fe[_0x9123('0x36')]['toLowerCase']()){case _0x9123('0x37'):break;case _0x9123('0x38'):case _0x9123('0x39'):var _0x13d662={};switch(barAndWebActions[_0x1f29fe[_0x9123('0x3a')]]){case'popup':_0x13d662['TemplateId']=_0x1f29fe[_0x9123('0x3b')];_0x13d662[_0x9123('0x3c')]=this['templates'][_0x1f29fe['data2']]?Mustache[_0x9123('0x3d')](this[_0x9123('0x13')][_0x1f29fe[_0x9123('0x3b')]]['html'],_0x17c866):_0x9123('0x3e');break;case _0x9123('0x2'):_0x13d662['uri']=this[_0x9123('0x3f')](_0x1f29fe['data2'],_0x17c866,_[_0x9123('0x40')](_0x1f29fe[_0x9123('0x41')])?!![]:parseInt(_0x1f29fe[_0x9123('0x41')],0xa));if(_['isNil'](_0x1f29fe[_0x9123('0x42')])){_0x13d662[_0x9123('0x43')]='0';}else{_0x13d662['uriLocation']=_0x1f29fe[_0x9123('0x42')];_0x13d662[_0x9123('0x44')]=_['isNil'](_0x1f29fe['data5'])?'800':_0x1f29fe[_0x9123('0x45')];_0x13d662[_0x9123('0x46')]=_['isNil'](_0x1f29fe[_0x9123('0x47')])?_0x9123('0x48'):_0x1f29fe[_0x9123('0x47')];}break;case _0x9123('0x49'):_0x13d662[_0x9123('0x4a')]=_0x1f29fe[_0x9123('0x3b')]?Mustache[_0x9123('0x3d')](_0x1f29fe['data2'],_0x17c866):'';_0x13d662['winArguments']=_0x1f29fe['data3']?Mustache['render'](_0x1f29fe[_0x9123('0x41')],_0x17c866):'';break;}this[_0x9123('0x2b')](util['format'](_0x9123('0x4b'),this[_0x9123('0x11')][_0x17c866[_0x9123('0x2e')]][_0x9123('0x4c')]),util[_0x9123('0x4d')](_0x9123('0x4e'),_0x1f29fe[_0x9123('0x36')][_0x9123('0x4f')](),barAndWebActions[_0x1f29fe['data1']]),_[_0x9123('0x33')](_0x13d662,_0x17c866));break;case _0x9123('0x50'):this[_0x9123('0x2b')](util[_0x9123('0x4d')]('user:%s',this[_0x9123('0x11')][_0x17c866[_0x9123('0x2e')]][_0x9123('0x4c')]),util[_0x9123('0x4d')](_0x9123('0x51'),_0x1f29fe[_0x9123('0x36')][_0x9123('0x4f')]()),_['merge']({'ProjectId':parseInt(_0x1f29fe[_0x9123('0x3a')],0xa)},_0x17c866));break;default:this[_0x9123('0x2b')](util[_0x9123('0x4d')](_0x9123('0x4b'),this['agents'][_0x17c866['interface']][_0x9123('0x4c')]),util['format'](_0x9123('0x51'),_0x1f29fe[_0x9123('0x36')][_0x9123('0x4f')]()),_[_0x9123('0x33')]({},_0x1f29fe,_0x17c866));}}switch(_0x1f29fe[_0x9123('0x36')][_0x9123('0x4f')]()){case _0x9123('0x37'):cmContact[_0x9123('0x52')](this[_0x9123('0x11')][_0x17c866[_0x9123('0x2e')]],_0x1f29fe,_0x17c866,cmContactRpc);break;case _0x9123('0x53'):integration[_0x9123('0x52')](_0x1f29fe,_0x17c866,this[_0x9123('0x54')],this['agents'][_0x17c866[_0x9123('0x2e')]],this['voiceQueues'][_0x17c866[_0x9123('0x55')]],this[_0x9123('0x14')][_0x17c866['routeId']]);break;case _0x9123('0x56'):urlforward[_0x9123('0x52')](_0x1f29fe,_0x17c866);break;case'script':script[_0x9123('0x52')](_0x1f29fe,_0x17c866);break;}}}}}}};Trigger[_0x9123('0x2d')][_0x9123('0x3f')]=function(_0x42ccfd,_0x59b92a,_0x3c65aa){var _0x32dd37=url[_0x9123('0x57')](Mustache[_0x9123('0x3d')](_0x42ccfd,_0x59b92a),!![]);if(_0x3c65aa){_['merge'](_0x32dd37[_0x9123('0x58')],_0x59b92a);}delete _0x32dd37['search'];return url[_0x9123('0x4d')](_0x32dd37);};Trigger['prototype'][_0x9123('0x32')]=function(_0x143981,_0x4a986a){var _0x46240b=!![],_0x5319cd=!![];if(_0x143981[_0x9123('0x59')][_0x9123('0x35')]){_0x46240b=_[_0x9123('0x5a')](_0x143981[_0x9123('0x59')],this[_0x9123('0x5b')](_0x4a986a,_0x143981[_0x9123('0x5c')]));}if(_0x143981['AnyConditions']['length']){_0x5319cd=_[_0x9123('0x5d')](_0x143981[_0x9123('0x5e')],this[_0x9123('0x5b')](_0x4a986a,_0x143981[_0x9123('0x5c')]));}return _0x46240b&&_0x5319cd;};Trigger[_0x9123('0x2d')][_0x9123('0x5b')]=function(_0xd18f76,_0x2a9821){return function(_0x246a51){switch(_0x246a51[_0x9123('0x5f')]){case _0x9123('0x60'):if(_0xd18f76[_0x9123('0x5c')]===_0x2a9821){if(_0x2a9821==='chat'){return _0xd18f76[_0x9123('0x61')]?operators[_0x246a51[_0x9123('0x62')]](Number(_0x246a51[_0x9123('0x63')]),_0xd18f76[_0x9123('0x61')]):![];}else{return _0xd18f76[_[_0x9123('0x64')](_0x2a9821)+'AccountId']?operators[_0x246a51[_0x9123('0x62')]](Number(_0x246a51['value']),_0xd18f76[_[_0x9123('0x64')](_0x2a9821)+_0x9123('0x65')]):![];}}break;case _0x9123('0x66'):case _0x9123('0x67'):if(_0xd18f76[_0x9123('0x5c')]===_0x2a9821){return _0xd18f76[_0x9123('0x68')]?operators[_0x246a51[_0x9123('0x62')]](_0x246a51[_0x9123('0x63')],_0xd18f76['event']):![];}break;case _0x9123('0x55'):return _0xd18f76[_0x9123('0x55')]?operators[_0x246a51[_0x9123('0x62')]](_0x246a51[_0x9123('0x63')],_0xd18f76[_0x9123('0x55')]):![];case _0x9123('0x69'):return _0xd18f76[_0x9123('0x6a')]?operators[_0x246a51[_0x9123('0x62')]](_0x246a51[_0x9123('0x63')],_0xd18f76[_0x9123('0x6a')]):![];case _0x9123('0x6b'):return _0xd18f76[_0x9123('0x6b')]?operators[_0x246a51[_0x9123('0x62')]](_0x246a51[_0x9123('0x63')],_0xd18f76[_0x9123('0x6b')]):![];case _0x9123('0x6c'):return _0xd18f76['routeId']?operators[_0x246a51['operator']](_0x246a51[_0x9123('0x63')],_0xd18f76['routeId']):![];}return![];};};module[_0x9123('0x6d')]=Trigger;
\ No newline at end of file
index 34915d5..b465856 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd351=['integrationTab','%s/agent/tickets/%s','abandoned','monitor_format','[ABANDONED]','catch','stringify','lodash','request-promise','util','ioredis','./util','../../../../config/environment','desk','redis','defaults','localhost','socket.io-emitter','emit','application/json','validateEmail','info','Getting\x20agent\x20with\x20email','format','remoteUri','then','total_entries','find','_embedded','entries','Agent\x20found!','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','%s/users/me','debug','[HTTP]','authType','%s:%s','username','%s/token:%s','token','Basic\x20%s','toString','%s/customers/search','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','POST','work','length','forEach','type','string','nameField','customField','content','custom_fields','idField','variable','variableName','customVariable','Variable','name','priority','Creating\x20new\x20ticket...','merge','Subjects','phone','new','Motion','CTI','concat','Tags','getString','Descriptions','Fields','%s/customers/%d/cases','queue','serverUrl','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','Authorization','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent...','user:%s','trigger:desk:display','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','error','[QUEUE]','Desk\x20account\x20type\x20not\x20recognized','outbound','stripTrailingSlash','recordingFormat','[OUTBOUND]','Recording\x20is\x20enabled!','destcalleridname','destcalleridnum','Ticket\x20created!'];(function(_0xdd4950,_0x226b92){var _0x476066=function(_0x12fd13){while(--_0x12fd13){_0xdd4950['push'](_0xdd4950['shift']());}};_0x476066(++_0x226b92);}(_0xd351,0x13f));var _0x1d35=function(_0x5985a8,_0x1abc89){_0x5985a8=_0x5985a8-0x0;var _0x301866=_0xd351[_0x5985a8];return _0x301866;};'use strict';var _=require(_0x1d35('0x0'));var rp=require(_0x1d35('0x1'));var md5=require('md5');var util=require(_0x1d35('0x2'));var Redis=require(_0x1d35('0x3'));var intUtil=require(_0x1d35('0x4'));var config=require(_0x1d35('0x5'));var logger=require('../../../../config/logger')(_0x1d35('0x6'));config[_0x1d35('0x7')]=_[_0x1d35('0x8')](config['redis'],{'host':_0x1d35('0x9'),'port':0x18eb});var io=require(_0x1d35('0xa'))(new Redis(config[_0x1d35('0x7')]));function emit(_0x1bdec5,_0x3853e2,_0x1e994e){io['to'](_0x1bdec5)[_0x1d35('0xb')](_0x3853e2,_0x1e994e);}var headers={'Content-Type':_0x1d35('0xc'),'Accept':_0x1d35('0xc')};function getUser(_0x36e1c3,_0x2483c4){if(intUtil[_0x1d35('0xd')](_0x2483c4)===!![]){logger[_0x1d35('0xe')](_0x1d35('0xf'),_0x2483c4);return request({'uri':util[_0x1d35('0x10')]('%s/users',_0x36e1c3[_0x1d35('0x11')])})[_0x1d35('0x12')](function(_0x3e5c90){if(_0x3e5c90[_0x1d35('0x13')]){return _[_0x1d35('0x14')](_0x3e5c90[_0x1d35('0x15')][_0x1d35('0x16')],{'email':_0x2483c4});}})[_0x1d35('0x12')](function(_0x58e3ea){if(_0x58e3ea){logger[_0x1d35('0xe')](_0x1d35('0x17'));return _0x58e3ea;}else{logger[_0x1d35('0xe')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x1d35('0x10')]('%s/users/me',_0x36e1c3['remoteUri'])});}});}else{logger[_0x1d35('0xe')](_0x1d35('0x18'));return request({'uri':util[_0x1d35('0x10')](_0x1d35('0x19'),_0x36e1c3[_0x1d35('0x11')])});}}function request(_0x1d7d2a){logger[_0x1d35('0x1a')](_0x1d35('0x1b'),JSON['stringify'](_0x1d7d2a));return rp(_[_0x1d35('0x8')](_0x1d7d2a,{'method':'GET','headers':headers,'json':!![]}));}function getAuth(_0x3a523b){var _0x59563d;if(_0x3a523b[_0x1d35('0x1c')]==='basic'){_0x59563d=util['format'](_0x1d35('0x1d'),_0x3a523b[_0x1d35('0x1e')],_0x3a523b['password']);}else if(_0x3a523b['authType']==='token'){_0x59563d=util[_0x1d35('0x10')](_0x1d35('0x1f'),_0x3a523b[_0x1d35('0x1e')],_0x3a523b[_0x1d35('0x20')]);}return util[_0x1d35('0x10')](_0x1d35('0x21'),new Buffer(_0x59563d)[_0x1d35('0x22')]('base64'));}function getEndUser(_0x5cc9ef,_0x33fbb9,_0x44fe93){logger['info']('Searching\x20enduser\x20with\x20phone',_0x44fe93);return request({'uri':util['format'](_0x1d35('0x23'),_0x5cc9ef[_0x1d35('0x11')]),'qs':{'phone':_0x44fe93}})[_0x1d35('0x12')](function(_0x5e98d1){if(_0x5e98d1[_0x1d35('0x13')]){logger['info'](_0x1d35('0x24'));return _0x5e98d1[_0x1d35('0x15')][_0x1d35('0x16')][0x0];}else{logger[_0x1d35('0xe')](_0x1d35('0x25'));return request({'uri':util[_0x1d35('0x10')]('%s/customers',_0x5cc9ef[_0x1d35('0x11')]),'method':_0x1d35('0x26'),'body':{'first_name':_0x33fbb9,'title':_0x33fbb9,'phone_numbers':[{'type':_0x1d35('0x27'),'value':_0x44fe93}]}});}});}function getTags(_0xa72412,_0x30a646){var _0x123aa7=[];if(_0xa72412&&_0xa72412[_0x1d35('0x28')]>0x0){_0x123aa7=_['map'](_0xa72412,_0x30a646);}return _0x123aa7;}function getCustomFields(_0x16a993,_0x54d8b8){var _0x5e865a=[];var _0xf5f832={'custom_fields':{}};if(_0x16a993[_0x1d35('0x28')]>0x0){_[_0x1d35('0x29')](_0x16a993,function(_0x4b3af7){if(_0x4b3af7[_0x1d35('0x2a')]===_0x1d35('0x2b')&&_0x4b3af7[_0x1d35('0x2c')]&&!_0x4b3af7[_0x1d35('0x2d')]){_0xf5f832[_0x4b3af7[_0x1d35('0x2c')]['toLowerCase']()]=_0x4b3af7[_0x1d35('0x2e')][_0x1d35('0x22')]();}else if(_0x4b3af7[_0x1d35('0x2a')]===_0x1d35('0x2b')&&_0x4b3af7['idField']&&_0x4b3af7[_0x1d35('0x2d')]){_0xf5f832[_0x1d35('0x2f')][_0x4b3af7[_0x1d35('0x30')]]=_0x4b3af7[_0x1d35('0x2e')][_0x1d35('0x22')]();}else if(_0x4b3af7[_0x1d35('0x2a')]===_0x1d35('0x31')&&_0x4b3af7[_0x1d35('0x32')]&&_0x4b3af7['idField']&&_0x4b3af7[_0x1d35('0x2d')]){_0x54d8b8[_0x4b3af7['variableName']]&&(_0xf5f832['custom_fields'][_0x4b3af7['idField']]=_0x54d8b8[_0x4b3af7[_0x1d35('0x32')]][_0x1d35('0x22')]());}else if(_0x4b3af7['type']===_0x1d35('0x33')&&_0x4b3af7[_0x1d35('0x34')]&&_0x4b3af7[_0x1d35('0x34')][_0x1d35('0x35')]&&_0x4b3af7[_0x1d35('0x30')]&&_0x4b3af7[_0x1d35('0x2d')]){_0x54d8b8[_0x4b3af7[_0x1d35('0x34')]['name']['toLowerCase']()]&&(_0xf5f832[_0x1d35('0x2f')][_0x4b3af7[_0x1d35('0x30')]]=_0x54d8b8[_0x4b3af7[_0x1d35('0x34')][_0x1d35('0x35')]['toLowerCase']()][_0x1d35('0x22')]());}});}if(_0xf5f832['priority']){_0xf5f832[_0x1d35('0x36')]=Number(_0xf5f832[_0x1d35('0x36')]);}return _0xf5f832;}function getTicket(_0x2ef48d,_0x2c8670,_0x49f473,_0x3e0e12,_0x4bd649){logger[_0x1d35('0xe')](_0x1d35('0x37'));var _0x1311ee=_[_0x1d35('0x38')]({'subject':intUtil['getString'](_0x3e0e12[_0x1d35('0x39')],_0x4bd649,'\x20'),'type':_0x1d35('0x3a'),'status':_0x1d35('0x3b'),'labels':['xCALLY',_0x1d35('0x3c'),_0x1d35('0x3d')][_0x1d35('0x3e')](getTags(_0x3e0e12[_0x1d35('0x3f')],_0x1d35('0x35'))),'description':intUtil[_0x1d35('0x40')](_0x3e0e12[_0x1d35('0x41')],_0x4bd649,'\x0a'),'_links':{'assigned_user':{'href':util['format']('/api/v2/users/%d',_0x2c8670['id']),'class':'user'}},'message':{'direction':'in','body':intUtil[_0x1d35('0x40')](_0x3e0e12[_0x1d35('0x41')],_0x4bd649,'\x0a')}},getCustomFields(_0x3e0e12[_0x1d35('0x42')],_0x4bd649));return request({'uri':util[_0x1d35('0x10')](_0x1d35('0x43'),_0x2ef48d[_0x1d35('0x11')],_0x49f473['id']),'method':_0x1d35('0x26'),'body':_0x1311ee});}exports[_0x1d35('0x44')]=function(_0x304011,_0x3a9430,_0x657799,_0x67a12e,_0x38d9c4,_0x36b6eb){var _0x18eae3,_0x273900;_0x36b6eb[_0x1d35('0x11')]=intUtil['stripTrailingSlash'](_0x36b6eb[_0x1d35('0x11')]);_0x36b6eb[_0x1d35('0x45')]=intUtil['stripTrailingSlash'](_0x36b6eb[_0x1d35('0x45')]);if(_0x38d9c4&&_0x38d9c4['monitor_format']){logger[_0x1d35('0xe')]('[QUEUE]','Recording\x20is\x20enabled!');_0x3a9430['recordingURL']=util[_0x1d35('0x10')](_0x1d35('0x46'),_0x36b6eb[_0x1d35('0x45')],_0x3a9430['uniqueid'],md5(_0x3a9430[_0x1d35('0x47')]));}else{_0x3a9430[_0x1d35('0x48')]='';}headers[_0x1d35('0x49')]=getAuth(_0x36b6eb);return getUser(_0x36b6eb,_0x67a12e[_0x1d35('0x4a')])[_0x1d35('0x12')](function(_0x23e7d3){_0x18eae3=_0x23e7d3;logger[_0x1d35('0xe')](_0x1d35('0x4b'),_0x18eae3['id']);return getEndUser(_0x36b6eb,_0x3a9430[_0x1d35('0x4c')],_0x3a9430[_0x1d35('0x4d')]);})[_0x1d35('0x12')](function(_0x2b4fba){_0x273900=_0x2b4fba;logger[_0x1d35('0xe')](_0x1d35('0x4e'),_0x273900['id']);return getTicket(_0x36b6eb,_0x18eae3,_0x273900,_0x657799,_0x3a9430);})[_0x1d35('0x12')](function(_0x430c1b){if(_0x430c1b){logger[_0x1d35('0xe')]('Ticket\x20created!');logger[_0x1d35('0xe')](_0x1d35('0x4f'),_0x430c1b['id']);switch(_0x36b6eb[_0x1d35('0x2a')]){case'integrationTab':logger[_0x1d35('0xe')]('[QUEUE]',_0x1d35('0x50'));emit(util['format'](_0x1d35('0x51'),_0x67a12e[_0x1d35('0x35')]),_0x1d35('0x52'),{'recordId':_0x430c1b['id']});break;case _0x1d35('0x53'):logger[_0x1d35('0xe')]('[QUEUE]',_0x1d35('0x54'));emit(util[_0x1d35('0x10')](_0x1d35('0x51'),_0x67a12e[_0x1d35('0x35')]),_0x1d35('0x55'),{'uri':util[_0x1d35('0x10')]('https://xcally.desk.com/web/agent/case/%d',_0x430c1b['id'])});break;default:logger[_0x1d35('0x56')](_0x1d35('0x57'),_0x1d35('0x58'));}}})['catch'](function(_0x5aa4ba){console['error'](_0x5aa4ba);logger[_0x1d35('0x56')](_0x1d35('0x57'),JSON['stringify'](_0x5aa4ba));});};exports[_0x1d35('0x59')]=function(_0x38cc04,_0x2288e6,_0x28eca8,_0x595d01,_0x5a1e25,_0x4dbcc8,_0x387e95){var _0x7e3e06,_0x2f998e;_0x4dbcc8[_0x1d35('0x11')]=intUtil['stripTrailingSlash'](_0x4dbcc8[_0x1d35('0x11')]);_0x4dbcc8[_0x1d35('0x45')]=intUtil[_0x1d35('0x5a')](_0x4dbcc8['serverUrl']);if(_0x387e95&&_0x387e95['recordingFormat']&&_0x387e95[_0x1d35('0x5b')]!=='none'){logger['info'](_0x1d35('0x5c'),_0x1d35('0x5d'));_0x2288e6[_0x1d35('0x48')]=util['format'](_0x1d35('0x46'),_0x4dbcc8[_0x1d35('0x45')],_0x2288e6[_0x1d35('0x47')],md5(_0x2288e6['uniqueid']));}headers[_0x1d35('0x49')]=getAuth(_0x4dbcc8);return getUser(_0x4dbcc8,_0x595d01[_0x1d35('0x4a')])[_0x1d35('0x12')](function(_0x4ecd22){_0x7e3e06=_0x4ecd22;logger[_0x1d35('0xe')](_0x1d35('0x4b'),_0x7e3e06['id']);return getEndUser(_0x4dbcc8,_0x2288e6[_0x1d35('0x5e')],_0x2288e6[_0x1d35('0x5f')]);})[_0x1d35('0x12')](function(_0x4a08c7){_0x2f998e=_0x4a08c7;logger['info'](_0x1d35('0x4e'),_0x2f998e['id']);return getTicket(_0x4dbcc8,_0x7e3e06,_0x2f998e,_0x28eca8,_0x2288e6);})['then'](function(_0x5b94e9){if(_0x5b94e9){logger[_0x1d35('0xe')](_0x1d35('0x60'));logger['info'](_0x1d35('0x4f'),_0x5b94e9['id']);switch(_0x4dbcc8[_0x1d35('0x2a')]){case _0x1d35('0x61'):logger['info'](_0x1d35('0x57'),'Displaying\x20ticket\x20to\x20agent...');emit(util[_0x1d35('0x10')](_0x1d35('0x51'),_0x595d01[_0x1d35('0x35')]),_0x1d35('0x52'),{'recordId':_0x5b94e9['id']});break;case _0x1d35('0x53'):logger[_0x1d35('0xe')](_0x1d35('0x57'),_0x1d35('0x54'));emit(util['format'](_0x1d35('0x51'),_0x595d01[_0x1d35('0x35')]),_0x1d35('0x55'),{'uri':util['format'](_0x1d35('0x62'),_0x4dbcc8[_0x1d35('0x11')],_0x5b94e9['id'])});break;default:logger[_0x1d35('0x56')](_0x1d35('0x5c'),'Desk\x20account\x20type\x20not\x20recognized');}}})['catch'](function(_0x14056c){logger['error'](_0x1d35('0x5c'),JSON['stringify'](_0x14056c));});};exports[_0x1d35('0x63')]=function(_0x349e96,_0x5ce882,_0x1cbfea,_0x17e782,_0x1e1640,_0x308b93){var _0x3df3e0,_0x367abb;_0x308b93['remoteUri']=intUtil[_0x1d35('0x5a')](_0x308b93[_0x1d35('0x11')]);_0x308b93[_0x1d35('0x45')]=intUtil[_0x1d35('0x5a')](_0x308b93[_0x1d35('0x45')]);if(_0x1e1640&&_0x1e1640[_0x1d35('0x64')]){logger['info'](_0x1d35('0x65'),_0x1d35('0x5d'));_0x5ce882[_0x1d35('0x48')]=util[_0x1d35('0x10')](_0x1d35('0x46'),_0x308b93['serverUrl'],_0x5ce882[_0x1d35('0x47')],md5(_0x5ce882['uniqueid']));}else{_0x5ce882[_0x1d35('0x48')]='';}headers[_0x1d35('0x49')]=getAuth(_0x308b93);return getUser(_0x308b93)[_0x1d35('0x12')](function(_0x1d06a4){_0x3df3e0=_0x1d06a4;logger['info']('The\x20User\x20ID\x20is:',_0x3df3e0['id']);return getEndUser(_0x308b93,_0x5ce882[_0x1d35('0x4c')],_0x5ce882['calleridnum']);})[_0x1d35('0x12')](function(_0x1bd136){_0x367abb=_0x1bd136;logger[_0x1d35('0xe')]('The\x20Enduser\x20ID\x20is:',_0x367abb['id']);return getTicket(_0x308b93,_0x3df3e0,_0x367abb,_0x1cbfea,_0x5ce882);})[_0x1d35('0x12')](function(_0x466c4b){if(_0x466c4b){logger[_0x1d35('0xe')](_0x1d35('0x60'));logger[_0x1d35('0xe')](_0x1d35('0x4f'),_0x466c4b['id']);}})[_0x1d35('0x66')](function(_0xe9c3d9){logger[_0x1d35('0x56')](_0x1d35('0x65'),JSON[_0x1d35('0x67')](_0xe9c3d9));});};
\ No newline at end of file
+var _0x867e=['priority','Creating\x20new\x20ticket...','phone','new','xCALLY','Motion','CTI','Tags','getString','Descriptions','user','Fields','%s/customers/%d/cases','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','uniqueid','Authorization','The\x20User\x20ID\x20is:','calleridname','The\x20Enduser\x20ID\x20is:','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','integrationTab','user:%s','trigger:desk:display','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','https://xcally.desk.com/web/agent/case/%d','Desk\x20account\x20type\x20not\x20recognized','catch','error','outbound','none','[OUTBOUND]','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','destcalleridname','destcalleridnum','newTab','abandoned','[ABANDONED]','lodash','ioredis','./util','../../../../config/environment','../../../../config/logger','desk','redis','defaults','localhost','emit','application/json','validateEmail','info','format','%s/users','total_entries','find','_embedded','entries','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me','remoteUri','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','[HTTP]','stringify','GET','authType','basic','%s:%s','username','password','token','%s/token:%s','Basic\x20%s','base64','Searching\x20enduser\x20with\x20phone','%s/customers/search','then','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/customers','POST','work','length','forEach','type','string','customField','nameField','content','toString','idField','variable','variableName','custom_fields','customVariable','Variable','name','toLowerCase'];(function(_0x11fdf4,_0xf85d0b){var _0x2bd703=function(_0x3295cf){while(--_0x3295cf){_0x11fdf4['push'](_0x11fdf4['shift']());}};_0x2bd703(++_0xf85d0b);}(_0x867e,0xfd));var _0xe867=function(_0x496426,_0x19ae37){_0x496426=_0x496426-0x0;var _0x47c0ae=_0x867e[_0x496426];return _0x47c0ae;};'use strict';var _=require(_0xe867('0x0'));var rp=require('request-promise');var md5=require('md5');var util=require('util');var Redis=require(_0xe867('0x1'));var intUtil=require(_0xe867('0x2'));var config=require(_0xe867('0x3'));var logger=require(_0xe867('0x4'))(_0xe867('0x5'));config[_0xe867('0x6')]=_[_0xe867('0x7')](config[_0xe867('0x6')],{'host':_0xe867('0x8'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xe867('0x6')]));function emit(_0x47df06,_0x2e90e1,_0x5409a2){io['to'](_0x47df06)[_0xe867('0x9')](_0x2e90e1,_0x5409a2);}var headers={'Content-Type':_0xe867('0xa'),'Accept':_0xe867('0xa')};function getUser(_0x34ef6d,_0x1554b1){if(intUtil[_0xe867('0xb')](_0x1554b1)===!![]){logger[_0xe867('0xc')]('Getting\x20agent\x20with\x20email',_0x1554b1);return request({'uri':util[_0xe867('0xd')](_0xe867('0xe'),_0x34ef6d['remoteUri'])})['then'](function(_0x5427ad){if(_0x5427ad[_0xe867('0xf')]){return _[_0xe867('0x10')](_0x5427ad[_0xe867('0x11')][_0xe867('0x12')],{'email':_0x1554b1});}})['then'](function(_0x3f5b02){if(_0x3f5b02){logger[_0xe867('0xc')]('Agent\x20found!');return _0x3f5b02;}else{logger[_0xe867('0xc')](_0xe867('0x13'));return request({'uri':util[_0xe867('0xd')](_0xe867('0x14'),_0x34ef6d[_0xe867('0x15')])});}});}else{logger[_0xe867('0xc')](_0xe867('0x16'));return request({'uri':util['format'](_0xe867('0x14'),_0x34ef6d['remoteUri'])});}}function request(_0x1fa8ba){logger['debug'](_0xe867('0x17'),JSON[_0xe867('0x18')](_0x1fa8ba));return rp(_[_0xe867('0x7')](_0x1fa8ba,{'method':_0xe867('0x19'),'headers':headers,'json':!![]}));}function getAuth(_0x3cb808){var _0x1c9080;if(_0x3cb808[_0xe867('0x1a')]===_0xe867('0x1b')){_0x1c9080=util['format'](_0xe867('0x1c'),_0x3cb808[_0xe867('0x1d')],_0x3cb808[_0xe867('0x1e')]);}else if(_0x3cb808[_0xe867('0x1a')]===_0xe867('0x1f')){_0x1c9080=util[_0xe867('0xd')](_0xe867('0x20'),_0x3cb808[_0xe867('0x1d')],_0x3cb808[_0xe867('0x1f')]);}return util[_0xe867('0xd')](_0xe867('0x21'),new Buffer(_0x1c9080)['toString'](_0xe867('0x22')));}function getEndUser(_0x495c75,_0xa63d70,_0x5e1e91){logger[_0xe867('0xc')](_0xe867('0x23'),_0x5e1e91);return request({'uri':util[_0xe867('0xd')](_0xe867('0x24'),_0x495c75[_0xe867('0x15')]),'qs':{'phone':_0x5e1e91}})[_0xe867('0x25')](function(_0x5f0fd9){if(_0x5f0fd9[_0xe867('0xf')]){logger[_0xe867('0xc')](_0xe867('0x26'));return _0x5f0fd9[_0xe867('0x11')][_0xe867('0x12')][0x0];}else{logger[_0xe867('0xc')](_0xe867('0x27'));return request({'uri':util[_0xe867('0xd')](_0xe867('0x28'),_0x495c75[_0xe867('0x15')]),'method':_0xe867('0x29'),'body':{'first_name':_0xa63d70,'title':_0xa63d70,'phone_numbers':[{'type':_0xe867('0x2a'),'value':_0x5e1e91}]}});}});}function getTags(_0x58b350,_0x2d8d79){var _0x162fa8=[];if(_0x58b350&&_0x58b350['length']>0x0){_0x162fa8=_['map'](_0x58b350,_0x2d8d79);}return _0x162fa8;}function getCustomFields(_0x4b3cea,_0x28dee5){var _0x4f0310=[];var _0x579936={'custom_fields':{}};if(_0x4b3cea[_0xe867('0x2b')]>0x0){_[_0xe867('0x2c')](_0x4b3cea,function(_0x547b81){if(_0x547b81[_0xe867('0x2d')]===_0xe867('0x2e')&&_0x547b81['nameField']&&!_0x547b81[_0xe867('0x2f')]){_0x579936[_0x547b81[_0xe867('0x30')]['toLowerCase']()]=_0x547b81[_0xe867('0x31')][_0xe867('0x32')]();}else if(_0x547b81[_0xe867('0x2d')]===_0xe867('0x2e')&&_0x547b81[_0xe867('0x33')]&&_0x547b81['customField']){_0x579936['custom_fields'][_0x547b81[_0xe867('0x33')]]=_0x547b81['content'][_0xe867('0x32')]();}else if(_0x547b81[_0xe867('0x2d')]===_0xe867('0x34')&&_0x547b81[_0xe867('0x35')]&&_0x547b81[_0xe867('0x33')]&&_0x547b81[_0xe867('0x2f')]){_0x28dee5[_0x547b81['variableName']]&&(_0x579936[_0xe867('0x36')][_0x547b81[_0xe867('0x33')]]=_0x28dee5[_0x547b81['variableName']]['toString']());}else if(_0x547b81[_0xe867('0x2d')]===_0xe867('0x37')&&_0x547b81['Variable']&&_0x547b81[_0xe867('0x38')]['name']&&_0x547b81[_0xe867('0x33')]&&_0x547b81[_0xe867('0x2f')]){_0x28dee5[_0x547b81[_0xe867('0x38')][_0xe867('0x39')][_0xe867('0x3a')]()]&&(_0x579936[_0xe867('0x36')][_0x547b81[_0xe867('0x33')]]=_0x28dee5[_0x547b81['Variable']['name'][_0xe867('0x3a')]()][_0xe867('0x32')]());}});}if(_0x579936[_0xe867('0x3b')]){_0x579936[_0xe867('0x3b')]=Number(_0x579936[_0xe867('0x3b')]);}return _0x579936;}function getTicket(_0x5d891e,_0x3894c7,_0x2c9078,_0x350809,_0x1f12e1){logger['info'](_0xe867('0x3c'));var _0x31334b=_['merge']({'subject':intUtil['getString'](_0x350809['Subjects'],_0x1f12e1,'\x20'),'type':_0xe867('0x3d'),'status':_0xe867('0x3e'),'labels':[_0xe867('0x3f'),_0xe867('0x40'),_0xe867('0x41')]['concat'](getTags(_0x350809[_0xe867('0x42')],_0xe867('0x39'))),'description':intUtil[_0xe867('0x43')](_0x350809[_0xe867('0x44')],_0x1f12e1,'\x0a'),'_links':{'assigned_user':{'href':util[_0xe867('0xd')]('/api/v2/users/%d',_0x3894c7['id']),'class':_0xe867('0x45')}},'message':{'direction':'in','body':intUtil[_0xe867('0x43')](_0x350809[_0xe867('0x44')],_0x1f12e1,'\x0a')}},getCustomFields(_0x350809[_0xe867('0x46')],_0x1f12e1));return request({'uri':util[_0xe867('0xd')](_0xe867('0x47'),_0x5d891e[_0xe867('0x15')],_0x2c9078['id']),'method':_0xe867('0x29'),'body':_0x31334b});}exports[_0xe867('0x48')]=function(_0x4d108b,_0x592e05,_0xcea159,_0x58230f,_0x5662a7,_0x3e0c31){var _0x197456,_0x46c793;_0x3e0c31[_0xe867('0x15')]=intUtil[_0xe867('0x49')](_0x3e0c31[_0xe867('0x15')]);_0x3e0c31[_0xe867('0x4a')]=intUtil['stripTrailingSlash'](_0x3e0c31[_0xe867('0x4a')]);if(_0x5662a7&&_0x5662a7[_0xe867('0x4b')]){logger['info'](_0xe867('0x4c'),_0xe867('0x4d'));_0x592e05[_0xe867('0x4e')]=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x3e0c31[_0xe867('0x4a')],_0x592e05[_0xe867('0x4f')],md5(_0x592e05['uniqueid']));}else{_0x592e05[_0xe867('0x4e')]='';}headers[_0xe867('0x50')]=getAuth(_0x3e0c31);return getUser(_0x3e0c31,_0x58230f['email'])['then'](function(_0x365965){_0x197456=_0x365965;logger['info'](_0xe867('0x51'),_0x197456['id']);return getEndUser(_0x3e0c31,_0x592e05[_0xe867('0x52')],_0x592e05['calleridnum']);})[_0xe867('0x25')](function(_0x50b9ba){_0x46c793=_0x50b9ba;logger['info'](_0xe867('0x53'),_0x46c793['id']);return getTicket(_0x3e0c31,_0x197456,_0x46c793,_0xcea159,_0x592e05);})['then'](function(_0x3c7b2e){if(_0x3c7b2e){logger[_0xe867('0xc')](_0xe867('0x54'));logger[_0xe867('0xc')](_0xe867('0x55'),_0x3c7b2e['id']);switch(_0x3e0c31[_0xe867('0x2d')]){case _0xe867('0x56'):logger[_0xe867('0xc')](_0xe867('0x4c'),'Displaying\x20ticket\x20to\x20agent...');emit(util[_0xe867('0xd')](_0xe867('0x57'),_0x58230f[_0xe867('0x39')]),_0xe867('0x58'),{'recordId':_0x3c7b2e['id']});break;case'newTab':logger[_0xe867('0xc')]('[QUEUE]',_0xe867('0x59'));emit(util[_0xe867('0xd')](_0xe867('0x57'),_0x58230f[_0xe867('0x39')]),_0xe867('0x5a'),{'uri':util['format'](_0xe867('0x5b'),_0x3c7b2e['id'])});break;default:logger['error'](_0xe867('0x4c'),_0xe867('0x5c'));}}})[_0xe867('0x5d')](function(_0x3eea20){console[_0xe867('0x5e')](_0x3eea20);logger[_0xe867('0x5e')](_0xe867('0x4c'),JSON[_0xe867('0x18')](_0x3eea20));});};exports[_0xe867('0x5f')]=function(_0x2375a5,_0x56d5e8,_0x59121e,_0x565756,_0x5d8407,_0x36a762,_0x230869){var _0x25f787,_0x4667bf;_0x36a762['remoteUri']=intUtil['stripTrailingSlash'](_0x36a762['remoteUri']);_0x36a762[_0xe867('0x4a')]=intUtil[_0xe867('0x49')](_0x36a762[_0xe867('0x4a')]);if(_0x230869&&_0x230869['recordingFormat']&&_0x230869['recordingFormat']!==_0xe867('0x60')){logger[_0xe867('0xc')](_0xe867('0x61'),_0xe867('0x4d'));_0x56d5e8[_0xe867('0x4e')]=util['format'](_0xe867('0x62'),_0x36a762[_0xe867('0x4a')],_0x56d5e8['uniqueid'],md5(_0x56d5e8['uniqueid']));}headers['Authorization']=getAuth(_0x36a762);return getUser(_0x36a762,_0x565756['email'])[_0xe867('0x25')](function(_0x3457c9){_0x25f787=_0x3457c9;logger[_0xe867('0xc')]('The\x20User\x20ID\x20is:',_0x25f787['id']);return getEndUser(_0x36a762,_0x56d5e8[_0xe867('0x63')],_0x56d5e8[_0xe867('0x64')]);})[_0xe867('0x25')](function(_0x135e10){_0x4667bf=_0x135e10;logger[_0xe867('0xc')](_0xe867('0x53'),_0x4667bf['id']);return getTicket(_0x36a762,_0x25f787,_0x4667bf,_0x59121e,_0x56d5e8);})[_0xe867('0x25')](function(_0x36b88d){if(_0x36b88d){logger[_0xe867('0xc')](_0xe867('0x54'));logger[_0xe867('0xc')](_0xe867('0x55'),_0x36b88d['id']);switch(_0x36a762[_0xe867('0x2d')]){case'integrationTab':logger[_0xe867('0xc')]('[QUEUE]','Displaying\x20ticket\x20to\x20agent...');emit(util['format'](_0xe867('0x57'),_0x565756[_0xe867('0x39')]),_0xe867('0x58'),{'recordId':_0x36b88d['id']});break;case _0xe867('0x65'):logger[_0xe867('0xc')](_0xe867('0x4c'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0xe867('0xd')](_0xe867('0x57'),_0x565756[_0xe867('0x39')]),_0xe867('0x5a'),{'uri':util[_0xe867('0xd')]('%s/agent/tickets/%s',_0x36a762['remoteUri'],_0x36b88d['id'])});break;default:logger['error'](_0xe867('0x61'),'Desk\x20account\x20type\x20not\x20recognized');}}})['catch'](function(_0x27fab2){logger[_0xe867('0x5e')]('[OUTBOUND]',JSON[_0xe867('0x18')](_0x27fab2));});};exports[_0xe867('0x66')]=function(_0x139c6f,_0x43b741,_0x28ee6c,_0x5e397a,_0x35f5bc,_0x18da2b){var _0x142ab1,_0x56c79a;_0x18da2b['remoteUri']=intUtil[_0xe867('0x49')](_0x18da2b[_0xe867('0x15')]);_0x18da2b[_0xe867('0x4a')]=intUtil[_0xe867('0x49')](_0x18da2b[_0xe867('0x4a')]);if(_0x35f5bc&&_0x35f5bc['monitor_format']){logger[_0xe867('0xc')](_0xe867('0x67'),_0xe867('0x4d'));_0x43b741[_0xe867('0x4e')]=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x18da2b[_0xe867('0x4a')],_0x43b741['uniqueid'],md5(_0x43b741[_0xe867('0x4f')]));}else{_0x43b741[_0xe867('0x4e')]='';}headers[_0xe867('0x50')]=getAuth(_0x18da2b);return getUser(_0x18da2b)[_0xe867('0x25')](function(_0x5c625c){_0x142ab1=_0x5c625c;logger[_0xe867('0xc')]('The\x20User\x20ID\x20is:',_0x142ab1['id']);return getEndUser(_0x18da2b,_0x43b741[_0xe867('0x52')],_0x43b741['calleridnum']);})[_0xe867('0x25')](function(_0x479d7c){_0x56c79a=_0x479d7c;logger[_0xe867('0xc')]('The\x20Enduser\x20ID\x20is:',_0x56c79a['id']);return getTicket(_0x18da2b,_0x142ab1,_0x56c79a,_0x28ee6c,_0x43b741);})['then'](function(_0x28cb7a){if(_0x28cb7a){logger[_0xe867('0xc')](_0xe867('0x54'));logger[_0xe867('0xc')](_0xe867('0x55'),_0x28cb7a['id']);}})[_0xe867('0x5d')](function(_0x41015e){logger[_0xe867('0x5e')](_0xe867('0x67'),JSON[_0xe867('0x18')](_0x41015e));});};
\ No newline at end of file
index f0ba5a1..9599ebf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0125=['request-promise','util','./util','md5','ioredis','../../../../config/logger','dynamics365','../../../../config/environment','defaults','socket.io-emitter','redis','POST','password','clientSecret','then','access_token','catch','toUpperCase','message','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','4.0','value','isNil','email','userEmail','length','internalemailaddress','isdisabled','info','systemuserid','userId',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','username','toLowerCase','outbound','destcalleridnum','headers','odata-entityid','lastIndexOf','enduserId','GET','contacts?$select=telephone1','calleridnum','telephone1',']\x20Enduser\x20created!',']\x20Enduser\x20Created!','type','nameField','customField','idField','substring','indexOf','ticketType','incidents','assign','getString','Descriptions','/contacts(','/systemusers(','phonecall','phonecalls','callDirection','queue','Fields','ticketId','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','emit','trigger:browser:url','remoteUri','stripTrailingSlash','serverUrl','%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\x20email\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s','abandoned','Displaying\x20call\x20in\x20a\x20new\x20tab...','name','error',']\x20Error\x20running\x20Dynamics365\x20integration','inspect','lodash','bluebird'];(function(_0x158360,_0x391516){var _0x4d39fd=function(_0x174c80){while(--_0x174c80){_0x158360['push'](_0x158360['shift']());}};_0x4d39fd(++_0x391516);}(_0x0125,0x182));var _0x5012=function(_0x5d860f,_0x467498){_0x5d860f=_0x5d860f-0x0;var _0x236490=_0x0125[_0x5d860f];return _0x236490;};'use strict';var _=require(_0x5012('0x0'));var BPromise=require(_0x5012('0x1'));var rp=require(_0x5012('0x2'));var util=require(_0x5012('0x3'));var intUtil=require(_0x5012('0x4'));var md5=require(_0x5012('0x5'));var Redis=require(_0x5012('0x6'));var logger=require(_0x5012('0x7'))(_0x5012('0x8'));var config=require(_0x5012('0x9'));config['redis']=_[_0x5012('0xa')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x5012('0xb'))(new Redis(config[_0x5012('0xc')]));function getAuthToken(_0x7f7900,_0x3792e7,_0x507247){var _0x4894aa={'method':_0x5012('0xd'),'uri':_0x3792e7,'form':{'client_id':_0x7f7900['clientId'],'resource':_0x7f7900['remoteUri'],'username':_0x7f7900['username'],'password':_0x7f7900[_0x5012('0xe')],'grant_type':'password','client_secret':_0x7f7900[_0x5012('0xf')]},'json':!![]};return rp(_0x4894aa)[_0x5012('0x10')](function(_0x1b16cd){return _0x1b16cd[_0x5012('0x11')];})[_0x5012('0x12')](function(_0x240a73){logger['error']('['+[_0x507247[_0x5012('0x13')]()]+']\x20Wrong\x20credentials!');return _0x240a73[_0x5012('0x14')];});}function getUser(_0x13c38a,_0x1c20ad,_0x37c5b6,_0x587ce2,_0x45fb0f,_0x2cc7c2){return new BPromise(function(_0x3beea7,_0x30086e){return getAuthToken(_0x1c20ad,_0x587ce2,_0x2cc7c2)[_0x5012('0x10')](function(_0x2761bb){var _0x5df68c={'method':'GET','uri':_0x45fb0f+_0x5012('0x15'),'headers':{'Authorization':_0x5012('0x16')+_0x2761bb,'OData-Version':_0x5012('0x17')},'json':!![]};return rp(_0x5df68c);})[_0x5012('0x10')](function(_0x3171a7){var _0xb729ac=_0x3171a7[_0x5012('0x18')];var _0x230621=![];var _0x5bb909=null;if(!_[_0x5012('0x19')](_0x37c5b6)){if(intUtil['validateEmail'](_0x37c5b6[_0x5012('0x1a')])){_0x13c38a[_0x5012('0x1b')]=_0x37c5b6['email'];for(_0x5bb909=0x0;_0x5bb909<_0xb729ac[_0x5012('0x1c')];_0x5bb909++){if(_0xb729ac[_0x5bb909][_0x5012('0x1d')]===_0x37c5b6['email']&&!_0xb729ac[_0x5bb909][_0x5012('0x1e')]){_0x230621=!![];logger[_0x5012('0x1f')]('['+[_0x2cc7c2[_0x5012('0x13')]()]+']\x20Agent\x20found\x20'+_0xb729ac[_0x5bb909][_0x5012('0x20')]+'!');_0x13c38a[_0x5012('0x21')]=_0xb729ac[_0x5bb909]['systemuserid'];}}}}if(!_0x230621){logger[_0x5012('0x1f')]('['+[_0x2cc7c2[_0x5012('0x13')]()]+_0x5012('0x22'));_0x13c38a['userEmail']=_0x1c20ad[_0x5012('0x23')];for(_0x5bb909=0x0;_0x5bb909<_0xb729ac[_0x5012('0x1c')];_0x5bb909++){if(_0xb729ac[_0x5bb909][_0x5012('0x1d')]===_0x1c20ad[_0x5012('0x23')]){_0x13c38a['userId']=_0xb729ac[_0x5bb909]['systemuserid'];}}}_0x3beea7(_0x13c38a);})[_0x5012('0x12')](function(_0xb51a2c){_0x30086e(_0xb51a2c['message']);});});}function createEndUser(_0x271a18,_0x5a1fb,_0x329139,_0x324ee8,_0x67edf5,_0x8a878c){return new BPromise(function(_0x58deb6,_0x503130){return getAuthToken(_0x5a1fb,_0x329139,_0x8a878c)[_0x5012('0x10')](function(_0x574d7e){var _0xdd5fb9=_0x8a878c[_0x5012('0x24')]()===_0x5012('0x25')?_0x67edf5[_0x5012('0x26')]:_0x67edf5['calleridnum'];var _0x403c43={'method':_0x5012('0xd'),'uri':_0x324ee8+'contacts','body':{'telephone1':_0xdd5fb9,'fullname':_0xdd5fb9,'firstname':_0xdd5fb9,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':'/systemusers('+_0x271a18[_0x5012('0x21')]+')'},'headers':{'Authorization':_0x5012('0x16')+_0x574d7e,'OData-Version':_0x5012('0x17')},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x403c43);})[_0x5012('0x10')](function(_0x3dd8d5){var _0x4268a1=_0x3dd8d5[_0x5012('0x27')][_0x5012('0x28')];var _0x263448=_0x4268a1['substring'](_0x4268a1['lastIndexOf']('(')+0x1,_0x4268a1[_0x5012('0x29')](')'));_0x271a18[_0x5012('0x2a')]=_0x263448;_0x58deb6(_0x271a18);})['catch'](function(_0x39a218){_0x503130(_0x39a218['message']);});});}function getEndUser(_0xdf4d73,_0x219ad0,_0x11f64e,_0x269abb,_0x1fd906,_0x611938){return new BPromise(function(_0xe6b5de,_0x55a155){return getAuthToken(_0x219ad0,_0x11f64e,_0x611938)[_0x5012('0x10')](function(_0x3b9f3c){var _0x3dc78f={'method':_0x5012('0x2b'),'uri':_0x269abb+_0x5012('0x2c'),'headers':{'Authorization':_0x5012('0x16')+_0x3b9f3c,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x3dc78f);})[_0x5012('0x10')](function(_0x18081b){var _0x46e546=null;if(_0x18081b){var _0x33a63b=_0x18081b[_0x5012('0x18')];var _0x69ba1=![];for(_0x46e546=0x0;_0x46e546<_0x33a63b[_0x5012('0x1c')];_0x46e546++){var _0x2bb3b7=_0x611938[_0x5012('0x24')]()===_0x5012('0x25')?_0x1fd906[_0x5012('0x26')]:_0x1fd906[_0x5012('0x2d')];if(_0x33a63b[_0x46e546][_0x5012('0x2e')]===_0x2bb3b7){_0x69ba1=!![];_0xdf4d73[_0x5012('0x2a')]=_0x33a63b[_0x46e546]['contactid'];}}if(_0x69ba1){_0xe6b5de(_0xdf4d73);}else{return createEndUser(_0xdf4d73,_0x219ad0,_0x11f64e,_0x269abb,_0x1fd906,_0x611938)[_0x5012('0x10')](function(_0x20bd86){logger[_0x5012('0x1f')]('['+[_0x611938[_0x5012('0x13')]()]+_0x5012('0x2f'),_0x20bd86[_0x5012('0x2a')]);_0xe6b5de(_0x20bd86);});}}else{return createEndUser(_0xdf4d73,_0x219ad0,_0x11f64e,_0x269abb,_0x1fd906,_0x611938)[_0x5012('0x10')](function(_0x16f18e){logger[_0x5012('0x1f')]('['+[_0x611938[_0x5012('0x13')]()]+_0x5012('0x30'),_0x16f18e[_0x5012('0x2a')]);_0xe6b5de(_0x16f18e);});}});});}function getCustomFields(_0x8d9ace,_0x3357b8,_0x57e0f5){var _0x176008={};if(_0x8d9ace[_0x5012('0x1c')]>0x0){_['forEach'](_0x8d9ace,function(_0x33f06f){if(_0x33f06f[_0x5012('0x31')]==='string'&&_0x33f06f[_0x5012('0x32')]&&!_0x33f06f[_0x5012('0x33')]){var _0x4f8ad2=_0x33f06f[_0x5012('0x34')][_0x5012('0x24')]();var _0x2911d3=_0x4f8ad2[_0x5012('0x35')](0x0,_0x4f8ad2[_0x5012('0x36')]('_'));var _0x3c9f74=_0x4f8ad2[_0x5012('0x35')](_0x4f8ad2[_0x5012('0x36')]('_')+0x1);if(_0x2911d3===_0x57e0f5){_0x176008[_0x3c9f74]=_0x33f06f['content'];}}});}return _0x176008;}function getTicket(_0x43a9b7,_0x5605ac,_0x1a0e84,_0xaedcb1,_0x13d4e2,_0x418caf,_0xd045fe){return new BPromise(function(_0x147e69,_0x24bd36){var _0x495922;return getAuthToken(_0x5605ac,_0x1a0e84,_0xd045fe)['then'](function(_0x4a0c8b){if(_0x418caf[_0x5012('0x37')]==='incident'){_0x495922={'method':_0x5012('0xd'),'uri':_0xaedcb1+_0x5012('0x38'),'body':Object[_0x5012('0x39')]({},{'title':intUtil[_0x5012('0x3a')](_0x418caf['Subjects'],_0x13d4e2,'\x20'),'description':intUtil[_0x5012('0x3a')](_0x418caf[_0x5012('0x3b')],_0x13d4e2,'\x0a'),'customerid_contact@odata.bind':_0x5012('0x3c')+_0x43a9b7[_0x5012('0x2a')]+')','ownerid@odata.bind':_0x5012('0x3d')+_0x43a9b7['userId']+')','caseorigincode':'1'},getCustomFields(_0x418caf['Fields'],_0x13d4e2,_0x418caf[_0x5012('0x37')])),'headers':{'Authorization':_0x5012('0x16')+_0x4a0c8b,'OData-Version':_0x5012('0x17')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x418caf[_0x5012('0x37')]===_0x5012('0x3e')){_0x495922={'method':_0x5012('0xd'),'uri':_0xaedcb1+_0x5012('0x3f'),'body':Object[_0x5012('0x39')]({},{'subject':intUtil[_0x5012('0x3a')](_0x418caf['Subjects'],_0x13d4e2,'\x20'),'phonenumber':String(_0x13d4e2['calleridnum']),'description':intUtil[_0x5012('0x3a')](_0x418caf[_0x5012('0x3b')],_0x13d4e2,'\x0a'),'regardingobjectid_contact@odata.bind':'/contacts('+_0x43a9b7[_0x5012('0x2a')]+')','ownerid@odata.bind':_0x5012('0x3d')+_0x43a9b7[_0x5012('0x21')]+')','directioncode':_0x43a9b7[_0x5012('0x40')]===_0x5012('0x41')?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':_0x5012('0x3d')+_0x43a9b7[_0x5012('0x21')]+')','participationtypemask':_0x43a9b7[_0x5012('0x40')]===_0x5012('0x41')?0x2:0x1},{'partyid_contact@odata.bind':_0x5012('0x3c')+_0x43a9b7[_0x5012('0x2a')]+')','participationtypemask':_0x43a9b7[_0x5012('0x40')]==='queue'?0x1:0x2}]},getCustomFields(_0x418caf[_0x5012('0x42')],_0x13d4e2,_0x418caf[_0x5012('0x37')])),'headers':{'Authorization':'Bearer\x20'+_0x4a0c8b,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x495922);})['then'](function(_0x5c63e2){var _0x126c58=_0x5c63e2['headers']['odata-entityid'];var _0x8ff0a1=_0x126c58['substring'](_0x126c58[_0x5012('0x29')]('(')+0x1,_0x126c58['lastIndexOf'](')'));_0x43a9b7[_0x5012('0x43')]=_0x8ff0a1;_0x147e69(_0x43a9b7);})[_0x5012('0x12')](function(_0x12e4a3){_0x24bd36(_0x12e4a3[_0x5012('0x14')]);});});}function emit(_0x2924d0,_0x52f6c9,_0x18afd2,_0x1d6ba){var _0x3cf89e={'uri':util[_0x5012('0x44')](_0x5012('0x45'),_0x2924d0,_0x18afd2,_0x1d6ba)};io['to'](util[_0x5012('0x44')](_0x5012('0x46'),_0x52f6c9))[_0x5012('0x47')](_0x5012('0x48'),_0x3cf89e);}exports['cs']=function(_0x3be263,_0x139dff,_0x22f177,_0x511c0f,_0x4843f6,_0x104890,_0x123d8b,_0x43feab){var _0x152aa3={};_0x104890[_0x5012('0x49')]=intUtil[_0x5012('0x4a')](_0x104890['remoteUri']);_0x104890[_0x5012('0x4b')]=intUtil['stripTrailingSlash'](_0x104890[_0x5012('0x4b')]);_0x152aa3[_0x5012('0x40')]=_0x43feab===_0x5012('0x41')||_0x43feab==='abandoned'?_0x5012('0x41'):'outbound';var _0x28be6b=util[_0x5012('0x44')](_0x5012('0x4c'),_0x104890['remoteUri']);var _0x2eff96=util['format'](_0x5012('0x4d'),_0x104890[_0x5012('0x4e')]);var _0x138b8b=util[_0x5012('0x44')](_0x5012('0x4f'),_0x104890['serverUrl'],_0x139dff[_0x5012('0x50')],md5(_0x139dff['uniqueid']));if(_0x4843f6&&_0x4843f6[_0x5012('0x51')]){logger['info'](_0x5012('0x52'),_0x5012('0x53'));_0x139dff[_0x5012('0x54')]=_0x138b8b;}else if(_0x123d8b&&_0x123d8b[_0x5012('0x55')]&&_0x123d8b[_0x5012('0x55')]!==_0x5012('0x56')){logger[_0x5012('0x1f')](_0x5012('0x57'),_0x5012('0x53'));_0x139dff[_0x5012('0x54')]=_0x138b8b;}else{_0x139dff[_0x5012('0x54')]='';}return getUser(_0x152aa3,_0x104890,_0x511c0f,_0x2eff96,_0x28be6b,_0x43feab)[_0x5012('0x10')](function(_0x2523a3){logger[_0x5012('0x1f')]('['+_0x43feab[_0x5012('0x13')]()+']\x20The\x20User\x20ID\x20is:',_0x2523a3['userId']);logger[_0x5012('0x1f')]('['+_0x43feab[_0x5012('0x13')]()+_0x5012('0x58'),_0x2523a3[_0x5012('0x1b')]);return getEndUser(_0x2523a3,_0x104890,_0x2eff96,_0x28be6b,_0x139dff,_0x43feab);})[_0x5012('0x10')](function(_0x324edd){logger[_0x5012('0x1f')]('['+_0x43feab[_0x5012('0x13')]()+']\x20The\x20Enduser\x20ID\x20is:',_0x324edd[_0x5012('0x2a')]);logger['info']('['+_0x43feab[_0x5012('0x13')]()+_0x5012('0x59'),_0x139dff[_0x5012('0x2d')]);return getTicket(_0x324edd,_0x104890,_0x2eff96,_0x28be6b,_0x139dff,_0x22f177,_0x43feab);})['then'](function(_0x21f1a3){logger['info'](util[_0x5012('0x44')]('['+_0x43feab[_0x5012('0x13')]()+_0x5012('0x5a'),_0x22f177[_0x5012('0x37')],_0x21f1a3[_0x5012('0x43')]));logger[_0x5012('0x1f')](util[_0x5012('0x44')]('['+_0x43feab[_0x5012('0x13')]()+']\x20Call\x20direction:\x20%s',_0x43feab));if(_0x43feab!==_0x5012('0x5b')){logger['info']('['+_0x43feab[_0x5012('0x13')]()+']',_0x5012('0x5c'));emit(_0x104890[_0x5012('0x49')],_0x511c0f[_0x5012('0x5d')],_0x22f177['ticketType'],_0x21f1a3[_0x5012('0x43')]);}})[_0x5012('0x12')](function(_0x5d1e1d){logger[_0x5012('0x5e')]('['+_0x43feab[_0x5012('0x13')]()+_0x5012('0x5f'),util[_0x5012('0x60')](_0x5d1e1d,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
+var _0x1ef8=['email','userEmail','length','internalemailaddress','isdisabled','info','toUpperCase',']\x20Agent\x20found\x20','systemuserid','userId','catch','toLowerCase','outbound','destcalleridnum','calleridnum','POST','/systemusers(','headers','odata-entityid','substring','lastIndexOf','enduserId','contacts?$select=telephone1','4.0','telephone1','contactid',']\x20Enduser\x20created!','forEach','type','string','nameField','customField','idField','indexOf','content','ticketType','incident','incidents','assign','getString','Subjects','Descriptions','/contacts(','Fields','Bearer\x20','phonecall','callDirection','queue','ticketId','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','emit','stripTrailingSlash','serverUrl','abandoned','%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','Recording\x20is\x20enabled!','recordingFormat','none','[OUTBOUND]',']\x20The\x20Enduser\x20ID\x20is:',']\x20Call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...','name','inspect','lodash','bluebird','util','./util','md5','dynamics365','redis','defaults','localhost','clientId','remoteUri','username','password','then','access_token','error','message','GET','value','validateEmail'];(function(_0x23aa7f,_0x3c29ba){var _0x5ab285=function(_0x13d8d0){while(--_0x13d8d0){_0x23aa7f['push'](_0x23aa7f['shift']());}};_0x5ab285(++_0x3c29ba);}(_0x1ef8,0xa2));var _0x81ef=function(_0x5e4c9b,_0x145305){_0x5e4c9b=_0x5e4c9b-0x0;var _0x35836a=_0x1ef8[_0x5e4c9b];return _0x35836a;};'use strict';var _=require(_0x81ef('0x0'));var BPromise=require(_0x81ef('0x1'));var rp=require('request-promise');var util=require(_0x81ef('0x2'));var intUtil=require(_0x81ef('0x3'));var md5=require(_0x81ef('0x4'));var Redis=require('ioredis');var logger=require('../../../../config/logger')(_0x81ef('0x5'));var config=require('../../../../config/environment');config[_0x81ef('0x6')]=_[_0x81ef('0x7')](config[_0x81ef('0x6')],{'host':_0x81ef('0x8'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x81ef('0x6')]));function getAuthToken(_0x2842ab,_0x3f2f5,_0x351143){var _0x1adaa3={'method':'POST','uri':_0x3f2f5,'form':{'client_id':_0x2842ab[_0x81ef('0x9')],'resource':_0x2842ab[_0x81ef('0xa')],'username':_0x2842ab[_0x81ef('0xb')],'password':_0x2842ab[_0x81ef('0xc')],'grant_type':_0x81ef('0xc'),'client_secret':_0x2842ab['clientSecret']},'json':!![]};return rp(_0x1adaa3)[_0x81ef('0xd')](function(_0x4669c1){return _0x4669c1[_0x81ef('0xe')];})['catch'](function(_0x3eea85){logger[_0x81ef('0xf')]('['+[_0x351143['toUpperCase']()]+']\x20Wrong\x20credentials!');return _0x3eea85[_0x81ef('0x10')];});}function getUser(_0x2a787b,_0x27a791,_0x27b492,_0x2791a2,_0x17ecd3,_0x1c1817){return new BPromise(function(_0xc1989b,_0x38aa3e){return getAuthToken(_0x27a791,_0x2791a2,_0x1c1817)['then'](function(_0x2815db){var _0x11975d={'method':_0x81ef('0x11'),'uri':_0x17ecd3+'systemusers?$select=internalemailaddress,isdisabled,systemuserid','headers':{'Authorization':'Bearer\x20'+_0x2815db,'OData-Version':'4.0'},'json':!![]};return rp(_0x11975d);})['then'](function(_0x1bf6d0){var _0x4be00a=_0x1bf6d0[_0x81ef('0x12')];var _0xab8ce8=![];var _0x26954a=null;if(!_['isNil'](_0x27b492)){if(intUtil[_0x81ef('0x13')](_0x27b492[_0x81ef('0x14')])){_0x2a787b[_0x81ef('0x15')]=_0x27b492[_0x81ef('0x14')];for(_0x26954a=0x0;_0x26954a<_0x4be00a[_0x81ef('0x16')];_0x26954a++){if(_0x4be00a[_0x26954a][_0x81ef('0x17')]===_0x27b492[_0x81ef('0x14')]&&!_0x4be00a[_0x26954a][_0x81ef('0x18')]){_0xab8ce8=!![];logger[_0x81ef('0x19')]('['+[_0x1c1817[_0x81ef('0x1a')]()]+_0x81ef('0x1b')+_0x4be00a[_0x26954a][_0x81ef('0x1c')]+'!');_0x2a787b[_0x81ef('0x1d')]=_0x4be00a[_0x26954a][_0x81ef('0x1c')];}}}}if(!_0xab8ce8){logger[_0x81ef('0x19')]('['+[_0x1c1817['toUpperCase']()]+']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');_0x2a787b[_0x81ef('0x15')]=_0x27a791['username'];for(_0x26954a=0x0;_0x26954a<_0x4be00a[_0x81ef('0x16')];_0x26954a++){if(_0x4be00a[_0x26954a][_0x81ef('0x17')]===_0x27a791[_0x81ef('0xb')]){_0x2a787b[_0x81ef('0x1d')]=_0x4be00a[_0x26954a]['systemuserid'];}}}_0xc1989b(_0x2a787b);})[_0x81ef('0x1e')](function(_0x3209cb){_0x38aa3e(_0x3209cb[_0x81ef('0x10')]);});});}function createEndUser(_0x127801,_0x3fdc38,_0x131b11,_0x14ffdc,_0x2affc6,_0x40cd12){return new BPromise(function(_0x2a3de9,_0xec40d1){return getAuthToken(_0x3fdc38,_0x131b11,_0x40cd12)[_0x81ef('0xd')](function(_0x26d70a){var _0x23f817=_0x40cd12[_0x81ef('0x1f')]()===_0x81ef('0x20')?_0x2affc6[_0x81ef('0x21')]:_0x2affc6[_0x81ef('0x22')];var _0x5e2d13={'method':_0x81ef('0x23'),'uri':_0x14ffdc+'contacts','body':{'telephone1':_0x23f817,'fullname':_0x23f817,'firstname':_0x23f817,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x81ef('0x24')+_0x127801[_0x81ef('0x1d')]+')'},'headers':{'Authorization':'Bearer\x20'+_0x26d70a,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x5e2d13);})['then'](function(_0x175d71){var _0xadcf3a=_0x175d71[_0x81ef('0x25')][_0x81ef('0x26')];var _0x4b8364=_0xadcf3a[_0x81ef('0x27')](_0xadcf3a[_0x81ef('0x28')]('(')+0x1,_0xadcf3a[_0x81ef('0x28')](')'));_0x127801[_0x81ef('0x29')]=_0x4b8364;_0x2a3de9(_0x127801);})[_0x81ef('0x1e')](function(_0x2242b9){_0xec40d1(_0x2242b9[_0x81ef('0x10')]);});});}function getEndUser(_0x2c961b,_0x20769f,_0x373a05,_0x4167fc,_0x218d9b,_0xf8aa1){return new BPromise(function(_0x854a6,_0x27c236){return getAuthToken(_0x20769f,_0x373a05,_0xf8aa1)[_0x81ef('0xd')](function(_0x18ff62){var _0x48e021={'method':'GET','uri':_0x4167fc+_0x81ef('0x2a'),'headers':{'Authorization':'Bearer\x20'+_0x18ff62,'If-None-Match':null,'OData-Version':_0x81ef('0x2b')},'json':!![]};return rp(_0x48e021);})[_0x81ef('0xd')](function(_0x3a1a40){var _0x287f75=null;if(_0x3a1a40){var _0x4bd1ff=_0x3a1a40[_0x81ef('0x12')];var _0xdbddcd=![];for(_0x287f75=0x0;_0x287f75<_0x4bd1ff['length'];_0x287f75++){var _0x13c785=_0xf8aa1[_0x81ef('0x1f')]()===_0x81ef('0x20')?_0x218d9b[_0x81ef('0x21')]:_0x218d9b[_0x81ef('0x22')];if(_0x4bd1ff[_0x287f75][_0x81ef('0x2c')]===_0x13c785){_0xdbddcd=!![];_0x2c961b['enduserId']=_0x4bd1ff[_0x287f75][_0x81ef('0x2d')];}}if(_0xdbddcd){_0x854a6(_0x2c961b);}else{return createEndUser(_0x2c961b,_0x20769f,_0x373a05,_0x4167fc,_0x218d9b,_0xf8aa1)[_0x81ef('0xd')](function(_0x363fda){logger[_0x81ef('0x19')]('['+[_0xf8aa1[_0x81ef('0x1a')]()]+_0x81ef('0x2e'),_0x363fda[_0x81ef('0x29')]);_0x854a6(_0x363fda);});}}else{return createEndUser(_0x2c961b,_0x20769f,_0x373a05,_0x4167fc,_0x218d9b,_0xf8aa1)['then'](function(_0x231778){logger[_0x81ef('0x19')]('['+[_0xf8aa1['toUpperCase']()]+']\x20Enduser\x20Created!',_0x231778[_0x81ef('0x29')]);_0x854a6(_0x231778);});}});});}function getCustomFields(_0x242bdc,_0x1b80e5,_0x41b7cd){var _0x2a2527={};if(_0x242bdc[_0x81ef('0x16')]>0x0){_[_0x81ef('0x2f')](_0x242bdc,function(_0x3885c4){if(_0x3885c4[_0x81ef('0x30')]===_0x81ef('0x31')&&_0x3885c4[_0x81ef('0x32')]&&!_0x3885c4[_0x81ef('0x33')]){var _0x373b50=_0x3885c4[_0x81ef('0x34')][_0x81ef('0x1f')]();var _0x4f76eb=_0x373b50[_0x81ef('0x27')](0x0,_0x373b50['indexOf']('_'));var _0x31d1e8=_0x373b50[_0x81ef('0x27')](_0x373b50[_0x81ef('0x35')]('_')+0x1);if(_0x4f76eb===_0x41b7cd){_0x2a2527[_0x31d1e8]=_0x3885c4[_0x81ef('0x36')];}}});}return _0x2a2527;}function getTicket(_0x3ba316,_0x295cba,_0x50b931,_0x16cf93,_0x3c1dbd,_0x2df1a7,_0x5d25ce){return new BPromise(function(_0x2a9a68,_0x121dbd){var _0x28ceef;return getAuthToken(_0x295cba,_0x50b931,_0x5d25ce)[_0x81ef('0xd')](function(_0x501421){if(_0x2df1a7[_0x81ef('0x37')]===_0x81ef('0x38')){_0x28ceef={'method':'POST','uri':_0x16cf93+_0x81ef('0x39'),'body':Object[_0x81ef('0x3a')]({},{'title':intUtil[_0x81ef('0x3b')](_0x2df1a7[_0x81ef('0x3c')],_0x3c1dbd,'\x20'),'description':intUtil[_0x81ef('0x3b')](_0x2df1a7[_0x81ef('0x3d')],_0x3c1dbd,'\x0a'),'customerid_contact@odata.bind':_0x81ef('0x3e')+_0x3ba316['enduserId']+')','ownerid@odata.bind':_0x81ef('0x24')+_0x3ba316['userId']+')','caseorigincode':'1'},getCustomFields(_0x2df1a7[_0x81ef('0x3f')],_0x3c1dbd,_0x2df1a7[_0x81ef('0x37')])),'headers':{'Authorization':_0x81ef('0x40')+_0x501421,'OData-Version':_0x81ef('0x2b')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x2df1a7['ticketType']===_0x81ef('0x41')){_0x28ceef={'method':'POST','uri':_0x16cf93+'phonecalls','body':Object['assign']({},{'subject':intUtil[_0x81ef('0x3b')](_0x2df1a7[_0x81ef('0x3c')],_0x3c1dbd,'\x20'),'phonenumber':String(_0x3c1dbd[_0x81ef('0x22')]),'description':intUtil[_0x81ef('0x3b')](_0x2df1a7[_0x81ef('0x3d')],_0x3c1dbd,'\x0a'),'regardingobjectid_contact@odata.bind':_0x81ef('0x3e')+_0x3ba316[_0x81ef('0x29')]+')','ownerid@odata.bind':'/systemusers('+_0x3ba316['userId']+')','directioncode':_0x3ba316[_0x81ef('0x42')]===_0x81ef('0x43')?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':_0x81ef('0x24')+_0x3ba316[_0x81ef('0x1d')]+')','participationtypemask':_0x3ba316[_0x81ef('0x42')]===_0x81ef('0x43')?0x2:0x1},{'partyid_contact@odata.bind':'/contacts('+_0x3ba316['enduserId']+')','participationtypemask':_0x3ba316[_0x81ef('0x42')]===_0x81ef('0x43')?0x1:0x2}]},getCustomFields(_0x2df1a7['Fields'],_0x3c1dbd,_0x2df1a7[_0x81ef('0x37')])),'headers':{'Authorization':_0x81ef('0x40')+_0x501421,'OData-Version':_0x81ef('0x2b')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x28ceef);})[_0x81ef('0xd')](function(_0x46245b){var _0x2c379f=_0x46245b[_0x81ef('0x25')]['odata-entityid'];var _0x35a572=_0x2c379f[_0x81ef('0x27')](_0x2c379f[_0x81ef('0x28')]('(')+0x1,_0x2c379f[_0x81ef('0x28')](')'));_0x3ba316[_0x81ef('0x44')]=_0x35a572;_0x2a9a68(_0x3ba316);})[_0x81ef('0x1e')](function(_0x3d4177){_0x121dbd(_0x3d4177[_0x81ef('0x10')]);});});}function emit(_0x49c59f,_0x42f736,_0x58564f,_0x24f172){var _0x14b571={'uri':util[_0x81ef('0x45')](_0x81ef('0x46'),_0x49c59f,_0x58564f,_0x24f172)};io['to'](util['format'](_0x81ef('0x47'),_0x42f736))[_0x81ef('0x48')]('trigger:browser:url',_0x14b571);}exports['cs']=function(_0xc395f9,_0x6a7eb3,_0x30f10c,_0x2de61f,_0x20b6e5,_0x328f6a,_0x5da482,_0x2d2f47){var _0x45819f={};_0x328f6a[_0x81ef('0xa')]=intUtil[_0x81ef('0x49')](_0x328f6a[_0x81ef('0xa')]);_0x328f6a[_0x81ef('0x4a')]=intUtil[_0x81ef('0x49')](_0x328f6a['serverUrl']);_0x45819f[_0x81ef('0x42')]=_0x2d2f47===_0x81ef('0x43')||_0x2d2f47===_0x81ef('0x4b')?_0x81ef('0x43'):_0x81ef('0x20');var _0x5f3e85=util[_0x81ef('0x45')](_0x81ef('0x4c'),_0x328f6a[_0x81ef('0xa')]);var _0x38b724=util['format'](_0x81ef('0x4d'),_0x328f6a[_0x81ef('0x4e')]);var _0x49061a=util[_0x81ef('0x45')](_0x81ef('0x4f'),_0x328f6a[_0x81ef('0x4a')],_0x6a7eb3['uniqueid'],md5(_0x6a7eb3[_0x81ef('0x50')]));if(_0x20b6e5&&_0x20b6e5[_0x81ef('0x51')]){logger[_0x81ef('0x19')]('[QUEUE]',_0x81ef('0x52'));_0x6a7eb3['recordingURL']=_0x49061a;}else if(_0x5da482&&_0x5da482[_0x81ef('0x53')]&&_0x5da482[_0x81ef('0x53')]!==_0x81ef('0x54')){logger[_0x81ef('0x19')](_0x81ef('0x55'),_0x81ef('0x52'));_0x6a7eb3['recordingURL']=_0x49061a;}else{_0x6a7eb3['recordingURL']='';}return getUser(_0x45819f,_0x328f6a,_0x2de61f,_0x38b724,_0x5f3e85,_0x2d2f47)[_0x81ef('0xd')](function(_0x22c772){logger['info']('['+_0x2d2f47[_0x81ef('0x1a')]()+']\x20The\x20User\x20ID\x20is:',_0x22c772['userId']);logger[_0x81ef('0x19')]('['+_0x2d2f47[_0x81ef('0x1a')]()+']\x20The\x20User\x20email\x20is:',_0x22c772[_0x81ef('0x15')]);return getEndUser(_0x22c772,_0x328f6a,_0x38b724,_0x5f3e85,_0x6a7eb3,_0x2d2f47);})['then'](function(_0x481c18){logger[_0x81ef('0x19')]('['+_0x2d2f47[_0x81ef('0x1a')]()+_0x81ef('0x56'),_0x481c18[_0x81ef('0x29')]);logger[_0x81ef('0x19')]('['+_0x2d2f47[_0x81ef('0x1a')]()+']\x20The\x20Enduser\x20phone\x20is:',_0x6a7eb3[_0x81ef('0x22')]);return getTicket(_0x481c18,_0x328f6a,_0x38b724,_0x5f3e85,_0x6a7eb3,_0x30f10c,_0x2d2f47);})[_0x81ef('0xd')](function(_0x2bd535){logger[_0x81ef('0x19')](util[_0x81ef('0x45')]('['+_0x2d2f47['toUpperCase']()+']\x20The\x20%s\x20ID\x20is:\x20%s',_0x30f10c[_0x81ef('0x37')],_0x2bd535[_0x81ef('0x44')]));logger[_0x81ef('0x19')](util[_0x81ef('0x45')]('['+_0x2d2f47[_0x81ef('0x1a')]()+_0x81ef('0x57'),_0x2d2f47));if(_0x2d2f47!==_0x81ef('0x4b')){logger['info']('['+_0x2d2f47[_0x81ef('0x1a')]()+']',_0x81ef('0x58'));emit(_0x328f6a['remoteUri'],_0x2de61f[_0x81ef('0x59')],_0x30f10c[_0x81ef('0x37')],_0x2bd535[_0x81ef('0x44')]);}})[_0x81ef('0x1e')](function(_0x4be37e){logger[_0x81ef('0xf')]('['+_0x2d2f47[_0x81ef('0x1a')]()+']\x20Error\x20running\x20Dynamics365\x20integration',util[_0x81ef('0x5a')](_0x4be37e,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
index 1505ac4..d9506f1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcbd5=['toLowerCase','content','idField','customField','custom_fields','push','variable','variableName','customVariable','Variable','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:','The\x20Ticket\x20ID\x20is:','user:%s','trigger:browser:url','%s/helpdesk/tickets/%d','catch','error','outbound','recordingFormat','none','destcalleridname','The\x20Enduser\x20ID\x20is:','[OUTBOUND]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','stringify','abandoned','[ABANDONED]','lodash','request-promise','md5','ioredis','./util','../../../../config/logger','redis','defaults','localhost','socket.io-emitter','application/json','info','Creating\x20new\x20ticket...','format','Caller\x20-\x20%s','calleridname','calleridnum','getString','name','keyBy','value','%s/api/v2/tickets','POST','then','Ticket\x20created!','%s/api/v2/agents','remoteUri','length','Agent\x20found!','find','email','%s/api/v2/agents/me','Admin\x20account\x20selected.','%s/api/v2/contacts','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Enduser\x20created.','Basic\x20%s','apiKey','toString','base64','debug','GET','map','forEach','type','string','nameField'];(function(_0x408dfb,_0x5e3de6){var _0x431fef=function(_0x49f8fe){while(--_0x49f8fe){_0x408dfb['push'](_0x408dfb['shift']());}};_0x431fef(++_0x5e3de6);}(_0xcbd5,0x124));var _0x5cbd=function(_0x1db251,_0xf0443d){_0x1db251=_0x1db251-0x0;var _0x56685a=_0xcbd5[_0x1db251];return _0x56685a;};'use strict';var _=require(_0x5cbd('0x0'));var rp=require(_0x5cbd('0x1'));var md5=require(_0x5cbd('0x2'));var util=require('util');var Redis=require(_0x5cbd('0x3'));var intUtil=require(_0x5cbd('0x4'));var config=require('../../../../config/environment');var logger=require(_0x5cbd('0x5'))('freshdesk');config[_0x5cbd('0x6')]=_[_0x5cbd('0x7')](config[_0x5cbd('0x6')],{'host':_0x5cbd('0x8'),'port':0x18eb});var io=require(_0x5cbd('0x9'))(new Redis(config[_0x5cbd('0x6')]));var headers={'Content-Type':_0x5cbd('0xa'),'Accept':'application/json'};function emit(_0x48b827,_0x148613,_0x4f098c){io['to'](_0x48b827)['emit'](_0x148613,_0x4f098c);}function getTicket(_0x20cd42,_0x34d03c,_0x2cc79b,_0x2e4d0d,_0x4f38b8){logger[_0x5cbd('0xb')](_0x5cbd('0xc'));var _0x3b5d4e=_['merge']({'responder_id':_0x34d03c['id'],'requester_id':_0x2cc79b['id'],'name':util[_0x5cbd('0xd')](_0x5cbd('0xe'),_0x4f38b8[_0x5cbd('0xf')]),'phone':_0x4f38b8[_0x5cbd('0x10')],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil[_0x5cbd('0x11')](_0x2e4d0d['Subjects'],_0x4f38b8,'\x20'),'description':intUtil['getString'](_0x2e4d0d['Descriptions'],_0x4f38b8,'<br>'),'tags':getTags(_0x2e4d0d['Tags'],_0x5cbd('0x12'))},getCustomFields(_0x2e4d0d['Fields'],_0x4f38b8));_0x3b5d4e['custom_fields']=_['mapValues'](_[_0x5cbd('0x13')](_0x3b5d4e['custom_fields'],'id'),_0x5cbd('0x14'));return request({'uri':util[_0x5cbd('0xd')](_0x5cbd('0x15'),_0x20cd42['remoteUri']),'method':_0x5cbd('0x16'),'body':_0x3b5d4e})[_0x5cbd('0x17')](function(_0x23593f){logger[_0x5cbd('0xb')](_0x5cbd('0x18'));return _0x23593f;});}function getUser(_0x59d142,_0x398eb0){if(intUtil['validateEmail'](_0x398eb0)){return request({'uri':util['format'](_0x5cbd('0x19'),_0x59d142[_0x5cbd('0x1a')]),'qs':{'email':_0x398eb0}})['then'](function(_0x3e53f8){if(_0x3e53f8[_0x5cbd('0x1b')]){logger[_0x5cbd('0xb')](_0x5cbd('0x1c'));return _[_0x5cbd('0x1d')](_0x3e53f8,function(_0x3731b6){return _0x3731b6['contact'][_0x5cbd('0x1e')]===_0x398eb0;});}else{logger['info']('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util['format'](_0x5cbd('0x1f'),_0x59d142['remoteUri'])})[_0x5cbd('0x17')](function(_0x35aee9){logger[_0x5cbd('0xb')](_0x5cbd('0x20'));return _0x35aee9;});}});}else{logger[_0x5cbd('0xb')]('Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x5cbd('0xd')]('%s/api/v2/agents/me',_0x59d142[_0x5cbd('0x1a')])})[_0x5cbd('0x17')](function(_0x304ba9){logger['info'](_0x5cbd('0x20'));return _0x304ba9;});}}function getEndUser(_0x562a5c,_0x53bc72,_0x8056c5){logger[_0x5cbd('0xb')]('Searching\x20enduser\x20with\x20phone',_0x8056c5);return request({'uri':util[_0x5cbd('0xd')](_0x5cbd('0x21'),_0x562a5c['remoteUri']),'qs':{'phone':_0x8056c5}})[_0x5cbd('0x17')](function(_0x36fa4d){if(_0x36fa4d['length']){logger['info'](_0x5cbd('0x22'));return _['find'](_0x36fa4d,{'phone':_0x8056c5});}else{logger[_0x5cbd('0xb')](_0x5cbd('0x23'));return request({'uri':util[_0x5cbd('0xd')](_0x5cbd('0x21'),_0x562a5c[_0x5cbd('0x1a')]),'method':_0x5cbd('0x16'),'body':{'name':_0x53bc72,'phone':_0x8056c5}})[_0x5cbd('0x17')](function(_0x2a3799){logger[_0x5cbd('0xb')](_0x5cbd('0x24'));return _0x2a3799;});}});}function getAuth(_0xdf27e5){return util['format'](_0x5cbd('0x25'),new Buffer(_0xdf27e5[_0x5cbd('0x26')]+':X')[_0x5cbd('0x27')](_0x5cbd('0x28')));}function request(_0x11a92f){logger[_0x5cbd('0x29')]('[HTTP]',JSON['stringify'](_0x11a92f));return rp(_[_0x5cbd('0x7')](_0x11a92f,{'method':_0x5cbd('0x2a'),'headers':headers,'json':!![]}));}function getTags(_0x5545a8,_0xc01ebc){var _0x3322b7=[];if(_0x5545a8&&_0x5545a8[_0x5cbd('0x1b')]>0x0){_0x3322b7=_[_0x5cbd('0x2b')](_0x5545a8,_0xc01ebc);}return _0x3322b7;}function getCustomFields(_0x373a48,_0x4eae03){var _0x11b841=[];var _0xbb18b3={'custom_fields':[]};if(_0x373a48[_0x5cbd('0x1b')]>0x0){_[_0x5cbd('0x2c')](_0x373a48,function(_0x467fad){if(_0x467fad[_0x5cbd('0x2d')]===_0x5cbd('0x2e')&&_0x467fad[_0x5cbd('0x2f')]&&!_0x467fad['customField']){_0xbb18b3[_0x467fad[_0x5cbd('0x2f')][_0x5cbd('0x30')]()]=_0x467fad[_0x5cbd('0x31')]['toString']();}else if(_0x467fad[_0x5cbd('0x2d')]===_0x5cbd('0x2e')&&_0x467fad[_0x5cbd('0x32')]&&_0x467fad[_0x5cbd('0x33')]){_0xbb18b3[_0x5cbd('0x34')][_0x5cbd('0x35')]({'id':_0x467fad[_0x5cbd('0x32')],'value':_0x467fad[_0x5cbd('0x31')][_0x5cbd('0x27')]()});}else if(_0x467fad[_0x5cbd('0x2d')]===_0x5cbd('0x36')&&_0x467fad[_0x5cbd('0x37')]&&_0x467fad[_0x5cbd('0x32')]&&_0x467fad[_0x5cbd('0x33')]){_0x4eae03[_0x467fad[_0x5cbd('0x37')]]&&_0xbb18b3[_0x5cbd('0x34')][_0x5cbd('0x35')]({'id':_0x467fad['idField'],'value':_0x4eae03[_0x467fad[_0x5cbd('0x37')]][_0x5cbd('0x27')]()});}else if(_0x467fad['type']===_0x5cbd('0x38')&&_0x467fad[_0x5cbd('0x39')]&&_0x467fad[_0x5cbd('0x39')][_0x5cbd('0x12')]&&_0x467fad[_0x5cbd('0x32')]&&_0x467fad['customField']){_0x4eae03[_0x467fad[_0x5cbd('0x39')]['name'][_0x5cbd('0x30')]()]&&_0xbb18b3['custom_fields']['push']({'id':_0x467fad['idField'],'value':_0x4eae03[_0x467fad[_0x5cbd('0x39')][_0x5cbd('0x12')][_0x5cbd('0x30')]()][_0x5cbd('0x27')]()});}});}return _0xbb18b3;}exports[_0x5cbd('0x3a')]=function(_0x335872,_0x55a194,_0x494711,_0x345789,_0x5acaf7,_0x2cdba1){var _0x29c00d,_0x17d2b7;_0x2cdba1['remoteUri']=intUtil[_0x5cbd('0x3b')](_0x2cdba1['remoteUri']);_0x2cdba1[_0x5cbd('0x3c')]=intUtil[_0x5cbd('0x3b')](_0x2cdba1[_0x5cbd('0x3c')]);if(_0x5acaf7&&_0x5acaf7[_0x5cbd('0x3d')]){logger[_0x5cbd('0xb')](_0x5cbd('0x3e'),_0x5cbd('0x3f'));_0x55a194['recordingURL']=util[_0x5cbd('0xd')](_0x5cbd('0x40'),_0x2cdba1[_0x5cbd('0x3c')],_0x55a194[_0x5cbd('0x41')],md5(_0x55a194[_0x5cbd('0x41')]));}else{_0x55a194[_0x5cbd('0x42')]='';}headers[_0x5cbd('0x43')]=getAuth(_0x2cdba1);return getUser(_0x2cdba1,_0x345789['email'])[_0x5cbd('0x17')](function(_0x3ca23b){_0x29c00d=_0x3ca23b;logger[_0x5cbd('0xb')](_0x5cbd('0x44'),_0x29c00d['id']);return getEndUser(_0x2cdba1,_0x55a194['calleridname'],_0x55a194[_0x5cbd('0x10')]);})[_0x5cbd('0x17')](function(_0xc8d48b){_0x17d2b7=_0xc8d48b;logger[_0x5cbd('0xb')]('The\x20Enduser\x20ID\x20is:',_0x17d2b7['id']);return getTicket(_0x2cdba1,_0x29c00d,_0x17d2b7,_0x494711,_0x55a194);})['then'](function(_0x50b0c5){if(_0x50b0c5&&_0x50b0c5['id']){logger[_0x5cbd('0xb')](_0x5cbd('0x18'));logger['info'](_0x5cbd('0x45'),_0x50b0c5['id']);logger['info'](_0x5cbd('0x3e'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util['format'](_0x5cbd('0x46'),_0x345789[_0x5cbd('0x12')]),_0x5cbd('0x47'),{'uri':util[_0x5cbd('0xd')](_0x5cbd('0x48'),_0x2cdba1['remoteUri'],_0x50b0c5['id'])});}})[_0x5cbd('0x49')](function(_0x968176){logger[_0x5cbd('0x4a')]('[QUEUE]',JSON['stringify'](_0x968176));});};exports[_0x5cbd('0x4b')]=function(_0x1a7f5d,_0x48d25f,_0x3c189d,_0xb74d9f,_0x2a17ed,_0x58e7ac,_0x23ecdd){var _0x47e786,_0x3cd7f2;_0x58e7ac[_0x5cbd('0x1a')]=intUtil['stripTrailingSlash'](_0x58e7ac[_0x5cbd('0x1a')]);_0x58e7ac['serverUrl']=intUtil['stripTrailingSlash'](_0x58e7ac[_0x5cbd('0x3c')]);if(_0x23ecdd&&_0x23ecdd[_0x5cbd('0x4c')]&&_0x23ecdd[_0x5cbd('0x4c')]!==_0x5cbd('0x4d')){logger[_0x5cbd('0xb')]('[OUTBOUND]',_0x5cbd('0x3f'));_0x48d25f[_0x5cbd('0x42')]=util['format'](_0x5cbd('0x40'),_0x58e7ac[_0x5cbd('0x3c')],_0x48d25f[_0x5cbd('0x41')],md5(_0x48d25f[_0x5cbd('0x41')]));}headers[_0x5cbd('0x43')]=getAuth(_0x58e7ac);return getUser(_0x58e7ac,_0xb74d9f['email'])[_0x5cbd('0x17')](function(_0x15274f){_0x47e786=_0x15274f;logger[_0x5cbd('0xb')](_0x5cbd('0x44'),_0x47e786['id']);return getEndUser(_0x58e7ac,_0x48d25f[_0x5cbd('0x4e')],_0x48d25f['destcalleridnum']);})[_0x5cbd('0x17')](function(_0x2cfb75){_0x3cd7f2=_0x2cfb75;logger[_0x5cbd('0xb')](_0x5cbd('0x4f'),_0x3cd7f2['id']);return getTicket(_0x58e7ac,_0x47e786,_0x3cd7f2,_0x3c189d,_0x48d25f);})[_0x5cbd('0x17')](function(_0x589efb){if(_0x589efb&&_0x589efb['id']){logger[_0x5cbd('0xb')](_0x5cbd('0x18'));logger[_0x5cbd('0xb')](_0x5cbd('0x45'),_0x589efb['id']);logger[_0x5cbd('0xb')](_0x5cbd('0x50'),_0x5cbd('0x51'));emit(util[_0x5cbd('0xd')](_0x5cbd('0x46'),_0xb74d9f[_0x5cbd('0x12')]),_0x5cbd('0x47'),{'uri':util['format']('%s/helpdesk/tickets/%d',_0x58e7ac[_0x5cbd('0x1a')],_0x589efb['id'])});}})[_0x5cbd('0x49')](function(_0x337989){logger[_0x5cbd('0x4a')](_0x5cbd('0x50'),JSON[_0x5cbd('0x52')](_0x337989));});};exports[_0x5cbd('0x53')]=function(_0x38fd39,_0xc710ae,_0x320fcd,_0x1c0418,_0xf1d328,_0x53e056){var _0x50b396,_0xbff892;_0x53e056[_0x5cbd('0x1a')]=intUtil[_0x5cbd('0x3b')](_0x53e056[_0x5cbd('0x1a')]);_0x53e056['serverUrl']=intUtil['stripTrailingSlash'](_0x53e056[_0x5cbd('0x3c')]);if(_0xf1d328&&_0xf1d328[_0x5cbd('0x3d')]){logger[_0x5cbd('0xb')](_0x5cbd('0x54'),_0x5cbd('0x3f'));_0xc710ae[_0x5cbd('0x42')]=util[_0x5cbd('0xd')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x53e056[_0x5cbd('0x3c')],_0xc710ae[_0x5cbd('0x41')],md5(_0xc710ae[_0x5cbd('0x41')]));}else{_0xc710ae[_0x5cbd('0x42')]='';}headers[_0x5cbd('0x43')]=getAuth(_0x53e056);return getUser(_0x53e056,'')[_0x5cbd('0x17')](function(_0x29ebd7){_0x50b396=_0x29ebd7;logger['info'](_0x5cbd('0x44'),_0x50b396['id']);return getEndUser(_0x53e056,_0xc710ae['calleridname'],_0xc710ae[_0x5cbd('0x10')]);})['then'](function(_0x5dccd2){_0xbff892=_0x5dccd2;logger['info'](_0x5cbd('0x4f'),_0xbff892['id']);return getTicket(_0x53e056,_0x50b396,_0xbff892,_0x320fcd,_0xc710ae);})[_0x5cbd('0x17')](function(_0x160f44){if(_0x160f44){logger[_0x5cbd('0xb')](_0x5cbd('0x18'));logger['info']('The\x20Ticket\x20ID\x20is:',_0x160f44['id']);}})[_0x5cbd('0x49')](function(_0x16bf7f){logger[_0x5cbd('0x4a')]('[ABANDONED]',JSON['stringify'](_0x16bf7f));});};
\ No newline at end of file
+var _0xd109=['emit','info','Creating\x20new\x20ticket...','merge','calleridname','getString','Descriptions','<br>','Tags','name','Fields','custom_fields','keyBy','format','%s/api/v2/tickets','remoteUri','POST','then','Ticket\x20created!','validateEmail','length','Agent\x20found!','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/api/v2/agents/me','Admin\x20account\x20selected.','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','Searching\x20enduser\x20with\x20phone','%s/api/v2/contacts','Enduser\x20found!','find','Basic\x20%s','apiKey','toString','base64','debug','stringify','defaults','map','forEach','type','string','customField','toLowerCase','content','idField','push','variable','variableName','Variable','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','%s/helpdesk/tickets/%d','catch','error','recordingFormat','[OUTBOUND]','The\x20User\x20ID\x20is:','destcalleridnum','user:%s','[ABANDONED]','request-promise','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','freshdesk','redis','localhost','socket.io-emitter','application/json'];(function(_0x27c24e,_0x5db1c7){var _0x39004a=function(_0x44286d){while(--_0x44286d){_0x27c24e['push'](_0x27c24e['shift']());}};_0x39004a(++_0x5db1c7);}(_0xd109,0x14c));var _0x9d10=function(_0x2070da,_0x45e586){_0x2070da=_0x2070da-0x0;var _0x4f9fe1=_0xd109[_0x2070da];return _0x4f9fe1;};'use strict';var _=require('lodash');var rp=require(_0x9d10('0x0'));var md5=require(_0x9d10('0x1'));var util=require(_0x9d10('0x2'));var Redis=require(_0x9d10('0x3'));var intUtil=require(_0x9d10('0x4'));var config=require(_0x9d10('0x5'));var logger=require(_0x9d10('0x6'))(_0x9d10('0x7'));config[_0x9d10('0x8')]=_['defaults'](config[_0x9d10('0x8')],{'host':_0x9d10('0x9'),'port':0x18eb});var io=require(_0x9d10('0xa'))(new Redis(config['redis']));var headers={'Content-Type':_0x9d10('0xb'),'Accept':_0x9d10('0xb')};function emit(_0x4d8372,_0x49f241,_0x2496be){io['to'](_0x4d8372)[_0x9d10('0xc')](_0x49f241,_0x2496be);}function getTicket(_0x45d47a,_0x264505,_0x2fadc3,_0x1470ec,_0x2aea9e){logger[_0x9d10('0xd')](_0x9d10('0xe'));var _0x37626f=_[_0x9d10('0xf')]({'responder_id':_0x264505['id'],'requester_id':_0x2fadc3['id'],'name':util['format']('Caller\x20-\x20%s',_0x2aea9e[_0x9d10('0x10')]),'phone':_0x2aea9e['calleridnum'],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil[_0x9d10('0x11')](_0x1470ec['Subjects'],_0x2aea9e,'\x20'),'description':intUtil[_0x9d10('0x11')](_0x1470ec[_0x9d10('0x12')],_0x2aea9e,_0x9d10('0x13')),'tags':getTags(_0x1470ec[_0x9d10('0x14')],_0x9d10('0x15'))},getCustomFields(_0x1470ec[_0x9d10('0x16')],_0x2aea9e));_0x37626f[_0x9d10('0x17')]=_['mapValues'](_[_0x9d10('0x18')](_0x37626f[_0x9d10('0x17')],'id'),'value');return request({'uri':util[_0x9d10('0x19')](_0x9d10('0x1a'),_0x45d47a[_0x9d10('0x1b')]),'method':_0x9d10('0x1c'),'body':_0x37626f})[_0x9d10('0x1d')](function(_0xf5c277){logger[_0x9d10('0xd')](_0x9d10('0x1e'));return _0xf5c277;});}function getUser(_0x495eea,_0x87c509){if(intUtil[_0x9d10('0x1f')](_0x87c509)){return request({'uri':util[_0x9d10('0x19')]('%s/api/v2/agents',_0x495eea[_0x9d10('0x1b')]),'qs':{'email':_0x87c509}})[_0x9d10('0x1d')](function(_0x56cdb7){if(_0x56cdb7[_0x9d10('0x20')]){logger['info'](_0x9d10('0x21'));return _['find'](_0x56cdb7,function(_0xf29d31){return _0xf29d31['contact']['email']===_0x87c509;});}else{logger[_0x9d10('0xd')](_0x9d10('0x22'));return request({'uri':util[_0x9d10('0x19')](_0x9d10('0x23'),_0x495eea[_0x9d10('0x1b')])})['then'](function(_0x4ad4df){logger[_0x9d10('0xd')](_0x9d10('0x24'));return _0x4ad4df;});}});}else{logger['info'](_0x9d10('0x25'));return request({'uri':util['format'](_0x9d10('0x23'),_0x495eea[_0x9d10('0x1b')])})[_0x9d10('0x1d')](function(_0xf2a02){logger['info'](_0x9d10('0x24'));return _0xf2a02;});}}function getEndUser(_0xe60df0,_0x31408b,_0x6ea5e1){logger['info'](_0x9d10('0x26'),_0x6ea5e1);return request({'uri':util['format'](_0x9d10('0x27'),_0xe60df0[_0x9d10('0x1b')]),'qs':{'phone':_0x6ea5e1}})[_0x9d10('0x1d')](function(_0x1651ce){if(_0x1651ce[_0x9d10('0x20')]){logger[_0x9d10('0xd')](_0x9d10('0x28'));return _[_0x9d10('0x29')](_0x1651ce,{'phone':_0x6ea5e1});}else{logger['info']('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x9d10('0x19')](_0x9d10('0x27'),_0xe60df0[_0x9d10('0x1b')]),'method':_0x9d10('0x1c'),'body':{'name':_0x31408b,'phone':_0x6ea5e1}})[_0x9d10('0x1d')](function(_0x544c82){logger[_0x9d10('0xd')]('Enduser\x20created.');return _0x544c82;});}});}function getAuth(_0x21d345){return util[_0x9d10('0x19')](_0x9d10('0x2a'),new Buffer(_0x21d345[_0x9d10('0x2b')]+':X')[_0x9d10('0x2c')](_0x9d10('0x2d')));}function request(_0x248f18){logger[_0x9d10('0x2e')]('[HTTP]',JSON[_0x9d10('0x2f')](_0x248f18));return rp(_[_0x9d10('0x30')](_0x248f18,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x2f901f,_0x1f60de){var _0x4d2b61=[];if(_0x2f901f&&_0x2f901f[_0x9d10('0x20')]>0x0){_0x4d2b61=_[_0x9d10('0x31')](_0x2f901f,_0x1f60de);}return _0x4d2b61;}function getCustomFields(_0x3bb445,_0x5667bf){var _0x285a77=[];var _0x465060={'custom_fields':[]};if(_0x3bb445[_0x9d10('0x20')]>0x0){_[_0x9d10('0x32')](_0x3bb445,function(_0x29f2fb){if(_0x29f2fb[_0x9d10('0x33')]===_0x9d10('0x34')&&_0x29f2fb['nameField']&&!_0x29f2fb[_0x9d10('0x35')]){_0x465060[_0x29f2fb['nameField'][_0x9d10('0x36')]()]=_0x29f2fb[_0x9d10('0x37')][_0x9d10('0x2c')]();}else if(_0x29f2fb[_0x9d10('0x33')]===_0x9d10('0x34')&&_0x29f2fb[_0x9d10('0x38')]&&_0x29f2fb['customField']){_0x465060[_0x9d10('0x17')][_0x9d10('0x39')]({'id':_0x29f2fb[_0x9d10('0x38')],'value':_0x29f2fb[_0x9d10('0x37')][_0x9d10('0x2c')]()});}else if(_0x29f2fb[_0x9d10('0x33')]===_0x9d10('0x3a')&&_0x29f2fb[_0x9d10('0x3b')]&&_0x29f2fb[_0x9d10('0x38')]&&_0x29f2fb[_0x9d10('0x35')]){_0x5667bf[_0x29f2fb['variableName']]&&_0x465060[_0x9d10('0x17')]['push']({'id':_0x29f2fb[_0x9d10('0x38')],'value':_0x5667bf[_0x29f2fb[_0x9d10('0x3b')]][_0x9d10('0x2c')]()});}else if(_0x29f2fb[_0x9d10('0x33')]==='customVariable'&&_0x29f2fb[_0x9d10('0x3c')]&&_0x29f2fb[_0x9d10('0x3c')][_0x9d10('0x15')]&&_0x29f2fb['idField']&&_0x29f2fb[_0x9d10('0x35')]){_0x5667bf[_0x29f2fb[_0x9d10('0x3c')][_0x9d10('0x15')][_0x9d10('0x36')]()]&&_0x465060[_0x9d10('0x17')][_0x9d10('0x39')]({'id':_0x29f2fb['idField'],'value':_0x5667bf[_0x29f2fb['Variable']['name'][_0x9d10('0x36')]()][_0x9d10('0x2c')]()});}});}return _0x465060;}exports[_0x9d10('0x3d')]=function(_0x6d2a69,_0x154d72,_0x1a5e8c,_0x47a3be,_0x373b41,_0x3202dd){var _0x99c98a,_0x5ce3fc;_0x3202dd[_0x9d10('0x1b')]=intUtil[_0x9d10('0x3e')](_0x3202dd[_0x9d10('0x1b')]);_0x3202dd[_0x9d10('0x3f')]=intUtil['stripTrailingSlash'](_0x3202dd[_0x9d10('0x3f')]);if(_0x373b41&&_0x373b41[_0x9d10('0x40')]){logger[_0x9d10('0xd')](_0x9d10('0x41'),_0x9d10('0x42'));_0x154d72[_0x9d10('0x43')]=util[_0x9d10('0x19')](_0x9d10('0x44'),_0x3202dd[_0x9d10('0x3f')],_0x154d72[_0x9d10('0x45')],md5(_0x154d72[_0x9d10('0x45')]));}else{_0x154d72[_0x9d10('0x43')]='';}headers[_0x9d10('0x46')]=getAuth(_0x3202dd);return getUser(_0x3202dd,_0x47a3be[_0x9d10('0x47')])[_0x9d10('0x1d')](function(_0x944ee5){_0x99c98a=_0x944ee5;logger[_0x9d10('0xd')]('The\x20User\x20ID\x20is:',_0x99c98a['id']);return getEndUser(_0x3202dd,_0x154d72['calleridname'],_0x154d72[_0x9d10('0x48')]);})[_0x9d10('0x1d')](function(_0x4f55b7){_0x5ce3fc=_0x4f55b7;logger[_0x9d10('0xd')](_0x9d10('0x49'),_0x5ce3fc['id']);return getTicket(_0x3202dd,_0x99c98a,_0x5ce3fc,_0x1a5e8c,_0x154d72);})[_0x9d10('0x1d')](function(_0x759df7){if(_0x759df7&&_0x759df7['id']){logger['info'](_0x9d10('0x1e'));logger[_0x9d10('0xd')](_0x9d10('0x4a'),_0x759df7['id']);logger[_0x9d10('0xd')](_0x9d10('0x41'),_0x9d10('0x4b'));emit(util[_0x9d10('0x19')]('user:%s',_0x47a3be[_0x9d10('0x15')]),_0x9d10('0x4c'),{'uri':util['format'](_0x9d10('0x4d'),_0x3202dd['remoteUri'],_0x759df7['id'])});}})[_0x9d10('0x4e')](function(_0x5632f1){logger[_0x9d10('0x4f')](_0x9d10('0x41'),JSON[_0x9d10('0x2f')](_0x5632f1));});};exports['outbound']=function(_0xb17c66,_0xf4ba5c,_0x3d9690,_0x288474,_0x396714,_0x27e149,_0x64c46c){var _0x36c9ee,_0x474851;_0x27e149[_0x9d10('0x1b')]=intUtil[_0x9d10('0x3e')](_0x27e149[_0x9d10('0x1b')]);_0x27e149[_0x9d10('0x3f')]=intUtil[_0x9d10('0x3e')](_0x27e149[_0x9d10('0x3f')]);if(_0x64c46c&&_0x64c46c[_0x9d10('0x50')]&&_0x64c46c['recordingFormat']!=='none'){logger['info'](_0x9d10('0x51'),_0x9d10('0x42'));_0xf4ba5c[_0x9d10('0x43')]=util[_0x9d10('0x19')](_0x9d10('0x44'),_0x27e149[_0x9d10('0x3f')],_0xf4ba5c[_0x9d10('0x45')],md5(_0xf4ba5c[_0x9d10('0x45')]));}headers['Authorization']=getAuth(_0x27e149);return getUser(_0x27e149,_0x288474['email'])['then'](function(_0x3743d7){_0x36c9ee=_0x3743d7;logger[_0x9d10('0xd')](_0x9d10('0x52'),_0x36c9ee['id']);return getEndUser(_0x27e149,_0xf4ba5c['destcalleridname'],_0xf4ba5c[_0x9d10('0x53')]);})[_0x9d10('0x1d')](function(_0x2ec346){_0x474851=_0x2ec346;logger[_0x9d10('0xd')]('The\x20Enduser\x20ID\x20is:',_0x474851['id']);return getTicket(_0x27e149,_0x36c9ee,_0x474851,_0x3d9690,_0xf4ba5c);})[_0x9d10('0x1d')](function(_0xf935e9){if(_0xf935e9&&_0xf935e9['id']){logger[_0x9d10('0xd')](_0x9d10('0x1e'));logger[_0x9d10('0xd')](_0x9d10('0x4a'),_0xf935e9['id']);logger['info'](_0x9d10('0x51'),_0x9d10('0x4b'));emit(util[_0x9d10('0x19')](_0x9d10('0x54'),_0x288474[_0x9d10('0x15')]),_0x9d10('0x4c'),{'uri':util[_0x9d10('0x19')](_0x9d10('0x4d'),_0x27e149[_0x9d10('0x1b')],_0xf935e9['id'])});}})[_0x9d10('0x4e')](function(_0x57696d){logger[_0x9d10('0x4f')]('[OUTBOUND]',JSON[_0x9d10('0x2f')](_0x57696d));});};exports['abandoned']=function(_0x13402d,_0x4b655b,_0x529eb3,_0x7b453d,_0x150c36,_0x315703){var _0x4086ae,_0x5aec85;_0x315703['remoteUri']=intUtil[_0x9d10('0x3e')](_0x315703[_0x9d10('0x1b')]);_0x315703[_0x9d10('0x3f')]=intUtil['stripTrailingSlash'](_0x315703[_0x9d10('0x3f')]);if(_0x150c36&&_0x150c36[_0x9d10('0x40')]){logger[_0x9d10('0xd')](_0x9d10('0x55'),_0x9d10('0x42'));_0x4b655b[_0x9d10('0x43')]=util[_0x9d10('0x19')](_0x9d10('0x44'),_0x315703[_0x9d10('0x3f')],_0x4b655b[_0x9d10('0x45')],md5(_0x4b655b[_0x9d10('0x45')]));}else{_0x4b655b[_0x9d10('0x43')]='';}headers['Authorization']=getAuth(_0x315703);return getUser(_0x315703,'')[_0x9d10('0x1d')](function(_0x54aa90){_0x4086ae=_0x54aa90;logger[_0x9d10('0xd')](_0x9d10('0x52'),_0x4086ae['id']);return getEndUser(_0x315703,_0x4b655b[_0x9d10('0x10')],_0x4b655b[_0x9d10('0x48')]);})[_0x9d10('0x1d')](function(_0x367601){_0x5aec85=_0x367601;logger[_0x9d10('0xd')]('The\x20Enduser\x20ID\x20is:',_0x5aec85['id']);return getTicket(_0x315703,_0x4086ae,_0x5aec85,_0x529eb3,_0x4b655b);})['then'](function(_0x21b42f){if(_0x21b42f){logger[_0x9d10('0xd')](_0x9d10('0x1e'));logger[_0x9d10('0xd')](_0x9d10('0x4a'),_0x21b42f['id']);}})[_0x9d10('0x4e')](function(_0x3cd9fd){logger[_0x9d10('0x4f')](_0x9d10('0x55'),JSON[_0x9d10('0x2f')](_0x3cd9fd));});};
\ No newline at end of file
index ce439a0..4ee319d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb471=['lodash','./zendesk','./salesforce','./sugarcrm','./zoho','./vtiger','./servicenow','./dynamics365','zendesk','salesforce','vtiger','servicenow','exec','includes','data1','toLowerCase','data2','data3','queue','routeId','outbound','abandoned','sugarcrm','freshdesk','zoho','desk','dynamics365','log','unknown\x20integration','[EXEC]','format','%s\x20configuration\x20#%s\x20not\x20found','../../../../config/logger','error','%s\x20account\x20#%s\x20not\x20found'];(function(_0x3aa5ff,_0x26aac4){var _0x371baf=function(_0x2200ac){while(--_0x2200ac){_0x3aa5ff['push'](_0x3aa5ff['shift']());}};_0x371baf(++_0x26aac4);}(_0xb471,0x69));var _0x1b47=function(_0x40b0e0,_0x518af9){_0x40b0e0=_0x40b0e0-0x0;var _0x6929da=_0xb471[_0x40b0e0];return _0x6929da;};'use strict';var _=require(_0x1b47('0x0'));var util=require('util');var zendesk=require(_0x1b47('0x1'));var salesforce=require(_0x1b47('0x2'));var sugarcrm=require(_0x1b47('0x3'));var freshdesk=require('./freshdesk');var zoho=require(_0x1b47('0x4'));var desk=require('./desk');var vtiger=require(_0x1b47('0x5'));var servicenow=require(_0x1b47('0x6'));var dynamics365=require(_0x1b47('0x7'));var integrations=[_0x1b47('0x8'),_0x1b47('0x9'),'sugarcrm','freshdesk','zoho','desk',_0x1b47('0xa'),_0x1b47('0xb'),'dynamics365'];exports[_0x1b47('0xc')]=function(_0x60f85c,_0x5a994b,_0xb2e2a4,_0x9cf275,_0x8af37e,_0x99fc0f){if(_0xb2e2a4){if(_[_0x1b47('0xd')](integrations,_0x60f85c[_0x1b47('0xe')]['toLowerCase']())){try{var _0x1876d0=null;var _0x594e0a='';var _0x770687=_0xb2e2a4[_0x60f85c[_0x1b47('0xe')][_0x1b47('0xf')]()];if(_0x770687){var _0x2ce3e1=_0x770687[_0x60f85c[_0x1b47('0x10')]];if(_0x2ce3e1){var _0x5f0499=_['find'](_0x2ce3e1['Configurations'],{'id':parseInt(_0x60f85c[_0x1b47('0x11')],0xa)});if(_0x5f0499){if(_0x9cf275){if(_0x8af37e&&_0x5a994b['queue']){_0x594e0a=_0x1b47('0x12');}else if(_0x5a994b[_0x1b47('0x13')]){_0x594e0a=_0x1b47('0x14');}else{console['log']('EVENT\x20UNKNOWN',_0x5a994b);}}else{_0x594e0a=_0x1b47('0x15');}switch(_0x60f85c['data1']['toLowerCase']()){case _0x1b47('0x8'):zendesk[_0x594e0a](_0x60f85c,_0x5a994b,_0x5f0499,_0x9cf275,_0x8af37e,_0x2ce3e1,_0x99fc0f);break;case'salesforce':salesforce[_0x594e0a](_0x60f85c,_0x5a994b,_0x5f0499,_0x9cf275,_0x8af37e,_0x2ce3e1,_0x99fc0f);break;case _0x1b47('0x16'):sugarcrm[_0x594e0a](_0x60f85c,_0x5a994b,_0x5f0499,_0x9cf275,_0x8af37e,_0x2ce3e1,_0x99fc0f);break;case _0x1b47('0x17'):freshdesk[_0x594e0a](_0x60f85c,_0x5a994b,_0x5f0499,_0x9cf275,_0x8af37e,_0x2ce3e1,_0x99fc0f);break;case _0x1b47('0x18'):zoho[_0x594e0a](_0x60f85c,_0x5a994b,_0x5f0499,_0x9cf275,_0x8af37e,_0x2ce3e1,_0x99fc0f);break;case _0x1b47('0x19'):desk[_0x594e0a](_0x60f85c,_0x5a994b,_0x5f0499,_0x9cf275,_0x8af37e,_0x2ce3e1,_0x99fc0f);break;case _0x1b47('0xa'):vtiger[_0x594e0a](_0x60f85c,_0x5a994b,_0x5f0499,_0x9cf275,_0x8af37e,_0x2ce3e1,_0x99fc0f);break;case _0x1b47('0xb'):servicenow['cs'](_0x60f85c,_0x5a994b,_0x5f0499,_0x9cf275,_0x8af37e,_0x2ce3e1,_0x99fc0f,_0x594e0a);break;case _0x1b47('0x1a'):dynamics365['cs'](_0x60f85c,_0x5a994b,_0x5f0499,_0x9cf275,_0x8af37e,_0x2ce3e1,_0x99fc0f,_0x594e0a);break;default:console[_0x1b47('0x1b')](_0x1b47('0x1c'));}}else{_0x1876d0=require('../../../../config/logger')(_0x60f85c[_0x1b47('0xe')][_0x1b47('0xf')]());_0x1876d0['error'](_0x1b47('0x1d'),util[_0x1b47('0x1e')](_0x1b47('0x1f'),_0x60f85c[_0x1b47('0xe')]['toLowerCase'](),_0x60f85c[_0x1b47('0x11')]));}}else{_0x1876d0=require(_0x1b47('0x20'))(_0x60f85c[_0x1b47('0xe')][_0x1b47('0xf')]());_0x1876d0[_0x1b47('0x21')]('[EXEC]',util[_0x1b47('0x1e')](_0x1b47('0x22'),_0x60f85c['data1'][_0x1b47('0xf')](),_0x60f85c['data2']));}}else{}}catch(_0x2eb594){console[_0x1b47('0x21')](_0x2eb594);}}}};
\ No newline at end of file
+var _0xb29f=['data3','format','%s\x20account\x20#%s\x20not\x20found','./salesforce','./freshdesk','./zoho','./desk','./vtiger','./servicenow','./dynamics365','zendesk','salesforce','sugarcrm','desk','vtiger','dynamics365','exec','data1','data2','find','Configurations','queue','routeId','outbound','abandoned','toLowerCase','freshdesk','zoho','servicenow','log','unknown\x20integration','../../../../config/logger','error','[EXEC]','%s\x20configuration\x20#%s\x20not\x20found'];(function(_0x3f01ca,_0x4d9983){var _0x2ed34f=function(_0x372b19){while(--_0x372b19){_0x3f01ca['push'](_0x3f01ca['shift']());}};_0x2ed34f(++_0x4d9983);}(_0xb29f,0x13e));var _0xfb29=function(_0x193025,_0x218942){_0x193025=_0x193025-0x0;var _0x28edda=_0xb29f[_0x193025];return _0x28edda;};'use strict';var _=require('lodash');var util=require('util');var zendesk=require('./zendesk');var salesforce=require(_0xfb29('0x0'));var sugarcrm=require('./sugarcrm');var freshdesk=require(_0xfb29('0x1'));var zoho=require(_0xfb29('0x2'));var desk=require(_0xfb29('0x3'));var vtiger=require(_0xfb29('0x4'));var servicenow=require(_0xfb29('0x5'));var dynamics365=require(_0xfb29('0x6'));var integrations=[_0xfb29('0x7'),_0xfb29('0x8'),_0xfb29('0x9'),'freshdesk','zoho',_0xfb29('0xa'),_0xfb29('0xb'),'servicenow',_0xfb29('0xc')];exports[_0xfb29('0xd')]=function(_0x39882f,_0x590577,_0x1f4f97,_0x5c9999,_0x5c138a,_0x799a96){if(_0x1f4f97){if(_['includes'](integrations,_0x39882f[_0xfb29('0xe')]['toLowerCase']())){try{var _0x5a90db=null;var _0x296cf0='';var _0x2a951f=_0x1f4f97[_0x39882f[_0xfb29('0xe')]['toLowerCase']()];if(_0x2a951f){var _0x5b7fda=_0x2a951f[_0x39882f[_0xfb29('0xf')]];if(_0x5b7fda){var _0xd6f9cf=_[_0xfb29('0x10')](_0x5b7fda[_0xfb29('0x11')],{'id':parseInt(_0x39882f['data3'],0xa)});if(_0xd6f9cf){if(_0x5c9999){if(_0x5c138a&&_0x590577[_0xfb29('0x12')]){_0x296cf0='queue';}else if(_0x590577[_0xfb29('0x13')]){_0x296cf0=_0xfb29('0x14');}else{console['log']('EVENT\x20UNKNOWN',_0x590577);}}else{_0x296cf0=_0xfb29('0x15');}switch(_0x39882f['data1'][_0xfb29('0x16')]()){case'zendesk':zendesk[_0x296cf0](_0x39882f,_0x590577,_0xd6f9cf,_0x5c9999,_0x5c138a,_0x5b7fda,_0x799a96);break;case _0xfb29('0x8'):salesforce[_0x296cf0](_0x39882f,_0x590577,_0xd6f9cf,_0x5c9999,_0x5c138a,_0x5b7fda,_0x799a96);break;case _0xfb29('0x9'):sugarcrm[_0x296cf0](_0x39882f,_0x590577,_0xd6f9cf,_0x5c9999,_0x5c138a,_0x5b7fda,_0x799a96);break;case _0xfb29('0x17'):freshdesk[_0x296cf0](_0x39882f,_0x590577,_0xd6f9cf,_0x5c9999,_0x5c138a,_0x5b7fda,_0x799a96);break;case _0xfb29('0x18'):zoho[_0x296cf0](_0x39882f,_0x590577,_0xd6f9cf,_0x5c9999,_0x5c138a,_0x5b7fda,_0x799a96);break;case _0xfb29('0xa'):desk[_0x296cf0](_0x39882f,_0x590577,_0xd6f9cf,_0x5c9999,_0x5c138a,_0x5b7fda,_0x799a96);break;case _0xfb29('0xb'):vtiger[_0x296cf0](_0x39882f,_0x590577,_0xd6f9cf,_0x5c9999,_0x5c138a,_0x5b7fda,_0x799a96);break;case _0xfb29('0x19'):servicenow['cs'](_0x39882f,_0x590577,_0xd6f9cf,_0x5c9999,_0x5c138a,_0x5b7fda,_0x799a96,_0x296cf0);break;case _0xfb29('0xc'):dynamics365['cs'](_0x39882f,_0x590577,_0xd6f9cf,_0x5c9999,_0x5c138a,_0x5b7fda,_0x799a96,_0x296cf0);break;default:console[_0xfb29('0x1a')](_0xfb29('0x1b'));}}else{_0x5a90db=require(_0xfb29('0x1c'))(_0x39882f['data1']['toLowerCase']());_0x5a90db[_0xfb29('0x1d')](_0xfb29('0x1e'),util['format'](_0xfb29('0x1f'),_0x39882f[_0xfb29('0xe')][_0xfb29('0x16')](),_0x39882f[_0xfb29('0x20')]));}}else{_0x5a90db=require('../../../../config/logger')(_0x39882f['data1'][_0xfb29('0x16')]());_0x5a90db[_0xfb29('0x1d')](_0xfb29('0x1e'),util[_0xfb29('0x21')](_0xfb29('0x22'),_0x39882f[_0xfb29('0xe')][_0xfb29('0x16')](),_0x39882f[_0xfb29('0xf')]));}}else{}}catch(_0x30c1d7){console[_0xfb29('0x1d')](_0x30c1d7);}}}};
\ No newline at end of file
index 016e096..020f32b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe706=['variable','variableName','customVariable','Variable','name','toLowerCase','toString','password','concat','securityToken','Connection','remoteUri','https://login.salesforce.com','clientId','clientSecret','login','username','queue','serverUrl','stripTrailingSlash','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','email','calleridname','Fields','[QUEUE]\x20Ticket\x20%s\x20created','integrationTab','format','user:%s','trigger:salesforce:display','trigger:browser:url','%s/%s/e','instanceUrl','error','[QUEUE]\x20Salesforce\x20account\x20type\x20not\x20recognized.','catch','stringify','outbound','recordingFormat','[OUTBOUND]','[OUTBOUND]\x20Ticket\x20%s\x20created.','[OUTBOUND]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','newTab','Salesforce\x20account\x20type\x20not\x20recognized','[ABANDONED]','calleridnum','[ABANDONED]\x20Ticket\x20%s\x20created.','[ABANDONED]\x20Integration\x20account\x20type\x20%s.','lodash','request-promise','moment','md5','jsforce','util','ioredis','./util','../../../../config/environment','../../../../config/logger','salesforce','redis','defaults','localhost','socket.io-emitter','emit','ticketType','Task','assign','utc','getString','Subjects','Case','ContactId','create','validateEmail','User','find','execute','then','length','Email','Agent\x20%s\x20found.','resolve','Name','Agent\x20%s\x20not\x20found.\x20Switch\x20to\x20the\x20admin\x20account.','identity','display_name','info','Searching\x20enduser\x20with\x20phone\x20%s.\x20Serching\x20method\x20used\x20%s.','moduleSearch','contact_lead','sobject','Contact','contact','Lead','Phone','Enduser\x20with\x20phone\x20%s\x20found.','Enduser\x20with\x20phone\x20%s\x20not\x20found.','Caller\x20-\x20%s','moduleCreate','Enduser\x20with\x20phone\x20%s.\x20Creating\x20method\x20used\x20%s.','lead','Company','upperFirst','type','string','idField','content'];(function(_0x40f4cc,_0x432f55){var _0x458315=function(_0xcfda5e){while(--_0xcfda5e){_0x40f4cc['push'](_0x40f4cc['shift']());}};_0x458315(++_0x432f55);}(_0xe706,0xa3));var _0x6e70=function(_0x37f053,_0x4b2ad0){_0x37f053=_0x37f053-0x0;var _0x78f6a0=_0xe706[_0x37f053];return _0x78f6a0;};'use strict';var _=require(_0x6e70('0x0'));var rp=require(_0x6e70('0x1'));var moment=require(_0x6e70('0x2'));var BPromise=require('bluebird');var md5=require(_0x6e70('0x3'));var jsforce=require(_0x6e70('0x4'));var util=require(_0x6e70('0x5'));var Redis=require(_0x6e70('0x6'));var intUtil=require(_0x6e70('0x7'));var config=require(_0x6e70('0x8'));var logger=require(_0x6e70('0x9'))(_0x6e70('0xa'));config[_0x6e70('0xb')]=_[_0x6e70('0xc')](config[_0x6e70('0xb')],{'host':_0x6e70('0xd'),'port':0x18eb});var io=require(_0x6e70('0xe'))(new Redis(config[_0x6e70('0xb')]));function emit(_0x3c4843,_0x449b48,_0x954545){io['to'](_0x3c4843)[_0x6e70('0xf')](_0x449b48,_0x954545);}function getTicket(_0x100eb7,_0x463853,_0x743eb5,_0x3f474a,_0x37b3e0,_0x4600f9,_0x5b3d07,_0x47f6b2){var _0x3594c1={};if(_0x3f474a[_0x6e70('0x10')]===_0x6e70('0x11')){_0x3594c1=Object[_0x6e70('0x12')]({},{'OwnerId':_0x463853['id'],'ActivityDate':moment[_0x6e70('0x13')](),'IsReminderSet':![],'IsRecurrence':![],'Subject':intUtil[_0x6e70('0x14')](_0x3f474a[_0x6e70('0x15')],_0x37b3e0,'\x20'),'Description':intUtil[_0x6e70('0x14')](_0x3f474a['Descriptions'],_0x37b3e0,'\x0a')},getCustomFields(_0x4600f9,_0x37b3e0));if(_0x743eb5){_0x3594c1['WhoId']=_0x743eb5['id'];}}else if(_0x3f474a['ticketType']===_0x6e70('0x16')){_0x3594c1=Object['assign']({},{'OwnerId':_0x463853['id'],'Subject':intUtil['getString'](_0x3f474a[_0x6e70('0x15')],_0x37b3e0,'\x20'),'Description':intUtil[_0x6e70('0x14')](_0x3f474a['Descriptions'],_0x37b3e0,'\x0a')},getCustomFields(_0x4600f9,_0x37b3e0));if(_0x743eb5){_0x3594c1[_0x6e70('0x17')]=_0x743eb5['id'];}}return _0x5b3d07['sobject'](_0x3f474a[_0x6e70('0x10')])[_0x6e70('0x18')](_0x3594c1);}function getUser(_0x4ca554,_0x49029f,_0x3bd572){if(!_['isNil'](_0x49029f)&&intUtil[_0x6e70('0x19')](_0x49029f)){var _0x173afe={'Email':_0x49029f};var _0x53acdc={'Id':!![],'Username':!![],'Name':!![],'Email':!![]};return _0x3bd572['sobject'](_0x6e70('0x1a'))[_0x6e70('0x1b')](_0x173afe,_0x53acdc)[_0x6e70('0x1c')]()[_0x6e70('0x1d')](function(_0x3af484){if(_0x3af484[_0x6e70('0x1e')]){var _0x1b2453=_[_0x6e70('0x1b')](_0x3af484,function(_0x29326f){return _0x29326f[_0x6e70('0x1f')]===_0x49029f;});if(_0x1b2453){logger['info'](_0x6e70('0x20'),_0x49029f);return BPromise[_0x6e70('0x21')]({'id':_0x1b2453['Id'],'name':_0x1b2453[_0x6e70('0x22')]});}}else{logger['info'](_0x6e70('0x23'),_0x49029f);return _0x3bd572[_0x6e70('0x24')]()[_0x6e70('0x1d')](function(_0x50da2c){return BPromise[_0x6e70('0x21')]({'id':_0x50da2c['user_id'],'name':_0x50da2c['display_name']});});}});}else{logger['info'](_0x6e70('0x23'),_0x49029f);return _0x3bd572[_0x6e70('0x24')]()['then'](function(_0x3ecdf1){return BPromise[_0x6e70('0x21')]({'id':_0x3ecdf1['user_id'],'name':_0x3ecdf1[_0x6e70('0x25')]});});}}function getEndUser(_0x67fb43,_0x2bb231,_0x4a67ac,_0x54a5fe,_0x2c4d37){var _0x3af17f={'Phone':_0x54a5fe};var _0x83c836={'Id':!![],'Name':!![],'Phone':!![]};return BPromise[_0x6e70('0x21')]()[_0x6e70('0x1d')](function(){if(_0x2bb231['ticketType']===_0x6e70('0x11')){logger[_0x6e70('0x26')](_0x6e70('0x27'),_0x54a5fe,_0x2bb231[_0x6e70('0x28')]);switch(_0x2bb231[_0x6e70('0x28')]){case _0x6e70('0x29'):return _0x2c4d37[_0x6e70('0x2a')](_0x6e70('0x2b'))[_0x6e70('0x1b')](_0x3af17f,_0x83c836)[_0x6e70('0x1c')]()['then'](function(_0x1b27d8){if(_0x1b27d8&&_0x1b27d8['length']){return _0x1b27d8;}else{return _0x2c4d37[_0x6e70('0x2a')]('Lead')[_0x6e70('0x1b')](_0x3af17f,_0x83c836);}});case _0x6e70('0x2c'):return _0x2c4d37[_0x6e70('0x2a')]('Contact')[_0x6e70('0x1b')](_0x3af17f,_0x83c836)[_0x6e70('0x1c')]();case'lead':return _0x2c4d37[_0x6e70('0x2a')](_0x6e70('0x2d'))['find'](_0x3af17f,_0x83c836);default:return null;}}else if(_0x2bb231[_0x6e70('0x10')]===_0x6e70('0x16')){logger[_0x6e70('0x26')](_0x6e70('0x27'),_0x54a5fe,_0x6e70('0x2c'));return _0x2c4d37[_0x6e70('0x2a')](_0x6e70('0x2b'))[_0x6e70('0x1b')](_0x3af17f,_0x83c836)[_0x6e70('0x1c')]();}})[_0x6e70('0x1d')](function(_0x4d32d8){if(_0x4d32d8&&_0x4d32d8[_0x6e70('0x1e')]){var _0x4795a0=_[_0x6e70('0x1b')](_0x4d32d8,function(_0x3222a2){return _0x3222a2[_0x6e70('0x2e')]===_0x54a5fe;});if(_0x4795a0){return BPromise[_0x6e70('0x21')]({'id':_0x4795a0['Id'],'name':_0x4795a0[_0x6e70('0x22')],'phone':_0x4795a0[_0x6e70('0x2e')]});}}})[_0x6e70('0x1d')](function(_0xdd0bee){if(_0xdd0bee){logger[_0x6e70('0x26')](_0x6e70('0x2f'),_0x54a5fe);return BPromise[_0x6e70('0x21')](_0xdd0bee);}else{logger[_0x6e70('0x26')](_0x6e70('0x30'),_0x54a5fe);var _0x501b53={'LastName':_0x4a67ac!=='<unknown>'?_0x4a67ac:util['format'](_0x6e70('0x31'),_0x54a5fe),'Phone':_0x54a5fe};if(_0x2bb231[_0x6e70('0x32')]){if(_0x2bb231[_0x6e70('0x32')]===_0x6e70('0x2c')){logger[_0x6e70('0x26')](_0x6e70('0x33'),_0x54a5fe,_0x2bb231['moduleCreate']);}else if(_0x2bb231[_0x6e70('0x32')]===_0x6e70('0x34')&&_0x2bb231[_0x6e70('0x10')]===_0x6e70('0x11')){logger[_0x6e70('0x26')](_0x6e70('0x33'),_0x54a5fe,_0x2bb231[_0x6e70('0x32')]);_0x501b53[_0x6e70('0x35')]='No\x20Company';}else{return null;}}return _0x2c4d37[_0x6e70('0x2a')](_[_0x6e70('0x36')](_0x2bb231[_0x6e70('0x32')]))[_0x6e70('0x18')](_0x501b53);}});}function getCustomFields(_0x201da9,_0x1de947){var _0x21b0e7={};if(_0x201da9['length']>0x0){_['forEach'](_0x201da9,function(_0x5ae898){if(_0x5ae898[_0x6e70('0x37')]===_0x6e70('0x38')&&_0x5ae898[_0x6e70('0x39')]){_0x21b0e7[_0x5ae898[_0x6e70('0x39')]]=_0x5ae898[_0x6e70('0x3a')]['toString']();}else if(_0x5ae898[_0x6e70('0x37')]===_0x6e70('0x3b')&&_0x5ae898[_0x6e70('0x3c')]&&_0x5ae898['idField']){_0x1de947[_0x5ae898['variableName']]&&(_0x21b0e7[_0x5ae898['idField']]=_0x1de947[_0x5ae898[_0x6e70('0x3c')]]['toString']());}else if(_0x5ae898[_0x6e70('0x37')]===_0x6e70('0x3d')&&_0x5ae898[_0x6e70('0x3e')]&&_0x5ae898[_0x6e70('0x3e')]['name']&&_0x5ae898[_0x6e70('0x39')]){_0x1de947[_0x5ae898['Variable'][_0x6e70('0x3f')][_0x6e70('0x40')]()]&&(_0x21b0e7[_0x5ae898[_0x6e70('0x39')]]=_0x1de947[_0x5ae898[_0x6e70('0x3e')]['name'][_0x6e70('0x40')]()][_0x6e70('0x41')]());}});}return _0x21b0e7;}function getConnection(_0x3d39c3){var _0xac87d6=_0x3d39c3[_0x6e70('0x42')][_0x6e70('0x43')](_0x3d39c3[_0x6e70('0x44')]);var _0x552e7e=new jsforce[(_0x6e70('0x45'))]({'oauth2':{'loginUrl':_0x3d39c3[_0x6e70('0x46')]||_0x6e70('0x47'),'clientId':_0x3d39c3[_0x6e70('0x48')],'clientSecret':_0x3d39c3[_0x6e70('0x49')]}});return _0x552e7e[_0x6e70('0x4a')](_0x3d39c3[_0x6e70('0x4b')],_0xac87d6)['then'](function(){logger[_0x6e70('0x26')]('Connection\x20established.');return _0x552e7e;});}exports[_0x6e70('0x4c')]=function(_0x3836e4,_0x4b351e,_0x53efc3,_0x333abd,_0x25a208,_0x18fa40){var _0x587f04,_0x4af9b1,_0x238ebb,_0x11ac3d;_0x18fa40[_0x6e70('0x4d')]=intUtil[_0x6e70('0x4e')](_0x18fa40[_0x6e70('0x4d')]);_0x18fa40[_0x6e70('0x46')]=intUtil['stripTrailingSlash'](_0x18fa40[_0x6e70('0x46')]);if(_0x25a208&&_0x25a208[_0x6e70('0x4f')]){logger[_0x6e70('0x26')](_0x6e70('0x50'),_0x6e70('0x51'));_0x4b351e['recordingURL']=util['format'](_0x6e70('0x52'),_0x18fa40[_0x6e70('0x4d')],_0x4b351e[_0x6e70('0x53')],md5(_0x4b351e[_0x6e70('0x53')]));}else{_0x4b351e[_0x6e70('0x54')]='';}return getConnection(_0x18fa40)['then'](function(_0x41bd0b){_0x11ac3d=_0x41bd0b;return getUser(_0x18fa40,_0x333abd[_0x6e70('0x55')],_0x11ac3d);})[_0x6e70('0x1d')](function(_0x23ebfb){_0x587f04=_0x23ebfb;return getEndUser(_0x18fa40,_0x53efc3,_0x4b351e[_0x6e70('0x56')],_0x4b351e['calleridnum'],_0x11ac3d);})[_0x6e70('0x1d')](function(_0x1dd242){_0x4af9b1=_0x1dd242;return getTicket(_0x18fa40,_0x587f04,_0x4af9b1,_0x53efc3,_0x4b351e,_0x53efc3[_0x6e70('0x57')],_0x11ac3d,_0x6e70('0x4c'));})[_0x6e70('0x1d')](function(_0x3fd03d){_0x238ebb=_0x3fd03d;logger['info'](_0x6e70('0x58'),_0x238ebb['id']);logger[_0x6e70('0x26')]('[QUEUE]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.',_0x238ebb['id'],_0x333abd[_0x6e70('0x3f')],_0x18fa40[_0x6e70('0x37')]);switch(_0x18fa40['type']){case _0x6e70('0x59'):emit(util[_0x6e70('0x5a')](_0x6e70('0x5b'),_0x333abd[_0x6e70('0x3f')]),_0x6e70('0x5c'),{'recordId':_0x238ebb['id']});break;case'newTab':emit(util[_0x6e70('0x5a')](_0x6e70('0x5b'),_0x333abd[_0x6e70('0x3f')]),_0x6e70('0x5d'),{'uri':util[_0x6e70('0x5a')](_0x6e70('0x5e'),_0x11ac3d[_0x6e70('0x5f')],_0x238ebb['id'])});break;default:logger[_0x6e70('0x60')](_0x6e70('0x61'));}})[_0x6e70('0x62')](function(_0x13dd17){logger[_0x6e70('0x60')](_0x6e70('0x50'),JSON[_0x6e70('0x63')](_0x13dd17));});};exports[_0x6e70('0x64')]=function(_0x2240a1,_0x324fa6,_0x4329a6,_0x2a8627,_0x1c7dca,_0x4c6aab,_0x28898a){var _0x4434dd,_0x180a13,_0xeeab6e,_0x36757e;_0x4c6aab[_0x6e70('0x4d')]=intUtil['stripTrailingSlash'](_0x4c6aab[_0x6e70('0x4d')]);_0x4c6aab[_0x6e70('0x46')]=intUtil['stripTrailingSlash'](_0x4c6aab[_0x6e70('0x46')]);if(_0x28898a&&_0x28898a[_0x6e70('0x65')]&&_0x28898a[_0x6e70('0x65')]!=='none'){logger['info'](_0x6e70('0x66'),_0x6e70('0x51'));_0x324fa6[_0x6e70('0x54')]=util[_0x6e70('0x5a')](_0x6e70('0x52'),_0x4c6aab[_0x6e70('0x4d')],_0x324fa6[_0x6e70('0x53')],md5(_0x324fa6['uniqueid']));}return getConnection(_0x4c6aab)['then'](function(_0x2c8dc6){_0x36757e=_0x2c8dc6;return getUser(_0x4c6aab,_0x2a8627[_0x6e70('0x55')],_0x36757e);})[_0x6e70('0x1d')](function(_0x2ad395){_0x4434dd=_0x2ad395;return getEndUser(_0x4c6aab,_0x4329a6,_0x324fa6['destcalleridname'],_0x324fa6['destcalleridnum'],_0x36757e);})[_0x6e70('0x1d')](function(_0x4e5545){_0x180a13=_0x4e5545;return getTicket(_0x4c6aab,_0x4434dd,_0x180a13,_0x4329a6,_0x324fa6,_0x4329a6['Fields'],_0x36757e,'outbound');})[_0x6e70('0x1d')](function(_0x47fbed){_0xeeab6e=_0x47fbed;logger[_0x6e70('0x26')](_0x6e70('0x67'),_0xeeab6e['id']);logger[_0x6e70('0x26')](_0x6e70('0x68'),_0xeeab6e['id'],_0x2a8627[_0x6e70('0x3f')],_0x4c6aab[_0x6e70('0x37')]);switch(_0x4c6aab[_0x6e70('0x37')]){case _0x6e70('0x59'):emit(util['format'](_0x6e70('0x5b'),_0x2a8627[_0x6e70('0x3f')]),_0x6e70('0x5c'),{'recordId':_0xeeab6e['id']});break;case _0x6e70('0x69'):emit(util[_0x6e70('0x5a')]('user:%s',_0x2a8627['name']),'trigger:browser:url',{'uri':util[_0x6e70('0x5a')](_0x6e70('0x5e'),_0x36757e[_0x6e70('0x5f')],_0xeeab6e['id'])});break;default:logger['error']('[OUTBOUND]',_0x6e70('0x6a'));}})[_0x6e70('0x62')](function(_0x3c2830){logger[_0x6e70('0x60')](_0x6e70('0x66'),JSON[_0x6e70('0x63')](_0x3c2830));});};exports['abandoned']=function(_0x2d2855,_0x3f5896,_0x30d11b,_0x82a9a,_0x515c0c,_0xce964b){var _0x531097,_0x5b4046,_0x30487b,_0x3249a5;_0xce964b[_0x6e70('0x4d')]=intUtil[_0x6e70('0x4e')](_0xce964b[_0x6e70('0x4d')]);_0xce964b[_0x6e70('0x46')]=intUtil['stripTrailingSlash'](_0xce964b[_0x6e70('0x46')]);if(_0x515c0c&&_0x515c0c[_0x6e70('0x4f')]){logger[_0x6e70('0x26')](_0x6e70('0x6b'),_0x6e70('0x51'));_0x3f5896[_0x6e70('0x54')]=util[_0x6e70('0x5a')](_0x6e70('0x52'),_0xce964b[_0x6e70('0x4d')],_0x3f5896[_0x6e70('0x53')],md5(_0x3f5896['uniqueid']));}else{_0x3f5896[_0x6e70('0x54')]='';}return getConnection(_0xce964b)[_0x6e70('0x1d')](function(_0x577c3b){_0x3249a5=_0x577c3b;if(!_['isNil'](_0x82a9a)){return getUser(_0xce964b,_0x82a9a['name'],_0x3249a5);}else{return getUser(_0xce964b,null,_0x3249a5);}})[_0x6e70('0x1d')](function(_0x18ecf0){_0x531097=_0x18ecf0;return getEndUser(_0xce964b,_0x30d11b,_0x3f5896[_0x6e70('0x56')],_0x3f5896[_0x6e70('0x6c')],_0x3249a5);})[_0x6e70('0x1d')](function(_0x4ec29a){_0x5b4046=_0x4ec29a;return getTicket(_0xce964b,_0x531097,_0x5b4046,_0x30d11b,_0x3f5896,_0x30d11b['Fields'],_0x3249a5);})[_0x6e70('0x1d')](function(_0x241a21){_0x30487b=_0x241a21;logger['info'](_0x6e70('0x6d'),_0x30487b['id']);logger[_0x6e70('0x26')](_0x6e70('0x6e'),_0xce964b[_0x6e70('0x37')]);})[_0x6e70('0x62')](function(_0x44bf96){logger[_0x6e70('0x60')](_0x6e70('0x6b'),JSON[_0x6e70('0x63')](_0x44bf96));});};
\ No newline at end of file
+var _0x9c44=['username','Connection\x20established.','serverUrl','stripTrailingSlash','monitor_format','Recording\x20is\x20enabled!','format','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','email','calleridname','calleridnum','Fields','queue','[QUEUE]\x20Ticket\x20%s\x20created','user:%s','trigger:salesforce:display','newTab','trigger:browser:url','%s/%s/e','instanceUrl','error','[QUEUE]\x20Salesforce\x20account\x20type\x20not\x20recognized.','[QUEUE]','stringify','outbound','recordingFormat','none','[OUTBOUND]','destcalleridnum','[OUTBOUND]\x20Ticket\x20%s\x20created.','[OUTBOUND]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','Salesforce\x20account\x20type\x20not\x20recognized','catch','abandoned','isNil','[ABANDONED]\x20Ticket\x20%s\x20created.','[ABANDONED]\x20Integration\x20account\x20type\x20%s.','[ABANDONED]','moment','bluebird','md5','jsforce','util','ioredis','../../../../config/logger','redis','defaults','localhost','socket.io-emitter','emit','ticketType','Task','utc','getString','Descriptions','WhoId','Case','assign','Subjects','ContactId','sobject','create','find','then','length','Email','info','Agent\x20%s\x20found.','Agent\x20%s\x20not\x20found.\x20Switch\x20to\x20the\x20admin\x20account.','resolve','user_id','display_name','identity','Searching\x20enduser\x20with\x20phone\x20%s.\x20Serching\x20method\x20used\x20%s.','moduleSearch','contact_lead','Contact','execute','Lead','contact','lead','Phone','Name','Enduser\x20with\x20phone\x20%s\x20found.','Enduser\x20with\x20phone\x20%s\x20not\x20found.','<unknown>','Caller\x20-\x20%s','moduleCreate','Enduser\x20with\x20phone\x20%s.\x20Creating\x20method\x20used\x20%s.','Company','upperFirst','forEach','type','string','idField','content','variable','variableName','customVariable','Variable','name','toLowerCase','toString','concat','securityToken','Connection','remoteUri','clientId','clientSecret','login'];(function(_0x15d39e,_0x106434){var _0x2ac702=function(_0x177222){while(--_0x177222){_0x15d39e['push'](_0x15d39e['shift']());}};_0x2ac702(++_0x106434);}(_0x9c44,0x178));var _0x49c4=function(_0x5f09c5,_0x2bfca0){_0x5f09c5=_0x5f09c5-0x0;var _0x426ad9=_0x9c44[_0x5f09c5];return _0x426ad9;};'use strict';var _=require('lodash');var rp=require('request-promise');var moment=require(_0x49c4('0x0'));var BPromise=require(_0x49c4('0x1'));var md5=require(_0x49c4('0x2'));var jsforce=require(_0x49c4('0x3'));var util=require(_0x49c4('0x4'));var Redis=require(_0x49c4('0x5'));var intUtil=require('./util');var config=require('../../../../config/environment');var logger=require(_0x49c4('0x6'))('salesforce');config[_0x49c4('0x7')]=_[_0x49c4('0x8')](config[_0x49c4('0x7')],{'host':_0x49c4('0x9'),'port':0x18eb});var io=require(_0x49c4('0xa'))(new Redis(config['redis']));function emit(_0x11c586,_0x42e4f8,_0x1d13fb){io['to'](_0x11c586)[_0x49c4('0xb')](_0x42e4f8,_0x1d13fb);}function getTicket(_0x4c7d3a,_0x5ab4a3,_0x451ea6,_0x313e73,_0x58cad7,_0xb611a1,_0x459d09,_0x4adb3c){var _0x536d42={};if(_0x313e73[_0x49c4('0xc')]===_0x49c4('0xd')){_0x536d42=Object['assign']({},{'OwnerId':_0x5ab4a3['id'],'ActivityDate':moment[_0x49c4('0xe')](),'IsReminderSet':![],'IsRecurrence':![],'Subject':intUtil[_0x49c4('0xf')](_0x313e73['Subjects'],_0x58cad7,'\x20'),'Description':intUtil[_0x49c4('0xf')](_0x313e73[_0x49c4('0x10')],_0x58cad7,'\x0a')},getCustomFields(_0xb611a1,_0x58cad7));if(_0x451ea6){_0x536d42[_0x49c4('0x11')]=_0x451ea6['id'];}}else if(_0x313e73[_0x49c4('0xc')]===_0x49c4('0x12')){_0x536d42=Object[_0x49c4('0x13')]({},{'OwnerId':_0x5ab4a3['id'],'Subject':intUtil[_0x49c4('0xf')](_0x313e73[_0x49c4('0x14')],_0x58cad7,'\x20'),'Description':intUtil['getString'](_0x313e73[_0x49c4('0x10')],_0x58cad7,'\x0a')},getCustomFields(_0xb611a1,_0x58cad7));if(_0x451ea6){_0x536d42[_0x49c4('0x15')]=_0x451ea6['id'];}}return _0x459d09[_0x49c4('0x16')](_0x313e73[_0x49c4('0xc')])[_0x49c4('0x17')](_0x536d42);}function getUser(_0x53e3a2,_0x44e607,_0x2891f4){if(!_['isNil'](_0x44e607)&&intUtil['validateEmail'](_0x44e607)){var _0x3c782d={'Email':_0x44e607};var _0x2f82d5={'Id':!![],'Username':!![],'Name':!![],'Email':!![]};return _0x2891f4[_0x49c4('0x16')]('User')[_0x49c4('0x18')](_0x3c782d,_0x2f82d5)['execute']()[_0x49c4('0x19')](function(_0x1806c2){if(_0x1806c2[_0x49c4('0x1a')]){var _0x291526=_[_0x49c4('0x18')](_0x1806c2,function(_0x41078c){return _0x41078c[_0x49c4('0x1b')]===_0x44e607;});if(_0x291526){logger[_0x49c4('0x1c')](_0x49c4('0x1d'),_0x44e607);return BPromise['resolve']({'id':_0x291526['Id'],'name':_0x291526['Name']});}}else{logger['info'](_0x49c4('0x1e'),_0x44e607);return _0x2891f4['identity']()['then'](function(_0x2263ae){return BPromise[_0x49c4('0x1f')]({'id':_0x2263ae[_0x49c4('0x20')],'name':_0x2263ae[_0x49c4('0x21')]});});}});}else{logger['info']('Agent\x20%s\x20not\x20found.\x20Switch\x20to\x20the\x20admin\x20account.',_0x44e607);return _0x2891f4[_0x49c4('0x22')]()[_0x49c4('0x19')](function(_0x565423){return BPromise[_0x49c4('0x1f')]({'id':_0x565423[_0x49c4('0x20')],'name':_0x565423[_0x49c4('0x21')]});});}}function getEndUser(_0xa7a826,_0x531d92,_0x543ea2,_0x449960,_0x53c199){var _0x3800b7={'Phone':_0x449960};var _0x3852b2={'Id':!![],'Name':!![],'Phone':!![]};return BPromise[_0x49c4('0x1f')]()[_0x49c4('0x19')](function(){if(_0x531d92['ticketType']===_0x49c4('0xd')){logger[_0x49c4('0x1c')](_0x49c4('0x23'),_0x449960,_0x531d92[_0x49c4('0x24')]);switch(_0x531d92[_0x49c4('0x24')]){case _0x49c4('0x25'):return _0x53c199[_0x49c4('0x16')](_0x49c4('0x26'))[_0x49c4('0x18')](_0x3800b7,_0x3852b2)[_0x49c4('0x27')]()[_0x49c4('0x19')](function(_0x4ea6ea){if(_0x4ea6ea&&_0x4ea6ea['length']){return _0x4ea6ea;}else{return _0x53c199['sobject'](_0x49c4('0x28'))[_0x49c4('0x18')](_0x3800b7,_0x3852b2);}});case _0x49c4('0x29'):return _0x53c199[_0x49c4('0x16')](_0x49c4('0x26'))['find'](_0x3800b7,_0x3852b2)[_0x49c4('0x27')]();case _0x49c4('0x2a'):return _0x53c199[_0x49c4('0x16')](_0x49c4('0x28'))['find'](_0x3800b7,_0x3852b2);default:return null;}}else if(_0x531d92['ticketType']===_0x49c4('0x12')){logger[_0x49c4('0x1c')](_0x49c4('0x23'),_0x449960,_0x49c4('0x29'));return _0x53c199[_0x49c4('0x16')]('Contact')[_0x49c4('0x18')](_0x3800b7,_0x3852b2)[_0x49c4('0x27')]();}})[_0x49c4('0x19')](function(_0x512d02){if(_0x512d02&&_0x512d02['length']){var _0x85dce2=_[_0x49c4('0x18')](_0x512d02,function(_0x3bec0a){return _0x3bec0a[_0x49c4('0x2b')]===_0x449960;});if(_0x85dce2){return BPromise[_0x49c4('0x1f')]({'id':_0x85dce2['Id'],'name':_0x85dce2[_0x49c4('0x2c')],'phone':_0x85dce2[_0x49c4('0x2b')]});}}})[_0x49c4('0x19')](function(_0x3209cd){if(_0x3209cd){logger['info'](_0x49c4('0x2d'),_0x449960);return BPromise['resolve'](_0x3209cd);}else{logger[_0x49c4('0x1c')](_0x49c4('0x2e'),_0x449960);var _0x2625a6={'LastName':_0x543ea2!==_0x49c4('0x2f')?_0x543ea2:util['format'](_0x49c4('0x30'),_0x449960),'Phone':_0x449960};if(_0x531d92[_0x49c4('0x31')]){if(_0x531d92[_0x49c4('0x31')]==='contact'){logger[_0x49c4('0x1c')](_0x49c4('0x32'),_0x449960,_0x531d92[_0x49c4('0x31')]);}else if(_0x531d92[_0x49c4('0x31')]===_0x49c4('0x2a')&&_0x531d92[_0x49c4('0xc')]===_0x49c4('0xd')){logger[_0x49c4('0x1c')](_0x49c4('0x32'),_0x449960,_0x531d92[_0x49c4('0x31')]);_0x2625a6[_0x49c4('0x33')]='No\x20Company';}else{return null;}}return _0x53c199[_0x49c4('0x16')](_[_0x49c4('0x34')](_0x531d92[_0x49c4('0x31')]))[_0x49c4('0x17')](_0x2625a6);}});}function getCustomFields(_0x41ad28,_0x29dd5d){var _0x1be62d={};if(_0x41ad28[_0x49c4('0x1a')]>0x0){_[_0x49c4('0x35')](_0x41ad28,function(_0x2668ed){if(_0x2668ed[_0x49c4('0x36')]===_0x49c4('0x37')&&_0x2668ed[_0x49c4('0x38')]){_0x1be62d[_0x2668ed['idField']]=_0x2668ed[_0x49c4('0x39')]['toString']();}else if(_0x2668ed[_0x49c4('0x36')]===_0x49c4('0x3a')&&_0x2668ed[_0x49c4('0x3b')]&&_0x2668ed[_0x49c4('0x38')]){_0x29dd5d[_0x2668ed[_0x49c4('0x3b')]]&&(_0x1be62d[_0x2668ed[_0x49c4('0x38')]]=_0x29dd5d[_0x2668ed['variableName']]['toString']());}else if(_0x2668ed[_0x49c4('0x36')]===_0x49c4('0x3c')&&_0x2668ed[_0x49c4('0x3d')]&&_0x2668ed[_0x49c4('0x3d')]['name']&&_0x2668ed[_0x49c4('0x38')]){_0x29dd5d[_0x2668ed[_0x49c4('0x3d')][_0x49c4('0x3e')][_0x49c4('0x3f')]()]&&(_0x1be62d[_0x2668ed[_0x49c4('0x38')]]=_0x29dd5d[_0x2668ed[_0x49c4('0x3d')][_0x49c4('0x3e')][_0x49c4('0x3f')]()][_0x49c4('0x40')]());}});}return _0x1be62d;}function getConnection(_0x5640d3){var _0x2ad771=_0x5640d3['password'][_0x49c4('0x41')](_0x5640d3[_0x49c4('0x42')]);var _0x301def=new jsforce[(_0x49c4('0x43'))]({'oauth2':{'loginUrl':_0x5640d3[_0x49c4('0x44')]||'https://login.salesforce.com','clientId':_0x5640d3[_0x49c4('0x45')],'clientSecret':_0x5640d3[_0x49c4('0x46')]}});return _0x301def[_0x49c4('0x47')](_0x5640d3[_0x49c4('0x48')],_0x2ad771)[_0x49c4('0x19')](function(){logger[_0x49c4('0x1c')](_0x49c4('0x49'));return _0x301def;});}exports['queue']=function(_0x3bac1b,_0x5cfff9,_0x3f7379,_0x906d3,_0x29fe65,_0x27adfe){var _0x2d8087,_0x30bea5,_0x2c6be1,_0x506c71;_0x27adfe[_0x49c4('0x4a')]=intUtil[_0x49c4('0x4b')](_0x27adfe['serverUrl']);_0x27adfe[_0x49c4('0x44')]=intUtil[_0x49c4('0x4b')](_0x27adfe[_0x49c4('0x44')]);if(_0x29fe65&&_0x29fe65[_0x49c4('0x4c')]){logger['info']('[QUEUE]',_0x49c4('0x4d'));_0x5cfff9['recordingURL']=util[_0x49c4('0x4e')](_0x49c4('0x4f'),_0x27adfe[_0x49c4('0x4a')],_0x5cfff9[_0x49c4('0x50')],md5(_0x5cfff9[_0x49c4('0x50')]));}else{_0x5cfff9[_0x49c4('0x51')]='';}return getConnection(_0x27adfe)[_0x49c4('0x19')](function(_0x563f0b){_0x506c71=_0x563f0b;return getUser(_0x27adfe,_0x906d3[_0x49c4('0x52')],_0x506c71);})[_0x49c4('0x19')](function(_0x3936d3){_0x2d8087=_0x3936d3;return getEndUser(_0x27adfe,_0x3f7379,_0x5cfff9[_0x49c4('0x53')],_0x5cfff9[_0x49c4('0x54')],_0x506c71);})[_0x49c4('0x19')](function(_0x156748){_0x30bea5=_0x156748;return getTicket(_0x27adfe,_0x2d8087,_0x30bea5,_0x3f7379,_0x5cfff9,_0x3f7379[_0x49c4('0x55')],_0x506c71,_0x49c4('0x56'));})[_0x49c4('0x19')](function(_0x5b822f){_0x2c6be1=_0x5b822f;logger['info'](_0x49c4('0x57'),_0x2c6be1['id']);logger[_0x49c4('0x1c')]('[QUEUE]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.',_0x2c6be1['id'],_0x906d3['name'],_0x27adfe[_0x49c4('0x36')]);switch(_0x27adfe['type']){case'integrationTab':emit(util[_0x49c4('0x4e')](_0x49c4('0x58'),_0x906d3[_0x49c4('0x3e')]),_0x49c4('0x59'),{'recordId':_0x2c6be1['id']});break;case _0x49c4('0x5a'):emit(util[_0x49c4('0x4e')](_0x49c4('0x58'),_0x906d3['name']),_0x49c4('0x5b'),{'uri':util[_0x49c4('0x4e')](_0x49c4('0x5c'),_0x506c71[_0x49c4('0x5d')],_0x2c6be1['id'])});break;default:logger[_0x49c4('0x5e')](_0x49c4('0x5f'));}})['catch'](function(_0x5c7ddd){logger[_0x49c4('0x5e')](_0x49c4('0x60'),JSON[_0x49c4('0x61')](_0x5c7ddd));});};exports[_0x49c4('0x62')]=function(_0x23288e,_0x6b2592,_0xc2033f,_0x58dc5f,_0x45d715,_0x33c9a6,_0x4ba4eb){var _0x42928c,_0x53690f,_0x2f966c,_0x147ebd;_0x33c9a6[_0x49c4('0x4a')]=intUtil[_0x49c4('0x4b')](_0x33c9a6[_0x49c4('0x4a')]);_0x33c9a6[_0x49c4('0x44')]=intUtil[_0x49c4('0x4b')](_0x33c9a6[_0x49c4('0x44')]);if(_0x4ba4eb&&_0x4ba4eb['recordingFormat']&&_0x4ba4eb[_0x49c4('0x63')]!==_0x49c4('0x64')){logger['info'](_0x49c4('0x65'),_0x49c4('0x4d'));_0x6b2592['recordingURL']=util[_0x49c4('0x4e')](_0x49c4('0x4f'),_0x33c9a6['serverUrl'],_0x6b2592['uniqueid'],md5(_0x6b2592['uniqueid']));}return getConnection(_0x33c9a6)['then'](function(_0xc43386){_0x147ebd=_0xc43386;return getUser(_0x33c9a6,_0x58dc5f['email'],_0x147ebd);})[_0x49c4('0x19')](function(_0x32f344){_0x42928c=_0x32f344;return getEndUser(_0x33c9a6,_0xc2033f,_0x6b2592['destcalleridname'],_0x6b2592[_0x49c4('0x66')],_0x147ebd);})[_0x49c4('0x19')](function(_0x5ac9f0){_0x53690f=_0x5ac9f0;return getTicket(_0x33c9a6,_0x42928c,_0x53690f,_0xc2033f,_0x6b2592,_0xc2033f[_0x49c4('0x55')],_0x147ebd,_0x49c4('0x62'));})[_0x49c4('0x19')](function(_0x35f46f){_0x2f966c=_0x35f46f;logger['info'](_0x49c4('0x67'),_0x2f966c['id']);logger[_0x49c4('0x1c')](_0x49c4('0x68'),_0x2f966c['id'],_0x58dc5f[_0x49c4('0x3e')],_0x33c9a6['type']);switch(_0x33c9a6[_0x49c4('0x36')]){case'integrationTab':emit(util['format']('user:%s',_0x58dc5f['name']),_0x49c4('0x59'),{'recordId':_0x2f966c['id']});break;case _0x49c4('0x5a'):emit(util[_0x49c4('0x4e')](_0x49c4('0x58'),_0x58dc5f['name']),'trigger:browser:url',{'uri':util[_0x49c4('0x4e')](_0x49c4('0x5c'),_0x147ebd[_0x49c4('0x5d')],_0x2f966c['id'])});break;default:logger[_0x49c4('0x5e')](_0x49c4('0x65'),_0x49c4('0x69'));}})[_0x49c4('0x6a')](function(_0x3b949d){logger['error'](_0x49c4('0x65'),JSON['stringify'](_0x3b949d));});};exports[_0x49c4('0x6b')]=function(_0x264902,_0x1a5d4c,_0x1ea1b4,_0x3a1c81,_0x2e062f,_0x13d657){var _0x3feb0b,_0x13d951,_0x1743d0,_0x1e3911;_0x13d657[_0x49c4('0x4a')]=intUtil[_0x49c4('0x4b')](_0x13d657[_0x49c4('0x4a')]);_0x13d657[_0x49c4('0x44')]=intUtil[_0x49c4('0x4b')](_0x13d657[_0x49c4('0x44')]);if(_0x2e062f&&_0x2e062f[_0x49c4('0x4c')]){logger['info']('[ABANDONED]',_0x49c4('0x4d'));_0x1a5d4c[_0x49c4('0x51')]=util['format'](_0x49c4('0x4f'),_0x13d657[_0x49c4('0x4a')],_0x1a5d4c[_0x49c4('0x50')],md5(_0x1a5d4c[_0x49c4('0x50')]));}else{_0x1a5d4c['recordingURL']='';}return getConnection(_0x13d657)['then'](function(_0x4a85d4){_0x1e3911=_0x4a85d4;if(!_[_0x49c4('0x6c')](_0x3a1c81)){return getUser(_0x13d657,_0x3a1c81[_0x49c4('0x3e')],_0x1e3911);}else{return getUser(_0x13d657,null,_0x1e3911);}})[_0x49c4('0x19')](function(_0x2f4289){_0x3feb0b=_0x2f4289;return getEndUser(_0x13d657,_0x1ea1b4,_0x1a5d4c[_0x49c4('0x53')],_0x1a5d4c[_0x49c4('0x54')],_0x1e3911);})[_0x49c4('0x19')](function(_0x3692a4){_0x13d951=_0x3692a4;return getTicket(_0x13d657,_0x3feb0b,_0x13d951,_0x1ea1b4,_0x1a5d4c,_0x1ea1b4[_0x49c4('0x55')],_0x1e3911);})['then'](function(_0x363b2e){_0x1743d0=_0x363b2e;logger[_0x49c4('0x1c')](_0x49c4('0x6d'),_0x1743d0['id']);logger['info'](_0x49c4('0x6e'),_0x13d657[_0x49c4('0x36')]);})[_0x49c4('0x6a')](function(_0xb6031b){logger[_0x49c4('0x5e')](_0x49c4('0x6f'),JSON[_0x49c4('0x61')](_0xb6031b));});};
\ No newline at end of file
index 1a2d61f..0724219 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4944=['recordingURL','recordingFormat','none','Recording\x20is\x20enabled!','The\x20ticket\x20ID\x20is:\x20%s','call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...','lodash','request-promise','util','md5','ioredis','./util','../../../../config/logger','redis','defaults','localhost','socket.io-emitter','sys_user?sysparm_query=user_name%3Dadmin','then','adminId','result','sys_id','info','toUpperCase','],\x20getAdminUser\x20crm','error','message','userEmail','sys_user?sysparm_query=email%3D','],\x20getUser\x20entity','length','active','userId','adminEmail','],\x20getUser\x20crm','],\x20createEndUser\x20input\x20crm','POST','sys_user?','endUserNumber','user','true','System','],\x20EndUser\x20schema','endUserId','catch','],\x20getEndUser\x20input\x20crm','],\x20getEndUser\x20crm','],\x20createEndUser\x20crm','forEach','nameField','idField','toLowerCase','content','toString','type','customField','variable','variableName','customVariable','Variable','name',']\x20getTicket\x20input\x20crm','outbound','incident','assign','getString','Fields','number',']\x20getTicket\x20crm','GET','label','?sysparm_query=name%3D','label_entry','Incident','ticketId','ticketNumber','push','all',']\x20arrayPromises:\x20IDs\x20in\x20table\x20label','Tags','%26sysparm_record_row%3D1%26sysparm_record_rows%3D39','%26sysparm_record_list%3Dactive%253Dtrue','%255EORDERBYDESCnumber','/nav_to.do?uri=incident.do?sys_id%3D','format','user:%s','emit','username','password','remoteUri','stripTrailingSlash','serverUrl','isNil','destcalleridnum','calleridnum','callDirection','queue','abandoned','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','monitor_format','[QUEUE]'];(function(_0x1b5b21,_0x18db49){var _0x3b03f2=function(_0x24e85a){while(--_0x24e85a){_0x1b5b21['push'](_0x1b5b21['shift']());}};_0x3b03f2(++_0x18db49);}(_0x4944,0x6d));var _0x4494=function(_0x56c264,_0x1be829){_0x56c264=_0x56c264-0x0;var _0x4c6879=_0x4944[_0x56c264];return _0x4c6879;};'use strict';var _=require(_0x4494('0x0'));var Promise=require('bluebird');var rp=require(_0x4494('0x1'));var util=require(_0x4494('0x2'));var md5=require(_0x4494('0x3'));var Redis=require(_0x4494('0x4'));var intUtil=require(_0x4494('0x5'));var config=require('../../../../config/environment');var logger=require(_0x4494('0x6'))('servicenow');config[_0x4494('0x7')]=_[_0x4494('0x8')](config[_0x4494('0x7')],{'host':_0x4494('0x9'),'port':0x18eb});var io=require(_0x4494('0xa'))(new Redis(config[_0x4494('0x7')]));function getAdminUser(_0x55bb81,_0x12ef8e,_0x21098c,_0x5b14d5,_0x1b6476,_0xec1762){return new Promise(function(_0x461525,_0x2b1cf5){var _0x4acf68={'method':'GET','uri':_0x5b14d5+_0x4494('0xb')+'&'+_0x1b6476+'&'+_0xec1762,'auth':_0x12ef8e,'json':!![]};return rp(_0x4acf68)[_0x4494('0xc')](function(_0xec70eb){if(_0xec70eb['result']['length']>0x0){_0x21098c[_0x4494('0xd')]=_0xec70eb[_0x4494('0xe')][0x0][_0x4494('0xf')];}logger[_0x4494('0x10')]('['+[_0x55bb81[_0x4494('0x11')]()]+_0x4494('0x12'),_0x21098c);_0x461525(_0x21098c);})['catch'](function(_0x34959d){logger[_0x4494('0x13')]('['+[_0x55bb81[_0x4494('0x11')]()]+']',_0x34959d[_0x4494('0x14')]);_0x2b1cf5(_0x34959d[_0x4494('0x14')]);});});}function getUser(_0x8506a0,_0x3847d6,_0x53fed5,_0x2caa38,_0x5a0985){return function(_0x5570a4){logger[_0x4494('0x10')]('['+[_0x8506a0[_0x4494('0x11')]()]+'],\x20getUser\x20input\x20crm',_0x5570a4);return new Promise(function(_0x49350a,_0xcbe5a4){if(intUtil['validateEmail'](_0x5570a4[_0x4494('0x15')])){var _0x42880b={'method':'GET','uri':_0x53fed5+_0x4494('0x16')+_0x5570a4['userEmail']+'&'+_0x2caa38+'&'+_0x5a0985,'auth':_0x3847d6,'json':!![]};logger[_0x4494('0x10')]('['+[_0x8506a0[_0x4494('0x11')]()]+'],\x20getUser\x20rp\x20obj',_0x42880b);return rp(_0x42880b)['then'](function(_0x434e43){logger[_0x4494('0x10')]('['+[_0x8506a0[_0x4494('0x11')]()]+_0x4494('0x17'),_0x434e43);if(_0x434e43[_0x4494('0xe')][_0x4494('0x18')]>0x0&&String(_0x434e43[_0x4494('0xe')][0x0][_0x4494('0x19')])==='true'){_0x5570a4['userId']=_0x434e43['result'][0x0]['sys_id'];}else{_0x5570a4[_0x4494('0x1a')]=_0x5570a4[_0x4494('0xd')];_0x5570a4[_0x4494('0x15')]=_0x5570a4[_0x4494('0x1b')];}logger['info']('['+[_0x8506a0[_0x4494('0x11')]()]+_0x4494('0x1c'),_0x5570a4);_0x49350a(_0x5570a4);})['catch'](function(_0x10b231){logger[_0x4494('0x13')]('['+[_0x8506a0[_0x4494('0x11')]()]+']',_0x10b231['message']);_0xcbe5a4(_0x10b231[_0x4494('0x14')]);});}else{logger['info']('['+[_0x8506a0[_0x4494('0x11')]()]+']\x20using\x20admin\x20profile');_0x5570a4[_0x4494('0x1a')]=_0x5570a4[_0x4494('0xd')];_0x5570a4[_0x4494('0x15')]=_0x5570a4['adminEmail'];_0x49350a(_0x5570a4);}});};}function createEndUser(_0x2f269a,_0x2ed20e,_0x491027,_0x268f14,_0x303321){logger[_0x4494('0x10')]('['+[_0x2f269a['toUpperCase']()]+_0x4494('0x1d'),_0x491027);return new Promise(function(_0x2e94af,_0x1273d7){var _0x19f483={'method':_0x4494('0x1e'),'uri':_0x268f14+_0x4494('0x1f')+_0x303321,'body':{'user_name':_0x491027[_0x4494('0x20')],'roles':_0x4494('0x21'),'first_name':_0x491027['endUserNumber'],'active':_0x4494('0x22'),'date_format':_0x4494('0x23'),'phone':_0x491027[_0x4494('0x20')]},'auth':_0x2ed20e,'json':!![]};return rp(_0x19f483)['then'](function(_0x209fe8){logger[_0x4494('0x10')]('['+[_0x2f269a[_0x4494('0x11')]()]+_0x4494('0x24'),_0x209fe8[_0x4494('0xe')]);_0x491027[_0x4494('0x25')]=_0x209fe8[_0x4494('0xe')]['sys_id'];_0x2e94af(_0x491027);})[_0x4494('0x26')](function(_0x1c6ff8){logger[_0x4494('0x13')]('['+[_0x2f269a[_0x4494('0x11')]()]+']',_0x1c6ff8[_0x4494('0x14')]);_0x1273d7(_0x1c6ff8[_0x4494('0x14')]);});});}function getEndUser(_0x5bba31,_0x302108,_0x1009a4,_0x3b3cae,_0x203517){return function(_0x2bb6ba){logger['info']('['+[_0x5bba31[_0x4494('0x11')]()]+_0x4494('0x27'),_0x2bb6ba);return new Promise(function(_0x506e6f,_0x3660ea){var _0x49a5c6={'method':'GET','uri':_0x1009a4+'sys_user?sysparm_query=phone%3D'+_0x2bb6ba[_0x4494('0x20')]+'&'+_0x3b3cae+'&'+_0x203517,'auth':_0x302108,'json':!![]};return rp(_0x49a5c6)[_0x4494('0xc')](function(_0x322748){if(_0x322748['result']['length']>0x0){_0x2bb6ba[_0x4494('0x25')]=_0x322748[_0x4494('0xe')][0x0][_0x4494('0xf')];logger[_0x4494('0x10')]('['+[_0x5bba31[_0x4494('0x11')]()]+_0x4494('0x28'),_0x2bb6ba);_0x506e6f(_0x2bb6ba);}else{return createEndUser(_0x5bba31,_0x302108,_0x2bb6ba,_0x1009a4,_0x3b3cae)[_0x4494('0xc')](function(_0x45e88f){logger[_0x4494('0x10')]('['+[_0x5bba31[_0x4494('0x11')]()]+_0x4494('0x29'),_0x45e88f);_0x506e6f(_0x45e88f);});}})[_0x4494('0x26')](function(_0x27d93f){logger['error']('['+[_0x5bba31[_0x4494('0x11')]()]+']',_0x27d93f[_0x4494('0x14')]);_0x3660ea(_0x27d93f[_0x4494('0x14')]);});});};}function getCustomFields(_0x3bfea6,_0x20b267){var _0x3cd671={};if(_0x3bfea6[_0x4494('0x18')]>0x0){_[_0x4494('0x2a')](_0x3bfea6,function(_0x231adc){if(_0x231adc['type']==='string'&&_0x231adc[_0x4494('0x2b')]&&!_0x231adc['customField']){_0x3cd671[_0x231adc[_0x4494('0x2c')][_0x4494('0x2d')]()]=_0x231adc[_0x4494('0x2e')][_0x4494('0x2f')]();}else if(_0x231adc[_0x4494('0x30')]==='string'&&_0x231adc['idField']&&_0x231adc[_0x4494('0x31')]){_0x3cd671[_0x231adc['idField'][_0x4494('0x2d')]()]=_0x231adc[_0x4494('0x2e')][_0x4494('0x2f')]();}else if(_0x231adc[_0x4494('0x30')]===_0x4494('0x32')&&_0x231adc[_0x4494('0x33')]&&_0x231adc[_0x4494('0x2c')]&&_0x231adc['customField']){_0x3cd671[_0x231adc[_0x4494('0x2c')][_0x4494('0x2d')]()]=_0x20b267[_0x231adc['variableName']][_0x4494('0x2f')]();}else if(_0x231adc[_0x4494('0x30')]===_0x4494('0x34')&&_0x231adc['Variable']&&_0x231adc[_0x4494('0x35')][_0x4494('0x36')]&&_0x231adc[_0x4494('0x2c')]&&_0x231adc[_0x4494('0x31')]){_0x3cd671[_0x231adc['idField']['toLowerCase']()]=_0x20b267[_0x231adc[_0x4494('0x35')][_0x4494('0x36')][_0x4494('0x2d')]()]['toString']();}});}return _0x3cd671;}function getTicket(_0x47b66d,_0x3717ae,_0x79e98c,_0x177035,_0x47c1cd,_0x311414){return function(_0x1800dd){logger['info']('['+[_0x47b66d[_0x4494('0x11')]()]+_0x4494('0x37'),_0x1800dd);return new Promise(function(_0xc2762d,_0x3d6647){var _0x274d7d=_0x47b66d['toLowerCase']()===_0x4494('0x38')?_0x1800dd[_0x4494('0x1a')]:_0x1800dd[_0x4494('0x25')];var _0x369f83={'method':_0x4494('0x1e'),'uri':_0x79e98c+_0x4494('0x39')+'?'+_0x311414,'body':Object[_0x4494('0x3a')]({},{'active':_0x4494('0x22'),'caller_id':_0x274d7d,'assigned_to':_0x1800dd[_0x4494('0x1a')],'short_description':intUtil[_0x4494('0x3b')](_0x177035['Subjects'],_0x47c1cd,'\x20'),'description':intUtil[_0x4494('0x3b')](_0x177035['Descriptions'],_0x47c1cd,'\x0a')},getCustomFields(_0x177035[_0x4494('0x3c')],_0x47c1cd)),'auth':_0x3717ae,'json':!![]};return rp(_0x369f83)[_0x4494('0xc')](function(_0x702ab7){logger[_0x4494('0x10')]('['+[_0x47b66d[_0x4494('0x11')]()]+']\x20POST\x20incident\x20entity\x20schema',_0x702ab7[_0x4494('0xe')]);_0x1800dd['ticketId']=_0x702ab7['result']['sys_id'];_0x1800dd['ticketNumber']=_0x702ab7['result'][_0x4494('0x3d')];logger[_0x4494('0x10')]('['+[_0x47b66d[_0x4494('0x11')]()]+_0x4494('0x3e'),_0x1800dd);_0xc2762d(_0x1800dd);})[_0x4494('0x26')](function(_0x2a82c5){logger[_0x4494('0x13')]('['+[_0x47b66d['toUpperCase']()]+']',_0x2a82c5['message']);_0x3d6647(_0x2a82c5['message']);});});};}function createRemoteTag(_0x3ad850,_0x9ef5b3,_0x4e3199,_0x43b46f){return new Promise(function(_0x346d80,_0x18bbe3){var _0x328937={'method':_0x4494('0x1e'),'uri':_0x4e3199+'label'+'?'+_0x43b46f,'body':{'short_description':_0x3ad850,'global':!![],'active':!![],'name':_0x3ad850},'auth':_0x9ef5b3,'json':!![]};return rp(_0x328937)[_0x4494('0xc')](function(_0x522771){var _0x4bbd31=_0x522771[_0x4494('0xe')]['sys_id'];_0x346d80(_0x4bbd31);});});}function getRemoteTag(_0x26d91d,_0x1bd489,_0x55ee90,_0x49fcd6,_0x2a91c2){return new Promise(function(_0x2fb2f3,_0xc32e50){var _0x49a187={'method':_0x4494('0x3f'),'uri':_0x55ee90+_0x4494('0x40')+_0x4494('0x41')+_0x26d91d+'&'+_0x49fcd6,'auth':_0x1bd489,'json':!![]};return rp(_0x49a187)[_0x4494('0xc')](function(_0x282b45){if(_0x282b45[_0x4494('0xe')]['length']>0x0){var _0x5c8b56=_0x282b45[_0x4494('0xe')][0x0]['sys_id'];_0x2fb2f3(_0x5c8b56);}else{return createRemoteTag(_0x26d91d,_0x1bd489,_0x55ee90,_0x49fcd6)[_0x4494('0xc')](function(_0x3aff06){_0x2fb2f3(_0x3aff06);});}});});}function assignTagToIncident(_0x3cc01e,_0x49112e,_0x4dd3af,_0x1e1ab4,_0x43bfba){return new Promise(function(_0x4766dd,_0x2c7c18){var _0x3dc04a={'method':_0x4494('0x1e'),'uri':_0x4dd3af+_0x4494('0x42')+'?'+_0x43bfba,'body':{'label':_0x3cc01e,'table':'incident','id_type':_0x4494('0x43'),'table_key':_0x1e1ab4[_0x4494('0x44')],'title':'Incident\x20-\x20'+_0x1e1ab4[_0x4494('0x45')],'id_display':_0x1e1ab4[_0x4494('0x45')]},'auth':_0x49112e,'json':!![]};return rp(_0x3dc04a)[_0x4494('0xc')](function(_0x470236){_0x4766dd();})[_0x4494('0x26')](function(){_0x4766dd();});});}function manageTags(_0x27d07b,_0x6a9289,_0x43583a,_0x3a7d93,_0x567269,_0x3f35e8,_0x588528){return new Promise(function(_0x5ed118,_0x2911fc){var _0x472ea6=[];_0x6a9289['forEach'](function(_0xc7e69a){_0x472ea6[_0x4494('0x46')](getRemoteTag(_0xc7e69a,_0x43583a,_0x3a7d93,_0x3f35e8,_0x588528));});return Promise[_0x4494('0x47')](_0x472ea6)[_0x4494('0xc')](function(_0x2ae8e6){if(_0x2ae8e6['length']){logger[_0x4494('0x10')]('['+[_0x27d07b[_0x4494('0x11')]()]+_0x4494('0x48'),_0x2ae8e6);var _0x299b8c=[];_0x2ae8e6[_0x4494('0x2a')](function(_0x1c3637){_0x299b8c['push'](assignTagToIncident(_0x1c3637,_0x43583a,_0x3a7d93,_0x567269,_0x3f35e8));});return Promise['all'](_0x299b8c)[_0x4494('0xc')](function(){_0x5ed118();})[_0x4494('0x26')](function(){_0x5ed118();});}else{_0x5ed118();}});});}function getTags(_0x3f62f4,_0x46cb05,_0x33c5ae,_0x2f3e39,_0xb54e67,_0x15c6c1){return function(_0xa85960){return new Promise(function(_0x11aba8,_0x508128){var _0x5562a3=[];var _0x5e900c=_0x2f3e39[_0x4494('0x49')];if(_0x5e900c&&_0x5e900c[_0x4494('0x18')]>0x0){_0x5562a3=_['map'](_0x5e900c,_0x4494('0x36'));}if(_0x5562a3[_0x4494('0x18')]>0x0){return manageTags(_0x3f62f4,_0x5562a3,_0x46cb05,_0x33c5ae,_0xa85960,_0xb54e67,_0x15c6c1)[_0x4494('0xc')](function(){_0x11aba8(_0xa85960);});}else{_0x11aba8(_0xa85960);}});};}function emit(_0x1ba9ce,_0x12eb81,_0x30468d){var _0xaa2ad3='%26sysparm_record_target%3Dincident'+_0x4494('0x4a')+_0x4494('0x4b')+_0x4494('0x4c');var _0x107e03={'uri':_0x1ba9ce+_0x4494('0x4d')+_0x30468d+_0xaa2ad3};io['to'](util[_0x4494('0x4e')](_0x4494('0x4f'),_0x12eb81))[_0x4494('0x50')]('trigger:browser:url',_0x107e03);}exports['cs']=function(_0xff46f3,_0x59ec0f,_0x556cdd,_0x7654c6,_0x36714f,_0x4c90e0,_0x5a5edf,_0x2f8459){var _0xa38100={};var _0x4f6387={'user':_0x4c90e0[_0x4494('0x51')],'pass':_0x4c90e0[_0x4494('0x52')]};var _0x25053a='sysparm_limit=1';var _0x4bef06='sysparm_display_value=true';_0x4c90e0[_0x4494('0x53')]=intUtil[_0x4494('0x54')](_0x4c90e0[_0x4494('0x53')]);_0x4c90e0[_0x4494('0x55')]=intUtil[_0x4494('0x54')](_0x4c90e0['serverUrl']);var _0x2382e3=util['format']('%s/api/now/table/',_0x4c90e0[_0x4494('0x53')]);_0xa38100['userEmail']=!_[_0x4494('0x56')](_0x7654c6)?_0x7654c6['email']:null;_0xa38100[_0x4494('0x1b')]=_0x4c90e0['email'];_0xa38100['endUserNumber']=_0x2f8459['toLowerCase']()==='outbound'?_0x59ec0f[_0x4494('0x57')]:_0x59ec0f[_0x4494('0x58')];_0xa38100[_0x4494('0x59')]=_0x2f8459===_0x4494('0x5a')||_0x2f8459===_0x4494('0x5b')?_0x4494('0x5a'):_0x4494('0x38');var _0x46ec48=util[_0x4494('0x4e')](_0x4494('0x5c'),_0x4c90e0['serverUrl'],_0x59ec0f['uniqueid'],md5(_0x59ec0f['uniqueid']));if(_0x36714f&&_0x36714f[_0x4494('0x5d')]){logger[_0x4494('0x10')](_0x4494('0x5e'),'Recording\x20is\x20enabled!');_0x59ec0f[_0x4494('0x5f')]=_0x46ec48;}else if(_0x5a5edf&&_0x5a5edf[_0x4494('0x60')]&&_0x5a5edf[_0x4494('0x60')]!==_0x4494('0x61')){logger[_0x4494('0x10')]('[OUTBOUND]',_0x4494('0x62'));_0x59ec0f[_0x4494('0x5f')]=_0x46ec48;}else{_0x59ec0f['recordingURL']='';}return getAdminUser(_0x2f8459,_0x4f6387,_0xa38100,_0x2382e3,_0x4bef06,_0x25053a)['then'](getUser(_0x2f8459,_0x4f6387,_0x2382e3,_0x4bef06,_0x25053a))['then'](getEndUser(_0x2f8459,_0x4f6387,_0x2382e3,_0x4bef06,_0x25053a))['then'](getTicket(_0x2f8459,_0x4f6387,_0x2382e3,_0x556cdd,_0x59ec0f,_0x4bef06))['then'](function(_0x56594d){logger[_0x4494('0x10')](util[_0x4494('0x4e')](_0x4494('0x63'),_0x56594d[_0x4494('0x44')]));logger[_0x4494('0x10')](util[_0x4494('0x4e')](_0x4494('0x64'),_0x2f8459));if(_0x2f8459!=='abandoned'){logger[_0x4494('0x10')]('['+[_0x2f8459['toUpperCase']()]+']',_0x4494('0x65'));emit(_0x4c90e0[_0x4494('0x53')],_0x7654c6[_0x4494('0x36')],_0x56594d[_0x4494('0x44')]);}})[_0x4494('0x26')](function(_0x500858){logger[_0x4494('0x13')]('['+[_0x2f8459[_0x4494('0x11')]()]+']\x20Error\x20running\x20ServiceNow\x20integration',util['inspect'](_0x500858,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
+var _0x25b0=['Displaying\x20call\x20in\x20a\x20new\x20tab...',']\x20Error\x20running\x20ServiceNow\x20integration','lodash','bluebird','request-promise','util','md5','ioredis','./util','../../../../config/environment','../../../../config/logger','servicenow','defaults','redis','localhost','GET','sys_user?sysparm_query=user_name%3Dadmin','then','result','length','adminId','sys_id','info','toUpperCase','],\x20getAdminUser\x20crm','catch','error','message','],\x20getUser\x20input\x20crm','userEmail','sys_user?sysparm_query=email%3D','],\x20getUser\x20rp\x20obj','],\x20getUser\x20entity','true','userId','adminEmail','],\x20getUser\x20crm','],\x20createEndUser\x20input\x20crm','POST','endUserNumber','user','],\x20EndUser\x20schema','endUserId','],\x20getEndUser\x20input\x20crm','],\x20createEndUser\x20crm','forEach','type','string','nameField','idField','toLowerCase','customField','content','variable','variableName','toString','customVariable','Variable','name','outbound','incident','assign','getString','Subjects','Fields',']\x20POST\x20incident\x20entity\x20schema','ticketId','number','label','label_entry','Incident\x20-\x20','ticketNumber','push','all',']\x20arrayPromises:\x20IDs\x20in\x20table\x20label','Tags','%26sysparm_record_row%3D1%26sysparm_record_rows%3D39','/nav_to.do?uri=incident.do?sys_id%3D','format','user:%s','emit','trigger:browser:url','username','sysparm_limit=1','remoteUri','stripTrailingSlash','serverUrl','%s/api/now/table/','isNil','email','destcalleridnum','calleridnum','callDirection','queue','abandoned','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','recordingFormat','none','[OUTBOUND]','The\x20ticket\x20ID\x20is:\x20%s','call\x20direction:\x20%s'];(function(_0x4ba73a,_0x5927dd){var _0x252a3d=function(_0x164bc7){while(--_0x164bc7){_0x4ba73a['push'](_0x4ba73a['shift']());}};_0x252a3d(++_0x5927dd);}(_0x25b0,0x140));var _0x025b=function(_0x31c3be,_0x5e540f){_0x31c3be=_0x31c3be-0x0;var _0x48314d=_0x25b0[_0x31c3be];return _0x48314d;};'use strict';var _=require(_0x025b('0x0'));var Promise=require(_0x025b('0x1'));var rp=require(_0x025b('0x2'));var util=require(_0x025b('0x3'));var md5=require(_0x025b('0x4'));var Redis=require(_0x025b('0x5'));var intUtil=require(_0x025b('0x6'));var config=require(_0x025b('0x7'));var logger=require(_0x025b('0x8'))(_0x025b('0x9'));config['redis']=_[_0x025b('0xa')](config[_0x025b('0xb')],{'host':_0x025b('0xc'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x025b('0xb')]));function getAdminUser(_0x308d39,_0x1add20,_0x2f9d91,_0xf259e7,_0x4428c3,_0x3851d4){return new Promise(function(_0x5bdfaf,_0xd885bd){var _0x30d59e={'method':_0x025b('0xd'),'uri':_0xf259e7+_0x025b('0xe')+'&'+_0x4428c3+'&'+_0x3851d4,'auth':_0x1add20,'json':!![]};return rp(_0x30d59e)[_0x025b('0xf')](function(_0x2a0d1f){if(_0x2a0d1f[_0x025b('0x10')][_0x025b('0x11')]>0x0){_0x2f9d91[_0x025b('0x12')]=_0x2a0d1f['result'][0x0][_0x025b('0x13')];}logger[_0x025b('0x14')]('['+[_0x308d39[_0x025b('0x15')]()]+_0x025b('0x16'),_0x2f9d91);_0x5bdfaf(_0x2f9d91);})[_0x025b('0x17')](function(_0x4fbda6){logger[_0x025b('0x18')]('['+[_0x308d39[_0x025b('0x15')]()]+']',_0x4fbda6[_0x025b('0x19')]);_0xd885bd(_0x4fbda6[_0x025b('0x19')]);});});}function getUser(_0x4d480f,_0x263191,_0x41b189,_0x50d54b,_0x242be4){return function(_0x360856){logger[_0x025b('0x14')]('['+[_0x4d480f[_0x025b('0x15')]()]+_0x025b('0x1a'),_0x360856);return new Promise(function(_0x795cac,_0xf43f34){if(intUtil['validateEmail'](_0x360856[_0x025b('0x1b')])){var _0x3c1a58={'method':_0x025b('0xd'),'uri':_0x41b189+_0x025b('0x1c')+_0x360856[_0x025b('0x1b')]+'&'+_0x50d54b+'&'+_0x242be4,'auth':_0x263191,'json':!![]};logger[_0x025b('0x14')]('['+[_0x4d480f[_0x025b('0x15')]()]+_0x025b('0x1d'),_0x3c1a58);return rp(_0x3c1a58)[_0x025b('0xf')](function(_0x3c26f7){logger['info']('['+[_0x4d480f[_0x025b('0x15')]()]+_0x025b('0x1e'),_0x3c26f7);if(_0x3c26f7[_0x025b('0x10')][_0x025b('0x11')]>0x0&&String(_0x3c26f7['result'][0x0]['active'])===_0x025b('0x1f')){_0x360856[_0x025b('0x20')]=_0x3c26f7[_0x025b('0x10')][0x0][_0x025b('0x13')];}else{_0x360856['userId']=_0x360856[_0x025b('0x12')];_0x360856[_0x025b('0x1b')]=_0x360856[_0x025b('0x21')];}logger[_0x025b('0x14')]('['+[_0x4d480f[_0x025b('0x15')]()]+_0x025b('0x22'),_0x360856);_0x795cac(_0x360856);})[_0x025b('0x17')](function(_0x31fd5a){logger[_0x025b('0x18')]('['+[_0x4d480f[_0x025b('0x15')]()]+']',_0x31fd5a[_0x025b('0x19')]);_0xf43f34(_0x31fd5a[_0x025b('0x19')]);});}else{logger[_0x025b('0x14')]('['+[_0x4d480f[_0x025b('0x15')]()]+']\x20using\x20admin\x20profile');_0x360856[_0x025b('0x20')]=_0x360856[_0x025b('0x12')];_0x360856[_0x025b('0x1b')]=_0x360856[_0x025b('0x21')];_0x795cac(_0x360856);}});};}function createEndUser(_0x5c9614,_0x2bf984,_0x503aaf,_0x1f19d9,_0x21b41a){logger[_0x025b('0x14')]('['+[_0x5c9614[_0x025b('0x15')]()]+_0x025b('0x23'),_0x503aaf);return new Promise(function(_0x2f02bc,_0x20d97e){var _0x562be1={'method':_0x025b('0x24'),'uri':_0x1f19d9+'sys_user?'+_0x21b41a,'body':{'user_name':_0x503aaf[_0x025b('0x25')],'roles':_0x025b('0x26'),'first_name':_0x503aaf[_0x025b('0x25')],'active':_0x025b('0x1f'),'date_format':'System','phone':_0x503aaf[_0x025b('0x25')]},'auth':_0x2bf984,'json':!![]};return rp(_0x562be1)[_0x025b('0xf')](function(_0x3078ea){logger[_0x025b('0x14')]('['+[_0x5c9614[_0x025b('0x15')]()]+_0x025b('0x27'),_0x3078ea[_0x025b('0x10')]);_0x503aaf[_0x025b('0x28')]=_0x3078ea['result'][_0x025b('0x13')];_0x2f02bc(_0x503aaf);})[_0x025b('0x17')](function(_0x507b89){logger[_0x025b('0x18')]('['+[_0x5c9614[_0x025b('0x15')]()]+']',_0x507b89[_0x025b('0x19')]);_0x20d97e(_0x507b89[_0x025b('0x19')]);});});}function getEndUser(_0x369de8,_0x4f1715,_0x484ec2,_0x2bac8a,_0xadab9){return function(_0x322099){logger[_0x025b('0x14')]('['+[_0x369de8[_0x025b('0x15')]()]+_0x025b('0x29'),_0x322099);return new Promise(function(_0x312a20,_0x49269f){var _0x4cecae={'method':'GET','uri':_0x484ec2+'sys_user?sysparm_query=phone%3D'+_0x322099['endUserNumber']+'&'+_0x2bac8a+'&'+_0xadab9,'auth':_0x4f1715,'json':!![]};return rp(_0x4cecae)[_0x025b('0xf')](function(_0x46099e){if(_0x46099e[_0x025b('0x10')]['length']>0x0){_0x322099[_0x025b('0x28')]=_0x46099e['result'][0x0]['sys_id'];logger[_0x025b('0x14')]('['+[_0x369de8[_0x025b('0x15')]()]+'],\x20getEndUser\x20crm',_0x322099);_0x312a20(_0x322099);}else{return createEndUser(_0x369de8,_0x4f1715,_0x322099,_0x484ec2,_0x2bac8a)[_0x025b('0xf')](function(_0xb8e90){logger[_0x025b('0x14')]('['+[_0x369de8['toUpperCase']()]+_0x025b('0x2a'),_0xb8e90);_0x312a20(_0xb8e90);});}})['catch'](function(_0x30c3d5){logger[_0x025b('0x18')]('['+[_0x369de8[_0x025b('0x15')]()]+']',_0x30c3d5[_0x025b('0x19')]);_0x49269f(_0x30c3d5['message']);});});};}function getCustomFields(_0xfc7103,_0x5ac85f){var _0x7b1fc2={};if(_0xfc7103['length']>0x0){_[_0x025b('0x2b')](_0xfc7103,function(_0x17fd49){if(_0x17fd49[_0x025b('0x2c')]===_0x025b('0x2d')&&_0x17fd49[_0x025b('0x2e')]&&!_0x17fd49['customField']){_0x7b1fc2[_0x17fd49[_0x025b('0x2f')][_0x025b('0x30')]()]=_0x17fd49['content']['toString']();}else if(_0x17fd49[_0x025b('0x2c')]===_0x025b('0x2d')&&_0x17fd49[_0x025b('0x2f')]&&_0x17fd49[_0x025b('0x31')]){_0x7b1fc2[_0x17fd49[_0x025b('0x2f')]['toLowerCase']()]=_0x17fd49[_0x025b('0x32')]['toString']();}else if(_0x17fd49[_0x025b('0x2c')]===_0x025b('0x33')&&_0x17fd49[_0x025b('0x34')]&&_0x17fd49[_0x025b('0x2f')]&&_0x17fd49[_0x025b('0x31')]){_0x7b1fc2[_0x17fd49['idField'][_0x025b('0x30')]()]=_0x5ac85f[_0x17fd49[_0x025b('0x34')]][_0x025b('0x35')]();}else if(_0x17fd49[_0x025b('0x2c')]===_0x025b('0x36')&&_0x17fd49[_0x025b('0x37')]&&_0x17fd49[_0x025b('0x37')][_0x025b('0x38')]&&_0x17fd49[_0x025b('0x2f')]&&_0x17fd49[_0x025b('0x31')]){_0x7b1fc2[_0x17fd49[_0x025b('0x2f')][_0x025b('0x30')]()]=_0x5ac85f[_0x17fd49[_0x025b('0x37')][_0x025b('0x38')][_0x025b('0x30')]()]['toString']();}});}return _0x7b1fc2;}function getTicket(_0x503e96,_0x5c7e61,_0x54bba6,_0x23cd60,_0x12bf43,_0x38ef9e){return function(_0x10a481){logger[_0x025b('0x14')]('['+[_0x503e96[_0x025b('0x15')]()]+']\x20getTicket\x20input\x20crm',_0x10a481);return new Promise(function(_0x1a8ce0,_0x3f4c20){var _0x58a70f=_0x503e96[_0x025b('0x30')]()===_0x025b('0x39')?_0x10a481['userId']:_0x10a481[_0x025b('0x28')];var _0x10a081={'method':_0x025b('0x24'),'uri':_0x54bba6+_0x025b('0x3a')+'?'+_0x38ef9e,'body':Object[_0x025b('0x3b')]({},{'active':'true','caller_id':_0x58a70f,'assigned_to':_0x10a481[_0x025b('0x20')],'short_description':intUtil[_0x025b('0x3c')](_0x23cd60[_0x025b('0x3d')],_0x12bf43,'\x20'),'description':intUtil[_0x025b('0x3c')](_0x23cd60['Descriptions'],_0x12bf43,'\x0a')},getCustomFields(_0x23cd60[_0x025b('0x3e')],_0x12bf43)),'auth':_0x5c7e61,'json':!![]};return rp(_0x10a081)[_0x025b('0xf')](function(_0x30a205){logger[_0x025b('0x14')]('['+[_0x503e96[_0x025b('0x15')]()]+_0x025b('0x3f'),_0x30a205['result']);_0x10a481[_0x025b('0x40')]=_0x30a205[_0x025b('0x10')][_0x025b('0x13')];_0x10a481['ticketNumber']=_0x30a205[_0x025b('0x10')][_0x025b('0x41')];logger[_0x025b('0x14')]('['+[_0x503e96['toUpperCase']()]+']\x20getTicket\x20crm',_0x10a481);_0x1a8ce0(_0x10a481);})[_0x025b('0x17')](function(_0x5ea697){logger[_0x025b('0x18')]('['+[_0x503e96[_0x025b('0x15')]()]+']',_0x5ea697[_0x025b('0x19')]);_0x3f4c20(_0x5ea697['message']);});});};}function createRemoteTag(_0x366b32,_0x36e174,_0x3edd90,_0x193932){return new Promise(function(_0x58d704,_0x4e2af6){var _0x2a79a0={'method':_0x025b('0x24'),'uri':_0x3edd90+_0x025b('0x42')+'?'+_0x193932,'body':{'short_description':_0x366b32,'global':!![],'active':!![],'name':_0x366b32},'auth':_0x36e174,'json':!![]};return rp(_0x2a79a0)[_0x025b('0xf')](function(_0x365b67){var _0x3eadab=_0x365b67[_0x025b('0x10')]['sys_id'];_0x58d704(_0x3eadab);});});}function getRemoteTag(_0x23cc31,_0x2875e5,_0x4d39fb,_0xa54811,_0x19db62){return new Promise(function(_0x116dce,_0x2a4ef6){var _0x4298a7={'method':_0x025b('0xd'),'uri':_0x4d39fb+_0x025b('0x42')+'?sysparm_query=name%3D'+_0x23cc31+'&'+_0xa54811,'auth':_0x2875e5,'json':!![]};return rp(_0x4298a7)[_0x025b('0xf')](function(_0x5a05b7){if(_0x5a05b7[_0x025b('0x10')][_0x025b('0x11')]>0x0){var _0x222699=_0x5a05b7[_0x025b('0x10')][0x0]['sys_id'];_0x116dce(_0x222699);}else{return createRemoteTag(_0x23cc31,_0x2875e5,_0x4d39fb,_0xa54811)['then'](function(_0x458bb3){_0x116dce(_0x458bb3);});}});});}function assignTagToIncident(_0x120c85,_0x840d96,_0x595e2e,_0x2655a8,_0x3c2208){return new Promise(function(_0x14ab21,_0x10ca2b){var _0x110716={'method':_0x025b('0x24'),'uri':_0x595e2e+_0x025b('0x43')+'?'+_0x3c2208,'body':{'label':_0x120c85,'table':'incident','id_type':'Incident','table_key':_0x2655a8['ticketId'],'title':_0x025b('0x44')+_0x2655a8[_0x025b('0x45')],'id_display':_0x2655a8['ticketNumber']},'auth':_0x840d96,'json':!![]};return rp(_0x110716)['then'](function(_0x4371d3){_0x14ab21();})['catch'](function(){_0x14ab21();});});}function manageTags(_0x4bad94,_0xbb4997,_0x3390d1,_0xd7fac,_0x4e42bb,_0x499b8d,_0x10af4a){return new Promise(function(_0x1cc3d5,_0x3df57f){var _0x4d6fe3=[];_0xbb4997[_0x025b('0x2b')](function(_0x1f2e3b){_0x4d6fe3[_0x025b('0x46')](getRemoteTag(_0x1f2e3b,_0x3390d1,_0xd7fac,_0x499b8d,_0x10af4a));});return Promise[_0x025b('0x47')](_0x4d6fe3)[_0x025b('0xf')](function(_0x220416){if(_0x220416[_0x025b('0x11')]){logger[_0x025b('0x14')]('['+[_0x4bad94['toUpperCase']()]+_0x025b('0x48'),_0x220416);var _0x570694=[];_0x220416['forEach'](function(_0x56a64a){_0x570694[_0x025b('0x46')](assignTagToIncident(_0x56a64a,_0x3390d1,_0xd7fac,_0x4e42bb,_0x499b8d));});return Promise[_0x025b('0x47')](_0x570694)[_0x025b('0xf')](function(){_0x1cc3d5();})[_0x025b('0x17')](function(){_0x1cc3d5();});}else{_0x1cc3d5();}});});}function getTags(_0x14d99c,_0x2a8ef0,_0x538cfe,_0x5e6749,_0x2d76e8,_0x112c07){return function(_0x2a2eef){return new Promise(function(_0x5f1be7,_0x16ecd8){var _0x2e09ba=[];var _0x365ba3=_0x5e6749[_0x025b('0x49')];if(_0x365ba3&&_0x365ba3['length']>0x0){_0x2e09ba=_['map'](_0x365ba3,_0x025b('0x38'));}if(_0x2e09ba[_0x025b('0x11')]>0x0){return manageTags(_0x14d99c,_0x2e09ba,_0x2a8ef0,_0x538cfe,_0x2a2eef,_0x2d76e8,_0x112c07)[_0x025b('0xf')](function(){_0x5f1be7(_0x2a2eef);});}else{_0x5f1be7(_0x2a2eef);}});};}function emit(_0x5b6ce6,_0x3819bd,_0x88d8d){var _0x406f02='%26sysparm_record_target%3Dincident'+_0x025b('0x4a')+'%26sysparm_record_list%3Dactive%253Dtrue'+'%255EORDERBYDESCnumber';var _0x42556e={'uri':_0x5b6ce6+_0x025b('0x4b')+_0x88d8d+_0x406f02};io['to'](util[_0x025b('0x4c')](_0x025b('0x4d'),_0x3819bd))[_0x025b('0x4e')](_0x025b('0x4f'),_0x42556e);}exports['cs']=function(_0x1e0a3a,_0x48b8f2,_0x1cc2ca,_0x35d69a,_0x8060b4,_0x162738,_0x53328e,_0x9c221b){var _0x8d32ff={};var _0x2b6810={'user':_0x162738[_0x025b('0x50')],'pass':_0x162738['password']};var _0x39692d=_0x025b('0x51');var _0x4febfc='sysparm_display_value=true';_0x162738[_0x025b('0x52')]=intUtil[_0x025b('0x53')](_0x162738['remoteUri']);_0x162738[_0x025b('0x54')]=intUtil['stripTrailingSlash'](_0x162738['serverUrl']);var _0x185dd0=util[_0x025b('0x4c')](_0x025b('0x55'),_0x162738[_0x025b('0x52')]);_0x8d32ff[_0x025b('0x1b')]=!_[_0x025b('0x56')](_0x35d69a)?_0x35d69a['email']:null;_0x8d32ff[_0x025b('0x21')]=_0x162738[_0x025b('0x57')];_0x8d32ff[_0x025b('0x25')]=_0x9c221b['toLowerCase']()===_0x025b('0x39')?_0x48b8f2[_0x025b('0x58')]:_0x48b8f2[_0x025b('0x59')];_0x8d32ff[_0x025b('0x5a')]=_0x9c221b===_0x025b('0x5b')||_0x9c221b===_0x025b('0x5c')?_0x025b('0x5b'):'outbound';var _0x5331ec=util[_0x025b('0x4c')](_0x025b('0x5d'),_0x162738['serverUrl'],_0x48b8f2['uniqueid'],md5(_0x48b8f2[_0x025b('0x5e')]));if(_0x8060b4&&_0x8060b4[_0x025b('0x5f')]){logger[_0x025b('0x14')](_0x025b('0x60'),_0x025b('0x61'));_0x48b8f2[_0x025b('0x62')]=_0x5331ec;}else if(_0x53328e&&_0x53328e['recordingFormat']&&_0x53328e[_0x025b('0x63')]!==_0x025b('0x64')){logger[_0x025b('0x14')](_0x025b('0x65'),'Recording\x20is\x20enabled!');_0x48b8f2[_0x025b('0x62')]=_0x5331ec;}else{_0x48b8f2[_0x025b('0x62')]='';}return getAdminUser(_0x9c221b,_0x2b6810,_0x8d32ff,_0x185dd0,_0x4febfc,_0x39692d)[_0x025b('0xf')](getUser(_0x9c221b,_0x2b6810,_0x185dd0,_0x4febfc,_0x39692d))[_0x025b('0xf')](getEndUser(_0x9c221b,_0x2b6810,_0x185dd0,_0x4febfc,_0x39692d))[_0x025b('0xf')](getTicket(_0x9c221b,_0x2b6810,_0x185dd0,_0x1cc2ca,_0x48b8f2,_0x4febfc))[_0x025b('0xf')](function(_0x63a3a4){logger['info'](util['format'](_0x025b('0x66'),_0x63a3a4[_0x025b('0x40')]));logger[_0x025b('0x14')](util[_0x025b('0x4c')](_0x025b('0x67'),_0x9c221b));if(_0x9c221b!==_0x025b('0x5c')){logger[_0x025b('0x14')]('['+[_0x9c221b[_0x025b('0x15')]()]+']',_0x025b('0x68'));emit(_0x162738[_0x025b('0x52')],_0x35d69a['name'],_0x63a3a4['ticketId']);}})[_0x025b('0x17')](function(_0x5f9485){logger[_0x025b('0x18')]('['+[_0x9c221b[_0x025b('0x15')]()]+_0x025b('0x69'),util['inspect'](_0x5f9485,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
index 2e8efed..0dd3645 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc2b4=['assigned_user_id','Descriptions','date_start','toISOString','slice','replace','duration_hours','duration_minutes','parent_name','direction','length','forEach','variableName','push','idField','set_entry','JSON','Calls','format','Basic\x20%s','apiKey','toString','base64','isNil','Getting\x20agent\x20with\x20name','get_entry_list','Employees','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','stringify','Contacts','contacts.phone_home\x20=\x20\x22%s\x22','find','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','<unknown>','Caller\x20-\x20%s','phone_home','Enduser\x20created.','[HTTP]','merge','map','type','string','nameField','customField','content','custom_fields','variable','customVariable','Variable','toLowerCase','login','username','PLAIN','xCALLY\x20Motion\x20integration','Account\x20%d\x20is\x20not\x20valid','set_relationship','queue','remoteUri','serverUrl','stripTrailingSlash','uri','%s/service/v4_1/rest.php','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','uniqueid','recordingURL','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Fields','The\x20Ticket\x20ID\x20is:','users','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','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','error','outbound','[OUTBOUND]','destcalleridname','destcalleridnum','contacts','catch','[ABANDONED]','Inbound','lodash','md5','util','ioredis','../../../../config/environment','../../../../config/logger','sugarcrm','defaults','redis','localhost','socket.io-emitter','POST','emit','info','Creating\x20new\x20ticket...','name','getString','Subjects'];(function(_0x232f1e,_0x5d2ad1){var _0x14af53=function(_0x394531){while(--_0x394531){_0x232f1e['push'](_0x232f1e['shift']());}};_0x14af53(++_0x5d2ad1);}(_0xc2b4,0x1ca));var _0x4c2b=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xc2b4[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x4c2b('0x0'));var rp=require('request-promise');var BPromise=require('bluebird');var md5=require(_0x4c2b('0x1'));var util=require(_0x4c2b('0x2'));var Redis=require(_0x4c2b('0x3'));var intUtil=require('./util');var config=require(_0x4c2b('0x4'));var logger=require(_0x4c2b('0x5'))(_0x4c2b('0x6'));config['redis']=_[_0x4c2b('0x7')](config[_0x4c2b('0x8')],{'host':_0x4c2b('0x9'),'port':0x18eb});var io=require(_0x4c2b('0xa'))(new Redis(config[_0x4c2b('0x8')]));var def={'method':_0x4c2b('0xb'),'json':!![]};function emit(_0x444eaa,_0x42ab52,_0x2ad0bb){io['to'](_0x444eaa)[_0x4c2b('0xc')](_0x42ab52,_0x2ad0bb);}function getTicket(_0x5bdcd7,_0x168474,_0x269dbc,_0x115bc0,_0x546162,_0x4ccc7c,_0x5474a6,_0x1c35f0){logger[_0x4c2b('0xd')](_0x4c2b('0xe'));var _0x31bed5=new Date();var _0x14ab07=[{'name':_0x4c2b('0xf'),'value':intUtil[_0x4c2b('0x10')](_0x115bc0[_0x4c2b('0x11')],_0x546162,'\x20')},{'name':_0x4c2b('0x12'),'value':_0x168474['id']},{'name':'created_by','value':_0x168474['id']},{'name':'description','value':intUtil[_0x4c2b('0x10')](_0x115bc0[_0x4c2b('0x13')],_0x546162,'\x0a')},{'name':_0x4c2b('0x14'),'value':_0x31bed5[_0x4c2b('0x15')]()[_0x4c2b('0x16')](0x0,0x13)[_0x4c2b('0x17')]('T','\x20')},{'name':_0x4c2b('0x18'),'value':'0'},{'name':_0x4c2b('0x19'),'value':'15'},{'name':'parent_id','value':_0x269dbc['id']},{'name':'parent_type','value':'Contacts'},{'name':_0x4c2b('0x1a'),'value':_0x269dbc[_0x4c2b('0xf')]},{'name':_0x4c2b('0x1b'),'value':_0x1c35f0}];if(_0x4ccc7c[_0x4c2b('0x1c')]){_[_0x4c2b('0x1d')](_0x4ccc7c,function(_0x246a3e){if(_0x546162[_0x246a3e[_0x4c2b('0x1e')]]){_0x14ab07[_0x4c2b('0x1f')]({'name':_0x246a3e[_0x4c2b('0x20')],'value':_0x546162[_0x246a3e[_0x4c2b('0x1e')]]});}});}return request({'form':{'method':_0x4c2b('0x21'),'input_type':_0x4c2b('0x22'),'response_type':_0x4c2b('0x22'),'rest_data':JSON['stringify']({'session':_0x5474a6['id'],'module_name':_0x4c2b('0x23'),'name_value_list':_0x14ab07})}});}function getAuth(_0x55a12b){return util[_0x4c2b('0x24')](_0x4c2b('0x25'),new Buffer(_0x55a12b[_0x4c2b('0x26')]+':X')[_0x4c2b('0x27')](_0x4c2b('0x28')));}function getServerInfo(_0x18c106){return request({'form':{'method':'get_server_info','input_type':'JSON','response_type':_0x4c2b('0x22'),'rest_data':JSON['stringify']({'session':_0x18c106['id']})}});}function getUser(_0xea2916,_0x421d00,_0x541bf3){if(!_[_0x4c2b('0x29')](_0x421d00)){logger[_0x4c2b('0xd')](_0x4c2b('0x2a'),_0x421d00);return request({'form':{'method':_0x4c2b('0x2b'),'input_type':_0x4c2b('0x22'),'response_type':_0x4c2b('0x22'),'rest_data':JSON['stringify']({'session':_0x541bf3['id'],'module_name':_0x4c2b('0x2c'),'query':util[_0x4c2b('0x24')](_0x4c2b('0x2d'),_0x421d00),'order_by':'','offset':'0','select_fields':['id',_0x4c2b('0xf'),_0x4c2b('0x2e')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})[_0x4c2b('0x2f')](function(_0x2f8e99){if(_0x2f8e99[_0x4c2b('0x30')][_0x4c2b('0x1c')]){var _0x51c3bd=_['find'](_0x2f8e99[_0x4c2b('0x30')],function(_0x33d5d1){return _0x33d5d1[_0x4c2b('0x31')][_0x4c2b('0x2e')][_0x4c2b('0x32')]===_0x421d00;});if(_0x51c3bd){logger['info'](_0x4c2b('0x33'));return BPromise['resolve']({'id':_0x51c3bd[_0x4c2b('0x31')]['id'][_0x4c2b('0x32')],'name':_0x51c3bd[_0x4c2b('0x31')][_0x4c2b('0xf')][_0x4c2b('0x32')]});}}logger[_0x4c2b('0xd')](_0x4c2b('0x34'));return BPromise[_0x4c2b('0x35')]({'id':_0x541bf3[_0x4c2b('0x31')][_0x4c2b('0x36')][_0x4c2b('0x32')],'name':_0x541bf3['name_value_list']['user_name'][_0x4c2b('0x32')]});});}else{logger[_0x4c2b('0xd')](_0x4c2b('0x37'));return BPromise[_0x4c2b('0x35')]({'id':_0x541bf3[_0x4c2b('0x31')][_0x4c2b('0x36')][_0x4c2b('0x32')],'name':_0x541bf3['name_value_list'][_0x4c2b('0x2e')][_0x4c2b('0x32')]});}}function getEndUser(_0x2c4a30,_0x58c232,_0xdbef10,_0x213156){logger['info'](_0x4c2b('0x38'),_0xdbef10);return request({'form':{'method':_0x4c2b('0x2b'),'input_type':_0x4c2b('0x22'),'response_type':_0x4c2b('0x22'),'rest_data':JSON[_0x4c2b('0x39')]({'session':_0x213156['id'],'module_name':_0x4c2b('0x3a'),'query':util[_0x4c2b('0x24')](_0x4c2b('0x3b'),_0xdbef10),'order_by':'','offset':'0','select_fields':['id',_0x4c2b('0xf'),'phone_home'],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})['then'](function(_0x3acc9a){if(_0x3acc9a[_0x4c2b('0x30')][_0x4c2b('0x1c')]){var _0x438f1b=_[_0x4c2b('0x3c')](_0x3acc9a[_0x4c2b('0x30')],function(_0x1a244e){return _0x1a244e[_0x4c2b('0x31')]['phone_home']['value']===_0xdbef10;});if(_0x438f1b){logger[_0x4c2b('0xd')]('Enduser\x20found!');return BPromise[_0x4c2b('0x35')]({'id':_0x438f1b[_0x4c2b('0x31')]['id']['value'],'name':_0x438f1b[_0x4c2b('0x31')]['name'][_0x4c2b('0x32')],'phone':_0x438f1b[_0x4c2b('0x31')]['phone_home'][_0x4c2b('0x32')]});}}else{logger['info'](_0x4c2b('0x3d'));return request({'form':{'method':'set_entry','input_type':_0x4c2b('0x22'),'response_type':_0x4c2b('0x22'),'rest_data':JSON[_0x4c2b('0x39')]({'session':_0x213156['id'],'module_name':_0x4c2b('0x3a'),'name_value_list':[{'name':'first_name','value':_0x58c232!==_0x4c2b('0x3e')?_0x58c232:util[_0x4c2b('0x24')](_0x4c2b('0x3f'),_0xdbef10)},{'name':_0x4c2b('0x40'),'value':_0xdbef10}]})}})['then'](function(_0x1d5ca7){logger[_0x4c2b('0xd')](_0x4c2b('0x41'));return BPromise['resolve']({'id':_0x1d5ca7['id'],'name':_0x1d5ca7[_0x4c2b('0x30')]['first_name'][_0x4c2b('0x32')],'phone':_0x1d5ca7[_0x4c2b('0x30')][_0x4c2b('0x40')][_0x4c2b('0x32')]});});}});}function request(_0x2142b5){logger['debug'](_0x4c2b('0x42'),JSON[_0x4c2b('0x39')](_0x2142b5));return rp(_[_0x4c2b('0x43')](def,_0x2142b5));}function getTags(_0x261270,_0x495bcb){var _0x27a3a2=[];if(_0x261270&&_0x261270[_0x4c2b('0x1c')]>0x0){_0x27a3a2=_[_0x4c2b('0x44')](_0x261270,_0x495bcb);}return _0x27a3a2;}function getCustomFields(_0x10ba22,_0x18d602){var _0x1eac19=[];var _0x129634={'custom_fields':[]};if(_0x10ba22[_0x4c2b('0x1c')]>0x0){_['forEach'](_0x10ba22,function(_0x505f18){if(_0x505f18[_0x4c2b('0x45')]===_0x4c2b('0x46')&&_0x505f18[_0x4c2b('0x47')]&&!_0x505f18[_0x4c2b('0x48')]){_0x129634[_0x505f18[_0x4c2b('0x47')]['toLowerCase']()]=_0x505f18[_0x4c2b('0x49')][_0x4c2b('0x27')]();}else if(_0x505f18[_0x4c2b('0x45')]==='string'&&_0x505f18[_0x4c2b('0x20')]&&_0x505f18['customField']){_0x129634[_0x4c2b('0x4a')][_0x4c2b('0x1f')]({'id':_0x505f18['idField'],'value':_0x505f18[_0x4c2b('0x49')][_0x4c2b('0x27')]()});}else if(_0x505f18['type']===_0x4c2b('0x4b')&&_0x505f18[_0x4c2b('0x1e')]&&_0x505f18[_0x4c2b('0x20')]&&_0x505f18[_0x4c2b('0x48')]){_0x18d602[_0x505f18[_0x4c2b('0x1e')]]&&_0x129634[_0x4c2b('0x4a')][_0x4c2b('0x1f')]({'id':_0x505f18[_0x4c2b('0x20')],'value':_0x18d602[_0x505f18[_0x4c2b('0x1e')]][_0x4c2b('0x27')]()});}else if(_0x505f18[_0x4c2b('0x45')]===_0x4c2b('0x4c')&&_0x505f18[_0x4c2b('0x4d')]&&_0x505f18[_0x4c2b('0x4d')][_0x4c2b('0xf')]&&_0x505f18['idField']&&_0x505f18['customField']){_0x18d602[_0x505f18[_0x4c2b('0x4d')][_0x4c2b('0xf')][_0x4c2b('0x4e')]()]&&_0x129634[_0x4c2b('0x4a')][_0x4c2b('0x1f')]({'id':_0x505f18[_0x4c2b('0x20')],'value':_0x18d602[_0x505f18[_0x4c2b('0x4d')][_0x4c2b('0xf')][_0x4c2b('0x4e')]()][_0x4c2b('0x27')]()});}});}return _0x129634;}function getConnection(_0x463593){return request({'method':_0x4c2b('0xb'),'form':{'method':_0x4c2b('0x4f'),'input_type':_0x4c2b('0x22'),'response_type':_0x4c2b('0x22'),'rest_data':JSON[_0x4c2b('0x39')]({'user_auth':{'user_name':_0x463593[_0x4c2b('0x50')],'password':_0x463593['password'],'encryption':_0x4c2b('0x51')},'application':_0x4c2b('0x52')})}})[_0x4c2b('0x2f')](function(_0x29a4f4){var _0x3d85ed=_0x29a4f4;if(_0x3d85ed['id']){def['sessionID']=_0x3d85ed['id'];return BPromise[_0x4c2b('0x35')](_0x3d85ed);}else{throw new Error(util[_0x4c2b('0x24')](_0x4c2b('0x53'),_0x463593['id']));}});}function setRelationship(_0x195372,_0x32b9b9,_0x28eda9,_0x159ecb){return request({'form':{'method':_0x4c2b('0x54'),'input_type':_0x4c2b('0x22'),'response_type':_0x4c2b('0x22'),'rest_data':JSON['stringify']({'session':_0x195372['id'],'module_name':'Calls','module_id':_0x28eda9['id'],'link_field_name':_0x159ecb,'related_ids':[_0x32b9b9['id']]})}});}exports[_0x4c2b('0x55')]=function(_0x151328,_0x303f48,_0x5d6193,_0x2accf8,_0x34686f,_0x55c735){var _0x4be96d,_0x7f9ad8,_0x1032f4,_0x5b8eda;_0x55c735[_0x4c2b('0x56')]=intUtil['stripTrailingSlash'](_0x55c735['remoteUri']);_0x55c735[_0x4c2b('0x57')]=intUtil[_0x4c2b('0x58')](_0x55c735['serverUrl']);def[_0x4c2b('0x59')]=util[_0x4c2b('0x24')](_0x4c2b('0x5a'),_0x55c735['remoteUri']);if(_0x34686f&&_0x34686f[_0x4c2b('0x5b')]){logger[_0x4c2b('0xd')](_0x4c2b('0x5c'),_0x4c2b('0x5d'));_0x303f48['recordingURL']=util[_0x4c2b('0x24')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x55c735[_0x4c2b('0x57')],_0x303f48[_0x4c2b('0x5e')],md5(_0x303f48[_0x4c2b('0x5e')]));}else{_0x303f48[_0x4c2b('0x5f')]='';}return getConnection(_0x55c735)[_0x4c2b('0x2f')](function(_0x4242d9){_0x5b8eda=_0x4242d9;return getUser(_0x55c735,_0x2accf8[_0x4c2b('0xf')],_0x5b8eda);})[_0x4c2b('0x2f')](function(_0x464a4d){_0x4be96d=_0x464a4d;logger[_0x4c2b('0xd')](_0x4c2b('0x60'),_0x4be96d['id']);return getEndUser(_0x55c735,_0x303f48[_0x4c2b('0x61')],_0x303f48[_0x4c2b('0x62')],_0x5b8eda);})[_0x4c2b('0x2f')](function(_0x21aeb7){_0x7f9ad8=_0x21aeb7;logger[_0x4c2b('0xd')](_0x4c2b('0x63'),_0x7f9ad8['id']);return getTicket(_0x55c735,_0x4be96d,_0x7f9ad8,_0x5d6193,_0x303f48,_0x5d6193[_0x4c2b('0x64')],_0x5b8eda,'Inbound');})[_0x4c2b('0x2f')](function(_0x3a39ee){_0x1032f4=_0x3a39ee;logger[_0x4c2b('0xd')]('Ticket\x20created!');logger['info'](_0x4c2b('0x65'),_0x1032f4['id']);return setRelationship(_0x5b8eda,_0x4be96d,_0x1032f4,_0x4c2b('0x66'));})[_0x4c2b('0x2f')](function(){return setRelationship(_0x5b8eda,_0x7f9ad8,_0x1032f4,'contacts');})[_0x4c2b('0x2f')](function(){return getServerInfo(_0x5b8eda);})[_0x4c2b('0x2f')](function(_0x8dc1b6){var _0x4c70ed=parseInt(_0x8dc1b6[_0x4c2b('0x67')][_0x4c2b('0x68')](0x0));var _0x474eaa=util[_0x4c2b('0x24')](_0x4c2b('0x69'),_0x55c735[_0x4c2b('0x56')],_0x1032f4['id']);if(_0x4c70ed>0x6){_0x474eaa=util[_0x4c2b('0x24')](_0x4c2b('0x6a'),_0x55c735[_0x4c2b('0x56')],_0x1032f4['id']);}logger[_0x4c2b('0xd')](_0x4c2b('0x5c'),_0x4c2b('0x6b'));emit(util['format'](_0x4c2b('0x6c'),_0x2accf8[_0x4c2b('0xf')]),_0x4c2b('0x6d'),{'uri':_0x474eaa});})['catch'](function(_0xaeaaba){logger[_0x4c2b('0x6e')](_0x4c2b('0x5c'),JSON[_0x4c2b('0x39')](_0xaeaaba));});};exports[_0x4c2b('0x6f')]=function(_0xeab380,_0x24997e,_0x23f059,_0x28b990,_0xcd1f94,_0x22e57c,_0x369ada){var _0x89cae7,_0x402d71,_0x29c11c,_0x250688;_0x22e57c[_0x4c2b('0x56')]=intUtil[_0x4c2b('0x58')](_0x22e57c[_0x4c2b('0x56')]);_0x22e57c[_0x4c2b('0x57')]=intUtil[_0x4c2b('0x58')](_0x22e57c[_0x4c2b('0x57')]);def[_0x4c2b('0x59')]=util[_0x4c2b('0x24')](_0x4c2b('0x5a'),_0x22e57c[_0x4c2b('0x56')]);if(_0x369ada&&_0x369ada['recordingFormat']&&_0x369ada['recordingFormat']!=='none'){logger[_0x4c2b('0xd')](_0x4c2b('0x70'),'Recording\x20is\x20enabled!');_0x24997e[_0x4c2b('0x5f')]=util[_0x4c2b('0x24')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x22e57c[_0x4c2b('0x57')],_0x24997e[_0x4c2b('0x5e')],md5(_0x24997e['uniqueid']));}return getConnection(_0x22e57c)['then'](function(_0x5dd715){_0x250688=_0x5dd715;return getUser(_0x22e57c,_0x28b990[_0x4c2b('0xf')],_0x250688);})[_0x4c2b('0x2f')](function(_0x4098d3){_0x89cae7=_0x4098d3;logger[_0x4c2b('0xd')](_0x4c2b('0x60'),_0x89cae7['id']);return getEndUser(_0x22e57c,_0x24997e[_0x4c2b('0x71')],_0x24997e[_0x4c2b('0x72')],_0x250688);})[_0x4c2b('0x2f')](function(_0x337e9e){_0x402d71=_0x337e9e;logger['info'](_0x4c2b('0x63'),_0x402d71['id']);return getTicket(_0x22e57c,_0x89cae7,_0x402d71,_0x23f059,_0x24997e,_0x23f059[_0x4c2b('0x64')],_0x250688,'Outbound');})[_0x4c2b('0x2f')](function(_0x6b0978){_0x29c11c=_0x6b0978;logger[_0x4c2b('0xd')]('Ticket\x20created!');logger[_0x4c2b('0xd')]('The\x20Ticket\x20ID\x20is:',_0x29c11c['id']);return setRelationship(_0x250688,_0x89cae7,_0x29c11c,_0x4c2b('0x66'));})['then'](function(){return setRelationship(_0x250688,_0x402d71,_0x29c11c,_0x4c2b('0x73'));})[_0x4c2b('0x2f')](function(){return getServerInfo(_0x250688);})[_0x4c2b('0x2f')](function(_0x208987){var _0x5f2b4a=parseInt(_0x208987[_0x4c2b('0x67')][_0x4c2b('0x68')](0x0));var _0x523fcf=util[_0x4c2b('0x24')](_0x4c2b('0x69'),_0x22e57c['remoteUri'],_0x29c11c['id']);if(_0x5f2b4a>0x6){_0x523fcf=util[_0x4c2b('0x24')](_0x4c2b('0x6a'),_0x22e57c['remoteUri'],_0x29c11c['id']);}logger[_0x4c2b('0xd')](_0x4c2b('0x70'),_0x4c2b('0x6b'));emit(util['format'](_0x4c2b('0x6c'),_0x28b990[_0x4c2b('0xf')]),'trigger:browser:url',{'uri':_0x523fcf});})[_0x4c2b('0x74')](function(_0x1a2a5c){logger[_0x4c2b('0x6e')]('[OUTBOUND]',JSON['stringify'](_0x1a2a5c));});};exports['abandoned']=function(_0x5d28c1,_0x111b9d,_0x284e14,_0xbabf02,_0x32069d,_0x38a737){var _0x2c3376,_0x25910e,_0x4fc878,_0x1c40f4;_0x38a737['remoteUri']=intUtil[_0x4c2b('0x58')](_0x38a737[_0x4c2b('0x56')]);_0x38a737['serverUrl']=intUtil[_0x4c2b('0x58')](_0x38a737[_0x4c2b('0x57')]);def[_0x4c2b('0x59')]=util[_0x4c2b('0x24')]('%s/service/v4_1/rest.php',_0x38a737[_0x4c2b('0x56')]);if(_0x32069d&&_0x32069d[_0x4c2b('0x5b')]){logger[_0x4c2b('0xd')](_0x4c2b('0x75'),_0x4c2b('0x5d'));_0x111b9d[_0x4c2b('0x5f')]=util[_0x4c2b('0x24')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x38a737[_0x4c2b('0x57')],_0x111b9d[_0x4c2b('0x5e')],md5(_0x111b9d['uniqueid']));}else{_0x111b9d[_0x4c2b('0x5f')]='';}return getConnection(_0x38a737)[_0x4c2b('0x2f')](function(_0x430880){_0x1c40f4=_0x430880;if(!_[_0x4c2b('0x29')](_0xbabf02)){return getUser(_0x38a737,_0xbabf02[_0x4c2b('0xf')],_0x1c40f4);}else{return getUser(_0x38a737,null,_0x1c40f4);}})['then'](function(_0x43d83f){_0x2c3376=_0x43d83f;logger['info'](_0x4c2b('0x60'),_0x2c3376['id']);return getEndUser(_0x38a737,_0x111b9d[_0x4c2b('0x61')],_0x111b9d[_0x4c2b('0x62')],_0x1c40f4);})[_0x4c2b('0x2f')](function(_0x4cdb3c){_0x25910e=_0x4cdb3c;logger[_0x4c2b('0xd')](_0x4c2b('0x63'),_0x25910e['id']);return getTicket(_0x38a737,_0x2c3376,_0x25910e,_0x284e14,_0x111b9d,_0x284e14[_0x4c2b('0x64')],_0x1c40f4,_0x4c2b('0x76'));})[_0x4c2b('0x2f')](function(_0x87b04c){_0x4fc878=_0x87b04c;logger[_0x4c2b('0xd')]('Ticket\x20created!');logger['info'](_0x4c2b('0x65'),_0x4fc878['id']);return setRelationship(_0x1c40f4,_0x2c3376,_0x4fc878,_0x4c2b('0x66'));})['then'](function(){return setRelationship(_0x1c40f4,_0x25910e,_0x4fc878,_0x4c2b('0x73'));})[_0x4c2b('0x2f')](function(){return getServerInfo(_0x1c40f4);})[_0x4c2b('0x74')](function(_0x3c2093){logger[_0x4c2b('0x6e')](_0x4c2b('0x75'),JSON[_0x4c2b('0x39')](_0x3c2093));});};
\ No newline at end of file
+var _0x743d=['Fields','Inbound','Ticket\x20created!','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','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','catch','error','outbound','recordingFormat','destcalleridname','destcalleridnum','The\x20Enduser\x20ID\x20is:','Outbound','user:%s','abandoned','[ABANDONED]','isNil','calleridname','bluebird','util','ioredis','../../../../config/environment','../../../../config/logger','sugarcrm','redis','defaults','localhost','socket.io-emitter','POST','emit','Creating\x20new\x20ticket...','getString','assigned_user_id','created_by','description','Descriptions','toISOString','replace','duration_hours','duration_minutes','parent_id','Contacts','parent_name','name','length','variableName','push','idField','set_entry','JSON','stringify','Calls','format','Basic\x20%s','apiKey','get_server_info','info','Getting\x20agent\x20with\x20name','get_entry_list','Employees','INSTR\x20(\x20users.user_name,\x20\x22%s\x22)\x20>\x200','user_name','then','entry_list','find','name_value_list','Agent\x20found!','resolve','value','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','user_id','Agent\x20not\x20available,\x20using\x20the\x20admin\x20account!','Searching\x20enduser\x20with\x20phone','contacts.phone_home\x20=\x20\x22%s\x22','phone_home','Enduser\x20found!','first_name','<unknown>','debug','[HTTP]','type','nameField','customField','toLowerCase','content','toString','string','variable','custom_fields','customVariable','Variable','login','username','xCALLY\x20Motion\x20integration','sessionID','Account\x20%d\x20is\x20not\x20valid','set_relationship','queue','remoteUri','stripTrailingSlash','serverUrl','uri','%s/service/v4_1/rest.php','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','The\x20User\x20ID\x20is:','calleridnum'];(function(_0x40bead,_0x480ccc){var _0x2829fa=function(_0x445181){while(--_0x445181){_0x40bead['push'](_0x40bead['shift']());}};_0x2829fa(++_0x480ccc);}(_0x743d,0x105));var _0xd743=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x743d[_0x19e35c];return _0x3e1fe8;};'use strict';var _=require('lodash');var rp=require('request-promise');var BPromise=require(_0xd743('0x0'));var md5=require('md5');var util=require(_0xd743('0x1'));var Redis=require(_0xd743('0x2'));var intUtil=require('./util');var config=require(_0xd743('0x3'));var logger=require(_0xd743('0x4'))(_0xd743('0x5'));config[_0xd743('0x6')]=_[_0xd743('0x7')](config[_0xd743('0x6')],{'host':_0xd743('0x8'),'port':0x18eb});var io=require(_0xd743('0x9'))(new Redis(config[_0xd743('0x6')]));var def={'method':_0xd743('0xa'),'json':!![]};function emit(_0x5e998a,_0x33ab6b,_0x2d2e52){io['to'](_0x5e998a)[_0xd743('0xb')](_0x33ab6b,_0x2d2e52);}function getTicket(_0x54d78f,_0x1c1368,_0x181c24,_0x306987,_0x51f2b9,_0x56870a,_0x5cd327,_0x325965){logger['info'](_0xd743('0xc'));var _0x4b3f75=new Date();var _0x326b04=[{'name':'name','value':intUtil[_0xd743('0xd')](_0x306987['Subjects'],_0x51f2b9,'\x20')},{'name':_0xd743('0xe'),'value':_0x1c1368['id']},{'name':_0xd743('0xf'),'value':_0x1c1368['id']},{'name':_0xd743('0x10'),'value':intUtil[_0xd743('0xd')](_0x306987[_0xd743('0x11')],_0x51f2b9,'\x0a')},{'name':'date_start','value':_0x4b3f75[_0xd743('0x12')]()['slice'](0x0,0x13)[_0xd743('0x13')]('T','\x20')},{'name':_0xd743('0x14'),'value':'0'},{'name':_0xd743('0x15'),'value':'15'},{'name':_0xd743('0x16'),'value':_0x181c24['id']},{'name':'parent_type','value':_0xd743('0x17')},{'name':_0xd743('0x18'),'value':_0x181c24[_0xd743('0x19')]},{'name':'direction','value':_0x325965}];if(_0x56870a[_0xd743('0x1a')]){_['forEach'](_0x56870a,function(_0x46dbf6){if(_0x51f2b9[_0x46dbf6[_0xd743('0x1b')]]){_0x326b04[_0xd743('0x1c')]({'name':_0x46dbf6[_0xd743('0x1d')],'value':_0x51f2b9[_0x46dbf6['variableName']]});}});}return request({'form':{'method':_0xd743('0x1e'),'input_type':_0xd743('0x1f'),'response_type':_0xd743('0x1f'),'rest_data':JSON[_0xd743('0x20')]({'session':_0x5cd327['id'],'module_name':_0xd743('0x21'),'name_value_list':_0x326b04})}});}function getAuth(_0xfe35c1){return util[_0xd743('0x22')](_0xd743('0x23'),new Buffer(_0xfe35c1[_0xd743('0x24')]+':X')['toString']('base64'));}function getServerInfo(_0x113a4b){return request({'form':{'method':_0xd743('0x25'),'input_type':_0xd743('0x1f'),'response_type':'JSON','rest_data':JSON[_0xd743('0x20')]({'session':_0x113a4b['id']})}});}function getUser(_0x16bf6f,_0x2649ac,_0x3fe1d9){if(!_['isNil'](_0x2649ac)){logger[_0xd743('0x26')](_0xd743('0x27'),_0x2649ac);return request({'form':{'method':_0xd743('0x28'),'input_type':_0xd743('0x1f'),'response_type':'JSON','rest_data':JSON[_0xd743('0x20')]({'session':_0x3fe1d9['id'],'module_name':_0xd743('0x29'),'query':util[_0xd743('0x22')](_0xd743('0x2a'),_0x2649ac),'order_by':'','offset':'0','select_fields':['id',_0xd743('0x19'),_0xd743('0x2b')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})[_0xd743('0x2c')](function(_0x15b906){if(_0x15b906[_0xd743('0x2d')][_0xd743('0x1a')]){var _0x42900b=_[_0xd743('0x2e')](_0x15b906[_0xd743('0x2d')],function(_0x1b869e){return _0x1b869e[_0xd743('0x2f')][_0xd743('0x2b')]['value']===_0x2649ac;});if(_0x42900b){logger['info'](_0xd743('0x30'));return BPromise[_0xd743('0x31')]({'id':_0x42900b[_0xd743('0x2f')]['id'][_0xd743('0x32')],'name':_0x42900b[_0xd743('0x2f')][_0xd743('0x19')][_0xd743('0x32')]});}}logger[_0xd743('0x26')](_0xd743('0x33'));return BPromise[_0xd743('0x31')]({'id':_0x3fe1d9['name_value_list'][_0xd743('0x34')][_0xd743('0x32')],'name':_0x3fe1d9[_0xd743('0x2f')][_0xd743('0x2b')][_0xd743('0x32')]});});}else{logger['info'](_0xd743('0x35'));return BPromise['resolve']({'id':_0x3fe1d9[_0xd743('0x2f')][_0xd743('0x34')][_0xd743('0x32')],'name':_0x3fe1d9[_0xd743('0x2f')][_0xd743('0x2b')][_0xd743('0x32')]});}}function getEndUser(_0x120c6d,_0x3fe88e,_0x40170f,_0xee9067){logger['info'](_0xd743('0x36'),_0x40170f);return request({'form':{'method':'get_entry_list','input_type':_0xd743('0x1f'),'response_type':'JSON','rest_data':JSON['stringify']({'session':_0xee9067['id'],'module_name':_0xd743('0x17'),'query':util[_0xd743('0x22')](_0xd743('0x37'),_0x40170f),'order_by':'','offset':'0','select_fields':['id',_0xd743('0x19'),'phone_home'],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})[_0xd743('0x2c')](function(_0x39f2bd){if(_0x39f2bd[_0xd743('0x2d')][_0xd743('0x1a')]){var _0xc2439d=_[_0xd743('0x2e')](_0x39f2bd['entry_list'],function(_0x71d74d){return _0x71d74d[_0xd743('0x2f')][_0xd743('0x38')][_0xd743('0x32')]===_0x40170f;});if(_0xc2439d){logger[_0xd743('0x26')](_0xd743('0x39'));return BPromise[_0xd743('0x31')]({'id':_0xc2439d['name_value_list']['id'][_0xd743('0x32')],'name':_0xc2439d[_0xd743('0x2f')][_0xd743('0x19')][_0xd743('0x32')],'phone':_0xc2439d['name_value_list']['phone_home'][_0xd743('0x32')]});}}else{logger[_0xd743('0x26')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'form':{'method':_0xd743('0x1e'),'input_type':_0xd743('0x1f'),'response_type':_0xd743('0x1f'),'rest_data':JSON[_0xd743('0x20')]({'session':_0xee9067['id'],'module_name':_0xd743('0x17'),'name_value_list':[{'name':_0xd743('0x3a'),'value':_0x3fe88e!==_0xd743('0x3b')?_0x3fe88e:util[_0xd743('0x22')]('Caller\x20-\x20%s',_0x40170f)},{'name':_0xd743('0x38'),'value':_0x40170f}]})}})[_0xd743('0x2c')](function(_0x2cc869){logger['info']('Enduser\x20created.');return BPromise[_0xd743('0x31')]({'id':_0x2cc869['id'],'name':_0x2cc869[_0xd743('0x2d')][_0xd743('0x3a')][_0xd743('0x32')],'phone':_0x2cc869['entry_list'][_0xd743('0x38')][_0xd743('0x32')]});});}});}function request(_0x3f0426){logger[_0xd743('0x3c')](_0xd743('0x3d'),JSON['stringify'](_0x3f0426));return rp(_['merge'](def,_0x3f0426));}function getTags(_0x1d7685,_0x94f6e6){var _0x3c626d=[];if(_0x1d7685&&_0x1d7685[_0xd743('0x1a')]>0x0){_0x3c626d=_['map'](_0x1d7685,_0x94f6e6);}return _0x3c626d;}function getCustomFields(_0x56c858,_0x43d4f8){var _0x5dd4fd=[];var _0x218ae2={'custom_fields':[]};if(_0x56c858['length']>0x0){_['forEach'](_0x56c858,function(_0x4d5eff){if(_0x4d5eff[_0xd743('0x3e')]==='string'&&_0x4d5eff[_0xd743('0x3f')]&&!_0x4d5eff[_0xd743('0x40')]){_0x218ae2[_0x4d5eff[_0xd743('0x3f')][_0xd743('0x41')]()]=_0x4d5eff[_0xd743('0x42')][_0xd743('0x43')]();}else if(_0x4d5eff['type']===_0xd743('0x44')&&_0x4d5eff['idField']&&_0x4d5eff[_0xd743('0x40')]){_0x218ae2['custom_fields'][_0xd743('0x1c')]({'id':_0x4d5eff[_0xd743('0x1d')],'value':_0x4d5eff[_0xd743('0x42')][_0xd743('0x43')]()});}else if(_0x4d5eff['type']===_0xd743('0x45')&&_0x4d5eff[_0xd743('0x1b')]&&_0x4d5eff[_0xd743('0x1d')]&&_0x4d5eff[_0xd743('0x40')]){_0x43d4f8[_0x4d5eff['variableName']]&&_0x218ae2[_0xd743('0x46')][_0xd743('0x1c')]({'id':_0x4d5eff[_0xd743('0x1d')],'value':_0x43d4f8[_0x4d5eff['variableName']][_0xd743('0x43')]()});}else if(_0x4d5eff[_0xd743('0x3e')]===_0xd743('0x47')&&_0x4d5eff[_0xd743('0x48')]&&_0x4d5eff[_0xd743('0x48')][_0xd743('0x19')]&&_0x4d5eff[_0xd743('0x1d')]&&_0x4d5eff[_0xd743('0x40')]){_0x43d4f8[_0x4d5eff[_0xd743('0x48')]['name'][_0xd743('0x41')]()]&&_0x218ae2[_0xd743('0x46')][_0xd743('0x1c')]({'id':_0x4d5eff[_0xd743('0x1d')],'value':_0x43d4f8[_0x4d5eff[_0xd743('0x48')][_0xd743('0x19')][_0xd743('0x41')]()][_0xd743('0x43')]()});}});}return _0x218ae2;}function getConnection(_0x1f104e){return request({'method':_0xd743('0xa'),'form':{'method':_0xd743('0x49'),'input_type':_0xd743('0x1f'),'response_type':_0xd743('0x1f'),'rest_data':JSON[_0xd743('0x20')]({'user_auth':{'user_name':_0x1f104e[_0xd743('0x4a')],'password':_0x1f104e['password'],'encryption':'PLAIN'},'application':_0xd743('0x4b')})}})[_0xd743('0x2c')](function(_0x2f5e37){var _0x272ef7=_0x2f5e37;if(_0x272ef7['id']){def[_0xd743('0x4c')]=_0x272ef7['id'];return BPromise[_0xd743('0x31')](_0x272ef7);}else{throw new Error(util['format'](_0xd743('0x4d'),_0x1f104e['id']));}});}function setRelationship(_0x2dbc98,_0x14eb83,_0xa8167,_0x40f534){return request({'form':{'method':_0xd743('0x4e'),'input_type':_0xd743('0x1f'),'response_type':_0xd743('0x1f'),'rest_data':JSON['stringify']({'session':_0x2dbc98['id'],'module_name':_0xd743('0x21'),'module_id':_0xa8167['id'],'link_field_name':_0x40f534,'related_ids':[_0x14eb83['id']]})}});}exports[_0xd743('0x4f')]=function(_0x437c96,_0x1fdbb9,_0xf3b473,_0x31fc3c,_0x2d21f9,_0x2ecafa){var _0x7cb2c6,_0x4b0caa,_0x6b3258,_0x26e88f;_0x2ecafa[_0xd743('0x50')]=intUtil[_0xd743('0x51')](_0x2ecafa[_0xd743('0x50')]);_0x2ecafa[_0xd743('0x52')]=intUtil['stripTrailingSlash'](_0x2ecafa['serverUrl']);def[_0xd743('0x53')]=util[_0xd743('0x22')](_0xd743('0x54'),_0x2ecafa[_0xd743('0x50')]);if(_0x2d21f9&&_0x2d21f9[_0xd743('0x55')]){logger[_0xd743('0x26')](_0xd743('0x56'),_0xd743('0x57'));_0x1fdbb9[_0xd743('0x58')]=util['format'](_0xd743('0x59'),_0x2ecafa[_0xd743('0x52')],_0x1fdbb9[_0xd743('0x5a')],md5(_0x1fdbb9[_0xd743('0x5a')]));}else{_0x1fdbb9[_0xd743('0x58')]='';}return getConnection(_0x2ecafa)[_0xd743('0x2c')](function(_0x4373dd){_0x26e88f=_0x4373dd;return getUser(_0x2ecafa,_0x31fc3c['name'],_0x26e88f);})[_0xd743('0x2c')](function(_0x46d750){_0x7cb2c6=_0x46d750;logger[_0xd743('0x26')](_0xd743('0x5b'),_0x7cb2c6['id']);return getEndUser(_0x2ecafa,_0x1fdbb9['calleridname'],_0x1fdbb9[_0xd743('0x5c')],_0x26e88f);})[_0xd743('0x2c')](function(_0x1fbb14){_0x4b0caa=_0x1fbb14;logger[_0xd743('0x26')]('The\x20Enduser\x20ID\x20is:',_0x4b0caa['id']);return getTicket(_0x2ecafa,_0x7cb2c6,_0x4b0caa,_0xf3b473,_0x1fdbb9,_0xf3b473[_0xd743('0x5d')],_0x26e88f,_0xd743('0x5e'));})[_0xd743('0x2c')](function(_0x162132){_0x6b3258=_0x162132;logger[_0xd743('0x26')](_0xd743('0x5f'));logger[_0xd743('0x26')](_0xd743('0x60'),_0x6b3258['id']);return setRelationship(_0x26e88f,_0x7cb2c6,_0x6b3258,_0xd743('0x61'));})['then'](function(){return setRelationship(_0x26e88f,_0x4b0caa,_0x6b3258,_0xd743('0x62'));})[_0xd743('0x2c')](function(){return getServerInfo(_0x26e88f);})[_0xd743('0x2c')](function(_0x2d7d88){var _0x3962fa=parseInt(_0x2d7d88[_0xd743('0x63')][_0xd743('0x64')](0x0));var _0x49962e=util['format'](_0xd743('0x65'),_0x2ecafa[_0xd743('0x50')],_0x6b3258['id']);if(_0x3962fa>0x6){_0x49962e=util[_0xd743('0x22')](_0xd743('0x66'),_0x2ecafa[_0xd743('0x50')],_0x6b3258['id']);}logger['info'](_0xd743('0x56'),_0xd743('0x67'));emit(util[_0xd743('0x22')]('user:%s',_0x31fc3c[_0xd743('0x19')]),_0xd743('0x68'),{'uri':_0x49962e});})[_0xd743('0x69')](function(_0x40b03b){logger[_0xd743('0x6a')](_0xd743('0x56'),JSON['stringify'](_0x40b03b));});};exports[_0xd743('0x6b')]=function(_0x1b61d6,_0xb31ae7,_0x59ab49,_0x566b45,_0x1d85c1,_0xa8b329,_0x2b76b6){var _0x5dd275,_0x56c3c5,_0x213be3,_0x3b3234;_0xa8b329[_0xd743('0x50')]=intUtil[_0xd743('0x51')](_0xa8b329[_0xd743('0x50')]);_0xa8b329[_0xd743('0x52')]=intUtil['stripTrailingSlash'](_0xa8b329[_0xd743('0x52')]);def[_0xd743('0x53')]=util[_0xd743('0x22')](_0xd743('0x54'),_0xa8b329[_0xd743('0x50')]);if(_0x2b76b6&&_0x2b76b6['recordingFormat']&&_0x2b76b6[_0xd743('0x6c')]!=='none'){logger[_0xd743('0x26')]('[OUTBOUND]',_0xd743('0x57'));_0xb31ae7['recordingURL']=util[_0xd743('0x22')](_0xd743('0x59'),_0xa8b329[_0xd743('0x52')],_0xb31ae7[_0xd743('0x5a')],md5(_0xb31ae7[_0xd743('0x5a')]));}return getConnection(_0xa8b329)[_0xd743('0x2c')](function(_0x11c49c){_0x3b3234=_0x11c49c;return getUser(_0xa8b329,_0x566b45[_0xd743('0x19')],_0x3b3234);})[_0xd743('0x2c')](function(_0x3acb65){_0x5dd275=_0x3acb65;logger[_0xd743('0x26')](_0xd743('0x5b'),_0x5dd275['id']);return getEndUser(_0xa8b329,_0xb31ae7[_0xd743('0x6d')],_0xb31ae7[_0xd743('0x6e')],_0x3b3234);})[_0xd743('0x2c')](function(_0x3debf7){_0x56c3c5=_0x3debf7;logger[_0xd743('0x26')](_0xd743('0x6f'),_0x56c3c5['id']);return getTicket(_0xa8b329,_0x5dd275,_0x56c3c5,_0x59ab49,_0xb31ae7,_0x59ab49['Fields'],_0x3b3234,_0xd743('0x70'));})['then'](function(_0x3ba86c){_0x213be3=_0x3ba86c;logger[_0xd743('0x26')]('Ticket\x20created!');logger[_0xd743('0x26')](_0xd743('0x60'),_0x213be3['id']);return setRelationship(_0x3b3234,_0x5dd275,_0x213be3,_0xd743('0x61'));})[_0xd743('0x2c')](function(){return setRelationship(_0x3b3234,_0x56c3c5,_0x213be3,'contacts');})[_0xd743('0x2c')](function(){return getServerInfo(_0x3b3234);})[_0xd743('0x2c')](function(_0x46a43d){var _0x357e44=parseInt(_0x46a43d[_0xd743('0x63')][_0xd743('0x64')](0x0));var _0x390443=util['format'](_0xd743('0x65'),_0xa8b329[_0xd743('0x50')],_0x213be3['id']);if(_0x357e44>0x6){_0x390443=util[_0xd743('0x22')](_0xd743('0x66'),_0xa8b329[_0xd743('0x50')],_0x213be3['id']);}logger[_0xd743('0x26')]('[OUTBOUND]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0xd743('0x22')](_0xd743('0x71'),_0x566b45[_0xd743('0x19')]),_0xd743('0x68'),{'uri':_0x390443});})[_0xd743('0x69')](function(_0x3d2b33){logger['error']('[OUTBOUND]',JSON['stringify'](_0x3d2b33));});};exports[_0xd743('0x72')]=function(_0x17427e,_0x371193,_0x2d576d,_0x199be3,_0x2ce568,_0x417bd9){var _0x3ddecd,_0x356ffb,_0xdbca7e,_0x4d234f;_0x417bd9[_0xd743('0x50')]=intUtil[_0xd743('0x51')](_0x417bd9[_0xd743('0x50')]);_0x417bd9[_0xd743('0x52')]=intUtil[_0xd743('0x51')](_0x417bd9[_0xd743('0x52')]);def[_0xd743('0x53')]=util[_0xd743('0x22')](_0xd743('0x54'),_0x417bd9['remoteUri']);if(_0x2ce568&&_0x2ce568['monitor_format']){logger[_0xd743('0x26')](_0xd743('0x73'),_0xd743('0x57'));_0x371193[_0xd743('0x58')]=util[_0xd743('0x22')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x417bd9[_0xd743('0x52')],_0x371193[_0xd743('0x5a')],md5(_0x371193[_0xd743('0x5a')]));}else{_0x371193['recordingURL']='';}return getConnection(_0x417bd9)['then'](function(_0x592c33){_0x4d234f=_0x592c33;if(!_[_0xd743('0x74')](_0x199be3)){return getUser(_0x417bd9,_0x199be3['name'],_0x4d234f);}else{return getUser(_0x417bd9,null,_0x4d234f);}})['then'](function(_0xaee693){_0x3ddecd=_0xaee693;logger['info']('The\x20User\x20ID\x20is:',_0x3ddecd['id']);return getEndUser(_0x417bd9,_0x371193[_0xd743('0x75')],_0x371193[_0xd743('0x5c')],_0x4d234f);})[_0xd743('0x2c')](function(_0x60bfbb){_0x356ffb=_0x60bfbb;logger[_0xd743('0x26')](_0xd743('0x6f'),_0x356ffb['id']);return getTicket(_0x417bd9,_0x3ddecd,_0x356ffb,_0x2d576d,_0x371193,_0x2d576d['Fields'],_0x4d234f,_0xd743('0x5e'));})['then'](function(_0x1c98fe){_0xdbca7e=_0x1c98fe;logger[_0xd743('0x26')](_0xd743('0x5f'));logger[_0xd743('0x26')](_0xd743('0x60'),_0xdbca7e['id']);return setRelationship(_0x4d234f,_0x3ddecd,_0xdbca7e,_0xd743('0x61'));})[_0xd743('0x2c')](function(){return setRelationship(_0x4d234f,_0x356ffb,_0xdbca7e,_0xd743('0x62'));})['then'](function(){return getServerInfo(_0x4d234f);})[_0xd743('0x69')](function(_0x20b94b){logger['error'](_0xd743('0x73'),JSON['stringify'](_0x20b94b));});};
\ No newline at end of file
index 94c1546..480aab3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c5c=['format','%s:\x20%s','keyContent','join','stripTrailingSlash','validateEmail','test','lodash','getString','length','sortBy','type','string','push','content','variable','variableName','toString','customVariable','Variable','name','toLowerCase','keyType','key'];(function(_0x2bce50,_0x325e7f){var _0x1180ad=function(_0x44fda5){while(--_0x44fda5){_0x2bce50['push'](_0x2bce50['shift']());}};_0x1180ad(++_0x325e7f);}(_0x1c5c,0x157));var _0xc1c5=function(_0x4f2030,_0x652130){_0x4f2030=_0x4f2030-0x0;var _0x25686f=_0x1c5c[_0x4f2030];return _0x25686f;};'use strict';var _=require(_0xc1c5('0x0'));var util=require('util');exports[_0xc1c5('0x1')]=function(_0x2662e5,_0x475459,_0xba0a4e){var _0x276db5=[];if(_0x2662e5[_0xc1c5('0x2')]>0x0){var _0x440792=_[_0xc1c5('0x3')](_0x2662e5,['id']);for(var _0x4b9eaa=0x0;_0x4b9eaa<_0x440792['length'];_0x4b9eaa++){var _0x145c51=_0x440792[_0x4b9eaa];if(_0x145c51[_0xc1c5('0x4')]===_0xc1c5('0x5')){_0x276db5[_0xc1c5('0x6')](_0x145c51[_0xc1c5('0x7')]);}else if(_0x145c51[_0xc1c5('0x4')]===_0xc1c5('0x8')&&_0x145c51[_0xc1c5('0x9')]){_0x475459[_0x145c51[_0xc1c5('0x9')]]&&_0x276db5[_0xc1c5('0x6')](_0x475459[_0x145c51['variableName']][_0xc1c5('0xa')]());}else if(_0x145c51['type']===_0xc1c5('0xb')&&_0x145c51[_0xc1c5('0xc')]&&_0x145c51[_0xc1c5('0xc')][_0xc1c5('0xd')]){_0x475459[_0x145c51[_0xc1c5('0xc')][_0xc1c5('0xd')][_0xc1c5('0xe')]()]&&_0x276db5[_0xc1c5('0x6')](_0x475459[_0x145c51[_0xc1c5('0xc')]['name'][_0xc1c5('0xe')]()][_0xc1c5('0xa')]());}else if(_0x145c51['type']==='keyValue'){if(_0x145c51[_0xc1c5('0xf')]==='string'&&_0x145c51[_0xc1c5('0x10')]){_0x276db5[_0xc1c5('0x6')](util[_0xc1c5('0x11')](_0xc1c5('0x12'),_0x145c51[_0xc1c5('0x10')],_0x145c51[_0xc1c5('0x13')]));}else if(_0x145c51[_0xc1c5('0xf')]===_0xc1c5('0x8')&&_0x145c51[_0xc1c5('0x9')]&&_0x145c51[_0xc1c5('0x10')]){_0x475459[_0x145c51['variableName']]&&_0x276db5[_0xc1c5('0x6')](util[_0xc1c5('0x11')](_0xc1c5('0x12'),_0x145c51[_0xc1c5('0x10')],_0x475459[_0x145c51['variableName']]));}else if(_0x145c51['keyType']===_0xc1c5('0xb')&&_0x145c51[_0xc1c5('0xc')]&&_0x145c51[_0xc1c5('0xc')][_0xc1c5('0xd')]&&_0x145c51[_0xc1c5('0x10')]){_0x475459[_0x145c51[_0xc1c5('0xc')]['name'][_0xc1c5('0xe')]()]&&_0x276db5[_0xc1c5('0x6')](util[_0xc1c5('0x11')]('%s:\x20%s',_0x145c51['key'],_0x475459[_0x145c51[_0xc1c5('0xc')][_0xc1c5('0xd')][_0xc1c5('0xe')]()]));}}}}return _0x276db5[_0xc1c5('0x14')](_0xba0a4e);};exports[_0xc1c5('0x15')]=function(_0x1f4f4f){var _0xed12a4=_0x1f4f4f['slice'](-0x1);if(_0xed12a4==='/'){_0x1f4f4f=_0x1f4f4f['substring'](0x0,_0x1f4f4f['lastIndexOf'](_0xed12a4));}return _0x1f4f4f;};exports[_0xc1c5('0x16')]=function(_0x25fea0){if(!_['isNil'](_0x25fea0)&&_0x25fea0!==''){var _0x38a83b=/^(([^<>()\[\]\\.,;:\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 _0x38a83b[_0xc1c5('0x17')](String(_0x25fea0)[_0xc1c5('0xe')]());}else{return![];}};
\ No newline at end of file
+var _0x1b4e=['toLowerCase','name','toString','keyValue','keyType','key','format','%s:\x20%s','keyContent','join','stripTrailingSlash','substring','validateEmail','isNil','lodash','util','getString','length','sortBy','type','string','push','content','variable','variableName','customVariable','Variable'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x1b4e,0x137));var _0xe1b4=function(_0x59f637,_0x455669){_0x59f637=_0x59f637-0x0;var _0x770e29=_0x1b4e[_0x59f637];return _0x770e29;};'use strict';var _=require(_0xe1b4('0x0'));var util=require(_0xe1b4('0x1'));exports[_0xe1b4('0x2')]=function(_0xc80d09,_0x9bf960,_0x3ef233){var _0x18e1c0=[];if(_0xc80d09[_0xe1b4('0x3')]>0x0){var _0x21f9de=_[_0xe1b4('0x4')](_0xc80d09,['id']);for(var _0x306c95=0x0;_0x306c95<_0x21f9de[_0xe1b4('0x3')];_0x306c95++){var _0x42e131=_0x21f9de[_0x306c95];if(_0x42e131[_0xe1b4('0x5')]===_0xe1b4('0x6')){_0x18e1c0[_0xe1b4('0x7')](_0x42e131[_0xe1b4('0x8')]);}else if(_0x42e131['type']===_0xe1b4('0x9')&&_0x42e131[_0xe1b4('0xa')]){_0x9bf960[_0x42e131[_0xe1b4('0xa')]]&&_0x18e1c0[_0xe1b4('0x7')](_0x9bf960[_0x42e131[_0xe1b4('0xa')]]['toString']());}else if(_0x42e131[_0xe1b4('0x5')]===_0xe1b4('0xb')&&_0x42e131[_0xe1b4('0xc')]&&_0x42e131[_0xe1b4('0xc')]['name']){_0x9bf960[_0x42e131[_0xe1b4('0xc')]['name'][_0xe1b4('0xd')]()]&&_0x18e1c0[_0xe1b4('0x7')](_0x9bf960[_0x42e131['Variable'][_0xe1b4('0xe')]['toLowerCase']()][_0xe1b4('0xf')]());}else if(_0x42e131[_0xe1b4('0x5')]===_0xe1b4('0x10')){if(_0x42e131[_0xe1b4('0x11')]==='string'&&_0x42e131[_0xe1b4('0x12')]){_0x18e1c0[_0xe1b4('0x7')](util[_0xe1b4('0x13')](_0xe1b4('0x14'),_0x42e131['key'],_0x42e131[_0xe1b4('0x15')]));}else if(_0x42e131['keyType']==='variable'&&_0x42e131[_0xe1b4('0xa')]&&_0x42e131[_0xe1b4('0x12')]){_0x9bf960[_0x42e131[_0xe1b4('0xa')]]&&_0x18e1c0[_0xe1b4('0x7')](util[_0xe1b4('0x13')](_0xe1b4('0x14'),_0x42e131['key'],_0x9bf960[_0x42e131[_0xe1b4('0xa')]]));}else if(_0x42e131[_0xe1b4('0x11')]==='customVariable'&&_0x42e131[_0xe1b4('0xc')]&&_0x42e131[_0xe1b4('0xc')]['name']&&_0x42e131[_0xe1b4('0x12')]){_0x9bf960[_0x42e131[_0xe1b4('0xc')]['name'][_0xe1b4('0xd')]()]&&_0x18e1c0[_0xe1b4('0x7')](util[_0xe1b4('0x13')](_0xe1b4('0x14'),_0x42e131['key'],_0x9bf960[_0x42e131[_0xe1b4('0xc')][_0xe1b4('0xe')]['toLowerCase']()]));}}}}return _0x18e1c0[_0xe1b4('0x16')](_0x3ef233);};exports[_0xe1b4('0x17')]=function(_0x443372){var _0x112486=_0x443372['slice'](-0x1);if(_0x112486==='/'){_0x443372=_0x443372[_0xe1b4('0x18')](0x0,_0x443372['lastIndexOf'](_0x112486));}return _0x443372;};exports[_0xe1b4('0x19')]=function(_0x482631){if(!_[_0xe1b4('0x1a')](_0x482631)&&_0x482631!==''){var _0x3f816e=/^(([^<>()\[\]\\.,;:\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 _0x3f816e['test'](String(_0x482631)[_0xe1b4('0xd')]());}else{return![];}};
\ No newline at end of file
index 8e12081..3597404 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x823c=['[HTTP]','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','serverUrl','uniqueid','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','%s/index.php?module=HelpDesk&view=Detail&record=%s&app=SUPPORT','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','stripTrailingSlash','recordingFormat','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','destcalleridname','destcalleridnum','Fields','[OUTBOUND]','abandoned','[ABANDONED]','The\x20Enduser\x20ID\x20is:','lodash','bluebird','md5','util','ioredis','./util','../../../../config/environment','vTiger','redis','defaults','localhost','emit','length','type','string','idField','content','variable','variableName','toString','customVariable','Variable','name','toLowerCase','info','merge','Normal','getString','Subjects','Descriptions','POST','%s/webservice.php','admin','sessionName','stringify','then','success','resolve','result','format','Ticket\x20could\x20not\x20be\x20created\x20due\x20to:\x20%s','error','[vTiger],\x20%s,\x20%s,\x20%s','createTicket','validateEmail','Getting\x20agent\x20with\x20email','GET','remoteUri','query','SELECT\x20first_name,\x20last_name,\x20email1\x20FROM\x20Users\x20WHERE\x20email1=\x27%s\x27;','Agent\x20found!','email1','first_name','last_name','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','userId','username','catch','statusCode','getUser','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','Enduser\x20created.','phone','getEndUser','accessKey','getchallenge','login','token'];(function(_0x3a228f,_0x365a34){var _0x168f58=function(_0x387c71){while(--_0x387c71){_0x3a228f['push'](_0x3a228f['shift']());}};_0x168f58(++_0x365a34);}(_0x823c,0x143));var _0xc823=function(_0x31efee,_0x8ae533){_0x31efee=_0x31efee-0x0;var _0x5497fa=_0x823c[_0x31efee];return _0x5497fa;};'use strict';var _=require(_0xc823('0x0'));var rp=require('request-promise');var BPromise=require(_0xc823('0x1'));var md5=require(_0xc823('0x2'));var util=require(_0xc823('0x3'));var Redis=require(_0xc823('0x4'));var intUtil=require(_0xc823('0x5'));var config=require(_0xc823('0x6'));var logger=require('../../../../config/logger')(_0xc823('0x7'));config[_0xc823('0x8')]=_[_0xc823('0x9')](config[_0xc823('0x8')],{'host':_0xc823('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xc823('0x8')]));function emit(_0x472007,_0x5daab9,_0x52bb76){io['to'](_0x472007)[_0xc823('0xb')](_0x5daab9,_0x52bb76);}function getCustomFields(_0x39cc25,_0x53d48d){var _0x43bbd8={};if(_0x39cc25[_0xc823('0xc')]>0x0){_['forEach'](_0x39cc25,function(_0x4dbd5b){if(_0x4dbd5b[_0xc823('0xd')]===_0xc823('0xe')&&_0x4dbd5b[_0xc823('0xf')]){_0x43bbd8[_0x4dbd5b[_0xc823('0xf')]]=_0x4dbd5b[_0xc823('0x10')]['toString']();}else if(_0x4dbd5b[_0xc823('0xd')]===_0xc823('0x11')&&_0x4dbd5b[_0xc823('0x12')]&&_0x4dbd5b[_0xc823('0xf')]&&_0x53d48d[_0x4dbd5b[_0xc823('0x12')]]){_0x43bbd8[_0x4dbd5b[_0xc823('0xf')]]=_0x53d48d[_0x4dbd5b['variableName']][_0xc823('0x13')]();}else if(_0x4dbd5b[_0xc823('0xd')]===_0xc823('0x14')&&_0x4dbd5b[_0xc823('0x15')]&&_0x4dbd5b['Variable']['name']&&_0x4dbd5b['idField']&&_0x53d48d[_0x4dbd5b['Variable'][_0xc823('0x16')]['toLowerCase']()]){_0x43bbd8[_0x4dbd5b[_0xc823('0xf')]]=_0x53d48d[_0x4dbd5b[_0xc823('0x15')][_0xc823('0x16')][_0xc823('0x17')]()][_0xc823('0x13')]();}});}return _0x43bbd8;}function createTicket(_0x1aca6d,_0xfedc1d,_0x58b7c7,_0x42843e,_0x4a713a,_0xf52707,_0x3aa68f){logger[_0xc823('0x18')]('Creating\x20new\x20ticket...');var _0xf2fc30=_[_0xc823('0x19')]({'parent_id':'','assigned_user_id':_0xfedc1d['id'],'ticketpriorities':_0xc823('0x1a'),'ticketstatus':'Open','ticket_title':intUtil[_0xc823('0x1b')](_0x42843e[_0xc823('0x1c')],_0x4a713a,'\x20'),'description':intUtil[_0xc823('0x1b')](_0x42843e[_0xc823('0x1d')],_0x4a713a,'\x0a'),'contact_id':_0x58b7c7['id']},getCustomFields(_0xf52707,_0x4a713a));var _0x574c76={'method':_0xc823('0x1e'),'uri':util['format'](_0xc823('0x1f'),_0x1aca6d['remoteUri']),'form':{'operation':'create','username':_0xc823('0x20'),'sessionName':_0x3aa68f[_0xc823('0x21')],'elementType':'HelpDesk','element':JSON[_0xc823('0x22')](_0xf2fc30)},'json':!![]};return request(_0x574c76)[_0xc823('0x23')](function(_0x451f7a){if(_0x451f7a[_0xc823('0x24')]){return BPromise[_0xc823('0x25')]({'id':_0x451f7a[_0xc823('0x26')]['id']});}else{throw new Error(util[_0xc823('0x27')](_0xc823('0x28'),JSON[_0xc823('0x22')](_0x451f7a[_0xc823('0x29')])));}})['catch'](function(_0x3f175d){var _0x533560=_0x3f175d['statusCode']||0x1f4;logger[_0xc823('0x29')](_0xc823('0x2a'),_0xc823('0x2b'),_0x533560,JSON[_0xc823('0x22')](_0x3f175d));});}function getUser(_0x20d2b1,_0x182fcf,_0x1d20c6){if(intUtil[_0xc823('0x2c')](_0x182fcf)){logger[_0xc823('0x18')](_0xc823('0x2d'),_0x182fcf);return request({'method':_0xc823('0x2e'),'uri':util[_0xc823('0x27')](_0xc823('0x1f'),_0x20d2b1[_0xc823('0x2f')]),'qs':{'operation':_0xc823('0x30'),'username':'admin','sessionName':_0x1d20c6[_0xc823('0x21')],'query':util[_0xc823('0x27')](_0xc823('0x31'),_0x182fcf)},'json':!![]})[_0xc823('0x23')](function(_0x14db83){if(_0x14db83['success']&&_0x14db83['result']['length']){logger[_0xc823('0x18')](_0xc823('0x32'));return BPromise[_0xc823('0x25')]({'id':_0x14db83[_0xc823('0x26')][0x0]['id'],'email':_0x14db83['result'][0x0][_0xc823('0x33')],'name':_0x14db83[_0xc823('0x26')][0x0][_0xc823('0x34')]+'\x20'+_0x14db83[_0xc823('0x26')][_0xc823('0x35')]});}else{logger[_0xc823('0x18')](_0xc823('0x36'));return BPromise[_0xc823('0x25')]({'id':_0x1d20c6[_0xc823('0x37')],'email':_0x20d2b1[_0xc823('0x38')],'name':_0xc823('0x20')});}})[_0xc823('0x39')](function(_0x130869){var _0x51f745=_0x130869[_0xc823('0x3a')]||0x1f4;logger[_0xc823('0x29')](_0xc823('0x2a'),_0xc823('0x3b'),_0x51f745,JSON[_0xc823('0x22')](_0x130869));});}else{logger[_0xc823('0x18')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return BPromise[_0xc823('0x25')]({'id':_0x1d20c6[_0xc823('0x37')],'email':_0x20d2b1['username'],'name':_0xc823('0x20')})['catch'](function(_0x114045){var _0x970ceb=_0x114045['statusCode']||0x1f4;logger[_0xc823('0x29')](_0xc823('0x2a'),_0xc823('0x3b'),_0x970ceb,JSON[_0xc823('0x22')](_0x114045));});}}function getEndUser(_0x3a2977,_0x2c68fb,_0x1fb5a4,_0x51b2b3){logger['info']('Searching\x20end\x20user\x20with\x20phone',_0x1fb5a4);return request({'method':_0xc823('0x2e'),'uri':util[_0xc823('0x27')](_0xc823('0x1f'),_0x3a2977[_0xc823('0x2f')]),'qs':{'operation':_0xc823('0x30'),'username':'admin','sessionName':_0x51b2b3[_0xc823('0x21')],'query':util[_0xc823('0x27')](_0xc823('0x3c'),_0x1fb5a4,_0x1fb5a4,_0x1fb5a4,_0x1fb5a4,_0x1fb5a4)},'json':!![]})[_0xc823('0x23')](function(_0x5d6e9b){if(_0x5d6e9b['success']&&_0x5d6e9b['result'][_0xc823('0xc')]){logger[_0xc823('0x18')](_0xc823('0x3d'));return BPromise['resolve']({'id':_0x5d6e9b[_0xc823('0x26')][0x0]['id'],'name':_0x5d6e9b['result'][0x0][_0xc823('0x3e')]+'\x20'+_0x5d6e9b[_0xc823('0x26')][0x0][_0xc823('0x3f')],'phone':_0x1fb5a4});}else{logger[_0xc823('0x18')](_0xc823('0x40'));return request({'method':_0xc823('0x1e'),'uri':util[_0xc823('0x27')]('%s/webservice.php',_0x3a2977[_0xc823('0x2f')]),'form':{'operation':'create','sessionName':_0x51b2b3[_0xc823('0x21')],'elementType':_0xc823('0x41'),'element':JSON[_0xc823('0x22')]({'lastname':_0x2c68fb,'phone':_0x1fb5a4,'assigned_user_id':'\x20'})},'json':!![]})[_0xc823('0x23')](function(_0xa54cc1){logger[_0xc823('0x18')](_0xc823('0x42'));return BPromise[_0xc823('0x25')]({'id':_0xa54cc1['result']['id'],'name':_0xa54cc1[_0xc823('0x26')][_0xc823('0x3f')],'phone':_0xa54cc1['result'][_0xc823('0x43')]});})[_0xc823('0x39')](function(_0x2747c3){var _0x455cd0=_0x2747c3[_0xc823('0x3a')]||0x1f4;logger[_0xc823('0x29')](_0xc823('0x2a'),_0xc823('0x44'),_0x455cd0,JSON[_0xc823('0x22')](_0x2747c3));});}});}function getConnection(_0x51a0d3){var _0x153ca1=_0x51a0d3[_0xc823('0x38')];var _0x50515d=_0x51a0d3[_0xc823('0x45')];return request({'method':_0xc823('0x2e'),'uri':util['format'](_0xc823('0x1f'),_0x51a0d3['remoteUri']),'qs':{'operation':_0xc823('0x46'),'username':_0x153ca1},'json':!![]})[_0xc823('0x23')](function(_0x57f4c0){if(_0x57f4c0['success']){return request({'method':_0xc823('0x1e'),'uri':util[_0xc823('0x27')](_0xc823('0x1f'),_0x51a0d3[_0xc823('0x2f')]),'form':{'operation':_0xc823('0x47'),'username':_0xc823('0x20'),'accessKey':md5(_0x57f4c0[_0xc823('0x26')][_0xc823('0x48')]+_0x50515d)},'json':!![]});}})['then'](function(_0x2051e7){if(_0x2051e7[_0xc823('0x24')]){return BPromise['resolve'](_0x2051e7['result']);}else{throw new Error(util[_0xc823('0x27')]('Account\x20%d\x20is\x20not\x20valid',_0x51a0d3['id']));}})['catch'](function(_0x5c3217){var _0x4e1046=_0x5c3217['statusCode']||0x1f4;logger['error'](_0xc823('0x2a'),'getConnection',_0x4e1046,JSON['stringify'](_0x5c3217));});}function request(_0x3683bd){logger['info'](_0xc823('0x49'),JSON[_0xc823('0x22')](_0x3683bd));return rp(_0x3683bd);}exports['queue']=function(_0x43ae9f,_0x1d960c,_0xb29171,_0x5d8b9e,_0x564ef5,_0x304e71){var _0x11dfe8,_0x5bbf90,_0x23a1aa,_0x2c9a53;_0x304e71[_0xc823('0x2f')]=intUtil['stripTrailingSlash'](_0x304e71[_0xc823('0x2f')]);if(_0x564ef5&&_0x564ef5[_0xc823('0x4a')]){logger[_0xc823('0x18')](_0xc823('0x4b'),_0xc823('0x4c'));_0x1d960c[_0xc823('0x4d')]=util[_0xc823('0x27')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x304e71[_0xc823('0x4e')],_0x1d960c[_0xc823('0x4f')],md5(_0x1d960c[_0xc823('0x4f')]));}else{_0x1d960c[_0xc823('0x4d')]='';}return getConnection(_0x304e71)[_0xc823('0x23')](function(_0x31ba31){_0x2c9a53=_0x31ba31;return getUser(_0x304e71,_0x5d8b9e[_0xc823('0x50')],_0x2c9a53);})['then'](function(_0x219c6d){_0x11dfe8=_0x219c6d;logger[_0xc823('0x18')](_0xc823('0x51'),_0x11dfe8['id']);return getEndUser(_0x304e71,_0x1d960c[_0xc823('0x52')],_0x1d960c[_0xc823('0x53')],_0x2c9a53);})[_0xc823('0x23')](function(_0x52adbb){_0x5bbf90=_0x52adbb;logger[_0xc823('0x18')]('The\x20Enduser\x20ID\x20is:',_0x5bbf90['id']);return createTicket(_0x304e71,_0x11dfe8,_0x5bbf90,_0xb29171,_0x1d960c,_0xb29171['Fields'],_0x2c9a53);})['then'](function(_0x421c36){_0x23a1aa=_0x421c36;logger['info'](_0xc823('0x54'));logger['info'](_0xc823('0x55'),_0x23a1aa['id']);var _0x100447=util['format'](_0xc823('0x56'),_0x304e71['remoteUri'],_['split'](_0x23a1aa['id'],'x')[0x1]);logger[_0xc823('0x18')]('[QUEUE]',_0xc823('0x57'));emit(util['format'](_0xc823('0x58'),_0x5d8b9e[_0xc823('0x16')]),'trigger:browser:url',{'uri':_0x100447});})[_0xc823('0x39')](function(_0x1d9689){logger[_0xc823('0x29')](_0xc823('0x4b'),JSON['stringify'](_0x1d9689));});};exports['outbound']=function(_0x54d0b5,_0x4cb43e,_0x2240de,_0x2befd0,_0x1823f2,_0x204c69,_0xbcdd30){var _0x5cf8c7,_0x38ea06,_0x4e4191,_0x164e2a;_0x204c69[_0xc823('0x2f')]=intUtil['stripTrailingSlash'](_0x204c69[_0xc823('0x2f')]);_0x204c69['serverUrl']=intUtil[_0xc823('0x59')](_0x204c69[_0xc823('0x4e')]);if(_0xbcdd30&&_0xbcdd30[_0xc823('0x5a')]&&_0xbcdd30[_0xc823('0x5a')]!=='none'){logger['info']('[OUTBOUND]','Recording\x20is\x20enabled!');_0x4cb43e['recordingURL']=util[_0xc823('0x27')](_0xc823('0x5b'),_0x204c69['serverUrl'],_0x4cb43e['uniqueid'],md5(_0x4cb43e[_0xc823('0x4f')]));}return getConnection(_0x204c69)[_0xc823('0x23')](function(_0x4333fa){_0x164e2a=_0x4333fa;return getUser(_0x204c69,_0x2befd0[_0xc823('0x50')],_0x164e2a);})[_0xc823('0x23')](function(_0x3f0385){_0x5cf8c7=_0x3f0385;logger[_0xc823('0x18')]('The\x20User\x20ID\x20is:',_0x5cf8c7['id']);return getEndUser(_0x204c69,_0x4cb43e[_0xc823('0x5c')],_0x4cb43e[_0xc823('0x5d')],_0x164e2a);})[_0xc823('0x23')](function(_0x4ac00f){_0x38ea06=_0x4ac00f;logger['info']('The\x20Enduser\x20ID\x20is:',_0x38ea06['id']);return createTicket(_0x204c69,_0x5cf8c7,_0x38ea06,_0x2240de,_0x4cb43e,_0x2240de[_0xc823('0x5e')],_0x164e2a);})[_0xc823('0x23')](function(_0x47ad0c){_0x4e4191=_0x47ad0c;logger[_0xc823('0x18')](_0xc823('0x54'));logger[_0xc823('0x18')](_0xc823('0x55'),_0x4e4191['id']);var _0x478cd1=util[_0xc823('0x27')](_0xc823('0x56'),_0x204c69[_0xc823('0x2f')],_['split'](_0x4e4191['id'],'x')[0x1]);logger[_0xc823('0x18')](_0xc823('0x5f'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0xc823('0x27')](_0xc823('0x58'),_0x2befd0['name']),'trigger:browser:url',{'uri':_0x478cd1});})['catch'](function(_0x415f10){logger[_0xc823('0x29')]('[OUTBOUND]',JSON[_0xc823('0x22')](_0x415f10));});};exports[_0xc823('0x60')]=function(_0x318f96,_0x3b9346,_0x140834,_0x29e02d,_0x5e1e27,_0xe838f0){var _0x483908,_0x53bf28,_0x2d9efb,_0x48c43f;_0xe838f0[_0xc823('0x2f')]=intUtil[_0xc823('0x59')](_0xe838f0[_0xc823('0x2f')]);_0xe838f0[_0xc823('0x4e')]=intUtil[_0xc823('0x59')](_0xe838f0[_0xc823('0x4e')]);if(_0x5e1e27&&_0x5e1e27[_0xc823('0x4a')]){logger['info'](_0xc823('0x61'),_0xc823('0x4c'));_0x3b9346[_0xc823('0x4d')]=util[_0xc823('0x27')](_0xc823('0x5b'),_0xe838f0['serverUrl'],_0x3b9346[_0xc823('0x4f')],md5(_0x3b9346[_0xc823('0x4f')]));}else{_0x3b9346[_0xc823('0x4d')]='';}return getConnection(_0xe838f0)[_0xc823('0x23')](function(_0x42406b){_0x48c43f=_0x42406b;return getUser(_0xe838f0,'',_0x48c43f);})['then'](function(_0x310f3e){_0x483908=_0x310f3e;logger[_0xc823('0x18')](_0xc823('0x51'),_0x483908['id']);return getEndUser(_0xe838f0,_0x3b9346[_0xc823('0x52')],_0x3b9346['calleridnum'],_0x48c43f);})[_0xc823('0x23')](function(_0x3f534f){_0x53bf28=_0x3f534f;logger[_0xc823('0x18')](_0xc823('0x62'),_0x53bf28['id']);return createTicket(_0xe838f0,_0x483908,_0x53bf28,_0x140834,_0x3b9346,_0x140834[_0xc823('0x5e')],_0x48c43f);})[_0xc823('0x23')](function(_0x58f745){_0x2d9efb=_0x58f745;logger[_0xc823('0x18')]('Ticket\x20created!');logger[_0xc823('0x18')](_0xc823('0x55'),_0x2d9efb['id']);})[_0xc823('0x39')](function(_0x4a227b){logger[_0xc823('0x29')](_0xc823('0x61'),JSON[_0xc823('0x22')](_0x4a227b));});};
\ No newline at end of file
+var _0xb627=['stripTrailingSlash','monitor_format','[QUEUE]','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','serverUrl','uniqueid','email','The\x20User\x20ID\x20is:','Fields','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','%s/index.php?module=HelpDesk&view=Detail&record=%s&app=SUPPORT','split','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','recordingFormat','none','[OUTBOUND]','Recording\x20is\x20enabled!','destcalleridname','destcalleridnum','The\x20Enduser\x20ID\x20is:','user:%s','abandoned','calleridnum','[ABANDONED]','lodash','md5','ioredis','./util','../../../../config/environment','../../../../config/logger','vTiger','redis','defaults','localhost','forEach','type','string','idField','content','toString','variable','variableName','Variable','name','toLowerCase','info','Creating\x20new\x20ticket...','merge','Normal','Open','getString','Descriptions','POST','remoteUri','create','admin','then','success','resolve','result','Ticket\x20could\x20not\x20be\x20created\x20due\x20to:\x20%s','stringify','statusCode','error','[vTiger],\x20%s,\x20%s,\x20%s','createTicket','validateEmail','GET','format','%s/webservice.php','query','sessionName','SELECT\x20first_name,\x20last_name,\x20email1\x20FROM\x20Users\x20WHERE\x20email1=\x27%s\x27;','length','Agent\x20found!','email1','first_name','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','userId','catch','getUser','Searching\x20end\x20user\x20with\x20phone','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!','lastname','Contacts','Enduser\x20created.','getEndUser','username','accessKey','getchallenge','token','Account\x20%d\x20is\x20not\x20valid','getConnection','[HTTP]','queue'];(function(_0x1d1d09,_0x504d77){var _0x8827e=function(_0x4f3128){while(--_0x4f3128){_0x1d1d09['push'](_0x1d1d09['shift']());}};_0x8827e(++_0x504d77);}(_0xb627,0x144));var _0x7b62=function(_0x1563c8,_0x5d6de8){_0x1563c8=_0x1563c8-0x0;var _0x4df5e5=_0xb627[_0x1563c8];return _0x4df5e5;};'use strict';var _=require(_0x7b62('0x0'));var rp=require('request-promise');var BPromise=require('bluebird');var md5=require(_0x7b62('0x1'));var util=require('util');var Redis=require(_0x7b62('0x2'));var intUtil=require(_0x7b62('0x3'));var config=require(_0x7b62('0x4'));var logger=require(_0x7b62('0x5'))(_0x7b62('0x6'));config[_0x7b62('0x7')]=_[_0x7b62('0x8')](config['redis'],{'host':_0x7b62('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x7b62('0x7')]));function emit(_0x264cfa,_0x4ae3ef,_0x30652e){io['to'](_0x264cfa)['emit'](_0x4ae3ef,_0x30652e);}function getCustomFields(_0x29a0b4,_0x379d07){var _0x1e1fd0={};if(_0x29a0b4['length']>0x0){_[_0x7b62('0xa')](_0x29a0b4,function(_0xe5c80e){if(_0xe5c80e[_0x7b62('0xb')]===_0x7b62('0xc')&&_0xe5c80e[_0x7b62('0xd')]){_0x1e1fd0[_0xe5c80e[_0x7b62('0xd')]]=_0xe5c80e[_0x7b62('0xe')][_0x7b62('0xf')]();}else if(_0xe5c80e[_0x7b62('0xb')]===_0x7b62('0x10')&&_0xe5c80e[_0x7b62('0x11')]&&_0xe5c80e[_0x7b62('0xd')]&&_0x379d07[_0xe5c80e[_0x7b62('0x11')]]){_0x1e1fd0[_0xe5c80e['idField']]=_0x379d07[_0xe5c80e[_0x7b62('0x11')]]['toString']();}else if(_0xe5c80e[_0x7b62('0xb')]==='customVariable'&&_0xe5c80e[_0x7b62('0x12')]&&_0xe5c80e['Variable']['name']&&_0xe5c80e[_0x7b62('0xd')]&&_0x379d07[_0xe5c80e['Variable'][_0x7b62('0x13')][_0x7b62('0x14')]()]){_0x1e1fd0[_0xe5c80e[_0x7b62('0xd')]]=_0x379d07[_0xe5c80e['Variable'][_0x7b62('0x13')]['toLowerCase']()][_0x7b62('0xf')]();}});}return _0x1e1fd0;}function createTicket(_0x207f32,_0x4cc586,_0x10c323,_0x5d8a48,_0x1af762,_0x1501d0,_0x3cfbed){logger[_0x7b62('0x15')](_0x7b62('0x16'));var _0x5e4bea=_[_0x7b62('0x17')]({'parent_id':'','assigned_user_id':_0x4cc586['id'],'ticketpriorities':_0x7b62('0x18'),'ticketstatus':_0x7b62('0x19'),'ticket_title':intUtil[_0x7b62('0x1a')](_0x5d8a48['Subjects'],_0x1af762,'\x20'),'description':intUtil['getString'](_0x5d8a48[_0x7b62('0x1b')],_0x1af762,'\x0a'),'contact_id':_0x10c323['id']},getCustomFields(_0x1501d0,_0x1af762));var _0x2b0a21={'method':_0x7b62('0x1c'),'uri':util['format']('%s/webservice.php',_0x207f32[_0x7b62('0x1d')]),'form':{'operation':_0x7b62('0x1e'),'username':_0x7b62('0x1f'),'sessionName':_0x3cfbed['sessionName'],'elementType':'HelpDesk','element':JSON['stringify'](_0x5e4bea)},'json':!![]};return request(_0x2b0a21)[_0x7b62('0x20')](function(_0x36289c){if(_0x36289c[_0x7b62('0x21')]){return BPromise[_0x7b62('0x22')]({'id':_0x36289c[_0x7b62('0x23')]['id']});}else{throw new Error(util['format'](_0x7b62('0x24'),JSON[_0x7b62('0x25')](_0x36289c['error'])));}})['catch'](function(_0x33f7b6){var _0x26c00a=_0x33f7b6[_0x7b62('0x26')]||0x1f4;logger[_0x7b62('0x27')](_0x7b62('0x28'),_0x7b62('0x29'),_0x26c00a,JSON['stringify'](_0x33f7b6));});}function getUser(_0x1d009d,_0x1428c4,_0x5a20fb){if(intUtil[_0x7b62('0x2a')](_0x1428c4)){logger[_0x7b62('0x15')]('Getting\x20agent\x20with\x20email',_0x1428c4);return request({'method':_0x7b62('0x2b'),'uri':util[_0x7b62('0x2c')](_0x7b62('0x2d'),_0x1d009d['remoteUri']),'qs':{'operation':_0x7b62('0x2e'),'username':_0x7b62('0x1f'),'sessionName':_0x5a20fb[_0x7b62('0x2f')],'query':util[_0x7b62('0x2c')](_0x7b62('0x30'),_0x1428c4)},'json':!![]})[_0x7b62('0x20')](function(_0x296911){if(_0x296911[_0x7b62('0x21')]&&_0x296911[_0x7b62('0x23')][_0x7b62('0x31')]){logger[_0x7b62('0x15')](_0x7b62('0x32'));return BPromise[_0x7b62('0x22')]({'id':_0x296911['result'][0x0]['id'],'email':_0x296911[_0x7b62('0x23')][0x0][_0x7b62('0x33')],'name':_0x296911[_0x7b62('0x23')][0x0][_0x7b62('0x34')]+'\x20'+_0x296911[_0x7b62('0x23')]['last_name']});}else{logger['info'](_0x7b62('0x35'));return BPromise[_0x7b62('0x22')]({'id':_0x5a20fb[_0x7b62('0x36')],'email':_0x1d009d['username'],'name':_0x7b62('0x1f')});}})[_0x7b62('0x37')](function(_0x4d342c){var _0x17f6b0=_0x4d342c[_0x7b62('0x26')]||0x1f4;logger[_0x7b62('0x27')]('[vTiger],\x20%s,\x20%s,\x20%s',_0x7b62('0x38'),_0x17f6b0,JSON[_0x7b62('0x25')](_0x4d342c));});}else{logger['info'](_0x7b62('0x35'));return BPromise[_0x7b62('0x22')]({'id':_0x5a20fb[_0x7b62('0x36')],'email':_0x1d009d['username'],'name':_0x7b62('0x1f')})[_0x7b62('0x37')](function(_0x45bf81){var _0xc7d59f=_0x45bf81[_0x7b62('0x26')]||0x1f4;logger[_0x7b62('0x27')](_0x7b62('0x28'),_0x7b62('0x38'),_0xc7d59f,JSON[_0x7b62('0x25')](_0x45bf81));});}}function getEndUser(_0x362b0e,_0x46a546,_0x2cb05,_0x26d12e){logger[_0x7b62('0x15')](_0x7b62('0x39'),_0x2cb05);return request({'method':_0x7b62('0x2b'),'uri':util[_0x7b62('0x2c')](_0x7b62('0x2d'),_0x362b0e[_0x7b62('0x1d')]),'qs':{'operation':_0x7b62('0x2e'),'username':_0x7b62('0x1f'),'sessionName':_0x26d12e['sessionName'],'query':util['format'](_0x7b62('0x3a'),_0x2cb05,_0x2cb05,_0x2cb05,_0x2cb05,_0x2cb05)},'json':!![]})[_0x7b62('0x20')](function(_0x139390){if(_0x139390['success']&&_0x139390[_0x7b62('0x23')][_0x7b62('0x31')]){logger[_0x7b62('0x15')](_0x7b62('0x3b'));return BPromise[_0x7b62('0x22')]({'id':_0x139390['result'][0x0]['id'],'name':_0x139390['result'][0x0]['firstname']+'\x20'+_0x139390[_0x7b62('0x23')][0x0][_0x7b62('0x3c')],'phone':_0x2cb05});}else{logger[_0x7b62('0x15')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'method':'POST','uri':util[_0x7b62('0x2c')](_0x7b62('0x2d'),_0x362b0e[_0x7b62('0x1d')]),'form':{'operation':'create','sessionName':_0x26d12e[_0x7b62('0x2f')],'elementType':_0x7b62('0x3d'),'element':JSON[_0x7b62('0x25')]({'lastname':_0x46a546,'phone':_0x2cb05,'assigned_user_id':'\x20'})},'json':!![]})['then'](function(_0x210620){logger['info'](_0x7b62('0x3e'));return BPromise[_0x7b62('0x22')]({'id':_0x210620['result']['id'],'name':_0x210620[_0x7b62('0x23')][_0x7b62('0x3c')],'phone':_0x210620[_0x7b62('0x23')]['phone']});})[_0x7b62('0x37')](function(_0x5da1d0){var _0x172cac=_0x5da1d0['statusCode']||0x1f4;logger[_0x7b62('0x27')](_0x7b62('0x28'),_0x7b62('0x3f'),_0x172cac,JSON['stringify'](_0x5da1d0));});}});}function getConnection(_0x2b5fba){var _0x161dd1=_0x2b5fba[_0x7b62('0x40')];var _0x40213c=_0x2b5fba[_0x7b62('0x41')];return request({'method':_0x7b62('0x2b'),'uri':util[_0x7b62('0x2c')](_0x7b62('0x2d'),_0x2b5fba[_0x7b62('0x1d')]),'qs':{'operation':_0x7b62('0x42'),'username':_0x161dd1},'json':!![]})[_0x7b62('0x20')](function(_0x1eac90){if(_0x1eac90[_0x7b62('0x21')]){return request({'method':_0x7b62('0x1c'),'uri':util[_0x7b62('0x2c')](_0x7b62('0x2d'),_0x2b5fba['remoteUri']),'form':{'operation':'login','username':_0x7b62('0x1f'),'accessKey':md5(_0x1eac90['result'][_0x7b62('0x43')]+_0x40213c)},'json':!![]});}})['then'](function(_0x24c107){if(_0x24c107[_0x7b62('0x21')]){return BPromise[_0x7b62('0x22')](_0x24c107[_0x7b62('0x23')]);}else{throw new Error(util['format'](_0x7b62('0x44'),_0x2b5fba['id']));}})[_0x7b62('0x37')](function(_0x17c2f){var _0x4b1ced=_0x17c2f['statusCode']||0x1f4;logger['error'](_0x7b62('0x28'),_0x7b62('0x45'),_0x4b1ced,JSON[_0x7b62('0x25')](_0x17c2f));});}function request(_0x417703){logger[_0x7b62('0x15')](_0x7b62('0x46'),JSON[_0x7b62('0x25')](_0x417703));return rp(_0x417703);}exports[_0x7b62('0x47')]=function(_0xbf4a39,_0x100a83,_0x4c1359,_0x22204b,_0x58cc2e,_0x2313e2){var _0x13c7eb,_0x39d087,_0x5eb7f0,_0x4ef821;_0x2313e2['remoteUri']=intUtil[_0x7b62('0x48')](_0x2313e2[_0x7b62('0x1d')]);if(_0x58cc2e&&_0x58cc2e[_0x7b62('0x49')]){logger[_0x7b62('0x15')](_0x7b62('0x4a'),'Recording\x20is\x20enabled!');_0x100a83[_0x7b62('0x4b')]=util[_0x7b62('0x2c')](_0x7b62('0x4c'),_0x2313e2[_0x7b62('0x4d')],_0x100a83['uniqueid'],md5(_0x100a83[_0x7b62('0x4e')]));}else{_0x100a83[_0x7b62('0x4b')]='';}return getConnection(_0x2313e2)[_0x7b62('0x20')](function(_0xb716f){_0x4ef821=_0xb716f;return getUser(_0x2313e2,_0x22204b[_0x7b62('0x4f')],_0x4ef821);})[_0x7b62('0x20')](function(_0x32874b){_0x13c7eb=_0x32874b;logger[_0x7b62('0x15')](_0x7b62('0x50'),_0x13c7eb['id']);return getEndUser(_0x2313e2,_0x100a83['calleridname'],_0x100a83['calleridnum'],_0x4ef821);})['then'](function(_0x35a76e){_0x39d087=_0x35a76e;logger[_0x7b62('0x15')]('The\x20Enduser\x20ID\x20is:',_0x39d087['id']);return createTicket(_0x2313e2,_0x13c7eb,_0x39d087,_0x4c1359,_0x100a83,_0x4c1359[_0x7b62('0x51')],_0x4ef821);})[_0x7b62('0x20')](function(_0x2a51cb){_0x5eb7f0=_0x2a51cb;logger[_0x7b62('0x15')](_0x7b62('0x52'));logger[_0x7b62('0x15')](_0x7b62('0x53'),_0x5eb7f0['id']);var _0x491d58=util[_0x7b62('0x2c')](_0x7b62('0x54'),_0x2313e2[_0x7b62('0x1d')],_[_0x7b62('0x55')](_0x5eb7f0['id'],'x')[0x1]);logger[_0x7b62('0x15')](_0x7b62('0x4a'),_0x7b62('0x56'));emit(util['format']('user:%s',_0x22204b[_0x7b62('0x13')]),_0x7b62('0x57'),{'uri':_0x491d58});})[_0x7b62('0x37')](function(_0x5996e0){logger[_0x7b62('0x27')](_0x7b62('0x4a'),JSON[_0x7b62('0x25')](_0x5996e0));});};exports['outbound']=function(_0x5e65f6,_0x1c179e,_0x2ccff9,_0x5f4dea,_0x27d0bc,_0xf70461,_0x24cf69){var _0x579a8f,_0x10f6c2,_0x516f76,_0x45cd54;_0xf70461[_0x7b62('0x1d')]=intUtil[_0x7b62('0x48')](_0xf70461[_0x7b62('0x1d')]);_0xf70461[_0x7b62('0x4d')]=intUtil[_0x7b62('0x48')](_0xf70461[_0x7b62('0x4d')]);if(_0x24cf69&&_0x24cf69[_0x7b62('0x58')]&&_0x24cf69[_0x7b62('0x58')]!==_0x7b62('0x59')){logger[_0x7b62('0x15')](_0x7b62('0x5a'),_0x7b62('0x5b'));_0x1c179e['recordingURL']=util[_0x7b62('0x2c')](_0x7b62('0x4c'),_0xf70461[_0x7b62('0x4d')],_0x1c179e['uniqueid'],md5(_0x1c179e['uniqueid']));}return getConnection(_0xf70461)[_0x7b62('0x20')](function(_0x4fff55){_0x45cd54=_0x4fff55;return getUser(_0xf70461,_0x5f4dea['email'],_0x45cd54);})[_0x7b62('0x20')](function(_0x2e1f58){_0x579a8f=_0x2e1f58;logger[_0x7b62('0x15')](_0x7b62('0x50'),_0x579a8f['id']);return getEndUser(_0xf70461,_0x1c179e[_0x7b62('0x5c')],_0x1c179e[_0x7b62('0x5d')],_0x45cd54);})[_0x7b62('0x20')](function(_0x25d5f9){_0x10f6c2=_0x25d5f9;logger[_0x7b62('0x15')](_0x7b62('0x5e'),_0x10f6c2['id']);return createTicket(_0xf70461,_0x579a8f,_0x10f6c2,_0x2ccff9,_0x1c179e,_0x2ccff9[_0x7b62('0x51')],_0x45cd54);})[_0x7b62('0x20')](function(_0x4b531d){_0x516f76=_0x4b531d;logger[_0x7b62('0x15')]('Ticket\x20created!');logger[_0x7b62('0x15')](_0x7b62('0x53'),_0x516f76['id']);var _0x4fe420=util[_0x7b62('0x2c')]('%s/index.php?module=HelpDesk&view=Detail&record=%s&app=SUPPORT',_0xf70461[_0x7b62('0x1d')],_['split'](_0x516f76['id'],'x')[0x1]);logger[_0x7b62('0x15')](_0x7b62('0x5a'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x7b62('0x2c')](_0x7b62('0x5f'),_0x5f4dea[_0x7b62('0x13')]),_0x7b62('0x57'),{'uri':_0x4fe420});})[_0x7b62('0x37')](function(_0x5454d8){logger[_0x7b62('0x27')](_0x7b62('0x5a'),JSON['stringify'](_0x5454d8));});};exports[_0x7b62('0x60')]=function(_0x2c1e73,_0x17f01a,_0x5be555,_0x30a323,_0x23b337,_0x19e234){var _0x366a1c,_0x450194,_0x107506,_0x5c8bfd;_0x19e234[_0x7b62('0x1d')]=intUtil['stripTrailingSlash'](_0x19e234[_0x7b62('0x1d')]);_0x19e234[_0x7b62('0x4d')]=intUtil[_0x7b62('0x48')](_0x19e234[_0x7b62('0x4d')]);if(_0x23b337&&_0x23b337[_0x7b62('0x49')]){logger[_0x7b62('0x15')]('[ABANDONED]',_0x7b62('0x5b'));_0x17f01a[_0x7b62('0x4b')]=util[_0x7b62('0x2c')](_0x7b62('0x4c'),_0x19e234['serverUrl'],_0x17f01a[_0x7b62('0x4e')],md5(_0x17f01a[_0x7b62('0x4e')]));}else{_0x17f01a[_0x7b62('0x4b')]='';}return getConnection(_0x19e234)[_0x7b62('0x20')](function(_0x143dbd){_0x5c8bfd=_0x143dbd;return getUser(_0x19e234,'',_0x5c8bfd);})[_0x7b62('0x20')](function(_0x52cc4d){_0x366a1c=_0x52cc4d;logger[_0x7b62('0x15')](_0x7b62('0x50'),_0x366a1c['id']);return getEndUser(_0x19e234,_0x17f01a['calleridname'],_0x17f01a[_0x7b62('0x61')],_0x5c8bfd);})['then'](function(_0x48796e){_0x450194=_0x48796e;logger[_0x7b62('0x15')]('The\x20Enduser\x20ID\x20is:',_0x450194['id']);return createTicket(_0x19e234,_0x366a1c,_0x450194,_0x5be555,_0x17f01a,_0x5be555[_0x7b62('0x51')],_0x5c8bfd);})[_0x7b62('0x20')](function(_0x24ecdf){_0x107506=_0x24ecdf;logger[_0x7b62('0x15')]('Ticket\x20created!');logger[_0x7b62('0x15')](_0x7b62('0x53'),_0x107506['id']);})[_0x7b62('0x37')](function(_0x12c371){logger['error'](_0x7b62('0x62'),JSON[_0x7b62('0x25')](_0x12c371));});};
\ No newline at end of file
index 8696590..2f0f5d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7b99=['%s/token:%s','token','Basic\x20%s','toString','base64','[HTTP]','stringify','GET','length','type','nameField','toLowerCase','string','idField','customField','push','content','variable','variableName','custom_fields','Variable','queue','stripTrailingSlash','serverUrl','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','newTab','user:%s','trigger:browser:url','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','outbound','recordingFormat','The\x20User\x20ID\x20is:','destcalleridname','destcalleridnum','[OUTBOUND]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','inspect','abandoned','calleridname','[ABANDONED]\x20Error\x20running\x20Zendesk\x20integration','lodash','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','zendesk','redis','defaults','localhost','application/json','info','Creating\x20new\x20ticket...','%s/tickets.json','POST','merge','Tags','name','getString','Fields','then','ticket','validateEmail','Getting\x20agent\x20with\x20email','format','%s/search.json','remoteUri','Agent\x20found!','find','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','user','Admin\x20account\x20selected.','Searching\x20enduser\x20with\x20phone','type:user\x20role:end-user\x20phone:%s','filter','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','end-user','Enduser\x20created.','authType','%s:%s','username','password'];(function(_0x5982a5,_0x3dc07b){var _0x159c80=function(_0x274c92){while(--_0x274c92){_0x5982a5['push'](_0x5982a5['shift']());}};_0x159c80(++_0x3dc07b);}(_0x7b99,0x9e));var _0x97b9=function(_0x17d9e3,_0x1f969c){_0x17d9e3=_0x17d9e3-0x0;var _0x14192d=_0x7b99[_0x17d9e3];return _0x14192d;};'use strict';var _=require(_0x97b9('0x0'));var rp=require('request-promise');var md5=require(_0x97b9('0x1'));var util=require(_0x97b9('0x2'));var Redis=require(_0x97b9('0x3'));var intUtil=require(_0x97b9('0x4'));var config=require(_0x97b9('0x5'));var logger=require(_0x97b9('0x6'))(_0x97b9('0x7'));config[_0x97b9('0x8')]=_[_0x97b9('0x9')](config[_0x97b9('0x8')],{'host':_0x97b9('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x97b9('0x8')]));function emit(_0x304f10,_0x7b0e2a,_0x3d2447){io['to'](_0x304f10)['emit'](_0x7b0e2a,_0x3d2447);}var headers={'Content-Type':_0x97b9('0xb'),'Accept':_0x97b9('0xb')};function getTicket(_0x2a0273,_0x48eb7f,_0x353444,_0x548099,_0x5ec025){logger[_0x97b9('0xc')](_0x97b9('0xd'));return request({'uri':util['format'](_0x97b9('0xe'),_0x2a0273['remoteUri']),'method':_0x97b9('0xf'),'body':{'ticket':_[_0x97b9('0x10')]({'requester_id':_0x353444['id'],'submitter_id':_0x48eb7f?_0x48eb7f['id']:undefined,'assignee_id':_0x48eb7f?_0x48eb7f['id']:undefined,'tags':getTags(_0x548099[_0x97b9('0x11')],_0x97b9('0x12')),'subject':intUtil[_0x97b9('0x13')](_0x548099['Subjects'],_0x5ec025,'\x20'),'description':intUtil['getString'](_0x548099['Descriptions'],_0x5ec025,'\x0a'),'comment':{'public':![],'body':intUtil[_0x97b9('0x13')](_0x548099['Descriptions'],_0x5ec025,'\x0a')}},getCustomFields(_0x548099[_0x97b9('0x14')],_0x5ec025))}})[_0x97b9('0x15')](function(_0x8180a5){logger['info']('Ticket\x20created!');return _0x8180a5[_0x97b9('0x16')];});}function getUser(_0xe03b94,_0x360a15){if(intUtil[_0x97b9('0x17')](_0x360a15)){logger['info'](_0x97b9('0x18'),_0x360a15);return request({'uri':util[_0x97b9('0x19')](_0x97b9('0x1a'),_0xe03b94[_0x97b9('0x1b')]),'qs':{'query':util[_0x97b9('0x19')]('type:user\x20role:agent\x20email:%s',_0x360a15)}})['then'](function(_0x25d261){if(_0x25d261['count']){logger[_0x97b9('0xc')](_0x97b9('0x1c'));return _[_0x97b9('0x1d')](_0x25d261[_0x97b9('0x1e')],{'email':_0x360a15,'role':_0x97b9('0x1f')});}else{logger[_0x97b9('0xc')](_0x97b9('0x20'));return request({'uri':util['format'](_0x97b9('0x21'),_0xe03b94['remoteUri'])})[_0x97b9('0x15')](function(_0x2fe94e){logger[_0x97b9('0xc')]('Admin\x20account\x20selected.');return _0x2fe94e[_0x97b9('0x22')];});}});}else{logger[_0x97b9('0xc')](_0x97b9('0x20'));return request({'uri':util['format'](_0x97b9('0x21'),_0xe03b94['remoteUri'])})['then'](function(_0x307c3c){logger[_0x97b9('0xc')](_0x97b9('0x23'));return _0x307c3c[_0x97b9('0x22')];});}}function getEndUser(_0x433105,_0x56378c,_0x128b99){logger[_0x97b9('0xc')](_0x97b9('0x24'),_0x128b99);return request({'uri':util[_0x97b9('0x19')]('%s/search.json',_0x433105[_0x97b9('0x1b')]),'qs':{'query':util['format'](_0x97b9('0x25'),_0x128b99)}})['then'](function(_0x361c20){var _0x435655;if(_0x361c20[_0x97b9('0x1e')]['length']){_0x361c20[_0x97b9('0x1e')]=_[_0x97b9('0x26')](_0x361c20['results'],{'suspended':![],'role':'end-user'});if(_0x361c20['results']['length']){_0x435655=_['first'](_0x361c20[_0x97b9('0x1e')]);}}if(_0x435655){logger[_0x97b9('0xc')](_0x97b9('0x27'));return _0x435655;}else{logger[_0x97b9('0xc')](_0x97b9('0x28'));return request({'uri':util[_0x97b9('0x19')](_0x97b9('0x29'),_0x433105[_0x97b9('0x1b')]),'method':'POST','body':{'user':{'role':_0x97b9('0x2a'),'name':util[_0x97b9('0x19')]('Caller\x20-\x20%s',_0x56378c||_0x128b99),'phone':_0x128b99}}})[_0x97b9('0x15')](function(_0x4ac526){logger[_0x97b9('0xc')](_0x97b9('0x2b'));return _0x4ac526[_0x97b9('0x22')];});}});}function getAuth(_0x496ef6){var _0x147f6d;if(_0x496ef6[_0x97b9('0x2c')]==='password'){_0x147f6d=util[_0x97b9('0x19')](_0x97b9('0x2d'),_0x496ef6[_0x97b9('0x2e')],_0x496ef6[_0x97b9('0x2f')]);}else if(_0x496ef6[_0x97b9('0x2c')]==='token'){_0x147f6d=util['format'](_0x97b9('0x30'),_0x496ef6['username'],_0x496ef6[_0x97b9('0x31')]);}return util[_0x97b9('0x19')](_0x97b9('0x32'),new Buffer(_0x147f6d)[_0x97b9('0x33')](_0x97b9('0x34')));}function request(_0x5d62a0){logger['debug'](_0x97b9('0x35'),JSON[_0x97b9('0x36')](_0x5d62a0));return rp(_[_0x97b9('0x9')](_0x5d62a0,{'method':_0x97b9('0x37'),'headers':headers,'json':!![]}));}function getTags(_0x248d89,_0x398dd0){var _0x3aa47f=[];if(_0x248d89&&_0x248d89[_0x97b9('0x38')]>0x0){_0x3aa47f=_['map'](_0x248d89,_0x398dd0);}return _0x3aa47f;}function getCustomFields(_0x2de8be,_0xe7d37f){var _0x18ef31=[];var _0x3a9446={'custom_fields':[]};if(_0x2de8be[_0x97b9('0x38')]>0x0){_['forEach'](_0x2de8be,function(_0x533bba){if(_0x533bba[_0x97b9('0x39')]==='string'&&_0x533bba[_0x97b9('0x3a')]&&!_0x533bba['customField']){_0x3a9446[_0x533bba[_0x97b9('0x3a')][_0x97b9('0x3b')]()]=_0x533bba['content'][_0x97b9('0x33')]();}else if(_0x533bba['type']===_0x97b9('0x3c')&&_0x533bba[_0x97b9('0x3d')]&&_0x533bba[_0x97b9('0x3e')]){_0x3a9446['custom_fields'][_0x97b9('0x3f')]({'id':_0x533bba[_0x97b9('0x3d')],'value':_0x533bba[_0x97b9('0x40')][_0x97b9('0x33')]()});}else if(_0x533bba['type']===_0x97b9('0x41')&&_0x533bba['variableName']&&_0x533bba[_0x97b9('0x3d')]&&_0x533bba[_0x97b9('0x3e')]){_0xe7d37f[_0x533bba[_0x97b9('0x42')]]&&_0x3a9446[_0x97b9('0x43')]['push']({'id':_0x533bba[_0x97b9('0x3d')],'value':_0xe7d37f[_0x533bba[_0x97b9('0x42')]]['toString']()});}else if(_0x533bba[_0x97b9('0x39')]==='customVariable'&&_0x533bba[_0x97b9('0x44')]&&_0x533bba[_0x97b9('0x44')][_0x97b9('0x12')]&&_0x533bba[_0x97b9('0x3d')]&&_0x533bba[_0x97b9('0x3e')]){_0xe7d37f[_0x533bba['Variable'][_0x97b9('0x12')][_0x97b9('0x3b')]()]&&_0x3a9446[_0x97b9('0x43')][_0x97b9('0x3f')]({'id':_0x533bba[_0x97b9('0x3d')],'value':_0xe7d37f[_0x533bba[_0x97b9('0x44')][_0x97b9('0x12')][_0x97b9('0x3b')]()]['toString']()});}});}return _0x3a9446;}exports[_0x97b9('0x45')]=function(_0x1edb39,_0x1c16f7,_0x4077e1,_0x14e442,_0x11091e,_0x4b4655){var _0x43f4fa,_0x17a21d;_0x4b4655[_0x97b9('0x1b')]=intUtil[_0x97b9('0x46')](_0x4b4655[_0x97b9('0x1b')]);_0x4b4655[_0x97b9('0x47')]=intUtil[_0x97b9('0x46')](_0x4b4655['serverUrl']);if(_0x11091e&&_0x11091e['monitor_format']){logger[_0x97b9('0xc')](_0x97b9('0x48'),_0x97b9('0x49'));_0x1c16f7[_0x97b9('0x4a')]=util[_0x97b9('0x19')](_0x97b9('0x4b'),_0x4b4655[_0x97b9('0x47')],_0x1c16f7['uniqueid'],md5(_0x1c16f7[_0x97b9('0x4c')]));}else{_0x1c16f7[_0x97b9('0x4a')]='';}headers[_0x97b9('0x4d')]=getAuth(_0x4b4655);return getUser(_0x4b4655,_0x14e442[_0x97b9('0x4e')])[_0x97b9('0x15')](function(_0x1345f3){_0x43f4fa=_0x1345f3;logger[_0x97b9('0xc')]('The\x20User\x20ID\x20is:',_0x43f4fa['id']);return getEndUser(_0x4b4655,_0x1c16f7['calleridname'],_0x1c16f7[_0x97b9('0x4f')]);})[_0x97b9('0x15')](function(_0x5f045f){_0x17a21d=_0x5f045f;logger[_0x97b9('0xc')](_0x97b9('0x50'),_0x17a21d['id']);return getTicket(_0x4b4655,_0x43f4fa,_0x17a21d,_0x4077e1,_0x1c16f7);})[_0x97b9('0x15')](function(_0xf809b9){if(_0xf809b9){logger[_0x97b9('0xc')](_0x97b9('0x51'),_0xf809b9['id']);switch(_0x4b4655[_0x97b9('0x39')]){case _0x97b9('0x52'):logger['info'](_0x97b9('0x48'),_0x97b9('0x53'));return request({'uri':util[_0x97b9('0x19')](_0x97b9('0x54'),_0x4b4655[_0x97b9('0x1b')],_0x43f4fa['id'],_0xf809b9['id']),'method':_0x97b9('0xf')});case _0x97b9('0x55'):logger[_0x97b9('0xc')](_0x97b9('0x48'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x97b9('0x19')](_0x97b9('0x56'),_0x14e442[_0x97b9('0x12')]),_0x97b9('0x57'),{'uri':util[_0x97b9('0x19')]('%s/agent/tickets/%s',_0x4b4655[_0x97b9('0x1b')],_0xf809b9['id'])});break;default:logger[_0x97b9('0x58')](_0x97b9('0x48'),_0x97b9('0x59'));}}})[_0x97b9('0x5a')](function(_0x4ce407){logger[_0x97b9('0x58')](_0x97b9('0x5b'),util['inspect'](_0x4ce407,{'showHidden':!![],'depth':null}));});};exports[_0x97b9('0x5c')]=function(_0x3d8eaf,_0x21f480,_0x194991,_0x25afdd,_0xf10328,_0x1e9ff4,_0x4029c9){var _0x2548bf,_0x3b795d;_0x1e9ff4[_0x97b9('0x1b')]=intUtil[_0x97b9('0x46')](_0x1e9ff4[_0x97b9('0x1b')]);_0x1e9ff4[_0x97b9('0x47')]=intUtil[_0x97b9('0x46')](_0x1e9ff4[_0x97b9('0x47')]);if(_0x4029c9&&_0x4029c9[_0x97b9('0x5d')]&&_0x4029c9['recordingFormat']!=='none'){logger[_0x97b9('0xc')]('[OUTBOUND]',_0x97b9('0x49'));_0x21f480[_0x97b9('0x4a')]=util['format'](_0x97b9('0x4b'),_0x1e9ff4[_0x97b9('0x47')],_0x21f480[_0x97b9('0x4c')],md5(_0x21f480[_0x97b9('0x4c')]));}headers[_0x97b9('0x4d')]=getAuth(_0x1e9ff4);return getUser(_0x1e9ff4,_0x25afdd[_0x97b9('0x4e')])['then'](function(_0x52627a){_0x2548bf=_0x52627a;logger['info'](_0x97b9('0x5e'),_0x2548bf['id']);return getEndUser(_0x1e9ff4,_0x21f480[_0x97b9('0x5f')],_0x21f480[_0x97b9('0x60')]);})[_0x97b9('0x15')](function(_0x163663){_0x3b795d=_0x163663;logger[_0x97b9('0xc')](_0x97b9('0x50'),_0x3b795d['id']);return getTicket(_0x1e9ff4,_0x2548bf,_0x3b795d,_0x194991,_0x21f480);})['then'](function(_0x1b4dde){if(_0x1b4dde){logger[_0x97b9('0xc')]('The\x20Ticket\x20ID\x20is:',_0x1b4dde['id']);switch(_0x1e9ff4[_0x97b9('0x39')]){case'integrationTab':logger[_0x97b9('0xc')](_0x97b9('0x61'),_0x97b9('0x53'));return request({'uri':util[_0x97b9('0x19')]('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x1e9ff4['remoteUri'],_0x2548bf['id'],_0x1b4dde['id']),'method':_0x97b9('0xf')});case _0x97b9('0x55'):logger[_0x97b9('0xc')](_0x97b9('0x61'),_0x97b9('0x62'));emit(util[_0x97b9('0x19')](_0x97b9('0x56'),_0x25afdd[_0x97b9('0x12')]),_0x97b9('0x57'),{'uri':util[_0x97b9('0x19')]('%s/agent/tickets/%s',_0x1e9ff4[_0x97b9('0x1b')],_0x1b4dde['id'])});break;default:logger[_0x97b9('0x58')](_0x97b9('0x61'),_0x97b9('0x59'));}}})[_0x97b9('0x5a')](function(_0x2e1d36){logger[_0x97b9('0x58')]('[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration',util[_0x97b9('0x63')](_0x2e1d36,{'showHidden':!![],'depth':null}));});};exports[_0x97b9('0x64')]=function(_0x215ca1,_0x2a5a01,_0x241195,_0x491a0c,_0x80080c,_0x43bd7f){var _0x14d154,_0x4d5a31;_0x43bd7f[_0x97b9('0x1b')]=intUtil[_0x97b9('0x46')](_0x43bd7f[_0x97b9('0x1b')]);_0x43bd7f[_0x97b9('0x47')]=intUtil[_0x97b9('0x46')](_0x43bd7f['serverUrl']);if(_0x80080c&&_0x80080c['monitor_format']){logger['info']('[ABANDONED]',_0x97b9('0x49'));_0x2a5a01['recordingURL']=util[_0x97b9('0x19')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x43bd7f[_0x97b9('0x47')],_0x2a5a01[_0x97b9('0x4c')],md5(_0x2a5a01[_0x97b9('0x4c')]));}else{_0x2a5a01[_0x97b9('0x4a')]='';}headers[_0x97b9('0x4d')]=getAuth(_0x43bd7f);return getUser(_0x43bd7f)[_0x97b9('0x15')](function(_0x3d44f5){_0x14d154=_0x3d44f5;logger['info'](_0x97b9('0x5e'),_0x14d154['id']);return getEndUser(_0x43bd7f,_0x2a5a01[_0x97b9('0x65')],_0x2a5a01[_0x97b9('0x4f')]);})[_0x97b9('0x15')](function(_0x4e673c){_0x4d5a31=_0x4e673c;logger[_0x97b9('0xc')]('The\x20Enduser\x20ID\x20is:',_0x4d5a31['id']);return getTicket(_0x43bd7f,_0x14d154,_0x4d5a31,_0x241195,_0x2a5a01);})[_0x97b9('0x15')](function(_0x5c124f){if(_0x5c124f){logger[_0x97b9('0xc')]('The\x20Ticket\x20ID\x20is:',_0x5c124f['id']);}})['catch'](function(_0x32ea96){logger[_0x97b9('0x58')](_0x97b9('0x66'),util[_0x97b9('0x63')](_0x32ea96,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
+var _0x548b=['stripTrailingSlash','serverUrl','monitor_format','Recording\x20is\x20enabled!','uniqueid','recordingURL','Authorization','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','[QUEUE]','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','%s/agent/tickets/%s','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','outbound','none','[OUTBOUND]','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','email','destcalleridnum','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','user:%s','trigger:browser:url','[ABANDONED]','lodash','md5','util','ioredis','./util','zendesk','redis','defaults','localhost','socket.io-emitter','emit','application/json','%s/tickets.json','remoteUri','POST','Tags','name','Subjects','getString','Descriptions','Fields','then','info','Getting\x20agent\x20with\x20email','%s/search.json','format','type:user\x20role:agent\x20email:%s','count','Agent\x20found!','find','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','user','Admin\x20account\x20selected.','Searching\x20enduser\x20with\x20phone','length','end-user','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','Caller\x20-\x20%s','password','authType','token','%s/token:%s','username','toString','base64','debug','[HTTP]','stringify','GET','map','forEach','string','customField','nameField','toLowerCase','content','idField','custom_fields','variable','variableName','type','Variable','push','queue'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0x548b,0x14f));var _0xb548=function(_0x3070df,_0x3b4528){_0x3070df=_0x3070df-0x0;var _0x5240d4=_0x548b[_0x3070df];return _0x5240d4;};'use strict';var _=require(_0xb548('0x0'));var rp=require('request-promise');var md5=require(_0xb548('0x1'));var util=require(_0xb548('0x2'));var Redis=require(_0xb548('0x3'));var intUtil=require(_0xb548('0x4'));var config=require('../../../../config/environment');var logger=require('../../../../config/logger')(_0xb548('0x5'));config[_0xb548('0x6')]=_[_0xb548('0x7')](config[_0xb548('0x6')],{'host':_0xb548('0x8'),'port':0x18eb});var io=require(_0xb548('0x9'))(new Redis(config[_0xb548('0x6')]));function emit(_0x235ca8,_0x37eac1,_0x1aee82){io['to'](_0x235ca8)[_0xb548('0xa')](_0x37eac1,_0x1aee82);}var headers={'Content-Type':'application/json','Accept':_0xb548('0xb')};function getTicket(_0x1e9a75,_0x14d205,_0x4afd2e,_0x29c118,_0x3d03d6){logger['info']('Creating\x20new\x20ticket...');return request({'uri':util['format'](_0xb548('0xc'),_0x1e9a75[_0xb548('0xd')]),'method':_0xb548('0xe'),'body':{'ticket':_['merge']({'requester_id':_0x4afd2e['id'],'submitter_id':_0x14d205?_0x14d205['id']:undefined,'assignee_id':_0x14d205?_0x14d205['id']:undefined,'tags':getTags(_0x29c118[_0xb548('0xf')],_0xb548('0x10')),'subject':intUtil['getString'](_0x29c118[_0xb548('0x11')],_0x3d03d6,'\x20'),'description':intUtil[_0xb548('0x12')](_0x29c118[_0xb548('0x13')],_0x3d03d6,'\x0a'),'comment':{'public':![],'body':intUtil['getString'](_0x29c118[_0xb548('0x13')],_0x3d03d6,'\x0a')}},getCustomFields(_0x29c118[_0xb548('0x14')],_0x3d03d6))}})[_0xb548('0x15')](function(_0x16822f){logger[_0xb548('0x16')]('Ticket\x20created!');return _0x16822f['ticket'];});}function getUser(_0x291d97,_0x50dc3e){if(intUtil['validateEmail'](_0x50dc3e)){logger['info'](_0xb548('0x17'),_0x50dc3e);return request({'uri':util['format'](_0xb548('0x18'),_0x291d97['remoteUri']),'qs':{'query':util[_0xb548('0x19')](_0xb548('0x1a'),_0x50dc3e)}})[_0xb548('0x15')](function(_0x521a3c){if(_0x521a3c[_0xb548('0x1b')]){logger[_0xb548('0x16')](_0xb548('0x1c'));return _[_0xb548('0x1d')](_0x521a3c[_0xb548('0x1e')],{'email':_0x50dc3e,'role':_0xb548('0x1f')});}else{logger['info'](_0xb548('0x20'));return request({'uri':util[_0xb548('0x19')](_0xb548('0x21'),_0x291d97[_0xb548('0xd')])})['then'](function(_0x24003b){logger['info']('Admin\x20account\x20selected.');return _0x24003b[_0xb548('0x22')];});}});}else{logger[_0xb548('0x16')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0xb548('0x19')](_0xb548('0x21'),_0x291d97['remoteUri'])})[_0xb548('0x15')](function(_0x14f677){logger[_0xb548('0x16')](_0xb548('0x23'));return _0x14f677[_0xb548('0x22')];});}}function getEndUser(_0x12f9e0,_0x519038,_0xd6505a){logger[_0xb548('0x16')](_0xb548('0x24'),_0xd6505a);return request({'uri':util['format'](_0xb548('0x18'),_0x12f9e0[_0xb548('0xd')]),'qs':{'query':util[_0xb548('0x19')]('type:user\x20role:end-user\x20phone:%s',_0xd6505a)}})[_0xb548('0x15')](function(_0x1c969c){var _0x208fd7;if(_0x1c969c[_0xb548('0x1e')][_0xb548('0x25')]){_0x1c969c[_0xb548('0x1e')]=_['filter'](_0x1c969c[_0xb548('0x1e')],{'suspended':![],'role':_0xb548('0x26')});if(_0x1c969c['results']['length']){_0x208fd7=_['first'](_0x1c969c[_0xb548('0x1e')]);}}if(_0x208fd7){logger['info'](_0xb548('0x27'));return _0x208fd7;}else{logger[_0xb548('0x16')](_0xb548('0x28'));return request({'uri':util[_0xb548('0x19')](_0xb548('0x29'),_0x12f9e0[_0xb548('0xd')]),'method':_0xb548('0xe'),'body':{'user':{'role':'end-user','name':util[_0xb548('0x19')](_0xb548('0x2a'),_0x519038||_0xd6505a),'phone':_0xd6505a}}})[_0xb548('0x15')](function(_0x466d38){logger[_0xb548('0x16')]('Enduser\x20created.');return _0x466d38[_0xb548('0x22')];});}});}function getAuth(_0x190ddf){var _0x5799ec;if(_0x190ddf['authType']===_0xb548('0x2b')){_0x5799ec=util[_0xb548('0x19')]('%s:%s',_0x190ddf['username'],_0x190ddf[_0xb548('0x2b')]);}else if(_0x190ddf[_0xb548('0x2c')]===_0xb548('0x2d')){_0x5799ec=util['format'](_0xb548('0x2e'),_0x190ddf[_0xb548('0x2f')],_0x190ddf[_0xb548('0x2d')]);}return util[_0xb548('0x19')]('Basic\x20%s',new Buffer(_0x5799ec)[_0xb548('0x30')](_0xb548('0x31')));}function request(_0x38d4d4){logger[_0xb548('0x32')](_0xb548('0x33'),JSON[_0xb548('0x34')](_0x38d4d4));return rp(_[_0xb548('0x7')](_0x38d4d4,{'method':_0xb548('0x35'),'headers':headers,'json':!![]}));}function getTags(_0x7f5b29,_0x296f58){var _0x22a674=[];if(_0x7f5b29&&_0x7f5b29[_0xb548('0x25')]>0x0){_0x22a674=_[_0xb548('0x36')](_0x7f5b29,_0x296f58);}return _0x22a674;}function getCustomFields(_0x80442d,_0x29b5c7){var _0x4ba6ab=[];var _0x495ca0={'custom_fields':[]};if(_0x80442d['length']>0x0){_[_0xb548('0x37')](_0x80442d,function(_0x41354d){if(_0x41354d['type']===_0xb548('0x38')&&_0x41354d['nameField']&&!_0x41354d[_0xb548('0x39')]){_0x495ca0[_0x41354d[_0xb548('0x3a')][_0xb548('0x3b')]()]=_0x41354d[_0xb548('0x3c')][_0xb548('0x30')]();}else if(_0x41354d['type']===_0xb548('0x38')&&_0x41354d[_0xb548('0x3d')]&&_0x41354d[_0xb548('0x39')]){_0x495ca0[_0xb548('0x3e')]['push']({'id':_0x41354d[_0xb548('0x3d')],'value':_0x41354d[_0xb548('0x3c')][_0xb548('0x30')]()});}else if(_0x41354d['type']===_0xb548('0x3f')&&_0x41354d[_0xb548('0x40')]&&_0x41354d[_0xb548('0x3d')]&&_0x41354d[_0xb548('0x39')]){_0x29b5c7[_0x41354d[_0xb548('0x40')]]&&_0x495ca0['custom_fields']['push']({'id':_0x41354d[_0xb548('0x3d')],'value':_0x29b5c7[_0x41354d[_0xb548('0x40')]][_0xb548('0x30')]()});}else if(_0x41354d[_0xb548('0x41')]==='customVariable'&&_0x41354d[_0xb548('0x42')]&&_0x41354d[_0xb548('0x42')][_0xb548('0x10')]&&_0x41354d[_0xb548('0x3d')]&&_0x41354d['customField']){_0x29b5c7[_0x41354d[_0xb548('0x42')]['name'][_0xb548('0x3b')]()]&&_0x495ca0[_0xb548('0x3e')][_0xb548('0x43')]({'id':_0x41354d['idField'],'value':_0x29b5c7[_0x41354d[_0xb548('0x42')][_0xb548('0x10')][_0xb548('0x3b')]()][_0xb548('0x30')]()});}});}return _0x495ca0;}exports[_0xb548('0x44')]=function(_0x2f4db1,_0x207283,_0x2f7faf,_0x329156,_0x88d230,_0x583e43){var _0x36e907,_0x571e89;_0x583e43['remoteUri']=intUtil[_0xb548('0x45')](_0x583e43[_0xb548('0xd')]);_0x583e43[_0xb548('0x46')]=intUtil[_0xb548('0x45')](_0x583e43[_0xb548('0x46')]);if(_0x88d230&&_0x88d230[_0xb548('0x47')]){logger['info']('[QUEUE]',_0xb548('0x48'));_0x207283['recordingURL']=util[_0xb548('0x19')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x583e43[_0xb548('0x46')],_0x207283[_0xb548('0x49')],md5(_0x207283['uniqueid']));}else{_0x207283[_0xb548('0x4a')]='';}headers[_0xb548('0x4b')]=getAuth(_0x583e43);return getUser(_0x583e43,_0x329156['email'])[_0xb548('0x15')](function(_0x19874d){_0x36e907=_0x19874d;logger[_0xb548('0x16')](_0xb548('0x4c'),_0x36e907['id']);return getEndUser(_0x583e43,_0x207283[_0xb548('0x4d')],_0x207283[_0xb548('0x4e')]);})['then'](function(_0x16ab54){_0x571e89=_0x16ab54;logger[_0xb548('0x16')](_0xb548('0x4f'),_0x571e89['id']);return getTicket(_0x583e43,_0x36e907,_0x571e89,_0x2f7faf,_0x207283);})[_0xb548('0x15')](function(_0x521d32){if(_0x521d32){logger['info']('The\x20Ticket\x20ID\x20is:',_0x521d32['id']);switch(_0x583e43['type']){case'integrationTab':logger[_0xb548('0x16')](_0xb548('0x50'),'Displaying\x20ticket\x20to\x20agent...');return request({'uri':util[_0xb548('0x19')]('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x583e43[_0xb548('0xd')],_0x36e907['id'],_0x521d32['id']),'method':_0xb548('0xe')});case _0xb548('0x51'):logger[_0xb548('0x16')](_0xb548('0x50'),_0xb548('0x52'));emit(util[_0xb548('0x19')]('user:%s',_0x329156['name']),'trigger:browser:url',{'uri':util[_0xb548('0x19')](_0xb548('0x53'),_0x583e43[_0xb548('0xd')],_0x521d32['id'])});break;default:logger[_0xb548('0x54')](_0xb548('0x50'),_0xb548('0x55'));}}})[_0xb548('0x56')](function(_0x4327f8){logger[_0xb548('0x54')](_0xb548('0x57'),util[_0xb548('0x58')](_0x4327f8,{'showHidden':!![],'depth':null}));});};exports[_0xb548('0x59')]=function(_0x66915e,_0x8cf7b7,_0x3a727c,_0xefa8e3,_0x14cefd,_0x31ef37,_0x279a71){var _0xe8e42a,_0xb0d19f;_0x31ef37[_0xb548('0xd')]=intUtil[_0xb548('0x45')](_0x31ef37[_0xb548('0xd')]);_0x31ef37['serverUrl']=intUtil[_0xb548('0x45')](_0x31ef37['serverUrl']);if(_0x279a71&&_0x279a71['recordingFormat']&&_0x279a71['recordingFormat']!==_0xb548('0x5a')){logger[_0xb548('0x16')](_0xb548('0x5b'),_0xb548('0x48'));_0x8cf7b7[_0xb548('0x4a')]=util[_0xb548('0x19')](_0xb548('0x5c'),_0x31ef37['serverUrl'],_0x8cf7b7[_0xb548('0x49')],md5(_0x8cf7b7[_0xb548('0x49')]));}headers[_0xb548('0x4b')]=getAuth(_0x31ef37);return getUser(_0x31ef37,_0xefa8e3[_0xb548('0x5d')])[_0xb548('0x15')](function(_0x2dca68){_0xe8e42a=_0x2dca68;logger[_0xb548('0x16')](_0xb548('0x4c'),_0xe8e42a['id']);return getEndUser(_0x31ef37,_0x8cf7b7['destcalleridname'],_0x8cf7b7[_0xb548('0x5e')]);})[_0xb548('0x15')](function(_0x25571e){_0xb0d19f=_0x25571e;logger[_0xb548('0x16')]('The\x20Enduser\x20ID\x20is:',_0xb0d19f['id']);return getTicket(_0x31ef37,_0xe8e42a,_0xb0d19f,_0x3a727c,_0x8cf7b7);})[_0xb548('0x15')](function(_0x6cecf8){if(_0x6cecf8){logger['info'](_0xb548('0x5f'),_0x6cecf8['id']);switch(_0x31ef37[_0xb548('0x41')]){case'integrationTab':logger[_0xb548('0x16')](_0xb548('0x5b'),_0xb548('0x60'));return request({'uri':util[_0xb548('0x19')](_0xb548('0x61'),_0x31ef37[_0xb548('0xd')],_0xe8e42a['id'],_0x6cecf8['id']),'method':_0xb548('0xe')});case _0xb548('0x51'):logger[_0xb548('0x16')](_0xb548('0x5b'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0xb548('0x19')](_0xb548('0x62'),_0xefa8e3[_0xb548('0x10')]),_0xb548('0x63'),{'uri':util[_0xb548('0x19')](_0xb548('0x53'),_0x31ef37[_0xb548('0xd')],_0x6cecf8['id'])});break;default:logger[_0xb548('0x54')]('[OUTBOUND]',_0xb548('0x55'));}}})['catch'](function(_0x446801){logger[_0xb548('0x54')]('[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration',util['inspect'](_0x446801,{'showHidden':!![],'depth':null}));});};exports['abandoned']=function(_0x515d74,_0x199fff,_0x4c84ae,_0x28675b,_0x2b5d88,_0x585b6c){var _0x312ccc,_0x4dca4d;_0x585b6c[_0xb548('0xd')]=intUtil[_0xb548('0x45')](_0x585b6c['remoteUri']);_0x585b6c[_0xb548('0x46')]=intUtil['stripTrailingSlash'](_0x585b6c[_0xb548('0x46')]);if(_0x2b5d88&&_0x2b5d88[_0xb548('0x47')]){logger[_0xb548('0x16')](_0xb548('0x64'),_0xb548('0x48'));_0x199fff[_0xb548('0x4a')]=util['format'](_0xb548('0x5c'),_0x585b6c[_0xb548('0x46')],_0x199fff[_0xb548('0x49')],md5(_0x199fff[_0xb548('0x49')]));}else{_0x199fff[_0xb548('0x4a')]='';}headers[_0xb548('0x4b')]=getAuth(_0x585b6c);return getUser(_0x585b6c)[_0xb548('0x15')](function(_0x29bdf6){_0x312ccc=_0x29bdf6;logger[_0xb548('0x16')](_0xb548('0x4c'),_0x312ccc['id']);return getEndUser(_0x585b6c,_0x199fff[_0xb548('0x4d')],_0x199fff[_0xb548('0x4e')]);})[_0xb548('0x15')](function(_0x999cfe){_0x4dca4d=_0x999cfe;logger[_0xb548('0x16')](_0xb548('0x4f'),_0x4dca4d['id']);return getTicket(_0x585b6c,_0x312ccc,_0x4dca4d,_0x4c84ae,_0x199fff);})[_0xb548('0x15')](function(_0x237481){if(_0x237481){logger[_0xb548('0x16')](_0xb548('0x5f'),_0x237481['id']);}})['catch'](function(_0x28f12d){logger[_0xb548('0x54')]('[ABANDONED]\x20Error\x20running\x20Zendesk\x20integration',util[_0xb548('0x58')](_0x28f12d,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
index 230fc98..9076c34 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfb19=['zoho\x20data\x20users','isArrayLikeObject','isNil','active','Using\x20the\x20admin\x20account!','find','Administrator','zoho\x20user','error','The\x20failing\x20result\x20is','Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20','Searching\x20enduser\x20with\x20phone','GET','((Phone:%s))','then','Enduser\x20found\x20in\x20Contacts!','Contacts','row','length','val','https://crm.%s/crm/private/json/Leads/searchRecords','content','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>','toJson','Enduser\x20created.','Error\x20on\x20Lead\x20creation:\x20','debug','[HTTP]','forEach','type','string','toString','variableName','idField','Variable','name','toLowerCase','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Call\x20ID\x20is:','Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s','recordingFormat','none','[OUTBOUND]','destcalleridname','The\x20Enduser\x20ID\x20is:','Outbound','catch','abandoned','[ABANDONED]','Inbound','lodash','request-promise','./util','xml2json','entities','moment','../../../../config/environment','../../../../config/logger','zoho','defaults','redis','localhost','socket.io-emitter','emit','application/json','info','inbound','outbound','starttime','agentcalledAt','format','getString','Subjects','Descriptions','called','Call\x20Result','Called','complete','Answered','rejected','Rejected','talktime','Call\x20Duration','utc','answertime','endtime','YYYY-MM-DD\x20HH:mm:ss','diff','mm:ss','CONTACTID','LEADID','SEMODULE','Leads','SEID','hasOwnProperty','encodeXML','POST','authToken','crmapi','parse','response','result','recorddetail','Call\x20created!','Error\x20on\x20call\x20creation:\x20','stringify','https://crm.%s/crm/private/json/Users/getUsers','host','users','user','log'];(function(_0x45ea31,_0x397b39){var _0x546eff=function(_0xfa6058){while(--_0xfa6058){_0x45ea31['push'](_0x45ea31['shift']());}};_0x546eff(++_0x397b39);}(_0xfb19,0x1c3));var _0x9fb1=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xfb19[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x9fb1('0x0'));var rp=require(_0x9fb1('0x1'));var md5=require('md5');var util=require('util');var intUtil=require(_0x9fb1('0x2'));var parser=require(_0x9fb1('0x3'));var entities=require(_0x9fb1('0x4'));var moment=require(_0x9fb1('0x5'));var Redis=require('ioredis');var config=require(_0x9fb1('0x6'));var logger=require(_0x9fb1('0x7'))(_0x9fb1('0x8'));config['redis']=_[_0x9fb1('0x9')](config[_0x9fb1('0xa')],{'host':_0x9fb1('0xb'),'port':0x18eb});var io=require(_0x9fb1('0xc'))(new Redis(config[_0x9fb1('0xa')]));function emit(_0x232590,_0x3db8c3,_0x24b885){io['to'](_0x232590)[_0x9fb1('0xd')](_0x3db8c3,_0x24b885);}var headers={'Content-Type':_0x9fb1('0xe'),'Accept':_0x9fb1('0xe')};function getCall(_0x4ed467,_0x2cdd45,_0x4688e1,_0x24080,_0x4ba6e7,_0xe8e2fb){logger[_0x9fb1('0xf')]('Creating\x20new\x20call...');var _0x29c3c2=_['merge']({'SMOWNERID':_0x2cdd45['id'],'Call Type':_0xe8e2fb||_0x9fb1('0x10'),'Call Start Time':(_0xe8e2fb===_0x9fb1('0x11')?_0x4ba6e7[_0x9fb1('0x12')]:_0x4ba6e7[_0x9fb1('0x13')])||moment()[_0x9fb1('0x14')]('YYYY-MM-DD\x20HH:mm:ss'),'Subject':intUtil[_0x9fb1('0x15')](_0x24080[_0x9fb1('0x16')],_0x4ba6e7,'\x20'),'Description':intUtil[_0x9fb1('0x15')](_0x24080[_0x9fb1('0x17')],_0x4ba6e7,'\x0a')},getCustomFields(_0x24080['Fields'],_0x4ba6e7));switch(_0x4ba6e7['lastevent']){case _0x9fb1('0x18'):_0x29c3c2[_0x9fb1('0x19')]=_0x9fb1('0x1a');break;case _0x9fb1('0x1b'):case'connect':_0x29c3c2[_0x9fb1('0x19')]=_0x9fb1('0x1c');break;case _0x9fb1('0x1d'):_0x29c3c2[_0x9fb1('0x19')]=_0x9fb1('0x1e');break;case'abandoned':_0x29c3c2[_0x9fb1('0x19')]='Abandoned';break;default:}if(_0x4ba6e7[_0x9fb1('0x1f')]){_0x29c3c2[_0x9fb1('0x20')]=moment[_0x9fb1('0x21')](parseInt(_0x4ba6e7[_0x9fb1('0x1f')])*0x3e8)[_0x9fb1('0x14')]('mm:ss');}else if(_0x4ba6e7[_0x9fb1('0x22')]&&_0x4ba6e7['endtime']){_0x29c3c2['Call\x20Duration']=moment['utc'](moment(_0x4ba6e7[_0x9fb1('0x23')],_0x9fb1('0x24'))[_0x9fb1('0x25')](moment(_0x4ba6e7['starttime'],'YYYY-MM-DD\x20HH:mm:ss')))[_0x9fb1('0x14')](_0x9fb1('0x26'));}if(_0x4688e1[_0x9fb1('0x27')]){_0x29c3c2[_0x9fb1('0x27')]=_0x4688e1[_0x9fb1('0x27')];}else if(_0x4688e1[_0x9fb1('0x28')]){_0x29c3c2[_0x9fb1('0x29')]=_0x9fb1('0x2a');_0x29c3c2[_0x9fb1('0x2b')]=_0x4688e1[_0x9fb1('0x28')];}var _0x179cd4='<Calls><row\x20no=\x221\x22>';for(var _0x3e586f in _0x29c3c2){if(_0x29c3c2[_0x9fb1('0x2c')](_0x3e586f)){_0x179cd4+=util[_0x9fb1('0x14')]('<FL\x20val=\x22%s\x22>%s</FL>',entities[_0x9fb1('0x2d')](_0x3e586f),entities[_0x9fb1('0x2d')](_0x29c3c2[_0x3e586f]));}}_0x179cd4+='</row></Calls>';return request({'method':_0x9fb1('0x2e'),'uri':util['format']('https://crm.%s/crm/private/xml/Calls/insertRecords',_0x4ed467['host']),'qs':{'authtoken':_0x4ed467[_0x9fb1('0x2f')],'scope':_0x9fb1('0x30'),'xmlData':_0x179cd4},'json':!![]})['then'](function(_0x585388){_0x585388=JSON[_0x9fb1('0x31')](parser['toJson'](_0x585388));if(_0x585388[_0x9fb1('0x32')]){if(_0x585388[_0x9fb1('0x32')][_0x9fb1('0x33')]&&_0x585388[_0x9fb1('0x32')][_0x9fb1('0x33')][_0x9fb1('0x34')]){logger[_0x9fb1('0xf')](_0x9fb1('0x35'));return{'id':_0x585388[_0x9fb1('0x32')][_0x9fb1('0x33')][_0x9fb1('0x34')]['FL'][0x0]['$t']};}}throw new Error(_0x9fb1('0x36')+JSON[_0x9fb1('0x37')](_0x585388));});}function getUser(_0x26ad10,_0x2b481e){return request({'method':'GET','uri':util[_0x9fb1('0x14')](_0x9fb1('0x38'),_0x26ad10[_0x9fb1('0x39')]),'qs':{'type':'AllUsers','authtoken':_0x26ad10['authToken'],'scope':'crmapi'},'json':!![]})['then'](function(_0x5118fb){if(_0x5118fb['users']&&_0x5118fb[_0x9fb1('0x3a')][_0x9fb1('0x3b')]){var _0xf86954;console[_0x9fb1('0x3c')](_0x9fb1('0x3d'),_0x5118fb[_0x9fb1('0x3a')]['user']);if(_[_0x9fb1('0x3e')](_0x5118fb[_0x9fb1('0x3a')][_0x9fb1('0x3b')])){console['log'](_0x9fb1('0x3d'),_0x5118fb['users'][_0x9fb1('0x3b')]);if(!_[_0x9fb1('0x3f')](_0x2b481e)){_0xf86954=_['find'](_0x5118fb['users']['user'],{'email':_0x2b481e,'profile':'Standard','status':_0x9fb1('0x40')});}if(!_[_0x9fb1('0x3f')](_0xf86954)){logger['info']('Agent\x20found!');}else{logger[_0x9fb1('0xf')](_0x9fb1('0x41'));_0xf86954=_[_0x9fb1('0x42')](_0x5118fb[_0x9fb1('0x3a')][_0x9fb1('0x3b')],{'profile':_0x9fb1('0x43')});}console['log'](_0x9fb1('0x44'),_0xf86954);return _0xf86954;}else{if(_0x5118fb[_0x9fb1('0x3a')][_0x9fb1('0x3b')]['profile']===_0x9fb1('0x43')){logger[_0x9fb1('0xf')](_0x9fb1('0x41'));_0xf86954=_0x5118fb[_0x9fb1('0x3a')][_0x9fb1('0x3b')];return _0xf86954;}else{logger[_0x9fb1('0x45')](_0x9fb1('0x46'),JSON['stringify'](_0x5118fb));throw new Error(_0x9fb1('0x47')+JSON[_0x9fb1('0x37')](_0x5118fb));}}}else{logger[_0x9fb1('0x45')](_0x9fb1('0x46'),JSON[_0x9fb1('0x37')](_0x5118fb));throw new Error(_0x9fb1('0x47')+JSON[_0x9fb1('0x37')](_0x5118fb));}});}function getEndUser(_0x44a314,_0x2f45eb,_0x1f4c2a){logger[_0x9fb1('0xf')](_0x9fb1('0x48'),_0x1f4c2a);return request({'method':_0x9fb1('0x49'),'uri':util[_0x9fb1('0x14')]('https://crm.%s/crm/private/json/Contacts/searchRecords',_0x44a314['host']),'qs':{'authtoken':_0x44a314['authToken'],'scope':'crmapi','criteria':util[_0x9fb1('0x14')](_0x9fb1('0x4a'),_0x1f4c2a)},'json':!![]})[_0x9fb1('0x4b')](function(_0x415393){if(_0x415393[_0x9fb1('0x32')]&&_0x415393[_0x9fb1('0x32')][_0x9fb1('0x33')]){logger[_0x9fb1('0xf')](_0x9fb1('0x4c'));var _0x52ac02={};var _0x28363e=_0x415393[_0x9fb1('0x32')]['result'][_0x9fb1('0x4d')]['row']['no']?_0x415393[_0x9fb1('0x32')][_0x9fb1('0x33')][_0x9fb1('0x4d')][_0x9fb1('0x4e')]['FL']:_0x415393[_0x9fb1('0x32')][_0x9fb1('0x33')]['Contacts'][_0x9fb1('0x4e')][0x0]['FL'];for(var _0x34f54d=0x0,_0x48e5d5=_0x28363e[_0x9fb1('0x4f')];_0x34f54d<_0x48e5d5;_0x34f54d++){_0x52ac02[_0x28363e[_0x34f54d][_0x9fb1('0x50')]]=_0x28363e[_0x34f54d]['content'];}return _0x52ac02;}else{return request({'method':'GET','uri':util['format'](_0x9fb1('0x51'),_0x44a314['host']),'qs':{'authtoken':_0x44a314[_0x9fb1('0x2f')],'scope':_0x9fb1('0x30'),'criteria':util['format'](_0x9fb1('0x4a'),_0x1f4c2a)},'json':!![]})[_0x9fb1('0x4b')](function(_0x26e7a9){if(_0x26e7a9[_0x9fb1('0x32')]&&_0x26e7a9[_0x9fb1('0x32')]['result']){logger[_0x9fb1('0xf')]('Enduser\x20found\x20in\x20Leads!');var _0x353e24={};var _0x287ab0=_0x26e7a9[_0x9fb1('0x32')][_0x9fb1('0x33')][_0x9fb1('0x2a')][_0x9fb1('0x4e')]['no']?_0x26e7a9['response']['result']['Leads']['row']['FL']:_0x26e7a9[_0x9fb1('0x32')][_0x9fb1('0x33')]['Leads']['row'][0x0]['FL'];for(var _0x15c760=0x0,_0xd74868=_0x287ab0[_0x9fb1('0x4f')];_0x15c760<_0xd74868;_0x15c760++){_0x353e24[_0x287ab0[_0x15c760][_0x9fb1('0x50')]]=_0x287ab0[_0x15c760][_0x9fb1('0x52')];}return _0x353e24;}else{logger[_0x9fb1('0xf')](_0x9fb1('0x53'));_0x2f45eb=getName(_0x2f45eb);return request({'method':_0x9fb1('0x2e'),'uri':util[_0x9fb1('0x14')](_0x9fb1('0x54'),_0x44a314['host']),'qs':{'authtoken':_0x44a314[_0x9fb1('0x2f')],'scope':'crmapi','xmlData':util['format'](_0x9fb1('0x55'),entities[_0x9fb1('0x2d')](_0x2f45eb[0x0]),entities[_0x9fb1('0x2d')](_0x2f45eb[0x1]),_0x1f4c2a)},'json':!![]})[_0x9fb1('0x4b')](function(_0x18a449){_0x18a449=JSON[_0x9fb1('0x31')](parser[_0x9fb1('0x56')](_0x18a449));if(_0x18a449[_0x9fb1('0x32')]){if(_0x18a449[_0x9fb1('0x32')][_0x9fb1('0x33')]&&_0x18a449[_0x9fb1('0x32')][_0x9fb1('0x33')]['recorddetail']){logger[_0x9fb1('0xf')](_0x9fb1('0x57'));return request({'method':_0x9fb1('0x49'),'uri':util['format']('https://crm.%s/crm/private/json/Leads/getRecordById',_0x44a314['host']),'qs':{'authtoken':_0x44a314[_0x9fb1('0x2f')],'scope':_0x9fb1('0x30'),'id':_0x18a449[_0x9fb1('0x32')]['result'][_0x9fb1('0x34')]['FL'][0x0]['$t']},'json':!![]});}}throw new Error(_0x9fb1('0x58')+JSON[_0x9fb1('0x37')](_0x18a449));})[_0x9fb1('0x4b')](function(_0x1ba74e){if(_0x1ba74e[_0x9fb1('0x32')]){if(_0x1ba74e['response'][_0x9fb1('0x33')]){var _0x2e7799={};for(var _0x31d5c9=0x0,_0x33aac7=_0x1ba74e[_0x9fb1('0x32')][_0x9fb1('0x33')][_0x9fb1('0x2a')][_0x9fb1('0x4e')]['FL'][_0x9fb1('0x4f')];_0x31d5c9<_0x33aac7;_0x31d5c9++){_0x2e7799[_0x1ba74e['response'][_0x9fb1('0x33')][_0x9fb1('0x2a')][_0x9fb1('0x4e')]['FL'][_0x31d5c9]['val']]=_0x1ba74e[_0x9fb1('0x32')][_0x9fb1('0x33')]['Leads'][_0x9fb1('0x4e')]['FL'][_0x31d5c9][_0x9fb1('0x52')];}return _0x2e7799;}}throw new Error('Error\x20on\x20Lead\x20retrieve:\x20'+JSON[_0x9fb1('0x37')](_0x1ba74e));});}});}});}function request(_0x495727){logger[_0x9fb1('0x59')](_0x9fb1('0x5a'),JSON[_0x9fb1('0x37')](_0x495727));return rp(_0x495727);}function getCustomFields(_0x245b5c,_0x12fe49){var _0x45a6c3={};if(_0x245b5c[_0x9fb1('0x4f')]>0x0){_[_0x9fb1('0x5b')](_0x245b5c,function(_0x100be9){if(_0x100be9[_0x9fb1('0x5c')]===_0x9fb1('0x5d')&&_0x100be9['idField']){_0x45a6c3[_0x100be9['idField']]=_0x100be9[_0x9fb1('0x52')][_0x9fb1('0x5e')]();}else if(_0x100be9[_0x9fb1('0x5c')]==='variable'&&_0x100be9[_0x9fb1('0x5f')]&&_0x100be9[_0x9fb1('0x60')]&&_0x12fe49[_0x100be9['variableName']]){_0x45a6c3[_0x100be9['idField']]=_0x12fe49[_0x100be9['variableName']][_0x9fb1('0x5e')]();}else if(_0x100be9['type']==='customVariable'&&_0x100be9[_0x9fb1('0x61')]&&_0x100be9['Variable'][_0x9fb1('0x62')]&&_0x100be9[_0x9fb1('0x60')]&&_0x12fe49[_0x100be9['Variable']['name'][_0x9fb1('0x63')]()]){_0x45a6c3[_0x100be9[_0x9fb1('0x60')]]=_0x12fe49[_0x100be9[_0x9fb1('0x61')][_0x9fb1('0x62')][_0x9fb1('0x63')]()][_0x9fb1('0x5e')]();}});}return _0x45a6c3;}function getName(_0x4bd265){if(_0x4bd265['indexOf']('\x20')>0x0){var _0x316a88=_0x4bd265['split'](/ (.+)/);if(_0x316a88[0x1]){return _0x316a88;}}return[_0x4bd265,_0x4bd265];}exports[_0x9fb1('0x64')]=function(_0x5925b2,_0x5c5389,_0x5c416b,_0x3ab56c,_0x82fa61,_0x43a3f7){var _0x285059,_0x4c12e3;_0x43a3f7[_0x9fb1('0x39')]=intUtil[_0x9fb1('0x65')](_0x43a3f7[_0x9fb1('0x39')]);_0x43a3f7[_0x9fb1('0x66')]=intUtil[_0x9fb1('0x65')](_0x43a3f7[_0x9fb1('0x66')]);if(_0x82fa61&&_0x82fa61[_0x9fb1('0x67')]){logger['info'](_0x9fb1('0x68'),_0x9fb1('0x69'));_0x5c5389[_0x9fb1('0x6a')]=util['format'](_0x9fb1('0x6b'),_0x43a3f7[_0x9fb1('0x66')],_0x5c5389['uniqueid'],md5(_0x5c5389[_0x9fb1('0x6c')]));}else{_0x5c5389[_0x9fb1('0x6a')]='';}return getUser(_0x43a3f7,_0x3ab56c[_0x9fb1('0x6d')])[_0x9fb1('0x4b')](function(_0x204eeb){_0x285059=_0x204eeb;logger['info'](_0x9fb1('0x6e'),_0x285059['id']);return getEndUser(_0x43a3f7,_0x5c5389[_0x9fb1('0x6f')],_0x5c5389[_0x9fb1('0x70')]);})['then'](function(_0x35e048){_0x4c12e3=_0x35e048;logger[_0x9fb1('0xf')]('The\x20Enduser\x20ID\x20is:',_0x4c12e3[_0x9fb1('0x27')]||_0x4c12e3['LEADID']);return getCall(_0x43a3f7,_0x285059,_0x4c12e3,_0x5c416b,_0x5c5389,'Inbound');})[_0x9fb1('0x4b')](function(_0x114cc2){if(_0x114cc2){logger[_0x9fb1('0xf')](_0x9fb1('0x71'),_0x114cc2['id']);logger[_0x9fb1('0xf')](_0x9fb1('0x68'),_0x9fb1('0x72'));emit(util[_0x9fb1('0x14')](_0x9fb1('0x73'),_0x3ab56c['name']),_0x9fb1('0x74'),{'uri':util['format'](_0x9fb1('0x75'),_0x43a3f7[_0x9fb1('0x39')],_0x114cc2['id'])});}})['catch'](function(_0x25066e){logger[_0x9fb1('0x45')]('[QUEUE]',JSON[_0x9fb1('0x37')](_0x25066e));});};exports[_0x9fb1('0x11')]=function(_0x139b59,_0x4ce637,_0x87ff54,_0x2c3d16,_0x495eb7,_0x2f8a61,_0x4c96d6){var _0x28e7e4,_0x3c137a;_0x2f8a61['host']=intUtil[_0x9fb1('0x65')](_0x2f8a61[_0x9fb1('0x39')]);_0x2f8a61[_0x9fb1('0x66')]=intUtil[_0x9fb1('0x65')](_0x2f8a61[_0x9fb1('0x66')]);if(_0x4c96d6&&_0x4c96d6['recordingFormat']&&_0x4c96d6[_0x9fb1('0x76')]!==_0x9fb1('0x77')){logger['info'](_0x9fb1('0x78'),_0x9fb1('0x69'));_0x4ce637[_0x9fb1('0x6a')]=util[_0x9fb1('0x14')](_0x9fb1('0x6b'),_0x2f8a61[_0x9fb1('0x66')],_0x4ce637['uniqueid'],md5(_0x4ce637[_0x9fb1('0x6c')]));}return getUser(_0x2f8a61,_0x2c3d16[_0x9fb1('0x6d')])[_0x9fb1('0x4b')](function(_0x94128a){_0x28e7e4=_0x94128a;logger[_0x9fb1('0xf')](_0x9fb1('0x6e'),_0x28e7e4['id']);return getEndUser(_0x2f8a61,_0x4ce637[_0x9fb1('0x79')],_0x4ce637['destcalleridnum']);})[_0x9fb1('0x4b')](function(_0x470925){_0x3c137a=_0x470925;logger[_0x9fb1('0xf')](_0x9fb1('0x7a'),_0x3c137a[_0x9fb1('0x27')]||_0x3c137a[_0x9fb1('0x28')]);return getCall(_0x2f8a61,_0x28e7e4,_0x3c137a,_0x87ff54,_0x4ce637,_0x9fb1('0x7b'));})['then'](function(_0x4d50aa){if(_0x4d50aa){logger[_0x9fb1('0xf')](_0x9fb1('0x71'),_0x4d50aa['id']);logger['info']('[OUTBOUND]',_0x9fb1('0x72'));emit(util[_0x9fb1('0x14')](_0x9fb1('0x73'),_0x2c3d16[_0x9fb1('0x62')]),_0x9fb1('0x74'),{'uri':util[_0x9fb1('0x14')](_0x9fb1('0x75'),_0x2f8a61[_0x9fb1('0x39')],_0x4d50aa['id'])});}})[_0x9fb1('0x7c')](function(_0x1eca94){logger['error'](_0x9fb1('0x78'),JSON[_0x9fb1('0x37')](_0x1eca94));});};exports[_0x9fb1('0x7d')]=function(_0x354220,_0x2802a5,_0x27edcf,_0x340b5e,_0x4222e9,_0x347fbd){var _0x162ab2,_0x22009f;_0x347fbd[_0x9fb1('0x39')]=intUtil['stripTrailingSlash'](_0x347fbd[_0x9fb1('0x39')]);_0x347fbd[_0x9fb1('0x66')]=intUtil[_0x9fb1('0x65')](_0x347fbd[_0x9fb1('0x66')]);if(_0x4222e9&&_0x4222e9['monitor_format']){logger[_0x9fb1('0xf')](_0x9fb1('0x7e'),_0x9fb1('0x69'));_0x2802a5[_0x9fb1('0x6a')]=util[_0x9fb1('0x14')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x347fbd[_0x9fb1('0x66')],_0x2802a5[_0x9fb1('0x6c')],md5(_0x2802a5[_0x9fb1('0x6c')]));}else{_0x2802a5[_0x9fb1('0x6a')]='';}return getUser(_0x347fbd)[_0x9fb1('0x4b')](function(_0x511eef){_0x162ab2=_0x511eef;logger[_0x9fb1('0xf')](_0x9fb1('0x6e'),_0x162ab2['id']);return getEndUser(_0x347fbd,_0x2802a5['calleridname'],_0x2802a5[_0x9fb1('0x70')]);})['then'](function(_0x5a8cc1){_0x22009f=_0x5a8cc1;logger[_0x9fb1('0xf')](_0x9fb1('0x7a'),_0x22009f[_0x9fb1('0x27')]||_0x22009f[_0x9fb1('0x28')]);return getCall(_0x347fbd,_0x162ab2,_0x22009f,_0x27edcf,_0x2802a5,_0x9fb1('0x7f'));})[_0x9fb1('0x4b')](function(_0x264fa2){if(_0x264fa2){logger[_0x9fb1('0xf')](_0x9fb1('0x71'),_0x264fa2['id']);}})[_0x9fb1('0x7c')](function(_0x318728){logger[_0x9fb1('0x45')](_0x9fb1('0x7e'),JSON[_0x9fb1('0x37')](_0x318728));});};
\ No newline at end of file
+var _0x2652=['Administrator','profile','error','The\x20failing\x20result\x20is','Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20','https://crm.%s/crm/private/json/Contacts/searchRecords','((Phone:%s))','Enduser\x20found\x20in\x20Contacts!','Contacts','length','val','content','https://crm.%s/crm/private/json/Leads/searchRecords','Enduser\x20found\x20in\x20Leads!','row','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','POST','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','Enduser\x20created.','https://crm.%s/crm/private/json/Leads/getRecordById','Error\x20on\x20Lead\x20retrieve:\x20','debug','[HTTP]','type','string','idField','toString','variable','variableName','Variable','name','toLowerCase','indexOf','split','queue','stripTrailingSlash','serverUrl','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Inbound','The\x20Call\x20ID\x20is:','Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s','catch','recordingFormat','none','email','The\x20User\x20ID\x20is:','destcalleridname','destcalleridnum','Outbound','[OUTBOUND]','monitor_format','[ABANDONED]','lodash','request-promise','md5','util','xml2json','entities','moment','ioredis','../../../../config/logger','defaults','redis','localhost','emit','application/json','info','merge','inbound','outbound','starttime','format','YYYY-MM-DD\x20HH:mm:ss','getString','Subjects','Fields','lastevent','called','Call\x20Result','complete','connect','rejected','Rejected','abandoned','Abandoned','talktime','Call\x20Duration','utc','mm:ss','endtime','diff','CONTACTID','LEADID','SEMODULE','Leads','SEID','<Calls><row\x20no=\x221\x22>','hasOwnProperty','<FL\x20val=\x22%s\x22>%s</FL>','encodeXML','</row></Calls>','https://crm.%s/crm/private/xml/Calls/insertRecords','authToken','crmapi','then','response','result','recorddetail','Call\x20created!','Error\x20on\x20call\x20creation:\x20','stringify','GET','https://crm.%s/crm/private/json/Users/getUsers','host','AllUsers','users','user','log','zoho\x20data\x20users','isNil','Standard','active','Agent\x20found!','Using\x20the\x20admin\x20account!'];(function(_0x3df3bb,_0x2106d6){var _0x4ccf38=function(_0x5a2ab8){while(--_0x5a2ab8){_0x3df3bb['push'](_0x3df3bb['shift']());}};_0x4ccf38(++_0x2106d6);}(_0x2652,0x1dc));var _0x2265=function(_0x179208,_0x26a9d9){_0x179208=_0x179208-0x0;var _0x1a5f11=_0x2652[_0x179208];return _0x1a5f11;};'use strict';var _=require(_0x2265('0x0'));var rp=require(_0x2265('0x1'));var md5=require(_0x2265('0x2'));var util=require(_0x2265('0x3'));var intUtil=require('./util');var parser=require(_0x2265('0x4'));var entities=require(_0x2265('0x5'));var moment=require(_0x2265('0x6'));var Redis=require(_0x2265('0x7'));var config=require('../../../../config/environment');var logger=require(_0x2265('0x8'))('zoho');config['redis']=_[_0x2265('0x9')](config[_0x2265('0xa')],{'host':_0x2265('0xb'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x2265('0xa')]));function emit(_0x2d1993,_0x2df8f8,_0x5d81e6){io['to'](_0x2d1993)[_0x2265('0xc')](_0x2df8f8,_0x5d81e6);}var headers={'Content-Type':_0x2265('0xd'),'Accept':_0x2265('0xd')};function getCall(_0x354a2d,_0x241752,_0x5653dd,_0x25e67c,_0x16d445,_0x2d391b){logger[_0x2265('0xe')]('Creating\x20new\x20call...');var _0x62dd2e=_[_0x2265('0xf')]({'SMOWNERID':_0x241752['id'],'Call Type':_0x2d391b||_0x2265('0x10'),'Call Start Time':(_0x2d391b===_0x2265('0x11')?_0x16d445[_0x2265('0x12')]:_0x16d445['agentcalledAt'])||moment()[_0x2265('0x13')](_0x2265('0x14')),'Subject':intUtil[_0x2265('0x15')](_0x25e67c[_0x2265('0x16')],_0x16d445,'\x20'),'Description':intUtil[_0x2265('0x15')](_0x25e67c['Descriptions'],_0x16d445,'\x0a')},getCustomFields(_0x25e67c[_0x2265('0x17')],_0x16d445));switch(_0x16d445[_0x2265('0x18')]){case _0x2265('0x19'):_0x62dd2e[_0x2265('0x1a')]='Called';break;case _0x2265('0x1b'):case _0x2265('0x1c'):_0x62dd2e[_0x2265('0x1a')]='Answered';break;case _0x2265('0x1d'):_0x62dd2e[_0x2265('0x1a')]=_0x2265('0x1e');break;case _0x2265('0x1f'):_0x62dd2e[_0x2265('0x1a')]=_0x2265('0x20');break;default:}if(_0x16d445[_0x2265('0x21')]){_0x62dd2e[_0x2265('0x22')]=moment[_0x2265('0x23')](parseInt(_0x16d445['talktime'])*0x3e8)[_0x2265('0x13')](_0x2265('0x24'));}else if(_0x16d445['answertime']&&_0x16d445[_0x2265('0x25')]){_0x62dd2e[_0x2265('0x22')]=moment[_0x2265('0x23')](moment(_0x16d445[_0x2265('0x25')],_0x2265('0x14'))[_0x2265('0x26')](moment(_0x16d445[_0x2265('0x12')],_0x2265('0x14'))))['format'](_0x2265('0x24'));}if(_0x5653dd[_0x2265('0x27')]){_0x62dd2e[_0x2265('0x27')]=_0x5653dd[_0x2265('0x27')];}else if(_0x5653dd[_0x2265('0x28')]){_0x62dd2e[_0x2265('0x29')]=_0x2265('0x2a');_0x62dd2e[_0x2265('0x2b')]=_0x5653dd[_0x2265('0x28')];}var _0x47d525=_0x2265('0x2c');for(var _0x1adf24 in _0x62dd2e){if(_0x62dd2e[_0x2265('0x2d')](_0x1adf24)){_0x47d525+=util[_0x2265('0x13')](_0x2265('0x2e'),entities[_0x2265('0x2f')](_0x1adf24),entities[_0x2265('0x2f')](_0x62dd2e[_0x1adf24]));}}_0x47d525+=_0x2265('0x30');return request({'method':'POST','uri':util['format'](_0x2265('0x31'),_0x354a2d['host']),'qs':{'authtoken':_0x354a2d[_0x2265('0x32')],'scope':_0x2265('0x33'),'xmlData':_0x47d525},'json':!![]})[_0x2265('0x34')](function(_0x379d11){_0x379d11=JSON['parse'](parser['toJson'](_0x379d11));if(_0x379d11[_0x2265('0x35')]){if(_0x379d11['response'][_0x2265('0x36')]&&_0x379d11[_0x2265('0x35')][_0x2265('0x36')][_0x2265('0x37')]){logger[_0x2265('0xe')](_0x2265('0x38'));return{'id':_0x379d11[_0x2265('0x35')][_0x2265('0x36')][_0x2265('0x37')]['FL'][0x0]['$t']};}}throw new Error(_0x2265('0x39')+JSON[_0x2265('0x3a')](_0x379d11));});}function getUser(_0x5638cd,_0x4ada89){return request({'method':_0x2265('0x3b'),'uri':util[_0x2265('0x13')](_0x2265('0x3c'),_0x5638cd[_0x2265('0x3d')]),'qs':{'type':_0x2265('0x3e'),'authtoken':_0x5638cd[_0x2265('0x32')],'scope':'crmapi'},'json':!![]})[_0x2265('0x34')](function(_0x48e0b0){if(_0x48e0b0[_0x2265('0x3f')]&&_0x48e0b0[_0x2265('0x3f')][_0x2265('0x40')]){var _0x1ad9db;console['log']('zoho\x20data\x20users',_0x48e0b0[_0x2265('0x3f')][_0x2265('0x40')]);if(_['isArrayLikeObject'](_0x48e0b0[_0x2265('0x3f')][_0x2265('0x40')])){console[_0x2265('0x41')](_0x2265('0x42'),_0x48e0b0[_0x2265('0x3f')]['user']);if(!_[_0x2265('0x43')](_0x4ada89)){_0x1ad9db=_['find'](_0x48e0b0[_0x2265('0x3f')][_0x2265('0x40')],{'email':_0x4ada89,'profile':_0x2265('0x44'),'status':_0x2265('0x45')});}if(!_[_0x2265('0x43')](_0x1ad9db)){logger['info'](_0x2265('0x46'));}else{logger[_0x2265('0xe')](_0x2265('0x47'));_0x1ad9db=_['find'](_0x48e0b0['users'][_0x2265('0x40')],{'profile':_0x2265('0x48')});}console['log']('zoho\x20user',_0x1ad9db);return _0x1ad9db;}else{if(_0x48e0b0[_0x2265('0x3f')][_0x2265('0x40')][_0x2265('0x49')]==='Administrator'){logger[_0x2265('0xe')](_0x2265('0x47'));_0x1ad9db=_0x48e0b0[_0x2265('0x3f')][_0x2265('0x40')];return _0x1ad9db;}else{logger[_0x2265('0x4a')](_0x2265('0x4b'),JSON[_0x2265('0x3a')](_0x48e0b0));throw new Error(_0x2265('0x4c')+JSON[_0x2265('0x3a')](_0x48e0b0));}}}else{logger[_0x2265('0x4a')](_0x2265('0x4b'),JSON[_0x2265('0x3a')](_0x48e0b0));throw new Error(_0x2265('0x4c')+JSON[_0x2265('0x3a')](_0x48e0b0));}});}function getEndUser(_0x432c75,_0x538489,_0x16677a){logger[_0x2265('0xe')]('Searching\x20enduser\x20with\x20phone',_0x16677a);return request({'method':_0x2265('0x3b'),'uri':util['format'](_0x2265('0x4d'),_0x432c75['host']),'qs':{'authtoken':_0x432c75['authToken'],'scope':_0x2265('0x33'),'criteria':util[_0x2265('0x13')](_0x2265('0x4e'),_0x16677a)},'json':!![]})['then'](function(_0x58d0b3){if(_0x58d0b3[_0x2265('0x35')]&&_0x58d0b3[_0x2265('0x35')]['result']){logger[_0x2265('0xe')](_0x2265('0x4f'));var _0x4f20b2={};var _0x13ddce=_0x58d0b3[_0x2265('0x35')][_0x2265('0x36')][_0x2265('0x50')]['row']['no']?_0x58d0b3[_0x2265('0x35')][_0x2265('0x36')][_0x2265('0x50')]['row']['FL']:_0x58d0b3['response']['result'][_0x2265('0x50')]['row'][0x0]['FL'];for(var _0x2505f8=0x0,_0x17d507=_0x13ddce[_0x2265('0x51')];_0x2505f8<_0x17d507;_0x2505f8++){_0x4f20b2[_0x13ddce[_0x2505f8][_0x2265('0x52')]]=_0x13ddce[_0x2505f8][_0x2265('0x53')];}return _0x4f20b2;}else{return request({'method':_0x2265('0x3b'),'uri':util[_0x2265('0x13')](_0x2265('0x54'),_0x432c75[_0x2265('0x3d')]),'qs':{'authtoken':_0x432c75[_0x2265('0x32')],'scope':'crmapi','criteria':util[_0x2265('0x13')](_0x2265('0x4e'),_0x16677a)},'json':!![]})['then'](function(_0x32ef8d){if(_0x32ef8d[_0x2265('0x35')]&&_0x32ef8d[_0x2265('0x35')][_0x2265('0x36')]){logger[_0x2265('0xe')](_0x2265('0x55'));var _0x32dcc0={};var _0xade117=_0x32ef8d[_0x2265('0x35')][_0x2265('0x36')][_0x2265('0x2a')][_0x2265('0x56')]['no']?_0x32ef8d[_0x2265('0x35')][_0x2265('0x36')][_0x2265('0x2a')][_0x2265('0x56')]['FL']:_0x32ef8d[_0x2265('0x35')][_0x2265('0x36')][_0x2265('0x2a')]['row'][0x0]['FL'];for(var _0x537cd8=0x0,_0x840f76=_0xade117[_0x2265('0x51')];_0x537cd8<_0x840f76;_0x537cd8++){_0x32dcc0[_0xade117[_0x537cd8][_0x2265('0x52')]]=_0xade117[_0x537cd8][_0x2265('0x53')];}return _0x32dcc0;}else{logger['info'](_0x2265('0x57'));_0x538489=getName(_0x538489);return request({'method':_0x2265('0x58'),'uri':util[_0x2265('0x13')](_0x2265('0x59'),_0x432c75['host']),'qs':{'authtoken':_0x432c75[_0x2265('0x32')],'scope':_0x2265('0x33'),'xmlData':util[_0x2265('0x13')](_0x2265('0x5a'),entities[_0x2265('0x2f')](_0x538489[0x0]),entities[_0x2265('0x2f')](_0x538489[0x1]),_0x16677a)},'json':!![]})[_0x2265('0x34')](function(_0x594ce5){_0x594ce5=JSON[_0x2265('0x5b')](parser[_0x2265('0x5c')](_0x594ce5));if(_0x594ce5['response']){if(_0x594ce5[_0x2265('0x35')][_0x2265('0x36')]&&_0x594ce5[_0x2265('0x35')][_0x2265('0x36')][_0x2265('0x37')]){logger['info'](_0x2265('0x5d'));return request({'method':_0x2265('0x3b'),'uri':util[_0x2265('0x13')](_0x2265('0x5e'),_0x432c75[_0x2265('0x3d')]),'qs':{'authtoken':_0x432c75[_0x2265('0x32')],'scope':_0x2265('0x33'),'id':_0x594ce5['response'][_0x2265('0x36')][_0x2265('0x37')]['FL'][0x0]['$t']},'json':!![]});}}throw new Error('Error\x20on\x20Lead\x20creation:\x20'+JSON[_0x2265('0x3a')](_0x594ce5));})['then'](function(_0x40c270){if(_0x40c270[_0x2265('0x35')]){if(_0x40c270[_0x2265('0x35')][_0x2265('0x36')]){var _0x55e35d={};for(var _0x112b24=0x0,_0x5e5dd9=_0x40c270['response'][_0x2265('0x36')][_0x2265('0x2a')][_0x2265('0x56')]['FL'][_0x2265('0x51')];_0x112b24<_0x5e5dd9;_0x112b24++){_0x55e35d[_0x40c270[_0x2265('0x35')][_0x2265('0x36')]['Leads'][_0x2265('0x56')]['FL'][_0x112b24]['val']]=_0x40c270[_0x2265('0x35')]['result'][_0x2265('0x2a')][_0x2265('0x56')]['FL'][_0x112b24][_0x2265('0x53')];}return _0x55e35d;}}throw new Error(_0x2265('0x5f')+JSON[_0x2265('0x3a')](_0x40c270));});}});}});}function request(_0x49079a){logger[_0x2265('0x60')](_0x2265('0x61'),JSON[_0x2265('0x3a')](_0x49079a));return rp(_0x49079a);}function getCustomFields(_0x4b1df1,_0x39c9e9){var _0x33beb1={};if(_0x4b1df1[_0x2265('0x51')]>0x0){_['forEach'](_0x4b1df1,function(_0x55ee37){if(_0x55ee37[_0x2265('0x62')]===_0x2265('0x63')&&_0x55ee37[_0x2265('0x64')]){_0x33beb1[_0x55ee37[_0x2265('0x64')]]=_0x55ee37[_0x2265('0x53')][_0x2265('0x65')]();}else if(_0x55ee37['type']===_0x2265('0x66')&&_0x55ee37[_0x2265('0x67')]&&_0x55ee37[_0x2265('0x64')]&&_0x39c9e9[_0x55ee37[_0x2265('0x67')]]){_0x33beb1[_0x55ee37['idField']]=_0x39c9e9[_0x55ee37[_0x2265('0x67')]][_0x2265('0x65')]();}else if(_0x55ee37['type']==='customVariable'&&_0x55ee37['Variable']&&_0x55ee37[_0x2265('0x68')][_0x2265('0x69')]&&_0x55ee37['idField']&&_0x39c9e9[_0x55ee37[_0x2265('0x68')][_0x2265('0x69')][_0x2265('0x6a')]()]){_0x33beb1[_0x55ee37['idField']]=_0x39c9e9[_0x55ee37[_0x2265('0x68')][_0x2265('0x69')][_0x2265('0x6a')]()][_0x2265('0x65')]();}});}return _0x33beb1;}function getName(_0x2a04c2){if(_0x2a04c2[_0x2265('0x6b')]('\x20')>0x0){var _0x2ae85c=_0x2a04c2[_0x2265('0x6c')](/ (.+)/);if(_0x2ae85c[0x1]){return _0x2ae85c;}}return[_0x2a04c2,_0x2a04c2];}exports[_0x2265('0x6d')]=function(_0x289c7e,_0x3cafb7,_0x4b8352,_0x2b72b6,_0x13a09e,_0x40868d){var _0xd562cb,_0x5dfd35;_0x40868d['host']=intUtil[_0x2265('0x6e')](_0x40868d[_0x2265('0x3d')]);_0x40868d[_0x2265('0x6f')]=intUtil[_0x2265('0x6e')](_0x40868d[_0x2265('0x6f')]);if(_0x13a09e&&_0x13a09e['monitor_format']){logger['info'](_0x2265('0x70'),_0x2265('0x71'));_0x3cafb7[_0x2265('0x72')]=util['format'](_0x2265('0x73'),_0x40868d[_0x2265('0x6f')],_0x3cafb7['uniqueid'],md5(_0x3cafb7[_0x2265('0x74')]));}else{_0x3cafb7[_0x2265('0x72')]='';}return getUser(_0x40868d,_0x2b72b6['email'])[_0x2265('0x34')](function(_0x32dc7e){_0xd562cb=_0x32dc7e;logger['info']('The\x20User\x20ID\x20is:',_0xd562cb['id']);return getEndUser(_0x40868d,_0x3cafb7[_0x2265('0x75')],_0x3cafb7[_0x2265('0x76')]);})[_0x2265('0x34')](function(_0x120caf){_0x5dfd35=_0x120caf;logger[_0x2265('0xe')](_0x2265('0x77'),_0x5dfd35[_0x2265('0x27')]||_0x5dfd35[_0x2265('0x28')]);return getCall(_0x40868d,_0xd562cb,_0x5dfd35,_0x4b8352,_0x3cafb7,_0x2265('0x78'));})[_0x2265('0x34')](function(_0x4c495d){if(_0x4c495d){logger[_0x2265('0xe')](_0x2265('0x79'),_0x4c495d['id']);logger['info'](_0x2265('0x70'),_0x2265('0x7a'));emit(util[_0x2265('0x13')](_0x2265('0x7b'),_0x2b72b6['name']),_0x2265('0x7c'),{'uri':util[_0x2265('0x13')](_0x2265('0x7d'),_0x40868d[_0x2265('0x3d')],_0x4c495d['id'])});}})[_0x2265('0x7e')](function(_0x1403c9){logger[_0x2265('0x4a')](_0x2265('0x70'),JSON['stringify'](_0x1403c9));});};exports[_0x2265('0x11')]=function(_0x4dd23f,_0x2ce25b,_0x3bec18,_0x1325c3,_0x3bcfad,_0x4b655c,_0x10f6e4){var _0x345924,_0x46d791;_0x4b655c['host']=intUtil[_0x2265('0x6e')](_0x4b655c[_0x2265('0x3d')]);_0x4b655c[_0x2265('0x6f')]=intUtil[_0x2265('0x6e')](_0x4b655c['serverUrl']);if(_0x10f6e4&&_0x10f6e4[_0x2265('0x7f')]&&_0x10f6e4[_0x2265('0x7f')]!==_0x2265('0x80')){logger['info']('[OUTBOUND]',_0x2265('0x71'));_0x2ce25b[_0x2265('0x72')]=util['format'](_0x2265('0x73'),_0x4b655c['serverUrl'],_0x2ce25b[_0x2265('0x74')],md5(_0x2ce25b[_0x2265('0x74')]));}return getUser(_0x4b655c,_0x1325c3[_0x2265('0x81')])[_0x2265('0x34')](function(_0x2f6950){_0x345924=_0x2f6950;logger[_0x2265('0xe')](_0x2265('0x82'),_0x345924['id']);return getEndUser(_0x4b655c,_0x2ce25b[_0x2265('0x83')],_0x2ce25b[_0x2265('0x84')]);})[_0x2265('0x34')](function(_0x35cc36){_0x46d791=_0x35cc36;logger[_0x2265('0xe')]('The\x20Enduser\x20ID\x20is:',_0x46d791[_0x2265('0x27')]||_0x46d791[_0x2265('0x28')]);return getCall(_0x4b655c,_0x345924,_0x46d791,_0x3bec18,_0x2ce25b,_0x2265('0x85'));})[_0x2265('0x34')](function(_0x522363){if(_0x522363){logger['info']('The\x20Call\x20ID\x20is:',_0x522363['id']);logger['info'](_0x2265('0x86'),_0x2265('0x7a'));emit(util[_0x2265('0x13')]('user:%s',_0x1325c3['name']),_0x2265('0x7c'),{'uri':util[_0x2265('0x13')]('https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s',_0x4b655c[_0x2265('0x3d')],_0x522363['id'])});}})[_0x2265('0x7e')](function(_0x2c3d22){logger[_0x2265('0x4a')](_0x2265('0x86'),JSON[_0x2265('0x3a')](_0x2c3d22));});};exports[_0x2265('0x1f')]=function(_0x1df5b8,_0x303de5,_0x34ce61,_0x3f28ef,_0x2c8837,_0x4ec8a9){var _0x3eba2b,_0x11b259;_0x4ec8a9[_0x2265('0x3d')]=intUtil[_0x2265('0x6e')](_0x4ec8a9[_0x2265('0x3d')]);_0x4ec8a9[_0x2265('0x6f')]=intUtil[_0x2265('0x6e')](_0x4ec8a9[_0x2265('0x6f')]);if(_0x2c8837&&_0x2c8837[_0x2265('0x87')]){logger[_0x2265('0xe')](_0x2265('0x88'),'Recording\x20is\x20enabled!');_0x303de5['recordingURL']=util[_0x2265('0x13')](_0x2265('0x73'),_0x4ec8a9[_0x2265('0x6f')],_0x303de5[_0x2265('0x74')],md5(_0x303de5[_0x2265('0x74')]));}else{_0x303de5[_0x2265('0x72')]='';}return getUser(_0x4ec8a9)['then'](function(_0x2ad9fe){_0x3eba2b=_0x2ad9fe;logger[_0x2265('0xe')](_0x2265('0x82'),_0x3eba2b['id']);return getEndUser(_0x4ec8a9,_0x303de5['calleridname'],_0x303de5[_0x2265('0x76')]);})['then'](function(_0x5cf225){_0x11b259=_0x5cf225;logger[_0x2265('0xe')](_0x2265('0x77'),_0x11b259[_0x2265('0x27')]||_0x11b259[_0x2265('0x28')]);return getCall(_0x4ec8a9,_0x3eba2b,_0x11b259,_0x34ce61,_0x303de5,_0x2265('0x78'));})[_0x2265('0x34')](function(_0x2b6d3c){if(_0x2b6d3c){logger[_0x2265('0xe')](_0x2265('0x79'),_0x2b6d3c['id']);}})['catch'](function(_0xaa927f){logger[_0x2265('0x4a')]('[ABANDONED]',JSON[_0x2265('0x3a')](_0xaa927f));});};
\ No newline at end of file
index c4d4b5b..2db9217 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(_0x562e5c,_0x2b1a2d){var _0x578b52=function(_0x115b20){while(--_0x115b20){_0x562e5c['push'](_0x562e5c['shift']());}};_0x578b52(++_0x2b1a2d);}(_0x7a54,0x106));var _0x47a5=function(_0x3327ed,_0x25b003){_0x3327ed=_0x3327ed-0x0;var _0x3c0b73=_0x7a54[_0x3327ed];return _0x3c0b73;};'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(_0x10867e,_0x28ef12){var _0x5016cf=function(_0x133033){while(--_0x133033){_0x10867e['push'](_0x10867e['shift']());}};_0x5016cf(++_0x28ef12);}(_0x7a54,0x106));var _0x47a5=function(_0x1800f8,_0x4266c0){_0x1800f8=_0x1800f8-0x0;var _0x288b52=_0x7a54[_0x1800f8];return _0x288b52;};'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 e7188c9..a4844e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd99=['data7','info','%s\x20%s\x20sending\x20request\x20with\x20following\x20options:\x20%s','then','isNil',',\x20request\x20body:\x20','object','stringify','body','%s\x20%s\x20succeeded\x20with\x20status:\x20%d\x20and\x20response:\x20%s','statusCode','catch','error','format','%s\x20%s\x20failed\x20with\x20status:\x20%d\x20and\x20error:\x20%s\x20%s','name','message','request-promise','util','mustache','../../../../config/logger','exec','data1','render','data2','headers','data6','parse','stack','toUpperCase','GET','POST','PUT'];(function(_0x31f096,_0x55b21c){var _0x548270=function(_0xe8cf36){while(--_0xe8cf36){_0x31f096['push'](_0x31f096['shift']());}};_0x548270(++_0x55b21c);}(_0xbd99,0x1df));var _0x9bd9=function(_0x39a201,_0x20b64a){_0x39a201=_0x39a201-0x0;var _0x214d3a=_0xbd99[_0x39a201];return _0x214d3a;};'use strict';var rp=require(_0x9bd9('0x0'));var util=require(_0x9bd9('0x1'));var _=require('lodash');var Mustache=require(_0x9bd9('0x2'));var logger=require(_0x9bd9('0x3'))('trigger');exports[_0x9bd9('0x4')]=function(_0x3ffcc6,_0x1369ea){var _0x25acc7,_0x42b0f5;var _0x1d9c56={'method':_0x3ffcc6[_0x9bd9('0x5')]['toUpperCase'](),'uri':encodeURI(Mustache[_0x9bd9('0x6')](_0x3ffcc6[_0x9bd9('0x7')],_0x1369ea)),'json':!![],'resolveWithFullResponse':!![]};try{_0x1d9c56[_0x9bd9('0x8')]=_0x3ffcc6[_0x9bd9('0x9')]?JSON[_0x9bd9('0xa')](Mustache[_0x9bd9('0x6')](_0x3ffcc6['data6'],_0x1369ea)):{};}catch(_0x865dc1){logger['error'](_0x865dc1[_0x9bd9('0xb')]);}switch(_0x3ffcc6[_0x9bd9('0x5')][_0x9bd9('0xc')]()){case _0x9bd9('0xd'):_0x1d9c56['qs']=_0x1369ea;break;case _0x9bd9('0xe'):case _0x9bd9('0xf'):_0x25acc7={};if(_0x3ffcc6[_0x9bd9('0x10')]){_0x25acc7=Mustache['render'](_0x3ffcc6[_0x9bd9('0x10')],_0x1369ea);}else{_0x25acc7=_0x1369ea;}_0x1d9c56['body']=JSON['parse'](_0x25acc7);break;}logger[_0x9bd9('0x11')](util['format'](_0x9bd9('0x12'),_0x3ffcc6[_0x9bd9('0x5')],_0x3ffcc6[_0x9bd9('0x7')],JSON['stringify'](_0x1d9c56)));rp(_0x1d9c56)[_0x9bd9('0x13')](function(_0x4f9039){_0x25acc7=!_[_0x9bd9('0x14')](_0x25acc7)?_0x9bd9('0x15')+_0x25acc7:'';_0x42b0f5=typeof _0x4f9039['body']===_0x9bd9('0x16')?JSON[_0x9bd9('0x17')](_0x4f9039[_0x9bd9('0x18')]):_0x4f9039[_0x9bd9('0x18')];logger['info'](util['format'](_0x9bd9('0x19'),_0x3ffcc6[_0x9bd9('0x5')],_0x3ffcc6[_0x9bd9('0x7')],_0x4f9039[_0x9bd9('0x1a')],_0x42b0f5));})[_0x9bd9('0x1b')](function(_0x3e52ae){logger[_0x9bd9('0x1c')](util[_0x9bd9('0x1d')](_0x9bd9('0x1e'),_0x3ffcc6[_0x9bd9('0x5')],_0x3ffcc6['data2'],_0x3e52ae[_0x9bd9('0x1a')],_0x3e52ae[_0x9bd9('0x1f')],_0x3e52ae[_0x9bd9('0x20')]));});};
\ No newline at end of file
+var _0x1cc3=['error','%s\x20%s\x20failed\x20with\x20status:\x20%d\x20and\x20error:\x20%s\x20%s','name','message','request-promise','util','mustache','trigger','exec','toUpperCase','render','data2','headers','data6','parse','stack','data1','GET','POST','PUT','data7','body','info','format','stringify','then','isNil',',\x20request\x20body:\x20','object','%s\x20%s\x20succeeded\x20with\x20status:\x20%d\x20and\x20response:\x20%s','statusCode'];(function(_0xbc16b2,_0x56d823){var _0x3e70a3=function(_0x45e70e){while(--_0x45e70e){_0xbc16b2['push'](_0xbc16b2['shift']());}};_0x3e70a3(++_0x56d823);}(_0x1cc3,0x11b));var _0x31cc=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x1cc3[_0x20a584];return _0x4b41a8;};'use strict';var rp=require(_0x31cc('0x0'));var util=require(_0x31cc('0x1'));var _=require('lodash');var Mustache=require(_0x31cc('0x2'));var logger=require('../../../../config/logger')(_0x31cc('0x3'));exports[_0x31cc('0x4')]=function(_0x30120f,_0x5e06b9){var _0x103c04,_0xebc7cc;var _0x32b9a6={'method':_0x30120f['data1'][_0x31cc('0x5')](),'uri':encodeURI(Mustache[_0x31cc('0x6')](_0x30120f[_0x31cc('0x7')],_0x5e06b9)),'json':!![],'resolveWithFullResponse':!![]};try{_0x32b9a6[_0x31cc('0x8')]=_0x30120f[_0x31cc('0x9')]?JSON[_0x31cc('0xa')](Mustache[_0x31cc('0x6')](_0x30120f[_0x31cc('0x9')],_0x5e06b9)):{};}catch(_0x26af5c){logger['error'](_0x26af5c[_0x31cc('0xb')]);}switch(_0x30120f[_0x31cc('0xc')][_0x31cc('0x5')]()){case _0x31cc('0xd'):_0x32b9a6['qs']=_0x5e06b9;break;case _0x31cc('0xe'):case _0x31cc('0xf'):_0x103c04={};if(_0x30120f[_0x31cc('0x10')]){_0x103c04=Mustache[_0x31cc('0x6')](_0x30120f[_0x31cc('0x10')],_0x5e06b9);}else{_0x103c04=_0x5e06b9;}_0x32b9a6[_0x31cc('0x11')]=JSON['parse'](_0x103c04);break;}logger[_0x31cc('0x12')](util[_0x31cc('0x13')]('%s\x20%s\x20sending\x20request\x20with\x20following\x20options:\x20%s',_0x30120f[_0x31cc('0xc')],_0x30120f[_0x31cc('0x7')],JSON[_0x31cc('0x14')](_0x32b9a6)));rp(_0x32b9a6)[_0x31cc('0x15')](function(_0x10738a){_0x103c04=!_[_0x31cc('0x16')](_0x103c04)?_0x31cc('0x17')+_0x103c04:'';_0xebc7cc=typeof _0x10738a[_0x31cc('0x11')]===_0x31cc('0x18')?JSON[_0x31cc('0x14')](_0x10738a[_0x31cc('0x11')]):_0x10738a['body'];logger[_0x31cc('0x12')](util[_0x31cc('0x13')](_0x31cc('0x19'),_0x30120f['data1'],_0x30120f[_0x31cc('0x7')],_0x10738a[_0x31cc('0x1a')],_0xebc7cc));})['catch'](function(_0x465103){logger[_0x31cc('0x1b')](util[_0x31cc('0x13')](_0x31cc('0x1c'),_0x30120f[_0x31cc('0xc')],_0x30120f['data2'],_0x465103[_0x31cc('0x1a')],_0x465103[_0x31cc('0x1d')],_0x465103[_0x31cc('0x1e')]));});};
\ No newline at end of file
index 4559987..8a9c074 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x76bb=['routing','client','Request','then','debug','rpc','error','message','result','catch','exports','bluebird','../../config/logger'];(function(_0x5221d7,_0x397cad){var _0x22b102=function(_0x583d5f){while(--_0x583d5f){_0x5221d7['push'](_0x5221d7['shift']());}};_0x22b102(++_0x397cad);}(_0x76bb,0x16a));var _0xb76b=function(_0x176329,_0x568c84){_0x176329=_0x176329-0x0;var _0x31997c=_0x76bb[_0x176329];return _0x31997c;};'use strict';var jayson=require('jayson/promise');var BPromise=require(_0xb76b('0x0'));var logger=require(_0xb76b('0x1'))(_0xb76b('0x2'));var client=jayson[_0xb76b('0x3')]['http']({'port':0x2329});client[_0xb76b('0x4')]=function(_0x1f5d45,_0x4e5042){return new BPromise(function(_0x414cff,_0x19a231){return client['request'](_0x1f5d45,_0x4e5042)[_0xb76b('0x5')](function(_0x361737){logger[_0xb76b('0x6')](_0xb76b('0x7'),_0xb76b('0x2'),_0x1f5d45,_0x4e5042,_0x361737);if(_0x361737['error']){logger[_0xb76b('0x8')](_0xb76b('0x7'),_0xb76b('0x2'),_0x1f5d45,_0x361737[_0xb76b('0x8')]['message'],_0x4e5042);return _0x19a231(_0x361737['error'][_0xb76b('0x9')]);}else{return _0x414cff(_0x361737[_0xb76b('0xa')]);}})[_0xb76b('0xb')](function(_0x2ebb61){logger[_0xb76b('0x8')](_0xb76b('0x7'),_0xb76b('0x2'),_0x1f5d45,_0x2ebb61,_0x4e5042);return _0x19a231(_0x2ebb61);});});};module[_0xb76b('0xc')]=client;
\ No newline at end of file
+var _0x4006=['../../config/logger','routing','client','then','debug','rpc','error','message','result','catch','exports','bluebird'];(function(_0x22f8ab,_0x15d8ff){var _0x2a70e5=function(_0x5e6895){while(--_0x5e6895){_0x22f8ab['push'](_0x22f8ab['shift']());}};_0x2a70e5(++_0x15d8ff);}(_0x4006,0x1c7));var _0x6400=function(_0x3566e0,_0x2256cf){_0x3566e0=_0x3566e0-0x0;var _0xbf235e=_0x4006[_0x3566e0];return _0xbf235e;};'use strict';var jayson=require('jayson/promise');var BPromise=require(_0x6400('0x0'));var logger=require(_0x6400('0x1'))(_0x6400('0x2'));var client=jayson[_0x6400('0x3')]['http']({'port':0x2329});client['Request']=function(_0xee0578,_0x4b0418){return new BPromise(function(_0xd858df,_0x59fba5){return client['request'](_0xee0578,_0x4b0418)[_0x6400('0x4')](function(_0x599e6f){logger[_0x6400('0x5')](_0x6400('0x6'),_0x6400('0x2'),_0xee0578,_0x4b0418,_0x599e6f);if(_0x599e6f[_0x6400('0x7')]){logger['error'](_0x6400('0x6'),_0x6400('0x2'),_0xee0578,_0x599e6f[_0x6400('0x7')][_0x6400('0x8')],_0x4b0418);return _0x59fba5(_0x599e6f[_0x6400('0x7')][_0x6400('0x8')]);}else{return _0xd858df(_0x599e6f[_0x6400('0x9')]);}})[_0x6400('0xa')](function(_0x237e22){logger[_0x6400('0x7')](_0x6400('0x6'),'routing',_0xee0578,_0x237e22,_0x4b0418);return _0x59fba5(_0x237e22);});});};module[_0x6400('0xb')]=client;
\ No newline at end of file
index 60d1536..6463e44 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x92ce=['initMailAccounts','refresh','mailAccounts','listen','catch','log','bluebird','./server','./realtime','./lib/email','./rpc/mailAccount','resolve','then','getMailAccounts'];(function(_0x3a5bd3,_0x33f75c){var _0x287006=function(_0x1ef58a){while(--_0x1ef58a){_0x3a5bd3['push'](_0x3a5bd3['shift']());}};_0x287006(++_0x33f75c);}(_0x92ce,0x1e2));var _0xe92c=function(_0x3af67e,_0x2149e8){_0x3af67e=_0x3af67e-0x0;var _0x1df8a8=_0x92ce[_0x3af67e];return _0x1df8a8;};'use strict';var BPromise=require(_0xe92c('0x0'));var server=require(_0xe92c('0x1'));var Realtime=require(_0xe92c('0x2'));var EmailChannel=require(_0xe92c('0x3'));var mailAccount=require(_0xe92c('0x4'));var realtime=new Realtime();var email=new EmailChannel(realtime);function initRealtime(){return BPromise[_0xe92c('0x5')]()[_0xe92c('0x6')](mailAccount[_0xe92c('0x7')]())[_0xe92c('0x6')](realtime[_0xe92c('0x8')]())[_0xe92c('0x6')](function(){email[_0xe92c('0x9')](realtime[_0xe92c('0xa')]);return realtime;});}function main(){return server[_0xe92c('0xb')](realtime,email)[_0xe92c('0x6')](function(_0x25939f){return initRealtime();})[_0xe92c('0x6')](function(_0x3af3f4){return setInterval(initRealtime,0x2710);})[_0xe92c('0xc')](function(_0x10e8f4){console[_0xe92c('0xd')](_0x10e8f4);});}main();
\ No newline at end of file
+var _0x2aac=['refresh','log','bluebird','./server','./lib/email','./rpc/mailAccount','resolve','then','getMailAccounts'];(function(_0x1693e4,_0x2cf275){var _0x3930ba=function(_0x2a02ad){while(--_0x2a02ad){_0x1693e4['push'](_0x1693e4['shift']());}};_0x3930ba(++_0x2cf275);}(_0x2aac,0x119));var _0xc2aa=function(_0x4171d2,_0x3f2642){_0x4171d2=_0x4171d2-0x0;var _0x5ecb56=_0x2aac[_0x4171d2];return _0x5ecb56;};'use strict';var BPromise=require(_0xc2aa('0x0'));var server=require(_0xc2aa('0x1'));var Realtime=require('./realtime');var EmailChannel=require(_0xc2aa('0x2'));var mailAccount=require(_0xc2aa('0x3'));var realtime=new Realtime();var email=new EmailChannel(realtime);function initRealtime(){return BPromise[_0xc2aa('0x4')]()[_0xc2aa('0x5')](mailAccount[_0xc2aa('0x6')]())[_0xc2aa('0x5')](realtime['initMailAccounts']())[_0xc2aa('0x5')](function(){email[_0xc2aa('0x7')](realtime['mailAccounts']);return realtime;});}function main(){return server['listen'](realtime,email)[_0xc2aa('0x5')](function(_0x1c0f95){return initRealtime();})[_0xc2aa('0x5')](function(_0x47e192){return setInterval(initRealtime,0x2710);})['catch'](function(_0x18f5e1){console[_0xc2aa('0x8')](_0x18f5e1);});}main();
\ No newline at end of file
index 74e32ae..93a6dfe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbff5=['ioredis','../../../config/environment','../../../config/logger','redis','localhost','socket.io-emitter','./imap','./smtp','../rpc/mailAccount','info','start\x20email\x20channel','mailAccounts','smtp','prototype','name','key','Imap','messageStatus','total','isNil','emit','refresh','hasOwnProperty','active','imapAccounts','handleImapBox','email','handleImapEmail','bind','end','handleImapEnd','handleImapError','disabled','status','connected','messages','New\x20email\x20from\x20%s\x20%s\x20%s\x20to\x20%s','firstName','lastName','from','then','Mail\x20accepted\x20from\x20routing','catch','error','Mail\x20not\x20accepted\x20from\x20routing\x20%s','lastSync','sendMail','send','verifySmtp','Smtp','verify','exports','lodash','moment','bluebird','md5'];(function(_0x34676e,_0x343fd3){var _0x50311f=function(_0x4bb05c){while(--_0x4bb05c){_0x34676e['push'](_0x34676e['shift']());}};_0x50311f(++_0x343fd3);}(_0xbff5,0x1bc));var _0x5bff=function(_0xfeb8ca,_0x8d1b67){_0xfeb8ca=_0xfeb8ca-0x0;var _0x204a4b=_0xbff5[_0xfeb8ca];return _0x204a4b;};'use strict';var _=require(_0x5bff('0x0'));var moment=require(_0x5bff('0x1'));var BPromise=require(_0x5bff('0x2'));var md5=require(_0x5bff('0x3'));var Redis=require(_0x5bff('0x4'));var config=require(_0x5bff('0x5'));var logger=require(_0x5bff('0x6'))('email');config[_0x5bff('0x7')]=_['defaults'](config['redis'],{'host':_0x5bff('0x8'),'port':0x18eb});var io=require(_0x5bff('0x9'))(new Redis(config[_0x5bff('0x7')]));var EmailImap=require(_0x5bff('0xa'));var EmailSmtp=require(_0x5bff('0xb'));var mailAccount=require(_0x5bff('0xc'));var md5Accounts={};function EmailChannel(_0x1acb49){logger[_0x5bff('0xd')](_0x5bff('0xe'));this['mailAccounts']=_0x1acb49[_0x5bff('0xf')];this['imapAccounts']={};this[_0x5bff('0x10')]=new EmailSmtp();}EmailChannel[_0x5bff('0x11')]['emit']=function(_0x3e72e9){var _0x5aff6f=this[_0x5bff('0xf')][_0x3e72e9];var _0x4ff164={'id':_0x5aff6f['id'],'name':_0x5aff6f[_0x5bff('0x12')],'key':_0x5aff6f[_0x5bff('0x13')],'active':_0x5aff6f['active'],'Imap':{'status':_0x5aff6f[_0x5bff('0x14')]['status'],'messageStatus':_0x5aff6f[_0x5bff('0x14')][_0x5bff('0x15')],'total':_0x5aff6f['Imap'][_0x5bff('0x16')]}};if(_[_0x5bff('0x17')](md5Accounts[_0x3e72e9])){md5Accounts[_0x3e72e9]={};}var _0x5b0d2d=md5(JSON['stringify'](_0x4ff164));if(md5Accounts[_0x3e72e9][_0x5bff('0x3')]!==_0x5b0d2d){md5Accounts[_0x3e72e9][_0x5bff('0x3')]=_0x5b0d2d;io[_0x5bff('0x18')]('mailAccount:update',_0x4ff164);}};EmailChannel[_0x5bff('0x11')][_0x5bff('0x19')]=function(_0xcb8995){for(var _0x56c7b2 in _0xcb8995){if(_0xcb8995[_0x5bff('0x1a')](_0x56c7b2)){if(_0xcb8995[_0x56c7b2][_0x5bff('0x14')]&&_0xcb8995[_0x56c7b2][_0x5bff('0x1b')]){var _0x546351=_0xcb8995[_0x56c7b2][_0x5bff('0x14')];if(!this[_0x5bff('0x1c')][_0x5bff('0x1a')](_0x546351['id'])){this[_0x5bff('0x1c')][_0x546351['id']]=new EmailImap(_0x546351,_0xcb8995[_0x56c7b2]['email']);this[_0x5bff('0x1c')][_0x546351['id']]['on']('box',this[_0x5bff('0x1d')]['bind'](this,_0x56c7b2));this[_0x5bff('0x1c')][_0x546351['id']]['on'](_0x5bff('0x1e'),this[_0x5bff('0x1f')][_0x5bff('0x20')](this,_0x56c7b2));this[_0x5bff('0x1c')][_0x546351['id']]['on'](_0x5bff('0x21'),this[_0x5bff('0x22')][_0x5bff('0x20')](this,_0x56c7b2));this[_0x5bff('0x1c')][_0x546351['id']]['on']('error',this[_0x5bff('0x23')][_0x5bff('0x20')](this,_0x56c7b2));}}else{if(_[_0x5bff('0x17')](this[_0x5bff('0xf')][_0x56c7b2][_0x5bff('0x14')])){this[_0x5bff('0xf')][_0x56c7b2][_0x5bff('0x14')]={};}this[_0x5bff('0xf')][_0x56c7b2]['Imap']['status']=_0x5bff('0x24');this['mailAccounts'][_0x56c7b2][_0x5bff('0x14')][_0x5bff('0x15')]='';this[_0x5bff('0x18')](_0x56c7b2);}}}};EmailChannel[_0x5bff('0x11')][_0x5bff('0x1d')]=function(_0x1140eb,_0x271f3c){if(this[_0x5bff('0xf')][_0x1140eb]){this['mailAccounts'][_0x1140eb]['Imap'][_0x5bff('0x25')]=_0x5bff('0x26');this['mailAccounts'][_0x1140eb][_0x5bff('0x14')]['messageStatus']=_0x271f3c['name'];if(_0x271f3c[_0x5bff('0x27')]){this['mailAccounts'][_0x1140eb][_0x5bff('0x14')][_0x5bff('0x16')]=_0x271f3c[_0x5bff('0x27')][_0x5bff('0x16')];}return this['emit'](_0x1140eb);}};EmailChannel[_0x5bff('0x11')]['handleImapEmail']=function(_0x3c1405,_0x5a7873){logger[_0x5bff('0xd')](_0x5bff('0x28'),_0x5a7873[_0x5bff('0x29')],_0x5a7873[_0x5bff('0x2a')],_0x5a7873[_0x5bff('0x2b')],_0x3c1405);if(this[_0x5bff('0xf')][_0x3c1405]){return mailAccount['notify'](_0x3c1405,_0x5a7873)[_0x5bff('0x2c')](function(_0x31c33f){if(_0x31c33f){logger[_0x5bff('0xd')](_0x5bff('0x2d'));}})[_0x5bff('0x2e')](function(_0x276862){logger[_0x5bff('0x2f')](_0x5bff('0x30'),JSON['stringify'](_0x276862));});}};EmailChannel[_0x5bff('0x11')][_0x5bff('0x22')]=function(_0x2f50e1){if(this[_0x5bff('0xf')][_0x2f50e1]&&this['mailAccounts'][_0x2f50e1][_0x5bff('0x14')]){if(this[_0x5bff('0x1c')][this['mailAccounts'][_0x2f50e1][_0x5bff('0x14')]['id']]){delete this[_0x5bff('0x1c')][this[_0x5bff('0xf')][_0x2f50e1][_0x5bff('0x14')]['id']];}this['mailAccounts'][_0x2f50e1][_0x5bff('0x14')][_0x5bff('0x31')]=moment();this[_0x5bff('0x18')](_0x2f50e1);}};EmailChannel['prototype'][_0x5bff('0x23')]=function(_0x55f603,_0x4572e6){if(this[_0x5bff('0xf')][_0x55f603]){this[_0x5bff('0xf')][_0x55f603]['Imap'][_0x5bff('0x25')]=_0x5bff('0x2f');this[_0x5bff('0xf')][_0x55f603]['Imap'][_0x5bff('0x15')]=_0x4572e6;return this[_0x5bff('0x18')](_0x55f603);}};EmailChannel['prototype'][_0x5bff('0x32')]=function(_0x1151d4,_0x2ff182){return this[_0x5bff('0x10')][_0x5bff('0x33')](_0x1151d4,_0x2ff182);};EmailChannel['prototype'][_0x5bff('0x34')]=function(_0x4c6b4a){var _0x449c6a=this;if(this[_0x5bff('0xf')][_0x4c6b4a['id']]){if(_[_0x5bff('0x17')](this[_0x5bff('0xf')][_0x4c6b4a['id']][_0x5bff('0x35')])){this[_0x5bff('0xf')][_0x4c6b4a['id']][_0x5bff('0x35')]={};}this['mailAccounts'][_0x4c6b4a['id']]['Smtp'][_0x5bff('0x31')]=moment();return new BPromise(function(_0x2b9e6f,_0x3006c4){return _0x449c6a[_0x5bff('0x10')][_0x5bff('0x36')](_0x4c6b4a)[_0x5bff('0x2c')](function(_0x13de8a){_0x449c6a[_0x5bff('0xf')][_0x4c6b4a['id']]['Smtp'][_0x5bff('0x25')]='verified';_0x449c6a[_0x5bff('0xf')][_0x4c6b4a['id']][_0x5bff('0x35')]['messageStatus']='';_0x449c6a[_0x5bff('0x18')](_0x4c6b4a['id']);_0x2b9e6f(_0x13de8a);})[_0x5bff('0x2e')](function(_0x536277){_0x449c6a[_0x5bff('0xf')][_0x4c6b4a['id']][_0x5bff('0x35')][_0x5bff('0x25')]='error';_0x449c6a[_0x5bff('0xf')][_0x4c6b4a['id']][_0x5bff('0x35')][_0x5bff('0x15')]=_0x536277;_0x449c6a['emit'](_0x4c6b4a['id']);_0x3006c4(_0x536277);});});}return this[_0x5bff('0x10')][_0x5bff('0x36')](_0x4c6b4a);};module[_0x5bff('0x37')]=EmailChannel;
\ No newline at end of file
+var _0x3914=['mailAccounts','imapAccounts','smtp','emit','name','key','active','Imap','status','messageStatus','isNil','stringify','prototype','refresh','hasOwnProperty','box','handleImapBox','bind','handleImapEmail','handleImapEnd','error','disabled','connected','messages','total','New\x20email\x20from\x20%s\x20%s\x20%s\x20to\x20%s','firstName','lastName','from','then','Mail\x20not\x20accepted\x20from\x20routing\x20%s','lastSync','handleImapError','sendMail','send','Smtp','verify','verified','catch','lodash','moment','md5','ioredis','../../../config/logger','email','redis','localhost','./smtp','info'];(function(_0x498537,_0x452760){var _0x27d926=function(_0x130050){while(--_0x130050){_0x498537['push'](_0x498537['shift']());}};_0x27d926(++_0x452760);}(_0x3914,0xeb));var _0x4391=function(_0x30ae5e,_0x391fc4){_0x30ae5e=_0x30ae5e-0x0;var _0x1f2e93=_0x3914[_0x30ae5e];return _0x1f2e93;};'use strict';var _=require(_0x4391('0x0'));var moment=require(_0x4391('0x1'));var BPromise=require('bluebird');var md5=require(_0x4391('0x2'));var Redis=require(_0x4391('0x3'));var config=require('../../../config/environment');var logger=require(_0x4391('0x4'))(_0x4391('0x5'));config[_0x4391('0x6')]=_['defaults'](config[_0x4391('0x6')],{'host':_0x4391('0x7'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x4391('0x6')]));var EmailImap=require('./imap');var EmailSmtp=require(_0x4391('0x8'));var mailAccount=require('../rpc/mailAccount');var md5Accounts={};function EmailChannel(_0x378c09){logger[_0x4391('0x9')]('start\x20email\x20channel');this['mailAccounts']=_0x378c09[_0x4391('0xa')];this[_0x4391('0xb')]={};this[_0x4391('0xc')]=new EmailSmtp();}EmailChannel['prototype'][_0x4391('0xd')]=function(_0x2e2293){var _0x3d485d=this[_0x4391('0xa')][_0x2e2293];var _0x5c932f={'id':_0x3d485d['id'],'name':_0x3d485d[_0x4391('0xe')],'key':_0x3d485d[_0x4391('0xf')],'active':_0x3d485d[_0x4391('0x10')],'Imap':{'status':_0x3d485d[_0x4391('0x11')][_0x4391('0x12')],'messageStatus':_0x3d485d[_0x4391('0x11')][_0x4391('0x13')],'total':_0x3d485d[_0x4391('0x11')]['total']}};if(_[_0x4391('0x14')](md5Accounts[_0x2e2293])){md5Accounts[_0x2e2293]={};}var _0x3bd3a7=md5(JSON[_0x4391('0x15')](_0x5c932f));if(md5Accounts[_0x2e2293][_0x4391('0x2')]!==_0x3bd3a7){md5Accounts[_0x2e2293]['md5']=_0x3bd3a7;io[_0x4391('0xd')]('mailAccount:update',_0x5c932f);}};EmailChannel[_0x4391('0x16')][_0x4391('0x17')]=function(_0x3e4585){for(var _0x1c2038 in _0x3e4585){if(_0x3e4585[_0x4391('0x18')](_0x1c2038)){if(_0x3e4585[_0x1c2038][_0x4391('0x11')]&&_0x3e4585[_0x1c2038][_0x4391('0x10')]){var _0x19924d=_0x3e4585[_0x1c2038]['Imap'];if(!this['imapAccounts'][_0x4391('0x18')](_0x19924d['id'])){this['imapAccounts'][_0x19924d['id']]=new EmailImap(_0x19924d,_0x3e4585[_0x1c2038][_0x4391('0x5')]);this[_0x4391('0xb')][_0x19924d['id']]['on'](_0x4391('0x19'),this[_0x4391('0x1a')][_0x4391('0x1b')](this,_0x1c2038));this['imapAccounts'][_0x19924d['id']]['on']('email',this[_0x4391('0x1c')][_0x4391('0x1b')](this,_0x1c2038));this[_0x4391('0xb')][_0x19924d['id']]['on']('end',this[_0x4391('0x1d')][_0x4391('0x1b')](this,_0x1c2038));this[_0x4391('0xb')][_0x19924d['id']]['on'](_0x4391('0x1e'),this['handleImapError'][_0x4391('0x1b')](this,_0x1c2038));}}else{if(_[_0x4391('0x14')](this[_0x4391('0xa')][_0x1c2038][_0x4391('0x11')])){this[_0x4391('0xa')][_0x1c2038][_0x4391('0x11')]={};}this['mailAccounts'][_0x1c2038][_0x4391('0x11')][_0x4391('0x12')]=_0x4391('0x1f');this[_0x4391('0xa')][_0x1c2038]['Imap']['messageStatus']='';this[_0x4391('0xd')](_0x1c2038);}}}};EmailChannel[_0x4391('0x16')][_0x4391('0x1a')]=function(_0x197408,_0x3785a8){if(this['mailAccounts'][_0x197408]){this['mailAccounts'][_0x197408]['Imap']['status']=_0x4391('0x20');this[_0x4391('0xa')][_0x197408][_0x4391('0x11')][_0x4391('0x13')]=_0x3785a8['name'];if(_0x3785a8[_0x4391('0x21')]){this[_0x4391('0xa')][_0x197408][_0x4391('0x11')][_0x4391('0x22')]=_0x3785a8[_0x4391('0x21')]['total'];}return this[_0x4391('0xd')](_0x197408);}};EmailChannel[_0x4391('0x16')][_0x4391('0x1c')]=function(_0x2b5a06,_0x237d61){logger[_0x4391('0x9')](_0x4391('0x23'),_0x237d61[_0x4391('0x24')],_0x237d61[_0x4391('0x25')],_0x237d61[_0x4391('0x26')],_0x2b5a06);if(this[_0x4391('0xa')][_0x2b5a06]){return mailAccount['notify'](_0x2b5a06,_0x237d61)[_0x4391('0x27')](function(_0x50bd4c){if(_0x50bd4c){logger[_0x4391('0x9')]('Mail\x20accepted\x20from\x20routing');}})['catch'](function(_0x174788){logger[_0x4391('0x1e')](_0x4391('0x28'),JSON[_0x4391('0x15')](_0x174788));});}};EmailChannel[_0x4391('0x16')][_0x4391('0x1d')]=function(_0x205b8e){if(this['mailAccounts'][_0x205b8e]&&this[_0x4391('0xa')][_0x205b8e]['Imap']){if(this[_0x4391('0xb')][this['mailAccounts'][_0x205b8e][_0x4391('0x11')]['id']]){delete this[_0x4391('0xb')][this[_0x4391('0xa')][_0x205b8e][_0x4391('0x11')]['id']];}this[_0x4391('0xa')][_0x205b8e][_0x4391('0x11')][_0x4391('0x29')]=moment();this[_0x4391('0xd')](_0x205b8e);}};EmailChannel[_0x4391('0x16')][_0x4391('0x2a')]=function(_0x1eafcc,_0x410ff1){if(this[_0x4391('0xa')][_0x1eafcc]){this[_0x4391('0xa')][_0x1eafcc][_0x4391('0x11')][_0x4391('0x12')]=_0x4391('0x1e');this[_0x4391('0xa')][_0x1eafcc]['Imap']['messageStatus']=_0x410ff1;return this[_0x4391('0xd')](_0x1eafcc);}};EmailChannel[_0x4391('0x16')][_0x4391('0x2b')]=function(_0x469c71,_0x127d6c){return this[_0x4391('0xc')][_0x4391('0x2c')](_0x469c71,_0x127d6c);};EmailChannel[_0x4391('0x16')]['verifySmtp']=function(_0x16cd5e){var _0x4cdace=this;if(this['mailAccounts'][_0x16cd5e['id']]){if(_['isNil'](this['mailAccounts'][_0x16cd5e['id']][_0x4391('0x2d')])){this[_0x4391('0xa')][_0x16cd5e['id']][_0x4391('0x2d')]={};}this[_0x4391('0xa')][_0x16cd5e['id']]['Smtp']['lastSync']=moment();return new BPromise(function(_0x1b640d,_0x57feea){return _0x4cdace[_0x4391('0xc')][_0x4391('0x2e')](_0x16cd5e)[_0x4391('0x27')](function(_0x3e80b7){_0x4cdace[_0x4391('0xa')][_0x16cd5e['id']][_0x4391('0x2d')]['status']=_0x4391('0x2f');_0x4cdace[_0x4391('0xa')][_0x16cd5e['id']][_0x4391('0x2d')][_0x4391('0x13')]='';_0x4cdace[_0x4391('0xd')](_0x16cd5e['id']);_0x1b640d(_0x3e80b7);})[_0x4391('0x30')](function(_0x10efb6){_0x4cdace['mailAccounts'][_0x16cd5e['id']][_0x4391('0x2d')][_0x4391('0x12')]=_0x4391('0x1e');_0x4cdace[_0x4391('0xa')][_0x16cd5e['id']][_0x4391('0x2d')][_0x4391('0x13')]=_0x10efb6;_0x4cdace[_0x4391('0xd')](_0x16cd5e['id']);_0x57feea(_0x10efb6);});});}return this['smtp'][_0x4391('0x2e')](_0x16cd5e);};module['exports']=EmailChannel;
\ No newline at end of file
index b2371bc..b5cc306 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc79f=['hasOwnProperty','exports','path','util','imap','lodash','randomstring','simpleParser','iconv','Iconv','events','EventEmitter','./utils','../../../config/logger','email','mailbox','account','getAccount','once','ready','handleReady','end','bind','handleError','connect','inherits','connTimeout','authTimeout','isNil','service','authentication','user','password','host','port','tls','autotls','required','getHost','anonymous@xcally.com','prototype','handleOpenBox','emit','readUnseen','handleCloseBox','search','handleReadUnseen','length','fetch','error','handleFetchError','handleFetchEnd','closeBox','handleFetchMessage','body','attributes','handleMessageAttributes','handleMessageBody','handleSimpleParser','handleMessageEnd','parser','handleEnd','stringify','textCode'];(function(_0x37a79c,_0x2b19f0){var _0x561d89=function(_0x19bee3){while(--_0x19bee3){_0x37a79c['push'](_0x37a79c['shift']());}};_0x561d89(++_0x2b19f0);}(_0xc79f,0x82));var _0xfc79=function(_0x30464b,_0x5c2178){_0x30464b=_0x30464b-0x0;var _0x132696=_0xc79f[_0x30464b];return _0x132696;};'use strict';var fs=require('fs');var path=require(_0xfc79('0x0'));var util=require(_0xfc79('0x1'));var Imap=require(_0xfc79('0x2'));var _=require(_0xfc79('0x3'));var rs=require(_0xfc79('0x4'));var simpleParser=require('mailparser')[_0xfc79('0x5')];var Iconv=require(_0xfc79('0x6'))[_0xfc79('0x7')];var EventEmitter=require(_0xfc79('0x8'))[_0xfc79('0x9')];var utils=require(_0xfc79('0xa'));var logger=require(_0xfc79('0xb'))(_0xfc79('0xc'));function EmailImap(_0x3df358,_0x47f36c){this[_0xfc79('0xd')]='INBOX';this[_0xfc79('0xe')]=this[_0xfc79('0xf')](_0x3df358,_0x47f36c);this[_0xfc79('0x2')]=new Imap(this['account']);this[_0xfc79('0x2')][_0xfc79('0x10')](_0xfc79('0x11'),this[_0xfc79('0x12')]['bind'](this));this[_0xfc79('0x2')][_0xfc79('0x10')](_0xfc79('0x13'),this['handleEnd'][_0xfc79('0x14')](this));this[_0xfc79('0x2')]['on']('error',this[_0xfc79('0x15')]['bind'](this));this[_0xfc79('0x2')][_0xfc79('0x16')]();}util[_0xfc79('0x17')](EmailImap,EventEmitter);EmailImap['prototype'][_0xfc79('0xf')]=function(_0x29c937,_0x3b986d){var _0x262350={'connTimeout':_0x29c937[_0xfc79('0x18')]?_0x29c937[_0xfc79('0x18')]*0x3e8:0x2710,'authTimeout':_0x29c937['authTimeout']?_0x29c937[_0xfc79('0x19')]*0x3e8:0x1388};if(_[_0xfc79('0x1a')](_0x29c937[_0xfc79('0x1b')])){if(_0x29c937[_0xfc79('0x1c')]){_0x262350['user']=_0x29c937[_0xfc79('0x1d')];_0x262350[_0xfc79('0x1e')]=_0x29c937[_0xfc79('0x1e')];}_0x262350[_0xfc79('0x1f')]=_0x29c937['host'];_0x262350['port']=_0x29c937[_0xfc79('0x20')]||0x3e1;if(_0x29c937['tls']){_0x262350[_0xfc79('0x21')]=!![];}else{_0x262350[_0xfc79('0x21')]=![];_0x262350[_0xfc79('0x22')]=_0xfc79('0x23');}}else{_0x262350['user']=_0x29c937[_0xfc79('0x1d')];_0x262350[_0xfc79('0x1e')]=_0x29c937[_0xfc79('0x1e')];_0x262350[_0xfc79('0x1f')]=utils[_0xfc79('0x24')](_0x29c937[_0xfc79('0x1b')]);_0x262350[_0xfc79('0x20')]=0x3e1;_0x262350['tls']=!![];}_0x262350[_0xfc79('0xc')]=_0x3b986d||_0x29c937[_0xfc79('0x1d')]||_0xfc79('0x25');return _0x262350;};EmailImap[_0xfc79('0x26')][_0xfc79('0x12')]=function(){this['imap']['openBox'](this['mailbox'],![],this[_0xfc79('0x27')][_0xfc79('0x14')](this));};EmailImap[_0xfc79('0x26')][_0xfc79('0x27')]=function(_0x5dcf36,_0x1c152){if(_0x5dcf36){this['handleError'](_0x5dcf36,!![]);}else{this[_0xfc79('0x28')]('box',_0x1c152);this[_0xfc79('0x29')]();}};EmailImap[_0xfc79('0x26')][_0xfc79('0x2a')]=function(_0x523270){if(_0x523270){this[_0xfc79('0x15')](_0x523270,!![]);}else{this[_0xfc79('0x2')][_0xfc79('0x13')]();}};EmailImap[_0xfc79('0x26')][_0xfc79('0x29')]=function(){this[_0xfc79('0x2')][_0xfc79('0x2b')](['UNSEEN'],this[_0xfc79('0x2c')][_0xfc79('0x14')](this));};EmailImap[_0xfc79('0x26')][_0xfc79('0x2c')]=function(_0x52212b,_0x386b1b){if(_0x52212b){this[_0xfc79('0x15')](_0x52212b,!![]);}else{if(_0x386b1b[_0xfc79('0x2d')]){try{var _0x25c703=this[_0xfc79('0x2')][_0xfc79('0x2e')](_0x386b1b,{'bodies':'','markSeen':!![]});_0x25c703['on']('message',this['handleFetchMessage'][_0xfc79('0x14')](this));_0x25c703['once'](_0xfc79('0x2f'),this[_0xfc79('0x30')][_0xfc79('0x14')](this));_0x25c703[_0xfc79('0x10')](_0xfc79('0x13'),this[_0xfc79('0x31')][_0xfc79('0x14')](this));}catch(_0x384271){logger[_0xfc79('0x2f')](_0x384271);}}else{this['imap'][_0xfc79('0x32')](!![],this[_0xfc79('0x2a')][_0xfc79('0x14')](this));}}};EmailImap[_0xfc79('0x26')][_0xfc79('0x33')]=function(_0x483671,_0x37ae13){_0x483671['on'](_0xfc79('0x34'),this['handleMessageBody']['bind'](this));_0x483671['once'](_0xfc79('0x35'),this[_0xfc79('0x36')][_0xfc79('0x14')](this));_0x483671[_0xfc79('0x10')](_0xfc79('0x13'),this['handleMessageEnd'][_0xfc79('0x14')](this));};EmailImap[_0xfc79('0x26')][_0xfc79('0x37')]=function(_0x5b89fa,_0xa101a1){simpleParser(_0x5b89fa,{'Iconv':Iconv},this[_0xfc79('0x38')]['bind'](this));};EmailImap['prototype'][_0xfc79('0x36')]=function(_0x3f40e8){};EmailImap[_0xfc79('0x26')][_0xfc79('0x39')]=function(){};EmailImap[_0xfc79('0x26')][_0xfc79('0x38')]=function(_0x812fb5,_0xcefb99){if(_0x812fb5){logger[_0xfc79('0x2f')](_0x812fb5);}else{var _0x55ad84=this;utils[_0xfc79('0x3a')](this[_0xfc79('0xe')],_0xcefb99,function(_0x3f0db8){_0x55ad84['emit'](_0xfc79('0xc'),_0x3f0db8);});}};EmailImap['prototype'][_0xfc79('0x31')]=function(){this[_0xfc79('0x2')][_0xfc79('0x32')](!![],this[_0xfc79('0x2a')][_0xfc79('0x14')](this));};EmailImap[_0xfc79('0x26')][_0xfc79('0x30')]=function(_0x3022a7){this[_0xfc79('0x15')](_0x3022a7);this[_0xfc79('0x2')][_0xfc79('0x32')](!![],this[_0xfc79('0x2a')][_0xfc79('0x14')](this));};EmailImap[_0xfc79('0x26')][_0xfc79('0x3b')]=function(){this[_0xfc79('0x28')](_0xfc79('0x13'));};EmailImap['prototype'][_0xfc79('0x15')]=function(_0x537559,_0xdfcefb){logger[_0xfc79('0x2f')](_0xfc79('0x15'),this[_0xfc79('0xe')][_0xfc79('0xc')],JSON[_0xfc79('0x3c')](_0x537559));var _0x39bd13='';if(_0x537559){if(_0x537559[_0xfc79('0x3d')]){_0x39bd13=_0x537559[_0xfc79('0x3d')];}else{for(var _0x40c50c in _0x537559){if(_0x537559[_0xfc79('0x3e')](_0x40c50c)){_0x39bd13+=_['upperFirst'](_0x40c50c)+':\x20'+_0x537559[_0x40c50c]+'\x0a';}}}}if(_0xdfcefb){this['imap'][_0xfc79('0x13')]();}else{this['emit'](_0xfc79('0x2f'),_0x39bd13);this['emit']('end');}};module[_0xfc79('0x3f')]=EmailImap;
\ No newline at end of file
+var _0xd353=['hasOwnProperty','exports','path','util','lodash','randomstring','iconv','events','EventEmitter','./utils','../../../config/logger','email','INBOX','account','getAccount','imap','once','ready','handleReady','handleError','connect','inherits','prototype','connTimeout','authTimeout','isNil','service','authentication','user','password','host','port','tls','required','anonymous@xcally.com','bind','handleOpenBox','handleCloseBox','readUnseen','search','UNSEEN','handleReadUnseen','length','fetch','message','handleFetchMessage','error','handleFetchError','handleFetchEnd','closeBox','body','handleMessageBody','attributes','handleMessageAttributes','end','handleMessageEnd','handleSimpleParser','parser','emit','handleEnd','stringify','textCode'];(function(_0x59bcb1,_0x5a4b6c){var _0x4a737f=function(_0x546a49){while(--_0x546a49){_0x59bcb1['push'](_0x59bcb1['shift']());}};_0x4a737f(++_0x5a4b6c);}(_0xd353,0x7e));var _0x3d35=function(_0x510c5a,_0x5867d6){_0x510c5a=_0x510c5a-0x0;var _0x8544dc=_0xd353[_0x510c5a];return _0x8544dc;};'use strict';var fs=require('fs');var path=require(_0x3d35('0x0'));var util=require(_0x3d35('0x1'));var Imap=require('imap');var _=require(_0x3d35('0x2'));var rs=require(_0x3d35('0x3'));var simpleParser=require('mailparser')['simpleParser'];var Iconv=require(_0x3d35('0x4'))['Iconv'];var EventEmitter=require(_0x3d35('0x5'))[_0x3d35('0x6')];var utils=require(_0x3d35('0x7'));var logger=require(_0x3d35('0x8'))(_0x3d35('0x9'));function EmailImap(_0x174b6b,_0x1cf467){this['mailbox']=_0x3d35('0xa');this[_0x3d35('0xb')]=this[_0x3d35('0xc')](_0x174b6b,_0x1cf467);this[_0x3d35('0xd')]=new Imap(this[_0x3d35('0xb')]);this[_0x3d35('0xd')][_0x3d35('0xe')](_0x3d35('0xf'),this[_0x3d35('0x10')]['bind'](this));this['imap'][_0x3d35('0xe')]('end',this['handleEnd']['bind'](this));this['imap']['on']('error',this[_0x3d35('0x11')]['bind'](this));this[_0x3d35('0xd')][_0x3d35('0x12')]();}util[_0x3d35('0x13')](EmailImap,EventEmitter);EmailImap[_0x3d35('0x14')]['getAccount']=function(_0x46b4e8,_0x2118cd){var _0x5c0391={'connTimeout':_0x46b4e8[_0x3d35('0x15')]?_0x46b4e8[_0x3d35('0x15')]*0x3e8:0x2710,'authTimeout':_0x46b4e8['authTimeout']?_0x46b4e8[_0x3d35('0x16')]*0x3e8:0x1388};if(_[_0x3d35('0x17')](_0x46b4e8[_0x3d35('0x18')])){if(_0x46b4e8[_0x3d35('0x19')]){_0x5c0391[_0x3d35('0x1a')]=_0x46b4e8[_0x3d35('0x1a')];_0x5c0391['password']=_0x46b4e8[_0x3d35('0x1b')];}_0x5c0391[_0x3d35('0x1c')]=_0x46b4e8[_0x3d35('0x1c')];_0x5c0391[_0x3d35('0x1d')]=_0x46b4e8['port']||0x3e1;if(_0x46b4e8['tls']){_0x5c0391[_0x3d35('0x1e')]=!![];}else{_0x5c0391['tls']=![];_0x5c0391['autotls']=_0x3d35('0x1f');}}else{_0x5c0391[_0x3d35('0x1a')]=_0x46b4e8[_0x3d35('0x1a')];_0x5c0391[_0x3d35('0x1b')]=_0x46b4e8['password'];_0x5c0391[_0x3d35('0x1c')]=utils['getHost'](_0x46b4e8[_0x3d35('0x18')]);_0x5c0391[_0x3d35('0x1d')]=0x3e1;_0x5c0391[_0x3d35('0x1e')]=!![];}_0x5c0391[_0x3d35('0x9')]=_0x2118cd||_0x46b4e8[_0x3d35('0x1a')]||_0x3d35('0x20');return _0x5c0391;};EmailImap[_0x3d35('0x14')][_0x3d35('0x10')]=function(){this[_0x3d35('0xd')]['openBox'](this['mailbox'],![],this['handleOpenBox'][_0x3d35('0x21')](this));};EmailImap[_0x3d35('0x14')][_0x3d35('0x22')]=function(_0x5ee1f3,_0x2c7ca4){if(_0x5ee1f3){this['handleError'](_0x5ee1f3,!![]);}else{this['emit']('box',_0x2c7ca4);this['readUnseen']();}};EmailImap['prototype'][_0x3d35('0x23')]=function(_0x1fbf77){if(_0x1fbf77){this['handleError'](_0x1fbf77,!![]);}else{this['imap']['end']();}};EmailImap[_0x3d35('0x14')][_0x3d35('0x24')]=function(){this[_0x3d35('0xd')][_0x3d35('0x25')]([_0x3d35('0x26')],this['handleReadUnseen'][_0x3d35('0x21')](this));};EmailImap[_0x3d35('0x14')][_0x3d35('0x27')]=function(_0x4f3ded,_0x12d74c){if(_0x4f3ded){this[_0x3d35('0x11')](_0x4f3ded,!![]);}else{if(_0x12d74c[_0x3d35('0x28')]){try{var _0x576ffc=this['imap'][_0x3d35('0x29')](_0x12d74c,{'bodies':'','markSeen':!![]});_0x576ffc['on'](_0x3d35('0x2a'),this[_0x3d35('0x2b')][_0x3d35('0x21')](this));_0x576ffc[_0x3d35('0xe')](_0x3d35('0x2c'),this[_0x3d35('0x2d')][_0x3d35('0x21')](this));_0x576ffc[_0x3d35('0xe')]('end',this[_0x3d35('0x2e')]['bind'](this));}catch(_0x55ddff){logger['error'](_0x55ddff);}}else{this[_0x3d35('0xd')][_0x3d35('0x2f')](!![],this[_0x3d35('0x23')][_0x3d35('0x21')](this));}}};EmailImap[_0x3d35('0x14')]['handleFetchMessage']=function(_0x293d05,_0x54c826){_0x293d05['on'](_0x3d35('0x30'),this[_0x3d35('0x31')][_0x3d35('0x21')](this));_0x293d05[_0x3d35('0xe')](_0x3d35('0x32'),this[_0x3d35('0x33')][_0x3d35('0x21')](this));_0x293d05[_0x3d35('0xe')](_0x3d35('0x34'),this[_0x3d35('0x35')][_0x3d35('0x21')](this));};EmailImap[_0x3d35('0x14')][_0x3d35('0x31')]=function(_0x553297,_0xfd4a4d){simpleParser(_0x553297,{'Iconv':Iconv},this['handleSimpleParser'][_0x3d35('0x21')](this));};EmailImap[_0x3d35('0x14')]['handleMessageAttributes']=function(_0x3529e8){};EmailImap['prototype'][_0x3d35('0x35')]=function(){};EmailImap['prototype'][_0x3d35('0x36')]=function(_0x30d4e9,_0x5a1d64){if(_0x30d4e9){logger['error'](_0x30d4e9);}else{var _0x3480bd=this;utils[_0x3d35('0x37')](this[_0x3d35('0xb')],_0x5a1d64,function(_0x5b041a){_0x3480bd[_0x3d35('0x38')](_0x3d35('0x9'),_0x5b041a);});}};EmailImap['prototype'][_0x3d35('0x2e')]=function(){this[_0x3d35('0xd')][_0x3d35('0x2f')](!![],this['handleCloseBox'][_0x3d35('0x21')](this));};EmailImap[_0x3d35('0x14')][_0x3d35('0x2d')]=function(_0x2995ed){this[_0x3d35('0x11')](_0x2995ed);this[_0x3d35('0xd')]['closeBox'](!![],this[_0x3d35('0x23')]['bind'](this));};EmailImap[_0x3d35('0x14')][_0x3d35('0x39')]=function(){this[_0x3d35('0x38')](_0x3d35('0x34'));};EmailImap[_0x3d35('0x14')][_0x3d35('0x11')]=function(_0x1198b4,_0x1d52b4){logger[_0x3d35('0x2c')](_0x3d35('0x11'),this[_0x3d35('0xb')][_0x3d35('0x9')],JSON[_0x3d35('0x3a')](_0x1198b4));var _0xf6e6b1='';if(_0x1198b4){if(_0x1198b4['textCode']){_0xf6e6b1=_0x1198b4[_0x3d35('0x3b')];}else{for(var _0x247c1f in _0x1198b4){if(_0x1198b4[_0x3d35('0x3c')](_0x247c1f)){_0xf6e6b1+=_['upperFirst'](_0x247c1f)+':\x20'+_0x1198b4[_0x247c1f]+'\x0a';}}}}if(_0x1d52b4){this[_0x3d35('0xd')]['end']();}else{this[_0x3d35('0x38')](_0x3d35('0x2c'),_0xf6e6b1);this['emit'](_0x3d35('0x34'));}};module[_0x3d35('0x3d')]=EmailImap;
\ No newline at end of file
index ca5b251..9cf5cb1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5c04=['nodemailer-plugin-inline-base64','prototype','use','compile','verify','createTransport','toString','Not\x20verifired','exports','bluebird'];(function(_0x4b369d,_0x265eb8){var _0x571a98=function(_0x56341a){while(--_0x56341a){_0x4b369d['push'](_0x4b369d['shift']());}};_0x571a98(++_0x265eb8);}(_0x5c04,0x9f));var _0x45c0=function(_0x193b8e,_0x170fd5){_0x193b8e=_0x193b8e-0x0;var _0xfea41d=_0x5c04[_0x193b8e];return _0xfea41d;};'use strict';var nodemailer=require('nodemailer');var BPromise=require(_0x45c0('0x0'));var inlineBase64=require(_0x45c0('0x1'));function EmailSmtp(){}EmailSmtp[_0x45c0('0x2')]['send']=function(_0x2bfbf4,_0x244e95){return new BPromise(function(_0x222838,_0x4c8bfb){var _0x5dfaa3=nodemailer['createTransport'](_0x2bfbf4);_0x5dfaa3[_0x45c0('0x3')](_0x45c0('0x4'),inlineBase64());_0x5dfaa3['sendMail'](_0x244e95,function(_0x5e1462,_0x48b22f){if(_0x5e1462){_0x4c8bfb(_0x5e1462['toString']());}else{_0x222838(_0x48b22f);}});});};EmailSmtp[_0x45c0('0x2')][_0x45c0('0x5')]=function(_0xd04f14){return new BPromise(function(_0x373d47,_0x5e8c3a){var _0x235e75=nodemailer[_0x45c0('0x6')](_0xd04f14);_0x235e75[_0x45c0('0x5')](function(_0x3b5391,_0xe1d9a6){if(_0x3b5391){_0x5e8c3a(_0x3b5391[_0x45c0('0x7')]());}else{if(_0xe1d9a6){_0x373d47(_0xe1d9a6);}else{_0x5e8c3a(_0x45c0('0x8'));}}});});};module[_0x45c0('0x9')]=EmailSmtp;
\ No newline at end of file
+var _0x01d5=['verify','createTransport','Not\x20verifired','exports','nodemailer','nodemailer-plugin-inline-base64','prototype','send','use','sendMail','toString'];(function(_0x10cba9,_0x4c22b1){var _0x255cad=function(_0x40c4a2){while(--_0x40c4a2){_0x10cba9['push'](_0x10cba9['shift']());}};_0x255cad(++_0x4c22b1);}(_0x01d5,0x67));var _0x501d=function(_0x37f5a6,_0x25838c){_0x37f5a6=_0x37f5a6-0x0;var _0x58122e=_0x01d5[_0x37f5a6];return _0x58122e;};'use strict';var nodemailer=require(_0x501d('0x0'));var BPromise=require('bluebird');var inlineBase64=require(_0x501d('0x1'));function EmailSmtp(){}EmailSmtp[_0x501d('0x2')][_0x501d('0x3')]=function(_0x299d46,_0x13d22){return new BPromise(function(_0x1ffa6f,_0x143a13){var _0x1715c2=nodemailer['createTransport'](_0x299d46);_0x1715c2[_0x501d('0x4')]('compile',inlineBase64());_0x1715c2[_0x501d('0x5')](_0x13d22,function(_0x62dd95,_0x33f26e){if(_0x62dd95){_0x143a13(_0x62dd95[_0x501d('0x6')]());}else{_0x1ffa6f(_0x33f26e);}});});};EmailSmtp[_0x501d('0x2')][_0x501d('0x7')]=function(_0x5e4a8b){return new BPromise(function(_0x17a253,_0x2e442f){var _0x3c8f21=nodemailer[_0x501d('0x8')](_0x5e4a8b);_0x3c8f21[_0x501d('0x7')](function(_0x52df7b,_0x3541b2){if(_0x52df7b){_0x2e442f(_0x52df7b['toString']());}else{if(_0x3541b2){_0x17a253(_0x3541b2);}else{_0x2e442f(_0x501d('0x9'));}}});});};module[_0x501d('0xa')]=EmailSmtp;
\ No newline at end of file
index b6cb66d..69a6c15 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ff5=['gmail','imap.gmail.com','hotmail','imap-mail.outlook.com','outlook365','outlook.office365.com','127.0.0.1','moment','randomstring','util','node-tnef','../../../config/logger','email','../../../config/environment','head','value','address','anonymous','generate','@xcally.com','name','split','length','slice','join','pop','isEmpty','html','test','replace','body','textAsHtml','<a\x20target=\x22_blank\x22\x20','message','originCc','includes','originTo','bcc','attachments','attach','type','attachment','filename','attachment-','format','%s-%s','server/files/attachments/','writeFileSync','content','contentType','from','subject','inReplyTo','date','YYYY-MM-DD\x20HH:mm:ss','application/ms-tnef','Email\x20message\x20%s\x20is\x20in\x20TNEF\x20format:\x20message\x20content\x20will\x20be\x20converted\x20by\x20the\x20system','parseBuffer','first','BodyHTML','<p>Empty\x20message</p>','Attachments','push','Title','Data','getHost'];(function(_0x44158f,_0x3c5634){var _0x352c6b=function(_0x1ac0a3){while(--_0x1ac0a3){_0x44158f['push'](_0x44158f['shift']());}};_0x352c6b(++_0x3c5634);}(_0x2ff5,0x1d5));var _0x52ff=function(_0x4a26fc,_0x1d6663){_0x4a26fc=_0x4a26fc-0x0;var _0x1701d0=_0x2ff5[_0x4a26fc];return _0x1701d0;};'use strict';var _=require('lodash');var moment=require(_0x52ff('0x0'));var random=require(_0x52ff('0x1'));var fs=require('fs');var path=require('path');var util=require(_0x52ff('0x2'));var tnef=require(_0x52ff('0x3'));var logger=require(_0x52ff('0x4'))(_0x52ff('0x5'));var config=require(_0x52ff('0x6'));function getAddress(_0xbfba62){var _0x4f5f6e=_[_0x52ff('0x7')](_0xbfba62[_0x52ff('0x8')]);return _0x4f5f6e&&_0x4f5f6e[_0x52ff('0x9')]?_0x4f5f6e['address']:_0x52ff('0xa')+random[_0x52ff('0xb')](0x6)+_0x52ff('0xc');}function getFirstName(_0x17ca0b){var _0xb498c3=_[_0x52ff('0x7')](_0x17ca0b[_0x52ff('0x8')]);if(_0xb498c3&&_0xb498c3[_0x52ff('0xd')]){var _0x5e127e=_0xb498c3[_0x52ff('0xd')][_0x52ff('0xe')](/\s+/);return _0x5e127e[_0x52ff('0xf')]?_0x5e127e[_0x52ff('0x10')](0x0,-0x1)[_0x52ff('0x11')]('\x20'):_0xb498c3[_0x52ff('0xd')];}return'Anonymous';}function getLastName(_0x59afbe){var _0x5084c3=_['head'](_0x59afbe[_0x52ff('0x8')]);if(_0x5084c3&&_0x5084c3['name']){var _0x3bc467=_0x5084c3[_0x52ff('0xd')]['split'](/\s+/);return _0x3bc467[_0x52ff('0xf')]>0x1?_0x3bc467[_0x52ff('0x12')]():'';}return'';}function getMails(_0x3c787b,_0x2023d3){var _0x418202='';for(var _0x27c987=0x0;_0x27c987<_0x2023d3['value'][_0x52ff('0xf')];_0x27c987+=0x1){if(_0x2023d3[_0x52ff('0x8')][_0x27c987][_0x52ff('0x9')]!==_0x3c787b){if(!_[_0x52ff('0x13')](_0x418202)){_0x418202+=',';}_0x418202+=_0x2023d3[_0x52ff('0x8')][_0x27c987][_0x52ff('0xd')]||_0x2023d3['value'][_0x27c987][_0x52ff('0x9')]||'';_0x418202+='\x20<';_0x418202+=_0x2023d3[_0x52ff('0x8')][_0x27c987][_0x52ff('0x9')]?_0x2023d3[_0x52ff('0x8')][_0x27c987]['address']:_0x52ff('0xa')+random[_0x52ff('0xb')](0x6)+_0x52ff('0xc');_0x418202+='>';}}return _0x418202;}function parseEmail(_0x58efb4,_0x3d008d,_0x10ad04){if(_0x3d008d[_0x52ff('0x14')]){var _0x1d36c0=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;while(_0x1d36c0[_0x52ff('0x15')](_0x3d008d[_0x52ff('0x14')])){_0x3d008d[_0x52ff('0x14')]=_0x3d008d[_0x52ff('0x14')][_0x52ff('0x16')](_0x1d36c0,'');}_0x10ad04[_0x52ff('0x17')]=_0x3d008d[_0x52ff('0x14')];}else{_0x10ad04[_0x52ff('0x17')]=_0x3d008d[_0x52ff('0x18')];}if(_0x10ad04[_0x52ff('0x17')]){_0x10ad04['body']=_0x10ad04[_0x52ff('0x17')][_0x52ff('0x16')](/<a\s+/gi,_0x52ff('0x19'));}if(_0x3d008d['to']){_0x10ad04[_0x52ff('0x1a')]['originTo']=getMails(null,_0x3d008d['to']);var _0x4172ec=getMails(_0x58efb4[_0x52ff('0x5')],_0x3d008d['to']);if(!_[_0x52ff('0x13')](_0x4172ec)){_0x10ad04['message']['cc']+=_0x4172ec;}}if(_0x3d008d['cc']){_0x10ad04['message'][_0x52ff('0x1b')]=getMails(null,_0x3d008d['cc']);var _0x3f5e22=getMails(_0x58efb4[_0x52ff('0x5')],_0x3d008d['cc']);if(!_[_0x52ff('0x13')](_0x3f5e22)){if(!_[_0x52ff('0x13')](_0x10ad04[_0x52ff('0x1a')]['cc'])){_0x10ad04[_0x52ff('0x1a')]['cc']+=',';}_0x10ad04[_0x52ff('0x1a')]['cc']+=_0x3f5e22;}}if(!_[_0x52ff('0x1c')](_0x10ad04[_0x52ff('0x1a')][_0x52ff('0x1d')],_0x58efb4[_0x52ff('0x5')])&&!_[_0x52ff('0x1c')](_0x10ad04[_0x52ff('0x1a')]['originCc'],_0x58efb4[_0x52ff('0x5')])){_0x10ad04['message'][_0x52ff('0x1e')]=_0x58efb4[_0x52ff('0x5')];}if(_0x3d008d['attachments']&&_0x3d008d[_0x52ff('0x1f')][_0x52ff('0xf')]){_0x10ad04[_0x52ff('0x1a')][_0x52ff('0x20')]=_0x3d008d['attachments'][_0x52ff('0xf')];for(var _0x36d750=0x0,_0x526c35,_0x603c97,_0x2f437d;_0x36d750<_0x3d008d[_0x52ff('0x1f')][_0x52ff('0xf')];_0x36d750+=0x1){if(_0x3d008d['attachments'][_0x36d750][_0x52ff('0x21')]===_0x52ff('0x22')){_0x2f437d=_0x3d008d['attachments'][_0x36d750][_0x52ff('0x23')]||_0x52ff('0x24')+_0x36d750;_0x526c35=util[_0x52ff('0x25')](_0x52ff('0x26'),Date['now'](),_0x2f437d);_0x603c97=path[_0x52ff('0x11')](config['root'],_0x52ff('0x27'),_0x526c35);fs[_0x52ff('0x28')](_0x603c97,_0x3d008d['attachments'][_0x36d750][_0x52ff('0x29')]);_0x10ad04[_0x52ff('0x1a')][_0x52ff('0x1f')]['push']({'name':_0x2f437d,'basename':_0x526c35,'type':_0x3d008d['attachments'][_0x36d750][_0x52ff('0x2a')],'filepath':_0x603c97});}}}return _0x10ad04;}exports['parser']=function(_0x38a8f1,_0x4f5997,_0x14f909){var _0x2a5653={'from':getAddress(_0x4f5997['from']),'firstName':getFirstName(_0x4f5997[_0x52ff('0x2b')]),'lastName':getLastName(_0x4f5997[_0x52ff('0x2b')]),'mapKey':_0x52ff('0x5'),'message':{'from':getMails(_0x38a8f1[_0x52ff('0x5')],_0x4f5997[_0x52ff('0x2b')]),'to':_0x38a8f1[_0x52ff('0x5')],'cc':'','subject':_0x4f5997[_0x52ff('0x2c')]||'','messageId':_0x4f5997['messageId'],'inReplyTo':_0x4f5997[_0x52ff('0x2d')],'sentAt':moment(_0x4f5997[_0x52ff('0x2e')])[_0x52ff('0x25')](_0x52ff('0x2f')),'attach':![],'attachments':[]}};if(!_0x4f5997[_0x52ff('0x14')]&&!_0x4f5997[_0x52ff('0x18')]){var _0x2b5c21=_['filter'](_0x4f5997[_0x52ff('0x1f')],{'contentType':_0x52ff('0x30')});if(_0x2b5c21[_0x52ff('0xf')]){logger['info'](util['format'](_0x52ff('0x31'),_0x4f5997['messageId']));tnef[_0x52ff('0x32')](_[_0x52ff('0x33')](_0x2b5c21)[_0x52ff('0x29')],function(_0x28c330,_0x27d3f1){if(_0x27d3f1){_0x4f5997[_0x52ff('0x14')]=_0x27d3f1[_0x52ff('0x34')]||_0x52ff('0x35');if(_0x27d3f1[_0x52ff('0x36')]){for(var _0x501a2f=0x0;_0x501a2f<_0x27d3f1[_0x52ff('0x36')][_0x52ff('0xf')];_0x501a2f++){var _0x5a5c37=_0x27d3f1[_0x52ff('0x36')][_0x501a2f];_0x2a5653[_0x52ff('0x1a')][_0x52ff('0x1f')][_0x52ff('0x37')]({'filename':_0x5a5c37[_0x52ff('0x38')],'content':new Buffer(_0x5a5c37[_0x52ff('0x39')])});}}}_0x14f909(parseEmail(_0x38a8f1,_0x4f5997,_0x2a5653));});}else{_0x4f5997[_0x52ff('0x14')]='<p>Empty\x20message</p>';_0x14f909(parseEmail(_0x38a8f1,_0x4f5997,_0x2a5653));}}else{_0x14f909(parseEmail(_0x38a8f1,_0x4f5997,_0x2a5653));}};exports[_0x52ff('0x3a')]=function(_0x41c260){switch(_0x41c260){case _0x52ff('0x3b'):return _0x52ff('0x3c');case'yahoo':return'imap.mail.yahoo.com';case _0x52ff('0x3d'):return _0x52ff('0x3e');case _0x52ff('0x3f'):return _0x52ff('0x40');}return _0x52ff('0x41');};
\ No newline at end of file
+var _0xff8d=['originTo','email','includes','originCc','bcc','attach','attachments','attachment','attachment-','format','%s-%s','server/files/attachments/','writeFileSync','content','contentType','from','subject','messageId','inReplyTo','YYYY-MM-DD\x20HH:mm:ss','textAsHtml','info','first','BodyHTML','<p>Empty\x20message</p>','Attachments','push','Title','Data','getHost','gmail','imap.gmail.com','imap.mail.yahoo.com','hotmail','imap-mail.outlook.com','outlook365','127.0.0.1','lodash','randomstring','path','util','node-tnef','../../../config/logger','../../../config/environment','head','address','anonymous','value','name','split','length','join','Anonymous','pop','isEmpty','generate','@xcally.com','html','body','replace','<a\x20target=\x22_blank\x22\x20','message'];(function(_0x2b6fa6,_0x3d80ed){var _0x2c6047=function(_0x19df1e){while(--_0x19df1e){_0x2b6fa6['push'](_0x2b6fa6['shift']());}};_0x2c6047(++_0x3d80ed);}(_0xff8d,0xdf));var _0xdff8=function(_0x771868,_0x3226e9){_0x771868=_0x771868-0x0;var _0x4d6d6e=_0xff8d[_0x771868];return _0x4d6d6e;};'use strict';var _=require(_0xdff8('0x0'));var moment=require('moment');var random=require(_0xdff8('0x1'));var fs=require('fs');var path=require(_0xdff8('0x2'));var util=require(_0xdff8('0x3'));var tnef=require(_0xdff8('0x4'));var logger=require(_0xdff8('0x5'))('email');var config=require(_0xdff8('0x6'));function getAddress(_0x4f86c3){var _0x5793d4=_[_0xdff8('0x7')](_0x4f86c3['value']);return _0x5793d4&&_0x5793d4[_0xdff8('0x8')]?_0x5793d4['address']:_0xdff8('0x9')+random['generate'](0x6)+'@xcally.com';}function getFirstName(_0x1d1b70){var _0x26de4b=_[_0xdff8('0x7')](_0x1d1b70[_0xdff8('0xa')]);if(_0x26de4b&&_0x26de4b[_0xdff8('0xb')]){var _0x41a88b=_0x26de4b[_0xdff8('0xb')][_0xdff8('0xc')](/\s+/);return _0x41a88b[_0xdff8('0xd')]?_0x41a88b['slice'](0x0,-0x1)[_0xdff8('0xe')]('\x20'):_0x26de4b[_0xdff8('0xb')];}return _0xdff8('0xf');}function getLastName(_0x553668){var _0x3dbea7=_[_0xdff8('0x7')](_0x553668['value']);if(_0x3dbea7&&_0x3dbea7[_0xdff8('0xb')]){var _0x2a4028=_0x3dbea7[_0xdff8('0xb')][_0xdff8('0xc')](/\s+/);return _0x2a4028[_0xdff8('0xd')]>0x1?_0x2a4028[_0xdff8('0x10')]():'';}return'';}function getMails(_0x2b10ba,_0x492f95){var _0xf10871='';for(var _0x4735a4=0x0;_0x4735a4<_0x492f95[_0xdff8('0xa')][_0xdff8('0xd')];_0x4735a4+=0x1){if(_0x492f95['value'][_0x4735a4][_0xdff8('0x8')]!==_0x2b10ba){if(!_[_0xdff8('0x11')](_0xf10871)){_0xf10871+=',';}_0xf10871+=_0x492f95[_0xdff8('0xa')][_0x4735a4]['name']||_0x492f95['value'][_0x4735a4][_0xdff8('0x8')]||'';_0xf10871+='\x20<';_0xf10871+=_0x492f95[_0xdff8('0xa')][_0x4735a4][_0xdff8('0x8')]?_0x492f95[_0xdff8('0xa')][_0x4735a4][_0xdff8('0x8')]:_0xdff8('0x9')+random[_0xdff8('0x12')](0x6)+_0xdff8('0x13');_0xf10871+='>';}}return _0xf10871;}function parseEmail(_0x538a18,_0x452f55,_0xa72d18){if(_0x452f55[_0xdff8('0x14')]){var _0x128171=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;while(_0x128171['test'](_0x452f55[_0xdff8('0x14')])){_0x452f55[_0xdff8('0x14')]=_0x452f55[_0xdff8('0x14')]['replace'](_0x128171,'');}_0xa72d18['body']=_0x452f55[_0xdff8('0x14')];}else{_0xa72d18[_0xdff8('0x15')]=_0x452f55['textAsHtml'];}if(_0xa72d18[_0xdff8('0x15')]){_0xa72d18['body']=_0xa72d18['body'][_0xdff8('0x16')](/<a\s+/gi,_0xdff8('0x17'));}if(_0x452f55['to']){_0xa72d18[_0xdff8('0x18')][_0xdff8('0x19')]=getMails(null,_0x452f55['to']);var _0x18aebd=getMails(_0x538a18['email'],_0x452f55['to']);if(!_[_0xdff8('0x11')](_0x18aebd)){_0xa72d18['message']['cc']+=_0x18aebd;}}if(_0x452f55['cc']){_0xa72d18[_0xdff8('0x18')]['originCc']=getMails(null,_0x452f55['cc']);var _0x1d9691=getMails(_0x538a18[_0xdff8('0x1a')],_0x452f55['cc']);if(!_['isEmpty'](_0x1d9691)){if(!_['isEmpty'](_0xa72d18[_0xdff8('0x18')]['cc'])){_0xa72d18['message']['cc']+=',';}_0xa72d18['message']['cc']+=_0x1d9691;}}if(!_[_0xdff8('0x1b')](_0xa72d18['message'][_0xdff8('0x19')],_0x538a18[_0xdff8('0x1a')])&&!_[_0xdff8('0x1b')](_0xa72d18[_0xdff8('0x18')][_0xdff8('0x1c')],_0x538a18[_0xdff8('0x1a')])){_0xa72d18[_0xdff8('0x18')][_0xdff8('0x1d')]=_0x538a18[_0xdff8('0x1a')];}if(_0x452f55['attachments']&&_0x452f55['attachments'][_0xdff8('0xd')]){_0xa72d18[_0xdff8('0x18')][_0xdff8('0x1e')]=_0x452f55[_0xdff8('0x1f')][_0xdff8('0xd')];for(var _0x19f923=0x0,_0x2eba1a,_0x5b253c,_0x3a1cdd;_0x19f923<_0x452f55['attachments'][_0xdff8('0xd')];_0x19f923+=0x1){if(_0x452f55[_0xdff8('0x1f')][_0x19f923]['type']===_0xdff8('0x20')){_0x3a1cdd=_0x452f55[_0xdff8('0x1f')][_0x19f923]['filename']||_0xdff8('0x21')+_0x19f923;_0x2eba1a=util[_0xdff8('0x22')](_0xdff8('0x23'),Date['now'](),_0x3a1cdd);_0x5b253c=path[_0xdff8('0xe')](config['root'],_0xdff8('0x24'),_0x2eba1a);fs[_0xdff8('0x25')](_0x5b253c,_0x452f55[_0xdff8('0x1f')][_0x19f923][_0xdff8('0x26')]);_0xa72d18['message'][_0xdff8('0x1f')]['push']({'name':_0x3a1cdd,'basename':_0x2eba1a,'type':_0x452f55['attachments'][_0x19f923][_0xdff8('0x27')],'filepath':_0x5b253c});}}}return _0xa72d18;}exports['parser']=function(_0x6123f3,_0x305310,_0x4a07c6){var _0x5d6ed0={'from':getAddress(_0x305310[_0xdff8('0x28')]),'firstName':getFirstName(_0x305310['from']),'lastName':getLastName(_0x305310[_0xdff8('0x28')]),'mapKey':_0xdff8('0x1a'),'message':{'from':getMails(_0x6123f3[_0xdff8('0x1a')],_0x305310[_0xdff8('0x28')]),'to':_0x6123f3['email'],'cc':'','subject':_0x305310[_0xdff8('0x29')]||'','messageId':_0x305310[_0xdff8('0x2a')],'inReplyTo':_0x305310[_0xdff8('0x2b')],'sentAt':moment(_0x305310['date'])[_0xdff8('0x22')](_0xdff8('0x2c')),'attach':![],'attachments':[]}};if(!_0x305310['html']&&!_0x305310[_0xdff8('0x2d')]){var _0x3aec3a=_['filter'](_0x305310[_0xdff8('0x1f')],{'contentType':'application/ms-tnef'});if(_0x3aec3a[_0xdff8('0xd')]){logger[_0xdff8('0x2e')](util[_0xdff8('0x22')]('Email\x20message\x20%s\x20is\x20in\x20TNEF\x20format:\x20message\x20content\x20will\x20be\x20converted\x20by\x20the\x20system',_0x305310[_0xdff8('0x2a')]));tnef['parseBuffer'](_[_0xdff8('0x2f')](_0x3aec3a)[_0xdff8('0x26')],function(_0x2723de,_0x1afcbe){if(_0x1afcbe){_0x305310[_0xdff8('0x14')]=_0x1afcbe[_0xdff8('0x30')]||_0xdff8('0x31');if(_0x1afcbe['Attachments']){for(var _0x1d4a07=0x0;_0x1d4a07<_0x1afcbe[_0xdff8('0x32')]['length'];_0x1d4a07++){var _0x1887f2=_0x1afcbe[_0xdff8('0x32')][_0x1d4a07];_0x5d6ed0[_0xdff8('0x18')][_0xdff8('0x1f')][_0xdff8('0x33')]({'filename':_0x1887f2[_0xdff8('0x34')],'content':new Buffer(_0x1887f2[_0xdff8('0x35')])});}}}_0x4a07c6(parseEmail(_0x6123f3,_0x305310,_0x5d6ed0));});}else{_0x305310['html']=_0xdff8('0x31');_0x4a07c6(parseEmail(_0x6123f3,_0x305310,_0x5d6ed0));}}else{_0x4a07c6(parseEmail(_0x6123f3,_0x305310,_0x5d6ed0));}};exports[_0xdff8('0x36')]=function(_0x139a5e){switch(_0x139a5e){case _0xdff8('0x37'):return _0xdff8('0x38');case'yahoo':return _0xdff8('0x39');case _0xdff8('0x3a'):return _0xdff8('0x3b');case _0xdff8('0x3c'):return'outlook.office365.com';}return _0xdff8('0x3d');};
\ No newline at end of file
index 853bc32..9d35bed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x20e1=['active','Imap','Smtp','lodash','name','Service','key','SERV'];(function(_0x4a7874,_0x5464ed){var _0x336b94=function(_0x4bc55e){while(--_0x4bc55e){_0x4a7874['push'](_0x4a7874['shift']());}};_0x336b94(++_0x5464ed);}(_0x20e1,0xcb));var _0x120e=function(_0x3ee8d1,_0x54afbd){_0x3ee8d1=_0x3ee8d1-0x0;var _0x5e6660=_0x20e1[_0x3ee8d1];return _0x5e6660;};'use strict';var _=require(_0x120e('0x0'));function MailAccount(_0x438ffb){this['id']=_0x438ffb['id']||0x0;this[_0x120e('0x1')]=_0x438ffb[_0x120e('0x1')]||_0x120e('0x2');this[_0x120e('0x3')]=_0x438ffb[_0x120e('0x3')]||_0x120e('0x4');this[_0x120e('0x5')]=_0x438ffb[_0x120e('0x5')]||![];this['Imap']=_0x438ffb[_0x120e('0x6')]||[];this['Smtp']=_0x438ffb[_0x120e('0x7')]||[];}module['exports']=MailAccount;
\ No newline at end of file
+var _0x819a=['Imap','Smtp','exports','lodash','name','Service','key','SERV'];(function(_0x358d4c,_0xb78030){var _0x338814=function(_0x27b2ef){while(--_0x27b2ef){_0x358d4c['push'](_0x358d4c['shift']());}};_0x338814(++_0xb78030);}(_0x819a,0x16b));var _0xa819=function(_0x598be5,_0x5745b8){_0x598be5=_0x598be5-0x0;var _0x12672a=_0x819a[_0x598be5];return _0x12672a;};'use strict';var _=require(_0xa819('0x0'));function MailAccount(_0x34e8c8){this['id']=_0x34e8c8['id']||0x0;this[_0xa819('0x1')]=_0x34e8c8[_0xa819('0x1')]||_0xa819('0x2');this[_0xa819('0x3')]=_0x34e8c8['key']||_0xa819('0x4');this['active']=_0x34e8c8['active']||![];this[_0xa819('0x5')]=_0x34e8c8[_0xa819('0x5')]||[];this['Smtp']=_0x34e8c8[_0xa819('0x6')]||[];}module[_0xa819('0x7')]=MailAccount;
\ No newline at end of file
index f1081ff..79ba369 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x323f=['length','isUndefined','merge','exports','../model/mailAccount','mapKeys','hasOwnProperty','prototype','initMailAccounts','mailAccounts'];(function(_0x245b24,_0x4408be){var _0x16defe=function(_0x119450){while(--_0x119450){_0x245b24['push'](_0x245b24['shift']());}};_0x16defe(++_0x4408be);}(_0x323f,0x1ee));var _0xf323=function(_0x1ac595,_0x5d2081){_0x1ac595=_0x1ac595-0x0;var _0x455fff=_0x323f[_0x1ac595];return _0x455fff;};'use strict';var _=require('lodash');var MailAccount=require(_0xf323('0x0'));var Realtime=function(){this['mailAccounts']={};};function freeIsNotKey(_0x766661,_0x1a3006,_0x41c114){var _0xc09d02=_[_0xf323('0x1')](_0x766661,function(_0x2c9d35,_0xb4caa8){return _0x2c9d35[_0x41c114];});for(var _0x2d4750 in _0x1a3006){if(_0x1a3006[_0xf323('0x2')](_0x2d4750)){if(!_0xc09d02[_0x2d4750]){delete _0x1a3006[_0x2d4750];}}}}Realtime[_0xf323('0x3')]['mergeFromDatabase']=function(_0xb9a667,_0x444cba){for(var _0x1af70d in _0x444cba){if(_0xb9a667[_0xf323('0x2')](_0x1af70d)){_0xb9a667[_0x1af70d]=_0x444cba[_0x1af70d];}}};Realtime[_0xf323('0x3')][_0xf323('0x4')]=function(){var _0x105b93=this;return function(_0x2b24a2){if(_0x2b24a2){freeIsNotKey(_0x2b24a2,_0x105b93[_0xf323('0x5')],'id');for(var _0x21e82e=0x0,_0x22fd48={},_0x4196b5={};_0x21e82e<_0x2b24a2[_0xf323('0x6')];_0x21e82e+=0x1){_0x22fd48=_0x2b24a2[_0x21e82e];if(_[_0xf323('0x7')](_0x105b93[_0xf323('0x5')][_0x22fd48['id']])){_0x105b93[_0xf323('0x5')][_0x22fd48['id']]=new MailAccount(_0x22fd48);}else{_[_0xf323('0x8')](_0x105b93['mailAccounts'][_0x22fd48['id']],_0x22fd48);}}}return _0x105b93[_0xf323('0x5')];};};module[_0xf323('0x9')]=Realtime;
\ No newline at end of file
+var _0xcf2f=['isUndefined','exports','lodash','../model/mailAccount','mailAccounts','mapKeys','hasOwnProperty','prototype','mergeFromDatabase','initMailAccounts','length'];(function(_0x1f3dfb,_0x11c327){var _0x70340a=function(_0x412bf9){while(--_0x412bf9){_0x1f3dfb['push'](_0x1f3dfb['shift']());}};_0x70340a(++_0x11c327);}(_0xcf2f,0xa7));var _0xfcf2=function(_0x405cd5,_0xc39e7c){_0x405cd5=_0x405cd5-0x0;var _0xcba5d3=_0xcf2f[_0x405cd5];return _0xcba5d3;};'use strict';var _=require(_0xfcf2('0x0'));var MailAccount=require(_0xfcf2('0x1'));var Realtime=function(){this[_0xfcf2('0x2')]={};};function freeIsNotKey(_0x3165cf,_0x343fc4,_0x5637be){var _0x16c210=_[_0xfcf2('0x3')](_0x3165cf,function(_0x1e3661,_0x34bcaf){return _0x1e3661[_0x5637be];});for(var _0x179e60 in _0x343fc4){if(_0x343fc4[_0xfcf2('0x4')](_0x179e60)){if(!_0x16c210[_0x179e60]){delete _0x343fc4[_0x179e60];}}}}Realtime[_0xfcf2('0x5')][_0xfcf2('0x6')]=function(_0x41d4bd,_0x157f48){for(var _0x16b6b2 in _0x157f48){if(_0x41d4bd[_0xfcf2('0x4')](_0x16b6b2)){_0x41d4bd[_0x16b6b2]=_0x157f48[_0x16b6b2];}}};Realtime[_0xfcf2('0x5')][_0xfcf2('0x7')]=function(){var _0x5108d5=this;return function(_0x575f33){if(_0x575f33){freeIsNotKey(_0x575f33,_0x5108d5['mailAccounts'],'id');for(var _0x91b579=0x0,_0x2a9ecb={},_0x481e38={};_0x91b579<_0x575f33[_0xfcf2('0x8')];_0x91b579+=0x1){_0x2a9ecb=_0x575f33[_0x91b579];if(_[_0xfcf2('0x9')](_0x5108d5[_0xfcf2('0x2')][_0x2a9ecb['id']])){_0x5108d5[_0xfcf2('0x2')][_0x2a9ecb['id']]=new MailAccount(_0x2a9ecb);}else{_['merge'](_0x5108d5['mailAccounts'][_0x2a9ecb['id']],_0x2a9ecb);}}}return _0x5108d5[_0xfcf2('0x2')];};};module[_0xfcf2('0xa')]=Realtime;
\ No newline at end of file
index fc037c0..a6ea2fd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x338e=['active','key','ListId','TemplateId','MailServerIn','MailServerOut','Smtp','getMailAccount','notify','NotifyMailAccount','../client','Request','GetMailAccount','name','service','email'];(function(_0x3fbb91,_0x5ec106){var _0x3eb213=function(_0x118b9f){while(--_0x118b9f){_0x3fbb91['push'](_0x3fbb91['shift']());}};_0x3eb213(++_0x5ec106);}(_0x338e,0x9a));var _0xe338=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x338e[_0x3dd15e];return _0x231fd0;};'use strict';var client=require(_0xe338('0x0'));exports['getMailAccounts']=function(){return function(){return client[_0xe338('0x1')](_0xe338('0x2'),{'options':{'attributes':['id',_0xe338('0x3'),_0xe338('0x4'),_0xe338('0x5'),_0xe338('0x6'),_0xe338('0x7'),_0xe338('0x8'),_0xe338('0x9')],'raw':![],'include':[{'model':_0xe338('0xa'),'as':'Imap'},{'model':_0xe338('0xb'),'as':_0xe338('0xc')}]},'log':_0xe338('0xd')});};};exports[_0xe338('0xe')]=function(_0x25107c,_0x59880b){return client[_0xe338('0x1')](_0xe338('0xf'),{'account':{'id':_0x25107c},'body':_0x59880b,'log':_0xe338('0xf')});};
\ No newline at end of file
+var _0xe439=['GetMailAccount','name','email','active','key','ListId','TemplateId','Imap','MailServerOut','Smtp','notify','NotifyMailAccount','../client','getMailAccounts','Request'];(function(_0x88e891,_0x440907){var _0x45ca75=function(_0x46b92c){while(--_0x46b92c){_0x88e891['push'](_0x88e891['shift']());}};_0x45ca75(++_0x440907);}(_0xe439,0xc0));var _0x9e43=function(_0x390d68,_0x5eb625){_0x390d68=_0x390d68-0x0;var _0x560914=_0xe439[_0x390d68];return _0x560914;};'use strict';var client=require(_0x9e43('0x0'));exports[_0x9e43('0x1')]=function(){return function(){return client[_0x9e43('0x2')](_0x9e43('0x3'),{'options':{'attributes':['id',_0x9e43('0x4'),'service',_0x9e43('0x5'),_0x9e43('0x6'),_0x9e43('0x7'),_0x9e43('0x8'),_0x9e43('0x9')],'raw':![],'include':[{'model':'MailServerIn','as':_0x9e43('0xa')},{'model':_0x9e43('0xb'),'as':_0x9e43('0xc')}]},'log':'getMailAccount'});};};exports[_0x9e43('0xd')]=function(_0x5ca222,_0x33f055){return client['Request'](_0x9e43('0xe'),{'account':{'id':_0x5ca222},'body':_0x33f055,'log':_0x9e43('0xe')});};
\ No newline at end of file
index 98af911..7930b36 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0664=['bluebird','../../../config/logger','email','sendMail','message','catch','Verified','error','mailAccounts','Imap','password','Smtp','pass','length','server','http','stringify','listen','log','Email\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:'];(function(_0x4c7e51,_0x13ebc0){var _0x10f0b7=function(_0x2e6e57){while(--_0x2e6e57){_0x4c7e51['push'](_0x4c7e51['shift']());}};_0x10f0b7(++_0x13ebc0);}(_0x0664,0x93));var _0x4066=function(_0x1cd0a0,_0x28795c){_0x1cd0a0=_0x1cd0a0-0x0;var _0x5a3d55=_0x0664[_0x1cd0a0];return _0x5a3d55;};'use strict';var jayson=require('jayson/promise');var BPromise=require(_0x4066('0x0'));var _=require('lodash');var logger=require(_0x4066('0x1'))(_0x4066('0x2'));exports['listen']=function(_0x42bb0c,_0x1d3a16){return new BPromise(function(_0x1479a6,_0x43d301){var _0x362a79={'SendMail':function(_0x325e0e){var _0x2febd3=this;return new Promise(function(_0x1e2bf0,_0x143de5){_0x1d3a16[_0x4066('0x3')](_0x325e0e['account'],_0x325e0e[_0x4066('0x4')])['then'](function(_0x29a147){_0x1e2bf0({'code':0xc8,'message':_0x29a147});})[_0x4066('0x5')](function(_0x48333f){_0x143de5(_0x2febd3['error'](0x1f4,_0x48333f));});});},'VerifySmtp':function(_0x1da4d8){var _0x3ea971=this;return new Promise(function(_0x16a1f7,_0x41ad8b){_0x1d3a16['verifySmtp'](_0x1da4d8['account'])['then'](function(_0x4cbeb6){_0x16a1f7({'code':0xc8,'message':_0x4066('0x6')});})[_0x4066('0x5')](function(_0x10c353){_0x41ad8b(_0x3ea971[_0x4066('0x7')](0x1f4,_0x10c353));});});},'MailAccounts':function(_0x425456){return new Promise(function(_0x3a0cf2,_0x38c65d){var _0x236988=_['values'](_0x42bb0c[_0x4066('0x8')]);for(var _0x152404=0x0;_0x152404<_0x236988['length'];_0x152404+=0x1){if(_0x236988[_0x152404][_0x4066('0x9')]&&_0x236988[_0x152404]['Imap'][_0x4066('0xa')]){delete _0x236988[_0x152404]['Imap']['password'];}if(_0x236988[_0x152404][_0x4066('0xb')]&&_0x236988[_0x152404][_0x4066('0xb')][_0x4066('0xc')]){delete _0x236988[_0x152404][_0x4066('0xb')][_0x4066('0xc')];}}_0x3a0cf2({'count':_0x236988[_0x4066('0xd')],'rows':_0x236988});});}};var _0x3a73de=jayson[_0x4066('0xe')](_0x362a79)[_0x4066('0xf')]();_0x3a73de['on'](_0x4066('0x7'),function(_0x511cfa){logger['error'](JSON[_0x4066('0x10')](_0x511cfa));return _0x43d301(_0x511cfa);});_0x3a73de[_0x4066('0x11')](0x232b,'127.0.0.1',function(){console[_0x4066('0x12')](_0x4066('0x13'),0x232b);return _0x1479a6(_0x4066('0x14')+0x232b);});});};
\ No newline at end of file
+var _0x5ae9=['Imap','password','Smtp','pass','length','server','error','stringify','listen','Email\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','jayson/promise','../../../config/logger','email','sendMail','then','catch','verifySmtp','values','mailAccounts'];(function(_0x4f81a0,_0x49df0b){var _0x3f6f06=function(_0x18886f){while(--_0x18886f){_0x4f81a0['push'](_0x4f81a0['shift']());}};_0x3f6f06(++_0x49df0b);}(_0x5ae9,0x19b));var _0x95ae=function(_0x1b745b,_0x3e2d40){_0x1b745b=_0x1b745b-0x0;var _0x120a9d=_0x5ae9[_0x1b745b];return _0x120a9d;};'use strict';var jayson=require(_0x95ae('0x0'));var BPromise=require('bluebird');var _=require('lodash');var logger=require(_0x95ae('0x1'))(_0x95ae('0x2'));exports['listen']=function(_0x23690b,_0x43c580){return new BPromise(function(_0x559cb2,_0x22469d){var _0x4a965c={'SendMail':function(_0x2b05e6){var _0x3c4464=this;return new Promise(function(_0xa51307,_0xec2c41){_0x43c580[_0x95ae('0x3')](_0x2b05e6['account'],_0x2b05e6['message'])[_0x95ae('0x4')](function(_0x29846e){_0xa51307({'code':0xc8,'message':_0x29846e});})[_0x95ae('0x5')](function(_0x25b2ec){_0xec2c41(_0x3c4464['error'](0x1f4,_0x25b2ec));});});},'VerifySmtp':function(_0x47c902){var _0x3f3834=this;return new Promise(function(_0x36d81a,_0x7846a2){_0x43c580[_0x95ae('0x6')](_0x47c902['account'])['then'](function(_0x4bc7aa){_0x36d81a({'code':0xc8,'message':'Verified'});})[_0x95ae('0x5')](function(_0x2a9b87){_0x7846a2(_0x3f3834['error'](0x1f4,_0x2a9b87));});});},'MailAccounts':function(_0xc1af8f){return new Promise(function(_0x3b5fb5,_0x1d3ee3){var _0x4e3050=_[_0x95ae('0x7')](_0x23690b[_0x95ae('0x8')]);for(var _0x308b7a=0x0;_0x308b7a<_0x4e3050['length'];_0x308b7a+=0x1){if(_0x4e3050[_0x308b7a][_0x95ae('0x9')]&&_0x4e3050[_0x308b7a]['Imap'][_0x95ae('0xa')]){delete _0x4e3050[_0x308b7a]['Imap'][_0x95ae('0xa')];}if(_0x4e3050[_0x308b7a][_0x95ae('0xb')]&&_0x4e3050[_0x308b7a][_0x95ae('0xb')][_0x95ae('0xc')]){delete _0x4e3050[_0x308b7a][_0x95ae('0xb')][_0x95ae('0xc')];}}_0x3b5fb5({'count':_0x4e3050[_0x95ae('0xd')],'rows':_0x4e3050});});}};var _0x24d5d2=jayson[_0x95ae('0xe')](_0x4a965c)['http']();_0x24d5d2['on'](_0x95ae('0xf'),function(_0x23cb10){logger['error'](JSON[_0x95ae('0x10')](_0x23cb10));return _0x22469d(_0x23cb10);});_0x24d5d2[_0x95ae('0x11')](0x232b,'127.0.0.1',function(){console['log'](_0x95ae('0x12'),0x232b);return _0x559cb2(_0x95ae('0x13')+0x232b);});});};
\ No newline at end of file
index 75ebc88..b5e9428 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf72b=['defaults','redis','localhost','adapter','socket.io-redis','../../config/triggers','../../config/socketio','default','../../routes','once','listening','log','Express\x20server\x20listening\x20on\x20port\x20%d!','lodash','express','ioredis','../../config/environment','timeout','listen','port','socket.io','websocket','polling'];(function(_0xaaaa54,_0x38efbe){var _0x5dd664=function(_0x5f6e9c){while(--_0x5f6e9c){_0xaaaa54['push'](_0xaaaa54['shift']());}};_0x5dd664(++_0x38efbe);}(_0xf72b,0x1d9));var _0xbf72=function(_0x5bd1f4,_0x4c097f){_0x5bd1f4=_0x5bd1f4-0x0;var _0x4b001c=_0xf72b[_0x5bd1f4];return _0x4b001c;};'use strict';var _=require(_0xbf72('0x0'));var http=require('http');var express=require(_0xbf72('0x1'));var sticky=require('sticky-session');var Redis=require(_0xbf72('0x2'));var config=require(_0xbf72('0x3'));var app=express();var server=http['createServer'](app);server[_0xbf72('0x4')]=0xdbba0;if(sticky[_0xbf72('0x5')](server,config[_0xbf72('0x6')])){var socketio=require(_0xbf72('0x7'))(server,{'transports':[_0xbf72('0x8'),_0xbf72('0x9')]});config['redis']=_[_0xbf72('0xa')](config[_0xbf72('0xb')],{'host':_0xbf72('0xc'),'port':0x18eb});socketio[_0xbf72('0xd')](require(_0xbf72('0xe'))({'pubClient':new Redis(config[_0xbf72('0xb')]),'subClient':new Redis(config['redis'])}));require(_0xbf72('0xf'))['default']();require(_0xbf72('0x10'))[_0xbf72('0x11')](socketio);require('../../config/express')[_0xbf72('0x11')](app);require(_0xbf72('0x12'))[_0xbf72('0x11')](app);}else{server[_0xbf72('0x13')](_0xbf72('0x14'),function(){console[_0xbf72('0x15')](_0xbf72('0x16'),config[_0xbf72('0x6')]);});}exports=module['exports']=app;
\ No newline at end of file
+var _0x5178=['defaults','localhost','adapter','default','../../config/socketio','../../config/express','../../routes','once','listening','log','Express\x20server\x20listening\x20on\x20port\x20%d!','exports','http','express','sticky-session','ioredis','../../config/environment','listen','port','websocket','redis'];(function(_0xb2dd66,_0x10e03f){var _0x5ca870=function(_0x52cae7){while(--_0x52cae7){_0xb2dd66['push'](_0xb2dd66['shift']());}};_0x5ca870(++_0x10e03f);}(_0x5178,0x171));var _0x8517=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0x5178[_0x6c993a];return _0x27f547;};'use strict';var _=require('lodash');var http=require(_0x8517('0x0'));var express=require(_0x8517('0x1'));var sticky=require(_0x8517('0x2'));var Redis=require(_0x8517('0x3'));var config=require(_0x8517('0x4'));var app=express();var server=http['createServer'](app);server['timeout']=0xdbba0;if(sticky[_0x8517('0x5')](server,config[_0x8517('0x6')])){var socketio=require('socket.io')(server,{'transports':[_0x8517('0x7'),'polling']});config[_0x8517('0x8')]=_[_0x8517('0x9')](config[_0x8517('0x8')],{'host':_0x8517('0xa'),'port':0x18eb});socketio[_0x8517('0xb')](require('socket.io-redis')({'pubClient':new Redis(config[_0x8517('0x8')]),'subClient':new Redis(config['redis'])}));require('../../config/triggers')[_0x8517('0xc')]();require(_0x8517('0xd'))['default'](socketio);require(_0x8517('0xe'))[_0x8517('0xc')](app);require(_0x8517('0xf'))[_0x8517('0xc')](app);}else{server[_0x8517('0x10')](_0x8517('0x11'),function(){console[_0x8517('0x12')](_0x8517('0x13'),config['port']);});}exports=module[_0x8517('0x14')]=app;
\ No newline at end of file
index f49c109..962c598 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1501=['then','debug','rpc','error','message','result','catch','exports','bluebird','../../config/logger','routing','http','Request'];(function(_0x4fe8b7,_0x47c36a){var _0x56830b=function(_0x222f9d){while(--_0x222f9d){_0x4fe8b7['push'](_0x4fe8b7['shift']());}};_0x56830b(++_0x47c36a);}(_0x1501,0x126));var _0x1150=function(_0xf20b6,_0x49ddbb){_0xf20b6=_0xf20b6-0x0;var _0x4ff567=_0x1501[_0xf20b6];return _0x4ff567;};'use strict';var jayson=require('jayson/promise');var BPromise=require(_0x1150('0x0'));var logger=require(_0x1150('0x1'))(_0x1150('0x2'));var client=jayson['client'][_0x1150('0x3')]({'port':0x2329});client[_0x1150('0x4')]=function(_0x2518d5,_0x28eb65){return new BPromise(function(_0x4d218f,_0x2525e7){return client['request'](_0x2518d5,_0x28eb65)[_0x1150('0x5')](function(_0x316a7d){logger[_0x1150('0x6')](_0x1150('0x7'),_0x1150('0x2'),_0x2518d5,_0x28eb65,_0x316a7d);if(_0x316a7d[_0x1150('0x8')]){logger[_0x1150('0x8')]('rpc','routing',_0x2518d5,_0x316a7d[_0x1150('0x8')][_0x1150('0x9')],_0x28eb65);return _0x2525e7(_0x316a7d['error']['message']);}else{return _0x4d218f(_0x316a7d[_0x1150('0xa')]);}})[_0x1150('0xb')](function(_0x552fba){logger[_0x1150('0x8')]('rpc',_0x1150('0x2'),_0x2518d5,_0x552fba,_0x28eb65);return _0x2525e7(_0x552fba);});});};module[_0x1150('0xc')]=client;
\ No newline at end of file
+var _0x078c=['request','then','debug','rpc','error','message','result','catch','exports','jayson/promise','../../config/logger','routing','http','Request'];(function(_0x428955,_0x50a52f){var _0x5c5850=function(_0x289377){while(--_0x289377){_0x428955['push'](_0x428955['shift']());}};_0x5c5850(++_0x50a52f);}(_0x078c,0x19f));var _0xc078=function(_0x28b0a4,_0x2ea758){_0x28b0a4=_0x28b0a4-0x0;var _0x105ce6=_0x078c[_0x28b0a4];return _0x105ce6;};'use strict';var jayson=require(_0xc078('0x0'));var BPromise=require('bluebird');var logger=require(_0xc078('0x1'))(_0xc078('0x2'));var client=jayson['client'][_0xc078('0x3')]({'port':0x2329});client[_0xc078('0x4')]=function(_0x11629a,_0x217004){return new BPromise(function(_0x56bf2e,_0x44652d){return client[_0xc078('0x5')](_0x11629a,_0x217004)[_0xc078('0x6')](function(_0x24b241){logger[_0xc078('0x7')](_0xc078('0x8'),_0xc078('0x2'),_0x11629a,_0x217004,_0x24b241);if(_0x24b241[_0xc078('0x9')]){logger['error']('rpc','routing',_0x11629a,_0x24b241[_0xc078('0x9')][_0xc078('0xa')],_0x217004);return _0x44652d(_0x24b241['error'][_0xc078('0xa')]);}else{return _0x56bf2e(_0x24b241[_0xc078('0xb')]);}})[_0xc078('0xc')](function(_0x3798bb){logger[_0xc078('0x9')]('rpc','routing',_0x11629a,_0x3798bb,_0x217004);return _0x44652d(_0x3798bb);});});};module[_0xc078('0xd')]=client;
\ No newline at end of file
index a422da3..2e31600 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x678f=['getIntervals','initIntervals','initOpenchannelQueues','getChatQueues','initChatQueues','getMailQueues','initMailQueues','getFaxQueues','initFaxQueues','catch','log','./realtime','./rpc/user','./rpc/interval','./rpc/openchannelQueue','./rpc/chatQueue','./rpc/smsQueue','./rpc/mailQueue','./rpc/faxQueue','then','getAgents','initAgents'];(function(_0xb515f,_0x11f189){var _0xcb287e=function(_0x888a7){while(--_0x888a7){_0xb515f['push'](_0xb515f['shift']());}};_0xcb287e(++_0x11f189);}(_0x678f,0xd1));var _0xf678=function(_0x2a56ad,_0x2b94bf){_0x2a56ad=_0x2a56ad-0x0;var _0x425175=_0x678f[_0x2a56ad];return _0x425175;};'use strict';var BPromise=require('bluebird');var server=require('./server');var Realtime=require(_0xf678('0x0'));var user=require(_0xf678('0x1'));var interval=require(_0xf678('0x2'));var openchannelQueue=require(_0xf678('0x3'));var chatQueue=require(_0xf678('0x4'));var smsQueue=require(_0xf678('0x5'));var mailQueue=require(_0xf678('0x6'));var faxQueue=require(_0xf678('0x7'));var realtime=new Realtime();function initRealtime(){return BPromise['resolve']()[_0xf678('0x8')](user[_0xf678('0x9')]())[_0xf678('0x8')](realtime[_0xf678('0xa')]())[_0xf678('0x8')](interval[_0xf678('0xb')]())[_0xf678('0x8')](realtime[_0xf678('0xc')]())[_0xf678('0x8')](openchannelQueue['getOpenchannelQueues']())['then'](realtime[_0xf678('0xd')]())['then'](chatQueue[_0xf678('0xe')]())[_0xf678('0x8')](realtime[_0xf678('0xf')]())[_0xf678('0x8')](smsQueue['getSmsQueues']())[_0xf678('0x8')](realtime['initSmsQueues']())[_0xf678('0x8')](mailQueue[_0xf678('0x10')]())[_0xf678('0x8')](realtime[_0xf678('0x11')]())[_0xf678('0x8')](faxQueue[_0xf678('0x12')]())['then'](realtime[_0xf678('0x13')]())[_0xf678('0x8')](function(){return realtime;});}function main(){return server['listen'](realtime)[_0xf678('0x8')](function(_0x46c4b5){return initRealtime();})[_0xf678('0x8')](function(_0x22b5eb){return setInterval(initRealtime,0x1388);})[_0xf678('0x14')](function(_0x464e8b){console[_0xf678('0x15')](_0x464e8b);});}main();
\ No newline at end of file
+var _0x99d0=['getOpenchannelQueues','initOpenchannelQueues','getChatQueues','initChatQueues','getSmsQueues','initSmsQueues','getMailQueues','initMailQueues','getFaxQueues','listen','catch','log','bluebird','./server','./realtime','./rpc/user','./rpc/interval','./rpc/openchannelQueue','./rpc/chatQueue','./rpc/mailQueue','resolve','then','getAgents','initAgents','getIntervals','initIntervals'];(function(_0x1f7201,_0x141b79){var _0x289fd2=function(_0x20ce23){while(--_0x20ce23){_0x1f7201['push'](_0x1f7201['shift']());}};_0x289fd2(++_0x141b79);}(_0x99d0,0xa8));var _0x099d=function(_0x37e845,_0x219f9f){_0x37e845=_0x37e845-0x0;var _0x59e55b=_0x99d0[_0x37e845];return _0x59e55b;};'use strict';var BPromise=require(_0x099d('0x0'));var server=require(_0x099d('0x1'));var Realtime=require(_0x099d('0x2'));var user=require(_0x099d('0x3'));var interval=require(_0x099d('0x4'));var openchannelQueue=require(_0x099d('0x5'));var chatQueue=require(_0x099d('0x6'));var smsQueue=require('./rpc/smsQueue');var mailQueue=require(_0x099d('0x7'));var faxQueue=require('./rpc/faxQueue');var realtime=new Realtime();function initRealtime(){return BPromise[_0x099d('0x8')]()[_0x099d('0x9')](user[_0x099d('0xa')]())[_0x099d('0x9')](realtime[_0x099d('0xb')]())[_0x099d('0x9')](interval[_0x099d('0xc')]())[_0x099d('0x9')](realtime[_0x099d('0xd')]())['then'](openchannelQueue[_0x099d('0xe')]())[_0x099d('0x9')](realtime[_0x099d('0xf')]())[_0x099d('0x9')](chatQueue[_0x099d('0x10')]())[_0x099d('0x9')](realtime[_0x099d('0x11')]())[_0x099d('0x9')](smsQueue[_0x099d('0x12')]())['then'](realtime[_0x099d('0x13')]())[_0x099d('0x9')](mailQueue[_0x099d('0x14')]())['then'](realtime[_0x099d('0x15')]())[_0x099d('0x9')](faxQueue[_0x099d('0x16')]())[_0x099d('0x9')](realtime['initFaxQueues']())[_0x099d('0x9')](function(){return realtime;});}function main(){return server[_0x099d('0x17')](realtime)['then'](function(_0x1887f7){return initRealtime();})[_0x099d('0x9')](function(_0x273a0f){return setInterval(initRealtime,0x1388);})[_0x099d('0x18')](function(_0x171877){console[_0x099d('0x19')](_0x171877);});}main();
\ No newline at end of file
index 4e62f4d..27af7af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a45=['activeRules','orderBy','asc','result','clone','consequence','ruleRef','name','index_','call','nextTick','next','isEqual','restart','condition','matchPath','noop','findRules','matches','filter','turn','prioritize','length','map','toString','fromJSON','isString','parse','object','lodash','util','events','init','isNil','register','prototype','rules','concat','isObject','push','sync'];(function(_0x213f3a,_0x17306d){var _0x100d23=function(_0x35cd9f){while(--_0x35cd9f){_0x213f3a['push'](_0x213f3a['shift']());}};_0x100d23(++_0x17306d);}(_0x8a45,0x1e0));var _0x58a4=function(_0x2a83b9,_0x3c2d30){_0x2a83b9=_0x2a83b9-0x0;var _0x11cd74=_0x8a45[_0x2a83b9];return _0x11cd74;};'use strict';var _=require(_0x58a4('0x0'));var util=require(_0x58a4('0x1'));var EventEmitter=require(_0x58a4('0x2'))['EventEmitter'];function RuleEngine(_0x29f651,_0x3cd98f){this[_0x58a4('0x3')]();if(!_[_0x58a4('0x4')](_0x29f651)){this[_0x58a4('0x5')](_0x29f651);}if(_0x3cd98f){this['ignoreFactChanges']=_0x3cd98f['ignoreFactChanges'];}return this;}util['inherits'](RuleEngine,EventEmitter);RuleEngine[_0x58a4('0x6')]['init']=function(_0x3648a3){this['rules']=[];this['activeRules']=[];};RuleEngine['prototype'][_0x58a4('0x5')]=function(_0x1099f6){if(Array['isArray'](_0x1099f6)){this[_0x58a4('0x7')]=this['rules'][_0x58a4('0x8')](_0x1099f6);}else if(_0x1099f6!==null&&_[_0x58a4('0x9')](_0x1099f6)){this[_0x58a4('0x7')][_0x58a4('0xa')](_0x1099f6);}this[_0x58a4('0xb')]();};RuleEngine[_0x58a4('0x6')][_0x58a4('0xb')]=function(){this[_0x58a4('0xc')]=this[_0x58a4('0x7')]['filter'](function(_0x2405a8){if(_[_0x58a4('0x4')](_0x2405a8['on'])){_0x2405a8['on']=!![];}if(_0x2405a8['on']===!![]){return _0x2405a8;}});this['activeRules']=_[_0x58a4('0xd')](this[_0x58a4('0xc')],['p'],[_0x58a4('0xe')]);};RuleEngine[_0x58a4('0x6')]['execute']=function(_0x5d463c,_0x26b424){var _0x4586d3=![];_0x5d463c[_0x58a4('0xf')]=!![];var _0x69d2ee=_[_0x58a4('0x10')](_0x5d463c);var _0x1e2cc6=_[_0x58a4('0x10')](_0x5d463c);var _0x508f35=this[_0x58a4('0xc')];var _0x4d6890=[];var _0x162dd0=this['ignoreFactChanges'];(function FnRuleLoop(_0x3907b2){var _0x270e48={'rules':function(){return _0x508f35;},'rule':function(){return _0x508f35[_0x3907b2];},'when':function(_0x40e7dc){if(_0x40e7dc){var _0x4a7655=_0x508f35[_0x3907b2][_0x58a4('0x11')];_0x4a7655[_0x58a4('0x12')]=_0x508f35[_0x3907b2]['id']||_0x508f35[_0x3907b2][_0x58a4('0x13')]||_0x58a4('0x14')+_0x3907b2;process['nextTick'](function(){_0x4d6890['push'](_0x4a7655[_0x58a4('0x12')]);_0x4a7655[_0x58a4('0x15')](_0x69d2ee,_0x270e48);});}else{process[_0x58a4('0x16')](function(){_0x270e48[_0x58a4('0x17')]();});}},'restart':function(){return FnRuleLoop(0x0);},'stop':function(){_0x4586d3=!![];return FnRuleLoop(0x0);},'next':function(_0x116709){if(!_0x162dd0&&!_[_0x58a4('0x18')](_0x1e2cc6,_0x69d2ee)){_0x1e2cc6=_[_0x58a4('0x10')](_0x69d2ee);process[_0x58a4('0x16')](function(){_0x270e48[_0x58a4('0x19')]();});}else{process[_0x58a4('0x16')](function(){if(_[_0x58a4('0x4')](_0x116709)){return FnRuleLoop(_0x3907b2+0x1);}else{return FnRuleLoop(_0x116709);}});}}};if(_0x3907b2<_0x508f35['length']&&_0x4586d3===![]){var _0x44d900=_0x508f35[_0x3907b2][_0x58a4('0x1a')];_0x44d900[_0x58a4('0x15')](_0x69d2ee,_0x270e48);}else{process['nextTick'](function(){_0x69d2ee[_0x58a4('0x1b')]=_0x4d6890;return _0x26b424?_0x26b424(_0x69d2ee):_[_0x58a4('0x1c')]();});}}(0x0));};RuleEngine[_0x58a4('0x6')][_0x58a4('0x1d')]=function(_0x3705ac){if(_[_0x58a4('0x4')](_0x3705ac)){return this[_0x58a4('0x7')];}else{var _0x4f6996=_[_0x58a4('0x1e')](_0x3705ac);return _[_0x58a4('0x1f')](this['rules'],_0x4f6996);}};RuleEngine['prototype'][_0x58a4('0x20')]=function(_0x9d4f8e,_0x9f097d){var _0x9d4f8e=_0x9d4f8e==='on'||_0x9d4f8e==='ON'?!![]:![];var _0x5a3fc6=this[_0x58a4('0x1d')](_0x9f097d);for(var _0x288bdd=0x0,_0x2d0700=_0x5a3fc6['length'];_0x288bdd<_0x2d0700;_0x288bdd+=0x1){_0x5a3fc6[_0x288bdd]['on']=_0x9d4f8e;}this[_0x58a4('0xb')]();};RuleEngine[_0x58a4('0x6')][_0x58a4('0x21')]=function(_0x1303b4,_0x534733){_0x1303b4=parseInt(_0x1303b4,0xa);var _0x3745ce=this[_0x58a4('0x1d')](_0x534733);for(var _0x329e99=0x0,_0x47de55=_0x3745ce[_0x58a4('0x22')];_0x329e99<_0x47de55;_0x329e99+=0x1){_0x3745ce[_0x329e99]['priority']=_0x1303b4;}this[_0x58a4('0xb')]();};RuleEngine[_0x58a4('0x6')]['toJSON']=function(){var _0x34720b=this['rules'];if(_0x34720b instanceof Array){_0x34720b=_0x34720b[_0x58a4('0x23')](function(_0xd7b4fd){_0xd7b4fd[_0x58a4('0x1a')]=_0xd7b4fd[_0x58a4('0x1a')][_0x58a4('0x24')]();_0xd7b4fd['consequence']=_0xd7b4fd[_0x58a4('0x11')]['toString']();return _0xd7b4fd;});}else if(!_[_0x58a4('0x4')](_0x34720b)){_0x34720b[_0x58a4('0x1a')]=_0x34720b[_0x58a4('0x1a')][_0x58a4('0x24')]();_0x34720b[_0x58a4('0x11')]=_0x34720b[_0x58a4('0x11')][_0x58a4('0x24')]();}return _0x34720b;};RuleEngine[_0x58a4('0x6')][_0x58a4('0x25')]=function(_0x4557b0){this[_0x58a4('0x3')]();if(_[_0x58a4('0x26')](_0x4557b0)){_0x4557b0=JSON[_0x58a4('0x27')](_0x4557b0);}if(_0x4557b0 instanceof Array){_0x4557b0=_0x4557b0[_0x58a4('0x23')](function(_0xb32733){_0xb32733[_0x58a4('0x1a')]=eval('('+_0xb32733[_0x58a4('0x1a')]+')');_0xb32733[_0x58a4('0x11')]=eval('('+_0xb32733[_0x58a4('0x11')]+')');return _0xb32733;});}else if(_0x4557b0!==null&&typeof _0x4557b0==_0x58a4('0x28')){_0x4557b0[_0x58a4('0x1a')]=eval('('+_0x4557b0['condition']+')');_0x4557b0[_0x58a4('0x11')]=eval('('+_0x4557b0['consequence']+')');}this[_0x58a4('0x5')](_0x4557b0);};module['exports']=RuleEngine;
\ No newline at end of file
+var _0xa573=['isArray','concat','isObject','push','activeRules','rules','orderBy','asc','execute','result','clone','ruleRef','name','index_','call','nextTick','restart','isNil','condition','matchPath','findRules','matches','filter','turn','length','prioritize','priority','sync','toJSON','consequence','toString','fromJSON','isString','parse','map','object','exports','lodash','util','events','EventEmitter','register','ignoreFactChanges','inherits','prototype','init'];(function(_0x47a349,_0x4699d9){var _0x18ab75=function(_0x210796){while(--_0x210796){_0x47a349['push'](_0x47a349['shift']());}};_0x18ab75(++_0x4699d9);}(_0xa573,0x1c3));var _0x3a57=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xa573[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x3a57('0x0'));var util=require(_0x3a57('0x1'));var EventEmitter=require(_0x3a57('0x2'))[_0x3a57('0x3')];function RuleEngine(_0x1974c9,_0x1f7920){this['init']();if(!_['isNil'](_0x1974c9)){this[_0x3a57('0x4')](_0x1974c9);}if(_0x1f7920){this[_0x3a57('0x5')]=_0x1f7920[_0x3a57('0x5')];}return this;}util[_0x3a57('0x6')](RuleEngine,EventEmitter);RuleEngine[_0x3a57('0x7')][_0x3a57('0x8')]=function(_0x45d639){this['rules']=[];this['activeRules']=[];};RuleEngine['prototype']['register']=function(_0x48ff4b){if(Array[_0x3a57('0x9')](_0x48ff4b)){this['rules']=this['rules'][_0x3a57('0xa')](_0x48ff4b);}else if(_0x48ff4b!==null&&_[_0x3a57('0xb')](_0x48ff4b)){this['rules'][_0x3a57('0xc')](_0x48ff4b);}this['sync']();};RuleEngine[_0x3a57('0x7')]['sync']=function(){this[_0x3a57('0xd')]=this[_0x3a57('0xe')]['filter'](function(_0x162fe1){if(_['isNil'](_0x162fe1['on'])){_0x162fe1['on']=!![];}if(_0x162fe1['on']===!![]){return _0x162fe1;}});this[_0x3a57('0xd')]=_[_0x3a57('0xf')](this[_0x3a57('0xd')],['p'],[_0x3a57('0x10')]);};RuleEngine[_0x3a57('0x7')][_0x3a57('0x11')]=function(_0x53f9c1,_0x40c6bc){var _0x4cea4b=![];_0x53f9c1[_0x3a57('0x12')]=!![];var _0x1495f1=_[_0x3a57('0x13')](_0x53f9c1);var _0x28ec65=_[_0x3a57('0x13')](_0x53f9c1);var _0x5501fd=this[_0x3a57('0xd')];var _0x2d7fce=[];var _0x1ccfda=this[_0x3a57('0x5')];(function FnRuleLoop(_0x2b66dc){var _0x17b30f={'rules':function(){return _0x5501fd;},'rule':function(){return _0x5501fd[_0x2b66dc];},'when':function(_0x3a1e59){if(_0x3a1e59){var _0x388a7d=_0x5501fd[_0x2b66dc]['consequence'];_0x388a7d[_0x3a57('0x14')]=_0x5501fd[_0x2b66dc]['id']||_0x5501fd[_0x2b66dc][_0x3a57('0x15')]||_0x3a57('0x16')+_0x2b66dc;process['nextTick'](function(){_0x2d7fce['push'](_0x388a7d[_0x3a57('0x14')]);_0x388a7d[_0x3a57('0x17')](_0x1495f1,_0x17b30f);});}else{process[_0x3a57('0x18')](function(){_0x17b30f['next']();});}},'restart':function(){return FnRuleLoop(0x0);},'stop':function(){_0x4cea4b=!![];return FnRuleLoop(0x0);},'next':function(_0x36a66b){if(!_0x1ccfda&&!_['isEqual'](_0x28ec65,_0x1495f1)){_0x28ec65=_['clone'](_0x1495f1);process[_0x3a57('0x18')](function(){_0x17b30f[_0x3a57('0x19')]();});}else{process['nextTick'](function(){if(_[_0x3a57('0x1a')](_0x36a66b)){return FnRuleLoop(_0x2b66dc+0x1);}else{return FnRuleLoop(_0x36a66b);}});}}};if(_0x2b66dc<_0x5501fd['length']&&_0x4cea4b===![]){var _0x2c41cf=_0x5501fd[_0x2b66dc][_0x3a57('0x1b')];_0x2c41cf[_0x3a57('0x17')](_0x1495f1,_0x17b30f);}else{process[_0x3a57('0x18')](function(){_0x1495f1[_0x3a57('0x1c')]=_0x2d7fce;return _0x40c6bc?_0x40c6bc(_0x1495f1):_['noop']();});}}(0x0));};RuleEngine['prototype'][_0x3a57('0x1d')]=function(_0x4f338e){if(_['isNil'](_0x4f338e)){return this['rules'];}else{var _0x192182=_[_0x3a57('0x1e')](_0x4f338e);return _[_0x3a57('0x1f')](this[_0x3a57('0xe')],_0x192182);}};RuleEngine[_0x3a57('0x7')][_0x3a57('0x20')]=function(_0x5a98a8,_0x297cb2){var _0x5a98a8=_0x5a98a8==='on'||_0x5a98a8==='ON'?!![]:![];var _0x5e2fa9=this[_0x3a57('0x1d')](_0x297cb2);for(var _0x2e1855=0x0,_0x40bc03=_0x5e2fa9[_0x3a57('0x21')];_0x2e1855<_0x40bc03;_0x2e1855+=0x1){_0x5e2fa9[_0x2e1855]['on']=_0x5a98a8;}this['sync']();};RuleEngine[_0x3a57('0x7')][_0x3a57('0x22')]=function(_0x424ae6,_0x486134){_0x424ae6=parseInt(_0x424ae6,0xa);var _0x32809e=this['findRules'](_0x486134);for(var _0xa3798c=0x0,_0x117227=_0x32809e[_0x3a57('0x21')];_0xa3798c<_0x117227;_0xa3798c+=0x1){_0x32809e[_0xa3798c][_0x3a57('0x23')]=_0x424ae6;}this[_0x3a57('0x24')]();};RuleEngine[_0x3a57('0x7')][_0x3a57('0x25')]=function(){var _0x1bfaae=this[_0x3a57('0xe')];if(_0x1bfaae instanceof Array){_0x1bfaae=_0x1bfaae['map'](function(_0x321080){_0x321080[_0x3a57('0x1b')]=_0x321080[_0x3a57('0x1b')]['toString']();_0x321080[_0x3a57('0x26')]=_0x321080['consequence'][_0x3a57('0x27')]();return _0x321080;});}else if(!_[_0x3a57('0x1a')](_0x1bfaae)){_0x1bfaae[_0x3a57('0x1b')]=_0x1bfaae[_0x3a57('0x1b')][_0x3a57('0x27')]();_0x1bfaae[_0x3a57('0x26')]=_0x1bfaae[_0x3a57('0x26')]['toString']();}return _0x1bfaae;};RuleEngine[_0x3a57('0x7')][_0x3a57('0x28')]=function(_0x4e9f55){this[_0x3a57('0x8')]();if(_[_0x3a57('0x29')](_0x4e9f55)){_0x4e9f55=JSON[_0x3a57('0x2a')](_0x4e9f55);}if(_0x4e9f55 instanceof Array){_0x4e9f55=_0x4e9f55[_0x3a57('0x2b')](function(_0x123580){_0x123580[_0x3a57('0x1b')]=eval('('+_0x123580[_0x3a57('0x1b')]+')');_0x123580['consequence']=eval('('+_0x123580[_0x3a57('0x26')]+')');return _0x123580;});}else if(_0x4e9f55!==null&&typeof _0x4e9f55==_0x3a57('0x2c')){_0x4e9f55[_0x3a57('0x1b')]=eval('('+_0x4e9f55[_0x3a57('0x1b')]+')');_0x4e9f55['consequence']=eval('('+_0x4e9f55['consequence']+')');}this[_0x3a57('0x4')](_0x4e9f55);};module[_0x3a57('0x2d')]=RuleEngine;
\ No newline at end of file
index 6f5af03..4c37ea8 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(_0x18f646,_0x322b40){var _0x480392=function(_0xe35449){while(--_0xe35449){_0x18f646['push'](_0x18f646['shift']());}};_0x480392(++_0x322b40);}(_0x9957,0x93));var _0x7995=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x9957[_0x5b644e];return _0x49c6bf;};'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(_0x1c7db9,_0x5c170b){var _0x2312d4=function(_0x4c8d5b){while(--_0x4c8d5b){_0x1c7db9['push'](_0x1c7db9['shift']());}};_0x2312d4(++_0x5c170b);}(_0x814b,0x1a2));var _0xb814=function(_0x501ca1,_0x6c6edc){_0x501ca1=_0x501ca1-0x0;var _0x2a99c4=_0x814b[_0x501ca1];return _0x2a99c4;};'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 57fbe66..83bb44b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6760=['format','mailPause','mailStatus','smsCurrentCapacity','openchannelStatus','busy','stringify','exports','lodash','md5','ioredis','../../../config/environment','defaults','localhost','name','online','voicePause','faxPause','smsPause','openchannelPause','chatStatus','unknown','chatStatusTime','chatCapacity','chatCurrentCapacity','mailStatusTime','mailCapacity','mailCurrentCapacity','faxStatus','faxStatusTime','faxCapacity','smsStatusTime','smsCapacity','openchannelCapacity','openchannelCurrentCapacity','busyQueue','prototype','getChannelStatus','Capacity','maxcapacity','working','idle','updateRealtime','mail','chat','openchannel','fax','sms','Status','StatusTime','toNumber'];(function(_0x44ca61,_0x413858){var _0x4a0b55=function(_0x37989f){while(--_0x37989f){_0x44ca61['push'](_0x44ca61['shift']());}};_0x4a0b55(++_0x413858);}(_0x6760,0x1d3));var _0x0676=function(_0x3f73b2,_0x142c78){_0x3f73b2=_0x3f73b2-0x0;var _0x8f664a=_0x6760[_0x3f73b2];return _0x8f664a;};'use strict';var _=require(_0x0676('0x0'));var moment=require('moment');var md5=require(_0x0676('0x1'));var Redis=require(_0x0676('0x2'));var config=require(_0x0676('0x3'));config['redis']=_[_0x0676('0x4')](config['redis'],{'host':_0x0676('0x5'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));function Agent(_0x1c4416){this['id']=_0x1c4416['id']||0x0;this[_0x0676('0x6')]=_0x1c4416[_0x0676('0x6')]||'';this['online']=_0x1c4416[_0x0676('0x7')]||!![];this[_0x0676('0x8')]=_0x1c4416[_0x0676('0x8')]||![];this['chatPause']=_0x1c4416['chatPause']||![];this['mailPause']=_0x1c4416['mailPause']||![];this['faxPause']=_0x1c4416[_0x0676('0x9')]||![];this[_0x0676('0xa')]=_0x1c4416['smsPause']||![];this[_0x0676('0xb')]=_0x1c4416[_0x0676('0xb')]||![];this[_0x0676('0xc')]=_0x0676('0xd');this[_0x0676('0xe')]=0x0;this[_0x0676('0xf')]=_0x1c4416['chatCapacity']||0x0;this[_0x0676('0x10')]=0x0;this['mailStatus']='unknown';this[_0x0676('0x11')]=0x0;this[_0x0676('0x12')]=_0x1c4416[_0x0676('0x12')]||0x0;this[_0x0676('0x13')]=0x0;this[_0x0676('0x14')]='unknown';this[_0x0676('0x15')]=0x0;this[_0x0676('0x16')]=_0x1c4416[_0x0676('0x16')]||0x0;this['faxCurrentCapacity']=0x0;this['smsStatus']=_0x0676('0xd');this[_0x0676('0x17')]=0x0;this[_0x0676('0x18')]=_0x1c4416[_0x0676('0x18')]||0x0;this['smsCurrentCapacity']=0x0;this['openchannelStatus']=_0x0676('0xd');this['openchannelStatusTime']=0x0;this[_0x0676('0x19')]=_0x1c4416[_0x0676('0x19')]||0x0;this[_0x0676('0x1a')]=0x0;this['busy']=![];this[_0x0676('0x1b')]=undefined;this['md5']='';this['updateRealtime']();}Agent[_0x0676('0x1c')][_0x0676('0x1d')]=function(_0x3de42d){if(this[_0x3de42d+'CurrentCapacity']>0x0){if(this[_0x3de42d+_0x0676('0x1e')]>0x0&&this[_0x3de42d+'CurrentCapacity']>=this[_0x3de42d+_0x0676('0x1e')]){return _0x0676('0x1f');}else{return _0x0676('0x20');}}else{return _0x0676('0x21');}};Agent[_0x0676('0x1c')][_0x0676('0x22')]=function(){var _0x38d294=[_0x0676('0x23'),_0x0676('0x24'),_0x0676('0x25'),_0x0676('0x26'),_0x0676('0x27')];for(var _0x196a34=0x0;_0x196a34<_0x38d294['length'];_0x196a34+=0x1){var _0x2e472d=this[_0x0676('0x1d')](_0x38d294[_0x196a34]);if(this[_0x38d294[_0x196a34]+_0x0676('0x28')]!==_0x2e472d){this[_0x38d294[_0x196a34]+_0x0676('0x29')]=_[_0x0676('0x2a')](moment()[_0x0676('0x2b')]('x'));}this[_0x38d294[_0x196a34]+_0x0676('0x28')]=_0x2e472d;}var _0x2bacc8={'id':this['id'],'name':this[_0x0676('0x6')],'online':this[_0x0676('0x7')],'voicePause':this['voicePause'],'chatPause':this['chatPause'],'mailPause':this[_0x0676('0x2c')],'smsPause':this[_0x0676('0xa')],'faxPause':this[_0x0676('0x9')],'openchannelPause':this[_0x0676('0xb')],'chatStatus':this[_0x0676('0xc')],'chatStatusTime':this[_0x0676('0xe')],'chatCapacity':this[_0x0676('0xf')],'chatCurrentCapacity':this['chatCurrentCapacity'],'mailStatus':this[_0x0676('0x2d')],'mailStatusTime':this[_0x0676('0x11')],'mailCapacity':this[_0x0676('0x12')],'mailCurrentCapacity':this[_0x0676('0x13')],'faxStatus':this['faxStatus'],'faxStatusTime':this[_0x0676('0x15')],'faxCapacity':this[_0x0676('0x16')],'faxCurrentCapacity':this['faxCurrentCapacity'],'smsStatus':this['smsStatus'],'smsStatusTime':this[_0x0676('0x17')],'smsCapacity':this[_0x0676('0x18')],'smsCurrentCapacity':this[_0x0676('0x2e')],'openchannelStatus':this[_0x0676('0x2f')],'openchannelStatusTime':this['openchannelStatusTime'],'openchannelCapacity':this[_0x0676('0x19')],'openchannelCurrentCapacity':this[_0x0676('0x1a')],'busy':this[_0x0676('0x30')],'busyQueue':this[_0x0676('0x1b')]};var _0x3192d0=md5(JSON[_0x0676('0x31')](_0x2bacc8));if(this['md5']!==_0x3192d0){this[_0x0676('0x1')]=_0x3192d0;io['emit']('user:save',_0x2bacc8);}};module[_0x0676('0x32')]=Agent;
\ No newline at end of file
+var _0xfd74=['chatStatus','chatStatusTime','chatCapacity','chatCurrentCapacity','mailStatusTime','mailCapacity','mailCurrentCapacity','faxStatus','unknown','faxStatusTime','faxCapacity','faxCurrentCapacity','smsStatusTime','smsCapacity','smsCurrentCapacity','openchannelStatus','openchannelCapacity','openchannelCurrentCapacity','busy','busyQueue','md5','updateRealtime','prototype','CurrentCapacity','Capacity','working','idle','mail','chat','openchannel','fax','sms','length','getChannelStatus','Status','toNumber','format','openchannelPause','mailStatus','smsStatus','openchannelStatusTime','stringify','emit','user:save','exports','lodash','moment','ioredis','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','online','voicePause','chatPause','mailPause','faxPause','smsPause'];(function(_0x4e24e2,_0x4bf3cc){var _0x17975b=function(_0x11968a){while(--_0x11968a){_0x4e24e2['push'](_0x4e24e2['shift']());}};_0x17975b(++_0x4bf3cc);}(_0xfd74,0x159));var _0x4fd7=function(_0x5c7a85,_0x41dd19){_0x5c7a85=_0x5c7a85-0x0;var _0x35290f=_0xfd74[_0x5c7a85];return _0x35290f;};'use strict';var _=require(_0x4fd7('0x0'));var moment=require(_0x4fd7('0x1'));var md5=require('md5');var Redis=require(_0x4fd7('0x2'));var config=require(_0x4fd7('0x3'));config[_0x4fd7('0x4')]=_[_0x4fd7('0x5')](config[_0x4fd7('0x4')],{'host':_0x4fd7('0x6'),'port':0x18eb});var io=require(_0x4fd7('0x7'))(new Redis(config[_0x4fd7('0x4')]));function Agent(_0x5bab9f){this['id']=_0x5bab9f['id']||0x0;this[_0x4fd7('0x8')]=_0x5bab9f[_0x4fd7('0x8')]||'';this[_0x4fd7('0x9')]=_0x5bab9f[_0x4fd7('0x9')]||!![];this[_0x4fd7('0xa')]=_0x5bab9f['voicePause']||![];this['chatPause']=_0x5bab9f[_0x4fd7('0xb')]||![];this[_0x4fd7('0xc')]=_0x5bab9f[_0x4fd7('0xc')]||![];this[_0x4fd7('0xd')]=_0x5bab9f[_0x4fd7('0xd')]||![];this[_0x4fd7('0xe')]=_0x5bab9f[_0x4fd7('0xe')]||![];this['openchannelPause']=_0x5bab9f['openchannelPause']||![];this[_0x4fd7('0xf')]='unknown';this[_0x4fd7('0x10')]=0x0;this['chatCapacity']=_0x5bab9f[_0x4fd7('0x11')]||0x0;this[_0x4fd7('0x12')]=0x0;this['mailStatus']='unknown';this[_0x4fd7('0x13')]=0x0;this[_0x4fd7('0x14')]=_0x5bab9f[_0x4fd7('0x14')]||0x0;this[_0x4fd7('0x15')]=0x0;this[_0x4fd7('0x16')]=_0x4fd7('0x17');this[_0x4fd7('0x18')]=0x0;this[_0x4fd7('0x19')]=_0x5bab9f['faxCapacity']||0x0;this[_0x4fd7('0x1a')]=0x0;this['smsStatus']=_0x4fd7('0x17');this[_0x4fd7('0x1b')]=0x0;this[_0x4fd7('0x1c')]=_0x5bab9f[_0x4fd7('0x1c')]||0x0;this[_0x4fd7('0x1d')]=0x0;this[_0x4fd7('0x1e')]='unknown';this['openchannelStatusTime']=0x0;this[_0x4fd7('0x1f')]=_0x5bab9f[_0x4fd7('0x1f')]||0x0;this[_0x4fd7('0x20')]=0x0;this[_0x4fd7('0x21')]=![];this[_0x4fd7('0x22')]=undefined;this[_0x4fd7('0x23')]='';this[_0x4fd7('0x24')]();}Agent[_0x4fd7('0x25')]['getChannelStatus']=function(_0x4aaa50){if(this[_0x4aaa50+_0x4fd7('0x26')]>0x0){if(this[_0x4aaa50+_0x4fd7('0x27')]>0x0&&this[_0x4aaa50+_0x4fd7('0x26')]>=this[_0x4aaa50+_0x4fd7('0x27')]){return'maxcapacity';}else{return _0x4fd7('0x28');}}else{return _0x4fd7('0x29');}};Agent[_0x4fd7('0x25')][_0x4fd7('0x24')]=function(){var _0x588e28=[_0x4fd7('0x2a'),_0x4fd7('0x2b'),_0x4fd7('0x2c'),_0x4fd7('0x2d'),_0x4fd7('0x2e')];for(var _0x579ee6=0x0;_0x579ee6<_0x588e28[_0x4fd7('0x2f')];_0x579ee6+=0x1){var _0x1691b4=this[_0x4fd7('0x30')](_0x588e28[_0x579ee6]);if(this[_0x588e28[_0x579ee6]+_0x4fd7('0x31')]!==_0x1691b4){this[_0x588e28[_0x579ee6]+'StatusTime']=_[_0x4fd7('0x32')](moment()[_0x4fd7('0x33')]('x'));}this[_0x588e28[_0x579ee6]+_0x4fd7('0x31')]=_0x1691b4;}var _0x240297={'id':this['id'],'name':this[_0x4fd7('0x8')],'online':this[_0x4fd7('0x9')],'voicePause':this[_0x4fd7('0xa')],'chatPause':this[_0x4fd7('0xb')],'mailPause':this[_0x4fd7('0xc')],'smsPause':this['smsPause'],'faxPause':this['faxPause'],'openchannelPause':this[_0x4fd7('0x34')],'chatStatus':this[_0x4fd7('0xf')],'chatStatusTime':this[_0x4fd7('0x10')],'chatCapacity':this[_0x4fd7('0x11')],'chatCurrentCapacity':this[_0x4fd7('0x12')],'mailStatus':this[_0x4fd7('0x35')],'mailStatusTime':this[_0x4fd7('0x13')],'mailCapacity':this[_0x4fd7('0x14')],'mailCurrentCapacity':this[_0x4fd7('0x15')],'faxStatus':this[_0x4fd7('0x16')],'faxStatusTime':this['faxStatusTime'],'faxCapacity':this[_0x4fd7('0x19')],'faxCurrentCapacity':this['faxCurrentCapacity'],'smsStatus':this[_0x4fd7('0x36')],'smsStatusTime':this[_0x4fd7('0x1b')],'smsCapacity':this[_0x4fd7('0x1c')],'smsCurrentCapacity':this[_0x4fd7('0x1d')],'openchannelStatus':this[_0x4fd7('0x1e')],'openchannelStatusTime':this[_0x4fd7('0x37')],'openchannelCapacity':this[_0x4fd7('0x1f')],'openchannelCurrentCapacity':this[_0x4fd7('0x20')],'busy':this[_0x4fd7('0x21')],'busyQueue':this[_0x4fd7('0x22')]};var _0x4e4371=md5(JSON[_0x4fd7('0x38')](_0x240297));if(this[_0x4fd7('0x23')]!==_0x4e4371){this[_0x4fd7('0x23')]=_0x4e4371;io[_0x4fd7('0x39')](_0x4fd7('0x3a'),_0x240297);}};module[_0x4fd7('0x3b')]=Agent;
\ No newline at end of file
index 77570fa..a5fede1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6663=['updateRealtime','prototype','_rr','map','loggedIn','paused','length','available','stringify','format','chat:queue:%s','emit','chat_queue:save','exports','lodash','md5','util','ioredis','../../../config/environment','defaults','redis','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRouting'];(function(_0xf57566,_0x36adf5){var _0x5e1934=function(_0x151849){while(--_0x151849){_0xf57566['push'](_0xf57566['shift']());}};_0x5e1934(++_0x36adf5);}(_0x6663,0x158));var _0x3666=function(_0x1e3671,_0x9ae4fc){_0x1e3671=_0x1e3671-0x0;var _0x48d5f5=_0x6663[_0x1e3671];return _0x48d5f5;};'use strict';var _=require(_0x3666('0x0'));var md5=require(_0x3666('0x1'));var util=require(_0x3666('0x2'));var Redis=require(_0x3666('0x3'));var config=require(_0x3666('0x4'));config['redis']=_[_0x3666('0x5')](config[_0x3666('0x6')],{'host':'localhost','port':0x18eb});var io=require(_0x3666('0x7'))(new Redis(config['redis']));function ChatQueue(_0x5bef7e){this['id']=_0x5bef7e['id']||0x0;this['name']=_0x5bef7e[_0x3666('0x8')]||'';this[_0x3666('0x9')]=_0x5bef7e[_0x3666('0x9')]||0xa;this[_0x3666('0xa')]=_0x5bef7e['strategy']||_0x3666('0xb');this[_0x3666('0xc')]=_0x5bef7e[_0x3666('0xc')];this[_0x3666('0xd')]={};this[_0x3666('0xe')]=0x0;this[_0x3666('0x1')]='';this[_0x3666('0xf')]();this[_0x3666('0x10')]();}ChatQueue[_0x3666('0x11')][_0x3666('0xf')]=function(){var _0xcd2a5d=this['mapAgentsId'][_0x3666('0x12')];this['mapAgentsId']=_[_0x3666('0x13')](this[_0x3666('0xc')],'id');this[_0x3666('0xd')][_0x3666('0x12')]=_0xcd2a5d;};ChatQueue['prototype']['updateRealtime']=function(){this[_0x3666('0x14')]=0x0;this[_0x3666('0x15')]=0x0;for(var _0x685c20=0x0;_0x685c20<this[_0x3666('0xc')][_0x3666('0x16')];_0x685c20+=0x1){if(this['Agents'][_0x685c20]['online']){this[_0x3666('0x14')]+=0x1;}if(this['Agents'][_0x685c20]['chatPause']){this[_0x3666('0x15')]+=0x1;}}this['available']=this[_0x3666('0x14')]-this[_0x3666('0x15')];this[_0x3666('0x17')]=this[_0x3666('0x17')]>=0x0?this[_0x3666('0x17')]:0x0;var _0x445b78={'id':this['id'],'available':this[_0x3666('0x17')],'loggedIn':this[_0x3666('0x14')],'name':this['name'],'paused':this[_0x3666('0x15')],'waiting':this['waiting']};var _0x3a3988=md5(JSON[_0x3666('0x18')](_0x445b78));if(this['md5']!==_0x3a3988){this[_0x3666('0x1')]=_0x3a3988;io['to'](util[_0x3666('0x19')](_0x3666('0x1a'),_0x445b78[_0x3666('0x8')]))[_0x3666('0x1b')](_0x3666('0x1c'),_0x445b78);}};module[_0x3666('0x1d')]=ChatQueue;
\ No newline at end of file
+var _0x33b6=['waiting','updateRealtime','prototype','map','_rr','loggedIn','paused','length','online','chatPause','available','name','stringify','format','chat:queue:%s','emit','exports','lodash','md5','util','ioredis','redis','defaults','socket.io-emitter','timeout','strategy','beepall','Agents','mapAgentsId'];(function(_0x2dca82,_0x4c5f3e){var _0x4e47ee=function(_0xe1604c){while(--_0xe1604c){_0x2dca82['push'](_0x2dca82['shift']());}};_0x4e47ee(++_0x4c5f3e);}(_0x33b6,0xdc));var _0x633b=function(_0xe111d,_0x530bb4){_0xe111d=_0xe111d-0x0;var _0x4f8927=_0x33b6[_0xe111d];return _0x4f8927;};'use strict';var _=require(_0x633b('0x0'));var md5=require(_0x633b('0x1'));var util=require(_0x633b('0x2'));var Redis=require(_0x633b('0x3'));var config=require('../../../config/environment');config[_0x633b('0x4')]=_[_0x633b('0x5')](config[_0x633b('0x4')],{'host':'localhost','port':0x18eb});var io=require(_0x633b('0x6'))(new Redis(config[_0x633b('0x4')]));function ChatQueue(_0x68e51b){this['id']=_0x68e51b['id']||0x0;this['name']=_0x68e51b['name']||'';this[_0x633b('0x7')]=_0x68e51b[_0x633b('0x7')]||0xa;this['strategy']=_0x68e51b[_0x633b('0x8')]||_0x633b('0x9');this['Agents']=_0x68e51b[_0x633b('0xa')];this[_0x633b('0xb')]={};this[_0x633b('0xc')]=0x0;this[_0x633b('0x1')]='';this['updateRouting']();this[_0x633b('0xd')]();}ChatQueue[_0x633b('0xe')]['updateRouting']=function(){var _0x45cf4e=this[_0x633b('0xb')]['_rr'];this['mapAgentsId']=_[_0x633b('0xf')](this['Agents'],'id');this[_0x633b('0xb')][_0x633b('0x10')]=_0x45cf4e;};ChatQueue[_0x633b('0xe')][_0x633b('0xd')]=function(){this[_0x633b('0x11')]=0x0;this[_0x633b('0x12')]=0x0;for(var _0x12be9a=0x0;_0x12be9a<this[_0x633b('0xa')][_0x633b('0x13')];_0x12be9a+=0x1){if(this[_0x633b('0xa')][_0x12be9a][_0x633b('0x14')]){this[_0x633b('0x11')]+=0x1;}if(this[_0x633b('0xa')][_0x12be9a][_0x633b('0x15')]){this[_0x633b('0x12')]+=0x1;}}this[_0x633b('0x16')]=this['loggedIn']-this[_0x633b('0x12')];this[_0x633b('0x16')]=this[_0x633b('0x16')]>=0x0?this['available']:0x0;var _0x170843={'id':this['id'],'available':this[_0x633b('0x16')],'loggedIn':this[_0x633b('0x11')],'name':this[_0x633b('0x17')],'paused':this[_0x633b('0x12')],'waiting':this[_0x633b('0xc')]};var _0x55e572=md5(JSON[_0x633b('0x18')](_0x170843));if(this[_0x633b('0x1')]!==_0x55e572){this['md5']=_0x55e572;io['to'](util[_0x633b('0x19')](_0x633b('0x1a'),_0x170843[_0x633b('0x17')]))[_0x633b('0x1b')]('chat_queue:save',_0x170843);}};module[_0x633b('0x1c')]=ChatQueue;
\ No newline at end of file
index 25358cf..4606831 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x16f9=['exports','md5','ioredis','../../../config/environment','defaults','redis','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRealtime','prototype','updateRouting','_rr','map','paused','length','loggedIn','faxPause','available','format','fax:queue:%s','emit','fax_queue:save'];(function(_0x75f869,_0x3690d6){var _0x10af8b=function(_0x22d3ff){while(--_0x22d3ff){_0x75f869['push'](_0x75f869['shift']());}};_0x10af8b(++_0x3690d6);}(_0x16f9,0x197));var _0x916f=function(_0x1dad2d,_0x47aa23){_0x1dad2d=_0x1dad2d-0x0;var _0x29e631=_0x16f9[_0x1dad2d];return _0x29e631;};'use strict';var _=require('lodash');var md5=require(_0x916f('0x0'));var util=require('util');var Redis=require(_0x916f('0x1'));var config=require(_0x916f('0x2'));config['redis']=_[_0x916f('0x3')](config[_0x916f('0x4')],{'host':_0x916f('0x5'),'port':0x18eb});var io=require(_0x916f('0x6'))(new Redis(config[_0x916f('0x4')]));function FaxQueue(_0x23a8ad){this['id']=_0x23a8ad['id']||0x0;this[_0x916f('0x7')]=_0x23a8ad[_0x916f('0x7')]||'';this[_0x916f('0x8')]=_0x23a8ad[_0x916f('0x8')]||0xa;this[_0x916f('0x9')]=_0x23a8ad[_0x916f('0x9')]||_0x916f('0xa');this['Agents']=_0x23a8ad[_0x916f('0xb')];this[_0x916f('0xc')]={};this[_0x916f('0xd')]=0x0;this[_0x916f('0x0')]='';this['updateRouting']();this[_0x916f('0xe')]();}FaxQueue[_0x916f('0xf')][_0x916f('0x10')]=function(){var _0x1098fd=this[_0x916f('0xc')][_0x916f('0x11')];this[_0x916f('0xc')]=_[_0x916f('0x12')](this[_0x916f('0xb')],'id');this['mapAgentsId'][_0x916f('0x11')]=_0x1098fd;};FaxQueue[_0x916f('0xf')][_0x916f('0xe')]=function(){this['loggedIn']=0x0;this[_0x916f('0x13')]=0x0;for(var _0x4dbb36=0x0;_0x4dbb36<this['Agents'][_0x916f('0x14')];_0x4dbb36+=0x1){if(this[_0x916f('0xb')][_0x4dbb36]['online']){this[_0x916f('0x15')]+=0x1;}if(this[_0x916f('0xb')][_0x4dbb36][_0x916f('0x16')]){this['paused']+=0x1;}}this[_0x916f('0x17')]=this[_0x916f('0x15')]-this[_0x916f('0x13')];this[_0x916f('0x17')]=this[_0x916f('0x17')]>=0x0?this[_0x916f('0x17')]:0x0;var _0x4013c0={'id':this['id'],'available':this[_0x916f('0x17')],'loggedIn':this['loggedIn'],'name':this[_0x916f('0x7')],'paused':this[_0x916f('0x13')],'waiting':this[_0x916f('0xd')]};var _0x23a738=md5(JSON['stringify'](_0x4013c0));if(this['md5']!==_0x23a738){this[_0x916f('0x0')]=_0x23a738;io['to'](util[_0x916f('0x18')](_0x916f('0x19'),_0x4013c0[_0x916f('0x7')]))[_0x916f('0x1a')](_0x916f('0x1b'),_0x4013c0);}};module[_0x916f('0x1c')]=FaxQueue;
\ No newline at end of file
+var _0xdb04=['loggedIn','faxPause','available','stringify','format','fax:queue:%s','emit','fax_queue:save','exports','md5','util','ioredis','../../../config/environment','defaults','localhost','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRouting','updateRealtime','_rr','map','prototype','paused','online'];(function(_0x29ca3a,_0x118266){var _0x45371e=function(_0x3fe942){while(--_0x3fe942){_0x29ca3a['push'](_0x29ca3a['shift']());}};_0x45371e(++_0x118266);}(_0xdb04,0x1d9));var _0x4db0=function(_0x57537c,_0x17efd9){_0x57537c=_0x57537c-0x0;var _0x27f815=_0xdb04[_0x57537c];return _0x27f815;};'use strict';var _=require('lodash');var md5=require(_0x4db0('0x0'));var util=require(_0x4db0('0x1'));var Redis=require(_0x4db0('0x2'));var config=require(_0x4db0('0x3'));config['redis']=_[_0x4db0('0x4')](config['redis'],{'host':_0x4db0('0x5'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));function FaxQueue(_0x3e16ad){this['id']=_0x3e16ad['id']||0x0;this['name']=_0x3e16ad[_0x4db0('0x6')]||'';this[_0x4db0('0x7')]=_0x3e16ad['timeout']||0xa;this[_0x4db0('0x8')]=_0x3e16ad[_0x4db0('0x8')]||_0x4db0('0x9');this[_0x4db0('0xa')]=_0x3e16ad[_0x4db0('0xa')];this[_0x4db0('0xb')]={};this[_0x4db0('0xc')]=0x0;this['md5']='';this[_0x4db0('0xd')]();this[_0x4db0('0xe')]();}FaxQueue['prototype']['updateRouting']=function(){var _0x441957=this['mapAgentsId'][_0x4db0('0xf')];this[_0x4db0('0xb')]=_[_0x4db0('0x10')](this['Agents'],'id');this[_0x4db0('0xb')][_0x4db0('0xf')]=_0x441957;};FaxQueue[_0x4db0('0x11')]['updateRealtime']=function(){this['loggedIn']=0x0;this[_0x4db0('0x12')]=0x0;for(var _0x58642c=0x0;_0x58642c<this[_0x4db0('0xa')]['length'];_0x58642c+=0x1){if(this[_0x4db0('0xa')][_0x58642c][_0x4db0('0x13')]){this[_0x4db0('0x14')]+=0x1;}if(this[_0x4db0('0xa')][_0x58642c][_0x4db0('0x15')]){this['paused']+=0x1;}}this[_0x4db0('0x16')]=this[_0x4db0('0x14')]-this[_0x4db0('0x12')];this[_0x4db0('0x16')]=this[_0x4db0('0x16')]>=0x0?this['available']:0x0;var _0x15fe81={'id':this['id'],'available':this[_0x4db0('0x16')],'loggedIn':this[_0x4db0('0x14')],'name':this[_0x4db0('0x6')],'paused':this[_0x4db0('0x12')],'waiting':this[_0x4db0('0xc')]};var _0x473d7c=md5(JSON[_0x4db0('0x17')](_0x15fe81));if(this['md5']!==_0x473d7c){this[_0x4db0('0x0')]=_0x473d7c;io['to'](util[_0x4db0('0x18')](_0x4db0('0x19'),_0x15fe81['name']))[_0x4db0('0x1a')](_0x4db0('0x1b'),_0x15fe81);}};module[_0x4db0('0x1c')]=FaxQueue;
\ No newline at end of file
index 27010b6..5c2cef9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x72c0=['name','Intervals','exports'];(function(_0x1ebe53,_0x35cc29){var _0x56cb47=function(_0x1fc9fc){while(--_0x1fc9fc){_0x1ebe53['push'](_0x1ebe53['shift']());}};_0x56cb47(++_0x35cc29);}(_0x72c0,0x1e3));var _0x072c=function(_0x487b0c,_0x14ff74){_0x487b0c=_0x487b0c-0x0;var _0x1adbdc=_0x72c0[_0x487b0c];return _0x1adbdc;};'use strict';function Interval(_0x1c15e){this['id']=_0x1c15e['id']||0x0;this[_0x072c('0x0')]=_0x1c15e[_0x072c('0x0')]||'';this[_0x072c('0x1')]=_0x1c15e[_0x072c('0x1')]||{};}module[_0x072c('0x2')]=Interval;
\ No newline at end of file
+var _0xaa93=['exports','name','Intervals'];(function(_0x119635,_0x4ff32b){var _0x4e180e=function(_0x2c49b5){while(--_0x2c49b5){_0x119635['push'](_0x119635['shift']());}};_0x4e180e(++_0x4ff32b);}(_0xaa93,0x12a));var _0x3aa9=function(_0x9761cc,_0x2ad135){_0x9761cc=_0x9761cc-0x0;var _0x1bce7b=_0xaa93[_0x9761cc];return _0x1bce7b;};'use strict';function Interval(_0x354d64){this['id']=_0x354d64['id']||0x0;this[_0x3aa9('0x0')]=_0x354d64[_0x3aa9('0x0')]||'';this[_0x3aa9('0x1')]=_0x354d64[_0x3aa9('0x1')]||{};}module[_0x3aa9('0x2')]=Interval;
\ No newline at end of file
index d0f7e2d..a0b8a5c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdded=['waiting','format','emit','lodash','md5','util','ioredis','../../../config/environment','redis','localhost','socket.io-emitter','name','timeout','strategy','Agents','updateRealtime','updateRouting','mapAgentsId','_rr','map','prototype','loggedIn','paused','online','available'];(function(_0x4da8a7,_0x3f7e15){var _0x109c4b=function(_0x3ad8a2){while(--_0x3ad8a2){_0x4da8a7['push'](_0x4da8a7['shift']());}};_0x109c4b(++_0x3f7e15);}(_0xdded,0x17a));var _0xddde=function(_0x4227e6,_0x670cb7){_0x4227e6=_0x4227e6-0x0;var _0x5987f4=_0xdded[_0x4227e6];return _0x5987f4;};'use strict';var _=require(_0xddde('0x0'));var md5=require(_0xddde('0x1'));var util=require(_0xddde('0x2'));var Redis=require(_0xddde('0x3'));var config=require(_0xddde('0x4'));config[_0xddde('0x5')]=_['defaults'](config[_0xddde('0x5')],{'host':_0xddde('0x6'),'port':0x18eb});var io=require(_0xddde('0x7'))(new Redis(config[_0xddde('0x5')]));function MailQueue(_0xc00db8){this['id']=_0xc00db8['id']||0x0;this[_0xddde('0x8')]=_0xc00db8[_0xddde('0x8')]||'';this[_0xddde('0x9')]=_0xc00db8[_0xddde('0x9')]||0xa;this[_0xddde('0xa')]=_0xc00db8[_0xddde('0xa')]||'beepall';this[_0xddde('0xb')]=_0xc00db8['Agents'];this['mapAgentsId']={};this['waiting']=0x0;this[_0xddde('0x1')]='';this['updateRouting']();this[_0xddde('0xc')]();}MailQueue['prototype'][_0xddde('0xd')]=function(){var _0x2880de=this[_0xddde('0xe')][_0xddde('0xf')];this[_0xddde('0xe')]=_[_0xddde('0x10')](this[_0xddde('0xb')],'id');this[_0xddde('0xe')]['_rr']=_0x2880de;};MailQueue[_0xddde('0x11')][_0xddde('0xc')]=function(){this[_0xddde('0x12')]=0x0;this[_0xddde('0x13')]=0x0;for(var _0x7cbcee=0x0;_0x7cbcee<this[_0xddde('0xb')]['length'];_0x7cbcee+=0x1){if(this[_0xddde('0xb')][_0x7cbcee][_0xddde('0x14')]){this[_0xddde('0x12')]+=0x1;}if(this['Agents'][_0x7cbcee]['mailPause']){this[_0xddde('0x13')]+=0x1;}}this['available']=this[_0xddde('0x12')]-this[_0xddde('0x13')];this[_0xddde('0x15')]=this[_0xddde('0x15')]>=0x0?this[_0xddde('0x15')]:0x0;var _0x55349b={'id':this['id'],'available':this[_0xddde('0x15')],'loggedIn':this[_0xddde('0x12')],'name':this['name'],'paused':this[_0xddde('0x13')],'waiting':this[_0xddde('0x16')]};var _0x556a47=md5(JSON['stringify'](_0x55349b));if(this[_0xddde('0x1')]!==_0x556a47){this['md5']=_0x556a47;io['to'](util[_0xddde('0x17')]('mail:queue:%s',_0x55349b[_0xddde('0x8')]))[_0xddde('0x18')]('mail_queue:save',_0x55349b);}};module['exports']=MailQueue;
\ No newline at end of file
+var _0x1f2d=['mapAgentsId','updateRouting','updateRealtime','prototype','_rr','map','loggedIn','online','mailPause','paused','available','waiting','stringify','format','mail:queue:%s','emit','mail_queue:save','exports','lodash','md5','util','ioredis','redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents'];(function(_0x3d1fc5,_0xbf8941){var _0x2b401b=function(_0x21a363){while(--_0x21a363){_0x3d1fc5['push'](_0x3d1fc5['shift']());}};_0x2b401b(++_0xbf8941);}(_0x1f2d,0x1c4));var _0xd1f2=function(_0xf46bd9,_0x322826){_0xf46bd9=_0xf46bd9-0x0;var _0x2763c3=_0x1f2d[_0xf46bd9];return _0x2763c3;};'use strict';var _=require(_0xd1f2('0x0'));var md5=require(_0xd1f2('0x1'));var util=require(_0xd1f2('0x2'));var Redis=require(_0xd1f2('0x3'));var config=require('../../../config/environment');config[_0xd1f2('0x4')]=_[_0xd1f2('0x5')](config[_0xd1f2('0x4')],{'host':_0xd1f2('0x6'),'port':0x18eb});var io=require(_0xd1f2('0x7'))(new Redis(config[_0xd1f2('0x4')]));function MailQueue(_0x1857ac){this['id']=_0x1857ac['id']||0x0;this[_0xd1f2('0x8')]=_0x1857ac[_0xd1f2('0x8')]||'';this[_0xd1f2('0x9')]=_0x1857ac[_0xd1f2('0x9')]||0xa;this[_0xd1f2('0xa')]=_0x1857ac[_0xd1f2('0xa')]||_0xd1f2('0xb');this[_0xd1f2('0xc')]=_0x1857ac[_0xd1f2('0xc')];this[_0xd1f2('0xd')]={};this['waiting']=0x0;this[_0xd1f2('0x1')]='';this[_0xd1f2('0xe')]();this[_0xd1f2('0xf')]();}MailQueue[_0xd1f2('0x10')]['updateRouting']=function(){var _0x3f8dbc=this[_0xd1f2('0xd')][_0xd1f2('0x11')];this['mapAgentsId']=_[_0xd1f2('0x12')](this[_0xd1f2('0xc')],'id');this[_0xd1f2('0xd')][_0xd1f2('0x11')]=_0x3f8dbc;};MailQueue[_0xd1f2('0x10')][_0xd1f2('0xf')]=function(){this[_0xd1f2('0x13')]=0x0;this['paused']=0x0;for(var _0x4d71d1=0x0;_0x4d71d1<this['Agents']['length'];_0x4d71d1+=0x1){if(this['Agents'][_0x4d71d1][_0xd1f2('0x14')]){this[_0xd1f2('0x13')]+=0x1;}if(this[_0xd1f2('0xc')][_0x4d71d1][_0xd1f2('0x15')]){this[_0xd1f2('0x16')]+=0x1;}}this[_0xd1f2('0x17')]=this[_0xd1f2('0x13')]-this['paused'];this[_0xd1f2('0x17')]=this[_0xd1f2('0x17')]>=0x0?this[_0xd1f2('0x17')]:0x0;var _0x2301dd={'id':this['id'],'available':this[_0xd1f2('0x17')],'loggedIn':this[_0xd1f2('0x13')],'name':this[_0xd1f2('0x8')],'paused':this['paused'],'waiting':this[_0xd1f2('0x18')]};var _0x719d93=md5(JSON[_0xd1f2('0x19')](_0x2301dd));if(this[_0xd1f2('0x1')]!==_0x719d93){this[_0xd1f2('0x1')]=_0x719d93;io['to'](util[_0xd1f2('0x1a')](_0xd1f2('0x1b'),_0x2301dd[_0xd1f2('0x8')]))[_0xd1f2('0x1c')](_0xd1f2('0x1d'),_0x2301dd);}};module[_0xd1f2('0x1e')]=MailQueue;
\ No newline at end of file
index 7574248..ad693a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6306=['localhost','socket.io-emitter','name','strategy','Agents','mapAgentsId','waiting','updateRealtime','prototype','updateRouting','_rr','map','loggedIn','paused','openchannelPause','available','format','openchannel:queue:%s','emit','openchannel_queue:save','exports','md5','util','ioredis','../../../config/environment','redis'];(function(_0x290a56,_0x5c540a){var _0x89610=function(_0x4e901f){while(--_0x4e901f){_0x290a56['push'](_0x290a56['shift']());}};_0x89610(++_0x5c540a);}(_0x6306,0xcb));var _0x6630=function(_0x1949f7,_0xfdc8d5){_0x1949f7=_0x1949f7-0x0;var _0x323f37=_0x6306[_0x1949f7];return _0x323f37;};'use strict';var _=require('lodash');var md5=require(_0x6630('0x0'));var util=require(_0x6630('0x1'));var Redis=require(_0x6630('0x2'));var config=require(_0x6630('0x3'));config[_0x6630('0x4')]=_['defaults'](config[_0x6630('0x4')],{'host':_0x6630('0x5'),'port':0x18eb});var io=require(_0x6630('0x6'))(new Redis(config[_0x6630('0x4')]));function OpenchannelQueue(_0xfd926d){this['id']=_0xfd926d['id']||0x0;this[_0x6630('0x7')]=_0xfd926d[_0x6630('0x7')]||'';this['timeout']=_0xfd926d['timeout']||0xa;this[_0x6630('0x8')]=_0xfd926d[_0x6630('0x8')]||'beepall';this[_0x6630('0x9')]=_0xfd926d[_0x6630('0x9')];this[_0x6630('0xa')]={};this[_0x6630('0xb')]=0x0;this[_0x6630('0x0')]='';this['updateRouting']();this[_0x6630('0xc')]();}OpenchannelQueue[_0x6630('0xd')][_0x6630('0xe')]=function(){var _0x1d3990=this[_0x6630('0xa')][_0x6630('0xf')];this[_0x6630('0xa')]=_[_0x6630('0x10')](this[_0x6630('0x9')],'id');this[_0x6630('0xa')][_0x6630('0xf')]=_0x1d3990;};OpenchannelQueue['prototype'][_0x6630('0xc')]=function(){this[_0x6630('0x11')]=0x0;this[_0x6630('0x12')]=0x0;for(var _0x36f871=0x0;_0x36f871<this[_0x6630('0x9')]['length'];_0x36f871+=0x1){if(this['Agents'][_0x36f871]['online']){this[_0x6630('0x11')]+=0x1;}if(this['Agents'][_0x36f871][_0x6630('0x13')]){this[_0x6630('0x12')]+=0x1;}}this[_0x6630('0x14')]=this['loggedIn']-this[_0x6630('0x12')];this['available']=this['available']>=0x0?this[_0x6630('0x14')]:0x0;var _0x164844={'id':this['id'],'available':this[_0x6630('0x14')],'loggedIn':this['loggedIn'],'name':this[_0x6630('0x7')],'paused':this[_0x6630('0x12')],'waiting':this[_0x6630('0xb')]};var _0x4241a1=md5(JSON['stringify'](_0x164844));if(this[_0x6630('0x0')]!==_0x4241a1){this['md5']=_0x4241a1;io['to'](util[_0x6630('0x15')](_0x6630('0x16'),_0x164844['name']))[_0x6630('0x17')](_0x6630('0x18'),_0x164844);}};module[_0x6630('0x19')]=OpenchannelQueue;
\ No newline at end of file
+var _0xbc83=['_rr','prototype','updateRealtime','paused','length','online','loggedIn','openchannelPause','available','stringify','format','emit','openchannel_queue:save','exports','lodash','md5','util','ioredis','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','Agents','mapAgentsId','waiting','updateRouting','map'];(function(_0x23ae11,_0x7c228c){var _0x1c9700=function(_0x1a95b6){while(--_0x1a95b6){_0x23ae11['push'](_0x23ae11['shift']());}};_0x1c9700(++_0x7c228c);}(_0xbc83,0xa9));var _0x3bc8=function(_0x5006ae,_0x4656c5){_0x5006ae=_0x5006ae-0x0;var _0x24f865=_0xbc83[_0x5006ae];return _0x24f865;};'use strict';var _=require(_0x3bc8('0x0'));var md5=require(_0x3bc8('0x1'));var util=require(_0x3bc8('0x2'));var Redis=require(_0x3bc8('0x3'));var config=require(_0x3bc8('0x4'));config[_0x3bc8('0x5')]=_[_0x3bc8('0x6')](config[_0x3bc8('0x5')],{'host':_0x3bc8('0x7'),'port':0x18eb});var io=require(_0x3bc8('0x8'))(new Redis(config[_0x3bc8('0x5')]));function OpenchannelQueue(_0x2a4b2c){this['id']=_0x2a4b2c['id']||0x0;this[_0x3bc8('0x9')]=_0x2a4b2c[_0x3bc8('0x9')]||'';this[_0x3bc8('0xa')]=_0x2a4b2c['timeout']||0xa;this[_0x3bc8('0xb')]=_0x2a4b2c['strategy']||'beepall';this[_0x3bc8('0xc')]=_0x2a4b2c[_0x3bc8('0xc')];this[_0x3bc8('0xd')]={};this[_0x3bc8('0xe')]=0x0;this['md5']='';this[_0x3bc8('0xf')]();this['updateRealtime']();}OpenchannelQueue['prototype']['updateRouting']=function(){var _0x38cf4f=this[_0x3bc8('0xd')]['_rr'];this['mapAgentsId']=_[_0x3bc8('0x10')](this[_0x3bc8('0xc')],'id');this[_0x3bc8('0xd')][_0x3bc8('0x11')]=_0x38cf4f;};OpenchannelQueue[_0x3bc8('0x12')][_0x3bc8('0x13')]=function(){this['loggedIn']=0x0;this[_0x3bc8('0x14')]=0x0;for(var _0xf3878c=0x0;_0xf3878c<this[_0x3bc8('0xc')][_0x3bc8('0x15')];_0xf3878c+=0x1){if(this[_0x3bc8('0xc')][_0xf3878c][_0x3bc8('0x16')]){this[_0x3bc8('0x17')]+=0x1;}if(this[_0x3bc8('0xc')][_0xf3878c][_0x3bc8('0x18')]){this['paused']+=0x1;}}this[_0x3bc8('0x19')]=this[_0x3bc8('0x17')]-this[_0x3bc8('0x14')];this[_0x3bc8('0x19')]=this['available']>=0x0?this[_0x3bc8('0x19')]:0x0;var _0xa0213f={'id':this['id'],'available':this['available'],'loggedIn':this[_0x3bc8('0x17')],'name':this['name'],'paused':this[_0x3bc8('0x14')],'waiting':this[_0x3bc8('0xe')]};var _0x41ae9c=md5(JSON[_0x3bc8('0x1a')](_0xa0213f));if(this[_0x3bc8('0x1')]!==_0x41ae9c){this[_0x3bc8('0x1')]=_0x41ae9c;io['to'](util[_0x3bc8('0x1b')]('openchannel:queue:%s',_0xa0213f[_0x3bc8('0x9')]))[_0x3bc8('0x1c')](_0x3bc8('0x1d'),_0xa0213f);}};module[_0x3bc8('0x1e')]=OpenchannelQueue;
\ No newline at end of file
index bf0cf99..d4107cc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f02=['emit','sms_queue:save','exports','md5','util','ioredis','../../../config/environment','redis','localhost','socket.io-emitter','name','timeout','strategy','Agents','mapAgentsId','waiting','updateRouting','updateRealtime','prototype','_rr','map','paused','length','online','smsPause','available','loggedIn','stringify','format','sms:queue:%s'];(function(_0x5f23f3,_0x313a4f){var _0x233399=function(_0x4e44af){while(--_0x4e44af){_0x5f23f3['push'](_0x5f23f3['shift']());}};_0x233399(++_0x313a4f);}(_0x6f02,0x1e3));var _0x26f0=function(_0x526b63,_0x1caa9e){_0x526b63=_0x526b63-0x0;var _0x58a4f6=_0x6f02[_0x526b63];return _0x58a4f6;};'use strict';var _=require('lodash');var md5=require(_0x26f0('0x0'));var util=require(_0x26f0('0x1'));var Redis=require(_0x26f0('0x2'));var config=require(_0x26f0('0x3'));config[_0x26f0('0x4')]=_['defaults'](config[_0x26f0('0x4')],{'host':_0x26f0('0x5'),'port':0x18eb});var io=require(_0x26f0('0x6'))(new Redis(config['redis']));function SmsQueue(_0x512866){this['id']=_0x512866['id']||0x0;this['name']=_0x512866[_0x26f0('0x7')]||'';this[_0x26f0('0x8')]=_0x512866['timeout']||0xa;this[_0x26f0('0x9')]=_0x512866[_0x26f0('0x9')]||'beepall';this[_0x26f0('0xa')]=_0x512866[_0x26f0('0xa')];this[_0x26f0('0xb')]={};this[_0x26f0('0xc')]=0x0;this[_0x26f0('0x0')]='';this[_0x26f0('0xd')]();this[_0x26f0('0xe')]();}SmsQueue[_0x26f0('0xf')][_0x26f0('0xd')]=function(){var _0x1343f5=this[_0x26f0('0xb')][_0x26f0('0x10')];this[_0x26f0('0xb')]=_[_0x26f0('0x11')](this['Agents'],'id');this['mapAgentsId'][_0x26f0('0x10')]=_0x1343f5;};SmsQueue['prototype']['updateRealtime']=function(){this['loggedIn']=0x0;this[_0x26f0('0x12')]=0x0;for(var _0x1fdfa3=0x0;_0x1fdfa3<this['Agents'][_0x26f0('0x13')];_0x1fdfa3+=0x1){if(this['Agents'][_0x1fdfa3][_0x26f0('0x14')]){this['loggedIn']+=0x1;}if(this['Agents'][_0x1fdfa3][_0x26f0('0x15')]){this[_0x26f0('0x12')]+=0x1;}}this['available']=this['loggedIn']-this[_0x26f0('0x12')];this[_0x26f0('0x16')]=this['available']>=0x0?this[_0x26f0('0x16')]:0x0;var _0x3e12d9={'id':this['id'],'available':this[_0x26f0('0x16')],'loggedIn':this[_0x26f0('0x17')],'name':this[_0x26f0('0x7')],'paused':this['paused'],'waiting':this['waiting']};var _0x3c4f0a=md5(JSON[_0x26f0('0x18')](_0x3e12d9));if(this[_0x26f0('0x0')]!==_0x3c4f0a){this[_0x26f0('0x0')]=_0x3c4f0a;io['to'](util[_0x26f0('0x19')](_0x26f0('0x1a'),_0x3e12d9['name']))[_0x26f0('0x1b')](_0x26f0('0x1c'),_0x3e12d9);}};module[_0x26f0('0x1d')]=SmsQueue;
\ No newline at end of file
+var _0x0b9a=['redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRouting','updateRealtime','_rr','map','prototype','loggedIn','paused','length','online','available','format','sms:queue:%s','emit','sms_queue:save','exports','md5','util','ioredis','../../../config/environment'];(function(_0x1abb09,_0x18ee91){var _0xea1c07=function(_0x38f42c){while(--_0x38f42c){_0x1abb09['push'](_0x1abb09['shift']());}};_0xea1c07(++_0x18ee91);}(_0x0b9a,0x1be));var _0xa0b9=function(_0x31f22e,_0x434db1){_0x31f22e=_0x31f22e-0x0;var _0x16e1b0=_0x0b9a[_0x31f22e];return _0x16e1b0;};'use strict';var _=require('lodash');var md5=require(_0xa0b9('0x0'));var util=require(_0xa0b9('0x1'));var Redis=require(_0xa0b9('0x2'));var config=require(_0xa0b9('0x3'));config[_0xa0b9('0x4')]=_[_0xa0b9('0x5')](config['redis'],{'host':_0xa0b9('0x6'),'port':0x18eb});var io=require(_0xa0b9('0x7'))(new Redis(config[_0xa0b9('0x4')]));function SmsQueue(_0x31b509){this['id']=_0x31b509['id']||0x0;this[_0xa0b9('0x8')]=_0x31b509[_0xa0b9('0x8')]||'';this['timeout']=_0x31b509[_0xa0b9('0x9')]||0xa;this[_0xa0b9('0xa')]=_0x31b509[_0xa0b9('0xa')]||_0xa0b9('0xb');this[_0xa0b9('0xc')]=_0x31b509[_0xa0b9('0xc')];this[_0xa0b9('0xd')]={};this[_0xa0b9('0xe')]=0x0;this['md5']='';this[_0xa0b9('0xf')]();this[_0xa0b9('0x10')]();}SmsQueue['prototype'][_0xa0b9('0xf')]=function(){var _0x3de0f9=this['mapAgentsId'][_0xa0b9('0x11')];this[_0xa0b9('0xd')]=_[_0xa0b9('0x12')](this[_0xa0b9('0xc')],'id');this['mapAgentsId']['_rr']=_0x3de0f9;};SmsQueue[_0xa0b9('0x13')][_0xa0b9('0x10')]=function(){this[_0xa0b9('0x14')]=0x0;this[_0xa0b9('0x15')]=0x0;for(var _0x325955=0x0;_0x325955<this[_0xa0b9('0xc')][_0xa0b9('0x16')];_0x325955+=0x1){if(this[_0xa0b9('0xc')][_0x325955][_0xa0b9('0x17')]){this['loggedIn']+=0x1;}if(this[_0xa0b9('0xc')][_0x325955]['smsPause']){this[_0xa0b9('0x15')]+=0x1;}}this[_0xa0b9('0x18')]=this[_0xa0b9('0x14')]-this[_0xa0b9('0x15')];this[_0xa0b9('0x18')]=this[_0xa0b9('0x18')]>=0x0?this['available']:0x0;var _0xdb25f8={'id':this['id'],'available':this[_0xa0b9('0x18')],'loggedIn':this[_0xa0b9('0x14')],'name':this['name'],'paused':this[_0xa0b9('0x15')],'waiting':this[_0xa0b9('0xe')]};var _0x16a3ee=md5(JSON['stringify'](_0xdb25f8));if(this['md5']!==_0x16a3ee){this['md5']=_0x16a3ee;io['to'](util[_0xa0b9('0x19')](_0xa0b9('0x1a'),_0xdb25f8[_0xa0b9('0x8')]))[_0xa0b9('0x1b')](_0xa0b9('0x1c'),_0xdb25f8);}};module[_0xa0b9('0x1d')]=SmsQueue;
\ No newline at end of file
index 7fa7a34..96fbf17 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x38f1=['chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','mapKeys','prototype','mergeFromDatabase','initAgents','length','isUndefined','initIntervals','intervals','initOpenchannelQueues','updateRouting','updateRealtime','initChatQueues','smsQueues','exports','bluebird','util','../model/agent','../model/openchannelQueue','../model/mailQueue','agents','openchannelQueues','chatQueues','mailQueues','faxQueues'];(function(_0x33b4e0,_0x2535bb){var _0x1fba56=function(_0x475460){while(--_0x475460){_0x33b4e0['push'](_0x33b4e0['shift']());}};_0x1fba56(++_0x2535bb);}(_0x38f1,0x1e3));var _0x138f=function(_0x49236c,_0x1aa642){_0x49236c=_0x49236c-0x0;var _0x52442=_0x38f1[_0x49236c];return _0x52442;};'use strict';var BPromise=require(_0x138f('0x0'));var util=require(_0x138f('0x1'));var _=require('lodash');var moment=require('moment');var Agent=require(_0x138f('0x2'));var Interval=require('../model/interval');var OpenchannelQueue=require(_0x138f('0x3'));var ChatQueue=require('../model/chatQueue');var SmsQueue=require('../model/smsQueue');var MailQueue=require(_0x138f('0x4'));var FaxQueue=require('../model/faxQueue');var Realtime=function(){this[_0x138f('0x5')]={};this['intervals']={};this[_0x138f('0x6')]={};this[_0x138f('0x7')]={};this['smsQueues']={};this[_0x138f('0x8')]={};this[_0x138f('0x9')]={};this[_0x138f('0xa')]={};this[_0x138f('0xb')]={};this[_0x138f('0xc')]={};this[_0x138f('0xd')]={};this[_0x138f('0xe')]={};};function freeIsNotKey(_0x5e4dd0,_0x223c7b,_0x3c19d9){var _0x49cd3e=_[_0x138f('0xf')](_0x5e4dd0,function(_0x188b00,_0x202e2f){return _0x188b00[_0x3c19d9];});for(var _0x59fbf1 in _0x223c7b){if(_0x223c7b['hasOwnProperty'](_0x59fbf1)){if(!_0x49cd3e[_0x59fbf1]){delete _0x223c7b[_0x59fbf1];}}}}Realtime[_0x138f('0x10')][_0x138f('0x11')]=function(_0x2730e4,_0x3371bf){for(var _0x5e9eec in _0x3371bf){if(_0x2730e4['hasOwnProperty'](_0x5e9eec)){_0x2730e4[_0x5e9eec]=_0x3371bf[_0x5e9eec];}}};Realtime['prototype'][_0x138f('0x12')]=function(){var _0x170ec0=this;return function(_0x3af3fb){if(_0x3af3fb){freeIsNotKey(_0x3af3fb,_0x170ec0[_0x138f('0x5')],'id');for(var _0x1b42b4=0x0,_0x120687={},_0x53ae73={};_0x1b42b4<_0x3af3fb[_0x138f('0x13')];_0x1b42b4+=0x1){_0x120687=_0x3af3fb[_0x1b42b4];if(_[_0x138f('0x14')](_0x170ec0[_0x138f('0x5')][_0x120687['id']])){_0x170ec0[_0x138f('0x5')][_0x120687['id']]=new Agent(_0x120687);}else{_0x170ec0['mergeFromDatabase'](_0x170ec0[_0x138f('0x5')][_0x120687['id']],_0x120687);}}}return _0x170ec0[_0x138f('0x5')];};};Realtime[_0x138f('0x10')][_0x138f('0x15')]=function(){var _0x3004e9=this;return function(_0x1bdfb1){if(_0x1bdfb1){freeIsNotKey(_0x1bdfb1,_0x3004e9[_0x138f('0x16')],'id');for(var _0x339157=0x0,_0x33471d={},_0x2a2302={};_0x339157<_0x1bdfb1[_0x138f('0x13')];_0x339157+=0x1){_0x33471d=_0x1bdfb1[_0x339157];if(_[_0x138f('0x14')](_0x3004e9['intervals'][_0x33471d['id']])){_0x3004e9[_0x138f('0x16')][_0x33471d['id']]=new Interval(_0x33471d);}else{_0x3004e9[_0x138f('0x11')](_0x3004e9[_0x138f('0x16')][_0x33471d['id']],_0x33471d);}}}return _0x3004e9[_0x138f('0x16')];};};Realtime['prototype'][_0x138f('0x17')]=function(){var _0x3413d2=this;return function(_0x222355){if(_0x222355){freeIsNotKey(_0x222355,_0x3413d2[_0x138f('0x6')],'id');for(var _0x48ad8a=0x0,_0x39f38c={},_0x5d5959={};_0x48ad8a<_0x222355[_0x138f('0x13')];_0x48ad8a+=0x1){_0x39f38c=_0x222355[_0x48ad8a];if(_[_0x138f('0x14')](_0x3413d2['openchannelQueues'][_0x39f38c['id']])){_0x3413d2[_0x138f('0x6')][_0x39f38c['id']]=new OpenchannelQueue(_0x39f38c);}else{_0x3413d2[_0x138f('0x11')](_0x3413d2[_0x138f('0x6')][_0x39f38c['id']],_0x39f38c);}_0x3413d2[_0x138f('0x6')][_0x39f38c['id']][_0x138f('0x18')]();_0x3413d2[_0x138f('0x6')][_0x39f38c['id']][_0x138f('0x19')]();}}return _0x3413d2['openchannelQueues'];};};Realtime[_0x138f('0x10')][_0x138f('0x1a')]=function(){var _0x3f5c2a=this;return function(_0x1f1f13){if(_0x1f1f13){freeIsNotKey(_0x1f1f13,_0x3f5c2a[_0x138f('0x7')],'id');for(var _0x208615=0x0,_0x9b142={},_0x3aebad={};_0x208615<_0x1f1f13['length'];_0x208615+=0x1){_0x9b142=_0x1f1f13[_0x208615];if(_['isUndefined'](_0x3f5c2a[_0x138f('0x7')][_0x9b142['id']])){_0x3f5c2a[_0x138f('0x7')][_0x9b142['id']]=new ChatQueue(_0x9b142);}else{_0x3f5c2a[_0x138f('0x11')](_0x3f5c2a[_0x138f('0x7')][_0x9b142['id']],_0x9b142);}_0x3f5c2a[_0x138f('0x7')][_0x9b142['id']][_0x138f('0x18')]();_0x3f5c2a[_0x138f('0x7')][_0x9b142['id']][_0x138f('0x19')]();}}return _0x3f5c2a[_0x138f('0x7')];};};Realtime[_0x138f('0x10')]['initSmsQueues']=function(){var _0x4987cb=this;return function(_0x462f70){if(_0x462f70){freeIsNotKey(_0x462f70,_0x4987cb['smsQueues'],'id');for(var _0x8a1420=0x0,_0x35126a={},_0x459481={};_0x8a1420<_0x462f70[_0x138f('0x13')];_0x8a1420+=0x1){_0x35126a=_0x462f70[_0x8a1420];if(_[_0x138f('0x14')](_0x4987cb[_0x138f('0x1b')][_0x35126a['id']])){_0x4987cb[_0x138f('0x1b')][_0x35126a['id']]=new SmsQueue(_0x35126a);}else{_0x4987cb[_0x138f('0x11')](_0x4987cb[_0x138f('0x1b')][_0x35126a['id']],_0x35126a);}_0x4987cb['smsQueues'][_0x35126a['id']]['updateRouting']();_0x4987cb[_0x138f('0x1b')][_0x35126a['id']][_0x138f('0x19')]();}}return _0x4987cb['smsQueues'];};};Realtime[_0x138f('0x10')]['initMailQueues']=function(){var _0x4b704e=this;return function(_0x25abd5){if(_0x25abd5){freeIsNotKey(_0x25abd5,_0x4b704e[_0x138f('0x8')],'id');for(var _0x23b8d2=0x0,_0x3ba254={},_0x2131de={};_0x23b8d2<_0x25abd5[_0x138f('0x13')];_0x23b8d2+=0x1){_0x3ba254=_0x25abd5[_0x23b8d2];if(_[_0x138f('0x14')](_0x4b704e[_0x138f('0x8')][_0x3ba254['id']])){_0x4b704e['mailQueues'][_0x3ba254['id']]=new MailQueue(_0x3ba254);}else{_0x4b704e['mergeFromDatabase'](_0x4b704e[_0x138f('0x8')][_0x3ba254['id']],_0x3ba254);}_0x4b704e[_0x138f('0x8')][_0x3ba254['id']][_0x138f('0x18')]();_0x4b704e[_0x138f('0x8')][_0x3ba254['id']][_0x138f('0x19')]();}}return _0x4b704e[_0x138f('0x8')];};};Realtime[_0x138f('0x10')]['initFaxQueues']=function(){var _0x3c7c12=this;return function(_0x2f18dd){if(_0x2f18dd){freeIsNotKey(_0x2f18dd,_0x3c7c12[_0x138f('0x9')],'id');for(var _0x287222=0x0,_0x4b9b14={},_0x5530be={};_0x287222<_0x2f18dd[_0x138f('0x13')];_0x287222+=0x1){_0x4b9b14=_0x2f18dd[_0x287222];if(_[_0x138f('0x14')](_0x3c7c12[_0x138f('0x9')][_0x4b9b14['id']])){_0x3c7c12['faxQueues'][_0x4b9b14['id']]=new FaxQueue(_0x4b9b14);}else{_0x3c7c12[_0x138f('0x11')](_0x3c7c12[_0x138f('0x9')][_0x4b9b14['id']],_0x4b9b14);}_0x3c7c12[_0x138f('0x9')][_0x4b9b14['id']][_0x138f('0x18')]();_0x3c7c12[_0x138f('0x9')][_0x4b9b14['id']][_0x138f('0x19')]();}}return _0x3c7c12[_0x138f('0x9')];};};module[_0x138f('0x1c')]=Realtime;
\ No newline at end of file
+var _0xc9e5=['initOpenchannelQueues','updateRouting','updateRealtime','initChatQueues','chatQueues','initSmsQueues','initMailQueues','initFaxQueues','faxQueues','exports','bluebird','util','lodash','moment','../model/agent','../model/interval','../model/openchannelQueue','../model/chatQueue','../model/smsQueue','../model/mailQueue','../model/faxQueue','agents','intervals','openchannelQueues','smsQueues','mailQueues','mailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','faxQueuesWaitingInteractions','mapKeys','hasOwnProperty','prototype','mergeFromDatabase','initAgents','isUndefined','initIntervals','length'];(function(_0x12aee5,_0x56c174){var _0x18f48e=function(_0x335a66){while(--_0x335a66){_0x12aee5['push'](_0x12aee5['shift']());}};_0x18f48e(++_0x56c174);}(_0xc9e5,0x1a1));var _0x5c9e=function(_0x97d3b3,_0x38d9dd){_0x97d3b3=_0x97d3b3-0x0;var _0xc90195=_0xc9e5[_0x97d3b3];return _0xc90195;};'use strict';var BPromise=require(_0x5c9e('0x0'));var util=require(_0x5c9e('0x1'));var _=require(_0x5c9e('0x2'));var moment=require(_0x5c9e('0x3'));var Agent=require(_0x5c9e('0x4'));var Interval=require(_0x5c9e('0x5'));var OpenchannelQueue=require(_0x5c9e('0x6'));var ChatQueue=require(_0x5c9e('0x7'));var SmsQueue=require(_0x5c9e('0x8'));var MailQueue=require(_0x5c9e('0x9'));var FaxQueue=require(_0x5c9e('0xa'));var Realtime=function(){this[_0x5c9e('0xb')]={};this[_0x5c9e('0xc')]={};this[_0x5c9e('0xd')]={};this['chatQueues']={};this[_0x5c9e('0xe')]={};this[_0x5c9e('0xf')]={};this['faxQueues']={};this['chatQueuesWaitingInteractions']={};this[_0x5c9e('0x10')]={};this[_0x5c9e('0x11')]={};this['smsQueuesWaitingInteractions']={};this[_0x5c9e('0x12')]={};};function freeIsNotKey(_0x14d242,_0x1366b8,_0x43ef46){var _0x249b52=_[_0x5c9e('0x13')](_0x14d242,function(_0x3766e3,_0x8002a4){return _0x3766e3[_0x43ef46];});for(var _0x89df34 in _0x1366b8){if(_0x1366b8[_0x5c9e('0x14')](_0x89df34)){if(!_0x249b52[_0x89df34]){delete _0x1366b8[_0x89df34];}}}}Realtime[_0x5c9e('0x15')][_0x5c9e('0x16')]=function(_0x4f65c6,_0x5fd8d){for(var _0x489b44 in _0x5fd8d){if(_0x4f65c6[_0x5c9e('0x14')](_0x489b44)){_0x4f65c6[_0x489b44]=_0x5fd8d[_0x489b44];}}};Realtime[_0x5c9e('0x15')][_0x5c9e('0x17')]=function(){var _0x5762fc=this;return function(_0x571db0){if(_0x571db0){freeIsNotKey(_0x571db0,_0x5762fc['agents'],'id');for(var _0x414c6e=0x0,_0x40bc8d={},_0x4b8a56={};_0x414c6e<_0x571db0['length'];_0x414c6e+=0x1){_0x40bc8d=_0x571db0[_0x414c6e];if(_[_0x5c9e('0x18')](_0x5762fc['agents'][_0x40bc8d['id']])){_0x5762fc[_0x5c9e('0xb')][_0x40bc8d['id']]=new Agent(_0x40bc8d);}else{_0x5762fc[_0x5c9e('0x16')](_0x5762fc[_0x5c9e('0xb')][_0x40bc8d['id']],_0x40bc8d);}}}return _0x5762fc[_0x5c9e('0xb')];};};Realtime[_0x5c9e('0x15')][_0x5c9e('0x19')]=function(){var _0x56d1fe=this;return function(_0x2e0703){if(_0x2e0703){freeIsNotKey(_0x2e0703,_0x56d1fe[_0x5c9e('0xc')],'id');for(var _0xe4aed0=0x0,_0xbf5915={},_0x3a565f={};_0xe4aed0<_0x2e0703[_0x5c9e('0x1a')];_0xe4aed0+=0x1){_0xbf5915=_0x2e0703[_0xe4aed0];if(_[_0x5c9e('0x18')](_0x56d1fe[_0x5c9e('0xc')][_0xbf5915['id']])){_0x56d1fe[_0x5c9e('0xc')][_0xbf5915['id']]=new Interval(_0xbf5915);}else{_0x56d1fe[_0x5c9e('0x16')](_0x56d1fe[_0x5c9e('0xc')][_0xbf5915['id']],_0xbf5915);}}}return _0x56d1fe[_0x5c9e('0xc')];};};Realtime[_0x5c9e('0x15')][_0x5c9e('0x1b')]=function(){var _0x4aae9b=this;return function(_0xefc8c2){if(_0xefc8c2){freeIsNotKey(_0xefc8c2,_0x4aae9b['openchannelQueues'],'id');for(var _0x37db75=0x0,_0x4d3520={},_0x3d9fec={};_0x37db75<_0xefc8c2[_0x5c9e('0x1a')];_0x37db75+=0x1){_0x4d3520=_0xefc8c2[_0x37db75];if(_[_0x5c9e('0x18')](_0x4aae9b[_0x5c9e('0xd')][_0x4d3520['id']])){_0x4aae9b[_0x5c9e('0xd')][_0x4d3520['id']]=new OpenchannelQueue(_0x4d3520);}else{_0x4aae9b[_0x5c9e('0x16')](_0x4aae9b[_0x5c9e('0xd')][_0x4d3520['id']],_0x4d3520);}_0x4aae9b[_0x5c9e('0xd')][_0x4d3520['id']][_0x5c9e('0x1c')]();_0x4aae9b[_0x5c9e('0xd')][_0x4d3520['id']][_0x5c9e('0x1d')]();}}return _0x4aae9b[_0x5c9e('0xd')];};};Realtime[_0x5c9e('0x15')][_0x5c9e('0x1e')]=function(){var _0x316fa0=this;return function(_0x3635f6){if(_0x3635f6){freeIsNotKey(_0x3635f6,_0x316fa0[_0x5c9e('0x1f')],'id');for(var _0x42456d=0x0,_0x2adeb6={},_0x14561a={};_0x42456d<_0x3635f6[_0x5c9e('0x1a')];_0x42456d+=0x1){_0x2adeb6=_0x3635f6[_0x42456d];if(_['isUndefined'](_0x316fa0[_0x5c9e('0x1f')][_0x2adeb6['id']])){_0x316fa0[_0x5c9e('0x1f')][_0x2adeb6['id']]=new ChatQueue(_0x2adeb6);}else{_0x316fa0[_0x5c9e('0x16')](_0x316fa0['chatQueues'][_0x2adeb6['id']],_0x2adeb6);}_0x316fa0[_0x5c9e('0x1f')][_0x2adeb6['id']][_0x5c9e('0x1c')]();_0x316fa0[_0x5c9e('0x1f')][_0x2adeb6['id']]['updateRealtime']();}}return _0x316fa0[_0x5c9e('0x1f')];};};Realtime['prototype'][_0x5c9e('0x20')]=function(){var _0x1d5131=this;return function(_0x3042f2){if(_0x3042f2){freeIsNotKey(_0x3042f2,_0x1d5131[_0x5c9e('0xe')],'id');for(var _0x158dcf=0x0,_0x552b7d={},_0x41ac35={};_0x158dcf<_0x3042f2['length'];_0x158dcf+=0x1){_0x552b7d=_0x3042f2[_0x158dcf];if(_['isUndefined'](_0x1d5131[_0x5c9e('0xe')][_0x552b7d['id']])){_0x1d5131['smsQueues'][_0x552b7d['id']]=new SmsQueue(_0x552b7d);}else{_0x1d5131[_0x5c9e('0x16')](_0x1d5131[_0x5c9e('0xe')][_0x552b7d['id']],_0x552b7d);}_0x1d5131[_0x5c9e('0xe')][_0x552b7d['id']][_0x5c9e('0x1c')]();_0x1d5131[_0x5c9e('0xe')][_0x552b7d['id']][_0x5c9e('0x1d')]();}}return _0x1d5131[_0x5c9e('0xe')];};};Realtime['prototype'][_0x5c9e('0x21')]=function(){var _0x26ae17=this;return function(_0x5f4182){if(_0x5f4182){freeIsNotKey(_0x5f4182,_0x26ae17[_0x5c9e('0xf')],'id');for(var _0x39b4b8=0x0,_0x59816b={},_0xa0ffac={};_0x39b4b8<_0x5f4182[_0x5c9e('0x1a')];_0x39b4b8+=0x1){_0x59816b=_0x5f4182[_0x39b4b8];if(_[_0x5c9e('0x18')](_0x26ae17['mailQueues'][_0x59816b['id']])){_0x26ae17['mailQueues'][_0x59816b['id']]=new MailQueue(_0x59816b);}else{_0x26ae17[_0x5c9e('0x16')](_0x26ae17[_0x5c9e('0xf')][_0x59816b['id']],_0x59816b);}_0x26ae17[_0x5c9e('0xf')][_0x59816b['id']][_0x5c9e('0x1c')]();_0x26ae17[_0x5c9e('0xf')][_0x59816b['id']][_0x5c9e('0x1d')]();}}return _0x26ae17['mailQueues'];};};Realtime['prototype'][_0x5c9e('0x22')]=function(){var _0x43f54b=this;return function(_0x54eadf){if(_0x54eadf){freeIsNotKey(_0x54eadf,_0x43f54b[_0x5c9e('0x23')],'id');for(var _0x4807fb=0x0,_0x3c569d={},_0x2bc27c={};_0x4807fb<_0x54eadf['length'];_0x4807fb+=0x1){_0x3c569d=_0x54eadf[_0x4807fb];if(_[_0x5c9e('0x18')](_0x43f54b[_0x5c9e('0x23')][_0x3c569d['id']])){_0x43f54b[_0x5c9e('0x23')][_0x3c569d['id']]=new FaxQueue(_0x3c569d);}else{_0x43f54b['mergeFromDatabase'](_0x43f54b[_0x5c9e('0x23')][_0x3c569d['id']],_0x3c569d);}_0x43f54b[_0x5c9e('0x23')][_0x3c569d['id']][_0x5c9e('0x1c')]();_0x43f54b['faxQueues'][_0x3c569d['id']][_0x5c9e('0x1d')]();}}return _0x43f54b['faxQueues'];};};module[_0x5c9e('0x24')]=Realtime;
\ No newline at end of file
index bb878a4..a16c24d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x88a2=['update','UpdateChatInteraction','updateChatInteraction','addTags','AddTagsToChatInteraction','addTagsToChatInteraction'];(function(_0x3e2ff2,_0x5a7bb8){var _0x333b25=function(_0x6478a3){while(--_0x6478a3){_0x3e2ff2['push'](_0x3e2ff2['shift']());}};_0x333b25(++_0x5a7bb8);}(_0x88a2,0xa8));var _0x288a=function(_0x1a573f,_0x5a8df2){_0x1a573f=_0x1a573f-0x0;var _0x6a0a97=_0x88a2[_0x1a573f];return _0x6a0a97;};'use strict';var client=require('../client');exports[_0x288a('0x0')]=function(_0x271cff,_0x466d15){return client['Request'](_0x288a('0x1'),{'body':_0x466d15,'options':{'where':{'id':_0x271cff}},'log':_0x288a('0x2')});};exports[_0x288a('0x3')]=function(_0xbb0aa,_0x776ff9){return client['Request'](_0x288a('0x4'),{'body':_0x776ff9,'options':{'where':{'id':_0xbb0aa}},'log':_0x288a('0x5')});};
\ No newline at end of file
+var _0xe7a6=['addTags','AddTagsToChatInteraction','addTagsToChatInteraction','update','Request','UpdateChatInteraction'];(function(_0x3fb7c1,_0x5eb61b){var _0x3be067=function(_0xace4c3){while(--_0xace4c3){_0x3fb7c1['push'](_0x3fb7c1['shift']());}};_0x3be067(++_0x5eb61b);}(_0xe7a6,0xb1));var _0x6e7a=function(_0x4a9fb1,_0x273043){_0x4a9fb1=_0x4a9fb1-0x0;var _0x348672=_0xe7a6[_0x4a9fb1];return _0x348672;};'use strict';var client=require('../client');exports[_0x6e7a('0x0')]=function(_0x1b2edd,_0x31414a){return client[_0x6e7a('0x1')](_0x6e7a('0x2'),{'body':_0x31414a,'options':{'where':{'id':_0x1b2edd}},'log':'updateChatInteraction'});};exports[_0x6e7a('0x3')]=function(_0x1692b5,_0x137ec3){return client['Request'](_0x6e7a('0x4'),{'body':_0x137ec3,'options':{'where':{'id':_0x1692b5}},'log':_0x6e7a('0x5')});};
\ No newline at end of file
index ecf10d4..9441165 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x38bb=['createChatMessage','../client','Request','CreateChatMessage'];(function(_0x33dadb,_0x16d0cc){var _0x3d4c4d=function(_0x414c03){while(--_0x414c03){_0x33dadb['push'](_0x33dadb['shift']());}};_0x3d4c4d(++_0x16d0cc);}(_0x38bb,0x111));var _0xb38b=function(_0x698db1,_0x39141d){_0x698db1=_0x698db1-0x0;var _0x37c692=_0x38bb[_0x698db1];return _0x37c692;};'use strict';var client=require(_0xb38b('0x0'));exports['create']=function(_0x24377b){return client[_0xb38b('0x1')](_0xb38b('0x2'),{'body':_0x24377b,'log':_0xb38b('0x3')});};
\ No newline at end of file
+var _0xe56f=['createChatMessage','../client','create','Request','CreateChatMessage'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0xe56f,0xd3));var _0xfe56=function(_0x1668e5,_0x26f151){_0x1668e5=_0x1668e5-0x0;var _0x44cf2b=_0xe56f[_0x1668e5];return _0x44cf2b;};'use strict';var client=require(_0xfe56('0x0'));exports[_0xfe56('0x1')]=function(_0x328e67){return client[_0xfe56('0x2')](_0xfe56('0x3'),{'body':_0x328e67,'log':_0xfe56('0x4')});};
\ No newline at end of file
index b4b74ba..dc7b3e0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0578=['Request','name','timeout','strategy','User','Agents','chatPause','getChatQueues'];(function(_0x45e266,_0x11040a){var _0x2f4572=function(_0x2e75db){while(--_0x2e75db){_0x45e266['push'](_0x45e266['shift']());}};_0x2f4572(++_0x11040a);}(_0x0578,0x178));var _0x8057=function(_0x32bb56,_0x57bb12){_0x32bb56=_0x32bb56-0x0;var _0x56c21a=_0x0578[_0x32bb56];return _0x56c21a;};'use strict';var client=require('../client');exports['getChatQueues']=function(){return function(){return client[_0x8057('0x0')]('GetChatQueue',{'options':{'raw':![],'attributes':['id',_0x8057('0x1'),_0x8057('0x2'),_0x8057('0x3')],'include':[{'model':_0x8057('0x4'),'as':_0x8057('0x5'),'attributes':['id',_0x8057('0x1'),'online',_0x8057('0x6')]}]},'log':_0x8057('0x7')});};};
\ No newline at end of file
+var _0x87ee=['chatPause','getChatQueues','Request','GetChatQueue','name','timeout','strategy','Agents'];(function(_0x3f4572,_0x13bb7e){var _0x1e9c48=function(_0x36fbf0){while(--_0x36fbf0){_0x3f4572['push'](_0x3f4572['shift']());}};_0x1e9c48(++_0x13bb7e);}(_0x87ee,0xe9));var _0xe87e=function(_0x13e741,_0x5d3c24){_0x13e741=_0x13e741-0x0;var _0x3f8bb3=_0x87ee[_0x13e741];return _0x3f8bb3;};'use strict';var client=require('../client');exports[_0xe87e('0x0')]=function(){return function(){return client[_0xe87e('0x1')](_0xe87e('0x2'),{'options':{'raw':![],'attributes':['id',_0xe87e('0x3'),_0xe87e('0x4'),_0xe87e('0x5')],'include':[{'model':'User','as':_0xe87e('0x6'),'attributes':['id','name','online',_0xe87e('0x7')]}]},'log':_0xe87e('0x0')});};};
\ No newline at end of file
index cb43f85..3a52b15 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2bbb=['CreateChatQueueReport','update','UpdateChatQueueReport','create','Request'];(function(_0x2c9953,_0x279b5e){var _0x88d503=function(_0x1bfbab){while(--_0x1bfbab){_0x2c9953['push'](_0x2c9953['shift']());}};_0x88d503(++_0x279b5e);}(_0x2bbb,0x85));var _0xb2bb=function(_0x2c8328,_0x57e242){_0x2c8328=_0x2c8328-0x0;var _0x142fb9=_0x2bbb[_0x2c8328];return _0x142fb9;};'use strict';var client=require('../client');exports[_0xb2bb('0x0')]=function(_0x15e5e4){return client[_0xb2bb('0x1')]('CreateChatQueueReport',{'body':_0x15e5e4,'log':_0xb2bb('0x2')});};exports[_0xb2bb('0x3')]=function(_0x14da5e,_0x242b0b){return client[_0xb2bb('0x1')](_0xb2bb('0x4'),{'body':_0x242b0b,'options':{'where':{'uniqueid':_0x14da5e},'order':[['id','DESC']],'limit':0x1},'log':_0xb2bb('0x4')});};
\ No newline at end of file
+var _0x1542=['Request','CreateChatQueueReport','update','UpdateChatQueueReport','DESC','../client','create'];(function(_0x2cfb58,_0x3d9412){var _0xd99951=function(_0x329afa){while(--_0x329afa){_0x2cfb58['push'](_0x2cfb58['shift']());}};_0xd99951(++_0x3d9412);}(_0x1542,0x116));var _0x2154=function(_0x375e7e,_0x280231){_0x375e7e=_0x375e7e-0x0;var _0x265763=_0x1542[_0x375e7e];return _0x265763;};'use strict';var client=require(_0x2154('0x0'));exports[_0x2154('0x1')]=function(_0x24448e){return client[_0x2154('0x2')](_0x2154('0x3'),{'body':_0x24448e,'log':'CreateChatQueueReport'});};exports[_0x2154('0x4')]=function(_0x376a87,_0x13e41b){return client['Request'](_0x2154('0x5'),{'body':_0x13e41b,'options':{'where':{'uniqueid':_0x376a87},'order':[['id',_0x2154('0x6')]],'limit':0x1},'log':'UpdateChatQueueReport'});};
\ No newline at end of file
index 9f63629..102328e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc4e5=['addTagsToFaxInteraction','Request','updateFaxInteraction','addTags'];(function(_0x143cfd,_0x1a336e){var _0x2cb5f5=function(_0x1523fa){while(--_0x1523fa){_0x143cfd['push'](_0x143cfd['shift']());}};_0x2cb5f5(++_0x1a336e);}(_0xc4e5,0x115));var _0x5c4e=function(_0x7ea1fb,_0x2f0b74){_0x7ea1fb=_0x7ea1fb-0x0;var _0x478241=_0xc4e5[_0x7ea1fb];return _0x478241;};'use strict';var client=require('../client');exports['update']=function(_0x34d1a7,_0xe78213){return client[_0x5c4e('0x0')]('UpdateFaxInteraction',{'body':_0xe78213,'options':{'where':{'id':_0x34d1a7}},'log':_0x5c4e('0x1')});};exports[_0x5c4e('0x2')]=function(_0x16e34f,_0x203312){return client[_0x5c4e('0x0')]('AddTagsToFaxInteraction',{'body':_0x203312,'options':{'where':{'id':_0x16e34f}},'log':_0x5c4e('0x3')});};
\ No newline at end of file
+var _0x69e9=['addTagsToFaxInteraction','../client','Request','UpdateFaxInteraction','updateFaxInteraction','addTags','AddTagsToFaxInteraction'];(function(_0xdea41a,_0x552987){var _0x15d0d8=function(_0x1e0d0b){while(--_0x1e0d0b){_0xdea41a['push'](_0xdea41a['shift']());}};_0x15d0d8(++_0x552987);}(_0x69e9,0xda));var _0x969e=function(_0x16340c,_0x39566e){_0x16340c=_0x16340c-0x0;var _0x1d6b15=_0x69e9[_0x16340c];return _0x1d6b15;};'use strict';var client=require(_0x969e('0x0'));exports['update']=function(_0x331124,_0x24978f){return client[_0x969e('0x1')](_0x969e('0x2'),{'body':_0x24978f,'options':{'where':{'id':_0x331124}},'log':_0x969e('0x3')});};exports[_0x969e('0x4')]=function(_0x3e9cf6,_0x1fd6c5){return client[_0x969e('0x1')](_0x969e('0x5'),{'body':_0x1fd6c5,'options':{'where':{'id':_0x3e9cf6}},'log':_0x969e('0x6')});};
\ No newline at end of file
index f143b6e..21d24a0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb75c=['createFaxMessage','../client','create','CreateFaxMessage'];(function(_0x4bacb6,_0x2b299d){var _0x58c029=function(_0x2faaf5){while(--_0x2faaf5){_0x4bacb6['push'](_0x4bacb6['shift']());}};_0x58c029(++_0x2b299d);}(_0xb75c,0x129));var _0xcb75=function(_0x74f18c,_0x527c64){_0x74f18c=_0x74f18c-0x0;var _0x46f476=_0xb75c[_0x74f18c];return _0x46f476;};'use strict';var client=require(_0xcb75('0x0'));exports[_0xcb75('0x1')]=function(_0x2d3403){return client['Request'](_0xcb75('0x2'),{'body':_0x2d3403,'log':_0xcb75('0x3')});};
\ No newline at end of file
+var _0x4fb8=['CreateFaxMessage','create'];(function(_0x2f60be,_0x5817ec){var _0xbd8aee=function(_0x32f563){while(--_0x32f563){_0x2f60be['push'](_0x2f60be['shift']());}};_0xbd8aee(++_0x5817ec);}(_0x4fb8,0x1d5));var _0x84fb=function(_0x141ade,_0x3ef05f){_0x141ade=_0x141ade-0x0;var _0xc25a62=_0x4fb8[_0x141ade];return _0xc25a62;};'use strict';var client=require('../client');exports[_0x84fb('0x0')]=function(_0x5cf6c6){return client['Request'](_0x84fb('0x1'),{'body':_0x5cf6c6,'log':'createFaxMessage'});};
\ No newline at end of file
index a25ecdf..6f757cb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x951f=['online','faxPause','../client','getFaxQueues','Request','GetFaxQueue','name','timeout','User'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x951f,0x173));var _0xf951=function(_0x35885a,_0x42fed7){_0x35885a=_0x35885a-0x0;var _0xe86249=_0x951f[_0x35885a];return _0xe86249;};'use strict';var client=require(_0xf951('0x0'));exports[_0xf951('0x1')]=function(){return function(){return client[_0xf951('0x2')](_0xf951('0x3'),{'options':{'raw':![],'attributes':['id',_0xf951('0x4'),_0xf951('0x5'),'strategy'],'include':[{'model':_0xf951('0x6'),'as':'Agents','attributes':['id','name',_0xf951('0x7'),_0xf951('0x8')]}]},'log':_0xf951('0x1')});};};
\ No newline at end of file
+var _0x2d74=['name','faxPause','getFaxQueues','Request','GetFaxQueue','timeout','strategy','Agents'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x2d74,0xd2));var _0x42d7=function(_0xb1d000,_0x69a907){_0xb1d000=_0xb1d000-0x0;var _0x287b23=_0x2d74[_0xb1d000];return _0x287b23;};'use strict';var client=require('../client');exports[_0x42d7('0x0')]=function(){return function(){return client[_0x42d7('0x1')](_0x42d7('0x2'),{'options':{'raw':![],'attributes':['id','name',_0x42d7('0x3'),_0x42d7('0x4')],'include':[{'model':'User','as':_0x42d7('0x5'),'attributes':['id',_0x42d7('0x6'),'online',_0x42d7('0x7')]}]},'log':'getFaxQueues'});};};
\ No newline at end of file
index 8ceee71..abdd99f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1016=['CreateFaxQueueReport','update','Request','UpdateFaxQueueReport','DESC','../client','create'];(function(_0x340380,_0x4bd2a8){var _0x49ce1c=function(_0x4cb9e2){while(--_0x4cb9e2){_0x340380['push'](_0x340380['shift']());}};_0x49ce1c(++_0x4bd2a8);}(_0x1016,0x124));var _0x6101=function(_0x25fbec,_0x57adad){_0x25fbec=_0x25fbec-0x0;var _0x120ca2=_0x1016[_0x25fbec];return _0x120ca2;};'use strict';var client=require(_0x6101('0x0'));exports[_0x6101('0x1')]=function(_0x406311){return client['Request'](_0x6101('0x2'),{'body':_0x406311,'log':_0x6101('0x2')});};exports[_0x6101('0x3')]=function(_0xba2731,_0x412ff7){return client[_0x6101('0x4')](_0x6101('0x5'),{'body':_0x412ff7,'options':{'where':{'uniqueid':_0xba2731},'order':[['id',_0x6101('0x6')]],'limit':0x1},'log':'UpdateFaxQueueReport'});};
\ No newline at end of file
+var _0xe6cd=['CreateFaxQueueReport','UpdateFaxQueueReport','DESC','../client','create','Request'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xe6cd,0x159));var _0xde6c=function(_0x2b2193,_0x220cf2){_0x2b2193=_0x2b2193-0x0;var _0xd4faf8=_0xe6cd[_0x2b2193];return _0xd4faf8;};'use strict';var client=require(_0xde6c('0x0'));exports[_0xde6c('0x1')]=function(_0x1eef97){return client[_0xde6c('0x2')]('CreateFaxQueueReport',{'body':_0x1eef97,'log':_0xde6c('0x3')});};exports['update']=function(_0x4b7380,_0x140813){return client[_0xde6c('0x2')](_0xde6c('0x4'),{'body':_0x140813,'options':{'where':{'uniqueid':_0x4b7380},'order':[['id',_0xde6c('0x5')]],'limit':0x1},'log':_0xde6c('0x4')});};
\ No newline at end of file
index 0974d49..e819565 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7e7=['getIntervals','../client','Request','name','Intervals','interval'];(function(_0x5d048d,_0x13ddae){var _0x280824=function(_0xf985fd){while(--_0xf985fd){_0x5d048d['push'](_0x5d048d['shift']());}};_0x280824(++_0x13ddae);}(_0xb7e7,0x121));var _0x7b7e=function(_0x5d4607,_0x6b5e7b){_0x5d4607=_0x5d4607-0x0;var _0x5e4a86=_0xb7e7[_0x5d4607];return _0x5e4a86;};'use strict';var client=require(_0x7b7e('0x0'));exports['getIntervals']=function(){return function(){return client[_0x7b7e('0x1')]('GetInterval',{'options':{'raw':![],'where':{'IntervalId':null},'attributes':['id',_0x7b7e('0x2')],'include':[{'model':'Interval','as':_0x7b7e('0x3'),'attributes':['id','name',_0x7b7e('0x4')]}]},'log':_0x7b7e('0x5')});};};
\ No newline at end of file
+var _0x68a5=['../client','Request','GetInterval','Interval','Intervals','name','interval'];(function(_0xec8962,_0x2b4bfd){var _0x3d19ef=function(_0x5d28d9){while(--_0x5d28d9){_0xec8962['push'](_0xec8962['shift']());}};_0x3d19ef(++_0x2b4bfd);}(_0x68a5,0xfc));var _0x568a=function(_0x10d840,_0x5164df){_0x10d840=_0x10d840-0x0;var _0x39f65e=_0x68a5[_0x10d840];return _0x39f65e;};'use strict';var client=require(_0x568a('0x0'));exports['getIntervals']=function(){return function(){return client[_0x568a('0x1')](_0x568a('0x2'),{'options':{'raw':![],'where':{'IntervalId':null},'attributes':['id','name'],'include':[{'model':_0x568a('0x3'),'as':_0x568a('0x4'),'attributes':['id',_0x568a('0x5'),_0x568a('0x6')]}]},'log':'getIntervals'});};};
\ No newline at end of file
index 742cd76..10105c9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6201=['Request','UpdateMailInteraction','addTags','addTagsToChatInteraction','../client','update'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x6201,0xa0));var _0x1620=function(_0x3cad73,_0x2a3d19){_0x3cad73=_0x3cad73-0x0;var _0x391352=_0x6201[_0x3cad73];return _0x391352;};'use strict';var client=require(_0x1620('0x0'));exports[_0x1620('0x1')]=function(_0x21e69c,_0x541f81){return client[_0x1620('0x2')](_0x1620('0x3'),{'body':_0x541f81,'options':{'where':{'id':_0x21e69c}},'log':'updateMailInteraction'});};exports[_0x1620('0x4')]=function(_0x3f8959,_0x12cc91){return client['Request']('AddTagsToMailInteraction',{'body':_0x12cc91,'options':{'where':{'id':_0x3f8959}},'log':_0x1620('0x5')});};
\ No newline at end of file
+var _0xc1b2=['updateMailInteraction','addTags','Request','UpdateMailInteraction'];(function(_0x4059cf,_0x542048){var _0x44729b=function(_0x215a68){while(--_0x215a68){_0x4059cf['push'](_0x4059cf['shift']());}};_0x44729b(++_0x542048);}(_0xc1b2,0x122));var _0x2c1b=function(_0x10b1da,_0x40942b){_0x10b1da=_0x10b1da-0x0;var _0x2bb1c8=_0xc1b2[_0x10b1da];return _0x2bb1c8;};'use strict';var client=require('../client');exports['update']=function(_0x17407a,_0x4bf734){return client[_0x2c1b('0x0')](_0x2c1b('0x1'),{'body':_0x4bf734,'options':{'where':{'id':_0x17407a}},'log':_0x2c1b('0x2')});};exports[_0x2c1b('0x3')]=function(_0x533188,_0x4f0e3f){return client[_0x2c1b('0x0')]('AddTagsToMailInteraction',{'body':_0x4f0e3f,'options':{'where':{'id':_0x533188}},'log':'addTagsToChatInteraction'});};
\ No newline at end of file
index eab048b..ec49681 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xae76=['create','Request','CreateMailMessage','createMailMessage','../client'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0xae76,0xea));var _0x6ae7=function(_0x2b1d7b,_0x1f7aff){_0x2b1d7b=_0x2b1d7b-0x0;var _0x2bca23=_0xae76[_0x2b1d7b];return _0x2bca23;};'use strict';var client=require(_0x6ae7('0x0'));exports[_0x6ae7('0x1')]=function(_0x7174d4){return client[_0x6ae7('0x2')](_0x6ae7('0x3'),{'body':_0x7174d4,'log':_0x6ae7('0x4')});};
\ No newline at end of file
+var _0x87da=['CreateMailMessage','createMailMessage'];(function(_0x5c351c,_0x2046d8){var _0x26f3b3=function(_0x47ac18){while(--_0x47ac18){_0x5c351c['push'](_0x5c351c['shift']());}};_0x26f3b3(++_0x2046d8);}(_0x87da,0x1e8));var _0xa87d=function(_0x44628e,_0x332a77){_0x44628e=_0x44628e-0x0;var _0x54c077=_0x87da[_0x44628e];return _0x54c077;};'use strict';var client=require('../client');exports['create']=function(_0x2014ac){return client['Request'](_0xa87d('0x0'),{'body':_0x2014ac,'log':_0xa87d('0x1')});};
\ No newline at end of file
index 179c6f2..799072c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9cce=['Request','GetMailQueue','name','timeout','strategy','Agents'];(function(_0xbccf,_0x5f3f74){var _0x24c504=function(_0x1442a0){while(--_0x1442a0){_0xbccf['push'](_0xbccf['shift']());}};_0x24c504(++_0x5f3f74);}(_0x9cce,0x1f2));var _0xe9cc=function(_0x145ca3,_0x481b50){_0x145ca3=_0x145ca3-0x0;var _0xac5005=_0x9cce[_0x145ca3];return _0xac5005;};'use strict';var client=require('../client');exports['getMailQueues']=function(){return function(){return client[_0xe9cc('0x0')](_0xe9cc('0x1'),{'options':{'raw':![],'attributes':['id',_0xe9cc('0x2'),_0xe9cc('0x3'),_0xe9cc('0x4')],'include':[{'model':'User','as':_0xe9cc('0x5'),'attributes':['id',_0xe9cc('0x2'),'online','mailPause']}]},'log':'getMailQueues'});};};
\ No newline at end of file
+var _0xbbb5=['strategy','User','Agents','mailPause','../client','getMailQueues','Request','GetMailQueue','name','timeout'];(function(_0x280805,_0x25cf27){var _0x4a4e3f=function(_0x1511a8){while(--_0x1511a8){_0x280805['push'](_0x280805['shift']());}};_0x4a4e3f(++_0x25cf27);}(_0xbbb5,0x1d0));var _0x5bbb=function(_0x310a6b,_0x222061){_0x310a6b=_0x310a6b-0x0;var _0x580771=_0xbbb5[_0x310a6b];return _0x580771;};'use strict';var client=require(_0x5bbb('0x0'));exports[_0x5bbb('0x1')]=function(){return function(){return client[_0x5bbb('0x2')](_0x5bbb('0x3'),{'options':{'raw':![],'attributes':['id',_0x5bbb('0x4'),_0x5bbb('0x5'),_0x5bbb('0x6')],'include':[{'model':_0x5bbb('0x7'),'as':_0x5bbb('0x8'),'attributes':['id',_0x5bbb('0x4'),'online',_0x5bbb('0x9')]}]},'log':_0x5bbb('0x1')});};};
\ No newline at end of file
index cb99e6a..0bfc557 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd28=['UpdateMailQueueReport','DESC','../client','create','Request','CreateMailQueueReport','update'];(function(_0x1353e2,_0x5e020e){var _0x1ad64c=function(_0x2e9740){while(--_0x2e9740){_0x1353e2['push'](_0x1353e2['shift']());}};_0x1ad64c(++_0x5e020e);}(_0xcd28,0xa3));var _0x8cd2=function(_0x48ec6a,_0x59826a){_0x48ec6a=_0x48ec6a-0x0;var _0x33c641=_0xcd28[_0x48ec6a];return _0x33c641;};'use strict';var client=require(_0x8cd2('0x0'));exports[_0x8cd2('0x1')]=function(_0x4821b7){return client[_0x8cd2('0x2')](_0x8cd2('0x3'),{'body':_0x4821b7,'log':_0x8cd2('0x3')});};exports[_0x8cd2('0x4')]=function(_0xbc78da,_0x2c3e9b){return client[_0x8cd2('0x2')](_0x8cd2('0x5'),{'body':_0x2c3e9b,'options':{'where':{'uniqueid':_0xbc78da},'order':[['id',_0x8cd2('0x6')]],'limit':0x1},'log':_0x8cd2('0x5')});};
\ No newline at end of file
+var _0x1a82=['Request','CreateMailQueueReport','update','DESC','UpdateMailQueueReport','../client','create'];(function(_0x4a2e40,_0x1d0644){var _0x23f667=function(_0x5a473d){while(--_0x5a473d){_0x4a2e40['push'](_0x4a2e40['shift']());}};_0x23f667(++_0x1d0644);}(_0x1a82,0x163));var _0x21a8=function(_0x516ffb,_0x5b5b42){_0x516ffb=_0x516ffb-0x0;var _0x319667=_0x1a82[_0x516ffb];return _0x319667;};'use strict';var client=require(_0x21a8('0x0'));exports[_0x21a8('0x1')]=function(_0x132dc9){return client[_0x21a8('0x2')](_0x21a8('0x3'),{'body':_0x132dc9,'log':'CreateMailQueueReport'});};exports[_0x21a8('0x4')]=function(_0x2a455c,_0x34cca5){return client['Request']('UpdateMailQueueReport',{'body':_0x34cca5,'options':{'where':{'uniqueid':_0x2a455c},'order':[['id',_0x21a8('0x5')]],'limit':0x1},'log':_0x21a8('0x6')});};
\ No newline at end of file
index 36704c4..c1095b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a71=['addTagsToChatInteraction','../client','update','Request','UpdateOpenchannelInteraction','updateOpenchannelInteraction'];(function(_0x1cd4b8,_0x440eae){var _0x3e57e1=function(_0x156f4f){while(--_0x156f4f){_0x1cd4b8['push'](_0x1cd4b8['shift']());}};_0x3e57e1(++_0x440eae);}(_0x7a71,0x1e1));var _0x17a7=function(_0x1ce440,_0x896300){_0x1ce440=_0x1ce440-0x0;var _0x2c3b87=_0x7a71[_0x1ce440];return _0x2c3b87;};'use strict';var client=require(_0x17a7('0x0'));exports[_0x17a7('0x1')]=function(_0x257d5e,_0x46cf35){return client[_0x17a7('0x2')](_0x17a7('0x3'),{'body':_0x46cf35,'options':{'where':{'id':_0x257d5e}},'log':_0x17a7('0x4')});};exports['addTags']=function(_0x235155,_0x5ab1e2){return client['Request']('AddTagsToOpenchannelInteraction',{'body':_0x5ab1e2,'options':{'where':{'id':_0x235155}},'log':_0x17a7('0x5')});};
\ No newline at end of file
+var _0xb45e=['AddTagsToOpenchannelInteraction','addTagsToChatInteraction','../client','Request','UpdateOpenchannelInteraction','updateOpenchannelInteraction','addTags'];(function(_0x335793,_0x4e00f6){var _0x415617=function(_0x593ec1){while(--_0x593ec1){_0x335793['push'](_0x335793['shift']());}};_0x415617(++_0x4e00f6);}(_0xb45e,0x1c2));var _0xeb45=function(_0x47554d,_0x36ac72){_0x47554d=_0x47554d-0x0;var _0x4554b1=_0xb45e[_0x47554d];return _0x4554b1;};'use strict';var client=require(_0xeb45('0x0'));exports['update']=function(_0x2eaaa0,_0x1f45ef){return client[_0xeb45('0x1')](_0xeb45('0x2'),{'body':_0x1f45ef,'options':{'where':{'id':_0x2eaaa0}},'log':_0xeb45('0x3')});};exports[_0xeb45('0x4')]=function(_0x487fd5,_0x28c27b){return client['Request'](_0xeb45('0x5'),{'body':_0x28c27b,'options':{'where':{'id':_0x487fd5}},'log':_0xeb45('0x6')});};
\ No newline at end of file
index 92b476a..9f39258 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x153f=['CreateOpenchannelMessage','createOpenchannelMessage','../client','create','Request'];(function(_0x15f3c0,_0x165a64){var _0x1adfe0=function(_0x212cfc){while(--_0x212cfc){_0x15f3c0['push'](_0x15f3c0['shift']());}};_0x1adfe0(++_0x165a64);}(_0x153f,0x15b));var _0xf153=function(_0x33ecfa,_0x204750){_0x33ecfa=_0x33ecfa-0x0;var _0x74698b=_0x153f[_0x33ecfa];return _0x74698b;};'use strict';var client=require(_0xf153('0x0'));exports[_0xf153('0x1')]=function(_0xde7eae){return client[_0xf153('0x2')](_0xf153('0x3'),{'body':_0xde7eae,'log':_0xf153('0x4')});};
\ No newline at end of file
+var _0x91a7=['create','Request','createOpenchannelMessage'];(function(_0x4efde5,_0x5e5107){var _0x451074=function(_0x1d5fba){while(--_0x1d5fba){_0x4efde5['push'](_0x4efde5['shift']());}};_0x451074(++_0x5e5107);}(_0x91a7,0xe7));var _0x791a=function(_0x299274,_0x1f59cc){_0x299274=_0x299274-0x0;var _0x5496f4=_0x91a7[_0x299274];return _0x5496f4;};'use strict';var client=require('../client');exports[_0x791a('0x0')]=function(_0x3d6eab){return client[_0x791a('0x1')]('CreateOpenchannelMessage',{'body':_0x3d6eab,'log':_0x791a('0x2')});};
\ No newline at end of file
index 6bacef4..5f765f5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbde1=['online','openchannelPause','getOpenchannelQueues','../client','Request','name','timeout','strategy','User'];(function(_0x2d9d47,_0x207a23){var _0x5acc76=function(_0x4d704d){while(--_0x4d704d){_0x2d9d47['push'](_0x2d9d47['shift']());}};_0x5acc76(++_0x207a23);}(_0xbde1,0x147));var _0x1bde=function(_0x1c9d5f,_0x5ee458){_0x1c9d5f=_0x1c9d5f-0x0;var _0x2bf1ff=_0xbde1[_0x1c9d5f];return _0x2bf1ff;};'use strict';var client=require(_0x1bde('0x0'));exports['getOpenchannelQueues']=function(){return function(){return client[_0x1bde('0x1')]('GetOpenchannelQueue',{'options':{'raw':![],'attributes':['id',_0x1bde('0x2'),_0x1bde('0x3'),_0x1bde('0x4')],'include':[{'model':_0x1bde('0x5'),'as':'Agents','attributes':['id',_0x1bde('0x2'),_0x1bde('0x6'),_0x1bde('0x7')]}]},'log':_0x1bde('0x8')});};};
\ No newline at end of file
+var _0x1043=['User','Agents','online','openchannelPause','../client','getOpenchannelQueues','Request','GetOpenchannelQueue','name','timeout','strategy'];(function(_0x35ee91,_0xa4f7ce){var _0x372f70=function(_0x14eb7){while(--_0x14eb7){_0x35ee91['push'](_0x35ee91['shift']());}};_0x372f70(++_0xa4f7ce);}(_0x1043,0xf6));var _0x3104=function(_0x592a79,_0x31c5db){_0x592a79=_0x592a79-0x0;var _0x74914b=_0x1043[_0x592a79];return _0x74914b;};'use strict';var client=require(_0x3104('0x0'));exports[_0x3104('0x1')]=function(){return function(){return client[_0x3104('0x2')](_0x3104('0x3'),{'options':{'raw':![],'attributes':['id',_0x3104('0x4'),_0x3104('0x5'),_0x3104('0x6')],'include':[{'model':_0x3104('0x7'),'as':_0x3104('0x8'),'attributes':['id','name',_0x3104('0x9'),_0x3104('0xa')]}]},'log':_0x3104('0x1')});};};
\ No newline at end of file
index 9140989..d040686 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf6eb=['create','Request','CreateOpenchannelQueueReport','update','DESC','UpdateOpenchannelQueueReport','../client'];(function(_0x414584,_0x1a1da6){var _0x50b255=function(_0x3ae5ce){while(--_0x3ae5ce){_0x414584['push'](_0x414584['shift']());}};_0x50b255(++_0x1a1da6);}(_0xf6eb,0x13a));var _0xbf6e=function(_0x277aa4,_0x4bbf41){_0x277aa4=_0x277aa4-0x0;var _0x13410f=_0xf6eb[_0x277aa4];return _0x13410f;};'use strict';var client=require(_0xbf6e('0x0'));exports[_0xbf6e('0x1')]=function(_0xdb85a1){return client[_0xbf6e('0x2')](_0xbf6e('0x3'),{'body':_0xdb85a1,'log':_0xbf6e('0x3')});};exports[_0xbf6e('0x4')]=function(_0x459473,_0x47b3fb){return client[_0xbf6e('0x2')]('UpdateOpenchannelQueueReport',{'body':_0x47b3fb,'options':{'where':{'uniqueid':_0x459473},'order':[['id',_0xbf6e('0x5')]],'limit':0x1},'log':_0xbf6e('0x6')});};
\ No newline at end of file
+var _0x5798=['CreateOpenchannelQueueReport','update','UpdateOpenchannelQueueReport','DESC','create','Request'];(function(_0x5aac32,_0x18d312){var _0x3323b2=function(_0x6ce8d4){while(--_0x6ce8d4){_0x5aac32['push'](_0x5aac32['shift']());}};_0x3323b2(++_0x18d312);}(_0x5798,0x14e));var _0x8579=function(_0x2650e9,_0xb91cc){_0x2650e9=_0x2650e9-0x0;var _0x3511c8=_0x5798[_0x2650e9];return _0x3511c8;};'use strict';var client=require('../client');exports[_0x8579('0x0')]=function(_0xc92b83){return client[_0x8579('0x1')](_0x8579('0x2'),{'body':_0xc92b83,'log':'CreateOpenchannelQueueReport'});};exports[_0x8579('0x3')]=function(_0x366221,_0x39c761){return client['Request'](_0x8579('0x4'),{'body':_0x39c761,'options':{'where':{'uniqueid':_0x366221},'order':[['id',_0x8579('0x5')]],'limit':0x1},'log':_0x8579('0x4')});};
\ No newline at end of file
index 22e2db8..3024922 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2842=['UpdateSmsInteraction','addTags','AddTagsToSmsInteraction','addTagsToSmsInteraction','update','Request'];(function(_0x4bc0bd,_0x5154ec){var _0x12f17=function(_0x50322b){while(--_0x50322b){_0x4bc0bd['push'](_0x4bc0bd['shift']());}};_0x12f17(++_0x5154ec);}(_0x2842,0x1ba));var _0x2284=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0x2842[_0x6131cd];return _0x47e916;};'use strict';var client=require('../client');exports[_0x2284('0x0')]=function(_0x278bdf,_0x1cbf1f){return client[_0x2284('0x1')](_0x2284('0x2'),{'body':_0x1cbf1f,'options':{'where':{'id':_0x278bdf}},'log':'updateSmsInteraction'});};exports[_0x2284('0x3')]=function(_0x1d9820,_0x58583b){return client[_0x2284('0x1')](_0x2284('0x4'),{'body':_0x58583b,'options':{'where':{'id':_0x1d9820}},'log':_0x2284('0x5')});};
\ No newline at end of file
+var _0x1b21=['Request','UpdateSmsInteraction','updateSmsInteraction','addTagsToSmsInteraction','../client'];(function(_0x4ef481,_0x1da5dd){var _0x27f6d9=function(_0x27dad8){while(--_0x27dad8){_0x4ef481['push'](_0x4ef481['shift']());}};_0x27f6d9(++_0x1da5dd);}(_0x1b21,0x14e));var _0x11b2=function(_0x63674b,_0x475654){_0x63674b=_0x63674b-0x0;var _0x48bceb=_0x1b21[_0x63674b];return _0x48bceb;};'use strict';var client=require(_0x11b2('0x0'));exports['update']=function(_0x2e02ca,_0x50d6ad){return client[_0x11b2('0x1')](_0x11b2('0x2'),{'body':_0x50d6ad,'options':{'where':{'id':_0x2e02ca}},'log':_0x11b2('0x3')});};exports['addTags']=function(_0x1188f7,_0x507d17){return client[_0x11b2('0x1')]('AddTagsToSmsInteraction',{'body':_0x507d17,'options':{'where':{'id':_0x1188f7}},'log':_0x11b2('0x4')});};
\ No newline at end of file
index 23ede0b..5b2d9fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xce1b=['createSmsMessage','../client','create'];(function(_0x12b897,_0x1c85f7){var _0x13f99a=function(_0x54e245){while(--_0x54e245){_0x12b897['push'](_0x12b897['shift']());}};_0x13f99a(++_0x1c85f7);}(_0xce1b,0x151));var _0xbce1=function(_0x195212,_0x5cc232){_0x195212=_0x195212-0x0;var _0x58dab3=_0xce1b[_0x195212];return _0x58dab3;};'use strict';var client=require(_0xbce1('0x0'));exports[_0xbce1('0x1')]=function(_0x370a1f){return client['Request']('CreateSmsMessage',{'body':_0x370a1f,'log':_0xbce1('0x2')});};
\ No newline at end of file
+var _0x436b=['CreateSmsMessage','create','Request'];(function(_0x2a9ad6,_0x5e7456){var _0x587275=function(_0x3d353f){while(--_0x3d353f){_0x2a9ad6['push'](_0x2a9ad6['shift']());}};_0x587275(++_0x5e7456);}(_0x436b,0x9a));var _0xb436=function(_0x354dbb,_0x86929e){_0x354dbb=_0x354dbb-0x0;var _0x41d653=_0x436b[_0x354dbb];return _0x41d653;};'use strict';var client=require('../client');exports[_0xb436('0x0')]=function(_0x2c0dba){return client[_0xb436('0x1')](_0xb436('0x2'),{'body':_0x2c0dba,'log':'createSmsMessage'});};
\ No newline at end of file
index fbea37b..1447ceb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcd92=['User','smsPause','getSmsQueues','Request','GetSmsQueue','name','strategy'];(function(_0xaee9b2,_0x4f74cf){var _0x8c26c1=function(_0x252b5a){while(--_0x252b5a){_0xaee9b2['push'](_0xaee9b2['shift']());}};_0x8c26c1(++_0x4f74cf);}(_0xcd92,0x1c2));var _0x2cd9=function(_0x29d915,_0x54a040){_0x29d915=_0x29d915-0x0;var _0x160f86=_0xcd92[_0x29d915];return _0x160f86;};'use strict';var client=require('../client');exports[_0x2cd9('0x0')]=function(){return function(){return client[_0x2cd9('0x1')](_0x2cd9('0x2'),{'options':{'raw':![],'attributes':['id',_0x2cd9('0x3'),'timeout',_0x2cd9('0x4')],'include':[{'model':_0x2cd9('0x5'),'as':'Agents','attributes':['id',_0x2cd9('0x3'),'online',_0x2cd9('0x6')]}]},'log':_0x2cd9('0x0')});};};
\ No newline at end of file
+var _0x9f2d=['GetSmsQueue','name','timeout','strategy','online','smsPause','getSmsQueues','Request'];(function(_0x5f23ae,_0x4e47c9){var _0x4c4fac=function(_0x41165a){while(--_0x41165a){_0x5f23ae['push'](_0x5f23ae['shift']());}};_0x4c4fac(++_0x4e47c9);}(_0x9f2d,0x16e));var _0xd9f2=function(_0x2ea5bf,_0x454c0d){_0x2ea5bf=_0x2ea5bf-0x0;var _0x33c067=_0x9f2d[_0x2ea5bf];return _0x33c067;};'use strict';var client=require('../client');exports[_0xd9f2('0x0')]=function(){return function(){return client[_0xd9f2('0x1')](_0xd9f2('0x2'),{'options':{'raw':![],'attributes':['id',_0xd9f2('0x3'),_0xd9f2('0x4'),_0xd9f2('0x5')],'include':[{'model':'User','as':'Agents','attributes':['id',_0xd9f2('0x3'),_0xd9f2('0x6'),_0xd9f2('0x7')]}]},'log':_0xd9f2('0x0')});};};
\ No newline at end of file
index b5403a4..4480494 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2356=['update','UpdateSmsQueueReport','DESC','../client','create','Request','CreateSmsQueueReport'];(function(_0x138f6f,_0x4391a6){var _0x1e4447=function(_0x444b11){while(--_0x444b11){_0x138f6f['push'](_0x138f6f['shift']());}};_0x1e4447(++_0x4391a6);}(_0x2356,0x73));var _0x6235=function(_0x379a60,_0x206cb4){_0x379a60=_0x379a60-0x0;var _0x4f2f73=_0x2356[_0x379a60];return _0x4f2f73;};'use strict';var client=require(_0x6235('0x0'));exports[_0x6235('0x1')]=function(_0xd96ee7){return client[_0x6235('0x2')](_0x6235('0x3'),{'body':_0xd96ee7,'log':_0x6235('0x3')});};exports[_0x6235('0x4')]=function(_0x1b9da7,_0x1af942){return client[_0x6235('0x2')](_0x6235('0x5'),{'body':_0x1af942,'options':{'where':{'uniqueid':_0x1b9da7},'order':[['id',_0x6235('0x6')]],'limit':0x1},'log':'UpdateSmsQueueReport'});};
\ No newline at end of file
+var _0x4189=['update','UpdateSmsQueueReport','../client','Request','CreateSmsQueueReport'];(function(_0x7791d5,_0xdab65f){var _0x5ce288=function(_0x2b818d){while(--_0x2b818d){_0x7791d5['push'](_0x7791d5['shift']());}};_0x5ce288(++_0xdab65f);}(_0x4189,0x160));var _0x9418=function(_0x417e99,_0x4ac7c7){_0x417e99=_0x417e99-0x0;var _0xe451be=_0x4189[_0x417e99];return _0xe451be;};'use strict';var client=require(_0x9418('0x0'));exports['create']=function(_0x2c1b2e){return client[_0x9418('0x1')](_0x9418('0x2'),{'body':_0x2c1b2e,'log':'CreateSmsQueueReport'});};exports[_0x9418('0x3')]=function(_0x1d2ebb,_0x4b8970){return client[_0x9418('0x1')](_0x9418('0x4'),{'body':_0x4b8970,'options':{'where':{'uniqueid':_0x1d2ebb},'order':[['id','DESC']],'limit':0x1},'log':_0x9418('0x4')});};
\ No newline at end of file
index d893685..af4ebb0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe9da=['smsCapacity','openchannelCapacity','getAgents','Request','GetUser','agent','name','online','pauseType','lastPauseAt','voicePause','smsPause','chatCapacity','mailCapacity','faxCapacity'];(function(_0x170034,_0x4cc988){var _0x5cf6fe=function(_0x385a6d){while(--_0x385a6d){_0x170034['push'](_0x170034['shift']());}};_0x5cf6fe(++_0x4cc988);}(_0xe9da,0x6b));var _0xae9d=function(_0x3130b1,_0x2de24a){_0x3130b1=_0x3130b1-0x0;var _0x45bccf=_0xe9da[_0x3130b1];return _0x45bccf;};'use strict';var client=require('../client');exports[_0xae9d('0x0')]=function(){return function(){return client[_0xae9d('0x1')](_0xae9d('0x2'),{'options':{'raw':!![],'where':{'role':_0xae9d('0x3')},'attributes':['id',_0xae9d('0x4'),_0xae9d('0x5'),_0xae9d('0x6'),_0xae9d('0x7'),_0xae9d('0x8'),'chatPause','mailPause','faxPause',_0xae9d('0x9'),'openchannelPause',_0xae9d('0xa'),_0xae9d('0xb'),_0xae9d('0xc'),_0xae9d('0xd'),_0xae9d('0xe')]},'log':_0xae9d('0x0')});};};
\ No newline at end of file
+var _0x7e5f=['faxCapacity','../client','getAgents','Request','GetUser','name','online','pauseType','lastPauseAt','voicePause','chatPause','mailPause','faxPause','smsPause','mailCapacity'];(function(_0x210c98,_0x47097f){var _0x6a5e1d=function(_0x25d9d7){while(--_0x25d9d7){_0x210c98['push'](_0x210c98['shift']());}};_0x6a5e1d(++_0x47097f);}(_0x7e5f,0x1d2));var _0xf7e5=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7e5f[_0x3dd15e];return _0x231fd0;};'use strict';var client=require(_0xf7e5('0x0'));exports[_0xf7e5('0x1')]=function(){return function(){return client[_0xf7e5('0x2')](_0xf7e5('0x3'),{'options':{'raw':!![],'where':{'role':'agent'},'attributes':['id',_0xf7e5('0x4'),_0xf7e5('0x5'),_0xf7e5('0x6'),_0xf7e5('0x7'),_0xf7e5('0x8'),_0xf7e5('0x9'),_0xf7e5('0xa'),_0xf7e5('0xb'),_0xf7e5('0xc'),'openchannelPause','chatCapacity',_0xf7e5('0xd'),_0xf7e5('0xe'),'smsCapacity','openchannelCapacity']},'log':_0xf7e5('0x1')});};};
\ No newline at end of file
index 65e6ed3..5889247 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa390=['[%s][AGENT]\x20agent\x20not\x20found\x20%s','log','stack','lodash','seq-queue','../../../../config/logger','./strategy','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','[%s][AGENT][NAME:%s][STATUS:%s]','name','toLowerCase','consequence','length','error','[%s][AGENT]\x20%s','map','message','stop','find','agents','timeout','createQueue','atimeout','channel','START:%s','rules','end','close','info','[%s][AGENT]\x20ROUTING\x20STOPPED','[%s][AGENT]\x20ROUTING\x20END','next','agent'];(function(_0x2f80f7,_0x4c764f){var _0x25f166=function(_0x28cd15){while(--_0x28cd15){_0x2f80f7['push'](_0x2f80f7['shift']());}};_0x25f166(++_0x4c764f);}(_0xa390,0x19b));var _0x0a39=function(_0x4835d7,_0x1e28dc){_0x4835d7=_0x4835d7-0x0;var _0x231dcd=_0xa390[_0x4835d7];return _0x231dcd;};'use strict';var schema=require('validate');var _=require(_0x0a39('0x0'));var util=require('util');var seqqueue=require(_0x0a39('0x1'));var logger=require(_0x0a39('0x2'))('routing');var strategy=require(_0x0a39('0x3'));var queue=schema({'name':{'type':_0x0a39('0x4'),'required':!![],'message':_0x0a39('0x5')},'timeout':{'type':'number','message':'timeout\x20is\x20a\x20number'}});function writeLog(_0x584f42,_0xc83e50,_0xd0627){return logger['info'](util['format'](_0x0a39('0x6'),_0x584f42,_0xc83e50[_0x0a39('0x7')],_0xd0627));}function handleFindAgent(_0x3b5091){return function(_0x3cebb1){return _0x3cebb1[_0x0a39('0x7')][_0x0a39('0x8')]()===_0x3b5091['toLowerCase']();};}exports[_0x0a39('0x9')]=function(_0x4f076e,_0x241c6c,_0x1b982d,_0x491dcf){return function(_0x36e5f4){try{var _0x365c7e={'name':_0x241c6c[0x0],'timeout':_0x241c6c[0x1]};var _0x2e219d=queue['validate'](_0x365c7e,{'typecast':!![]});if(_0x2e219d[_0x0a39('0xa')]){logger[_0x0a39('0xb')](_0x0a39('0xc'),_0x4f076e,_[_0x0a39('0xd')](_0x2e219d,_0x0a39('0xe'))['join'](',\x20'));_0x36e5f4[_0x0a39('0xf')]();}else{var _0x2a7d12=_[_0x0a39('0x10')](_0x1b982d[_0x0a39('0x11')],handleFindAgent(_0x365c7e[_0x0a39('0x7')]));if(_0x2a7d12){var _0x5d77e9=(_0x365c7e[_0x0a39('0x12')]||0xa)*0x3e8;var _0x1876e1,_0x253a52;var _0x2e961e=seqqueue[_0x0a39('0x13')](_0x5d77e9);_0x2e961e['id']=_0x4f076e;_0x2e961e[_0x0a39('0x14')]=_0x5d77e9;_0x2e961e[_0x0a39('0x15')]=_0x491dcf[_0x0a39('0x15')];writeLog(_0x4f076e,_0x2a7d12,util['format'](_0x0a39('0x16'),_0x5d77e9));_0x1b982d[_0x0a39('0x17')][_0x4f076e]['on'](_0x0a39('0x18'),function(){_0x2e961e[_0x0a39('0x19')]();clearTimeout(_0x253a52);_0x253a52=undefined;if(_0x1b982d[_0x0a39('0x17')][_0x4f076e]){delete _0x1b982d[_0x0a39('0x17')][_0x4f076e];}logger[_0x0a39('0x1a')](_0x0a39('0x1b'),_0x4f076e);_0x36e5f4[_0x0a39('0xf')]();});_0x253a52=setTimeout(function(){clearTimeout(_0x253a52);_0x2e961e['close']();logger[_0x0a39('0x1a')](_0x0a39('0x1c'),_0x4f076e);_0x36e5f4[_0x0a39('0x1d')]();},_0x5d77e9);strategy[_0x0a39('0x1e')](_0x2e961e,_0x2a7d12,_0x1b982d,_0x491dcf);}else{logger[_0x0a39('0xb')](_0x0a39('0x1f'),_0x4f076e,_0x365c7e['name']);_0x36e5f4[_0x0a39('0xf')]();}}}catch(_0x4c1cc6){console[_0x0a39('0x20')](_0x4c1cc6);logger[_0x0a39('0xb')]('[%s][QUEUE]\x20%s',_0x4f076e,_0x4c1cc6[_0x0a39('0x21')]);_0x36e5f4[_0x0a39('0xf')]();}};};
\ No newline at end of file
+var _0x5a39=['find','agents','timeout','atimeout','channel','format','START:%s','end','close','rules','[%s][AGENT]\x20ROUTING\x20STOPPED','stop','[%s][AGENT]\x20ROUTING\x20END','next','agent','error','[%s][AGENT]\x20agent\x20not\x20found\x20%s','[%s][QUEUE]\x20%s','stack','lodash','util','seq-queue','routing','./strategy','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','info','[%s][AGENT][NAME:%s][STATUS:%s]','name','toLowerCase','consequence','validate','length','[%s][AGENT]\x20%s','map'];(function(_0x24062d,_0x289d6c){var _0x3d68a2=function(_0x2dd148){while(--_0x2dd148){_0x24062d['push'](_0x24062d['shift']());}};_0x3d68a2(++_0x289d6c);}(_0x5a39,0x1b7));var _0x95a3=function(_0x386f4e,_0x5333de){_0x386f4e=_0x386f4e-0x0;var _0x41cc35=_0x5a39[_0x386f4e];return _0x41cc35;};'use strict';var schema=require('validate');var _=require(_0x95a3('0x0'));var util=require(_0x95a3('0x1'));var seqqueue=require(_0x95a3('0x2'));var logger=require('../../../../config/logger')(_0x95a3('0x3'));var strategy=require(_0x95a3('0x4'));var queue=schema({'name':{'type':_0x95a3('0x5'),'required':!![],'message':_0x95a3('0x6')},'timeout':{'type':'number','message':'timeout\x20is\x20a\x20number'}});function writeLog(_0x5d6f42,_0x52596d,_0x5f4329){return logger[_0x95a3('0x7')](util['format'](_0x95a3('0x8'),_0x5d6f42,_0x52596d[_0x95a3('0x9')],_0x5f4329));}function handleFindAgent(_0x15354c){return function(_0x218805){return _0x218805[_0x95a3('0x9')][_0x95a3('0xa')]()===_0x15354c[_0x95a3('0xa')]();};}exports[_0x95a3('0xb')]=function(_0x4f142a,_0x1a722c,_0x3a733f,_0x15bd61){return function(_0xc58e45){try{var _0x516197={'name':_0x1a722c[0x0],'timeout':_0x1a722c[0x1]};var _0x47fa74=queue[_0x95a3('0xc')](_0x516197,{'typecast':!![]});if(_0x47fa74[_0x95a3('0xd')]){logger['error'](_0x95a3('0xe'),_0x4f142a,_[_0x95a3('0xf')](_0x47fa74,'message')['join'](',\x20'));_0xc58e45['stop']();}else{var _0x3f25a0=_[_0x95a3('0x10')](_0x3a733f[_0x95a3('0x11')],handleFindAgent(_0x516197['name']));if(_0x3f25a0){var _0x1771db=(_0x516197[_0x95a3('0x12')]||0xa)*0x3e8;var _0x33626f,_0x167835;var _0x178607=seqqueue['createQueue'](_0x1771db);_0x178607['id']=_0x4f142a;_0x178607[_0x95a3('0x13')]=_0x1771db;_0x178607[_0x95a3('0x14')]=_0x15bd61['channel'];writeLog(_0x4f142a,_0x3f25a0,util[_0x95a3('0x15')](_0x95a3('0x16'),_0x1771db));_0x3a733f['rules'][_0x4f142a]['on'](_0x95a3('0x17'),function(){_0x178607[_0x95a3('0x18')]();clearTimeout(_0x167835);_0x167835=undefined;if(_0x3a733f[_0x95a3('0x19')][_0x4f142a]){delete _0x3a733f[_0x95a3('0x19')][_0x4f142a];}logger[_0x95a3('0x7')](_0x95a3('0x1a'),_0x4f142a);_0xc58e45[_0x95a3('0x1b')]();});_0x167835=setTimeout(function(){clearTimeout(_0x167835);_0x178607[_0x95a3('0x18')]();logger[_0x95a3('0x7')](_0x95a3('0x1c'),_0x4f142a);_0xc58e45[_0x95a3('0x1d')]();},_0x1771db);strategy[_0x95a3('0x1e')](_0x178607,_0x3f25a0,_0x3a733f,_0x15bd61);}else{logger[_0x95a3('0x1f')](_0x95a3('0x20'),_0x4f142a,_0x516197['name']);_0xc58e45[_0x95a3('0x1b')]();}}}catch(_0x11c829){console['log'](_0x11c829);logger['error'](_0x95a3('0x21'),_0x4f142a,_0x11c829[_0x95a3('0x22')]);_0xc58e45[_0x95a3('0x1b')]();}};};
\ No newline at end of file
index 43cdd65..ba282bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa2a9=['body','catch','error','stringify','[%s][AMAZONLEX]\x20Welcome\x20Message\x20has\x20been\x20sent!','stop','[%s][AMAZONLEX]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!','LexRuntime','$LATEST','toString','postText','message','amazonlex','Message','create','dialogState','moment','aws-sdk','./utils','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','consequence','isNil','UserId','info','Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.','next','format','YYYY-MM-DD\x20HH:mm:ss','out','channel','chat','ChatWebsiteId','account','upperFirst','AccountId','InteractionId','interaction','created','isEmpty','getMustacheRender','then','[%s][AMAZONLEX]\x20%s'];(function(_0x27fd00,_0x1b3078){var _0x29b9fc=function(_0xc96637){while(--_0xc96637){_0x27fd00['push'](_0x27fd00['shift']());}};_0x29b9fc(++_0x1b3078);}(_0xa2a9,0x6e));var _0x9a2a=function(_0x3389e5,_0x58f15e){_0x3389e5=_0x3389e5-0x0;var _0x13142d=_0xa2a9[_0x3389e5];return _0x13142d;};'use strict';var _=require('lodash');var moment=require(_0x9a2a('0x0'));var AWS=require(_0x9a2a('0x1'));var utils=require(_0x9a2a('0x2'));var logger=require(_0x9a2a('0x3'))(_0x9a2a('0x4'));var rpc={'chatMessage':require(_0x9a2a('0x5')),'openchannelMessage':require(_0x9a2a('0x6')),'mailMessage':require(_0x9a2a('0x7')),'smsMessage':require(_0x9a2a('0x8')),'faxMessage':require('../../rpc/faxMessage')};exports[_0x9a2a('0x9')]=function(_0x5ed846,_0x665988){return function(_0x503b77){try{if(!_[_0x9a2a('0xa')](this['interaction'][_0x9a2a('0xb')])){logger[_0x9a2a('0xc')]('[%s][AMAZONLEX]\x20%s',_0x5ed846,_0x9a2a('0xd'));return _0x503b77[_0x9a2a('0xe')]();}var _0x3c166e={'ContactId':this['contact']['id'],'sentAt':moment()[_0x9a2a('0xf')](_0x9a2a('0x10')),'direction':_0x9a2a('0x11')};var _0x523b6a=this[_0x9a2a('0x12')];if(_0x523b6a===_0x9a2a('0x13')){_0x3c166e[_0x9a2a('0x14')]=this[_0x9a2a('0x15')]['id'];}else{_0x3c166e[_[_0x9a2a('0x16')](_0x523b6a)+_0x9a2a('0x17')]=this[_0x9a2a('0x15')]['id'];}_0x3c166e[_[_0x9a2a('0x16')](_0x523b6a)+_0x9a2a('0x18')]=this[_0x9a2a('0x19')]['id'];if(this[_0x9a2a('0x19')][_0x9a2a('0x1a')]){var _0x19d27f=_0x665988[0x4];if(!_[_0x9a2a('0x1b')](_0x19d27f)){_0x3c166e['body']=utils[_0x9a2a('0x1c')](_0x19d27f,this);return rpc[_0x523b6a+'Message']['create'](_0x3c166e)[_0x9a2a('0x1d')](function(_0x312087){logger[_0x9a2a('0xc')](_0x9a2a('0x1e'),_0x5ed846,_0x3c166e[_0x9a2a('0x1f')]);})[_0x9a2a('0x20')](function(_0x572a6e){logger[_0x9a2a('0x21')]('[%s][AMAZONLEX]\x20%s',_0x5ed846,JSON[_0x9a2a('0x22')](_0x572a6e));})['finally'](function(){logger[_0x9a2a('0xc')](_0x9a2a('0x23'),_0x5ed846);_0x503b77[_0x9a2a('0x24')]();});}else{logger[_0x9a2a('0xc')](_0x9a2a('0x25'),_0x5ed846);_0x503b77[_0x9a2a('0x24')]();}}else{var _0x1bc59d=this;var _0x22c1f7=new AWS[(_0x9a2a('0x26'))]({'accessKeyId':_0x665988[0x0],'secretAccessKey':_0x665988[0x1],'region':_0x665988[0x2]});var _0x3419a3={'botAlias':_0x9a2a('0x27'),'botName':_0x665988[0x3],'inputText':this['message'][_0x9a2a('0x1f')],'userId':this[_0x9a2a('0x19')]['id'][_0x9a2a('0x28')]()};_0x22c1f7[_0x9a2a('0x29')](_0x3419a3,function(_0x17210e,_0x3c9b1f){if(_0x17210e){logger[_0x9a2a('0x21')]('[%s][AMAZONLEX]\x20%s',_0x5ed846,_0x17210e[_0x9a2a('0x2a')]);_0x503b77[_0x9a2a('0xe')]();}else if(_0x3c9b1f&&_0x3c9b1f[_0x9a2a('0x2a')]){_0x1bc59d[_0x9a2a('0x1f')][_0x9a2a('0x2b')]=_0x3c9b1f;_0x3c166e['body']=_0x3c9b1f[_0x9a2a('0x2a')];return rpc[_0x523b6a+_0x9a2a('0x2c')][_0x9a2a('0x2d')](_0x3c166e)['then'](function(_0xa1df63){logger[_0x9a2a('0xc')](_0x9a2a('0x1e'),_0x5ed846,_0x3c166e[_0x9a2a('0x1f')]);if(_0x3c9b1f[_0x9a2a('0x2e')]=='Failed'){_0x503b77['next']();}else{_0x503b77['stop']();}})[_0x9a2a('0x20')](function(_0x4f8729){logger[_0x9a2a('0x21')](_0x9a2a('0x1e'),_0x5ed846,JSON[_0x9a2a('0x22')](_0x4f8729));_0x503b77[_0x9a2a('0xe')]();});}else{_0x503b77[_0x9a2a('0xe')]();}});}}catch(_0x29bd71){logger[_0x9a2a('0x21')](_0x9a2a('0x1e'),_0x5ed846,JSON[_0x9a2a('0x22')](_0x29bd71));_0x503b77[_0x9a2a('0x24')]();}};};
\ No newline at end of file
+var _0xbdb5=['next','contact','YYYY-MM-DD\x20HH:mm:ss','out','channel','chat','ChatWebsiteId','account','AccountId','InteractionId','isEmpty','Message','then','info','catch','error','stringify','finally','[%s][AMAZONLEX]\x20Welcome\x20Message\x20has\x20been\x20sent!','stop','LexRuntime','$LATEST','message','body','toString','postText','amazonlex','create','dialogState','Failed','lodash','moment','aws-sdk','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','consequence','isNil','interaction','UserId','[%s][AMAZONLEX]\x20%s','Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.'];(function(_0x1d4687,_0x49a2cb){var _0x5c9da8=function(_0x20687b){while(--_0x20687b){_0x1d4687['push'](_0x1d4687['shift']());}};_0x5c9da8(++_0x49a2cb);}(_0xbdb5,0x7a));var _0x5bdb=function(_0x4d6e54,_0x4a3860){_0x4d6e54=_0x4d6e54-0x0;var _0x2ed1fa=_0xbdb5[_0x4d6e54];return _0x2ed1fa;};'use strict';var _=require(_0x5bdb('0x0'));var moment=require(_0x5bdb('0x1'));var AWS=require(_0x5bdb('0x2'));var utils=require('./utils');var logger=require(_0x5bdb('0x3'))(_0x5bdb('0x4'));var rpc={'chatMessage':require(_0x5bdb('0x5')),'openchannelMessage':require(_0x5bdb('0x6')),'mailMessage':require(_0x5bdb('0x7')),'smsMessage':require(_0x5bdb('0x8')),'faxMessage':require(_0x5bdb('0x9'))};exports[_0x5bdb('0xa')]=function(_0x5f3914,_0x4be4ea){return function(_0x20d258){try{if(!_[_0x5bdb('0xb')](this[_0x5bdb('0xc')][_0x5bdb('0xd')])){logger['info'](_0x5bdb('0xe'),_0x5f3914,_0x5bdb('0xf'));return _0x20d258[_0x5bdb('0x10')]();}var _0x4ad561={'ContactId':this[_0x5bdb('0x11')]['id'],'sentAt':moment()['format'](_0x5bdb('0x12')),'direction':_0x5bdb('0x13')};var _0x3ece2d=this[_0x5bdb('0x14')];if(_0x3ece2d===_0x5bdb('0x15')){_0x4ad561[_0x5bdb('0x16')]=this[_0x5bdb('0x17')]['id'];}else{_0x4ad561[_['upperFirst'](_0x3ece2d)+_0x5bdb('0x18')]=this[_0x5bdb('0x17')]['id'];}_0x4ad561[_['upperFirst'](_0x3ece2d)+_0x5bdb('0x19')]=this[_0x5bdb('0xc')]['id'];if(this[_0x5bdb('0xc')]['created']){var _0x2893b1=_0x4be4ea[0x4];if(!_[_0x5bdb('0x1a')](_0x2893b1)){_0x4ad561['body']=utils['getMustacheRender'](_0x2893b1,this);return rpc[_0x3ece2d+_0x5bdb('0x1b')]['create'](_0x4ad561)[_0x5bdb('0x1c')](function(_0x7349d){logger[_0x5bdb('0x1d')](_0x5bdb('0xe'),_0x5f3914,_0x4ad561['body']);})[_0x5bdb('0x1e')](function(_0x4e265f){logger[_0x5bdb('0x1f')](_0x5bdb('0xe'),_0x5f3914,JSON[_0x5bdb('0x20')](_0x4e265f));})[_0x5bdb('0x21')](function(){logger[_0x5bdb('0x1d')](_0x5bdb('0x22'),_0x5f3914);_0x20d258[_0x5bdb('0x23')]();});}else{logger['info']('[%s][AMAZONLEX]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!',_0x5f3914);_0x20d258[_0x5bdb('0x23')]();}}else{var _0x1e1ab5=this;var _0x3e2f63=new AWS[(_0x5bdb('0x24'))]({'accessKeyId':_0x4be4ea[0x0],'secretAccessKey':_0x4be4ea[0x1],'region':_0x4be4ea[0x2]});var _0xb14ea9={'botAlias':_0x5bdb('0x25'),'botName':_0x4be4ea[0x3],'inputText':this[_0x5bdb('0x26')][_0x5bdb('0x27')],'userId':this['interaction']['id'][_0x5bdb('0x28')]()};_0x3e2f63[_0x5bdb('0x29')](_0xb14ea9,function(_0xf36882,_0x554a71){if(_0xf36882){logger[_0x5bdb('0x1f')](_0x5bdb('0xe'),_0x5f3914,_0xf36882[_0x5bdb('0x26')]);_0x20d258['next']();}else if(_0x554a71&&_0x554a71[_0x5bdb('0x26')]){_0x1e1ab5[_0x5bdb('0x27')][_0x5bdb('0x2a')]=_0x554a71;_0x4ad561['body']=_0x554a71[_0x5bdb('0x26')];return rpc[_0x3ece2d+_0x5bdb('0x1b')][_0x5bdb('0x2b')](_0x4ad561)['then'](function(_0x161f12){logger[_0x5bdb('0x1d')]('[%s][AMAZONLEX]\x20%s',_0x5f3914,_0x4ad561[_0x5bdb('0x27')]);if(_0x554a71[_0x5bdb('0x2c')]==_0x5bdb('0x2d')){_0x20d258[_0x5bdb('0x10')]();}else{_0x20d258[_0x5bdb('0x23')]();}})[_0x5bdb('0x1e')](function(_0x4878ed){logger['error'](_0x5bdb('0xe'),_0x5f3914,JSON[_0x5bdb('0x20')](_0x4878ed));_0x20d258[_0x5bdb('0x10')]();});}else{_0x20d258[_0x5bdb('0x10')]();}});}}catch(_0x3404de){logger[_0x5bdb('0x1f')]('[%s][AMAZONLEX]\x20%s',_0x5f3914,JSON[_0x5bdb('0x20')](_0x3404de));_0x20d258['stop']();}};};
\ No newline at end of file
index a09aa07..ba63b4c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xedd9=['catch','error','[RPC][%s][AUTOREPLY]\x20%s','finally','next','create','[%s][AUTOREPLY]\x20%s','stop','moment','./utils','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../mailRpc','consequence','isNil','created','interaction','info','Autoreply\x20already\x20sent','channel','getMustacheRender','contact','YYYY-MM-DD\x20HH:mm:ss','out','message','from','phone','read','subject','startsWith','Re:','Re:\x20','ChatWebsiteId','upperFirst','InteractionId','Message','account','Smtp','service','host','port','secure','authentication','user','pass','inReplyTo','messageId','<div\x20id=\x22xm-mail-content\x22>','replace','body','<div\x20id=\x22xm-mail-content\x22','<div','</div>','sendMailMessage','then','[%s][AUTOREPLY]\x20SMTP\x20SENT','stringify'];(function(_0x7558f2,_0x518280){var _0x21ad54=function(_0x5cbf4c){while(--_0x5cbf4c){_0x7558f2['push'](_0x7558f2['shift']());}};_0x21ad54(++_0x518280);}(_0xedd9,0xfc));var _0x9edd=function(_0x6fb0e2,_0x262fef){_0x6fb0e2=_0x6fb0e2-0x0;var _0x493d40=_0xedd9[_0x6fb0e2];return _0x493d40;};'use strict';var _=require('lodash');var moment=require(_0x9edd('0x0'));var utils=require(_0x9edd('0x1'));var logger=require(_0x9edd('0x2'))(_0x9edd('0x3'));var rpc={'chatMessage':require(_0x9edd('0x4')),'openchannelMessage':require(_0x9edd('0x5')),'mailMessage':require(_0x9edd('0x6')),'smsMessage':require(_0x9edd('0x7')),'faxMessage':require('../../rpc/faxMessage')};var mailRpc=require(_0x9edd('0x8'));exports[_0x9edd('0x9')]=function(_0x268f9e,_0x34c1a7){return function(_0x5319f7){try{if(_0x34c1a7[0x0]==='1'&&(_[_0x9edd('0xa')](this['interaction'][_0x9edd('0xb')])||!this[_0x9edd('0xc')][_0x9edd('0xb')])){logger[_0x9edd('0xd')]('[%s][AUTOREPLY]\x20%s',_0x268f9e,_0x9edd('0xe'));return _0x5319f7['next']();}var _0x2076fc=this[_0x9edd('0xf')];var _0x523026={'body':utils[_0x9edd('0x10')](_0x34c1a7[0x1],this),'ContactId':this[_0x9edd('0x11')]['id'],'sentAt':moment()['format'](_0x9edd('0x12')),'direction':_0x9edd('0x13')};if(this[_0x9edd('0x14')]){_0x523026['to']=this[_0x9edd('0x14')][_0x9edd('0x15')]||'';_0x523026['cc']=this[_0x9edd('0x14')]['cc']||'';_0x523026[_0x9edd('0x15')]=this[_0x9edd('0x14')]['to']||'';_0x523026['phone']=this[_0x9edd('0x14')][_0x9edd('0x16')]||'';_0x523026[_0x9edd('0x17')]=!![];if(this[_0x9edd('0x14')][_0x9edd('0x18')]){_0x523026[_0x9edd('0x18')]='';_0x523026[_0x9edd('0x18')]+=_[_0x9edd('0x19')](this['message'][_0x9edd('0x18')],_0x9edd('0x1a'))?'':_0x9edd('0x1b');_0x523026['subject']+=this[_0x9edd('0x14')][_0x9edd('0x18')];}}if(this[_0x9edd('0xf')]==='chat'){_0x523026[_0x9edd('0x1c')]=this['account']['id'];}else{_0x523026[_[_0x9edd('0x1d')](this[_0x9edd('0xf')])+'AccountId']=this['account']['id'];}_0x523026[_[_0x9edd('0x1d')](this['channel'])+_0x9edd('0x1e')]=this['interaction']['id'];if(rpc[this['channel']+_0x9edd('0x1f')]){if(this[_0x9edd('0xf')]==='mail'){var _0x5823bc={'tls':{'rejectUnauthorized':![]}};if(this[_0x9edd('0x20')][_0x9edd('0x21')][_0x9edd('0x22')]){_0x5823bc['service']=this[_0x9edd('0x20')][_0x9edd('0x21')][_0x9edd('0x22')];}else{_0x5823bc[_0x9edd('0x23')]=this[_0x9edd('0x20')]['Smtp'][_0x9edd('0x23')];_0x5823bc[_0x9edd('0x24')]=this[_0x9edd('0x20')][_0x9edd('0x21')][_0x9edd('0x24')];_0x5823bc['secure']=this['account'][_0x9edd('0x21')][_0x9edd('0x25')];}if(this[_0x9edd('0x20')][_0x9edd('0x21')][_0x9edd('0x26')]){_0x5823bc['auth']={'user':this['account'][_0x9edd('0x21')][_0x9edd('0x27')],'pass':this[_0x9edd('0x20')]['Smtp'][_0x9edd('0x28')]};}_0x523026[_0x9edd('0x29')]=this[_0x9edd('0x14')][_0x9edd('0x2a')];_0x523026['html']=_0x9edd('0x2b')+_[_0x9edd('0x2c')](_0x523026[_0x9edd('0x2d')],_0x9edd('0x2e'),_0x9edd('0x2f'))+_0x9edd('0x30');return mailRpc[_0x9edd('0x31')](_0x5823bc,_0x523026)[_0x9edd('0x32')](function(_0x19b6c1){logger[_0x9edd('0xd')](_0x9edd('0x33'),_0x268f9e);_0x523026[_0x9edd('0x2a')]=_0x19b6c1[_0x9edd('0x14')][_0x9edd('0x2a')];return rpc[_0x2076fc+_0x9edd('0x1f')]['create'](_0x523026);})[_0x9edd('0x32')](function(_0x259259){logger[_0x9edd('0xd')]('[%s][AUTOREPLY]\x20%s',_0x268f9e,JSON[_0x9edd('0x34')](_0x259259));})[_0x9edd('0x35')](function(_0xde9b13){logger[_0x9edd('0x36')](_0x9edd('0x37'),_0x268f9e,JSON[_0x9edd('0x34')](_0xde9b13));})[_0x9edd('0x38')](function(){_0x5319f7[_0x9edd('0x39')]();});}else{return rpc[this[_0x9edd('0xf')]+_0x9edd('0x1f')][_0x9edd('0x3a')](_0x523026)[_0x9edd('0x32')](function(_0x27eb7e){logger[_0x9edd('0xd')]('[%s][AUTOREPLY]\x20%s',_0x268f9e,_0x523026[_0x9edd('0x2d')]);})['catch'](function(_0x968303){logger[_0x9edd('0x36')](_0x9edd('0x3b'),_0x268f9e,JSON[_0x9edd('0x34')](_0x968303));})[_0x9edd('0x38')](function(){_0x5319f7['next']();});}}}catch(_0x6de835){logger[_0x9edd('0x36')](_0x9edd('0x3b'),_0x268f9e,JSON[_0x9edd('0x34')](_0x6de835));_0x5319f7[_0x9edd('0x3c')]();}};};
\ No newline at end of file
+var _0x70e0=['from','phone','subject','startsWith','Re:','chat','ChatWebsiteId','upperFirst','AccountId','account','Message','Smtp','service','host','port','secure','authentication','user','pass','inReplyTo','html','<div\x20id=\x22xm-mail-content\x22>','replace','<div','</div>','sendMailMessage','[%s][AUTOREPLY]\x20SMTP\x20SENT','messageId','then','error','finally','next','create','body','catch','stringify','stop','lodash','moment','./utils','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../mailRpc','interaction','created','info','[%s][AUTOREPLY]\x20%s','Autoreply\x20already\x20sent','channel','getMustacheRender','contact','format','YYYY-MM-DD\x20HH:mm:ss','out','message'];(function(_0x31bed3,_0xa5372a){var _0x4b1235=function(_0x33bab3){while(--_0x33bab3){_0x31bed3['push'](_0x31bed3['shift']());}};_0x4b1235(++_0xa5372a);}(_0x70e0,0x17b));var _0x070e=function(_0x10818f,_0xb83e84){_0x10818f=_0x10818f-0x0;var _0x156bf4=_0x70e0[_0x10818f];return _0x156bf4;};'use strict';var _=require(_0x070e('0x0'));var moment=require(_0x070e('0x1'));var utils=require(_0x070e('0x2'));var logger=require('../../../../config/logger')('routing');var rpc={'chatMessage':require(_0x070e('0x3')),'openchannelMessage':require(_0x070e('0x4')),'mailMessage':require(_0x070e('0x5')),'smsMessage':require(_0x070e('0x6')),'faxMessage':require('../../rpc/faxMessage')};var mailRpc=require(_0x070e('0x7'));exports['consequence']=function(_0x46fe68,_0x4b041d){return function(_0x56e420){try{if(_0x4b041d[0x0]==='1'&&(_['isNil'](this[_0x070e('0x8')][_0x070e('0x9')])||!this[_0x070e('0x8')][_0x070e('0x9')])){logger[_0x070e('0xa')](_0x070e('0xb'),_0x46fe68,_0x070e('0xc'));return _0x56e420['next']();}var _0x49b2fb=this[_0x070e('0xd')];var _0x2e3e5e={'body':utils[_0x070e('0xe')](_0x4b041d[0x1],this),'ContactId':this[_0x070e('0xf')]['id'],'sentAt':moment()[_0x070e('0x10')](_0x070e('0x11')),'direction':_0x070e('0x12')};if(this[_0x070e('0x13')]){_0x2e3e5e['to']=this[_0x070e('0x13')][_0x070e('0x14')]||'';_0x2e3e5e['cc']=this[_0x070e('0x13')]['cc']||'';_0x2e3e5e['from']=this['message']['to']||'';_0x2e3e5e[_0x070e('0x15')]=this['message']['phone']||'';_0x2e3e5e['read']=!![];if(this[_0x070e('0x13')][_0x070e('0x16')]){_0x2e3e5e['subject']='';_0x2e3e5e['subject']+=_[_0x070e('0x17')](this[_0x070e('0x13')][_0x070e('0x16')],_0x070e('0x18'))?'':'Re:\x20';_0x2e3e5e['subject']+=this[_0x070e('0x13')][_0x070e('0x16')];}}if(this[_0x070e('0xd')]===_0x070e('0x19')){_0x2e3e5e[_0x070e('0x1a')]=this['account']['id'];}else{_0x2e3e5e[_[_0x070e('0x1b')](this[_0x070e('0xd')])+_0x070e('0x1c')]=this[_0x070e('0x1d')]['id'];}_0x2e3e5e[_[_0x070e('0x1b')](this['channel'])+'InteractionId']=this['interaction']['id'];if(rpc[this[_0x070e('0xd')]+_0x070e('0x1e')]){if(this[_0x070e('0xd')]==='mail'){var _0x5b184={'tls':{'rejectUnauthorized':![]}};if(this['account'][_0x070e('0x1f')][_0x070e('0x20')]){_0x5b184[_0x070e('0x20')]=this[_0x070e('0x1d')][_0x070e('0x1f')][_0x070e('0x20')];}else{_0x5b184[_0x070e('0x21')]=this[_0x070e('0x1d')]['Smtp'][_0x070e('0x21')];_0x5b184[_0x070e('0x22')]=this[_0x070e('0x1d')]['Smtp'][_0x070e('0x22')];_0x5b184['secure']=this['account'][_0x070e('0x1f')][_0x070e('0x23')];}if(this[_0x070e('0x1d')][_0x070e('0x1f')][_0x070e('0x24')]){_0x5b184['auth']={'user':this[_0x070e('0x1d')][_0x070e('0x1f')][_0x070e('0x25')],'pass':this[_0x070e('0x1d')][_0x070e('0x1f')][_0x070e('0x26')]};}_0x2e3e5e[_0x070e('0x27')]=this[_0x070e('0x13')]['messageId'];_0x2e3e5e[_0x070e('0x28')]=_0x070e('0x29')+_[_0x070e('0x2a')](_0x2e3e5e['body'],'<div\x20id=\x22xm-mail-content\x22',_0x070e('0x2b'))+_0x070e('0x2c');return mailRpc[_0x070e('0x2d')](_0x5b184,_0x2e3e5e)['then'](function(_0x3fa994){logger[_0x070e('0xa')](_0x070e('0x2e'),_0x46fe68);_0x2e3e5e[_0x070e('0x2f')]=_0x3fa994['message']['messageId'];return rpc[_0x49b2fb+'Message']['create'](_0x2e3e5e);})[_0x070e('0x30')](function(_0x4e0a7d){logger[_0x070e('0xa')](_0x070e('0xb'),_0x46fe68,JSON['stringify'](_0x4e0a7d));})['catch'](function(_0x699739){logger[_0x070e('0x31')]('[RPC][%s][AUTOREPLY]\x20%s',_0x46fe68,JSON['stringify'](_0x699739));})[_0x070e('0x32')](function(){_0x56e420[_0x070e('0x33')]();});}else{return rpc[this[_0x070e('0xd')]+_0x070e('0x1e')][_0x070e('0x34')](_0x2e3e5e)['then'](function(_0x482cc2){logger[_0x070e('0xa')](_0x070e('0xb'),_0x46fe68,_0x2e3e5e[_0x070e('0x35')]);})[_0x070e('0x36')](function(_0xf11439){logger['error'](_0x070e('0xb'),_0x46fe68,JSON[_0x070e('0x37')](_0xf11439));})['finally'](function(){_0x56e420[_0x070e('0x33')]();});}}}catch(_0x34746e){logger['error']('[%s][AUTOREPLY]\x20%s',_0x46fe68,JSON['stringify'](_0x34746e));_0x56e420[_0x070e('0x38')]();}};};
\ No newline at end of file
index 7759f3f..a34202f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd668=['format','YYYY-MM-DD\x20HH:mm:ss','system','channel','Interaction','update','interaction','[%s][CLOSE]\x20interaction\x20%s\x20has\x20been\x20closed!','error','[%s][CLOSE]\x20%s','finally','stop','moment','../../../../config/logger','routing','../../rpc/chatInteraction','../../rpc/openchannelInteraction','../../rpc/faxInteraction','consequence','info','[%s][CLOSE]\x20reason\x20%s'];(function(_0x39e853,_0x16d356){var _0x3a0ddb=function(_0x3fef8c){while(--_0x3fef8c){_0x39e853['push'](_0x39e853['shift']());}};_0x3a0ddb(++_0x16d356);}(_0xd668,0x108));var _0x8d66=function(_0x15f455,_0x1ec373){_0x15f455=_0x15f455-0x0;var _0x45f542=_0xd668[_0x15f455];return _0x45f542;};'use strict';var moment=require(_0x8d66('0x0'));var logger=require(_0x8d66('0x1'))(_0x8d66('0x2'));var rpc={'chatInteraction':require(_0x8d66('0x3')),'openchannelInteraction':require(_0x8d66('0x4')),'smsInteraction':require('../../rpc/smsInteraction'),'mailInteraction':require('../../rpc/mailInteraction'),'faxInteraction':require(_0x8d66('0x5'))};exports[_0x8d66('0x6')]=function(_0x41b1e2,_0x28df74,_0x486c9b,_0x5dc979){return function(_0x1432e3){try{logger[_0x8d66('0x7')](_0x8d66('0x8'),_0x41b1e2,_0x28df74[0x0]);var _0x513cde={'closed':0x1,'closedAt':moment()[_0x8d66('0x9')](_0x8d66('0xa')),'closeReason':_0x8d66('0xb'),'disposition':_0x28df74[0x0]};if(rpc[_0x5dc979[_0x8d66('0xc')]+'Interaction']){rpc[_0x5dc979[_0x8d66('0xc')]+_0x8d66('0xd')][_0x8d66('0xe')](_0x5dc979[_0x8d66('0xf')]['id'],_0x513cde)['then'](function(_0x3b9168){logger[_0x8d66('0x7')](_0x8d66('0x10'),_0x41b1e2,_0x5dc979[_0x8d66('0xf')]['id']);})['catch'](function(_0x2bedf8){logger[_0x8d66('0x11')](_0x8d66('0x12'),_0x41b1e2,JSON['stringify'](_0x2bedf8));})[_0x8d66('0x13')](function(){_0x1432e3[_0x8d66('0x14')]();});}}catch(_0x34a2eb){logger[_0x8d66('0x11')]('[%s][CLOSE]\x20%s',_0x41b1e2,JSON['stringify'](_0x34a2eb));_0x1432e3['stop']();}};};
\ No newline at end of file
+var _0x96cc=['../../rpc/mailInteraction','../../rpc/faxInteraction','consequence','info','[%s][CLOSE]\x20reason\x20%s','format','YYYY-MM-DD\x20HH:mm:ss','system','channel','Interaction','update','then','interaction','catch','error','stringify','finally','stop','[%s][CLOSE]\x20%s','moment','routing','../../rpc/openchannelInteraction','../../rpc/smsInteraction'];(function(_0x373429,_0x43ba67){var _0x5d0d46=function(_0x2837c1){while(--_0x2837c1){_0x373429['push'](_0x373429['shift']());}};_0x5d0d46(++_0x43ba67);}(_0x96cc,0x16c));var _0xc96c=function(_0x66f9f9,_0x4e5148){_0x66f9f9=_0x66f9f9-0x0;var _0x83efea=_0x96cc[_0x66f9f9];return _0x83efea;};'use strict';var moment=require(_0xc96c('0x0'));var logger=require('../../../../config/logger')(_0xc96c('0x1'));var rpc={'chatInteraction':require('../../rpc/chatInteraction'),'openchannelInteraction':require(_0xc96c('0x2')),'smsInteraction':require(_0xc96c('0x3')),'mailInteraction':require(_0xc96c('0x4')),'faxInteraction':require(_0xc96c('0x5'))};exports[_0xc96c('0x6')]=function(_0x29b6f1,_0x377e6c,_0x7b632c,_0x3b7f45){return function(_0x5142cd){try{logger[_0xc96c('0x7')](_0xc96c('0x8'),_0x29b6f1,_0x377e6c[0x0]);var _0x408afb={'closed':0x1,'closedAt':moment()[_0xc96c('0x9')](_0xc96c('0xa')),'closeReason':_0xc96c('0xb'),'disposition':_0x377e6c[0x0]};if(rpc[_0x3b7f45[_0xc96c('0xc')]+'Interaction']){rpc[_0x3b7f45[_0xc96c('0xc')]+_0xc96c('0xd')][_0xc96c('0xe')](_0x3b7f45['interaction']['id'],_0x408afb)[_0xc96c('0xf')](function(_0x4a91dd){logger[_0xc96c('0x7')]('[%s][CLOSE]\x20interaction\x20%s\x20has\x20been\x20closed!',_0x29b6f1,_0x3b7f45[_0xc96c('0x10')]['id']);})[_0xc96c('0x11')](function(_0x3ef47a){logger[_0xc96c('0x12')]('[%s][CLOSE]\x20%s',_0x29b6f1,JSON[_0xc96c('0x13')](_0x3ef47a));})[_0xc96c('0x14')](function(){_0x5142cd[_0xc96c('0x15')]();});}}catch(_0x3f65fd){logger['error'](_0xc96c('0x16'),_0x29b6f1,JSON[_0xc96c('0x13')](_0x3f65fd));_0x5142cd[_0xc96c('0x15')]();}};};
\ No newline at end of file
index a84de90..ba12a90 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x73c4=['isNil','UserId','info','Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.','contact','YYYY-MM-DD\x20HH:mm:ss','out','channel','chat','account','upperFirst','AccountId','interaction','isEmpty','getMustacheRender','create','then','[%s][DIALOGFLOW]\x20%s','catch','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!','textRequest','message','body','dialogflow','result','fulfillment','speech','Message','endConversation','lodash','moment','apiai-promise','./utils','../../../../config/logger','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','consequence'];(function(_0x5631e5,_0x373f18){var _0x477444=function(_0xc373a7){while(--_0xc373a7){_0x5631e5['push'](_0x5631e5['shift']());}};_0x477444(++_0x373f18);}(_0x73c4,0xa9));var _0x473c=function(_0x587fb5,_0x59cb3b){_0x587fb5=_0x587fb5-0x0;var _0x551105=_0x73c4[_0x587fb5];return _0x551105;};'use strict';var _=require(_0x473c('0x0'));var moment=require(_0x473c('0x1'));var apiai=require(_0x473c('0x2'));var md5=require('md5');var utils=require(_0x473c('0x3'));var logger=require(_0x473c('0x4'))('routing');var rpc={'chatMessage':require(_0x473c('0x5')),'openchannelMessage':require(_0x473c('0x6')),'mailMessage':require(_0x473c('0x7')),'smsMessage':require(_0x473c('0x8')),'faxMessage':require(_0x473c('0x9'))};exports[_0x473c('0xa')]=function(_0x315ea3,_0x4c4a48){return function(_0x5b6407){try{if(!_[_0x473c('0xb')](this['interaction'][_0x473c('0xc')])){logger[_0x473c('0xd')]('[%s][DIALOGFLOW]\x20%s',_0x315ea3,_0x473c('0xe'));return _0x5b6407['next']();}var _0x6ce70b={'ContactId':this[_0x473c('0xf')]['id'],'sentAt':moment()['format'](_0x473c('0x10')),'direction':_0x473c('0x11')};var _0x4e2a44=this[_0x473c('0x12')];if(_0x4e2a44===_0x473c('0x13')){_0x6ce70b['ChatWebsiteId']=this[_0x473c('0x14')]['id'];}else{_0x6ce70b[_[_0x473c('0x15')](_0x4e2a44)+_0x473c('0x16')]=this[_0x473c('0x14')]['id'];}_0x6ce70b[_[_0x473c('0x15')](_0x4e2a44)+'InteractionId']=this[_0x473c('0x17')]['id'];if(this[_0x473c('0x17')]['created']){var _0xdba582=_0x4c4a48[0x2];if(!_[_0x473c('0x18')](_0xdba582)){_0x6ce70b['body']=utils[_0x473c('0x19')](_0xdba582,this);return rpc[_0x4e2a44+'Message'][_0x473c('0x1a')](_0x6ce70b)[_0x473c('0x1b')](function(_0x17b12f){logger[_0x473c('0xd')](_0x473c('0x1c'),_0x315ea3,_0x6ce70b['body']);})[_0x473c('0x1d')](function(_0x231a66){logger[_0x473c('0x1e')](_0x473c('0x1c'),_0x315ea3,JSON[_0x473c('0x1f')](_0x231a66));})[_0x473c('0x20')](function(){logger[_0x473c('0xd')](_0x473c('0x21'),_0x315ea3);_0x5b6407[_0x473c('0x22')]();});}else{logger[_0x473c('0xd')](_0x473c('0x23'),_0x315ea3);_0x5b6407[_0x473c('0x22')]();}}else{var _0x40b93a=this;var _0x519898=apiai(_0x4c4a48[0x0],{'language':_0x4c4a48[0x1]||'en'});return _0x519898[_0x473c('0x24')](this[_0x473c('0x25')]['body'],{'sessionId':md5(this['interaction']['id'])})[_0x473c('0x1b')](function(_0x324eed){_0x40b93a[_0x473c('0x26')][_0x473c('0x27')]=_0x324eed;_0x6ce70b['body']=_0x324eed[_0x473c('0x28')][_0x473c('0x29')][_0x473c('0x2a')];return rpc[_0x4e2a44+_0x473c('0x2b')][_0x473c('0x1a')](_0x6ce70b)[_0x473c('0x1b')](function(_0x2804ba){logger['info']('[%s][DIALOGFLOW]\x20%s',_0x315ea3,_0x6ce70b[_0x473c('0x26')]);if(_0x324eed[_0x473c('0x28')]['metadata'][_0x473c('0x2c')]){_0x5b6407['next']();}else{_0x5b6407[_0x473c('0x22')]();}})[_0x473c('0x1d')](function(_0x428d57){logger[_0x473c('0x1e')](_0x473c('0x1c'),_0x315ea3,JSON[_0x473c('0x1f')](_0x428d57));_0x5b6407['next']();});})[_0x473c('0x1d')](function(_0xfdccd0){logger[_0x473c('0x1e')]('[%s][DIALOGFLOW]\x20%s',_0x315ea3,_0xfdccd0[_0x473c('0x25')]);_0x5b6407['next']();});}}catch(_0x4751fb){logger[_0x473c('0x1e')](_0x473c('0x1c'),_0x315ea3,JSON[_0x473c('0x1f')](_0x4751fb));_0x5b6407[_0x473c('0x22')]();}};};
\ No newline at end of file
+var _0x378b=['account','upperFirst','isEmpty','body','Message','create','catch','stringify','finally','[%s][DIALOGFLOW]\x20Welcome\x20Message\x20has\x20been\x20sent!','[%s][DIALOGFLOW]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!','stop','textRequest','then','dialogflow','result','fulfillment','speech','metadata','endConversation','error','moment','apiai-promise','md5','./utils','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/mailMessage','../../rpc/faxMessage','consequence','interaction','UserId','info','[%s][DIALOGFLOW]\x20%s','Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.','next','contact','out','chat','ChatWebsiteId'];(function(_0x42cf16,_0x5328e2){var _0x443f2a=function(_0x17fb08){while(--_0x17fb08){_0x42cf16['push'](_0x42cf16['shift']());}};_0x443f2a(++_0x5328e2);}(_0x378b,0x67));var _0xb378=function(_0x165153,_0x6fb90f){_0x165153=_0x165153-0x0;var _0xcca4e=_0x378b[_0x165153];return _0xcca4e;};'use strict';var _=require('lodash');var moment=require(_0xb378('0x0'));var apiai=require(_0xb378('0x1'));var md5=require(_0xb378('0x2'));var utils=require(_0xb378('0x3'));var logger=require(_0xb378('0x4'))(_0xb378('0x5'));var rpc={'chatMessage':require(_0xb378('0x6')),'openchannelMessage':require('../../rpc/openchannelMessage'),'mailMessage':require(_0xb378('0x7')),'smsMessage':require('../../rpc/smsMessage'),'faxMessage':require(_0xb378('0x8'))};exports[_0xb378('0x9')]=function(_0x317e05,_0x57efe9){return function(_0xa05921){try{if(!_['isNil'](this[_0xb378('0xa')][_0xb378('0xb')])){logger[_0xb378('0xc')](_0xb378('0xd'),_0x317e05,_0xb378('0xe'));return _0xa05921[_0xb378('0xf')]();}var _0x5cf618={'ContactId':this[_0xb378('0x10')]['id'],'sentAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'direction':_0xb378('0x11')};var _0x1e1e19=this['channel'];if(_0x1e1e19===_0xb378('0x12')){_0x5cf618[_0xb378('0x13')]=this[_0xb378('0x14')]['id'];}else{_0x5cf618[_[_0xb378('0x15')](_0x1e1e19)+'AccountId']=this[_0xb378('0x14')]['id'];}_0x5cf618[_[_0xb378('0x15')](_0x1e1e19)+'InteractionId']=this[_0xb378('0xa')]['id'];if(this['interaction']['created']){var _0x4376be=_0x57efe9[0x2];if(!_[_0xb378('0x16')](_0x4376be)){_0x5cf618[_0xb378('0x17')]=utils['getMustacheRender'](_0x4376be,this);return rpc[_0x1e1e19+_0xb378('0x18')][_0xb378('0x19')](_0x5cf618)['then'](function(_0x16b02f){logger[_0xb378('0xc')]('[%s][DIALOGFLOW]\x20%s',_0x317e05,_0x5cf618[_0xb378('0x17')]);})[_0xb378('0x1a')](function(_0x6c99b4){logger['error'](_0xb378('0xd'),_0x317e05,JSON[_0xb378('0x1b')](_0x6c99b4));})[_0xb378('0x1c')](function(){logger[_0xb378('0xc')](_0xb378('0x1d'),_0x317e05);_0xa05921['stop']();});}else{logger[_0xb378('0xc')](_0xb378('0x1e'),_0x317e05);_0xa05921[_0xb378('0x1f')]();}}else{var _0x4e0b4e=this;var _0x360f81=apiai(_0x57efe9[0x0],{'language':_0x57efe9[0x1]||'en'});return _0x360f81[_0xb378('0x20')](this['message']['body'],{'sessionId':md5(this[_0xb378('0xa')]['id'])})[_0xb378('0x21')](function(_0x4331b7){_0x4e0b4e[_0xb378('0x17')][_0xb378('0x22')]=_0x4331b7;_0x5cf618[_0xb378('0x17')]=_0x4331b7[_0xb378('0x23')][_0xb378('0x24')][_0xb378('0x25')];return rpc[_0x1e1e19+'Message']['create'](_0x5cf618)['then'](function(_0x2b8be2){logger[_0xb378('0xc')]('[%s][DIALOGFLOW]\x20%s',_0x317e05,_0x5cf618[_0xb378('0x17')]);if(_0x4331b7[_0xb378('0x23')][_0xb378('0x26')][_0xb378('0x27')]){_0xa05921['next']();}else{_0xa05921[_0xb378('0x1f')]();}})[_0xb378('0x1a')](function(_0x159149){logger[_0xb378('0x28')](_0xb378('0xd'),_0x317e05,JSON['stringify'](_0x159149));_0xa05921[_0xb378('0xf')]();});})[_0xb378('0x1a')](function(_0x4e5c98){logger[_0xb378('0x28')]('[%s][DIALOGFLOW]\x20%s',_0x317e05,_0x4e5c98['message']);_0xa05921[_0xb378('0xf')]();});}}catch(_0x542df4){logger[_0xb378('0x28')](_0xb378('0xd'),_0x317e05,JSON[_0xb378('0x1b')](_0x542df4));_0xa05921[_0xb378('0x1f')]();}};};
\ No newline at end of file
index 44afac9..5d22928 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7877=['[%s][GOTOIF]\x20priority\x20%s\x20not\x20found','stop','stringify','validate','html-to-text','./utils','../../../../config/logger','string','condition\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','fromString','getMustacheRender','error','[%s][GOTOIF]\x20%s','map','message','join','priorityTrue','priorityFalse','info','[%s][GOTOIF]\x20condition\x20%s\x20is\x20%s\x20try\x20goto\x20priority\x20%s','next','[%s][GOTOIF]\x20priority\x20%s\x20found\x20at\x20index:\x20%s'];(function(_0x2535a5,_0x47b04b){var _0x3731cd=function(_0x38275e){while(--_0x38275e){_0x2535a5['push'](_0x2535a5['shift']());}};_0x3731cd(++_0x47b04b);}(_0x7877,0x100));var _0x7787=function(_0xea73f,_0x4d4ce7){_0xea73f=_0xea73f-0x0;var _0x7ee2e9=_0x7877[_0xea73f];return _0x7ee2e9;};'use strict';var schema=require(_0x7787('0x0'));var _=require('lodash');var htmlToText=require(_0x7787('0x1'));var utils=require(_0x7787('0x2'));var logger=require(_0x7787('0x3'))('routing');var gotoif=schema({'condition':{'type':_0x7787('0x4'),'required':!![],'message':_0x7787('0x5')},'priorityTrue':{'type':_0x7787('0x6'),'message':'priority\x20true\x20is\x20a\x20number'},'priorityFalse':{'type':_0x7787('0x6'),'message':'priority\x20false\x20is\x20a\x20number'}});exports['consequence']=function(_0x48b32d,_0x2f4fae){return function(_0x3b5940){try{var _0x4ffafb={'condition':htmlToText[_0x7787('0x7')](utils[_0x7787('0x8')](_0x2f4fae[0x0],this),{'wordwrap':![]})['replace'](/<\/?[^>]+(>|$)/g,''),'priorityTrue':_0x2f4fae[0x1],'priorityFalse':_0x2f4fae[0x2]};var _0x16f68c=gotoif[_0x7787('0x0')](_0x4ffafb,{'typecast':!![]});if(_0x16f68c['length']){logger[_0x7787('0x9')](_0x7787('0xa'),_0x48b32d,_[_0x7787('0xb')](_0x16f68c,_0x7787('0xc'))[_0x7787('0xd')](',\x20'));_0x3b5940['stop']();}else{try{var _0x519e4e=eval('('+_0x4ffafb['condition']+')');var _0x5e8da1=_0x519e4e?_0x4ffafb[_0x7787('0xe')]:_0x4ffafb[_0x7787('0xf')];logger[_0x7787('0x10')](_0x7787('0x11'),_0x48b32d,_0x4ffafb['condition'],_0x519e4e,_0x5e8da1||_0x7787('0x12'));if(_0x5e8da1){var _0x377de1=_['findIndex'](_0x3b5940['rules'](),{'p':_0x5e8da1});if(_0x377de1>=0x0){logger[_0x7787('0x10')](_0x7787('0x13'),_0x48b32d,_0x5e8da1||'next',_0x377de1);_0x3b5940[_0x7787('0x12')](_0x377de1);}else{logger[_0x7787('0x10')](_0x7787('0x14'),_0x48b32d,_0x5e8da1||_0x7787('0x12'));_0x3b5940[_0x7787('0x15')]();}}else{_0x3b5940[_0x7787('0x12')]();}}catch(_0x514ed7){logger[_0x7787('0x9')]('[%s][GOTOIF]\x20eval\x20error:\x20%s',_0x48b32d,_0x514ed7['message']);_0x3b5940['stop']();}}}catch(_0xf7f483){logger[_0x7787('0x9')]('[%s][GOTOIF]\x20%s',_0x48b32d,JSON[_0x7787('0x16')](_0xf7f483));_0x3b5940[_0x7787('0x15')]();}};};
\ No newline at end of file
+var _0xdf43=['join','stop','condition','priorityTrue','info','next','findIndex','rules','[%s][GOTOIF]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','[%s][GOTOIF]\x20priority\x20%s\x20not\x20found','[%s][GOTOIF]\x20eval\x20error:\x20%s','stringify','validate','lodash','html-to-text','./utils','../../../../config/logger','condition\x20is\x20a\x20string\x20and\x20it\x20is\x20required','priority\x20true\x20is\x20a\x20number','number','priority\x20false\x20is\x20a\x20number','fromString','getMustacheRender','replace','length','error','[%s][GOTOIF]\x20%s','message'];(function(_0x2f4c98,_0x1b58c1){var _0x9e570d=function(_0x2bcb87){while(--_0x2bcb87){_0x2f4c98['push'](_0x2f4c98['shift']());}};_0x9e570d(++_0x1b58c1);}(_0xdf43,0x1b0));var _0x3df4=function(_0xbf8ebe,_0x3b69a5){_0xbf8ebe=_0xbf8ebe-0x0;var _0x1e25e8=_0xdf43[_0xbf8ebe];return _0x1e25e8;};'use strict';var schema=require(_0x3df4('0x0'));var _=require(_0x3df4('0x1'));var htmlToText=require(_0x3df4('0x2'));var utils=require(_0x3df4('0x3'));var logger=require(_0x3df4('0x4'))('routing');var gotoif=schema({'condition':{'type':'string','required':!![],'message':_0x3df4('0x5')},'priorityTrue':{'type':'number','message':_0x3df4('0x6')},'priorityFalse':{'type':_0x3df4('0x7'),'message':_0x3df4('0x8')}});exports['consequence']=function(_0x399795,_0x2c65fa){return function(_0x15fcc7){try{var _0x505c83={'condition':htmlToText[_0x3df4('0x9')](utils[_0x3df4('0xa')](_0x2c65fa[0x0],this),{'wordwrap':![]})[_0x3df4('0xb')](/<\/?[^>]+(>|$)/g,''),'priorityTrue':_0x2c65fa[0x1],'priorityFalse':_0x2c65fa[0x2]};var _0xff9b9b=gotoif[_0x3df4('0x0')](_0x505c83,{'typecast':!![]});if(_0xff9b9b[_0x3df4('0xc')]){logger[_0x3df4('0xd')](_0x3df4('0xe'),_0x399795,_['map'](_0xff9b9b,_0x3df4('0xf'))[_0x3df4('0x10')](',\x20'));_0x15fcc7[_0x3df4('0x11')]();}else{try{var _0x27d54d=eval('('+_0x505c83[_0x3df4('0x12')]+')');var _0x205077=_0x27d54d?_0x505c83[_0x3df4('0x13')]:_0x505c83['priorityFalse'];logger[_0x3df4('0x14')]('[%s][GOTOIF]\x20condition\x20%s\x20is\x20%s\x20try\x20goto\x20priority\x20%s',_0x399795,_0x505c83[_0x3df4('0x12')],_0x27d54d,_0x205077||_0x3df4('0x15'));if(_0x205077){var _0x34495b=_[_0x3df4('0x16')](_0x15fcc7[_0x3df4('0x17')](),{'p':_0x205077});if(_0x34495b>=0x0){logger['info'](_0x3df4('0x18'),_0x399795,_0x205077||'next',_0x34495b);_0x15fcc7['next'](_0x34495b);}else{logger[_0x3df4('0x14')](_0x3df4('0x19'),_0x399795,_0x205077||'next');_0x15fcc7[_0x3df4('0x11')]();}}else{_0x15fcc7[_0x3df4('0x15')]();}}catch(_0x422c25){logger[_0x3df4('0xd')](_0x3df4('0x1a'),_0x399795,_0x422c25[_0x3df4('0xf')]);_0x15fcc7[_0x3df4('0x11')]();}}}catch(_0x29da87){logger[_0x3df4('0xd')](_0x3df4('0xe'),_0x399795,JSON[_0x3df4('0x1b')](_0x29da87));_0x15fcc7[_0x3df4('0x11')]();}};};
\ No newline at end of file
index d8317a4..57ba605 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xec3e=['routing','priority\x20is\x20a\x20number\x20and\x20it\x20is\x20required','consequence','length','join','stop','[%s][GOTOP]\x20priority\x20%s','priority','rules','info','[%s][GOTOP]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','next','[%s][GOTOP]\x20priority\x20%s\x20not\x20found','error','[%s][GOTOP]\x20%s','stringify','lodash'];(function(_0x5e9689,_0x48e034){var _0x2fac94=function(_0x1e8f97){while(--_0x1e8f97){_0x5e9689['push'](_0x5e9689['shift']());}};_0x2fac94(++_0x48e034);}(_0xec3e,0x1ec));var _0xeec3=function(_0xe67a5f,_0x2d23ce){_0xe67a5f=_0xe67a5f-0x0;var _0x2b5c0b=_0xec3e[_0xe67a5f];return _0x2b5c0b;};'use strict';var schema=require('validate');var _=require(_0xeec3('0x0'));var logger=require('../../../../config/logger')(_0xeec3('0x1'));var gotop=schema({'priority':{'type':'number','required':!![],'message':_0xeec3('0x2')}});exports[_0xeec3('0x3')]=function(_0x3f1e54,_0x3def2c){return function(_0x206109){try{var _0x191251={'priority':_0x3def2c[0x0]};var _0x503d87=gotop['validate'](_0x191251,{'typecast':!![]});if(_0x503d87[_0xeec3('0x4')]){logger['error']('[%s][GOTOP]\x20%s',_0x3f1e54,_['map'](_0x503d87,'message')[_0xeec3('0x5')](',\x20'));_0x206109[_0xeec3('0x6')]();}else{logger['info'](_0xeec3('0x7'),_0x3f1e54,_0x191251[_0xeec3('0x8')]);if(_0x191251[_0xeec3('0x8')]){var _0x2db7cb=_['findIndex'](_0x206109[_0xeec3('0x9')](),{'p':_0x191251[_0xeec3('0x8')]});if(_0x2db7cb>=0x0){logger[_0xeec3('0xa')](_0xeec3('0xb'),_0x3f1e54,_0x191251['priority']||_0xeec3('0xc'),_0x2db7cb);_0x206109[_0xeec3('0xc')](_0x2db7cb);}else{logger[_0xeec3('0xa')](_0xeec3('0xd'),_0x3f1e54,_0x191251[_0xeec3('0x8')]||'next');_0x206109['stop']();}}else{_0x206109[_0xeec3('0xc')]();}}}catch(_0x11011b){logger[_0xeec3('0xe')](_0xeec3('0xf'),_0x3f1e54,JSON[_0xeec3('0x10')](_0x11011b));_0x206109[_0xeec3('0x6')]();}};};
\ No newline at end of file
+var _0x493d=['[%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','[%s][GOTOP]\x20%s','validate','lodash','number','priority\x20is\x20a\x20number\x20and\x20it\x20is\x20required','consequence','length','error','message','join','stop','info'];(function(_0x5969b1,_0x8cb0d5){var _0x1dd7be=function(_0x32c231){while(--_0x32c231){_0x5969b1['push'](_0x5969b1['shift']());}};_0x1dd7be(++_0x8cb0d5);}(_0x493d,0x1c9));var _0xd493=function(_0xbc7ea,_0x4d3f90){_0xbc7ea=_0xbc7ea-0x0;var _0xadc703=_0x493d[_0xbc7ea];return _0xadc703;};'use strict';var schema=require(_0xd493('0x0'));var _=require(_0xd493('0x1'));var logger=require('../../../../config/logger')('routing');var gotop=schema({'priority':{'type':_0xd493('0x2'),'required':!![],'message':_0xd493('0x3')}});exports[_0xd493('0x4')]=function(_0x44bfa2,_0x50e7d6){return function(_0x318960){try{var _0x36bf4e={'priority':_0x50e7d6[0x0]};var _0x4ae6eb=gotop[_0xd493('0x0')](_0x36bf4e,{'typecast':!![]});if(_0x4ae6eb[_0xd493('0x5')]){logger[_0xd493('0x6')]('[%s][GOTOP]\x20%s',_0x44bfa2,_['map'](_0x4ae6eb,_0xd493('0x7'))[_0xd493('0x8')](',\x20'));_0x318960[_0xd493('0x9')]();}else{logger[_0xd493('0xa')](_0xd493('0xb'),_0x44bfa2,_0x36bf4e[_0xd493('0xc')]);if(_0x36bf4e[_0xd493('0xc')]){var _0x485e84=_[_0xd493('0xd')](_0x318960['rules'](),{'p':_0x36bf4e['priority']});if(_0x485e84>=0x0){logger[_0xd493('0xa')](_0xd493('0xe'),_0x44bfa2,_0x36bf4e[_0xd493('0xc')]||_0xd493('0xf'),_0x485e84);_0x318960[_0xd493('0xf')](_0x485e84);}else{logger[_0xd493('0xa')](_0xd493('0x10'),_0x44bfa2,_0x36bf4e[_0xd493('0xc')]||_0xd493('0xf'));_0x318960[_0xd493('0x9')]();}}else{_0x318960[_0xd493('0xf')]();}}}catch(_0x390a93){logger['error'](_0xd493('0x11'),_0x44bfa2,JSON['stringify'](_0x390a93));_0x318960[_0xd493('0x9')]();}};};
\ No newline at end of file
index 2f0d7a9..f6bae20 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8446=['../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/faxMessage','consequence','getMustacheRender','chat','ChatWebsiteId','account','channel','AccountId','InteractionId','interaction','Message','create','then','info','[%s][MESSAGE]\x20%s','body','next','catch','stringify','stop','error','lodash','./utils'];(function(_0x2eb9d4,_0x169887){var _0x40afb4=function(_0x7d12e7){while(--_0x7d12e7){_0x2eb9d4['push'](_0x2eb9d4['shift']());}};_0x40afb4(++_0x169887);}(_0x8446,0x1c9));var _0x6844=function(_0x4ff2a7,_0x46fbd1){_0x4ff2a7=_0x4ff2a7-0x0;var _0x562f6e=_0x8446[_0x4ff2a7];return _0x562f6e;};'use strict';var _=require(_0x6844('0x0'));var utils=require(_0x6844('0x1'));var logger=require(_0x6844('0x2'))(_0x6844('0x3'));var rpc={'chatMessage':require(_0x6844('0x4')),'openchannelMessage':require(_0x6844('0x5')),'mailMessage':require('../../rpc/mailMessage'),'smsMessage':require('../../rpc/smsMessage'),'faxMessage':require(_0x6844('0x6'))};exports[_0x6844('0x7')]=function(_0x4df0ec,_0x2ec1ad){return function(_0xf33485){try{var _0x60de99={'body':utils[_0x6844('0x8')](_0x2ec1ad[0x0],this),'ContactId':this['contact']['id']};if(this['channel']===_0x6844('0x9')){_0x60de99[_0x6844('0xa')]=this[_0x6844('0xb')]['id'];}else{_0x60de99[_['upperFirst'](this[_0x6844('0xc')])+_0x6844('0xd')]=this[_0x6844('0xb')]['id'];}_0x60de99[_['upperFirst'](this[_0x6844('0xc')])+_0x6844('0xe')]=this[_0x6844('0xf')]['id'];if(rpc[this['channel']+_0x6844('0x10')]){return rpc[this[_0x6844('0xc')]+_0x6844('0x10')][_0x6844('0x11')](_0x60de99)[_0x6844('0x12')](function(_0x254067){logger[_0x6844('0x13')](_0x6844('0x14'),_0x4df0ec,_0x60de99[_0x6844('0x15')]);_0xf33485[_0x6844('0x16')]();})[_0x6844('0x17')](function(_0x48e8eb){logger['error'](_0x6844('0x14'),_0x4df0ec,JSON[_0x6844('0x18')](_0x48e8eb));_0xf33485[_0x6844('0x19')]();});}}catch(_0x494755){logger[_0x6844('0x1a')](_0x6844('0x14'),_0x4df0ec,JSON[_0x6844('0x18')](_0x494755));_0xf33485[_0x6844('0x19')]();}};};
\ No newline at end of file
+var _0x9c66=['InteractionId','interaction','Message','create','then','info','[%s][MESSAGE]\x20%s','body','error','stringify','stop','lodash','./utils','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','consequence','getMustacheRender','channel','ChatWebsiteId','account','AccountId','upperFirst'];(function(_0xb0c078,_0x13fc46){var _0x106d20=function(_0x2785c0){while(--_0x2785c0){_0xb0c078['push'](_0xb0c078['shift']());}};_0x106d20(++_0x13fc46);}(_0x9c66,0x119));var _0x69c6=function(_0x38fb8b,_0x70dd0a){_0x38fb8b=_0x38fb8b-0x0;var _0x1ec681=_0x9c66[_0x38fb8b];return _0x1ec681;};'use strict';var _=require(_0x69c6('0x0'));var utils=require(_0x69c6('0x1'));var logger=require(_0x69c6('0x2'))(_0x69c6('0x3'));var rpc={'chatMessage':require(_0x69c6('0x4')),'openchannelMessage':require(_0x69c6('0x5')),'mailMessage':require(_0x69c6('0x6')),'smsMessage':require(_0x69c6('0x7')),'faxMessage':require(_0x69c6('0x8'))};exports[_0x69c6('0x9')]=function(_0x28f8cf,_0x3e89b0){return function(_0x232de0){try{var _0x587bd0={'body':utils[_0x69c6('0xa')](_0x3e89b0[0x0],this),'ContactId':this['contact']['id']};if(this[_0x69c6('0xb')]==='chat'){_0x587bd0[_0x69c6('0xc')]=this[_0x69c6('0xd')]['id'];}else{_0x587bd0[_['upperFirst'](this[_0x69c6('0xb')])+_0x69c6('0xe')]=this[_0x69c6('0xd')]['id'];}_0x587bd0[_[_0x69c6('0xf')](this['channel'])+_0x69c6('0x10')]=this[_0x69c6('0x11')]['id'];if(rpc[this['channel']+_0x69c6('0x12')]){return rpc[this[_0x69c6('0xb')]+_0x69c6('0x12')][_0x69c6('0x13')](_0x587bd0)[_0x69c6('0x14')](function(_0xfd0e7b){logger[_0x69c6('0x15')](_0x69c6('0x16'),_0x28f8cf,_0x587bd0[_0x69c6('0x17')]);_0x232de0['next']();})['catch'](function(_0x2fae23){logger[_0x69c6('0x18')](_0x69c6('0x16'),_0x28f8cf,JSON[_0x69c6('0x19')](_0x2fae23));_0x232de0[_0x69c6('0x1a')]();});}}catch(_0x43908e){logger['error']('[%s][MESSAGE]\x20%s',_0x28f8cf,JSON[_0x69c6('0x19')](_0x43908e));_0x232de0[_0x69c6('0x1a')]();}};};
\ No newline at end of file
index b5754b4..6f130bb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa220=['consequence','info','[%s][NOOP]\x20%s','getMustacheRender','next','stringify','stop','../../../../config/logger'];(function(_0x4d21ff,_0x19d202){var _0x22b554=function(_0x4473c5){while(--_0x4473c5){_0x4d21ff['push'](_0x4d21ff['shift']());}};_0x22b554(++_0x19d202);}(_0xa220,0x167));var _0x0a22=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0xa220[_0x3ab51d];return _0x29a04e;};'use strict';var utils=require('./utils');var logger=require(_0x0a22('0x0'))('routing');exports[_0x0a22('0x1')]=function(_0x54fa42,_0x1aef63){return function(_0x2b17e2){try{logger[_0x0a22('0x2')](_0x0a22('0x3'),_0x54fa42,utils[_0x0a22('0x4')](_0x1aef63[0x0],this));_0x2b17e2[_0x0a22('0x5')]();}catch(_0x48b494){logger['error']('[%s][NOOP]\x20%s',_0x54fa42,JSON[_0x0a22('0x6')](_0x48b494));_0x2b17e2[_0x0a22('0x7')]();}};};
\ No newline at end of file
+var _0xc33e=['getMustacheRender','next','error','stop','./utils','../../../../config/logger','routing','consequence','info'];(function(_0x45b1a1,_0x4099fa){var _0x39c97f=function(_0xfd272c){while(--_0xfd272c){_0x45b1a1['push'](_0x45b1a1['shift']());}};_0x39c97f(++_0x4099fa);}(_0xc33e,0x1b4));var _0xec33=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xc33e[_0x3dd15e];return _0x231fd0;};'use strict';var utils=require(_0xec33('0x0'));var logger=require(_0xec33('0x1'))(_0xec33('0x2'));exports[_0xec33('0x3')]=function(_0x507f99,_0xc312b6){return function(_0x10ed99){try{logger[_0xec33('0x4')]('[%s][NOOP]\x20%s',_0x507f99,utils[_0xec33('0x5')](_0xc312b6[0x0],this));_0x10ed99[_0xec33('0x6')]();}catch(_0x605ef6){logger[_0xec33('0x7')]('[%s][NOOP]\x20%s',_0x507f99,JSON['stringify'](_0x605ef6));_0x10ed99[_0xec33('0x8')]();}};};
\ No newline at end of file
index c1f59f4..3385672 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x29c1=['socket.io-emitter','queue_id','account','from','joinAt','emit','queue','format','pick','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','string','number','waiting','contact','list','upperFirst','channel','QueueId','interaction','MessageId','message','chat','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','YYYY-MM-DD\x20HH:mm:ss','accepted','[%s][STOP:QUEUE][NAME:%s]','body','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','update','consequence','length','[%s][QUEUE]\x20%s','map','stop','find','Queues','createQueue','atimeout','qtimeout','rules','end','close','[%s][QUEUE]\x20ROUTING\x20STOPPED','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','lodash','util','seq-queue','../../../../config/environment','routing','./strategy','redis','defaults','localhost'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0x29c1,0x1be));var _0x129c=function(_0x199c67,_0x4b2bc4){_0x199c67=_0x199c67-0x0;var _0x29bf21=_0x29c1[_0x199c67];return _0x29bf21;};'use strict';var schema=require(_0x129c('0x0'));var _=require(_0x129c('0x1'));var util=require(_0x129c('0x2'));var seqqueue=require(_0x129c('0x3'));var moment=require('moment');var Redis=require('ioredis');var config=require(_0x129c('0x4'));var logger=require('../../../../config/logger')(_0x129c('0x5'));var strategy=require(_0x129c('0x6'));config[_0x129c('0x7')]=_[_0x129c('0x8')](config[_0x129c('0x7')],{'host':_0x129c('0x9'),'port':0x18eb});var io=require(_0x129c('0xa'))(new Redis(config[_0x129c('0x7')]));var attributes=['id',_0x129c('0xb'),_0x129c('0xc'),'queue',_0x129c('0xd'),_0x129c('0xe')];function emit(_0x1a8d63,_0x18b11d,_0x18d682){io['to'](_0x1a8d63)[_0x129c('0xf')](_0x18b11d,_0x18d682);}function emitChannelQueueInteraction(_0x5b8a14,_0x568acb,_0x4c83da,_0x1f456c,_0x5629c4,_0x193d37,_0x17721f,_0x8e466d){_0x4c83da['queue_id']=_0x8e466d;_0x4c83da[_0x129c('0x10')]=_0x568acb;_0x4c83da[_0x129c('0xc')]=_0x1f456c;_0x4c83da['id']=_0x5629c4;if(_0x193d37){_0x17721f[util[_0x129c('0x11')]('%sQueuesWaitingInteractions',_0x5b8a14)][_0x5629c4]=_[_0x129c('0x12')](_0x4c83da,attributes);}else{delete _0x17721f[util[_0x129c('0x11')](_0x129c('0x13'),_0x5b8a14)][_0x5629c4];}emit(util[_0x129c('0x11')](_0x129c('0x14'),_0x5b8a14,_0x568acb),util['format'](_0x129c('0x15'),_0x5b8a14,_0x193d37?_0x129c('0x16'):_0x129c('0x17')),_[_0x129c('0x12')](_0x4c83da,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x129c('0x18')),'chatQueueReport':require(_0x129c('0x19')),'smsQueueReport':require(_0x129c('0x1a')),'faxQueueReport':require(_0x129c('0x1b'))};var queue=schema({'name':{'type':_0x129c('0x1c'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x129c('0x1d'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x396f8e,_0x24a9ed,_0x3b3222,_0x407f5b){if(_0x396f8e&&_0x24a9ed&&_0x3b3222){_0x24a9ed[_0x129c('0x1e')]+=0x1;var _0x7ecd70={'uniqueid':_0x396f8e,'from':_0x3b3222['body']?_0x3b3222['body'][_0x129c('0xd')]:'','joinAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x3b3222[_0x129c('0x1f')]?_0x3b3222[_0x129c('0x1f')]['id']:null,'ListId':_0x3b3222[_0x129c('0x20')]?_0x3b3222[_0x129c('0x20')]['id']:null};_0x7ecd70[_[_0x129c('0x21')](_0x3b3222[_0x129c('0x22')])+_0x129c('0x23')]=_0x24a9ed['id']||null;_0x7ecd70[_[_0x129c('0x21')](_0x3b3222[_0x129c('0x22')])+'InteractionId']=_0x3b3222[_0x129c('0x24')]?_0x3b3222[_0x129c('0x24')]['id']:null;_0x7ecd70[_['upperFirst'](_0x3b3222[_0x129c('0x22')])+_0x129c('0x25')]=_0x3b3222[_0x129c('0x26')]?_0x3b3222[_0x129c('0x26')]['id']:null;_0x7ecd70[_[_0x129c('0x21')](_0x3b3222[_0x129c('0x22')])+(_0x3b3222['channel']!==_0x129c('0x27')?'AccountId':_0x129c('0x28'))]=_0x3b3222[_0x129c('0xc')]?_0x3b3222[_0x129c('0xc')]['id']:null;logger[_0x129c('0x29')](util['format'](_0x129c('0x2a'),_0x396f8e,_0x24a9ed[_0x129c('0x2b')]));emitChannelQueueInteraction(_0x3b3222[_0x129c('0x22')],_0x24a9ed[_0x129c('0x2b')],_0x7ecd70,_0x3b3222['account'][_0x129c('0x2b')],_0x3b3222[_0x129c('0x26')]['id'],!![],_0x407f5b,_0x24a9ed['id']);if(rpc[_0x3b3222[_0x129c('0x22')]+_0x129c('0x2c')]){return rpc[_0x3b3222[_0x129c('0x22')]+_0x129c('0x2c')][_0x129c('0x2d')](_0x7ecd70)[_0x129c('0x2e')](function(_0x32325e){logger[_0x129c('0x2f')](_0x129c('0x30'));});}}}function stopRouting(_0x40b7b5,_0xccfeb1,_0x41159b,_0x577341){if(_0x40b7b5&&_0xccfeb1){_0xccfeb1[_0x129c('0x1e')]-=0x1;var _0x35eeaa={'leaveAt':moment()[_0x129c('0x11')](_0x129c('0x31')),'acceptAt':moment()[_0x129c('0x11')](_0x129c('0x31')),'reason':_0x129c('0x32')};logger['info'](util[_0x129c('0x11')](_0x129c('0x33'),_0x40b7b5,_0xccfeb1[_0x129c('0x2b')]));emitChannelQueueInteraction(_0x41159b[_0x129c('0x22')],_0xccfeb1['name'],_0x41159b[_0x129c('0x34')],_0x41159b[_0x129c('0xc')][_0x129c('0x2b')],_0x41159b[_0x129c('0x26')]['id'],![],_0x577341,_0xccfeb1['id']);if(rpc[_0x41159b[_0x129c('0x22')]+_0x129c('0x2c')]){return rpc[_0x41159b[_0x129c('0x22')]+_0x129c('0x2c')]['update'](_0x40b7b5,_0x35eeaa)[_0x129c('0x2e')](function(_0x5e8a2e){logger[_0x129c('0x2f')](_0x129c('0x35'));});}}}function endRouting(_0x5a31b0,_0x455249,_0x1e3386,_0x52472a){if(_0x5a31b0&&_0x455249){_0x455249['waiting']-=0x1;var _0x7d09d3={'leaveAt':moment()[_0x129c('0x11')](_0x129c('0x31')),'exitAt':moment()['format'](_0x129c('0x31')),'reason':_0x129c('0x36')};logger[_0x129c('0x29')](util[_0x129c('0x11')](_0x129c('0x37'),_0x5a31b0,_0x455249['name']));emitChannelQueueInteraction(_0x1e3386[_0x129c('0x22')],_0x455249[_0x129c('0x2b')],_0x1e3386[_0x129c('0x34')],_0x1e3386['account']['name'],_0x1e3386[_0x129c('0x26')]['id'],![],_0x52472a);if(rpc[_0x1e3386['channel']+_0x129c('0x2c')]){return rpc[_0x1e3386[_0x129c('0x22')]+_0x129c('0x2c')][_0x129c('0x38')](_0x5a31b0,_0x7d09d3)[_0x129c('0x2e')](function(_0x5685f2){logger[_0x129c('0x2f')](_0x129c('0x35'));});}}}function handleFindQueue(_0xf8f47b){return function(_0x207733){return _0x207733[_0x129c('0x2b')]['toLowerCase']()===_0xf8f47b['toLowerCase']();};}exports[_0x129c('0x39')]=function(_0x282049,_0x395f86,_0x5809c8,_0x1d873a){return function(_0x287047){try{var _0x5d5b8a={'name':_0x395f86[0x0],'timeout':_0x395f86[0x1]};var _0x4d2319=queue[_0x129c('0x0')](_0x5d5b8a,{'typecast':!![]});if(_0x4d2319[_0x129c('0x3a')]){logger[_0x129c('0x2f')](_0x129c('0x3b'),_0x282049,_[_0x129c('0x3c')](_0x4d2319,_0x129c('0x26'))['join'](',\x20'));_0x287047[_0x129c('0x3d')]();}else{var _0x30cc28=_[_0x129c('0x3e')](_0x5809c8[_0x1d873a[_0x129c('0x22')]+_0x129c('0x3f')],handleFindQueue(_0x5d5b8a[_0x129c('0x2b')]));if(_0x30cc28){startRouting(_0x282049,_0x30cc28,_0x1d873a,_0x5809c8);var _0x15f6c4=(_0x30cc28[_0x129c('0x36')]||0xa)*0x3e8;var _0x175fb5=(_0x5d5b8a[_0x129c('0x36')]||0x14)*0x3e8;var _0xb92ee5,_0x30e5b9;if(_0x15f6c4>_0x175fb5){_0x175fb5=_0x15f6c4;}var _0x1e2a77=seqqueue[_0x129c('0x40')](_0x15f6c4);_0x1e2a77['id']=_0x282049;_0x1e2a77[_0x129c('0x41')]=_0x15f6c4;_0x1e2a77[_0x129c('0x42')]=_0x175fb5;_0x1e2a77[_0x129c('0x22')]=_0x1d873a[_0x129c('0x22')];_0x5809c8[_0x129c('0x43')][_0x282049]['on'](_0x129c('0x44'),function(){stopRouting(_0x282049,_0x30cc28,_0x1d873a,_0x5809c8);_0x1e2a77[_0x129c('0x45')](!![]);clearTimeout(_0xb92ee5);_0xb92ee5=undefined;if(_0x5809c8[_0x129c('0x43')][_0x282049]){delete _0x5809c8['rules'][_0x282049];}logger[_0x129c('0x29')](_0x129c('0x46'),_0x282049);_0x287047[_0x129c('0x3d')]();});_0xb92ee5=setTimeout(function(){endRouting(_0x282049,_0x30cc28,_0x1d873a,_0x5809c8);clearTimeout(_0xb92ee5);_0x1e2a77[_0x129c('0x45')](!![]);logger[_0x129c('0x29')]('[%s][QUEUE]\x20ROUTING\x20END',_0x282049);_0x287047['next']();},_0x175fb5);switch(_0x30cc28['strategy']){case _0x129c('0x47'):strategy[_0x129c('0x47')](_0x1e2a77,_0x30cc28,_0x5809c8,_0x1d873a);break;default:strategy[_0x129c('0x48')](_0x1e2a77,_0x30cc28,_0x5809c8,_0x1d873a);}}else{logger[_0x129c('0x2f')](_0x129c('0x49'),_0x282049,_0x5d5b8a[_0x129c('0x2b')]);_0x287047[_0x129c('0x3d')]();}}}catch(_0x2fd5ba){console[_0x129c('0x4a')](_0x2fd5ba);logger['error']('[%s][QUEUE]\x20%s',_0x282049,_0x2fd5ba[_0x129c('0x4b')]);_0x287047['stop']();}};};
\ No newline at end of file
+var _0xafef=['string','number','timeout\x20is\x20a\x20number','waiting','body','contact','list','upperFirst','InteractionId','interaction','channel','MessageId','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','QueueReport','create','error','create\x20queue\x20report','YYYY-MM-DD\x20HH:mm:ss','accepted','name','update','catch','timeout','[%s][END:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','length','find','Queues','atimeout','rules','end','close','stop','[%s][QUEUE]\x20ROUTING\x20END','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','[%s][QUEUE]\x20%s','stack','validate','lodash','util','seq-queue','moment','ioredis','routing','./strategy','defaults','redis','localhost','socket.io-emitter','queue_id','account','queue','from','joinAt','format','pick','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport'];(function(_0x3275fb,_0x19f753){var _0x1323d4=function(_0x71d716){while(--_0x71d716){_0x3275fb['push'](_0x3275fb['shift']());}};_0x1323d4(++_0x19f753);}(_0xafef,0x79));var _0xfafe=function(_0x540b9b,_0x3e5017){_0x540b9b=_0x540b9b-0x0;var _0x3cb82b=_0xafef[_0x540b9b];return _0x3cb82b;};'use strict';var schema=require(_0xfafe('0x0'));var _=require(_0xfafe('0x1'));var util=require(_0xfafe('0x2'));var seqqueue=require(_0xfafe('0x3'));var moment=require(_0xfafe('0x4'));var Redis=require(_0xfafe('0x5'));var config=require('../../../../config/environment');var logger=require('../../../../config/logger')(_0xfafe('0x6'));var strategy=require(_0xfafe('0x7'));config['redis']=_[_0xfafe('0x8')](config[_0xfafe('0x9')],{'host':_0xfafe('0xa'),'port':0x18eb});var io=require(_0xfafe('0xb'))(new Redis(config[_0xfafe('0x9')]));var attributes=['id',_0xfafe('0xc'),_0xfafe('0xd'),_0xfafe('0xe'),_0xfafe('0xf'),_0xfafe('0x10')];function emit(_0x3f89e7,_0x150f39,_0x140a81){io['to'](_0x3f89e7)['emit'](_0x150f39,_0x140a81);}function emitChannelQueueInteraction(_0x39e3e9,_0x471473,_0x48002f,_0x34f347,_0x15f238,_0x220a42,_0xc73a8b,_0x4fa898){_0x48002f[_0xfafe('0xc')]=_0x4fa898;_0x48002f[_0xfafe('0xe')]=_0x471473;_0x48002f['account']=_0x34f347;_0x48002f['id']=_0x15f238;if(_0x220a42){_0xc73a8b[util[_0xfafe('0x11')]('%sQueuesWaitingInteractions',_0x39e3e9)][_0x15f238]=_[_0xfafe('0x12')](_0x48002f,attributes);}else{delete _0xc73a8b[util[_0xfafe('0x11')](_0xfafe('0x13'),_0x39e3e9)][_0x15f238];}emit(util[_0xfafe('0x11')](_0xfafe('0x14'),_0x39e3e9,_0x471473),util[_0xfafe('0x11')](_0xfafe('0x15'),_0x39e3e9,_0x220a42?_0xfafe('0x16'):_0xfafe('0x17')),_[_0xfafe('0x12')](_0x48002f,attributes));}var rpc={'openchannelQueueReport':require(_0xfafe('0x18')),'mailQueueReport':require(_0xfafe('0x19')),'chatQueueReport':require(_0xfafe('0x1a')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require('../../rpc/faxQueueReport')};var queue=schema({'name':{'type':_0xfafe('0x1b'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0xfafe('0x1c'),'message':_0xfafe('0x1d')}});function startRouting(_0x1c57f2,_0xe99606,_0x5b7677,_0xb08626){if(_0x1c57f2&&_0xe99606&&_0x5b7677){_0xe99606[_0xfafe('0x1e')]+=0x1;var _0x58a26f={'uniqueid':_0x1c57f2,'from':_0x5b7677[_0xfafe('0x1f')]?_0x5b7677[_0xfafe('0x1f')]['from']:'','joinAt':moment()[_0xfafe('0x11')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x5b7677['contact']?_0x5b7677[_0xfafe('0x20')]['id']:null,'ListId':_0x5b7677['list']?_0x5b7677[_0xfafe('0x21')]['id']:null};_0x58a26f[_[_0xfafe('0x22')](_0x5b7677['channel'])+'QueueId']=_0xe99606['id']||null;_0x58a26f[_[_0xfafe('0x22')](_0x5b7677['channel'])+_0xfafe('0x23')]=_0x5b7677['interaction']?_0x5b7677[_0xfafe('0x24')]['id']:null;_0x58a26f[_[_0xfafe('0x22')](_0x5b7677[_0xfafe('0x25')])+_0xfafe('0x26')]=_0x5b7677[_0xfafe('0x27')]?_0x5b7677[_0xfafe('0x27')]['id']:null;_0x58a26f[_[_0xfafe('0x22')](_0x5b7677['channel'])+(_0x5b7677['channel']!==_0xfafe('0x28')?_0xfafe('0x29'):_0xfafe('0x2a'))]=_0x5b7677['account']?_0x5b7677[_0xfafe('0xd')]['id']:null;logger[_0xfafe('0x2b')](util['format'](_0xfafe('0x2c'),_0x1c57f2,_0xe99606['name']));emitChannelQueueInteraction(_0x5b7677['channel'],_0xe99606['name'],_0x58a26f,_0x5b7677[_0xfafe('0xd')]['name'],_0x5b7677[_0xfafe('0x27')]['id'],!![],_0xb08626,_0xe99606['id']);if(rpc[_0x5b7677[_0xfafe('0x25')]+'QueueReport']){return rpc[_0x5b7677[_0xfafe('0x25')]+_0xfafe('0x2d')][_0xfafe('0x2e')](_0x58a26f)['catch'](function(_0x1e05b2){logger[_0xfafe('0x2f')](_0xfafe('0x30'));});}}}function stopRouting(_0x480fa3,_0x3401d8,_0x5d5edf,_0x23eab4){if(_0x480fa3&&_0x3401d8){_0x3401d8[_0xfafe('0x1e')]-=0x1;var _0x5af308={'leaveAt':moment()[_0xfafe('0x11')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()['format'](_0xfafe('0x31')),'reason':_0xfafe('0x32')};logger[_0xfafe('0x2b')](util['format']('[%s][STOP:QUEUE][NAME:%s]',_0x480fa3,_0x3401d8[_0xfafe('0x33')]));emitChannelQueueInteraction(_0x5d5edf[_0xfafe('0x25')],_0x3401d8['name'],_0x5d5edf['body'],_0x5d5edf[_0xfafe('0xd')][_0xfafe('0x33')],_0x5d5edf[_0xfafe('0x27')]['id'],![],_0x23eab4,_0x3401d8['id']);if(rpc[_0x5d5edf[_0xfafe('0x25')]+'QueueReport']){return rpc[_0x5d5edf['channel']+'QueueReport'][_0xfafe('0x34')](_0x480fa3,_0x5af308)[_0xfafe('0x35')](function(_0xc6bd61){logger[_0xfafe('0x2f')]('update\x20queue\x20report');});}}}function endRouting(_0x158ebc,_0x3e2b7b,_0x37ee96,_0x4752a6){if(_0x158ebc&&_0x3e2b7b){_0x3e2b7b[_0xfafe('0x1e')]-=0x1;var _0x432e05={'leaveAt':moment()['format'](_0xfafe('0x31')),'exitAt':moment()[_0xfafe('0x11')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xfafe('0x36')};logger[_0xfafe('0x2b')](util[_0xfafe('0x11')](_0xfafe('0x37'),_0x158ebc,_0x3e2b7b[_0xfafe('0x33')]));emitChannelQueueInteraction(_0x37ee96['channel'],_0x3e2b7b['name'],_0x37ee96[_0xfafe('0x1f')],_0x37ee96[_0xfafe('0xd')][_0xfafe('0x33')],_0x37ee96[_0xfafe('0x27')]['id'],![],_0x4752a6);if(rpc[_0x37ee96[_0xfafe('0x25')]+'QueueReport']){return rpc[_0x37ee96[_0xfafe('0x25')]+'QueueReport'][_0xfafe('0x34')](_0x158ebc,_0x432e05)[_0xfafe('0x35')](function(_0x4eabd5){logger['error'](_0xfafe('0x38'));});}}}function handleFindQueue(_0x2d59b6){return function(_0x2c9f5e){return _0x2c9f5e['name'][_0xfafe('0x39')]()===_0x2d59b6[_0xfafe('0x39')]();};}exports['consequence']=function(_0x22ed19,_0x3edd98,_0x100e4d,_0x3774aa){return function(_0x337268){try{var _0x198f5a={'name':_0x3edd98[0x0],'timeout':_0x3edd98[0x1]};var _0x4d6615=queue[_0xfafe('0x0')](_0x198f5a,{'typecast':!![]});if(_0x4d6615[_0xfafe('0x3a')]){logger[_0xfafe('0x2f')]('[%s][QUEUE]\x20%s',_0x22ed19,_['map'](_0x4d6615,'message')['join'](',\x20'));_0x337268['stop']();}else{var _0x4d3b16=_[_0xfafe('0x3b')](_0x100e4d[_0x3774aa[_0xfafe('0x25')]+_0xfafe('0x3c')],handleFindQueue(_0x198f5a[_0xfafe('0x33')]));if(_0x4d3b16){startRouting(_0x22ed19,_0x4d3b16,_0x3774aa,_0x100e4d);var _0x2c7407=(_0x4d3b16[_0xfafe('0x36')]||0xa)*0x3e8;var _0x32136e=(_0x198f5a[_0xfafe('0x36')]||0x14)*0x3e8;var _0x3cb54a,_0x110838;if(_0x2c7407>_0x32136e){_0x32136e=_0x2c7407;}var _0x2807fd=seqqueue['createQueue'](_0x2c7407);_0x2807fd['id']=_0x22ed19;_0x2807fd[_0xfafe('0x3d')]=_0x2c7407;_0x2807fd['qtimeout']=_0x32136e;_0x2807fd[_0xfafe('0x25')]=_0x3774aa[_0xfafe('0x25')];_0x100e4d[_0xfafe('0x3e')][_0x22ed19]['on'](_0xfafe('0x3f'),function(){stopRouting(_0x22ed19,_0x4d3b16,_0x3774aa,_0x100e4d);_0x2807fd[_0xfafe('0x40')](!![]);clearTimeout(_0x3cb54a);_0x3cb54a=undefined;if(_0x100e4d[_0xfafe('0x3e')][_0x22ed19]){delete _0x100e4d['rules'][_0x22ed19];}logger[_0xfafe('0x2b')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x22ed19);_0x337268[_0xfafe('0x41')]();});_0x3cb54a=setTimeout(function(){endRouting(_0x22ed19,_0x4d3b16,_0x3774aa,_0x100e4d);clearTimeout(_0x3cb54a);_0x2807fd[_0xfafe('0x40')](!![]);logger['info'](_0xfafe('0x42'),_0x22ed19);_0x337268['next']();},_0x32136e);switch(_0x4d3b16[_0xfafe('0x43')]){case _0xfafe('0x44'):strategy[_0xfafe('0x44')](_0x2807fd,_0x4d3b16,_0x100e4d,_0x3774aa);break;default:strategy[_0xfafe('0x45')](_0x2807fd,_0x4d3b16,_0x100e4d,_0x3774aa);}}else{logger[_0xfafe('0x2f')](_0xfafe('0x46'),_0x22ed19,_0x198f5a[_0xfafe('0x33')]);_0x337268[_0xfafe('0x41')]();}}}catch(_0x3ad0d1){console[_0xfafe('0x47')](_0x3ad0d1);logger[_0xfafe('0x2f')](_0xfafe('0x48'),_0x22ed19,_0x3ad0d1[_0xfafe('0x49')]);_0x337268[_0xfafe('0x41')]();}};};
\ No newline at end of file
index 6a4f6af..5cf0ef0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdaf1=['busyQueue','writeLog','STOP','TIMEOUT','exports','lodash','./util','../../../../../config/logger','routing','notificationId','agent','realtime','squeue','push','handleRun','bind','timeout','handleTimeout','drained','handleDrained','prototype','info','[%s][AGENT]\x20try\x20with\x20%s','isNil','agents','[%s][AGENT]\x20agent\x20skipped,\x20unknown\x20id\x20%s','forcedOwnership','isAgentAvailable','channel','busy','showNotification','RINGING',':FORCED','[%s][AGENT]\x20timeout\x20with\x20%s','hideNotification'];(function(_0x7eee15,_0x3fe21a){var _0x7ad23=function(_0x2de173){while(--_0x2de173){_0x7eee15['push'](_0x7eee15['shift']());}};_0x7ad23(++_0x3fe21a);}(_0xdaf1,0xb4));var _0x1daf=function(_0x4c9f76,_0x5e0403){_0x4c9f76=_0x4c9f76-0x0;var _0x551afe=_0xdaf1[_0x4c9f76];return _0x551afe;};'use strict';var _=require(_0x1daf('0x0'));var uuid=require('uuid');var util=require(_0x1daf('0x1'));var logger=require(_0x1daf('0x2'))(_0x1daf('0x3'));var Agent=function(_0x237e21,_0x31e5af,_0x131c48,_0x22bbd9){this[_0x1daf('0x4')]=uuid['v4']();this['squeue']=_0x237e21;this[_0x1daf('0x5')]=_0x31e5af;this[_0x1daf('0x6')]=_0x131c48;this[_0x1daf('0x3')]=_0x22bbd9;this[_0x1daf('0x7')][_0x1daf('0x8')](this[_0x1daf('0x9')][_0x1daf('0xa')](this),this['handleTimeout']['bind'](this));this[_0x1daf('0x7')]['on'](_0x1daf('0xb'),this[_0x1daf('0xc')][_0x1daf('0xa')](this));this[_0x1daf('0x7')]['on'](_0x1daf('0xd'),this[_0x1daf('0xe')][_0x1daf('0xa')](this));};Agent['prototype'][_0x1daf('0x8')]=function(){this[_0x1daf('0x7')][_0x1daf('0x8')](this[_0x1daf('0x9')][_0x1daf('0xa')](this),this[_0x1daf('0xc')][_0x1daf('0xa')](this));};Agent[_0x1daf('0xf')][_0x1daf('0xe')]=function(){this[_0x1daf('0xc')](!![]);};Agent[_0x1daf('0xf')][_0x1daf('0x9')]=function(_0x20b5d2){logger[_0x1daf('0x10')](_0x1daf('0x11'),this[_0x1daf('0x7')]['id'],this[_0x1daf('0x5')]['id']);if(_[_0x1daf('0x12')](this[_0x1daf('0x6')][_0x1daf('0x13')][this[_0x1daf('0x5')]['id']])){logger[_0x1daf('0x10')](_0x1daf('0x14'),this[_0x1daf('0x7')]['id'],this['agent']['id']);setTimeout(this[_0x1daf('0x8')]['bind'](this),0x3e8);}else{if(this[_0x1daf('0x3')][_0x1daf('0x15')]||util[_0x1daf('0x16')](this[_0x1daf('0x7')]['id'],this[_0x1daf('0x6')][_0x1daf('0x13')][this['agent']['id']],this[_0x1daf('0x7')][_0x1daf('0x17')],![])){this[_0x1daf('0x6')]['agents'][this['agent']['id']][_0x1daf('0x18')]=!![];this[_0x1daf('0x6')][_0x1daf('0x13')][this[_0x1daf('0x5')]['id']]['busyQueue']=undefined;util[_0x1daf('0x19')](this[_0x1daf('0x4')],this[_0x1daf('0x7')]['id'],this[_0x1daf('0x6')][_0x1daf('0x13')][this['agent']['id']],null,this['routing']);util['writeLog'](this[_0x1daf('0x7')]['id'],this['realtime'][_0x1daf('0x13')][this[_0x1daf('0x5')]['id']],_0x1daf('0x1a')+(this[_0x1daf('0x3')][_0x1daf('0x15')]?_0x1daf('0x1b'):''));}else{logger[_0x1daf('0x10')]('[%s][AGENT]\x20agent\x20%s\x20is\x20not\x20available',this[_0x1daf('0x7')]['id'],this[_0x1daf('0x5')]['id']);setTimeout(this[_0x1daf('0x8')]['bind'](this),0x3e8);}}};Agent[_0x1daf('0xf')][_0x1daf('0xc')]=function(_0x10a8dd){if(_[_0x1daf('0x12')](this[_0x1daf('0x6')]['agents'][this[_0x1daf('0x5')]['id']])){return logger['info'](_0x1daf('0x14'),this[_0x1daf('0x7')]['id'],this['agent']['id']);}else{logger[_0x1daf('0x10')](_0x1daf('0x1c'),this['squeue']['id'],this[_0x1daf('0x5')]['id']);util[_0x1daf('0x1d')](this['notificationId'],this[_0x1daf('0x7')]['id'],this[_0x1daf('0x6')][_0x1daf('0x13')][this[_0x1daf('0x5')]['id']],null,this['routing']);this[_0x1daf('0x6')][_0x1daf('0x13')][this[_0x1daf('0x5')]['id']][_0x1daf('0x18')]=![];this[_0x1daf('0x6')]['agents'][this['agent']['id']][_0x1daf('0x1e')]=undefined;util[_0x1daf('0x1f')](this[_0x1daf('0x7')]['id'],this[_0x1daf('0x6')][_0x1daf('0x13')][this[_0x1daf('0x5')]['id']],_0x10a8dd?_0x1daf('0x20'):_0x1daf('0x21'));}if(!_0x10a8dd){setTimeout(this['push'][_0x1daf('0xa')](this),0x3e8);}};function agent(_0x5f04a9,_0x944e4a,_0x157f6a,_0x445733){return new Agent(_0x5f04a9,_0x944e4a,_0x157f6a,_0x445733);}module[_0x1daf('0x22')]=agent;
\ No newline at end of file
+var _0x2599=['busy','busyQueue','showNotification','writeLog',':FORCED','isNil','[%s][AGENT]\x20timeout\x20with\x20%s','TIMEOUT','exports','lodash','uuid','../../../../../config/logger','routing','notificationId','squeue','agent','push','bind','handleTimeout','timeout','drained','handleDrained','prototype','handleRun','info','realtime','agents','[%s][AGENT]\x20agent\x20skipped,\x20unknown\x20id\x20%s','forcedOwnership','channel'];(function(_0x44d909,_0x5019b1){var _0x494812=function(_0x2c4aa6){while(--_0x2c4aa6){_0x44d909['push'](_0x44d909['shift']());}};_0x494812(++_0x5019b1);}(_0x2599,0x117));var _0x9259=function(_0x4bf962,_0x5a33b9){_0x4bf962=_0x4bf962-0x0;var _0x517958=_0x2599[_0x4bf962];return _0x517958;};'use strict';var _=require(_0x9259('0x0'));var uuid=require(_0x9259('0x1'));var util=require('./util');var logger=require(_0x9259('0x2'))(_0x9259('0x3'));var Agent=function(_0x24c4e9,_0x5184f2,_0x15a367,_0xb86f92){this[_0x9259('0x4')]=uuid['v4']();this[_0x9259('0x5')]=_0x24c4e9;this[_0x9259('0x6')]=_0x5184f2;this['realtime']=_0x15a367;this[_0x9259('0x3')]=_0xb86f92;this['squeue'][_0x9259('0x7')](this['handleRun'][_0x9259('0x8')](this),this[_0x9259('0x9')]['bind'](this));this[_0x9259('0x5')]['on'](_0x9259('0xa'),this[_0x9259('0x9')][_0x9259('0x8')](this));this[_0x9259('0x5')]['on'](_0x9259('0xb'),this[_0x9259('0xc')][_0x9259('0x8')](this));};Agent[_0x9259('0xd')]['push']=function(){this[_0x9259('0x5')][_0x9259('0x7')](this[_0x9259('0xe')][_0x9259('0x8')](this),this[_0x9259('0x9')][_0x9259('0x8')](this));};Agent[_0x9259('0xd')][_0x9259('0xc')]=function(){this['handleTimeout'](!![]);};Agent[_0x9259('0xd')][_0x9259('0xe')]=function(_0x37adef){logger[_0x9259('0xf')]('[%s][AGENT]\x20try\x20with\x20%s',this[_0x9259('0x5')]['id'],this[_0x9259('0x6')]['id']);if(_['isNil'](this[_0x9259('0x10')][_0x9259('0x11')][this[_0x9259('0x6')]['id']])){logger[_0x9259('0xf')](_0x9259('0x12'),this[_0x9259('0x5')]['id'],this[_0x9259('0x6')]['id']);setTimeout(this['push'][_0x9259('0x8')](this),0x3e8);}else{if(this['routing'][_0x9259('0x13')]||util['isAgentAvailable'](this[_0x9259('0x5')]['id'],this[_0x9259('0x10')][_0x9259('0x11')][this[_0x9259('0x6')]['id']],this['squeue'][_0x9259('0x14')],![])){this[_0x9259('0x10')][_0x9259('0x11')][this[_0x9259('0x6')]['id']][_0x9259('0x15')]=!![];this[_0x9259('0x10')][_0x9259('0x11')][this[_0x9259('0x6')]['id']][_0x9259('0x16')]=undefined;util[_0x9259('0x17')](this[_0x9259('0x4')],this[_0x9259('0x5')]['id'],this[_0x9259('0x10')][_0x9259('0x11')][this[_0x9259('0x6')]['id']],null,this['routing']);util[_0x9259('0x18')](this[_0x9259('0x5')]['id'],this[_0x9259('0x10')][_0x9259('0x11')][this[_0x9259('0x6')]['id']],'RINGING'+(this[_0x9259('0x3')][_0x9259('0x13')]?_0x9259('0x19'):''));}else{logger[_0x9259('0xf')]('[%s][AGENT]\x20agent\x20%s\x20is\x20not\x20available',this[_0x9259('0x5')]['id'],this[_0x9259('0x6')]['id']);setTimeout(this[_0x9259('0x7')][_0x9259('0x8')](this),0x3e8);}}};Agent[_0x9259('0xd')][_0x9259('0x9')]=function(_0x39edce){if(_[_0x9259('0x1a')](this['realtime'][_0x9259('0x11')][this[_0x9259('0x6')]['id']])){return logger['info']('[%s][AGENT]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x9259('0x5')]['id'],this[_0x9259('0x6')]['id']);}else{logger[_0x9259('0xf')](_0x9259('0x1b'),this['squeue']['id'],this[_0x9259('0x6')]['id']);util['hideNotification'](this[_0x9259('0x4')],this['squeue']['id'],this[_0x9259('0x10')][_0x9259('0x11')][this['agent']['id']],null,this[_0x9259('0x3')]);this[_0x9259('0x10')][_0x9259('0x11')][this['agent']['id']][_0x9259('0x15')]=![];this[_0x9259('0x10')][_0x9259('0x11')][this['agent']['id']][_0x9259('0x16')]=undefined;util[_0x9259('0x18')](this[_0x9259('0x5')]['id'],this[_0x9259('0x10')][_0x9259('0x11')][this[_0x9259('0x6')]['id']],_0x39edce?'STOP':_0x9259('0x1c'));}if(!_0x39edce){setTimeout(this['push'][_0x9259('0x8')](this),0x3e8);}};function agent(_0x28a095,_0x2e37e3,_0x5054b5,_0x32486e){return new Agent(_0x28a095,_0x2e37e3,_0x5054b5,_0x32486e);}module[_0x9259('0x1d')]=agent;
\ No newline at end of file
index 6c62887..316a261 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7804=['uuid','./util','../../../../../config/logger','routing','notificationId','squeue','queue','realtime','handleRun','bind','handleTimeout','timeout','drained','handleDrained','prototype','push','isNil','Agents','length','agents','info','isAgentAvailable','channel','writeLog','RINGING','busy','busyQueue','name','[%s][QUEUE]\x20ALL\x20AGENTS\x20ARE\x20BUSY','[%s][QUEUE]\x20EMPTY','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','hideNotification','STOP','TIMEOUT','exports'];(function(_0x10ee68,_0x2461e2){var _0x577f16=function(_0x3730cf){while(--_0x3730cf){_0x10ee68['push'](_0x10ee68['shift']());}};_0x577f16(++_0x2461e2);}(_0x7804,0x1a4));var _0x4780=function(_0x5047c8,_0x2c8dda){_0x5047c8=_0x5047c8-0x0;var _0x19960c=_0x7804[_0x5047c8];return _0x19960c;};'use strict';var _=require('lodash');var uuid=require(_0x4780('0x0'));var util=require(_0x4780('0x1'));var logger=require(_0x4780('0x2'))(_0x4780('0x3'));var Beepall=function(_0x36e941,_0x169180,_0x57d4d8,_0x3c7acb){this[_0x4780('0x4')]=uuid['v4']();this[_0x4780('0x5')]=_0x36e941;this[_0x4780('0x6')]=_0x169180;this[_0x4780('0x7')]=_0x57d4d8;this[_0x4780('0x3')]=_0x3c7acb;this[_0x4780('0x5')]['push'](this[_0x4780('0x8')][_0x4780('0x9')](this),this[_0x4780('0xa')][_0x4780('0x9')](this));this[_0x4780('0x5')]['on'](_0x4780('0xb'),this[_0x4780('0xa')]['bind'](this));this[_0x4780('0x5')]['on'](_0x4780('0xc'),this[_0x4780('0xd')][_0x4780('0x9')](this));};Beepall[_0x4780('0xe')][_0x4780('0xf')]=function(){this[_0x4780('0x5')][_0x4780('0xf')](this[_0x4780('0x8')][_0x4780('0x9')](this),this[_0x4780('0xa')][_0x4780('0x9')](this));};Beepall['prototype'][_0x4780('0xd')]=function(_0x497b5a){this[_0x4780('0xa')](!![]);};Beepall[_0x4780('0xe')][_0x4780('0x8')]=function(_0xbe8395){var _0x10a01e=!![];if(!_[_0x4780('0x10')](this[_0x4780('0x6')])&&!_[_0x4780('0x10')](this['queue'][_0x4780('0x11')])&&this[_0x4780('0x6')][_0x4780('0x11')][_0x4780('0x12')]>0x0){for(var _0x1ae051=0x0,_0x412c05;_0x1ae051<this[_0x4780('0x6')][_0x4780('0x11')][_0x4780('0x12')];_0x1ae051+=0x1){_0x412c05=this[_0x4780('0x6')][_0x4780('0x11')][_0x1ae051]['id'];if(_['isNil'](this[_0x4780('0x7')][_0x4780('0x13')][_0x412c05])){logger[_0x4780('0x14')]('[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x4780('0x5')]['id'],_0x412c05);}else{if(util[_0x4780('0x15')](this[_0x4780('0x5')]['id'],this[_0x4780('0x7')]['agents'][_0x412c05],this['squeue'][_0x4780('0x16')],!![])){_0x10a01e=![];util[_0x4780('0x17')](this[_0x4780('0x5')]['id'],this[_0x4780('0x7')][_0x4780('0x13')][_0x412c05],_0x4780('0x18'));this[_0x4780('0x7')][_0x4780('0x13')][_0x412c05][_0x4780('0x19')]=!![];this[_0x4780('0x7')][_0x4780('0x13')][_0x412c05][_0x4780('0x1a')]=this[_0x4780('0x6')][_0x4780('0x1b')];util['showNotification'](this[_0x4780('0x4')],this[_0x4780('0x5')]['id'],this['realtime'][_0x4780('0x13')][_0x412c05],this['queue'],this[_0x4780('0x3')]);}}}if(_0x10a01e){logger[_0x4780('0x14')](_0x4780('0x1c'),this['squeue']['id']);setTimeout(this['push']['bind'](this),0x3e8);}}else{logger[_0x4780('0x14')](_0x4780('0x1d'),this[_0x4780('0x5')]['id']);setTimeout(this[_0x4780('0xf')][_0x4780('0x9')](this),0x3e8);}};Beepall[_0x4780('0xe')][_0x4780('0xa')]=function(_0x2baf2d){if(!_[_0x4780('0x10')](this[_0x4780('0x6')])&&!_[_0x4780('0x10')](this['queue']['Agents'])){for(var _0x27fc46=0x0,_0x554799;_0x27fc46<this['queue'][_0x4780('0x11')][_0x4780('0x12')];_0x27fc46+=0x1){_0x554799=this[_0x4780('0x6')][_0x4780('0x11')][_0x27fc46]['id'];if(_[_0x4780('0x10')](this[_0x4780('0x7')][_0x4780('0x13')][_0x554799])){logger[_0x4780('0x14')](_0x4780('0x1e'),this['squeue']['id'],_0x554799);}else{util[_0x4780('0x1f')](this[_0x4780('0x4')],this[_0x4780('0x5')]['id'],this['realtime']['agents'][_0x554799],this[_0x4780('0x6')],this['routing']);util[_0x4780('0x17')](this[_0x4780('0x5')]['id'],this[_0x4780('0x7')][_0x4780('0x13')][_0x554799],_0x2baf2d?_0x4780('0x20'):_0x4780('0x21'));this[_0x4780('0x7')][_0x4780('0x13')][_0x554799][_0x4780('0x19')]=![];this[_0x4780('0x7')][_0x4780('0x13')][_0x554799][_0x4780('0x1a')]=undefined;}}}if(!_0x2baf2d){setTimeout(this[_0x4780('0xf')][_0x4780('0x9')](this),0x3e8);}};function beepall(_0x3cae35,_0x198b91,_0x1a8bf3,_0x5db8c9){return new Beepall(_0x3cae35,_0x198b91,_0x1a8bf3,_0x5db8c9);}module[_0x4780('0x22')]=beepall;
\ No newline at end of file
+var _0x1689=['timeout','drained','handleDrained','handleRun','prototype','isNil','queue','Agents','length','agents','info','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','isAgentAvailable','writeLog','RINGING','busy','busyQueue','showNotification','hideNotification','notificationId','STOP','TIMEOUT','exports','lodash','uuid','./util','../../../../../config/logger','routing','squeue','realtime','push','bind','handleTimeout'];(function(_0x5ca927,_0x38c385){var _0x1eb900=function(_0x15fa00){while(--_0x15fa00){_0x5ca927['push'](_0x5ca927['shift']());}};_0x1eb900(++_0x38c385);}(_0x1689,0x182));var _0x9168=function(_0xdc91b9,_0x5c7440){_0xdc91b9=_0xdc91b9-0x0;var _0x1d6516=_0x1689[_0xdc91b9];return _0x1d6516;};'use strict';var _=require(_0x9168('0x0'));var uuid=require(_0x9168('0x1'));var util=require(_0x9168('0x2'));var logger=require(_0x9168('0x3'))(_0x9168('0x4'));var Beepall=function(_0x170c8a,_0x2ab555,_0x1f6e75,_0xeb8ab6){this['notificationId']=uuid['v4']();this[_0x9168('0x5')]=_0x170c8a;this['queue']=_0x2ab555;this[_0x9168('0x6')]=_0x1f6e75;this['routing']=_0xeb8ab6;this[_0x9168('0x5')][_0x9168('0x7')](this['handleRun'][_0x9168('0x8')](this),this[_0x9168('0x9')][_0x9168('0x8')](this));this['squeue']['on'](_0x9168('0xa'),this[_0x9168('0x9')][_0x9168('0x8')](this));this[_0x9168('0x5')]['on'](_0x9168('0xb'),this[_0x9168('0xc')][_0x9168('0x8')](this));};Beepall['prototype'][_0x9168('0x7')]=function(){this[_0x9168('0x5')][_0x9168('0x7')](this[_0x9168('0xd')][_0x9168('0x8')](this),this[_0x9168('0x9')][_0x9168('0x8')](this));};Beepall[_0x9168('0xe')]['handleDrained']=function(_0x5ce4ae){this[_0x9168('0x9')](!![]);};Beepall[_0x9168('0xe')]['handleRun']=function(_0x41a1ed){var _0x46bc0c=!![];if(!_['isNil'](this['queue'])&&!_[_0x9168('0xf')](this[_0x9168('0x10')][_0x9168('0x11')])&&this[_0x9168('0x10')]['Agents'][_0x9168('0x12')]>0x0){for(var _0x23bd8a=0x0,_0x4f31b3;_0x23bd8a<this[_0x9168('0x10')]['Agents'][_0x9168('0x12')];_0x23bd8a+=0x1){_0x4f31b3=this['queue'][_0x9168('0x11')][_0x23bd8a]['id'];if(_[_0x9168('0xf')](this[_0x9168('0x6')][_0x9168('0x13')][_0x4f31b3])){logger[_0x9168('0x14')](_0x9168('0x15'),this[_0x9168('0x5')]['id'],_0x4f31b3);}else{if(util[_0x9168('0x16')](this['squeue']['id'],this[_0x9168('0x6')][_0x9168('0x13')][_0x4f31b3],this['squeue']['channel'],!![])){_0x46bc0c=![];util[_0x9168('0x17')](this[_0x9168('0x5')]['id'],this['realtime'][_0x9168('0x13')][_0x4f31b3],_0x9168('0x18'));this[_0x9168('0x6')][_0x9168('0x13')][_0x4f31b3][_0x9168('0x19')]=!![];this[_0x9168('0x6')][_0x9168('0x13')][_0x4f31b3][_0x9168('0x1a')]=this['queue']['name'];util[_0x9168('0x1b')](this['notificationId'],this[_0x9168('0x5')]['id'],this[_0x9168('0x6')][_0x9168('0x13')][_0x4f31b3],this[_0x9168('0x10')],this['routing']);}}}if(_0x46bc0c){logger[_0x9168('0x14')]('[%s][QUEUE]\x20ALL\x20AGENTS\x20ARE\x20BUSY',this['squeue']['id']);setTimeout(this[_0x9168('0x7')][_0x9168('0x8')](this),0x3e8);}}else{logger[_0x9168('0x14')]('[%s][QUEUE]\x20EMPTY',this[_0x9168('0x5')]['id']);setTimeout(this[_0x9168('0x7')][_0x9168('0x8')](this),0x3e8);}};Beepall['prototype'][_0x9168('0x9')]=function(_0x642b35){if(!_['isNil'](this[_0x9168('0x10')])&&!_[_0x9168('0xf')](this[_0x9168('0x10')][_0x9168('0x11')])){for(var _0xe32f4c=0x0,_0x325aae;_0xe32f4c<this[_0x9168('0x10')][_0x9168('0x11')][_0x9168('0x12')];_0xe32f4c+=0x1){_0x325aae=this[_0x9168('0x10')][_0x9168('0x11')][_0xe32f4c]['id'];if(_[_0x9168('0xf')](this[_0x9168('0x6')][_0x9168('0x13')][_0x325aae])){logger[_0x9168('0x14')]('[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x9168('0x5')]['id'],_0x325aae);}else{util[_0x9168('0x1c')](this[_0x9168('0x1d')],this['squeue']['id'],this[_0x9168('0x6')][_0x9168('0x13')][_0x325aae],this[_0x9168('0x10')],this[_0x9168('0x4')]);util[_0x9168('0x17')](this[_0x9168('0x5')]['id'],this[_0x9168('0x6')][_0x9168('0x13')][_0x325aae],_0x642b35?_0x9168('0x1e'):_0x9168('0x1f'));this[_0x9168('0x6')][_0x9168('0x13')][_0x325aae][_0x9168('0x19')]=![];this[_0x9168('0x6')]['agents'][_0x325aae][_0x9168('0x1a')]=undefined;}}}if(!_0x642b35){setTimeout(this[_0x9168('0x7')]['bind'](this),0x3e8);}};function beepall(_0x16befe,_0xbb7f7d,_0x8ece97,_0x4c0330){return new Beepall(_0x16befe,_0xbb7f7d,_0x8ece97,_0x4c0330);}module[_0x9168('0x20')]=beepall;
\ No newline at end of file
index 7394637..e8a31ea 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x565f=['./beepall','./agent','./rrmemory'];(function(_0x417600,_0x2439fe){var _0x1b9bb3=function(_0xc8e78d){while(--_0xc8e78d){_0x417600['push'](_0x417600['shift']());}};_0x1b9bb3(++_0x2439fe);}(_0x565f,0x68));var _0xf565=function(_0x5615b2,_0x5634d8){_0x5615b2=_0x5615b2-0x0;var _0x372a86=_0x565f[_0x5615b2];return _0x372a86;};'use strict';module['exports']={'rrmemory':require(_0xf565('0x0')),'beepall':require(_0xf565('0x1')),'agent':require(_0xf565('0x2'))};
\ No newline at end of file
+var _0x00b3=['./agent','exports'];(function(_0x49bd05,_0xf8935){var _0x2b5ea0=function(_0x40b504){while(--_0x40b504){_0x49bd05['push'](_0x49bd05['shift']());}};_0x2b5ea0(++_0xf8935);}(_0x00b3,0x97));var _0x300b=function(_0x14db25,_0x516eca){_0x14db25=_0x14db25-0x0;var _0x4c28a9=_0x00b3[_0x14db25];return _0x4c28a9;};'use strict';module[_0x300b('0x0')]={'rrmemory':require('./rrmemory'),'beepall':require('./beepall'),'agent':require(_0x300b('0x1'))};
\ No newline at end of file
index 9107bdc..7e7c2bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee00=['isNil','exports','lodash','uuid','notificationId','squeue','realtime','intervals','handleRun','bind','handleTimeout','timeout','drained','handleDrained','prototype','push','handleCheckReject','isAgentAvailable','agentId','channel','info','done','queue','mapAgentsId','agents','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','busy','busyQueue','name','showNotification','writeLog','RINGING','[%s][QUEUE]\x20agent\x20skipped,\x20not\x20available\x20id\x20%s','[%s][QUEUE]\x20timeout\x20with\x20%s'];(function(_0x47fec6,_0x5ba966){var _0xd623a5=function(_0x2e588f){while(--_0x2e588f){_0x47fec6['push'](_0x47fec6['shift']());}};_0xd623a5(++_0x5ba966);}(_0xee00,0xf0));var _0x0ee0=function(_0x5d057b,_0x3d31b8){_0x5d057b=_0x5d057b-0x0;var _0x57d1b3=_0xee00[_0x5d057b];return _0x57d1b3;};'use strict';var rr=require('rr');var _=require(_0x0ee0('0x0'));var uuid=require(_0x0ee0('0x1'));var util=require('./util');var logger=require('../../../../../config/logger')('routing');var RRMemory=function(_0x3df0e5,_0x2919df,_0x45c015,_0x584646){this[_0x0ee0('0x2')]=uuid['v4']();this[_0x0ee0('0x3')]=_0x3df0e5;this['queue']=_0x2919df;this[_0x0ee0('0x4')]=_0x45c015;this['routing']=_0x584646;this[_0x0ee0('0x5')]={};this[_0x0ee0('0x3')]['push'](this[_0x0ee0('0x6')][_0x0ee0('0x7')](this),this[_0x0ee0('0x8')][_0x0ee0('0x7')](this),this['module']);this[_0x0ee0('0x3')]['on'](_0x0ee0('0x9'),this[_0x0ee0('0x8')][_0x0ee0('0x7')](this));this[_0x0ee0('0x3')]['on'](_0x0ee0('0xa'),this[_0x0ee0('0xb')][_0x0ee0('0x7')](this));};RRMemory[_0x0ee0('0xc')][_0x0ee0('0xd')]=function(){this['squeue'][_0x0ee0('0xd')](this['handleRun'][_0x0ee0('0x7')](this),this[_0x0ee0('0x8')][_0x0ee0('0x7')](this));};RRMemory['prototype']['handleDrained']=function(_0x2dff61){this[_0x0ee0('0x8')](!![]);};RRMemory[_0x0ee0('0xc')][_0x0ee0('0xe')]=function(_0x220045){if(util[_0x0ee0('0xf')](this[_0x0ee0('0x3')]['id'],this[_0x0ee0('0x4')]['agents'][this[_0x0ee0('0x10')]],this['squeue'][_0x0ee0('0x11')],!![])){logger[_0x0ee0('0x12')]('[%s][QUEUE]\x20available\x20again\x20%s',this['squeue']['id'],this['agentId']);clearInterval(this[_0x0ee0('0x5')][this[_0x0ee0('0x10')]]);_0x220045[_0x0ee0('0x13')]();setTimeout(this['push']['bind'](this),0x3e8);}};RRMemory[_0x0ee0('0xc')]['handleRun']=function(_0x599d7b){this[_0x0ee0('0x10')]=rr(this[_0x0ee0('0x14')][_0x0ee0('0x15')]);logger[_0x0ee0('0x12')]('[%s][QUEUE]\x20try\x20with\x20%s',this[_0x0ee0('0x3')]['id'],this['agentId']);if(_['isNil'](this[_0x0ee0('0x4')][_0x0ee0('0x16')][this[_0x0ee0('0x10')]])){logger['info'](_0x0ee0('0x17'),this[_0x0ee0('0x3')]['id'],this[_0x0ee0('0x10')]);_0x599d7b['done']();setTimeout(this[_0x0ee0('0xd')][_0x0ee0('0x7')](this),0x3e8);}else{if(util[_0x0ee0('0xf')](this[_0x0ee0('0x3')]['id'],this['realtime']['agents'][this['agentId']],this[_0x0ee0('0x3')]['channel'],!![])){this['realtime']['agents'][this[_0x0ee0('0x10')]][_0x0ee0('0x18')]=!![];this['realtime'][_0x0ee0('0x16')][this[_0x0ee0('0x10')]][_0x0ee0('0x19')]=this[_0x0ee0('0x14')][_0x0ee0('0x1a')];util[_0x0ee0('0x1b')](this['notificationId'],this[_0x0ee0('0x3')]['id'],this[_0x0ee0('0x4')][_0x0ee0('0x16')][this[_0x0ee0('0x10')]],this[_0x0ee0('0x14')],this['routing']);util[_0x0ee0('0x1c')](this['squeue']['id'],this['realtime']['agents'][this[_0x0ee0('0x10')]],_0x0ee0('0x1d'));this[_0x0ee0('0x5')][this[_0x0ee0('0x10')]]=setInterval(this[_0x0ee0('0xe')][_0x0ee0('0x7')](this,_0x599d7b),0x3e8);}else{logger[_0x0ee0('0x12')](_0x0ee0('0x1e'),this[_0x0ee0('0x3')]['id'],this['agentId']);_0x599d7b['done']();setTimeout(this[_0x0ee0('0xd')][_0x0ee0('0x7')](this),0x3e8);}}};RRMemory[_0x0ee0('0xc')][_0x0ee0('0x8')]=function(_0x2468ae){logger['info'](_0x0ee0('0x1f'),this['squeue']['id'],this[_0x0ee0('0x10')]);if(_[_0x0ee0('0x20')](this['realtime'][_0x0ee0('0x16')][this[_0x0ee0('0x10')]])){logger[_0x0ee0('0x12')]('[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x0ee0('0x3')]['id'],this[_0x0ee0('0x10')]);}else{clearInterval(this[_0x0ee0('0x5')][this[_0x0ee0('0x10')]]);util['hideNotification'](this[_0x0ee0('0x2')],this['squeue']['id'],this[_0x0ee0('0x4')][_0x0ee0('0x16')][this[_0x0ee0('0x10')]],this['queue'],this['routing']);util[_0x0ee0('0x1c')](this[_0x0ee0('0x3')]['id'],this[_0x0ee0('0x4')][_0x0ee0('0x16')][this[_0x0ee0('0x10')]],'TIMEOUT');this[_0x0ee0('0x4')][_0x0ee0('0x16')][this[_0x0ee0('0x10')]][_0x0ee0('0x18')]=![];this[_0x0ee0('0x4')]['agents'][this[_0x0ee0('0x10')]]['busyQueue']=undefined;}if(!_0x2468ae){setTimeout(this[_0x0ee0('0xd')][_0x0ee0('0x7')](this),0x3e8);}};function rrmemory(_0x245e60,_0xac420d,_0x25acbf,_0x2b6b8d){return new RRMemory(_0x245e60,_0xac420d,_0x25acbf,_0x2b6b8d);}module[_0x0ee0('0x21')]=rrmemory;
\ No newline at end of file
+var _0xb227=['routing','notificationId','squeue','realtime','intervals','push','handleTimeout','bind','timeout','drained','handleDrained','prototype','handleCheckReject','isAgentAvailable','agentId','info','done','handleRun','queue','mapAgentsId','agents','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','channel','busy','busyQueue','writeLog','[%s][QUEUE]\x20agent\x20skipped,\x20not\x20available\x20id\x20%s','[%s][QUEUE]\x20timeout\x20with\x20%s','isNil','exports','lodash','uuid','./util'];(function(_0x118b97,_0x2f8938){var _0xf21d99=function(_0x5ce9ac){while(--_0x5ce9ac){_0x118b97['push'](_0x118b97['shift']());}};_0xf21d99(++_0x2f8938);}(_0xb227,0x126));var _0x7b22=function(_0x40ea36,_0x2258d5){_0x40ea36=_0x40ea36-0x0;var _0x1c7254=_0xb227[_0x40ea36];return _0x1c7254;};'use strict';var rr=require('rr');var _=require(_0x7b22('0x0'));var uuid=require(_0x7b22('0x1'));var util=require(_0x7b22('0x2'));var logger=require('../../../../../config/logger')(_0x7b22('0x3'));var RRMemory=function(_0x1d520d,_0x31a133,_0x4c11bd,_0x401b74){this[_0x7b22('0x4')]=uuid['v4']();this[_0x7b22('0x5')]=_0x1d520d;this['queue']=_0x31a133;this[_0x7b22('0x6')]=_0x4c11bd;this[_0x7b22('0x3')]=_0x401b74;this[_0x7b22('0x7')]={};this['squeue'][_0x7b22('0x8')](this['handleRun']['bind'](this),this[_0x7b22('0x9')][_0x7b22('0xa')](this),this['module']);this[_0x7b22('0x5')]['on'](_0x7b22('0xb'),this[_0x7b22('0x9')][_0x7b22('0xa')](this));this[_0x7b22('0x5')]['on'](_0x7b22('0xc'),this[_0x7b22('0xd')][_0x7b22('0xa')](this));};RRMemory['prototype'][_0x7b22('0x8')]=function(){this[_0x7b22('0x5')][_0x7b22('0x8')](this['handleRun'][_0x7b22('0xa')](this),this[_0x7b22('0x9')]['bind'](this));};RRMemory[_0x7b22('0xe')][_0x7b22('0xd')]=function(_0x5022b5){this[_0x7b22('0x9')](!![]);};RRMemory['prototype'][_0x7b22('0xf')]=function(_0x118f01){if(util[_0x7b22('0x10')](this[_0x7b22('0x5')]['id'],this[_0x7b22('0x6')]['agents'][this[_0x7b22('0x11')]],this[_0x7b22('0x5')]['channel'],!![])){logger[_0x7b22('0x12')]('[%s][QUEUE]\x20available\x20again\x20%s',this[_0x7b22('0x5')]['id'],this[_0x7b22('0x11')]);clearInterval(this['intervals'][this['agentId']]);_0x118f01[_0x7b22('0x13')]();setTimeout(this[_0x7b22('0x8')][_0x7b22('0xa')](this),0x3e8);}};RRMemory[_0x7b22('0xe')][_0x7b22('0x14')]=function(_0x1c40cd){this[_0x7b22('0x11')]=rr(this[_0x7b22('0x15')][_0x7b22('0x16')]);logger[_0x7b22('0x12')]('[%s][QUEUE]\x20try\x20with\x20%s',this[_0x7b22('0x5')]['id'],this[_0x7b22('0x11')]);if(_['isNil'](this[_0x7b22('0x6')][_0x7b22('0x17')][this[_0x7b22('0x11')]])){logger[_0x7b22('0x12')](_0x7b22('0x18'),this['squeue']['id'],this[_0x7b22('0x11')]);_0x1c40cd[_0x7b22('0x13')]();setTimeout(this['push']['bind'](this),0x3e8);}else{if(util['isAgentAvailable'](this[_0x7b22('0x5')]['id'],this[_0x7b22('0x6')][_0x7b22('0x17')][this[_0x7b22('0x11')]],this[_0x7b22('0x5')][_0x7b22('0x19')],!![])){this['realtime'][_0x7b22('0x17')][this['agentId']][_0x7b22('0x1a')]=!![];this['realtime'][_0x7b22('0x17')][this[_0x7b22('0x11')]][_0x7b22('0x1b')]=this[_0x7b22('0x15')]['name'];util['showNotification'](this['notificationId'],this[_0x7b22('0x5')]['id'],this['realtime'][_0x7b22('0x17')][this[_0x7b22('0x11')]],this['queue'],this[_0x7b22('0x3')]);util[_0x7b22('0x1c')](this[_0x7b22('0x5')]['id'],this[_0x7b22('0x6')][_0x7b22('0x17')][this[_0x7b22('0x11')]],'RINGING');this[_0x7b22('0x7')][this[_0x7b22('0x11')]]=setInterval(this['handleCheckReject'][_0x7b22('0xa')](this,_0x1c40cd),0x3e8);}else{logger['info'](_0x7b22('0x1d'),this['squeue']['id'],this['agentId']);_0x1c40cd['done']();setTimeout(this[_0x7b22('0x8')][_0x7b22('0xa')](this),0x3e8);}}};RRMemory[_0x7b22('0xe')][_0x7b22('0x9')]=function(_0x4f996f){logger[_0x7b22('0x12')](_0x7b22('0x1e'),this['squeue']['id'],this[_0x7b22('0x11')]);if(_[_0x7b22('0x1f')](this[_0x7b22('0x6')][_0x7b22('0x17')][this[_0x7b22('0x11')]])){logger[_0x7b22('0x12')](_0x7b22('0x18'),this[_0x7b22('0x5')]['id'],this['agentId']);}else{clearInterval(this[_0x7b22('0x7')][this[_0x7b22('0x11')]]);util['hideNotification'](this[_0x7b22('0x4')],this[_0x7b22('0x5')]['id'],this[_0x7b22('0x6')][_0x7b22('0x17')][this[_0x7b22('0x11')]],this['queue'],this[_0x7b22('0x3')]);util[_0x7b22('0x1c')](this[_0x7b22('0x5')]['id'],this[_0x7b22('0x6')][_0x7b22('0x17')][this[_0x7b22('0x11')]],'TIMEOUT');this[_0x7b22('0x6')][_0x7b22('0x17')][this[_0x7b22('0x11')]][_0x7b22('0x1a')]=![];this[_0x7b22('0x6')][_0x7b22('0x17')][this[_0x7b22('0x11')]][_0x7b22('0x1b')]=undefined;}if(!_0x4f996f){setTimeout(this[_0x7b22('0x8')][_0x7b22('0xa')](this),0x3e8);}};function rrmemory(_0xac45e3,_0x4fdfc2,_0x404369,_0x367b24){return new RRMemory(_0xac45e3,_0x4fdfc2,_0x404369,_0x367b24);}module[_0x7b22('0x20')]=rrmemory;
\ No newline at end of file
index dbddc46..ad57f77 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe312=['writeLog','lodash','util','../utils','mustache','../../../../../config/environment','routing','redis','defaults','localhost','socket.io-emitter','format','name','emit','user:save','split','\x20interaction','notificationSound','account','body','queue','msg','getMustacheRender','notificationTemplate','I\x20can\x27t\x20render\x20your\x20template','error','[%s][QUEUE]\x20%s','remove','info','[%s][QUEUE][AGENT:%s][STATUS:%s]','isAgentAvailable','busy','online','OFFLINE','Pause','PAUSE','hasOwnProperty','CurrentCapacity','Capacity','toUpperCase','\x20MAXCAPACITY'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0xe312,0x120));var _0x2e31=function(_0x3ff085,_0x27c92e){_0x3ff085=_0x3ff085-0x0;var _0x2b68c3=_0xe312[_0x3ff085];return _0x2b68c3;};'use strict';var _=require(_0x2e31('0x0'));var util=require(_0x2e31('0x1'));var utils=require(_0x2e31('0x2'));var Mustache=require(_0x2e31('0x3'));var Redis=require('ioredis');var config=require(_0x2e31('0x4'));var logger=require('../../../../../config/logger')(_0x2e31('0x5'));config[_0x2e31('0x6')]=_[_0x2e31('0x7')](config['redis'],{'host':_0x2e31('0x8'),'port':0x18eb});var io=require(_0x2e31('0x9'))(new Redis(config[_0x2e31('0x6')]));function emit(_0xa8be37,_0x394528,_0x1cd7ed){io['to'](_0xa8be37)['emit'](_0x394528,_0x1cd7ed);}function sendNotification(_0x5f19be,_0x3d966b,_0x5628e4,_0x584809,_0x3341d8,_0x54b3af){io['to'](util[_0x2e31('0xa')]('user:%s',_0x584809[_0x2e31('0xb')]))[_0x2e31('0xc')](_0x2e31('0xd'),_0x584809);var _0x133f37=_0x54b3af||{};var _0xd4ea27=_0x5628e4[_0x2e31('0xe')]('.');var _0x3be28d={'uniqueid':_0x3d966b,'channel':_0xd4ea27[0x0],'id':_0xd4ea27[0x1],'title':_0xd4ea27[0x0]+_0x2e31('0xf'),'interactionId':_0xd4ea27[0x2],'queue':_0x3341d8?_0x3341d8[_0x2e31('0xb')]:null,'sound':_0x133f37['account'][_0x2e31('0x10')],'shake':_0x133f37[_0x2e31('0x11')]['notificationShake']};try{if(!_0x133f37[_0x2e31('0x12')]){_0x133f37['body']={};}if(_0x3341d8){_0x133f37[_0x2e31('0x12')][_0x2e31('0x13')]=_0x3341d8;}else if(_0x133f37[_0x2e31('0x12')]['queue']){delete _0x133f37[_0x2e31('0x12')][_0x2e31('0x13')];}_0x3be28d[_0x2e31('0x14')]=utils[_0x2e31('0x15')](_0x133f37[_0x2e31('0x11')][_0x2e31('0x16')],_0x133f37);}catch(_0x58573d){_0x3be28d[_0x2e31('0x14')]=_0x2e31('0x17');logger[_0x2e31('0x18')](util[_0x2e31('0xa')](_0x2e31('0x19'),_0x3d966b,_0x58573d['message']));}io['to'](util[_0x2e31('0xa')]('user:%s',_0x584809[_0x2e31('0xb')]))[_0x2e31('0xc')](util['format']('notification:%s',_0x5f19be?'save':_0x2e31('0x1a')),_0x3be28d);}function writeLog(_0x24e5f7,_0x5888ce,_0x2a13d6){return logger[_0x2e31('0x1b')](util[_0x2e31('0xa')](_0x2e31('0x1c'),_0x24e5f7,_0x5888ce[_0x2e31('0xb')],_0x2a13d6));}exports[_0x2e31('0x1d')]=function(_0x5b802f,_0x5472ea,_0x29d4b4,_0xf3c726){if(_0x5472ea[_0x2e31('0x1e')]){writeLog(_0x5b802f,_0x5472ea,'BUSY');return![];}if(!_0x5472ea[_0x2e31('0x1f')]){writeLog(_0x5b802f,_0x5472ea,_0x2e31('0x20'));return![];}if(_0x5472ea[_0x29d4b4+_0x2e31('0x21')]){writeLog(_0x5b802f,_0x5472ea,_0x2e31('0x22'));return![];}if(_0xf3c726&&_0x5472ea[_0x2e31('0x23')](_0x29d4b4+'Capacity')&&_0x5472ea[_0x2e31('0x23')](_0x29d4b4+_0x2e31('0x24'))){if(_0x5472ea[_0x29d4b4+_0x2e31('0x25')]>0x0&&_0x5472ea[_0x29d4b4+_0x2e31('0x24')]>=_0x5472ea[_0x29d4b4+_0x2e31('0x25')]){writeLog(_0x5b802f,_0x5472ea,_0x29d4b4[_0x2e31('0x26')]()+_0x2e31('0x27'));return![];}}return!![];};exports['showNotification']=function(_0x49540a,_0x442feb,_0x75a718,_0x4dc1a3,_0x3c54ce){return sendNotification(!![],_0x49540a,_0x442feb,_0x75a718,_0x4dc1a3,_0x3c54ce);};exports['hideNotification']=function(_0x35c198,_0x5776ff,_0x3344f4,_0x115780,_0x21a269){return sendNotification(![],_0x35c198,_0x5776ff,_0x3344f4,_0x115780,_0x21a269);};exports[_0x2e31('0x28')]=writeLog;
\ No newline at end of file
+var _0x9dca=['../../../../../config/environment','../../../../../config/logger','routing','redis','localhost','socket.io-emitter','emit','format','user:%s','user:save','split','\x20interaction','name','notificationSound','account','notificationShake','body','queue','msg','getMustacheRender','notificationTemplate','I\x20can\x27t\x20render\x20your\x20template','error','[%s][QUEUE]\x20%s','message','notification:%s','save','[%s][QUEUE][AGENT:%s][STATUS:%s]','busy','BUSY','OFFLINE','Pause','PAUSE','Capacity','CurrentCapacity','toUpperCase','showNotification','hideNotification','writeLog','lodash','util','../utils','ioredis'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x9dca,0x129));var _0xa9dc=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x9dca[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0xa9dc('0x0'));var util=require(_0xa9dc('0x1'));var utils=require(_0xa9dc('0x2'));var Mustache=require('mustache');var Redis=require(_0xa9dc('0x3'));var config=require(_0xa9dc('0x4'));var logger=require(_0xa9dc('0x5'))(_0xa9dc('0x6'));config['redis']=_['defaults'](config[_0xa9dc('0x7')],{'host':_0xa9dc('0x8'),'port':0x18eb});var io=require(_0xa9dc('0x9'))(new Redis(config[_0xa9dc('0x7')]));function emit(_0x409a9a,_0x15d240,_0x5cb9c0){io['to'](_0x409a9a)[_0xa9dc('0xa')](_0x15d240,_0x5cb9c0);}function sendNotification(_0x5b2060,_0x55ea64,_0x57e674,_0x377628,_0xedcd06,_0x11becd){io['to'](util[_0xa9dc('0xb')](_0xa9dc('0xc'),_0x377628['name']))['emit'](_0xa9dc('0xd'),_0x377628);var _0x11d0fa=_0x11becd||{};var _0x1171ff=_0x57e674[_0xa9dc('0xe')]('.');var _0x5590e9={'uniqueid':_0x55ea64,'channel':_0x1171ff[0x0],'id':_0x1171ff[0x1],'title':_0x1171ff[0x0]+_0xa9dc('0xf'),'interactionId':_0x1171ff[0x2],'queue':_0xedcd06?_0xedcd06[_0xa9dc('0x10')]:null,'sound':_0x11d0fa['account'][_0xa9dc('0x11')],'shake':_0x11d0fa[_0xa9dc('0x12')][_0xa9dc('0x13')]};try{if(!_0x11d0fa[_0xa9dc('0x14')]){_0x11d0fa[_0xa9dc('0x14')]={};}if(_0xedcd06){_0x11d0fa[_0xa9dc('0x14')]['queue']=_0xedcd06;}else if(_0x11d0fa[_0xa9dc('0x14')][_0xa9dc('0x15')]){delete _0x11d0fa[_0xa9dc('0x14')][_0xa9dc('0x15')];}_0x5590e9[_0xa9dc('0x16')]=utils[_0xa9dc('0x17')](_0x11d0fa['account'][_0xa9dc('0x18')],_0x11d0fa);}catch(_0x294e51){_0x5590e9[_0xa9dc('0x16')]=_0xa9dc('0x19');logger[_0xa9dc('0x1a')](util[_0xa9dc('0xb')](_0xa9dc('0x1b'),_0x55ea64,_0x294e51[_0xa9dc('0x1c')]));}io['to'](util[_0xa9dc('0xb')](_0xa9dc('0xc'),_0x377628['name']))[_0xa9dc('0xa')](util['format'](_0xa9dc('0x1d'),_0x5b2060?_0xa9dc('0x1e'):'remove'),_0x5590e9);}function writeLog(_0x3d416a,_0x1f4e7e,_0x226346){return logger['info'](util[_0xa9dc('0xb')](_0xa9dc('0x1f'),_0x3d416a,_0x1f4e7e[_0xa9dc('0x10')],_0x226346));}exports['isAgentAvailable']=function(_0x2903fb,_0x2ac923,_0x3d1547,_0x24cfc4){if(_0x2ac923[_0xa9dc('0x20')]){writeLog(_0x2903fb,_0x2ac923,_0xa9dc('0x21'));return![];}if(!_0x2ac923['online']){writeLog(_0x2903fb,_0x2ac923,_0xa9dc('0x22'));return![];}if(_0x2ac923[_0x3d1547+_0xa9dc('0x23')]){writeLog(_0x2903fb,_0x2ac923,_0xa9dc('0x24'));return![];}if(_0x24cfc4&&_0x2ac923['hasOwnProperty'](_0x3d1547+_0xa9dc('0x25'))&&_0x2ac923['hasOwnProperty'](_0x3d1547+_0xa9dc('0x26'))){if(_0x2ac923[_0x3d1547+_0xa9dc('0x25')]>0x0&&_0x2ac923[_0x3d1547+_0xa9dc('0x26')]>=_0x2ac923[_0x3d1547+_0xa9dc('0x25')]){writeLog(_0x2903fb,_0x2ac923,_0x3d1547[_0xa9dc('0x27')]()+'\x20MAXCAPACITY');return![];}}return!![];};exports[_0xa9dc('0x28')]=function(_0x2b5291,_0x183216,_0x169587,_0x4630dd,_0xb77cc5){return sendNotification(!![],_0x2b5291,_0x183216,_0x169587,_0x4630dd,_0xb77cc5);};exports[_0xa9dc('0x29')]=function(_0x588f0d,_0x208336,_0x33ca6f,_0x534ce8,_0x2c3ab1){return sendNotification(![],_0x588f0d,_0x208336,_0x33ca6f,_0x534ce8,_0x2c3ab1);};exports[_0xa9dc('0x2a')]=writeLog;
\ No newline at end of file
index ed14235..0a0f6d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2e0b=['join','info','[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next','getMustacheRender','[%s][SYSTEM]\x20commnad:\x20%s','exec','trim','[%s][SYSTEM]\x20result\x20code:\x20%s','replace','isNil','[%s][SYSTEM]\x20no\x20variable','body','[%s][SYSTEM]\x20set\x20variable\x20%s:\x20%s','next','error','isObject','stringify','validate','shelljs','./utils','../../../../config/logger','routing','string','command\x20is\x20a\x20string\x20and\x20it\x20is\x20required','length','[%s][SYSTEM]\x20%s','map'];(function(_0x3f773e,_0x157da7){var _0x310112=function(_0xb669f9){while(--_0xb669f9){_0x3f773e['push'](_0x3f773e['shift']());}};_0x310112(++_0x157da7);}(_0x2e0b,0xe9));var _0xb2e0=function(_0x48f2b7,_0x40f214){_0x48f2b7=_0x48f2b7-0x0;var _0x54506f=_0x2e0b[_0x48f2b7];return _0x54506f;};'use strict';var schema=require(_0xb2e0('0x0'));var sh=require(_0xb2e0('0x1'));var _=require('lodash');var utils=require(_0xb2e0('0x2'));var logger=require(_0xb2e0('0x3'))(_0xb2e0('0x4'));var system=schema({'command':{'type':_0xb2e0('0x5'),'required':!![],'message':_0xb2e0('0x6')}});exports['consequence']=function(_0x32c436,_0x37836a){return function(_0x2bbe0c){try{var _0x4630a3={'command':_0x37836a[0x0]};var _0x470e0d=system[_0xb2e0('0x0')](_0x4630a3,{'typecast':!![]});if(_0x470e0d[_0xb2e0('0x7')]){logger['error'](_0xb2e0('0x8'),_0x32c436,_[_0xb2e0('0x9')](_0x470e0d,'message')[_0xb2e0('0xa')](',\x20'));logger[_0xb2e0('0xb')](_0xb2e0('0xc'),_0x32c436);_0x2bbe0c['next']();}else{var _0xcf2406=this;var _0x92eb18=utils[_0xb2e0('0xd')](_0x37836a[0x0],this);logger[_0xb2e0('0xb')](_0xb2e0('0xe'),_0x32c436,_0x92eb18);sh[_0xb2e0('0xf')](_[_0xb2e0('0x10')](_0x92eb18),function(_0xdb7b57,_0x37b7a1){logger[_0xb2e0('0xb')](_0xb2e0('0x11'),_0x32c436,_0xdb7b57);if(_0xdb7b57==0x0){var _0x15f5aa=_0x37b7a1[_0xb2e0('0x12')](/(\r\n|\n|\r)/gm,'');if(_[_0xb2e0('0x13')](_0x37836a[0x1])||_['isEmpty'](_0x37836a[0x1])){logger[_0xb2e0('0xb')](_0xb2e0('0x14'),_0x32c436);_0xcf2406[_0xb2e0('0x15')][_0x37836a[0x1]]=_0x15f5aa;}else{logger[_0xb2e0('0xb')](_0xb2e0('0x16'),_0x32c436,_0x37836a[0x1],_0x15f5aa);_0xcf2406['body'][_0x37836a[0x1]]=_0x15f5aa;}}_0x2bbe0c[_0xb2e0('0x17')]();});}}catch(_0xb21e71){logger[_0xb2e0('0x18')]('[%s][SYSTEM]\x20%s',_0x32c436,_[_0xb2e0('0x19')](_0xb21e71)?JSON[_0xb2e0('0x1a')](_0xb21e71):_0xb21e71);logger[_0xb2e0('0xb')](_0xb2e0('0xc'),_0x32c436);_0x2bbe0c[_0xb2e0('0x17')]();}};};
\ No newline at end of file
+var _0xa286=['body','[%s][SYSTEM]\x20set\x20variable\x20%s:\x20%s','error','isObject','validate','shelljs','lodash','./utils','routing','string','consequence','[%s][SYSTEM]\x20%s','map','message','join','info','[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next','next','getMustacheRender','[%s][SYSTEM]\x20commnad:\x20%s','exec','replace','isNil','isEmpty','[%s][SYSTEM]\x20no\x20variable'];(function(_0x574266,_0x52a8fb){var _0x24d5d7=function(_0x537e62){while(--_0x537e62){_0x574266['push'](_0x574266['shift']());}};_0x24d5d7(++_0x52a8fb);}(_0xa286,0xfe));var _0x6a28=function(_0x9c2427,_0x17c865){_0x9c2427=_0x9c2427-0x0;var _0x51984f=_0xa286[_0x9c2427];return _0x51984f;};'use strict';var schema=require(_0x6a28('0x0'));var sh=require(_0x6a28('0x1'));var _=require(_0x6a28('0x2'));var utils=require(_0x6a28('0x3'));var logger=require('../../../../config/logger')(_0x6a28('0x4'));var system=schema({'command':{'type':_0x6a28('0x5'),'required':!![],'message':'command\x20is\x20a\x20string\x20and\x20it\x20is\x20required'}});exports[_0x6a28('0x6')]=function(_0x404be6,_0x38145a){return function(_0x2d977d){try{var _0x5a1747={'command':_0x38145a[0x0]};var _0x5424ce=system[_0x6a28('0x0')](_0x5a1747,{'typecast':!![]});if(_0x5424ce['length']){logger['error'](_0x6a28('0x7'),_0x404be6,_[_0x6a28('0x8')](_0x5424ce,_0x6a28('0x9'))[_0x6a28('0xa')](',\x20'));logger[_0x6a28('0xb')](_0x6a28('0xc'),_0x404be6);_0x2d977d[_0x6a28('0xd')]();}else{var _0x1bbdf8=this;var _0x37b4f8=utils[_0x6a28('0xe')](_0x38145a[0x0],this);logger[_0x6a28('0xb')](_0x6a28('0xf'),_0x404be6,_0x37b4f8);sh[_0x6a28('0x10')](_['trim'](_0x37b4f8),function(_0x3d836c,_0x42433e){logger['info']('[%s][SYSTEM]\x20result\x20code:\x20%s',_0x404be6,_0x3d836c);if(_0x3d836c==0x0){var _0xf8688f=_0x42433e[_0x6a28('0x11')](/(\r\n|\n|\r)/gm,'');if(_[_0x6a28('0x12')](_0x38145a[0x1])||_[_0x6a28('0x13')](_0x38145a[0x1])){logger['info'](_0x6a28('0x14'),_0x404be6);_0x1bbdf8[_0x6a28('0x15')][_0x38145a[0x1]]=_0xf8688f;}else{logger['info'](_0x6a28('0x16'),_0x404be6,_0x38145a[0x1],_0xf8688f);_0x1bbdf8['body'][_0x38145a[0x1]]=_0xf8688f;}}_0x2d977d[_0x6a28('0xd')]();});}}catch(_0x5787e9){logger[_0x6a28('0x17')](_0x6a28('0x7'),_0x404be6,_[_0x6a28('0x18')](_0x5787e9)?JSON['stringify'](_0x5787e9):_0x5787e9);logger['info']('[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next',_0x404be6);_0x2d977d['next']();}};};
\ No newline at end of file
index d045213..6e2dbe7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['join','info','next','Interaction','channel','addTags','interaction','then','catch','stringify','finally','isObject','validate','lodash','../../rpc/chatInteraction','../../rpc/openchannelInteraction','../../rpc/mailInteraction','../../rpc/faxInteraction','../../../../config/logger','routing','TagId\x20is\x20a\x20string\x20and\x20it\x20is\x20required','consequence','length','error','[%s][TAG]\x20%s','map','message'];(function(_0x464390,_0x40db21){var _0x17e399=function(_0x3b24e2){while(--_0x3b24e2){_0x464390['push'](_0x464390['shift']());}};_0x17e399(++_0x40db21);}(_0x9957,0x93));var _0x7995=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0x9957[_0x6131cd];return _0x47e916;};'use strict';var schema=require(_0x7995('0x0'));var _=require(_0x7995('0x1'));var rpc={'chatInteraction':require(_0x7995('0x2')),'openchannelInteraction':require(_0x7995('0x3')),'smsInteraction':require('../../rpc/smsInteraction'),'mailInteraction':require(_0x7995('0x4')),'faxInteraction':require(_0x7995('0x5'))};var logger=require(_0x7995('0x6'))(_0x7995('0x7'));var tag=schema({'tag':{'type':'number','required':!![],'message':_0x7995('0x8')}});exports[_0x7995('0x9')]=function(_0x137b6b,_0x219534,_0xbda126,_0x326741){return function(_0x4996ca){try{var _0x465276={'tag':_0x219534[0x0]};var _0x1cad37=tag['validate'](_0x465276,{'typecast':!![]});if(_0x1cad37[_0x7995('0xa')]){logger[_0x7995('0xb')](_0x7995('0xc'),_0x137b6b,_[_0x7995('0xd')](_0x1cad37,_0x7995('0xe'))[_0x7995('0xf')](',\x20'));logger[_0x7995('0x10')]('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x137b6b);_0x4996ca[_0x7995('0x11')]();}else{var _0x41c652={'ids':[_0x219534[0x0]]};if(rpc[_0x326741['channel']+_0x7995('0x12')]){rpc[_0x326741[_0x7995('0x13')]+_0x7995('0x12')][_0x7995('0x14')](_0x326741[_0x7995('0x15')]['id'],_0x41c652)[_0x7995('0x16')](function(_0x2bbe7a){logger['info']('[%s][TAG]\x20tag\x20\x22%s\x22\x20added\x20to\x20%s\x20interaction\x20%s',_0x137b6b,_0x219534[0x1],_0x326741[_0x7995('0x13')],_0x326741[_0x7995('0x15')]['id']);})[_0x7995('0x17')](function(_0x321ae8){logger[_0x7995('0xb')](_0x7995('0xc'),_0x137b6b,JSON[_0x7995('0x18')](_0x321ae8));logger[_0x7995('0x10')]('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x137b6b);})[_0x7995('0x19')](function(){_0x4996ca['next']();});}}}catch(_0x2f832e){logger[_0x7995('0xb')](_0x7995('0xc'),_0x137b6b,_[_0x7995('0x1a')](_0x2f832e)?JSON[_0x7995('0x18')](_0x2f832e):_0x2f832e);logger[_0x7995('0x10')]('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x137b6b);_0x4996ca['next']();}};};
\ No newline at end of file
+var _0x9957=['join','info','next','Interaction','channel','addTags','interaction','then','catch','stringify','finally','isObject','validate','lodash','../../rpc/chatInteraction','../../rpc/openchannelInteraction','../../rpc/mailInteraction','../../rpc/faxInteraction','../../../../config/logger','routing','TagId\x20is\x20a\x20string\x20and\x20it\x20is\x20required','consequence','length','error','[%s][TAG]\x20%s','map','message'];(function(_0x283952,_0x442596){var _0x57bb99=function(_0x5cd9b6){while(--_0x5cd9b6){_0x283952['push'](_0x283952['shift']());}};_0x57bb99(++_0x442596);}(_0x9957,0x93));var _0x7995=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x9957[_0x19e35c];return _0x3e1fe8;};'use strict';var schema=require(_0x7995('0x0'));var _=require(_0x7995('0x1'));var rpc={'chatInteraction':require(_0x7995('0x2')),'openchannelInteraction':require(_0x7995('0x3')),'smsInteraction':require('../../rpc/smsInteraction'),'mailInteraction':require(_0x7995('0x4')),'faxInteraction':require(_0x7995('0x5'))};var logger=require(_0x7995('0x6'))(_0x7995('0x7'));var tag=schema({'tag':{'type':'number','required':!![],'message':_0x7995('0x8')}});exports[_0x7995('0x9')]=function(_0x137b6b,_0x219534,_0xbda126,_0x326741){return function(_0x4996ca){try{var _0x465276={'tag':_0x219534[0x0]};var _0x1cad37=tag['validate'](_0x465276,{'typecast':!![]});if(_0x1cad37[_0x7995('0xa')]){logger[_0x7995('0xb')](_0x7995('0xc'),_0x137b6b,_[_0x7995('0xd')](_0x1cad37,_0x7995('0xe'))[_0x7995('0xf')](',\x20'));logger[_0x7995('0x10')]('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x137b6b);_0x4996ca[_0x7995('0x11')]();}else{var _0x41c652={'ids':[_0x219534[0x0]]};if(rpc[_0x326741['channel']+_0x7995('0x12')]){rpc[_0x326741[_0x7995('0x13')]+_0x7995('0x12')][_0x7995('0x14')](_0x326741[_0x7995('0x15')]['id'],_0x41c652)[_0x7995('0x16')](function(_0x2bbe7a){logger['info']('[%s][TAG]\x20tag\x20\x22%s\x22\x20added\x20to\x20%s\x20interaction\x20%s',_0x137b6b,_0x219534[0x1],_0x326741[_0x7995('0x13')],_0x326741[_0x7995('0x15')]['id']);})[_0x7995('0x17')](function(_0x321ae8){logger[_0x7995('0xb')](_0x7995('0xc'),_0x137b6b,JSON[_0x7995('0x18')](_0x321ae8));logger[_0x7995('0x10')]('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x137b6b);})[_0x7995('0x19')](function(){_0x4996ca['next']();});}}}catch(_0x2f832e){logger[_0x7995('0xb')](_0x7995('0xc'),_0x137b6b,_[_0x7995('0x1a')](_0x2f832e)?JSON[_0x7995('0x18')](_0x2f832e):_0x2f832e);logger[_0x7995('0x10')]('[%s][TAG]\x20no\x20tags\x20saved,\x20force\x20next',_0x137b6b);_0x4996ca['next']();}};};
\ No newline at end of file
index 8f6147d..30ee119 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8f37=['mustache','lodash','exports','render','merge','body','message','interaction'];(function(_0x5ecd09,_0x22aeff){var _0x26187b=function(_0x1fceeb){while(--_0x1fceeb){_0x5ecd09['push'](_0x5ecd09['shift']());}};_0x26187b(++_0x22aeff);}(_0x8f37,0x190));var _0x78f3=function(_0x2a2cb0,_0x307ac8){_0x2a2cb0=_0x2a2cb0-0x0;var _0x391c2d=_0x8f37[_0x2a2cb0];return _0x391c2d;};'use strict';var Mustache=require(_0x78f3('0x0'));var _=require(_0x78f3('0x1'));module[_0x78f3('0x2')]={'getMustacheRender':function(_0x5c221b,_0x542bc0){return Mustache[_0x78f3('0x3')](_0x5c221b,_[_0x78f3('0x4')](_0x542bc0[_0x78f3('0x5')],{'contact':_0x542bc0['contact'],'message':_0x542bc0[_0x78f3('0x6')],'account':_0x542bc0['account'],'interaction':_0x542bc0[_0x78f3('0x7')],'list':_0x542bc0['list']}))||'';}};
\ No newline at end of file
+var _0xadec=['mustache','lodash','exports','contact','message','account'];(function(_0x562362,_0x5d54f4){var _0x3a18ce=function(_0x4b96ed){while(--_0x4b96ed){_0x562362['push'](_0x562362['shift']());}};_0x3a18ce(++_0x5d54f4);}(_0xadec,0x156));var _0xcade=function(_0x25375,_0x7c55dd){_0x25375=_0x25375-0x0;var _0x4a0afc=_0xadec[_0x25375];return _0x4a0afc;};'use strict';var Mustache=require(_0xcade('0x0'));var _=require(_0xcade('0x1'));module[_0xcade('0x2')]={'getMustacheRender':function(_0x210817,_0x35756e){return Mustache['render'](_0x210817,_['merge'](_0x35756e['body'],{'contact':_0x35756e[_0xcade('0x3')],'message':_0x35756e[_0xcade('0x4')],'account':_0x35756e[_0xcade('0x5')],'interaction':_0x35756e['interaction'],'list':_0x35756e['list']}))||'';}};
\ No newline at end of file
index 1af802f..904abd6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0256=['message\x20is\x20empty','agent','agents','busy','emit','capacity','hasOwnProperty','CurrentCapacity','agent\x20not\x20found','values','chatQueues','available','loggedIn','name','waiting','mailQueues','openchannelQueues','paused','smsQueues','faxQueues','chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','smsQueuesWaitingInteractions','server','http','listen','127.0.0.1','RPC\x20listening\x20on\x20port:','util','path','jayson/promise','bluebird','uuid','../../../config/environment','../rpc/openchannelQueueReport','../rpc/mailQueueReport','../rpc/chatQueueReport','../rpc/smsQueueReport','../lib/rule-engine','format','%s.%s.%s','isNil','IntervalId','map','interval','channel','message','interaction','applications','isArray','length','existsSync','.js','app','toLowerCase','autoreply','appdata','split','join','push','slice','amazonlex','tag','TagId','%s:%s:%s','./interval','condition','intervals','./applications/','consequence','priority','info','Push\x20new\x20rule','on\x20interval','\x20|\x20','error','Please\x20create\x20a\x20new\x20file\x20under','rules','Applications\x20executed','stringify','matchPath','end','stack','routing\x20is\x20empty','QueueReport','update','UserId','catch','error\x20update\x20queue\x20report'];(function(_0xb5a065,_0x407ccf){var _0x1bd700=function(_0x44c67b){while(--_0x44c67b){_0xb5a065['push'](_0xb5a065['shift']());}};_0x1bd700(++_0x407ccf);}(_0x0256,0xce));var _0x6025=function(_0x32dce6,_0x23f570){_0x32dce6=_0x32dce6-0x0;var _0x1191ba=_0x0256[_0x32dce6];return _0x1191ba;};'use strict';var _=require('lodash');var util=require(_0x6025('0x0'));var path=require(_0x6025('0x1'));var fs=require('fs');var jayson=require(_0x6025('0x2'));var BPromise=require(_0x6025('0x3'));var uuid=require(_0x6025('0x4'));var config=require(_0x6025('0x5'));var logger=require('../../../config/logger')('routing');var rpc={'openchannelQueueReport':require(_0x6025('0x6'))};var rpc={'openchannelQueueReport':require(_0x6025('0x6')),'mailQueueReport':require(_0x6025('0x7')),'chatQueueReport':require(_0x6025('0x8')),'smsQueueReport':require(_0x6025('0x9')),'faxQueueReport':require('../rpc/faxQueueReport')};var RuleEngine=require(_0x6025('0xa'));function getId(_0x35adc8,_0x35cdbc,_0x5891cc){return util[_0x6025('0xb')](_0x6025('0xc'),_0x35adc8,_0x35cdbc||0x0,_0x5891cc||0x0);}function getIntervals(_0x587dbf,_0x40cbd7){var _0x1d2d04=[];if(!_[_0x6025('0xd')](_0x40cbd7[_0x6025('0xe')])&&!_[_0x6025('0xd')](_0x587dbf[_0x40cbd7[_0x6025('0xe')]])&&!_[_0x6025('0xd')](_0x587dbf[_0x40cbd7[_0x6025('0xe')]]['Intervals'])){_0x1d2d04=_[_0x6025('0xf')](_0x587dbf[_0x40cbd7['IntervalId']]['Intervals'],_0x6025('0x10'));}else if(!_[_0x6025('0xd')](_0x40cbd7['interval'])){_0x1d2d04=[_0x40cbd7[_0x6025('0x10')]];}return _0x1d2d04;}exports['listen']=function(_0x241462){_0x241462['rules']={};return new BPromise(function(_0x5b7f0e,_0x14fa81){var _0x5a42f7={'Start':function(_0xf2c8a4){var _0x189709=this;return new Promise(function(_0x57794b,_0x1a6778){if(_0xf2c8a4){try{var _0x1e6c8d=[];var _0x2bbaeb=getId(_0xf2c8a4[_0x6025('0x11')],_0xf2c8a4[_0x6025('0x12')]?_0xf2c8a4[_0x6025('0x12')]['id']:0x0,_0xf2c8a4[_0x6025('0x13')]?_0xf2c8a4[_0x6025('0x13')]['id']:0x0);if(_0xf2c8a4[_0x6025('0x14')]&&_[_0x6025('0x15')](_0xf2c8a4[_0x6025('0x14')])&&_0xf2c8a4[_0x6025('0x14')][_0x6025('0x16')]){for(var _0x45dcce=0x0;_0x45dcce<_0xf2c8a4[_0x6025('0x14')][_0x6025('0x16')];_0x45dcce+=0x1){var _0x41eac4=_0xf2c8a4['applications'][_0x45dcce];if(fs[_0x6025('0x17')](path['join'](__dirname,_0x6025('0x14'),_0x41eac4['app']+_0x6025('0x18')))){var _0x31016f=[];switch(_0x41eac4[_0x6025('0x19')][_0x6025('0x1a')]()){case _0x6025('0x1b'):var _0x138c7b=_0x41eac4[_0x6025('0x1c')][_0x6025('0x1d')](',');_0x31016f['push'](_0x138c7b[0x0]);_0x31016f['push'](_0x138c7b['slice'](0x1,_0x138c7b[_0x6025('0x16')])[_0x6025('0x1e')](','));break;case'dialogflow':var _0x138c7b=_0x41eac4[_0x6025('0x1c')][_0x6025('0x1d')](',');_0x31016f[_0x6025('0x1f')](_0x138c7b[0x0]);_0x31016f[_0x6025('0x1f')](_0x138c7b[0x1]);_0x31016f[_0x6025('0x1f')](_0x138c7b[_0x6025('0x20')](0x2,_0x138c7b[_0x6025('0x16')])['join'](','));break;case _0x6025('0x21'):var _0x138c7b=_0x41eac4[_0x6025('0x1c')][_0x6025('0x1d')](',');_0x31016f[_0x6025('0x1f')](_0x138c7b[0x0]);_0x31016f[_0x6025('0x1f')](_0x138c7b[0x1]);_0x31016f[_0x6025('0x1f')](_0x138c7b[0x2]);_0x31016f['push'](_0x138c7b[0x3]);_0x31016f[_0x6025('0x1f')](_0x138c7b[_0x6025('0x20')](0x4,_0x138c7b[_0x6025('0x16')])[_0x6025('0x1e')](','));break;case _0x6025('0x12'):_0x31016f['push'](_0x41eac4[_0x6025('0x1c')]);break;case _0x6025('0x22'):_0x31016f[_0x6025('0x1f')](_0x41eac4[_0x6025('0x23')]);_0x31016f[_0x6025('0x1f')](_0x41eac4[_0x6025('0x1c')]);break;default:_0x31016f=_[_0x6025('0xd')](_0x41eac4['appdata'])?[]:_0x41eac4[_0x6025('0x1c')][_0x6025('0x1d')](',');}var _0x285f8c={'id':util[_0x6025('0xb')](_0x6025('0x24'),_0x2bbaeb,_0x41eac4['id'],_0x41eac4[_0x6025('0x19')]),'condition':require(_0x6025('0x25'))[_0x6025('0x26')](_0x2bbaeb,getIntervals(_0x241462[_0x6025('0x27')],_0x41eac4),_0x241462),'consequence':require(_0x6025('0x28')+_0x41eac4[_0x6025('0x19')])[_0x6025('0x29')](_0x2bbaeb,_0x31016f,_0x241462,_0xf2c8a4),'p':_0x41eac4[_0x6025('0x2a')]||0x0};logger[_0x6025('0x2b')](_0x6025('0x2c'),_0x285f8c['id'],_0x6025('0x2d'),getIntervals(_0x241462[_0x6025('0x27')],_0x41eac4)[_0x6025('0x1e')](_0x6025('0x2e')));_0x1e6c8d[_0x6025('0x1f')](_0x285f8c);}else{logger[_0x6025('0x2f')](_0x6025('0x30'),path[_0x6025('0x1e')](__dirname,_0x6025('0x14'),_0x41eac4[_0x6025('0x19')]+'.js'));}}_0x241462[_0x6025('0x31')][_0x2bbaeb]=new RuleEngine(_0x1e6c8d);_0x241462[_0x6025('0x31')][_0x2bbaeb]['execute'](_0xf2c8a4,function(_0x10f19d){logger[_0x6025('0x2b')](_0x6025('0x32'),JSON[_0x6025('0x33')](_0x10f19d[_0x6025('0x34')]));if(_0x241462['rules'][_0x2bbaeb]){_0x241462[_0x6025('0x31')][_0x2bbaeb]['emit'](_0x6025('0x35'));}});return _0x57794b({'code':0xc8,'message':_0xf2c8a4});}else{logger[_0x6025('0x2b')]('No\x20applications\x20to\x20execute');return _0x57794b({'code':0xc8,'message':_0xf2c8a4});}}catch(_0x34c4cb){logger[_0x6025('0x2f')](_0x34c4cb[_0x6025('0x36')]);return _0x1a6778(_0x189709['error'](0x1f4,_0x34c4cb));}}return _0x1a6778(_0x6025('0x37'));});},'AcceptMessage':function(_0x3f46cb){var _0x3f3f12=this;return new Promise(function(_0x18d239,_0x40b70f){if(_0x3f46cb[_0x6025('0x12')]&&_0x3f46cb[_0x6025('0x12')]['id']){try{var _0x3eeca9=getId(_0x3f46cb[_0x6025('0x11')],_0x3f46cb[_0x6025('0x12')]?_0x3f46cb[_0x6025('0x12')]['id']:0x0,_0x3f46cb[_0x6025('0x13')]?_0x3f46cb[_0x6025('0x13')]['id']:0x0);if(_0x241462[_0x6025('0x31')][_0x3eeca9]){_0x241462[_0x6025('0x31')][_0x3eeca9]['emit'](_0x6025('0x35'));if(rpc[_0x3f46cb[_0x6025('0x11')]+_0x6025('0x38')]){rpc[_0x3f46cb[_0x6025('0x11')]+'QueueReport'][_0x6025('0x39')](_0x3eeca9,{'UserId':_0x3f46cb[_0x6025('0x12')][_0x6025('0x3a')]})[_0x6025('0x3b')](function(_0x4455c0){logger['error'](_0x6025('0x3c'));});}}return _0x18d239({'code':0xc8,'message':_0x3f46cb});}catch(_0x1392e7){logger[_0x6025('0x2f')](_0x1392e7[_0x6025('0x36')]);return _0x40b70f(_0x3f3f12['error'](0x1f4,_0x1392e7));}}logger[_0x6025('0x2f')](_0x6025('0x3d'));return _0x40b70f(_0x3f3f12[_0x6025('0x2f')](0x1f4,_0x6025('0x3d')));});},'RejectMessage':function(_0x273863){var _0x518c80=this;return new Promise(function(_0x330e44,_0x2bed6b){if(_0x273863[_0x6025('0x3e')]&&_0x273863[_0x6025('0x3e')]['id']){try{if(_0x241462[_0x6025('0x3f')][_0x273863[_0x6025('0x3e')]['id']]){_0x241462[_0x6025('0x3f')][_0x273863['agent']['id']][_0x6025('0x40')]=![];_0x241462['agents'][_0x273863[_0x6025('0x3e')]['id']]['busyQueue']=undefined;}return _0x330e44({'code':0xc8,'message':_0x273863});}catch(_0x2c3890){logger[_0x6025('0x2f')](_0x2c3890[_0x6025('0x36')]);return _0x2bed6b(_0x518c80[_0x6025('0x2f')](0x1f4,_0x2c3890));}}logger['error'](_0x6025('0x3d'));return _0x2bed6b(_0x518c80[_0x6025('0x2f')](0x1f4,_0x6025('0x3d')));});},'AbandonInteraction':function(_0x551413){var _0x37f234=this;return new Promise(function(_0x123539,_0xe7002a){if(_0x551413[_0x6025('0x11')]&&_0x551413[_0x6025('0x13')]&&_0x551413[_0x6025('0x13')]['id']){try{var _0x3579b=getId(_0x551413['channel'],_0x551413[_0x6025('0x12')]?_0x551413[_0x6025('0x12')]['id']:0x0,_0x551413[_0x6025('0x13')]?_0x551413['interaction']['id']:0x0);if(_0x241462[_0x6025('0x31')][_0x3579b]){_0x241462['rules'][_0x3579b][_0x6025('0x41')](_0x6025('0x35'));}return _0x123539({'code':0xc8,'message':_0x551413});}catch(_0x10e9d0){logger['error'](_0x10e9d0['stack']);return _0xe7002a(_0x37f234[_0x6025('0x2f')](0x1f4,_0x10e9d0));}}logger[_0x6025('0x2f')](_0x6025('0x3d'));return _0xe7002a(_0x37f234[_0x6025('0x2f')](0x1f4,_0x6025('0x3d')));});},'AgentCapacity':function(_0x5b95be){var _0x4fadd5=this;return new Promise(function(_0x1fb01e,_0x1a35b4){if(_0x241462[_0x6025('0x3f')]['hasOwnProperty'](_0x5b95be['id'])){for(var _0x429afb in _0x5b95be[_0x6025('0x42')]){if(_0x5b95be[_0x6025('0x42')][_0x6025('0x43')](_0x429afb)){if(_0x241462[_0x6025('0x3f')][_0x5b95be['id']]['hasOwnProperty'](_0x429afb+_0x6025('0x44'))){_0x241462[_0x6025('0x3f')][_0x5b95be['id']][_0x429afb+'CurrentCapacity']=parseInt(_0x5b95be[_0x6025('0x42')][_0x429afb],0xa);}}}_0x241462[_0x6025('0x3f')][_0x5b95be['id']]['updateRealtime']();return _0x1fb01e({'code':0xc8,'message':_0x241462[_0x6025('0x3f')][_0x5b95be['id']]});}else{return _0x1a35b4(_0x4fadd5['error'](0x1f4,_0x6025('0x45')));}});},'Agents':function(_0xba9d4a){return new Promise(function(_0x592cbb,_0x387e21){var _0x533403=_[_0x6025('0x46')](_0x241462[_0x6025('0x3f')]);_0x592cbb({'count':_0x533403[_0x6025('0x16')],'rows':_0x533403});});},'ChatQueues':function(_0x3d65e9){return new Promise(function(_0x187665,_0x47cc37){var _0x4a55cb=[];for(var _0x437346 in _0x241462[_0x6025('0x47')]){if(_0x241462['chatQueues'][_0x6025('0x43')](_0x437346)){var _0x46f6db=_0x241462['chatQueues'][_0x437346];var _0x1905a5={'id':_0x46f6db['id'],'available':_0x46f6db[_0x6025('0x48')],'loggedIn':_0x46f6db[_0x6025('0x49')],'name':_0x46f6db[_0x6025('0x4a')],'paused':_0x46f6db['paused'],'waiting':_0x46f6db[_0x6025('0x4b')]};_0x4a55cb['push'](_0x1905a5);}}_0x187665({'count':_0x4a55cb[_0x6025('0x16')],'rows':_0x4a55cb});});},'MailQueues':function(_0x876f38){return new Promise(function(_0x1d7dda,_0xf68294){var _0x4c41f2=[];for(var _0x44c518 in _0x241462[_0x6025('0x4c')]){if(_0x241462['mailQueues'][_0x6025('0x43')](_0x44c518)){var _0x31e43e=_0x241462[_0x6025('0x4c')][_0x44c518];var _0x2fca23={'id':_0x31e43e['id'],'available':_0x31e43e[_0x6025('0x48')],'loggedIn':_0x31e43e[_0x6025('0x49')],'name':_0x31e43e[_0x6025('0x4a')],'paused':_0x31e43e['paused'],'waiting':_0x31e43e[_0x6025('0x4b')]};_0x4c41f2[_0x6025('0x1f')](_0x2fca23);}}_0x1d7dda({'count':_0x4c41f2[_0x6025('0x16')],'rows':_0x4c41f2});});},'OpenchannelQueues':function(_0x525288){return new Promise(function(_0xf60114,_0x3bd1dc){var _0x2e5ee2=[];for(var _0x4facf0 in _0x241462['openchannelQueues']){if(_0x241462[_0x6025('0x4d')][_0x6025('0x43')](_0x4facf0)){var _0x4103fe=_0x241462['openchannelQueues'][_0x4facf0];var _0x1587e3={'id':_0x4103fe['id'],'available':_0x4103fe['available'],'loggedIn':_0x4103fe[_0x6025('0x49')],'name':_0x4103fe[_0x6025('0x4a')],'paused':_0x4103fe[_0x6025('0x4e')],'waiting':_0x4103fe['waiting']};_0x2e5ee2['push'](_0x1587e3);}}_0xf60114({'count':_0x2e5ee2[_0x6025('0x16')],'rows':_0x2e5ee2});});},'SmsQueues':function(_0x2e9a36){return new Promise(function(_0x1104e6,_0x2e311a){var _0x3bc12e=[];for(var _0x15af6b in _0x241462[_0x6025('0x4f')]){if(_0x241462[_0x6025('0x4f')]['hasOwnProperty'](_0x15af6b)){var _0x4ef803=_0x241462[_0x6025('0x4f')][_0x15af6b];var _0x2ee1a2={'id':_0x4ef803['id'],'available':_0x4ef803[_0x6025('0x48')],'loggedIn':_0x4ef803[_0x6025('0x49')],'name':_0x4ef803[_0x6025('0x4a')],'paused':_0x4ef803['paused'],'waiting':_0x4ef803[_0x6025('0x4b')]};_0x3bc12e[_0x6025('0x1f')](_0x2ee1a2);}}_0x1104e6({'count':_0x3bc12e[_0x6025('0x16')],'rows':_0x3bc12e});});},'FaxQueues':function(_0x8340d2){return new Promise(function(_0x359e38,_0x2b1cec){var _0x1be69e=[];for(var _0x85736 in _0x241462[_0x6025('0x50')]){if(_0x241462[_0x6025('0x50')][_0x6025('0x43')](_0x85736)){var _0x52e618=_0x241462['faxQueues'][_0x85736];var _0x4111dc={'id':_0x52e618['id'],'available':_0x52e618['available'],'loggedIn':_0x52e618['loggedIn'],'name':_0x52e618[_0x6025('0x4a')],'paused':_0x52e618[_0x6025('0x4e')],'waiting':_0x52e618[_0x6025('0x4b')]};_0x1be69e[_0x6025('0x1f')](_0x4111dc);}}_0x359e38({'count':_0x1be69e[_0x6025('0x16')],'rows':_0x1be69e});});},'ChatQueuesWaitingInteractions':function(_0x41ee7c){return new Promise(function(_0x281cde,_0x6f55e5){var _0x2c40d7=_[_0x6025('0x46')](_0x241462[_0x6025('0x51')]);_0x281cde({'count':_0x2c40d7[_0x6025('0x16')],'rows':_0x2c40d7});});},'MailQueuesWaitingInteractions':function(_0x3fefce){return new Promise(function(_0x2cc60e,_0x474336){var _0x23f8f2=_['values'](_0x241462[_0x6025('0x52')]);_0x2cc60e({'count':_0x23f8f2['length'],'rows':_0x23f8f2});});},'OpenchannelQueuesWaitingInteractions':function(_0x43b4f3){return new Promise(function(_0x4697c5,_0x46a48a){var _0x3fcb54=_['values'](_0x241462['openchannelQueuesWaitingInteractions']);_0x4697c5({'count':_0x3fcb54['length'],'rows':_0x3fcb54});});},'SmsQueuesWaitingInteractions':function(_0x4e051b){return new Promise(function(_0x271b16,_0x40ab69){var _0x466468=_[_0x6025('0x46')](_0x241462[_0x6025('0x53')]);_0x271b16({'count':_0x466468[_0x6025('0x16')],'rows':_0x466468});});},'FaxQueuesWaitingInteractions':function(_0x4a22db){return new Promise(function(_0x579438,_0x1129ec){var _0x162cdc=_['values'](_0x241462['faxQueuesWaitingInteractions']);_0x579438({'count':_0x162cdc['length'],'rows':_0x162cdc});});}};var _0x431f44=jayson[_0x6025('0x54')](_0x5a42f7)[_0x6025('0x55')]();_0x431f44['on'](_0x6025('0x2f'),function(_0x3d52d2){logger['error'](JSON[_0x6025('0x33')](_0x3d52d2));return _0x14fa81(_0x3d52d2);});_0x431f44[_0x6025('0x56')](0x232c,_0x6025('0x57'),function(){console['log']('Routing\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!',0x232c);return _0x5b7f0e(_0x6025('0x58')+0x232c);});});};
\ No newline at end of file
+var _0xf823=['agent','agents','busyQueue','hasOwnProperty','capacity','CurrentCapacity','updateRealtime','values','chatQueues','available','name','waiting','mailQueues','loggedIn','paused','openchannelQueues','smsQueues','faxQueues','chatQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','http','log','Routing\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','lodash','bluebird','uuid','../../../config/environment','../../../config/logger','routing','../rpc/openchannelQueueReport','../rpc/chatQueueReport','../rpc/smsQueueReport','../rpc/faxQueueReport','../lib/rule-engine','%s.%s.%s','isNil','IntervalId','Intervals','map','interval','listen','rules','message','interaction','applications','length','existsSync','join','.js','app','toLowerCase','autoreply','appdata','split','push','slice','dialogflow','tag','TagId','format','./interval','condition','intervals','./applications/','consequence','priority','info','Push\x20new\x20rule','\x20|\x20','error','Please\x20create\x20a\x20new\x20file\x20under','execute','Applications\x20executed','emit','No\x20applications\x20to\x20execute','stack','channel','end','QueueReport','update','UserId','catch','error\x20update\x20queue\x20report','message\x20is\x20empty'];(function(_0x1deb03,_0xd05ad8){var _0x189fe7=function(_0x321225){while(--_0x321225){_0x1deb03['push'](_0x1deb03['shift']());}};_0x189fe7(++_0xd05ad8);}(_0xf823,0xc2));var _0x3f82=function(_0x51d884,_0x2cd5ac){_0x51d884=_0x51d884-0x0;var _0x5a05d9=_0xf823[_0x51d884];return _0x5a05d9;};'use strict';var _=require(_0x3f82('0x0'));var util=require('util');var path=require('path');var fs=require('fs');var jayson=require('jayson/promise');var BPromise=require(_0x3f82('0x1'));var uuid=require(_0x3f82('0x2'));var config=require(_0x3f82('0x3'));var logger=require(_0x3f82('0x4'))(_0x3f82('0x5'));var rpc={'openchannelQueueReport':require(_0x3f82('0x6'))};var rpc={'openchannelQueueReport':require(_0x3f82('0x6')),'mailQueueReport':require('../rpc/mailQueueReport'),'chatQueueReport':require(_0x3f82('0x7')),'smsQueueReport':require(_0x3f82('0x8')),'faxQueueReport':require(_0x3f82('0x9'))};var RuleEngine=require(_0x3f82('0xa'));function getId(_0x2066a3,_0x1af6cd,_0x5bc6d2){return util['format'](_0x3f82('0xb'),_0x2066a3,_0x1af6cd||0x0,_0x5bc6d2||0x0);}function getIntervals(_0x64da83,_0x18cc30){var _0x5125db=[];if(!_[_0x3f82('0xc')](_0x18cc30['IntervalId'])&&!_[_0x3f82('0xc')](_0x64da83[_0x18cc30['IntervalId']])&&!_[_0x3f82('0xc')](_0x64da83[_0x18cc30[_0x3f82('0xd')]][_0x3f82('0xe')])){_0x5125db=_[_0x3f82('0xf')](_0x64da83[_0x18cc30[_0x3f82('0xd')]][_0x3f82('0xe')],'interval');}else if(!_['isNil'](_0x18cc30[_0x3f82('0x10')])){_0x5125db=[_0x18cc30['interval']];}return _0x5125db;}exports[_0x3f82('0x11')]=function(_0x11ad54){_0x11ad54[_0x3f82('0x12')]={};return new BPromise(function(_0x5223e4,_0x1cf166){var _0x3355ba={'Start':function(_0x2bb1db){var _0x2035e9=this;return new Promise(function(_0x28ace7,_0x245ccf){if(_0x2bb1db){try{var _0x484a32=[];var _0x3e83fa=getId(_0x2bb1db['channel'],_0x2bb1db[_0x3f82('0x13')]?_0x2bb1db[_0x3f82('0x13')]['id']:0x0,_0x2bb1db[_0x3f82('0x14')]?_0x2bb1db[_0x3f82('0x14')]['id']:0x0);if(_0x2bb1db[_0x3f82('0x15')]&&_['isArray'](_0x2bb1db['applications'])&&_0x2bb1db[_0x3f82('0x15')][_0x3f82('0x16')]){for(var _0x295497=0x0;_0x295497<_0x2bb1db[_0x3f82('0x15')][_0x3f82('0x16')];_0x295497+=0x1){var _0x22abad=_0x2bb1db['applications'][_0x295497];if(fs[_0x3f82('0x17')](path[_0x3f82('0x18')](__dirname,_0x3f82('0x15'),_0x22abad['app']+_0x3f82('0x19')))){var _0x149a55=[];switch(_0x22abad[_0x3f82('0x1a')][_0x3f82('0x1b')]()){case _0x3f82('0x1c'):var _0x80a00c=_0x22abad[_0x3f82('0x1d')][_0x3f82('0x1e')](',');_0x149a55['push'](_0x80a00c[0x0]);_0x149a55[_0x3f82('0x1f')](_0x80a00c[_0x3f82('0x20')](0x1,_0x80a00c[_0x3f82('0x16')])[_0x3f82('0x18')](','));break;case _0x3f82('0x21'):var _0x80a00c=_0x22abad[_0x3f82('0x1d')][_0x3f82('0x1e')](',');_0x149a55[_0x3f82('0x1f')](_0x80a00c[0x0]);_0x149a55[_0x3f82('0x1f')](_0x80a00c[0x1]);_0x149a55[_0x3f82('0x1f')](_0x80a00c[_0x3f82('0x20')](0x2,_0x80a00c[_0x3f82('0x16')])[_0x3f82('0x18')](','));break;case'amazonlex':var _0x80a00c=_0x22abad[_0x3f82('0x1d')][_0x3f82('0x1e')](',');_0x149a55['push'](_0x80a00c[0x0]);_0x149a55[_0x3f82('0x1f')](_0x80a00c[0x1]);_0x149a55[_0x3f82('0x1f')](_0x80a00c[0x2]);_0x149a55[_0x3f82('0x1f')](_0x80a00c[0x3]);_0x149a55['push'](_0x80a00c[_0x3f82('0x20')](0x4,_0x80a00c[_0x3f82('0x16')])[_0x3f82('0x18')](','));break;case _0x3f82('0x13'):_0x149a55[_0x3f82('0x1f')](_0x22abad[_0x3f82('0x1d')]);break;case _0x3f82('0x22'):_0x149a55[_0x3f82('0x1f')](_0x22abad[_0x3f82('0x23')]);_0x149a55['push'](_0x22abad['appdata']);break;default:_0x149a55=_[_0x3f82('0xc')](_0x22abad[_0x3f82('0x1d')])?[]:_0x22abad[_0x3f82('0x1d')][_0x3f82('0x1e')](',');}var _0x3a79f2={'id':util[_0x3f82('0x24')]('%s:%s:%s',_0x3e83fa,_0x22abad['id'],_0x22abad[_0x3f82('0x1a')]),'condition':require(_0x3f82('0x25'))[_0x3f82('0x26')](_0x3e83fa,getIntervals(_0x11ad54[_0x3f82('0x27')],_0x22abad),_0x11ad54),'consequence':require(_0x3f82('0x28')+_0x22abad[_0x3f82('0x1a')])[_0x3f82('0x29')](_0x3e83fa,_0x149a55,_0x11ad54,_0x2bb1db),'p':_0x22abad[_0x3f82('0x2a')]||0x0};logger[_0x3f82('0x2b')](_0x3f82('0x2c'),_0x3a79f2['id'],'on\x20interval',getIntervals(_0x11ad54[_0x3f82('0x27')],_0x22abad)['join'](_0x3f82('0x2d')));_0x484a32[_0x3f82('0x1f')](_0x3a79f2);}else{logger[_0x3f82('0x2e')](_0x3f82('0x2f'),path['join'](__dirname,'applications',_0x22abad[_0x3f82('0x1a')]+'.js'));}}_0x11ad54[_0x3f82('0x12')][_0x3e83fa]=new RuleEngine(_0x484a32);_0x11ad54[_0x3f82('0x12')][_0x3e83fa][_0x3f82('0x30')](_0x2bb1db,function(_0x4bc659){logger['info'](_0x3f82('0x31'),JSON['stringify'](_0x4bc659['matchPath']));if(_0x11ad54[_0x3f82('0x12')][_0x3e83fa]){_0x11ad54['rules'][_0x3e83fa][_0x3f82('0x32')]('end');}});return _0x28ace7({'code':0xc8,'message':_0x2bb1db});}else{logger[_0x3f82('0x2b')](_0x3f82('0x33'));return _0x28ace7({'code':0xc8,'message':_0x2bb1db});}}catch(_0x112a56){logger[_0x3f82('0x2e')](_0x112a56[_0x3f82('0x34')]);return _0x245ccf(_0x2035e9[_0x3f82('0x2e')](0x1f4,_0x112a56));}}return _0x245ccf('routing\x20is\x20empty');});},'AcceptMessage':function(_0x561d6d){var _0x4080dc=this;return new Promise(function(_0xb10d3b,_0x13c558){if(_0x561d6d['message']&&_0x561d6d['message']['id']){try{var _0x20fff2=getId(_0x561d6d[_0x3f82('0x35')],_0x561d6d[_0x3f82('0x13')]?_0x561d6d['message']['id']:0x0,_0x561d6d['interaction']?_0x561d6d['interaction']['id']:0x0);if(_0x11ad54[_0x3f82('0x12')][_0x20fff2]){_0x11ad54['rules'][_0x20fff2][_0x3f82('0x32')](_0x3f82('0x36'));if(rpc[_0x561d6d[_0x3f82('0x35')]+_0x3f82('0x37')]){rpc[_0x561d6d['channel']+_0x3f82('0x37')][_0x3f82('0x38')](_0x20fff2,{'UserId':_0x561d6d[_0x3f82('0x13')][_0x3f82('0x39')]})[_0x3f82('0x3a')](function(_0x554127){logger[_0x3f82('0x2e')](_0x3f82('0x3b'));});}}return _0xb10d3b({'code':0xc8,'message':_0x561d6d});}catch(_0x16088a){logger[_0x3f82('0x2e')](_0x16088a['stack']);return _0x13c558(_0x4080dc['error'](0x1f4,_0x16088a));}}logger[_0x3f82('0x2e')]('message\x20is\x20empty');return _0x13c558(_0x4080dc[_0x3f82('0x2e')](0x1f4,_0x3f82('0x3c')));});},'RejectMessage':function(_0x4d7457){var _0x2b389b=this;return new Promise(function(_0x15ed3b,_0x2b1aac){if(_0x4d7457[_0x3f82('0x3d')]&&_0x4d7457[_0x3f82('0x3d')]['id']){try{if(_0x11ad54['agents'][_0x4d7457[_0x3f82('0x3d')]['id']]){_0x11ad54[_0x3f82('0x3e')][_0x4d7457[_0x3f82('0x3d')]['id']]['busy']=![];_0x11ad54['agents'][_0x4d7457[_0x3f82('0x3d')]['id']][_0x3f82('0x3f')]=undefined;}return _0x15ed3b({'code':0xc8,'message':_0x4d7457});}catch(_0x33efe9){logger['error'](_0x33efe9['stack']);return _0x2b1aac(_0x2b389b[_0x3f82('0x2e')](0x1f4,_0x33efe9));}}logger['error'](_0x3f82('0x3c'));return _0x2b1aac(_0x2b389b[_0x3f82('0x2e')](0x1f4,_0x3f82('0x3c')));});},'AbandonInteraction':function(_0x1ff6db){var _0x571349=this;return new Promise(function(_0x5509ba,_0x5ad9a3){if(_0x1ff6db[_0x3f82('0x35')]&&_0x1ff6db[_0x3f82('0x14')]&&_0x1ff6db[_0x3f82('0x14')]['id']){try{var _0x3b9d79=getId(_0x1ff6db[_0x3f82('0x35')],_0x1ff6db[_0x3f82('0x13')]?_0x1ff6db[_0x3f82('0x13')]['id']:0x0,_0x1ff6db[_0x3f82('0x14')]?_0x1ff6db[_0x3f82('0x14')]['id']:0x0);if(_0x11ad54[_0x3f82('0x12')][_0x3b9d79]){_0x11ad54[_0x3f82('0x12')][_0x3b9d79][_0x3f82('0x32')]('end');}return _0x5509ba({'code':0xc8,'message':_0x1ff6db});}catch(_0x23e3e0){logger['error'](_0x23e3e0[_0x3f82('0x34')]);return _0x5ad9a3(_0x571349[_0x3f82('0x2e')](0x1f4,_0x23e3e0));}}logger['error'](_0x3f82('0x3c'));return _0x5ad9a3(_0x571349[_0x3f82('0x2e')](0x1f4,_0x3f82('0x3c')));});},'AgentCapacity':function(_0x42eca0){var _0x50e840=this;return new Promise(function(_0x1bdfd3,_0x14be21){if(_0x11ad54['agents'][_0x3f82('0x40')](_0x42eca0['id'])){for(var _0x212eb9 in _0x42eca0['capacity']){if(_0x42eca0[_0x3f82('0x41')][_0x3f82('0x40')](_0x212eb9)){if(_0x11ad54[_0x3f82('0x3e')][_0x42eca0['id']][_0x3f82('0x40')](_0x212eb9+_0x3f82('0x42'))){_0x11ad54[_0x3f82('0x3e')][_0x42eca0['id']][_0x212eb9+_0x3f82('0x42')]=parseInt(_0x42eca0[_0x3f82('0x41')][_0x212eb9],0xa);}}}_0x11ad54[_0x3f82('0x3e')][_0x42eca0['id']][_0x3f82('0x43')]();return _0x1bdfd3({'code':0xc8,'message':_0x11ad54[_0x3f82('0x3e')][_0x42eca0['id']]});}else{return _0x14be21(_0x50e840[_0x3f82('0x2e')](0x1f4,'agent\x20not\x20found'));}});},'Agents':function(_0x480bee){return new Promise(function(_0x5ec83a,_0x4654a2){var _0x9b558b=_[_0x3f82('0x44')](_0x11ad54[_0x3f82('0x3e')]);_0x5ec83a({'count':_0x9b558b[_0x3f82('0x16')],'rows':_0x9b558b});});},'ChatQueues':function(_0x189e68){return new Promise(function(_0x38c160,_0x143f02){var _0x30f7f8=[];for(var _0x521d88 in _0x11ad54['chatQueues']){if(_0x11ad54[_0x3f82('0x45')][_0x3f82('0x40')](_0x521d88)){var _0x385817=_0x11ad54[_0x3f82('0x45')][_0x521d88];var _0x5eed2a={'id':_0x385817['id'],'available':_0x385817[_0x3f82('0x46')],'loggedIn':_0x385817['loggedIn'],'name':_0x385817[_0x3f82('0x47')],'paused':_0x385817['paused'],'waiting':_0x385817[_0x3f82('0x48')]};_0x30f7f8[_0x3f82('0x1f')](_0x5eed2a);}}_0x38c160({'count':_0x30f7f8[_0x3f82('0x16')],'rows':_0x30f7f8});});},'MailQueues':function(_0x20c9b7){return new Promise(function(_0x415d47,_0x10bea2){var _0x62b70=[];for(var _0x530ea4 in _0x11ad54[_0x3f82('0x49')]){if(_0x11ad54[_0x3f82('0x49')][_0x3f82('0x40')](_0x530ea4)){var _0x35a606=_0x11ad54[_0x3f82('0x49')][_0x530ea4];var _0x2b25c8={'id':_0x35a606['id'],'available':_0x35a606[_0x3f82('0x46')],'loggedIn':_0x35a606[_0x3f82('0x4a')],'name':_0x35a606[_0x3f82('0x47')],'paused':_0x35a606[_0x3f82('0x4b')],'waiting':_0x35a606[_0x3f82('0x48')]};_0x62b70['push'](_0x2b25c8);}}_0x415d47({'count':_0x62b70[_0x3f82('0x16')],'rows':_0x62b70});});},'OpenchannelQueues':function(_0x1661c6){return new Promise(function(_0x1375d3,_0x3f9e61){var _0x1fa280=[];for(var _0x19725b in _0x11ad54['openchannelQueues']){if(_0x11ad54[_0x3f82('0x4c')][_0x3f82('0x40')](_0x19725b)){var _0x4230b5=_0x11ad54['openchannelQueues'][_0x19725b];var _0x2989b3={'id':_0x4230b5['id'],'available':_0x4230b5[_0x3f82('0x46')],'loggedIn':_0x4230b5[_0x3f82('0x4a')],'name':_0x4230b5[_0x3f82('0x47')],'paused':_0x4230b5['paused'],'waiting':_0x4230b5['waiting']};_0x1fa280['push'](_0x2989b3);}}_0x1375d3({'count':_0x1fa280[_0x3f82('0x16')],'rows':_0x1fa280});});},'SmsQueues':function(_0x15d0f7){return new Promise(function(_0x1658af,_0x2cdd0a){var _0x56a979=[];for(var _0x41cfba in _0x11ad54[_0x3f82('0x4d')]){if(_0x11ad54['smsQueues']['hasOwnProperty'](_0x41cfba)){var _0x1e7f4f=_0x11ad54[_0x3f82('0x4d')][_0x41cfba];var _0x356b98={'id':_0x1e7f4f['id'],'available':_0x1e7f4f[_0x3f82('0x46')],'loggedIn':_0x1e7f4f[_0x3f82('0x4a')],'name':_0x1e7f4f[_0x3f82('0x47')],'paused':_0x1e7f4f[_0x3f82('0x4b')],'waiting':_0x1e7f4f['waiting']};_0x56a979[_0x3f82('0x1f')](_0x356b98);}}_0x1658af({'count':_0x56a979[_0x3f82('0x16')],'rows':_0x56a979});});},'FaxQueues':function(_0x44a1fa){return new Promise(function(_0x4e6a95,_0x568b4e){var _0x1bce28=[];for(var _0x12f040 in _0x11ad54['faxQueues']){if(_0x11ad54[_0x3f82('0x4e')][_0x3f82('0x40')](_0x12f040)){var _0x5ea0bc=_0x11ad54['faxQueues'][_0x12f040];var _0x2d5f75={'id':_0x5ea0bc['id'],'available':_0x5ea0bc[_0x3f82('0x46')],'loggedIn':_0x5ea0bc['loggedIn'],'name':_0x5ea0bc[_0x3f82('0x47')],'paused':_0x5ea0bc['paused'],'waiting':_0x5ea0bc['waiting']};_0x1bce28['push'](_0x2d5f75);}}_0x4e6a95({'count':_0x1bce28['length'],'rows':_0x1bce28});});},'ChatQueuesWaitingInteractions':function(_0x149e87){return new Promise(function(_0x9a59e0,_0x186f2e){var _0x40a81a=_[_0x3f82('0x44')](_0x11ad54[_0x3f82('0x4f')]);_0x9a59e0({'count':_0x40a81a['length'],'rows':_0x40a81a});});},'MailQueuesWaitingInteractions':function(_0x3ed9f6){return new Promise(function(_0x4b7b8e,_0x103906){var _0x3df0cd=_[_0x3f82('0x44')](_0x11ad54['mailQueuesWaitingInteractions']);_0x4b7b8e({'count':_0x3df0cd[_0x3f82('0x16')],'rows':_0x3df0cd});});},'OpenchannelQueuesWaitingInteractions':function(_0x3965d9){return new Promise(function(_0x17dad1,_0x45fb98){var _0x34bfde=_[_0x3f82('0x44')](_0x11ad54[_0x3f82('0x50')]);_0x17dad1({'count':_0x34bfde[_0x3f82('0x16')],'rows':_0x34bfde});});},'SmsQueuesWaitingInteractions':function(_0x1b3c24){return new Promise(function(_0x1d5b9f,_0x2627d0){var _0x25eb5e=_[_0x3f82('0x44')](_0x11ad54['smsQueuesWaitingInteractions']);_0x1d5b9f({'count':_0x25eb5e[_0x3f82('0x16')],'rows':_0x25eb5e});});},'FaxQueuesWaitingInteractions':function(_0x3cb426){return new Promise(function(_0x163667,_0x57dd74){var _0x43adc8=_[_0x3f82('0x44')](_0x11ad54['faxQueuesWaitingInteractions']);_0x163667({'count':_0x43adc8['length'],'rows':_0x43adc8});});}};var _0x2c66c6=jayson['server'](_0x3355ba)[_0x3f82('0x51')]();_0x2c66c6['on'](_0x3f82('0x2e'),function(_0x4ceb8c){logger['error'](JSON['stringify'](_0x4ceb8c));return _0x1cf166(_0x4ceb8c);});_0x2c66c6[_0x3f82('0x11')](0x232c,'127.0.0.1',function(){console[_0x3f82('0x52')](_0x3f82('0x53'),0x232c);return _0x5223e4(_0x3f82('0x54')+0x232c);});});};
\ No newline at end of file
index 448a239..1a5c836 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc871=['true','[%s][INTERVAL]\x20%s','some','info','[%s][INTERVAL]\x20%s\x20%s','log','stop','bluebird','jayson/promise','../../../config/logger','routing','client','http','request','error','message','result','catch','condition','rules','[%s][INTERVAL]\x20ROUTING\x20STOPPED','push','format','iftime\x20%s','then','indexOf'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xc871,0x1c1));var _0x1c87=function(_0x3001b1,_0x24c0b6){_0x3001b1=_0x3001b1-0x0;var _0x2c831e=_0xc871[_0x3001b1];return _0x2c831e;};'use strict';var util=require('util');var BPromise=require(_0x1c87('0x0'));var jayson=require(_0x1c87('0x1'));var _=require('lodash');var logger=require(_0x1c87('0x2'))(_0x1c87('0x3'));var client=jayson[_0x1c87('0x4')][_0x1c87('0x5')]({'port':0x232a});function request(_0x1998c7,_0x119bc5){return new BPromise(function(_0x2126fa,_0x30f1d9){return client[_0x1c87('0x6')](_0x1998c7,_0x119bc5)['then'](function(_0x45f80c){if(_0x45f80c[_0x1c87('0x7')]){return _0x30f1d9(_0x45f80c[_0x1c87('0x7')][_0x1c87('0x8')]);}else{return _0x2126fa(_0x45f80c[_0x1c87('0x9')]);}})[_0x1c87('0xa')](function(_0x3180c0){return _0x30f1d9(_0x3180c0);});});}exports[_0x1c87('0xb')]=function(_0x260202,_0x2ec521,_0x20284c){return function(_0x24811d){if(_0x20284c[_0x1c87('0xc')]&&!_0x20284c[_0x1c87('0xc')][_0x260202]){logger['info'](_0x1c87('0xd'),_0x260202);return _0x24811d['stop']();}var _0x52587a=[];for(var _0x258931=0x0;_0x258931<_0x2ec521['length'];_0x258931+=0x1){_0x52587a[_0x1c87('0xe')](request('Command',{'command':util[_0x1c87('0xf')](_0x1c87('0x10'),_0x2ec521[_0x258931])})[_0x1c87('0x11')](function(_0x4717bc){return _0x4717bc&&_0x4717bc[_0x1c87('0x8')]&&_0x4717bc[_0x1c87('0x8')][_0x1c87('0x12')](_0x1c87('0x13'))>=0x0?!![]:![];})[_0x1c87('0xa')](function(_0x53cb03){logger[_0x1c87('0x7')](_0x1c87('0x14'),_0x260202,_0x2ec521[_0x258931]);}));}BPromise['all'](_0x52587a)[_0x1c87('0x11')](function(_0x47736e){var _0x12528a=_[_0x1c87('0x15')](_0x47736e);logger[_0x1c87('0x16')](_0x1c87('0x17'),_0x260202,_0x2ec521['join']('\x20|\x20'),_0x12528a);_0x24811d['when'](_0x12528a);})[_0x1c87('0xa')](function(_0x36bf4c){console[_0x1c87('0x18')](_0x36bf4c);logger[_0x1c87('0x7')](_0x1c87('0x17'),_0x260202,_0x2ec521['join']('\x20|\x20'),_0x36bf4c['stack']);_0x24811d[_0x1c87('0x19')]();});};};
\ No newline at end of file
+var _0x7d2d=['catch','rules','stop','length','push','Command','format','iftime\x20%s','indexOf','true','[%s][INTERVAL]\x20%s','all','some','info','[%s][INTERVAL]\x20%s\x20%s','join','when','log','\x20|\x20','stack','util','bluebird','lodash','../../../config/logger','routing','client','http','request','then','error','message','result'];(function(_0x350a77,_0x4569c5){var _0x16a58b=function(_0x164230){while(--_0x164230){_0x350a77['push'](_0x350a77['shift']());}};_0x16a58b(++_0x4569c5);}(_0x7d2d,0x74));var _0xd7d2=function(_0x33e9a0,_0x5dd502){_0x33e9a0=_0x33e9a0-0x0;var _0x445618=_0x7d2d[_0x33e9a0];return _0x445618;};'use strict';var util=require(_0xd7d2('0x0'));var BPromise=require(_0xd7d2('0x1'));var jayson=require('jayson/promise');var _=require(_0xd7d2('0x2'));var logger=require(_0xd7d2('0x3'))(_0xd7d2('0x4'));var client=jayson[_0xd7d2('0x5')][_0xd7d2('0x6')]({'port':0x232a});function request(_0xd0d85d,_0x2dbfd4){return new BPromise(function(_0xbb2462,_0xc0df0){return client[_0xd7d2('0x7')](_0xd0d85d,_0x2dbfd4)[_0xd7d2('0x8')](function(_0x1f6171){if(_0x1f6171[_0xd7d2('0x9')]){return _0xc0df0(_0x1f6171[_0xd7d2('0x9')][_0xd7d2('0xa')]);}else{return _0xbb2462(_0x1f6171[_0xd7d2('0xb')]);}})[_0xd7d2('0xc')](function(_0x405d5f){return _0xc0df0(_0x405d5f);});});}exports['condition']=function(_0x591ebf,_0x49dbb3,_0x22d548){return function(_0x4d0b3e){if(_0x22d548['rules']&&!_0x22d548[_0xd7d2('0xd')][_0x591ebf]){logger['info']('[%s][INTERVAL]\x20ROUTING\x20STOPPED',_0x591ebf);return _0x4d0b3e[_0xd7d2('0xe')]();}var _0x14f188=[];for(var _0x4bf7a2=0x0;_0x4bf7a2<_0x49dbb3[_0xd7d2('0xf')];_0x4bf7a2+=0x1){_0x14f188[_0xd7d2('0x10')](request(_0xd7d2('0x11'),{'command':util[_0xd7d2('0x12')](_0xd7d2('0x13'),_0x49dbb3[_0x4bf7a2])})[_0xd7d2('0x8')](function(_0x30122e){return _0x30122e&&_0x30122e['message']&&_0x30122e[_0xd7d2('0xa')][_0xd7d2('0x14')](_0xd7d2('0x15'))>=0x0?!![]:![];})[_0xd7d2('0xc')](function(_0x54c064){logger[_0xd7d2('0x9')](_0xd7d2('0x16'),_0x591ebf,_0x49dbb3[_0x4bf7a2]);}));}BPromise[_0xd7d2('0x17')](_0x14f188)[_0xd7d2('0x8')](function(_0x34b601){var _0x5ada9d=_[_0xd7d2('0x18')](_0x34b601);logger[_0xd7d2('0x19')](_0xd7d2('0x1a'),_0x591ebf,_0x49dbb3[_0xd7d2('0x1b')]('\x20|\x20'),_0x5ada9d);_0x4d0b3e[_0xd7d2('0x1c')](_0x5ada9d);})[_0xd7d2('0xc')](function(_0x544a04){console[_0xd7d2('0x1d')](_0x544a04);logger[_0xd7d2('0x9')](_0xd7d2('0x1a'),_0x591ebf,_0x49dbb3[_0xd7d2('0x1b')](_0xd7d2('0x1e')),_0x544a04[_0xd7d2('0x1f')]);_0x4d0b3e['stop']();});};};
\ No newline at end of file
index 1689fd6..a17bb68 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd483=['calleridname','secondtransfererlinkedid','secondtransfererexten','transfertargetuniqueid','hangup','diffTime','complete','agent','util','./utils','info','format','AGENT|%s|%s|%s|%s|%s|%s|%s|%s','queue','membername','interface','calleridnum','getVoiceQueueByName','then','type','agentacw','agentcomplete','acw','acwtime','acwTimeout','request','CreateVoiceAgentReport','uniqueid','destuniqueid','agentcalled','agentcalledAt','called','connectedlinenum','connectedlinename','error','stack','agentringnoanswer','isNil','agentringnoanswerAt','lastevent','rejected','reason','ringtime','talktime','queuecallerabandon','forIn','now','abandoned','holdtime','agentconnect','connect','answered_elsewhere','answeredelsewheredestinationuniqueid','answeredelsewheremembername','agentcompleteAt','agentconnectAt','transfereruniqueid','transfer','transfertype','blind','transferexten','extension','transferuniqueid','origtransfereruniqueid','origtransfererlinkedid','secondtransfereruniqueid','ATTENDED','origtransfererexten','transfereeuniqueid','agententerreason','clone'];(function(_0x368014,_0x427130){var _0x36fbc3=function(_0x355335){while(--_0x355335){_0x368014['push'](_0x368014['shift']());}};_0x36fbc3(++_0x427130);}(_0xd483,0x124));var _0x3d48=function(_0x555323,_0x126682){_0x555323=_0x555323-0x0;var _0x5abaef=_0xd483[_0x555323];return _0x5abaef;};'use strict';var _=require('lodash');var util=require(_0x3d48('0x0'));var utils=require(_0x3d48('0x1'));var agents={};var transfers={};function writeDB(_0x513825,_0x5b3f58){utils[_0x3d48('0x2')](util[_0x3d48('0x3')](_0x3d48('0x4'),_0x513825['uniqueid'],_0x513825['channel'],_0x513825[_0x3d48('0x5')],_0x513825[_0x3d48('0x6')],_0x513825[_0x3d48('0x7')],_0x513825[_0x3d48('0x8')],_0x513825['connectedlinenum'],_0x513825['lastevent']));if(_0x513825['queue']){utils[_0x3d48('0x9')](_0x513825[_0x3d48('0x5')])[_0x3d48('0xa')](function(_0xc2db93){if(_0xc2db93){_0x513825[_0x3d48('0xb')]=_0xc2db93['type'];_0x513825[_0x3d48('0xc')]=_0x513825[_0x3d48('0xd')]?_0xc2db93[_0x3d48('0xe')]:![];_0x513825[_0x3d48('0xf')]=_0x513825[_0x3d48('0xc')]?_0xc2db93[_0x3d48('0x10')]:0x0;}utils[_0x3d48('0x11')](_0x3d48('0x12'),_0x513825);});}else{utils[_0x3d48('0x11')](_0x3d48('0x12'),_0x513825);}if(_0x5b3f58){delete transfers[_0x513825[_0x3d48('0x13')]];}else{delete agents[_0x513825[_0x3d48('0x14')]];}}exports[_0x3d48('0x15')]=function(_0x6cb022){try{agents[_0x6cb022[_0x3d48('0x14')]]=_0x6cb022;agents[_0x6cb022[_0x3d48('0x14')]][_0x3d48('0x16')]=utils['now']();agents[_0x6cb022[_0x3d48('0x14')]]['lastevent']=_0x3d48('0x17');agents[_0x6cb022['destuniqueid']][_0x3d48('0x18')]=null;agents[_0x6cb022[_0x3d48('0x14')]][_0x3d48('0x19')]=null;}catch(_0x4a7e3c){utils[_0x3d48('0x1a')](_0x4a7e3c[_0x3d48('0x1b')]);}};exports[_0x3d48('0x1c')]=function(_0x14779d){try{if(!_[_0x3d48('0x1d')](agents[_0x14779d[_0x3d48('0x14')]])){agents[_0x14779d[_0x3d48('0x14')]][_0x3d48('0x1c')]=!![];agents[_0x14779d['destuniqueid']][_0x3d48('0x1e')]=utils['now']();agents[_0x14779d[_0x3d48('0x14')]][_0x3d48('0x1f')]=_0x3d48('0x20');agents[_0x14779d[_0x3d48('0x14')]][_0x3d48('0x21')]=_0x3d48('0x20');agents[_0x14779d['destuniqueid']]['holdtime']=_0x14779d[_0x3d48('0x22')]?parseInt(_0x14779d[_0x3d48('0x22')])/0x3e8:0x0;agents[_0x14779d[_0x3d48('0x14')]][_0x3d48('0x23')]=0x0;writeDB(agents[_0x14779d[_0x3d48('0x14')]]);}}catch(_0x5f1ffc){utils[_0x3d48('0x1a')](_0x5f1ffc[_0x3d48('0x1b')]);}};exports[_0x3d48('0x24')]=function(_0x243ecb){try{_[_0x3d48('0x25')](agents,function(_0x13032c,_0x30ebec){if(_0x13032c[_0x3d48('0x13')]==_0x243ecb['uniqueid']){_0x13032c['agentringnoanswer']=!![];_0x13032c[_0x3d48('0x1e')]=utils[_0x3d48('0x26')]();_0x13032c['lastevent']=_0x3d48('0x27');_0x13032c['reason']='abandoned';_0x13032c[_0x3d48('0x28')]=_0x243ecb[_0x3d48('0x28')];_0x13032c['talktime']=0x0;writeDB(_0x13032c);}});}catch(_0x53a146){utils['error'](_0x53a146[_0x3d48('0x1b')]);}};exports[_0x3d48('0x29')]=function(_0x56f7b5){try{if(agents[_0x56f7b5[_0x3d48('0x14')]]){agents[_0x56f7b5['destuniqueid']]['agentconnectAt']=utils['now']();agents[_0x56f7b5[_0x3d48('0x14')]][_0x3d48('0x18')]=_0x56f7b5['connectedlinenum'];agents[_0x56f7b5[_0x3d48('0x14')]][_0x3d48('0x19')]=_0x56f7b5[_0x3d48('0x19')];agents[_0x56f7b5[_0x3d48('0x14')]]['holdtime']=_0x56f7b5['ringtime'];agents[_0x56f7b5[_0x3d48('0x14')]]['lastevent']=_0x3d48('0x2a');_['forIn'](agents,function(_0x2d8b37,_0x4aa2a7){if(_0x2d8b37[_0x3d48('0x14')]!=_0x56f7b5['destuniqueid']&&_0x2d8b37[_0x3d48('0x13')]==_0x56f7b5['uniqueid']){_0x2d8b37[_0x3d48('0x23')]=0x0;_0x2d8b37[_0x3d48('0x28')]=_0x56f7b5[_0x3d48('0x22')];_0x2d8b37['agentringnoanswer']=!![];_0x2d8b37[_0x3d48('0x1e')]=utils[_0x3d48('0x26')]();_0x2d8b37[_0x3d48('0x1f')]=_0x3d48('0x2b');_0x2d8b37[_0x3d48('0x21')]=_0x3d48('0x2b');_0x2d8b37[_0x3d48('0x2c')]=_0x56f7b5[_0x3d48('0x14')];_0x2d8b37[_0x3d48('0x2d')]=_0x56f7b5[_0x3d48('0x6')];writeDB(_0x2d8b37);}});}}catch(_0x4fcaa5){utils[_0x3d48('0x1a')](_0x4fcaa5[_0x3d48('0x1b')]);}};exports['agentcomplete']=function(_0x3c5d9e){try{if(!_[_0x3d48('0x1d')](agents[_0x3c5d9e['destuniqueid']])){agents[_0x3c5d9e[_0x3d48('0x14')]][_0x3d48('0xd')]=!![];agents[_0x3c5d9e[_0x3d48('0x14')]]['agentcompleteAt']=utils['now']();agents[_0x3c5d9e['destuniqueid']]['talktime']=utils['diffTime'](agents[_0x3c5d9e[_0x3d48('0x14')]][_0x3d48('0x2e')],agents[_0x3c5d9e[_0x3d48('0x14')]][_0x3d48('0x2f')]);agents[_0x3c5d9e[_0x3d48('0x14')]][_0x3d48('0x21')]=_0x3c5d9e[_0x3d48('0x21')];agents[_0x3c5d9e['destuniqueid']]['lastevent']='complete';writeDB(agents[_0x3c5d9e[_0x3d48('0x14')]]);}}catch(_0x14f4e1){utils[_0x3d48('0x1a')](_0x14f4e1[_0x3d48('0x1b')]);}};exports['blindtransfer']=function(_0x230c1a){try{if(!_[_0x3d48('0x1d')](agents[_0x230c1a['transfereruniqueid']])){agents[_0x230c1a[_0x3d48('0x30')]][_0x3d48('0x31')]=!![];agents[_0x230c1a[_0x3d48('0x30')]][_0x3d48('0x32')]=_0x3d48('0x33');agents[_0x230c1a['transfereruniqueid']][_0x3d48('0x34')]=_0x230c1a[_0x3d48('0x35')];agents[_0x230c1a['transfereruniqueid']][_0x3d48('0x36')]=agents[_0x230c1a[_0x3d48('0x30')]][_0x3d48('0x13')];}}catch(_0x3910b5){utils[_0x3d48('0x1a')](_0x3910b5[_0x3d48('0x1b')]);}};exports['attendedtransfer']=function(_0x2c5f07){try{if(_0x2c5f07[_0x3d48('0x37')]==_0x2c5f07[_0x3d48('0x38')]){if(!_[_0x3d48('0x1d')](agents[_0x2c5f07[_0x3d48('0x39')]])){agents[_0x2c5f07['secondtransfereruniqueid']]['transfer']=!![];agents[_0x2c5f07[_0x3d48('0x39')]][_0x3d48('0x32')]=_0x3d48('0x3a');agents[_0x2c5f07[_0x3d48('0x39')]][_0x3d48('0x34')]=_0x2c5f07[_0x3d48('0x3b')];agents[_0x2c5f07[_0x3d48('0x39')]]['transferuniqueid']=_0x2c5f07['origtransfereruniqueid'];}if(_0x2c5f07[_0x3d48('0x3c')]&&agents[_0x2c5f07['transfereeuniqueid']]){agents[_0x2c5f07[_0x3d48('0x3c')]][_0x3d48('0x3d')]=0x1;transfers[_0x2c5f07['transfereeuniqueid']]=_[_0x3d48('0x3e')](agents[_0x2c5f07[_0x3d48('0x3c')]]);transfers[_0x2c5f07['transfereeuniqueid']]['calleridnum']=agents[_0x2c5f07[_0x3d48('0x39')]][_0x3d48('0x8')];transfers[_0x2c5f07[_0x3d48('0x3c')]]['calleridname']=agents[_0x2c5f07[_0x3d48('0x39')]][_0x3d48('0x3f')];transfers[_0x2c5f07['transfereeuniqueid']]['agentcalledAt']=utils[_0x3d48('0x26')]();transfers[_0x2c5f07[_0x3d48('0x3c')]][_0x3d48('0x2f')]=utils[_0x3d48('0x26')]();transfers[_0x2c5f07[_0x3d48('0x3c')]][_0x3d48('0x28')]=0x0;transfers[_0x2c5f07[_0x3d48('0x3c')]][_0x3d48('0x3d')]=0x2;}}else if(_0x2c5f07[_0x3d48('0x39')]==_0x2c5f07[_0x3d48('0x40')]){if(!_[_0x3d48('0x1d')](agents[_0x2c5f07[_0x3d48('0x37')]])){agents[_0x2c5f07[_0x3d48('0x37')]][_0x3d48('0x31')]=!![];agents[_0x2c5f07[_0x3d48('0x37')]]['transfertype']=_0x3d48('0x3a');agents[_0x2c5f07[_0x3d48('0x37')]][_0x3d48('0x34')]=_0x2c5f07[_0x3d48('0x41')];agents[_0x2c5f07['origtransfereruniqueid']]['transferuniqueid']=_0x2c5f07[_0x3d48('0x39')];}if(_0x2c5f07[_0x3d48('0x42')]&&agents[_0x2c5f07['transfertargetuniqueid']]){agents[_0x2c5f07['transfertargetuniqueid']][_0x3d48('0x3d')]=0x1;transfers[_0x2c5f07[_0x3d48('0x42')]]=_[_0x3d48('0x3e')](agents[_0x2c5f07[_0x3d48('0x42')]]);transfers[_0x2c5f07['transfertargetuniqueid']]['calleridnum']=agents[_0x2c5f07[_0x3d48('0x37')]][_0x3d48('0x8')];transfers[_0x2c5f07[_0x3d48('0x42')]][_0x3d48('0x3f')]=agents[_0x2c5f07[_0x3d48('0x37')]][_0x3d48('0x3f')];transfers[_0x2c5f07[_0x3d48('0x42')]][_0x3d48('0x16')]=utils[_0x3d48('0x26')]();transfers[_0x2c5f07[_0x3d48('0x42')]][_0x3d48('0x2f')]=utils[_0x3d48('0x26')]();transfers[_0x2c5f07[_0x3d48('0x42')]]['holdtime']=0x0;transfers[_0x2c5f07[_0x3d48('0x42')]][_0x3d48('0x3d')]=0x2;}}}catch(_0x2cc698){utils[_0x3d48('0x1a')](_0x2cc698[_0x3d48('0x1b')]);}};exports[_0x3d48('0x43')]=function(_0x56e934){try{if(transfers[_0x56e934[_0x3d48('0x13')]]){transfers[_0x56e934[_0x3d48('0x13')]]['agentcomplete']=!![];transfers[_0x56e934[_0x3d48('0x13')]]['agentcompleteAt']=utils[_0x3d48('0x26')]();transfers[_0x56e934[_0x3d48('0x13')]][_0x3d48('0x23')]=utils[_0x3d48('0x44')](transfers[_0x56e934['uniqueid']][_0x3d48('0x2e')],transfers[_0x56e934[_0x3d48('0x13')]][_0x3d48('0x2f')]);transfers[_0x56e934[_0x3d48('0x13')]][_0x3d48('0x21')]='agent';transfers[_0x56e934[_0x3d48('0x13')]]['lastevent']=_0x3d48('0x45');writeDB(transfers[_0x56e934[_0x3d48('0x13')]],!![]);}if(agents[_0x56e934[_0x3d48('0x13')]]&&agents[_0x56e934[_0x3d48('0x13')]][_0x3d48('0x2f')]){agents[_0x56e934[_0x3d48('0x13')]]['agentcomplete']=!![];agents[_0x56e934[_0x3d48('0x13')]]['agentcompleteAt']=utils[_0x3d48('0x26')]();agents[_0x56e934[_0x3d48('0x13')]][_0x3d48('0x23')]=utils[_0x3d48('0x44')](agents[_0x56e934[_0x3d48('0x13')]][_0x3d48('0x2e')],agents[_0x56e934['uniqueid']][_0x3d48('0x2f')]);agents[_0x56e934[_0x3d48('0x13')]]['reason']=agents[_0x56e934[_0x3d48('0x13')]][_0x3d48('0x31')]?_0x3d48('0x31'):_0x3d48('0x46');agents[_0x56e934[_0x3d48('0x13')]][_0x3d48('0x1f')]=_0x3d48('0x45');writeDB(agents[_0x56e934['uniqueid']]);}}catch(_0x204695){utils[_0x3d48('0x1a')](_0x204695[_0x3d48('0x1b')]);}};
\ No newline at end of file
+var _0xf611=['type','acwtime','agentacw','request','CreateVoiceAgentReport','destuniqueid','agentcalled','agentcalledAt','now','called','connectedlinename','error','stack','agentringnoanswer','isNil','agentringnoanswerAt','rejected','holdtime','ringtime','talktime','queuecallerabandon','forIn','abandoned','agentconnectAt','connect','answered_elsewhere','reason','membername','agentcomplete','diffTime','agentcompleteAt','complete','blindtransfer','transfereruniqueid','blind','transferexten','extension','attendedtransfer','origtransfereruniqueid','secondtransfereruniqueid','transfer','transfertype','ATTENDED','transfereeuniqueid','agententerreason','clone','calleridname','secondtransfererexten','transfertargetuniqueid','hangup','agent','util','./utils','info','format','AGENT|%s|%s|%s|%s|%s|%s|%s|%s','uniqueid','channel','queue','calleridnum','connectedlinenum','lastevent','getVoiceQueueByName','then'];(function(_0x1f1cc7,_0x26f365){var _0x5f49e9=function(_0x45c75a){while(--_0x45c75a){_0x1f1cc7['push'](_0x1f1cc7['shift']());}};_0x5f49e9(++_0x26f365);}(_0xf611,0x173));var _0x1f61=function(_0x17ebd1,_0x5bc2e3){_0x17ebd1=_0x17ebd1-0x0;var _0x3fe498=_0xf611[_0x17ebd1];return _0x3fe498;};'use strict';var _=require('lodash');var util=require(_0x1f61('0x0'));var utils=require(_0x1f61('0x1'));var agents={};var transfers={};function writeDB(_0x45e2cb,_0x349d9a){utils[_0x1f61('0x2')](util[_0x1f61('0x3')](_0x1f61('0x4'),_0x45e2cb[_0x1f61('0x5')],_0x45e2cb[_0x1f61('0x6')],_0x45e2cb[_0x1f61('0x7')],_0x45e2cb['membername'],_0x45e2cb['interface'],_0x45e2cb[_0x1f61('0x8')],_0x45e2cb[_0x1f61('0x9')],_0x45e2cb[_0x1f61('0xa')]));if(_0x45e2cb[_0x1f61('0x7')]){utils[_0x1f61('0xb')](_0x45e2cb['queue'])[_0x1f61('0xc')](function(_0x104591){if(_0x104591){_0x45e2cb[_0x1f61('0xd')]=_0x104591[_0x1f61('0xd')];_0x45e2cb['agentacw']=_0x45e2cb['agentcomplete']?_0x104591['acw']:![];_0x45e2cb[_0x1f61('0xe')]=_0x45e2cb[_0x1f61('0xf')]?_0x104591['acwTimeout']:0x0;}utils[_0x1f61('0x10')](_0x1f61('0x11'),_0x45e2cb);});}else{utils[_0x1f61('0x10')](_0x1f61('0x11'),_0x45e2cb);}if(_0x349d9a){delete transfers[_0x45e2cb[_0x1f61('0x5')]];}else{delete agents[_0x45e2cb[_0x1f61('0x12')]];}}exports[_0x1f61('0x13')]=function(_0x2fedce){try{agents[_0x2fedce[_0x1f61('0x12')]]=_0x2fedce;agents[_0x2fedce[_0x1f61('0x12')]][_0x1f61('0x14')]=utils[_0x1f61('0x15')]();agents[_0x2fedce[_0x1f61('0x12')]][_0x1f61('0xa')]=_0x1f61('0x16');agents[_0x2fedce[_0x1f61('0x12')]]['connectedlinenum']=null;agents[_0x2fedce[_0x1f61('0x12')]][_0x1f61('0x17')]=null;}catch(_0x81465f){utils[_0x1f61('0x18')](_0x81465f[_0x1f61('0x19')]);}};exports[_0x1f61('0x1a')]=function(_0x5217ca){try{if(!_[_0x1f61('0x1b')](agents[_0x5217ca[_0x1f61('0x12')]])){agents[_0x5217ca[_0x1f61('0x12')]][_0x1f61('0x1a')]=!![];agents[_0x5217ca[_0x1f61('0x12')]][_0x1f61('0x1c')]=utils['now']();agents[_0x5217ca['destuniqueid']][_0x1f61('0xa')]=_0x1f61('0x1d');agents[_0x5217ca[_0x1f61('0x12')]]['reason']=_0x1f61('0x1d');agents[_0x5217ca[_0x1f61('0x12')]][_0x1f61('0x1e')]=_0x5217ca[_0x1f61('0x1f')]?parseInt(_0x5217ca[_0x1f61('0x1f')])/0x3e8:0x0;agents[_0x5217ca[_0x1f61('0x12')]][_0x1f61('0x20')]=0x0;writeDB(agents[_0x5217ca['destuniqueid']]);}}catch(_0x47ca96){utils[_0x1f61('0x18')](_0x47ca96[_0x1f61('0x19')]);}};exports[_0x1f61('0x21')]=function(_0x6f7068){try{_[_0x1f61('0x22')](agents,function(_0x1a1d92,_0x14508c){if(_0x1a1d92[_0x1f61('0x5')]==_0x6f7068[_0x1f61('0x5')]){_0x1a1d92[_0x1f61('0x1a')]=!![];_0x1a1d92['agentringnoanswerAt']=utils[_0x1f61('0x15')]();_0x1a1d92[_0x1f61('0xa')]=_0x1f61('0x23');_0x1a1d92['reason']=_0x1f61('0x23');_0x1a1d92[_0x1f61('0x1e')]=_0x6f7068[_0x1f61('0x1e')];_0x1a1d92[_0x1f61('0x20')]=0x0;writeDB(_0x1a1d92);}});}catch(_0x525f55){utils['error'](_0x525f55[_0x1f61('0x19')]);}};exports['agentconnect']=function(_0x44cd93){try{if(agents[_0x44cd93[_0x1f61('0x12')]]){agents[_0x44cd93[_0x1f61('0x12')]][_0x1f61('0x24')]=utils[_0x1f61('0x15')]();agents[_0x44cd93[_0x1f61('0x12')]][_0x1f61('0x9')]=_0x44cd93[_0x1f61('0x9')];agents[_0x44cd93['destuniqueid']][_0x1f61('0x17')]=_0x44cd93[_0x1f61('0x17')];agents[_0x44cd93[_0x1f61('0x12')]][_0x1f61('0x1e')]=_0x44cd93[_0x1f61('0x1f')];agents[_0x44cd93[_0x1f61('0x12')]]['lastevent']=_0x1f61('0x25');_['forIn'](agents,function(_0x170f72,_0x370462){if(_0x170f72[_0x1f61('0x12')]!=_0x44cd93[_0x1f61('0x12')]&&_0x170f72['uniqueid']==_0x44cd93[_0x1f61('0x5')]){_0x170f72[_0x1f61('0x20')]=0x0;_0x170f72['holdtime']=_0x44cd93[_0x1f61('0x1f')];_0x170f72[_0x1f61('0x1a')]=!![];_0x170f72['agentringnoanswerAt']=utils[_0x1f61('0x15')]();_0x170f72[_0x1f61('0xa')]=_0x1f61('0x26');_0x170f72[_0x1f61('0x27')]=_0x1f61('0x26');_0x170f72['answeredelsewheredestinationuniqueid']=_0x44cd93[_0x1f61('0x12')];_0x170f72['answeredelsewheremembername']=_0x44cd93[_0x1f61('0x28')];writeDB(_0x170f72);}});}}catch(_0xa09f27){utils[_0x1f61('0x18')](_0xa09f27[_0x1f61('0x19')]);}};exports[_0x1f61('0x29')]=function(_0x45369a){try{if(!_[_0x1f61('0x1b')](agents[_0x45369a['destuniqueid']])){agents[_0x45369a[_0x1f61('0x12')]]['agentcomplete']=!![];agents[_0x45369a[_0x1f61('0x12')]]['agentcompleteAt']=utils[_0x1f61('0x15')]();agents[_0x45369a[_0x1f61('0x12')]][_0x1f61('0x20')]=utils[_0x1f61('0x2a')](agents[_0x45369a['destuniqueid']][_0x1f61('0x2b')],agents[_0x45369a[_0x1f61('0x12')]][_0x1f61('0x24')]);agents[_0x45369a[_0x1f61('0x12')]]['reason']=_0x45369a[_0x1f61('0x27')];agents[_0x45369a[_0x1f61('0x12')]][_0x1f61('0xa')]=_0x1f61('0x2c');writeDB(agents[_0x45369a[_0x1f61('0x12')]]);}}catch(_0x533739){utils[_0x1f61('0x18')](_0x533739[_0x1f61('0x19')]);}};exports[_0x1f61('0x2d')]=function(_0x46b2ee){try{if(!_['isNil'](agents[_0x46b2ee[_0x1f61('0x2e')]])){agents[_0x46b2ee[_0x1f61('0x2e')]]['transfer']=!![];agents[_0x46b2ee[_0x1f61('0x2e')]]['transfertype']=_0x1f61('0x2f');agents[_0x46b2ee[_0x1f61('0x2e')]][_0x1f61('0x30')]=_0x46b2ee[_0x1f61('0x31')];agents[_0x46b2ee[_0x1f61('0x2e')]]['transferuniqueid']=agents[_0x46b2ee[_0x1f61('0x2e')]][_0x1f61('0x5')];}}catch(_0x3b94bf){utils['error'](_0x3b94bf[_0x1f61('0x19')]);}};exports[_0x1f61('0x32')]=function(_0x86bc9b){try{if(_0x86bc9b[_0x1f61('0x33')]==_0x86bc9b['origtransfererlinkedid']){if(!_[_0x1f61('0x1b')](agents[_0x86bc9b['secondtransfereruniqueid']])){agents[_0x86bc9b[_0x1f61('0x34')]][_0x1f61('0x35')]=!![];agents[_0x86bc9b[_0x1f61('0x34')]][_0x1f61('0x36')]=_0x1f61('0x37');agents[_0x86bc9b[_0x1f61('0x34')]]['transferexten']=_0x86bc9b['origtransfererexten'];agents[_0x86bc9b[_0x1f61('0x34')]]['transferuniqueid']=_0x86bc9b[_0x1f61('0x33')];}if(_0x86bc9b[_0x1f61('0x38')]&&agents[_0x86bc9b[_0x1f61('0x38')]]){agents[_0x86bc9b[_0x1f61('0x38')]][_0x1f61('0x39')]=0x1;transfers[_0x86bc9b[_0x1f61('0x38')]]=_[_0x1f61('0x3a')](agents[_0x86bc9b[_0x1f61('0x38')]]);transfers[_0x86bc9b[_0x1f61('0x38')]][_0x1f61('0x8')]=agents[_0x86bc9b[_0x1f61('0x34')]][_0x1f61('0x8')];transfers[_0x86bc9b[_0x1f61('0x38')]][_0x1f61('0x3b')]=agents[_0x86bc9b[_0x1f61('0x34')]][_0x1f61('0x3b')];transfers[_0x86bc9b[_0x1f61('0x38')]][_0x1f61('0x14')]=utils[_0x1f61('0x15')]();transfers[_0x86bc9b[_0x1f61('0x38')]]['agentconnectAt']=utils[_0x1f61('0x15')]();transfers[_0x86bc9b['transfereeuniqueid']][_0x1f61('0x1e')]=0x0;transfers[_0x86bc9b['transfereeuniqueid']][_0x1f61('0x39')]=0x2;}}else if(_0x86bc9b[_0x1f61('0x34')]==_0x86bc9b['secondtransfererlinkedid']){if(!_[_0x1f61('0x1b')](agents[_0x86bc9b[_0x1f61('0x33')]])){agents[_0x86bc9b['origtransfereruniqueid']]['transfer']=!![];agents[_0x86bc9b[_0x1f61('0x33')]]['transfertype']=_0x1f61('0x37');agents[_0x86bc9b[_0x1f61('0x33')]][_0x1f61('0x30')]=_0x86bc9b[_0x1f61('0x3c')];agents[_0x86bc9b[_0x1f61('0x33')]]['transferuniqueid']=_0x86bc9b['secondtransfereruniqueid'];}if(_0x86bc9b['transfertargetuniqueid']&&agents[_0x86bc9b['transfertargetuniqueid']]){agents[_0x86bc9b[_0x1f61('0x3d')]][_0x1f61('0x39')]=0x1;transfers[_0x86bc9b[_0x1f61('0x3d')]]=_[_0x1f61('0x3a')](agents[_0x86bc9b[_0x1f61('0x3d')]]);transfers[_0x86bc9b[_0x1f61('0x3d')]][_0x1f61('0x8')]=agents[_0x86bc9b[_0x1f61('0x33')]][_0x1f61('0x8')];transfers[_0x86bc9b['transfertargetuniqueid']][_0x1f61('0x3b')]=agents[_0x86bc9b[_0x1f61('0x33')]][_0x1f61('0x3b')];transfers[_0x86bc9b[_0x1f61('0x3d')]][_0x1f61('0x14')]=utils[_0x1f61('0x15')]();transfers[_0x86bc9b[_0x1f61('0x3d')]][_0x1f61('0x24')]=utils['now']();transfers[_0x86bc9b[_0x1f61('0x3d')]]['holdtime']=0x0;transfers[_0x86bc9b[_0x1f61('0x3d')]][_0x1f61('0x39')]=0x2;}}}catch(_0x5d89d9){utils['error'](_0x5d89d9[_0x1f61('0x19')]);}};exports[_0x1f61('0x3e')]=function(_0x557937){try{if(transfers[_0x557937['uniqueid']]){transfers[_0x557937[_0x1f61('0x5')]][_0x1f61('0x29')]=!![];transfers[_0x557937[_0x1f61('0x5')]][_0x1f61('0x2b')]=utils[_0x1f61('0x15')]();transfers[_0x557937['uniqueid']]['talktime']=utils[_0x1f61('0x2a')](transfers[_0x557937[_0x1f61('0x5')]][_0x1f61('0x2b')],transfers[_0x557937[_0x1f61('0x5')]][_0x1f61('0x24')]);transfers[_0x557937[_0x1f61('0x5')]][_0x1f61('0x27')]=_0x1f61('0x3f');transfers[_0x557937[_0x1f61('0x5')]][_0x1f61('0xa')]=_0x1f61('0x2c');writeDB(transfers[_0x557937[_0x1f61('0x5')]],!![]);}if(agents[_0x557937['uniqueid']]&&agents[_0x557937[_0x1f61('0x5')]][_0x1f61('0x24')]){agents[_0x557937[_0x1f61('0x5')]][_0x1f61('0x29')]=!![];agents[_0x557937[_0x1f61('0x5')]][_0x1f61('0x2b')]=utils[_0x1f61('0x15')]();agents[_0x557937['uniqueid']][_0x1f61('0x20')]=utils[_0x1f61('0x2a')](agents[_0x557937[_0x1f61('0x5')]][_0x1f61('0x2b')],agents[_0x557937[_0x1f61('0x5')]][_0x1f61('0x24')]);agents[_0x557937[_0x1f61('0x5')]][_0x1f61('0x27')]=agents[_0x557937[_0x1f61('0x5')]][_0x1f61('0x35')]?_0x1f61('0x35'):_0x1f61('0x3f');agents[_0x557937[_0x1f61('0x5')]]['lastevent']=_0x1f61('0x2c');writeDB(agents[_0x557937[_0x1f61('0x5')]]);}}catch(_0x15cac7){utils[_0x1f61('0x18')](_0x15cac7['stack']);}};
\ No newline at end of file
index 74dc594..bc6ddf6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5556=['linkedid','OutgoingSpoolFailed','calleridnum','context','DOCUMENTATION','error','stack','newstate','isNil','channelstate','now','transfer','destinationchannel','answertime','toNumber','hangup','calleridname','endtime','duration','diffTime','starttime','attendedtransfer','localtwolinkedid','transfereechannel','userfield','_attended','transfertargetchannel','origtransfererchannel','musiconholdstart','musiconholdstartAt','musiconholdstop','mohtime','varset','xmd-originatecalleridnum','value','xmd-phone','\x22\x20<','variable','xmd-callerid-preview','xmd-queue','xmcs-queue','Queue','lastdata','queue','xmd-contactid','ContactId','xmd-cdrtype','type','outboundrouteid','routeid','sipcallid','newexten','application','toLowerCase','set','startsWith','appdata','split','substring','lastIndexOf','execif','lastapplication','lodash','./utils','FAILED','NO\x20ANSWER','ANSWERED','BUSY','info','CALL|%s|%s|%s|%s|%s|%s|%s|%s','channel','accountcode','source','destination','callerid','disposition','getUserByInternal','UserId','request','CreateVoiceCallReport','uniqueid','newchannel'];(function(_0x3e141e,_0x4cf6ac){var _0x4846c8=function(_0x4fb36d){while(--_0x4fb36d){_0x3e141e['push'](_0x3e141e['shift']());}};_0x4846c8(++_0x4cf6ac);}(_0x5556,0x134));var _0x6555=function(_0x2c0c8d,_0x4a86c7){_0x2c0c8d=_0x2c0c8d-0x0;var _0x114e7a=_0x5556[_0x2c0c8d];return _0x114e7a;};'use strict';var _=require(_0x6555('0x0'));var util=require('util');var utils=require(_0x6555('0x1'));var dispositions=['NO\x20ANSWER',_0x6555('0x2'),_0x6555('0x2'),_0x6555('0x3'),'NO\x20ANSWER',_0x6555('0x3'),_0x6555('0x4'),_0x6555('0x5'),'FAILED','FAILED',_0x6555('0x2')];var channels={};function writeDB(_0x274d9b){utils[_0x6555('0x6')](util['format'](_0x6555('0x7'),_0x274d9b['uniqueid'],_0x274d9b[_0x6555('0x8')],_0x274d9b['type'],_0x274d9b[_0x6555('0x9')],_0x274d9b[_0x6555('0xa')],_0x274d9b[_0x6555('0xb')],_0x274d9b[_0x6555('0xc')],_0x274d9b[_0x6555('0xd')]));if(_0x274d9b[_0x6555('0x9')]){utils[_0x6555('0xe')](_0x274d9b['accountcode'])['then'](function(_0x3e1134){if(_0x3e1134){_0x274d9b[_0x6555('0xf')]=_0x3e1134['id'];}utils[_0x6555('0x10')](_0x6555('0x11'),_0x274d9b);});}else{utils[_0x6555('0x10')]('CreateVoiceCallReport',_0x274d9b);}if(channels[_0x274d9b[_0x6555('0x12')]]){delete channels[_0x274d9b[_0x6555('0x12')]];}}exports[_0x6555('0x13')]=function(_0x1d28a6){try{if(_0x1d28a6[_0x6555('0x12')]==_0x1d28a6[_0x6555('0x14')]&&_0x1d28a6[_0x6555('0x8')]!=_0x6555('0x15')){channels[_0x1d28a6['uniqueid']]={'uniqueid':_0x1d28a6[_0x6555('0x12')],'accountcode':_0x1d28a6[_0x6555('0x9')],'source':_0x1d28a6[_0x6555('0x16')],'destination':_0x1d28a6['exten'],'destinationcontext':_0x1d28a6[_0x6555('0x17')],'channel':_0x1d28a6[_0x6555('0x8')],'starttime':utils['now'](),'answertime':null,'systemanswertime':null,'mohtime':0x0,'disposition':'NO\x20ANSWER','amaflags':_0x6555('0x18')};}}catch(_0x5c299c){utils[_0x6555('0x19')](_0x5c299c[_0x6555('0x1a')]);}};exports[_0x6555('0x1b')]=function(_0x54252b){try{if(!_[_0x6555('0x1c')](channels[_0x54252b[_0x6555('0x12')]])&&_0x54252b[_0x6555('0x1d')]==0x6){if(_['isNil'](channels[_0x54252b[_0x6555('0x12')]]['systemanswertime'])){channels[_0x54252b['uniqueid']]['systemanswertime']=utils[_0x6555('0x1e')]();}}else if(!_['isNil'](channels[_0x54252b[_0x6555('0x14')]])&&_0x54252b[_0x6555('0x1d')]==0x6&&_0x54252b[_0x6555('0x17')]!=_0x6555('0x1f')){channels[_0x54252b['linkedid']][_0x6555('0x9')]=_0x54252b[_0x6555('0x9')];channels[_0x54252b[_0x6555('0x14')]][_0x6555('0x20')]=_0x54252b[_0x6555('0x8')];if(_['isNil'](channels[_0x54252b[_0x6555('0x14')]][_0x6555('0x21')])){channels[_0x54252b[_0x6555('0x14')]]['answertime']=utils['now']();}channels[_0x54252b[_0x6555('0x14')]][_0x6555('0xd')]=dispositions[_[_0x6555('0x22')](_0x54252b['channelstate'])]||_0x6555('0x4');}}catch(_0x4f9e6d){utils[_0x6555('0x19')](_0x4f9e6d[_0x6555('0x1a')]);}};exports[_0x6555('0x23')]=function(_0x57cc93){try{if(!_['isNil'](channels[_0x57cc93[_0x6555('0x12')]])){if(_[_0x6555('0x1c')](channels[_0x57cc93[_0x6555('0x12')]][_0x6555('0xc')])){channels[_0x57cc93[_0x6555('0x12')]]['callerid']=_0x57cc93[_0x6555('0x24')]+'\x20<'+_0x57cc93[_0x6555('0x16')]+'>';}channels[_0x57cc93[_0x6555('0x12')]][_0x6555('0x25')]=utils[_0x6555('0x1e')]();channels[_0x57cc93['uniqueid']][_0x6555('0x26')]=utils[_0x6555('0x27')](channels[_0x57cc93[_0x6555('0x12')]][_0x6555('0x25')],channels[_0x57cc93[_0x6555('0x12')]][_0x6555('0x28')]);channels[_0x57cc93[_0x6555('0x12')]]['billableseconds']=channels[_0x57cc93['uniqueid']]['answertime']?utils[_0x6555('0x27')](channels[_0x57cc93[_0x6555('0x12')]][_0x6555('0x25')],channels[_0x57cc93[_0x6555('0x12')]][_0x6555('0x21')]):0x0;writeDB(channels[_0x57cc93[_0x6555('0x12')]]);}}catch(_0x5a415a){utils[_0x6555('0x19')](_0x5a415a[_0x6555('0x1a')]);}};exports[_0x6555('0x29')]=function(_0x477821){try{if(!_[_0x6555('0x1c')](channels[_0x477821[_0x6555('0x2a')]])){if(channels[_0x477821[_0x6555('0x2a')]]['channel']==_0x477821[_0x6555('0x2b')]){channels[_0x477821[_0x6555('0x2a')]]['destinationchannel']=_0x477821['secondtransfererchannel'];channels[_0x477821['localtwolinkedid']][_0x6555('0x2c')]=_0x6555('0x2d');}else if(channels[_0x477821[_0x6555('0x2a')]]['channel']=_0x477821[_0x6555('0x2e')]){channels[_0x477821[_0x6555('0x2a')]][_0x6555('0x20')]=_0x477821[_0x6555('0x2f')];channels[_0x477821['localtwolinkedid']][_0x6555('0x2c')]='_attended';}}}catch(_0x37b2bf){utils[_0x6555('0x19')](_0x37b2bf['stack']);}};exports[_0x6555('0x30')]=function(_0x2f0412){try{if(!_[_0x6555('0x1c')](channels[_0x2f0412['uniqueid']])){channels[_0x2f0412['uniqueid']][_0x6555('0x31')]=utils[_0x6555('0x1e')]();}}catch(_0x58cb45){utils[_0x6555('0x19')](_0x58cb45['stack']);}};exports[_0x6555('0x32')]=function(_0x1e0e5c){try{if(!_[_0x6555('0x1c')](channels[_0x1e0e5c[_0x6555('0x12')]])){if(!_[_0x6555('0x1c')](channels[_0x1e0e5c[_0x6555('0x12')]]['musiconholdstartAt'])){channels[_0x1e0e5c[_0x6555('0x12')]][_0x6555('0x33')]+=utils['diffTime'](utils[_0x6555('0x1e')](),channels[_0x1e0e5c[_0x6555('0x12')]][_0x6555('0x31')]);delete channels[_0x1e0e5c[_0x6555('0x12')]][_0x6555('0x31')];}}}catch(_0x338fc9){utils[_0x6555('0x19')](_0x338fc9['stack']);}};exports[_0x6555('0x34')]=function(_0x1639ac){try{if(!_[_0x6555('0x1c')](channels[_0x1639ac[_0x6555('0x12')]])){if(!_[_0x6555('0x1c')](_0x1639ac['variable'][_0x6555('0x35')])){channels[_0x1639ac[_0x6555('0x12')]][_0x6555('0xa')]=_0x1639ac[_0x6555('0x36')];}if(!_[_0x6555('0x1c')](_0x1639ac['variable'][_0x6555('0x37')])){channels[_0x1639ac[_0x6555('0x12')]]['destination']=_0x1639ac['value'];channels[_0x1639ac[_0x6555('0x12')]]['callerid']='\x22'+_0x1639ac[_0x6555('0x36')]+_0x6555('0x38')+_0x1639ac[_0x6555('0x36')]+'>';}if(!_[_0x6555('0x1c')](_0x1639ac[_0x6555('0x39')][_0x6555('0x3a')])||!_[_0x6555('0x1c')](_0x1639ac['variable']['xmd-callerid'])){channels[_0x1639ac['uniqueid']][_0x6555('0xc')]=_0x1639ac[_0x6555('0x36')];}if(!_[_0x6555('0x1c')](_0x1639ac[_0x6555('0x39')][_0x6555('0x3b')])||!_[_0x6555('0x1c')](_0x1639ac[_0x6555('0x39')][_0x6555('0x3c')])){channels[_0x1639ac[_0x6555('0x12')]]['lastapplication']=_0x6555('0x3d');channels[_0x1639ac['uniqueid']][_0x6555('0x3e')]=_0x1639ac['value'];channels[_0x1639ac[_0x6555('0x12')]][_0x6555('0x3f')]=!![];}if(!_[_0x6555('0x1c')](_0x1639ac['variable'][_0x6555('0x40')])){channels[_0x1639ac['uniqueid']][_0x6555('0x41')]=_0x1639ac[_0x6555('0x36')];}if(!_[_0x6555('0x1c')](_0x1639ac[_0x6555('0x39')][_0x6555('0x42')])){channels[_0x1639ac[_0x6555('0x12')]][_0x6555('0x43')]=_0x1639ac[_0x6555('0x36')];}if(!_[_0x6555('0x1c')](_0x1639ac[_0x6555('0x39')][_0x6555('0x44')])){channels[_0x1639ac[_0x6555('0x12')]][_0x6555('0x45')]=_0x1639ac[_0x6555('0x36')];}if(!_[_0x6555('0x1c')](_0x1639ac[_0x6555('0x39')][_0x6555('0x46')])){channels[_0x1639ac[_0x6555('0x12')]][_0x6555('0x46')]=_0x1639ac[_0x6555('0x36')];}}}catch(_0x33c8a3){utils[_0x6555('0x19')](_0x33c8a3[_0x6555('0x1a')]);}};exports[_0x6555('0x47')]=function(_0x30eda1){try{if(!_[_0x6555('0x1c')](channels[_0x30eda1['uniqueid']])){if(_0x30eda1[_0x6555('0x48')][_0x6555('0x49')]()==_0x6555('0x4a')&&_[_0x6555('0x4b')](_0x30eda1[_0x6555('0x4c')]['toLowerCase'](),'cdr')){var _0x2e5dce=_0x30eda1['appdata'][_0x6555('0x4d')]('=');var _0x112b8a=_0x2e5dce[0x0][_0x6555('0x4e')](_0x2e5dce[0x0][_0x6555('0x4f')]('(')+0x1,_0x2e5dce[0x0][_0x6555('0x4f')](')'));var _0x1493f5=_0x2e5dce[0x1];channels[_0x30eda1[_0x6555('0x12')]][_0x112b8a]=_0x1493f5;}if(!_['includes'](['hangup','noop',_0x6555('0x50'),_0x6555('0x4a'),'gotoif'],_0x30eda1[_0x6555('0x48')][_0x6555('0x49')]())){channels[_0x30eda1[_0x6555('0x12')]][_0x6555('0x51')]=_0x30eda1[_0x6555('0x48')];channels[_0x30eda1[_0x6555('0x12')]][_0x6555('0x3e')]=_0x30eda1['appdata'];}}}catch(_0x370d76){utils['error'](_0x370d76[_0x6555('0x1a')]);}};
\ No newline at end of file
+var _0x1bcc=['stack','newstate','isNil','channelstate','systemanswertime','transfer','toNumber','ANSWERED','calleridname','endtime','starttime','answertime','diffTime','attendedtransfer','localtwolinkedid','transfereechannel','destinationchannel','secondtransfererchannel','transfertargetchannel','userfield','_attended','musiconholdstart','musiconholdstartAt','musiconholdstop','varset','xmd-originatecalleridnum','source','value','variable','xmd-phone','xmd-callerid-preview','xmd-queue','xmcs-queue','lastapplication','Queue','queue','xmd-contactid','ContactId','xmd-cdrtype','outboundrouteid','sipcallid','toLowerCase','startsWith','cdr','appdata','split','substring','lastIndexOf','includes','hangup','noop','execif','gotoif','lastdata','lodash','util','./utils','NO\x20ANSWER','FAILED','info','CALL|%s|%s|%s|%s|%s|%s|%s|%s','uniqueid','channel','type','accountcode','destination','callerid','disposition','getUserByInternal','then','CreateVoiceCallReport','request','newchannel','linkedid','OutgoingSpoolFailed','calleridnum','exten','context','now','error'];(function(_0x56916d,_0x37b935){var _0x2b7f1f=function(_0x206eb1){while(--_0x206eb1){_0x56916d['push'](_0x56916d['shift']());}};_0x2b7f1f(++_0x37b935);}(_0x1bcc,0x176));var _0xc1bc=function(_0x5a9600,_0x46da77){_0x5a9600=_0x5a9600-0x0;var _0x20b0e6=_0x1bcc[_0x5a9600];return _0x20b0e6;};'use strict';var _=require(_0xc1bc('0x0'));var util=require(_0xc1bc('0x1'));var utils=require(_0xc1bc('0x2'));var dispositions=[_0xc1bc('0x3'),_0xc1bc('0x4'),_0xc1bc('0x4'),_0xc1bc('0x3'),'NO\x20ANSWER','NO\x20ANSWER','ANSWERED','BUSY',_0xc1bc('0x4'),_0xc1bc('0x4'),_0xc1bc('0x4')];var channels={};function writeDB(_0x316482){utils[_0xc1bc('0x5')](util['format'](_0xc1bc('0x6'),_0x316482[_0xc1bc('0x7')],_0x316482[_0xc1bc('0x8')],_0x316482[_0xc1bc('0x9')],_0x316482[_0xc1bc('0xa')],_0x316482['source'],_0x316482[_0xc1bc('0xb')],_0x316482[_0xc1bc('0xc')],_0x316482[_0xc1bc('0xd')]));if(_0x316482[_0xc1bc('0xa')]){utils[_0xc1bc('0xe')](_0x316482[_0xc1bc('0xa')])[_0xc1bc('0xf')](function(_0x69677d){if(_0x69677d){_0x316482['UserId']=_0x69677d['id'];}utils['request'](_0xc1bc('0x10'),_0x316482);});}else{utils[_0xc1bc('0x11')](_0xc1bc('0x10'),_0x316482);}if(channels[_0x316482[_0xc1bc('0x7')]]){delete channels[_0x316482[_0xc1bc('0x7')]];}}exports[_0xc1bc('0x12')]=function(_0x147ef7){try{if(_0x147ef7['uniqueid']==_0x147ef7[_0xc1bc('0x13')]&&_0x147ef7[_0xc1bc('0x8')]!=_0xc1bc('0x14')){channels[_0x147ef7[_0xc1bc('0x7')]]={'uniqueid':_0x147ef7[_0xc1bc('0x7')],'accountcode':_0x147ef7['accountcode'],'source':_0x147ef7[_0xc1bc('0x15')],'destination':_0x147ef7[_0xc1bc('0x16')],'destinationcontext':_0x147ef7[_0xc1bc('0x17')],'channel':_0x147ef7[_0xc1bc('0x8')],'starttime':utils[_0xc1bc('0x18')](),'answertime':null,'systemanswertime':null,'mohtime':0x0,'disposition':_0xc1bc('0x3'),'amaflags':'DOCUMENTATION'};}}catch(_0x596270){utils[_0xc1bc('0x19')](_0x596270[_0xc1bc('0x1a')]);}};exports[_0xc1bc('0x1b')]=function(_0x44d5ac){try{if(!_[_0xc1bc('0x1c')](channels[_0x44d5ac['uniqueid']])&&_0x44d5ac[_0xc1bc('0x1d')]==0x6){if(_['isNil'](channels[_0x44d5ac[_0xc1bc('0x7')]]['systemanswertime'])){channels[_0x44d5ac[_0xc1bc('0x7')]][_0xc1bc('0x1e')]=utils['now']();}}else if(!_['isNil'](channels[_0x44d5ac[_0xc1bc('0x13')]])&&_0x44d5ac[_0xc1bc('0x1d')]==0x6&&_0x44d5ac[_0xc1bc('0x17')]!=_0xc1bc('0x1f')){channels[_0x44d5ac[_0xc1bc('0x13')]][_0xc1bc('0xa')]=_0x44d5ac[_0xc1bc('0xa')];channels[_0x44d5ac[_0xc1bc('0x13')]]['destinationchannel']=_0x44d5ac['channel'];if(_[_0xc1bc('0x1c')](channels[_0x44d5ac[_0xc1bc('0x13')]]['answertime'])){channels[_0x44d5ac['linkedid']]['answertime']=utils[_0xc1bc('0x18')]();}channels[_0x44d5ac[_0xc1bc('0x13')]]['disposition']=dispositions[_[_0xc1bc('0x20')](_0x44d5ac[_0xc1bc('0x1d')])]||_0xc1bc('0x21');}}catch(_0x30e0bf){utils[_0xc1bc('0x19')](_0x30e0bf[_0xc1bc('0x1a')]);}};exports['hangup']=function(_0x3d17ef){try{if(!_[_0xc1bc('0x1c')](channels[_0x3d17ef[_0xc1bc('0x7')]])){if(_[_0xc1bc('0x1c')](channels[_0x3d17ef['uniqueid']][_0xc1bc('0xc')])){channels[_0x3d17ef['uniqueid']][_0xc1bc('0xc')]=_0x3d17ef[_0xc1bc('0x22')]+'\x20<'+_0x3d17ef[_0xc1bc('0x15')]+'>';}channels[_0x3d17ef[_0xc1bc('0x7')]][_0xc1bc('0x23')]=utils[_0xc1bc('0x18')]();channels[_0x3d17ef[_0xc1bc('0x7')]]['duration']=utils['diffTime'](channels[_0x3d17ef['uniqueid']][_0xc1bc('0x23')],channels[_0x3d17ef[_0xc1bc('0x7')]][_0xc1bc('0x24')]);channels[_0x3d17ef['uniqueid']]['billableseconds']=channels[_0x3d17ef[_0xc1bc('0x7')]][_0xc1bc('0x25')]?utils[_0xc1bc('0x26')](channels[_0x3d17ef[_0xc1bc('0x7')]][_0xc1bc('0x23')],channels[_0x3d17ef[_0xc1bc('0x7')]][_0xc1bc('0x25')]):0x0;writeDB(channels[_0x3d17ef[_0xc1bc('0x7')]]);}}catch(_0x529674){utils[_0xc1bc('0x19')](_0x529674['stack']);}};exports[_0xc1bc('0x27')]=function(_0x4dfa5e){try{if(!_[_0xc1bc('0x1c')](channels[_0x4dfa5e[_0xc1bc('0x28')]])){if(channels[_0x4dfa5e[_0xc1bc('0x28')]]['channel']==_0x4dfa5e[_0xc1bc('0x29')]){channels[_0x4dfa5e[_0xc1bc('0x28')]][_0xc1bc('0x2a')]=_0x4dfa5e[_0xc1bc('0x2b')];channels[_0x4dfa5e[_0xc1bc('0x28')]]['userfield']='_attended';}else if(channels[_0x4dfa5e[_0xc1bc('0x28')]][_0xc1bc('0x8')]=_0x4dfa5e[_0xc1bc('0x2c')]){channels[_0x4dfa5e[_0xc1bc('0x28')]][_0xc1bc('0x2a')]=_0x4dfa5e['origtransfererchannel'];channels[_0x4dfa5e['localtwolinkedid']][_0xc1bc('0x2d')]=_0xc1bc('0x2e');}}}catch(_0x39ec5a){utils[_0xc1bc('0x19')](_0x39ec5a[_0xc1bc('0x1a')]);}};exports[_0xc1bc('0x2f')]=function(_0xc94864){try{if(!_[_0xc1bc('0x1c')](channels[_0xc94864[_0xc1bc('0x7')]])){channels[_0xc94864['uniqueid']][_0xc1bc('0x30')]=utils['now']();}}catch(_0x5911cf){utils[_0xc1bc('0x19')](_0x5911cf[_0xc1bc('0x1a')]);}};exports[_0xc1bc('0x31')]=function(_0x18a428){try{if(!_[_0xc1bc('0x1c')](channels[_0x18a428[_0xc1bc('0x7')]])){if(!_[_0xc1bc('0x1c')](channels[_0x18a428[_0xc1bc('0x7')]][_0xc1bc('0x30')])){channels[_0x18a428[_0xc1bc('0x7')]]['mohtime']+=utils[_0xc1bc('0x26')](utils['now'](),channels[_0x18a428[_0xc1bc('0x7')]]['musiconholdstartAt']);delete channels[_0x18a428[_0xc1bc('0x7')]][_0xc1bc('0x30')];}}}catch(_0x366347){utils[_0xc1bc('0x19')](_0x366347[_0xc1bc('0x1a')]);}};exports[_0xc1bc('0x32')]=function(_0x1fd328){try{if(!_[_0xc1bc('0x1c')](channels[_0x1fd328[_0xc1bc('0x7')]])){if(!_['isNil'](_0x1fd328['variable'][_0xc1bc('0x33')])){channels[_0x1fd328[_0xc1bc('0x7')]][_0xc1bc('0x34')]=_0x1fd328[_0xc1bc('0x35')];}if(!_[_0xc1bc('0x1c')](_0x1fd328[_0xc1bc('0x36')][_0xc1bc('0x37')])){channels[_0x1fd328[_0xc1bc('0x7')]]['destination']=_0x1fd328[_0xc1bc('0x35')];channels[_0x1fd328[_0xc1bc('0x7')]][_0xc1bc('0xc')]='\x22'+_0x1fd328[_0xc1bc('0x35')]+'\x22\x20<'+_0x1fd328[_0xc1bc('0x35')]+'>';}if(!_[_0xc1bc('0x1c')](_0x1fd328[_0xc1bc('0x36')][_0xc1bc('0x38')])||!_[_0xc1bc('0x1c')](_0x1fd328[_0xc1bc('0x36')]['xmd-callerid'])){channels[_0x1fd328[_0xc1bc('0x7')]][_0xc1bc('0xc')]=_0x1fd328[_0xc1bc('0x35')];}if(!_['isNil'](_0x1fd328[_0xc1bc('0x36')][_0xc1bc('0x39')])||!_[_0xc1bc('0x1c')](_0x1fd328[_0xc1bc('0x36')][_0xc1bc('0x3a')])){channels[_0x1fd328[_0xc1bc('0x7')]][_0xc1bc('0x3b')]=_0xc1bc('0x3c');channels[_0x1fd328[_0xc1bc('0x7')]]['lastdata']=_0x1fd328[_0xc1bc('0x35')];channels[_0x1fd328[_0xc1bc('0x7')]][_0xc1bc('0x3d')]=!![];}if(!_[_0xc1bc('0x1c')](_0x1fd328[_0xc1bc('0x36')][_0xc1bc('0x3e')])){channels[_0x1fd328[_0xc1bc('0x7')]][_0xc1bc('0x3f')]=_0x1fd328[_0xc1bc('0x35')];}if(!_[_0xc1bc('0x1c')](_0x1fd328['variable'][_0xc1bc('0x40')])){channels[_0x1fd328['uniqueid']]['type']=_0x1fd328[_0xc1bc('0x35')];}if(!_[_0xc1bc('0x1c')](_0x1fd328[_0xc1bc('0x36')][_0xc1bc('0x41')])){channels[_0x1fd328[_0xc1bc('0x7')]]['routeid']=_0x1fd328[_0xc1bc('0x35')];}if(!_[_0xc1bc('0x1c')](_0x1fd328[_0xc1bc('0x36')][_0xc1bc('0x42')])){channels[_0x1fd328[_0xc1bc('0x7')]][_0xc1bc('0x42')]=_0x1fd328[_0xc1bc('0x35')];}}}catch(_0x594f76){utils['error'](_0x594f76[_0xc1bc('0x1a')]);}};exports['newexten']=function(_0x3fa59c){try{if(!_[_0xc1bc('0x1c')](channels[_0x3fa59c[_0xc1bc('0x7')]])){if(_0x3fa59c['application'][_0xc1bc('0x43')]()=='set'&&_[_0xc1bc('0x44')](_0x3fa59c['appdata'][_0xc1bc('0x43')](),_0xc1bc('0x45'))){var _0x45be35=_0x3fa59c[_0xc1bc('0x46')][_0xc1bc('0x47')]('=');var _0x53efe9=_0x45be35[0x0][_0xc1bc('0x48')](_0x45be35[0x0][_0xc1bc('0x49')]('(')+0x1,_0x45be35[0x0]['lastIndexOf'](')'));var _0x24bffe=_0x45be35[0x1];channels[_0x3fa59c[_0xc1bc('0x7')]][_0x53efe9]=_0x24bffe;}if(!_[_0xc1bc('0x4a')]([_0xc1bc('0x4b'),_0xc1bc('0x4c'),_0xc1bc('0x4d'),'set',_0xc1bc('0x4e')],_0x3fa59c['application'][_0xc1bc('0x43')]())){channels[_0x3fa59c['uniqueid']][_0xc1bc('0x3b')]=_0x3fa59c['application'];channels[_0x3fa59c[_0xc1bc('0x7')]][_0xc1bc('0x4f')]=_0x3fa59c['appdata'];}}}catch(_0x31263c){utils['error'](_0x31263c[_0xc1bc('0x1a')]);}};
\ No newline at end of file
index 60f7e0d..8053b29 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc492=['info','error','close','CLOSE','managerevent','./utils','lodash','connect','shutdown','fullybooted'];(function(_0x328308,_0x2106c0){var _0x42381a=function(_0x5058b2){while(--_0x5058b2){_0x328308['push'](_0x328308['shift']());}};_0x42381a(++_0x2106c0);}(_0xc492,0xd7));var _0x2c49=function(_0x30294e,_0x6f7ac0){_0x30294e=_0x30294e-0x0;var _0x1f6989=_0xc492[_0x30294e];return _0x1f6989;};'use strict';var utils=require(_0x2c49('0x0'));var _=require(_0x2c49('0x1'));exports[_0x2c49('0x2')]=function(){utils['info']('CONNECTED');};exports[_0x2c49('0x3')]=function(){utils['info']('SHUTDOWN');};exports[_0x2c49('0x4')]=function(){utils[_0x2c49('0x5')]('FULLYBOOTED');};exports[_0x2c49('0x6')]=function(_0x499c4e){utils[_0x2c49('0x6')](_0x499c4e);};exports[_0x2c49('0x7')]=function(){utils['info'](_0x2c49('0x8'));};exports[_0x2c49('0x9')]=function(_0x26f8c1){};
\ No newline at end of file
+var _0x24ca=['FULLYBOOTED','error','close','CLOSE','./utils','connect','info','CONNECTED','SHUTDOWN','fullybooted'];(function(_0x26dfc5,_0x138166){var _0x566350=function(_0x28b148){while(--_0x28b148){_0x26dfc5['push'](_0x26dfc5['shift']());}};_0x566350(++_0x138166);}(_0x24ca,0x1bc));var _0xa24c=function(_0x15b399,_0x59db1a){_0x15b399=_0x15b399-0x0;var _0x199f2d=_0x24ca[_0x15b399];return _0x199f2d;};'use strict';var utils=require(_0xa24c('0x0'));var _=require('lodash');exports[_0xa24c('0x1')]=function(){utils[_0xa24c('0x2')](_0xa24c('0x3'));};exports['shutdown']=function(){utils[_0xa24c('0x2')](_0xa24c('0x4'));};exports[_0xa24c('0x5')]=function(){utils[_0xa24c('0x2')](_0xa24c('0x6'));};exports[_0xa24c('0x7')]=function(_0xf0511){utils[_0xa24c('0x7')](_0xf0511);};exports[_0xa24c('0x8')]=function(){utils[_0xa24c('0x2')](_0xa24c('0x9'));};exports['managerevent']=function(_0x42d89c){};
\ No newline at end of file
index 413d2da..a75e2ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0076=['uniqueid','channel','calleridnum','connectedlinenum','CreateVoiceDialReport','application','toLowerCase','set','appdata','cdr(routeid)','error','stack','varset','isNil','outboundrouteid','value','assign','now','lastevent','dialend','dialstatus','ANSWER','answertime','connect','hangup','complete','duration','endtime','holdtime','diffTime','starttime','billableseconds','lodash','info'];(function(_0x4e676e,_0x2a7c6d){var _0x336a3c=function(_0x4767c4){while(--_0x4767c4){_0x4e676e['push'](_0x4e676e['shift']());}};_0x336a3c(++_0x2a7c6d);}(_0x0076,0x1da));var _0x6007=function(_0xef8146,_0x459c34){_0xef8146=_0xef8146-0x0;var _0x5a6cb0=_0x0076[_0xef8146];return _0x5a6cb0;};'use strict';var _=require(_0x6007('0x0'));var util=require('util');var utils=require('./utils');var dials={};function writeDB(_0x495677){utils[_0x6007('0x1')](util['format']('DIAL|%s|%s|%s|%s|%s|%s',_0x495677[_0x6007('0x2')],_0x495677[_0x6007('0x3')],_0x495677['dialstring'],_0x495677[_0x6007('0x4')],_0x495677[_0x6007('0x5')],_0x495677['dialstatus']));utils['request'](_0x6007('0x6'),_0x495677);delete dials[_0x495677[_0x6007('0x2')]];}exports['newexten']=function(_0x4d5f74){try{if(_0x4d5f74[_0x6007('0x7')][_0x6007('0x8')]()==_0x6007('0x9')&&_['startsWith'](_0x4d5f74[_0x6007('0xa')][_0x6007('0x8')](),_0x6007('0xb'))){var _0x282f62=_0x4d5f74['appdata']['split']('=');dials[_0x4d5f74[_0x6007('0x2')]]={'routeId':_0x282f62[0x1]};}}catch(_0x5c0278){utils[_0x6007('0xc')](_0x5c0278[_0x6007('0xd')]);}};exports[_0x6007('0xe')]=function(_0x3a3f5e){try{if(!_[_0x6007('0xf')](_0x3a3f5e['variable'][_0x6007('0x10')])){dials[_0x3a3f5e['uniqueid']]={'routeId':_0x3a3f5e[_0x6007('0x11')]};}}catch(_0x4c58c3){utils['error'](_0x4c58c3['stack']);}};exports['dialbegin']=function(_0x28160d){try{if(!_[_0x6007('0xf')](dials[_0x28160d['uniqueid']])){dials[_0x28160d[_0x6007('0x2')]]=_[_0x6007('0x12')](dials[_0x28160d[_0x6007('0x2')]],_0x28160d);dials[_0x28160d[_0x6007('0x2')]]['starttime']=utils[_0x6007('0x13')]();dials[_0x28160d[_0x6007('0x2')]][_0x6007('0x14')]='called';}}catch(_0x5a5986){utils[_0x6007('0xc')](_0x5a5986['stack']);}};exports[_0x6007('0x15')]=function(_0x34c6a4){try{if(!_[_0x6007('0xf')](dials[_0x34c6a4[_0x6007('0x2')]])){dials[_0x34c6a4[_0x6007('0x2')]][_0x6007('0x16')]=_0x34c6a4[_0x6007('0x16')];if(_0x34c6a4['dialstatus']==_0x6007('0x17')){dials[_0x34c6a4[_0x6007('0x2')]]=_['assign'](dials[_0x34c6a4[_0x6007('0x2')]],_0x34c6a4);dials[_0x34c6a4['uniqueid']][_0x6007('0x18')]=utils[_0x6007('0x13')]();dials[_0x34c6a4['uniqueid']][_0x6007('0x14')]=_0x6007('0x19');}}}catch(_0x12c296){utils[_0x6007('0xc')](_0x12c296['stack']);}};exports[_0x6007('0x1a')]=function(_0x175683){try{if(!_[_0x6007('0xf')](dials[_0x175683[_0x6007('0x2')]])){dials[_0x175683[_0x6007('0x2')]]=_[_0x6007('0x12')](dials[_0x175683[_0x6007('0x2')]],{'endtime':utils[_0x6007('0x13')](),'lastevent':_0x6007('0x1b')});dials[_0x175683[_0x6007('0x2')]][_0x6007('0x1c')]=utils['diffTime'](dials[_0x175683['uniqueid']][_0x6007('0x1d')],dials[_0x175683[_0x6007('0x2')]]['starttime']);dials[_0x175683[_0x6007('0x2')]][_0x6007('0x1e')]=utils[_0x6007('0x1f')](dials[_0x175683[_0x6007('0x2')]]['answertime']||dials[_0x175683[_0x6007('0x2')]][_0x6007('0x1d')],dials[_0x175683[_0x6007('0x2')]][_0x6007('0x20')]);dials[_0x175683[_0x6007('0x2')]][_0x6007('0x21')]=dials[_0x175683[_0x6007('0x2')]][_0x6007('0x18')]?utils['diffTime'](dials[_0x175683[_0x6007('0x2')]][_0x6007('0x1d')],dials[_0x175683[_0x6007('0x2')]][_0x6007('0x18')]):0x0;writeDB(dials[_0x175683[_0x6007('0x2')]]);}}catch(_0x3dc027){utils[_0x6007('0xc')](_0x3dc027[_0x6007('0xd')]);}};
\ No newline at end of file
+var _0x6c79=['ANSWER','answertime','now','connect','hangup','diffTime','starttime','holdtime','endtime','lodash','util','./utils','info','format','DIAL|%s|%s|%s|%s|%s|%s','uniqueid','dialstring','calleridnum','connectedlinenum','dialstatus','request','application','toLowerCase','startsWith','appdata','cdr(routeid)','split','error','stack','varset','isNil','variable','value','dialbegin','assign','lastevent','called','dialend'];(function(_0x3e72e2,_0x3eee9b){var _0x609aaf=function(_0x5e4c43){while(--_0x5e4c43){_0x3e72e2['push'](_0x3e72e2['shift']());}};_0x609aaf(++_0x3eee9b);}(_0x6c79,0x1d1));var _0x96c7=function(_0x367527,_0x5d15c6){_0x367527=_0x367527-0x0;var _0xf7e3d4=_0x6c79[_0x367527];return _0xf7e3d4;};'use strict';var _=require(_0x96c7('0x0'));var util=require(_0x96c7('0x1'));var utils=require(_0x96c7('0x2'));var dials={};function writeDB(_0x3aff49){utils[_0x96c7('0x3')](util[_0x96c7('0x4')](_0x96c7('0x5'),_0x3aff49[_0x96c7('0x6')],_0x3aff49['channel'],_0x3aff49[_0x96c7('0x7')],_0x3aff49[_0x96c7('0x8')],_0x3aff49[_0x96c7('0x9')],_0x3aff49[_0x96c7('0xa')]));utils[_0x96c7('0xb')]('CreateVoiceDialReport',_0x3aff49);delete dials[_0x3aff49[_0x96c7('0x6')]];}exports['newexten']=function(_0x1160be){try{if(_0x1160be[_0x96c7('0xc')][_0x96c7('0xd')]()=='set'&&_[_0x96c7('0xe')](_0x1160be[_0x96c7('0xf')][_0x96c7('0xd')](),_0x96c7('0x10'))){var _0x3f3a60=_0x1160be[_0x96c7('0xf')][_0x96c7('0x11')]('=');dials[_0x1160be[_0x96c7('0x6')]]={'routeId':_0x3f3a60[0x1]};}}catch(_0x1fe09a){utils[_0x96c7('0x12')](_0x1fe09a[_0x96c7('0x13')]);}};exports[_0x96c7('0x14')]=function(_0x74fd3a){try{if(!_[_0x96c7('0x15')](_0x74fd3a[_0x96c7('0x16')]['outboundrouteid'])){dials[_0x74fd3a[_0x96c7('0x6')]]={'routeId':_0x74fd3a[_0x96c7('0x17')]};}}catch(_0x4aab22){utils['error'](_0x4aab22['stack']);}};exports[_0x96c7('0x18')]=function(_0x6978df){try{if(!_[_0x96c7('0x15')](dials[_0x6978df[_0x96c7('0x6')]])){dials[_0x6978df['uniqueid']]=_[_0x96c7('0x19')](dials[_0x6978df['uniqueid']],_0x6978df);dials[_0x6978df['uniqueid']]['starttime']=utils['now']();dials[_0x6978df[_0x96c7('0x6')]][_0x96c7('0x1a')]=_0x96c7('0x1b');}}catch(_0x457b6){utils[_0x96c7('0x12')](_0x457b6[_0x96c7('0x13')]);}};exports[_0x96c7('0x1c')]=function(_0x7aaab2){try{if(!_[_0x96c7('0x15')](dials[_0x7aaab2['uniqueid']])){dials[_0x7aaab2[_0x96c7('0x6')]]['dialstatus']=_0x7aaab2[_0x96c7('0xa')];if(_0x7aaab2[_0x96c7('0xa')]==_0x96c7('0x1d')){dials[_0x7aaab2[_0x96c7('0x6')]]=_[_0x96c7('0x19')](dials[_0x7aaab2[_0x96c7('0x6')]],_0x7aaab2);dials[_0x7aaab2[_0x96c7('0x6')]][_0x96c7('0x1e')]=utils[_0x96c7('0x1f')]();dials[_0x7aaab2[_0x96c7('0x6')]][_0x96c7('0x1a')]=_0x96c7('0x20');}}}catch(_0x4abc6e){utils['error'](_0x4abc6e[_0x96c7('0x13')]);}};exports[_0x96c7('0x21')]=function(_0x443f06){try{if(!_['isNil'](dials[_0x443f06[_0x96c7('0x6')]])){dials[_0x443f06[_0x96c7('0x6')]]=_[_0x96c7('0x19')](dials[_0x443f06['uniqueid']],{'endtime':utils[_0x96c7('0x1f')](),'lastevent':'complete'});dials[_0x443f06['uniqueid']]['duration']=utils[_0x96c7('0x22')](dials[_0x443f06[_0x96c7('0x6')]]['endtime'],dials[_0x443f06[_0x96c7('0x6')]][_0x96c7('0x23')]);dials[_0x443f06[_0x96c7('0x6')]][_0x96c7('0x24')]=utils[_0x96c7('0x22')](dials[_0x443f06[_0x96c7('0x6')]][_0x96c7('0x1e')]||dials[_0x443f06[_0x96c7('0x6')]][_0x96c7('0x25')],dials[_0x443f06[_0x96c7('0x6')]]['starttime']);dials[_0x443f06['uniqueid']]['billableseconds']=dials[_0x443f06[_0x96c7('0x6')]][_0x96c7('0x1e')]?utils['diffTime'](dials[_0x443f06[_0x96c7('0x6')]]['endtime'],dials[_0x443f06[_0x96c7('0x6')]]['answertime']):0x0;writeDB(dials[_0x443f06['uniqueid']]);}}catch(_0x16e755){utils[_0x96c7('0x12')](_0x16e755[_0x96c7('0x13')]);}};
\ No newline at end of file
index 1c485f0..06a25c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf6e2=['musiconholdstop','newstate','hangup','cdr','blindtransfer','attendedtransfer','varset','newexten','newchannel','dialbegin','dialend','asterisk-manager','../../config/environment','asterisk','port','username','password','keepConnected','xdr','disabled','info','XDR\x20DISABLED','./agents.controller','./calls.controller','./queues.controller','./recordings.controller','./members.controller','./dials.controller','connect','shutdown','fullybooted','error','close','managerevent','devicestatechange','agentcalled','agentringnoanswer','agentconnect','agentcomplete','queuecallerabandon','queuecallerjoin','queuecallerleave','musiconholdstart'];(function(_0x55e08b,_0x421620){var _0xd1a7ff=function(_0x58c7ff){while(--_0x58c7ff){_0x55e08b['push'](_0x55e08b['shift']());}};_0xd1a7ff(++_0x421620);}(_0xf6e2,0xb7));var _0x2f6e=function(_0x1f0d02,_0x544507){_0x1f0d02=_0x1f0d02-0x0;var _0x7cb25=_0xf6e2[_0x1f0d02];return _0x7cb25;};var AsteriskManager=require(_0x2f6e('0x0'));var config=require(_0x2f6e('0x1'));var utils=require('./utils');var ami=new AsteriskManager(config[_0x2f6e('0x2')][_0x2f6e('0x3')],config['asterisk']['ip'],config[_0x2f6e('0x2')][_0x2f6e('0x4')],config['asterisk'][_0x2f6e('0x5')],!![]);ami[_0x2f6e('0x6')]();if(config['xdr']&&config[_0x2f6e('0x7')][_0x2f6e('0x8')]){utils[_0x2f6e('0x9')](_0x2f6e('0xa'));}else{var agents=require(_0x2f6e('0xb'));var calls=require(_0x2f6e('0xc'));var queues=require(_0x2f6e('0xd'));var recordings=require(_0x2f6e('0xe'));var members=require(_0x2f6e('0xf'));var dials=require(_0x2f6e('0x10'));var transfers=require('./transfers.controller');var core=require('./core.controller');ami['on'](_0x2f6e('0x11'),core['connect']);ami['on'](_0x2f6e('0x12'),core[_0x2f6e('0x12')]);ami['on'](_0x2f6e('0x13'),core[_0x2f6e('0x13')]);ami['on'](_0x2f6e('0x14'),core[_0x2f6e('0x14')]);ami['on'](_0x2f6e('0x15'),core[_0x2f6e('0x15')]);ami['on']('managerevent',core[_0x2f6e('0x16')]);ami['on'](_0x2f6e('0x17'),function(_0x252352){try{members['devicestatechange'](_0x252352);}catch(_0x39c8e5){utils['error'](_0x39c8e5);}});ami['on']('agentcalled',function(_0x1c163b){try{agents[_0x2f6e('0x18')](_0x1c163b);}catch(_0x3b16fb){utils['error'](_0x3b16fb);}});ami['on'](_0x2f6e('0x19'),function(_0x5b3117){try{agents[_0x2f6e('0x19')](_0x5b3117);}catch(_0x44f559){utils[_0x2f6e('0x14')](_0x44f559);}});ami['on'](_0x2f6e('0x1a'),function(_0x588d85){try{agents['agentconnect'](_0x588d85);queues[_0x2f6e('0x1a')](_0x588d85);}catch(_0x3ffe2a){utils[_0x2f6e('0x14')](_0x3ffe2a);}});ami['on'](_0x2f6e('0x1b'),function(_0x22eace){try{agents[_0x2f6e('0x1b')](_0x22eace);queues[_0x2f6e('0x1b')](_0x22eace);members[_0x2f6e('0x1b')](_0x22eace);}catch(_0x5ee3ef){utils['error'](_0x5ee3ef);}});ami['on'](_0x2f6e('0x1c'),function(_0x4ad18c){try{agents[_0x2f6e('0x1c')](_0x4ad18c);queues[_0x2f6e('0x1c')](_0x4ad18c);}catch(_0x4054c0){utils[_0x2f6e('0x14')](_0x4054c0);}});ami['on'](_0x2f6e('0x1d'),function(_0x229639){try{queues[_0x2f6e('0x1d')](_0x229639);recordings[_0x2f6e('0x1d')](_0x229639);}catch(_0x3b8046){utils[_0x2f6e('0x14')](_0x3b8046);}});ami['on']('queuecallerleave',function(_0x5b1efd){try{queues[_0x2f6e('0x1e')](_0x5b1efd);}catch(_0x7e687e){utils[_0x2f6e('0x14')](_0x7e687e);}});ami['on']('musiconholdstart',function(_0x49c411){try{queues['musiconholdstart'](_0x49c411);calls[_0x2f6e('0x1f')](_0x49c411);}catch(_0x4c6ef9){utils[_0x2f6e('0x14')](_0x4c6ef9);}});ami['on']('musiconholdstop',function(_0xf24e6b){try{queues[_0x2f6e('0x20')](_0xf24e6b);calls[_0x2f6e('0x20')](_0xf24e6b);}catch(_0x17ee15){utils['error'](_0x17ee15);}});ami['on'](_0x2f6e('0x21'),function(_0x48906d){try{calls[_0x2f6e('0x21')](_0x48906d);recordings[_0x2f6e('0x21')](_0x48906d);}catch(_0x4edb34){utils[_0x2f6e('0x14')](_0x4edb34);}});ami['on'](_0x2f6e('0x22'),function(_0x5f49b9){try{calls[_0x2f6e('0x22')](_0x5f49b9);recordings['hangup'](_0x5f49b9);dials[_0x2f6e('0x22')](_0x5f49b9);agents['hangup'](_0x5f49b9);queues[_0x2f6e('0x22')](_0x5f49b9);}catch(_0x5158ad){utils[_0x2f6e('0x14')](_0x5158ad);}});ami['on'](_0x2f6e('0x23'),function(_0xb8699b){try{members['cdr'](_0xb8699b);}catch(_0x537dd5){utils[_0x2f6e('0x14')](_0x537dd5);}});ami['on'](_0x2f6e('0x24'),function(_0x4b75a7){try{queues[_0x2f6e('0x24')](_0x4b75a7);agents[_0x2f6e('0x24')](_0x4b75a7);transfers[_0x2f6e('0x24')](_0x4b75a7);}catch(_0x53572c){utils[_0x2f6e('0x14')](_0x53572c);}});ami['on'](_0x2f6e('0x25'),function(_0x350273){try{queues[_0x2f6e('0x25')](_0x350273);transfers[_0x2f6e('0x25')](_0x350273);agents['attendedtransfer'](_0x350273);calls[_0x2f6e('0x25')](_0x350273);}catch(_0xee8f8d){utils[_0x2f6e('0x14')](_0xee8f8d);}});ami['on'](_0x2f6e('0x26'),function(_0x575da9){try{queues['varset'](_0x575da9);recordings[_0x2f6e('0x26')](_0x575da9);calls[_0x2f6e('0x26')](_0x575da9);dials[_0x2f6e('0x26')](_0x575da9);}catch(_0x299ca9){utils[_0x2f6e('0x14')](_0x299ca9);}});ami['on']('newexten',function(_0x1bc713){try{calls['newexten'](_0x1bc713);recordings['newexten'](_0x1bc713);dials[_0x2f6e('0x27')](_0x1bc713);}catch(_0x26da23){utils[_0x2f6e('0x14')](_0x26da23);}});ami['on'](_0x2f6e('0x28'),function(_0x3e623e){try{calls[_0x2f6e('0x28')](_0x3e623e);recordings[_0x2f6e('0x28')](_0x3e623e);}catch(_0x1ddf49){utils['error'](_0x1ddf49);}});ami['on'](_0x2f6e('0x29'),function(_0x358036){try{dials[_0x2f6e('0x29')](_0x358036);}catch(_0x519aeb){utils[_0x2f6e('0x14')](_0x519aeb);}});ami['on'](_0x2f6e('0x2a'),function(_0x1fd0aa){try{dials['dialend'](_0x1fd0aa);}catch(_0x497b1e){utils[_0x2f6e('0x14')](_0x497b1e);}});}
\ No newline at end of file
+var _0xfc03=['asterisk-manager','../../config/environment','./utils','asterisk','port','username','keepConnected','xdr','disabled','info','./agents.controller','./calls.controller','./queues.controller','./recordings.controller','./members.controller','./transfers.controller','./core.controller','connect','shutdown','fullybooted','error','close','managerevent','devicestatechange','agentcalled','agentconnect','agentcomplete','queuecallerabandon','queuecallerjoin','musiconholdstart','musiconholdstop','newstate','hangup','cdr','blindtransfer','attendedtransfer','varset','newexten','newchannel','dialbegin','dialend'];(function(_0x462b4f,_0x2f1c0e){var _0x24f643=function(_0x3cc960){while(--_0x3cc960){_0x462b4f['push'](_0x462b4f['shift']());}};_0x24f643(++_0x2f1c0e);}(_0xfc03,0xa4));var _0x3fc0=function(_0x12fc8d,_0x19ee33){_0x12fc8d=_0x12fc8d-0x0;var _0x3f9d04=_0xfc03[_0x12fc8d];return _0x3f9d04;};var AsteriskManager=require(_0x3fc0('0x0'));var config=require(_0x3fc0('0x1'));var utils=require(_0x3fc0('0x2'));var ami=new AsteriskManager(config[_0x3fc0('0x3')][_0x3fc0('0x4')],config[_0x3fc0('0x3')]['ip'],config[_0x3fc0('0x3')][_0x3fc0('0x5')],config['asterisk']['password'],!![]);ami[_0x3fc0('0x6')]();if(config['xdr']&&config[_0x3fc0('0x7')][_0x3fc0('0x8')]){utils[_0x3fc0('0x9')]('XDR\x20DISABLED');}else{var agents=require(_0x3fc0('0xa'));var calls=require(_0x3fc0('0xb'));var queues=require(_0x3fc0('0xc'));var recordings=require(_0x3fc0('0xd'));var members=require(_0x3fc0('0xe'));var dials=require('./dials.controller');var transfers=require(_0x3fc0('0xf'));var core=require(_0x3fc0('0x10'));ami['on'](_0x3fc0('0x11'),core[_0x3fc0('0x11')]);ami['on']('shutdown',core[_0x3fc0('0x12')]);ami['on'](_0x3fc0('0x13'),core[_0x3fc0('0x13')]);ami['on'](_0x3fc0('0x14'),core[_0x3fc0('0x14')]);ami['on'](_0x3fc0('0x15'),core[_0x3fc0('0x15')]);ami['on'](_0x3fc0('0x16'),core['managerevent']);ami['on'](_0x3fc0('0x17'),function(_0x3277f7){try{members[_0x3fc0('0x17')](_0x3277f7);}catch(_0x18260b){utils[_0x3fc0('0x14')](_0x18260b);}});ami['on']('agentcalled',function(_0xceec78){try{agents[_0x3fc0('0x18')](_0xceec78);}catch(_0x51a56e){utils[_0x3fc0('0x14')](_0x51a56e);}});ami['on']('agentringnoanswer',function(_0x2eebac){try{agents['agentringnoanswer'](_0x2eebac);}catch(_0x142188){utils[_0x3fc0('0x14')](_0x142188);}});ami['on'](_0x3fc0('0x19'),function(_0x9d1be6){try{agents[_0x3fc0('0x19')](_0x9d1be6);queues[_0x3fc0('0x19')](_0x9d1be6);}catch(_0xb2aade){utils[_0x3fc0('0x14')](_0xb2aade);}});ami['on'](_0x3fc0('0x1a'),function(_0x42c1df){try{agents[_0x3fc0('0x1a')](_0x42c1df);queues['agentcomplete'](_0x42c1df);members[_0x3fc0('0x1a')](_0x42c1df);}catch(_0x1d47b1){utils[_0x3fc0('0x14')](_0x1d47b1);}});ami['on'](_0x3fc0('0x1b'),function(_0x99cc42){try{agents[_0x3fc0('0x1b')](_0x99cc42);queues[_0x3fc0('0x1b')](_0x99cc42);}catch(_0x2481c2){utils[_0x3fc0('0x14')](_0x2481c2);}});ami['on'](_0x3fc0('0x1c'),function(_0x58c178){try{queues[_0x3fc0('0x1c')](_0x58c178);recordings[_0x3fc0('0x1c')](_0x58c178);}catch(_0x1db02b){utils[_0x3fc0('0x14')](_0x1db02b);}});ami['on']('queuecallerleave',function(_0x55345f){try{queues['queuecallerleave'](_0x55345f);}catch(_0x544fc3){utils['error'](_0x544fc3);}});ami['on']('musiconholdstart',function(_0x1fc5dc){try{queues[_0x3fc0('0x1d')](_0x1fc5dc);calls[_0x3fc0('0x1d')](_0x1fc5dc);}catch(_0xf9ddb1){utils[_0x3fc0('0x14')](_0xf9ddb1);}});ami['on']('musiconholdstop',function(_0x46a3ac){try{queues[_0x3fc0('0x1e')](_0x46a3ac);calls[_0x3fc0('0x1e')](_0x46a3ac);}catch(_0x641fcc){utils[_0x3fc0('0x14')](_0x641fcc);}});ami['on'](_0x3fc0('0x1f'),function(_0x1b8eca){try{calls[_0x3fc0('0x1f')](_0x1b8eca);recordings[_0x3fc0('0x1f')](_0x1b8eca);}catch(_0x56f6f7){utils[_0x3fc0('0x14')](_0x56f6f7);}});ami['on'](_0x3fc0('0x20'),function(_0x394a45){try{calls[_0x3fc0('0x20')](_0x394a45);recordings[_0x3fc0('0x20')](_0x394a45);dials['hangup'](_0x394a45);agents[_0x3fc0('0x20')](_0x394a45);queues[_0x3fc0('0x20')](_0x394a45);}catch(_0x365aa3){utils[_0x3fc0('0x14')](_0x365aa3);}});ami['on'](_0x3fc0('0x21'),function(_0x56786f){try{members[_0x3fc0('0x21')](_0x56786f);}catch(_0x391455){utils[_0x3fc0('0x14')](_0x391455);}});ami['on']('blindtransfer',function(_0x2eadfa){try{queues[_0x3fc0('0x22')](_0x2eadfa);agents[_0x3fc0('0x22')](_0x2eadfa);transfers[_0x3fc0('0x22')](_0x2eadfa);}catch(_0x164216){utils[_0x3fc0('0x14')](_0x164216);}});ami['on'](_0x3fc0('0x23'),function(_0x3d9fb9){try{queues[_0x3fc0('0x23')](_0x3d9fb9);transfers[_0x3fc0('0x23')](_0x3d9fb9);agents[_0x3fc0('0x23')](_0x3d9fb9);calls[_0x3fc0('0x23')](_0x3d9fb9);}catch(_0x154c4c){utils[_0x3fc0('0x14')](_0x154c4c);}});ami['on']('varset',function(_0x2490d1){try{queues[_0x3fc0('0x24')](_0x2490d1);recordings[_0x3fc0('0x24')](_0x2490d1);calls['varset'](_0x2490d1);dials[_0x3fc0('0x24')](_0x2490d1);}catch(_0xa8d0c9){utils[_0x3fc0('0x14')](_0xa8d0c9);}});ami['on'](_0x3fc0('0x25'),function(_0x510aa7){try{calls[_0x3fc0('0x25')](_0x510aa7);recordings[_0x3fc0('0x25')](_0x510aa7);dials[_0x3fc0('0x25')](_0x510aa7);}catch(_0x4a37e5){utils[_0x3fc0('0x14')](_0x4a37e5);}});ami['on'](_0x3fc0('0x26'),function(_0x2c6d2a){try{calls[_0x3fc0('0x26')](_0x2c6d2a);recordings[_0x3fc0('0x26')](_0x2c6d2a);}catch(_0x22b488){utils['error'](_0x22b488);}});ami['on']('dialbegin',function(_0x1982fc){try{dials[_0x3fc0('0x27')](_0x1982fc);}catch(_0x59c6c1){utils[_0x3fc0('0x14')](_0x59c6c1);}});ami['on']('dialend',function(_0x534063){try{dials[_0x3fc0('0x28')](_0x534063);}catch(_0x2a7086){utils[_0x3fc0('0x14')](_0x2a7086);}});}
\ No newline at end of file
index a4764c7..84d419c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x985b=['cdr','split','data1','source','data3','destinationchannel','util','./utils','Local/_attended@transfer','Queue:','info','format','MEMBER|%s|%s|%s|%s|%s|%s','uniqueid','channel','data2','membername','type','interface','getUserByInterface','then','name','CreateMemberReport','getUserByName','internal','request','catch','some','startsWith','devicestatechange','BUSY','device','voice','TALKING','now','agent','NOT_INUSE','isNil','exitAt','diffTime','enterAt','agentcomplete','assign'];(function(_0x705b98,_0x1c345b){var _0x47b72f=function(_0x44f02a){while(--_0x44f02a){_0x705b98['push'](_0x705b98['shift']());}};_0x47b72f(++_0x1c345b);}(_0x985b,0x87));var _0xb985=function(_0x1edca4,_0x2474ba){_0x1edca4=_0x1edca4-0x0;var _0x20ba3e=_0x985b[_0x1edca4];return _0x20ba3e;};'use strict';var _=require('lodash');var util=require(_0xb985('0x0'));var utils=require(_0xb985('0x1'));var members={};var exclude=[_0xb985('0x2'),_0xb985('0x3')];function writeDB(_0x436525){utils[_0xb985('0x4')](util[_0xb985('0x5')](_0xb985('0x6'),_0x436525[_0xb985('0x7')],_0x436525['interface'],_0x436525[_0xb985('0x8')],_0x436525[_0xb985('0x9')],_0x436525[_0xb985('0xa')],_0x436525[_0xb985('0xb')]));if(_0x436525[_0xb985('0xc')]){utils[_0xb985('0xd')](_0x436525[_0xb985('0xc')])[_0xb985('0xe')](function(_0x545df4){if(_0x545df4){_0x436525['membername']=_0x545df4[_0xb985('0xf')];_0x436525['internal']=_0x545df4['internal'];utils['request'](_0xb985('0x10'),_0x436525);}else{utils[_0xb985('0x11')](_0x436525[_0xb985('0xc')]['split']('/')[0x1])[_0xb985('0xe')](function(_0x480950){if(_0x480950){_0x436525['membername']=_0x480950['name'];_0x436525[_0xb985('0x12')]=_0x480950[_0xb985('0x12')];utils[_0xb985('0x13')](_0xb985('0x10'),_0x436525);}});}})[_0xb985('0x14')](function(_0x120882){utils['error'](_0x120882);});}delete members[_0x436525[_0xb985('0xc')]];}function startsWith(_0x318430,_0x23b89f){return _[_0xb985('0x15')](_0x318430,function(_0x549f69){return _[_0xb985('0x16')](_0x23b89f,_0x549f69);});}exports[_0xb985('0x17')]=function(_0x458e59){switch(_0x458e59['state']){case'INUSE':case _0xb985('0x18'):if(!startsWith(exclude,_0x458e59[_0xb985('0x19')])){members[_0x458e59['device']]={'channel':_0xb985('0x1a'),'interface':_0x458e59[_0xb985('0x19')],'type':_0xb985('0x1b'),'enterAt':utils[_0xb985('0x1c')](),'role':_0xb985('0x1d')};}break;case _0xb985('0x1e'):if(!_[_0xb985('0x1f')](members[_0x458e59['device']])){members[_0x458e59[_0xb985('0x19')]][_0xb985('0x20')]=utils[_0xb985('0x1c')]();members[_0x458e59['device']]['duration']=utils[_0xb985('0x21')](members[_0x458e59[_0xb985('0x19')]][_0xb985('0x20')],members[_0x458e59[_0xb985('0x19')]][_0xb985('0x22')]);if(members[_0x458e59[_0xb985('0x19')]][_0xb985('0x7')]){writeDB(members[_0x458e59[_0xb985('0x19')]]);}}default:break;}};exports[_0xb985('0x23')]=function(_0x398e4d){if(!_['isNil'](members[_0x398e4d[_0xb985('0xc')]])){members[_0x398e4d[_0xb985('0xc')]]=_[_0xb985('0x24')](members[_0x398e4d[_0xb985('0xc')]],{'data4':_0x398e4d['queue'],'uniqueid':_0x398e4d[_0xb985('0x7')]});}};exports[_0xb985('0x25')]=function(_0x2b0f80){if(_0x2b0f80['channel']){var _0x2bd8cc=_0x2b0f80[_0xb985('0x8')][_0xb985('0x26')]('-')[0x0];if(!_[_0xb985('0x1f')](members[_0x2bd8cc])){members[_0x2bd8cc]=_['assign'](members[_0x2bd8cc],{'data1':members[_0x2bd8cc][_0xb985('0x27')]||_0x2b0f80[_0xb985('0xb')],'data2':members[_0x2bd8cc]['data2']||_0x2b0f80[_0xb985('0x28')],'data3':members[_0x2bd8cc][_0xb985('0x29')]||_0x2b0f80['destination'],'uniqueid':members[_0x2bd8cc][_0xb985('0x7')]||_0x2b0f80[_0xb985('0x7')]});if(members[_0x2bd8cc][_0xb985('0x20')]){writeDB(members[_0x2bd8cc]);}}}if(_0x2b0f80[_0xb985('0x2a')]){var _0x4627db=_0x2b0f80[_0xb985('0x2a')][_0xb985('0x26')]('-')[0x0];if(!_[_0xb985('0x1f')](members[_0x4627db])){members[_0x4627db]=_[_0xb985('0x24')](members[_0x4627db],{'data1':members[_0x4627db][_0xb985('0x27')]||_0x2b0f80[_0xb985('0xb')],'data2':members[_0x4627db][_0xb985('0x9')]||_0x2b0f80[_0xb985('0x28')],'data3':members[_0x4627db][_0xb985('0x29')]||_0x2b0f80['destination'],'uniqueid':members[_0x4627db][_0xb985('0x7')]||_0x2b0f80[_0xb985('0x7')]});if(members[_0x4627db][_0xb985('0x20')]){writeDB(members[_0x4627db]);}}}};
\ No newline at end of file
+var _0xe651=['BUSY','device','voice','TALKING','now','agent','NOT_INUSE','diffTime','exitAt','enterAt','uniqueid','isNil','cdr','split','assign','data1','destination','destinationchannel','lodash','util','./utils','Local/_attended@transfer','Queue:','info','MEMBER|%s|%s|%s|%s|%s|%s','interface','channel','data2','membername','type','then','name','CreateMemberReport','getUserByName','internal','catch','error','some','devicestatechange','state','INUSE'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0xe651,0x1d5));var _0x1e65=function(_0x246890,_0x46b964){_0x246890=_0x246890-0x0;var _0x2b2a5a=_0xe651[_0x246890];return _0x2b2a5a;};'use strict';var _=require(_0x1e65('0x0'));var util=require(_0x1e65('0x1'));var utils=require(_0x1e65('0x2'));var members={};var exclude=[_0x1e65('0x3'),_0x1e65('0x4')];function writeDB(_0x18b96e){utils[_0x1e65('0x5')](util['format'](_0x1e65('0x6'),_0x18b96e['uniqueid'],_0x18b96e[_0x1e65('0x7')],_0x18b96e[_0x1e65('0x8')],_0x18b96e[_0x1e65('0x9')],_0x18b96e[_0x1e65('0xa')],_0x18b96e[_0x1e65('0xb')]));if(_0x18b96e[_0x1e65('0x7')]){utils['getUserByInterface'](_0x18b96e['interface'])[_0x1e65('0xc')](function(_0x462dc3){if(_0x462dc3){_0x18b96e[_0x1e65('0xa')]=_0x462dc3[_0x1e65('0xd')];_0x18b96e['internal']=_0x462dc3['internal'];utils['request'](_0x1e65('0xe'),_0x18b96e);}else{utils[_0x1e65('0xf')](_0x18b96e['interface']['split']('/')[0x1])[_0x1e65('0xc')](function(_0x3045ac){if(_0x3045ac){_0x18b96e[_0x1e65('0xa')]=_0x3045ac[_0x1e65('0xd')];_0x18b96e[_0x1e65('0x10')]=_0x3045ac['internal'];utils['request']('CreateMemberReport',_0x18b96e);}});}})[_0x1e65('0x11')](function(_0x1ec6e4){utils[_0x1e65('0x12')](_0x1ec6e4);});}delete members[_0x18b96e[_0x1e65('0x7')]];}function startsWith(_0xdeca08,_0x3473f9){return _[_0x1e65('0x13')](_0xdeca08,function(_0x415d9e){return _['startsWith'](_0x3473f9,_0x415d9e);});}exports[_0x1e65('0x14')]=function(_0x1707b8){switch(_0x1707b8[_0x1e65('0x15')]){case _0x1e65('0x16'):case _0x1e65('0x17'):if(!startsWith(exclude,_0x1707b8[_0x1e65('0x18')])){members[_0x1707b8[_0x1e65('0x18')]]={'channel':_0x1e65('0x19'),'interface':_0x1707b8['device'],'type':_0x1e65('0x1a'),'enterAt':utils[_0x1e65('0x1b')](),'role':_0x1e65('0x1c')};}break;case _0x1e65('0x1d'):if(!_['isNil'](members[_0x1707b8[_0x1e65('0x18')]])){members[_0x1707b8[_0x1e65('0x18')]]['exitAt']=utils[_0x1e65('0x1b')]();members[_0x1707b8[_0x1e65('0x18')]]['duration']=utils[_0x1e65('0x1e')](members[_0x1707b8[_0x1e65('0x18')]][_0x1e65('0x1f')],members[_0x1707b8[_0x1e65('0x18')]][_0x1e65('0x20')]);if(members[_0x1707b8['device']][_0x1e65('0x21')]){writeDB(members[_0x1707b8[_0x1e65('0x18')]]);}}default:break;}};exports['agentcomplete']=function(_0x5edf5a){if(!_[_0x1e65('0x22')](members[_0x5edf5a[_0x1e65('0x7')]])){members[_0x5edf5a[_0x1e65('0x7')]]=_['assign'](members[_0x5edf5a[_0x1e65('0x7')]],{'data4':_0x5edf5a['queue'],'uniqueid':_0x5edf5a[_0x1e65('0x21')]});}};exports[_0x1e65('0x23')]=function(_0xa239a3){if(_0xa239a3['channel']){var _0x317ea9=_0xa239a3[_0x1e65('0x8')][_0x1e65('0x24')]('-')[0x0];if(!_[_0x1e65('0x22')](members[_0x317ea9])){members[_0x317ea9]=_[_0x1e65('0x25')](members[_0x317ea9],{'data1':members[_0x317ea9][_0x1e65('0x26')]||_0xa239a3[_0x1e65('0xb')],'data2':members[_0x317ea9][_0x1e65('0x9')]||_0xa239a3['source'],'data3':members[_0x317ea9]['data3']||_0xa239a3[_0x1e65('0x27')],'uniqueid':members[_0x317ea9][_0x1e65('0x21')]||_0xa239a3[_0x1e65('0x21')]});if(members[_0x317ea9][_0x1e65('0x1f')]){writeDB(members[_0x317ea9]);}}}if(_0xa239a3[_0x1e65('0x28')]){var _0x15bbe6=_0xa239a3[_0x1e65('0x28')]['split']('-')[0x0];if(!_['isNil'](members[_0x15bbe6])){members[_0x15bbe6]=_['assign'](members[_0x15bbe6],{'data1':members[_0x15bbe6]['data1']||_0xa239a3['type'],'data2':members[_0x15bbe6][_0x1e65('0x9')]||_0xa239a3['source'],'data3':members[_0x15bbe6]['data3']||_0xa239a3[_0x1e65('0x27')],'uniqueid':members[_0x15bbe6][_0x1e65('0x21')]||_0xa239a3[_0x1e65('0x21')]});if(members[_0x15bbe6][_0x1e65('0x1f')]){writeDB(members[_0x15bbe6]);}}}};
\ No newline at end of file
index 8782932..e5355d1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeeb2=['queue','lastAssignedTo','calleridnum','accountcode','queuecallerexitreason','getVoiceQueueByName','then','type','CreateVoiceQueueReport','request','transfereduniqueid','uniqueid','queuecallerjoin','assign','position','hangup','isNil','queuecallerleaveAt','queuecallerexit','queuecallercomplete','queuecallercompleteAt','COMPLETEDBYAGENT','queuecallerenterreason','varset','variable','queuecallerabandon','queuecallerabandonAt','now','value','toUpperCase','queuecallerexitAt','ABANDONED','queuecallerleave','holdtime','diffTime','count','connectedlinenum','connectedlinename','agentconnect','destaccountcode','membername','agentcomplete','reason','transfer','COMPLETEDBY','blindtransfer','transfereeuniqueid','transfertype','BLIND','transferexten','extension','transferuniqueid','BLINDTRANSFER','attendedtransfer','origtransfereruniqueid','origtransfererlinkedid','secondtransfererlinkedid','origtransfererexten','ATTENDEDTRANSFER','transfereelinkedid','clone','transfertargetuniqueid','calleridname','queuecallerjoinAt','ATTENDED','secondtransfererexten','secondtransfereruniqueid','transfertargetlinkedid','mohtime','error','stack','musiconholdstart','musiconholdstartAt','musiconholdstop','util','./utils','QUEUE|%s|%s|%s|%s|%s|%s|%s','channel'];(function(_0x2871f1,_0x5d021c){var _0xb2a7a2=function(_0x5a3849){while(--_0x5a3849){_0x2871f1['push'](_0x2871f1['shift']());}};_0xb2a7a2(++_0x5d021c);}(_0xeeb2,0x182));var _0x2eeb=function(_0x52a857,_0xc99fa1){_0x52a857=_0x52a857-0x0;var _0x4e2aae=_0xeeb2[_0x52a857];return _0x4e2aae;};'use strict';var _=require('lodash');var util=require(_0x2eeb('0x0'));var utils=require(_0x2eeb('0x1'));var queues={};function writeDB(_0x4d8f1d){utils['info'](util['format'](_0x2eeb('0x2'),_0x4d8f1d['uniqueid'],_0x4d8f1d[_0x2eeb('0x3')],_0x4d8f1d[_0x2eeb('0x4')],_0x4d8f1d[_0x2eeb('0x5')],_0x4d8f1d[_0x2eeb('0x6')],_0x4d8f1d[_0x2eeb('0x7')],_0x4d8f1d[_0x2eeb('0x8')]));if(_0x4d8f1d[_0x2eeb('0x4')]){utils[_0x2eeb('0x9')](_0x4d8f1d['queue'])[_0x2eeb('0xa')](function(_0xc8f5f8){if(_0xc8f5f8){_0x4d8f1d[_0x2eeb('0xb')]=_0xc8f5f8[_0x2eeb('0xb')];}utils['request'](_0x2eeb('0xc'),_0x4d8f1d);});}else{utils[_0x2eeb('0xd')](_0x2eeb('0xc'),_0x4d8f1d);}if(_0x4d8f1d['transfereduniqueid']){delete queues[_0x4d8f1d[_0x2eeb('0xe')]];}else{delete queues[_0x4d8f1d[_0x2eeb('0xf')]];}}exports[_0x2eeb('0x10')]=function(_0x4823a3){queues[_0x4823a3[_0x2eeb('0xf')]]=_[_0x2eeb('0x11')](_0x4823a3,{'originalposition':_0x4823a3[_0x2eeb('0x12')],'queuecallerjoinAt':utils['now'](),'mohtime':0x0});};exports[_0x2eeb('0x13')]=function(_0x58f921){if(!_[_0x2eeb('0x14')](queues[_0x58f921[_0x2eeb('0xf')]])){if(queues[_0x58f921['uniqueid']][_0x2eeb('0x15')]){if(!queues[_0x58f921[_0x2eeb('0xf')]]['queuecallerabandon']&&!queues[_0x58f921[_0x2eeb('0xf')]][_0x2eeb('0x16')]){queues[_0x58f921[_0x2eeb('0xf')]][_0x2eeb('0x17')]=!![];queues[_0x58f921['uniqueid']][_0x2eeb('0x18')]=utils['now']();queues[_0x58f921[_0x2eeb('0xf')]][_0x2eeb('0x8')]=_0x2eeb('0x19');}writeDB(queues[_0x58f921[_0x2eeb('0xf')]]);}else{if(queues[_0x58f921[_0x2eeb('0xf')]][_0x2eeb('0xe')]){queues[queues[_0x58f921[_0x2eeb('0xf')]][_0x2eeb('0xe')]]=queues[_0x58f921[_0x2eeb('0xf')]];queues[queues[_0x58f921[_0x2eeb('0xf')]][_0x2eeb('0xe')]][_0x2eeb('0x1a')]=0x2;delete queues[_0x58f921[_0x2eeb('0xf')]];}}}};exports[_0x2eeb('0x1b')]=function(_0x233e57){if(!_['isNil'](_0x233e57[_0x2eeb('0x1c')]['queuestatus'])){if(!_[_0x2eeb('0x14')](queues[_0x233e57[_0x2eeb('0xf')]])){queues[_0x233e57['uniqueid']][_0x2eeb('0x1d')]=![];queues[_0x233e57[_0x2eeb('0xf')]][_0x2eeb('0x1e')]=null;queues[_0x233e57[_0x2eeb('0xf')]][_0x2eeb('0x16')]=!![];queues[_0x233e57['uniqueid']]['queuecallerexitAt']=utils[_0x2eeb('0x1f')]();queues[_0x233e57[_0x2eeb('0xf')]][_0x2eeb('0x8')]=_0x233e57[_0x2eeb('0x20')][_0x2eeb('0x21')]();writeDB(queues[_0x233e57[_0x2eeb('0xf')]]);}}else if(!_[_0x2eeb('0x14')](_0x233e57[_0x2eeb('0x1c')]['queueposition'])){if(!_[_0x2eeb('0x14')](queues[_0x233e57['uniqueid']])&&!queues[_0x233e57[_0x2eeb('0xf')]]['queuecallerabandon']){queues[_0x233e57['uniqueid']][_0x2eeb('0x1d')]=![];queues[_0x233e57[_0x2eeb('0xf')]][_0x2eeb('0x1e')]=null;queues[_0x233e57[_0x2eeb('0xf')]][_0x2eeb('0x16')]=!![];queues[_0x233e57[_0x2eeb('0xf')]][_0x2eeb('0x22')]=utils[_0x2eeb('0x1f')]();queues[_0x233e57[_0x2eeb('0xf')]][_0x2eeb('0x8')]='EXITWITHKEY';}}};exports['queuecallerabandon']=function(_0x22e988){if(!_[_0x2eeb('0x14')](queues[_0x22e988[_0x2eeb('0xf')]])){queues[_0x22e988[_0x2eeb('0xf')]][_0x2eeb('0x16')]=![];queues[_0x22e988[_0x2eeb('0xf')]][_0x2eeb('0x22')]=null;queues[_0x22e988[_0x2eeb('0xf')]][_0x2eeb('0x1d')]=!![];queues[_0x22e988[_0x2eeb('0xf')]]['queuecallerabandonAt']=utils[_0x2eeb('0x1f')]();queues[_0x22e988[_0x2eeb('0xf')]][_0x2eeb('0x8')]=_0x2eeb('0x23');}};exports['queuecallerleave']=function(_0x3ba6bf){if(!_[_0x2eeb('0x14')](queues[_0x3ba6bf[_0x2eeb('0xf')]])){queues[_0x3ba6bf[_0x2eeb('0xf')]][_0x2eeb('0x24')]=!![];queues[_0x3ba6bf[_0x2eeb('0xf')]][_0x2eeb('0x15')]=utils['now']();queues[_0x3ba6bf[_0x2eeb('0xf')]][_0x2eeb('0x25')]=utils[_0x2eeb('0x26')](queues[_0x3ba6bf['uniqueid']][_0x2eeb('0x15')],queues[_0x3ba6bf[_0x2eeb('0xf')]]['queuecallerjoinAt']);queues[_0x3ba6bf['uniqueid']][_0x2eeb('0x12')]=_0x3ba6bf[_0x2eeb('0x12')];queues[_0x3ba6bf['uniqueid']][_0x2eeb('0x27')]=_0x3ba6bf[_0x2eeb('0x27')];queues[_0x3ba6bf[_0x2eeb('0xf')]][_0x2eeb('0x28')]=_0x3ba6bf[_0x2eeb('0x28')];queues[_0x3ba6bf[_0x2eeb('0xf')]][_0x2eeb('0x29')]=_0x3ba6bf[_0x2eeb('0x29')];}};exports[_0x2eeb('0x2a')]=function(_0x44937f){if(!_['isNil'](queues[_0x44937f[_0x2eeb('0xf')]])){queues[_0x44937f['uniqueid']][_0x2eeb('0x1d')]=![];queues[_0x44937f[_0x2eeb('0xf')]]['queuecallerabandon']=![];queues[_0x44937f[_0x2eeb('0xf')]][_0x2eeb('0x1e')]=null;queues[_0x44937f['uniqueid']][_0x2eeb('0x16')]=![];queues[_0x44937f[_0x2eeb('0xf')]][_0x2eeb('0x22')]=null;queues[_0x44937f[_0x2eeb('0xf')]]['assigned']=!![];queues[_0x44937f[_0x2eeb('0xf')]][_0x2eeb('0x7')]=_0x44937f[_0x2eeb('0x2b')];queues[_0x44937f[_0x2eeb('0xf')]]['lastAssignedTo']=_0x44937f[_0x2eeb('0x2c')];}};exports[_0x2eeb('0x2d')]=function(_0x97b4d5){if(!_[_0x2eeb('0x14')](queues[_0x97b4d5[_0x2eeb('0xf')]])){if(queues[_0x97b4d5['uniqueid']]['queuecallerleaveAt']){queues[_0x97b4d5[_0x2eeb('0xf')]][_0x2eeb('0x1d')]=![];queues[_0x97b4d5[_0x2eeb('0xf')]]['queuecallerabandon']=![];queues[_0x97b4d5[_0x2eeb('0xf')]][_0x2eeb('0x1e')]=null;queues[_0x97b4d5[_0x2eeb('0xf')]][_0x2eeb('0x16')]=![];queues[_0x97b4d5[_0x2eeb('0xf')]][_0x2eeb('0x22')]=null;queues[_0x97b4d5[_0x2eeb('0xf')]]['assigned']=!![];queues[_0x97b4d5[_0x2eeb('0xf')]][_0x2eeb('0x5')]=_0x97b4d5[_0x2eeb('0x2c')];queues[_0x97b4d5[_0x2eeb('0xf')]][_0x2eeb('0x17')]=!![];queues[_0x97b4d5[_0x2eeb('0xf')]][_0x2eeb('0x18')]=utils['now']();if(_0x97b4d5[_0x2eeb('0x2e')]=='transfer'){if(!queues[_0x97b4d5['uniqueid']][_0x2eeb('0x2f')]){queues[_0x97b4d5[_0x2eeb('0xf')]][_0x2eeb('0x8')]='TRANSFER';}}else{queues[_0x97b4d5['uniqueid']][_0x2eeb('0x8')]=_0x2eeb('0x30')+_0x97b4d5[_0x2eeb('0x2e')][_0x2eeb('0x21')]();}writeDB(queues[_0x97b4d5[_0x2eeb('0xf')]]);}}};exports[_0x2eeb('0x31')]=function(_0x452af5){if(!_[_0x2eeb('0x14')](queues[_0x452af5[_0x2eeb('0x32')]])){queues[_0x452af5['transfereeuniqueid']]['transfer']=!![];queues[_0x452af5[_0x2eeb('0x32')]][_0x2eeb('0x33')]=_0x2eeb('0x34');queues[_0x452af5[_0x2eeb('0x32')]][_0x2eeb('0x35')]=_0x452af5[_0x2eeb('0x36')];queues[_0x452af5[_0x2eeb('0x32')]][_0x2eeb('0x37')]=_0x452af5[_0x2eeb('0x32')];queues[_0x452af5[_0x2eeb('0x32')]][_0x2eeb('0x8')]=_0x2eeb('0x38');}};exports[_0x2eeb('0x39')]=function(_0x5adc45){try{if(_0x5adc45[_0x2eeb('0x3a')]==_0x5adc45[_0x2eeb('0x3b')]){if(!_['isNil'](queues[_0x5adc45['secondtransfererlinkedid']])){queues[_0x5adc45['secondtransfererlinkedid']]['transfer']=!![];queues[_0x5adc45['secondtransfererlinkedid']][_0x2eeb('0x33')]='ATTENDED';queues[_0x5adc45[_0x2eeb('0x3c')]][_0x2eeb('0x35')]=_0x5adc45[_0x2eeb('0x3d')];queues[_0x5adc45[_0x2eeb('0x3c')]][_0x2eeb('0x37')]=_0x5adc45[_0x2eeb('0x3a')];queues[_0x5adc45[_0x2eeb('0x3c')]][_0x2eeb('0x8')]=_0x2eeb('0x3e');}if(!_[_0x2eeb('0x14')](queues[_0x5adc45[_0x2eeb('0x3b')]])){if(_0x5adc45[_0x2eeb('0x3f')]&&queues[_0x5adc45[_0x2eeb('0x3f')]]){queues[_0x5adc45[_0x2eeb('0x3f')]]['queuecallerenterreason']=0x1;queues[_0x5adc45[_0x2eeb('0x32')]]=_[_0x2eeb('0x40')](queues[_0x5adc45['transfereelinkedid']]);queues[_0x5adc45[_0x2eeb('0x32')]][_0x2eeb('0xe')]=_0x5adc45[_0x2eeb('0x41')];queues[_0x5adc45[_0x2eeb('0x32')]]['queuecallerenterreason']=0x2;queues[_0x5adc45[_0x2eeb('0x32')]]['calleridnum']=queues[_0x5adc45[_0x2eeb('0x3c')]][_0x2eeb('0x6')];queues[_0x5adc45[_0x2eeb('0x32')]]['calleridname']=queues[_0x5adc45[_0x2eeb('0x3c')]][_0x2eeb('0x42')];queues[_0x5adc45['transfereeuniqueid']][_0x2eeb('0x43')]=utils[_0x2eeb('0x1f')]();queues[_0x5adc45[_0x2eeb('0x32')]][_0x2eeb('0x15')]=utils[_0x2eeb('0x1f')]();queues[_0x5adc45[_0x2eeb('0x32')]]['holdtime']=0x0;queues[_0x5adc45[_0x2eeb('0x32')]]['mohtime']=0x0;}else{queues[_0x5adc45[_0x2eeb('0x3b')]]['transfereduniqueid']=_0x5adc45['secondtransfererlinkedid'];}}}else if(_0x5adc45['secondtransfereruniqueid']==_0x5adc45[_0x2eeb('0x3c')]){if(!_[_0x2eeb('0x14')](queues[_0x5adc45[_0x2eeb('0x3b')]])){queues[_0x5adc45[_0x2eeb('0x3b')]][_0x2eeb('0x2f')]=!![];queues[_0x5adc45['origtransfererlinkedid']][_0x2eeb('0x33')]=_0x2eeb('0x44');queues[_0x5adc45[_0x2eeb('0x3b')]][_0x2eeb('0x35')]=_0x5adc45[_0x2eeb('0x45')];queues[_0x5adc45[_0x2eeb('0x3b')]][_0x2eeb('0x37')]=_0x5adc45[_0x2eeb('0x46')];queues[_0x5adc45[_0x2eeb('0x3b')]][_0x2eeb('0x8')]=_0x2eeb('0x3e');}if(!_[_0x2eeb('0x14')](queues[_0x5adc45[_0x2eeb('0x3c')]])){if(_0x5adc45['transfertargetlinkedid']&&queues[_0x5adc45['transfertargetlinkedid']]){queues[_0x5adc45['transfertargetlinkedid']]['queuecallerenterreason']=0x1;queues[_0x5adc45[_0x2eeb('0x41')]]=_[_0x2eeb('0x40')](queues[_0x5adc45[_0x2eeb('0x47')]]);queues[_0x5adc45[_0x2eeb('0x41')]][_0x2eeb('0xe')]=_0x5adc45['transfertargetuniqueid'];queues[_0x5adc45[_0x2eeb('0x41')]]['queuecallerenterreason']=0x2;queues[_0x5adc45['transfertargetuniqueid']]['calleridnum']=queues[_0x5adc45['origtransfererlinkedid']][_0x2eeb('0x6')];queues[_0x5adc45[_0x2eeb('0x41')]]['calleridname']=queues[_0x5adc45[_0x2eeb('0x3b')]]['calleridname'];queues[_0x5adc45[_0x2eeb('0x41')]]['queuecallerjoinAt']=utils[_0x2eeb('0x1f')]();queues[_0x5adc45[_0x2eeb('0x41')]][_0x2eeb('0x15')]=utils['now']();queues[_0x5adc45[_0x2eeb('0x41')]]['holdtime']=0x0;queues[_0x5adc45[_0x2eeb('0x41')]][_0x2eeb('0x48')]=0x0;}else{queues[_0x5adc45[_0x2eeb('0x3c')]][_0x2eeb('0xe')]=_0x5adc45[_0x2eeb('0x3b')];}}}}catch(_0x5c6af2){utils[_0x2eeb('0x49')](_0x5c6af2[_0x2eeb('0x4a')]);}};exports[_0x2eeb('0x4b')]=function(_0xb004db){if(!_[_0x2eeb('0x14')](queues[_0xb004db[_0x2eeb('0xf')]])){queues[_0xb004db[_0x2eeb('0xf')]][_0x2eeb('0x4c')]=utils[_0x2eeb('0x1f')]();}};exports[_0x2eeb('0x4d')]=function(_0x37f54a){if(!_[_0x2eeb('0x14')](queues[_0x37f54a[_0x2eeb('0xf')]])){if(!_[_0x2eeb('0x14')](queues[_0x37f54a[_0x2eeb('0xf')]][_0x2eeb('0x4c')])){queues[_0x37f54a[_0x2eeb('0xf')]][_0x2eeb('0x48')]+=utils[_0x2eeb('0x26')](utils[_0x2eeb('0x1f')](),queues[_0x37f54a[_0x2eeb('0xf')]][_0x2eeb('0x4c')]);delete queues[_0x37f54a[_0x2eeb('0xf')]][_0x2eeb('0x4c')];}}};
\ No newline at end of file
+var _0x89be=['secondtransfererlinkedid','ATTENDED','origtransfererexten','ATTENDEDTRANSFER','transfereelinkedid','clone','transfertargetuniqueid','holdtime','mohtime','secondtransfereruniqueid','secondtransfererexten','transfertargetlinkedid','calleridname','stack','musiconholdstart','musiconholdstop','musiconholdstartAt','lodash','util','./utils','QUEUE|%s|%s|%s|%s|%s|%s|%s','uniqueid','channel','queue','calleridnum','accountcode','queuecallerexitreason','getVoiceQueueByName','type','CreateVoiceQueueReport','transfereduniqueid','queuecallerjoin','assign','position','hangup','isNil','queuecallerleaveAt','queuecallerabandon','queuecallerexit','queuecallercomplete','queuecallercompleteAt','now','COMPLETEDBYAGENT','queuecallerenterreason','variable','queuestatus','queuecallerabandonAt','queuecallerexitAt','value','toUpperCase','queueposition','ABANDONED','queuecallerleave','diffTime','queuecallerjoinAt','count','connectedlinenum','agentconnect','assigned','destaccountcode','lastAssignedTo','membername','agentcomplete','transfer','TRANSFER','COMPLETEDBY','reason','blindtransfer','transfereeuniqueid','transfertype','transferexten','extension','transferuniqueid','BLINDTRANSFER','origtransfererlinkedid'];(function(_0x5030ed,_0x42922d){var _0x4dba97=function(_0x35f148){while(--_0x35f148){_0x5030ed['push'](_0x5030ed['shift']());}};_0x4dba97(++_0x42922d);}(_0x89be,0xf2));var _0xe89b=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x89be[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0xe89b('0x0'));var util=require(_0xe89b('0x1'));var utils=require(_0xe89b('0x2'));var queues={};function writeDB(_0x3a54a6){utils['info'](util['format'](_0xe89b('0x3'),_0x3a54a6[_0xe89b('0x4')],_0x3a54a6[_0xe89b('0x5')],_0x3a54a6[_0xe89b('0x6')],_0x3a54a6['lastAssignedTo'],_0x3a54a6[_0xe89b('0x7')],_0x3a54a6[_0xe89b('0x8')],_0x3a54a6[_0xe89b('0x9')]));if(_0x3a54a6['queue']){utils[_0xe89b('0xa')](_0x3a54a6['queue'])['then'](function(_0x396c08){if(_0x396c08){_0x3a54a6[_0xe89b('0xb')]=_0x396c08[_0xe89b('0xb')];}utils['request'](_0xe89b('0xc'),_0x3a54a6);});}else{utils['request'](_0xe89b('0xc'),_0x3a54a6);}if(_0x3a54a6[_0xe89b('0xd')]){delete queues[_0x3a54a6[_0xe89b('0xd')]];}else{delete queues[_0x3a54a6[_0xe89b('0x4')]];}}exports[_0xe89b('0xe')]=function(_0x538616){queues[_0x538616[_0xe89b('0x4')]]=_[_0xe89b('0xf')](_0x538616,{'originalposition':_0x538616[_0xe89b('0x10')],'queuecallerjoinAt':utils['now'](),'mohtime':0x0});};exports[_0xe89b('0x11')]=function(_0x4410c1){if(!_[_0xe89b('0x12')](queues[_0x4410c1[_0xe89b('0x4')]])){if(queues[_0x4410c1[_0xe89b('0x4')]][_0xe89b('0x13')]){if(!queues[_0x4410c1[_0xe89b('0x4')]][_0xe89b('0x14')]&&!queues[_0x4410c1[_0xe89b('0x4')]][_0xe89b('0x15')]){queues[_0x4410c1['uniqueid']][_0xe89b('0x16')]=!![];queues[_0x4410c1['uniqueid']][_0xe89b('0x17')]=utils[_0xe89b('0x18')]();queues[_0x4410c1[_0xe89b('0x4')]][_0xe89b('0x9')]=_0xe89b('0x19');}writeDB(queues[_0x4410c1['uniqueid']]);}else{if(queues[_0x4410c1[_0xe89b('0x4')]][_0xe89b('0xd')]){queues[queues[_0x4410c1['uniqueid']][_0xe89b('0xd')]]=queues[_0x4410c1['uniqueid']];queues[queues[_0x4410c1[_0xe89b('0x4')]]['transfereduniqueid']][_0xe89b('0x1a')]=0x2;delete queues[_0x4410c1[_0xe89b('0x4')]];}}}};exports['varset']=function(_0x37c190){if(!_[_0xe89b('0x12')](_0x37c190[_0xe89b('0x1b')][_0xe89b('0x1c')])){if(!_[_0xe89b('0x12')](queues[_0x37c190[_0xe89b('0x4')]])){queues[_0x37c190[_0xe89b('0x4')]][_0xe89b('0x14')]=![];queues[_0x37c190[_0xe89b('0x4')]][_0xe89b('0x1d')]=null;queues[_0x37c190[_0xe89b('0x4')]][_0xe89b('0x15')]=!![];queues[_0x37c190[_0xe89b('0x4')]][_0xe89b('0x1e')]=utils[_0xe89b('0x18')]();queues[_0x37c190[_0xe89b('0x4')]][_0xe89b('0x9')]=_0x37c190[_0xe89b('0x1f')][_0xe89b('0x20')]();writeDB(queues[_0x37c190[_0xe89b('0x4')]]);}}else if(!_[_0xe89b('0x12')](_0x37c190[_0xe89b('0x1b')][_0xe89b('0x21')])){if(!_['isNil'](queues[_0x37c190[_0xe89b('0x4')]])&&!queues[_0x37c190['uniqueid']]['queuecallerabandon']){queues[_0x37c190['uniqueid']][_0xe89b('0x14')]=![];queues[_0x37c190[_0xe89b('0x4')]]['queuecallerabandonAt']=null;queues[_0x37c190[_0xe89b('0x4')]][_0xe89b('0x15')]=!![];queues[_0x37c190[_0xe89b('0x4')]][_0xe89b('0x1e')]=utils[_0xe89b('0x18')]();queues[_0x37c190['uniqueid']][_0xe89b('0x9')]='EXITWITHKEY';}}};exports[_0xe89b('0x14')]=function(_0x48df33){if(!_[_0xe89b('0x12')](queues[_0x48df33[_0xe89b('0x4')]])){queues[_0x48df33[_0xe89b('0x4')]]['queuecallerexit']=![];queues[_0x48df33[_0xe89b('0x4')]][_0xe89b('0x1e')]=null;queues[_0x48df33[_0xe89b('0x4')]][_0xe89b('0x14')]=!![];queues[_0x48df33['uniqueid']][_0xe89b('0x1d')]=utils[_0xe89b('0x18')]();queues[_0x48df33[_0xe89b('0x4')]][_0xe89b('0x9')]=_0xe89b('0x22');}};exports[_0xe89b('0x23')]=function(_0xb47054){if(!_[_0xe89b('0x12')](queues[_0xb47054[_0xe89b('0x4')]])){queues[_0xb47054[_0xe89b('0x4')]][_0xe89b('0x23')]=!![];queues[_0xb47054['uniqueid']][_0xe89b('0x13')]=utils[_0xe89b('0x18')]();queues[_0xb47054['uniqueid']]['holdtime']=utils[_0xe89b('0x24')](queues[_0xb47054['uniqueid']][_0xe89b('0x13')],queues[_0xb47054[_0xe89b('0x4')]][_0xe89b('0x25')]);queues[_0xb47054['uniqueid']][_0xe89b('0x10')]=_0xb47054[_0xe89b('0x10')];queues[_0xb47054[_0xe89b('0x4')]][_0xe89b('0x26')]=_0xb47054[_0xe89b('0x26')];queues[_0xb47054[_0xe89b('0x4')]][_0xe89b('0x27')]=_0xb47054[_0xe89b('0x27')];queues[_0xb47054[_0xe89b('0x4')]]['connectedlinename']=_0xb47054['connectedlinename'];}};exports[_0xe89b('0x28')]=function(_0x3246e4){if(!_[_0xe89b('0x12')](queues[_0x3246e4[_0xe89b('0x4')]])){queues[_0x3246e4[_0xe89b('0x4')]][_0xe89b('0x14')]=![];queues[_0x3246e4[_0xe89b('0x4')]]['queuecallerabandon']=![];queues[_0x3246e4[_0xe89b('0x4')]]['queuecallerabandonAt']=null;queues[_0x3246e4['uniqueid']][_0xe89b('0x15')]=![];queues[_0x3246e4[_0xe89b('0x4')]][_0xe89b('0x1e')]=null;queues[_0x3246e4[_0xe89b('0x4')]][_0xe89b('0x29')]=!![];queues[_0x3246e4[_0xe89b('0x4')]][_0xe89b('0x8')]=_0x3246e4[_0xe89b('0x2a')];queues[_0x3246e4[_0xe89b('0x4')]][_0xe89b('0x2b')]=_0x3246e4[_0xe89b('0x2c')];}};exports[_0xe89b('0x2d')]=function(_0x4ef20a){if(!_[_0xe89b('0x12')](queues[_0x4ef20a['uniqueid']])){if(queues[_0x4ef20a[_0xe89b('0x4')]][_0xe89b('0x13')]){queues[_0x4ef20a[_0xe89b('0x4')]]['queuecallerabandon']=![];queues[_0x4ef20a[_0xe89b('0x4')]][_0xe89b('0x14')]=![];queues[_0x4ef20a[_0xe89b('0x4')]][_0xe89b('0x1d')]=null;queues[_0x4ef20a['uniqueid']][_0xe89b('0x15')]=![];queues[_0x4ef20a['uniqueid']][_0xe89b('0x1e')]=null;queues[_0x4ef20a[_0xe89b('0x4')]][_0xe89b('0x29')]=!![];queues[_0x4ef20a[_0xe89b('0x4')]][_0xe89b('0x2b')]=_0x4ef20a['membername'];queues[_0x4ef20a[_0xe89b('0x4')]][_0xe89b('0x16')]=!![];queues[_0x4ef20a[_0xe89b('0x4')]][_0xe89b('0x17')]=utils[_0xe89b('0x18')]();if(_0x4ef20a['reason']==_0xe89b('0x2e')){if(!queues[_0x4ef20a['uniqueid']][_0xe89b('0x2e')]){queues[_0x4ef20a[_0xe89b('0x4')]][_0xe89b('0x9')]=_0xe89b('0x2f');}}else{queues[_0x4ef20a['uniqueid']][_0xe89b('0x9')]=_0xe89b('0x30')+_0x4ef20a[_0xe89b('0x31')][_0xe89b('0x20')]();}writeDB(queues[_0x4ef20a[_0xe89b('0x4')]]);}}};exports[_0xe89b('0x32')]=function(_0x490d57){if(!_[_0xe89b('0x12')](queues[_0x490d57[_0xe89b('0x33')]])){queues[_0x490d57[_0xe89b('0x33')]][_0xe89b('0x2e')]=!![];queues[_0x490d57[_0xe89b('0x33')]][_0xe89b('0x34')]='BLIND';queues[_0x490d57[_0xe89b('0x33')]][_0xe89b('0x35')]=_0x490d57[_0xe89b('0x36')];queues[_0x490d57['transfereeuniqueid']][_0xe89b('0x37')]=_0x490d57[_0xe89b('0x33')];queues[_0x490d57[_0xe89b('0x33')]]['queuecallerexitreason']=_0xe89b('0x38');}};exports['attendedtransfer']=function(_0x10bd04){try{if(_0x10bd04['origtransfereruniqueid']==_0x10bd04[_0xe89b('0x39')]){if(!_['isNil'](queues[_0x10bd04[_0xe89b('0x3a')]])){queues[_0x10bd04[_0xe89b('0x3a')]]['transfer']=!![];queues[_0x10bd04[_0xe89b('0x3a')]][_0xe89b('0x34')]=_0xe89b('0x3b');queues[_0x10bd04[_0xe89b('0x3a')]][_0xe89b('0x35')]=_0x10bd04[_0xe89b('0x3c')];queues[_0x10bd04[_0xe89b('0x3a')]][_0xe89b('0x37')]=_0x10bd04['origtransfereruniqueid'];queues[_0x10bd04[_0xe89b('0x3a')]][_0xe89b('0x9')]=_0xe89b('0x3d');}if(!_['isNil'](queues[_0x10bd04[_0xe89b('0x39')]])){if(_0x10bd04[_0xe89b('0x3e')]&&queues[_0x10bd04[_0xe89b('0x3e')]]){queues[_0x10bd04[_0xe89b('0x3e')]]['queuecallerenterreason']=0x1;queues[_0x10bd04[_0xe89b('0x33')]]=_[_0xe89b('0x3f')](queues[_0x10bd04[_0xe89b('0x3e')]]);queues[_0x10bd04[_0xe89b('0x33')]][_0xe89b('0xd')]=_0x10bd04[_0xe89b('0x40')];queues[_0x10bd04[_0xe89b('0x33')]][_0xe89b('0x1a')]=0x2;queues[_0x10bd04[_0xe89b('0x33')]][_0xe89b('0x7')]=queues[_0x10bd04[_0xe89b('0x3a')]][_0xe89b('0x7')];queues[_0x10bd04[_0xe89b('0x33')]]['calleridname']=queues[_0x10bd04['secondtransfererlinkedid']]['calleridname'];queues[_0x10bd04['transfereeuniqueid']][_0xe89b('0x25')]=utils[_0xe89b('0x18')]();queues[_0x10bd04[_0xe89b('0x33')]]['queuecallerleaveAt']=utils[_0xe89b('0x18')]();queues[_0x10bd04['transfereeuniqueid']][_0xe89b('0x41')]=0x0;queues[_0x10bd04[_0xe89b('0x33')]][_0xe89b('0x42')]=0x0;}else{queues[_0x10bd04[_0xe89b('0x39')]]['transfereduniqueid']=_0x10bd04[_0xe89b('0x3a')];}}}else if(_0x10bd04[_0xe89b('0x43')]==_0x10bd04[_0xe89b('0x3a')]){if(!_[_0xe89b('0x12')](queues[_0x10bd04['origtransfererlinkedid']])){queues[_0x10bd04['origtransfererlinkedid']][_0xe89b('0x2e')]=!![];queues[_0x10bd04['origtransfererlinkedid']][_0xe89b('0x34')]='ATTENDED';queues[_0x10bd04['origtransfererlinkedid']][_0xe89b('0x35')]=_0x10bd04[_0xe89b('0x44')];queues[_0x10bd04[_0xe89b('0x39')]][_0xe89b('0x37')]=_0x10bd04[_0xe89b('0x43')];queues[_0x10bd04[_0xe89b('0x39')]][_0xe89b('0x9')]='ATTENDEDTRANSFER';}if(!_[_0xe89b('0x12')](queues[_0x10bd04[_0xe89b('0x3a')]])){if(_0x10bd04[_0xe89b('0x45')]&&queues[_0x10bd04[_0xe89b('0x45')]]){queues[_0x10bd04[_0xe89b('0x45')]]['queuecallerenterreason']=0x1;queues[_0x10bd04['transfertargetuniqueid']]=_[_0xe89b('0x3f')](queues[_0x10bd04[_0xe89b('0x45')]]);queues[_0x10bd04[_0xe89b('0x40')]]['transfereduniqueid']=_0x10bd04[_0xe89b('0x40')];queues[_0x10bd04['transfertargetuniqueid']][_0xe89b('0x1a')]=0x2;queues[_0x10bd04[_0xe89b('0x40')]]['calleridnum']=queues[_0x10bd04['origtransfererlinkedid']]['calleridnum'];queues[_0x10bd04[_0xe89b('0x40')]]['calleridname']=queues[_0x10bd04[_0xe89b('0x39')]][_0xe89b('0x46')];queues[_0x10bd04[_0xe89b('0x40')]]['queuecallerjoinAt']=utils[_0xe89b('0x18')]();queues[_0x10bd04[_0xe89b('0x40')]]['queuecallerleaveAt']=utils[_0xe89b('0x18')]();queues[_0x10bd04[_0xe89b('0x40')]]['holdtime']=0x0;queues[_0x10bd04[_0xe89b('0x40')]][_0xe89b('0x42')]=0x0;}else{queues[_0x10bd04['secondtransfererlinkedid']][_0xe89b('0xd')]=_0x10bd04['origtransfererlinkedid'];}}}}catch(_0x420712){utils['error'](_0x420712[_0xe89b('0x47')]);}};exports[_0xe89b('0x48')]=function(_0x289c40){if(!_['isNil'](queues[_0x289c40[_0xe89b('0x4')]])){queues[_0x289c40[_0xe89b('0x4')]]['musiconholdstartAt']=utils[_0xe89b('0x18')]();}};exports[_0xe89b('0x49')]=function(_0x505a1e){if(!_[_0xe89b('0x12')](queues[_0x505a1e['uniqueid']])){if(!_[_0xe89b('0x12')](queues[_0x505a1e[_0xe89b('0x4')]]['musiconholdstartAt'])){queues[_0x505a1e[_0xe89b('0x4')]]['mohtime']+=utils[_0xe89b('0x24')](utils['now'](),queues[_0x505a1e[_0xe89b('0x4')]]['musiconholdstartAt']);delete queues[_0x505a1e[_0xe89b('0x4')]][_0xe89b('0x4a')];}}};
\ No newline at end of file
index 9fd4e6d..32fbdc9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x70e0=['.WAV','find','monitors','hangup','calleridnum','calleridname','connectedlinenum','connectedlinename','type','outbound','forEach','newexten','set','appdata','toLowerCase','split','lastIndexOf','queuecallerjoin','queue','lodash','./utils','getUserByInternal','accountcode','then','name','request','newchannel','uniqueid','linkedid','channel','error','stack','newstate','isNil','channelstate','transfer','variable','endsWith','value','.wav49'];(function(_0x1c0489,_0x509012){var _0x56d57a=function(_0x1d3fa8){while(--_0x1d3fa8){_0x1c0489['push'](_0x1c0489['shift']());}};_0x56d57a(++_0x509012);}(_0x70e0,0x17b));var _0x070e=function(_0x5e3632,_0x4a531d){_0x5e3632=_0x5e3632-0x0;var _0x5082f3=_0x70e0[_0x5e3632];return _0x5082f3;};'use strict';var _=require(_0x070e('0x0'));var utils=require(_0x070e('0x1'));var recordings={};function writeDB(_0x198c2e){utils['debug'](_0x198c2e);if(_0x198c2e['accountcode']){utils[_0x070e('0x2')](_0x198c2e[_0x070e('0x3')])[_0x070e('0x4')](function(_0x2593e5){if(_0x2593e5){_0x198c2e['membername']=_0x2593e5[_0x070e('0x5')];_0x198c2e['UserId']=_0x2593e5['id'];}utils[_0x070e('0x6')]('CreateVoiceRecording',_0x198c2e);});}else{utils['request']('CreateVoiceRecording',_0x198c2e);}}exports[_0x070e('0x7')]=function(_0x1e11f0){try{if(_0x1e11f0[_0x070e('0x8')]==_0x1e11f0[_0x070e('0x9')]){recordings[_0x1e11f0[_0x070e('0x8')]]={'uniqueid':_0x1e11f0[_0x070e('0x8')],'accountcode':_0x1e11f0[_0x070e('0x3')],'exten':_0x1e11f0['exten'],'context':_0x1e11f0['context'],'channel':_0x1e11f0[_0x070e('0xa')],'monitors':[]};}}catch(_0x2e3e5e){utils[_0x070e('0xb')](_0x2e3e5e[_0x070e('0xc')]);}};exports[_0x070e('0xd')]=function(_0xffcdd6){try{if(!_[_0x070e('0xe')](recordings[_0xffcdd6[_0x070e('0x8')]])&&_0xffcdd6[_0x070e('0xf')]==0x6){}else if(!_[_0x070e('0xe')](recordings[_0xffcdd6[_0x070e('0x9')]])&&_0xffcdd6['channelstate']==0x6&&_0xffcdd6['context']!=_0x070e('0x10')){recordings[_0xffcdd6['linkedid']]['accountcode']=_0xffcdd6['accountcode'];}}catch(_0x11d2ce){utils[_0x070e('0xb')](_0x11d2ce['stack']);}};exports['varset']=function(_0x373d86){try{if(!_[_0x070e('0xe')](_0x373d86[_0x070e('0x11')])&&!_[_0x070e('0xe')](_0x373d86['variable']['mixmonitor_filename'])){if(_[_0x070e('0x12')](_0x373d86[_0x070e('0x13')],_0x070e('0x14'))){_0x373d86[_0x070e('0x13')]=_0x373d86[_0x070e('0x13')]['replace'](_0x070e('0x14'),_0x070e('0x15'));}if(recordings[_0x373d86[_0x070e('0x9')]]){var _0x3ea105=_[_0x070e('0x16')](recordings[_0x373d86['linkedid']]['monitors'],{'value':_0x373d86['value']});if(_[_0x070e('0xe')](_0x3ea105)){recordings[_0x373d86[_0x070e('0x9')]][_0x070e('0x17')]['push']({'value':_0x373d86[_0x070e('0x13')]});}}}}catch(_0x5dc5d2){utils[_0x070e('0xb')](_0x5dc5d2[_0x070e('0xc')]);}};exports[_0x070e('0x18')]=function(_0x33e8c6){try{if(!_[_0x070e('0xe')](recordings[_0x33e8c6[_0x070e('0x8')]])){recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x19')]=_0x33e8c6['calleridnum'];recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x1a')]=_0x33e8c6[_0x070e('0x1a')];recordings[_0x33e8c6['uniqueid']][_0x070e('0x1b')]=_0x33e8c6['connectedlinenum'];recordings[_0x33e8c6['uniqueid']][_0x070e('0x1c')]=_0x33e8c6[_0x070e('0x1c')];if(recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x1d')]==_0x070e('0x1e')&&recordings[_0x33e8c6['uniqueid']][_0x070e('0x3')]){recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x1b')]=recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x3')];recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x1c')]='';}recordings[_0x33e8c6[_0x070e('0x8')]]['monitors'][_0x070e('0x1f')](_0x351641=>{var _0x3a16d0=_['clone'](recordings[_0x33e8c6['uniqueid']]);_0x3a16d0[_0x070e('0x13')]=_0x351641[_0x070e('0x13')];writeDB(_0x3a16d0);});delete recordings[_0x33e8c6[_0x070e('0x8')]];}}catch(_0x51402c){utils[_0x070e('0xb')](_0x51402c[_0x070e('0xc')]);}};exports[_0x070e('0x20')]=function(_0x5f2bee){try{if(!_['isNil'](recordings[_0x5f2bee['uniqueid']])){if(_0x5f2bee['application']['toLowerCase']()==_0x070e('0x21')&&_['startsWith'](_0x5f2bee[_0x070e('0x22')][_0x070e('0x23')](),'cdr')){var _0x47a739=_0x5f2bee[_0x070e('0x22')][_0x070e('0x24')]('=');var _0x55288a=_0x47a739[0x0]['substring'](_0x47a739[0x0][_0x070e('0x25')]('(')+0x1,_0x47a739[0x0][_0x070e('0x25')](')'));var _0x444d02=_0x47a739[0x1];recordings[_0x5f2bee[_0x070e('0x8')]][_0x55288a]=_0x444d02;}}}catch(_0x18f0ad){utils['error'](_0x18f0ad['stack']);}};exports[_0x070e('0x26')]=function(_0x3011c4){try{if(!_[_0x070e('0xe')](recordings[_0x3011c4[_0x070e('0x8')]])){recordings[_0x3011c4[_0x070e('0x8')]]['queue']=_0x3011c4[_0x070e('0x27')];}}catch(_0x1927f4){utils['error'](_0x1927f4[_0x070e('0xc')]);}};
\ No newline at end of file
+var _0x70e0=['.WAV','find','monitors','hangup','calleridnum','calleridname','connectedlinenum','connectedlinename','type','outbound','forEach','newexten','set','appdata','toLowerCase','split','lastIndexOf','queuecallerjoin','queue','lodash','./utils','getUserByInternal','accountcode','then','name','request','newchannel','uniqueid','linkedid','channel','error','stack','newstate','isNil','channelstate','transfer','variable','endsWith','value','.wav49'];(function(_0xddbc70,_0x39af43){var _0x3e3549=function(_0x4eb368){while(--_0x4eb368){_0xddbc70['push'](_0xddbc70['shift']());}};_0x3e3549(++_0x39af43);}(_0x70e0,0x17b));var _0x070e=function(_0x23431b,_0x177738){_0x23431b=_0x23431b-0x0;var _0x95c6ed=_0x70e0[_0x23431b];return _0x95c6ed;};'use strict';var _=require(_0x070e('0x0'));var utils=require(_0x070e('0x1'));var recordings={};function writeDB(_0x198c2e){utils['debug'](_0x198c2e);if(_0x198c2e['accountcode']){utils[_0x070e('0x2')](_0x198c2e[_0x070e('0x3')])[_0x070e('0x4')](function(_0x2593e5){if(_0x2593e5){_0x198c2e['membername']=_0x2593e5[_0x070e('0x5')];_0x198c2e['UserId']=_0x2593e5['id'];}utils[_0x070e('0x6')]('CreateVoiceRecording',_0x198c2e);});}else{utils['request']('CreateVoiceRecording',_0x198c2e);}}exports[_0x070e('0x7')]=function(_0x1e11f0){try{if(_0x1e11f0[_0x070e('0x8')]==_0x1e11f0[_0x070e('0x9')]){recordings[_0x1e11f0[_0x070e('0x8')]]={'uniqueid':_0x1e11f0[_0x070e('0x8')],'accountcode':_0x1e11f0[_0x070e('0x3')],'exten':_0x1e11f0['exten'],'context':_0x1e11f0['context'],'channel':_0x1e11f0[_0x070e('0xa')],'monitors':[]};}}catch(_0x2e3e5e){utils[_0x070e('0xb')](_0x2e3e5e[_0x070e('0xc')]);}};exports[_0x070e('0xd')]=function(_0xffcdd6){try{if(!_[_0x070e('0xe')](recordings[_0xffcdd6[_0x070e('0x8')]])&&_0xffcdd6[_0x070e('0xf')]==0x6){}else if(!_[_0x070e('0xe')](recordings[_0xffcdd6[_0x070e('0x9')]])&&_0xffcdd6['channelstate']==0x6&&_0xffcdd6['context']!=_0x070e('0x10')){recordings[_0xffcdd6['linkedid']]['accountcode']=_0xffcdd6['accountcode'];}}catch(_0x11d2ce){utils[_0x070e('0xb')](_0x11d2ce['stack']);}};exports['varset']=function(_0x373d86){try{if(!_[_0x070e('0xe')](_0x373d86[_0x070e('0x11')])&&!_[_0x070e('0xe')](_0x373d86['variable']['mixmonitor_filename'])){if(_[_0x070e('0x12')](_0x373d86[_0x070e('0x13')],_0x070e('0x14'))){_0x373d86[_0x070e('0x13')]=_0x373d86[_0x070e('0x13')]['replace'](_0x070e('0x14'),_0x070e('0x15'));}if(recordings[_0x373d86[_0x070e('0x9')]]){var _0x3ea105=_[_0x070e('0x16')](recordings[_0x373d86['linkedid']]['monitors'],{'value':_0x373d86['value']});if(_[_0x070e('0xe')](_0x3ea105)){recordings[_0x373d86[_0x070e('0x9')]][_0x070e('0x17')]['push']({'value':_0x373d86[_0x070e('0x13')]});}}}}catch(_0x5dc5d2){utils[_0x070e('0xb')](_0x5dc5d2[_0x070e('0xc')]);}};exports[_0x070e('0x18')]=function(_0x33e8c6){try{if(!_[_0x070e('0xe')](recordings[_0x33e8c6[_0x070e('0x8')]])){recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x19')]=_0x33e8c6['calleridnum'];recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x1a')]=_0x33e8c6[_0x070e('0x1a')];recordings[_0x33e8c6['uniqueid']][_0x070e('0x1b')]=_0x33e8c6['connectedlinenum'];recordings[_0x33e8c6['uniqueid']][_0x070e('0x1c')]=_0x33e8c6[_0x070e('0x1c')];if(recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x1d')]==_0x070e('0x1e')&&recordings[_0x33e8c6['uniqueid']][_0x070e('0x3')]){recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x1b')]=recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x3')];recordings[_0x33e8c6[_0x070e('0x8')]][_0x070e('0x1c')]='';}recordings[_0x33e8c6[_0x070e('0x8')]]['monitors'][_0x070e('0x1f')](_0x351641=>{var _0x3a16d0=_['clone'](recordings[_0x33e8c6['uniqueid']]);_0x3a16d0[_0x070e('0x13')]=_0x351641[_0x070e('0x13')];writeDB(_0x3a16d0);});delete recordings[_0x33e8c6[_0x070e('0x8')]];}}catch(_0x51402c){utils[_0x070e('0xb')](_0x51402c[_0x070e('0xc')]);}};exports[_0x070e('0x20')]=function(_0x5f2bee){try{if(!_['isNil'](recordings[_0x5f2bee['uniqueid']])){if(_0x5f2bee['application']['toLowerCase']()==_0x070e('0x21')&&_['startsWith'](_0x5f2bee[_0x070e('0x22')][_0x070e('0x23')](),'cdr')){var _0x47a739=_0x5f2bee[_0x070e('0x22')][_0x070e('0x24')]('=');var _0x55288a=_0x47a739[0x0]['substring'](_0x47a739[0x0][_0x070e('0x25')]('(')+0x1,_0x47a739[0x0][_0x070e('0x25')](')'));var _0x444d02=_0x47a739[0x1];recordings[_0x5f2bee[_0x070e('0x8')]][_0x55288a]=_0x444d02;}}}catch(_0x18f0ad){utils['error'](_0x18f0ad['stack']);}};exports[_0x070e('0x26')]=function(_0x3011c4){try{if(!_[_0x070e('0xe')](recordings[_0x3011c4[_0x070e('0x8')]])){recordings[_0x3011c4[_0x070e('0x8')]]['queue']=_0x3011c4[_0x070e('0x27')];}}catch(_0x1927f4){utils['error'](_0x1927f4[_0x070e('0xc')]);}};
\ No newline at end of file
index b5ad0d6..212c201 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc1da=['transfertargetconnectedlinename','transfertargetaccountcode','transfertargetcontext','transfertargetexten','transfertargetlinkedid','error','lodash','util','./utils','info','TRANSFER|%s','type','request','stack','attendedtransfer','assign','origtransfererchannel','origtransferercalleridnum','origtransferercalleridname','secondtransfererconnectedlinenum','secondtransferercontext','origtransfererlinkedid','origtransferercontext','origtransfererexten','isNil','transfertargetchannel','transfertargetcalleridnum','transfertargetcalleridname','transfertargetconnectedlinenum'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xc1da,0x1b9));var _0xac1d=function(_0x1ce0c9,_0xa72eb1){_0x1ce0c9=_0x1ce0c9-0x0;var _0x32325f=_0xc1da[_0x1ce0c9];return _0x32325f;};'use strict';var _=require(_0xac1d('0x0'));var util=require(_0xac1d('0x1'));var utils=require(_0xac1d('0x2'));function writeDB(_0x449762){utils[_0xac1d('0x3')](util['format'](_0xac1d('0x4'),_0x449762[_0xac1d('0x5')]));utils[_0xac1d('0x6')]('CreateVoiceTransferReport',_0x449762);}exports['blindtransfer']=function(_0x18f9ef){try{_0x18f9ef[_0xac1d('0x5')]='blind';writeDB(_0x18f9ef);}catch(_0x16f2d9){utils['error'](_0x16f2d9[_0xac1d('0x7')]);}};exports[_0xac1d('0x8')]=function(_0x2ca1fc){try{_0x2ca1fc=_[_0xac1d('0x9')](_0x2ca1fc,{'transfererchannel':_0x2ca1fc[_0xac1d('0xa')],'transferercalleridnum':_0x2ca1fc[_0xac1d('0xb')],'transferercalleridname':_0x2ca1fc[_0xac1d('0xc')],'transfererconnectedlinenum':_0x2ca1fc[_0xac1d('0xd')],'transfererconnectedlinename':_0x2ca1fc['secondtransfererconnectedlinename'],'transfereraccountcode':_0x2ca1fc['origtransfereraccountcode'],'transferercontext':_0x2ca1fc[_0xac1d('0xe')],'transfererexten':_0x2ca1fc['secondtransfererexten'],'transfererlinkedid':_0x2ca1fc[_0xac1d('0xf')],'context':_0x2ca1fc[_0xac1d('0x10')],'extension':_0x2ca1fc[_0xac1d('0x11')],'type':'attended'});if(_[_0xac1d('0x12')](_0x2ca1fc['transfereechannel'])){_0x2ca1fc=_['assign'](_0x2ca1fc,{'transfereechannel':_0x2ca1fc[_0xac1d('0x13')],'transfereecalleridnum':_0x2ca1fc[_0xac1d('0x14')],'transfereecalleridname':_0x2ca1fc[_0xac1d('0x15')],'transfereeconnectedlinenum':_0x2ca1fc[_0xac1d('0x16')],'transfereeconnectedlinename':_0x2ca1fc[_0xac1d('0x17')],'transfereeaccountcode':_0x2ca1fc[_0xac1d('0x18')],'transfereecontext':_0x2ca1fc[_0xac1d('0x19')],'transfereeexten':_0x2ca1fc[_0xac1d('0x1a')],'transfereelinkedid':_0x2ca1fc[_0xac1d('0x1b')]});}writeDB(_0x2ca1fc);}catch(_0x22a489){utils[_0xac1d('0x1c')](_0x22a489['stack']);}};
\ No newline at end of file
+var _0x1c66=['secondtransfererconnectedlinenum','secondtransfererconnectedlinename','origtransfereraccountcode','secondtransfererexten','origtransferercontext','attended','isNil','transfereechannel','transfertargetcalleridnum','transfertargetconnectedlinenum','transfertargetconnectedlinename','transfertargetcontext','transfertargetexten','transfertargetlinkedid','lodash','util','./utils','info','format','TRANSFER|%s','type','request','CreateVoiceTransferReport','blindtransfer','error','stack','attendedtransfer','origtransfererchannel','origtransferercalleridname'];(function(_0x1f8e3c,_0xfb7d09){var _0x3dc5be=function(_0x555e3e){while(--_0x555e3e){_0x1f8e3c['push'](_0x1f8e3c['shift']());}};_0x3dc5be(++_0xfb7d09);}(_0x1c66,0x1a4));var _0x61c6=function(_0x3b6892,_0x5dead0){_0x3b6892=_0x3b6892-0x0;var _0x514a1b=_0x1c66[_0x3b6892];return _0x514a1b;};'use strict';var _=require(_0x61c6('0x0'));var util=require(_0x61c6('0x1'));var utils=require(_0x61c6('0x2'));function writeDB(_0x24d02f){utils[_0x61c6('0x3')](util[_0x61c6('0x4')](_0x61c6('0x5'),_0x24d02f[_0x61c6('0x6')]));utils[_0x61c6('0x7')](_0x61c6('0x8'),_0x24d02f);}exports[_0x61c6('0x9')]=function(_0x478880){try{_0x478880[_0x61c6('0x6')]='blind';writeDB(_0x478880);}catch(_0x30931b){utils[_0x61c6('0xa')](_0x30931b[_0x61c6('0xb')]);}};exports[_0x61c6('0xc')]=function(_0x4d6261){try{_0x4d6261=_['assign'](_0x4d6261,{'transfererchannel':_0x4d6261[_0x61c6('0xd')],'transferercalleridnum':_0x4d6261['origtransferercalleridnum'],'transferercalleridname':_0x4d6261[_0x61c6('0xe')],'transfererconnectedlinenum':_0x4d6261[_0x61c6('0xf')],'transfererconnectedlinename':_0x4d6261[_0x61c6('0x10')],'transfereraccountcode':_0x4d6261[_0x61c6('0x11')],'transferercontext':_0x4d6261['secondtransferercontext'],'transfererexten':_0x4d6261[_0x61c6('0x12')],'transfererlinkedid':_0x4d6261['origtransfererlinkedid'],'context':_0x4d6261[_0x61c6('0x13')],'extension':_0x4d6261['origtransfererexten'],'type':_0x61c6('0x14')});if(_[_0x61c6('0x15')](_0x4d6261[_0x61c6('0x16')])){_0x4d6261=_['assign'](_0x4d6261,{'transfereechannel':_0x4d6261['transfertargetchannel'],'transfereecalleridnum':_0x4d6261[_0x61c6('0x17')],'transfereecalleridname':_0x4d6261['transfertargetcalleridname'],'transfereeconnectedlinenum':_0x4d6261[_0x61c6('0x18')],'transfereeconnectedlinename':_0x4d6261[_0x61c6('0x19')],'transfereeaccountcode':_0x4d6261['transfertargetaccountcode'],'transfereecontext':_0x4d6261[_0x61c6('0x1a')],'transfereeexten':_0x4d6261[_0x61c6('0x1b')],'transfereelinkedid':_0x4d6261[_0x61c6('0x1c')]});}writeDB(_0x4d6261);}catch(_0x1cb01e){utils[_0x61c6('0xa')](_0x1cb01e['stack']);}};
\ No newline at end of file
index ed48c7b..b30c045 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x29e3=['NOTFOUND','getUserByInterface','error','getUserByName','getVoiceQueueByName','type','acw','acwTimeout','GETVOICEQUEUEBYNAME|','addTime','add','seconds','YYYY-MM-DD\x20HH:mm:ss','subtractTime','subtract','format','diffTime','diff','now','isAfter','isBefore','jayson/promise','moment','bluebird','client','http','xdr','info','debug','stringify','request','catch','stack','GetUser','internal','name','then','result','length','FOUND'];(function(_0x151e5f,_0x52ab71){var _0x34319f=function(_0x35425a){while(--_0x35425a){_0x151e5f['push'](_0x151e5f['shift']());}};_0x34319f(++_0x52ab71);}(_0x29e3,0x155));var _0x329e=function(_0x413936,_0x5ee19b){_0x413936=_0x413936-0x0;var _0x4a5a75=_0x29e3[_0x413936];return _0x4a5a75;};'use strict';var jayson=require(_0x329e('0x0'));var moment=require(_0x329e('0x1'));var BPromise=require(_0x329e('0x2'));var client=jayson[_0x329e('0x3')][_0x329e('0x4')]({'port':0x2329});var logger=require('../../config/logger')(_0x329e('0x5'));exports[_0x329e('0x6')]=function(_0x12cebd){logger['info'](_0x12cebd);};exports['debug']=function(_0x32ca8b){logger[_0x329e('0x7')](JSON[_0x329e('0x8')](_0x32ca8b));};exports['error']=function(_0x556074){logger['error'](_0x556074['stack']);};exports[_0x329e('0x9')]=function(_0x88489f,_0x39d528){return client[_0x329e('0x9')](_0x88489f,{'body':_0x39d528})['then'](function(_0x23d277){logger[_0x329e('0x7')](JSON[_0x329e('0x8')](_0x23d277));})[_0x329e('0xa')](function(_0x3b8695){logger['error'](_0x3b8695[_0x329e('0xb')]);});};function getUser(_0x1338f8){return client['request'](_0x329e('0xc'),{'options':{'raw':!![],'attributes':['id',_0x329e('0xd'),_0x329e('0xe'),'interface'],'where':_0x1338f8,'limit':0x1}})[_0x329e('0xf')](function(_0x5533a0){logger[_0x329e('0x6')]('GETUSER|'+JSON[_0x329e('0x8')](_0x1338f8)+'|'+(_0x5533a0[_0x329e('0x10')][_0x329e('0x11')]?_0x329e('0x12'):_0x329e('0x13')));return _0x5533a0[_0x329e('0x10')][_0x329e('0x11')]?_0x5533a0['result'][0x0]:null;});}exports['getUserByInternal']=function(_0xeeadb4){return new BPromise(function(_0xd1f363,_0x1ac081){if(_0xeeadb4){return getUser({'internal':_0xeeadb4})['then'](function(_0x58ce61){return _0xd1f363(_0x58ce61);})[_0x329e('0xa')](function(_0x3562c8){logger['error'](_0x3562c8[_0x329e('0xb')]);return _0xd1f363(null);});}else{return _0xd1f363(null);}});};exports[_0x329e('0x14')]=function(_0x57b9cf){return new BPromise(function(_0x34e66c,_0x2c8b6c){if(_0x57b9cf){return getUser({'interface':_0x57b9cf})[_0x329e('0xf')](function(_0x5356a7){return _0x34e66c(_0x5356a7);})[_0x329e('0xa')](function(_0x438b20){logger[_0x329e('0x15')](_0x438b20[_0x329e('0xb')]);return _0x34e66c(null);});}else{return _0x34e66c(null);}});};exports[_0x329e('0x16')]=function(_0x27be0d){return new BPromise(function(_0x1eb544,_0x5460fc){if(_0x27be0d){return getUser({'name':_0x27be0d})[_0x329e('0xf')](function(_0x434161){return _0x1eb544(_0x434161);})[_0x329e('0xa')](function(_0x825c50){logger[_0x329e('0x15')](_0x825c50[_0x329e('0xb')]);return _0x1eb544(null);});}else{return _0x1eb544(null);}});};exports[_0x329e('0x17')]=function(_0x45463b){return new BPromise(function(_0x4f3243,_0x273e85){if(_0x45463b){return client[_0x329e('0x9')]('GetVoiceQueue',{'options':{'raw':!![],'attributes':['id',_0x329e('0xe'),_0x329e('0x18'),_0x329e('0x19'),_0x329e('0x1a')],'where':{'name':_0x45463b},'limit':0x1}})[_0x329e('0xf')](function(_0x37faed){logger[_0x329e('0x6')](_0x329e('0x1b')+_0x45463b+'|'+(_0x37faed[_0x329e('0x10')][_0x329e('0x11')]?'FOUND':'NOTFOUND'));return _0x4f3243(_0x37faed[_0x329e('0x10')][_0x329e('0x11')]?_0x37faed[_0x329e('0x10')][0x0]:null);})[_0x329e('0xa')](function(_0x5bf772){logger[_0x329e('0x15')](_0x5bf772['stack']);return _0x4f3243(null);});}else{return _0x4f3243(null);}});};exports[_0x329e('0x1c')]=function(_0x20b66f,_0x59e7fd){return moment(_0x20b66f)[_0x329e('0x1d')](_0x59e7fd,_0x329e('0x1e'))['format'](_0x329e('0x1f'));};exports[_0x329e('0x20')]=function(_0x1d875b,_0x4ff27f){return moment(_0x1d875b)[_0x329e('0x21')](_0x4ff27f,'seconds')[_0x329e('0x22')]('YYYY-MM-DD\x20HH:mm:ss');};exports[_0x329e('0x23')]=function(_0x335269,_0x1490ba){return moment(_0x335269)[_0x329e('0x24')](moment(_0x1490ba),_0x329e('0x1e'));};exports['sumTime']=function(_0x4605b2,_0x38eb46){return parseInt(_0x4605b2,0xa)+parseInt(_0x38eb46,0xa);};exports[_0x329e('0x25')]=function(){return moment()[_0x329e('0x22')](_0x329e('0x1f'));};exports['isAfter']=function(_0x1465d8,_0x320c8d){if(_0x320c8d){return moment(_0x1465d8)[_0x329e('0x26')](_0x320c8d);}else{return!![];}};exports[_0x329e('0x27')]=function(_0x5db51c,_0x561461){if(_0x561461){return moment(_0x5db51c)['isBefore'](_0x561461);}else if(_0x5db51c){return!![];}else{return![];}};
\ No newline at end of file
+var _0xdfc1=['then','stack','GetUser','internal','name','result','FOUND','length','catch','getVoiceQueueByName','GetVoiceQueue','acw','acwTimeout','GETVOICEQUEUEBYNAME|','NOTFOUND','addTime','add','seconds','YYYY-MM-DD\x20HH:mm:ss','subtractTime','subtract','diff','sumTime','now','format','isAfter','isBefore','jayson/promise','moment','bluebird','client','http','xdr','info','debug','stringify','error','request'];(function(_0x448ae2,_0x1676f5){var _0x4fdd34=function(_0x30e907){while(--_0x30e907){_0x448ae2['push'](_0x448ae2['shift']());}};_0x4fdd34(++_0x1676f5);}(_0xdfc1,0x1e3));var _0x1dfc=function(_0x44d4e9,_0x52d710){_0x44d4e9=_0x44d4e9-0x0;var _0x4c9bd2=_0xdfc1[_0x44d4e9];return _0x4c9bd2;};'use strict';var jayson=require(_0x1dfc('0x0'));var moment=require(_0x1dfc('0x1'));var BPromise=require(_0x1dfc('0x2'));var client=jayson[_0x1dfc('0x3')][_0x1dfc('0x4')]({'port':0x2329});var logger=require('../../config/logger')(_0x1dfc('0x5'));exports[_0x1dfc('0x6')]=function(_0x14d38e){logger[_0x1dfc('0x6')](_0x14d38e);};exports[_0x1dfc('0x7')]=function(_0x4b086c){logger['debug'](JSON[_0x1dfc('0x8')](_0x4b086c));};exports[_0x1dfc('0x9')]=function(_0x4eb689){logger[_0x1dfc('0x9')](_0x4eb689['stack']);};exports['request']=function(_0x489d86,_0xb3a127){return client[_0x1dfc('0xa')](_0x489d86,{'body':_0xb3a127})[_0x1dfc('0xb')](function(_0x4f0804){logger[_0x1dfc('0x7')](JSON['stringify'](_0x4f0804));})['catch'](function(_0x36bcb2){logger[_0x1dfc('0x9')](_0x36bcb2[_0x1dfc('0xc')]);});};function getUser(_0x2cc1c5){return client[_0x1dfc('0xa')](_0x1dfc('0xd'),{'options':{'raw':!![],'attributes':['id',_0x1dfc('0xe'),_0x1dfc('0xf'),'interface'],'where':_0x2cc1c5,'limit':0x1}})['then'](function(_0x496040){logger[_0x1dfc('0x6')]('GETUSER|'+JSON['stringify'](_0x2cc1c5)+'|'+(_0x496040[_0x1dfc('0x10')]['length']?_0x1dfc('0x11'):'NOTFOUND'));return _0x496040[_0x1dfc('0x10')][_0x1dfc('0x12')]?_0x496040[_0x1dfc('0x10')][0x0]:null;});}exports['getUserByInternal']=function(_0x2dd59c){return new BPromise(function(_0x1ba5b1,_0x1cfb5b){if(_0x2dd59c){return getUser({'internal':_0x2dd59c})[_0x1dfc('0xb')](function(_0x4ba1fd){return _0x1ba5b1(_0x4ba1fd);})['catch'](function(_0x2f550e){logger['error'](_0x2f550e[_0x1dfc('0xc')]);return _0x1ba5b1(null);});}else{return _0x1ba5b1(null);}});};exports['getUserByInterface']=function(_0x4dddab){return new BPromise(function(_0x21a7a9,_0x1e72e7){if(_0x4dddab){return getUser({'interface':_0x4dddab})[_0x1dfc('0xb')](function(_0xa689cc){return _0x21a7a9(_0xa689cc);})['catch'](function(_0x2c150a){logger['error'](_0x2c150a[_0x1dfc('0xc')]);return _0x21a7a9(null);});}else{return _0x21a7a9(null);}});};exports['getUserByName']=function(_0x4e8e7c){return new BPromise(function(_0x17862d,_0x49bcbd){if(_0x4e8e7c){return getUser({'name':_0x4e8e7c})[_0x1dfc('0xb')](function(_0x377c45){return _0x17862d(_0x377c45);})[_0x1dfc('0x13')](function(_0x50d5df){logger['error'](_0x50d5df[_0x1dfc('0xc')]);return _0x17862d(null);});}else{return _0x17862d(null);}});};exports[_0x1dfc('0x14')]=function(_0x56ba8e){return new BPromise(function(_0x48812b,_0x2368b4){if(_0x56ba8e){return client[_0x1dfc('0xa')](_0x1dfc('0x15'),{'options':{'raw':!![],'attributes':['id',_0x1dfc('0xf'),'type',_0x1dfc('0x16'),_0x1dfc('0x17')],'where':{'name':_0x56ba8e},'limit':0x1}})[_0x1dfc('0xb')](function(_0x2be9c2){logger[_0x1dfc('0x6')](_0x1dfc('0x18')+_0x56ba8e+'|'+(_0x2be9c2[_0x1dfc('0x10')][_0x1dfc('0x12')]?_0x1dfc('0x11'):_0x1dfc('0x19')));return _0x48812b(_0x2be9c2[_0x1dfc('0x10')][_0x1dfc('0x12')]?_0x2be9c2[_0x1dfc('0x10')][0x0]:null);})[_0x1dfc('0x13')](function(_0x2737dd){logger[_0x1dfc('0x9')](_0x2737dd[_0x1dfc('0xc')]);return _0x48812b(null);});}else{return _0x48812b(null);}});};exports[_0x1dfc('0x1a')]=function(_0x509c3e,_0x325e11){return moment(_0x509c3e)[_0x1dfc('0x1b')](_0x325e11,_0x1dfc('0x1c'))['format'](_0x1dfc('0x1d'));};exports[_0x1dfc('0x1e')]=function(_0x1e2ddd,_0x327d8){return moment(_0x1e2ddd)[_0x1dfc('0x1f')](_0x327d8,_0x1dfc('0x1c'))['format'](_0x1dfc('0x1d'));};exports['diffTime']=function(_0x24bb34,_0x106c99){return moment(_0x24bb34)[_0x1dfc('0x20')](moment(_0x106c99),_0x1dfc('0x1c'));};exports[_0x1dfc('0x21')]=function(_0x4341d2,_0x2d972c){return parseInt(_0x4341d2,0xa)+parseInt(_0x2d972c,0xa);};exports[_0x1dfc('0x22')]=function(){return moment()[_0x1dfc('0x23')]('YYYY-MM-DD\x20HH:mm:ss');};exports[_0x1dfc('0x24')]=function(_0x4d9df9,_0x54ef4d){if(_0x54ef4d){return moment(_0x4d9df9)[_0x1dfc('0x24')](_0x54ef4d);}else{return!![];}};exports[_0x1dfc('0x25')]=function(_0x26e02d,_0x1f00bb){if(_0x1f00bb){return moment(_0x26e02d)[_0x1dfc('0x25')](_0x1f00bb);}else if(_0x26e02d){return!![];}else{return![];}};
\ No newline at end of file